[
  {
    "path": ".github/FUNDING.yml",
    "content": "github: [BurntSushi]\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\n\nupdates:\n  - package-ecosystem: github-actions\n    directory: \"/\"\n    schedule:\n      interval: semiannually\n    open-pull-requests-limit: 1\n    cooldown:\n      default-days: 30\n    groups:\n      actions:\n        patterns:\n          - \"*\"\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: ci\non:\n  pull_request:\n    branches:\n    - master\n  push:\n    branches:\n    - master\n  schedule:\n  - cron: '00 01 * * *'\n\n# The section is needed to drop write-all permissions that are granted on\n# `schedule` event. By specifying any permission explicitly all others are set\n# to none. By using the principle of least privilege the damage a compromised\n# workflow can do (because of an injection or compromised third party tool or\n# action) is restricted. Currently the worklow doesn't need any additional\n# permission except for pulling the code. Adding labels to issues, commenting\n# on pull-requests, etc. may need additional permissions:\n#\n# Syntax for this section:\n# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions\n#\n# Reference for how to assign permissions on a job-by-job basis:\n# https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs\n#\n# Reference for available permissions that we can enable if needed:\n# https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token\npermissions:\n  # to fetch code (actions/checkout)\n  contents: read\n\njobs:\n  # Baseline testing across a number of different targets.\n  test:\n    env:\n      # For some builds, we use cross to test on 32-bit and big-endian\n      # systems.\n      CARGO: cargo\n      # When CARGO is set to CROSS, TARGET is set to `--target matrix.target`.\n      # Note that we only use cross on Linux, so setting a target on a\n      # different OS will just use normal cargo.\n      TARGET:\n      # Bump this as appropriate. We pin to a version to make sure CI\n      # continues to work as cross releases in the past have broken things\n      # in subtle ways.\n      CROSS_VERSION: v0.2.5\n      # Make quickcheck run more tests for hopefully better coverage.\n      QUICKCHECK_TESTS: 100000\n    runs-on: ${{ matrix.os }}\n    strategy:\n      fail-fast: false\n      matrix:\n        include:\n        - build: stable\n          os: ubuntu-latest\n          rust: stable\n        - build: beta\n          os: ubuntu-latest\n          rust: beta\n        - build: nightly\n          os: ubuntu-latest\n          rust: nightly\n        - build: macos\n          os: macos-latest\n          rust: stable\n        - build: win-msvc\n          os: windows-latest\n          rust: stable\n        - build: win-gnu\n          os: windows-latest\n          rust: stable-x86_64-gnu\n        - build: stable-x86\n          os: ubuntu-latest\n          rust: stable\n          target: i686-unknown-linux-gnu\n        # This is kind of a stand-in for Apple silicon since we can't currently\n        # use GitHub Actions with Apple silicon.\n        - build: stable-aarch64\n          os: ubuntu-latest\n          rust: stable\n          target: aarch64-unknown-linux-gnu\n        - build: stable-powerpc64\n          os: ubuntu-latest\n          rust: stable\n          target: powerpc64-unknown-linux-gnu\n        - build: stable-s390x\n          os: ubuntu-latest\n          rust: stable\n          target: s390x-unknown-linux-gnu\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n      with:\n        persist-credentials: false\n    - name: Install Rust\n      uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # v1\n      with:\n        toolchain: ${{ matrix.rust }}\n    - name: Use Cross\n      if: matrix.os == 'ubuntu-latest' && matrix.target != ''\n      run: |\n        # In the past, new releases of 'cross' have broken CI. So for now, we\n        # pin it. We also use their pre-compiled binary releases because cross\n        # has over 100 dependencies and takes a bit to compile.\n        dir=\"$RUNNER_TEMP/cross-download\"\n        mkdir \"$dir\"\n        echo \"$dir\" >> $GITHUB_PATH\n        cd \"$dir\"\n        curl -LO \"https://github.com/cross-rs/cross/releases/download/$CROSS_VERSION/cross-x86_64-unknown-linux-musl.tar.gz\"\n        tar xf cross-x86_64-unknown-linux-musl.tar.gz\n        echo \"CARGO=cross\" >> $GITHUB_ENV\n        echo \"TARGET=--target ${{ matrix.target }}\" >> $GITHUB_ENV\n    - name: Show command used for Cargo\n      run: |\n        echo \"cargo command is: ${{ env.CARGO }}\"\n        echo \"target flag is: ${{ env.TARGET }}\"\n    - name: Show CPU info for debugging\n      if: matrix.os == 'ubuntu-latest'\n      run: lscpu\n    - name: Basic build\n      run: ${{ env.CARGO }} build --verbose $TARGET\n    - name: Build docs\n      run: ${{ env.CARGO }} doc --verbose $TARGET\n    - name: Show byte order for debugging\n      run: ${{ env.CARGO }} test --verbose $TARGET byte_order -- --nocapture\n    - name: Run tests\n      run: ${{ env.CARGO }} test --verbose\n    - name: Run with only 'alloc' enabled\n      run: ${{ env.CARGO }} test --verbose --no-default-features --features alloc\n    - name: Run tests without any features enabled (core-only)\n      run: ${{ env.CARGO }} test --verbose --no-default-features\n    - name: Run tests with miscellaneous features\n      run: ${{ env.CARGO }} test --verbose --features logging\n\n  # Setup and run tests on the wasm32-wasip1 target via wasmtime.\n  wasm:\n    runs-on: ubuntu-latest\n    env:\n      # The version of wasmtime to download and install.\n      WASMTIME_VERSION: 30.0.1\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n      with:\n        persist-credentials: false\n    - name: Install Rust\n      uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # v1\n      with:\n        toolchain: stable\n    - name: Add wasm32-wasip1 target\n      run: rustup target add wasm32-wasip1\n    - name: Download and install Wasmtime\n      run: |\n        echo \"CARGO_BUILD_TARGET=wasm32-wasip1\" >> $GITHUB_ENV\n        echo \"RUSTFLAGS=-Ctarget-feature=+simd128\" >> $GITHUB_ENV\n        curl -LO https://github.com/bytecodealliance/wasmtime/releases/download/v$WASMTIME_VERSION/wasmtime-v$WASMTIME_VERSION-x86_64-linux.tar.xz\n        tar xvf wasmtime-v$WASMTIME_VERSION-x86_64-linux.tar.xz\n        echo `pwd`/wasmtime-v$WASMTIME_VERSION-x86_64-linux >> $GITHUB_PATH\n        echo \"CARGO_TARGET_WASM32_WASIP1_RUNNER=wasmtime run --wasm simd --\" >> $GITHUB_ENV\n    - name: Basic build\n      run: cargo build --verbose\n    - name: Run tests\n      run: cargo test --verbose\n    - name: Run with only 'alloc' enabled\n      run: cargo test --verbose --no-default-features --features alloc\n    - name: Run tests without any features enabled (core-only)\n      run: cargo test --verbose --no-default-features\n\n  # Setup and run tests on the wasm32-wasip1 target via wasmtime, but without\n  # simd128 enabled.\n  wasm-no-simd128:\n    runs-on: ubuntu-latest\n    env:\n      # The version of wasmtime to download and install.\n      WASMTIME_VERSION: 30.0.1\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n      with:\n        persist-credentials: false\n    - name: Install Rust\n      uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # v1\n      with:\n        toolchain: stable\n    - name: Add wasm32-wasip1 target\n      run: rustup target add wasm32-wasip1\n    - name: Download and install Wasmtime\n      run: |\n        echo \"CARGO_BUILD_TARGET=wasm32-wasip1\" >> $GITHUB_ENV\n        echo \"RUSTFLAGS=-Ctarget-feature=-simd128\" >> $GITHUB_ENV\n        curl -LO https://github.com/bytecodealliance/wasmtime/releases/download/v$WASMTIME_VERSION/wasmtime-v$WASMTIME_VERSION-x86_64-linux.tar.xz\n        tar xvf wasmtime-v$WASMTIME_VERSION-x86_64-linux.tar.xz\n        echo `pwd`/wasmtime-v$WASMTIME_VERSION-x86_64-linux >> $GITHUB_PATH\n        echo \"CARGO_TARGET_WASM32_WASIP1_RUNNER=wasmtime run --\" >> $GITHUB_ENV\n    - name: Basic build\n      run: cargo build --verbose\n    - name: Run tests\n      run: cargo test --verbose\n    - name: Run with only 'alloc' enabled\n      run: cargo test --verbose --no-default-features --features alloc\n    - name: Run tests without any features enabled (core-only)\n      run: cargo test --verbose --no-default-features\n\n  # This job uses a target to build the memchr crate on x86-64 but *without*\n  # SSE/AVX target features. This is relevant for virtually all OS kernels.\n  build-for-x86-64-but-non-sse-target:\n    runs-on: ubuntu-latest\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n      with:\n        persist-credentials: false\n    - name: Install Rust\n      uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # v1\n      with:\n        toolchain: stable\n        targets: x86_64-unknown-none\n    - name: Build for x86_64-unknown-none with only 'alloc' enabled\n      run: cargo build --verbose --no-default-features --features alloc --target x86_64-unknown-none\n    - name: Run tests for x86_64-unknown-linux-gnu without SSE\n      run: cargo test --verbose\n      env:\n        RUSTFLAGS: -C target-feature=-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-3dnow,-3dnowa,-avx,-avx2,+soft-float\n    - name: Run tests for x86_64-unknown-linux-gnu without SSE with only 'alloc' enabled\n      run: cargo test --verbose --no-default-features --features alloc\n      env:\n        RUSTFLAGS: -C target-feature=-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-3dnow,-3dnowa,-avx,-avx2,+soft-float\n\n  # This job runs a stripped down version of CI to test the MSRV. The specific\n  # reason for doing this is that dev-dependencies tend to evolve more quickly.\n  # There isn't as tight of a control on them because, well, they're only used\n  # in tests and their MSRV doesn't matter as much.\n  #\n  # It is a bit unfortunate that our MSRV test is basically just \"build it\"\n  # and pass if that works. But usually MSRV is broken by compilation problems\n  # and not runtime behavior. So this is in practice good enough.\n  msrv:\n    runs-on: ubuntu-latest\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n      with:\n        persist-credentials: false\n    - name: Install Rust\n      uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # v1\n      with:\n        toolchain: 1.61.0\n    - name: Basic build\n      run: cargo build --verbose\n    - name: Build docs\n      run: cargo doc --verbose\n\n  # Runs miri on memchr's test suite. This doesn't quite cover everything. Some\n  # tests (especially quickcheck) are disabled when building with miri because\n  # of how slow miri runs. But it still gives us decent coverage.\n  miri:\n    runs-on: ubuntu-latest\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n      with:\n        persist-credentials: false\n    - name: Install Rust\n      uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # v1\n      with:\n        # We use nightly here so that we can use miri I guess?\n        toolchain: nightly\n        components: miri\n    - name: Run full test suite\n      run: cargo miri test --verbose\n\n  # Tests that memchr's benchmark suite builds and passes all tests.\n  rebar:\n    runs-on: ubuntu-latest\n    env:\n      # The version of wasmtime to download and install.\n      WASMTIME_VERSION: 30.0.1\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n      with:\n        persist-credentials: false\n    - name: Install Rust\n      uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # v1\n      with:\n        toolchain: stable\n    - name: Add wasm32-wasip1 target\n      run: rustup target add wasm32-wasip1\n    - name: Download and install Wasmtime\n      run: |\n        # Note that we don't have to set CARGO_BUILD_TARGET and other\n        # environment variables like we do for the `wasm` job. This is because\n        # `rebar` knows how to set them itself and only when running the wasm\n        # engines.\n        curl -LO https://github.com/bytecodealliance/wasmtime/releases/download/v$WASMTIME_VERSION/wasmtime-v$WASMTIME_VERSION-x86_64-linux.tar.xz\n        tar xvf wasmtime-v$WASMTIME_VERSION-x86_64-linux.tar.xz\n        echo `pwd`/wasmtime-v$WASMTIME_VERSION-x86_64-linux >> $GITHUB_PATH\n    - name: Install rebar\n      run: cargo install --git https://github.com/BurntSushi/rebar rebar\n    - name: Build all rebar engines\n      run: rebar build\n    - name: Run all benchmarks as tests\n      run: rebar measure --test\n\n  # Tests that everything is formatted correctly.\n  rustfmt:\n    runs-on: ubuntu-latest\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n      with:\n        persist-credentials: false\n    - name: Install Rust\n      uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9 # v1\n      with:\n        toolchain: stable\n        components: rustfmt\n    - name: Check formatting\n      run: |\n        cargo fmt --all -- --check\n"
  },
  {
    "path": ".gitignore",
    "content": ".*.swp\ndoc\ntags\nexamples/ss10pusa.csv\nbuild\ntarget\nCargo.lock\nscratch*\nbench_large/huge\ntmp/\n"
  },
  {
    "path": ".ignore",
    "content": "!.github\n"
  },
  {
    "path": ".vim/coc-settings.json",
    "content": "{\n  \"rust-analyzer.cargo.allFeatures\": false,\n  \"rust-analyzer.linkedProjects\": [\n    \"benchmarks/engines/libc/Cargo.toml\",\n    \"benchmarks/engines/rust-bytecount/Cargo.toml\",\n    \"benchmarks/engines/rust-jetscii/Cargo.toml\",\n    \"benchmarks/engines/rust-memchr/Cargo.toml\",\n    \"benchmarks/engines/rust-memchrold/Cargo.toml\",\n    \"benchmarks/engines/rust-sliceslice/Cargo.toml\",\n    \"benchmarks/engines/rust-std/Cargo.toml\",\n    \"benchmarks/engines/stringzilla/Cargo.toml\",\n    \"benchmarks/shared/Cargo.toml\",\n    \"fuzz/Cargo.toml\",\n    \"Cargo.toml\"\n  ]\n}\n"
  },
  {
    "path": "COPYING",
    "content": "This project is dual-licensed under the Unlicense and MIT licenses.\n\nYou may use this code under the terms of either license.\n"
  },
  {
    "path": "Cargo.toml",
    "content": "[package]\nname = \"memchr\"\nversion = \"2.8.0\"  #:version\nauthors = [\"Andrew Gallant <jamslam@gmail.com>\", \"bluss\"]\ndescription = \"\"\"\nProvides extremely fast (uses SIMD on x86_64, aarch64 and wasm32) routines for\n1, 2 or 3 byte search and single substring search.\n\"\"\"\ndocumentation = \"https://docs.rs/memchr/\"\nhomepage = \"https://github.com/BurntSushi/memchr\"\nrepository = \"https://github.com/BurntSushi/memchr\"\nreadme = \"README.md\"\nkeywords = [\"memchr\", \"memmem\", \"substring\", \"find\", \"search\"]\nlicense = \"Unlicense OR MIT\"\nexclude = [\"/.github\", \"/benchmarks\", \"/fuzz\", \"/scripts\", \"/tmp\"]\nedition = \"2021\"\nrust-version = \"1.61\"\n\n[lib]\nname = \"memchr\"\nbench = false\n\n[features]\ndefault = [\"std\"]\n\n# The 'std' feature permits the memchr crate to use the standard library. This\n# permits this crate to use runtime CPU feature detection to automatically\n# accelerate searching via vector instructions. Without the standard library,\n# this automatic detection is not possible.\nstd = [\"alloc\"]\n\n# The 'alloc' feature enables some APIs that require allocation, such as\n# 'Finder::into_owned'. Note that this feature does not enable runtime CPU\n# feature detection. That still requires 'std'.\nalloc = []\n\n# When enabled (it's disabled by default), the `log` crate will be used to\n# emit a spattering of log messages. For the most part, the log messages are\n# meant to indicate what strategies are being employed. For example, whether\n# a vector or a scalar algorithm is used for substring search. This can be\n# useful when debugging performance problems.\n#\n# This is disabled by default.\nlogging = [\"dep:log\"]\n\n# The 'use_std' feature is DEPRECATED. It will be removed in memchr 3. Until\n# then, it is alias for the 'std' feature.\nuse_std = [\"std\"]\n\n# The 'libc' feature has been DEPRECATED and no longer has any effect.\nlibc = []\n\n# Internal feature, only used when building as part of libstd, not part of the\n# stable interface of this crate.\nrustc-dep-of-std = ['core']\n\n[dependencies]\n# Only used when the `logging` feature is enabled (disabled by default).\nlog = { version = \"0.4.20\", optional = true }\n# Internal feature, only used when building as part of libstd, not part of the\n# stable interface of this crate.\ncore = { version = '1.0.0', optional = true, package = 'rustc-std-workspace-core' }\n\n[dev-dependencies]\nquickcheck = { version = \"1.0.3\", default-features = false }\n\n[profile.release]\ndebug = true\n\n[profile.bench]\ndebug = true\n\n[profile.test]\nopt-level = 3\ndebug = true\n\n[package.metadata.docs.rs]\nrustdoc-args = [\"--generate-link-to-definition\"]\n"
  },
  {
    "path": "LICENSE-MIT",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Andrew Gallant\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "memchr\n======\nThis library provides heavily optimized routines for string search primitives.\n\n[![Build status](https://github.com/BurntSushi/memchr/workflows/ci/badge.svg)](https://github.com/BurntSushi/memchr/actions)\n[![Crates.io](https://img.shields.io/crates/v/memchr.svg)](https://crates.io/crates/memchr)\n\nDual-licensed under MIT or the [UNLICENSE](https://unlicense.org/).\n\n\n### Documentation\n\n[https://docs.rs/memchr](https://docs.rs/memchr)\n\n\n### Overview\n\n* The top-level module provides routines for searching for 1, 2 or 3 bytes\n  in the forward or reverse direction. When searching for more than one byte,\n  positions are considered a match if the byte at that position matches any\n  of the bytes.\n* The `memmem` sub-module provides forward and reverse substring search\n  routines.\n\nIn all such cases, routines operate on `&[u8]` without regard to encoding. This\nis exactly what you want when searching either UTF-8 or arbitrary bytes.\n\n### Compiling without the standard library\n\nmemchr links to the standard library by default, but you can disable the\n`std` feature if you want to use it in a `#![no_std]` crate:\n\n```toml\n[dependencies]\nmemchr = { version = \"2\", default-features = false }\n```\n\nOn `x86_64` platforms, when the `std` feature is disabled, the SSE2 accelerated\nimplementations will be used. When `std` is enabled, AVX2 accelerated\nimplementations will be used if the CPU is determined to support it at runtime.\n\nSIMD accelerated routines are also available on the `wasm32` and `aarch64`\ntargets. The `std` feature is not required to use them.\n\nWhen a SIMD version is not available, then this crate falls back to\n[SWAR](https://en.wikipedia.org/wiki/SWAR) techniques.\n\n### Minimum Rust version policy\n\nThis crate's minimum supported `rustc` version is `1.61.0`.\n\nThe current policy is that the minimum Rust version required to use this crate\ncan be increased in minor version updates. For example, if `crate 1.0` requires\nRust 1.20.0, then `crate 1.0.z` for all values of `z` will also require Rust\n1.20.0 or newer. However, `crate 1.y` for `y > 0` may require a newer minimum\nversion of Rust.\n\nIn general, this crate will be conservative with respect to the minimum\nsupported version of Rust.\n\n\n### Testing strategy\n\nGiven the complexity of the code in this crate, along with the pervasive use\nof `unsafe`, this crate has an extensive testing strategy. It combines multiple\napproaches:\n\n* Hand-written tests.\n* Exhaustive-style testing meant to exercise all possible branching and offset\n  calculations.\n* Property based testing through [`quickcheck`](https://github.com/BurntSushi/quickcheck).\n* Fuzz testing through [`cargo fuzz`](https://github.com/rust-fuzz/cargo-fuzz).\n* A huge suite of benchmarks that are also run as tests. Benchmarks always\n  confirm that the expected result occurs.\n\nImprovements to the testing infrastructure are very welcome.\n\n\n### Algorithms used\n\nAt time of writing, this crate's implementation of substring search actually\nhas a few different algorithms to choose from depending on the situation.\n\n* For very small haystacks,\n  [Rabin-Karp](https://en.wikipedia.org/wiki/Rabin%E2%80%93Karp_algorithm)\n  is used to reduce latency. Rabin-Karp has very small overhead and can often\n  complete before other searchers have even been constructed.\n* For small needles, a variant of the\n  [\"Generic SIMD\"](http://0x80.pl/articles/simd-strfind.html#algorithm-1-generic-simd)\n  algorithm is used. Instead of using the first and last bytes, a heuristic is\n  used to select bytes based on a background distribution of byte frequencies.\n* In all other cases,\n  [Two-Way](https://en.wikipedia.org/wiki/Two-way_string-matching_algorithm)\n  is used. If possible, a prefilter based on the \"Generic SIMD\" algorithm\n  linked above is used to find candidates quickly. A dynamic heuristic is used\n  to detect if the prefilter is ineffective, and if so, disables it.\n\n\n### Why is the standard library's substring search so much slower?\n\nWe'll start by establishing what the difference in performance actually\nis. There are two relevant benchmark classes to consider: `prebuilt` and\n`oneshot`. The `prebuilt` benchmarks are designed to measure---to the extent\npossible---search time only. That is, the benchmark first starts by building a\nsearcher and then only tracking the time for _using_ the searcher:\n\n```\n$ rebar rank benchmarks/record/x86_64/2023-08-26.csv --intersection -e memchr/memmem/prebuilt -e std/memmem/prebuilt\nEngine                       Version                   Geometric mean of speed ratios  Benchmark count\n------                       -------                   ------------------------------  ---------------\nrust/memchr/memmem/prebuilt  2.5.0                     1.03                            53\nrust/std/memmem/prebuilt     1.73.0-nightly 180dffba1  6.50                            53\n```\n\nConversely, the `oneshot` benchmark class measures the time it takes to both\nbuild the searcher _and_ use it:\n\n```\n$ rebar rank benchmarks/record/x86_64/2023-08-26.csv --intersection -e memchr/memmem/oneshot -e std/memmem/oneshot\nEngine                      Version                   Geometric mean of speed ratios  Benchmark count\n------                      -------                   ------------------------------  ---------------\nrust/memchr/memmem/oneshot  2.5.0                     1.04                            53\nrust/std/memmem/oneshot     1.73.0-nightly 180dffba1  5.26                            53\n```\n\n**NOTE:** Replace `rebar rank` with `rebar cmp` in the above commands to\nexplore the specific benchmarks and their differences.\n\nSo in both cases, this crate is quite a bit faster over a broad sampling of\nbenchmarks regardless of whether you measure only search time or search time\nplus construction time. The difference is a little smaller when you include\nconstruction time in your measurements.\n\nThese two different types of benchmark classes make for a nice segue into\none reason why the standard library's substring search can be slower: API\ndesign. In the standard library, the only APIs available to you require\none to re-construct the searcher for every search. While you can benefit\nfrom building a searcher once and iterating over all matches in a single\nstring, you cannot reuse that searcher to search other strings. This might\ncome up when, for example, searching a file one line at a time. You'll need\nto re-build the searcher for every line searched, and this can [really\nmatter][burntsushi-bstr-blog].\n\n**NOTE:** The `prebuilt` benchmark for the standard library can't actually\navoid measuring searcher construction at some level, because there is no API\nfor it. Instead, the benchmark consists of building the searcher once and then\nfinding all matches in a single string via an iterator. This tends to\napproximate a benchmark where searcher construction isn't measured, but it\nisn't perfect. While this means the comparison is not strictly\napples-to-apples, it does reflect what is maximally possible with the standard\nlibrary, and thus reflects the best that one could do in a real world scenario.\n\nWhile there is more to the story than just API design here, it's important to\npoint out that even if the standard library's substring search were a precise\nclone of this crate internally, it would still be at a disadvantage in some\nworkloads because of its API. (The same also applies to C's standard library\n`memmem` function. There is no way to amortize construction of the searcher.\nYou need to pay for it on every call.)\n\nThe other reason for the difference in performance is that\nthe standard library has trouble using SIMD. In particular, substring search\nis implemented in the `core` library, where platform specific code generally\ncan't exist. That's an issue because in order to utilize SIMD beyond SSE2\nwhile maintaining portable binaries, one needs to use [dynamic CPU feature\ndetection][dynamic-cpu], and that in turn requires platform specific code.\nWhile there is [an RFC for enabling target feature detection in\n`core`][core-feature], it doesn't yet exist.\n\nThe bottom line here is that `core`'s substring search implementation is\nlimited to making use of SSE2, but not AVX.\n\nStill though, this crate does accelerate substring search even when only SSE2\nis available. The standard library could therefore adopt the techniques in this\ncrate just for SSE2. The reason why that hasn't happened yet isn't totally\nclear to me. It likely needs a champion to push it through. The standard\nlibrary tends to be more conservative in these things. With that said, the\nstandard library does use some [SSE2 acceleration on `x86-64`][std-sse2] added\nin [this PR][std-sse2-pr]. However, at the time of writing, it is only used\nfor short needles and doesn't use the frequency based heuristics found in this\ncrate.\n\n**NOTE:** Another thing worth mentioning is that the standard library's\nsubstring search routine requires that both the needle and haystack have type\n`&str`. Unless you can assume that your data is valid UTF-8, building a `&str`\nwill come with the overhead of UTF-8 validation. This may in turn result in\noverall slower searching depending on your workload. In contrast, the `memchr`\ncrate permits both the needle and the haystack to have type `&[u8]`, where\n`&[u8]` can be created from a `&str` with zero cost. Therefore, the substring\nsearch in this crate is strictly more flexible than what the standard library\nprovides.\n\n[burntsushi-bstr-blog]: https://blog.burntsushi.net/bstr/#motivation-based-on-performance\n[dynamic-cpu]: https://doc.rust-lang.org/std/arch/index.html#dynamic-cpu-feature-detection\n[core-feature]: https://github.com/rust-lang/rfcs/pull/3469\n[std-sse2]: https://github.com/rust-lang/rust/blob/bf9229a2e366b4c311f059014a4aa08af16de5d8/library/core/src/str/pattern.rs#L1719-L1857\n[std-sse2-pr]: https://github.com/rust-lang/rust/pull/103779\n"
  },
  {
    "path": "UNLICENSE",
    "content": "This is free and unencumbered software released into the public domain.\n\nAnyone is free to copy, modify, publish, use, compile, sell, or\ndistribute this software, either in source code form or as a compiled\nbinary, for any purpose, commercial or non-commercial, and by any\nmeans.\n\nIn jurisdictions that recognize copyright laws, the author or authors\nof this software dedicate any and all copyright interest in the\nsoftware to the public domain. We make this dedication for the benefit\nof the public at large and to the detriment of our heirs and\nsuccessors. We intend this dedication to be an overt act of\nrelinquishment in perpetuity of all present and future rights to this\nsoftware under copyright law.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR\nOTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\nARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n\nFor more information, please refer to <http://unlicense.org/>\n"
  },
  {
    "path": "benchmarks/definitions/memchr/sherlock/common.toml",
    "content": "[[bench]]\nmodel = \"count-bytes\"\nname = \"huge1\"\nregex = 'a'\nhaystack = { path = \"sherlock/huge.txt\" }\ncount = 35_301\nengines = [\n  \"libc/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot/wasm32\",\n  \"rust/memchr/memchr/onlycount\",\n  \"rust/memchr/memchr/onlycount/wasm32\",\n  \"rust/memchr/memchr/oneshot\",\n  \"rust/memchr/memchr/prebuilt\",\n  \"rust/memchr/memchr/fallback\",\n  \"rust/memchr/memchr/naive\",\n  \"rust/memchr/memchr/wasm32\",\n  \"rust/memchr/memrchr\",\n  \"rust/memchrold/memchr/oneshot\",\n  \"rust/memchrold/memchr/prebuilt\",\n  \"rust/memchrold/memchr/naive\",\n  \"rust/memchrold/memrchr\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"huge2\"\nregex = ['a', 't']\nhaystack = { path = \"sherlock/huge.txt\" }\ncount = 74_569\nengines = [\n  \"rust/memchr/memchr2\",\n  \"rust/memchr/memchr2/fallback\",\n  \"rust/memchr/memchr2/naive\",\n  \"rust/memchr/memchr2/wasm32\",\n  \"rust/memchr/memrchr2\",\n  \"rust/memchrold/memchr2\",\n  \"rust/memchrold/memrchr2\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"huge3\"\nregex = ['a', 't', 'o']\nhaystack = { path = \"sherlock/huge.txt\" }\ncount = 109_064\nengines = [\n  \"rust/memchr/memchr3\",\n  \"rust/memchr/memchr3/fallback\",\n  \"rust/memchr/memchr3/naive\",\n  \"rust/memchr/memchr3/wasm32\",\n  \"rust/memchr/memrchr3\",\n  \"rust/memchrold/memchr3\",\n  \"rust/memchrold/memrchr3\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"small1\"\nregex = 'a'\nhaystack = { path = \"sherlock/small.txt\" }\ncount = 44\nengines = [\n  \"libc/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot/wasm32\",\n  \"rust/memchr/memchr/onlycount\",\n  \"rust/memchr/memchr/onlycount/wasm32\",\n  \"rust/memchr/memchr/oneshot\",\n  \"rust/memchr/memchr/prebuilt\",\n  \"rust/memchr/memchr/fallback\",\n  \"rust/memchr/memchr/naive\",\n  \"rust/memchr/memchr/wasm32\",\n  \"rust/memchr/memrchr\",\n  \"rust/memchrold/memchr/oneshot\",\n  \"rust/memchrold/memchr/prebuilt\",\n  \"rust/memchrold/memchr/naive\",\n  \"rust/memchrold/memrchr\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"small2\"\nregex = ['a', 'h']\nhaystack = { path = \"sherlock/small.txt\" }\ncount = 78\nengines = [\n  \"rust/memchr/memchr2\",\n  \"rust/memchr/memchr2/fallback\",\n  \"rust/memchr/memchr2/naive\",\n  \"rust/memchr/memchr2/wasm32\",\n  \"rust/memchr/memrchr2\",\n  \"rust/memchrold/memchr2\",\n  \"rust/memchrold/memrchr2\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"small3\"\nregex = ['a', 'h', 'i']\nhaystack = { path = \"sherlock/small.txt\" }\ncount = 113\nengines = [\n  \"rust/memchr/memchr3\",\n  \"rust/memchr/memchr3/fallback\",\n  \"rust/memchr/memchr3/naive\",\n  \"rust/memchr/memchr3/wasm32\",\n  \"rust/memchr/memrchr3\",\n  \"rust/memchrold/memchr3\",\n  \"rust/memchrold/memrchr3\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"tiny1\"\nregex = ' '\nhaystack = { path = \"sherlock/tiny.txt\" }\ncount = 11\nengines = [\n  \"libc/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot/wasm32\",\n  \"rust/memchr/memchr/onlycount\",\n  \"rust/memchr/memchr/onlycount/wasm32\",\n  \"rust/memchr/memchr/oneshot\",\n  \"rust/memchr/memchr/prebuilt\",\n  \"rust/memchr/memchr/fallback\",\n  \"rust/memchr/memchr/naive\",\n  \"rust/memchr/memchr/wasm32\",\n  \"rust/memchr/memrchr\",\n  \"rust/memchrold/memchr/oneshot\",\n  \"rust/memchrold/memchr/prebuilt\",\n  \"rust/memchrold/memchr/naive\",\n  \"rust/memchrold/memrchr\",\n]\n"
  },
  {
    "path": "benchmarks/definitions/memchr/sherlock/never.toml",
    "content": "[[bench]]\nmodel = \"count-bytes\"\nname = \"huge1\"\nregex = '<'\nhaystack = { path = \"sherlock/huge.txt\" }\ncount = 0\nengines = [\n  \"libc/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot/wasm32\",\n  \"rust/memchr/memchr/onlycount\",\n  \"rust/memchr/memchr/onlycount/wasm32\",\n  \"rust/memchr/memchr/oneshot\",\n  \"rust/memchr/memchr/prebuilt\",\n  \"rust/memchr/memchr/fallback\",\n  \"rust/memchr/memchr/naive\",\n  \"rust/memchr/memchr/wasm32\",\n  \"rust/memchr/memrchr\",\n  \"rust/memchrold/memchr/oneshot\",\n  \"rust/memchrold/memchr/prebuilt\",\n  \"rust/memchrold/memchr/naive\",\n  \"rust/memchrold/memrchr\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"huge2\"\nregex = ['<', '>']\nhaystack = { path = \"sherlock/huge.txt\" }\ncount = 0\nengines = [\n  \"rust/memchr/memchr2\",\n  \"rust/memchr/memchr2/fallback\",\n  \"rust/memchr/memchr2/naive\",\n  \"rust/memchr/memchr2/wasm32\",\n  \"rust/memchr/memrchr2\",\n  \"rust/memchrold/memchr2\",\n  \"rust/memchrold/memrchr2\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"huge3\"\nregex = ['<', '>', '=']\nhaystack = { path = \"sherlock/huge.txt\" }\ncount = 0\nengines = [\n  \"rust/memchr/memchr3\",\n  \"rust/memchr/memchr3/fallback\",\n  \"rust/memchr/memchr3/naive\",\n  \"rust/memchr/memchr3/wasm32\",\n  \"rust/memchr/memrchr3\",\n  \"rust/memchrold/memchr3\",\n  \"rust/memchrold/memrchr3\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"small1\"\nregex = '<'\nhaystack = { path = \"sherlock/small.txt\" }\ncount = 0\nengines = [\n  \"libc/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot/wasm32\",\n  \"rust/memchr/memchr/onlycount\",\n  \"rust/memchr/memchr/onlycount/wasm32\",\n  \"rust/memchr/memchr/oneshot\",\n  \"rust/memchr/memchr/prebuilt\",\n  \"rust/memchr/memchr/fallback\",\n  \"rust/memchr/memchr/naive\",\n  \"rust/memchr/memchr/wasm32\",\n  \"rust/memchr/memrchr\",\n  \"rust/memchrold/memchr/oneshot\",\n  \"rust/memchrold/memchr/prebuilt\",\n  \"rust/memchrold/memchr/naive\",\n  \"rust/memchrold/memrchr\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"small2\"\nregex = ['<', '>']\nhaystack = { path = \"sherlock/small.txt\" }\ncount = 0\nengines = [\n  \"rust/memchr/memchr2\",\n  \"rust/memchr/memchr2/fallback\",\n  \"rust/memchr/memchr2/naive\",\n  \"rust/memchr/memchr2/wasm32\",\n  \"rust/memchr/memrchr2\",\n  \"rust/memchrold/memchr2\",\n  \"rust/memchrold/memrchr2\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"small3\"\nregex = ['<', '>', '=']\nhaystack = { path = \"sherlock/small.txt\" }\ncount = 0\nengines = [\n  \"rust/memchr/memchr3\",\n  \"rust/memchr/memchr3/fallback\",\n  \"rust/memchr/memchr3/naive\",\n  \"rust/memchr/memchr3/wasm32\",\n  \"rust/memchr/memrchr3\",\n  \"rust/memchrold/memchr3\",\n  \"rust/memchrold/memrchr3\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"tiny1\"\nregex = '<'\nhaystack = { path = \"sherlock/tiny.txt\" }\ncount = 0\nengines = [\n  \"libc/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot/wasm32\",\n  \"rust/memchr/memchr/onlycount\",\n  \"rust/memchr/memchr/onlycount/wasm32\",\n  \"rust/memchr/memchr/oneshot\",\n  \"rust/memchr/memchr/prebuilt\",\n  \"rust/memchr/memchr/fallback\",\n  \"rust/memchr/memchr/naive\",\n  \"rust/memchr/memchr/wasm32\",\n  \"rust/memchr/memrchr\",\n  \"rust/memchrold/memchr/oneshot\",\n  \"rust/memchrold/memchr/prebuilt\",\n  \"rust/memchrold/memchr/naive\",\n  \"rust/memchrold/memrchr\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"tiny2\"\nregex = ['<', '>']\nhaystack = { path = \"sherlock/tiny.txt\" }\ncount = 0\nengines = [\n  \"rust/memchr/memchr2\",\n  \"rust/memchr/memchr2/fallback\",\n  \"rust/memchr/memchr2/naive\",\n  \"rust/memchr/memchr2/wasm32\",\n  \"rust/memchr/memrchr2\",\n  \"rust/memchrold/memchr2\",\n  \"rust/memchrold/memrchr2\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"tiny3\"\nregex = ['<', '>', '=']\nhaystack = { path = \"sherlock/tiny.txt\" }\ncount = 0\nengines = [\n  \"rust/memchr/memchr3\",\n  \"rust/memchr/memchr3/fallback\",\n  \"rust/memchr/memchr3/naive\",\n  \"rust/memchr/memchr3/wasm32\",\n  \"rust/memchr/memrchr3\",\n  \"rust/memchrold/memchr3\",\n  \"rust/memchrold/memrchr3\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"empty1\"\nregex = '<'\nhaystack = ''\ncount = 0\nengines = [\n  \"libc/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot/wasm32\",\n  \"rust/memchr/memchr/onlycount\",\n  \"rust/memchr/memchr/onlycount/wasm32\",\n  \"rust/memchr/memchr/oneshot\",\n  \"rust/memchr/memchr/prebuilt\",\n  \"rust/memchr/memchr/fallback\",\n  \"rust/memchr/memchr/naive\",\n  \"rust/memchr/memchr/wasm32\",\n  \"rust/memchr/memrchr\",\n  \"rust/memchrold/memchr/oneshot\",\n  \"rust/memchrold/memchr/prebuilt\",\n  \"rust/memchrold/memchr/naive\",\n  \"rust/memchrold/memrchr\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"empty2\"\nregex = ['<', '>']\nhaystack = ''\ncount = 0\nengines = [\n  \"rust/memchr/memchr2\",\n  \"rust/memchr/memchr2/fallback\",\n  \"rust/memchr/memchr2/naive\",\n  \"rust/memchr/memchr2/wasm32\",\n  \"rust/memchr/memrchr2\",\n  \"rust/memchrold/memchr2\",\n  \"rust/memchrold/memrchr2\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"empty3\"\nregex = ['<', '>', '=']\nhaystack = ''\ncount = 0\nengines = [\n  \"rust/memchr/memchr3\",\n  \"rust/memchr/memchr3/fallback\",\n  \"rust/memchr/memchr3/naive\",\n  \"rust/memchr/memchr3/wasm32\",\n  \"rust/memchr/memrchr3\",\n  \"rust/memchrold/memchr3\",\n  \"rust/memchrold/memrchr3\",\n]\n"
  },
  {
    "path": "benchmarks/definitions/memchr/sherlock/rare.toml",
    "content": "[[bench]]\nmodel = \"count-bytes\"\nname = \"huge1\"\nregex = 'z'\nhaystack = { path = \"sherlock/huge.txt\" }\ncount = 151\nengines = [\n  \"libc/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot/wasm32\",\n  \"rust/memchr/memchr/onlycount\",\n  \"rust/memchr/memchr/onlycount/wasm32\",\n  \"rust/memchr/memchr/oneshot\",\n  \"rust/memchr/memchr/prebuilt\",\n  \"rust/memchr/memchr/fallback\",\n  \"rust/memchr/memchr/naive\",\n  \"rust/memchr/memchr/wasm32\",\n  \"rust/memchr/memrchr\",\n  \"rust/memchrold/memchr/oneshot\",\n  \"rust/memchrold/memchr/prebuilt\",\n  \"rust/memchrold/memrchr\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"huge2\"\nregex = ['z', 'R']\nhaystack = { path = \"sherlock/huge.txt\" }\ncount = 426\nengines = [\n  \"rust/memchr/memchr2\",\n  \"rust/memchr/memchr2/fallback\",\n  \"rust/memchr/memchr2/naive\",\n  \"rust/memchr/memchr2/wasm32\",\n  \"rust/memchr/memrchr2\",\n  \"rust/memchrold/memchr2\",\n  \"rust/memchrold/memrchr2\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"huge3\"\nregex = ['z', 'R', 'J']\nhaystack = { path = \"sherlock/huge.txt\" }\ncount = 546\nengines = [\n  \"rust/memchr/memchr3\",\n  \"rust/memchr/memchr3/fallback\",\n  \"rust/memchr/memchr3/naive\",\n  \"rust/memchr/memchr3/wasm32\",\n  \"rust/memchr/memrchr3\",\n  \"rust/memchrold/memchr3\",\n  \"rust/memchrold/memrchr3\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"small1\"\nregex = 'R'\nhaystack = { path = \"sherlock/small.txt\" }\ncount = 1\nengines = [\n  \"libc/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot/wasm32\",\n  \"rust/memchr/memchr/onlycount\",\n  \"rust/memchr/memchr/onlycount/wasm32\",\n  \"rust/memchr/memchr/oneshot\",\n  \"rust/memchr/memchr/prebuilt\",\n  \"rust/memchr/memchr/fallback\",\n  \"rust/memchr/memchr/naive\",\n  \"rust/memchr/memchr/wasm32\",\n  \"rust/memchr/memrchr\",\n  \"rust/memchrold/memchr/oneshot\",\n  \"rust/memchrold/memchr/prebuilt\",\n  \"rust/memchrold/memchr/naive\",\n  \"rust/memchrold/memrchr\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"small2\"\nregex = ['R', 'P']\nhaystack = { path = \"sherlock/small.txt\" }\ncount = 2\nengines = [\n  \"rust/memchr/memchr2\",\n  \"rust/memchr/memchr2/fallback\",\n  \"rust/memchr/memchr2/naive\",\n  \"rust/memchr/memchr2/wasm32\",\n  \"rust/memchr/memrchr2\",\n  \"rust/memchrold/memchr2\",\n  \"rust/memchrold/memrchr2\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"small3\"\nregex = ['R', 'P', 'T']\nhaystack = { path = \"sherlock/small.txt\" }\ncount = 3\nengines = [\n  \"rust/memchr/memchr3\",\n  \"rust/memchr/memchr3/fallback\",\n  \"rust/memchr/memchr3/naive\",\n  \"rust/memchr/memchr3/wasm32\",\n  \"rust/memchr/memrchr3\",\n  \"rust/memchrold/memchr3\",\n  \"rust/memchrold/memrchr3\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"tiny1\"\nregex = '.'\nhaystack = { path = \"sherlock/tiny.txt\" }\ncount = 1\nengines = [\n  \"libc/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot/wasm32\",\n  \"rust/memchr/memchr/onlycount\",\n  \"rust/memchr/memchr/onlycount/wasm32\",\n  \"rust/memchr/memchr/oneshot\",\n  \"rust/memchr/memchr/prebuilt\",\n  \"rust/memchr/memchr/fallback\",\n  \"rust/memchr/memchr/naive\",\n  \"rust/memchr/memchr/wasm32\",\n  \"rust/memchr/memrchr\",\n  \"rust/memchrold/memchr/oneshot\",\n  \"rust/memchrold/memchr/prebuilt\",\n  \"rust/memchrold/memchr/naive\",\n  \"rust/memchrold/memrchr\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"tiny2\"\nregex = ['.', 'H']\nhaystack = { path = \"sherlock/tiny.txt\" }\ncount = 2\nengines = [\n  \"rust/memchr/memchr2\",\n  \"rust/memchr/memchr2/fallback\",\n  \"rust/memchr/memchr2/naive\",\n  \"rust/memchr/memchr2/wasm32\",\n  \"rust/memchr/memrchr2\",\n  \"rust/memchrold/memchr2\",\n  \"rust/memchrold/memrchr2\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"tiny3\"\nregex = ['.', 'H', 'M']\nhaystack = { path = \"sherlock/tiny.txt\" }\ncount = 3\nengines = [\n  \"rust/memchr/memchr3\",\n  \"rust/memchr/memchr3/fallback\",\n  \"rust/memchr/memchr3/naive\",\n  \"rust/memchr/memchr3/wasm32\",\n  \"rust/memchr/memrchr3\",\n  \"rust/memchrold/memchr3\",\n  \"rust/memchrold/memrchr3\",\n]\n"
  },
  {
    "path": "benchmarks/definitions/memchr/sherlock/uncommon.toml",
    "content": "[[bench]]\nmodel = \"count-bytes\"\nname = \"huge1\"\nregex = 'b'\nhaystack = { path = \"sherlock/huge.txt\" }\ncount = 6124\nengines = [\n  \"libc/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot/wasm32\",\n  \"rust/memchr/memchr/onlycount\",\n  \"rust/memchr/memchr/onlycount/wasm32\",\n  \"rust/memchr/memchr/oneshot\",\n  \"rust/memchr/memchr/prebuilt\",\n  \"rust/memchr/memchr/fallback\",\n  \"rust/memchr/memchr/naive\",\n  \"rust/memchr/memchr/wasm32\",\n  \"rust/memchr/memrchr\",\n  \"rust/memchrold/memchr/oneshot\",\n  \"rust/memchrold/memchr/prebuilt\",\n  \"rust/memchrold/memchr/naive\",\n  \"rust/memchrold/memrchr\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"huge2\"\nregex = ['b', 'p']\nhaystack = { path = \"sherlock/huge.txt\" }\ncount = 13_113\nengines = [\n  \"rust/memchr/memchr2\",\n  \"rust/memchr/memchr2/fallback\",\n  \"rust/memchr/memchr2/naive\",\n  \"rust/memchr/memchr2/wasm32\",\n  \"rust/memchr/memrchr2\",\n  \"rust/memchrold/memchr2\",\n  \"rust/memchrold/memrchr2\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"huge3\"\nregex = ['b', 'p', '.']\nhaystack = { path = \"sherlock/huge.txt\" }\ncount = 19_538\nengines = [\n  \"rust/memchr/memchr3\",\n  \"rust/memchr/memchr3/fallback\",\n  \"rust/memchr/memchr3/naive\",\n  \"rust/memchr/memchr3/wasm32\",\n  \"rust/memchr/memrchr3\",\n  \"rust/memchrold/memchr3\",\n  \"rust/memchrold/memrchr3\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"small1\"\nregex = 'b'\nhaystack = { path = \"sherlock/small.txt\" }\ncount = 8\nengines = [\n  \"libc/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot/wasm32\",\n  \"rust/memchr/memchr/onlycount\",\n  \"rust/memchr/memchr/onlycount/wasm32\",\n  \"rust/memchr/memchr/oneshot\",\n  \"rust/memchr/memchr/prebuilt\",\n  \"rust/memchr/memchr/fallback\",\n  \"rust/memchr/memchr/naive\",\n  \"rust/memchr/memchr/wasm32\",\n  \"rust/memchr/memrchr\",\n  \"rust/memchrold/memchr/oneshot\",\n  \"rust/memchrold/memchr/prebuilt\",\n  \"rust/memchrold/memchr/naive\",\n  \"rust/memchrold/memrchr\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"small2\"\nregex = ['b', 'g']\nhaystack = { path = \"sherlock/small.txt\" }\ncount = 16\nengines = [\n  \"rust/memchr/memchr2\",\n  \"rust/memchr/memchr2/fallback\",\n  \"rust/memchr/memchr2/naive\",\n  \"rust/memchr/memchr2/wasm32\",\n  \"rust/memchr/memrchr2\",\n  \"rust/memchrold/memchr2\",\n  \"rust/memchrold/memrchr2\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"small3\"\nregex = ['b', 'g', 'p']\nhaystack = { path = \"sherlock/small.txt\" }\ncount = 24\nengines = [\n  \"rust/memchr/memchr3\",\n  \"rust/memchr/memchr3/fallback\",\n  \"rust/memchr/memchr3/naive\",\n  \"rust/memchr/memchr3/wasm32\",\n  \"rust/memchr/memrchr3\",\n  \"rust/memchrold/memchr3\",\n  \"rust/memchrold/memrchr3\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"tiny1\"\nregex = 'l'\nhaystack = { path = \"sherlock/tiny.txt\" }\ncount = 5\nengines = [\n  \"libc/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot/wasm32\",\n  \"rust/memchr/memchr/onlycount\",\n  \"rust/memchr/memchr/onlycount/wasm32\",\n  \"rust/memchr/memchr/oneshot\",\n  \"rust/memchr/memchr/prebuilt\",\n  \"rust/memchr/memchr/fallback\",\n  \"rust/memchr/memchr/naive\",\n  \"rust/memchr/memchr/wasm32\",\n  \"rust/memchr/memrchr\",\n  \"rust/memchrold/memchr/oneshot\",\n  \"rust/memchrold/memchr/prebuilt\",\n  \"rust/memchrold/memchr/naive\",\n  \"rust/memchrold/memrchr\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"tiny2\"\nregex = ['l', 's']\nhaystack = { path = \"sherlock/tiny.txt\" }\ncount = 10\nengines = [\n  \"rust/memchr/memchr2\",\n  \"rust/memchr/memchr2/fallback\",\n  \"rust/memchr/memchr2/naive\",\n  \"rust/memchr/memchr2/wasm32\",\n  \"rust/memchr/memrchr2\",\n  \"rust/memchrold/memchr2\",\n  \"rust/memchrold/memrchr2\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"tiny3\"\nregex = ['l', 's', 'e']\nhaystack = { path = \"sherlock/tiny.txt\" }\ncount = 16\nengines = [\n  \"rust/memchr/memchr3\",\n  \"rust/memchr/memchr3/fallback\",\n  \"rust/memchr/memchr3/naive\",\n  \"rust/memchr/memchr3/wasm32\",\n  \"rust/memchr/memrchr3\",\n  \"rust/memchrold/memchr3\",\n  \"rust/memchrold/memrchr3\",\n]\n"
  },
  {
    "path": "benchmarks/definitions/memchr/sherlock/verycommon.toml",
    "content": "[[bench]]\nmodel = \"count-bytes\"\nname = \"huge1\"\nregex = ' '\nhaystack = { path = \"sherlock/huge.txt\" }\ncount = 97_626\nengines = [\n  \"libc/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot/wasm32\",\n  \"rust/memchr/memchr/onlycount\",\n  \"rust/memchr/memchr/onlycount/wasm32\",\n  \"rust/memchr/memchr/oneshot\",\n  \"rust/memchr/memchr/prebuilt\",\n  \"rust/memchr/memchr/fallback\",\n  \"rust/memchr/memchr/naive\",\n  \"rust/memchr/memchr/wasm32\",\n  \"rust/memchr/memrchr\",\n  \"rust/memchrold/memchr/oneshot\",\n  \"rust/memchrold/memchr/prebuilt\",\n  \"rust/memchrold/memchr/naive\",\n  \"rust/memchrold/memrchr\",\n]\n\n[[bench]]\nmodel = \"count-bytes\"\nname = \"small1\"\nregex = ' '\nhaystack = { path = \"sherlock/small.txt\" }\ncount = 106\nengines = [\n  \"libc/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot\",\n  \"rust/bytecount/memchr/oneshot/wasm32\",\n  \"rust/memchr/memchr/onlycount\",\n  \"rust/memchr/memchr/onlycount/wasm32\",\n  \"rust/memchr/memchr/oneshot\",\n  \"rust/memchr/memchr/prebuilt\",\n  \"rust/memchr/memchr/fallback\",\n  \"rust/memchr/memchr/naive\",\n  \"rust/memchr/memchr/wasm32\",\n  \"rust/memchr/memrchr\",\n  \"rust/memchrold/memchr/oneshot\",\n  \"rust/memchrold/memchr/prebuilt\",\n  \"rust/memchrold/memchr/naive\",\n  \"rust/memchrold/memrchr\",\n]\n"
  },
  {
    "path": "benchmarks/definitions/memmem/byterank.toml",
    "content": "[[bench]]\nmodel = \"count\"\nname = \"binary\"\nregex = '\\x00\\x00\\xDD\\xDD\\x00'\nhaystack = { path = \"rg-13.0.0.txt\" }\ncount = 1\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/binary\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\nanalysis = '''\nThis benchmark demonstrates the utility of using one's own heuristic ranking\nfunction for the background frequency of bytes. In this case, the needle has\nNUL bytes which are quite uncommon in plain text but common in binary data.\nSince the heuristics in the `memchr` crate are more or less targeted at plain\ntext, the NUL byte is chosen as a predicate because it is believed to be rare.\nBut since the haystack is an executable, i.e. binary data, this choice is poor.\n\nSo this measures a separate engine, `rust/memchr/memmem/binary`, which is like\n`rust/memchr/memmem/prebuilt`, except it uses a ranking function tuned from\nbinary data. In this case, the NUL byte is considered common and thus not used\nas a predicate. This leads to a dramatic improvement in throughput.\n'''\n"
  },
  {
    "path": "benchmarks/definitions/memmem/code.toml",
    "content": "[[bench]]\nmodel = \"count\"\nname = \"rust-library-never-fn-strength\"\nregex = 'fn strength'\nhaystack = { path = \"code/rust-library.rs\" }\ncount = 0\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"rust-library-never-fn-strength-paren\"\nregex = 'fn strength('\nhaystack = { path = \"code/rust-library.rs\" }\ncount = 0\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"rust-library-never-fn-quux\"\nregex = 'fn quux('\nhaystack = { path = \"code/rust-library.rs\" }\ncount = 0\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"rust-library-rare-fn-from-str\"\nregex = 'pub fn from_str('\nhaystack = { path = \"code/rust-library.rs\" }\ncount = 1\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"rust-library-common-fn-is-empty\"\nregex = 'fn is_empty'\nhaystack = { path = \"code/rust-library.rs\" }\ncount = 17\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"rust-library-common-fn\"\nregex = 'fn'\nhaystack = { path = \"code/rust-library.rs\" }\ncount = 2985\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"rust-library-common-paren\"\nregex = '('\nhaystack = { path = \"code/rust-library.rs\" }\ncount = 30_193\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"rust-library-common-let\"\nregex = 'let'\nhaystack = { path = \"code/rust-library.rs\" }\ncount = 4737\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n"
  },
  {
    "path": "benchmarks/definitions/memmem/pathological.toml",
    "content": "[[bench]]\nmodel = \"count\"\nname = \"md5-huge-no-hash\"\nregex = '61a1a40effcf97de24505f154a306597'\nhaystack = { path = \"pathological/md5-huge.txt\" }\ncount = 0\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"md5-huge-last-hash\"\nregex = '831df319d8597f5bc793d690f08b159b'\nhaystack = { path = \"pathological/md5-huge.txt\" }\ncount = 1\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"rare-repeated-huge-tricky\"\nregex = 'abczdef'\nhaystack = { path = \"pathological/repeated-rare-huge.txt\" }\ncount = 0\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"rare-repeated-huge-match\"\nregex = 'zzzzzzzzzz'\nhaystack = { path = \"pathological/repeated-rare-huge.txt\" }\ncount = 50_010\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"rare-repeated-small-tricky\"\nregex = 'abczdef'\nhaystack = { path = \"pathological/repeated-rare-small.txt\" }\ncount = 0\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"rare-repeated-small-match\"\nregex = 'zzzzzzzzzz'\nhaystack = { path = \"pathological/repeated-rare-small.txt\" }\ncount = 100\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"defeat-simple-vector-alphabet\"\nregex = 'qbz'\nhaystack = { path = \"pathological/defeat-simple-vector.txt\" }\ncount = 1\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"defeat-simple-vector-freq-alphabet\"\nregex = 'qjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaz'\nhaystack = { path = \"pathological/defeat-simple-vector-freq.txt\" }\ncount = 1\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"defeat-simple-vector-repeated-alphabet\"\nregex = 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaz'\nhaystack = { path = \"pathological/defeat-simple-vector-repeated.txt\" }\ncount = 1\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n"
  },
  {
    "path": "benchmarks/definitions/memmem/sliceslice.toml",
    "content": "analysis = '''\nThese benchmarks were lifted almost verbtaim out of the sliceslice crate. The\nreason why we have these benchmarks is because they were the primary thing\nthat motivated me to write the memmem implementation in the `memchr` crate. In\nparticular, my existing substring search implementation in the `bstr` crate\ndid quite poorly on these particular benchmarks. Moreover, while the benchmark\nsetup is a little weird, these benchmarks do reflect cases that I think are\nsomewhat common:\n\n* In the sliceslice-words/words case, the benchmark is primarily about\nsearching very short haystacks using common English words.\n* In the sliceslice-words/i386 case, the benchmark is primarily about searching\na longer haystack with common English words.\n\nN.B. In the sliceslice crate, the benchmarks are called \"short\" and \"long.\"\nHere, we call them sliceslice-words/words and sliceslice-i386/words,\nrespectively. The name change was made to be consistent with the naming\nconvention used for other benchmarks.\n\nThe main thing that's \"weird\" about these benchmarks is that each iteration\ninvolves a lot of work. All of the other benchmarks in this crate focus on one\nspecific needle with one specific haystack, and each iteration is a single\nsearch or iteration. But in these benchmarks, each iteration involves searching\nwith many needles against potentially many haystacks. Nevertheless, these have\nproven useful targets for optimization.\n'''\n\n[[bench]]\nmodel = \"needles-in-needles\"\nname = \"short\"\nregex = { path = \"sliceslice/words-by-length-desc.txt\", per-line = \"pattern\" }\nhaystack = ''  # not used in this model\ncount = 4585\nengines = [\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/prebuilt\",\n]\n\n[[bench]]\nmodel = \"needles-in-haystack\"\nname = \"seemingly-random\"\nregex = { path = \"sliceslice/words-by-length-desc.txt\", per-line = \"pattern\" }\nhaystack = { path = \"sliceslice/haystack.txt\" }\ncount = 106\nengines = [\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/prebuilt\",\n]\n\n[[bench]]\nmodel = \"needles-in-haystack\"\nname = \"i386\"\nregex = { path = \"sliceslice/words-by-length-desc.txt\", per-line = \"pattern\" }\nhaystack = { path = \"sliceslice/i386.txt\" }\ncount = 4585\nengines = [\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/prebuilt\",\n]\n"
  },
  {
    "path": "benchmarks/definitions/memmem/subtitles/common.toml",
    "content": "[[bench]]\nmodel = \"count\"\nname = \"huge-en-that\"\nregex = 'that'\nhaystack = { path = \"opensubtitles/en-huge.txt\" }\ncount = 865\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"huge-en-you\"\nregex = 'you'\nhaystack = { path = \"opensubtitles/en-huge.txt\" }\ncount = 5009\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"huge-en-one-space\"\nregex = ' '\nhaystack = { path = \"opensubtitles/en-huge.txt\" }\ncount = 96_606\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"huge-ru-that\"\nregex = 'что'\nhaystack = { path = \"opensubtitles/ru-huge.txt\" }\ncount = 998\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"huge-ru-not\"\nregex = 'не'\nhaystack = { path = \"opensubtitles/ru-huge.txt\" }\ncount = 3092\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"huge-ru-one-space\"\nregex = ' '\nhaystack = { path = \"opensubtitles/ru-huge.txt\" }\ncount = 46_941\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"huge-zh-that\"\nregex = '那'\nhaystack = { path = \"opensubtitles/zh-huge.txt\" }\ncount = 1056\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"huge-zh-do-not\"\nregex = '不'\nhaystack = { path = \"opensubtitles/zh-huge.txt\" }\ncount = 2751\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"huge-zh-one-space\"\nregex = ' '\nhaystack = { path = \"opensubtitles/zh-huge.txt\" }\ncount = 17_232\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n"
  },
  {
    "path": "benchmarks/definitions/memmem/subtitles/never.toml",
    "content": "[[bench]]\nmodel = \"count\"\nname = \"huge-en-john-watson\"\nregex = 'John Watson'\nhaystack = { path = \"opensubtitles/en-huge.txt\" }\ncount = 0\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"huge-en-all-common-bytes\"\nregex = 'sternness'\nhaystack = { path = \"opensubtitles/en-huge.txt\" }\ncount = 0\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"huge-en-some-rare-bytes\"\nregex = 'quartz'\nhaystack = { path = \"opensubtitles/en-huge.txt\" }\ncount = 0\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"huge-en-two-space\"\nregex = '  '\nhaystack = { path = \"opensubtitles/en-huge.txt\" }\ncount = 0\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"teeny-en-john-watson\"\nregex = 'John Watson'\nhaystack = { path = \"opensubtitles/en-teeny.txt\" }\ncount = 0\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"teeny-en-all-common-bytes\"\nregex = 'sternness'\nhaystack = { path = \"opensubtitles/en-teeny.txt\" }\ncount = 0\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"teeny-en-some-rare-bytes\"\nregex = 'quartz'\nhaystack = { path = \"opensubtitles/en-teeny.txt\" }\ncount = 0\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"teeny-en-two-space\"\nregex = '  '\nhaystack = { path = \"opensubtitles/en-teeny.txt\" }\ncount = 0\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"huge-ru-john-watson\"\nregex = 'Джон Уотсон'\nhaystack = { path = \"opensubtitles/ru-huge.txt\" }\ncount = 0\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"teeny-ru-john-watson\"\nregex = 'Джон Уотсон'\nhaystack = { path = \"opensubtitles/ru-teeny.txt\" }\ncount = 0\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"huge-zh-john-watson\"\nregex = '约翰·沃森'\nhaystack = { path = \"opensubtitles/zh-huge.txt\" }\ncount = 0\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"teeny-zh-john-watson\"\nregex = '约翰·沃森'\nhaystack = { path = \"opensubtitles/zh-teeny.txt\" }\ncount = 0\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n"
  },
  {
    "path": "benchmarks/definitions/memmem/subtitles/rare.toml",
    "content": "[[bench]]\nmodel = \"count\"\nname = \"huge-en-sherlock-holmes\"\nregex = 'Sherlock Holmes'\nhaystack = { path = \"opensubtitles/en-huge.txt\" }\ncount = 1\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"huge-en-sherlock\"\nregex = 'Sherlock'\nhaystack = { path = \"opensubtitles/en-huge.txt\" }\ncount = 1\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"huge-en-medium-needle\"\nregex = 'homer, marge, bart, lisa, maggie'\nhaystack = { path = \"opensubtitles/en-huge.txt\" }\ncount = 1\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"huge-en-long-needle\"\nregex = \"I feel afraid of Mostafa\\nHe is stronger and older than I am, and more experienced\\nShould I turn back?\\nDoc you're beginning to sound like Sherlock Holmes.\"\nhaystack = { path = \"opensubtitles/en-huge.txt\" }\ncount = 1\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"huge-en-huge-needle\"\nregex = \"Since we will meet anyway, then the sooner, the better\\nTomorrow at 4:30 in front of the Horse-Riding Club\\nNo, 4:30\\nI am confused, almost lost\\nAs if an invisible hand pushed me towards an unknown fate\\nI needed someone by my side\\nI needed someone to guide me to the path of security\\nBut I had no one\\nI couldn't ask my father's opinion, nor his wife's\\nI felt just as lonely as I had before\\nI feel afraid of Mostafa\\nHe is stronger and older than I am, and more experienced\\nShould I turn back?\\nDoc you're beginning to sound like Sherlock Holmes.\"\nhaystack = { path = \"opensubtitles/en-huge.txt\" }\ncount = 1\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"teeny-en-sherlock-holmes\"\nregex = 'Sherlock Holmes'\nhaystack = { path = \"opensubtitles/en-teeny.txt\" }\ncount = 1\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"teeny-en-sherlock\"\nregex = 'Sherlock'\nhaystack = { path = \"opensubtitles/en-teeny.txt\" }\ncount = 1\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"huge-ru-sherlock-holmes\"\nregex = 'Шерлок Холмс'\nhaystack = { path = \"opensubtitles/ru-huge.txt\" }\ncount = 1\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"huge-ru-sherlock\"\nregex = 'Шерлок'\nhaystack = { path = \"opensubtitles/ru-huge.txt\" }\ncount = 1\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"teeny-ru-sherlock-holmes\"\nregex = 'Шерлок Холмс'\nhaystack = { path = \"opensubtitles/ru-teeny.txt\" }\ncount = 1\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"teeny-ru-sherlock\"\nregex = 'Шерлок'\nhaystack = { path = \"opensubtitles/ru-teeny.txt\" }\ncount = 1\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"huge-zh-sherlock-holmes\"\nregex = '夏洛克·福尔摩斯'\nhaystack = { path = \"opensubtitles/zh-huge.txt\" }\ncount = 1\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"huge-zh-sherlock\"\nregex = '夏洛克'\nhaystack = { path = \"opensubtitles/zh-huge.txt\" }\ncount = 1\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"teeny-zh-sherlock-holmes\"\nregex = '夏洛克·福尔摩斯'\nhaystack = { path = \"opensubtitles/zh-teeny.txt\" }\ncount = 1\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n\n[[bench]]\nmodel = \"count\"\nname = \"teeny-zh-sherlock\"\nregex = '夏洛克'\nhaystack = { path = \"opensubtitles/zh-teeny.txt\" }\ncount = 1\nengines = [\n  \"libc/memmem/oneshot\",\n  \"rust/jetscii/memmem/oneshot\",\n  \"rust/jetscii/memmem/prebuilt\",\n  \"rust/memchr/memmem/oneshot\",\n  \"rust/memchr/memmem/prebuilt\",\n  \"rust/memchr/memmem/twoway\",\n  \"rust/memchr/memmem/rabinkarp\",\n  \"rust/memchr/memmem/shiftor\",\n  \"rust/memchr/memmem/wasm32\",\n  \"rust/memchrold/memmem/oneshot\",\n  \"rust/memchrold/memmem/prebuilt\",\n  \"rust/sliceslice/memmem/oneshot\",\n  \"rust/sliceslice/memmem/prebuilt\",\n  \"rust/std/memmem/oneshot\",\n  \"rust/std/memmem/prebuilt\",\n  \"stringzilla/memmem/oneshot\",\n]\n"
  },
  {
    "path": "benchmarks/engines/.gitignore",
    "content": "/target\n"
  },
  {
    "path": "benchmarks/engines/libc/Cargo.toml",
    "content": "[package]\npublish = false\nname = \"main\"\nversion = \"0.0.0\"  # unclear how to get libc version in portable way\nedition = \"2021\"\n\n[workspace]\n\n[dependencies]\nanyhow = \"1.0.100\"\nlibc = \"0.2.176\"\n\n[dependencies.shared]\npath = \"../../shared\"\n\n[[bin]]\nname = \"main\"\npath = \"main.rs\"\n\n[profile.release]\ndebug = true\ncodegen-units = 1\nlto = \"fat\"\n"
  },
  {
    "path": "benchmarks/engines/libc/main.rs",
    "content": "use std::io::Write;\n\nuse shared::{Benchmark, Sample};\n\nfn main() -> anyhow::Result<()> {\n    let Some(arg) = std::env::args_os().nth(1) else {\n        anyhow::bail!(\"Usage: runner (<engine-name> | --version)\")\n    };\n    let Ok(arg) = arg.into_string() else {\n        anyhow::bail!(\"argument given is not valid UTF-8\")\n    };\n    if arg == \"--version\" {\n        // FIXME: How do we get libc version?\n        writeln!(std::io::stdout(), \"unknown\")?;\n        return Ok(());\n    }\n    let engine = arg;\n    let b = Benchmark::from_stdin()?;\n    let samples = match (&*engine, &*b.model) {\n        (\"memmem-oneshot\", \"count\") => memmem_oneshot_count(&b)?,\n        (\"memchr-oneshot\", \"count-bytes\") => memchr_oneshot_count(&b)?,\n        (engine, model) => {\n            anyhow::bail!(\"unrecognized engine '{engine}' and model '{model}'\")\n        }\n    };\n    let mut stdout = std::io::stdout().lock();\n    for s in samples.iter() {\n        writeln!(stdout, \"{},{}\", s.duration.as_nanos(), s.count)?;\n    }\n    Ok(())\n}\n\nfn memchr_oneshot_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle_byte()?;\n    shared::run(b, || Ok(shared::count_memchr(haystack, needle, libc_memchr)))\n}\n\nfn memmem_oneshot_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle()?;\n    shared::run(b, || Ok(shared::count_memmem(haystack, needle, libc_memmem)))\n}\n\n/// A safe wrapper around libc's `memchr` function. In particular, this\n/// converts memchr's pointer return to an index offset into `haystack`.\nfn libc_memchr(haystack: &[u8], needle: u8) -> Option<usize> {\n    // SAFETY: This is safe to call since all pointers are valid.\n    let p = unsafe {\n        libc::memchr(\n            haystack.as_ptr().cast(),\n            needle as libc::c_int,\n            haystack.len(),\n        )\n    };\n    if p.is_null() {\n        None\n    } else {\n        Some(p as usize - (haystack.as_ptr() as usize))\n    }\n}\n\n/// A safe wrapper around libc's `memmem` function. In particular, this\n/// converts memmem's pointer return to an index offset into `haystack`.\nfn libc_memmem(haystack: &[u8], needle: &[u8]) -> Option<usize> {\n    // SAFETY: We know that both our haystack and needle pointers are valid and\n    // non-null, and we also know that the lengths of each corresponds to the\n    // number of bytes at that memory region.\n    let p = unsafe {\n        libc::memmem(\n            haystack.as_ptr().cast(),\n            haystack.len(),\n            needle.as_ptr().cast(),\n            needle.len(),\n        )\n    };\n    if p.is_null() {\n        None\n    } else {\n        let start = (p as isize) - (haystack.as_ptr() as isize);\n        Some(start as usize)\n    }\n}\n"
  },
  {
    "path": "benchmarks/engines/rust-bytecount/Cargo.toml",
    "content": "[package]\npublish = false\nname = \"main\"\nversion = \"0.6.4\"\nedition = \"2021\"\n\n[workspace]\n\n[dependencies]\nanyhow = \"1.0.100\"\n# Note that with bytecount 0.6.7, it seems to fail on wasm32:\n#\n#     $ rebar measure -f '^memchr/sherlock/rare/huge1$' -e '^rust/bytecount/memchr/oneshot/wasm32$' -t\n#     Error: failed to run main module `./target/wasm32-wasi/release/main.wasm`\n#\n#     Caused by:\n#         0: failed to invoke command default\n#         1: error while executing at wasm backtrace:\n#                0: 0x7683 - <unknown>!bytecount::count::he2da8fc82662651b\n#                1: 0x4887 - <unknown>!main::main::he4a1bcea0da067f8\n#                2:  0x4fe - <unknown>!std::sys_common::backtrace::__rust_begin_short_backtrace::h3d2add2c8c259792\n#                3: 0x7f2f - <unknown>!__main_void\n#                4:  0x4d9 - <unknown>!_start\n#            note: using the `WASMTIME_BACKTRACE_DETAILS=1` environment variable may show more debugging information\n#         2: memory fault at wasm address 0x3a0000 in linear memory of size 0x3a0000\n#         3: wasm trap: out of bounds memory access\n#     memchr/sherlock/rare/huge1,count-bytes,rust/bytecount/memchr/oneshot/wasm32,0.6.7,failed to run command for 'rust/bytecount/memchr/oneshot/wasm32'\n#     some benchmarks failed\n#\n# It's not clear what's happening here, but 0.6.4 works.\nbytecount = \"=0.6.4\"\n\n[dependencies.shared]\npath = \"../../shared\"\n\n[[bin]]\nname = \"main\"\npath = \"main.rs\"\n\n[profile.release]\ndebug = true\ncodegen-units = 1\nlto = \"fat\"\n"
  },
  {
    "path": "benchmarks/engines/rust-bytecount/main.rs",
    "content": "use std::io::Write;\n\nuse shared::{Benchmark, Sample};\n\nfn main() -> anyhow::Result<()> {\n    let Some(arg) = std::env::args_os().nth(1) else {\n        anyhow::bail!(\"Usage: runner (<engine-name> | --version)\")\n    };\n    let Ok(arg) = arg.into_string() else {\n        anyhow::bail!(\"argument given is not valid UTF-8\")\n    };\n    if arg == \"--version\" {\n        writeln!(std::io::stdout(), env!(\"CARGO_PKG_VERSION\"))?;\n        return Ok(());\n    }\n    let engine = arg;\n    let b = Benchmark::from_stdin()?;\n    let samples = match (&*engine, &*b.model) {\n        (\"memchr-oneshot\", \"count-bytes\") => memchr_oneshot_count(&b)?,\n        (engine, model) => {\n            anyhow::bail!(\"unrecognized engine '{engine}' and model '{model}'\")\n        }\n    };\n    let mut stdout = std::io::stdout().lock();\n    for s in samples.iter() {\n        writeln!(stdout, \"{},{}\", s.duration.as_nanos(), s.count)?;\n    }\n    Ok(())\n}\n\nfn memchr_oneshot_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle_byte()?;\n    shared::run(b, || Ok(bytecount::count(haystack, needle)))\n}\n"
  },
  {
    "path": "benchmarks/engines/rust-jetscii/Cargo.toml",
    "content": "[package]\npublish = false\nname = \"main\"\nversion = \"0.5.3\"\nedition = \"2021\"\n\n[workspace]\n\n[dependencies]\nanyhow = \"1.0.100\"\njetscii = \"=0.5.3\"\n\n[dependencies.shared]\npath = \"../../shared\"\n\n[[bin]]\nname = \"main\"\npath = \"main.rs\"\n\n[profile.release]\ndebug = true\ncodegen-units = 1\nlto = \"fat\"\n"
  },
  {
    "path": "benchmarks/engines/rust-jetscii/main.rs",
    "content": "use std::io::Write;\n\nuse shared::{Benchmark, Sample};\n\nfn main() -> anyhow::Result<()> {\n    let Some(arg) = std::env::args_os().nth(1) else {\n        anyhow::bail!(\"Usage: runner (<engine-name> | --version)\")\n    };\n    let Ok(arg) = arg.into_string() else {\n        anyhow::bail!(\"argument given is not valid UTF-8\")\n    };\n    if arg == \"--version\" {\n        writeln!(std::io::stdout(), env!(\"CARGO_PKG_VERSION\"))?;\n        return Ok(());\n    }\n    let engine = arg;\n    let b = Benchmark::from_stdin()?;\n    let samples = match (&*engine, &*b.model) {\n        (\"memmem-prebuilt\", \"count\") => memmem_prebuilt_count(&b)?,\n        (\"memmem-oneshot\", \"count\") => memmem_oneshot_count(&b)?,\n        (engine, model) => {\n            anyhow::bail!(\"unrecognized engine '{engine}' and model '{model}'\")\n        }\n    };\n    let mut stdout = std::io::stdout().lock();\n    for s in samples.iter() {\n        writeln!(stdout, \"{},{}\", s.duration.as_nanos(), s.count)?;\n    }\n    Ok(())\n}\n\nfn memmem_prebuilt_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle()?;\n    let finder = jetscii::ByteSubstring::new(needle);\n    shared::run(b, || {\n        Ok(shared::count_memmem(haystack, needle, |h, _| finder.find(h)))\n    })\n}\n\nfn memmem_oneshot_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle()?;\n    shared::run(b, || {\n        Ok(shared::count_memmem(haystack, needle, |h, n| {\n            jetscii::ByteSubstring::new(n).find(h)\n        }))\n    })\n}\n"
  },
  {
    "path": "benchmarks/engines/rust-memchr/Cargo.toml",
    "content": "[package]\npublish = false\nname = \"main\"\nversion = \"2.7.6\"  # should match current 'memchr' version\nedition = \"2021\"\n\n[workspace]\n\n[dependencies]\nanyhow = \"1.0.100\"\nmemchr = { version = \"*\", path = \"../../../\" }\n\n[dependencies.shared]\npath = \"../../shared\"\n\n[[bin]]\nname = \"main\"\npath = \"main.rs\"\n\n[profile.release]\ndebug = true\ncodegen-units = 1\nlto = \"fat\"\n"
  },
  {
    "path": "benchmarks/engines/rust-memchr/main.rs",
    "content": "use std::io::Write;\n\nuse memchr::arch::all::packedpair::HeuristicFrequencyRank;\n\nuse shared::{Benchmark, Sample};\n\nfn main() -> anyhow::Result<()> {\n    let mut args = vec![];\n    for osarg in std::env::args_os().skip(1) {\n        let Ok(arg) = osarg.into_string() else {\n            anyhow::bail!(\"all arguments must be valid UTF-8\")\n        };\n        args.push(arg);\n    }\n    anyhow::ensure!(\n        !args.is_empty(),\n        \"Usage: runner [--quiet] (<engine-name> | --version)\"\n    );\n    if args.iter().any(|a| a == \"--version\") {\n        writeln!(std::io::stdout(), env!(\"CARGO_PKG_VERSION\"))?;\n        return Ok(());\n    }\n    let quiet = args.iter().any(|a| a == \"--quiet\");\n    let engine = &**args.last().unwrap();\n    let b = Benchmark::from_stdin()?;\n    let samples = match (&*engine, &*b.model) {\n        (\"memchr-oneshot\", \"count-bytes\") => memchr_oneshot_count(&b)?,\n        (\"memchr-prebuilt\", \"count-bytes\") => memchr_prebuilt_count(&b)?,\n        (\"memchr-onlycount\", \"count-bytes\") => memchr_only_count(&b)?,\n        (\"memchr-fallback\", \"count-bytes\") => memchr_fallback_count(&b)?,\n        (\"memchr-naive\", \"count-bytes\") => memchr_naive_count(&b)?,\n        (\"memchr2\", \"count-bytes\") => memchr2_count(&b)?,\n        (\"memchr2-fallback\", \"count-bytes\") => memchr2_fallback_count(&b)?,\n        (\"memchr2-naive\", \"count-bytes\") => memchr2_naive_count(&b)?,\n        (\"memchr3\", \"count-bytes\") => memchr3_count(&b)?,\n        (\"memchr3-fallback\", \"count-bytes\") => memchr3_fallback_count(&b)?,\n        (\"memchr3-naive\", \"count-bytes\") => memchr3_naive_count(&b)?,\n        (\"memrchr\", \"count-bytes\") => memrchr_count(&b)?,\n        (\"memrchr2\", \"count-bytes\") => memrchr2_count(&b)?,\n        (\"memrchr3\", \"count-bytes\") => memrchr3_count(&b)?,\n        (\"memmem-prebuilt\", \"count\") => memmem_prebuilt_count(&b)?,\n        (\"memmem-oneshot\", \"count\") => memmem_oneshot_count(&b)?,\n        (\"memmem-binary\", \"count\") => memmem_binary_count(&b)?,\n        (\"memmem-twoway\", \"count\") => memmem_twoway_count(&b)?,\n        (\"memmem-rabinkarp\", \"count\") => memmem_rabinkarp_count(&b)?,\n        (\"memmem-shiftor\", \"count\") => memmem_shiftor_count(&b)?,\n        (\"memmem-prebuilt\", \"needles-in-needles\") => {\n            memmem_prebuilt_needles(&b)?\n        }\n        (\"memmem-prebuilt\", \"needles-in-haystack\") => {\n            memmem_prebuilt_haystack(&b)?\n        }\n        (engine, model) => {\n            anyhow::bail!(\"unrecognized engine '{engine}' and model '{model}'\")\n        }\n    };\n    if !quiet {\n        let mut stdout = std::io::stdout().lock();\n        for s in samples.iter() {\n            writeln!(stdout, \"{},{}\", s.duration.as_nanos(), s.count)?;\n        }\n    }\n    Ok(())\n}\n\nfn memchr_oneshot_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle_byte()?;\n    shared::run(b, || {\n        Ok(shared::count_memchr(haystack, needle, |h, n1| {\n            memchr::memchr(n1, h)\n        }))\n    })\n}\n\nfn memchr_prebuilt_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle_byte()?;\n    shared::run(b, || Ok(memchr::memchr_iter(needle, haystack).count_slow()))\n}\n\nfn memchr_only_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle_byte()?;\n    shared::run(b, || Ok(memchr::memchr_iter(needle, haystack).count()))\n}\n\nfn memchr_fallback_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle_byte()?;\n    let finder = memchr::arch::all::memchr::One::new(needle);\n    shared::run(b, || Ok(finder.iter(haystack).count_slow()))\n}\n\nfn memchr_naive_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle_byte()?;\n    shared::run(b, || {\n        Ok(shared::count_memchr(haystack, needle, |h, n1| {\n            h.iter().position(|&b| b == n1)\n        }))\n    })\n}\n\nfn memchr2_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let (n1, n2) = b.two_needle_bytes()?;\n    shared::run(b, || Ok(memchr::memchr2_iter(n1, n2, haystack).count_slow()))\n}\n\nfn memchr2_fallback_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let (n1, n2) = b.two_needle_bytes()?;\n    let finder = memchr::arch::all::memchr::Two::new(n1, n2);\n    shared::run(b, || Ok(finder.iter(haystack).count_slow()))\n}\n\nfn memchr2_naive_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let (n1, n2) = b.two_needle_bytes()?;\n    shared::run(b, || {\n        Ok(shared::count_memchr2(haystack, n1, n2, |h, n1, n2| {\n            h.iter().position(|&b| b == n1 || b == n2)\n        }))\n    })\n}\n\nfn memchr3_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let (n1, n2, n3) = b.three_needle_bytes()?;\n    shared::run(b, || {\n        Ok(memchr::memchr3_iter(n1, n2, n3, haystack).count_slow())\n    })\n}\n\nfn memchr3_fallback_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let (n1, n2, n3) = b.three_needle_bytes()?;\n    let finder = memchr::arch::all::memchr::Three::new(n1, n2, n3);\n    shared::run(b, || Ok(finder.iter(haystack).count_slow()))\n}\n\nfn memchr3_naive_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let (n1, n2, n3) = b.three_needle_bytes()?;\n    shared::run(b, || {\n        Ok(shared::count_memchr3(haystack, n1, n2, n3, |h, n1, n2, n3| {\n            h.iter().position(|&b| b == n1 || b == n2 || b == n3)\n        }))\n    })\n}\n\nfn memrchr_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle_byte()?;\n    shared::run(b, || {\n        Ok(memchr::memchr_iter(needle, haystack).rev().count_slow())\n    })\n}\n\nfn memrchr2_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let (n1, n2) = b.two_needle_bytes()?;\n    shared::run(b, || {\n        Ok(memchr::memchr2_iter(n1, n2, haystack).rev().count_slow())\n    })\n}\n\nfn memrchr3_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let (n1, n2, n3) = b.three_needle_bytes()?;\n    shared::run(b, || {\n        Ok(memchr::memchr3_iter(n1, n2, n3, haystack).rev().count_slow())\n    })\n}\n\nfn memmem_prebuilt_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle()?;\n    let finder = memchr::memmem::Finder::new(needle);\n    shared::run(b, || Ok(finder.find_iter(haystack).count_slow()))\n}\n\nfn memmem_prebuilt_needles(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let finders = b\n        .needles\n        .iter()\n        .map(|n| memchr::memmem::Finder::new(n))\n        .collect::<Vec<_>>();\n    shared::run(b, || {\n        let mut count = 0;\n        for (i, finder) in finders.iter().enumerate() {\n            for haystack in b.needles[i..].iter() {\n                if finder.find(haystack).is_some() {\n                    count += 1;\n                }\n            }\n        }\n        Ok(count)\n    })\n}\n\nfn memmem_prebuilt_haystack(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let finders = b\n        .needles\n        .iter()\n        .map(|n| memchr::memmem::Finder::new(n))\n        .collect::<Vec<_>>();\n    shared::run(b, || {\n        let mut count = 0;\n        for finder in finders.iter() {\n            if finder.find(haystack).is_some() {\n                count += 1;\n            }\n        }\n        Ok(count)\n    })\n}\n\nfn memmem_oneshot_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle()?;\n    let memmem = memchr::memmem::find;\n    shared::run(b, || Ok(shared::count_memmem(haystack, needle, memmem)))\n}\n\nfn memmem_binary_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle()?;\n    let finder = memchr::memmem::FinderBuilder::new()\n        .build_forward_with_ranker(Binary, needle);\n    shared::run(b, || Ok(finder.find_iter(haystack).count_slow()))\n}\n\nfn memmem_twoway_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle()?;\n    let finder = memchr::arch::all::twoway::Finder::new(needle);\n    shared::run(b, || {\n        Ok(shared::count_memmem(haystack, needle, |h, n| finder.find(h, n)))\n    })\n}\n\nfn memmem_rabinkarp_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle()?;\n    let finder = memchr::arch::all::rabinkarp::Finder::new(needle);\n    shared::run(b, || {\n        Ok(shared::count_memmem(haystack, needle, |h, n| finder.find(h, n)))\n    })\n}\n\nfn memmem_shiftor_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle()?;\n    let Some(finder) = memchr::arch::all::shiftor::Finder::new(needle) else {\n        anyhow::bail!(\"could not build Shift-Or searcher for this needle\")\n    };\n    shared::run(b, || {\n        Ok(shared::count_memmem(haystack, needle, |h, _| finder.find(h)))\n    })\n}\n\n/// A byte-frequency table that is good for scanning binary executables.\nstruct Binary;\n\nimpl HeuristicFrequencyRank for Binary {\n    fn rank(&self, byte: u8) -> u8 {\n        const TABLE: [u8; 256] = [\n            255, 128, 61, 43, 50, 41, 27, 28, 57, 15, 21, 13, 24, 17, 17, 89,\n            58, 16, 11, 7, 14, 23, 7, 6, 24, 9, 6, 5, 9, 4, 7, 16, 68, 11, 9,\n            6, 88, 7, 4, 4, 23, 9, 4, 8, 8, 5, 10, 4, 30, 11, 9, 24, 11, 5, 5,\n            5, 19, 11, 6, 17, 9, 9, 6, 8, 48, 58, 11, 14, 53, 40, 9, 9, 254,\n            35, 3, 6, 52, 23, 6, 6, 27, 4, 7, 11, 14, 13, 10, 11, 11, 5, 2,\n            10, 16, 12, 6, 19, 19, 20, 5, 14, 16, 31, 19, 7, 14, 20, 4, 4, 19,\n            8, 18, 20, 24, 1, 25, 19, 58, 29, 10, 5, 15, 20, 2, 2, 9, 4, 3, 5,\n            51, 11, 4, 53, 23, 39, 6, 4, 13, 81, 4, 186, 5, 67, 3, 2, 15, 0,\n            0, 1, 3, 2, 0, 0, 5, 0, 0, 0, 2, 0, 0, 0, 12, 2, 1, 1, 3, 1, 1, 1,\n            6, 1, 2, 1, 3, 1, 1, 2, 9, 1, 1, 0, 2, 2, 4, 4, 11, 6, 7, 3, 6, 9,\n            4, 5, 46, 18, 8, 18, 17, 3, 8, 20, 16, 10, 3, 7, 175, 4, 6, 7, 13,\n            3, 7, 3, 3, 1, 3, 3, 10, 3, 1, 5, 2, 0, 1, 2, 16, 3, 5, 1, 6, 1,\n            1, 2, 58, 20, 3, 14, 12, 2, 1, 3, 16, 3, 5, 8, 3, 1, 8, 6, 17, 6,\n            5, 3, 8, 6, 13, 175,\n        ];\n        TABLE[usize::from(byte)]\n    }\n}\n\ntrait IteratorExt: Iterator {\n    /// Like `Iterator::count`, but guarantees that it gets the count by\n    /// iterating over each element without taking any specialized shortcuts.\n    ///\n    /// We do this because the memchr crate may specialize `count` in certain\n    /// circumstances, and we'd generally like to measure how long it takes\n    /// to find all occurrences of a needle and not just the number of them.\n    fn count_slow(mut self) -> usize\n    where\n        Self: Sized,\n    {\n        let mut count = 0;\n        while let Some(_) = self.next() {\n            count += 1;\n        }\n        count\n    }\n}\n\nimpl<I: Iterator> IteratorExt for I {}\n"
  },
  {
    "path": "benchmarks/engines/rust-memchrold/Cargo.toml",
    "content": "[package]\npublish = false\nname = \"main\"\nversion = \"2.5.0\"  # should match 'memchr' version below\nedition = \"2021\"\n\n[workspace]\n\n[dependencies]\nanyhow = \"1.0.100\"\nmemchr = \"=2.5.0\"\n\n[dependencies.shared]\npath = \"../../shared\"\n\n[[bin]]\nname = \"main\"\npath = \"main.rs\"\n\n[profile.release]\ndebug = true\ncodegen-units = 1\nlto = \"fat\"\n"
  },
  {
    "path": "benchmarks/engines/rust-memchrold/main.rs",
    "content": "use std::io::Write;\n\nuse shared::{Benchmark, Sample};\n\nfn main() -> anyhow::Result<()> {\n    let mut args = vec![];\n    for osarg in std::env::args_os().skip(1) {\n        let Ok(arg) = osarg.into_string() else {\n            anyhow::bail!(\"all arguments must be valid UTF-8\")\n        };\n        args.push(arg);\n    }\n    anyhow::ensure!(\n        !args.is_empty(),\n        \"Usage: runner [--quiet] (<engine-name> | --version)\"\n    );\n    if args.iter().any(|a| a == \"--version\") {\n        writeln!(std::io::stdout(), env!(\"CARGO_PKG_VERSION\"))?;\n        return Ok(());\n    }\n    let quiet = args.iter().any(|a| a == \"--quiet\");\n    let engine = &**args.last().unwrap();\n    let b = Benchmark::from_stdin()?;\n    let samples = match (&*engine, &*b.model) {\n        (\"memchr-oneshot\", \"count-bytes\") => memchr_oneshot_count(&b)?,\n        (\"memchr-prebuilt\", \"count-bytes\") => memchr_prebuilt_count(&b)?,\n        (\"memchr-naive\", \"count-bytes\") => memchr_naive_count(&b)?,\n        (\"memchr2\", \"count-bytes\") => memchr2_count(&b)?,\n        (\"memchr3\", \"count-bytes\") => memchr3_count(&b)?,\n        (\"memrchr\", \"count-bytes\") => memrchr_count(&b)?,\n        (\"memrchr2\", \"count-bytes\") => memrchr2_count(&b)?,\n        (\"memrchr3\", \"count-bytes\") => memrchr3_count(&b)?,\n        (\"memmem-prebuilt\", \"count\") => memmem_prebuilt_count(&b)?,\n        (\"memmem-oneshot\", \"count\") => memmem_oneshot_count(&b)?,\n        (\"memmem-prebuilt\", \"needles-in-needles\") => {\n            memmem_prebuilt_needles(&b)?\n        }\n        (\"memmem-prebuilt\", \"needles-in-haystack\") => {\n            memmem_prebuilt_haystack(&b)?\n        }\n        (engine, model) => {\n            anyhow::bail!(\"unrecognized engine '{engine}' and model '{model}'\")\n        }\n    };\n    if !quiet {\n        let mut stdout = std::io::stdout().lock();\n        for s in samples.iter() {\n            writeln!(stdout, \"{},{}\", s.duration.as_nanos(), s.count)?;\n        }\n    }\n    Ok(())\n}\n\nfn memchr_oneshot_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle_byte()?;\n    shared::run(b, || {\n        Ok(shared::count_memchr(haystack, needle, |h, n1| {\n            memchr::memchr(n1, h)\n        }))\n    })\n}\n\nfn memchr_prebuilt_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle_byte()?;\n    shared::run(b, || Ok(memchr::memchr_iter(needle, haystack).count()))\n}\n\nfn memchr_naive_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle_byte()?;\n    shared::run(b, || {\n        Ok(shared::count_memchr(haystack, needle, |h, n1| {\n            h.iter().position(|&b| b == n1)\n        }))\n    })\n}\n\nfn memchr2_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let (n1, n2) = b.two_needle_bytes()?;\n    shared::run(b, || Ok(memchr::memchr2_iter(n1, n2, haystack).count()))\n}\n\nfn memchr3_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let (n1, n2, n3) = b.three_needle_bytes()?;\n    shared::run(b, || Ok(memchr::memchr3_iter(n1, n2, n3, haystack).count()))\n}\n\nfn memrchr_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle_byte()?;\n    shared::run(b, || Ok(memchr::memchr_iter(needle, haystack).rev().count()))\n}\n\nfn memrchr2_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let (n1, n2) = b.two_needle_bytes()?;\n    shared::run(b, || Ok(memchr::memchr2_iter(n1, n2, haystack).rev().count()))\n}\n\nfn memrchr3_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let (n1, n2, n3) = b.three_needle_bytes()?;\n    shared::run(b, || {\n        Ok(memchr::memchr3_iter(n1, n2, n3, haystack).rev().count())\n    })\n}\n\nfn memmem_prebuilt_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle()?;\n    let finder = memchr::memmem::Finder::new(needle);\n    shared::run(b, || Ok(finder.find_iter(haystack).count()))\n}\n\nfn memmem_prebuilt_needles(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let finders = b\n        .needles\n        .iter()\n        .map(|n| memchr::memmem::Finder::new(n))\n        .collect::<Vec<_>>();\n    shared::run(b, || {\n        let mut count = 0;\n        for (i, finder) in finders.iter().enumerate() {\n            for haystack in b.needles[i..].iter() {\n                if finder.find(haystack).is_some() {\n                    count += 1;\n                }\n            }\n        }\n        Ok(count)\n    })\n}\n\nfn memmem_prebuilt_haystack(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let finders = b\n        .needles\n        .iter()\n        .map(|n| memchr::memmem::Finder::new(n))\n        .collect::<Vec<_>>();\n    shared::run(b, || {\n        let mut count = 0;\n        for finder in finders.iter() {\n            if finder.find(haystack).is_some() {\n                count += 1;\n            }\n        }\n        Ok(count)\n    })\n}\n\nfn memmem_oneshot_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle()?;\n    let memmem = memchr::memmem::find;\n    shared::run(b, || Ok(shared::count_memmem(haystack, needle, memmem)))\n}\n"
  },
  {
    "path": "benchmarks/engines/rust-sliceslice/Cargo.toml",
    "content": "[package]\npublish = false\nname = \"main\"\nversion = \"0.4.3\"  # should match 'sliceslice' version below\nedition = \"2021\"\n\n[workspace]\n\n[dependencies]\nanyhow = \"1.0.100\"\nsliceslice = \"0.4.3\"\n\n[dependencies.shared]\npath = \"../../shared\"\n\n[[bin]]\nname = \"main\"\npath = \"main.rs\"\n\n[profile.release]\ndebug = true\ncodegen-units = 1\nlto = \"fat\"\n"
  },
  {
    "path": "benchmarks/engines/rust-sliceslice/main.rs",
    "content": "use std::io::Write;\n\nuse shared::{Benchmark, Sample};\n\nfn main() -> anyhow::Result<()> {\n    let Some(arg) = std::env::args_os().nth(1) else {\n        anyhow::bail!(\"Usage: runner (<engine-name> | --version)\")\n    };\n    let Ok(arg) = arg.into_string() else {\n        anyhow::bail!(\"argument given is not valid UTF-8\")\n    };\n    if arg == \"--version\" {\n        writeln!(std::io::stdout(), env!(\"CARGO_PKG_VERSION\"))?;\n        return Ok(());\n    }\n    let engine = arg;\n    let b = Benchmark::from_stdin()?;\n    let samples = match (&*engine, &*b.model) {\n        (\"memmem-prebuilt\", \"count\") => memmem_prebuilt_count(&b)?,\n        (\"memmem-oneshot\", \"count\") => memmem_oneshot_count(&b)?,\n        (\"memmem-prebuilt\", \"needles-in-needles\") => {\n            memmem_prebuilt_needles(&b)?\n        }\n        (\"memmem-prebuilt\", \"needles-in-haystack\") => {\n            memmem_prebuilt_haystack(&b)?\n        }\n        (engine, model) => {\n            anyhow::bail!(\"unrecognized engine '{engine}' and model '{model}'\")\n        }\n    };\n    let mut stdout = std::io::stdout().lock();\n    for s in samples.iter() {\n        writeln!(stdout, \"{},{}\", s.duration.as_nanos(), s.count)?;\n    }\n    Ok(())\n}\n\n// The sliceslice crate perplexingly only offers \"does the needle occur at\n// least once in the haystack\" APIs, and does not actually report the offset\n// at which the needle matches. It's therefore questionable to even bother\n// benchmarking it, but alas, it is quite fast and has been heavily optimized.\n// But this does mean we can only use sliceslice in benchmarks with a count\n// equal to 0 or 1. (We could define a distinct \"does any match occur\" model,\n// but it does not seem worth it.)\n\nfn memmem_prebuilt_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    #[cfg(target_arch = \"x86_64\")]\n    {\n        use sliceslice::x86::DynamicAvx2Searcher;\n        anyhow::ensure!(\n            is_x86_feature_detected!(\"avx2\"),\n            \"AVX2 not available\"\n        );\n        let haystack = &b.haystack;\n        let needle = b.one_needle()?;\n        // SAFETY: We just checked that avx2 is available.\n        unsafe {\n            let finder = DynamicAvx2Searcher::new(needle);\n            shared::run(b, || {\n                Ok(if finder.search_in(haystack) { 1 } else { 0 })\n            })\n        }\n    }\n    #[cfg(target_arch = \"aarch64\")]\n    {\n        use sliceslice::aarch64::NeonSearcher;\n        anyhow::ensure!(\n            std::arch::is_aarch64_feature_detected!(\"neon\"),\n            \"NEON not available\"\n        );\n        let haystack = &b.haystack;\n        let needle = b.one_needle()?;\n        // SAFETY: We just checked that avx2 is available.\n        unsafe {\n            let finder = NeonSearcher::new(needle);\n            shared::run(b, || {\n                Ok(if finder.search_in(haystack) { 1 } else { 0 })\n            })\n        }\n    }\n}\n\nfn memmem_prebuilt_needles(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    #[cfg(target_arch = \"x86_64\")]\n    {\n        use sliceslice::x86::DynamicAvx2Searcher;\n\n        anyhow::ensure!(\n            is_x86_feature_detected!(\"avx2\"),\n            \"AVX2 not available\"\n        );\n        let finders = b\n            .needles\n            .iter()\n            // SAFETY: We just checked that avx2 is available.\n            .map(|n| unsafe { DynamicAvx2Searcher::new(n) })\n            .collect::<Vec<_>>();\n        shared::run(b, || {\n            let mut count = 0;\n            for (i, finder) in finders.iter().enumerate() {\n                for haystack in b.needles[i..].iter() {\n                    // SAFETY: We just checked that avx2 is available.\n                    unsafe {\n                        if finder.search_in(haystack) {\n                            count += 1;\n                        }\n                    }\n                }\n            }\n            Ok(count)\n        })\n    }\n    #[cfg(target_arch = \"aarch64\")]\n    {\n        use sliceslice::aarch64::NeonSearcher;\n\n        anyhow::ensure!(\n            std::arch::is_aarch64_feature_detected!(\"neon\"),\n            \"NEON not available\"\n        );\n        let finders = b\n            .needles\n            .iter()\n            // SAFETY: We just checked that avx2 is available.\n            .map(|n| unsafe { NeonSearcher::new(n) })\n            .collect::<Vec<_>>();\n        shared::run(b, || {\n            let mut count = 0;\n            for (i, finder) in finders.iter().enumerate() {\n                for haystack in b.needles[i..].iter() {\n                    // SAFETY: We just checked that avx2 is available.\n                    unsafe {\n                        if finder.search_in(haystack) {\n                            count += 1;\n                        }\n                    }\n                }\n            }\n            Ok(count)\n        })\n    }\n}\n\nfn memmem_prebuilt_haystack(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    #[cfg(target_arch = \"x86_64\")]\n    {\n        use sliceslice::x86::DynamicAvx2Searcher;\n\n        anyhow::ensure!(\n            is_x86_feature_detected!(\"avx2\"),\n            \"AVX2 not available\"\n        );\n        let haystack = &b.haystack;\n        let finders = b\n            .needles\n            .iter()\n            // SAFETY: We just checked that avx2 is available.\n            .map(|n| unsafe { DynamicAvx2Searcher::new(n) })\n            .collect::<Vec<_>>();\n        shared::run(b, || {\n            let mut count = 0;\n            for finder in finders.iter() {\n                // SAFETY: We just checked that avx2 is available.\n                unsafe {\n                    if finder.search_in(haystack) {\n                        count += 1;\n                    }\n                }\n            }\n            Ok(count)\n        })\n    }\n    #[cfg(target_arch = \"aarch64\")]\n    {\n        use sliceslice::aarch64::NeonSearcher;\n\n        anyhow::ensure!(\n            std::arch::is_aarch64_feature_detected!(\"neon\"),\n            \"NEON not available\"\n        );\n        let haystack = &b.haystack;\n        let finders = b\n            .needles\n            .iter()\n            // SAFETY: We just checked that avx2 is available.\n            .map(|n| unsafe { NeonSearcher::new(n) })\n            .collect::<Vec<_>>();\n        shared::run(b, || {\n            let mut count = 0;\n            for finder in finders.iter() {\n                // SAFETY: We just checked that avx2 is available.\n                unsafe {\n                    if finder.search_in(haystack) {\n                        count += 1;\n                    }\n                }\n            }\n            Ok(count)\n        })\n    }\n}\n\nfn memmem_oneshot_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    #[cfg(target_arch = \"x86_64\")]\n    {\n        use sliceslice::x86::DynamicAvx2Searcher;\n\n        anyhow::ensure!(\n            is_x86_feature_detected!(\"avx2\"),\n            \"AVX2 not available\"\n        );\n        let haystack = &b.haystack;\n        let needle = b.one_needle()?;\n        shared::run(b, || {\n            // SAFETY: We just checked that avx2 is available.\n            Ok(unsafe {\n                if DynamicAvx2Searcher::new(needle).search_in(haystack) {\n                    1\n                } else {\n                    0\n                }\n            })\n        })\n    }\n    #[cfg(target_arch = \"aarch64\")]\n    {\n        use sliceslice::aarch64::NeonSearcher;\n\n        anyhow::ensure!(\n            std::arch::is_aarch64_feature_detected!(\"neon\"),\n            \"NEON not available\"\n        );\n        let haystack = &b.haystack;\n        let needle = b.one_needle()?;\n        shared::run(b, || {\n            // SAFETY: We just checked that avx2 is available.\n            Ok(unsafe {\n                if NeonSearcher::new(needle).search_in(haystack) {\n                    1\n                } else {\n                    0\n                }\n            })\n        })\n    }\n}\n"
  },
  {
    "path": "benchmarks/engines/rust-std/Cargo.toml",
    "content": "[package]\npublish = false\nname = \"main\"\nversion = \"0.0.0\"  # we get version from build script\nedition = \"2021\"\n\n[workspace]\n\n[dependencies]\nanyhow = \"1.0.100\"\n\n[build-dependencies]\nregex-lite = \"0.1\"\n\n[dependencies.shared]\npath = \"../../shared\"\n\n[[bin]]\nname = \"main\"\npath = \"main.rs\"\n\n[profile.release]\ndebug = true\ncodegen-units = 1\nlto = \"fat\"\n"
  },
  {
    "path": "benchmarks/engines/rust-std/build.rs",
    "content": "use std::process::Command;\n\nuse regex_lite::Regex;\n\nfn main() {\n    let version = rustc_version().unwrap_or(\"unknown\".to_string());\n    println!(\"cargo:rustc-env=RUSTC_VERSION={}\", version);\n}\n\nfn rustc_version() -> Option<String> {\n    let re = Regex::new(\n        r\"^rustc (?<version>\\d+\\.\\d+\\.\\d+(?:-\\S+)) \\((?<rev>[0-9a-f]+)\",\n    )\n    .unwrap();\n\n    let output = Command::new(\"rustc\").arg(\"--version\").output().ok()?;\n    let stdout = String::from_utf8_lossy(&output.stdout).trim().to_string();\n    let first_line = stdout.lines().next()?;\n    let caps = re.captures(first_line)?;\n    Some(format!(\"{} {}\", &caps[\"version\"], &caps[\"rev\"]))\n}\n"
  },
  {
    "path": "benchmarks/engines/rust-std/main.rs",
    "content": "use std::io::Write;\n\nuse shared::{Benchmark, Sample};\n\nfn main() -> anyhow::Result<()> {\n    let Some(arg) = std::env::args_os().nth(1) else {\n        anyhow::bail!(\"Usage: runner (<engine-name> | --version)\")\n    };\n    let Ok(arg) = arg.into_string() else {\n        anyhow::bail!(\"argument given is not valid UTF-8\")\n    };\n    if arg == \"--version\" {\n        writeln!(std::io::stdout(), env!(\"RUSTC_VERSION\"))?;\n        return Ok(());\n    }\n    let engine = arg;\n    let b = Benchmark::from_stdin()?;\n    let samples = match (&*engine, &*b.model) {\n        (\"memmem-oneshot\", \"count\") => memmem_oneshot_count(&b)?,\n        (\"memmem-prebuilt\", \"count\") => memmem_prebuilt_count(&b)?,\n        (engine, model) => {\n            anyhow::bail!(\"unrecognized engine '{engine}' and model '{model}'\")\n        }\n    };\n    let mut stdout = std::io::stdout().lock();\n    for s in samples.iter() {\n        writeln!(stdout, \"{},{}\", s.duration.as_nanos(), s.count)?;\n    }\n    Ok(())\n}\n\nfn memmem_oneshot_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = std::str::from_utf8(&b.haystack)?;\n    let needle = std::str::from_utf8(b.one_needle()?)?;\n    shared::run(b, || {\n        Ok(shared::count_memmem_str(haystack, needle, |h, n| {\n            h.match_indices(n).map(|(i, _)| i).next()\n        }))\n    })\n}\n\n/// A prebuilt version of the std searcher. This isn't quite as \"prebuilt\" as\n/// is possible, since each measurement doesn't just include the creation of\n/// the iterator but also the searcher. Where as the memchr crate can do this\n/// where the searcher is created once and the measurement only includes the\n/// creation of the iterator.\n///\n/// So probably we \"should\" have created some other kind of engine called\n/// \"partial prebuilt\" but it makes things even more confusing. At some point,\n/// this is just the way the cookie crumbles.\n///\n/// Remember, it's not that oneshot and prebuilt aren't comparable.\n/// It's absolutely fair to say, for example, \"Rust's standard library\n/// substring search is slow because it doesn't let one amortize the cost of\n/// construction.\" But it's *also* interesting to make these assumptions a\n/// little more explicit in our measurement model. But we do this within\n/// reason.\nfn memmem_prebuilt_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = std::str::from_utf8(&b.haystack)?;\n    let needle = std::str::from_utf8(b.one_needle()?)?;\n    shared::run(b, || Ok(haystack.matches(needle).count()))\n}\n"
  },
  {
    "path": "benchmarks/engines/stringzilla/Cargo.toml",
    "content": "[package]\npublish = false\nname = \"main\"\nversion = \"4.0.14\"  # should match 'stringzilla' version below\nedition = \"2021\"\n\n[workspace]\n\n[dependencies]\nanyhow = \"1.0.100\"\nstringzilla = \"=4.0.14\"\n\n[dependencies.shared]\npath = \"../../shared\"\n\n[[bin]]\nname = \"main\"\npath = \"main.rs\"\n\n[profile.release]\ndebug = true\ncodegen-units = 1\nlto = \"fat\"\n"
  },
  {
    "path": "benchmarks/engines/stringzilla/main.rs",
    "content": "use std::io::Write;\n\nuse shared::{Benchmark, Sample};\n\nuse stringzilla::stringzilla::StringZillableBinary;\n\nfn main() -> anyhow::Result<()> {\n    let Some(arg) = std::env::args_os().nth(1) else {\n        anyhow::bail!(\"Usage: runner (<engine-name> | --version)\")\n    };\n    let Ok(arg) = arg.into_string() else {\n        anyhow::bail!(\"argument given is not valid UTF-8\")\n    };\n    if arg == \"--version\" {\n        writeln!(std::io::stdout(), env!(\"CARGO_PKG_VERSION\"))?;\n        return Ok(());\n    }\n    let engine = arg;\n    let b = Benchmark::from_stdin()?;\n    let samples = match (&*engine, &*b.model) {\n        (\"memmem-oneshot\", \"count\") => memmem_oneshot_count(&b)?,\n        (engine, model) => {\n            anyhow::bail!(\"unrecognized engine '{engine}' and model '{model}'\")\n        }\n    };\n    let mut stdout = std::io::stdout().lock();\n    for s in samples.iter() {\n        writeln!(stdout, \"{},{}\", s.duration.as_nanos(), s.count)?;\n    }\n    Ok(())\n}\n\nfn memmem_oneshot_count(b: &Benchmark) -> anyhow::Result<Vec<Sample>> {\n    let haystack = &b.haystack;\n    let needle = b.one_needle()?;\n    shared::run(b, || {\n        Ok(shared::count_memmem(haystack, needle, |h, n| h.sz_find(n)))\n    })\n}\n"
  },
  {
    "path": "benchmarks/engines.toml",
    "content": "# Engines from C's standard library, i.e., `memchr` and `memmem`.\n\n[[engine]]\n  name = \"libc/memchr/oneshot\"\n  cwd = \"./engines/libc\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memchr-oneshot\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"libc/memmem/oneshot\"\n  cwd = \"./engines/libc\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memmem-oneshot\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n# Engines based on the `bytecount` Rust crate.\n#\n# Note that we call it a \"memchr\" engine, but all it can do is report the count\n# of matches and not individual offsets. So one needs to be careful when doing\n# comparisons. We include it here because the `memchr` crate has a similar\n# optimization when you call `Iterator::count`.\n\n[[engine]]\n  name = \"rust/bytecount/memchr/oneshot\"\n  cwd = \"./engines/rust-bytecount\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memchr-oneshot\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/bytecount/memchr/oneshot/wasm32\"\n  cwd = \"./engines/rust-bytecount\"\n  [engine.version]\n    bin = \"wasmtime\"\n    args = [\n      \"run\", \"--wasm\", \"simd\", \"--\",\n      \"./target/wasm32-wasip1/release/main.wasm\",\n      \"--version\",\n    ]\n  [engine.run]\n    bin = \"wasmtime\"\n    args = [\n      \"run\", \"--wasm\", \"simd\", \"--\",\n      \"./target/wasm32-wasip1/release/main.wasm\",\n      \"memchr-oneshot\",\n    ]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n    envs = [\n      { name = \"CARGO_BUILD_TARGET\", value = \"wasm32-wasip1\" },\n      { name = \"RUSTFLAGS\", value = \"-Ctarget-feature=+simd128\" },\n    ]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n    envs = [\n      { name = \"CARGO_BUILD_TARGET\", value = \"wasm32-wasip1\" },\n      { name = \"RUSTFLAGS\", value = \"-Ctarget-feature=+simd128\" },\n    ]\n\n# Engines based on the `jetscii` Rust crate.\n\n[[engine]]\n  name = \"rust/jetscii/memmem/prebuilt\"\n  cwd = \"./engines/rust-jetscii\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memmem-prebuilt\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/jetscii/memmem/oneshot\"\n  cwd = \"./engines/rust-jetscii\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memmem-oneshot\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n# Engines based on the `sliceslice` Rust crate.\n#\n# Note that this crate only supports \"does the haystack match or not.\" It does\n# not report offsets at which a match occurs.\n\n[[engine]]\n  name = \"rust/sliceslice/memmem/prebuilt\"\n  cwd = \"./engines/rust-sliceslice\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memmem-prebuilt\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/sliceslice/memmem/oneshot\"\n  cwd = \"./engines/rust-sliceslice\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memmem-oneshot\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n# Engines based on the `stringzilla` library.\n#\n# See: https://github.com/ashvardanian/StringZilla\n\n[[engine]]\n  name = \"stringzilla/memmem/oneshot\"\n  cwd = \"./engines/stringzilla\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memmem-oneshot\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n# Engines based on the Rust standard library.\n\n[[engine]]\n  name = \"rust/std/memmem/prebuilt\"\n  cwd = \"./engines/rust-std\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memmem-prebuilt\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/std/memmem/oneshot\"\n  cwd = \"./engines/rust-std\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memmem-oneshot\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n# All of the engines from the `memchr` crate are below. There are a lot of them\n# because the `memchr` crate exposes a lot of different APIs.\n#\n# A lot of the engine names include qualifiers like 'oneshot' and 'prebuilt'.\n# The former means that the measurement includes both the construction of the\n# searcher and the search itself. The latter means that only the search itself\n# (to the extent possible) is measured. If an engine name doesn't have\n# 'oneshot' or 'prebuilt' in it, then that generally means it is 'prebuilt'.\n# The main utility of 'oneshot' engines is to make them comparable to other\n# implementations that only expose oneshot APIs. For example, libc's memchr and\n# memmem.\n\n[[engine]]\n  name = \"rust/memchr/memchr/oneshot\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memchr-oneshot\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchr/memchr/prebuilt\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memchr-prebuilt\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchr/memchr/onlycount\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memchr-onlycount\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchr/memchr/fallback\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memchr-fallback\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchr/memchr/naive\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memchr-naive\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchr/memchr2\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memchr2\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchr/memchr2/fallback\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memchr2-fallback\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchr/memchr2/naive\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memchr2-naive\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchr/memchr3\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memchr3\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchr/memchr3/fallback\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memchr3-fallback\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchr/memchr3/naive\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memchr3-naive\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchr/memrchr\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memrchr\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchr/memrchr2\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memrchr2\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchr/memrchr3\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memrchr3\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchr/memmem/prebuilt\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memmem-prebuilt\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchr/memmem/oneshot\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memmem-oneshot\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchr/memmem/binary\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memmem-binary\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchr/memmem/twoway\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memmem-twoway\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchr/memmem/rabinkarp\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memmem-rabinkarp\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchr/memmem/shiftor\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memmem-shiftor\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n# Engines that specifically target wasm32. These reuse the actual code from\n# existing engines in `rust/memchr`, but change the build configuration to\n# build for `wasm32-wasip1` and use the `wasmtime` JIT to actually run it. We\n# don't define every possible engine for wasm32, but just a subset for basic\n# sanity checks. If it would be beneficial to be more exhaustive, please file\n# an issue.\n\n[[engine]]\n  name = \"rust/memchr/memchr/wasm32\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"wasmtime\"\n    args = [\n      \"run\", \"--wasm\", \"simd\", \"--\",\n      \"./target/wasm32-wasip1/release/main.wasm\",\n      \"--version\",\n    ]\n  [engine.run]\n    bin = \"wasmtime\"\n    args = [\n      \"run\", \"--wasm\", \"simd\", \"--\",\n      \"./target/wasm32-wasip1/release/main.wasm\",\n      \"memchr-prebuilt\",\n    ]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n    envs = [\n      { name = \"CARGO_BUILD_TARGET\", value = \"wasm32-wasip1\" },\n      { name = \"RUSTFLAGS\", value = \"-Ctarget-feature=+simd128\" },\n    ]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n    envs = [\n      { name = \"CARGO_BUILD_TARGET\", value = \"wasm32-wasip1\" },\n      { name = \"RUSTFLAGS\", value = \"-Ctarget-feature=+simd128\" },\n    ]\n\n[[engine]]\n  name = \"rust/memchr/memchr/onlycount/wasm32\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"wasmtime\"\n    args = [\n      \"run\", \"--wasm\", \"simd\", \"--\",\n      \"./target/wasm32-wasip1/release/main.wasm\",\n      \"--version\",\n    ]\n  [engine.run]\n    bin = \"wasmtime\"\n    args = [\n      \"run\", \"--wasm\", \"simd\", \"--\",\n      \"./target/wasm32-wasip1/release/main.wasm\",\n      \"memchr-onlycount\",\n    ]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n    envs = [\n      { name = \"CARGO_BUILD_TARGET\", value = \"wasm32-wasip1\" },\n      { name = \"RUSTFLAGS\", value = \"-Ctarget-feature=+simd128\" },\n    ]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n    envs = [\n      { name = \"CARGO_BUILD_TARGET\", value = \"wasm32-wasip1\" },\n      { name = \"RUSTFLAGS\", value = \"-Ctarget-feature=+simd128\" },\n    ]\n\n[[engine]]\n  name = \"rust/memchr/memchr2/wasm32\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"wasmtime\"\n    args = [\n      \"run\", \"--wasm\", \"simd\", \"--\",\n      \"./target/wasm32-wasip1/release/main.wasm\",\n      \"--version\",\n    ]\n  [engine.run]\n    bin = \"wasmtime\"\n    args = [\n      \"run\", \"--wasm\", \"simd\", \"--\",\n      \"./target/wasm32-wasip1/release/main.wasm\",\n      \"memchr2\",\n    ]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n    envs = [\n      { name = \"CARGO_BUILD_TARGET\", value = \"wasm32-wasip1\" },\n      { name = \"RUSTFLAGS\", value = \"-Ctarget-feature=+simd128\" },\n    ]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n    envs = [\n      { name = \"CARGO_BUILD_TARGET\", value = \"wasm32-wasip1\" },\n      { name = \"RUSTFLAGS\", value = \"-Ctarget-feature=+simd128\" },\n    ]\n\n[[engine]]\n  name = \"rust/memchr/memchr3/wasm32\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"wasmtime\"\n    args = [\n      \"run\", \"--wasm\", \"simd\", \"--\",\n      \"./target/wasm32-wasip1/release/main.wasm\",\n      \"--version\",\n    ]\n  [engine.run]\n    bin = \"wasmtime\"\n    args = [\n      \"run\", \"--wasm\", \"simd\", \"--\",\n      \"./target/wasm32-wasip1/release/main.wasm\",\n      \"memchr3\",\n    ]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n    envs = [\n      { name = \"CARGO_BUILD_TARGET\", value = \"wasm32-wasip1\" },\n      { name = \"RUSTFLAGS\", value = \"-Ctarget-feature=+simd128\" },\n    ]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n    envs = [\n      { name = \"CARGO_BUILD_TARGET\", value = \"wasm32-wasip1\" },\n      { name = \"RUSTFLAGS\", value = \"-Ctarget-feature=+simd128\" },\n    ]\n\n[[engine]]\n  name = \"rust/memchr/memmem/wasm32\"\n  cwd = \"./engines/rust-memchr\"\n  [engine.version]\n    bin = \"wasmtime\"\n    args = [\n      \"run\", \"--wasm\", \"simd\", \"--\",\n      \"./target/wasm32-wasip1/release/main.wasm\",\n      \"--version\",\n    ]\n  [engine.run]\n    bin = \"wasmtime\"\n    args = [\n      \"run\", \"--wasm\", \"simd\", \"--\",\n      \"./target/wasm32-wasip1/release/main.wasm\",\n      \"memmem-prebuilt\",\n    ]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n    envs = [\n      { name = \"CARGO_BUILD_TARGET\", value = \"wasm32-wasip1\" },\n      { name = \"RUSTFLAGS\", value = \"-Ctarget-feature=+simd128\" },\n    ]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n    envs = [\n      { name = \"CARGO_BUILD_TARGET\", value = \"wasm32-wasip1\" },\n      { name = \"RUSTFLAGS\", value = \"-Ctarget-feature=+simd128\" },\n    ]\n\n# Engines that specifically target memchr 2.5.0.\n\n[[engine]]\n  name = \"rust/memchrold/memchr/oneshot\"\n  cwd = \"./engines/rust-memchrold\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memchr-oneshot\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchrold/memchr/prebuilt\"\n  cwd = \"./engines/rust-memchrold\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memchr-prebuilt\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchrold/memchr/naive\"\n  cwd = \"./engines/rust-memchrold\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memchr-naive\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchrold/memchr2\"\n  cwd = \"./engines/rust-memchrold\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memchr2\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchrold/memchr3\"\n  cwd = \"./engines/rust-memchrold\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memchr3\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchrold/memrchr\"\n  cwd = \"./engines/rust-memchrold\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memrchr\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchrold/memrchr2\"\n  cwd = \"./engines/rust-memchrold\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memrchr2\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchrold/memrchr3\"\n  cwd = \"./engines/rust-memchrold\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memrchr3\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchrold/memmem/prebuilt\"\n  cwd = \"./engines/rust-memchrold\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memmem-prebuilt\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n\n[[engine]]\n  name = \"rust/memchrold/memmem/oneshot\"\n  cwd = \"./engines/rust-memchrold\"\n  [engine.version]\n    bin = \"./target/release/main\"\n    args = [\"--version\"]\n  [engine.run]\n    bin = \"./target/release/main\"\n    args = [\"memmem-oneshot\"]\n  [[engine.build]]\n    bin = \"cargo\"\n    args = [\"build\", \"--release\"]\n  [[engine.clean]]\n    bin = \"cargo\"\n    args = [\"clean\"]\n"
  },
  {
    "path": "benchmarks/haystacks/README.md",
    "content": "This directory contains benchmark corpora. Each sub-directory contains a README\ndocumenting the corpus a bit more.\n"
  },
  {
    "path": "benchmarks/haystacks/code/README.md",
    "content": "This data contains corpora generated from source code. These sorts of corpora\nare important because code is something that is frequently searched.\n\nThis corpus was generated by running\n\n```\n$ find ./library/alloc -name '*.rs' -print0 \\\n    | xargs -0 cat > .../memchr/bench/data/code/rust-library.rs\n```\n\nin a checkout of the https://github.com/rust-lang/rust repository at commit\n78c963945aa35a76703bf62e024af2d85b2796e2.\n"
  },
  {
    "path": "benchmarks/haystacks/code/rust-library.rs",
    "content": "use std::collections::LinkedList;\nuse test::Bencher;\n\n#[bench]\nfn bench_collect_into(b: &mut Bencher) {\n    let v = &[0; 64];\n    b.iter(|| {\n        let _: LinkedList<_> = v.iter().cloned().collect();\n    })\n}\n\n#[bench]\nfn bench_push_front(b: &mut Bencher) {\n    let mut m: LinkedList<_> = LinkedList::new();\n    b.iter(|| {\n        m.push_front(0);\n    })\n}\n\n#[bench]\nfn bench_push_back(b: &mut Bencher) {\n    let mut m: LinkedList<_> = LinkedList::new();\n    b.iter(|| {\n        m.push_back(0);\n    })\n}\n\n#[bench]\nfn bench_push_back_pop_back(b: &mut Bencher) {\n    let mut m: LinkedList<_> = LinkedList::new();\n    b.iter(|| {\n        m.push_back(0);\n        m.pop_back();\n    })\n}\n\n#[bench]\nfn bench_push_front_pop_front(b: &mut Bencher) {\n    let mut m: LinkedList<_> = LinkedList::new();\n    b.iter(|| {\n        m.push_front(0);\n        m.pop_front();\n    })\n}\n\n#[bench]\nfn bench_iter(b: &mut Bencher) {\n    let v = &[0; 128];\n    let m: LinkedList<_> = v.iter().cloned().collect();\n    b.iter(|| {\n        assert!(m.iter().count() == 128);\n    })\n}\n#[bench]\nfn bench_iter_mut(b: &mut Bencher) {\n    let v = &[0; 128];\n    let mut m: LinkedList<_> = v.iter().cloned().collect();\n    b.iter(|| {\n        assert!(m.iter_mut().count() == 128);\n    })\n}\n#[bench]\nfn bench_iter_rev(b: &mut Bencher) {\n    let v = &[0; 128];\n    let m: LinkedList<_> = v.iter().cloned().collect();\n    b.iter(|| {\n        assert!(m.iter().rev().count() == 128);\n    })\n}\n#[bench]\nfn bench_iter_mut_rev(b: &mut Bencher) {\n    let v = &[0; 128];\n    let mut m: LinkedList<_> = v.iter().cloned().collect();\n    b.iter(|| {\n        assert!(m.iter_mut().rev().count() == 128);\n    })\n}\nuse test::{black_box, Bencher};\n\n#[bench]\nfn char_iterator(b: &mut Bencher) {\n    let s = \"ศไทย中华Việt Nam; Mary had a little lamb, Little lamb\";\n\n    b.iter(|| s.chars().count());\n}\n\n#[bench]\nfn char_iterator_for(b: &mut Bencher) {\n    let s = \"ศไทย中华Việt Nam; Mary had a little lamb, Little lamb\";\n\n    b.iter(|| {\n        for ch in s.chars() {\n            black_box(ch);\n        }\n    });\n}\n\n#[bench]\nfn char_iterator_ascii(b: &mut Bencher) {\n    let s = \"Mary had a little lamb, Little lamb\n    Mary had a little lamb, Little lamb\n    Mary had a little lamb, Little lamb\n    Mary had a little lamb, Little lamb\n    Mary had a little lamb, Little lamb\n    Mary had a little lamb, Little lamb\";\n\n    b.iter(|| s.chars().count());\n}\n\n#[bench]\nfn char_iterator_rev(b: &mut Bencher) {\n    let s = \"ศไทย中华Việt Nam; Mary had a little lamb, Little lamb\";\n\n    b.iter(|| s.chars().rev().count());\n}\n\n#[bench]\nfn char_iterator_rev_for(b: &mut Bencher) {\n    let s = \"ศไทย中华Việt Nam; Mary had a little lamb, Little lamb\";\n\n    b.iter(|| {\n        for ch in s.chars().rev() {\n            black_box(ch);\n        }\n    });\n}\n\n#[bench]\nfn char_indicesator(b: &mut Bencher) {\n    let s = \"ศไทย中华Việt Nam; Mary had a little lamb, Little lamb\";\n    let len = s.chars().count();\n\n    b.iter(|| assert_eq!(s.char_indices().count(), len));\n}\n\n#[bench]\nfn char_indicesator_rev(b: &mut Bencher) {\n    let s = \"ศไทย中华Việt Nam; Mary had a little lamb, Little lamb\";\n    let len = s.chars().count();\n\n    b.iter(|| assert_eq!(s.char_indices().rev().count(), len));\n}\n\n#[bench]\nfn split_unicode_ascii(b: &mut Bencher) {\n    let s = \"ประเทศไทย中华Việt Namประเทศไทย中华Việt Nam\";\n\n    b.iter(|| assert_eq!(s.split('V').count(), 3));\n}\n\n#[bench]\nfn split_ascii(b: &mut Bencher) {\n    let s = \"Mary had a little lamb, Little lamb, little-lamb.\";\n    let len = s.split(' ').count();\n\n    b.iter(|| assert_eq!(s.split(' ').count(), len));\n}\n\n#[bench]\nfn split_extern_fn(b: &mut Bencher) {\n    let s = \"Mary had a little lamb, Little lamb, little-lamb.\";\n    let len = s.split(' ').count();\n    fn pred(c: char) -> bool {\n        c == ' '\n    }\n\n    b.iter(|| assert_eq!(s.split(pred).count(), len));\n}\n\n#[bench]\nfn split_closure(b: &mut Bencher) {\n    let s = \"Mary had a little lamb, Little lamb, little-lamb.\";\n    let len = s.split(' ').count();\n\n    b.iter(|| assert_eq!(s.split(|c: char| c == ' ').count(), len));\n}\n\n#[bench]\nfn split_slice(b: &mut Bencher) {\n    let s = \"Mary had a little lamb, Little lamb, little-lamb.\";\n    let len = s.split(' ').count();\n\n    let c: &[char] = &[' '];\n    b.iter(|| assert_eq!(s.split(c).count(), len));\n}\n\n#[bench]\nfn bench_join(b: &mut Bencher) {\n    let s = \"ศไทย中华Việt Nam; Mary had a little lamb, Little lamb\";\n    let sep = \"→\";\n    let v = vec![s, s, s, s, s, s, s, s, s, s];\n    b.iter(|| {\n        assert_eq!(v.join(sep).len(), s.len() * 10 + sep.len() * 9);\n    })\n}\n\n#[bench]\nfn bench_contains_short_short(b: &mut Bencher) {\n    let haystack = \"Lorem ipsum dolor sit amet, consectetur adipiscing elit.\";\n    let needle = \"sit\";\n\n    b.iter(|| {\n        assert!(haystack.contains(needle));\n    })\n}\n\n#[bench]\nfn bench_contains_short_long(b: &mut Bencher) {\n    let haystack = \"\\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse quis lorem sit amet dolor \\\nultricies condimentum. Praesent iaculis purus elit, ac malesuada quam malesuada in. Duis sed orci \\\neros. Suspendisse sit amet magna mollis, mollis nunc luctus, imperdiet mi. Integer fringilla non \\\nsem ut lacinia. Fusce varius tortor a risus porttitor hendrerit. Morbi mauris dui, ultricies nec \\\ntempus vel, gravida nec quam.\n\nIn est dui, tincidunt sed tempus interdum, adipiscing laoreet ante. Etiam tempor, tellus quis \\\nsagittis interdum, nulla purus mattis sem, quis auctor erat odio ac tellus. In nec nunc sit amet \\\ndiam volutpat molestie at sed ipsum. Vestibulum laoreet consequat vulputate. Integer accumsan \\\nlorem ac dignissim placerat. Suspendisse convallis faucibus lorem. Aliquam erat volutpat. In vel \\\neleifend felis. Sed suscipit nulla lorem, sed mollis est sollicitudin et. Nam fermentum egestas \\\ninterdum. Curabitur ut nisi justo.\n\nSed sollicitudin ipsum tellus, ut condimentum leo eleifend nec. Cras ut velit ante. Phasellus nec \\\nmollis odio. Mauris molestie erat in arcu mattis, at aliquet dolor vehicula. Quisque malesuada \\\nlectus sit amet nisi pretium, a condimentum ipsum porta. Morbi at dapibus diam. Praesent egestas \\\nest sed risus elementum, eu rutrum metus ultrices. Etiam fermentum consectetur magna, id rutrum \\\nfelis accumsan a. Aliquam ut pellentesque libero. Sed mi nulla, lobortis eu tortor id, suscipit \\\nultricies neque. Morbi iaculis sit amet risus at iaculis. Praesent eget ligula quis turpis \\\nfeugiat suscipit vel non arcu. Interdum et malesuada fames ac ante ipsum primis in faucibus. \\\nAliquam sit amet placerat lorem.\n\nCras a lacus vel ante posuere elementum. Nunc est leo, bibendum ut facilisis vel, bibendum at \\\nmauris. Nullam adipiscing diam vel odio ornare, luctus adipiscing mi luctus. Nulla facilisi. \\\nMauris adipiscing bibendum neque, quis adipiscing lectus tempus et. Sed feugiat erat et nisl \\\nlobortis pharetra. Donec vitae erat enim. Nullam sit amet felis et quam lacinia tincidunt. Aliquam \\\nsuscipit dapibus urna. Sed volutpat urna in magna pulvinar volutpat. Phasellus nec tellus ac diam \\\ncursus accumsan.\n\nNam lectus enim, dapibus non nisi tempor, consectetur convallis massa. Maecenas eleifend dictum \\\nfeugiat. Etiam quis mauris vel risus luctus mattis a a nunc. Nullam orci quam, imperdiet id \\\nvehicula in, porttitor ut nibh. Duis sagittis adipiscing nisl vitae congue. Donec mollis risus eu \\\nleo suscipit, varius porttitor nulla porta. Pellentesque ut sem nec nisi euismod vehicula. Nulla \\\nmalesuada sollicitudin quam eu fermentum.\";\n    let needle = \"english\";\n\n    b.iter(|| {\n        assert!(!haystack.contains(needle));\n    })\n}\n\n#[bench]\nfn bench_contains_bad_naive(b: &mut Bencher) {\n    let haystack = \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\";\n    let needle = \"aaaaaaaab\";\n\n    b.iter(|| {\n        assert!(!haystack.contains(needle));\n    })\n}\n\n#[bench]\nfn bench_contains_equal(b: &mut Bencher) {\n    let haystack = \"Lorem ipsum dolor sit amet, consectetur adipiscing elit.\";\n    let needle = \"Lorem ipsum dolor sit amet, consectetur adipiscing elit.\";\n\n    b.iter(|| {\n        assert!(haystack.contains(needle));\n    })\n}\n\nmacro_rules! make_test_inner {\n    ($s:ident, $code:expr, $name:ident, $str:expr, $iters:expr) => {\n        #[bench]\n        fn $name(bencher: &mut Bencher) {\n            let mut $s = $str;\n            black_box(&mut $s);\n            bencher.iter(|| {\n                for _ in 0..$iters {\n                    black_box($code);\n                }\n            });\n        }\n    };\n}\n\nmacro_rules! make_test {\n    ($name:ident, $s:ident, $code:expr) => {\n        make_test!($name, $s, $code, 1);\n    };\n    ($name:ident, $s:ident, $code:expr, $iters:expr) => {\n        mod $name {\n            use test::Bencher;\n            use test::black_box;\n\n            // Short strings: 65 bytes each\n            make_test_inner!($s, $code, short_ascii,\n                \"Mary had a little lamb, Little lamb Mary had a littl lamb, lamb!\", $iters);\n            make_test_inner!($s, $code, short_mixed,\n                \"ศไทย中华Việt Nam; Mary had a little lamb, Little lam!\", $iters);\n            make_test_inner!($s, $code, short_pile_of_poo,\n                \"💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩!\", $iters);\n            make_test_inner!($s, $code, long_lorem_ipsum,\"\\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse quis lorem sit amet dolor \\\nultricies condimentum. Praesent iaculis purus elit, ac malesuada quam malesuada in. Duis sed orci \\\neros. Suspendisse sit amet magna mollis, mollis nunc luctus, imperdiet mi. Integer fringilla non \\\nsem ut lacinia. Fusce varius tortor a risus porttitor hendrerit. Morbi mauris dui, ultricies nec \\\ntempus vel, gravida nec quam.\n\nIn est dui, tincidunt sed tempus interdum, adipiscing laoreet ante. Etiam tempor, tellus quis \\\nsagittis interdum, nulla purus mattis sem, quis auctor erat odio ac tellus. In nec nunc sit amet \\\ndiam volutpat molestie at sed ipsum. Vestibulum laoreet consequat vulputate. Integer accumsan \\\nlorem ac dignissim placerat. Suspendisse convallis faucibus lorem. Aliquam erat volutpat. In vel \\\neleifend felis. Sed suscipit nulla lorem, sed mollis est sollicitudin et. Nam fermentum egestas \\\ninterdum. Curabitur ut nisi justo.\n\nSed sollicitudin ipsum tellus, ut condimentum leo eleifend nec. Cras ut velit ante. Phasellus nec \\\nmollis odio. Mauris molestie erat in arcu mattis, at aliquet dolor vehicula. Quisque malesuada \\\nlectus sit amet nisi pretium, a condimentum ipsum porta. Morbi at dapibus diam. Praesent egestas \\\nest sed risus elementum, eu rutrum metus ultrices. Etiam fermentum consectetur magna, id rutrum \\\nfelis accumsan a. Aliquam ut pellentesque libero. Sed mi nulla, lobortis eu tortor id, suscipit \\\nultricies neque. Morbi iaculis sit amet risus at iaculis. Praesent eget ligula quis turpis \\\nfeugiat suscipit vel non arcu. Interdum et malesuada fames ac ante ipsum primis in faucibus. \\\nAliquam sit amet placerat lorem.\n\nCras a lacus vel ante posuere elementum. Nunc est leo, bibendum ut facilisis vel, bibendum at \\\nmauris. Nullam adipiscing diam vel odio ornare, luctus adipiscing mi luctus. Nulla facilisi. \\\nMauris adipiscing bibendum neque, quis adipiscing lectus tempus et. Sed feugiat erat et nisl \\\nlobortis pharetra. Donec vitae erat enim. Nullam sit amet felis et quam lacinia tincidunt. Aliquam \\\nsuscipit dapibus urna. Sed volutpat urna in magna pulvinar volutpat. Phasellus nec tellus ac diam \\\ncursus accumsan.\n\nNam lectus enim, dapibus non nisi tempor, consectetur convallis massa. Maecenas eleifend dictum \\\nfeugiat. Etiam quis mauris vel risus luctus mattis a a nunc. Nullam orci quam, imperdiet id \\\nvehicula in, porttitor ut nibh. Duis sagittis adipiscing nisl vitae congue. Donec mollis risus eu \\\nleo suscipit, varius porttitor nulla porta. Pellentesque ut sem nec nisi euismod vehicula. Nulla \\\nmalesuada sollicitudin quam eu fermentum!\", $iters);\n        }\n    }\n}\n\nmake_test!(chars_count, s, s.chars().count());\n\nmake_test!(contains_bang_str, s, s.contains(\"!\"));\nmake_test!(contains_bang_char, s, s.contains('!'));\n\nmake_test!(match_indices_a_str, s, s.match_indices(\"a\").count());\n\nmake_test!(split_a_str, s, s.split(\"a\").count());\n\nmake_test!(trim_ascii_char, s, { s.trim_matches(|c: char| c.is_ascii()) });\nmake_test!(trim_start_ascii_char, s, { s.trim_start_matches(|c: char| c.is_ascii()) });\nmake_test!(trim_end_ascii_char, s, { s.trim_end_matches(|c: char| c.is_ascii()) });\n\nmake_test!(find_underscore_char, s, s.find('_'));\nmake_test!(rfind_underscore_char, s, s.rfind('_'));\nmake_test!(find_underscore_str, s, s.find(\"_\"));\n\nmake_test!(find_zzz_char, s, s.find('\\u{1F4A4}'));\nmake_test!(rfind_zzz_char, s, s.rfind('\\u{1F4A4}'));\nmake_test!(find_zzz_str, s, s.find(\"\\u{1F4A4}\"));\n\nmake_test!(starts_with_ascii_char, s, s.starts_with('/'), 1024);\nmake_test!(ends_with_ascii_char, s, s.ends_with('/'), 1024);\nmake_test!(starts_with_unichar, s, s.starts_with('\\u{1F4A4}'), 1024);\nmake_test!(ends_with_unichar, s, s.ends_with('\\u{1F4A4}'), 1024);\nmake_test!(starts_with_str, s, s.starts_with(\"💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩\"), 1024);\nmake_test!(ends_with_str, s, s.ends_with(\"💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩\"), 1024);\n\nmake_test!(split_space_char, s, s.split(' ').count());\nmake_test!(split_terminator_space_char, s, s.split_terminator(' ').count());\n\nmake_test!(splitn_space_char, s, s.splitn(10, ' ').count());\nmake_test!(rsplitn_space_char, s, s.rsplitn(10, ' ').count());\n\nmake_test!(split_space_str, s, s.split(\" \").count());\nmake_test!(split_ad_str, s, s.split(\"ad\").count());\nuse std::iter::repeat;\nuse test::{black_box, Bencher};\n\n#[bench]\nfn bench_with_capacity(b: &mut Bencher) {\n    b.iter(|| String::with_capacity(100));\n}\n\n#[bench]\nfn bench_push_str(b: &mut Bencher) {\n    let s = \"ศไทย中华Việt Nam; Mary had a little lamb, Little lamb\";\n    b.iter(|| {\n        let mut r = String::new();\n        r.push_str(s);\n    });\n}\n\nconst REPETITIONS: u64 = 10_000;\n\n#[bench]\nfn bench_push_str_one_byte(b: &mut Bencher) {\n    b.bytes = REPETITIONS;\n    b.iter(|| {\n        let mut r = String::new();\n        for _ in 0..REPETITIONS {\n            r.push_str(\"a\")\n        }\n    });\n}\n\n#[bench]\nfn bench_push_char_one_byte(b: &mut Bencher) {\n    b.bytes = REPETITIONS;\n    b.iter(|| {\n        let mut r = String::new();\n        for _ in 0..REPETITIONS {\n            r.push('a')\n        }\n    });\n}\n\n#[bench]\nfn bench_push_char_two_bytes(b: &mut Bencher) {\n    b.bytes = REPETITIONS * 2;\n    b.iter(|| {\n        let mut r = String::new();\n        for _ in 0..REPETITIONS {\n            r.push('â')\n        }\n    });\n}\n\n#[bench]\nfn from_utf8_lossy_100_ascii(b: &mut Bencher) {\n    let s = b\"Hello there, the quick brown fox jumped over the lazy dog! \\\n              Lorem ipsum dolor sit amet, consectetur. \";\n\n    assert_eq!(100, s.len());\n    b.iter(|| {\n        let _ = String::from_utf8_lossy(s);\n    });\n}\n\n#[bench]\nfn from_utf8_lossy_100_multibyte(b: &mut Bencher) {\n    let s = \"𐌀𐌖𐌋𐌄𐌑𐌉ปรدولة الكويتทศไทย中华𐍅𐌿𐌻𐍆𐌹𐌻𐌰\".as_bytes();\n    assert_eq!(100, s.len());\n    b.iter(|| {\n        let _ = String::from_utf8_lossy(s);\n    });\n}\n\n#[bench]\nfn from_utf8_lossy_invalid(b: &mut Bencher) {\n    let s = b\"Hello\\xC0\\x80 There\\xE6\\x83 Goodbye\";\n    b.iter(|| {\n        let _ = String::from_utf8_lossy(s);\n    });\n}\n\n#[bench]\nfn from_utf8_lossy_100_invalid(b: &mut Bencher) {\n    let s = repeat(0xf5).take(100).collect::<Vec<_>>();\n    b.iter(|| {\n        let _ = String::from_utf8_lossy(&s);\n    });\n}\n\n#[bench]\nfn bench_exact_size_shrink_to_fit(b: &mut Bencher) {\n    let s = \"Hello there, the quick brown fox jumped over the lazy dog! \\\n             Lorem ipsum dolor sit amet, consectetur. \";\n    // ensure our operation produces an exact-size string before we benchmark it\n    let mut r = String::with_capacity(s.len());\n    r.push_str(s);\n    assert_eq!(r.len(), r.capacity());\n    b.iter(|| {\n        let mut r = String::with_capacity(s.len());\n        r.push_str(s);\n        r.shrink_to_fit();\n        r\n    });\n}\n\n#[bench]\nfn bench_from_str(b: &mut Bencher) {\n    let s = \"Hello there, the quick brown fox jumped over the lazy dog! \\\n             Lorem ipsum dolor sit amet, consectetur. \";\n    b.iter(|| String::from(s))\n}\n\n#[bench]\nfn bench_from(b: &mut Bencher) {\n    let s = \"Hello there, the quick brown fox jumped over the lazy dog! \\\n             Lorem ipsum dolor sit amet, consectetur. \";\n    b.iter(|| String::from(s))\n}\n\n#[bench]\nfn bench_to_string(b: &mut Bencher) {\n    let s = \"Hello there, the quick brown fox jumped over the lazy dog! \\\n             Lorem ipsum dolor sit amet, consectetur. \";\n    b.iter(|| s.to_string())\n}\n\n#[bench]\nfn bench_insert_char_short(b: &mut Bencher) {\n    let s = \"Hello, World!\";\n    b.iter(|| {\n        let mut x = String::from(s);\n        black_box(&mut x).insert(6, black_box(' '));\n        x\n    })\n}\n\n#[bench]\nfn bench_insert_char_long(b: &mut Bencher) {\n    let s = \"Hello, World!\";\n    b.iter(|| {\n        let mut x = String::from(s);\n        black_box(&mut x).insert(6, black_box('❤'));\n        x\n    })\n}\n\n#[bench]\nfn bench_insert_str_short(b: &mut Bencher) {\n    let s = \"Hello, World!\";\n    b.iter(|| {\n        let mut x = String::from(s);\n        black_box(&mut x).insert_str(6, black_box(\" \"));\n        x\n    })\n}\n\n#[bench]\nfn bench_insert_str_long(b: &mut Bencher) {\n    let s = \"Hello, World!\";\n    b.iter(|| {\n        let mut x = String::from(s);\n        black_box(&mut x).insert_str(6, black_box(\" rustic \"));\n        x\n    })\n}\nuse rand::RngCore;\nuse std::iter::{repeat, FromIterator};\nuse test::{black_box, Bencher};\n\n#[bench]\nfn bench_new(b: &mut Bencher) {\n    b.iter(|| Vec::<u32>::new())\n}\n\nfn do_bench_with_capacity(b: &mut Bencher, src_len: usize) {\n    b.bytes = src_len as u64;\n\n    b.iter(|| Vec::<u32>::with_capacity(src_len))\n}\n\n#[bench]\nfn bench_with_capacity_0000(b: &mut Bencher) {\n    do_bench_with_capacity(b, 0)\n}\n\n#[bench]\nfn bench_with_capacity_0010(b: &mut Bencher) {\n    do_bench_with_capacity(b, 10)\n}\n\n#[bench]\nfn bench_with_capacity_0100(b: &mut Bencher) {\n    do_bench_with_capacity(b, 100)\n}\n\n#[bench]\nfn bench_with_capacity_1000(b: &mut Bencher) {\n    do_bench_with_capacity(b, 1000)\n}\n\nfn do_bench_from_fn(b: &mut Bencher, src_len: usize) {\n    b.bytes = src_len as u64;\n\n    b.iter(|| (0..src_len).collect::<Vec<_>>())\n}\n\n#[bench]\nfn bench_from_fn_0000(b: &mut Bencher) {\n    do_bench_from_fn(b, 0)\n}\n\n#[bench]\nfn bench_from_fn_0010(b: &mut Bencher) {\n    do_bench_from_fn(b, 10)\n}\n\n#[bench]\nfn bench_from_fn_0100(b: &mut Bencher) {\n    do_bench_from_fn(b, 100)\n}\n\n#[bench]\nfn bench_from_fn_1000(b: &mut Bencher) {\n    do_bench_from_fn(b, 1000)\n}\n\nfn do_bench_from_elem(b: &mut Bencher, src_len: usize) {\n    b.bytes = src_len as u64;\n\n    b.iter(|| repeat(5).take(src_len).collect::<Vec<usize>>())\n}\n\n#[bench]\nfn bench_from_elem_0000(b: &mut Bencher) {\n    do_bench_from_elem(b, 0)\n}\n\n#[bench]\nfn bench_from_elem_0010(b: &mut Bencher) {\n    do_bench_from_elem(b, 10)\n}\n\n#[bench]\nfn bench_from_elem_0100(b: &mut Bencher) {\n    do_bench_from_elem(b, 100)\n}\n\n#[bench]\nfn bench_from_elem_1000(b: &mut Bencher) {\n    do_bench_from_elem(b, 1000)\n}\n\nfn do_bench_from_slice(b: &mut Bencher, src_len: usize) {\n    let src: Vec<_> = FromIterator::from_iter(0..src_len);\n\n    b.bytes = src_len as u64;\n\n    b.iter(|| src.as_slice().to_vec());\n}\n\n#[bench]\nfn bench_from_slice_0000(b: &mut Bencher) {\n    do_bench_from_slice(b, 0)\n}\n\n#[bench]\nfn bench_from_slice_0010(b: &mut Bencher) {\n    do_bench_from_slice(b, 10)\n}\n\n#[bench]\nfn bench_from_slice_0100(b: &mut Bencher) {\n    do_bench_from_slice(b, 100)\n}\n\n#[bench]\nfn bench_from_slice_1000(b: &mut Bencher) {\n    do_bench_from_slice(b, 1000)\n}\n\nfn do_bench_from_iter(b: &mut Bencher, src_len: usize) {\n    let src: Vec<_> = FromIterator::from_iter(0..src_len);\n\n    b.bytes = src_len as u64;\n\n    b.iter(|| {\n        let dst: Vec<_> = FromIterator::from_iter(src.iter().cloned());\n        dst\n    });\n}\n\n#[bench]\nfn bench_from_iter_0000(b: &mut Bencher) {\n    do_bench_from_iter(b, 0)\n}\n\n#[bench]\nfn bench_from_iter_0010(b: &mut Bencher) {\n    do_bench_from_iter(b, 10)\n}\n\n#[bench]\nfn bench_from_iter_0100(b: &mut Bencher) {\n    do_bench_from_iter(b, 100)\n}\n\n#[bench]\nfn bench_from_iter_1000(b: &mut Bencher) {\n    do_bench_from_iter(b, 1000)\n}\n\nfn do_bench_extend(b: &mut Bencher, dst_len: usize, src_len: usize) {\n    let dst: Vec<_> = FromIterator::from_iter(0..dst_len);\n    let src: Vec<_> = FromIterator::from_iter(dst_len..dst_len + src_len);\n\n    b.bytes = src_len as u64;\n\n    b.iter(|| {\n        let mut dst = dst.clone();\n        dst.extend(src.clone());\n        dst\n    });\n}\n\n#[bench]\nfn bench_extend_0000_0000(b: &mut Bencher) {\n    do_bench_extend(b, 0, 0)\n}\n\n#[bench]\nfn bench_extend_0000_0010(b: &mut Bencher) {\n    do_bench_extend(b, 0, 10)\n}\n\n#[bench]\nfn bench_extend_0000_0100(b: &mut Bencher) {\n    do_bench_extend(b, 0, 100)\n}\n\n#[bench]\nfn bench_extend_0000_1000(b: &mut Bencher) {\n    do_bench_extend(b, 0, 1000)\n}\n\n#[bench]\nfn bench_extend_0010_0010(b: &mut Bencher) {\n    do_bench_extend(b, 10, 10)\n}\n\n#[bench]\nfn bench_extend_0100_0100(b: &mut Bencher) {\n    do_bench_extend(b, 100, 100)\n}\n\n#[bench]\nfn bench_extend_1000_1000(b: &mut Bencher) {\n    do_bench_extend(b, 1000, 1000)\n}\n\nfn do_bench_extend_from_slice(b: &mut Bencher, dst_len: usize, src_len: usize) {\n    let dst: Vec<_> = FromIterator::from_iter(0..dst_len);\n    let src: Vec<_> = FromIterator::from_iter(dst_len..dst_len + src_len);\n\n    b.bytes = src_len as u64;\n\n    b.iter(|| {\n        let mut dst = dst.clone();\n        dst.extend_from_slice(&src);\n        dst\n    });\n}\n\n#[bench]\nfn bench_extend_recycle(b: &mut Bencher) {\n    let mut data = vec![0; 1000];\n\n    b.iter(|| {\n        let tmp = std::mem::take(&mut data);\n        let mut to_extend = black_box(Vec::new());\n        to_extend.extend(tmp.into_iter());\n        data = black_box(to_extend);\n    });\n\n    black_box(data);\n}\n\n#[bench]\nfn bench_extend_from_slice_0000_0000(b: &mut Bencher) {\n    do_bench_extend_from_slice(b, 0, 0)\n}\n\n#[bench]\nfn bench_extend_from_slice_0000_0010(b: &mut Bencher) {\n    do_bench_extend_from_slice(b, 0, 10)\n}\n\n#[bench]\nfn bench_extend_from_slice_0000_0100(b: &mut Bencher) {\n    do_bench_extend_from_slice(b, 0, 100)\n}\n\n#[bench]\nfn bench_extend_from_slice_0000_1000(b: &mut Bencher) {\n    do_bench_extend_from_slice(b, 0, 1000)\n}\n\n#[bench]\nfn bench_extend_from_slice_0010_0010(b: &mut Bencher) {\n    do_bench_extend_from_slice(b, 10, 10)\n}\n\n#[bench]\nfn bench_extend_from_slice_0100_0100(b: &mut Bencher) {\n    do_bench_extend_from_slice(b, 100, 100)\n}\n\n#[bench]\nfn bench_extend_from_slice_1000_1000(b: &mut Bencher) {\n    do_bench_extend_from_slice(b, 1000, 1000)\n}\n\nfn do_bench_clone(b: &mut Bencher, src_len: usize) {\n    let src: Vec<usize> = FromIterator::from_iter(0..src_len);\n\n    b.bytes = src_len as u64;\n\n    b.iter(|| src.clone());\n}\n\n#[bench]\nfn bench_clone_0000(b: &mut Bencher) {\n    do_bench_clone(b, 0)\n}\n\n#[bench]\nfn bench_clone_0010(b: &mut Bencher) {\n    do_bench_clone(b, 10)\n}\n\n#[bench]\nfn bench_clone_0100(b: &mut Bencher) {\n    do_bench_clone(b, 100)\n}\n\n#[bench]\nfn bench_clone_1000(b: &mut Bencher) {\n    do_bench_clone(b, 1000)\n}\n\nfn do_bench_clone_from(b: &mut Bencher, times: usize, dst_len: usize, src_len: usize) {\n    let dst: Vec<_> = FromIterator::from_iter(0..src_len);\n    let src: Vec<_> = FromIterator::from_iter(dst_len..dst_len + src_len);\n\n    b.bytes = (times * src_len) as u64;\n\n    b.iter(|| {\n        let mut dst = dst.clone();\n\n        for _ in 0..times {\n            dst.clone_from(&src);\n            dst = black_box(dst);\n        }\n        dst\n    });\n}\n\n#[bench]\nfn bench_clone_from_01_0000_0000(b: &mut Bencher) {\n    do_bench_clone_from(b, 1, 0, 0)\n}\n\n#[bench]\nfn bench_clone_from_01_0000_0010(b: &mut Bencher) {\n    do_bench_clone_from(b, 1, 0, 10)\n}\n\n#[bench]\nfn bench_clone_from_01_0000_0100(b: &mut Bencher) {\n    do_bench_clone_from(b, 1, 0, 100)\n}\n\n#[bench]\nfn bench_clone_from_01_0000_1000(b: &mut Bencher) {\n    do_bench_clone_from(b, 1, 0, 1000)\n}\n\n#[bench]\nfn bench_clone_from_01_0010_0010(b: &mut Bencher) {\n    do_bench_clone_from(b, 1, 10, 10)\n}\n\n#[bench]\nfn bench_clone_from_01_0100_0100(b: &mut Bencher) {\n    do_bench_clone_from(b, 1, 100, 100)\n}\n\n#[bench]\nfn bench_clone_from_01_1000_1000(b: &mut Bencher) {\n    do_bench_clone_from(b, 1, 1000, 1000)\n}\n\n#[bench]\nfn bench_clone_from_01_0010_0100(b: &mut Bencher) {\n    do_bench_clone_from(b, 1, 10, 100)\n}\n\n#[bench]\nfn bench_clone_from_01_0100_1000(b: &mut Bencher) {\n    do_bench_clone_from(b, 1, 100, 1000)\n}\n\n#[bench]\nfn bench_clone_from_01_0010_0000(b: &mut Bencher) {\n    do_bench_clone_from(b, 1, 10, 0)\n}\n\n#[bench]\nfn bench_clone_from_01_0100_0010(b: &mut Bencher) {\n    do_bench_clone_from(b, 1, 100, 10)\n}\n\n#[bench]\nfn bench_clone_from_01_1000_0100(b: &mut Bencher) {\n    do_bench_clone_from(b, 1, 1000, 100)\n}\n\n#[bench]\nfn bench_clone_from_10_0000_0000(b: &mut Bencher) {\n    do_bench_clone_from(b, 10, 0, 0)\n}\n\n#[bench]\nfn bench_clone_from_10_0000_0010(b: &mut Bencher) {\n    do_bench_clone_from(b, 10, 0, 10)\n}\n\n#[bench]\nfn bench_clone_from_10_0000_0100(b: &mut Bencher) {\n    do_bench_clone_from(b, 10, 0, 100)\n}\n\n#[bench]\nfn bench_clone_from_10_0000_1000(b: &mut Bencher) {\n    do_bench_clone_from(b, 10, 0, 1000)\n}\n\n#[bench]\nfn bench_clone_from_10_0010_0010(b: &mut Bencher) {\n    do_bench_clone_from(b, 10, 10, 10)\n}\n\n#[bench]\nfn bench_clone_from_10_0100_0100(b: &mut Bencher) {\n    do_bench_clone_from(b, 10, 100, 100)\n}\n\n#[bench]\nfn bench_clone_from_10_1000_1000(b: &mut Bencher) {\n    do_bench_clone_from(b, 10, 1000, 1000)\n}\n\n#[bench]\nfn bench_clone_from_10_0010_0100(b: &mut Bencher) {\n    do_bench_clone_from(b, 10, 10, 100)\n}\n\n#[bench]\nfn bench_clone_from_10_0100_1000(b: &mut Bencher) {\n    do_bench_clone_from(b, 10, 100, 1000)\n}\n\n#[bench]\nfn bench_clone_from_10_0010_0000(b: &mut Bencher) {\n    do_bench_clone_from(b, 10, 10, 0)\n}\n\n#[bench]\nfn bench_clone_from_10_0100_0010(b: &mut Bencher) {\n    do_bench_clone_from(b, 10, 100, 10)\n}\n\n#[bench]\nfn bench_clone_from_10_1000_0100(b: &mut Bencher) {\n    do_bench_clone_from(b, 10, 1000, 100)\n}\n\nmacro_rules! bench_in_place {\n    ($($fname:ident, $type:ty, $count:expr, $init:expr);*) => {\n        $(\n            #[bench]\n            fn $fname(b: &mut Bencher) {\n                b.iter(|| {\n                    let src: Vec<$type> = black_box(vec![$init; $count]);\n                    src.into_iter()\n                        .enumerate()\n                        .map(|(idx, e)| idx as $type ^ e)\n                        .collect::<Vec<$type>>()\n                });\n            }\n        )+\n    };\n}\n\nbench_in_place![\n    bench_in_place_xxu8_0010_i0,   u8,   10, 0;\n    bench_in_place_xxu8_0100_i0,   u8,  100, 0;\n    bench_in_place_xxu8_1000_i0,   u8, 1000, 0;\n    bench_in_place_xxu8_0010_i1,   u8,   10, 1;\n    bench_in_place_xxu8_0100_i1,   u8,  100, 1;\n    bench_in_place_xxu8_1000_i1,   u8, 1000, 1;\n    bench_in_place_xu32_0010_i0,  u32,   10, 0;\n    bench_in_place_xu32_0100_i0,  u32,  100, 0;\n    bench_in_place_xu32_1000_i0,  u32, 1000, 0;\n    bench_in_place_xu32_0010_i1,  u32,   10, 1;\n    bench_in_place_xu32_0100_i1,  u32,  100, 1;\n    bench_in_place_xu32_1000_i1,  u32, 1000, 1;\n    bench_in_place_u128_0010_i0, u128,   10, 0;\n    bench_in_place_u128_0100_i0, u128,  100, 0;\n    bench_in_place_u128_1000_i0, u128, 1000, 0;\n    bench_in_place_u128_0010_i1, u128,   10, 1;\n    bench_in_place_u128_0100_i1, u128,  100, 1;\n    bench_in_place_u128_1000_i1, u128, 1000, 1\n];\n\n#[bench]\nfn bench_in_place_recycle(b: &mut Bencher) {\n    let mut data = vec![0; 1000];\n\n    b.iter(|| {\n        let tmp = std::mem::take(&mut data);\n        data = black_box(\n            tmp.into_iter()\n                .enumerate()\n                .map(|(idx, e)| idx.wrapping_add(e))\n                .fuse()\n                .peekable()\n                .collect::<Vec<usize>>(),\n        );\n    });\n}\n\n#[bench]\nfn bench_in_place_zip_recycle(b: &mut Bencher) {\n    let mut data = vec![0u8; 1000];\n    let mut rng = rand::thread_rng();\n    let mut subst = vec![0u8; 1000];\n    rng.fill_bytes(&mut subst[..]);\n\n    b.iter(|| {\n        let tmp = std::mem::take(&mut data);\n        let mangled = tmp\n            .into_iter()\n            .zip(subst.iter().copied())\n            .enumerate()\n            .map(|(i, (d, s))| d.wrapping_add(i as u8) ^ s)\n            .collect::<Vec<_>>();\n        data = black_box(mangled);\n    });\n}\n\n#[bench]\nfn bench_in_place_zip_iter_mut(b: &mut Bencher) {\n    let mut data = vec![0u8; 256];\n    let mut rng = rand::thread_rng();\n    let mut subst = vec![0u8; 1000];\n    rng.fill_bytes(&mut subst[..]);\n\n    b.iter(|| {\n        data.iter_mut().enumerate().for_each(|(i, d)| {\n            *d = d.wrapping_add(i as u8) ^ subst[i];\n        });\n    });\n\n    black_box(data);\n}\n\npub fn vec_cast<T, U>(input: Vec<T>) -> Vec<U> {\n    input.into_iter().map(|e| unsafe { std::mem::transmute_copy(&e) }).collect()\n}\n\n#[bench]\nfn bench_transmute(b: &mut Bencher) {\n    let mut vec = vec![10u32; 100];\n    b.bytes = 800; // 2 casts x 4 bytes x 100\n    b.iter(|| {\n        let v = std::mem::take(&mut vec);\n        let v = black_box(vec_cast::<u32, i32>(v));\n        let v = black_box(vec_cast::<i32, u32>(v));\n        vec = v;\n    });\n}\n\n#[derive(Clone)]\nstruct Droppable(usize);\n\nimpl Drop for Droppable {\n    fn drop(&mut self) {\n        black_box(self);\n    }\n}\n\n#[bench]\nfn bench_in_place_collect_droppable(b: &mut Bencher) {\n    let v: Vec<Droppable> = std::iter::repeat_with(|| Droppable(0)).take(1000).collect();\n    b.iter(|| {\n        v.clone()\n            .into_iter()\n            .skip(100)\n            .enumerate()\n            .map(|(i, e)| Droppable(i ^ e.0))\n            .collect::<Vec<_>>()\n    })\n}\n\nconst LEN: usize = 16384;\n\n#[bench]\nfn bench_chain_collect(b: &mut Bencher) {\n    let data = black_box([0; LEN]);\n    b.iter(|| data.iter().cloned().chain([1].iter().cloned()).collect::<Vec<_>>());\n}\n\n#[bench]\nfn bench_chain_chain_collect(b: &mut Bencher) {\n    let data = black_box([0; LEN]);\n    b.iter(|| {\n        data.iter()\n            .cloned()\n            .chain([1].iter().cloned())\n            .chain([2].iter().cloned())\n            .collect::<Vec<_>>()\n    });\n}\n\n#[bench]\nfn bench_nest_chain_chain_collect(b: &mut Bencher) {\n    let data = black_box([0; LEN]);\n    b.iter(|| {\n        data.iter().cloned().chain([1].iter().chain([2].iter()).cloned()).collect::<Vec<_>>()\n    });\n}\n\n#[bench]\nfn bench_range_map_collect(b: &mut Bencher) {\n    b.iter(|| (0..LEN).map(|_| u32::default()).collect::<Vec<_>>());\n}\n\n#[bench]\nfn bench_chain_extend_ref(b: &mut Bencher) {\n    let data = black_box([0; LEN]);\n    b.iter(|| {\n        let mut v = Vec::<u32>::with_capacity(data.len() + 1);\n        v.extend(data.iter().chain([1].iter()));\n        v\n    });\n}\n\n#[bench]\nfn bench_chain_extend_value(b: &mut Bencher) {\n    let data = black_box([0; LEN]);\n    b.iter(|| {\n        let mut v = Vec::<u32>::with_capacity(data.len() + 1);\n        v.extend(data.iter().cloned().chain(Some(1)));\n        v\n    });\n}\n\n#[bench]\nfn bench_rev_1(b: &mut Bencher) {\n    let data = black_box([0; LEN]);\n    b.iter(|| {\n        let mut v = Vec::<u32>::new();\n        v.extend(data.iter().rev());\n        v\n    });\n}\n\n#[bench]\nfn bench_rev_2(b: &mut Bencher) {\n    let data = black_box([0; LEN]);\n    b.iter(|| {\n        let mut v = Vec::<u32>::with_capacity(data.len());\n        v.extend(data.iter().rev());\n        v\n    });\n}\n\n#[bench]\nfn bench_map_regular(b: &mut Bencher) {\n    let data = black_box([(0, 0); LEN]);\n    b.iter(|| {\n        let mut v = Vec::<u32>::new();\n        v.extend(data.iter().map(|t| t.1));\n        v\n    });\n}\n\n#[bench]\nfn bench_map_fast(b: &mut Bencher) {\n    let data = black_box([(0, 0); LEN]);\n    b.iter(|| {\n        let mut result = Vec::with_capacity(data.len());\n        for i in 0..data.len() {\n            unsafe {\n                *result.get_unchecked_mut(i) = data[i].0;\n                result.set_len(i);\n            }\n        }\n        result\n    });\n}\n\nfn random_sorted_fill(mut seed: u32, buf: &mut [u32]) {\n    let mask = if buf.len() < 8192 {\n        0xFF\n    } else if buf.len() < 200_000 {\n        0xFFFF\n    } else {\n        0xFFFF_FFFF\n    };\n\n    for item in buf.iter_mut() {\n        seed ^= seed << 13;\n        seed ^= seed >> 17;\n        seed ^= seed << 5;\n\n        *item = seed & mask;\n    }\n\n    buf.sort();\n}\n\nfn bench_vec_dedup_old(b: &mut Bencher, sz: usize) {\n    let mut template = vec![0u32; sz];\n    b.bytes = std::mem::size_of_val(template.as_slice()) as u64;\n    random_sorted_fill(0x43, &mut template);\n\n    let mut vec = template.clone();\n    b.iter(|| {\n        let len = {\n            let (dedup, _) = vec.partition_dedup();\n            dedup.len()\n        };\n        vec.truncate(len);\n\n        black_box(vec.first());\n        vec.clear();\n        vec.extend_from_slice(&template);\n    });\n}\n\nfn bench_vec_dedup_new(b: &mut Bencher, sz: usize) {\n    let mut template = vec![0u32; sz];\n    b.bytes = std::mem::size_of_val(template.as_slice()) as u64;\n    random_sorted_fill(0x43, &mut template);\n\n    let mut vec = template.clone();\n    b.iter(|| {\n        vec.dedup();\n        black_box(vec.first());\n        vec.clear();\n        vec.extend_from_slice(&template);\n    });\n}\n\n#[bench]\nfn bench_dedup_old_100(b: &mut Bencher) {\n    bench_vec_dedup_old(b, 100);\n}\n#[bench]\nfn bench_dedup_new_100(b: &mut Bencher) {\n    bench_vec_dedup_new(b, 100);\n}\n\n#[bench]\nfn bench_dedup_old_1000(b: &mut Bencher) {\n    bench_vec_dedup_old(b, 1000);\n}\n#[bench]\nfn bench_dedup_new_1000(b: &mut Bencher) {\n    bench_vec_dedup_new(b, 1000);\n}\n\n#[bench]\nfn bench_dedup_old_10000(b: &mut Bencher) {\n    bench_vec_dedup_old(b, 10000);\n}\n#[bench]\nfn bench_dedup_new_10000(b: &mut Bencher) {\n    bench_vec_dedup_new(b, 10000);\n}\n\n#[bench]\nfn bench_dedup_old_100000(b: &mut Bencher) {\n    bench_vec_dedup_old(b, 100000);\n}\n#[bench]\nfn bench_dedup_new_100000(b: &mut Bencher) {\n    bench_vec_dedup_new(b, 100000);\n}\n// Disabling on android for the time being\n// See https://github.com/rust-lang/rust/issues/73535#event-3477699747\n#![cfg(not(target_os = \"android\"))]\n#![feature(btree_drain_filter)]\n#![feature(map_first_last)]\n#![feature(repr_simd)]\n#![feature(slice_partition_dedup)]\n#![feature(test)]\n\nextern crate test;\n\nmod binary_heap;\nmod btree;\nmod linked_list;\nmod slice;\nmod str;\nmod string;\nmod vec;\nmod vec_deque;\nuse std::collections::BTreeMap;\nuse std::iter::Iterator;\nuse std::ops::RangeBounds;\nuse std::vec::Vec;\n\nuse rand::{seq::SliceRandom, thread_rng, Rng};\nuse test::{black_box, Bencher};\n\nmacro_rules! map_insert_rand_bench {\n    ($name: ident, $n: expr, $map: ident) => {\n        #[bench]\n        pub fn $name(b: &mut Bencher) {\n            let n: usize = $n;\n            let mut map = $map::new();\n            // setup\n            let mut rng = thread_rng();\n\n            for _ in 0..n {\n                let i = rng.gen::<usize>() % n;\n                map.insert(i, i);\n            }\n\n            // measure\n            b.iter(|| {\n                let k = rng.gen::<usize>() % n;\n                map.insert(k, k);\n                map.remove(&k);\n            });\n            black_box(map);\n        }\n    };\n}\n\nmacro_rules! map_insert_seq_bench {\n    ($name: ident, $n: expr, $map: ident) => {\n        #[bench]\n        pub fn $name(b: &mut Bencher) {\n            let mut map = $map::new();\n            let n: usize = $n;\n            // setup\n            for i in 0..n {\n                map.insert(i * 2, i * 2);\n            }\n\n            // measure\n            let mut i = 1;\n            b.iter(|| {\n                map.insert(i, i);\n                map.remove(&i);\n                i = (i + 2) % n;\n            });\n            black_box(map);\n        }\n    };\n}\n\nmacro_rules! map_find_rand_bench {\n    ($name: ident, $n: expr, $map: ident) => {\n        #[bench]\n        pub fn $name(b: &mut Bencher) {\n            let mut map = $map::new();\n            let n: usize = $n;\n\n            // setup\n            let mut rng = thread_rng();\n            let mut keys: Vec<_> = (0..n).map(|_| rng.gen::<usize>() % n).collect();\n\n            for &k in &keys {\n                map.insert(k, k);\n            }\n\n            keys.shuffle(&mut rng);\n\n            // measure\n            let mut i = 0;\n            b.iter(|| {\n                let t = map.get(&keys[i]);\n                i = (i + 1) % n;\n                black_box(t);\n            })\n        }\n    };\n}\n\nmacro_rules! map_find_seq_bench {\n    ($name: ident, $n: expr, $map: ident) => {\n        #[bench]\n        pub fn $name(b: &mut Bencher) {\n            let mut map = $map::new();\n            let n: usize = $n;\n\n            // setup\n            for i in 0..n {\n                map.insert(i, i);\n            }\n\n            // measure\n            let mut i = 0;\n            b.iter(|| {\n                let x = map.get(&i);\n                i = (i + 1) % n;\n                black_box(x);\n            })\n        }\n    };\n}\n\nmap_insert_rand_bench! {insert_rand_100,    100,    BTreeMap}\nmap_insert_rand_bench! {insert_rand_10_000, 10_000, BTreeMap}\n\nmap_insert_seq_bench! {insert_seq_100,    100,    BTreeMap}\nmap_insert_seq_bench! {insert_seq_10_000, 10_000, BTreeMap}\n\nmap_find_rand_bench! {find_rand_100,    100,    BTreeMap}\nmap_find_rand_bench! {find_rand_10_000, 10_000, BTreeMap}\n\nmap_find_seq_bench! {find_seq_100,    100,    BTreeMap}\nmap_find_seq_bench! {find_seq_10_000, 10_000, BTreeMap}\n\nfn bench_iteration(b: &mut Bencher, size: i32) {\n    let mut map = BTreeMap::<i32, i32>::new();\n    let mut rng = thread_rng();\n\n    for _ in 0..size {\n        map.insert(rng.gen(), rng.gen());\n    }\n\n    b.iter(|| {\n        for entry in &map {\n            black_box(entry);\n        }\n    });\n}\n\n#[bench]\npub fn iteration_20(b: &mut Bencher) {\n    bench_iteration(b, 20);\n}\n\n#[bench]\npub fn iteration_1000(b: &mut Bencher) {\n    bench_iteration(b, 1000);\n}\n\n#[bench]\npub fn iteration_100000(b: &mut Bencher) {\n    bench_iteration(b, 100000);\n}\n\nfn bench_iteration_mut(b: &mut Bencher, size: i32) {\n    let mut map = BTreeMap::<i32, i32>::new();\n    let mut rng = thread_rng();\n\n    for _ in 0..size {\n        map.insert(rng.gen(), rng.gen());\n    }\n\n    b.iter(|| {\n        for kv in map.iter_mut() {\n            black_box(kv);\n        }\n    });\n}\n\n#[bench]\npub fn iteration_mut_20(b: &mut Bencher) {\n    bench_iteration_mut(b, 20);\n}\n\n#[bench]\npub fn iteration_mut_1000(b: &mut Bencher) {\n    bench_iteration_mut(b, 1000);\n}\n\n#[bench]\npub fn iteration_mut_100000(b: &mut Bencher) {\n    bench_iteration_mut(b, 100000);\n}\n\nfn bench_first_and_last(b: &mut Bencher, size: i32) {\n    let map: BTreeMap<_, _> = (0..size).map(|i| (i, i)).collect();\n    b.iter(|| {\n        for _ in 0..10 {\n            black_box(map.first_key_value());\n            black_box(map.last_key_value());\n        }\n    });\n}\n\n#[bench]\npub fn first_and_last_0(b: &mut Bencher) {\n    bench_first_and_last(b, 0);\n}\n\n#[bench]\npub fn first_and_last_100(b: &mut Bencher) {\n    bench_first_and_last(b, 100);\n}\n\n#[bench]\npub fn first_and_last_10k(b: &mut Bencher) {\n    bench_first_and_last(b, 10_000);\n}\n\nconst BENCH_RANGE_SIZE: i32 = 145;\nconst BENCH_RANGE_COUNT: i32 = BENCH_RANGE_SIZE * (BENCH_RANGE_SIZE - 1) / 2;\n\nfn bench_range<F, R>(b: &mut Bencher, f: F)\nwhere\n    F: Fn(i32, i32) -> R,\n    R: RangeBounds<i32>,\n{\n    let map: BTreeMap<_, _> = (0..BENCH_RANGE_SIZE).map(|i| (i, i)).collect();\n    b.iter(|| {\n        let mut c = 0;\n        for i in 0..BENCH_RANGE_SIZE {\n            for j in i + 1..BENCH_RANGE_SIZE {\n                black_box(map.range(f(i, j)));\n                c += 1;\n            }\n        }\n        debug_assert_eq!(c, BENCH_RANGE_COUNT);\n    });\n}\n\n#[bench]\npub fn range_included_excluded(b: &mut Bencher) {\n    bench_range(b, |i, j| i..j);\n}\n\n#[bench]\npub fn range_included_included(b: &mut Bencher) {\n    bench_range(b, |i, j| i..=j);\n}\n\n#[bench]\npub fn range_included_unbounded(b: &mut Bencher) {\n    bench_range(b, |i, _| i..);\n}\n\n#[bench]\npub fn range_unbounded_unbounded(b: &mut Bencher) {\n    bench_range(b, |_, _| ..);\n}\n\nfn bench_iter(b: &mut Bencher, repeats: i32, size: i32) {\n    let map: BTreeMap<_, _> = (0..size).map(|i| (i, i)).collect();\n    b.iter(|| {\n        for _ in 0..repeats {\n            black_box(map.iter());\n        }\n    });\n}\n\n/// Contrast range_unbounded_unbounded with `iter()`.\n#[bench]\npub fn range_unbounded_vs_iter(b: &mut Bencher) {\n    bench_iter(b, BENCH_RANGE_COUNT, BENCH_RANGE_SIZE);\n}\n\n#[bench]\npub fn iter_0(b: &mut Bencher) {\n    bench_iter(b, 1_000, 0);\n}\n\n#[bench]\npub fn iter_1(b: &mut Bencher) {\n    bench_iter(b, 1_000, 1);\n}\n\n#[bench]\npub fn iter_100(b: &mut Bencher) {\n    bench_iter(b, 1_000, 100);\n}\n\n#[bench]\npub fn iter_10k(b: &mut Bencher) {\n    bench_iter(b, 1_000, 10_000);\n}\n\n#[bench]\npub fn iter_1m(b: &mut Bencher) {\n    bench_iter(b, 1_000, 1_000_000);\n}\n\nconst FAT: usize = 256;\n\n// The returned map has small keys and values.\n// Benchmarks on it have a counterpart in set.rs with the same keys and no values at all.\nfn slim_map(n: usize) -> BTreeMap<usize, usize> {\n    (0..n).map(|i| (i, i)).collect::<BTreeMap<_, _>>()\n}\n\n// The returned map has small keys and large values.\nfn fat_val_map(n: usize) -> BTreeMap<usize, [usize; FAT]> {\n    (0..n).map(|i| (i, [i; FAT])).collect::<BTreeMap<_, _>>()\n}\n\n#[bench]\npub fn clone_slim_100(b: &mut Bencher) {\n    let src = slim_map(100);\n    b.iter(|| src.clone())\n}\n\n#[bench]\npub fn clone_slim_100_and_clear(b: &mut Bencher) {\n    let src = slim_map(100);\n    b.iter(|| src.clone().clear())\n}\n\n#[bench]\npub fn clone_slim_100_and_drain_all(b: &mut Bencher) {\n    let src = slim_map(100);\n    b.iter(|| src.clone().drain_filter(|_, _| true).count())\n}\n\n#[bench]\npub fn clone_slim_100_and_drain_half(b: &mut Bencher) {\n    let src = slim_map(100);\n    b.iter(|| {\n        let mut map = src.clone();\n        assert_eq!(map.drain_filter(|i, _| i % 2 == 0).count(), 100 / 2);\n        assert_eq!(map.len(), 100 / 2);\n    })\n}\n\n#[bench]\npub fn clone_slim_100_and_into_iter(b: &mut Bencher) {\n    let src = slim_map(100);\n    b.iter(|| src.clone().into_iter().count())\n}\n\n#[bench]\npub fn clone_slim_100_and_pop_all(b: &mut Bencher) {\n    let src = slim_map(100);\n    b.iter(|| {\n        let mut map = src.clone();\n        while map.pop_first().is_some() {}\n        map\n    });\n}\n\n#[bench]\npub fn clone_slim_100_and_remove_all(b: &mut Bencher) {\n    let src = slim_map(100);\n    b.iter(|| {\n        let mut map = src.clone();\n        while let Some(elt) = map.iter().map(|(&i, _)| i).next() {\n            let v = map.remove(&elt);\n            debug_assert!(v.is_some());\n        }\n        map\n    });\n}\n\n#[bench]\npub fn clone_slim_100_and_remove_half(b: &mut Bencher) {\n    let src = slim_map(100);\n    b.iter(|| {\n        let mut map = src.clone();\n        for i in (0..100).step_by(2) {\n            let v = map.remove(&i);\n            debug_assert!(v.is_some());\n        }\n        assert_eq!(map.len(), 100 / 2);\n        map\n    })\n}\n\n#[bench]\npub fn clone_slim_10k(b: &mut Bencher) {\n    let src = slim_map(10_000);\n    b.iter(|| src.clone())\n}\n\n#[bench]\npub fn clone_slim_10k_and_clear(b: &mut Bencher) {\n    let src = slim_map(10_000);\n    b.iter(|| src.clone().clear())\n}\n\n#[bench]\npub fn clone_slim_10k_and_drain_all(b: &mut Bencher) {\n    let src = slim_map(10_000);\n    b.iter(|| src.clone().drain_filter(|_, _| true).count())\n}\n\n#[bench]\npub fn clone_slim_10k_and_drain_half(b: &mut Bencher) {\n    let src = slim_map(10_000);\n    b.iter(|| {\n        let mut map = src.clone();\n        assert_eq!(map.drain_filter(|i, _| i % 2 == 0).count(), 10_000 / 2);\n        assert_eq!(map.len(), 10_000 / 2);\n    })\n}\n\n#[bench]\npub fn clone_slim_10k_and_into_iter(b: &mut Bencher) {\n    let src = slim_map(10_000);\n    b.iter(|| src.clone().into_iter().count())\n}\n\n#[bench]\npub fn clone_slim_10k_and_pop_all(b: &mut Bencher) {\n    let src = slim_map(10_000);\n    b.iter(|| {\n        let mut map = src.clone();\n        while map.pop_first().is_some() {}\n        map\n    });\n}\n\n#[bench]\npub fn clone_slim_10k_and_remove_all(b: &mut Bencher) {\n    let src = slim_map(10_000);\n    b.iter(|| {\n        let mut map = src.clone();\n        while let Some(elt) = map.iter().map(|(&i, _)| i).next() {\n            let v = map.remove(&elt);\n            debug_assert!(v.is_some());\n        }\n        map\n    });\n}\n\n#[bench]\npub fn clone_slim_10k_and_remove_half(b: &mut Bencher) {\n    let src = slim_map(10_000);\n    b.iter(|| {\n        let mut map = src.clone();\n        for i in (0..10_000).step_by(2) {\n            let v = map.remove(&i);\n            debug_assert!(v.is_some());\n        }\n        assert_eq!(map.len(), 10_000 / 2);\n        map\n    })\n}\n\n#[bench]\npub fn clone_fat_val_100(b: &mut Bencher) {\n    let src = fat_val_map(100);\n    b.iter(|| src.clone())\n}\n\n#[bench]\npub fn clone_fat_val_100_and_clear(b: &mut Bencher) {\n    let src = fat_val_map(100);\n    b.iter(|| src.clone().clear())\n}\n\n#[bench]\npub fn clone_fat_val_100_and_drain_all(b: &mut Bencher) {\n    let src = fat_val_map(100);\n    b.iter(|| src.clone().drain_filter(|_, _| true).count())\n}\n\n#[bench]\npub fn clone_fat_val_100_and_drain_half(b: &mut Bencher) {\n    let src = fat_val_map(100);\n    b.iter(|| {\n        let mut map = src.clone();\n        assert_eq!(map.drain_filter(|i, _| i % 2 == 0).count(), 100 / 2);\n        assert_eq!(map.len(), 100 / 2);\n    })\n}\n\n#[bench]\npub fn clone_fat_val_100_and_into_iter(b: &mut Bencher) {\n    let src = fat_val_map(100);\n    b.iter(|| src.clone().into_iter().count())\n}\n\n#[bench]\npub fn clone_fat_val_100_and_pop_all(b: &mut Bencher) {\n    let src = fat_val_map(100);\n    b.iter(|| {\n        let mut map = src.clone();\n        while map.pop_first().is_some() {}\n        map\n    });\n}\n\n#[bench]\npub fn clone_fat_val_100_and_remove_all(b: &mut Bencher) {\n    let src = fat_val_map(100);\n    b.iter(|| {\n        let mut map = src.clone();\n        while let Some(elt) = map.iter().map(|(&i, _)| i).next() {\n            let v = map.remove(&elt);\n            debug_assert!(v.is_some());\n        }\n        map\n    });\n}\n\n#[bench]\npub fn clone_fat_val_100_and_remove_half(b: &mut Bencher) {\n    let src = fat_val_map(100);\n    b.iter(|| {\n        let mut map = src.clone();\n        for i in (0..100).step_by(2) {\n            let v = map.remove(&i);\n            debug_assert!(v.is_some());\n        }\n        assert_eq!(map.len(), 100 / 2);\n        map\n    })\n}\nuse std::collections::BTreeSet;\n\nuse rand::{thread_rng, Rng};\nuse test::Bencher;\n\nfn random(n: usize) -> BTreeSet<usize> {\n    let mut rng = thread_rng();\n    let mut set = BTreeSet::new();\n    while set.len() < n {\n        set.insert(rng.gen());\n    }\n    assert_eq!(set.len(), n);\n    set\n}\n\nfn neg(n: usize) -> BTreeSet<i32> {\n    let set: BTreeSet<i32> = (-(n as i32)..=-1).collect();\n    assert_eq!(set.len(), n);\n    set\n}\n\nfn pos(n: usize) -> BTreeSet<i32> {\n    let set: BTreeSet<i32> = (1..=(n as i32)).collect();\n    assert_eq!(set.len(), n);\n    set\n}\n\nfn stagger(n1: usize, factor: usize) -> [BTreeSet<u32>; 2] {\n    let n2 = n1 * factor;\n    let mut sets = [BTreeSet::new(), BTreeSet::new()];\n    for i in 0..(n1 + n2) {\n        let b = i % (factor + 1) != 0;\n        sets[b as usize].insert(i as u32);\n    }\n    assert_eq!(sets[0].len(), n1);\n    assert_eq!(sets[1].len(), n2);\n    sets\n}\n\nmacro_rules! set_bench {\n    ($name: ident, $set_func: ident, $result_func: ident, $sets: expr) => {\n        #[bench]\n        pub fn $name(b: &mut Bencher) {\n            // setup\n            let sets = $sets;\n\n            // measure\n            b.iter(|| sets[0].$set_func(&sets[1]).$result_func())\n        }\n    };\n}\n\nfn slim_set(n: usize) -> BTreeSet<usize> {\n    (0..n).collect::<BTreeSet<_>>()\n}\n\n#[bench]\npub fn clone_100(b: &mut Bencher) {\n    let src = slim_set(100);\n    b.iter(|| src.clone())\n}\n\n#[bench]\npub fn clone_100_and_clear(b: &mut Bencher) {\n    let src = slim_set(100);\n    b.iter(|| src.clone().clear())\n}\n\n#[bench]\npub fn clone_100_and_drain_all(b: &mut Bencher) {\n    let src = slim_set(100);\n    b.iter(|| src.clone().drain_filter(|_| true).count())\n}\n\n#[bench]\npub fn clone_100_and_drain_half(b: &mut Bencher) {\n    let src = slim_set(100);\n    b.iter(|| {\n        let mut set = src.clone();\n        assert_eq!(set.drain_filter(|i| i % 2 == 0).count(), 100 / 2);\n        assert_eq!(set.len(), 100 / 2);\n    })\n}\n\n#[bench]\npub fn clone_100_and_into_iter(b: &mut Bencher) {\n    let src = slim_set(100);\n    b.iter(|| src.clone().into_iter().count())\n}\n\n#[bench]\npub fn clone_100_and_pop_all(b: &mut Bencher) {\n    let src = slim_set(100);\n    b.iter(|| {\n        let mut set = src.clone();\n        while set.pop_first().is_some() {}\n        set\n    });\n}\n\n#[bench]\npub fn clone_100_and_remove_all(b: &mut Bencher) {\n    let src = slim_set(100);\n    b.iter(|| {\n        let mut set = src.clone();\n        while let Some(elt) = set.iter().copied().next() {\n            let ok = set.remove(&elt);\n            debug_assert!(ok);\n        }\n        set\n    });\n}\n\n#[bench]\npub fn clone_100_and_remove_half(b: &mut Bencher) {\n    let src = slim_set(100);\n    b.iter(|| {\n        let mut set = src.clone();\n        for i in (0..100).step_by(2) {\n            let ok = set.remove(&i);\n            debug_assert!(ok);\n        }\n        assert_eq!(set.len(), 100 / 2);\n        set\n    })\n}\n\n#[bench]\npub fn clone_10k(b: &mut Bencher) {\n    let src = slim_set(10_000);\n    b.iter(|| src.clone())\n}\n\n#[bench]\npub fn clone_10k_and_clear(b: &mut Bencher) {\n    let src = slim_set(10_000);\n    b.iter(|| src.clone().clear())\n}\n\n#[bench]\npub fn clone_10k_and_drain_all(b: &mut Bencher) {\n    let src = slim_set(10_000);\n    b.iter(|| src.clone().drain_filter(|_| true).count())\n}\n\n#[bench]\npub fn clone_10k_and_drain_half(b: &mut Bencher) {\n    let src = slim_set(10_000);\n    b.iter(|| {\n        let mut set = src.clone();\n        assert_eq!(set.drain_filter(|i| i % 2 == 0).count(), 10_000 / 2);\n        assert_eq!(set.len(), 10_000 / 2);\n    })\n}\n\n#[bench]\npub fn clone_10k_and_into_iter(b: &mut Bencher) {\n    let src = slim_set(10_000);\n    b.iter(|| src.clone().into_iter().count())\n}\n\n#[bench]\npub fn clone_10k_and_pop_all(b: &mut Bencher) {\n    let src = slim_set(10_000);\n    b.iter(|| {\n        let mut set = src.clone();\n        while set.pop_first().is_some() {}\n        set\n    });\n}\n\n#[bench]\npub fn clone_10k_and_remove_all(b: &mut Bencher) {\n    let src = slim_set(10_000);\n    b.iter(|| {\n        let mut set = src.clone();\n        while let Some(elt) = set.iter().copied().next() {\n            let ok = set.remove(&elt);\n            debug_assert!(ok);\n        }\n        set\n    });\n}\n\n#[bench]\npub fn clone_10k_and_remove_half(b: &mut Bencher) {\n    let src = slim_set(10_000);\n    b.iter(|| {\n        let mut set = src.clone();\n        for i in (0..10_000).step_by(2) {\n            let ok = set.remove(&i);\n            debug_assert!(ok);\n        }\n        assert_eq!(set.len(), 10_000 / 2);\n        set\n    })\n}\n\nset_bench! {intersection_100_neg_vs_100_pos, intersection, count, [neg(100), pos(100)]}\nset_bench! {intersection_100_neg_vs_10k_pos, intersection, count, [neg(100), pos(10_000)]}\nset_bench! {intersection_100_pos_vs_100_neg, intersection, count, [pos(100), neg(100)]}\nset_bench! {intersection_100_pos_vs_10k_neg, intersection, count, [pos(100), neg(10_000)]}\nset_bench! {intersection_10k_neg_vs_100_pos, intersection, count, [neg(10_000), pos(100)]}\nset_bench! {intersection_10k_neg_vs_10k_pos, intersection, count, [neg(10_000), pos(10_000)]}\nset_bench! {intersection_10k_pos_vs_100_neg, intersection, count, [pos(10_000), neg(100)]}\nset_bench! {intersection_10k_pos_vs_10k_neg, intersection, count, [pos(10_000), neg(10_000)]}\nset_bench! {intersection_random_100_vs_100, intersection, count, [random(100), random(100)]}\nset_bench! {intersection_random_100_vs_10k, intersection, count, [random(100), random(10_000)]}\nset_bench! {intersection_random_10k_vs_100, intersection, count, [random(10_000), random(100)]}\nset_bench! {intersection_random_10k_vs_10k, intersection, count, [random(10_000), random(10_000)]}\nset_bench! {intersection_staggered_100_vs_100, intersection, count, stagger(100, 1)}\nset_bench! {intersection_staggered_10k_vs_10k, intersection, count, stagger(10_000, 1)}\nset_bench! {intersection_staggered_100_vs_10k, intersection, count, stagger(100, 100)}\nset_bench! {difference_random_100_vs_100, difference, count, [random(100), random(100)]}\nset_bench! {difference_random_100_vs_10k, difference, count, [random(100), random(10_000)]}\nset_bench! {difference_random_10k_vs_100, difference, count, [random(10_000), random(100)]}\nset_bench! {difference_random_10k_vs_10k, difference, count, [random(10_000), random(10_000)]}\nset_bench! {difference_staggered_100_vs_100, difference, count, stagger(100, 1)}\nset_bench! {difference_staggered_10k_vs_10k, difference, count, stagger(10_000, 1)}\nset_bench! {difference_staggered_100_vs_10k, difference, count, stagger(100, 100)}\nset_bench! {is_subset_100_vs_100, is_subset, clone, [pos(100), pos(100)]}\nset_bench! {is_subset_100_vs_10k, is_subset, clone, [pos(100), pos(10_000)]}\nset_bench! {is_subset_10k_vs_100, is_subset, clone, [pos(10_000), pos(100)]}\nset_bench! {is_subset_10k_vs_10k, is_subset, clone, [pos(10_000), pos(10_000)]}\nmod map;\nmod set;\nuse std::{mem, ptr};\n\nuse rand::distributions::{Alphanumeric, Standard};\nuse rand::{thread_rng, Rng, SeedableRng};\nuse rand_xorshift::XorShiftRng;\nuse test::{black_box, Bencher};\n\n#[bench]\nfn iterator(b: &mut Bencher) {\n    // peculiar numbers to stop LLVM from optimising the summation\n    // out.\n    let v: Vec<_> = (0..100).map(|i| i ^ (i << 1) ^ (i >> 1)).collect();\n\n    b.iter(|| {\n        let mut sum = 0;\n        for x in &v {\n            sum += *x;\n        }\n        // sum == 11806, to stop dead code elimination.\n        if sum == 0 {\n            panic!()\n        }\n    })\n}\n\n#[bench]\nfn mut_iterator(b: &mut Bencher) {\n    let mut v = vec![0; 100];\n\n    b.iter(|| {\n        let mut i = 0;\n        for x in &mut v {\n            *x = i;\n            i += 1;\n        }\n    })\n}\n\n#[bench]\nfn concat(b: &mut Bencher) {\n    let xss: Vec<Vec<i32>> = (0..100).map(|i| (0..i).collect()).collect();\n    b.iter(|| {\n        xss.concat();\n    });\n}\n\n#[bench]\nfn join(b: &mut Bencher) {\n    let xss: Vec<Vec<i32>> = (0..100).map(|i| (0..i).collect()).collect();\n    b.iter(|| xss.join(&0));\n}\n\n#[bench]\nfn push(b: &mut Bencher) {\n    let mut vec = Vec::<i32>::new();\n    b.iter(|| {\n        vec.push(0);\n        black_box(&vec);\n    });\n}\n\n#[bench]\nfn starts_with_same_vector(b: &mut Bencher) {\n    let vec: Vec<_> = (0..100).collect();\n    b.iter(|| vec.starts_with(&vec))\n}\n\n#[bench]\nfn starts_with_single_element(b: &mut Bencher) {\n    let vec: Vec<_> = vec![0];\n    b.iter(|| vec.starts_with(&vec))\n}\n\n#[bench]\nfn starts_with_diff_one_element_at_end(b: &mut Bencher) {\n    let vec: Vec<_> = (0..100).collect();\n    let mut match_vec: Vec<_> = (0..99).collect();\n    match_vec.push(0);\n    b.iter(|| vec.starts_with(&match_vec))\n}\n\n#[bench]\nfn ends_with_same_vector(b: &mut Bencher) {\n    let vec: Vec<_> = (0..100).collect();\n    b.iter(|| vec.ends_with(&vec))\n}\n\n#[bench]\nfn ends_with_single_element(b: &mut Bencher) {\n    let vec: Vec<_> = vec![0];\n    b.iter(|| vec.ends_with(&vec))\n}\n\n#[bench]\nfn ends_with_diff_one_element_at_beginning(b: &mut Bencher) {\n    let vec: Vec<_> = (0..100).collect();\n    let mut match_vec: Vec<_> = (0..100).collect();\n    match_vec[0] = 200;\n    b.iter(|| vec.starts_with(&match_vec))\n}\n\n#[bench]\nfn contains_last_element(b: &mut Bencher) {\n    let vec: Vec<_> = (0..100).collect();\n    b.iter(|| vec.contains(&99))\n}\n\n#[bench]\nfn zero_1kb_from_elem(b: &mut Bencher) {\n    b.iter(|| vec![0u8; 1024]);\n}\n\n#[bench]\nfn zero_1kb_set_memory(b: &mut Bencher) {\n    b.iter(|| {\n        let mut v = Vec::<u8>::with_capacity(1024);\n        unsafe {\n            let vp = v.as_mut_ptr();\n            ptr::write_bytes(vp, 0, 1024);\n            v.set_len(1024);\n        }\n        v\n    });\n}\n\n#[bench]\nfn zero_1kb_loop_set(b: &mut Bencher) {\n    b.iter(|| {\n        let mut v = Vec::<u8>::with_capacity(1024);\n        unsafe {\n            v.set_len(1024);\n        }\n        for i in 0..1024 {\n            v[i] = 0;\n        }\n    });\n}\n\n#[bench]\nfn zero_1kb_mut_iter(b: &mut Bencher) {\n    b.iter(|| {\n        let mut v = Vec::<u8>::with_capacity(1024);\n        unsafe {\n            v.set_len(1024);\n        }\n        for x in &mut v {\n            *x = 0;\n        }\n        v\n    });\n}\n\n#[bench]\nfn random_inserts(b: &mut Bencher) {\n    let mut rng = thread_rng();\n    b.iter(|| {\n        let mut v = vec![(0, 0); 30];\n        for _ in 0..100 {\n            let l = v.len();\n            v.insert(rng.gen::<usize>() % (l + 1), (1, 1));\n        }\n    })\n}\n\n#[bench]\nfn random_removes(b: &mut Bencher) {\n    let mut rng = thread_rng();\n    b.iter(|| {\n        let mut v = vec![(0, 0); 130];\n        for _ in 0..100 {\n            let l = v.len();\n            v.remove(rng.gen::<usize>() % l);\n        }\n    })\n}\n\nfn gen_ascending(len: usize) -> Vec<u64> {\n    (0..len as u64).collect()\n}\n\nfn gen_descending(len: usize) -> Vec<u64> {\n    (0..len as u64).rev().collect()\n}\n\nconst SEED: [u8; 16] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];\n\nfn gen_random(len: usize) -> Vec<u64> {\n    let mut rng = XorShiftRng::from_seed(SEED);\n    (&mut rng).sample_iter(&Standard).take(len).collect()\n}\n\nfn gen_random_bytes(len: usize) -> Vec<u8> {\n    let mut rng = XorShiftRng::from_seed(SEED);\n    (&mut rng).sample_iter(&Standard).take(len).collect()\n}\n\nfn gen_mostly_ascending(len: usize) -> Vec<u64> {\n    let mut rng = XorShiftRng::from_seed(SEED);\n    let mut v = gen_ascending(len);\n    for _ in (0usize..).take_while(|x| x * x <= len) {\n        let x = rng.gen::<usize>() % len;\n        let y = rng.gen::<usize>() % len;\n        v.swap(x, y);\n    }\n    v\n}\n\nfn gen_mostly_descending(len: usize) -> Vec<u64> {\n    let mut rng = XorShiftRng::from_seed(SEED);\n    let mut v = gen_descending(len);\n    for _ in (0usize..).take_while(|x| x * x <= len) {\n        let x = rng.gen::<usize>() % len;\n        let y = rng.gen::<usize>() % len;\n        v.swap(x, y);\n    }\n    v\n}\n\nfn gen_strings(len: usize) -> Vec<String> {\n    let mut rng = XorShiftRng::from_seed(SEED);\n    let mut v = vec![];\n    for _ in 0..len {\n        let n = rng.gen::<usize>() % 20 + 1;\n        v.push((&mut rng).sample_iter(&Alphanumeric).take(n).collect());\n    }\n    v\n}\n\nfn gen_big_random(len: usize) -> Vec<[u64; 16]> {\n    let mut rng = XorShiftRng::from_seed(SEED);\n    (&mut rng).sample_iter(&Standard).map(|x| [x; 16]).take(len).collect()\n}\n\nmacro_rules! sort {\n    ($f:ident, $name:ident, $gen:expr, $len:expr) => {\n        #[bench]\n        fn $name(b: &mut Bencher) {\n            let v = $gen($len);\n            b.iter(|| v.clone().$f());\n            b.bytes = $len * mem::size_of_val(&$gen(1)[0]) as u64;\n        }\n    };\n}\n\nmacro_rules! sort_strings {\n    ($f:ident, $name:ident, $gen:expr, $len:expr) => {\n        #[bench]\n        fn $name(b: &mut Bencher) {\n            let v = $gen($len);\n            let v = v.iter().map(|s| &**s).collect::<Vec<&str>>();\n            b.iter(|| v.clone().$f());\n            b.bytes = $len * mem::size_of::<&str>() as u64;\n        }\n    };\n}\n\nmacro_rules! sort_expensive {\n    ($f:ident, $name:ident, $gen:expr, $len:expr) => {\n        #[bench]\n        fn $name(b: &mut Bencher) {\n            let v = $gen($len);\n            b.iter(|| {\n                let mut v = v.clone();\n                let mut count = 0;\n                v.$f(|a: &u64, b: &u64| {\n                    count += 1;\n                    if count % 1_000_000_000 == 0 {\n                        panic!(\"should not happen\");\n                    }\n                    (*a as f64).cos().partial_cmp(&(*b as f64).cos()).unwrap()\n                });\n                black_box(count);\n            });\n            b.bytes = $len * mem::size_of_val(&$gen(1)[0]) as u64;\n        }\n    };\n}\n\nmacro_rules! sort_lexicographic {\n    ($f:ident, $name:ident, $gen:expr, $len:expr) => {\n        #[bench]\n        fn $name(b: &mut Bencher) {\n            let v = $gen($len);\n            b.iter(|| v.clone().$f(|x| x.to_string()));\n            b.bytes = $len * mem::size_of_val(&$gen(1)[0]) as u64;\n        }\n    };\n}\n\nsort!(sort, sort_small_ascending, gen_ascending, 10);\nsort!(sort, sort_small_descending, gen_descending, 10);\nsort!(sort, sort_small_random, gen_random, 10);\nsort!(sort, sort_small_big, gen_big_random, 10);\nsort!(sort, sort_medium_random, gen_random, 100);\nsort!(sort, sort_large_ascending, gen_ascending, 10000);\nsort!(sort, sort_large_descending, gen_descending, 10000);\nsort!(sort, sort_large_mostly_ascending, gen_mostly_ascending, 10000);\nsort!(sort, sort_large_mostly_descending, gen_mostly_descending, 10000);\nsort!(sort, sort_large_random, gen_random, 10000);\nsort!(sort, sort_large_big, gen_big_random, 10000);\nsort_strings!(sort, sort_large_strings, gen_strings, 10000);\nsort_expensive!(sort_by, sort_large_expensive, gen_random, 10000);\n\nsort!(sort_unstable, sort_unstable_small_ascending, gen_ascending, 10);\nsort!(sort_unstable, sort_unstable_small_descending, gen_descending, 10);\nsort!(sort_unstable, sort_unstable_small_random, gen_random, 10);\nsort!(sort_unstable, sort_unstable_small_big, gen_big_random, 10);\nsort!(sort_unstable, sort_unstable_medium_random, gen_random, 100);\nsort!(sort_unstable, sort_unstable_large_ascending, gen_ascending, 10000);\nsort!(sort_unstable, sort_unstable_large_descending, gen_descending, 10000);\nsort!(sort_unstable, sort_unstable_large_mostly_ascending, gen_mostly_ascending, 10000);\nsort!(sort_unstable, sort_unstable_large_mostly_descending, gen_mostly_descending, 10000);\nsort!(sort_unstable, sort_unstable_large_random, gen_random, 10000);\nsort!(sort_unstable, sort_unstable_large_big, gen_big_random, 10000);\nsort_strings!(sort_unstable, sort_unstable_large_strings, gen_strings, 10000);\nsort_expensive!(sort_unstable_by, sort_unstable_large_expensive, gen_random, 10000);\n\nsort_lexicographic!(sort_by_key, sort_by_key_lexicographic, gen_random, 10000);\nsort_lexicographic!(sort_unstable_by_key, sort_unstable_by_key_lexicographic, gen_random, 10000);\nsort_lexicographic!(sort_by_cached_key, sort_by_cached_key_lexicographic, gen_random, 10000);\n\nmacro_rules! reverse {\n    ($name:ident, $ty:ty, $f:expr) => {\n        #[bench]\n        fn $name(b: &mut Bencher) {\n            // odd length and offset by 1 to be as unaligned as possible\n            let n = 0xFFFFF;\n            let mut v: Vec<_> = (0..1 + (n / mem::size_of::<$ty>() as u64)).map($f).collect();\n            b.iter(|| black_box(&mut v[1..]).reverse());\n            b.bytes = n;\n        }\n    };\n}\n\nreverse!(reverse_u8, u8, |x| x as u8);\nreverse!(reverse_u16, u16, |x| x as u16);\nreverse!(reverse_u8x3, [u8; 3], |x| [x as u8, (x >> 8) as u8, (x >> 16) as u8]);\nreverse!(reverse_u32, u32, |x| x as u32);\nreverse!(reverse_u64, u64, |x| x as u64);\nreverse!(reverse_u128, u128, |x| x as u128);\n#[repr(simd)]\nstruct F64x4(f64, f64, f64, f64);\nreverse!(reverse_simd_f64x4, F64x4, |x| {\n    let x = x as f64;\n    F64x4(x, x, x, x)\n});\n\nmacro_rules! rotate {\n    ($name:ident, $gen:expr, $len:expr, $mid:expr) => {\n        #[bench]\n        fn $name(b: &mut Bencher) {\n            let size = mem::size_of_val(&$gen(1)[0]);\n            let mut v = $gen($len * 8 / size);\n            b.iter(|| black_box(&mut v).rotate_left(($mid * 8 + size - 1) / size));\n            b.bytes = (v.len() * size) as u64;\n        }\n    };\n}\n\nrotate!(rotate_tiny_by1, gen_random, 16, 1);\nrotate!(rotate_tiny_half, gen_random, 16, 16 / 2);\nrotate!(rotate_tiny_half_plus_one, gen_random, 16, 16 / 2 + 1);\n\nrotate!(rotate_medium_by1, gen_random, 9158, 1);\nrotate!(rotate_medium_by727_u64, gen_random, 9158, 727);\nrotate!(rotate_medium_by727_bytes, gen_random_bytes, 9158, 727);\nrotate!(rotate_medium_by727_strings, gen_strings, 9158, 727);\nrotate!(rotate_medium_half, gen_random, 9158, 9158 / 2);\nrotate!(rotate_medium_half_plus_one, gen_random, 9158, 9158 / 2 + 1);\n\n// Intended to use more RAM than the machine has cache\nrotate!(rotate_huge_by1, gen_random, 5 * 1024 * 1024, 1);\nrotate!(rotate_huge_by9199_u64, gen_random, 5 * 1024 * 1024, 9199);\nrotate!(rotate_huge_by9199_bytes, gen_random_bytes, 5 * 1024 * 1024, 9199);\nrotate!(rotate_huge_by9199_strings, gen_strings, 5 * 1024 * 1024, 9199);\nrotate!(rotate_huge_by9199_big, gen_big_random, 5 * 1024 * 1024, 9199);\nrotate!(rotate_huge_by1234577_u64, gen_random, 5 * 1024 * 1024, 1234577);\nrotate!(rotate_huge_by1234577_bytes, gen_random_bytes, 5 * 1024 * 1024, 1234577);\nrotate!(rotate_huge_by1234577_strings, gen_strings, 5 * 1024 * 1024, 1234577);\nrotate!(rotate_huge_by1234577_big, gen_big_random, 5 * 1024 * 1024, 1234577);\nrotate!(rotate_huge_half, gen_random, 5 * 1024 * 1024, 5 * 1024 * 1024 / 2);\nrotate!(rotate_huge_half_plus_one, gen_random, 5 * 1024 * 1024, 5 * 1024 * 1024 / 2 + 1);\nuse std::collections::VecDeque;\nuse test::{black_box, Bencher};\n\n#[bench]\nfn bench_new(b: &mut Bencher) {\n    b.iter(|| {\n        let ring: VecDeque<i32> = VecDeque::new();\n        black_box(ring);\n    })\n}\n\n#[bench]\nfn bench_grow_1025(b: &mut Bencher) {\n    b.iter(|| {\n        let mut deq = VecDeque::new();\n        for i in 0..1025 {\n            deq.push_front(i);\n        }\n        black_box(deq);\n    })\n}\n\n#[bench]\nfn bench_iter_1000(b: &mut Bencher) {\n    let ring: VecDeque<_> = (0..1000).collect();\n\n    b.iter(|| {\n        let mut sum = 0;\n        for &i in &ring {\n            sum += i;\n        }\n        black_box(sum);\n    })\n}\n\n#[bench]\nfn bench_mut_iter_1000(b: &mut Bencher) {\n    let mut ring: VecDeque<_> = (0..1000).collect();\n\n    b.iter(|| {\n        let mut sum = 0;\n        for i in &mut ring {\n            sum += *i;\n        }\n        black_box(sum);\n    })\n}\n\n#[bench]\nfn bench_try_fold(b: &mut Bencher) {\n    let ring: VecDeque<_> = (0..1000).collect();\n\n    b.iter(|| black_box(ring.iter().try_fold(0, |a, b| Some(a + b))))\n}\nuse std::collections::BinaryHeap;\n\nuse rand::{seq::SliceRandom, thread_rng};\nuse test::{black_box, Bencher};\n\n#[bench]\nfn bench_find_smallest_1000(b: &mut Bencher) {\n    let mut rng = thread_rng();\n    let mut vec: Vec<u32> = (0..100_000).collect();\n    vec.shuffle(&mut rng);\n\n    b.iter(|| {\n        let mut iter = vec.iter().copied();\n        let mut heap: BinaryHeap<_> = iter.by_ref().take(1000).collect();\n\n        for x in iter {\n            let mut max = heap.peek_mut().unwrap();\n            // This comparison should be true only 1% of the time.\n            // Unnecessary `sift_down`s will degrade performance\n            if x < *max {\n                *max = x;\n            }\n        }\n\n        heap\n    })\n}\n\n#[bench]\nfn bench_peek_mut_deref_mut(b: &mut Bencher) {\n    let mut bheap = BinaryHeap::from(vec![42]);\n    let vec: Vec<u32> = (0..1_000_000).collect();\n\n    b.iter(|| {\n        let vec = black_box(&vec);\n        let mut peek_mut = bheap.peek_mut().unwrap();\n        // The compiler shouldn't be able to optimize away the `sift_down`\n        // assignment in `PeekMut`'s `DerefMut` implementation since\n        // the loop may not run.\n        for &i in vec.iter() {\n            *peek_mut = i;\n        }\n        // Remove the already minimal overhead of the sift_down\n        std::mem::forget(peek_mut);\n    })\n}\n\n#[bench]\nfn bench_from_vec(b: &mut Bencher) {\n    let mut rng = thread_rng();\n    let mut vec: Vec<u32> = (0..100_000).collect();\n    vec.shuffle(&mut rng);\n\n    b.iter(|| BinaryHeap::from(vec.clone()))\n}\n\n#[bench]\nfn bench_into_sorted_vec(b: &mut Bencher) {\n    let bheap: BinaryHeap<i32> = (0..10_000).collect();\n\n    b.iter(|| bheap.clone().into_sorted_vec())\n}\n\n#[bench]\nfn bench_push(b: &mut Bencher) {\n    let mut bheap = BinaryHeap::with_capacity(50_000);\n    let mut rng = thread_rng();\n    let mut vec: Vec<u32> = (0..50_000).collect();\n    vec.shuffle(&mut rng);\n\n    b.iter(|| {\n        for &i in vec.iter() {\n            bheap.push(i);\n        }\n        black_box(&mut bheap);\n        bheap.clear();\n    })\n}\n\n#[bench]\nfn bench_pop(b: &mut Bencher) {\n    let mut bheap = BinaryHeap::with_capacity(10_000);\n\n    b.iter(|| {\n        bheap.extend((0..10_000).rev());\n        black_box(&mut bheap);\n        while let Some(elem) = bheap.pop() {\n            black_box(elem);\n        }\n    })\n}\nuse std::{collections::VecDeque, time::Instant};\n\nconst VECDEQUE_LEN: i32 = 100000;\nconst WARMUP_N: usize = 100;\nconst BENCH_N: usize = 1000;\n\nfn main() {\n    let a: VecDeque<i32> = (0..VECDEQUE_LEN).collect();\n    let b: VecDeque<i32> = (0..VECDEQUE_LEN).collect();\n\n    for _ in 0..WARMUP_N {\n        let mut c = a.clone();\n        let mut d = b.clone();\n        c.append(&mut d);\n    }\n\n    let mut durations = Vec::with_capacity(BENCH_N);\n\n    for _ in 0..BENCH_N {\n        let mut c = a.clone();\n        let mut d = b.clone();\n        let before = Instant::now();\n        c.append(&mut d);\n        let after = Instant::now();\n        durations.push(after.duration_since(before));\n    }\n\n    let l = durations.len();\n    durations.sort();\n\n    assert!(BENCH_N % 2 == 0);\n    let median = (durations[(l / 2) - 1] + durations[l / 2]) / 2;\n    println!(\"\\ncustom-bench vec_deque_append {:?} ns/iter\\n\", median.as_nanos());\n}\nuse std::collections::LinkedList;\nuse std::panic::{catch_unwind, AssertUnwindSafe};\n\n#[test]\nfn test_basic() {\n    let mut m = LinkedList::<Box<_>>::new();\n    assert_eq!(m.pop_front(), None);\n    assert_eq!(m.pop_back(), None);\n    assert_eq!(m.pop_front(), None);\n    m.push_front(box 1);\n    assert_eq!(m.pop_front(), Some(box 1));\n    m.push_back(box 2);\n    m.push_back(box 3);\n    assert_eq!(m.len(), 2);\n    assert_eq!(m.pop_front(), Some(box 2));\n    assert_eq!(m.pop_front(), Some(box 3));\n    assert_eq!(m.len(), 0);\n    assert_eq!(m.pop_front(), None);\n    m.push_back(box 1);\n    m.push_back(box 3);\n    m.push_back(box 5);\n    m.push_back(box 7);\n    assert_eq!(m.pop_front(), Some(box 1));\n\n    let mut n = LinkedList::new();\n    n.push_front(2);\n    n.push_front(3);\n    {\n        assert_eq!(n.front().unwrap(), &3);\n        let x = n.front_mut().unwrap();\n        assert_eq!(*x, 3);\n        *x = 0;\n    }\n    {\n        assert_eq!(n.back().unwrap(), &2);\n        let y = n.back_mut().unwrap();\n        assert_eq!(*y, 2);\n        *y = 1;\n    }\n    assert_eq!(n.pop_front(), Some(0));\n    assert_eq!(n.pop_front(), Some(1));\n}\n\nfn generate_test() -> LinkedList<i32> {\n    list_from(&[0, 1, 2, 3, 4, 5, 6])\n}\n\nfn list_from<T: Clone>(v: &[T]) -> LinkedList<T> {\n    v.iter().cloned().collect()\n}\n\n#[test]\nfn test_split_off() {\n    // singleton\n    {\n        let mut m = LinkedList::new();\n        m.push_back(1);\n\n        let p = m.split_off(0);\n        assert_eq!(m.len(), 0);\n        assert_eq!(p.len(), 1);\n        assert_eq!(p.back(), Some(&1));\n        assert_eq!(p.front(), Some(&1));\n    }\n\n    // not singleton, forwards\n    {\n        let u = vec![1, 2, 3, 4, 5];\n        let mut m = list_from(&u);\n        let mut n = m.split_off(2);\n        assert_eq!(m.len(), 2);\n        assert_eq!(n.len(), 3);\n        for elt in 1..3 {\n            assert_eq!(m.pop_front(), Some(elt));\n        }\n        for elt in 3..6 {\n            assert_eq!(n.pop_front(), Some(elt));\n        }\n    }\n    // not singleton, backwards\n    {\n        let u = vec![1, 2, 3, 4, 5];\n        let mut m = list_from(&u);\n        let mut n = m.split_off(4);\n        assert_eq!(m.len(), 4);\n        assert_eq!(n.len(), 1);\n        for elt in 1..5 {\n            assert_eq!(m.pop_front(), Some(elt));\n        }\n        for elt in 5..6 {\n            assert_eq!(n.pop_front(), Some(elt));\n        }\n    }\n\n    // no-op on the last index\n    {\n        let mut m = LinkedList::new();\n        m.push_back(1);\n\n        let p = m.split_off(1);\n        assert_eq!(m.len(), 1);\n        assert_eq!(p.len(), 0);\n        assert_eq!(m.back(), Some(&1));\n        assert_eq!(m.front(), Some(&1));\n    }\n}\n\n#[test]\nfn test_iterator() {\n    let m = generate_test();\n    for (i, elt) in m.iter().enumerate() {\n        assert_eq!(i as i32, *elt);\n    }\n    let mut n = LinkedList::new();\n    assert_eq!(n.iter().next(), None);\n    n.push_front(4);\n    let mut it = n.iter();\n    assert_eq!(it.size_hint(), (1, Some(1)));\n    assert_eq!(it.next().unwrap(), &4);\n    assert_eq!(it.size_hint(), (0, Some(0)));\n    assert_eq!(it.next(), None);\n}\n\n#[test]\nfn test_iterator_clone() {\n    let mut n = LinkedList::new();\n    n.push_back(2);\n    n.push_back(3);\n    n.push_back(4);\n    let mut it = n.iter();\n    it.next();\n    let mut jt = it.clone();\n    assert_eq!(it.next(), jt.next());\n    assert_eq!(it.next_back(), jt.next_back());\n    assert_eq!(it.next(), jt.next());\n}\n\n#[test]\nfn test_iterator_double_end() {\n    let mut n = LinkedList::new();\n    assert_eq!(n.iter().next(), None);\n    n.push_front(4);\n    n.push_front(5);\n    n.push_front(6);\n    let mut it = n.iter();\n    assert_eq!(it.size_hint(), (3, Some(3)));\n    assert_eq!(it.next().unwrap(), &6);\n    assert_eq!(it.size_hint(), (2, Some(2)));\n    assert_eq!(it.next_back().unwrap(), &4);\n    assert_eq!(it.size_hint(), (1, Some(1)));\n    assert_eq!(it.next_back().unwrap(), &5);\n    assert_eq!(it.next_back(), None);\n    assert_eq!(it.next(), None);\n}\n\n#[test]\nfn test_rev_iter() {\n    let m = generate_test();\n    for (i, elt) in m.iter().rev().enumerate() {\n        assert_eq!((6 - i) as i32, *elt);\n    }\n    let mut n = LinkedList::new();\n    assert_eq!(n.iter().rev().next(), None);\n    n.push_front(4);\n    let mut it = n.iter().rev();\n    assert_eq!(it.size_hint(), (1, Some(1)));\n    assert_eq!(it.next().unwrap(), &4);\n    assert_eq!(it.size_hint(), (0, Some(0)));\n    assert_eq!(it.next(), None);\n}\n\n#[test]\nfn test_mut_iter() {\n    let mut m = generate_test();\n    let mut len = m.len();\n    for (i, elt) in m.iter_mut().enumerate() {\n        assert_eq!(i as i32, *elt);\n        len -= 1;\n    }\n    assert_eq!(len, 0);\n    let mut n = LinkedList::new();\n    assert!(n.iter_mut().next().is_none());\n    n.push_front(4);\n    n.push_back(5);\n    let mut it = n.iter_mut();\n    assert_eq!(it.size_hint(), (2, Some(2)));\n    assert!(it.next().is_some());\n    assert!(it.next().is_some());\n    assert_eq!(it.size_hint(), (0, Some(0)));\n    assert!(it.next().is_none());\n}\n\n#[test]\nfn test_iterator_mut_double_end() {\n    let mut n = LinkedList::new();\n    assert!(n.iter_mut().next_back().is_none());\n    n.push_front(4);\n    n.push_front(5);\n    n.push_front(6);\n    let mut it = n.iter_mut();\n    assert_eq!(it.size_hint(), (3, Some(3)));\n    assert_eq!(*it.next().unwrap(), 6);\n    assert_eq!(it.size_hint(), (2, Some(2)));\n    assert_eq!(*it.next_back().unwrap(), 4);\n    assert_eq!(it.size_hint(), (1, Some(1)));\n    assert_eq!(*it.next_back().unwrap(), 5);\n    assert!(it.next_back().is_none());\n    assert!(it.next().is_none());\n}\n\n#[test]\nfn test_mut_rev_iter() {\n    let mut m = generate_test();\n    for (i, elt) in m.iter_mut().rev().enumerate() {\n        assert_eq!((6 - i) as i32, *elt);\n    }\n    let mut n = LinkedList::new();\n    assert!(n.iter_mut().rev().next().is_none());\n    n.push_front(4);\n    let mut it = n.iter_mut().rev();\n    assert!(it.next().is_some());\n    assert!(it.next().is_none());\n}\n\n#[test]\nfn test_eq() {\n    let mut n = list_from(&[]);\n    let mut m = list_from(&[]);\n    assert!(n == m);\n    n.push_front(1);\n    assert!(n != m);\n    m.push_back(1);\n    assert!(n == m);\n\n    let n = list_from(&[2, 3, 4]);\n    let m = list_from(&[1, 2, 3]);\n    assert!(n != m);\n}\n\n#[test]\nfn test_hash() {\n    use crate::hash;\n\n    let mut x = LinkedList::new();\n    let mut y = LinkedList::new();\n\n    assert!(hash(&x) == hash(&y));\n\n    x.push_back(1);\n    x.push_back(2);\n    x.push_back(3);\n\n    y.push_front(3);\n    y.push_front(2);\n    y.push_front(1);\n\n    assert!(hash(&x) == hash(&y));\n}\n\n#[test]\nfn test_ord() {\n    let n = list_from(&[]);\n    let m = list_from(&[1, 2, 3]);\n    assert!(n < m);\n    assert!(m > n);\n    assert!(n <= n);\n    assert!(n >= n);\n}\n\n#[test]\nfn test_ord_nan() {\n    let nan = 0.0f64 / 0.0;\n    let n = list_from(&[nan]);\n    let m = list_from(&[nan]);\n    assert!(!(n < m));\n    assert!(!(n > m));\n    assert!(!(n <= m));\n    assert!(!(n >= m));\n\n    let n = list_from(&[nan]);\n    let one = list_from(&[1.0f64]);\n    assert!(!(n < one));\n    assert!(!(n > one));\n    assert!(!(n <= one));\n    assert!(!(n >= one));\n\n    let u = list_from(&[1.0f64, 2.0, nan]);\n    let v = list_from(&[1.0f64, 2.0, 3.0]);\n    assert!(!(u < v));\n    assert!(!(u > v));\n    assert!(!(u <= v));\n    assert!(!(u >= v));\n\n    let s = list_from(&[1.0f64, 2.0, 4.0, 2.0]);\n    let t = list_from(&[1.0f64, 2.0, 3.0, 2.0]);\n    assert!(!(s < t));\n    assert!(s > one);\n    assert!(!(s <= one));\n    assert!(s >= one);\n}\n\n#[test]\nfn test_show() {\n    let list: LinkedList<_> = (0..10).collect();\n    assert_eq!(format!(\"{:?}\", list), \"[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\");\n\n    let list: LinkedList<_> = vec![\"just\", \"one\", \"test\", \"more\"].iter().cloned().collect();\n    assert_eq!(format!(\"{:?}\", list), \"[\\\"just\\\", \\\"one\\\", \\\"test\\\", \\\"more\\\"]\");\n}\n\n#[test]\nfn test_extend_ref() {\n    let mut a = LinkedList::new();\n    a.push_back(1);\n\n    a.extend(&[2, 3, 4]);\n\n    assert_eq!(a.len(), 4);\n    assert_eq!(a, list_from(&[1, 2, 3, 4]));\n\n    let mut b = LinkedList::new();\n    b.push_back(5);\n    b.push_back(6);\n    a.extend(&b);\n\n    assert_eq!(a.len(), 6);\n    assert_eq!(a, list_from(&[1, 2, 3, 4, 5, 6]));\n}\n\n#[test]\nfn test_extend() {\n    let mut a = LinkedList::new();\n    a.push_back(1);\n    a.extend(vec![2, 3, 4]); // uses iterator\n\n    assert_eq!(a.len(), 4);\n    assert!(a.iter().eq(&[1, 2, 3, 4]));\n\n    let b: LinkedList<_> = vec![5, 6, 7].into_iter().collect();\n    a.extend(b); // specializes to `append`\n\n    assert_eq!(a.len(), 7);\n    assert!(a.iter().eq(&[1, 2, 3, 4, 5, 6, 7]));\n}\n\n#[test]\nfn test_contains() {\n    let mut l = LinkedList::new();\n    l.extend(&[2, 3, 4]);\n\n    assert!(l.contains(&3));\n    assert!(!l.contains(&1));\n\n    l.clear();\n\n    assert!(!l.contains(&3));\n}\n\n#[test]\nfn drain_filter_empty() {\n    let mut list: LinkedList<i32> = LinkedList::new();\n\n    {\n        let mut iter = list.drain_filter(|_| true);\n        assert_eq!(iter.size_hint(), (0, Some(0)));\n        assert_eq!(iter.next(), None);\n        assert_eq!(iter.size_hint(), (0, Some(0)));\n        assert_eq!(iter.next(), None);\n        assert_eq!(iter.size_hint(), (0, Some(0)));\n    }\n\n    assert_eq!(list.len(), 0);\n    assert_eq!(list.into_iter().collect::<Vec<_>>(), vec![]);\n}\n\n#[test]\nfn drain_filter_zst() {\n    let mut list: LinkedList<_> = vec![(), (), (), (), ()].into_iter().collect();\n    let initial_len = list.len();\n    let mut count = 0;\n\n    {\n        let mut iter = list.drain_filter(|_| true);\n        assert_eq!(iter.size_hint(), (0, Some(initial_len)));\n        while let Some(_) = iter.next() {\n            count += 1;\n            assert_eq!(iter.size_hint(), (0, Some(initial_len - count)));\n        }\n        assert_eq!(iter.size_hint(), (0, Some(0)));\n        assert_eq!(iter.next(), None);\n        assert_eq!(iter.size_hint(), (0, Some(0)));\n    }\n\n    assert_eq!(count, initial_len);\n    assert_eq!(list.len(), 0);\n    assert_eq!(list.into_iter().collect::<Vec<_>>(), vec![]);\n}\n\n#[test]\nfn drain_filter_false() {\n    let mut list: LinkedList<_> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10].into_iter().collect();\n\n    let initial_len = list.len();\n    let mut count = 0;\n\n    {\n        let mut iter = list.drain_filter(|_| false);\n        assert_eq!(iter.size_hint(), (0, Some(initial_len)));\n        for _ in iter.by_ref() {\n            count += 1;\n        }\n        assert_eq!(iter.size_hint(), (0, Some(0)));\n        assert_eq!(iter.next(), None);\n        assert_eq!(iter.size_hint(), (0, Some(0)));\n    }\n\n    assert_eq!(count, 0);\n    assert_eq!(list.len(), initial_len);\n    assert_eq!(list.into_iter().collect::<Vec<_>>(), vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);\n}\n\n#[test]\nfn drain_filter_true() {\n    let mut list: LinkedList<_> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10].into_iter().collect();\n\n    let initial_len = list.len();\n    let mut count = 0;\n\n    {\n        let mut iter = list.drain_filter(|_| true);\n        assert_eq!(iter.size_hint(), (0, Some(initial_len)));\n        while let Some(_) = iter.next() {\n            count += 1;\n            assert_eq!(iter.size_hint(), (0, Some(initial_len - count)));\n        }\n        assert_eq!(iter.size_hint(), (0, Some(0)));\n        assert_eq!(iter.next(), None);\n        assert_eq!(iter.size_hint(), (0, Some(0)));\n    }\n\n    assert_eq!(count, initial_len);\n    assert_eq!(list.len(), 0);\n    assert_eq!(list.into_iter().collect::<Vec<_>>(), vec![]);\n}\n\n#[test]\nfn drain_filter_complex() {\n    {\n        //                [+xxx++++++xxxxx++++x+x++]\n        let mut list = vec![\n            1, 2, 4, 6, 7, 9, 11, 13, 15, 17, 18, 20, 22, 24, 26, 27, 29, 31, 33, 34, 35, 36, 37,\n            39,\n        ]\n        .into_iter()\n        .collect::<LinkedList<_>>();\n\n        let removed = list.drain_filter(|x| *x % 2 == 0).collect::<Vec<_>>();\n        assert_eq!(removed.len(), 10);\n        assert_eq!(removed, vec![2, 4, 6, 18, 20, 22, 24, 26, 34, 36]);\n\n        assert_eq!(list.len(), 14);\n        assert_eq!(\n            list.into_iter().collect::<Vec<_>>(),\n            vec![1, 7, 9, 11, 13, 15, 17, 27, 29, 31, 33, 35, 37, 39]\n        );\n    }\n\n    {\n        // [xxx++++++xxxxx++++x+x++]\n        let mut list = vec![\n            2, 4, 6, 7, 9, 11, 13, 15, 17, 18, 20, 22, 24, 26, 27, 29, 31, 33, 34, 35, 36, 37, 39,\n        ]\n        .into_iter()\n        .collect::<LinkedList<_>>();\n\n        let removed = list.drain_filter(|x| *x % 2 == 0).collect::<Vec<_>>();\n        assert_eq!(removed.len(), 10);\n        assert_eq!(removed, vec![2, 4, 6, 18, 20, 22, 24, 26, 34, 36]);\n\n        assert_eq!(list.len(), 13);\n        assert_eq!(\n            list.into_iter().collect::<Vec<_>>(),\n            vec![7, 9, 11, 13, 15, 17, 27, 29, 31, 33, 35, 37, 39]\n        );\n    }\n\n    {\n        // [xxx++++++xxxxx++++x+x]\n        let mut list =\n            vec![2, 4, 6, 7, 9, 11, 13, 15, 17, 18, 20, 22, 24, 26, 27, 29, 31, 33, 34, 35, 36]\n                .into_iter()\n                .collect::<LinkedList<_>>();\n\n        let removed = list.drain_filter(|x| *x % 2 == 0).collect::<Vec<_>>();\n        assert_eq!(removed.len(), 10);\n        assert_eq!(removed, vec![2, 4, 6, 18, 20, 22, 24, 26, 34, 36]);\n\n        assert_eq!(list.len(), 11);\n        assert_eq!(\n            list.into_iter().collect::<Vec<_>>(),\n            vec![7, 9, 11, 13, 15, 17, 27, 29, 31, 33, 35]\n        );\n    }\n\n    {\n        // [xxxxxxxxxx+++++++++++]\n        let mut list = vec![2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19]\n            .into_iter()\n            .collect::<LinkedList<_>>();\n\n        let removed = list.drain_filter(|x| *x % 2 == 0).collect::<Vec<_>>();\n        assert_eq!(removed.len(), 10);\n        assert_eq!(removed, vec![2, 4, 6, 8, 10, 12, 14, 16, 18, 20]);\n\n        assert_eq!(list.len(), 10);\n        assert_eq!(list.into_iter().collect::<Vec<_>>(), vec![1, 3, 5, 7, 9, 11, 13, 15, 17, 19]);\n    }\n\n    {\n        // [+++++++++++xxxxxxxxxx]\n        let mut list = vec![1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]\n            .into_iter()\n            .collect::<LinkedList<_>>();\n\n        let removed = list.drain_filter(|x| *x % 2 == 0).collect::<Vec<_>>();\n        assert_eq!(removed.len(), 10);\n        assert_eq!(removed, vec![2, 4, 6, 8, 10, 12, 14, 16, 18, 20]);\n\n        assert_eq!(list.len(), 10);\n        assert_eq!(list.into_iter().collect::<Vec<_>>(), vec![1, 3, 5, 7, 9, 11, 13, 15, 17, 19]);\n    }\n}\n\n#[test]\nfn drain_filter_drop_panic_leak() {\n    static mut DROPS: i32 = 0;\n\n    struct D(bool);\n\n    impl Drop for D {\n        fn drop(&mut self) {\n            unsafe {\n                DROPS += 1;\n            }\n\n            if self.0 {\n                panic!(\"panic in `drop`\");\n            }\n        }\n    }\n\n    let mut q = LinkedList::new();\n    q.push_back(D(false));\n    q.push_back(D(false));\n    q.push_back(D(false));\n    q.push_back(D(false));\n    q.push_back(D(false));\n    q.push_front(D(false));\n    q.push_front(D(true));\n    q.push_front(D(false));\n\n    catch_unwind(AssertUnwindSafe(|| drop(q.drain_filter(|_| true)))).ok();\n\n    assert_eq!(unsafe { DROPS }, 8);\n    assert!(q.is_empty());\n}\n\n#[test]\nfn drain_filter_pred_panic_leak() {\n    static mut DROPS: i32 = 0;\n\n    #[derive(Debug)]\n    struct D(u32);\n\n    impl Drop for D {\n        fn drop(&mut self) {\n            unsafe {\n                DROPS += 1;\n            }\n        }\n    }\n\n    let mut q = LinkedList::new();\n    q.push_back(D(3));\n    q.push_back(D(4));\n    q.push_back(D(5));\n    q.push_back(D(6));\n    q.push_back(D(7));\n    q.push_front(D(2));\n    q.push_front(D(1));\n    q.push_front(D(0));\n\n    catch_unwind(AssertUnwindSafe(|| {\n        drop(q.drain_filter(|item| if item.0 >= 2 { panic!() } else { true }))\n    }))\n    .ok();\n\n    assert_eq!(unsafe { DROPS }, 2); // 0 and 1\n    assert_eq!(q.len(), 6);\n}\n\n#[test]\nfn test_drop() {\n    static mut DROPS: i32 = 0;\n    struct Elem;\n    impl Drop for Elem {\n        fn drop(&mut self) {\n            unsafe {\n                DROPS += 1;\n            }\n        }\n    }\n\n    let mut ring = LinkedList::new();\n    ring.push_back(Elem);\n    ring.push_front(Elem);\n    ring.push_back(Elem);\n    ring.push_front(Elem);\n    drop(ring);\n\n    assert_eq!(unsafe { DROPS }, 4);\n}\n\n#[test]\nfn test_drop_with_pop() {\n    static mut DROPS: i32 = 0;\n    struct Elem;\n    impl Drop for Elem {\n        fn drop(&mut self) {\n            unsafe {\n                DROPS += 1;\n            }\n        }\n    }\n\n    let mut ring = LinkedList::new();\n    ring.push_back(Elem);\n    ring.push_front(Elem);\n    ring.push_back(Elem);\n    ring.push_front(Elem);\n\n    drop(ring.pop_back());\n    drop(ring.pop_front());\n    assert_eq!(unsafe { DROPS }, 2);\n\n    drop(ring);\n    assert_eq!(unsafe { DROPS }, 4);\n}\n\n#[test]\nfn test_drop_clear() {\n    static mut DROPS: i32 = 0;\n    struct Elem;\n    impl Drop for Elem {\n        fn drop(&mut self) {\n            unsafe {\n                DROPS += 1;\n            }\n        }\n    }\n\n    let mut ring = LinkedList::new();\n    ring.push_back(Elem);\n    ring.push_front(Elem);\n    ring.push_back(Elem);\n    ring.push_front(Elem);\n    ring.clear();\n    assert_eq!(unsafe { DROPS }, 4);\n\n    drop(ring);\n    assert_eq!(unsafe { DROPS }, 4);\n}\n\n#[test]\nfn test_drop_panic() {\n    static mut DROPS: i32 = 0;\n\n    struct D(bool);\n\n    impl Drop for D {\n        fn drop(&mut self) {\n            unsafe {\n                DROPS += 1;\n            }\n\n            if self.0 {\n                panic!(\"panic in `drop`\");\n            }\n        }\n    }\n\n    let mut q = LinkedList::new();\n    q.push_back(D(false));\n    q.push_back(D(false));\n    q.push_back(D(false));\n    q.push_back(D(false));\n    q.push_back(D(false));\n    q.push_front(D(false));\n    q.push_front(D(false));\n    q.push_front(D(true));\n\n    catch_unwind(move || drop(q)).ok();\n\n    assert_eq!(unsafe { DROPS }, 8);\n}\nuse std::any::Any;\nuse std::cell::RefCell;\nuse std::cmp::PartialEq;\nuse std::iter::TrustedLen;\nuse std::mem;\nuse std::sync::{Arc, Weak};\n\n#[test]\nfn uninhabited() {\n    enum Void {}\n    let mut a = Weak::<Void>::new();\n    a = a.clone();\n    assert!(a.upgrade().is_none());\n\n    let mut a: Weak<dyn Any> = a; // Unsizing\n    a = a.clone();\n    assert!(a.upgrade().is_none());\n}\n\n#[test]\nfn slice() {\n    let a: Arc<[u32; 3]> = Arc::new([3, 2, 1]);\n    let a: Arc<[u32]> = a; // Unsizing\n    let b: Arc<[u32]> = Arc::from(&[3, 2, 1][..]); // Conversion\n    assert_eq!(a, b);\n\n    // Exercise is_dangling() with a DST\n    let mut a = Arc::downgrade(&a);\n    a = a.clone();\n    assert!(a.upgrade().is_some());\n}\n\n#[test]\nfn trait_object() {\n    let a: Arc<u32> = Arc::new(4);\n    let a: Arc<dyn Any> = a; // Unsizing\n\n    // Exercise is_dangling() with a DST\n    let mut a = Arc::downgrade(&a);\n    a = a.clone();\n    assert!(a.upgrade().is_some());\n\n    let mut b = Weak::<u32>::new();\n    b = b.clone();\n    assert!(b.upgrade().is_none());\n    let mut b: Weak<dyn Any> = b; // Unsizing\n    b = b.clone();\n    assert!(b.upgrade().is_none());\n}\n\n#[test]\nfn float_nan_ne() {\n    let x = Arc::new(f32::NAN);\n    assert!(x != x);\n    assert!(!(x == x));\n}\n\n#[test]\nfn partial_eq() {\n    struct TestPEq(RefCell<usize>);\n    impl PartialEq for TestPEq {\n        fn eq(&self, other: &TestPEq) -> bool {\n            *self.0.borrow_mut() += 1;\n            *other.0.borrow_mut() += 1;\n            true\n        }\n    }\n    let x = Arc::new(TestPEq(RefCell::new(0)));\n    assert!(x == x);\n    assert!(!(x != x));\n    assert_eq!(*x.0.borrow(), 4);\n}\n\n#[test]\nfn eq() {\n    #[derive(Eq)]\n    struct TestEq(RefCell<usize>);\n    impl PartialEq for TestEq {\n        fn eq(&self, other: &TestEq) -> bool {\n            *self.0.borrow_mut() += 1;\n            *other.0.borrow_mut() += 1;\n            true\n        }\n    }\n    let x = Arc::new(TestEq(RefCell::new(0)));\n    assert!(x == x);\n    assert!(!(x != x));\n    assert_eq!(*x.0.borrow(), 0);\n}\n\n// The test code below is identical to that in `rc.rs`.\n// For better maintainability we therefore define this type alias.\ntype Rc<T> = Arc<T>;\n\nconst SHARED_ITER_MAX: u16 = 100;\n\nfn assert_trusted_len<I: TrustedLen>(_: &I) {}\n\n#[test]\nfn shared_from_iter_normal() {\n    // Exercise the base implementation for non-`TrustedLen` iterators.\n    {\n        // `Filter` is never `TrustedLen` since we don't\n        // know statically how many elements will be kept:\n        let iter = (0..SHARED_ITER_MAX).filter(|x| x % 2 == 0).map(Box::new);\n\n        // Collecting into a `Vec<T>` or `Rc<[T]>` should make no difference:\n        let vec = iter.clone().collect::<Vec<_>>();\n        let rc = iter.collect::<Rc<[_]>>();\n        assert_eq!(&*vec, &*rc);\n\n        // Clone a bit and let these get dropped.\n        {\n            let _rc_2 = rc.clone();\n            let _rc_3 = rc.clone();\n            let _rc_4 = Rc::downgrade(&_rc_3);\n        }\n    } // Drop what hasn't been here.\n}\n\n#[test]\nfn shared_from_iter_trustedlen_normal() {\n    // Exercise the `TrustedLen` implementation under normal circumstances\n    // where `size_hint()` matches `(_, Some(exact_len))`.\n    {\n        let iter = (0..SHARED_ITER_MAX).map(Box::new);\n        assert_trusted_len(&iter);\n\n        // Collecting into a `Vec<T>` or `Rc<[T]>` should make no difference:\n        let vec = iter.clone().collect::<Vec<_>>();\n        let rc = iter.collect::<Rc<[_]>>();\n        assert_eq!(&*vec, &*rc);\n        assert_eq!(mem::size_of::<Box<u16>>() * SHARED_ITER_MAX as usize, mem::size_of_val(&*rc));\n\n        // Clone a bit and let these get dropped.\n        {\n            let _rc_2 = rc.clone();\n            let _rc_3 = rc.clone();\n            let _rc_4 = Rc::downgrade(&_rc_3);\n        }\n    } // Drop what hasn't been here.\n\n    // Try a ZST to make sure it is handled well.\n    {\n        let iter = (0..SHARED_ITER_MAX).map(drop);\n        let vec = iter.clone().collect::<Vec<_>>();\n        let rc = iter.collect::<Rc<[_]>>();\n        assert_eq!(&*vec, &*rc);\n        assert_eq!(0, mem::size_of_val(&*rc));\n        {\n            let _rc_2 = rc.clone();\n            let _rc_3 = rc.clone();\n            let _rc_4 = Rc::downgrade(&_rc_3);\n        }\n    }\n}\n\n#[test]\n#[should_panic = \"I've almost got 99 problems.\"]\nfn shared_from_iter_trustedlen_panic() {\n    // Exercise the `TrustedLen` implementation when `size_hint()` matches\n    // `(_, Some(exact_len))` but where `.next()` drops before the last iteration.\n    let iter = (0..SHARED_ITER_MAX).map(|val| match val {\n        98 => panic!(\"I've almost got 99 problems.\"),\n        _ => Box::new(val),\n    });\n    assert_trusted_len(&iter);\n    let _ = iter.collect::<Rc<[_]>>();\n\n    panic!(\"I am unreachable.\");\n}\n\n#[test]\nfn shared_from_iter_trustedlen_no_fuse() {\n    // Exercise the `TrustedLen` implementation when `size_hint()` matches\n    // `(_, Some(exact_len))` but where the iterator does not behave in a fused manner.\n    struct Iter(std::vec::IntoIter<Option<Box<u8>>>);\n\n    unsafe impl TrustedLen for Iter {}\n\n    impl Iterator for Iter {\n        fn size_hint(&self) -> (usize, Option<usize>) {\n            (2, Some(2))\n        }\n\n        type Item = Box<u8>;\n\n        fn next(&mut self) -> Option<Self::Item> {\n            self.0.next().flatten()\n        }\n    }\n\n    let vec = vec![Some(Box::new(42)), Some(Box::new(24)), None, Some(Box::new(12))];\n    let iter = Iter(vec.into_iter());\n    assert_trusted_len(&iter);\n    assert_eq!(&[Box::new(42), Box::new(24)], &*iter.collect::<Rc<[_]>>());\n}\nuse std::borrow::Cow;\nuse std::cmp::Ordering::{Equal, Greater, Less};\nuse std::str::{from_utf8, from_utf8_unchecked};\n\n#[test]\nfn test_le() {\n    assert!(\"\" <= \"\");\n    assert!(\"\" <= \"foo\");\n    assert!(\"foo\" <= \"foo\");\n    assert_ne!(\"foo\", \"bar\");\n}\n\n#[test]\nfn test_find() {\n    assert_eq!(\"hello\".find('l'), Some(2));\n    assert_eq!(\"hello\".find(|c: char| c == 'o'), Some(4));\n    assert!(\"hello\".find('x').is_none());\n    assert!(\"hello\".find(|c: char| c == 'x').is_none());\n    assert_eq!(\"ประเทศไทย中华Việt Nam\".find('华'), Some(30));\n    assert_eq!(\"ประเทศไทย中华Việt Nam\".find(|c: char| c == '华'), Some(30));\n}\n\n#[test]\nfn test_rfind() {\n    assert_eq!(\"hello\".rfind('l'), Some(3));\n    assert_eq!(\"hello\".rfind(|c: char| c == 'o'), Some(4));\n    assert!(\"hello\".rfind('x').is_none());\n    assert!(\"hello\".rfind(|c: char| c == 'x').is_none());\n    assert_eq!(\"ประเทศไทย中华Việt Nam\".rfind('华'), Some(30));\n    assert_eq!(\"ประเทศไทย中华Việt Nam\".rfind(|c: char| c == '华'), Some(30));\n}\n\n#[test]\nfn test_collect() {\n    let empty = \"\";\n    let s: String = empty.chars().collect();\n    assert_eq!(empty, s);\n    let data = \"ประเทศไทย中\";\n    let s: String = data.chars().collect();\n    assert_eq!(data, s);\n}\n\n#[test]\nfn test_into_bytes() {\n    let data = String::from(\"asdf\");\n    let buf = data.into_bytes();\n    assert_eq!(buf, b\"asdf\");\n}\n\n#[test]\nfn test_find_str() {\n    // byte positions\n    assert_eq!(\"\".find(\"\"), Some(0));\n    assert!(\"banana\".find(\"apple pie\").is_none());\n\n    let data = \"abcabc\";\n    assert_eq!(data[0..6].find(\"ab\"), Some(0));\n    assert_eq!(data[2..6].find(\"ab\"), Some(3 - 2));\n    assert!(data[2..4].find(\"ab\").is_none());\n\n    let string = \"ประเทศไทย中华Việt Nam\";\n    let mut data = String::from(string);\n    data.push_str(string);\n    assert!(data.find(\"ไท华\").is_none());\n    assert_eq!(data[0..43].find(\"\"), Some(0));\n    assert_eq!(data[6..43].find(\"\"), Some(6 - 6));\n\n    assert_eq!(data[0..43].find(\"ประ\"), Some(0));\n    assert_eq!(data[0..43].find(\"ทศไ\"), Some(12));\n    assert_eq!(data[0..43].find(\"ย中\"), Some(24));\n    assert_eq!(data[0..43].find(\"iệt\"), Some(34));\n    assert_eq!(data[0..43].find(\"Nam\"), Some(40));\n\n    assert_eq!(data[43..86].find(\"ประ\"), Some(43 - 43));\n    assert_eq!(data[43..86].find(\"ทศไ\"), Some(55 - 43));\n    assert_eq!(data[43..86].find(\"ย中\"), Some(67 - 43));\n    assert_eq!(data[43..86].find(\"iệt\"), Some(77 - 43));\n    assert_eq!(data[43..86].find(\"Nam\"), Some(83 - 43));\n\n    // find every substring -- assert that it finds it, or an earlier occurrence.\n    let string = \"Việt Namacbaabcaabaaba\";\n    for (i, ci) in string.char_indices() {\n        let ip = i + ci.len_utf8();\n        for j in string[ip..].char_indices().map(|(i, _)| i).chain(Some(string.len() - ip)) {\n            let pat = &string[i..ip + j];\n            assert!(match string.find(pat) {\n                None => false,\n                Some(x) => x <= i,\n            });\n            assert!(match string.rfind(pat) {\n                None => false,\n                Some(x) => x >= i,\n            });\n        }\n    }\n}\n\nfn s(x: &str) -> String {\n    x.to_string()\n}\n\nmacro_rules! test_concat {\n    ($expected: expr, $string: expr) => {{\n        let s: String = $string.concat();\n        assert_eq!($expected, s);\n    }};\n}\n\n#[test]\nfn test_concat_for_different_types() {\n    test_concat!(\"ab\", vec![s(\"a\"), s(\"b\")]);\n    test_concat!(\"ab\", vec![\"a\", \"b\"]);\n}\n\n#[test]\nfn test_concat_for_different_lengths() {\n    let empty: &[&str] = &[];\n    test_concat!(\"\", empty);\n    test_concat!(\"a\", [\"a\"]);\n    test_concat!(\"ab\", [\"a\", \"b\"]);\n    test_concat!(\"abc\", [\"\", \"a\", \"bc\"]);\n}\n\nmacro_rules! test_join {\n    ($expected: expr, $string: expr, $delim: expr) => {{\n        let s = $string.join($delim);\n        assert_eq!($expected, s);\n    }};\n}\n\n#[test]\nfn test_join_for_different_types() {\n    test_join!(\"a-b\", [\"a\", \"b\"], \"-\");\n    let hyphen = \"-\".to_string();\n    test_join!(\"a-b\", [s(\"a\"), s(\"b\")], &*hyphen);\n    test_join!(\"a-b\", vec![\"a\", \"b\"], &*hyphen);\n    test_join!(\"a-b\", &*vec![\"a\", \"b\"], \"-\");\n    test_join!(\"a-b\", vec![s(\"a\"), s(\"b\")], \"-\");\n}\n\n#[test]\nfn test_join_for_different_lengths() {\n    let empty: &[&str] = &[];\n    test_join!(\"\", empty, \"-\");\n    test_join!(\"a\", [\"a\"], \"-\");\n    test_join!(\"a-b\", [\"a\", \"b\"], \"-\");\n    test_join!(\"-a-bc\", [\"\", \"a\", \"bc\"], \"-\");\n}\n\n// join has fast paths for small separators up to 4 bytes\n// this tests the slow paths.\n#[test]\nfn test_join_for_different_lengths_with_long_separator() {\n    assert_eq!(\"～～～～～\".len(), 15);\n\n    let empty: &[&str] = &[];\n    test_join!(\"\", empty, \"～～～～～\");\n    test_join!(\"a\", [\"a\"], \"～～～～～\");\n    test_join!(\"a～～～～～b\", [\"a\", \"b\"], \"～～～～～\");\n    test_join!(\"～～～～～a～～～～～bc\", [\"\", \"a\", \"bc\"], \"～～～～～\");\n}\n\n#[test]\nfn test_join_isue_80335() {\n    use core::{borrow::Borrow, cell::Cell};\n\n    struct WeirdBorrow {\n        state: Cell<bool>,\n    }\n\n    impl Default for WeirdBorrow {\n        fn default() -> Self {\n            WeirdBorrow { state: Cell::new(false) }\n        }\n    }\n\n    impl Borrow<str> for WeirdBorrow {\n        fn borrow(&self) -> &str {\n            let state = self.state.get();\n            if state {\n                \"0\"\n            } else {\n                self.state.set(true);\n                \"123456\"\n            }\n        }\n    }\n\n    let arr: [WeirdBorrow; 3] = Default::default();\n    test_join!(\"0-0-0\", arr, \"-\");\n}\n\n#[test]\n#[cfg_attr(miri, ignore)] // Miri is too slow\nfn test_unsafe_slice() {\n    assert_eq!(\"ab\", unsafe { \"abc\".get_unchecked(0..2) });\n    assert_eq!(\"bc\", unsafe { \"abc\".get_unchecked(1..3) });\n    assert_eq!(\"\", unsafe { \"abc\".get_unchecked(1..1) });\n    fn a_million_letter_a() -> String {\n        let mut i = 0;\n        let mut rs = String::new();\n        while i < 100000 {\n            rs.push_str(\"aaaaaaaaaa\");\n            i += 1;\n        }\n        rs\n    }\n    fn half_a_million_letter_a() -> String {\n        let mut i = 0;\n        let mut rs = String::new();\n        while i < 100000 {\n            rs.push_str(\"aaaaa\");\n            i += 1;\n        }\n        rs\n    }\n    let letters = a_million_letter_a();\n    assert_eq!(half_a_million_letter_a(), unsafe { letters.get_unchecked(0..500000) });\n}\n\n#[test]\nfn test_starts_with() {\n    assert!(\"\".starts_with(\"\"));\n    assert!(\"abc\".starts_with(\"\"));\n    assert!(\"abc\".starts_with(\"a\"));\n    assert!(!\"a\".starts_with(\"abc\"));\n    assert!(!\"\".starts_with(\"abc\"));\n    assert!(!\"ödd\".starts_with(\"-\"));\n    assert!(\"ödd\".starts_with(\"öd\"));\n}\n\n#[test]\nfn test_ends_with() {\n    assert!(\"\".ends_with(\"\"));\n    assert!(\"abc\".ends_with(\"\"));\n    assert!(\"abc\".ends_with(\"c\"));\n    assert!(!\"a\".ends_with(\"abc\"));\n    assert!(!\"\".ends_with(\"abc\"));\n    assert!(!\"ddö\".ends_with(\"-\"));\n    assert!(\"ddö\".ends_with(\"dö\"));\n}\n\n#[test]\nfn test_is_empty() {\n    assert!(\"\".is_empty());\n    assert!(!\"a\".is_empty());\n}\n\n#[test]\nfn test_replacen() {\n    assert_eq!(\"\".replacen('a', \"b\", 5), \"\");\n    assert_eq!(\"acaaa\".replacen(\"a\", \"b\", 3), \"bcbba\");\n    assert_eq!(\"aaaa\".replacen(\"a\", \"b\", 0), \"aaaa\");\n\n    let test = \"test\";\n    assert_eq!(\" test test \".replacen(test, \"toast\", 3), \" toast toast \");\n    assert_eq!(\" test test \".replacen(test, \"toast\", 0), \" test test \");\n    assert_eq!(\" test test \".replacen(test, \"\", 5), \"   \");\n\n    assert_eq!(\"qwer123zxc789\".replacen(char::is_numeric, \"\", 3), \"qwerzxc789\");\n}\n\n#[test]\nfn test_replace() {\n    let a = \"a\";\n    assert_eq!(\"\".replace(a, \"b\"), \"\");\n    assert_eq!(\"a\".replace(a, \"b\"), \"b\");\n    assert_eq!(\"ab\".replace(a, \"b\"), \"bb\");\n    let test = \"test\";\n    assert_eq!(\" test test \".replace(test, \"toast\"), \" toast toast \");\n    assert_eq!(\" test test \".replace(test, \"\"), \"   \");\n}\n\n#[test]\nfn test_replace_2a() {\n    let data = \"ประเทศไทย中华\";\n    let repl = \"دولة الكويت\";\n\n    let a = \"ประเ\";\n    let a2 = \"دولة الكويتทศไทย中华\";\n    assert_eq!(data.replace(a, repl), a2);\n}\n\n#[test]\nfn test_replace_2b() {\n    let data = \"ประเทศไทย中华\";\n    let repl = \"دولة الكويت\";\n\n    let b = \"ะเ\";\n    let b2 = \"ปรدولة الكويتทศไทย中华\";\n    assert_eq!(data.replace(b, repl), b2);\n}\n\n#[test]\nfn test_replace_2c() {\n    let data = \"ประเทศไทย中华\";\n    let repl = \"دولة الكويت\";\n\n    let c = \"中华\";\n    let c2 = \"ประเทศไทยدولة الكويت\";\n    assert_eq!(data.replace(c, repl), c2);\n}\n\n#[test]\nfn test_replace_2d() {\n    let data = \"ประเทศไทย中华\";\n    let repl = \"دولة الكويت\";\n\n    let d = \"ไท华\";\n    assert_eq!(data.replace(d, repl), data);\n}\n\n#[test]\nfn test_replace_pattern() {\n    let data = \"abcdαβγδabcdαβγδ\";\n    assert_eq!(data.replace(\"dαβ\", \"😺😺😺\"), \"abc😺😺😺γδabc😺😺😺γδ\");\n    assert_eq!(data.replace('γ', \"😺😺😺\"), \"abcdαβ😺😺😺δabcdαβ😺😺😺δ\");\n    assert_eq!(data.replace(&['a', 'γ'] as &[_], \"😺😺😺\"), \"😺😺😺bcdαβ😺😺😺δ😺😺😺bcdαβ😺😺😺δ\");\n    assert_eq!(data.replace(|c| c == 'γ', \"😺😺😺\"), \"abcdαβ😺😺😺δabcdαβ😺😺😺δ\");\n}\n\n// The current implementation of SliceIndex fails to handle methods\n// orthogonally from range types; therefore, it is worth testing\n// all of the indexing operations on each input.\nmod slice_index {\n    // Test a slicing operation **that should succeed,**\n    // testing it on all of the indexing methods.\n    //\n    // This is not suitable for testing failure on invalid inputs.\n    macro_rules! assert_range_eq {\n        ($s:expr, $range:expr, $expected:expr) => {\n            let mut s: String = $s.to_owned();\n            let mut expected: String = $expected.to_owned();\n            {\n                let s: &str = &s;\n                let expected: &str = &expected;\n\n                assert_eq!(&s[$range], expected, \"(in assertion for: index)\");\n                assert_eq!(s.get($range), Some(expected), \"(in assertion for: get)\");\n                unsafe {\n                    assert_eq!(\n                        s.get_unchecked($range),\n                        expected,\n                        \"(in assertion for: get_unchecked)\",\n                    );\n                }\n            }\n            {\n                let s: &mut str = &mut s;\n                let expected: &mut str = &mut expected;\n\n                assert_eq!(&mut s[$range], expected, \"(in assertion for: index_mut)\",);\n                assert_eq!(\n                    s.get_mut($range),\n                    Some(&mut expected[..]),\n                    \"(in assertion for: get_mut)\",\n                );\n                unsafe {\n                    assert_eq!(\n                        s.get_unchecked_mut($range),\n                        expected,\n                        \"(in assertion for: get_unchecked_mut)\",\n                    );\n                }\n            }\n        };\n    }\n\n    // Make sure the macro can actually detect bugs,\n    // because if it can't, then what are we even doing here?\n    //\n    // (Be aware this only demonstrates the ability to detect bugs\n    //  in the FIRST method that panics, as the macro is not designed\n    //  to be used in `should_panic`)\n    #[test]\n    #[should_panic(expected = \"out of bounds\")]\n    fn assert_range_eq_can_fail_by_panic() {\n        assert_range_eq!(\"abc\", 0..5, \"abc\");\n    }\n\n    // (Be aware this only demonstrates the ability to detect bugs\n    //  in the FIRST method it calls, as the macro is not designed\n    //  to be used in `should_panic`)\n    #[test]\n    #[should_panic(expected = \"==\")]\n    fn assert_range_eq_can_fail_by_inequality() {\n        assert_range_eq!(\"abc\", 0..2, \"abc\");\n    }\n\n    // Generates test cases for bad index operations.\n    //\n    // This generates `should_panic` test cases for Index/IndexMut\n    // and `None` test cases for get/get_mut.\n    macro_rules! panic_cases {\n        ($(\n            in mod $case_name:ident {\n                data: $data:expr;\n\n                // optional:\n                //\n                // a similar input for which DATA[input] succeeds, and the corresponding\n                // output str. This helps validate \"critical points\" where an input range\n                // straddles the boundary between valid and invalid.\n                // (such as the input `len..len`, which is just barely valid)\n                $(\n                    good: data[$good:expr] == $output:expr;\n                )*\n\n                bad: data[$bad:expr];\n                message: $expect_msg:expr; // must be a literal\n            }\n        )*) => {$(\n            mod $case_name {\n                #[test]\n                fn pass() {\n                    let mut v: String = $data.into();\n\n                    $( assert_range_eq!(v, $good, $output); )*\n\n                    {\n                        let v: &str = &v;\n                        assert_eq!(v.get($bad), None, \"(in None assertion for get)\");\n                    }\n\n                    {\n                        let v: &mut str = &mut v;\n                        assert_eq!(v.get_mut($bad), None, \"(in None assertion for get_mut)\");\n                    }\n                }\n\n                #[test]\n                #[should_panic(expected = $expect_msg)]\n                fn index_fail() {\n                    let v: String = $data.into();\n                    let v: &str = &v;\n                    let _v = &v[$bad];\n                }\n\n                #[test]\n                #[should_panic(expected = $expect_msg)]\n                fn index_mut_fail() {\n                    let mut v: String = $data.into();\n                    let v: &mut str = &mut v;\n                    let _v = &mut v[$bad];\n                }\n            }\n        )*};\n    }\n\n    #[test]\n    fn simple_ascii() {\n        assert_range_eq!(\"abc\", .., \"abc\");\n\n        assert_range_eq!(\"abc\", 0..2, \"ab\");\n        assert_range_eq!(\"abc\", 0..=1, \"ab\");\n        assert_range_eq!(\"abc\", ..2, \"ab\");\n        assert_range_eq!(\"abc\", ..=1, \"ab\");\n\n        assert_range_eq!(\"abc\", 1..3, \"bc\");\n        assert_range_eq!(\"abc\", 1..=2, \"bc\");\n        assert_range_eq!(\"abc\", 1..1, \"\");\n        assert_range_eq!(\"abc\", 1..=0, \"\");\n    }\n\n    #[test]\n    fn simple_unicode() {\n        // 日本\n        assert_range_eq!(\"\\u{65e5}\\u{672c}\", .., \"\\u{65e5}\\u{672c}\");\n\n        assert_range_eq!(\"\\u{65e5}\\u{672c}\", 0..3, \"\\u{65e5}\");\n        assert_range_eq!(\"\\u{65e5}\\u{672c}\", 0..=2, \"\\u{65e5}\");\n        assert_range_eq!(\"\\u{65e5}\\u{672c}\", ..3, \"\\u{65e5}\");\n        assert_range_eq!(\"\\u{65e5}\\u{672c}\", ..=2, \"\\u{65e5}\");\n\n        assert_range_eq!(\"\\u{65e5}\\u{672c}\", 3..6, \"\\u{672c}\");\n        assert_range_eq!(\"\\u{65e5}\\u{672c}\", 3..=5, \"\\u{672c}\");\n        assert_range_eq!(\"\\u{65e5}\\u{672c}\", 3.., \"\\u{672c}\");\n\n        let data = \"ประเทศไทย中华\";\n        assert_range_eq!(data, 0..3, \"ป\");\n        assert_range_eq!(data, 3..6, \"ร\");\n        assert_range_eq!(data, 3..3, \"\");\n        assert_range_eq!(data, 30..33, \"华\");\n\n        /*0: 中\n         3: 华\n         6: V\n         7: i\n         8: ệ\n        11: t\n        12:\n        13: N\n        14: a\n        15: m */\n        let ss = \"中华Việt Nam\";\n        assert_range_eq!(ss, 3..6, \"华\");\n        assert_range_eq!(ss, 6..16, \"Việt Nam\");\n        assert_range_eq!(ss, 6..=15, \"Việt Nam\");\n        assert_range_eq!(ss, 6.., \"Việt Nam\");\n\n        assert_range_eq!(ss, 0..3, \"中\");\n        assert_range_eq!(ss, 3..7, \"华V\");\n        assert_range_eq!(ss, 3..=6, \"华V\");\n        assert_range_eq!(ss, 3..3, \"\");\n        assert_range_eq!(ss, 3..=2, \"\");\n    }\n\n    #[test]\n    #[cfg_attr(target_os = \"emscripten\", ignore)] // hits an OOM\n    #[cfg_attr(miri, ignore)] // Miri is too slow\n    fn simple_big() {\n        fn a_million_letter_x() -> String {\n            let mut i = 0;\n            let mut rs = String::new();\n            while i < 100000 {\n                rs.push_str(\"华华华华华华华华华华\");\n                i += 1;\n            }\n            rs\n        }\n        fn half_a_million_letter_x() -> String {\n            let mut i = 0;\n            let mut rs = String::new();\n            while i < 100000 {\n                rs.push_str(\"华华华华华\");\n                i += 1;\n            }\n            rs\n        }\n        let letters = a_million_letter_x();\n        assert_range_eq!(letters, 0..3 * 500000, half_a_million_letter_x());\n    }\n\n    #[test]\n    #[should_panic]\n    fn test_slice_fail() {\n        &\"中华Việt Nam\"[0..2];\n    }\n\n    panic_cases! {\n        in mod rangefrom_len {\n            data: \"abcdef\";\n            good: data[6..] == \"\";\n            bad: data[7..];\n            message: \"out of bounds\";\n        }\n\n        in mod rangeto_len {\n            data: \"abcdef\";\n            good: data[..6] == \"abcdef\";\n            bad: data[..7];\n            message: \"out of bounds\";\n        }\n\n        in mod rangetoinclusive_len {\n            data: \"abcdef\";\n            good: data[..=5] == \"abcdef\";\n            bad: data[..=6];\n            message: \"out of bounds\";\n        }\n\n        in mod rangeinclusive_len {\n            data: \"abcdef\";\n            good: data[0..=5] == \"abcdef\";\n            bad: data[0..=6];\n            message: \"out of bounds\";\n        }\n\n        in mod range_len_len {\n            data: \"abcdef\";\n            good: data[6..6] == \"\";\n            bad: data[7..7];\n            message: \"out of bounds\";\n        }\n\n        in mod rangeinclusive_len_len {\n            data: \"abcdef\";\n            good: data[6..=5] == \"\";\n            bad: data[7..=6];\n            message: \"out of bounds\";\n        }\n    }\n\n    panic_cases! {\n        in mod rangeinclusive_exhausted {\n            data: \"abcdef\";\n\n            good: data[0..=5] == \"abcdef\";\n            good: data[{\n                let mut iter = 0..=5;\n                iter.by_ref().count(); // exhaust it\n                iter\n            }] == \"\";\n\n            // 0..=6 is out of bounds before exhaustion, so it\n            // stands to reason that it still would be after.\n            bad: data[{\n                let mut iter = 0..=6;\n                iter.by_ref().count(); // exhaust it\n                iter\n            }];\n            message: \"out of bounds\";\n        }\n    }\n\n    panic_cases! {\n        in mod range_neg_width {\n            data: \"abcdef\";\n            good: data[4..4] == \"\";\n            bad: data[4..3];\n            message: \"begin <= end (4 <= 3)\";\n        }\n\n        in mod rangeinclusive_neg_width {\n            data: \"abcdef\";\n            good: data[4..=3] == \"\";\n            bad: data[4..=2];\n            message: \"begin <= end (4 <= 3)\";\n        }\n    }\n\n    mod overflow {\n        panic_cases! {\n            in mod rangeinclusive {\n                data: \"hello\";\n                // note: using 0 specifically ensures that the result of overflowing is 0..0,\n                //       so that `get` doesn't simply return None for the wrong reason.\n                bad: data[0..=usize::MAX];\n                message: \"maximum usize\";\n            }\n\n            in mod rangetoinclusive {\n                data: \"hello\";\n                bad: data[..=usize::MAX];\n                message: \"maximum usize\";\n            }\n        }\n    }\n\n    mod boundary {\n        const DATA: &str = \"abcαβγ\";\n\n        const BAD_START: usize = 4;\n        const GOOD_START: usize = 3;\n        const BAD_END: usize = 6;\n        const GOOD_END: usize = 7;\n        const BAD_END_INCL: usize = BAD_END - 1;\n        const GOOD_END_INCL: usize = GOOD_END - 1;\n\n        // it is especially important to test all of the different range types here\n        // because some of the logic may be duplicated as part of micro-optimizations\n        // to dodge unicode boundary checks on half-ranges.\n        panic_cases! {\n            in mod range_1 {\n                data: super::DATA;\n                bad: data[super::BAD_START..super::GOOD_END];\n                message:\n                    \"byte index 4 is not a char boundary; it is inside 'α' (bytes 3..5) of\";\n            }\n\n            in mod range_2 {\n                data: super::DATA;\n                bad: data[super::GOOD_START..super::BAD_END];\n                message:\n                    \"byte index 6 is not a char boundary; it is inside 'β' (bytes 5..7) of\";\n            }\n\n            in mod rangefrom {\n                data: super::DATA;\n                bad: data[super::BAD_START..];\n                message:\n                    \"byte index 4 is not a char boundary; it is inside 'α' (bytes 3..5) of\";\n            }\n\n            in mod rangeto {\n                data: super::DATA;\n                bad: data[..super::BAD_END];\n                message:\n                    \"byte index 6 is not a char boundary; it is inside 'β' (bytes 5..7) of\";\n            }\n\n            in mod rangeinclusive_1 {\n                data: super::DATA;\n                bad: data[super::BAD_START..=super::GOOD_END_INCL];\n                message:\n                    \"byte index 4 is not a char boundary; it is inside 'α' (bytes 3..5) of\";\n            }\n\n            in mod rangeinclusive_2 {\n                data: super::DATA;\n                bad: data[super::GOOD_START..=super::BAD_END_INCL];\n                message:\n                    \"byte index 6 is not a char boundary; it is inside 'β' (bytes 5..7) of\";\n            }\n\n            in mod rangetoinclusive {\n                data: super::DATA;\n                bad: data[..=super::BAD_END_INCL];\n                message:\n                    \"byte index 6 is not a char boundary; it is inside 'β' (bytes 5..7) of\";\n            }\n        }\n    }\n\n    const LOREM_PARAGRAPH: &str = \"\\\n    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse quis lorem \\\n    sit amet dolor ultricies condimentum. Praesent iaculis purus elit, ac malesuada \\\n    quam malesuada in. Duis sed orci eros. Suspendisse sit amet magna mollis, mollis \\\n    nunc luctus, imperdiet mi. Integer fringilla non sem ut lacinia. Fusce varius \\\n    tortor a risus porttitor hendrerit. Morbi mauris dui, ultricies nec tempus vel, \\\n    gravida nec quam.\";\n\n    // check the panic includes the prefix of the sliced string\n    #[test]\n    #[should_panic(expected = \"byte index 1024 is out of bounds of `Lorem ipsum dolor sit amet\")]\n    fn test_slice_fail_truncated_1() {\n        &LOREM_PARAGRAPH[..1024];\n    }\n    // check the truncation in the panic message\n    #[test]\n    #[should_panic(expected = \"luctus, im`[...]\")]\n    fn test_slice_fail_truncated_2() {\n        &LOREM_PARAGRAPH[..1024];\n    }\n}\n\n#[test]\nfn test_str_slice_rangetoinclusive_ok() {\n    let s = \"abcαβγ\";\n    assert_eq!(&s[..=2], \"abc\");\n    assert_eq!(&s[..=4], \"abcα\");\n}\n\n#[test]\n#[should_panic]\nfn test_str_slice_rangetoinclusive_notok() {\n    let s = \"abcαβγ\";\n    &s[..=3];\n}\n\n#[test]\nfn test_str_slicemut_rangetoinclusive_ok() {\n    let mut s = \"abcαβγ\".to_owned();\n    let s: &mut str = &mut s;\n    assert_eq!(&mut s[..=2], \"abc\");\n    assert_eq!(&mut s[..=4], \"abcα\");\n}\n\n#[test]\n#[should_panic]\nfn test_str_slicemut_rangetoinclusive_notok() {\n    let mut s = \"abcαβγ\".to_owned();\n    let s: &mut str = &mut s;\n    &mut s[..=3];\n}\n\n#[test]\nfn test_is_char_boundary() {\n    let s = \"ศไทย中华Việt Nam β-release 🐱123\";\n    assert!(s.is_char_boundary(0));\n    assert!(s.is_char_boundary(s.len()));\n    assert!(!s.is_char_boundary(s.len() + 1));\n    for (i, ch) in s.char_indices() {\n        // ensure character locations are boundaries and continuation bytes are not\n        assert!(s.is_char_boundary(i), \"{} is a char boundary in {:?}\", i, s);\n        for j in 1..ch.len_utf8() {\n            assert!(\n                !s.is_char_boundary(i + j),\n                \"{} should not be a char boundary in {:?}\",\n                i + j,\n                s\n            );\n        }\n    }\n}\n\n#[test]\nfn test_trim_start_matches() {\n    let v: &[char] = &[];\n    assert_eq!(\" *** foo *** \".trim_start_matches(v), \" *** foo *** \");\n    let chars: &[char] = &['*', ' '];\n    assert_eq!(\" *** foo *** \".trim_start_matches(chars), \"foo *** \");\n    assert_eq!(\" ***  *** \".trim_start_matches(chars), \"\");\n    assert_eq!(\"foo *** \".trim_start_matches(chars), \"foo *** \");\n\n    assert_eq!(\"11foo1bar11\".trim_start_matches('1'), \"foo1bar11\");\n    let chars: &[char] = &['1', '2'];\n    assert_eq!(\"12foo1bar12\".trim_start_matches(chars), \"foo1bar12\");\n    assert_eq!(\"123foo1bar123\".trim_start_matches(|c: char| c.is_numeric()), \"foo1bar123\");\n}\n\n#[test]\nfn test_trim_end_matches() {\n    let v: &[char] = &[];\n    assert_eq!(\" *** foo *** \".trim_end_matches(v), \" *** foo *** \");\n    let chars: &[char] = &['*', ' '];\n    assert_eq!(\" *** foo *** \".trim_end_matches(chars), \" *** foo\");\n    assert_eq!(\" ***  *** \".trim_end_matches(chars), \"\");\n    assert_eq!(\" *** foo\".trim_end_matches(chars), \" *** foo\");\n\n    assert_eq!(\"11foo1bar11\".trim_end_matches('1'), \"11foo1bar\");\n    let chars: &[char] = &['1', '2'];\n    assert_eq!(\"12foo1bar12\".trim_end_matches(chars), \"12foo1bar\");\n    assert_eq!(\"123foo1bar123\".trim_end_matches(|c: char| c.is_numeric()), \"123foo1bar\");\n}\n\n#[test]\nfn test_trim_matches() {\n    let v: &[char] = &[];\n    assert_eq!(\" *** foo *** \".trim_matches(v), \" *** foo *** \");\n    let chars: &[char] = &['*', ' '];\n    assert_eq!(\" *** foo *** \".trim_matches(chars), \"foo\");\n    assert_eq!(\" ***  *** \".trim_matches(chars), \"\");\n    assert_eq!(\"foo\".trim_matches(chars), \"foo\");\n\n    assert_eq!(\"11foo1bar11\".trim_matches('1'), \"foo1bar\");\n    let chars: &[char] = &['1', '2'];\n    assert_eq!(\"12foo1bar12\".trim_matches(chars), \"foo1bar\");\n    assert_eq!(\"123foo1bar123\".trim_matches(|c: char| c.is_numeric()), \"foo1bar\");\n}\n\n#[test]\nfn test_trim_start() {\n    assert_eq!(\"\".trim_start(), \"\");\n    assert_eq!(\"a\".trim_start(), \"a\");\n    assert_eq!(\"    \".trim_start(), \"\");\n    assert_eq!(\"     blah\".trim_start(), \"blah\");\n    assert_eq!(\"   \\u{3000}  wut\".trim_start(), \"wut\");\n    assert_eq!(\"hey \".trim_start(), \"hey \");\n}\n\n#[test]\nfn test_trim_end() {\n    assert_eq!(\"\".trim_end(), \"\");\n    assert_eq!(\"a\".trim_end(), \"a\");\n    assert_eq!(\"    \".trim_end(), \"\");\n    assert_eq!(\"blah     \".trim_end(), \"blah\");\n    assert_eq!(\"wut   \\u{3000}  \".trim_end(), \"wut\");\n    assert_eq!(\" hey\".trim_end(), \" hey\");\n}\n\n#[test]\nfn test_trim() {\n    assert_eq!(\"\".trim(), \"\");\n    assert_eq!(\"a\".trim(), \"a\");\n    assert_eq!(\"    \".trim(), \"\");\n    assert_eq!(\"    blah     \".trim(), \"blah\");\n    assert_eq!(\"\\nwut   \\u{3000}  \".trim(), \"wut\");\n    assert_eq!(\" hey dude \".trim(), \"hey dude\");\n}\n\n#[test]\nfn test_is_whitespace() {\n    assert!(\"\".chars().all(|c| c.is_whitespace()));\n    assert!(\" \".chars().all(|c| c.is_whitespace()));\n    assert!(\"\\u{2009}\".chars().all(|c| c.is_whitespace())); // Thin space\n    assert!(\"  \\n\\t   \".chars().all(|c| c.is_whitespace()));\n    assert!(!\"   _   \".chars().all(|c| c.is_whitespace()));\n}\n\n#[test]\nfn test_is_utf8() {\n    // deny overlong encodings\n    assert!(from_utf8(&[0xc0, 0x80]).is_err());\n    assert!(from_utf8(&[0xc0, 0xae]).is_err());\n    assert!(from_utf8(&[0xe0, 0x80, 0x80]).is_err());\n    assert!(from_utf8(&[0xe0, 0x80, 0xaf]).is_err());\n    assert!(from_utf8(&[0xe0, 0x81, 0x81]).is_err());\n    assert!(from_utf8(&[0xf0, 0x82, 0x82, 0xac]).is_err());\n    assert!(from_utf8(&[0xf4, 0x90, 0x80, 0x80]).is_err());\n\n    // deny surrogates\n    assert!(from_utf8(&[0xED, 0xA0, 0x80]).is_err());\n    assert!(from_utf8(&[0xED, 0xBF, 0xBF]).is_err());\n\n    assert!(from_utf8(&[0xC2, 0x80]).is_ok());\n    assert!(from_utf8(&[0xDF, 0xBF]).is_ok());\n    assert!(from_utf8(&[0xE0, 0xA0, 0x80]).is_ok());\n    assert!(from_utf8(&[0xED, 0x9F, 0xBF]).is_ok());\n    assert!(from_utf8(&[0xEE, 0x80, 0x80]).is_ok());\n    assert!(from_utf8(&[0xEF, 0xBF, 0xBF]).is_ok());\n    assert!(from_utf8(&[0xF0, 0x90, 0x80, 0x80]).is_ok());\n    assert!(from_utf8(&[0xF4, 0x8F, 0xBF, 0xBF]).is_ok());\n}\n\n#[test]\nfn from_utf8_mostly_ascii() {\n    // deny invalid bytes embedded in long stretches of ascii\n    for i in 32..64 {\n        let mut data = [0; 128];\n        data[i] = 0xC0;\n        assert!(from_utf8(&data).is_err());\n        data[i] = 0xC2;\n        assert!(from_utf8(&data).is_err());\n    }\n}\n\n#[test]\nfn from_utf8_error() {\n    macro_rules! test {\n        ($input: expr, $expected_valid_up_to: expr, $expected_error_len: expr) => {\n            let error = from_utf8($input).unwrap_err();\n            assert_eq!(error.valid_up_to(), $expected_valid_up_to);\n            assert_eq!(error.error_len(), $expected_error_len);\n        };\n    }\n    test!(b\"A\\xC3\\xA9 \\xFF \", 4, Some(1));\n    test!(b\"A\\xC3\\xA9 \\x80 \", 4, Some(1));\n    test!(b\"A\\xC3\\xA9 \\xC1 \", 4, Some(1));\n    test!(b\"A\\xC3\\xA9 \\xC1\", 4, Some(1));\n    test!(b\"A\\xC3\\xA9 \\xC2\", 4, None);\n    test!(b\"A\\xC3\\xA9 \\xC2 \", 4, Some(1));\n    test!(b\"A\\xC3\\xA9 \\xC2\\xC0\", 4, Some(1));\n    test!(b\"A\\xC3\\xA9 \\xE0\", 4, None);\n    test!(b\"A\\xC3\\xA9 \\xE0\\x9F\", 4, Some(1));\n    test!(b\"A\\xC3\\xA9 \\xE0\\xA0\", 4, None);\n    test!(b\"A\\xC3\\xA9 \\xE0\\xA0\\xC0\", 4, Some(2));\n    test!(b\"A\\xC3\\xA9 \\xE0\\xA0 \", 4, Some(2));\n    test!(b\"A\\xC3\\xA9 \\xED\\xA0\\x80 \", 4, Some(1));\n    test!(b\"A\\xC3\\xA9 \\xF1\", 4, None);\n    test!(b\"A\\xC3\\xA9 \\xF1\\x80\", 4, None);\n    test!(b\"A\\xC3\\xA9 \\xF1\\x80\\x80\", 4, None);\n    test!(b\"A\\xC3\\xA9 \\xF1 \", 4, Some(1));\n    test!(b\"A\\xC3\\xA9 \\xF1\\x80 \", 4, Some(2));\n    test!(b\"A\\xC3\\xA9 \\xF1\\x80\\x80 \", 4, Some(3));\n}\n\n#[test]\nfn test_as_bytes() {\n    // no null\n    let v = [\n        224, 184, 168, 224, 185, 132, 224, 184, 151, 224, 184, 162, 228, 184, 173, 229, 141, 142,\n        86, 105, 225, 187, 135, 116, 32, 78, 97, 109,\n    ];\n    let b: &[u8] = &[];\n    assert_eq!(\"\".as_bytes(), b);\n    assert_eq!(\"abc\".as_bytes(), b\"abc\");\n    assert_eq!(\"ศไทย中华Việt Nam\".as_bytes(), v);\n}\n\n#[test]\n#[should_panic]\nfn test_as_bytes_fail() {\n    // Don't double free. (I'm not sure if this exercises the\n    // original problem code path anymore.)\n    let s = String::from(\"\");\n    let _bytes = s.as_bytes();\n    panic!();\n}\n\n#[test]\nfn test_as_ptr() {\n    let buf = \"hello\".as_ptr();\n    unsafe {\n        assert_eq!(*buf.offset(0), b'h');\n        assert_eq!(*buf.offset(1), b'e');\n        assert_eq!(*buf.offset(2), b'l');\n        assert_eq!(*buf.offset(3), b'l');\n        assert_eq!(*buf.offset(4), b'o');\n    }\n}\n\n#[test]\nfn vec_str_conversions() {\n    let s1: String = String::from(\"All mimsy were the borogoves\");\n\n    let v: Vec<u8> = s1.as_bytes().to_vec();\n    let s2: String = String::from(from_utf8(&v).unwrap());\n    let mut i = 0;\n    let n1 = s1.len();\n    let n2 = v.len();\n    assert_eq!(n1, n2);\n    while i < n1 {\n        let a: u8 = s1.as_bytes()[i];\n        let b: u8 = s2.as_bytes()[i];\n        assert_eq!(a, b);\n        i += 1;\n    }\n}\n\n#[test]\nfn test_contains() {\n    assert!(\"abcde\".contains(\"bcd\"));\n    assert!(\"abcde\".contains(\"abcd\"));\n    assert!(\"abcde\".contains(\"bcde\"));\n    assert!(\"abcde\".contains(\"\"));\n    assert!(\"\".contains(\"\"));\n    assert!(!\"abcde\".contains(\"def\"));\n    assert!(!\"\".contains(\"a\"));\n\n    let data = \"ประเทศไทย中华Việt Nam\";\n    assert!(data.contains(\"ประเ\"));\n    assert!(data.contains(\"ะเ\"));\n    assert!(data.contains(\"中华\"));\n    assert!(!data.contains(\"ไท华\"));\n}\n\n#[test]\nfn test_contains_char() {\n    assert!(\"abc\".contains('b'));\n    assert!(\"a\".contains('a'));\n    assert!(!\"abc\".contains('d'));\n    assert!(!\"\".contains('a'));\n}\n\n#[test]\nfn test_split_at() {\n    let s = \"ศไทย中华Việt Nam\";\n    for (index, _) in s.char_indices() {\n        let (a, b) = s.split_at(index);\n        assert_eq!(&s[..a.len()], a);\n        assert_eq!(&s[a.len()..], b);\n    }\n    let (a, b) = s.split_at(s.len());\n    assert_eq!(a, s);\n    assert_eq!(b, \"\");\n}\n\n#[test]\nfn test_split_at_mut() {\n    let mut s = \"Hello World\".to_string();\n    {\n        let (a, b) = s.split_at_mut(5);\n        a.make_ascii_uppercase();\n        b.make_ascii_lowercase();\n    }\n    assert_eq!(s, \"HELLO world\");\n}\n\n#[test]\n#[should_panic]\nfn test_split_at_boundscheck() {\n    let s = \"ศไทย中华Việt Nam\";\n    s.split_at(1);\n}\n\n#[test]\nfn test_escape_unicode() {\n    assert_eq!(\"abc\".escape_unicode().to_string(), \"\\\\u{61}\\\\u{62}\\\\u{63}\");\n    assert_eq!(\"a c\".escape_unicode().to_string(), \"\\\\u{61}\\\\u{20}\\\\u{63}\");\n    assert_eq!(\"\\r\\n\\t\".escape_unicode().to_string(), \"\\\\u{d}\\\\u{a}\\\\u{9}\");\n    assert_eq!(\"'\\\"\\\\\".escape_unicode().to_string(), \"\\\\u{27}\\\\u{22}\\\\u{5c}\");\n    assert_eq!(\"\\x00\\x01\\u{fe}\\u{ff}\".escape_unicode().to_string(), \"\\\\u{0}\\\\u{1}\\\\u{fe}\\\\u{ff}\");\n    assert_eq!(\"\\u{100}\\u{ffff}\".escape_unicode().to_string(), \"\\\\u{100}\\\\u{ffff}\");\n    assert_eq!(\"\\u{10000}\\u{10ffff}\".escape_unicode().to_string(), \"\\\\u{10000}\\\\u{10ffff}\");\n    assert_eq!(\"ab\\u{fb00}\".escape_unicode().to_string(), \"\\\\u{61}\\\\u{62}\\\\u{fb00}\");\n    assert_eq!(\"\\u{1d4ea}\\r\".escape_unicode().to_string(), \"\\\\u{1d4ea}\\\\u{d}\");\n}\n\n#[test]\nfn test_escape_debug() {\n    // Note that there are subtleties with the number of backslashes\n    // on the left- and right-hand sides. In particular, Unicode code points\n    // are usually escaped with two backslashes on the right-hand side, as\n    // they are escaped. However, when the character is unescaped (e.g., for\n    // printable characters), only a single backslash appears (as the character\n    // itself appears in the debug string).\n    assert_eq!(\"abc\".escape_debug().to_string(), \"abc\");\n    assert_eq!(\"a c\".escape_debug().to_string(), \"a c\");\n    assert_eq!(\"éèê\".escape_debug().to_string(), \"éèê\");\n    assert_eq!(\"\\r\\n\\t\".escape_debug().to_string(), \"\\\\r\\\\n\\\\t\");\n    assert_eq!(\"'\\\"\\\\\".escape_debug().to_string(), \"\\\\'\\\\\\\"\\\\\\\\\");\n    assert_eq!(\"\\u{7f}\\u{ff}\".escape_debug().to_string(), \"\\\\u{7f}\\u{ff}\");\n    assert_eq!(\"\\u{100}\\u{ffff}\".escape_debug().to_string(), \"\\u{100}\\\\u{ffff}\");\n    assert_eq!(\"\\u{10000}\\u{10ffff}\".escape_debug().to_string(), \"\\u{10000}\\\\u{10ffff}\");\n    assert_eq!(\"ab\\u{200b}\".escape_debug().to_string(), \"ab\\\\u{200b}\");\n    assert_eq!(\"\\u{10d4ea}\\r\".escape_debug().to_string(), \"\\\\u{10d4ea}\\\\r\");\n    assert_eq!(\n        \"\\u{301}a\\u{301}bé\\u{e000}\".escape_debug().to_string(),\n        \"\\\\u{301}a\\u{301}bé\\\\u{e000}\"\n    );\n}\n\n#[test]\nfn test_escape_default() {\n    assert_eq!(\"abc\".escape_default().to_string(), \"abc\");\n    assert_eq!(\"a c\".escape_default().to_string(), \"a c\");\n    assert_eq!(\"éèê\".escape_default().to_string(), \"\\\\u{e9}\\\\u{e8}\\\\u{ea}\");\n    assert_eq!(\"\\r\\n\\t\".escape_default().to_string(), \"\\\\r\\\\n\\\\t\");\n    assert_eq!(\"'\\\"\\\\\".escape_default().to_string(), \"\\\\'\\\\\\\"\\\\\\\\\");\n    assert_eq!(\"\\u{7f}\\u{ff}\".escape_default().to_string(), \"\\\\u{7f}\\\\u{ff}\");\n    assert_eq!(\"\\u{100}\\u{ffff}\".escape_default().to_string(), \"\\\\u{100}\\\\u{ffff}\");\n    assert_eq!(\"\\u{10000}\\u{10ffff}\".escape_default().to_string(), \"\\\\u{10000}\\\\u{10ffff}\");\n    assert_eq!(\"ab\\u{200b}\".escape_default().to_string(), \"ab\\\\u{200b}\");\n    assert_eq!(\"\\u{10d4ea}\\r\".escape_default().to_string(), \"\\\\u{10d4ea}\\\\r\");\n}\n\n#[test]\nfn test_total_ord() {\n    assert_eq!(\"1234\".cmp(\"123\"), Greater);\n    assert_eq!(\"123\".cmp(\"1234\"), Less);\n    assert_eq!(\"1234\".cmp(\"1234\"), Equal);\n    assert_eq!(\"12345555\".cmp(\"123456\"), Less);\n    assert_eq!(\"22\".cmp(\"1234\"), Greater);\n}\n\n#[test]\nfn test_iterator() {\n    let s = \"ศไทย中华Việt Nam\";\n    let v = ['ศ', 'ไ', 'ท', 'ย', '中', '华', 'V', 'i', 'ệ', 't', ' ', 'N', 'a', 'm'];\n\n    let mut pos = 0;\n    let it = s.chars();\n\n    for c in it {\n        assert_eq!(c, v[pos]);\n        pos += 1;\n    }\n    assert_eq!(pos, v.len());\n    assert_eq!(s.chars().count(), v.len());\n}\n\n#[test]\nfn test_rev_iterator() {\n    let s = \"ศไทย中华Việt Nam\";\n    let v = ['m', 'a', 'N', ' ', 't', 'ệ', 'i', 'V', '华', '中', 'ย', 'ท', 'ไ', 'ศ'];\n\n    let mut pos = 0;\n    let it = s.chars().rev();\n\n    for c in it {\n        assert_eq!(c, v[pos]);\n        pos += 1;\n    }\n    assert_eq!(pos, v.len());\n}\n\n#[test]\n#[cfg_attr(miri, ignore)] // Miri is too slow\nfn test_chars_decoding() {\n    let mut bytes = [0; 4];\n    for c in (0..0x110000).filter_map(std::char::from_u32) {\n        let s = c.encode_utf8(&mut bytes);\n        if Some(c) != s.chars().next() {\n            panic!(\"character {:x}={} does not decode correctly\", c as u32, c);\n        }\n    }\n}\n\n#[test]\n#[cfg_attr(miri, ignore)] // Miri is too slow\nfn test_chars_rev_decoding() {\n    let mut bytes = [0; 4];\n    for c in (0..0x110000).filter_map(std::char::from_u32) {\n        let s = c.encode_utf8(&mut bytes);\n        if Some(c) != s.chars().rev().next() {\n            panic!(\"character {:x}={} does not decode correctly\", c as u32, c);\n        }\n    }\n}\n\n#[test]\nfn test_iterator_clone() {\n    let s = \"ศไทย中华Việt Nam\";\n    let mut it = s.chars();\n    it.next();\n    assert!(it.clone().zip(it).all(|(x, y)| x == y));\n}\n\n#[test]\nfn test_iterator_last() {\n    let s = \"ศไทย中华Việt Nam\";\n    let mut it = s.chars();\n    it.next();\n    assert_eq!(it.last(), Some('m'));\n}\n\n#[test]\nfn test_chars_debug() {\n    let s = \"ศไทย中华Việt Nam\";\n    let c = s.chars();\n    assert_eq!(\n        format!(\"{:?}\", c),\n        r#\"Chars(['ศ', 'ไ', 'ท', 'ย', '中', '华', 'V', 'i', 'ệ', 't', ' ', 'N', 'a', 'm'])\"#\n    );\n}\n\n#[test]\nfn test_bytesator() {\n    let s = \"ศไทย中华Việt Nam\";\n    let v = [\n        224, 184, 168, 224, 185, 132, 224, 184, 151, 224, 184, 162, 228, 184, 173, 229, 141, 142,\n        86, 105, 225, 187, 135, 116, 32, 78, 97, 109,\n    ];\n    let mut pos = 0;\n\n    for b in s.bytes() {\n        assert_eq!(b, v[pos]);\n        pos += 1;\n    }\n}\n\n#[test]\nfn test_bytes_revator() {\n    let s = \"ศไทย中华Việt Nam\";\n    let v = [\n        224, 184, 168, 224, 185, 132, 224, 184, 151, 224, 184, 162, 228, 184, 173, 229, 141, 142,\n        86, 105, 225, 187, 135, 116, 32, 78, 97, 109,\n    ];\n    let mut pos = v.len();\n\n    for b in s.bytes().rev() {\n        pos -= 1;\n        assert_eq!(b, v[pos]);\n    }\n}\n\n#[test]\nfn test_bytesator_nth() {\n    let s = \"ศไทย中华Việt Nam\";\n    let v = [\n        224, 184, 168, 224, 185, 132, 224, 184, 151, 224, 184, 162, 228, 184, 173, 229, 141, 142,\n        86, 105, 225, 187, 135, 116, 32, 78, 97, 109,\n    ];\n\n    let mut b = s.bytes();\n    assert_eq!(b.nth(2).unwrap(), v[2]);\n    assert_eq!(b.nth(10).unwrap(), v[10]);\n    assert_eq!(b.nth(200), None);\n}\n\n#[test]\nfn test_bytesator_count() {\n    let s = \"ศไทย中华Việt Nam\";\n\n    let b = s.bytes();\n    assert_eq!(b.count(), 28)\n}\n\n#[test]\nfn test_bytesator_last() {\n    let s = \"ศไทย中华Việt Nam\";\n\n    let b = s.bytes();\n    assert_eq!(b.last().unwrap(), 109)\n}\n\n#[test]\nfn test_char_indicesator() {\n    let s = \"ศไทย中华Việt Nam\";\n    let p = [0, 3, 6, 9, 12, 15, 18, 19, 20, 23, 24, 25, 26, 27];\n    let v = ['ศ', 'ไ', 'ท', 'ย', '中', '华', 'V', 'i', 'ệ', 't', ' ', 'N', 'a', 'm'];\n\n    let mut pos = 0;\n    let it = s.char_indices();\n\n    for c in it {\n        assert_eq!(c, (p[pos], v[pos]));\n        pos += 1;\n    }\n    assert_eq!(pos, v.len());\n    assert_eq!(pos, p.len());\n}\n\n#[test]\nfn test_char_indices_revator() {\n    let s = \"ศไทย中华Việt Nam\";\n    let p = [27, 26, 25, 24, 23, 20, 19, 18, 15, 12, 9, 6, 3, 0];\n    let v = ['m', 'a', 'N', ' ', 't', 'ệ', 'i', 'V', '华', '中', 'ย', 'ท', 'ไ', 'ศ'];\n\n    let mut pos = 0;\n    let it = s.char_indices().rev();\n\n    for c in it {\n        assert_eq!(c, (p[pos], v[pos]));\n        pos += 1;\n    }\n    assert_eq!(pos, v.len());\n    assert_eq!(pos, p.len());\n}\n\n#[test]\nfn test_char_indices_last() {\n    let s = \"ศไทย中华Việt Nam\";\n    let mut it = s.char_indices();\n    it.next();\n    assert_eq!(it.last(), Some((27, 'm')));\n}\n\n#[test]\nfn test_splitn_char_iterator() {\n    let data = \"\\nMäry häd ä little lämb\\nLittle lämb\\n\";\n\n    let split: Vec<&str> = data.splitn(4, ' ').collect();\n    assert_eq!(split, [\"\\nMäry\", \"häd\", \"ä\", \"little lämb\\nLittle lämb\\n\"]);\n\n    let split: Vec<&str> = data.splitn(4, |c: char| c == ' ').collect();\n    assert_eq!(split, [\"\\nMäry\", \"häd\", \"ä\", \"little lämb\\nLittle lämb\\n\"]);\n\n    // Unicode\n    let split: Vec<&str> = data.splitn(4, 'ä').collect();\n    assert_eq!(split, [\"\\nM\", \"ry h\", \"d \", \" little lämb\\nLittle lämb\\n\"]);\n\n    let split: Vec<&str> = data.splitn(4, |c: char| c == 'ä').collect();\n    assert_eq!(split, [\"\\nM\", \"ry h\", \"d \", \" little lämb\\nLittle lämb\\n\"]);\n}\n\n#[test]\nfn test_split_char_iterator_no_trailing() {\n    let data = \"\\nMäry häd ä little lämb\\nLittle lämb\\n\";\n\n    let split: Vec<&str> = data.split('\\n').collect();\n    assert_eq!(split, [\"\", \"Märy häd ä little lämb\", \"Little lämb\", \"\"]);\n\n    let split: Vec<&str> = data.split_terminator('\\n').collect();\n    assert_eq!(split, [\"\", \"Märy häd ä little lämb\", \"Little lämb\"]);\n}\n\n#[test]\nfn test_split_char_iterator_inclusive() {\n    let data = \"\\nMäry häd ä little lämb\\nLittle lämb\\n\";\n\n    let split: Vec<&str> = data.split_inclusive('\\n').collect();\n    assert_eq!(split, [\"\\n\", \"Märy häd ä little lämb\\n\", \"Little lämb\\n\"]);\n\n    let uppercase_separated = \"SheePSharKTurtlECaT\";\n    let mut first_char = true;\n    let split: Vec<&str> = uppercase_separated\n        .split_inclusive(|c: char| {\n            let split = !first_char && c.is_uppercase();\n            first_char = split;\n            split\n        })\n        .collect();\n    assert_eq!(split, [\"SheeP\", \"SharK\", \"TurtlE\", \"CaT\"]);\n}\n\n#[test]\nfn test_split_char_iterator_inclusive_rev() {\n    let data = \"\\nMäry häd ä little lämb\\nLittle lämb\\n\";\n\n    let split: Vec<&str> = data.split_inclusive('\\n').rev().collect();\n    assert_eq!(split, [\"Little lämb\\n\", \"Märy häd ä little lämb\\n\", \"\\n\"]);\n\n    // Note that the predicate is stateful and thus dependent\n    // on the iteration order.\n    // (A different predicate is needed for reverse iterator vs normal iterator.)\n    // Not sure if anything can be done though.\n    let uppercase_separated = \"SheePSharKTurtlECaT\";\n    let mut term_char = true;\n    let split: Vec<&str> = uppercase_separated\n        .split_inclusive(|c: char| {\n            let split = term_char && c.is_uppercase();\n            term_char = c.is_uppercase();\n            split\n        })\n        .rev()\n        .collect();\n    assert_eq!(split, [\"CaT\", \"TurtlE\", \"SharK\", \"SheeP\"]);\n}\n\n#[test]\nfn test_rsplit() {\n    let data = \"\\nMäry häd ä little lämb\\nLittle lämb\\n\";\n\n    let split: Vec<&str> = data.rsplit(' ').collect();\n    assert_eq!(split, [\"lämb\\n\", \"lämb\\nLittle\", \"little\", \"ä\", \"häd\", \"\\nMäry\"]);\n\n    let split: Vec<&str> = data.rsplit(\"lämb\").collect();\n    assert_eq!(split, [\"\\n\", \"\\nLittle \", \"\\nMäry häd ä little \"]);\n\n    let split: Vec<&str> = data.rsplit(|c: char| c == 'ä').collect();\n    assert_eq!(split, [\"mb\\n\", \"mb\\nLittle l\", \" little l\", \"d \", \"ry h\", \"\\nM\"]);\n}\n\n#[test]\nfn test_rsplitn() {\n    let data = \"\\nMäry häd ä little lämb\\nLittle lämb\\n\";\n\n    let split: Vec<&str> = data.rsplitn(2, ' ').collect();\n    assert_eq!(split, [\"lämb\\n\", \"\\nMäry häd ä little lämb\\nLittle\"]);\n\n    let split: Vec<&str> = data.rsplitn(2, \"lämb\").collect();\n    assert_eq!(split, [\"\\n\", \"\\nMäry häd ä little lämb\\nLittle \"]);\n\n    let split: Vec<&str> = data.rsplitn(2, |c: char| c == 'ä').collect();\n    assert_eq!(split, [\"mb\\n\", \"\\nMäry häd ä little lämb\\nLittle l\"]);\n}\n\n#[test]\nfn test_split_once() {\n    assert_eq!(\"\".split_once(\"->\"), None);\n    assert_eq!(\"-\".split_once(\"->\"), None);\n    assert_eq!(\"->\".split_once(\"->\"), Some((\"\", \"\")));\n    assert_eq!(\"a->\".split_once(\"->\"), Some((\"a\", \"\")));\n    assert_eq!(\"->b\".split_once(\"->\"), Some((\"\", \"b\")));\n    assert_eq!(\"a->b\".split_once(\"->\"), Some((\"a\", \"b\")));\n    assert_eq!(\"a->b->c\".split_once(\"->\"), Some((\"a\", \"b->c\")));\n    assert_eq!(\"---\".split_once(\"--\"), Some((\"\", \"-\")));\n}\n\n#[test]\nfn test_rsplit_once() {\n    assert_eq!(\"\".rsplit_once(\"->\"), None);\n    assert_eq!(\"-\".rsplit_once(\"->\"), None);\n    assert_eq!(\"->\".rsplit_once(\"->\"), Some((\"\", \"\")));\n    assert_eq!(\"a->\".rsplit_once(\"->\"), Some((\"a\", \"\")));\n    assert_eq!(\"->b\".rsplit_once(\"->\"), Some((\"\", \"b\")));\n    assert_eq!(\"a->b\".rsplit_once(\"->\"), Some((\"a\", \"b\")));\n    assert_eq!(\"a->b->c\".rsplit_once(\"->\"), Some((\"a->b\", \"c\")));\n    assert_eq!(\"---\".rsplit_once(\"--\"), Some((\"-\", \"\")));\n}\n\n#[test]\nfn test_split_whitespace() {\n    let data = \"\\n \\tMäry   häd\\tä  little lämb\\nLittle lämb\\n\";\n    let words: Vec<&str> = data.split_whitespace().collect();\n    assert_eq!(words, [\"Märy\", \"häd\", \"ä\", \"little\", \"lämb\", \"Little\", \"lämb\"])\n}\n\n#[test]\nfn test_lines() {\n    let data = \"\\nMäry häd ä little lämb\\n\\r\\nLittle lämb\\n\";\n    let lines: Vec<&str> = data.lines().collect();\n    assert_eq!(lines, [\"\", \"Märy häd ä little lämb\", \"\", \"Little lämb\"]);\n\n    let data = \"\\r\\nMäry häd ä little lämb\\n\\nLittle lämb\"; // no trailing \\n\n    let lines: Vec<&str> = data.lines().collect();\n    assert_eq!(lines, [\"\", \"Märy häd ä little lämb\", \"\", \"Little lämb\"]);\n}\n\n#[test]\nfn test_splitator() {\n    fn t(s: &str, sep: &str, u: &[&str]) {\n        let v: Vec<&str> = s.split(sep).collect();\n        assert_eq!(v, u);\n    }\n    t(\"--1233345--\", \"12345\", &[\"--1233345--\"]);\n    t(\"abc::hello::there\", \"::\", &[\"abc\", \"hello\", \"there\"]);\n    t(\"::hello::there\", \"::\", &[\"\", \"hello\", \"there\"]);\n    t(\"hello::there::\", \"::\", &[\"hello\", \"there\", \"\"]);\n    t(\"::hello::there::\", \"::\", &[\"\", \"hello\", \"there\", \"\"]);\n    t(\"ประเทศไทย中华Việt Nam\", \"中华\", &[\"ประเทศไทย\", \"Việt Nam\"]);\n    t(\"zzXXXzzYYYzz\", \"zz\", &[\"\", \"XXX\", \"YYY\", \"\"]);\n    t(\"zzXXXzYYYz\", \"XXX\", &[\"zz\", \"zYYYz\"]);\n    t(\".XXX.YYY.\", \".\", &[\"\", \"XXX\", \"YYY\", \"\"]);\n    t(\"\", \".\", &[\"\"]);\n    t(\"zz\", \"zz\", &[\"\", \"\"]);\n    t(\"ok\", \"z\", &[\"ok\"]);\n    t(\"zzz\", \"zz\", &[\"\", \"z\"]);\n    t(\"zzzzz\", \"zz\", &[\"\", \"\", \"z\"]);\n}\n\n#[test]\nfn test_str_default() {\n    use std::default::Default;\n\n    fn t<S: Default + AsRef<str>>() {\n        let s: S = Default::default();\n        assert_eq!(s.as_ref(), \"\");\n    }\n\n    t::<&str>();\n    t::<String>();\n    t::<&mut str>();\n}\n\n#[test]\nfn test_str_container() {\n    fn sum_len(v: &[&str]) -> usize {\n        v.iter().map(|x| x.len()).sum()\n    }\n\n    let s = \"01234\";\n    assert_eq!(5, sum_len(&[\"012\", \"\", \"34\"]));\n    assert_eq!(5, sum_len(&[\"01\", \"2\", \"34\", \"\"]));\n    assert_eq!(5, sum_len(&[s]));\n}\n\n#[test]\nfn test_str_from_utf8() {\n    let xs = b\"hello\";\n    assert_eq!(from_utf8(xs), Ok(\"hello\"));\n\n    let xs = \"ศไทย中华Việt Nam\".as_bytes();\n    assert_eq!(from_utf8(xs), Ok(\"ศไทย中华Việt Nam\"));\n\n    let xs = b\"hello\\xFF\";\n    assert!(from_utf8(xs).is_err());\n}\n\n#[test]\nfn test_pattern_deref_forward() {\n    let data = \"aabcdaa\";\n    assert!(data.contains(\"bcd\"));\n    assert!(data.contains(&\"bcd\"));\n    assert!(data.contains(&\"bcd\".to_string()));\n}\n\n#[test]\nfn test_empty_match_indices() {\n    let data = \"aä中!\";\n    let vec: Vec<_> = data.match_indices(\"\").collect();\n    assert_eq!(vec, [(0, \"\"), (1, \"\"), (3, \"\"), (6, \"\"), (7, \"\")]);\n}\n\n#[test]\nfn test_bool_from_str() {\n    assert_eq!(\"true\".parse().ok(), Some(true));\n    assert_eq!(\"false\".parse().ok(), Some(false));\n    assert_eq!(\"not even a boolean\".parse::<bool>().ok(), None);\n}\n\nfn check_contains_all_substrings(s: &str) {\n    assert!(s.contains(\"\"));\n    for i in 0..s.len() {\n        for j in i + 1..=s.len() {\n            assert!(s.contains(&s[i..j]));\n        }\n    }\n}\n\n#[test]\n#[cfg_attr(miri, ignore)] // Miri is too slow\nfn strslice_issue_16589() {\n    assert!(\"bananas\".contains(\"nana\"));\n\n    // prior to the fix for #16589, x.contains(\"abcdabcd\") returned false\n    // test all substrings for good measure\n    check_contains_all_substrings(\"012345678901234567890123456789bcdabcdabcd\");\n}\n\n#[test]\nfn strslice_issue_16878() {\n    assert!(!\"1234567ah012345678901ah\".contains(\"hah\"));\n    assert!(!\"00abc01234567890123456789abc\".contains(\"bcabc\"));\n}\n\n#[test]\n#[cfg_attr(miri, ignore)] // Miri is too slow\nfn test_strslice_contains() {\n    let x = \"There are moments, Jeeves, when one asks oneself, 'Do trousers matter?'\";\n    check_contains_all_substrings(x);\n}\n\n#[test]\nfn test_rsplitn_char_iterator() {\n    let data = \"\\nMäry häd ä little lämb\\nLittle lämb\\n\";\n\n    let mut split: Vec<&str> = data.rsplitn(4, ' ').collect();\n    split.reverse();\n    assert_eq!(split, [\"\\nMäry häd ä\", \"little\", \"lämb\\nLittle\", \"lämb\\n\"]);\n\n    let mut split: Vec<&str> = data.rsplitn(4, |c: char| c == ' ').collect();\n    split.reverse();\n    assert_eq!(split, [\"\\nMäry häd ä\", \"little\", \"lämb\\nLittle\", \"lämb\\n\"]);\n\n    // Unicode\n    let mut split: Vec<&str> = data.rsplitn(4, 'ä').collect();\n    split.reverse();\n    assert_eq!(split, [\"\\nMäry häd \", \" little l\", \"mb\\nLittle l\", \"mb\\n\"]);\n\n    let mut split: Vec<&str> = data.rsplitn(4, |c: char| c == 'ä').collect();\n    split.reverse();\n    assert_eq!(split, [\"\\nMäry häd \", \" little l\", \"mb\\nLittle l\", \"mb\\n\"]);\n}\n\n#[test]\nfn test_split_char_iterator() {\n    let data = \"\\nMäry häd ä little lämb\\nLittle lämb\\n\";\n\n    let split: Vec<&str> = data.split(' ').collect();\n    assert_eq!(split, [\"\\nMäry\", \"häd\", \"ä\", \"little\", \"lämb\\nLittle\", \"lämb\\n\"]);\n\n    let mut rsplit: Vec<&str> = data.split(' ').rev().collect();\n    rsplit.reverse();\n    assert_eq!(rsplit, [\"\\nMäry\", \"häd\", \"ä\", \"little\", \"lämb\\nLittle\", \"lämb\\n\"]);\n\n    let split: Vec<&str> = data.split(|c: char| c == ' ').collect();\n    assert_eq!(split, [\"\\nMäry\", \"häd\", \"ä\", \"little\", \"lämb\\nLittle\", \"lämb\\n\"]);\n\n    let mut rsplit: Vec<&str> = data.split(|c: char| c == ' ').rev().collect();\n    rsplit.reverse();\n    assert_eq!(rsplit, [\"\\nMäry\", \"häd\", \"ä\", \"little\", \"lämb\\nLittle\", \"lämb\\n\"]);\n\n    // Unicode\n    let split: Vec<&str> = data.split('ä').collect();\n    assert_eq!(split, [\"\\nM\", \"ry h\", \"d \", \" little l\", \"mb\\nLittle l\", \"mb\\n\"]);\n\n    let mut rsplit: Vec<&str> = data.split('ä').rev().collect();\n    rsplit.reverse();\n    assert_eq!(rsplit, [\"\\nM\", \"ry h\", \"d \", \" little l\", \"mb\\nLittle l\", \"mb\\n\"]);\n\n    let split: Vec<&str> = data.split(|c: char| c == 'ä').collect();\n    assert_eq!(split, [\"\\nM\", \"ry h\", \"d \", \" little l\", \"mb\\nLittle l\", \"mb\\n\"]);\n\n    let mut rsplit: Vec<&str> = data.split(|c: char| c == 'ä').rev().collect();\n    rsplit.reverse();\n    assert_eq!(rsplit, [\"\\nM\", \"ry h\", \"d \", \" little l\", \"mb\\nLittle l\", \"mb\\n\"]);\n}\n\n#[test]\nfn test_rev_split_char_iterator_no_trailing() {\n    let data = \"\\nMäry häd ä little lämb\\nLittle lämb\\n\";\n\n    let mut split: Vec<&str> = data.split('\\n').rev().collect();\n    split.reverse();\n    assert_eq!(split, [\"\", \"Märy häd ä little lämb\", \"Little lämb\", \"\"]);\n\n    let mut split: Vec<&str> = data.split_terminator('\\n').rev().collect();\n    split.reverse();\n    assert_eq!(split, [\"\", \"Märy häd ä little lämb\", \"Little lämb\"]);\n}\n\n#[test]\nfn test_utf16_code_units() {\n    assert_eq!(\"é\\u{1F4A9}\".encode_utf16().collect::<Vec<u16>>(), [0xE9, 0xD83D, 0xDCA9])\n}\n\n#[test]\nfn starts_with_in_unicode() {\n    assert!(!\"├── Cargo.toml\".starts_with(\"# \"));\n}\n\n#[test]\nfn starts_short_long() {\n    assert!(!\"\".starts_with(\"##\"));\n    assert!(!\"##\".starts_with(\"####\"));\n    assert!(\"####\".starts_with(\"##\"));\n    assert!(!\"##ä\".starts_with(\"####\"));\n    assert!(\"####ä\".starts_with(\"##\"));\n    assert!(!\"##\".starts_with(\"####ä\"));\n    assert!(\"##ä##\".starts_with(\"##ä\"));\n\n    assert!(\"\".starts_with(\"\"));\n    assert!(\"ä\".starts_with(\"\"));\n    assert!(\"#ä\".starts_with(\"\"));\n    assert!(\"##ä\".starts_with(\"\"));\n    assert!(\"ä###\".starts_with(\"\"));\n    assert!(\"#ä##\".starts_with(\"\"));\n    assert!(\"##ä#\".starts_with(\"\"));\n}\n\n#[test]\nfn contains_weird_cases() {\n    assert!(\"* \\t\".contains(' '));\n    assert!(!\"* \\t\".contains('?'));\n    assert!(!\"* \\t\".contains('\\u{1F4A9}'));\n}\n\n#[test]\nfn trim_ws() {\n    assert_eq!(\" \\t  a \\t  \".trim_start_matches(|c: char| c.is_whitespace()), \"a \\t  \");\n    assert_eq!(\" \\t  a \\t  \".trim_end_matches(|c: char| c.is_whitespace()), \" \\t  a\");\n    assert_eq!(\" \\t  a \\t  \".trim_start_matches(|c: char| c.is_whitespace()), \"a \\t  \");\n    assert_eq!(\" \\t  a \\t  \".trim_end_matches(|c: char| c.is_whitespace()), \" \\t  a\");\n    assert_eq!(\" \\t  a \\t  \".trim_matches(|c: char| c.is_whitespace()), \"a\");\n    assert_eq!(\" \\t   \\t  \".trim_start_matches(|c: char| c.is_whitespace()), \"\");\n    assert_eq!(\" \\t   \\t  \".trim_end_matches(|c: char| c.is_whitespace()), \"\");\n    assert_eq!(\" \\t   \\t  \".trim_start_matches(|c: char| c.is_whitespace()), \"\");\n    assert_eq!(\" \\t   \\t  \".trim_end_matches(|c: char| c.is_whitespace()), \"\");\n    assert_eq!(\" \\t   \\t  \".trim_matches(|c: char| c.is_whitespace()), \"\");\n}\n\n#[test]\nfn to_lowercase() {\n    assert_eq!(\"\".to_lowercase(), \"\");\n    assert_eq!(\"AÉǅaé \".to_lowercase(), \"aéǆaé \");\n\n    // https://github.com/rust-lang/rust/issues/26035\n    assert_eq!(\"ΑΣ\".to_lowercase(), \"ας\");\n    assert_eq!(\"Α'Σ\".to_lowercase(), \"α'ς\");\n    assert_eq!(\"Α''Σ\".to_lowercase(), \"α''ς\");\n\n    assert_eq!(\"ΑΣ Α\".to_lowercase(), \"ας α\");\n    assert_eq!(\"Α'Σ Α\".to_lowercase(), \"α'ς α\");\n    assert_eq!(\"Α''Σ Α\".to_lowercase(), \"α''ς α\");\n\n    assert_eq!(\"ΑΣ' Α\".to_lowercase(), \"ας' α\");\n    assert_eq!(\"ΑΣ'' Α\".to_lowercase(), \"ας'' α\");\n\n    assert_eq!(\"Α'Σ' Α\".to_lowercase(), \"α'ς' α\");\n    assert_eq!(\"Α''Σ'' Α\".to_lowercase(), \"α''ς'' α\");\n\n    assert_eq!(\"Α Σ\".to_lowercase(), \"α σ\");\n    assert_eq!(\"Α 'Σ\".to_lowercase(), \"α 'σ\");\n    assert_eq!(\"Α ''Σ\".to_lowercase(), \"α ''σ\");\n\n    assert_eq!(\"Σ\".to_lowercase(), \"σ\");\n    assert_eq!(\"'Σ\".to_lowercase(), \"'σ\");\n    assert_eq!(\"''Σ\".to_lowercase(), \"''σ\");\n\n    assert_eq!(\"ΑΣΑ\".to_lowercase(), \"ασα\");\n    assert_eq!(\"ΑΣ'Α\".to_lowercase(), \"ασ'α\");\n    assert_eq!(\"ΑΣ''Α\".to_lowercase(), \"ασ''α\");\n}\n\n#[test]\nfn to_uppercase() {\n    assert_eq!(\"\".to_uppercase(), \"\");\n    assert_eq!(\"aéǅßﬁᾀ\".to_uppercase(), \"AÉǄSSFIἈΙ\");\n}\n\n#[test]\nfn test_into_string() {\n    // The only way to acquire a Box<str> in the first place is through a String, so just\n    // test that we can round-trip between Box<str> and String.\n    let string = String::from(\"Some text goes here\");\n    assert_eq!(string.clone().into_boxed_str().into_string(), string);\n}\n\n#[test]\nfn test_box_slice_clone() {\n    let data = String::from(\"hello HELLO hello HELLO yes YES 5 中ä华!!!\");\n    let data2 = data.clone().into_boxed_str().clone().into_string();\n\n    assert_eq!(data, data2);\n}\n\n#[test]\nfn test_cow_from() {\n    let borrowed = \"borrowed\";\n    let owned = String::from(\"owned\");\n    match (Cow::from(owned.clone()), Cow::from(borrowed)) {\n        (Cow::Owned(o), Cow::Borrowed(b)) => assert!(o == owned && b == borrowed),\n        _ => panic!(\"invalid `Cow::from`\"),\n    }\n}\n\n#[test]\nfn test_repeat() {\n    assert_eq!(\"\".repeat(3), \"\");\n    assert_eq!(\"abc\".repeat(0), \"\");\n    assert_eq!(\"α\".repeat(3), \"ααα\");\n}\n\nmod pattern {\n    use std::str::pattern::SearchStep::{self, Done, Match, Reject};\n    use std::str::pattern::{Pattern, ReverseSearcher, Searcher};\n\n    macro_rules! make_test {\n        ($name:ident, $p:expr, $h:expr, [$($e:expr,)*]) => {\n            #[allow(unused_imports)]\n            mod $name {\n                use std::str::pattern::SearchStep::{Match, Reject};\n                use super::{cmp_search_to_vec};\n                #[test]\n                fn fwd() {\n                    cmp_search_to_vec(false, $p, $h, vec![$($e),*]);\n                }\n                #[test]\n                fn bwd() {\n                    cmp_search_to_vec(true, $p, $h, vec![$($e),*]);\n                }\n            }\n        }\n    }\n\n    fn cmp_search_to_vec<'a>(\n        rev: bool,\n        pat: impl Pattern<'a, Searcher: ReverseSearcher<'a>>,\n        haystack: &'a str,\n        right: Vec<SearchStep>,\n    ) {\n        let mut searcher = pat.into_searcher(haystack);\n        let mut v = vec![];\n        loop {\n            match if !rev { searcher.next() } else { searcher.next_back() } {\n                Match(a, b) => v.push(Match(a, b)),\n                Reject(a, b) => v.push(Reject(a, b)),\n                Done => break,\n            }\n        }\n        if rev {\n            v.reverse();\n        }\n\n        let mut first_index = 0;\n        let mut err = None;\n\n        for (i, e) in right.iter().enumerate() {\n            match *e {\n                Match(a, b) | Reject(a, b) if a <= b && a == first_index => {\n                    first_index = b;\n                }\n                _ => {\n                    err = Some(i);\n                    break;\n                }\n            }\n        }\n\n        if let Some(err) = err {\n            panic!(\"Input skipped range at {}\", err);\n        }\n\n        if first_index != haystack.len() {\n            panic!(\"Did not cover whole input\");\n        }\n\n        assert_eq!(v, right);\n    }\n\n    make_test!(\n        str_searcher_ascii_haystack,\n        \"bb\",\n        \"abbcbbd\",\n        [Reject(0, 1), Match(1, 3), Reject(3, 4), Match(4, 6), Reject(6, 7),]\n    );\n    make_test!(\n        str_searcher_ascii_haystack_seq,\n        \"bb\",\n        \"abbcbbbbd\",\n        [Reject(0, 1), Match(1, 3), Reject(3, 4), Match(4, 6), Match(6, 8), Reject(8, 9),]\n    );\n    make_test!(\n        str_searcher_empty_needle_ascii_haystack,\n        \"\",\n        \"abbcbbd\",\n        [\n            Match(0, 0),\n            Reject(0, 1),\n            Match(1, 1),\n            Reject(1, 2),\n            Match(2, 2),\n            Reject(2, 3),\n            Match(3, 3),\n            Reject(3, 4),\n            Match(4, 4),\n            Reject(4, 5),\n            Match(5, 5),\n            Reject(5, 6),\n            Match(6, 6),\n            Reject(6, 7),\n            Match(7, 7),\n        ]\n    );\n    make_test!(\n        str_searcher_multibyte_haystack,\n        \" \",\n        \"├──\",\n        [Reject(0, 3), Reject(3, 6), Reject(6, 9),]\n    );\n    make_test!(\n        str_searcher_empty_needle_multibyte_haystack,\n        \"\",\n        \"├──\",\n        [\n            Match(0, 0),\n            Reject(0, 3),\n            Match(3, 3),\n            Reject(3, 6),\n            Match(6, 6),\n            Reject(6, 9),\n            Match(9, 9),\n        ]\n    );\n    make_test!(str_searcher_empty_needle_empty_haystack, \"\", \"\", [Match(0, 0),]);\n    make_test!(str_searcher_nonempty_needle_empty_haystack, \"├\", \"\", []);\n    make_test!(\n        char_searcher_ascii_haystack,\n        'b',\n        \"abbcbbd\",\n        [\n            Reject(0, 1),\n            Match(1, 2),\n            Match(2, 3),\n            Reject(3, 4),\n            Match(4, 5),\n            Match(5, 6),\n            Reject(6, 7),\n        ]\n    );\n    make_test!(\n        char_searcher_multibyte_haystack,\n        ' ',\n        \"├──\",\n        [Reject(0, 3), Reject(3, 6), Reject(6, 9),]\n    );\n    make_test!(\n        char_searcher_short_haystack,\n        '\\u{1F4A9}',\n        \"* \\t\",\n        [Reject(0, 1), Reject(1, 2), Reject(2, 3),]\n    );\n}\n\nmacro_rules! generate_iterator_test {\n    {\n        $name:ident {\n            $(\n                ($($arg:expr),*) -> [$($t:tt)*];\n            )*\n        }\n        with $fwd:expr, $bwd:expr;\n    } => {\n        #[test]\n        fn $name() {\n            $(\n                {\n                    let res = vec![$($t)*];\n\n                    let fwd_vec: Vec<_> = ($fwd)($($arg),*).collect();\n                    assert_eq!(fwd_vec, res);\n\n                    let mut bwd_vec: Vec<_> = ($bwd)($($arg),*).collect();\n                    bwd_vec.reverse();\n                    assert_eq!(bwd_vec, res);\n                }\n            )*\n        }\n    };\n    {\n        $name:ident {\n            $(\n                ($($arg:expr),*) -> [$($t:tt)*];\n            )*\n        }\n        with $fwd:expr;\n    } => {\n        #[test]\n        fn $name() {\n            $(\n                {\n                    let res = vec![$($t)*];\n\n                    let fwd_vec: Vec<_> = ($fwd)($($arg),*).collect();\n                    assert_eq!(fwd_vec, res);\n                }\n            )*\n        }\n    }\n}\n\ngenerate_iterator_test! {\n    double_ended_split {\n        (\"foo.bar.baz\", '.') -> [\"foo\", \"bar\", \"baz\"];\n        (\"foo::bar::baz\", \"::\") -> [\"foo\", \"bar\", \"baz\"];\n    }\n    with str::split, str::rsplit;\n}\n\ngenerate_iterator_test! {\n    double_ended_split_terminator {\n        (\"foo;bar;baz;\", ';') -> [\"foo\", \"bar\", \"baz\"];\n    }\n    with str::split_terminator, str::rsplit_terminator;\n}\n\ngenerate_iterator_test! {\n    double_ended_matches {\n        (\"a1b2c3\", char::is_numeric) -> [\"1\", \"2\", \"3\"];\n    }\n    with str::matches, str::rmatches;\n}\n\ngenerate_iterator_test! {\n    double_ended_match_indices {\n        (\"a1b2c3\", char::is_numeric) -> [(1, \"1\"), (3, \"2\"), (5, \"3\")];\n    }\n    with str::match_indices, str::rmatch_indices;\n}\n\ngenerate_iterator_test! {\n    not_double_ended_splitn {\n        (\"foo::bar::baz\", 2, \"::\") -> [\"foo\", \"bar::baz\"];\n    }\n    with str::splitn;\n}\n\ngenerate_iterator_test! {\n    not_double_ended_rsplitn {\n        (\"foo::bar::baz\", 2, \"::\") -> [\"baz\", \"foo::bar\"];\n    }\n    with str::rsplitn;\n}\n\n#[test]\nfn different_str_pattern_forwarding_lifetimes() {\n    use std::str::pattern::Pattern;\n\n    fn foo<'a, P>(p: P)\n    where\n        for<'b> &'b P: Pattern<'a>,\n    {\n        for _ in 0..3 {\n            \"asdf\".find(&p);\n        }\n    }\n\n    foo::<&str>(\"x\");\n}\n\n#[test]\nfn test_str_multiline() {\n    let a: String = \"this \\\nis a test\"\n        .to_string();\n    let b: String = \"this \\\n              is \\\n              another \\\n              test\"\n        .to_string();\n    assert_eq!(a, \"this is a test\".to_string());\n    assert_eq!(b, \"this is another test\".to_string());\n}\n\n#[test]\nfn test_str_escapes() {\n    let x = \"\\\\\\\\\\\n    \";\n    assert_eq!(x, r\"\\\\\"); // extraneous whitespace stripped\n}\n\n#[test]\nfn const_str_ptr() {\n    const A: [u8; 2] = ['h' as u8, 'i' as u8];\n    const B: &'static [u8; 2] = &A;\n    const C: *const u8 = B as *const u8;\n\n    // Miri does not deduplicate consts (https://github.com/rust-lang/miri/issues/131)\n    #[cfg(not(miri))]\n    {\n        let foo = &A as *const u8;\n        assert_eq!(foo, C);\n    }\n\n    unsafe {\n        assert_eq!(from_utf8_unchecked(&A), \"hi\");\n        assert_eq!(*C, A[0]);\n        assert_eq!(*(&B[0] as *const u8), A[0]);\n    }\n}\n\n#[test]\nfn utf8() {\n    let yen: char = '¥'; // 0xa5\n    let c_cedilla: char = 'ç'; // 0xe7\n    let thorn: char = 'þ'; // 0xfe\n    let y_diaeresis: char = 'ÿ'; // 0xff\n    let pi: char = 'Π'; // 0x3a0\n\n    assert_eq!(yen as isize, 0xa5);\n    assert_eq!(c_cedilla as isize, 0xe7);\n    assert_eq!(thorn as isize, 0xfe);\n    assert_eq!(y_diaeresis as isize, 0xff);\n    assert_eq!(pi as isize, 0x3a0);\n\n    assert_eq!(pi as isize, '\\u{3a0}' as isize);\n    assert_eq!('\\x0a' as isize, '\\n' as isize);\n\n    let bhutan: String = \"འབྲུག་ཡུལ།\".to_string();\n    let japan: String = \"日本\".to_string();\n    let uzbekistan: String = \"Ўзбекистон\".to_string();\n    let austria: String = \"Österreich\".to_string();\n\n    let bhutan_e: String =\n        \"\\u{f60}\\u{f56}\\u{fb2}\\u{f74}\\u{f42}\\u{f0b}\\u{f61}\\u{f74}\\u{f63}\\u{f0d}\".to_string();\n    let japan_e: String = \"\\u{65e5}\\u{672c}\".to_string();\n    let uzbekistan_e: String =\n        \"\\u{40e}\\u{437}\\u{431}\\u{435}\\u{43a}\\u{438}\\u{441}\\u{442}\\u{43e}\\u{43d}\".to_string();\n    let austria_e: String = \"\\u{d6}sterreich\".to_string();\n\n    let oo: char = 'Ö';\n    assert_eq!(oo as isize, 0xd6);\n\n    fn check_str_eq(a: String, b: String) {\n        let mut i: isize = 0;\n        for ab in a.bytes() {\n            println!(\"{}\", i);\n            println!(\"{}\", ab);\n            let bb: u8 = b.as_bytes()[i as usize];\n            println!(\"{}\", bb);\n            assert_eq!(ab, bb);\n            i += 1;\n        }\n    }\n\n    check_str_eq(bhutan, bhutan_e);\n    check_str_eq(japan, japan_e);\n    check_str_eq(uzbekistan, uzbekistan_e);\n    check_str_eq(austria, austria_e);\n}\n\n#[test]\nfn utf8_chars() {\n    // Chars of 1, 2, 3, and 4 bytes\n    let chs: Vec<char> = vec!['e', 'é', '€', '\\u{10000}'];\n    let s: String = chs.iter().cloned().collect();\n    let schs: Vec<char> = s.chars().collect();\n\n    assert_eq!(s.len(), 10);\n    assert_eq!(s.chars().count(), 4);\n    assert_eq!(schs.len(), 4);\n    assert_eq!(schs.iter().cloned().collect::<String>(), s);\n\n    assert!((from_utf8(s.as_bytes()).is_ok()));\n    // invalid prefix\n    assert!((!from_utf8(&[0x80]).is_ok()));\n    // invalid 2 byte prefix\n    assert!((!from_utf8(&[0xc0]).is_ok()));\n    assert!((!from_utf8(&[0xc0, 0x10]).is_ok()));\n    // invalid 3 byte prefix\n    assert!((!from_utf8(&[0xe0]).is_ok()));\n    assert!((!from_utf8(&[0xe0, 0x10]).is_ok()));\n    assert!((!from_utf8(&[0xe0, 0xff, 0x10]).is_ok()));\n    // invalid 4 byte prefix\n    assert!((!from_utf8(&[0xf0]).is_ok()));\n    assert!((!from_utf8(&[0xf0, 0x10]).is_ok()));\n    assert!((!from_utf8(&[0xf0, 0xff, 0x10]).is_ok()));\n    assert!((!from_utf8(&[0xf0, 0xff, 0xff, 0x10]).is_ok()));\n}\nuse std::collections::BTreeSet;\n\n#[test]\nfn test_hash() {\n    use crate::hash;\n\n    let mut x = BTreeSet::new();\n    let mut y = BTreeSet::new();\n\n    x.insert(1);\n    x.insert(2);\n    x.insert(3);\n\n    y.insert(3);\n    y.insert(2);\n    y.insert(1);\n\n    assert_eq!(hash(&x), hash(&y));\n}\nuse std::borrow::Cow;\nuse std::cell::Cell;\nuse std::collections::TryReserveError::*;\nuse std::ops::Bound;\nuse std::ops::Bound::*;\nuse std::ops::RangeBounds;\nuse std::panic;\nuse std::str;\n\npub trait IntoCow<'a, B: ?Sized>\nwhere\n    B: ToOwned,\n{\n    fn into_cow(self) -> Cow<'a, B>;\n}\n\nimpl<'a> IntoCow<'a, str> for String {\n    fn into_cow(self) -> Cow<'a, str> {\n        Cow::Owned(self)\n    }\n}\n\nimpl<'a> IntoCow<'a, str> for &'a str {\n    fn into_cow(self) -> Cow<'a, str> {\n        Cow::Borrowed(self)\n    }\n}\n\n#[test]\nfn test_from_str() {\n    let owned: Option<std::string::String> = \"string\".parse().ok();\n    assert_eq!(owned.as_ref().map(|s| &**s), Some(\"string\"));\n}\n\n#[test]\nfn test_from_cow_str() {\n    assert_eq!(String::from(Cow::Borrowed(\"string\")), \"string\");\n    assert_eq!(String::from(Cow::Owned(String::from(\"string\"))), \"string\");\n}\n\n#[test]\nfn test_unsized_to_string() {\n    let s: &str = \"abc\";\n    let _: String = (*s).to_string();\n}\n\n#[test]\nfn test_from_utf8() {\n    let xs = b\"hello\".to_vec();\n    assert_eq!(String::from_utf8(xs).unwrap(), String::from(\"hello\"));\n\n    let xs = \"ศไทย中华Việt Nam\".as_bytes().to_vec();\n    assert_eq!(String::from_utf8(xs).unwrap(), String::from(\"ศไทย中华Việt Nam\"));\n\n    let xs = b\"hello\\xFF\".to_vec();\n    let err = String::from_utf8(xs).unwrap_err();\n    assert_eq!(err.as_bytes(), b\"hello\\xff\");\n    let err_clone = err.clone();\n    assert_eq!(err, err_clone);\n    assert_eq!(err.into_bytes(), b\"hello\\xff\".to_vec());\n    assert_eq!(err_clone.utf8_error().valid_up_to(), 5);\n}\n\n#[test]\nfn test_from_utf8_lossy() {\n    let xs = b\"hello\";\n    let ys: Cow<'_, str> = \"hello\".into_cow();\n    assert_eq!(String::from_utf8_lossy(xs), ys);\n\n    let xs = \"ศไทย中华Việt Nam\".as_bytes();\n    let ys: Cow<'_, str> = \"ศไทย中华Việt Nam\".into_cow();\n    assert_eq!(String::from_utf8_lossy(xs), ys);\n\n    let xs = b\"Hello\\xC2 There\\xFF Goodbye\";\n    assert_eq!(\n        String::from_utf8_lossy(xs),\n        String::from(\"Hello\\u{FFFD} There\\u{FFFD} Goodbye\").into_cow()\n    );\n\n    let xs = b\"Hello\\xC0\\x80 There\\xE6\\x83 Goodbye\";\n    assert_eq!(\n        String::from_utf8_lossy(xs),\n        String::from(\"Hello\\u{FFFD}\\u{FFFD} There\\u{FFFD} Goodbye\").into_cow()\n    );\n\n    let xs = b\"\\xF5foo\\xF5\\x80bar\";\n    assert_eq!(\n        String::from_utf8_lossy(xs),\n        String::from(\"\\u{FFFD}foo\\u{FFFD}\\u{FFFD}bar\").into_cow()\n    );\n\n    let xs = b\"\\xF1foo\\xF1\\x80bar\\xF1\\x80\\x80baz\";\n    assert_eq!(\n        String::from_utf8_lossy(xs),\n        String::from(\"\\u{FFFD}foo\\u{FFFD}bar\\u{FFFD}baz\").into_cow()\n    );\n\n    let xs = b\"\\xF4foo\\xF4\\x80bar\\xF4\\xBFbaz\";\n    assert_eq!(\n        String::from_utf8_lossy(xs),\n        String::from(\"\\u{FFFD}foo\\u{FFFD}bar\\u{FFFD}\\u{FFFD}baz\").into_cow()\n    );\n\n    let xs = b\"\\xF0\\x80\\x80\\x80foo\\xF0\\x90\\x80\\x80bar\";\n    assert_eq!(\n        String::from_utf8_lossy(xs),\n        String::from(\"\\u{FFFD}\\u{FFFD}\\u{FFFD}\\u{FFFD}foo\\u{10000}bar\").into_cow()\n    );\n\n    // surrogates\n    let xs = b\"\\xED\\xA0\\x80foo\\xED\\xBF\\xBFbar\";\n    assert_eq!(\n        String::from_utf8_lossy(xs),\n        String::from(\"\\u{FFFD}\\u{FFFD}\\u{FFFD}foo\\u{FFFD}\\u{FFFD}\\u{FFFD}bar\").into_cow()\n    );\n}\n\n#[test]\nfn test_from_utf16() {\n    let pairs = [\n        (\n            String::from(\"𐍅𐌿𐌻𐍆𐌹𐌻𐌰\\n\"),\n            vec![\n                0xd800, 0xdf45, 0xd800, 0xdf3f, 0xd800, 0xdf3b, 0xd800, 0xdf46, 0xd800, 0xdf39,\n                0xd800, 0xdf3b, 0xd800, 0xdf30, 0x000a,\n            ],\n        ),\n        (\n            String::from(\"𐐒𐑉𐐮𐑀𐐲𐑋 𐐏𐐲𐑍\\n\"),\n            vec![\n                0xd801, 0xdc12, 0xd801, 0xdc49, 0xd801, 0xdc2e, 0xd801, 0xdc40, 0xd801, 0xdc32,\n                0xd801, 0xdc4b, 0x0020, 0xd801, 0xdc0f, 0xd801, 0xdc32, 0xd801, 0xdc4d, 0x000a,\n            ],\n        ),\n        (\n            String::from(\"𐌀𐌖𐌋𐌄𐌑𐌉·𐌌𐌄𐌕𐌄𐌋𐌉𐌑\\n\"),\n            vec![\n                0xd800, 0xdf00, 0xd800, 0xdf16, 0xd800, 0xdf0b, 0xd800, 0xdf04, 0xd800, 0xdf11,\n                0xd800, 0xdf09, 0x00b7, 0xd800, 0xdf0c, 0xd800, 0xdf04, 0xd800, 0xdf15, 0xd800,\n                0xdf04, 0xd800, 0xdf0b, 0xd800, 0xdf09, 0xd800, 0xdf11, 0x000a,\n            ],\n        ),\n        (\n            String::from(\"𐒋𐒘𐒈𐒑𐒛𐒒 𐒕𐒓 𐒈𐒚𐒍 𐒏𐒜𐒒𐒖𐒆 𐒕𐒆\\n\"),\n            vec![\n                0xd801, 0xdc8b, 0xd801, 0xdc98, 0xd801, 0xdc88, 0xd801, 0xdc91, 0xd801, 0xdc9b,\n                0xd801, 0xdc92, 0x0020, 0xd801, 0xdc95, 0xd801, 0xdc93, 0x0020, 0xd801, 0xdc88,\n                0xd801, 0xdc9a, 0xd801, 0xdc8d, 0x0020, 0xd801, 0xdc8f, 0xd801, 0xdc9c, 0xd801,\n                0xdc92, 0xd801, 0xdc96, 0xd801, 0xdc86, 0x0020, 0xd801, 0xdc95, 0xd801, 0xdc86,\n                0x000a,\n            ],\n        ),\n        // Issue #12318, even-numbered non-BMP planes\n        (String::from(\"\\u{20000}\"), vec![0xD840, 0xDC00]),\n    ];\n\n    for p in &pairs {\n        let (s, u) = (*p).clone();\n        let s_as_utf16 = s.encode_utf16().collect::<Vec<u16>>();\n        let u_as_string = String::from_utf16(&u).unwrap();\n\n        assert!(core::char::decode_utf16(u.iter().cloned()).all(|r| r.is_ok()));\n        assert_eq!(s_as_utf16, u);\n\n        assert_eq!(u_as_string, s);\n        assert_eq!(String::from_utf16_lossy(&u), s);\n\n        assert_eq!(String::from_utf16(&s_as_utf16).unwrap(), s);\n        assert_eq!(u_as_string.encode_utf16().collect::<Vec<u16>>(), u);\n    }\n}\n\n#[test]\nfn test_utf16_invalid() {\n    // completely positive cases tested above.\n    // lead + eof\n    assert!(String::from_utf16(&[0xD800]).is_err());\n    // lead + lead\n    assert!(String::from_utf16(&[0xD800, 0xD800]).is_err());\n\n    // isolated trail\n    assert!(String::from_utf16(&[0x0061, 0xDC00]).is_err());\n\n    // general\n    assert!(String::from_utf16(&[0xD800, 0xd801, 0xdc8b, 0xD800]).is_err());\n}\n\n#[test]\nfn test_from_utf16_lossy() {\n    // completely positive cases tested above.\n    // lead + eof\n    assert_eq!(String::from_utf16_lossy(&[0xD800]), String::from(\"\\u{FFFD}\"));\n    // lead + lead\n    assert_eq!(String::from_utf16_lossy(&[0xD800, 0xD800]), String::from(\"\\u{FFFD}\\u{FFFD}\"));\n\n    // isolated trail\n    assert_eq!(String::from_utf16_lossy(&[0x0061, 0xDC00]), String::from(\"a\\u{FFFD}\"));\n\n    // general\n    assert_eq!(\n        String::from_utf16_lossy(&[0xD800, 0xd801, 0xdc8b, 0xD800]),\n        String::from(\"\\u{FFFD}𐒋\\u{FFFD}\")\n    );\n}\n\n#[test]\nfn test_push_bytes() {\n    let mut s = String::from(\"ABC\");\n    unsafe {\n        let mv = s.as_mut_vec();\n        mv.extend_from_slice(&[b'D']);\n    }\n    assert_eq!(s, \"ABCD\");\n}\n\n#[test]\nfn test_push_str() {\n    let mut s = String::new();\n    s.push_str(\"\");\n    assert_eq!(&s[0..], \"\");\n    s.push_str(\"abc\");\n    assert_eq!(&s[0..], \"abc\");\n    s.push_str(\"ประเทศไทย中华Việt Nam\");\n    assert_eq!(&s[0..], \"abcประเทศไทย中华Việt Nam\");\n}\n\n#[test]\nfn test_add_assign() {\n    let mut s = String::new();\n    s += \"\";\n    assert_eq!(s.as_str(), \"\");\n    s += \"abc\";\n    assert_eq!(s.as_str(), \"abc\");\n    s += \"ประเทศไทย中华Việt Nam\";\n    assert_eq!(s.as_str(), \"abcประเทศไทย中华Việt Nam\");\n}\n\n#[test]\nfn test_push() {\n    let mut data = String::from(\"ประเทศไทย中\");\n    data.push('华');\n    data.push('b'); // 1 byte\n    data.push('¢'); // 2 byte\n    data.push('€'); // 3 byte\n    data.push('𤭢'); // 4 byte\n    assert_eq!(data, \"ประเทศไทย中华b¢€𤭢\");\n}\n\n#[test]\nfn test_pop() {\n    let mut data = String::from(\"ประเทศไทย中华b¢€𤭢\");\n    assert_eq!(data.pop().unwrap(), '𤭢'); // 4 bytes\n    assert_eq!(data.pop().unwrap(), '€'); // 3 bytes\n    assert_eq!(data.pop().unwrap(), '¢'); // 2 bytes\n    assert_eq!(data.pop().unwrap(), 'b'); // 1 bytes\n    assert_eq!(data.pop().unwrap(), '华');\n    assert_eq!(data, \"ประเทศไทย中\");\n}\n\n#[test]\nfn test_split_off_empty() {\n    let orig = \"Hello, world!\";\n    let mut split = String::from(orig);\n    let empty: String = split.split_off(orig.len());\n    assert!(empty.is_empty());\n}\n\n#[test]\n#[should_panic]\nfn test_split_off_past_end() {\n    let orig = \"Hello, world!\";\n    let mut split = String::from(orig);\n    let _ = split.split_off(orig.len() + 1);\n}\n\n#[test]\n#[should_panic]\nfn test_split_off_mid_char() {\n    let mut shan = String::from(\"山\");\n    let _broken_mountain = shan.split_off(1);\n}\n\n#[test]\nfn test_split_off_ascii() {\n    let mut ab = String::from(\"ABCD\");\n    let orig_capacity = ab.capacity();\n    let cd = ab.split_off(2);\n    assert_eq!(ab, \"AB\");\n    assert_eq!(cd, \"CD\");\n    assert_eq!(ab.capacity(), orig_capacity);\n}\n\n#[test]\nfn test_split_off_unicode() {\n    let mut nihon = String::from(\"日本語\");\n    let orig_capacity = nihon.capacity();\n    let go = nihon.split_off(\"日本\".len());\n    assert_eq!(nihon, \"日本\");\n    assert_eq!(go, \"語\");\n    assert_eq!(nihon.capacity(), orig_capacity);\n}\n\n#[test]\nfn test_str_truncate() {\n    let mut s = String::from(\"12345\");\n    s.truncate(5);\n    assert_eq!(s, \"12345\");\n    s.truncate(3);\n    assert_eq!(s, \"123\");\n    s.truncate(0);\n    assert_eq!(s, \"\");\n\n    let mut s = String::from(\"12345\");\n    let p = s.as_ptr();\n    s.truncate(3);\n    s.push_str(\"6\");\n    let p_ = s.as_ptr();\n    assert_eq!(p_, p);\n}\n\n#[test]\nfn test_str_truncate_invalid_len() {\n    let mut s = String::from(\"12345\");\n    s.truncate(6);\n    assert_eq!(s, \"12345\");\n}\n\n#[test]\n#[should_panic]\nfn test_str_truncate_split_codepoint() {\n    let mut s = String::from(\"\\u{FC}\"); // ü\n    s.truncate(1);\n}\n\n#[test]\nfn test_str_clear() {\n    let mut s = String::from(\"12345\");\n    s.clear();\n    assert_eq!(s.len(), 0);\n    assert_eq!(s, \"\");\n}\n\n#[test]\nfn test_str_add() {\n    let a = String::from(\"12345\");\n    let b = a + \"2\";\n    let b = b + \"2\";\n    assert_eq!(b.len(), 7);\n    assert_eq!(b, \"1234522\");\n}\n\n#[test]\nfn remove() {\n    let mut s = \"ศไทย中华Việt Nam; foobar\".to_string();\n    assert_eq!(s.remove(0), 'ศ');\n    assert_eq!(s.len(), 33);\n    assert_eq!(s, \"ไทย中华Việt Nam; foobar\");\n    assert_eq!(s.remove(17), 'ệ');\n    assert_eq!(s, \"ไทย中华Vit Nam; foobar\");\n}\n\n#[test]\n#[should_panic]\nfn remove_bad() {\n    \"ศ\".to_string().remove(1);\n}\n\n#[test]\nfn test_remove_matches() {\n    let mut s = \"abc\".to_string();\n\n    s.remove_matches('b');\n    assert_eq!(s, \"ac\");\n    s.remove_matches('b');\n    assert_eq!(s, \"ac\");\n\n    let mut s = \"abcb\".to_string();\n\n    s.remove_matches('b');\n    assert_eq!(s, \"ac\");\n\n    let mut s = \"ศไทย中华Việt Nam; foobarศ\".to_string();\n    s.remove_matches('ศ');\n    assert_eq!(s, \"ไทย中华Việt Nam; foobar\");\n\n    let mut s = \"\".to_string();\n    s.remove_matches(\"\");\n    assert_eq!(s, \"\");\n\n    let mut s = \"aaaaa\".to_string();\n    s.remove_matches('a');\n    assert_eq!(s, \"\");\n}\n\n#[test]\nfn test_retain() {\n    let mut s = String::from(\"α_β_γ\");\n\n    s.retain(|_| true);\n    assert_eq!(s, \"α_β_γ\");\n\n    s.retain(|c| c != '_');\n    assert_eq!(s, \"αβγ\");\n\n    s.retain(|c| c != 'β');\n    assert_eq!(s, \"αγ\");\n\n    s.retain(|c| c == 'α');\n    assert_eq!(s, \"α\");\n\n    s.retain(|_| false);\n    assert_eq!(s, \"\");\n\n    let mut s = String::from(\"0è0\");\n    let _ = panic::catch_unwind(panic::AssertUnwindSafe(|| {\n        let mut count = 0;\n        s.retain(|_| {\n            count += 1;\n            match count {\n                1 => false,\n                2 => true,\n                _ => panic!(),\n            }\n        });\n    }));\n    assert!(std::str::from_utf8(s.as_bytes()).is_ok());\n}\n\n#[test]\nfn insert() {\n    let mut s = \"foobar\".to_string();\n    s.insert(0, 'ệ');\n    assert_eq!(s, \"ệfoobar\");\n    s.insert(6, 'ย');\n    assert_eq!(s, \"ệfooยbar\");\n}\n\n#[test]\n#[should_panic]\nfn insert_bad1() {\n    \"\".to_string().insert(1, 't');\n}\n#[test]\n#[should_panic]\nfn insert_bad2() {\n    \"ệ\".to_string().insert(1, 't');\n}\n\n#[test]\nfn test_slicing() {\n    let s = \"foobar\".to_string();\n    assert_eq!(\"foobar\", &s[..]);\n    assert_eq!(\"foo\", &s[..3]);\n    assert_eq!(\"bar\", &s[3..]);\n    assert_eq!(\"oob\", &s[1..4]);\n}\n\n#[test]\nfn test_simple_types() {\n    assert_eq!(1.to_string(), \"1\");\n    assert_eq!((-1).to_string(), \"-1\");\n    assert_eq!(200.to_string(), \"200\");\n    assert_eq!(2.to_string(), \"2\");\n    assert_eq!(true.to_string(), \"true\");\n    assert_eq!(false.to_string(), \"false\");\n    assert_eq!((\"hi\".to_string()).to_string(), \"hi\");\n}\n\n#[test]\nfn test_vectors() {\n    let x: Vec<i32> = vec![];\n    assert_eq!(format!(\"{:?}\", x), \"[]\");\n    assert_eq!(format!(\"{:?}\", vec![1]), \"[1]\");\n    assert_eq!(format!(\"{:?}\", vec![1, 2, 3]), \"[1, 2, 3]\");\n    assert!(format!(\"{:?}\", vec![vec![], vec![1], vec![1, 1]]) == \"[[], [1], [1, 1]]\");\n}\n\n#[test]\nfn test_from_iterator() {\n    let s = \"ศไทย中华Việt Nam\".to_string();\n    let t = \"ศไทย中华\";\n    let u = \"Việt Nam\";\n\n    let a: String = s.chars().collect();\n    assert_eq!(s, a);\n\n    let mut b = t.to_string();\n    b.extend(u.chars());\n    assert_eq!(s, b);\n\n    let c: String = vec![t, u].into_iter().collect();\n    assert_eq!(s, c);\n\n    let mut d = t.to_string();\n    d.extend(vec![u]);\n    assert_eq!(s, d);\n}\n\n#[test]\nfn test_drain() {\n    let mut s = String::from(\"αβγ\");\n    assert_eq!(s.drain(2..4).collect::<String>(), \"β\");\n    assert_eq!(s, \"αγ\");\n\n    let mut t = String::from(\"abcd\");\n    t.drain(..0);\n    assert_eq!(t, \"abcd\");\n    t.drain(..1);\n    assert_eq!(t, \"bcd\");\n    t.drain(3..);\n    assert_eq!(t, \"bcd\");\n    t.drain(..);\n    assert_eq!(t, \"\");\n}\n\n#[test]\n#[should_panic]\nfn test_drain_start_overflow() {\n    let mut s = String::from(\"abc\");\n    s.drain((Excluded(usize::MAX), Included(0)));\n}\n\n#[test]\n#[should_panic]\nfn test_drain_end_overflow() {\n    let mut s = String::from(\"abc\");\n    s.drain((Included(0), Included(usize::MAX)));\n}\n\n#[test]\nfn test_replace_range() {\n    let mut s = \"Hello, world!\".to_owned();\n    s.replace_range(7..12, \"世界\");\n    assert_eq!(s, \"Hello, 世界!\");\n}\n\n#[test]\n#[should_panic]\nfn test_replace_range_char_boundary() {\n    let mut s = \"Hello, 世界!\".to_owned();\n    s.replace_range(..8, \"\");\n}\n\n#[test]\nfn test_replace_range_inclusive_range() {\n    let mut v = String::from(\"12345\");\n    v.replace_range(2..=3, \"789\");\n    assert_eq!(v, \"127895\");\n    v.replace_range(1..=2, \"A\");\n    assert_eq!(v, \"1A895\");\n}\n\n#[test]\n#[should_panic]\nfn test_replace_range_out_of_bounds() {\n    let mut s = String::from(\"12345\");\n    s.replace_range(5..6, \"789\");\n}\n\n#[test]\n#[should_panic]\nfn test_replace_range_inclusive_out_of_bounds() {\n    let mut s = String::from(\"12345\");\n    s.replace_range(5..=5, \"789\");\n}\n\n#[test]\n#[should_panic]\nfn test_replace_range_start_overflow() {\n    let mut s = String::from(\"123\");\n    s.replace_range((Excluded(usize::MAX), Included(0)), \"\");\n}\n\n#[test]\n#[should_panic]\nfn test_replace_range_end_overflow() {\n    let mut s = String::from(\"456\");\n    s.replace_range((Included(0), Included(usize::MAX)), \"\");\n}\n\n#[test]\nfn test_replace_range_empty() {\n    let mut s = String::from(\"12345\");\n    s.replace_range(1..2, \"\");\n    assert_eq!(s, \"1345\");\n}\n\n#[test]\nfn test_replace_range_unbounded() {\n    let mut s = String::from(\"12345\");\n    s.replace_range(.., \"\");\n    assert_eq!(s, \"\");\n}\n\n#[test]\nfn test_replace_range_evil_start_bound() {\n    struct EvilRange(Cell<bool>);\n\n    impl RangeBounds<usize> for EvilRange {\n        fn start_bound(&self) -> Bound<&usize> {\n            Bound::Included(if self.0.get() {\n                &1\n            } else {\n                self.0.set(true);\n                &0\n            })\n        }\n        fn end_bound(&self) -> Bound<&usize> {\n            Bound::Unbounded\n        }\n    }\n\n    let mut s = String::from(\"🦀\");\n    s.replace_range(EvilRange(Cell::new(false)), \"\");\n    assert_eq!(Ok(\"\"), str::from_utf8(s.as_bytes()));\n}\n\n#[test]\nfn test_replace_range_evil_end_bound() {\n    struct EvilRange(Cell<bool>);\n\n    impl RangeBounds<usize> for EvilRange {\n        fn start_bound(&self) -> Bound<&usize> {\n            Bound::Included(&0)\n        }\n        fn end_bound(&self) -> Bound<&usize> {\n            Bound::Excluded(if self.0.get() {\n                &3\n            } else {\n                self.0.set(true);\n                &4\n            })\n        }\n    }\n\n    let mut s = String::from(\"🦀\");\n    s.replace_range(EvilRange(Cell::new(false)), \"\");\n    assert_eq!(Ok(\"\"), str::from_utf8(s.as_bytes()));\n}\n\n#[test]\nfn test_extend_ref() {\n    let mut a = \"foo\".to_string();\n    a.extend(&['b', 'a', 'r']);\n\n    assert_eq!(&a, \"foobar\");\n}\n\n#[test]\nfn test_into_boxed_str() {\n    let xs = String::from(\"hello my name is bob\");\n    let ys = xs.into_boxed_str();\n    assert_eq!(&*ys, \"hello my name is bob\");\n}\n\n#[test]\nfn test_reserve_exact() {\n    // This is all the same as test_reserve\n\n    let mut s = String::new();\n    assert_eq!(s.capacity(), 0);\n\n    s.reserve_exact(2);\n    assert!(s.capacity() >= 2);\n\n    for _i in 0..16 {\n        s.push('0');\n    }\n\n    assert!(s.capacity() >= 16);\n    s.reserve_exact(16);\n    assert!(s.capacity() >= 32);\n\n    s.push('0');\n\n    s.reserve_exact(16);\n    assert!(s.capacity() >= 33)\n}\n\n#[test]\n#[cfg_attr(miri, ignore)] // Miri does not support signalling OOM\n#[cfg_attr(target_os = \"android\", ignore)] // Android used in CI has a broken dlmalloc\nfn test_try_reserve() {\n    // These are the interesting cases:\n    // * exactly isize::MAX should never trigger a CapacityOverflow (can be OOM)\n    // * > isize::MAX should always fail\n    //    * On 16/32-bit should CapacityOverflow\n    //    * On 64-bit should OOM\n    // * overflow may trigger when adding `len` to `cap` (in number of elements)\n    // * overflow may trigger when multiplying `new_cap` by size_of::<T> (to get bytes)\n\n    const MAX_CAP: usize = isize::MAX as usize;\n    const MAX_USIZE: usize = usize::MAX;\n\n    // On 16/32-bit, we check that allocations don't exceed isize::MAX,\n    // on 64-bit, we assume the OS will give an OOM for such a ridiculous size.\n    // Any platform that succeeds for these requests is technically broken with\n    // ptr::offset because LLVM is the worst.\n    let guards_against_isize = usize::BITS < 64;\n\n    {\n        // Note: basic stuff is checked by test_reserve\n        let mut empty_string: String = String::new();\n\n        // Check isize::MAX doesn't count as an overflow\n        if let Err(CapacityOverflow) = empty_string.try_reserve(MAX_CAP) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        // Play it again, frank! (just to be sure)\n        if let Err(CapacityOverflow) = empty_string.try_reserve(MAX_CAP) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n\n        if guards_against_isize {\n            // Check isize::MAX + 1 does count as overflow\n            if let Err(CapacityOverflow) = empty_string.try_reserve(MAX_CAP + 1) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an overflow!\")\n            }\n\n            // Check usize::MAX does count as overflow\n            if let Err(CapacityOverflow) = empty_string.try_reserve(MAX_USIZE) {\n            } else {\n                panic!(\"usize::MAX should trigger an overflow!\")\n            }\n        } else {\n            // Check isize::MAX + 1 is an OOM\n            if let Err(AllocError { .. }) = empty_string.try_reserve(MAX_CAP + 1) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an OOM!\")\n            }\n\n            // Check usize::MAX is an OOM\n            if let Err(AllocError { .. }) = empty_string.try_reserve(MAX_USIZE) {\n            } else {\n                panic!(\"usize::MAX should trigger an OOM!\")\n            }\n        }\n    }\n\n    {\n        // Same basic idea, but with non-zero len\n        let mut ten_bytes: String = String::from(\"0123456789\");\n\n        if let Err(CapacityOverflow) = ten_bytes.try_reserve(MAX_CAP - 10) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        if let Err(CapacityOverflow) = ten_bytes.try_reserve(MAX_CAP - 10) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        if guards_against_isize {\n            if let Err(CapacityOverflow) = ten_bytes.try_reserve(MAX_CAP - 9) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an overflow!\");\n            }\n        } else {\n            if let Err(AllocError { .. }) = ten_bytes.try_reserve(MAX_CAP - 9) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an OOM!\")\n            }\n        }\n        // Should always overflow in the add-to-len\n        if let Err(CapacityOverflow) = ten_bytes.try_reserve(MAX_USIZE) {\n        } else {\n            panic!(\"usize::MAX should trigger an overflow!\")\n        }\n    }\n}\n\n#[test]\n#[cfg_attr(miri, ignore)] // Miri does not support signalling OOM\n#[cfg_attr(target_os = \"android\", ignore)] // Android used in CI has a broken dlmalloc\nfn test_try_reserve_exact() {\n    // This is exactly the same as test_try_reserve with the method changed.\n    // See that test for comments.\n\n    const MAX_CAP: usize = isize::MAX as usize;\n    const MAX_USIZE: usize = usize::MAX;\n\n    let guards_against_isize = usize::BITS < 64;\n\n    {\n        let mut empty_string: String = String::new();\n\n        if let Err(CapacityOverflow) = empty_string.try_reserve_exact(MAX_CAP) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        if let Err(CapacityOverflow) = empty_string.try_reserve_exact(MAX_CAP) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n\n        if guards_against_isize {\n            if let Err(CapacityOverflow) = empty_string.try_reserve_exact(MAX_CAP + 1) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an overflow!\")\n            }\n\n            if let Err(CapacityOverflow) = empty_string.try_reserve_exact(MAX_USIZE) {\n            } else {\n                panic!(\"usize::MAX should trigger an overflow!\")\n            }\n        } else {\n            if let Err(AllocError { .. }) = empty_string.try_reserve_exact(MAX_CAP + 1) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an OOM!\")\n            }\n\n            if let Err(AllocError { .. }) = empty_string.try_reserve_exact(MAX_USIZE) {\n            } else {\n                panic!(\"usize::MAX should trigger an OOM!\")\n            }\n        }\n    }\n\n    {\n        let mut ten_bytes: String = String::from(\"0123456789\");\n\n        if let Err(CapacityOverflow) = ten_bytes.try_reserve_exact(MAX_CAP - 10) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        if let Err(CapacityOverflow) = ten_bytes.try_reserve_exact(MAX_CAP - 10) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        if guards_against_isize {\n            if let Err(CapacityOverflow) = ten_bytes.try_reserve_exact(MAX_CAP - 9) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an overflow!\");\n            }\n        } else {\n            if let Err(AllocError { .. }) = ten_bytes.try_reserve_exact(MAX_CAP - 9) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an OOM!\")\n            }\n        }\n        if let Err(CapacityOverflow) = ten_bytes.try_reserve_exact(MAX_USIZE) {\n        } else {\n            panic!(\"usize::MAX should trigger an overflow!\")\n        }\n    }\n}\n\n#[test]\nfn test_from_char() {\n    assert_eq!(String::from('a'), 'a'.to_string());\n    let s: String = 'x'.into();\n    assert_eq!(s, 'x'.to_string());\n}\n\n#[test]\nfn test_str_concat() {\n    let a: String = \"hello\".to_string();\n    let b: String = \"world\".to_string();\n    let s: String = format!(\"{}{}\", a, b);\n    assert_eq!(s.as_bytes()[9], 'd' as u8);\n}\nuse std::borrow::{Cow, ToOwned};\nuse std::ffi::{CStr, OsStr};\nuse std::path::Path;\nuse std::rc::Rc;\nuse std::sync::Arc;\n\nmacro_rules! test_from_cow {\n    ($value:ident => $($ty:ty),+) => {$(\n        let borrowed = <$ty>::from(Cow::Borrowed($value));\n        let owned = <$ty>::from(Cow::Owned($value.to_owned()));\n        assert_eq!($value, &*borrowed);\n        assert_eq!($value, &*owned);\n    )+};\n    ($value:ident : & $ty:ty) => {\n        test_from_cow!($value => Box<$ty>, Rc<$ty>, Arc<$ty>);\n    }\n}\n\n#[test]\nfn test_from_cow_slice() {\n    let slice: &[i32] = &[1, 2, 3];\n    test_from_cow!(slice: &[i32]);\n}\n\n#[test]\nfn test_from_cow_str() {\n    let string = \"hello\";\n    test_from_cow!(string: &str);\n}\n\n#[test]\nfn test_from_cow_c_str() {\n    let string = CStr::from_bytes_with_nul(b\"hello\\0\").unwrap();\n    test_from_cow!(string: &CStr);\n}\n\n#[test]\nfn test_from_cow_os_str() {\n    let string = OsStr::new(\"hello\");\n    test_from_cow!(string: &OsStr);\n}\n\n#[test]\nfn test_from_cow_path() {\n    let path = Path::new(\"hello\");\n    test_from_cow!(path: &Path);\n}\n\n#[test]\nfn cow_const() {\n    // test that the methods of `Cow` are usable in a const context\n\n    const COW: Cow<'_, str> = Cow::Borrowed(\"moo\");\n\n    const IS_BORROWED: bool = COW.is_borrowed();\n    assert!(IS_BORROWED);\n\n    const IS_OWNED: bool = COW.is_owned();\n    assert!(!IS_OWNED);\n}\nuse std::borrow::Cow;\nuse std::cell::Cell;\nuse std::collections::TryReserveError::*;\nuse std::fmt::Debug;\nuse std::iter::InPlaceIterable;\nuse std::mem::{size_of, swap};\nuse std::ops::Bound::*;\nuse std::panic::{catch_unwind, AssertUnwindSafe};\nuse std::rc::Rc;\nuse std::sync::atomic::{AtomicU32, Ordering};\nuse std::vec::{Drain, IntoIter};\n\nstruct DropCounter<'a> {\n    count: &'a mut u32,\n}\n\nimpl Drop for DropCounter<'_> {\n    fn drop(&mut self) {\n        *self.count += 1;\n    }\n}\n\n#[test]\nfn test_small_vec_struct() {\n    assert_eq!(size_of::<Vec<u8>>(), size_of::<usize>() * 3);\n}\n\n#[test]\nfn test_double_drop() {\n    struct TwoVec<T> {\n        x: Vec<T>,\n        y: Vec<T>,\n    }\n\n    let (mut count_x, mut count_y) = (0, 0);\n    {\n        let mut tv = TwoVec { x: Vec::new(), y: Vec::new() };\n        tv.x.push(DropCounter { count: &mut count_x });\n        tv.y.push(DropCounter { count: &mut count_y });\n\n        // If Vec had a drop flag, here is where it would be zeroed.\n        // Instead, it should rely on its internal state to prevent\n        // doing anything significant when dropped multiple times.\n        drop(tv.x);\n\n        // Here tv goes out of scope, tv.y should be dropped, but not tv.x.\n    }\n\n    assert_eq!(count_x, 1);\n    assert_eq!(count_y, 1);\n}\n\n#[test]\nfn test_reserve() {\n    let mut v = Vec::new();\n    assert_eq!(v.capacity(), 0);\n\n    v.reserve(2);\n    assert!(v.capacity() >= 2);\n\n    for i in 0..16 {\n        v.push(i);\n    }\n\n    assert!(v.capacity() >= 16);\n    v.reserve(16);\n    assert!(v.capacity() >= 32);\n\n    v.push(16);\n\n    v.reserve(16);\n    assert!(v.capacity() >= 33)\n}\n\n#[test]\nfn test_zst_capacity() {\n    assert_eq!(Vec::<()>::new().capacity(), usize::MAX);\n}\n\n#[test]\nfn test_indexing() {\n    let v: Vec<isize> = vec![10, 20];\n    assert_eq!(v[0], 10);\n    assert_eq!(v[1], 20);\n    let mut x: usize = 0;\n    assert_eq!(v[x], 10);\n    assert_eq!(v[x + 1], 20);\n    x = x + 1;\n    assert_eq!(v[x], 20);\n    assert_eq!(v[x - 1], 10);\n}\n\n#[test]\nfn test_debug_fmt() {\n    let vec1: Vec<isize> = vec![];\n    assert_eq!(\"[]\", format!(\"{:?}\", vec1));\n\n    let vec2 = vec![0, 1];\n    assert_eq!(\"[0, 1]\", format!(\"{:?}\", vec2));\n\n    let slice: &[isize] = &[4, 5];\n    assert_eq!(\"[4, 5]\", format!(\"{:?}\", slice));\n}\n\n#[test]\nfn test_push() {\n    let mut v = vec![];\n    v.push(1);\n    assert_eq!(v, [1]);\n    v.push(2);\n    assert_eq!(v, [1, 2]);\n    v.push(3);\n    assert_eq!(v, [1, 2, 3]);\n}\n\n#[test]\nfn test_extend() {\n    let mut v = Vec::new();\n    let mut w = Vec::new();\n\n    v.extend(w.clone());\n    assert_eq!(v, &[]);\n\n    v.extend(0..3);\n    for i in 0..3 {\n        w.push(i)\n    }\n\n    assert_eq!(v, w);\n\n    v.extend(3..10);\n    for i in 3..10 {\n        w.push(i)\n    }\n\n    assert_eq!(v, w);\n\n    v.extend(w.clone()); // specializes to `append`\n    assert!(v.iter().eq(w.iter().chain(w.iter())));\n\n    // Zero sized types\n    #[derive(PartialEq, Debug)]\n    struct Foo;\n\n    let mut a = Vec::new();\n    let b = vec![Foo, Foo];\n\n    a.extend(b);\n    assert_eq!(a, &[Foo, Foo]);\n\n    // Double drop\n    let mut count_x = 0;\n    {\n        let mut x = Vec::new();\n        let y = vec![DropCounter { count: &mut count_x }];\n        x.extend(y);\n    }\n    assert_eq!(count_x, 1);\n}\n\n#[test]\nfn test_extend_from_slice() {\n    let a: Vec<isize> = vec![1, 2, 3, 4, 5];\n    let b: Vec<isize> = vec![6, 7, 8, 9, 0];\n\n    let mut v: Vec<isize> = a;\n\n    v.extend_from_slice(&b);\n\n    assert_eq!(v, [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]);\n}\n\n#[test]\nfn test_extend_ref() {\n    let mut v = vec![1, 2];\n    v.extend(&[3, 4, 5]);\n\n    assert_eq!(v.len(), 5);\n    assert_eq!(v, [1, 2, 3, 4, 5]);\n\n    let w = vec![6, 7];\n    v.extend(&w);\n\n    assert_eq!(v.len(), 7);\n    assert_eq!(v, [1, 2, 3, 4, 5, 6, 7]);\n}\n\n#[test]\nfn test_slice_from_ref() {\n    let values = vec![1, 2, 3, 4, 5];\n    let slice = &values[1..3];\n\n    assert_eq!(slice, [2, 3]);\n}\n\n#[test]\nfn test_slice_from_mut() {\n    let mut values = vec![1, 2, 3, 4, 5];\n    {\n        let slice = &mut values[2..];\n        assert!(slice == [3, 4, 5]);\n        for p in slice {\n            *p += 2;\n        }\n    }\n\n    assert!(values == [1, 2, 5, 6, 7]);\n}\n\n#[test]\nfn test_slice_to_mut() {\n    let mut values = vec![1, 2, 3, 4, 5];\n    {\n        let slice = &mut values[..2];\n        assert!(slice == [1, 2]);\n        for p in slice {\n            *p += 1;\n        }\n    }\n\n    assert!(values == [2, 3, 3, 4, 5]);\n}\n\n#[test]\nfn test_split_at_mut() {\n    let mut values = vec![1, 2, 3, 4, 5];\n    {\n        let (left, right) = values.split_at_mut(2);\n        {\n            let left: &[_] = left;\n            assert!(&left[..left.len()] == &[1, 2]);\n        }\n        for p in left {\n            *p += 1;\n        }\n\n        {\n            let right: &[_] = right;\n            assert!(&right[..right.len()] == &[3, 4, 5]);\n        }\n        for p in right {\n            *p += 2;\n        }\n    }\n\n    assert_eq!(values, [2, 3, 5, 6, 7]);\n}\n\n#[test]\nfn test_clone() {\n    let v: Vec<i32> = vec![];\n    let w = vec![1, 2, 3];\n\n    assert_eq!(v, v.clone());\n\n    let z = w.clone();\n    assert_eq!(w, z);\n    // they should be disjoint in memory.\n    assert!(w.as_ptr() != z.as_ptr())\n}\n\n#[test]\nfn test_clone_from() {\n    let mut v = vec![];\n    let three: Vec<Box<_>> = vec![box 1, box 2, box 3];\n    let two: Vec<Box<_>> = vec![box 4, box 5];\n    // zero, long\n    v.clone_from(&three);\n    assert_eq!(v, three);\n\n    // equal\n    v.clone_from(&three);\n    assert_eq!(v, three);\n\n    // long, short\n    v.clone_from(&two);\n    assert_eq!(v, two);\n\n    // short, long\n    v.clone_from(&three);\n    assert_eq!(v, three)\n}\n\n#[test]\nfn test_retain() {\n    let mut vec = vec![1, 2, 3, 4];\n    vec.retain(|&x| x % 2 == 0);\n    assert_eq!(vec, [2, 4]);\n}\n\n#[test]\nfn test_retain_pred_panic_with_hole() {\n    let v = (0..5).map(Rc::new).collect::<Vec<_>>();\n    catch_unwind(AssertUnwindSafe(|| {\n        let mut v = v.clone();\n        v.retain(|r| match **r {\n            0 => true,\n            1 => false,\n            2 => true,\n            _ => panic!(),\n        });\n    }))\n    .unwrap_err();\n    // Everything is dropped when predicate panicked.\n    assert!(v.iter().all(|r| Rc::strong_count(r) == 1));\n}\n\n#[test]\nfn test_retain_pred_panic_no_hole() {\n    let v = (0..5).map(Rc::new).collect::<Vec<_>>();\n    catch_unwind(AssertUnwindSafe(|| {\n        let mut v = v.clone();\n        v.retain(|r| match **r {\n            0 | 1 | 2 => true,\n            _ => panic!(),\n        });\n    }))\n    .unwrap_err();\n    // Everything is dropped when predicate panicked.\n    assert!(v.iter().all(|r| Rc::strong_count(r) == 1));\n}\n\n#[test]\nfn test_retain_drop_panic() {\n    struct Wrap(Rc<i32>);\n\n    impl Drop for Wrap {\n        fn drop(&mut self) {\n            if *self.0 == 3 {\n                panic!();\n            }\n        }\n    }\n\n    let v = (0..5).map(|x| Rc::new(x)).collect::<Vec<_>>();\n    catch_unwind(AssertUnwindSafe(|| {\n        let mut v = v.iter().map(|r| Wrap(r.clone())).collect::<Vec<_>>();\n        v.retain(|w| match *w.0 {\n            0 => true,\n            1 => false,\n            2 => true,\n            3 => false, // Drop panic.\n            _ => true,\n        });\n    }))\n    .unwrap_err();\n    // Other elements are dropped when `drop` of one element panicked.\n    // The panicked wrapper also has its Rc dropped.\n    assert!(v.iter().all(|r| Rc::strong_count(r) == 1));\n}\n\n#[test]\nfn test_dedup() {\n    fn case(a: Vec<i32>, b: Vec<i32>) {\n        let mut v = a;\n        v.dedup();\n        assert_eq!(v, b);\n    }\n    case(vec![], vec![]);\n    case(vec![1], vec![1]);\n    case(vec![1, 1], vec![1]);\n    case(vec![1, 2, 3], vec![1, 2, 3]);\n    case(vec![1, 1, 2, 3], vec![1, 2, 3]);\n    case(vec![1, 2, 2, 3], vec![1, 2, 3]);\n    case(vec![1, 2, 3, 3], vec![1, 2, 3]);\n    case(vec![1, 1, 2, 2, 2, 3, 3], vec![1, 2, 3]);\n}\n\n#[test]\nfn test_dedup_by_key() {\n    fn case(a: Vec<i32>, b: Vec<i32>) {\n        let mut v = a;\n        v.dedup_by_key(|i| *i / 10);\n        assert_eq!(v, b);\n    }\n    case(vec![], vec![]);\n    case(vec![10], vec![10]);\n    case(vec![10, 11], vec![10]);\n    case(vec![10, 20, 30], vec![10, 20, 30]);\n    case(vec![10, 11, 20, 30], vec![10, 20, 30]);\n    case(vec![10, 20, 21, 30], vec![10, 20, 30]);\n    case(vec![10, 20, 30, 31], vec![10, 20, 30]);\n    case(vec![10, 11, 20, 21, 22, 30, 31], vec![10, 20, 30]);\n}\n\n#[test]\nfn test_dedup_by() {\n    let mut vec = vec![\"foo\", \"bar\", \"Bar\", \"baz\", \"bar\"];\n    vec.dedup_by(|a, b| a.eq_ignore_ascii_case(b));\n\n    assert_eq!(vec, [\"foo\", \"bar\", \"baz\", \"bar\"]);\n\n    let mut vec = vec![(\"foo\", 1), (\"foo\", 2), (\"bar\", 3), (\"bar\", 4), (\"bar\", 5)];\n    vec.dedup_by(|a, b| {\n        a.0 == b.0 && {\n            b.1 += a.1;\n            true\n        }\n    });\n\n    assert_eq!(vec, [(\"foo\", 3), (\"bar\", 12)]);\n}\n\n#[test]\nfn test_dedup_unique() {\n    let mut v0: Vec<Box<_>> = vec![box 1, box 1, box 2, box 3];\n    v0.dedup();\n    let mut v1: Vec<Box<_>> = vec![box 1, box 2, box 2, box 3];\n    v1.dedup();\n    let mut v2: Vec<Box<_>> = vec![box 1, box 2, box 3, box 3];\n    v2.dedup();\n    // If the boxed pointers were leaked or otherwise misused, valgrind\n    // and/or rt should raise errors.\n}\n\n#[test]\nfn zero_sized_values() {\n    let mut v = Vec::new();\n    assert_eq!(v.len(), 0);\n    v.push(());\n    assert_eq!(v.len(), 1);\n    v.push(());\n    assert_eq!(v.len(), 2);\n    assert_eq!(v.pop(), Some(()));\n    assert_eq!(v.pop(), Some(()));\n    assert_eq!(v.pop(), None);\n\n    assert_eq!(v.iter().count(), 0);\n    v.push(());\n    assert_eq!(v.iter().count(), 1);\n    v.push(());\n    assert_eq!(v.iter().count(), 2);\n\n    for &() in &v {}\n\n    assert_eq!(v.iter_mut().count(), 2);\n    v.push(());\n    assert_eq!(v.iter_mut().count(), 3);\n    v.push(());\n    assert_eq!(v.iter_mut().count(), 4);\n\n    for &mut () in &mut v {}\n    unsafe {\n        v.set_len(0);\n    }\n    assert_eq!(v.iter_mut().count(), 0);\n}\n\n#[test]\nfn test_partition() {\n    assert_eq!(vec![].into_iter().partition(|x: &i32| *x < 3), (vec![], vec![]));\n    assert_eq!(vec![1, 2, 3].into_iter().partition(|x| *x < 4), (vec![1, 2, 3], vec![]));\n    assert_eq!(vec![1, 2, 3].into_iter().partition(|x| *x < 2), (vec![1], vec![2, 3]));\n    assert_eq!(vec![1, 2, 3].into_iter().partition(|x| *x < 0), (vec![], vec![1, 2, 3]));\n}\n\n#[test]\nfn test_zip_unzip() {\n    let z1 = vec![(1, 4), (2, 5), (3, 6)];\n\n    let (left, right): (Vec<_>, Vec<_>) = z1.iter().cloned().unzip();\n\n    assert_eq!((1, 4), (left[0], right[0]));\n    assert_eq!((2, 5), (left[1], right[1]));\n    assert_eq!((3, 6), (left[2], right[2]));\n}\n\n#[test]\nfn test_cmp() {\n    let x: &[isize] = &[1, 2, 3, 4, 5];\n    let cmp: &[isize] = &[1, 2, 3, 4, 5];\n    assert_eq!(&x[..], cmp);\n    let cmp: &[isize] = &[3, 4, 5];\n    assert_eq!(&x[2..], cmp);\n    let cmp: &[isize] = &[1, 2, 3];\n    assert_eq!(&x[..3], cmp);\n    let cmp: &[isize] = &[2, 3, 4];\n    assert_eq!(&x[1..4], cmp);\n\n    let x: Vec<isize> = vec![1, 2, 3, 4, 5];\n    let cmp: &[isize] = &[1, 2, 3, 4, 5];\n    assert_eq!(&x[..], cmp);\n    let cmp: &[isize] = &[3, 4, 5];\n    assert_eq!(&x[2..], cmp);\n    let cmp: &[isize] = &[1, 2, 3];\n    assert_eq!(&x[..3], cmp);\n    let cmp: &[isize] = &[2, 3, 4];\n    assert_eq!(&x[1..4], cmp);\n}\n\n#[test]\nfn test_vec_truncate_drop() {\n    static mut DROPS: u32 = 0;\n    struct Elem(i32);\n    impl Drop for Elem {\n        fn drop(&mut self) {\n            unsafe {\n                DROPS += 1;\n            }\n        }\n    }\n\n    let mut v = vec![Elem(1), Elem(2), Elem(3), Elem(4), Elem(5)];\n    assert_eq!(unsafe { DROPS }, 0);\n    v.truncate(3);\n    assert_eq!(unsafe { DROPS }, 2);\n    v.truncate(0);\n    assert_eq!(unsafe { DROPS }, 5);\n}\n\n#[test]\n#[should_panic]\nfn test_vec_truncate_fail() {\n    struct BadElem(i32);\n    impl Drop for BadElem {\n        fn drop(&mut self) {\n            let BadElem(ref mut x) = *self;\n            if *x == 0xbadbeef {\n                panic!(\"BadElem panic: 0xbadbeef\")\n            }\n        }\n    }\n\n    let mut v = vec![BadElem(1), BadElem(2), BadElem(0xbadbeef), BadElem(4)];\n    v.truncate(0);\n}\n\n#[test]\nfn test_index() {\n    let vec = vec![1, 2, 3];\n    assert!(vec[1] == 2);\n}\n\n#[test]\n#[should_panic]\nfn test_index_out_of_bounds() {\n    let vec = vec![1, 2, 3];\n    let _ = vec[3];\n}\n\n#[test]\n#[should_panic]\nfn test_slice_out_of_bounds_1() {\n    let x = vec![1, 2, 3, 4, 5];\n    &x[!0..];\n}\n\n#[test]\n#[should_panic]\nfn test_slice_out_of_bounds_2() {\n    let x = vec![1, 2, 3, 4, 5];\n    &x[..6];\n}\n\n#[test]\n#[should_panic]\nfn test_slice_out_of_bounds_3() {\n    let x = vec![1, 2, 3, 4, 5];\n    &x[!0..4];\n}\n\n#[test]\n#[should_panic]\nfn test_slice_out_of_bounds_4() {\n    let x = vec![1, 2, 3, 4, 5];\n    &x[1..6];\n}\n\n#[test]\n#[should_panic]\nfn test_slice_out_of_bounds_5() {\n    let x = vec![1, 2, 3, 4, 5];\n    &x[3..2];\n}\n\n#[test]\n#[should_panic]\nfn test_swap_remove_empty() {\n    let mut vec = Vec::<i32>::new();\n    vec.swap_remove(0);\n}\n\n#[test]\nfn test_move_items() {\n    let vec = vec![1, 2, 3];\n    let mut vec2 = vec![];\n    for i in vec {\n        vec2.push(i);\n    }\n    assert_eq!(vec2, [1, 2, 3]);\n}\n\n#[test]\nfn test_move_items_reverse() {\n    let vec = vec![1, 2, 3];\n    let mut vec2 = vec![];\n    for i in vec.into_iter().rev() {\n        vec2.push(i);\n    }\n    assert_eq!(vec2, [3, 2, 1]);\n}\n\n#[test]\nfn test_move_items_zero_sized() {\n    let vec = vec![(), (), ()];\n    let mut vec2 = vec![];\n    for i in vec {\n        vec2.push(i);\n    }\n    assert_eq!(vec2, [(), (), ()]);\n}\n\n#[test]\nfn test_drain_empty_vec() {\n    let mut vec: Vec<i32> = vec![];\n    let mut vec2: Vec<i32> = vec![];\n    for i in vec.drain(..) {\n        vec2.push(i);\n    }\n    assert!(vec.is_empty());\n    assert!(vec2.is_empty());\n}\n\n#[test]\nfn test_drain_items() {\n    let mut vec = vec![1, 2, 3];\n    let mut vec2 = vec![];\n    for i in vec.drain(..) {\n        vec2.push(i);\n    }\n    assert_eq!(vec, []);\n    assert_eq!(vec2, [1, 2, 3]);\n}\n\n#[test]\nfn test_drain_items_reverse() {\n    let mut vec = vec![1, 2, 3];\n    let mut vec2 = vec![];\n    for i in vec.drain(..).rev() {\n        vec2.push(i);\n    }\n    assert_eq!(vec, []);\n    assert_eq!(vec2, [3, 2, 1]);\n}\n\n#[test]\nfn test_drain_items_zero_sized() {\n    let mut vec = vec![(), (), ()];\n    let mut vec2 = vec![];\n    for i in vec.drain(..) {\n        vec2.push(i);\n    }\n    assert_eq!(vec, []);\n    assert_eq!(vec2, [(), (), ()]);\n}\n\n#[test]\n#[should_panic]\nfn test_drain_out_of_bounds() {\n    let mut v = vec![1, 2, 3, 4, 5];\n    v.drain(5..6);\n}\n\n#[test]\nfn test_drain_range() {\n    let mut v = vec![1, 2, 3, 4, 5];\n    for _ in v.drain(4..) {}\n    assert_eq!(v, &[1, 2, 3, 4]);\n\n    let mut v: Vec<_> = (1..6).map(|x| x.to_string()).collect();\n    for _ in v.drain(1..4) {}\n    assert_eq!(v, &[1.to_string(), 5.to_string()]);\n\n    let mut v: Vec<_> = (1..6).map(|x| x.to_string()).collect();\n    for _ in v.drain(1..4).rev() {}\n    assert_eq!(v, &[1.to_string(), 5.to_string()]);\n\n    let mut v: Vec<_> = vec![(); 5];\n    for _ in v.drain(1..4).rev() {}\n    assert_eq!(v, &[(), ()]);\n}\n\n#[test]\nfn test_drain_inclusive_range() {\n    let mut v = vec!['a', 'b', 'c', 'd', 'e'];\n    for _ in v.drain(1..=3) {}\n    assert_eq!(v, &['a', 'e']);\n\n    let mut v: Vec<_> = (0..=5).map(|x| x.to_string()).collect();\n    for _ in v.drain(1..=5) {}\n    assert_eq!(v, &[\"0\".to_string()]);\n\n    let mut v: Vec<String> = (0..=5).map(|x| x.to_string()).collect();\n    for _ in v.drain(0..=5) {}\n    assert_eq!(v, Vec::<String>::new());\n\n    let mut v: Vec<_> = (0..=5).map(|x| x.to_string()).collect();\n    for _ in v.drain(0..=3) {}\n    assert_eq!(v, &[\"4\".to_string(), \"5\".to_string()]);\n\n    let mut v: Vec<_> = (0..=1).map(|x| x.to_string()).collect();\n    for _ in v.drain(..=0) {}\n    assert_eq!(v, &[\"1\".to_string()]);\n}\n\n#[test]\nfn test_drain_max_vec_size() {\n    let mut v = Vec::<()>::with_capacity(usize::MAX);\n    unsafe {\n        v.set_len(usize::MAX);\n    }\n    for _ in v.drain(usize::MAX - 1..) {}\n    assert_eq!(v.len(), usize::MAX - 1);\n\n    let mut v = Vec::<()>::with_capacity(usize::MAX);\n    unsafe {\n        v.set_len(usize::MAX);\n    }\n    for _ in v.drain(usize::MAX - 1..=usize::MAX - 1) {}\n    assert_eq!(v.len(), usize::MAX - 1);\n}\n\n#[test]\n#[should_panic]\nfn test_drain_index_overflow() {\n    let mut v = Vec::<()>::with_capacity(usize::MAX);\n    unsafe {\n        v.set_len(usize::MAX);\n    }\n    v.drain(0..=usize::MAX);\n}\n\n#[test]\n#[should_panic]\nfn test_drain_inclusive_out_of_bounds() {\n    let mut v = vec![1, 2, 3, 4, 5];\n    v.drain(5..=5);\n}\n\n#[test]\n#[should_panic]\nfn test_drain_start_overflow() {\n    let mut v = vec![1, 2, 3];\n    v.drain((Excluded(usize::MAX), Included(0)));\n}\n\n#[test]\n#[should_panic]\nfn test_drain_end_overflow() {\n    let mut v = vec![1, 2, 3];\n    v.drain((Included(0), Included(usize::MAX)));\n}\n\n#[test]\nfn test_drain_leak() {\n    static mut DROPS: i32 = 0;\n\n    #[derive(Debug, PartialEq)]\n    struct D(u32, bool);\n\n    impl Drop for D {\n        fn drop(&mut self) {\n            unsafe {\n                DROPS += 1;\n            }\n\n            if self.1 {\n                panic!(\"panic in `drop`\");\n            }\n        }\n    }\n\n    let mut v = vec![\n        D(0, false),\n        D(1, false),\n        D(2, false),\n        D(3, false),\n        D(4, true),\n        D(5, false),\n        D(6, false),\n    ];\n\n    catch_unwind(AssertUnwindSafe(|| {\n        v.drain(2..=5);\n    }))\n    .ok();\n\n    assert_eq!(unsafe { DROPS }, 4);\n    assert_eq!(v, vec![D(0, false), D(1, false), D(6, false),]);\n}\n\n#[test]\nfn test_splice() {\n    let mut v = vec![1, 2, 3, 4, 5];\n    let a = [10, 11, 12];\n    v.splice(2..4, a.iter().cloned());\n    assert_eq!(v, &[1, 2, 10, 11, 12, 5]);\n    v.splice(1..3, Some(20));\n    assert_eq!(v, &[1, 20, 11, 12, 5]);\n}\n\n#[test]\nfn test_splice_inclusive_range() {\n    let mut v = vec![1, 2, 3, 4, 5];\n    let a = [10, 11, 12];\n    let t1: Vec<_> = v.splice(2..=3, a.iter().cloned()).collect();\n    assert_eq!(v, &[1, 2, 10, 11, 12, 5]);\n    assert_eq!(t1, &[3, 4]);\n    let t2: Vec<_> = v.splice(1..=2, Some(20)).collect();\n    assert_eq!(v, &[1, 20, 11, 12, 5]);\n    assert_eq!(t2, &[2, 10]);\n}\n\n#[test]\n#[should_panic]\nfn test_splice_out_of_bounds() {\n    let mut v = vec![1, 2, 3, 4, 5];\n    let a = [10, 11, 12];\n    v.splice(5..6, a.iter().cloned());\n}\n\n#[test]\n#[should_panic]\nfn test_splice_inclusive_out_of_bounds() {\n    let mut v = vec![1, 2, 3, 4, 5];\n    let a = [10, 11, 12];\n    v.splice(5..=5, a.iter().cloned());\n}\n\n#[test]\nfn test_splice_items_zero_sized() {\n    let mut vec = vec![(), (), ()];\n    let vec2 = vec![];\n    let t: Vec<_> = vec.splice(1..2, vec2.iter().cloned()).collect();\n    assert_eq!(vec, &[(), ()]);\n    assert_eq!(t, &[()]);\n}\n\n#[test]\nfn test_splice_unbounded() {\n    let mut vec = vec![1, 2, 3, 4, 5];\n    let t: Vec<_> = vec.splice(.., None).collect();\n    assert_eq!(vec, &[]);\n    assert_eq!(t, &[1, 2, 3, 4, 5]);\n}\n\n#[test]\nfn test_splice_forget() {\n    let mut v = vec![1, 2, 3, 4, 5];\n    let a = [10, 11, 12];\n    std::mem::forget(v.splice(2..4, a.iter().cloned()));\n    assert_eq!(v, &[1, 2]);\n}\n\n#[test]\nfn test_into_boxed_slice() {\n    let xs = vec![1, 2, 3];\n    let ys = xs.into_boxed_slice();\n    assert_eq!(&*ys, [1, 2, 3]);\n}\n\n#[test]\nfn test_append() {\n    let mut vec = vec![1, 2, 3];\n    let mut vec2 = vec![4, 5, 6];\n    vec.append(&mut vec2);\n    assert_eq!(vec, [1, 2, 3, 4, 5, 6]);\n    assert_eq!(vec2, []);\n}\n\n#[test]\nfn test_split_off() {\n    let mut vec = vec![1, 2, 3, 4, 5, 6];\n    let orig_capacity = vec.capacity();\n    let vec2 = vec.split_off(4);\n    assert_eq!(vec, [1, 2, 3, 4]);\n    assert_eq!(vec2, [5, 6]);\n    assert_eq!(vec.capacity(), orig_capacity);\n}\n\n#[test]\nfn test_split_off_take_all() {\n    let mut vec = vec![1, 2, 3, 4, 5, 6];\n    let orig_ptr = vec.as_ptr();\n    let orig_capacity = vec.capacity();\n    let vec2 = vec.split_off(0);\n    assert_eq!(vec, []);\n    assert_eq!(vec2, [1, 2, 3, 4, 5, 6]);\n    assert_eq!(vec.capacity(), orig_capacity);\n    assert_eq!(vec2.as_ptr(), orig_ptr);\n}\n\n#[test]\nfn test_into_iter_as_slice() {\n    let vec = vec!['a', 'b', 'c'];\n    let mut into_iter = vec.into_iter();\n    assert_eq!(into_iter.as_slice(), &['a', 'b', 'c']);\n    let _ = into_iter.next().unwrap();\n    assert_eq!(into_iter.as_slice(), &['b', 'c']);\n    let _ = into_iter.next().unwrap();\n    let _ = into_iter.next().unwrap();\n    assert_eq!(into_iter.as_slice(), &[]);\n}\n\n#[test]\nfn test_into_iter_as_mut_slice() {\n    let vec = vec!['a', 'b', 'c'];\n    let mut into_iter = vec.into_iter();\n    assert_eq!(into_iter.as_slice(), &['a', 'b', 'c']);\n    into_iter.as_mut_slice()[0] = 'x';\n    into_iter.as_mut_slice()[1] = 'y';\n    assert_eq!(into_iter.next().unwrap(), 'x');\n    assert_eq!(into_iter.as_slice(), &['y', 'c']);\n}\n\n#[test]\nfn test_into_iter_debug() {\n    let vec = vec!['a', 'b', 'c'];\n    let into_iter = vec.into_iter();\n    let debug = format!(\"{:?}\", into_iter);\n    assert_eq!(debug, \"IntoIter(['a', 'b', 'c'])\");\n}\n\n#[test]\nfn test_into_iter_count() {\n    assert_eq!(vec![1, 2, 3].into_iter().count(), 3);\n}\n\n#[test]\nfn test_into_iter_clone() {\n    fn iter_equal<I: Iterator<Item = i32>>(it: I, slice: &[i32]) {\n        let v: Vec<i32> = it.collect();\n        assert_eq!(&v[..], slice);\n    }\n    let mut it = vec![1, 2, 3].into_iter();\n    iter_equal(it.clone(), &[1, 2, 3]);\n    assert_eq!(it.next(), Some(1));\n    let mut it = it.rev();\n    iter_equal(it.clone(), &[3, 2]);\n    assert_eq!(it.next(), Some(3));\n    iter_equal(it.clone(), &[2]);\n    assert_eq!(it.next(), Some(2));\n    iter_equal(it.clone(), &[]);\n    assert_eq!(it.next(), None);\n}\n\n#[test]\nfn test_into_iter_leak() {\n    static mut DROPS: i32 = 0;\n\n    struct D(bool);\n\n    impl Drop for D {\n        fn drop(&mut self) {\n            unsafe {\n                DROPS += 1;\n            }\n\n            if self.0 {\n                panic!(\"panic in `drop`\");\n            }\n        }\n    }\n\n    let v = vec![D(false), D(true), D(false)];\n\n    catch_unwind(move || drop(v.into_iter())).ok();\n\n    assert_eq!(unsafe { DROPS }, 3);\n}\n\n#[test]\nfn test_from_iter_specialization() {\n    let src: Vec<usize> = vec![0usize; 1];\n    let srcptr = src.as_ptr();\n    let sink = src.into_iter().collect::<Vec<_>>();\n    let sinkptr = sink.as_ptr();\n    assert_eq!(srcptr, sinkptr);\n}\n\n#[test]\nfn test_from_iter_partially_drained_in_place_specialization() {\n    let src: Vec<usize> = vec![0usize; 10];\n    let srcptr = src.as_ptr();\n    let mut iter = src.into_iter();\n    iter.next();\n    iter.next();\n    let sink = iter.collect::<Vec<_>>();\n    let sinkptr = sink.as_ptr();\n    assert_eq!(srcptr, sinkptr);\n}\n\n#[test]\nfn test_from_iter_specialization_with_iterator_adapters() {\n    fn assert_in_place_trait<T: InPlaceIterable>(_: &T) {}\n    let src: Vec<usize> = vec![0usize; 256];\n    let srcptr = src.as_ptr();\n    let iter = src\n        .into_iter()\n        .enumerate()\n        .map(|i| i.0 + i.1)\n        .zip(std::iter::repeat(1usize))\n        .map(|(a, b)| a + b)\n        .map_while(Option::Some)\n        .peekable()\n        .skip(1)\n        .map(|e| if e != usize::MAX { Ok(std::num::NonZeroUsize::new(e)) } else { Err(()) });\n    assert_in_place_trait(&iter);\n    let sink = iter.collect::<Result<Vec<_>, _>>().unwrap();\n    let sinkptr = sink.as_ptr();\n    assert_eq!(srcptr, sinkptr as *const usize);\n}\n\n#[test]\nfn test_from_iter_specialization_head_tail_drop() {\n    let drop_count: Vec<_> = (0..=2).map(|_| Rc::new(())).collect();\n    let src: Vec<_> = drop_count.iter().cloned().collect();\n    let srcptr = src.as_ptr();\n    let iter = src.into_iter();\n    let sink: Vec<_> = iter.skip(1).take(1).collect();\n    let sinkptr = sink.as_ptr();\n    assert_eq!(srcptr, sinkptr, \"specialization was applied\");\n    assert_eq!(Rc::strong_count(&drop_count[0]), 1, \"front was dropped\");\n    assert_eq!(Rc::strong_count(&drop_count[1]), 2, \"one element was collected\");\n    assert_eq!(Rc::strong_count(&drop_count[2]), 1, \"tail was dropped\");\n    assert_eq!(sink.len(), 1);\n}\n\n#[test]\nfn test_from_iter_specialization_panic_during_iteration_drops() {\n    let drop_count: Vec<_> = (0..=2).map(|_| Rc::new(())).collect();\n    let src: Vec<_> = drop_count.iter().cloned().collect();\n    let iter = src.into_iter();\n\n    let _ = std::panic::catch_unwind(AssertUnwindSafe(|| {\n        let _ = iter\n            .enumerate()\n            .filter_map(|(i, e)| {\n                if i == 1 {\n                    std::panic!(\"aborting iteration\");\n                }\n                Some(e)\n            })\n            .collect::<Vec<_>>();\n    }));\n\n    assert!(\n        drop_count.iter().map(Rc::strong_count).all(|count| count == 1),\n        \"all items were dropped once\"\n    );\n}\n\n#[test]\nfn test_from_iter_specialization_panic_during_drop_leaks() {\n    static mut DROP_COUNTER: usize = 0;\n\n    #[derive(Debug)]\n    enum Droppable {\n        DroppedTwice(Box<i32>),\n        PanicOnDrop,\n    }\n\n    impl Drop for Droppable {\n        fn drop(&mut self) {\n            match self {\n                Droppable::DroppedTwice(_) => {\n                    unsafe {\n                        DROP_COUNTER += 1;\n                    }\n                    println!(\"Dropping!\")\n                }\n                Droppable::PanicOnDrop => {\n                    if !std::thread::panicking() {\n                        panic!();\n                    }\n                }\n            }\n        }\n    }\n\n    let mut to_free: *mut Droppable = core::ptr::null_mut();\n    let mut cap = 0;\n\n    let _ = std::panic::catch_unwind(AssertUnwindSafe(|| {\n        let mut v = vec![Droppable::DroppedTwice(Box::new(123)), Droppable::PanicOnDrop];\n        to_free = v.as_mut_ptr();\n        cap = v.capacity();\n        let _ = v.into_iter().take(0).collect::<Vec<_>>();\n    }));\n\n    assert_eq!(unsafe { DROP_COUNTER }, 1);\n    // clean up the leak to keep miri happy\n    unsafe {\n        drop(Vec::from_raw_parts(to_free, 0, cap));\n    }\n}\n\n#[test]\nfn test_cow_from() {\n    let borrowed: &[_] = &[\"borrowed\", \"(slice)\"];\n    let owned = vec![\"owned\", \"(vec)\"];\n    match (Cow::from(owned.clone()), Cow::from(borrowed)) {\n        (Cow::Owned(o), Cow::Borrowed(b)) => assert!(o == owned && b == borrowed),\n        _ => panic!(\"invalid `Cow::from`\"),\n    }\n}\n\n#[test]\nfn test_from_cow() {\n    let borrowed: &[_] = &[\"borrowed\", \"(slice)\"];\n    let owned = vec![\"owned\", \"(vec)\"];\n    assert_eq!(Vec::from(Cow::Borrowed(borrowed)), vec![\"borrowed\", \"(slice)\"]);\n    assert_eq!(Vec::from(Cow::Owned(owned)), vec![\"owned\", \"(vec)\"]);\n}\n\n#[allow(dead_code)]\nfn assert_covariance() {\n    fn drain<'new>(d: Drain<'static, &'static str>) -> Drain<'new, &'new str> {\n        d\n    }\n    fn into_iter<'new>(i: IntoIter<&'static str>) -> IntoIter<&'new str> {\n        i\n    }\n}\n\n#[test]\nfn from_into_inner() {\n    let vec = vec![1, 2, 3];\n    let ptr = vec.as_ptr();\n    let vec = vec.into_iter().collect::<Vec<_>>();\n    assert_eq!(vec, [1, 2, 3]);\n    assert_eq!(vec.as_ptr(), ptr);\n\n    let ptr = &vec[1] as *const _;\n    let mut it = vec.into_iter();\n    it.next().unwrap();\n    let vec = it.collect::<Vec<_>>();\n    assert_eq!(vec, [2, 3]);\n    assert!(ptr != vec.as_ptr());\n}\n\n#[test]\nfn overaligned_allocations() {\n    #[repr(align(256))]\n    struct Foo(usize);\n    let mut v = vec![Foo(273)];\n    for i in 0..0x1000 {\n        v.reserve_exact(i);\n        assert!(v[0].0 == 273);\n        assert!(v.as_ptr() as usize & 0xff == 0);\n        v.shrink_to_fit();\n        assert!(v[0].0 == 273);\n        assert!(v.as_ptr() as usize & 0xff == 0);\n    }\n}\n\n#[test]\nfn drain_filter_empty() {\n    let mut vec: Vec<i32> = vec![];\n\n    {\n        let mut iter = vec.drain_filter(|_| true);\n        assert_eq!(iter.size_hint(), (0, Some(0)));\n        assert_eq!(iter.next(), None);\n        assert_eq!(iter.size_hint(), (0, Some(0)));\n        assert_eq!(iter.next(), None);\n        assert_eq!(iter.size_hint(), (0, Some(0)));\n    }\n    assert_eq!(vec.len(), 0);\n    assert_eq!(vec, vec![]);\n}\n\n#[test]\nfn drain_filter_zst() {\n    let mut vec = vec![(), (), (), (), ()];\n    let initial_len = vec.len();\n    let mut count = 0;\n    {\n        let mut iter = vec.drain_filter(|_| true);\n        assert_eq!(iter.size_hint(), (0, Some(initial_len)));\n        while let Some(_) = iter.next() {\n            count += 1;\n            assert_eq!(iter.size_hint(), (0, Some(initial_len - count)));\n        }\n        assert_eq!(iter.size_hint(), (0, Some(0)));\n        assert_eq!(iter.next(), None);\n        assert_eq!(iter.size_hint(), (0, Some(0)));\n    }\n\n    assert_eq!(count, initial_len);\n    assert_eq!(vec.len(), 0);\n    assert_eq!(vec, vec![]);\n}\n\n#[test]\nfn drain_filter_false() {\n    let mut vec = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n\n    let initial_len = vec.len();\n    let mut count = 0;\n    {\n        let mut iter = vec.drain_filter(|_| false);\n        assert_eq!(iter.size_hint(), (0, Some(initial_len)));\n        for _ in iter.by_ref() {\n            count += 1;\n        }\n        assert_eq!(iter.size_hint(), (0, Some(0)));\n        assert_eq!(iter.next(), None);\n        assert_eq!(iter.size_hint(), (0, Some(0)));\n    }\n\n    assert_eq!(count, 0);\n    assert_eq!(vec.len(), initial_len);\n    assert_eq!(vec, vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);\n}\n\n#[test]\nfn drain_filter_true() {\n    let mut vec = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n\n    let initial_len = vec.len();\n    let mut count = 0;\n    {\n        let mut iter = vec.drain_filter(|_| true);\n        assert_eq!(iter.size_hint(), (0, Some(initial_len)));\n        while let Some(_) = iter.next() {\n            count += 1;\n            assert_eq!(iter.size_hint(), (0, Some(initial_len - count)));\n        }\n        assert_eq!(iter.size_hint(), (0, Some(0)));\n        assert_eq!(iter.next(), None);\n        assert_eq!(iter.size_hint(), (0, Some(0)));\n    }\n\n    assert_eq!(count, initial_len);\n    assert_eq!(vec.len(), 0);\n    assert_eq!(vec, vec![]);\n}\n\n#[test]\nfn drain_filter_complex() {\n    {\n        //                [+xxx++++++xxxxx++++x+x++]\n        let mut vec = vec![\n            1, 2, 4, 6, 7, 9, 11, 13, 15, 17, 18, 20, 22, 24, 26, 27, 29, 31, 33, 34, 35, 36, 37,\n            39,\n        ];\n\n        let removed = vec.drain_filter(|x| *x % 2 == 0).collect::<Vec<_>>();\n        assert_eq!(removed.len(), 10);\n        assert_eq!(removed, vec![2, 4, 6, 18, 20, 22, 24, 26, 34, 36]);\n\n        assert_eq!(vec.len(), 14);\n        assert_eq!(vec, vec![1, 7, 9, 11, 13, 15, 17, 27, 29, 31, 33, 35, 37, 39]);\n    }\n\n    {\n        //                [xxx++++++xxxxx++++x+x++]\n        let mut vec = vec![\n            2, 4, 6, 7, 9, 11, 13, 15, 17, 18, 20, 22, 24, 26, 27, 29, 31, 33, 34, 35, 36, 37, 39,\n        ];\n\n        let removed = vec.drain_filter(|x| *x % 2 == 0).collect::<Vec<_>>();\n        assert_eq!(removed.len(), 10);\n        assert_eq!(removed, vec![2, 4, 6, 18, 20, 22, 24, 26, 34, 36]);\n\n        assert_eq!(vec.len(), 13);\n        assert_eq!(vec, vec![7, 9, 11, 13, 15, 17, 27, 29, 31, 33, 35, 37, 39]);\n    }\n\n    {\n        //                [xxx++++++xxxxx++++x+x]\n        let mut vec =\n            vec![2, 4, 6, 7, 9, 11, 13, 15, 17, 18, 20, 22, 24, 26, 27, 29, 31, 33, 34, 35, 36];\n\n        let removed = vec.drain_filter(|x| *x % 2 == 0).collect::<Vec<_>>();\n        assert_eq!(removed.len(), 10);\n        assert_eq!(removed, vec![2, 4, 6, 18, 20, 22, 24, 26, 34, 36]);\n\n        assert_eq!(vec.len(), 11);\n        assert_eq!(vec, vec![7, 9, 11, 13, 15, 17, 27, 29, 31, 33, 35]);\n    }\n\n    {\n        //                [xxxxxxxxxx+++++++++++]\n        let mut vec = vec![2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19];\n\n        let removed = vec.drain_filter(|x| *x % 2 == 0).collect::<Vec<_>>();\n        assert_eq!(removed.len(), 10);\n        assert_eq!(removed, vec![2, 4, 6, 8, 10, 12, 14, 16, 18, 20]);\n\n        assert_eq!(vec.len(), 10);\n        assert_eq!(vec, vec![1, 3, 5, 7, 9, 11, 13, 15, 17, 19]);\n    }\n\n    {\n        //                [+++++++++++xxxxxxxxxx]\n        let mut vec = vec![1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20];\n\n        let removed = vec.drain_filter(|x| *x % 2 == 0).collect::<Vec<_>>();\n        assert_eq!(removed.len(), 10);\n        assert_eq!(removed, vec![2, 4, 6, 8, 10, 12, 14, 16, 18, 20]);\n\n        assert_eq!(vec.len(), 10);\n        assert_eq!(vec, vec![1, 3, 5, 7, 9, 11, 13, 15, 17, 19]);\n    }\n}\n\n// FIXME: re-enable emscripten once it can unwind again\n#[test]\n#[cfg(not(target_os = \"emscripten\"))]\nfn drain_filter_consumed_panic() {\n    use std::rc::Rc;\n    use std::sync::Mutex;\n\n    struct Check {\n        index: usize,\n        drop_counts: Rc<Mutex<Vec<usize>>>,\n    }\n\n    impl Drop for Check {\n        fn drop(&mut self) {\n            self.drop_counts.lock().unwrap()[self.index] += 1;\n            println!(\"drop: {}\", self.index);\n        }\n    }\n\n    let check_count = 10;\n    let drop_counts = Rc::new(Mutex::new(vec![0_usize; check_count]));\n    let mut data: Vec<Check> = (0..check_count)\n        .map(|index| Check { index, drop_counts: Rc::clone(&drop_counts) })\n        .collect();\n\n    let _ = std::panic::catch_unwind(move || {\n        let filter = |c: &mut Check| {\n            if c.index == 2 {\n                panic!(\"panic at index: {}\", c.index);\n            }\n            // Verify that if the filter could panic again on another element\n            // that it would not cause a double panic and all elements of the\n            // vec would still be dropped exactly once.\n            if c.index == 4 {\n                panic!(\"panic at index: {}\", c.index);\n            }\n            c.index < 6\n        };\n        let drain = data.drain_filter(filter);\n\n        // NOTE: The DrainFilter is explicitly consumed\n        drain.for_each(drop);\n    });\n\n    let drop_counts = drop_counts.lock().unwrap();\n    assert_eq!(check_count, drop_counts.len());\n\n    for (index, count) in drop_counts.iter().cloned().enumerate() {\n        assert_eq!(1, count, \"unexpected drop count at index: {} (count: {})\", index, count);\n    }\n}\n\n// FIXME: Re-enable emscripten once it can catch panics\n#[test]\n#[cfg(not(target_os = \"emscripten\"))]\nfn drain_filter_unconsumed_panic() {\n    use std::rc::Rc;\n    use std::sync::Mutex;\n\n    struct Check {\n        index: usize,\n        drop_counts: Rc<Mutex<Vec<usize>>>,\n    }\n\n    impl Drop for Check {\n        fn drop(&mut self) {\n            self.drop_counts.lock().unwrap()[self.index] += 1;\n            println!(\"drop: {}\", self.index);\n        }\n    }\n\n    let check_count = 10;\n    let drop_counts = Rc::new(Mutex::new(vec![0_usize; check_count]));\n    let mut data: Vec<Check> = (0..check_count)\n        .map(|index| Check { index, drop_counts: Rc::clone(&drop_counts) })\n        .collect();\n\n    let _ = std::panic::catch_unwind(move || {\n        let filter = |c: &mut Check| {\n            if c.index == 2 {\n                panic!(\"panic at index: {}\", c.index);\n            }\n            // Verify that if the filter could panic again on another element\n            // that it would not cause a double panic and all elements of the\n            // vec would still be dropped exactly once.\n            if c.index == 4 {\n                panic!(\"panic at index: {}\", c.index);\n            }\n            c.index < 6\n        };\n        let _drain = data.drain_filter(filter);\n\n        // NOTE: The DrainFilter is dropped without being consumed\n    });\n\n    let drop_counts = drop_counts.lock().unwrap();\n    assert_eq!(check_count, drop_counts.len());\n\n    for (index, count) in drop_counts.iter().cloned().enumerate() {\n        assert_eq!(1, count, \"unexpected drop count at index: {} (count: {})\", index, count);\n    }\n}\n\n#[test]\nfn drain_filter_unconsumed() {\n    let mut vec = vec![1, 2, 3, 4];\n    let drain = vec.drain_filter(|&mut x| x % 2 != 0);\n    drop(drain);\n    assert_eq!(vec, [2, 4]);\n}\n\n#[test]\nfn test_reserve_exact() {\n    // This is all the same as test_reserve\n\n    let mut v = Vec::new();\n    assert_eq!(v.capacity(), 0);\n\n    v.reserve_exact(2);\n    assert!(v.capacity() >= 2);\n\n    for i in 0..16 {\n        v.push(i);\n    }\n\n    assert!(v.capacity() >= 16);\n    v.reserve_exact(16);\n    assert!(v.capacity() >= 32);\n\n    v.push(16);\n\n    v.reserve_exact(16);\n    assert!(v.capacity() >= 33)\n}\n\n#[test]\n#[cfg_attr(miri, ignore)] // Miri does not support signalling OOM\n#[cfg_attr(target_os = \"android\", ignore)] // Android used in CI has a broken dlmalloc\nfn test_try_reserve() {\n    // These are the interesting cases:\n    // * exactly isize::MAX should never trigger a CapacityOverflow (can be OOM)\n    // * > isize::MAX should always fail\n    //    * On 16/32-bit should CapacityOverflow\n    //    * On 64-bit should OOM\n    // * overflow may trigger when adding `len` to `cap` (in number of elements)\n    // * overflow may trigger when multiplying `new_cap` by size_of::<T> (to get bytes)\n\n    const MAX_CAP: usize = isize::MAX as usize;\n    const MAX_USIZE: usize = usize::MAX;\n\n    // On 16/32-bit, we check that allocations don't exceed isize::MAX,\n    // on 64-bit, we assume the OS will give an OOM for such a ridiculous size.\n    // Any platform that succeeds for these requests is technically broken with\n    // ptr::offset because LLVM is the worst.\n    let guards_against_isize = usize::BITS < 64;\n\n    {\n        // Note: basic stuff is checked by test_reserve\n        let mut empty_bytes: Vec<u8> = Vec::new();\n\n        // Check isize::MAX doesn't count as an overflow\n        if let Err(CapacityOverflow) = empty_bytes.try_reserve(MAX_CAP) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        // Play it again, frank! (just to be sure)\n        if let Err(CapacityOverflow) = empty_bytes.try_reserve(MAX_CAP) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n\n        if guards_against_isize {\n            // Check isize::MAX + 1 does count as overflow\n            if let Err(CapacityOverflow) = empty_bytes.try_reserve(MAX_CAP + 1) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an overflow!\")\n            }\n\n            // Check usize::MAX does count as overflow\n            if let Err(CapacityOverflow) = empty_bytes.try_reserve(MAX_USIZE) {\n            } else {\n                panic!(\"usize::MAX should trigger an overflow!\")\n            }\n        } else {\n            // Check isize::MAX + 1 is an OOM\n            if let Err(AllocError { .. }) = empty_bytes.try_reserve(MAX_CAP + 1) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an OOM!\")\n            }\n\n            // Check usize::MAX is an OOM\n            if let Err(AllocError { .. }) = empty_bytes.try_reserve(MAX_USIZE) {\n            } else {\n                panic!(\"usize::MAX should trigger an OOM!\")\n            }\n        }\n    }\n\n    {\n        // Same basic idea, but with non-zero len\n        let mut ten_bytes: Vec<u8> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n\n        if let Err(CapacityOverflow) = ten_bytes.try_reserve(MAX_CAP - 10) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        if let Err(CapacityOverflow) = ten_bytes.try_reserve(MAX_CAP - 10) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        if guards_against_isize {\n            if let Err(CapacityOverflow) = ten_bytes.try_reserve(MAX_CAP - 9) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an overflow!\");\n            }\n        } else {\n            if let Err(AllocError { .. }) = ten_bytes.try_reserve(MAX_CAP - 9) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an OOM!\")\n            }\n        }\n        // Should always overflow in the add-to-len\n        if let Err(CapacityOverflow) = ten_bytes.try_reserve(MAX_USIZE) {\n        } else {\n            panic!(\"usize::MAX should trigger an overflow!\")\n        }\n    }\n\n    {\n        // Same basic idea, but with interesting type size\n        let mut ten_u32s: Vec<u32> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n\n        if let Err(CapacityOverflow) = ten_u32s.try_reserve(MAX_CAP / 4 - 10) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        if let Err(CapacityOverflow) = ten_u32s.try_reserve(MAX_CAP / 4 - 10) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        if guards_against_isize {\n            if let Err(CapacityOverflow) = ten_u32s.try_reserve(MAX_CAP / 4 - 9) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an overflow!\");\n            }\n        } else {\n            if let Err(AllocError { .. }) = ten_u32s.try_reserve(MAX_CAP / 4 - 9) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an OOM!\")\n            }\n        }\n        // Should fail in the mul-by-size\n        if let Err(CapacityOverflow) = ten_u32s.try_reserve(MAX_USIZE - 20) {\n        } else {\n            panic!(\"usize::MAX should trigger an overflow!\");\n        }\n    }\n}\n\n#[test]\n#[cfg_attr(miri, ignore)] // Miri does not support signalling OOM\n#[cfg_attr(target_os = \"android\", ignore)] // Android used in CI has a broken dlmalloc\nfn test_try_reserve_exact() {\n    // This is exactly the same as test_try_reserve with the method changed.\n    // See that test for comments.\n\n    const MAX_CAP: usize = isize::MAX as usize;\n    const MAX_USIZE: usize = usize::MAX;\n\n    let guards_against_isize = size_of::<usize>() < 8;\n\n    {\n        let mut empty_bytes: Vec<u8> = Vec::new();\n\n        if let Err(CapacityOverflow) = empty_bytes.try_reserve_exact(MAX_CAP) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        if let Err(CapacityOverflow) = empty_bytes.try_reserve_exact(MAX_CAP) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n\n        if guards_against_isize {\n            if let Err(CapacityOverflow) = empty_bytes.try_reserve_exact(MAX_CAP + 1) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an overflow!\")\n            }\n\n            if let Err(CapacityOverflow) = empty_bytes.try_reserve_exact(MAX_USIZE) {\n            } else {\n                panic!(\"usize::MAX should trigger an overflow!\")\n            }\n        } else {\n            if let Err(AllocError { .. }) = empty_bytes.try_reserve_exact(MAX_CAP + 1) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an OOM!\")\n            }\n\n            if let Err(AllocError { .. }) = empty_bytes.try_reserve_exact(MAX_USIZE) {\n            } else {\n                panic!(\"usize::MAX should trigger an OOM!\")\n            }\n        }\n    }\n\n    {\n        let mut ten_bytes: Vec<u8> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n\n        if let Err(CapacityOverflow) = ten_bytes.try_reserve_exact(MAX_CAP - 10) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        if let Err(CapacityOverflow) = ten_bytes.try_reserve_exact(MAX_CAP - 10) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        if guards_against_isize {\n            if let Err(CapacityOverflow) = ten_bytes.try_reserve_exact(MAX_CAP - 9) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an overflow!\");\n            }\n        } else {\n            if let Err(AllocError { .. }) = ten_bytes.try_reserve_exact(MAX_CAP - 9) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an OOM!\")\n            }\n        }\n        if let Err(CapacityOverflow) = ten_bytes.try_reserve_exact(MAX_USIZE) {\n        } else {\n            panic!(\"usize::MAX should trigger an overflow!\")\n        }\n    }\n\n    {\n        let mut ten_u32s: Vec<u32> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n\n        if let Err(CapacityOverflow) = ten_u32s.try_reserve_exact(MAX_CAP / 4 - 10) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        if let Err(CapacityOverflow) = ten_u32s.try_reserve_exact(MAX_CAP / 4 - 10) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        if guards_against_isize {\n            if let Err(CapacityOverflow) = ten_u32s.try_reserve_exact(MAX_CAP / 4 - 9) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an overflow!\");\n            }\n        } else {\n            if let Err(AllocError { .. }) = ten_u32s.try_reserve_exact(MAX_CAP / 4 - 9) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an OOM!\")\n            }\n        }\n        if let Err(CapacityOverflow) = ten_u32s.try_reserve_exact(MAX_USIZE - 20) {\n        } else {\n            panic!(\"usize::MAX should trigger an overflow!\")\n        }\n    }\n}\n\n#[test]\nfn test_stable_pointers() {\n    /// Pull an element from the iterator, then drop it.\n    /// Useful to cover both the `next` and `drop` paths of an iterator.\n    fn next_then_drop<I: Iterator>(mut i: I) {\n        i.next().unwrap();\n        drop(i);\n    }\n\n    // Test that, if we reserved enough space, adding and removing elements does not\n    // invalidate references into the vector (such as `v0`).  This test also\n    // runs in Miri, which would detect such problems.\n    // Note that this test does *not* constitute a stable guarantee that all these functions do not\n    // reallocate! Only what is explicitly documented at\n    // <https://doc.rust-lang.org/nightly/std/vec/struct.Vec.html#guarantees> is stably guaranteed.\n    let mut v = Vec::with_capacity(128);\n    v.push(13);\n\n    // Laundering the lifetime -- we take care that `v` does not reallocate, so that's okay.\n    let v0 = &mut v[0];\n    let v0 = unsafe { &mut *(v0 as *mut _) };\n    // Now do a bunch of things and occasionally use `v0` again to assert it is still valid.\n\n    // Pushing/inserting and popping/removing\n    v.push(1);\n    v.push(2);\n    v.insert(1, 1);\n    assert_eq!(*v0, 13);\n    v.remove(1);\n    v.pop().unwrap();\n    assert_eq!(*v0, 13);\n    v.push(1);\n    v.swap_remove(1);\n    assert_eq!(v.len(), 2);\n    v.swap_remove(1); // swap_remove the last element\n    assert_eq!(*v0, 13);\n\n    // Appending\n    v.append(&mut vec![27, 19]);\n    assert_eq!(*v0, 13);\n\n    // Extending\n    v.extend_from_slice(&[1, 2]);\n    v.extend(&[1, 2]); // `slice::Iter` (with `T: Copy`) specialization\n    v.extend(vec![2, 3]); // `vec::IntoIter` specialization\n    v.extend(std::iter::once(3)); // `TrustedLen` specialization\n    v.extend(std::iter::empty::<i32>()); // `TrustedLen` specialization with empty iterator\n    v.extend(std::iter::once(3).filter(|_| true)); // base case\n    v.extend(std::iter::once(&3)); // `cloned` specialization\n    assert_eq!(*v0, 13);\n\n    // Truncation\n    v.truncate(2);\n    assert_eq!(*v0, 13);\n\n    // Resizing\n    v.resize_with(v.len() + 10, || 42);\n    assert_eq!(*v0, 13);\n    v.resize_with(2, || panic!());\n    assert_eq!(*v0, 13);\n\n    // No-op reservation\n    v.reserve(32);\n    v.reserve_exact(32);\n    assert_eq!(*v0, 13);\n\n    // Partial draining\n    v.resize_with(10, || 42);\n    next_then_drop(v.drain(5..));\n    assert_eq!(*v0, 13);\n\n    // Splicing\n    v.resize_with(10, || 42);\n    next_then_drop(v.splice(5.., vec![1, 2, 3, 4, 5])); // empty tail after range\n    assert_eq!(*v0, 13);\n    next_then_drop(v.splice(5..8, vec![1])); // replacement is smaller than original range\n    assert_eq!(*v0, 13);\n    next_then_drop(v.splice(5..6, vec![1; 10].into_iter().filter(|_| true))); // lower bound not exact\n    assert_eq!(*v0, 13);\n\n    // spare_capacity_mut\n    v.spare_capacity_mut();\n    assert_eq!(*v0, 13);\n\n    // Smoke test that would fire even outside Miri if an actual relocation happened.\n    *v0 -= 13;\n    assert_eq!(v[0], 0);\n}\n\n// https://github.com/rust-lang/rust/pull/49496 introduced specialization based on:\n//\n// ```\n// unsafe impl<T: ?Sized> IsZero for *mut T {\n//     fn is_zero(&self) -> bool {\n//         (*self).is_null()\n//     }\n// }\n// ```\n//\n// … to call `RawVec::with_capacity_zeroed` for creating `Vec<*mut T>`,\n// which is incorrect for fat pointers since `<*mut T>::is_null` only looks at the data component.\n// That is, a fat pointer can be “null” without being made entirely of zero bits.\n#[test]\nfn vec_macro_repeating_null_raw_fat_pointer() {\n    let raw_dyn = &mut (|| ()) as &mut dyn Fn() as *mut dyn Fn();\n    let vtable = dbg!(ptr_metadata(raw_dyn));\n    let null_raw_dyn = ptr_from_raw_parts(std::ptr::null_mut(), vtable);\n    assert!(null_raw_dyn.is_null());\n\n    let vec = vec![null_raw_dyn; 1];\n    dbg!(ptr_metadata(vec[0]));\n    assert!(vec[0] == null_raw_dyn);\n\n    // Polyfill for https://github.com/rust-lang/rfcs/pull/2580\n\n    fn ptr_metadata(ptr: *mut dyn Fn()) -> *mut () {\n        unsafe { std::mem::transmute::<*mut dyn Fn(), DynRepr>(ptr).vtable }\n    }\n\n    fn ptr_from_raw_parts(data: *mut (), vtable: *mut ()) -> *mut dyn Fn() {\n        unsafe { std::mem::transmute::<DynRepr, *mut dyn Fn()>(DynRepr { data, vtable }) }\n    }\n\n    #[repr(C)]\n    struct DynRepr {\n        data: *mut (),\n        vtable: *mut (),\n    }\n}\n\n// This test will likely fail if you change the capacities used in\n// `RawVec::grow_amortized`.\n#[test]\nfn test_push_growth_strategy() {\n    // If the element size is 1, we jump from 0 to 8, then double.\n    {\n        let mut v1: Vec<u8> = vec![];\n        assert_eq!(v1.capacity(), 0);\n\n        for _ in 0..8 {\n            v1.push(0);\n            assert_eq!(v1.capacity(), 8);\n        }\n\n        for _ in 8..16 {\n            v1.push(0);\n            assert_eq!(v1.capacity(), 16);\n        }\n\n        for _ in 16..32 {\n            v1.push(0);\n            assert_eq!(v1.capacity(), 32);\n        }\n\n        for _ in 32..64 {\n            v1.push(0);\n            assert_eq!(v1.capacity(), 64);\n        }\n    }\n\n    // If the element size is 2..=1024, we jump from 0 to 4, then double.\n    {\n        let mut v2: Vec<u16> = vec![];\n        let mut v1024: Vec<[u8; 1024]> = vec![];\n        assert_eq!(v2.capacity(), 0);\n        assert_eq!(v1024.capacity(), 0);\n\n        for _ in 0..4 {\n            v2.push(0);\n            v1024.push([0; 1024]);\n            assert_eq!(v2.capacity(), 4);\n            assert_eq!(v1024.capacity(), 4);\n        }\n\n        for _ in 4..8 {\n            v2.push(0);\n            v1024.push([0; 1024]);\n            assert_eq!(v2.capacity(), 8);\n            assert_eq!(v1024.capacity(), 8);\n        }\n\n        for _ in 8..16 {\n            v2.push(0);\n            v1024.push([0; 1024]);\n            assert_eq!(v2.capacity(), 16);\n            assert_eq!(v1024.capacity(), 16);\n        }\n\n        for _ in 16..32 {\n            v2.push(0);\n            v1024.push([0; 1024]);\n            assert_eq!(v2.capacity(), 32);\n            assert_eq!(v1024.capacity(), 32);\n        }\n\n        for _ in 32..64 {\n            v2.push(0);\n            v1024.push([0; 1024]);\n            assert_eq!(v2.capacity(), 64);\n            assert_eq!(v1024.capacity(), 64);\n        }\n    }\n\n    // If the element size is > 1024, we jump from 0 to 1, then double.\n    {\n        let mut v1025: Vec<[u8; 1025]> = vec![];\n        assert_eq!(v1025.capacity(), 0);\n\n        for _ in 0..1 {\n            v1025.push([0; 1025]);\n            assert_eq!(v1025.capacity(), 1);\n        }\n\n        for _ in 1..2 {\n            v1025.push([0; 1025]);\n            assert_eq!(v1025.capacity(), 2);\n        }\n\n        for _ in 2..4 {\n            v1025.push([0; 1025]);\n            assert_eq!(v1025.capacity(), 4);\n        }\n\n        for _ in 4..8 {\n            v1025.push([0; 1025]);\n            assert_eq!(v1025.capacity(), 8);\n        }\n\n        for _ in 8..16 {\n            v1025.push([0; 1025]);\n            assert_eq!(v1025.capacity(), 16);\n        }\n\n        for _ in 16..32 {\n            v1025.push([0; 1025]);\n            assert_eq!(v1025.capacity(), 32);\n        }\n\n        for _ in 32..64 {\n            v1025.push([0; 1025]);\n            assert_eq!(v1025.capacity(), 64);\n        }\n    }\n}\n\nmacro_rules! generate_assert_eq_vec_and_prim {\n    ($name:ident<$B:ident>($type:ty)) => {\n        fn $name<A: PartialEq<$B> + Debug, $B: Debug>(a: Vec<A>, b: $type) {\n            assert!(a == b);\n            assert_eq!(a, b);\n        }\n    };\n}\n\ngenerate_assert_eq_vec_and_prim! { assert_eq_vec_and_slice  <B>(&[B])   }\ngenerate_assert_eq_vec_and_prim! { assert_eq_vec_and_array_3<B>([B; 3]) }\n\n#[test]\nfn partialeq_vec_and_prim() {\n    assert_eq_vec_and_slice(vec![1, 2, 3], &[1, 2, 3]);\n    assert_eq_vec_and_array_3(vec![1, 2, 3], [1, 2, 3]);\n}\n\nmacro_rules! assert_partial_eq_valid {\n    ($a2:expr, $a3:expr; $b2:expr, $b3: expr) => {\n        assert!($a2 == $b2);\n        assert!($a2 != $b3);\n        assert!($a3 != $b2);\n        assert!($a3 == $b3);\n        assert_eq!($a2, $b2);\n        assert_ne!($a2, $b3);\n        assert_ne!($a3, $b2);\n        assert_eq!($a3, $b3);\n    };\n}\n\n#[test]\nfn partialeq_vec_full() {\n    let vec2: Vec<_> = vec![1, 2];\n    let vec3: Vec<_> = vec![1, 2, 3];\n    let slice2: &[_] = &[1, 2];\n    let slice3: &[_] = &[1, 2, 3];\n    let slicemut2: &[_] = &mut [1, 2];\n    let slicemut3: &[_] = &mut [1, 2, 3];\n    let array2: [_; 2] = [1, 2];\n    let array3: [_; 3] = [1, 2, 3];\n    let arrayref2: &[_; 2] = &[1, 2];\n    let arrayref3: &[_; 3] = &[1, 2, 3];\n\n    assert_partial_eq_valid!(vec2,vec3; vec2,vec3);\n    assert_partial_eq_valid!(vec2,vec3; slice2,slice3);\n    assert_partial_eq_valid!(vec2,vec3; slicemut2,slicemut3);\n    assert_partial_eq_valid!(slice2,slice3; vec2,vec3);\n    assert_partial_eq_valid!(slicemut2,slicemut3; vec2,vec3);\n    assert_partial_eq_valid!(vec2,vec3; array2,array3);\n    assert_partial_eq_valid!(vec2,vec3; arrayref2,arrayref3);\n    assert_partial_eq_valid!(vec2,vec3; arrayref2[..],arrayref3[..]);\n}\n\n#[test]\nfn test_vec_cycle() {\n    #[derive(Debug)]\n    struct C<'a> {\n        v: Vec<Cell<Option<&'a C<'a>>>>,\n    }\n\n    impl<'a> C<'a> {\n        fn new() -> C<'a> {\n            C { v: Vec::new() }\n        }\n    }\n\n    let mut c1 = C::new();\n    let mut c2 = C::new();\n    let mut c3 = C::new();\n\n    // Push\n    c1.v.push(Cell::new(None));\n    c1.v.push(Cell::new(None));\n\n    c2.v.push(Cell::new(None));\n    c2.v.push(Cell::new(None));\n\n    c3.v.push(Cell::new(None));\n    c3.v.push(Cell::new(None));\n\n    // Set\n    c1.v[0].set(Some(&c2));\n    c1.v[1].set(Some(&c3));\n\n    c2.v[0].set(Some(&c2));\n    c2.v[1].set(Some(&c3));\n\n    c3.v[0].set(Some(&c1));\n    c3.v[1].set(Some(&c2));\n}\n\n#[test]\nfn test_vec_cycle_wrapped() {\n    struct Refs<'a> {\n        v: Vec<Cell<Option<&'a C<'a>>>>,\n    }\n\n    struct C<'a> {\n        refs: Refs<'a>,\n    }\n\n    impl<'a> Refs<'a> {\n        fn new() -> Refs<'a> {\n            Refs { v: Vec::new() }\n        }\n    }\n\n    impl<'a> C<'a> {\n        fn new() -> C<'a> {\n            C { refs: Refs::new() }\n        }\n    }\n\n    let mut c1 = C::new();\n    let mut c2 = C::new();\n    let mut c3 = C::new();\n\n    c1.refs.v.push(Cell::new(None));\n    c1.refs.v.push(Cell::new(None));\n    c2.refs.v.push(Cell::new(None));\n    c2.refs.v.push(Cell::new(None));\n    c3.refs.v.push(Cell::new(None));\n    c3.refs.v.push(Cell::new(None));\n\n    c1.refs.v[0].set(Some(&c2));\n    c1.refs.v[1].set(Some(&c3));\n    c2.refs.v[0].set(Some(&c2));\n    c2.refs.v[1].set(Some(&c3));\n    c3.refs.v[0].set(Some(&c1));\n    c3.refs.v[1].set(Some(&c2));\n}\n\n#[test]\nfn test_zero_sized_vec_push() {\n    const N: usize = 8;\n\n    for len in 0..N {\n        let mut tester = Vec::with_capacity(len);\n        assert_eq!(tester.len(), 0);\n        assert!(tester.capacity() >= len);\n        for _ in 0..len {\n            tester.push(());\n        }\n        assert_eq!(tester.len(), len);\n        assert_eq!(tester.iter().count(), len);\n        tester.clear();\n    }\n}\n\n#[test]\nfn test_vec_macro_repeat() {\n    assert_eq!(vec![1; 3], vec![1, 1, 1]);\n    assert_eq!(vec![1; 2], vec![1, 1]);\n    assert_eq!(vec![1; 1], vec![1]);\n    assert_eq!(vec![1; 0], vec![]);\n\n    // from_elem syntax (see RFC 832)\n    let el = Box::new(1);\n    let n = 3;\n    assert_eq!(vec![el; n], vec![Box::new(1), Box::new(1), Box::new(1)]);\n}\n\n#[test]\nfn test_vec_swap() {\n    let mut a: Vec<isize> = vec![0, 1, 2, 3, 4, 5, 6];\n    a.swap(2, 4);\n    assert_eq!(a[2], 4);\n    assert_eq!(a[4], 2);\n    let mut n = 42;\n    swap(&mut n, &mut a[0]);\n    assert_eq!(a[0], 42);\n    assert_eq!(n, 0);\n}\n\n#[test]\nfn test_extend_from_within_spec() {\n    #[derive(Copy)]\n    struct CopyOnly;\n\n    impl Clone for CopyOnly {\n        fn clone(&self) -> Self {\n            panic!(\"extend_from_within must use specialization on copy\");\n        }\n    }\n\n    vec![CopyOnly, CopyOnly].extend_from_within(..);\n}\n\n#[test]\nfn test_extend_from_within_clone() {\n    let mut v = vec![String::from(\"sssss\"), String::from(\"12334567890\"), String::from(\"c\")];\n    v.extend_from_within(1..);\n\n    assert_eq!(v, [\"sssss\", \"12334567890\", \"c\", \"12334567890\", \"c\"]);\n}\n\n#[test]\nfn test_extend_from_within_complete_rande() {\n    let mut v = vec![0, 1, 2, 3];\n    v.extend_from_within(..);\n\n    assert_eq!(v, [0, 1, 2, 3, 0, 1, 2, 3]);\n}\n\n#[test]\nfn test_extend_from_within_empty_rande() {\n    let mut v = vec![0, 1, 2, 3];\n    v.extend_from_within(1..1);\n\n    assert_eq!(v, [0, 1, 2, 3]);\n}\n\n#[test]\n#[should_panic]\nfn test_extend_from_within_out_of_rande() {\n    let mut v = vec![0, 1];\n    v.extend_from_within(..3);\n}\n\n#[test]\nfn test_extend_from_within_zst() {\n    let mut v = vec![(); 8];\n    v.extend_from_within(3..7);\n\n    assert_eq!(v, [(); 12]);\n}\n\n#[test]\nfn test_extend_from_within_empty_vec() {\n    let mut v = Vec::<i32>::new();\n    v.extend_from_within(..);\n\n    assert_eq!(v, []);\n}\n\n#[test]\nfn test_extend_from_within() {\n    let mut v = vec![String::from(\"a\"), String::from(\"b\"), String::from(\"c\")];\n    v.extend_from_within(1..=2);\n    v.extend_from_within(..=1);\n\n    assert_eq!(v, [\"a\", \"b\", \"c\", \"b\", \"c\", \"a\", \"b\"]);\n}\n\n#[test]\nfn test_vec_dedup_by() {\n    let mut vec: Vec<i32> = vec![1, -1, 2, 3, 1, -5, 5, -2, 2];\n\n    vec.dedup_by(|a, b| a.abs() == b.abs());\n\n    assert_eq!(vec, [1, 2, 3, 1, -5, -2]);\n}\n\n#[test]\nfn test_vec_dedup_empty() {\n    let mut vec: Vec<i32> = Vec::new();\n\n    vec.dedup();\n\n    assert_eq!(vec, []);\n}\n\n#[test]\nfn test_vec_dedup_one() {\n    let mut vec = vec![12i32];\n\n    vec.dedup();\n\n    assert_eq!(vec, [12]);\n}\n\n#[test]\nfn test_vec_dedup_multiple_ident() {\n    let mut vec = vec![12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11];\n\n    vec.dedup();\n\n    assert_eq!(vec, [12, 11]);\n}\n\n#[test]\nfn test_vec_dedup_partialeq() {\n    #[derive(Debug)]\n    struct Foo(i32, i32);\n\n    impl PartialEq for Foo {\n        fn eq(&self, other: &Foo) -> bool {\n            self.0 == other.0\n        }\n    }\n\n    let mut vec = vec![Foo(0, 1), Foo(0, 5), Foo(1, 7), Foo(1, 9)];\n\n    vec.dedup();\n    assert_eq!(vec, [Foo(0, 1), Foo(1, 7)]);\n}\n\n#[test]\nfn test_vec_dedup() {\n    let mut vec: Vec<bool> = Vec::with_capacity(8);\n    let mut template = vec.clone();\n\n    for x in 0u8..255u8 {\n        vec.clear();\n        template.clear();\n\n        let iter = (0..8).map(move |bit| (x >> bit) & 1 == 1);\n        vec.extend(iter);\n        template.extend_from_slice(&vec);\n\n        let (dedup, _) = template.partition_dedup();\n        vec.dedup();\n\n        assert_eq!(vec, dedup);\n    }\n}\n\n#[test]\nfn test_vec_dedup_panicking() {\n    #[derive(Debug)]\n    struct Panic {\n        drop_counter: &'static AtomicU32,\n        value: bool,\n        index: usize,\n    }\n\n    impl PartialEq for Panic {\n        fn eq(&self, other: &Self) -> bool {\n            self.value == other.value\n        }\n    }\n\n    impl Drop for Panic {\n        fn drop(&mut self) {\n            let x = self.drop_counter.fetch_add(1, Ordering::SeqCst);\n            assert!(x != 4);\n        }\n    }\n\n    static DROP_COUNTER: AtomicU32 = AtomicU32::new(0);\n    let expected = [\n        Panic { drop_counter: &DROP_COUNTER, value: false, index: 0 },\n        Panic { drop_counter: &DROP_COUNTER, value: false, index: 5 },\n        Panic { drop_counter: &DROP_COUNTER, value: true, index: 6 },\n        Panic { drop_counter: &DROP_COUNTER, value: true, index: 7 },\n    ];\n    let mut vec = vec![\n        Panic { drop_counter: &DROP_COUNTER, value: false, index: 0 },\n        // these elements get deduplicated\n        Panic { drop_counter: &DROP_COUNTER, value: false, index: 1 },\n        Panic { drop_counter: &DROP_COUNTER, value: false, index: 2 },\n        Panic { drop_counter: &DROP_COUNTER, value: false, index: 3 },\n        Panic { drop_counter: &DROP_COUNTER, value: false, index: 4 },\n        // here it panics\n        Panic { drop_counter: &DROP_COUNTER, value: false, index: 5 },\n        Panic { drop_counter: &DROP_COUNTER, value: true, index: 6 },\n        Panic { drop_counter: &DROP_COUNTER, value: true, index: 7 },\n    ];\n\n    let _ = std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| {\n        vec.dedup();\n    }));\n\n    let ok = vec.iter().zip(expected.iter()).all(|(x, y)| x.index == y.index);\n\n    if !ok {\n        panic!(\"expected: {:?}\\ngot: {:?}\\n\", expected, vec);\n    }\n}\n\n// Regression test for issue #82533\n#[test]\nfn test_extend_from_within_panicing_clone() {\n    struct Panic<'dc> {\n        drop_count: &'dc AtomicU32,\n        aaaaa: bool,\n    }\n\n    impl Clone for Panic<'_> {\n        fn clone(&self) -> Self {\n            if self.aaaaa {\n                panic!(\"panic! at the clone\");\n            }\n\n            Self { ..*self }\n        }\n    }\n\n    impl Drop for Panic<'_> {\n        fn drop(&mut self) {\n            self.drop_count.fetch_add(1, Ordering::SeqCst);\n        }\n    }\n\n    let count = core::sync::atomic::AtomicU32::new(0);\n    let mut vec = vec![\n        Panic { drop_count: &count, aaaaa: false },\n        Panic { drop_count: &count, aaaaa: true },\n        Panic { drop_count: &count, aaaaa: false },\n    ];\n\n    // This should clone&append one Panic{..} at the end, and then panic while\n    // cloning second Panic{..}. This means that `Panic::drop` should be called\n    // 4 times (3 for items already in vector, 1 for just appended).\n    //\n    // Previously just appended item was leaked, making drop_count = 3, instead of 4.\n    std::panic::catch_unwind(move || vec.extend_from_within(..)).unwrap_err();\n\n    assert_eq!(count.load(Ordering::SeqCst), 4);\n}\n#![feature(allocator_api)]\n#![feature(box_syntax)]\n#![feature(cow_is_borrowed)]\n#![feature(const_cow_is_borrowed)]\n#![feature(drain_filter)]\n#![feature(exact_size_is_empty)]\n#![feature(new_uninit)]\n#![feature(pattern)]\n#![feature(trusted_len)]\n#![feature(try_reserve)]\n#![feature(unboxed_closures)]\n#![feature(associated_type_bounds)]\n#![feature(binary_heap_into_iter_sorted)]\n#![feature(binary_heap_drain_sorted)]\n#![feature(slice_ptr_get)]\n#![feature(binary_heap_retain)]\n#![feature(binary_heap_as_slice)]\n#![feature(inplace_iteration)]\n#![feature(iter_map_while)]\n#![feature(vecdeque_binary_search)]\n#![feature(slice_group_by)]\n#![feature(slice_partition_dedup)]\n#![feature(vec_spare_capacity)]\n#![feature(string_remove_matches)]\n\nuse std::collections::hash_map::DefaultHasher;\nuse std::hash::{Hash, Hasher};\n\nmod arc;\nmod binary_heap;\nmod borrow;\nmod boxed;\nmod btree_set_hash;\nmod cow_str;\nmod fmt;\nmod heap;\nmod linked_list;\nmod rc;\nmod slice;\nmod str;\nmod string;\nmod vec;\nmod vec_deque;\n\nfn hash<T: Hash>(t: &T) -> u64 {\n    let mut s = DefaultHasher::new();\n    t.hash(&mut s);\n    s.finish()\n}\n\n// FIXME: Instantiated functions with i128 in the signature is not supported in Emscripten.\n// See https://github.com/kripken/emscripten-fastcomp/issues/169\n#[cfg(not(target_os = \"emscripten\"))]\n#[test]\nfn test_boxed_hasher() {\n    let ordinary_hash = hash(&5u32);\n\n    let mut hasher_1 = Box::new(DefaultHasher::new());\n    5u32.hash(&mut hasher_1);\n    assert_eq!(ordinary_hash, hasher_1.finish());\n\n    let mut hasher_2 = Box::new(DefaultHasher::new()) as Box<dyn Hasher>;\n    5u32.hash(&mut hasher_2);\n    assert_eq!(ordinary_hash, hasher_2.finish());\n}\nuse std::borrow::Cow;\n\n// check that Cow<'a, str> implements addition\n#[test]\nfn check_cow_add_cow() {\n    let borrowed1 = Cow::Borrowed(\"Hello, \");\n    let borrowed2 = Cow::Borrowed(\"World!\");\n    let borrow_empty = Cow::Borrowed(\"\");\n\n    let owned1: Cow<'_, str> = Cow::Owned(String::from(\"Hi, \"));\n    let owned2: Cow<'_, str> = Cow::Owned(String::from(\"Rustaceans!\"));\n    let owned_empty: Cow<'_, str> = Cow::Owned(String::new());\n\n    assert_eq!(\"Hello, World!\", borrowed1.clone() + borrowed2.clone());\n    assert_eq!(\"Hello, Rustaceans!\", borrowed1.clone() + owned2.clone());\n\n    assert_eq!(\"Hi, World!\", owned1.clone() + borrowed2.clone());\n    assert_eq!(\"Hi, Rustaceans!\", owned1.clone() + owned2.clone());\n\n    if let Cow::Owned(_) = borrowed1.clone() + borrow_empty.clone() {\n        panic!(\"Adding empty strings to a borrow should note allocate\");\n    }\n    if let Cow::Owned(_) = borrow_empty.clone() + borrowed1.clone() {\n        panic!(\"Adding empty strings to a borrow should note allocate\");\n    }\n    if let Cow::Owned(_) = borrowed1.clone() + owned_empty.clone() {\n        panic!(\"Adding empty strings to a borrow should note allocate\");\n    }\n    if let Cow::Owned(_) = owned_empty.clone() + borrowed1.clone() {\n        panic!(\"Adding empty strings to a borrow should note allocate\");\n    }\n}\n\n#[test]\nfn check_cow_add_str() {\n    let borrowed = Cow::Borrowed(\"Hello, \");\n    let borrow_empty = Cow::Borrowed(\"\");\n\n    let owned: Cow<'_, str> = Cow::Owned(String::from(\"Hi, \"));\n    let owned_empty: Cow<'_, str> = Cow::Owned(String::new());\n\n    assert_eq!(\"Hello, World!\", borrowed.clone() + \"World!\");\n\n    assert_eq!(\"Hi, World!\", owned.clone() + \"World!\");\n\n    if let Cow::Owned(_) = borrowed.clone() + \"\" {\n        panic!(\"Adding empty strings to a borrow should note allocate\");\n    }\n    if let Cow::Owned(_) = borrow_empty.clone() + \"Hello, \" {\n        panic!(\"Adding empty strings to a borrow should note allocate\");\n    }\n    if let Cow::Owned(_) = owned_empty.clone() + \"Hello, \" {\n        panic!(\"Adding empty strings to a borrow should note allocate\");\n    }\n}\n\n#[test]\nfn check_cow_add_assign_cow() {\n    let mut borrowed1 = Cow::Borrowed(\"Hello, \");\n    let borrowed2 = Cow::Borrowed(\"World!\");\n    let borrow_empty = Cow::Borrowed(\"\");\n\n    let mut owned1: Cow<'_, str> = Cow::Owned(String::from(\"Hi, \"));\n    let owned2: Cow<'_, str> = Cow::Owned(String::from(\"Rustaceans!\"));\n    let owned_empty: Cow<'_, str> = Cow::Owned(String::new());\n\n    let mut s = borrowed1.clone();\n    s += borrow_empty.clone();\n    assert_eq!(\"Hello, \", s);\n    if let Cow::Owned(_) = s {\n        panic!(\"Adding empty strings to a borrow should note allocate\");\n    }\n    let mut s = borrow_empty.clone();\n    s += borrowed1.clone();\n    assert_eq!(\"Hello, \", s);\n    if let Cow::Owned(_) = s {\n        panic!(\"Adding empty strings to a borrow should note allocate\");\n    }\n    let mut s = borrowed1.clone();\n    s += owned_empty.clone();\n    assert_eq!(\"Hello, \", s);\n    if let Cow::Owned(_) = s {\n        panic!(\"Adding empty strings to a borrow should note allocate\");\n    }\n    let mut s = owned_empty.clone();\n    s += borrowed1.clone();\n    assert_eq!(\"Hello, \", s);\n    if let Cow::Owned(_) = s {\n        panic!(\"Adding empty strings to a borrow should note allocate\");\n    }\n\n    owned1 += borrowed2;\n    borrowed1 += owned2;\n\n    assert_eq!(\"Hi, World!\", owned1);\n    assert_eq!(\"Hello, Rustaceans!\", borrowed1);\n}\n\n#[test]\nfn check_cow_add_assign_str() {\n    let mut borrowed = Cow::Borrowed(\"Hello, \");\n    let borrow_empty = Cow::Borrowed(\"\");\n\n    let mut owned: Cow<'_, str> = Cow::Owned(String::from(\"Hi, \"));\n    let owned_empty: Cow<'_, str> = Cow::Owned(String::new());\n\n    let mut s = borrowed.clone();\n    s += \"\";\n    assert_eq!(\"Hello, \", s);\n    if let Cow::Owned(_) = s {\n        panic!(\"Adding empty strings to a borrow should note allocate\");\n    }\n    let mut s = borrow_empty.clone();\n    s += \"World!\";\n    assert_eq!(\"World!\", s);\n    if let Cow::Owned(_) = s {\n        panic!(\"Adding empty strings to a borrow should note allocate\");\n    }\n    let mut s = owned_empty.clone();\n    s += \"World!\";\n    assert_eq!(\"World!\", s);\n    if let Cow::Owned(_) = s {\n        panic!(\"Adding empty strings to a borrow should note allocate\");\n    }\n\n    owned += \"World!\";\n    borrowed += \"World!\";\n\n    assert_eq!(\"Hi, World!\", owned);\n    assert_eq!(\"Hello, World!\", borrowed);\n}\n\n#[test]\nfn check_cow_clone_from() {\n    let mut c1: Cow<'_, str> = Cow::Owned(String::with_capacity(25));\n    let s: String = \"hi\".to_string();\n    assert!(s.capacity() < 25);\n    let c2: Cow<'_, str> = Cow::Owned(s);\n    c1.clone_from(&c2);\n    assert!(c1.into_owned().capacity() >= 25);\n    let mut c3: Cow<'_, str> = Cow::Borrowed(\"bye\");\n    c3.clone_from(&c2);\n    assert_eq!(c2, c3);\n}\nuse std::any::Any;\nuse std::cell::RefCell;\nuse std::cmp::PartialEq;\nuse std::iter::TrustedLen;\nuse std::mem;\nuse std::rc::{Rc, Weak};\n\n#[test]\nfn uninhabited() {\n    enum Void {}\n    let mut a = Weak::<Void>::new();\n    a = a.clone();\n    assert!(a.upgrade().is_none());\n\n    let mut a: Weak<dyn Any> = a; // Unsizing\n    a = a.clone();\n    assert!(a.upgrade().is_none());\n}\n\n#[test]\nfn slice() {\n    let a: Rc<[u32; 3]> = Rc::new([3, 2, 1]);\n    let a: Rc<[u32]> = a; // Unsizing\n    let b: Rc<[u32]> = Rc::from(&[3, 2, 1][..]); // Conversion\n    assert_eq!(a, b);\n\n    // Exercise is_dangling() with a DST\n    let mut a = Rc::downgrade(&a);\n    a = a.clone();\n    assert!(a.upgrade().is_some());\n}\n\n#[test]\nfn trait_object() {\n    let a: Rc<u32> = Rc::new(4);\n    let a: Rc<dyn Any> = a; // Unsizing\n\n    // Exercise is_dangling() with a DST\n    let mut a = Rc::downgrade(&a);\n    a = a.clone();\n    assert!(a.upgrade().is_some());\n\n    let mut b = Weak::<u32>::new();\n    b = b.clone();\n    assert!(b.upgrade().is_none());\n    let mut b: Weak<dyn Any> = b; // Unsizing\n    b = b.clone();\n    assert!(b.upgrade().is_none());\n}\n\n#[test]\nfn float_nan_ne() {\n    let x = Rc::new(f32::NAN);\n    assert!(x != x);\n    assert!(!(x == x));\n}\n\n#[test]\nfn partial_eq() {\n    struct TestPEq(RefCell<usize>);\n    impl PartialEq for TestPEq {\n        fn eq(&self, other: &TestPEq) -> bool {\n            *self.0.borrow_mut() += 1;\n            *other.0.borrow_mut() += 1;\n            true\n        }\n    }\n    let x = Rc::new(TestPEq(RefCell::new(0)));\n    assert!(x == x);\n    assert!(!(x != x));\n    assert_eq!(*x.0.borrow(), 4);\n}\n\n#[test]\nfn eq() {\n    #[derive(Eq)]\n    struct TestEq(RefCell<usize>);\n    impl PartialEq for TestEq {\n        fn eq(&self, other: &TestEq) -> bool {\n            *self.0.borrow_mut() += 1;\n            *other.0.borrow_mut() += 1;\n            true\n        }\n    }\n    let x = Rc::new(TestEq(RefCell::new(0)));\n    assert!(x == x);\n    assert!(!(x != x));\n    assert_eq!(*x.0.borrow(), 0);\n}\n\nconst SHARED_ITER_MAX: u16 = 100;\n\nfn assert_trusted_len<I: TrustedLen>(_: &I) {}\n\n#[test]\nfn shared_from_iter_normal() {\n    // Exercise the base implementation for non-`TrustedLen` iterators.\n    {\n        // `Filter` is never `TrustedLen` since we don't\n        // know statically how many elements will be kept:\n        let iter = (0..SHARED_ITER_MAX).filter(|x| x % 2 == 0).map(Box::new);\n\n        // Collecting into a `Vec<T>` or `Rc<[T]>` should make no difference:\n        let vec = iter.clone().collect::<Vec<_>>();\n        let rc = iter.collect::<Rc<[_]>>();\n        assert_eq!(&*vec, &*rc);\n\n        // Clone a bit and let these get dropped.\n        {\n            let _rc_2 = rc.clone();\n            let _rc_3 = rc.clone();\n            let _rc_4 = Rc::downgrade(&_rc_3);\n        }\n    } // Drop what hasn't been here.\n}\n\n#[test]\nfn shared_from_iter_trustedlen_normal() {\n    // Exercise the `TrustedLen` implementation under normal circumstances\n    // where `size_hint()` matches `(_, Some(exact_len))`.\n    {\n        let iter = (0..SHARED_ITER_MAX).map(Box::new);\n        assert_trusted_len(&iter);\n\n        // Collecting into a `Vec<T>` or `Rc<[T]>` should make no difference:\n        let vec = iter.clone().collect::<Vec<_>>();\n        let rc = iter.collect::<Rc<[_]>>();\n        assert_eq!(&*vec, &*rc);\n        assert_eq!(mem::size_of::<Box<u16>>() * SHARED_ITER_MAX as usize, mem::size_of_val(&*rc));\n\n        // Clone a bit and let these get dropped.\n        {\n            let _rc_2 = rc.clone();\n            let _rc_3 = rc.clone();\n            let _rc_4 = Rc::downgrade(&_rc_3);\n        }\n    } // Drop what hasn't been here.\n\n    // Try a ZST to make sure it is handled well.\n    {\n        let iter = (0..SHARED_ITER_MAX).map(drop);\n        let vec = iter.clone().collect::<Vec<_>>();\n        let rc = iter.collect::<Rc<[_]>>();\n        assert_eq!(&*vec, &*rc);\n        assert_eq!(0, mem::size_of_val(&*rc));\n        {\n            let _rc_2 = rc.clone();\n            let _rc_3 = rc.clone();\n            let _rc_4 = Rc::downgrade(&_rc_3);\n        }\n    }\n}\n\n#[test]\n#[should_panic = \"I've almost got 99 problems.\"]\nfn shared_from_iter_trustedlen_panic() {\n    // Exercise the `TrustedLen` implementation when `size_hint()` matches\n    // `(_, Some(exact_len))` but where `.next()` drops before the last iteration.\n    let iter = (0..SHARED_ITER_MAX).map(|val| match val {\n        98 => panic!(\"I've almost got 99 problems.\"),\n        _ => Box::new(val),\n    });\n    assert_trusted_len(&iter);\n    let _ = iter.collect::<Rc<[_]>>();\n\n    panic!(\"I am unreachable.\");\n}\n\n#[test]\nfn shared_from_iter_trustedlen_no_fuse() {\n    // Exercise the `TrustedLen` implementation when `size_hint()` matches\n    // `(_, Some(exact_len))` but where the iterator does not behave in a fused manner.\n    struct Iter(std::vec::IntoIter<Option<Box<u8>>>);\n\n    unsafe impl TrustedLen for Iter {}\n\n    impl Iterator for Iter {\n        fn size_hint(&self) -> (usize, Option<usize>) {\n            (2, Some(2))\n        }\n\n        type Item = Box<u8>;\n\n        fn next(&mut self) -> Option<Self::Item> {\n            self.0.next().flatten()\n        }\n    }\n\n    let vec = vec![Some(Box::new(42)), Some(Box::new(24)), None, Some(Box::new(12))];\n    let iter = Iter(vec.into_iter());\n    assert_trusted_len(&iter);\n    assert_eq!(&[Box::new(42), Box::new(24)], &*iter.collect::<Rc<[_]>>());\n}\nuse std::cell::Cell;\nuse std::cmp::Ordering::{self, Equal, Greater, Less};\nuse std::convert::identity;\nuse std::mem;\nuse std::panic;\nuse std::rc::Rc;\nuse std::sync::atomic::{AtomicUsize, Ordering::Relaxed};\n\nuse rand::distributions::Standard;\nuse rand::seq::SliceRandom;\nuse rand::{thread_rng, Rng, RngCore};\n\nfn square(n: usize) -> usize {\n    n * n\n}\n\nfn is_odd(n: &usize) -> bool {\n    *n % 2 == 1\n}\n\n#[test]\nfn test_from_fn() {\n    // Test on-stack from_fn.\n    let mut v: Vec<_> = (0..3).map(square).collect();\n    {\n        let v = v;\n        assert_eq!(v.len(), 3);\n        assert_eq!(v[0], 0);\n        assert_eq!(v[1], 1);\n        assert_eq!(v[2], 4);\n    }\n\n    // Test on-heap from_fn.\n    v = (0..5).map(square).collect();\n    {\n        let v = v;\n        assert_eq!(v.len(), 5);\n        assert_eq!(v[0], 0);\n        assert_eq!(v[1], 1);\n        assert_eq!(v[2], 4);\n        assert_eq!(v[3], 9);\n        assert_eq!(v[4], 16);\n    }\n}\n\n#[test]\nfn test_from_elem() {\n    // Test on-stack from_elem.\n    let mut v = vec![10, 10];\n    {\n        let v = v;\n        assert_eq!(v.len(), 2);\n        assert_eq!(v[0], 10);\n        assert_eq!(v[1], 10);\n    }\n\n    // Test on-heap from_elem.\n    v = vec![20; 6];\n    {\n        let v = &v[..];\n        assert_eq!(v[0], 20);\n        assert_eq!(v[1], 20);\n        assert_eq!(v[2], 20);\n        assert_eq!(v[3], 20);\n        assert_eq!(v[4], 20);\n        assert_eq!(v[5], 20);\n    }\n}\n\n#[test]\nfn test_is_empty() {\n    let xs: [i32; 0] = [];\n    assert!(xs.is_empty());\n    assert!(![0].is_empty());\n}\n\n#[test]\nfn test_len_divzero() {\n    type Z = [i8; 0];\n    let v0: &[Z] = &[];\n    let v1: &[Z] = &[[]];\n    let v2: &[Z] = &[[], []];\n    assert_eq!(mem::size_of::<Z>(), 0);\n    assert_eq!(v0.len(), 0);\n    assert_eq!(v1.len(), 1);\n    assert_eq!(v2.len(), 2);\n}\n\n#[test]\nfn test_get() {\n    let mut a = vec![11];\n    assert_eq!(a.get(1), None);\n    a = vec![11, 12];\n    assert_eq!(a.get(1).unwrap(), &12);\n    a = vec![11, 12, 13];\n    assert_eq!(a.get(1).unwrap(), &12);\n}\n\n#[test]\nfn test_first() {\n    let mut a = vec![];\n    assert_eq!(a.first(), None);\n    a = vec![11];\n    assert_eq!(a.first().unwrap(), &11);\n    a = vec![11, 12];\n    assert_eq!(a.first().unwrap(), &11);\n}\n\n#[test]\nfn test_first_mut() {\n    let mut a = vec![];\n    assert_eq!(a.first_mut(), None);\n    a = vec![11];\n    assert_eq!(*a.first_mut().unwrap(), 11);\n    a = vec![11, 12];\n    assert_eq!(*a.first_mut().unwrap(), 11);\n}\n\n#[test]\nfn test_split_first() {\n    let mut a = vec![11];\n    let b: &[i32] = &[];\n    assert!(b.split_first().is_none());\n    assert_eq!(a.split_first(), Some((&11, b)));\n    a = vec![11, 12];\n    let b: &[i32] = &[12];\n    assert_eq!(a.split_first(), Some((&11, b)));\n}\n\n#[test]\nfn test_split_first_mut() {\n    let mut a = vec![11];\n    let b: &mut [i32] = &mut [];\n    assert!(b.split_first_mut().is_none());\n    assert!(a.split_first_mut() == Some((&mut 11, b)));\n    a = vec![11, 12];\n    let b: &mut [_] = &mut [12];\n    assert!(a.split_first_mut() == Some((&mut 11, b)));\n}\n\n#[test]\nfn test_split_last() {\n    let mut a = vec![11];\n    let b: &[i32] = &[];\n    assert!(b.split_last().is_none());\n    assert_eq!(a.split_last(), Some((&11, b)));\n    a = vec![11, 12];\n    let b: &[_] = &[11];\n    assert_eq!(a.split_last(), Some((&12, b)));\n}\n\n#[test]\nfn test_split_last_mut() {\n    let mut a = vec![11];\n    let b: &mut [i32] = &mut [];\n    assert!(b.split_last_mut().is_none());\n    assert!(a.split_last_mut() == Some((&mut 11, b)));\n\n    a = vec![11, 12];\n    let b: &mut [_] = &mut [11];\n    assert!(a.split_last_mut() == Some((&mut 12, b)));\n}\n\n#[test]\nfn test_last() {\n    let mut a = vec![];\n    assert_eq!(a.last(), None);\n    a = vec![11];\n    assert_eq!(a.last().unwrap(), &11);\n    a = vec![11, 12];\n    assert_eq!(a.last().unwrap(), &12);\n}\n\n#[test]\nfn test_last_mut() {\n    let mut a = vec![];\n    assert_eq!(a.last_mut(), None);\n    a = vec![11];\n    assert_eq!(*a.last_mut().unwrap(), 11);\n    a = vec![11, 12];\n    assert_eq!(*a.last_mut().unwrap(), 12);\n}\n\n#[test]\nfn test_slice() {\n    // Test fixed length vector.\n    let vec_fixed = [1, 2, 3, 4];\n    let v_a = vec_fixed[1..vec_fixed.len()].to_vec();\n    assert_eq!(v_a.len(), 3);\n\n    assert_eq!(v_a[0], 2);\n    assert_eq!(v_a[1], 3);\n    assert_eq!(v_a[2], 4);\n\n    // Test on stack.\n    let vec_stack: &[_] = &[1, 2, 3];\n    let v_b = vec_stack[1..3].to_vec();\n    assert_eq!(v_b.len(), 2);\n\n    assert_eq!(v_b[0], 2);\n    assert_eq!(v_b[1], 3);\n\n    // Test `Box<[T]>`\n    let vec_unique = vec![1, 2, 3, 4, 5, 6];\n    let v_d = vec_unique[1..6].to_vec();\n    assert_eq!(v_d.len(), 5);\n\n    assert_eq!(v_d[0], 2);\n    assert_eq!(v_d[1], 3);\n    assert_eq!(v_d[2], 4);\n    assert_eq!(v_d[3], 5);\n    assert_eq!(v_d[4], 6);\n}\n\n#[test]\nfn test_slice_from() {\n    let vec: &[_] = &[1, 2, 3, 4];\n    assert_eq!(&vec[..], vec);\n    let b: &[_] = &[3, 4];\n    assert_eq!(&vec[2..], b);\n    let b: &[_] = &[];\n    assert_eq!(&vec[4..], b);\n}\n\n#[test]\nfn test_slice_to() {\n    let vec: &[_] = &[1, 2, 3, 4];\n    assert_eq!(&vec[..4], vec);\n    let b: &[_] = &[1, 2];\n    assert_eq!(&vec[..2], b);\n    let b: &[_] = &[];\n    assert_eq!(&vec[..0], b);\n}\n\n#[test]\nfn test_pop() {\n    let mut v = vec![5];\n    let e = v.pop();\n    assert_eq!(v.len(), 0);\n    assert_eq!(e, Some(5));\n    let f = v.pop();\n    assert_eq!(f, None);\n    let g = v.pop();\n    assert_eq!(g, None);\n}\n\n#[test]\nfn test_swap_remove() {\n    let mut v = vec![1, 2, 3, 4, 5];\n    let mut e = v.swap_remove(0);\n    assert_eq!(e, 1);\n    assert_eq!(v, [5, 2, 3, 4]);\n    e = v.swap_remove(3);\n    assert_eq!(e, 4);\n    assert_eq!(v, [5, 2, 3]);\n}\n\n#[test]\n#[should_panic]\nfn test_swap_remove_fail() {\n    let mut v = vec![1];\n    let _ = v.swap_remove(0);\n    let _ = v.swap_remove(0);\n}\n\n#[test]\nfn test_swap_remove_noncopyable() {\n    // Tests that we don't accidentally run destructors twice.\n    let mut v: Vec<Box<_>> = Vec::new();\n    v.push(box 0);\n    v.push(box 0);\n    v.push(box 0);\n    let mut _e = v.swap_remove(0);\n    assert_eq!(v.len(), 2);\n    _e = v.swap_remove(1);\n    assert_eq!(v.len(), 1);\n    _e = v.swap_remove(0);\n    assert_eq!(v.len(), 0);\n}\n\n#[test]\nfn test_push() {\n    // Test on-stack push().\n    let mut v = vec![];\n    v.push(1);\n    assert_eq!(v.len(), 1);\n    assert_eq!(v[0], 1);\n\n    // Test on-heap push().\n    v.push(2);\n    assert_eq!(v.len(), 2);\n    assert_eq!(v[0], 1);\n    assert_eq!(v[1], 2);\n}\n\n#[test]\nfn test_truncate() {\n    let mut v: Vec<Box<_>> = vec![box 6, box 5, box 4];\n    v.truncate(1);\n    let v = v;\n    assert_eq!(v.len(), 1);\n    assert_eq!(*(v[0]), 6);\n    // If the unsafe block didn't drop things properly, we blow up here.\n}\n\n#[test]\nfn test_clear() {\n    let mut v: Vec<Box<_>> = vec![box 6, box 5, box 4];\n    v.clear();\n    assert_eq!(v.len(), 0);\n    // If the unsafe block didn't drop things properly, we blow up here.\n}\n\n#[test]\nfn test_retain() {\n    let mut v = vec![1, 2, 3, 4, 5];\n    v.retain(is_odd);\n    assert_eq!(v, [1, 3, 5]);\n}\n\n#[test]\nfn test_binary_search() {\n    assert_eq!([1, 2, 3, 4, 5].binary_search(&5).ok(), Some(4));\n    assert_eq!([1, 2, 3, 4, 5].binary_search(&4).ok(), Some(3));\n    assert_eq!([1, 2, 3, 4, 5].binary_search(&3).ok(), Some(2));\n    assert_eq!([1, 2, 3, 4, 5].binary_search(&2).ok(), Some(1));\n    assert_eq!([1, 2, 3, 4, 5].binary_search(&1).ok(), Some(0));\n\n    assert_eq!([2, 4, 6, 8, 10].binary_search(&1).ok(), None);\n    assert_eq!([2, 4, 6, 8, 10].binary_search(&5).ok(), None);\n    assert_eq!([2, 4, 6, 8, 10].binary_search(&4).ok(), Some(1));\n    assert_eq!([2, 4, 6, 8, 10].binary_search(&10).ok(), Some(4));\n\n    assert_eq!([2, 4, 6, 8].binary_search(&1).ok(), None);\n    assert_eq!([2, 4, 6, 8].binary_search(&5).ok(), None);\n    assert_eq!([2, 4, 6, 8].binary_search(&4).ok(), Some(1));\n    assert_eq!([2, 4, 6, 8].binary_search(&8).ok(), Some(3));\n\n    assert_eq!([2, 4, 6].binary_search(&1).ok(), None);\n    assert_eq!([2, 4, 6].binary_search(&5).ok(), None);\n    assert_eq!([2, 4, 6].binary_search(&4).ok(), Some(1));\n    assert_eq!([2, 4, 6].binary_search(&6).ok(), Some(2));\n\n    assert_eq!([2, 4].binary_search(&1).ok(), None);\n    assert_eq!([2, 4].binary_search(&5).ok(), None);\n    assert_eq!([2, 4].binary_search(&2).ok(), Some(0));\n    assert_eq!([2, 4].binary_search(&4).ok(), Some(1));\n\n    assert_eq!([2].binary_search(&1).ok(), None);\n    assert_eq!([2].binary_search(&5).ok(), None);\n    assert_eq!([2].binary_search(&2).ok(), Some(0));\n\n    assert_eq!([].binary_search(&1).ok(), None);\n    assert_eq!([].binary_search(&5).ok(), None);\n\n    assert!([1, 1, 1, 1, 1].binary_search(&1).ok() != None);\n    assert!([1, 1, 1, 1, 2].binary_search(&1).ok() != None);\n    assert!([1, 1, 1, 2, 2].binary_search(&1).ok() != None);\n    assert!([1, 1, 2, 2, 2].binary_search(&1).ok() != None);\n    assert_eq!([1, 2, 2, 2, 2].binary_search(&1).ok(), Some(0));\n\n    assert_eq!([1, 2, 3, 4, 5].binary_search(&6).ok(), None);\n    assert_eq!([1, 2, 3, 4, 5].binary_search(&0).ok(), None);\n}\n\n#[test]\nfn test_reverse() {\n    let mut v = vec![10, 20];\n    assert_eq!(v[0], 10);\n    assert_eq!(v[1], 20);\n    v.reverse();\n    assert_eq!(v[0], 20);\n    assert_eq!(v[1], 10);\n\n    let mut v3 = Vec::<i32>::new();\n    v3.reverse();\n    assert!(v3.is_empty());\n\n    // check the 1-byte-types path\n    let mut v = (-50..51i8).collect::<Vec<_>>();\n    v.reverse();\n    assert_eq!(v, (-50..51i8).rev().collect::<Vec<_>>());\n\n    // check the 2-byte-types path\n    let mut v = (-50..51i16).collect::<Vec<_>>();\n    v.reverse();\n    assert_eq!(v, (-50..51i16).rev().collect::<Vec<_>>());\n}\n\n#[test]\n#[cfg_attr(miri, ignore)] // Miri is too slow\nfn test_sort() {\n    let mut rng = thread_rng();\n\n    for len in (2..25).chain(500..510) {\n        for &modulus in &[5, 10, 100, 1000] {\n            for _ in 0..10 {\n                let orig: Vec<_> =\n                    rng.sample_iter::<i32, _>(&Standard).map(|x| x % modulus).take(len).collect();\n\n                // Sort in default order.\n                let mut v = orig.clone();\n                v.sort();\n                assert!(v.windows(2).all(|w| w[0] <= w[1]));\n\n                // Sort in ascending order.\n                let mut v = orig.clone();\n                v.sort_by(|a, b| a.cmp(b));\n                assert!(v.windows(2).all(|w| w[0] <= w[1]));\n\n                // Sort in descending order.\n                let mut v = orig.clone();\n                v.sort_by(|a, b| b.cmp(a));\n                assert!(v.windows(2).all(|w| w[0] >= w[1]));\n\n                // Sort in lexicographic order.\n                let mut v1 = orig.clone();\n                let mut v2 = orig.clone();\n                v1.sort_by_key(|x| x.to_string());\n                v2.sort_by_cached_key(|x| x.to_string());\n                assert!(v1.windows(2).all(|w| w[0].to_string() <= w[1].to_string()));\n                assert!(v1 == v2);\n\n                // Sort with many pre-sorted runs.\n                let mut v = orig.clone();\n                v.sort();\n                v.reverse();\n                for _ in 0..5 {\n                    let a = rng.gen::<usize>() % len;\n                    let b = rng.gen::<usize>() % len;\n                    if a < b {\n                        v[a..b].reverse();\n                    } else {\n                        v.swap(a, b);\n                    }\n                }\n                v.sort();\n                assert!(v.windows(2).all(|w| w[0] <= w[1]));\n            }\n        }\n    }\n\n    // Sort using a completely random comparison function.\n    // This will reorder the elements *somehow*, but won't panic.\n    let mut v = [0; 500];\n    for i in 0..v.len() {\n        v[i] = i as i32;\n    }\n    v.sort_by(|_, _| *[Less, Equal, Greater].choose(&mut rng).unwrap());\n    v.sort();\n    for i in 0..v.len() {\n        assert_eq!(v[i], i as i32);\n    }\n\n    // Should not panic.\n    [0i32; 0].sort();\n    [(); 10].sort();\n    [(); 100].sort();\n\n    let mut v = [0xDEADBEEFu64];\n    v.sort();\n    assert!(v == [0xDEADBEEF]);\n}\n\n#[test]\nfn test_sort_stability() {\n    // Miri is too slow\n    let large_range = if cfg!(miri) { 0..0 } else { 500..510 };\n    let rounds = if cfg!(miri) { 1 } else { 10 };\n\n    for len in (2..25).chain(large_range) {\n        for _ in 0..rounds {\n            let mut counts = [0; 10];\n\n            // create a vector like [(6, 1), (5, 1), (6, 2), ...],\n            // where the first item of each tuple is random, but\n            // the second item represents which occurrence of that\n            // number this element is, i.e., the second elements\n            // will occur in sorted order.\n            let orig: Vec<_> = (0..len)\n                .map(|_| {\n                    let n = thread_rng().gen::<usize>() % 10;\n                    counts[n] += 1;\n                    (n, counts[n])\n                })\n                .collect();\n\n            let mut v = orig.clone();\n            // Only sort on the first element, so an unstable sort\n            // may mix up the counts.\n            v.sort_by(|&(a, _), &(b, _)| a.cmp(&b));\n\n            // This comparison includes the count (the second item\n            // of the tuple), so elements with equal first items\n            // will need to be ordered with increasing\n            // counts... i.e., exactly asserting that this sort is\n            // stable.\n            assert!(v.windows(2).all(|w| w[0] <= w[1]));\n\n            let mut v = orig.clone();\n            v.sort_by_cached_key(|&(x, _)| x);\n            assert!(v.windows(2).all(|w| w[0] <= w[1]));\n        }\n    }\n}\n\n#[test]\nfn test_rotate_left() {\n    let expected: Vec<_> = (0..13).collect();\n    let mut v = Vec::new();\n\n    // no-ops\n    v.clone_from(&expected);\n    v.rotate_left(0);\n    assert_eq!(v, expected);\n    v.rotate_left(expected.len());\n    assert_eq!(v, expected);\n    let mut zst_array = [(), (), ()];\n    zst_array.rotate_left(2);\n\n    // happy path\n    v = (5..13).chain(0..5).collect();\n    v.rotate_left(8);\n    assert_eq!(v, expected);\n\n    let expected: Vec<_> = (0..1000).collect();\n\n    // small rotations in large slice, uses ptr::copy\n    v = (2..1000).chain(0..2).collect();\n    v.rotate_left(998);\n    assert_eq!(v, expected);\n    v = (998..1000).chain(0..998).collect();\n    v.rotate_left(2);\n    assert_eq!(v, expected);\n\n    // non-small prime rotation, has a few rounds of swapping\n    v = (389..1000).chain(0..389).collect();\n    v.rotate_left(1000 - 389);\n    assert_eq!(v, expected);\n}\n\n#[test]\nfn test_rotate_right() {\n    let expected: Vec<_> = (0..13).collect();\n    let mut v = Vec::new();\n\n    // no-ops\n    v.clone_from(&expected);\n    v.rotate_right(0);\n    assert_eq!(v, expected);\n    v.rotate_right(expected.len());\n    assert_eq!(v, expected);\n    let mut zst_array = [(), (), ()];\n    zst_array.rotate_right(2);\n\n    // happy path\n    v = (5..13).chain(0..5).collect();\n    v.rotate_right(5);\n    assert_eq!(v, expected);\n\n    let expected: Vec<_> = (0..1000).collect();\n\n    // small rotations in large slice, uses ptr::copy\n    v = (2..1000).chain(0..2).collect();\n    v.rotate_right(2);\n    assert_eq!(v, expected);\n    v = (998..1000).chain(0..998).collect();\n    v.rotate_right(998);\n    assert_eq!(v, expected);\n\n    // non-small prime rotation, has a few rounds of swapping\n    v = (389..1000).chain(0..389).collect();\n    v.rotate_right(389);\n    assert_eq!(v, expected);\n}\n\n#[test]\nfn test_concat() {\n    let v: [Vec<i32>; 0] = [];\n    let c = v.concat();\n    assert_eq!(c, []);\n    let d = [vec![1], vec![2, 3]].concat();\n    assert_eq!(d, [1, 2, 3]);\n\n    let v: &[&[_]] = &[&[1], &[2, 3]];\n    assert_eq!(v.join(&0), [1, 0, 2, 3]);\n    let v: &[&[_]] = &[&[1], &[2], &[3]];\n    assert_eq!(v.join(&0), [1, 0, 2, 0, 3]);\n}\n\n#[test]\nfn test_join() {\n    let v: [Vec<i32>; 0] = [];\n    assert_eq!(v.join(&0), []);\n    assert_eq!([vec![1], vec![2, 3]].join(&0), [1, 0, 2, 3]);\n    assert_eq!([vec![1], vec![2], vec![3]].join(&0), [1, 0, 2, 0, 3]);\n\n    let v: [&[_]; 2] = [&[1], &[2, 3]];\n    assert_eq!(v.join(&0), [1, 0, 2, 3]);\n    let v: [&[_]; 3] = [&[1], &[2], &[3]];\n    assert_eq!(v.join(&0), [1, 0, 2, 0, 3]);\n}\n\n#[test]\nfn test_join_nocopy() {\n    let v: [String; 0] = [];\n    assert_eq!(v.join(\",\"), \"\");\n    assert_eq!([\"a\".to_string(), \"ab\".into()].join(\",\"), \"a,ab\");\n    assert_eq!([\"a\".to_string(), \"ab\".into(), \"abc\".into()].join(\",\"), \"a,ab,abc\");\n    assert_eq!([\"a\".to_string(), \"ab\".into(), \"\".into()].join(\",\"), \"a,ab,\");\n}\n\n#[test]\nfn test_insert() {\n    let mut a = vec![1, 2, 4];\n    a.insert(2, 3);\n    assert_eq!(a, [1, 2, 3, 4]);\n\n    let mut a = vec![1, 2, 3];\n    a.insert(0, 0);\n    assert_eq!(a, [0, 1, 2, 3]);\n\n    let mut a = vec![1, 2, 3];\n    a.insert(3, 4);\n    assert_eq!(a, [1, 2, 3, 4]);\n\n    let mut a = vec![];\n    a.insert(0, 1);\n    assert_eq!(a, [1]);\n}\n\n#[test]\n#[should_panic]\nfn test_insert_oob() {\n    let mut a = vec![1, 2, 3];\n    a.insert(4, 5);\n}\n\n#[test]\nfn test_remove() {\n    let mut a = vec![1, 2, 3, 4];\n\n    assert_eq!(a.remove(2), 3);\n    assert_eq!(a, [1, 2, 4]);\n\n    assert_eq!(a.remove(2), 4);\n    assert_eq!(a, [1, 2]);\n\n    assert_eq!(a.remove(0), 1);\n    assert_eq!(a, [2]);\n\n    assert_eq!(a.remove(0), 2);\n    assert_eq!(a, []);\n}\n\n#[test]\n#[should_panic]\nfn test_remove_fail() {\n    let mut a = vec![1];\n    let _ = a.remove(0);\n    let _ = a.remove(0);\n}\n\n#[test]\nfn test_capacity() {\n    let mut v = vec![0];\n    v.reserve_exact(10);\n    assert!(v.capacity() >= 11);\n}\n\n#[test]\nfn test_slice_2() {\n    let v = vec![1, 2, 3, 4, 5];\n    let v = &v[1..3];\n    assert_eq!(v.len(), 2);\n    assert_eq!(v[0], 2);\n    assert_eq!(v[1], 3);\n}\n\nmacro_rules! assert_order {\n    (Greater, $a:expr, $b:expr) => {\n        assert_eq!($a.cmp($b), Greater);\n        assert!($a > $b);\n    };\n    (Less, $a:expr, $b:expr) => {\n        assert_eq!($a.cmp($b), Less);\n        assert!($a < $b);\n    };\n    (Equal, $a:expr, $b:expr) => {\n        assert_eq!($a.cmp($b), Equal);\n        assert_eq!($a, $b);\n    };\n}\n\n#[test]\nfn test_total_ord_u8() {\n    let c = &[1u8, 2, 3];\n    assert_order!(Greater, &[1u8, 2, 3, 4][..], &c[..]);\n    let c = &[1u8, 2, 3, 4];\n    assert_order!(Less, &[1u8, 2, 3][..], &c[..]);\n    let c = &[1u8, 2, 3, 6];\n    assert_order!(Equal, &[1u8, 2, 3, 6][..], &c[..]);\n    let c = &[1u8, 2, 3, 4, 5, 6];\n    assert_order!(Less, &[1u8, 2, 3, 4, 5, 5, 5, 5][..], &c[..]);\n    let c = &[1u8, 2, 3, 4];\n    assert_order!(Greater, &[2u8, 2][..], &c[..]);\n}\n\n#[test]\nfn test_total_ord_i32() {\n    let c = &[1, 2, 3];\n    assert_order!(Greater, &[1, 2, 3, 4][..], &c[..]);\n    let c = &[1, 2, 3, 4];\n    assert_order!(Less, &[1, 2, 3][..], &c[..]);\n    let c = &[1, 2, 3, 6];\n    assert_order!(Equal, &[1, 2, 3, 6][..], &c[..]);\n    let c = &[1, 2, 3, 4, 5, 6];\n    assert_order!(Less, &[1, 2, 3, 4, 5, 5, 5, 5][..], &c[..]);\n    let c = &[1, 2, 3, 4];\n    assert_order!(Greater, &[2, 2][..], &c[..]);\n}\n\n#[test]\nfn test_iterator() {\n    let xs = [1, 2, 5, 10, 11];\n    let mut it = xs.iter();\n    assert_eq!(it.size_hint(), (5, Some(5)));\n    assert_eq!(it.next().unwrap(), &1);\n    assert_eq!(it.size_hint(), (4, Some(4)));\n    assert_eq!(it.next().unwrap(), &2);\n    assert_eq!(it.size_hint(), (3, Some(3)));\n    assert_eq!(it.next().unwrap(), &5);\n    assert_eq!(it.size_hint(), (2, Some(2)));\n    assert_eq!(it.next().unwrap(), &10);\n    assert_eq!(it.size_hint(), (1, Some(1)));\n    assert_eq!(it.next().unwrap(), &11);\n    assert_eq!(it.size_hint(), (0, Some(0)));\n    assert!(it.next().is_none());\n}\n\n#[test]\nfn test_iter_size_hints() {\n    let mut xs = [1, 2, 5, 10, 11];\n    assert_eq!(xs.iter().size_hint(), (5, Some(5)));\n    assert_eq!(xs.iter_mut().size_hint(), (5, Some(5)));\n}\n\n#[test]\nfn test_iter_as_slice() {\n    let xs = [1, 2, 5, 10, 11];\n    let mut iter = xs.iter();\n    assert_eq!(iter.as_slice(), &[1, 2, 5, 10, 11]);\n    iter.next();\n    assert_eq!(iter.as_slice(), &[2, 5, 10, 11]);\n}\n\n#[test]\nfn test_iter_as_ref() {\n    let xs = [1, 2, 5, 10, 11];\n    let mut iter = xs.iter();\n    assert_eq!(iter.as_ref(), &[1, 2, 5, 10, 11]);\n    iter.next();\n    assert_eq!(iter.as_ref(), &[2, 5, 10, 11]);\n}\n\n#[test]\nfn test_iter_clone() {\n    let xs = [1, 2, 5];\n    let mut it = xs.iter();\n    it.next();\n    let mut jt = it.clone();\n    assert_eq!(it.next(), jt.next());\n    assert_eq!(it.next(), jt.next());\n    assert_eq!(it.next(), jt.next());\n}\n\n#[test]\nfn test_iter_is_empty() {\n    let xs = [1, 2, 5, 10, 11];\n    for i in 0..xs.len() {\n        for j in i..xs.len() {\n            assert_eq!(xs[i..j].iter().is_empty(), xs[i..j].is_empty());\n        }\n    }\n}\n\n#[test]\nfn test_mut_iterator() {\n    let mut xs = [1, 2, 3, 4, 5];\n    for x in &mut xs {\n        *x += 1;\n    }\n    assert!(xs == [2, 3, 4, 5, 6])\n}\n\n#[test]\nfn test_rev_iterator() {\n    let xs = [1, 2, 5, 10, 11];\n    let ys = [11, 10, 5, 2, 1];\n    let mut i = 0;\n    for &x in xs.iter().rev() {\n        assert_eq!(x, ys[i]);\n        i += 1;\n    }\n    assert_eq!(i, 5);\n}\n\n#[test]\nfn test_mut_rev_iterator() {\n    let mut xs = [1, 2, 3, 4, 5];\n    for (i, x) in xs.iter_mut().rev().enumerate() {\n        *x += i;\n    }\n    assert!(xs == [5, 5, 5, 5, 5])\n}\n\n#[test]\nfn test_move_iterator() {\n    let xs = vec![1, 2, 3, 4, 5];\n    assert_eq!(xs.into_iter().fold(0, |a: usize, b: usize| 10 * a + b), 12345);\n}\n\n#[test]\nfn test_move_rev_iterator() {\n    let xs = vec![1, 2, 3, 4, 5];\n    assert_eq!(xs.into_iter().rev().fold(0, |a: usize, b: usize| 10 * a + b), 54321);\n}\n\n#[test]\nfn test_splitator() {\n    let xs = &[1, 2, 3, 4, 5];\n\n    let splits: &[&[_]] = &[&[1], &[3], &[5]];\n    assert_eq!(xs.split(|x| *x % 2 == 0).collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[], &[2, 3, 4, 5]];\n    assert_eq!(xs.split(|x| *x == 1).collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[1, 2, 3, 4], &[]];\n    assert_eq!(xs.split(|x| *x == 5).collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[1, 2, 3, 4, 5]];\n    assert_eq!(xs.split(|x| *x == 10).collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[], &[], &[], &[], &[], &[]];\n    assert_eq!(xs.split(|_| true).collect::<Vec<&[i32]>>(), splits);\n\n    let xs: &[i32] = &[];\n    let splits: &[&[i32]] = &[&[]];\n    assert_eq!(xs.split(|x| *x == 5).collect::<Vec<&[i32]>>(), splits);\n}\n\n#[test]\nfn test_splitator_inclusive() {\n    let xs = &[1, 2, 3, 4, 5];\n\n    let splits: &[&[_]] = &[&[1, 2], &[3, 4], &[5]];\n    assert_eq!(xs.split_inclusive(|x| *x % 2 == 0).collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[1], &[2, 3, 4, 5]];\n    assert_eq!(xs.split_inclusive(|x| *x == 1).collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[1, 2, 3, 4, 5]];\n    assert_eq!(xs.split_inclusive(|x| *x == 5).collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[1, 2, 3, 4, 5]];\n    assert_eq!(xs.split_inclusive(|x| *x == 10).collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[1], &[2], &[3], &[4], &[5]];\n    assert_eq!(xs.split_inclusive(|_| true).collect::<Vec<&[i32]>>(), splits);\n\n    let xs: &[i32] = &[];\n    let splits: &[&[i32]] = &[&[]];\n    assert_eq!(xs.split_inclusive(|x| *x == 5).collect::<Vec<&[i32]>>(), splits);\n}\n\n#[test]\nfn test_splitator_inclusive_reverse() {\n    let xs = &[1, 2, 3, 4, 5];\n\n    let splits: &[&[_]] = &[&[5], &[3, 4], &[1, 2]];\n    assert_eq!(xs.split_inclusive(|x| *x % 2 == 0).rev().collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[2, 3, 4, 5], &[1]];\n    assert_eq!(xs.split_inclusive(|x| *x == 1).rev().collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[1, 2, 3, 4, 5]];\n    assert_eq!(xs.split_inclusive(|x| *x == 5).rev().collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[1, 2, 3, 4, 5]];\n    assert_eq!(xs.split_inclusive(|x| *x == 10).rev().collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[5], &[4], &[3], &[2], &[1]];\n    assert_eq!(xs.split_inclusive(|_| true).rev().collect::<Vec<_>>(), splits);\n\n    let xs: &[i32] = &[];\n    let splits: &[&[i32]] = &[&[]];\n    assert_eq!(xs.split_inclusive(|x| *x == 5).rev().collect::<Vec<_>>(), splits);\n}\n\n#[test]\nfn test_splitator_mut_inclusive() {\n    let xs = &mut [1, 2, 3, 4, 5];\n\n    let splits: &[&[_]] = &[&[1, 2], &[3, 4], &[5]];\n    assert_eq!(xs.split_inclusive_mut(|x| *x % 2 == 0).collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[1], &[2, 3, 4, 5]];\n    assert_eq!(xs.split_inclusive_mut(|x| *x == 1).collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[1, 2, 3, 4, 5]];\n    assert_eq!(xs.split_inclusive_mut(|x| *x == 5).collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[1, 2, 3, 4, 5]];\n    assert_eq!(xs.split_inclusive_mut(|x| *x == 10).collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[1], &[2], &[3], &[4], &[5]];\n    assert_eq!(xs.split_inclusive_mut(|_| true).collect::<Vec<_>>(), splits);\n\n    let xs: &mut [i32] = &mut [];\n    let splits: &[&[i32]] = &[&[]];\n    assert_eq!(xs.split_inclusive_mut(|x| *x == 5).collect::<Vec<_>>(), splits);\n}\n\n#[test]\nfn test_splitator_mut_inclusive_reverse() {\n    let xs = &mut [1, 2, 3, 4, 5];\n\n    let splits: &[&[_]] = &[&[5], &[3, 4], &[1, 2]];\n    assert_eq!(xs.split_inclusive_mut(|x| *x % 2 == 0).rev().collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[2, 3, 4, 5], &[1]];\n    assert_eq!(xs.split_inclusive_mut(|x| *x == 1).rev().collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[1, 2, 3, 4, 5]];\n    assert_eq!(xs.split_inclusive_mut(|x| *x == 5).rev().collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[1, 2, 3, 4, 5]];\n    assert_eq!(xs.split_inclusive_mut(|x| *x == 10).rev().collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[5], &[4], &[3], &[2], &[1]];\n    assert_eq!(xs.split_inclusive_mut(|_| true).rev().collect::<Vec<_>>(), splits);\n\n    let xs: &mut [i32] = &mut [];\n    let splits: &[&[i32]] = &[&[]];\n    assert_eq!(xs.split_inclusive_mut(|x| *x == 5).rev().collect::<Vec<_>>(), splits);\n}\n\n#[test]\nfn test_splitnator() {\n    let xs = &[1, 2, 3, 4, 5];\n\n    let splits: &[&[_]] = &[&[1, 2, 3, 4, 5]];\n    assert_eq!(xs.splitn(1, |x| *x % 2 == 0).collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[1], &[3, 4, 5]];\n    assert_eq!(xs.splitn(2, |x| *x % 2 == 0).collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[], &[], &[], &[4, 5]];\n    assert_eq!(xs.splitn(4, |_| true).collect::<Vec<_>>(), splits);\n\n    let xs: &[i32] = &[];\n    let splits: &[&[i32]] = &[&[]];\n    assert_eq!(xs.splitn(2, |x| *x == 5).collect::<Vec<_>>(), splits);\n}\n\n#[test]\nfn test_splitnator_mut() {\n    let xs = &mut [1, 2, 3, 4, 5];\n\n    let splits: &[&mut [_]] = &[&mut [1, 2, 3, 4, 5]];\n    assert_eq!(xs.splitn_mut(1, |x| *x % 2 == 0).collect::<Vec<_>>(), splits);\n    let splits: &[&mut [_]] = &[&mut [1], &mut [3, 4, 5]];\n    assert_eq!(xs.splitn_mut(2, |x| *x % 2 == 0).collect::<Vec<_>>(), splits);\n    let splits: &[&mut [_]] = &[&mut [], &mut [], &mut [], &mut [4, 5]];\n    assert_eq!(xs.splitn_mut(4, |_| true).collect::<Vec<_>>(), splits);\n\n    let xs: &mut [i32] = &mut [];\n    let splits: &[&mut [i32]] = &[&mut []];\n    assert_eq!(xs.splitn_mut(2, |x| *x == 5).collect::<Vec<_>>(), splits);\n}\n\n#[test]\nfn test_rsplitator() {\n    let xs = &[1, 2, 3, 4, 5];\n\n    let splits: &[&[_]] = &[&[5], &[3], &[1]];\n    assert_eq!(xs.split(|x| *x % 2 == 0).rev().collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[2, 3, 4, 5], &[]];\n    assert_eq!(xs.split(|x| *x == 1).rev().collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[], &[1, 2, 3, 4]];\n    assert_eq!(xs.split(|x| *x == 5).rev().collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[1, 2, 3, 4, 5]];\n    assert_eq!(xs.split(|x| *x == 10).rev().collect::<Vec<_>>(), splits);\n\n    let xs: &[i32] = &[];\n    let splits: &[&[i32]] = &[&[]];\n    assert_eq!(xs.split(|x| *x == 5).rev().collect::<Vec<&[i32]>>(), splits);\n}\n\n#[test]\nfn test_rsplitnator() {\n    let xs = &[1, 2, 3, 4, 5];\n\n    let splits: &[&[_]] = &[&[1, 2, 3, 4, 5]];\n    assert_eq!(xs.rsplitn(1, |x| *x % 2 == 0).collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[5], &[1, 2, 3]];\n    assert_eq!(xs.rsplitn(2, |x| *x % 2 == 0).collect::<Vec<_>>(), splits);\n    let splits: &[&[_]] = &[&[], &[], &[], &[1, 2]];\n    assert_eq!(xs.rsplitn(4, |_| true).collect::<Vec<_>>(), splits);\n\n    let xs: &[i32] = &[];\n    let splits: &[&[i32]] = &[&[]];\n    assert_eq!(xs.rsplitn(2, |x| *x == 5).collect::<Vec<&[i32]>>(), splits);\n    assert!(xs.rsplitn(0, |x| *x % 2 == 0).next().is_none());\n}\n\n#[test]\nfn test_windowsator() {\n    let v = &[1, 2, 3, 4];\n\n    let wins: &[&[_]] = &[&[1, 2], &[2, 3], &[3, 4]];\n    assert_eq!(v.windows(2).collect::<Vec<_>>(), wins);\n\n    let wins: &[&[_]] = &[&[1, 2, 3], &[2, 3, 4]];\n    assert_eq!(v.windows(3).collect::<Vec<_>>(), wins);\n    assert!(v.windows(6).next().is_none());\n\n    let wins: &[&[_]] = &[&[3, 4], &[2, 3], &[1, 2]];\n    assert_eq!(v.windows(2).rev().collect::<Vec<&[_]>>(), wins);\n}\n\n#[test]\n#[should_panic]\nfn test_windowsator_0() {\n    let v = &[1, 2, 3, 4];\n    let _it = v.windows(0);\n}\n\n#[test]\nfn test_chunksator() {\n    let v = &[1, 2, 3, 4, 5];\n\n    assert_eq!(v.chunks(2).len(), 3);\n\n    let chunks: &[&[_]] = &[&[1, 2], &[3, 4], &[5]];\n    assert_eq!(v.chunks(2).collect::<Vec<_>>(), chunks);\n    let chunks: &[&[_]] = &[&[1, 2, 3], &[4, 5]];\n    assert_eq!(v.chunks(3).collect::<Vec<_>>(), chunks);\n    let chunks: &[&[_]] = &[&[1, 2, 3, 4, 5]];\n    assert_eq!(v.chunks(6).collect::<Vec<_>>(), chunks);\n\n    let chunks: &[&[_]] = &[&[5], &[3, 4], &[1, 2]];\n    assert_eq!(v.chunks(2).rev().collect::<Vec<_>>(), chunks);\n}\n\n#[test]\n#[should_panic]\nfn test_chunksator_0() {\n    let v = &[1, 2, 3, 4];\n    let _it = v.chunks(0);\n}\n\n#[test]\nfn test_chunks_exactator() {\n    let v = &[1, 2, 3, 4, 5];\n\n    assert_eq!(v.chunks_exact(2).len(), 2);\n\n    let chunks: &[&[_]] = &[&[1, 2], &[3, 4]];\n    assert_eq!(v.chunks_exact(2).collect::<Vec<_>>(), chunks);\n    let chunks: &[&[_]] = &[&[1, 2, 3]];\n    assert_eq!(v.chunks_exact(3).collect::<Vec<_>>(), chunks);\n    let chunks: &[&[_]] = &[];\n    assert_eq!(v.chunks_exact(6).collect::<Vec<_>>(), chunks);\n\n    let chunks: &[&[_]] = &[&[3, 4], &[1, 2]];\n    assert_eq!(v.chunks_exact(2).rev().collect::<Vec<_>>(), chunks);\n}\n\n#[test]\n#[should_panic]\nfn test_chunks_exactator_0() {\n    let v = &[1, 2, 3, 4];\n    let _it = v.chunks_exact(0);\n}\n\n#[test]\nfn test_rchunksator() {\n    let v = &[1, 2, 3, 4, 5];\n\n    assert_eq!(v.rchunks(2).len(), 3);\n\n    let chunks: &[&[_]] = &[&[4, 5], &[2, 3], &[1]];\n    assert_eq!(v.rchunks(2).collect::<Vec<_>>(), chunks);\n    let chunks: &[&[_]] = &[&[3, 4, 5], &[1, 2]];\n    assert_eq!(v.rchunks(3).collect::<Vec<_>>(), chunks);\n    let chunks: &[&[_]] = &[&[1, 2, 3, 4, 5]];\n    assert_eq!(v.rchunks(6).collect::<Vec<_>>(), chunks);\n\n    let chunks: &[&[_]] = &[&[1], &[2, 3], &[4, 5]];\n    assert_eq!(v.rchunks(2).rev().collect::<Vec<_>>(), chunks);\n}\n\n#[test]\n#[should_panic]\nfn test_rchunksator_0() {\n    let v = &[1, 2, 3, 4];\n    let _it = v.rchunks(0);\n}\n\n#[test]\nfn test_rchunks_exactator() {\n    let v = &[1, 2, 3, 4, 5];\n\n    assert_eq!(v.rchunks_exact(2).len(), 2);\n\n    let chunks: &[&[_]] = &[&[4, 5], &[2, 3]];\n    assert_eq!(v.rchunks_exact(2).collect::<Vec<_>>(), chunks);\n    let chunks: &[&[_]] = &[&[3, 4, 5]];\n    assert_eq!(v.rchunks_exact(3).collect::<Vec<_>>(), chunks);\n    let chunks: &[&[_]] = &[];\n    assert_eq!(v.rchunks_exact(6).collect::<Vec<_>>(), chunks);\n\n    let chunks: &[&[_]] = &[&[2, 3], &[4, 5]];\n    assert_eq!(v.rchunks_exact(2).rev().collect::<Vec<_>>(), chunks);\n}\n\n#[test]\n#[should_panic]\nfn test_rchunks_exactator_0() {\n    let v = &[1, 2, 3, 4];\n    let _it = v.rchunks_exact(0);\n}\n\n#[test]\nfn test_reverse_part() {\n    let mut values = [1, 2, 3, 4, 5];\n    values[1..4].reverse();\n    assert!(values == [1, 4, 3, 2, 5]);\n}\n\n#[test]\nfn test_show() {\n    macro_rules! test_show_vec {\n        ($x:expr, $x_str:expr) => {{\n            let (x, x_str) = ($x, $x_str);\n            assert_eq!(format!(\"{:?}\", x), x_str);\n            assert_eq!(format!(\"{:?}\", x), x_str);\n        }};\n    }\n    let empty = Vec::<i32>::new();\n    test_show_vec!(empty, \"[]\");\n    test_show_vec!(vec![1], \"[1]\");\n    test_show_vec!(vec![1, 2, 3], \"[1, 2, 3]\");\n    test_show_vec!(vec![vec![], vec![1], vec![1, 1]], \"[[], [1], [1, 1]]\");\n\n    let empty_mut: &mut [i32] = &mut [];\n    test_show_vec!(empty_mut, \"[]\");\n    let v = &mut [1];\n    test_show_vec!(v, \"[1]\");\n    let v = &mut [1, 2, 3];\n    test_show_vec!(v, \"[1, 2, 3]\");\n    let v: &mut [&mut [_]] = &mut [&mut [], &mut [1], &mut [1, 1]];\n    test_show_vec!(v, \"[[], [1], [1, 1]]\");\n}\n\n#[test]\nfn test_vec_default() {\n    macro_rules! t {\n        ($ty:ty) => {{\n            let v: $ty = Default::default();\n            assert!(v.is_empty());\n        }};\n    }\n\n    t!(&[i32]);\n    t!(Vec<i32>);\n}\n\n#[test]\n#[should_panic]\nfn test_overflow_does_not_cause_segfault() {\n    let mut v = vec![];\n    v.reserve_exact(!0);\n    v.push(1);\n    v.push(2);\n}\n\n#[test]\n#[should_panic]\nfn test_overflow_does_not_cause_segfault_managed() {\n    let mut v = vec![Rc::new(1)];\n    v.reserve_exact(!0);\n    v.push(Rc::new(2));\n}\n\n#[test]\nfn test_mut_split_at() {\n    let mut values = [1, 2, 3, 4, 5];\n    {\n        let (left, right) = values.split_at_mut(2);\n        {\n            let left: &[_] = left;\n            assert!(left[..left.len()] == [1, 2]);\n        }\n        for p in left {\n            *p += 1;\n        }\n\n        {\n            let right: &[_] = right;\n            assert!(right[..right.len()] == [3, 4, 5]);\n        }\n        for p in right {\n            *p += 2;\n        }\n    }\n\n    assert!(values == [2, 3, 5, 6, 7]);\n}\n\n#[derive(Clone, PartialEq)]\nstruct Foo;\n\n#[test]\nfn test_iter_zero_sized() {\n    let mut v = vec![Foo, Foo, Foo];\n    assert_eq!(v.len(), 3);\n    let mut cnt = 0;\n\n    for f in &v {\n        assert!(*f == Foo);\n        cnt += 1;\n    }\n    assert_eq!(cnt, 3);\n\n    for f in &v[1..3] {\n        assert!(*f == Foo);\n        cnt += 1;\n    }\n    assert_eq!(cnt, 5);\n\n    for f in &mut v {\n        assert!(*f == Foo);\n        cnt += 1;\n    }\n    assert_eq!(cnt, 8);\n\n    for f in v {\n        assert!(f == Foo);\n        cnt += 1;\n    }\n    assert_eq!(cnt, 11);\n\n    let xs: [Foo; 3] = [Foo, Foo, Foo];\n    cnt = 0;\n    for f in &xs {\n        assert!(*f == Foo);\n        cnt += 1;\n    }\n    assert!(cnt == 3);\n}\n\n#[test]\nfn test_shrink_to_fit() {\n    let mut xs = vec![0, 1, 2, 3];\n    for i in 4..100 {\n        xs.push(i)\n    }\n    assert_eq!(xs.capacity(), 128);\n    xs.shrink_to_fit();\n    assert_eq!(xs.capacity(), 100);\n    assert_eq!(xs, (0..100).collect::<Vec<_>>());\n}\n\n#[test]\nfn test_starts_with() {\n    assert!(b\"foobar\".starts_with(b\"foo\"));\n    assert!(!b\"foobar\".starts_with(b\"oob\"));\n    assert!(!b\"foobar\".starts_with(b\"bar\"));\n    assert!(!b\"foo\".starts_with(b\"foobar\"));\n    assert!(!b\"bar\".starts_with(b\"foobar\"));\n    assert!(b\"foobar\".starts_with(b\"foobar\"));\n    let empty: &[u8] = &[];\n    assert!(empty.starts_with(empty));\n    assert!(!empty.starts_with(b\"foo\"));\n    assert!(b\"foobar\".starts_with(empty));\n}\n\n#[test]\nfn test_ends_with() {\n    assert!(b\"foobar\".ends_with(b\"bar\"));\n    assert!(!b\"foobar\".ends_with(b\"oba\"));\n    assert!(!b\"foobar\".ends_with(b\"foo\"));\n    assert!(!b\"foo\".ends_with(b\"foobar\"));\n    assert!(!b\"bar\".ends_with(b\"foobar\"));\n    assert!(b\"foobar\".ends_with(b\"foobar\"));\n    let empty: &[u8] = &[];\n    assert!(empty.ends_with(empty));\n    assert!(!empty.ends_with(b\"foo\"));\n    assert!(b\"foobar\".ends_with(empty));\n}\n\n#[test]\nfn test_mut_splitator() {\n    let mut xs = [0, 1, 0, 2, 3, 0, 0, 4, 5, 0];\n    assert_eq!(xs.split_mut(|x| *x == 0).count(), 6);\n    for slice in xs.split_mut(|x| *x == 0) {\n        slice.reverse();\n    }\n    assert!(xs == [0, 1, 0, 3, 2, 0, 0, 5, 4, 0]);\n\n    let mut xs = [0, 1, 0, 2, 3, 0, 0, 4, 5, 0, 6, 7];\n    for slice in xs.split_mut(|x| *x == 0).take(5) {\n        slice.reverse();\n    }\n    assert!(xs == [0, 1, 0, 3, 2, 0, 0, 5, 4, 0, 6, 7]);\n}\n\n#[test]\nfn test_mut_splitator_rev() {\n    let mut xs = [1, 2, 0, 3, 4, 0, 0, 5, 6, 0];\n    for slice in xs.split_mut(|x| *x == 0).rev().take(4) {\n        slice.reverse();\n    }\n    assert!(xs == [1, 2, 0, 4, 3, 0, 0, 6, 5, 0]);\n}\n\n#[test]\nfn test_get_mut() {\n    let mut v = [0, 1, 2];\n    assert_eq!(v.get_mut(3), None);\n    v.get_mut(1).map(|e| *e = 7);\n    assert_eq!(v[1], 7);\n    let mut x = 2;\n    assert_eq!(v.get_mut(2), Some(&mut x));\n}\n\n#[test]\nfn test_mut_chunks() {\n    let mut v = [0, 1, 2, 3, 4, 5, 6];\n    assert_eq!(v.chunks_mut(3).len(), 3);\n    for (i, chunk) in v.chunks_mut(3).enumerate() {\n        for x in chunk {\n            *x = i as u8;\n        }\n    }\n    let result = [0, 0, 0, 1, 1, 1, 2];\n    assert_eq!(v, result);\n}\n\n#[test]\nfn test_mut_chunks_rev() {\n    let mut v = [0, 1, 2, 3, 4, 5, 6];\n    for (i, chunk) in v.chunks_mut(3).rev().enumerate() {\n        for x in chunk {\n            *x = i as u8;\n        }\n    }\n    let result = [2, 2, 2, 1, 1, 1, 0];\n    assert_eq!(v, result);\n}\n\n#[test]\n#[should_panic]\nfn test_mut_chunks_0() {\n    let mut v = [1, 2, 3, 4];\n    let _it = v.chunks_mut(0);\n}\n\n#[test]\nfn test_mut_chunks_exact() {\n    let mut v = [0, 1, 2, 3, 4, 5, 6];\n    assert_eq!(v.chunks_exact_mut(3).len(), 2);\n    for (i, chunk) in v.chunks_exact_mut(3).enumerate() {\n        for x in chunk {\n            *x = i as u8;\n        }\n    }\n    let result = [0, 0, 0, 1, 1, 1, 6];\n    assert_eq!(v, result);\n}\n\n#[test]\nfn test_mut_chunks_exact_rev() {\n    let mut v = [0, 1, 2, 3, 4, 5, 6];\n    for (i, chunk) in v.chunks_exact_mut(3).rev().enumerate() {\n        for x in chunk {\n            *x = i as u8;\n        }\n    }\n    let result = [1, 1, 1, 0, 0, 0, 6];\n    assert_eq!(v, result);\n}\n\n#[test]\n#[should_panic]\nfn test_mut_chunks_exact_0() {\n    let mut v = [1, 2, 3, 4];\n    let _it = v.chunks_exact_mut(0);\n}\n\n#[test]\nfn test_mut_rchunks() {\n    let mut v = [0, 1, 2, 3, 4, 5, 6];\n    assert_eq!(v.rchunks_mut(3).len(), 3);\n    for (i, chunk) in v.rchunks_mut(3).enumerate() {\n        for x in chunk {\n            *x = i as u8;\n        }\n    }\n    let result = [2, 1, 1, 1, 0, 0, 0];\n    assert_eq!(v, result);\n}\n\n#[test]\nfn test_mut_rchunks_rev() {\n    let mut v = [0, 1, 2, 3, 4, 5, 6];\n    for (i, chunk) in v.rchunks_mut(3).rev().enumerate() {\n        for x in chunk {\n            *x = i as u8;\n        }\n    }\n    let result = [0, 1, 1, 1, 2, 2, 2];\n    assert_eq!(v, result);\n}\n\n#[test]\n#[should_panic]\nfn test_mut_rchunks_0() {\n    let mut v = [1, 2, 3, 4];\n    let _it = v.rchunks_mut(0);\n}\n\n#[test]\nfn test_mut_rchunks_exact() {\n    let mut v = [0, 1, 2, 3, 4, 5, 6];\n    assert_eq!(v.rchunks_exact_mut(3).len(), 2);\n    for (i, chunk) in v.rchunks_exact_mut(3).enumerate() {\n        for x in chunk {\n            *x = i as u8;\n        }\n    }\n    let result = [0, 1, 1, 1, 0, 0, 0];\n    assert_eq!(v, result);\n}\n\n#[test]\nfn test_mut_rchunks_exact_rev() {\n    let mut v = [0, 1, 2, 3, 4, 5, 6];\n    for (i, chunk) in v.rchunks_exact_mut(3).rev().enumerate() {\n        for x in chunk {\n            *x = i as u8;\n        }\n    }\n    let result = [0, 0, 0, 0, 1, 1, 1];\n    assert_eq!(v, result);\n}\n\n#[test]\n#[should_panic]\nfn test_mut_rchunks_exact_0() {\n    let mut v = [1, 2, 3, 4];\n    let _it = v.rchunks_exact_mut(0);\n}\n\n#[test]\nfn test_mut_last() {\n    let mut x = [1, 2, 3, 4, 5];\n    let h = x.last_mut();\n    assert_eq!(*h.unwrap(), 5);\n\n    let y: &mut [i32] = &mut [];\n    assert!(y.last_mut().is_none());\n}\n\n#[test]\nfn test_to_vec() {\n    let xs: Box<_> = box [1, 2, 3];\n    let ys = xs.to_vec();\n    assert_eq!(ys, [1, 2, 3]);\n}\n\n#[test]\nfn test_in_place_iterator_specialization() {\n    let src: Box<[usize]> = box [1, 2, 3];\n    let src_ptr = src.as_ptr();\n    let sink: Box<_> = src.into_vec().into_iter().map(std::convert::identity).collect();\n    let sink_ptr = sink.as_ptr();\n    assert_eq!(src_ptr, sink_ptr);\n}\n\n#[test]\nfn test_box_slice_clone() {\n    let data = vec![vec![0, 1], vec![0], vec![1]];\n    let data2 = data.clone().into_boxed_slice().clone().to_vec();\n\n    assert_eq!(data, data2);\n}\n\n#[test]\n#[allow(unused_must_use)] // here, we care about the side effects of `.clone()`\n#[cfg_attr(target_os = \"emscripten\", ignore)]\nfn test_box_slice_clone_panics() {\n    use std::sync::atomic::{AtomicUsize, Ordering};\n    use std::sync::Arc;\n\n    struct Canary {\n        count: Arc<AtomicUsize>,\n        panics: bool,\n    }\n\n    impl Drop for Canary {\n        fn drop(&mut self) {\n            self.count.fetch_add(1, Ordering::SeqCst);\n        }\n    }\n\n    impl Clone for Canary {\n        fn clone(&self) -> Self {\n            if self.panics {\n                panic!()\n            }\n\n            Canary { count: self.count.clone(), panics: self.panics }\n        }\n    }\n\n    let drop_count = Arc::new(AtomicUsize::new(0));\n    let canary = Canary { count: drop_count.clone(), panics: false };\n    let panic = Canary { count: drop_count.clone(), panics: true };\n\n    std::panic::catch_unwind(move || {\n        // When xs is dropped, +5.\n        let xs =\n            vec![canary.clone(), canary.clone(), canary.clone(), panic, canary].into_boxed_slice();\n\n        // When panic is cloned, +3.\n        xs.clone();\n    })\n    .unwrap_err();\n\n    // Total = 8\n    assert_eq!(drop_count.load(Ordering::SeqCst), 8);\n}\n\n#[test]\nfn test_copy_from_slice() {\n    let src = [0, 1, 2, 3, 4, 5];\n    let mut dst = [0; 6];\n    dst.copy_from_slice(&src);\n    assert_eq!(src, dst)\n}\n\n#[test]\n#[should_panic(expected = \"source slice length (4) does not match destination slice length (5)\")]\nfn test_copy_from_slice_dst_longer() {\n    let src = [0, 1, 2, 3];\n    let mut dst = [0; 5];\n    dst.copy_from_slice(&src);\n}\n\n#[test]\n#[should_panic(expected = \"source slice length (4) does not match destination slice length (3)\")]\nfn test_copy_from_slice_dst_shorter() {\n    let src = [0, 1, 2, 3];\n    let mut dst = [0; 3];\n    dst.copy_from_slice(&src);\n}\n\nconst MAX_LEN: usize = 80;\n\nstatic DROP_COUNTS: [AtomicUsize; MAX_LEN] = [\n    // FIXME(RFC 1109): AtomicUsize is not Copy.\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n    AtomicUsize::new(0),\n];\n\nstatic VERSIONS: AtomicUsize = AtomicUsize::new(0);\n\n#[derive(Clone, Eq)]\nstruct DropCounter {\n    x: u32,\n    id: usize,\n    version: Cell<usize>,\n}\n\nimpl PartialEq for DropCounter {\n    fn eq(&self, other: &Self) -> bool {\n        self.partial_cmp(other) == Some(Ordering::Equal)\n    }\n}\n\nimpl PartialOrd for DropCounter {\n    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {\n        self.version.set(self.version.get() + 1);\n        other.version.set(other.version.get() + 1);\n        VERSIONS.fetch_add(2, Relaxed);\n        self.x.partial_cmp(&other.x)\n    }\n}\n\nimpl Ord for DropCounter {\n    fn cmp(&self, other: &Self) -> Ordering {\n        self.partial_cmp(other).unwrap()\n    }\n}\n\nimpl Drop for DropCounter {\n    fn drop(&mut self) {\n        DROP_COUNTS[self.id].fetch_add(1, Relaxed);\n        VERSIONS.fetch_sub(self.version.get(), Relaxed);\n    }\n}\n\nmacro_rules! test {\n    ($input:ident, $func:ident) => {\n        let len = $input.len();\n\n        // Work out the total number of comparisons required to sort\n        // this array...\n        let mut count = 0usize;\n        $input.to_owned().$func(|a, b| {\n            count += 1;\n            a.cmp(b)\n        });\n\n        // ... and then panic on each and every single one.\n        for panic_countdown in 0..count {\n            // Refresh the counters.\n            VERSIONS.store(0, Relaxed);\n            for i in 0..len {\n                DROP_COUNTS[i].store(0, Relaxed);\n            }\n\n            let v = $input.to_owned();\n            let _ = std::panic::catch_unwind(move || {\n                let mut v = v;\n                let mut panic_countdown = panic_countdown;\n                v.$func(|a, b| {\n                    if panic_countdown == 0 {\n                        SILENCE_PANIC.with(|s| s.set(true));\n                        panic!();\n                    }\n                    panic_countdown -= 1;\n                    a.cmp(b)\n                })\n            });\n\n            // Check that the number of things dropped is exactly\n            // what we expect (i.e., the contents of `v`).\n            for (i, c) in DROP_COUNTS.iter().enumerate().take(len) {\n                let count = c.load(Relaxed);\n                assert!(count == 1, \"found drop count == {} for i == {}, len == {}\", count, i, len);\n            }\n\n            // Check that the most recent versions of values were dropped.\n            assert_eq!(VERSIONS.load(Relaxed), 0);\n        }\n    };\n}\n\nthread_local!(static SILENCE_PANIC: Cell<bool> = Cell::new(false));\n\n#[test]\n#[cfg_attr(target_os = \"emscripten\", ignore)] // no threads\nfn panic_safe() {\n    let prev = panic::take_hook();\n    panic::set_hook(Box::new(move |info| {\n        if !SILENCE_PANIC.with(|s| s.get()) {\n            prev(info);\n        }\n    }));\n\n    let mut rng = thread_rng();\n\n    // Miri is too slow (but still need to `chain` to make the types match)\n    let lens = if cfg!(miri) { (1..10).chain(0..0) } else { (1..20).chain(70..MAX_LEN) };\n    let moduli: &[u32] = if cfg!(miri) { &[5] } else { &[5, 20, 50] };\n\n    for len in lens {\n        for &modulus in moduli {\n            for &has_runs in &[false, true] {\n                let mut input = (0..len)\n                    .map(|id| DropCounter {\n                        x: rng.next_u32() % modulus,\n                        id: id,\n                        version: Cell::new(0),\n                    })\n                    .collect::<Vec<_>>();\n\n                if has_runs {\n                    for c in &mut input {\n                        c.x = c.id as u32;\n                    }\n\n                    for _ in 0..5 {\n                        let a = rng.gen::<usize>() % len;\n                        let b = rng.gen::<usize>() % len;\n                        if a < b {\n                            input[a..b].reverse();\n                        } else {\n                            input.swap(a, b);\n                        }\n                    }\n                }\n\n                test!(input, sort_by);\n                test!(input, sort_unstable_by);\n            }\n        }\n    }\n\n    // Set default panic hook again.\n    drop(panic::take_hook());\n}\n\n#[test]\nfn repeat_generic_slice() {\n    assert_eq!([1, 2].repeat(2), vec![1, 2, 1, 2]);\n    assert_eq!([1, 2, 3, 4].repeat(0), vec![]);\n    assert_eq!([1, 2, 3, 4].repeat(1), vec![1, 2, 3, 4]);\n    assert_eq!([1, 2, 3, 4].repeat(3), vec![1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]);\n}\n\n#[test]\n#[allow(unreachable_patterns)]\nfn subslice_patterns() {\n    // This test comprehensively checks the passing static and dynamic semantics\n    // of subslice patterns `..`, `x @ ..`, `ref x @ ..`, and `ref mut @ ..`\n    // in slice patterns `[$($pat), $(,)?]` .\n\n    #[derive(PartialEq, Debug, Clone)]\n    struct N(u8);\n\n    macro_rules! n {\n        ($($e:expr),* $(,)?) => {\n            [$(N($e)),*]\n        }\n    }\n\n    macro_rules! c {\n        ($inp:expr, $typ:ty, $out:expr $(,)?) => {\n            assert_eq!($out, identity::<$typ>($inp))\n        };\n    }\n\n    macro_rules! m {\n        ($e:expr, $p:pat => $b:expr) => {\n            match $e {\n                $p => $b,\n                _ => panic!(),\n            }\n        };\n    }\n\n    // == Slices ==\n\n    // Matching slices using `ref` patterns:\n    let mut v = vec![N(0), N(1), N(2), N(3), N(4)];\n    let mut vc = (0..=4).collect::<Vec<u8>>();\n\n    let [..] = v[..]; // Always matches.\n    m!(v[..], [N(0), ref sub @ .., N(4)] => c!(sub, &[N], n![1, 2, 3]));\n    m!(v[..], [N(0), ref sub @ ..] => c!(sub, &[N], n![1, 2, 3, 4]));\n    m!(v[..], [ref sub @ .., N(4)] => c!(sub, &[N], n![0, 1, 2, 3]));\n    m!(v[..], [ref sub @ .., _, _, _, _, _] => c!(sub, &[N], &n![] as &[N]));\n    m!(v[..], [_, _, _, _, _, ref sub @ ..] => c!(sub, &[N], &n![] as &[N]));\n    m!(vc[..], [x, .., y] => c!((x, y), (u8, u8), (0, 4)));\n\n    // Matching slices using `ref mut` patterns:\n    let [..] = v[..]; // Always matches.\n    m!(v[..], [N(0), ref mut sub @ .., N(4)] => c!(sub, &mut [N], n![1, 2, 3]));\n    m!(v[..], [N(0), ref mut sub @ ..] => c!(sub, &mut [N], n![1, 2, 3, 4]));\n    m!(v[..], [ref mut sub @ .., N(4)] => c!(sub, &mut [N], n![0, 1, 2, 3]));\n    m!(v[..], [ref mut sub @ .., _, _, _, _, _] => c!(sub, &mut [N], &mut n![] as &mut [N]));\n    m!(v[..], [_, _, _, _, _, ref mut sub @ ..] => c!(sub, &mut [N], &mut n![] as &mut [N]));\n    m!(vc[..], [x, .., y] => c!((x, y), (u8, u8), (0, 4)));\n\n    // Matching slices using default binding modes (&):\n    let [..] = &v[..]; // Always matches.\n    m!(&v[..], [N(0), sub @ .., N(4)] => c!(sub, &[N], n![1, 2, 3]));\n    m!(&v[..], [N(0), sub @ ..] => c!(sub, &[N], n![1, 2, 3, 4]));\n    m!(&v[..], [sub @ .., N(4)] => c!(sub, &[N], n![0, 1, 2, 3]));\n    m!(&v[..], [sub @ .., _, _, _, _, _] => c!(sub, &[N], &n![] as &[N]));\n    m!(&v[..], [_, _, _, _, _, sub @ ..] => c!(sub, &[N], &n![] as &[N]));\n    m!(&vc[..], [x, .., y] => c!((x, y), (&u8, &u8), (&0, &4)));\n\n    // Matching slices using default binding modes (&mut):\n    let [..] = &mut v[..]; // Always matches.\n    m!(&mut v[..], [N(0), sub @ .., N(4)] => c!(sub, &mut [N], n![1, 2, 3]));\n    m!(&mut v[..], [N(0), sub @ ..] => c!(sub, &mut [N], n![1, 2, 3, 4]));\n    m!(&mut v[..], [sub @ .., N(4)] => c!(sub, &mut [N], n![0, 1, 2, 3]));\n    m!(&mut v[..], [sub @ .., _, _, _, _, _] => c!(sub, &mut [N], &mut n![] as &mut [N]));\n    m!(&mut v[..], [_, _, _, _, _, sub @ ..] => c!(sub, &mut [N], &mut n![] as &mut [N]));\n    m!(&mut vc[..], [x, .., y] => c!((x, y), (&mut u8, &mut u8), (&mut 0, &mut 4)));\n\n    // == Arrays ==\n    let mut v = n![0, 1, 2, 3, 4];\n    let vc = [0, 1, 2, 3, 4];\n\n    // Matching arrays by value:\n    m!(v.clone(), [N(0), sub @ .., N(4)] => c!(sub, [N; 3], n![1, 2, 3]));\n    m!(v.clone(), [N(0), sub @ ..] => c!(sub, [N; 4], n![1, 2, 3, 4]));\n    m!(v.clone(), [sub @ .., N(4)] => c!(sub, [N; 4], n![0, 1, 2, 3]));\n    m!(v.clone(), [sub @ .., _, _, _, _, _] => c!(sub, [N; 0], n![] as [N; 0]));\n    m!(v.clone(), [_, _, _, _, _, sub @ ..] => c!(sub, [N; 0], n![] as [N; 0]));\n    m!(v.clone(), [x, .., y] => c!((x, y), (N, N), (N(0), N(4))));\n    m!(v.clone(), [..] => ());\n\n    // Matching arrays by ref patterns:\n    m!(v, [N(0), ref sub @ .., N(4)] => c!(sub, &[N; 3], &n![1, 2, 3]));\n    m!(v, [N(0), ref sub @ ..] => c!(sub, &[N; 4], &n![1, 2, 3, 4]));\n    m!(v, [ref sub @ .., N(4)] => c!(sub, &[N; 4], &n![0, 1, 2, 3]));\n    m!(v, [ref sub @ .., _, _, _, _, _] => c!(sub, &[N; 0], &n![] as &[N; 0]));\n    m!(v, [_, _, _, _, _, ref sub @ ..] => c!(sub, &[N; 0], &n![] as &[N; 0]));\n    m!(vc, [x, .., y] => c!((x, y), (u8, u8), (0, 4)));\n\n    // Matching arrays by ref mut patterns:\n    m!(v, [N(0), ref mut sub @ .., N(4)] => c!(sub, &mut [N; 3], &mut n![1, 2, 3]));\n    m!(v, [N(0), ref mut sub @ ..] => c!(sub, &mut [N; 4], &mut n![1, 2, 3, 4]));\n    m!(v, [ref mut sub @ .., N(4)] => c!(sub, &mut [N; 4], &mut n![0, 1, 2, 3]));\n    m!(v, [ref mut sub @ .., _, _, _, _, _] => c!(sub, &mut [N; 0], &mut n![] as &mut [N; 0]));\n    m!(v, [_, _, _, _, _, ref mut sub @ ..] => c!(sub, &mut [N; 0], &mut n![] as &mut [N; 0]));\n\n    // Matching arrays by default binding modes (&):\n    m!(&v, [N(0), sub @ .., N(4)] => c!(sub, &[N; 3], &n![1, 2, 3]));\n    m!(&v, [N(0), sub @ ..] => c!(sub, &[N; 4], &n![1, 2, 3, 4]));\n    m!(&v, [sub @ .., N(4)] => c!(sub, &[N; 4], &n![0, 1, 2, 3]));\n    m!(&v, [sub @ .., _, _, _, _, _] => c!(sub, &[N; 0], &n![] as &[N; 0]));\n    m!(&v, [_, _, _, _, _, sub @ ..] => c!(sub, &[N; 0], &n![] as &[N; 0]));\n    m!(&v, [..] => ());\n    m!(&v, [x, .., y] => c!((x, y), (&N, &N), (&N(0), &N(4))));\n\n    // Matching arrays by default binding modes (&mut):\n    m!(&mut v, [N(0), sub @ .., N(4)] => c!(sub, &mut [N; 3], &mut n![1, 2, 3]));\n    m!(&mut v, [N(0), sub @ ..] => c!(sub, &mut [N; 4], &mut n![1, 2, 3, 4]));\n    m!(&mut v, [sub @ .., N(4)] => c!(sub, &mut [N; 4], &mut n![0, 1, 2, 3]));\n    m!(&mut v, [sub @ .., _, _, _, _, _] => c!(sub, &mut [N; 0], &mut n![] as &[N; 0]));\n    m!(&mut v, [_, _, _, _, _, sub @ ..] => c!(sub, &mut [N; 0], &mut n![] as &[N; 0]));\n    m!(&mut v, [..] => ());\n    m!(&mut v, [x, .., y] => c!((x, y), (&mut N, &mut N), (&mut N(0), &mut N(4))));\n}\n\n#[test]\nfn test_group_by() {\n    let slice = &[1, 1, 1, 3, 3, 2, 2, 2, 1, 0];\n\n    let mut iter = slice.group_by(|a, b| a == b);\n    assert_eq!(iter.next(), Some(&[1, 1, 1][..]));\n    assert_eq!(iter.next(), Some(&[3, 3][..]));\n    assert_eq!(iter.next(), Some(&[2, 2, 2][..]));\n    assert_eq!(iter.next(), Some(&[1][..]));\n    assert_eq!(iter.next(), Some(&[0][..]));\n    assert_eq!(iter.next(), None);\n\n    let mut iter = slice.group_by(|a, b| a == b);\n    assert_eq!(iter.next_back(), Some(&[0][..]));\n    assert_eq!(iter.next_back(), Some(&[1][..]));\n    assert_eq!(iter.next_back(), Some(&[2, 2, 2][..]));\n    assert_eq!(iter.next_back(), Some(&[3, 3][..]));\n    assert_eq!(iter.next_back(), Some(&[1, 1, 1][..]));\n    assert_eq!(iter.next_back(), None);\n\n    let mut iter = slice.group_by(|a, b| a == b);\n    assert_eq!(iter.next(), Some(&[1, 1, 1][..]));\n    assert_eq!(iter.next_back(), Some(&[0][..]));\n    assert_eq!(iter.next(), Some(&[3, 3][..]));\n    assert_eq!(iter.next_back(), Some(&[1][..]));\n    assert_eq!(iter.next(), Some(&[2, 2, 2][..]));\n    assert_eq!(iter.next_back(), None);\n}\n\n#[test]\nfn test_group_by_mut() {\n    let slice = &mut [1, 1, 1, 3, 3, 2, 2, 2, 1, 0];\n\n    let mut iter = slice.group_by_mut(|a, b| a == b);\n    assert_eq!(iter.next(), Some(&mut [1, 1, 1][..]));\n    assert_eq!(iter.next(), Some(&mut [3, 3][..]));\n    assert_eq!(iter.next(), Some(&mut [2, 2, 2][..]));\n    assert_eq!(iter.next(), Some(&mut [1][..]));\n    assert_eq!(iter.next(), Some(&mut [0][..]));\n    assert_eq!(iter.next(), None);\n\n    let mut iter = slice.group_by_mut(|a, b| a == b);\n    assert_eq!(iter.next_back(), Some(&mut [0][..]));\n    assert_eq!(iter.next_back(), Some(&mut [1][..]));\n    assert_eq!(iter.next_back(), Some(&mut [2, 2, 2][..]));\n    assert_eq!(iter.next_back(), Some(&mut [3, 3][..]));\n    assert_eq!(iter.next_back(), Some(&mut [1, 1, 1][..]));\n    assert_eq!(iter.next_back(), None);\n\n    let mut iter = slice.group_by_mut(|a, b| a == b);\n    assert_eq!(iter.next(), Some(&mut [1, 1, 1][..]));\n    assert_eq!(iter.next_back(), Some(&mut [0][..]));\n    assert_eq!(iter.next(), Some(&mut [3, 3][..]));\n    assert_eq!(iter.next_back(), Some(&mut [1][..]));\n    assert_eq!(iter.next(), Some(&mut [2, 2, 2][..]));\n    assert_eq!(iter.next_back(), None);\n}\nuse std::collections::TryReserveError::*;\nuse std::collections::{vec_deque::Drain, VecDeque};\nuse std::fmt::Debug;\nuse std::mem::size_of;\nuse std::ops::Bound::*;\nuse std::panic::{catch_unwind, AssertUnwindSafe};\n\nuse crate::hash;\n\nuse Taggy::*;\nuse Taggypar::*;\n\n#[test]\nfn test_simple() {\n    let mut d = VecDeque::new();\n    assert_eq!(d.len(), 0);\n    d.push_front(17);\n    d.push_front(42);\n    d.push_back(137);\n    assert_eq!(d.len(), 3);\n    d.push_back(137);\n    assert_eq!(d.len(), 4);\n    assert_eq!(*d.front().unwrap(), 42);\n    assert_eq!(*d.back().unwrap(), 137);\n    let mut i = d.pop_front();\n    assert_eq!(i, Some(42));\n    i = d.pop_back();\n    assert_eq!(i, Some(137));\n    i = d.pop_back();\n    assert_eq!(i, Some(137));\n    i = d.pop_back();\n    assert_eq!(i, Some(17));\n    assert_eq!(d.len(), 0);\n    d.push_back(3);\n    assert_eq!(d.len(), 1);\n    d.push_front(2);\n    assert_eq!(d.len(), 2);\n    d.push_back(4);\n    assert_eq!(d.len(), 3);\n    d.push_front(1);\n    assert_eq!(d.len(), 4);\n    assert_eq!(d[0], 1);\n    assert_eq!(d[1], 2);\n    assert_eq!(d[2], 3);\n    assert_eq!(d[3], 4);\n}\n\nfn test_parameterized<T: Clone + PartialEq + Debug>(a: T, b: T, c: T, d: T) {\n    let mut deq = VecDeque::new();\n    assert_eq!(deq.len(), 0);\n    deq.push_front(a.clone());\n    deq.push_front(b.clone());\n    deq.push_back(c.clone());\n    assert_eq!(deq.len(), 3);\n    deq.push_back(d.clone());\n    assert_eq!(deq.len(), 4);\n    assert_eq!((*deq.front().unwrap()).clone(), b.clone());\n    assert_eq!((*deq.back().unwrap()).clone(), d.clone());\n    assert_eq!(deq.pop_front().unwrap(), b.clone());\n    assert_eq!(deq.pop_back().unwrap(), d.clone());\n    assert_eq!(deq.pop_back().unwrap(), c.clone());\n    assert_eq!(deq.pop_back().unwrap(), a.clone());\n    assert_eq!(deq.len(), 0);\n    deq.push_back(c.clone());\n    assert_eq!(deq.len(), 1);\n    deq.push_front(b.clone());\n    assert_eq!(deq.len(), 2);\n    deq.push_back(d.clone());\n    assert_eq!(deq.len(), 3);\n    deq.push_front(a.clone());\n    assert_eq!(deq.len(), 4);\n    assert_eq!(deq[0].clone(), a.clone());\n    assert_eq!(deq[1].clone(), b.clone());\n    assert_eq!(deq[2].clone(), c.clone());\n    assert_eq!(deq[3].clone(), d.clone());\n}\n\n#[test]\nfn test_push_front_grow() {\n    let mut deq = VecDeque::new();\n    for i in 0..66 {\n        deq.push_front(i);\n    }\n    assert_eq!(deq.len(), 66);\n\n    for i in 0..66 {\n        assert_eq!(deq[i], 65 - i);\n    }\n\n    let mut deq = VecDeque::new();\n    for i in 0..66 {\n        deq.push_back(i);\n    }\n\n    for i in 0..66 {\n        assert_eq!(deq[i], i);\n    }\n}\n\n#[test]\nfn test_index() {\n    let mut deq = VecDeque::new();\n    for i in 1..4 {\n        deq.push_front(i);\n    }\n    assert_eq!(deq[1], 2);\n}\n\n#[test]\n#[should_panic]\nfn test_index_out_of_bounds() {\n    let mut deq = VecDeque::new();\n    for i in 1..4 {\n        deq.push_front(i);\n    }\n    deq[3];\n}\n\n#[test]\n#[should_panic]\nfn test_range_start_overflow() {\n    let deq = VecDeque::from(vec![1, 2, 3]);\n    deq.range((Included(0), Included(usize::MAX)));\n}\n\n#[test]\n#[should_panic]\nfn test_range_end_overflow() {\n    let deq = VecDeque::from(vec![1, 2, 3]);\n    deq.range((Excluded(usize::MAX), Included(0)));\n}\n\n#[derive(Clone, PartialEq, Debug)]\nenum Taggy {\n    One(i32),\n    Two(i32, i32),\n    Three(i32, i32, i32),\n}\n\n#[derive(Clone, PartialEq, Debug)]\nenum Taggypar<T> {\n    Onepar(T),\n    Twopar(T, T),\n    Threepar(T, T, T),\n}\n\n#[derive(Clone, PartialEq, Debug)]\nstruct RecCy {\n    x: i32,\n    y: i32,\n    t: Taggy,\n}\n\n#[test]\nfn test_param_int() {\n    test_parameterized::<i32>(5, 72, 64, 175);\n}\n\n#[test]\nfn test_param_taggy() {\n    test_parameterized::<Taggy>(One(1), Two(1, 2), Three(1, 2, 3), Two(17, 42));\n}\n\n#[test]\nfn test_param_taggypar() {\n    test_parameterized::<Taggypar<i32>>(\n        Onepar::<i32>(1),\n        Twopar::<i32>(1, 2),\n        Threepar::<i32>(1, 2, 3),\n        Twopar::<i32>(17, 42),\n    );\n}\n\n#[test]\nfn test_param_reccy() {\n    let reccy1 = RecCy { x: 1, y: 2, t: One(1) };\n    let reccy2 = RecCy { x: 345, y: 2, t: Two(1, 2) };\n    let reccy3 = RecCy { x: 1, y: 777, t: Three(1, 2, 3) };\n    let reccy4 = RecCy { x: 19, y: 252, t: Two(17, 42) };\n    test_parameterized::<RecCy>(reccy1, reccy2, reccy3, reccy4);\n}\n\n#[test]\nfn test_with_capacity() {\n    let mut d = VecDeque::with_capacity(0);\n    d.push_back(1);\n    assert_eq!(d.len(), 1);\n    let mut d = VecDeque::with_capacity(50);\n    d.push_back(1);\n    assert_eq!(d.len(), 1);\n}\n\n#[test]\nfn test_with_capacity_non_power_two() {\n    let mut d3 = VecDeque::with_capacity(3);\n    d3.push_back(1);\n\n    // X = None, | = lo\n    // [|1, X, X]\n    assert_eq!(d3.pop_front(), Some(1));\n    // [X, |X, X]\n    assert_eq!(d3.front(), None);\n\n    // [X, |3, X]\n    d3.push_back(3);\n    // [X, |3, 6]\n    d3.push_back(6);\n    // [X, X, |6]\n    assert_eq!(d3.pop_front(), Some(3));\n\n    // Pushing the lo past half way point to trigger\n    // the 'B' scenario for growth\n    // [9, X, |6]\n    d3.push_back(9);\n    // [9, 12, |6]\n    d3.push_back(12);\n\n    d3.push_back(15);\n    // There used to be a bug here about how the\n    // VecDeque made growth assumptions about the\n    // underlying Vec which didn't hold and lead\n    // to corruption.\n    // (Vec grows to next power of two)\n    // good- [9, 12, 15, X, X, X, X, |6]\n    // bug-  [15, 12, X, X, X, |6, X, X]\n    assert_eq!(d3.pop_front(), Some(6));\n\n    // Which leads us to the following state which\n    // would be a failure case.\n    // bug-  [15, 12, X, X, X, X, |X, X]\n    assert_eq!(d3.front(), Some(&9));\n}\n\n#[test]\nfn test_reserve_exact() {\n    let mut d = VecDeque::new();\n    d.push_back(0);\n    d.reserve_exact(50);\n    assert!(d.capacity() >= 51);\n}\n\n#[test]\nfn test_reserve() {\n    let mut d = VecDeque::new();\n    d.push_back(0);\n    d.reserve(50);\n    assert!(d.capacity() >= 51);\n}\n\n#[test]\nfn test_swap() {\n    let mut d: VecDeque<_> = (0..5).collect();\n    d.pop_front();\n    d.swap(0, 3);\n    assert_eq!(d.iter().cloned().collect::<Vec<_>>(), [4, 2, 3, 1]);\n}\n\n#[test]\nfn test_iter() {\n    let mut d = VecDeque::new();\n    assert_eq!(d.iter().next(), None);\n    assert_eq!(d.iter().size_hint(), (0, Some(0)));\n\n    for i in 0..5 {\n        d.push_back(i);\n    }\n    {\n        let b: &[_] = &[&0, &1, &2, &3, &4];\n        assert_eq!(d.iter().collect::<Vec<_>>(), b);\n    }\n\n    for i in 6..9 {\n        d.push_front(i);\n    }\n    {\n        let b: &[_] = &[&8, &7, &6, &0, &1, &2, &3, &4];\n        assert_eq!(d.iter().collect::<Vec<_>>(), b);\n    }\n\n    let mut it = d.iter();\n    let mut len = d.len();\n    loop {\n        match it.next() {\n            None => break,\n            _ => {\n                len -= 1;\n                assert_eq!(it.size_hint(), (len, Some(len)))\n            }\n        }\n    }\n}\n\n#[test]\nfn test_rev_iter() {\n    let mut d = VecDeque::new();\n    assert_eq!(d.iter().rev().next(), None);\n\n    for i in 0..5 {\n        d.push_back(i);\n    }\n    {\n        let b: &[_] = &[&4, &3, &2, &1, &0];\n        assert_eq!(d.iter().rev().collect::<Vec<_>>(), b);\n    }\n\n    for i in 6..9 {\n        d.push_front(i);\n    }\n    let b: &[_] = &[&4, &3, &2, &1, &0, &6, &7, &8];\n    assert_eq!(d.iter().rev().collect::<Vec<_>>(), b);\n}\n\n#[test]\nfn test_mut_rev_iter_wrap() {\n    let mut d = VecDeque::with_capacity(3);\n    assert!(d.iter_mut().rev().next().is_none());\n\n    d.push_back(1);\n    d.push_back(2);\n    d.push_back(3);\n    assert_eq!(d.pop_front(), Some(1));\n    d.push_back(4);\n\n    assert_eq!(d.iter_mut().rev().map(|x| *x).collect::<Vec<_>>(), vec![4, 3, 2]);\n}\n\n#[test]\nfn test_mut_iter() {\n    let mut d = VecDeque::new();\n    assert!(d.iter_mut().next().is_none());\n\n    for i in 0..3 {\n        d.push_front(i);\n    }\n\n    for (i, elt) in d.iter_mut().enumerate() {\n        assert_eq!(*elt, 2 - i);\n        *elt = i;\n    }\n\n    {\n        let mut it = d.iter_mut();\n        assert_eq!(*it.next().unwrap(), 0);\n        assert_eq!(*it.next().unwrap(), 1);\n        assert_eq!(*it.next().unwrap(), 2);\n        assert!(it.next().is_none());\n    }\n}\n\n#[test]\nfn test_mut_rev_iter() {\n    let mut d = VecDeque::new();\n    assert!(d.iter_mut().rev().next().is_none());\n\n    for i in 0..3 {\n        d.push_front(i);\n    }\n\n    for (i, elt) in d.iter_mut().rev().enumerate() {\n        assert_eq!(*elt, i);\n        *elt = i;\n    }\n\n    {\n        let mut it = d.iter_mut().rev();\n        assert_eq!(*it.next().unwrap(), 0);\n        assert_eq!(*it.next().unwrap(), 1);\n        assert_eq!(*it.next().unwrap(), 2);\n        assert!(it.next().is_none());\n    }\n}\n\n#[test]\nfn test_into_iter() {\n    // Empty iter\n    {\n        let d: VecDeque<i32> = VecDeque::new();\n        let mut iter = d.into_iter();\n\n        assert_eq!(iter.size_hint(), (0, Some(0)));\n        assert_eq!(iter.next(), None);\n        assert_eq!(iter.size_hint(), (0, Some(0)));\n    }\n\n    // simple iter\n    {\n        let mut d = VecDeque::new();\n        for i in 0..5 {\n            d.push_back(i);\n        }\n\n        let b = vec![0, 1, 2, 3, 4];\n        assert_eq!(d.into_iter().collect::<Vec<_>>(), b);\n    }\n\n    // wrapped iter\n    {\n        let mut d = VecDeque::new();\n        for i in 0..5 {\n            d.push_back(i);\n        }\n        for i in 6..9 {\n            d.push_front(i);\n        }\n\n        let b = vec![8, 7, 6, 0, 1, 2, 3, 4];\n        assert_eq!(d.into_iter().collect::<Vec<_>>(), b);\n    }\n\n    // partially used\n    {\n        let mut d = VecDeque::new();\n        for i in 0..5 {\n            d.push_back(i);\n        }\n        for i in 6..9 {\n            d.push_front(i);\n        }\n\n        let mut it = d.into_iter();\n        assert_eq!(it.size_hint(), (8, Some(8)));\n        assert_eq!(it.next(), Some(8));\n        assert_eq!(it.size_hint(), (7, Some(7)));\n        assert_eq!(it.next_back(), Some(4));\n        assert_eq!(it.size_hint(), (6, Some(6)));\n        assert_eq!(it.next(), Some(7));\n        assert_eq!(it.size_hint(), (5, Some(5)));\n    }\n}\n\n#[test]\nfn test_drain() {\n    // Empty iter\n    {\n        let mut d: VecDeque<i32> = VecDeque::new();\n\n        {\n            let mut iter = d.drain(..);\n\n            assert_eq!(iter.size_hint(), (0, Some(0)));\n            assert_eq!(iter.next(), None);\n            assert_eq!(iter.size_hint(), (0, Some(0)));\n        }\n\n        assert!(d.is_empty());\n    }\n\n    // simple iter\n    {\n        let mut d = VecDeque::new();\n        for i in 0..5 {\n            d.push_back(i);\n        }\n\n        assert_eq!(d.drain(..).collect::<Vec<_>>(), [0, 1, 2, 3, 4]);\n        assert!(d.is_empty());\n    }\n\n    // wrapped iter\n    {\n        let mut d = VecDeque::new();\n        for i in 0..5 {\n            d.push_back(i);\n        }\n        for i in 6..9 {\n            d.push_front(i);\n        }\n\n        assert_eq!(d.drain(..).collect::<Vec<_>>(), [8, 7, 6, 0, 1, 2, 3, 4]);\n        assert!(d.is_empty());\n    }\n\n    // partially used\n    {\n        let mut d: VecDeque<_> = VecDeque::new();\n        for i in 0..5 {\n            d.push_back(i);\n        }\n        for i in 6..9 {\n            d.push_front(i);\n        }\n\n        {\n            let mut it = d.drain(..);\n            assert_eq!(it.size_hint(), (8, Some(8)));\n            assert_eq!(it.next(), Some(8));\n            assert_eq!(it.size_hint(), (7, Some(7)));\n            assert_eq!(it.next_back(), Some(4));\n            assert_eq!(it.size_hint(), (6, Some(6)));\n            assert_eq!(it.next(), Some(7));\n            assert_eq!(it.size_hint(), (5, Some(5)));\n        }\n        assert!(d.is_empty());\n    }\n}\n\n#[test]\nfn test_from_iter() {\n    let v = vec![1, 2, 3, 4, 5, 6, 7];\n    let deq: VecDeque<_> = v.iter().cloned().collect();\n    let u: Vec<_> = deq.iter().cloned().collect();\n    assert_eq!(u, v);\n\n    let seq = (0..).step_by(2).take(256);\n    let deq: VecDeque<_> = seq.collect();\n    for (i, &x) in deq.iter().enumerate() {\n        assert_eq!(2 * i, x);\n    }\n    assert_eq!(deq.len(), 256);\n}\n\n#[test]\nfn test_clone() {\n    let mut d = VecDeque::new();\n    d.push_front(17);\n    d.push_front(42);\n    d.push_back(137);\n    d.push_back(137);\n    assert_eq!(d.len(), 4);\n    let mut e = d.clone();\n    assert_eq!(e.len(), 4);\n    while !d.is_empty() {\n        assert_eq!(d.pop_back(), e.pop_back());\n    }\n    assert_eq!(d.len(), 0);\n    assert_eq!(e.len(), 0);\n}\n\n#[test]\nfn test_eq() {\n    let mut d = VecDeque::new();\n    assert!(d == VecDeque::with_capacity(0));\n    d.push_front(137);\n    d.push_front(17);\n    d.push_front(42);\n    d.push_back(137);\n    let mut e = VecDeque::with_capacity(0);\n    e.push_back(42);\n    e.push_back(17);\n    e.push_back(137);\n    e.push_back(137);\n    assert!(&e == &d);\n    e.pop_back();\n    e.push_back(0);\n    assert!(e != d);\n    e.clear();\n    assert!(e == VecDeque::new());\n}\n\n#[test]\nfn test_partial_eq_array() {\n    let d = VecDeque::<char>::new();\n    assert!(d == []);\n\n    let mut d = VecDeque::new();\n    d.push_front('a');\n    assert!(d == ['a']);\n\n    let mut d = VecDeque::new();\n    d.push_back('a');\n    assert!(d == ['a']);\n\n    let mut d = VecDeque::new();\n    d.push_back('a');\n    d.push_back('b');\n    assert!(d == ['a', 'b']);\n}\n\n#[test]\nfn test_hash() {\n    let mut x = VecDeque::new();\n    let mut y = VecDeque::new();\n\n    x.push_back(1);\n    x.push_back(2);\n    x.push_back(3);\n\n    y.push_back(0);\n    y.push_back(1);\n    y.pop_front();\n    y.push_back(2);\n    y.push_back(3);\n\n    assert!(hash(&x) == hash(&y));\n}\n\n#[test]\nfn test_hash_after_rotation() {\n    // test that two deques hash equal even if elements are laid out differently\n    let len = 28;\n    let mut ring: VecDeque<i32> = (0..len as i32).collect();\n    let orig = ring.clone();\n    for _ in 0..ring.capacity() {\n        // shift values 1 step to the right by pop, sub one, push\n        ring.pop_front();\n        for elt in &mut ring {\n            *elt -= 1;\n        }\n        ring.push_back(len - 1);\n        assert_eq!(hash(&orig), hash(&ring));\n        assert_eq!(orig, ring);\n        assert_eq!(ring, orig);\n    }\n}\n\n#[test]\nfn test_eq_after_rotation() {\n    // test that two deques are equal even if elements are laid out differently\n    let len = 28;\n    let mut ring: VecDeque<i32> = (0..len as i32).collect();\n    let mut shifted = ring.clone();\n    for _ in 0..10 {\n        // shift values 1 step to the right by pop, sub one, push\n        ring.pop_front();\n        for elt in &mut ring {\n            *elt -= 1;\n        }\n        ring.push_back(len - 1);\n    }\n\n    // try every shift\n    for _ in 0..shifted.capacity() {\n        shifted.pop_front();\n        for elt in &mut shifted {\n            *elt -= 1;\n        }\n        shifted.push_back(len - 1);\n        assert_eq!(shifted, ring);\n        assert_eq!(ring, shifted);\n    }\n}\n\n#[test]\nfn test_ord() {\n    let x = VecDeque::new();\n    let mut y = VecDeque::new();\n    y.push_back(1);\n    y.push_back(2);\n    y.push_back(3);\n    assert!(x < y);\n    assert!(y > x);\n    assert!(x <= x);\n    assert!(x >= x);\n}\n\n#[test]\nfn test_show() {\n    let ringbuf: VecDeque<_> = (0..10).collect();\n    assert_eq!(format!(\"{:?}\", ringbuf), \"[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\");\n\n    let ringbuf: VecDeque<_> = vec![\"just\", \"one\", \"test\", \"more\"].iter().cloned().collect();\n    assert_eq!(format!(\"{:?}\", ringbuf), \"[\\\"just\\\", \\\"one\\\", \\\"test\\\", \\\"more\\\"]\");\n}\n\n#[test]\nfn test_drop() {\n    static mut DROPS: i32 = 0;\n    struct Elem;\n    impl Drop for Elem {\n        fn drop(&mut self) {\n            unsafe {\n                DROPS += 1;\n            }\n        }\n    }\n\n    let mut ring = VecDeque::new();\n    ring.push_back(Elem);\n    ring.push_front(Elem);\n    ring.push_back(Elem);\n    ring.push_front(Elem);\n    drop(ring);\n\n    assert_eq!(unsafe { DROPS }, 4);\n}\n\n#[test]\nfn test_drop_with_pop() {\n    static mut DROPS: i32 = 0;\n    struct Elem;\n    impl Drop for Elem {\n        fn drop(&mut self) {\n            unsafe {\n                DROPS += 1;\n            }\n        }\n    }\n\n    let mut ring = VecDeque::new();\n    ring.push_back(Elem);\n    ring.push_front(Elem);\n    ring.push_back(Elem);\n    ring.push_front(Elem);\n\n    drop(ring.pop_back());\n    drop(ring.pop_front());\n    assert_eq!(unsafe { DROPS }, 2);\n\n    drop(ring);\n    assert_eq!(unsafe { DROPS }, 4);\n}\n\n#[test]\nfn test_drop_clear() {\n    static mut DROPS: i32 = 0;\n    struct Elem;\n    impl Drop for Elem {\n        fn drop(&mut self) {\n            unsafe {\n                DROPS += 1;\n            }\n        }\n    }\n\n    let mut ring = VecDeque::new();\n    ring.push_back(Elem);\n    ring.push_front(Elem);\n    ring.push_back(Elem);\n    ring.push_front(Elem);\n    ring.clear();\n    assert_eq!(unsafe { DROPS }, 4);\n\n    drop(ring);\n    assert_eq!(unsafe { DROPS }, 4);\n}\n\n#[test]\nfn test_drop_panic() {\n    static mut DROPS: i32 = 0;\n\n    struct D(bool);\n\n    impl Drop for D {\n        fn drop(&mut self) {\n            unsafe {\n                DROPS += 1;\n            }\n\n            if self.0 {\n                panic!(\"panic in `drop`\");\n            }\n        }\n    }\n\n    let mut q = VecDeque::new();\n    q.push_back(D(false));\n    q.push_back(D(false));\n    q.push_back(D(false));\n    q.push_back(D(false));\n    q.push_back(D(false));\n    q.push_front(D(false));\n    q.push_front(D(false));\n    q.push_front(D(true));\n\n    catch_unwind(move || drop(q)).ok();\n\n    assert_eq!(unsafe { DROPS }, 8);\n}\n\n#[test]\nfn test_reserve_grow() {\n    // test growth path A\n    // [T o o H] -> [T o o H . . . . ]\n    let mut ring = VecDeque::with_capacity(4);\n    for i in 0..3 {\n        ring.push_back(i);\n    }\n    ring.reserve(7);\n    for i in 0..3 {\n        assert_eq!(ring.pop_front(), Some(i));\n    }\n\n    // test growth path B\n    // [H T o o] -> [. T o o H . . . ]\n    let mut ring = VecDeque::with_capacity(4);\n    for i in 0..1 {\n        ring.push_back(i);\n        assert_eq!(ring.pop_front(), Some(i));\n    }\n    for i in 0..3 {\n        ring.push_back(i);\n    }\n    ring.reserve(7);\n    for i in 0..3 {\n        assert_eq!(ring.pop_front(), Some(i));\n    }\n\n    // test growth path C\n    // [o o H T] -> [o o H . . . . T ]\n    let mut ring = VecDeque::with_capacity(4);\n    for i in 0..3 {\n        ring.push_back(i);\n        assert_eq!(ring.pop_front(), Some(i));\n    }\n    for i in 0..3 {\n        ring.push_back(i);\n    }\n    ring.reserve(7);\n    for i in 0..3 {\n        assert_eq!(ring.pop_front(), Some(i));\n    }\n}\n\n#[test]\nfn test_get() {\n    let mut ring = VecDeque::new();\n    ring.push_back(0);\n    assert_eq!(ring.get(0), Some(&0));\n    assert_eq!(ring.get(1), None);\n\n    ring.push_back(1);\n    assert_eq!(ring.get(0), Some(&0));\n    assert_eq!(ring.get(1), Some(&1));\n    assert_eq!(ring.get(2), None);\n\n    ring.push_back(2);\n    assert_eq!(ring.get(0), Some(&0));\n    assert_eq!(ring.get(1), Some(&1));\n    assert_eq!(ring.get(2), Some(&2));\n    assert_eq!(ring.get(3), None);\n\n    assert_eq!(ring.pop_front(), Some(0));\n    assert_eq!(ring.get(0), Some(&1));\n    assert_eq!(ring.get(1), Some(&2));\n    assert_eq!(ring.get(2), None);\n\n    assert_eq!(ring.pop_front(), Some(1));\n    assert_eq!(ring.get(0), Some(&2));\n    assert_eq!(ring.get(1), None);\n\n    assert_eq!(ring.pop_front(), Some(2));\n    assert_eq!(ring.get(0), None);\n    assert_eq!(ring.get(1), None);\n}\n\n#[test]\nfn test_get_mut() {\n    let mut ring = VecDeque::new();\n    for i in 0..3 {\n        ring.push_back(i);\n    }\n\n    match ring.get_mut(1) {\n        Some(x) => *x = -1,\n        None => (),\n    };\n\n    assert_eq!(ring.get_mut(0), Some(&mut 0));\n    assert_eq!(ring.get_mut(1), Some(&mut -1));\n    assert_eq!(ring.get_mut(2), Some(&mut 2));\n    assert_eq!(ring.get_mut(3), None);\n\n    assert_eq!(ring.pop_front(), Some(0));\n    assert_eq!(ring.get_mut(0), Some(&mut -1));\n    assert_eq!(ring.get_mut(1), Some(&mut 2));\n    assert_eq!(ring.get_mut(2), None);\n}\n\n#[test]\nfn test_front() {\n    let mut ring = VecDeque::new();\n    ring.push_back(10);\n    ring.push_back(20);\n    assert_eq!(ring.front(), Some(&10));\n    ring.pop_front();\n    assert_eq!(ring.front(), Some(&20));\n    ring.pop_front();\n    assert_eq!(ring.front(), None);\n}\n\n#[test]\nfn test_as_slices() {\n    let mut ring: VecDeque<i32> = VecDeque::with_capacity(127);\n    let cap = ring.capacity() as i32;\n    let first = cap / 2;\n    let last = cap - first;\n    for i in 0..first {\n        ring.push_back(i);\n\n        let (left, right) = ring.as_slices();\n        let expected: Vec<_> = (0..=i).collect();\n        assert_eq!(left, &expected[..]);\n        assert_eq!(right, []);\n    }\n\n    for j in -last..0 {\n        ring.push_front(j);\n        let (left, right) = ring.as_slices();\n        let expected_left: Vec<_> = (-last..=j).rev().collect();\n        let expected_right: Vec<_> = (0..first).collect();\n        assert_eq!(left, &expected_left[..]);\n        assert_eq!(right, &expected_right[..]);\n    }\n\n    assert_eq!(ring.len() as i32, cap);\n    assert_eq!(ring.capacity() as i32, cap);\n}\n\n#[test]\nfn test_as_mut_slices() {\n    let mut ring: VecDeque<i32> = VecDeque::with_capacity(127);\n    let cap = ring.capacity() as i32;\n    let first = cap / 2;\n    let last = cap - first;\n    for i in 0..first {\n        ring.push_back(i);\n\n        let (left, right) = ring.as_mut_slices();\n        let expected: Vec<_> = (0..=i).collect();\n        assert_eq!(left, &expected[..]);\n        assert_eq!(right, []);\n    }\n\n    for j in -last..0 {\n        ring.push_front(j);\n        let (left, right) = ring.as_mut_slices();\n        let expected_left: Vec<_> = (-last..=j).rev().collect();\n        let expected_right: Vec<_> = (0..first).collect();\n        assert_eq!(left, &expected_left[..]);\n        assert_eq!(right, &expected_right[..]);\n    }\n\n    assert_eq!(ring.len() as i32, cap);\n    assert_eq!(ring.capacity() as i32, cap);\n}\n\n#[test]\nfn test_append() {\n    let mut a: VecDeque<_> = vec![1, 2, 3].into_iter().collect();\n    let mut b: VecDeque<_> = vec![4, 5, 6].into_iter().collect();\n\n    // normal append\n    a.append(&mut b);\n    assert_eq!(a.iter().cloned().collect::<Vec<_>>(), [1, 2, 3, 4, 5, 6]);\n    assert_eq!(b.iter().cloned().collect::<Vec<_>>(), []);\n\n    // append nothing to something\n    a.append(&mut b);\n    assert_eq!(a.iter().cloned().collect::<Vec<_>>(), [1, 2, 3, 4, 5, 6]);\n    assert_eq!(b.iter().cloned().collect::<Vec<_>>(), []);\n\n    // append something to nothing\n    b.append(&mut a);\n    assert_eq!(b.iter().cloned().collect::<Vec<_>>(), [1, 2, 3, 4, 5, 6]);\n    assert_eq!(a.iter().cloned().collect::<Vec<_>>(), []);\n}\n\n#[test]\nfn test_append_permutations() {\n    fn construct_vec_deque(\n        push_back: usize,\n        pop_back: usize,\n        push_front: usize,\n        pop_front: usize,\n    ) -> VecDeque<usize> {\n        let mut out = VecDeque::new();\n        for a in 0..push_back {\n            out.push_back(a);\n        }\n        for b in 0..push_front {\n            out.push_front(push_back + b);\n        }\n        for _ in 0..pop_back {\n            out.pop_back();\n        }\n        for _ in 0..pop_front {\n            out.pop_front();\n        }\n        out\n    }\n\n    // Miri is too slow\n    let max = if cfg!(miri) { 3 } else { 5 };\n\n    // Many different permutations of both the `VecDeque` getting appended to\n    // and the one getting appended are generated to check `append`.\n    // This ensures all 6 code paths of `append` are tested.\n    for src_push_back in 0..max {\n        for src_push_front in 0..max {\n            // doesn't pop more values than are pushed\n            for src_pop_back in 0..(src_push_back + src_push_front) {\n                for src_pop_front in 0..(src_push_back + src_push_front - src_pop_back) {\n                    let src = construct_vec_deque(\n                        src_push_back,\n                        src_pop_back,\n                        src_push_front,\n                        src_pop_front,\n                    );\n\n                    for dst_push_back in 0..max {\n                        for dst_push_front in 0..max {\n                            for dst_pop_back in 0..(dst_push_back + dst_push_front) {\n                                for dst_pop_front in\n                                    0..(dst_push_back + dst_push_front - dst_pop_back)\n                                {\n                                    let mut dst = construct_vec_deque(\n                                        dst_push_back,\n                                        dst_pop_back,\n                                        dst_push_front,\n                                        dst_pop_front,\n                                    );\n                                    let mut src = src.clone();\n\n                                    // Assert that appending `src` to `dst` gives the same order\n                                    // of values as iterating over both in sequence.\n                                    let correct = dst\n                                        .iter()\n                                        .chain(src.iter())\n                                        .cloned()\n                                        .collect::<Vec<usize>>();\n                                    dst.append(&mut src);\n                                    assert_eq!(dst, correct);\n                                    assert!(src.is_empty());\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\nstruct DropCounter<'a> {\n    count: &'a mut u32,\n}\n\nimpl Drop for DropCounter<'_> {\n    fn drop(&mut self) {\n        *self.count += 1;\n    }\n}\n\n#[test]\nfn test_append_double_drop() {\n    let (mut count_a, mut count_b) = (0, 0);\n    {\n        let mut a = VecDeque::new();\n        let mut b = VecDeque::new();\n        a.push_back(DropCounter { count: &mut count_a });\n        b.push_back(DropCounter { count: &mut count_b });\n\n        a.append(&mut b);\n    }\n    assert_eq!(count_a, 1);\n    assert_eq!(count_b, 1);\n}\n\n#[test]\nfn test_retain() {\n    let mut buf = VecDeque::new();\n    buf.extend(1..5);\n    buf.retain(|&x| x % 2 == 0);\n    let v: Vec<_> = buf.into_iter().collect();\n    assert_eq!(&v[..], &[2, 4]);\n}\n\n#[test]\nfn test_extend_ref() {\n    let mut v = VecDeque::new();\n    v.push_back(1);\n    v.extend(&[2, 3, 4]);\n\n    assert_eq!(v.len(), 4);\n    assert_eq!(v[0], 1);\n    assert_eq!(v[1], 2);\n    assert_eq!(v[2], 3);\n    assert_eq!(v[3], 4);\n\n    let mut w = VecDeque::new();\n    w.push_back(5);\n    w.push_back(6);\n    v.extend(&w);\n\n    assert_eq!(v.len(), 6);\n    assert_eq!(v[0], 1);\n    assert_eq!(v[1], 2);\n    assert_eq!(v[2], 3);\n    assert_eq!(v[3], 4);\n    assert_eq!(v[4], 5);\n    assert_eq!(v[5], 6);\n}\n\n#[test]\nfn test_contains() {\n    let mut v = VecDeque::new();\n    v.extend(&[2, 3, 4]);\n\n    assert!(v.contains(&3));\n    assert!(!v.contains(&1));\n\n    v.clear();\n\n    assert!(!v.contains(&3));\n}\n\n#[allow(dead_code)]\nfn assert_covariance() {\n    fn drain<'new>(d: Drain<'static, &'static str>) -> Drain<'new, &'new str> {\n        d\n    }\n}\n\n#[test]\nfn test_is_empty() {\n    let mut v = VecDeque::<i32>::new();\n    assert!(v.is_empty());\n    assert!(v.iter().is_empty());\n    assert!(v.iter_mut().is_empty());\n    v.extend(&[2, 3, 4]);\n    assert!(!v.is_empty());\n    assert!(!v.iter().is_empty());\n    assert!(!v.iter_mut().is_empty());\n    while let Some(_) = v.pop_front() {\n        assert_eq!(v.is_empty(), v.len() == 0);\n        assert_eq!(v.iter().is_empty(), v.iter().len() == 0);\n        assert_eq!(v.iter_mut().is_empty(), v.iter_mut().len() == 0);\n    }\n    assert!(v.is_empty());\n    assert!(v.iter().is_empty());\n    assert!(v.iter_mut().is_empty());\n    assert!(v.into_iter().is_empty());\n}\n\n#[test]\nfn test_reserve_exact_2() {\n    // This is all the same as test_reserve\n\n    let mut v = VecDeque::new();\n\n    v.reserve_exact(2);\n    assert!(v.capacity() >= 2);\n\n    for i in 0..16 {\n        v.push_back(i);\n    }\n\n    assert!(v.capacity() >= 16);\n    v.reserve_exact(16);\n    assert!(v.capacity() >= 32);\n\n    v.push_back(16);\n\n    v.reserve_exact(16);\n    assert!(v.capacity() >= 48)\n}\n\n#[test]\n#[cfg_attr(miri, ignore)] // Miri does not support signalling OOM\n#[cfg_attr(target_os = \"android\", ignore)] // Android used in CI has a broken dlmalloc\nfn test_try_reserve() {\n    // These are the interesting cases:\n    // * exactly isize::MAX should never trigger a CapacityOverflow (can be OOM)\n    // * > isize::MAX should always fail\n    //    * On 16/32-bit should CapacityOverflow\n    //    * On 64-bit should OOM\n    // * overflow may trigger when adding `len` to `cap` (in number of elements)\n    // * overflow may trigger when multiplying `new_cap` by size_of::<T> (to get bytes)\n\n    const MAX_CAP: usize = (isize::MAX as usize + 1) / 2 - 1;\n    const MAX_USIZE: usize = usize::MAX;\n\n    // On 16/32-bit, we check that allocations don't exceed isize::MAX,\n    // on 64-bit, we assume the OS will give an OOM for such a ridiculous size.\n    // Any platform that succeeds for these requests is technically broken with\n    // ptr::offset because LLVM is the worst.\n    let guards_against_isize = size_of::<usize>() < 8;\n\n    {\n        // Note: basic stuff is checked by test_reserve\n        let mut empty_bytes: VecDeque<u8> = VecDeque::new();\n\n        // Check isize::MAX doesn't count as an overflow\n        if let Err(CapacityOverflow) = empty_bytes.try_reserve(MAX_CAP) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        // Play it again, frank! (just to be sure)\n        if let Err(CapacityOverflow) = empty_bytes.try_reserve(MAX_CAP) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n\n        if guards_against_isize {\n            // Check isize::MAX + 1 does count as overflow\n            if let Err(CapacityOverflow) = empty_bytes.try_reserve(MAX_CAP + 1) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an overflow!\")\n            }\n\n            // Check usize::MAX does count as overflow\n            if let Err(CapacityOverflow) = empty_bytes.try_reserve(MAX_USIZE) {\n            } else {\n                panic!(\"usize::MAX should trigger an overflow!\")\n            }\n        } else {\n            // Check isize::MAX is an OOM\n            // VecDeque starts with capacity 7, always adds 1 to the capacity\n            // and also rounds the number to next power of 2 so this is the\n            // furthest we can go without triggering CapacityOverflow\n            if let Err(AllocError { .. }) = empty_bytes.try_reserve(MAX_CAP) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an OOM!\")\n            }\n        }\n    }\n\n    {\n        // Same basic idea, but with non-zero len\n        let mut ten_bytes: VecDeque<u8> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10].into_iter().collect();\n\n        if let Err(CapacityOverflow) = ten_bytes.try_reserve(MAX_CAP - 10) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        if let Err(CapacityOverflow) = ten_bytes.try_reserve(MAX_CAP - 10) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        if guards_against_isize {\n            if let Err(CapacityOverflow) = ten_bytes.try_reserve(MAX_CAP - 9) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an overflow!\");\n            }\n        } else {\n            if let Err(AllocError { .. }) = ten_bytes.try_reserve(MAX_CAP - 9) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an OOM!\")\n            }\n        }\n        // Should always overflow in the add-to-len\n        if let Err(CapacityOverflow) = ten_bytes.try_reserve(MAX_USIZE) {\n        } else {\n            panic!(\"usize::MAX should trigger an overflow!\")\n        }\n    }\n\n    {\n        // Same basic idea, but with interesting type size\n        let mut ten_u32s: VecDeque<u32> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10].into_iter().collect();\n\n        if let Err(CapacityOverflow) = ten_u32s.try_reserve(MAX_CAP / 4 - 10) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        if let Err(CapacityOverflow) = ten_u32s.try_reserve(MAX_CAP / 4 - 10) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        if guards_against_isize {\n            if let Err(CapacityOverflow) = ten_u32s.try_reserve(MAX_CAP / 4 - 9) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an overflow!\");\n            }\n        } else {\n            if let Err(AllocError { .. }) = ten_u32s.try_reserve(MAX_CAP / 4 - 9) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an OOM!\")\n            }\n        }\n        // Should fail in the mul-by-size\n        if let Err(CapacityOverflow) = ten_u32s.try_reserve(MAX_USIZE - 20) {\n        } else {\n            panic!(\"usize::MAX should trigger an overflow!\");\n        }\n    }\n}\n\n#[test]\n#[cfg_attr(miri, ignore)] // Miri does not support signalling OOM\n#[cfg_attr(target_os = \"android\", ignore)] // Android used in CI has a broken dlmalloc\nfn test_try_reserve_exact() {\n    // This is exactly the same as test_try_reserve with the method changed.\n    // See that test for comments.\n\n    const MAX_CAP: usize = (isize::MAX as usize + 1) / 2 - 1;\n    const MAX_USIZE: usize = usize::MAX;\n\n    let guards_against_isize = size_of::<usize>() < 8;\n\n    {\n        let mut empty_bytes: VecDeque<u8> = VecDeque::new();\n\n        if let Err(CapacityOverflow) = empty_bytes.try_reserve_exact(MAX_CAP) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        if let Err(CapacityOverflow) = empty_bytes.try_reserve_exact(MAX_CAP) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n\n        if guards_against_isize {\n            if let Err(CapacityOverflow) = empty_bytes.try_reserve_exact(MAX_CAP + 1) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an overflow!\")\n            }\n\n            if let Err(CapacityOverflow) = empty_bytes.try_reserve_exact(MAX_USIZE) {\n            } else {\n                panic!(\"usize::MAX should trigger an overflow!\")\n            }\n        } else {\n            // Check isize::MAX is an OOM\n            // VecDeque starts with capacity 7, always adds 1 to the capacity\n            // and also rounds the number to next power of 2 so this is the\n            // furthest we can go without triggering CapacityOverflow\n            if let Err(AllocError { .. }) = empty_bytes.try_reserve_exact(MAX_CAP) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an OOM!\")\n            }\n        }\n    }\n\n    {\n        let mut ten_bytes: VecDeque<u8> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10].into_iter().collect();\n\n        if let Err(CapacityOverflow) = ten_bytes.try_reserve_exact(MAX_CAP - 10) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        if let Err(CapacityOverflow) = ten_bytes.try_reserve_exact(MAX_CAP - 10) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        if guards_against_isize {\n            if let Err(CapacityOverflow) = ten_bytes.try_reserve_exact(MAX_CAP - 9) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an overflow!\");\n            }\n        } else {\n            if let Err(AllocError { .. }) = ten_bytes.try_reserve_exact(MAX_CAP - 9) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an OOM!\")\n            }\n        }\n        if let Err(CapacityOverflow) = ten_bytes.try_reserve_exact(MAX_USIZE) {\n        } else {\n            panic!(\"usize::MAX should trigger an overflow!\")\n        }\n    }\n\n    {\n        let mut ten_u32s: VecDeque<u32> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10].into_iter().collect();\n\n        if let Err(CapacityOverflow) = ten_u32s.try_reserve_exact(MAX_CAP / 4 - 10) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        if let Err(CapacityOverflow) = ten_u32s.try_reserve_exact(MAX_CAP / 4 - 10) {\n            panic!(\"isize::MAX shouldn't trigger an overflow!\");\n        }\n        if guards_against_isize {\n            if let Err(CapacityOverflow) = ten_u32s.try_reserve_exact(MAX_CAP / 4 - 9) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an overflow!\");\n            }\n        } else {\n            if let Err(AllocError { .. }) = ten_u32s.try_reserve_exact(MAX_CAP / 4 - 9) {\n            } else {\n                panic!(\"isize::MAX + 1 should trigger an OOM!\")\n            }\n        }\n        if let Err(CapacityOverflow) = ten_u32s.try_reserve_exact(MAX_USIZE - 20) {\n        } else {\n            panic!(\"usize::MAX should trigger an overflow!\")\n        }\n    }\n}\n\n#[test]\nfn test_rotate_nop() {\n    let mut v: VecDeque<_> = (0..10).collect();\n    assert_unchanged(&v);\n\n    v.rotate_left(0);\n    assert_unchanged(&v);\n\n    v.rotate_left(10);\n    assert_unchanged(&v);\n\n    v.rotate_right(0);\n    assert_unchanged(&v);\n\n    v.rotate_right(10);\n    assert_unchanged(&v);\n\n    v.rotate_left(3);\n    v.rotate_right(3);\n    assert_unchanged(&v);\n\n    v.rotate_right(3);\n    v.rotate_left(3);\n    assert_unchanged(&v);\n\n    v.rotate_left(6);\n    v.rotate_right(6);\n    assert_unchanged(&v);\n\n    v.rotate_right(6);\n    v.rotate_left(6);\n    assert_unchanged(&v);\n\n    v.rotate_left(3);\n    v.rotate_left(7);\n    assert_unchanged(&v);\n\n    v.rotate_right(4);\n    v.rotate_right(6);\n    assert_unchanged(&v);\n\n    v.rotate_left(1);\n    v.rotate_left(2);\n    v.rotate_left(3);\n    v.rotate_left(4);\n    assert_unchanged(&v);\n\n    v.rotate_right(1);\n    v.rotate_right(2);\n    v.rotate_right(3);\n    v.rotate_right(4);\n    assert_unchanged(&v);\n\n    fn assert_unchanged(v: &VecDeque<i32>) {\n        assert_eq!(v, &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);\n    }\n}\n\n#[test]\nfn test_rotate_left_parts() {\n    let mut v: VecDeque<_> = (1..=7).collect();\n    v.rotate_left(2);\n    assert_eq!(v.as_slices(), (&[3, 4, 5, 6, 7, 1][..], &[2][..]));\n    v.rotate_left(2);\n    assert_eq!(v.as_slices(), (&[5, 6, 7, 1][..], &[2, 3, 4][..]));\n    v.rotate_left(2);\n    assert_eq!(v.as_slices(), (&[7, 1][..], &[2, 3, 4, 5, 6][..]));\n    v.rotate_left(2);\n    assert_eq!(v.as_slices(), (&[2, 3, 4, 5, 6, 7, 1][..], &[][..]));\n    v.rotate_left(2);\n    assert_eq!(v.as_slices(), (&[4, 5, 6, 7, 1, 2][..], &[3][..]));\n    v.rotate_left(2);\n    assert_eq!(v.as_slices(), (&[6, 7, 1, 2][..], &[3, 4, 5][..]));\n    v.rotate_left(2);\n    assert_eq!(v.as_slices(), (&[1, 2][..], &[3, 4, 5, 6, 7][..]));\n}\n\n#[test]\nfn test_rotate_right_parts() {\n    let mut v: VecDeque<_> = (1..=7).collect();\n    v.rotate_right(2);\n    assert_eq!(v.as_slices(), (&[6, 7][..], &[1, 2, 3, 4, 5][..]));\n    v.rotate_right(2);\n    assert_eq!(v.as_slices(), (&[4, 5, 6, 7][..], &[1, 2, 3][..]));\n    v.rotate_right(2);\n    assert_eq!(v.as_slices(), (&[2, 3, 4, 5, 6, 7][..], &[1][..]));\n    v.rotate_right(2);\n    assert_eq!(v.as_slices(), (&[7, 1, 2, 3, 4, 5, 6][..], &[][..]));\n    v.rotate_right(2);\n    assert_eq!(v.as_slices(), (&[5, 6][..], &[7, 1, 2, 3, 4][..]));\n    v.rotate_right(2);\n    assert_eq!(v.as_slices(), (&[3, 4, 5, 6][..], &[7, 1, 2][..]));\n    v.rotate_right(2);\n    assert_eq!(v.as_slices(), (&[1, 2, 3, 4, 5, 6][..], &[7][..]));\n}\n\n#[test]\nfn test_rotate_left_random() {\n    let shifts = [\n        6, 1, 0, 11, 12, 1, 11, 7, 9, 3, 6, 1, 4, 0, 5, 1, 3, 1, 12, 8, 3, 1, 11, 11, 9, 4, 12, 3,\n        12, 9, 11, 1, 7, 9, 7, 2,\n    ];\n    let n = 12;\n    let mut v: VecDeque<_> = (0..n).collect();\n    let mut total_shift = 0;\n    for shift in shifts.iter().cloned() {\n        v.rotate_left(shift);\n        total_shift += shift;\n        for i in 0..n {\n            assert_eq!(v[i], (i + total_shift) % n);\n        }\n    }\n}\n\n#[test]\nfn test_rotate_right_random() {\n    let shifts = [\n        6, 1, 0, 11, 12, 1, 11, 7, 9, 3, 6, 1, 4, 0, 5, 1, 3, 1, 12, 8, 3, 1, 11, 11, 9, 4, 12, 3,\n        12, 9, 11, 1, 7, 9, 7, 2,\n    ];\n    let n = 12;\n    let mut v: VecDeque<_> = (0..n).collect();\n    let mut total_shift = 0;\n    for shift in shifts.iter().cloned() {\n        v.rotate_right(shift);\n        total_shift += shift;\n        for i in 0..n {\n            assert_eq!(v[(i + total_shift) % n], i);\n        }\n    }\n}\n\n#[test]\nfn test_try_fold_empty() {\n    assert_eq!(Some(0), VecDeque::<u32>::new().iter().try_fold(0, |_, _| None));\n}\n\n#[test]\nfn test_try_fold_none() {\n    let v: VecDeque<u32> = (0..12).collect();\n    assert_eq!(None, v.into_iter().try_fold(0, |a, b| if b < 11 { Some(a + b) } else { None }));\n}\n\n#[test]\nfn test_try_fold_ok() {\n    let v: VecDeque<u32> = (0..12).collect();\n    assert_eq!(Ok::<_, ()>(66), v.into_iter().try_fold(0, |a, b| Ok(a + b)));\n}\n\n#[test]\nfn test_try_fold_unit() {\n    let v: VecDeque<()> = std::iter::repeat(()).take(42).collect();\n    assert_eq!(Some(()), v.into_iter().try_fold((), |(), ()| Some(())));\n}\n\n#[test]\nfn test_try_fold_unit_none() {\n    let v: std::collections::VecDeque<()> = [(); 10].iter().cloned().collect();\n    let mut iter = v.into_iter();\n    assert!(iter.try_fold((), |_, _| None).is_none());\n    assert_eq!(iter.len(), 9);\n}\n\n#[test]\nfn test_try_fold_rotated() {\n    let mut v: VecDeque<_> = (0..12).collect();\n    for n in 0..10 {\n        if n & 1 == 0 {\n            v.rotate_left(n);\n        } else {\n            v.rotate_right(n);\n        }\n        assert_eq!(Ok::<_, ()>(66), v.iter().try_fold(0, |a, b| Ok(a + b)));\n    }\n}\n\n#[test]\nfn test_try_fold_moves_iter() {\n    let v: VecDeque<_> = [10, 20, 30, 40, 100, 60, 70, 80, 90].iter().collect();\n    let mut iter = v.into_iter();\n    assert_eq!(iter.try_fold(0_i8, |acc, &x| acc.checked_add(x)), None);\n    assert_eq!(iter.next(), Some(&60));\n}\n\n#[test]\nfn test_try_fold_exhaust_wrap() {\n    let mut v = VecDeque::with_capacity(7);\n    v.push_back(1);\n    v.push_back(1);\n    v.push_back(1);\n    v.pop_front();\n    v.pop_front();\n    let mut iter = v.iter();\n    let _ = iter.try_fold(0, |_, _| Some(1));\n    assert!(iter.is_empty());\n}\n\n#[test]\nfn test_try_fold_wraparound() {\n    let mut v = VecDeque::with_capacity(8);\n    v.push_back(7);\n    v.push_back(8);\n    v.push_back(9);\n    v.push_front(2);\n    v.push_front(1);\n    let mut iter = v.iter();\n    let _ = iter.find(|&&x| x == 2);\n    assert_eq!(Some(&7), iter.next());\n}\n\n#[test]\nfn test_try_rfold_rotated() {\n    let mut v: VecDeque<_> = (0..12).collect();\n    for n in 0..10 {\n        if n & 1 == 0 {\n            v.rotate_left(n);\n        } else {\n            v.rotate_right(n);\n        }\n        assert_eq!(Ok::<_, ()>(66), v.iter().try_rfold(0, |a, b| Ok(a + b)));\n    }\n}\n\n#[test]\nfn test_try_rfold_moves_iter() {\n    let v: VecDeque<_> = [10, 20, 30, 40, 100, 60, 70, 80, 90].iter().collect();\n    let mut iter = v.into_iter();\n    assert_eq!(iter.try_rfold(0_i8, |acc, &x| acc.checked_add(x)), None);\n    assert_eq!(iter.next_back(), Some(&70));\n}\n\n#[test]\nfn truncate_leak() {\n    static mut DROPS: i32 = 0;\n\n    struct D(bool);\n\n    impl Drop for D {\n        fn drop(&mut self) {\n            unsafe {\n                DROPS += 1;\n            }\n\n            if self.0 {\n                panic!(\"panic in `drop`\");\n            }\n        }\n    }\n\n    let mut q = VecDeque::new();\n    q.push_back(D(false));\n    q.push_back(D(false));\n    q.push_back(D(false));\n    q.push_back(D(false));\n    q.push_back(D(false));\n    q.push_front(D(true));\n    q.push_front(D(false));\n    q.push_front(D(false));\n\n    catch_unwind(AssertUnwindSafe(|| q.truncate(1))).ok();\n\n    assert_eq!(unsafe { DROPS }, 7);\n}\n\n#[test]\nfn test_drain_leak() {\n    static mut DROPS: i32 = 0;\n\n    #[derive(Debug, PartialEq)]\n    struct D(u32, bool);\n\n    impl Drop for D {\n        fn drop(&mut self) {\n            unsafe {\n                DROPS += 1;\n            }\n\n            if self.1 {\n                panic!(\"panic in `drop`\");\n            }\n        }\n    }\n\n    let mut v = VecDeque::new();\n    v.push_back(D(4, false));\n    v.push_back(D(5, false));\n    v.push_back(D(6, false));\n    v.push_front(D(3, false));\n    v.push_front(D(2, true));\n    v.push_front(D(1, false));\n    v.push_front(D(0, false));\n\n    catch_unwind(AssertUnwindSafe(|| {\n        v.drain(1..=4);\n    }))\n    .ok();\n\n    assert_eq!(unsafe { DROPS }, 4);\n    assert_eq!(v.len(), 3);\n    drop(v);\n    assert_eq!(unsafe { DROPS }, 7);\n}\n\n#[test]\nfn test_binary_search() {\n    // Contiguous (front only) search:\n    let deque: VecDeque<_> = vec![1, 2, 3, 5, 6].into();\n    assert!(deque.as_slices().1.is_empty());\n    assert_eq!(deque.binary_search(&3), Ok(2));\n    assert_eq!(deque.binary_search(&4), Err(3));\n\n    // Split search (both front & back non-empty):\n    let mut deque: VecDeque<_> = vec![5, 6].into();\n    deque.push_front(3);\n    deque.push_front(2);\n    deque.push_front(1);\n    deque.push_back(10);\n    assert!(!deque.as_slices().0.is_empty());\n    assert!(!deque.as_slices().1.is_empty());\n    assert_eq!(deque.binary_search(&0), Err(0));\n    assert_eq!(deque.binary_search(&1), Ok(0));\n    assert_eq!(deque.binary_search(&5), Ok(3));\n    assert_eq!(deque.binary_search(&7), Err(5));\n    assert_eq!(deque.binary_search(&20), Err(6));\n}\n\n#[test]\nfn test_binary_search_by() {\n    let deque: VecDeque<_> = vec![(1,), (2,), (3,), (5,), (6,)].into();\n\n    assert_eq!(deque.binary_search_by(|&(v,)| v.cmp(&3)), Ok(2));\n    assert_eq!(deque.binary_search_by(|&(v,)| v.cmp(&4)), Err(3));\n}\n\n#[test]\nfn test_binary_search_by_key() {\n    let deque: VecDeque<_> = vec![(1,), (2,), (3,), (5,), (6,)].into();\n\n    assert_eq!(deque.binary_search_by_key(&3, |&(v,)| v), Ok(2));\n    assert_eq!(deque.binary_search_by_key(&4, |&(v,)| v), Err(3));\n}\n\n#[test]\nfn test_partition_point() {\n    // Contiguous (front only) search:\n    let deque: VecDeque<_> = vec![1, 2, 3, 5, 6].into();\n    assert!(deque.as_slices().1.is_empty());\n    assert_eq!(deque.partition_point(|&v| v <= 3), 3);\n\n    // Split search (both front & back non-empty):\n    let mut deque: VecDeque<_> = vec![5, 6].into();\n    deque.push_front(3);\n    deque.push_front(2);\n    deque.push_front(1);\n    deque.push_back(10);\n    assert!(!deque.as_slices().0.is_empty());\n    assert!(!deque.as_slices().1.is_empty());\n    assert_eq!(deque.partition_point(|&v| v <= 5), 4);\n}\n\n#[test]\nfn test_zero_sized_push() {\n    const N: usize = 8;\n\n    // Zero sized type\n    struct Zst;\n\n    // Test that for all possible sequences of push_front / push_back,\n    // we end up with a deque of the correct size\n\n    for len in 0..N {\n        let mut tester = VecDeque::with_capacity(len);\n        assert_eq!(tester.len(), 0);\n        assert!(tester.capacity() >= len);\n        for case in 0..(1 << len) {\n            assert_eq!(tester.len(), 0);\n            for bit in 0..len {\n                if case & (1 << bit) != 0 {\n                    tester.push_front(Zst);\n                } else {\n                    tester.push_back(Zst);\n                }\n            }\n            assert_eq!(tester.len(), len);\n            assert_eq!(tester.iter().count(), len);\n            tester.clear();\n        }\n    }\n}\n\n#[test]\nfn test_from_zero_sized_vec() {\n    let v = vec![(); 100];\n    let queue = VecDeque::from(v);\n    assert_eq!(queue.len(), 100);\n}\n#![deny(warnings)]\n\nuse std::cell::RefCell;\nuse std::fmt::{self, Write};\n\n#[test]\nfn test_format() {\n    let s = fmt::format(format_args!(\"Hello, {}!\", \"world\"));\n    assert_eq!(s, \"Hello, world!\");\n}\n\nstruct A;\nstruct B;\nstruct C;\nstruct D;\n\nimpl fmt::LowerHex for A {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.write_str(\"aloha\")\n    }\n}\nimpl fmt::UpperHex for B {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.write_str(\"adios\")\n    }\n}\nimpl fmt::Display for C {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.pad_integral(true, \"☃\", \"123\")\n    }\n}\nimpl fmt::Binary for D {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.write_str(\"aa\")?;\n        f.write_char('☃')?;\n        f.write_str(\"bb\")\n    }\n}\n\nmacro_rules! t {\n    ($a:expr, $b:expr) => {\n        assert_eq!($a, $b)\n    };\n}\n\n#[test]\nfn test_format_macro_interface() {\n    // Various edge cases without formats\n    t!(format!(\"\"), \"\");\n    t!(format!(\"hello\"), \"hello\");\n    t!(format!(\"hello {{\"), \"hello {\");\n\n    // default formatters should work\n    t!(format!(\"{}\", 1.0f32), \"1\");\n    t!(format!(\"{}\", 1.0f64), \"1\");\n    t!(format!(\"{}\", \"a\"), \"a\");\n    t!(format!(\"{}\", \"a\".to_string()), \"a\");\n    t!(format!(\"{}\", false), \"false\");\n    t!(format!(\"{}\", 'a'), \"a\");\n\n    // At least exercise all the formats\n    t!(format!(\"{}\", true), \"true\");\n    t!(format!(\"{}\", '☃'), \"☃\");\n    t!(format!(\"{}\", 10), \"10\");\n    t!(format!(\"{}\", 10_usize), \"10\");\n    t!(format!(\"{:?}\", '☃'), \"'☃'\");\n    t!(format!(\"{:?}\", 10), \"10\");\n    t!(format!(\"{:?}\", 10_usize), \"10\");\n    t!(format!(\"{:?}\", \"true\"), \"\\\"true\\\"\");\n    t!(format!(\"{:?}\", \"foo\\nbar\"), \"\\\"foo\\\\nbar\\\"\");\n    t!(format!(\"{:?}\", \"foo\\n\\\"bar\\\"\\r\\n\\'baz\\'\\t\\\\qux\\\\\"), r#\"\"foo\\n\\\"bar\\\"\\r\\n'baz'\\t\\\\qux\\\\\"\"#);\n    t!(format!(\"{:?}\", \"foo\\0bar\\x01baz\\u{7f}q\\u{75}x\"), r#\"\"foo\\u{0}bar\\u{1}baz\\u{7f}qux\"\"#);\n    t!(format!(\"{:o}\", 10_usize), \"12\");\n    t!(format!(\"{:x}\", 10_usize), \"a\");\n    t!(format!(\"{:X}\", 10_usize), \"A\");\n    t!(format!(\"{}\", \"foo\"), \"foo\");\n    t!(format!(\"{}\", \"foo\".to_string()), \"foo\");\n    if cfg!(target_pointer_width = \"32\") {\n        t!(format!(\"{:#p}\", 0x1234 as *const isize), \"0x00001234\");\n        t!(format!(\"{:#p}\", 0x1234 as *mut isize), \"0x00001234\");\n    } else {\n        t!(format!(\"{:#p}\", 0x1234 as *const isize), \"0x0000000000001234\");\n        t!(format!(\"{:#p}\", 0x1234 as *mut isize), \"0x0000000000001234\");\n    }\n    t!(format!(\"{:p}\", 0x1234 as *const isize), \"0x1234\");\n    t!(format!(\"{:p}\", 0x1234 as *mut isize), \"0x1234\");\n    t!(format!(\"{:x}\", A), \"aloha\");\n    t!(format!(\"{:X}\", B), \"adios\");\n    t!(format!(\"foo {} ☃☃☃☃☃☃\", \"bar\"), \"foo bar ☃☃☃☃☃☃\");\n    t!(format!(\"{1} {0}\", 0, 1), \"1 0\");\n    t!(format!(\"{foo} {bar}\", foo = 0, bar = 1), \"0 1\");\n    t!(format!(\"{foo} {1} {bar} {0}\", 0, 1, foo = 2, bar = 3), \"2 1 3 0\");\n    t!(format!(\"{} {0}\", \"a\"), \"a a\");\n    t!(format!(\"{_foo}\", _foo = 6usize), \"6\");\n    t!(format!(\"{foo_bar}\", foo_bar = 1), \"1\");\n    t!(format!(\"{}\", 5 + 5), \"10\");\n    t!(format!(\"{:#4}\", C), \"☃123\");\n    t!(format!(\"{:b}\", D), \"aa☃bb\");\n\n    let a: &dyn fmt::Debug = &1;\n    t!(format!(\"{:?}\", a), \"1\");\n\n    // Formatting strings and their arguments\n    t!(format!(\"{}\", \"a\"), \"a\");\n    t!(format!(\"{:4}\", \"a\"), \"a   \");\n    t!(format!(\"{:4}\", \"☃\"), \"☃   \");\n    t!(format!(\"{:>4}\", \"a\"), \"   a\");\n    t!(format!(\"{:<4}\", \"a\"), \"a   \");\n    t!(format!(\"{:^5}\", \"a\"), \"  a  \");\n    t!(format!(\"{:^5}\", \"aa\"), \" aa  \");\n    t!(format!(\"{:^4}\", \"a\"), \" a  \");\n    t!(format!(\"{:^4}\", \"aa\"), \" aa \");\n    t!(format!(\"{:.4}\", \"a\"), \"a\");\n    t!(format!(\"{:4.4}\", \"a\"), \"a   \");\n    t!(format!(\"{:4.4}\", \"aaaaaaaaaaaaaaaaaa\"), \"aaaa\");\n    t!(format!(\"{:<4.4}\", \"aaaaaaaaaaaaaaaaaa\"), \"aaaa\");\n    t!(format!(\"{:>4.4}\", \"aaaaaaaaaaaaaaaaaa\"), \"aaaa\");\n    t!(format!(\"{:^4.4}\", \"aaaaaaaaaaaaaaaaaa\"), \"aaaa\");\n    t!(format!(\"{:>10.4}\", \"aaaaaaaaaaaaaaaaaa\"), \"      aaaa\");\n    t!(format!(\"{:2.4}\", \"aaaaa\"), \"aaaa\");\n    t!(format!(\"{:2.4}\", \"aaaa\"), \"aaaa\");\n    t!(format!(\"{:2.4}\", \"aaa\"), \"aaa\");\n    t!(format!(\"{:2.4}\", \"aa\"), \"aa\");\n    t!(format!(\"{:2.4}\", \"a\"), \"a \");\n    t!(format!(\"{:0>2}\", \"a\"), \"0a\");\n    t!(format!(\"{:.*}\", 4, \"aaaaaaaaaaaaaaaaaa\"), \"aaaa\");\n    t!(format!(\"{:.1$}\", \"aaaaaaaaaaaaaaaaaa\", 4), \"aaaa\");\n    t!(format!(\"{:.a$}\", \"aaaaaaaaaaaaaaaaaa\", a = 4), \"aaaa\");\n    t!(format!(\"{:._a$}\", \"aaaaaaaaaaaaaaaaaa\", _a = 4), \"aaaa\");\n    t!(format!(\"{:1$}\", \"a\", 4), \"a   \");\n    t!(format!(\"{1:0$}\", 4, \"a\"), \"a   \");\n    t!(format!(\"{:a$}\", \"a\", a = 4), \"a   \");\n    t!(format!(\"{:-#}\", \"a\"), \"a\");\n    t!(format!(\"{:+#}\", \"a\"), \"a\");\n    t!(format!(\"{:/^10.8}\", \"1234567890\"), \"/12345678/\");\n\n    // Some float stuff\n    t!(format!(\"{:}\", 1.0f32), \"1\");\n    t!(format!(\"{:}\", 1.0f64), \"1\");\n    t!(format!(\"{:.3}\", 1.0f64), \"1.000\");\n    t!(format!(\"{:10.3}\", 1.0f64), \"     1.000\");\n    t!(format!(\"{:+10.3}\", 1.0f64), \"    +1.000\");\n    t!(format!(\"{:+10.3}\", -1.0f64), \"    -1.000\");\n\n    t!(format!(\"{:e}\", 1.2345e6f32), \"1.2345e6\");\n    t!(format!(\"{:e}\", 1.2345e6f64), \"1.2345e6\");\n    t!(format!(\"{:E}\", 1.2345e6f64), \"1.2345E6\");\n    t!(format!(\"{:.3e}\", 1.2345e6f64), \"1.234e6\");\n    t!(format!(\"{:10.3e}\", 1.2345e6f64), \"   1.234e6\");\n    t!(format!(\"{:+10.3e}\", 1.2345e6f64), \"  +1.234e6\");\n    t!(format!(\"{:+10.3e}\", -1.2345e6f64), \"  -1.234e6\");\n\n    // Float edge cases\n    t!(format!(\"{}\", -0.0), \"-0\");\n    t!(format!(\"{:?}\", 0.0), \"0.0\");\n\n    // sign aware zero padding\n    t!(format!(\"{:<3}\", 1), \"1  \");\n    t!(format!(\"{:>3}\", 1), \"  1\");\n    t!(format!(\"{:^3}\", 1), \" 1 \");\n    t!(format!(\"{:03}\", 1), \"001\");\n    t!(format!(\"{:<03}\", 1), \"001\");\n    t!(format!(\"{:>03}\", 1), \"001\");\n    t!(format!(\"{:^03}\", 1), \"001\");\n    t!(format!(\"{:+03}\", 1), \"+01\");\n    t!(format!(\"{:<+03}\", 1), \"+01\");\n    t!(format!(\"{:>+03}\", 1), \"+01\");\n    t!(format!(\"{:^+03}\", 1), \"+01\");\n    t!(format!(\"{:#05x}\", 1), \"0x001\");\n    t!(format!(\"{:<#05x}\", 1), \"0x001\");\n    t!(format!(\"{:>#05x}\", 1), \"0x001\");\n    t!(format!(\"{:^#05x}\", 1), \"0x001\");\n    t!(format!(\"{:05}\", 1.2), \"001.2\");\n    t!(format!(\"{:<05}\", 1.2), \"001.2\");\n    t!(format!(\"{:>05}\", 1.2), \"001.2\");\n    t!(format!(\"{:^05}\", 1.2), \"001.2\");\n    t!(format!(\"{:05}\", -1.2), \"-01.2\");\n    t!(format!(\"{:<05}\", -1.2), \"-01.2\");\n    t!(format!(\"{:>05}\", -1.2), \"-01.2\");\n    t!(format!(\"{:^05}\", -1.2), \"-01.2\");\n    t!(format!(\"{:+05}\", 1.2), \"+01.2\");\n    t!(format!(\"{:<+05}\", 1.2), \"+01.2\");\n    t!(format!(\"{:>+05}\", 1.2), \"+01.2\");\n    t!(format!(\"{:^+05}\", 1.2), \"+01.2\");\n\n    // Ergonomic format_args!\n    t!(format!(\"{0:x} {0:X}\", 15), \"f F\");\n    t!(format!(\"{0:x} {0:X} {}\", 15), \"f F 15\");\n    t!(format!(\"{:x}{0:X}{a:x}{:X}{1:x}{a:X}\", 13, 14, a = 15), \"dDfEeF\");\n    t!(format!(\"{a:x} {a:X}\", a = 15), \"f F\");\n\n    // And its edge cases\n    t!(\n        format!(\n            \"{a:.0$} {b:.0$} {0:.0$}\\n{a:.c$} {b:.c$} {c:.c$}\",\n            4,\n            a = \"abcdefg\",\n            b = \"hijklmn\",\n            c = 3\n        ),\n        \"abcd hijk 4\\nabc hij 3\"\n    );\n    t!(format!(\"{a:.*} {0} {:.*}\", 4, 3, \"efgh\", a = \"abcdef\"), \"abcd 4 efg\");\n    t!(format!(\"{:.a$} {a} {a:#x}\", \"aaaaaa\", a = 2), \"aa 2 0x2\");\n\n    // Test that pointers don't get truncated.\n    {\n        let val = usize::MAX;\n        let exp = format!(\"{:#x}\", val);\n        t!(format!(\"{:p}\", val as *const isize), exp);\n    }\n\n    // Escaping\n    t!(format!(\"{{\"), \"{\");\n    t!(format!(\"}}\"), \"}\");\n\n    // make sure that format! doesn't move out of local variables\n    let a = Box::new(3);\n    format!(\"{}\", a);\n    format!(\"{}\", a);\n\n    // make sure that format! doesn't cause spurious unused-unsafe warnings when\n    // it's inside of an outer unsafe block\n    unsafe {\n        let a: isize = ::std::mem::transmute(3_usize);\n        format!(\"{}\", a);\n    }\n\n    // test that trailing commas are acceptable\n    format!(\"{}\", \"test\",);\n    format!(\"{foo}\", foo = \"test\",);\n}\n\n// Basic test to make sure that we can invoke the `write!` macro with an\n// fmt::Write instance.\n#[test]\nfn test_write() {\n    let mut buf = String::new();\n    let _ = write!(&mut buf, \"{}\", 3);\n    {\n        let w = &mut buf;\n        let _ = write!(w, \"{foo}\", foo = 4);\n        let _ = write!(w, \"{}\", \"hello\");\n        let _ = writeln!(w, \"{}\", \"line\");\n        let _ = writeln!(w, \"{foo}\", foo = \"bar\");\n        let _ = w.write_char('☃');\n        let _ = w.write_str(\"str\");\n    }\n\n    t!(buf, \"34helloline\\nbar\\n☃str\");\n}\n\n// Just make sure that the macros are defined, there's not really a lot that we\n// can do with them just yet (to test the output)\n#[test]\nfn test_print() {\n    print!(\"hi\");\n    print!(\"{:?}\", vec![0u8]);\n    println!(\"hello\");\n    println!(\"this is a {}\", \"test\");\n    println!(\"{foo}\", foo = \"bar\");\n}\n\n// Just make sure that the macros are defined, there's not really a lot that we\n// can do with them just yet (to test the output)\n#[test]\nfn test_format_args() {\n    let mut buf = String::new();\n    {\n        let w = &mut buf;\n        let _ = write!(w, \"{}\", format_args!(\"{}\", 1));\n        let _ = write!(w, \"{}\", format_args!(\"test\"));\n        let _ = write!(w, \"{}\", format_args!(\"{test}\", test = 3));\n    }\n    let s = buf;\n    t!(s, \"1test3\");\n\n    let s = fmt::format(format_args!(\"hello {}\", \"world\"));\n    t!(s, \"hello world\");\n    let s = format!(\"{}: {}\", \"args were\", format_args!(\"hello {}\", \"world\"));\n    t!(s, \"args were: hello world\");\n}\n\n#[test]\nfn test_order() {\n    // Make sure format!() arguments are always evaluated in a left-to-right\n    // ordering\n    fn foo() -> isize {\n        static mut FOO: isize = 0;\n        unsafe {\n            FOO += 1;\n            FOO\n        }\n    }\n    assert_eq!(\n        format!(\"{} {} {a} {b} {} {c}\", foo(), foo(), foo(), a = foo(), b = foo(), c = foo()),\n        \"1 2 4 5 3 6\".to_string()\n    );\n}\n\n#[test]\nfn test_once() {\n    // Make sure each argument are evaluated only once even though it may be\n    // formatted multiple times\n    fn foo() -> isize {\n        static mut FOO: isize = 0;\n        unsafe {\n            FOO += 1;\n            FOO\n        }\n    }\n    assert_eq!(format!(\"{0} {0} {0} {a} {a} {a}\", foo(), a = foo()), \"1 1 1 2 2 2\".to_string());\n}\n\n#[test]\nfn test_refcell() {\n    let refcell = RefCell::new(5);\n    assert_eq!(format!(\"{:?}\", refcell), \"RefCell { value: 5 }\");\n    let borrow = refcell.borrow_mut();\n    assert_eq!(format!(\"{:?}\", refcell), \"RefCell { value: <borrowed> }\");\n    drop(borrow);\n    assert_eq!(format!(\"{:?}\", refcell), \"RefCell { value: 5 }\");\n}\nuse std::collections::binary_heap::{Drain, PeekMut};\nuse std::collections::BinaryHeap;\nuse std::iter::TrustedLen;\nuse std::panic::{catch_unwind, AssertUnwindSafe};\nuse std::sync::atomic::{AtomicU32, Ordering};\n\n#[test]\nfn test_iterator() {\n    let data = vec![5, 9, 3];\n    let iterout = [9, 5, 3];\n    let heap = BinaryHeap::from(data);\n    let mut i = 0;\n    for el in &heap {\n        assert_eq!(*el, iterout[i]);\n        i += 1;\n    }\n}\n\n#[test]\nfn test_iter_rev_cloned_collect() {\n    let data = vec![5, 9, 3];\n    let iterout = vec![3, 5, 9];\n    let pq = BinaryHeap::from(data);\n\n    let v: Vec<_> = pq.iter().rev().cloned().collect();\n    assert_eq!(v, iterout);\n}\n\n#[test]\nfn test_into_iter_collect() {\n    let data = vec![5, 9, 3];\n    let iterout = vec![9, 5, 3];\n    let pq = BinaryHeap::from(data);\n\n    let v: Vec<_> = pq.into_iter().collect();\n    assert_eq!(v, iterout);\n}\n\n#[test]\nfn test_into_iter_size_hint() {\n    let data = vec![5, 9];\n    let pq = BinaryHeap::from(data);\n\n    let mut it = pq.into_iter();\n\n    assert_eq!(it.size_hint(), (2, Some(2)));\n    assert_eq!(it.next(), Some(9));\n\n    assert_eq!(it.size_hint(), (1, Some(1)));\n    assert_eq!(it.next(), Some(5));\n\n    assert_eq!(it.size_hint(), (0, Some(0)));\n    assert_eq!(it.next(), None);\n}\n\n#[test]\nfn test_into_iter_rev_collect() {\n    let data = vec![5, 9, 3];\n    let iterout = vec![3, 5, 9];\n    let pq = BinaryHeap::from(data);\n\n    let v: Vec<_> = pq.into_iter().rev().collect();\n    assert_eq!(v, iterout);\n}\n\n#[test]\nfn test_into_iter_sorted_collect() {\n    let heap = BinaryHeap::from(vec![2, 4, 6, 2, 1, 8, 10, 3, 5, 7, 0, 9, 1]);\n    let it = heap.into_iter_sorted();\n    let sorted = it.collect::<Vec<_>>();\n    assert_eq!(sorted, vec![10, 9, 8, 7, 6, 5, 4, 3, 2, 2, 1, 1, 0]);\n}\n\n#[test]\nfn test_drain_sorted_collect() {\n    let mut heap = BinaryHeap::from(vec![2, 4, 6, 2, 1, 8, 10, 3, 5, 7, 0, 9, 1]);\n    let it = heap.drain_sorted();\n    let sorted = it.collect::<Vec<_>>();\n    assert_eq!(sorted, vec![10, 9, 8, 7, 6, 5, 4, 3, 2, 2, 1, 1, 0]);\n}\n\nfn check_exact_size_iterator<I: ExactSizeIterator>(len: usize, it: I) {\n    let mut it = it;\n\n    for i in 0..it.len() {\n        let (lower, upper) = it.size_hint();\n        assert_eq!(Some(lower), upper);\n        assert_eq!(lower, len - i);\n        assert_eq!(it.len(), len - i);\n        it.next();\n    }\n    assert_eq!(it.len(), 0);\n    assert!(it.is_empty());\n}\n\n#[test]\nfn test_exact_size_iterator() {\n    let heap = BinaryHeap::from(vec![2, 4, 6, 2, 1, 8, 10, 3, 5, 7, 0, 9, 1]);\n    check_exact_size_iterator(heap.len(), heap.iter());\n    check_exact_size_iterator(heap.len(), heap.clone().into_iter());\n    check_exact_size_iterator(heap.len(), heap.clone().into_iter_sorted());\n    check_exact_size_iterator(heap.len(), heap.clone().drain());\n    check_exact_size_iterator(heap.len(), heap.clone().drain_sorted());\n}\n\nfn check_trusted_len<I: TrustedLen>(len: usize, it: I) {\n    let mut it = it;\n    for i in 0..len {\n        let (lower, upper) = it.size_hint();\n        if upper.is_some() {\n            assert_eq!(Some(lower), upper);\n            assert_eq!(lower, len - i);\n        }\n        it.next();\n    }\n}\n\n#[test]\nfn test_trusted_len() {\n    let heap = BinaryHeap::from(vec![2, 4, 6, 2, 1, 8, 10, 3, 5, 7, 0, 9, 1]);\n    check_trusted_len(heap.len(), heap.clone().into_iter_sorted());\n    check_trusted_len(heap.len(), heap.clone().drain_sorted());\n}\n\n#[test]\nfn test_peek_and_pop() {\n    let data = vec![2, 4, 6, 2, 1, 8, 10, 3, 5, 7, 0, 9, 1];\n    let mut sorted = data.clone();\n    sorted.sort();\n    let mut heap = BinaryHeap::from(data);\n    while !heap.is_empty() {\n        assert_eq!(heap.peek().unwrap(), sorted.last().unwrap());\n        assert_eq!(heap.pop().unwrap(), sorted.pop().unwrap());\n    }\n}\n\n#[test]\nfn test_peek_mut() {\n    let data = vec![2, 4, 6, 2, 1, 8, 10, 3, 5, 7, 0, 9, 1];\n    let mut heap = BinaryHeap::from(data);\n    assert_eq!(heap.peek(), Some(&10));\n    {\n        let mut top = heap.peek_mut().unwrap();\n        *top -= 2;\n    }\n    assert_eq!(heap.peek(), Some(&9));\n}\n\n#[test]\nfn test_peek_mut_pop() {\n    let data = vec![2, 4, 6, 2, 1, 8, 10, 3, 5, 7, 0, 9, 1];\n    let mut heap = BinaryHeap::from(data);\n    assert_eq!(heap.peek(), Some(&10));\n    {\n        let mut top = heap.peek_mut().unwrap();\n        *top -= 2;\n        assert_eq!(PeekMut::pop(top), 8);\n    }\n    assert_eq!(heap.peek(), Some(&9));\n}\n\n#[test]\nfn test_push() {\n    let mut heap = BinaryHeap::from(vec![2, 4, 9]);\n    assert_eq!(heap.len(), 3);\n    assert!(*heap.peek().unwrap() == 9);\n    heap.push(11);\n    assert_eq!(heap.len(), 4);\n    assert!(*heap.peek().unwrap() == 11);\n    heap.push(5);\n    assert_eq!(heap.len(), 5);\n    assert!(*heap.peek().unwrap() == 11);\n    heap.push(27);\n    assert_eq!(heap.len(), 6);\n    assert!(*heap.peek().unwrap() == 27);\n    heap.push(3);\n    assert_eq!(heap.len(), 7);\n    assert!(*heap.peek().unwrap() == 27);\n    heap.push(103);\n    assert_eq!(heap.len(), 8);\n    assert!(*heap.peek().unwrap() == 103);\n}\n\n#[test]\nfn test_push_unique() {\n    let mut heap = BinaryHeap::<Box<_>>::from(vec![box 2, box 4, box 9]);\n    assert_eq!(heap.len(), 3);\n    assert!(**heap.peek().unwrap() == 9);\n    heap.push(box 11);\n    assert_eq!(heap.len(), 4);\n    assert!(**heap.peek().unwrap() == 11);\n    heap.push(box 5);\n    assert_eq!(heap.len(), 5);\n    assert!(**heap.peek().unwrap() == 11);\n    heap.push(box 27);\n    assert_eq!(heap.len(), 6);\n    assert!(**heap.peek().unwrap() == 27);\n    heap.push(box 3);\n    assert_eq!(heap.len(), 7);\n    assert!(**heap.peek().unwrap() == 27);\n    heap.push(box 103);\n    assert_eq!(heap.len(), 8);\n    assert!(**heap.peek().unwrap() == 103);\n}\n\nfn check_to_vec(mut data: Vec<i32>) {\n    let heap = BinaryHeap::from(data.clone());\n    let mut v = heap.clone().into_vec();\n    v.sort();\n    data.sort();\n\n    assert_eq!(v, data);\n    assert_eq!(heap.into_sorted_vec(), data);\n}\n\n#[test]\nfn test_to_vec() {\n    check_to_vec(vec![]);\n    check_to_vec(vec![5]);\n    check_to_vec(vec![3, 2]);\n    check_to_vec(vec![2, 3]);\n    check_to_vec(vec![5, 1, 2]);\n    check_to_vec(vec![1, 100, 2, 3]);\n    check_to_vec(vec![1, 3, 5, 7, 9, 2, 4, 6, 8, 0]);\n    check_to_vec(vec![2, 4, 6, 2, 1, 8, 10, 3, 5, 7, 0, 9, 1]);\n    check_to_vec(vec![9, 11, 9, 9, 9, 9, 11, 2, 3, 4, 11, 9, 0, 0, 0, 0]);\n    check_to_vec(vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);\n    check_to_vec(vec![10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]);\n    check_to_vec(vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 1, 2]);\n    check_to_vec(vec![5, 4, 3, 2, 1, 5, 4, 3, 2, 1, 5, 4, 3, 2, 1]);\n}\n\n#[test]\nfn test_in_place_iterator_specialization() {\n    let src: Vec<usize> = vec![1, 2, 3];\n    let src_ptr = src.as_ptr();\n    let heap: BinaryHeap<_> = src.into_iter().map(std::convert::identity).collect();\n    let heap_ptr = heap.iter().next().unwrap() as *const usize;\n    assert_eq!(src_ptr, heap_ptr);\n    let sink: Vec<_> = heap.into_iter().map(std::convert::identity).collect();\n    let sink_ptr = sink.as_ptr();\n    assert_eq!(heap_ptr, sink_ptr);\n}\n\n#[test]\nfn test_empty_pop() {\n    let mut heap = BinaryHeap::<i32>::new();\n    assert!(heap.pop().is_none());\n}\n\n#[test]\nfn test_empty_peek() {\n    let empty = BinaryHeap::<i32>::new();\n    assert!(empty.peek().is_none());\n}\n\n#[test]\nfn test_empty_peek_mut() {\n    let mut empty = BinaryHeap::<i32>::new();\n    assert!(empty.peek_mut().is_none());\n}\n\n#[test]\nfn test_from_iter() {\n    let xs = vec![9, 8, 7, 6, 5, 4, 3, 2, 1];\n\n    let mut q: BinaryHeap<_> = xs.iter().rev().cloned().collect();\n\n    for &x in &xs {\n        assert_eq!(q.pop().unwrap(), x);\n    }\n}\n\n#[test]\nfn test_drain() {\n    let mut q: BinaryHeap<_> = [9, 8, 7, 6, 5, 4, 3, 2, 1].iter().cloned().collect();\n\n    assert_eq!(q.drain().take(5).count(), 5);\n\n    assert!(q.is_empty());\n}\n\n#[test]\nfn test_drain_sorted() {\n    let mut q: BinaryHeap<_> = [9, 8, 7, 6, 5, 4, 3, 2, 1].iter().cloned().collect();\n\n    assert_eq!(q.drain_sorted().take(5).collect::<Vec<_>>(), vec![9, 8, 7, 6, 5]);\n\n    assert!(q.is_empty());\n}\n\n#[test]\nfn test_drain_sorted_leak() {\n    static DROPS: AtomicU32 = AtomicU32::new(0);\n\n    #[derive(Clone, PartialEq, Eq, PartialOrd, Ord)]\n    struct D(u32, bool);\n\n    impl Drop for D {\n        fn drop(&mut self) {\n            DROPS.fetch_add(1, Ordering::SeqCst);\n\n            if self.1 {\n                panic!(\"panic in `drop`\");\n            }\n        }\n    }\n\n    let mut q = BinaryHeap::from(vec![\n        D(0, false),\n        D(1, false),\n        D(2, false),\n        D(3, true),\n        D(4, false),\n        D(5, false),\n    ]);\n\n    catch_unwind(AssertUnwindSafe(|| drop(q.drain_sorted()))).ok();\n\n    assert_eq!(DROPS.load(Ordering::SeqCst), 6);\n}\n\n#[test]\nfn test_extend_ref() {\n    let mut a = BinaryHeap::new();\n    a.push(1);\n    a.push(2);\n\n    a.extend(&[3, 4, 5]);\n\n    assert_eq!(a.len(), 5);\n    assert_eq!(a.into_sorted_vec(), [1, 2, 3, 4, 5]);\n\n    let mut a = BinaryHeap::new();\n    a.push(1);\n    a.push(2);\n    let mut b = BinaryHeap::new();\n    b.push(3);\n    b.push(4);\n    b.push(5);\n\n    a.extend(&b);\n\n    assert_eq!(a.len(), 5);\n    assert_eq!(a.into_sorted_vec(), [1, 2, 3, 4, 5]);\n}\n\n#[test]\nfn test_append() {\n    let mut a = BinaryHeap::from(vec![-10, 1, 2, 3, 3]);\n    let mut b = BinaryHeap::from(vec![-20, 5, 43]);\n\n    a.append(&mut b);\n\n    assert_eq!(a.into_sorted_vec(), [-20, -10, 1, 2, 3, 3, 5, 43]);\n    assert!(b.is_empty());\n}\n\n#[test]\nfn test_append_to_empty() {\n    let mut a = BinaryHeap::new();\n    let mut b = BinaryHeap::from(vec![-20, 5, 43]);\n\n    a.append(&mut b);\n\n    assert_eq!(a.into_sorted_vec(), [-20, 5, 43]);\n    assert!(b.is_empty());\n}\n\n#[test]\nfn test_extend_specialization() {\n    let mut a = BinaryHeap::from(vec![-10, 1, 2, 3, 3]);\n    let b = BinaryHeap::from(vec![-20, 5, 43]);\n\n    a.extend(b);\n\n    assert_eq!(a.into_sorted_vec(), [-20, -10, 1, 2, 3, 3, 5, 43]);\n}\n\n#[allow(dead_code)]\nfn assert_covariance() {\n    fn drain<'new>(d: Drain<'static, &'static str>) -> Drain<'new, &'new str> {\n        d\n    }\n}\n\n#[test]\nfn test_retain() {\n    let mut a = BinaryHeap::from(vec![100, 10, 50, 1, 2, 20, 30]);\n    a.retain(|&x| x != 2);\n\n    // Check that 20 moved into 10's place.\n    assert_eq!(a.clone().into_vec(), [100, 20, 50, 1, 10, 30]);\n\n    a.retain(|_| true);\n\n    assert_eq!(a.clone().into_vec(), [100, 20, 50, 1, 10, 30]);\n\n    a.retain(|&x| x < 50);\n\n    assert_eq!(a.clone().into_vec(), [30, 20, 10, 1]);\n\n    a.retain(|_| false);\n\n    assert!(a.is_empty());\n}\n\n// old binaryheap failed this test\n//\n// Integrity means that all elements are present after a comparison panics,\n// even if the order may not be correct.\n//\n// Destructors must be called exactly once per element.\n// FIXME: re-enable emscripten once it can unwind again\n#[test]\n#[cfg(not(target_os = \"emscripten\"))]\nfn panic_safe() {\n    use rand::{seq::SliceRandom, thread_rng};\n    use std::cmp;\n    use std::panic::{self, AssertUnwindSafe};\n    use std::sync::atomic::{AtomicUsize, Ordering};\n\n    static DROP_COUNTER: AtomicUsize = AtomicUsize::new(0);\n\n    #[derive(Eq, PartialEq, Ord, Clone, Debug)]\n    struct PanicOrd<T>(T, bool);\n\n    impl<T> Drop for PanicOrd<T> {\n        fn drop(&mut self) {\n            // update global drop count\n            DROP_COUNTER.fetch_add(1, Ordering::SeqCst);\n        }\n    }\n\n    impl<T: PartialOrd> PartialOrd for PanicOrd<T> {\n        fn partial_cmp(&self, other: &Self) -> Option<cmp::Ordering> {\n            if self.1 || other.1 {\n                panic!(\"Panicking comparison\");\n            }\n            self.0.partial_cmp(&other.0)\n        }\n    }\n    let mut rng = thread_rng();\n    const DATASZ: usize = 32;\n    // Miri is too slow\n    let ntest = if cfg!(miri) { 1 } else { 10 };\n\n    // don't use 0 in the data -- we want to catch the zeroed-out case.\n    let data = (1..=DATASZ).collect::<Vec<_>>();\n\n    // since it's a fuzzy test, run several tries.\n    for _ in 0..ntest {\n        for i in 1..=DATASZ {\n            DROP_COUNTER.store(0, Ordering::SeqCst);\n\n            let mut panic_ords: Vec<_> =\n                data.iter().filter(|&&x| x != i).map(|&x| PanicOrd(x, false)).collect();\n            let panic_item = PanicOrd(i, true);\n\n            // heapify the sane items\n            panic_ords.shuffle(&mut rng);\n            let mut heap = BinaryHeap::from(panic_ords);\n            let inner_data;\n\n            {\n                // push the panicking item to the heap and catch the panic\n                let thread_result = {\n                    let mut heap_ref = AssertUnwindSafe(&mut heap);\n                    panic::catch_unwind(move || {\n                        heap_ref.push(panic_item);\n                    })\n                };\n                assert!(thread_result.is_err());\n\n                // Assert no elements were dropped\n                let drops = DROP_COUNTER.load(Ordering::SeqCst);\n                assert!(drops == 0, \"Must not drop items. drops={}\", drops);\n                inner_data = heap.clone().into_vec();\n                drop(heap);\n            }\n            let drops = DROP_COUNTER.load(Ordering::SeqCst);\n            assert_eq!(drops, DATASZ);\n\n            let mut data_sorted = inner_data.into_iter().map(|p| p.0).collect::<Vec<_>>();\n            data_sorted.sort();\n            assert_eq!(data_sorted, data);\n        }\n    }\n}\nuse std::cell::Cell;\nuse std::mem::MaybeUninit;\nuse std::ptr::NonNull;\n\n#[test]\nfn unitialized_zero_size_box() {\n    assert_eq!(\n        &*Box::<()>::new_uninit() as *const _,\n        NonNull::<MaybeUninit<()>>::dangling().as_ptr(),\n    );\n    assert_eq!(\n        Box::<[()]>::new_uninit_slice(4).as_ptr(),\n        NonNull::<MaybeUninit<()>>::dangling().as_ptr(),\n    );\n    assert_eq!(\n        Box::<[String]>::new_uninit_slice(0).as_ptr(),\n        NonNull::<MaybeUninit<String>>::dangling().as_ptr(),\n    );\n}\n\n#[derive(Clone, PartialEq, Eq, Debug)]\nstruct Dummy {\n    _data: u8,\n}\n\n#[test]\nfn box_clone_and_clone_from_equivalence() {\n    for size in (0..8).map(|i| 2usize.pow(i)) {\n        let control = vec![Dummy { _data: 42 }; size].into_boxed_slice();\n        let clone = control.clone();\n        let mut copy = vec![Dummy { _data: 84 }; size].into_boxed_slice();\n        copy.clone_from(&control);\n        assert_eq!(control, clone);\n        assert_eq!(control, copy);\n    }\n}\n\n/// This test might give a false positive in case the box realocates, but the alocator keeps the\n/// original pointer.\n///\n/// On the other hand it won't give a false negative, if it fails than the memory was definitely not\n/// reused\n#[test]\nfn box_clone_from_ptr_stability() {\n    for size in (0..8).map(|i| 2usize.pow(i)) {\n        let control = vec![Dummy { _data: 42 }; size].into_boxed_slice();\n        let mut copy = vec![Dummy { _data: 84 }; size].into_boxed_slice();\n        let copy_raw = copy.as_ptr() as usize;\n        copy.clone_from(&control);\n        assert_eq!(copy.as_ptr() as usize, copy_raw);\n    }\n}\n\n#[test]\nfn box_deref_lval() {\n    let x = Box::new(Cell::new(5));\n    x.set(1000);\n    assert_eq!(x.get(), 1000);\n}\nuse std::alloc::{Allocator, Global, Layout, System};\n\n/// Issue #45955 and #62251.\n#[test]\nfn alloc_system_overaligned_request() {\n    check_overalign_requests(System)\n}\n\n#[test]\nfn std_heap_overaligned_request() {\n    check_overalign_requests(Global)\n}\n\nfn check_overalign_requests<T: Allocator>(allocator: T) {\n    for &align in &[4, 8, 16, 32] {\n        // less than and bigger than `MIN_ALIGN`\n        for &size in &[align / 2, align - 1] {\n            // size less than alignment\n            let iterations = 128;\n            unsafe {\n                let pointers: Vec<_> = (0..iterations)\n                    .map(|_| {\n                        allocator.allocate(Layout::from_size_align(size, align).unwrap()).unwrap()\n                    })\n                    .collect();\n                for &ptr in &pointers {\n                    assert_eq!(\n                        (ptr.as_non_null_ptr().as_ptr() as usize) % align,\n                        0,\n                        \"Got a pointer less aligned than requested\"\n                    )\n                }\n\n                // Clean up\n                for &ptr in &pointers {\n                    allocator.deallocate(\n                        ptr.as_non_null_ptr(),\n                        Layout::from_size_align(size, align).unwrap(),\n                    )\n                }\n            }\n        }\n    }\n}\n/// Creates a [`Vec`] containing the arguments.\n///\n/// `vec!` allows `Vec`s to be defined with the same syntax as array expressions.\n/// There are two forms of this macro:\n///\n/// - Create a [`Vec`] containing a given list of elements:\n///\n/// ```\n/// let v = vec![1, 2, 3];\n/// assert_eq!(v[0], 1);\n/// assert_eq!(v[1], 2);\n/// assert_eq!(v[2], 3);\n/// ```\n///\n/// - Create a [`Vec`] from a given element and size:\n///\n/// ```\n/// let v = vec![1; 3];\n/// assert_eq!(v, [1, 1, 1]);\n/// ```\n///\n/// Note that unlike array expressions this syntax supports all elements\n/// which implement [`Clone`] and the number of elements doesn't have to be\n/// a constant.\n///\n/// This will use `clone` to duplicate an expression, so one should be careful\n/// using this with types having a nonstandard `Clone` implementation. For\n/// example, `vec![Rc::new(1); 5]` will create a vector of five references\n/// to the same boxed integer value, not five references pointing to independently\n/// boxed integers.\n///\n/// Also, note that `vec![expr; 0]` is allowed, and produces an empty vector.\n/// This will still evaluate `expr`, however, and immediately drop the resulting value, so\n/// be mindful of side effects.\n///\n/// [`Vec`]: crate::vec::Vec\n#[cfg(not(test))]\n#[doc(alias = \"alloc\")]\n#[doc(alias = \"malloc\")]\n#[macro_export]\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\n#[allow_internal_unstable(box_syntax, liballoc_internals)]\nmacro_rules! vec {\n    () => (\n        $crate::__rust_force_expr!($crate::vec::Vec::new())\n    );\n    ($elem:expr; $n:expr) => (\n        $crate::__rust_force_expr!($crate::vec::from_elem($elem, $n))\n    );\n    ($($x:expr),+ $(,)?) => (\n        $crate::__rust_force_expr!(<[_]>::into_vec(box [$($x),+]))\n    );\n}\n\n// HACK(japaric): with cfg(test) the inherent `[T]::into_vec` method, which is\n// required for this macro definition, is not available. Instead use the\n// `slice::into_vec`  function which is only available with cfg(test)\n// NB see the slice::hack module in slice.rs for more information\n#[cfg(test)]\nmacro_rules! vec {\n    () => (\n        $crate::vec::Vec::new()\n    );\n    ($elem:expr; $n:expr) => (\n        $crate::vec::from_elem($elem, $n)\n    );\n    ($($x:expr),*) => (\n        $crate::slice::into_vec(box [$($x),*])\n    );\n    ($($x:expr,)*) => (vec![$($x),*])\n}\n\n/// Creates a `String` using interpolation of runtime expressions.\n///\n/// The first argument `format!` receives is a format string. This must be a string\n/// literal. The power of the formatting string is in the `{}`s contained.\n///\n/// Additional parameters passed to `format!` replace the `{}`s within the\n/// formatting string in the order given unless named or positional parameters\n/// are used; see [`std::fmt`] for more information.\n///\n/// A common use for `format!` is concatenation and interpolation of strings.\n/// The same convention is used with [`print!`] and [`write!`] macros,\n/// depending on the intended destination of the string.\n///\n/// To convert a single value to a string, use the [`to_string`] method. This\n/// will use the [`Display`] formatting trait.\n///\n/// [`std::fmt`]: ../std/fmt/index.html\n/// [`print!`]: ../std/macro.print.html\n/// [`write!`]: core::write\n/// [`to_string`]: crate::string::ToString\n/// [`Display`]: core::fmt::Display\n///\n/// # Panics\n///\n/// `format!` panics if a formatting trait implementation returns an error.\n/// This indicates an incorrect implementation\n/// since `fmt::Write for String` never returns an error itself.\n///\n/// # Examples\n///\n/// ```\n/// format!(\"test\");\n/// format!(\"hello {}\", \"world!\");\n/// format!(\"x = {}, y = {y}\", 10, y = 30);\n/// ```\n#[macro_export]\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\n#[cfg_attr(not(test), rustc_diagnostic_item = \"format_macro\")]\nmacro_rules! format {\n    ($($arg:tt)*) => {{\n        let res = $crate::fmt::format($crate::__export::format_args!($($arg)*));\n        res\n    }}\n}\n\n/// Force AST node to an expression to improve diagnostics in pattern position.\n#[doc(hidden)]\n#[macro_export]\n#[unstable(feature = \"liballoc_internals\", issue = \"none\", reason = \"implementation detail\")]\nmacro_rules! __rust_force_expr {\n    ($e:expr) => {\n        $e\n    };\n}\n//! Memory allocation APIs\n\n#![stable(feature = \"alloc_module\", since = \"1.28.0\")]\n\n#[cfg(not(test))]\nuse core::intrinsics;\nuse core::intrinsics::{min_align_of_val, size_of_val};\n\nuse core::ptr::Unique;\n#[cfg(not(test))]\nuse core::ptr::{self, NonNull};\n\n#[stable(feature = \"alloc_module\", since = \"1.28.0\")]\n#[doc(inline)]\npub use core::alloc::*;\n\n#[cfg(test)]\nmod tests;\n\nextern \"Rust\" {\n    // These are the magic symbols to call the global allocator.  rustc generates\n    // them to call `__rg_alloc` etc. if there is a `#[global_allocator]` attribute\n    // (the code expanding that attribute macro generates those functions), or to call\n    // the default implementations in libstd (`__rdl_alloc` etc. in `library/std/src/alloc.rs`)\n    // otherwise.\n    // The rustc fork of LLVM also special-cases these function names to be able to optimize them\n    // like `malloc`, `realloc`, and `free`, respectively.\n    #[rustc_allocator]\n    #[rustc_allocator_nounwind]\n    fn __rust_alloc(size: usize, align: usize) -> *mut u8;\n    #[rustc_allocator_nounwind]\n    fn __rust_dealloc(ptr: *mut u8, size: usize, align: usize);\n    #[rustc_allocator_nounwind]\n    fn __rust_realloc(ptr: *mut u8, old_size: usize, align: usize, new_size: usize) -> *mut u8;\n    #[rustc_allocator_nounwind]\n    fn __rust_alloc_zeroed(size: usize, align: usize) -> *mut u8;\n}\n\n/// The global memory allocator.\n///\n/// This type implements the [`Allocator`] trait by forwarding calls\n/// to the allocator registered with the `#[global_allocator]` attribute\n/// if there is one, or the `std` crate’s default.\n///\n/// Note: while this type is unstable, the functionality it provides can be\n/// accessed through the [free functions in `alloc`](self#functions).\n#[unstable(feature = \"allocator_api\", issue = \"32838\")]\n#[derive(Copy, Clone, Default, Debug)]\n#[cfg(not(test))]\npub struct Global;\n\n#[cfg(test)]\npub use std::alloc::Global;\n\n/// Allocate memory with the global allocator.\n///\n/// This function forwards calls to the [`GlobalAlloc::alloc`] method\n/// of the allocator registered with the `#[global_allocator]` attribute\n/// if there is one, or the `std` crate’s default.\n///\n/// This function is expected to be deprecated in favor of the `alloc` method\n/// of the [`Global`] type when it and the [`Allocator`] trait become stable.\n///\n/// # Safety\n///\n/// See [`GlobalAlloc::alloc`].\n///\n/// # Examples\n///\n/// ```\n/// use std::alloc::{alloc, dealloc, Layout};\n///\n/// unsafe {\n///     let layout = Layout::new::<u16>();\n///     let ptr = alloc(layout);\n///\n///     *(ptr as *mut u16) = 42;\n///     assert_eq!(*(ptr as *mut u16), 42);\n///\n///     dealloc(ptr, layout);\n/// }\n/// ```\n#[stable(feature = \"global_alloc\", since = \"1.28.0\")]\n#[inline]\npub unsafe fn alloc(layout: Layout) -> *mut u8 {\n    unsafe { __rust_alloc(layout.size(), layout.align()) }\n}\n\n/// Deallocate memory with the global allocator.\n///\n/// This function forwards calls to the [`GlobalAlloc::dealloc`] method\n/// of the allocator registered with the `#[global_allocator]` attribute\n/// if there is one, or the `std` crate’s default.\n///\n/// This function is expected to be deprecated in favor of the `dealloc` method\n/// of the [`Global`] type when it and the [`Allocator`] trait become stable.\n///\n/// # Safety\n///\n/// See [`GlobalAlloc::dealloc`].\n#[stable(feature = \"global_alloc\", since = \"1.28.0\")]\n#[inline]\npub unsafe fn dealloc(ptr: *mut u8, layout: Layout) {\n    unsafe { __rust_dealloc(ptr, layout.size(), layout.align()) }\n}\n\n/// Reallocate memory with the global allocator.\n///\n/// This function forwards calls to the [`GlobalAlloc::realloc`] method\n/// of the allocator registered with the `#[global_allocator]` attribute\n/// if there is one, or the `std` crate’s default.\n///\n/// This function is expected to be deprecated in favor of the `realloc` method\n/// of the [`Global`] type when it and the [`Allocator`] trait become stable.\n///\n/// # Safety\n///\n/// See [`GlobalAlloc::realloc`].\n#[stable(feature = \"global_alloc\", since = \"1.28.0\")]\n#[inline]\npub unsafe fn realloc(ptr: *mut u8, layout: Layout, new_size: usize) -> *mut u8 {\n    unsafe { __rust_realloc(ptr, layout.size(), layout.align(), new_size) }\n}\n\n/// Allocate zero-initialized memory with the global allocator.\n///\n/// This function forwards calls to the [`GlobalAlloc::alloc_zeroed`] method\n/// of the allocator registered with the `#[global_allocator]` attribute\n/// if there is one, or the `std` crate’s default.\n///\n/// This function is expected to be deprecated in favor of the `alloc_zeroed` method\n/// of the [`Global`] type when it and the [`Allocator`] trait become stable.\n///\n/// # Safety\n///\n/// See [`GlobalAlloc::alloc_zeroed`].\n///\n/// # Examples\n///\n/// ```\n/// use std::alloc::{alloc_zeroed, dealloc, Layout};\n///\n/// unsafe {\n///     let layout = Layout::new::<u16>();\n///     let ptr = alloc_zeroed(layout);\n///\n///     assert_eq!(*(ptr as *mut u16), 0);\n///\n///     dealloc(ptr, layout);\n/// }\n/// ```\n#[stable(feature = \"global_alloc\", since = \"1.28.0\")]\n#[inline]\npub unsafe fn alloc_zeroed(layout: Layout) -> *mut u8 {\n    unsafe { __rust_alloc_zeroed(layout.size(), layout.align()) }\n}\n\n#[cfg(not(test))]\nimpl Global {\n    #[inline]\n    fn alloc_impl(&self, layout: Layout, zeroed: bool) -> Result<NonNull<[u8]>, AllocError> {\n        match layout.size() {\n            0 => Ok(NonNull::slice_from_raw_parts(layout.dangling(), 0)),\n            // SAFETY: `layout` is non-zero in size,\n            size => unsafe {\n                let raw_ptr = if zeroed { alloc_zeroed(layout) } else { alloc(layout) };\n                let ptr = NonNull::new(raw_ptr).ok_or(AllocError)?;\n                Ok(NonNull::slice_from_raw_parts(ptr, size))\n            },\n        }\n    }\n\n    // SAFETY: Same as `Allocator::grow`\n    #[inline]\n    unsafe fn grow_impl(\n        &self,\n        ptr: NonNull<u8>,\n        old_layout: Layout,\n        new_layout: Layout,\n        zeroed: bool,\n    ) -> Result<NonNull<[u8]>, AllocError> {\n        debug_assert!(\n            new_layout.size() >= old_layout.size(),\n            \"`new_layout.size()` must be greater than or equal to `old_layout.size()`\"\n        );\n\n        match old_layout.size() {\n            0 => self.alloc_impl(new_layout, zeroed),\n\n            // SAFETY: `new_size` is non-zero as `old_size` is greater than or equal to `new_size`\n            // as required by safety conditions. Other conditions must be upheld by the caller\n            old_size if old_layout.align() == new_layout.align() => unsafe {\n                let new_size = new_layout.size();\n\n                // `realloc` probably checks for `new_size >= old_layout.size()` or something similar.\n                intrinsics::assume(new_size >= old_layout.size());\n\n                let raw_ptr = realloc(ptr.as_ptr(), old_layout, new_size);\n                let ptr = NonNull::new(raw_ptr).ok_or(AllocError)?;\n                if zeroed {\n                    raw_ptr.add(old_size).write_bytes(0, new_size - old_size);\n                }\n                Ok(NonNull::slice_from_raw_parts(ptr, new_size))\n            },\n\n            // SAFETY: because `new_layout.size()` must be greater than or equal to `old_size`,\n            // both the old and new memory allocation are valid for reads and writes for `old_size`\n            // bytes. Also, because the old allocation wasn't yet deallocated, it cannot overlap\n            // `new_ptr`. Thus, the call to `copy_nonoverlapping` is safe. The safety contract\n            // for `dealloc` must be upheld by the caller.\n            old_size => unsafe {\n                let new_ptr = self.alloc_impl(new_layout, zeroed)?;\n                ptr::copy_nonoverlapping(ptr.as_ptr(), new_ptr.as_mut_ptr(), old_size);\n                self.deallocate(ptr, old_layout);\n                Ok(new_ptr)\n            },\n        }\n    }\n}\n\n#[unstable(feature = \"allocator_api\", issue = \"32838\")]\n#[cfg(not(test))]\nunsafe impl Allocator for Global {\n    #[inline]\n    fn allocate(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError> {\n        self.alloc_impl(layout, false)\n    }\n\n    #[inline]\n    fn allocate_zeroed(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError> {\n        self.alloc_impl(layout, true)\n    }\n\n    #[inline]\n    unsafe fn deallocate(&self, ptr: NonNull<u8>, layout: Layout) {\n        if layout.size() != 0 {\n            // SAFETY: `layout` is non-zero in size,\n            // other conditions must be upheld by the caller\n            unsafe { dealloc(ptr.as_ptr(), layout) }\n        }\n    }\n\n    #[inline]\n    unsafe fn grow(\n        &self,\n        ptr: NonNull<u8>,\n        old_layout: Layout,\n        new_layout: Layout,\n    ) -> Result<NonNull<[u8]>, AllocError> {\n        // SAFETY: all conditions must be upheld by the caller\n        unsafe { self.grow_impl(ptr, old_layout, new_layout, false) }\n    }\n\n    #[inline]\n    unsafe fn grow_zeroed(\n        &self,\n        ptr: NonNull<u8>,\n        old_layout: Layout,\n        new_layout: Layout,\n    ) -> Result<NonNull<[u8]>, AllocError> {\n        // SAFETY: all conditions must be upheld by the caller\n        unsafe { self.grow_impl(ptr, old_layout, new_layout, true) }\n    }\n\n    #[inline]\n    unsafe fn shrink(\n        &self,\n        ptr: NonNull<u8>,\n        old_layout: Layout,\n        new_layout: Layout,\n    ) -> Result<NonNull<[u8]>, AllocError> {\n        debug_assert!(\n            new_layout.size() <= old_layout.size(),\n            \"`new_layout.size()` must be smaller than or equal to `old_layout.size()`\"\n        );\n\n        match new_layout.size() {\n            // SAFETY: conditions must be upheld by the caller\n            0 => unsafe {\n                self.deallocate(ptr, old_layout);\n                Ok(NonNull::slice_from_raw_parts(new_layout.dangling(), 0))\n            },\n\n            // SAFETY: `new_size` is non-zero. Other conditions must be upheld by the caller\n            new_size if old_layout.align() == new_layout.align() => unsafe {\n                // `realloc` probably checks for `new_size <= old_layout.size()` or something similar.\n                intrinsics::assume(new_size <= old_layout.size());\n\n                let raw_ptr = realloc(ptr.as_ptr(), old_layout, new_size);\n                let ptr = NonNull::new(raw_ptr).ok_or(AllocError)?;\n                Ok(NonNull::slice_from_raw_parts(ptr, new_size))\n            },\n\n            // SAFETY: because `new_size` must be smaller than or equal to `old_layout.size()`,\n            // both the old and new memory allocation are valid for reads and writes for `new_size`\n            // bytes. Also, because the old allocation wasn't yet deallocated, it cannot overlap\n            // `new_ptr`. Thus, the call to `copy_nonoverlapping` is safe. The safety contract\n            // for `dealloc` must be upheld by the caller.\n            new_size => unsafe {\n                let new_ptr = self.allocate(new_layout)?;\n                ptr::copy_nonoverlapping(ptr.as_ptr(), new_ptr.as_mut_ptr(), new_size);\n                self.deallocate(ptr, old_layout);\n                Ok(new_ptr)\n            },\n        }\n    }\n}\n\n/// The allocator for unique pointers.\n// This function must not unwind. If it does, MIR codegen will fail.\n#[cfg(not(test))]\n#[lang = \"exchange_malloc\"]\n#[inline]\nunsafe fn exchange_malloc(size: usize, align: usize) -> *mut u8 {\n    let layout = unsafe { Layout::from_size_align_unchecked(size, align) };\n    match Global.allocate(layout) {\n        Ok(ptr) => ptr.as_mut_ptr(),\n        Err(_) => handle_alloc_error(layout),\n    }\n}\n\n#[cfg_attr(not(test), lang = \"box_free\")]\n#[inline]\n// This signature has to be the same as `Box`, otherwise an ICE will happen.\n// When an additional parameter to `Box` is added (like `A: Allocator`), this has to be added here as\n// well.\n// For example if `Box` is changed to  `struct Box<T: ?Sized, A: Allocator>(Unique<T>, A)`,\n// this function has to be changed to `fn box_free<T: ?Sized, A: Allocator>(Unique<T>, A)` as well.\npub(crate) unsafe fn box_free<T: ?Sized, A: Allocator>(ptr: Unique<T>, alloc: A) {\n    unsafe {\n        let size = size_of_val(ptr.as_ref());\n        let align = min_align_of_val(ptr.as_ref());\n        let layout = Layout::from_size_align_unchecked(size, align);\n        alloc.deallocate(ptr.cast().into(), layout)\n    }\n}\n\n// # Allocation error handler\n\nextern \"Rust\" {\n    // This is the magic symbol to call the global alloc error handler.  rustc generates\n    // it to call `__rg_oom` if there is a `#[alloc_error_handler]`, or to call the\n    // default implementations below (`__rdl_oom`) otherwise.\n    #[rustc_allocator_nounwind]\n    fn __rust_alloc_error_handler(size: usize, align: usize) -> !;\n}\n\n/// Abort on memory allocation error or failure.\n///\n/// Callers of memory allocation APIs wishing to abort computation\n/// in response to an allocation error are encouraged to call this function,\n/// rather than directly invoking `panic!` or similar.\n///\n/// The default behavior of this function is to print a message to standard error\n/// and abort the process.\n/// It can be replaced with [`set_alloc_error_hook`] and [`take_alloc_error_hook`].\n///\n/// [`set_alloc_error_hook`]: ../../std/alloc/fn.set_alloc_error_hook.html\n/// [`take_alloc_error_hook`]: ../../std/alloc/fn.take_alloc_error_hook.html\n#[stable(feature = \"global_alloc\", since = \"1.28.0\")]\n#[cfg(not(test))]\n#[rustc_allocator_nounwind]\n#[cold]\npub fn handle_alloc_error(layout: Layout) -> ! {\n    unsafe {\n        __rust_alloc_error_handler(layout.size(), layout.align());\n    }\n}\n\n// For alloc test `std::alloc::handle_alloc_error` can be used directly.\n#[cfg(test)]\npub use std::alloc::handle_alloc_error;\n\n#[cfg(not(any(target_os = \"hermit\", test)))]\n#[doc(hidden)]\n#[allow(unused_attributes)]\n#[unstable(feature = \"alloc_internals\", issue = \"none\")]\npub mod __alloc_error_handler {\n    use crate::alloc::Layout;\n\n    // called via generated `__rust_alloc_error_handler`\n\n    // if there is no `#[alloc_error_handler]`\n    #[rustc_std_internal_symbol]\n    pub unsafe extern \"C\" fn __rdl_oom(size: usize, _align: usize) -> ! {\n        panic!(\"memory allocation of {} bytes failed\", size)\n    }\n\n    // if there is a `#[alloc_error_handler]`\n    #[rustc_std_internal_symbol]\n    pub unsafe extern \"C\" fn __rg_oom(size: usize, align: usize) -> ! {\n        let layout = unsafe { Layout::from_size_align_unchecked(size, align) };\n        extern \"Rust\" {\n            #[lang = \"oom\"]\n            fn oom_impl(layout: Layout) -> !;\n        }\n        unsafe { oom_impl(layout) }\n    }\n}\n\n/// Specialize clones into pre-allocated, uninitialized memory.\n/// Used by `Box::clone` and `Rc`/`Arc::make_mut`.\npub(crate) trait WriteCloneIntoRaw: Sized {\n    unsafe fn write_clone_into_raw(&self, target: *mut Self);\n}\n\nimpl<T: Clone> WriteCloneIntoRaw for T {\n    #[inline]\n    default unsafe fn write_clone_into_raw(&self, target: *mut Self) {\n        // Having allocated *first* may allow the optimizer to create\n        // the cloned value in-place, skipping the local and move.\n        unsafe { target.write(self.clone()) };\n    }\n}\n\nimpl<T: Copy> WriteCloneIntoRaw for T {\n    #[inline]\n    unsafe fn write_clone_into_raw(&self, target: *mut Self) {\n        // We can always copy in-place, without ever involving a local value.\n        unsafe { target.copy_from_nonoverlapping(self, 1) };\n    }\n}\n#![unstable(feature = \"raw_vec_internals\", reason = \"implementation detail\", issue = \"none\")]\n#![doc(hidden)]\n\nuse core::alloc::LayoutError;\nuse core::cmp;\nuse core::intrinsics;\nuse core::mem::{self, ManuallyDrop, MaybeUninit};\nuse core::ops::Drop;\nuse core::ptr::{self, NonNull, Unique};\nuse core::slice;\n\nuse crate::alloc::{handle_alloc_error, Allocator, Global, Layout};\nuse crate::boxed::Box;\nuse crate::collections::TryReserveError::{self, *};\n\n#[cfg(test)]\nmod tests;\n\nenum AllocInit {\n    /// The contents of the new memory are uninitialized.\n    Uninitialized,\n    /// The new memory is guaranteed to be zeroed.\n    Zeroed,\n}\n\n/// A low-level utility for more ergonomically allocating, reallocating, and deallocating\n/// a buffer of memory on the heap without having to worry about all the corner cases\n/// involved. This type is excellent for building your own data structures like Vec and VecDeque.\n/// In particular:\n///\n/// * Produces `Unique::dangling()` on zero-sized types.\n/// * Produces `Unique::dangling()` on zero-length allocations.\n/// * Avoids freeing `Unique::dangling()`.\n/// * Catches all overflows in capacity computations (promotes them to \"capacity overflow\" panics).\n/// * Guards against 32-bit systems allocating more than isize::MAX bytes.\n/// * Guards against overflowing your length.\n/// * Calls `handle_alloc_error` for fallible allocations.\n/// * Contains a `ptr::Unique` and thus endows the user with all related benefits.\n/// * Uses the excess returned from the allocator to use the largest available capacity.\n///\n/// This type does not in anyway inspect the memory that it manages. When dropped it *will*\n/// free its memory, but it *won't* try to drop its contents. It is up to the user of `RawVec`\n/// to handle the actual things *stored* inside of a `RawVec`.\n///\n/// Note that the excess of a zero-sized types is always infinite, so `capacity()` always returns\n/// `usize::MAX`. This means that you need to be careful when round-tripping this type with a\n/// `Box<[T]>`, since `capacity()` won't yield the length.\n#[allow(missing_debug_implementations)]\npub struct RawVec<T, A: Allocator = Global> {\n    ptr: Unique<T>,\n    cap: usize,\n    alloc: A,\n}\n\nimpl<T> RawVec<T, Global> {\n    /// HACK(Centril): This exists because stable `const fn` can only call stable `const fn`, so\n    /// they cannot call `Self::new()`.\n    ///\n    /// If you change `RawVec<T>::new` or dependencies, please take care to not introduce anything\n    /// that would truly const-call something unstable.\n    pub const NEW: Self = Self::new();\n\n    /// Creates the biggest possible `RawVec` (on the system heap)\n    /// without allocating. If `T` has positive size, then this makes a\n    /// `RawVec` with capacity `0`. If `T` is zero-sized, then it makes a\n    /// `RawVec` with capacity `usize::MAX`. Useful for implementing\n    /// delayed allocation.\n    pub const fn new() -> Self {\n        Self::new_in(Global)\n    }\n\n    /// Creates a `RawVec` (on the system heap) with exactly the\n    /// capacity and alignment requirements for a `[T; capacity]`. This is\n    /// equivalent to calling `RawVec::new` when `capacity` is `0` or `T` is\n    /// zero-sized. Note that if `T` is zero-sized this means you will\n    /// *not* get a `RawVec` with the requested capacity.\n    ///\n    /// # Panics\n    ///\n    /// Panics if the requested capacity exceeds `isize::MAX` bytes.\n    ///\n    /// # Aborts\n    ///\n    /// Aborts on OOM.\n    #[inline]\n    pub fn with_capacity(capacity: usize) -> Self {\n        Self::with_capacity_in(capacity, Global)\n    }\n\n    /// Like `with_capacity`, but guarantees the buffer is zeroed.\n    #[inline]\n    pub fn with_capacity_zeroed(capacity: usize) -> Self {\n        Self::with_capacity_zeroed_in(capacity, Global)\n    }\n\n    /// Reconstitutes a `RawVec` from a pointer and capacity.\n    ///\n    /// # Safety\n    ///\n    /// The `ptr` must be allocated (on the system heap), and with the given `capacity`.\n    /// The `capacity` cannot exceed `isize::MAX` for sized types. (only a concern on 32-bit\n    /// systems). ZST vectors may have a capacity up to `usize::MAX`.\n    /// If the `ptr` and `capacity` come from a `RawVec`, then this is guaranteed.\n    #[inline]\n    pub unsafe fn from_raw_parts(ptr: *mut T, capacity: usize) -> Self {\n        unsafe { Self::from_raw_parts_in(ptr, capacity, Global) }\n    }\n}\n\nimpl<T, A: Allocator> RawVec<T, A> {\n    // Tiny Vecs are dumb. Skip to:\n    // - 8 if the element size is 1, because any heap allocators is likely\n    //   to round up a request of less than 8 bytes to at least 8 bytes.\n    // - 4 if elements are moderate-sized (<= 1 KiB).\n    // - 1 otherwise, to avoid wasting too much space for very short Vecs.\n    const MIN_NON_ZERO_CAP: usize = if mem::size_of::<T>() == 1 {\n        8\n    } else if mem::size_of::<T>() <= 1024 {\n        4\n    } else {\n        1\n    };\n\n    /// Like `new`, but parameterized over the choice of allocator for\n    /// the returned `RawVec`.\n    #[rustc_allow_const_fn_unstable(const_fn)]\n    pub const fn new_in(alloc: A) -> Self {\n        // `cap: 0` means \"unallocated\". zero-sized types are ignored.\n        Self { ptr: Unique::dangling(), cap: 0, alloc }\n    }\n\n    /// Like `with_capacity`, but parameterized over the choice of\n    /// allocator for the returned `RawVec`.\n    #[inline]\n    pub fn with_capacity_in(capacity: usize, alloc: A) -> Self {\n        Self::allocate_in(capacity, AllocInit::Uninitialized, alloc)\n    }\n\n    /// Like `with_capacity_zeroed`, but parameterized over the choice\n    /// of allocator for the returned `RawVec`.\n    #[inline]\n    pub fn with_capacity_zeroed_in(capacity: usize, alloc: A) -> Self {\n        Self::allocate_in(capacity, AllocInit::Zeroed, alloc)\n    }\n\n    /// Converts a `Box<[T]>` into a `RawVec<T>`.\n    pub fn from_box(slice: Box<[T], A>) -> Self {\n        unsafe {\n            let (slice, alloc) = Box::into_raw_with_allocator(slice);\n            RawVec::from_raw_parts_in(slice.as_mut_ptr(), slice.len(), alloc)\n        }\n    }\n\n    /// Converts the entire buffer into `Box<[MaybeUninit<T>]>` with the specified `len`.\n    ///\n    /// Note that this will correctly reconstitute any `cap` changes\n    /// that may have been performed. (See description of type for details.)\n    ///\n    /// # Safety\n    ///\n    /// * `len` must be greater than or equal to the most recently requested capacity, and\n    /// * `len` must be less than or equal to `self.capacity()`.\n    ///\n    /// Note, that the requested capacity and `self.capacity()` could differ, as\n    /// an allocator could overallocate and return a greater memory block than requested.\n    pub unsafe fn into_box(self, len: usize) -> Box<[MaybeUninit<T>], A> {\n        // Sanity-check one half of the safety requirement (we cannot check the other half).\n        debug_assert!(\n            len <= self.capacity(),\n            \"`len` must be smaller than or equal to `self.capacity()`\"\n        );\n\n        let me = ManuallyDrop::new(self);\n        unsafe {\n            let slice = slice::from_raw_parts_mut(me.ptr() as *mut MaybeUninit<T>, len);\n            Box::from_raw_in(slice, ptr::read(&me.alloc))\n        }\n    }\n\n    fn allocate_in(capacity: usize, init: AllocInit, alloc: A) -> Self {\n        if mem::size_of::<T>() == 0 {\n            Self::new_in(alloc)\n        } else {\n            // We avoid `unwrap_or_else` here because it bloats the amount of\n            // LLVM IR generated.\n            let layout = match Layout::array::<T>(capacity) {\n                Ok(layout) => layout,\n                Err(_) => capacity_overflow(),\n            };\n            match alloc_guard(layout.size()) {\n                Ok(_) => {}\n                Err(_) => capacity_overflow(),\n            }\n            let result = match init {\n                AllocInit::Uninitialized => alloc.allocate(layout),\n                AllocInit::Zeroed => alloc.allocate_zeroed(layout),\n            };\n            let ptr = match result {\n                Ok(ptr) => ptr,\n                Err(_) => handle_alloc_error(layout),\n            };\n\n            Self {\n                ptr: unsafe { Unique::new_unchecked(ptr.cast().as_ptr()) },\n                cap: Self::capacity_from_bytes(ptr.len()),\n                alloc,\n            }\n        }\n    }\n\n    /// Reconstitutes a `RawVec` from a pointer, capacity, and allocator.\n    ///\n    /// # Safety\n    ///\n    /// The `ptr` must be allocated (via the given allocator `alloc`), and with the given\n    /// `capacity`.\n    /// The `capacity` cannot exceed `isize::MAX` for sized types. (only a concern on 32-bit\n    /// systems). ZST vectors may have a capacity up to `usize::MAX`.\n    /// If the `ptr` and `capacity` come from a `RawVec` created via `alloc`, then this is\n    /// guaranteed.\n    #[inline]\n    pub unsafe fn from_raw_parts_in(ptr: *mut T, capacity: usize, alloc: A) -> Self {\n        Self { ptr: unsafe { Unique::new_unchecked(ptr) }, cap: capacity, alloc }\n    }\n\n    /// Gets a raw pointer to the start of the allocation. Note that this is\n    /// `Unique::dangling()` if `capacity == 0` or `T` is zero-sized. In the former case, you must\n    /// be careful.\n    #[inline]\n    pub fn ptr(&self) -> *mut T {\n        self.ptr.as_ptr()\n    }\n\n    /// Gets the capacity of the allocation.\n    ///\n    /// This will always be `usize::MAX` if `T` is zero-sized.\n    #[inline(always)]\n    pub fn capacity(&self) -> usize {\n        if mem::size_of::<T>() == 0 { usize::MAX } else { self.cap }\n    }\n\n    /// Returns a shared reference to the allocator backing this `RawVec`.\n    pub fn allocator(&self) -> &A {\n        &self.alloc\n    }\n\n    fn current_memory(&self) -> Option<(NonNull<u8>, Layout)> {\n        if mem::size_of::<T>() == 0 || self.cap == 0 {\n            None\n        } else {\n            // We have an allocated chunk of memory, so we can bypass runtime\n            // checks to get our current layout.\n            unsafe {\n                let align = mem::align_of::<T>();\n                let size = mem::size_of::<T>() * self.cap;\n                let layout = Layout::from_size_align_unchecked(size, align);\n                Some((self.ptr.cast().into(), layout))\n            }\n        }\n    }\n\n    /// Ensures that the buffer contains at least enough space to hold `len +\n    /// additional` elements. If it doesn't already have enough capacity, will\n    /// reallocate enough space plus comfortable slack space to get amortized\n    /// *O*(1) behavior. Will limit this behavior if it would needlessly cause\n    /// itself to panic.\n    ///\n    /// If `len` exceeds `self.capacity()`, this may fail to actually allocate\n    /// the requested space. This is not really unsafe, but the unsafe\n    /// code *you* write that relies on the behavior of this function may break.\n    ///\n    /// This is ideal for implementing a bulk-push operation like `extend`.\n    ///\n    /// # Panics\n    ///\n    /// Panics if the new capacity exceeds `isize::MAX` bytes.\n    ///\n    /// # Aborts\n    ///\n    /// Aborts on OOM.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// # #![feature(raw_vec_internals)]\n    /// # extern crate alloc;\n    /// # use std::ptr;\n    /// # use alloc::raw_vec::RawVec;\n    /// struct MyVec<T> {\n    ///     buf: RawVec<T>,\n    ///     len: usize,\n    /// }\n    ///\n    /// impl<T: Clone> MyVec<T> {\n    ///     pub fn push_all(&mut self, elems: &[T]) {\n    ///         self.buf.reserve(self.len, elems.len());\n    ///         // reserve would have aborted or panicked if the len exceeded\n    ///         // `isize::MAX` so this is safe to do unchecked now.\n    ///         for x in elems {\n    ///             unsafe {\n    ///                 ptr::write(self.buf.ptr().add(self.len), x.clone());\n    ///             }\n    ///             self.len += 1;\n    ///         }\n    ///     }\n    /// }\n    /// # fn main() {\n    /// #   let mut vector = MyVec { buf: RawVec::new(), len: 0 };\n    /// #   vector.push_all(&[1, 3, 5, 7, 9]);\n    /// # }\n    /// ```\n    #[inline]\n    pub fn reserve(&mut self, len: usize, additional: usize) {\n        // Callers expect this function to be very cheap when there is already sufficient capacity.\n        // Therefore, we move all the resizing and error-handling logic from grow_amortized and\n        // handle_reserve behind a call, while making sure that the this function is likely to be\n        // inlined as just a comparison and a call if the comparison fails.\n        #[cold]\n        fn do_reserve_and_handle<T, A: Allocator>(\n            slf: &mut RawVec<T, A>,\n            len: usize,\n            additional: usize,\n        ) {\n            handle_reserve(slf.grow_amortized(len, additional));\n        }\n\n        if self.needs_to_grow(len, additional) {\n            do_reserve_and_handle(self, len, additional);\n        }\n    }\n\n    /// The same as `reserve`, but returns on errors instead of panicking or aborting.\n    pub fn try_reserve(&mut self, len: usize, additional: usize) -> Result<(), TryReserveError> {\n        if self.needs_to_grow(len, additional) {\n            self.grow_amortized(len, additional)\n        } else {\n            Ok(())\n        }\n    }\n\n    /// Ensures that the buffer contains at least enough space to hold `len +\n    /// additional` elements. If it doesn't already, will reallocate the\n    /// minimum possible amount of memory necessary. Generally this will be\n    /// exactly the amount of memory necessary, but in principle the allocator\n    /// is free to give back more than we asked for.\n    ///\n    /// If `len` exceeds `self.capacity()`, this may fail to actually allocate\n    /// the requested space. This is not really unsafe, but the unsafe code\n    /// *you* write that relies on the behavior of this function may break.\n    ///\n    /// # Panics\n    ///\n    /// Panics if the new capacity exceeds `isize::MAX` bytes.\n    ///\n    /// # Aborts\n    ///\n    /// Aborts on OOM.\n    pub fn reserve_exact(&mut self, len: usize, additional: usize) {\n        handle_reserve(self.try_reserve_exact(len, additional));\n    }\n\n    /// The same as `reserve_exact`, but returns on errors instead of panicking or aborting.\n    pub fn try_reserve_exact(\n        &mut self,\n        len: usize,\n        additional: usize,\n    ) -> Result<(), TryReserveError> {\n        if self.needs_to_grow(len, additional) { self.grow_exact(len, additional) } else { Ok(()) }\n    }\n\n    /// Shrinks the allocation down to the specified amount. If the given amount\n    /// is 0, actually completely deallocates.\n    ///\n    /// # Panics\n    ///\n    /// Panics if the given amount is *larger* than the current capacity.\n    ///\n    /// # Aborts\n    ///\n    /// Aborts on OOM.\n    pub fn shrink_to_fit(&mut self, amount: usize) {\n        handle_reserve(self.shrink(amount));\n    }\n}\n\nimpl<T, A: Allocator> RawVec<T, A> {\n    /// Returns if the buffer needs to grow to fulfill the needed extra capacity.\n    /// Mainly used to make inlining reserve-calls possible without inlining `grow`.\n    fn needs_to_grow(&self, len: usize, additional: usize) -> bool {\n        additional > self.capacity().wrapping_sub(len)\n    }\n\n    fn capacity_from_bytes(excess: usize) -> usize {\n        debug_assert_ne!(mem::size_of::<T>(), 0);\n        excess / mem::size_of::<T>()\n    }\n\n    fn set_ptr(&mut self, ptr: NonNull<[u8]>) {\n        self.ptr = unsafe { Unique::new_unchecked(ptr.cast().as_ptr()) };\n        self.cap = Self::capacity_from_bytes(ptr.len());\n    }\n\n    // This method is usually instantiated many times. So we want it to be as\n    // small as possible, to improve compile times. But we also want as much of\n    // its contents to be statically computable as possible, to make the\n    // generated code run faster. Therefore, this method is carefully written\n    // so that all of the code that depends on `T` is within it, while as much\n    // of the code that doesn't depend on `T` as possible is in functions that\n    // are non-generic over `T`.\n    fn grow_amortized(&mut self, len: usize, additional: usize) -> Result<(), TryReserveError> {\n        // This is ensured by the calling contexts.\n        debug_assert!(additional > 0);\n\n        if mem::size_of::<T>() == 0 {\n            // Since we return a capacity of `usize::MAX` when `elem_size` is\n            // 0, getting to here necessarily means the `RawVec` is overfull.\n            return Err(CapacityOverflow);\n        }\n\n        // Nothing we can really do about these checks, sadly.\n        let required_cap = len.checked_add(additional).ok_or(CapacityOverflow)?;\n\n        // This guarantees exponential growth. The doubling cannot overflow\n        // because `cap <= isize::MAX` and the type of `cap` is `usize`.\n        let cap = cmp::max(self.cap * 2, required_cap);\n        let cap = cmp::max(Self::MIN_NON_ZERO_CAP, cap);\n\n        let new_layout = Layout::array::<T>(cap);\n\n        // `finish_grow` is non-generic over `T`.\n        let ptr = finish_grow(new_layout, self.current_memory(), &mut self.alloc)?;\n        self.set_ptr(ptr);\n        Ok(())\n    }\n\n    // The constraints on this method are much the same as those on\n    // `grow_amortized`, but this method is usually instantiated less often so\n    // it's less critical.\n    fn grow_exact(&mut self, len: usize, additional: usize) -> Result<(), TryReserveError> {\n        if mem::size_of::<T>() == 0 {\n            // Since we return a capacity of `usize::MAX` when the type size is\n            // 0, getting to here necessarily means the `RawVec` is overfull.\n            return Err(CapacityOverflow);\n        }\n\n        let cap = len.checked_add(additional).ok_or(CapacityOverflow)?;\n        let new_layout = Layout::array::<T>(cap);\n\n        // `finish_grow` is non-generic over `T`.\n        let ptr = finish_grow(new_layout, self.current_memory(), &mut self.alloc)?;\n        self.set_ptr(ptr);\n        Ok(())\n    }\n\n    fn shrink(&mut self, amount: usize) -> Result<(), TryReserveError> {\n        assert!(amount <= self.capacity(), \"Tried to shrink to a larger capacity\");\n\n        let (ptr, layout) = if let Some(mem) = self.current_memory() { mem } else { return Ok(()) };\n        let new_size = amount * mem::size_of::<T>();\n\n        let ptr = unsafe {\n            let new_layout = Layout::from_size_align_unchecked(new_size, layout.align());\n            self.alloc.shrink(ptr, layout, new_layout).map_err(|_| TryReserveError::AllocError {\n                layout: new_layout,\n                non_exhaustive: (),\n            })?\n        };\n        self.set_ptr(ptr);\n        Ok(())\n    }\n}\n\n// This function is outside `RawVec` to minimize compile times. See the comment\n// above `RawVec::grow_amortized` for details. (The `A` parameter isn't\n// significant, because the number of different `A` types seen in practice is\n// much smaller than the number of `T` types.)\n#[inline(never)]\nfn finish_grow<A>(\n    new_layout: Result<Layout, LayoutError>,\n    current_memory: Option<(NonNull<u8>, Layout)>,\n    alloc: &mut A,\n) -> Result<NonNull<[u8]>, TryReserveError>\nwhere\n    A: Allocator,\n{\n    // Check for the error here to minimize the size of `RawVec::grow_*`.\n    let new_layout = new_layout.map_err(|_| CapacityOverflow)?;\n\n    alloc_guard(new_layout.size())?;\n\n    let memory = if let Some((ptr, old_layout)) = current_memory {\n        debug_assert_eq!(old_layout.align(), new_layout.align());\n        unsafe {\n            // The allocator checks for alignment equality\n            intrinsics::assume(old_layout.align() == new_layout.align());\n            alloc.grow(ptr, old_layout, new_layout)\n        }\n    } else {\n        alloc.allocate(new_layout)\n    };\n\n    memory.map_err(|_| AllocError { layout: new_layout, non_exhaustive: () })\n}\n\nunsafe impl<#[may_dangle] T, A: Allocator> Drop for RawVec<T, A> {\n    /// Frees the memory owned by the `RawVec` *without* trying to drop its contents.\n    fn drop(&mut self) {\n        if let Some((ptr, layout)) = self.current_memory() {\n            unsafe { self.alloc.deallocate(ptr, layout) }\n        }\n    }\n}\n\n// Central function for reserve error handling.\n#[inline]\nfn handle_reserve(result: Result<(), TryReserveError>) {\n    match result {\n        Err(CapacityOverflow) => capacity_overflow(),\n        Err(AllocError { layout, .. }) => handle_alloc_error(layout),\n        Ok(()) => { /* yay */ }\n    }\n}\n\n// We need to guarantee the following:\n// * We don't ever allocate `> isize::MAX` byte-size objects.\n// * We don't overflow `usize::MAX` and actually allocate too little.\n//\n// On 64-bit we just need to check for overflow since trying to allocate\n// `> isize::MAX` bytes will surely fail. On 32-bit and 16-bit we need to add\n// an extra guard for this in case we're running on a platform which can use\n// all 4GB in user-space, e.g., PAE or x32.\n\n#[inline]\nfn alloc_guard(alloc_size: usize) -> Result<(), TryReserveError> {\n    if usize::BITS < 64 && alloc_size > isize::MAX as usize {\n        Err(CapacityOverflow)\n    } else {\n        Ok(())\n    }\n}\n\n// One central function responsible for reporting capacity overflows. This'll\n// ensure that the code generation related to these panics is minimal as there's\n// only one location which panics rather than a bunch throughout the module.\nfn capacity_overflow() -> ! {\n    panic!(\"capacity overflow\");\n}\n//! Unicode string slices.\n//!\n//! *[See also the `str` primitive type](str).*\n//!\n//! The `&str` type is one of the two main string types, the other being `String`.\n//! Unlike its `String` counterpart, its contents are borrowed.\n//!\n//! # Basic Usage\n//!\n//! A basic string declaration of `&str` type:\n//!\n//! ```\n//! let hello_world = \"Hello, World!\";\n//! ```\n//!\n//! Here we have declared a string literal, also known as a string slice.\n//! String literals have a static lifetime, which means the string `hello_world`\n//! is guaranteed to be valid for the duration of the entire program.\n//! We can explicitly specify `hello_world`'s lifetime as well:\n//!\n//! ```\n//! let hello_world: &'static str = \"Hello, world!\";\n//! ```\n\n#![stable(feature = \"rust1\", since = \"1.0.0\")]\n// Many of the usings in this module are only used in the test configuration.\n// It's cleaner to just turn off the unused_imports warning than to fix them.\n#![allow(unused_imports)]\n\nuse core::borrow::{Borrow, BorrowMut};\nuse core::iter::FusedIterator;\nuse core::mem;\nuse core::ptr;\nuse core::str::pattern::{DoubleEndedSearcher, Pattern, ReverseSearcher, Searcher};\nuse core::unicode::conversions;\n\nuse crate::borrow::ToOwned;\nuse crate::boxed::Box;\nuse crate::slice::{Concat, Join, SliceIndex};\nuse crate::string::String;\nuse crate::vec::Vec;\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::str::pattern;\n#[stable(feature = \"encode_utf16\", since = \"1.8.0\")]\npub use core::str::EncodeUtf16;\n#[stable(feature = \"split_ascii_whitespace\", since = \"1.34.0\")]\npub use core::str::SplitAsciiWhitespace;\n#[stable(feature = \"split_inclusive\", since = \"1.53.0\")]\npub use core::str::SplitInclusive;\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::str::SplitWhitespace;\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::str::{from_utf8, from_utf8_mut, Bytes, CharIndices, Chars};\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::str::{from_utf8_unchecked, from_utf8_unchecked_mut, ParseBoolError};\n#[stable(feature = \"str_escape\", since = \"1.34.0\")]\npub use core::str::{EscapeDebug, EscapeDefault, EscapeUnicode};\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::str::{FromStr, Utf8Error};\n#[allow(deprecated)]\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::str::{Lines, LinesAny};\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::str::{MatchIndices, RMatchIndices};\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::str::{Matches, RMatches};\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::str::{RSplit, Split};\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::str::{RSplitN, SplitN};\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::str::{RSplitTerminator, SplitTerminator};\n\n/// Note: `str` in `Concat<str>` is not meaningful here.\n/// This type parameter of the trait only exists to enable another impl.\n#[unstable(feature = \"slice_concat_ext\", issue = \"27747\")]\nimpl<S: Borrow<str>> Concat<str> for [S] {\n    type Output = String;\n\n    fn concat(slice: &Self) -> String {\n        Join::join(slice, \"\")\n    }\n}\n\n#[unstable(feature = \"slice_concat_ext\", issue = \"27747\")]\nimpl<S: Borrow<str>> Join<&str> for [S] {\n    type Output = String;\n\n    fn join(slice: &Self, sep: &str) -> String {\n        unsafe { String::from_utf8_unchecked(join_generic_copy(slice, sep.as_bytes())) }\n    }\n}\n\nmacro_rules! specialize_for_lengths {\n    ($separator:expr, $target:expr, $iter:expr; $($num:expr),*) => {{\n        let mut target = $target;\n        let iter = $iter;\n        let sep_bytes = $separator;\n        match $separator.len() {\n            $(\n                // loops with hardcoded sizes run much faster\n                // specialize the cases with small separator lengths\n                $num => {\n                    for s in iter {\n                        copy_slice_and_advance!(target, sep_bytes);\n                        let content_bytes = s.borrow().as_ref();\n                        copy_slice_and_advance!(target, content_bytes);\n                    }\n                },\n            )*\n            _ => {\n                // arbitrary non-zero size fallback\n                for s in iter {\n                    copy_slice_and_advance!(target, sep_bytes);\n                    let content_bytes = s.borrow().as_ref();\n                    copy_slice_and_advance!(target, content_bytes);\n                }\n            }\n        }\n        target\n    }}\n}\n\nmacro_rules! copy_slice_and_advance {\n    ($target:expr, $bytes:expr) => {\n        let len = $bytes.len();\n        let (head, tail) = { $target }.split_at_mut(len);\n        head.copy_from_slice($bytes);\n        $target = tail;\n    };\n}\n\n// Optimized join implementation that works for both Vec<T> (T: Copy) and String's inner vec\n// Currently (2018-05-13) there is a bug with type inference and specialization (see issue #36262)\n// For this reason SliceConcat<T> is not specialized for T: Copy and SliceConcat<str> is the\n// only user of this function. It is left in place for the time when that is fixed.\n//\n// the bounds for String-join are S: Borrow<str> and for Vec-join Borrow<[T]>\n// [T] and str both impl AsRef<[T]> for some T\n// => s.borrow().as_ref() and we always have slices\nfn join_generic_copy<B, T, S>(slice: &[S], sep: &[T]) -> Vec<T>\nwhere\n    T: Copy,\n    B: AsRef<[T]> + ?Sized,\n    S: Borrow<B>,\n{\n    let sep_len = sep.len();\n    let mut iter = slice.iter();\n\n    // the first slice is the only one without a separator preceding it\n    let first = match iter.next() {\n        Some(first) => first,\n        None => return vec![],\n    };\n\n    // compute the exact total length of the joined Vec\n    // if the `len` calculation overflows, we'll panic\n    // we would have run out of memory anyway and the rest of the function requires\n    // the entire Vec pre-allocated for safety\n    let reserved_len = sep_len\n        .checked_mul(iter.len())\n        .and_then(|n| {\n            slice.iter().map(|s| s.borrow().as_ref().len()).try_fold(n, usize::checked_add)\n        })\n        .expect(\"attempt to join into collection with len > usize::MAX\");\n\n    // prepare an uninitialized buffer\n    let mut result = Vec::with_capacity(reserved_len);\n    debug_assert!(result.capacity() >= reserved_len);\n\n    result.extend_from_slice(first.borrow().as_ref());\n\n    unsafe {\n        let pos = result.len();\n        let target = result.get_unchecked_mut(pos..reserved_len);\n\n        // copy separator and slices over without bounds checks\n        // generate loops with hardcoded offsets for small separators\n        // massive improvements possible (~ x2)\n        let remain = specialize_for_lengths!(sep, target, iter; 0, 1, 2, 3, 4);\n\n        // A weird borrow implementation may return different\n        // slices for the length calculation and the actual copy.\n        // Make sure we don't expose uninitialized bytes to the caller.\n        let result_len = reserved_len - remain.len();\n        result.set_len(result_len);\n    }\n    result\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl Borrow<str> for String {\n    #[inline]\n    fn borrow(&self) -> &str {\n        &self[..]\n    }\n}\n\n#[stable(feature = \"string_borrow_mut\", since = \"1.36.0\")]\nimpl BorrowMut<str> for String {\n    #[inline]\n    fn borrow_mut(&mut self) -> &mut str {\n        &mut self[..]\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl ToOwned for str {\n    type Owned = String;\n    #[inline]\n    fn to_owned(&self) -> String {\n        unsafe { String::from_utf8_unchecked(self.as_bytes().to_owned()) }\n    }\n\n    fn clone_into(&self, target: &mut String) {\n        let mut b = mem::take(target).into_bytes();\n        self.as_bytes().clone_into(&mut b);\n        *target = unsafe { String::from_utf8_unchecked(b) }\n    }\n}\n\n/// Methods for string slices.\n#[lang = \"str_alloc\"]\n#[cfg(not(test))]\nimpl str {\n    /// Converts a `Box<str>` into a `Box<[u8]>` without copying or allocating.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let s = \"this is a string\";\n    /// let boxed_str = s.to_owned().into_boxed_str();\n    /// let boxed_bytes = boxed_str.into_boxed_bytes();\n    /// assert_eq!(*boxed_bytes, *s.as_bytes());\n    /// ```\n    #[stable(feature = \"str_box_extras\", since = \"1.20.0\")]\n    #[inline]\n    pub fn into_boxed_bytes(self: Box<str>) -> Box<[u8]> {\n        self.into()\n    }\n\n    /// Replaces all matches of a pattern with another string.\n    ///\n    /// `replace` creates a new [`String`], and copies the data from this string slice into it.\n    /// While doing so, it attempts to find matches of a pattern. If it finds any, it\n    /// replaces them with the replacement string slice.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let s = \"this is old\";\n    ///\n    /// assert_eq!(\"this is new\", s.replace(\"old\", \"new\"));\n    /// ```\n    ///\n    /// When the pattern doesn't match:\n    ///\n    /// ```\n    /// let s = \"this is old\";\n    /// assert_eq!(s, s.replace(\"cookie monster\", \"little lamb\"));\n    /// ```\n    #[must_use = \"this returns the replaced string as a new allocation, \\\n                  without modifying the original\"]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    #[inline]\n    pub fn replace<'a, P: Pattern<'a>>(&'a self, from: P, to: &str) -> String {\n        let mut result = String::new();\n        let mut last_end = 0;\n        for (start, part) in self.match_indices(from) {\n            result.push_str(unsafe { self.get_unchecked(last_end..start) });\n            result.push_str(to);\n            last_end = start + part.len();\n        }\n        result.push_str(unsafe { self.get_unchecked(last_end..self.len()) });\n        result\n    }\n\n    /// Replaces first N matches of a pattern with another string.\n    ///\n    /// `replacen` creates a new [`String`], and copies the data from this string slice into it.\n    /// While doing so, it attempts to find matches of a pattern. If it finds any, it\n    /// replaces them with the replacement string slice at most `count` times.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let s = \"foo foo 123 foo\";\n    /// assert_eq!(\"new new 123 foo\", s.replacen(\"foo\", \"new\", 2));\n    /// assert_eq!(\"faa fao 123 foo\", s.replacen('o', \"a\", 3));\n    /// assert_eq!(\"foo foo new23 foo\", s.replacen(char::is_numeric, \"new\", 1));\n    /// ```\n    ///\n    /// When the pattern doesn't match:\n    ///\n    /// ```\n    /// let s = \"this is old\";\n    /// assert_eq!(s, s.replacen(\"cookie monster\", \"little lamb\", 10));\n    /// ```\n    #[must_use = \"this returns the replaced string as a new allocation, \\\n                  without modifying the original\"]\n    #[stable(feature = \"str_replacen\", since = \"1.16.0\")]\n    pub fn replacen<'a, P: Pattern<'a>>(&'a self, pat: P, to: &str, count: usize) -> String {\n        // Hope to reduce the times of re-allocation\n        let mut result = String::with_capacity(32);\n        let mut last_end = 0;\n        for (start, part) in self.match_indices(pat).take(count) {\n            result.push_str(unsafe { self.get_unchecked(last_end..start) });\n            result.push_str(to);\n            last_end = start + part.len();\n        }\n        result.push_str(unsafe { self.get_unchecked(last_end..self.len()) });\n        result\n    }\n\n    /// Returns the lowercase equivalent of this string slice, as a new [`String`].\n    ///\n    /// 'Lowercase' is defined according to the terms of the Unicode Derived Core Property\n    /// `Lowercase`.\n    ///\n    /// Since some characters can expand into multiple characters when changing\n    /// the case, this function returns a [`String`] instead of modifying the\n    /// parameter in-place.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let s = \"HELLO\";\n    ///\n    /// assert_eq!(\"hello\", s.to_lowercase());\n    /// ```\n    ///\n    /// A tricky example, with sigma:\n    ///\n    /// ```\n    /// let sigma = \"Σ\";\n    ///\n    /// assert_eq!(\"σ\", sigma.to_lowercase());\n    ///\n    /// // but at the end of a word, it's ς, not σ:\n    /// let odysseus = \"ὈΔΥΣΣΕΎΣ\";\n    ///\n    /// assert_eq!(\"ὀδυσσεύς\", odysseus.to_lowercase());\n    /// ```\n    ///\n    /// Languages without case are not changed:\n    ///\n    /// ```\n    /// let new_year = \"农历新年\";\n    ///\n    /// assert_eq!(new_year, new_year.to_lowercase());\n    /// ```\n    #[stable(feature = \"unicode_case_mapping\", since = \"1.2.0\")]\n    pub fn to_lowercase(&self) -> String {\n        let mut s = String::with_capacity(self.len());\n        for (i, c) in self[..].char_indices() {\n            if c == 'Σ' {\n                // Σ maps to σ, except at the end of a word where it maps to ς.\n                // This is the only conditional (contextual) but language-independent mapping\n                // in `SpecialCasing.txt`,\n                // so hard-code it rather than have a generic \"condition\" mechanism.\n                // See https://github.com/rust-lang/rust/issues/26035\n                map_uppercase_sigma(self, i, &mut s)\n            } else {\n                match conversions::to_lower(c) {\n                    [a, '\\0', _] => s.push(a),\n                    [a, b, '\\0'] => {\n                        s.push(a);\n                        s.push(b);\n                    }\n                    [a, b, c] => {\n                        s.push(a);\n                        s.push(b);\n                        s.push(c);\n                    }\n                }\n            }\n        }\n        return s;\n\n        fn map_uppercase_sigma(from: &str, i: usize, to: &mut String) {\n            // See http://www.unicode.org/versions/Unicode7.0.0/ch03.pdf#G33992\n            // for the definition of `Final_Sigma`.\n            debug_assert!('Σ'.len_utf8() == 2);\n            let is_word_final = case_ignoreable_then_cased(from[..i].chars().rev())\n                && !case_ignoreable_then_cased(from[i + 2..].chars());\n            to.push_str(if is_word_final { \"ς\" } else { \"σ\" });\n        }\n\n        fn case_ignoreable_then_cased<I: Iterator<Item = char>>(iter: I) -> bool {\n            use core::unicode::{Case_Ignorable, Cased};\n            match iter.skip_while(|&c| Case_Ignorable(c)).next() {\n                Some(c) => Cased(c),\n                None => false,\n            }\n        }\n    }\n\n    /// Returns the uppercase equivalent of this string slice, as a new [`String`].\n    ///\n    /// 'Uppercase' is defined according to the terms of the Unicode Derived Core Property\n    /// `Uppercase`.\n    ///\n    /// Since some characters can expand into multiple characters when changing\n    /// the case, this function returns a [`String`] instead of modifying the\n    /// parameter in-place.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let s = \"hello\";\n    ///\n    /// assert_eq!(\"HELLO\", s.to_uppercase());\n    /// ```\n    ///\n    /// Scripts without case are not changed:\n    ///\n    /// ```\n    /// let new_year = \"农历新年\";\n    ///\n    /// assert_eq!(new_year, new_year.to_uppercase());\n    /// ```\n    ///\n    /// One character can become multiple:\n    /// ```\n    /// let s = \"tschüß\";\n    ///\n    /// assert_eq!(\"TSCHÜSS\", s.to_uppercase());\n    /// ```\n    #[stable(feature = \"unicode_case_mapping\", since = \"1.2.0\")]\n    pub fn to_uppercase(&self) -> String {\n        let mut s = String::with_capacity(self.len());\n        for c in self[..].chars() {\n            match conversions::to_upper(c) {\n                [a, '\\0', _] => s.push(a),\n                [a, b, '\\0'] => {\n                    s.push(a);\n                    s.push(b);\n                }\n                [a, b, c] => {\n                    s.push(a);\n                    s.push(b);\n                    s.push(c);\n                }\n            }\n        }\n        s\n    }\n\n    /// Converts a [`Box<str>`] into a [`String`] without copying or allocating.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let string = String::from(\"birthday gift\");\n    /// let boxed_str = string.clone().into_boxed_str();\n    ///\n    /// assert_eq!(boxed_str.into_string(), string);\n    /// ```\n    #[stable(feature = \"box_str\", since = \"1.4.0\")]\n    #[inline]\n    pub fn into_string(self: Box<str>) -> String {\n        let slice = Box::<[u8]>::from(self);\n        unsafe { String::from_utf8_unchecked(slice.into_vec()) }\n    }\n\n    /// Creates a new [`String`] by repeating a string `n` times.\n    ///\n    /// # Panics\n    ///\n    /// This function will panic if the capacity would overflow.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// assert_eq!(\"abc\".repeat(4), String::from(\"abcabcabcabc\"));\n    /// ```\n    ///\n    /// A panic upon overflow:\n    ///\n    /// ```should_panic\n    /// // this will panic at runtime\n    /// \"0123456789abcdef\".repeat(usize::MAX);\n    /// ```\n    #[stable(feature = \"repeat_str\", since = \"1.16.0\")]\n    pub fn repeat(&self, n: usize) -> String {\n        unsafe { String::from_utf8_unchecked(self.as_bytes().repeat(n)) }\n    }\n\n    /// Returns a copy of this string where each character is mapped to its\n    /// ASCII upper case equivalent.\n    ///\n    /// ASCII letters 'a' to 'z' are mapped to 'A' to 'Z',\n    /// but non-ASCII letters are unchanged.\n    ///\n    /// To uppercase the value in-place, use [`make_ascii_uppercase`].\n    ///\n    /// To uppercase ASCII characters in addition to non-ASCII characters, use\n    /// [`to_uppercase`].\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let s = \"Grüße, Jürgen ❤\";\n    ///\n    /// assert_eq!(\"GRüßE, JüRGEN ❤\", s.to_ascii_uppercase());\n    /// ```\n    ///\n    /// [`make_ascii_uppercase`]: str::make_ascii_uppercase\n    /// [`to_uppercase`]: #method.to_uppercase\n    #[stable(feature = \"ascii_methods_on_intrinsics\", since = \"1.23.0\")]\n    #[inline]\n    pub fn to_ascii_uppercase(&self) -> String {\n        let mut bytes = self.as_bytes().to_vec();\n        bytes.make_ascii_uppercase();\n        // make_ascii_uppercase() preserves the UTF-8 invariant.\n        unsafe { String::from_utf8_unchecked(bytes) }\n    }\n\n    /// Returns a copy of this string where each character is mapped to its\n    /// ASCII lower case equivalent.\n    ///\n    /// ASCII letters 'A' to 'Z' are mapped to 'a' to 'z',\n    /// but non-ASCII letters are unchanged.\n    ///\n    /// To lowercase the value in-place, use [`make_ascii_lowercase`].\n    ///\n    /// To lowercase ASCII characters in addition to non-ASCII characters, use\n    /// [`to_lowercase`].\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let s = \"Grüße, Jürgen ❤\";\n    ///\n    /// assert_eq!(\"grüße, jürgen ❤\", s.to_ascii_lowercase());\n    /// ```\n    ///\n    /// [`make_ascii_lowercase`]: str::make_ascii_lowercase\n    /// [`to_lowercase`]: #method.to_lowercase\n    #[stable(feature = \"ascii_methods_on_intrinsics\", since = \"1.23.0\")]\n    #[inline]\n    pub fn to_ascii_lowercase(&self) -> String {\n        let mut bytes = self.as_bytes().to_vec();\n        bytes.make_ascii_lowercase();\n        // make_ascii_lowercase() preserves the UTF-8 invariant.\n        unsafe { String::from_utf8_unchecked(bytes) }\n    }\n}\n\n/// Converts a boxed slice of bytes to a boxed string slice without checking\n/// that the string contains valid UTF-8.\n///\n/// # Examples\n///\n/// Basic usage:\n///\n/// ```\n/// let smile_utf8 = Box::new([226, 152, 186]);\n/// let smile = unsafe { std::str::from_boxed_utf8_unchecked(smile_utf8) };\n///\n/// assert_eq!(\"☺\", &*smile);\n/// ```\n#[stable(feature = \"str_box_extras\", since = \"1.20.0\")]\n#[inline]\npub unsafe fn from_boxed_utf8_unchecked(v: Box<[u8]>) -> Box<str> {\n    unsafe { Box::from_raw(Box::into_raw(v) as *mut str) }\n}\nuse super::*;\n\nuse std::boxed::Box;\nuse std::clone::Clone;\nuse std::convert::{From, TryInto};\nuse std::mem::drop;\nuse std::ops::Drop;\nuse std::option::Option::{self, None, Some};\nuse std::sync::atomic::{\n    self,\n    Ordering::{Acquire, SeqCst},\n};\nuse std::sync::mpsc::channel;\nuse std::sync::Mutex;\nuse std::thread;\n\nuse crate::vec::Vec;\n\nstruct Canary(*mut atomic::AtomicUsize);\n\nimpl Drop for Canary {\n    fn drop(&mut self) {\n        unsafe {\n            match *self {\n                Canary(c) => {\n                    (*c).fetch_add(1, SeqCst);\n                }\n            }\n        }\n    }\n}\n\n#[test]\n#[cfg_attr(target_os = \"emscripten\", ignore)]\nfn manually_share_arc() {\n    let v = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n    let arc_v = Arc::new(v);\n\n    let (tx, rx) = channel();\n\n    let _t = thread::spawn(move || {\n        let arc_v: Arc<Vec<i32>> = rx.recv().unwrap();\n        assert_eq!((*arc_v)[3], 4);\n    });\n\n    tx.send(arc_v.clone()).unwrap();\n\n    assert_eq!((*arc_v)[2], 3);\n    assert_eq!((*arc_v)[4], 5);\n}\n\n#[test]\nfn test_arc_get_mut() {\n    let mut x = Arc::new(3);\n    *Arc::get_mut(&mut x).unwrap() = 4;\n    assert_eq!(*x, 4);\n    let y = x.clone();\n    assert!(Arc::get_mut(&mut x).is_none());\n    drop(y);\n    assert!(Arc::get_mut(&mut x).is_some());\n    let _w = Arc::downgrade(&x);\n    assert!(Arc::get_mut(&mut x).is_none());\n}\n\n#[test]\nfn weak_counts() {\n    assert_eq!(Weak::weak_count(&Weak::<u64>::new()), 0);\n    assert_eq!(Weak::strong_count(&Weak::<u64>::new()), 0);\n\n    let a = Arc::new(0);\n    let w = Arc::downgrade(&a);\n    assert_eq!(Weak::strong_count(&w), 1);\n    assert_eq!(Weak::weak_count(&w), 1);\n    let w2 = w.clone();\n    assert_eq!(Weak::strong_count(&w), 1);\n    assert_eq!(Weak::weak_count(&w), 2);\n    assert_eq!(Weak::strong_count(&w2), 1);\n    assert_eq!(Weak::weak_count(&w2), 2);\n    drop(w);\n    assert_eq!(Weak::strong_count(&w2), 1);\n    assert_eq!(Weak::weak_count(&w2), 1);\n    let a2 = a.clone();\n    assert_eq!(Weak::strong_count(&w2), 2);\n    assert_eq!(Weak::weak_count(&w2), 1);\n    drop(a2);\n    drop(a);\n    assert_eq!(Weak::strong_count(&w2), 0);\n    assert_eq!(Weak::weak_count(&w2), 0);\n    drop(w2);\n}\n\n#[test]\nfn try_unwrap() {\n    let x = Arc::new(3);\n    assert_eq!(Arc::try_unwrap(x), Ok(3));\n    let x = Arc::new(4);\n    let _y = x.clone();\n    assert_eq!(Arc::try_unwrap(x), Err(Arc::new(4)));\n    let x = Arc::new(5);\n    let _w = Arc::downgrade(&x);\n    assert_eq!(Arc::try_unwrap(x), Ok(5));\n}\n\n#[test]\nfn into_from_raw() {\n    let x = Arc::new(box \"hello\");\n    let y = x.clone();\n\n    let x_ptr = Arc::into_raw(x);\n    drop(y);\n    unsafe {\n        assert_eq!(**x_ptr, \"hello\");\n\n        let x = Arc::from_raw(x_ptr);\n        assert_eq!(**x, \"hello\");\n\n        assert_eq!(Arc::try_unwrap(x).map(|x| *x), Ok(\"hello\"));\n    }\n}\n\n#[test]\nfn test_into_from_raw_unsized() {\n    use std::fmt::Display;\n    use std::string::ToString;\n\n    let arc: Arc<str> = Arc::from(\"foo\");\n\n    let ptr = Arc::into_raw(arc.clone());\n    let arc2 = unsafe { Arc::from_raw(ptr) };\n\n    assert_eq!(unsafe { &*ptr }, \"foo\");\n    assert_eq!(arc, arc2);\n\n    let arc: Arc<dyn Display> = Arc::new(123);\n\n    let ptr = Arc::into_raw(arc.clone());\n    let arc2 = unsafe { Arc::from_raw(ptr) };\n\n    assert_eq!(unsafe { &*ptr }.to_string(), \"123\");\n    assert_eq!(arc2.to_string(), \"123\");\n}\n\n#[test]\nfn into_from_weak_raw() {\n    let x = Arc::new(box \"hello\");\n    let y = Arc::downgrade(&x);\n\n    let y_ptr = Weak::into_raw(y);\n    unsafe {\n        assert_eq!(**y_ptr, \"hello\");\n\n        let y = Weak::from_raw(y_ptr);\n        let y_up = Weak::upgrade(&y).unwrap();\n        assert_eq!(**y_up, \"hello\");\n        drop(y_up);\n\n        assert_eq!(Arc::try_unwrap(x).map(|x| *x), Ok(\"hello\"));\n    }\n}\n\n#[test]\nfn test_into_from_weak_raw_unsized() {\n    use std::fmt::Display;\n    use std::string::ToString;\n\n    let arc: Arc<str> = Arc::from(\"foo\");\n    let weak: Weak<str> = Arc::downgrade(&arc);\n\n    let ptr = Weak::into_raw(weak.clone());\n    let weak2 = unsafe { Weak::from_raw(ptr) };\n\n    assert_eq!(unsafe { &*ptr }, \"foo\");\n    assert!(weak.ptr_eq(&weak2));\n\n    let arc: Arc<dyn Display> = Arc::new(123);\n    let weak: Weak<dyn Display> = Arc::downgrade(&arc);\n\n    let ptr = Weak::into_raw(weak.clone());\n    let weak2 = unsafe { Weak::from_raw(ptr) };\n\n    assert_eq!(unsafe { &*ptr }.to_string(), \"123\");\n    assert!(weak.ptr_eq(&weak2));\n}\n\n#[test]\nfn test_cowarc_clone_make_mut() {\n    let mut cow0 = Arc::new(75);\n    let mut cow1 = cow0.clone();\n    let mut cow2 = cow1.clone();\n\n    assert!(75 == *Arc::make_mut(&mut cow0));\n    assert!(75 == *Arc::make_mut(&mut cow1));\n    assert!(75 == *Arc::make_mut(&mut cow2));\n\n    *Arc::make_mut(&mut cow0) += 1;\n    *Arc::make_mut(&mut cow1) += 2;\n    *Arc::make_mut(&mut cow2) += 3;\n\n    assert!(76 == *cow0);\n    assert!(77 == *cow1);\n    assert!(78 == *cow2);\n\n    // none should point to the same backing memory\n    assert!(*cow0 != *cow1);\n    assert!(*cow0 != *cow2);\n    assert!(*cow1 != *cow2);\n}\n\n#[test]\nfn test_cowarc_clone_unique2() {\n    let mut cow0 = Arc::new(75);\n    let cow1 = cow0.clone();\n    let cow2 = cow1.clone();\n\n    assert!(75 == *cow0);\n    assert!(75 == *cow1);\n    assert!(75 == *cow2);\n\n    *Arc::make_mut(&mut cow0) += 1;\n    assert!(76 == *cow0);\n    assert!(75 == *cow1);\n    assert!(75 == *cow2);\n\n    // cow1 and cow2 should share the same contents\n    // cow0 should have a unique reference\n    assert!(*cow0 != *cow1);\n    assert!(*cow0 != *cow2);\n    assert!(*cow1 == *cow2);\n}\n\n#[test]\nfn test_cowarc_clone_weak() {\n    let mut cow0 = Arc::new(75);\n    let cow1_weak = Arc::downgrade(&cow0);\n\n    assert!(75 == *cow0);\n    assert!(75 == *cow1_weak.upgrade().unwrap());\n\n    *Arc::make_mut(&mut cow0) += 1;\n\n    assert!(76 == *cow0);\n    assert!(cow1_weak.upgrade().is_none());\n}\n\n#[test]\nfn test_live() {\n    let x = Arc::new(5);\n    let y = Arc::downgrade(&x);\n    assert!(y.upgrade().is_some());\n}\n\n#[test]\nfn test_dead() {\n    let x = Arc::new(5);\n    let y = Arc::downgrade(&x);\n    drop(x);\n    assert!(y.upgrade().is_none());\n}\n\n#[test]\nfn weak_self_cyclic() {\n    struct Cycle {\n        x: Mutex<Option<Weak<Cycle>>>,\n    }\n\n    let a = Arc::new(Cycle { x: Mutex::new(None) });\n    let b = Arc::downgrade(&a.clone());\n    *a.x.lock().unwrap() = Some(b);\n\n    // hopefully we don't double-free (or leak)...\n}\n\n#[test]\nfn drop_arc() {\n    let mut canary = atomic::AtomicUsize::new(0);\n    let x = Arc::new(Canary(&mut canary as *mut atomic::AtomicUsize));\n    drop(x);\n    assert!(canary.load(Acquire) == 1);\n}\n\n#[test]\nfn drop_arc_weak() {\n    let mut canary = atomic::AtomicUsize::new(0);\n    let arc = Arc::new(Canary(&mut canary as *mut atomic::AtomicUsize));\n    let arc_weak = Arc::downgrade(&arc);\n    assert!(canary.load(Acquire) == 0);\n    drop(arc);\n    assert!(canary.load(Acquire) == 1);\n    drop(arc_weak);\n}\n\n#[test]\nfn test_strong_count() {\n    let a = Arc::new(0);\n    assert!(Arc::strong_count(&a) == 1);\n    let w = Arc::downgrade(&a);\n    assert!(Arc::strong_count(&a) == 1);\n    let b = w.upgrade().expect(\"\");\n    assert!(Arc::strong_count(&b) == 2);\n    assert!(Arc::strong_count(&a) == 2);\n    drop(w);\n    drop(a);\n    assert!(Arc::strong_count(&b) == 1);\n    let c = b.clone();\n    assert!(Arc::strong_count(&b) == 2);\n    assert!(Arc::strong_count(&c) == 2);\n}\n\n#[test]\nfn test_weak_count() {\n    let a = Arc::new(0);\n    assert!(Arc::strong_count(&a) == 1);\n    assert!(Arc::weak_count(&a) == 0);\n    let w = Arc::downgrade(&a);\n    assert!(Arc::strong_count(&a) == 1);\n    assert!(Arc::weak_count(&a) == 1);\n    let x = w.clone();\n    assert!(Arc::weak_count(&a) == 2);\n    drop(w);\n    drop(x);\n    assert!(Arc::strong_count(&a) == 1);\n    assert!(Arc::weak_count(&a) == 0);\n    let c = a.clone();\n    assert!(Arc::strong_count(&a) == 2);\n    assert!(Arc::weak_count(&a) == 0);\n    let d = Arc::downgrade(&c);\n    assert!(Arc::weak_count(&c) == 1);\n    assert!(Arc::strong_count(&c) == 2);\n\n    drop(a);\n    drop(c);\n    drop(d);\n}\n\n#[test]\nfn show_arc() {\n    let a = Arc::new(5);\n    assert_eq!(format!(\"{:?}\", a), \"5\");\n}\n\n// Make sure deriving works with Arc<T>\n#[derive(Eq, Ord, PartialEq, PartialOrd, Clone, Debug, Default)]\nstruct Foo {\n    inner: Arc<i32>,\n}\n\n#[test]\nfn test_unsized() {\n    let x: Arc<[i32]> = Arc::new([1, 2, 3]);\n    assert_eq!(format!(\"{:?}\", x), \"[1, 2, 3]\");\n    let y = Arc::downgrade(&x.clone());\n    drop(x);\n    assert!(y.upgrade().is_none());\n}\n\n#[test]\nfn test_maybe_thin_unsized() {\n    // If/when custom thin DSTs exist, this test should be updated to use one\n    use std::ffi::{CStr, CString};\n\n    let x: Arc<CStr> = Arc::from(CString::new(\"swordfish\").unwrap().into_boxed_c_str());\n    assert_eq!(format!(\"{:?}\", x), \"\\\"swordfish\\\"\");\n    let y: Weak<CStr> = Arc::downgrade(&x);\n    drop(x);\n\n    // At this point, the weak points to a dropped DST\n    assert!(y.upgrade().is_none());\n    // But we still need to be able to get the alloc layout to drop.\n    // CStr has no drop glue, but custom DSTs might, and need to work.\n    drop(y);\n}\n\n#[test]\nfn test_from_owned() {\n    let foo = 123;\n    let foo_arc = Arc::from(foo);\n    assert!(123 == *foo_arc);\n}\n\n#[test]\nfn test_new_weak() {\n    let foo: Weak<usize> = Weak::new();\n    assert!(foo.upgrade().is_none());\n}\n\n#[test]\nfn test_ptr_eq() {\n    let five = Arc::new(5);\n    let same_five = five.clone();\n    let other_five = Arc::new(5);\n\n    assert!(Arc::ptr_eq(&five, &same_five));\n    assert!(!Arc::ptr_eq(&five, &other_five));\n}\n\n#[test]\n#[cfg_attr(target_os = \"emscripten\", ignore)]\nfn test_weak_count_locked() {\n    let mut a = Arc::new(atomic::AtomicBool::new(false));\n    let a2 = a.clone();\n    let t = thread::spawn(move || {\n        // Miri is too slow\n        let count = if cfg!(miri) { 1000 } else { 1000000 };\n        for _i in 0..count {\n            Arc::get_mut(&mut a);\n        }\n        a.store(true, SeqCst);\n    });\n\n    while !a2.load(SeqCst) {\n        let n = Arc::weak_count(&a2);\n        assert!(n < 2, \"bad weak count: {}\", n);\n        #[cfg(miri)] // Miri's scheduler does not guarantee liveness, and thus needs this hint.\n        std::hint::spin_loop();\n    }\n    t.join().unwrap();\n}\n\n#[test]\nfn test_from_str() {\n    let r: Arc<str> = Arc::from(\"foo\");\n\n    assert_eq!(&r[..], \"foo\");\n}\n\n#[test]\nfn test_copy_from_slice() {\n    let s: &[u32] = &[1, 2, 3];\n    let r: Arc<[u32]> = Arc::from(s);\n\n    assert_eq!(&r[..], [1, 2, 3]);\n}\n\n#[test]\nfn test_clone_from_slice() {\n    #[derive(Clone, Debug, Eq, PartialEq)]\n    struct X(u32);\n\n    let s: &[X] = &[X(1), X(2), X(3)];\n    let r: Arc<[X]> = Arc::from(s);\n\n    assert_eq!(&r[..], s);\n}\n\n#[test]\n#[should_panic]\nfn test_clone_from_slice_panic() {\n    use std::string::{String, ToString};\n\n    struct Fail(u32, String);\n\n    impl Clone for Fail {\n        fn clone(&self) -> Fail {\n            if self.0 == 2 {\n                panic!();\n            }\n            Fail(self.0, self.1.clone())\n        }\n    }\n\n    let s: &[Fail] =\n        &[Fail(0, \"foo\".to_string()), Fail(1, \"bar\".to_string()), Fail(2, \"baz\".to_string())];\n\n    // Should panic, but not cause memory corruption\n    let _r: Arc<[Fail]> = Arc::from(s);\n}\n\n#[test]\nfn test_from_box() {\n    let b: Box<u32> = box 123;\n    let r: Arc<u32> = Arc::from(b);\n\n    assert_eq!(*r, 123);\n}\n\n#[test]\nfn test_from_box_str() {\n    use std::string::String;\n\n    let s = String::from(\"foo\").into_boxed_str();\n    let r: Arc<str> = Arc::from(s);\n\n    assert_eq!(&r[..], \"foo\");\n}\n\n#[test]\nfn test_from_box_slice() {\n    let s = vec![1, 2, 3].into_boxed_slice();\n    let r: Arc<[u32]> = Arc::from(s);\n\n    assert_eq!(&r[..], [1, 2, 3]);\n}\n\n#[test]\nfn test_from_box_trait() {\n    use std::fmt::Display;\n    use std::string::ToString;\n\n    let b: Box<dyn Display> = box 123;\n    let r: Arc<dyn Display> = Arc::from(b);\n\n    assert_eq!(r.to_string(), \"123\");\n}\n\n#[test]\nfn test_from_box_trait_zero_sized() {\n    use std::fmt::Debug;\n\n    let b: Box<dyn Debug> = box ();\n    let r: Arc<dyn Debug> = Arc::from(b);\n\n    assert_eq!(format!(\"{:?}\", r), \"()\");\n}\n\n#[test]\nfn test_from_vec() {\n    let v = vec![1, 2, 3];\n    let r: Arc<[u32]> = Arc::from(v);\n\n    assert_eq!(&r[..], [1, 2, 3]);\n}\n\n#[test]\nfn test_downcast() {\n    use std::any::Any;\n\n    let r1: Arc<dyn Any + Send + Sync> = Arc::new(i32::MAX);\n    let r2: Arc<dyn Any + Send + Sync> = Arc::new(\"abc\");\n\n    assert!(r1.clone().downcast::<u32>().is_err());\n\n    let r1i32 = r1.downcast::<i32>();\n    assert!(r1i32.is_ok());\n    assert_eq!(r1i32.unwrap(), Arc::new(i32::MAX));\n\n    assert!(r2.clone().downcast::<i32>().is_err());\n\n    let r2str = r2.downcast::<&'static str>();\n    assert!(r2str.is_ok());\n    assert_eq!(r2str.unwrap(), Arc::new(\"abc\"));\n}\n\n#[test]\nfn test_array_from_slice() {\n    let v = vec![1, 2, 3];\n    let r: Arc<[u32]> = Arc::from(v);\n\n    let a: Result<Arc<[u32; 3]>, _> = r.clone().try_into();\n    assert!(a.is_ok());\n\n    let a: Result<Arc<[u32; 2]>, _> = r.clone().try_into();\n    assert!(a.is_err());\n}\n\n#[test]\nfn test_arc_cyclic_with_zero_refs() {\n    struct ZeroRefs {\n        inner: Weak<ZeroRefs>,\n    }\n    let zero_refs = Arc::new_cyclic(|inner| {\n        assert_eq!(inner.strong_count(), 0);\n        assert!(inner.upgrade().is_none());\n        ZeroRefs { inner: Weak::new() }\n    });\n\n    assert_eq!(Arc::strong_count(&zero_refs), 1);\n    assert_eq!(Arc::weak_count(&zero_refs), 0);\n    assert_eq!(zero_refs.inner.strong_count(), 0);\n    assert_eq!(zero_refs.inner.weak_count(), 0);\n}\n\n#[test]\nfn test_arc_new_cyclic_one_ref() {\n    struct OneRef {\n        inner: Weak<OneRef>,\n    }\n    let one_ref = Arc::new_cyclic(|inner| {\n        assert_eq!(inner.strong_count(), 0);\n        assert!(inner.upgrade().is_none());\n        OneRef { inner: inner.clone() }\n    });\n\n    assert_eq!(Arc::strong_count(&one_ref), 1);\n    assert_eq!(Arc::weak_count(&one_ref), 1);\n\n    let one_ref2 = Weak::upgrade(&one_ref.inner).unwrap();\n    assert!(Arc::ptr_eq(&one_ref, &one_ref2));\n\n    assert_eq!(Arc::strong_count(&one_ref), 2);\n    assert_eq!(Arc::weak_count(&one_ref), 1);\n}\n\n#[test]\nfn test_arc_cyclic_two_refs() {\n    struct TwoRefs {\n        inner1: Weak<TwoRefs>,\n        inner2: Weak<TwoRefs>,\n    }\n    let two_refs = Arc::new_cyclic(|inner| {\n        assert_eq!(inner.strong_count(), 0);\n        assert!(inner.upgrade().is_none());\n\n        let inner1 = inner.clone();\n        let inner2 = inner1.clone();\n\n        TwoRefs { inner1, inner2 }\n    });\n\n    assert_eq!(Arc::strong_count(&two_refs), 1);\n    assert_eq!(Arc::weak_count(&two_refs), 2);\n\n    let two_refs1 = Weak::upgrade(&two_refs.inner1).unwrap();\n    assert!(Arc::ptr_eq(&two_refs, &two_refs1));\n\n    let two_refs2 = Weak::upgrade(&two_refs.inner2).unwrap();\n    assert!(Arc::ptr_eq(&two_refs, &two_refs2));\n\n    assert_eq!(Arc::strong_count(&two_refs), 3);\n    assert_eq!(Arc::weak_count(&two_refs), 2);\n}\n//! A UTF-8–encoded, growable string.\n//!\n//! This module contains the [`String`] type, the [`ToString`] trait for\n//! converting to strings, and several error types that may result from\n//! working with [`String`]s.\n//!\n//! # Examples\n//!\n//! There are multiple ways to create a new [`String`] from a string literal:\n//!\n//! ```\n//! let s = \"Hello\".to_string();\n//!\n//! let s = String::from(\"world\");\n//! let s: String = \"also this\".into();\n//! ```\n//!\n//! You can create a new [`String`] from an existing one by concatenating with\n//! `+`:\n//!\n//! ```\n//! let s = \"Hello\".to_string();\n//!\n//! let message = s + \" world!\";\n//! ```\n//!\n//! If you have a vector of valid UTF-8 bytes, you can make a [`String`] out of\n//! it. You can do the reverse too.\n//!\n//! ```\n//! let sparkle_heart = vec![240, 159, 146, 150];\n//!\n//! // We know these bytes are valid, so we'll use `unwrap()`.\n//! let sparkle_heart = String::from_utf8(sparkle_heart).unwrap();\n//!\n//! assert_eq!(\"💖\", sparkle_heart);\n//!\n//! let bytes = sparkle_heart.into_bytes();\n//!\n//! assert_eq!(bytes, [240, 159, 146, 150]);\n//! ```\n\n#![stable(feature = \"rust1\", since = \"1.0.0\")]\n\nuse core::char::{decode_utf16, REPLACEMENT_CHARACTER};\nuse core::fmt;\nuse core::hash;\nuse core::iter::{FromIterator, FusedIterator};\nuse core::ops::Bound::{Excluded, Included, Unbounded};\nuse core::ops::{self, Add, AddAssign, Index, IndexMut, Range, RangeBounds};\nuse core::ptr;\nuse core::slice;\nuse core::str::{lossy, pattern::Pattern};\n\nuse crate::borrow::{Cow, ToOwned};\nuse crate::boxed::Box;\nuse crate::collections::TryReserveError;\nuse crate::str::{self, from_boxed_utf8_unchecked, Chars, FromStr, Utf8Error};\nuse crate::vec::Vec;\n\n/// A UTF-8–encoded, growable string.\n///\n/// The `String` type is the most common string type that has ownership over the\n/// contents of the string. It has a close relationship with its borrowed\n/// counterpart, the primitive [`str`].\n///\n/// # Examples\n///\n/// You can create a `String` from [a literal string][`str`] with [`String::from`]:\n///\n/// [`String::from`]: From::from\n///\n/// ```\n/// let hello = String::from(\"Hello, world!\");\n/// ```\n///\n/// You can append a [`char`] to a `String` with the [`push`] method, and\n/// append a [`&str`] with the [`push_str`] method:\n///\n/// ```\n/// let mut hello = String::from(\"Hello, \");\n///\n/// hello.push('w');\n/// hello.push_str(\"orld!\");\n/// ```\n///\n/// [`push`]: String::push\n/// [`push_str`]: String::push_str\n///\n/// If you have a vector of UTF-8 bytes, you can create a `String` from it with\n/// the [`from_utf8`] method:\n///\n/// ```\n/// // some bytes, in a vector\n/// let sparkle_heart = vec![240, 159, 146, 150];\n///\n/// // We know these bytes are valid, so we'll use `unwrap()`.\n/// let sparkle_heart = String::from_utf8(sparkle_heart).unwrap();\n///\n/// assert_eq!(\"💖\", sparkle_heart);\n/// ```\n///\n/// [`from_utf8`]: String::from_utf8\n///\n/// # UTF-8\n///\n/// `String`s are always valid UTF-8. This has a few implications, the first of\n/// which is that if you need a non-UTF-8 string, consider [`OsString`]. It is\n/// similar, but without the UTF-8 constraint. The second implication is that\n/// you cannot index into a `String`:\n///\n/// ```compile_fail,E0277\n/// let s = \"hello\";\n///\n/// println!(\"The first letter of s is {}\", s[0]); // ERROR!!!\n/// ```\n///\n/// [`OsString`]: ../../std/ffi/struct.OsString.html\n///\n/// Indexing is intended to be a constant-time operation, but UTF-8 encoding\n/// does not allow us to do this. Furthermore, it's not clear what sort of\n/// thing the index should return: a byte, a codepoint, or a grapheme cluster.\n/// The [`bytes`] and [`chars`] methods return iterators over the first\n/// two, respectively.\n///\n/// [`bytes`]: str::bytes\n/// [`chars`]: str::chars\n///\n/// # Deref\n///\n/// `String`s implement [`Deref`]`<Target=str>`, and so inherit all of [`str`]'s\n/// methods. In addition, this means that you can pass a `String` to a\n/// function which takes a [`&str`] by using an ampersand (`&`):\n///\n/// ```\n/// fn takes_str(s: &str) { }\n///\n/// let s = String::from(\"Hello\");\n///\n/// takes_str(&s);\n/// ```\n///\n/// This will create a [`&str`] from the `String` and pass it in. This\n/// conversion is very inexpensive, and so generally, functions will accept\n/// [`&str`]s as arguments unless they need a `String` for some specific\n/// reason.\n///\n/// In certain cases Rust doesn't have enough information to make this\n/// conversion, known as [`Deref`] coercion. In the following example a string\n/// slice [`&'a str`][`&str`] implements the trait `TraitExample`, and the function\n/// `example_func` takes anything that implements the trait. In this case Rust\n/// would need to make two implicit conversions, which Rust doesn't have the\n/// means to do. For that reason, the following example will not compile.\n///\n/// ```compile_fail,E0277\n/// trait TraitExample {}\n///\n/// impl<'a> TraitExample for &'a str {}\n///\n/// fn example_func<A: TraitExample>(example_arg: A) {}\n///\n/// let example_string = String::from(\"example_string\");\n/// example_func(&example_string);\n/// ```\n///\n/// There are two options that would work instead. The first would be to\n/// change the line `example_func(&example_string);` to\n/// `example_func(example_string.as_str());`, using the method [`as_str()`]\n/// to explicitly extract the string slice containing the string. The second\n/// way changes `example_func(&example_string);` to\n/// `example_func(&*example_string);`. In this case we are dereferencing a\n/// `String` to a [`str`][`&str`], then referencing the [`str`][`&str`] back to\n/// [`&str`]. The second way is more idiomatic, however both work to do the\n/// conversion explicitly rather than relying on the implicit conversion.\n///\n/// # Representation\n///\n/// A `String` is made up of three components: a pointer to some bytes, a\n/// length, and a capacity. The pointer points to an internal buffer `String`\n/// uses to store its data. The length is the number of bytes currently stored\n/// in the buffer, and the capacity is the size of the buffer in bytes. As such,\n/// the length will always be less than or equal to the capacity.\n///\n/// This buffer is always stored on the heap.\n///\n/// You can look at these with the [`as_ptr`], [`len`], and [`capacity`]\n/// methods:\n///\n/// ```\n/// use std::mem;\n///\n/// let story = String::from(\"Once upon a time...\");\n///\n// FIXME Update this when vec_into_raw_parts is stabilized\n/// // Prevent automatically dropping the String's data\n/// let mut story = mem::ManuallyDrop::new(story);\n///\n/// let ptr = story.as_mut_ptr();\n/// let len = story.len();\n/// let capacity = story.capacity();\n///\n/// // story has nineteen bytes\n/// assert_eq!(19, len);\n///\n/// // We can re-build a String out of ptr, len, and capacity. This is all\n/// // unsafe because we are responsible for making sure the components are\n/// // valid:\n/// let s = unsafe { String::from_raw_parts(ptr, len, capacity) } ;\n///\n/// assert_eq!(String::from(\"Once upon a time...\"), s);\n/// ```\n///\n/// [`as_ptr`]: str::as_ptr\n/// [`len`]: String::len\n/// [`capacity`]: String::capacity\n///\n/// If a `String` has enough capacity, adding elements to it will not\n/// re-allocate. For example, consider this program:\n///\n/// ```\n/// let mut s = String::new();\n///\n/// println!(\"{}\", s.capacity());\n///\n/// for _ in 0..5 {\n///     s.push_str(\"hello\");\n///     println!(\"{}\", s.capacity());\n/// }\n/// ```\n///\n/// This will output the following:\n///\n/// ```text\n/// 0\n/// 5\n/// 10\n/// 20\n/// 20\n/// 40\n/// ```\n///\n/// At first, we have no memory allocated at all, but as we append to the\n/// string, it increases its capacity appropriately. If we instead use the\n/// [`with_capacity`] method to allocate the correct capacity initially:\n///\n/// ```\n/// let mut s = String::with_capacity(25);\n///\n/// println!(\"{}\", s.capacity());\n///\n/// for _ in 0..5 {\n///     s.push_str(\"hello\");\n///     println!(\"{}\", s.capacity());\n/// }\n/// ```\n///\n/// [`with_capacity`]: String::with_capacity\n///\n/// We end up with a different output:\n///\n/// ```text\n/// 25\n/// 25\n/// 25\n/// 25\n/// 25\n/// 25\n/// ```\n///\n/// Here, there's no need to allocate more memory inside the loop.\n///\n/// [`str`]: prim@str\n/// [`&str`]: prim@str\n/// [`Deref`]: core::ops::Deref\n/// [`as_str()`]: String::as_str\n#[derive(PartialOrd, Eq, Ord)]\n#[cfg_attr(not(test), rustc_diagnostic_item = \"string_type\")]\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct String {\n    vec: Vec<u8>,\n}\n\n/// A possible error value when converting a `String` from a UTF-8 byte vector.\n///\n/// This type is the error type for the [`from_utf8`] method on [`String`]. It\n/// is designed in such a way to carefully avoid reallocations: the\n/// [`into_bytes`] method will give back the byte vector that was used in the\n/// conversion attempt.\n///\n/// [`from_utf8`]: String::from_utf8\n/// [`into_bytes`]: FromUtf8Error::into_bytes\n///\n/// The [`Utf8Error`] type provided by [`std::str`] represents an error that may\n/// occur when converting a slice of [`u8`]s to a [`&str`]. In this sense, it's\n/// an analogue to `FromUtf8Error`, and you can get one from a `FromUtf8Error`\n/// through the [`utf8_error`] method.\n///\n/// [`Utf8Error`]: core::str::Utf8Error\n/// [`std::str`]: core::str\n/// [`&str`]: prim@str\n/// [`utf8_error`]: Self::utf8_error\n///\n/// # Examples\n///\n/// Basic usage:\n///\n/// ```\n/// // some invalid bytes, in a vector\n/// let bytes = vec![0, 159];\n///\n/// let value = String::from_utf8(bytes);\n///\n/// assert!(value.is_err());\n/// assert_eq!(vec![0, 159], value.unwrap_err().into_bytes());\n/// ```\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\n#[derive(Debug, Clone, PartialEq, Eq)]\npub struct FromUtf8Error {\n    bytes: Vec<u8>,\n    error: Utf8Error,\n}\n\n/// A possible error value when converting a `String` from a UTF-16 byte slice.\n///\n/// This type is the error type for the [`from_utf16`] method on [`String`].\n///\n/// [`from_utf16`]: String::from_utf16\n/// # Examples\n///\n/// Basic usage:\n///\n/// ```\n/// // 𝄞mu<invalid>ic\n/// let v = &[0xD834, 0xDD1E, 0x006d, 0x0075,\n///           0xD800, 0x0069, 0x0063];\n///\n/// assert!(String::from_utf16(v).is_err());\n/// ```\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\n#[derive(Debug)]\npub struct FromUtf16Error(());\n\nimpl String {\n    /// Creates a new empty `String`.\n    ///\n    /// Given that the `String` is empty, this will not allocate any initial\n    /// buffer. While that means that this initial operation is very\n    /// inexpensive, it may cause excessive allocation later when you add\n    /// data. If you have an idea of how much data the `String` will hold,\n    /// consider the [`with_capacity`] method to prevent excessive\n    /// re-allocation.\n    ///\n    /// [`with_capacity`]: String::with_capacity\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let s = String::new();\n    /// ```\n    #[inline]\n    #[rustc_const_stable(feature = \"const_string_new\", since = \"1.39.0\")]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub const fn new() -> String {\n        String { vec: Vec::new() }\n    }\n\n    /// Creates a new empty `String` with a particular capacity.\n    ///\n    /// `String`s have an internal buffer to hold their data. The capacity is\n    /// the length of that buffer, and can be queried with the [`capacity`]\n    /// method. This method creates an empty `String`, but one with an initial\n    /// buffer that can hold `capacity` bytes. This is useful when you may be\n    /// appending a bunch of data to the `String`, reducing the number of\n    /// reallocations it needs to do.\n    ///\n    /// [`capacity`]: String::capacity\n    ///\n    /// If the given capacity is `0`, no allocation will occur, and this method\n    /// is identical to the [`new`] method.\n    ///\n    /// [`new`]: String::new\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let mut s = String::with_capacity(10);\n    ///\n    /// // The String contains no chars, even though it has capacity for more\n    /// assert_eq!(s.len(), 0);\n    ///\n    /// // These are all done without reallocating...\n    /// let cap = s.capacity();\n    /// for _ in 0..10 {\n    ///     s.push('a');\n    /// }\n    ///\n    /// assert_eq!(s.capacity(), cap);\n    ///\n    /// // ...but this may make the string reallocate\n    /// s.push('a');\n    /// ```\n    #[inline]\n    #[doc(alias = \"alloc\")]\n    #[doc(alias = \"malloc\")]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn with_capacity(capacity: usize) -> String {\n        String { vec: Vec::with_capacity(capacity) }\n    }\n\n    // HACK(japaric): with cfg(test) the inherent `[T]::to_vec` method, which is\n    // required for this method definition, is not available. Since we don't\n    // require this method for testing purposes, I'll just stub it\n    // NB see the slice::hack module in slice.rs for more information\n    #[inline]\n    #[cfg(test)]\n    pub fn from_str(_: &str) -> String {\n        panic!(\"not available with cfg(test)\");\n    }\n\n    /// Converts a vector of bytes to a `String`.\n    ///\n    /// A string ([`String`]) is made of bytes ([`u8`]), and a vector of bytes\n    /// ([`Vec<u8>`]) is made of bytes, so this function converts between the\n    /// two. Not all byte slices are valid `String`s, however: `String`\n    /// requires that it is valid UTF-8. `from_utf8()` checks to ensure that\n    /// the bytes are valid UTF-8, and then does the conversion.\n    ///\n    /// If you are sure that the byte slice is valid UTF-8, and you don't want\n    /// to incur the overhead of the validity check, there is an unsafe version\n    /// of this function, [`from_utf8_unchecked`], which has the same behavior\n    /// but skips the check.\n    ///\n    /// This method will take care to not copy the vector, for efficiency's\n    /// sake.\n    ///\n    /// If you need a [`&str`] instead of a `String`, consider\n    /// [`str::from_utf8`].\n    ///\n    /// The inverse of this method is [`into_bytes`].\n    ///\n    /// # Errors\n    ///\n    /// Returns [`Err`] if the slice is not UTF-8 with a description as to why the\n    /// provided bytes are not UTF-8. The vector you moved in is also included.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// // some bytes, in a vector\n    /// let sparkle_heart = vec![240, 159, 146, 150];\n    ///\n    /// // We know these bytes are valid, so we'll use `unwrap()`.\n    /// let sparkle_heart = String::from_utf8(sparkle_heart).unwrap();\n    ///\n    /// assert_eq!(\"💖\", sparkle_heart);\n    /// ```\n    ///\n    /// Incorrect bytes:\n    ///\n    /// ```\n    /// // some invalid bytes, in a vector\n    /// let sparkle_heart = vec![0, 159, 146, 150];\n    ///\n    /// assert!(String::from_utf8(sparkle_heart).is_err());\n    /// ```\n    ///\n    /// See the docs for [`FromUtf8Error`] for more details on what you can do\n    /// with this error.\n    ///\n    /// [`from_utf8_unchecked`]: String::from_utf8_unchecked\n    /// [`Vec<u8>`]: crate::vec::Vec\n    /// [`&str`]: prim@str\n    /// [`into_bytes`]: String::into_bytes\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn from_utf8(vec: Vec<u8>) -> Result<String, FromUtf8Error> {\n        match str::from_utf8(&vec) {\n            Ok(..) => Ok(String { vec }),\n            Err(e) => Err(FromUtf8Error { bytes: vec, error: e }),\n        }\n    }\n\n    /// Converts a slice of bytes to a string, including invalid characters.\n    ///\n    /// Strings are made of bytes ([`u8`]), and a slice of bytes\n    /// ([`&[u8]`][byteslice]) is made of bytes, so this function converts\n    /// between the two. Not all byte slices are valid strings, however: strings\n    /// are required to be valid UTF-8. During this conversion,\n    /// `from_utf8_lossy()` will replace any invalid UTF-8 sequences with\n    /// [`U+FFFD REPLACEMENT CHARACTER`][U+FFFD], which looks like this: �\n    ///\n    /// [byteslice]: prim@slice\n    /// [U+FFFD]: core::char::REPLACEMENT_CHARACTER\n    ///\n    /// If you are sure that the byte slice is valid UTF-8, and you don't want\n    /// to incur the overhead of the conversion, there is an unsafe version\n    /// of this function, [`from_utf8_unchecked`], which has the same behavior\n    /// but skips the checks.\n    ///\n    /// [`from_utf8_unchecked`]: String::from_utf8_unchecked\n    ///\n    /// This function returns a [`Cow<'a, str>`]. If our byte slice is invalid\n    /// UTF-8, then we need to insert the replacement characters, which will\n    /// change the size of the string, and hence, require a `String`. But if\n    /// it's already valid UTF-8, we don't need a new allocation. This return\n    /// type allows us to handle both cases.\n    ///\n    /// [`Cow<'a, str>`]: crate::borrow::Cow\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// // some bytes, in a vector\n    /// let sparkle_heart = vec![240, 159, 146, 150];\n    ///\n    /// let sparkle_heart = String::from_utf8_lossy(&sparkle_heart);\n    ///\n    /// assert_eq!(\"💖\", sparkle_heart);\n    /// ```\n    ///\n    /// Incorrect bytes:\n    ///\n    /// ```\n    /// // some invalid bytes\n    /// let input = b\"Hello \\xF0\\x90\\x80World\";\n    /// let output = String::from_utf8_lossy(input);\n    ///\n    /// assert_eq!(\"Hello �World\", output);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn from_utf8_lossy(v: &[u8]) -> Cow<'_, str> {\n        let mut iter = lossy::Utf8Lossy::from_bytes(v).chunks();\n\n        let (first_valid, first_broken) = if let Some(chunk) = iter.next() {\n            let lossy::Utf8LossyChunk { valid, broken } = chunk;\n            if valid.len() == v.len() {\n                debug_assert!(broken.is_empty());\n                return Cow::Borrowed(valid);\n            }\n            (valid, broken)\n        } else {\n            return Cow::Borrowed(\"\");\n        };\n\n        const REPLACEMENT: &str = \"\\u{FFFD}\";\n\n        let mut res = String::with_capacity(v.len());\n        res.push_str(first_valid);\n        if !first_broken.is_empty() {\n            res.push_str(REPLACEMENT);\n        }\n\n        for lossy::Utf8LossyChunk { valid, broken } in iter {\n            res.push_str(valid);\n            if !broken.is_empty() {\n                res.push_str(REPLACEMENT);\n            }\n        }\n\n        Cow::Owned(res)\n    }\n\n    /// Decode a UTF-16–encoded vector `v` into a `String`, returning [`Err`]\n    /// if `v` contains any invalid data.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// // 𝄞music\n    /// let v = &[0xD834, 0xDD1E, 0x006d, 0x0075,\n    ///           0x0073, 0x0069, 0x0063];\n    /// assert_eq!(String::from(\"𝄞music\"),\n    ///            String::from_utf16(v).unwrap());\n    ///\n    /// // 𝄞mu<invalid>ic\n    /// let v = &[0xD834, 0xDD1E, 0x006d, 0x0075,\n    ///           0xD800, 0x0069, 0x0063];\n    /// assert!(String::from_utf16(v).is_err());\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn from_utf16(v: &[u16]) -> Result<String, FromUtf16Error> {\n        // This isn't done via collect::<Result<_, _>>() for performance reasons.\n        // FIXME: the function can be simplified again when #48994 is closed.\n        let mut ret = String::with_capacity(v.len());\n        for c in decode_utf16(v.iter().cloned()) {\n            if let Ok(c) = c {\n                ret.push(c);\n            } else {\n                return Err(FromUtf16Error(()));\n            }\n        }\n        Ok(ret)\n    }\n\n    /// Decode a UTF-16–encoded slice `v` into a `String`, replacing\n    /// invalid data with [the replacement character (`U+FFFD`)][U+FFFD].\n    ///\n    /// Unlike [`from_utf8_lossy`] which returns a [`Cow<'a, str>`],\n    /// `from_utf16_lossy` returns a `String` since the UTF-16 to UTF-8\n    /// conversion requires a memory allocation.\n    ///\n    /// [`from_utf8_lossy`]: String::from_utf8_lossy\n    /// [`Cow<'a, str>`]: crate::borrow::Cow\n    /// [U+FFFD]: core::char::REPLACEMENT_CHARACTER\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// // 𝄞mus<invalid>ic<invalid>\n    /// let v = &[0xD834, 0xDD1E, 0x006d, 0x0075,\n    ///           0x0073, 0xDD1E, 0x0069, 0x0063,\n    ///           0xD834];\n    ///\n    /// assert_eq!(String::from(\"𝄞mus\\u{FFFD}ic\\u{FFFD}\"),\n    ///            String::from_utf16_lossy(v));\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn from_utf16_lossy(v: &[u16]) -> String {\n        decode_utf16(v.iter().cloned()).map(|r| r.unwrap_or(REPLACEMENT_CHARACTER)).collect()\n    }\n\n    /// Decomposes a `String` into its raw components.\n    ///\n    /// Returns the raw pointer to the underlying data, the length of\n    /// the string (in bytes), and the allocated capacity of the data\n    /// (in bytes). These are the same arguments in the same order as\n    /// the arguments to [`from_raw_parts`].\n    ///\n    /// After calling this function, the caller is responsible for the\n    /// memory previously managed by the `String`. The only way to do\n    /// this is to convert the raw pointer, length, and capacity back\n    /// into a `String` with the [`from_raw_parts`] function, allowing\n    /// the destructor to perform the cleanup.\n    ///\n    /// [`from_raw_parts`]: String::from_raw_parts\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(vec_into_raw_parts)]\n    /// let s = String::from(\"hello\");\n    ///\n    /// let (ptr, len, cap) = s.into_raw_parts();\n    ///\n    /// let rebuilt = unsafe { String::from_raw_parts(ptr, len, cap) };\n    /// assert_eq!(rebuilt, \"hello\");\n    /// ```\n    #[unstable(feature = \"vec_into_raw_parts\", reason = \"new API\", issue = \"65816\")]\n    pub fn into_raw_parts(self) -> (*mut u8, usize, usize) {\n        self.vec.into_raw_parts()\n    }\n\n    /// Creates a new `String` from a length, capacity, and pointer.\n    ///\n    /// # Safety\n    ///\n    /// This is highly unsafe, due to the number of invariants that aren't\n    /// checked:\n    ///\n    /// * The memory at `buf` needs to have been previously allocated by the\n    ///   same allocator the standard library uses, with a required alignment of exactly 1.\n    /// * `length` needs to be less than or equal to `capacity`.\n    /// * `capacity` needs to be the correct value.\n    /// * The first `length` bytes at `buf` need to be valid UTF-8.\n    ///\n    /// Violating these may cause problems like corrupting the allocator's\n    /// internal data structures.\n    ///\n    /// The ownership of `buf` is effectively transferred to the\n    /// `String` which may then deallocate, reallocate or change the\n    /// contents of memory pointed to by the pointer at will. Ensure\n    /// that nothing else uses the pointer after calling this\n    /// function.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::mem;\n    ///\n    /// unsafe {\n    ///     let s = String::from(\"hello\");\n    ///\n    // FIXME Update this when vec_into_raw_parts is stabilized\n    ///     // Prevent automatically dropping the String's data\n    ///     let mut s = mem::ManuallyDrop::new(s);\n    ///\n    ///     let ptr = s.as_mut_ptr();\n    ///     let len = s.len();\n    ///     let capacity = s.capacity();\n    ///\n    ///     let s = String::from_raw_parts(ptr, len, capacity);\n    ///\n    ///     assert_eq!(String::from(\"hello\"), s);\n    /// }\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub unsafe fn from_raw_parts(buf: *mut u8, length: usize, capacity: usize) -> String {\n        unsafe { String { vec: Vec::from_raw_parts(buf, length, capacity) } }\n    }\n\n    /// Converts a vector of bytes to a `String` without checking that the\n    /// string contains valid UTF-8.\n    ///\n    /// See the safe version, [`from_utf8`], for more details.\n    ///\n    /// [`from_utf8`]: String::from_utf8\n    ///\n    /// # Safety\n    ///\n    /// This function is unsafe because it does not check that the bytes passed\n    /// to it are valid UTF-8. If this constraint is violated, it may cause\n    /// memory unsafety issues with future users of the `String`, as the rest of\n    /// the standard library assumes that `String`s are valid UTF-8.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// // some bytes, in a vector\n    /// let sparkle_heart = vec![240, 159, 146, 150];\n    ///\n    /// let sparkle_heart = unsafe {\n    ///     String::from_utf8_unchecked(sparkle_heart)\n    /// };\n    ///\n    /// assert_eq!(\"💖\", sparkle_heart);\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub unsafe fn from_utf8_unchecked(bytes: Vec<u8>) -> String {\n        String { vec: bytes }\n    }\n\n    /// Converts a `String` into a byte vector.\n    ///\n    /// This consumes the `String`, so we do not need to copy its contents.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let s = String::from(\"hello\");\n    /// let bytes = s.into_bytes();\n    ///\n    /// assert_eq!(&[104, 101, 108, 108, 111][..], &bytes[..]);\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn into_bytes(self) -> Vec<u8> {\n        self.vec\n    }\n\n    /// Extracts a string slice containing the entire `String`.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let s = String::from(\"foo\");\n    ///\n    /// assert_eq!(\"foo\", s.as_str());\n    /// ```\n    #[inline]\n    #[stable(feature = \"string_as_str\", since = \"1.7.0\")]\n    pub fn as_str(&self) -> &str {\n        self\n    }\n\n    /// Converts a `String` into a mutable string slice.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let mut s = String::from(\"foobar\");\n    /// let s_mut_str = s.as_mut_str();\n    ///\n    /// s_mut_str.make_ascii_uppercase();\n    ///\n    /// assert_eq!(\"FOOBAR\", s_mut_str);\n    /// ```\n    #[inline]\n    #[stable(feature = \"string_as_str\", since = \"1.7.0\")]\n    pub fn as_mut_str(&mut self) -> &mut str {\n        self\n    }\n\n    /// Appends a given string slice onto the end of this `String`.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let mut s = String::from(\"foo\");\n    ///\n    /// s.push_str(\"bar\");\n    ///\n    /// assert_eq!(\"foobar\", s);\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn push_str(&mut self, string: &str) {\n        self.vec.extend_from_slice(string.as_bytes())\n    }\n\n    /// Returns this `String`'s capacity, in bytes.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let s = String::with_capacity(10);\n    ///\n    /// assert!(s.capacity() >= 10);\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn capacity(&self) -> usize {\n        self.vec.capacity()\n    }\n\n    /// Ensures that this `String`'s capacity is at least `additional` bytes\n    /// larger than its length.\n    ///\n    /// The capacity may be increased by more than `additional` bytes if it\n    /// chooses, to prevent frequent reallocations.\n    ///\n    /// If you do not want this \"at least\" behavior, see the [`reserve_exact`]\n    /// method.\n    ///\n    /// # Panics\n    ///\n    /// Panics if the new capacity overflows [`usize`].\n    ///\n    /// [`reserve_exact`]: String::reserve_exact\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let mut s = String::new();\n    ///\n    /// s.reserve(10);\n    ///\n    /// assert!(s.capacity() >= 10);\n    /// ```\n    ///\n    /// This may not actually increase the capacity:\n    ///\n    /// ```\n    /// let mut s = String::with_capacity(10);\n    /// s.push('a');\n    /// s.push('b');\n    ///\n    /// // s now has a length of 2 and a capacity of 10\n    /// assert_eq!(2, s.len());\n    /// assert_eq!(10, s.capacity());\n    ///\n    /// // Since we already have an extra 8 capacity, calling this...\n    /// s.reserve(8);\n    ///\n    /// // ... doesn't actually increase.\n    /// assert_eq!(10, s.capacity());\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn reserve(&mut self, additional: usize) {\n        self.vec.reserve(additional)\n    }\n\n    /// Ensures that this `String`'s capacity is `additional` bytes\n    /// larger than its length.\n    ///\n    /// Consider using the [`reserve`] method unless you absolutely know\n    /// better than the allocator.\n    ///\n    /// [`reserve`]: String::reserve\n    ///\n    /// # Panics\n    ///\n    /// Panics if the new capacity overflows `usize`.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let mut s = String::new();\n    ///\n    /// s.reserve_exact(10);\n    ///\n    /// assert!(s.capacity() >= 10);\n    /// ```\n    ///\n    /// This may not actually increase the capacity:\n    ///\n    /// ```\n    /// let mut s = String::with_capacity(10);\n    /// s.push('a');\n    /// s.push('b');\n    ///\n    /// // s now has a length of 2 and a capacity of 10\n    /// assert_eq!(2, s.len());\n    /// assert_eq!(10, s.capacity());\n    ///\n    /// // Since we already have an extra 8 capacity, calling this...\n    /// s.reserve_exact(8);\n    ///\n    /// // ... doesn't actually increase.\n    /// assert_eq!(10, s.capacity());\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn reserve_exact(&mut self, additional: usize) {\n        self.vec.reserve_exact(additional)\n    }\n\n    /// Tries to reserve capacity for at least `additional` more elements to be inserted\n    /// in the given `String`. The collection may reserve more space to avoid\n    /// frequent reallocations. After calling `reserve`, capacity will be\n    /// greater than or equal to `self.len() + additional`. Does nothing if\n    /// capacity is already sufficient.\n    ///\n    /// # Errors\n    ///\n    /// If the capacity overflows, or the allocator reports a failure, then an error\n    /// is returned.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(try_reserve)]\n    /// use std::collections::TryReserveError;\n    ///\n    /// fn process_data(data: &str) -> Result<String, TryReserveError> {\n    ///     let mut output = String::new();\n    ///\n    ///     // Pre-reserve the memory, exiting if we can't\n    ///     output.try_reserve(data.len())?;\n    ///\n    ///     // Now we know this can't OOM in the middle of our complex work\n    ///     output.push_str(data);\n    ///\n    ///     Ok(output)\n    /// }\n    /// # process_data(\"rust\").expect(\"why is the test harness OOMing on 4 bytes?\");\n    /// ```\n    #[unstable(feature = \"try_reserve\", reason = \"new API\", issue = \"48043\")]\n    pub fn try_reserve(&mut self, additional: usize) -> Result<(), TryReserveError> {\n        self.vec.try_reserve(additional)\n    }\n\n    /// Tries to reserve the minimum capacity for exactly `additional` more elements to\n    /// be inserted in the given `String`. After calling `reserve_exact`,\n    /// capacity will be greater than or equal to `self.len() + additional`.\n    /// Does nothing if the capacity is already sufficient.\n    ///\n    /// Note that the allocator may give the collection more space than it\n    /// requests. Therefore, capacity can not be relied upon to be precisely\n    /// minimal. Prefer `reserve` if future insertions are expected.\n    ///\n    /// # Errors\n    ///\n    /// If the capacity overflows, or the allocator reports a failure, then an error\n    /// is returned.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(try_reserve)]\n    /// use std::collections::TryReserveError;\n    ///\n    /// fn process_data(data: &str) -> Result<String, TryReserveError> {\n    ///     let mut output = String::new();\n    ///\n    ///     // Pre-reserve the memory, exiting if we can't\n    ///     output.try_reserve(data.len())?;\n    ///\n    ///     // Now we know this can't OOM in the middle of our complex work\n    ///     output.push_str(data);\n    ///\n    ///     Ok(output)\n    /// }\n    /// # process_data(\"rust\").expect(\"why is the test harness OOMing on 4 bytes?\");\n    /// ```\n    #[unstable(feature = \"try_reserve\", reason = \"new API\", issue = \"48043\")]\n    pub fn try_reserve_exact(&mut self, additional: usize) -> Result<(), TryReserveError> {\n        self.vec.try_reserve_exact(additional)\n    }\n\n    /// Shrinks the capacity of this `String` to match its length.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let mut s = String::from(\"foo\");\n    ///\n    /// s.reserve(100);\n    /// assert!(s.capacity() >= 100);\n    ///\n    /// s.shrink_to_fit();\n    /// assert_eq!(3, s.capacity());\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn shrink_to_fit(&mut self) {\n        self.vec.shrink_to_fit()\n    }\n\n    /// Shrinks the capacity of this `String` with a lower bound.\n    ///\n    /// The capacity will remain at least as large as both the length\n    /// and the supplied value.\n    ///\n    /// If the current capacity is less than the lower limit, this is a no-op.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(shrink_to)]\n    /// let mut s = String::from(\"foo\");\n    ///\n    /// s.reserve(100);\n    /// assert!(s.capacity() >= 100);\n    ///\n    /// s.shrink_to(10);\n    /// assert!(s.capacity() >= 10);\n    /// s.shrink_to(0);\n    /// assert!(s.capacity() >= 3);\n    /// ```\n    #[inline]\n    #[unstable(feature = \"shrink_to\", reason = \"new API\", issue = \"56431\")]\n    pub fn shrink_to(&mut self, min_capacity: usize) {\n        self.vec.shrink_to(min_capacity)\n    }\n\n    /// Appends the given [`char`] to the end of this `String`.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let mut s = String::from(\"abc\");\n    ///\n    /// s.push('1');\n    /// s.push('2');\n    /// s.push('3');\n    ///\n    /// assert_eq!(\"abc123\", s);\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn push(&mut self, ch: char) {\n        match ch.len_utf8() {\n            1 => self.vec.push(ch as u8),\n            _ => self.vec.extend_from_slice(ch.encode_utf8(&mut [0; 4]).as_bytes()),\n        }\n    }\n\n    /// Returns a byte slice of this `String`'s contents.\n    ///\n    /// The inverse of this method is [`from_utf8`].\n    ///\n    /// [`from_utf8`]: String::from_utf8\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let s = String::from(\"hello\");\n    ///\n    /// assert_eq!(&[104, 101, 108, 108, 111], s.as_bytes());\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn as_bytes(&self) -> &[u8] {\n        &self.vec\n    }\n\n    /// Shortens this `String` to the specified length.\n    ///\n    /// If `new_len` is greater than the string's current length, this has no\n    /// effect.\n    ///\n    /// Note that this method has no effect on the allocated capacity\n    /// of the string\n    ///\n    /// # Panics\n    ///\n    /// Panics if `new_len` does not lie on a [`char`] boundary.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let mut s = String::from(\"hello\");\n    ///\n    /// s.truncate(2);\n    ///\n    /// assert_eq!(\"he\", s);\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn truncate(&mut self, new_len: usize) {\n        if new_len <= self.len() {\n            assert!(self.is_char_boundary(new_len));\n            self.vec.truncate(new_len)\n        }\n    }\n\n    /// Removes the last character from the string buffer and returns it.\n    ///\n    /// Returns [`None`] if this `String` is empty.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let mut s = String::from(\"foo\");\n    ///\n    /// assert_eq!(s.pop(), Some('o'));\n    /// assert_eq!(s.pop(), Some('o'));\n    /// assert_eq!(s.pop(), Some('f'));\n    ///\n    /// assert_eq!(s.pop(), None);\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn pop(&mut self) -> Option<char> {\n        let ch = self.chars().rev().next()?;\n        let newlen = self.len() - ch.len_utf8();\n        unsafe {\n            self.vec.set_len(newlen);\n        }\n        Some(ch)\n    }\n\n    /// Removes a [`char`] from this `String` at a byte position and returns it.\n    ///\n    /// This is an *O*(*n*) operation, as it requires copying every element in the\n    /// buffer.\n    ///\n    /// # Panics\n    ///\n    /// Panics if `idx` is larger than or equal to the `String`'s length,\n    /// or if it does not lie on a [`char`] boundary.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let mut s = String::from(\"foo\");\n    ///\n    /// assert_eq!(s.remove(0), 'f');\n    /// assert_eq!(s.remove(1), 'o');\n    /// assert_eq!(s.remove(0), 'o');\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn remove(&mut self, idx: usize) -> char {\n        let ch = match self[idx..].chars().next() {\n            Some(ch) => ch,\n            None => panic!(\"cannot remove a char from the end of a string\"),\n        };\n\n        let next = idx + ch.len_utf8();\n        let len = self.len();\n        unsafe {\n            ptr::copy(self.vec.as_ptr().add(next), self.vec.as_mut_ptr().add(idx), len - next);\n            self.vec.set_len(len - (next - idx));\n        }\n        ch\n    }\n\n    /// Remove all matches of pattern `pat` in the `String`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(string_remove_matches)]\n    /// let mut s = String::from(\"Trees are not green, the sky is not blue.\");\n    /// s.remove_matches(\"not \");\n    /// assert_eq!(\"Trees are green, the sky is blue.\", s);\n    /// ```\n    ///\n    /// Matches will be detected and removed iteratively, so in cases where\n    /// patterns overlap, only the first pattern will be removed:\n    ///\n    /// ```\n    /// #![feature(string_remove_matches)]\n    /// let mut s = String::from(\"banana\");\n    /// s.remove_matches(\"ana\");\n    /// assert_eq!(\"bna\", s);\n    /// ```\n    #[unstable(feature = \"string_remove_matches\", reason = \"new API\", issue = \"72826\")]\n    pub fn remove_matches<'a, P>(&'a mut self, pat: P)\n    where\n        P: for<'x> Pattern<'x>,\n    {\n        use core::str::pattern::Searcher;\n\n        let matches = {\n            let mut searcher = pat.into_searcher(self);\n            let mut matches = Vec::new();\n\n            while let Some(m) = searcher.next_match() {\n                matches.push(m);\n            }\n\n            matches\n        };\n\n        let len = self.len();\n        let mut shrunk_by = 0;\n\n        // SAFETY: start and end will be on utf8 byte boundaries per\n        // the Searcher docs\n        unsafe {\n            for (start, end) in matches {\n                ptr::copy(\n                    self.vec.as_mut_ptr().add(end - shrunk_by),\n                    self.vec.as_mut_ptr().add(start - shrunk_by),\n                    len - end,\n                );\n                shrunk_by += end - start;\n            }\n            self.vec.set_len(len - shrunk_by);\n        }\n    }\n\n    /// Retains only the characters specified by the predicate.\n    ///\n    /// In other words, remove all characters `c` such that `f(c)` returns `false`.\n    /// This method operates in place, visiting each character exactly once in the\n    /// original order, and preserves the order of the retained characters.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut s = String::from(\"f_o_ob_ar\");\n    ///\n    /// s.retain(|c| c != '_');\n    ///\n    /// assert_eq!(s, \"foobar\");\n    /// ```\n    ///\n    /// The exact order may be useful for tracking external state, like an index.\n    ///\n    /// ```\n    /// let mut s = String::from(\"abcde\");\n    /// let keep = [false, true, true, false, true];\n    /// let mut i = 0;\n    /// s.retain(|_| (keep[i], i += 1).0);\n    /// assert_eq!(s, \"bce\");\n    /// ```\n    #[inline]\n    #[stable(feature = \"string_retain\", since = \"1.26.0\")]\n    pub fn retain<F>(&mut self, mut f: F)\n    where\n        F: FnMut(char) -> bool,\n    {\n        struct SetLenOnDrop<'a> {\n            s: &'a mut String,\n            idx: usize,\n            del_bytes: usize,\n        }\n\n        impl<'a> Drop for SetLenOnDrop<'a> {\n            fn drop(&mut self) {\n                let new_len = self.idx - self.del_bytes;\n                debug_assert!(new_len <= self.s.len());\n                unsafe { self.s.vec.set_len(new_len) };\n            }\n        }\n\n        let len = self.len();\n        let mut guard = SetLenOnDrop { s: self, idx: 0, del_bytes: 0 };\n\n        while guard.idx < len {\n            let ch = unsafe { guard.s.get_unchecked(guard.idx..len).chars().next().unwrap() };\n            let ch_len = ch.len_utf8();\n\n            if !f(ch) {\n                guard.del_bytes += ch_len;\n            } else if guard.del_bytes > 0 {\n                unsafe {\n                    ptr::copy(\n                        guard.s.vec.as_ptr().add(guard.idx),\n                        guard.s.vec.as_mut_ptr().add(guard.idx - guard.del_bytes),\n                        ch_len,\n                    );\n                }\n            }\n\n            // Point idx to the next char\n            guard.idx += ch_len;\n        }\n\n        drop(guard);\n    }\n\n    /// Inserts a character into this `String` at a byte position.\n    ///\n    /// This is an *O*(*n*) operation as it requires copying every element in the\n    /// buffer.\n    ///\n    /// # Panics\n    ///\n    /// Panics if `idx` is larger than the `String`'s length, or if it does not\n    /// lie on a [`char`] boundary.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let mut s = String::with_capacity(3);\n    ///\n    /// s.insert(0, 'f');\n    /// s.insert(1, 'o');\n    /// s.insert(2, 'o');\n    ///\n    /// assert_eq!(\"foo\", s);\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn insert(&mut self, idx: usize, ch: char) {\n        assert!(self.is_char_boundary(idx));\n        let mut bits = [0; 4];\n        let bits = ch.encode_utf8(&mut bits).as_bytes();\n\n        unsafe {\n            self.insert_bytes(idx, bits);\n        }\n    }\n\n    unsafe fn insert_bytes(&mut self, idx: usize, bytes: &[u8]) {\n        let len = self.len();\n        let amt = bytes.len();\n        self.vec.reserve(amt);\n\n        unsafe {\n            ptr::copy(self.vec.as_ptr().add(idx), self.vec.as_mut_ptr().add(idx + amt), len - idx);\n            ptr::copy(bytes.as_ptr(), self.vec.as_mut_ptr().add(idx), amt);\n            self.vec.set_len(len + amt);\n        }\n    }\n\n    /// Inserts a string slice into this `String` at a byte position.\n    ///\n    /// This is an *O*(*n*) operation as it requires copying every element in the\n    /// buffer.\n    ///\n    /// # Panics\n    ///\n    /// Panics if `idx` is larger than the `String`'s length, or if it does not\n    /// lie on a [`char`] boundary.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let mut s = String::from(\"bar\");\n    ///\n    /// s.insert_str(0, \"foo\");\n    ///\n    /// assert_eq!(\"foobar\", s);\n    /// ```\n    #[inline]\n    #[stable(feature = \"insert_str\", since = \"1.16.0\")]\n    pub fn insert_str(&mut self, idx: usize, string: &str) {\n        assert!(self.is_char_boundary(idx));\n\n        unsafe {\n            self.insert_bytes(idx, string.as_bytes());\n        }\n    }\n\n    /// Returns a mutable reference to the contents of this `String`.\n    ///\n    /// # Safety\n    ///\n    /// This function is unsafe because it does not check that the bytes passed\n    /// to it are valid UTF-8. If this constraint is violated, it may cause\n    /// memory unsafety issues with future users of the `String`, as the rest of\n    /// the standard library assumes that `String`s are valid UTF-8.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let mut s = String::from(\"hello\");\n    ///\n    /// unsafe {\n    ///     let vec = s.as_mut_vec();\n    ///     assert_eq!(&[104, 101, 108, 108, 111][..], &vec[..]);\n    ///\n    ///     vec.reverse();\n    /// }\n    /// assert_eq!(s, \"olleh\");\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub unsafe fn as_mut_vec(&mut self) -> &mut Vec<u8> {\n        &mut self.vec\n    }\n\n    /// Returns the length of this `String`, in bytes, not [`char`]s or\n    /// graphemes. In other words, it may not be what a human considers the\n    /// length of the string.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let a = String::from(\"foo\");\n    /// assert_eq!(a.len(), 3);\n    ///\n    /// let fancy_f = String::from(\"ƒoo\");\n    /// assert_eq!(fancy_f.len(), 4);\n    /// assert_eq!(fancy_f.chars().count(), 3);\n    /// ```\n    #[doc(alias = \"length\")]\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn len(&self) -> usize {\n        self.vec.len()\n    }\n\n    /// Returns `true` if this `String` has a length of zero, and `false` otherwise.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let mut v = String::new();\n    /// assert!(v.is_empty());\n    ///\n    /// v.push('a');\n    /// assert!(!v.is_empty());\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn is_empty(&self) -> bool {\n        self.len() == 0\n    }\n\n    /// Splits the string into two at the given byte index.\n    ///\n    /// Returns a newly allocated `String`. `self` contains bytes `[0, at)`, and\n    /// the returned `String` contains bytes `[at, len)`. `at` must be on the\n    /// boundary of a UTF-8 code point.\n    ///\n    /// Note that the capacity of `self` does not change.\n    ///\n    /// # Panics\n    ///\n    /// Panics if `at` is not on a `UTF-8` code point boundary, or if it is beyond the last\n    /// code point of the string.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// # fn main() {\n    /// let mut hello = String::from(\"Hello, World!\");\n    /// let world = hello.split_off(7);\n    /// assert_eq!(hello, \"Hello, \");\n    /// assert_eq!(world, \"World!\");\n    /// # }\n    /// ```\n    #[inline]\n    #[stable(feature = \"string_split_off\", since = \"1.16.0\")]\n    #[must_use = \"use `.truncate()` if you don't need the other half\"]\n    pub fn split_off(&mut self, at: usize) -> String {\n        assert!(self.is_char_boundary(at));\n        let other = self.vec.split_off(at);\n        unsafe { String::from_utf8_unchecked(other) }\n    }\n\n    /// Truncates this `String`, removing all contents.\n    ///\n    /// While this means the `String` will have a length of zero, it does not\n    /// touch its capacity.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let mut s = String::from(\"foo\");\n    ///\n    /// s.clear();\n    ///\n    /// assert!(s.is_empty());\n    /// assert_eq!(0, s.len());\n    /// assert_eq!(3, s.capacity());\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn clear(&mut self) {\n        self.vec.clear()\n    }\n\n    /// Creates a draining iterator that removes the specified range in the `String`\n    /// and yields the removed `chars`.\n    ///\n    /// Note: The element range is removed even if the iterator is not\n    /// consumed until the end.\n    ///\n    /// # Panics\n    ///\n    /// Panics if the starting point or end point do not lie on a [`char`]\n    /// boundary, or if they're out of bounds.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let mut s = String::from(\"α is alpha, β is beta\");\n    /// let beta_offset = s.find('β').unwrap_or(s.len());\n    ///\n    /// // Remove the range up until the β from the string\n    /// let t: String = s.drain(..beta_offset).collect();\n    /// assert_eq!(t, \"α is alpha, \");\n    /// assert_eq!(s, \"β is beta\");\n    ///\n    /// // A full range clears the string\n    /// s.drain(..);\n    /// assert_eq!(s, \"\");\n    /// ```\n    #[stable(feature = \"drain\", since = \"1.6.0\")]\n    pub fn drain<R>(&mut self, range: R) -> Drain<'_>\n    where\n        R: RangeBounds<usize>,\n    {\n        // Memory safety\n        //\n        // The String version of Drain does not have the memory safety issues\n        // of the vector version. The data is just plain bytes.\n        // Because the range removal happens in Drop, if the Drain iterator is leaked,\n        // the removal will not happen.\n        let Range { start, end } = slice::range(range, ..self.len());\n        assert!(self.is_char_boundary(start));\n        assert!(self.is_char_boundary(end));\n\n        // Take out two simultaneous borrows. The &mut String won't be accessed\n        // until iteration is over, in Drop.\n        let self_ptr = self as *mut _;\n        // SAFETY: `slice::range` and `is_char_boundary` do the appropriate bounds checks.\n        let chars_iter = unsafe { self.get_unchecked(start..end) }.chars();\n\n        Drain { start, end, iter: chars_iter, string: self_ptr }\n    }\n\n    /// Removes the specified range in the string,\n    /// and replaces it with the given string.\n    /// The given string doesn't need to be the same length as the range.\n    ///\n    /// # Panics\n    ///\n    /// Panics if the starting point or end point do not lie on a [`char`]\n    /// boundary, or if they're out of bounds.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let mut s = String::from(\"α is alpha, β is beta\");\n    /// let beta_offset = s.find('β').unwrap_or(s.len());\n    ///\n    /// // Replace the range up until the β from the string\n    /// s.replace_range(..beta_offset, \"Α is capital alpha; \");\n    /// assert_eq!(s, \"Α is capital alpha; β is beta\");\n    /// ```\n    #[stable(feature = \"splice\", since = \"1.27.0\")]\n    pub fn replace_range<R>(&mut self, range: R, replace_with: &str)\n    where\n        R: RangeBounds<usize>,\n    {\n        // Memory safety\n        //\n        // Replace_range does not have the memory safety issues of a vector Splice.\n        // of the vector version. The data is just plain bytes.\n\n        // WARNING: Inlining this variable would be unsound (#81138)\n        let start = range.start_bound();\n        match start {\n            Included(&n) => assert!(self.is_char_boundary(n)),\n            Excluded(&n) => assert!(self.is_char_boundary(n + 1)),\n            Unbounded => {}\n        };\n        // WARNING: Inlining this variable would be unsound (#81138)\n        let end = range.end_bound();\n        match end {\n            Included(&n) => assert!(self.is_char_boundary(n + 1)),\n            Excluded(&n) => assert!(self.is_char_boundary(n)),\n            Unbounded => {}\n        };\n\n        // Using `range` again would be unsound (#81138)\n        // We assume the bounds reported by `range` remain the same, but\n        // an adversarial implementation could change between calls\n        unsafe { self.as_mut_vec() }.splice((start, end), replace_with.bytes());\n    }\n\n    /// Converts this `String` into a [`Box`]`<`[`str`]`>`.\n    ///\n    /// This will drop any excess capacity.\n    ///\n    /// [`str`]: prim@str\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let s = String::from(\"hello\");\n    ///\n    /// let b = s.into_boxed_str();\n    /// ```\n    #[stable(feature = \"box_str\", since = \"1.4.0\")]\n    #[inline]\n    pub fn into_boxed_str(self) -> Box<str> {\n        let slice = self.vec.into_boxed_slice();\n        unsafe { from_boxed_utf8_unchecked(slice) }\n    }\n}\n\nimpl FromUtf8Error {\n    /// Returns a slice of [`u8`]s bytes that were attempted to convert to a `String`.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// // some invalid bytes, in a vector\n    /// let bytes = vec![0, 159];\n    ///\n    /// let value = String::from_utf8(bytes);\n    ///\n    /// assert_eq!(&[0, 159], value.unwrap_err().as_bytes());\n    /// ```\n    #[stable(feature = \"from_utf8_error_as_bytes\", since = \"1.26.0\")]\n    pub fn as_bytes(&self) -> &[u8] {\n        &self.bytes[..]\n    }\n\n    /// Returns the bytes that were attempted to convert to a `String`.\n    ///\n    /// This method is carefully constructed to avoid allocation. It will\n    /// consume the error, moving out the bytes, so that a copy of the bytes\n    /// does not need to be made.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// // some invalid bytes, in a vector\n    /// let bytes = vec![0, 159];\n    ///\n    /// let value = String::from_utf8(bytes);\n    ///\n    /// assert_eq!(vec![0, 159], value.unwrap_err().into_bytes());\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn into_bytes(self) -> Vec<u8> {\n        self.bytes\n    }\n\n    /// Fetch a `Utf8Error` to get more details about the conversion failure.\n    ///\n    /// The [`Utf8Error`] type provided by [`std::str`] represents an error that may\n    /// occur when converting a slice of [`u8`]s to a [`&str`]. In this sense, it's\n    /// an analogue to `FromUtf8Error`. See its documentation for more details\n    /// on using it.\n    ///\n    /// [`std::str`]: core::str\n    /// [`&str`]: prim@str\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// // some invalid bytes, in a vector\n    /// let bytes = vec![0, 159];\n    ///\n    /// let error = String::from_utf8(bytes).unwrap_err().utf8_error();\n    ///\n    /// // the first byte is invalid here\n    /// assert_eq!(1, error.valid_up_to());\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn utf8_error(&self) -> Utf8Error {\n        self.error\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl fmt::Display for FromUtf8Error {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        fmt::Display::fmt(&self.error, f)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl fmt::Display for FromUtf16Error {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        fmt::Display::fmt(\"invalid utf-16: lone surrogate found\", f)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl Clone for String {\n    fn clone(&self) -> Self {\n        String { vec: self.vec.clone() }\n    }\n\n    fn clone_from(&mut self, source: &Self) {\n        self.vec.clone_from(&source.vec);\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl FromIterator<char> for String {\n    fn from_iter<I: IntoIterator<Item = char>>(iter: I) -> String {\n        let mut buf = String::new();\n        buf.extend(iter);\n        buf\n    }\n}\n\n#[stable(feature = \"string_from_iter_by_ref\", since = \"1.17.0\")]\nimpl<'a> FromIterator<&'a char> for String {\n    fn from_iter<I: IntoIterator<Item = &'a char>>(iter: I) -> String {\n        let mut buf = String::new();\n        buf.extend(iter);\n        buf\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a> FromIterator<&'a str> for String {\n    fn from_iter<I: IntoIterator<Item = &'a str>>(iter: I) -> String {\n        let mut buf = String::new();\n        buf.extend(iter);\n        buf\n    }\n}\n\n#[stable(feature = \"extend_string\", since = \"1.4.0\")]\nimpl FromIterator<String> for String {\n    fn from_iter<I: IntoIterator<Item = String>>(iter: I) -> String {\n        let mut iterator = iter.into_iter();\n\n        // Because we're iterating over `String`s, we can avoid at least\n        // one allocation by getting the first string from the iterator\n        // and appending to it all the subsequent strings.\n        match iterator.next() {\n            None => String::new(),\n            Some(mut buf) => {\n                buf.extend(iterator);\n                buf\n            }\n        }\n    }\n}\n\n#[stable(feature = \"box_str2\", since = \"1.45.0\")]\nimpl FromIterator<Box<str>> for String {\n    fn from_iter<I: IntoIterator<Item = Box<str>>>(iter: I) -> String {\n        let mut buf = String::new();\n        buf.extend(iter);\n        buf\n    }\n}\n\n#[stable(feature = \"herd_cows\", since = \"1.19.0\")]\nimpl<'a> FromIterator<Cow<'a, str>> for String {\n    fn from_iter<I: IntoIterator<Item = Cow<'a, str>>>(iter: I) -> String {\n        let mut iterator = iter.into_iter();\n\n        // Because we're iterating over CoWs, we can (potentially) avoid at least\n        // one allocation by getting the first item and appending to it all the\n        // subsequent items.\n        match iterator.next() {\n            None => String::new(),\n            Some(cow) => {\n                let mut buf = cow.into_owned();\n                buf.extend(iterator);\n                buf\n            }\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl Extend<char> for String {\n    fn extend<I: IntoIterator<Item = char>>(&mut self, iter: I) {\n        let iterator = iter.into_iter();\n        let (lower_bound, _) = iterator.size_hint();\n        self.reserve(lower_bound);\n        iterator.for_each(move |c| self.push(c));\n    }\n\n    #[inline]\n    fn extend_one(&mut self, c: char) {\n        self.push(c);\n    }\n\n    #[inline]\n    fn extend_reserve(&mut self, additional: usize) {\n        self.reserve(additional);\n    }\n}\n\n#[stable(feature = \"extend_ref\", since = \"1.2.0\")]\nimpl<'a> Extend<&'a char> for String {\n    fn extend<I: IntoIterator<Item = &'a char>>(&mut self, iter: I) {\n        self.extend(iter.into_iter().cloned());\n    }\n\n    #[inline]\n    fn extend_one(&mut self, &c: &'a char) {\n        self.push(c);\n    }\n\n    #[inline]\n    fn extend_reserve(&mut self, additional: usize) {\n        self.reserve(additional);\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a> Extend<&'a str> for String {\n    fn extend<I: IntoIterator<Item = &'a str>>(&mut self, iter: I) {\n        iter.into_iter().for_each(move |s| self.push_str(s));\n    }\n\n    #[inline]\n    fn extend_one(&mut self, s: &'a str) {\n        self.push_str(s);\n    }\n}\n\n#[stable(feature = \"box_str2\", since = \"1.45.0\")]\nimpl Extend<Box<str>> for String {\n    fn extend<I: IntoIterator<Item = Box<str>>>(&mut self, iter: I) {\n        iter.into_iter().for_each(move |s| self.push_str(&s));\n    }\n}\n\n#[stable(feature = \"extend_string\", since = \"1.4.0\")]\nimpl Extend<String> for String {\n    fn extend<I: IntoIterator<Item = String>>(&mut self, iter: I) {\n        iter.into_iter().for_each(move |s| self.push_str(&s));\n    }\n\n    #[inline]\n    fn extend_one(&mut self, s: String) {\n        self.push_str(&s);\n    }\n}\n\n#[stable(feature = \"herd_cows\", since = \"1.19.0\")]\nimpl<'a> Extend<Cow<'a, str>> for String {\n    fn extend<I: IntoIterator<Item = Cow<'a, str>>>(&mut self, iter: I) {\n        iter.into_iter().for_each(move |s| self.push_str(&s));\n    }\n\n    #[inline]\n    fn extend_one(&mut self, s: Cow<'a, str>) {\n        self.push_str(&s);\n    }\n}\n\n/// A convenience impl that delegates to the impl for `&str`.\n///\n/// # Examples\n///\n/// ```\n/// assert_eq!(String::from(\"Hello world\").find(\"world\"), Some(6));\n/// ```\n#[unstable(\n    feature = \"pattern\",\n    reason = \"API not fully fleshed out and ready to be stabilized\",\n    issue = \"27721\"\n)]\nimpl<'a, 'b> Pattern<'a> for &'b String {\n    type Searcher = <&'b str as Pattern<'a>>::Searcher;\n\n    fn into_searcher(self, haystack: &'a str) -> <&'b str as Pattern<'a>>::Searcher {\n        self[..].into_searcher(haystack)\n    }\n\n    #[inline]\n    fn is_contained_in(self, haystack: &'a str) -> bool {\n        self[..].is_contained_in(haystack)\n    }\n\n    #[inline]\n    fn is_prefix_of(self, haystack: &'a str) -> bool {\n        self[..].is_prefix_of(haystack)\n    }\n\n    #[inline]\n    fn strip_prefix_of(self, haystack: &'a str) -> Option<&'a str> {\n        self[..].strip_prefix_of(haystack)\n    }\n\n    #[inline]\n    fn is_suffix_of(self, haystack: &'a str) -> bool {\n        self[..].is_suffix_of(haystack)\n    }\n\n    #[inline]\n    fn strip_suffix_of(self, haystack: &'a str) -> Option<&'a str> {\n        self[..].strip_suffix_of(haystack)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl PartialEq for String {\n    #[inline]\n    fn eq(&self, other: &String) -> bool {\n        PartialEq::eq(&self[..], &other[..])\n    }\n    #[inline]\n    fn ne(&self, other: &String) -> bool {\n        PartialEq::ne(&self[..], &other[..])\n    }\n}\n\nmacro_rules! impl_eq {\n    ($lhs:ty, $rhs: ty) => {\n        #[stable(feature = \"rust1\", since = \"1.0.0\")]\n        #[allow(unused_lifetimes)]\n        impl<'a, 'b> PartialEq<$rhs> for $lhs {\n            #[inline]\n            fn eq(&self, other: &$rhs) -> bool {\n                PartialEq::eq(&self[..], &other[..])\n            }\n            #[inline]\n            fn ne(&self, other: &$rhs) -> bool {\n                PartialEq::ne(&self[..], &other[..])\n            }\n        }\n\n        #[stable(feature = \"rust1\", since = \"1.0.0\")]\n        #[allow(unused_lifetimes)]\n        impl<'a, 'b> PartialEq<$lhs> for $rhs {\n            #[inline]\n            fn eq(&self, other: &$lhs) -> bool {\n                PartialEq::eq(&self[..], &other[..])\n            }\n            #[inline]\n            fn ne(&self, other: &$lhs) -> bool {\n                PartialEq::ne(&self[..], &other[..])\n            }\n        }\n    };\n}\n\nimpl_eq! { String, str }\nimpl_eq! { String, &'a str }\nimpl_eq! { Cow<'a, str>, str }\nimpl_eq! { Cow<'a, str>, &'b str }\nimpl_eq! { Cow<'a, str>, String }\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl Default for String {\n    /// Creates an empty `String`.\n    #[inline]\n    fn default() -> String {\n        String::new()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl fmt::Display for String {\n    #[inline]\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        fmt::Display::fmt(&**self, f)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl fmt::Debug for String {\n    #[inline]\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        fmt::Debug::fmt(&**self, f)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl hash::Hash for String {\n    #[inline]\n    fn hash<H: hash::Hasher>(&self, hasher: &mut H) {\n        (**self).hash(hasher)\n    }\n}\n\n/// Implements the `+` operator for concatenating two strings.\n///\n/// This consumes the `String` on the left-hand side and re-uses its buffer (growing it if\n/// necessary). This is done to avoid allocating a new `String` and copying the entire contents on\n/// every operation, which would lead to *O*(*n*^2) running time when building an *n*-byte string by\n/// repeated concatenation.\n///\n/// The string on the right-hand side is only borrowed; its contents are copied into the returned\n/// `String`.\n///\n/// # Examples\n///\n/// Concatenating two `String`s takes the first by value and borrows the second:\n///\n/// ```\n/// let a = String::from(\"hello\");\n/// let b = String::from(\" world\");\n/// let c = a + &b;\n/// // `a` is moved and can no longer be used here.\n/// ```\n///\n/// If you want to keep using the first `String`, you can clone it and append to the clone instead:\n///\n/// ```\n/// let a = String::from(\"hello\");\n/// let b = String::from(\" world\");\n/// let c = a.clone() + &b;\n/// // `a` is still valid here.\n/// ```\n///\n/// Concatenating `&str` slices can be done by converting the first to a `String`:\n///\n/// ```\n/// let a = \"hello\";\n/// let b = \" world\";\n/// let c = a.to_string() + b;\n/// ```\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl Add<&str> for String {\n    type Output = String;\n\n    #[inline]\n    fn add(mut self, other: &str) -> String {\n        self.push_str(other);\n        self\n    }\n}\n\n/// Implements the `+=` operator for appending to a `String`.\n///\n/// This has the same behavior as the [`push_str`][String::push_str] method.\n#[stable(feature = \"stringaddassign\", since = \"1.12.0\")]\nimpl AddAssign<&str> for String {\n    #[inline]\n    fn add_assign(&mut self, other: &str) {\n        self.push_str(other);\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl ops::Index<ops::Range<usize>> for String {\n    type Output = str;\n\n    #[inline]\n    fn index(&self, index: ops::Range<usize>) -> &str {\n        &self[..][index]\n    }\n}\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl ops::Index<ops::RangeTo<usize>> for String {\n    type Output = str;\n\n    #[inline]\n    fn index(&self, index: ops::RangeTo<usize>) -> &str {\n        &self[..][index]\n    }\n}\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl ops::Index<ops::RangeFrom<usize>> for String {\n    type Output = str;\n\n    #[inline]\n    fn index(&self, index: ops::RangeFrom<usize>) -> &str {\n        &self[..][index]\n    }\n}\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl ops::Index<ops::RangeFull> for String {\n    type Output = str;\n\n    #[inline]\n    fn index(&self, _index: ops::RangeFull) -> &str {\n        unsafe { str::from_utf8_unchecked(&self.vec) }\n    }\n}\n#[stable(feature = \"inclusive_range\", since = \"1.26.0\")]\nimpl ops::Index<ops::RangeInclusive<usize>> for String {\n    type Output = str;\n\n    #[inline]\n    fn index(&self, index: ops::RangeInclusive<usize>) -> &str {\n        Index::index(&**self, index)\n    }\n}\n#[stable(feature = \"inclusive_range\", since = \"1.26.0\")]\nimpl ops::Index<ops::RangeToInclusive<usize>> for String {\n    type Output = str;\n\n    #[inline]\n    fn index(&self, index: ops::RangeToInclusive<usize>) -> &str {\n        Index::index(&**self, index)\n    }\n}\n\n#[stable(feature = \"derefmut_for_string\", since = \"1.3.0\")]\nimpl ops::IndexMut<ops::Range<usize>> for String {\n    #[inline]\n    fn index_mut(&mut self, index: ops::Range<usize>) -> &mut str {\n        &mut self[..][index]\n    }\n}\n#[stable(feature = \"derefmut_for_string\", since = \"1.3.0\")]\nimpl ops::IndexMut<ops::RangeTo<usize>> for String {\n    #[inline]\n    fn index_mut(&mut self, index: ops::RangeTo<usize>) -> &mut str {\n        &mut self[..][index]\n    }\n}\n#[stable(feature = \"derefmut_for_string\", since = \"1.3.0\")]\nimpl ops::IndexMut<ops::RangeFrom<usize>> for String {\n    #[inline]\n    fn index_mut(&mut self, index: ops::RangeFrom<usize>) -> &mut str {\n        &mut self[..][index]\n    }\n}\n#[stable(feature = \"derefmut_for_string\", since = \"1.3.0\")]\nimpl ops::IndexMut<ops::RangeFull> for String {\n    #[inline]\n    fn index_mut(&mut self, _index: ops::RangeFull) -> &mut str {\n        unsafe { str::from_utf8_unchecked_mut(&mut *self.vec) }\n    }\n}\n#[stable(feature = \"inclusive_range\", since = \"1.26.0\")]\nimpl ops::IndexMut<ops::RangeInclusive<usize>> for String {\n    #[inline]\n    fn index_mut(&mut self, index: ops::RangeInclusive<usize>) -> &mut str {\n        IndexMut::index_mut(&mut **self, index)\n    }\n}\n#[stable(feature = \"inclusive_range\", since = \"1.26.0\")]\nimpl ops::IndexMut<ops::RangeToInclusive<usize>> for String {\n    #[inline]\n    fn index_mut(&mut self, index: ops::RangeToInclusive<usize>) -> &mut str {\n        IndexMut::index_mut(&mut **self, index)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl ops::Deref for String {\n    type Target = str;\n\n    #[inline]\n    fn deref(&self) -> &str {\n        unsafe { str::from_utf8_unchecked(&self.vec) }\n    }\n}\n\n#[stable(feature = \"derefmut_for_string\", since = \"1.3.0\")]\nimpl ops::DerefMut for String {\n    #[inline]\n    fn deref_mut(&mut self) -> &mut str {\n        unsafe { str::from_utf8_unchecked_mut(&mut *self.vec) }\n    }\n}\n\n/// A type alias for [`Infallible`].\n///\n/// This alias exists for backwards compatibility, and may be eventually deprecated.\n///\n/// [`Infallible`]: core::convert::Infallible\n#[stable(feature = \"str_parse_error\", since = \"1.5.0\")]\npub type ParseError = core::convert::Infallible;\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl FromStr for String {\n    type Err = core::convert::Infallible;\n    #[inline]\n    fn from_str(s: &str) -> Result<String, Self::Err> {\n        Ok(String::from(s))\n    }\n}\n\n/// A trait for converting a value to a `String`.\n///\n/// This trait is automatically implemented for any type which implements the\n/// [`Display`] trait. As such, `ToString` shouldn't be implemented directly:\n/// [`Display`] should be implemented instead, and you get the `ToString`\n/// implementation for free.\n///\n/// [`Display`]: fmt::Display\n#[cfg_attr(not(test), rustc_diagnostic_item = \"ToString\")]\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub trait ToString {\n    /// Converts the given value to a `String`.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let i = 5;\n    /// let five = String::from(\"5\");\n    ///\n    /// assert_eq!(five, i.to_string());\n    /// ```\n    #[rustc_conversion_suggestion]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    fn to_string(&self) -> String;\n}\n\n/// # Panics\n///\n/// In this implementation, the `to_string` method panics\n/// if the `Display` implementation returns an error.\n/// This indicates an incorrect `Display` implementation\n/// since `fmt::Write for String` never returns an error itself.\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: fmt::Display + ?Sized> ToString for T {\n    // A common guideline is to not inline generic functions. However,\n    // removing `#[inline]` from this method causes non-negligible regressions.\n    // See <https://github.com/rust-lang/rust/pull/74852>, the last attempt\n    // to try to remove it.\n    #[inline]\n    default fn to_string(&self) -> String {\n        use fmt::Write;\n        let mut buf = String::new();\n        buf.write_fmt(format_args!(\"{}\", self))\n            .expect(\"a Display implementation returned an error unexpectedly\");\n        buf\n    }\n}\n\n#[stable(feature = \"char_to_string_specialization\", since = \"1.46.0\")]\nimpl ToString for char {\n    #[inline]\n    fn to_string(&self) -> String {\n        String::from(self.encode_utf8(&mut [0; 4]))\n    }\n}\n\n#[stable(feature = \"str_to_string_specialization\", since = \"1.9.0\")]\nimpl ToString for str {\n    #[inline]\n    fn to_string(&self) -> String {\n        String::from(self)\n    }\n}\n\n#[stable(feature = \"cow_str_to_string_specialization\", since = \"1.17.0\")]\nimpl ToString for Cow<'_, str> {\n    #[inline]\n    fn to_string(&self) -> String {\n        self[..].to_owned()\n    }\n}\n\n#[stable(feature = \"string_to_string_specialization\", since = \"1.17.0\")]\nimpl ToString for String {\n    #[inline]\n    fn to_string(&self) -> String {\n        self.to_owned()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl AsRef<str> for String {\n    #[inline]\n    fn as_ref(&self) -> &str {\n        self\n    }\n}\n\n#[stable(feature = \"string_as_mut\", since = \"1.43.0\")]\nimpl AsMut<str> for String {\n    #[inline]\n    fn as_mut(&mut self) -> &mut str {\n        self\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl AsRef<[u8]> for String {\n    #[inline]\n    fn as_ref(&self) -> &[u8] {\n        self.as_bytes()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl From<&str> for String {\n    #[inline]\n    fn from(s: &str) -> String {\n        s.to_owned()\n    }\n}\n\n#[stable(feature = \"from_mut_str_for_string\", since = \"1.44.0\")]\nimpl From<&mut str> for String {\n    /// Converts a `&mut str` into a `String`.\n    ///\n    /// The result is allocated on the heap.\n    #[inline]\n    fn from(s: &mut str) -> String {\n        s.to_owned()\n    }\n}\n\n#[stable(feature = \"from_ref_string\", since = \"1.35.0\")]\nimpl From<&String> for String {\n    #[inline]\n    fn from(s: &String) -> String {\n        s.clone()\n    }\n}\n\n// note: test pulls in libstd, which causes errors here\n#[cfg(not(test))]\n#[stable(feature = \"string_from_box\", since = \"1.18.0\")]\nimpl From<Box<str>> for String {\n    /// Converts the given boxed `str` slice to a `String`.\n    /// It is notable that the `str` slice is owned.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let s1: String = String::from(\"hello world\");\n    /// let s2: Box<str> = s1.into_boxed_str();\n    /// let s3: String = String::from(s2);\n    ///\n    /// assert_eq!(\"hello world\", s3)\n    /// ```\n    fn from(s: Box<str>) -> String {\n        s.into_string()\n    }\n}\n\n#[stable(feature = \"box_from_str\", since = \"1.20.0\")]\nimpl From<String> for Box<str> {\n    /// Converts the given `String` to a boxed `str` slice that is owned.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let s1: String = String::from(\"hello world\");\n    /// let s2: Box<str> = Box::from(s1);\n    /// let s3: String = String::from(s2);\n    ///\n    /// assert_eq!(\"hello world\", s3)\n    /// ```\n    fn from(s: String) -> Box<str> {\n        s.into_boxed_str()\n    }\n}\n\n#[stable(feature = \"string_from_cow_str\", since = \"1.14.0\")]\nimpl<'a> From<Cow<'a, str>> for String {\n    fn from(s: Cow<'a, str>) -> String {\n        s.into_owned()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a> From<&'a str> for Cow<'a, str> {\n    /// Converts a string slice into a Borrowed variant.\n    /// No heap allocation is performed, and the string\n    /// is not copied.\n    ///\n    /// # Example\n    ///\n    /// ```\n    /// # use std::borrow::Cow;\n    /// assert_eq!(Cow::from(\"eggplant\"), Cow::Borrowed(\"eggplant\"));\n    /// ```\n    #[inline]\n    fn from(s: &'a str) -> Cow<'a, str> {\n        Cow::Borrowed(s)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a> From<String> for Cow<'a, str> {\n    /// Converts a String into an Owned variant.\n    /// No heap allocation is performed, and the string\n    /// is not copied.\n    ///\n    /// # Example\n    ///\n    /// ```\n    /// # use std::borrow::Cow;\n    /// let s = \"eggplant\".to_string();\n    /// let s2 = \"eggplant\".to_string();\n    /// assert_eq!(Cow::from(s), Cow::<'static, str>::Owned(s2));\n    /// ```\n    #[inline]\n    fn from(s: String) -> Cow<'a, str> {\n        Cow::Owned(s)\n    }\n}\n\n#[stable(feature = \"cow_from_string_ref\", since = \"1.28.0\")]\nimpl<'a> From<&'a String> for Cow<'a, str> {\n    /// Converts a String reference into a Borrowed variant.\n    /// No heap allocation is performed, and the string\n    /// is not copied.\n    ///\n    /// # Example\n    ///\n    /// ```\n    /// # use std::borrow::Cow;\n    /// let s = \"eggplant\".to_string();\n    /// assert_eq!(Cow::from(&s), Cow::Borrowed(\"eggplant\"));\n    /// ```\n    #[inline]\n    fn from(s: &'a String) -> Cow<'a, str> {\n        Cow::Borrowed(s.as_str())\n    }\n}\n\n#[stable(feature = \"cow_str_from_iter\", since = \"1.12.0\")]\nimpl<'a> FromIterator<char> for Cow<'a, str> {\n    fn from_iter<I: IntoIterator<Item = char>>(it: I) -> Cow<'a, str> {\n        Cow::Owned(FromIterator::from_iter(it))\n    }\n}\n\n#[stable(feature = \"cow_str_from_iter\", since = \"1.12.0\")]\nimpl<'a, 'b> FromIterator<&'b str> for Cow<'a, str> {\n    fn from_iter<I: IntoIterator<Item = &'b str>>(it: I) -> Cow<'a, str> {\n        Cow::Owned(FromIterator::from_iter(it))\n    }\n}\n\n#[stable(feature = \"cow_str_from_iter\", since = \"1.12.0\")]\nimpl<'a> FromIterator<String> for Cow<'a, str> {\n    fn from_iter<I: IntoIterator<Item = String>>(it: I) -> Cow<'a, str> {\n        Cow::Owned(FromIterator::from_iter(it))\n    }\n}\n\n#[stable(feature = \"from_string_for_vec_u8\", since = \"1.14.0\")]\nimpl From<String> for Vec<u8> {\n    /// Converts the given `String` to a vector `Vec` that holds values of type `u8`.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let s1 = String::from(\"hello world\");\n    /// let v1 = Vec::from(s1);\n    ///\n    /// for b in v1 {\n    ///     println!(\"{}\", b);\n    /// }\n    /// ```\n    fn from(string: String) -> Vec<u8> {\n        string.into_bytes()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl fmt::Write for String {\n    #[inline]\n    fn write_str(&mut self, s: &str) -> fmt::Result {\n        self.push_str(s);\n        Ok(())\n    }\n\n    #[inline]\n    fn write_char(&mut self, c: char) -> fmt::Result {\n        self.push(c);\n        Ok(())\n    }\n}\n\n/// A draining iterator for `String`.\n///\n/// This struct is created by the [`drain`] method on [`String`]. See its\n/// documentation for more.\n///\n/// [`drain`]: String::drain\n#[stable(feature = \"drain\", since = \"1.6.0\")]\npub struct Drain<'a> {\n    /// Will be used as &'a mut String in the destructor\n    string: *mut String,\n    /// Start of part to remove\n    start: usize,\n    /// End of part to remove\n    end: usize,\n    /// Current remaining range to remove\n    iter: Chars<'a>,\n}\n\n#[stable(feature = \"collection_debug\", since = \"1.17.0\")]\nimpl fmt::Debug for Drain<'_> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"Drain\").field(&self.as_str()).finish()\n    }\n}\n\n#[stable(feature = \"drain\", since = \"1.6.0\")]\nunsafe impl Sync for Drain<'_> {}\n#[stable(feature = \"drain\", since = \"1.6.0\")]\nunsafe impl Send for Drain<'_> {}\n\n#[stable(feature = \"drain\", since = \"1.6.0\")]\nimpl Drop for Drain<'_> {\n    fn drop(&mut self) {\n        unsafe {\n            // Use Vec::drain. \"Reaffirm\" the bounds checks to avoid\n            // panic code being inserted again.\n            let self_vec = (*self.string).as_mut_vec();\n            if self.start <= self.end && self.end <= self_vec.len() {\n                self_vec.drain(self.start..self.end);\n            }\n        }\n    }\n}\n\nimpl<'a> Drain<'a> {\n    /// Returns the remaining (sub)string of this iterator as a slice.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(string_drain_as_str)]\n    /// let mut s = String::from(\"abc\");\n    /// let mut drain = s.drain(..);\n    /// assert_eq!(drain.as_str(), \"abc\");\n    /// let _ = drain.next().unwrap();\n    /// assert_eq!(drain.as_str(), \"bc\");\n    /// ```\n    #[unstable(feature = \"string_drain_as_str\", issue = \"76905\")] // Note: uncomment AsRef impls below when stabilizing.\n    pub fn as_str(&self) -> &str {\n        self.iter.as_str()\n    }\n}\n\n// Uncomment when stabilizing `string_drain_as_str`.\n// #[unstable(feature = \"string_drain_as_str\", issue = \"76905\")]\n// impl<'a> AsRef<str> for Drain<'a> {\n//     fn as_ref(&self) -> &str {\n//         self.as_str()\n//     }\n// }\n//\n// #[unstable(feature = \"string_drain_as_str\", issue = \"76905\")]\n// impl<'a> AsRef<[u8]> for Drain<'a> {\n//     fn as_ref(&self) -> &[u8] {\n//         self.as_str().as_bytes()\n//     }\n// }\n\n#[stable(feature = \"drain\", since = \"1.6.0\")]\nimpl Iterator for Drain<'_> {\n    type Item = char;\n\n    #[inline]\n    fn next(&mut self) -> Option<char> {\n        self.iter.next()\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.iter.size_hint()\n    }\n\n    #[inline]\n    fn last(mut self) -> Option<char> {\n        self.next_back()\n    }\n}\n\n#[stable(feature = \"drain\", since = \"1.6.0\")]\nimpl DoubleEndedIterator for Drain<'_> {\n    #[inline]\n    fn next_back(&mut self) -> Option<char> {\n        self.iter.next_back()\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl FusedIterator for Drain<'_> {}\n\n#[stable(feature = \"from_char_for_string\", since = \"1.46.0\")]\nimpl From<char> for String {\n    #[inline]\n    fn from(c: char) -> Self {\n        c.to_string()\n    }\n}\n//! A module for working with borrowed data.\n\n#![stable(feature = \"rust1\", since = \"1.0.0\")]\n\nuse core::cmp::Ordering;\nuse core::hash::{Hash, Hasher};\nuse core::ops::{Add, AddAssign, Deref};\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::borrow::{Borrow, BorrowMut};\n\nuse crate::fmt;\nuse crate::string::String;\n\nuse Cow::*;\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, B: ?Sized> Borrow<B> for Cow<'a, B>\nwhere\n    B: ToOwned,\n    <B as ToOwned>::Owned: 'a,\n{\n    fn borrow(&self) -> &B {\n        &**self\n    }\n}\n\n/// A generalization of `Clone` to borrowed data.\n///\n/// Some types make it possible to go from borrowed to owned, usually by\n/// implementing the `Clone` trait. But `Clone` works only for going from `&T`\n/// to `T`. The `ToOwned` trait generalizes `Clone` to construct owned data\n/// from any borrow of a given type.\n#[cfg_attr(not(test), rustc_diagnostic_item = \"ToOwned\")]\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub trait ToOwned {\n    /// The resulting type after obtaining ownership.\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    type Owned: Borrow<Self>;\n\n    /// Creates owned data from borrowed data, usually by cloning.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// let s: &str = \"a\";\n    /// let ss: String = s.to_owned();\n    ///\n    /// let v: &[i32] = &[1, 2];\n    /// let vv: Vec<i32> = v.to_owned();\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    #[must_use = \"cloning is often expensive and is not expected to have side effects\"]\n    fn to_owned(&self) -> Self::Owned;\n\n    /// Uses borrowed data to replace owned data, usually by cloning.\n    ///\n    /// This is borrow-generalized version of `Clone::clone_from`.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// # #![feature(toowned_clone_into)]\n    /// let mut s: String = String::new();\n    /// \"hello\".clone_into(&mut s);\n    ///\n    /// let mut v: Vec<i32> = Vec::new();\n    /// [1, 2][..].clone_into(&mut v);\n    /// ```\n    #[unstable(feature = \"toowned_clone_into\", reason = \"recently added\", issue = \"41263\")]\n    fn clone_into(&self, target: &mut Self::Owned) {\n        *target = self.to_owned();\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> ToOwned for T\nwhere\n    T: Clone,\n{\n    type Owned = T;\n    fn to_owned(&self) -> T {\n        self.clone()\n    }\n\n    fn clone_into(&self, target: &mut T) {\n        target.clone_from(self);\n    }\n}\n\n/// A clone-on-write smart pointer.\n///\n/// The type `Cow` is a smart pointer providing clone-on-write functionality: it\n/// can enclose and provide immutable access to borrowed data, and clone the\n/// data lazily when mutation or ownership is required. The type is designed to\n/// work with general borrowed data via the `Borrow` trait.\n///\n/// `Cow` implements `Deref`, which means that you can call\n/// non-mutating methods directly on the data it encloses. If mutation\n/// is desired, `to_mut` will obtain a mutable reference to an owned\n/// value, cloning if necessary.\n///\n/// If you need reference-counting pointers, note that\n/// [`Rc::make_mut`][crate::rc::Rc::make_mut] and\n/// [`Arc::make_mut`][crate::sync::Arc::make_mut] can provide clone-on-write\n/// functionality as well.\n///\n/// # Examples\n///\n/// ```\n/// use std::borrow::Cow;\n///\n/// fn abs_all(input: &mut Cow<[i32]>) {\n///     for i in 0..input.len() {\n///         let v = input[i];\n///         if v < 0 {\n///             // Clones into a vector if not already owned.\n///             input.to_mut()[i] = -v;\n///         }\n///     }\n/// }\n///\n/// // No clone occurs because `input` doesn't need to be mutated.\n/// let slice = [0, 1, 2];\n/// let mut input = Cow::from(&slice[..]);\n/// abs_all(&mut input);\n///\n/// // Clone occurs because `input` needs to be mutated.\n/// let slice = [-1, 0, 1];\n/// let mut input = Cow::from(&slice[..]);\n/// abs_all(&mut input);\n///\n/// // No clone occurs because `input` is already owned.\n/// let mut input = Cow::from(vec![-1, 0, 1]);\n/// abs_all(&mut input);\n/// ```\n///\n/// Another example showing how to keep `Cow` in a struct:\n///\n/// ```\n/// use std::borrow::Cow;\n///\n/// struct Items<'a, X: 'a> where [X]: ToOwned<Owned = Vec<X>> {\n///     values: Cow<'a, [X]>,\n/// }\n///\n/// impl<'a, X: Clone + 'a> Items<'a, X> where [X]: ToOwned<Owned = Vec<X>> {\n///     fn new(v: Cow<'a, [X]>) -> Self {\n///         Items { values: v }\n///     }\n/// }\n///\n/// // Creates a container from borrowed values of a slice\n/// let readonly = [1, 2];\n/// let borrowed = Items::new((&readonly[..]).into());\n/// match borrowed {\n///     Items { values: Cow::Borrowed(b) } => println!(\"borrowed {:?}\", b),\n///     _ => panic!(\"expect borrowed value\"),\n/// }\n///\n/// let mut clone_on_write = borrowed;\n/// // Mutates the data from slice into owned vec and pushes a new value on top\n/// clone_on_write.values.to_mut().push(3);\n/// println!(\"clone_on_write = {:?}\", clone_on_write.values);\n///\n/// // The data was mutated. Let check it out.\n/// match clone_on_write {\n///     Items { values: Cow::Owned(_) } => println!(\"clone_on_write contains owned data\"),\n///     _ => panic!(\"expect owned data\"),\n/// }\n/// ```\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub enum Cow<'a, B: ?Sized + 'a>\nwhere\n    B: ToOwned,\n{\n    /// Borrowed data.\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    Borrowed(#[stable(feature = \"rust1\", since = \"1.0.0\")] &'a B),\n\n    /// Owned data.\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    Owned(#[stable(feature = \"rust1\", since = \"1.0.0\")] <B as ToOwned>::Owned),\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<B: ?Sized + ToOwned> Clone for Cow<'_, B> {\n    fn clone(&self) -> Self {\n        match *self {\n            Borrowed(b) => Borrowed(b),\n            Owned(ref o) => {\n                let b: &B = o.borrow();\n                Owned(b.to_owned())\n            }\n        }\n    }\n\n    fn clone_from(&mut self, source: &Self) {\n        match (self, source) {\n            (&mut Owned(ref mut dest), &Owned(ref o)) => o.borrow().clone_into(dest),\n            (t, s) => *t = s.clone(),\n        }\n    }\n}\n\nimpl<B: ?Sized + ToOwned> Cow<'_, B> {\n    /// Returns true if the data is borrowed, i.e. if `to_mut` would require additional work.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(cow_is_borrowed)]\n    /// use std::borrow::Cow;\n    ///\n    /// let cow = Cow::Borrowed(\"moo\");\n    /// assert!(cow.is_borrowed());\n    ///\n    /// let bull: Cow<'_, str> = Cow::Owned(\"...moo?\".to_string());\n    /// assert!(!bull.is_borrowed());\n    /// ```\n    #[unstable(feature = \"cow_is_borrowed\", issue = \"65143\")]\n    #[rustc_const_unstable(feature = \"const_cow_is_borrowed\", issue = \"65143\")]\n    pub const fn is_borrowed(&self) -> bool {\n        match *self {\n            Borrowed(_) => true,\n            Owned(_) => false,\n        }\n    }\n\n    /// Returns true if the data is owned, i.e. if `to_mut` would be a no-op.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(cow_is_borrowed)]\n    /// use std::borrow::Cow;\n    ///\n    /// let cow: Cow<'_, str> = Cow::Owned(\"moo\".to_string());\n    /// assert!(cow.is_owned());\n    ///\n    /// let bull = Cow::Borrowed(\"...moo?\");\n    /// assert!(!bull.is_owned());\n    /// ```\n    #[unstable(feature = \"cow_is_borrowed\", issue = \"65143\")]\n    #[rustc_const_unstable(feature = \"const_cow_is_borrowed\", issue = \"65143\")]\n    pub const fn is_owned(&self) -> bool {\n        !self.is_borrowed()\n    }\n\n    /// Acquires a mutable reference to the owned form of the data.\n    ///\n    /// Clones the data if it is not already owned.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::borrow::Cow;\n    ///\n    /// let mut cow = Cow::Borrowed(\"foo\");\n    /// cow.to_mut().make_ascii_uppercase();\n    ///\n    /// assert_eq!(\n    ///   cow,\n    ///   Cow::Owned(String::from(\"FOO\")) as Cow<str>\n    /// );\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn to_mut(&mut self) -> &mut <B as ToOwned>::Owned {\n        match *self {\n            Borrowed(borrowed) => {\n                *self = Owned(borrowed.to_owned());\n                match *self {\n                    Borrowed(..) => unreachable!(),\n                    Owned(ref mut owned) => owned,\n                }\n            }\n            Owned(ref mut owned) => owned,\n        }\n    }\n\n    /// Extracts the owned data.\n    ///\n    /// Clones the data if it is not already owned.\n    ///\n    /// # Examples\n    ///\n    /// Calling `into_owned` on a `Cow::Borrowed` clones the underlying data\n    /// and becomes a `Cow::Owned`:\n    ///\n    /// ```\n    /// use std::borrow::Cow;\n    ///\n    /// let s = \"Hello world!\";\n    /// let cow = Cow::Borrowed(s);\n    ///\n    /// assert_eq!(\n    ///   cow.into_owned(),\n    ///   String::from(s)\n    /// );\n    /// ```\n    ///\n    /// Calling `into_owned` on a `Cow::Owned` is a no-op:\n    ///\n    /// ```\n    /// use std::borrow::Cow;\n    ///\n    /// let s = \"Hello world!\";\n    /// let cow: Cow<str> = Cow::Owned(String::from(s));\n    ///\n    /// assert_eq!(\n    ///   cow.into_owned(),\n    ///   String::from(s)\n    /// );\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn into_owned(self) -> <B as ToOwned>::Owned {\n        match self {\n            Borrowed(borrowed) => borrowed.to_owned(),\n            Owned(owned) => owned,\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<B: ?Sized + ToOwned> Deref for Cow<'_, B> {\n    type Target = B;\n\n    fn deref(&self) -> &B {\n        match *self {\n            Borrowed(borrowed) => borrowed,\n            Owned(ref owned) => owned.borrow(),\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<B: ?Sized> Eq for Cow<'_, B> where B: Eq + ToOwned {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<B: ?Sized> Ord for Cow<'_, B>\nwhere\n    B: Ord + ToOwned,\n{\n    #[inline]\n    fn cmp(&self, other: &Self) -> Ordering {\n        Ord::cmp(&**self, &**other)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, 'b, B: ?Sized, C: ?Sized> PartialEq<Cow<'b, C>> for Cow<'a, B>\nwhere\n    B: PartialEq<C> + ToOwned,\n    C: ToOwned,\n{\n    #[inline]\n    fn eq(&self, other: &Cow<'b, C>) -> bool {\n        PartialEq::eq(&**self, &**other)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, B: ?Sized> PartialOrd for Cow<'a, B>\nwhere\n    B: PartialOrd + ToOwned,\n{\n    #[inline]\n    fn partial_cmp(&self, other: &Cow<'a, B>) -> Option<Ordering> {\n        PartialOrd::partial_cmp(&**self, &**other)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<B: ?Sized> fmt::Debug for Cow<'_, B>\nwhere\n    B: fmt::Debug + ToOwned<Owned: fmt::Debug>,\n{\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        match *self {\n            Borrowed(ref b) => fmt::Debug::fmt(b, f),\n            Owned(ref o) => fmt::Debug::fmt(o, f),\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<B: ?Sized> fmt::Display for Cow<'_, B>\nwhere\n    B: fmt::Display + ToOwned<Owned: fmt::Display>,\n{\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        match *self {\n            Borrowed(ref b) => fmt::Display::fmt(b, f),\n            Owned(ref o) => fmt::Display::fmt(o, f),\n        }\n    }\n}\n\n#[stable(feature = \"default\", since = \"1.11.0\")]\nimpl<B: ?Sized> Default for Cow<'_, B>\nwhere\n    B: ToOwned<Owned: Default>,\n{\n    /// Creates an owned Cow<'a, B> with the default value for the contained owned value.\n    fn default() -> Self {\n        Owned(<B as ToOwned>::Owned::default())\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<B: ?Sized> Hash for Cow<'_, B>\nwhere\n    B: Hash + ToOwned,\n{\n    #[inline]\n    fn hash<H: Hasher>(&self, state: &mut H) {\n        Hash::hash(&**self, state)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + ToOwned> AsRef<T> for Cow<'_, T> {\n    fn as_ref(&self) -> &T {\n        self\n    }\n}\n\n#[stable(feature = \"cow_add\", since = \"1.14.0\")]\nimpl<'a> Add<&'a str> for Cow<'a, str> {\n    type Output = Cow<'a, str>;\n\n    #[inline]\n    fn add(mut self, rhs: &'a str) -> Self::Output {\n        self += rhs;\n        self\n    }\n}\n\n#[stable(feature = \"cow_add\", since = \"1.14.0\")]\nimpl<'a> Add<Cow<'a, str>> for Cow<'a, str> {\n    type Output = Cow<'a, str>;\n\n    #[inline]\n    fn add(mut self, rhs: Cow<'a, str>) -> Self::Output {\n        self += rhs;\n        self\n    }\n}\n\n#[stable(feature = \"cow_add\", since = \"1.14.0\")]\nimpl<'a> AddAssign<&'a str> for Cow<'a, str> {\n    fn add_assign(&mut self, rhs: &'a str) {\n        if self.is_empty() {\n            *self = Cow::Borrowed(rhs)\n        } else if !rhs.is_empty() {\n            if let Cow::Borrowed(lhs) = *self {\n                let mut s = String::with_capacity(lhs.len() + rhs.len());\n                s.push_str(lhs);\n                *self = Cow::Owned(s);\n            }\n            self.to_mut().push_str(rhs);\n        }\n    }\n}\n\n#[stable(feature = \"cow_add\", since = \"1.14.0\")]\nimpl<'a> AddAssign<Cow<'a, str>> for Cow<'a, str> {\n    fn add_assign(&mut self, rhs: Cow<'a, str>) {\n        if self.is_empty() {\n            *self = rhs\n        } else if !rhs.is_empty() {\n            if let Cow::Borrowed(lhs) = *self {\n                let mut s = String::with_capacity(lhs.len() + rhs.len());\n                s.push_str(lhs);\n                *self = Cow::Owned(s);\n            }\n            self.to_mut().push_str(&rhs);\n        }\n    }\n}\n//! # The Rust core allocation and collections library\n//!\n//! This library provides smart pointers and collections for managing\n//! heap-allocated values.\n//!\n//! This library, like libcore, normally doesn’t need to be used directly\n//! since its contents are re-exported in the [`std` crate](../std/index.html).\n//! Crates that use the `#![no_std]` attribute however will typically\n//! not depend on `std`, so they’d use this crate instead.\n//!\n//! ## Boxed values\n//!\n//! The [`Box`] type is a smart pointer type. There can only be one owner of a\n//! [`Box`], and the owner can decide to mutate the contents, which live on the\n//! heap.\n//!\n//! This type can be sent among threads efficiently as the size of a `Box` value\n//! is the same as that of a pointer. Tree-like data structures are often built\n//! with boxes because each node often has only one owner, the parent.\n//!\n//! ## Reference counted pointers\n//!\n//! The [`Rc`] type is a non-threadsafe reference-counted pointer type intended\n//! for sharing memory within a thread. An [`Rc`] pointer wraps a type, `T`, and\n//! only allows access to `&T`, a shared reference.\n//!\n//! This type is useful when inherited mutability (such as using [`Box`]) is too\n//! constraining for an application, and is often paired with the [`Cell`] or\n//! [`RefCell`] types in order to allow mutation.\n//!\n//! ## Atomically reference counted pointers\n//!\n//! The [`Arc`] type is the threadsafe equivalent of the [`Rc`] type. It\n//! provides all the same functionality of [`Rc`], except it requires that the\n//! contained type `T` is shareable. Additionally, [`Arc<T>`][`Arc`] is itself\n//! sendable while [`Rc<T>`][`Rc`] is not.\n//!\n//! This type allows for shared access to the contained data, and is often\n//! paired with synchronization primitives such as mutexes to allow mutation of\n//! shared resources.\n//!\n//! ## Collections\n//!\n//! Implementations of the most common general purpose data structures are\n//! defined in this library. They are re-exported through the\n//! [standard collections library](../std/collections/index.html).\n//!\n//! ## Heap interfaces\n//!\n//! The [`alloc`](alloc/index.html) module defines the low-level interface to the\n//! default global allocator. It is not compatible with the libc allocator API.\n//!\n//! [`Arc`]: sync\n//! [`Box`]: boxed\n//! [`Cell`]: core::cell\n//! [`Rc`]: rc\n//! [`RefCell`]: core::cell\n\n#![allow(unused_attributes)]\n#![stable(feature = \"alloc\", since = \"1.36.0\")]\n#![doc(\n    html_root_url = \"https://doc.rust-lang.org/nightly/\",\n    html_playground_url = \"https://play.rust-lang.org/\",\n    issue_tracker_base_url = \"https://github.com/rust-lang/rust/issues/\",\n    test(no_crate_inject, attr(allow(unused_variables), deny(warnings)))\n)]\n#![no_std]\n#![needs_allocator]\n#![warn(deprecated_in_future)]\n#![warn(missing_docs)]\n#![warn(missing_debug_implementations)]\n#![allow(explicit_outlives_requirements)]\n#![deny(unsafe_op_in_unsafe_fn)]\n#![feature(rustc_allow_const_fn_unstable)]\n#![cfg_attr(not(test), feature(generator_trait))]\n#![cfg_attr(test, feature(test))]\n#![cfg_attr(test, feature(new_uninit))]\n#![feature(allocator_api)]\n#![feature(array_chunks)]\n#![feature(array_methods)]\n#![feature(array_windows)]\n#![feature(allow_internal_unstable)]\n#![feature(arbitrary_self_types)]\n#![feature(async_stream)]\n#![feature(box_patterns)]\n#![feature(box_syntax)]\n#![feature(cfg_sanitize)]\n#![feature(cfg_target_has_atomic)]\n#![feature(coerce_unsized)]\n#![feature(const_btree_new)]\n#![cfg_attr(bootstrap, feature(const_fn))]\n#![cfg_attr(not(bootstrap), feature(const_fn_trait_bound))]\n#![feature(cow_is_borrowed)]\n#![feature(const_cow_is_borrowed)]\n#![feature(destructuring_assignment)]\n#![feature(dispatch_from_dyn)]\n#![feature(core_intrinsics)]\n#![feature(dropck_eyepatch)]\n#![feature(exact_size_is_empty)]\n#![feature(exclusive_range_pattern)]\n#![feature(extend_one)]\n#![feature(fmt_internals)]\n#![feature(fn_traits)]\n#![feature(fundamental)]\n#![feature(inplace_iteration)]\n// Technically, this is a bug in rustdoc: rustdoc sees the documentation on `#[lang = slice_alloc]`\n// blocks is for `&[T]`, which also has documentation using this feature in `core`, and gets mad\n// that the feature-gate isn't enabled. Ideally, it wouldn't check for the feature gate for docs\n// from other crates, but since this can only appear for lang items, it doesn't seem worth fixing.\n#![feature(intra_doc_pointers)]\n#![feature(iter_zip)]\n#![feature(lang_items)]\n#![feature(layout_for_ptr)]\n#![feature(maybe_uninit_ref)]\n#![feature(negative_impls)]\n#![feature(never_type)]\n#![feature(nll)]\n#![feature(nonnull_slice_from_raw_parts)]\n#![feature(auto_traits)]\n#![feature(option_result_unwrap_unchecked)]\n#![cfg_attr(bootstrap, feature(or_patterns))]\n#![feature(pattern)]\n#![feature(ptr_internals)]\n#![feature(rustc_attrs)]\n#![feature(receiver_trait)]\n#![feature(min_specialization)]\n#![feature(set_ptr_value)]\n#![feature(slice_ptr_get)]\n#![feature(slice_ptr_len)]\n#![feature(slice_range)]\n#![feature(staged_api)]\n#![feature(str_internals)]\n#![feature(trusted_len)]\n#![feature(unboxed_closures)]\n#![feature(unicode_internals)]\n#![feature(unsize)]\n#![feature(unsized_fn_params)]\n#![feature(allocator_internals)]\n#![feature(slice_partition_dedup)]\n#![feature(maybe_uninit_extra, maybe_uninit_slice, maybe_uninit_uninit_array)]\n#![feature(alloc_layout_extra)]\n#![feature(trusted_random_access)]\n#![feature(try_trait)]\n#![feature(min_type_alias_impl_trait)]\n#![feature(associated_type_bounds)]\n#![feature(slice_group_by)]\n#![feature(decl_macro)]\n// Allow testing this library\n\n#[cfg(test)]\n#[macro_use]\nextern crate std;\n#[cfg(test)]\nextern crate test;\n\n// Module with internal macros used by other modules (needs to be included before other modules).\n#[macro_use]\nmod macros;\n\n// Heaps provided for low-level allocation strategies\n\npub mod alloc;\n\n// Primitive types using the heaps above\n\n// Need to conditionally define the mod from `boxed.rs` to avoid\n// duplicating the lang-items when building in test cfg; but also need\n// to allow code to have `use boxed::Box;` declarations.\n#[cfg(not(test))]\npub mod boxed;\n#[cfg(test)]\nmod boxed {\n    pub use std::boxed::Box;\n}\npub mod borrow;\npub mod collections;\npub mod fmt;\npub mod prelude;\npub mod raw_vec;\npub mod rc;\npub mod slice;\npub mod str;\npub mod string;\n#[cfg(target_has_atomic = \"ptr\")]\npub mod sync;\n#[cfg(target_has_atomic = \"ptr\")]\npub mod task;\n#[cfg(test)]\nmod tests;\npub mod vec;\n\n#[doc(hidden)]\n#[unstable(feature = \"liballoc_internals\", issue = \"none\", reason = \"implementation detail\")]\npub mod __export {\n    pub use core::format_args;\n}\n//! Single-threaded reference-counting pointers. 'Rc' stands for 'Reference\n//! Counted'.\n//!\n//! The type [`Rc<T>`][`Rc`] provides shared ownership of a value of type `T`,\n//! allocated in the heap. Invoking [`clone`][clone] on [`Rc`] produces a new\n//! pointer to the same allocation in the heap. When the last [`Rc`] pointer to a\n//! given allocation is destroyed, the value stored in that allocation (often\n//! referred to as \"inner value\") is also dropped.\n//!\n//! Shared references in Rust disallow mutation by default, and [`Rc`]\n//! is no exception: you cannot generally obtain a mutable reference to\n//! something inside an [`Rc`]. If you need mutability, put a [`Cell`]\n//! or [`RefCell`] inside the [`Rc`]; see [an example of mutability\n//! inside an `Rc`][mutability].\n//!\n//! [`Rc`] uses non-atomic reference counting. This means that overhead is very\n//! low, but an [`Rc`] cannot be sent between threads, and consequently [`Rc`]\n//! does not implement [`Send`][send]. As a result, the Rust compiler\n//! will check *at compile time* that you are not sending [`Rc`]s between\n//! threads. If you need multi-threaded, atomic reference counting, use\n//! [`sync::Arc`][arc].\n//!\n//! The [`downgrade`][downgrade] method can be used to create a non-owning\n//! [`Weak`] pointer. A [`Weak`] pointer can be [`upgrade`][upgrade]d\n//! to an [`Rc`], but this will return [`None`] if the value stored in the allocation has\n//! already been dropped. In other words, `Weak` pointers do not keep the value\n//! inside the allocation alive; however, they *do* keep the allocation\n//! (the backing store for the inner value) alive.\n//!\n//! A cycle between [`Rc`] pointers will never be deallocated. For this reason,\n//! [`Weak`] is used to break cycles. For example, a tree could have strong\n//! [`Rc`] pointers from parent nodes to children, and [`Weak`] pointers from\n//! children back to their parents.\n//!\n//! `Rc<T>` automatically dereferences to `T` (via the [`Deref`] trait),\n//! so you can call `T`'s methods on a value of type [`Rc<T>`][`Rc`]. To avoid name\n//! clashes with `T`'s methods, the methods of [`Rc<T>`][`Rc`] itself are associated\n//! functions, called using [fully qualified syntax]:\n//!\n//! ```\n//! use std::rc::Rc;\n//!\n//! let my_rc = Rc::new(());\n//! Rc::downgrade(&my_rc);\n//! ```\n//!\n//! `Rc<T>`'s implementations of traits like `Clone` may also be called using\n//! fully qualified syntax. Some people prefer to use fully qualified syntax,\n//! while others prefer using method-call syntax.\n//!\n//! ```\n//! use std::rc::Rc;\n//!\n//! let rc = Rc::new(());\n//! // Method-call syntax\n//! let rc2 = rc.clone();\n//! // Fully qualified syntax\n//! let rc3 = Rc::clone(&rc);\n//! ```\n//!\n//! [`Weak<T>`][`Weak`] does not auto-dereference to `T`, because the inner value may have\n//! already been dropped.\n//!\n//! # Cloning references\n//!\n//! Creating a new reference to the same allocation as an existing reference counted pointer\n//! is done using the `Clone` trait implemented for [`Rc<T>`][`Rc`] and [`Weak<T>`][`Weak`].\n//!\n//! ```\n//! use std::rc::Rc;\n//!\n//! let foo = Rc::new(vec![1.0, 2.0, 3.0]);\n//! // The two syntaxes below are equivalent.\n//! let a = foo.clone();\n//! let b = Rc::clone(&foo);\n//! // a and b both point to the same memory location as foo.\n//! ```\n//!\n//! The `Rc::clone(&from)` syntax is the most idiomatic because it conveys more explicitly\n//! the meaning of the code. In the example above, this syntax makes it easier to see that\n//! this code is creating a new reference rather than copying the whole content of foo.\n//!\n//! # Examples\n//!\n//! Consider a scenario where a set of `Gadget`s are owned by a given `Owner`.\n//! We want to have our `Gadget`s point to their `Owner`. We can't do this with\n//! unique ownership, because more than one gadget may belong to the same\n//! `Owner`. [`Rc`] allows us to share an `Owner` between multiple `Gadget`s,\n//! and have the `Owner` remain allocated as long as any `Gadget` points at it.\n//!\n//! ```\n//! use std::rc::Rc;\n//!\n//! struct Owner {\n//!     name: String,\n//!     // ...other fields\n//! }\n//!\n//! struct Gadget {\n//!     id: i32,\n//!     owner: Rc<Owner>,\n//!     // ...other fields\n//! }\n//!\n//! fn main() {\n//!     // Create a reference-counted `Owner`.\n//!     let gadget_owner: Rc<Owner> = Rc::new(\n//!         Owner {\n//!             name: \"Gadget Man\".to_string(),\n//!         }\n//!     );\n//!\n//!     // Create `Gadget`s belonging to `gadget_owner`. Cloning the `Rc<Owner>`\n//!     // gives us a new pointer to the same `Owner` allocation, incrementing\n//!     // the reference count in the process.\n//!     let gadget1 = Gadget {\n//!         id: 1,\n//!         owner: Rc::clone(&gadget_owner),\n//!     };\n//!     let gadget2 = Gadget {\n//!         id: 2,\n//!         owner: Rc::clone(&gadget_owner),\n//!     };\n//!\n//!     // Dispose of our local variable `gadget_owner`.\n//!     drop(gadget_owner);\n//!\n//!     // Despite dropping `gadget_owner`, we're still able to print out the name\n//!     // of the `Owner` of the `Gadget`s. This is because we've only dropped a\n//!     // single `Rc<Owner>`, not the `Owner` it points to. As long as there are\n//!     // other `Rc<Owner>` pointing at the same `Owner` allocation, it will remain\n//!     // live. The field projection `gadget1.owner.name` works because\n//!     // `Rc<Owner>` automatically dereferences to `Owner`.\n//!     println!(\"Gadget {} owned by {}\", gadget1.id, gadget1.owner.name);\n//!     println!(\"Gadget {} owned by {}\", gadget2.id, gadget2.owner.name);\n//!\n//!     // At the end of the function, `gadget1` and `gadget2` are destroyed, and\n//!     // with them the last counted references to our `Owner`. Gadget Man now\n//!     // gets destroyed as well.\n//! }\n//! ```\n//!\n//! If our requirements change, and we also need to be able to traverse from\n//! `Owner` to `Gadget`, we will run into problems. An [`Rc`] pointer from `Owner`\n//! to `Gadget` introduces a cycle. This means that their\n//! reference counts can never reach 0, and the allocation will never be destroyed:\n//! a memory leak. In order to get around this, we can use [`Weak`]\n//! pointers.\n//!\n//! Rust actually makes it somewhat difficult to produce this loop in the first\n//! place. In order to end up with two values that point at each other, one of\n//! them needs to be mutable. This is difficult because [`Rc`] enforces\n//! memory safety by only giving out shared references to the value it wraps,\n//! and these don't allow direct mutation. We need to wrap the part of the\n//! value we wish to mutate in a [`RefCell`], which provides *interior\n//! mutability*: a method to achieve mutability through a shared reference.\n//! [`RefCell`] enforces Rust's borrowing rules at runtime.\n//!\n//! ```\n//! use std::rc::Rc;\n//! use std::rc::Weak;\n//! use std::cell::RefCell;\n//!\n//! struct Owner {\n//!     name: String,\n//!     gadgets: RefCell<Vec<Weak<Gadget>>>,\n//!     // ...other fields\n//! }\n//!\n//! struct Gadget {\n//!     id: i32,\n//!     owner: Rc<Owner>,\n//!     // ...other fields\n//! }\n//!\n//! fn main() {\n//!     // Create a reference-counted `Owner`. Note that we've put the `Owner`'s\n//!     // vector of `Gadget`s inside a `RefCell` so that we can mutate it through\n//!     // a shared reference.\n//!     let gadget_owner: Rc<Owner> = Rc::new(\n//!         Owner {\n//!             name: \"Gadget Man\".to_string(),\n//!             gadgets: RefCell::new(vec![]),\n//!         }\n//!     );\n//!\n//!     // Create `Gadget`s belonging to `gadget_owner`, as before.\n//!     let gadget1 = Rc::new(\n//!         Gadget {\n//!             id: 1,\n//!             owner: Rc::clone(&gadget_owner),\n//!         }\n//!     );\n//!     let gadget2 = Rc::new(\n//!         Gadget {\n//!             id: 2,\n//!             owner: Rc::clone(&gadget_owner),\n//!         }\n//!     );\n//!\n//!     // Add the `Gadget`s to their `Owner`.\n//!     {\n//!         let mut gadgets = gadget_owner.gadgets.borrow_mut();\n//!         gadgets.push(Rc::downgrade(&gadget1));\n//!         gadgets.push(Rc::downgrade(&gadget2));\n//!\n//!         // `RefCell` dynamic borrow ends here.\n//!     }\n//!\n//!     // Iterate over our `Gadget`s, printing their details out.\n//!     for gadget_weak in gadget_owner.gadgets.borrow().iter() {\n//!\n//!         // `gadget_weak` is a `Weak<Gadget>`. Since `Weak` pointers can't\n//!         // guarantee the allocation still exists, we need to call\n//!         // `upgrade`, which returns an `Option<Rc<Gadget>>`.\n//!         //\n//!         // In this case we know the allocation still exists, so we simply\n//!         // `unwrap` the `Option`. In a more complicated program, you might\n//!         // need graceful error handling for a `None` result.\n//!\n//!         let gadget = gadget_weak.upgrade().unwrap();\n//!         println!(\"Gadget {} owned by {}\", gadget.id, gadget.owner.name);\n//!     }\n//!\n//!     // At the end of the function, `gadget_owner`, `gadget1`, and `gadget2`\n//!     // are destroyed. There are now no strong (`Rc`) pointers to the\n//!     // gadgets, so they are destroyed. This zeroes the reference count on\n//!     // Gadget Man, so he gets destroyed as well.\n//! }\n//! ```\n//!\n//! [clone]: Clone::clone\n//! [`Cell`]: core::cell::Cell\n//! [`RefCell`]: core::cell::RefCell\n//! [send]: core::marker::Send\n//! [arc]: crate::sync::Arc\n//! [`Deref`]: core::ops::Deref\n//! [downgrade]: Rc::downgrade\n//! [upgrade]: Weak::upgrade\n//! [mutability]: core::cell#introducing-mutability-inside-of-something-immutable\n//! [fully qualified syntax]: https://doc.rust-lang.org/book/ch19-03-advanced-traits.html#fully-qualified-syntax-for-disambiguation-calling-methods-with-the-same-name\n\n#![stable(feature = \"rust1\", since = \"1.0.0\")]\n\n#[cfg(not(test))]\nuse crate::boxed::Box;\n#[cfg(test)]\nuse std::boxed::Box;\n\nuse core::any::Any;\nuse core::borrow;\nuse core::cell::Cell;\nuse core::cmp::Ordering;\nuse core::convert::{From, TryFrom};\nuse core::fmt;\nuse core::hash::{Hash, Hasher};\nuse core::intrinsics::abort;\nuse core::iter;\nuse core::marker::{self, PhantomData, Unpin, Unsize};\nuse core::mem::{self, align_of_val_raw, forget, size_of_val};\nuse core::ops::{CoerceUnsized, Deref, DispatchFromDyn, Receiver};\nuse core::pin::Pin;\nuse core::ptr::{self, NonNull};\nuse core::slice::from_raw_parts_mut;\n\nuse crate::alloc::{\n    box_free, handle_alloc_error, AllocError, Allocator, Global, Layout, WriteCloneIntoRaw,\n};\nuse crate::borrow::{Cow, ToOwned};\nuse crate::string::String;\nuse crate::vec::Vec;\n\n#[cfg(test)]\nmod tests;\n\n// This is repr(C) to future-proof against possible field-reordering, which\n// would interfere with otherwise safe [into|from]_raw() of transmutable\n// inner types.\n#[repr(C)]\nstruct RcBox<T: ?Sized> {\n    strong: Cell<usize>,\n    weak: Cell<usize>,\n    value: T,\n}\n\n/// A single-threaded reference-counting pointer. 'Rc' stands for 'Reference\n/// Counted'.\n///\n/// See the [module-level documentation](./index.html) for more details.\n///\n/// The inherent methods of `Rc` are all associated functions, which means\n/// that you have to call them as e.g., [`Rc::get_mut(&mut value)`][get_mut] instead of\n/// `value.get_mut()`. This avoids conflicts with methods of the inner type `T`.\n///\n/// [get_mut]: Rc::get_mut\n#[cfg_attr(not(test), rustc_diagnostic_item = \"Rc\")]\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct Rc<T: ?Sized> {\n    ptr: NonNull<RcBox<T>>,\n    phantom: PhantomData<RcBox<T>>,\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized> !marker::Send for Rc<T> {}\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized> !marker::Sync for Rc<T> {}\n\n#[unstable(feature = \"coerce_unsized\", issue = \"27732\")]\nimpl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<Rc<U>> for Rc<T> {}\n\n#[unstable(feature = \"dispatch_from_dyn\", issue = \"none\")]\nimpl<T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<Rc<U>> for Rc<T> {}\n\nimpl<T: ?Sized> Rc<T> {\n    #[inline(always)]\n    fn inner(&self) -> &RcBox<T> {\n        // This unsafety is ok because while this Rc is alive we're guaranteed\n        // that the inner pointer is valid.\n        unsafe { self.ptr.as_ref() }\n    }\n\n    fn from_inner(ptr: NonNull<RcBox<T>>) -> Self {\n        Self { ptr, phantom: PhantomData }\n    }\n\n    unsafe fn from_ptr(ptr: *mut RcBox<T>) -> Self {\n        Self::from_inner(unsafe { NonNull::new_unchecked(ptr) })\n    }\n}\n\nimpl<T> Rc<T> {\n    /// Constructs a new `Rc<T>`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let five = Rc::new(5);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn new(value: T) -> Rc<T> {\n        // There is an implicit weak pointer owned by all the strong\n        // pointers, which ensures that the weak destructor never frees\n        // the allocation while the strong destructor is running, even\n        // if the weak pointer is stored inside the strong one.\n        Self::from_inner(\n            Box::leak(box RcBox { strong: Cell::new(1), weak: Cell::new(1), value }).into(),\n        )\n    }\n\n    /// Constructs a new `Rc<T>` using a weak reference to itself. Attempting\n    /// to upgrade the weak reference before this function returns will result\n    /// in a `None` value. However, the weak reference may be cloned freely and\n    /// stored for use at a later time.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(arc_new_cyclic)]\n    /// #![allow(dead_code)]\n    /// use std::rc::{Rc, Weak};\n    ///\n    /// struct Gadget {\n    ///     self_weak: Weak<Self>,\n    ///     // ... more fields\n    /// }\n    /// impl Gadget {\n    ///     pub fn new() -> Rc<Self> {\n    ///         Rc::new_cyclic(|self_weak| {\n    ///             Gadget { self_weak: self_weak.clone(), /* ... */ }\n    ///         })\n    ///     }\n    /// }\n    /// ```\n    #[unstable(feature = \"arc_new_cyclic\", issue = \"75861\")]\n    pub fn new_cyclic(data_fn: impl FnOnce(&Weak<T>) -> T) -> Rc<T> {\n        // Construct the inner in the \"uninitialized\" state with a single\n        // weak reference.\n        let uninit_ptr: NonNull<_> = Box::leak(box RcBox {\n            strong: Cell::new(0),\n            weak: Cell::new(1),\n            value: mem::MaybeUninit::<T>::uninit(),\n        })\n        .into();\n\n        let init_ptr: NonNull<RcBox<T>> = uninit_ptr.cast();\n\n        let weak = Weak { ptr: init_ptr };\n\n        // It's important we don't give up ownership of the weak pointer, or\n        // else the memory might be freed by the time `data_fn` returns. If\n        // we really wanted to pass ownership, we could create an additional\n        // weak pointer for ourselves, but this would result in additional\n        // updates to the weak reference count which might not be necessary\n        // otherwise.\n        let data = data_fn(&weak);\n\n        unsafe {\n            let inner = init_ptr.as_ptr();\n            ptr::write(ptr::addr_of_mut!((*inner).value), data);\n\n            let prev_value = (*inner).strong.get();\n            debug_assert_eq!(prev_value, 0, \"No prior strong references should exist\");\n            (*inner).strong.set(1);\n        }\n\n        let strong = Rc::from_inner(init_ptr);\n\n        // Strong references should collectively own a shared weak reference,\n        // so don't run the destructor for our old weak reference.\n        mem::forget(weak);\n        strong\n    }\n\n    /// Constructs a new `Rc` with uninitialized contents.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(new_uninit)]\n    /// #![feature(get_mut_unchecked)]\n    ///\n    /// use std::rc::Rc;\n    ///\n    /// let mut five = Rc::<u32>::new_uninit();\n    ///\n    /// let five = unsafe {\n    ///     // Deferred initialization:\n    ///     Rc::get_mut_unchecked(&mut five).as_mut_ptr().write(5);\n    ///\n    ///     five.assume_init()\n    /// };\n    ///\n    /// assert_eq!(*five, 5)\n    /// ```\n    #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    pub fn new_uninit() -> Rc<mem::MaybeUninit<T>> {\n        unsafe {\n            Rc::from_ptr(Rc::allocate_for_layout(\n                Layout::new::<T>(),\n                |layout| Global.allocate(layout),\n                |mem| mem as *mut RcBox<mem::MaybeUninit<T>>,\n            ))\n        }\n    }\n\n    /// Constructs a new `Rc` with uninitialized contents, with the memory\n    /// being filled with `0` bytes.\n    ///\n    /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and\n    /// incorrect usage of this method.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(new_uninit)]\n    ///\n    /// use std::rc::Rc;\n    ///\n    /// let zero = Rc::<u32>::new_zeroed();\n    /// let zero = unsafe { zero.assume_init() };\n    ///\n    /// assert_eq!(*zero, 0)\n    /// ```\n    ///\n    /// [zeroed]: mem::MaybeUninit::zeroed\n    #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    pub fn new_zeroed() -> Rc<mem::MaybeUninit<T>> {\n        unsafe {\n            Rc::from_ptr(Rc::allocate_for_layout(\n                Layout::new::<T>(),\n                |layout| Global.allocate_zeroed(layout),\n                |mem| mem as *mut RcBox<mem::MaybeUninit<T>>,\n            ))\n        }\n    }\n\n    /// Constructs a new `Rc<T>`, returning an error if the allocation fails\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(allocator_api)]\n    /// use std::rc::Rc;\n    ///\n    /// let five = Rc::try_new(5);\n    /// # Ok::<(), std::alloc::AllocError>(())\n    /// ```\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    pub fn try_new(value: T) -> Result<Rc<T>, AllocError> {\n        // There is an implicit weak pointer owned by all the strong\n        // pointers, which ensures that the weak destructor never frees\n        // the allocation while the strong destructor is running, even\n        // if the weak pointer is stored inside the strong one.\n        Ok(Self::from_inner(\n            Box::leak(Box::try_new(RcBox { strong: Cell::new(1), weak: Cell::new(1), value })?)\n                .into(),\n        ))\n    }\n\n    /// Constructs a new `Rc` with uninitialized contents, returning an error if the allocation fails\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(allocator_api, new_uninit)]\n    /// #![feature(get_mut_unchecked)]\n    ///\n    /// use std::rc::Rc;\n    ///\n    /// let mut five = Rc::<u32>::try_new_uninit()?;\n    ///\n    /// let five = unsafe {\n    ///     // Deferred initialization:\n    ///     Rc::get_mut_unchecked(&mut five).as_mut_ptr().write(5);\n    ///\n    ///     five.assume_init()\n    /// };\n    ///\n    /// assert_eq!(*five, 5);\n    /// # Ok::<(), std::alloc::AllocError>(())\n    /// ```\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    // #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    pub fn try_new_uninit() -> Result<Rc<mem::MaybeUninit<T>>, AllocError> {\n        unsafe {\n            Ok(Rc::from_ptr(Rc::try_allocate_for_layout(\n                Layout::new::<T>(),\n                |layout| Global.allocate(layout),\n                |mem| mem as *mut RcBox<mem::MaybeUninit<T>>,\n            )?))\n        }\n    }\n\n    /// Constructs a new `Rc` with uninitialized contents, with the memory\n    /// being filled with `0` bytes, returning an error if the allocation fails\n    ///\n    /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and\n    /// incorrect usage of this method.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(allocator_api, new_uninit)]\n    ///\n    /// use std::rc::Rc;\n    ///\n    /// let zero = Rc::<u32>::try_new_zeroed()?;\n    /// let zero = unsafe { zero.assume_init() };\n    ///\n    /// assert_eq!(*zero, 0);\n    /// # Ok::<(), std::alloc::AllocError>(())\n    /// ```\n    ///\n    /// [zeroed]: mem::MaybeUninit::zeroed\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    //#[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    pub fn try_new_zeroed() -> Result<Rc<mem::MaybeUninit<T>>, AllocError> {\n        unsafe {\n            Ok(Rc::from_ptr(Rc::try_allocate_for_layout(\n                Layout::new::<T>(),\n                |layout| Global.allocate_zeroed(layout),\n                |mem| mem as *mut RcBox<mem::MaybeUninit<T>>,\n            )?))\n        }\n    }\n    /// Constructs a new `Pin<Rc<T>>`. If `T` does not implement `Unpin`, then\n    /// `value` will be pinned in memory and unable to be moved.\n    #[stable(feature = \"pin\", since = \"1.33.0\")]\n    pub fn pin(value: T) -> Pin<Rc<T>> {\n        unsafe { Pin::new_unchecked(Rc::new(value)) }\n    }\n\n    /// Returns the inner value, if the `Rc` has exactly one strong reference.\n    ///\n    /// Otherwise, an [`Err`] is returned with the same `Rc` that was\n    /// passed in.\n    ///\n    /// This will succeed even if there are outstanding weak references.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let x = Rc::new(3);\n    /// assert_eq!(Rc::try_unwrap(x), Ok(3));\n    ///\n    /// let x = Rc::new(4);\n    /// let _y = Rc::clone(&x);\n    /// assert_eq!(*Rc::try_unwrap(x).unwrap_err(), 4);\n    /// ```\n    #[inline]\n    #[stable(feature = \"rc_unique\", since = \"1.4.0\")]\n    pub fn try_unwrap(this: Self) -> Result<T, Self> {\n        if Rc::strong_count(&this) == 1 {\n            unsafe {\n                let val = ptr::read(&*this); // copy the contained object\n\n                // Indicate to Weaks that they can't be promoted by decrementing\n                // the strong count, and then remove the implicit \"strong weak\"\n                // pointer while also handling drop logic by just crafting a\n                // fake Weak.\n                this.inner().dec_strong();\n                let _weak = Weak { ptr: this.ptr };\n                forget(this);\n                Ok(val)\n            }\n        } else {\n            Err(this)\n        }\n    }\n}\n\nimpl<T> Rc<[T]> {\n    /// Constructs a new reference-counted slice with uninitialized contents.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(new_uninit)]\n    /// #![feature(get_mut_unchecked)]\n    ///\n    /// use std::rc::Rc;\n    ///\n    /// let mut values = Rc::<[u32]>::new_uninit_slice(3);\n    ///\n    /// let values = unsafe {\n    ///     // Deferred initialization:\n    ///     Rc::get_mut_unchecked(&mut values)[0].as_mut_ptr().write(1);\n    ///     Rc::get_mut_unchecked(&mut values)[1].as_mut_ptr().write(2);\n    ///     Rc::get_mut_unchecked(&mut values)[2].as_mut_ptr().write(3);\n    ///\n    ///     values.assume_init()\n    /// };\n    ///\n    /// assert_eq!(*values, [1, 2, 3])\n    /// ```\n    #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    pub fn new_uninit_slice(len: usize) -> Rc<[mem::MaybeUninit<T>]> {\n        unsafe { Rc::from_ptr(Rc::allocate_for_slice(len)) }\n    }\n\n    /// Constructs a new reference-counted slice with uninitialized contents, with the memory being\n    /// filled with `0` bytes.\n    ///\n    /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and\n    /// incorrect usage of this method.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(new_uninit)]\n    ///\n    /// use std::rc::Rc;\n    ///\n    /// let values = Rc::<[u32]>::new_zeroed_slice(3);\n    /// let values = unsafe { values.assume_init() };\n    ///\n    /// assert_eq!(*values, [0, 0, 0])\n    /// ```\n    ///\n    /// [zeroed]: mem::MaybeUninit::zeroed\n    #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    pub fn new_zeroed_slice(len: usize) -> Rc<[mem::MaybeUninit<T>]> {\n        unsafe {\n            Rc::from_ptr(Rc::allocate_for_layout(\n                Layout::array::<T>(len).unwrap(),\n                |layout| Global.allocate_zeroed(layout),\n                |mem| {\n                    ptr::slice_from_raw_parts_mut(mem as *mut T, len)\n                        as *mut RcBox<[mem::MaybeUninit<T>]>\n                },\n            ))\n        }\n    }\n}\n\nimpl<T> Rc<mem::MaybeUninit<T>> {\n    /// Converts to `Rc<T>`.\n    ///\n    /// # Safety\n    ///\n    /// As with [`MaybeUninit::assume_init`],\n    /// it is up to the caller to guarantee that the inner value\n    /// really is in an initialized state.\n    /// Calling this when the content is not yet fully initialized\n    /// causes immediate undefined behavior.\n    ///\n    /// [`MaybeUninit::assume_init`]: mem::MaybeUninit::assume_init\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(new_uninit)]\n    /// #![feature(get_mut_unchecked)]\n    ///\n    /// use std::rc::Rc;\n    ///\n    /// let mut five = Rc::<u32>::new_uninit();\n    ///\n    /// let five = unsafe {\n    ///     // Deferred initialization:\n    ///     Rc::get_mut_unchecked(&mut five).as_mut_ptr().write(5);\n    ///\n    ///     five.assume_init()\n    /// };\n    ///\n    /// assert_eq!(*five, 5)\n    /// ```\n    #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    #[inline]\n    pub unsafe fn assume_init(self) -> Rc<T> {\n        Rc::from_inner(mem::ManuallyDrop::new(self).ptr.cast())\n    }\n}\n\nimpl<T> Rc<[mem::MaybeUninit<T>]> {\n    /// Converts to `Rc<[T]>`.\n    ///\n    /// # Safety\n    ///\n    /// As with [`MaybeUninit::assume_init`],\n    /// it is up to the caller to guarantee that the inner value\n    /// really is in an initialized state.\n    /// Calling this when the content is not yet fully initialized\n    /// causes immediate undefined behavior.\n    ///\n    /// [`MaybeUninit::assume_init`]: mem::MaybeUninit::assume_init\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(new_uninit)]\n    /// #![feature(get_mut_unchecked)]\n    ///\n    /// use std::rc::Rc;\n    ///\n    /// let mut values = Rc::<[u32]>::new_uninit_slice(3);\n    ///\n    /// let values = unsafe {\n    ///     // Deferred initialization:\n    ///     Rc::get_mut_unchecked(&mut values)[0].as_mut_ptr().write(1);\n    ///     Rc::get_mut_unchecked(&mut values)[1].as_mut_ptr().write(2);\n    ///     Rc::get_mut_unchecked(&mut values)[2].as_mut_ptr().write(3);\n    ///\n    ///     values.assume_init()\n    /// };\n    ///\n    /// assert_eq!(*values, [1, 2, 3])\n    /// ```\n    #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    #[inline]\n    pub unsafe fn assume_init(self) -> Rc<[T]> {\n        unsafe { Rc::from_ptr(mem::ManuallyDrop::new(self).ptr.as_ptr() as _) }\n    }\n}\n\nimpl<T: ?Sized> Rc<T> {\n    /// Consumes the `Rc`, returning the wrapped pointer.\n    ///\n    /// To avoid a memory leak the pointer must be converted back to an `Rc` using\n    /// [`Rc::from_raw`][from_raw].\n    ///\n    /// [from_raw]: Rc::from_raw\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let x = Rc::new(\"hello\".to_owned());\n    /// let x_ptr = Rc::into_raw(x);\n    /// assert_eq!(unsafe { &*x_ptr }, \"hello\");\n    /// ```\n    #[stable(feature = \"rc_raw\", since = \"1.17.0\")]\n    pub fn into_raw(this: Self) -> *const T {\n        let ptr = Self::as_ptr(&this);\n        mem::forget(this);\n        ptr\n    }\n\n    /// Provides a raw pointer to the data.\n    ///\n    /// The counts are not affected in any way and the `Rc` is not consumed. The pointer is valid\n    /// for as long there are strong counts in the `Rc`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let x = Rc::new(\"hello\".to_owned());\n    /// let y = Rc::clone(&x);\n    /// let x_ptr = Rc::as_ptr(&x);\n    /// assert_eq!(x_ptr, Rc::as_ptr(&y));\n    /// assert_eq!(unsafe { &*x_ptr }, \"hello\");\n    /// ```\n    #[stable(feature = \"weak_into_raw\", since = \"1.45.0\")]\n    pub fn as_ptr(this: &Self) -> *const T {\n        let ptr: *mut RcBox<T> = NonNull::as_ptr(this.ptr);\n\n        // SAFETY: This cannot go through Deref::deref or Rc::inner because\n        // this is required to retain raw/mut provenance such that e.g. `get_mut` can\n        // write through the pointer after the Rc is recovered through `from_raw`.\n        unsafe { ptr::addr_of_mut!((*ptr).value) }\n    }\n\n    /// Constructs an `Rc<T>` from a raw pointer.\n    ///\n    /// The raw pointer must have been previously returned by a call to\n    /// [`Rc<U>::into_raw`][into_raw] where `U` must have the same size\n    /// and alignment as `T`. This is trivially true if `U` is `T`.\n    /// Note that if `U` is not `T` but has the same size and alignment, this is\n    /// basically like transmuting references of different types. See\n    /// [`mem::transmute`][transmute] for more information on what\n    /// restrictions apply in this case.\n    ///\n    /// The user of `from_raw` has to make sure a specific value of `T` is only\n    /// dropped once.\n    ///\n    /// This function is unsafe because improper use may lead to memory unsafety,\n    /// even if the returned `Rc<T>` is never accessed.\n    ///\n    /// [into_raw]: Rc::into_raw\n    /// [transmute]: core::mem::transmute\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let x = Rc::new(\"hello\".to_owned());\n    /// let x_ptr = Rc::into_raw(x);\n    ///\n    /// unsafe {\n    ///     // Convert back to an `Rc` to prevent leak.\n    ///     let x = Rc::from_raw(x_ptr);\n    ///     assert_eq!(&*x, \"hello\");\n    ///\n    ///     // Further calls to `Rc::from_raw(x_ptr)` would be memory-unsafe.\n    /// }\n    ///\n    /// // The memory was freed when `x` went out of scope above, so `x_ptr` is now dangling!\n    /// ```\n    #[stable(feature = \"rc_raw\", since = \"1.17.0\")]\n    pub unsafe fn from_raw(ptr: *const T) -> Self {\n        let offset = unsafe { data_offset(ptr) };\n\n        // Reverse the offset to find the original RcBox.\n        let rc_ptr =\n            unsafe { (ptr as *mut RcBox<T>).set_ptr_value((ptr as *mut u8).offset(-offset)) };\n\n        unsafe { Self::from_ptr(rc_ptr) }\n    }\n\n    /// Creates a new [`Weak`] pointer to this allocation.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let five = Rc::new(5);\n    ///\n    /// let weak_five = Rc::downgrade(&five);\n    /// ```\n    #[stable(feature = \"rc_weak\", since = \"1.4.0\")]\n    pub fn downgrade(this: &Self) -> Weak<T> {\n        this.inner().inc_weak();\n        // Make sure we do not create a dangling Weak\n        debug_assert!(!is_dangling(this.ptr.as_ptr()));\n        Weak { ptr: this.ptr }\n    }\n\n    /// Gets the number of [`Weak`] pointers to this allocation.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let five = Rc::new(5);\n    /// let _weak_five = Rc::downgrade(&five);\n    ///\n    /// assert_eq!(1, Rc::weak_count(&five));\n    /// ```\n    #[inline]\n    #[stable(feature = \"rc_counts\", since = \"1.15.0\")]\n    pub fn weak_count(this: &Self) -> usize {\n        this.inner().weak() - 1\n    }\n\n    /// Gets the number of strong (`Rc`) pointers to this allocation.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let five = Rc::new(5);\n    /// let _also_five = Rc::clone(&five);\n    ///\n    /// assert_eq!(2, Rc::strong_count(&five));\n    /// ```\n    #[inline]\n    #[stable(feature = \"rc_counts\", since = \"1.15.0\")]\n    pub fn strong_count(this: &Self) -> usize {\n        this.inner().strong()\n    }\n\n    /// Increments the strong reference count on the `Rc<T>` associated with the\n    /// provided pointer by one.\n    ///\n    /// # Safety\n    ///\n    /// The pointer must have been obtained through `Rc::into_raw`, and the\n    /// associated `Rc` instance must be valid (i.e. the strong count must be at\n    /// least 1) for the duration of this method.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let five = Rc::new(5);\n    ///\n    /// unsafe {\n    ///     let ptr = Rc::into_raw(five);\n    ///     Rc::increment_strong_count(ptr);\n    ///\n    ///     let five = Rc::from_raw(ptr);\n    ///     assert_eq!(2, Rc::strong_count(&five));\n    /// }\n    /// ```\n    #[inline]\n    #[stable(feature = \"rc_mutate_strong_count\", since = \"1.53.0\")]\n    pub unsafe fn increment_strong_count(ptr: *const T) {\n        // Retain Rc, but don't touch refcount by wrapping in ManuallyDrop\n        let rc = unsafe { mem::ManuallyDrop::new(Rc::<T>::from_raw(ptr)) };\n        // Now increase refcount, but don't drop new refcount either\n        let _rc_clone: mem::ManuallyDrop<_> = rc.clone();\n    }\n\n    /// Decrements the strong reference count on the `Rc<T>` associated with the\n    /// provided pointer by one.\n    ///\n    /// # Safety\n    ///\n    /// The pointer must have been obtained through `Rc::into_raw`, and the\n    /// associated `Rc` instance must be valid (i.e. the strong count must be at\n    /// least 1) when invoking this method. This method can be used to release\n    /// the final `Rc` and backing storage, but **should not** be called after\n    /// the final `Rc` has been released.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let five = Rc::new(5);\n    ///\n    /// unsafe {\n    ///     let ptr = Rc::into_raw(five);\n    ///     Rc::increment_strong_count(ptr);\n    ///\n    ///     let five = Rc::from_raw(ptr);\n    ///     assert_eq!(2, Rc::strong_count(&five));\n    ///     Rc::decrement_strong_count(ptr);\n    ///     assert_eq!(1, Rc::strong_count(&five));\n    /// }\n    /// ```\n    #[inline]\n    #[stable(feature = \"rc_mutate_strong_count\", since = \"1.53.0\")]\n    pub unsafe fn decrement_strong_count(ptr: *const T) {\n        unsafe { mem::drop(Rc::from_raw(ptr)) };\n    }\n\n    /// Returns `true` if there are no other `Rc` or [`Weak`] pointers to\n    /// this allocation.\n    #[inline]\n    fn is_unique(this: &Self) -> bool {\n        Rc::weak_count(this) == 0 && Rc::strong_count(this) == 1\n    }\n\n    /// Returns a mutable reference into the given `Rc`, if there are\n    /// no other `Rc` or [`Weak`] pointers to the same allocation.\n    ///\n    /// Returns [`None`] otherwise, because it is not safe to\n    /// mutate a shared value.\n    ///\n    /// See also [`make_mut`][make_mut], which will [`clone`][clone]\n    /// the inner value when there are other pointers.\n    ///\n    /// [make_mut]: Rc::make_mut\n    /// [clone]: Clone::clone\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let mut x = Rc::new(3);\n    /// *Rc::get_mut(&mut x).unwrap() = 4;\n    /// assert_eq!(*x, 4);\n    ///\n    /// let _y = Rc::clone(&x);\n    /// assert!(Rc::get_mut(&mut x).is_none());\n    /// ```\n    #[inline]\n    #[stable(feature = \"rc_unique\", since = \"1.4.0\")]\n    pub fn get_mut(this: &mut Self) -> Option<&mut T> {\n        if Rc::is_unique(this) { unsafe { Some(Rc::get_mut_unchecked(this)) } } else { None }\n    }\n\n    /// Returns a mutable reference into the given `Rc`,\n    /// without any check.\n    ///\n    /// See also [`get_mut`], which is safe and does appropriate checks.\n    ///\n    /// [`get_mut`]: Rc::get_mut\n    ///\n    /// # Safety\n    ///\n    /// Any other `Rc` or [`Weak`] pointers to the same allocation must not be dereferenced\n    /// for the duration of the returned borrow.\n    /// This is trivially the case if no such pointers exist,\n    /// for example immediately after `Rc::new`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(get_mut_unchecked)]\n    ///\n    /// use std::rc::Rc;\n    ///\n    /// let mut x = Rc::new(String::new());\n    /// unsafe {\n    ///     Rc::get_mut_unchecked(&mut x).push_str(\"foo\")\n    /// }\n    /// assert_eq!(*x, \"foo\");\n    /// ```\n    #[inline]\n    #[unstable(feature = \"get_mut_unchecked\", issue = \"63292\")]\n    pub unsafe fn get_mut_unchecked(this: &mut Self) -> &mut T {\n        // We are careful to *not* create a reference covering the \"count\" fields, as\n        // this would conflict with accesses to the reference counts (e.g. by `Weak`).\n        unsafe { &mut (*this.ptr.as_ptr()).value }\n    }\n\n    #[inline]\n    #[stable(feature = \"ptr_eq\", since = \"1.17.0\")]\n    /// Returns `true` if the two `Rc`s point to the same allocation\n    /// (in a vein similar to [`ptr::eq`]).\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let five = Rc::new(5);\n    /// let same_five = Rc::clone(&five);\n    /// let other_five = Rc::new(5);\n    ///\n    /// assert!(Rc::ptr_eq(&five, &same_five));\n    /// assert!(!Rc::ptr_eq(&five, &other_five));\n    /// ```\n    ///\n    /// [`ptr::eq`]: core::ptr::eq\n    pub fn ptr_eq(this: &Self, other: &Self) -> bool {\n        this.ptr.as_ptr() == other.ptr.as_ptr()\n    }\n}\n\nimpl<T: Clone> Rc<T> {\n    /// Makes a mutable reference into the given `Rc`.\n    ///\n    /// If there are other `Rc` pointers to the same allocation, then `make_mut` will\n    /// [`clone`] the inner value to a new allocation to ensure unique ownership.  This is also\n    /// referred to as clone-on-write.\n    ///\n    /// If there are no other `Rc` pointers to this allocation, then [`Weak`]\n    /// pointers to this allocation will be disassociated.\n    ///\n    /// See also [`get_mut`], which will fail rather than cloning.\n    ///\n    /// [`clone`]: Clone::clone\n    /// [`get_mut`]: Rc::get_mut\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let mut data = Rc::new(5);\n    ///\n    /// *Rc::make_mut(&mut data) += 1;        // Won't clone anything\n    /// let mut other_data = Rc::clone(&data);    // Won't clone inner data\n    /// *Rc::make_mut(&mut data) += 1;        // Clones inner data\n    /// *Rc::make_mut(&mut data) += 1;        // Won't clone anything\n    /// *Rc::make_mut(&mut other_data) *= 2;  // Won't clone anything\n    ///\n    /// // Now `data` and `other_data` point to different allocations.\n    /// assert_eq!(*data, 8);\n    /// assert_eq!(*other_data, 12);\n    /// ```\n    ///\n    /// [`Weak`] pointers will be disassociated:\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let mut data = Rc::new(75);\n    /// let weak = Rc::downgrade(&data);\n    ///\n    /// assert!(75 == *data);\n    /// assert!(75 == *weak.upgrade().unwrap());\n    ///\n    /// *Rc::make_mut(&mut data) += 1;\n    ///\n    /// assert!(76 == *data);\n    /// assert!(weak.upgrade().is_none());\n    /// ```\n    #[inline]\n    #[stable(feature = \"rc_unique\", since = \"1.4.0\")]\n    pub fn make_mut(this: &mut Self) -> &mut T {\n        if Rc::strong_count(this) != 1 {\n            // Gotta clone the data, there are other Rcs.\n            // Pre-allocate memory to allow writing the cloned value directly.\n            let mut rc = Self::new_uninit();\n            unsafe {\n                let data = Rc::get_mut_unchecked(&mut rc);\n                (**this).write_clone_into_raw(data.as_mut_ptr());\n                *this = rc.assume_init();\n            }\n        } else if Rc::weak_count(this) != 0 {\n            // Can just steal the data, all that's left is Weaks\n            let mut rc = Self::new_uninit();\n            unsafe {\n                let data = Rc::get_mut_unchecked(&mut rc);\n                data.as_mut_ptr().copy_from_nonoverlapping(&**this, 1);\n\n                this.inner().dec_strong();\n                // Remove implicit strong-weak ref (no need to craft a fake\n                // Weak here -- we know other Weaks can clean up for us)\n                this.inner().dec_weak();\n                ptr::write(this, rc.assume_init());\n            }\n        }\n        // This unsafety is ok because we're guaranteed that the pointer\n        // returned is the *only* pointer that will ever be returned to T. Our\n        // reference count is guaranteed to be 1 at this point, and we required\n        // the `Rc<T>` itself to be `mut`, so we're returning the only possible\n        // reference to the allocation.\n        unsafe { &mut this.ptr.as_mut().value }\n    }\n}\n\nimpl Rc<dyn Any> {\n    #[inline]\n    #[stable(feature = \"rc_downcast\", since = \"1.29.0\")]\n    /// Attempt to downcast the `Rc<dyn Any>` to a concrete type.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::any::Any;\n    /// use std::rc::Rc;\n    ///\n    /// fn print_if_string(value: Rc<dyn Any>) {\n    ///     if let Ok(string) = value.downcast::<String>() {\n    ///         println!(\"String ({}): {}\", string.len(), string);\n    ///     }\n    /// }\n    ///\n    /// let my_string = \"Hello World\".to_string();\n    /// print_if_string(Rc::new(my_string));\n    /// print_if_string(Rc::new(0i8));\n    /// ```\n    pub fn downcast<T: Any>(self) -> Result<Rc<T>, Rc<dyn Any>> {\n        if (*self).is::<T>() {\n            let ptr = self.ptr.cast::<RcBox<T>>();\n            forget(self);\n            Ok(Rc::from_inner(ptr))\n        } else {\n            Err(self)\n        }\n    }\n}\n\nimpl<T: ?Sized> Rc<T> {\n    /// Allocates an `RcBox<T>` with sufficient space for\n    /// a possibly-unsized inner value where the value has the layout provided.\n    ///\n    /// The function `mem_to_rcbox` is called with the data pointer\n    /// and must return back a (potentially fat)-pointer for the `RcBox<T>`.\n    unsafe fn allocate_for_layout(\n        value_layout: Layout,\n        allocate: impl FnOnce(Layout) -> Result<NonNull<[u8]>, AllocError>,\n        mem_to_rcbox: impl FnOnce(*mut u8) -> *mut RcBox<T>,\n    ) -> *mut RcBox<T> {\n        // Calculate layout using the given value layout.\n        // Previously, layout was calculated on the expression\n        // `&*(ptr as *const RcBox<T>)`, but this created a misaligned\n        // reference (see #54908).\n        let layout = Layout::new::<RcBox<()>>().extend(value_layout).unwrap().0.pad_to_align();\n        unsafe {\n            Rc::try_allocate_for_layout(value_layout, allocate, mem_to_rcbox)\n                .unwrap_or_else(|_| handle_alloc_error(layout))\n        }\n    }\n\n    /// Allocates an `RcBox<T>` with sufficient space for\n    /// a possibly-unsized inner value where the value has the layout provided,\n    /// returning an error if allocation fails.\n    ///\n    /// The function `mem_to_rcbox` is called with the data pointer\n    /// and must return back a (potentially fat)-pointer for the `RcBox<T>`.\n    #[inline]\n    unsafe fn try_allocate_for_layout(\n        value_layout: Layout,\n        allocate: impl FnOnce(Layout) -> Result<NonNull<[u8]>, AllocError>,\n        mem_to_rcbox: impl FnOnce(*mut u8) -> *mut RcBox<T>,\n    ) -> Result<*mut RcBox<T>, AllocError> {\n        // Calculate layout using the given value layout.\n        // Previously, layout was calculated on the expression\n        // `&*(ptr as *const RcBox<T>)`, but this created a misaligned\n        // reference (see #54908).\n        let layout = Layout::new::<RcBox<()>>().extend(value_layout).unwrap().0.pad_to_align();\n\n        // Allocate for the layout.\n        let ptr = allocate(layout)?;\n\n        // Initialize the RcBox\n        let inner = mem_to_rcbox(ptr.as_non_null_ptr().as_ptr());\n        unsafe {\n            debug_assert_eq!(Layout::for_value(&*inner), layout);\n\n            ptr::write(&mut (*inner).strong, Cell::new(1));\n            ptr::write(&mut (*inner).weak, Cell::new(1));\n        }\n\n        Ok(inner)\n    }\n\n    /// Allocates an `RcBox<T>` with sufficient space for an unsized inner value\n    unsafe fn allocate_for_ptr(ptr: *const T) -> *mut RcBox<T> {\n        // Allocate for the `RcBox<T>` using the given value.\n        unsafe {\n            Self::allocate_for_layout(\n                Layout::for_value(&*ptr),\n                |layout| Global.allocate(layout),\n                |mem| (ptr as *mut RcBox<T>).set_ptr_value(mem),\n            )\n        }\n    }\n\n    fn from_box(v: Box<T>) -> Rc<T> {\n        unsafe {\n            let (box_unique, alloc) = Box::into_unique(v);\n            let bptr = box_unique.as_ptr();\n\n            let value_size = size_of_val(&*bptr);\n            let ptr = Self::allocate_for_ptr(bptr);\n\n            // Copy value as bytes\n            ptr::copy_nonoverlapping(\n                bptr as *const T as *const u8,\n                &mut (*ptr).value as *mut _ as *mut u8,\n                value_size,\n            );\n\n            // Free the allocation without dropping its contents\n            box_free(box_unique, alloc);\n\n            Self::from_ptr(ptr)\n        }\n    }\n}\n\nimpl<T> Rc<[T]> {\n    /// Allocates an `RcBox<[T]>` with the given length.\n    unsafe fn allocate_for_slice(len: usize) -> *mut RcBox<[T]> {\n        unsafe {\n            Self::allocate_for_layout(\n                Layout::array::<T>(len).unwrap(),\n                |layout| Global.allocate(layout),\n                |mem| ptr::slice_from_raw_parts_mut(mem as *mut T, len) as *mut RcBox<[T]>,\n            )\n        }\n    }\n\n    /// Copy elements from slice into newly allocated Rc<\\[T\\]>\n    ///\n    /// Unsafe because the caller must either take ownership or bind `T: Copy`\n    unsafe fn copy_from_slice(v: &[T]) -> Rc<[T]> {\n        unsafe {\n            let ptr = Self::allocate_for_slice(v.len());\n            ptr::copy_nonoverlapping(v.as_ptr(), &mut (*ptr).value as *mut [T] as *mut T, v.len());\n            Self::from_ptr(ptr)\n        }\n    }\n\n    /// Constructs an `Rc<[T]>` from an iterator known to be of a certain size.\n    ///\n    /// Behavior is undefined should the size be wrong.\n    unsafe fn from_iter_exact(iter: impl iter::Iterator<Item = T>, len: usize) -> Rc<[T]> {\n        // Panic guard while cloning T elements.\n        // In the event of a panic, elements that have been written\n        // into the new RcBox will be dropped, then the memory freed.\n        struct Guard<T> {\n            mem: NonNull<u8>,\n            elems: *mut T,\n            layout: Layout,\n            n_elems: usize,\n        }\n\n        impl<T> Drop for Guard<T> {\n            fn drop(&mut self) {\n                unsafe {\n                    let slice = from_raw_parts_mut(self.elems, self.n_elems);\n                    ptr::drop_in_place(slice);\n\n                    Global.deallocate(self.mem, self.layout);\n                }\n            }\n        }\n\n        unsafe {\n            let ptr = Self::allocate_for_slice(len);\n\n            let mem = ptr as *mut _ as *mut u8;\n            let layout = Layout::for_value(&*ptr);\n\n            // Pointer to first element\n            let elems = &mut (*ptr).value as *mut [T] as *mut T;\n\n            let mut guard = Guard { mem: NonNull::new_unchecked(mem), elems, layout, n_elems: 0 };\n\n            for (i, item) in iter.enumerate() {\n                ptr::write(elems.add(i), item);\n                guard.n_elems += 1;\n            }\n\n            // All clear. Forget the guard so it doesn't free the new RcBox.\n            forget(guard);\n\n            Self::from_ptr(ptr)\n        }\n    }\n}\n\n/// Specialization trait used for `From<&[T]>`.\ntrait RcFromSlice<T> {\n    fn from_slice(slice: &[T]) -> Self;\n}\n\nimpl<T: Clone> RcFromSlice<T> for Rc<[T]> {\n    #[inline]\n    default fn from_slice(v: &[T]) -> Self {\n        unsafe { Self::from_iter_exact(v.iter().cloned(), v.len()) }\n    }\n}\n\nimpl<T: Copy> RcFromSlice<T> for Rc<[T]> {\n    #[inline]\n    fn from_slice(v: &[T]) -> Self {\n        unsafe { Rc::copy_from_slice(v) }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized> Deref for Rc<T> {\n    type Target = T;\n\n    #[inline(always)]\n    fn deref(&self) -> &T {\n        &self.inner().value\n    }\n}\n\n#[unstable(feature = \"receiver_trait\", issue = \"none\")]\nimpl<T: ?Sized> Receiver for Rc<T> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nunsafe impl<#[may_dangle] T: ?Sized> Drop for Rc<T> {\n    /// Drops the `Rc`.\n    ///\n    /// This will decrement the strong reference count. If the strong reference\n    /// count reaches zero then the only other references (if any) are\n    /// [`Weak`], so we `drop` the inner value.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// struct Foo;\n    ///\n    /// impl Drop for Foo {\n    ///     fn drop(&mut self) {\n    ///         println!(\"dropped!\");\n    ///     }\n    /// }\n    ///\n    /// let foo  = Rc::new(Foo);\n    /// let foo2 = Rc::clone(&foo);\n    ///\n    /// drop(foo);    // Doesn't print anything\n    /// drop(foo2);   // Prints \"dropped!\"\n    /// ```\n    fn drop(&mut self) {\n        unsafe {\n            self.inner().dec_strong();\n            if self.inner().strong() == 0 {\n                // destroy the contained object\n                ptr::drop_in_place(Self::get_mut_unchecked(self));\n\n                // remove the implicit \"strong weak\" pointer now that we've\n                // destroyed the contents.\n                self.inner().dec_weak();\n\n                if self.inner().weak() == 0 {\n                    Global.deallocate(self.ptr.cast(), Layout::for_value(self.ptr.as_ref()));\n                }\n            }\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized> Clone for Rc<T> {\n    /// Makes a clone of the `Rc` pointer.\n    ///\n    /// This creates another pointer to the same allocation, increasing the\n    /// strong reference count.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let five = Rc::new(5);\n    ///\n    /// let _ = Rc::clone(&five);\n    /// ```\n    #[inline]\n    fn clone(&self) -> Rc<T> {\n        self.inner().inc_strong();\n        Self::from_inner(self.ptr)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Default> Default for Rc<T> {\n    /// Creates a new `Rc<T>`, with the `Default` value for `T`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let x: Rc<i32> = Default::default();\n    /// assert_eq!(*x, 0);\n    /// ```\n    #[inline]\n    fn default() -> Rc<T> {\n        Rc::new(Default::default())\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\ntrait RcEqIdent<T: ?Sized + PartialEq> {\n    fn eq(&self, other: &Rc<T>) -> bool;\n    fn ne(&self, other: &Rc<T>) -> bool;\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + PartialEq> RcEqIdent<T> for Rc<T> {\n    #[inline]\n    default fn eq(&self, other: &Rc<T>) -> bool {\n        **self == **other\n    }\n\n    #[inline]\n    default fn ne(&self, other: &Rc<T>) -> bool {\n        **self != **other\n    }\n}\n\n// Hack to allow specializing on `Eq` even though `Eq` has a method.\n#[rustc_unsafe_specialization_marker]\npub(crate) trait MarkerEq: PartialEq<Self> {}\n\nimpl<T: Eq> MarkerEq for T {}\n\n/// We're doing this specialization here, and not as a more general optimization on `&T`, because it\n/// would otherwise add a cost to all equality checks on refs. We assume that `Rc`s are used to\n/// store large values, that are slow to clone, but also heavy to check for equality, causing this\n/// cost to pay off more easily. It's also more likely to have two `Rc` clones, that point to\n/// the same value, than two `&T`s.\n///\n/// We can only do this when `T: Eq` as a `PartialEq` might be deliberately irreflexive.\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + MarkerEq> RcEqIdent<T> for Rc<T> {\n    #[inline]\n    fn eq(&self, other: &Rc<T>) -> bool {\n        Rc::ptr_eq(self, other) || **self == **other\n    }\n\n    #[inline]\n    fn ne(&self, other: &Rc<T>) -> bool {\n        !Rc::ptr_eq(self, other) && **self != **other\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + PartialEq> PartialEq for Rc<T> {\n    /// Equality for two `Rc`s.\n    ///\n    /// Two `Rc`s are equal if their inner values are equal, even if they are\n    /// stored in different allocation.\n    ///\n    /// If `T` also implements `Eq` (implying reflexivity of equality),\n    /// two `Rc`s that point to the same allocation are\n    /// always equal.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let five = Rc::new(5);\n    ///\n    /// assert!(five == Rc::new(5));\n    /// ```\n    #[inline]\n    fn eq(&self, other: &Rc<T>) -> bool {\n        RcEqIdent::eq(self, other)\n    }\n\n    /// Inequality for two `Rc`s.\n    ///\n    /// Two `Rc`s are unequal if their inner values are unequal.\n    ///\n    /// If `T` also implements `Eq` (implying reflexivity of equality),\n    /// two `Rc`s that point to the same allocation are\n    /// never unequal.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let five = Rc::new(5);\n    ///\n    /// assert!(five != Rc::new(6));\n    /// ```\n    #[inline]\n    fn ne(&self, other: &Rc<T>) -> bool {\n        RcEqIdent::ne(self, other)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + Eq> Eq for Rc<T> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + PartialOrd> PartialOrd for Rc<T> {\n    /// Partial comparison for two `Rc`s.\n    ///\n    /// The two are compared by calling `partial_cmp()` on their inner values.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    /// use std::cmp::Ordering;\n    ///\n    /// let five = Rc::new(5);\n    ///\n    /// assert_eq!(Some(Ordering::Less), five.partial_cmp(&Rc::new(6)));\n    /// ```\n    #[inline(always)]\n    fn partial_cmp(&self, other: &Rc<T>) -> Option<Ordering> {\n        (**self).partial_cmp(&**other)\n    }\n\n    /// Less-than comparison for two `Rc`s.\n    ///\n    /// The two are compared by calling `<` on their inner values.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let five = Rc::new(5);\n    ///\n    /// assert!(five < Rc::new(6));\n    /// ```\n    #[inline(always)]\n    fn lt(&self, other: &Rc<T>) -> bool {\n        **self < **other\n    }\n\n    /// 'Less than or equal to' comparison for two `Rc`s.\n    ///\n    /// The two are compared by calling `<=` on their inner values.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let five = Rc::new(5);\n    ///\n    /// assert!(five <= Rc::new(5));\n    /// ```\n    #[inline(always)]\n    fn le(&self, other: &Rc<T>) -> bool {\n        **self <= **other\n    }\n\n    /// Greater-than comparison for two `Rc`s.\n    ///\n    /// The two are compared by calling `>` on their inner values.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let five = Rc::new(5);\n    ///\n    /// assert!(five > Rc::new(4));\n    /// ```\n    #[inline(always)]\n    fn gt(&self, other: &Rc<T>) -> bool {\n        **self > **other\n    }\n\n    /// 'Greater than or equal to' comparison for two `Rc`s.\n    ///\n    /// The two are compared by calling `>=` on their inner values.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let five = Rc::new(5);\n    ///\n    /// assert!(five >= Rc::new(5));\n    /// ```\n    #[inline(always)]\n    fn ge(&self, other: &Rc<T>) -> bool {\n        **self >= **other\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + Ord> Ord for Rc<T> {\n    /// Comparison for two `Rc`s.\n    ///\n    /// The two are compared by calling `cmp()` on their inner values.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    /// use std::cmp::Ordering;\n    ///\n    /// let five = Rc::new(5);\n    ///\n    /// assert_eq!(Ordering::Less, five.cmp(&Rc::new(6)));\n    /// ```\n    #[inline]\n    fn cmp(&self, other: &Rc<T>) -> Ordering {\n        (**self).cmp(&**other)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + Hash> Hash for Rc<T> {\n    fn hash<H: Hasher>(&self, state: &mut H) {\n        (**self).hash(state);\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + fmt::Display> fmt::Display for Rc<T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        fmt::Display::fmt(&**self, f)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + fmt::Debug> fmt::Debug for Rc<T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        fmt::Debug::fmt(&**self, f)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized> fmt::Pointer for Rc<T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        fmt::Pointer::fmt(&(&**self as *const T), f)\n    }\n}\n\n#[stable(feature = \"from_for_ptrs\", since = \"1.6.0\")]\nimpl<T> From<T> for Rc<T> {\n    fn from(t: T) -> Self {\n        Rc::new(t)\n    }\n}\n\n#[stable(feature = \"shared_from_slice\", since = \"1.21.0\")]\nimpl<T: Clone> From<&[T]> for Rc<[T]> {\n    /// Allocate a reference-counted slice and fill it by cloning `v`'s items.\n    ///\n    /// # Example\n    ///\n    /// ```\n    /// # use std::rc::Rc;\n    /// let original: &[i32] = &[1, 2, 3];\n    /// let shared: Rc<[i32]> = Rc::from(original);\n    /// assert_eq!(&[1, 2, 3], &shared[..]);\n    /// ```\n    #[inline]\n    fn from(v: &[T]) -> Rc<[T]> {\n        <Self as RcFromSlice<T>>::from_slice(v)\n    }\n}\n\n#[stable(feature = \"shared_from_slice\", since = \"1.21.0\")]\nimpl From<&str> for Rc<str> {\n    /// Allocate a reference-counted string slice and copy `v` into it.\n    ///\n    /// # Example\n    ///\n    /// ```\n    /// # use std::rc::Rc;\n    /// let shared: Rc<str> = Rc::from(\"statue\");\n    /// assert_eq!(\"statue\", &shared[..]);\n    /// ```\n    #[inline]\n    fn from(v: &str) -> Rc<str> {\n        let rc = Rc::<[u8]>::from(v.as_bytes());\n        unsafe { Rc::from_raw(Rc::into_raw(rc) as *const str) }\n    }\n}\n\n#[stable(feature = \"shared_from_slice\", since = \"1.21.0\")]\nimpl From<String> for Rc<str> {\n    /// Allocate a reference-counted string slice and copy `v` into it.\n    ///\n    /// # Example\n    ///\n    /// ```\n    /// # use std::rc::Rc;\n    /// let original: String = \"statue\".to_owned();\n    /// let shared: Rc<str> = Rc::from(original);\n    /// assert_eq!(\"statue\", &shared[..]);\n    /// ```\n    #[inline]\n    fn from(v: String) -> Rc<str> {\n        Rc::from(&v[..])\n    }\n}\n\n#[stable(feature = \"shared_from_slice\", since = \"1.21.0\")]\nimpl<T: ?Sized> From<Box<T>> for Rc<T> {\n    /// Move a boxed object to a new, reference counted, allocation.\n    ///\n    /// # Example\n    ///\n    /// ```\n    /// # use std::rc::Rc;\n    /// let original: Box<i32> = Box::new(1);\n    /// let shared: Rc<i32> = Rc::from(original);\n    /// assert_eq!(1, *shared);\n    /// ```\n    #[inline]\n    fn from(v: Box<T>) -> Rc<T> {\n        Rc::from_box(v)\n    }\n}\n\n#[stable(feature = \"shared_from_slice\", since = \"1.21.0\")]\nimpl<T> From<Vec<T>> for Rc<[T]> {\n    /// Allocate a reference-counted slice and move `v`'s items into it.\n    ///\n    /// # Example\n    ///\n    /// ```\n    /// # use std::rc::Rc;\n    /// let original: Box<Vec<i32>> = Box::new(vec![1, 2, 3]);\n    /// let shared: Rc<Vec<i32>> = Rc::from(original);\n    /// assert_eq!(vec![1, 2, 3], *shared);\n    /// ```\n    #[inline]\n    fn from(mut v: Vec<T>) -> Rc<[T]> {\n        unsafe {\n            let rc = Rc::copy_from_slice(&v);\n\n            // Allow the Vec to free its memory, but not destroy its contents\n            v.set_len(0);\n\n            rc\n        }\n    }\n}\n\n#[stable(feature = \"shared_from_cow\", since = \"1.45.0\")]\nimpl<'a, B> From<Cow<'a, B>> for Rc<B>\nwhere\n    B: ToOwned + ?Sized,\n    Rc<B>: From<&'a B> + From<B::Owned>,\n{\n    #[inline]\n    fn from(cow: Cow<'a, B>) -> Rc<B> {\n        match cow {\n            Cow::Borrowed(s) => Rc::from(s),\n            Cow::Owned(s) => Rc::from(s),\n        }\n    }\n}\n\n#[stable(feature = \"boxed_slice_try_from\", since = \"1.43.0\")]\nimpl<T, const N: usize> TryFrom<Rc<[T]>> for Rc<[T; N]> {\n    type Error = Rc<[T]>;\n\n    fn try_from(boxed_slice: Rc<[T]>) -> Result<Self, Self::Error> {\n        if boxed_slice.len() == N {\n            Ok(unsafe { Rc::from_raw(Rc::into_raw(boxed_slice) as *mut [T; N]) })\n        } else {\n            Err(boxed_slice)\n        }\n    }\n}\n\n#[stable(feature = \"shared_from_iter\", since = \"1.37.0\")]\nimpl<T> iter::FromIterator<T> for Rc<[T]> {\n    /// Takes each element in the `Iterator` and collects it into an `Rc<[T]>`.\n    ///\n    /// # Performance characteristics\n    ///\n    /// ## The general case\n    ///\n    /// In the general case, collecting into `Rc<[T]>` is done by first\n    /// collecting into a `Vec<T>`. That is, when writing the following:\n    ///\n    /// ```rust\n    /// # use std::rc::Rc;\n    /// let evens: Rc<[u8]> = (0..10).filter(|&x| x % 2 == 0).collect();\n    /// # assert_eq!(&*evens, &[0, 2, 4, 6, 8]);\n    /// ```\n    ///\n    /// this behaves as if we wrote:\n    ///\n    /// ```rust\n    /// # use std::rc::Rc;\n    /// let evens: Rc<[u8]> = (0..10).filter(|&x| x % 2 == 0)\n    ///     .collect::<Vec<_>>() // The first set of allocations happens here.\n    ///     .into(); // A second allocation for `Rc<[T]>` happens here.\n    /// # assert_eq!(&*evens, &[0, 2, 4, 6, 8]);\n    /// ```\n    ///\n    /// This will allocate as many times as needed for constructing the `Vec<T>`\n    /// and then it will allocate once for turning the `Vec<T>` into the `Rc<[T]>`.\n    ///\n    /// ## Iterators of known length\n    ///\n    /// When your `Iterator` implements `TrustedLen` and is of an exact size,\n    /// a single allocation will be made for the `Rc<[T]>`. For example:\n    ///\n    /// ```rust\n    /// # use std::rc::Rc;\n    /// let evens: Rc<[u8]> = (0..10).collect(); // Just a single allocation happens here.\n    /// # assert_eq!(&*evens, &*(0..10).collect::<Vec<_>>());\n    /// ```\n    fn from_iter<I: iter::IntoIterator<Item = T>>(iter: I) -> Self {\n        ToRcSlice::to_rc_slice(iter.into_iter())\n    }\n}\n\n/// Specialization trait used for collecting into `Rc<[T]>`.\ntrait ToRcSlice<T>: Iterator<Item = T> + Sized {\n    fn to_rc_slice(self) -> Rc<[T]>;\n}\n\nimpl<T, I: Iterator<Item = T>> ToRcSlice<T> for I {\n    default fn to_rc_slice(self) -> Rc<[T]> {\n        self.collect::<Vec<T>>().into()\n    }\n}\n\nimpl<T, I: iter::TrustedLen<Item = T>> ToRcSlice<T> for I {\n    fn to_rc_slice(self) -> Rc<[T]> {\n        // This is the case for a `TrustedLen` iterator.\n        let (low, high) = self.size_hint();\n        if let Some(high) = high {\n            debug_assert_eq!(\n                low,\n                high,\n                \"TrustedLen iterator's size hint is not exact: {:?}\",\n                (low, high)\n            );\n\n            unsafe {\n                // SAFETY: We need to ensure that the iterator has an exact length and we have.\n                Rc::from_iter_exact(self, low)\n            }\n        } else {\n            // TrustedLen contract guarantees that `upper_bound == `None` implies an iterator\n            // length exceeding `usize::MAX`.\n            // The default implementation would collect into a vec which would panic.\n            // Thus we panic here immediately without invoking `Vec` code.\n            panic!(\"capacity overflow\");\n        }\n    }\n}\n\n/// `Weak` is a version of [`Rc`] that holds a non-owning reference to the\n/// managed allocation. The allocation is accessed by calling [`upgrade`] on the `Weak`\n/// pointer, which returns an [`Option`]`<`[`Rc`]`<T>>`.\n///\n/// Since a `Weak` reference does not count towards ownership, it will not\n/// prevent the value stored in the allocation from being dropped, and `Weak` itself makes no\n/// guarantees about the value still being present. Thus it may return [`None`]\n/// when [`upgrade`]d. Note however that a `Weak` reference *does* prevent the allocation\n/// itself (the backing store) from being deallocated.\n///\n/// A `Weak` pointer is useful for keeping a temporary reference to the allocation\n/// managed by [`Rc`] without preventing its inner value from being dropped. It is also used to\n/// prevent circular references between [`Rc`] pointers, since mutual owning references\n/// would never allow either [`Rc`] to be dropped. For example, a tree could\n/// have strong [`Rc`] pointers from parent nodes to children, and `Weak`\n/// pointers from children back to their parents.\n///\n/// The typical way to obtain a `Weak` pointer is to call [`Rc::downgrade`].\n///\n/// [`upgrade`]: Weak::upgrade\n#[stable(feature = \"rc_weak\", since = \"1.4.0\")]\npub struct Weak<T: ?Sized> {\n    // This is a `NonNull` to allow optimizing the size of this type in enums,\n    // but it is not necessarily a valid pointer.\n    // `Weak::new` sets this to `usize::MAX` so that it doesn’t need\n    // to allocate space on the heap.  That's not a value a real pointer\n    // will ever have because RcBox has alignment at least 2.\n    // This is only possible when `T: Sized`; unsized `T` never dangle.\n    ptr: NonNull<RcBox<T>>,\n}\n\n#[stable(feature = \"rc_weak\", since = \"1.4.0\")]\nimpl<T: ?Sized> !marker::Send for Weak<T> {}\n#[stable(feature = \"rc_weak\", since = \"1.4.0\")]\nimpl<T: ?Sized> !marker::Sync for Weak<T> {}\n\n#[unstable(feature = \"coerce_unsized\", issue = \"27732\")]\nimpl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<Weak<U>> for Weak<T> {}\n\n#[unstable(feature = \"dispatch_from_dyn\", issue = \"none\")]\nimpl<T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<Weak<U>> for Weak<T> {}\n\nimpl<T> Weak<T> {\n    /// Constructs a new `Weak<T>`, without allocating any memory.\n    /// Calling [`upgrade`] on the return value always gives [`None`].\n    ///\n    /// [`upgrade`]: Weak::upgrade\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Weak;\n    ///\n    /// let empty: Weak<i64> = Weak::new();\n    /// assert!(empty.upgrade().is_none());\n    /// ```\n    #[stable(feature = \"downgraded_weak\", since = \"1.10.0\")]\n    pub fn new() -> Weak<T> {\n        Weak { ptr: NonNull::new(usize::MAX as *mut RcBox<T>).expect(\"MAX is not 0\") }\n    }\n}\n\npub(crate) fn is_dangling<T: ?Sized>(ptr: *mut T) -> bool {\n    let address = ptr as *mut () as usize;\n    address == usize::MAX\n}\n\n/// Helper type to allow accessing the reference counts without\n/// making any assertions about the data field.\nstruct WeakInner<'a> {\n    weak: &'a Cell<usize>,\n    strong: &'a Cell<usize>,\n}\n\nimpl<T: ?Sized> Weak<T> {\n    /// Returns a raw pointer to the object `T` pointed to by this `Weak<T>`.\n    ///\n    /// The pointer is valid only if there are some strong references. The pointer may be dangling,\n    /// unaligned or even [`null`] otherwise.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    /// use std::ptr;\n    ///\n    /// let strong = Rc::new(\"hello\".to_owned());\n    /// let weak = Rc::downgrade(&strong);\n    /// // Both point to the same object\n    /// assert!(ptr::eq(&*strong, weak.as_ptr()));\n    /// // The strong here keeps it alive, so we can still access the object.\n    /// assert_eq!(\"hello\", unsafe { &*weak.as_ptr() });\n    ///\n    /// drop(strong);\n    /// // But not any more. We can do weak.as_ptr(), but accessing the pointer would lead to\n    /// // undefined behaviour.\n    /// // assert_eq!(\"hello\", unsafe { &*weak.as_ptr() });\n    /// ```\n    ///\n    /// [`null`]: core::ptr::null\n    #[stable(feature = \"rc_as_ptr\", since = \"1.45.0\")]\n    pub fn as_ptr(&self) -> *const T {\n        let ptr: *mut RcBox<T> = NonNull::as_ptr(self.ptr);\n\n        if is_dangling(ptr) {\n            // If the pointer is dangling, we return the sentinel directly. This cannot be\n            // a valid payload address, as the payload is at least as aligned as RcBox (usize).\n            ptr as *const T\n        } else {\n            // SAFETY: if is_dangling returns false, then the pointer is dereferencable.\n            // The payload may be dropped at this point, and we have to maintain provenance,\n            // so use raw pointer manipulation.\n            unsafe { ptr::addr_of_mut!((*ptr).value) }\n        }\n    }\n\n    /// Consumes the `Weak<T>` and turns it into a raw pointer.\n    ///\n    /// This converts the weak pointer into a raw pointer, while still preserving the ownership of\n    /// one weak reference (the weak count is not modified by this operation). It can be turned\n    /// back into the `Weak<T>` with [`from_raw`].\n    ///\n    /// The same restrictions of accessing the target of the pointer as with\n    /// [`as_ptr`] apply.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::{Rc, Weak};\n    ///\n    /// let strong = Rc::new(\"hello\".to_owned());\n    /// let weak = Rc::downgrade(&strong);\n    /// let raw = weak.into_raw();\n    ///\n    /// assert_eq!(1, Rc::weak_count(&strong));\n    /// assert_eq!(\"hello\", unsafe { &*raw });\n    ///\n    /// drop(unsafe { Weak::from_raw(raw) });\n    /// assert_eq!(0, Rc::weak_count(&strong));\n    /// ```\n    ///\n    /// [`from_raw`]: Weak::from_raw\n    /// [`as_ptr`]: Weak::as_ptr\n    #[stable(feature = \"weak_into_raw\", since = \"1.45.0\")]\n    pub fn into_raw(self) -> *const T {\n        let result = self.as_ptr();\n        mem::forget(self);\n        result\n    }\n\n    /// Converts a raw pointer previously created by [`into_raw`] back into `Weak<T>`.\n    ///\n    /// This can be used to safely get a strong reference (by calling [`upgrade`]\n    /// later) or to deallocate the weak count by dropping the `Weak<T>`.\n    ///\n    /// It takes ownership of one weak reference (with the exception of pointers created by [`new`],\n    /// as these don't own anything; the method still works on them).\n    ///\n    /// # Safety\n    ///\n    /// The pointer must have originated from the [`into_raw`] and must still own its potential\n    /// weak reference.\n    ///\n    /// It is allowed for the strong count to be 0 at the time of calling this. Nevertheless, this\n    /// takes ownership of one weak reference currently represented as a raw pointer (the weak\n    /// count is not modified by this operation) and therefore it must be paired with a previous\n    /// call to [`into_raw`].\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::{Rc, Weak};\n    ///\n    /// let strong = Rc::new(\"hello\".to_owned());\n    ///\n    /// let raw_1 = Rc::downgrade(&strong).into_raw();\n    /// let raw_2 = Rc::downgrade(&strong).into_raw();\n    ///\n    /// assert_eq!(2, Rc::weak_count(&strong));\n    ///\n    /// assert_eq!(\"hello\", &*unsafe { Weak::from_raw(raw_1) }.upgrade().unwrap());\n    /// assert_eq!(1, Rc::weak_count(&strong));\n    ///\n    /// drop(strong);\n    ///\n    /// // Decrement the last weak count.\n    /// assert!(unsafe { Weak::from_raw(raw_2) }.upgrade().is_none());\n    /// ```\n    ///\n    /// [`into_raw`]: Weak::into_raw\n    /// [`upgrade`]: Weak::upgrade\n    /// [`new`]: Weak::new\n    #[stable(feature = \"weak_into_raw\", since = \"1.45.0\")]\n    pub unsafe fn from_raw(ptr: *const T) -> Self {\n        // See Weak::as_ptr for context on how the input pointer is derived.\n\n        let ptr = if is_dangling(ptr as *mut T) {\n            // This is a dangling Weak.\n            ptr as *mut RcBox<T>\n        } else {\n            // Otherwise, we're guaranteed the pointer came from a nondangling Weak.\n            // SAFETY: data_offset is safe to call, as ptr references a real (potentially dropped) T.\n            let offset = unsafe { data_offset(ptr) };\n            // Thus, we reverse the offset to get the whole RcBox.\n            // SAFETY: the pointer originated from a Weak, so this offset is safe.\n            unsafe { (ptr as *mut RcBox<T>).set_ptr_value((ptr as *mut u8).offset(-offset)) }\n        };\n\n        // SAFETY: we now have recovered the original Weak pointer, so can create the Weak.\n        Weak { ptr: unsafe { NonNull::new_unchecked(ptr) } }\n    }\n\n    /// Attempts to upgrade the `Weak` pointer to an [`Rc`], delaying\n    /// dropping of the inner value if successful.\n    ///\n    /// Returns [`None`] if the inner value has since been dropped.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let five = Rc::new(5);\n    ///\n    /// let weak_five = Rc::downgrade(&five);\n    ///\n    /// let strong_five: Option<Rc<_>> = weak_five.upgrade();\n    /// assert!(strong_five.is_some());\n    ///\n    /// // Destroy all strong pointers.\n    /// drop(strong_five);\n    /// drop(five);\n    ///\n    /// assert!(weak_five.upgrade().is_none());\n    /// ```\n    #[stable(feature = \"rc_weak\", since = \"1.4.0\")]\n    pub fn upgrade(&self) -> Option<Rc<T>> {\n        let inner = self.inner()?;\n        if inner.strong() == 0 {\n            None\n        } else {\n            inner.inc_strong();\n            Some(Rc::from_inner(self.ptr))\n        }\n    }\n\n    /// Gets the number of strong (`Rc`) pointers pointing to this allocation.\n    ///\n    /// If `self` was created using [`Weak::new`], this will return 0.\n    #[stable(feature = \"weak_counts\", since = \"1.41.0\")]\n    pub fn strong_count(&self) -> usize {\n        if let Some(inner) = self.inner() { inner.strong() } else { 0 }\n    }\n\n    /// Gets the number of `Weak` pointers pointing to this allocation.\n    ///\n    /// If no strong pointers remain, this will return zero.\n    #[stable(feature = \"weak_counts\", since = \"1.41.0\")]\n    pub fn weak_count(&self) -> usize {\n        self.inner()\n            .map(|inner| {\n                if inner.strong() > 0 {\n                    inner.weak() - 1 // subtract the implicit weak ptr\n                } else {\n                    0\n                }\n            })\n            .unwrap_or(0)\n    }\n\n    /// Returns `None` when the pointer is dangling and there is no allocated `RcBox`,\n    /// (i.e., when this `Weak` was created by `Weak::new`).\n    #[inline]\n    fn inner(&self) -> Option<WeakInner<'_>> {\n        if is_dangling(self.ptr.as_ptr()) {\n            None\n        } else {\n            // We are careful to *not* create a reference covering the \"data\" field, as\n            // the field may be mutated concurrently (for example, if the last `Rc`\n            // is dropped, the data field will be dropped in-place).\n            Some(unsafe {\n                let ptr = self.ptr.as_ptr();\n                WeakInner { strong: &(*ptr).strong, weak: &(*ptr).weak }\n            })\n        }\n    }\n\n    /// Returns `true` if the two `Weak`s point to the same allocation (similar to\n    /// [`ptr::eq`]), or if both don't point to any allocation\n    /// (because they were created with `Weak::new()`).\n    ///\n    /// # Notes\n    ///\n    /// Since this compares pointers it means that `Weak::new()` will equal each\n    /// other, even though they don't point to any allocation.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Rc;\n    ///\n    /// let first_rc = Rc::new(5);\n    /// let first = Rc::downgrade(&first_rc);\n    /// let second = Rc::downgrade(&first_rc);\n    ///\n    /// assert!(first.ptr_eq(&second));\n    ///\n    /// let third_rc = Rc::new(5);\n    /// let third = Rc::downgrade(&third_rc);\n    ///\n    /// assert!(!first.ptr_eq(&third));\n    /// ```\n    ///\n    /// Comparing `Weak::new`.\n    ///\n    /// ```\n    /// use std::rc::{Rc, Weak};\n    ///\n    /// let first = Weak::new();\n    /// let second = Weak::new();\n    /// assert!(first.ptr_eq(&second));\n    ///\n    /// let third_rc = Rc::new(());\n    /// let third = Rc::downgrade(&third_rc);\n    /// assert!(!first.ptr_eq(&third));\n    /// ```\n    ///\n    /// [`ptr::eq`]: core::ptr::eq\n    #[inline]\n    #[stable(feature = \"weak_ptr_eq\", since = \"1.39.0\")]\n    pub fn ptr_eq(&self, other: &Self) -> bool {\n        self.ptr.as_ptr() == other.ptr.as_ptr()\n    }\n}\n\n#[stable(feature = \"rc_weak\", since = \"1.4.0\")]\nimpl<T: ?Sized> Drop for Weak<T> {\n    /// Drops the `Weak` pointer.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::{Rc, Weak};\n    ///\n    /// struct Foo;\n    ///\n    /// impl Drop for Foo {\n    ///     fn drop(&mut self) {\n    ///         println!(\"dropped!\");\n    ///     }\n    /// }\n    ///\n    /// let foo = Rc::new(Foo);\n    /// let weak_foo = Rc::downgrade(&foo);\n    /// let other_weak_foo = Weak::clone(&weak_foo);\n    ///\n    /// drop(weak_foo);   // Doesn't print anything\n    /// drop(foo);        // Prints \"dropped!\"\n    ///\n    /// assert!(other_weak_foo.upgrade().is_none());\n    /// ```\n    fn drop(&mut self) {\n        let inner = if let Some(inner) = self.inner() { inner } else { return };\n\n        inner.dec_weak();\n        // the weak count starts at 1, and will only go to zero if all\n        // the strong pointers have disappeared.\n        if inner.weak() == 0 {\n            unsafe {\n                Global.deallocate(self.ptr.cast(), Layout::for_value_raw(self.ptr.as_ptr()));\n            }\n        }\n    }\n}\n\n#[stable(feature = \"rc_weak\", since = \"1.4.0\")]\nimpl<T: ?Sized> Clone for Weak<T> {\n    /// Makes a clone of the `Weak` pointer that points to the same allocation.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::{Rc, Weak};\n    ///\n    /// let weak_five = Rc::downgrade(&Rc::new(5));\n    ///\n    /// let _ = Weak::clone(&weak_five);\n    /// ```\n    #[inline]\n    fn clone(&self) -> Weak<T> {\n        if let Some(inner) = self.inner() {\n            inner.inc_weak()\n        }\n        Weak { ptr: self.ptr }\n    }\n}\n\n#[stable(feature = \"rc_weak\", since = \"1.4.0\")]\nimpl<T: ?Sized + fmt::Debug> fmt::Debug for Weak<T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        write!(f, \"(Weak)\")\n    }\n}\n\n#[stable(feature = \"downgraded_weak\", since = \"1.10.0\")]\nimpl<T> Default for Weak<T> {\n    /// Constructs a new `Weak<T>`, without allocating any memory.\n    /// Calling [`upgrade`] on the return value always gives [`None`].\n    ///\n    /// [`None`]: Option\n    /// [`upgrade`]: Weak::upgrade\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::rc::Weak;\n    ///\n    /// let empty: Weak<i64> = Default::default();\n    /// assert!(empty.upgrade().is_none());\n    /// ```\n    fn default() -> Weak<T> {\n        Weak::new()\n    }\n}\n\n// NOTE: We checked_add here to deal with mem::forget safely. In particular\n// if you mem::forget Rcs (or Weaks), the ref-count can overflow, and then\n// you can free the allocation while outstanding Rcs (or Weaks) exist.\n// We abort because this is such a degenerate scenario that we don't care about\n// what happens -- no real program should ever experience this.\n//\n// This should have negligible overhead since you don't actually need to\n// clone these much in Rust thanks to ownership and move-semantics.\n\n#[doc(hidden)]\ntrait RcInnerPtr {\n    fn weak_ref(&self) -> &Cell<usize>;\n    fn strong_ref(&self) -> &Cell<usize>;\n\n    #[inline]\n    fn strong(&self) -> usize {\n        self.strong_ref().get()\n    }\n\n    #[inline]\n    fn inc_strong(&self) {\n        let strong = self.strong();\n\n        // We want to abort on overflow instead of dropping the value.\n        // The reference count will never be zero when this is called;\n        // nevertheless, we insert an abort here to hint LLVM at\n        // an otherwise missed optimization.\n        if strong == 0 || strong == usize::MAX {\n            abort();\n        }\n        self.strong_ref().set(strong + 1);\n    }\n\n    #[inline]\n    fn dec_strong(&self) {\n        self.strong_ref().set(self.strong() - 1);\n    }\n\n    #[inline]\n    fn weak(&self) -> usize {\n        self.weak_ref().get()\n    }\n\n    #[inline]\n    fn inc_weak(&self) {\n        let weak = self.weak();\n\n        // We want to abort on overflow instead of dropping the value.\n        // The reference count will never be zero when this is called;\n        // nevertheless, we insert an abort here to hint LLVM at\n        // an otherwise missed optimization.\n        if weak == 0 || weak == usize::MAX {\n            abort();\n        }\n        self.weak_ref().set(weak + 1);\n    }\n\n    #[inline]\n    fn dec_weak(&self) {\n        self.weak_ref().set(self.weak() - 1);\n    }\n}\n\nimpl<T: ?Sized> RcInnerPtr for RcBox<T> {\n    #[inline(always)]\n    fn weak_ref(&self) -> &Cell<usize> {\n        &self.weak\n    }\n\n    #[inline(always)]\n    fn strong_ref(&self) -> &Cell<usize> {\n        &self.strong\n    }\n}\n\nimpl<'a> RcInnerPtr for WeakInner<'a> {\n    #[inline(always)]\n    fn weak_ref(&self) -> &Cell<usize> {\n        self.weak\n    }\n\n    #[inline(always)]\n    fn strong_ref(&self) -> &Cell<usize> {\n        self.strong\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized> borrow::Borrow<T> for Rc<T> {\n    fn borrow(&self) -> &T {\n        &**self\n    }\n}\n\n#[stable(since = \"1.5.0\", feature = \"smart_ptr_as_ref\")]\nimpl<T: ?Sized> AsRef<T> for Rc<T> {\n    fn as_ref(&self) -> &T {\n        &**self\n    }\n}\n\n#[stable(feature = \"pin\", since = \"1.33.0\")]\nimpl<T: ?Sized> Unpin for Rc<T> {}\n\n/// Get the offset within an `RcBox` for the payload behind a pointer.\n///\n/// # Safety\n///\n/// The pointer must point to (and have valid metadata for) a previously\n/// valid instance of T, but the T is allowed to be dropped.\nunsafe fn data_offset<T: ?Sized>(ptr: *const T) -> isize {\n    // Align the unsized value to the end of the RcBox.\n    // Because RcBox is repr(C), it will always be the last field in memory.\n    // SAFETY: since the only unsized types possible are slices, trait objects,\n    // and extern types, the input safety requirement is currently enough to\n    // satisfy the requirements of align_of_val_raw; this is an implementation\n    // detail of the language that may not be relied upon outside of std.\n    unsafe { data_offset_align(align_of_val_raw(ptr)) }\n}\n\n#[inline]\nfn data_offset_align(align: usize) -> isize {\n    let layout = Layout::new::<RcBox<()>>();\n    (layout.size() + layout.padding_needed_for(align)) as isize\n}\n//! A dynamically-sized view into a contiguous sequence, `[T]`.\n//!\n//! *[See also the slice primitive type](slice).*\n//!\n//! Slices are a view into a block of memory represented as a pointer and a\n//! length.\n//!\n//! ```\n//! // slicing a Vec\n//! let vec = vec![1, 2, 3];\n//! let int_slice = &vec[..];\n//! // coercing an array to a slice\n//! let str_slice: &[&str] = &[\"one\", \"two\", \"three\"];\n//! ```\n//!\n//! Slices are either mutable or shared. The shared slice type is `&[T]`,\n//! while the mutable slice type is `&mut [T]`, where `T` represents the element\n//! type. For example, you can mutate the block of memory that a mutable slice\n//! points to:\n//!\n//! ```\n//! let x = &mut [1, 2, 3];\n//! x[1] = 7;\n//! assert_eq!(x, &[1, 7, 3]);\n//! ```\n//!\n//! Here are some of the things this module contains:\n//!\n//! ## Structs\n//!\n//! There are several structs that are useful for slices, such as [`Iter`], which\n//! represents iteration over a slice.\n//!\n//! ## Trait Implementations\n//!\n//! There are several implementations of common traits for slices. Some examples\n//! include:\n//!\n//! * [`Clone`]\n//! * [`Eq`], [`Ord`] - for slices whose element type are [`Eq`] or [`Ord`].\n//! * [`Hash`] - for slices whose element type is [`Hash`].\n//!\n//! ## Iteration\n//!\n//! The slices implement `IntoIterator`. The iterator yields references to the\n//! slice elements.\n//!\n//! ```\n//! let numbers = &[0, 1, 2];\n//! for n in numbers {\n//!     println!(\"{} is a number!\", n);\n//! }\n//! ```\n//!\n//! The mutable slice yields mutable references to the elements:\n//!\n//! ```\n//! let mut scores = [7, 8, 9];\n//! for score in &mut scores[..] {\n//!     *score += 1;\n//! }\n//! ```\n//!\n//! This iterator yields mutable references to the slice's elements, so while\n//! the element type of the slice is `i32`, the element type of the iterator is\n//! `&mut i32`.\n//!\n//! * [`.iter`] and [`.iter_mut`] are the explicit methods to return the default\n//!   iterators.\n//! * Further methods that return iterators are [`.split`], [`.splitn`],\n//!   [`.chunks`], [`.windows`] and more.\n//!\n//! [`Hash`]: core::hash::Hash\n//! [`.iter`]: slice::iter\n//! [`.iter_mut`]: slice::iter_mut\n//! [`.split`]: slice::split\n//! [`.splitn`]: slice::splitn\n//! [`.chunks`]: slice::chunks\n//! [`.windows`]: slice::windows\n#![stable(feature = \"rust1\", since = \"1.0.0\")]\n// Many of the usings in this module are only used in the test configuration.\n// It's cleaner to just turn off the unused_imports warning than to fix them.\n#![cfg_attr(test, allow(unused_imports, dead_code))]\n\nuse core::borrow::{Borrow, BorrowMut};\nuse core::cmp::Ordering::{self, Less};\nuse core::mem::{self, size_of};\nuse core::ptr;\n\nuse crate::alloc::{Allocator, Global};\nuse crate::borrow::ToOwned;\nuse crate::boxed::Box;\nuse crate::vec::Vec;\n\n#[unstable(feature = \"slice_range\", issue = \"76393\")]\npub use core::slice::range;\n#[unstable(feature = \"array_chunks\", issue = \"74985\")]\npub use core::slice::ArrayChunks;\n#[unstable(feature = \"array_chunks\", issue = \"74985\")]\npub use core::slice::ArrayChunksMut;\n#[unstable(feature = \"array_windows\", issue = \"75027\")]\npub use core::slice::ArrayWindows;\n#[stable(feature = \"slice_get_slice\", since = \"1.28.0\")]\npub use core::slice::SliceIndex;\n#[stable(feature = \"from_ref\", since = \"1.28.0\")]\npub use core::slice::{from_mut, from_ref};\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::slice::{from_raw_parts, from_raw_parts_mut};\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::slice::{Chunks, Windows};\n#[stable(feature = \"chunks_exact\", since = \"1.31.0\")]\npub use core::slice::{ChunksExact, ChunksExactMut};\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::slice::{ChunksMut, Split, SplitMut};\n#[unstable(feature = \"slice_group_by\", issue = \"80552\")]\npub use core::slice::{GroupBy, GroupByMut};\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::slice::{Iter, IterMut};\n#[stable(feature = \"rchunks\", since = \"1.31.0\")]\npub use core::slice::{RChunks, RChunksExact, RChunksExactMut, RChunksMut};\n#[stable(feature = \"slice_rsplit\", since = \"1.27.0\")]\npub use core::slice::{RSplit, RSplitMut};\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::slice::{RSplitN, RSplitNMut, SplitN, SplitNMut};\n\n////////////////////////////////////////////////////////////////////////////////\n// Basic slice extension methods\n////////////////////////////////////////////////////////////////////////////////\n\n// HACK(japaric) needed for the implementation of `vec!` macro during testing\n// N.B., see the `hack` module in this file for more details.\n#[cfg(test)]\npub use hack::into_vec;\n\n// HACK(japaric) needed for the implementation of `Vec::clone` during testing\n// N.B., see the `hack` module in this file for more details.\n#[cfg(test)]\npub use hack::to_vec;\n\n// HACK(japaric): With cfg(test) `impl [T]` is not available, these three\n// functions are actually methods that are in `impl [T]` but not in\n// `core::slice::SliceExt` - we need to supply these functions for the\n// `test_permutations` test\nmod hack {\n    use core::alloc::Allocator;\n\n    use crate::boxed::Box;\n    use crate::vec::Vec;\n\n    // We shouldn't add inline attribute to this since this is used in\n    // `vec!` macro mostly and causes perf regression. See #71204 for\n    // discussion and perf results.\n    pub fn into_vec<T, A: Allocator>(b: Box<[T], A>) -> Vec<T, A> {\n        unsafe {\n            let len = b.len();\n            let (b, alloc) = Box::into_raw_with_allocator(b);\n            Vec::from_raw_parts_in(b as *mut T, len, len, alloc)\n        }\n    }\n\n    #[inline]\n    pub fn to_vec<T: ConvertVec, A: Allocator>(s: &[T], alloc: A) -> Vec<T, A> {\n        T::to_vec(s, alloc)\n    }\n\n    pub trait ConvertVec {\n        fn to_vec<A: Allocator>(s: &[Self], alloc: A) -> Vec<Self, A>\n        where\n            Self: Sized;\n    }\n\n    impl<T: Clone> ConvertVec for T {\n        #[inline]\n        default fn to_vec<A: Allocator>(s: &[Self], alloc: A) -> Vec<Self, A> {\n            struct DropGuard<'a, T, A: Allocator> {\n                vec: &'a mut Vec<T, A>,\n                num_init: usize,\n            }\n            impl<'a, T, A: Allocator> Drop for DropGuard<'a, T, A> {\n                #[inline]\n                fn drop(&mut self) {\n                    // SAFETY:\n                    // items were marked initialized in the loop below\n                    unsafe {\n                        self.vec.set_len(self.num_init);\n                    }\n                }\n            }\n            let mut vec = Vec::with_capacity_in(s.len(), alloc);\n            let mut guard = DropGuard { vec: &mut vec, num_init: 0 };\n            let slots = guard.vec.spare_capacity_mut();\n            // .take(slots.len()) is necessary for LLVM to remove bounds checks\n            // and has better codegen than zip.\n            for (i, b) in s.iter().enumerate().take(slots.len()) {\n                guard.num_init = i;\n                slots[i].write(b.clone());\n            }\n            core::mem::forget(guard);\n            // SAFETY:\n            // the vec was allocated and initialized above to at least this length.\n            unsafe {\n                vec.set_len(s.len());\n            }\n            vec\n        }\n    }\n\n    impl<T: Copy> ConvertVec for T {\n        #[inline]\n        fn to_vec<A: Allocator>(s: &[Self], alloc: A) -> Vec<Self, A> {\n            let mut v = Vec::with_capacity_in(s.len(), alloc);\n            // SAFETY:\n            // allocated above with the capacity of `s`, and initialize to `s.len()` in\n            // ptr::copy_to_non_overlapping below.\n            unsafe {\n                s.as_ptr().copy_to_nonoverlapping(v.as_mut_ptr(), s.len());\n                v.set_len(s.len());\n            }\n            v\n        }\n    }\n}\n\n#[lang = \"slice_alloc\"]\n#[cfg(not(test))]\nimpl<T> [T] {\n    /// Sorts the slice.\n    ///\n    /// This sort is stable (i.e., does not reorder equal elements) and *O*(*n* \\* log(*n*)) worst-case.\n    ///\n    /// When applicable, unstable sorting is preferred because it is generally faster than stable\n    /// sorting and it doesn't allocate auxiliary memory.\n    /// See [`sort_unstable`](slice::sort_unstable).\n    ///\n    /// # Current implementation\n    ///\n    /// The current algorithm is an adaptive, iterative merge sort inspired by\n    /// [timsort](https://en.wikipedia.org/wiki/Timsort).\n    /// It is designed to be very fast in cases where the slice is nearly sorted, or consists of\n    /// two or more sorted sequences concatenated one after another.\n    ///\n    /// Also, it allocates temporary storage half the size of `self`, but for short slices a\n    /// non-allocating insertion sort is used instead.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut v = [-5, 4, 1, -3, 2];\n    ///\n    /// v.sort();\n    /// assert!(v == [-5, -3, 1, 2, 4]);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    #[inline]\n    pub fn sort(&mut self)\n    where\n        T: Ord,\n    {\n        merge_sort(self, |a, b| a.lt(b));\n    }\n\n    /// Sorts the slice with a comparator function.\n    ///\n    /// This sort is stable (i.e., does not reorder equal elements) and *O*(*n* \\* log(*n*)) worst-case.\n    ///\n    /// The comparator function must define a total ordering for the elements in the slice. If\n    /// the ordering is not total, the order of the elements is unspecified. An order is a\n    /// total order if it is (for all `a`, `b` and `c`):\n    ///\n    /// * total and antisymmetric: exactly one of `a < b`, `a == b` or `a > b` is true, and\n    /// * transitive, `a < b` and `b < c` implies `a < c`. The same must hold for both `==` and `>`.\n    ///\n    /// For example, while [`f64`] doesn't implement [`Ord`] because `NaN != NaN`, we can use\n    /// `partial_cmp` as our sort function when we know the slice doesn't contain a `NaN`.\n    ///\n    /// ```\n    /// let mut floats = [5f64, 4.0, 1.0, 3.0, 2.0];\n    /// floats.sort_by(|a, b| a.partial_cmp(b).unwrap());\n    /// assert_eq!(floats, [1.0, 2.0, 3.0, 4.0, 5.0]);\n    /// ```\n    ///\n    /// When applicable, unstable sorting is preferred because it is generally faster than stable\n    /// sorting and it doesn't allocate auxiliary memory.\n    /// See [`sort_unstable_by`](slice::sort_unstable_by).\n    ///\n    /// # Current implementation\n    ///\n    /// The current algorithm is an adaptive, iterative merge sort inspired by\n    /// [timsort](https://en.wikipedia.org/wiki/Timsort).\n    /// It is designed to be very fast in cases where the slice is nearly sorted, or consists of\n    /// two or more sorted sequences concatenated one after another.\n    ///\n    /// Also, it allocates temporary storage half the size of `self`, but for short slices a\n    /// non-allocating insertion sort is used instead.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut v = [5, 4, 1, 3, 2];\n    /// v.sort_by(|a, b| a.cmp(b));\n    /// assert!(v == [1, 2, 3, 4, 5]);\n    ///\n    /// // reverse sorting\n    /// v.sort_by(|a, b| b.cmp(a));\n    /// assert!(v == [5, 4, 3, 2, 1]);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    #[inline]\n    pub fn sort_by<F>(&mut self, mut compare: F)\n    where\n        F: FnMut(&T, &T) -> Ordering,\n    {\n        merge_sort(self, |a, b| compare(a, b) == Less);\n    }\n\n    /// Sorts the slice with a key extraction function.\n    ///\n    /// This sort is stable (i.e., does not reorder equal elements) and *O*(*m* \\* *n* \\* log(*n*))\n    /// worst-case, where the key function is *O*(*m*).\n    ///\n    /// For expensive key functions (e.g. functions that are not simple property accesses or\n    /// basic operations), [`sort_by_cached_key`](slice::sort_by_cached_key) is likely to be\n    /// significantly faster, as it does not recompute element keys.\n    ///\n    /// When applicable, unstable sorting is preferred because it is generally faster than stable\n    /// sorting and it doesn't allocate auxiliary memory.\n    /// See [`sort_unstable_by_key`](slice::sort_unstable_by_key).\n    ///\n    /// # Current implementation\n    ///\n    /// The current algorithm is an adaptive, iterative merge sort inspired by\n    /// [timsort](https://en.wikipedia.org/wiki/Timsort).\n    /// It is designed to be very fast in cases where the slice is nearly sorted, or consists of\n    /// two or more sorted sequences concatenated one after another.\n    ///\n    /// Also, it allocates temporary storage half the size of `self`, but for short slices a\n    /// non-allocating insertion sort is used instead.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut v = [-5i32, 4, 1, -3, 2];\n    ///\n    /// v.sort_by_key(|k| k.abs());\n    /// assert!(v == [1, 2, -3, 4, -5]);\n    /// ```\n    #[stable(feature = \"slice_sort_by_key\", since = \"1.7.0\")]\n    #[inline]\n    pub fn sort_by_key<K, F>(&mut self, mut f: F)\n    where\n        F: FnMut(&T) -> K,\n        K: Ord,\n    {\n        merge_sort(self, |a, b| f(a).lt(&f(b)));\n    }\n\n    /// Sorts the slice with a key extraction function.\n    ///\n    /// During sorting, the key function is called only once per element.\n    ///\n    /// This sort is stable (i.e., does not reorder equal elements) and *O*(*m* \\* *n* + *n* \\* log(*n*))\n    /// worst-case, where the key function is *O*(*m*).\n    ///\n    /// For simple key functions (e.g., functions that are property accesses or\n    /// basic operations), [`sort_by_key`](slice::sort_by_key) is likely to be\n    /// faster.\n    ///\n    /// # Current implementation\n    ///\n    /// The current algorithm is based on [pattern-defeating quicksort][pdqsort] by Orson Peters,\n    /// which combines the fast average case of randomized quicksort with the fast worst case of\n    /// heapsort, while achieving linear time on slices with certain patterns. It uses some\n    /// randomization to avoid degenerate cases, but with a fixed seed to always provide\n    /// deterministic behavior.\n    ///\n    /// In the worst case, the algorithm allocates temporary storage in a `Vec<(K, usize)>` the\n    /// length of the slice.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut v = [-5i32, 4, 32, -3, 2];\n    ///\n    /// v.sort_by_cached_key(|k| k.to_string());\n    /// assert!(v == [-3, -5, 2, 32, 4]);\n    /// ```\n    ///\n    /// [pdqsort]: https://github.com/orlp/pdqsort\n    #[stable(feature = \"slice_sort_by_cached_key\", since = \"1.34.0\")]\n    #[inline]\n    pub fn sort_by_cached_key<K, F>(&mut self, f: F)\n    where\n        F: FnMut(&T) -> K,\n        K: Ord,\n    {\n        // Helper macro for indexing our vector by the smallest possible type, to reduce allocation.\n        macro_rules! sort_by_key {\n            ($t:ty, $slice:ident, $f:ident) => {{\n                let mut indices: Vec<_> =\n                    $slice.iter().map($f).enumerate().map(|(i, k)| (k, i as $t)).collect();\n                // The elements of `indices` are unique, as they are indexed, so any sort will be\n                // stable with respect to the original slice. We use `sort_unstable` here because\n                // it requires less memory allocation.\n                indices.sort_unstable();\n                for i in 0..$slice.len() {\n                    let mut index = indices[i].1;\n                    while (index as usize) < i {\n                        index = indices[index as usize].1;\n                    }\n                    indices[i].1 = index;\n                    $slice.swap(i, index as usize);\n                }\n            }};\n        }\n\n        let sz_u8 = mem::size_of::<(K, u8)>();\n        let sz_u16 = mem::size_of::<(K, u16)>();\n        let sz_u32 = mem::size_of::<(K, u32)>();\n        let sz_usize = mem::size_of::<(K, usize)>();\n\n        let len = self.len();\n        if len < 2 {\n            return;\n        }\n        if sz_u8 < sz_u16 && len <= (u8::MAX as usize) {\n            return sort_by_key!(u8, self, f);\n        }\n        if sz_u16 < sz_u32 && len <= (u16::MAX as usize) {\n            return sort_by_key!(u16, self, f);\n        }\n        if sz_u32 < sz_usize && len <= (u32::MAX as usize) {\n            return sort_by_key!(u32, self, f);\n        }\n        sort_by_key!(usize, self, f)\n    }\n\n    /// Copies `self` into a new `Vec`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let s = [10, 40, 30];\n    /// let x = s.to_vec();\n    /// // Here, `s` and `x` can be modified independently.\n    /// ```\n    #[rustc_conversion_suggestion]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    #[inline]\n    pub fn to_vec(&self) -> Vec<T>\n    where\n        T: Clone,\n    {\n        self.to_vec_in(Global)\n    }\n\n    /// Copies `self` into a new `Vec` with an allocator.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(allocator_api)]\n    ///\n    /// use std::alloc::System;\n    ///\n    /// let s = [10, 40, 30];\n    /// let x = s.to_vec_in(System);\n    /// // Here, `s` and `x` can be modified independently.\n    /// ```\n    #[inline]\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    pub fn to_vec_in<A: Allocator>(&self, alloc: A) -> Vec<T, A>\n    where\n        T: Clone,\n    {\n        // N.B., see the `hack` module in this file for more details.\n        hack::to_vec(self, alloc)\n    }\n\n    /// Converts `self` into a vector without clones or allocation.\n    ///\n    /// The resulting vector can be converted back into a box via\n    /// `Vec<T>`'s `into_boxed_slice` method.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let s: Box<[i32]> = Box::new([10, 40, 30]);\n    /// let x = s.into_vec();\n    /// // `s` cannot be used anymore because it has been converted into `x`.\n    ///\n    /// assert_eq!(x, vec![10, 40, 30]);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    #[inline]\n    pub fn into_vec<A: Allocator>(self: Box<Self, A>) -> Vec<T, A> {\n        // N.B., see the `hack` module in this file for more details.\n        hack::into_vec(self)\n    }\n\n    /// Creates a vector by repeating a slice `n` times.\n    ///\n    /// # Panics\n    ///\n    /// This function will panic if the capacity would overflow.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// assert_eq!([1, 2].repeat(3), vec![1, 2, 1, 2, 1, 2]);\n    /// ```\n    ///\n    /// A panic upon overflow:\n    ///\n    /// ```should_panic\n    /// // this will panic at runtime\n    /// b\"0123456789abcdef\".repeat(usize::MAX);\n    /// ```\n    #[stable(feature = \"repeat_generic_slice\", since = \"1.40.0\")]\n    pub fn repeat(&self, n: usize) -> Vec<T>\n    where\n        T: Copy,\n    {\n        if n == 0 {\n            return Vec::new();\n        }\n\n        // If `n` is larger than zero, it can be split as\n        // `n = 2^expn + rem (2^expn > rem, expn >= 0, rem >= 0)`.\n        // `2^expn` is the number represented by the leftmost '1' bit of `n`,\n        // and `rem` is the remaining part of `n`.\n\n        // Using `Vec` to access `set_len()`.\n        let capacity = self.len().checked_mul(n).expect(\"capacity overflow\");\n        let mut buf = Vec::with_capacity(capacity);\n\n        // `2^expn` repetition is done by doubling `buf` `expn`-times.\n        buf.extend(self);\n        {\n            let mut m = n >> 1;\n            // If `m > 0`, there are remaining bits up to the leftmost '1'.\n            while m > 0 {\n                // `buf.extend(buf)`:\n                unsafe {\n                    ptr::copy_nonoverlapping(\n                        buf.as_ptr(),\n                        (buf.as_mut_ptr() as *mut T).add(buf.len()),\n                        buf.len(),\n                    );\n                    // `buf` has capacity of `self.len() * n`.\n                    let buf_len = buf.len();\n                    buf.set_len(buf_len * 2);\n                }\n\n                m >>= 1;\n            }\n        }\n\n        // `rem` (`= n - 2^expn`) repetition is done by copying\n        // first `rem` repetitions from `buf` itself.\n        let rem_len = capacity - buf.len(); // `self.len() * rem`\n        if rem_len > 0 {\n            // `buf.extend(buf[0 .. rem_len])`:\n            unsafe {\n                // This is non-overlapping since `2^expn > rem`.\n                ptr::copy_nonoverlapping(\n                    buf.as_ptr(),\n                    (buf.as_mut_ptr() as *mut T).add(buf.len()),\n                    rem_len,\n                );\n                // `buf.len() + rem_len` equals to `buf.capacity()` (`= self.len() * n`).\n                buf.set_len(capacity);\n            }\n        }\n        buf\n    }\n\n    /// Flattens a slice of `T` into a single value `Self::Output`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// assert_eq!([\"hello\", \"world\"].concat(), \"helloworld\");\n    /// assert_eq!([[1, 2], [3, 4]].concat(), [1, 2, 3, 4]);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn concat<Item: ?Sized>(&self) -> <Self as Concat<Item>>::Output\n    where\n        Self: Concat<Item>,\n    {\n        Concat::concat(self)\n    }\n\n    /// Flattens a slice of `T` into a single value `Self::Output`, placing a\n    /// given separator between each.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// assert_eq!([\"hello\", \"world\"].join(\" \"), \"hello world\");\n    /// assert_eq!([[1, 2], [3, 4]].join(&0), [1, 2, 0, 3, 4]);\n    /// assert_eq!([[1, 2], [3, 4]].join(&[0, 0][..]), [1, 2, 0, 0, 3, 4]);\n    /// ```\n    #[stable(feature = \"rename_connect_to_join\", since = \"1.3.0\")]\n    pub fn join<Separator>(&self, sep: Separator) -> <Self as Join<Separator>>::Output\n    where\n        Self: Join<Separator>,\n    {\n        Join::join(self, sep)\n    }\n\n    /// Flattens a slice of `T` into a single value `Self::Output`, placing a\n    /// given separator between each.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// # #![allow(deprecated)]\n    /// assert_eq!([\"hello\", \"world\"].connect(\" \"), \"hello world\");\n    /// assert_eq!([[1, 2], [3, 4]].connect(&0), [1, 2, 0, 3, 4]);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    #[rustc_deprecated(since = \"1.3.0\", reason = \"renamed to join\")]\n    pub fn connect<Separator>(&self, sep: Separator) -> <Self as Join<Separator>>::Output\n    where\n        Self: Join<Separator>,\n    {\n        Join::join(self, sep)\n    }\n}\n\n#[lang = \"slice_u8_alloc\"]\n#[cfg(not(test))]\nimpl [u8] {\n    /// Returns a vector containing a copy of this slice where each byte\n    /// is mapped to its ASCII upper case equivalent.\n    ///\n    /// ASCII letters 'a' to 'z' are mapped to 'A' to 'Z',\n    /// but non-ASCII letters are unchanged.\n    ///\n    /// To uppercase the value in-place, use [`make_ascii_uppercase`].\n    ///\n    /// [`make_ascii_uppercase`]: slice::make_ascii_uppercase\n    #[stable(feature = \"ascii_methods_on_intrinsics\", since = \"1.23.0\")]\n    #[inline]\n    pub fn to_ascii_uppercase(&self) -> Vec<u8> {\n        let mut me = self.to_vec();\n        me.make_ascii_uppercase();\n        me\n    }\n\n    /// Returns a vector containing a copy of this slice where each byte\n    /// is mapped to its ASCII lower case equivalent.\n    ///\n    /// ASCII letters 'A' to 'Z' are mapped to 'a' to 'z',\n    /// but non-ASCII letters are unchanged.\n    ///\n    /// To lowercase the value in-place, use [`make_ascii_lowercase`].\n    ///\n    /// [`make_ascii_lowercase`]: slice::make_ascii_lowercase\n    #[stable(feature = \"ascii_methods_on_intrinsics\", since = \"1.23.0\")]\n    #[inline]\n    pub fn to_ascii_lowercase(&self) -> Vec<u8> {\n        let mut me = self.to_vec();\n        me.make_ascii_lowercase();\n        me\n    }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Extension traits for slices over specific kinds of data\n////////////////////////////////////////////////////////////////////////////////\n\n/// Helper trait for [`[T]::concat`](slice::concat).\n///\n/// Note: the `Item` type parameter is not used in this trait,\n/// but it allows impls to be more generic.\n/// Without it, we get this error:\n///\n/// ```error\n/// error[E0207]: the type parameter `T` is not constrained by the impl trait, self type, or predica\n///    --> src/liballoc/slice.rs:608:6\n///     |\n/// 608 | impl<T: Clone, V: Borrow<[T]>> Concat for [V] {\n///     |      ^ unconstrained type parameter\n/// ```\n///\n/// This is because there could exist `V` types with multiple `Borrow<[_]>` impls,\n/// such that multiple `T` types would apply:\n///\n/// ```\n/// # #[allow(dead_code)]\n/// pub struct Foo(Vec<u32>, Vec<String>);\n///\n/// impl std::borrow::Borrow<[u32]> for Foo {\n///     fn borrow(&self) -> &[u32] { &self.0 }\n/// }\n///\n/// impl std::borrow::Borrow<[String]> for Foo {\n///     fn borrow(&self) -> &[String] { &self.1 }\n/// }\n/// ```\n#[unstable(feature = \"slice_concat_trait\", issue = \"27747\")]\npub trait Concat<Item: ?Sized> {\n    #[unstable(feature = \"slice_concat_trait\", issue = \"27747\")]\n    /// The resulting type after concatenation\n    type Output;\n\n    /// Implementation of [`[T]::concat`](slice::concat)\n    #[unstable(feature = \"slice_concat_trait\", issue = \"27747\")]\n    fn concat(slice: &Self) -> Self::Output;\n}\n\n/// Helper trait for [`[T]::join`](slice::join)\n#[unstable(feature = \"slice_concat_trait\", issue = \"27747\")]\npub trait Join<Separator> {\n    #[unstable(feature = \"slice_concat_trait\", issue = \"27747\")]\n    /// The resulting type after concatenation\n    type Output;\n\n    /// Implementation of [`[T]::join`](slice::join)\n    #[unstable(feature = \"slice_concat_trait\", issue = \"27747\")]\n    fn join(slice: &Self, sep: Separator) -> Self::Output;\n}\n\n#[unstable(feature = \"slice_concat_ext\", issue = \"27747\")]\nimpl<T: Clone, V: Borrow<[T]>> Concat<T> for [V] {\n    type Output = Vec<T>;\n\n    fn concat(slice: &Self) -> Vec<T> {\n        let size = slice.iter().map(|slice| slice.borrow().len()).sum();\n        let mut result = Vec::with_capacity(size);\n        for v in slice {\n            result.extend_from_slice(v.borrow())\n        }\n        result\n    }\n}\n\n#[unstable(feature = \"slice_concat_ext\", issue = \"27747\")]\nimpl<T: Clone, V: Borrow<[T]>> Join<&T> for [V] {\n    type Output = Vec<T>;\n\n    fn join(slice: &Self, sep: &T) -> Vec<T> {\n        let mut iter = slice.iter();\n        let first = match iter.next() {\n            Some(first) => first,\n            None => return vec![],\n        };\n        let size = slice.iter().map(|v| v.borrow().len()).sum::<usize>() + slice.len() - 1;\n        let mut result = Vec::with_capacity(size);\n        result.extend_from_slice(first.borrow());\n\n        for v in iter {\n            result.push(sep.clone());\n            result.extend_from_slice(v.borrow())\n        }\n        result\n    }\n}\n\n#[unstable(feature = \"slice_concat_ext\", issue = \"27747\")]\nimpl<T: Clone, V: Borrow<[T]>> Join<&[T]> for [V] {\n    type Output = Vec<T>;\n\n    fn join(slice: &Self, sep: &[T]) -> Vec<T> {\n        let mut iter = slice.iter();\n        let first = match iter.next() {\n            Some(first) => first,\n            None => return vec![],\n        };\n        let size =\n            slice.iter().map(|v| v.borrow().len()).sum::<usize>() + sep.len() * (slice.len() - 1);\n        let mut result = Vec::with_capacity(size);\n        result.extend_from_slice(first.borrow());\n\n        for v in iter {\n            result.extend_from_slice(sep);\n            result.extend_from_slice(v.borrow())\n        }\n        result\n    }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Standard trait implementations for slices\n////////////////////////////////////////////////////////////////////////////////\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> Borrow<[T]> for Vec<T> {\n    fn borrow(&self) -> &[T] {\n        &self[..]\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> BorrowMut<[T]> for Vec<T> {\n    fn borrow_mut(&mut self) -> &mut [T] {\n        &mut self[..]\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Clone> ToOwned for [T] {\n    type Owned = Vec<T>;\n    #[cfg(not(test))]\n    fn to_owned(&self) -> Vec<T> {\n        self.to_vec()\n    }\n\n    #[cfg(test)]\n    fn to_owned(&self) -> Vec<T> {\n        hack::to_vec(self, Global)\n    }\n\n    fn clone_into(&self, target: &mut Vec<T>) {\n        // drop anything in target that will not be overwritten\n        target.truncate(self.len());\n\n        // target.len <= self.len due to the truncate above, so the\n        // slices here are always in-bounds.\n        let (init, tail) = self.split_at(target.len());\n\n        // reuse the contained values' allocations/resources.\n        target.clone_from_slice(init);\n        target.extend_from_slice(tail);\n    }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Sorting\n////////////////////////////////////////////////////////////////////////////////\n\n/// Inserts `v[0]` into pre-sorted sequence `v[1..]` so that whole `v[..]` becomes sorted.\n///\n/// This is the integral subroutine of insertion sort.\nfn insert_head<T, F>(v: &mut [T], is_less: &mut F)\nwhere\n    F: FnMut(&T, &T) -> bool,\n{\n    if v.len() >= 2 && is_less(&v[1], &v[0]) {\n        unsafe {\n            // There are three ways to implement insertion here:\n            //\n            // 1. Swap adjacent elements until the first one gets to its final destination.\n            //    However, this way we copy data around more than is necessary. If elements are big\n            //    structures (costly to copy), this method will be slow.\n            //\n            // 2. Iterate until the right place for the first element is found. Then shift the\n            //    elements succeeding it to make room for it and finally place it into the\n            //    remaining hole. This is a good method.\n            //\n            // 3. Copy the first element into a temporary variable. Iterate until the right place\n            //    for it is found. As we go along, copy every traversed element into the slot\n            //    preceding it. Finally, copy data from the temporary variable into the remaining\n            //    hole. This method is very good. Benchmarks demonstrated slightly better\n            //    performance than with the 2nd method.\n            //\n            // All methods were benchmarked, and the 3rd showed best results. So we chose that one.\n            let mut tmp = mem::ManuallyDrop::new(ptr::read(&v[0]));\n\n            // Intermediate state of the insertion process is always tracked by `hole`, which\n            // serves two purposes:\n            // 1. Protects integrity of `v` from panics in `is_less`.\n            // 2. Fills the remaining hole in `v` in the end.\n            //\n            // Panic safety:\n            //\n            // If `is_less` panics at any point during the process, `hole` will get dropped and\n            // fill the hole in `v` with `tmp`, thus ensuring that `v` still holds every object it\n            // initially held exactly once.\n            let mut hole = InsertionHole { src: &mut *tmp, dest: &mut v[1] };\n            ptr::copy_nonoverlapping(&v[1], &mut v[0], 1);\n\n            for i in 2..v.len() {\n                if !is_less(&v[i], &*tmp) {\n                    break;\n                }\n                ptr::copy_nonoverlapping(&v[i], &mut v[i - 1], 1);\n                hole.dest = &mut v[i];\n            }\n            // `hole` gets dropped and thus copies `tmp` into the remaining hole in `v`.\n        }\n    }\n\n    // When dropped, copies from `src` into `dest`.\n    struct InsertionHole<T> {\n        src: *mut T,\n        dest: *mut T,\n    }\n\n    impl<T> Drop for InsertionHole<T> {\n        fn drop(&mut self) {\n            unsafe {\n                ptr::copy_nonoverlapping(self.src, self.dest, 1);\n            }\n        }\n    }\n}\n\n/// Merges non-decreasing runs `v[..mid]` and `v[mid..]` using `buf` as temporary storage, and\n/// stores the result into `v[..]`.\n///\n/// # Safety\n///\n/// The two slices must be non-empty and `mid` must be in bounds. Buffer `buf` must be long enough\n/// to hold a copy of the shorter slice. Also, `T` must not be a zero-sized type.\nunsafe fn merge<T, F>(v: &mut [T], mid: usize, buf: *mut T, is_less: &mut F)\nwhere\n    F: FnMut(&T, &T) -> bool,\n{\n    let len = v.len();\n    let v = v.as_mut_ptr();\n    let (v_mid, v_end) = unsafe { (v.add(mid), v.add(len)) };\n\n    // The merge process first copies the shorter run into `buf`. Then it traces the newly copied\n    // run and the longer run forwards (or backwards), comparing their next unconsumed elements and\n    // copying the lesser (or greater) one into `v`.\n    //\n    // As soon as the shorter run is fully consumed, the process is done. If the longer run gets\n    // consumed first, then we must copy whatever is left of the shorter run into the remaining\n    // hole in `v`.\n    //\n    // Intermediate state of the process is always tracked by `hole`, which serves two purposes:\n    // 1. Protects integrity of `v` from panics in `is_less`.\n    // 2. Fills the remaining hole in `v` if the longer run gets consumed first.\n    //\n    // Panic safety:\n    //\n    // If `is_less` panics at any point during the process, `hole` will get dropped and fill the\n    // hole in `v` with the unconsumed range in `buf`, thus ensuring that `v` still holds every\n    // object it initially held exactly once.\n    let mut hole;\n\n    if mid <= len - mid {\n        // The left run is shorter.\n        unsafe {\n            ptr::copy_nonoverlapping(v, buf, mid);\n            hole = MergeHole { start: buf, end: buf.add(mid), dest: v };\n        }\n\n        // Initially, these pointers point to the beginnings of their arrays.\n        let left = &mut hole.start;\n        let mut right = v_mid;\n        let out = &mut hole.dest;\n\n        while *left < hole.end && right < v_end {\n            // Consume the lesser side.\n            // If equal, prefer the left run to maintain stability.\n            unsafe {\n                let to_copy = if is_less(&*right, &**left) {\n                    get_and_increment(&mut right)\n                } else {\n                    get_and_increment(left)\n                };\n                ptr::copy_nonoverlapping(to_copy, get_and_increment(out), 1);\n            }\n        }\n    } else {\n        // The right run is shorter.\n        unsafe {\n            ptr::copy_nonoverlapping(v_mid, buf, len - mid);\n            hole = MergeHole { start: buf, end: buf.add(len - mid), dest: v_mid };\n        }\n\n        // Initially, these pointers point past the ends of their arrays.\n        let left = &mut hole.dest;\n        let right = &mut hole.end;\n        let mut out = v_end;\n\n        while v < *left && buf < *right {\n            // Consume the greater side.\n            // If equal, prefer the right run to maintain stability.\n            unsafe {\n                let to_copy = if is_less(&*right.offset(-1), &*left.offset(-1)) {\n                    decrement_and_get(left)\n                } else {\n                    decrement_and_get(right)\n                };\n                ptr::copy_nonoverlapping(to_copy, decrement_and_get(&mut out), 1);\n            }\n        }\n    }\n    // Finally, `hole` gets dropped. If the shorter run was not fully consumed, whatever remains of\n    // it will now be copied into the hole in `v`.\n\n    unsafe fn get_and_increment<T>(ptr: &mut *mut T) -> *mut T {\n        let old = *ptr;\n        *ptr = unsafe { ptr.offset(1) };\n        old\n    }\n\n    unsafe fn decrement_and_get<T>(ptr: &mut *mut T) -> *mut T {\n        *ptr = unsafe { ptr.offset(-1) };\n        *ptr\n    }\n\n    // When dropped, copies the range `start..end` into `dest..`.\n    struct MergeHole<T> {\n        start: *mut T,\n        end: *mut T,\n        dest: *mut T,\n    }\n\n    impl<T> Drop for MergeHole<T> {\n        fn drop(&mut self) {\n            // `T` is not a zero-sized type, so it's okay to divide by its size.\n            let len = (self.end as usize - self.start as usize) / mem::size_of::<T>();\n            unsafe {\n                ptr::copy_nonoverlapping(self.start, self.dest, len);\n            }\n        }\n    }\n}\n\n/// This merge sort borrows some (but not all) ideas from TimSort, which is described in detail\n/// [here](http://svn.python.org/projects/python/trunk/Objects/listsort.txt).\n///\n/// The algorithm identifies strictly descending and non-descending subsequences, which are called\n/// natural runs. There is a stack of pending runs yet to be merged. Each newly found run is pushed\n/// onto the stack, and then some pairs of adjacent runs are merged until these two invariants are\n/// satisfied:\n///\n/// 1. for every `i` in `1..runs.len()`: `runs[i - 1].len > runs[i].len`\n/// 2. for every `i` in `2..runs.len()`: `runs[i - 2].len > runs[i - 1].len + runs[i].len`\n///\n/// The invariants ensure that the total running time is *O*(*n* \\* log(*n*)) worst-case.\nfn merge_sort<T, F>(v: &mut [T], mut is_less: F)\nwhere\n    F: FnMut(&T, &T) -> bool,\n{\n    // Slices of up to this length get sorted using insertion sort.\n    const MAX_INSERTION: usize = 20;\n    // Very short runs are extended using insertion sort to span at least this many elements.\n    const MIN_RUN: usize = 10;\n\n    // Sorting has no meaningful behavior on zero-sized types.\n    if size_of::<T>() == 0 {\n        return;\n    }\n\n    let len = v.len();\n\n    // Short arrays get sorted in-place via insertion sort to avoid allocations.\n    if len <= MAX_INSERTION {\n        if len >= 2 {\n            for i in (0..len - 1).rev() {\n                insert_head(&mut v[i..], &mut is_less);\n            }\n        }\n        return;\n    }\n\n    // Allocate a buffer to use as scratch memory. We keep the length 0 so we can keep in it\n    // shallow copies of the contents of `v` without risking the dtors running on copies if\n    // `is_less` panics. When merging two sorted runs, this buffer holds a copy of the shorter run,\n    // which will always have length at most `len / 2`.\n    let mut buf = Vec::with_capacity(len / 2);\n\n    // In order to identify natural runs in `v`, we traverse it backwards. That might seem like a\n    // strange decision, but consider the fact that merges more often go in the opposite direction\n    // (forwards). According to benchmarks, merging forwards is slightly faster than merging\n    // backwards. To conclude, identifying runs by traversing backwards improves performance.\n    let mut runs = vec![];\n    let mut end = len;\n    while end > 0 {\n        // Find the next natural run, and reverse it if it's strictly descending.\n        let mut start = end - 1;\n        if start > 0 {\n            start -= 1;\n            unsafe {\n                if is_less(v.get_unchecked(start + 1), v.get_unchecked(start)) {\n                    while start > 0 && is_less(v.get_unchecked(start), v.get_unchecked(start - 1)) {\n                        start -= 1;\n                    }\n                    v[start..end].reverse();\n                } else {\n                    while start > 0 && !is_less(v.get_unchecked(start), v.get_unchecked(start - 1))\n                    {\n                        start -= 1;\n                    }\n                }\n            }\n        }\n\n        // Insert some more elements into the run if it's too short. Insertion sort is faster than\n        // merge sort on short sequences, so this significantly improves performance.\n        while start > 0 && end - start < MIN_RUN {\n            start -= 1;\n            insert_head(&mut v[start..end], &mut is_less);\n        }\n\n        // Push this run onto the stack.\n        runs.push(Run { start, len: end - start });\n        end = start;\n\n        // Merge some pairs of adjacent runs to satisfy the invariants.\n        while let Some(r) = collapse(&runs) {\n            let left = runs[r + 1];\n            let right = runs[r];\n            unsafe {\n                merge(\n                    &mut v[left.start..right.start + right.len],\n                    left.len,\n                    buf.as_mut_ptr(),\n                    &mut is_less,\n                );\n            }\n            runs[r] = Run { start: left.start, len: left.len + right.len };\n            runs.remove(r + 1);\n        }\n    }\n\n    // Finally, exactly one run must remain in the stack.\n    debug_assert!(runs.len() == 1 && runs[0].start == 0 && runs[0].len == len);\n\n    // Examines the stack of runs and identifies the next pair of runs to merge. More specifically,\n    // if `Some(r)` is returned, that means `runs[r]` and `runs[r + 1]` must be merged next. If the\n    // algorithm should continue building a new run instead, `None` is returned.\n    //\n    // TimSort is infamous for its buggy implementations, as described here:\n    // http://envisage-project.eu/timsort-specification-and-verification/\n    //\n    // The gist of the story is: we must enforce the invariants on the top four runs on the stack.\n    // Enforcing them on just top three is not sufficient to ensure that the invariants will still\n    // hold for *all* runs in the stack.\n    //\n    // This function correctly checks invariants for the top four runs. Additionally, if the top\n    // run starts at index 0, it will always demand a merge operation until the stack is fully\n    // collapsed, in order to complete the sort.\n    #[inline]\n    fn collapse(runs: &[Run]) -> Option<usize> {\n        let n = runs.len();\n        if n >= 2\n            && (runs[n - 1].start == 0\n                || runs[n - 2].len <= runs[n - 1].len\n                || (n >= 3 && runs[n - 3].len <= runs[n - 2].len + runs[n - 1].len)\n                || (n >= 4 && runs[n - 4].len <= runs[n - 3].len + runs[n - 2].len))\n        {\n            if n >= 3 && runs[n - 3].len < runs[n - 1].len { Some(n - 3) } else { Some(n - 2) }\n        } else {\n            None\n        }\n    }\n\n    #[derive(Clone, Copy)]\n    struct Run {\n        start: usize,\n        len: usize,\n    }\n}\n#![stable(feature = \"wake_trait\", since = \"1.51.0\")]\n//! Types and Traits for working with asynchronous tasks.\nuse core::mem::ManuallyDrop;\nuse core::task::{RawWaker, RawWakerVTable, Waker};\n\nuse crate::sync::Arc;\n\n/// The implementation of waking a task on an executor.\n///\n/// This trait can be used to create a [`Waker`]. An executor can define an\n/// implementation of this trait, and use that to construct a Waker to pass\n/// to the tasks that are executed on that executor.\n///\n/// This trait is a memory-safe and ergonomic alternative to constructing a\n/// [`RawWaker`]. It supports the common executor design in which the data used\n/// to wake up a task is stored in an [`Arc`]. Some executors (especially\n/// those for embedded systems) cannot use this API, which is why [`RawWaker`]\n/// exists as an alternative for those systems.\n///\n/// [arc]: ../../std/sync/struct.Arc.html\n///\n/// # Examples\n///\n/// A basic `block_on` function that takes a future and runs it to completion on\n/// the current thread.\n///\n/// **Note:** This example trades correctness for simplicity. In order to prevent\n/// deadlocks, production-grade implementations will also need to handle\n/// intermediate calls to `thread::unpark` as well as nested invocations.\n///\n/// ```rust\n/// use std::future::Future;\n/// use std::sync::Arc;\n/// use std::task::{Context, Poll, Wake};\n/// use std::thread::{self, Thread};\n///\n/// /// A waker that wakes up the current thread when called.\n/// struct ThreadWaker(Thread);\n///\n/// impl Wake for ThreadWaker {\n///     fn wake(self: Arc<Self>) {\n///         self.0.unpark();\n///     }\n/// }\n///\n/// /// Run a future to completion on the current thread.\n/// fn block_on<T>(fut: impl Future<Output = T>) -> T {\n///     // Pin the future so it can be polled.\n///     let mut fut = Box::pin(fut);\n///\n///     // Create a new context to be passed to the future.\n///     let t = thread::current();\n///     let waker = Arc::new(ThreadWaker(t)).into();\n///     let mut cx = Context::from_waker(&waker);\n///\n///     // Run the future to completion.\n///     loop {\n///         match fut.as_mut().poll(&mut cx) {\n///             Poll::Ready(res) => return res,\n///             Poll::Pending => thread::park(),\n///         }\n///     }\n/// }\n///\n/// block_on(async {\n///     println!(\"Hi from inside a future!\");\n/// });\n/// ```\n#[stable(feature = \"wake_trait\", since = \"1.51.0\")]\npub trait Wake {\n    /// Wake this task.\n    #[stable(feature = \"wake_trait\", since = \"1.51.0\")]\n    fn wake(self: Arc<Self>);\n\n    /// Wake this task without consuming the waker.\n    ///\n    /// If an executor supports a cheaper way to wake without consuming the\n    /// waker, it should override this method. By default, it clones the\n    /// [`Arc`] and calls [`wake`] on the clone.\n    ///\n    /// [`wake`]: Wake::wake\n    #[stable(feature = \"wake_trait\", since = \"1.51.0\")]\n    fn wake_by_ref(self: &Arc<Self>) {\n        self.clone().wake();\n    }\n}\n\n#[stable(feature = \"wake_trait\", since = \"1.51.0\")]\nimpl<W: Wake + Send + Sync + 'static> From<Arc<W>> for Waker {\n    /// Use a `Wake`-able type as a `Waker`.\n    ///\n    /// No heap allocations or atomic operations are used for this conversion.\n    fn from(waker: Arc<W>) -> Waker {\n        // SAFETY: This is safe because raw_waker safely constructs\n        // a RawWaker from Arc<W>.\n        unsafe { Waker::from_raw(raw_waker(waker)) }\n    }\n}\n\n#[stable(feature = \"wake_trait\", since = \"1.51.0\")]\nimpl<W: Wake + Send + Sync + 'static> From<Arc<W>> for RawWaker {\n    /// Use a `Wake`-able type as a `RawWaker`.\n    ///\n    /// No heap allocations or atomic operations are used for this conversion.\n    fn from(waker: Arc<W>) -> RawWaker {\n        raw_waker(waker)\n    }\n}\n\n// NB: This private function for constructing a RawWaker is used, rather than\n// inlining this into the `From<Arc<W>> for RawWaker` impl, to ensure that\n// the safety of `From<Arc<W>> for Waker` does not depend on the correct\n// trait dispatch - instead both impls call this function directly and\n// explicitly.\n#[inline(always)]\nfn raw_waker<W: Wake + Send + Sync + 'static>(waker: Arc<W>) -> RawWaker {\n    // Increment the reference count of the arc to clone it.\n    unsafe fn clone_waker<W: Wake + Send + Sync + 'static>(waker: *const ()) -> RawWaker {\n        unsafe { Arc::increment_strong_count(waker as *const W) };\n        RawWaker::new(\n            waker as *const (),\n            &RawWakerVTable::new(clone_waker::<W>, wake::<W>, wake_by_ref::<W>, drop_waker::<W>),\n        )\n    }\n\n    // Wake by value, moving the Arc into the Wake::wake function\n    unsafe fn wake<W: Wake + Send + Sync + 'static>(waker: *const ()) {\n        let waker = unsafe { Arc::from_raw(waker as *const W) };\n        <W as Wake>::wake(waker);\n    }\n\n    // Wake by reference, wrap the waker in ManuallyDrop to avoid dropping it\n    unsafe fn wake_by_ref<W: Wake + Send + Sync + 'static>(waker: *const ()) {\n        let waker = unsafe { ManuallyDrop::new(Arc::from_raw(waker as *const W)) };\n        <W as Wake>::wake_by_ref(&waker);\n    }\n\n    // Decrement the reference count of the Arc on drop\n    unsafe fn drop_waker<W: Wake + Send + Sync + 'static>(waker: *const ()) {\n        unsafe { Arc::decrement_strong_count(waker as *const W) };\n    }\n\n    RawWaker::new(\n        Arc::into_raw(waker) as *const (),\n        &RawWakerVTable::new(clone_waker::<W>, wake::<W>, wake_by_ref::<W>, drop_waker::<W>),\n    )\n}\n#![stable(feature = \"rust1\", since = \"1.0.0\")]\n\n//! Thread-safe reference-counting pointers.\n//!\n//! See the [`Arc<T>`][Arc] documentation for more details.\n\nuse core::any::Any;\nuse core::borrow;\nuse core::cmp::Ordering;\nuse core::convert::{From, TryFrom};\nuse core::fmt;\nuse core::hash::{Hash, Hasher};\nuse core::hint;\nuse core::intrinsics::abort;\nuse core::iter;\nuse core::marker::{PhantomData, Unpin, Unsize};\nuse core::mem::{self, align_of_val_raw, size_of_val};\nuse core::ops::{CoerceUnsized, Deref, DispatchFromDyn, Receiver};\nuse core::pin::Pin;\nuse core::ptr::{self, NonNull};\nuse core::slice::from_raw_parts_mut;\nuse core::sync::atomic;\nuse core::sync::atomic::Ordering::{Acquire, Relaxed, Release, SeqCst};\n\nuse crate::alloc::{\n    box_free, handle_alloc_error, AllocError, Allocator, Global, Layout, WriteCloneIntoRaw,\n};\nuse crate::borrow::{Cow, ToOwned};\nuse crate::boxed::Box;\nuse crate::rc::is_dangling;\nuse crate::string::String;\nuse crate::vec::Vec;\n\n#[cfg(test)]\nmod tests;\n\n/// A soft limit on the amount of references that may be made to an `Arc`.\n///\n/// Going above this limit will abort your program (although not\n/// necessarily) at _exactly_ `MAX_REFCOUNT + 1` references.\nconst MAX_REFCOUNT: usize = (isize::MAX) as usize;\n\n#[cfg(not(sanitize = \"thread\"))]\nmacro_rules! acquire {\n    ($x:expr) => {\n        atomic::fence(Acquire)\n    };\n}\n\n// ThreadSanitizer does not support memory fences. To avoid false positive\n// reports in Arc / Weak implementation use atomic loads for synchronization\n// instead.\n#[cfg(sanitize = \"thread\")]\nmacro_rules! acquire {\n    ($x:expr) => {\n        $x.load(Acquire)\n    };\n}\n\n/// A thread-safe reference-counting pointer. 'Arc' stands for 'Atomically\n/// Reference Counted'.\n///\n/// The type `Arc<T>` provides shared ownership of a value of type `T`,\n/// allocated in the heap. Invoking [`clone`][clone] on `Arc` produces\n/// a new `Arc` instance, which points to the same allocation on the heap as the\n/// source `Arc`, while increasing a reference count. When the last `Arc`\n/// pointer to a given allocation is destroyed, the value stored in that allocation (often\n/// referred to as \"inner value\") is also dropped.\n///\n/// Shared references in Rust disallow mutation by default, and `Arc` is no\n/// exception: you cannot generally obtain a mutable reference to something\n/// inside an `Arc`. If you need to mutate through an `Arc`, use\n/// [`Mutex`][mutex], [`RwLock`][rwlock], or one of the [`Atomic`][atomic]\n/// types.\n///\n/// ## Thread Safety\n///\n/// Unlike [`Rc<T>`], `Arc<T>` uses atomic operations for its reference\n/// counting. This means that it is thread-safe. The disadvantage is that\n/// atomic operations are more expensive than ordinary memory accesses. If you\n/// are not sharing reference-counted allocations between threads, consider using\n/// [`Rc<T>`] for lower overhead. [`Rc<T>`] is a safe default, because the\n/// compiler will catch any attempt to send an [`Rc<T>`] between threads.\n/// However, a library might choose `Arc<T>` in order to give library consumers\n/// more flexibility.\n///\n/// `Arc<T>` will implement [`Send`] and [`Sync`] as long as the `T` implements\n/// [`Send`] and [`Sync`]. Why can't you put a non-thread-safe type `T` in an\n/// `Arc<T>` to make it thread-safe? This may be a bit counter-intuitive at\n/// first: after all, isn't the point of `Arc<T>` thread safety? The key is\n/// this: `Arc<T>` makes it thread safe to have multiple ownership of the same\n/// data, but it  doesn't add thread safety to its data. Consider\n/// `Arc<`[`RefCell<T>`]`>`. [`RefCell<T>`] isn't [`Sync`], and if `Arc<T>` was always\n/// [`Send`], `Arc<`[`RefCell<T>`]`>` would be as well. But then we'd have a problem:\n/// [`RefCell<T>`] is not thread safe; it keeps track of the borrowing count using\n/// non-atomic operations.\n///\n/// In the end, this means that you may need to pair `Arc<T>` with some sort of\n/// [`std::sync`] type, usually [`Mutex<T>`][mutex].\n///\n/// ## Breaking cycles with `Weak`\n///\n/// The [`downgrade`][downgrade] method can be used to create a non-owning\n/// [`Weak`] pointer. A [`Weak`] pointer can be [`upgrade`][upgrade]d\n/// to an `Arc`, but this will return [`None`] if the value stored in the allocation has\n/// already been dropped. In other words, `Weak` pointers do not keep the value\n/// inside the allocation alive; however, they *do* keep the allocation\n/// (the backing store for the value) alive.\n///\n/// A cycle between `Arc` pointers will never be deallocated. For this reason,\n/// [`Weak`] is used to break cycles. For example, a tree could have\n/// strong `Arc` pointers from parent nodes to children, and [`Weak`]\n/// pointers from children back to their parents.\n///\n/// # Cloning references\n///\n/// Creating a new reference from an existing reference-counted pointer is done using the\n/// `Clone` trait implemented for [`Arc<T>`][Arc] and [`Weak<T>`][Weak].\n///\n/// ```\n/// use std::sync::Arc;\n/// let foo = Arc::new(vec![1.0, 2.0, 3.0]);\n/// // The two syntaxes below are equivalent.\n/// let a = foo.clone();\n/// let b = Arc::clone(&foo);\n/// // a, b, and foo are all Arcs that point to the same memory location\n/// ```\n///\n/// ## `Deref` behavior\n///\n/// `Arc<T>` automatically dereferences to `T` (via the [`Deref`][deref] trait),\n/// so you can call `T`'s methods on a value of type `Arc<T>`. To avoid name\n/// clashes with `T`'s methods, the methods of `Arc<T>` itself are associated\n/// functions, called using [fully qualified syntax]:\n///\n/// ```\n/// use std::sync::Arc;\n///\n/// let my_arc = Arc::new(());\n/// Arc::downgrade(&my_arc);\n/// ```\n///\n/// `Arc<T>`'s implementations of traits like `Clone` may also be called using\n/// fully qualified syntax. Some people prefer to use fully qualified syntax,\n/// while others prefer using method-call syntax.\n///\n/// ```\n/// use std::sync::Arc;\n///\n/// let arc = Arc::new(());\n/// // Method-call syntax\n/// let arc2 = arc.clone();\n/// // Fully qualified syntax\n/// let arc3 = Arc::clone(&arc);\n/// ```\n///\n/// [`Weak<T>`][Weak] does not auto-dereference to `T`, because the inner value may have\n/// already been dropped.\n///\n/// [`Rc<T>`]: crate::rc::Rc\n/// [clone]: Clone::clone\n/// [mutex]: ../../std/sync/struct.Mutex.html\n/// [rwlock]: ../../std/sync/struct.RwLock.html\n/// [atomic]: core::sync::atomic\n/// [`Send`]: core::marker::Send\n/// [`Sync`]: core::marker::Sync\n/// [deref]: core::ops::Deref\n/// [downgrade]: Arc::downgrade\n/// [upgrade]: Weak::upgrade\n/// [`RefCell<T>`]: core::cell::RefCell\n/// [`std::sync`]: ../../std/sync/index.html\n/// [`Arc::clone(&from)`]: Arc::clone\n/// [fully qualified syntax]: https://doc.rust-lang.org/book/ch19-03-advanced-traits.html#fully-qualified-syntax-for-disambiguation-calling-methods-with-the-same-name\n///\n/// # Examples\n///\n/// Sharing some immutable data between threads:\n///\n// Note that we **do not** run these tests here. The windows builders get super\n// unhappy if a thread outlives the main thread and then exits at the same time\n// (something deadlocks) so we just avoid this entirely by not running these\n// tests.\n/// ```no_run\n/// use std::sync::Arc;\n/// use std::thread;\n///\n/// let five = Arc::new(5);\n///\n/// for _ in 0..10 {\n///     let five = Arc::clone(&five);\n///\n///     thread::spawn(move || {\n///         println!(\"{:?}\", five);\n///     });\n/// }\n/// ```\n///\n/// Sharing a mutable [`AtomicUsize`]:\n///\n/// [`AtomicUsize`]: core::sync::atomic::AtomicUsize\n///\n/// ```no_run\n/// use std::sync::Arc;\n/// use std::sync::atomic::{AtomicUsize, Ordering};\n/// use std::thread;\n///\n/// let val = Arc::new(AtomicUsize::new(5));\n///\n/// for _ in 0..10 {\n///     let val = Arc::clone(&val);\n///\n///     thread::spawn(move || {\n///         let v = val.fetch_add(1, Ordering::SeqCst);\n///         println!(\"{:?}\", v);\n///     });\n/// }\n/// ```\n///\n/// See the [`rc` documentation][rc_examples] for more examples of reference\n/// counting in general.\n///\n/// [rc_examples]: crate::rc#examples\n#[cfg_attr(not(test), rustc_diagnostic_item = \"Arc\")]\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct Arc<T: ?Sized> {\n    ptr: NonNull<ArcInner<T>>,\n    phantom: PhantomData<ArcInner<T>>,\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nunsafe impl<T: ?Sized + Sync + Send> Send for Arc<T> {}\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nunsafe impl<T: ?Sized + Sync + Send> Sync for Arc<T> {}\n\n#[unstable(feature = \"coerce_unsized\", issue = \"27732\")]\nimpl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<Arc<U>> for Arc<T> {}\n\n#[unstable(feature = \"dispatch_from_dyn\", issue = \"none\")]\nimpl<T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<Arc<U>> for Arc<T> {}\n\nimpl<T: ?Sized> Arc<T> {\n    fn from_inner(ptr: NonNull<ArcInner<T>>) -> Self {\n        Self { ptr, phantom: PhantomData }\n    }\n\n    unsafe fn from_ptr(ptr: *mut ArcInner<T>) -> Self {\n        unsafe { Self::from_inner(NonNull::new_unchecked(ptr)) }\n    }\n}\n\n/// `Weak` is a version of [`Arc`] that holds a non-owning reference to the\n/// managed allocation. The allocation is accessed by calling [`upgrade`] on the `Weak`\n/// pointer, which returns an [`Option`]`<`[`Arc`]`<T>>`.\n///\n/// Since a `Weak` reference does not count towards ownership, it will not\n/// prevent the value stored in the allocation from being dropped, and `Weak` itself makes no\n/// guarantees about the value still being present. Thus it may return [`None`]\n/// when [`upgrade`]d. Note however that a `Weak` reference *does* prevent the allocation\n/// itself (the backing store) from being deallocated.\n///\n/// A `Weak` pointer is useful for keeping a temporary reference to the allocation\n/// managed by [`Arc`] without preventing its inner value from being dropped. It is also used to\n/// prevent circular references between [`Arc`] pointers, since mutual owning references\n/// would never allow either [`Arc`] to be dropped. For example, a tree could\n/// have strong [`Arc`] pointers from parent nodes to children, and `Weak`\n/// pointers from children back to their parents.\n///\n/// The typical way to obtain a `Weak` pointer is to call [`Arc::downgrade`].\n///\n/// [`upgrade`]: Weak::upgrade\n#[stable(feature = \"arc_weak\", since = \"1.4.0\")]\npub struct Weak<T: ?Sized> {\n    // This is a `NonNull` to allow optimizing the size of this type in enums,\n    // but it is not necessarily a valid pointer.\n    // `Weak::new` sets this to `usize::MAX` so that it doesn’t need\n    // to allocate space on the heap.  That's not a value a real pointer\n    // will ever have because RcBox has alignment at least 2.\n    // This is only possible when `T: Sized`; unsized `T` never dangle.\n    ptr: NonNull<ArcInner<T>>,\n}\n\n#[stable(feature = \"arc_weak\", since = \"1.4.0\")]\nunsafe impl<T: ?Sized + Sync + Send> Send for Weak<T> {}\n#[stable(feature = \"arc_weak\", since = \"1.4.0\")]\nunsafe impl<T: ?Sized + Sync + Send> Sync for Weak<T> {}\n\n#[unstable(feature = \"coerce_unsized\", issue = \"27732\")]\nimpl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<Weak<U>> for Weak<T> {}\n#[unstable(feature = \"dispatch_from_dyn\", issue = \"none\")]\nimpl<T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<Weak<U>> for Weak<T> {}\n\n#[stable(feature = \"arc_weak\", since = \"1.4.0\")]\nimpl<T: ?Sized + fmt::Debug> fmt::Debug for Weak<T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        write!(f, \"(Weak)\")\n    }\n}\n\n// This is repr(C) to future-proof against possible field-reordering, which\n// would interfere with otherwise safe [into|from]_raw() of transmutable\n// inner types.\n#[repr(C)]\nstruct ArcInner<T: ?Sized> {\n    strong: atomic::AtomicUsize,\n\n    // the value usize::MAX acts as a sentinel for temporarily \"locking\" the\n    // ability to upgrade weak pointers or downgrade strong ones; this is used\n    // to avoid races in `make_mut` and `get_mut`.\n    weak: atomic::AtomicUsize,\n\n    data: T,\n}\n\nunsafe impl<T: ?Sized + Sync + Send> Send for ArcInner<T> {}\nunsafe impl<T: ?Sized + Sync + Send> Sync for ArcInner<T> {}\n\nimpl<T> Arc<T> {\n    /// Constructs a new `Arc<T>`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// let five = Arc::new(5);\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn new(data: T) -> Arc<T> {\n        // Start the weak pointer count as 1 which is the weak pointer that's\n        // held by all the strong pointers (kinda), see std/rc.rs for more info\n        let x: Box<_> = box ArcInner {\n            strong: atomic::AtomicUsize::new(1),\n            weak: atomic::AtomicUsize::new(1),\n            data,\n        };\n        Self::from_inner(Box::leak(x).into())\n    }\n\n    /// Constructs a new `Arc<T>` using a weak reference to itself. Attempting\n    /// to upgrade the weak reference before this function returns will result\n    /// in a `None` value. However, the weak reference may be cloned freely and\n    /// stored for use at a later time.\n    ///\n    /// # Examples\n    /// ```\n    /// #![feature(arc_new_cyclic)]\n    /// #![allow(dead_code)]\n    ///\n    /// use std::sync::{Arc, Weak};\n    ///\n    /// struct Foo {\n    ///     me: Weak<Foo>,\n    /// }\n    ///\n    /// let foo = Arc::new_cyclic(|me| Foo {\n    ///     me: me.clone(),\n    /// });\n    /// ```\n    #[inline]\n    #[unstable(feature = \"arc_new_cyclic\", issue = \"75861\")]\n    pub fn new_cyclic(data_fn: impl FnOnce(&Weak<T>) -> T) -> Arc<T> {\n        // Construct the inner in the \"uninitialized\" state with a single\n        // weak reference.\n        let uninit_ptr: NonNull<_> = Box::leak(box ArcInner {\n            strong: atomic::AtomicUsize::new(0),\n            weak: atomic::AtomicUsize::new(1),\n            data: mem::MaybeUninit::<T>::uninit(),\n        })\n        .into();\n        let init_ptr: NonNull<ArcInner<T>> = uninit_ptr.cast();\n\n        let weak = Weak { ptr: init_ptr };\n\n        // It's important we don't give up ownership of the weak pointer, or\n        // else the memory might be freed by the time `data_fn` returns. If\n        // we really wanted to pass ownership, we could create an additional\n        // weak pointer for ourselves, but this would result in additional\n        // updates to the weak reference count which might not be necessary\n        // otherwise.\n        let data = data_fn(&weak);\n\n        // Now we can properly initialize the inner value and turn our weak\n        // reference into a strong reference.\n        unsafe {\n            let inner = init_ptr.as_ptr();\n            ptr::write(ptr::addr_of_mut!((*inner).data), data);\n\n            // The above write to the data field must be visible to any threads which\n            // observe a non-zero strong count. Therefore we need at least \"Release\" ordering\n            // in order to synchronize with the `compare_exchange_weak` in `Weak::upgrade`.\n            //\n            // \"Acquire\" ordering is not required. When considering the possible behaviours\n            // of `data_fn` we only need to look at what it could do with a reference to a\n            // non-upgradeable `Weak`:\n            // - It can *clone* the `Weak`, increasing the weak reference count.\n            // - It can drop those clones, decreasing the weak reference count (but never to zero).\n            //\n            // These side effects do not impact us in any way, and no other side effects are\n            // possible with safe code alone.\n            let prev_value = (*inner).strong.fetch_add(1, Release);\n            debug_assert_eq!(prev_value, 0, \"No prior strong references should exist\");\n        }\n\n        let strong = Arc::from_inner(init_ptr);\n\n        // Strong references should collectively own a shared weak reference,\n        // so don't run the destructor for our old weak reference.\n        mem::forget(weak);\n        strong\n    }\n\n    /// Constructs a new `Arc` with uninitialized contents.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(new_uninit)]\n    /// #![feature(get_mut_unchecked)]\n    ///\n    /// use std::sync::Arc;\n    ///\n    /// let mut five = Arc::<u32>::new_uninit();\n    ///\n    /// let five = unsafe {\n    ///     // Deferred initialization:\n    ///     Arc::get_mut_unchecked(&mut five).as_mut_ptr().write(5);\n    ///\n    ///     five.assume_init()\n    /// };\n    ///\n    /// assert_eq!(*five, 5)\n    /// ```\n    #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    pub fn new_uninit() -> Arc<mem::MaybeUninit<T>> {\n        unsafe {\n            Arc::from_ptr(Arc::allocate_for_layout(\n                Layout::new::<T>(),\n                |layout| Global.allocate(layout),\n                |mem| mem as *mut ArcInner<mem::MaybeUninit<T>>,\n            ))\n        }\n    }\n\n    /// Constructs a new `Arc` with uninitialized contents, with the memory\n    /// being filled with `0` bytes.\n    ///\n    /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and incorrect usage\n    /// of this method.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(new_uninit)]\n    ///\n    /// use std::sync::Arc;\n    ///\n    /// let zero = Arc::<u32>::new_zeroed();\n    /// let zero = unsafe { zero.assume_init() };\n    ///\n    /// assert_eq!(*zero, 0)\n    /// ```\n    ///\n    /// [zeroed]: ../../std/mem/union.MaybeUninit.html#method.zeroed\n    #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    pub fn new_zeroed() -> Arc<mem::MaybeUninit<T>> {\n        unsafe {\n            Arc::from_ptr(Arc::allocate_for_layout(\n                Layout::new::<T>(),\n                |layout| Global.allocate_zeroed(layout),\n                |mem| mem as *mut ArcInner<mem::MaybeUninit<T>>,\n            ))\n        }\n    }\n\n    /// Constructs a new `Pin<Arc<T>>`. If `T` does not implement `Unpin`, then\n    /// `data` will be pinned in memory and unable to be moved.\n    #[stable(feature = \"pin\", since = \"1.33.0\")]\n    pub fn pin(data: T) -> Pin<Arc<T>> {\n        unsafe { Pin::new_unchecked(Arc::new(data)) }\n    }\n\n    /// Constructs a new `Arc<T>`, returning an error if allocation fails.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(allocator_api)]\n    /// use std::sync::Arc;\n    ///\n    /// let five = Arc::try_new(5)?;\n    /// # Ok::<(), std::alloc::AllocError>(())\n    /// ```\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    #[inline]\n    pub fn try_new(data: T) -> Result<Arc<T>, AllocError> {\n        // Start the weak pointer count as 1 which is the weak pointer that's\n        // held by all the strong pointers (kinda), see std/rc.rs for more info\n        let x: Box<_> = Box::try_new(ArcInner {\n            strong: atomic::AtomicUsize::new(1),\n            weak: atomic::AtomicUsize::new(1),\n            data,\n        })?;\n        Ok(Self::from_inner(Box::leak(x).into()))\n    }\n\n    /// Constructs a new `Arc` with uninitialized contents, returning an error\n    /// if allocation fails.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(new_uninit, allocator_api)]\n    /// #![feature(get_mut_unchecked)]\n    ///\n    /// use std::sync::Arc;\n    ///\n    /// let mut five = Arc::<u32>::try_new_uninit()?;\n    ///\n    /// let five = unsafe {\n    ///     // Deferred initialization:\n    ///     Arc::get_mut_unchecked(&mut five).as_mut_ptr().write(5);\n    ///\n    ///     five.assume_init()\n    /// };\n    ///\n    /// assert_eq!(*five, 5);\n    /// # Ok::<(), std::alloc::AllocError>(())\n    /// ```\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    // #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    pub fn try_new_uninit() -> Result<Arc<mem::MaybeUninit<T>>, AllocError> {\n        unsafe {\n            Ok(Arc::from_ptr(Arc::try_allocate_for_layout(\n                Layout::new::<T>(),\n                |layout| Global.allocate(layout),\n                |mem| mem as *mut ArcInner<mem::MaybeUninit<T>>,\n            )?))\n        }\n    }\n\n    /// Constructs a new `Arc` with uninitialized contents, with the memory\n    /// being filled with `0` bytes, returning an error if allocation fails.\n    ///\n    /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and incorrect usage\n    /// of this method.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(new_uninit, allocator_api)]\n    ///\n    /// use std::sync::Arc;\n    ///\n    /// let zero = Arc::<u32>::try_new_zeroed()?;\n    /// let zero = unsafe { zero.assume_init() };\n    ///\n    /// assert_eq!(*zero, 0);\n    /// # Ok::<(), std::alloc::AllocError>(())\n    /// ```\n    ///\n    /// [zeroed]: mem::MaybeUninit::zeroed\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    // #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    pub fn try_new_zeroed() -> Result<Arc<mem::MaybeUninit<T>>, AllocError> {\n        unsafe {\n            Ok(Arc::from_ptr(Arc::try_allocate_for_layout(\n                Layout::new::<T>(),\n                |layout| Global.allocate_zeroed(layout),\n                |mem| mem as *mut ArcInner<mem::MaybeUninit<T>>,\n            )?))\n        }\n    }\n    /// Returns the inner value, if the `Arc` has exactly one strong reference.\n    ///\n    /// Otherwise, an [`Err`] is returned with the same `Arc` that was\n    /// passed in.\n    ///\n    /// This will succeed even if there are outstanding weak references.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// let x = Arc::new(3);\n    /// assert_eq!(Arc::try_unwrap(x), Ok(3));\n    ///\n    /// let x = Arc::new(4);\n    /// let _y = Arc::clone(&x);\n    /// assert_eq!(*Arc::try_unwrap(x).unwrap_err(), 4);\n    /// ```\n    #[inline]\n    #[stable(feature = \"arc_unique\", since = \"1.4.0\")]\n    pub fn try_unwrap(this: Self) -> Result<T, Self> {\n        if this.inner().strong.compare_exchange(1, 0, Relaxed, Relaxed).is_err() {\n            return Err(this);\n        }\n\n        acquire!(this.inner().strong);\n\n        unsafe {\n            let elem = ptr::read(&this.ptr.as_ref().data);\n\n            // Make a weak pointer to clean up the implicit strong-weak reference\n            let _weak = Weak { ptr: this.ptr };\n            mem::forget(this);\n\n            Ok(elem)\n        }\n    }\n}\n\nimpl<T> Arc<[T]> {\n    /// Constructs a new atomically reference-counted slice with uninitialized contents.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(new_uninit)]\n    /// #![feature(get_mut_unchecked)]\n    ///\n    /// use std::sync::Arc;\n    ///\n    /// let mut values = Arc::<[u32]>::new_uninit_slice(3);\n    ///\n    /// let values = unsafe {\n    ///     // Deferred initialization:\n    ///     Arc::get_mut_unchecked(&mut values)[0].as_mut_ptr().write(1);\n    ///     Arc::get_mut_unchecked(&mut values)[1].as_mut_ptr().write(2);\n    ///     Arc::get_mut_unchecked(&mut values)[2].as_mut_ptr().write(3);\n    ///\n    ///     values.assume_init()\n    /// };\n    ///\n    /// assert_eq!(*values, [1, 2, 3])\n    /// ```\n    #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    pub fn new_uninit_slice(len: usize) -> Arc<[mem::MaybeUninit<T>]> {\n        unsafe { Arc::from_ptr(Arc::allocate_for_slice(len)) }\n    }\n\n    /// Constructs a new atomically reference-counted slice with uninitialized contents, with the memory being\n    /// filled with `0` bytes.\n    ///\n    /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and\n    /// incorrect usage of this method.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(new_uninit)]\n    ///\n    /// use std::sync::Arc;\n    ///\n    /// let values = Arc::<[u32]>::new_zeroed_slice(3);\n    /// let values = unsafe { values.assume_init() };\n    ///\n    /// assert_eq!(*values, [0, 0, 0])\n    /// ```\n    ///\n    /// [zeroed]: ../../std/mem/union.MaybeUninit.html#method.zeroed\n    #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    pub fn new_zeroed_slice(len: usize) -> Arc<[mem::MaybeUninit<T>]> {\n        unsafe {\n            Arc::from_ptr(Arc::allocate_for_layout(\n                Layout::array::<T>(len).unwrap(),\n                |layout| Global.allocate_zeroed(layout),\n                |mem| {\n                    ptr::slice_from_raw_parts_mut(mem as *mut T, len)\n                        as *mut ArcInner<[mem::MaybeUninit<T>]>\n                },\n            ))\n        }\n    }\n}\n\nimpl<T> Arc<mem::MaybeUninit<T>> {\n    /// Converts to `Arc<T>`.\n    ///\n    /// # Safety\n    ///\n    /// As with [`MaybeUninit::assume_init`],\n    /// it is up to the caller to guarantee that the inner value\n    /// really is in an initialized state.\n    /// Calling this when the content is not yet fully initialized\n    /// causes immediate undefined behavior.\n    ///\n    /// [`MaybeUninit::assume_init`]: ../../std/mem/union.MaybeUninit.html#method.assume_init\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(new_uninit)]\n    /// #![feature(get_mut_unchecked)]\n    ///\n    /// use std::sync::Arc;\n    ///\n    /// let mut five = Arc::<u32>::new_uninit();\n    ///\n    /// let five = unsafe {\n    ///     // Deferred initialization:\n    ///     Arc::get_mut_unchecked(&mut five).as_mut_ptr().write(5);\n    ///\n    ///     five.assume_init()\n    /// };\n    ///\n    /// assert_eq!(*five, 5)\n    /// ```\n    #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    #[inline]\n    pub unsafe fn assume_init(self) -> Arc<T> {\n        Arc::from_inner(mem::ManuallyDrop::new(self).ptr.cast())\n    }\n}\n\nimpl<T> Arc<[mem::MaybeUninit<T>]> {\n    /// Converts to `Arc<[T]>`.\n    ///\n    /// # Safety\n    ///\n    /// As with [`MaybeUninit::assume_init`],\n    /// it is up to the caller to guarantee that the inner value\n    /// really is in an initialized state.\n    /// Calling this when the content is not yet fully initialized\n    /// causes immediate undefined behavior.\n    ///\n    /// [`MaybeUninit::assume_init`]: ../../std/mem/union.MaybeUninit.html#method.assume_init\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(new_uninit)]\n    /// #![feature(get_mut_unchecked)]\n    ///\n    /// use std::sync::Arc;\n    ///\n    /// let mut values = Arc::<[u32]>::new_uninit_slice(3);\n    ///\n    /// let values = unsafe {\n    ///     // Deferred initialization:\n    ///     Arc::get_mut_unchecked(&mut values)[0].as_mut_ptr().write(1);\n    ///     Arc::get_mut_unchecked(&mut values)[1].as_mut_ptr().write(2);\n    ///     Arc::get_mut_unchecked(&mut values)[2].as_mut_ptr().write(3);\n    ///\n    ///     values.assume_init()\n    /// };\n    ///\n    /// assert_eq!(*values, [1, 2, 3])\n    /// ```\n    #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    #[inline]\n    pub unsafe fn assume_init(self) -> Arc<[T]> {\n        unsafe { Arc::from_ptr(mem::ManuallyDrop::new(self).ptr.as_ptr() as _) }\n    }\n}\n\nimpl<T: ?Sized> Arc<T> {\n    /// Consumes the `Arc`, returning the wrapped pointer.\n    ///\n    /// To avoid a memory leak the pointer must be converted back to an `Arc` using\n    /// [`Arc::from_raw`].\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// let x = Arc::new(\"hello\".to_owned());\n    /// let x_ptr = Arc::into_raw(x);\n    /// assert_eq!(unsafe { &*x_ptr }, \"hello\");\n    /// ```\n    #[stable(feature = \"rc_raw\", since = \"1.17.0\")]\n    pub fn into_raw(this: Self) -> *const T {\n        let ptr = Self::as_ptr(&this);\n        mem::forget(this);\n        ptr\n    }\n\n    /// Provides a raw pointer to the data.\n    ///\n    /// The counts are not affected in any way and the `Arc` is not consumed. The pointer is valid for\n    /// as long as there are strong counts in the `Arc`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// let x = Arc::new(\"hello\".to_owned());\n    /// let y = Arc::clone(&x);\n    /// let x_ptr = Arc::as_ptr(&x);\n    /// assert_eq!(x_ptr, Arc::as_ptr(&y));\n    /// assert_eq!(unsafe { &*x_ptr }, \"hello\");\n    /// ```\n    #[stable(feature = \"rc_as_ptr\", since = \"1.45.0\")]\n    pub fn as_ptr(this: &Self) -> *const T {\n        let ptr: *mut ArcInner<T> = NonNull::as_ptr(this.ptr);\n\n        // SAFETY: This cannot go through Deref::deref or RcBoxPtr::inner because\n        // this is required to retain raw/mut provenance such that e.g. `get_mut` can\n        // write through the pointer after the Rc is recovered through `from_raw`.\n        unsafe { ptr::addr_of_mut!((*ptr).data) }\n    }\n\n    /// Constructs an `Arc<T>` from a raw pointer.\n    ///\n    /// The raw pointer must have been previously returned by a call to\n    /// [`Arc<U>::into_raw`][into_raw] where `U` must have the same size and\n    /// alignment as `T`. This is trivially true if `U` is `T`.\n    /// Note that if `U` is not `T` but has the same size and alignment, this is\n    /// basically like transmuting references of different types. See\n    /// [`mem::transmute`][transmute] for more information on what\n    /// restrictions apply in this case.\n    ///\n    /// The user of `from_raw` has to make sure a specific value of `T` is only\n    /// dropped once.\n    ///\n    /// This function is unsafe because improper use may lead to memory unsafety,\n    /// even if the returned `Arc<T>` is never accessed.\n    ///\n    /// [into_raw]: Arc::into_raw\n    /// [transmute]: core::mem::transmute\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// let x = Arc::new(\"hello\".to_owned());\n    /// let x_ptr = Arc::into_raw(x);\n    ///\n    /// unsafe {\n    ///     // Convert back to an `Arc` to prevent leak.\n    ///     let x = Arc::from_raw(x_ptr);\n    ///     assert_eq!(&*x, \"hello\");\n    ///\n    ///     // Further calls to `Arc::from_raw(x_ptr)` would be memory-unsafe.\n    /// }\n    ///\n    /// // The memory was freed when `x` went out of scope above, so `x_ptr` is now dangling!\n    /// ```\n    #[stable(feature = \"rc_raw\", since = \"1.17.0\")]\n    pub unsafe fn from_raw(ptr: *const T) -> Self {\n        unsafe {\n            let offset = data_offset(ptr);\n\n            // Reverse the offset to find the original ArcInner.\n            let arc_ptr = (ptr as *mut ArcInner<T>).set_ptr_value((ptr as *mut u8).offset(-offset));\n\n            Self::from_ptr(arc_ptr)\n        }\n    }\n\n    /// Creates a new [`Weak`] pointer to this allocation.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// let five = Arc::new(5);\n    ///\n    /// let weak_five = Arc::downgrade(&five);\n    /// ```\n    #[stable(feature = \"arc_weak\", since = \"1.4.0\")]\n    pub fn downgrade(this: &Self) -> Weak<T> {\n        // This Relaxed is OK because we're checking the value in the CAS\n        // below.\n        let mut cur = this.inner().weak.load(Relaxed);\n\n        loop {\n            // check if the weak counter is currently \"locked\"; if so, spin.\n            if cur == usize::MAX {\n                hint::spin_loop();\n                cur = this.inner().weak.load(Relaxed);\n                continue;\n            }\n\n            // NOTE: this code currently ignores the possibility of overflow\n            // into usize::MAX; in general both Rc and Arc need to be adjusted\n            // to deal with overflow.\n\n            // Unlike with Clone(), we need this to be an Acquire read to\n            // synchronize with the write coming from `is_unique`, so that the\n            // events prior to that write happen before this read.\n            match this.inner().weak.compare_exchange_weak(cur, cur + 1, Acquire, Relaxed) {\n                Ok(_) => {\n                    // Make sure we do not create a dangling Weak\n                    debug_assert!(!is_dangling(this.ptr.as_ptr()));\n                    return Weak { ptr: this.ptr };\n                }\n                Err(old) => cur = old,\n            }\n        }\n    }\n\n    /// Gets the number of [`Weak`] pointers to this allocation.\n    ///\n    /// # Safety\n    ///\n    /// This method by itself is safe, but using it correctly requires extra care.\n    /// Another thread can change the weak count at any time,\n    /// including potentially between calling this method and acting on the result.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// let five = Arc::new(5);\n    /// let _weak_five = Arc::downgrade(&five);\n    ///\n    /// // This assertion is deterministic because we haven't shared\n    /// // the `Arc` or `Weak` between threads.\n    /// assert_eq!(1, Arc::weak_count(&five));\n    /// ```\n    #[inline]\n    #[stable(feature = \"arc_counts\", since = \"1.15.0\")]\n    pub fn weak_count(this: &Self) -> usize {\n        let cnt = this.inner().weak.load(SeqCst);\n        // If the weak count is currently locked, the value of the\n        // count was 0 just before taking the lock.\n        if cnt == usize::MAX { 0 } else { cnt - 1 }\n    }\n\n    /// Gets the number of strong (`Arc`) pointers to this allocation.\n    ///\n    /// # Safety\n    ///\n    /// This method by itself is safe, but using it correctly requires extra care.\n    /// Another thread can change the strong count at any time,\n    /// including potentially between calling this method and acting on the result.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// let five = Arc::new(5);\n    /// let _also_five = Arc::clone(&five);\n    ///\n    /// // This assertion is deterministic because we haven't shared\n    /// // the `Arc` between threads.\n    /// assert_eq!(2, Arc::strong_count(&five));\n    /// ```\n    #[inline]\n    #[stable(feature = \"arc_counts\", since = \"1.15.0\")]\n    pub fn strong_count(this: &Self) -> usize {\n        this.inner().strong.load(SeqCst)\n    }\n\n    /// Increments the strong reference count on the `Arc<T>` associated with the\n    /// provided pointer by one.\n    ///\n    /// # Safety\n    ///\n    /// The pointer must have been obtained through `Arc::into_raw`, and the\n    /// associated `Arc` instance must be valid (i.e. the strong count must be at\n    /// least 1) for the duration of this method.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// let five = Arc::new(5);\n    ///\n    /// unsafe {\n    ///     let ptr = Arc::into_raw(five);\n    ///     Arc::increment_strong_count(ptr);\n    ///\n    ///     // This assertion is deterministic because we haven't shared\n    ///     // the `Arc` between threads.\n    ///     let five = Arc::from_raw(ptr);\n    ///     assert_eq!(2, Arc::strong_count(&five));\n    /// }\n    /// ```\n    #[inline]\n    #[stable(feature = \"arc_mutate_strong_count\", since = \"1.51.0\")]\n    pub unsafe fn increment_strong_count(ptr: *const T) {\n        // Retain Arc, but don't touch refcount by wrapping in ManuallyDrop\n        let arc = unsafe { mem::ManuallyDrop::new(Arc::<T>::from_raw(ptr)) };\n        // Now increase refcount, but don't drop new refcount either\n        let _arc_clone: mem::ManuallyDrop<_> = arc.clone();\n    }\n\n    /// Decrements the strong reference count on the `Arc<T>` associated with the\n    /// provided pointer by one.\n    ///\n    /// # Safety\n    ///\n    /// The pointer must have been obtained through `Arc::into_raw`, and the\n    /// associated `Arc` instance must be valid (i.e. the strong count must be at\n    /// least 1) when invoking this method. This method can be used to release the final\n    /// `Arc` and backing storage, but **should not** be called after the final `Arc` has been\n    /// released.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// let five = Arc::new(5);\n    ///\n    /// unsafe {\n    ///     let ptr = Arc::into_raw(five);\n    ///     Arc::increment_strong_count(ptr);\n    ///\n    ///     // Those assertions are deterministic because we haven't shared\n    ///     // the `Arc` between threads.\n    ///     let five = Arc::from_raw(ptr);\n    ///     assert_eq!(2, Arc::strong_count(&five));\n    ///     Arc::decrement_strong_count(ptr);\n    ///     assert_eq!(1, Arc::strong_count(&five));\n    /// }\n    /// ```\n    #[inline]\n    #[stable(feature = \"arc_mutate_strong_count\", since = \"1.51.0\")]\n    pub unsafe fn decrement_strong_count(ptr: *const T) {\n        unsafe { mem::drop(Arc::from_raw(ptr)) };\n    }\n\n    #[inline]\n    fn inner(&self) -> &ArcInner<T> {\n        // This unsafety is ok because while this arc is alive we're guaranteed\n        // that the inner pointer is valid. Furthermore, we know that the\n        // `ArcInner` structure itself is `Sync` because the inner data is\n        // `Sync` as well, so we're ok loaning out an immutable pointer to these\n        // contents.\n        unsafe { self.ptr.as_ref() }\n    }\n\n    // Non-inlined part of `drop`.\n    #[inline(never)]\n    unsafe fn drop_slow(&mut self) {\n        // Destroy the data at this time, even though we may not free the box\n        // allocation itself (there may still be weak pointers lying around).\n        unsafe { ptr::drop_in_place(Self::get_mut_unchecked(self)) };\n\n        // Drop the weak ref collectively held by all strong references\n        drop(Weak { ptr: self.ptr });\n    }\n\n    #[inline]\n    #[stable(feature = \"ptr_eq\", since = \"1.17.0\")]\n    /// Returns `true` if the two `Arc`s point to the same allocation\n    /// (in a vein similar to [`ptr::eq`]).\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// let five = Arc::new(5);\n    /// let same_five = Arc::clone(&five);\n    /// let other_five = Arc::new(5);\n    ///\n    /// assert!(Arc::ptr_eq(&five, &same_five));\n    /// assert!(!Arc::ptr_eq(&five, &other_five));\n    /// ```\n    ///\n    /// [`ptr::eq`]: core::ptr::eq\n    pub fn ptr_eq(this: &Self, other: &Self) -> bool {\n        this.ptr.as_ptr() == other.ptr.as_ptr()\n    }\n}\n\nimpl<T: ?Sized> Arc<T> {\n    /// Allocates an `ArcInner<T>` with sufficient space for\n    /// a possibly-unsized inner value where the value has the layout provided.\n    ///\n    /// The function `mem_to_arcinner` is called with the data pointer\n    /// and must return back a (potentially fat)-pointer for the `ArcInner<T>`.\n    unsafe fn allocate_for_layout(\n        value_layout: Layout,\n        allocate: impl FnOnce(Layout) -> Result<NonNull<[u8]>, AllocError>,\n        mem_to_arcinner: impl FnOnce(*mut u8) -> *mut ArcInner<T>,\n    ) -> *mut ArcInner<T> {\n        // Calculate layout using the given value layout.\n        // Previously, layout was calculated on the expression\n        // `&*(ptr as *const ArcInner<T>)`, but this created a misaligned\n        // reference (see #54908).\n        let layout = Layout::new::<ArcInner<()>>().extend(value_layout).unwrap().0.pad_to_align();\n        unsafe {\n            Arc::try_allocate_for_layout(value_layout, allocate, mem_to_arcinner)\n                .unwrap_or_else(|_| handle_alloc_error(layout))\n        }\n    }\n\n    /// Allocates an `ArcInner<T>` with sufficient space for\n    /// a possibly-unsized inner value where the value has the layout provided,\n    /// returning an error if allocation fails.\n    ///\n    /// The function `mem_to_arcinner` is called with the data pointer\n    /// and must return back a (potentially fat)-pointer for the `ArcInner<T>`.\n    unsafe fn try_allocate_for_layout(\n        value_layout: Layout,\n        allocate: impl FnOnce(Layout) -> Result<NonNull<[u8]>, AllocError>,\n        mem_to_arcinner: impl FnOnce(*mut u8) -> *mut ArcInner<T>,\n    ) -> Result<*mut ArcInner<T>, AllocError> {\n        // Calculate layout using the given value layout.\n        // Previously, layout was calculated on the expression\n        // `&*(ptr as *const ArcInner<T>)`, but this created a misaligned\n        // reference (see #54908).\n        let layout = Layout::new::<ArcInner<()>>().extend(value_layout).unwrap().0.pad_to_align();\n\n        let ptr = allocate(layout)?;\n\n        // Initialize the ArcInner\n        let inner = mem_to_arcinner(ptr.as_non_null_ptr().as_ptr());\n        debug_assert_eq!(unsafe { Layout::for_value(&*inner) }, layout);\n\n        unsafe {\n            ptr::write(&mut (*inner).strong, atomic::AtomicUsize::new(1));\n            ptr::write(&mut (*inner).weak, atomic::AtomicUsize::new(1));\n        }\n\n        Ok(inner)\n    }\n\n    /// Allocates an `ArcInner<T>` with sufficient space for an unsized inner value.\n    unsafe fn allocate_for_ptr(ptr: *const T) -> *mut ArcInner<T> {\n        // Allocate for the `ArcInner<T>` using the given value.\n        unsafe {\n            Self::allocate_for_layout(\n                Layout::for_value(&*ptr),\n                |layout| Global.allocate(layout),\n                |mem| (ptr as *mut ArcInner<T>).set_ptr_value(mem) as *mut ArcInner<T>,\n            )\n        }\n    }\n\n    fn from_box(v: Box<T>) -> Arc<T> {\n        unsafe {\n            let (box_unique, alloc) = Box::into_unique(v);\n            let bptr = box_unique.as_ptr();\n\n            let value_size = size_of_val(&*bptr);\n            let ptr = Self::allocate_for_ptr(bptr);\n\n            // Copy value as bytes\n            ptr::copy_nonoverlapping(\n                bptr as *const T as *const u8,\n                &mut (*ptr).data as *mut _ as *mut u8,\n                value_size,\n            );\n\n            // Free the allocation without dropping its contents\n            box_free(box_unique, alloc);\n\n            Self::from_ptr(ptr)\n        }\n    }\n}\n\nimpl<T> Arc<[T]> {\n    /// Allocates an `ArcInner<[T]>` with the given length.\n    unsafe fn allocate_for_slice(len: usize) -> *mut ArcInner<[T]> {\n        unsafe {\n            Self::allocate_for_layout(\n                Layout::array::<T>(len).unwrap(),\n                |layout| Global.allocate(layout),\n                |mem| ptr::slice_from_raw_parts_mut(mem as *mut T, len) as *mut ArcInner<[T]>,\n            )\n        }\n    }\n\n    /// Copy elements from slice into newly allocated Arc<\\[T\\]>\n    ///\n    /// Unsafe because the caller must either take ownership or bind `T: Copy`.\n    unsafe fn copy_from_slice(v: &[T]) -> Arc<[T]> {\n        unsafe {\n            let ptr = Self::allocate_for_slice(v.len());\n\n            ptr::copy_nonoverlapping(v.as_ptr(), &mut (*ptr).data as *mut [T] as *mut T, v.len());\n\n            Self::from_ptr(ptr)\n        }\n    }\n\n    /// Constructs an `Arc<[T]>` from an iterator known to be of a certain size.\n    ///\n    /// Behavior is undefined should the size be wrong.\n    unsafe fn from_iter_exact(iter: impl iter::Iterator<Item = T>, len: usize) -> Arc<[T]> {\n        // Panic guard while cloning T elements.\n        // In the event of a panic, elements that have been written\n        // into the new ArcInner will be dropped, then the memory freed.\n        struct Guard<T> {\n            mem: NonNull<u8>,\n            elems: *mut T,\n            layout: Layout,\n            n_elems: usize,\n        }\n\n        impl<T> Drop for Guard<T> {\n            fn drop(&mut self) {\n                unsafe {\n                    let slice = from_raw_parts_mut(self.elems, self.n_elems);\n                    ptr::drop_in_place(slice);\n\n                    Global.deallocate(self.mem, self.layout);\n                }\n            }\n        }\n\n        unsafe {\n            let ptr = Self::allocate_for_slice(len);\n\n            let mem = ptr as *mut _ as *mut u8;\n            let layout = Layout::for_value(&*ptr);\n\n            // Pointer to first element\n            let elems = &mut (*ptr).data as *mut [T] as *mut T;\n\n            let mut guard = Guard { mem: NonNull::new_unchecked(mem), elems, layout, n_elems: 0 };\n\n            for (i, item) in iter.enumerate() {\n                ptr::write(elems.add(i), item);\n                guard.n_elems += 1;\n            }\n\n            // All clear. Forget the guard so it doesn't free the new ArcInner.\n            mem::forget(guard);\n\n            Self::from_ptr(ptr)\n        }\n    }\n}\n\n/// Specialization trait used for `From<&[T]>`.\ntrait ArcFromSlice<T> {\n    fn from_slice(slice: &[T]) -> Self;\n}\n\nimpl<T: Clone> ArcFromSlice<T> for Arc<[T]> {\n    #[inline]\n    default fn from_slice(v: &[T]) -> Self {\n        unsafe { Self::from_iter_exact(v.iter().cloned(), v.len()) }\n    }\n}\n\nimpl<T: Copy> ArcFromSlice<T> for Arc<[T]> {\n    #[inline]\n    fn from_slice(v: &[T]) -> Self {\n        unsafe { Arc::copy_from_slice(v) }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized> Clone for Arc<T> {\n    /// Makes a clone of the `Arc` pointer.\n    ///\n    /// This creates another pointer to the same allocation, increasing the\n    /// strong reference count.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// let five = Arc::new(5);\n    ///\n    /// let _ = Arc::clone(&five);\n    /// ```\n    #[inline]\n    fn clone(&self) -> Arc<T> {\n        // Using a relaxed ordering is alright here, as knowledge of the\n        // original reference prevents other threads from erroneously deleting\n        // the object.\n        //\n        // As explained in the [Boost documentation][1], Increasing the\n        // reference counter can always be done with memory_order_relaxed: New\n        // references to an object can only be formed from an existing\n        // reference, and passing an existing reference from one thread to\n        // another must already provide any required synchronization.\n        //\n        // [1]: (www.boost.org/doc/libs/1_55_0/doc/html/atomic/usage_examples.html)\n        let old_size = self.inner().strong.fetch_add(1, Relaxed);\n\n        // However we need to guard against massive refcounts in case someone\n        // is `mem::forget`ing Arcs. If we don't do this the count can overflow\n        // and users will use-after free. We racily saturate to `isize::MAX` on\n        // the assumption that there aren't ~2 billion threads incrementing\n        // the reference count at once. This branch will never be taken in\n        // any realistic program.\n        //\n        // We abort because such a program is incredibly degenerate, and we\n        // don't care to support it.\n        if old_size > MAX_REFCOUNT {\n            abort();\n        }\n\n        Self::from_inner(self.ptr)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized> Deref for Arc<T> {\n    type Target = T;\n\n    #[inline]\n    fn deref(&self) -> &T {\n        &self.inner().data\n    }\n}\n\n#[unstable(feature = \"receiver_trait\", issue = \"none\")]\nimpl<T: ?Sized> Receiver for Arc<T> {}\n\nimpl<T: Clone> Arc<T> {\n    /// Makes a mutable reference into the given `Arc`.\n    ///\n    /// If there are other `Arc` or [`Weak`] pointers to the same allocation,\n    /// then `make_mut` will create a new allocation and invoke [`clone`][clone] on the inner value\n    /// to ensure unique ownership. This is also referred to as clone-on-write.\n    ///\n    /// Note that this differs from the behavior of [`Rc::make_mut`] which disassociates\n    /// any remaining `Weak` pointers.\n    ///\n    /// See also [`get_mut`][get_mut], which will fail rather than cloning.\n    ///\n    /// [clone]: Clone::clone\n    /// [get_mut]: Arc::get_mut\n    /// [`Rc::make_mut`]: super::rc::Rc::make_mut\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// let mut data = Arc::new(5);\n    ///\n    /// *Arc::make_mut(&mut data) += 1;         // Won't clone anything\n    /// let mut other_data = Arc::clone(&data); // Won't clone inner data\n    /// *Arc::make_mut(&mut data) += 1;         // Clones inner data\n    /// *Arc::make_mut(&mut data) += 1;         // Won't clone anything\n    /// *Arc::make_mut(&mut other_data) *= 2;   // Won't clone anything\n    ///\n    /// // Now `data` and `other_data` point to different allocations.\n    /// assert_eq!(*data, 8);\n    /// assert_eq!(*other_data, 12);\n    /// ```\n    #[inline]\n    #[stable(feature = \"arc_unique\", since = \"1.4.0\")]\n    pub fn make_mut(this: &mut Self) -> &mut T {\n        // Note that we hold both a strong reference and a weak reference.\n        // Thus, releasing our strong reference only will not, by itself, cause\n        // the memory to be deallocated.\n        //\n        // Use Acquire to ensure that we see any writes to `weak` that happen\n        // before release writes (i.e., decrements) to `strong`. Since we hold a\n        // weak count, there's no chance the ArcInner itself could be\n        // deallocated.\n        if this.inner().strong.compare_exchange(1, 0, Acquire, Relaxed).is_err() {\n            // Another strong pointer exists, so we must clone.\n            // Pre-allocate memory to allow writing the cloned value directly.\n            let mut arc = Self::new_uninit();\n            unsafe {\n                let data = Arc::get_mut_unchecked(&mut arc);\n                (**this).write_clone_into_raw(data.as_mut_ptr());\n                *this = arc.assume_init();\n            }\n        } else if this.inner().weak.load(Relaxed) != 1 {\n            // Relaxed suffices in the above because this is fundamentally an\n            // optimization: we are always racing with weak pointers being\n            // dropped. Worst case, we end up allocated a new Arc unnecessarily.\n\n            // We removed the last strong ref, but there are additional weak\n            // refs remaining. We'll move the contents to a new Arc, and\n            // invalidate the other weak refs.\n\n            // Note that it is not possible for the read of `weak` to yield\n            // usize::MAX (i.e., locked), since the weak count can only be\n            // locked by a thread with a strong reference.\n\n            // Materialize our own implicit weak pointer, so that it can clean\n            // up the ArcInner as needed.\n            let _weak = Weak { ptr: this.ptr };\n\n            // Can just steal the data, all that's left is Weaks\n            let mut arc = Self::new_uninit();\n            unsafe {\n                let data = Arc::get_mut_unchecked(&mut arc);\n                data.as_mut_ptr().copy_from_nonoverlapping(&**this, 1);\n                ptr::write(this, arc.assume_init());\n            }\n        } else {\n            // We were the sole reference of either kind; bump back up the\n            // strong ref count.\n            this.inner().strong.store(1, Release);\n        }\n\n        // As with `get_mut()`, the unsafety is ok because our reference was\n        // either unique to begin with, or became one upon cloning the contents.\n        unsafe { Self::get_mut_unchecked(this) }\n    }\n}\n\nimpl<T: ?Sized> Arc<T> {\n    /// Returns a mutable reference into the given `Arc`, if there are\n    /// no other `Arc` or [`Weak`] pointers to the same allocation.\n    ///\n    /// Returns [`None`] otherwise, because it is not safe to\n    /// mutate a shared value.\n    ///\n    /// See also [`make_mut`][make_mut], which will [`clone`][clone]\n    /// the inner value when there are other pointers.\n    ///\n    /// [make_mut]: Arc::make_mut\n    /// [clone]: Clone::clone\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// let mut x = Arc::new(3);\n    /// *Arc::get_mut(&mut x).unwrap() = 4;\n    /// assert_eq!(*x, 4);\n    ///\n    /// let _y = Arc::clone(&x);\n    /// assert!(Arc::get_mut(&mut x).is_none());\n    /// ```\n    #[inline]\n    #[stable(feature = \"arc_unique\", since = \"1.4.0\")]\n    pub fn get_mut(this: &mut Self) -> Option<&mut T> {\n        if this.is_unique() {\n            // This unsafety is ok because we're guaranteed that the pointer\n            // returned is the *only* pointer that will ever be returned to T. Our\n            // reference count is guaranteed to be 1 at this point, and we required\n            // the Arc itself to be `mut`, so we're returning the only possible\n            // reference to the inner data.\n            unsafe { Some(Arc::get_mut_unchecked(this)) }\n        } else {\n            None\n        }\n    }\n\n    /// Returns a mutable reference into the given `Arc`,\n    /// without any check.\n    ///\n    /// See also [`get_mut`], which is safe and does appropriate checks.\n    ///\n    /// [`get_mut`]: Arc::get_mut\n    ///\n    /// # Safety\n    ///\n    /// Any other `Arc` or [`Weak`] pointers to the same allocation must not be dereferenced\n    /// for the duration of the returned borrow.\n    /// This is trivially the case if no such pointers exist,\n    /// for example immediately after `Arc::new`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(get_mut_unchecked)]\n    ///\n    /// use std::sync::Arc;\n    ///\n    /// let mut x = Arc::new(String::new());\n    /// unsafe {\n    ///     Arc::get_mut_unchecked(&mut x).push_str(\"foo\")\n    /// }\n    /// assert_eq!(*x, \"foo\");\n    /// ```\n    #[inline]\n    #[unstable(feature = \"get_mut_unchecked\", issue = \"63292\")]\n    pub unsafe fn get_mut_unchecked(this: &mut Self) -> &mut T {\n        // We are careful to *not* create a reference covering the \"count\" fields, as\n        // this would alias with concurrent access to the reference counts (e.g. by `Weak`).\n        unsafe { &mut (*this.ptr.as_ptr()).data }\n    }\n\n    /// Determine whether this is the unique reference (including weak refs) to\n    /// the underlying data.\n    ///\n    /// Note that this requires locking the weak ref count.\n    fn is_unique(&mut self) -> bool {\n        // lock the weak pointer count if we appear to be the sole weak pointer\n        // holder.\n        //\n        // The acquire label here ensures a happens-before relationship with any\n        // writes to `strong` (in particular in `Weak::upgrade`) prior to decrements\n        // of the `weak` count (via `Weak::drop`, which uses release).  If the upgraded\n        // weak ref was never dropped, the CAS here will fail so we do not care to synchronize.\n        if self.inner().weak.compare_exchange(1, usize::MAX, Acquire, Relaxed).is_ok() {\n            // This needs to be an `Acquire` to synchronize with the decrement of the `strong`\n            // counter in `drop` -- the only access that happens when any but the last reference\n            // is being dropped.\n            let unique = self.inner().strong.load(Acquire) == 1;\n\n            // The release write here synchronizes with a read in `downgrade`,\n            // effectively preventing the above read of `strong` from happening\n            // after the write.\n            self.inner().weak.store(1, Release); // release the lock\n            unique\n        } else {\n            false\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nunsafe impl<#[may_dangle] T: ?Sized> Drop for Arc<T> {\n    /// Drops the `Arc`.\n    ///\n    /// This will decrement the strong reference count. If the strong reference\n    /// count reaches zero then the only other references (if any) are\n    /// [`Weak`], so we `drop` the inner value.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// struct Foo;\n    ///\n    /// impl Drop for Foo {\n    ///     fn drop(&mut self) {\n    ///         println!(\"dropped!\");\n    ///     }\n    /// }\n    ///\n    /// let foo  = Arc::new(Foo);\n    /// let foo2 = Arc::clone(&foo);\n    ///\n    /// drop(foo);    // Doesn't print anything\n    /// drop(foo2);   // Prints \"dropped!\"\n    /// ```\n    #[inline]\n    fn drop(&mut self) {\n        // Because `fetch_sub` is already atomic, we do not need to synchronize\n        // with other threads unless we are going to delete the object. This\n        // same logic applies to the below `fetch_sub` to the `weak` count.\n        if self.inner().strong.fetch_sub(1, Release) != 1 {\n            return;\n        }\n\n        // This fence is needed to prevent reordering of use of the data and\n        // deletion of the data.  Because it is marked `Release`, the decreasing\n        // of the reference count synchronizes with this `Acquire` fence. This\n        // means that use of the data happens before decreasing the reference\n        // count, which happens before this fence, which happens before the\n        // deletion of the data.\n        //\n        // As explained in the [Boost documentation][1],\n        //\n        // > It is important to enforce any possible access to the object in one\n        // > thread (through an existing reference) to *happen before* deleting\n        // > the object in a different thread. This is achieved by a \"release\"\n        // > operation after dropping a reference (any access to the object\n        // > through this reference must obviously happened before), and an\n        // > \"acquire\" operation before deleting the object.\n        //\n        // In particular, while the contents of an Arc are usually immutable, it's\n        // possible to have interior writes to something like a Mutex<T>. Since a\n        // Mutex is not acquired when it is deleted, we can't rely on its\n        // synchronization logic to make writes in thread A visible to a destructor\n        // running in thread B.\n        //\n        // Also note that the Acquire fence here could probably be replaced with an\n        // Acquire load, which could improve performance in highly-contended\n        // situations. See [2].\n        //\n        // [1]: (www.boost.org/doc/libs/1_55_0/doc/html/atomic/usage_examples.html)\n        // [2]: (https://github.com/rust-lang/rust/pull/41714)\n        acquire!(self.inner().strong);\n\n        unsafe {\n            self.drop_slow();\n        }\n    }\n}\n\nimpl Arc<dyn Any + Send + Sync> {\n    #[inline]\n    #[stable(feature = \"rc_downcast\", since = \"1.29.0\")]\n    /// Attempt to downcast the `Arc<dyn Any + Send + Sync>` to a concrete type.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::any::Any;\n    /// use std::sync::Arc;\n    ///\n    /// fn print_if_string(value: Arc<dyn Any + Send + Sync>) {\n    ///     if let Ok(string) = value.downcast::<String>() {\n    ///         println!(\"String ({}): {}\", string.len(), string);\n    ///     }\n    /// }\n    ///\n    /// let my_string = \"Hello World\".to_string();\n    /// print_if_string(Arc::new(my_string));\n    /// print_if_string(Arc::new(0i8));\n    /// ```\n    pub fn downcast<T>(self) -> Result<Arc<T>, Self>\n    where\n        T: Any + Send + Sync + 'static,\n    {\n        if (*self).is::<T>() {\n            let ptr = self.ptr.cast::<ArcInner<T>>();\n            mem::forget(self);\n            Ok(Arc::from_inner(ptr))\n        } else {\n            Err(self)\n        }\n    }\n}\n\nimpl<T> Weak<T> {\n    /// Constructs a new `Weak<T>`, without allocating any memory.\n    /// Calling [`upgrade`] on the return value always gives [`None`].\n    ///\n    /// [`upgrade`]: Weak::upgrade\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Weak;\n    ///\n    /// let empty: Weak<i64> = Weak::new();\n    /// assert!(empty.upgrade().is_none());\n    /// ```\n    #[stable(feature = \"downgraded_weak\", since = \"1.10.0\")]\n    pub fn new() -> Weak<T> {\n        Weak { ptr: NonNull::new(usize::MAX as *mut ArcInner<T>).expect(\"MAX is not 0\") }\n    }\n}\n\n/// Helper type to allow accessing the reference counts without\n/// making any assertions about the data field.\nstruct WeakInner<'a> {\n    weak: &'a atomic::AtomicUsize,\n    strong: &'a atomic::AtomicUsize,\n}\n\nimpl<T: ?Sized> Weak<T> {\n    /// Returns a raw pointer to the object `T` pointed to by this `Weak<T>`.\n    ///\n    /// The pointer is valid only if there are some strong references. The pointer may be dangling,\n    /// unaligned or even [`null`] otherwise.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    /// use std::ptr;\n    ///\n    /// let strong = Arc::new(\"hello\".to_owned());\n    /// let weak = Arc::downgrade(&strong);\n    /// // Both point to the same object\n    /// assert!(ptr::eq(&*strong, weak.as_ptr()));\n    /// // The strong here keeps it alive, so we can still access the object.\n    /// assert_eq!(\"hello\", unsafe { &*weak.as_ptr() });\n    ///\n    /// drop(strong);\n    /// // But not any more. We can do weak.as_ptr(), but accessing the pointer would lead to\n    /// // undefined behaviour.\n    /// // assert_eq!(\"hello\", unsafe { &*weak.as_ptr() });\n    /// ```\n    ///\n    /// [`null`]: core::ptr::null\n    #[stable(feature = \"weak_into_raw\", since = \"1.45.0\")]\n    pub fn as_ptr(&self) -> *const T {\n        let ptr: *mut ArcInner<T> = NonNull::as_ptr(self.ptr);\n\n        if is_dangling(ptr) {\n            // If the pointer is dangling, we return the sentinel directly. This cannot be\n            // a valid payload address, as the payload is at least as aligned as ArcInner (usize).\n            ptr as *const T\n        } else {\n            // SAFETY: if is_dangling returns false, then the pointer is dereferencable.\n            // The payload may be dropped at this point, and we have to maintain provenance,\n            // so use raw pointer manipulation.\n            unsafe { ptr::addr_of_mut!((*ptr).data) }\n        }\n    }\n\n    /// Consumes the `Weak<T>` and turns it into a raw pointer.\n    ///\n    /// This converts the weak pointer into a raw pointer, while still preserving the ownership of\n    /// one weak reference (the weak count is not modified by this operation). It can be turned\n    /// back into the `Weak<T>` with [`from_raw`].\n    ///\n    /// The same restrictions of accessing the target of the pointer as with\n    /// [`as_ptr`] apply.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::{Arc, Weak};\n    ///\n    /// let strong = Arc::new(\"hello\".to_owned());\n    /// let weak = Arc::downgrade(&strong);\n    /// let raw = weak.into_raw();\n    ///\n    /// assert_eq!(1, Arc::weak_count(&strong));\n    /// assert_eq!(\"hello\", unsafe { &*raw });\n    ///\n    /// drop(unsafe { Weak::from_raw(raw) });\n    /// assert_eq!(0, Arc::weak_count(&strong));\n    /// ```\n    ///\n    /// [`from_raw`]: Weak::from_raw\n    /// [`as_ptr`]: Weak::as_ptr\n    #[stable(feature = \"weak_into_raw\", since = \"1.45.0\")]\n    pub fn into_raw(self) -> *const T {\n        let result = self.as_ptr();\n        mem::forget(self);\n        result\n    }\n\n    /// Converts a raw pointer previously created by [`into_raw`] back into `Weak<T>`.\n    ///\n    /// This can be used to safely get a strong reference (by calling [`upgrade`]\n    /// later) or to deallocate the weak count by dropping the `Weak<T>`.\n    ///\n    /// It takes ownership of one weak reference (with the exception of pointers created by [`new`],\n    /// as these don't own anything; the method still works on them).\n    ///\n    /// # Safety\n    ///\n    /// The pointer must have originated from the [`into_raw`] and must still own its potential\n    /// weak reference.\n    ///\n    /// It is allowed for the strong count to be 0 at the time of calling this. Nevertheless, this\n    /// takes ownership of one weak reference currently represented as a raw pointer (the weak\n    /// count is not modified by this operation) and therefore it must be paired with a previous\n    /// call to [`into_raw`].\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::{Arc, Weak};\n    ///\n    /// let strong = Arc::new(\"hello\".to_owned());\n    ///\n    /// let raw_1 = Arc::downgrade(&strong).into_raw();\n    /// let raw_2 = Arc::downgrade(&strong).into_raw();\n    ///\n    /// assert_eq!(2, Arc::weak_count(&strong));\n    ///\n    /// assert_eq!(\"hello\", &*unsafe { Weak::from_raw(raw_1) }.upgrade().unwrap());\n    /// assert_eq!(1, Arc::weak_count(&strong));\n    ///\n    /// drop(strong);\n    ///\n    /// // Decrement the last weak count.\n    /// assert!(unsafe { Weak::from_raw(raw_2) }.upgrade().is_none());\n    /// ```\n    ///\n    /// [`new`]: Weak::new\n    /// [`into_raw`]: Weak::into_raw\n    /// [`upgrade`]: Weak::upgrade\n    /// [`forget`]: std::mem::forget\n    #[stable(feature = \"weak_into_raw\", since = \"1.45.0\")]\n    pub unsafe fn from_raw(ptr: *const T) -> Self {\n        // See Weak::as_ptr for context on how the input pointer is derived.\n\n        let ptr = if is_dangling(ptr as *mut T) {\n            // This is a dangling Weak.\n            ptr as *mut ArcInner<T>\n        } else {\n            // Otherwise, we're guaranteed the pointer came from a nondangling Weak.\n            // SAFETY: data_offset is safe to call, as ptr references a real (potentially dropped) T.\n            let offset = unsafe { data_offset(ptr) };\n            // Thus, we reverse the offset to get the whole RcBox.\n            // SAFETY: the pointer originated from a Weak, so this offset is safe.\n            unsafe { (ptr as *mut ArcInner<T>).set_ptr_value((ptr as *mut u8).offset(-offset)) }\n        };\n\n        // SAFETY: we now have recovered the original Weak pointer, so can create the Weak.\n        Weak { ptr: unsafe { NonNull::new_unchecked(ptr) } }\n    }\n}\n\nimpl<T: ?Sized> Weak<T> {\n    /// Attempts to upgrade the `Weak` pointer to an [`Arc`], delaying\n    /// dropping of the inner value if successful.\n    ///\n    /// Returns [`None`] if the inner value has since been dropped.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// let five = Arc::new(5);\n    ///\n    /// let weak_five = Arc::downgrade(&five);\n    ///\n    /// let strong_five: Option<Arc<_>> = weak_five.upgrade();\n    /// assert!(strong_five.is_some());\n    ///\n    /// // Destroy all strong pointers.\n    /// drop(strong_five);\n    /// drop(five);\n    ///\n    /// assert!(weak_five.upgrade().is_none());\n    /// ```\n    #[stable(feature = \"arc_weak\", since = \"1.4.0\")]\n    pub fn upgrade(&self) -> Option<Arc<T>> {\n        // We use a CAS loop to increment the strong count instead of a\n        // fetch_add as this function should never take the reference count\n        // from zero to one.\n        let inner = self.inner()?;\n\n        // Relaxed load because any write of 0 that we can observe\n        // leaves the field in a permanently zero state (so a\n        // \"stale\" read of 0 is fine), and any other value is\n        // confirmed via the CAS below.\n        let mut n = inner.strong.load(Relaxed);\n\n        loop {\n            if n == 0 {\n                return None;\n            }\n\n            // See comments in `Arc::clone` for why we do this (for `mem::forget`).\n            if n > MAX_REFCOUNT {\n                abort();\n            }\n\n            // Relaxed is fine for the failure case because we don't have any expectations about the new state.\n            // Acquire is necessary for the success case to synchronise with `Arc::new_cyclic`, when the inner\n            // value can be initialized after `Weak` references have already been created. In that case, we\n            // expect to observe the fully initialized value.\n            match inner.strong.compare_exchange_weak(n, n + 1, Acquire, Relaxed) {\n                Ok(_) => return Some(Arc::from_inner(self.ptr)), // null checked above\n                Err(old) => n = old,\n            }\n        }\n    }\n\n    /// Gets the number of strong (`Arc`) pointers pointing to this allocation.\n    ///\n    /// If `self` was created using [`Weak::new`], this will return 0.\n    #[stable(feature = \"weak_counts\", since = \"1.41.0\")]\n    pub fn strong_count(&self) -> usize {\n        if let Some(inner) = self.inner() { inner.strong.load(SeqCst) } else { 0 }\n    }\n\n    /// Gets an approximation of the number of `Weak` pointers pointing to this\n    /// allocation.\n    ///\n    /// If `self` was created using [`Weak::new`], or if there are no remaining\n    /// strong pointers, this will return 0.\n    ///\n    /// # Accuracy\n    ///\n    /// Due to implementation details, the returned value can be off by 1 in\n    /// either direction when other threads are manipulating any `Arc`s or\n    /// `Weak`s pointing to the same allocation.\n    #[stable(feature = \"weak_counts\", since = \"1.41.0\")]\n    pub fn weak_count(&self) -> usize {\n        self.inner()\n            .map(|inner| {\n                let weak = inner.weak.load(SeqCst);\n                let strong = inner.strong.load(SeqCst);\n                if strong == 0 {\n                    0\n                } else {\n                    // Since we observed that there was at least one strong pointer\n                    // after reading the weak count, we know that the implicit weak\n                    // reference (present whenever any strong references are alive)\n                    // was still around when we observed the weak count, and can\n                    // therefore safely subtract it.\n                    weak - 1\n                }\n            })\n            .unwrap_or(0)\n    }\n\n    /// Returns `None` when the pointer is dangling and there is no allocated `ArcInner`,\n    /// (i.e., when this `Weak` was created by `Weak::new`).\n    #[inline]\n    fn inner(&self) -> Option<WeakInner<'_>> {\n        if is_dangling(self.ptr.as_ptr()) {\n            None\n        } else {\n            // We are careful to *not* create a reference covering the \"data\" field, as\n            // the field may be mutated concurrently (for example, if the last `Arc`\n            // is dropped, the data field will be dropped in-place).\n            Some(unsafe {\n                let ptr = self.ptr.as_ptr();\n                WeakInner { strong: &(*ptr).strong, weak: &(*ptr).weak }\n            })\n        }\n    }\n\n    /// Returns `true` if the two `Weak`s point to the same allocation (similar to\n    /// [`ptr::eq`]), or if both don't point to any allocation\n    /// (because they were created with `Weak::new()`).\n    ///\n    /// # Notes\n    ///\n    /// Since this compares pointers it means that `Weak::new()` will equal each\n    /// other, even though they don't point to any allocation.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// let first_rc = Arc::new(5);\n    /// let first = Arc::downgrade(&first_rc);\n    /// let second = Arc::downgrade(&first_rc);\n    ///\n    /// assert!(first.ptr_eq(&second));\n    ///\n    /// let third_rc = Arc::new(5);\n    /// let third = Arc::downgrade(&third_rc);\n    ///\n    /// assert!(!first.ptr_eq(&third));\n    /// ```\n    ///\n    /// Comparing `Weak::new`.\n    ///\n    /// ```\n    /// use std::sync::{Arc, Weak};\n    ///\n    /// let first = Weak::new();\n    /// let second = Weak::new();\n    /// assert!(first.ptr_eq(&second));\n    ///\n    /// let third_rc = Arc::new(());\n    /// let third = Arc::downgrade(&third_rc);\n    /// assert!(!first.ptr_eq(&third));\n    /// ```\n    ///\n    /// [`ptr::eq`]: core::ptr::eq\n    #[inline]\n    #[stable(feature = \"weak_ptr_eq\", since = \"1.39.0\")]\n    pub fn ptr_eq(&self, other: &Self) -> bool {\n        self.ptr.as_ptr() == other.ptr.as_ptr()\n    }\n}\n\n#[stable(feature = \"arc_weak\", since = \"1.4.0\")]\nimpl<T: ?Sized> Clone for Weak<T> {\n    /// Makes a clone of the `Weak` pointer that points to the same allocation.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::{Arc, Weak};\n    ///\n    /// let weak_five = Arc::downgrade(&Arc::new(5));\n    ///\n    /// let _ = Weak::clone(&weak_five);\n    /// ```\n    #[inline]\n    fn clone(&self) -> Weak<T> {\n        let inner = if let Some(inner) = self.inner() {\n            inner\n        } else {\n            return Weak { ptr: self.ptr };\n        };\n        // See comments in Arc::clone() for why this is relaxed.  This can use a\n        // fetch_add (ignoring the lock) because the weak count is only locked\n        // where are *no other* weak pointers in existence. (So we can't be\n        // running this code in that case).\n        let old_size = inner.weak.fetch_add(1, Relaxed);\n\n        // See comments in Arc::clone() for why we do this (for mem::forget).\n        if old_size > MAX_REFCOUNT {\n            abort();\n        }\n\n        Weak { ptr: self.ptr }\n    }\n}\n\n#[stable(feature = \"downgraded_weak\", since = \"1.10.0\")]\nimpl<T> Default for Weak<T> {\n    /// Constructs a new `Weak<T>`, without allocating memory.\n    /// Calling [`upgrade`] on the return value always\n    /// gives [`None`].\n    ///\n    /// [`upgrade`]: Weak::upgrade\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Weak;\n    ///\n    /// let empty: Weak<i64> = Default::default();\n    /// assert!(empty.upgrade().is_none());\n    /// ```\n    fn default() -> Weak<T> {\n        Weak::new()\n    }\n}\n\n#[stable(feature = \"arc_weak\", since = \"1.4.0\")]\nimpl<T: ?Sized> Drop for Weak<T> {\n    /// Drops the `Weak` pointer.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::{Arc, Weak};\n    ///\n    /// struct Foo;\n    ///\n    /// impl Drop for Foo {\n    ///     fn drop(&mut self) {\n    ///         println!(\"dropped!\");\n    ///     }\n    /// }\n    ///\n    /// let foo = Arc::new(Foo);\n    /// let weak_foo = Arc::downgrade(&foo);\n    /// let other_weak_foo = Weak::clone(&weak_foo);\n    ///\n    /// drop(weak_foo);   // Doesn't print anything\n    /// drop(foo);        // Prints \"dropped!\"\n    ///\n    /// assert!(other_weak_foo.upgrade().is_none());\n    /// ```\n    fn drop(&mut self) {\n        // If we find out that we were the last weak pointer, then its time to\n        // deallocate the data entirely. See the discussion in Arc::drop() about\n        // the memory orderings\n        //\n        // It's not necessary to check for the locked state here, because the\n        // weak count can only be locked if there was precisely one weak ref,\n        // meaning that drop could only subsequently run ON that remaining weak\n        // ref, which can only happen after the lock is released.\n        let inner = if let Some(inner) = self.inner() { inner } else { return };\n\n        if inner.weak.fetch_sub(1, Release) == 1 {\n            acquire!(inner.weak);\n            unsafe { Global.deallocate(self.ptr.cast(), Layout::for_value_raw(self.ptr.as_ptr())) }\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\ntrait ArcEqIdent<T: ?Sized + PartialEq> {\n    fn eq(&self, other: &Arc<T>) -> bool;\n    fn ne(&self, other: &Arc<T>) -> bool;\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + PartialEq> ArcEqIdent<T> for Arc<T> {\n    #[inline]\n    default fn eq(&self, other: &Arc<T>) -> bool {\n        **self == **other\n    }\n    #[inline]\n    default fn ne(&self, other: &Arc<T>) -> bool {\n        **self != **other\n    }\n}\n\n/// We're doing this specialization here, and not as a more general optimization on `&T`, because it\n/// would otherwise add a cost to all equality checks on refs. We assume that `Arc`s are used to\n/// store large values, that are slow to clone, but also heavy to check for equality, causing this\n/// cost to pay off more easily. It's also more likely to have two `Arc` clones, that point to\n/// the same value, than two `&T`s.\n///\n/// We can only do this when `T: Eq` as a `PartialEq` might be deliberately irreflexive.\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + crate::rc::MarkerEq> ArcEqIdent<T> for Arc<T> {\n    #[inline]\n    fn eq(&self, other: &Arc<T>) -> bool {\n        Arc::ptr_eq(self, other) || **self == **other\n    }\n\n    #[inline]\n    fn ne(&self, other: &Arc<T>) -> bool {\n        !Arc::ptr_eq(self, other) && **self != **other\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + PartialEq> PartialEq for Arc<T> {\n    /// Equality for two `Arc`s.\n    ///\n    /// Two `Arc`s are equal if their inner values are equal, even if they are\n    /// stored in different allocation.\n    ///\n    /// If `T` also implements `Eq` (implying reflexivity of equality),\n    /// two `Arc`s that point to the same allocation are always equal.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// let five = Arc::new(5);\n    ///\n    /// assert!(five == Arc::new(5));\n    /// ```\n    #[inline]\n    fn eq(&self, other: &Arc<T>) -> bool {\n        ArcEqIdent::eq(self, other)\n    }\n\n    /// Inequality for two `Arc`s.\n    ///\n    /// Two `Arc`s are unequal if their inner values are unequal.\n    ///\n    /// If `T` also implements `Eq` (implying reflexivity of equality),\n    /// two `Arc`s that point to the same value are never unequal.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// let five = Arc::new(5);\n    ///\n    /// assert!(five != Arc::new(6));\n    /// ```\n    #[inline]\n    fn ne(&self, other: &Arc<T>) -> bool {\n        ArcEqIdent::ne(self, other)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + PartialOrd> PartialOrd for Arc<T> {\n    /// Partial comparison for two `Arc`s.\n    ///\n    /// The two are compared by calling `partial_cmp()` on their inner values.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    /// use std::cmp::Ordering;\n    ///\n    /// let five = Arc::new(5);\n    ///\n    /// assert_eq!(Some(Ordering::Less), five.partial_cmp(&Arc::new(6)));\n    /// ```\n    fn partial_cmp(&self, other: &Arc<T>) -> Option<Ordering> {\n        (**self).partial_cmp(&**other)\n    }\n\n    /// Less-than comparison for two `Arc`s.\n    ///\n    /// The two are compared by calling `<` on their inner values.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// let five = Arc::new(5);\n    ///\n    /// assert!(five < Arc::new(6));\n    /// ```\n    fn lt(&self, other: &Arc<T>) -> bool {\n        *(*self) < *(*other)\n    }\n\n    /// 'Less than or equal to' comparison for two `Arc`s.\n    ///\n    /// The two are compared by calling `<=` on their inner values.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// let five = Arc::new(5);\n    ///\n    /// assert!(five <= Arc::new(5));\n    /// ```\n    fn le(&self, other: &Arc<T>) -> bool {\n        *(*self) <= *(*other)\n    }\n\n    /// Greater-than comparison for two `Arc`s.\n    ///\n    /// The two are compared by calling `>` on their inner values.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// let five = Arc::new(5);\n    ///\n    /// assert!(five > Arc::new(4));\n    /// ```\n    fn gt(&self, other: &Arc<T>) -> bool {\n        *(*self) > *(*other)\n    }\n\n    /// 'Greater than or equal to' comparison for two `Arc`s.\n    ///\n    /// The two are compared by calling `>=` on their inner values.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// let five = Arc::new(5);\n    ///\n    /// assert!(five >= Arc::new(5));\n    /// ```\n    fn ge(&self, other: &Arc<T>) -> bool {\n        *(*self) >= *(*other)\n    }\n}\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + Ord> Ord for Arc<T> {\n    /// Comparison for two `Arc`s.\n    ///\n    /// The two are compared by calling `cmp()` on their inner values.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    /// use std::cmp::Ordering;\n    ///\n    /// let five = Arc::new(5);\n    ///\n    /// assert_eq!(Ordering::Less, five.cmp(&Arc::new(6)));\n    /// ```\n    fn cmp(&self, other: &Arc<T>) -> Ordering {\n        (**self).cmp(&**other)\n    }\n}\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + Eq> Eq for Arc<T> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + fmt::Display> fmt::Display for Arc<T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        fmt::Display::fmt(&**self, f)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + fmt::Debug> fmt::Debug for Arc<T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        fmt::Debug::fmt(&**self, f)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized> fmt::Pointer for Arc<T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        fmt::Pointer::fmt(&(&**self as *const T), f)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Default> Default for Arc<T> {\n    /// Creates a new `Arc<T>`, with the `Default` value for `T`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::sync::Arc;\n    ///\n    /// let x: Arc<i32> = Default::default();\n    /// assert_eq!(*x, 0);\n    /// ```\n    fn default() -> Arc<T> {\n        Arc::new(Default::default())\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + Hash> Hash for Arc<T> {\n    fn hash<H: Hasher>(&self, state: &mut H) {\n        (**self).hash(state)\n    }\n}\n\n#[stable(feature = \"from_for_ptrs\", since = \"1.6.0\")]\nimpl<T> From<T> for Arc<T> {\n    fn from(t: T) -> Self {\n        Arc::new(t)\n    }\n}\n\n#[stable(feature = \"shared_from_slice\", since = \"1.21.0\")]\nimpl<T: Clone> From<&[T]> for Arc<[T]> {\n    /// Allocate a reference-counted slice and fill it by cloning `v`'s items.\n    ///\n    /// # Example\n    ///\n    /// ```\n    /// # use std::sync::Arc;\n    /// let original: &[i32] = &[1, 2, 3];\n    /// let shared: Arc<[i32]> = Arc::from(original);\n    /// assert_eq!(&[1, 2, 3], &shared[..]);\n    /// ```\n    #[inline]\n    fn from(v: &[T]) -> Arc<[T]> {\n        <Self as ArcFromSlice<T>>::from_slice(v)\n    }\n}\n\n#[stable(feature = \"shared_from_slice\", since = \"1.21.0\")]\nimpl From<&str> for Arc<str> {\n    /// Allocate a reference-counted `str` and copy `v` into it.\n    ///\n    /// # Example\n    ///\n    /// ```\n    /// # use std::sync::Arc;\n    /// let shared: Arc<str> = Arc::from(\"eggplant\");\n    /// assert_eq!(\"eggplant\", &shared[..]);\n    /// ```\n    #[inline]\n    fn from(v: &str) -> Arc<str> {\n        let arc = Arc::<[u8]>::from(v.as_bytes());\n        unsafe { Arc::from_raw(Arc::into_raw(arc) as *const str) }\n    }\n}\n\n#[stable(feature = \"shared_from_slice\", since = \"1.21.0\")]\nimpl From<String> for Arc<str> {\n    /// Allocate a reference-counted `str` and copy `v` into it.\n    ///\n    /// # Example\n    ///\n    /// ```\n    /// # use std::sync::Arc;\n    /// let unique: String = \"eggplant\".to_owned();\n    /// let shared: Arc<str> = Arc::from(unique);\n    /// assert_eq!(\"eggplant\", &shared[..]);\n    /// ```\n    #[inline]\n    fn from(v: String) -> Arc<str> {\n        Arc::from(&v[..])\n    }\n}\n\n#[stable(feature = \"shared_from_slice\", since = \"1.21.0\")]\nimpl<T: ?Sized> From<Box<T>> for Arc<T> {\n    /// Move a boxed object to a new, reference-counted allocation.\n    ///\n    /// # Example\n    ///\n    /// ```\n    /// # use std::sync::Arc;\n    /// let unique: Box<str> = Box::from(\"eggplant\");\n    /// let shared: Arc<str> = Arc::from(unique);\n    /// assert_eq!(\"eggplant\", &shared[..]);\n    /// ```\n    #[inline]\n    fn from(v: Box<T>) -> Arc<T> {\n        Arc::from_box(v)\n    }\n}\n\n#[stable(feature = \"shared_from_slice\", since = \"1.21.0\")]\nimpl<T> From<Vec<T>> for Arc<[T]> {\n    /// Allocate a reference-counted slice and move `v`'s items into it.\n    ///\n    /// # Example\n    ///\n    /// ```\n    /// # use std::sync::Arc;\n    /// let unique: Vec<i32> = vec![1, 2, 3];\n    /// let shared: Arc<[i32]> = Arc::from(unique);\n    /// assert_eq!(&[1, 2, 3], &shared[..]);\n    /// ```\n    #[inline]\n    fn from(mut v: Vec<T>) -> Arc<[T]> {\n        unsafe {\n            let arc = Arc::copy_from_slice(&v);\n\n            // Allow the Vec to free its memory, but not destroy its contents\n            v.set_len(0);\n\n            arc\n        }\n    }\n}\n\n#[stable(feature = \"shared_from_cow\", since = \"1.45.0\")]\nimpl<'a, B> From<Cow<'a, B>> for Arc<B>\nwhere\n    B: ToOwned + ?Sized,\n    Arc<B>: From<&'a B> + From<B::Owned>,\n{\n    #[inline]\n    fn from(cow: Cow<'a, B>) -> Arc<B> {\n        match cow {\n            Cow::Borrowed(s) => Arc::from(s),\n            Cow::Owned(s) => Arc::from(s),\n        }\n    }\n}\n\n#[stable(feature = \"boxed_slice_try_from\", since = \"1.43.0\")]\nimpl<T, const N: usize> TryFrom<Arc<[T]>> for Arc<[T; N]> {\n    type Error = Arc<[T]>;\n\n    fn try_from(boxed_slice: Arc<[T]>) -> Result<Self, Self::Error> {\n        if boxed_slice.len() == N {\n            Ok(unsafe { Arc::from_raw(Arc::into_raw(boxed_slice) as *mut [T; N]) })\n        } else {\n            Err(boxed_slice)\n        }\n    }\n}\n\n#[stable(feature = \"shared_from_iter\", since = \"1.37.0\")]\nimpl<T> iter::FromIterator<T> for Arc<[T]> {\n    /// Takes each element in the `Iterator` and collects it into an `Arc<[T]>`.\n    ///\n    /// # Performance characteristics\n    ///\n    /// ## The general case\n    ///\n    /// In the general case, collecting into `Arc<[T]>` is done by first\n    /// collecting into a `Vec<T>`. That is, when writing the following:\n    ///\n    /// ```rust\n    /// # use std::sync::Arc;\n    /// let evens: Arc<[u8]> = (0..10).filter(|&x| x % 2 == 0).collect();\n    /// # assert_eq!(&*evens, &[0, 2, 4, 6, 8]);\n    /// ```\n    ///\n    /// this behaves as if we wrote:\n    ///\n    /// ```rust\n    /// # use std::sync::Arc;\n    /// let evens: Arc<[u8]> = (0..10).filter(|&x| x % 2 == 0)\n    ///     .collect::<Vec<_>>() // The first set of allocations happens here.\n    ///     .into(); // A second allocation for `Arc<[T]>` happens here.\n    /// # assert_eq!(&*evens, &[0, 2, 4, 6, 8]);\n    /// ```\n    ///\n    /// This will allocate as many times as needed for constructing the `Vec<T>`\n    /// and then it will allocate once for turning the `Vec<T>` into the `Arc<[T]>`.\n    ///\n    /// ## Iterators of known length\n    ///\n    /// When your `Iterator` implements `TrustedLen` and is of an exact size,\n    /// a single allocation will be made for the `Arc<[T]>`. For example:\n    ///\n    /// ```rust\n    /// # use std::sync::Arc;\n    /// let evens: Arc<[u8]> = (0..10).collect(); // Just a single allocation happens here.\n    /// # assert_eq!(&*evens, &*(0..10).collect::<Vec<_>>());\n    /// ```\n    fn from_iter<I: iter::IntoIterator<Item = T>>(iter: I) -> Self {\n        ToArcSlice::to_arc_slice(iter.into_iter())\n    }\n}\n\n/// Specialization trait used for collecting into `Arc<[T]>`.\ntrait ToArcSlice<T>: Iterator<Item = T> + Sized {\n    fn to_arc_slice(self) -> Arc<[T]>;\n}\n\nimpl<T, I: Iterator<Item = T>> ToArcSlice<T> for I {\n    default fn to_arc_slice(self) -> Arc<[T]> {\n        self.collect::<Vec<T>>().into()\n    }\n}\n\nimpl<T, I: iter::TrustedLen<Item = T>> ToArcSlice<T> for I {\n    fn to_arc_slice(self) -> Arc<[T]> {\n        // This is the case for a `TrustedLen` iterator.\n        let (low, high) = self.size_hint();\n        if let Some(high) = high {\n            debug_assert_eq!(\n                low,\n                high,\n                \"TrustedLen iterator's size hint is not exact: {:?}\",\n                (low, high)\n            );\n\n            unsafe {\n                // SAFETY: We need to ensure that the iterator has an exact length and we have.\n                Arc::from_iter_exact(self, low)\n            }\n        } else {\n            // TrustedLen contract guarantees that `upper_bound == `None` implies an iterator\n            // length exceeding `usize::MAX`.\n            // The default implementation would collect into a vec which would panic.\n            // Thus we panic here immediately without invoking `Vec` code.\n            panic!(\"capacity overflow\");\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized> borrow::Borrow<T> for Arc<T> {\n    fn borrow(&self) -> &T {\n        &**self\n    }\n}\n\n#[stable(since = \"1.5.0\", feature = \"smart_ptr_as_ref\")]\nimpl<T: ?Sized> AsRef<T> for Arc<T> {\n    fn as_ref(&self) -> &T {\n        &**self\n    }\n}\n\n#[stable(feature = \"pin\", since = \"1.33.0\")]\nimpl<T: ?Sized> Unpin for Arc<T> {}\n\n/// Get the offset within an `ArcInner` for the payload behind a pointer.\n///\n/// # Safety\n///\n/// The pointer must point to (and have valid metadata for) a previously\n/// valid instance of T, but the T is allowed to be dropped.\nunsafe fn data_offset<T: ?Sized>(ptr: *const T) -> isize {\n    // Align the unsized value to the end of the ArcInner.\n    // Because RcBox is repr(C), it will always be the last field in memory.\n    // SAFETY: since the only unsized types possible are slices, trait objects,\n    // and extern types, the input safety requirement is currently enough to\n    // satisfy the requirements of align_of_val_raw; this is an implementation\n    // detail of the language that may not be relied upon outside of std.\n    unsafe { data_offset_align(align_of_val_raw(ptr)) }\n}\n\n#[inline]\nfn data_offset_align(align: usize) -> isize {\n    let layout = Layout::new::<ArcInner<()>>();\n    (layout.size() + layout.padding_needed_for(align)) as isize\n}\n//! Utilities for formatting and printing `String`s.\n//!\n//! This module contains the runtime support for the [`format!`] syntax extension.\n//! This macro is implemented in the compiler to emit calls to this module in\n//! order to format arguments at runtime into strings.\n//!\n//! # Usage\n//!\n//! The [`format!`] macro is intended to be familiar to those coming from C's\n//! `printf`/`fprintf` functions or Python's `str.format` function.\n//!\n//! Some examples of the [`format!`] extension are:\n//!\n//! ```\n//! format!(\"Hello\");                 // => \"Hello\"\n//! format!(\"Hello, {}!\", \"world\");   // => \"Hello, world!\"\n//! format!(\"The number is {}\", 1);   // => \"The number is 1\"\n//! format!(\"{:?}\", (3, 4));          // => \"(3, 4)\"\n//! format!(\"{value}\", value=4);      // => \"4\"\n//! format!(\"{} {}\", 1, 2);           // => \"1 2\"\n//! format!(\"{:04}\", 42);             // => \"0042\" with leading zeros\n//! format!(\"{:#?}\", (100, 200));     // => \"(\n//!                                   //       100,\n//!                                   //       200,\n//!                                   //     )\"\n//! ```\n//!\n//! From these, you can see that the first argument is a format string. It is\n//! required by the compiler for this to be a string literal; it cannot be a\n//! variable passed in (in order to perform validity checking). The compiler\n//! will then parse the format string and determine if the list of arguments\n//! provided is suitable to pass to this format string.\n//!\n//! To convert a single value to a string, use the [`to_string`] method. This\n//! will use the [`Display`] formatting trait.\n//!\n//! ## Positional parameters\n//!\n//! Each formatting argument is allowed to specify which value argument it's\n//! referencing, and if omitted it is assumed to be \"the next argument\". For\n//! example, the format string `{} {} {}` would take three parameters, and they\n//! would be formatted in the same order as they're given. The format string\n//! `{2} {1} {0}`, however, would format arguments in reverse order.\n//!\n//! Things can get a little tricky once you start intermingling the two types of\n//! positional specifiers. The \"next argument\" specifier can be thought of as an\n//! iterator over the argument. Each time a \"next argument\" specifier is seen,\n//! the iterator advances. This leads to behavior like this:\n//!\n//! ```\n//! format!(\"{1} {} {0} {}\", 1, 2); // => \"2 1 1 2\"\n//! ```\n//!\n//! The internal iterator over the argument has not been advanced by the time\n//! the first `{}` is seen, so it prints the first argument. Then upon reaching\n//! the second `{}`, the iterator has advanced forward to the second argument.\n//! Essentially, parameters that explicitly name their argument do not affect\n//! parameters that do not name an argument in terms of positional specifiers.\n//!\n//! A format string is required to use all of its arguments, otherwise it is a\n//! compile-time error. You may refer to the same argument more than once in the\n//! format string.\n//!\n//! ## Named parameters\n//!\n//! Rust itself does not have a Python-like equivalent of named parameters to a\n//! function, but the [`format!`] macro is a syntax extension that allows it to\n//! leverage named parameters. Named parameters are listed at the end of the\n//! argument list and have the syntax:\n//!\n//! ```text\n//! identifier '=' expression\n//! ```\n//!\n//! For example, the following [`format!`] expressions all use named argument:\n//!\n//! ```\n//! format!(\"{argument}\", argument = \"test\");   // => \"test\"\n//! format!(\"{name} {}\", 1, name = 2);          // => \"2 1\"\n//! format!(\"{a} {c} {b}\", a=\"a\", b='b', c=3);  // => \"a 3 b\"\n//! ```\n//!\n//! It is not valid to put positional parameters (those without names) after\n//! arguments that have names. Like with positional parameters, it is not\n//! valid to provide named parameters that are unused by the format string.\n//!\n//! # Formatting Parameters\n//!\n//! Each argument being formatted can be transformed by a number of formatting\n//! parameters (corresponding to `format_spec` in [the syntax](#syntax)). These\n//! parameters affect the string representation of what's being formatted.\n//!\n//! ## Width\n//!\n//! ```\n//! // All of these print \"Hello x    !\"\n//! println!(\"Hello {:5}!\", \"x\");\n//! println!(\"Hello {:1$}!\", \"x\", 5);\n//! println!(\"Hello {1:0$}!\", 5, \"x\");\n//! println!(\"Hello {:width$}!\", \"x\", width = 5);\n//! ```\n//!\n//! This is a parameter for the \"minimum width\" that the format should take up.\n//! If the value's string does not fill up this many characters, then the\n//! padding specified by fill/alignment will be used to take up the required\n//! space (see below).\n//!\n//! The value for the width can also be provided as a [`usize`] in the list of\n//! parameters by adding a postfix `$`, indicating that the second argument is\n//! a [`usize`] specifying the width.\n//!\n//! Referring to an argument with the dollar syntax does not affect the \"next\n//! argument\" counter, so it's usually a good idea to refer to arguments by\n//! position, or use named arguments.\n//!\n//! ## Fill/Alignment\n//!\n//! ```\n//! assert_eq!(format!(\"Hello {:<5}!\", \"x\"),  \"Hello x    !\");\n//! assert_eq!(format!(\"Hello {:-<5}!\", \"x\"), \"Hello x----!\");\n//! assert_eq!(format!(\"Hello {:^5}!\", \"x\"),  \"Hello   x  !\");\n//! assert_eq!(format!(\"Hello {:>5}!\", \"x\"),  \"Hello     x!\");\n//! ```\n//!\n//! The optional fill character and alignment is provided normally in conjunction with the\n//! [`width`](#width) parameter. It must be defined before `width`, right after the `:`.\n//! This indicates that if the value being formatted is smaller than\n//! `width` some extra characters will be printed around it.\n//! Filling comes in the following variants for different alignments:\n//!\n//! * `[fill]<` - the argument is left-aligned in `width` columns\n//! * `[fill]^` - the argument is center-aligned in `width` columns\n//! * `[fill]>` - the argument is right-aligned in `width` columns\n//!\n//! The default [fill/alignment](#fillalignment) for non-numerics is a space and\n//! left-aligned. The\n//! default for numeric formatters is also a space character but with right-alignment. If\n//! the `0` flag (see below) is specified for numerics, then the implicit fill character is\n//! `0`.\n//!\n//! Note that alignment may not be implemented by some types. In particular, it\n//! is not generally implemented for the `Debug` trait.  A good way to ensure\n//! padding is applied is to format your input, then pad this resulting string\n//! to obtain your output:\n//!\n//! ```\n//! println!(\"Hello {:^15}!\", format!(\"{:?}\", Some(\"hi\"))); // => \"Hello   Some(\"hi\")   !\"\n//! ```\n//!\n//! ## Sign/`#`/`0`\n//!\n//! ```\n//! assert_eq!(format!(\"Hello {:+}!\", 5), \"Hello +5!\");\n//! assert_eq!(format!(\"{:#x}!\", 27), \"0x1b!\");\n//! assert_eq!(format!(\"Hello {:05}!\", 5),  \"Hello 00005!\");\n//! assert_eq!(format!(\"Hello {:05}!\", -5), \"Hello -0005!\");\n//! assert_eq!(format!(\"{:#010x}!\", 27), \"0x0000001b!\");\n//! ```\n//!\n//! These are all flags altering the behavior of the formatter.\n//!\n//! * `+` - This is intended for numeric types and indicates that the sign\n//!         should always be printed. Positive signs are never printed by\n//!         default, and the negative sign is only printed by default for signed values.\n//!         This flag indicates that the correct sign (`+` or `-`) should always be printed.\n//! * `-` - Currently not used\n//! * `#` - This flag indicates that the \"alternate\" form of printing should\n//!         be used. The alternate forms are:\n//!     * `#?` - pretty-print the [`Debug`] formatting (adds linebreaks and indentation)\n//!     * `#x` - precedes the argument with a `0x`\n//!     * `#X` - precedes the argument with a `0x`\n//!     * `#b` - precedes the argument with a `0b`\n//!     * `#o` - precedes the argument with a `0o`\n//! * `0` - This is used to indicate for integer formats that the padding to `width` should\n//!         both be done with a `0` character as well as be sign-aware. A format\n//!         like `{:08}` would yield `00000001` for the integer `1`, while the\n//!         same format would yield `-0000001` for the integer `-1`. Notice that\n//!         the negative version has one fewer zero than the positive version.\n//!         Note that padding zeros are always placed after the sign (if any)\n//!         and before the digits. When used together with the `#` flag, a similar\n//!         rule applies: padding zeros are inserted after the prefix but before\n//!         the digits. The prefix is included in the total width.\n//!\n//! ## Precision\n//!\n//! For non-numeric types, this can be considered a \"maximum width\". If the resulting string is\n//! longer than this width, then it is truncated down to this many characters and that truncated\n//! value is emitted with proper `fill`, `alignment` and `width` if those parameters are set.\n//!\n//! For integral types, this is ignored.\n//!\n//! For floating-point types, this indicates how many digits after the decimal point should be\n//! printed.\n//!\n//! There are three possible ways to specify the desired `precision`:\n//!\n//! 1. An integer `.N`:\n//!\n//!    the integer `N` itself is the precision.\n//!\n//! 2. An integer or name followed by dollar sign `.N$`:\n//!\n//!    use format *argument* `N` (which must be a `usize`) as the precision.\n//!\n//! 3. An asterisk `.*`:\n//!\n//!    `.*` means that this `{...}` is associated with *two* format inputs rather than one: the\n//!    first input holds the `usize` precision, and the second holds the value to print. Note that\n//!    in this case, if one uses the format string `{<arg>:<spec>.*}`, then the `<arg>` part refers\n//!    to the *value* to print, and the `precision` must come in the input preceding `<arg>`.\n//!\n//! For example, the following calls all print the same thing `Hello x is 0.01000`:\n//!\n//! ```\n//! // Hello {arg 0 (\"x\")} is {arg 1 (0.01) with precision specified inline (5)}\n//! println!(\"Hello {0} is {1:.5}\", \"x\", 0.01);\n//!\n//! // Hello {arg 1 (\"x\")} is {arg 2 (0.01) with precision specified in arg 0 (5)}\n//! println!(\"Hello {1} is {2:.0$}\", 5, \"x\", 0.01);\n//!\n//! // Hello {arg 0 (\"x\")} is {arg 2 (0.01) with precision specified in arg 1 (5)}\n//! println!(\"Hello {0} is {2:.1$}\", \"x\", 5, 0.01);\n//!\n//! // Hello {next arg (\"x\")} is {second of next two args (0.01) with precision\n//! //                          specified in first of next two args (5)}\n//! println!(\"Hello {} is {:.*}\",    \"x\", 5, 0.01);\n//!\n//! // Hello {next arg (\"x\")} is {arg 2 (0.01) with precision\n//! //                          specified in its predecessor (5)}\n//! println!(\"Hello {} is {2:.*}\",   \"x\", 5, 0.01);\n//!\n//! // Hello {next arg (\"x\")} is {arg \"number\" (0.01) with precision specified\n//! //                          in arg \"prec\" (5)}\n//! println!(\"Hello {} is {number:.prec$}\", \"x\", prec = 5, number = 0.01);\n//! ```\n//!\n//! While these:\n//!\n//! ```\n//! println!(\"{}, `{name:.*}` has 3 fractional digits\", \"Hello\", 3, name=1234.56);\n//! println!(\"{}, `{name:.*}` has 3 characters\", \"Hello\", 3, name=\"1234.56\");\n//! println!(\"{}, `{name:>8.*}` has 3 right-aligned characters\", \"Hello\", 3, name=\"1234.56\");\n//! ```\n//!\n//! print three significantly different things:\n//!\n//! ```text\n//! Hello, `1234.560` has 3 fractional digits\n//! Hello, `123` has 3 characters\n//! Hello, `     123` has 3 right-aligned characters\n//! ```\n//!\n//! ## Localization\n//!\n//! In some programming languages, the behavior of string formatting functions\n//! depends on the operating system's locale setting. The format functions\n//! provided by Rust's standard library do not have any concept of locale and\n//! will produce the same results on all systems regardless of user\n//! configuration.\n//!\n//! For example, the following code will always print `1.5` even if the system\n//! locale uses a decimal separator other than a dot.\n//!\n//! ```\n//! println!(\"The value is {}\", 1.5);\n//! ```\n//!\n//! # Escaping\n//!\n//! The literal characters `{` and `}` may be included in a string by preceding\n//! them with the same character. For example, the `{` character is escaped with\n//! `{{` and the `}` character is escaped with `}}`.\n//!\n//! ```\n//! assert_eq!(format!(\"Hello {{}}\"), \"Hello {}\");\n//! assert_eq!(format!(\"{{ Hello\"), \"{ Hello\");\n//! ```\n//!\n//! # Syntax\n//!\n//! To summarize, here you can find the full grammar of format strings.\n//! The syntax for the formatting language used is drawn from other languages,\n//! so it should not be too alien. Arguments are formatted with Python-like\n//! syntax, meaning that arguments are surrounded by `{}` instead of the C-like\n//! `%`. The actual grammar for the formatting syntax is:\n//!\n//! ```text\n//! format_string := text [ maybe_format text ] *\n//! maybe_format := '{' '{' | '}' '}' | format\n//! format := '{' [ argument ] [ ':' format_spec ] '}'\n//! argument := integer | identifier\n//!\n//! format_spec := [[fill]align][sign]['#']['0'][width]['.' precision]type\n//! fill := character\n//! align := '<' | '^' | '>'\n//! sign := '+' | '-'\n//! width := count\n//! precision := count | '*'\n//! type := '' | '?' | 'x?' | 'X?' | identifier\n//! count := parameter | integer\n//! parameter := argument '$'\n//! ```\n//! In the above grammar, `text` may not contain any `'{'` or `'}'` characters.\n//!\n//! # Formatting traits\n//!\n//! When requesting that an argument be formatted with a particular type, you\n//! are actually requesting that an argument ascribes to a particular trait.\n//! This allows multiple actual types to be formatted via `{:x}` (like [`i8`] as\n//! well as [`isize`]). The current mapping of types to traits is:\n//!\n//! * *nothing* ⇒ [`Display`]\n//! * `?` ⇒ [`Debug`]\n//! * `x?` ⇒ [`Debug`] with lower-case hexadecimal integers\n//! * `X?` ⇒ [`Debug`] with upper-case hexadecimal integers\n//! * `o` ⇒ [`Octal`]\n//! * `x` ⇒ [`LowerHex`]\n//! * `X` ⇒ [`UpperHex`]\n//! * `p` ⇒ [`Pointer`]\n//! * `b` ⇒ [`Binary`]\n//! * `e` ⇒ [`LowerExp`]\n//! * `E` ⇒ [`UpperExp`]\n//!\n//! What this means is that any type of argument which implements the\n//! [`fmt::Binary`][`Binary`] trait can then be formatted with `{:b}`. Implementations\n//! are provided for these traits for a number of primitive types by the\n//! standard library as well. If no format is specified (as in `{}` or `{:6}`),\n//! then the format trait used is the [`Display`] trait.\n//!\n//! When implementing a format trait for your own type, you will have to\n//! implement a method of the signature:\n//!\n//! ```\n//! # #![allow(dead_code)]\n//! # use std::fmt;\n//! # struct Foo; // our custom type\n//! # impl fmt::Display for Foo {\n//! fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {\n//! # write!(f, \"testing, testing\")\n//! # } }\n//! ```\n//!\n//! Your type will be passed as `self` by-reference, and then the function\n//! should emit output into the `f.buf` stream. It is up to each format trait\n//! implementation to correctly adhere to the requested formatting parameters.\n//! The values of these parameters will be listed in the fields of the\n//! [`Formatter`] struct. In order to help with this, the [`Formatter`] struct also\n//! provides some helper methods.\n//!\n//! Additionally, the return value of this function is [`fmt::Result`] which is a\n//! type alias of [`Result`]`<(), `[`std::fmt::Error`]`>`. Formatting implementations\n//! should ensure that they propagate errors from the [`Formatter`] (e.g., when\n//! calling [`write!`]). However, they should never return errors spuriously. That\n//! is, a formatting implementation must and may only return an error if the\n//! passed-in [`Formatter`] returns an error. This is because, contrary to what\n//! the function signature might suggest, string formatting is an infallible\n//! operation. This function only returns a result because writing to the\n//! underlying stream might fail and it must provide a way to propagate the fact\n//! that an error has occurred back up the stack.\n//!\n//! An example of implementing the formatting traits would look\n//! like:\n//!\n//! ```\n//! use std::fmt;\n//!\n//! #[derive(Debug)]\n//! struct Vector2D {\n//!     x: isize,\n//!     y: isize,\n//! }\n//!\n//! impl fmt::Display for Vector2D {\n//!     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {\n//!         // The `f` value implements the `Write` trait, which is what the\n//!         // write! macro is expecting. Note that this formatting ignores the\n//!         // various flags provided to format strings.\n//!         write!(f, \"({}, {})\", self.x, self.y)\n//!     }\n//! }\n//!\n//! // Different traits allow different forms of output of a type. The meaning\n//! // of this format is to print the magnitude of a vector.\n//! impl fmt::Binary for Vector2D {\n//!     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {\n//!         let magnitude = (self.x * self.x + self.y * self.y) as f64;\n//!         let magnitude = magnitude.sqrt();\n//!\n//!         // Respect the formatting flags by using the helper method\n//!         // `pad_integral` on the Formatter object. See the method\n//!         // documentation for details, and the function `pad` can be used\n//!         // to pad strings.\n//!         let decimals = f.precision().unwrap_or(3);\n//!         let string = format!(\"{:.*}\", decimals, magnitude);\n//!         f.pad_integral(true, \"\", &string)\n//!     }\n//! }\n//!\n//! fn main() {\n//!     let myvector = Vector2D { x: 3, y: 4 };\n//!\n//!     println!(\"{}\", myvector);       // => \"(3, 4)\"\n//!     println!(\"{:?}\", myvector);     // => \"Vector2D {x: 3, y:4}\"\n//!     println!(\"{:10.3b}\", myvector); // => \"     5.000\"\n//! }\n//! ```\n//!\n//! ### `fmt::Display` vs `fmt::Debug`\n//!\n//! These two formatting traits have distinct purposes:\n//!\n//! - [`fmt::Display`][`Display`] implementations assert that the type can be faithfully\n//!   represented as a UTF-8 string at all times. It is **not** expected that\n//!   all types implement the [`Display`] trait.\n//! - [`fmt::Debug`][`Debug`] implementations should be implemented for **all** public types.\n//!   Output will typically represent the internal state as faithfully as possible.\n//!   The purpose of the [`Debug`] trait is to facilitate debugging Rust code. In\n//!   most cases, using `#[derive(Debug)]` is sufficient and recommended.\n//!\n//! Some examples of the output from both traits:\n//!\n//! ```\n//! assert_eq!(format!(\"{} {:?}\", 3, 4), \"3 4\");\n//! assert_eq!(format!(\"{} {:?}\", 'a', 'b'), \"a 'b'\");\n//! assert_eq!(format!(\"{} {:?}\", \"foo\\n\", \"bar\\n\"), \"foo\\n \\\"bar\\\\n\\\"\");\n//! ```\n//!\n//! # Related macros\n//!\n//! There are a number of related macros in the [`format!`] family. The ones that\n//! are currently implemented are:\n//!\n//! ```ignore (only-for-syntax-highlight)\n//! format!      // described above\n//! write!       // first argument is a &mut io::Write, the destination\n//! writeln!     // same as write but appends a newline\n//! print!       // the format string is printed to the standard output\n//! println!     // same as print but appends a newline\n//! eprint!      // the format string is printed to the standard error\n//! eprintln!    // same as eprint but appends a newline\n//! format_args! // described below.\n//! ```\n//!\n//! ### `write!`\n//!\n//! This and [`writeln!`] are two macros which are used to emit the format string\n//! to a specified stream. This is used to prevent intermediate allocations of\n//! format strings and instead directly write the output. Under the hood, this\n//! function is actually invoking the [`write_fmt`] function defined on the\n//! [`std::io::Write`] trait. Example usage is:\n//!\n//! ```\n//! # #![allow(unused_must_use)]\n//! use std::io::Write;\n//! let mut w = Vec::new();\n//! write!(&mut w, \"Hello {}!\", \"world\");\n//! ```\n//!\n//! ### `print!`\n//!\n//! This and [`println!`] emit their output to stdout. Similarly to the [`write!`]\n//! macro, the goal of these macros is to avoid intermediate allocations when\n//! printing output. Example usage is:\n//!\n//! ```\n//! print!(\"Hello {}!\", \"world\");\n//! println!(\"I have a newline {}\", \"character at the end\");\n//! ```\n//! ### `eprint!`\n//!\n//! The [`eprint!`] and [`eprintln!`] macros are identical to\n//! [`print!`] and [`println!`], respectively, except they emit their\n//! output to stderr.\n//!\n//! ### `format_args!`\n//!\n//! This is a curious macro used to safely pass around\n//! an opaque object describing the format string. This object\n//! does not require any heap allocations to create, and it only\n//! references information on the stack. Under the hood, all of\n//! the related macros are implemented in terms of this. First\n//! off, some example usage is:\n//!\n//! ```\n//! # #![allow(unused_must_use)]\n//! use std::fmt;\n//! use std::io::{self, Write};\n//!\n//! let mut some_writer = io::stdout();\n//! write!(&mut some_writer, \"{}\", format_args!(\"print with a {}\", \"macro\"));\n//!\n//! fn my_fmt_fn(args: fmt::Arguments) {\n//!     write!(&mut io::stdout(), \"{}\", args);\n//! }\n//! my_fmt_fn(format_args!(\", or a {} too\", \"function\"));\n//! ```\n//!\n//! The result of the [`format_args!`] macro is a value of type [`fmt::Arguments`].\n//! This structure can then be passed to the [`write`] and [`format`] functions\n//! inside this module in order to process the format string.\n//! The goal of this macro is to even further prevent intermediate allocations\n//! when dealing with formatting strings.\n//!\n//! For example, a logging library could use the standard formatting syntax, but\n//! it would internally pass around this structure until it has been determined\n//! where output should go to.\n//!\n//! [`fmt::Result`]: Result\n//! [`Result`]: core::result::Result\n//! [`std::fmt::Error`]: Error\n//! [`write!`]: core::write\n//! [`write`]: core::write\n//! [`format!`]: crate::format\n//! [`to_string`]: crate::string::ToString\n//! [`writeln!`]: core::writeln\n//! [`write_fmt`]: ../../std/io/trait.Write.html#method.write_fmt\n//! [`std::io::Write`]: ../../std/io/trait.Write.html\n//! [`print!`]: ../../std/macro.print.html\n//! [`println!`]: ../../std/macro.println.html\n//! [`eprint!`]: ../../std/macro.eprint.html\n//! [`eprintln!`]: ../../std/macro.eprintln.html\n//! [`format_args!`]: core::format_args\n//! [`fmt::Arguments`]: Arguments\n//! [`format`]: crate::format\n\n#![stable(feature = \"rust1\", since = \"1.0.0\")]\n\n#[unstable(feature = \"fmt_internals\", issue = \"none\")]\npub use core::fmt::rt;\n#[stable(feature = \"fmt_flags_align\", since = \"1.28.0\")]\npub use core::fmt::Alignment;\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::fmt::Error;\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::fmt::{write, ArgumentV1, Arguments};\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::fmt::{Binary, Octal};\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::fmt::{Debug, Display};\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::fmt::{DebugList, DebugMap, DebugSet, DebugStruct, DebugTuple};\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::fmt::{Formatter, Result, Write};\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::fmt::{LowerExp, UpperExp};\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use core::fmt::{LowerHex, Pointer, UpperHex};\n\nuse crate::string;\n\n/// The `format` function takes an [`Arguments`] struct and returns the resulting\n/// formatted string.\n///\n/// The [`Arguments`] instance can be created with the [`format_args!`] macro.\n///\n/// # Examples\n///\n/// Basic usage:\n///\n/// ```\n/// use std::fmt;\n///\n/// let s = fmt::format(format_args!(\"Hello, {}!\", \"world\"));\n/// assert_eq!(s, \"Hello, world!\");\n/// ```\n///\n/// Please note that using [`format!`] might be preferable.\n/// Example:\n///\n/// ```\n/// let s = format!(\"Hello, {}!\", \"world\");\n/// assert_eq!(s, \"Hello, world!\");\n/// ```\n///\n/// [`format_args!`]: core::format_args\n/// [`format!`]: crate::format\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub fn format(args: Arguments<'_>) -> string::String {\n    let capacity = args.estimated_capacity();\n    let mut output = string::String::with_capacity(capacity);\n    output.write_fmt(args).expect(\"a formatting trait implementation returned an error\");\n    output\n}\nuse super::*;\n\nuse std::boxed::Box;\nuse std::cell::RefCell;\nuse std::clone::Clone;\nuse std::convert::{From, TryInto};\nuse std::mem::drop;\nuse std::option::Option::{self, None, Some};\nuse std::result::Result::{Err, Ok};\n\n#[test]\nfn test_clone() {\n    let x = Rc::new(RefCell::new(5));\n    let y = x.clone();\n    *x.borrow_mut() = 20;\n    assert_eq!(*y.borrow(), 20);\n}\n\n#[test]\nfn test_simple() {\n    let x = Rc::new(5);\n    assert_eq!(*x, 5);\n}\n\n#[test]\nfn test_simple_clone() {\n    let x = Rc::new(5);\n    let y = x.clone();\n    assert_eq!(*x, 5);\n    assert_eq!(*y, 5);\n}\n\n#[test]\nfn test_destructor() {\n    let x: Rc<Box<_>> = Rc::new(box 5);\n    assert_eq!(**x, 5);\n}\n\n#[test]\nfn test_live() {\n    let x = Rc::new(5);\n    let y = Rc::downgrade(&x);\n    assert!(y.upgrade().is_some());\n}\n\n#[test]\nfn test_dead() {\n    let x = Rc::new(5);\n    let y = Rc::downgrade(&x);\n    drop(x);\n    assert!(y.upgrade().is_none());\n}\n\n#[test]\nfn weak_self_cyclic() {\n    struct Cycle {\n        x: RefCell<Option<Weak<Cycle>>>,\n    }\n\n    let a = Rc::new(Cycle { x: RefCell::new(None) });\n    let b = Rc::downgrade(&a.clone());\n    *a.x.borrow_mut() = Some(b);\n\n    // hopefully we don't double-free (or leak)...\n}\n\n#[test]\nfn is_unique() {\n    let x = Rc::new(3);\n    assert!(Rc::is_unique(&x));\n    let y = x.clone();\n    assert!(!Rc::is_unique(&x));\n    drop(y);\n    assert!(Rc::is_unique(&x));\n    let w = Rc::downgrade(&x);\n    assert!(!Rc::is_unique(&x));\n    drop(w);\n    assert!(Rc::is_unique(&x));\n}\n\n#[test]\nfn test_strong_count() {\n    let a = Rc::new(0);\n    assert!(Rc::strong_count(&a) == 1);\n    let w = Rc::downgrade(&a);\n    assert!(Rc::strong_count(&a) == 1);\n    let b = w.upgrade().expect(\"upgrade of live rc failed\");\n    assert!(Rc::strong_count(&b) == 2);\n    assert!(Rc::strong_count(&a) == 2);\n    drop(w);\n    drop(a);\n    assert!(Rc::strong_count(&b) == 1);\n    let c = b.clone();\n    assert!(Rc::strong_count(&b) == 2);\n    assert!(Rc::strong_count(&c) == 2);\n}\n\n#[test]\nfn test_weak_count() {\n    let a = Rc::new(0);\n    assert!(Rc::strong_count(&a) == 1);\n    assert!(Rc::weak_count(&a) == 0);\n    let w = Rc::downgrade(&a);\n    assert!(Rc::strong_count(&a) == 1);\n    assert!(Rc::weak_count(&a) == 1);\n    drop(w);\n    assert!(Rc::strong_count(&a) == 1);\n    assert!(Rc::weak_count(&a) == 0);\n    let c = a.clone();\n    assert!(Rc::strong_count(&a) == 2);\n    assert!(Rc::weak_count(&a) == 0);\n    drop(c);\n}\n\n#[test]\nfn weak_counts() {\n    assert_eq!(Weak::weak_count(&Weak::<u64>::new()), 0);\n    assert_eq!(Weak::strong_count(&Weak::<u64>::new()), 0);\n\n    let a = Rc::new(0);\n    let w = Rc::downgrade(&a);\n    assert_eq!(Weak::strong_count(&w), 1);\n    assert_eq!(Weak::weak_count(&w), 1);\n    let w2 = w.clone();\n    assert_eq!(Weak::strong_count(&w), 1);\n    assert_eq!(Weak::weak_count(&w), 2);\n    assert_eq!(Weak::strong_count(&w2), 1);\n    assert_eq!(Weak::weak_count(&w2), 2);\n    drop(w);\n    assert_eq!(Weak::strong_count(&w2), 1);\n    assert_eq!(Weak::weak_count(&w2), 1);\n    let a2 = a.clone();\n    assert_eq!(Weak::strong_count(&w2), 2);\n    assert_eq!(Weak::weak_count(&w2), 1);\n    drop(a2);\n    drop(a);\n    assert_eq!(Weak::strong_count(&w2), 0);\n    assert_eq!(Weak::weak_count(&w2), 0);\n    drop(w2);\n}\n\n#[test]\nfn try_unwrap() {\n    let x = Rc::new(3);\n    assert_eq!(Rc::try_unwrap(x), Ok(3));\n    let x = Rc::new(4);\n    let _y = x.clone();\n    assert_eq!(Rc::try_unwrap(x), Err(Rc::new(4)));\n    let x = Rc::new(5);\n    let _w = Rc::downgrade(&x);\n    assert_eq!(Rc::try_unwrap(x), Ok(5));\n}\n\n#[test]\nfn into_from_raw() {\n    let x = Rc::new(box \"hello\");\n    let y = x.clone();\n\n    let x_ptr = Rc::into_raw(x);\n    drop(y);\n    unsafe {\n        assert_eq!(**x_ptr, \"hello\");\n\n        let x = Rc::from_raw(x_ptr);\n        assert_eq!(**x, \"hello\");\n\n        assert_eq!(Rc::try_unwrap(x).map(|x| *x), Ok(\"hello\"));\n    }\n}\n\n#[test]\nfn test_into_from_raw_unsized() {\n    use std::fmt::Display;\n    use std::string::ToString;\n\n    let rc: Rc<str> = Rc::from(\"foo\");\n\n    let ptr = Rc::into_raw(rc.clone());\n    let rc2 = unsafe { Rc::from_raw(ptr) };\n\n    assert_eq!(unsafe { &*ptr }, \"foo\");\n    assert_eq!(rc, rc2);\n\n    let rc: Rc<dyn Display> = Rc::new(123);\n\n    let ptr = Rc::into_raw(rc.clone());\n    let rc2 = unsafe { Rc::from_raw(ptr) };\n\n    assert_eq!(unsafe { &*ptr }.to_string(), \"123\");\n    assert_eq!(rc2.to_string(), \"123\");\n}\n\n#[test]\nfn into_from_weak_raw() {\n    let x = Rc::new(box \"hello\");\n    let y = Rc::downgrade(&x);\n\n    let y_ptr = Weak::into_raw(y);\n    unsafe {\n        assert_eq!(**y_ptr, \"hello\");\n\n        let y = Weak::from_raw(y_ptr);\n        let y_up = Weak::upgrade(&y).unwrap();\n        assert_eq!(**y_up, \"hello\");\n        drop(y_up);\n\n        assert_eq!(Rc::try_unwrap(x).map(|x| *x), Ok(\"hello\"));\n    }\n}\n\n#[test]\nfn test_into_from_weak_raw_unsized() {\n    use std::fmt::Display;\n    use std::string::ToString;\n\n    let arc: Rc<str> = Rc::from(\"foo\");\n    let weak: Weak<str> = Rc::downgrade(&arc);\n\n    let ptr = Weak::into_raw(weak.clone());\n    let weak2 = unsafe { Weak::from_raw(ptr) };\n\n    assert_eq!(unsafe { &*ptr }, \"foo\");\n    assert!(weak.ptr_eq(&weak2));\n\n    let arc: Rc<dyn Display> = Rc::new(123);\n    let weak: Weak<dyn Display> = Rc::downgrade(&arc);\n\n    let ptr = Weak::into_raw(weak.clone());\n    let weak2 = unsafe { Weak::from_raw(ptr) };\n\n    assert_eq!(unsafe { &*ptr }.to_string(), \"123\");\n    assert!(weak.ptr_eq(&weak2));\n}\n\n#[test]\nfn get_mut() {\n    let mut x = Rc::new(3);\n    *Rc::get_mut(&mut x).unwrap() = 4;\n    assert_eq!(*x, 4);\n    let y = x.clone();\n    assert!(Rc::get_mut(&mut x).is_none());\n    drop(y);\n    assert!(Rc::get_mut(&mut x).is_some());\n    let _w = Rc::downgrade(&x);\n    assert!(Rc::get_mut(&mut x).is_none());\n}\n\n#[test]\nfn test_cowrc_clone_make_unique() {\n    let mut cow0 = Rc::new(75);\n    let mut cow1 = cow0.clone();\n    let mut cow2 = cow1.clone();\n\n    assert!(75 == *Rc::make_mut(&mut cow0));\n    assert!(75 == *Rc::make_mut(&mut cow1));\n    assert!(75 == *Rc::make_mut(&mut cow2));\n\n    *Rc::make_mut(&mut cow0) += 1;\n    *Rc::make_mut(&mut cow1) += 2;\n    *Rc::make_mut(&mut cow2) += 3;\n\n    assert!(76 == *cow0);\n    assert!(77 == *cow1);\n    assert!(78 == *cow2);\n\n    // none should point to the same backing memory\n    assert!(*cow0 != *cow1);\n    assert!(*cow0 != *cow2);\n    assert!(*cow1 != *cow2);\n}\n\n#[test]\nfn test_cowrc_clone_unique2() {\n    let mut cow0 = Rc::new(75);\n    let cow1 = cow0.clone();\n    let cow2 = cow1.clone();\n\n    assert!(75 == *cow0);\n    assert!(75 == *cow1);\n    assert!(75 == *cow2);\n\n    *Rc::make_mut(&mut cow0) += 1;\n\n    assert!(76 == *cow0);\n    assert!(75 == *cow1);\n    assert!(75 == *cow2);\n\n    // cow1 and cow2 should share the same contents\n    // cow0 should have a unique reference\n    assert!(*cow0 != *cow1);\n    assert!(*cow0 != *cow2);\n    assert!(*cow1 == *cow2);\n}\n\n#[test]\nfn test_cowrc_clone_weak() {\n    let mut cow0 = Rc::new(75);\n    let cow1_weak = Rc::downgrade(&cow0);\n\n    assert!(75 == *cow0);\n    assert!(75 == *cow1_weak.upgrade().unwrap());\n\n    *Rc::make_mut(&mut cow0) += 1;\n\n    assert!(76 == *cow0);\n    assert!(cow1_weak.upgrade().is_none());\n}\n\n#[test]\nfn test_show() {\n    let foo = Rc::new(75);\n    assert_eq!(format!(\"{:?}\", foo), \"75\");\n}\n\n#[test]\nfn test_unsized() {\n    let foo: Rc<[i32]> = Rc::new([1, 2, 3]);\n    assert_eq!(foo, foo.clone());\n}\n\n#[test]\nfn test_maybe_thin_unsized() {\n    // If/when custom thin DSTs exist, this test should be updated to use one\n    use std::ffi::{CStr, CString};\n\n    let x: Rc<CStr> = Rc::from(CString::new(\"swordfish\").unwrap().into_boxed_c_str());\n    assert_eq!(format!(\"{:?}\", x), \"\\\"swordfish\\\"\");\n    let y: Weak<CStr> = Rc::downgrade(&x);\n    drop(x);\n\n    // At this point, the weak points to a dropped DST\n    assert!(y.upgrade().is_none());\n    // But we still need to be able to get the alloc layout to drop.\n    // CStr has no drop glue, but custom DSTs might, and need to work.\n    drop(y);\n}\n\n#[test]\nfn test_from_owned() {\n    let foo = 123;\n    let foo_rc = Rc::from(foo);\n    assert!(123 == *foo_rc);\n}\n\n#[test]\nfn test_new_weak() {\n    let foo: Weak<usize> = Weak::new();\n    assert!(foo.upgrade().is_none());\n}\n\n#[test]\nfn test_ptr_eq() {\n    let five = Rc::new(5);\n    let same_five = five.clone();\n    let other_five = Rc::new(5);\n\n    assert!(Rc::ptr_eq(&five, &same_five));\n    assert!(!Rc::ptr_eq(&five, &other_five));\n}\n\n#[test]\nfn test_from_str() {\n    let r: Rc<str> = Rc::from(\"foo\");\n\n    assert_eq!(&r[..], \"foo\");\n}\n\n#[test]\nfn test_copy_from_slice() {\n    let s: &[u32] = &[1, 2, 3];\n    let r: Rc<[u32]> = Rc::from(s);\n\n    assert_eq!(&r[..], [1, 2, 3]);\n}\n\n#[test]\nfn test_clone_from_slice() {\n    #[derive(Clone, Debug, Eq, PartialEq)]\n    struct X(u32);\n\n    let s: &[X] = &[X(1), X(2), X(3)];\n    let r: Rc<[X]> = Rc::from(s);\n\n    assert_eq!(&r[..], s);\n}\n\n#[test]\n#[should_panic]\nfn test_clone_from_slice_panic() {\n    use std::string::{String, ToString};\n\n    struct Fail(u32, String);\n\n    impl Clone for Fail {\n        fn clone(&self) -> Fail {\n            if self.0 == 2 {\n                panic!();\n            }\n            Fail(self.0, self.1.clone())\n        }\n    }\n\n    let s: &[Fail] =\n        &[Fail(0, \"foo\".to_string()), Fail(1, \"bar\".to_string()), Fail(2, \"baz\".to_string())];\n\n    // Should panic, but not cause memory corruption\n    let _r: Rc<[Fail]> = Rc::from(s);\n}\n\n#[test]\nfn test_from_box() {\n    let b: Box<u32> = box 123;\n    let r: Rc<u32> = Rc::from(b);\n\n    assert_eq!(*r, 123);\n}\n\n#[test]\nfn test_from_box_str() {\n    use std::string::String;\n\n    let s = String::from(\"foo\").into_boxed_str();\n    let r: Rc<str> = Rc::from(s);\n\n    assert_eq!(&r[..], \"foo\");\n}\n\n#[test]\nfn test_from_box_slice() {\n    let s = vec![1, 2, 3].into_boxed_slice();\n    let r: Rc<[u32]> = Rc::from(s);\n\n    assert_eq!(&r[..], [1, 2, 3]);\n}\n\n#[test]\nfn test_from_box_trait() {\n    use std::fmt::Display;\n    use std::string::ToString;\n\n    let b: Box<dyn Display> = box 123;\n    let r: Rc<dyn Display> = Rc::from(b);\n\n    assert_eq!(r.to_string(), \"123\");\n}\n\n#[test]\nfn test_from_box_trait_zero_sized() {\n    use std::fmt::Debug;\n\n    let b: Box<dyn Debug> = box ();\n    let r: Rc<dyn Debug> = Rc::from(b);\n\n    assert_eq!(format!(\"{:?}\", r), \"()\");\n}\n\n#[test]\nfn test_from_vec() {\n    let v = vec![1, 2, 3];\n    let r: Rc<[u32]> = Rc::from(v);\n\n    assert_eq!(&r[..], [1, 2, 3]);\n}\n\n#[test]\nfn test_downcast() {\n    use std::any::Any;\n\n    let r1: Rc<dyn Any> = Rc::new(i32::MAX);\n    let r2: Rc<dyn Any> = Rc::new(\"abc\");\n\n    assert!(r1.clone().downcast::<u32>().is_err());\n\n    let r1i32 = r1.downcast::<i32>();\n    assert!(r1i32.is_ok());\n    assert_eq!(r1i32.unwrap(), Rc::new(i32::MAX));\n\n    assert!(r2.clone().downcast::<i32>().is_err());\n\n    let r2str = r2.downcast::<&'static str>();\n    assert!(r2str.is_ok());\n    assert_eq!(r2str.unwrap(), Rc::new(\"abc\"));\n}\n\n#[test]\nfn test_array_from_slice() {\n    let v = vec![1, 2, 3];\n    let r: Rc<[u32]> = Rc::from(v);\n\n    let a: Result<Rc<[u32; 3]>, _> = r.clone().try_into();\n    assert!(a.is_ok());\n\n    let a: Result<Rc<[u32; 2]>, _> = r.clone().try_into();\n    assert!(a.is_err());\n}\n\n#[test]\nfn test_rc_cyclic_with_zero_refs() {\n    struct ZeroRefs {\n        inner: Weak<ZeroRefs>,\n    }\n\n    let zero_refs = Rc::new_cyclic(|inner| {\n        assert_eq!(inner.strong_count(), 0);\n        assert!(inner.upgrade().is_none());\n        ZeroRefs { inner: Weak::new() }\n    });\n\n    assert_eq!(Rc::strong_count(&zero_refs), 1);\n    assert_eq!(Rc::weak_count(&zero_refs), 0);\n    assert_eq!(zero_refs.inner.strong_count(), 0);\n    assert_eq!(zero_refs.inner.weak_count(), 0);\n}\n\n#[test]\nfn test_rc_cyclic_with_one_ref() {\n    struct OneRef {\n        inner: Weak<OneRef>,\n    }\n\n    let one_ref = Rc::new_cyclic(|inner| {\n        assert_eq!(inner.strong_count(), 0);\n        assert!(inner.upgrade().is_none());\n        OneRef { inner: inner.clone() }\n    });\n\n    assert_eq!(Rc::strong_count(&one_ref), 1);\n    assert_eq!(Rc::weak_count(&one_ref), 1);\n\n    let one_ref2 = Weak::upgrade(&one_ref.inner).unwrap();\n    assert!(Rc::ptr_eq(&one_ref, &one_ref2));\n\n    assert_eq!(one_ref.inner.strong_count(), 2);\n    assert_eq!(one_ref.inner.weak_count(), 1);\n}\n\n#[test]\nfn test_rc_cyclic_with_two_ref() {\n    struct TwoRefs {\n        inner: Weak<TwoRefs>,\n        inner1: Weak<TwoRefs>,\n    }\n\n    let two_refs = Rc::new_cyclic(|inner| {\n        assert_eq!(inner.strong_count(), 0);\n        assert!(inner.upgrade().is_none());\n        TwoRefs { inner: inner.clone(), inner1: inner.clone() }\n    });\n\n    assert_eq!(Rc::strong_count(&two_refs), 1);\n    assert_eq!(Rc::weak_count(&two_refs), 2);\n\n    let two_ref3 = Weak::upgrade(&two_refs.inner).unwrap();\n    assert!(Rc::ptr_eq(&two_refs, &two_ref3));\n\n    let two_ref2 = Weak::upgrade(&two_refs.inner1).unwrap();\n    assert!(Rc::ptr_eq(&two_refs, &two_ref2));\n\n    assert_eq!(Rc::strong_count(&two_refs), 3);\n    assert_eq!(Rc::weak_count(&two_refs), 2);\n}\n//! A doubly-linked list with owned nodes.\n//!\n//! The `LinkedList` allows pushing and popping elements at either end\n//! in constant time.\n//!\n//! NOTE: It is almost always better to use [`Vec`] or [`VecDeque`] because\n//! array-based containers are generally faster,\n//! more memory efficient, and make better use of CPU cache.\n//!\n//! [`Vec`]: crate::vec::Vec\n//! [`VecDeque`]: super::vec_deque::VecDeque\n\n#![stable(feature = \"rust1\", since = \"1.0.0\")]\n\nuse core::cmp::Ordering;\nuse core::fmt;\nuse core::hash::{Hash, Hasher};\nuse core::iter::{FromIterator, FusedIterator};\nuse core::marker::PhantomData;\nuse core::mem;\nuse core::ptr::NonNull;\n\nuse super::SpecExtend;\nuse crate::boxed::Box;\n\n#[cfg(test)]\nmod tests;\n\n/// A doubly-linked list with owned nodes.\n///\n/// The `LinkedList` allows pushing and popping elements at either end\n/// in constant time.\n///\n/// NOTE: It is almost always better to use `Vec` or `VecDeque` because\n/// array-based containers are generally faster,\n/// more memory efficient, and make better use of CPU cache.\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\n#[cfg_attr(not(test), rustc_diagnostic_item = \"LinkedList\")]\npub struct LinkedList<T> {\n    head: Option<NonNull<Node<T>>>,\n    tail: Option<NonNull<Node<T>>>,\n    len: usize,\n    marker: PhantomData<Box<Node<T>>>,\n}\n\nstruct Node<T> {\n    next: Option<NonNull<Node<T>>>,\n    prev: Option<NonNull<Node<T>>>,\n    element: T,\n}\n\n/// An iterator over the elements of a `LinkedList`.\n///\n/// This `struct` is created by [`LinkedList::iter()`]. See its\n/// documentation for more.\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct Iter<'a, T: 'a> {\n    head: Option<NonNull<Node<T>>>,\n    tail: Option<NonNull<Node<T>>>,\n    len: usize,\n    marker: PhantomData<&'a Node<T>>,\n}\n\n#[stable(feature = \"collection_debug\", since = \"1.17.0\")]\nimpl<T: fmt::Debug> fmt::Debug for Iter<'_, T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"Iter\").field(&self.len).finish()\n    }\n}\n\n// FIXME(#26925) Remove in favor of `#[derive(Clone)]`\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> Clone for Iter<'_, T> {\n    fn clone(&self) -> Self {\n        Iter { ..*self }\n    }\n}\n\n/// A mutable iterator over the elements of a `LinkedList`.\n///\n/// This `struct` is created by [`LinkedList::iter_mut()`]. See its\n/// documentation for more.\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct IterMut<'a, T: 'a> {\n    // We do *not* exclusively own the entire list here, references to node's `element`\n    // have been handed out by the iterator! So be careful when using this; the methods\n    // called must be aware that there can be aliasing pointers to `element`.\n    list: &'a mut LinkedList<T>,\n    head: Option<NonNull<Node<T>>>,\n    tail: Option<NonNull<Node<T>>>,\n    len: usize,\n}\n\n#[stable(feature = \"collection_debug\", since = \"1.17.0\")]\nimpl<T: fmt::Debug> fmt::Debug for IterMut<'_, T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"IterMut\").field(&self.list).field(&self.len).finish()\n    }\n}\n\n/// An owning iterator over the elements of a `LinkedList`.\n///\n/// This `struct` is created by the [`into_iter`] method on [`LinkedList`]\n/// (provided by the `IntoIterator` trait). See its documentation for more.\n///\n/// [`into_iter`]: LinkedList::into_iter\n#[derive(Clone)]\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct IntoIter<T> {\n    list: LinkedList<T>,\n}\n\n#[stable(feature = \"collection_debug\", since = \"1.17.0\")]\nimpl<T: fmt::Debug> fmt::Debug for IntoIter<T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"IntoIter\").field(&self.list).finish()\n    }\n}\n\nimpl<T> Node<T> {\n    fn new(element: T) -> Self {\n        Node { next: None, prev: None, element }\n    }\n\n    fn into_element(self: Box<Self>) -> T {\n        self.element\n    }\n}\n\n// private methods\nimpl<T> LinkedList<T> {\n    /// Adds the given node to the front of the list.\n    #[inline]\n    fn push_front_node(&mut self, mut node: Box<Node<T>>) {\n        // This method takes care not to create mutable references to whole nodes,\n        // to maintain validity of aliasing pointers into `element`.\n        unsafe {\n            node.next = self.head;\n            node.prev = None;\n            let node = Some(Box::leak(node).into());\n\n            match self.head {\n                None => self.tail = node,\n                // Not creating new mutable (unique!) references overlapping `element`.\n                Some(head) => (*head.as_ptr()).prev = node,\n            }\n\n            self.head = node;\n            self.len += 1;\n        }\n    }\n\n    /// Removes and returns the node at the front of the list.\n    #[inline]\n    fn pop_front_node(&mut self) -> Option<Box<Node<T>>> {\n        // This method takes care not to create mutable references to whole nodes,\n        // to maintain validity of aliasing pointers into `element`.\n        self.head.map(|node| unsafe {\n            let node = Box::from_raw(node.as_ptr());\n            self.head = node.next;\n\n            match self.head {\n                None => self.tail = None,\n                // Not creating new mutable (unique!) references overlapping `element`.\n                Some(head) => (*head.as_ptr()).prev = None,\n            }\n\n            self.len -= 1;\n            node\n        })\n    }\n\n    /// Adds the given node to the back of the list.\n    #[inline]\n    fn push_back_node(&mut self, mut node: Box<Node<T>>) {\n        // This method takes care not to create mutable references to whole nodes,\n        // to maintain validity of aliasing pointers into `element`.\n        unsafe {\n            node.next = None;\n            node.prev = self.tail;\n            let node = Some(Box::leak(node).into());\n\n            match self.tail {\n                None => self.head = node,\n                // Not creating new mutable (unique!) references overlapping `element`.\n                Some(tail) => (*tail.as_ptr()).next = node,\n            }\n\n            self.tail = node;\n            self.len += 1;\n        }\n    }\n\n    /// Removes and returns the node at the back of the list.\n    #[inline]\n    fn pop_back_node(&mut self) -> Option<Box<Node<T>>> {\n        // This method takes care not to create mutable references to whole nodes,\n        // to maintain validity of aliasing pointers into `element`.\n        self.tail.map(|node| unsafe {\n            let node = Box::from_raw(node.as_ptr());\n            self.tail = node.prev;\n\n            match self.tail {\n                None => self.head = None,\n                // Not creating new mutable (unique!) references overlapping `element`.\n                Some(tail) => (*tail.as_ptr()).next = None,\n            }\n\n            self.len -= 1;\n            node\n        })\n    }\n\n    /// Unlinks the specified node from the current list.\n    ///\n    /// Warning: this will not check that the provided node belongs to the current list.\n    ///\n    /// This method takes care not to create mutable references to `element`, to\n    /// maintain validity of aliasing pointers.\n    #[inline]\n    unsafe fn unlink_node(&mut self, mut node: NonNull<Node<T>>) {\n        let node = unsafe { node.as_mut() }; // this one is ours now, we can create an &mut.\n\n        // Not creating new mutable (unique!) references overlapping `element`.\n        match node.prev {\n            Some(prev) => unsafe { (*prev.as_ptr()).next = node.next },\n            // this node is the head node\n            None => self.head = node.next,\n        };\n\n        match node.next {\n            Some(next) => unsafe { (*next.as_ptr()).prev = node.prev },\n            // this node is the tail node\n            None => self.tail = node.prev,\n        };\n\n        self.len -= 1;\n    }\n\n    /// Splices a series of nodes between two existing nodes.\n    ///\n    /// Warning: this will not check that the provided node belongs to the two existing lists.\n    #[inline]\n    unsafe fn splice_nodes(\n        &mut self,\n        existing_prev: Option<NonNull<Node<T>>>,\n        existing_next: Option<NonNull<Node<T>>>,\n        mut splice_start: NonNull<Node<T>>,\n        mut splice_end: NonNull<Node<T>>,\n        splice_length: usize,\n    ) {\n        // This method takes care not to create multiple mutable references to whole nodes at the same time,\n        // to maintain validity of aliasing pointers into `element`.\n        if let Some(mut existing_prev) = existing_prev {\n            unsafe {\n                existing_prev.as_mut().next = Some(splice_start);\n            }\n        } else {\n            self.head = Some(splice_start);\n        }\n        if let Some(mut existing_next) = existing_next {\n            unsafe {\n                existing_next.as_mut().prev = Some(splice_end);\n            }\n        } else {\n            self.tail = Some(splice_end);\n        }\n        unsafe {\n            splice_start.as_mut().prev = existing_prev;\n            splice_end.as_mut().next = existing_next;\n        }\n\n        self.len += splice_length;\n    }\n\n    /// Detaches all nodes from a linked list as a series of nodes.\n    #[inline]\n    fn detach_all_nodes(mut self) -> Option<(NonNull<Node<T>>, NonNull<Node<T>>, usize)> {\n        let head = self.head.take();\n        let tail = self.tail.take();\n        let len = mem::replace(&mut self.len, 0);\n        if let Some(head) = head {\n            let tail = tail.unwrap_or_else(|| unsafe { core::hint::unreachable_unchecked() });\n            Some((head, tail, len))\n        } else {\n            None\n        }\n    }\n\n    #[inline]\n    unsafe fn split_off_before_node(\n        &mut self,\n        split_node: Option<NonNull<Node<T>>>,\n        at: usize,\n    ) -> Self {\n        // The split node is the new head node of the second part\n        if let Some(mut split_node) = split_node {\n            let first_part_head;\n            let first_part_tail;\n            unsafe {\n                first_part_tail = split_node.as_mut().prev.take();\n            }\n            if let Some(mut tail) = first_part_tail {\n                unsafe {\n                    tail.as_mut().next = None;\n                }\n                first_part_head = self.head;\n            } else {\n                first_part_head = None;\n            }\n\n            let first_part = LinkedList {\n                head: first_part_head,\n                tail: first_part_tail,\n                len: at,\n                marker: PhantomData,\n            };\n\n            // Fix the head ptr of the second part\n            self.head = Some(split_node);\n            self.len = self.len - at;\n\n            first_part\n        } else {\n            mem::replace(self, LinkedList::new())\n        }\n    }\n\n    #[inline]\n    unsafe fn split_off_after_node(\n        &mut self,\n        split_node: Option<NonNull<Node<T>>>,\n        at: usize,\n    ) -> Self {\n        // The split node is the new tail node of the first part and owns\n        // the head of the second part.\n        if let Some(mut split_node) = split_node {\n            let second_part_head;\n            let second_part_tail;\n            unsafe {\n                second_part_head = split_node.as_mut().next.take();\n            }\n            if let Some(mut head) = second_part_head {\n                unsafe {\n                    head.as_mut().prev = None;\n                }\n                second_part_tail = self.tail;\n            } else {\n                second_part_tail = None;\n            }\n\n            let second_part = LinkedList {\n                head: second_part_head,\n                tail: second_part_tail,\n                len: self.len - at,\n                marker: PhantomData,\n            };\n\n            // Fix the tail ptr of the first part\n            self.tail = Some(split_node);\n            self.len = at;\n\n            second_part\n        } else {\n            mem::replace(self, LinkedList::new())\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> Default for LinkedList<T> {\n    /// Creates an empty `LinkedList<T>`.\n    #[inline]\n    fn default() -> Self {\n        Self::new()\n    }\n}\n\nimpl<T> LinkedList<T> {\n    /// Creates an empty `LinkedList`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::LinkedList;\n    ///\n    /// let list: LinkedList<u32> = LinkedList::new();\n    /// ```\n    #[inline]\n    #[rustc_const_stable(feature = \"const_linked_list_new\", since = \"1.32.0\")]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub const fn new() -> Self {\n        LinkedList { head: None, tail: None, len: 0, marker: PhantomData }\n    }\n\n    /// Moves all elements from `other` to the end of the list.\n    ///\n    /// This reuses all the nodes from `other` and moves them into `self`. After\n    /// this operation, `other` becomes empty.\n    ///\n    /// This operation should compute in *O*(1) time and *O*(1) memory.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::LinkedList;\n    ///\n    /// let mut list1 = LinkedList::new();\n    /// list1.push_back('a');\n    ///\n    /// let mut list2 = LinkedList::new();\n    /// list2.push_back('b');\n    /// list2.push_back('c');\n    ///\n    /// list1.append(&mut list2);\n    ///\n    /// let mut iter = list1.iter();\n    /// assert_eq!(iter.next(), Some(&'a'));\n    /// assert_eq!(iter.next(), Some(&'b'));\n    /// assert_eq!(iter.next(), Some(&'c'));\n    /// assert!(iter.next().is_none());\n    ///\n    /// assert!(list2.is_empty());\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn append(&mut self, other: &mut Self) {\n        match self.tail {\n            None => mem::swap(self, other),\n            Some(mut tail) => {\n                // `as_mut` is okay here because we have exclusive access to the entirety\n                // of both lists.\n                if let Some(mut other_head) = other.head.take() {\n                    unsafe {\n                        tail.as_mut().next = Some(other_head);\n                        other_head.as_mut().prev = Some(tail);\n                    }\n\n                    self.tail = other.tail.take();\n                    self.len += mem::replace(&mut other.len, 0);\n                }\n            }\n        }\n    }\n\n    /// Moves all elements from `other` to the begin of the list.\n    #[unstable(feature = \"linked_list_prepend\", issue = \"none\")]\n    pub fn prepend(&mut self, other: &mut Self) {\n        match self.head {\n            None => mem::swap(self, other),\n            Some(mut head) => {\n                // `as_mut` is okay here because we have exclusive access to the entirety\n                // of both lists.\n                if let Some(mut other_tail) = other.tail.take() {\n                    unsafe {\n                        head.as_mut().prev = Some(other_tail);\n                        other_tail.as_mut().next = Some(head);\n                    }\n\n                    self.head = other.head.take();\n                    self.len += mem::replace(&mut other.len, 0);\n                }\n            }\n        }\n    }\n\n    /// Provides a forward iterator.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::LinkedList;\n    ///\n    /// let mut list: LinkedList<u32> = LinkedList::new();\n    ///\n    /// list.push_back(0);\n    /// list.push_back(1);\n    /// list.push_back(2);\n    ///\n    /// let mut iter = list.iter();\n    /// assert_eq!(iter.next(), Some(&0));\n    /// assert_eq!(iter.next(), Some(&1));\n    /// assert_eq!(iter.next(), Some(&2));\n    /// assert_eq!(iter.next(), None);\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn iter(&self) -> Iter<'_, T> {\n        Iter { head: self.head, tail: self.tail, len: self.len, marker: PhantomData }\n    }\n\n    /// Provides a forward iterator with mutable references.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::LinkedList;\n    ///\n    /// let mut list: LinkedList<u32> = LinkedList::new();\n    ///\n    /// list.push_back(0);\n    /// list.push_back(1);\n    /// list.push_back(2);\n    ///\n    /// for element in list.iter_mut() {\n    ///     *element += 10;\n    /// }\n    ///\n    /// let mut iter = list.iter();\n    /// assert_eq!(iter.next(), Some(&10));\n    /// assert_eq!(iter.next(), Some(&11));\n    /// assert_eq!(iter.next(), Some(&12));\n    /// assert_eq!(iter.next(), None);\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn iter_mut(&mut self) -> IterMut<'_, T> {\n        IterMut { head: self.head, tail: self.tail, len: self.len, list: self }\n    }\n\n    /// Provides a cursor at the front element.\n    ///\n    /// The cursor is pointing to the \"ghost\" non-element if the list is empty.\n    #[inline]\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn cursor_front(&self) -> Cursor<'_, T> {\n        Cursor { index: 0, current: self.head, list: self }\n    }\n\n    /// Provides a cursor with editing operations at the front element.\n    ///\n    /// The cursor is pointing to the \"ghost\" non-element if the list is empty.\n    #[inline]\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn cursor_front_mut(&mut self) -> CursorMut<'_, T> {\n        CursorMut { index: 0, current: self.head, list: self }\n    }\n\n    /// Provides a cursor at the back element.\n    ///\n    /// The cursor is pointing to the \"ghost\" non-element if the list is empty.\n    #[inline]\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn cursor_back(&self) -> Cursor<'_, T> {\n        Cursor { index: self.len.checked_sub(1).unwrap_or(0), current: self.tail, list: self }\n    }\n\n    /// Provides a cursor with editing operations at the back element.\n    ///\n    /// The cursor is pointing to the \"ghost\" non-element if the list is empty.\n    #[inline]\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn cursor_back_mut(&mut self) -> CursorMut<'_, T> {\n        CursorMut { index: self.len.checked_sub(1).unwrap_or(0), current: self.tail, list: self }\n    }\n\n    /// Returns `true` if the `LinkedList` is empty.\n    ///\n    /// This operation should compute in *O*(1) time.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::LinkedList;\n    ///\n    /// let mut dl = LinkedList::new();\n    /// assert!(dl.is_empty());\n    ///\n    /// dl.push_front(\"foo\");\n    /// assert!(!dl.is_empty());\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn is_empty(&self) -> bool {\n        self.head.is_none()\n    }\n\n    /// Returns the length of the `LinkedList`.\n    ///\n    /// This operation should compute in *O*(1) time.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::LinkedList;\n    ///\n    /// let mut dl = LinkedList::new();\n    ///\n    /// dl.push_front(2);\n    /// assert_eq!(dl.len(), 1);\n    ///\n    /// dl.push_front(1);\n    /// assert_eq!(dl.len(), 2);\n    ///\n    /// dl.push_back(3);\n    /// assert_eq!(dl.len(), 3);\n    /// ```\n    #[doc(alias = \"length\")]\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn len(&self) -> usize {\n        self.len\n    }\n\n    /// Removes all elements from the `LinkedList`.\n    ///\n    /// This operation should compute in *O*(*n*) time.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::LinkedList;\n    ///\n    /// let mut dl = LinkedList::new();\n    ///\n    /// dl.push_front(2);\n    /// dl.push_front(1);\n    /// assert_eq!(dl.len(), 2);\n    /// assert_eq!(dl.front(), Some(&1));\n    ///\n    /// dl.clear();\n    /// assert_eq!(dl.len(), 0);\n    /// assert_eq!(dl.front(), None);\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn clear(&mut self) {\n        *self = Self::new();\n    }\n\n    /// Returns `true` if the `LinkedList` contains an element equal to the\n    /// given value.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::LinkedList;\n    ///\n    /// let mut list: LinkedList<u32> = LinkedList::new();\n    ///\n    /// list.push_back(0);\n    /// list.push_back(1);\n    /// list.push_back(2);\n    ///\n    /// assert_eq!(list.contains(&0), true);\n    /// assert_eq!(list.contains(&10), false);\n    /// ```\n    #[stable(feature = \"linked_list_contains\", since = \"1.12.0\")]\n    pub fn contains(&self, x: &T) -> bool\n    where\n        T: PartialEq<T>,\n    {\n        self.iter().any(|e| e == x)\n    }\n\n    /// Provides a reference to the front element, or `None` if the list is\n    /// empty.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::LinkedList;\n    ///\n    /// let mut dl = LinkedList::new();\n    /// assert_eq!(dl.front(), None);\n    ///\n    /// dl.push_front(1);\n    /// assert_eq!(dl.front(), Some(&1));\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn front(&self) -> Option<&T> {\n        unsafe { self.head.as_ref().map(|node| &node.as_ref().element) }\n    }\n\n    /// Provides a mutable reference to the front element, or `None` if the list\n    /// is empty.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::LinkedList;\n    ///\n    /// let mut dl = LinkedList::new();\n    /// assert_eq!(dl.front(), None);\n    ///\n    /// dl.push_front(1);\n    /// assert_eq!(dl.front(), Some(&1));\n    ///\n    /// match dl.front_mut() {\n    ///     None => {},\n    ///     Some(x) => *x = 5,\n    /// }\n    /// assert_eq!(dl.front(), Some(&5));\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn front_mut(&mut self) -> Option<&mut T> {\n        unsafe { self.head.as_mut().map(|node| &mut node.as_mut().element) }\n    }\n\n    /// Provides a reference to the back element, or `None` if the list is\n    /// empty.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::LinkedList;\n    ///\n    /// let mut dl = LinkedList::new();\n    /// assert_eq!(dl.back(), None);\n    ///\n    /// dl.push_back(1);\n    /// assert_eq!(dl.back(), Some(&1));\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn back(&self) -> Option<&T> {\n        unsafe { self.tail.as_ref().map(|node| &node.as_ref().element) }\n    }\n\n    /// Provides a mutable reference to the back element, or `None` if the list\n    /// is empty.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::LinkedList;\n    ///\n    /// let mut dl = LinkedList::new();\n    /// assert_eq!(dl.back(), None);\n    ///\n    /// dl.push_back(1);\n    /// assert_eq!(dl.back(), Some(&1));\n    ///\n    /// match dl.back_mut() {\n    ///     None => {},\n    ///     Some(x) => *x = 5,\n    /// }\n    /// assert_eq!(dl.back(), Some(&5));\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn back_mut(&mut self) -> Option<&mut T> {\n        unsafe { self.tail.as_mut().map(|node| &mut node.as_mut().element) }\n    }\n\n    /// Adds an element first in the list.\n    ///\n    /// This operation should compute in *O*(1) time.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::LinkedList;\n    ///\n    /// let mut dl = LinkedList::new();\n    ///\n    /// dl.push_front(2);\n    /// assert_eq!(dl.front().unwrap(), &2);\n    ///\n    /// dl.push_front(1);\n    /// assert_eq!(dl.front().unwrap(), &1);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn push_front(&mut self, elt: T) {\n        self.push_front_node(box Node::new(elt));\n    }\n\n    /// Removes the first element and returns it, or `None` if the list is\n    /// empty.\n    ///\n    /// This operation should compute in *O*(1) time.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::LinkedList;\n    ///\n    /// let mut d = LinkedList::new();\n    /// assert_eq!(d.pop_front(), None);\n    ///\n    /// d.push_front(1);\n    /// d.push_front(3);\n    /// assert_eq!(d.pop_front(), Some(3));\n    /// assert_eq!(d.pop_front(), Some(1));\n    /// assert_eq!(d.pop_front(), None);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn pop_front(&mut self) -> Option<T> {\n        self.pop_front_node().map(Node::into_element)\n    }\n\n    /// Appends an element to the back of a list.\n    ///\n    /// This operation should compute in *O*(1) time.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::LinkedList;\n    ///\n    /// let mut d = LinkedList::new();\n    /// d.push_back(1);\n    /// d.push_back(3);\n    /// assert_eq!(3, *d.back().unwrap());\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn push_back(&mut self, elt: T) {\n        self.push_back_node(box Node::new(elt));\n    }\n\n    /// Removes the last element from a list and returns it, or `None` if\n    /// it is empty.\n    ///\n    /// This operation should compute in *O*(1) time.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::LinkedList;\n    ///\n    /// let mut d = LinkedList::new();\n    /// assert_eq!(d.pop_back(), None);\n    /// d.push_back(1);\n    /// d.push_back(3);\n    /// assert_eq!(d.pop_back(), Some(3));\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn pop_back(&mut self) -> Option<T> {\n        self.pop_back_node().map(Node::into_element)\n    }\n\n    /// Splits the list into two at the given index. Returns everything after the given index,\n    /// including the index.\n    ///\n    /// This operation should compute in *O*(*n*) time.\n    ///\n    /// # Panics\n    ///\n    /// Panics if `at > len`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::LinkedList;\n    ///\n    /// let mut d = LinkedList::new();\n    ///\n    /// d.push_front(1);\n    /// d.push_front(2);\n    /// d.push_front(3);\n    ///\n    /// let mut split = d.split_off(2);\n    ///\n    /// assert_eq!(split.pop_front(), Some(1));\n    /// assert_eq!(split.pop_front(), None);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn split_off(&mut self, at: usize) -> LinkedList<T> {\n        let len = self.len();\n        assert!(at <= len, \"Cannot split off at a nonexistent index\");\n        if at == 0 {\n            return mem::take(self);\n        } else if at == len {\n            return Self::new();\n        }\n\n        // Below, we iterate towards the `i-1`th node, either from the start or the end,\n        // depending on which would be faster.\n        let split_node = if at - 1 <= len - 1 - (at - 1) {\n            let mut iter = self.iter_mut();\n            // instead of skipping using .skip() (which creates a new struct),\n            // we skip manually so we can access the head field without\n            // depending on implementation details of Skip\n            for _ in 0..at - 1 {\n                iter.next();\n            }\n            iter.head\n        } else {\n            // better off starting from the end\n            let mut iter = self.iter_mut();\n            for _ in 0..len - 1 - (at - 1) {\n                iter.next_back();\n            }\n            iter.tail\n        };\n        unsafe { self.split_off_after_node(split_node, at) }\n    }\n\n    /// Removes the element at the given index and returns it.\n    ///\n    /// This operation should compute in *O*(*n*) time.\n    ///\n    /// # Panics\n    /// Panics if at >= len\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(linked_list_remove)]\n    /// use std::collections::LinkedList;\n    ///\n    /// let mut d = LinkedList::new();\n    ///\n    /// d.push_front(1);\n    /// d.push_front(2);\n    /// d.push_front(3);\n    ///\n    /// assert_eq!(d.remove(1), 2);\n    /// assert_eq!(d.remove(0), 3);\n    /// assert_eq!(d.remove(0), 1);\n    /// ```\n    #[unstable(feature = \"linked_list_remove\", issue = \"69210\")]\n    pub fn remove(&mut self, at: usize) -> T {\n        let len = self.len();\n        assert!(at < len, \"Cannot remove at an index outside of the list bounds\");\n\n        // Below, we iterate towards the node at the given index, either from\n        // the start or the end, depending on which would be faster.\n        let offset_from_end = len - at - 1;\n        if at <= offset_from_end {\n            let mut cursor = self.cursor_front_mut();\n            for _ in 0..at {\n                cursor.move_next();\n            }\n            cursor.remove_current().unwrap()\n        } else {\n            let mut cursor = self.cursor_back_mut();\n            for _ in 0..offset_from_end {\n                cursor.move_prev();\n            }\n            cursor.remove_current().unwrap()\n        }\n    }\n\n    /// Creates an iterator which uses a closure to determine if an element should be removed.\n    ///\n    /// If the closure returns true, then the element is removed and yielded.\n    /// If the closure returns false, the element will remain in the list and will not be yielded\n    /// by the iterator.\n    ///\n    /// Note that `drain_filter` lets you mutate every element in the filter closure, regardless of\n    /// whether you choose to keep or remove it.\n    ///\n    /// # Examples\n    ///\n    /// Splitting a list into evens and odds, reusing the original list:\n    ///\n    /// ```\n    /// #![feature(drain_filter)]\n    /// use std::collections::LinkedList;\n    ///\n    /// let mut numbers: LinkedList<u32> = LinkedList::new();\n    /// numbers.extend(&[1, 2, 3, 4, 5, 6, 8, 9, 11, 13, 14, 15]);\n    ///\n    /// let evens = numbers.drain_filter(|x| *x % 2 == 0).collect::<LinkedList<_>>();\n    /// let odds = numbers;\n    ///\n    /// assert_eq!(evens.into_iter().collect::<Vec<_>>(), vec![2, 4, 6, 8, 14]);\n    /// assert_eq!(odds.into_iter().collect::<Vec<_>>(), vec![1, 3, 5, 9, 11, 13, 15]);\n    /// ```\n    #[unstable(feature = \"drain_filter\", reason = \"recently added\", issue = \"43244\")]\n    pub fn drain_filter<F>(&mut self, filter: F) -> DrainFilter<'_, T, F>\n    where\n        F: FnMut(&mut T) -> bool,\n    {\n        // avoid borrow issues.\n        let it = self.head;\n        let old_len = self.len;\n\n        DrainFilter { list: self, it, pred: filter, idx: 0, old_len }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nunsafe impl<#[may_dangle] T> Drop for LinkedList<T> {\n    fn drop(&mut self) {\n        struct DropGuard<'a, T>(&'a mut LinkedList<T>);\n\n        impl<'a, T> Drop for DropGuard<'a, T> {\n            fn drop(&mut self) {\n                // Continue the same loop we do below. This only runs when a destructor has\n                // panicked. If another one panics this will abort.\n                while self.0.pop_front_node().is_some() {}\n            }\n        }\n\n        while let Some(node) = self.pop_front_node() {\n            let guard = DropGuard(self);\n            drop(node);\n            mem::forget(guard);\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T> Iterator for Iter<'a, T> {\n    type Item = &'a T;\n\n    #[inline]\n    fn next(&mut self) -> Option<&'a T> {\n        if self.len == 0 {\n            None\n        } else {\n            self.head.map(|node| unsafe {\n                // Need an unbound lifetime to get 'a\n                let node = &*node.as_ptr();\n                self.len -= 1;\n                self.head = node.next;\n                &node.element\n            })\n        }\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        (self.len, Some(self.len))\n    }\n\n    #[inline]\n    fn last(mut self) -> Option<&'a T> {\n        self.next_back()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T> DoubleEndedIterator for Iter<'a, T> {\n    #[inline]\n    fn next_back(&mut self) -> Option<&'a T> {\n        if self.len == 0 {\n            None\n        } else {\n            self.tail.map(|node| unsafe {\n                // Need an unbound lifetime to get 'a\n                let node = &*node.as_ptr();\n                self.len -= 1;\n                self.tail = node.prev;\n                &node.element\n            })\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> ExactSizeIterator for Iter<'_, T> {}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<T> FusedIterator for Iter<'_, T> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T> Iterator for IterMut<'a, T> {\n    type Item = &'a mut T;\n\n    #[inline]\n    fn next(&mut self) -> Option<&'a mut T> {\n        if self.len == 0 {\n            None\n        } else {\n            self.head.map(|node| unsafe {\n                // Need an unbound lifetime to get 'a\n                let node = &mut *node.as_ptr();\n                self.len -= 1;\n                self.head = node.next;\n                &mut node.element\n            })\n        }\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        (self.len, Some(self.len))\n    }\n\n    #[inline]\n    fn last(mut self) -> Option<&'a mut T> {\n        self.next_back()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T> DoubleEndedIterator for IterMut<'a, T> {\n    #[inline]\n    fn next_back(&mut self) -> Option<&'a mut T> {\n        if self.len == 0 {\n            None\n        } else {\n            self.tail.map(|node| unsafe {\n                // Need an unbound lifetime to get 'a\n                let node = &mut *node.as_ptr();\n                self.len -= 1;\n                self.tail = node.prev;\n                &mut node.element\n            })\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> ExactSizeIterator for IterMut<'_, T> {}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<T> FusedIterator for IterMut<'_, T> {}\n\n/// A cursor over a `LinkedList`.\n///\n/// A `Cursor` is like an iterator, except that it can freely seek back-and-forth.\n///\n/// Cursors always rest between two elements in the list, and index in a logically circular way.\n/// To accommodate this, there is a \"ghost\" non-element that yields `None` between the head and\n/// tail of the list.\n///\n/// When created, cursors start at the front of the list, or the \"ghost\" non-element if the list is empty.\n#[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\npub struct Cursor<'a, T: 'a> {\n    index: usize,\n    current: Option<NonNull<Node<T>>>,\n    list: &'a LinkedList<T>,\n}\n\n#[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\nimpl<T> Clone for Cursor<'_, T> {\n    fn clone(&self) -> Self {\n        let Cursor { index, current, list } = *self;\n        Cursor { index, current, list }\n    }\n}\n\n#[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\nimpl<T: fmt::Debug> fmt::Debug for Cursor<'_, T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"Cursor\").field(&self.list).field(&self.index()).finish()\n    }\n}\n\n/// A cursor over a `LinkedList` with editing operations.\n///\n/// A `Cursor` is like an iterator, except that it can freely seek back-and-forth, and can\n/// safely mutate the list during iteration. This is because the lifetime of its yielded\n/// references is tied to its own lifetime, instead of just the underlying list. This means\n/// cursors cannot yield multiple elements at once.\n///\n/// Cursors always rest between two elements in the list, and index in a logically circular way.\n/// To accommodate this, there is a \"ghost\" non-element that yields `None` between the head and\n/// tail of the list.\n#[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\npub struct CursorMut<'a, T: 'a> {\n    index: usize,\n    current: Option<NonNull<Node<T>>>,\n    list: &'a mut LinkedList<T>,\n}\n\n#[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\nimpl<T: fmt::Debug> fmt::Debug for CursorMut<'_, T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"CursorMut\").field(&self.list).field(&self.index()).finish()\n    }\n}\n\nimpl<'a, T> Cursor<'a, T> {\n    /// Returns the cursor position index within the `LinkedList`.\n    ///\n    /// This returns `None` if the cursor is currently pointing to the\n    /// \"ghost\" non-element.\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn index(&self) -> Option<usize> {\n        let _ = self.current?;\n        Some(self.index)\n    }\n\n    /// Moves the cursor to the next element of the `LinkedList`.\n    ///\n    /// If the cursor is pointing to the \"ghost\" non-element then this will move it to\n    /// the first element of the `LinkedList`. If it is pointing to the last\n    /// element of the `LinkedList` then this will move it to the \"ghost\" non-element.\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn move_next(&mut self) {\n        match self.current.take() {\n            // We had no current element; the cursor was sitting at the start position\n            // Next element should be the head of the list\n            None => {\n                self.current = self.list.head;\n                self.index = 0;\n            }\n            // We had a previous element, so let's go to its next\n            Some(current) => unsafe {\n                self.current = current.as_ref().next;\n                self.index += 1;\n            },\n        }\n    }\n\n    /// Moves the cursor to the previous element of the `LinkedList`.\n    ///\n    /// If the cursor is pointing to the \"ghost\" non-element then this will move it to\n    /// the last element of the `LinkedList`. If it is pointing to the first\n    /// element of the `LinkedList` then this will move it to the \"ghost\" non-element.\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn move_prev(&mut self) {\n        match self.current.take() {\n            // No current. We're at the start of the list. Yield None and jump to the end.\n            None => {\n                self.current = self.list.tail;\n                self.index = self.list.len().checked_sub(1).unwrap_or(0);\n            }\n            // Have a prev. Yield it and go to the previous element.\n            Some(current) => unsafe {\n                self.current = current.as_ref().prev;\n                self.index = self.index.checked_sub(1).unwrap_or_else(|| self.list.len());\n            },\n        }\n    }\n\n    /// Returns a reference to the element that the cursor is currently\n    /// pointing to.\n    ///\n    /// This returns `None` if the cursor is currently pointing to the\n    /// \"ghost\" non-element.\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn current(&self) -> Option<&'a T> {\n        unsafe { self.current.map(|current| &(*current.as_ptr()).element) }\n    }\n\n    /// Returns a reference to the next element.\n    ///\n    /// If the cursor is pointing to the \"ghost\" non-element then this returns\n    /// the first element of the `LinkedList`. If it is pointing to the last\n    /// element of the `LinkedList` then this returns `None`.\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn peek_next(&self) -> Option<&'a T> {\n        unsafe {\n            let next = match self.current {\n                None => self.list.head,\n                Some(current) => current.as_ref().next,\n            };\n            next.map(|next| &(*next.as_ptr()).element)\n        }\n    }\n\n    /// Returns a reference to the previous element.\n    ///\n    /// If the cursor is pointing to the \"ghost\" non-element then this returns\n    /// the last element of the `LinkedList`. If it is pointing to the first\n    /// element of the `LinkedList` then this returns `None`.\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn peek_prev(&self) -> Option<&'a T> {\n        unsafe {\n            let prev = match self.current {\n                None => self.list.tail,\n                Some(current) => current.as_ref().prev,\n            };\n            prev.map(|prev| &(*prev.as_ptr()).element)\n        }\n    }\n}\n\nimpl<'a, T> CursorMut<'a, T> {\n    /// Returns the cursor position index within the `LinkedList`.\n    ///\n    /// This returns `None` if the cursor is currently pointing to the\n    /// \"ghost\" non-element.\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn index(&self) -> Option<usize> {\n        let _ = self.current?;\n        Some(self.index)\n    }\n\n    /// Moves the cursor to the next element of the `LinkedList`.\n    ///\n    /// If the cursor is pointing to the \"ghost\" non-element then this will move it to\n    /// the first element of the `LinkedList`. If it is pointing to the last\n    /// element of the `LinkedList` then this will move it to the \"ghost\" non-element.\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn move_next(&mut self) {\n        match self.current.take() {\n            // We had no current element; the cursor was sitting at the start position\n            // Next element should be the head of the list\n            None => {\n                self.current = self.list.head;\n                self.index = 0;\n            }\n            // We had a previous element, so let's go to its next\n            Some(current) => unsafe {\n                self.current = current.as_ref().next;\n                self.index += 1;\n            },\n        }\n    }\n\n    /// Moves the cursor to the previous element of the `LinkedList`.\n    ///\n    /// If the cursor is pointing to the \"ghost\" non-element then this will move it to\n    /// the last element of the `LinkedList`. If it is pointing to the first\n    /// element of the `LinkedList` then this will move it to the \"ghost\" non-element.\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn move_prev(&mut self) {\n        match self.current.take() {\n            // No current. We're at the start of the list. Yield None and jump to the end.\n            None => {\n                self.current = self.list.tail;\n                self.index = self.list.len().checked_sub(1).unwrap_or(0);\n            }\n            // Have a prev. Yield it and go to the previous element.\n            Some(current) => unsafe {\n                self.current = current.as_ref().prev;\n                self.index = self.index.checked_sub(1).unwrap_or_else(|| self.list.len());\n            },\n        }\n    }\n\n    /// Returns a reference to the element that the cursor is currently\n    /// pointing to.\n    ///\n    /// This returns `None` if the cursor is currently pointing to the\n    /// \"ghost\" non-element.\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn current(&mut self) -> Option<&mut T> {\n        unsafe { self.current.map(|current| &mut (*current.as_ptr()).element) }\n    }\n\n    /// Returns a reference to the next element.\n    ///\n    /// If the cursor is pointing to the \"ghost\" non-element then this returns\n    /// the first element of the `LinkedList`. If it is pointing to the last\n    /// element of the `LinkedList` then this returns `None`.\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn peek_next(&mut self) -> Option<&mut T> {\n        unsafe {\n            let next = match self.current {\n                None => self.list.head,\n                Some(current) => current.as_ref().next,\n            };\n            next.map(|next| &mut (*next.as_ptr()).element)\n        }\n    }\n\n    /// Returns a reference to the previous element.\n    ///\n    /// If the cursor is pointing to the \"ghost\" non-element then this returns\n    /// the last element of the `LinkedList`. If it is pointing to the first\n    /// element of the `LinkedList` then this returns `None`.\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn peek_prev(&mut self) -> Option<&mut T> {\n        unsafe {\n            let prev = match self.current {\n                None => self.list.tail,\n                Some(current) => current.as_ref().prev,\n            };\n            prev.map(|prev| &mut (*prev.as_ptr()).element)\n        }\n    }\n\n    /// Returns a read-only cursor pointing to the current element.\n    ///\n    /// The lifetime of the returned `Cursor` is bound to that of the\n    /// `CursorMut`, which means it cannot outlive the `CursorMut` and that the\n    /// `CursorMut` is frozen for the lifetime of the `Cursor`.\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn as_cursor(&self) -> Cursor<'_, T> {\n        Cursor { list: self.list, current: self.current, index: self.index }\n    }\n}\n\n// Now the list editing operations\n\nimpl<'a, T> CursorMut<'a, T> {\n    /// Inserts a new element into the `LinkedList` after the current one.\n    ///\n    /// If the cursor is pointing at the \"ghost\" non-element then the new element is\n    /// inserted at the front of the `LinkedList`.\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn insert_after(&mut self, item: T) {\n        unsafe {\n            let spliced_node = Box::leak(Box::new(Node::new(item))).into();\n            let node_next = match self.current {\n                None => self.list.head,\n                Some(node) => node.as_ref().next,\n            };\n            self.list.splice_nodes(self.current, node_next, spliced_node, spliced_node, 1);\n            if self.current.is_none() {\n                // The \"ghost\" non-element's index has changed.\n                self.index = self.list.len;\n            }\n        }\n    }\n\n    /// Inserts a new element into the `LinkedList` before the current one.\n    ///\n    /// If the cursor is pointing at the \"ghost\" non-element then the new element is\n    /// inserted at the end of the `LinkedList`.\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn insert_before(&mut self, item: T) {\n        unsafe {\n            let spliced_node = Box::leak(Box::new(Node::new(item))).into();\n            let node_prev = match self.current {\n                None => self.list.tail,\n                Some(node) => node.as_ref().prev,\n            };\n            self.list.splice_nodes(node_prev, self.current, spliced_node, spliced_node, 1);\n            self.index += 1;\n        }\n    }\n\n    /// Removes the current element from the `LinkedList`.\n    ///\n    /// The element that was removed is returned, and the cursor is\n    /// moved to point to the next element in the `LinkedList`.\n    ///\n    /// If the cursor is currently pointing to the \"ghost\" non-element then no element\n    /// is removed and `None` is returned.\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn remove_current(&mut self) -> Option<T> {\n        let unlinked_node = self.current?;\n        unsafe {\n            self.current = unlinked_node.as_ref().next;\n            self.list.unlink_node(unlinked_node);\n            let unlinked_node = Box::from_raw(unlinked_node.as_ptr());\n            Some(unlinked_node.element)\n        }\n    }\n\n    /// Removes the current element from the `LinkedList` without deallocating the list node.\n    ///\n    /// The node that was removed is returned as a new `LinkedList` containing only this node.\n    /// The cursor is moved to point to the next element in the current `LinkedList`.\n    ///\n    /// If the cursor is currently pointing to the \"ghost\" non-element then no element\n    /// is removed and `None` is returned.\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn remove_current_as_list(&mut self) -> Option<LinkedList<T>> {\n        let mut unlinked_node = self.current?;\n        unsafe {\n            self.current = unlinked_node.as_ref().next;\n            self.list.unlink_node(unlinked_node);\n\n            unlinked_node.as_mut().prev = None;\n            unlinked_node.as_mut().next = None;\n            Some(LinkedList {\n                head: Some(unlinked_node),\n                tail: Some(unlinked_node),\n                len: 1,\n                marker: PhantomData,\n            })\n        }\n    }\n\n    /// Inserts the elements from the given `LinkedList` after the current one.\n    ///\n    /// If the cursor is pointing at the \"ghost\" non-element then the new elements are\n    /// inserted at the start of the `LinkedList`.\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn splice_after(&mut self, list: LinkedList<T>) {\n        unsafe {\n            let (splice_head, splice_tail, splice_len) = match list.detach_all_nodes() {\n                Some(parts) => parts,\n                _ => return,\n            };\n            let node_next = match self.current {\n                None => self.list.head,\n                Some(node) => node.as_ref().next,\n            };\n            self.list.splice_nodes(self.current, node_next, splice_head, splice_tail, splice_len);\n            if self.current.is_none() {\n                // The \"ghost\" non-element's index has changed.\n                self.index = self.list.len;\n            }\n        }\n    }\n\n    /// Inserts the elements from the given `LinkedList` before the current one.\n    ///\n    /// If the cursor is pointing at the \"ghost\" non-element then the new elements are\n    /// inserted at the end of the `LinkedList`.\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn splice_before(&mut self, list: LinkedList<T>) {\n        unsafe {\n            let (splice_head, splice_tail, splice_len) = match list.detach_all_nodes() {\n                Some(parts) => parts,\n                _ => return,\n            };\n            let node_prev = match self.current {\n                None => self.list.tail,\n                Some(node) => node.as_ref().prev,\n            };\n            self.list.splice_nodes(node_prev, self.current, splice_head, splice_tail, splice_len);\n            self.index += splice_len;\n        }\n    }\n\n    /// Splits the list into two after the current element. This will return a\n    /// new list consisting of everything after the cursor, with the original\n    /// list retaining everything before.\n    ///\n    /// If the cursor is pointing at the \"ghost\" non-element then the entire contents\n    /// of the `LinkedList` are moved.\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn split_after(&mut self) -> LinkedList<T> {\n        let split_off_idx = if self.index == self.list.len { 0 } else { self.index + 1 };\n        if self.index == self.list.len {\n            // The \"ghost\" non-element's index has changed to 0.\n            self.index = 0;\n        }\n        unsafe { self.list.split_off_after_node(self.current, split_off_idx) }\n    }\n\n    /// Splits the list into two before the current element. This will return a\n    /// new list consisting of everything before the cursor, with the original\n    /// list retaining everything after.\n    ///\n    /// If the cursor is pointing at the \"ghost\" non-element then the entire contents\n    /// of the `LinkedList` are moved.\n    #[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\n    pub fn split_before(&mut self) -> LinkedList<T> {\n        let split_off_idx = self.index;\n        self.index = 0;\n        unsafe { self.list.split_off_before_node(self.current, split_off_idx) }\n    }\n}\n\n/// An iterator produced by calling `drain_filter` on LinkedList.\n#[unstable(feature = \"drain_filter\", reason = \"recently added\", issue = \"43244\")]\npub struct DrainFilter<'a, T: 'a, F: 'a>\nwhere\n    F: FnMut(&mut T) -> bool,\n{\n    list: &'a mut LinkedList<T>,\n    it: Option<NonNull<Node<T>>>,\n    pred: F,\n    idx: usize,\n    old_len: usize,\n}\n\n#[unstable(feature = \"drain_filter\", reason = \"recently added\", issue = \"43244\")]\nimpl<T, F> Iterator for DrainFilter<'_, T, F>\nwhere\n    F: FnMut(&mut T) -> bool,\n{\n    type Item = T;\n\n    fn next(&mut self) -> Option<T> {\n        while let Some(mut node) = self.it {\n            unsafe {\n                self.it = node.as_ref().next;\n                self.idx += 1;\n\n                if (self.pred)(&mut node.as_mut().element) {\n                    // `unlink_node` is okay with aliasing `element` references.\n                    self.list.unlink_node(node);\n                    return Some(Box::from_raw(node.as_ptr()).element);\n                }\n            }\n        }\n\n        None\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        (0, Some(self.old_len - self.idx))\n    }\n}\n\n#[unstable(feature = \"drain_filter\", reason = \"recently added\", issue = \"43244\")]\nimpl<T, F> Drop for DrainFilter<'_, T, F>\nwhere\n    F: FnMut(&mut T) -> bool,\n{\n    fn drop(&mut self) {\n        struct DropGuard<'r, 'a, T, F>(&'r mut DrainFilter<'a, T, F>)\n        where\n            F: FnMut(&mut T) -> bool;\n\n        impl<'r, 'a, T, F> Drop for DropGuard<'r, 'a, T, F>\n        where\n            F: FnMut(&mut T) -> bool,\n        {\n            fn drop(&mut self) {\n                self.0.for_each(drop);\n            }\n        }\n\n        while let Some(item) = self.next() {\n            let guard = DropGuard(self);\n            drop(item);\n            mem::forget(guard);\n        }\n    }\n}\n\n#[unstable(feature = \"drain_filter\", reason = \"recently added\", issue = \"43244\")]\nimpl<T: fmt::Debug, F> fmt::Debug for DrainFilter<'_, T, F>\nwhere\n    F: FnMut(&mut T) -> bool,\n{\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"DrainFilter\").field(&self.list).finish()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> Iterator for IntoIter<T> {\n    type Item = T;\n\n    #[inline]\n    fn next(&mut self) -> Option<T> {\n        self.list.pop_front()\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        (self.list.len, Some(self.list.len))\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> DoubleEndedIterator for IntoIter<T> {\n    #[inline]\n    fn next_back(&mut self) -> Option<T> {\n        self.list.pop_back()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> ExactSizeIterator for IntoIter<T> {}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<T> FusedIterator for IntoIter<T> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> FromIterator<T> for LinkedList<T> {\n    fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self {\n        let mut list = Self::new();\n        list.extend(iter);\n        list\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> IntoIterator for LinkedList<T> {\n    type Item = T;\n    type IntoIter = IntoIter<T>;\n\n    /// Consumes the list into an iterator yielding elements by value.\n    #[inline]\n    fn into_iter(self) -> IntoIter<T> {\n        IntoIter { list: self }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T> IntoIterator for &'a LinkedList<T> {\n    type Item = &'a T;\n    type IntoIter = Iter<'a, T>;\n\n    fn into_iter(self) -> Iter<'a, T> {\n        self.iter()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T> IntoIterator for &'a mut LinkedList<T> {\n    type Item = &'a mut T;\n    type IntoIter = IterMut<'a, T>;\n\n    fn into_iter(self) -> IterMut<'a, T> {\n        self.iter_mut()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> Extend<T> for LinkedList<T> {\n    fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I) {\n        <Self as SpecExtend<I>>::spec_extend(self, iter);\n    }\n\n    #[inline]\n    fn extend_one(&mut self, elem: T) {\n        self.push_back(elem);\n    }\n}\n\nimpl<I: IntoIterator> SpecExtend<I> for LinkedList<I::Item> {\n    default fn spec_extend(&mut self, iter: I) {\n        iter.into_iter().for_each(move |elt| self.push_back(elt));\n    }\n}\n\nimpl<T> SpecExtend<LinkedList<T>> for LinkedList<T> {\n    fn spec_extend(&mut self, ref mut other: LinkedList<T>) {\n        self.append(other);\n    }\n}\n\n#[stable(feature = \"extend_ref\", since = \"1.2.0\")]\nimpl<'a, T: 'a + Copy> Extend<&'a T> for LinkedList<T> {\n    fn extend<I: IntoIterator<Item = &'a T>>(&mut self, iter: I) {\n        self.extend(iter.into_iter().cloned());\n    }\n\n    #[inline]\n    fn extend_one(&mut self, &elem: &'a T) {\n        self.push_back(elem);\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: PartialEq> PartialEq for LinkedList<T> {\n    fn eq(&self, other: &Self) -> bool {\n        self.len() == other.len() && self.iter().eq(other)\n    }\n\n    fn ne(&self, other: &Self) -> bool {\n        self.len() != other.len() || self.iter().ne(other)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Eq> Eq for LinkedList<T> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: PartialOrd> PartialOrd for LinkedList<T> {\n    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {\n        self.iter().partial_cmp(other)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Ord> Ord for LinkedList<T> {\n    #[inline]\n    fn cmp(&self, other: &Self) -> Ordering {\n        self.iter().cmp(other)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Clone> Clone for LinkedList<T> {\n    fn clone(&self) -> Self {\n        self.iter().cloned().collect()\n    }\n\n    fn clone_from(&mut self, other: &Self) {\n        let mut iter_other = other.iter();\n        if self.len() > other.len() {\n            self.split_off(other.len());\n        }\n        for (elem, elem_other) in self.iter_mut().zip(&mut iter_other) {\n            elem.clone_from(elem_other);\n        }\n        if !iter_other.is_empty() {\n            self.extend(iter_other.cloned());\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: fmt::Debug> fmt::Debug for LinkedList<T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_list().entries(self).finish()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Hash> Hash for LinkedList<T> {\n    fn hash<H: Hasher>(&self, state: &mut H) {\n        self.len().hash(state);\n        for elt in self {\n            elt.hash(state);\n        }\n    }\n}\n\n// Ensure that `LinkedList` and its read-only iterators are covariant in their type parameters.\n#[allow(dead_code)]\nfn assert_covariance() {\n    fn a<'a>(x: LinkedList<&'static str>) -> LinkedList<&'a str> {\n        x\n    }\n    fn b<'i, 'a>(x: Iter<'i, &'static str>) -> Iter<'i, &'a str> {\n        x\n    }\n    fn c<'a>(x: IntoIter<&'static str>) -> IntoIter<&'a str> {\n        x\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nunsafe impl<T: Send> Send for LinkedList<T> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nunsafe impl<T: Sync> Sync for LinkedList<T> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nunsafe impl<T: Sync> Send for Iter<'_, T> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nunsafe impl<T: Sync> Sync for Iter<'_, T> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nunsafe impl<T: Send> Send for IterMut<'_, T> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nunsafe impl<T: Sync> Sync for IterMut<'_, T> {}\n\n#[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\nunsafe impl<T: Sync> Send for Cursor<'_, T> {}\n\n#[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\nunsafe impl<T: Sync> Sync for Cursor<'_, T> {}\n\n#[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\nunsafe impl<T: Send> Send for CursorMut<'_, T> {}\n\n#[unstable(feature = \"linked_list_cursors\", issue = \"58533\")]\nunsafe impl<T: Sync> Sync for CursorMut<'_, T> {}\nuse super::*;\n\nuse std::thread;\nuse std::vec::Vec;\n\nuse rand::{thread_rng, RngCore};\n\nfn list_from<T: Clone>(v: &[T]) -> LinkedList<T> {\n    v.iter().cloned().collect()\n}\n\npub fn check_links<T>(list: &LinkedList<T>) {\n    unsafe {\n        let mut len = 0;\n        let mut last_ptr: Option<&Node<T>> = None;\n        let mut node_ptr: &Node<T>;\n        match list.head {\n            None => {\n                // tail node should also be None.\n                assert!(list.tail.is_none());\n                assert_eq!(0, list.len);\n                return;\n            }\n            Some(node) => node_ptr = &*node.as_ptr(),\n        }\n        loop {\n            match (last_ptr, node_ptr.prev) {\n                (None, None) => {}\n                (None, _) => panic!(\"prev link for head\"),\n                (Some(p), Some(pptr)) => {\n                    assert_eq!(p as *const Node<T>, pptr.as_ptr() as *const Node<T>);\n                }\n                _ => panic!(\"prev link is none, not good\"),\n            }\n            match node_ptr.next {\n                Some(next) => {\n                    last_ptr = Some(node_ptr);\n                    node_ptr = &*next.as_ptr();\n                    len += 1;\n                }\n                None => {\n                    len += 1;\n                    break;\n                }\n            }\n        }\n\n        // verify that the tail node points to the last node.\n        let tail = list.tail.as_ref().expect(\"some tail node\").as_ref();\n        assert_eq!(tail as *const Node<T>, node_ptr as *const Node<T>);\n        // check that len matches interior links.\n        assert_eq!(len, list.len);\n    }\n}\n\n#[test]\nfn test_append() {\n    // Empty to empty\n    {\n        let mut m = LinkedList::<i32>::new();\n        let mut n = LinkedList::new();\n        m.append(&mut n);\n        check_links(&m);\n        assert_eq!(m.len(), 0);\n        assert_eq!(n.len(), 0);\n    }\n    // Non-empty to empty\n    {\n        let mut m = LinkedList::new();\n        let mut n = LinkedList::new();\n        n.push_back(2);\n        m.append(&mut n);\n        check_links(&m);\n        assert_eq!(m.len(), 1);\n        assert_eq!(m.pop_back(), Some(2));\n        assert_eq!(n.len(), 0);\n        check_links(&m);\n    }\n    // Empty to non-empty\n    {\n        let mut m = LinkedList::new();\n        let mut n = LinkedList::new();\n        m.push_back(2);\n        m.append(&mut n);\n        check_links(&m);\n        assert_eq!(m.len(), 1);\n        assert_eq!(m.pop_back(), Some(2));\n        check_links(&m);\n    }\n\n    // Non-empty to non-empty\n    let v = vec![1, 2, 3, 4, 5];\n    let u = vec![9, 8, 1, 2, 3, 4, 5];\n    let mut m = list_from(&v);\n    let mut n = list_from(&u);\n    m.append(&mut n);\n    check_links(&m);\n    let mut sum = v;\n    sum.extend_from_slice(&u);\n    assert_eq!(sum.len(), m.len());\n    for elt in sum {\n        assert_eq!(m.pop_front(), Some(elt))\n    }\n    assert_eq!(n.len(), 0);\n    // Let's make sure it's working properly, since we\n    // did some direct changes to private members.\n    n.push_back(3);\n    assert_eq!(n.len(), 1);\n    assert_eq!(n.pop_front(), Some(3));\n    check_links(&n);\n}\n\n#[test]\nfn test_clone_from() {\n    // Short cloned from long\n    {\n        let v = vec![1, 2, 3, 4, 5];\n        let u = vec![8, 7, 6, 2, 3, 4, 5];\n        let mut m = list_from(&v);\n        let n = list_from(&u);\n        m.clone_from(&n);\n        check_links(&m);\n        assert_eq!(m, n);\n        for elt in u {\n            assert_eq!(m.pop_front(), Some(elt))\n        }\n    }\n    // Long cloned from short\n    {\n        let v = vec![1, 2, 3, 4, 5];\n        let u = vec![6, 7, 8];\n        let mut m = list_from(&v);\n        let n = list_from(&u);\n        m.clone_from(&n);\n        check_links(&m);\n        assert_eq!(m, n);\n        for elt in u {\n            assert_eq!(m.pop_front(), Some(elt))\n        }\n    }\n    // Two equal length lists\n    {\n        let v = vec![1, 2, 3, 4, 5];\n        let u = vec![9, 8, 1, 2, 3];\n        let mut m = list_from(&v);\n        let n = list_from(&u);\n        m.clone_from(&n);\n        check_links(&m);\n        assert_eq!(m, n);\n        for elt in u {\n            assert_eq!(m.pop_front(), Some(elt))\n        }\n    }\n}\n\n#[test]\n#[cfg_attr(target_os = \"emscripten\", ignore)]\nfn test_send() {\n    let n = list_from(&[1, 2, 3]);\n    thread::spawn(move || {\n        check_links(&n);\n        let a: &[_] = &[&1, &2, &3];\n        assert_eq!(a, &*n.iter().collect::<Vec<_>>());\n    })\n    .join()\n    .ok()\n    .unwrap();\n}\n\n#[test]\nfn test_fuzz() {\n    for _ in 0..25 {\n        fuzz_test(3);\n        fuzz_test(16);\n        #[cfg(not(miri))] // Miri is too slow\n        fuzz_test(189);\n    }\n}\n\n#[test]\nfn test_26021() {\n    // There was a bug in split_off that failed to null out the RHS's head's prev ptr.\n    // This caused the RHS's dtor to walk up into the LHS at drop and delete all of\n    // its nodes.\n    //\n    // https://github.com/rust-lang/rust/issues/26021\n    let mut v1 = LinkedList::new();\n    v1.push_front(1);\n    v1.push_front(1);\n    v1.push_front(1);\n    v1.push_front(1);\n    let _ = v1.split_off(3); // Dropping this now should not cause laundry consumption\n    assert_eq!(v1.len(), 3);\n\n    assert_eq!(v1.iter().len(), 3);\n    assert_eq!(v1.iter().collect::<Vec<_>>().len(), 3);\n}\n\n#[test]\nfn test_split_off() {\n    let mut v1 = LinkedList::new();\n    v1.push_front(1);\n    v1.push_front(1);\n    v1.push_front(1);\n    v1.push_front(1);\n\n    // test all splits\n    for ix in 0..1 + v1.len() {\n        let mut a = v1.clone();\n        let b = a.split_off(ix);\n        check_links(&a);\n        check_links(&b);\n        a.extend(b);\n        assert_eq!(v1, a);\n    }\n}\n\nfn fuzz_test(sz: i32) {\n    let mut m: LinkedList<_> = LinkedList::new();\n    let mut v = vec![];\n    for i in 0..sz {\n        check_links(&m);\n        let r: u8 = thread_rng().next_u32() as u8;\n        match r % 6 {\n            0 => {\n                m.pop_back();\n                v.pop();\n            }\n            1 => {\n                if !v.is_empty() {\n                    m.pop_front();\n                    v.remove(0);\n                }\n            }\n            2 | 4 => {\n                m.push_front(-i);\n                v.insert(0, -i);\n            }\n            3 | 5 | _ => {\n                m.push_back(i);\n                v.push(i);\n            }\n        }\n    }\n\n    check_links(&m);\n\n    let mut i = 0;\n    for (a, &b) in m.into_iter().zip(&v) {\n        i += 1;\n        assert_eq!(a, b);\n    }\n    assert_eq!(i, v.len());\n}\n\n#[test]\nfn drain_filter_test() {\n    let mut m: LinkedList<u32> = LinkedList::new();\n    m.extend(&[1, 2, 3, 4, 5, 6]);\n    let deleted = m.drain_filter(|v| *v < 4).collect::<Vec<_>>();\n\n    check_links(&m);\n\n    assert_eq!(deleted, &[1, 2, 3]);\n    assert_eq!(m.into_iter().collect::<Vec<_>>(), &[4, 5, 6]);\n}\n\n#[test]\nfn drain_to_empty_test() {\n    let mut m: LinkedList<u32> = LinkedList::new();\n    m.extend(&[1, 2, 3, 4, 5, 6]);\n    let deleted = m.drain_filter(|_| true).collect::<Vec<_>>();\n\n    check_links(&m);\n\n    assert_eq!(deleted, &[1, 2, 3, 4, 5, 6]);\n    assert_eq!(m.into_iter().collect::<Vec<_>>(), &[]);\n}\n\n#[test]\nfn test_cursor_move_peek() {\n    let mut m: LinkedList<u32> = LinkedList::new();\n    m.extend(&[1, 2, 3, 4, 5, 6]);\n    let mut cursor = m.cursor_front();\n    assert_eq!(cursor.current(), Some(&1));\n    assert_eq!(cursor.peek_next(), Some(&2));\n    assert_eq!(cursor.peek_prev(), None);\n    assert_eq!(cursor.index(), Some(0));\n    cursor.move_prev();\n    assert_eq!(cursor.current(), None);\n    assert_eq!(cursor.peek_next(), Some(&1));\n    assert_eq!(cursor.peek_prev(), Some(&6));\n    assert_eq!(cursor.index(), None);\n    cursor.move_next();\n    cursor.move_next();\n    assert_eq!(cursor.current(), Some(&2));\n    assert_eq!(cursor.peek_next(), Some(&3));\n    assert_eq!(cursor.peek_prev(), Some(&1));\n    assert_eq!(cursor.index(), Some(1));\n\n    let mut cursor = m.cursor_back();\n    assert_eq!(cursor.current(), Some(&6));\n    assert_eq!(cursor.peek_next(), None);\n    assert_eq!(cursor.peek_prev(), Some(&5));\n    assert_eq!(cursor.index(), Some(5));\n    cursor.move_next();\n    assert_eq!(cursor.current(), None);\n    assert_eq!(cursor.peek_next(), Some(&1));\n    assert_eq!(cursor.peek_prev(), Some(&6));\n    assert_eq!(cursor.index(), None);\n    cursor.move_prev();\n    cursor.move_prev();\n    assert_eq!(cursor.current(), Some(&5));\n    assert_eq!(cursor.peek_next(), Some(&6));\n    assert_eq!(cursor.peek_prev(), Some(&4));\n    assert_eq!(cursor.index(), Some(4));\n\n    let mut m: LinkedList<u32> = LinkedList::new();\n    m.extend(&[1, 2, 3, 4, 5, 6]);\n    let mut cursor = m.cursor_front_mut();\n    assert_eq!(cursor.current(), Some(&mut 1));\n    assert_eq!(cursor.peek_next(), Some(&mut 2));\n    assert_eq!(cursor.peek_prev(), None);\n    assert_eq!(cursor.index(), Some(0));\n    cursor.move_prev();\n    assert_eq!(cursor.current(), None);\n    assert_eq!(cursor.peek_next(), Some(&mut 1));\n    assert_eq!(cursor.peek_prev(), Some(&mut 6));\n    assert_eq!(cursor.index(), None);\n    cursor.move_next();\n    cursor.move_next();\n    assert_eq!(cursor.current(), Some(&mut 2));\n    assert_eq!(cursor.peek_next(), Some(&mut 3));\n    assert_eq!(cursor.peek_prev(), Some(&mut 1));\n    assert_eq!(cursor.index(), Some(1));\n    let mut cursor2 = cursor.as_cursor();\n    assert_eq!(cursor2.current(), Some(&2));\n    assert_eq!(cursor2.index(), Some(1));\n    cursor2.move_next();\n    assert_eq!(cursor2.current(), Some(&3));\n    assert_eq!(cursor2.index(), Some(2));\n    assert_eq!(cursor.current(), Some(&mut 2));\n    assert_eq!(cursor.index(), Some(1));\n\n    let mut m: LinkedList<u32> = LinkedList::new();\n    m.extend(&[1, 2, 3, 4, 5, 6]);\n    let mut cursor = m.cursor_back_mut();\n    assert_eq!(cursor.current(), Some(&mut 6));\n    assert_eq!(cursor.peek_next(), None);\n    assert_eq!(cursor.peek_prev(), Some(&mut 5));\n    assert_eq!(cursor.index(), Some(5));\n    cursor.move_next();\n    assert_eq!(cursor.current(), None);\n    assert_eq!(cursor.peek_next(), Some(&mut 1));\n    assert_eq!(cursor.peek_prev(), Some(&mut 6));\n    assert_eq!(cursor.index(), None);\n    cursor.move_prev();\n    cursor.move_prev();\n    assert_eq!(cursor.current(), Some(&mut 5));\n    assert_eq!(cursor.peek_next(), Some(&mut 6));\n    assert_eq!(cursor.peek_prev(), Some(&mut 4));\n    assert_eq!(cursor.index(), Some(4));\n    let mut cursor2 = cursor.as_cursor();\n    assert_eq!(cursor2.current(), Some(&5));\n    assert_eq!(cursor2.index(), Some(4));\n    cursor2.move_prev();\n    assert_eq!(cursor2.current(), Some(&4));\n    assert_eq!(cursor2.index(), Some(3));\n    assert_eq!(cursor.current(), Some(&mut 5));\n    assert_eq!(cursor.index(), Some(4));\n}\n\n#[test]\nfn test_cursor_mut_insert() {\n    let mut m: LinkedList<u32> = LinkedList::new();\n    m.extend(&[1, 2, 3, 4, 5, 6]);\n    let mut cursor = m.cursor_front_mut();\n    cursor.insert_before(7);\n    cursor.insert_after(8);\n    check_links(&m);\n    assert_eq!(m.iter().cloned().collect::<Vec<_>>(), &[7, 1, 8, 2, 3, 4, 5, 6]);\n    let mut cursor = m.cursor_front_mut();\n    cursor.move_prev();\n    cursor.insert_before(9);\n    cursor.insert_after(10);\n    check_links(&m);\n    assert_eq!(m.iter().cloned().collect::<Vec<_>>(), &[10, 7, 1, 8, 2, 3, 4, 5, 6, 9]);\n    let mut cursor = m.cursor_front_mut();\n    cursor.move_prev();\n    assert_eq!(cursor.remove_current(), None);\n    cursor.move_next();\n    cursor.move_next();\n    assert_eq!(cursor.remove_current(), Some(7));\n    cursor.move_prev();\n    cursor.move_prev();\n    cursor.move_prev();\n    assert_eq!(cursor.remove_current(), Some(9));\n    cursor.move_next();\n    assert_eq!(cursor.remove_current(), Some(10));\n    check_links(&m);\n    assert_eq!(m.iter().cloned().collect::<Vec<_>>(), &[1, 8, 2, 3, 4, 5, 6]);\n    let mut cursor = m.cursor_front_mut();\n    let mut p: LinkedList<u32> = LinkedList::new();\n    p.extend(&[100, 101, 102, 103]);\n    let mut q: LinkedList<u32> = LinkedList::new();\n    q.extend(&[200, 201, 202, 203]);\n    cursor.splice_after(p);\n    cursor.splice_before(q);\n    check_links(&m);\n    assert_eq!(\n        m.iter().cloned().collect::<Vec<_>>(),\n        &[200, 201, 202, 203, 1, 100, 101, 102, 103, 8, 2, 3, 4, 5, 6]\n    );\n    let mut cursor = m.cursor_front_mut();\n    cursor.move_prev();\n    let tmp = cursor.split_before();\n    assert_eq!(m.into_iter().collect::<Vec<_>>(), &[]);\n    m = tmp;\n    let mut cursor = m.cursor_front_mut();\n    cursor.move_next();\n    cursor.move_next();\n    cursor.move_next();\n    cursor.move_next();\n    cursor.move_next();\n    cursor.move_next();\n    let tmp = cursor.split_after();\n    assert_eq!(tmp.into_iter().collect::<Vec<_>>(), &[102, 103, 8, 2, 3, 4, 5, 6]);\n    check_links(&m);\n    assert_eq!(m.iter().cloned().collect::<Vec<_>>(), &[200, 201, 202, 203, 1, 100, 101]);\n}\nuse super::merge_iter::MergeIterInner;\nuse super::node::{self, Root};\nuse core::iter::FusedIterator;\n\nimpl<K, V> Root<K, V> {\n    /// Appends all key-value pairs from the union of two ascending iterators,\n    /// incrementing a `length` variable along the way. The latter makes it\n    /// easier for the caller to avoid a leak when a drop handler panicks.\n    ///\n    /// If both iterators produce the same key, this method drops the pair from\n    /// the left iterator and appends the pair from the right iterator.\n    ///\n    /// If you want the tree to end up in a strictly ascending order, like for\n    /// a `BTreeMap`, both iterators should produce keys in strictly ascending\n    /// order, each greater than all keys in the tree, including any keys\n    /// already in the tree upon entry.\n    pub fn append_from_sorted_iters<I>(&mut self, left: I, right: I, length: &mut usize)\n    where\n        K: Ord,\n        I: Iterator<Item = (K, V)> + FusedIterator,\n    {\n        // We prepare to merge `left` and `right` into a sorted sequence in linear time.\n        let iter = MergeIter(MergeIterInner::new(left, right));\n\n        // Meanwhile, we build a tree from the sorted sequence in linear time.\n        self.bulk_push(iter, length)\n    }\n\n    /// Pushes all key-value pairs to the end of the tree, incrementing a\n    /// `length` variable along the way. The latter makes it easier for the\n    /// caller to avoid a leak when the iterator panicks.\n    pub fn bulk_push<I>(&mut self, iter: I, length: &mut usize)\n    where\n        I: Iterator<Item = (K, V)>,\n    {\n        let mut cur_node = self.borrow_mut().last_leaf_edge().into_node();\n        // Iterate through all key-value pairs, pushing them into nodes at the right level.\n        for (key, value) in iter {\n            // Try to push key-value pair into the current leaf node.\n            if cur_node.len() < node::CAPACITY {\n                cur_node.push(key, value);\n            } else {\n                // No space left, go up and push there.\n                let mut open_node;\n                let mut test_node = cur_node.forget_type();\n                loop {\n                    match test_node.ascend() {\n                        Ok(parent) => {\n                            let parent = parent.into_node();\n                            if parent.len() < node::CAPACITY {\n                                // Found a node with space left, push here.\n                                open_node = parent;\n                                break;\n                            } else {\n                                // Go up again.\n                                test_node = parent.forget_type();\n                            }\n                        }\n                        Err(_) => {\n                            // We are at the top, create a new root node and push there.\n                            open_node = self.push_internal_level();\n                            break;\n                        }\n                    }\n                }\n\n                // Push key-value pair and new right subtree.\n                let tree_height = open_node.height() - 1;\n                let mut right_tree = Root::new();\n                for _ in 0..tree_height {\n                    right_tree.push_internal_level();\n                }\n                open_node.push(key, value, right_tree);\n\n                // Go down to the right-most leaf again.\n                cur_node = open_node.forget_type().last_leaf_edge().into_node();\n            }\n\n            // Increment length every iteration, to make sure the map drops\n            // the appended elements even if advancing the iterator panicks.\n            *length += 1;\n        }\n        self.fix_right_border_of_plentiful();\n    }\n}\n\n// An iterator for merging two sorted sequences into one\nstruct MergeIter<K, V, I: Iterator<Item = (K, V)>>(MergeIterInner<I>);\n\nimpl<K: Ord, V, I> Iterator for MergeIter<K, V, I>\nwhere\n    I: Iterator<Item = (K, V)> + FusedIterator,\n{\n    type Item = (K, V);\n\n    /// If two keys are equal, returns the key-value pair from the right source.\n    fn next(&mut self) -> Option<(K, V)> {\n        let (a_next, b_next) = self.0.nexts(|a: &(K, V), b: &(K, V)| K::cmp(&a.0, &b.0));\n        b_next.or(a_next)\n    }\n}\nuse crate::fmt::Debug;\nuse std::cmp::Ordering;\nuse std::sync::atomic::{AtomicUsize, Ordering::SeqCst};\n\n/// A blueprint for crash test dummy instances that monitor particular events.\n/// Some instances may be configured to panic at some point.\n/// Events are `clone`, `drop` or some anonymous `query`.\n///\n/// Crash test dummies are identified and ordered by an id, so they can be used\n/// as keys in a BTreeMap. The implementation intentionally uses does not rely\n/// on anything defined in the crate, apart from the `Debug` trait.\n#[derive(Debug)]\npub struct CrashTestDummy {\n    id: usize,\n    cloned: AtomicUsize,\n    dropped: AtomicUsize,\n    queried: AtomicUsize,\n}\n\nimpl CrashTestDummy {\n    /// Creates a crash test dummy design. The `id` determines order and equality of instances.\n    pub fn new(id: usize) -> CrashTestDummy {\n        CrashTestDummy {\n            id,\n            cloned: AtomicUsize::new(0),\n            dropped: AtomicUsize::new(0),\n            queried: AtomicUsize::new(0),\n        }\n    }\n\n    /// Creates an instance of a crash test dummy that records what events it experiences\n    /// and optionally panics.\n    pub fn spawn(&self, panic: Panic) -> Instance<'_> {\n        Instance { origin: self, panic }\n    }\n\n    /// Returns how many times instances of the dummy have been cloned.\n    pub fn cloned(&self) -> usize {\n        self.cloned.load(SeqCst)\n    }\n\n    /// Returns how many times instances of the dummy have been dropped.\n    pub fn dropped(&self) -> usize {\n        self.dropped.load(SeqCst)\n    }\n\n    /// Returns how many times instances of the dummy have had their `query` member invoked.\n    pub fn queried(&self) -> usize {\n        self.queried.load(SeqCst)\n    }\n}\n\n#[derive(Debug)]\npub struct Instance<'a> {\n    origin: &'a CrashTestDummy,\n    panic: Panic,\n}\n\n#[derive(Copy, Clone, Debug, PartialEq, Eq)]\npub enum Panic {\n    Never,\n    InClone,\n    InDrop,\n    InQuery,\n}\n\nimpl Instance<'_> {\n    pub fn id(&self) -> usize {\n        self.origin.id\n    }\n\n    /// Some anonymous query, the result of which is already given.\n    pub fn query<R>(&self, result: R) -> R {\n        self.origin.queried.fetch_add(1, SeqCst);\n        if self.panic == Panic::InQuery {\n            panic!(\"panic in `query`\");\n        }\n        result\n    }\n}\n\nimpl Clone for Instance<'_> {\n    fn clone(&self) -> Self {\n        self.origin.cloned.fetch_add(1, SeqCst);\n        if self.panic == Panic::InClone {\n            panic!(\"panic in `clone`\");\n        }\n        Self { origin: self.origin, panic: Panic::Never }\n    }\n}\n\nimpl Drop for Instance<'_> {\n    fn drop(&mut self) {\n        self.origin.dropped.fetch_add(1, SeqCst);\n        if self.panic == Panic::InDrop {\n            panic!(\"panic in `drop`\");\n        }\n    }\n}\n\nimpl PartialOrd for Instance<'_> {\n    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {\n        self.id().partial_cmp(&other.id())\n    }\n}\n\nimpl Ord for Instance<'_> {\n    fn cmp(&self, other: &Self) -> Ordering {\n        self.id().cmp(&other.id())\n    }\n}\n\nimpl PartialEq for Instance<'_> {\n    fn eq(&self, other: &Self) -> bool {\n        self.id().eq(&other.id())\n    }\n}\n\nimpl Eq for Instance<'_> {}\n/// XorShiftRng\npub struct DeterministicRng {\n    count: usize,\n    x: u32,\n    y: u32,\n    z: u32,\n    w: u32,\n}\n\nimpl DeterministicRng {\n    pub fn new() -> Self {\n        DeterministicRng { count: 0, x: 0x193a6754, y: 0xa8a7d469, z: 0x97830e05, w: 0x113ba7bb }\n    }\n\n    /// Guarantees that each returned number is unique.\n    pub fn next(&mut self) -> u32 {\n        self.count += 1;\n        assert!(self.count <= 70029);\n        let x = self.x;\n        let t = x ^ (x << 11);\n        self.x = self.y;\n        self.y = self.z;\n        self.z = self.w;\n        let w_ = self.w;\n        self.w = w_ ^ (w_ >> 19) ^ (t ^ (t >> 8));\n        self.w\n    }\n}\nuse std::cell::Cell;\nuse std::cmp::Ordering::{self, *};\nuse std::ptr;\n\n// Minimal type with an `Ord` implementation violating transitivity.\n#[derive(Debug)]\npub enum Cyclic3 {\n    A,\n    B,\n    C,\n}\nuse Cyclic3::*;\n\nimpl PartialOrd for Cyclic3 {\n    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {\n        Some(self.cmp(other))\n    }\n}\n\nimpl Ord for Cyclic3 {\n    fn cmp(&self, other: &Self) -> Ordering {\n        match (self, other) {\n            (A, A) | (B, B) | (C, C) => Equal,\n            (A, B) | (B, C) | (C, A) => Less,\n            (A, C) | (B, A) | (C, B) => Greater,\n        }\n    }\n}\n\nimpl PartialEq for Cyclic3 {\n    fn eq(&self, other: &Self) -> bool {\n        self.cmp(&other) == Equal\n    }\n}\n\nimpl Eq for Cyclic3 {}\n\n// Controls the ordering of values wrapped by `Governed`.\n#[derive(Debug)]\npub struct Governor {\n    flipped: Cell<bool>,\n}\n\nimpl Governor {\n    pub fn new() -> Self {\n        Governor { flipped: Cell::new(false) }\n    }\n\n    pub fn flip(&self) {\n        self.flipped.set(!self.flipped.get());\n    }\n}\n\n// Type with an `Ord` implementation that forms a total order at any moment\n// (assuming that `T` respects total order), but can suddenly be made to invert\n// that total order.\n#[derive(Debug)]\npub struct Governed<'a, T>(pub T, pub &'a Governor);\n\nimpl<T: Ord> PartialOrd for Governed<'_, T> {\n    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {\n        Some(self.cmp(other))\n    }\n}\n\nimpl<T: Ord> Ord for Governed<'_, T> {\n    fn cmp(&self, other: &Self) -> Ordering {\n        assert!(ptr::eq(self.1, other.1));\n        let ord = self.0.cmp(&other.0);\n        if self.1.flipped.get() { ord.reverse() } else { ord }\n    }\n}\n\nimpl<T: PartialEq> PartialEq for Governed<'_, T> {\n    fn eq(&self, other: &Self) -> bool {\n        assert!(ptr::eq(self.1, other.1));\n        self.0.eq(&other.0)\n    }\n}\n\nimpl<T: Eq> Eq for Governed<'_, T> {}\npub mod crash_test;\npub mod ord_chaos;\npub mod rng;\nuse core::borrow::Borrow;\nuse core::cmp::Ordering;\nuse core::ops::{Bound, RangeBounds};\n\nuse super::node::{marker, ForceResult::*, Handle, NodeRef};\n\nuse SearchBound::*;\nuse SearchResult::*;\n\npub enum SearchBound<T> {\n    /// An inclusive bound to look for, just like `Bound::Included(T)`.\n    Included(T),\n    /// An exclusive bound to look for, just like `Bound::Excluded(T)`.\n    Excluded(T),\n    /// An unconditional inclusive bound, just like `Bound::Unbounded`.\n    AllIncluded,\n    /// An unconditional exclusive bound.\n    AllExcluded,\n}\n\nimpl<T> SearchBound<T> {\n    pub fn from_range(range_bound: Bound<T>) -> Self {\n        match range_bound {\n            Bound::Included(t) => Included(t),\n            Bound::Excluded(t) => Excluded(t),\n            Bound::Unbounded => AllIncluded,\n        }\n    }\n}\n\npub enum SearchResult<BorrowType, K, V, FoundType, GoDownType> {\n    Found(Handle<NodeRef<BorrowType, K, V, FoundType>, marker::KV>),\n    GoDown(Handle<NodeRef<BorrowType, K, V, GoDownType>, marker::Edge>),\n}\n\npub enum IndexResult {\n    KV(usize),\n    Edge(usize),\n}\n\nimpl<BorrowType: marker::BorrowType, K, V> NodeRef<BorrowType, K, V, marker::LeafOrInternal> {\n    /// Looks up a given key in a (sub)tree headed by the node, recursively.\n    /// Returns a `Found` with the handle of the matching KV, if any. Otherwise,\n    /// returns a `GoDown` with the handle of the leaf edge where the key belongs.\n    ///\n    /// The result is meaningful only if the tree is ordered by key, like the tree\n    /// in a `BTreeMap` is.\n    pub fn search_tree<Q: ?Sized>(\n        mut self,\n        key: &Q,\n    ) -> SearchResult<BorrowType, K, V, marker::LeafOrInternal, marker::Leaf>\n    where\n        Q: Ord,\n        K: Borrow<Q>,\n    {\n        loop {\n            self = match self.search_node(key) {\n                Found(handle) => return Found(handle),\n                GoDown(handle) => match handle.force() {\n                    Leaf(leaf) => return GoDown(leaf),\n                    Internal(internal) => internal.descend(),\n                },\n            }\n        }\n    }\n\n    /// Descends to the nearest node where the edge matching the lower bound\n    /// of the range is different from the edge matching the upper bound, i.e.,\n    /// the nearest node that has at least one key contained in the range.\n    ///\n    /// If found, returns an `Ok` with that node, the strictly ascending pair of\n    /// edge indices in the node delimiting the range, and the corresponding\n    /// pair of bounds for continuing the search in the child nodes, in case\n    /// the node is internal.\n    ///\n    /// If not found, returns an `Err` with the leaf edge matching the entire\n    /// range.\n    ///\n    /// As a diagnostic service, panics if the range specifies impossible bounds.\n    ///\n    /// The result is meaningful only if the tree is ordered by key.\n    pub fn search_tree_for_bifurcation<'r, Q: ?Sized, R>(\n        mut self,\n        range: &'r R,\n    ) -> Result<\n        (\n            NodeRef<BorrowType, K, V, marker::LeafOrInternal>,\n            usize,\n            usize,\n            SearchBound<&'r Q>,\n            SearchBound<&'r Q>,\n        ),\n        Handle<NodeRef<BorrowType, K, V, marker::Leaf>, marker::Edge>,\n    >\n    where\n        Q: Ord,\n        K: Borrow<Q>,\n        R: RangeBounds<Q>,\n    {\n        // Inlining these variables should be avoided. We assume the bounds reported by `range`\n        // remain the same, but an adversarial implementation could change between calls (#81138).\n        let (start, end) = (range.start_bound(), range.end_bound());\n        match (start, end) {\n            (Bound::Excluded(s), Bound::Excluded(e)) if s == e => {\n                panic!(\"range start and end are equal and excluded in BTreeMap\")\n            }\n            (Bound::Included(s) | Bound::Excluded(s), Bound::Included(e) | Bound::Excluded(e))\n                if s > e =>\n            {\n                panic!(\"range start is greater than range end in BTreeMap\")\n            }\n            _ => {}\n        }\n        let mut lower_bound = SearchBound::from_range(start);\n        let mut upper_bound = SearchBound::from_range(end);\n        loop {\n            let (lower_edge_idx, lower_child_bound) = self.find_lower_bound_index(lower_bound);\n            let (upper_edge_idx, upper_child_bound) =\n                unsafe { self.find_upper_bound_index(upper_bound, lower_edge_idx) };\n            if lower_edge_idx < upper_edge_idx {\n                return Ok((\n                    self,\n                    lower_edge_idx,\n                    upper_edge_idx,\n                    lower_child_bound,\n                    upper_child_bound,\n                ));\n            }\n            debug_assert_eq!(lower_edge_idx, upper_edge_idx);\n            let common_edge = unsafe { Handle::new_edge(self, lower_edge_idx) };\n            match common_edge.force() {\n                Leaf(common_edge) => return Err(common_edge),\n                Internal(common_edge) => {\n                    self = common_edge.descend();\n                    lower_bound = lower_child_bound;\n                    upper_bound = upper_child_bound;\n                }\n            }\n        }\n    }\n\n    /// Finds an edge in the node delimiting the lower bound of a range.\n    /// Also returns the lower bound to be used for continuing the search in\n    /// the matching child node, if `self` is an internal node.\n    ///\n    /// The result is meaningful only if the tree is ordered by key.\n    pub fn find_lower_bound_edge<'r, Q>(\n        self,\n        bound: SearchBound<&'r Q>,\n    ) -> (Handle<Self, marker::Edge>, SearchBound<&'r Q>)\n    where\n        Q: ?Sized + Ord,\n        K: Borrow<Q>,\n    {\n        let (edge_idx, bound) = self.find_lower_bound_index(bound);\n        let edge = unsafe { Handle::new_edge(self, edge_idx) };\n        (edge, bound)\n    }\n\n    /// Clone of `find_lower_bound_edge` for the upper bound.\n    pub fn find_upper_bound_edge<'r, Q>(\n        self,\n        bound: SearchBound<&'r Q>,\n    ) -> (Handle<Self, marker::Edge>, SearchBound<&'r Q>)\n    where\n        Q: ?Sized + Ord,\n        K: Borrow<Q>,\n    {\n        let (edge_idx, bound) = unsafe { self.find_upper_bound_index(bound, 0) };\n        let edge = unsafe { Handle::new_edge(self, edge_idx) };\n        (edge, bound)\n    }\n}\n\nimpl<BorrowType, K, V, Type> NodeRef<BorrowType, K, V, Type> {\n    /// Looks up a given key in the node, without recursion.\n    /// Returns a `Found` with the handle of the matching KV, if any. Otherwise,\n    /// returns a `GoDown` with the handle of the edge where the key might be found\n    /// (if the node is internal) or where the key can be inserted.\n    ///\n    /// The result is meaningful only if the tree is ordered by key, like the tree\n    /// in a `BTreeMap` is.\n    pub fn search_node<Q: ?Sized>(self, key: &Q) -> SearchResult<BorrowType, K, V, Type, Type>\n    where\n        Q: Ord,\n        K: Borrow<Q>,\n    {\n        match unsafe { self.find_key_index(key, 0) } {\n            IndexResult::KV(idx) => Found(unsafe { Handle::new_kv(self, idx) }),\n            IndexResult::Edge(idx) => GoDown(unsafe { Handle::new_edge(self, idx) }),\n        }\n    }\n\n    /// Returns either the KV index in the node at which the key (or an equivalent)\n    /// exists, or the edge index where the key belongs, starting from a particular index.\n    ///\n    /// The result is meaningful only if the tree is ordered by key, like the tree\n    /// in a `BTreeMap` is.\n    ///\n    /// # Safety\n    /// `start_index` must be a valid edge index for the node.\n    unsafe fn find_key_index<Q: ?Sized>(&self, key: &Q, start_index: usize) -> IndexResult\n    where\n        Q: Ord,\n        K: Borrow<Q>,\n    {\n        let node = self.reborrow();\n        let keys = node.keys();\n        debug_assert!(start_index <= keys.len());\n        for (offset, k) in unsafe { keys.get_unchecked(start_index..) }.iter().enumerate() {\n            match key.cmp(k.borrow()) {\n                Ordering::Greater => {}\n                Ordering::Equal => return IndexResult::KV(start_index + offset),\n                Ordering::Less => return IndexResult::Edge(start_index + offset),\n            }\n        }\n        IndexResult::Edge(keys.len())\n    }\n\n    /// Finds an edge index in the node delimiting the lower bound of a range.\n    /// Also returns the lower bound to be used for continuing the search in\n    /// the matching child node, if `self` is an internal node.\n    ///\n    /// The result is meaningful only if the tree is ordered by key.\n    fn find_lower_bound_index<'r, Q>(\n        &self,\n        bound: SearchBound<&'r Q>,\n    ) -> (usize, SearchBound<&'r Q>)\n    where\n        Q: ?Sized + Ord,\n        K: Borrow<Q>,\n    {\n        match bound {\n            Included(key) => match unsafe { self.find_key_index(key, 0) } {\n                IndexResult::KV(idx) => (idx, AllExcluded),\n                IndexResult::Edge(idx) => (idx, bound),\n            },\n            Excluded(key) => match unsafe { self.find_key_index(key, 0) } {\n                IndexResult::KV(idx) => (idx + 1, AllIncluded),\n                IndexResult::Edge(idx) => (idx, bound),\n            },\n            AllIncluded => (0, AllIncluded),\n            AllExcluded => (self.len(), AllExcluded),\n        }\n    }\n\n    /// Mirror image of `find_lower_bound_index` for the upper bound,\n    /// with an additional parameter to skip part of the key array.\n    ///\n    /// # Safety\n    /// `start_index` must be a valid edge index for the node.\n    unsafe fn find_upper_bound_index<'r, Q>(\n        &self,\n        bound: SearchBound<&'r Q>,\n        start_index: usize,\n    ) -> (usize, SearchBound<&'r Q>)\n    where\n        Q: ?Sized + Ord,\n        K: Borrow<Q>,\n    {\n        match bound {\n            Included(key) => match unsafe { self.find_key_index(key, start_index) } {\n                IndexResult::KV(idx) => (idx + 1, AllExcluded),\n                IndexResult::Edge(idx) => (idx, bound),\n            },\n            Excluded(key) => match unsafe { self.find_key_index(key, start_index) } {\n                IndexResult::KV(idx) => (idx, AllIncluded),\n                IndexResult::Edge(idx) => (idx, bound),\n            },\n            AllIncluded => (self.len(), AllIncluded),\n            AllExcluded => (start_index, AllExcluded),\n        }\n    }\n}\nuse core::borrow::Borrow;\nuse core::cmp::Ordering;\nuse core::fmt::{self, Debug};\nuse core::hash::{Hash, Hasher};\nuse core::iter::{FromIterator, FusedIterator};\nuse core::marker::PhantomData;\nuse core::mem::{self, ManuallyDrop};\nuse core::ops::{Index, RangeBounds};\nuse core::ptr;\n\nuse super::borrow::DormantMutRef;\nuse super::navigate::LeafRange;\nuse super::node::{self, marker, ForceResult::*, Handle, NodeRef, Root};\nuse super::search::SearchResult::*;\n\nmod entry;\npub use entry::{Entry, OccupiedEntry, OccupiedError, VacantEntry};\nuse Entry::*;\n\n/// Minimum number of elements in nodes that are not a root.\n/// We might temporarily have fewer elements during methods.\npub(super) const MIN_LEN: usize = node::MIN_LEN_AFTER_SPLIT;\n\n// A tree in a `BTreeMap` is a tree in the `node` module with additional invariants:\n// - Keys must appear in ascending order (according to the key's type).\n// - If the root node is internal, it must contain at least 1 element.\n// - Every non-root node contains at least MIN_LEN elements.\n//\n// An empty map may be represented both by the absence of a root node or by a\n// root node that is an empty leaf.\n\n/// A map based on a [B-Tree].\n///\n/// B-Trees represent a fundamental compromise between cache-efficiency and actually minimizing\n/// the amount of work performed in a search. In theory, a binary search tree (BST) is the optimal\n/// choice for a sorted map, as a perfectly balanced BST performs the theoretical minimum amount of\n/// comparisons necessary to find an element (log<sub>2</sub>n). However, in practice the way this\n/// is done is *very* inefficient for modern computer architectures. In particular, every element\n/// is stored in its own individually heap-allocated node. This means that every single insertion\n/// triggers a heap-allocation, and every single comparison should be a cache-miss. Since these\n/// are both notably expensive things to do in practice, we are forced to at very least reconsider\n/// the BST strategy.\n///\n/// A B-Tree instead makes each node contain B-1 to 2B-1 elements in a contiguous array. By doing\n/// this, we reduce the number of allocations by a factor of B, and improve cache efficiency in\n/// searches. However, this does mean that searches will have to do *more* comparisons on average.\n/// The precise number of comparisons depends on the node search strategy used. For optimal cache\n/// efficiency, one could search the nodes linearly. For optimal comparisons, one could search\n/// the node using binary search. As a compromise, one could also perform a linear search\n/// that initially only checks every i<sup>th</sup> element for some choice of i.\n///\n/// Currently, our implementation simply performs naive linear search. This provides excellent\n/// performance on *small* nodes of elements which are cheap to compare. However in the future we\n/// would like to further explore choosing the optimal search strategy based on the choice of B,\n/// and possibly other factors. Using linear search, searching for a random element is expected\n/// to take O(B * log(n)) comparisons, which is generally worse than a BST. In practice,\n/// however, performance is excellent.\n///\n/// It is a logic error for a key to be modified in such a way that the key's ordering relative to\n/// any other key, as determined by the [`Ord`] trait, changes while it is in the map. This is\n/// normally only possible through [`Cell`], [`RefCell`], global state, I/O, or unsafe code.\n/// The behavior resulting from such a logic error is not specified, but will not result in\n/// undefined behavior. This could include panics, incorrect results, aborts, memory leaks, and\n/// non-termination.\n///\n/// [B-Tree]: https://en.wikipedia.org/wiki/B-tree\n/// [`Cell`]: core::cell::Cell\n/// [`RefCell`]: core::cell::RefCell\n///\n/// # Examples\n///\n/// ```\n/// use std::collections::BTreeMap;\n///\n/// // type inference lets us omit an explicit type signature (which\n/// // would be `BTreeMap<&str, &str>` in this example).\n/// let mut movie_reviews = BTreeMap::new();\n///\n/// // review some movies.\n/// movie_reviews.insert(\"Office Space\",       \"Deals with real issues in the workplace.\");\n/// movie_reviews.insert(\"Pulp Fiction\",       \"Masterpiece.\");\n/// movie_reviews.insert(\"The Godfather\",      \"Very enjoyable.\");\n/// movie_reviews.insert(\"The Blues Brothers\", \"Eye lyked it a lot.\");\n///\n/// // check for a specific one.\n/// if !movie_reviews.contains_key(\"Les Misérables\") {\n///     println!(\"We've got {} reviews, but Les Misérables ain't one.\",\n///              movie_reviews.len());\n/// }\n///\n/// // oops, this review has a lot of spelling mistakes, let's delete it.\n/// movie_reviews.remove(\"The Blues Brothers\");\n///\n/// // look up the values associated with some keys.\n/// let to_find = [\"Up!\", \"Office Space\"];\n/// for movie in &to_find {\n///     match movie_reviews.get(movie) {\n///        Some(review) => println!(\"{}: {}\", movie, review),\n///        None => println!(\"{} is unreviewed.\", movie)\n///     }\n/// }\n///\n/// // Look up the value for a key (will panic if the key is not found).\n/// println!(\"Movie review: {}\", movie_reviews[\"Office Space\"]);\n///\n/// // iterate over everything.\n/// for (movie, review) in &movie_reviews {\n///     println!(\"{}: \\\"{}\\\"\", movie, review);\n/// }\n/// ```\n///\n/// `BTreeMap` also implements an [`Entry API`], which allows for more complex\n/// methods of getting, setting, updating and removing keys and their values:\n///\n/// [`Entry API`]: BTreeMap::entry\n///\n/// ```\n/// use std::collections::BTreeMap;\n///\n/// // type inference lets us omit an explicit type signature (which\n/// // would be `BTreeMap<&str, u8>` in this example).\n/// let mut player_stats = BTreeMap::new();\n///\n/// fn random_stat_buff() -> u8 {\n///     // could actually return some random value here - let's just return\n///     // some fixed value for now\n///     42\n/// }\n///\n/// // insert a key only if it doesn't already exist\n/// player_stats.entry(\"health\").or_insert(100);\n///\n/// // insert a key using a function that provides a new value only if it\n/// // doesn't already exist\n/// player_stats.entry(\"defence\").or_insert_with(random_stat_buff);\n///\n/// // update a key, guarding against the key possibly not being set\n/// let stat = player_stats.entry(\"attack\").or_insert(100);\n/// *stat += random_stat_buff();\n/// ```\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\n#[cfg_attr(not(test), rustc_diagnostic_item = \"BTreeMap\")]\npub struct BTreeMap<K, V> {\n    root: Option<Root<K, V>>,\n    length: usize,\n}\n\n#[stable(feature = \"btree_drop\", since = \"1.7.0\")]\nunsafe impl<#[may_dangle] K, #[may_dangle] V> Drop for BTreeMap<K, V> {\n    fn drop(&mut self) {\n        if let Some(root) = self.root.take() {\n            Dropper { front: root.into_dying().first_leaf_edge(), remaining_length: self.length };\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<K: Clone, V: Clone> Clone for BTreeMap<K, V> {\n    fn clone(&self) -> BTreeMap<K, V> {\n        fn clone_subtree<'a, K: Clone, V: Clone>(\n            node: NodeRef<marker::Immut<'a>, K, V, marker::LeafOrInternal>,\n        ) -> BTreeMap<K, V>\n        where\n            K: 'a,\n            V: 'a,\n        {\n            match node.force() {\n                Leaf(leaf) => {\n                    let mut out_tree = BTreeMap { root: Some(Root::new()), length: 0 };\n\n                    {\n                        let root = out_tree.root.as_mut().unwrap(); // unwrap succeeds because we just wrapped\n                        let mut out_node = match root.borrow_mut().force() {\n                            Leaf(leaf) => leaf,\n                            Internal(_) => unreachable!(),\n                        };\n\n                        let mut in_edge = leaf.first_edge();\n                        while let Ok(kv) = in_edge.right_kv() {\n                            let (k, v) = kv.into_kv();\n                            in_edge = kv.right_edge();\n\n                            out_node.push(k.clone(), v.clone());\n                            out_tree.length += 1;\n                        }\n                    }\n\n                    out_tree\n                }\n                Internal(internal) => {\n                    let mut out_tree = clone_subtree(internal.first_edge().descend());\n\n                    {\n                        let out_root = BTreeMap::ensure_is_owned(&mut out_tree.root);\n                        let mut out_node = out_root.push_internal_level();\n                        let mut in_edge = internal.first_edge();\n                        while let Ok(kv) = in_edge.right_kv() {\n                            let (k, v) = kv.into_kv();\n                            in_edge = kv.right_edge();\n\n                            let k = (*k).clone();\n                            let v = (*v).clone();\n                            let subtree = clone_subtree(in_edge.descend());\n\n                            // We can't destructure subtree directly\n                            // because BTreeMap implements Drop\n                            let (subroot, sublength) = unsafe {\n                                let subtree = ManuallyDrop::new(subtree);\n                                let root = ptr::read(&subtree.root);\n                                let length = subtree.length;\n                                (root, length)\n                            };\n\n                            out_node.push(k, v, subroot.unwrap_or_else(Root::new));\n                            out_tree.length += 1 + sublength;\n                        }\n                    }\n\n                    out_tree\n                }\n            }\n        }\n\n        if self.is_empty() {\n            // Ideally we'd call `BTreeMap::new` here, but that has the `K:\n            // Ord` constraint, which this method lacks.\n            BTreeMap { root: None, length: 0 }\n        } else {\n            clone_subtree(self.root.as_ref().unwrap().reborrow()) // unwrap succeeds because not empty\n        }\n    }\n}\n\nimpl<K, Q: ?Sized> super::Recover<Q> for BTreeMap<K, ()>\nwhere\n    K: Borrow<Q> + Ord,\n    Q: Ord,\n{\n    type Key = K;\n\n    fn get(&self, key: &Q) -> Option<&K> {\n        let root_node = self.root.as_ref()?.reborrow();\n        match root_node.search_tree(key) {\n            Found(handle) => Some(handle.into_kv().0),\n            GoDown(_) => None,\n        }\n    }\n\n    fn take(&mut self, key: &Q) -> Option<K> {\n        let (map, dormant_map) = DormantMutRef::new(self);\n        let root_node = map.root.as_mut()?.borrow_mut();\n        match root_node.search_tree(key) {\n            Found(handle) => {\n                Some(OccupiedEntry { handle, dormant_map, _marker: PhantomData }.remove_kv().0)\n            }\n            GoDown(_) => None,\n        }\n    }\n\n    fn replace(&mut self, key: K) -> Option<K> {\n        let (map, dormant_map) = DormantMutRef::new(self);\n        let root_node = Self::ensure_is_owned(&mut map.root).borrow_mut();\n        match root_node.search_tree::<K>(&key) {\n            Found(mut kv) => Some(mem::replace(kv.key_mut(), key)),\n            GoDown(handle) => {\n                VacantEntry { key, handle, dormant_map, _marker: PhantomData }.insert(());\n                None\n            }\n        }\n    }\n}\n\n/// An iterator over the entries of a `BTreeMap`.\n///\n/// This `struct` is created by the [`iter`] method on [`BTreeMap`]. See its\n/// documentation for more.\n///\n/// [`iter`]: BTreeMap::iter\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct Iter<'a, K: 'a, V: 'a> {\n    range: Range<'a, K, V>,\n    length: usize,\n}\n\n#[stable(feature = \"collection_debug\", since = \"1.17.0\")]\nimpl<K: fmt::Debug, V: fmt::Debug> fmt::Debug for Iter<'_, K, V> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_list().entries(self.clone()).finish()\n    }\n}\n\n/// A mutable iterator over the entries of a `BTreeMap`.\n///\n/// This `struct` is created by the [`iter_mut`] method on [`BTreeMap`]. See its\n/// documentation for more.\n///\n/// [`iter_mut`]: BTreeMap::iter_mut\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\n#[derive(Debug)]\npub struct IterMut<'a, K: 'a, V: 'a> {\n    range: RangeMut<'a, K, V>,\n    length: usize,\n}\n\n/// An owning iterator over the entries of a `BTreeMap`.\n///\n/// This `struct` is created by the [`into_iter`] method on [`BTreeMap`]\n/// (provided by the `IntoIterator` trait). See its documentation for more.\n///\n/// [`into_iter`]: IntoIterator::into_iter\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct IntoIter<K, V> {\n    range: LeafRange<marker::Dying, K, V>,\n    length: usize,\n}\n\nimpl<K, V> IntoIter<K, V> {\n    /// Returns an iterator of references over the remaining items.\n    #[inline]\n    pub(super) fn iter(&self) -> Iter<'_, K, V> {\n        let range = Range { inner: self.range.reborrow() };\n        Iter { range: range, length: self.length }\n    }\n}\n\n#[stable(feature = \"collection_debug\", since = \"1.17.0\")]\nimpl<K: fmt::Debug, V: fmt::Debug> fmt::Debug for IntoIter<K, V> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_list().entries(self.iter()).finish()\n    }\n}\n\n/// A simplified version of `IntoIter` that is not double-ended and has only one\n/// purpose: to drop the remainder of an `IntoIter`. Therefore it also serves to\n/// drop an entire tree without the need to first look up a `back` leaf edge.\nstruct Dropper<K, V> {\n    front: Handle<NodeRef<marker::Dying, K, V, marker::Leaf>, marker::Edge>,\n    remaining_length: usize,\n}\n\n/// An iterator over the keys of a `BTreeMap`.\n///\n/// This `struct` is created by the [`keys`] method on [`BTreeMap`]. See its\n/// documentation for more.\n///\n/// [`keys`]: BTreeMap::keys\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct Keys<'a, K: 'a, V: 'a> {\n    inner: Iter<'a, K, V>,\n}\n\n#[stable(feature = \"collection_debug\", since = \"1.17.0\")]\nimpl<K: fmt::Debug, V> fmt::Debug for Keys<'_, K, V> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_list().entries(self.clone()).finish()\n    }\n}\n\n/// An iterator over the values of a `BTreeMap`.\n///\n/// This `struct` is created by the [`values`] method on [`BTreeMap`]. See its\n/// documentation for more.\n///\n/// [`values`]: BTreeMap::values\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct Values<'a, K: 'a, V: 'a> {\n    inner: Iter<'a, K, V>,\n}\n\n#[stable(feature = \"collection_debug\", since = \"1.17.0\")]\nimpl<K, V: fmt::Debug> fmt::Debug for Values<'_, K, V> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_list().entries(self.clone()).finish()\n    }\n}\n\n/// A mutable iterator over the values of a `BTreeMap`.\n///\n/// This `struct` is created by the [`values_mut`] method on [`BTreeMap`]. See its\n/// documentation for more.\n///\n/// [`values_mut`]: BTreeMap::values_mut\n#[stable(feature = \"map_values_mut\", since = \"1.10.0\")]\npub struct ValuesMut<'a, K: 'a, V: 'a> {\n    inner: IterMut<'a, K, V>,\n}\n\n#[stable(feature = \"map_values_mut\", since = \"1.10.0\")]\nimpl<K, V: fmt::Debug> fmt::Debug for ValuesMut<'_, K, V> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_list().entries(self.inner.iter().map(|(_, val)| val)).finish()\n    }\n}\n\n/// An owning iterator over the keys of a `BTreeMap`.\n///\n/// This `struct` is created by the [`into_keys`] method on [`BTreeMap`].\n/// See its documentation for more.\n///\n/// [`into_keys`]: BTreeMap::into_keys\n#[unstable(feature = \"map_into_keys_values\", issue = \"75294\")]\npub struct IntoKeys<K, V> {\n    inner: IntoIter<K, V>,\n}\n\n#[unstable(feature = \"map_into_keys_values\", issue = \"75294\")]\nimpl<K: fmt::Debug, V> fmt::Debug for IntoKeys<K, V> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_list().entries(self.inner.iter().map(|(key, _)| key)).finish()\n    }\n}\n\n/// An owning iterator over the values of a `BTreeMap`.\n///\n/// This `struct` is created by the [`into_values`] method on [`BTreeMap`].\n/// See its documentation for more.\n///\n/// [`into_values`]: BTreeMap::into_values\n#[unstable(feature = \"map_into_keys_values\", issue = \"75294\")]\npub struct IntoValues<K, V> {\n    inner: IntoIter<K, V>,\n}\n\n#[unstable(feature = \"map_into_keys_values\", issue = \"75294\")]\nimpl<K, V: fmt::Debug> fmt::Debug for IntoValues<K, V> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_list().entries(self.inner.iter().map(|(_, val)| val)).finish()\n    }\n}\n\n/// An iterator over a sub-range of entries in a `BTreeMap`.\n///\n/// This `struct` is created by the [`range`] method on [`BTreeMap`]. See its\n/// documentation for more.\n///\n/// [`range`]: BTreeMap::range\n#[stable(feature = \"btree_range\", since = \"1.17.0\")]\npub struct Range<'a, K: 'a, V: 'a> {\n    inner: LeafRange<marker::Immut<'a>, K, V>,\n}\n\n#[stable(feature = \"collection_debug\", since = \"1.17.0\")]\nimpl<K: fmt::Debug, V: fmt::Debug> fmt::Debug for Range<'_, K, V> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_list().entries(self.clone()).finish()\n    }\n}\n\n/// A mutable iterator over a sub-range of entries in a `BTreeMap`.\n///\n/// This `struct` is created by the [`range_mut`] method on [`BTreeMap`]. See its\n/// documentation for more.\n///\n/// [`range_mut`]: BTreeMap::range_mut\n#[stable(feature = \"btree_range\", since = \"1.17.0\")]\npub struct RangeMut<'a, K: 'a, V: 'a> {\n    inner: LeafRange<marker::ValMut<'a>, K, V>,\n\n    // Be invariant in `K` and `V`\n    _marker: PhantomData<&'a mut (K, V)>,\n}\n\n#[stable(feature = \"collection_debug\", since = \"1.17.0\")]\nimpl<K: fmt::Debug, V: fmt::Debug> fmt::Debug for RangeMut<'_, K, V> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        let range = Range { inner: self.inner.reborrow() };\n        f.debug_list().entries(range).finish()\n    }\n}\n\nimpl<K, V> BTreeMap<K, V> {\n    /// Makes a new, empty `BTreeMap`.\n    ///\n    /// Does not allocate anything on its own.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map = BTreeMap::new();\n    ///\n    /// // entries can now be inserted into the empty map\n    /// map.insert(1, \"a\");\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    #[rustc_const_unstable(feature = \"const_btree_new\", issue = \"71835\")]\n    pub const fn new() -> BTreeMap<K, V>\n    where\n        K: Ord,\n    {\n        BTreeMap { root: None, length: 0 }\n    }\n\n    /// Clears the map, removing all elements.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut a = BTreeMap::new();\n    /// a.insert(1, \"a\");\n    /// a.clear();\n    /// assert!(a.is_empty());\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn clear(&mut self) {\n        *self = BTreeMap { root: None, length: 0 };\n    }\n\n    /// Returns a reference to the value corresponding to the key.\n    ///\n    /// The key may be any borrowed form of the map's key type, but the ordering\n    /// on the borrowed form *must* match the ordering on the key type.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map = BTreeMap::new();\n    /// map.insert(1, \"a\");\n    /// assert_eq!(map.get(&1), Some(&\"a\"));\n    /// assert_eq!(map.get(&2), None);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn get<Q: ?Sized>(&self, key: &Q) -> Option<&V>\n    where\n        K: Borrow<Q> + Ord,\n        Q: Ord,\n    {\n        let root_node = self.root.as_ref()?.reborrow();\n        match root_node.search_tree(key) {\n            Found(handle) => Some(handle.into_kv().1),\n            GoDown(_) => None,\n        }\n    }\n\n    /// Returns the key-value pair corresponding to the supplied key.\n    ///\n    /// The supplied key may be any borrowed form of the map's key type, but the ordering\n    /// on the borrowed form *must* match the ordering on the key type.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map = BTreeMap::new();\n    /// map.insert(1, \"a\");\n    /// assert_eq!(map.get_key_value(&1), Some((&1, &\"a\")));\n    /// assert_eq!(map.get_key_value(&2), None);\n    /// ```\n    #[stable(feature = \"map_get_key_value\", since = \"1.40.0\")]\n    pub fn get_key_value<Q: ?Sized>(&self, k: &Q) -> Option<(&K, &V)>\n    where\n        K: Borrow<Q> + Ord,\n        Q: Ord,\n    {\n        let root_node = self.root.as_ref()?.reborrow();\n        match root_node.search_tree(k) {\n            Found(handle) => Some(handle.into_kv()),\n            GoDown(_) => None,\n        }\n    }\n\n    /// Returns the first key-value pair in the map.\n    /// The key in this pair is the minimum key in the map.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// #![feature(map_first_last)]\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map = BTreeMap::new();\n    /// assert_eq!(map.first_key_value(), None);\n    /// map.insert(1, \"b\");\n    /// map.insert(2, \"a\");\n    /// assert_eq!(map.first_key_value(), Some((&1, &\"b\")));\n    /// ```\n    #[unstable(feature = \"map_first_last\", issue = \"62924\")]\n    pub fn first_key_value(&self) -> Option<(&K, &V)>\n    where\n        K: Ord,\n    {\n        let root_node = self.root.as_ref()?.reborrow();\n        root_node.first_leaf_edge().right_kv().ok().map(Handle::into_kv)\n    }\n\n    /// Returns the first entry in the map for in-place manipulation.\n    /// The key of this entry is the minimum key in the map.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(map_first_last)]\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map = BTreeMap::new();\n    /// map.insert(1, \"a\");\n    /// map.insert(2, \"b\");\n    /// if let Some(mut entry) = map.first_entry() {\n    ///     if *entry.key() > 0 {\n    ///         entry.insert(\"first\");\n    ///     }\n    /// }\n    /// assert_eq!(*map.get(&1).unwrap(), \"first\");\n    /// assert_eq!(*map.get(&2).unwrap(), \"b\");\n    /// ```\n    #[unstable(feature = \"map_first_last\", issue = \"62924\")]\n    pub fn first_entry(&mut self) -> Option<OccupiedEntry<'_, K, V>>\n    where\n        K: Ord,\n    {\n        let (map, dormant_map) = DormantMutRef::new(self);\n        let root_node = map.root.as_mut()?.borrow_mut();\n        let kv = root_node.first_leaf_edge().right_kv().ok()?;\n        Some(OccupiedEntry { handle: kv.forget_node_type(), dormant_map, _marker: PhantomData })\n    }\n\n    /// Removes and returns the first element in the map.\n    /// The key of this element is the minimum key that was in the map.\n    ///\n    /// # Examples\n    ///\n    /// Draining elements in ascending order, while keeping a usable map each iteration.\n    ///\n    /// ```\n    /// #![feature(map_first_last)]\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map = BTreeMap::new();\n    /// map.insert(1, \"a\");\n    /// map.insert(2, \"b\");\n    /// while let Some((key, _val)) = map.pop_first() {\n    ///     assert!(map.iter().all(|(k, _v)| *k > key));\n    /// }\n    /// assert!(map.is_empty());\n    /// ```\n    #[unstable(feature = \"map_first_last\", issue = \"62924\")]\n    pub fn pop_first(&mut self) -> Option<(K, V)>\n    where\n        K: Ord,\n    {\n        self.first_entry().map(|entry| entry.remove_entry())\n    }\n\n    /// Returns the last key-value pair in the map.\n    /// The key in this pair is the maximum key in the map.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// #![feature(map_first_last)]\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map = BTreeMap::new();\n    /// map.insert(1, \"b\");\n    /// map.insert(2, \"a\");\n    /// assert_eq!(map.last_key_value(), Some((&2, &\"a\")));\n    /// ```\n    #[unstable(feature = \"map_first_last\", issue = \"62924\")]\n    pub fn last_key_value(&self) -> Option<(&K, &V)>\n    where\n        K: Ord,\n    {\n        let root_node = self.root.as_ref()?.reborrow();\n        root_node.last_leaf_edge().left_kv().ok().map(Handle::into_kv)\n    }\n\n    /// Returns the last entry in the map for in-place manipulation.\n    /// The key of this entry is the maximum key in the map.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(map_first_last)]\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map = BTreeMap::new();\n    /// map.insert(1, \"a\");\n    /// map.insert(2, \"b\");\n    /// if let Some(mut entry) = map.last_entry() {\n    ///     if *entry.key() > 0 {\n    ///         entry.insert(\"last\");\n    ///     }\n    /// }\n    /// assert_eq!(*map.get(&1).unwrap(), \"a\");\n    /// assert_eq!(*map.get(&2).unwrap(), \"last\");\n    /// ```\n    #[unstable(feature = \"map_first_last\", issue = \"62924\")]\n    pub fn last_entry(&mut self) -> Option<OccupiedEntry<'_, K, V>>\n    where\n        K: Ord,\n    {\n        let (map, dormant_map) = DormantMutRef::new(self);\n        let root_node = map.root.as_mut()?.borrow_mut();\n        let kv = root_node.last_leaf_edge().left_kv().ok()?;\n        Some(OccupiedEntry { handle: kv.forget_node_type(), dormant_map, _marker: PhantomData })\n    }\n\n    /// Removes and returns the last element in the map.\n    /// The key of this element is the maximum key that was in the map.\n    ///\n    /// # Examples\n    ///\n    /// Draining elements in descending order, while keeping a usable map each iteration.\n    ///\n    /// ```\n    /// #![feature(map_first_last)]\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map = BTreeMap::new();\n    /// map.insert(1, \"a\");\n    /// map.insert(2, \"b\");\n    /// while let Some((key, _val)) = map.pop_last() {\n    ///     assert!(map.iter().all(|(k, _v)| *k < key));\n    /// }\n    /// assert!(map.is_empty());\n    /// ```\n    #[unstable(feature = \"map_first_last\", issue = \"62924\")]\n    pub fn pop_last(&mut self) -> Option<(K, V)>\n    where\n        K: Ord,\n    {\n        self.last_entry().map(|entry| entry.remove_entry())\n    }\n\n    /// Returns `true` if the map contains a value for the specified key.\n    ///\n    /// The key may be any borrowed form of the map's key type, but the ordering\n    /// on the borrowed form *must* match the ordering on the key type.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map = BTreeMap::new();\n    /// map.insert(1, \"a\");\n    /// assert_eq!(map.contains_key(&1), true);\n    /// assert_eq!(map.contains_key(&2), false);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn contains_key<Q: ?Sized>(&self, key: &Q) -> bool\n    where\n        K: Borrow<Q> + Ord,\n        Q: Ord,\n    {\n        self.get(key).is_some()\n    }\n\n    /// Returns a mutable reference to the value corresponding to the key.\n    ///\n    /// The key may be any borrowed form of the map's key type, but the ordering\n    /// on the borrowed form *must* match the ordering on the key type.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map = BTreeMap::new();\n    /// map.insert(1, \"a\");\n    /// if let Some(x) = map.get_mut(&1) {\n    ///     *x = \"b\";\n    /// }\n    /// assert_eq!(map[&1], \"b\");\n    /// ```\n    // See `get` for implementation notes, this is basically a copy-paste with mut's added\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn get_mut<Q: ?Sized>(&mut self, key: &Q) -> Option<&mut V>\n    where\n        K: Borrow<Q> + Ord,\n        Q: Ord,\n    {\n        let root_node = self.root.as_mut()?.borrow_mut();\n        match root_node.search_tree(key) {\n            Found(handle) => Some(handle.into_val_mut()),\n            GoDown(_) => None,\n        }\n    }\n\n    /// Inserts a key-value pair into the map.\n    ///\n    /// If the map did not have this key present, `None` is returned.\n    ///\n    /// If the map did have this key present, the value is updated, and the old\n    /// value is returned. The key is not updated, though; this matters for\n    /// types that can be `==` without being identical. See the [module-level\n    /// documentation] for more.\n    ///\n    /// [module-level documentation]: index.html#insert-and-complex-keys\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map = BTreeMap::new();\n    /// assert_eq!(map.insert(37, \"a\"), None);\n    /// assert_eq!(map.is_empty(), false);\n    ///\n    /// map.insert(37, \"b\");\n    /// assert_eq!(map.insert(37, \"c\"), Some(\"b\"));\n    /// assert_eq!(map[&37], \"c\");\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn insert(&mut self, key: K, value: V) -> Option<V>\n    where\n        K: Ord,\n    {\n        match self.entry(key) {\n            Occupied(mut entry) => Some(entry.insert(value)),\n            Vacant(entry) => {\n                entry.insert(value);\n                None\n            }\n        }\n    }\n\n    /// Tries to insert a key-value pair into the map, and returns\n    /// a mutable reference to the value in the entry.\n    ///\n    /// If the map already had this key present, nothing is updated, and\n    /// an error containing the occupied entry and the value is returned.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// #![feature(map_try_insert)]\n    ///\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map = BTreeMap::new();\n    /// assert_eq!(map.try_insert(37, \"a\").unwrap(), &\"a\");\n    ///\n    /// let err = map.try_insert(37, \"b\").unwrap_err();\n    /// assert_eq!(err.entry.key(), &37);\n    /// assert_eq!(err.entry.get(), &\"a\");\n    /// assert_eq!(err.value, \"b\");\n    /// ```\n    #[unstable(feature = \"map_try_insert\", issue = \"82766\")]\n    pub fn try_insert(&mut self, key: K, value: V) -> Result<&mut V, OccupiedError<'_, K, V>>\n    where\n        K: Ord,\n    {\n        match self.entry(key) {\n            Occupied(entry) => Err(OccupiedError { entry, value }),\n            Vacant(entry) => Ok(entry.insert(value)),\n        }\n    }\n\n    /// Removes a key from the map, returning the value at the key if the key\n    /// was previously in the map.\n    ///\n    /// The key may be any borrowed form of the map's key type, but the ordering\n    /// on the borrowed form *must* match the ordering on the key type.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map = BTreeMap::new();\n    /// map.insert(1, \"a\");\n    /// assert_eq!(map.remove(&1), Some(\"a\"));\n    /// assert_eq!(map.remove(&1), None);\n    /// ```\n    #[doc(alias = \"delete\")]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn remove<Q: ?Sized>(&mut self, key: &Q) -> Option<V>\n    where\n        K: Borrow<Q> + Ord,\n        Q: Ord,\n    {\n        self.remove_entry(key).map(|(_, v)| v)\n    }\n\n    /// Removes a key from the map, returning the stored key and value if the key\n    /// was previously in the map.\n    ///\n    /// The key may be any borrowed form of the map's key type, but the ordering\n    /// on the borrowed form *must* match the ordering on the key type.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map = BTreeMap::new();\n    /// map.insert(1, \"a\");\n    /// assert_eq!(map.remove_entry(&1), Some((1, \"a\")));\n    /// assert_eq!(map.remove_entry(&1), None);\n    /// ```\n    #[stable(feature = \"btreemap_remove_entry\", since = \"1.45.0\")]\n    pub fn remove_entry<Q: ?Sized>(&mut self, key: &Q) -> Option<(K, V)>\n    where\n        K: Borrow<Q> + Ord,\n        Q: Ord,\n    {\n        let (map, dormant_map) = DormantMutRef::new(self);\n        let root_node = map.root.as_mut()?.borrow_mut();\n        match root_node.search_tree(key) {\n            Found(handle) => {\n                Some(OccupiedEntry { handle, dormant_map, _marker: PhantomData }.remove_entry())\n            }\n            GoDown(_) => None,\n        }\n    }\n\n    /// Retains only the elements specified by the predicate.\n    ///\n    /// In other words, remove all pairs `(k, v)` such that `f(&k, &mut v)` returns `false`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x*10)).collect();\n    /// // Keep only the elements with even-numbered keys.\n    /// map.retain(|&k, _| k % 2 == 0);\n    /// assert!(map.into_iter().eq(vec![(0, 0), (2, 20), (4, 40), (6, 60)]));\n    /// ```\n    #[inline]\n    #[stable(feature = \"btree_retain\", since = \"1.53.0\")]\n    pub fn retain<F>(&mut self, mut f: F)\n    where\n        K: Ord,\n        F: FnMut(&K, &mut V) -> bool,\n    {\n        self.drain_filter(|k, v| !f(k, v));\n    }\n\n    /// Moves all elements from `other` into `Self`, leaving `other` empty.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut a = BTreeMap::new();\n    /// a.insert(1, \"a\");\n    /// a.insert(2, \"b\");\n    /// a.insert(3, \"c\");\n    ///\n    /// let mut b = BTreeMap::new();\n    /// b.insert(3, \"d\");\n    /// b.insert(4, \"e\");\n    /// b.insert(5, \"f\");\n    ///\n    /// a.append(&mut b);\n    ///\n    /// assert_eq!(a.len(), 5);\n    /// assert_eq!(b.len(), 0);\n    ///\n    /// assert_eq!(a[&1], \"a\");\n    /// assert_eq!(a[&2], \"b\");\n    /// assert_eq!(a[&3], \"d\");\n    /// assert_eq!(a[&4], \"e\");\n    /// assert_eq!(a[&5], \"f\");\n    /// ```\n    #[stable(feature = \"btree_append\", since = \"1.11.0\")]\n    pub fn append(&mut self, other: &mut Self)\n    where\n        K: Ord,\n    {\n        // Do we have to append anything at all?\n        if other.is_empty() {\n            return;\n        }\n\n        // We can just swap `self` and `other` if `self` is empty.\n        if self.is_empty() {\n            mem::swap(self, other);\n            return;\n        }\n\n        let self_iter = mem::take(self).into_iter();\n        let other_iter = mem::take(other).into_iter();\n        let root = BTreeMap::ensure_is_owned(&mut self.root);\n        root.append_from_sorted_iters(self_iter, other_iter, &mut self.length)\n    }\n\n    /// Constructs a double-ended iterator over a sub-range of elements in the map.\n    /// The simplest way is to use the range syntax `min..max`, thus `range(min..max)` will\n    /// yield elements from min (inclusive) to max (exclusive).\n    /// The range may also be entered as `(Bound<T>, Bound<T>)`, so for example\n    /// `range((Excluded(4), Included(10)))` will yield a left-exclusive, right-inclusive\n    /// range from 4 to 10.\n    ///\n    /// # Panics\n    ///\n    /// Panics if range `start > end`.\n    /// Panics if range `start == end` and both bounds are `Excluded`.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    /// use std::ops::Bound::Included;\n    ///\n    /// let mut map = BTreeMap::new();\n    /// map.insert(3, \"a\");\n    /// map.insert(5, \"b\");\n    /// map.insert(8, \"c\");\n    /// for (&key, &value) in map.range((Included(&4), Included(&8))) {\n    ///     println!(\"{}: {}\", key, value);\n    /// }\n    /// assert_eq!(Some((&5, &\"b\")), map.range(4..).next());\n    /// ```\n    #[stable(feature = \"btree_range\", since = \"1.17.0\")]\n    pub fn range<T: ?Sized, R>(&self, range: R) -> Range<'_, K, V>\n    where\n        T: Ord,\n        K: Borrow<T> + Ord,\n        R: RangeBounds<T>,\n    {\n        if let Some(root) = &self.root {\n            Range { inner: root.reborrow().range_search(range) }\n        } else {\n            Range { inner: LeafRange::none() }\n        }\n    }\n\n    /// Constructs a mutable double-ended iterator over a sub-range of elements in the map.\n    /// The simplest way is to use the range syntax `min..max`, thus `range(min..max)` will\n    /// yield elements from min (inclusive) to max (exclusive).\n    /// The range may also be entered as `(Bound<T>, Bound<T>)`, so for example\n    /// `range((Excluded(4), Included(10)))` will yield a left-exclusive, right-inclusive\n    /// range from 4 to 10.\n    ///\n    /// # Panics\n    ///\n    /// Panics if range `start > end`.\n    /// Panics if range `start == end` and both bounds are `Excluded`.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map: BTreeMap<&str, i32> = [\"Alice\", \"Bob\", \"Carol\", \"Cheryl\"]\n    ///     .iter()\n    ///     .map(|&s| (s, 0))\n    ///     .collect();\n    /// for (_, balance) in map.range_mut(\"B\"..\"Cheryl\") {\n    ///     *balance += 100;\n    /// }\n    /// for (name, balance) in &map {\n    ///     println!(\"{} => {}\", name, balance);\n    /// }\n    /// ```\n    #[stable(feature = \"btree_range\", since = \"1.17.0\")]\n    pub fn range_mut<T: ?Sized, R>(&mut self, range: R) -> RangeMut<'_, K, V>\n    where\n        T: Ord,\n        K: Borrow<T> + Ord,\n        R: RangeBounds<T>,\n    {\n        if let Some(root) = &mut self.root {\n            RangeMut { inner: root.borrow_valmut().range_search(range), _marker: PhantomData }\n        } else {\n            RangeMut { inner: LeafRange::none(), _marker: PhantomData }\n        }\n    }\n\n    /// Gets the given key's corresponding entry in the map for in-place manipulation.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut count: BTreeMap<&str, usize> = BTreeMap::new();\n    ///\n    /// // count the number of occurrences of letters in the vec\n    /// for x in vec![\"a\", \"b\", \"a\", \"c\", \"a\", \"b\"] {\n    ///     *count.entry(x).or_insert(0) += 1;\n    /// }\n    ///\n    /// assert_eq!(count[\"a\"], 3);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn entry(&mut self, key: K) -> Entry<'_, K, V>\n    where\n        K: Ord,\n    {\n        // FIXME(@porglezomp) Avoid allocating if we don't insert\n        let (map, dormant_map) = DormantMutRef::new(self);\n        let root_node = Self::ensure_is_owned(&mut map.root).borrow_mut();\n        match root_node.search_tree(&key) {\n            Found(handle) => Occupied(OccupiedEntry { handle, dormant_map, _marker: PhantomData }),\n            GoDown(handle) => {\n                Vacant(VacantEntry { key, handle, dormant_map, _marker: PhantomData })\n            }\n        }\n    }\n\n    /// Splits the collection into two at the given key. Returns everything after the given key,\n    /// including the key.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut a = BTreeMap::new();\n    /// a.insert(1, \"a\");\n    /// a.insert(2, \"b\");\n    /// a.insert(3, \"c\");\n    /// a.insert(17, \"d\");\n    /// a.insert(41, \"e\");\n    ///\n    /// let b = a.split_off(&3);\n    ///\n    /// assert_eq!(a.len(), 2);\n    /// assert_eq!(b.len(), 3);\n    ///\n    /// assert_eq!(a[&1], \"a\");\n    /// assert_eq!(a[&2], \"b\");\n    ///\n    /// assert_eq!(b[&3], \"c\");\n    /// assert_eq!(b[&17], \"d\");\n    /// assert_eq!(b[&41], \"e\");\n    /// ```\n    #[stable(feature = \"btree_split_off\", since = \"1.11.0\")]\n    pub fn split_off<Q: ?Sized + Ord>(&mut self, key: &Q) -> Self\n    where\n        K: Borrow<Q> + Ord,\n    {\n        if self.is_empty() {\n            return Self::new();\n        }\n\n        let total_num = self.len();\n        let left_root = self.root.as_mut().unwrap(); // unwrap succeeds because not empty\n\n        let right_root = left_root.split_off(key);\n\n        let (new_left_len, right_len) = Root::calc_split_length(total_num, &left_root, &right_root);\n        self.length = new_left_len;\n\n        BTreeMap { root: Some(right_root), length: right_len }\n    }\n\n    /// Creates an iterator that visits all elements (key-value pairs) in\n    /// ascending key order and uses a closure to determine if an element should\n    /// be removed. If the closure returns `true`, the element is removed from\n    /// the map and yielded. If the closure returns `false`, or panics, the\n    /// element remains in the map and will not be yielded.\n    ///\n    /// The iterator also lets you mutate the value of each element in the\n    /// closure, regardless of whether you choose to keep or remove it.\n    ///\n    /// If the iterator is only partially consumed or not consumed at all, each\n    /// of the remaining elements is still subjected to the closure, which may\n    /// change its value and, by returning `true`, have the element removed and\n    /// dropped.\n    ///\n    /// It is unspecified how many more elements will be subjected to the\n    /// closure if a panic occurs in the closure, or a panic occurs while\n    /// dropping an element, or if the `DrainFilter` value is leaked.\n    ///\n    /// # Examples\n    ///\n    /// Splitting a map into even and odd keys, reusing the original map:\n    ///\n    /// ```\n    /// #![feature(btree_drain_filter)]\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x)).collect();\n    /// let evens: BTreeMap<_, _> = map.drain_filter(|k, _v| k % 2 == 0).collect();\n    /// let odds = map;\n    /// assert_eq!(evens.keys().copied().collect::<Vec<_>>(), vec![0, 2, 4, 6]);\n    /// assert_eq!(odds.keys().copied().collect::<Vec<_>>(), vec![1, 3, 5, 7]);\n    /// ```\n    #[unstable(feature = \"btree_drain_filter\", issue = \"70530\")]\n    pub fn drain_filter<F>(&mut self, pred: F) -> DrainFilter<'_, K, V, F>\n    where\n        K: Ord,\n        F: FnMut(&K, &mut V) -> bool,\n    {\n        DrainFilter { pred, inner: self.drain_filter_inner() }\n    }\n\n    pub(super) fn drain_filter_inner(&mut self) -> DrainFilterInner<'_, K, V>\n    where\n        K: Ord,\n    {\n        if let Some(root) = self.root.as_mut() {\n            let (root, dormant_root) = DormantMutRef::new(root);\n            let front = root.borrow_mut().first_leaf_edge();\n            DrainFilterInner {\n                length: &mut self.length,\n                dormant_root: Some(dormant_root),\n                cur_leaf_edge: Some(front),\n            }\n        } else {\n            DrainFilterInner { length: &mut self.length, dormant_root: None, cur_leaf_edge: None }\n        }\n    }\n\n    /// Creates a consuming iterator visiting all the keys, in sorted order.\n    /// The map cannot be used after calling this.\n    /// The iterator element type is `K`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(map_into_keys_values)]\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut a = BTreeMap::new();\n    /// a.insert(2, \"b\");\n    /// a.insert(1, \"a\");\n    ///\n    /// let keys: Vec<i32> = a.into_keys().collect();\n    /// assert_eq!(keys, [1, 2]);\n    /// ```\n    #[inline]\n    #[unstable(feature = \"map_into_keys_values\", issue = \"75294\")]\n    pub fn into_keys(self) -> IntoKeys<K, V> {\n        IntoKeys { inner: self.into_iter() }\n    }\n\n    /// Creates a consuming iterator visiting all the values, in order by key.\n    /// The map cannot be used after calling this.\n    /// The iterator element type is `V`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(map_into_keys_values)]\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut a = BTreeMap::new();\n    /// a.insert(1, \"hello\");\n    /// a.insert(2, \"goodbye\");\n    ///\n    /// let values: Vec<&str> = a.into_values().collect();\n    /// assert_eq!(values, [\"hello\", \"goodbye\"]);\n    /// ```\n    #[inline]\n    #[unstable(feature = \"map_into_keys_values\", issue = \"75294\")]\n    pub fn into_values(self) -> IntoValues<K, V> {\n        IntoValues { inner: self.into_iter() }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, K, V> IntoIterator for &'a BTreeMap<K, V> {\n    type Item = (&'a K, &'a V);\n    type IntoIter = Iter<'a, K, V>;\n\n    fn into_iter(self) -> Iter<'a, K, V> {\n        self.iter()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, K: 'a, V: 'a> Iterator for Iter<'a, K, V> {\n    type Item = (&'a K, &'a V);\n\n    fn next(&mut self) -> Option<(&'a K, &'a V)> {\n        if self.length == 0 {\n            None\n        } else {\n            self.length -= 1;\n            Some(unsafe { self.range.next_unchecked() })\n        }\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        (self.length, Some(self.length))\n    }\n\n    fn last(mut self) -> Option<(&'a K, &'a V)> {\n        self.next_back()\n    }\n\n    fn min(mut self) -> Option<(&'a K, &'a V)> {\n        self.next()\n    }\n\n    fn max(mut self) -> Option<(&'a K, &'a V)> {\n        self.next_back()\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<K, V> FusedIterator for Iter<'_, K, V> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, K: 'a, V: 'a> DoubleEndedIterator for Iter<'a, K, V> {\n    fn next_back(&mut self) -> Option<(&'a K, &'a V)> {\n        if self.length == 0 {\n            None\n        } else {\n            self.length -= 1;\n            Some(unsafe { self.range.next_back_unchecked() })\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<K, V> ExactSizeIterator for Iter<'_, K, V> {\n    fn len(&self) -> usize {\n        self.length\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<K, V> Clone for Iter<'_, K, V> {\n    fn clone(&self) -> Self {\n        Iter { range: self.range.clone(), length: self.length }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, K, V> IntoIterator for &'a mut BTreeMap<K, V> {\n    type Item = (&'a K, &'a mut V);\n    type IntoIter = IterMut<'a, K, V>;\n\n    fn into_iter(self) -> IterMut<'a, K, V> {\n        self.iter_mut()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, K: 'a, V: 'a> Iterator for IterMut<'a, K, V> {\n    type Item = (&'a K, &'a mut V);\n\n    fn next(&mut self) -> Option<(&'a K, &'a mut V)> {\n        if self.length == 0 {\n            None\n        } else {\n            self.length -= 1;\n            Some(unsafe { self.range.next_unchecked() })\n        }\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        (self.length, Some(self.length))\n    }\n\n    fn last(mut self) -> Option<(&'a K, &'a mut V)> {\n        self.next_back()\n    }\n\n    fn min(mut self) -> Option<(&'a K, &'a mut V)> {\n        self.next()\n    }\n\n    fn max(mut self) -> Option<(&'a K, &'a mut V)> {\n        self.next_back()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, K: 'a, V: 'a> DoubleEndedIterator for IterMut<'a, K, V> {\n    fn next_back(&mut self) -> Option<(&'a K, &'a mut V)> {\n        if self.length == 0 {\n            None\n        } else {\n            self.length -= 1;\n            Some(unsafe { self.range.next_back_unchecked() })\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<K, V> ExactSizeIterator for IterMut<'_, K, V> {\n    fn len(&self) -> usize {\n        self.length\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<K, V> FusedIterator for IterMut<'_, K, V> {}\n\nimpl<'a, K, V> IterMut<'a, K, V> {\n    /// Returns an iterator of references over the remaining items.\n    #[inline]\n    pub(super) fn iter(&self) -> Iter<'_, K, V> {\n        Iter { range: self.range.iter(), length: self.length }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<K, V> IntoIterator for BTreeMap<K, V> {\n    type Item = (K, V);\n    type IntoIter = IntoIter<K, V>;\n\n    fn into_iter(self) -> IntoIter<K, V> {\n        let mut me = ManuallyDrop::new(self);\n        if let Some(root) = me.root.take() {\n            let full_range = root.into_dying().full_range();\n\n            IntoIter { range: full_range, length: me.length }\n        } else {\n            IntoIter { range: LeafRange::none(), length: 0 }\n        }\n    }\n}\n\nimpl<K, V> Drop for Dropper<K, V> {\n    fn drop(&mut self) {\n        // Similar to advancing a non-fusing iterator.\n        fn next_or_end<K, V>(this: &mut Dropper<K, V>) -> Option<(K, V)> {\n            if this.remaining_length == 0 {\n                unsafe { ptr::read(&this.front).deallocating_end() }\n                None\n            } else {\n                this.remaining_length -= 1;\n                Some(unsafe { this.front.deallocating_next_unchecked() })\n            }\n        }\n\n        struct DropGuard<'a, K, V>(&'a mut Dropper<K, V>);\n\n        impl<'a, K, V> Drop for DropGuard<'a, K, V> {\n            fn drop(&mut self) {\n                // Continue the same loop we perform below. This only runs when unwinding, so we\n                // don't have to care about panics this time (they'll abort).\n                while let Some(_pair) = next_or_end(&mut self.0) {}\n            }\n        }\n\n        while let Some(pair) = next_or_end(self) {\n            let guard = DropGuard(self);\n            drop(pair);\n            mem::forget(guard);\n        }\n    }\n}\n\n#[stable(feature = \"btree_drop\", since = \"1.7.0\")]\nimpl<K, V> Drop for IntoIter<K, V> {\n    fn drop(&mut self) {\n        if let Some(front) = self.range.front.take() {\n            Dropper { front, remaining_length: self.length };\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<K, V> Iterator for IntoIter<K, V> {\n    type Item = (K, V);\n\n    fn next(&mut self) -> Option<(K, V)> {\n        if self.length == 0 {\n            None\n        } else {\n            self.length -= 1;\n            Some(unsafe { self.range.front.as_mut().unwrap().deallocating_next_unchecked() })\n        }\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        (self.length, Some(self.length))\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<K, V> DoubleEndedIterator for IntoIter<K, V> {\n    fn next_back(&mut self) -> Option<(K, V)> {\n        if self.length == 0 {\n            None\n        } else {\n            self.length -= 1;\n            Some(unsafe { self.range.back.as_mut().unwrap().deallocating_next_back_unchecked() })\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<K, V> ExactSizeIterator for IntoIter<K, V> {\n    fn len(&self) -> usize {\n        self.length\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<K, V> FusedIterator for IntoIter<K, V> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, K, V> Iterator for Keys<'a, K, V> {\n    type Item = &'a K;\n\n    fn next(&mut self) -> Option<&'a K> {\n        self.inner.next().map(|(k, _)| k)\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.inner.size_hint()\n    }\n\n    fn last(mut self) -> Option<&'a K> {\n        self.next_back()\n    }\n\n    fn min(mut self) -> Option<&'a K> {\n        self.next()\n    }\n\n    fn max(mut self) -> Option<&'a K> {\n        self.next_back()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, K, V> DoubleEndedIterator for Keys<'a, K, V> {\n    fn next_back(&mut self) -> Option<&'a K> {\n        self.inner.next_back().map(|(k, _)| k)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<K, V> ExactSizeIterator for Keys<'_, K, V> {\n    fn len(&self) -> usize {\n        self.inner.len()\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<K, V> FusedIterator for Keys<'_, K, V> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<K, V> Clone for Keys<'_, K, V> {\n    fn clone(&self) -> Self {\n        Keys { inner: self.inner.clone() }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, K, V> Iterator for Values<'a, K, V> {\n    type Item = &'a V;\n\n    fn next(&mut self) -> Option<&'a V> {\n        self.inner.next().map(|(_, v)| v)\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.inner.size_hint()\n    }\n\n    fn last(mut self) -> Option<&'a V> {\n        self.next_back()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, K, V> DoubleEndedIterator for Values<'a, K, V> {\n    fn next_back(&mut self) -> Option<&'a V> {\n        self.inner.next_back().map(|(_, v)| v)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<K, V> ExactSizeIterator for Values<'_, K, V> {\n    fn len(&self) -> usize {\n        self.inner.len()\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<K, V> FusedIterator for Values<'_, K, V> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<K, V> Clone for Values<'_, K, V> {\n    fn clone(&self) -> Self {\n        Values { inner: self.inner.clone() }\n    }\n}\n\n/// An iterator produced by calling `drain_filter` on BTreeMap.\n#[unstable(feature = \"btree_drain_filter\", issue = \"70530\")]\npub struct DrainFilter<'a, K, V, F>\nwhere\n    K: 'a,\n    V: 'a,\n    F: 'a + FnMut(&K, &mut V) -> bool,\n{\n    pred: F,\n    inner: DrainFilterInner<'a, K, V>,\n}\n/// Most of the implementation of DrainFilter are generic over the type\n/// of the predicate, thus also serving for BTreeSet::DrainFilter.\npub(super) struct DrainFilterInner<'a, K: 'a, V: 'a> {\n    /// Reference to the length field in the borrowed map, updated live.\n    length: &'a mut usize,\n    /// Buried reference to the root field in the borrowed map.\n    /// Wrapped in `Option` to allow drop handler to `take` it.\n    dormant_root: Option<DormantMutRef<'a, Root<K, V>>>,\n    /// Contains a leaf edge preceding the next element to be returned, or the last leaf edge.\n    /// Empty if the map has no root, if iteration went beyond the last leaf edge,\n    /// or if a panic occurred in the predicate.\n    cur_leaf_edge: Option<Handle<NodeRef<marker::Mut<'a>, K, V, marker::Leaf>, marker::Edge>>,\n}\n\n#[unstable(feature = \"btree_drain_filter\", issue = \"70530\")]\nimpl<K, V, F> Drop for DrainFilter<'_, K, V, F>\nwhere\n    F: FnMut(&K, &mut V) -> bool,\n{\n    fn drop(&mut self) {\n        self.for_each(drop);\n    }\n}\n\n#[unstable(feature = \"btree_drain_filter\", issue = \"70530\")]\nimpl<K, V, F> fmt::Debug for DrainFilter<'_, K, V, F>\nwhere\n    K: fmt::Debug,\n    V: fmt::Debug,\n    F: FnMut(&K, &mut V) -> bool,\n{\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"DrainFilter\").field(&self.inner.peek()).finish()\n    }\n}\n\n#[unstable(feature = \"btree_drain_filter\", issue = \"70530\")]\nimpl<K, V, F> Iterator for DrainFilter<'_, K, V, F>\nwhere\n    F: FnMut(&K, &mut V) -> bool,\n{\n    type Item = (K, V);\n\n    fn next(&mut self) -> Option<(K, V)> {\n        self.inner.next(&mut self.pred)\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.inner.size_hint()\n    }\n}\n\nimpl<'a, K: 'a, V: 'a> DrainFilterInner<'a, K, V> {\n    /// Allow Debug implementations to predict the next element.\n    pub(super) fn peek(&self) -> Option<(&K, &V)> {\n        let edge = self.cur_leaf_edge.as_ref()?;\n        edge.reborrow().next_kv().ok().map(Handle::into_kv)\n    }\n\n    /// Implementation of a typical `DrainFilter::next` method, given the predicate.\n    pub(super) fn next<F>(&mut self, pred: &mut F) -> Option<(K, V)>\n    where\n        F: FnMut(&K, &mut V) -> bool,\n    {\n        while let Ok(mut kv) = self.cur_leaf_edge.take()?.next_kv() {\n            let (k, v) = kv.kv_mut();\n            if pred(k, v) {\n                *self.length -= 1;\n                let (kv, pos) = kv.remove_kv_tracking(|| {\n                    // SAFETY: we will touch the root in a way that will not\n                    // invalidate the position returned.\n                    let root = unsafe { self.dormant_root.take().unwrap().awaken() };\n                    root.pop_internal_level();\n                    self.dormant_root = Some(DormantMutRef::new(root).1);\n                });\n                self.cur_leaf_edge = Some(pos);\n                return Some(kv);\n            }\n            self.cur_leaf_edge = Some(kv.next_leaf_edge());\n        }\n        None\n    }\n\n    /// Implementation of a typical `DrainFilter::size_hint` method.\n    pub(super) fn size_hint(&self) -> (usize, Option<usize>) {\n        // In most of the btree iterators, `self.length` is the number of elements\n        // yet to be visited. Here, it includes elements that were visited and that\n        // the predicate decided not to drain. Making this upper bound more accurate\n        // requires maintaining an extra field and is not worth while.\n        (0, Some(*self.length))\n    }\n}\n\n#[unstable(feature = \"btree_drain_filter\", issue = \"70530\")]\nimpl<K, V, F> FusedIterator for DrainFilter<'_, K, V, F> where F: FnMut(&K, &mut V) -> bool {}\n\n#[stable(feature = \"btree_range\", since = \"1.17.0\")]\nimpl<'a, K, V> Iterator for Range<'a, K, V> {\n    type Item = (&'a K, &'a V);\n\n    fn next(&mut self) -> Option<(&'a K, &'a V)> {\n        if self.inner.is_empty() { None } else { Some(unsafe { self.next_unchecked() }) }\n    }\n\n    fn last(mut self) -> Option<(&'a K, &'a V)> {\n        self.next_back()\n    }\n\n    fn min(mut self) -> Option<(&'a K, &'a V)> {\n        self.next()\n    }\n\n    fn max(mut self) -> Option<(&'a K, &'a V)> {\n        self.next_back()\n    }\n}\n\n#[stable(feature = \"map_values_mut\", since = \"1.10.0\")]\nimpl<'a, K, V> Iterator for ValuesMut<'a, K, V> {\n    type Item = &'a mut V;\n\n    fn next(&mut self) -> Option<&'a mut V> {\n        self.inner.next().map(|(_, v)| v)\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.inner.size_hint()\n    }\n\n    fn last(mut self) -> Option<&'a mut V> {\n        self.next_back()\n    }\n}\n\n#[stable(feature = \"map_values_mut\", since = \"1.10.0\")]\nimpl<'a, K, V> DoubleEndedIterator for ValuesMut<'a, K, V> {\n    fn next_back(&mut self) -> Option<&'a mut V> {\n        self.inner.next_back().map(|(_, v)| v)\n    }\n}\n\n#[stable(feature = \"map_values_mut\", since = \"1.10.0\")]\nimpl<K, V> ExactSizeIterator for ValuesMut<'_, K, V> {\n    fn len(&self) -> usize {\n        self.inner.len()\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<K, V> FusedIterator for ValuesMut<'_, K, V> {}\n\nimpl<'a, K, V> Range<'a, K, V> {\n    unsafe fn next_unchecked(&mut self) -> (&'a K, &'a V) {\n        unsafe { self.inner.front.as_mut().unwrap_unchecked().next_unchecked() }\n    }\n}\n\n#[unstable(feature = \"map_into_keys_values\", issue = \"75294\")]\nimpl<K, V> Iterator for IntoKeys<K, V> {\n    type Item = K;\n\n    fn next(&mut self) -> Option<K> {\n        self.inner.next().map(|(k, _)| k)\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.inner.size_hint()\n    }\n\n    fn last(mut self) -> Option<K> {\n        self.next_back()\n    }\n\n    fn min(mut self) -> Option<K> {\n        self.next()\n    }\n\n    fn max(mut self) -> Option<K> {\n        self.next_back()\n    }\n}\n\n#[unstable(feature = \"map_into_keys_values\", issue = \"75294\")]\nimpl<K, V> DoubleEndedIterator for IntoKeys<K, V> {\n    fn next_back(&mut self) -> Option<K> {\n        self.inner.next_back().map(|(k, _)| k)\n    }\n}\n\n#[unstable(feature = \"map_into_keys_values\", issue = \"75294\")]\nimpl<K, V> ExactSizeIterator for IntoKeys<K, V> {\n    fn len(&self) -> usize {\n        self.inner.len()\n    }\n}\n\n#[unstable(feature = \"map_into_keys_values\", issue = \"75294\")]\nimpl<K, V> FusedIterator for IntoKeys<K, V> {}\n\n#[unstable(feature = \"map_into_keys_values\", issue = \"75294\")]\nimpl<K, V> Iterator for IntoValues<K, V> {\n    type Item = V;\n\n    fn next(&mut self) -> Option<V> {\n        self.inner.next().map(|(_, v)| v)\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.inner.size_hint()\n    }\n\n    fn last(mut self) -> Option<V> {\n        self.next_back()\n    }\n}\n\n#[unstable(feature = \"map_into_keys_values\", issue = \"75294\")]\nimpl<K, V> DoubleEndedIterator for IntoValues<K, V> {\n    fn next_back(&mut self) -> Option<V> {\n        self.inner.next_back().map(|(_, v)| v)\n    }\n}\n\n#[unstable(feature = \"map_into_keys_values\", issue = \"75294\")]\nimpl<K, V> ExactSizeIterator for IntoValues<K, V> {\n    fn len(&self) -> usize {\n        self.inner.len()\n    }\n}\n\n#[unstable(feature = \"map_into_keys_values\", issue = \"75294\")]\nimpl<K, V> FusedIterator for IntoValues<K, V> {}\n\n#[stable(feature = \"btree_range\", since = \"1.17.0\")]\nimpl<'a, K, V> DoubleEndedIterator for Range<'a, K, V> {\n    fn next_back(&mut self) -> Option<(&'a K, &'a V)> {\n        if self.inner.is_empty() { None } else { Some(unsafe { self.next_back_unchecked() }) }\n    }\n}\n\nimpl<'a, K, V> Range<'a, K, V> {\n    unsafe fn next_back_unchecked(&mut self) -> (&'a K, &'a V) {\n        unsafe { self.inner.back.as_mut().unwrap_unchecked().next_back_unchecked() }\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<K, V> FusedIterator for Range<'_, K, V> {}\n\n#[stable(feature = \"btree_range\", since = \"1.17.0\")]\nimpl<K, V> Clone for Range<'_, K, V> {\n    fn clone(&self) -> Self {\n        Range { inner: LeafRange { front: self.inner.front, back: self.inner.back } }\n    }\n}\n\n#[stable(feature = \"btree_range\", since = \"1.17.0\")]\nimpl<'a, K, V> Iterator for RangeMut<'a, K, V> {\n    type Item = (&'a K, &'a mut V);\n\n    fn next(&mut self) -> Option<(&'a K, &'a mut V)> {\n        if self.inner.is_empty() { None } else { Some(unsafe { self.next_unchecked() }) }\n    }\n\n    fn last(mut self) -> Option<(&'a K, &'a mut V)> {\n        self.next_back()\n    }\n\n    fn min(mut self) -> Option<(&'a K, &'a mut V)> {\n        self.next()\n    }\n\n    fn max(mut self) -> Option<(&'a K, &'a mut V)> {\n        self.next_back()\n    }\n}\n\nimpl<'a, K, V> RangeMut<'a, K, V> {\n    unsafe fn next_unchecked(&mut self) -> (&'a K, &'a mut V) {\n        unsafe { self.inner.front.as_mut().unwrap_unchecked().next_unchecked() }\n    }\n\n    /// Returns an iterator of references over the remaining items.\n    #[inline]\n    pub(super) fn iter(&self) -> Range<'_, K, V> {\n        Range { inner: self.inner.reborrow() }\n    }\n}\n\n#[stable(feature = \"btree_range\", since = \"1.17.0\")]\nimpl<'a, K, V> DoubleEndedIterator for RangeMut<'a, K, V> {\n    fn next_back(&mut self) -> Option<(&'a K, &'a mut V)> {\n        if self.inner.is_empty() { None } else { Some(unsafe { self.next_back_unchecked() }) }\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<K, V> FusedIterator for RangeMut<'_, K, V> {}\n\nimpl<'a, K, V> RangeMut<'a, K, V> {\n    unsafe fn next_back_unchecked(&mut self) -> (&'a K, &'a mut V) {\n        unsafe { self.inner.back.as_mut().unwrap_unchecked().next_back_unchecked() }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<K: Ord, V> FromIterator<(K, V)> for BTreeMap<K, V> {\n    fn from_iter<T: IntoIterator<Item = (K, V)>>(iter: T) -> BTreeMap<K, V> {\n        let mut map = BTreeMap::new();\n        map.extend(iter);\n        map\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<K: Ord, V> Extend<(K, V)> for BTreeMap<K, V> {\n    #[inline]\n    fn extend<T: IntoIterator<Item = (K, V)>>(&mut self, iter: T) {\n        iter.into_iter().for_each(move |(k, v)| {\n            self.insert(k, v);\n        });\n    }\n\n    #[inline]\n    fn extend_one(&mut self, (k, v): (K, V)) {\n        self.insert(k, v);\n    }\n}\n\n#[stable(feature = \"extend_ref\", since = \"1.2.0\")]\nimpl<'a, K: Ord + Copy, V: Copy> Extend<(&'a K, &'a V)> for BTreeMap<K, V> {\n    fn extend<I: IntoIterator<Item = (&'a K, &'a V)>>(&mut self, iter: I) {\n        self.extend(iter.into_iter().map(|(&key, &value)| (key, value)));\n    }\n\n    #[inline]\n    fn extend_one(&mut self, (&k, &v): (&'a K, &'a V)) {\n        self.insert(k, v);\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<K: Hash, V: Hash> Hash for BTreeMap<K, V> {\n    fn hash<H: Hasher>(&self, state: &mut H) {\n        for elt in self {\n            elt.hash(state);\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<K: Ord, V> Default for BTreeMap<K, V> {\n    /// Creates an empty `BTreeMap`.\n    fn default() -> BTreeMap<K, V> {\n        BTreeMap::new()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<K: PartialEq, V: PartialEq> PartialEq for BTreeMap<K, V> {\n    fn eq(&self, other: &BTreeMap<K, V>) -> bool {\n        self.len() == other.len() && self.iter().zip(other).all(|(a, b)| a == b)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<K: Eq, V: Eq> Eq for BTreeMap<K, V> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<K: PartialOrd, V: PartialOrd> PartialOrd for BTreeMap<K, V> {\n    #[inline]\n    fn partial_cmp(&self, other: &BTreeMap<K, V>) -> Option<Ordering> {\n        self.iter().partial_cmp(other.iter())\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<K: Ord, V: Ord> Ord for BTreeMap<K, V> {\n    #[inline]\n    fn cmp(&self, other: &BTreeMap<K, V>) -> Ordering {\n        self.iter().cmp(other.iter())\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<K: Debug, V: Debug> Debug for BTreeMap<K, V> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_map().entries(self.iter()).finish()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<K, Q: ?Sized, V> Index<&Q> for BTreeMap<K, V>\nwhere\n    K: Borrow<Q> + Ord,\n    Q: Ord,\n{\n    type Output = V;\n\n    /// Returns a reference to the value corresponding to the supplied key.\n    ///\n    /// # Panics\n    ///\n    /// Panics if the key is not present in the `BTreeMap`.\n    #[inline]\n    fn index(&self, key: &Q) -> &V {\n        self.get(key).expect(\"no entry found for key\")\n    }\n}\n\nimpl<K, V> BTreeMap<K, V> {\n    /// Gets an iterator over the entries of the map, sorted by key.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map = BTreeMap::new();\n    /// map.insert(3, \"c\");\n    /// map.insert(2, \"b\");\n    /// map.insert(1, \"a\");\n    ///\n    /// for (key, value) in map.iter() {\n    ///     println!(\"{}: {}\", key, value);\n    /// }\n    ///\n    /// let (first_key, first_value) = map.iter().next().unwrap();\n    /// assert_eq!((*first_key, *first_value), (1, \"a\"));\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn iter(&self) -> Iter<'_, K, V> {\n        if let Some(root) = &self.root {\n            let full_range = root.reborrow().full_range();\n\n            Iter { range: Range { inner: full_range }, length: self.length }\n        } else {\n            Iter { range: Range { inner: LeafRange::none() }, length: 0 }\n        }\n    }\n\n    /// Gets a mutable iterator over the entries of the map, sorted by key.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map = BTreeMap::new();\n    /// map.insert(\"a\", 1);\n    /// map.insert(\"b\", 2);\n    /// map.insert(\"c\", 3);\n    ///\n    /// // add 10 to the value if the key isn't \"a\"\n    /// for (key, value) in map.iter_mut() {\n    ///     if key != &\"a\" {\n    ///         *value += 10;\n    ///     }\n    /// }\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn iter_mut(&mut self) -> IterMut<'_, K, V> {\n        if let Some(root) = &mut self.root {\n            let full_range = root.borrow_valmut().full_range();\n\n            IterMut {\n                range: RangeMut { inner: full_range, _marker: PhantomData },\n                length: self.length,\n            }\n        } else {\n            IterMut {\n                range: RangeMut { inner: LeafRange::none(), _marker: PhantomData },\n                length: 0,\n            }\n        }\n    }\n\n    /// Gets an iterator over the keys of the map, in sorted order.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut a = BTreeMap::new();\n    /// a.insert(2, \"b\");\n    /// a.insert(1, \"a\");\n    ///\n    /// let keys: Vec<_> = a.keys().cloned().collect();\n    /// assert_eq!(keys, [1, 2]);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn keys(&self) -> Keys<'_, K, V> {\n        Keys { inner: self.iter() }\n    }\n\n    /// Gets an iterator over the values of the map, in order by key.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut a = BTreeMap::new();\n    /// a.insert(1, \"hello\");\n    /// a.insert(2, \"goodbye\");\n    ///\n    /// let values: Vec<&str> = a.values().cloned().collect();\n    /// assert_eq!(values, [\"hello\", \"goodbye\"]);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn values(&self) -> Values<'_, K, V> {\n        Values { inner: self.iter() }\n    }\n\n    /// Gets a mutable iterator over the values of the map, in order by key.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut a = BTreeMap::new();\n    /// a.insert(1, String::from(\"hello\"));\n    /// a.insert(2, String::from(\"goodbye\"));\n    ///\n    /// for value in a.values_mut() {\n    ///     value.push_str(\"!\");\n    /// }\n    ///\n    /// let values: Vec<String> = a.values().cloned().collect();\n    /// assert_eq!(values, [String::from(\"hello!\"),\n    ///                     String::from(\"goodbye!\")]);\n    /// ```\n    #[stable(feature = \"map_values_mut\", since = \"1.10.0\")]\n    pub fn values_mut(&mut self) -> ValuesMut<'_, K, V> {\n        ValuesMut { inner: self.iter_mut() }\n    }\n\n    /// Returns the number of elements in the map.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut a = BTreeMap::new();\n    /// assert_eq!(a.len(), 0);\n    /// a.insert(1, \"a\");\n    /// assert_eq!(a.len(), 1);\n    /// ```\n    #[doc(alias = \"length\")]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    #[rustc_const_unstable(feature = \"const_btree_new\", issue = \"71835\")]\n    pub const fn len(&self) -> usize {\n        self.length\n    }\n\n    /// Returns `true` if the map contains no elements.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut a = BTreeMap::new();\n    /// assert!(a.is_empty());\n    /// a.insert(1, \"a\");\n    /// assert!(!a.is_empty());\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    #[rustc_const_unstable(feature = \"const_btree_new\", issue = \"71835\")]\n    pub const fn is_empty(&self) -> bool {\n        self.len() == 0\n    }\n\n    /// If the root node is the empty (non-allocated) root node, allocate our\n    /// own node. Is an associated function to avoid borrowing the entire BTreeMap.\n    fn ensure_is_owned(root: &mut Option<Root<K, V>>) -> &mut Root<K, V> {\n        root.get_or_insert_with(Root::new)\n    }\n}\n\n#[cfg(test)]\nmod tests;\nuse core::marker::PhantomData;\nuse core::ptr::NonNull;\n\n/// Models a reborrow of some unique reference, when you know that the reborrow\n/// and all its descendants (i.e., all pointers and references derived from it)\n/// will not be used any more at some point, after which you want to use the\n/// original unique reference again.\n///\n/// The borrow checker usually handles this stacking of borrows for you, but\n/// some control flows that accomplish this stacking are too complicated for\n/// the compiler to follow. A `DormantMutRef` allows you to check borrowing\n/// yourself, while still expressing its stacked nature, and encapsulating\n/// the raw pointer code needed to do this without undefined behavior.\npub struct DormantMutRef<'a, T> {\n    ptr: NonNull<T>,\n    _marker: PhantomData<&'a mut T>,\n}\n\nunsafe impl<'a, T> Sync for DormantMutRef<'a, T> where &'a mut T: Sync {}\nunsafe impl<'a, T> Send for DormantMutRef<'a, T> where &'a mut T: Send {}\n\nimpl<'a, T> DormantMutRef<'a, T> {\n    /// Capture a unique borrow, and immediately reborrow it. For the compiler,\n    /// the lifetime of the new reference is the same as the lifetime of the\n    /// original reference, but you promise to use it for a shorter period.\n    pub fn new(t: &'a mut T) -> (&'a mut T, Self) {\n        let ptr = NonNull::from(t);\n        // SAFETY: we hold the borrow throughout 'a via `_marker`, and we expose\n        // only this reference, so it is unique.\n        let new_ref = unsafe { &mut *ptr.as_ptr() };\n        (new_ref, Self { ptr, _marker: PhantomData })\n    }\n\n    /// Revert to the unique borrow initially captured.\n    ///\n    /// # Safety\n    ///\n    /// The reborrow must have ended, i.e., the reference returned by `new` and\n    /// all pointers and references derived from it, must not be used anymore.\n    pub unsafe fn awaken(self) -> &'a mut T {\n        // SAFETY: our own safety conditions imply this reference is again unique.\n        unsafe { &mut *self.ptr.as_ptr() }\n    }\n}\n\n#[cfg(test)]\nmod tests;\nuse core::intrinsics;\nuse core::mem;\nuse core::ptr;\n\n/// This replaces the value behind the `v` unique reference by calling the\n/// relevant function.\n///\n/// If a panic occurs in the `change` closure, the entire process will be aborted.\n#[allow(dead_code)] // keep as illustration and for future use\n#[inline]\npub fn take_mut<T>(v: &mut T, change: impl FnOnce(T) -> T) {\n    replace(v, |value| (change(value), ()))\n}\n\n/// This replaces the value behind the `v` unique reference by calling the\n/// relevant function, and returns a result obtained along the way.\n///\n/// If a panic occurs in the `change` closure, the entire process will be aborted.\n#[inline]\npub fn replace<T, R>(v: &mut T, change: impl FnOnce(T) -> (T, R)) -> R {\n    struct PanicGuard;\n    impl Drop for PanicGuard {\n        fn drop(&mut self) {\n            intrinsics::abort()\n        }\n    }\n    let guard = PanicGuard;\n    let value = unsafe { ptr::read(v) };\n    let (new_value, ret) = change(value);\n    unsafe {\n        ptr::write(v, new_value);\n    }\n    mem::forget(guard);\n    ret\n}\nuse super::node::{ForceResult::*, Root};\nuse super::search::SearchResult::*;\nuse core::borrow::Borrow;\n\nimpl<K, V> Root<K, V> {\n    /// Calculates the length of both trees that result from splitting up\n    /// a given number of distinct key-value pairs.\n    pub fn calc_split_length(\n        total_num: usize,\n        root_a: &Root<K, V>,\n        root_b: &Root<K, V>,\n    ) -> (usize, usize) {\n        let (length_a, length_b);\n        if root_a.height() < root_b.height() {\n            length_a = root_a.reborrow().calc_length();\n            length_b = total_num - length_a;\n            debug_assert_eq!(length_b, root_b.reborrow().calc_length());\n        } else {\n            length_b = root_b.reborrow().calc_length();\n            length_a = total_num - length_b;\n            debug_assert_eq!(length_a, root_a.reborrow().calc_length());\n        }\n        (length_a, length_b)\n    }\n\n    /// Split off a tree with key-value pairs at and after the given key.\n    /// The result is meaningful only if the tree is ordered by key,\n    /// and if the ordering of `Q` corresponds to that of `K`.\n    /// If `self` respects all `BTreeMap` tree invariants, then both\n    /// `self` and the returned tree will respect those invariants.\n    pub fn split_off<Q: ?Sized + Ord>(&mut self, key: &Q) -> Self\n    where\n        K: Borrow<Q>,\n    {\n        let left_root = self;\n        let mut right_root = Root::new_pillar(left_root.height());\n        let mut left_node = left_root.borrow_mut();\n        let mut right_node = right_root.borrow_mut();\n\n        loop {\n            let mut split_edge = match left_node.search_node(key) {\n                // key is going to the right tree\n                Found(kv) => kv.left_edge(),\n                GoDown(edge) => edge,\n            };\n\n            split_edge.move_suffix(&mut right_node);\n\n            match (split_edge.force(), right_node.force()) {\n                (Internal(edge), Internal(node)) => {\n                    left_node = edge.descend();\n                    right_node = node.first_edge().descend();\n                }\n                (Leaf(_), Leaf(_)) => break,\n                _ => unreachable!(),\n            }\n        }\n\n        left_root.fix_right_border();\n        right_root.fix_left_border();\n        right_root\n    }\n\n    /// Creates a tree consisting of empty nodes.\n    fn new_pillar(height: usize) -> Self {\n        let mut root = Root::new();\n        for _ in 0..height {\n            root.push_internal_level();\n        }\n        root\n    }\n}\n// This is pretty much entirely stolen from TreeSet, since BTreeMap has an identical interface\n// to TreeMap\n\nuse core::borrow::Borrow;\nuse core::cmp::Ordering::{Equal, Greater, Less};\nuse core::cmp::{max, min};\nuse core::fmt::{self, Debug};\nuse core::iter::{FromIterator, FusedIterator, Peekable};\nuse core::ops::{BitAnd, BitOr, BitXor, RangeBounds, Sub};\n\nuse super::map::{BTreeMap, Keys};\nuse super::merge_iter::MergeIterInner;\nuse super::Recover;\n\n// FIXME(conventions): implement bounded iterators\n\n/// A set based on a B-Tree.\n///\n/// See [`BTreeMap`]'s documentation for a detailed discussion of this collection's performance\n/// benefits and drawbacks.\n///\n/// It is a logic error for an item to be modified in such a way that the item's ordering relative\n/// to any other item, as determined by the [`Ord`] trait, changes while it is in the set. This is\n/// normally only possible through [`Cell`], [`RefCell`], global state, I/O, or unsafe code.\n/// The behavior resulting from such a logic error is not specified, but will not result in\n/// undefined behavior. This could include panics, incorrect results, aborts, memory leaks, and\n/// non-termination.\n///\n/// [`Ord`]: core::cmp::Ord\n/// [`Cell`]: core::cell::Cell\n/// [`RefCell`]: core::cell::RefCell\n///\n/// # Examples\n///\n/// ```\n/// use std::collections::BTreeSet;\n///\n/// // Type inference lets us omit an explicit type signature (which\n/// // would be `BTreeSet<&str>` in this example).\n/// let mut books = BTreeSet::new();\n///\n/// // Add some books.\n/// books.insert(\"A Dance With Dragons\");\n/// books.insert(\"To Kill a Mockingbird\");\n/// books.insert(\"The Odyssey\");\n/// books.insert(\"The Great Gatsby\");\n///\n/// // Check for a specific one.\n/// if !books.contains(\"The Winds of Winter\") {\n///     println!(\"We have {} books, but The Winds of Winter ain't one.\",\n///              books.len());\n/// }\n///\n/// // Remove a book.\n/// books.remove(\"The Odyssey\");\n///\n/// // Iterate over everything.\n/// for book in &books {\n///     println!(\"{}\", book);\n/// }\n/// ```\n#[derive(Hash, PartialEq, Eq, Ord, PartialOrd)]\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\n#[cfg_attr(not(test), rustc_diagnostic_item = \"BTreeSet\")]\npub struct BTreeSet<T> {\n    map: BTreeMap<T, ()>,\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Clone> Clone for BTreeSet<T> {\n    fn clone(&self) -> Self {\n        BTreeSet { map: self.map.clone() }\n    }\n\n    fn clone_from(&mut self, other: &Self) {\n        self.map.clone_from(&other.map);\n    }\n}\n\n/// An iterator over the items of a `BTreeSet`.\n///\n/// This `struct` is created by the [`iter`] method on [`BTreeSet`].\n/// See its documentation for more.\n///\n/// [`iter`]: BTreeSet::iter\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct Iter<'a, T: 'a> {\n    iter: Keys<'a, T, ()>,\n}\n\n#[stable(feature = \"collection_debug\", since = \"1.17.0\")]\nimpl<T: fmt::Debug> fmt::Debug for Iter<'_, T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"Iter\").field(&self.iter.clone()).finish()\n    }\n}\n\n/// An owning iterator over the items of a `BTreeSet`.\n///\n/// This `struct` is created by the [`into_iter`] method on [`BTreeSet`]\n/// (provided by the `IntoIterator` trait). See its documentation for more.\n///\n/// [`into_iter`]: BTreeSet#method.into_iter\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\n#[derive(Debug)]\npub struct IntoIter<T> {\n    iter: super::map::IntoIter<T, ()>,\n}\n\n/// An iterator over a sub-range of items in a `BTreeSet`.\n///\n/// This `struct` is created by the [`range`] method on [`BTreeSet`].\n/// See its documentation for more.\n///\n/// [`range`]: BTreeSet::range\n#[derive(Debug)]\n#[stable(feature = \"btree_range\", since = \"1.17.0\")]\npub struct Range<'a, T: 'a> {\n    iter: super::map::Range<'a, T, ()>,\n}\n\n/// A lazy iterator producing elements in the difference of `BTreeSet`s.\n///\n/// This `struct` is created by the [`difference`] method on [`BTreeSet`].\n/// See its documentation for more.\n///\n/// [`difference`]: BTreeSet::difference\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct Difference<'a, T: 'a> {\n    inner: DifferenceInner<'a, T>,\n}\n#[derive(Debug)]\nenum DifferenceInner<'a, T: 'a> {\n    Stitch {\n        // iterate all of `self` and some of `other`, spotting matches along the way\n        self_iter: Iter<'a, T>,\n        other_iter: Peekable<Iter<'a, T>>,\n    },\n    Search {\n        // iterate `self`, look up in `other`\n        self_iter: Iter<'a, T>,\n        other_set: &'a BTreeSet<T>,\n    },\n    Iterate(Iter<'a, T>), // simply produce all values in `self`\n}\n\n#[stable(feature = \"collection_debug\", since = \"1.17.0\")]\nimpl<T: fmt::Debug> fmt::Debug for Difference<'_, T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"Difference\").field(&self.inner).finish()\n    }\n}\n\n/// A lazy iterator producing elements in the symmetric difference of `BTreeSet`s.\n///\n/// This `struct` is created by the [`symmetric_difference`] method on\n/// [`BTreeSet`]. See its documentation for more.\n///\n/// [`symmetric_difference`]: BTreeSet::symmetric_difference\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct SymmetricDifference<'a, T: 'a>(MergeIterInner<Iter<'a, T>>);\n\n#[stable(feature = \"collection_debug\", since = \"1.17.0\")]\nimpl<T: fmt::Debug> fmt::Debug for SymmetricDifference<'_, T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"SymmetricDifference\").field(&self.0).finish()\n    }\n}\n\n/// A lazy iterator producing elements in the intersection of `BTreeSet`s.\n///\n/// This `struct` is created by the [`intersection`] method on [`BTreeSet`].\n/// See its documentation for more.\n///\n/// [`intersection`]: BTreeSet::intersection\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct Intersection<'a, T: 'a> {\n    inner: IntersectionInner<'a, T>,\n}\n#[derive(Debug)]\nenum IntersectionInner<'a, T: 'a> {\n    Stitch {\n        // iterate similarly sized sets jointly, spotting matches along the way\n        a: Iter<'a, T>,\n        b: Iter<'a, T>,\n    },\n    Search {\n        // iterate a small set, look up in the large set\n        small_iter: Iter<'a, T>,\n        large_set: &'a BTreeSet<T>,\n    },\n    Answer(Option<&'a T>), // return a specific value or emptiness\n}\n\n#[stable(feature = \"collection_debug\", since = \"1.17.0\")]\nimpl<T: fmt::Debug> fmt::Debug for Intersection<'_, T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"Intersection\").field(&self.inner).finish()\n    }\n}\n\n/// A lazy iterator producing elements in the union of `BTreeSet`s.\n///\n/// This `struct` is created by the [`union`] method on [`BTreeSet`].\n/// See its documentation for more.\n///\n/// [`union`]: BTreeSet::union\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct Union<'a, T: 'a>(MergeIterInner<Iter<'a, T>>);\n\n#[stable(feature = \"collection_debug\", since = \"1.17.0\")]\nimpl<T: fmt::Debug> fmt::Debug for Union<'_, T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"Union\").field(&self.0).finish()\n    }\n}\n\n// This constant is used by functions that compare two sets.\n// It estimates the relative size at which searching performs better\n// than iterating, based on the benchmarks in\n// https://github.com/ssomers/rust_bench_btreeset_intersection.\n// It's used to divide rather than multiply sizes, to rule out overflow,\n// and it's a power of two to make that division cheap.\nconst ITER_PERFORMANCE_TIPPING_SIZE_DIFF: usize = 16;\n\nimpl<T> BTreeSet<T> {\n    /// Makes a new, empty `BTreeSet`.\n    ///\n    /// Does not allocate anything on its own.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// # #![allow(unused_mut)]\n    /// use std::collections::BTreeSet;\n    ///\n    /// let mut set: BTreeSet<i32> = BTreeSet::new();\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    #[rustc_const_unstable(feature = \"const_btree_new\", issue = \"71835\")]\n    pub const fn new() -> BTreeSet<T>\n    where\n        T: Ord,\n    {\n        BTreeSet { map: BTreeMap::new() }\n    }\n\n    /// Constructs a double-ended iterator over a sub-range of elements in the set.\n    /// The simplest way is to use the range syntax `min..max`, thus `range(min..max)` will\n    /// yield elements from min (inclusive) to max (exclusive).\n    /// The range may also be entered as `(Bound<T>, Bound<T>)`, so for example\n    /// `range((Excluded(4), Included(10)))` will yield a left-exclusive, right-inclusive\n    /// range from 4 to 10.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    /// use std::ops::Bound::Included;\n    ///\n    /// let mut set = BTreeSet::new();\n    /// set.insert(3);\n    /// set.insert(5);\n    /// set.insert(8);\n    /// for &elem in set.range((Included(&4), Included(&8))) {\n    ///     println!(\"{}\", elem);\n    /// }\n    /// assert_eq!(Some(&5), set.range(4..).next());\n    /// ```\n    #[stable(feature = \"btree_range\", since = \"1.17.0\")]\n    pub fn range<K: ?Sized, R>(&self, range: R) -> Range<'_, T>\n    where\n        K: Ord,\n        T: Borrow<K> + Ord,\n        R: RangeBounds<K>,\n    {\n        Range { iter: self.map.range(range) }\n    }\n\n    /// Visits the values representing the difference,\n    /// i.e., the values that are in `self` but not in `other`,\n    /// in ascending order.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let mut a = BTreeSet::new();\n    /// a.insert(1);\n    /// a.insert(2);\n    ///\n    /// let mut b = BTreeSet::new();\n    /// b.insert(2);\n    /// b.insert(3);\n    ///\n    /// let diff: Vec<_> = a.difference(&b).cloned().collect();\n    /// assert_eq!(diff, [1]);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn difference<'a>(&'a self, other: &'a BTreeSet<T>) -> Difference<'a, T>\n    where\n        T: Ord,\n    {\n        let (self_min, self_max) =\n            if let (Some(self_min), Some(self_max)) = (self.first(), self.last()) {\n                (self_min, self_max)\n            } else {\n                return Difference { inner: DifferenceInner::Iterate(self.iter()) };\n            };\n        let (other_min, other_max) =\n            if let (Some(other_min), Some(other_max)) = (other.first(), other.last()) {\n                (other_min, other_max)\n            } else {\n                return Difference { inner: DifferenceInner::Iterate(self.iter()) };\n            };\n        Difference {\n            inner: match (self_min.cmp(other_max), self_max.cmp(other_min)) {\n                (Greater, _) | (_, Less) => DifferenceInner::Iterate(self.iter()),\n                (Equal, _) => {\n                    let mut self_iter = self.iter();\n                    self_iter.next();\n                    DifferenceInner::Iterate(self_iter)\n                }\n                (_, Equal) => {\n                    let mut self_iter = self.iter();\n                    self_iter.next_back();\n                    DifferenceInner::Iterate(self_iter)\n                }\n                _ if self.len() <= other.len() / ITER_PERFORMANCE_TIPPING_SIZE_DIFF => {\n                    DifferenceInner::Search { self_iter: self.iter(), other_set: other }\n                }\n                _ => DifferenceInner::Stitch {\n                    self_iter: self.iter(),\n                    other_iter: other.iter().peekable(),\n                },\n            },\n        }\n    }\n\n    /// Visits the values representing the symmetric difference,\n    /// i.e., the values that are in `self` or in `other` but not in both,\n    /// in ascending order.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let mut a = BTreeSet::new();\n    /// a.insert(1);\n    /// a.insert(2);\n    ///\n    /// let mut b = BTreeSet::new();\n    /// b.insert(2);\n    /// b.insert(3);\n    ///\n    /// let sym_diff: Vec<_> = a.symmetric_difference(&b).cloned().collect();\n    /// assert_eq!(sym_diff, [1, 3]);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn symmetric_difference<'a>(&'a self, other: &'a BTreeSet<T>) -> SymmetricDifference<'a, T>\n    where\n        T: Ord,\n    {\n        SymmetricDifference(MergeIterInner::new(self.iter(), other.iter()))\n    }\n\n    /// Visits the values representing the intersection,\n    /// i.e., the values that are both in `self` and `other`,\n    /// in ascending order.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let mut a = BTreeSet::new();\n    /// a.insert(1);\n    /// a.insert(2);\n    ///\n    /// let mut b = BTreeSet::new();\n    /// b.insert(2);\n    /// b.insert(3);\n    ///\n    /// let intersection: Vec<_> = a.intersection(&b).cloned().collect();\n    /// assert_eq!(intersection, [2]);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn intersection<'a>(&'a self, other: &'a BTreeSet<T>) -> Intersection<'a, T>\n    where\n        T: Ord,\n    {\n        let (self_min, self_max) =\n            if let (Some(self_min), Some(self_max)) = (self.first(), self.last()) {\n                (self_min, self_max)\n            } else {\n                return Intersection { inner: IntersectionInner::Answer(None) };\n            };\n        let (other_min, other_max) =\n            if let (Some(other_min), Some(other_max)) = (other.first(), other.last()) {\n                (other_min, other_max)\n            } else {\n                return Intersection { inner: IntersectionInner::Answer(None) };\n            };\n        Intersection {\n            inner: match (self_min.cmp(other_max), self_max.cmp(other_min)) {\n                (Greater, _) | (_, Less) => IntersectionInner::Answer(None),\n                (Equal, _) => IntersectionInner::Answer(Some(self_min)),\n                (_, Equal) => IntersectionInner::Answer(Some(self_max)),\n                _ if self.len() <= other.len() / ITER_PERFORMANCE_TIPPING_SIZE_DIFF => {\n                    IntersectionInner::Search { small_iter: self.iter(), large_set: other }\n                }\n                _ if other.len() <= self.len() / ITER_PERFORMANCE_TIPPING_SIZE_DIFF => {\n                    IntersectionInner::Search { small_iter: other.iter(), large_set: self }\n                }\n                _ => IntersectionInner::Stitch { a: self.iter(), b: other.iter() },\n            },\n        }\n    }\n\n    /// Visits the values representing the union,\n    /// i.e., all the values in `self` or `other`, without duplicates,\n    /// in ascending order.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let mut a = BTreeSet::new();\n    /// a.insert(1);\n    ///\n    /// let mut b = BTreeSet::new();\n    /// b.insert(2);\n    ///\n    /// let union: Vec<_> = a.union(&b).cloned().collect();\n    /// assert_eq!(union, [1, 2]);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn union<'a>(&'a self, other: &'a BTreeSet<T>) -> Union<'a, T>\n    where\n        T: Ord,\n    {\n        Union(MergeIterInner::new(self.iter(), other.iter()))\n    }\n\n    /// Clears the set, removing all values.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let mut v = BTreeSet::new();\n    /// v.insert(1);\n    /// v.clear();\n    /// assert!(v.is_empty());\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn clear(&mut self) {\n        self.map.clear()\n    }\n\n    /// Returns `true` if the set contains a value.\n    ///\n    /// The value may be any borrowed form of the set's value type,\n    /// but the ordering on the borrowed form *must* match the\n    /// ordering on the value type.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let set: BTreeSet<_> = [1, 2, 3].iter().cloned().collect();\n    /// assert_eq!(set.contains(&1), true);\n    /// assert_eq!(set.contains(&4), false);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn contains<Q: ?Sized>(&self, value: &Q) -> bool\n    where\n        T: Borrow<Q> + Ord,\n        Q: Ord,\n    {\n        self.map.contains_key(value)\n    }\n\n    /// Returns a reference to the value in the set, if any, that is equal to the given value.\n    ///\n    /// The value may be any borrowed form of the set's value type,\n    /// but the ordering on the borrowed form *must* match the\n    /// ordering on the value type.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let set: BTreeSet<_> = [1, 2, 3].iter().cloned().collect();\n    /// assert_eq!(set.get(&2), Some(&2));\n    /// assert_eq!(set.get(&4), None);\n    /// ```\n    #[stable(feature = \"set_recovery\", since = \"1.9.0\")]\n    pub fn get<Q: ?Sized>(&self, value: &Q) -> Option<&T>\n    where\n        T: Borrow<Q> + Ord,\n        Q: Ord,\n    {\n        Recover::get(&self.map, value)\n    }\n\n    /// Returns `true` if `self` has no elements in common with `other`.\n    /// This is equivalent to checking for an empty intersection.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let a: BTreeSet<_> = [1, 2, 3].iter().cloned().collect();\n    /// let mut b = BTreeSet::new();\n    ///\n    /// assert_eq!(a.is_disjoint(&b), true);\n    /// b.insert(4);\n    /// assert_eq!(a.is_disjoint(&b), true);\n    /// b.insert(1);\n    /// assert_eq!(a.is_disjoint(&b), false);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn is_disjoint(&self, other: &BTreeSet<T>) -> bool\n    where\n        T: Ord,\n    {\n        self.intersection(other).next().is_none()\n    }\n\n    /// Returns `true` if the set is a subset of another,\n    /// i.e., `other` contains at least all the values in `self`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let sup: BTreeSet<_> = [1, 2, 3].iter().cloned().collect();\n    /// let mut set = BTreeSet::new();\n    ///\n    /// assert_eq!(set.is_subset(&sup), true);\n    /// set.insert(2);\n    /// assert_eq!(set.is_subset(&sup), true);\n    /// set.insert(4);\n    /// assert_eq!(set.is_subset(&sup), false);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn is_subset(&self, other: &BTreeSet<T>) -> bool\n    where\n        T: Ord,\n    {\n        // Same result as self.difference(other).next().is_none()\n        // but the code below is faster (hugely in some cases).\n        if self.len() > other.len() {\n            return false;\n        }\n        let (self_min, self_max) =\n            if let (Some(self_min), Some(self_max)) = (self.first(), self.last()) {\n                (self_min, self_max)\n            } else {\n                return true; // self is empty\n            };\n        let (other_min, other_max) =\n            if let (Some(other_min), Some(other_max)) = (other.first(), other.last()) {\n                (other_min, other_max)\n            } else {\n                return false; // other is empty\n            };\n        let mut self_iter = self.iter();\n        match self_min.cmp(other_min) {\n            Less => return false,\n            Equal => {\n                self_iter.next();\n            }\n            Greater => (),\n        }\n        match self_max.cmp(other_max) {\n            Greater => return false,\n            Equal => {\n                self_iter.next_back();\n            }\n            Less => (),\n        }\n        if self_iter.len() <= other.len() / ITER_PERFORMANCE_TIPPING_SIZE_DIFF {\n            for next in self_iter {\n                if !other.contains(next) {\n                    return false;\n                }\n            }\n        } else {\n            let mut other_iter = other.iter();\n            other_iter.next();\n            other_iter.next_back();\n            let mut self_next = self_iter.next();\n            while let Some(self1) = self_next {\n                match other_iter.next().map_or(Less, |other1| self1.cmp(other1)) {\n                    Less => return false,\n                    Equal => self_next = self_iter.next(),\n                    Greater => (),\n                }\n            }\n        }\n        true\n    }\n\n    /// Returns `true` if the set is a superset of another,\n    /// i.e., `self` contains at least all the values in `other`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let sub: BTreeSet<_> = [1, 2].iter().cloned().collect();\n    /// let mut set = BTreeSet::new();\n    ///\n    /// assert_eq!(set.is_superset(&sub), false);\n    ///\n    /// set.insert(0);\n    /// set.insert(1);\n    /// assert_eq!(set.is_superset(&sub), false);\n    ///\n    /// set.insert(2);\n    /// assert_eq!(set.is_superset(&sub), true);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn is_superset(&self, other: &BTreeSet<T>) -> bool\n    where\n        T: Ord,\n    {\n        other.is_subset(self)\n    }\n\n    /// Returns a reference to the first value in the set, if any.\n    /// This value is always the minimum of all values in the set.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// #![feature(map_first_last)]\n    /// use std::collections::BTreeSet;\n    ///\n    /// let mut set = BTreeSet::new();\n    /// assert_eq!(set.first(), None);\n    /// set.insert(1);\n    /// assert_eq!(set.first(), Some(&1));\n    /// set.insert(2);\n    /// assert_eq!(set.first(), Some(&1));\n    /// ```\n    #[unstable(feature = \"map_first_last\", issue = \"62924\")]\n    pub fn first(&self) -> Option<&T>\n    where\n        T: Ord,\n    {\n        self.map.first_key_value().map(|(k, _)| k)\n    }\n\n    /// Returns a reference to the last value in the set, if any.\n    /// This value is always the maximum of all values in the set.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// #![feature(map_first_last)]\n    /// use std::collections::BTreeSet;\n    ///\n    /// let mut set = BTreeSet::new();\n    /// assert_eq!(set.last(), None);\n    /// set.insert(1);\n    /// assert_eq!(set.last(), Some(&1));\n    /// set.insert(2);\n    /// assert_eq!(set.last(), Some(&2));\n    /// ```\n    #[unstable(feature = \"map_first_last\", issue = \"62924\")]\n    pub fn last(&self) -> Option<&T>\n    where\n        T: Ord,\n    {\n        self.map.last_key_value().map(|(k, _)| k)\n    }\n\n    /// Removes the first value from the set and returns it, if any.\n    /// The first value is always the minimum value in the set.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(map_first_last)]\n    /// use std::collections::BTreeSet;\n    ///\n    /// let mut set = BTreeSet::new();\n    ///\n    /// set.insert(1);\n    /// while let Some(n) = set.pop_first() {\n    ///     assert_eq!(n, 1);\n    /// }\n    /// assert!(set.is_empty());\n    /// ```\n    #[unstable(feature = \"map_first_last\", issue = \"62924\")]\n    pub fn pop_first(&mut self) -> Option<T>\n    where\n        T: Ord,\n    {\n        self.map.pop_first().map(|kv| kv.0)\n    }\n\n    /// Removes the last value from the set and returns it, if any.\n    /// The last value is always the maximum value in the set.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(map_first_last)]\n    /// use std::collections::BTreeSet;\n    ///\n    /// let mut set = BTreeSet::new();\n    ///\n    /// set.insert(1);\n    /// while let Some(n) = set.pop_last() {\n    ///     assert_eq!(n, 1);\n    /// }\n    /// assert!(set.is_empty());\n    /// ```\n    #[unstable(feature = \"map_first_last\", issue = \"62924\")]\n    pub fn pop_last(&mut self) -> Option<T>\n    where\n        T: Ord,\n    {\n        self.map.pop_last().map(|kv| kv.0)\n    }\n\n    /// Adds a value to the set.\n    ///\n    /// If the set did not have this value present, `true` is returned.\n    ///\n    /// If the set did have this value present, `false` is returned, and the\n    /// entry is not updated. See the [module-level documentation] for more.\n    ///\n    /// [module-level documentation]: index.html#insert-and-complex-keys\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let mut set = BTreeSet::new();\n    ///\n    /// assert_eq!(set.insert(2), true);\n    /// assert_eq!(set.insert(2), false);\n    /// assert_eq!(set.len(), 1);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn insert(&mut self, value: T) -> bool\n    where\n        T: Ord,\n    {\n        self.map.insert(value, ()).is_none()\n    }\n\n    /// Adds a value to the set, replacing the existing value, if any, that is equal to the given\n    /// one. Returns the replaced value.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let mut set = BTreeSet::new();\n    /// set.insert(Vec::<i32>::new());\n    ///\n    /// assert_eq!(set.get(&[][..]).unwrap().capacity(), 0);\n    /// set.replace(Vec::with_capacity(10));\n    /// assert_eq!(set.get(&[][..]).unwrap().capacity(), 10);\n    /// ```\n    #[stable(feature = \"set_recovery\", since = \"1.9.0\")]\n    pub fn replace(&mut self, value: T) -> Option<T>\n    where\n        T: Ord,\n    {\n        Recover::replace(&mut self.map, value)\n    }\n\n    /// Removes a value from the set. Returns whether the value was\n    /// present in the set.\n    ///\n    /// The value may be any borrowed form of the set's value type,\n    /// but the ordering on the borrowed form *must* match the\n    /// ordering on the value type.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let mut set = BTreeSet::new();\n    ///\n    /// set.insert(2);\n    /// assert_eq!(set.remove(&2), true);\n    /// assert_eq!(set.remove(&2), false);\n    /// ```\n    #[doc(alias = \"delete\")]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn remove<Q: ?Sized>(&mut self, value: &Q) -> bool\n    where\n        T: Borrow<Q> + Ord,\n        Q: Ord,\n    {\n        self.map.remove(value).is_some()\n    }\n\n    /// Removes and returns the value in the set, if any, that is equal to the given one.\n    ///\n    /// The value may be any borrowed form of the set's value type,\n    /// but the ordering on the borrowed form *must* match the\n    /// ordering on the value type.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let mut set: BTreeSet<_> = [1, 2, 3].iter().cloned().collect();\n    /// assert_eq!(set.take(&2), Some(2));\n    /// assert_eq!(set.take(&2), None);\n    /// ```\n    #[stable(feature = \"set_recovery\", since = \"1.9.0\")]\n    pub fn take<Q: ?Sized>(&mut self, value: &Q) -> Option<T>\n    where\n        T: Borrow<Q> + Ord,\n        Q: Ord,\n    {\n        Recover::take(&mut self.map, value)\n    }\n\n    /// Retains only the elements specified by the predicate.\n    ///\n    /// In other words, remove all elements `e` such that `f(&e)` returns `false`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let xs = [1, 2, 3, 4, 5, 6];\n    /// let mut set: BTreeSet<i32> = xs.iter().cloned().collect();\n    /// // Keep only the even numbers.\n    /// set.retain(|&k| k % 2 == 0);\n    /// assert!(set.iter().eq([2, 4, 6].iter()));\n    /// ```\n    #[stable(feature = \"btree_retain\", since = \"1.53.0\")]\n    pub fn retain<F>(&mut self, mut f: F)\n    where\n        T: Ord,\n        F: FnMut(&T) -> bool,\n    {\n        self.drain_filter(|v| !f(v));\n    }\n\n    /// Moves all elements from `other` into `Self`, leaving `other` empty.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let mut a = BTreeSet::new();\n    /// a.insert(1);\n    /// a.insert(2);\n    /// a.insert(3);\n    ///\n    /// let mut b = BTreeSet::new();\n    /// b.insert(3);\n    /// b.insert(4);\n    /// b.insert(5);\n    ///\n    /// a.append(&mut b);\n    ///\n    /// assert_eq!(a.len(), 5);\n    /// assert_eq!(b.len(), 0);\n    ///\n    /// assert!(a.contains(&1));\n    /// assert!(a.contains(&2));\n    /// assert!(a.contains(&3));\n    /// assert!(a.contains(&4));\n    /// assert!(a.contains(&5));\n    /// ```\n    #[stable(feature = \"btree_append\", since = \"1.11.0\")]\n    pub fn append(&mut self, other: &mut Self)\n    where\n        T: Ord,\n    {\n        self.map.append(&mut other.map);\n    }\n\n    /// Splits the collection into two at the given key. Returns everything after the given key,\n    /// including the key.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let mut a = BTreeSet::new();\n    /// a.insert(1);\n    /// a.insert(2);\n    /// a.insert(3);\n    /// a.insert(17);\n    /// a.insert(41);\n    ///\n    /// let b = a.split_off(&3);\n    ///\n    /// assert_eq!(a.len(), 2);\n    /// assert_eq!(b.len(), 3);\n    ///\n    /// assert!(a.contains(&1));\n    /// assert!(a.contains(&2));\n    ///\n    /// assert!(b.contains(&3));\n    /// assert!(b.contains(&17));\n    /// assert!(b.contains(&41));\n    /// ```\n    #[stable(feature = \"btree_split_off\", since = \"1.11.0\")]\n    pub fn split_off<Q: ?Sized + Ord>(&mut self, key: &Q) -> Self\n    where\n        T: Borrow<Q> + Ord,\n    {\n        BTreeSet { map: self.map.split_off(key) }\n    }\n\n    /// Creates an iterator which uses a closure to determine if a value should be removed.\n    ///\n    /// If the closure returns true, then the value is removed and yielded.\n    /// If the closure returns false, the value will remain in the list and will not be yielded\n    /// by the iterator.\n    ///\n    /// If the iterator is only partially consumed or not consumed at all, each of the remaining\n    /// values will still be subjected to the closure and removed and dropped if it returns true.\n    ///\n    /// It is unspecified how many more values will be subjected to the closure\n    /// if a panic occurs in the closure, or if a panic occurs while dropping a value, or if the\n    /// `DrainFilter` itself is leaked.\n    ///\n    /// # Examples\n    ///\n    /// Splitting a set into even and odd values, reusing the original set:\n    ///\n    /// ```\n    /// #![feature(btree_drain_filter)]\n    /// use std::collections::BTreeSet;\n    ///\n    /// let mut set: BTreeSet<i32> = (0..8).collect();\n    /// let evens: BTreeSet<_> = set.drain_filter(|v| v % 2 == 0).collect();\n    /// let odds = set;\n    /// assert_eq!(evens.into_iter().collect::<Vec<_>>(), vec![0, 2, 4, 6]);\n    /// assert_eq!(odds.into_iter().collect::<Vec<_>>(), vec![1, 3, 5, 7]);\n    /// ```\n    #[unstable(feature = \"btree_drain_filter\", issue = \"70530\")]\n    pub fn drain_filter<'a, F>(&'a mut self, pred: F) -> DrainFilter<'a, T, F>\n    where\n        T: Ord,\n        F: 'a + FnMut(&T) -> bool,\n    {\n        DrainFilter { pred, inner: self.map.drain_filter_inner() }\n    }\n\n    /// Gets an iterator that visits the values in the `BTreeSet` in ascending order.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let set: BTreeSet<usize> = [1, 2, 3].iter().cloned().collect();\n    /// let mut set_iter = set.iter();\n    /// assert_eq!(set_iter.next(), Some(&1));\n    /// assert_eq!(set_iter.next(), Some(&2));\n    /// assert_eq!(set_iter.next(), Some(&3));\n    /// assert_eq!(set_iter.next(), None);\n    /// ```\n    ///\n    /// Values returned by the iterator are returned in ascending order:\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let set: BTreeSet<usize> = [3, 1, 2].iter().cloned().collect();\n    /// let mut set_iter = set.iter();\n    /// assert_eq!(set_iter.next(), Some(&1));\n    /// assert_eq!(set_iter.next(), Some(&2));\n    /// assert_eq!(set_iter.next(), Some(&3));\n    /// assert_eq!(set_iter.next(), None);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn iter(&self) -> Iter<'_, T> {\n        Iter { iter: self.map.keys() }\n    }\n\n    /// Returns the number of elements in the set.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let mut v = BTreeSet::new();\n    /// assert_eq!(v.len(), 0);\n    /// v.insert(1);\n    /// assert_eq!(v.len(), 1);\n    /// ```\n    #[doc(alias = \"length\")]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    #[rustc_const_unstable(feature = \"const_btree_new\", issue = \"71835\")]\n    pub const fn len(&self) -> usize {\n        self.map.len()\n    }\n\n    /// Returns `true` if the set contains no elements.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let mut v = BTreeSet::new();\n    /// assert!(v.is_empty());\n    /// v.insert(1);\n    /// assert!(!v.is_empty());\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    #[rustc_const_unstable(feature = \"const_btree_new\", issue = \"71835\")]\n    pub const fn is_empty(&self) -> bool {\n        self.len() == 0\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Ord> FromIterator<T> for BTreeSet<T> {\n    fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> BTreeSet<T> {\n        let mut set = BTreeSet::new();\n        set.extend(iter);\n        set\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> IntoIterator for BTreeSet<T> {\n    type Item = T;\n    type IntoIter = IntoIter<T>;\n\n    /// Gets an iterator for moving out the `BTreeSet`'s contents.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let set: BTreeSet<usize> = [1, 2, 3, 4].iter().cloned().collect();\n    ///\n    /// let v: Vec<_> = set.into_iter().collect();\n    /// assert_eq!(v, [1, 2, 3, 4]);\n    /// ```\n    fn into_iter(self) -> IntoIter<T> {\n        IntoIter { iter: self.map.into_iter() }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T> IntoIterator for &'a BTreeSet<T> {\n    type Item = &'a T;\n    type IntoIter = Iter<'a, T>;\n\n    fn into_iter(self) -> Iter<'a, T> {\n        self.iter()\n    }\n}\n\n/// An iterator produced by calling `drain_filter` on BTreeSet.\n#[unstable(feature = \"btree_drain_filter\", issue = \"70530\")]\npub struct DrainFilter<'a, T, F>\nwhere\n    T: 'a,\n    F: 'a + FnMut(&T) -> bool,\n{\n    pred: F,\n    inner: super::map::DrainFilterInner<'a, T, ()>,\n}\n\n#[unstable(feature = \"btree_drain_filter\", issue = \"70530\")]\nimpl<T, F> Drop for DrainFilter<'_, T, F>\nwhere\n    F: FnMut(&T) -> bool,\n{\n    fn drop(&mut self) {\n        self.for_each(drop);\n    }\n}\n\n#[unstable(feature = \"btree_drain_filter\", issue = \"70530\")]\nimpl<T, F> fmt::Debug for DrainFilter<'_, T, F>\nwhere\n    T: fmt::Debug,\n    F: FnMut(&T) -> bool,\n{\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"DrainFilter\").field(&self.inner.peek().map(|(k, _)| k)).finish()\n    }\n}\n\n#[unstable(feature = \"btree_drain_filter\", issue = \"70530\")]\nimpl<'a, T, F> Iterator for DrainFilter<'_, T, F>\nwhere\n    F: 'a + FnMut(&T) -> bool,\n{\n    type Item = T;\n\n    fn next(&mut self) -> Option<T> {\n        let pred = &mut self.pred;\n        let mut mapped_pred = |k: &T, _v: &mut ()| pred(k);\n        self.inner.next(&mut mapped_pred).map(|(k, _)| k)\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.inner.size_hint()\n    }\n}\n\n#[unstable(feature = \"btree_drain_filter\", issue = \"70530\")]\nimpl<T, F> FusedIterator for DrainFilter<'_, T, F> where F: FnMut(&T) -> bool {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Ord> Extend<T> for BTreeSet<T> {\n    #[inline]\n    fn extend<Iter: IntoIterator<Item = T>>(&mut self, iter: Iter) {\n        iter.into_iter().for_each(move |elem| {\n            self.insert(elem);\n        });\n    }\n\n    #[inline]\n    fn extend_one(&mut self, elem: T) {\n        self.insert(elem);\n    }\n}\n\n#[stable(feature = \"extend_ref\", since = \"1.2.0\")]\nimpl<'a, T: 'a + Ord + Copy> Extend<&'a T> for BTreeSet<T> {\n    fn extend<I: IntoIterator<Item = &'a T>>(&mut self, iter: I) {\n        self.extend(iter.into_iter().cloned());\n    }\n\n    #[inline]\n    fn extend_one(&mut self, &elem: &'a T) {\n        self.insert(elem);\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Ord> Default for BTreeSet<T> {\n    /// Creates an empty `BTreeSet`.\n    fn default() -> BTreeSet<T> {\n        BTreeSet::new()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Ord + Clone> Sub<&BTreeSet<T>> for &BTreeSet<T> {\n    type Output = BTreeSet<T>;\n\n    /// Returns the difference of `self` and `rhs` as a new `BTreeSet<T>`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let a: BTreeSet<_> = vec![1, 2, 3].into_iter().collect();\n    /// let b: BTreeSet<_> = vec![3, 4, 5].into_iter().collect();\n    ///\n    /// let result = &a - &b;\n    /// let result_vec: Vec<_> = result.into_iter().collect();\n    /// assert_eq!(result_vec, [1, 2]);\n    /// ```\n    fn sub(self, rhs: &BTreeSet<T>) -> BTreeSet<T> {\n        self.difference(rhs).cloned().collect()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Ord + Clone> BitXor<&BTreeSet<T>> for &BTreeSet<T> {\n    type Output = BTreeSet<T>;\n\n    /// Returns the symmetric difference of `self` and `rhs` as a new `BTreeSet<T>`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let a: BTreeSet<_> = vec![1, 2, 3].into_iter().collect();\n    /// let b: BTreeSet<_> = vec![2, 3, 4].into_iter().collect();\n    ///\n    /// let result = &a ^ &b;\n    /// let result_vec: Vec<_> = result.into_iter().collect();\n    /// assert_eq!(result_vec, [1, 4]);\n    /// ```\n    fn bitxor(self, rhs: &BTreeSet<T>) -> BTreeSet<T> {\n        self.symmetric_difference(rhs).cloned().collect()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Ord + Clone> BitAnd<&BTreeSet<T>> for &BTreeSet<T> {\n    type Output = BTreeSet<T>;\n\n    /// Returns the intersection of `self` and `rhs` as a new `BTreeSet<T>`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let a: BTreeSet<_> = vec![1, 2, 3].into_iter().collect();\n    /// let b: BTreeSet<_> = vec![2, 3, 4].into_iter().collect();\n    ///\n    /// let result = &a & &b;\n    /// let result_vec: Vec<_> = result.into_iter().collect();\n    /// assert_eq!(result_vec, [2, 3]);\n    /// ```\n    fn bitand(self, rhs: &BTreeSet<T>) -> BTreeSet<T> {\n        self.intersection(rhs).cloned().collect()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Ord + Clone> BitOr<&BTreeSet<T>> for &BTreeSet<T> {\n    type Output = BTreeSet<T>;\n\n    /// Returns the union of `self` and `rhs` as a new `BTreeSet<T>`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeSet;\n    ///\n    /// let a: BTreeSet<_> = vec![1, 2, 3].into_iter().collect();\n    /// let b: BTreeSet<_> = vec![3, 4, 5].into_iter().collect();\n    ///\n    /// let result = &a | &b;\n    /// let result_vec: Vec<_> = result.into_iter().collect();\n    /// assert_eq!(result_vec, [1, 2, 3, 4, 5]);\n    /// ```\n    fn bitor(self, rhs: &BTreeSet<T>) -> BTreeSet<T> {\n        self.union(rhs).cloned().collect()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Debug> Debug for BTreeSet<T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_set().entries(self.iter()).finish()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> Clone for Iter<'_, T> {\n    fn clone(&self) -> Self {\n        Iter { iter: self.iter.clone() }\n    }\n}\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T> Iterator for Iter<'a, T> {\n    type Item = &'a T;\n\n    fn next(&mut self) -> Option<&'a T> {\n        self.iter.next()\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.iter.size_hint()\n    }\n\n    fn last(mut self) -> Option<&'a T> {\n        self.next_back()\n    }\n\n    fn min(mut self) -> Option<&'a T> {\n        self.next()\n    }\n\n    fn max(mut self) -> Option<&'a T> {\n        self.next_back()\n    }\n}\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T> DoubleEndedIterator for Iter<'a, T> {\n    fn next_back(&mut self) -> Option<&'a T> {\n        self.iter.next_back()\n    }\n}\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> ExactSizeIterator for Iter<'_, T> {\n    fn len(&self) -> usize {\n        self.iter.len()\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<T> FusedIterator for Iter<'_, T> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> Iterator for IntoIter<T> {\n    type Item = T;\n\n    fn next(&mut self) -> Option<T> {\n        self.iter.next().map(|(k, _)| k)\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.iter.size_hint()\n    }\n}\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> DoubleEndedIterator for IntoIter<T> {\n    fn next_back(&mut self) -> Option<T> {\n        self.iter.next_back().map(|(k, _)| k)\n    }\n}\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> ExactSizeIterator for IntoIter<T> {\n    fn len(&self) -> usize {\n        self.iter.len()\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<T> FusedIterator for IntoIter<T> {}\n\n#[stable(feature = \"btree_range\", since = \"1.17.0\")]\nimpl<T> Clone for Range<'_, T> {\n    fn clone(&self) -> Self {\n        Range { iter: self.iter.clone() }\n    }\n}\n\n#[stable(feature = \"btree_range\", since = \"1.17.0\")]\nimpl<'a, T> Iterator for Range<'a, T> {\n    type Item = &'a T;\n\n    fn next(&mut self) -> Option<&'a T> {\n        self.iter.next().map(|(k, _)| k)\n    }\n\n    fn last(mut self) -> Option<&'a T> {\n        self.next_back()\n    }\n\n    fn min(mut self) -> Option<&'a T> {\n        self.next()\n    }\n\n    fn max(mut self) -> Option<&'a T> {\n        self.next_back()\n    }\n}\n\n#[stable(feature = \"btree_range\", since = \"1.17.0\")]\nimpl<'a, T> DoubleEndedIterator for Range<'a, T> {\n    fn next_back(&mut self) -> Option<&'a T> {\n        self.iter.next_back().map(|(k, _)| k)\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<T> FusedIterator for Range<'_, T> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> Clone for Difference<'_, T> {\n    fn clone(&self) -> Self {\n        Difference {\n            inner: match &self.inner {\n                DifferenceInner::Stitch { self_iter, other_iter } => DifferenceInner::Stitch {\n                    self_iter: self_iter.clone(),\n                    other_iter: other_iter.clone(),\n                },\n                DifferenceInner::Search { self_iter, other_set } => {\n                    DifferenceInner::Search { self_iter: self_iter.clone(), other_set }\n                }\n                DifferenceInner::Iterate(iter) => DifferenceInner::Iterate(iter.clone()),\n            },\n        }\n    }\n}\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T: Ord> Iterator for Difference<'a, T> {\n    type Item = &'a T;\n\n    fn next(&mut self) -> Option<&'a T> {\n        match &mut self.inner {\n            DifferenceInner::Stitch { self_iter, other_iter } => {\n                let mut self_next = self_iter.next()?;\n                loop {\n                    match other_iter.peek().map_or(Less, |other_next| self_next.cmp(other_next)) {\n                        Less => return Some(self_next),\n                        Equal => {\n                            self_next = self_iter.next()?;\n                            other_iter.next();\n                        }\n                        Greater => {\n                            other_iter.next();\n                        }\n                    }\n                }\n            }\n            DifferenceInner::Search { self_iter, other_set } => loop {\n                let self_next = self_iter.next()?;\n                if !other_set.contains(&self_next) {\n                    return Some(self_next);\n                }\n            },\n            DifferenceInner::Iterate(iter) => iter.next(),\n        }\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        let (self_len, other_len) = match &self.inner {\n            DifferenceInner::Stitch { self_iter, other_iter } => {\n                (self_iter.len(), other_iter.len())\n            }\n            DifferenceInner::Search { self_iter, other_set } => (self_iter.len(), other_set.len()),\n            DifferenceInner::Iterate(iter) => (iter.len(), 0),\n        };\n        (self_len.saturating_sub(other_len), Some(self_len))\n    }\n\n    fn min(mut self) -> Option<&'a T> {\n        self.next()\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<T: Ord> FusedIterator for Difference<'_, T> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> Clone for SymmetricDifference<'_, T> {\n    fn clone(&self) -> Self {\n        SymmetricDifference(self.0.clone())\n    }\n}\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T: Ord> Iterator for SymmetricDifference<'a, T> {\n    type Item = &'a T;\n\n    fn next(&mut self) -> Option<&'a T> {\n        loop {\n            let (a_next, b_next) = self.0.nexts(Self::Item::cmp);\n            if a_next.and(b_next).is_none() {\n                return a_next.or(b_next);\n            }\n        }\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        let (a_len, b_len) = self.0.lens();\n        // No checked_add, because even if a and b refer to the same set,\n        // and T is an empty type, the storage overhead of sets limits\n        // the number of elements to less than half the range of usize.\n        (0, Some(a_len + b_len))\n    }\n\n    fn min(mut self) -> Option<&'a T> {\n        self.next()\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<T: Ord> FusedIterator for SymmetricDifference<'_, T> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> Clone for Intersection<'_, T> {\n    fn clone(&self) -> Self {\n        Intersection {\n            inner: match &self.inner {\n                IntersectionInner::Stitch { a, b } => {\n                    IntersectionInner::Stitch { a: a.clone(), b: b.clone() }\n                }\n                IntersectionInner::Search { small_iter, large_set } => {\n                    IntersectionInner::Search { small_iter: small_iter.clone(), large_set }\n                }\n                IntersectionInner::Answer(answer) => IntersectionInner::Answer(*answer),\n            },\n        }\n    }\n}\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T: Ord> Iterator for Intersection<'a, T> {\n    type Item = &'a T;\n\n    fn next(&mut self) -> Option<&'a T> {\n        match &mut self.inner {\n            IntersectionInner::Stitch { a, b } => {\n                let mut a_next = a.next()?;\n                let mut b_next = b.next()?;\n                loop {\n                    match a_next.cmp(b_next) {\n                        Less => a_next = a.next()?,\n                        Greater => b_next = b.next()?,\n                        Equal => return Some(a_next),\n                    }\n                }\n            }\n            IntersectionInner::Search { small_iter, large_set } => loop {\n                let small_next = small_iter.next()?;\n                if large_set.contains(&small_next) {\n                    return Some(small_next);\n                }\n            },\n            IntersectionInner::Answer(answer) => answer.take(),\n        }\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        match &self.inner {\n            IntersectionInner::Stitch { a, b } => (0, Some(min(a.len(), b.len()))),\n            IntersectionInner::Search { small_iter, .. } => (0, Some(small_iter.len())),\n            IntersectionInner::Answer(None) => (0, Some(0)),\n            IntersectionInner::Answer(Some(_)) => (1, Some(1)),\n        }\n    }\n\n    fn min(mut self) -> Option<&'a T> {\n        self.next()\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<T: Ord> FusedIterator for Intersection<'_, T> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> Clone for Union<'_, T> {\n    fn clone(&self) -> Self {\n        Union(self.0.clone())\n    }\n}\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T: Ord> Iterator for Union<'a, T> {\n    type Item = &'a T;\n\n    fn next(&mut self) -> Option<&'a T> {\n        let (a_next, b_next) = self.0.nexts(Self::Item::cmp);\n        a_next.or(b_next)\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        let (a_len, b_len) = self.0.lens();\n        // No checked_add - see SymmetricDifference::size_hint.\n        (max(a_len, b_len), Some(a_len + b_len))\n    }\n\n    fn min(mut self) -> Option<&'a T> {\n        self.next()\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<T: Ord> FusedIterator for Union<'_, T> {}\n\n#[cfg(test)]\nmod tests;\nuse core::borrow::Borrow;\nuse core::ops::RangeBounds;\nuse core::ptr;\n\nuse super::node::{marker, ForceResult::*, Handle, NodeRef};\n\npub struct LeafRange<BorrowType, K, V> {\n    pub front: Option<Handle<NodeRef<BorrowType, K, V, marker::Leaf>, marker::Edge>>,\n    pub back: Option<Handle<NodeRef<BorrowType, K, V, marker::Leaf>, marker::Edge>>,\n}\n\nimpl<BorrowType, K, V> LeafRange<BorrowType, K, V> {\n    pub fn none() -> Self {\n        LeafRange { front: None, back: None }\n    }\n\n    pub fn is_empty(&self) -> bool {\n        self.front == self.back\n    }\n\n    /// Temporarily takes out another, immutable equivalent of the same range.\n    pub fn reborrow(&self) -> LeafRange<marker::Immut<'_>, K, V> {\n        LeafRange {\n            front: self.front.as_ref().map(|f| f.reborrow()),\n            back: self.back.as_ref().map(|b| b.reborrow()),\n        }\n    }\n}\n\nimpl<BorrowType: marker::BorrowType, K, V> NodeRef<BorrowType, K, V, marker::LeafOrInternal> {\n    /// Finds the distinct leaf edges delimiting a specified range in a tree.\n    ///\n    /// If such distinct edges exist, returns them in ascending order, meaning\n    /// that a non-zero number of calls to `next_unchecked` on the `front` of\n    /// the result and/or calls to `next_back_unchecked` on the `back` of the\n    /// result will eventually reach the same edge.\n    ///\n    /// If there are no such edges, i.e., if the tree contains no key within\n    /// the range, returns a pair of empty options.\n    ///\n    /// # Safety\n    /// Unless `BorrowType` is `Immut`, do not use the handles to visit the same\n    /// KV twice.\n    unsafe fn find_leaf_edges_spanning_range<Q: ?Sized, R>(\n        self,\n        range: R,\n    ) -> LeafRange<BorrowType, K, V>\n    where\n        Q: Ord,\n        K: Borrow<Q>,\n        R: RangeBounds<Q>,\n    {\n        match self.search_tree_for_bifurcation(&range) {\n            Err(_) => LeafRange::none(),\n            Ok((\n                node,\n                lower_edge_idx,\n                upper_edge_idx,\n                mut lower_child_bound,\n                mut upper_child_bound,\n            )) => {\n                let mut lower_edge = unsafe { Handle::new_edge(ptr::read(&node), lower_edge_idx) };\n                let mut upper_edge = unsafe { Handle::new_edge(node, upper_edge_idx) };\n                loop {\n                    match (lower_edge.force(), upper_edge.force()) {\n                        (Leaf(f), Leaf(b)) => return LeafRange { front: Some(f), back: Some(b) },\n                        (Internal(f), Internal(b)) => {\n                            (lower_edge, lower_child_bound) =\n                                f.descend().find_lower_bound_edge(lower_child_bound);\n                            (upper_edge, upper_child_bound) =\n                                b.descend().find_upper_bound_edge(upper_child_bound);\n                        }\n                        _ => unreachable!(\"BTreeMap has different depths\"),\n                    }\n                }\n            }\n        }\n    }\n}\n\n/// Equivalent to `(root1.first_leaf_edge(), root2.last_leaf_edge())` but more efficient.\nfn full_range<BorrowType: marker::BorrowType, K, V>(\n    root1: NodeRef<BorrowType, K, V, marker::LeafOrInternal>,\n    root2: NodeRef<BorrowType, K, V, marker::LeafOrInternal>,\n) -> LeafRange<BorrowType, K, V> {\n    let mut min_node = root1;\n    let mut max_node = root2;\n    loop {\n        let front = min_node.first_edge();\n        let back = max_node.last_edge();\n        match (front.force(), back.force()) {\n            (Leaf(f), Leaf(b)) => {\n                return LeafRange { front: Some(f), back: Some(b) };\n            }\n            (Internal(min_int), Internal(max_int)) => {\n                min_node = min_int.descend();\n                max_node = max_int.descend();\n            }\n            _ => unreachable!(\"BTreeMap has different depths\"),\n        };\n    }\n}\n\nimpl<'a, K: 'a, V: 'a> NodeRef<marker::Immut<'a>, K, V, marker::LeafOrInternal> {\n    /// Finds the pair of leaf edges delimiting a specific range in a tree.\n    ///\n    /// The result is meaningful only if the tree is ordered by key, like the tree\n    /// in a `BTreeMap` is.\n    pub fn range_search<Q, R>(self, range: R) -> LeafRange<marker::Immut<'a>, K, V>\n    where\n        Q: ?Sized + Ord,\n        K: Borrow<Q>,\n        R: RangeBounds<Q>,\n    {\n        // SAFETY: our borrow type is immutable.\n        unsafe { self.find_leaf_edges_spanning_range(range) }\n    }\n\n    /// Finds the pair of leaf edges delimiting an entire tree.\n    pub fn full_range(self) -> LeafRange<marker::Immut<'a>, K, V> {\n        full_range(self, self)\n    }\n}\n\nimpl<'a, K: 'a, V: 'a> NodeRef<marker::ValMut<'a>, K, V, marker::LeafOrInternal> {\n    /// Splits a unique reference into a pair of leaf edges delimiting a specified range.\n    /// The result are non-unique references allowing (some) mutation, which must be used\n    /// carefully.\n    ///\n    /// The result is meaningful only if the tree is ordered by key, like the tree\n    /// in a `BTreeMap` is.\n    ///\n    /// # Safety\n    /// Do not use the duplicate handles to visit the same KV twice.\n    pub fn range_search<Q, R>(self, range: R) -> LeafRange<marker::ValMut<'a>, K, V>\n    where\n        Q: ?Sized + Ord,\n        K: Borrow<Q>,\n        R: RangeBounds<Q>,\n    {\n        unsafe { self.find_leaf_edges_spanning_range(range) }\n    }\n\n    /// Splits a unique reference into a pair of leaf edges delimiting the full range of the tree.\n    /// The results are non-unique references allowing mutation (of values only), so must be used\n    /// with care.\n    pub fn full_range(self) -> LeafRange<marker::ValMut<'a>, K, V> {\n        // We duplicate the root NodeRef here -- we will never visit the same KV\n        // twice, and never end up with overlapping value references.\n        let self2 = unsafe { ptr::read(&self) };\n        full_range(self, self2)\n    }\n}\n\nimpl<K, V> NodeRef<marker::Dying, K, V, marker::LeafOrInternal> {\n    /// Splits a unique reference into a pair of leaf edges delimiting the full range of the tree.\n    /// The results are non-unique references allowing massively destructive mutation, so must be\n    /// used with the utmost care.\n    pub fn full_range(self) -> LeafRange<marker::Dying, K, V> {\n        // We duplicate the root NodeRef here -- we will never access it in a way\n        // that overlaps references obtained from the root.\n        let self2 = unsafe { ptr::read(&self) };\n        full_range(self, self2)\n    }\n}\n\nimpl<BorrowType: marker::BorrowType, K, V>\n    Handle<NodeRef<BorrowType, K, V, marker::Leaf>, marker::Edge>\n{\n    /// Given a leaf edge handle, returns [`Result::Ok`] with a handle to the neighboring KV\n    /// on the right side, which is either in the same leaf node or in an ancestor node.\n    /// If the leaf edge is the last one in the tree, returns [`Result::Err`] with the root node.\n    pub fn next_kv(\n        self,\n    ) -> Result<\n        Handle<NodeRef<BorrowType, K, V, marker::LeafOrInternal>, marker::KV>,\n        NodeRef<BorrowType, K, V, marker::LeafOrInternal>,\n    > {\n        let mut edge = self.forget_node_type();\n        loop {\n            edge = match edge.right_kv() {\n                Ok(kv) => return Ok(kv),\n                Err(last_edge) => match last_edge.into_node().ascend() {\n                    Ok(parent_edge) => parent_edge.forget_node_type(),\n                    Err(root) => return Err(root),\n                },\n            }\n        }\n    }\n\n    /// Given a leaf edge handle, returns [`Result::Ok`] with a handle to the neighboring KV\n    /// on the left side, which is either in the same leaf node or in an ancestor node.\n    /// If the leaf edge is the first one in the tree, returns [`Result::Err`] with the root node.\n    pub fn next_back_kv(\n        self,\n    ) -> Result<\n        Handle<NodeRef<BorrowType, K, V, marker::LeafOrInternal>, marker::KV>,\n        NodeRef<BorrowType, K, V, marker::LeafOrInternal>,\n    > {\n        let mut edge = self.forget_node_type();\n        loop {\n            edge = match edge.left_kv() {\n                Ok(kv) => return Ok(kv),\n                Err(last_edge) => match last_edge.into_node().ascend() {\n                    Ok(parent_edge) => parent_edge.forget_node_type(),\n                    Err(root) => return Err(root),\n                },\n            }\n        }\n    }\n}\n\nimpl<BorrowType: marker::BorrowType, K, V>\n    Handle<NodeRef<BorrowType, K, V, marker::Internal>, marker::Edge>\n{\n    /// Given an internal edge handle, returns [`Result::Ok`] with a handle to the neighboring KV\n    /// on the right side, which is either in the same internal node or in an ancestor node.\n    /// If the internal edge is the last one in the tree, returns [`Result::Err`] with the root node.\n    pub fn next_kv(\n        self,\n    ) -> Result<\n        Handle<NodeRef<BorrowType, K, V, marker::Internal>, marker::KV>,\n        NodeRef<BorrowType, K, V, marker::Internal>,\n    > {\n        let mut edge = self;\n        loop {\n            edge = match edge.right_kv() {\n                Ok(internal_kv) => return Ok(internal_kv),\n                Err(last_edge) => match last_edge.into_node().ascend() {\n                    Ok(parent_edge) => parent_edge,\n                    Err(root) => return Err(root),\n                },\n            }\n        }\n    }\n}\n\nimpl<K, V> Handle<NodeRef<marker::Dying, K, V, marker::Leaf>, marker::Edge> {\n    /// Given a leaf edge handle into a dying tree, returns the next leaf edge\n    /// on the right side, and the key-value pair in between, which is either\n    /// in the same leaf node, in an ancestor node, or non-existent.\n    ///\n    /// This method also deallocates any node(s) it reaches the end of. This\n    /// implies that if no more key-value pair exists, the entire remainder of\n    /// the tree will have been deallocated and there is nothing left to return.\n    ///\n    /// # Safety\n    /// The given edge must not have been previously returned by counterpart\n    /// `deallocating_next_back`.\n    unsafe fn deallocating_next(self) -> Option<(Self, (K, V))> {\n        let mut edge = self.forget_node_type();\n        loop {\n            edge = match edge.right_kv() {\n                Ok(kv) => {\n                    let k = unsafe { ptr::read(kv.reborrow().into_kv().0) };\n                    let v = unsafe { ptr::read(kv.reborrow().into_kv().1) };\n                    return Some((kv.next_leaf_edge(), (k, v)));\n                }\n                Err(last_edge) => match unsafe { last_edge.into_node().deallocate_and_ascend() } {\n                    Some(parent_edge) => parent_edge.forget_node_type(),\n                    None => return None,\n                },\n            }\n        }\n    }\n\n    /// Given a leaf edge handle into a dying tree, returns the next leaf edge\n    /// on the left side, and the key-value pair in between, which is either\n    /// in the same leaf node, in an ancestor node, or non-existent.\n    ///\n    /// This method also deallocates any node(s) it reaches the end of. This\n    /// implies that if no more key-value pair exists, the entire remainder of\n    /// the tree will have been deallocated and there is nothing left to return.\n    ///\n    /// # Safety\n    /// The given edge must not have been previously returned by counterpart\n    /// `deallocating_next`.\n    unsafe fn deallocating_next_back(self) -> Option<(Self, (K, V))> {\n        let mut edge = self.forget_node_type();\n        loop {\n            edge = match edge.left_kv() {\n                Ok(kv) => {\n                    let k = unsafe { ptr::read(kv.reborrow().into_kv().0) };\n                    let v = unsafe { ptr::read(kv.reborrow().into_kv().1) };\n                    return Some((kv.next_back_leaf_edge(), (k, v)));\n                }\n                Err(last_edge) => match unsafe { last_edge.into_node().deallocate_and_ascend() } {\n                    Some(parent_edge) => parent_edge.forget_node_type(),\n                    None => return None,\n                },\n            }\n        }\n    }\n\n    /// Deallocates a pile of nodes from the leaf up to the root.\n    /// This is the only way to deallocate the remainder of a tree after\n    /// `deallocating_next` and `deallocating_next_back` have been nibbling at\n    /// both sides of the tree, and have hit the same edge. As it is intended\n    /// only to be called when all keys and values have been returned,\n    /// no cleanup is done on any of the keys or values.\n    pub fn deallocating_end(self) {\n        let mut edge = self.forget_node_type();\n        while let Some(parent_edge) = unsafe { edge.into_node().deallocate_and_ascend() } {\n            edge = parent_edge.forget_node_type();\n        }\n    }\n}\n\nimpl<'a, K, V> Handle<NodeRef<marker::Immut<'a>, K, V, marker::Leaf>, marker::Edge> {\n    /// Moves the leaf edge handle to the next leaf edge and returns references to the\n    /// key and value in between.\n    ///\n    /// # Safety\n    /// There must be another KV in the direction travelled.\n    pub unsafe fn next_unchecked(&mut self) -> (&'a K, &'a V) {\n        super::mem::replace(self, |leaf_edge| {\n            let kv = leaf_edge.next_kv();\n            let kv = unsafe { kv.ok().unwrap_unchecked() };\n            (kv.next_leaf_edge(), kv.into_kv())\n        })\n    }\n\n    /// Moves the leaf edge handle to the previous leaf edge and returns references to the\n    /// key and value in between.\n    ///\n    /// # Safety\n    /// There must be another KV in the direction travelled.\n    pub unsafe fn next_back_unchecked(&mut self) -> (&'a K, &'a V) {\n        super::mem::replace(self, |leaf_edge| {\n            let kv = leaf_edge.next_back_kv();\n            let kv = unsafe { kv.ok().unwrap_unchecked() };\n            (kv.next_back_leaf_edge(), kv.into_kv())\n        })\n    }\n}\n\nimpl<'a, K, V> Handle<NodeRef<marker::ValMut<'a>, K, V, marker::Leaf>, marker::Edge> {\n    /// Moves the leaf edge handle to the next leaf edge and returns references to the\n    /// key and value in between.\n    ///\n    /// # Safety\n    /// There must be another KV in the direction travelled.\n    pub unsafe fn next_unchecked(&mut self) -> (&'a K, &'a mut V) {\n        let kv = super::mem::replace(self, |leaf_edge| {\n            let kv = leaf_edge.next_kv();\n            let kv = unsafe { kv.ok().unwrap_unchecked() };\n            (unsafe { ptr::read(&kv) }.next_leaf_edge(), kv)\n        });\n        // Doing this last is faster, according to benchmarks.\n        kv.into_kv_valmut()\n    }\n\n    /// Moves the leaf edge handle to the previous leaf and returns references to the\n    /// key and value in between.\n    ///\n    /// # Safety\n    /// There must be another KV in the direction travelled.\n    pub unsafe fn next_back_unchecked(&mut self) -> (&'a K, &'a mut V) {\n        let kv = super::mem::replace(self, |leaf_edge| {\n            let kv = leaf_edge.next_back_kv();\n            let kv = unsafe { kv.ok().unwrap_unchecked() };\n            (unsafe { ptr::read(&kv) }.next_back_leaf_edge(), kv)\n        });\n        // Doing this last is faster, according to benchmarks.\n        kv.into_kv_valmut()\n    }\n}\n\nimpl<K, V> Handle<NodeRef<marker::Dying, K, V, marker::Leaf>, marker::Edge> {\n    /// Moves the leaf edge handle to the next leaf edge and returns the key and value\n    /// in between, deallocating any node left behind while leaving the corresponding\n    /// edge in its parent node dangling.\n    ///\n    /// # Safety\n    /// - There must be another KV in the direction travelled.\n    /// - That KV was not previously returned by counterpart `next_back_unchecked`\n    ///   on any copy of the handles being used to traverse the tree.\n    ///\n    /// The only safe way to proceed with the updated handle is to compare it, drop it,\n    /// call this method again subject to its safety conditions, or call counterpart\n    /// `next_back_unchecked` subject to its safety conditions.\n    pub unsafe fn deallocating_next_unchecked(&mut self) -> (K, V) {\n        super::mem::replace(self, |leaf_edge| unsafe {\n            leaf_edge.deallocating_next().unwrap_unchecked()\n        })\n    }\n\n    /// Moves the leaf edge handle to the previous leaf edge and returns the key and value\n    /// in between, deallocating any node left behind while leaving the corresponding\n    /// edge in its parent node dangling.\n    ///\n    /// # Safety\n    /// - There must be another KV in the direction travelled.\n    /// - That leaf edge was not previously returned by counterpart `next_unchecked`\n    ///   on any copy of the handles being used to traverse the tree.\n    ///\n    /// The only safe way to proceed with the updated handle is to compare it, drop it,\n    /// call this method again subject to its safety conditions, or call counterpart\n    /// `next_unchecked` subject to its safety conditions.\n    pub unsafe fn deallocating_next_back_unchecked(&mut self) -> (K, V) {\n        super::mem::replace(self, |leaf_edge| unsafe {\n            leaf_edge.deallocating_next_back().unwrap_unchecked()\n        })\n    }\n}\n\nimpl<BorrowType: marker::BorrowType, K, V> NodeRef<BorrowType, K, V, marker::LeafOrInternal> {\n    /// Returns the leftmost leaf edge in or underneath a node - in other words, the edge\n    /// you need first when navigating forward (or last when navigating backward).\n    #[inline]\n    pub fn first_leaf_edge(self) -> Handle<NodeRef<BorrowType, K, V, marker::Leaf>, marker::Edge> {\n        let mut node = self;\n        loop {\n            match node.force() {\n                Leaf(leaf) => return leaf.first_edge(),\n                Internal(internal) => node = internal.first_edge().descend(),\n            }\n        }\n    }\n\n    /// Returns the rightmost leaf edge in or underneath a node - in other words, the edge\n    /// you need last when navigating forward (or first when navigating backward).\n    #[inline]\n    pub fn last_leaf_edge(self) -> Handle<NodeRef<BorrowType, K, V, marker::Leaf>, marker::Edge> {\n        let mut node = self;\n        loop {\n            match node.force() {\n                Leaf(leaf) => return leaf.last_edge(),\n                Internal(internal) => node = internal.last_edge().descend(),\n            }\n        }\n    }\n}\n\npub enum Position<BorrowType, K, V> {\n    Leaf(NodeRef<BorrowType, K, V, marker::Leaf>),\n    Internal(NodeRef<BorrowType, K, V, marker::Internal>),\n    InternalKV(Handle<NodeRef<BorrowType, K, V, marker::Internal>, marker::KV>),\n}\n\nimpl<'a, K: 'a, V: 'a> NodeRef<marker::Immut<'a>, K, V, marker::LeafOrInternal> {\n    /// Visits leaf nodes and internal KVs in order of ascending keys, and also\n    /// visits internal nodes as a whole in a depth first order, meaning that\n    /// internal nodes precede their individual KVs and their child nodes.\n    pub fn visit_nodes_in_order<F>(self, mut visit: F)\n    where\n        F: FnMut(Position<marker::Immut<'a>, K, V>),\n    {\n        match self.force() {\n            Leaf(leaf) => visit(Position::Leaf(leaf)),\n            Internal(internal) => {\n                visit(Position::Internal(internal));\n                let mut edge = internal.first_edge();\n                loop {\n                    edge = match edge.descend().force() {\n                        Leaf(leaf) => {\n                            visit(Position::Leaf(leaf));\n                            match edge.next_kv() {\n                                Ok(kv) => {\n                                    visit(Position::InternalKV(kv));\n                                    kv.right_edge()\n                                }\n                                Err(_) => return,\n                            }\n                        }\n                        Internal(internal) => {\n                            visit(Position::Internal(internal));\n                            internal.first_edge()\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    /// Calculates the number of elements in a (sub)tree.\n    pub fn calc_length(self) -> usize {\n        let mut result = 0;\n        self.visit_nodes_in_order(|pos| match pos {\n            Position::Leaf(node) => result += node.len(),\n            Position::Internal(node) => result += node.len(),\n            Position::InternalKV(_) => (),\n        });\n        result\n    }\n}\n\nimpl<BorrowType: marker::BorrowType, K, V>\n    Handle<NodeRef<BorrowType, K, V, marker::LeafOrInternal>, marker::KV>\n{\n    /// Returns the leaf edge closest to a KV for forward navigation.\n    pub fn next_leaf_edge(self) -> Handle<NodeRef<BorrowType, K, V, marker::Leaf>, marker::Edge> {\n        match self.force() {\n            Leaf(leaf_kv) => leaf_kv.right_edge(),\n            Internal(internal_kv) => {\n                let next_internal_edge = internal_kv.right_edge();\n                next_internal_edge.descend().first_leaf_edge()\n            }\n        }\n    }\n\n    /// Returns the leaf edge closest to a KV for backward navigation.\n    pub fn next_back_leaf_edge(\n        self,\n    ) -> Handle<NodeRef<BorrowType, K, V, marker::Leaf>, marker::Edge> {\n        match self.force() {\n            Leaf(leaf_kv) => leaf_kv.left_edge(),\n            Internal(internal_kv) => {\n                let next_internal_edge = internal_kv.left_edge();\n                next_internal_edge.descend().last_leaf_edge()\n            }\n        }\n    }\n}\nmod append;\nmod borrow;\nmod fix;\npub mod map;\nmod mem;\nmod merge_iter;\nmod navigate;\nmod node;\nmod remove;\nmod search;\npub mod set;\nmod split;\n\n#[doc(hidden)]\ntrait Recover<Q: ?Sized> {\n    type Key;\n\n    fn get(&self, key: &Q) -> Option<&Self::Key>;\n    fn take(&mut self, key: &Q) -> Option<Self::Key>;\n    fn replace(&mut self, key: Self::Key) -> Option<Self::Key>;\n}\n\n#[cfg(test)]\nmod testing;\nuse super::super::testing::crash_test::{CrashTestDummy, Panic};\nuse super::super::testing::rng::DeterministicRng;\nuse super::*;\nuse crate::vec::Vec;\nuse std::cmp::Ordering;\nuse std::iter::FromIterator;\nuse std::panic::{catch_unwind, AssertUnwindSafe};\n\n#[test]\nfn test_clone_eq() {\n    let mut m = BTreeSet::new();\n\n    m.insert(1);\n    m.insert(2);\n\n    assert_eq!(m.clone(), m);\n}\n\n#[allow(dead_code)]\nfn test_const() {\n    const SET: &'static BTreeSet<()> = &BTreeSet::new();\n    const LEN: usize = SET.len();\n    const IS_EMPTY: bool = SET.is_empty();\n}\n\n#[test]\nfn test_iter_min_max() {\n    let mut a = BTreeSet::new();\n    assert_eq!(a.iter().min(), None);\n    assert_eq!(a.iter().max(), None);\n    assert_eq!(a.range(..).min(), None);\n    assert_eq!(a.range(..).max(), None);\n    assert_eq!(a.difference(&BTreeSet::new()).min(), None);\n    assert_eq!(a.difference(&BTreeSet::new()).max(), None);\n    assert_eq!(a.intersection(&a).min(), None);\n    assert_eq!(a.intersection(&a).max(), None);\n    assert_eq!(a.symmetric_difference(&BTreeSet::new()).min(), None);\n    assert_eq!(a.symmetric_difference(&BTreeSet::new()).max(), None);\n    assert_eq!(a.union(&a).min(), None);\n    assert_eq!(a.union(&a).max(), None);\n    a.insert(1);\n    a.insert(2);\n    assert_eq!(a.iter().min(), Some(&1));\n    assert_eq!(a.iter().max(), Some(&2));\n    assert_eq!(a.range(..).min(), Some(&1));\n    assert_eq!(a.range(..).max(), Some(&2));\n    assert_eq!(a.difference(&BTreeSet::new()).min(), Some(&1));\n    assert_eq!(a.difference(&BTreeSet::new()).max(), Some(&2));\n    assert_eq!(a.intersection(&a).min(), Some(&1));\n    assert_eq!(a.intersection(&a).max(), Some(&2));\n    assert_eq!(a.symmetric_difference(&BTreeSet::new()).min(), Some(&1));\n    assert_eq!(a.symmetric_difference(&BTreeSet::new()).max(), Some(&2));\n    assert_eq!(a.union(&a).min(), Some(&1));\n    assert_eq!(a.union(&a).max(), Some(&2));\n}\n\nfn check<F>(a: &[i32], b: &[i32], expected: &[i32], f: F)\nwhere\n    F: FnOnce(&BTreeSet<i32>, &BTreeSet<i32>, &mut dyn FnMut(&i32) -> bool) -> bool,\n{\n    let mut set_a = BTreeSet::new();\n    let mut set_b = BTreeSet::new();\n\n    for x in a {\n        assert!(set_a.insert(*x))\n    }\n    for y in b {\n        assert!(set_b.insert(*y))\n    }\n\n    let mut i = 0;\n    f(&set_a, &set_b, &mut |&x| {\n        if i < expected.len() {\n            assert_eq!(x, expected[i]);\n        }\n        i += 1;\n        true\n    });\n    assert_eq!(i, expected.len());\n}\n\n#[test]\nfn test_intersection() {\n    fn check_intersection(a: &[i32], b: &[i32], expected: &[i32]) {\n        check(a, b, expected, |x, y, f| x.intersection(y).all(f))\n    }\n\n    check_intersection(&[], &[], &[]);\n    check_intersection(&[1, 2, 3], &[], &[]);\n    check_intersection(&[], &[1, 2, 3], &[]);\n    check_intersection(&[2], &[1, 2, 3], &[2]);\n    check_intersection(&[1, 2, 3], &[2], &[2]);\n    check_intersection(&[11, 1, 3, 77, 103, 5, -5], &[2, 11, 77, -9, -42, 5, 3], &[3, 5, 11, 77]);\n\n    if cfg!(miri) {\n        // Miri is too slow\n        return;\n    }\n\n    let large = (0..100).collect::<Vec<_>>();\n    check_intersection(&[], &large, &[]);\n    check_intersection(&large, &[], &[]);\n    check_intersection(&[-1], &large, &[]);\n    check_intersection(&large, &[-1], &[]);\n    check_intersection(&[0], &large, &[0]);\n    check_intersection(&large, &[0], &[0]);\n    check_intersection(&[99], &large, &[99]);\n    check_intersection(&large, &[99], &[99]);\n    check_intersection(&[100], &large, &[]);\n    check_intersection(&large, &[100], &[]);\n    check_intersection(&[11, 5000, 1, 3, 77, 8924], &large, &[1, 3, 11, 77]);\n}\n\n#[test]\nfn test_intersection_size_hint() {\n    let x: BTreeSet<i32> = [3, 4].iter().copied().collect();\n    let y: BTreeSet<i32> = [1, 2, 3].iter().copied().collect();\n    let mut iter = x.intersection(&y);\n    assert_eq!(iter.size_hint(), (1, Some(1)));\n    assert_eq!(iter.next(), Some(&3));\n    assert_eq!(iter.size_hint(), (0, Some(0)));\n    assert_eq!(iter.next(), None);\n\n    iter = y.intersection(&y);\n    assert_eq!(iter.size_hint(), (0, Some(3)));\n    assert_eq!(iter.next(), Some(&1));\n    assert_eq!(iter.size_hint(), (0, Some(2)));\n}\n\n#[test]\nfn test_difference() {\n    fn check_difference(a: &[i32], b: &[i32], expected: &[i32]) {\n        check(a, b, expected, |x, y, f| x.difference(y).all(f))\n    }\n\n    check_difference(&[], &[], &[]);\n    check_difference(&[1, 12], &[], &[1, 12]);\n    check_difference(&[], &[1, 2, 3, 9], &[]);\n    check_difference(&[1, 3, 5, 9, 11], &[3, 9], &[1, 5, 11]);\n    check_difference(&[1, 3, 5, 9, 11], &[3, 6, 9], &[1, 5, 11]);\n    check_difference(&[1, 3, 5, 9, 11], &[0, 1], &[3, 5, 9, 11]);\n    check_difference(&[1, 3, 5, 9, 11], &[11, 12], &[1, 3, 5, 9]);\n    check_difference(\n        &[-5, 11, 22, 33, 40, 42],\n        &[-12, -5, 14, 23, 34, 38, 39, 50],\n        &[11, 22, 33, 40, 42],\n    );\n\n    if cfg!(miri) {\n        // Miri is too slow\n        return;\n    }\n\n    let large = (0..100).collect::<Vec<_>>();\n    check_difference(&[], &large, &[]);\n    check_difference(&[-1], &large, &[-1]);\n    check_difference(&[0], &large, &[]);\n    check_difference(&[99], &large, &[]);\n    check_difference(&[100], &large, &[100]);\n    check_difference(&[11, 5000, 1, 3, 77, 8924], &large, &[5000, 8924]);\n    check_difference(&large, &[], &large);\n    check_difference(&large, &[-1], &large);\n    check_difference(&large, &[100], &large);\n}\n\n#[test]\nfn test_difference_size_hint() {\n    let s246: BTreeSet<i32> = [2, 4, 6].iter().copied().collect();\n    let s23456: BTreeSet<i32> = (2..=6).collect();\n    let mut iter = s246.difference(&s23456);\n    assert_eq!(iter.size_hint(), (0, Some(3)));\n    assert_eq!(iter.next(), None);\n\n    let s12345: BTreeSet<i32> = (1..=5).collect();\n    iter = s246.difference(&s12345);\n    assert_eq!(iter.size_hint(), (0, Some(3)));\n    assert_eq!(iter.next(), Some(&6));\n    assert_eq!(iter.size_hint(), (0, Some(0)));\n    assert_eq!(iter.next(), None);\n\n    let s34567: BTreeSet<i32> = (3..=7).collect();\n    iter = s246.difference(&s34567);\n    assert_eq!(iter.size_hint(), (0, Some(3)));\n    assert_eq!(iter.next(), Some(&2));\n    assert_eq!(iter.size_hint(), (0, Some(2)));\n    assert_eq!(iter.next(), None);\n\n    let s1: BTreeSet<i32> = (-9..=1).collect();\n    iter = s246.difference(&s1);\n    assert_eq!(iter.size_hint(), (3, Some(3)));\n\n    let s2: BTreeSet<i32> = (-9..=2).collect();\n    iter = s246.difference(&s2);\n    assert_eq!(iter.size_hint(), (2, Some(2)));\n    assert_eq!(iter.next(), Some(&4));\n    assert_eq!(iter.size_hint(), (1, Some(1)));\n\n    let s23: BTreeSet<i32> = (2..=3).collect();\n    iter = s246.difference(&s23);\n    assert_eq!(iter.size_hint(), (1, Some(3)));\n    assert_eq!(iter.next(), Some(&4));\n    assert_eq!(iter.size_hint(), (1, Some(1)));\n\n    let s4: BTreeSet<i32> = (4..=4).collect();\n    iter = s246.difference(&s4);\n    assert_eq!(iter.size_hint(), (2, Some(3)));\n    assert_eq!(iter.next(), Some(&2));\n    assert_eq!(iter.size_hint(), (1, Some(2)));\n    assert_eq!(iter.next(), Some(&6));\n    assert_eq!(iter.size_hint(), (0, Some(0)));\n    assert_eq!(iter.next(), None);\n\n    let s56: BTreeSet<i32> = (5..=6).collect();\n    iter = s246.difference(&s56);\n    assert_eq!(iter.size_hint(), (1, Some(3)));\n    assert_eq!(iter.next(), Some(&2));\n    assert_eq!(iter.size_hint(), (0, Some(2)));\n\n    let s6: BTreeSet<i32> = (6..=19).collect();\n    iter = s246.difference(&s6);\n    assert_eq!(iter.size_hint(), (2, Some(2)));\n    assert_eq!(iter.next(), Some(&2));\n    assert_eq!(iter.size_hint(), (1, Some(1)));\n\n    let s7: BTreeSet<i32> = (7..=19).collect();\n    iter = s246.difference(&s7);\n    assert_eq!(iter.size_hint(), (3, Some(3)));\n}\n\n#[test]\nfn test_symmetric_difference() {\n    fn check_symmetric_difference(a: &[i32], b: &[i32], expected: &[i32]) {\n        check(a, b, expected, |x, y, f| x.symmetric_difference(y).all(f))\n    }\n\n    check_symmetric_difference(&[], &[], &[]);\n    check_symmetric_difference(&[1, 2, 3], &[2], &[1, 3]);\n    check_symmetric_difference(&[2], &[1, 2, 3], &[1, 3]);\n    check_symmetric_difference(&[1, 3, 5, 9, 11], &[-2, 3, 9, 14, 22], &[-2, 1, 5, 11, 14, 22]);\n}\n\n#[test]\nfn test_symmetric_difference_size_hint() {\n    let x: BTreeSet<i32> = [2, 4].iter().copied().collect();\n    let y: BTreeSet<i32> = [1, 2, 3].iter().copied().collect();\n    let mut iter = x.symmetric_difference(&y);\n    assert_eq!(iter.size_hint(), (0, Some(5)));\n    assert_eq!(iter.next(), Some(&1));\n    assert_eq!(iter.size_hint(), (0, Some(4)));\n    assert_eq!(iter.next(), Some(&3));\n    assert_eq!(iter.size_hint(), (0, Some(1)));\n}\n\n#[test]\nfn test_union() {\n    fn check_union(a: &[i32], b: &[i32], expected: &[i32]) {\n        check(a, b, expected, |x, y, f| x.union(y).all(f))\n    }\n\n    check_union(&[], &[], &[]);\n    check_union(&[1, 2, 3], &[2], &[1, 2, 3]);\n    check_union(&[2], &[1, 2, 3], &[1, 2, 3]);\n    check_union(\n        &[1, 3, 5, 9, 11, 16, 19, 24],\n        &[-2, 1, 5, 9, 13, 19],\n        &[-2, 1, 3, 5, 9, 11, 13, 16, 19, 24],\n    );\n}\n\n#[test]\nfn test_union_size_hint() {\n    let x: BTreeSet<i32> = [2, 4].iter().copied().collect();\n    let y: BTreeSet<i32> = [1, 2, 3].iter().copied().collect();\n    let mut iter = x.union(&y);\n    assert_eq!(iter.size_hint(), (3, Some(5)));\n    assert_eq!(iter.next(), Some(&1));\n    assert_eq!(iter.size_hint(), (2, Some(4)));\n    assert_eq!(iter.next(), Some(&2));\n    assert_eq!(iter.size_hint(), (1, Some(2)));\n}\n\n#[test]\n// Only tests the simple function definition with respect to intersection\nfn test_is_disjoint() {\n    let one = [1].iter().collect::<BTreeSet<_>>();\n    let two = [2].iter().collect::<BTreeSet<_>>();\n    assert!(one.is_disjoint(&two));\n}\n\n#[test]\n// Also implicitly tests the trivial function definition of is_superset\nfn test_is_subset() {\n    fn is_subset(a: &[i32], b: &[i32]) -> bool {\n        let set_a = a.iter().collect::<BTreeSet<_>>();\n        let set_b = b.iter().collect::<BTreeSet<_>>();\n        set_a.is_subset(&set_b)\n    }\n\n    assert_eq!(is_subset(&[], &[]), true);\n    assert_eq!(is_subset(&[], &[1, 2]), true);\n    assert_eq!(is_subset(&[0], &[1, 2]), false);\n    assert_eq!(is_subset(&[1], &[1, 2]), true);\n    assert_eq!(is_subset(&[2], &[1, 2]), true);\n    assert_eq!(is_subset(&[3], &[1, 2]), false);\n    assert_eq!(is_subset(&[1, 2], &[1]), false);\n    assert_eq!(is_subset(&[1, 2], &[1, 2]), true);\n    assert_eq!(is_subset(&[1, 2], &[2, 3]), false);\n    assert_eq!(\n        is_subset(&[-5, 11, 22, 33, 40, 42], &[-12, -5, 11, 14, 22, 23, 33, 34, 38, 39, 40, 42]),\n        true\n    );\n    assert_eq!(is_subset(&[-5, 11, 22, 33, 40, 42], &[-12, -5, 11, 14, 22, 23, 34, 38]), false);\n\n    if cfg!(miri) {\n        // Miri is too slow\n        return;\n    }\n\n    let large = (0..100).collect::<Vec<_>>();\n    assert_eq!(is_subset(&[], &large), true);\n    assert_eq!(is_subset(&large, &[]), false);\n    assert_eq!(is_subset(&[-1], &large), false);\n    assert_eq!(is_subset(&[0], &large), true);\n    assert_eq!(is_subset(&[1, 2], &large), true);\n    assert_eq!(is_subset(&[99, 100], &large), false);\n}\n\n#[test]\nfn test_retain() {\n    let xs = [1, 2, 3, 4, 5, 6];\n    let mut set: BTreeSet<i32> = xs.iter().cloned().collect();\n    set.retain(|&k| k % 2 == 0);\n    assert_eq!(set.len(), 3);\n    assert!(set.contains(&2));\n    assert!(set.contains(&4));\n    assert!(set.contains(&6));\n}\n\n#[test]\nfn test_drain_filter() {\n    let mut x: BTreeSet<_> = [1].iter().copied().collect();\n    let mut y: BTreeSet<_> = [1].iter().copied().collect();\n\n    x.drain_filter(|_| true);\n    y.drain_filter(|_| false);\n    assert_eq!(x.len(), 0);\n    assert_eq!(y.len(), 1);\n}\n\n#[test]\nfn test_drain_filter_drop_panic_leak() {\n    let a = CrashTestDummy::new(0);\n    let b = CrashTestDummy::new(1);\n    let c = CrashTestDummy::new(2);\n    let mut set = BTreeSet::new();\n    set.insert(a.spawn(Panic::Never));\n    set.insert(b.spawn(Panic::InDrop));\n    set.insert(c.spawn(Panic::Never));\n\n    catch_unwind(move || drop(set.drain_filter(|dummy| dummy.query(true)))).ok();\n\n    assert_eq!(a.queried(), 1);\n    assert_eq!(b.queried(), 1);\n    assert_eq!(c.queried(), 0);\n    assert_eq!(a.dropped(), 1);\n    assert_eq!(b.dropped(), 1);\n    assert_eq!(c.dropped(), 1);\n}\n\n#[test]\nfn test_drain_filter_pred_panic_leak() {\n    let a = CrashTestDummy::new(0);\n    let b = CrashTestDummy::new(1);\n    let c = CrashTestDummy::new(2);\n    let mut set = BTreeSet::new();\n    set.insert(a.spawn(Panic::Never));\n    set.insert(b.spawn(Panic::InQuery));\n    set.insert(c.spawn(Panic::InQuery));\n\n    catch_unwind(AssertUnwindSafe(|| drop(set.drain_filter(|dummy| dummy.query(true))))).ok();\n\n    assert_eq!(a.queried(), 1);\n    assert_eq!(b.queried(), 1);\n    assert_eq!(c.queried(), 0);\n    assert_eq!(a.dropped(), 1);\n    assert_eq!(b.dropped(), 0);\n    assert_eq!(c.dropped(), 0);\n    assert_eq!(set.len(), 2);\n    assert_eq!(set.first().unwrap().id(), 1);\n    assert_eq!(set.last().unwrap().id(), 2);\n}\n\n#[test]\nfn test_clear() {\n    let mut x = BTreeSet::new();\n    x.insert(1);\n\n    x.clear();\n    assert!(x.is_empty());\n}\n\n#[test]\nfn test_zip() {\n    let mut x = BTreeSet::new();\n    x.insert(5);\n    x.insert(12);\n    x.insert(11);\n\n    let mut y = BTreeSet::new();\n    y.insert(\"foo\");\n    y.insert(\"bar\");\n\n    let x = x;\n    let y = y;\n    let mut z = x.iter().zip(&y);\n\n    assert_eq!(z.next().unwrap(), (&5, &(\"bar\")));\n    assert_eq!(z.next().unwrap(), (&11, &(\"foo\")));\n    assert!(z.next().is_none());\n}\n\n#[test]\nfn test_from_iter() {\n    let xs = [1, 2, 3, 4, 5, 6, 7, 8, 9];\n\n    let set: BTreeSet<_> = xs.iter().cloned().collect();\n\n    for x in &xs {\n        assert!(set.contains(x));\n    }\n}\n\n#[test]\nfn test_show() {\n    let mut set = BTreeSet::new();\n    let empty = BTreeSet::<i32>::new();\n\n    set.insert(1);\n    set.insert(2);\n\n    let set_str = format!(\"{:?}\", set);\n\n    assert_eq!(set_str, \"{1, 2}\");\n    assert_eq!(format!(\"{:?}\", empty), \"{}\");\n}\n\n#[test]\nfn test_extend_ref() {\n    let mut a = BTreeSet::new();\n    a.insert(1);\n\n    a.extend(&[2, 3, 4]);\n\n    assert_eq!(a.len(), 4);\n    assert!(a.contains(&1));\n    assert!(a.contains(&2));\n    assert!(a.contains(&3));\n    assert!(a.contains(&4));\n\n    let mut b = BTreeSet::new();\n    b.insert(5);\n    b.insert(6);\n\n    a.extend(&b);\n\n    assert_eq!(a.len(), 6);\n    assert!(a.contains(&1));\n    assert!(a.contains(&2));\n    assert!(a.contains(&3));\n    assert!(a.contains(&4));\n    assert!(a.contains(&5));\n    assert!(a.contains(&6));\n}\n\n#[test]\nfn test_recovery() {\n    #[derive(Debug)]\n    struct Foo(&'static str, i32);\n\n    impl PartialEq for Foo {\n        fn eq(&self, other: &Self) -> bool {\n            self.0 == other.0\n        }\n    }\n\n    impl Eq for Foo {}\n\n    impl PartialOrd for Foo {\n        fn partial_cmp(&self, other: &Self) -> Option<Ordering> {\n            self.0.partial_cmp(&other.0)\n        }\n    }\n\n    impl Ord for Foo {\n        fn cmp(&self, other: &Self) -> Ordering {\n            self.0.cmp(&other.0)\n        }\n    }\n\n    let mut s = BTreeSet::new();\n    assert_eq!(s.replace(Foo(\"a\", 1)), None);\n    assert_eq!(s.len(), 1);\n    assert_eq!(s.replace(Foo(\"a\", 2)), Some(Foo(\"a\", 1)));\n    assert_eq!(s.len(), 1);\n\n    {\n        let mut it = s.iter();\n        assert_eq!(it.next(), Some(&Foo(\"a\", 2)));\n        assert_eq!(it.next(), None);\n    }\n\n    assert_eq!(s.get(&Foo(\"a\", 1)), Some(&Foo(\"a\", 2)));\n    assert_eq!(s.take(&Foo(\"a\", 1)), Some(Foo(\"a\", 2)));\n    assert_eq!(s.len(), 0);\n\n    assert_eq!(s.get(&Foo(\"a\", 1)), None);\n    assert_eq!(s.take(&Foo(\"a\", 1)), None);\n\n    assert_eq!(s.iter().next(), None);\n}\n\n#[allow(dead_code)]\nfn test_variance() {\n    fn set<'new>(v: BTreeSet<&'static str>) -> BTreeSet<&'new str> {\n        v\n    }\n    fn iter<'a, 'new>(v: Iter<'a, &'static str>) -> Iter<'a, &'new str> {\n        v\n    }\n    fn into_iter<'new>(v: IntoIter<&'static str>) -> IntoIter<&'new str> {\n        v\n    }\n    fn range<'a, 'new>(v: Range<'a, &'static str>) -> Range<'a, &'new str> {\n        v\n    }\n    // not applied to Difference, Intersection, SymmetricDifference, Union\n}\n\n#[allow(dead_code)]\nfn test_sync() {\n    fn set<T: Sync>(v: &BTreeSet<T>) -> impl Sync + '_ {\n        v\n    }\n\n    fn iter<T: Sync>(v: &BTreeSet<T>) -> impl Sync + '_ {\n        v.iter()\n    }\n\n    fn into_iter<T: Sync>(v: BTreeSet<T>) -> impl Sync {\n        v.into_iter()\n    }\n\n    fn range<T: Sync + Ord>(v: &BTreeSet<T>) -> impl Sync + '_ {\n        v.range(..)\n    }\n\n    fn drain_filter<T: Sync + Ord>(v: &mut BTreeSet<T>) -> impl Sync + '_ {\n        v.drain_filter(|_| false)\n    }\n\n    fn difference<T: Sync + Ord>(v: &BTreeSet<T>) -> impl Sync + '_ {\n        v.difference(&v)\n    }\n\n    fn intersection<T: Sync + Ord>(v: &BTreeSet<T>) -> impl Sync + '_ {\n        v.intersection(&v)\n    }\n\n    fn symmetric_difference<T: Sync + Ord>(v: &BTreeSet<T>) -> impl Sync + '_ {\n        v.symmetric_difference(&v)\n    }\n\n    fn union<T: Sync + Ord>(v: &BTreeSet<T>) -> impl Sync + '_ {\n        v.union(&v)\n    }\n}\n\n#[allow(dead_code)]\nfn test_send() {\n    fn set<T: Send>(v: BTreeSet<T>) -> impl Send {\n        v\n    }\n\n    fn iter<T: Send + Sync>(v: &BTreeSet<T>) -> impl Send + '_ {\n        v.iter()\n    }\n\n    fn into_iter<T: Send>(v: BTreeSet<T>) -> impl Send {\n        v.into_iter()\n    }\n\n    fn range<T: Send + Sync + Ord>(v: &BTreeSet<T>) -> impl Send + '_ {\n        v.range(..)\n    }\n\n    fn drain_filter<T: Send + Ord>(v: &mut BTreeSet<T>) -> impl Send + '_ {\n        v.drain_filter(|_| false)\n    }\n\n    fn difference<T: Send + Sync + Ord>(v: &BTreeSet<T>) -> impl Send + '_ {\n        v.difference(&v)\n    }\n\n    fn intersection<T: Send + Sync + Ord>(v: &BTreeSet<T>) -> impl Send + '_ {\n        v.intersection(&v)\n    }\n\n    fn symmetric_difference<T: Send + Sync + Ord>(v: &BTreeSet<T>) -> impl Send + '_ {\n        v.symmetric_difference(&v)\n    }\n\n    fn union<T: Send + Sync + Ord>(v: &BTreeSet<T>) -> impl Send + '_ {\n        v.union(&v)\n    }\n}\n\n#[allow(dead_code)]\nfn test_ord_absence() {\n    fn set<K>(mut set: BTreeSet<K>) {\n        set.is_empty();\n        set.len();\n        set.clear();\n        set.iter();\n        set.into_iter();\n    }\n\n    fn set_debug<K: Debug>(set: BTreeSet<K>) {\n        format!(\"{:?}\", set);\n        format!(\"{:?}\", set.iter());\n        format!(\"{:?}\", set.into_iter());\n    }\n\n    fn set_clone<K: Clone>(mut set: BTreeSet<K>) {\n        set.clone_from(&set.clone());\n    }\n}\n\n#[test]\nfn test_append() {\n    let mut a = BTreeSet::new();\n    a.insert(1);\n    a.insert(2);\n    a.insert(3);\n\n    let mut b = BTreeSet::new();\n    b.insert(3);\n    b.insert(4);\n    b.insert(5);\n\n    a.append(&mut b);\n\n    assert_eq!(a.len(), 5);\n    assert_eq!(b.len(), 0);\n\n    assert_eq!(a.contains(&1), true);\n    assert_eq!(a.contains(&2), true);\n    assert_eq!(a.contains(&3), true);\n    assert_eq!(a.contains(&4), true);\n    assert_eq!(a.contains(&5), true);\n}\n\n#[test]\nfn test_first_last() {\n    let mut a = BTreeSet::new();\n    assert_eq!(a.first(), None);\n    assert_eq!(a.last(), None);\n    a.insert(1);\n    assert_eq!(a.first(), Some(&1));\n    assert_eq!(a.last(), Some(&1));\n    a.insert(2);\n    assert_eq!(a.first(), Some(&1));\n    assert_eq!(a.last(), Some(&2));\n    for i in 3..=12 {\n        a.insert(i);\n    }\n    assert_eq!(a.first(), Some(&1));\n    assert_eq!(a.last(), Some(&12));\n    assert_eq!(a.pop_first(), Some(1));\n    assert_eq!(a.pop_last(), Some(12));\n    assert_eq!(a.pop_first(), Some(2));\n    assert_eq!(a.pop_last(), Some(11));\n    assert_eq!(a.pop_first(), Some(3));\n    assert_eq!(a.pop_last(), Some(10));\n    assert_eq!(a.pop_first(), Some(4));\n    assert_eq!(a.pop_first(), Some(5));\n    assert_eq!(a.pop_first(), Some(6));\n    assert_eq!(a.pop_first(), Some(7));\n    assert_eq!(a.pop_first(), Some(8));\n    assert_eq!(a.clone().pop_last(), Some(9));\n    assert_eq!(a.pop_first(), Some(9));\n    assert_eq!(a.pop_first(), None);\n    assert_eq!(a.pop_last(), None);\n}\n\n// Unlike the function with the same name in map/tests, returns no values.\n// Which also means it returns different predetermined pseudo-random keys,\n// and the test cases using this function explore slightly different trees.\nfn rand_data(len: usize) -> Vec<u32> {\n    let mut rng = DeterministicRng::new();\n    Vec::from_iter((0..len).map(|_| rng.next()))\n}\n\n#[test]\nfn test_split_off_empty_right() {\n    let mut data = rand_data(173);\n\n    let mut set = BTreeSet::from_iter(data.clone());\n    let right = set.split_off(&(data.iter().max().unwrap() + 1));\n\n    data.sort();\n    assert!(set.into_iter().eq(data));\n    assert!(right.into_iter().eq(None));\n}\n\n#[test]\nfn test_split_off_empty_left() {\n    let mut data = rand_data(314);\n\n    let mut set = BTreeSet::from_iter(data.clone());\n    let right = set.split_off(data.iter().min().unwrap());\n\n    data.sort();\n    assert!(set.into_iter().eq(None));\n    assert!(right.into_iter().eq(data));\n}\n\n#[test]\nfn test_split_off_large_random_sorted() {\n    // Miri is too slow\n    let mut data = if cfg!(miri) { rand_data(529) } else { rand_data(1529) };\n    // special case with maximum height.\n    data.sort();\n\n    let mut set = BTreeSet::from_iter(data.clone());\n    let key = data[data.len() / 2];\n    let right = set.split_off(&key);\n\n    assert!(set.into_iter().eq(data.clone().into_iter().filter(|x| *x < key)));\n    assert!(right.into_iter().eq(data.into_iter().filter(|x| *x >= key)));\n}\nuse super::DormantMutRef;\n\n#[test]\nfn test_borrow() {\n    let mut data = 1;\n    let mut stack = vec![];\n    let mut rr = &mut data;\n    for factor in [2, 3, 7].iter() {\n        let (r, dormant_r) = DormantMutRef::new(rr);\n        rr = r;\n        assert_eq!(*rr, 1);\n        stack.push((factor, dormant_r));\n    }\n    while let Some((factor, dormant_r)) = stack.pop() {\n        let r = unsafe { dormant_r.awaken() };\n        *r *= factor;\n    }\n    assert_eq!(data, 42);\n}\nuse core::fmt::{self, Debug};\nuse core::marker::PhantomData;\nuse core::mem;\n\nuse super::super::borrow::DormantMutRef;\nuse super::super::node::{marker, Handle, InsertResult::*, NodeRef};\nuse super::BTreeMap;\n\nuse Entry::*;\n\n/// A view into a single entry in a map, which may either be vacant or occupied.\n///\n/// This `enum` is constructed from the [`entry`] method on [`BTreeMap`].\n///\n/// [`entry`]: BTreeMap::entry\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub enum Entry<'a, K: 'a, V: 'a> {\n    /// A vacant entry.\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    Vacant(#[stable(feature = \"rust1\", since = \"1.0.0\")] VacantEntry<'a, K, V>),\n\n    /// An occupied entry.\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    Occupied(#[stable(feature = \"rust1\", since = \"1.0.0\")] OccupiedEntry<'a, K, V>),\n}\n\n#[stable(feature = \"debug_btree_map\", since = \"1.12.0\")]\nimpl<K: Debug + Ord, V: Debug> Debug for Entry<'_, K, V> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        match *self {\n            Vacant(ref v) => f.debug_tuple(\"Entry\").field(v).finish(),\n            Occupied(ref o) => f.debug_tuple(\"Entry\").field(o).finish(),\n        }\n    }\n}\n\n/// A view into a vacant entry in a `BTreeMap`.\n/// It is part of the [`Entry`] enum.\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct VacantEntry<'a, K: 'a, V: 'a> {\n    pub(super) key: K,\n    pub(super) handle: Handle<NodeRef<marker::Mut<'a>, K, V, marker::Leaf>, marker::Edge>,\n    pub(super) dormant_map: DormantMutRef<'a, BTreeMap<K, V>>,\n\n    // Be invariant in `K` and `V`\n    pub(super) _marker: PhantomData<&'a mut (K, V)>,\n}\n\n#[stable(feature = \"debug_btree_map\", since = \"1.12.0\")]\nimpl<K: Debug + Ord, V> Debug for VacantEntry<'_, K, V> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"VacantEntry\").field(self.key()).finish()\n    }\n}\n\n/// A view into an occupied entry in a `BTreeMap`.\n/// It is part of the [`Entry`] enum.\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct OccupiedEntry<'a, K: 'a, V: 'a> {\n    pub(super) handle: Handle<NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal>, marker::KV>,\n    pub(super) dormant_map: DormantMutRef<'a, BTreeMap<K, V>>,\n\n    // Be invariant in `K` and `V`\n    pub(super) _marker: PhantomData<&'a mut (K, V)>,\n}\n\n#[stable(feature = \"debug_btree_map\", since = \"1.12.0\")]\nimpl<K: Debug + Ord, V: Debug> Debug for OccupiedEntry<'_, K, V> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_struct(\"OccupiedEntry\").field(\"key\", self.key()).field(\"value\", self.get()).finish()\n    }\n}\n\n/// The error returned by [`try_insert`](BTreeMap::try_insert) when the key already exists.\n///\n/// Contains the occupied entry, and the value that was not inserted.\n#[unstable(feature = \"map_try_insert\", issue = \"82766\")]\npub struct OccupiedError<'a, K: 'a, V: 'a> {\n    /// The entry in the map that was already occupied.\n    pub entry: OccupiedEntry<'a, K, V>,\n    /// The value which was not inserted, because the entry was already occupied.\n    pub value: V,\n}\n\n#[unstable(feature = \"map_try_insert\", issue = \"82766\")]\nimpl<K: Debug + Ord, V: Debug> Debug for OccupiedError<'_, K, V> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_struct(\"OccupiedError\")\n            .field(\"key\", self.entry.key())\n            .field(\"old_value\", self.entry.get())\n            .field(\"new_value\", &self.value)\n            .finish()\n    }\n}\n\n#[unstable(feature = \"map_try_insert\", issue = \"82766\")]\nimpl<'a, K: Debug + Ord, V: Debug> fmt::Display for OccupiedError<'a, K, V> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        write!(\n            f,\n            \"failed to insert {:?}, key {:?} already exists with value {:?}\",\n            self.value,\n            self.entry.key(),\n            self.entry.get(),\n        )\n    }\n}\n\nimpl<'a, K: Ord, V> Entry<'a, K, V> {\n    /// Ensures a value is in the entry by inserting the default if empty, and returns\n    /// a mutable reference to the value in the entry.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map: BTreeMap<&str, usize> = BTreeMap::new();\n    /// map.entry(\"poneyland\").or_insert(12);\n    ///\n    /// assert_eq!(map[\"poneyland\"], 12);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn or_insert(self, default: V) -> &'a mut V {\n        match self {\n            Occupied(entry) => entry.into_mut(),\n            Vacant(entry) => entry.insert(default),\n        }\n    }\n\n    /// Ensures a value is in the entry by inserting the result of the default function if empty,\n    /// and returns a mutable reference to the value in the entry.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map: BTreeMap<&str, String> = BTreeMap::new();\n    /// let s = \"hoho\".to_string();\n    ///\n    /// map.entry(\"poneyland\").or_insert_with(|| s);\n    ///\n    /// assert_eq!(map[\"poneyland\"], \"hoho\".to_string());\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn or_insert_with<F: FnOnce() -> V>(self, default: F) -> &'a mut V {\n        match self {\n            Occupied(entry) => entry.into_mut(),\n            Vacant(entry) => entry.insert(default()),\n        }\n    }\n\n    /// Ensures a value is in the entry by inserting, if empty, the result of the default function.\n    /// This method allows for generating key-derived values for insertion by providing the default\n    /// function a reference to the key that was moved during the `.entry(key)` method call.\n    ///\n    /// The reference to the moved key is provided so that cloning or copying the key is\n    /// unnecessary, unlike with `.or_insert_with(|| ... )`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map: BTreeMap<&str, usize> = BTreeMap::new();\n    ///\n    /// map.entry(\"poneyland\").or_insert_with_key(|key| key.chars().count());\n    ///\n    /// assert_eq!(map[\"poneyland\"], 9);\n    /// ```\n    #[inline]\n    #[stable(feature = \"or_insert_with_key\", since = \"1.50.0\")]\n    pub fn or_insert_with_key<F: FnOnce(&K) -> V>(self, default: F) -> &'a mut V {\n        match self {\n            Occupied(entry) => entry.into_mut(),\n            Vacant(entry) => {\n                let value = default(entry.key());\n                entry.insert(value)\n            }\n        }\n    }\n\n    /// Returns a reference to this entry's key.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map: BTreeMap<&str, usize> = BTreeMap::new();\n    /// assert_eq!(map.entry(\"poneyland\").key(), &\"poneyland\");\n    /// ```\n    #[stable(feature = \"map_entry_keys\", since = \"1.10.0\")]\n    pub fn key(&self) -> &K {\n        match *self {\n            Occupied(ref entry) => entry.key(),\n            Vacant(ref entry) => entry.key(),\n        }\n    }\n\n    /// Provides in-place mutable access to an occupied entry before any\n    /// potential inserts into the map.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map: BTreeMap<&str, usize> = BTreeMap::new();\n    ///\n    /// map.entry(\"poneyland\")\n    ///    .and_modify(|e| { *e += 1 })\n    ///    .or_insert(42);\n    /// assert_eq!(map[\"poneyland\"], 42);\n    ///\n    /// map.entry(\"poneyland\")\n    ///    .and_modify(|e| { *e += 1 })\n    ///    .or_insert(42);\n    /// assert_eq!(map[\"poneyland\"], 43);\n    /// ```\n    #[stable(feature = \"entry_and_modify\", since = \"1.26.0\")]\n    pub fn and_modify<F>(self, f: F) -> Self\n    where\n        F: FnOnce(&mut V),\n    {\n        match self {\n            Occupied(mut entry) => {\n                f(entry.get_mut());\n                Occupied(entry)\n            }\n            Vacant(entry) => Vacant(entry),\n        }\n    }\n}\n\nimpl<'a, K: Ord, V: Default> Entry<'a, K, V> {\n    #[stable(feature = \"entry_or_default\", since = \"1.28.0\")]\n    /// Ensures a value is in the entry by inserting the default value if empty,\n    /// and returns a mutable reference to the value in the entry.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map: BTreeMap<&str, Option<usize>> = BTreeMap::new();\n    /// map.entry(\"poneyland\").or_default();\n    ///\n    /// assert_eq!(map[\"poneyland\"], None);\n    /// ```\n    pub fn or_default(self) -> &'a mut V {\n        match self {\n            Occupied(entry) => entry.into_mut(),\n            Vacant(entry) => entry.insert(Default::default()),\n        }\n    }\n}\n\nimpl<'a, K: Ord, V> VacantEntry<'a, K, V> {\n    /// Gets a reference to the key that would be used when inserting a value\n    /// through the VacantEntry.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map: BTreeMap<&str, usize> = BTreeMap::new();\n    /// assert_eq!(map.entry(\"poneyland\").key(), &\"poneyland\");\n    /// ```\n    #[stable(feature = \"map_entry_keys\", since = \"1.10.0\")]\n    pub fn key(&self) -> &K {\n        &self.key\n    }\n\n    /// Take ownership of the key.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    /// use std::collections::btree_map::Entry;\n    ///\n    /// let mut map: BTreeMap<&str, usize> = BTreeMap::new();\n    ///\n    /// if let Entry::Vacant(v) = map.entry(\"poneyland\") {\n    ///     v.into_key();\n    /// }\n    /// ```\n    #[stable(feature = \"map_entry_recover_keys2\", since = \"1.12.0\")]\n    pub fn into_key(self) -> K {\n        self.key\n    }\n\n    /// Sets the value of the entry with the `VacantEntry`'s key,\n    /// and returns a mutable reference to it.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    /// use std::collections::btree_map::Entry;\n    ///\n    /// let mut map: BTreeMap<&str, u32> = BTreeMap::new();\n    ///\n    /// if let Entry::Vacant(o) = map.entry(\"poneyland\") {\n    ///     o.insert(37);\n    /// }\n    /// assert_eq!(map[\"poneyland\"], 37);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn insert(self, value: V) -> &'a mut V {\n        let out_ptr = match self.handle.insert_recursing(self.key, value) {\n            (Fit(_), val_ptr) => {\n                // SAFETY: We have consumed self.handle and the handle returned.\n                let map = unsafe { self.dormant_map.awaken() };\n                map.length += 1;\n                val_ptr\n            }\n            (Split(ins), val_ptr) => {\n                drop(ins.left);\n                // SAFETY: We have consumed self.handle and the reference returned.\n                let map = unsafe { self.dormant_map.awaken() };\n                let root = map.root.as_mut().unwrap();\n                root.push_internal_level().push(ins.kv.0, ins.kv.1, ins.right);\n                map.length += 1;\n                val_ptr\n            }\n        };\n        // Now that we have finished growing the tree using borrowed references,\n        // dereference the pointer to a part of it, that we picked up along the way.\n        unsafe { &mut *out_ptr }\n    }\n}\n\nimpl<'a, K: Ord, V> OccupiedEntry<'a, K, V> {\n    /// Gets a reference to the key in the entry.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    ///\n    /// let mut map: BTreeMap<&str, usize> = BTreeMap::new();\n    /// map.entry(\"poneyland\").or_insert(12);\n    /// assert_eq!(map.entry(\"poneyland\").key(), &\"poneyland\");\n    /// ```\n    #[stable(feature = \"map_entry_keys\", since = \"1.10.0\")]\n    pub fn key(&self) -> &K {\n        self.handle.reborrow().into_kv().0\n    }\n\n    /// Take ownership of the key and value from the map.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    /// use std::collections::btree_map::Entry;\n    ///\n    /// let mut map: BTreeMap<&str, usize> = BTreeMap::new();\n    /// map.entry(\"poneyland\").or_insert(12);\n    ///\n    /// if let Entry::Occupied(o) = map.entry(\"poneyland\") {\n    ///     // We delete the entry from the map.\n    ///     o.remove_entry();\n    /// }\n    ///\n    /// // If now try to get the value, it will panic:\n    /// // println!(\"{}\", map[\"poneyland\"]);\n    /// ```\n    #[stable(feature = \"map_entry_recover_keys2\", since = \"1.12.0\")]\n    pub fn remove_entry(self) -> (K, V) {\n        self.remove_kv()\n    }\n\n    /// Gets a reference to the value in the entry.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    /// use std::collections::btree_map::Entry;\n    ///\n    /// let mut map: BTreeMap<&str, usize> = BTreeMap::new();\n    /// map.entry(\"poneyland\").or_insert(12);\n    ///\n    /// if let Entry::Occupied(o) = map.entry(\"poneyland\") {\n    ///     assert_eq!(o.get(), &12);\n    /// }\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn get(&self) -> &V {\n        self.handle.reborrow().into_kv().1\n    }\n\n    /// Gets a mutable reference to the value in the entry.\n    ///\n    /// If you need a reference to the `OccupiedEntry` that may outlive the\n    /// destruction of the `Entry` value, see [`into_mut`].\n    ///\n    /// [`into_mut`]: OccupiedEntry::into_mut\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    /// use std::collections::btree_map::Entry;\n    ///\n    /// let mut map: BTreeMap<&str, usize> = BTreeMap::new();\n    /// map.entry(\"poneyland\").or_insert(12);\n    ///\n    /// assert_eq!(map[\"poneyland\"], 12);\n    /// if let Entry::Occupied(mut o) = map.entry(\"poneyland\") {\n    ///     *o.get_mut() += 10;\n    ///     assert_eq!(*o.get(), 22);\n    ///\n    ///     // We can use the same Entry multiple times.\n    ///     *o.get_mut() += 2;\n    /// }\n    /// assert_eq!(map[\"poneyland\"], 24);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn get_mut(&mut self) -> &mut V {\n        self.handle.kv_mut().1\n    }\n\n    /// Converts the entry into a mutable reference to its value.\n    ///\n    /// If you need multiple references to the `OccupiedEntry`, see [`get_mut`].\n    ///\n    /// [`get_mut`]: OccupiedEntry::get_mut\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    /// use std::collections::btree_map::Entry;\n    ///\n    /// let mut map: BTreeMap<&str, usize> = BTreeMap::new();\n    /// map.entry(\"poneyland\").or_insert(12);\n    ///\n    /// assert_eq!(map[\"poneyland\"], 12);\n    /// if let Entry::Occupied(o) = map.entry(\"poneyland\") {\n    ///     *o.into_mut() += 10;\n    /// }\n    /// assert_eq!(map[\"poneyland\"], 22);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn into_mut(self) -> &'a mut V {\n        self.handle.into_val_mut()\n    }\n\n    /// Sets the value of the entry with the `OccupiedEntry`'s key,\n    /// and returns the entry's old value.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    /// use std::collections::btree_map::Entry;\n    ///\n    /// let mut map: BTreeMap<&str, usize> = BTreeMap::new();\n    /// map.entry(\"poneyland\").or_insert(12);\n    ///\n    /// if let Entry::Occupied(mut o) = map.entry(\"poneyland\") {\n    ///     assert_eq!(o.insert(15), 12);\n    /// }\n    /// assert_eq!(map[\"poneyland\"], 15);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn insert(&mut self, value: V) -> V {\n        mem::replace(self.get_mut(), value)\n    }\n\n    /// Takes the value of the entry out of the map, and returns it.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::BTreeMap;\n    /// use std::collections::btree_map::Entry;\n    ///\n    /// let mut map: BTreeMap<&str, usize> = BTreeMap::new();\n    /// map.entry(\"poneyland\").or_insert(12);\n    ///\n    /// if let Entry::Occupied(o) = map.entry(\"poneyland\") {\n    ///     assert_eq!(o.remove(), 12);\n    /// }\n    /// // If we try to get \"poneyland\"'s value, it'll panic:\n    /// // println!(\"{}\", map[\"poneyland\"]);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn remove(self) -> V {\n        self.remove_kv().1\n    }\n\n    // Body of `remove_entry`, probably separate because the name reflects the returned pair.\n    pub(super) fn remove_kv(self) -> (K, V) {\n        let mut emptied_internal_root = false;\n        let (old_kv, _) = self.handle.remove_kv_tracking(|| emptied_internal_root = true);\n        // SAFETY: we consumed the intermediate root borrow, `self.handle`.\n        let map = unsafe { self.dormant_map.awaken() };\n        map.length -= 1;\n        if emptied_internal_root {\n            let root = map.root.as_mut().unwrap();\n            root.pop_internal_level();\n        }\n        old_kv\n    }\n}\nuse super::super::testing::crash_test::{CrashTestDummy, Panic};\nuse super::super::testing::ord_chaos::{Cyclic3, Governed, Governor};\nuse super::super::testing::rng::DeterministicRng;\nuse super::Entry::{Occupied, Vacant};\nuse super::*;\nuse crate::boxed::Box;\nuse crate::fmt::Debug;\nuse crate::rc::Rc;\nuse crate::string::{String, ToString};\nuse crate::vec::Vec;\nuse std::cmp::Ordering;\nuse std::convert::TryFrom;\nuse std::iter::{self, FromIterator};\nuse std::mem;\nuse std::ops::Bound::{self, Excluded, Included, Unbounded};\nuse std::ops::RangeBounds;\nuse std::panic::{catch_unwind, AssertUnwindSafe};\nuse std::sync::atomic::{AtomicUsize, Ordering::SeqCst};\n\n// Capacity of a tree with a single level,\n// i.e., a tree who's root is a leaf node at height 0.\nconst NODE_CAPACITY: usize = node::CAPACITY;\n\n// Minimum number of elements to insert, to guarantee a tree with 2 levels,\n// i.e., a tree who's root is an internal node at height 1, with edges to leaf nodes.\n// It's not the minimum size: removing an element from such a tree does not always reduce height.\nconst MIN_INSERTS_HEIGHT_1: usize = NODE_CAPACITY + 1;\n\n// Minimum number of elements to insert in ascending order, to guarantee a tree with 3 levels,\n// i.e., a tree who's root is an internal node at height 2, with edges to more internal nodes.\n// It's not the minimum size: removing an element from such a tree does not always reduce height.\nconst MIN_INSERTS_HEIGHT_2: usize = 89;\n\n// Gathers all references from a mutable iterator and makes sure Miri notices if\n// using them is dangerous.\nfn test_all_refs<'a, T: 'a>(dummy: &mut T, iter: impl Iterator<Item = &'a mut T>) {\n    // Gather all those references.\n    let mut refs: Vec<&mut T> = iter.collect();\n    // Use them all. Twice, to be sure we got all interleavings.\n    for r in refs.iter_mut() {\n        mem::swap(dummy, r);\n    }\n    for r in refs {\n        mem::swap(dummy, r);\n    }\n}\n\nimpl<K, V> BTreeMap<K, V> {\n    // Panics if the map (or the code navigating it) is corrupted.\n    fn check_invariants(&self) {\n        if let Some(root) = &self.root {\n            let root_node = root.reborrow();\n\n            // Check the back pointers top-down, before we attempt to rely on\n            // more serious navigation code.\n            assert!(root_node.ascend().is_err());\n            root_node.assert_back_pointers();\n\n            // Check consistency of `length` with what navigation code encounters.\n            assert_eq!(self.length, root_node.calc_length());\n\n            // Lastly, check the invariant causing the least harm.\n            root_node.assert_min_len(if root_node.height() > 0 { 1 } else { 0 });\n        } else {\n            assert_eq!(self.length, 0);\n        }\n\n        // Check that `assert_strictly_ascending` will encounter all keys.\n        assert_eq!(self.length, self.keys().count());\n    }\n\n    // Panics if the map is corrupted or if the keys are not in strictly\n    // ascending order, in the current opinion of the `Ord` implementation.\n    // If the `Ord` implementation violates transitivity, this method does not\n    // guarantee that all keys are unique, just that adjacent keys are unique.\n    fn check(&self)\n    where\n        K: Debug + Ord,\n    {\n        self.check_invariants();\n        self.assert_strictly_ascending();\n    }\n\n    // Returns the height of the root, if any.\n    fn height(&self) -> Option<usize> {\n        self.root.as_ref().map(node::Root::height)\n    }\n\n    fn dump_keys(&self) -> String\n    where\n        K: Debug,\n    {\n        if let Some(root) = self.root.as_ref() {\n            root.reborrow().dump_keys()\n        } else {\n            String::from(\"not yet allocated\")\n        }\n    }\n\n    // Panics if the keys are not in strictly ascending order.\n    fn assert_strictly_ascending(&self)\n    where\n        K: Debug + Ord,\n    {\n        let mut keys = self.keys();\n        if let Some(mut previous) = keys.next() {\n            for next in keys {\n                assert!(previous < next, \"{:?} >= {:?}\", previous, next);\n                previous = next;\n            }\n        }\n    }\n\n    // Transform the tree to minimize wasted space, obtaining fewer nodes that\n    // are mostly filled up to their capacity. The same compact tree could have\n    // been obtained by inserting keys in a shrewd order.\n    fn compact(&mut self)\n    where\n        K: Ord,\n    {\n        let iter = mem::take(self).into_iter();\n        let root = BTreeMap::ensure_is_owned(&mut self.root);\n        root.bulk_push(iter, &mut self.length);\n    }\n}\n\nimpl<'a, K: 'a, V: 'a> NodeRef<marker::Immut<'a>, K, V, marker::LeafOrInternal> {\n    fn assert_min_len(self, min_len: usize) {\n        assert!(self.len() >= min_len, \"node len {} < {}\", self.len(), min_len);\n        if let node::ForceResult::Internal(node) = self.force() {\n            for idx in 0..=node.len() {\n                let edge = unsafe { Handle::new_edge(node, idx) };\n                edge.descend().assert_min_len(MIN_LEN);\n            }\n        }\n    }\n}\n\n// Tests our value of MIN_INSERTS_HEIGHT_2. Failure may mean you just need to\n// adapt that value to match a change in node::CAPACITY or the choices made\n// during insertion, otherwise other test cases may fail or be less useful.\n#[test]\nfn test_levels() {\n    let mut map = BTreeMap::new();\n    map.check();\n    assert_eq!(map.height(), None);\n    assert_eq!(map.len(), 0);\n\n    map.insert(0, ());\n    while map.height() == Some(0) {\n        let last_key = *map.last_key_value().unwrap().0;\n        map.insert(last_key + 1, ());\n    }\n    map.check();\n    // Structure:\n    // - 1 element in internal root node with 2 children\n    // - 6 elements in left leaf child\n    // - 5 elements in right leaf child\n    assert_eq!(map.height(), Some(1));\n    assert_eq!(map.len(), MIN_INSERTS_HEIGHT_1, \"{}\", map.dump_keys());\n\n    while map.height() == Some(1) {\n        let last_key = *map.last_key_value().unwrap().0;\n        map.insert(last_key + 1, ());\n    }\n    map.check();\n    // Structure:\n    // - 1 element in internal root node with 2 children\n    // - 6 elements in left internal child with 7 grandchildren\n    // - 42 elements in left child's 7 grandchildren with 6 elements each\n    // - 5 elements in right internal child with 6 grandchildren\n    // - 30 elements in right child's 5 first grandchildren with 6 elements each\n    // - 5 elements in right child's last grandchild\n    assert_eq!(map.height(), Some(2));\n    assert_eq!(map.len(), MIN_INSERTS_HEIGHT_2, \"{}\", map.dump_keys());\n}\n\n// Ensures the testing infrastructure usually notices order violations.\n#[test]\n#[should_panic]\nfn test_check_ord_chaos() {\n    let gov = Governor::new();\n    let map: BTreeMap<_, _> = (0..2).map(|i| (Governed(i, &gov), ())).collect();\n    gov.flip();\n    map.check();\n}\n\n// Ensures the testing infrastructure doesn't always mind order violations.\n#[test]\nfn test_check_invariants_ord_chaos() {\n    let gov = Governor::new();\n    let map: BTreeMap<_, _> = (0..2).map(|i| (Governed(i, &gov), ())).collect();\n    gov.flip();\n    map.check_invariants();\n}\n\n#[test]\nfn test_basic_large() {\n    let mut map = BTreeMap::new();\n    // Miri is too slow\n    let size = if cfg!(miri) { MIN_INSERTS_HEIGHT_2 } else { 10000 };\n    let size = size + (size % 2); // round up to even number\n    assert_eq!(map.len(), 0);\n\n    for i in 0..size {\n        assert_eq!(map.insert(i, 10 * i), None);\n        assert_eq!(map.len(), i + 1);\n    }\n\n    assert_eq!(map.first_key_value(), Some((&0, &0)));\n    assert_eq!(map.last_key_value(), Some((&(size - 1), &(10 * (size - 1)))));\n    assert_eq!(map.first_entry().unwrap().key(), &0);\n    assert_eq!(map.last_entry().unwrap().key(), &(size - 1));\n\n    for i in 0..size {\n        assert_eq!(map.get(&i).unwrap(), &(i * 10));\n    }\n\n    for i in size..size * 2 {\n        assert_eq!(map.get(&i), None);\n    }\n\n    for i in 0..size {\n        assert_eq!(map.insert(i, 100 * i), Some(10 * i));\n        assert_eq!(map.len(), size);\n    }\n\n    for i in 0..size {\n        assert_eq!(map.get(&i).unwrap(), &(i * 100));\n    }\n\n    for i in 0..size / 2 {\n        assert_eq!(map.remove(&(i * 2)), Some(i * 200));\n        assert_eq!(map.len(), size - i - 1);\n    }\n\n    for i in 0..size / 2 {\n        assert_eq!(map.get(&(2 * i)), None);\n        assert_eq!(map.get(&(2 * i + 1)).unwrap(), &(i * 200 + 100));\n    }\n\n    for i in 0..size / 2 {\n        assert_eq!(map.remove(&(2 * i)), None);\n        assert_eq!(map.remove(&(2 * i + 1)), Some(i * 200 + 100));\n        assert_eq!(map.len(), size / 2 - i - 1);\n    }\n    map.check();\n}\n\n#[test]\nfn test_basic_small() {\n    let mut map = BTreeMap::new();\n    // Empty, root is absent (None):\n    assert_eq!(map.remove(&1), None);\n    assert_eq!(map.len(), 0);\n    assert_eq!(map.get(&1), None);\n    assert_eq!(map.get_mut(&1), None);\n    assert_eq!(map.first_key_value(), None);\n    assert_eq!(map.last_key_value(), None);\n    assert_eq!(map.keys().count(), 0);\n    assert_eq!(map.values().count(), 0);\n    assert_eq!(map.range(..).next(), None);\n    assert_eq!(map.range(..1).next(), None);\n    assert_eq!(map.range(1..).next(), None);\n    assert_eq!(map.range(1..=1).next(), None);\n    assert_eq!(map.range(1..2).next(), None);\n    assert_eq!(map.height(), None);\n    assert_eq!(map.insert(1, 1), None);\n    assert_eq!(map.height(), Some(0));\n    map.check();\n\n    // 1 key-value pair:\n    assert_eq!(map.len(), 1);\n    assert_eq!(map.get(&1), Some(&1));\n    assert_eq!(map.get_mut(&1), Some(&mut 1));\n    assert_eq!(map.first_key_value(), Some((&1, &1)));\n    assert_eq!(map.last_key_value(), Some((&1, &1)));\n    assert_eq!(map.keys().collect::<Vec<_>>(), vec![&1]);\n    assert_eq!(map.values().collect::<Vec<_>>(), vec![&1]);\n    assert_eq!(map.insert(1, 2), Some(1));\n    assert_eq!(map.len(), 1);\n    assert_eq!(map.get(&1), Some(&2));\n    assert_eq!(map.get_mut(&1), Some(&mut 2));\n    assert_eq!(map.first_key_value(), Some((&1, &2)));\n    assert_eq!(map.last_key_value(), Some((&1, &2)));\n    assert_eq!(map.keys().collect::<Vec<_>>(), vec![&1]);\n    assert_eq!(map.values().collect::<Vec<_>>(), vec![&2]);\n    assert_eq!(map.insert(2, 4), None);\n    assert_eq!(map.height(), Some(0));\n    map.check();\n\n    // 2 key-value pairs:\n    assert_eq!(map.len(), 2);\n    assert_eq!(map.get(&2), Some(&4));\n    assert_eq!(map.get_mut(&2), Some(&mut 4));\n    assert_eq!(map.first_key_value(), Some((&1, &2)));\n    assert_eq!(map.last_key_value(), Some((&2, &4)));\n    assert_eq!(map.keys().collect::<Vec<_>>(), vec![&1, &2]);\n    assert_eq!(map.values().collect::<Vec<_>>(), vec![&2, &4]);\n    assert_eq!(map.remove(&1), Some(2));\n    assert_eq!(map.height(), Some(0));\n    map.check();\n\n    // 1 key-value pair:\n    assert_eq!(map.len(), 1);\n    assert_eq!(map.get(&1), None);\n    assert_eq!(map.get_mut(&1), None);\n    assert_eq!(map.get(&2), Some(&4));\n    assert_eq!(map.get_mut(&2), Some(&mut 4));\n    assert_eq!(map.first_key_value(), Some((&2, &4)));\n    assert_eq!(map.last_key_value(), Some((&2, &4)));\n    assert_eq!(map.keys().collect::<Vec<_>>(), vec![&2]);\n    assert_eq!(map.values().collect::<Vec<_>>(), vec![&4]);\n    assert_eq!(map.remove(&2), Some(4));\n    assert_eq!(map.height(), Some(0));\n    map.check();\n\n    // Empty but root is owned (Some(...)):\n    assert_eq!(map.len(), 0);\n    assert_eq!(map.get(&1), None);\n    assert_eq!(map.get_mut(&1), None);\n    assert_eq!(map.first_key_value(), None);\n    assert_eq!(map.last_key_value(), None);\n    assert_eq!(map.keys().count(), 0);\n    assert_eq!(map.values().count(), 0);\n    assert_eq!(map.range(..).next(), None);\n    assert_eq!(map.range(..1).next(), None);\n    assert_eq!(map.range(1..).next(), None);\n    assert_eq!(map.range(1..=1).next(), None);\n    assert_eq!(map.range(1..2).next(), None);\n    assert_eq!(map.remove(&1), None);\n    assert_eq!(map.height(), Some(0));\n    map.check();\n}\n\n#[test]\nfn test_iter() {\n    // Miri is too slow\n    let size = if cfg!(miri) { 200 } else { 10000 };\n\n    let mut map: BTreeMap<_, _> = (0..size).map(|i| (i, i)).collect();\n\n    fn test<T>(size: usize, mut iter: T)\n    where\n        T: Iterator<Item = (usize, usize)>,\n    {\n        for i in 0..size {\n            assert_eq!(iter.size_hint(), (size - i, Some(size - i)));\n            assert_eq!(iter.next().unwrap(), (i, i));\n        }\n        assert_eq!(iter.size_hint(), (0, Some(0)));\n        assert_eq!(iter.next(), None);\n    }\n    test(size, map.iter().map(|(&k, &v)| (k, v)));\n    test(size, map.iter_mut().map(|(&k, &mut v)| (k, v)));\n    test(size, map.into_iter());\n}\n\n#[test]\nfn test_iter_rev() {\n    // Miri is too slow\n    let size = if cfg!(miri) { 200 } else { 10000 };\n\n    let mut map: BTreeMap<_, _> = (0..size).map(|i| (i, i)).collect();\n\n    fn test<T>(size: usize, mut iter: T)\n    where\n        T: Iterator<Item = (usize, usize)>,\n    {\n        for i in 0..size {\n            assert_eq!(iter.size_hint(), (size - i, Some(size - i)));\n            assert_eq!(iter.next().unwrap(), (size - i - 1, size - i - 1));\n        }\n        assert_eq!(iter.size_hint(), (0, Some(0)));\n        assert_eq!(iter.next(), None);\n    }\n    test(size, map.iter().rev().map(|(&k, &v)| (k, v)));\n    test(size, map.iter_mut().rev().map(|(&k, &mut v)| (k, v)));\n    test(size, map.into_iter().rev());\n}\n\n// Specifically tests iter_mut's ability to mutate the value of pairs in-line.\nfn do_test_iter_mut_mutation<T>(size: usize)\nwhere\n    T: Copy + Debug + Ord + TryFrom<usize>,\n    <T as TryFrom<usize>>::Error: Debug,\n{\n    let zero = T::try_from(0).unwrap();\n    let mut map: BTreeMap<T, T> = (0..size).map(|i| (T::try_from(i).unwrap(), zero)).collect();\n\n    // Forward and backward iteration sees enough pairs (also tested elsewhere)\n    assert_eq!(map.iter_mut().count(), size);\n    assert_eq!(map.iter_mut().rev().count(), size);\n\n    // Iterate forwards, trying to mutate to unique values\n    for (i, (k, v)) in map.iter_mut().enumerate() {\n        assert_eq!(*k, T::try_from(i).unwrap());\n        assert_eq!(*v, zero);\n        *v = T::try_from(i + 1).unwrap();\n    }\n\n    // Iterate backwards, checking that mutations succeeded and trying to mutate again\n    for (i, (k, v)) in map.iter_mut().rev().enumerate() {\n        assert_eq!(*k, T::try_from(size - i - 1).unwrap());\n        assert_eq!(*v, T::try_from(size - i).unwrap());\n        *v = T::try_from(2 * size - i).unwrap();\n    }\n\n    // Check that backward mutations succeeded\n    for (i, (k, v)) in map.iter_mut().enumerate() {\n        assert_eq!(*k, T::try_from(i).unwrap());\n        assert_eq!(*v, T::try_from(size + i + 1).unwrap());\n    }\n    map.check();\n}\n\n#[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord)]\n#[repr(align(32))]\nstruct Align32(usize);\n\nimpl TryFrom<usize> for Align32 {\n    type Error = ();\n\n    fn try_from(s: usize) -> Result<Align32, ()> {\n        Ok(Align32(s))\n    }\n}\n\n#[test]\nfn test_iter_mut_mutation() {\n    // Check many alignments and trees with roots at various heights.\n    do_test_iter_mut_mutation::<u8>(0);\n    do_test_iter_mut_mutation::<u8>(1);\n    do_test_iter_mut_mutation::<u8>(MIN_INSERTS_HEIGHT_1);\n    do_test_iter_mut_mutation::<u8>(MIN_INSERTS_HEIGHT_2);\n    do_test_iter_mut_mutation::<u16>(1);\n    do_test_iter_mut_mutation::<u16>(MIN_INSERTS_HEIGHT_1);\n    do_test_iter_mut_mutation::<u16>(MIN_INSERTS_HEIGHT_2);\n    do_test_iter_mut_mutation::<u32>(1);\n    do_test_iter_mut_mutation::<u32>(MIN_INSERTS_HEIGHT_1);\n    do_test_iter_mut_mutation::<u32>(MIN_INSERTS_HEIGHT_2);\n    do_test_iter_mut_mutation::<u64>(1);\n    do_test_iter_mut_mutation::<u64>(MIN_INSERTS_HEIGHT_1);\n    do_test_iter_mut_mutation::<u64>(MIN_INSERTS_HEIGHT_2);\n    do_test_iter_mut_mutation::<u128>(1);\n    do_test_iter_mut_mutation::<u128>(MIN_INSERTS_HEIGHT_1);\n    do_test_iter_mut_mutation::<u128>(MIN_INSERTS_HEIGHT_2);\n    do_test_iter_mut_mutation::<Align32>(1);\n    do_test_iter_mut_mutation::<Align32>(MIN_INSERTS_HEIGHT_1);\n    do_test_iter_mut_mutation::<Align32>(MIN_INSERTS_HEIGHT_2);\n}\n\n#[test]\nfn test_values_mut() {\n    let mut a: BTreeMap<_, _> = (0..MIN_INSERTS_HEIGHT_2).map(|i| (i, i)).collect();\n    test_all_refs(&mut 13, a.values_mut());\n    a.check();\n}\n\n#[test]\nfn test_values_mut_mutation() {\n    let mut a = BTreeMap::new();\n    a.insert(1, String::from(\"hello\"));\n    a.insert(2, String::from(\"goodbye\"));\n\n    for value in a.values_mut() {\n        value.push_str(\"!\");\n    }\n\n    let values: Vec<String> = a.values().cloned().collect();\n    assert_eq!(values, [String::from(\"hello!\"), String::from(\"goodbye!\")]);\n    a.check();\n}\n\n#[test]\nfn test_iter_entering_root_twice() {\n    let mut map: BTreeMap<_, _> = (0..2).map(|i| (i, i)).collect();\n    let mut it = map.iter_mut();\n    let front = it.next().unwrap();\n    let back = it.next_back().unwrap();\n    assert_eq!(front, (&0, &mut 0));\n    assert_eq!(back, (&1, &mut 1));\n    *front.1 = 24;\n    *back.1 = 42;\n    assert_eq!(front, (&0, &mut 24));\n    assert_eq!(back, (&1, &mut 42));\n    assert_eq!(it.next(), None);\n    assert_eq!(it.next_back(), None);\n    map.check();\n}\n\n#[test]\nfn test_iter_descending_to_same_node_twice() {\n    let mut map: BTreeMap<_, _> = (0..MIN_INSERTS_HEIGHT_1).map(|i| (i, i)).collect();\n    let mut it = map.iter_mut();\n    // Descend into first child.\n    let front = it.next().unwrap();\n    // Descend into first child again, after running through second child.\n    while it.next_back().is_some() {}\n    // Check immutable access.\n    assert_eq!(front, (&0, &mut 0));\n    // Perform mutable access.\n    *front.1 = 42;\n    map.check();\n}\n\n#[test]\nfn test_iter_mixed() {\n    // Miri is too slow\n    let size = if cfg!(miri) { 200 } else { 10000 };\n\n    let mut map: BTreeMap<_, _> = (0..size).map(|i| (i, i)).collect();\n\n    fn test<T>(size: usize, mut iter: T)\n    where\n        T: Iterator<Item = (usize, usize)> + DoubleEndedIterator,\n    {\n        for i in 0..size / 4 {\n            assert_eq!(iter.size_hint(), (size - i * 2, Some(size - i * 2)));\n            assert_eq!(iter.next().unwrap(), (i, i));\n            assert_eq!(iter.next_back().unwrap(), (size - i - 1, size - i - 1));\n        }\n        for i in size / 4..size * 3 / 4 {\n            assert_eq!(iter.size_hint(), (size * 3 / 4 - i, Some(size * 3 / 4 - i)));\n            assert_eq!(iter.next().unwrap(), (i, i));\n        }\n        assert_eq!(iter.size_hint(), (0, Some(0)));\n        assert_eq!(iter.next(), None);\n    }\n    test(size, map.iter().map(|(&k, &v)| (k, v)));\n    test(size, map.iter_mut().map(|(&k, &mut v)| (k, v)));\n    test(size, map.into_iter());\n}\n\n#[test]\nfn test_iter_min_max() {\n    let mut a = BTreeMap::new();\n    assert_eq!(a.iter().min(), None);\n    assert_eq!(a.iter().max(), None);\n    assert_eq!(a.iter_mut().min(), None);\n    assert_eq!(a.iter_mut().max(), None);\n    assert_eq!(a.range(..).min(), None);\n    assert_eq!(a.range(..).max(), None);\n    assert_eq!(a.range_mut(..).min(), None);\n    assert_eq!(a.range_mut(..).max(), None);\n    assert_eq!(a.keys().min(), None);\n    assert_eq!(a.keys().max(), None);\n    assert_eq!(a.values().min(), None);\n    assert_eq!(a.values().max(), None);\n    assert_eq!(a.values_mut().min(), None);\n    assert_eq!(a.values_mut().max(), None);\n    a.insert(1, 42);\n    a.insert(2, 24);\n    assert_eq!(a.iter().min(), Some((&1, &42)));\n    assert_eq!(a.iter().max(), Some((&2, &24)));\n    assert_eq!(a.iter_mut().min(), Some((&1, &mut 42)));\n    assert_eq!(a.iter_mut().max(), Some((&2, &mut 24)));\n    assert_eq!(a.range(..).min(), Some((&1, &42)));\n    assert_eq!(a.range(..).max(), Some((&2, &24)));\n    assert_eq!(a.range_mut(..).min(), Some((&1, &mut 42)));\n    assert_eq!(a.range_mut(..).max(), Some((&2, &mut 24)));\n    assert_eq!(a.keys().min(), Some(&1));\n    assert_eq!(a.keys().max(), Some(&2));\n    assert_eq!(a.values().min(), Some(&24));\n    assert_eq!(a.values().max(), Some(&42));\n    assert_eq!(a.values_mut().min(), Some(&mut 24));\n    assert_eq!(a.values_mut().max(), Some(&mut 42));\n    a.check();\n}\n\nfn range_keys(map: &BTreeMap<i32, i32>, range: impl RangeBounds<i32>) -> Vec<i32> {\n    map.range(range)\n        .map(|(&k, &v)| {\n            assert_eq!(k, v);\n            k\n        })\n        .collect()\n}\n\n#[test]\nfn test_range_small() {\n    let size = 4;\n\n    let map: BTreeMap<_, _> = (1..=size).map(|i| (i, i)).collect();\n    let all: Vec<_> = (1..=size).collect();\n    let (first, last) = (vec![all[0]], vec![all[size as usize - 1]]);\n\n    assert_eq!(range_keys(&map, (Excluded(0), Excluded(size + 1))), all);\n    assert_eq!(range_keys(&map, (Excluded(0), Included(size + 1))), all);\n    assert_eq!(range_keys(&map, (Excluded(0), Included(size))), all);\n    assert_eq!(range_keys(&map, (Excluded(0), Unbounded)), all);\n    assert_eq!(range_keys(&map, (Included(0), Excluded(size + 1))), all);\n    assert_eq!(range_keys(&map, (Included(0), Included(size + 1))), all);\n    assert_eq!(range_keys(&map, (Included(0), Included(size))), all);\n    assert_eq!(range_keys(&map, (Included(0), Unbounded)), all);\n    assert_eq!(range_keys(&map, (Included(1), Excluded(size + 1))), all);\n    assert_eq!(range_keys(&map, (Included(1), Included(size + 1))), all);\n    assert_eq!(range_keys(&map, (Included(1), Included(size))), all);\n    assert_eq!(range_keys(&map, (Included(1), Unbounded)), all);\n    assert_eq!(range_keys(&map, (Unbounded, Excluded(size + 1))), all);\n    assert_eq!(range_keys(&map, (Unbounded, Included(size + 1))), all);\n    assert_eq!(range_keys(&map, (Unbounded, Included(size))), all);\n    assert_eq!(range_keys(&map, ..), all);\n\n    assert_eq!(range_keys(&map, (Excluded(0), Excluded(1))), vec![]);\n    assert_eq!(range_keys(&map, (Excluded(0), Included(0))), vec![]);\n    assert_eq!(range_keys(&map, (Included(0), Included(0))), vec![]);\n    assert_eq!(range_keys(&map, (Included(0), Excluded(1))), vec![]);\n    assert_eq!(range_keys(&map, (Unbounded, Excluded(1))), vec![]);\n    assert_eq!(range_keys(&map, (Unbounded, Included(0))), vec![]);\n    assert_eq!(range_keys(&map, (Excluded(0), Excluded(2))), first);\n    assert_eq!(range_keys(&map, (Excluded(0), Included(1))), first);\n    assert_eq!(range_keys(&map, (Included(0), Excluded(2))), first);\n    assert_eq!(range_keys(&map, (Included(0), Included(1))), first);\n    assert_eq!(range_keys(&map, (Included(1), Excluded(2))), first);\n    assert_eq!(range_keys(&map, (Included(1), Included(1))), first);\n    assert_eq!(range_keys(&map, (Unbounded, Excluded(2))), first);\n    assert_eq!(range_keys(&map, (Unbounded, Included(1))), first);\n    assert_eq!(range_keys(&map, (Excluded(size - 1), Excluded(size + 1))), last);\n    assert_eq!(range_keys(&map, (Excluded(size - 1), Included(size + 1))), last);\n    assert_eq!(range_keys(&map, (Excluded(size - 1), Included(size))), last);\n    assert_eq!(range_keys(&map, (Excluded(size - 1), Unbounded)), last);\n    assert_eq!(range_keys(&map, (Included(size), Excluded(size + 1))), last);\n    assert_eq!(range_keys(&map, (Included(size), Included(size + 1))), last);\n    assert_eq!(range_keys(&map, (Included(size), Included(size))), last);\n    assert_eq!(range_keys(&map, (Included(size), Unbounded)), last);\n    assert_eq!(range_keys(&map, (Excluded(size), Excluded(size + 1))), vec![]);\n    assert_eq!(range_keys(&map, (Excluded(size), Included(size))), vec![]);\n    assert_eq!(range_keys(&map, (Excluded(size), Unbounded)), vec![]);\n    assert_eq!(range_keys(&map, (Included(size + 1), Excluded(size + 1))), vec![]);\n    assert_eq!(range_keys(&map, (Included(size + 1), Included(size + 1))), vec![]);\n    assert_eq!(range_keys(&map, (Included(size + 1), Unbounded)), vec![]);\n\n    assert_eq!(range_keys(&map, ..3), vec![1, 2]);\n    assert_eq!(range_keys(&map, 3..), vec![3, 4]);\n    assert_eq!(range_keys(&map, 2..=3), vec![2, 3]);\n}\n\n#[test]\nfn test_range_height_1() {\n    // Tests tree with a root and 2 leaves. The single key in the root node is\n    // close to the middle among the keys.\n\n    let map: BTreeMap<_, _> = (0..MIN_INSERTS_HEIGHT_1 as i32).map(|i| (i, i)).collect();\n    let middle = MIN_INSERTS_HEIGHT_1 as i32 / 2;\n    for root in middle - 2..=middle + 2 {\n        assert_eq!(range_keys(&map, (Excluded(root), Excluded(root + 1))), vec![]);\n        assert_eq!(range_keys(&map, (Excluded(root), Included(root + 1))), vec![root + 1]);\n        assert_eq!(range_keys(&map, (Included(root), Excluded(root + 1))), vec![root]);\n        assert_eq!(range_keys(&map, (Included(root), Included(root + 1))), vec![root, root + 1]);\n\n        assert_eq!(range_keys(&map, (Excluded(root - 1), Excluded(root))), vec![]);\n        assert_eq!(range_keys(&map, (Included(root - 1), Excluded(root))), vec![root - 1]);\n        assert_eq!(range_keys(&map, (Excluded(root - 1), Included(root))), vec![root]);\n        assert_eq!(range_keys(&map, (Included(root - 1), Included(root))), vec![root - 1, root]);\n    }\n}\n\n#[test]\nfn test_range_large() {\n    let size = 200;\n\n    let map: BTreeMap<_, _> = (1..=size).map(|i| (i, i)).collect();\n    let all: Vec<_> = (1..=size).collect();\n    let (first, last) = (vec![all[0]], vec![all[size as usize - 1]]);\n\n    assert_eq!(range_keys(&map, (Excluded(0), Excluded(size + 1))), all);\n    assert_eq!(range_keys(&map, (Excluded(0), Included(size + 1))), all);\n    assert_eq!(range_keys(&map, (Excluded(0), Included(size))), all);\n    assert_eq!(range_keys(&map, (Excluded(0), Unbounded)), all);\n    assert_eq!(range_keys(&map, (Included(0), Excluded(size + 1))), all);\n    assert_eq!(range_keys(&map, (Included(0), Included(size + 1))), all);\n    assert_eq!(range_keys(&map, (Included(0), Included(size))), all);\n    assert_eq!(range_keys(&map, (Included(0), Unbounded)), all);\n    assert_eq!(range_keys(&map, (Included(1), Excluded(size + 1))), all);\n    assert_eq!(range_keys(&map, (Included(1), Included(size + 1))), all);\n    assert_eq!(range_keys(&map, (Included(1), Included(size))), all);\n    assert_eq!(range_keys(&map, (Included(1), Unbounded)), all);\n    assert_eq!(range_keys(&map, (Unbounded, Excluded(size + 1))), all);\n    assert_eq!(range_keys(&map, (Unbounded, Included(size + 1))), all);\n    assert_eq!(range_keys(&map, (Unbounded, Included(size))), all);\n    assert_eq!(range_keys(&map, ..), all);\n\n    assert_eq!(range_keys(&map, (Excluded(0), Excluded(1))), vec![]);\n    assert_eq!(range_keys(&map, (Excluded(0), Included(0))), vec![]);\n    assert_eq!(range_keys(&map, (Included(0), Included(0))), vec![]);\n    assert_eq!(range_keys(&map, (Included(0), Excluded(1))), vec![]);\n    assert_eq!(range_keys(&map, (Unbounded, Excluded(1))), vec![]);\n    assert_eq!(range_keys(&map, (Unbounded, Included(0))), vec![]);\n    assert_eq!(range_keys(&map, (Excluded(0), Excluded(2))), first);\n    assert_eq!(range_keys(&map, (Excluded(0), Included(1))), first);\n    assert_eq!(range_keys(&map, (Included(0), Excluded(2))), first);\n    assert_eq!(range_keys(&map, (Included(0), Included(1))), first);\n    assert_eq!(range_keys(&map, (Included(1), Excluded(2))), first);\n    assert_eq!(range_keys(&map, (Included(1), Included(1))), first);\n    assert_eq!(range_keys(&map, (Unbounded, Excluded(2))), first);\n    assert_eq!(range_keys(&map, (Unbounded, Included(1))), first);\n    assert_eq!(range_keys(&map, (Excluded(size - 1), Excluded(size + 1))), last);\n    assert_eq!(range_keys(&map, (Excluded(size - 1), Included(size + 1))), last);\n    assert_eq!(range_keys(&map, (Excluded(size - 1), Included(size))), last);\n    assert_eq!(range_keys(&map, (Excluded(size - 1), Unbounded)), last);\n    assert_eq!(range_keys(&map, (Included(size), Excluded(size + 1))), last);\n    assert_eq!(range_keys(&map, (Included(size), Included(size + 1))), last);\n    assert_eq!(range_keys(&map, (Included(size), Included(size))), last);\n    assert_eq!(range_keys(&map, (Included(size), Unbounded)), last);\n    assert_eq!(range_keys(&map, (Excluded(size), Excluded(size + 1))), vec![]);\n    assert_eq!(range_keys(&map, (Excluded(size), Included(size))), vec![]);\n    assert_eq!(range_keys(&map, (Excluded(size), Unbounded)), vec![]);\n    assert_eq!(range_keys(&map, (Included(size + 1), Excluded(size + 1))), vec![]);\n    assert_eq!(range_keys(&map, (Included(size + 1), Included(size + 1))), vec![]);\n    assert_eq!(range_keys(&map, (Included(size + 1), Unbounded)), vec![]);\n\n    fn check<'a, L, R>(lhs: L, rhs: R)\n    where\n        L: IntoIterator<Item = (&'a i32, &'a i32)>,\n        R: IntoIterator<Item = (&'a i32, &'a i32)>,\n    {\n        let lhs: Vec<_> = lhs.into_iter().collect();\n        let rhs: Vec<_> = rhs.into_iter().collect();\n        assert_eq!(lhs, rhs);\n    }\n\n    check(map.range(..=100), map.range(..101));\n    check(map.range(5..=8), vec![(&5, &5), (&6, &6), (&7, &7), (&8, &8)]);\n    check(map.range(-1..=2), vec![(&1, &1), (&2, &2)]);\n}\n\n#[test]\nfn test_range_inclusive_max_value() {\n    let max = usize::MAX;\n    let map: BTreeMap<_, _> = vec![(max, 0)].into_iter().collect();\n\n    assert_eq!(map.range(max..=max).collect::<Vec<_>>(), &[(&max, &0)]);\n}\n\n#[test]\nfn test_range_equal_empty_cases() {\n    let map: BTreeMap<_, _> = (0..5).map(|i| (i, i)).collect();\n    assert_eq!(map.range((Included(2), Excluded(2))).next(), None);\n    assert_eq!(map.range((Excluded(2), Included(2))).next(), None);\n}\n\n#[test]\n#[should_panic]\nfn test_range_equal_excluded() {\n    let map: BTreeMap<_, _> = (0..5).map(|i| (i, i)).collect();\n    map.range((Excluded(2), Excluded(2)));\n}\n\n#[test]\n#[should_panic]\nfn test_range_backwards_1() {\n    let map: BTreeMap<_, _> = (0..5).map(|i| (i, i)).collect();\n    map.range((Included(3), Included(2)));\n}\n\n#[test]\n#[should_panic]\nfn test_range_backwards_2() {\n    let map: BTreeMap<_, _> = (0..5).map(|i| (i, i)).collect();\n    map.range((Included(3), Excluded(2)));\n}\n\n#[test]\n#[should_panic]\nfn test_range_backwards_3() {\n    let map: BTreeMap<_, _> = (0..5).map(|i| (i, i)).collect();\n    map.range((Excluded(3), Included(2)));\n}\n\n#[test]\n#[should_panic]\nfn test_range_backwards_4() {\n    let map: BTreeMap<_, _> = (0..5).map(|i| (i, i)).collect();\n    map.range((Excluded(3), Excluded(2)));\n}\n\n#[test]\nfn test_range_finding_ill_order_in_map() {\n    let mut map = BTreeMap::new();\n    map.insert(Cyclic3::B, ());\n    // Lacking static_assert, call `range` conditionally, to emphasise that\n    // we cause a different panic than `test_range_backwards_1` does.\n    // A more refined `should_panic` would be welcome.\n    if Cyclic3::C < Cyclic3::A {\n        map.range(Cyclic3::C..=Cyclic3::A);\n    }\n}\n\n#[test]\nfn test_range_finding_ill_order_in_range_ord() {\n    // Has proper order the first time asked, then flips around.\n    struct EvilTwin(i32);\n\n    impl PartialOrd for EvilTwin {\n        fn partial_cmp(&self, other: &Self) -> Option<Ordering> {\n            Some(self.cmp(other))\n        }\n    }\n\n    static COMPARES: AtomicUsize = AtomicUsize::new(0);\n    impl Ord for EvilTwin {\n        fn cmp(&self, other: &Self) -> Ordering {\n            let ord = self.0.cmp(&other.0);\n            if COMPARES.fetch_add(1, SeqCst) > 0 { ord.reverse() } else { ord }\n        }\n    }\n\n    impl PartialEq for EvilTwin {\n        fn eq(&self, other: &Self) -> bool {\n            self.0.eq(&other.0)\n        }\n    }\n\n    impl Eq for EvilTwin {}\n\n    #[derive(PartialEq, Eq, PartialOrd, Ord)]\n    struct CompositeKey(i32, EvilTwin);\n\n    impl Borrow<EvilTwin> for CompositeKey {\n        fn borrow(&self) -> &EvilTwin {\n            &self.1\n        }\n    }\n\n    let map = (0..12).map(|i| (CompositeKey(i, EvilTwin(i)), ())).collect::<BTreeMap<_, _>>();\n    map.range(EvilTwin(5)..=EvilTwin(7));\n}\n\n#[test]\nfn test_range_1000() {\n    // Miri is too slow\n    let size = if cfg!(miri) { MIN_INSERTS_HEIGHT_2 as u32 } else { 1000 };\n    let map: BTreeMap<_, _> = (0..size).map(|i| (i, i)).collect();\n\n    fn test(map: &BTreeMap<u32, u32>, size: u32, min: Bound<&u32>, max: Bound<&u32>) {\n        let mut kvs = map.range((min, max)).map(|(&k, &v)| (k, v));\n        let mut pairs = (0..size).map(|i| (i, i));\n\n        for (kv, pair) in kvs.by_ref().zip(pairs.by_ref()) {\n            assert_eq!(kv, pair);\n        }\n        assert_eq!(kvs.next(), None);\n        assert_eq!(pairs.next(), None);\n    }\n    test(&map, size, Included(&0), Excluded(&size));\n    test(&map, size, Unbounded, Excluded(&size));\n    test(&map, size, Included(&0), Included(&(size - 1)));\n    test(&map, size, Unbounded, Included(&(size - 1)));\n    test(&map, size, Included(&0), Unbounded);\n    test(&map, size, Unbounded, Unbounded);\n}\n\n#[test]\nfn test_range_borrowed_key() {\n    let mut map = BTreeMap::new();\n    map.insert(\"aardvark\".to_string(), 1);\n    map.insert(\"baboon\".to_string(), 2);\n    map.insert(\"coyote\".to_string(), 3);\n    map.insert(\"dingo\".to_string(), 4);\n    // NOTE: would like to use simply \"b\"..\"d\" here...\n    let mut iter = map.range::<str, _>((Included(\"b\"), Excluded(\"d\")));\n    assert_eq!(iter.next(), Some((&\"baboon\".to_string(), &2)));\n    assert_eq!(iter.next(), Some((&\"coyote\".to_string(), &3)));\n    assert_eq!(iter.next(), None);\n}\n\n#[test]\nfn test_range() {\n    let size = 200;\n    // Miri is too slow\n    let step = if cfg!(miri) { 66 } else { 1 };\n    let map: BTreeMap<_, _> = (0..size).map(|i| (i, i)).collect();\n\n    for i in (0..size).step_by(step) {\n        for j in (i..size).step_by(step) {\n            let mut kvs = map.range((Included(&i), Included(&j))).map(|(&k, &v)| (k, v));\n            let mut pairs = (i..=j).map(|i| (i, i));\n\n            for (kv, pair) in kvs.by_ref().zip(pairs.by_ref()) {\n                assert_eq!(kv, pair);\n            }\n            assert_eq!(kvs.next(), None);\n            assert_eq!(pairs.next(), None);\n        }\n    }\n}\n\n#[test]\nfn test_range_mut() {\n    let size = 200;\n    // Miri is too slow\n    let step = if cfg!(miri) { 66 } else { 1 };\n    let mut map: BTreeMap<_, _> = (0..size).map(|i| (i, i)).collect();\n\n    for i in (0..size).step_by(step) {\n        for j in (i..size).step_by(step) {\n            let mut kvs = map.range_mut((Included(&i), Included(&j))).map(|(&k, &mut v)| (k, v));\n            let mut pairs = (i..=j).map(|i| (i, i));\n\n            for (kv, pair) in kvs.by_ref().zip(pairs.by_ref()) {\n                assert_eq!(kv, pair);\n            }\n            assert_eq!(kvs.next(), None);\n            assert_eq!(pairs.next(), None);\n        }\n    }\n    map.check();\n}\n\n#[test]\nfn test_retain() {\n    let mut map: BTreeMap<i32, i32> = (0..100).map(|x| (x, x * 10)).collect();\n\n    map.retain(|&k, _| k % 2 == 0);\n    assert_eq!(map.len(), 50);\n    assert_eq!(map[&2], 20);\n    assert_eq!(map[&4], 40);\n    assert_eq!(map[&6], 60);\n}\n\nmod test_drain_filter {\n    use super::*;\n\n    #[test]\n    fn empty() {\n        let mut map: BTreeMap<i32, i32> = BTreeMap::new();\n        map.drain_filter(|_, _| unreachable!(\"there's nothing to decide on\"));\n        assert!(map.is_empty());\n        map.check();\n    }\n\n    // Explicitly consumes the iterator, where most test cases drop it instantly.\n    #[test]\n    fn consumed_keeping_all() {\n        let pairs = (0..3).map(|i| (i, i));\n        let mut map: BTreeMap<_, _> = pairs.collect();\n        assert!(map.drain_filter(|_, _| false).eq(iter::empty()));\n        map.check();\n    }\n\n    // Explicitly consumes the iterator, where most test cases drop it instantly.\n    #[test]\n    fn consumed_removing_all() {\n        let pairs = (0..3).map(|i| (i, i));\n        let mut map: BTreeMap<_, _> = pairs.clone().collect();\n        assert!(map.drain_filter(|_, _| true).eq(pairs));\n        assert!(map.is_empty());\n        map.check();\n    }\n\n    // Explicitly consumes the iterator and modifies values through it.\n    #[test]\n    fn mutating_and_keeping() {\n        let pairs = (0..3).map(|i| (i, i));\n        let mut map: BTreeMap<_, _> = pairs.collect();\n        assert!(\n            map.drain_filter(|_, v| {\n                *v += 6;\n                false\n            })\n            .eq(iter::empty())\n        );\n        assert!(map.keys().copied().eq(0..3));\n        assert!(map.values().copied().eq(6..9));\n        map.check();\n    }\n\n    // Explicitly consumes the iterator and modifies values through it.\n    #[test]\n    fn mutating_and_removing() {\n        let pairs = (0..3).map(|i| (i, i));\n        let mut map: BTreeMap<_, _> = pairs.collect();\n        assert!(\n            map.drain_filter(|_, v| {\n                *v += 6;\n                true\n            })\n            .eq((0..3).map(|i| (i, i + 6)))\n        );\n        assert!(map.is_empty());\n        map.check();\n    }\n\n    #[test]\n    fn underfull_keeping_all() {\n        let pairs = (0..3).map(|i| (i, i));\n        let mut map: BTreeMap<_, _> = pairs.collect();\n        map.drain_filter(|_, _| false);\n        assert!(map.keys().copied().eq(0..3));\n        map.check();\n    }\n\n    #[test]\n    fn underfull_removing_one() {\n        let pairs = (0..3).map(|i| (i, i));\n        for doomed in 0..3 {\n            let mut map: BTreeMap<_, _> = pairs.clone().collect();\n            map.drain_filter(|i, _| *i == doomed);\n            assert_eq!(map.len(), 2);\n            map.check();\n        }\n    }\n\n    #[test]\n    fn underfull_keeping_one() {\n        let pairs = (0..3).map(|i| (i, i));\n        for sacred in 0..3 {\n            let mut map: BTreeMap<_, _> = pairs.clone().collect();\n            map.drain_filter(|i, _| *i != sacred);\n            assert!(map.keys().copied().eq(sacred..=sacred));\n            map.check();\n        }\n    }\n\n    #[test]\n    fn underfull_removing_all() {\n        let pairs = (0..3).map(|i| (i, i));\n        let mut map: BTreeMap<_, _> = pairs.collect();\n        map.drain_filter(|_, _| true);\n        assert!(map.is_empty());\n        map.check();\n    }\n\n    #[test]\n    fn height_0_keeping_all() {\n        let pairs = (0..NODE_CAPACITY).map(|i| (i, i));\n        let mut map: BTreeMap<_, _> = pairs.collect();\n        map.drain_filter(|_, _| false);\n        assert!(map.keys().copied().eq(0..NODE_CAPACITY));\n        map.check();\n    }\n\n    #[test]\n    fn height_0_removing_one() {\n        let pairs = (0..NODE_CAPACITY).map(|i| (i, i));\n        for doomed in 0..NODE_CAPACITY {\n            let mut map: BTreeMap<_, _> = pairs.clone().collect();\n            map.drain_filter(|i, _| *i == doomed);\n            assert_eq!(map.len(), NODE_CAPACITY - 1);\n            map.check();\n        }\n    }\n\n    #[test]\n    fn height_0_keeping_one() {\n        let pairs = (0..NODE_CAPACITY).map(|i| (i, i));\n        for sacred in 0..NODE_CAPACITY {\n            let mut map: BTreeMap<_, _> = pairs.clone().collect();\n            map.drain_filter(|i, _| *i != sacred);\n            assert!(map.keys().copied().eq(sacred..=sacred));\n            map.check();\n        }\n    }\n\n    #[test]\n    fn height_0_removing_all() {\n        let pairs = (0..NODE_CAPACITY).map(|i| (i, i));\n        let mut map: BTreeMap<_, _> = pairs.collect();\n        map.drain_filter(|_, _| true);\n        assert!(map.is_empty());\n        map.check();\n    }\n\n    #[test]\n    fn height_0_keeping_half() {\n        let mut map: BTreeMap<_, _> = (0..16).map(|i| (i, i)).collect();\n        assert_eq!(map.drain_filter(|i, _| *i % 2 == 0).count(), 8);\n        assert_eq!(map.len(), 8);\n        map.check();\n    }\n\n    #[test]\n    fn height_1_removing_all() {\n        let pairs = (0..MIN_INSERTS_HEIGHT_1).map(|i| (i, i));\n        let mut map: BTreeMap<_, _> = pairs.collect();\n        map.drain_filter(|_, _| true);\n        assert!(map.is_empty());\n        map.check();\n    }\n\n    #[test]\n    fn height_1_removing_one() {\n        let pairs = (0..MIN_INSERTS_HEIGHT_1).map(|i| (i, i));\n        for doomed in 0..MIN_INSERTS_HEIGHT_1 {\n            let mut map: BTreeMap<_, _> = pairs.clone().collect();\n            map.drain_filter(|i, _| *i == doomed);\n            assert_eq!(map.len(), MIN_INSERTS_HEIGHT_1 - 1);\n            map.check();\n        }\n    }\n\n    #[test]\n    fn height_1_keeping_one() {\n        let pairs = (0..MIN_INSERTS_HEIGHT_1).map(|i| (i, i));\n        for sacred in 0..MIN_INSERTS_HEIGHT_1 {\n            let mut map: BTreeMap<_, _> = pairs.clone().collect();\n            map.drain_filter(|i, _| *i != sacred);\n            assert!(map.keys().copied().eq(sacred..=sacred));\n            map.check();\n        }\n    }\n\n    #[test]\n    fn height_2_removing_one() {\n        let pairs = (0..MIN_INSERTS_HEIGHT_2).map(|i| (i, i));\n        for doomed in (0..MIN_INSERTS_HEIGHT_2).step_by(12) {\n            let mut map: BTreeMap<_, _> = pairs.clone().collect();\n            map.drain_filter(|i, _| *i == doomed);\n            assert_eq!(map.len(), MIN_INSERTS_HEIGHT_2 - 1);\n            map.check();\n        }\n    }\n\n    #[test]\n    fn height_2_keeping_one() {\n        let pairs = (0..MIN_INSERTS_HEIGHT_2).map(|i| (i, i));\n        for sacred in (0..MIN_INSERTS_HEIGHT_2).step_by(12) {\n            let mut map: BTreeMap<_, _> = pairs.clone().collect();\n            map.drain_filter(|i, _| *i != sacred);\n            assert!(map.keys().copied().eq(sacred..=sacred));\n            map.check();\n        }\n    }\n\n    #[test]\n    fn height_2_removing_all() {\n        let pairs = (0..MIN_INSERTS_HEIGHT_2).map(|i| (i, i));\n        let mut map: BTreeMap<_, _> = pairs.collect();\n        map.drain_filter(|_, _| true);\n        assert!(map.is_empty());\n        map.check();\n    }\n\n    #[test]\n    fn drop_panic_leak() {\n        let a = CrashTestDummy::new(0);\n        let b = CrashTestDummy::new(1);\n        let c = CrashTestDummy::new(2);\n        let mut map = BTreeMap::new();\n        map.insert(a.spawn(Panic::Never), ());\n        map.insert(b.spawn(Panic::InDrop), ());\n        map.insert(c.spawn(Panic::Never), ());\n\n        catch_unwind(move || drop(map.drain_filter(|dummy, _| dummy.query(true)))).unwrap_err();\n\n        assert_eq!(a.queried(), 1);\n        assert_eq!(b.queried(), 1);\n        assert_eq!(c.queried(), 0);\n        assert_eq!(a.dropped(), 1);\n        assert_eq!(b.dropped(), 1);\n        assert_eq!(c.dropped(), 1);\n    }\n\n    #[test]\n    fn pred_panic_leak() {\n        let a = CrashTestDummy::new(0);\n        let b = CrashTestDummy::new(1);\n        let c = CrashTestDummy::new(2);\n        let mut map = BTreeMap::new();\n        map.insert(a.spawn(Panic::Never), ());\n        map.insert(b.spawn(Panic::InQuery), ());\n        map.insert(c.spawn(Panic::InQuery), ());\n\n        catch_unwind(AssertUnwindSafe(|| drop(map.drain_filter(|dummy, _| dummy.query(true)))))\n            .unwrap_err();\n\n        assert_eq!(a.queried(), 1);\n        assert_eq!(b.queried(), 1);\n        assert_eq!(c.queried(), 0);\n        assert_eq!(a.dropped(), 1);\n        assert_eq!(b.dropped(), 0);\n        assert_eq!(c.dropped(), 0);\n        assert_eq!(map.len(), 2);\n        assert_eq!(map.first_entry().unwrap().key().id(), 1);\n        assert_eq!(map.last_entry().unwrap().key().id(), 2);\n        map.check();\n    }\n\n    // Same as above, but attempt to use the iterator again after the panic in the predicate\n    #[test]\n    fn pred_panic_reuse() {\n        let a = CrashTestDummy::new(0);\n        let b = CrashTestDummy::new(1);\n        let c = CrashTestDummy::new(2);\n        let mut map = BTreeMap::new();\n        map.insert(a.spawn(Panic::Never), ());\n        map.insert(b.spawn(Panic::InQuery), ());\n        map.insert(c.spawn(Panic::InQuery), ());\n\n        {\n            let mut it = map.drain_filter(|dummy, _| dummy.query(true));\n            catch_unwind(AssertUnwindSafe(|| while it.next().is_some() {})).unwrap_err();\n            // Iterator behaviour after a panic is explicitly unspecified,\n            // so this is just the current implementation:\n            let result = catch_unwind(AssertUnwindSafe(|| it.next()));\n            assert!(matches!(result, Ok(None)));\n        }\n\n        assert_eq!(a.queried(), 1);\n        assert_eq!(b.queried(), 1);\n        assert_eq!(c.queried(), 0);\n        assert_eq!(a.dropped(), 1);\n        assert_eq!(b.dropped(), 0);\n        assert_eq!(c.dropped(), 0);\n        assert_eq!(map.len(), 2);\n        assert_eq!(map.first_entry().unwrap().key().id(), 1);\n        assert_eq!(map.last_entry().unwrap().key().id(), 2);\n        map.check();\n    }\n}\n\n#[test]\nfn test_borrow() {\n    // make sure these compile -- using the Borrow trait\n    {\n        let mut map = BTreeMap::new();\n        map.insert(\"0\".to_string(), 1);\n        assert_eq!(map[\"0\"], 1);\n    }\n\n    {\n        let mut map = BTreeMap::new();\n        map.insert(Box::new(0), 1);\n        assert_eq!(map[&0], 1);\n    }\n\n    {\n        let mut map = BTreeMap::new();\n        map.insert(Box::new([0, 1]) as Box<[i32]>, 1);\n        assert_eq!(map[&[0, 1][..]], 1);\n    }\n\n    {\n        let mut map = BTreeMap::new();\n        map.insert(Rc::new(0), 1);\n        assert_eq!(map[&0], 1);\n    }\n\n    #[allow(dead_code)]\n    fn get<T: Ord>(v: &BTreeMap<Box<T>, ()>, t: &T) {\n        v.get(t);\n    }\n\n    #[allow(dead_code)]\n    fn get_mut<T: Ord>(v: &mut BTreeMap<Box<T>, ()>, t: &T) {\n        v.get_mut(t);\n    }\n\n    #[allow(dead_code)]\n    fn get_key_value<T: Ord>(v: &BTreeMap<Box<T>, ()>, t: &T) {\n        v.get_key_value(t);\n    }\n\n    #[allow(dead_code)]\n    fn contains_key<T: Ord>(v: &BTreeMap<Box<T>, ()>, t: &T) {\n        v.contains_key(t);\n    }\n\n    #[allow(dead_code)]\n    fn range<T: Ord>(v: &BTreeMap<Box<T>, ()>, t: T) {\n        v.range(t..);\n    }\n\n    #[allow(dead_code)]\n    fn range_mut<T: Ord>(v: &mut BTreeMap<Box<T>, ()>, t: T) {\n        v.range_mut(t..);\n    }\n\n    #[allow(dead_code)]\n    fn remove<T: Ord>(v: &mut BTreeMap<Box<T>, ()>, t: &T) {\n        v.remove(t);\n    }\n\n    #[allow(dead_code)]\n    fn remove_entry<T: Ord>(v: &mut BTreeMap<Box<T>, ()>, t: &T) {\n        v.remove_entry(t);\n    }\n\n    #[allow(dead_code)]\n    fn split_off<T: Ord>(v: &mut BTreeMap<Box<T>, ()>, t: &T) {\n        v.split_off(t);\n    }\n}\n\n#[test]\nfn test_entry() {\n    let xs = [(1, 10), (2, 20), (3, 30), (4, 40), (5, 50), (6, 60)];\n\n    let mut map: BTreeMap<_, _> = xs.iter().cloned().collect();\n\n    // Existing key (insert)\n    match map.entry(1) {\n        Vacant(_) => unreachable!(),\n        Occupied(mut view) => {\n            assert_eq!(view.get(), &10);\n            assert_eq!(view.insert(100), 10);\n        }\n    }\n    assert_eq!(map.get(&1).unwrap(), &100);\n    assert_eq!(map.len(), 6);\n\n    // Existing key (update)\n    match map.entry(2) {\n        Vacant(_) => unreachable!(),\n        Occupied(mut view) => {\n            let v = view.get_mut();\n            *v *= 10;\n        }\n    }\n    assert_eq!(map.get(&2).unwrap(), &200);\n    assert_eq!(map.len(), 6);\n    map.check();\n\n    // Existing key (take)\n    match map.entry(3) {\n        Vacant(_) => unreachable!(),\n        Occupied(view) => {\n            assert_eq!(view.remove(), 30);\n        }\n    }\n    assert_eq!(map.get(&3), None);\n    assert_eq!(map.len(), 5);\n    map.check();\n\n    // Inexistent key (insert)\n    match map.entry(10) {\n        Occupied(_) => unreachable!(),\n        Vacant(view) => {\n            assert_eq!(*view.insert(1000), 1000);\n        }\n    }\n    assert_eq!(map.get(&10).unwrap(), &1000);\n    assert_eq!(map.len(), 6);\n    map.check();\n}\n\n#[test]\nfn test_extend_ref() {\n    let mut a = BTreeMap::new();\n    a.insert(1, \"one\");\n    let mut b = BTreeMap::new();\n    b.insert(2, \"two\");\n    b.insert(3, \"three\");\n\n    a.extend(&b);\n\n    assert_eq!(a.len(), 3);\n    assert_eq!(a[&1], \"one\");\n    assert_eq!(a[&2], \"two\");\n    assert_eq!(a[&3], \"three\");\n    a.check();\n}\n\n#[test]\nfn test_zst() {\n    let mut m = BTreeMap::new();\n    assert_eq!(m.len(), 0);\n\n    assert_eq!(m.insert((), ()), None);\n    assert_eq!(m.len(), 1);\n\n    assert_eq!(m.insert((), ()), Some(()));\n    assert_eq!(m.len(), 1);\n    assert_eq!(m.iter().count(), 1);\n\n    m.clear();\n    assert_eq!(m.len(), 0);\n\n    for _ in 0..100 {\n        m.insert((), ());\n    }\n\n    assert_eq!(m.len(), 1);\n    assert_eq!(m.iter().count(), 1);\n    m.check();\n}\n\n// This test's only purpose is to ensure that zero-sized keys with nonsensical orderings\n// do not cause segfaults when used with zero-sized values. All other map behavior is\n// undefined.\n#[test]\nfn test_bad_zst() {\n    #[derive(Clone, Copy, Debug)]\n    struct Bad;\n\n    impl PartialEq for Bad {\n        fn eq(&self, _: &Self) -> bool {\n            false\n        }\n    }\n\n    impl Eq for Bad {}\n\n    impl PartialOrd for Bad {\n        fn partial_cmp(&self, _: &Self) -> Option<Ordering> {\n            Some(Ordering::Less)\n        }\n    }\n\n    impl Ord for Bad {\n        fn cmp(&self, _: &Self) -> Ordering {\n            Ordering::Less\n        }\n    }\n\n    let mut m = BTreeMap::new();\n\n    for _ in 0..100 {\n        m.insert(Bad, Bad);\n    }\n    m.check();\n}\n\n#[test]\nfn test_clear() {\n    let mut map = BTreeMap::new();\n    for &len in &[MIN_INSERTS_HEIGHT_1, MIN_INSERTS_HEIGHT_2, 0, NODE_CAPACITY] {\n        for i in 0..len {\n            map.insert(i, ());\n        }\n        assert_eq!(map.len(), len);\n        map.clear();\n        map.check();\n        assert!(map.is_empty());\n    }\n}\n\n#[test]\nfn test_clear_drop_panic_leak() {\n    let a = CrashTestDummy::new(0);\n    let b = CrashTestDummy::new(1);\n    let c = CrashTestDummy::new(2);\n\n    let mut map = BTreeMap::new();\n    map.insert(a.spawn(Panic::Never), ());\n    map.insert(b.spawn(Panic::InDrop), ());\n    map.insert(c.spawn(Panic::Never), ());\n\n    catch_unwind(AssertUnwindSafe(|| map.clear())).unwrap_err();\n    assert_eq!(a.dropped(), 1);\n    assert_eq!(b.dropped(), 1);\n    assert_eq!(c.dropped(), 1);\n    assert_eq!(map.len(), 0);\n\n    drop(map);\n    assert_eq!(a.dropped(), 1);\n    assert_eq!(b.dropped(), 1);\n    assert_eq!(c.dropped(), 1);\n}\n\n#[test]\nfn test_clone() {\n    let mut map = BTreeMap::new();\n    let size = MIN_INSERTS_HEIGHT_1;\n    assert_eq!(map.len(), 0);\n\n    for i in 0..size {\n        assert_eq!(map.insert(i, 10 * i), None);\n        assert_eq!(map.len(), i + 1);\n        map.check();\n        assert_eq!(map, map.clone());\n    }\n\n    for i in 0..size {\n        assert_eq!(map.insert(i, 100 * i), Some(10 * i));\n        assert_eq!(map.len(), size);\n        map.check();\n        assert_eq!(map, map.clone());\n    }\n\n    for i in 0..size / 2 {\n        assert_eq!(map.remove(&(i * 2)), Some(i * 200));\n        assert_eq!(map.len(), size - i - 1);\n        map.check();\n        assert_eq!(map, map.clone());\n    }\n\n    for i in 0..size / 2 {\n        assert_eq!(map.remove(&(2 * i)), None);\n        assert_eq!(map.remove(&(2 * i + 1)), Some(i * 200 + 100));\n        assert_eq!(map.len(), size / 2 - i - 1);\n        map.check();\n        assert_eq!(map, map.clone());\n    }\n\n    // Test a tree with 2 semi-full levels and a tree with 3 levels.\n    map = (1..MIN_INSERTS_HEIGHT_2).map(|i| (i, i)).collect();\n    assert_eq!(map.len(), MIN_INSERTS_HEIGHT_2 - 1);\n    assert_eq!(map, map.clone());\n    map.insert(0, 0);\n    assert_eq!(map.len(), MIN_INSERTS_HEIGHT_2);\n    assert_eq!(map, map.clone());\n    map.check();\n}\n\n#[test]\nfn test_clone_panic_leak() {\n    let a = CrashTestDummy::new(0);\n    let b = CrashTestDummy::new(1);\n    let c = CrashTestDummy::new(2);\n\n    let mut map = BTreeMap::new();\n    map.insert(a.spawn(Panic::Never), ());\n    map.insert(b.spawn(Panic::InClone), ());\n    map.insert(c.spawn(Panic::Never), ());\n\n    catch_unwind(|| map.clone()).unwrap_err();\n    assert_eq!(a.cloned(), 1);\n    assert_eq!(b.cloned(), 1);\n    assert_eq!(c.cloned(), 0);\n    assert_eq!(a.dropped(), 1);\n    assert_eq!(b.dropped(), 0);\n    assert_eq!(c.dropped(), 0);\n    assert_eq!(map.len(), 3);\n\n    drop(map);\n    assert_eq!(a.cloned(), 1);\n    assert_eq!(b.cloned(), 1);\n    assert_eq!(c.cloned(), 0);\n    assert_eq!(a.dropped(), 2);\n    assert_eq!(b.dropped(), 1);\n    assert_eq!(c.dropped(), 1);\n}\n\n#[test]\nfn test_clone_from() {\n    let mut map1 = BTreeMap::new();\n    let max_size = MIN_INSERTS_HEIGHT_1;\n\n    // Range to max_size inclusive, because i is the size of map1 being tested.\n    for i in 0..=max_size {\n        let mut map2 = BTreeMap::new();\n        for j in 0..i {\n            let mut map1_copy = map2.clone();\n            map1_copy.clone_from(&map1); // small cloned from large\n            assert_eq!(map1_copy, map1);\n            let mut map2_copy = map1.clone();\n            map2_copy.clone_from(&map2); // large cloned from small\n            assert_eq!(map2_copy, map2);\n            map2.insert(100 * j + 1, 2 * j + 1);\n        }\n        map2.clone_from(&map1); // same length\n        map2.check();\n        assert_eq!(map2, map1);\n        map1.insert(i, 10 * i);\n        map1.check();\n    }\n}\n\n#[allow(dead_code)]\nfn test_variance() {\n    fn map_key<'new>(v: BTreeMap<&'static str, ()>) -> BTreeMap<&'new str, ()> {\n        v\n    }\n    fn map_val<'new>(v: BTreeMap<(), &'static str>) -> BTreeMap<(), &'new str> {\n        v\n    }\n\n    fn iter_key<'a, 'new>(v: Iter<'a, &'static str, ()>) -> Iter<'a, &'new str, ()> {\n        v\n    }\n    fn iter_val<'a, 'new>(v: Iter<'a, (), &'static str>) -> Iter<'a, (), &'new str> {\n        v\n    }\n\n    fn into_iter_key<'new>(v: IntoIter<&'static str, ()>) -> IntoIter<&'new str, ()> {\n        v\n    }\n    fn into_iter_val<'new>(v: IntoIter<(), &'static str>) -> IntoIter<(), &'new str> {\n        v\n    }\n\n    fn into_keys_key<'new>(v: IntoKeys<&'static str, ()>) -> IntoKeys<&'new str, ()> {\n        v\n    }\n    fn into_keys_val<'new>(v: IntoKeys<(), &'static str>) -> IntoKeys<(), &'new str> {\n        v\n    }\n\n    fn into_values_key<'new>(v: IntoValues<&'static str, ()>) -> IntoValues<&'new str, ()> {\n        v\n    }\n    fn into_values_val<'new>(v: IntoValues<(), &'static str>) -> IntoValues<(), &'new str> {\n        v\n    }\n\n    fn range_key<'a, 'new>(v: Range<'a, &'static str, ()>) -> Range<'a, &'new str, ()> {\n        v\n    }\n    fn range_val<'a, 'new>(v: Range<'a, (), &'static str>) -> Range<'a, (), &'new str> {\n        v\n    }\n\n    fn keys_key<'a, 'new>(v: Keys<'a, &'static str, ()>) -> Keys<'a, &'new str, ()> {\n        v\n    }\n    fn keys_val<'a, 'new>(v: Keys<'a, (), &'static str>) -> Keys<'a, (), &'new str> {\n        v\n    }\n\n    fn values_key<'a, 'new>(v: Values<'a, &'static str, ()>) -> Values<'a, &'new str, ()> {\n        v\n    }\n    fn values_val<'a, 'new>(v: Values<'a, (), &'static str>) -> Values<'a, (), &'new str> {\n        v\n    }\n}\n\n#[allow(dead_code)]\nfn test_sync() {\n    fn map<T: Sync>(v: &BTreeMap<T, T>) -> impl Sync + '_ {\n        v\n    }\n\n    fn into_iter<T: Sync>(v: BTreeMap<T, T>) -> impl Sync {\n        v.into_iter()\n    }\n\n    fn into_keys<T: Sync + Ord>(v: BTreeMap<T, T>) -> impl Sync {\n        v.into_keys()\n    }\n\n    fn into_values<T: Sync + Ord>(v: BTreeMap<T, T>) -> impl Sync {\n        v.into_values()\n    }\n\n    fn drain_filter<T: Sync + Ord>(v: &mut BTreeMap<T, T>) -> impl Sync + '_ {\n        v.drain_filter(|_, _| false)\n    }\n\n    fn iter<T: Sync>(v: &BTreeMap<T, T>) -> impl Sync + '_ {\n        v.iter()\n    }\n\n    fn iter_mut<T: Sync>(v: &mut BTreeMap<T, T>) -> impl Sync + '_ {\n        v.iter_mut()\n    }\n\n    fn keys<T: Sync>(v: &BTreeMap<T, T>) -> impl Sync + '_ {\n        v.keys()\n    }\n\n    fn values<T: Sync>(v: &BTreeMap<T, T>) -> impl Sync + '_ {\n        v.values()\n    }\n\n    fn values_mut<T: Sync>(v: &mut BTreeMap<T, T>) -> impl Sync + '_ {\n        v.values_mut()\n    }\n\n    fn range<T: Sync + Ord>(v: &BTreeMap<T, T>) -> impl Sync + '_ {\n        v.range(..)\n    }\n\n    fn range_mut<T: Sync + Ord>(v: &mut BTreeMap<T, T>) -> impl Sync + '_ {\n        v.range_mut(..)\n    }\n\n    fn entry<T: Sync + Ord + Default>(v: &mut BTreeMap<T, T>) -> impl Sync + '_ {\n        v.entry(Default::default())\n    }\n\n    fn occupied_entry<T: Sync + Ord + Default>(v: &mut BTreeMap<T, T>) -> impl Sync + '_ {\n        match v.entry(Default::default()) {\n            Occupied(entry) => entry,\n            _ => unreachable!(),\n        }\n    }\n\n    fn vacant_entry<T: Sync + Ord + Default>(v: &mut BTreeMap<T, T>) -> impl Sync + '_ {\n        match v.entry(Default::default()) {\n            Vacant(entry) => entry,\n            _ => unreachable!(),\n        }\n    }\n}\n\n#[allow(dead_code)]\nfn test_send() {\n    fn map<T: Send>(v: BTreeMap<T, T>) -> impl Send {\n        v\n    }\n\n    fn into_iter<T: Send>(v: BTreeMap<T, T>) -> impl Send {\n        v.into_iter()\n    }\n\n    fn into_keys<T: Send + Ord>(v: BTreeMap<T, T>) -> impl Send {\n        v.into_keys()\n    }\n\n    fn into_values<T: Send + Ord>(v: BTreeMap<T, T>) -> impl Send {\n        v.into_values()\n    }\n\n    fn drain_filter<T: Send + Ord>(v: &mut BTreeMap<T, T>) -> impl Send + '_ {\n        v.drain_filter(|_, _| false)\n    }\n\n    fn iter<T: Send + Sync>(v: &BTreeMap<T, T>) -> impl Send + '_ {\n        v.iter()\n    }\n\n    fn iter_mut<T: Send>(v: &mut BTreeMap<T, T>) -> impl Send + '_ {\n        v.iter_mut()\n    }\n\n    fn keys<T: Send + Sync>(v: &BTreeMap<T, T>) -> impl Send + '_ {\n        v.keys()\n    }\n\n    fn values<T: Send + Sync>(v: &BTreeMap<T, T>) -> impl Send + '_ {\n        v.values()\n    }\n\n    fn values_mut<T: Send>(v: &mut BTreeMap<T, T>) -> impl Send + '_ {\n        v.values_mut()\n    }\n\n    fn range<T: Send + Sync + Ord>(v: &BTreeMap<T, T>) -> impl Send + '_ {\n        v.range(..)\n    }\n\n    fn range_mut<T: Send + Ord>(v: &mut BTreeMap<T, T>) -> impl Send + '_ {\n        v.range_mut(..)\n    }\n\n    fn entry<T: Send + Ord + Default>(v: &mut BTreeMap<T, T>) -> impl Send + '_ {\n        v.entry(Default::default())\n    }\n\n    fn occupied_entry<T: Send + Ord + Default>(v: &mut BTreeMap<T, T>) -> impl Send + '_ {\n        match v.entry(Default::default()) {\n            Occupied(entry) => entry,\n            _ => unreachable!(),\n        }\n    }\n\n    fn vacant_entry<T: Send + Ord + Default>(v: &mut BTreeMap<T, T>) -> impl Send + '_ {\n        match v.entry(Default::default()) {\n            Vacant(entry) => entry,\n            _ => unreachable!(),\n        }\n    }\n}\n\n#[allow(dead_code)]\nfn test_ord_absence() {\n    fn map<K>(mut map: BTreeMap<K, ()>) {\n        map.is_empty();\n        map.len();\n        map.clear();\n        map.iter();\n        map.iter_mut();\n        map.keys();\n        map.values();\n        map.values_mut();\n        if true {\n            map.into_values();\n        } else if true {\n            map.into_iter();\n        } else {\n            map.into_keys();\n        }\n    }\n\n    fn map_debug<K: Debug>(mut map: BTreeMap<K, ()>) {\n        format!(\"{:?}\", map);\n        format!(\"{:?}\", map.iter());\n        format!(\"{:?}\", map.iter_mut());\n        format!(\"{:?}\", map.keys());\n        format!(\"{:?}\", map.values());\n        format!(\"{:?}\", map.values_mut());\n        if true {\n            format!(\"{:?}\", map.into_iter());\n        } else if true {\n            format!(\"{:?}\", map.into_keys());\n        } else {\n            format!(\"{:?}\", map.into_values());\n        }\n    }\n\n    fn map_clone<K: Clone>(mut map: BTreeMap<K, ()>) {\n        map.clone_from(&map.clone());\n    }\n}\n\n#[allow(dead_code)]\nfn test_const() {\n    const MAP: &'static BTreeMap<(), ()> = &BTreeMap::new();\n    const LEN: usize = MAP.len();\n    const IS_EMPTY: bool = MAP.is_empty();\n}\n\n#[test]\nfn test_occupied_entry_key() {\n    let mut a = BTreeMap::new();\n    let key = \"hello there\";\n    let value = \"value goes here\";\n    assert!(a.is_empty());\n    a.insert(key, value);\n    assert_eq!(a.len(), 1);\n    assert_eq!(a[key], value);\n\n    match a.entry(key) {\n        Vacant(_) => panic!(),\n        Occupied(e) => assert_eq!(key, *e.key()),\n    }\n    assert_eq!(a.len(), 1);\n    assert_eq!(a[key], value);\n    a.check();\n}\n\n#[test]\nfn test_vacant_entry_key() {\n    let mut a = BTreeMap::new();\n    let key = \"hello there\";\n    let value = \"value goes here\";\n\n    assert!(a.is_empty());\n    match a.entry(key) {\n        Occupied(_) => panic!(),\n        Vacant(e) => {\n            assert_eq!(key, *e.key());\n            e.insert(value);\n        }\n    }\n    assert_eq!(a.len(), 1);\n    assert_eq!(a[key], value);\n    a.check();\n}\n\n#[test]\nfn test_first_last_entry() {\n    let mut a = BTreeMap::new();\n    assert!(a.first_entry().is_none());\n    assert!(a.last_entry().is_none());\n    a.insert(1, 42);\n    assert_eq!(a.first_entry().unwrap().key(), &1);\n    assert_eq!(a.last_entry().unwrap().key(), &1);\n    a.insert(2, 24);\n    assert_eq!(a.first_entry().unwrap().key(), &1);\n    assert_eq!(a.last_entry().unwrap().key(), &2);\n    a.insert(0, 6);\n    assert_eq!(a.first_entry().unwrap().key(), &0);\n    assert_eq!(a.last_entry().unwrap().key(), &2);\n    let (k1, v1) = a.first_entry().unwrap().remove_entry();\n    assert_eq!(k1, 0);\n    assert_eq!(v1, 6);\n    let (k2, v2) = a.last_entry().unwrap().remove_entry();\n    assert_eq!(k2, 2);\n    assert_eq!(v2, 24);\n    assert_eq!(a.first_entry().unwrap().key(), &1);\n    assert_eq!(a.last_entry().unwrap().key(), &1);\n    a.check();\n}\n\n#[test]\nfn test_insert_into_full_height_0() {\n    let size = NODE_CAPACITY;\n    for pos in 0..=size {\n        let mut map: BTreeMap<_, _> = (0..size).map(|i| (i * 2 + 1, ())).collect();\n        assert!(map.insert(pos * 2, ()).is_none());\n        map.check();\n    }\n}\n\n#[test]\nfn test_insert_into_full_height_1() {\n    let size = NODE_CAPACITY + 1 + NODE_CAPACITY;\n    for pos in 0..=size {\n        let mut map: BTreeMap<_, _> = (0..size).map(|i| (i * 2 + 1, ())).collect();\n        map.compact();\n        let root_node = map.root.as_ref().unwrap().reborrow();\n        assert_eq!(root_node.len(), 1);\n        assert_eq!(root_node.first_leaf_edge().into_node().len(), NODE_CAPACITY);\n        assert_eq!(root_node.last_leaf_edge().into_node().len(), NODE_CAPACITY);\n\n        assert!(map.insert(pos * 2, ()).is_none());\n        map.check();\n    }\n}\n\nmacro_rules! create_append_test {\n    ($name:ident, $len:expr) => {\n        #[test]\n        fn $name() {\n            let mut a = BTreeMap::new();\n            for i in 0..8 {\n                a.insert(i, i);\n            }\n\n            let mut b = BTreeMap::new();\n            for i in 5..$len {\n                b.insert(i, 2 * i);\n            }\n\n            a.append(&mut b);\n\n            assert_eq!(a.len(), $len);\n            assert_eq!(b.len(), 0);\n\n            for i in 0..$len {\n                if i < 5 {\n                    assert_eq!(a[&i], i);\n                } else {\n                    assert_eq!(a[&i], 2 * i);\n                }\n            }\n\n            a.check();\n            assert_eq!(a.remove(&($len - 1)), Some(2 * ($len - 1)));\n            assert_eq!(a.insert($len - 1, 20), None);\n            a.check();\n        }\n    };\n}\n\n// These are mostly for testing the algorithm that \"fixes\" the right edge after insertion.\n// Single node.\ncreate_append_test!(test_append_9, 9);\n// Two leafs that don't need fixing.\ncreate_append_test!(test_append_17, 17);\n// Two leafs where the second one ends up underfull and needs stealing at the end.\ncreate_append_test!(test_append_14, 14);\n// Two leafs where the second one ends up empty because the insertion finished at the root.\ncreate_append_test!(test_append_12, 12);\n// Three levels; insertion finished at the root.\ncreate_append_test!(test_append_144, 144);\n// Three levels; insertion finished at leaf while there is an empty node on the second level.\ncreate_append_test!(test_append_145, 145);\n// Tests for several randomly chosen sizes.\ncreate_append_test!(test_append_170, 170);\ncreate_append_test!(test_append_181, 181);\n#[cfg(not(miri))] // Miri is too slow\ncreate_append_test!(test_append_239, 239);\n#[cfg(not(miri))] // Miri is too slow\ncreate_append_test!(test_append_1700, 1700);\n\n#[test]\nfn test_append_drop_leak() {\n    let a = CrashTestDummy::new(0);\n    let b = CrashTestDummy::new(1);\n    let c = CrashTestDummy::new(2);\n    let mut left = BTreeMap::new();\n    let mut right = BTreeMap::new();\n    left.insert(a.spawn(Panic::Never), ());\n    left.insert(b.spawn(Panic::InDrop), ()); // first duplicate key, dropped during append\n    left.insert(c.spawn(Panic::Never), ());\n    right.insert(b.spawn(Panic::Never), ());\n    right.insert(c.spawn(Panic::Never), ());\n\n    catch_unwind(move || left.append(&mut right)).unwrap_err();\n    assert_eq!(a.dropped(), 1);\n    assert_eq!(b.dropped(), 1); // should be 2 were it not for Rust issue #47949\n    assert_eq!(c.dropped(), 2);\n}\n\n#[test]\nfn test_append_ord_chaos() {\n    let mut map1 = BTreeMap::new();\n    map1.insert(Cyclic3::A, ());\n    map1.insert(Cyclic3::B, ());\n    let mut map2 = BTreeMap::new();\n    map2.insert(Cyclic3::A, ());\n    map2.insert(Cyclic3::B, ());\n    map2.insert(Cyclic3::C, ()); // lands first, before A\n    map2.insert(Cyclic3::B, ()); // lands first, before C\n    map1.check();\n    map2.check(); // keys are not unique but still strictly ascending\n    assert_eq!(map1.len(), 2);\n    assert_eq!(map2.len(), 4);\n    map1.append(&mut map2);\n    assert_eq!(map1.len(), 5);\n    assert_eq!(map2.len(), 0);\n    map1.check();\n    map2.check();\n}\n\nfn rand_data(len: usize) -> Vec<(u32, u32)> {\n    let mut rng = DeterministicRng::new();\n    Vec::from_iter((0..len).map(|_| (rng.next(), rng.next())))\n}\n\n#[test]\nfn test_split_off_empty_right() {\n    let mut data = rand_data(173);\n\n    let mut map = BTreeMap::from_iter(data.clone());\n    let right = map.split_off(&(data.iter().max().unwrap().0 + 1));\n    map.check();\n    right.check();\n\n    data.sort();\n    assert!(map.into_iter().eq(data));\n    assert!(right.into_iter().eq(None));\n}\n\n#[test]\nfn test_split_off_empty_left() {\n    let mut data = rand_data(314);\n\n    let mut map = BTreeMap::from_iter(data.clone());\n    let right = map.split_off(&data.iter().min().unwrap().0);\n    map.check();\n    right.check();\n\n    data.sort();\n    assert!(map.into_iter().eq(None));\n    assert!(right.into_iter().eq(data));\n}\n\n// In a tree with 3 levels, if all but a part of the first leaf node is split off,\n// make sure fix_top eliminates both top levels.\n#[test]\nfn test_split_off_tiny_left_height_2() {\n    let pairs = (0..MIN_INSERTS_HEIGHT_2).map(|i| (i, i));\n    let mut left: BTreeMap<_, _> = pairs.clone().collect();\n    let right = left.split_off(&1);\n    left.check();\n    right.check();\n    assert_eq!(left.len(), 1);\n    assert_eq!(right.len(), MIN_INSERTS_HEIGHT_2 - 1);\n    assert_eq!(*left.first_key_value().unwrap().0, 0);\n    assert_eq!(*right.first_key_value().unwrap().0, 1);\n}\n\n// In a tree with 3 levels, if only part of the last leaf node is split off,\n// make sure fix_top eliminates both top levels.\n#[test]\nfn test_split_off_tiny_right_height_2() {\n    let pairs = (0..MIN_INSERTS_HEIGHT_2).map(|i| (i, i));\n    let last = MIN_INSERTS_HEIGHT_2 - 1;\n    let mut left: BTreeMap<_, _> = pairs.clone().collect();\n    assert_eq!(*left.last_key_value().unwrap().0, last);\n    let right = left.split_off(&last);\n    left.check();\n    right.check();\n    assert_eq!(left.len(), MIN_INSERTS_HEIGHT_2 - 1);\n    assert_eq!(right.len(), 1);\n    assert_eq!(*left.last_key_value().unwrap().0, last - 1);\n    assert_eq!(*right.last_key_value().unwrap().0, last);\n}\n\n#[test]\nfn test_split_off_halfway() {\n    let mut rng = DeterministicRng::new();\n    for &len in &[NODE_CAPACITY, 25, 50, 75, 100] {\n        let mut data = Vec::from_iter((0..len).map(|_| (rng.next(), ())));\n        // Insertion in non-ascending order creates some variation in node length.\n        let mut map = BTreeMap::from_iter(data.iter().copied());\n        data.sort();\n        let small_keys = data.iter().take(len / 2).map(|kv| kv.0);\n        let large_keys = data.iter().skip(len / 2).map(|kv| kv.0);\n        let split_key = large_keys.clone().next().unwrap();\n        let right = map.split_off(&split_key);\n        map.check();\n        right.check();\n        assert!(map.keys().copied().eq(small_keys));\n        assert!(right.keys().copied().eq(large_keys));\n    }\n}\n\n#[test]\nfn test_split_off_large_random_sorted() {\n    // Miri is too slow\n    let mut data = if cfg!(miri) { rand_data(529) } else { rand_data(1529) };\n    // special case with maximum height.\n    data.sort();\n\n    let mut map = BTreeMap::from_iter(data.clone());\n    let key = data[data.len() / 2].0;\n    let right = map.split_off(&key);\n    map.check();\n    right.check();\n\n    assert!(map.into_iter().eq(data.clone().into_iter().filter(|x| x.0 < key)));\n    assert!(right.into_iter().eq(data.into_iter().filter(|x| x.0 >= key)));\n}\n\n#[test]\nfn test_into_iter_drop_leak_height_0() {\n    let a = CrashTestDummy::new(0);\n    let b = CrashTestDummy::new(1);\n    let c = CrashTestDummy::new(2);\n    let d = CrashTestDummy::new(3);\n    let e = CrashTestDummy::new(4);\n    let mut map = BTreeMap::new();\n    map.insert(\"a\", a.spawn(Panic::Never));\n    map.insert(\"b\", b.spawn(Panic::Never));\n    map.insert(\"c\", c.spawn(Panic::Never));\n    map.insert(\"d\", d.spawn(Panic::InDrop));\n    map.insert(\"e\", e.spawn(Panic::Never));\n\n    catch_unwind(move || drop(map.into_iter())).unwrap_err();\n\n    assert_eq!(a.dropped(), 1);\n    assert_eq!(b.dropped(), 1);\n    assert_eq!(c.dropped(), 1);\n    assert_eq!(d.dropped(), 1);\n    assert_eq!(e.dropped(), 1);\n}\n\n#[test]\nfn test_into_iter_drop_leak_height_1() {\n    let size = MIN_INSERTS_HEIGHT_1;\n    for panic_point in vec![0, 1, size - 2, size - 1] {\n        let dummies: Vec<_> = (0..size).map(|i| CrashTestDummy::new(i)).collect();\n        let map: BTreeMap<_, _> = (0..size)\n            .map(|i| {\n                let panic = if i == panic_point { Panic::InDrop } else { Panic::Never };\n                (dummies[i].spawn(Panic::Never), dummies[i].spawn(panic))\n            })\n            .collect();\n        catch_unwind(move || drop(map.into_iter())).unwrap_err();\n        for i in 0..size {\n            assert_eq!(dummies[i].dropped(), 2);\n        }\n    }\n}\n\n#[test]\nfn test_into_keys() {\n    let vec = vec![(1, 'a'), (2, 'b'), (3, 'c')];\n    let map: BTreeMap<_, _> = vec.into_iter().collect();\n    let keys: Vec<_> = map.into_keys().collect();\n\n    assert_eq!(keys.len(), 3);\n    assert!(keys.contains(&1));\n    assert!(keys.contains(&2));\n    assert!(keys.contains(&3));\n}\n\n#[test]\nfn test_into_values() {\n    let vec = vec![(1, 'a'), (2, 'b'), (3, 'c')];\n    let map: BTreeMap<_, _> = vec.into_iter().collect();\n    let values: Vec<_> = map.into_values().collect();\n\n    assert_eq!(values.len(), 3);\n    assert!(values.contains(&'a'));\n    assert!(values.contains(&'b'));\n    assert!(values.contains(&'c'));\n}\n\n#[test]\nfn test_insert_remove_intertwined() {\n    let loops = if cfg!(miri) { 100 } else { 1_000_000 };\n    let mut map = BTreeMap::new();\n    let mut i = 1;\n    let offset = 165; // somewhat arbitrarily chosen to cover some code paths\n    for _ in 0..loops {\n        i = (i + offset) & 0xFF;\n        map.insert(i, i);\n        map.remove(&(0xFF - i));\n    }\n    map.check();\n}\n\n#[test]\nfn test_insert_remove_intertwined_ord_chaos() {\n    let loops = if cfg!(miri) { 100 } else { 1_000_000 };\n    let gov = Governor::new();\n    let mut map = BTreeMap::new();\n    let mut i = 1;\n    let offset = 165; // more arbitrarily copied from above\n    for _ in 0..loops {\n        i = (i + offset) & 0xFF;\n        map.insert(Governed(i, &gov), ());\n        map.remove(&Governed(0xFF - i, &gov));\n        gov.flip();\n    }\n    map.check_invariants();\n}\nuse super::map::MIN_LEN;\nuse super::node::{marker, ForceResult::*, Handle, LeftOrRight::*, NodeRef};\n\nimpl<'a, K: 'a, V: 'a> Handle<NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal>, marker::KV> {\n    /// Removes a key-value pair from the tree, and returns that pair, as well as\n    /// the leaf edge corresponding to that former pair. It's possible this empties\n    /// a root node that is internal, which the caller should pop from the map\n    /// holding the tree. The caller should also decrement the map's length.\n    pub fn remove_kv_tracking<F: FnOnce()>(\n        self,\n        handle_emptied_internal_root: F,\n    ) -> ((K, V), Handle<NodeRef<marker::Mut<'a>, K, V, marker::Leaf>, marker::Edge>) {\n        match self.force() {\n            Leaf(node) => node.remove_leaf_kv(handle_emptied_internal_root),\n            Internal(node) => node.remove_internal_kv(handle_emptied_internal_root),\n        }\n    }\n}\n\nimpl<'a, K: 'a, V: 'a> Handle<NodeRef<marker::Mut<'a>, K, V, marker::Leaf>, marker::KV> {\n    fn remove_leaf_kv<F: FnOnce()>(\n        self,\n        handle_emptied_internal_root: F,\n    ) -> ((K, V), Handle<NodeRef<marker::Mut<'a>, K, V, marker::Leaf>, marker::Edge>) {\n        let (old_kv, mut pos) = self.remove();\n        let len = pos.reborrow().into_node().len();\n        if len < MIN_LEN {\n            let idx = pos.idx();\n            // We have to temporarily forget the child type, because there is no\n            // distinct node type for the immediate parents of a leaf.\n            let new_pos = match pos.into_node().forget_type().choose_parent_kv() {\n                Ok(Left(left_parent_kv)) => {\n                    debug_assert!(left_parent_kv.right_child_len() == MIN_LEN - 1);\n                    if left_parent_kv.can_merge() {\n                        left_parent_kv.merge_tracking_child_edge(Right(idx))\n                    } else {\n                        debug_assert!(left_parent_kv.left_child_len() > MIN_LEN);\n                        left_parent_kv.steal_left(idx)\n                    }\n                }\n                Ok(Right(right_parent_kv)) => {\n                    debug_assert!(right_parent_kv.left_child_len() == MIN_LEN - 1);\n                    if right_parent_kv.can_merge() {\n                        right_parent_kv.merge_tracking_child_edge(Left(idx))\n                    } else {\n                        debug_assert!(right_parent_kv.right_child_len() > MIN_LEN);\n                        right_parent_kv.steal_right(idx)\n                    }\n                }\n                Err(pos) => unsafe { Handle::new_edge(pos, idx) },\n            };\n            // SAFETY: `new_pos` is the leaf we started from or a sibling.\n            pos = unsafe { new_pos.cast_to_leaf_unchecked() };\n\n            // Only if we merged, the parent (if any) has shrunk, but skipping\n            // the following step otherwise does not pay off in benchmarks.\n            //\n            // SAFETY: We won't destroy or rearrange the leaf where `pos` is at\n            // by handling its parent recursively; at worst we will destroy or\n            // rearrange the parent through the grandparent, thus change the\n            // link to the parent inside the leaf.\n            if let Ok(parent) = unsafe { pos.reborrow_mut() }.into_node().ascend() {\n                if !parent.into_node().forget_type().fix_node_and_affected_ancestors() {\n                    handle_emptied_internal_root();\n                }\n            }\n        }\n        (old_kv, pos)\n    }\n}\n\nimpl<'a, K: 'a, V: 'a> Handle<NodeRef<marker::Mut<'a>, K, V, marker::Internal>, marker::KV> {\n    fn remove_internal_kv<F: FnOnce()>(\n        self,\n        handle_emptied_internal_root: F,\n    ) -> ((K, V), Handle<NodeRef<marker::Mut<'a>, K, V, marker::Leaf>, marker::Edge>) {\n        // Remove an adjacent KV from its leaf and then put it back in place of\n        // the element we were asked to remove. Prefer the left adjacent KV,\n        // for the reasons listed in `choose_parent_kv`.\n        let left_leaf_kv = self.left_edge().descend().last_leaf_edge().left_kv();\n        let left_leaf_kv = unsafe { left_leaf_kv.ok().unwrap_unchecked() };\n        let (left_kv, left_hole) = left_leaf_kv.remove_leaf_kv(handle_emptied_internal_root);\n\n        // The internal node may have been stolen from or merged. Go back right\n        // to find where the original KV ended up.\n        let mut internal = unsafe { left_hole.next_kv().ok().unwrap_unchecked() };\n        let old_kv = internal.replace_kv(left_kv.0, left_kv.1);\n        let pos = internal.next_leaf_edge();\n        (old_kv, pos)\n    }\n}\nuse core::cmp::Ordering;\nuse core::fmt::{self, Debug};\nuse core::iter::FusedIterator;\n\n/// Core of an iterator that merges the output of two strictly ascending iterators,\n/// for instance a union or a symmetric difference.\npub struct MergeIterInner<I: Iterator> {\n    a: I,\n    b: I,\n    peeked: Option<Peeked<I>>,\n}\n\n/// Benchmarks faster than wrapping both iterators in a Peekable,\n/// probably because we can afford to impose a FusedIterator bound.\n#[derive(Clone, Debug)]\nenum Peeked<I: Iterator> {\n    A(I::Item),\n    B(I::Item),\n}\n\nimpl<I: Iterator> Clone for MergeIterInner<I>\nwhere\n    I: Clone,\n    I::Item: Clone,\n{\n    fn clone(&self) -> Self {\n        Self { a: self.a.clone(), b: self.b.clone(), peeked: self.peeked.clone() }\n    }\n}\n\nimpl<I: Iterator> Debug for MergeIterInner<I>\nwhere\n    I: Debug,\n    I::Item: Debug,\n{\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"MergeIterInner\").field(&self.a).field(&self.b).field(&self.peeked).finish()\n    }\n}\n\nimpl<I: Iterator> MergeIterInner<I> {\n    /// Creates a new core for an iterator merging a pair of sources.\n    pub fn new(a: I, b: I) -> Self {\n        MergeIterInner { a, b, peeked: None }\n    }\n\n    /// Returns the next pair of items stemming from the pair of sources\n    /// being merged. If both returned options contain a value, that value\n    /// is equal and occurs in both sources. If one of the returned options\n    /// contains a value, that value doesn't occur in the other source (or\n    /// the sources are not strictly ascending). If neither returned option\n    /// contains a value, iteration has finished and subsequent calls will\n    /// return the same empty pair.\n    pub fn nexts<Cmp: Fn(&I::Item, &I::Item) -> Ordering>(\n        &mut self,\n        cmp: Cmp,\n    ) -> (Option<I::Item>, Option<I::Item>)\n    where\n        I: FusedIterator,\n    {\n        let mut a_next;\n        let mut b_next;\n        match self.peeked.take() {\n            Some(Peeked::A(next)) => {\n                a_next = Some(next);\n                b_next = self.b.next();\n            }\n            Some(Peeked::B(next)) => {\n                b_next = Some(next);\n                a_next = self.a.next();\n            }\n            None => {\n                a_next = self.a.next();\n                b_next = self.b.next();\n            }\n        }\n        if let (Some(ref a1), Some(ref b1)) = (&a_next, &b_next) {\n            match cmp(a1, b1) {\n                Ordering::Less => self.peeked = b_next.take().map(Peeked::B),\n                Ordering::Greater => self.peeked = a_next.take().map(Peeked::A),\n                Ordering::Equal => (),\n            }\n        }\n        (a_next, b_next)\n    }\n\n    /// Returns a pair of upper bounds for the `size_hint` of the final iterator.\n    pub fn lens(&self) -> (usize, usize)\n    where\n        I: ExactSizeIterator,\n    {\n        match self.peeked {\n            Some(Peeked::A(_)) => (1 + self.a.len(), self.b.len()),\n            Some(Peeked::B(_)) => (self.a.len(), 1 + self.b.len()),\n            _ => (self.a.len(), self.b.len()),\n        }\n    }\n}\n// This is an attempt at an implementation following the ideal\n//\n// ```\n// struct BTreeMap<K, V> {\n//     height: usize,\n//     root: Option<Box<Node<K, V, height>>>\n// }\n//\n// struct Node<K, V, height: usize> {\n//     keys: [K; 2 * B - 1],\n//     vals: [V; 2 * B - 1],\n//     edges: [if height > 0 { Box<Node<K, V, height - 1>> } else { () }; 2 * B],\n//     parent: Option<(NonNull<Node<K, V, height + 1>>, u16)>,\n//     len: u16,\n// }\n// ```\n//\n// Since Rust doesn't actually have dependent types and polymorphic recursion,\n// we make do with lots of unsafety.\n\n// A major goal of this module is to avoid complexity by treating the tree as a generic (if\n// weirdly shaped) container and avoiding dealing with most of the B-Tree invariants. As such,\n// this module doesn't care whether the entries are sorted, which nodes can be underfull, or\n// even what underfull means. However, we do rely on a few invariants:\n//\n// - Trees must have uniform depth/height. This means that every path down to a leaf from a\n//   given node has exactly the same length.\n// - A node of length `n` has `n` keys, `n` values, and `n + 1` edges.\n//   This implies that even an empty node has at least one edge.\n//   For a leaf node, \"having an edge\" only means we can identify a position in the node,\n//   since leaf edges are empty and need no data representation. In an internal node,\n//   an edge both identifies a position and contains a pointer to a child node.\n\nuse core::marker::PhantomData;\nuse core::mem::{self, MaybeUninit};\nuse core::ptr::{self, NonNull};\nuse core::slice::SliceIndex;\n\nuse crate::alloc::{Allocator, Global, Layout};\nuse crate::boxed::Box;\n\nconst B: usize = 6;\npub const CAPACITY: usize = 2 * B - 1;\npub const MIN_LEN_AFTER_SPLIT: usize = B - 1;\nconst KV_IDX_CENTER: usize = B - 1;\nconst EDGE_IDX_LEFT_OF_CENTER: usize = B - 1;\nconst EDGE_IDX_RIGHT_OF_CENTER: usize = B;\n\n/// The underlying representation of leaf nodes and part of the representation of internal nodes.\nstruct LeafNode<K, V> {\n    /// We want to be covariant in `K` and `V`.\n    parent: Option<NonNull<InternalNode<K, V>>>,\n\n    /// This node's index into the parent node's `edges` array.\n    /// `*node.parent.edges[node.parent_idx]` should be the same thing as `node`.\n    /// This is only guaranteed to be initialized when `parent` is non-null.\n    parent_idx: MaybeUninit<u16>,\n\n    /// The number of keys and values this node stores.\n    len: u16,\n\n    /// The arrays storing the actual data of the node. Only the first `len` elements of each\n    /// array are initialized and valid.\n    keys: [MaybeUninit<K>; CAPACITY],\n    vals: [MaybeUninit<V>; CAPACITY],\n}\n\nimpl<K, V> LeafNode<K, V> {\n    /// Initializes a new `LeafNode` in-place.\n    unsafe fn init(this: *mut Self) {\n        // As a general policy, we leave fields uninitialized if they can be, as this should\n        // be both slightly faster and easier to track in Valgrind.\n        unsafe {\n            // parent_idx, keys, and vals are all MaybeUninit\n            ptr::addr_of_mut!((*this).parent).write(None);\n            ptr::addr_of_mut!((*this).len).write(0);\n        }\n    }\n\n    /// Creates a new boxed `LeafNode`.\n    fn new() -> Box<Self> {\n        unsafe {\n            let mut leaf = Box::new_uninit();\n            LeafNode::init(leaf.as_mut_ptr());\n            leaf.assume_init()\n        }\n    }\n}\n\n/// The underlying representation of internal nodes. As with `LeafNode`s, these should be hidden\n/// behind `BoxedNode`s to prevent dropping uninitialized keys and values. Any pointer to an\n/// `InternalNode` can be directly casted to a pointer to the underlying `LeafNode` portion of the\n/// node, allowing code to act on leaf and internal nodes generically without having to even check\n/// which of the two a pointer is pointing at. This property is enabled by the use of `repr(C)`.\n#[repr(C)]\n// gdb_providers.py uses this type name for introspection.\nstruct InternalNode<K, V> {\n    data: LeafNode<K, V>,\n\n    /// The pointers to the children of this node. `len + 1` of these are considered\n    /// initialized and valid, except that near the end, while the tree is held\n    /// through borrow type `Dying`, some of these pointers are dangling.\n    edges: [MaybeUninit<BoxedNode<K, V>>; 2 * B],\n}\n\nimpl<K, V> InternalNode<K, V> {\n    /// Creates a new boxed `InternalNode`.\n    ///\n    /// # Safety\n    /// An invariant of internal nodes is that they have at least one\n    /// initialized and valid edge. This function does not set up\n    /// such an edge.\n    unsafe fn new() -> Box<Self> {\n        unsafe {\n            let mut node = Box::<Self>::new_uninit();\n            // We only need to initialize the data; the edges are MaybeUninit.\n            LeafNode::init(ptr::addr_of_mut!((*node.as_mut_ptr()).data));\n            node.assume_init()\n        }\n    }\n}\n\n/// A managed, non-null pointer to a node. This is either an owned pointer to\n/// `LeafNode<K, V>` or an owned pointer to `InternalNode<K, V>`.\n///\n/// However, `BoxedNode` contains no information as to which of the two types\n/// of nodes it actually contains, and, partially due to this lack of information,\n/// is not a separate type and has no destructor.\ntype BoxedNode<K, V> = NonNull<LeafNode<K, V>>;\n\n// N.B. `NodeRef` is always covariant in `K` and `V`, even when the `BorrowType`\n// is `Mut`. This is technically wrong, but cannot result in any unsafety due to\n// internal use of `NodeRef` because we stay completely generic over `K` and `V`.\n// However, whenever a public type wraps `NodeRef`, make sure that it has the\n// correct variance.\n///\n/// A reference to a node.\n///\n/// This type has a number of parameters that controls how it acts:\n/// - `BorrowType`: A dummy type that describes the kind of borrow and carries a lifetime.\n///    - When this is `Immut<'a>`, the `NodeRef` acts roughly like `&'a Node`.\n///    - When this is `ValMut<'a>`, the `NodeRef` acts roughly like `&'a Node`\n///      with respect to keys and tree structure, but also allows many\n///      mutable references to values throughout the tree to coexist.\n///    - When this is `Mut<'a>`, the `NodeRef` acts roughly like `&'a mut Node`,\n///      although insert methods allow a mutable pointer to a value to coexist.\n///    - When this is `Owned`, the `NodeRef` acts roughly like `Box<Node>`,\n///      but does not have a destructor, and must be cleaned up manually.\n///    - When this is `Dying`, the `NodeRef` still acts roughly like `Box<Node>`,\n///      but has methods to destroy the tree bit by bit, and ordinary methods,\n///      while not marked as unsafe to call, can invoke UB if called incorrectly.\n///   Since any `NodeRef` allows navigating through the tree, `BorrowType`\n///   effectively applies to the entire tree, not just to the node itself.\n/// - `K` and `V`: These are the types of keys and values stored in the nodes.\n/// - `Type`: This can be `Leaf`, `Internal`, or `LeafOrInternal`. When this is\n///   `Leaf`, the `NodeRef` points to a leaf node, when this is `Internal` the\n///   `NodeRef` points to an internal node, and when this is `LeafOrInternal` the\n///   `NodeRef` could be pointing to either type of node.\n///   `Type` is named `NodeType` when used outside `NodeRef`.\n///\n/// Both `BorrowType` and `NodeType` restrict what methods we implement, to\n/// exploit static type safety. There are limitations in the way we can apply\n/// such restrictions:\n/// - For each type parameter, we can only define a method either generically\n///   or for one particular type. For example, we cannot define a method like\n///   `into_kv` generically for all `BorrowType`, or once for all types that\n///   carry a lifetime, because we want it to return `&'a` references.\n///   Therefore, we define it only for the least powerful type `Immut<'a>`.\n/// - We cannot get implicit coercion from say `Mut<'a>` to `Immut<'a>`.\n///   Therefore, we have to explicitly call `reborrow` on a more powerfull\n///   `NodeRef` in order to reach a method like `into_kv`.\n///\n/// All methods on `NodeRef` that return some kind of reference, either:\n/// - Take `self` by value, and return the lifetime carried by `BorrowType`.\n///   Sometimes, to invoke such a method, we need to call `reborrow_mut`.\n/// - Take `self` by reference, and (implicitly) return that reference's\n///   lifetime, instead of the lifetime carried by `BorrowType`. That way,\n///   the borrow checker guarantees that the `NodeRef` remains borrowed as long\n///   as the returned reference is used.\n///   The methods supporting insert bend this rule by returning a raw pointer,\n///   i.e., a reference without any lifetime.\npub struct NodeRef<BorrowType, K, V, Type> {\n    /// The number of levels that the node and the level of leaves are apart, a\n    /// constant of the node that cannot be entirely described by `Type`, and that\n    /// the node itself does not store. We only need to store the height of the root\n    /// node, and derive every other node's height from it.\n    /// Must be zero if `Type` is `Leaf` and non-zero if `Type` is `Internal`.\n    height: usize,\n    /// The pointer to the leaf or internal node. The definition of `InternalNode`\n    /// ensures that the pointer is valid either way.\n    node: NonNull<LeafNode<K, V>>,\n    _marker: PhantomData<(BorrowType, Type)>,\n}\n\n/// The root node of an owned tree.\n///\n/// Note that this does not have a destructor, and must be cleaned up manually.\npub type Root<K, V> = NodeRef<marker::Owned, K, V, marker::LeafOrInternal>;\n\nimpl<'a, K: 'a, V: 'a, Type> Copy for NodeRef<marker::Immut<'a>, K, V, Type> {}\nimpl<'a, K: 'a, V: 'a, Type> Clone for NodeRef<marker::Immut<'a>, K, V, Type> {\n    fn clone(&self) -> Self {\n        *self\n    }\n}\n\nunsafe impl<BorrowType, K: Sync, V: Sync, Type> Sync for NodeRef<BorrowType, K, V, Type> {}\n\nunsafe impl<'a, K: Sync + 'a, V: Sync + 'a, Type> Send for NodeRef<marker::Immut<'a>, K, V, Type> {}\nunsafe impl<'a, K: Send + 'a, V: Send + 'a, Type> Send for NodeRef<marker::Mut<'a>, K, V, Type> {}\nunsafe impl<'a, K: Send + 'a, V: Send + 'a, Type> Send for NodeRef<marker::ValMut<'a>, K, V, Type> {}\nunsafe impl<K: Send, V: Send, Type> Send for NodeRef<marker::Owned, K, V, Type> {}\nunsafe impl<K: Send, V: Send, Type> Send for NodeRef<marker::Dying, K, V, Type> {}\n\nimpl<K, V> NodeRef<marker::Owned, K, V, marker::Leaf> {\n    fn new_leaf() -> Self {\n        Self::from_new_leaf(LeafNode::new())\n    }\n\n    fn from_new_leaf(leaf: Box<LeafNode<K, V>>) -> Self {\n        NodeRef { height: 0, node: NonNull::from(Box::leak(leaf)), _marker: PhantomData }\n    }\n}\n\nimpl<K, V> NodeRef<marker::Owned, K, V, marker::Internal> {\n    fn new_internal(child: Root<K, V>) -> Self {\n        let mut new_node = unsafe { InternalNode::new() };\n        new_node.edges[0].write(child.node);\n        unsafe { NodeRef::from_new_internal(new_node, child.height + 1) }\n    }\n\n    /// # Safety\n    /// `height` must not be zero.\n    unsafe fn from_new_internal(internal: Box<InternalNode<K, V>>, height: usize) -> Self {\n        debug_assert!(height > 0);\n        let node = NonNull::from(Box::leak(internal)).cast();\n        let mut this = NodeRef { height, node, _marker: PhantomData };\n        this.borrow_mut().correct_all_childrens_parent_links();\n        this\n    }\n}\n\nimpl<BorrowType, K, V> NodeRef<BorrowType, K, V, marker::Internal> {\n    /// Unpack a node reference that was packed as `NodeRef::parent`.\n    fn from_internal(node: NonNull<InternalNode<K, V>>, height: usize) -> Self {\n        debug_assert!(height > 0);\n        NodeRef { height, node: node.cast(), _marker: PhantomData }\n    }\n}\n\nimpl<BorrowType, K, V> NodeRef<BorrowType, K, V, marker::Internal> {\n    /// Exposes the data of an internal node.\n    ///\n    /// Returns a raw ptr to avoid invalidating other references to this node.\n    fn as_internal_ptr(this: &Self) -> *mut InternalNode<K, V> {\n        // SAFETY: the static node type is `Internal`.\n        this.node.as_ptr() as *mut InternalNode<K, V>\n    }\n}\n\nimpl<'a, K, V> NodeRef<marker::Mut<'a>, K, V, marker::Internal> {\n    /// Borrows exclusive access to the data of an internal node.\n    fn as_internal_mut(&mut self) -> &mut InternalNode<K, V> {\n        let ptr = Self::as_internal_ptr(self);\n        unsafe { &mut *ptr }\n    }\n}\n\nimpl<BorrowType, K, V, Type> NodeRef<BorrowType, K, V, Type> {\n    /// Finds the length of the node. This is the number of keys or values.\n    /// The number of edges is `len() + 1`.\n    /// Note that, despite being safe, calling this function can have the side effect\n    /// of invalidating mutable references that unsafe code has created.\n    pub fn len(&self) -> usize {\n        // Crucially, we only access the `len` field here. If BorrowType is marker::ValMut,\n        // there might be outstanding mutable references to values that we must not invalidate.\n        unsafe { usize::from((*Self::as_leaf_ptr(self)).len) }\n    }\n\n    /// Returns the number of levels that the node and leaves are apart. Zero\n    /// height means the node is a leaf itself. If you picture trees with the\n    /// root on top, the number says at which elevation the node appears.\n    /// If you picture trees with leaves on top, the number says how high\n    /// the tree extends above the node.\n    pub fn height(&self) -> usize {\n        self.height\n    }\n\n    /// Temporarily takes out another, immutable reference to the same node.\n    pub fn reborrow(&self) -> NodeRef<marker::Immut<'_>, K, V, Type> {\n        NodeRef { height: self.height, node: self.node, _marker: PhantomData }\n    }\n\n    /// Exposes the leaf portion of any leaf or internal node.\n    ///\n    /// Returns a raw ptr to avoid invalidating other references to this node.\n    fn as_leaf_ptr(this: &Self) -> *mut LeafNode<K, V> {\n        // The node must be valid for at least the LeafNode portion.\n        // This is not a reference in the NodeRef type because we don't know if\n        // it should be unique or shared.\n        this.node.as_ptr()\n    }\n}\n\nimpl<BorrowType: marker::BorrowType, K, V, Type> NodeRef<BorrowType, K, V, Type> {\n    /// Finds the parent of the current node. Returns `Ok(handle)` if the current\n    /// node actually has a parent, where `handle` points to the edge of the parent\n    /// that points to the current node. Returns `Err(self)` if the current node has\n    /// no parent, giving back the original `NodeRef`.\n    ///\n    /// The method name assumes you picture trees with the root node on top.\n    ///\n    /// `edge.descend().ascend().unwrap()` and `node.ascend().unwrap().descend()` should\n    /// both, upon success, do nothing.\n    pub fn ascend(\n        self,\n    ) -> Result<Handle<NodeRef<BorrowType, K, V, marker::Internal>, marker::Edge>, Self> {\n        assert!(BorrowType::PERMITS_TRAVERSAL);\n        // We need to use raw pointers to nodes because, if BorrowType is marker::ValMut,\n        // there might be outstanding mutable references to values that we must not invalidate.\n        let leaf_ptr: *const _ = Self::as_leaf_ptr(&self);\n        unsafe { (*leaf_ptr).parent }\n            .as_ref()\n            .map(|parent| Handle {\n                node: NodeRef::from_internal(*parent, self.height + 1),\n                idx: unsafe { usize::from((*leaf_ptr).parent_idx.assume_init()) },\n                _marker: PhantomData,\n            })\n            .ok_or(self)\n    }\n\n    pub fn first_edge(self) -> Handle<Self, marker::Edge> {\n        unsafe { Handle::new_edge(self, 0) }\n    }\n\n    pub fn last_edge(self) -> Handle<Self, marker::Edge> {\n        let len = self.len();\n        unsafe { Handle::new_edge(self, len) }\n    }\n\n    /// Note that `self` must be nonempty.\n    pub fn first_kv(self) -> Handle<Self, marker::KV> {\n        let len = self.len();\n        assert!(len > 0);\n        unsafe { Handle::new_kv(self, 0) }\n    }\n\n    /// Note that `self` must be nonempty.\n    pub fn last_kv(self) -> Handle<Self, marker::KV> {\n        let len = self.len();\n        assert!(len > 0);\n        unsafe { Handle::new_kv(self, len - 1) }\n    }\n}\n\nimpl<BorrowType, K, V, Type> NodeRef<BorrowType, K, V, Type> {\n    /// Could be a public implementation of PartialEq, but only used in this module.\n    fn eq(&self, other: &Self) -> bool {\n        let Self { node, height, _marker } = self;\n        if node.eq(&other.node) {\n            debug_assert_eq!(*height, other.height);\n            true\n        } else {\n            false\n        }\n    }\n}\n\nimpl<'a, K: 'a, V: 'a, Type> NodeRef<marker::Immut<'a>, K, V, Type> {\n    /// Exposes the leaf portion of any leaf or internal node in an immutable tree.\n    fn into_leaf(self) -> &'a LeafNode<K, V> {\n        let ptr = Self::as_leaf_ptr(&self);\n        // SAFETY: there can be no mutable references into this tree borrowed as `Immut`.\n        unsafe { &*ptr }\n    }\n\n    /// Borrows a view into the keys stored in the node.\n    pub fn keys(&self) -> &[K] {\n        let leaf = self.into_leaf();\n        unsafe {\n            MaybeUninit::slice_assume_init_ref(leaf.keys.get_unchecked(..usize::from(leaf.len)))\n        }\n    }\n}\n\nimpl<K, V> NodeRef<marker::Dying, K, V, marker::LeafOrInternal> {\n    /// Similar to `ascend`, gets a reference to a node's parent node, but also\n    /// deallocates the current node in the process. This is unsafe because the\n    /// current node will still be accessible despite being deallocated.\n    pub unsafe fn deallocate_and_ascend(\n        self,\n    ) -> Option<Handle<NodeRef<marker::Dying, K, V, marker::Internal>, marker::Edge>> {\n        let height = self.height;\n        let node = self.node;\n        let ret = self.ascend().ok();\n        unsafe {\n            Global.deallocate(\n                node.cast(),\n                if height > 0 {\n                    Layout::new::<InternalNode<K, V>>()\n                } else {\n                    Layout::new::<LeafNode<K, V>>()\n                },\n            );\n        }\n        ret\n    }\n}\n\nimpl<'a, K, V, Type> NodeRef<marker::Mut<'a>, K, V, Type> {\n    /// Temporarily takes out another, mutable reference to the same node. Beware, as\n    /// this method is very dangerous, doubly so since it may not immediately appear\n    /// dangerous.\n    ///\n    /// Because mutable pointers can roam anywhere around the tree, the returned\n    /// pointer can easily be used to make the original pointer dangling, out of\n    /// bounds, or invalid under stacked borrow rules.\n    // FIXME(@gereeter) consider adding yet another type parameter to `NodeRef`\n    // that restricts the use of navigation methods on reborrowed pointers,\n    // preventing this unsafety.\n    unsafe fn reborrow_mut(&mut self) -> NodeRef<marker::Mut<'_>, K, V, Type> {\n        NodeRef { height: self.height, node: self.node, _marker: PhantomData }\n    }\n\n    /// Borrows exclusive access to the leaf portion of any leaf or internal node.\n    fn as_leaf_mut(&mut self) -> &mut LeafNode<K, V> {\n        let ptr = Self::as_leaf_ptr(self);\n        // SAFETY: we have exclusive access to the entire node.\n        unsafe { &mut *ptr }\n    }\n\n    /// Offers exclusive access to the leaf portion of any leaf or internal node.\n    fn into_leaf_mut(mut self) -> &'a mut LeafNode<K, V> {\n        let ptr = Self::as_leaf_ptr(&mut self);\n        // SAFETY: we have exclusive access to the entire node.\n        unsafe { &mut *ptr }\n    }\n}\n\nimpl<'a, K: 'a, V: 'a, Type> NodeRef<marker::Mut<'a>, K, V, Type> {\n    /// Borrows exclusive access to an element of the key storage area.\n    ///\n    /// # Safety\n    /// `index` is in bounds of 0..CAPACITY\n    unsafe fn key_area_mut<I, Output: ?Sized>(&mut self, index: I) -> &mut Output\n    where\n        I: SliceIndex<[MaybeUninit<K>], Output = Output>,\n    {\n        // SAFETY: the caller will not be able to call further methods on self\n        // until the key slice reference is dropped, as we have unique access\n        // for the lifetime of the borrow.\n        unsafe { self.as_leaf_mut().keys.as_mut_slice().get_unchecked_mut(index) }\n    }\n\n    /// Borrows exclusive access to an element or slice of the node's value storage area.\n    ///\n    /// # Safety\n    /// `index` is in bounds of 0..CAPACITY\n    unsafe fn val_area_mut<I, Output: ?Sized>(&mut self, index: I) -> &mut Output\n    where\n        I: SliceIndex<[MaybeUninit<V>], Output = Output>,\n    {\n        // SAFETY: the caller will not be able to call further methods on self\n        // until the value slice reference is dropped, as we have unique access\n        // for the lifetime of the borrow.\n        unsafe { self.as_leaf_mut().vals.as_mut_slice().get_unchecked_mut(index) }\n    }\n}\n\nimpl<'a, K: 'a, V: 'a> NodeRef<marker::Mut<'a>, K, V, marker::Internal> {\n    /// Borrows exclusive access to an element or slice of the node's storage area for edge contents.\n    ///\n    /// # Safety\n    /// `index` is in bounds of 0..CAPACITY + 1\n    unsafe fn edge_area_mut<I, Output: ?Sized>(&mut self, index: I) -> &mut Output\n    where\n        I: SliceIndex<[MaybeUninit<BoxedNode<K, V>>], Output = Output>,\n    {\n        // SAFETY: the caller will not be able to call further methods on self\n        // until the edge slice reference is dropped, as we have unique access\n        // for the lifetime of the borrow.\n        unsafe { self.as_internal_mut().edges.as_mut_slice().get_unchecked_mut(index) }\n    }\n}\n\nimpl<'a, K, V, Type> NodeRef<marker::ValMut<'a>, K, V, Type> {\n    /// # Safety\n    /// - The node has more than `idx` initialized elements.\n    unsafe fn into_key_val_mut_at(mut self, idx: usize) -> (&'a K, &'a mut V) {\n        // We only create a reference to the one element we are interested in,\n        // to avoid aliasing with outstanding references to other elements,\n        // in particular, those returned to the caller in earlier iterations.\n        let leaf = Self::as_leaf_ptr(&mut self);\n        let keys = unsafe { ptr::addr_of!((*leaf).keys) };\n        let vals = unsafe { ptr::addr_of_mut!((*leaf).vals) };\n        // We must coerce to unsized array pointers because of Rust issue #74679.\n        let keys: *const [_] = keys;\n        let vals: *mut [_] = vals;\n        let key = unsafe { (&*keys.get_unchecked(idx)).assume_init_ref() };\n        let val = unsafe { (&mut *vals.get_unchecked_mut(idx)).assume_init_mut() };\n        (key, val)\n    }\n}\n\nimpl<'a, K: 'a, V: 'a, Type> NodeRef<marker::Mut<'a>, K, V, Type> {\n    /// Borrows exclusive access to the length of the node.\n    pub fn len_mut(&mut self) -> &mut u16 {\n        &mut self.as_leaf_mut().len\n    }\n}\n\nimpl<'a, K, V> NodeRef<marker::Mut<'a>, K, V, marker::Internal> {\n    /// # Safety\n    /// Every item returned by `range` is a valid edge index for the node.\n    unsafe fn correct_childrens_parent_links<R: Iterator<Item = usize>>(&mut self, range: R) {\n        for i in range {\n            debug_assert!(i <= self.len());\n            unsafe { Handle::new_edge(self.reborrow_mut(), i) }.correct_parent_link();\n        }\n    }\n\n    fn correct_all_childrens_parent_links(&mut self) {\n        let len = self.len();\n        unsafe { self.correct_childrens_parent_links(0..=len) };\n    }\n}\n\nimpl<'a, K: 'a, V: 'a> NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal> {\n    /// Sets the node's link to its parent edge,\n    /// without invalidating other references to the node.\n    fn set_parent_link(&mut self, parent: NonNull<InternalNode<K, V>>, parent_idx: usize) {\n        let leaf = Self::as_leaf_ptr(self);\n        unsafe { (*leaf).parent = Some(parent) };\n        unsafe { (*leaf).parent_idx.write(parent_idx as u16) };\n    }\n}\n\nimpl<K, V> NodeRef<marker::Owned, K, V, marker::LeafOrInternal> {\n    /// Clears the root's link to its parent edge.\n    fn clear_parent_link(&mut self) {\n        let mut root_node = self.borrow_mut();\n        let leaf = root_node.as_leaf_mut();\n        leaf.parent = None;\n    }\n}\n\nimpl<K, V> NodeRef<marker::Owned, K, V, marker::LeafOrInternal> {\n    /// Returns a new owned tree, with its own root node that is initially empty.\n    pub fn new() -> Self {\n        NodeRef::new_leaf().forget_type()\n    }\n\n    /// Adds a new internal node with a single edge pointing to the previous root node,\n    /// make that new node the root node, and return it. This increases the height by 1\n    /// and is the opposite of `pop_internal_level`.\n    pub fn push_internal_level(&mut self) -> NodeRef<marker::Mut<'_>, K, V, marker::Internal> {\n        super::mem::take_mut(self, |old_root| NodeRef::new_internal(old_root).forget_type());\n\n        // `self.borrow_mut()`, except that we just forgot we're internal now:\n        NodeRef { height: self.height, node: self.node, _marker: PhantomData }\n    }\n\n    /// Removes the internal root node, using its first child as the new root node.\n    /// As it is intended only to be called when the root node has only one child,\n    /// no cleanup is done on any of the keys, values and other children.\n    /// This decreases the height by 1 and is the opposite of `push_internal_level`.\n    ///\n    /// Requires exclusive access to the `Root` object but not to the root node;\n    /// it will not invalidate other handles or references to the root node.\n    ///\n    /// Panics if there is no internal level, i.e., if the root node is a leaf.\n    pub fn pop_internal_level(&mut self) {\n        assert!(self.height > 0);\n\n        let top = self.node;\n\n        // SAFETY: we asserted to be internal.\n        let internal_self = unsafe { self.borrow_mut().cast_to_internal_unchecked() };\n        // SAFETY: we borrowed `self` exclusively and its borrow type is exclusive.\n        let internal_node = unsafe { &mut *NodeRef::as_internal_ptr(&internal_self) };\n        // SAFETY: the first edge is always initialized.\n        self.node = unsafe { internal_node.edges[0].assume_init_read() };\n        self.height -= 1;\n        self.clear_parent_link();\n\n        unsafe {\n            Global.deallocate(top.cast(), Layout::new::<InternalNode<K, V>>());\n        }\n    }\n}\n\nimpl<K, V, Type> NodeRef<marker::Owned, K, V, Type> {\n    /// Mutably borrows the owned root node. Unlike `reborrow_mut`, this is safe\n    /// because the return value cannot be used to destroy the root, and there\n    /// cannot be other references to the tree.\n    pub fn borrow_mut(&mut self) -> NodeRef<marker::Mut<'_>, K, V, Type> {\n        NodeRef { height: self.height, node: self.node, _marker: PhantomData }\n    }\n\n    /// Slightly mutably borrows the owned root node.\n    pub fn borrow_valmut(&mut self) -> NodeRef<marker::ValMut<'_>, K, V, Type> {\n        NodeRef { height: self.height, node: self.node, _marker: PhantomData }\n    }\n\n    /// Irreversibly transitions to a reference that permits traversal and offers\n    /// destructive methods and little else.\n    pub fn into_dying(self) -> NodeRef<marker::Dying, K, V, Type> {\n        NodeRef { height: self.height, node: self.node, _marker: PhantomData }\n    }\n}\n\nimpl<'a, K: 'a, V: 'a> NodeRef<marker::Mut<'a>, K, V, marker::Leaf> {\n    /// Adds a key-value pair to the end of the node.\n    pub fn push(&mut self, key: K, val: V) {\n        let len = self.len_mut();\n        let idx = usize::from(*len);\n        assert!(idx < CAPACITY);\n        *len += 1;\n        unsafe {\n            self.key_area_mut(idx).write(key);\n            self.val_area_mut(idx).write(val);\n        }\n    }\n}\n\nimpl<'a, K: 'a, V: 'a> NodeRef<marker::Mut<'a>, K, V, marker::Internal> {\n    /// Adds a key-value pair, and an edge to go to the right of that pair,\n    /// to the end of the node.\n    pub fn push(&mut self, key: K, val: V, edge: Root<K, V>) {\n        assert!(edge.height == self.height - 1);\n\n        let len = self.len_mut();\n        let idx = usize::from(*len);\n        assert!(idx < CAPACITY);\n        *len += 1;\n        unsafe {\n            self.key_area_mut(idx).write(key);\n            self.val_area_mut(idx).write(val);\n            self.edge_area_mut(idx + 1).write(edge.node);\n            Handle::new_edge(self.reborrow_mut(), idx + 1).correct_parent_link();\n        }\n    }\n}\n\nimpl<BorrowType, K, V> NodeRef<BorrowType, K, V, marker::Leaf> {\n    /// Removes any static information asserting that this node is a `Leaf` node.\n    pub fn forget_type(self) -> NodeRef<BorrowType, K, V, marker::LeafOrInternal> {\n        NodeRef { height: self.height, node: self.node, _marker: PhantomData }\n    }\n}\n\nimpl<BorrowType, K, V> NodeRef<BorrowType, K, V, marker::Internal> {\n    /// Removes any static information asserting that this node is an `Internal` node.\n    pub fn forget_type(self) -> NodeRef<BorrowType, K, V, marker::LeafOrInternal> {\n        NodeRef { height: self.height, node: self.node, _marker: PhantomData }\n    }\n}\n\nimpl<BorrowType, K, V> NodeRef<BorrowType, K, V, marker::LeafOrInternal> {\n    /// Checks whether a node is an `Internal` node or a `Leaf` node.\n    pub fn force(\n        self,\n    ) -> ForceResult<\n        NodeRef<BorrowType, K, V, marker::Leaf>,\n        NodeRef<BorrowType, K, V, marker::Internal>,\n    > {\n        if self.height == 0 {\n            ForceResult::Leaf(NodeRef {\n                height: self.height,\n                node: self.node,\n                _marker: PhantomData,\n            })\n        } else {\n            ForceResult::Internal(NodeRef {\n                height: self.height,\n                node: self.node,\n                _marker: PhantomData,\n            })\n        }\n    }\n}\n\nimpl<'a, K, V> NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal> {\n    /// Unsafely asserts to the compiler the static information that this node is a `Leaf`.\n    unsafe fn cast_to_leaf_unchecked(self) -> NodeRef<marker::Mut<'a>, K, V, marker::Leaf> {\n        debug_assert!(self.height == 0);\n        NodeRef { height: self.height, node: self.node, _marker: PhantomData }\n    }\n\n    /// Unsafely asserts to the compiler the static information that this node is an `Internal`.\n    unsafe fn cast_to_internal_unchecked(self) -> NodeRef<marker::Mut<'a>, K, V, marker::Internal> {\n        debug_assert!(self.height > 0);\n        NodeRef { height: self.height, node: self.node, _marker: PhantomData }\n    }\n}\n\n/// A reference to a specific key-value pair or edge within a node. The `Node` parameter\n/// must be a `NodeRef`, while the `Type` can either be `KV` (signifying a handle on a key-value\n/// pair) or `Edge` (signifying a handle on an edge).\n///\n/// Note that even `Leaf` nodes can have `Edge` handles. Instead of representing a pointer to\n/// a child node, these represent the spaces where child pointers would go between the key-value\n/// pairs. For example, in a node with length 2, there would be 3 possible edge locations - one\n/// to the left of the node, one between the two pairs, and one at the right of the node.\npub struct Handle<Node, Type> {\n    node: Node,\n    idx: usize,\n    _marker: PhantomData<Type>,\n}\n\nimpl<Node: Copy, Type> Copy for Handle<Node, Type> {}\n// We don't need the full generality of `#[derive(Clone)]`, as the only time `Node` will be\n// `Clone`able is when it is an immutable reference and therefore `Copy`.\nimpl<Node: Copy, Type> Clone for Handle<Node, Type> {\n    fn clone(&self) -> Self {\n        *self\n    }\n}\n\nimpl<Node, Type> Handle<Node, Type> {\n    /// Retrieves the node that contains the edge or key-value pair this handle points to.\n    pub fn into_node(self) -> Node {\n        self.node\n    }\n\n    /// Returns the position of this handle in the node.\n    pub fn idx(&self) -> usize {\n        self.idx\n    }\n}\n\nimpl<BorrowType, K, V, NodeType> Handle<NodeRef<BorrowType, K, V, NodeType>, marker::KV> {\n    /// Creates a new handle to a key-value pair in `node`.\n    /// Unsafe because the caller must ensure that `idx < node.len()`.\n    pub unsafe fn new_kv(node: NodeRef<BorrowType, K, V, NodeType>, idx: usize) -> Self {\n        debug_assert!(idx < node.len());\n\n        Handle { node, idx, _marker: PhantomData }\n    }\n\n    pub fn left_edge(self) -> Handle<NodeRef<BorrowType, K, V, NodeType>, marker::Edge> {\n        unsafe { Handle::new_edge(self.node, self.idx) }\n    }\n\n    pub fn right_edge(self) -> Handle<NodeRef<BorrowType, K, V, NodeType>, marker::Edge> {\n        unsafe { Handle::new_edge(self.node, self.idx + 1) }\n    }\n}\n\nimpl<BorrowType, K, V, NodeType, HandleType> PartialEq\n    for Handle<NodeRef<BorrowType, K, V, NodeType>, HandleType>\n{\n    fn eq(&self, other: &Self) -> bool {\n        let Self { node, idx, _marker } = self;\n        node.eq(&other.node) && *idx == other.idx\n    }\n}\n\nimpl<BorrowType, K, V, NodeType, HandleType>\n    Handle<NodeRef<BorrowType, K, V, NodeType>, HandleType>\n{\n    /// Temporarily takes out another, immutable handle on the same location.\n    pub fn reborrow(&self) -> Handle<NodeRef<marker::Immut<'_>, K, V, NodeType>, HandleType> {\n        // We can't use Handle::new_kv or Handle::new_edge because we don't know our type\n        Handle { node: self.node.reborrow(), idx: self.idx, _marker: PhantomData }\n    }\n}\n\nimpl<'a, K, V, NodeType, HandleType> Handle<NodeRef<marker::Mut<'a>, K, V, NodeType>, HandleType> {\n    /// Temporarily takes out another, mutable handle on the same location. Beware, as\n    /// this method is very dangerous, doubly so since it may not immediately appear\n    /// dangerous.\n    ///\n    /// For details, see `NodeRef::reborrow_mut`.\n    pub unsafe fn reborrow_mut(\n        &mut self,\n    ) -> Handle<NodeRef<marker::Mut<'_>, K, V, NodeType>, HandleType> {\n        // We can't use Handle::new_kv or Handle::new_edge because we don't know our type\n        Handle { node: unsafe { self.node.reborrow_mut() }, idx: self.idx, _marker: PhantomData }\n    }\n}\n\nimpl<BorrowType, K, V, NodeType> Handle<NodeRef<BorrowType, K, V, NodeType>, marker::Edge> {\n    /// Creates a new handle to an edge in `node`.\n    /// Unsafe because the caller must ensure that `idx <= node.len()`.\n    pub unsafe fn new_edge(node: NodeRef<BorrowType, K, V, NodeType>, idx: usize) -> Self {\n        debug_assert!(idx <= node.len());\n\n        Handle { node, idx, _marker: PhantomData }\n    }\n\n    pub fn left_kv(self) -> Result<Handle<NodeRef<BorrowType, K, V, NodeType>, marker::KV>, Self> {\n        if self.idx > 0 {\n            Ok(unsafe { Handle::new_kv(self.node, self.idx - 1) })\n        } else {\n            Err(self)\n        }\n    }\n\n    pub fn right_kv(self) -> Result<Handle<NodeRef<BorrowType, K, V, NodeType>, marker::KV>, Self> {\n        if self.idx < self.node.len() {\n            Ok(unsafe { Handle::new_kv(self.node, self.idx) })\n        } else {\n            Err(self)\n        }\n    }\n}\n\npub enum LeftOrRight<T> {\n    Left(T),\n    Right(T),\n}\n\n/// Given an edge index where we want to insert into a node filled to capacity,\n/// computes a sensible KV index of a split point and where to perform the insertion.\n/// The goal of the split point is for its key and value to end up in a parent node;\n/// the keys, values and edges to the left of the split point become the left child;\n/// the keys, values and edges to the right of the split point become the right child.\nfn splitpoint(edge_idx: usize) -> (usize, LeftOrRight<usize>) {\n    debug_assert!(edge_idx <= CAPACITY);\n    // Rust issue #74834 tries to explain these symmetric rules.\n    match edge_idx {\n        0..EDGE_IDX_LEFT_OF_CENTER => (KV_IDX_CENTER - 1, LeftOrRight::Left(edge_idx)),\n        EDGE_IDX_LEFT_OF_CENTER => (KV_IDX_CENTER, LeftOrRight::Left(edge_idx)),\n        EDGE_IDX_RIGHT_OF_CENTER => (KV_IDX_CENTER, LeftOrRight::Right(0)),\n        _ => (KV_IDX_CENTER + 1, LeftOrRight::Right(edge_idx - (KV_IDX_CENTER + 1 + 1))),\n    }\n}\n\nimpl<'a, K: 'a, V: 'a> Handle<NodeRef<marker::Mut<'a>, K, V, marker::Leaf>, marker::Edge> {\n    /// Inserts a new key-value pair between the key-value pairs to the right and left of\n    /// this edge. This method assumes that there is enough space in the node for the new\n    /// pair to fit.\n    ///\n    /// The returned pointer points to the inserted value.\n    fn insert_fit(&mut self, key: K, val: V) -> *mut V {\n        debug_assert!(self.node.len() < CAPACITY);\n        let new_len = self.node.len() + 1;\n\n        unsafe {\n            slice_insert(self.node.key_area_mut(..new_len), self.idx, key);\n            slice_insert(self.node.val_area_mut(..new_len), self.idx, val);\n            *self.node.len_mut() = new_len as u16;\n\n            self.node.val_area_mut(self.idx).assume_init_mut()\n        }\n    }\n}\n\nimpl<'a, K: 'a, V: 'a> Handle<NodeRef<marker::Mut<'a>, K, V, marker::Leaf>, marker::Edge> {\n    /// Inserts a new key-value pair between the key-value pairs to the right and left of\n    /// this edge. This method splits the node if there isn't enough room.\n    ///\n    /// The returned pointer points to the inserted value.\n    fn insert(mut self, key: K, val: V) -> (InsertResult<'a, K, V, marker::Leaf>, *mut V) {\n        if self.node.len() < CAPACITY {\n            let val_ptr = self.insert_fit(key, val);\n            let kv = unsafe { Handle::new_kv(self.node, self.idx) };\n            (InsertResult::Fit(kv), val_ptr)\n        } else {\n            let (middle_kv_idx, insertion) = splitpoint(self.idx);\n            let middle = unsafe { Handle::new_kv(self.node, middle_kv_idx) };\n            let mut result = middle.split();\n            let mut insertion_edge = match insertion {\n                LeftOrRight::Left(insert_idx) => unsafe {\n                    Handle::new_edge(result.left.reborrow_mut(), insert_idx)\n                },\n                LeftOrRight::Right(insert_idx) => unsafe {\n                    Handle::new_edge(result.right.borrow_mut(), insert_idx)\n                },\n            };\n            let val_ptr = insertion_edge.insert_fit(key, val);\n            (InsertResult::Split(result), val_ptr)\n        }\n    }\n}\n\nimpl<'a, K, V> Handle<NodeRef<marker::Mut<'a>, K, V, marker::Internal>, marker::Edge> {\n    /// Fixes the parent pointer and index in the child node that this edge\n    /// links to. This is useful when the ordering of edges has been changed,\n    fn correct_parent_link(self) {\n        // Create backpointer without invalidating other references to the node.\n        let ptr = unsafe { NonNull::new_unchecked(NodeRef::as_internal_ptr(&self.node)) };\n        let idx = self.idx;\n        let mut child = self.descend();\n        child.set_parent_link(ptr, idx);\n    }\n}\n\nimpl<'a, K: 'a, V: 'a> Handle<NodeRef<marker::Mut<'a>, K, V, marker::Internal>, marker::Edge> {\n    /// Inserts a new key-value pair and an edge that will go to the right of that new pair\n    /// between this edge and the key-value pair to the right of this edge. This method assumes\n    /// that there is enough space in the node for the new pair to fit.\n    fn insert_fit(&mut self, key: K, val: V, edge: Root<K, V>) {\n        debug_assert!(self.node.len() < CAPACITY);\n        debug_assert!(edge.height == self.node.height - 1);\n        let new_len = self.node.len() + 1;\n\n        unsafe {\n            slice_insert(self.node.key_area_mut(..new_len), self.idx, key);\n            slice_insert(self.node.val_area_mut(..new_len), self.idx, val);\n            slice_insert(self.node.edge_area_mut(..new_len + 1), self.idx + 1, edge.node);\n            *self.node.len_mut() = new_len as u16;\n\n            self.node.correct_childrens_parent_links(self.idx + 1..new_len + 1);\n        }\n    }\n\n    /// Inserts a new key-value pair and an edge that will go to the right of that new pair\n    /// between this edge and the key-value pair to the right of this edge. This method splits\n    /// the node if there isn't enough room.\n    fn insert(\n        mut self,\n        key: K,\n        val: V,\n        edge: Root<K, V>,\n    ) -> InsertResult<'a, K, V, marker::Internal> {\n        assert!(edge.height == self.node.height - 1);\n\n        if self.node.len() < CAPACITY {\n            self.insert_fit(key, val, edge);\n            let kv = unsafe { Handle::new_kv(self.node, self.idx) };\n            InsertResult::Fit(kv)\n        } else {\n            let (middle_kv_idx, insertion) = splitpoint(self.idx);\n            let middle = unsafe { Handle::new_kv(self.node, middle_kv_idx) };\n            let mut result = middle.split();\n            let mut insertion_edge = match insertion {\n                LeftOrRight::Left(insert_idx) => unsafe {\n                    Handle::new_edge(result.left.reborrow_mut(), insert_idx)\n                },\n                LeftOrRight::Right(insert_idx) => unsafe {\n                    Handle::new_edge(result.right.borrow_mut(), insert_idx)\n                },\n            };\n            insertion_edge.insert_fit(key, val, edge);\n            InsertResult::Split(result)\n        }\n    }\n}\n\nimpl<'a, K: 'a, V: 'a> Handle<NodeRef<marker::Mut<'a>, K, V, marker::Leaf>, marker::Edge> {\n    /// Inserts a new key-value pair between the key-value pairs to the right and left of\n    /// this edge. This method splits the node if there isn't enough room, and tries to\n    /// insert the split off portion into the parent node recursively, until the root is reached.\n    ///\n    /// If the returned result is a `Fit`, its handle's node can be this edge's node or an ancestor.\n    /// If the returned result is a `Split`, the `left` field will be the root node.\n    /// The returned pointer points to the inserted value.\n    pub fn insert_recursing(\n        self,\n        key: K,\n        value: V,\n    ) -> (InsertResult<'a, K, V, marker::LeafOrInternal>, *mut V) {\n        let (mut split, val_ptr) = match self.insert(key, value) {\n            (InsertResult::Fit(handle), ptr) => {\n                return (InsertResult::Fit(handle.forget_node_type()), ptr);\n            }\n            (InsertResult::Split(split), val_ptr) => (split.forget_node_type(), val_ptr),\n        };\n\n        loop {\n            split = match split.left.ascend() {\n                Ok(parent) => match parent.insert(split.kv.0, split.kv.1, split.right) {\n                    InsertResult::Fit(handle) => {\n                        return (InsertResult::Fit(handle.forget_node_type()), val_ptr);\n                    }\n                    InsertResult::Split(split) => split.forget_node_type(),\n                },\n                Err(root) => {\n                    return (InsertResult::Split(SplitResult { left: root, ..split }), val_ptr);\n                }\n            };\n        }\n    }\n}\n\nimpl<BorrowType: marker::BorrowType, K, V>\n    Handle<NodeRef<BorrowType, K, V, marker::Internal>, marker::Edge>\n{\n    /// Finds the node pointed to by this edge.\n    ///\n    /// The method name assumes you picture trees with the root node on top.\n    ///\n    /// `edge.descend().ascend().unwrap()` and `node.ascend().unwrap().descend()` should\n    /// both, upon success, do nothing.\n    pub fn descend(self) -> NodeRef<BorrowType, K, V, marker::LeafOrInternal> {\n        assert!(BorrowType::PERMITS_TRAVERSAL);\n        // We need to use raw pointers to nodes because, if BorrowType is\n        // marker::ValMut, there might be outstanding mutable references to\n        // values that we must not invalidate. There's no worry accessing the\n        // height field because that value is copied. Beware that, once the\n        // node pointer is dereferenced, we access the edges array with a\n        // reference (Rust issue #73987) and invalidate any other references\n        // to or inside the array, should any be around.\n        let parent_ptr = NodeRef::as_internal_ptr(&self.node);\n        let node = unsafe { (*parent_ptr).edges.get_unchecked(self.idx).assume_init_read() };\n        NodeRef { node, height: self.node.height - 1, _marker: PhantomData }\n    }\n}\n\nimpl<'a, K: 'a, V: 'a, NodeType> Handle<NodeRef<marker::Immut<'a>, K, V, NodeType>, marker::KV> {\n    pub fn into_kv(self) -> (&'a K, &'a V) {\n        debug_assert!(self.idx < self.node.len());\n        let leaf = self.node.into_leaf();\n        let k = unsafe { leaf.keys.get_unchecked(self.idx).assume_init_ref() };\n        let v = unsafe { leaf.vals.get_unchecked(self.idx).assume_init_ref() };\n        (k, v)\n    }\n}\n\nimpl<'a, K: 'a, V: 'a, NodeType> Handle<NodeRef<marker::Mut<'a>, K, V, NodeType>, marker::KV> {\n    pub fn key_mut(&mut self) -> &mut K {\n        unsafe { self.node.key_area_mut(self.idx).assume_init_mut() }\n    }\n\n    pub fn into_val_mut(self) -> &'a mut V {\n        debug_assert!(self.idx < self.node.len());\n        let leaf = self.node.into_leaf_mut();\n        unsafe { leaf.vals.get_unchecked_mut(self.idx).assume_init_mut() }\n    }\n}\n\nimpl<'a, K, V, NodeType> Handle<NodeRef<marker::ValMut<'a>, K, V, NodeType>, marker::KV> {\n    pub fn into_kv_valmut(self) -> (&'a K, &'a mut V) {\n        unsafe { self.node.into_key_val_mut_at(self.idx) }\n    }\n}\n\nimpl<'a, K: 'a, V: 'a, NodeType> Handle<NodeRef<marker::Mut<'a>, K, V, NodeType>, marker::KV> {\n    pub fn kv_mut(&mut self) -> (&mut K, &mut V) {\n        debug_assert!(self.idx < self.node.len());\n        // We cannot call separate key and value methods, because calling the second one\n        // invalidates the reference returned by the first.\n        unsafe {\n            let leaf = self.node.as_leaf_mut();\n            let key = leaf.keys.get_unchecked_mut(self.idx).assume_init_mut();\n            let val = leaf.vals.get_unchecked_mut(self.idx).assume_init_mut();\n            (key, val)\n        }\n    }\n\n    /// Replace the key and value that the KV handle refers to.\n    pub fn replace_kv(&mut self, k: K, v: V) -> (K, V) {\n        let (key, val) = self.kv_mut();\n        (mem::replace(key, k), mem::replace(val, v))\n    }\n}\n\nimpl<'a, K: 'a, V: 'a, NodeType> Handle<NodeRef<marker::Mut<'a>, K, V, NodeType>, marker::KV> {\n    /// Helps implementations of `split` for a particular `NodeType`,\n    /// by taking care of leaf data.\n    fn split_leaf_data(&mut self, new_node: &mut LeafNode<K, V>) -> (K, V) {\n        debug_assert!(self.idx < self.node.len());\n        let old_len = self.node.len();\n        let new_len = old_len - self.idx - 1;\n        new_node.len = new_len as u16;\n        unsafe {\n            let k = self.node.key_area_mut(self.idx).assume_init_read();\n            let v = self.node.val_area_mut(self.idx).assume_init_read();\n\n            move_to_slice(\n                self.node.key_area_mut(self.idx + 1..old_len),\n                &mut new_node.keys[..new_len],\n            );\n            move_to_slice(\n                self.node.val_area_mut(self.idx + 1..old_len),\n                &mut new_node.vals[..new_len],\n            );\n\n            *self.node.len_mut() = self.idx as u16;\n            (k, v)\n        }\n    }\n}\n\nimpl<'a, K: 'a, V: 'a> Handle<NodeRef<marker::Mut<'a>, K, V, marker::Leaf>, marker::KV> {\n    /// Splits the underlying node into three parts:\n    ///\n    /// - The node is truncated to only contain the key-value pairs to the left of\n    ///   this handle.\n    /// - The key and value pointed to by this handle are extracted.\n    /// - All the key-value pairs to the right of this handle are put into a newly\n    ///   allocated node.\n    pub fn split(mut self) -> SplitResult<'a, K, V, marker::Leaf> {\n        let mut new_node = LeafNode::new();\n\n        let kv = self.split_leaf_data(&mut new_node);\n\n        let right = NodeRef::from_new_leaf(new_node);\n        SplitResult { left: self.node, kv, right }\n    }\n\n    /// Removes the key-value pair pointed to by this handle and returns it, along with the edge\n    /// that the key-value pair collapsed into.\n    pub fn remove(\n        mut self,\n    ) -> ((K, V), Handle<NodeRef<marker::Mut<'a>, K, V, marker::Leaf>, marker::Edge>) {\n        let old_len = self.node.len();\n        unsafe {\n            let k = slice_remove(self.node.key_area_mut(..old_len), self.idx);\n            let v = slice_remove(self.node.val_area_mut(..old_len), self.idx);\n            *self.node.len_mut() = (old_len - 1) as u16;\n            ((k, v), self.left_edge())\n        }\n    }\n}\n\nimpl<'a, K: 'a, V: 'a> Handle<NodeRef<marker::Mut<'a>, K, V, marker::Internal>, marker::KV> {\n    /// Splits the underlying node into three parts:\n    ///\n    /// - The node is truncated to only contain the edges and key-value pairs to the\n    ///   left of this handle.\n    /// - The key and value pointed to by this handle are extracted.\n    /// - All the edges and key-value pairs to the right of this handle are put into\n    ///   a newly allocated node.\n    pub fn split(mut self) -> SplitResult<'a, K, V, marker::Internal> {\n        let old_len = self.node.len();\n        unsafe {\n            let mut new_node = InternalNode::new();\n            let kv = self.split_leaf_data(&mut new_node.data);\n            let new_len = usize::from(new_node.data.len);\n            move_to_slice(\n                self.node.edge_area_mut(self.idx + 1..old_len + 1),\n                &mut new_node.edges[..new_len + 1],\n            );\n\n            let height = self.node.height;\n            let right = NodeRef::from_new_internal(new_node, height);\n\n            SplitResult { left: self.node, kv, right }\n        }\n    }\n}\n\n/// Represents a session for evaluating and performing a balancing operation\n/// around an internal key-value pair.\npub struct BalancingContext<'a, K, V> {\n    parent: Handle<NodeRef<marker::Mut<'a>, K, V, marker::Internal>, marker::KV>,\n    left_child: NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal>,\n    right_child: NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal>,\n}\n\nimpl<'a, K, V> Handle<NodeRef<marker::Mut<'a>, K, V, marker::Internal>, marker::KV> {\n    pub fn consider_for_balancing(self) -> BalancingContext<'a, K, V> {\n        let self1 = unsafe { ptr::read(&self) };\n        let self2 = unsafe { ptr::read(&self) };\n        BalancingContext {\n            parent: self,\n            left_child: self1.left_edge().descend(),\n            right_child: self2.right_edge().descend(),\n        }\n    }\n}\n\nimpl<'a, K, V> NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal> {\n    /// Chooses a balancing context involving the node as a child, thus between\n    /// the KV immediately to the left or to the right in the parent node.\n    /// Returns an `Err` if there is no parent.\n    /// Panics if the parent is empty.\n    ///\n    /// Prefers the left side, to be optimal if the given node is somehow\n    /// underfull, meaning here only that it has fewer elements than its left\n    /// sibling and than its right sibling, if they exist. In that case,\n    /// merging with the left sibling is faster, since we only need to move\n    /// the node's N elements, instead of shifting them to the right and moving\n    /// more than N elements in front. Stealing from the left sibling is also\n    /// typically faster, since we only need to shift the node's N elements to\n    /// the right, instead of shifting at least N of the sibling's elements to\n    /// the left.\n    pub fn choose_parent_kv(self) -> Result<LeftOrRight<BalancingContext<'a, K, V>>, Self> {\n        match unsafe { ptr::read(&self) }.ascend() {\n            Ok(parent_edge) => match parent_edge.left_kv() {\n                Ok(left_parent_kv) => Ok(LeftOrRight::Left(BalancingContext {\n                    parent: unsafe { ptr::read(&left_parent_kv) },\n                    left_child: left_parent_kv.left_edge().descend(),\n                    right_child: self,\n                })),\n                Err(parent_edge) => match parent_edge.right_kv() {\n                    Ok(right_parent_kv) => Ok(LeftOrRight::Right(BalancingContext {\n                        parent: unsafe { ptr::read(&right_parent_kv) },\n                        left_child: self,\n                        right_child: right_parent_kv.right_edge().descend(),\n                    })),\n                    Err(_) => unreachable!(\"empty internal node\"),\n                },\n            },\n            Err(root) => Err(root),\n        }\n    }\n}\n\nimpl<'a, K, V> BalancingContext<'a, K, V> {\n    pub fn left_child_len(&self) -> usize {\n        self.left_child.len()\n    }\n\n    pub fn right_child_len(&self) -> usize {\n        self.right_child.len()\n    }\n\n    pub fn into_left_child(self) -> NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal> {\n        self.left_child\n    }\n\n    pub fn into_right_child(self) -> NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal> {\n        self.right_child\n    }\n\n    /// Returns whether merging is possible, i.e., whether there is enough room\n    /// in a node to combine the central KV with both adjacent child nodes.\n    pub fn can_merge(&self) -> bool {\n        self.left_child.len() + 1 + self.right_child.len() <= CAPACITY\n    }\n}\n\nimpl<'a, K: 'a, V: 'a> BalancingContext<'a, K, V> {\n    /// Performs a merge and lets a closure decide what to return.\n    fn do_merge<\n        F: FnOnce(\n            NodeRef<marker::Mut<'a>, K, V, marker::Internal>,\n            NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal>,\n        ) -> R,\n        R,\n    >(\n        self,\n        result: F,\n    ) -> R {\n        let Handle { node: mut parent_node, idx: parent_idx, _marker } = self.parent;\n        let old_parent_len = parent_node.len();\n        let mut left_node = self.left_child;\n        let old_left_len = left_node.len();\n        let mut right_node = self.right_child;\n        let right_len = right_node.len();\n        let new_left_len = old_left_len + 1 + right_len;\n\n        assert!(new_left_len <= CAPACITY);\n\n        unsafe {\n            *left_node.len_mut() = new_left_len as u16;\n\n            let parent_key = slice_remove(parent_node.key_area_mut(..old_parent_len), parent_idx);\n            left_node.key_area_mut(old_left_len).write(parent_key);\n            move_to_slice(\n                right_node.key_area_mut(..right_len),\n                left_node.key_area_mut(old_left_len + 1..new_left_len),\n            );\n\n            let parent_val = slice_remove(parent_node.val_area_mut(..old_parent_len), parent_idx);\n            left_node.val_area_mut(old_left_len).write(parent_val);\n            move_to_slice(\n                right_node.val_area_mut(..right_len),\n                left_node.val_area_mut(old_left_len + 1..new_left_len),\n            );\n\n            slice_remove(&mut parent_node.edge_area_mut(..old_parent_len + 1), parent_idx + 1);\n            parent_node.correct_childrens_parent_links(parent_idx + 1..old_parent_len);\n            *parent_node.len_mut() -= 1;\n\n            if parent_node.height > 1 {\n                // SAFETY: the height of the nodes being merged is one below the height\n                // of the node of this edge, thus above zero, so they are internal.\n                let mut left_node = left_node.reborrow_mut().cast_to_internal_unchecked();\n                let mut right_node = right_node.cast_to_internal_unchecked();\n                move_to_slice(\n                    right_node.edge_area_mut(..right_len + 1),\n                    left_node.edge_area_mut(old_left_len + 1..new_left_len + 1),\n                );\n\n                left_node.correct_childrens_parent_links(old_left_len + 1..new_left_len + 1);\n\n                Global.deallocate(right_node.node.cast(), Layout::new::<InternalNode<K, V>>());\n            } else {\n                Global.deallocate(right_node.node.cast(), Layout::new::<LeafNode<K, V>>());\n            }\n        }\n        result(parent_node, left_node)\n    }\n\n    /// Merges the parent's key-value pair and both adjacent child nodes into\n    /// the left child node and returns the shrunk parent node.\n    ///\n    /// Panics unless we `.can_merge()`.\n    pub fn merge_tracking_parent(self) -> NodeRef<marker::Mut<'a>, K, V, marker::Internal> {\n        self.do_merge(|parent, _child| parent)\n    }\n\n    /// Merges the parent's key-value pair and both adjacent child nodes into\n    /// the left child node and returns that child node.\n    ///\n    /// Panics unless we `.can_merge()`.\n    pub fn merge_tracking_child(self) -> NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal> {\n        self.do_merge(|_parent, child| child)\n    }\n\n    /// Merges the parent's key-value pair and both adjacent child nodes into\n    /// the left child node and returns the edge handle in that child node\n    /// where the tracked child edge ended up,\n    ///\n    /// Panics unless we `.can_merge()`.\n    pub fn merge_tracking_child_edge(\n        self,\n        track_edge_idx: LeftOrRight<usize>,\n    ) -> Handle<NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal>, marker::Edge> {\n        let old_left_len = self.left_child.len();\n        let right_len = self.right_child.len();\n        assert!(match track_edge_idx {\n            LeftOrRight::Left(idx) => idx <= old_left_len,\n            LeftOrRight::Right(idx) => idx <= right_len,\n        });\n        let child = self.merge_tracking_child();\n        let new_idx = match track_edge_idx {\n            LeftOrRight::Left(idx) => idx,\n            LeftOrRight::Right(idx) => old_left_len + 1 + idx,\n        };\n        unsafe { Handle::new_edge(child, new_idx) }\n    }\n\n    /// Removes a key-value pair from the left child and places it in the key-value storage\n    /// of the parent, while pushing the old parent key-value pair into the right child.\n    /// Returns a handle to the edge in the right child corresponding to where the original\n    /// edge specified by `track_right_edge_idx` ended up.\n    pub fn steal_left(\n        mut self,\n        track_right_edge_idx: usize,\n    ) -> Handle<NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal>, marker::Edge> {\n        self.bulk_steal_left(1);\n        unsafe { Handle::new_edge(self.right_child, 1 + track_right_edge_idx) }\n    }\n\n    /// Removes a key-value pair from the right child and places it in the key-value storage\n    /// of the parent, while pushing the old parent key-value pair onto the left child.\n    /// Returns a handle to the edge in the left child specified by `track_left_edge_idx`,\n    /// which didn't move.\n    pub fn steal_right(\n        mut self,\n        track_left_edge_idx: usize,\n    ) -> Handle<NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal>, marker::Edge> {\n        self.bulk_steal_right(1);\n        unsafe { Handle::new_edge(self.left_child, track_left_edge_idx) }\n    }\n\n    /// This does stealing similar to `steal_left` but steals multiple elements at once.\n    pub fn bulk_steal_left(&mut self, count: usize) {\n        assert!(count > 0);\n        unsafe {\n            let left_node = &mut self.left_child;\n            let old_left_len = left_node.len();\n            let right_node = &mut self.right_child;\n            let old_right_len = right_node.len();\n\n            // Make sure that we may steal safely.\n            assert!(old_right_len + count <= CAPACITY);\n            assert!(old_left_len >= count);\n\n            let new_left_len = old_left_len - count;\n            let new_right_len = old_right_len + count;\n            *left_node.len_mut() = new_left_len as u16;\n            *right_node.len_mut() = new_right_len as u16;\n\n            // Move leaf data.\n            {\n                // Make room for stolen elements in the right child.\n                slice_shr(right_node.key_area_mut(..new_right_len), count);\n                slice_shr(right_node.val_area_mut(..new_right_len), count);\n\n                // Move elements from the left child to the right one.\n                move_to_slice(\n                    left_node.key_area_mut(new_left_len + 1..old_left_len),\n                    right_node.key_area_mut(..count - 1),\n                );\n                move_to_slice(\n                    left_node.val_area_mut(new_left_len + 1..old_left_len),\n                    right_node.val_area_mut(..count - 1),\n                );\n\n                // Move the left-most stolen pair to the parent.\n                let k = left_node.key_area_mut(new_left_len).assume_init_read();\n                let v = left_node.val_area_mut(new_left_len).assume_init_read();\n                let (k, v) = self.parent.replace_kv(k, v);\n\n                // Move parent's key-value pair to the right child.\n                right_node.key_area_mut(count - 1).write(k);\n                right_node.val_area_mut(count - 1).write(v);\n            }\n\n            match (left_node.reborrow_mut().force(), right_node.reborrow_mut().force()) {\n                (ForceResult::Internal(mut left), ForceResult::Internal(mut right)) => {\n                    // Make room for stolen edges.\n                    slice_shr(right.edge_area_mut(..new_right_len + 1), count);\n\n                    // Steal edges.\n                    move_to_slice(\n                        left.edge_area_mut(new_left_len + 1..old_left_len + 1),\n                        right.edge_area_mut(..count),\n                    );\n\n                    right.correct_childrens_parent_links(0..new_right_len + 1);\n                }\n                (ForceResult::Leaf(_), ForceResult::Leaf(_)) => {}\n                _ => unreachable!(),\n            }\n        }\n    }\n\n    /// The symmetric clone of `bulk_steal_left`.\n    pub fn bulk_steal_right(&mut self, count: usize) {\n        assert!(count > 0);\n        unsafe {\n            let left_node = &mut self.left_child;\n            let old_left_len = left_node.len();\n            let right_node = &mut self.right_child;\n            let old_right_len = right_node.len();\n\n            // Make sure that we may steal safely.\n            assert!(old_left_len + count <= CAPACITY);\n            assert!(old_right_len >= count);\n\n            let new_left_len = old_left_len + count;\n            let new_right_len = old_right_len - count;\n            *left_node.len_mut() = new_left_len as u16;\n            *right_node.len_mut() = new_right_len as u16;\n\n            // Move leaf data.\n            {\n                // Move the right-most stolen pair to the parent.\n                let k = right_node.key_area_mut(count - 1).assume_init_read();\n                let v = right_node.val_area_mut(count - 1).assume_init_read();\n                let (k, v) = self.parent.replace_kv(k, v);\n\n                // Move parent's key-value pair to the left child.\n                left_node.key_area_mut(old_left_len).write(k);\n                left_node.val_area_mut(old_left_len).write(v);\n\n                // Move elements from the right child to the left one.\n                move_to_slice(\n                    right_node.key_area_mut(..count - 1),\n                    left_node.key_area_mut(old_left_len + 1..new_left_len),\n                );\n                move_to_slice(\n                    right_node.val_area_mut(..count - 1),\n                    left_node.val_area_mut(old_left_len + 1..new_left_len),\n                );\n\n                // Fill gap where stolen elements used to be.\n                slice_shl(right_node.key_area_mut(..old_right_len), count);\n                slice_shl(right_node.val_area_mut(..old_right_len), count);\n            }\n\n            match (left_node.reborrow_mut().force(), right_node.reborrow_mut().force()) {\n                (ForceResult::Internal(mut left), ForceResult::Internal(mut right)) => {\n                    // Steal edges.\n                    move_to_slice(\n                        right.edge_area_mut(..count),\n                        left.edge_area_mut(old_left_len + 1..new_left_len + 1),\n                    );\n\n                    // Fill gap where stolen edges used to be.\n                    slice_shl(right.edge_area_mut(..old_right_len + 1), count);\n\n                    left.correct_childrens_parent_links(old_left_len + 1..new_left_len + 1);\n                    right.correct_childrens_parent_links(0..new_right_len + 1);\n                }\n                (ForceResult::Leaf(_), ForceResult::Leaf(_)) => {}\n                _ => unreachable!(),\n            }\n        }\n    }\n}\n\nimpl<BorrowType, K, V> Handle<NodeRef<BorrowType, K, V, marker::Leaf>, marker::Edge> {\n    pub fn forget_node_type(\n        self,\n    ) -> Handle<NodeRef<BorrowType, K, V, marker::LeafOrInternal>, marker::Edge> {\n        unsafe { Handle::new_edge(self.node.forget_type(), self.idx) }\n    }\n}\n\nimpl<BorrowType, K, V> Handle<NodeRef<BorrowType, K, V, marker::Internal>, marker::Edge> {\n    pub fn forget_node_type(\n        self,\n    ) -> Handle<NodeRef<BorrowType, K, V, marker::LeafOrInternal>, marker::Edge> {\n        unsafe { Handle::new_edge(self.node.forget_type(), self.idx) }\n    }\n}\n\nimpl<BorrowType, K, V> Handle<NodeRef<BorrowType, K, V, marker::Leaf>, marker::KV> {\n    pub fn forget_node_type(\n        self,\n    ) -> Handle<NodeRef<BorrowType, K, V, marker::LeafOrInternal>, marker::KV> {\n        unsafe { Handle::new_kv(self.node.forget_type(), self.idx) }\n    }\n}\n\nimpl<BorrowType, K, V> Handle<NodeRef<BorrowType, K, V, marker::Internal>, marker::KV> {\n    pub fn forget_node_type(\n        self,\n    ) -> Handle<NodeRef<BorrowType, K, V, marker::LeafOrInternal>, marker::KV> {\n        unsafe { Handle::new_kv(self.node.forget_type(), self.idx) }\n    }\n}\n\nimpl<BorrowType, K, V, Type> Handle<NodeRef<BorrowType, K, V, marker::LeafOrInternal>, Type> {\n    /// Checks whether the underlying node is an `Internal` node or a `Leaf` node.\n    pub fn force(\n        self,\n    ) -> ForceResult<\n        Handle<NodeRef<BorrowType, K, V, marker::Leaf>, Type>,\n        Handle<NodeRef<BorrowType, K, V, marker::Internal>, Type>,\n    > {\n        match self.node.force() {\n            ForceResult::Leaf(node) => {\n                ForceResult::Leaf(Handle { node, idx: self.idx, _marker: PhantomData })\n            }\n            ForceResult::Internal(node) => {\n                ForceResult::Internal(Handle { node, idx: self.idx, _marker: PhantomData })\n            }\n        }\n    }\n}\n\nimpl<'a, K, V, Type> Handle<NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal>, Type> {\n    /// Unsafely asserts to the compiler the static information that the handle's node is a `Leaf`.\n    pub unsafe fn cast_to_leaf_unchecked(\n        self,\n    ) -> Handle<NodeRef<marker::Mut<'a>, K, V, marker::Leaf>, Type> {\n        let node = unsafe { self.node.cast_to_leaf_unchecked() };\n        Handle { node, idx: self.idx, _marker: PhantomData }\n    }\n}\n\nimpl<'a, K, V> Handle<NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal>, marker::Edge> {\n    /// Move the suffix after `self` from one node to another one. `right` must be empty.\n    /// The first edge of `right` remains unchanged.\n    pub fn move_suffix(\n        &mut self,\n        right: &mut NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal>,\n    ) {\n        unsafe {\n            let new_left_len = self.idx;\n            let mut left_node = self.reborrow_mut().into_node();\n            let old_left_len = left_node.len();\n\n            let new_right_len = old_left_len - new_left_len;\n            let mut right_node = right.reborrow_mut();\n\n            assert!(right_node.len() == 0);\n            assert!(left_node.height == right_node.height);\n\n            if new_right_len > 0 {\n                *left_node.len_mut() = new_left_len as u16;\n                *right_node.len_mut() = new_right_len as u16;\n\n                move_to_slice(\n                    left_node.key_area_mut(new_left_len..old_left_len),\n                    right_node.key_area_mut(..new_right_len),\n                );\n                move_to_slice(\n                    left_node.val_area_mut(new_left_len..old_left_len),\n                    right_node.val_area_mut(..new_right_len),\n                );\n                match (left_node.force(), right_node.force()) {\n                    (ForceResult::Internal(mut left), ForceResult::Internal(mut right)) => {\n                        move_to_slice(\n                            left.edge_area_mut(new_left_len + 1..old_left_len + 1),\n                            right.edge_area_mut(1..new_right_len + 1),\n                        );\n                        right.correct_childrens_parent_links(1..new_right_len + 1);\n                    }\n                    (ForceResult::Leaf(_), ForceResult::Leaf(_)) => {}\n                    _ => unreachable!(),\n                }\n            }\n        }\n    }\n}\n\npub enum ForceResult<Leaf, Internal> {\n    Leaf(Leaf),\n    Internal(Internal),\n}\n\n/// Result of insertion, when a node needed to expand beyond its capacity.\npub struct SplitResult<'a, K, V, NodeType> {\n    // Altered node in existing tree with elements and edges that belong to the left of `kv`.\n    pub left: NodeRef<marker::Mut<'a>, K, V, NodeType>,\n    // Some key and value split off, to be inserted elsewhere.\n    pub kv: (K, V),\n    // Owned, unattached, new node with elements and edges that belong to the right of `kv`.\n    pub right: NodeRef<marker::Owned, K, V, NodeType>,\n}\n\nimpl<'a, K, V> SplitResult<'a, K, V, marker::Leaf> {\n    pub fn forget_node_type(self) -> SplitResult<'a, K, V, marker::LeafOrInternal> {\n        SplitResult { left: self.left.forget_type(), kv: self.kv, right: self.right.forget_type() }\n    }\n}\n\nimpl<'a, K, V> SplitResult<'a, K, V, marker::Internal> {\n    pub fn forget_node_type(self) -> SplitResult<'a, K, V, marker::LeafOrInternal> {\n        SplitResult { left: self.left.forget_type(), kv: self.kv, right: self.right.forget_type() }\n    }\n}\n\npub enum InsertResult<'a, K, V, NodeType> {\n    Fit(Handle<NodeRef<marker::Mut<'a>, K, V, NodeType>, marker::KV>),\n    Split(SplitResult<'a, K, V, NodeType>),\n}\n\npub mod marker {\n    use core::marker::PhantomData;\n\n    pub enum Leaf {}\n    pub enum Internal {}\n    pub enum LeafOrInternal {}\n\n    pub enum Owned {}\n    pub enum Dying {}\n    pub struct Immut<'a>(PhantomData<&'a ()>);\n    pub struct Mut<'a>(PhantomData<&'a mut ()>);\n    pub struct ValMut<'a>(PhantomData<&'a mut ()>);\n\n    pub trait BorrowType {\n        // Whether node references of this borrow type allow traversing\n        // to other nodes in the tree.\n        const PERMITS_TRAVERSAL: bool = true;\n    }\n    impl BorrowType for Owned {\n        // Traversal isn't needede, it happens using the result of `borrow_mut`.\n        // By disabling traversal, and only creating new references to roots,\n        // we know that every reference of the `Owned` type is to a root node.\n        const PERMITS_TRAVERSAL: bool = false;\n    }\n    impl BorrowType for Dying {}\n    impl<'a> BorrowType for Immut<'a> {}\n    impl<'a> BorrowType for Mut<'a> {}\n    impl<'a> BorrowType for ValMut<'a> {}\n\n    pub enum KV {}\n    pub enum Edge {}\n}\n\n/// Inserts a value into a slice of initialized elements followed by one uninitialized element.\n///\n/// # Safety\n/// The slice has more than `idx` elements.\nunsafe fn slice_insert<T>(slice: &mut [MaybeUninit<T>], idx: usize, val: T) {\n    unsafe {\n        let len = slice.len();\n        debug_assert!(len > idx);\n        let slice_ptr = slice.as_mut_ptr();\n        if len > idx + 1 {\n            ptr::copy(slice_ptr.add(idx), slice_ptr.add(idx + 1), len - idx - 1);\n        }\n        (*slice_ptr.add(idx)).write(val);\n    }\n}\n\n/// Removes and returns a value from a slice of all initialized elements, leaving behind one\n/// trailing uninitialized element.\n///\n/// # Safety\n/// The slice has more than `idx` elements.\nunsafe fn slice_remove<T>(slice: &mut [MaybeUninit<T>], idx: usize) -> T {\n    unsafe {\n        let len = slice.len();\n        debug_assert!(idx < len);\n        let slice_ptr = slice.as_mut_ptr();\n        let ret = (*slice_ptr.add(idx)).assume_init_read();\n        ptr::copy(slice_ptr.add(idx + 1), slice_ptr.add(idx), len - idx - 1);\n        ret\n    }\n}\n\n/// Shifts the elements in a slice `distance` positions to the left.\n///\n/// # Safety\n/// The slice has at least `distance` elements.\nunsafe fn slice_shl<T>(slice: &mut [MaybeUninit<T>], distance: usize) {\n    unsafe {\n        let slice_ptr = slice.as_mut_ptr();\n        ptr::copy(slice_ptr.add(distance), slice_ptr, slice.len() - distance);\n    }\n}\n\n/// Shifts the elements in a slice `distance` positions to the right.\n///\n/// # Safety\n/// The slice has at least `distance` elements.\nunsafe fn slice_shr<T>(slice: &mut [MaybeUninit<T>], distance: usize) {\n    unsafe {\n        let slice_ptr = slice.as_mut_ptr();\n        ptr::copy(slice_ptr, slice_ptr.add(distance), slice.len() - distance);\n    }\n}\n\n/// Moves all values from a slice of initialized elements to a slice\n/// of uninitialized elements, leaving behind `src` as all uninitialized.\n/// Works like `dst.copy_from_slice(src)` but does not require `T` to be `Copy`.\nfn move_to_slice<T>(src: &mut [MaybeUninit<T>], dst: &mut [MaybeUninit<T>]) {\n    assert!(src.len() == dst.len());\n    unsafe {\n        ptr::copy_nonoverlapping(src.as_ptr(), dst.as_mut_ptr(), src.len());\n    }\n}\n\n#[cfg(test)]\nmod tests;\nuse super::super::navigate;\nuse super::*;\nuse crate::fmt::Debug;\nuse crate::string::String;\n\nimpl<'a, K: 'a, V: 'a> NodeRef<marker::Immut<'a>, K, V, marker::LeafOrInternal> {\n    // Asserts that the back pointer in each reachable node points to its parent.\n    pub fn assert_back_pointers(self) {\n        if let ForceResult::Internal(node) = self.force() {\n            for idx in 0..=node.len() {\n                let edge = unsafe { Handle::new_edge(node, idx) };\n                let child = edge.descend();\n                assert!(child.ascend().ok() == Some(edge));\n                child.assert_back_pointers();\n            }\n        }\n    }\n\n    // Renders a multi-line display of the keys in order and in tree hierarchy,\n    // picturing the tree growing sideways from its root on the left to its\n    // leaves on the right.\n    pub fn dump_keys(self) -> String\n    where\n        K: Debug,\n    {\n        let mut result = String::new();\n        self.visit_nodes_in_order(|pos| match pos {\n            navigate::Position::Leaf(leaf) => {\n                let depth = self.height();\n                let indent = \"  \".repeat(depth);\n                result += &format!(\"\\n{}{:?}\", indent, leaf.keys());\n            }\n            navigate::Position::Internal(_) => {}\n            navigate::Position::InternalKV(kv) => {\n                let depth = self.height() - kv.into_node().height();\n                let indent = \"  \".repeat(depth);\n                result += &format!(\"\\n{}{:?}\", indent, kv.into_kv().0);\n            }\n        });\n        result\n    }\n}\n\n#[test]\nfn test_splitpoint() {\n    for idx in 0..=CAPACITY {\n        let (middle_kv_idx, insertion) = splitpoint(idx);\n\n        // Simulate performing the split:\n        let mut left_len = middle_kv_idx;\n        let mut right_len = CAPACITY - middle_kv_idx - 1;\n        match insertion {\n            LeftOrRight::Left(edge_idx) => {\n                assert!(edge_idx <= left_len);\n                left_len += 1;\n            }\n            LeftOrRight::Right(edge_idx) => {\n                assert!(edge_idx <= right_len);\n                right_len += 1;\n            }\n        }\n        assert!(left_len >= MIN_LEN_AFTER_SPLIT);\n        assert!(right_len >= MIN_LEN_AFTER_SPLIT);\n        assert!(left_len + right_len == CAPACITY);\n    }\n}\n\n#[test]\nfn test_partial_eq() {\n    let mut root1 = NodeRef::new_leaf();\n    root1.borrow_mut().push(1, ());\n    let mut root1 = NodeRef::new_internal(root1.forget_type()).forget_type();\n    let root2 = Root::new();\n    root1.reborrow().assert_back_pointers();\n    root2.reborrow().assert_back_pointers();\n\n    let leaf_edge_1a = root1.reborrow().first_leaf_edge().forget_node_type();\n    let leaf_edge_1b = root1.reborrow().last_leaf_edge().forget_node_type();\n    let top_edge_1 = root1.reborrow().first_edge();\n    let top_edge_2 = root2.reborrow().first_edge();\n\n    assert!(leaf_edge_1a == leaf_edge_1a);\n    assert!(leaf_edge_1a != leaf_edge_1b);\n    assert!(leaf_edge_1a != top_edge_1);\n    assert!(leaf_edge_1a != top_edge_2);\n    assert!(top_edge_1 == top_edge_1);\n    assert!(top_edge_1 != top_edge_2);\n\n    root1.pop_internal_level();\n    unsafe { root1.into_dying().deallocate_and_ascend() };\n    unsafe { root2.into_dying().deallocate_and_ascend() };\n}\n\n#[test]\n#[cfg(target_arch = \"x86_64\")]\nfn test_sizes() {\n    assert_eq!(core::mem::size_of::<LeafNode<(), ()>>(), 16);\n    assert_eq!(core::mem::size_of::<LeafNode<i64, i64>>(), 16 + CAPACITY * 2 * 8);\n    assert_eq!(core::mem::size_of::<InternalNode<(), ()>>(), 16 + (CAPACITY + 1) * 8);\n    assert_eq!(core::mem::size_of::<InternalNode<i64, i64>>(), 16 + (CAPACITY * 3 + 1) * 8);\n}\nuse super::map::MIN_LEN;\nuse super::node::{marker, ForceResult::*, Handle, LeftOrRight::*, NodeRef, Root};\n\nimpl<'a, K: 'a, V: 'a> NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal> {\n    /// Stocks up a possibly underfull node by merging with or stealing from a\n    /// sibling. If succesful but at the cost of shrinking the parent node,\n    /// returns that shrunk parent node. Returns an `Err` if the node is\n    /// an empty root.\n    fn fix_node_through_parent(\n        self,\n    ) -> Result<Option<NodeRef<marker::Mut<'a>, K, V, marker::Internal>>, Self> {\n        let len = self.len();\n        if len >= MIN_LEN {\n            Ok(None)\n        } else {\n            match self.choose_parent_kv() {\n                Ok(Left(mut left_parent_kv)) => {\n                    if left_parent_kv.can_merge() {\n                        let parent = left_parent_kv.merge_tracking_parent();\n                        Ok(Some(parent))\n                    } else {\n                        left_parent_kv.bulk_steal_left(MIN_LEN - len);\n                        Ok(None)\n                    }\n                }\n                Ok(Right(mut right_parent_kv)) => {\n                    if right_parent_kv.can_merge() {\n                        let parent = right_parent_kv.merge_tracking_parent();\n                        Ok(Some(parent))\n                    } else {\n                        right_parent_kv.bulk_steal_right(MIN_LEN - len);\n                        Ok(None)\n                    }\n                }\n                Err(root) => {\n                    if len > 0 {\n                        Ok(None)\n                    } else {\n                        Err(root)\n                    }\n                }\n            }\n        }\n    }\n}\n\nimpl<'a, K: 'a, V: 'a> NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal> {\n    /// Stocks up a possibly underfull node, and if that causes its parent node\n    /// to shrink, stocks up the parent, recursively.\n    /// Returns `true` if it fixed the tree, `false` if it couldn't because the\n    /// root node became empty.\n    ///\n    /// This method does not expect ancestors to already be underfull upon entry\n    /// and panics if it encounters an empty ancestor.\n    pub fn fix_node_and_affected_ancestors(mut self) -> bool {\n        loop {\n            match self.fix_node_through_parent() {\n                Ok(Some(parent)) => self = parent.forget_type(),\n                Ok(None) => return true,\n                Err(_) => return false,\n            }\n        }\n    }\n}\n\nimpl<K, V> Root<K, V> {\n    /// Removes empty levels on the top, but keeps an empty leaf if the entire tree is empty.\n    pub fn fix_top(&mut self) {\n        while self.height() > 0 && self.len() == 0 {\n            self.pop_internal_level();\n        }\n    }\n\n    /// Stocks up or merge away any underfull nodes on the right border of the\n    /// tree. The other nodes, those that are not the root nor a rightmost edge,\n    /// must already have at least MIN_LEN elements.\n    pub fn fix_right_border(&mut self) {\n        self.fix_top();\n        if self.len() > 0 {\n            self.borrow_mut().last_kv().fix_right_border_of_right_edge();\n            self.fix_top();\n        }\n    }\n\n    /// The symmetric clone of `fix_right_border`.\n    pub fn fix_left_border(&mut self) {\n        self.fix_top();\n        if self.len() > 0 {\n            self.borrow_mut().first_kv().fix_left_border_of_left_edge();\n            self.fix_top();\n        }\n    }\n\n    /// Stock up any underfull nodes on the right border of the tree.\n    /// The other nodes, those that are not the root nor a rightmost edge,\n    /// must be prepared to have up to MIN_LEN elements stolen.\n    pub fn fix_right_border_of_plentiful(&mut self) {\n        let mut cur_node = self.borrow_mut();\n        while let Internal(internal) = cur_node.force() {\n            // Check if right-most child is underfull.\n            let mut last_kv = internal.last_kv().consider_for_balancing();\n            debug_assert!(last_kv.left_child_len() >= MIN_LEN * 2);\n            let right_child_len = last_kv.right_child_len();\n            if right_child_len < MIN_LEN {\n                // We need to steal.\n                last_kv.bulk_steal_left(MIN_LEN - right_child_len);\n            }\n\n            // Go further down.\n            cur_node = last_kv.into_right_child();\n        }\n    }\n}\n\nimpl<'a, K: 'a, V: 'a> Handle<NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal>, marker::KV> {\n    fn fix_left_border_of_left_edge(mut self) {\n        while let Internal(internal_kv) = self.force() {\n            self = internal_kv.fix_left_child().first_kv();\n            debug_assert!(self.reborrow().into_node().len() > MIN_LEN);\n        }\n    }\n\n    fn fix_right_border_of_right_edge(mut self) {\n        while let Internal(internal_kv) = self.force() {\n            self = internal_kv.fix_right_child().last_kv();\n            debug_assert!(self.reborrow().into_node().len() > MIN_LEN);\n        }\n    }\n}\n\nimpl<'a, K: 'a, V: 'a> Handle<NodeRef<marker::Mut<'a>, K, V, marker::Internal>, marker::KV> {\n    /// Stocks up the left child, assuming the right child isn't underfull, and\n    /// provisions an extra element to allow merging its children in turn\n    /// without becoming underfull.\n    /// Returns the left child.\n    fn fix_left_child(self) -> NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal> {\n        let mut internal_kv = self.consider_for_balancing();\n        let left_len = internal_kv.left_child_len();\n        debug_assert!(internal_kv.right_child_len() >= MIN_LEN);\n        if internal_kv.can_merge() {\n            internal_kv.merge_tracking_child()\n        } else {\n            // `MIN_LEN + 1` to avoid readjust if merge happens on the next level.\n            let count = (MIN_LEN + 1).saturating_sub(left_len);\n            if count > 0 {\n                internal_kv.bulk_steal_right(count);\n            }\n            internal_kv.into_left_child()\n        }\n    }\n\n    /// Stocks up the right child, assuming the left child isn't underfull, and\n    /// provisions an extra element to allow merging its children in turn\n    /// without becoming underfull.\n    /// Returns wherever the right child ended up.\n    fn fix_right_child(self) -> NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal> {\n        let mut internal_kv = self.consider_for_balancing();\n        let right_len = internal_kv.right_child_len();\n        debug_assert!(internal_kv.left_child_len() >= MIN_LEN);\n        if internal_kv.can_merge() {\n            internal_kv.merge_tracking_child()\n        } else {\n            // `MIN_LEN + 1` to avoid readjust if merge happens on the next level.\n            let count = (MIN_LEN + 1).saturating_sub(right_len);\n            if count > 0 {\n                internal_kv.bulk_steal_left(count);\n            }\n            internal_kv.into_right_child()\n        }\n    }\n}\n//! Collection types.\n\n#![stable(feature = \"rust1\", since = \"1.0.0\")]\n\npub mod binary_heap;\nmod btree;\npub mod linked_list;\npub mod vec_deque;\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub mod btree_map {\n    //! A map based on a B-Tree.\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub use super::btree::map::*;\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub mod btree_set {\n    //! A set based on a B-Tree.\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub use super::btree::set::*;\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\n#[doc(no_inline)]\npub use binary_heap::BinaryHeap;\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\n#[doc(no_inline)]\npub use btree_map::BTreeMap;\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\n#[doc(no_inline)]\npub use btree_set::BTreeSet;\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\n#[doc(no_inline)]\npub use linked_list::LinkedList;\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\n#[doc(no_inline)]\npub use vec_deque::VecDeque;\n\nuse crate::alloc::{Layout, LayoutError};\nuse core::fmt::Display;\n\n/// The error type for `try_reserve` methods.\n#[derive(Clone, PartialEq, Eq, Debug)]\n#[unstable(feature = \"try_reserve\", reason = \"new API\", issue = \"48043\")]\npub enum TryReserveError {\n    /// Error due to the computed capacity exceeding the collection's maximum\n    /// (usually `isize::MAX` bytes).\n    CapacityOverflow,\n\n    /// The memory allocator returned an error\n    AllocError {\n        /// The layout of allocation request that failed\n        layout: Layout,\n\n        #[doc(hidden)]\n        #[unstable(\n            feature = \"container_error_extra\",\n            issue = \"none\",\n            reason = \"\\\n            Enable exposing the allocator’s custom error value \\\n            if an associated type is added in the future: \\\n            https://github.com/rust-lang/wg-allocators/issues/23\"\n        )]\n        non_exhaustive: (),\n    },\n}\n\n#[unstable(feature = \"try_reserve\", reason = \"new API\", issue = \"48043\")]\nimpl From<LayoutError> for TryReserveError {\n    #[inline]\n    fn from(_: LayoutError) -> Self {\n        TryReserveError::CapacityOverflow\n    }\n}\n\n#[unstable(feature = \"try_reserve\", reason = \"new API\", issue = \"48043\")]\nimpl Display for TryReserveError {\n    fn fmt(\n        &self,\n        fmt: &mut core::fmt::Formatter<'_>,\n    ) -> core::result::Result<(), core::fmt::Error> {\n        fmt.write_str(\"memory allocation failed\")?;\n        let reason = match &self {\n            TryReserveError::CapacityOverflow => {\n                \" because the computed capacity exceeded the collection's maximum\"\n            }\n            TryReserveError::AllocError { .. } => \" because the memory allocator returned a error\",\n        };\n        fmt.write_str(reason)\n    }\n}\n\n/// An intermediate trait for specialization of `Extend`.\n#[doc(hidden)]\ntrait SpecExtend<I: IntoIterator> {\n    /// Extends `self` with the contents of the given iterator.\n    fn spec_extend(&mut self, iter: I);\n}\nuse core::fmt;\nuse core::iter::{FusedIterator, TrustedLen, TrustedRandomAccess};\n\nuse super::VecDeque;\n\n/// An owning iterator over the elements of a `VecDeque`.\n///\n/// This `struct` is created by the [`into_iter`] method on [`VecDeque`]\n/// (provided by the `IntoIterator` trait). See its documentation for more.\n///\n/// [`into_iter`]: VecDeque::into_iter\n#[derive(Clone)]\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct IntoIter<T> {\n    pub(crate) inner: VecDeque<T>,\n}\n\n#[stable(feature = \"collection_debug\", since = \"1.17.0\")]\nimpl<T: fmt::Debug> fmt::Debug for IntoIter<T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"IntoIter\").field(&self.inner).finish()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> Iterator for IntoIter<T> {\n    type Item = T;\n\n    #[inline]\n    fn next(&mut self) -> Option<T> {\n        self.inner.pop_front()\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        let len = self.inner.len();\n        (len, Some(len))\n    }\n\n    #[inline]\n    unsafe fn __iterator_get_unchecked(&mut self, idx: usize) -> Self::Item\n    where\n        Self: TrustedRandomAccess,\n    {\n        // Safety: The TrustedRandomAccess contract requires that callers only pass an index\n        // that is in bounds.\n        // Additionally Self: TrustedRandomAccess is only implemented for T: Copy which means even\n        // multiple repeated reads of the same index would be safe and the\n        // values are !Drop, thus won't suffer from double drops.\n        unsafe {\n            let idx = self.inner.wrap_add(self.inner.tail, idx);\n            self.inner.buffer_read(idx)\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> DoubleEndedIterator for IntoIter<T> {\n    #[inline]\n    fn next_back(&mut self) -> Option<T> {\n        self.inner.pop_back()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> ExactSizeIterator for IntoIter<T> {\n    fn is_empty(&self) -> bool {\n        self.inner.is_empty()\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<T> FusedIterator for IntoIter<T> {}\n\n#[unstable(feature = \"trusted_len\", issue = \"37572\")]\nunsafe impl<T> TrustedLen for IntoIter<T> {}\n\n#[doc(hidden)]\n#[unstable(feature = \"trusted_random_access\", issue = \"none\")]\n// T: Copy as approximation for !Drop since get_unchecked does not update the pointers\n// and thus we can't implement drop-handling\nunsafe impl<T> TrustedRandomAccess for IntoIter<T>\nwhere\n    T: Copy,\n{\n    const MAY_HAVE_SIDE_EFFECT: bool = false;\n}\nmacro_rules! __impl_slice_eq1 {\n    ([$($vars:tt)*] $lhs:ty, $rhs:ty, $($constraints:tt)*) => {\n        #[stable(feature = \"vec_deque_partial_eq_slice\", since = \"1.17.0\")]\n        impl<A, B, $($vars)*> PartialEq<$rhs> for $lhs\n        where\n            A: PartialEq<B>,\n            $($constraints)*\n        {\n            fn eq(&self, other: &$rhs) -> bool {\n                if self.len() != other.len() {\n                    return false;\n                }\n                let (sa, sb) = self.as_slices();\n                let (oa, ob) = other[..].split_at(sa.len());\n                sa == oa && sb == ob\n            }\n        }\n    }\n}\nuse core::iter::FusedIterator;\nuse core::ptr::{self, NonNull};\nuse core::{fmt, mem};\n\nuse super::{count, Iter, VecDeque};\n\n/// A draining iterator over the elements of a `VecDeque`.\n///\n/// This `struct` is created by the [`drain`] method on [`VecDeque`]. See its\n/// documentation for more.\n///\n/// [`drain`]: VecDeque::drain\n#[stable(feature = \"drain\", since = \"1.6.0\")]\npub struct Drain<'a, T: 'a> {\n    pub(crate) after_tail: usize,\n    pub(crate) after_head: usize,\n    pub(crate) iter: Iter<'a, T>,\n    pub(crate) deque: NonNull<VecDeque<T>>,\n}\n\n#[stable(feature = \"collection_debug\", since = \"1.17.0\")]\nimpl<T: fmt::Debug> fmt::Debug for Drain<'_, T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"Drain\")\n            .field(&self.after_tail)\n            .field(&self.after_head)\n            .field(&self.iter)\n            .finish()\n    }\n}\n\n#[stable(feature = \"drain\", since = \"1.6.0\")]\nunsafe impl<T: Sync> Sync for Drain<'_, T> {}\n#[stable(feature = \"drain\", since = \"1.6.0\")]\nunsafe impl<T: Send> Send for Drain<'_, T> {}\n\n#[stable(feature = \"drain\", since = \"1.6.0\")]\nimpl<T> Drop for Drain<'_, T> {\n    fn drop(&mut self) {\n        struct DropGuard<'r, 'a, T>(&'r mut Drain<'a, T>);\n\n        impl<'r, 'a, T> Drop for DropGuard<'r, 'a, T> {\n            fn drop(&mut self) {\n                self.0.for_each(drop);\n\n                let source_deque = unsafe { self.0.deque.as_mut() };\n\n                // T = source_deque_tail; H = source_deque_head; t = drain_tail; h = drain_head\n                //\n                //        T   t   h   H\n                // [. . . o o x x o o . . .]\n                //\n                let orig_tail = source_deque.tail;\n                let drain_tail = source_deque.head;\n                let drain_head = self.0.after_tail;\n                let orig_head = self.0.after_head;\n\n                let tail_len = count(orig_tail, drain_tail, source_deque.cap());\n                let head_len = count(drain_head, orig_head, source_deque.cap());\n\n                // Restore the original head value\n                source_deque.head = orig_head;\n\n                match (tail_len, head_len) {\n                    (0, 0) => {\n                        source_deque.head = 0;\n                        source_deque.tail = 0;\n                    }\n                    (0, _) => {\n                        source_deque.tail = drain_head;\n                    }\n                    (_, 0) => {\n                        source_deque.head = drain_tail;\n                    }\n                    _ => unsafe {\n                        if tail_len <= head_len {\n                            source_deque.tail = source_deque.wrap_sub(drain_head, tail_len);\n                            source_deque.wrap_copy(source_deque.tail, orig_tail, tail_len);\n                        } else {\n                            source_deque.head = source_deque.wrap_add(drain_tail, head_len);\n                            source_deque.wrap_copy(drain_tail, drain_head, head_len);\n                        }\n                    },\n                }\n            }\n        }\n\n        while let Some(item) = self.next() {\n            let guard = DropGuard(self);\n            drop(item);\n            mem::forget(guard);\n        }\n\n        DropGuard(self);\n    }\n}\n\n#[stable(feature = \"drain\", since = \"1.6.0\")]\nimpl<T> Iterator for Drain<'_, T> {\n    type Item = T;\n\n    #[inline]\n    fn next(&mut self) -> Option<T> {\n        self.iter.next().map(|elt| unsafe { ptr::read(elt) })\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.iter.size_hint()\n    }\n}\n\n#[stable(feature = \"drain\", since = \"1.6.0\")]\nimpl<T> DoubleEndedIterator for Drain<'_, T> {\n    #[inline]\n    fn next_back(&mut self) -> Option<T> {\n        self.iter.next_back().map(|elt| unsafe { ptr::read(elt) })\n    }\n}\n\n#[stable(feature = \"drain\", since = \"1.6.0\")]\nimpl<T> ExactSizeIterator for Drain<'_, T> {}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<T> FusedIterator for Drain<'_, T> {}\nuse core::ptr::{self};\n\n/// Returns the two slices that cover the `VecDeque`'s valid range\npub trait RingSlices: Sized {\n    fn slice(self, from: usize, to: usize) -> Self;\n    fn split_at(self, i: usize) -> (Self, Self);\n\n    fn ring_slices(buf: Self, head: usize, tail: usize) -> (Self, Self) {\n        let contiguous = tail <= head;\n        if contiguous {\n            let (empty, buf) = buf.split_at(0);\n            (buf.slice(tail, head), empty)\n        } else {\n            let (mid, right) = buf.split_at(tail);\n            let (left, _) = mid.split_at(head);\n            (right, left)\n        }\n    }\n}\n\nimpl<T> RingSlices for &[T] {\n    fn slice(self, from: usize, to: usize) -> Self {\n        &self[from..to]\n    }\n    fn split_at(self, i: usize) -> (Self, Self) {\n        (*self).split_at(i)\n    }\n}\n\nimpl<T> RingSlices for &mut [T] {\n    fn slice(self, from: usize, to: usize) -> Self {\n        &mut self[from..to]\n    }\n    fn split_at(self, i: usize) -> (Self, Self) {\n        (*self).split_at_mut(i)\n    }\n}\n\nimpl<T> RingSlices for *mut [T] {\n    fn slice(self, from: usize, to: usize) -> Self {\n        assert!(from <= to && to < self.len());\n        // Not using `get_unchecked_mut` to keep this a safe operation.\n        let len = to - from;\n        ptr::slice_from_raw_parts_mut(self.as_mut_ptr().wrapping_add(from), len)\n    }\n\n    fn split_at(self, mid: usize) -> (Self, Self) {\n        let len = self.len();\n        let ptr = self.as_mut_ptr();\n        assert!(mid <= len);\n        (\n            ptr::slice_from_raw_parts_mut(ptr, mid),\n            ptr::slice_from_raw_parts_mut(ptr.wrapping_add(mid), len - mid),\n        )\n    }\n}\nuse core::array;\nuse core::cmp::{self};\nuse core::mem::replace;\n\nuse super::VecDeque;\n\n/// PairSlices pairs up equal length slice parts of two deques\n///\n/// For example, given deques \"A\" and \"B\" with the following division into slices:\n///\n/// A: [0 1 2] [3 4 5]\n/// B: [a b] [c d e]\n///\n/// It produces the following sequence of matching slices:\n///\n/// ([0 1], [a b])\n/// (\\[2\\], \\[c\\])\n/// ([3 4], [d e])\n///\n/// and the uneven remainder of either A or B is skipped.\npub struct PairSlices<'a, 'b, T> {\n    pub(crate) a0: &'a mut [T],\n    pub(crate) a1: &'a mut [T],\n    pub(crate) b0: &'b [T],\n    pub(crate) b1: &'b [T],\n}\n\nimpl<'a, 'b, T> PairSlices<'a, 'b, T> {\n    pub fn from(to: &'a mut VecDeque<T>, from: &'b VecDeque<T>) -> Self {\n        let (a0, a1) = to.as_mut_slices();\n        let (b0, b1) = from.as_slices();\n        PairSlices { a0, a1, b0, b1 }\n    }\n\n    pub fn has_remainder(&self) -> bool {\n        !self.b0.is_empty()\n    }\n\n    pub fn remainder(self) -> impl Iterator<Item = &'b [T]> {\n        array::IntoIter::new([self.b0, self.b1])\n    }\n}\n\nimpl<'a, 'b, T> Iterator for PairSlices<'a, 'b, T> {\n    type Item = (&'a mut [T], &'b [T]);\n    fn next(&mut self) -> Option<Self::Item> {\n        // Get next part length\n        let part = cmp::min(self.a0.len(), self.b0.len());\n        if part == 0 {\n            return None;\n        }\n        let (p0, p1) = replace(&mut self.a0, &mut []).split_at_mut(part);\n        let (q0, q1) = self.b0.split_at(part);\n\n        // Move a1 into a0, if it's empty (and b1, b0 the same way).\n        self.a0 = p1;\n        self.b0 = q1;\n        if self.a0.is_empty() {\n            self.a0 = replace(&mut self.a1, &mut []);\n        }\n        if self.b0.is_empty() {\n            self.b0 = replace(&mut self.b1, &[]);\n        }\n        Some((p0, q0))\n    }\n}\n//! A double-ended queue implemented with a growable ring buffer.\n//!\n//! This queue has *O*(1) amortized inserts and removals from both ends of the\n//! container. It also has *O*(1) indexing like a vector. The contained elements\n//! are not required to be copyable, and the queue will be sendable if the\n//! contained type is sendable.\n\n#![stable(feature = \"rust1\", since = \"1.0.0\")]\n\nuse core::cmp::{self, Ordering};\nuse core::fmt;\nuse core::hash::{Hash, Hasher};\nuse core::iter::{repeat_with, FromIterator};\nuse core::marker::PhantomData;\nuse core::mem::{self, ManuallyDrop};\nuse core::ops::{Index, IndexMut, Range, RangeBounds};\nuse core::ptr::{self, NonNull};\nuse core::slice;\n\nuse crate::collections::TryReserveError;\nuse crate::raw_vec::RawVec;\nuse crate::vec::Vec;\n\n#[macro_use]\nmod macros;\n\n#[stable(feature = \"drain\", since = \"1.6.0\")]\npub use self::drain::Drain;\n\nmod drain;\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use self::iter_mut::IterMut;\n\nmod iter_mut;\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use self::into_iter::IntoIter;\n\nmod into_iter;\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use self::iter::Iter;\n\nmod iter;\n\nuse self::pair_slices::PairSlices;\n\nmod pair_slices;\n\nuse self::ring_slices::RingSlices;\n\nmod ring_slices;\n\n#[cfg(test)]\nmod tests;\n\nconst INITIAL_CAPACITY: usize = 7; // 2^3 - 1\nconst MINIMUM_CAPACITY: usize = 1; // 2 - 1\n\nconst MAXIMUM_ZST_CAPACITY: usize = 1 << (usize::BITS - 1); // Largest possible power of two\n\n/// A double-ended queue implemented with a growable ring buffer.\n///\n/// The \"default\" usage of this type as a queue is to use [`push_back`] to add to\n/// the queue, and [`pop_front`] to remove from the queue. [`extend`] and [`append`]\n/// push onto the back in this manner, and iterating over `VecDeque` goes front\n/// to back.\n///\n/// Since `VecDeque` is a ring buffer, its elements are not necessarily contiguous\n/// in memory. If you want to access the elements as a single slice, such as for\n/// efficient sorting, you can use [`make_contiguous`]. It rotates the `VecDeque`\n/// so that its elements do not wrap, and returns a mutable slice to the\n/// now-contiguous element sequence.\n///\n/// [`push_back`]: VecDeque::push_back\n/// [`pop_front`]: VecDeque::pop_front\n/// [`extend`]: VecDeque::extend\n/// [`append`]: VecDeque::append\n/// [`make_contiguous`]: VecDeque::make_contiguous\n#[cfg_attr(not(test), rustc_diagnostic_item = \"vecdeque_type\")]\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct VecDeque<T> {\n    // tail and head are pointers into the buffer. Tail always points\n    // to the first element that could be read, Head always points\n    // to where data should be written.\n    // If tail == head the buffer is empty. The length of the ringbuffer\n    // is defined as the distance between the two.\n    tail: usize,\n    head: usize,\n    buf: RawVec<T>,\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Clone> Clone for VecDeque<T> {\n    fn clone(&self) -> VecDeque<T> {\n        self.iter().cloned().collect()\n    }\n\n    fn clone_from(&mut self, other: &Self) {\n        self.truncate(other.len());\n\n        let mut iter = PairSlices::from(self, other);\n        while let Some((dst, src)) = iter.next() {\n            dst.clone_from_slice(&src);\n        }\n\n        if iter.has_remainder() {\n            for remainder in iter.remainder() {\n                self.extend(remainder.iter().cloned());\n            }\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nunsafe impl<#[may_dangle] T> Drop for VecDeque<T> {\n    fn drop(&mut self) {\n        /// Runs the destructor for all items in the slice when it gets dropped (normally or\n        /// during unwinding).\n        struct Dropper<'a, T>(&'a mut [T]);\n\n        impl<'a, T> Drop for Dropper<'a, T> {\n            fn drop(&mut self) {\n                unsafe {\n                    ptr::drop_in_place(self.0);\n                }\n            }\n        }\n\n        let (front, back) = self.as_mut_slices();\n        unsafe {\n            let _back_dropper = Dropper(back);\n            // use drop for [T]\n            ptr::drop_in_place(front);\n        }\n        // RawVec handles deallocation\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> Default for VecDeque<T> {\n    /// Creates an empty `VecDeque<T>`.\n    #[inline]\n    fn default() -> VecDeque<T> {\n        VecDeque::new()\n    }\n}\n\nimpl<T> VecDeque<T> {\n    /// Marginally more convenient\n    #[inline]\n    fn ptr(&self) -> *mut T {\n        self.buf.ptr()\n    }\n\n    /// Marginally more convenient\n    #[inline]\n    fn cap(&self) -> usize {\n        if mem::size_of::<T>() == 0 {\n            // For zero sized types, we are always at maximum capacity\n            MAXIMUM_ZST_CAPACITY\n        } else {\n            self.buf.capacity()\n        }\n    }\n\n    /// Turn ptr into a slice\n    #[inline]\n    unsafe fn buffer_as_slice(&self) -> &[T] {\n        unsafe { slice::from_raw_parts(self.ptr(), self.cap()) }\n    }\n\n    /// Turn ptr into a mut slice\n    #[inline]\n    unsafe fn buffer_as_mut_slice(&mut self) -> &mut [T] {\n        unsafe { slice::from_raw_parts_mut(self.ptr(), self.cap()) }\n    }\n\n    /// Moves an element out of the buffer\n    #[inline]\n    unsafe fn buffer_read(&mut self, off: usize) -> T {\n        unsafe { ptr::read(self.ptr().add(off)) }\n    }\n\n    /// Writes an element into the buffer, moving it.\n    #[inline]\n    unsafe fn buffer_write(&mut self, off: usize, value: T) {\n        unsafe {\n            ptr::write(self.ptr().add(off), value);\n        }\n    }\n\n    /// Returns `true` if the buffer is at full capacity.\n    #[inline]\n    fn is_full(&self) -> bool {\n        self.cap() - self.len() == 1\n    }\n\n    /// Returns the index in the underlying buffer for a given logical element\n    /// index.\n    #[inline]\n    fn wrap_index(&self, idx: usize) -> usize {\n        wrap_index(idx, self.cap())\n    }\n\n    /// Returns the index in the underlying buffer for a given logical element\n    /// index + addend.\n    #[inline]\n    fn wrap_add(&self, idx: usize, addend: usize) -> usize {\n        wrap_index(idx.wrapping_add(addend), self.cap())\n    }\n\n    /// Returns the index in the underlying buffer for a given logical element\n    /// index - subtrahend.\n    #[inline]\n    fn wrap_sub(&self, idx: usize, subtrahend: usize) -> usize {\n        wrap_index(idx.wrapping_sub(subtrahend), self.cap())\n    }\n\n    /// Copies a contiguous block of memory len long from src to dst\n    #[inline]\n    unsafe fn copy(&self, dst: usize, src: usize, len: usize) {\n        debug_assert!(\n            dst + len <= self.cap(),\n            \"cpy dst={} src={} len={} cap={}\",\n            dst,\n            src,\n            len,\n            self.cap()\n        );\n        debug_assert!(\n            src + len <= self.cap(),\n            \"cpy dst={} src={} len={} cap={}\",\n            dst,\n            src,\n            len,\n            self.cap()\n        );\n        unsafe {\n            ptr::copy(self.ptr().add(src), self.ptr().add(dst), len);\n        }\n    }\n\n    /// Copies a contiguous block of memory len long from src to dst\n    #[inline]\n    unsafe fn copy_nonoverlapping(&self, dst: usize, src: usize, len: usize) {\n        debug_assert!(\n            dst + len <= self.cap(),\n            \"cno dst={} src={} len={} cap={}\",\n            dst,\n            src,\n            len,\n            self.cap()\n        );\n        debug_assert!(\n            src + len <= self.cap(),\n            \"cno dst={} src={} len={} cap={}\",\n            dst,\n            src,\n            len,\n            self.cap()\n        );\n        unsafe {\n            ptr::copy_nonoverlapping(self.ptr().add(src), self.ptr().add(dst), len);\n        }\n    }\n\n    /// Copies a potentially wrapping block of memory len long from src to dest.\n    /// (abs(dst - src) + len) must be no larger than cap() (There must be at\n    /// most one continuous overlapping region between src and dest).\n    unsafe fn wrap_copy(&self, dst: usize, src: usize, len: usize) {\n        #[allow(dead_code)]\n        fn diff(a: usize, b: usize) -> usize {\n            if a <= b { b - a } else { a - b }\n        }\n        debug_assert!(\n            cmp::min(diff(dst, src), self.cap() - diff(dst, src)) + len <= self.cap(),\n            \"wrc dst={} src={} len={} cap={}\",\n            dst,\n            src,\n            len,\n            self.cap()\n        );\n\n        if src == dst || len == 0 {\n            return;\n        }\n\n        let dst_after_src = self.wrap_sub(dst, src) < len;\n\n        let src_pre_wrap_len = self.cap() - src;\n        let dst_pre_wrap_len = self.cap() - dst;\n        let src_wraps = src_pre_wrap_len < len;\n        let dst_wraps = dst_pre_wrap_len < len;\n\n        match (dst_after_src, src_wraps, dst_wraps) {\n            (_, false, false) => {\n                // src doesn't wrap, dst doesn't wrap\n                //\n                //        S . . .\n                // 1 [_ _ A A B B C C _]\n                // 2 [_ _ A A A A B B _]\n                //            D . . .\n                //\n                unsafe {\n                    self.copy(dst, src, len);\n                }\n            }\n            (false, false, true) => {\n                // dst before src, src doesn't wrap, dst wraps\n                //\n                //    S . . .\n                // 1 [A A B B _ _ _ C C]\n                // 2 [A A B B _ _ _ A A]\n                // 3 [B B B B _ _ _ A A]\n                //    . .           D .\n                //\n                unsafe {\n                    self.copy(dst, src, dst_pre_wrap_len);\n                    self.copy(0, src + dst_pre_wrap_len, len - dst_pre_wrap_len);\n                }\n            }\n            (true, false, true) => {\n                // src before dst, src doesn't wrap, dst wraps\n                //\n                //              S . . .\n                // 1 [C C _ _ _ A A B B]\n                // 2 [B B _ _ _ A A B B]\n                // 3 [B B _ _ _ A A A A]\n                //    . .           D .\n                //\n                unsafe {\n                    self.copy(0, src + dst_pre_wrap_len, len - dst_pre_wrap_len);\n                    self.copy(dst, src, dst_pre_wrap_len);\n                }\n            }\n            (false, true, false) => {\n                // dst before src, src wraps, dst doesn't wrap\n                //\n                //    . .           S .\n                // 1 [C C _ _ _ A A B B]\n                // 2 [C C _ _ _ B B B B]\n                // 3 [C C _ _ _ B B C C]\n                //              D . . .\n                //\n                unsafe {\n                    self.copy(dst, src, src_pre_wrap_len);\n                    self.copy(dst + src_pre_wrap_len, 0, len - src_pre_wrap_len);\n                }\n            }\n            (true, true, false) => {\n                // src before dst, src wraps, dst doesn't wrap\n                //\n                //    . .           S .\n                // 1 [A A B B _ _ _ C C]\n                // 2 [A A A A _ _ _ C C]\n                // 3 [C C A A _ _ _ C C]\n                //    D . . .\n                //\n                unsafe {\n                    self.copy(dst + src_pre_wrap_len, 0, len - src_pre_wrap_len);\n                    self.copy(dst, src, src_pre_wrap_len);\n                }\n            }\n            (false, true, true) => {\n                // dst before src, src wraps, dst wraps\n                //\n                //    . . .         S .\n                // 1 [A B C D _ E F G H]\n                // 2 [A B C D _ E G H H]\n                // 3 [A B C D _ E G H A]\n                // 4 [B C C D _ E G H A]\n                //    . .         D . .\n                //\n                debug_assert!(dst_pre_wrap_len > src_pre_wrap_len);\n                let delta = dst_pre_wrap_len - src_pre_wrap_len;\n                unsafe {\n                    self.copy(dst, src, src_pre_wrap_len);\n                    self.copy(dst + src_pre_wrap_len, 0, delta);\n                    self.copy(0, delta, len - dst_pre_wrap_len);\n                }\n            }\n            (true, true, true) => {\n                // src before dst, src wraps, dst wraps\n                //\n                //    . .         S . .\n                // 1 [A B C D _ E F G H]\n                // 2 [A A B D _ E F G H]\n                // 3 [H A B D _ E F G H]\n                // 4 [H A B D _ E F F G]\n                //    . . .         D .\n                //\n                debug_assert!(src_pre_wrap_len > dst_pre_wrap_len);\n                let delta = src_pre_wrap_len - dst_pre_wrap_len;\n                unsafe {\n                    self.copy(delta, 0, len - src_pre_wrap_len);\n                    self.copy(0, self.cap() - delta, delta);\n                    self.copy(dst, src, dst_pre_wrap_len);\n                }\n            }\n        }\n    }\n\n    /// Frobs the head and tail sections around to handle the fact that we\n    /// just reallocated. Unsafe because it trusts old_capacity.\n    #[inline]\n    unsafe fn handle_capacity_increase(&mut self, old_capacity: usize) {\n        let new_capacity = self.cap();\n\n        // Move the shortest contiguous section of the ring buffer\n        //    T             H\n        //   [o o o o o o o . ]\n        //    T             H\n        // A [o o o o o o o . . . . . . . . . ]\n        //        H T\n        //   [o o . o o o o o ]\n        //          T             H\n        // B [. . . o o o o o o o . . . . . . ]\n        //              H T\n        //   [o o o o o . o o ]\n        //              H                 T\n        // C [o o o o o . . . . . . . . . o o ]\n\n        if self.tail <= self.head {\n            // A\n            // Nop\n        } else if self.head < old_capacity - self.tail {\n            // B\n            unsafe {\n                self.copy_nonoverlapping(old_capacity, 0, self.head);\n            }\n            self.head += old_capacity;\n            debug_assert!(self.head > self.tail);\n        } else {\n            // C\n            let new_tail = new_capacity - (old_capacity - self.tail);\n            unsafe {\n                self.copy_nonoverlapping(new_tail, self.tail, old_capacity - self.tail);\n            }\n            self.tail = new_tail;\n            debug_assert!(self.head < self.tail);\n        }\n        debug_assert!(self.head < self.cap());\n        debug_assert!(self.tail < self.cap());\n        debug_assert!(self.cap().count_ones() == 1);\n    }\n}\n\nimpl<T> VecDeque<T> {\n    /// Creates an empty `VecDeque`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let vector: VecDeque<u32> = VecDeque::new();\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn new() -> VecDeque<T> {\n        VecDeque::with_capacity(INITIAL_CAPACITY)\n    }\n\n    /// Creates an empty `VecDeque` with space for at least `capacity` elements.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let vector: VecDeque<u32> = VecDeque::with_capacity(10);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn with_capacity(capacity: usize) -> VecDeque<T> {\n        // +1 since the ringbuffer always leaves one space empty\n        let cap = cmp::max(capacity + 1, MINIMUM_CAPACITY + 1).next_power_of_two();\n        assert!(cap > capacity, \"capacity overflow\");\n\n        VecDeque { tail: 0, head: 0, buf: RawVec::with_capacity(cap) }\n    }\n\n    /// Provides a reference to the element at the given index.\n    ///\n    /// Element at index 0 is the front of the queue.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf = VecDeque::new();\n    /// buf.push_back(3);\n    /// buf.push_back(4);\n    /// buf.push_back(5);\n    /// assert_eq!(buf.get(1), Some(&4));\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn get(&self, index: usize) -> Option<&T> {\n        if index < self.len() {\n            let idx = self.wrap_add(self.tail, index);\n            unsafe { Some(&*self.ptr().add(idx)) }\n        } else {\n            None\n        }\n    }\n\n    /// Provides a mutable reference to the element at the given index.\n    ///\n    /// Element at index 0 is the front of the queue.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf = VecDeque::new();\n    /// buf.push_back(3);\n    /// buf.push_back(4);\n    /// buf.push_back(5);\n    /// if let Some(elem) = buf.get_mut(1) {\n    ///     *elem = 7;\n    /// }\n    ///\n    /// assert_eq!(buf[1], 7);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn get_mut(&mut self, index: usize) -> Option<&mut T> {\n        if index < self.len() {\n            let idx = self.wrap_add(self.tail, index);\n            unsafe { Some(&mut *self.ptr().add(idx)) }\n        } else {\n            None\n        }\n    }\n\n    /// Swaps elements at indices `i` and `j`.\n    ///\n    /// `i` and `j` may be equal.\n    ///\n    /// Element at index 0 is the front of the queue.\n    ///\n    /// # Panics\n    ///\n    /// Panics if either index is out of bounds.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf = VecDeque::new();\n    /// buf.push_back(3);\n    /// buf.push_back(4);\n    /// buf.push_back(5);\n    /// assert_eq!(buf, [3, 4, 5]);\n    /// buf.swap(0, 2);\n    /// assert_eq!(buf, [5, 4, 3]);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn swap(&mut self, i: usize, j: usize) {\n        assert!(i < self.len());\n        assert!(j < self.len());\n        let ri = self.wrap_add(self.tail, i);\n        let rj = self.wrap_add(self.tail, j);\n        unsafe { ptr::swap(self.ptr().add(ri), self.ptr().add(rj)) }\n    }\n\n    /// Returns the number of elements the `VecDeque` can hold without\n    /// reallocating.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let buf: VecDeque<i32> = VecDeque::with_capacity(10);\n    /// assert!(buf.capacity() >= 10);\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn capacity(&self) -> usize {\n        self.cap() - 1\n    }\n\n    /// Reserves the minimum capacity for exactly `additional` more elements to be inserted in the\n    /// given `VecDeque`. Does nothing if the capacity is already sufficient.\n    ///\n    /// Note that the allocator may give the collection more space than it requests. Therefore\n    /// capacity can not be relied upon to be precisely minimal. Prefer [`reserve`] if future\n    /// insertions are expected.\n    ///\n    /// # Panics\n    ///\n    /// Panics if the new capacity overflows `usize`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf: VecDeque<i32> = vec![1].into_iter().collect();\n    /// buf.reserve_exact(10);\n    /// assert!(buf.capacity() >= 11);\n    /// ```\n    ///\n    /// [`reserve`]: VecDeque::reserve\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn reserve_exact(&mut self, additional: usize) {\n        self.reserve(additional);\n    }\n\n    /// Reserves capacity for at least `additional` more elements to be inserted in the given\n    /// `VecDeque`. The collection may reserve more space to avoid frequent reallocations.\n    ///\n    /// # Panics\n    ///\n    /// Panics if the new capacity overflows `usize`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf: VecDeque<i32> = vec![1].into_iter().collect();\n    /// buf.reserve(10);\n    /// assert!(buf.capacity() >= 11);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn reserve(&mut self, additional: usize) {\n        let old_cap = self.cap();\n        let used_cap = self.len() + 1;\n        let new_cap = used_cap\n            .checked_add(additional)\n            .and_then(|needed_cap| needed_cap.checked_next_power_of_two())\n            .expect(\"capacity overflow\");\n\n        if new_cap > old_cap {\n            self.buf.reserve_exact(used_cap, new_cap - used_cap);\n            unsafe {\n                self.handle_capacity_increase(old_cap);\n            }\n        }\n    }\n\n    /// Tries to reserve the minimum capacity for exactly `additional` more elements to\n    /// be inserted in the given `VecDeque<T>`. After calling `try_reserve_exact`,\n    /// capacity will be greater than or equal to `self.len() + additional`.\n    /// Does nothing if the capacity is already sufficient.\n    ///\n    /// Note that the allocator may give the collection more space than it\n    /// requests. Therefore, capacity can not be relied upon to be precisely\n    /// minimal. Prefer `reserve` if future insertions are expected.\n    ///\n    /// # Errors\n    ///\n    /// If the capacity overflows `usize`, or the allocator reports a failure, then an error\n    /// is returned.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(try_reserve)]\n    /// use std::collections::TryReserveError;\n    /// use std::collections::VecDeque;\n    ///\n    /// fn process_data(data: &[u32]) -> Result<VecDeque<u32>, TryReserveError> {\n    ///     let mut output = VecDeque::new();\n    ///\n    ///     // Pre-reserve the memory, exiting if we can't\n    ///     output.try_reserve_exact(data.len())?;\n    ///\n    ///     // Now we know this can't OOM(Out-Of-Memory) in the middle of our complex work\n    ///     output.extend(data.iter().map(|&val| {\n    ///         val * 2 + 5 // very complicated\n    ///     }));\n    ///\n    ///     Ok(output)\n    /// }\n    /// # process_data(&[1, 2, 3]).expect(\"why is the test harness OOMing on 12 bytes?\");\n    /// ```\n    #[unstable(feature = \"try_reserve\", reason = \"new API\", issue = \"48043\")]\n    pub fn try_reserve_exact(&mut self, additional: usize) -> Result<(), TryReserveError> {\n        self.try_reserve(additional)\n    }\n\n    /// Tries to reserve capacity for at least `additional` more elements to be inserted\n    /// in the given `VecDeque<T>`. The collection may reserve more space to avoid\n    /// frequent reallocations. After calling `try_reserve`, capacity will be\n    /// greater than or equal to `self.len() + additional`. Does nothing if\n    /// capacity is already sufficient.\n    ///\n    /// # Errors\n    ///\n    /// If the capacity overflows `usize`, or the allocator reports a failure, then an error\n    /// is returned.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(try_reserve)]\n    /// use std::collections::TryReserveError;\n    /// use std::collections::VecDeque;\n    ///\n    /// fn process_data(data: &[u32]) -> Result<VecDeque<u32>, TryReserveError> {\n    ///     let mut output = VecDeque::new();\n    ///\n    ///     // Pre-reserve the memory, exiting if we can't\n    ///     output.try_reserve(data.len())?;\n    ///\n    ///     // Now we know this can't OOM in the middle of our complex work\n    ///     output.extend(data.iter().map(|&val| {\n    ///         val * 2 + 5 // very complicated\n    ///     }));\n    ///\n    ///     Ok(output)\n    /// }\n    /// # process_data(&[1, 2, 3]).expect(\"why is the test harness OOMing on 12 bytes?\");\n    /// ```\n    #[unstable(feature = \"try_reserve\", reason = \"new API\", issue = \"48043\")]\n    pub fn try_reserve(&mut self, additional: usize) -> Result<(), TryReserveError> {\n        let old_cap = self.cap();\n        let used_cap = self.len() + 1;\n        let new_cap = used_cap\n            .checked_add(additional)\n            .and_then(|needed_cap| needed_cap.checked_next_power_of_two())\n            .ok_or(TryReserveError::CapacityOverflow)?;\n\n        if new_cap > old_cap {\n            self.buf.try_reserve_exact(used_cap, new_cap - used_cap)?;\n            unsafe {\n                self.handle_capacity_increase(old_cap);\n            }\n        }\n        Ok(())\n    }\n\n    /// Shrinks the capacity of the `VecDeque` as much as possible.\n    ///\n    /// It will drop down as close as possible to the length but the allocator may still inform the\n    /// `VecDeque` that there is space for a few more elements.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf = VecDeque::with_capacity(15);\n    /// buf.extend(0..4);\n    /// assert_eq!(buf.capacity(), 15);\n    /// buf.shrink_to_fit();\n    /// assert!(buf.capacity() >= 4);\n    /// ```\n    #[stable(feature = \"deque_extras_15\", since = \"1.5.0\")]\n    pub fn shrink_to_fit(&mut self) {\n        self.shrink_to(0);\n    }\n\n    /// Shrinks the capacity of the `VecDeque` with a lower bound.\n    ///\n    /// The capacity will remain at least as large as both the length\n    /// and the supplied value.\n    ///\n    /// If the current capacity is less than the lower limit, this is a no-op.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(shrink_to)]\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf = VecDeque::with_capacity(15);\n    /// buf.extend(0..4);\n    /// assert_eq!(buf.capacity(), 15);\n    /// buf.shrink_to(6);\n    /// assert!(buf.capacity() >= 6);\n    /// buf.shrink_to(0);\n    /// assert!(buf.capacity() >= 4);\n    /// ```\n    #[unstable(feature = \"shrink_to\", reason = \"new API\", issue = \"56431\")]\n    pub fn shrink_to(&mut self, min_capacity: usize) {\n        let min_capacity = cmp::min(min_capacity, self.capacity());\n        // We don't have to worry about an overflow as neither `self.len()` nor `self.capacity()`\n        // can ever be `usize::MAX`. +1 as the ringbuffer always leaves one space empty.\n        let target_cap = cmp::max(cmp::max(min_capacity, self.len()) + 1, MINIMUM_CAPACITY + 1)\n            .next_power_of_two();\n\n        if target_cap < self.cap() {\n            // There are three cases of interest:\n            //   All elements are out of desired bounds\n            //   Elements are contiguous, and head is out of desired bounds\n            //   Elements are discontiguous, and tail is out of desired bounds\n            //\n            // At all other times, element positions are unaffected.\n            //\n            // Indicates that elements at the head should be moved.\n            let head_outside = self.head == 0 || self.head >= target_cap;\n            // Move elements from out of desired bounds (positions after target_cap)\n            if self.tail >= target_cap && head_outside {\n                //                    T             H\n                //   [. . . . . . . . o o o o o o o . ]\n                //    T             H\n                //   [o o o o o o o . ]\n                unsafe {\n                    self.copy_nonoverlapping(0, self.tail, self.len());\n                }\n                self.head = self.len();\n                self.tail = 0;\n            } else if self.tail != 0 && self.tail < target_cap && head_outside {\n                //          T             H\n                //   [. . . o o o o o o o . . . . . . ]\n                //        H T\n                //   [o o . o o o o o ]\n                let len = self.wrap_sub(self.head, target_cap);\n                unsafe {\n                    self.copy_nonoverlapping(0, target_cap, len);\n                }\n                self.head = len;\n                debug_assert!(self.head < self.tail);\n            } else if self.tail >= target_cap {\n                //              H                 T\n                //   [o o o o o . . . . . . . . . o o ]\n                //              H T\n                //   [o o o o o . o o ]\n                debug_assert!(self.wrap_sub(self.head, 1) < target_cap);\n                let len = self.cap() - self.tail;\n                let new_tail = target_cap - len;\n                unsafe {\n                    self.copy_nonoverlapping(new_tail, self.tail, len);\n                }\n                self.tail = new_tail;\n                debug_assert!(self.head < self.tail);\n            }\n\n            self.buf.shrink_to_fit(target_cap);\n\n            debug_assert!(self.head < self.cap());\n            debug_assert!(self.tail < self.cap());\n            debug_assert!(self.cap().count_ones() == 1);\n        }\n    }\n\n    /// Shortens the `VecDeque`, keeping the first `len` elements and dropping\n    /// the rest.\n    ///\n    /// If `len` is greater than the `VecDeque`'s current length, this has no\n    /// effect.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf = VecDeque::new();\n    /// buf.push_back(5);\n    /// buf.push_back(10);\n    /// buf.push_back(15);\n    /// assert_eq!(buf, [5, 10, 15]);\n    /// buf.truncate(1);\n    /// assert_eq!(buf, [5]);\n    /// ```\n    #[stable(feature = \"deque_extras\", since = \"1.16.0\")]\n    pub fn truncate(&mut self, len: usize) {\n        /// Runs the destructor for all items in the slice when it gets dropped (normally or\n        /// during unwinding).\n        struct Dropper<'a, T>(&'a mut [T]);\n\n        impl<'a, T> Drop for Dropper<'a, T> {\n            fn drop(&mut self) {\n                unsafe {\n                    ptr::drop_in_place(self.0);\n                }\n            }\n        }\n\n        // Safe because:\n        //\n        // * Any slice passed to `drop_in_place` is valid; the second case has\n        //   `len <= front.len()` and returning on `len > self.len()` ensures\n        //   `begin <= back.len()` in the first case\n        // * The head of the VecDeque is moved before calling `drop_in_place`,\n        //   so no value is dropped twice if `drop_in_place` panics\n        unsafe {\n            if len > self.len() {\n                return;\n            }\n            let num_dropped = self.len() - len;\n            let (front, back) = self.as_mut_slices();\n            if len > front.len() {\n                let begin = len - front.len();\n                let drop_back = back.get_unchecked_mut(begin..) as *mut _;\n                self.head = self.wrap_sub(self.head, num_dropped);\n                ptr::drop_in_place(drop_back);\n            } else {\n                let drop_back = back as *mut _;\n                let drop_front = front.get_unchecked_mut(len..) as *mut _;\n                self.head = self.wrap_sub(self.head, num_dropped);\n\n                // Make sure the second half is dropped even when a destructor\n                // in the first one panics.\n                let _back_dropper = Dropper(&mut *drop_back);\n                ptr::drop_in_place(drop_front);\n            }\n        }\n    }\n\n    /// Returns a front-to-back iterator.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf = VecDeque::new();\n    /// buf.push_back(5);\n    /// buf.push_back(3);\n    /// buf.push_back(4);\n    /// let b: &[_] = &[&5, &3, &4];\n    /// let c: Vec<&i32> = buf.iter().collect();\n    /// assert_eq!(&c[..], b);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn iter(&self) -> Iter<'_, T> {\n        Iter { tail: self.tail, head: self.head, ring: unsafe { self.buffer_as_slice() } }\n    }\n\n    /// Returns a front-to-back iterator that returns mutable references.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf = VecDeque::new();\n    /// buf.push_back(5);\n    /// buf.push_back(3);\n    /// buf.push_back(4);\n    /// for num in buf.iter_mut() {\n    ///     *num = *num - 2;\n    /// }\n    /// let b: &[_] = &[&mut 3, &mut 1, &mut 2];\n    /// assert_eq!(&buf.iter_mut().collect::<Vec<&mut i32>>()[..], b);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn iter_mut(&mut self) -> IterMut<'_, T> {\n        // SAFETY: The internal `IterMut` safety invariant is established because the\n        // `ring` we create is a dereferencable slice for lifetime '_.\n        IterMut {\n            tail: self.tail,\n            head: self.head,\n            ring: ptr::slice_from_raw_parts_mut(self.ptr(), self.cap()),\n            phantom: PhantomData,\n        }\n    }\n\n    /// Returns a pair of slices which contain, in order, the contents of the\n    /// `VecDeque`.\n    ///\n    /// If [`make_contiguous`] was previously called, all elements of the\n    /// `VecDeque` will be in the first slice and the second slice will be empty.\n    ///\n    /// [`make_contiguous`]: VecDeque::make_contiguous\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut vector = VecDeque::new();\n    ///\n    /// vector.push_back(0);\n    /// vector.push_back(1);\n    /// vector.push_back(2);\n    ///\n    /// assert_eq!(vector.as_slices(), (&[0, 1, 2][..], &[][..]));\n    ///\n    /// vector.push_front(10);\n    /// vector.push_front(9);\n    ///\n    /// assert_eq!(vector.as_slices(), (&[9, 10][..], &[0, 1, 2][..]));\n    /// ```\n    #[inline]\n    #[stable(feature = \"deque_extras_15\", since = \"1.5.0\")]\n    pub fn as_slices(&self) -> (&[T], &[T]) {\n        unsafe {\n            let buf = self.buffer_as_slice();\n            RingSlices::ring_slices(buf, self.head, self.tail)\n        }\n    }\n\n    /// Returns a pair of slices which contain, in order, the contents of the\n    /// `VecDeque`.\n    ///\n    /// If [`make_contiguous`] was previously called, all elements of the\n    /// `VecDeque` will be in the first slice and the second slice will be empty.\n    ///\n    /// [`make_contiguous`]: VecDeque::make_contiguous\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut vector = VecDeque::new();\n    ///\n    /// vector.push_back(0);\n    /// vector.push_back(1);\n    ///\n    /// vector.push_front(10);\n    /// vector.push_front(9);\n    ///\n    /// vector.as_mut_slices().0[0] = 42;\n    /// vector.as_mut_slices().1[0] = 24;\n    /// assert_eq!(vector.as_slices(), (&[42, 10][..], &[24, 1][..]));\n    /// ```\n    #[inline]\n    #[stable(feature = \"deque_extras_15\", since = \"1.5.0\")]\n    pub fn as_mut_slices(&mut self) -> (&mut [T], &mut [T]) {\n        unsafe {\n            let head = self.head;\n            let tail = self.tail;\n            let buf = self.buffer_as_mut_slice();\n            RingSlices::ring_slices(buf, head, tail)\n        }\n    }\n\n    /// Returns the number of elements in the `VecDeque`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut v = VecDeque::new();\n    /// assert_eq!(v.len(), 0);\n    /// v.push_back(1);\n    /// assert_eq!(v.len(), 1);\n    /// ```\n    #[doc(alias = \"length\")]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn len(&self) -> usize {\n        count(self.tail, self.head, self.cap())\n    }\n\n    /// Returns `true` if the `VecDeque` is empty.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut v = VecDeque::new();\n    /// assert!(v.is_empty());\n    /// v.push_front(1);\n    /// assert!(!v.is_empty());\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn is_empty(&self) -> bool {\n        self.tail == self.head\n    }\n\n    fn range_tail_head<R>(&self, range: R) -> (usize, usize)\n    where\n        R: RangeBounds<usize>,\n    {\n        let Range { start, end } = slice::range(range, ..self.len());\n        let tail = self.wrap_add(self.tail, start);\n        let head = self.wrap_add(self.tail, end);\n        (tail, head)\n    }\n\n    /// Creates an iterator that covers the specified range in the `VecDeque`.\n    ///\n    /// # Panics\n    ///\n    /// Panics if the starting point is greater than the end point or if\n    /// the end point is greater than the length of the vector.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let v: VecDeque<_> = vec![1, 2, 3].into_iter().collect();\n    /// let range = v.range(2..).copied().collect::<VecDeque<_>>();\n    /// assert_eq!(range, [3]);\n    ///\n    /// // A full range covers all contents\n    /// let all = v.range(..);\n    /// assert_eq!(all.len(), 3);\n    /// ```\n    #[inline]\n    #[stable(feature = \"deque_range\", since = \"1.51.0\")]\n    pub fn range<R>(&self, range: R) -> Iter<'_, T>\n    where\n        R: RangeBounds<usize>,\n    {\n        let (tail, head) = self.range_tail_head(range);\n        Iter {\n            tail,\n            head,\n            // The shared reference we have in &self is maintained in the '_ of Iter.\n            ring: unsafe { self.buffer_as_slice() },\n        }\n    }\n\n    /// Creates an iterator that covers the specified mutable range in the `VecDeque`.\n    ///\n    /// # Panics\n    ///\n    /// Panics if the starting point is greater than the end point or if\n    /// the end point is greater than the length of the vector.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut v: VecDeque<_> = vec![1, 2, 3].into_iter().collect();\n    /// for v in v.range_mut(2..) {\n    ///   *v *= 2;\n    /// }\n    /// assert_eq!(v, vec![1, 2, 6]);\n    ///\n    /// // A full range covers all contents\n    /// for v in v.range_mut(..) {\n    ///   *v *= 2;\n    /// }\n    /// assert_eq!(v, vec![2, 4, 12]);\n    /// ```\n    #[inline]\n    #[stable(feature = \"deque_range\", since = \"1.51.0\")]\n    pub fn range_mut<R>(&mut self, range: R) -> IterMut<'_, T>\n    where\n        R: RangeBounds<usize>,\n    {\n        let (tail, head) = self.range_tail_head(range);\n\n        // SAFETY: The internal `IterMut` safety invariant is established because the\n        // `ring` we create is a dereferencable slice for lifetime '_.\n        IterMut {\n            tail,\n            head,\n            ring: ptr::slice_from_raw_parts_mut(self.ptr(), self.cap()),\n            phantom: PhantomData,\n        }\n    }\n\n    /// Creates a draining iterator that removes the specified range in the\n    /// `VecDeque` and yields the removed items.\n    ///\n    /// Note 1: The element range is removed even if the iterator is not\n    /// consumed until the end.\n    ///\n    /// Note 2: It is unspecified how many elements are removed from the deque,\n    /// if the `Drain` value is not dropped, but the borrow it holds expires\n    /// (e.g., due to `mem::forget`).\n    ///\n    /// # Panics\n    ///\n    /// Panics if the starting point is greater than the end point or if\n    /// the end point is greater than the length of the vector.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut v: VecDeque<_> = vec![1, 2, 3].into_iter().collect();\n    /// let drained = v.drain(2..).collect::<VecDeque<_>>();\n    /// assert_eq!(drained, [3]);\n    /// assert_eq!(v, [1, 2]);\n    ///\n    /// // A full range clears all contents\n    /// v.drain(..);\n    /// assert!(v.is_empty());\n    /// ```\n    #[inline]\n    #[stable(feature = \"drain\", since = \"1.6.0\")]\n    pub fn drain<R>(&mut self, range: R) -> Drain<'_, T>\n    where\n        R: RangeBounds<usize>,\n    {\n        // Memory safety\n        //\n        // When the Drain is first created, the source deque is shortened to\n        // make sure no uninitialized or moved-from elements are accessible at\n        // all if the Drain's destructor never gets to run.\n        //\n        // Drain will ptr::read out the values to remove.\n        // When finished, the remaining data will be copied back to cover the hole,\n        // and the head/tail values will be restored correctly.\n        //\n        let (drain_tail, drain_head) = self.range_tail_head(range);\n\n        // The deque's elements are parted into three segments:\n        // * self.tail  -> drain_tail\n        // * drain_tail -> drain_head\n        // * drain_head -> self.head\n        //\n        // T = self.tail; H = self.head; t = drain_tail; h = drain_head\n        //\n        // We store drain_tail as self.head, and drain_head and self.head as\n        // after_tail and after_head respectively on the Drain. This also\n        // truncates the effective array such that if the Drain is leaked, we\n        // have forgotten about the potentially moved values after the start of\n        // the drain.\n        //\n        //        T   t   h   H\n        // [. . . o o x x o o . . .]\n        //\n        let head = self.head;\n\n        // \"forget\" about the values after the start of the drain until after\n        // the drain is complete and the Drain destructor is run.\n        self.head = drain_tail;\n\n        Drain {\n            deque: NonNull::from(&mut *self),\n            after_tail: drain_head,\n            after_head: head,\n            iter: Iter {\n                tail: drain_tail,\n                head: drain_head,\n                // Crucially, we only create shared references from `self` here and read from\n                // it.  We do not write to `self` nor reborrow to a mutable reference.\n                // Hence the raw pointer we created above, for `deque`, remains valid.\n                ring: unsafe { self.buffer_as_slice() },\n            },\n        }\n    }\n\n    /// Clears the `VecDeque`, removing all values.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut v = VecDeque::new();\n    /// v.push_back(1);\n    /// v.clear();\n    /// assert!(v.is_empty());\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    #[inline]\n    pub fn clear(&mut self) {\n        self.truncate(0);\n    }\n\n    /// Returns `true` if the `VecDeque` contains an element equal to the\n    /// given value.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut vector: VecDeque<u32> = VecDeque::new();\n    ///\n    /// vector.push_back(0);\n    /// vector.push_back(1);\n    ///\n    /// assert_eq!(vector.contains(&1), true);\n    /// assert_eq!(vector.contains(&10), false);\n    /// ```\n    #[stable(feature = \"vec_deque_contains\", since = \"1.12.0\")]\n    pub fn contains(&self, x: &T) -> bool\n    where\n        T: PartialEq<T>,\n    {\n        let (a, b) = self.as_slices();\n        a.contains(x) || b.contains(x)\n    }\n\n    /// Provides a reference to the front element, or `None` if the `VecDeque` is\n    /// empty.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut d = VecDeque::new();\n    /// assert_eq!(d.front(), None);\n    ///\n    /// d.push_back(1);\n    /// d.push_back(2);\n    /// assert_eq!(d.front(), Some(&1));\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn front(&self) -> Option<&T> {\n        self.get(0)\n    }\n\n    /// Provides a mutable reference to the front element, or `None` if the\n    /// `VecDeque` is empty.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut d = VecDeque::new();\n    /// assert_eq!(d.front_mut(), None);\n    ///\n    /// d.push_back(1);\n    /// d.push_back(2);\n    /// match d.front_mut() {\n    ///     Some(x) => *x = 9,\n    ///     None => (),\n    /// }\n    /// assert_eq!(d.front(), Some(&9));\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn front_mut(&mut self) -> Option<&mut T> {\n        self.get_mut(0)\n    }\n\n    /// Provides a reference to the back element, or `None` if the `VecDeque` is\n    /// empty.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut d = VecDeque::new();\n    /// assert_eq!(d.back(), None);\n    ///\n    /// d.push_back(1);\n    /// d.push_back(2);\n    /// assert_eq!(d.back(), Some(&2));\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn back(&self) -> Option<&T> {\n        self.get(self.len().wrapping_sub(1))\n    }\n\n    /// Provides a mutable reference to the back element, or `None` if the\n    /// `VecDeque` is empty.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut d = VecDeque::new();\n    /// assert_eq!(d.back(), None);\n    ///\n    /// d.push_back(1);\n    /// d.push_back(2);\n    /// match d.back_mut() {\n    ///     Some(x) => *x = 9,\n    ///     None => (),\n    /// }\n    /// assert_eq!(d.back(), Some(&9));\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn back_mut(&mut self) -> Option<&mut T> {\n        self.get_mut(self.len().wrapping_sub(1))\n    }\n\n    /// Removes the first element and returns it, or `None` if the `VecDeque` is\n    /// empty.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut d = VecDeque::new();\n    /// d.push_back(1);\n    /// d.push_back(2);\n    ///\n    /// assert_eq!(d.pop_front(), Some(1));\n    /// assert_eq!(d.pop_front(), Some(2));\n    /// assert_eq!(d.pop_front(), None);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn pop_front(&mut self) -> Option<T> {\n        if self.is_empty() {\n            None\n        } else {\n            let tail = self.tail;\n            self.tail = self.wrap_add(self.tail, 1);\n            unsafe { Some(self.buffer_read(tail)) }\n        }\n    }\n\n    /// Removes the last element from the `VecDeque` and returns it, or `None` if\n    /// it is empty.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf = VecDeque::new();\n    /// assert_eq!(buf.pop_back(), None);\n    /// buf.push_back(1);\n    /// buf.push_back(3);\n    /// assert_eq!(buf.pop_back(), Some(3));\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn pop_back(&mut self) -> Option<T> {\n        if self.is_empty() {\n            None\n        } else {\n            self.head = self.wrap_sub(self.head, 1);\n            let head = self.head;\n            unsafe { Some(self.buffer_read(head)) }\n        }\n    }\n\n    /// Prepends an element to the `VecDeque`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut d = VecDeque::new();\n    /// d.push_front(1);\n    /// d.push_front(2);\n    /// assert_eq!(d.front(), Some(&2));\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn push_front(&mut self, value: T) {\n        if self.is_full() {\n            self.grow();\n        }\n\n        self.tail = self.wrap_sub(self.tail, 1);\n        let tail = self.tail;\n        unsafe {\n            self.buffer_write(tail, value);\n        }\n    }\n\n    /// Appends an element to the back of the `VecDeque`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf = VecDeque::new();\n    /// buf.push_back(1);\n    /// buf.push_back(3);\n    /// assert_eq!(3, *buf.back().unwrap());\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn push_back(&mut self, value: T) {\n        if self.is_full() {\n            self.grow();\n        }\n\n        let head = self.head;\n        self.head = self.wrap_add(self.head, 1);\n        unsafe { self.buffer_write(head, value) }\n    }\n\n    #[inline]\n    fn is_contiguous(&self) -> bool {\n        // FIXME: Should we consider `head == 0` to mean\n        // that `self` is contiguous?\n        self.tail <= self.head\n    }\n\n    /// Removes an element from anywhere in the `VecDeque` and returns it,\n    /// replacing it with the first element.\n    ///\n    /// This does not preserve ordering, but is *O*(1).\n    ///\n    /// Returns `None` if `index` is out of bounds.\n    ///\n    /// Element at index 0 is the front of the queue.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf = VecDeque::new();\n    /// assert_eq!(buf.swap_remove_front(0), None);\n    /// buf.push_back(1);\n    /// buf.push_back(2);\n    /// buf.push_back(3);\n    /// assert_eq!(buf, [1, 2, 3]);\n    ///\n    /// assert_eq!(buf.swap_remove_front(2), Some(3));\n    /// assert_eq!(buf, [2, 1]);\n    /// ```\n    #[stable(feature = \"deque_extras_15\", since = \"1.5.0\")]\n    pub fn swap_remove_front(&mut self, index: usize) -> Option<T> {\n        let length = self.len();\n        if length > 0 && index < length && index != 0 {\n            self.swap(index, 0);\n        } else if index >= length {\n            return None;\n        }\n        self.pop_front()\n    }\n\n    /// Removes an element from anywhere in the `VecDeque` and returns it, replacing it with the\n    /// last element.\n    ///\n    /// This does not preserve ordering, but is *O*(1).\n    ///\n    /// Returns `None` if `index` is out of bounds.\n    ///\n    /// Element at index 0 is the front of the queue.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf = VecDeque::new();\n    /// assert_eq!(buf.swap_remove_back(0), None);\n    /// buf.push_back(1);\n    /// buf.push_back(2);\n    /// buf.push_back(3);\n    /// assert_eq!(buf, [1, 2, 3]);\n    ///\n    /// assert_eq!(buf.swap_remove_back(0), Some(1));\n    /// assert_eq!(buf, [3, 2]);\n    /// ```\n    #[stable(feature = \"deque_extras_15\", since = \"1.5.0\")]\n    pub fn swap_remove_back(&mut self, index: usize) -> Option<T> {\n        let length = self.len();\n        if length > 0 && index < length - 1 {\n            self.swap(index, length - 1);\n        } else if index >= length {\n            return None;\n        }\n        self.pop_back()\n    }\n\n    /// Inserts an element at `index` within the `VecDeque`, shifting all elements with indices\n    /// greater than or equal to `index` towards the back.\n    ///\n    /// Element at index 0 is the front of the queue.\n    ///\n    /// # Panics\n    ///\n    /// Panics if `index` is greater than `VecDeque`'s length\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut vec_deque = VecDeque::new();\n    /// vec_deque.push_back('a');\n    /// vec_deque.push_back('b');\n    /// vec_deque.push_back('c');\n    /// assert_eq!(vec_deque, &['a', 'b', 'c']);\n    ///\n    /// vec_deque.insert(1, 'd');\n    /// assert_eq!(vec_deque, &['a', 'd', 'b', 'c']);\n    /// ```\n    #[stable(feature = \"deque_extras_15\", since = \"1.5.0\")]\n    pub fn insert(&mut self, index: usize, value: T) {\n        assert!(index <= self.len(), \"index out of bounds\");\n        if self.is_full() {\n            self.grow();\n        }\n\n        // Move the least number of elements in the ring buffer and insert\n        // the given object\n        //\n        // At most len/2 - 1 elements will be moved. O(min(n, n-i))\n        //\n        // There are three main cases:\n        //  Elements are contiguous\n        //      - special case when tail is 0\n        //  Elements are discontiguous and the insert is in the tail section\n        //  Elements are discontiguous and the insert is in the head section\n        //\n        // For each of those there are two more cases:\n        //  Insert is closer to tail\n        //  Insert is closer to head\n        //\n        // Key: H - self.head\n        //      T - self.tail\n        //      o - Valid element\n        //      I - Insertion element\n        //      A - The element that should be after the insertion point\n        //      M - Indicates element was moved\n\n        let idx = self.wrap_add(self.tail, index);\n\n        let distance_to_tail = index;\n        let distance_to_head = self.len() - index;\n\n        let contiguous = self.is_contiguous();\n\n        match (contiguous, distance_to_tail <= distance_to_head, idx >= self.tail) {\n            (true, true, _) if index == 0 => {\n                // push_front\n                //\n                //       T\n                //       I             H\n                //      [A o o o o o o . . . . . . . . .]\n                //\n                //                       H         T\n                //      [A o o o o o o o . . . . . I]\n                //\n\n                self.tail = self.wrap_sub(self.tail, 1);\n            }\n            (true, true, _) => {\n                unsafe {\n                    // contiguous, insert closer to tail:\n                    //\n                    //             T   I         H\n                    //      [. . . o o A o o o o . . . . . .]\n                    //\n                    //           T               H\n                    //      [. . o o I A o o o o . . . . . .]\n                    //           M M\n                    //\n                    // contiguous, insert closer to tail and tail is 0:\n                    //\n                    //\n                    //       T   I         H\n                    //      [o o A o o o o . . . . . . . . .]\n                    //\n                    //                       H             T\n                    //      [o I A o o o o o . . . . . . . o]\n                    //       M                             M\n\n                    let new_tail = self.wrap_sub(self.tail, 1);\n\n                    self.copy(new_tail, self.tail, 1);\n                    // Already moved the tail, so we only copy `index - 1` elements.\n                    self.copy(self.tail, self.tail + 1, index - 1);\n\n                    self.tail = new_tail;\n                }\n            }\n            (true, false, _) => {\n                unsafe {\n                    //  contiguous, insert closer to head:\n                    //\n                    //             T       I     H\n                    //      [. . . o o o o A o o . . . . . .]\n                    //\n                    //             T               H\n                    //      [. . . o o o o I A o o . . . . .]\n                    //                       M M M\n\n                    self.copy(idx + 1, idx, self.head - idx);\n                    self.head = self.wrap_add(self.head, 1);\n                }\n            }\n            (false, true, true) => {\n                unsafe {\n                    // discontiguous, insert closer to tail, tail section:\n                    //\n                    //                   H         T   I\n                    //      [o o o o o o . . . . . o o A o o]\n                    //\n                    //                   H       T\n                    //      [o o o o o o . . . . o o I A o o]\n                    //                           M M\n\n                    self.copy(self.tail - 1, self.tail, index);\n                    self.tail -= 1;\n                }\n            }\n            (false, false, true) => {\n                unsafe {\n                    // discontiguous, insert closer to head, tail section:\n                    //\n                    //           H             T         I\n                    //      [o o . . . . . . . o o o o o A o]\n                    //\n                    //             H           T\n                    //      [o o o . . . . . . o o o o o I A]\n                    //       M M M                         M\n\n                    // copy elements up to new head\n                    self.copy(1, 0, self.head);\n\n                    // copy last element into empty spot at bottom of buffer\n                    self.copy(0, self.cap() - 1, 1);\n\n                    // move elements from idx to end forward not including ^ element\n                    self.copy(idx + 1, idx, self.cap() - 1 - idx);\n\n                    self.head += 1;\n                }\n            }\n            (false, true, false) if idx == 0 => {\n                unsafe {\n                    // discontiguous, insert is closer to tail, head section,\n                    // and is at index zero in the internal buffer:\n                    //\n                    //       I                   H     T\n                    //      [A o o o o o o o o o . . . o o o]\n                    //\n                    //                           H   T\n                    //      [A o o o o o o o o o . . o o o I]\n                    //                               M M M\n\n                    // copy elements up to new tail\n                    self.copy(self.tail - 1, self.tail, self.cap() - self.tail);\n\n                    // copy last element into empty spot at bottom of buffer\n                    self.copy(self.cap() - 1, 0, 1);\n\n                    self.tail -= 1;\n                }\n            }\n            (false, true, false) => {\n                unsafe {\n                    // discontiguous, insert closer to tail, head section:\n                    //\n                    //             I             H     T\n                    //      [o o o A o o o o o o . . . o o o]\n                    //\n                    //                           H   T\n                    //      [o o I A o o o o o o . . o o o o]\n                    //       M M                     M M M M\n\n                    // copy elements up to new tail\n                    self.copy(self.tail - 1, self.tail, self.cap() - self.tail);\n\n                    // copy last element into empty spot at bottom of buffer\n                    self.copy(self.cap() - 1, 0, 1);\n\n                    // move elements from idx-1 to end forward not including ^ element\n                    self.copy(0, 1, idx - 1);\n\n                    self.tail -= 1;\n                }\n            }\n            (false, false, false) => {\n                unsafe {\n                    // discontiguous, insert closer to head, head section:\n                    //\n                    //               I     H           T\n                    //      [o o o o A o o . . . . . . o o o]\n                    //\n                    //                     H           T\n                    //      [o o o o I A o o . . . . . o o o]\n                    //                 M M M\n\n                    self.copy(idx + 1, idx, self.head - idx);\n                    self.head += 1;\n                }\n            }\n        }\n\n        // tail might've been changed so we need to recalculate\n        let new_idx = self.wrap_add(self.tail, index);\n        unsafe {\n            self.buffer_write(new_idx, value);\n        }\n    }\n\n    /// Removes and returns the element at `index` from the `VecDeque`.\n    /// Whichever end is closer to the removal point will be moved to make\n    /// room, and all the affected elements will be moved to new positions.\n    /// Returns `None` if `index` is out of bounds.\n    ///\n    /// Element at index 0 is the front of the queue.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf = VecDeque::new();\n    /// buf.push_back(1);\n    /// buf.push_back(2);\n    /// buf.push_back(3);\n    /// assert_eq!(buf, [1, 2, 3]);\n    ///\n    /// assert_eq!(buf.remove(1), Some(2));\n    /// assert_eq!(buf, [1, 3]);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn remove(&mut self, index: usize) -> Option<T> {\n        if self.is_empty() || self.len() <= index {\n            return None;\n        }\n\n        // There are three main cases:\n        //  Elements are contiguous\n        //  Elements are discontiguous and the removal is in the tail section\n        //  Elements are discontiguous and the removal is in the head section\n        //      - special case when elements are technically contiguous,\n        //        but self.head = 0\n        //\n        // For each of those there are two more cases:\n        //  Insert is closer to tail\n        //  Insert is closer to head\n        //\n        // Key: H - self.head\n        //      T - self.tail\n        //      o - Valid element\n        //      x - Element marked for removal\n        //      R - Indicates element that is being removed\n        //      M - Indicates element was moved\n\n        let idx = self.wrap_add(self.tail, index);\n\n        let elem = unsafe { Some(self.buffer_read(idx)) };\n\n        let distance_to_tail = index;\n        let distance_to_head = self.len() - index;\n\n        let contiguous = self.is_contiguous();\n\n        match (contiguous, distance_to_tail <= distance_to_head, idx >= self.tail) {\n            (true, true, _) => {\n                unsafe {\n                    // contiguous, remove closer to tail:\n                    //\n                    //             T   R         H\n                    //      [. . . o o x o o o o . . . . . .]\n                    //\n                    //               T           H\n                    //      [. . . . o o o o o o . . . . . .]\n                    //               M M\n\n                    self.copy(self.tail + 1, self.tail, index);\n                    self.tail += 1;\n                }\n            }\n            (true, false, _) => {\n                unsafe {\n                    // contiguous, remove closer to head:\n                    //\n                    //             T       R     H\n                    //      [. . . o o o o x o o . . . . . .]\n                    //\n                    //             T           H\n                    //      [. . . o o o o o o . . . . . . .]\n                    //                     M M\n\n                    self.copy(idx, idx + 1, self.head - idx - 1);\n                    self.head -= 1;\n                }\n            }\n            (false, true, true) => {\n                unsafe {\n                    // discontiguous, remove closer to tail, tail section:\n                    //\n                    //                   H         T   R\n                    //      [o o o o o o . . . . . o o x o o]\n                    //\n                    //                   H           T\n                    //      [o o o o o o . . . . . . o o o o]\n                    //                               M M\n\n                    self.copy(self.tail + 1, self.tail, index);\n                    self.tail = self.wrap_add(self.tail, 1);\n                }\n            }\n            (false, false, false) => {\n                unsafe {\n                    // discontiguous, remove closer to head, head section:\n                    //\n                    //               R     H           T\n                    //      [o o o o x o o . . . . . . o o o]\n                    //\n                    //                   H             T\n                    //      [o o o o o o . . . . . . . o o o]\n                    //               M M\n\n                    self.copy(idx, idx + 1, self.head - idx - 1);\n                    self.head -= 1;\n                }\n            }\n            (false, false, true) => {\n                unsafe {\n                    // discontiguous, remove closer to head, tail section:\n                    //\n                    //             H           T         R\n                    //      [o o o . . . . . . o o o o o x o]\n                    //\n                    //           H             T\n                    //      [o o . . . . . . . o o o o o o o]\n                    //       M M                         M M\n                    //\n                    // or quasi-discontiguous, remove next to head, tail section:\n                    //\n                    //       H                 T         R\n                    //      [. . . . . . . . . o o o o o x o]\n                    //\n                    //                         T           H\n                    //      [. . . . . . . . . o o o o o o .]\n                    //                                   M\n\n                    // draw in elements in the tail section\n                    self.copy(idx, idx + 1, self.cap() - idx - 1);\n\n                    // Prevents underflow.\n                    if self.head != 0 {\n                        // copy first element into empty spot\n                        self.copy(self.cap() - 1, 0, 1);\n\n                        // move elements in the head section backwards\n                        self.copy(0, 1, self.head - 1);\n                    }\n\n                    self.head = self.wrap_sub(self.head, 1);\n                }\n            }\n            (false, true, false) => {\n                unsafe {\n                    // discontiguous, remove closer to tail, head section:\n                    //\n                    //           R               H     T\n                    //      [o o x o o o o o o o . . . o o o]\n                    //\n                    //                           H       T\n                    //      [o o o o o o o o o o . . . . o o]\n                    //       M M M                       M M\n\n                    // draw in elements up to idx\n                    self.copy(1, 0, idx);\n\n                    // copy last element into empty spot\n                    self.copy(0, self.cap() - 1, 1);\n\n                    // move elements from tail to end forward, excluding the last one\n                    self.copy(self.tail + 1, self.tail, self.cap() - self.tail - 1);\n\n                    self.tail = self.wrap_add(self.tail, 1);\n                }\n            }\n        }\n\n        elem\n    }\n\n    /// Splits the `VecDeque` into two at the given index.\n    ///\n    /// Returns a newly allocated `VecDeque`. `self` contains elements `[0, at)`,\n    /// and the returned `VecDeque` contains elements `[at, len)`.\n    ///\n    /// Note that the capacity of `self` does not change.\n    ///\n    /// Element at index 0 is the front of the queue.\n    ///\n    /// # Panics\n    ///\n    /// Panics if `at > len`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf: VecDeque<_> = vec![1, 2, 3].into_iter().collect();\n    /// let buf2 = buf.split_off(1);\n    /// assert_eq!(buf, [1]);\n    /// assert_eq!(buf2, [2, 3]);\n    /// ```\n    #[inline]\n    #[must_use = \"use `.truncate()` if you don't need the other half\"]\n    #[stable(feature = \"split_off\", since = \"1.4.0\")]\n    pub fn split_off(&mut self, at: usize) -> Self {\n        let len = self.len();\n        assert!(at <= len, \"`at` out of bounds\");\n\n        let other_len = len - at;\n        let mut other = VecDeque::with_capacity(other_len);\n\n        unsafe {\n            let (first_half, second_half) = self.as_slices();\n\n            let first_len = first_half.len();\n            let second_len = second_half.len();\n            if at < first_len {\n                // `at` lies in the first half.\n                let amount_in_first = first_len - at;\n\n                ptr::copy_nonoverlapping(first_half.as_ptr().add(at), other.ptr(), amount_in_first);\n\n                // just take all of the second half.\n                ptr::copy_nonoverlapping(\n                    second_half.as_ptr(),\n                    other.ptr().add(amount_in_first),\n                    second_len,\n                );\n            } else {\n                // `at` lies in the second half, need to factor in the elements we skipped\n                // in the first half.\n                let offset = at - first_len;\n                let amount_in_second = second_len - offset;\n                ptr::copy_nonoverlapping(\n                    second_half.as_ptr().add(offset),\n                    other.ptr(),\n                    amount_in_second,\n                );\n            }\n        }\n\n        // Cleanup where the ends of the buffers are\n        self.head = self.wrap_sub(self.head, other_len);\n        other.head = other.wrap_index(other_len);\n\n        other\n    }\n\n    /// Moves all the elements of `other` into `self`, leaving `other` empty.\n    ///\n    /// # Panics\n    ///\n    /// Panics if the new number of elements in self overflows a `usize`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf: VecDeque<_> = vec![1, 2].into_iter().collect();\n    /// let mut buf2: VecDeque<_> = vec![3, 4].into_iter().collect();\n    /// buf.append(&mut buf2);\n    /// assert_eq!(buf, [1, 2, 3, 4]);\n    /// assert_eq!(buf2, []);\n    /// ```\n    #[inline]\n    #[stable(feature = \"append\", since = \"1.4.0\")]\n    pub fn append(&mut self, other: &mut Self) {\n        // naive impl\n        self.extend(other.drain(..));\n    }\n\n    /// Retains only the elements specified by the predicate.\n    ///\n    /// In other words, remove all elements `e` such that `f(&e)` returns false.\n    /// This method operates in place, visiting each element exactly once in the\n    /// original order, and preserves the order of the retained elements.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf = VecDeque::new();\n    /// buf.extend(1..5);\n    /// buf.retain(|&x| x % 2 == 0);\n    /// assert_eq!(buf, [2, 4]);\n    /// ```\n    ///\n    /// The exact order may be useful for tracking external state, like an index.\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf = VecDeque::new();\n    /// buf.extend(1..6);\n    ///\n    /// let keep = [false, true, true, false, true];\n    /// let mut i = 0;\n    /// buf.retain(|_| (keep[i], i += 1).0);\n    /// assert_eq!(buf, [2, 3, 5]);\n    /// ```\n    #[stable(feature = \"vec_deque_retain\", since = \"1.4.0\")]\n    pub fn retain<F>(&mut self, mut f: F)\n    where\n        F: FnMut(&T) -> bool,\n    {\n        let len = self.len();\n        let mut del = 0;\n        for i in 0..len {\n            if !f(&self[i]) {\n                del += 1;\n            } else if del > 0 {\n                self.swap(i - del, i);\n            }\n        }\n        if del > 0 {\n            self.truncate(len - del);\n        }\n    }\n\n    // This may panic or abort\n    #[inline(never)]\n    fn grow(&mut self) {\n        if self.is_full() {\n            let old_cap = self.cap();\n            // Double the buffer size.\n            self.buf.reserve_exact(old_cap, old_cap);\n            assert!(self.cap() == old_cap * 2);\n            unsafe {\n                self.handle_capacity_increase(old_cap);\n            }\n            debug_assert!(!self.is_full());\n        }\n    }\n\n    /// Modifies the `VecDeque` in-place so that `len()` is equal to `new_len`,\n    /// either by removing excess elements from the back or by appending\n    /// elements generated by calling `generator` to the back.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf = VecDeque::new();\n    /// buf.push_back(5);\n    /// buf.push_back(10);\n    /// buf.push_back(15);\n    /// assert_eq!(buf, [5, 10, 15]);\n    ///\n    /// buf.resize_with(5, Default::default);\n    /// assert_eq!(buf, [5, 10, 15, 0, 0]);\n    ///\n    /// buf.resize_with(2, || unreachable!());\n    /// assert_eq!(buf, [5, 10]);\n    ///\n    /// let mut state = 100;\n    /// buf.resize_with(5, || { state += 1; state });\n    /// assert_eq!(buf, [5, 10, 101, 102, 103]);\n    /// ```\n    #[stable(feature = \"vec_resize_with\", since = \"1.33.0\")]\n    pub fn resize_with(&mut self, new_len: usize, generator: impl FnMut() -> T) {\n        let len = self.len();\n\n        if new_len > len {\n            self.extend(repeat_with(generator).take(new_len - len))\n        } else {\n            self.truncate(new_len);\n        }\n    }\n\n    /// Rearranges the internal storage of this deque so it is one contiguous\n    /// slice, which is then returned.\n    ///\n    /// This method does not allocate and does not change the order of the\n    /// inserted elements. As it returns a mutable slice, this can be used to\n    /// sort a deque.\n    ///\n    /// Once the internal storage is contiguous, the [`as_slices`] and\n    /// [`as_mut_slices`] methods will return the entire contents of the\n    /// `VecDeque` in a single slice.\n    ///\n    /// [`as_slices`]: VecDeque::as_slices\n    /// [`as_mut_slices`]: VecDeque::as_mut_slices\n    ///\n    /// # Examples\n    ///\n    /// Sorting the content of a deque.\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf = VecDeque::with_capacity(15);\n    ///\n    /// buf.push_back(2);\n    /// buf.push_back(1);\n    /// buf.push_front(3);\n    ///\n    /// // sorting the deque\n    /// buf.make_contiguous().sort();\n    /// assert_eq!(buf.as_slices(), (&[1, 2, 3] as &[_], &[] as &[_]));\n    ///\n    /// // sorting it in reverse order\n    /// buf.make_contiguous().sort_by(|a, b| b.cmp(a));\n    /// assert_eq!(buf.as_slices(), (&[3, 2, 1] as &[_], &[] as &[_]));\n    /// ```\n    ///\n    /// Getting immutable access to the contiguous slice.\n    ///\n    /// ```rust\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf = VecDeque::new();\n    ///\n    /// buf.push_back(2);\n    /// buf.push_back(1);\n    /// buf.push_front(3);\n    ///\n    /// buf.make_contiguous();\n    /// if let (slice, &[]) = buf.as_slices() {\n    ///     // we can now be sure that `slice` contains all elements of the deque,\n    ///     // while still having immutable access to `buf`.\n    ///     assert_eq!(buf.len(), slice.len());\n    ///     assert_eq!(slice, &[3, 2, 1] as &[_]);\n    /// }\n    /// ```\n    #[stable(feature = \"deque_make_contiguous\", since = \"1.48.0\")]\n    pub fn make_contiguous(&mut self) -> &mut [T] {\n        if self.is_contiguous() {\n            let tail = self.tail;\n            let head = self.head;\n            return unsafe { RingSlices::ring_slices(self.buffer_as_mut_slice(), head, tail).0 };\n        }\n\n        let buf = self.buf.ptr();\n        let cap = self.cap();\n        let len = self.len();\n\n        let free = self.tail - self.head;\n        let tail_len = cap - self.tail;\n\n        if free >= tail_len {\n            // there is enough free space to copy the tail in one go,\n            // this means that we first shift the head backwards, and then\n            // copy the tail to the correct position.\n            //\n            // from: DEFGH....ABC\n            // to:   ABCDEFGH....\n            unsafe {\n                ptr::copy(buf, buf.add(tail_len), self.head);\n                // ...DEFGH.ABC\n                ptr::copy_nonoverlapping(buf.add(self.tail), buf, tail_len);\n                // ABCDEFGH....\n\n                self.tail = 0;\n                self.head = len;\n            }\n        } else if free > self.head {\n            // FIXME: We currently do not consider ....ABCDEFGH\n            // to be contiguous because `head` would be `0` in this\n            // case. While we probably want to change this it\n            // isn't trivial as a few places expect `is_contiguous`\n            // to mean that we can just slice using `buf[tail..head]`.\n\n            // there is enough free space to copy the head in one go,\n            // this means that we first shift the tail forwards, and then\n            // copy the head to the correct position.\n            //\n            // from: FGH....ABCDE\n            // to:   ...ABCDEFGH.\n            unsafe {\n                ptr::copy(buf.add(self.tail), buf.add(self.head), tail_len);\n                // FGHABCDE....\n                ptr::copy_nonoverlapping(buf, buf.add(self.head + tail_len), self.head);\n                // ...ABCDEFGH.\n\n                self.tail = self.head;\n                self.head = self.wrap_add(self.tail, len);\n            }\n        } else {\n            // free is smaller than both head and tail,\n            // this means we have to slowly \"swap\" the tail and the head.\n            //\n            // from: EFGHI...ABCD or HIJK.ABCDEFG\n            // to:   ABCDEFGHI... or ABCDEFGHIJK.\n            let mut left_edge: usize = 0;\n            let mut right_edge: usize = self.tail;\n            unsafe {\n                // The general problem looks like this\n                // GHIJKLM...ABCDEF - before any swaps\n                // ABCDEFM...GHIJKL - after 1 pass of swaps\n                // ABCDEFGHIJM...KL - swap until the left edge reaches the temp store\n                //                  - then restart the algorithm with a new (smaller) store\n                // Sometimes the temp store is reached when the right edge is at the end\n                // of the buffer - this means we've hit the right order with fewer swaps!\n                // E.g\n                // EF..ABCD\n                // ABCDEF.. - after four only swaps we've finished\n                while left_edge < len && right_edge != cap {\n                    let mut right_offset = 0;\n                    for i in left_edge..right_edge {\n                        right_offset = (i - left_edge) % (cap - right_edge);\n                        let src: isize = (right_edge + right_offset) as isize;\n                        ptr::swap(buf.add(i), buf.offset(src));\n                    }\n                    let n_ops = right_edge - left_edge;\n                    left_edge += n_ops;\n                    right_edge += right_offset + 1;\n                }\n\n                self.tail = 0;\n                self.head = len;\n            }\n        }\n\n        let tail = self.tail;\n        let head = self.head;\n        unsafe { RingSlices::ring_slices(self.buffer_as_mut_slice(), head, tail).0 }\n    }\n\n    /// Rotates the double-ended queue `mid` places to the left.\n    ///\n    /// Equivalently,\n    /// - Rotates item `mid` into the first position.\n    /// - Pops the first `mid` items and pushes them to the end.\n    /// - Rotates `len() - mid` places to the right.\n    ///\n    /// # Panics\n    ///\n    /// If `mid` is greater than `len()`. Note that `mid == len()`\n    /// does _not_ panic and is a no-op rotation.\n    ///\n    /// # Complexity\n    ///\n    /// Takes `*O*(min(mid, len() - mid))` time and no extra space.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf: VecDeque<_> = (0..10).collect();\n    ///\n    /// buf.rotate_left(3);\n    /// assert_eq!(buf, [3, 4, 5, 6, 7, 8, 9, 0, 1, 2]);\n    ///\n    /// for i in 1..10 {\n    ///     assert_eq!(i * 3 % 10, buf[0]);\n    ///     buf.rotate_left(3);\n    /// }\n    /// assert_eq!(buf, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);\n    /// ```\n    #[stable(feature = \"vecdeque_rotate\", since = \"1.36.0\")]\n    pub fn rotate_left(&mut self, mid: usize) {\n        assert!(mid <= self.len());\n        let k = self.len() - mid;\n        if mid <= k {\n            unsafe { self.rotate_left_inner(mid) }\n        } else {\n            unsafe { self.rotate_right_inner(k) }\n        }\n    }\n\n    /// Rotates the double-ended queue `k` places to the right.\n    ///\n    /// Equivalently,\n    /// - Rotates the first item into position `k`.\n    /// - Pops the last `k` items and pushes them to the front.\n    /// - Rotates `len() - k` places to the left.\n    ///\n    /// # Panics\n    ///\n    /// If `k` is greater than `len()`. Note that `k == len()`\n    /// does _not_ panic and is a no-op rotation.\n    ///\n    /// # Complexity\n    ///\n    /// Takes `*O*(min(k, len() - k))` time and no extra space.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf: VecDeque<_> = (0..10).collect();\n    ///\n    /// buf.rotate_right(3);\n    /// assert_eq!(buf, [7, 8, 9, 0, 1, 2, 3, 4, 5, 6]);\n    ///\n    /// for i in 1..10 {\n    ///     assert_eq!(0, buf[i * 3 % 10]);\n    ///     buf.rotate_right(3);\n    /// }\n    /// assert_eq!(buf, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);\n    /// ```\n    #[stable(feature = \"vecdeque_rotate\", since = \"1.36.0\")]\n    pub fn rotate_right(&mut self, k: usize) {\n        assert!(k <= self.len());\n        let mid = self.len() - k;\n        if k <= mid {\n            unsafe { self.rotate_right_inner(k) }\n        } else {\n            unsafe { self.rotate_left_inner(mid) }\n        }\n    }\n\n    // SAFETY: the following two methods require that the rotation amount\n    // be less than half the length of the deque.\n    //\n    // `wrap_copy` requires that `min(x, cap() - x) + copy_len <= cap()`,\n    // but than `min` is never more than half the capacity, regardless of x,\n    // so it's sound to call here because we're calling with something\n    // less than half the length, which is never above half the capacity.\n\n    unsafe fn rotate_left_inner(&mut self, mid: usize) {\n        debug_assert!(mid * 2 <= self.len());\n        unsafe {\n            self.wrap_copy(self.head, self.tail, mid);\n        }\n        self.head = self.wrap_add(self.head, mid);\n        self.tail = self.wrap_add(self.tail, mid);\n    }\n\n    unsafe fn rotate_right_inner(&mut self, k: usize) {\n        debug_assert!(k * 2 <= self.len());\n        self.head = self.wrap_sub(self.head, k);\n        self.tail = self.wrap_sub(self.tail, k);\n        unsafe {\n            self.wrap_copy(self.tail, self.head, k);\n        }\n    }\n\n    /// Binary searches this sorted `VecDeque` for a given element.\n    ///\n    /// If the value is found then [`Result::Ok`] is returned, containing the\n    /// index of the matching element. If there are multiple matches, then any\n    /// one of the matches could be returned. If the value is not found then\n    /// [`Result::Err`] is returned, containing the index where a matching\n    /// element could be inserted while maintaining sorted order.\n    ///\n    /// See also [`binary_search_by`], [`binary_search_by_key`], and [`partition_point`].\n    ///\n    /// [`binary_search_by`]: VecDeque::binary_search_by\n    /// [`binary_search_by_key`]: VecDeque::binary_search_by_key\n    /// [`partition_point`]: VecDeque::partition_point\n    ///\n    /// # Examples\n    ///\n    /// Looks up a series of four elements. The first is found, with a\n    /// uniquely determined position; the second and third are not\n    /// found; the fourth could match any position in `[1, 4]`.\n    ///\n    /// ```\n    /// #![feature(vecdeque_binary_search)]\n    /// use std::collections::VecDeque;\n    ///\n    /// let deque: VecDeque<_> = vec![0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55].into();\n    ///\n    /// assert_eq!(deque.binary_search(&13),  Ok(9));\n    /// assert_eq!(deque.binary_search(&4),   Err(7));\n    /// assert_eq!(deque.binary_search(&100), Err(13));\n    /// let r = deque.binary_search(&1);\n    /// assert!(matches!(r, Ok(1..=4)));\n    /// ```\n    ///\n    /// If you want to insert an item to a sorted `VecDeque`, while maintaining\n    /// sort order:\n    ///\n    /// ```\n    /// #![feature(vecdeque_binary_search)]\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut deque: VecDeque<_> = vec![0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55].into();\n    /// let num = 42;\n    /// let idx = deque.binary_search(&num).unwrap_or_else(|x| x);\n    /// deque.insert(idx, num);\n    /// assert_eq!(deque, &[0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 42, 55]);\n    /// ```\n    #[unstable(feature = \"vecdeque_binary_search\", issue = \"78021\")]\n    #[inline]\n    pub fn binary_search(&self, x: &T) -> Result<usize, usize>\n    where\n        T: Ord,\n    {\n        self.binary_search_by(|e| e.cmp(x))\n    }\n\n    /// Binary searches this sorted `VecDeque` with a comparator function.\n    ///\n    /// The comparator function should implement an order consistent\n    /// with the sort order of the underlying `VecDeque`, returning an\n    /// order code that indicates whether its argument is `Less`,\n    /// `Equal` or `Greater` than the desired target.\n    ///\n    /// If the value is found then [`Result::Ok`] is returned, containing the\n    /// index of the matching element. If there are multiple matches, then any\n    /// one of the matches could be returned. If the value is not found then\n    /// [`Result::Err`] is returned, containing the index where a matching\n    /// element could be inserted while maintaining sorted order.\n    ///\n    /// See also [`binary_search`], [`binary_search_by_key`], and [`partition_point`].\n    ///\n    /// [`binary_search`]: VecDeque::binary_search\n    /// [`binary_search_by_key`]: VecDeque::binary_search_by_key\n    /// [`partition_point`]: VecDeque::partition_point\n    ///\n    /// # Examples\n    ///\n    /// Looks up a series of four elements. The first is found, with a\n    /// uniquely determined position; the second and third are not\n    /// found; the fourth could match any position in `[1, 4]`.\n    ///\n    /// ```\n    /// #![feature(vecdeque_binary_search)]\n    /// use std::collections::VecDeque;\n    ///\n    /// let deque: VecDeque<_> = vec![0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55].into();\n    ///\n    /// assert_eq!(deque.binary_search_by(|x| x.cmp(&13)),  Ok(9));\n    /// assert_eq!(deque.binary_search_by(|x| x.cmp(&4)),   Err(7));\n    /// assert_eq!(deque.binary_search_by(|x| x.cmp(&100)), Err(13));\n    /// let r = deque.binary_search_by(|x| x.cmp(&1));\n    /// assert!(matches!(r, Ok(1..=4)));\n    /// ```\n    #[unstable(feature = \"vecdeque_binary_search\", issue = \"78021\")]\n    pub fn binary_search_by<'a, F>(&'a self, mut f: F) -> Result<usize, usize>\n    where\n        F: FnMut(&'a T) -> Ordering,\n    {\n        let (front, back) = self.as_slices();\n        let cmp_back = back.first().map(|elem| f(elem));\n\n        if let Some(Ordering::Equal) = cmp_back {\n            Ok(front.len())\n        } else if let Some(Ordering::Less) = cmp_back {\n            back.binary_search_by(f).map(|idx| idx + front.len()).map_err(|idx| idx + front.len())\n        } else {\n            front.binary_search_by(f)\n        }\n    }\n\n    /// Binary searches this sorted `VecDeque` with a key extraction function.\n    ///\n    /// Assumes that the `VecDeque` is sorted by the key, for instance with\n    /// [`make_contiguous().sort_by_key()`] using the same key extraction function.\n    ///\n    /// If the value is found then [`Result::Ok`] is returned, containing the\n    /// index of the matching element. If there are multiple matches, then any\n    /// one of the matches could be returned. If the value is not found then\n    /// [`Result::Err`] is returned, containing the index where a matching\n    /// element could be inserted while maintaining sorted order.\n    ///\n    /// See also [`binary_search`], [`binary_search_by`], and [`partition_point`].\n    ///\n    /// [`make_contiguous().sort_by_key()`]: VecDeque::make_contiguous\n    /// [`binary_search`]: VecDeque::binary_search\n    /// [`binary_search_by`]: VecDeque::binary_search_by\n    /// [`partition_point`]: VecDeque::partition_point\n    ///\n    /// # Examples\n    ///\n    /// Looks up a series of four elements in a slice of pairs sorted by\n    /// their second elements. The first is found, with a uniquely\n    /// determined position; the second and third are not found; the\n    /// fourth could match any position in `[1, 4]`.\n    ///\n    /// ```\n    /// #![feature(vecdeque_binary_search)]\n    /// use std::collections::VecDeque;\n    ///\n    /// let deque: VecDeque<_> = vec![(0, 0), (2, 1), (4, 1), (5, 1),\n    ///          (3, 1), (1, 2), (2, 3), (4, 5), (5, 8), (3, 13),\n    ///          (1, 21), (2, 34), (4, 55)].into();\n    ///\n    /// assert_eq!(deque.binary_search_by_key(&13, |&(a, b)| b),  Ok(9));\n    /// assert_eq!(deque.binary_search_by_key(&4, |&(a, b)| b),   Err(7));\n    /// assert_eq!(deque.binary_search_by_key(&100, |&(a, b)| b), Err(13));\n    /// let r = deque.binary_search_by_key(&1, |&(a, b)| b);\n    /// assert!(matches!(r, Ok(1..=4)));\n    /// ```\n    #[unstable(feature = \"vecdeque_binary_search\", issue = \"78021\")]\n    #[inline]\n    pub fn binary_search_by_key<'a, B, F>(&'a self, b: &B, mut f: F) -> Result<usize, usize>\n    where\n        F: FnMut(&'a T) -> B,\n        B: Ord,\n    {\n        self.binary_search_by(|k| f(k).cmp(b))\n    }\n\n    /// Returns the index of the partition point according to the given predicate\n    /// (the index of the first element of the second partition).\n    ///\n    /// The deque is assumed to be partitioned according to the given predicate.\n    /// This means that all elements for which the predicate returns true are at the start of the deque\n    /// and all elements for which the predicate returns false are at the end.\n    /// For example, [7, 15, 3, 5, 4, 12, 6] is a partitioned under the predicate x % 2 != 0\n    /// (all odd numbers are at the start, all even at the end).\n    ///\n    /// If this deque is not partitioned, the returned result is unspecified and meaningless,\n    /// as this method performs a kind of binary search.\n    ///\n    /// See also [`binary_search`], [`binary_search_by`], and [`binary_search_by_key`].\n    ///\n    /// [`binary_search`]: VecDeque::binary_search\n    /// [`binary_search_by`]: VecDeque::binary_search_by\n    /// [`binary_search_by_key`]: VecDeque::binary_search_by_key\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(vecdeque_binary_search)]\n    /// use std::collections::VecDeque;\n    ///\n    /// let deque: VecDeque<_> = vec![1, 2, 3, 3, 5, 6, 7].into();\n    /// let i = deque.partition_point(|&x| x < 5);\n    ///\n    /// assert_eq!(i, 4);\n    /// assert!(deque.iter().take(i).all(|&x| x < 5));\n    /// assert!(deque.iter().skip(i).all(|&x| !(x < 5)));\n    /// ```\n    #[unstable(feature = \"vecdeque_binary_search\", issue = \"78021\")]\n    pub fn partition_point<P>(&self, mut pred: P) -> usize\n    where\n        P: FnMut(&T) -> bool,\n    {\n        let (front, back) = self.as_slices();\n\n        if let Some(true) = back.first().map(|v| pred(v)) {\n            back.partition_point(pred) + front.len()\n        } else {\n            front.partition_point(pred)\n        }\n    }\n}\n\nimpl<T: Clone> VecDeque<T> {\n    /// Modifies the `VecDeque` in-place so that `len()` is equal to new_len,\n    /// either by removing excess elements from the back or by appending clones of `value`\n    /// to the back.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// let mut buf = VecDeque::new();\n    /// buf.push_back(5);\n    /// buf.push_back(10);\n    /// buf.push_back(15);\n    /// assert_eq!(buf, [5, 10, 15]);\n    ///\n    /// buf.resize(2, 0);\n    /// assert_eq!(buf, [5, 10]);\n    ///\n    /// buf.resize(5, 20);\n    /// assert_eq!(buf, [5, 10, 20, 20, 20]);\n    /// ```\n    #[stable(feature = \"deque_extras\", since = \"1.16.0\")]\n    pub fn resize(&mut self, new_len: usize, value: T) {\n        self.resize_with(new_len, || value.clone());\n    }\n}\n\n/// Returns the index in the underlying buffer for a given logical element index.\n#[inline]\nfn wrap_index(index: usize, size: usize) -> usize {\n    // size is always a power of 2\n    debug_assert!(size.is_power_of_two());\n    index & (size - 1)\n}\n\n/// Calculate the number of elements left to be read in the buffer\n#[inline]\nfn count(tail: usize, head: usize, size: usize) -> usize {\n    // size is always a power of 2\n    (head.wrapping_sub(tail)) & (size - 1)\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<A: PartialEq> PartialEq for VecDeque<A> {\n    fn eq(&self, other: &VecDeque<A>) -> bool {\n        if self.len() != other.len() {\n            return false;\n        }\n        let (sa, sb) = self.as_slices();\n        let (oa, ob) = other.as_slices();\n        if sa.len() == oa.len() {\n            sa == oa && sb == ob\n        } else if sa.len() < oa.len() {\n            // Always divisible in three sections, for example:\n            // self:  [a b c|d e f]\n            // other: [0 1 2 3|4 5]\n            // front = 3, mid = 1,\n            // [a b c] == [0 1 2] && [d] == [3] && [e f] == [4 5]\n            let front = sa.len();\n            let mid = oa.len() - front;\n\n            let (oa_front, oa_mid) = oa.split_at(front);\n            let (sb_mid, sb_back) = sb.split_at(mid);\n            debug_assert_eq!(sa.len(), oa_front.len());\n            debug_assert_eq!(sb_mid.len(), oa_mid.len());\n            debug_assert_eq!(sb_back.len(), ob.len());\n            sa == oa_front && sb_mid == oa_mid && sb_back == ob\n        } else {\n            let front = oa.len();\n            let mid = sa.len() - front;\n\n            let (sa_front, sa_mid) = sa.split_at(front);\n            let (ob_mid, ob_back) = ob.split_at(mid);\n            debug_assert_eq!(sa_front.len(), oa.len());\n            debug_assert_eq!(sa_mid.len(), ob_mid.len());\n            debug_assert_eq!(sb.len(), ob_back.len());\n            sa_front == oa && sa_mid == ob_mid && sb == ob_back\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<A: Eq> Eq for VecDeque<A> {}\n\n__impl_slice_eq1! { [] VecDeque<A>, Vec<B>, }\n__impl_slice_eq1! { [] VecDeque<A>, &[B], }\n__impl_slice_eq1! { [] VecDeque<A>, &mut [B], }\n__impl_slice_eq1! { [const N: usize] VecDeque<A>, [B; N], }\n__impl_slice_eq1! { [const N: usize] VecDeque<A>, &[B; N], }\n__impl_slice_eq1! { [const N: usize] VecDeque<A>, &mut [B; N], }\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<A: PartialOrd> PartialOrd for VecDeque<A> {\n    fn partial_cmp(&self, other: &VecDeque<A>) -> Option<Ordering> {\n        self.iter().partial_cmp(other.iter())\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<A: Ord> Ord for VecDeque<A> {\n    #[inline]\n    fn cmp(&self, other: &VecDeque<A>) -> Ordering {\n        self.iter().cmp(other.iter())\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<A: Hash> Hash for VecDeque<A> {\n    fn hash<H: Hasher>(&self, state: &mut H) {\n        self.len().hash(state);\n        // It's not possible to use Hash::hash_slice on slices\n        // returned by as_slices method as their length can vary\n        // in otherwise identical deques.\n        //\n        // Hasher only guarantees equivalence for the exact same\n        // set of calls to its methods.\n        self.iter().for_each(|elem| elem.hash(state));\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<A> Index<usize> for VecDeque<A> {\n    type Output = A;\n\n    #[inline]\n    fn index(&self, index: usize) -> &A {\n        self.get(index).expect(\"Out of bounds access\")\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<A> IndexMut<usize> for VecDeque<A> {\n    #[inline]\n    fn index_mut(&mut self, index: usize) -> &mut A {\n        self.get_mut(index).expect(\"Out of bounds access\")\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<A> FromIterator<A> for VecDeque<A> {\n    fn from_iter<T: IntoIterator<Item = A>>(iter: T) -> VecDeque<A> {\n        let iterator = iter.into_iter();\n        let (lower, _) = iterator.size_hint();\n        let mut deq = VecDeque::with_capacity(lower);\n        deq.extend(iterator);\n        deq\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> IntoIterator for VecDeque<T> {\n    type Item = T;\n    type IntoIter = IntoIter<T>;\n\n    /// Consumes the `VecDeque` into a front-to-back iterator yielding elements by\n    /// value.\n    fn into_iter(self) -> IntoIter<T> {\n        IntoIter { inner: self }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T> IntoIterator for &'a VecDeque<T> {\n    type Item = &'a T;\n    type IntoIter = Iter<'a, T>;\n\n    fn into_iter(self) -> Iter<'a, T> {\n        self.iter()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T> IntoIterator for &'a mut VecDeque<T> {\n    type Item = &'a mut T;\n    type IntoIter = IterMut<'a, T>;\n\n    fn into_iter(self) -> IterMut<'a, T> {\n        self.iter_mut()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<A> Extend<A> for VecDeque<A> {\n    fn extend<T: IntoIterator<Item = A>>(&mut self, iter: T) {\n        // This function should be the moral equivalent of:\n        //\n        //      for item in iter.into_iter() {\n        //          self.push_back(item);\n        //      }\n        let mut iter = iter.into_iter();\n        while let Some(element) = iter.next() {\n            if self.len() == self.capacity() {\n                let (lower, _) = iter.size_hint();\n                self.reserve(lower.saturating_add(1));\n            }\n\n            let head = self.head;\n            self.head = self.wrap_add(self.head, 1);\n            unsafe {\n                self.buffer_write(head, element);\n            }\n        }\n    }\n\n    #[inline]\n    fn extend_one(&mut self, elem: A) {\n        self.push_back(elem);\n    }\n\n    #[inline]\n    fn extend_reserve(&mut self, additional: usize) {\n        self.reserve(additional);\n    }\n}\n\n#[stable(feature = \"extend_ref\", since = \"1.2.0\")]\nimpl<'a, T: 'a + Copy> Extend<&'a T> for VecDeque<T> {\n    fn extend<I: IntoIterator<Item = &'a T>>(&mut self, iter: I) {\n        self.extend(iter.into_iter().cloned());\n    }\n\n    #[inline]\n    fn extend_one(&mut self, &elem: &T) {\n        self.push_back(elem);\n    }\n\n    #[inline]\n    fn extend_reserve(&mut self, additional: usize) {\n        self.reserve(additional);\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: fmt::Debug> fmt::Debug for VecDeque<T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_list().entries(self).finish()\n    }\n}\n\n#[stable(feature = \"vecdeque_vec_conversions\", since = \"1.10.0\")]\nimpl<T> From<Vec<T>> for VecDeque<T> {\n    /// Turn a [`Vec<T>`] into a [`VecDeque<T>`].\n    ///\n    /// [`Vec<T>`]: crate::vec::Vec\n    /// [`VecDeque<T>`]: crate::collections::VecDeque\n    ///\n    /// This avoids reallocating where possible, but the conditions for that are\n    /// strict, and subject to change, and so shouldn't be relied upon unless the\n    /// `Vec<T>` came from `From<VecDeque<T>>` and hasn't been reallocated.\n    fn from(mut other: Vec<T>) -> Self {\n        let len = other.len();\n        if mem::size_of::<T>() == 0 {\n            // There's no actual allocation for ZSTs to worry about capacity,\n            // but `VecDeque` can't handle as much length as `Vec`.\n            assert!(len < MAXIMUM_ZST_CAPACITY, \"capacity overflow\");\n        } else {\n            // We need to resize if the capacity is not a power of two, too small or\n            // doesn't have at least one free space. We do this while it's still in\n            // the `Vec` so the items will drop on panic.\n            let min_cap = cmp::max(MINIMUM_CAPACITY, len) + 1;\n            let cap = cmp::max(min_cap, other.capacity()).next_power_of_two();\n            if other.capacity() != cap {\n                other.reserve_exact(cap - len);\n            }\n        }\n\n        unsafe {\n            let (other_buf, len, capacity) = other.into_raw_parts();\n            let buf = RawVec::from_raw_parts(other_buf, capacity);\n            VecDeque { tail: 0, head: len, buf }\n        }\n    }\n}\n\n#[stable(feature = \"vecdeque_vec_conversions\", since = \"1.10.0\")]\nimpl<T> From<VecDeque<T>> for Vec<T> {\n    /// Turn a [`VecDeque<T>`] into a [`Vec<T>`].\n    ///\n    /// [`Vec<T>`]: crate::vec::Vec\n    /// [`VecDeque<T>`]: crate::collections::VecDeque\n    ///\n    /// This never needs to re-allocate, but does need to do *O*(*n*) data movement if\n    /// the circular buffer doesn't happen to be at the beginning of the allocation.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::collections::VecDeque;\n    ///\n    /// // This one is *O*(1).\n    /// let deque: VecDeque<_> = (1..5).collect();\n    /// let ptr = deque.as_slices().0.as_ptr();\n    /// let vec = Vec::from(deque);\n    /// assert_eq!(vec, [1, 2, 3, 4]);\n    /// assert_eq!(vec.as_ptr(), ptr);\n    ///\n    /// // This one needs data rearranging.\n    /// let mut deque: VecDeque<_> = (1..5).collect();\n    /// deque.push_front(9);\n    /// deque.push_front(8);\n    /// let ptr = deque.as_slices().1.as_ptr();\n    /// let vec = Vec::from(deque);\n    /// assert_eq!(vec, [8, 9, 1, 2, 3, 4]);\n    /// assert_eq!(vec.as_ptr(), ptr);\n    /// ```\n    fn from(mut other: VecDeque<T>) -> Self {\n        other.make_contiguous();\n\n        unsafe {\n            let other = ManuallyDrop::new(other);\n            let buf = other.buf.ptr();\n            let len = other.len();\n            let cap = other.cap();\n\n            if other.tail != 0 {\n                ptr::copy(buf.add(other.tail), buf, len);\n            }\n            Vec::from_raw_parts(buf, len, cap)\n        }\n    }\n}\nuse core::fmt;\nuse core::iter::{FusedIterator, TrustedLen, TrustedRandomAccess};\nuse core::ops::Try;\n\nuse super::{count, wrap_index, RingSlices};\n\n/// An iterator over the elements of a `VecDeque`.\n///\n/// This `struct` is created by the [`iter`] method on [`super::VecDeque`]. See its\n/// documentation for more.\n///\n/// [`iter`]: super::VecDeque::iter\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct Iter<'a, T: 'a> {\n    pub(crate) ring: &'a [T],\n    pub(crate) tail: usize,\n    pub(crate) head: usize,\n}\n\n#[stable(feature = \"collection_debug\", since = \"1.17.0\")]\nimpl<T: fmt::Debug> fmt::Debug for Iter<'_, T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        let (front, back) = RingSlices::ring_slices(self.ring, self.head, self.tail);\n        f.debug_tuple(\"Iter\").field(&front).field(&back).finish()\n    }\n}\n\n// FIXME(#26925) Remove in favor of `#[derive(Clone)]`\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> Clone for Iter<'_, T> {\n    fn clone(&self) -> Self {\n        Iter { ring: self.ring, tail: self.tail, head: self.head }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T> Iterator for Iter<'a, T> {\n    type Item = &'a T;\n\n    #[inline]\n    fn next(&mut self) -> Option<&'a T> {\n        if self.tail == self.head {\n            return None;\n        }\n        let tail = self.tail;\n        self.tail = wrap_index(self.tail.wrapping_add(1), self.ring.len());\n        unsafe { Some(self.ring.get_unchecked(tail)) }\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        let len = count(self.tail, self.head, self.ring.len());\n        (len, Some(len))\n    }\n\n    fn fold<Acc, F>(self, mut accum: Acc, mut f: F) -> Acc\n    where\n        F: FnMut(Acc, Self::Item) -> Acc,\n    {\n        let (front, back) = RingSlices::ring_slices(self.ring, self.head, self.tail);\n        accum = front.iter().fold(accum, &mut f);\n        back.iter().fold(accum, &mut f)\n    }\n\n    fn try_fold<B, F, R>(&mut self, init: B, mut f: F) -> R\n    where\n        Self: Sized,\n        F: FnMut(B, Self::Item) -> R,\n        R: Try<Ok = B>,\n    {\n        let (mut iter, final_res);\n        if self.tail <= self.head {\n            // single slice self.ring[self.tail..self.head]\n            iter = self.ring[self.tail..self.head].iter();\n            final_res = iter.try_fold(init, &mut f);\n        } else {\n            // two slices: self.ring[self.tail..], self.ring[..self.head]\n            let (front, back) = self.ring.split_at(self.tail);\n            let mut back_iter = back.iter();\n            let res = back_iter.try_fold(init, &mut f);\n            let len = self.ring.len();\n            self.tail = (self.ring.len() - back_iter.len()) & (len - 1);\n            iter = front[..self.head].iter();\n            final_res = iter.try_fold(res?, &mut f);\n        }\n        self.tail = self.head - iter.len();\n        final_res\n    }\n\n    fn nth(&mut self, n: usize) -> Option<Self::Item> {\n        if n >= count(self.tail, self.head, self.ring.len()) {\n            self.tail = self.head;\n            None\n        } else {\n            self.tail = wrap_index(self.tail.wrapping_add(n), self.ring.len());\n            self.next()\n        }\n    }\n\n    #[inline]\n    fn last(mut self) -> Option<&'a T> {\n        self.next_back()\n    }\n\n    #[inline]\n    unsafe fn __iterator_get_unchecked(&mut self, idx: usize) -> Self::Item\n    where\n        Self: TrustedRandomAccess,\n    {\n        // Safety: The TrustedRandomAccess contract requires that callers only  pass an index\n        // that is in bounds.\n        unsafe {\n            let idx = wrap_index(self.tail.wrapping_add(idx), self.ring.len());\n            self.ring.get_unchecked(idx)\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T> DoubleEndedIterator for Iter<'a, T> {\n    #[inline]\n    fn next_back(&mut self) -> Option<&'a T> {\n        if self.tail == self.head {\n            return None;\n        }\n        self.head = wrap_index(self.head.wrapping_sub(1), self.ring.len());\n        unsafe { Some(self.ring.get_unchecked(self.head)) }\n    }\n\n    fn rfold<Acc, F>(self, mut accum: Acc, mut f: F) -> Acc\n    where\n        F: FnMut(Acc, Self::Item) -> Acc,\n    {\n        let (front, back) = RingSlices::ring_slices(self.ring, self.head, self.tail);\n        accum = back.iter().rfold(accum, &mut f);\n        front.iter().rfold(accum, &mut f)\n    }\n\n    fn try_rfold<B, F, R>(&mut self, init: B, mut f: F) -> R\n    where\n        Self: Sized,\n        F: FnMut(B, Self::Item) -> R,\n        R: Try<Ok = B>,\n    {\n        let (mut iter, final_res);\n        if self.tail <= self.head {\n            // single slice self.ring[self.tail..self.head]\n            iter = self.ring[self.tail..self.head].iter();\n            final_res = iter.try_rfold(init, &mut f);\n        } else {\n            // two slices: self.ring[self.tail..], self.ring[..self.head]\n            let (front, back) = self.ring.split_at(self.tail);\n            let mut front_iter = front[..self.head].iter();\n            let res = front_iter.try_rfold(init, &mut f);\n            self.head = front_iter.len();\n            iter = back.iter();\n            final_res = iter.try_rfold(res?, &mut f);\n        }\n        self.head = self.tail + iter.len();\n        final_res\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> ExactSizeIterator for Iter<'_, T> {\n    fn is_empty(&self) -> bool {\n        self.head == self.tail\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<T> FusedIterator for Iter<'_, T> {}\n\n#[unstable(feature = \"trusted_len\", issue = \"37572\")]\nunsafe impl<T> TrustedLen for Iter<'_, T> {}\n\n#[doc(hidden)]\n#[unstable(feature = \"trusted_random_access\", issue = \"none\")]\nunsafe impl<T> TrustedRandomAccess for Iter<'_, T> {\n    const MAY_HAVE_SIDE_EFFECT: bool = false;\n}\nuse super::*;\n\n#[bench]\n#[cfg_attr(miri, ignore)] // isolated Miri does not support benchmarks\nfn bench_push_back_100(b: &mut test::Bencher) {\n    let mut deq = VecDeque::with_capacity(101);\n    b.iter(|| {\n        for i in 0..100 {\n            deq.push_back(i);\n        }\n        deq.head = 0;\n        deq.tail = 0;\n    })\n}\n\n#[bench]\n#[cfg_attr(miri, ignore)] // isolated Miri does not support benchmarks\nfn bench_push_front_100(b: &mut test::Bencher) {\n    let mut deq = VecDeque::with_capacity(101);\n    b.iter(|| {\n        for i in 0..100 {\n            deq.push_front(i);\n        }\n        deq.head = 0;\n        deq.tail = 0;\n    })\n}\n\n#[bench]\n#[cfg_attr(miri, ignore)] // isolated Miri does not support benchmarks\nfn bench_pop_back_100(b: &mut test::Bencher) {\n    let mut deq = VecDeque::<i32>::with_capacity(101);\n\n    b.iter(|| {\n        deq.head = 100;\n        deq.tail = 0;\n        while !deq.is_empty() {\n            test::black_box(deq.pop_back());\n        }\n    })\n}\n\n#[bench]\n#[cfg_attr(miri, ignore)] // isolated Miri does not support benchmarks\nfn bench_pop_front_100(b: &mut test::Bencher) {\n    let mut deq = VecDeque::<i32>::with_capacity(101);\n\n    b.iter(|| {\n        deq.head = 100;\n        deq.tail = 0;\n        while !deq.is_empty() {\n            test::black_box(deq.pop_front());\n        }\n    })\n}\n\n#[test]\nfn test_swap_front_back_remove() {\n    fn test(back: bool) {\n        // This test checks that every single combination of tail position and length is tested.\n        // Capacity 15 should be large enough to cover every case.\n        let mut tester = VecDeque::with_capacity(15);\n        let usable_cap = tester.capacity();\n        let final_len = usable_cap / 2;\n\n        for len in 0..final_len {\n            let expected: VecDeque<_> =\n                if back { (0..len).collect() } else { (0..len).rev().collect() };\n            for tail_pos in 0..usable_cap {\n                tester.tail = tail_pos;\n                tester.head = tail_pos;\n                if back {\n                    for i in 0..len * 2 {\n                        tester.push_front(i);\n                    }\n                    for i in 0..len {\n                        assert_eq!(tester.swap_remove_back(i), Some(len * 2 - 1 - i));\n                    }\n                } else {\n                    for i in 0..len * 2 {\n                        tester.push_back(i);\n                    }\n                    for i in 0..len {\n                        let idx = tester.len() - 1 - i;\n                        assert_eq!(tester.swap_remove_front(idx), Some(len * 2 - 1 - i));\n                    }\n                }\n                assert!(tester.tail < tester.cap());\n                assert!(tester.head < tester.cap());\n                assert_eq!(tester, expected);\n            }\n        }\n    }\n    test(true);\n    test(false);\n}\n\n#[test]\nfn test_insert() {\n    // This test checks that every single combination of tail position, length, and\n    // insertion position is tested. Capacity 15 should be large enough to cover every case.\n\n    let mut tester = VecDeque::with_capacity(15);\n    // can't guarantee we got 15, so have to get what we got.\n    // 15 would be great, but we will definitely get 2^k - 1, for k >= 4, or else\n    // this test isn't covering what it wants to\n    let cap = tester.capacity();\n\n    // len is the length *after* insertion\n    let minlen = if cfg!(miri) { cap - 1 } else { 1 }; // Miri is too slow\n    for len in minlen..cap {\n        // 0, 1, 2, .., len - 1\n        let expected = (0..).take(len).collect::<VecDeque<_>>();\n        for tail_pos in 0..cap {\n            for to_insert in 0..len {\n                tester.tail = tail_pos;\n                tester.head = tail_pos;\n                for i in 0..len {\n                    if i != to_insert {\n                        tester.push_back(i);\n                    }\n                }\n                tester.insert(to_insert, to_insert);\n                assert!(tester.tail < tester.cap());\n                assert!(tester.head < tester.cap());\n                assert_eq!(tester, expected);\n            }\n        }\n    }\n}\n\n#[test]\nfn make_contiguous_big_tail() {\n    let mut tester = VecDeque::with_capacity(15);\n\n    for i in 0..3 {\n        tester.push_back(i);\n    }\n\n    for i in 3..10 {\n        tester.push_front(i);\n    }\n\n    // 012......9876543\n    assert_eq!(tester.capacity(), 15);\n    assert_eq!((&[9, 8, 7, 6, 5, 4, 3] as &[_], &[0, 1, 2] as &[_]), tester.as_slices());\n\n    let expected_start = tester.head;\n    tester.make_contiguous();\n    assert_eq!(tester.tail, expected_start);\n    assert_eq!((&[9, 8, 7, 6, 5, 4, 3, 0, 1, 2] as &[_], &[] as &[_]), tester.as_slices());\n}\n\n#[test]\nfn make_contiguous_big_head() {\n    let mut tester = VecDeque::with_capacity(15);\n\n    for i in 0..8 {\n        tester.push_back(i);\n    }\n\n    for i in 8..10 {\n        tester.push_front(i);\n    }\n\n    // 01234567......98\n    let expected_start = 0;\n    tester.make_contiguous();\n    assert_eq!(tester.tail, expected_start);\n    assert_eq!((&[9, 8, 0, 1, 2, 3, 4, 5, 6, 7] as &[_], &[] as &[_]), tester.as_slices());\n}\n\n#[test]\nfn make_contiguous_small_free() {\n    let mut tester = VecDeque::with_capacity(15);\n\n    for i in 'A' as u8..'I' as u8 {\n        tester.push_back(i as char);\n    }\n\n    for i in 'I' as u8..'N' as u8 {\n        tester.push_front(i as char);\n    }\n\n    // ABCDEFGH...MLKJI\n    let expected_start = 0;\n    tester.make_contiguous();\n    assert_eq!(tester.tail, expected_start);\n    assert_eq!(\n        (&['M', 'L', 'K', 'J', 'I', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'] as &[_], &[] as &[_]),\n        tester.as_slices()\n    );\n\n    tester.clear();\n    for i in 'I' as u8..'N' as u8 {\n        tester.push_back(i as char);\n    }\n\n    for i in 'A' as u8..'I' as u8 {\n        tester.push_front(i as char);\n    }\n\n    // IJKLM...HGFEDCBA\n    let expected_start = 0;\n    tester.make_contiguous();\n    assert_eq!(tester.tail, expected_start);\n    assert_eq!(\n        (&['H', 'G', 'F', 'E', 'D', 'C', 'B', 'A', 'I', 'J', 'K', 'L', 'M'] as &[_], &[] as &[_]),\n        tester.as_slices()\n    );\n}\n\n#[test]\nfn make_contiguous_head_to_end() {\n    let mut dq = VecDeque::with_capacity(3);\n    dq.push_front('B');\n    dq.push_front('A');\n    dq.push_back('C');\n    dq.make_contiguous();\n    let expected_tail = 0;\n    let expected_head = 3;\n    assert_eq!(expected_tail, dq.tail);\n    assert_eq!(expected_head, dq.head);\n    assert_eq!((&['A', 'B', 'C'] as &[_], &[] as &[_]), dq.as_slices());\n}\n\n#[test]\nfn make_contiguous_head_to_end_2() {\n    // Another test case for #79808, taken from #80293.\n\n    let mut dq = VecDeque::from_iter(0..6);\n    dq.pop_front();\n    dq.pop_front();\n    dq.push_back(6);\n    dq.push_back(7);\n    dq.push_back(8);\n    dq.make_contiguous();\n    let collected: Vec<_> = dq.iter().copied().collect();\n    assert_eq!(dq.as_slices(), (&collected[..], &[] as &[_]));\n}\n\n#[test]\nfn test_remove() {\n    // This test checks that every single combination of tail position, length, and\n    // removal position is tested. Capacity 15 should be large enough to cover every case.\n\n    let mut tester = VecDeque::with_capacity(15);\n    // can't guarantee we got 15, so have to get what we got.\n    // 15 would be great, but we will definitely get 2^k - 1, for k >= 4, or else\n    // this test isn't covering what it wants to\n    let cap = tester.capacity();\n\n    // len is the length *after* removal\n    let minlen = if cfg!(miri) { cap - 2 } else { 0 }; // Miri is too slow\n    for len in minlen..cap - 1 {\n        // 0, 1, 2, .., len - 1\n        let expected = (0..).take(len).collect::<VecDeque<_>>();\n        for tail_pos in 0..cap {\n            for to_remove in 0..=len {\n                tester.tail = tail_pos;\n                tester.head = tail_pos;\n                for i in 0..len {\n                    if i == to_remove {\n                        tester.push_back(1234);\n                    }\n                    tester.push_back(i);\n                }\n                if to_remove == len {\n                    tester.push_back(1234);\n                }\n                tester.remove(to_remove);\n                assert!(tester.tail < tester.cap());\n                assert!(tester.head < tester.cap());\n                assert_eq!(tester, expected);\n            }\n        }\n    }\n}\n\n#[test]\nfn test_range() {\n    let mut tester: VecDeque<usize> = VecDeque::with_capacity(7);\n\n    let cap = tester.capacity();\n    let minlen = if cfg!(miri) { cap - 1 } else { 0 }; // Miri is too slow\n    for len in minlen..=cap {\n        for tail in 0..=cap {\n            for start in 0..=len {\n                for end in start..=len {\n                    tester.tail = tail;\n                    tester.head = tail;\n                    for i in 0..len {\n                        tester.push_back(i);\n                    }\n\n                    // Check that we iterate over the correct values\n                    let range: VecDeque<_> = tester.range(start..end).copied().collect();\n                    let expected: VecDeque<_> = (start..end).collect();\n                    assert_eq!(range, expected);\n                }\n            }\n        }\n    }\n}\n\n#[test]\nfn test_range_mut() {\n    let mut tester: VecDeque<usize> = VecDeque::with_capacity(7);\n\n    let cap = tester.capacity();\n    for len in 0..=cap {\n        for tail in 0..=cap {\n            for start in 0..=len {\n                for end in start..=len {\n                    tester.tail = tail;\n                    tester.head = tail;\n                    for i in 0..len {\n                        tester.push_back(i);\n                    }\n\n                    let head_was = tester.head;\n                    let tail_was = tester.tail;\n\n                    // Check that we iterate over the correct values\n                    let range: VecDeque<_> = tester.range_mut(start..end).map(|v| *v).collect();\n                    let expected: VecDeque<_> = (start..end).collect();\n                    assert_eq!(range, expected);\n\n                    // We shouldn't have changed the capacity or made the\n                    // head or tail out of bounds\n                    assert_eq!(tester.capacity(), cap);\n                    assert_eq!(tester.tail, tail_was);\n                    assert_eq!(tester.head, head_was);\n                }\n            }\n        }\n    }\n}\n\n#[test]\nfn test_drain() {\n    let mut tester: VecDeque<usize> = VecDeque::with_capacity(7);\n\n    let cap = tester.capacity();\n    for len in 0..=cap {\n        for tail in 0..=cap {\n            for drain_start in 0..=len {\n                for drain_end in drain_start..=len {\n                    tester.tail = tail;\n                    tester.head = tail;\n                    for i in 0..len {\n                        tester.push_back(i);\n                    }\n\n                    // Check that we drain the correct values\n                    let drained: VecDeque<_> = tester.drain(drain_start..drain_end).collect();\n                    let drained_expected: VecDeque<_> = (drain_start..drain_end).collect();\n                    assert_eq!(drained, drained_expected);\n\n                    // We shouldn't have changed the capacity or made the\n                    // head or tail out of bounds\n                    assert_eq!(tester.capacity(), cap);\n                    assert!(tester.tail < tester.cap());\n                    assert!(tester.head < tester.cap());\n\n                    // We should see the correct values in the VecDeque\n                    let expected: VecDeque<_> = (0..drain_start).chain(drain_end..len).collect();\n                    assert_eq!(expected, tester);\n                }\n            }\n        }\n    }\n}\n\n#[test]\nfn test_shrink_to_fit() {\n    // This test checks that every single combination of head and tail position,\n    // is tested. Capacity 15 should be large enough to cover every case.\n\n    let mut tester = VecDeque::with_capacity(15);\n    // can't guarantee we got 15, so have to get what we got.\n    // 15 would be great, but we will definitely get 2^k - 1, for k >= 4, or else\n    // this test isn't covering what it wants to\n    let cap = tester.capacity();\n    tester.reserve(63);\n    let max_cap = tester.capacity();\n\n    for len in 0..=cap {\n        // 0, 1, 2, .., len - 1\n        let expected = (0..).take(len).collect::<VecDeque<_>>();\n        for tail_pos in 0..=max_cap {\n            tester.tail = tail_pos;\n            tester.head = tail_pos;\n            tester.reserve(63);\n            for i in 0..len {\n                tester.push_back(i);\n            }\n            tester.shrink_to_fit();\n            assert!(tester.capacity() <= cap);\n            assert!(tester.tail < tester.cap());\n            assert!(tester.head < tester.cap());\n            assert_eq!(tester, expected);\n        }\n    }\n}\n\n#[test]\nfn test_split_off() {\n    // This test checks that every single combination of tail position, length, and\n    // split position is tested. Capacity 15 should be large enough to cover every case.\n\n    let mut tester = VecDeque::with_capacity(15);\n    // can't guarantee we got 15, so have to get what we got.\n    // 15 would be great, but we will definitely get 2^k - 1, for k >= 4, or else\n    // this test isn't covering what it wants to\n    let cap = tester.capacity();\n\n    // len is the length *before* splitting\n    let minlen = if cfg!(miri) { cap - 1 } else { 0 }; // Miri is too slow\n    for len in minlen..cap {\n        // index to split at\n        for at in 0..=len {\n            // 0, 1, 2, .., at - 1 (may be empty)\n            let expected_self = (0..).take(at).collect::<VecDeque<_>>();\n            // at, at + 1, .., len - 1 (may be empty)\n            let expected_other = (at..).take(len - at).collect::<VecDeque<_>>();\n\n            for tail_pos in 0..cap {\n                tester.tail = tail_pos;\n                tester.head = tail_pos;\n                for i in 0..len {\n                    tester.push_back(i);\n                }\n                let result = tester.split_off(at);\n                assert!(tester.tail < tester.cap());\n                assert!(tester.head < tester.cap());\n                assert!(result.tail < result.cap());\n                assert!(result.head < result.cap());\n                assert_eq!(tester, expected_self);\n                assert_eq!(result, expected_other);\n            }\n        }\n    }\n}\n\n#[test]\nfn test_from_vec() {\n    use crate::vec::Vec;\n    for cap in 0..35 {\n        for len in 0..=cap {\n            let mut vec = Vec::with_capacity(cap);\n            vec.extend(0..len);\n\n            let vd = VecDeque::from(vec.clone());\n            assert!(vd.cap().is_power_of_two());\n            assert_eq!(vd.len(), vec.len());\n            assert!(vd.into_iter().eq(vec));\n        }\n    }\n\n    let vec = Vec::from([(); MAXIMUM_ZST_CAPACITY - 1]);\n    let vd = VecDeque::from(vec.clone());\n    assert!(vd.cap().is_power_of_two());\n    assert_eq!(vd.len(), vec.len());\n}\n\n#[test]\n#[should_panic = \"capacity overflow\"]\nfn test_from_vec_zst_overflow() {\n    use crate::vec::Vec;\n    let vec = Vec::from([(); MAXIMUM_ZST_CAPACITY]);\n    let vd = VecDeque::from(vec.clone()); // no room for +1\n    assert!(vd.cap().is_power_of_two());\n    assert_eq!(vd.len(), vec.len());\n}\n\n#[test]\nfn test_vec_from_vecdeque() {\n    use crate::vec::Vec;\n\n    fn create_vec_and_test_convert(capacity: usize, offset: usize, len: usize) {\n        let mut vd = VecDeque::with_capacity(capacity);\n        for _ in 0..offset {\n            vd.push_back(0);\n            vd.pop_front();\n        }\n        vd.extend(0..len);\n\n        let vec: Vec<_> = Vec::from(vd.clone());\n        assert_eq!(vec.len(), vd.len());\n        assert!(vec.into_iter().eq(vd));\n    }\n\n    // Miri is too slow\n    let max_pwr = if cfg!(miri) { 5 } else { 7 };\n\n    for cap_pwr in 0..max_pwr {\n        // Make capacity as a (2^x)-1, so that the ring size is 2^x\n        let cap = (2i32.pow(cap_pwr) - 1) as usize;\n\n        // In these cases there is enough free space to solve it with copies\n        for len in 0..((cap + 1) / 2) {\n            // Test contiguous cases\n            for offset in 0..(cap - len) {\n                create_vec_and_test_convert(cap, offset, len)\n            }\n\n            // Test cases where block at end of buffer is bigger than block at start\n            for offset in (cap - len)..(cap - (len / 2)) {\n                create_vec_and_test_convert(cap, offset, len)\n            }\n\n            // Test cases where block at start of buffer is bigger than block at end\n            for offset in (cap - (len / 2))..cap {\n                create_vec_and_test_convert(cap, offset, len)\n            }\n        }\n\n        // Now there's not (necessarily) space to straighten the ring with simple copies,\n        // the ring will use swapping when:\n        // (cap + 1 - offset) > (cap + 1 - len) && (len - (cap + 1 - offset)) > (cap + 1 - len))\n        //  right block size  >   free space    &&      left block size       >    free space\n        for len in ((cap + 1) / 2)..cap {\n            // Test contiguous cases\n            for offset in 0..(cap - len) {\n                create_vec_and_test_convert(cap, offset, len)\n            }\n\n            // Test cases where block at end of buffer is bigger than block at start\n            for offset in (cap - len)..(cap - (len / 2)) {\n                create_vec_and_test_convert(cap, offset, len)\n            }\n\n            // Test cases where block at start of buffer is bigger than block at end\n            for offset in (cap - (len / 2))..cap {\n                create_vec_and_test_convert(cap, offset, len)\n            }\n        }\n    }\n}\n\n#[test]\nfn test_clone_from() {\n    let m = vec![1; 8];\n    let n = vec![2; 12];\n    let limit = if cfg!(miri) { 4 } else { 8 }; // Miri is too slow\n    for pfv in 0..limit {\n        for pfu in 0..limit {\n            for longer in 0..2 {\n                let (vr, ur) = if longer == 0 { (&m, &n) } else { (&n, &m) };\n                let mut v = VecDeque::from(vr.clone());\n                for _ in 0..pfv {\n                    v.push_front(1);\n                }\n                let mut u = VecDeque::from(ur.clone());\n                for _ in 0..pfu {\n                    u.push_front(2);\n                }\n                v.clone_from(&u);\n                assert_eq!(&v, &u);\n            }\n        }\n    }\n}\n\n#[test]\nfn test_vec_deque_truncate_drop() {\n    static mut DROPS: u32 = 0;\n    #[derive(Clone)]\n    struct Elem(i32);\n    impl Drop for Elem {\n        fn drop(&mut self) {\n            unsafe {\n                DROPS += 1;\n            }\n        }\n    }\n\n    let v = vec![Elem(1), Elem(2), Elem(3), Elem(4), Elem(5)];\n    for push_front in 0..=v.len() {\n        let v = v.clone();\n        let mut tester = VecDeque::with_capacity(5);\n        for (index, elem) in v.into_iter().enumerate() {\n            if index < push_front {\n                tester.push_front(elem);\n            } else {\n                tester.push_back(elem);\n            }\n        }\n        assert_eq!(unsafe { DROPS }, 0);\n        tester.truncate(3);\n        assert_eq!(unsafe { DROPS }, 2);\n        tester.truncate(0);\n        assert_eq!(unsafe { DROPS }, 5);\n        unsafe {\n            DROPS = 0;\n        }\n    }\n}\n\n#[test]\nfn issue_53529() {\n    use crate::boxed::Box;\n\n    let mut dst = VecDeque::new();\n    dst.push_front(Box::new(1));\n    dst.push_front(Box::new(2));\n    assert_eq!(*dst.pop_back().unwrap(), 1);\n\n    let mut src = VecDeque::new();\n    src.push_front(Box::new(2));\n    dst.append(&mut src);\n    for a in dst {\n        assert_eq!(*a, 2);\n    }\n}\n\n#[test]\nfn issue_80303() {\n    use core::iter;\n    use core::num::Wrapping;\n\n    // This is a valid, albeit rather bad hash function implementation.\n    struct SimpleHasher(Wrapping<u64>);\n\n    impl Hasher for SimpleHasher {\n        fn finish(&self) -> u64 {\n            self.0.0\n        }\n\n        fn write(&mut self, bytes: &[u8]) {\n            // This particular implementation hashes value 24 in addition to bytes.\n            // Such an implementation is valid as Hasher only guarantees equivalence\n            // for the exact same set of calls to its methods.\n            for &v in iter::once(&24).chain(bytes) {\n                self.0 = Wrapping(31) * self.0 + Wrapping(u64::from(v));\n            }\n        }\n    }\n\n    fn hash_code(value: impl Hash) -> u64 {\n        let mut hasher = SimpleHasher(Wrapping(1));\n        value.hash(&mut hasher);\n        hasher.finish()\n    }\n\n    // This creates two deques for which values returned by as_slices\n    // method differ.\n    let vda: VecDeque<u8> = (0..10).collect();\n    let mut vdb = VecDeque::with_capacity(10);\n    vdb.extend(5..10);\n    (0..5).rev().for_each(|elem| vdb.push_front(elem));\n    assert_ne!(vda.as_slices(), vdb.as_slices());\n    assert_eq!(vda, vdb);\n    assert_eq!(hash_code(vda), hash_code(vdb));\n}\nuse core::fmt;\nuse core::iter::{FusedIterator, TrustedLen, TrustedRandomAccess};\nuse core::marker::PhantomData;\n\nuse super::{count, wrap_index, RingSlices};\n\n/// A mutable iterator over the elements of a `VecDeque`.\n///\n/// This `struct` is created by the [`iter_mut`] method on [`super::VecDeque`]. See its\n/// documentation for more.\n///\n/// [`iter_mut`]: super::VecDeque::iter_mut\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct IterMut<'a, T: 'a> {\n    // Internal safety invariant: the entire slice is dereferencable.\n    pub(crate) ring: *mut [T],\n    pub(crate) tail: usize,\n    pub(crate) head: usize,\n    pub(crate) phantom: PhantomData<&'a mut [T]>,\n}\n\n// SAFETY: we do nothing thread-local and there is no interior mutability,\n// so the usual structural `Send`/`Sync` apply.\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nunsafe impl<T: Send> Send for IterMut<'_, T> {}\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nunsafe impl<T: Sync> Sync for IterMut<'_, T> {}\n\n#[stable(feature = \"collection_debug\", since = \"1.17.0\")]\nimpl<T: fmt::Debug> fmt::Debug for IterMut<'_, T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        let (front, back) = RingSlices::ring_slices(self.ring, self.head, self.tail);\n        // SAFETY: these are the elements we have not handed out yet, so aliasing is fine.\n        // The `IterMut` invariant also ensures everything is dereferencable.\n        let (front, back) = unsafe { (&*front, &*back) };\n        f.debug_tuple(\"IterMut\").field(&front).field(&back).finish()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T> Iterator for IterMut<'a, T> {\n    type Item = &'a mut T;\n\n    #[inline]\n    fn next(&mut self) -> Option<&'a mut T> {\n        if self.tail == self.head {\n            return None;\n        }\n        let tail = self.tail;\n        self.tail = wrap_index(self.tail.wrapping_add(1), self.ring.len());\n\n        unsafe {\n            let elem = self.ring.get_unchecked_mut(tail);\n            Some(&mut *elem)\n        }\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        let len = count(self.tail, self.head, self.ring.len());\n        (len, Some(len))\n    }\n\n    fn fold<Acc, F>(self, mut accum: Acc, mut f: F) -> Acc\n    where\n        F: FnMut(Acc, Self::Item) -> Acc,\n    {\n        let (front, back) = RingSlices::ring_slices(self.ring, self.head, self.tail);\n        // SAFETY: these are the elements we have not handed out yet, so aliasing is fine.\n        // The `IterMut` invariant also ensures everything is dereferencable.\n        let (front, back) = unsafe { (&mut *front, &mut *back) };\n        accum = front.iter_mut().fold(accum, &mut f);\n        back.iter_mut().fold(accum, &mut f)\n    }\n\n    fn nth(&mut self, n: usize) -> Option<Self::Item> {\n        if n >= count(self.tail, self.head, self.ring.len()) {\n            self.tail = self.head;\n            None\n        } else {\n            self.tail = wrap_index(self.tail.wrapping_add(n), self.ring.len());\n            self.next()\n        }\n    }\n\n    #[inline]\n    fn last(mut self) -> Option<&'a mut T> {\n        self.next_back()\n    }\n\n    #[inline]\n    unsafe fn __iterator_get_unchecked(&mut self, idx: usize) -> Self::Item\n    where\n        Self: TrustedRandomAccess,\n    {\n        // Safety: The TrustedRandomAccess contract requires that callers only  pass an index\n        // that is in bounds.\n        unsafe {\n            let idx = wrap_index(self.tail.wrapping_add(idx), self.ring.len());\n            &mut *self.ring.get_unchecked_mut(idx)\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T> DoubleEndedIterator for IterMut<'a, T> {\n    #[inline]\n    fn next_back(&mut self) -> Option<&'a mut T> {\n        if self.tail == self.head {\n            return None;\n        }\n        self.head = wrap_index(self.head.wrapping_sub(1), self.ring.len());\n\n        unsafe {\n            let elem = self.ring.get_unchecked_mut(self.head);\n            Some(&mut *elem)\n        }\n    }\n\n    fn rfold<Acc, F>(self, mut accum: Acc, mut f: F) -> Acc\n    where\n        F: FnMut(Acc, Self::Item) -> Acc,\n    {\n        let (front, back) = RingSlices::ring_slices(self.ring, self.head, self.tail);\n        // SAFETY: these are the elements we have not handed out yet, so aliasing is fine.\n        // The `IterMut` invariant also ensures everything is dereferencable.\n        let (front, back) = unsafe { (&mut *front, &mut *back) };\n        accum = back.iter_mut().rfold(accum, &mut f);\n        front.iter_mut().rfold(accum, &mut f)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> ExactSizeIterator for IterMut<'_, T> {\n    fn is_empty(&self) -> bool {\n        self.head == self.tail\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<T> FusedIterator for IterMut<'_, T> {}\n\n#[unstable(feature = \"trusted_len\", issue = \"37572\")]\nunsafe impl<T> TrustedLen for IterMut<'_, T> {}\n\n#[doc(hidden)]\n#[unstable(feature = \"trusted_random_access\", issue = \"none\")]\nunsafe impl<T> TrustedRandomAccess for IterMut<'_, T> {\n    const MAY_HAVE_SIDE_EFFECT: bool = false;\n}\n//! A priority queue implemented with a binary heap.\n//!\n//! Insertion and popping the largest element have *O*(log(*n*)) time complexity.\n//! Checking the largest element is *O*(1). Converting a vector to a binary heap\n//! can be done in-place, and has *O*(*n*) complexity. A binary heap can also be\n//! converted to a sorted vector in-place, allowing it to be used for an *O*(*n* \\* log(*n*))\n//! in-place heapsort.\n//!\n//! # Examples\n//!\n//! This is a larger example that implements [Dijkstra's algorithm][dijkstra]\n//! to solve the [shortest path problem][sssp] on a [directed graph][dir_graph].\n//! It shows how to use [`BinaryHeap`] with custom types.\n//!\n//! [dijkstra]: https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm\n//! [sssp]: https://en.wikipedia.org/wiki/Shortest_path_problem\n//! [dir_graph]: https://en.wikipedia.org/wiki/Directed_graph\n//!\n//! ```\n//! use std::cmp::Ordering;\n//! use std::collections::BinaryHeap;\n//!\n//! #[derive(Copy, Clone, Eq, PartialEq)]\n//! struct State {\n//!     cost: usize,\n//!     position: usize,\n//! }\n//!\n//! // The priority queue depends on `Ord`.\n//! // Explicitly implement the trait so the queue becomes a min-heap\n//! // instead of a max-heap.\n//! impl Ord for State {\n//!     fn cmp(&self, other: &Self) -> Ordering {\n//!         // Notice that the we flip the ordering on costs.\n//!         // In case of a tie we compare positions - this step is necessary\n//!         // to make implementations of `PartialEq` and `Ord` consistent.\n//!         other.cost.cmp(&self.cost)\n//!             .then_with(|| self.position.cmp(&other.position))\n//!     }\n//! }\n//!\n//! // `PartialOrd` needs to be implemented as well.\n//! impl PartialOrd for State {\n//!     fn partial_cmp(&self, other: &Self) -> Option<Ordering> {\n//!         Some(self.cmp(other))\n//!     }\n//! }\n//!\n//! // Each node is represented as an `usize`, for a shorter implementation.\n//! struct Edge {\n//!     node: usize,\n//!     cost: usize,\n//! }\n//!\n//! // Dijkstra's shortest path algorithm.\n//!\n//! // Start at `start` and use `dist` to track the current shortest distance\n//! // to each node. This implementation isn't memory-efficient as it may leave duplicate\n//! // nodes in the queue. It also uses `usize::MAX` as a sentinel value,\n//! // for a simpler implementation.\n//! fn shortest_path(adj_list: &Vec<Vec<Edge>>, start: usize, goal: usize) -> Option<usize> {\n//!     // dist[node] = current shortest distance from `start` to `node`\n//!     let mut dist: Vec<_> = (0..adj_list.len()).map(|_| usize::MAX).collect();\n//!\n//!     let mut heap = BinaryHeap::new();\n//!\n//!     // We're at `start`, with a zero cost\n//!     dist[start] = 0;\n//!     heap.push(State { cost: 0, position: start });\n//!\n//!     // Examine the frontier with lower cost nodes first (min-heap)\n//!     while let Some(State { cost, position }) = heap.pop() {\n//!         // Alternatively we could have continued to find all shortest paths\n//!         if position == goal { return Some(cost); }\n//!\n//!         // Important as we may have already found a better way\n//!         if cost > dist[position] { continue; }\n//!\n//!         // For each node we can reach, see if we can find a way with\n//!         // a lower cost going through this node\n//!         for edge in &adj_list[position] {\n//!             let next = State { cost: cost + edge.cost, position: edge.node };\n//!\n//!             // If so, add it to the frontier and continue\n//!             if next.cost < dist[next.position] {\n//!                 heap.push(next);\n//!                 // Relaxation, we have now found a better way\n//!                 dist[next.position] = next.cost;\n//!             }\n//!         }\n//!     }\n//!\n//!     // Goal not reachable\n//!     None\n//! }\n//!\n//! fn main() {\n//!     // This is the directed graph we're going to use.\n//!     // The node numbers correspond to the different states,\n//!     // and the edge weights symbolize the cost of moving\n//!     // from one node to another.\n//!     // Note that the edges are one-way.\n//!     //\n//!     //                  7\n//!     //          +-----------------+\n//!     //          |                 |\n//!     //          v   1        2    |  2\n//!     //          0 -----> 1 -----> 3 ---> 4\n//!     //          |        ^        ^      ^\n//!     //          |        | 1      |      |\n//!     //          |        |        | 3    | 1\n//!     //          +------> 2 -------+      |\n//!     //           10      |               |\n//!     //                   +---------------+\n//!     //\n//!     // The graph is represented as an adjacency list where each index,\n//!     // corresponding to a node value, has a list of outgoing edges.\n//!     // Chosen for its efficiency.\n//!     let graph = vec![\n//!         // Node 0\n//!         vec![Edge { node: 2, cost: 10 },\n//!              Edge { node: 1, cost: 1 }],\n//!         // Node 1\n//!         vec![Edge { node: 3, cost: 2 }],\n//!         // Node 2\n//!         vec![Edge { node: 1, cost: 1 },\n//!              Edge { node: 3, cost: 3 },\n//!              Edge { node: 4, cost: 1 }],\n//!         // Node 3\n//!         vec![Edge { node: 0, cost: 7 },\n//!              Edge { node: 4, cost: 2 }],\n//!         // Node 4\n//!         vec![]];\n//!\n//!     assert_eq!(shortest_path(&graph, 0, 1), Some(1));\n//!     assert_eq!(shortest_path(&graph, 0, 3), Some(3));\n//!     assert_eq!(shortest_path(&graph, 3, 0), Some(7));\n//!     assert_eq!(shortest_path(&graph, 0, 4), Some(5));\n//!     assert_eq!(shortest_path(&graph, 4, 0), None);\n//! }\n//! ```\n\n#![allow(missing_docs)]\n#![stable(feature = \"rust1\", since = \"1.0.0\")]\n\nuse core::fmt;\nuse core::iter::{FromIterator, FusedIterator, InPlaceIterable, SourceIter, TrustedLen};\nuse core::mem::{self, swap, ManuallyDrop};\nuse core::ops::{Deref, DerefMut};\nuse core::ptr;\n\nuse crate::slice;\nuse crate::vec::{self, AsIntoIter, Vec};\n\nuse super::SpecExtend;\n\n/// A priority queue implemented with a binary heap.\n///\n/// This will be a max-heap.\n///\n/// It is a logic error for an item to be modified in such a way that the\n/// item's ordering relative to any other item, as determined by the `Ord`\n/// trait, changes while it is in the heap. This is normally only possible\n/// through `Cell`, `RefCell`, global state, I/O, or unsafe code. The\n/// behavior resulting from such a logic error is not specified, but will\n/// not result in undefined behavior. This could include panics, incorrect\n/// results, aborts, memory leaks, and non-termination.\n///\n/// # Examples\n///\n/// ```\n/// use std::collections::BinaryHeap;\n///\n/// // Type inference lets us omit an explicit type signature (which\n/// // would be `BinaryHeap<i32>` in this example).\n/// let mut heap = BinaryHeap::new();\n///\n/// // We can use peek to look at the next item in the heap. In this case,\n/// // there's no items in there yet so we get None.\n/// assert_eq!(heap.peek(), None);\n///\n/// // Let's add some scores...\n/// heap.push(1);\n/// heap.push(5);\n/// heap.push(2);\n///\n/// // Now peek shows the most important item in the heap.\n/// assert_eq!(heap.peek(), Some(&5));\n///\n/// // We can check the length of a heap.\n/// assert_eq!(heap.len(), 3);\n///\n/// // We can iterate over the items in the heap, although they are returned in\n/// // a random order.\n/// for x in &heap {\n///     println!(\"{}\", x);\n/// }\n///\n/// // If we instead pop these scores, they should come back in order.\n/// assert_eq!(heap.pop(), Some(5));\n/// assert_eq!(heap.pop(), Some(2));\n/// assert_eq!(heap.pop(), Some(1));\n/// assert_eq!(heap.pop(), None);\n///\n/// // We can clear the heap of any remaining items.\n/// heap.clear();\n///\n/// // The heap should now be empty.\n/// assert!(heap.is_empty())\n/// ```\n///\n/// ## Min-heap\n///\n/// Either `std::cmp::Reverse` or a custom `Ord` implementation can be used to\n/// make `BinaryHeap` a min-heap. This makes `heap.pop()` return the smallest\n/// value instead of the greatest one.\n///\n/// ```\n/// use std::collections::BinaryHeap;\n/// use std::cmp::Reverse;\n///\n/// let mut heap = BinaryHeap::new();\n///\n/// // Wrap values in `Reverse`\n/// heap.push(Reverse(1));\n/// heap.push(Reverse(5));\n/// heap.push(Reverse(2));\n///\n/// // If we pop these scores now, they should come back in the reverse order.\n/// assert_eq!(heap.pop(), Some(Reverse(1)));\n/// assert_eq!(heap.pop(), Some(Reverse(2)));\n/// assert_eq!(heap.pop(), Some(Reverse(5)));\n/// assert_eq!(heap.pop(), None);\n/// ```\n///\n/// # Time complexity\n///\n/// | [push] | [pop]     | [peek]/[peek\\_mut] |\n/// |--------|-----------|--------------------|\n/// | O(1)~  | *O*(log(*n*)) | *O*(1)               |\n///\n/// The value for `push` is an expected cost; the method documentation gives a\n/// more detailed analysis.\n///\n/// [push]: BinaryHeap::push\n/// [pop]: BinaryHeap::pop\n/// [peek]: BinaryHeap::peek\n/// [peek\\_mut]: BinaryHeap::peek_mut\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\n#[cfg_attr(not(test), rustc_diagnostic_item = \"BinaryHeap\")]\npub struct BinaryHeap<T> {\n    data: Vec<T>,\n}\n\n/// Structure wrapping a mutable reference to the greatest item on a\n/// `BinaryHeap`.\n///\n/// This `struct` is created by the [`peek_mut`] method on [`BinaryHeap`]. See\n/// its documentation for more.\n///\n/// [`peek_mut`]: BinaryHeap::peek_mut\n#[stable(feature = \"binary_heap_peek_mut\", since = \"1.12.0\")]\npub struct PeekMut<'a, T: 'a + Ord> {\n    heap: &'a mut BinaryHeap<T>,\n    sift: bool,\n}\n\n#[stable(feature = \"collection_debug\", since = \"1.17.0\")]\nimpl<T: Ord + fmt::Debug> fmt::Debug for PeekMut<'_, T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"PeekMut\").field(&self.heap.data[0]).finish()\n    }\n}\n\n#[stable(feature = \"binary_heap_peek_mut\", since = \"1.12.0\")]\nimpl<T: Ord> Drop for PeekMut<'_, T> {\n    fn drop(&mut self) {\n        if self.sift {\n            // SAFETY: PeekMut is only instantiated for non-empty heaps.\n            unsafe { self.heap.sift_down(0) };\n        }\n    }\n}\n\n#[stable(feature = \"binary_heap_peek_mut\", since = \"1.12.0\")]\nimpl<T: Ord> Deref for PeekMut<'_, T> {\n    type Target = T;\n    fn deref(&self) -> &T {\n        debug_assert!(!self.heap.is_empty());\n        // SAFE: PeekMut is only instantiated for non-empty heaps\n        unsafe { self.heap.data.get_unchecked(0) }\n    }\n}\n\n#[stable(feature = \"binary_heap_peek_mut\", since = \"1.12.0\")]\nimpl<T: Ord> DerefMut for PeekMut<'_, T> {\n    fn deref_mut(&mut self) -> &mut T {\n        debug_assert!(!self.heap.is_empty());\n        self.sift = true;\n        // SAFE: PeekMut is only instantiated for non-empty heaps\n        unsafe { self.heap.data.get_unchecked_mut(0) }\n    }\n}\n\nimpl<'a, T: Ord> PeekMut<'a, T> {\n    /// Removes the peeked value from the heap and returns it.\n    #[stable(feature = \"binary_heap_peek_mut_pop\", since = \"1.18.0\")]\n    pub fn pop(mut this: PeekMut<'a, T>) -> T {\n        let value = this.heap.pop().unwrap();\n        this.sift = false;\n        value\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Clone> Clone for BinaryHeap<T> {\n    fn clone(&self) -> Self {\n        BinaryHeap { data: self.data.clone() }\n    }\n\n    fn clone_from(&mut self, source: &Self) {\n        self.data.clone_from(&source.data);\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Ord> Default for BinaryHeap<T> {\n    /// Creates an empty `BinaryHeap<T>`.\n    #[inline]\n    fn default() -> BinaryHeap<T> {\n        BinaryHeap::new()\n    }\n}\n\n#[stable(feature = \"binaryheap_debug\", since = \"1.4.0\")]\nimpl<T: fmt::Debug> fmt::Debug for BinaryHeap<T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_list().entries(self.iter()).finish()\n    }\n}\n\nimpl<T: Ord> BinaryHeap<T> {\n    /// Creates an empty `BinaryHeap` as a max-heap.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BinaryHeap;\n    /// let mut heap = BinaryHeap::new();\n    /// heap.push(4);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn new() -> BinaryHeap<T> {\n        BinaryHeap { data: vec![] }\n    }\n\n    /// Creates an empty `BinaryHeap` with a specific capacity.\n    /// This preallocates enough memory for `capacity` elements,\n    /// so that the `BinaryHeap` does not have to be reallocated\n    /// until it contains at least that many values.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BinaryHeap;\n    /// let mut heap = BinaryHeap::with_capacity(10);\n    /// heap.push(4);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn with_capacity(capacity: usize) -> BinaryHeap<T> {\n        BinaryHeap { data: Vec::with_capacity(capacity) }\n    }\n\n    /// Returns a mutable reference to the greatest item in the binary heap, or\n    /// `None` if it is empty.\n    ///\n    /// Note: If the `PeekMut` value is leaked, the heap may be in an\n    /// inconsistent state.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BinaryHeap;\n    /// let mut heap = BinaryHeap::new();\n    /// assert!(heap.peek_mut().is_none());\n    ///\n    /// heap.push(1);\n    /// heap.push(5);\n    /// heap.push(2);\n    /// {\n    ///     let mut val = heap.peek_mut().unwrap();\n    ///     *val = 0;\n    /// }\n    /// assert_eq!(heap.peek(), Some(&2));\n    /// ```\n    ///\n    /// # Time complexity\n    ///\n    /// If the item is modified then the worst case time complexity is *O*(log(*n*)),\n    /// otherwise it's *O*(1).\n    #[stable(feature = \"binary_heap_peek_mut\", since = \"1.12.0\")]\n    pub fn peek_mut(&mut self) -> Option<PeekMut<'_, T>> {\n        if self.is_empty() { None } else { Some(PeekMut { heap: self, sift: false }) }\n    }\n\n    /// Removes the greatest item from the binary heap and returns it, or `None` if it\n    /// is empty.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BinaryHeap;\n    /// let mut heap = BinaryHeap::from(vec![1, 3]);\n    ///\n    /// assert_eq!(heap.pop(), Some(3));\n    /// assert_eq!(heap.pop(), Some(1));\n    /// assert_eq!(heap.pop(), None);\n    /// ```\n    ///\n    /// # Time complexity\n    ///\n    /// The worst case cost of `pop` on a heap containing *n* elements is *O*(log(*n*)).\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn pop(&mut self) -> Option<T> {\n        self.data.pop().map(|mut item| {\n            if !self.is_empty() {\n                swap(&mut item, &mut self.data[0]);\n                // SAFETY: !self.is_empty() means that self.len() > 0\n                unsafe { self.sift_down_to_bottom(0) };\n            }\n            item\n        })\n    }\n\n    /// Pushes an item onto the binary heap.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BinaryHeap;\n    /// let mut heap = BinaryHeap::new();\n    /// heap.push(3);\n    /// heap.push(5);\n    /// heap.push(1);\n    ///\n    /// assert_eq!(heap.len(), 3);\n    /// assert_eq!(heap.peek(), Some(&5));\n    /// ```\n    ///\n    /// # Time complexity\n    ///\n    /// The expected cost of `push`, averaged over every possible ordering of\n    /// the elements being pushed, and over a sufficiently large number of\n    /// pushes, is *O*(1). This is the most meaningful cost metric when pushing\n    /// elements that are *not* already in any sorted pattern.\n    ///\n    /// The time complexity degrades if elements are pushed in predominantly\n    /// ascending order. In the worst case, elements are pushed in ascending\n    /// sorted order and the amortized cost per push is *O*(log(*n*)) against a heap\n    /// containing *n* elements.\n    ///\n    /// The worst case cost of a *single* call to `push` is *O*(*n*). The worst case\n    /// occurs when capacity is exhausted and needs a resize. The resize cost\n    /// has been amortized in the previous figures.\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn push(&mut self, item: T) {\n        let old_len = self.len();\n        self.data.push(item);\n        // SAFETY: Since we pushed a new item it means that\n        //  old_len = self.len() - 1 < self.len()\n        unsafe { self.sift_up(0, old_len) };\n    }\n\n    /// Consumes the `BinaryHeap` and returns a vector in sorted\n    /// (ascending) order.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BinaryHeap;\n    ///\n    /// let mut heap = BinaryHeap::from(vec![1, 2, 4, 5, 7]);\n    /// heap.push(6);\n    /// heap.push(3);\n    ///\n    /// let vec = heap.into_sorted_vec();\n    /// assert_eq!(vec, [1, 2, 3, 4, 5, 6, 7]);\n    /// ```\n    #[stable(feature = \"binary_heap_extras_15\", since = \"1.5.0\")]\n    pub fn into_sorted_vec(mut self) -> Vec<T> {\n        let mut end = self.len();\n        while end > 1 {\n            end -= 1;\n            // SAFETY: `end` goes from `self.len() - 1` to 1 (both included),\n            //  so it's always a valid index to access.\n            //  It is safe to access index 0 (i.e. `ptr`), because\n            //  1 <= end < self.len(), which means self.len() >= 2.\n            unsafe {\n                let ptr = self.data.as_mut_ptr();\n                ptr::swap(ptr, ptr.add(end));\n            }\n            // SAFETY: `end` goes from `self.len() - 1` to 1 (both included) so:\n            //  0 < 1 <= end <= self.len() - 1 < self.len()\n            //  Which means 0 < end and end < self.len().\n            unsafe { self.sift_down_range(0, end) };\n        }\n        self.into_vec()\n    }\n\n    // The implementations of sift_up and sift_down use unsafe blocks in\n    // order to move an element out of the vector (leaving behind a\n    // hole), shift along the others and move the removed element back into the\n    // vector at the final location of the hole.\n    // The `Hole` type is used to represent this, and make sure\n    // the hole is filled back at the end of its scope, even on panic.\n    // Using a hole reduces the constant factor compared to using swaps,\n    // which involves twice as many moves.\n\n    /// # Safety\n    ///\n    /// The caller must guarantee that `pos < self.len()`.\n    unsafe fn sift_up(&mut self, start: usize, pos: usize) -> usize {\n        // Take out the value at `pos` and create a hole.\n        // SAFETY: The caller guarantees that pos < self.len()\n        let mut hole = unsafe { Hole::new(&mut self.data, pos) };\n\n        while hole.pos() > start {\n            let parent = (hole.pos() - 1) / 2;\n\n            // SAFETY: hole.pos() > start >= 0, which means hole.pos() > 0\n            //  and so hole.pos() - 1 can't underflow.\n            //  This guarantees that parent < hole.pos() so\n            //  it's a valid index and also != hole.pos().\n            if hole.element() <= unsafe { hole.get(parent) } {\n                break;\n            }\n\n            // SAFETY: Same as above\n            unsafe { hole.move_to(parent) };\n        }\n\n        hole.pos()\n    }\n\n    /// Take an element at `pos` and move it down the heap,\n    /// while its children are larger.\n    ///\n    /// # Safety\n    ///\n    /// The caller must guarantee that `pos < end <= self.len()`.\n    unsafe fn sift_down_range(&mut self, pos: usize, end: usize) {\n        // SAFETY: The caller guarantees that pos < end <= self.len().\n        let mut hole = unsafe { Hole::new(&mut self.data, pos) };\n        let mut child = 2 * hole.pos() + 1;\n\n        // Loop invariant: child == 2 * hole.pos() + 1.\n        while child <= end.saturating_sub(2) {\n            // compare with the greater of the two children\n            // SAFETY: child < end - 1 < self.len() and\n            //  child + 1 < end <= self.len(), so they're valid indexes.\n            //  child == 2 * hole.pos() + 1 != hole.pos() and\n            //  child + 1 == 2 * hole.pos() + 2 != hole.pos().\n            // FIXME: 2 * hole.pos() + 1 or 2 * hole.pos() + 2 could overflow\n            //  if T is a ZST\n            child += unsafe { hole.get(child) <= hole.get(child + 1) } as usize;\n\n            // if we are already in order, stop.\n            // SAFETY: child is now either the old child or the old child+1\n            //  We already proven that both are < self.len() and != hole.pos()\n            if hole.element() >= unsafe { hole.get(child) } {\n                return;\n            }\n\n            // SAFETY: same as above.\n            unsafe { hole.move_to(child) };\n            child = 2 * hole.pos() + 1;\n        }\n\n        // SAFETY: && short circuit, which means that in the\n        //  second condition it's already true that child == end - 1 < self.len().\n        if child == end - 1 && hole.element() < unsafe { hole.get(child) } {\n            // SAFETY: child is already proven to be a valid index and\n            //  child == 2 * hole.pos() + 1 != hole.pos().\n            unsafe { hole.move_to(child) };\n        }\n    }\n\n    /// # Safety\n    ///\n    /// The caller must guarantee that `pos < self.len()`.\n    unsafe fn sift_down(&mut self, pos: usize) {\n        let len = self.len();\n        // SAFETY: pos < len is guaranteed by the caller and\n        //  obviously len = self.len() <= self.len().\n        unsafe { self.sift_down_range(pos, len) };\n    }\n\n    /// Take an element at `pos` and move it all the way down the heap,\n    /// then sift it up to its position.\n    ///\n    /// Note: This is faster when the element is known to be large / should\n    /// be closer to the bottom.\n    ///\n    /// # Safety\n    ///\n    /// The caller must guarantee that `pos < self.len()`.\n    unsafe fn sift_down_to_bottom(&mut self, mut pos: usize) {\n        let end = self.len();\n        let start = pos;\n\n        // SAFETY: The caller guarantees that pos < self.len().\n        let mut hole = unsafe { Hole::new(&mut self.data, pos) };\n        let mut child = 2 * hole.pos() + 1;\n\n        // Loop invariant: child == 2 * hole.pos() + 1.\n        while child <= end.saturating_sub(2) {\n            // SAFETY: child < end - 1 < self.len() and\n            //  child + 1 < end <= self.len(), so they're valid indexes.\n            //  child == 2 * hole.pos() + 1 != hole.pos() and\n            //  child + 1 == 2 * hole.pos() + 2 != hole.pos().\n            // FIXME: 2 * hole.pos() + 1 or 2 * hole.pos() + 2 could overflow\n            //  if T is a ZST\n            child += unsafe { hole.get(child) <= hole.get(child + 1) } as usize;\n\n            // SAFETY: Same as above\n            unsafe { hole.move_to(child) };\n            child = 2 * hole.pos() + 1;\n        }\n\n        if child == end - 1 {\n            // SAFETY: child == end - 1 < self.len(), so it's a valid index\n            //  and child == 2 * hole.pos() + 1 != hole.pos().\n            unsafe { hole.move_to(child) };\n        }\n        pos = hole.pos();\n        drop(hole);\n\n        // SAFETY: pos is the position in the hole and was already proven\n        //  to be a valid index.\n        unsafe { self.sift_up(start, pos) };\n    }\n\n    /// Rebuild assuming data[0..start] is still a proper heap.\n    fn rebuild_tail(&mut self, start: usize) {\n        if start == self.len() {\n            return;\n        }\n\n        let tail_len = self.len() - start;\n\n        #[inline(always)]\n        fn log2_fast(x: usize) -> usize {\n            (usize::BITS - x.leading_zeros() - 1) as usize\n        }\n\n        // `rebuild` takes O(self.len()) operations\n        // and about 2 * self.len() comparisons in the worst case\n        // while repeating `sift_up` takes O(tail_len * log(start)) operations\n        // and about 1 * tail_len * log_2(start) comparisons in the worst case,\n        // assuming start >= tail_len. For larger heaps, the crossover point\n        // no longer follows this reasoning and was determined empirically.\n        let better_to_rebuild = if start < tail_len {\n            true\n        } else if self.len() <= 2048 {\n            2 * self.len() < tail_len * log2_fast(start)\n        } else {\n            2 * self.len() < tail_len * 11\n        };\n\n        if better_to_rebuild {\n            self.rebuild();\n        } else {\n            for i in start..self.len() {\n                // SAFETY: The index `i` is always less than self.len().\n                unsafe { self.sift_up(0, i) };\n            }\n        }\n    }\n\n    fn rebuild(&mut self) {\n        let mut n = self.len() / 2;\n        while n > 0 {\n            n -= 1;\n            // SAFETY: n starts from self.len() / 2 and goes down to 0.\n            //  The only case when !(n < self.len()) is if\n            //  self.len() == 0, but it's ruled out by the loop condition.\n            unsafe { self.sift_down(n) };\n        }\n    }\n\n    /// Moves all the elements of `other` into `self`, leaving `other` empty.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BinaryHeap;\n    ///\n    /// let v = vec![-10, 1, 2, 3, 3];\n    /// let mut a = BinaryHeap::from(v);\n    ///\n    /// let v = vec![-20, 5, 43];\n    /// let mut b = BinaryHeap::from(v);\n    ///\n    /// a.append(&mut b);\n    ///\n    /// assert_eq!(a.into_sorted_vec(), [-20, -10, 1, 2, 3, 3, 5, 43]);\n    /// assert!(b.is_empty());\n    /// ```\n    #[stable(feature = \"binary_heap_append\", since = \"1.11.0\")]\n    pub fn append(&mut self, other: &mut Self) {\n        if self.len() < other.len() {\n            swap(self, other);\n        }\n\n        let start = self.data.len();\n\n        self.data.append(&mut other.data);\n\n        self.rebuild_tail(start);\n    }\n\n    /// Returns an iterator which retrieves elements in heap order.\n    /// The retrieved elements are removed from the original heap.\n    /// The remaining elements will be removed on drop in heap order.\n    ///\n    /// Note:\n    /// * `.drain_sorted()` is *O*(*n* \\* log(*n*)); much slower than `.drain()`.\n    ///   You should use the latter for most cases.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// #![feature(binary_heap_drain_sorted)]\n    /// use std::collections::BinaryHeap;\n    ///\n    /// let mut heap = BinaryHeap::from(vec![1, 2, 3, 4, 5]);\n    /// assert_eq!(heap.len(), 5);\n    ///\n    /// drop(heap.drain_sorted()); // removes all elements in heap order\n    /// assert_eq!(heap.len(), 0);\n    /// ```\n    #[inline]\n    #[unstable(feature = \"binary_heap_drain_sorted\", issue = \"59278\")]\n    pub fn drain_sorted(&mut self) -> DrainSorted<'_, T> {\n        DrainSorted { inner: self }\n    }\n\n    /// Retains only the elements specified by the predicate.\n    ///\n    /// In other words, remove all elements `e` such that `f(&e)` returns\n    /// `false`. The elements are visited in unsorted (and unspecified) order.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// #![feature(binary_heap_retain)]\n    /// use std::collections::BinaryHeap;\n    ///\n    /// let mut heap = BinaryHeap::from(vec![-10, -5, 1, 2, 4, 13]);\n    ///\n    /// heap.retain(|x| x % 2 == 0); // only keep even numbers\n    ///\n    /// assert_eq!(heap.into_sorted_vec(), [-10, 2, 4])\n    /// ```\n    #[unstable(feature = \"binary_heap_retain\", issue = \"71503\")]\n    pub fn retain<F>(&mut self, mut f: F)\n    where\n        F: FnMut(&T) -> bool,\n    {\n        let mut first_removed = self.len();\n        let mut i = 0;\n        self.data.retain(|e| {\n            let keep = f(e);\n            if !keep && i < first_removed {\n                first_removed = i;\n            }\n            i += 1;\n            keep\n        });\n        // data[0..first_removed] is untouched, so we only need to rebuild the tail:\n        self.rebuild_tail(first_removed);\n    }\n}\n\nimpl<T> BinaryHeap<T> {\n    /// Returns an iterator visiting all values in the underlying vector, in\n    /// arbitrary order.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BinaryHeap;\n    /// let heap = BinaryHeap::from(vec![1, 2, 3, 4]);\n    ///\n    /// // Print 1, 2, 3, 4 in arbitrary order\n    /// for x in heap.iter() {\n    ///     println!(\"{}\", x);\n    /// }\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn iter(&self) -> Iter<'_, T> {\n        Iter { iter: self.data.iter() }\n    }\n\n    /// Returns an iterator which retrieves elements in heap order.\n    /// This method consumes the original heap.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// #![feature(binary_heap_into_iter_sorted)]\n    /// use std::collections::BinaryHeap;\n    /// let heap = BinaryHeap::from(vec![1, 2, 3, 4, 5]);\n    ///\n    /// assert_eq!(heap.into_iter_sorted().take(2).collect::<Vec<_>>(), vec![5, 4]);\n    /// ```\n    #[unstable(feature = \"binary_heap_into_iter_sorted\", issue = \"59278\")]\n    pub fn into_iter_sorted(self) -> IntoIterSorted<T> {\n        IntoIterSorted { inner: self }\n    }\n\n    /// Returns the greatest item in the binary heap, or `None` if it is empty.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BinaryHeap;\n    /// let mut heap = BinaryHeap::new();\n    /// assert_eq!(heap.peek(), None);\n    ///\n    /// heap.push(1);\n    /// heap.push(5);\n    /// heap.push(2);\n    /// assert_eq!(heap.peek(), Some(&5));\n    ///\n    /// ```\n    ///\n    /// # Time complexity\n    ///\n    /// Cost is *O*(1) in the worst case.\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn peek(&self) -> Option<&T> {\n        self.data.get(0)\n    }\n\n    /// Returns the number of elements the binary heap can hold without reallocating.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BinaryHeap;\n    /// let mut heap = BinaryHeap::with_capacity(100);\n    /// assert!(heap.capacity() >= 100);\n    /// heap.push(4);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn capacity(&self) -> usize {\n        self.data.capacity()\n    }\n\n    /// Reserves the minimum capacity for exactly `additional` more elements to be inserted in the\n    /// given `BinaryHeap`. Does nothing if the capacity is already sufficient.\n    ///\n    /// Note that the allocator may give the collection more space than it requests. Therefore\n    /// capacity can not be relied upon to be precisely minimal. Prefer [`reserve`] if future\n    /// insertions are expected.\n    ///\n    /// # Panics\n    ///\n    /// Panics if the new capacity overflows `usize`.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BinaryHeap;\n    /// let mut heap = BinaryHeap::new();\n    /// heap.reserve_exact(100);\n    /// assert!(heap.capacity() >= 100);\n    /// heap.push(4);\n    /// ```\n    ///\n    /// [`reserve`]: BinaryHeap::reserve\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn reserve_exact(&mut self, additional: usize) {\n        self.data.reserve_exact(additional);\n    }\n\n    /// Reserves capacity for at least `additional` more elements to be inserted in the\n    /// `BinaryHeap`. The collection may reserve more space to avoid frequent reallocations.\n    ///\n    /// # Panics\n    ///\n    /// Panics if the new capacity overflows `usize`.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BinaryHeap;\n    /// let mut heap = BinaryHeap::new();\n    /// heap.reserve(100);\n    /// assert!(heap.capacity() >= 100);\n    /// heap.push(4);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn reserve(&mut self, additional: usize) {\n        self.data.reserve(additional);\n    }\n\n    /// Discards as much additional capacity as possible.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BinaryHeap;\n    /// let mut heap: BinaryHeap<i32> = BinaryHeap::with_capacity(100);\n    ///\n    /// assert!(heap.capacity() >= 100);\n    /// heap.shrink_to_fit();\n    /// assert!(heap.capacity() == 0);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn shrink_to_fit(&mut self) {\n        self.data.shrink_to_fit();\n    }\n\n    /// Discards capacity with a lower bound.\n    ///\n    /// The capacity will remain at least as large as both the length\n    /// and the supplied value.\n    ///\n    /// If the current capacity is less than the lower limit, this is a no-op.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(shrink_to)]\n    /// use std::collections::BinaryHeap;\n    /// let mut heap: BinaryHeap<i32> = BinaryHeap::with_capacity(100);\n    ///\n    /// assert!(heap.capacity() >= 100);\n    /// heap.shrink_to(10);\n    /// assert!(heap.capacity() >= 10);\n    /// ```\n    #[inline]\n    #[unstable(feature = \"shrink_to\", reason = \"new API\", issue = \"56431\")]\n    pub fn shrink_to(&mut self, min_capacity: usize) {\n        self.data.shrink_to(min_capacity)\n    }\n\n    /// Returns a slice of all values in the underlying vector, in arbitrary\n    /// order.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// #![feature(binary_heap_as_slice)]\n    /// use std::collections::BinaryHeap;\n    /// use std::io::{self, Write};\n    ///\n    /// let heap = BinaryHeap::from(vec![1, 2, 3, 4, 5, 6, 7]);\n    ///\n    /// io::sink().write(heap.as_slice()).unwrap();\n    /// ```\n    #[unstable(feature = \"binary_heap_as_slice\", issue = \"83659\")]\n    pub fn as_slice(&self) -> &[T] {\n        self.data.as_slice()\n    }\n\n    /// Consumes the `BinaryHeap` and returns the underlying vector\n    /// in arbitrary order.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BinaryHeap;\n    /// let heap = BinaryHeap::from(vec![1, 2, 3, 4, 5, 6, 7]);\n    /// let vec = heap.into_vec();\n    ///\n    /// // Will print in some order\n    /// for x in vec {\n    ///     println!(\"{}\", x);\n    /// }\n    /// ```\n    #[stable(feature = \"binary_heap_extras_15\", since = \"1.5.0\")]\n    pub fn into_vec(self) -> Vec<T> {\n        self.into()\n    }\n\n    /// Returns the length of the binary heap.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BinaryHeap;\n    /// let heap = BinaryHeap::from(vec![1, 3]);\n    ///\n    /// assert_eq!(heap.len(), 2);\n    /// ```\n    #[doc(alias = \"length\")]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn len(&self) -> usize {\n        self.data.len()\n    }\n\n    /// Checks if the binary heap is empty.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BinaryHeap;\n    /// let mut heap = BinaryHeap::new();\n    ///\n    /// assert!(heap.is_empty());\n    ///\n    /// heap.push(3);\n    /// heap.push(5);\n    /// heap.push(1);\n    ///\n    /// assert!(!heap.is_empty());\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn is_empty(&self) -> bool {\n        self.len() == 0\n    }\n\n    /// Clears the binary heap, returning an iterator over the removed elements.\n    ///\n    /// The elements are removed in arbitrary order.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BinaryHeap;\n    /// let mut heap = BinaryHeap::from(vec![1, 3]);\n    ///\n    /// assert!(!heap.is_empty());\n    ///\n    /// for x in heap.drain() {\n    ///     println!(\"{}\", x);\n    /// }\n    ///\n    /// assert!(heap.is_empty());\n    /// ```\n    #[inline]\n    #[stable(feature = \"drain\", since = \"1.6.0\")]\n    pub fn drain(&mut self) -> Drain<'_, T> {\n        Drain { iter: self.data.drain(..) }\n    }\n\n    /// Drops all items from the binary heap.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BinaryHeap;\n    /// let mut heap = BinaryHeap::from(vec![1, 3]);\n    ///\n    /// assert!(!heap.is_empty());\n    ///\n    /// heap.clear();\n    ///\n    /// assert!(heap.is_empty());\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn clear(&mut self) {\n        self.drain();\n    }\n}\n\n/// Hole represents a hole in a slice i.e., an index without valid value\n/// (because it was moved from or duplicated).\n/// In drop, `Hole` will restore the slice by filling the hole\n/// position with the value that was originally removed.\nstruct Hole<'a, T: 'a> {\n    data: &'a mut [T],\n    elt: ManuallyDrop<T>,\n    pos: usize,\n}\n\nimpl<'a, T> Hole<'a, T> {\n    /// Create a new `Hole` at index `pos`.\n    ///\n    /// Unsafe because pos must be within the data slice.\n    #[inline]\n    unsafe fn new(data: &'a mut [T], pos: usize) -> Self {\n        debug_assert!(pos < data.len());\n        // SAFE: pos should be inside the slice\n        let elt = unsafe { ptr::read(data.get_unchecked(pos)) };\n        Hole { data, elt: ManuallyDrop::new(elt), pos }\n    }\n\n    #[inline]\n    fn pos(&self) -> usize {\n        self.pos\n    }\n\n    /// Returns a reference to the element removed.\n    #[inline]\n    fn element(&self) -> &T {\n        &self.elt\n    }\n\n    /// Returns a reference to the element at `index`.\n    ///\n    /// Unsafe because index must be within the data slice and not equal to pos.\n    #[inline]\n    unsafe fn get(&self, index: usize) -> &T {\n        debug_assert!(index != self.pos);\n        debug_assert!(index < self.data.len());\n        unsafe { self.data.get_unchecked(index) }\n    }\n\n    /// Move hole to new location\n    ///\n    /// Unsafe because index must be within the data slice and not equal to pos.\n    #[inline]\n    unsafe fn move_to(&mut self, index: usize) {\n        debug_assert!(index != self.pos);\n        debug_assert!(index < self.data.len());\n        unsafe {\n            let ptr = self.data.as_mut_ptr();\n            let index_ptr: *const _ = ptr.add(index);\n            let hole_ptr = ptr.add(self.pos);\n            ptr::copy_nonoverlapping(index_ptr, hole_ptr, 1);\n        }\n        self.pos = index;\n    }\n}\n\nimpl<T> Drop for Hole<'_, T> {\n    #[inline]\n    fn drop(&mut self) {\n        // fill the hole again\n        unsafe {\n            let pos = self.pos;\n            ptr::copy_nonoverlapping(&*self.elt, self.data.get_unchecked_mut(pos), 1);\n        }\n    }\n}\n\n/// An iterator over the elements of a `BinaryHeap`.\n///\n/// This `struct` is created by [`BinaryHeap::iter()`]. See its\n/// documentation for more.\n///\n/// [`iter`]: BinaryHeap::iter\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct Iter<'a, T: 'a> {\n    iter: slice::Iter<'a, T>,\n}\n\n#[stable(feature = \"collection_debug\", since = \"1.17.0\")]\nimpl<T: fmt::Debug> fmt::Debug for Iter<'_, T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"Iter\").field(&self.iter.as_slice()).finish()\n    }\n}\n\n// FIXME(#26925) Remove in favor of `#[derive(Clone)]`\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> Clone for Iter<'_, T> {\n    fn clone(&self) -> Self {\n        Iter { iter: self.iter.clone() }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T> Iterator for Iter<'a, T> {\n    type Item = &'a T;\n\n    #[inline]\n    fn next(&mut self) -> Option<&'a T> {\n        self.iter.next()\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.iter.size_hint()\n    }\n\n    #[inline]\n    fn last(self) -> Option<&'a T> {\n        self.iter.last()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T> DoubleEndedIterator for Iter<'a, T> {\n    #[inline]\n    fn next_back(&mut self) -> Option<&'a T> {\n        self.iter.next_back()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> ExactSizeIterator for Iter<'_, T> {\n    fn is_empty(&self) -> bool {\n        self.iter.is_empty()\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<T> FusedIterator for Iter<'_, T> {}\n\n/// An owning iterator over the elements of a `BinaryHeap`.\n///\n/// This `struct` is created by [`BinaryHeap::into_iter()`]\n/// (provided by the `IntoIterator` trait). See its documentation for more.\n///\n/// [`into_iter`]: BinaryHeap::into_iter\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\n#[derive(Clone)]\npub struct IntoIter<T> {\n    iter: vec::IntoIter<T>,\n}\n\n#[stable(feature = \"collection_debug\", since = \"1.17.0\")]\nimpl<T: fmt::Debug> fmt::Debug for IntoIter<T> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"IntoIter\").field(&self.iter.as_slice()).finish()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> Iterator for IntoIter<T> {\n    type Item = T;\n\n    #[inline]\n    fn next(&mut self) -> Option<T> {\n        self.iter.next()\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.iter.size_hint()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> DoubleEndedIterator for IntoIter<T> {\n    #[inline]\n    fn next_back(&mut self) -> Option<T> {\n        self.iter.next_back()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> ExactSizeIterator for IntoIter<T> {\n    fn is_empty(&self) -> bool {\n        self.iter.is_empty()\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<T> FusedIterator for IntoIter<T> {}\n\n#[unstable(issue = \"none\", feature = \"inplace_iteration\")]\nunsafe impl<T> SourceIter for IntoIter<T> {\n    type Source = IntoIter<T>;\n\n    #[inline]\n    unsafe fn as_inner(&mut self) -> &mut Self::Source {\n        self\n    }\n}\n\n#[unstable(issue = \"none\", feature = \"inplace_iteration\")]\nunsafe impl<I> InPlaceIterable for IntoIter<I> {}\n\nimpl<I> AsIntoIter for IntoIter<I> {\n    type Item = I;\n\n    fn as_into_iter(&mut self) -> &mut vec::IntoIter<Self::Item> {\n        &mut self.iter\n    }\n}\n\n#[unstable(feature = \"binary_heap_into_iter_sorted\", issue = \"59278\")]\n#[derive(Clone, Debug)]\npub struct IntoIterSorted<T> {\n    inner: BinaryHeap<T>,\n}\n\n#[unstable(feature = \"binary_heap_into_iter_sorted\", issue = \"59278\")]\nimpl<T: Ord> Iterator for IntoIterSorted<T> {\n    type Item = T;\n\n    #[inline]\n    fn next(&mut self) -> Option<T> {\n        self.inner.pop()\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        let exact = self.inner.len();\n        (exact, Some(exact))\n    }\n}\n\n#[unstable(feature = \"binary_heap_into_iter_sorted\", issue = \"59278\")]\nimpl<T: Ord> ExactSizeIterator for IntoIterSorted<T> {}\n\n#[unstable(feature = \"binary_heap_into_iter_sorted\", issue = \"59278\")]\nimpl<T: Ord> FusedIterator for IntoIterSorted<T> {}\n\n#[unstable(feature = \"trusted_len\", issue = \"37572\")]\nunsafe impl<T: Ord> TrustedLen for IntoIterSorted<T> {}\n\n/// A draining iterator over the elements of a `BinaryHeap`.\n///\n/// This `struct` is created by [`BinaryHeap::drain()`]. See its\n/// documentation for more.\n///\n/// [`drain`]: BinaryHeap::drain\n#[stable(feature = \"drain\", since = \"1.6.0\")]\n#[derive(Debug)]\npub struct Drain<'a, T: 'a> {\n    iter: vec::Drain<'a, T>,\n}\n\n#[stable(feature = \"drain\", since = \"1.6.0\")]\nimpl<T> Iterator for Drain<'_, T> {\n    type Item = T;\n\n    #[inline]\n    fn next(&mut self) -> Option<T> {\n        self.iter.next()\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.iter.size_hint()\n    }\n}\n\n#[stable(feature = \"drain\", since = \"1.6.0\")]\nimpl<T> DoubleEndedIterator for Drain<'_, T> {\n    #[inline]\n    fn next_back(&mut self) -> Option<T> {\n        self.iter.next_back()\n    }\n}\n\n#[stable(feature = \"drain\", since = \"1.6.0\")]\nimpl<T> ExactSizeIterator for Drain<'_, T> {\n    fn is_empty(&self) -> bool {\n        self.iter.is_empty()\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<T> FusedIterator for Drain<'_, T> {}\n\n/// A draining iterator over the elements of a `BinaryHeap`.\n///\n/// This `struct` is created by [`BinaryHeap::drain_sorted()`]. See its\n/// documentation for more.\n///\n/// [`drain_sorted`]: BinaryHeap::drain_sorted\n#[unstable(feature = \"binary_heap_drain_sorted\", issue = \"59278\")]\n#[derive(Debug)]\npub struct DrainSorted<'a, T: Ord> {\n    inner: &'a mut BinaryHeap<T>,\n}\n\n#[unstable(feature = \"binary_heap_drain_sorted\", issue = \"59278\")]\nimpl<'a, T: Ord> Drop for DrainSorted<'a, T> {\n    /// Removes heap elements in heap order.\n    fn drop(&mut self) {\n        struct DropGuard<'r, 'a, T: Ord>(&'r mut DrainSorted<'a, T>);\n\n        impl<'r, 'a, T: Ord> Drop for DropGuard<'r, 'a, T> {\n            fn drop(&mut self) {\n                while self.0.inner.pop().is_some() {}\n            }\n        }\n\n        while let Some(item) = self.inner.pop() {\n            let guard = DropGuard(self);\n            drop(item);\n            mem::forget(guard);\n        }\n    }\n}\n\n#[unstable(feature = \"binary_heap_drain_sorted\", issue = \"59278\")]\nimpl<T: Ord> Iterator for DrainSorted<'_, T> {\n    type Item = T;\n\n    #[inline]\n    fn next(&mut self) -> Option<T> {\n        self.inner.pop()\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        let exact = self.inner.len();\n        (exact, Some(exact))\n    }\n}\n\n#[unstable(feature = \"binary_heap_drain_sorted\", issue = \"59278\")]\nimpl<T: Ord> ExactSizeIterator for DrainSorted<'_, T> {}\n\n#[unstable(feature = \"binary_heap_drain_sorted\", issue = \"59278\")]\nimpl<T: Ord> FusedIterator for DrainSorted<'_, T> {}\n\n#[unstable(feature = \"trusted_len\", issue = \"37572\")]\nunsafe impl<T: Ord> TrustedLen for DrainSorted<'_, T> {}\n\n#[stable(feature = \"binary_heap_extras_15\", since = \"1.5.0\")]\nimpl<T: Ord> From<Vec<T>> for BinaryHeap<T> {\n    /// Converts a `Vec<T>` into a `BinaryHeap<T>`.\n    ///\n    /// This conversion happens in-place, and has *O*(*n*) time complexity.\n    fn from(vec: Vec<T>) -> BinaryHeap<T> {\n        let mut heap = BinaryHeap { data: vec };\n        heap.rebuild();\n        heap\n    }\n}\n\n#[stable(feature = \"binary_heap_extras_15\", since = \"1.5.0\")]\nimpl<T> From<BinaryHeap<T>> for Vec<T> {\n    /// Converts a `BinaryHeap<T>` into a `Vec<T>`.\n    ///\n    /// This conversion requires no data movement or allocation, and has\n    /// constant time complexity.\n    fn from(heap: BinaryHeap<T>) -> Vec<T> {\n        heap.data\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Ord> FromIterator<T> for BinaryHeap<T> {\n    fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> BinaryHeap<T> {\n        BinaryHeap::from(iter.into_iter().collect::<Vec<_>>())\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> IntoIterator for BinaryHeap<T> {\n    type Item = T;\n    type IntoIter = IntoIter<T>;\n\n    /// Creates a consuming iterator, that is, one that moves each value out of\n    /// the binary heap in arbitrary order. The binary heap cannot be used\n    /// after calling this.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use std::collections::BinaryHeap;\n    /// let heap = BinaryHeap::from(vec![1, 2, 3, 4]);\n    ///\n    /// // Print 1, 2, 3, 4 in arbitrary order\n    /// for x in heap.into_iter() {\n    ///     // x has type i32, not &i32\n    ///     println!(\"{}\", x);\n    /// }\n    /// ```\n    fn into_iter(self) -> IntoIter<T> {\n        IntoIter { iter: self.data.into_iter() }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T> IntoIterator for &'a BinaryHeap<T> {\n    type Item = &'a T;\n    type IntoIter = Iter<'a, T>;\n\n    fn into_iter(self) -> Iter<'a, T> {\n        self.iter()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Ord> Extend<T> for BinaryHeap<T> {\n    #[inline]\n    fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I) {\n        <Self as SpecExtend<I>>::spec_extend(self, iter);\n    }\n\n    #[inline]\n    fn extend_one(&mut self, item: T) {\n        self.push(item);\n    }\n\n    #[inline]\n    fn extend_reserve(&mut self, additional: usize) {\n        self.reserve(additional);\n    }\n}\n\nimpl<T: Ord, I: IntoIterator<Item = T>> SpecExtend<I> for BinaryHeap<T> {\n    default fn spec_extend(&mut self, iter: I) {\n        self.extend_desugared(iter.into_iter());\n    }\n}\n\nimpl<T: Ord> SpecExtend<BinaryHeap<T>> for BinaryHeap<T> {\n    fn spec_extend(&mut self, ref mut other: BinaryHeap<T>) {\n        self.append(other);\n    }\n}\n\nimpl<T: Ord> BinaryHeap<T> {\n    fn extend_desugared<I: IntoIterator<Item = T>>(&mut self, iter: I) {\n        let iterator = iter.into_iter();\n        let (lower, _) = iterator.size_hint();\n\n        self.reserve(lower);\n\n        iterator.for_each(move |elem| self.push(elem));\n    }\n}\n\n#[stable(feature = \"extend_ref\", since = \"1.2.0\")]\nimpl<'a, T: 'a + Ord + Copy> Extend<&'a T> for BinaryHeap<T> {\n    fn extend<I: IntoIterator<Item = &'a T>>(&mut self, iter: I) {\n        self.extend(iter.into_iter().cloned());\n    }\n\n    #[inline]\n    fn extend_one(&mut self, &item: &'a T) {\n        self.push(item);\n    }\n\n    #[inline]\n    fn extend_reserve(&mut self, additional: usize) {\n        self.reserve(additional);\n    }\n}\nuse crate::alloc::{Allocator, Global};\nuse crate::raw_vec::RawVec;\nuse core::fmt;\nuse core::intrinsics::arith_offset;\nuse core::iter::{FusedIterator, InPlaceIterable, SourceIter, TrustedLen, TrustedRandomAccess};\nuse core::marker::PhantomData;\nuse core::mem::{self};\nuse core::ptr::{self, NonNull};\nuse core::slice::{self};\n\n/// An iterator that moves out of a vector.\n///\n/// This `struct` is created by the `into_iter` method on [`Vec`](super::Vec)\n/// (provided by the [`IntoIterator`] trait).\n///\n/// # Example\n///\n/// ```\n/// let v = vec![0, 1, 2];\n/// let iter: std::vec::IntoIter<_> = v.into_iter();\n/// ```\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct IntoIter<\n    T,\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")] A: Allocator = Global,\n> {\n    pub(super) buf: NonNull<T>,\n    pub(super) phantom: PhantomData<T>,\n    pub(super) cap: usize,\n    pub(super) alloc: A,\n    pub(super) ptr: *const T,\n    pub(super) end: *const T,\n}\n\n#[stable(feature = \"vec_intoiter_debug\", since = \"1.13.0\")]\nimpl<T: fmt::Debug, A: Allocator> fmt::Debug for IntoIter<T, A> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"IntoIter\").field(&self.as_slice()).finish()\n    }\n}\n\nimpl<T, A: Allocator> IntoIter<T, A> {\n    /// Returns the remaining items of this iterator as a slice.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let vec = vec!['a', 'b', 'c'];\n    /// let mut into_iter = vec.into_iter();\n    /// assert_eq!(into_iter.as_slice(), &['a', 'b', 'c']);\n    /// let _ = into_iter.next().unwrap();\n    /// assert_eq!(into_iter.as_slice(), &['b', 'c']);\n    /// ```\n    #[stable(feature = \"vec_into_iter_as_slice\", since = \"1.15.0\")]\n    pub fn as_slice(&self) -> &[T] {\n        unsafe { slice::from_raw_parts(self.ptr, self.len()) }\n    }\n\n    /// Returns the remaining items of this iterator as a mutable slice.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let vec = vec!['a', 'b', 'c'];\n    /// let mut into_iter = vec.into_iter();\n    /// assert_eq!(into_iter.as_slice(), &['a', 'b', 'c']);\n    /// into_iter.as_mut_slice()[2] = 'z';\n    /// assert_eq!(into_iter.next().unwrap(), 'a');\n    /// assert_eq!(into_iter.next().unwrap(), 'b');\n    /// assert_eq!(into_iter.next().unwrap(), 'z');\n    /// ```\n    #[stable(feature = \"vec_into_iter_as_slice\", since = \"1.15.0\")]\n    pub fn as_mut_slice(&mut self) -> &mut [T] {\n        unsafe { &mut *self.as_raw_mut_slice() }\n    }\n\n    /// Returns a reference to the underlying allocator.\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    #[inline]\n    pub fn allocator(&self) -> &A {\n        &self.alloc\n    }\n\n    fn as_raw_mut_slice(&mut self) -> *mut [T] {\n        ptr::slice_from_raw_parts_mut(self.ptr as *mut T, self.len())\n    }\n\n    /// Drops remaining elements and relinquishes the backing allocation.\n    ///\n    /// This is roughly equivalent to the following, but more efficient\n    ///\n    /// ```\n    /// # let mut into_iter = Vec::<u8>::with_capacity(10).into_iter();\n    /// (&mut into_iter).for_each(core::mem::drop);\n    /// unsafe { core::ptr::write(&mut into_iter, Vec::new().into_iter()); }\n    /// ```\n    pub(super) fn forget_allocation_drop_remaining(&mut self) {\n        let remaining = self.as_raw_mut_slice();\n\n        // overwrite the individual fields instead of creating a new\n        // struct and then overwriting &mut self.\n        // this creates less assembly\n        self.cap = 0;\n        self.buf = unsafe { NonNull::new_unchecked(RawVec::NEW.ptr()) };\n        self.ptr = self.buf.as_ptr();\n        self.end = self.buf.as_ptr();\n\n        unsafe {\n            ptr::drop_in_place(remaining);\n        }\n    }\n}\n\n#[stable(feature = \"vec_intoiter_as_ref\", since = \"1.46.0\")]\nimpl<T, A: Allocator> AsRef<[T]> for IntoIter<T, A> {\n    fn as_ref(&self) -> &[T] {\n        self.as_slice()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nunsafe impl<T: Send, A: Allocator + Send> Send for IntoIter<T, A> {}\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nunsafe impl<T: Sync, A: Allocator> Sync for IntoIter<T, A> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T, A: Allocator> Iterator for IntoIter<T, A> {\n    type Item = T;\n\n    #[inline]\n    fn next(&mut self) -> Option<T> {\n        if self.ptr as *const _ == self.end {\n            None\n        } else if mem::size_of::<T>() == 0 {\n            // purposefully don't use 'ptr.offset' because for\n            // vectors with 0-size elements this would return the\n            // same pointer.\n            self.ptr = unsafe { arith_offset(self.ptr as *const i8, 1) as *mut T };\n\n            // Make up a value of this ZST.\n            Some(unsafe { mem::zeroed() })\n        } else {\n            let old = self.ptr;\n            self.ptr = unsafe { self.ptr.offset(1) };\n\n            Some(unsafe { ptr::read(old) })\n        }\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        let exact = if mem::size_of::<T>() == 0 {\n            (self.end as usize).wrapping_sub(self.ptr as usize)\n        } else {\n            unsafe { self.end.offset_from(self.ptr) as usize }\n        };\n        (exact, Some(exact))\n    }\n\n    #[inline]\n    fn count(self) -> usize {\n        self.len()\n    }\n\n    unsafe fn __iterator_get_unchecked(&mut self, i: usize) -> Self::Item\n    where\n        Self: TrustedRandomAccess,\n    {\n        // SAFETY: the caller must guarantee that `i` is in bounds of the\n        // `Vec<T>`, so `i` cannot overflow an `isize`, and the `self.ptr.add(i)`\n        // is guaranteed to pointer to an element of the `Vec<T>` and\n        // thus guaranteed to be valid to dereference.\n        //\n        // Also note the implementation of `Self: TrustedRandomAccess` requires\n        // that `T: Copy` so reading elements from the buffer doesn't invalidate\n        // them for `Drop`.\n        unsafe {\n            if mem::size_of::<T>() == 0 { mem::zeroed() } else { ptr::read(self.ptr.add(i)) }\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T, A: Allocator> DoubleEndedIterator for IntoIter<T, A> {\n    #[inline]\n    fn next_back(&mut self) -> Option<T> {\n        if self.end == self.ptr {\n            None\n        } else if mem::size_of::<T>() == 0 {\n            // See above for why 'ptr.offset' isn't used\n            self.end = unsafe { arith_offset(self.end as *const i8, -1) as *mut T };\n\n            // Make up a value of this ZST.\n            Some(unsafe { mem::zeroed() })\n        } else {\n            self.end = unsafe { self.end.offset(-1) };\n\n            Some(unsafe { ptr::read(self.end) })\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T, A: Allocator> ExactSizeIterator for IntoIter<T, A> {\n    fn is_empty(&self) -> bool {\n        self.ptr == self.end\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<T, A: Allocator> FusedIterator for IntoIter<T, A> {}\n\n#[unstable(feature = \"trusted_len\", issue = \"37572\")]\nunsafe impl<T, A: Allocator> TrustedLen for IntoIter<T, A> {}\n\n#[doc(hidden)]\n#[unstable(issue = \"none\", feature = \"std_internals\")]\n// T: Copy as approximation for !Drop since get_unchecked does not advance self.ptr\n// and thus we can't implement drop-handling\nunsafe impl<T, A: Allocator> TrustedRandomAccess for IntoIter<T, A>\nwhere\n    T: Copy,\n{\n    const MAY_HAVE_SIDE_EFFECT: bool = false;\n}\n\n#[stable(feature = \"vec_into_iter_clone\", since = \"1.8.0\")]\nimpl<T: Clone, A: Allocator + Clone> Clone for IntoIter<T, A> {\n    #[cfg(not(test))]\n    fn clone(&self) -> Self {\n        self.as_slice().to_vec_in(self.alloc.clone()).into_iter()\n    }\n    #[cfg(test)]\n    fn clone(&self) -> Self {\n        crate::slice::to_vec(self.as_slice(), self.alloc.clone()).into_iter()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nunsafe impl<#[may_dangle] T, A: Allocator> Drop for IntoIter<T, A> {\n    fn drop(&mut self) {\n        struct DropGuard<'a, T, A: Allocator>(&'a mut IntoIter<T, A>);\n\n        impl<T, A: Allocator> Drop for DropGuard<'_, T, A> {\n            fn drop(&mut self) {\n                unsafe {\n                    // `IntoIter::alloc` is not used anymore after this\n                    let alloc = ptr::read(&self.0.alloc);\n                    // RawVec handles deallocation\n                    let _ = RawVec::from_raw_parts_in(self.0.buf.as_ptr(), self.0.cap, alloc);\n                }\n            }\n        }\n\n        let guard = DropGuard(self);\n        // destroy the remaining elements\n        unsafe {\n            ptr::drop_in_place(guard.0.as_raw_mut_slice());\n        }\n        // now `guard` will be dropped and do the rest\n    }\n}\n\n#[unstable(issue = \"none\", feature = \"inplace_iteration\")]\nunsafe impl<T, A: Allocator> InPlaceIterable for IntoIter<T, A> {}\n\n#[unstable(issue = \"none\", feature = \"inplace_iteration\")]\nunsafe impl<T, A: Allocator> SourceIter for IntoIter<T, A> {\n    type Source = Self;\n\n    #[inline]\n    unsafe fn as_inner(&mut self) -> &mut Self::Source {\n        self\n    }\n}\n\n// internal helper trait for in-place iteration specialization.\n#[rustc_specialization_trait]\npub(crate) trait AsIntoIter {\n    type Item;\n    fn as_into_iter(&mut self) -> &mut IntoIter<Self::Item>;\n}\n\nimpl<T> AsIntoIter for IntoIter<T> {\n    type Item = T;\n\n    fn as_into_iter(&mut self) -> &mut IntoIter<Self::Item> {\n        self\n    }\n}\nuse crate::alloc::Allocator;\nuse core::iter::TrustedLen;\nuse core::ptr::{self};\nuse core::slice::{self};\n\nuse super::{IntoIter, SetLenOnDrop, Vec};\n\n// Specialization trait used for Vec::extend\npub(super) trait SpecExtend<T, I> {\n    fn spec_extend(&mut self, iter: I);\n}\n\nimpl<T, I, A: Allocator> SpecExtend<T, I> for Vec<T, A>\nwhere\n    I: Iterator<Item = T>,\n{\n    default fn spec_extend(&mut self, iter: I) {\n        self.extend_desugared(iter)\n    }\n}\n\nimpl<T, I, A: Allocator> SpecExtend<T, I> for Vec<T, A>\nwhere\n    I: TrustedLen<Item = T>,\n{\n    default fn spec_extend(&mut self, iterator: I) {\n        // This is the case for a TrustedLen iterator.\n        let (low, high) = iterator.size_hint();\n        if let Some(additional) = high {\n            debug_assert_eq!(\n                low,\n                additional,\n                \"TrustedLen iterator's size hint is not exact: {:?}\",\n                (low, high)\n            );\n            self.reserve(additional);\n            unsafe {\n                let mut ptr = self.as_mut_ptr().add(self.len());\n                let mut local_len = SetLenOnDrop::new(&mut self.len);\n                iterator.for_each(move |element| {\n                    ptr::write(ptr, element);\n                    ptr = ptr.offset(1);\n                    // NB can't overflow since we would have had to alloc the address space\n                    local_len.increment_len(1);\n                });\n            }\n        } else {\n            // Per TrustedLen contract a `None` upper bound means that the iterator length\n            // truly exceeds usize::MAX, which would eventually lead to a capacity overflow anyway.\n            // Since the other branch already panics eagerly (via `reserve()`) we do the same here.\n            // This avoids additional codegen for a fallback code path which would eventually\n            // panic anyway.\n            panic!(\"capacity overflow\");\n        }\n    }\n}\n\nimpl<T, A: Allocator> SpecExtend<T, IntoIter<T>> for Vec<T, A> {\n    fn spec_extend(&mut self, mut iterator: IntoIter<T>) {\n        unsafe {\n            self.append_elements(iterator.as_slice() as _);\n        }\n        iterator.ptr = iterator.end;\n    }\n}\n\nimpl<'a, T: 'a, I, A: Allocator + 'a> SpecExtend<&'a T, I> for Vec<T, A>\nwhere\n    I: Iterator<Item = &'a T>,\n    T: Clone,\n{\n    default fn spec_extend(&mut self, iterator: I) {\n        self.spec_extend(iterator.cloned())\n    }\n}\n\nimpl<'a, T: 'a, A: Allocator + 'a> SpecExtend<&'a T, slice::Iter<'a, T>> for Vec<T, A>\nwhere\n    T: Copy,\n{\n    fn spec_extend(&mut self, iterator: slice::Iter<'a, T>) {\n        let slice = iterator.as_slice();\n        unsafe { self.append_elements(slice) };\n    }\n}\nuse crate::alloc::Allocator;\nuse crate::raw_vec::RawVec;\nuse core::ptr::{self};\n\nuse super::{ExtendElement, IsZero, Vec};\n\n// Specialization trait used for Vec::from_elem\npub(super) trait SpecFromElem: Sized {\n    fn from_elem<A: Allocator>(elem: Self, n: usize, alloc: A) -> Vec<Self, A>;\n}\n\nimpl<T: Clone> SpecFromElem for T {\n    default fn from_elem<A: Allocator>(elem: Self, n: usize, alloc: A) -> Vec<Self, A> {\n        let mut v = Vec::with_capacity_in(n, alloc);\n        v.extend_with(n, ExtendElement(elem));\n        v\n    }\n}\n\nimpl SpecFromElem for i8 {\n    #[inline]\n    fn from_elem<A: Allocator>(elem: i8, n: usize, alloc: A) -> Vec<i8, A> {\n        if elem == 0 {\n            return Vec { buf: RawVec::with_capacity_zeroed_in(n, alloc), len: n };\n        }\n        unsafe {\n            let mut v = Vec::with_capacity_in(n, alloc);\n            ptr::write_bytes(v.as_mut_ptr(), elem as u8, n);\n            v.set_len(n);\n            v\n        }\n    }\n}\n\nimpl SpecFromElem for u8 {\n    #[inline]\n    fn from_elem<A: Allocator>(elem: u8, n: usize, alloc: A) -> Vec<u8, A> {\n        if elem == 0 {\n            return Vec { buf: RawVec::with_capacity_zeroed_in(n, alloc), len: n };\n        }\n        unsafe {\n            let mut v = Vec::with_capacity_in(n, alloc);\n            ptr::write_bytes(v.as_mut_ptr(), elem, n);\n            v.set_len(n);\n            v\n        }\n    }\n}\n\nimpl<T: Clone + IsZero> SpecFromElem for T {\n    #[inline]\n    fn from_elem<A: Allocator>(elem: T, n: usize, alloc: A) -> Vec<T, A> {\n        if elem.is_zero() {\n            return Vec { buf: RawVec::with_capacity_zeroed_in(n, alloc), len: n };\n        }\n        let mut v = Vec::with_capacity_in(n, alloc);\n        v.extend_with(n, ExtendElement(elem));\n        v\n    }\n}\nuse crate::alloc::{Allocator, Global};\nuse core::fmt;\nuse core::iter::{FusedIterator, TrustedLen};\nuse core::mem::{self};\nuse core::ptr::{self, NonNull};\nuse core::slice::{self};\n\nuse super::Vec;\n\n/// A draining iterator for `Vec<T>`.\n///\n/// This `struct` is created by [`Vec::drain`].\n/// See its documentation for more.\n///\n/// # Example\n///\n/// ```\n/// let mut v = vec![0, 1, 2];\n/// let iter: std::vec::Drain<_> = v.drain(..);\n/// ```\n#[stable(feature = \"drain\", since = \"1.6.0\")]\npub struct Drain<\n    'a,\n    T: 'a,\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")] A: Allocator + 'a = Global,\n> {\n    /// Index of tail to preserve\n    pub(super) tail_start: usize,\n    /// Length of tail\n    pub(super) tail_len: usize,\n    /// Current remaining range to remove\n    pub(super) iter: slice::Iter<'a, T>,\n    pub(super) vec: NonNull<Vec<T, A>>,\n}\n\n#[stable(feature = \"collection_debug\", since = \"1.17.0\")]\nimpl<T: fmt::Debug, A: Allocator> fmt::Debug for Drain<'_, T, A> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        f.debug_tuple(\"Drain\").field(&self.iter.as_slice()).finish()\n    }\n}\n\nimpl<'a, T, A: Allocator> Drain<'a, T, A> {\n    /// Returns the remaining items of this iterator as a slice.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut vec = vec!['a', 'b', 'c'];\n    /// let mut drain = vec.drain(..);\n    /// assert_eq!(drain.as_slice(), &['a', 'b', 'c']);\n    /// let _ = drain.next().unwrap();\n    /// assert_eq!(drain.as_slice(), &['b', 'c']);\n    /// ```\n    #[stable(feature = \"vec_drain_as_slice\", since = \"1.46.0\")]\n    pub fn as_slice(&self) -> &[T] {\n        self.iter.as_slice()\n    }\n\n    /// Returns a reference to the underlying allocator.\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    #[inline]\n    pub fn allocator(&self) -> &A {\n        unsafe { self.vec.as_ref().allocator() }\n    }\n}\n\n#[stable(feature = \"vec_drain_as_slice\", since = \"1.46.0\")]\nimpl<'a, T, A: Allocator> AsRef<[T]> for Drain<'a, T, A> {\n    fn as_ref(&self) -> &[T] {\n        self.as_slice()\n    }\n}\n\n#[stable(feature = \"drain\", since = \"1.6.0\")]\nunsafe impl<T: Sync, A: Sync + Allocator> Sync for Drain<'_, T, A> {}\n#[stable(feature = \"drain\", since = \"1.6.0\")]\nunsafe impl<T: Send, A: Send + Allocator> Send for Drain<'_, T, A> {}\n\n#[stable(feature = \"drain\", since = \"1.6.0\")]\nimpl<T, A: Allocator> Iterator for Drain<'_, T, A> {\n    type Item = T;\n\n    #[inline]\n    fn next(&mut self) -> Option<T> {\n        self.iter.next().map(|elt| unsafe { ptr::read(elt as *const _) })\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.iter.size_hint()\n    }\n}\n\n#[stable(feature = \"drain\", since = \"1.6.0\")]\nimpl<T, A: Allocator> DoubleEndedIterator for Drain<'_, T, A> {\n    #[inline]\n    fn next_back(&mut self) -> Option<T> {\n        self.iter.next_back().map(|elt| unsafe { ptr::read(elt as *const _) })\n    }\n}\n\n#[stable(feature = \"drain\", since = \"1.6.0\")]\nimpl<T, A: Allocator> Drop for Drain<'_, T, A> {\n    fn drop(&mut self) {\n        /// Continues dropping the remaining elements in the `Drain`, then moves back the\n        /// un-`Drain`ed elements to restore the original `Vec`.\n        struct DropGuard<'r, 'a, T, A: Allocator>(&'r mut Drain<'a, T, A>);\n\n        impl<'r, 'a, T, A: Allocator> Drop for DropGuard<'r, 'a, T, A> {\n            fn drop(&mut self) {\n                // Continue the same loop we have below. If the loop already finished, this does\n                // nothing.\n                self.0.for_each(drop);\n\n                if self.0.tail_len > 0 {\n                    unsafe {\n                        let source_vec = self.0.vec.as_mut();\n                        // memmove back untouched tail, update to new length\n                        let start = source_vec.len();\n                        let tail = self.0.tail_start;\n                        if tail != start {\n                            let src = source_vec.as_ptr().add(tail);\n                            let dst = source_vec.as_mut_ptr().add(start);\n                            ptr::copy(src, dst, self.0.tail_len);\n                        }\n                        source_vec.set_len(start + self.0.tail_len);\n                    }\n                }\n            }\n        }\n\n        // exhaust self first\n        while let Some(item) = self.next() {\n            let guard = DropGuard(self);\n            drop(item);\n            mem::forget(guard);\n        }\n\n        // Drop a `DropGuard` to move back the non-drained tail of `self`.\n        DropGuard(self);\n    }\n}\n\n#[stable(feature = \"drain\", since = \"1.6.0\")]\nimpl<T, A: Allocator> ExactSizeIterator for Drain<'_, T, A> {\n    fn is_empty(&self) -> bool {\n        self.iter.is_empty()\n    }\n}\n\n#[unstable(feature = \"trusted_len\", issue = \"37572\")]\nunsafe impl<T, A: Allocator> TrustedLen for Drain<'_, T, A> {}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<T, A: Allocator> FusedIterator for Drain<'_, T, A> {}\nuse core::iter::TrustedLen;\nuse core::ptr::{self};\n\nuse super::{SpecExtend, Vec};\n\n/// Another specialization trait for Vec::from_iter\n/// necessary to manually prioritize overlapping specializations\n/// see [`SpecFromIter`](super::SpecFromIter) for details.\npub(super) trait SpecFromIterNested<T, I> {\n    fn from_iter(iter: I) -> Self;\n}\n\nimpl<T, I> SpecFromIterNested<T, I> for Vec<T>\nwhere\n    I: Iterator<Item = T>,\n{\n    default fn from_iter(mut iterator: I) -> Self {\n        // Unroll the first iteration, as the vector is going to be\n        // expanded on this iteration in every case when the iterable is not\n        // empty, but the loop in extend_desugared() is not going to see the\n        // vector being full in the few subsequent loop iterations.\n        // So we get better branch prediction.\n        let mut vector = match iterator.next() {\n            None => return Vec::new(),\n            Some(element) => {\n                let (lower, _) = iterator.size_hint();\n                let mut vector = Vec::with_capacity(lower.saturating_add(1));\n                unsafe {\n                    ptr::write(vector.as_mut_ptr(), element);\n                    vector.set_len(1);\n                }\n                vector\n            }\n        };\n        // must delegate to spec_extend() since extend() itself delegates\n        // to spec_from for empty Vecs\n        <Vec<T> as SpecExtend<T, I>>::spec_extend(&mut vector, iterator);\n        vector\n    }\n}\n\nimpl<T, I> SpecFromIterNested<T, I> for Vec<T>\nwhere\n    I: TrustedLen<Item = T>,\n{\n    fn from_iter(iterator: I) -> Self {\n        let mut vector = match iterator.size_hint() {\n            (_, Some(upper)) => Vec::with_capacity(upper),\n            // TrustedLen contract guarantees that `size_hint() == (_, None)` means that there\n            // are more than `usize::MAX` elements.\n            // Since the previous branch would eagerly panic if the capacity is too large\n            // (via `with_capacity`) we do the same here.\n            _ => panic!(\"capacity overflow\"),\n        };\n        // reuse extend specialization for TrustedLen\n        vector.spec_extend(iterator);\n        vector\n    }\n}\nuse crate::boxed::Box;\n\n#[rustc_specialization_trait]\npub(super) unsafe trait IsZero {\n    /// Whether this value is zero\n    fn is_zero(&self) -> bool;\n}\n\nmacro_rules! impl_is_zero {\n    ($t:ty, $is_zero:expr) => {\n        unsafe impl IsZero for $t {\n            #[inline]\n            fn is_zero(&self) -> bool {\n                $is_zero(*self)\n            }\n        }\n    };\n}\n\nimpl_is_zero!(i16, |x| x == 0);\nimpl_is_zero!(i32, |x| x == 0);\nimpl_is_zero!(i64, |x| x == 0);\nimpl_is_zero!(i128, |x| x == 0);\nimpl_is_zero!(isize, |x| x == 0);\n\nimpl_is_zero!(u16, |x| x == 0);\nimpl_is_zero!(u32, |x| x == 0);\nimpl_is_zero!(u64, |x| x == 0);\nimpl_is_zero!(u128, |x| x == 0);\nimpl_is_zero!(usize, |x| x == 0);\n\nimpl_is_zero!(bool, |x| x == false);\nimpl_is_zero!(char, |x| x == '\\0');\n\nimpl_is_zero!(f32, |x: f32| x.to_bits() == 0);\nimpl_is_zero!(f64, |x: f64| x.to_bits() == 0);\n\nunsafe impl<T> IsZero for *const T {\n    #[inline]\n    fn is_zero(&self) -> bool {\n        (*self).is_null()\n    }\n}\n\nunsafe impl<T> IsZero for *mut T {\n    #[inline]\n    fn is_zero(&self) -> bool {\n        (*self).is_null()\n    }\n}\n\n// `Option<&T>` and `Option<Box<T>>` are guaranteed to represent `None` as null.\n// For fat pointers, the bytes that would be the pointer metadata in the `Some`\n// variant are padding in the `None` variant, so ignoring them and\n// zero-initializing instead is ok.\n// `Option<&mut T>` never implements `Clone`, so there's no need for an impl of\n// `SpecFromElem`.\n\nunsafe impl<T: ?Sized> IsZero for Option<&T> {\n    #[inline]\n    fn is_zero(&self) -> bool {\n        self.is_none()\n    }\n}\n\nunsafe impl<T: ?Sized> IsZero for Option<Box<T>> {\n    #[inline]\n    fn is_zero(&self) -> bool {\n        self.is_none()\n    }\n}\nuse core::mem::ManuallyDrop;\nuse core::ptr::{self};\nuse core::slice::{self};\n\nuse super::{IntoIter, SpecExtend, SpecFromIterNested, Vec};\n\n/// Specialization trait used for Vec::from_iter\n///\n/// ## The delegation graph:\n///\n/// ```text\n/// +-------------+\n/// |FromIterator |\n/// +-+-----------+\n///   |\n///   v\n/// +-+-------------------------------+  +---------------------+\n/// |SpecFromIter                  +---->+SpecFromIterNested   |\n/// |where I:                      |  |  |where I:             |\n/// |  Iterator (default)----------+  |  |  Iterator (default) |\n/// |  vec::IntoIter               |  |  |  TrustedLen         |\n/// |  SourceIterMarker---fallback-+  |  |                     |\n/// |  slice::Iter                    |  |                     |\n/// |  Iterator<Item = &Clone>        |  +---------------------+\n/// +---------------------------------+\n/// ```\npub(super) trait SpecFromIter<T, I> {\n    fn from_iter(iter: I) -> Self;\n}\n\nimpl<T, I> SpecFromIter<T, I> for Vec<T>\nwhere\n    I: Iterator<Item = T>,\n{\n    default fn from_iter(iterator: I) -> Self {\n        SpecFromIterNested::from_iter(iterator)\n    }\n}\n\nimpl<T> SpecFromIter<T, IntoIter<T>> for Vec<T> {\n    fn from_iter(iterator: IntoIter<T>) -> Self {\n        // A common case is passing a vector into a function which immediately\n        // re-collects into a vector. We can short circuit this if the IntoIter\n        // has not been advanced at all.\n        // When it has been advanced We can also reuse the memory and move the data to the front.\n        // But we only do so when the resulting Vec wouldn't have more unused capacity\n        // than creating it through the generic FromIterator implementation would. That limitation\n        // is not strictly necessary as Vec's allocation behavior is intentionally unspecified.\n        // But it is a conservative choice.\n        let has_advanced = iterator.buf.as_ptr() as *const _ != iterator.ptr;\n        if !has_advanced || iterator.len() >= iterator.cap / 2 {\n            unsafe {\n                let it = ManuallyDrop::new(iterator);\n                if has_advanced {\n                    ptr::copy(it.ptr, it.buf.as_ptr(), it.len());\n                }\n                return Vec::from_raw_parts(it.buf.as_ptr(), it.len(), it.cap);\n            }\n        }\n\n        let mut vec = Vec::new();\n        // must delegate to spec_extend() since extend() itself delegates\n        // to spec_from for empty Vecs\n        vec.spec_extend(iterator);\n        vec\n    }\n}\n\nimpl<'a, T: 'a, I> SpecFromIter<&'a T, I> for Vec<T>\nwhere\n    I: Iterator<Item = &'a T>,\n    T: Clone,\n{\n    default fn from_iter(iterator: I) -> Self {\n        SpecFromIter::from_iter(iterator.cloned())\n    }\n}\n\n// This utilizes `iterator.as_slice().to_vec()` since spec_extend\n// must take more steps to reason about the final capacity + length\n// and thus do more work. `to_vec()` directly allocates the correct amount\n// and fills it exactly.\nimpl<'a, T: 'a + Clone> SpecFromIter<&'a T, slice::Iter<'a, T>> for Vec<T> {\n    #[cfg(not(test))]\n    fn from_iter(iterator: slice::Iter<'a, T>) -> Self {\n        iterator.as_slice().to_vec()\n    }\n\n    // HACK(japaric): with cfg(test) the inherent `[T]::to_vec` method, which is\n    // required for this method definition, is not available. Instead use the\n    // `slice::to_vec`  function which is only available with cfg(test)\n    // NB see the slice::hack module in slice.rs for more information\n    #[cfg(test)]\n    fn from_iter(iterator: slice::Iter<'a, T>) -> Self {\n        crate::slice::to_vec(iterator.as_slice(), crate::alloc::Global)\n    }\n}\nuse core::iter::{InPlaceIterable, SourceIter, TrustedRandomAccess};\nuse core::mem::{self, ManuallyDrop};\nuse core::ptr::{self};\n\nuse super::{AsIntoIter, InPlaceDrop, SpecFromIter, SpecFromIterNested, Vec};\n\n/// Specialization marker for collecting an iterator pipeline into a Vec while reusing the\n/// source allocation, i.e. executing the pipeline in place.\n///\n/// The SourceIter parent trait is necessary for the specializing function to access the allocation\n/// which is to be reused. But it is not sufficient for the specialization to be valid. See\n/// additional bounds on the impl.\n#[rustc_unsafe_specialization_marker]\npub(super) trait SourceIterMarker: SourceIter<Source: AsIntoIter> {}\n\n// The std-internal SourceIter/InPlaceIterable traits are only implemented by chains of\n// Adapter<Adapter<Adapter<IntoIter>>> (all owned by core/std). Additional bounds\n// on the adapter implementations (beyond `impl<I: Trait> Trait for Adapter<I>`) only depend on other\n// traits already marked as specialization traits (Copy, TrustedRandomAccess, FusedIterator).\n// I.e. the marker does not depend on lifetimes of user-supplied types. Modulo the Copy hole, which\n// several other specializations already depend on.\nimpl<T> SourceIterMarker for T where T: SourceIter<Source: AsIntoIter> + InPlaceIterable {}\n\nimpl<T, I> SpecFromIter<T, I> for Vec<T>\nwhere\n    I: Iterator<Item = T> + SourceIterMarker,\n{\n    default fn from_iter(mut iterator: I) -> Self {\n        // Additional requirements which cannot expressed via trait bounds. We rely on const eval\n        // instead:\n        // a) no ZSTs as there would be no allocation to reuse and pointer arithmetic would panic\n        // b) size match as required by Alloc contract\n        // c) alignments match as required by Alloc contract\n        if mem::size_of::<T>() == 0\n            || mem::size_of::<T>()\n                != mem::size_of::<<<I as SourceIter>::Source as AsIntoIter>::Item>()\n            || mem::align_of::<T>()\n                != mem::align_of::<<<I as SourceIter>::Source as AsIntoIter>::Item>()\n        {\n            // fallback to more generic implementations\n            return SpecFromIterNested::from_iter(iterator);\n        }\n\n        let (src_buf, src_ptr, dst_buf, dst_end, cap) = unsafe {\n            let inner = iterator.as_inner().as_into_iter();\n            (\n                inner.buf.as_ptr(),\n                inner.ptr,\n                inner.buf.as_ptr() as *mut T,\n                inner.end as *const T,\n                inner.cap,\n            )\n        };\n\n        let len = SpecInPlaceCollect::collect_in_place(&mut iterator, dst_buf, dst_end);\n\n        let src = unsafe { iterator.as_inner().as_into_iter() };\n        // check if SourceIter contract was upheld\n        // caveat: if they weren't we may not even make it to this point\n        debug_assert_eq!(src_buf, src.buf.as_ptr());\n        // check InPlaceIterable contract. This is only possible if the iterator advanced the\n        // source pointer at all. If it uses unchecked access via TrustedRandomAccess\n        // then the source pointer will stay in its initial position and we can't use it as reference\n        if src.ptr != src_ptr {\n            debug_assert!(\n                unsafe { dst_buf.add(len) as *const _ } <= src.ptr,\n                \"InPlaceIterable contract violation, write pointer advanced beyond read pointer\"\n            );\n        }\n\n        // drop any remaining values at the tail of the source\n        // but prevent drop of the allocation itself once IntoIter goes out of scope\n        // if the drop panics then we also leak any elements collected into dst_buf\n        src.forget_allocation_drop_remaining();\n\n        let vec = unsafe { Vec::from_raw_parts(dst_buf, len, cap) };\n\n        vec\n    }\n}\n\nfn write_in_place_with_drop<T>(\n    src_end: *const T,\n) -> impl FnMut(InPlaceDrop<T>, T) -> Result<InPlaceDrop<T>, !> {\n    move |mut sink, item| {\n        unsafe {\n            // the InPlaceIterable contract cannot be verified precisely here since\n            // try_fold has an exclusive reference to the source pointer\n            // all we can do is check if it's still in range\n            debug_assert!(sink.dst as *const _ <= src_end, \"InPlaceIterable contract violation\");\n            ptr::write(sink.dst, item);\n            sink.dst = sink.dst.add(1);\n        }\n        Ok(sink)\n    }\n}\n\n/// Helper trait to hold specialized implementations of the in-place iterate-collect loop\ntrait SpecInPlaceCollect<T, I>: Iterator<Item = T> {\n    /// Collects an iterator (`self`) into the destination buffer (`dst`) and returns the number of items\n    /// collected. `end` is the last writable element of the allocation and used for bounds checks.\n    fn collect_in_place(&mut self, dst: *mut T, end: *const T) -> usize;\n}\n\nimpl<T, I> SpecInPlaceCollect<T, I> for I\nwhere\n    I: Iterator<Item = T>,\n{\n    #[inline]\n    default fn collect_in_place(&mut self, dst_buf: *mut T, end: *const T) -> usize {\n        // use try-fold since\n        // - it vectorizes better for some iterator adapters\n        // - unlike most internal iteration methods, it only takes a &mut self\n        // - it lets us thread the write pointer through its innards and get it back in the end\n        let sink = InPlaceDrop { inner: dst_buf, dst: dst_buf };\n        let sink =\n            self.try_fold::<_, _, Result<_, !>>(sink, write_in_place_with_drop(end)).unwrap();\n        // iteration succeeded, don't drop head\n        unsafe { ManuallyDrop::new(sink).dst.offset_from(dst_buf) as usize }\n    }\n}\n\nimpl<T, I> SpecInPlaceCollect<T, I> for I\nwhere\n    I: Iterator<Item = T> + TrustedRandomAccess,\n{\n    #[inline]\n    fn collect_in_place(&mut self, dst_buf: *mut T, end: *const T) -> usize {\n        let len = self.size();\n        let mut drop_guard = InPlaceDrop { inner: dst_buf, dst: dst_buf };\n        for i in 0..len {\n            // Safety: InplaceIterable contract guarantees that for every element we read\n            // one slot in the underlying storage will have been freed up and we can immediately\n            // write back the result.\n            unsafe {\n                let dst = dst_buf.offset(i as isize);\n                debug_assert!(dst as *const _ <= end, \"InPlaceIterable contract violation\");\n                ptr::write(dst, self.__iterator_get_unchecked(i));\n                drop_guard.dst = dst.add(1);\n            }\n        }\n        mem::forget(drop_guard);\n        len\n    }\n}\n//! A contiguous growable array type with heap-allocated contents, written\n//! `Vec<T>`.\n//!\n//! Vectors have `O(1)` indexing, amortized `O(1)` push (to the end) and\n//! `O(1)` pop (from the end).\n//!\n//! Vectors ensure they never allocate more than `isize::MAX` bytes.\n//!\n//! # Examples\n//!\n//! You can explicitly create a [`Vec`] with [`Vec::new`]:\n//!\n//! ```\n//! let v: Vec<i32> = Vec::new();\n//! ```\n//!\n//! ...or by using the [`vec!`] macro:\n//!\n//! ```\n//! let v: Vec<i32> = vec![];\n//!\n//! let v = vec![1, 2, 3, 4, 5];\n//!\n//! let v = vec![0; 10]; // ten zeroes\n//! ```\n//!\n//! You can [`push`] values onto the end of a vector (which will grow the vector\n//! as needed):\n//!\n//! ```\n//! let mut v = vec![1, 2];\n//!\n//! v.push(3);\n//! ```\n//!\n//! Popping values works in much the same way:\n//!\n//! ```\n//! let mut v = vec![1, 2];\n//!\n//! let two = v.pop();\n//! ```\n//!\n//! Vectors also support indexing (through the [`Index`] and [`IndexMut`] traits):\n//!\n//! ```\n//! let mut v = vec![1, 2, 3];\n//! let three = v[2];\n//! v[1] = v[1] + 5;\n//! ```\n//!\n//! [`push`]: Vec::push\n\n#![stable(feature = \"rust1\", since = \"1.0.0\")]\n\nuse core::cmp::{self, Ordering};\nuse core::convert::TryFrom;\nuse core::fmt;\nuse core::hash::{Hash, Hasher};\nuse core::intrinsics::{arith_offset, assume};\nuse core::iter::{self, FromIterator};\nuse core::marker::PhantomData;\nuse core::mem::{self, ManuallyDrop, MaybeUninit};\nuse core::ops::{self, Index, IndexMut, Range, RangeBounds};\nuse core::ptr::{self, NonNull};\nuse core::slice::{self, SliceIndex};\n\nuse crate::alloc::{Allocator, Global};\nuse crate::borrow::{Cow, ToOwned};\nuse crate::boxed::Box;\nuse crate::collections::TryReserveError;\nuse crate::raw_vec::RawVec;\n\n#[unstable(feature = \"drain_filter\", reason = \"recently added\", issue = \"43244\")]\npub use self::drain_filter::DrainFilter;\n\nmod drain_filter;\n\n#[stable(feature = \"vec_splice\", since = \"1.21.0\")]\npub use self::splice::Splice;\n\nmod splice;\n\n#[stable(feature = \"drain\", since = \"1.6.0\")]\npub use self::drain::Drain;\n\nmod drain;\n\nmod cow;\n\npub(crate) use self::into_iter::AsIntoIter;\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub use self::into_iter::IntoIter;\n\nmod into_iter;\n\nuse self::is_zero::IsZero;\n\nmod is_zero;\n\nmod source_iter_marker;\n\nmod partial_eq;\n\nuse self::spec_from_elem::SpecFromElem;\n\nmod spec_from_elem;\n\nuse self::set_len_on_drop::SetLenOnDrop;\n\nmod set_len_on_drop;\n\nuse self::in_place_drop::InPlaceDrop;\n\nmod in_place_drop;\n\nuse self::spec_from_iter_nested::SpecFromIterNested;\n\nmod spec_from_iter_nested;\n\nuse self::spec_from_iter::SpecFromIter;\n\nmod spec_from_iter;\n\nuse self::spec_extend::SpecExtend;\n\nmod spec_extend;\n\n/// A contiguous growable array type, written as `Vec<T>` and pronounced 'vector'.\n///\n/// # Examples\n///\n/// ```\n/// let mut vec = Vec::new();\n/// vec.push(1);\n/// vec.push(2);\n///\n/// assert_eq!(vec.len(), 2);\n/// assert_eq!(vec[0], 1);\n///\n/// assert_eq!(vec.pop(), Some(2));\n/// assert_eq!(vec.len(), 1);\n///\n/// vec[0] = 7;\n/// assert_eq!(vec[0], 7);\n///\n/// vec.extend([1, 2, 3].iter().copied());\n///\n/// for x in &vec {\n///     println!(\"{}\", x);\n/// }\n/// assert_eq!(vec, [7, 1, 2, 3]);\n/// ```\n///\n/// The [`vec!`] macro is provided to make initialization more convenient:\n///\n/// ```\n/// let mut vec = vec![1, 2, 3];\n/// vec.push(4);\n/// assert_eq!(vec, [1, 2, 3, 4]);\n/// ```\n///\n/// It can also initialize each element of a `Vec<T>` with a given value.\n/// This may be more efficient than performing allocation and initialization\n/// in separate steps, especially when initializing a vector of zeros:\n///\n/// ```\n/// let vec = vec![0; 5];\n/// assert_eq!(vec, [0, 0, 0, 0, 0]);\n///\n/// // The following is equivalent, but potentially slower:\n/// let mut vec = Vec::with_capacity(5);\n/// vec.resize(5, 0);\n/// assert_eq!(vec, [0, 0, 0, 0, 0]);\n/// ```\n///\n/// For more information, see\n/// [Capacity and Reallocation](#capacity-and-reallocation).\n///\n/// Use a `Vec<T>` as an efficient stack:\n///\n/// ```\n/// let mut stack = Vec::new();\n///\n/// stack.push(1);\n/// stack.push(2);\n/// stack.push(3);\n///\n/// while let Some(top) = stack.pop() {\n///     // Prints 3, 2, 1\n///     println!(\"{}\", top);\n/// }\n/// ```\n///\n/// # Indexing\n///\n/// The `Vec` type allows to access values by index, because it implements the\n/// [`Index`] trait. An example will be more explicit:\n///\n/// ```\n/// let v = vec![0, 2, 4, 6];\n/// println!(\"{}\", v[1]); // it will display '2'\n/// ```\n///\n/// However be careful: if you try to access an index which isn't in the `Vec`,\n/// your software will panic! You cannot do this:\n///\n/// ```should_panic\n/// let v = vec![0, 2, 4, 6];\n/// println!(\"{}\", v[6]); // it will panic!\n/// ```\n///\n/// Use [`get`] and [`get_mut`] if you want to check whether the index is in\n/// the `Vec`.\n///\n/// # Slicing\n///\n/// A `Vec` can be mutable. On the other hand, slices are read-only objects.\n/// To get a [slice][prim@slice], use [`&`]. Example:\n///\n/// ```\n/// fn read_slice(slice: &[usize]) {\n///     // ...\n/// }\n///\n/// let v = vec![0, 1];\n/// read_slice(&v);\n///\n/// // ... and that's all!\n/// // you can also do it like this:\n/// let u: &[usize] = &v;\n/// // or like this:\n/// let u: &[_] = &v;\n/// ```\n///\n/// In Rust, it's more common to pass slices as arguments rather than vectors\n/// when you just want to provide read access. The same goes for [`String`] and\n/// [`&str`].\n///\n/// # Capacity and reallocation\n///\n/// The capacity of a vector is the amount of space allocated for any future\n/// elements that will be added onto the vector. This is not to be confused with\n/// the *length* of a vector, which specifies the number of actual elements\n/// within the vector. If a vector's length exceeds its capacity, its capacity\n/// will automatically be increased, but its elements will have to be\n/// reallocated.\n///\n/// For example, a vector with capacity 10 and length 0 would be an empty vector\n/// with space for 10 more elements. Pushing 10 or fewer elements onto the\n/// vector will not change its capacity or cause reallocation to occur. However,\n/// if the vector's length is increased to 11, it will have to reallocate, which\n/// can be slow. For this reason, it is recommended to use [`Vec::with_capacity`]\n/// whenever possible to specify how big the vector is expected to get.\n///\n/// # Guarantees\n///\n/// Due to its incredibly fundamental nature, `Vec` makes a lot of guarantees\n/// about its design. This ensures that it's as low-overhead as possible in\n/// the general case, and can be correctly manipulated in primitive ways\n/// by unsafe code. Note that these guarantees refer to an unqualified `Vec<T>`.\n/// If additional type parameters are added (e.g., to support custom allocators),\n/// overriding their defaults may change the behavior.\n///\n/// Most fundamentally, `Vec` is and always will be a (pointer, capacity, length)\n/// triplet. No more, no less. The order of these fields is completely\n/// unspecified, and you should use the appropriate methods to modify these.\n/// The pointer will never be null, so this type is null-pointer-optimized.\n///\n/// However, the pointer might not actually point to allocated memory. In particular,\n/// if you construct a `Vec` with capacity 0 via [`Vec::new`], [`vec![]`][`vec!`],\n/// [`Vec::with_capacity(0)`][`Vec::with_capacity`], or by calling [`shrink_to_fit`]\n/// on an empty Vec, it will not allocate memory. Similarly, if you store zero-sized\n/// types inside a `Vec`, it will not allocate space for them. *Note that in this case\n/// the `Vec` might not report a [`capacity`] of 0*. `Vec` will allocate if and only\n/// if [`mem::size_of::<T>`]`() * capacity() > 0`. In general, `Vec`'s allocation\n/// details are very subtle &mdash; if you intend to allocate memory using a `Vec`\n/// and use it for something else (either to pass to unsafe code, or to build your\n/// own memory-backed collection), be sure to deallocate this memory by using\n/// `from_raw_parts` to recover the `Vec` and then dropping it.\n///\n/// If a `Vec` *has* allocated memory, then the memory it points to is on the heap\n/// (as defined by the allocator Rust is configured to use by default), and its\n/// pointer points to [`len`] initialized, contiguous elements in order (what\n/// you would see if you coerced it to a slice), followed by [`capacity`]` -\n/// `[`len`] logically uninitialized, contiguous elements.\n///\n/// A vector containing the elements `'a'` and `'b'` with capacity 4 can be\n/// visualized as below. The top part is the `Vec` struct, it contains a\n/// pointer to the head of the allocation in the heap, length and capacity.\n/// The bottom part is the allocation on the heap, a contiguous memory block.\n///\n/// ```text\n///             ptr      len  capacity\n///        +--------+--------+--------+\n///        | 0x0123 |      2 |      4 |\n///        +--------+--------+--------+\n///             |\n///             v\n/// Heap   +--------+--------+--------+--------+\n///        |    'a' |    'b' | uninit | uninit |\n///        +--------+--------+--------+--------+\n/// ```\n///\n/// - **uninit** represents memory that is not initialized, see [`MaybeUninit`].\n/// - Note: the ABI is not stable and `Vec` makes no guarantees about its memory\n///   layout (including the order of fields).\n///\n/// `Vec` will never perform a \"small optimization\" where elements are actually\n/// stored on the stack for two reasons:\n///\n/// * It would make it more difficult for unsafe code to correctly manipulate\n///   a `Vec`. The contents of a `Vec` wouldn't have a stable address if it were\n///   only moved, and it would be more difficult to determine if a `Vec` had\n///   actually allocated memory.\n///\n/// * It would penalize the general case, incurring an additional branch\n///   on every access.\n///\n/// `Vec` will never automatically shrink itself, even if completely empty. This\n/// ensures no unnecessary allocations or deallocations occur. Emptying a `Vec`\n/// and then filling it back up to the same [`len`] should incur no calls to\n/// the allocator. If you wish to free up unused memory, use\n/// [`shrink_to_fit`] or [`shrink_to`].\n///\n/// [`push`] and [`insert`] will never (re)allocate if the reported capacity is\n/// sufficient. [`push`] and [`insert`] *will* (re)allocate if\n/// [`len`]` == `[`capacity`]. That is, the reported capacity is completely\n/// accurate, and can be relied on. It can even be used to manually free the memory\n/// allocated by a `Vec` if desired. Bulk insertion methods *may* reallocate, even\n/// when not necessary.\n///\n/// `Vec` does not guarantee any particular growth strategy when reallocating\n/// when full, nor when [`reserve`] is called. The current strategy is basic\n/// and it may prove desirable to use a non-constant growth factor. Whatever\n/// strategy is used will of course guarantee *O*(1) amortized [`push`].\n///\n/// `vec![x; n]`, `vec![a, b, c, d]`, and\n/// [`Vec::with_capacity(n)`][`Vec::with_capacity`], will all produce a `Vec`\n/// with exactly the requested capacity. If [`len`]` == `[`capacity`],\n/// (as is the case for the [`vec!`] macro), then a `Vec<T>` can be converted to\n/// and from a [`Box<[T]>`][owned slice] without reallocating or moving the elements.\n///\n/// `Vec` will not specifically overwrite any data that is removed from it,\n/// but also won't specifically preserve it. Its uninitialized memory is\n/// scratch space that it may use however it wants. It will generally just do\n/// whatever is most efficient or otherwise easy to implement. Do not rely on\n/// removed data to be erased for security purposes. Even if you drop a `Vec`, its\n/// buffer may simply be reused by another `Vec`. Even if you zero a `Vec`'s memory\n/// first, that might not actually happen because the optimizer does not consider\n/// this a side-effect that must be preserved. There is one case which we will\n/// not break, however: using `unsafe` code to write to the excess capacity,\n/// and then increasing the length to match, is always valid.\n///\n/// Currently, `Vec` does not guarantee the order in which elements are dropped.\n/// The order has changed in the past and may change again.\n///\n/// [`get`]: ../../std/vec/struct.Vec.html#method.get\n/// [`get_mut`]: ../../std/vec/struct.Vec.html#method.get_mut\n/// [`String`]: crate::string::String\n/// [`&str`]: type@str\n/// [`shrink_to_fit`]: Vec::shrink_to_fit\n/// [`shrink_to`]: Vec::shrink_to\n/// [`capacity`]: Vec::capacity\n/// [`mem::size_of::<T>`]: core::mem::size_of\n/// [`len`]: Vec::len\n/// [`push`]: Vec::push\n/// [`insert`]: Vec::insert\n/// [`reserve`]: Vec::reserve\n/// [`MaybeUninit`]: core::mem::MaybeUninit\n/// [owned slice]: Box\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\n#[cfg_attr(not(test), rustc_diagnostic_item = \"vec_type\")]\npub struct Vec<T, #[unstable(feature = \"allocator_api\", issue = \"32838\")] A: Allocator = Global> {\n    buf: RawVec<T, A>,\n    len: usize,\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Inherent methods\n////////////////////////////////////////////////////////////////////////////////\n\nimpl<T> Vec<T> {\n    /// Constructs a new, empty `Vec<T>`.\n    ///\n    /// The vector will not allocate until elements are pushed onto it.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// # #![allow(unused_mut)]\n    /// let mut vec: Vec<i32> = Vec::new();\n    /// ```\n    #[inline]\n    #[rustc_const_stable(feature = \"const_vec_new\", since = \"1.39.0\")]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub const fn new() -> Self {\n        Vec { buf: RawVec::NEW, len: 0 }\n    }\n\n    /// Constructs a new, empty `Vec<T>` with the specified capacity.\n    ///\n    /// The vector will be able to hold exactly `capacity` elements without\n    /// reallocating. If `capacity` is 0, the vector will not allocate.\n    ///\n    /// It is important to note that although the returned vector has the\n    /// *capacity* specified, the vector will have a zero *length*. For an\n    /// explanation of the difference between length and capacity, see\n    /// *[Capacity and reallocation]*.\n    ///\n    /// [Capacity and reallocation]: #capacity-and-reallocation\n    ///\n    /// # Panics\n    ///\n    /// Panics if the new capacity exceeds `isize::MAX` bytes.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut vec = Vec::with_capacity(10);\n    ///\n    /// // The vector contains no items, even though it has capacity for more\n    /// assert_eq!(vec.len(), 0);\n    /// assert_eq!(vec.capacity(), 10);\n    ///\n    /// // These are all done without reallocating...\n    /// for i in 0..10 {\n    ///     vec.push(i);\n    /// }\n    /// assert_eq!(vec.len(), 10);\n    /// assert_eq!(vec.capacity(), 10);\n    ///\n    /// // ...but this may make the vector reallocate\n    /// vec.push(11);\n    /// assert_eq!(vec.len(), 11);\n    /// assert!(vec.capacity() >= 11);\n    /// ```\n    #[inline]\n    #[doc(alias = \"malloc\")]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn with_capacity(capacity: usize) -> Self {\n        Self::with_capacity_in(capacity, Global)\n    }\n\n    /// Creates a `Vec<T>` directly from the raw components of another vector.\n    ///\n    /// # Safety\n    ///\n    /// This is highly unsafe, due to the number of invariants that aren't\n    /// checked:\n    ///\n    /// * `ptr` needs to have been previously allocated via [`String`]/`Vec<T>`\n    ///   (at least, it's highly likely to be incorrect if it wasn't).\n    /// * `T` needs to have the same size and alignment as what `ptr` was allocated with.\n    ///   (`T` having a less strict alignment is not sufficient, the alignment really\n    ///   needs to be equal to satisfy the [`dealloc`] requirement that memory must be\n    ///   allocated and deallocated with the same layout.)\n    /// * `length` needs to be less than or equal to `capacity`.\n    /// * `capacity` needs to be the capacity that the pointer was allocated with.\n    ///\n    /// Violating these may cause problems like corrupting the allocator's\n    /// internal data structures. For example it is **not** safe\n    /// to build a `Vec<u8>` from a pointer to a C `char` array with length `size_t`.\n    /// It's also not safe to build one from a `Vec<u16>` and its length, because\n    /// the allocator cares about the alignment, and these two types have different\n    /// alignments. The buffer was allocated with alignment 2 (for `u16`), but after\n    /// turning it into a `Vec<u8>` it'll be deallocated with alignment 1.\n    ///\n    /// The ownership of `ptr` is effectively transferred to the\n    /// `Vec<T>` which may then deallocate, reallocate or change the\n    /// contents of memory pointed to by the pointer at will. Ensure\n    /// that nothing else uses the pointer after calling this\n    /// function.\n    ///\n    /// [`String`]: crate::string::String\n    /// [`dealloc`]: crate::alloc::GlobalAlloc::dealloc\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::ptr;\n    /// use std::mem;\n    ///\n    /// let v = vec![1, 2, 3];\n    ///\n    // FIXME Update this when vec_into_raw_parts is stabilized\n    /// // Prevent running `v`'s destructor so we are in complete control\n    /// // of the allocation.\n    /// let mut v = mem::ManuallyDrop::new(v);\n    ///\n    /// // Pull out the various important pieces of information about `v`\n    /// let p = v.as_mut_ptr();\n    /// let len = v.len();\n    /// let cap = v.capacity();\n    ///\n    /// unsafe {\n    ///     // Overwrite memory with 4, 5, 6\n    ///     for i in 0..len as isize {\n    ///         ptr::write(p.offset(i), 4 + i);\n    ///     }\n    ///\n    ///     // Put everything back together into a Vec\n    ///     let rebuilt = Vec::from_raw_parts(p, len, cap);\n    ///     assert_eq!(rebuilt, [4, 5, 6]);\n    /// }\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub unsafe fn from_raw_parts(ptr: *mut T, length: usize, capacity: usize) -> Self {\n        unsafe { Self::from_raw_parts_in(ptr, length, capacity, Global) }\n    }\n}\n\nimpl<T, A: Allocator> Vec<T, A> {\n    /// Constructs a new, empty `Vec<T, A>`.\n    ///\n    /// The vector will not allocate until elements are pushed onto it.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(allocator_api)]\n    ///\n    /// use std::alloc::System;\n    ///\n    /// # #[allow(unused_mut)]\n    /// let mut vec: Vec<i32, _> = Vec::new_in(System);\n    /// ```\n    #[inline]\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    pub const fn new_in(alloc: A) -> Self {\n        Vec { buf: RawVec::new_in(alloc), len: 0 }\n    }\n\n    /// Constructs a new, empty `Vec<T, A>` with the specified capacity with the provided\n    /// allocator.\n    ///\n    /// The vector will be able to hold exactly `capacity` elements without\n    /// reallocating. If `capacity` is 0, the vector will not allocate.\n    ///\n    /// It is important to note that although the returned vector has the\n    /// *capacity* specified, the vector will have a zero *length*. For an\n    /// explanation of the difference between length and capacity, see\n    /// *[Capacity and reallocation]*.\n    ///\n    /// [Capacity and reallocation]: #capacity-and-reallocation\n    ///\n    /// # Panics\n    ///\n    /// Panics if the new capacity exceeds `isize::MAX` bytes.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(allocator_api)]\n    ///\n    /// use std::alloc::System;\n    ///\n    /// let mut vec = Vec::with_capacity_in(10, System);\n    ///\n    /// // The vector contains no items, even though it has capacity for more\n    /// assert_eq!(vec.len(), 0);\n    /// assert_eq!(vec.capacity(), 10);\n    ///\n    /// // These are all done without reallocating...\n    /// for i in 0..10 {\n    ///     vec.push(i);\n    /// }\n    /// assert_eq!(vec.len(), 10);\n    /// assert_eq!(vec.capacity(), 10);\n    ///\n    /// // ...but this may make the vector reallocate\n    /// vec.push(11);\n    /// assert_eq!(vec.len(), 11);\n    /// assert!(vec.capacity() >= 11);\n    /// ```\n    #[inline]\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    pub fn with_capacity_in(capacity: usize, alloc: A) -> Self {\n        Vec { buf: RawVec::with_capacity_in(capacity, alloc), len: 0 }\n    }\n\n    /// Creates a `Vec<T, A>` directly from the raw components of another vector.\n    ///\n    /// # Safety\n    ///\n    /// This is highly unsafe, due to the number of invariants that aren't\n    /// checked:\n    ///\n    /// * `ptr` needs to have been previously allocated via [`String`]/`Vec<T>`\n    ///   (at least, it's highly likely to be incorrect if it wasn't).\n    /// * `T` needs to have the same size and alignment as what `ptr` was allocated with.\n    ///   (`T` having a less strict alignment is not sufficient, the alignment really\n    ///   needs to be equal to satisfy the [`dealloc`] requirement that memory must be\n    ///   allocated and deallocated with the same layout.)\n    /// * `length` needs to be less than or equal to `capacity`.\n    /// * `capacity` needs to be the capacity that the pointer was allocated with.\n    ///\n    /// Violating these may cause problems like corrupting the allocator's\n    /// internal data structures. For example it is **not** safe\n    /// to build a `Vec<u8>` from a pointer to a C `char` array with length `size_t`.\n    /// It's also not safe to build one from a `Vec<u16>` and its length, because\n    /// the allocator cares about the alignment, and these two types have different\n    /// alignments. The buffer was allocated with alignment 2 (for `u16`), but after\n    /// turning it into a `Vec<u8>` it'll be deallocated with alignment 1.\n    ///\n    /// The ownership of `ptr` is effectively transferred to the\n    /// `Vec<T>` which may then deallocate, reallocate or change the\n    /// contents of memory pointed to by the pointer at will. Ensure\n    /// that nothing else uses the pointer after calling this\n    /// function.\n    ///\n    /// [`String`]: crate::string::String\n    /// [`dealloc`]: crate::alloc::GlobalAlloc::dealloc\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(allocator_api)]\n    ///\n    /// use std::alloc::System;\n    ///\n    /// use std::ptr;\n    /// use std::mem;\n    ///\n    /// let mut v = Vec::with_capacity_in(3, System);\n    /// v.push(1);\n    /// v.push(2);\n    /// v.push(3);\n    ///\n    // FIXME Update this when vec_into_raw_parts is stabilized\n    /// // Prevent running `v`'s destructor so we are in complete control\n    /// // of the allocation.\n    /// let mut v = mem::ManuallyDrop::new(v);\n    ///\n    /// // Pull out the various important pieces of information about `v`\n    /// let p = v.as_mut_ptr();\n    /// let len = v.len();\n    /// let cap = v.capacity();\n    /// let alloc = v.allocator();\n    ///\n    /// unsafe {\n    ///     // Overwrite memory with 4, 5, 6\n    ///     for i in 0..len as isize {\n    ///         ptr::write(p.offset(i), 4 + i);\n    ///     }\n    ///\n    ///     // Put everything back together into a Vec\n    ///     let rebuilt = Vec::from_raw_parts_in(p, len, cap, alloc.clone());\n    ///     assert_eq!(rebuilt, [4, 5, 6]);\n    /// }\n    /// ```\n    #[inline]\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    pub unsafe fn from_raw_parts_in(ptr: *mut T, length: usize, capacity: usize, alloc: A) -> Self {\n        unsafe { Vec { buf: RawVec::from_raw_parts_in(ptr, capacity, alloc), len: length } }\n    }\n\n    /// Decomposes a `Vec<T>` into its raw components.\n    ///\n    /// Returns the raw pointer to the underlying data, the length of\n    /// the vector (in elements), and the allocated capacity of the\n    /// data (in elements). These are the same arguments in the same\n    /// order as the arguments to [`from_raw_parts`].\n    ///\n    /// After calling this function, the caller is responsible for the\n    /// memory previously managed by the `Vec`. The only way to do\n    /// this is to convert the raw pointer, length, and capacity back\n    /// into a `Vec` with the [`from_raw_parts`] function, allowing\n    /// the destructor to perform the cleanup.\n    ///\n    /// [`from_raw_parts`]: Vec::from_raw_parts\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(vec_into_raw_parts)]\n    /// let v: Vec<i32> = vec![-1, 0, 1];\n    ///\n    /// let (ptr, len, cap) = v.into_raw_parts();\n    ///\n    /// let rebuilt = unsafe {\n    ///     // We can now make changes to the components, such as\n    ///     // transmuting the raw pointer to a compatible type.\n    ///     let ptr = ptr as *mut u32;\n    ///\n    ///     Vec::from_raw_parts(ptr, len, cap)\n    /// };\n    /// assert_eq!(rebuilt, [4294967295, 0, 1]);\n    /// ```\n    #[unstable(feature = \"vec_into_raw_parts\", reason = \"new API\", issue = \"65816\")]\n    pub fn into_raw_parts(self) -> (*mut T, usize, usize) {\n        let mut me = ManuallyDrop::new(self);\n        (me.as_mut_ptr(), me.len(), me.capacity())\n    }\n\n    /// Decomposes a `Vec<T>` into its raw components.\n    ///\n    /// Returns the raw pointer to the underlying data, the length of the vector (in elements),\n    /// the allocated capacity of the data (in elements), and the allocator. These are the same\n    /// arguments in the same order as the arguments to [`from_raw_parts_in`].\n    ///\n    /// After calling this function, the caller is responsible for the\n    /// memory previously managed by the `Vec`. The only way to do\n    /// this is to convert the raw pointer, length, and capacity back\n    /// into a `Vec` with the [`from_raw_parts_in`] function, allowing\n    /// the destructor to perform the cleanup.\n    ///\n    /// [`from_raw_parts_in`]: Vec::from_raw_parts_in\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(allocator_api, vec_into_raw_parts)]\n    ///\n    /// use std::alloc::System;\n    ///\n    /// let mut v: Vec<i32, System> = Vec::new_in(System);\n    /// v.push(-1);\n    /// v.push(0);\n    /// v.push(1);\n    ///\n    /// let (ptr, len, cap, alloc) = v.into_raw_parts_with_alloc();\n    ///\n    /// let rebuilt = unsafe {\n    ///     // We can now make changes to the components, such as\n    ///     // transmuting the raw pointer to a compatible type.\n    ///     let ptr = ptr as *mut u32;\n    ///\n    ///     Vec::from_raw_parts_in(ptr, len, cap, alloc)\n    /// };\n    /// assert_eq!(rebuilt, [4294967295, 0, 1]);\n    /// ```\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    // #[unstable(feature = \"vec_into_raw_parts\", reason = \"new API\", issue = \"65816\")]\n    pub fn into_raw_parts_with_alloc(self) -> (*mut T, usize, usize, A) {\n        let mut me = ManuallyDrop::new(self);\n        let len = me.len();\n        let capacity = me.capacity();\n        let ptr = me.as_mut_ptr();\n        let alloc = unsafe { ptr::read(me.allocator()) };\n        (ptr, len, capacity, alloc)\n    }\n\n    /// Returns the number of elements the vector can hold without\n    /// reallocating.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let vec: Vec<i32> = Vec::with_capacity(10);\n    /// assert_eq!(vec.capacity(), 10);\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn capacity(&self) -> usize {\n        self.buf.capacity()\n    }\n\n    /// Reserves capacity for at least `additional` more elements to be inserted\n    /// in the given `Vec<T>`. The collection may reserve more space to avoid\n    /// frequent reallocations. After calling `reserve`, capacity will be\n    /// greater than or equal to `self.len() + additional`. Does nothing if\n    /// capacity is already sufficient.\n    ///\n    /// # Panics\n    ///\n    /// Panics if the new capacity exceeds `isize::MAX` bytes.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut vec = vec![1];\n    /// vec.reserve(10);\n    /// assert!(vec.capacity() >= 11);\n    /// ```\n    #[doc(alias = \"realloc\")]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn reserve(&mut self, additional: usize) {\n        self.buf.reserve(self.len, additional);\n    }\n\n    /// Reserves the minimum capacity for exactly `additional` more elements to\n    /// be inserted in the given `Vec<T>`. After calling `reserve_exact`,\n    /// capacity will be greater than or equal to `self.len() + additional`.\n    /// Does nothing if the capacity is already sufficient.\n    ///\n    /// Note that the allocator may give the collection more space than it\n    /// requests. Therefore, capacity can not be relied upon to be precisely\n    /// minimal. Prefer `reserve` if future insertions are expected.\n    ///\n    /// # Panics\n    ///\n    /// Panics if the new capacity overflows `usize`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut vec = vec![1];\n    /// vec.reserve_exact(10);\n    /// assert!(vec.capacity() >= 11);\n    /// ```\n    #[doc(alias = \"realloc\")]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn reserve_exact(&mut self, additional: usize) {\n        self.buf.reserve_exact(self.len, additional);\n    }\n\n    /// Tries to reserve capacity for at least `additional` more elements to be inserted\n    /// in the given `Vec<T>`. The collection may reserve more space to avoid\n    /// frequent reallocations. After calling `try_reserve`, capacity will be\n    /// greater than or equal to `self.len() + additional`. Does nothing if\n    /// capacity is already sufficient.\n    ///\n    /// # Errors\n    ///\n    /// If the capacity overflows, or the allocator reports a failure, then an error\n    /// is returned.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(try_reserve)]\n    /// use std::collections::TryReserveError;\n    ///\n    /// fn process_data(data: &[u32]) -> Result<Vec<u32>, TryReserveError> {\n    ///     let mut output = Vec::new();\n    ///\n    ///     // Pre-reserve the memory, exiting if we can't\n    ///     output.try_reserve(data.len())?;\n    ///\n    ///     // Now we know this can't OOM in the middle of our complex work\n    ///     output.extend(data.iter().map(|&val| {\n    ///         val * 2 + 5 // very complicated\n    ///     }));\n    ///\n    ///     Ok(output)\n    /// }\n    /// # process_data(&[1, 2, 3]).expect(\"why is the test harness OOMing on 12 bytes?\");\n    /// ```\n    #[doc(alias = \"realloc\")]\n    #[unstable(feature = \"try_reserve\", reason = \"new API\", issue = \"48043\")]\n    pub fn try_reserve(&mut self, additional: usize) -> Result<(), TryReserveError> {\n        self.buf.try_reserve(self.len, additional)\n    }\n\n    /// Tries to reserve the minimum capacity for exactly `additional`\n    /// elements to be inserted in the given `Vec<T>`. After calling\n    /// `try_reserve_exact`, capacity will be greater than or equal to\n    /// `self.len() + additional` if it returns `Ok(())`.\n    /// Does nothing if the capacity is already sufficient.\n    ///\n    /// Note that the allocator may give the collection more space than it\n    /// requests. Therefore, capacity can not be relied upon to be precisely\n    /// minimal. Prefer `reserve` if future insertions are expected.\n    ///\n    /// # Errors\n    ///\n    /// If the capacity overflows, or the allocator reports a failure, then an error\n    /// is returned.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(try_reserve)]\n    /// use std::collections::TryReserveError;\n    ///\n    /// fn process_data(data: &[u32]) -> Result<Vec<u32>, TryReserveError> {\n    ///     let mut output = Vec::new();\n    ///\n    ///     // Pre-reserve the memory, exiting if we can't\n    ///     output.try_reserve_exact(data.len())?;\n    ///\n    ///     // Now we know this can't OOM in the middle of our complex work\n    ///     output.extend(data.iter().map(|&val| {\n    ///         val * 2 + 5 // very complicated\n    ///     }));\n    ///\n    ///     Ok(output)\n    /// }\n    /// # process_data(&[1, 2, 3]).expect(\"why is the test harness OOMing on 12 bytes?\");\n    /// ```\n    #[doc(alias = \"realloc\")]\n    #[unstable(feature = \"try_reserve\", reason = \"new API\", issue = \"48043\")]\n    pub fn try_reserve_exact(&mut self, additional: usize) -> Result<(), TryReserveError> {\n        self.buf.try_reserve_exact(self.len, additional)\n    }\n\n    /// Shrinks the capacity of the vector as much as possible.\n    ///\n    /// It will drop down as close as possible to the length but the allocator\n    /// may still inform the vector that there is space for a few more elements.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut vec = Vec::with_capacity(10);\n    /// vec.extend([1, 2, 3].iter().cloned());\n    /// assert_eq!(vec.capacity(), 10);\n    /// vec.shrink_to_fit();\n    /// assert!(vec.capacity() >= 3);\n    /// ```\n    #[doc(alias = \"realloc\")]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn shrink_to_fit(&mut self) {\n        // The capacity is never less than the length, and there's nothing to do when\n        // they are equal, so we can avoid the panic case in `RawVec::shrink_to_fit`\n        // by only calling it with a greater capacity.\n        if self.capacity() > self.len {\n            self.buf.shrink_to_fit(self.len);\n        }\n    }\n\n    /// Shrinks the capacity of the vector with a lower bound.\n    ///\n    /// The capacity will remain at least as large as both the length\n    /// and the supplied value.\n    ///\n    /// If the current capacity is less than the lower limit, this is a no-op.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(shrink_to)]\n    /// let mut vec = Vec::with_capacity(10);\n    /// vec.extend([1, 2, 3].iter().cloned());\n    /// assert_eq!(vec.capacity(), 10);\n    /// vec.shrink_to(4);\n    /// assert!(vec.capacity() >= 4);\n    /// vec.shrink_to(0);\n    /// assert!(vec.capacity() >= 3);\n    /// ```\n    #[doc(alias = \"realloc\")]\n    #[unstable(feature = \"shrink_to\", reason = \"new API\", issue = \"56431\")]\n    pub fn shrink_to(&mut self, min_capacity: usize) {\n        if self.capacity() > min_capacity {\n            self.buf.shrink_to_fit(cmp::max(self.len, min_capacity));\n        }\n    }\n\n    /// Converts the vector into [`Box<[T]>`][owned slice].\n    ///\n    /// Note that this will drop any excess capacity.\n    ///\n    /// [owned slice]: Box\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let v = vec![1, 2, 3];\n    ///\n    /// let slice = v.into_boxed_slice();\n    /// ```\n    ///\n    /// Any excess capacity is removed:\n    ///\n    /// ```\n    /// let mut vec = Vec::with_capacity(10);\n    /// vec.extend([1, 2, 3].iter().cloned());\n    ///\n    /// assert_eq!(vec.capacity(), 10);\n    /// let slice = vec.into_boxed_slice();\n    /// assert_eq!(slice.into_vec().capacity(), 3);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn into_boxed_slice(mut self) -> Box<[T], A> {\n        unsafe {\n            self.shrink_to_fit();\n            let me = ManuallyDrop::new(self);\n            let buf = ptr::read(&me.buf);\n            let len = me.len();\n            buf.into_box(len).assume_init()\n        }\n    }\n\n    /// Shortens the vector, keeping the first `len` elements and dropping\n    /// the rest.\n    ///\n    /// If `len` is greater than the vector's current length, this has no\n    /// effect.\n    ///\n    /// The [`drain`] method can emulate `truncate`, but causes the excess\n    /// elements to be returned instead of dropped.\n    ///\n    /// Note that this method has no effect on the allocated capacity\n    /// of the vector.\n    ///\n    /// # Examples\n    ///\n    /// Truncating a five element vector to two elements:\n    ///\n    /// ```\n    /// let mut vec = vec![1, 2, 3, 4, 5];\n    /// vec.truncate(2);\n    /// assert_eq!(vec, [1, 2]);\n    /// ```\n    ///\n    /// No truncation occurs when `len` is greater than the vector's current\n    /// length:\n    ///\n    /// ```\n    /// let mut vec = vec![1, 2, 3];\n    /// vec.truncate(8);\n    /// assert_eq!(vec, [1, 2, 3]);\n    /// ```\n    ///\n    /// Truncating when `len == 0` is equivalent to calling the [`clear`]\n    /// method.\n    ///\n    /// ```\n    /// let mut vec = vec![1, 2, 3];\n    /// vec.truncate(0);\n    /// assert_eq!(vec, []);\n    /// ```\n    ///\n    /// [`clear`]: Vec::clear\n    /// [`drain`]: Vec::drain\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn truncate(&mut self, len: usize) {\n        // This is safe because:\n        //\n        // * the slice passed to `drop_in_place` is valid; the `len > self.len`\n        //   case avoids creating an invalid slice, and\n        // * the `len` of the vector is shrunk before calling `drop_in_place`,\n        //   such that no value will be dropped twice in case `drop_in_place`\n        //   were to panic once (if it panics twice, the program aborts).\n        unsafe {\n            // Note: It's intentional that this is `>` and not `>=`.\n            //       Changing it to `>=` has negative performance\n            //       implications in some cases. See #78884 for more.\n            if len > self.len {\n                return;\n            }\n            let remaining_len = self.len - len;\n            let s = ptr::slice_from_raw_parts_mut(self.as_mut_ptr().add(len), remaining_len);\n            self.len = len;\n            ptr::drop_in_place(s);\n        }\n    }\n\n    /// Extracts a slice containing the entire vector.\n    ///\n    /// Equivalent to `&s[..]`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::io::{self, Write};\n    /// let buffer = vec![1, 2, 3, 5, 8];\n    /// io::sink().write(buffer.as_slice()).unwrap();\n    /// ```\n    #[inline]\n    #[stable(feature = \"vec_as_slice\", since = \"1.7.0\")]\n    pub fn as_slice(&self) -> &[T] {\n        self\n    }\n\n    /// Extracts a mutable slice of the entire vector.\n    ///\n    /// Equivalent to `&mut s[..]`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::io::{self, Read};\n    /// let mut buffer = vec![0; 3];\n    /// io::repeat(0b101).read_exact(buffer.as_mut_slice()).unwrap();\n    /// ```\n    #[inline]\n    #[stable(feature = \"vec_as_slice\", since = \"1.7.0\")]\n    pub fn as_mut_slice(&mut self) -> &mut [T] {\n        self\n    }\n\n    /// Returns a raw pointer to the vector's buffer.\n    ///\n    /// The caller must ensure that the vector outlives the pointer this\n    /// function returns, or else it will end up pointing to garbage.\n    /// Modifying the vector may cause its buffer to be reallocated,\n    /// which would also make any pointers to it invalid.\n    ///\n    /// The caller must also ensure that the memory the pointer (non-transitively) points to\n    /// is never written to (except inside an `UnsafeCell`) using this pointer or any pointer\n    /// derived from it. If you need to mutate the contents of the slice, use [`as_mut_ptr`].\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let x = vec![1, 2, 4];\n    /// let x_ptr = x.as_ptr();\n    ///\n    /// unsafe {\n    ///     for i in 0..x.len() {\n    ///         assert_eq!(*x_ptr.add(i), 1 << i);\n    ///     }\n    /// }\n    /// ```\n    ///\n    /// [`as_mut_ptr`]: Vec::as_mut_ptr\n    #[stable(feature = \"vec_as_ptr\", since = \"1.37.0\")]\n    #[inline]\n    pub fn as_ptr(&self) -> *const T {\n        // We shadow the slice method of the same name to avoid going through\n        // `deref`, which creates an intermediate reference.\n        let ptr = self.buf.ptr();\n        unsafe {\n            assume(!ptr.is_null());\n        }\n        ptr\n    }\n\n    /// Returns an unsafe mutable pointer to the vector's buffer.\n    ///\n    /// The caller must ensure that the vector outlives the pointer this\n    /// function returns, or else it will end up pointing to garbage.\n    /// Modifying the vector may cause its buffer to be reallocated,\n    /// which would also make any pointers to it invalid.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// // Allocate vector big enough for 4 elements.\n    /// let size = 4;\n    /// let mut x: Vec<i32> = Vec::with_capacity(size);\n    /// let x_ptr = x.as_mut_ptr();\n    ///\n    /// // Initialize elements via raw pointer writes, then set length.\n    /// unsafe {\n    ///     for i in 0..size {\n    ///         *x_ptr.add(i) = i as i32;\n    ///     }\n    ///     x.set_len(size);\n    /// }\n    /// assert_eq!(&*x, &[0, 1, 2, 3]);\n    /// ```\n    #[stable(feature = \"vec_as_ptr\", since = \"1.37.0\")]\n    #[inline]\n    pub fn as_mut_ptr(&mut self) -> *mut T {\n        // We shadow the slice method of the same name to avoid going through\n        // `deref_mut`, which creates an intermediate reference.\n        let ptr = self.buf.ptr();\n        unsafe {\n            assume(!ptr.is_null());\n        }\n        ptr\n    }\n\n    /// Returns a reference to the underlying allocator.\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    #[inline]\n    pub fn allocator(&self) -> &A {\n        self.buf.allocator()\n    }\n\n    /// Forces the length of the vector to `new_len`.\n    ///\n    /// This is a low-level operation that maintains none of the normal\n    /// invariants of the type. Normally changing the length of a vector\n    /// is done using one of the safe operations instead, such as\n    /// [`truncate`], [`resize`], [`extend`], or [`clear`].\n    ///\n    /// [`truncate`]: Vec::truncate\n    /// [`resize`]: Vec::resize\n    /// [`extend`]: Extend::extend\n    /// [`clear`]: Vec::clear\n    ///\n    /// # Safety\n    ///\n    /// - `new_len` must be less than or equal to [`capacity()`].\n    /// - The elements at `old_len..new_len` must be initialized.\n    ///\n    /// [`capacity()`]: Vec::capacity\n    ///\n    /// # Examples\n    ///\n    /// This method can be useful for situations in which the vector\n    /// is serving as a buffer for other code, particularly over FFI:\n    ///\n    /// ```no_run\n    /// # #![allow(dead_code)]\n    /// # // This is just a minimal skeleton for the doc example;\n    /// # // don't use this as a starting point for a real library.\n    /// # pub struct StreamWrapper { strm: *mut std::ffi::c_void }\n    /// # const Z_OK: i32 = 0;\n    /// # extern \"C\" {\n    /// #     fn deflateGetDictionary(\n    /// #         strm: *mut std::ffi::c_void,\n    /// #         dictionary: *mut u8,\n    /// #         dictLength: *mut usize,\n    /// #     ) -> i32;\n    /// # }\n    /// # impl StreamWrapper {\n    /// pub fn get_dictionary(&self) -> Option<Vec<u8>> {\n    ///     // Per the FFI method's docs, \"32768 bytes is always enough\".\n    ///     let mut dict = Vec::with_capacity(32_768);\n    ///     let mut dict_length = 0;\n    ///     // SAFETY: When `deflateGetDictionary` returns `Z_OK`, it holds that:\n    ///     // 1. `dict_length` elements were initialized.\n    ///     // 2. `dict_length` <= the capacity (32_768)\n    ///     // which makes `set_len` safe to call.\n    ///     unsafe {\n    ///         // Make the FFI call...\n    ///         let r = deflateGetDictionary(self.strm, dict.as_mut_ptr(), &mut dict_length);\n    ///         if r == Z_OK {\n    ///             // ...and update the length to what was initialized.\n    ///             dict.set_len(dict_length);\n    ///             Some(dict)\n    ///         } else {\n    ///             None\n    ///         }\n    ///     }\n    /// }\n    /// # }\n    /// ```\n    ///\n    /// While the following example is sound, there is a memory leak since\n    /// the inner vectors were not freed prior to the `set_len` call:\n    ///\n    /// ```\n    /// let mut vec = vec![vec![1, 0, 0],\n    ///                    vec![0, 1, 0],\n    ///                    vec![0, 0, 1]];\n    /// // SAFETY:\n    /// // 1. `old_len..0` is empty so no elements need to be initialized.\n    /// // 2. `0 <= capacity` always holds whatever `capacity` is.\n    /// unsafe {\n    ///     vec.set_len(0);\n    /// }\n    /// ```\n    ///\n    /// Normally, here, one would use [`clear`] instead to correctly drop\n    /// the contents and thus not leak memory.\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub unsafe fn set_len(&mut self, new_len: usize) {\n        debug_assert!(new_len <= self.capacity());\n\n        self.len = new_len;\n    }\n\n    /// Removes an element from the vector and returns it.\n    ///\n    /// The removed element is replaced by the last element of the vector.\n    ///\n    /// This does not preserve ordering, but is O(1).\n    ///\n    /// # Panics\n    ///\n    /// Panics if `index` is out of bounds.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut v = vec![\"foo\", \"bar\", \"baz\", \"qux\"];\n    ///\n    /// assert_eq!(v.swap_remove(1), \"bar\");\n    /// assert_eq!(v, [\"foo\", \"qux\", \"baz\"]);\n    ///\n    /// assert_eq!(v.swap_remove(0), \"foo\");\n    /// assert_eq!(v, [\"baz\", \"qux\"]);\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn swap_remove(&mut self, index: usize) -> T {\n        #[cold]\n        #[inline(never)]\n        fn assert_failed(index: usize, len: usize) -> ! {\n            panic!(\"swap_remove index (is {}) should be < len (is {})\", index, len);\n        }\n\n        let len = self.len();\n        if index >= len {\n            assert_failed(index, len);\n        }\n        unsafe {\n            // We replace self[index] with the last element. Note that if the\n            // bounds check above succeeds there must be a last element (which\n            // can be self[index] itself).\n            let last = ptr::read(self.as_ptr().add(len - 1));\n            let hole = self.as_mut_ptr().add(index);\n            self.set_len(len - 1);\n            ptr::replace(hole, last)\n        }\n    }\n\n    /// Inserts an element at position `index` within the vector, shifting all\n    /// elements after it to the right.\n    ///\n    /// # Panics\n    ///\n    /// Panics if `index > len`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut vec = vec![1, 2, 3];\n    /// vec.insert(1, 4);\n    /// assert_eq!(vec, [1, 4, 2, 3]);\n    /// vec.insert(4, 5);\n    /// assert_eq!(vec, [1, 4, 2, 3, 5]);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn insert(&mut self, index: usize, element: T) {\n        #[cold]\n        #[inline(never)]\n        fn assert_failed(index: usize, len: usize) -> ! {\n            panic!(\"insertion index (is {}) should be <= len (is {})\", index, len);\n        }\n\n        let len = self.len();\n        if index > len {\n            assert_failed(index, len);\n        }\n\n        // space for the new element\n        if len == self.buf.capacity() {\n            self.reserve(1);\n        }\n\n        unsafe {\n            // infallible\n            // The spot to put the new value\n            {\n                let p = self.as_mut_ptr().add(index);\n                // Shift everything over to make space. (Duplicating the\n                // `index`th element into two consecutive places.)\n                ptr::copy(p, p.offset(1), len - index);\n                // Write it in, overwriting the first copy of the `index`th\n                // element.\n                ptr::write(p, element);\n            }\n            self.set_len(len + 1);\n        }\n    }\n\n    /// Removes and returns the element at position `index` within the vector,\n    /// shifting all elements after it to the left.\n    ///\n    /// # Panics\n    ///\n    /// Panics if `index` is out of bounds.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut v = vec![1, 2, 3];\n    /// assert_eq!(v.remove(1), 2);\n    /// assert_eq!(v, [1, 3]);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn remove(&mut self, index: usize) -> T {\n        #[cold]\n        #[inline(never)]\n        fn assert_failed(index: usize, len: usize) -> ! {\n            panic!(\"removal index (is {}) should be < len (is {})\", index, len);\n        }\n\n        let len = self.len();\n        if index >= len {\n            assert_failed(index, len);\n        }\n        unsafe {\n            // infallible\n            let ret;\n            {\n                // the place we are taking from.\n                let ptr = self.as_mut_ptr().add(index);\n                // copy it out, unsafely having a copy of the value on\n                // the stack and in the vector at the same time.\n                ret = ptr::read(ptr);\n\n                // Shift everything down to fill in that spot.\n                ptr::copy(ptr.offset(1), ptr, len - index - 1);\n            }\n            self.set_len(len - 1);\n            ret\n        }\n    }\n\n    /// Retains only the elements specified by the predicate.\n    ///\n    /// In other words, remove all elements `e` such that `f(&e)` returns `false`.\n    /// This method operates in place, visiting each element exactly once in the\n    /// original order, and preserves the order of the retained elements.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut vec = vec![1, 2, 3, 4];\n    /// vec.retain(|&x| x % 2 == 0);\n    /// assert_eq!(vec, [2, 4]);\n    /// ```\n    ///\n    /// Because the elements are visited exactly once in the original order,\n    /// external state may be used to decide which elements to keep.\n    ///\n    /// ```\n    /// let mut vec = vec![1, 2, 3, 4, 5];\n    /// let keep = [false, true, true, false, true];\n    /// let mut iter = keep.iter();\n    /// vec.retain(|_| *iter.next().unwrap());\n    /// assert_eq!(vec, [2, 3, 5]);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn retain<F>(&mut self, mut f: F)\n    where\n        F: FnMut(&T) -> bool,\n    {\n        let original_len = self.len();\n        // Avoid double drop if the drop guard is not executed,\n        // since we may make some holes during the process.\n        unsafe { self.set_len(0) };\n\n        // Vec: [Kept, Kept, Hole, Hole, Hole, Hole, Unchecked, Unchecked]\n        //      |<-              processed len   ->| ^- next to check\n        //                  |<-  deleted cnt     ->|\n        //      |<-              original_len                          ->|\n        // Kept: Elements which predicate returns true on.\n        // Hole: Moved or dropped element slot.\n        // Unchecked: Unchecked valid elements.\n        //\n        // This drop guard will be invoked when predicate or `drop` of element panicked.\n        // It shifts unchecked elements to cover holes and `set_len` to the correct length.\n        // In cases when predicate and `drop` never panick, it will be optimized out.\n        struct BackshiftOnDrop<'a, T, A: Allocator> {\n            v: &'a mut Vec<T, A>,\n            processed_len: usize,\n            deleted_cnt: usize,\n            original_len: usize,\n        }\n\n        impl<T, A: Allocator> Drop for BackshiftOnDrop<'_, T, A> {\n            fn drop(&mut self) {\n                if self.deleted_cnt > 0 {\n                    // SAFETY: Trailing unchecked items must be valid since we never touch them.\n                    unsafe {\n                        ptr::copy(\n                            self.v.as_ptr().add(self.processed_len),\n                            self.v.as_mut_ptr().add(self.processed_len - self.deleted_cnt),\n                            self.original_len - self.processed_len,\n                        );\n                    }\n                }\n                // SAFETY: After filling holes, all items are in contiguous memory.\n                unsafe {\n                    self.v.set_len(self.original_len - self.deleted_cnt);\n                }\n            }\n        }\n\n        let mut g = BackshiftOnDrop { v: self, processed_len: 0, deleted_cnt: 0, original_len };\n\n        while g.processed_len < original_len {\n            // SAFETY: Unchecked element must be valid.\n            let cur = unsafe { &mut *g.v.as_mut_ptr().add(g.processed_len) };\n            if !f(cur) {\n                // Advance early to avoid double drop if `drop_in_place` panicked.\n                g.processed_len += 1;\n                g.deleted_cnt += 1;\n                // SAFETY: We never touch this element again after dropped.\n                unsafe { ptr::drop_in_place(cur) };\n                // We already advanced the counter.\n                continue;\n            }\n            if g.deleted_cnt > 0 {\n                // SAFETY: `deleted_cnt` > 0, so the hole slot must not overlap with current element.\n                // We use copy for move, and never touch this element again.\n                unsafe {\n                    let hole_slot = g.v.as_mut_ptr().add(g.processed_len - g.deleted_cnt);\n                    ptr::copy_nonoverlapping(cur, hole_slot, 1);\n                }\n            }\n            g.processed_len += 1;\n        }\n\n        // All item are processed. This can be optimized to `set_len` by LLVM.\n        drop(g);\n    }\n\n    /// Removes all but the first of consecutive elements in the vector that resolve to the same\n    /// key.\n    ///\n    /// If the vector is sorted, this removes all duplicates.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut vec = vec![10, 20, 21, 30, 20];\n    ///\n    /// vec.dedup_by_key(|i| *i / 10);\n    ///\n    /// assert_eq!(vec, [10, 20, 30, 20]);\n    /// ```\n    #[stable(feature = \"dedup_by\", since = \"1.16.0\")]\n    #[inline]\n    pub fn dedup_by_key<F, K>(&mut self, mut key: F)\n    where\n        F: FnMut(&mut T) -> K,\n        K: PartialEq,\n    {\n        self.dedup_by(|a, b| key(a) == key(b))\n    }\n\n    /// Removes all but the first of consecutive elements in the vector satisfying a given equality\n    /// relation.\n    ///\n    /// The `same_bucket` function is passed references to two elements from the vector and\n    /// must determine if the elements compare equal. The elements are passed in opposite order\n    /// from their order in the slice, so if `same_bucket(a, b)` returns `true`, `a` is removed.\n    ///\n    /// If the vector is sorted, this removes all duplicates.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut vec = vec![\"foo\", \"bar\", \"Bar\", \"baz\", \"bar\"];\n    ///\n    /// vec.dedup_by(|a, b| a.eq_ignore_ascii_case(b));\n    ///\n    /// assert_eq!(vec, [\"foo\", \"bar\", \"baz\", \"bar\"]);\n    /// ```\n    #[stable(feature = \"dedup_by\", since = \"1.16.0\")]\n    pub fn dedup_by<F>(&mut self, mut same_bucket: F)\n    where\n        F: FnMut(&mut T, &mut T) -> bool,\n    {\n        let len = self.len();\n        if len <= 1 {\n            return;\n        }\n\n        /* INVARIANT: vec.len() > read >= write > write-1 >= 0 */\n        struct FillGapOnDrop<'a, T, A: core::alloc::Allocator> {\n            /* Offset of the element we want to check if it is duplicate */\n            read: usize,\n\n            /* Offset of the place where we want to place the non-duplicate\n             * when we find it. */\n            write: usize,\n\n            /* The Vec that would need correction if `same_bucket` panicked */\n            vec: &'a mut Vec<T, A>,\n        }\n\n        impl<'a, T, A: core::alloc::Allocator> Drop for FillGapOnDrop<'a, T, A> {\n            fn drop(&mut self) {\n                /* This code gets executed when `same_bucket` panics */\n\n                /* SAFETY: invariant guarantees that `read - write`\n                 * and `len - read` never overflow and that the copy is always\n                 * in-bounds. */\n                unsafe {\n                    let ptr = self.vec.as_mut_ptr();\n                    let len = self.vec.len();\n\n                    /* How many items were left when `same_bucket` paniced.\n                     * Basically vec[read..].len() */\n                    let items_left = len.wrapping_sub(self.read);\n\n                    /* Pointer to first item in vec[write..write+items_left] slice */\n                    let dropped_ptr = ptr.add(self.write);\n                    /* Pointer to first item in vec[read..] slice */\n                    let valid_ptr = ptr.add(self.read);\n\n                    /* Copy `vec[read..]` to `vec[write..write+items_left]`.\n                     * The slices can overlap, so `copy_nonoverlapping` cannot be used */\n                    ptr::copy(valid_ptr, dropped_ptr, items_left);\n\n                    /* How many items have been already dropped\n                     * Basically vec[read..write].len() */\n                    let dropped = self.read.wrapping_sub(self.write);\n\n                    self.vec.set_len(len - dropped);\n                }\n            }\n        }\n\n        let mut gap = FillGapOnDrop { read: 1, write: 1, vec: self };\n        let ptr = gap.vec.as_mut_ptr();\n\n        /* Drop items while going through Vec, it should be more efficient than\n         * doing slice partition_dedup + truncate */\n\n        /* SAFETY: Because of the invariant, read_ptr, prev_ptr and write_ptr\n         * are always in-bounds and read_ptr never aliases prev_ptr */\n        unsafe {\n            while gap.read < len {\n                let read_ptr = ptr.add(gap.read);\n                let prev_ptr = ptr.add(gap.write.wrapping_sub(1));\n\n                if same_bucket(&mut *read_ptr, &mut *prev_ptr) {\n                    /* We have found duplicate, drop it in-place */\n                    ptr::drop_in_place(read_ptr);\n                } else {\n                    let write_ptr = ptr.add(gap.write);\n\n                    /* Because `read_ptr` can be equal to `write_ptr`, we either\n                     * have to use `copy` or conditional `copy_nonoverlapping`.\n                     * Looks like the first option is faster. */\n                    ptr::copy(read_ptr, write_ptr, 1);\n\n                    /* We have filled that place, so go further */\n                    gap.write += 1;\n                }\n\n                gap.read += 1;\n            }\n\n            /* Technically we could let `gap` clean up with its Drop, but\n             * when `same_bucket` is guaranteed to not panic, this bloats a little\n             * the codegen, so we just do it manually */\n            gap.vec.set_len(gap.write);\n            mem::forget(gap);\n        }\n    }\n\n    /// Appends an element to the back of a collection.\n    ///\n    /// # Panics\n    ///\n    /// Panics if the new capacity exceeds `isize::MAX` bytes.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut vec = vec![1, 2];\n    /// vec.push(3);\n    /// assert_eq!(vec, [1, 2, 3]);\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn push(&mut self, value: T) {\n        // This will panic or abort if we would allocate > isize::MAX bytes\n        // or if the length increment would overflow for zero-sized types.\n        if self.len == self.buf.capacity() {\n            self.reserve(1);\n        }\n        unsafe {\n            let end = self.as_mut_ptr().add(self.len);\n            ptr::write(end, value);\n            self.len += 1;\n        }\n    }\n\n    /// Removes the last element from a vector and returns it, or [`None`] if it\n    /// is empty.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut vec = vec![1, 2, 3];\n    /// assert_eq!(vec.pop(), Some(3));\n    /// assert_eq!(vec, [1, 2]);\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn pop(&mut self) -> Option<T> {\n        if self.len == 0 {\n            None\n        } else {\n            unsafe {\n                self.len -= 1;\n                Some(ptr::read(self.as_ptr().add(self.len())))\n            }\n        }\n    }\n\n    /// Moves all the elements of `other` into `Self`, leaving `other` empty.\n    ///\n    /// # Panics\n    ///\n    /// Panics if the number of elements in the vector overflows a `usize`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut vec = vec![1, 2, 3];\n    /// let mut vec2 = vec![4, 5, 6];\n    /// vec.append(&mut vec2);\n    /// assert_eq!(vec, [1, 2, 3, 4, 5, 6]);\n    /// assert_eq!(vec2, []);\n    /// ```\n    #[inline]\n    #[stable(feature = \"append\", since = \"1.4.0\")]\n    pub fn append(&mut self, other: &mut Self) {\n        unsafe {\n            self.append_elements(other.as_slice() as _);\n            other.set_len(0);\n        }\n    }\n\n    /// Appends elements to `Self` from other buffer.\n    #[inline]\n    unsafe fn append_elements(&mut self, other: *const [T]) {\n        let count = unsafe { (*other).len() };\n        self.reserve(count);\n        let len = self.len();\n        unsafe { ptr::copy_nonoverlapping(other as *const T, self.as_mut_ptr().add(len), count) };\n        self.len += count;\n    }\n\n    /// Creates a draining iterator that removes the specified range in the vector\n    /// and yields the removed items.\n    ///\n    /// When the iterator **is** dropped, all elements in the range are removed\n    /// from the vector, even if the iterator was not fully consumed. If the\n    /// iterator **is not** dropped (with [`mem::forget`] for example), it is\n    /// unspecified how many elements are removed.\n    ///\n    /// # Panics\n    ///\n    /// Panics if the starting point is greater than the end point or if\n    /// the end point is greater than the length of the vector.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut v = vec![1, 2, 3];\n    /// let u: Vec<_> = v.drain(1..).collect();\n    /// assert_eq!(v, &[1]);\n    /// assert_eq!(u, &[2, 3]);\n    ///\n    /// // A full range clears the vector\n    /// v.drain(..);\n    /// assert_eq!(v, &[]);\n    /// ```\n    #[stable(feature = \"drain\", since = \"1.6.0\")]\n    pub fn drain<R>(&mut self, range: R) -> Drain<'_, T, A>\n    where\n        R: RangeBounds<usize>,\n    {\n        // Memory safety\n        //\n        // When the Drain is first created, it shortens the length of\n        // the source vector to make sure no uninitialized or moved-from elements\n        // are accessible at all if the Drain's destructor never gets to run.\n        //\n        // Drain will ptr::read out the values to remove.\n        // When finished, remaining tail of the vec is copied back to cover\n        // the hole, and the vector length is restored to the new length.\n        //\n        let len = self.len();\n        let Range { start, end } = slice::range(range, ..len);\n\n        unsafe {\n            // set self.vec length's to start, to be safe in case Drain is leaked\n            self.set_len(start);\n            // Use the borrow in the IterMut to indicate borrowing behavior of the\n            // whole Drain iterator (like &mut T).\n            let range_slice = slice::from_raw_parts_mut(self.as_mut_ptr().add(start), end - start);\n            Drain {\n                tail_start: end,\n                tail_len: len - end,\n                iter: range_slice.iter(),\n                vec: NonNull::from(self),\n            }\n        }\n    }\n\n    /// Clears the vector, removing all values.\n    ///\n    /// Note that this method has no effect on the allocated capacity\n    /// of the vector.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut v = vec![1, 2, 3];\n    ///\n    /// v.clear();\n    ///\n    /// assert!(v.is_empty());\n    /// ```\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn clear(&mut self) {\n        self.truncate(0)\n    }\n\n    /// Returns the number of elements in the vector, also referred to\n    /// as its 'length'.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let a = vec![1, 2, 3];\n    /// assert_eq!(a.len(), 3);\n    /// ```\n    #[doc(alias = \"length\")]\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn len(&self) -> usize {\n        self.len\n    }\n\n    /// Returns `true` if the vector contains no elements.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut v = Vec::new();\n    /// assert!(v.is_empty());\n    ///\n    /// v.push(1);\n    /// assert!(!v.is_empty());\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn is_empty(&self) -> bool {\n        self.len() == 0\n    }\n\n    /// Splits the collection into two at the given index.\n    ///\n    /// Returns a newly allocated vector containing the elements in the range\n    /// `[at, len)`. After the call, the original vector will be left containing\n    /// the elements `[0, at)` with its previous capacity unchanged.\n    ///\n    /// # Panics\n    ///\n    /// Panics if `at > len`.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut vec = vec![1, 2, 3];\n    /// let vec2 = vec.split_off(1);\n    /// assert_eq!(vec, [1]);\n    /// assert_eq!(vec2, [2, 3]);\n    /// ```\n    #[inline]\n    #[must_use = \"use `.truncate()` if you don't need the other half\"]\n    #[stable(feature = \"split_off\", since = \"1.4.0\")]\n    pub fn split_off(&mut self, at: usize) -> Self\n    where\n        A: Clone,\n    {\n        #[cold]\n        #[inline(never)]\n        fn assert_failed(at: usize, len: usize) -> ! {\n            panic!(\"`at` split index (is {}) should be <= len (is {})\", at, len);\n        }\n\n        if at > self.len() {\n            assert_failed(at, self.len());\n        }\n\n        if at == 0 {\n            // the new vector can take over the original buffer and avoid the copy\n            return mem::replace(\n                self,\n                Vec::with_capacity_in(self.capacity(), self.allocator().clone()),\n            );\n        }\n\n        let other_len = self.len - at;\n        let mut other = Vec::with_capacity_in(other_len, self.allocator().clone());\n\n        // Unsafely `set_len` and copy items to `other`.\n        unsafe {\n            self.set_len(at);\n            other.set_len(other_len);\n\n            ptr::copy_nonoverlapping(self.as_ptr().add(at), other.as_mut_ptr(), other.len());\n        }\n        other\n    }\n\n    /// Resizes the `Vec` in-place so that `len` is equal to `new_len`.\n    ///\n    /// If `new_len` is greater than `len`, the `Vec` is extended by the\n    /// difference, with each additional slot filled with the result of\n    /// calling the closure `f`. The return values from `f` will end up\n    /// in the `Vec` in the order they have been generated.\n    ///\n    /// If `new_len` is less than `len`, the `Vec` is simply truncated.\n    ///\n    /// This method uses a closure to create new values on every push. If\n    /// you'd rather [`Clone`] a given value, use [`Vec::resize`]. If you\n    /// want to use the [`Default`] trait to generate values, you can\n    /// pass [`Default::default`] as the second argument.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut vec = vec![1, 2, 3];\n    /// vec.resize_with(5, Default::default);\n    /// assert_eq!(vec, [1, 2, 3, 0, 0]);\n    ///\n    /// let mut vec = vec![];\n    /// let mut p = 1;\n    /// vec.resize_with(4, || { p *= 2; p });\n    /// assert_eq!(vec, [2, 4, 8, 16]);\n    /// ```\n    #[stable(feature = \"vec_resize_with\", since = \"1.33.0\")]\n    pub fn resize_with<F>(&mut self, new_len: usize, f: F)\n    where\n        F: FnMut() -> T,\n    {\n        let len = self.len();\n        if new_len > len {\n            self.extend_with(new_len - len, ExtendFunc(f));\n        } else {\n            self.truncate(new_len);\n        }\n    }\n\n    /// Consumes and leaks the `Vec`, returning a mutable reference to the contents,\n    /// `&'a mut [T]`. Note that the type `T` must outlive the chosen lifetime\n    /// `'a`. If the type has only static references, or none at all, then this\n    /// may be chosen to be `'static`.\n    ///\n    /// This function is similar to the [`leak`][Box::leak] function on [`Box`]\n    /// except that there is no way to recover the leaked memory.\n    ///\n    /// This function is mainly useful for data that lives for the remainder of\n    /// the program's life. Dropping the returned reference will cause a memory\n    /// leak.\n    ///\n    /// # Examples\n    ///\n    /// Simple usage:\n    ///\n    /// ```\n    /// let x = vec![1, 2, 3];\n    /// let static_ref: &'static mut [usize] = x.leak();\n    /// static_ref[0] += 1;\n    /// assert_eq!(static_ref, &[2, 2, 3]);\n    /// ```\n    #[stable(feature = \"vec_leak\", since = \"1.47.0\")]\n    #[inline]\n    pub fn leak<'a>(self) -> &'a mut [T]\n    where\n        A: 'a,\n    {\n        Box::leak(self.into_boxed_slice())\n    }\n\n    /// Returns the remaining spare capacity of the vector as a slice of\n    /// `MaybeUninit<T>`.\n    ///\n    /// The returned slice can be used to fill the vector with data (e.g. by\n    /// reading from a file) before marking the data as initialized using the\n    /// [`set_len`] method.\n    ///\n    /// [`set_len`]: Vec::set_len\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(vec_spare_capacity, maybe_uninit_extra)]\n    ///\n    /// // Allocate vector big enough for 10 elements.\n    /// let mut v = Vec::with_capacity(10);\n    ///\n    /// // Fill in the first 3 elements.\n    /// let uninit = v.spare_capacity_mut();\n    /// uninit[0].write(0);\n    /// uninit[1].write(1);\n    /// uninit[2].write(2);\n    ///\n    /// // Mark the first 3 elements of the vector as being initialized.\n    /// unsafe {\n    ///     v.set_len(3);\n    /// }\n    ///\n    /// assert_eq!(&v, &[0, 1, 2]);\n    /// ```\n    #[unstable(feature = \"vec_spare_capacity\", issue = \"75017\")]\n    #[inline]\n    pub fn spare_capacity_mut(&mut self) -> &mut [MaybeUninit<T>] {\n        // Note:\n        // This method is not implemented in terms of `split_at_spare_mut`,\n        // to prevent invalidation of pointers to the buffer.\n        unsafe {\n            slice::from_raw_parts_mut(\n                self.as_mut_ptr().add(self.len) as *mut MaybeUninit<T>,\n                self.buf.capacity() - self.len,\n            )\n        }\n    }\n\n    /// Returns vector content as a slice of `T`, along with the remaining spare\n    /// capacity of the vector as a slice of `MaybeUninit<T>`.\n    ///\n    /// The returned spare capacity slice can be used to fill the vector with data\n    /// (e.g. by reading from a file) before marking the data as initialized using\n    /// the [`set_len`] method.\n    ///\n    /// [`set_len`]: Vec::set_len\n    ///\n    /// Note that this is a low-level API, which should be used with care for\n    /// optimization purposes. If you need to append data to a `Vec`\n    /// you can use [`push`], [`extend`], [`extend_from_slice`],\n    /// [`extend_from_within`], [`insert`], [`append`], [`resize`] or\n    /// [`resize_with`], depending on your exact needs.\n    ///\n    /// [`push`]: Vec::push\n    /// [`extend`]: Vec::extend\n    /// [`extend_from_slice`]: Vec::extend_from_slice\n    /// [`extend_from_within`]: Vec::extend_from_within\n    /// [`insert`]: Vec::insert\n    /// [`append`]: Vec::append\n    /// [`resize`]: Vec::resize\n    /// [`resize_with`]: Vec::resize_with\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(vec_split_at_spare, maybe_uninit_extra)]\n    ///\n    /// let mut v = vec![1, 1, 2];\n    ///\n    /// // Reserve additional space big enough for 10 elements.\n    /// v.reserve(10);\n    ///\n    /// let (init, uninit) = v.split_at_spare_mut();\n    /// let sum = init.iter().copied().sum::<u32>();\n    ///\n    /// // Fill in the next 4 elements.\n    /// uninit[0].write(sum);\n    /// uninit[1].write(sum * 2);\n    /// uninit[2].write(sum * 3);\n    /// uninit[3].write(sum * 4);\n    ///\n    /// // Mark the 4 elements of the vector as being initialized.\n    /// unsafe {\n    ///     let len = v.len();\n    ///     v.set_len(len + 4);\n    /// }\n    ///\n    /// assert_eq!(&v, &[1, 1, 2, 4, 8, 12, 16]);\n    /// ```\n    #[unstable(feature = \"vec_split_at_spare\", issue = \"81944\")]\n    #[inline]\n    pub fn split_at_spare_mut(&mut self) -> (&mut [T], &mut [MaybeUninit<T>]) {\n        // SAFETY:\n        // - len is ignored and so never changed\n        let (init, spare, _) = unsafe { self.split_at_spare_mut_with_len() };\n        (init, spare)\n    }\n\n    /// Safety: changing returned .2 (&mut usize) is considered the same as calling `.set_len(_)`.\n    ///\n    /// This method provides unique access to all vec parts at once in `extend_from_within`.\n    unsafe fn split_at_spare_mut_with_len(\n        &mut self,\n    ) -> (&mut [T], &mut [MaybeUninit<T>], &mut usize) {\n        let Range { start: ptr, end: spare_ptr } = self.as_mut_ptr_range();\n        let spare_ptr = spare_ptr.cast::<MaybeUninit<T>>();\n        let spare_len = self.buf.capacity() - self.len;\n\n        // SAFETY:\n        // - `ptr` is guaranteed to be valid for `len` elements\n        // - `spare_ptr` is pointing one element past the buffer, so it doesn't overlap with `initialized`\n        unsafe {\n            let initialized = slice::from_raw_parts_mut(ptr, self.len);\n            let spare = slice::from_raw_parts_mut(spare_ptr, spare_len);\n\n            (initialized, spare, &mut self.len)\n        }\n    }\n}\n\nimpl<T: Clone, A: Allocator> Vec<T, A> {\n    /// Resizes the `Vec` in-place so that `len` is equal to `new_len`.\n    ///\n    /// If `new_len` is greater than `len`, the `Vec` is extended by the\n    /// difference, with each additional slot filled with `value`.\n    /// If `new_len` is less than `len`, the `Vec` is simply truncated.\n    ///\n    /// This method requires `T` to implement [`Clone`],\n    /// in order to be able to clone the passed value.\n    /// If you need more flexibility (or want to rely on [`Default`] instead of\n    /// [`Clone`]), use [`Vec::resize_with`].\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut vec = vec![\"hello\"];\n    /// vec.resize(3, \"world\");\n    /// assert_eq!(vec, [\"hello\", \"world\", \"world\"]);\n    ///\n    /// let mut vec = vec![1, 2, 3, 4];\n    /// vec.resize(2, 0);\n    /// assert_eq!(vec, [1, 2]);\n    /// ```\n    #[stable(feature = \"vec_resize\", since = \"1.5.0\")]\n    pub fn resize(&mut self, new_len: usize, value: T) {\n        let len = self.len();\n\n        if new_len > len {\n            self.extend_with(new_len - len, ExtendElement(value))\n        } else {\n            self.truncate(new_len);\n        }\n    }\n\n    /// Clones and appends all elements in a slice to the `Vec`.\n    ///\n    /// Iterates over the slice `other`, clones each element, and then appends\n    /// it to this `Vec`. The `other` vector is traversed in-order.\n    ///\n    /// Note that this function is same as [`extend`] except that it is\n    /// specialized to work with slices instead. If and when Rust gets\n    /// specialization this function will likely be deprecated (but still\n    /// available).\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut vec = vec![1];\n    /// vec.extend_from_slice(&[2, 3, 4]);\n    /// assert_eq!(vec, [1, 2, 3, 4]);\n    /// ```\n    ///\n    /// [`extend`]: Vec::extend\n    #[stable(feature = \"vec_extend_from_slice\", since = \"1.6.0\")]\n    pub fn extend_from_slice(&mut self, other: &[T]) {\n        self.spec_extend(other.iter())\n    }\n\n    /// Copies elements from `src` range to the end of the vector.\n    ///\n    /// ## Examples\n    ///\n    /// ```\n    /// let mut vec = vec![0, 1, 2, 3, 4];\n    ///\n    /// vec.extend_from_within(2..);\n    /// assert_eq!(vec, [0, 1, 2, 3, 4, 2, 3, 4]);\n    ///\n    /// vec.extend_from_within(..2);\n    /// assert_eq!(vec, [0, 1, 2, 3, 4, 2, 3, 4, 0, 1]);\n    ///\n    /// vec.extend_from_within(4..8);\n    /// assert_eq!(vec, [0, 1, 2, 3, 4, 2, 3, 4, 0, 1, 4, 2, 3, 4]);\n    /// ```\n    #[stable(feature = \"vec_extend_from_within\", since = \"1.53.0\")]\n    pub fn extend_from_within<R>(&mut self, src: R)\n    where\n        R: RangeBounds<usize>,\n    {\n        let range = slice::range(src, ..self.len());\n        self.reserve(range.len());\n\n        // SAFETY:\n        // - `slice::range` guarantees  that the given range is valid for indexing self\n        unsafe {\n            self.spec_extend_from_within(range);\n        }\n    }\n}\n\n// This code generalizes `extend_with_{element,default}`.\ntrait ExtendWith<T> {\n    fn next(&mut self) -> T;\n    fn last(self) -> T;\n}\n\nstruct ExtendElement<T>(T);\nimpl<T: Clone> ExtendWith<T> for ExtendElement<T> {\n    fn next(&mut self) -> T {\n        self.0.clone()\n    }\n    fn last(self) -> T {\n        self.0\n    }\n}\n\nstruct ExtendDefault;\nimpl<T: Default> ExtendWith<T> for ExtendDefault {\n    fn next(&mut self) -> T {\n        Default::default()\n    }\n    fn last(self) -> T {\n        Default::default()\n    }\n}\n\nstruct ExtendFunc<F>(F);\nimpl<T, F: FnMut() -> T> ExtendWith<T> for ExtendFunc<F> {\n    fn next(&mut self) -> T {\n        (self.0)()\n    }\n    fn last(mut self) -> T {\n        (self.0)()\n    }\n}\n\nimpl<T, A: Allocator> Vec<T, A> {\n    /// Extend the vector by `n` values, using the given generator.\n    fn extend_with<E: ExtendWith<T>>(&mut self, n: usize, mut value: E) {\n        self.reserve(n);\n\n        unsafe {\n            let mut ptr = self.as_mut_ptr().add(self.len());\n            // Use SetLenOnDrop to work around bug where compiler\n            // may not realize the store through `ptr` through self.set_len()\n            // don't alias.\n            let mut local_len = SetLenOnDrop::new(&mut self.len);\n\n            // Write all elements except the last one\n            for _ in 1..n {\n                ptr::write(ptr, value.next());\n                ptr = ptr.offset(1);\n                // Increment the length in every step in case next() panics\n                local_len.increment_len(1);\n            }\n\n            if n > 0 {\n                // We can write the last element directly without cloning needlessly\n                ptr::write(ptr, value.last());\n                local_len.increment_len(1);\n            }\n\n            // len set by scope guard\n        }\n    }\n}\n\nimpl<T: PartialEq, A: Allocator> Vec<T, A> {\n    /// Removes consecutive repeated elements in the vector according to the\n    /// [`PartialEq`] trait implementation.\n    ///\n    /// If the vector is sorted, this removes all duplicates.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut vec = vec![1, 2, 2, 3, 2];\n    ///\n    /// vec.dedup();\n    ///\n    /// assert_eq!(vec, [1, 2, 3, 2]);\n    /// ```\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    #[inline]\n    pub fn dedup(&mut self) {\n        self.dedup_by(|a, b| a == b)\n    }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Internal methods and functions\n////////////////////////////////////////////////////////////////////////////////\n\n#[doc(hidden)]\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub fn from_elem<T: Clone>(elem: T, n: usize) -> Vec<T> {\n    <T as SpecFromElem>::from_elem(elem, n, Global)\n}\n\n#[doc(hidden)]\n#[unstable(feature = \"allocator_api\", issue = \"32838\")]\npub fn from_elem_in<T: Clone, A: Allocator>(elem: T, n: usize, alloc: A) -> Vec<T, A> {\n    <T as SpecFromElem>::from_elem(elem, n, alloc)\n}\n\ntrait ExtendFromWithinSpec {\n    /// # Safety\n    ///\n    /// - `src` needs to be valid index\n    /// - `self.capacity() - self.len()` must be `>= src.len()`\n    unsafe fn spec_extend_from_within(&mut self, src: Range<usize>);\n}\n\nimpl<T: Clone, A: Allocator> ExtendFromWithinSpec for Vec<T, A> {\n    default unsafe fn spec_extend_from_within(&mut self, src: Range<usize>) {\n        // SAFETY:\n        // - len is increased only after initializing elements\n        let (this, spare, len) = unsafe { self.split_at_spare_mut_with_len() };\n\n        // SAFETY:\n        // - caller guaratees that src is a valid index\n        let to_clone = unsafe { this.get_unchecked(src) };\n\n        iter::zip(to_clone, spare)\n            .map(|(src, dst)| dst.write(src.clone()))\n            // Note:\n            // - Element was just initialized with `MaybeUninit::write`, so it's ok to increase len\n            // - len is increased after each element to prevent leaks (see issue #82533)\n            .for_each(|_| *len += 1);\n    }\n}\n\nimpl<T: Copy, A: Allocator> ExtendFromWithinSpec for Vec<T, A> {\n    unsafe fn spec_extend_from_within(&mut self, src: Range<usize>) {\n        let count = src.len();\n        {\n            let (init, spare) = self.split_at_spare_mut();\n\n            // SAFETY:\n            // - caller guaratees that `src` is a valid index\n            let source = unsafe { init.get_unchecked(src) };\n\n            // SAFETY:\n            // - Both pointers are created from unique slice references (`&mut [_]`)\n            //   so they are valid and do not overlap.\n            // - Elements are :Copy so it's OK to to copy them, without doing\n            //   anything with the original values\n            // - `count` is equal to the len of `source`, so source is valid for\n            //   `count` reads\n            // - `.reserve(count)` guarantees that `spare.len() >= count` so spare\n            //   is valid for `count` writes\n            unsafe { ptr::copy_nonoverlapping(source.as_ptr(), spare.as_mut_ptr() as _, count) };\n        }\n\n        // SAFETY:\n        // - The elements were just initialized by `copy_nonoverlapping`\n        self.len += count;\n    }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Common trait implementations for Vec\n////////////////////////////////////////////////////////////////////////////////\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T, A: Allocator> ops::Deref for Vec<T, A> {\n    type Target = [T];\n\n    fn deref(&self) -> &[T] {\n        unsafe { slice::from_raw_parts(self.as_ptr(), self.len) }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T, A: Allocator> ops::DerefMut for Vec<T, A> {\n    fn deref_mut(&mut self) -> &mut [T] {\n        unsafe { slice::from_raw_parts_mut(self.as_mut_ptr(), self.len) }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Clone, A: Allocator + Clone> Clone for Vec<T, A> {\n    #[cfg(not(test))]\n    fn clone(&self) -> Self {\n        let alloc = self.allocator().clone();\n        <[T]>::to_vec_in(&**self, alloc)\n    }\n\n    // HACK(japaric): with cfg(test) the inherent `[T]::to_vec` method, which is\n    // required for this method definition, is not available. Instead use the\n    // `slice::to_vec`  function which is only available with cfg(test)\n    // NB see the slice::hack module in slice.rs for more information\n    #[cfg(test)]\n    fn clone(&self) -> Self {\n        let alloc = self.allocator().clone();\n        crate::slice::to_vec(&**self, alloc)\n    }\n\n    fn clone_from(&mut self, other: &Self) {\n        // drop anything that will not be overwritten\n        self.truncate(other.len());\n\n        // self.len <= other.len due to the truncate above, so the\n        // slices here are always in-bounds.\n        let (init, tail) = other.split_at(self.len());\n\n        // reuse the contained values' allocations/resources.\n        self.clone_from_slice(init);\n        self.extend_from_slice(tail);\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Hash, A: Allocator> Hash for Vec<T, A> {\n    #[inline]\n    fn hash<H: Hasher>(&self, state: &mut H) {\n        Hash::hash(&**self, state)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\n#[rustc_on_unimplemented(\n    message = \"vector indices are of type `usize` or ranges of `usize`\",\n    label = \"vector indices are of type `usize` or ranges of `usize`\"\n)]\nimpl<T, I: SliceIndex<[T]>, A: Allocator> Index<I> for Vec<T, A> {\n    type Output = I::Output;\n\n    #[inline]\n    fn index(&self, index: I) -> &Self::Output {\n        Index::index(&**self, index)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\n#[rustc_on_unimplemented(\n    message = \"vector indices are of type `usize` or ranges of `usize`\",\n    label = \"vector indices are of type `usize` or ranges of `usize`\"\n)]\nimpl<T, I: SliceIndex<[T]>, A: Allocator> IndexMut<I> for Vec<T, A> {\n    #[inline]\n    fn index_mut(&mut self, index: I) -> &mut Self::Output {\n        IndexMut::index_mut(&mut **self, index)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> FromIterator<T> for Vec<T> {\n    #[inline]\n    fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Vec<T> {\n        <Self as SpecFromIter<T, I::IntoIter>>::from_iter(iter.into_iter())\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T, A: Allocator> IntoIterator for Vec<T, A> {\n    type Item = T;\n    type IntoIter = IntoIter<T, A>;\n\n    /// Creates a consuming iterator, that is, one that moves each value out of\n    /// the vector (from start to end). The vector cannot be used after calling\n    /// this.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let v = vec![\"a\".to_string(), \"b\".to_string()];\n    /// for s in v.into_iter() {\n    ///     // s has type String, not &String\n    ///     println!(\"{}\", s);\n    /// }\n    /// ```\n    #[inline]\n    fn into_iter(self) -> IntoIter<T, A> {\n        unsafe {\n            let mut me = ManuallyDrop::new(self);\n            let alloc = ptr::read(me.allocator());\n            let begin = me.as_mut_ptr();\n            let end = if mem::size_of::<T>() == 0 {\n                arith_offset(begin as *const i8, me.len() as isize) as *const T\n            } else {\n                begin.add(me.len()) as *const T\n            };\n            let cap = me.buf.capacity();\n            IntoIter {\n                buf: NonNull::new_unchecked(begin),\n                phantom: PhantomData,\n                cap,\n                alloc,\n                ptr: begin,\n                end,\n            }\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T, A: Allocator> IntoIterator for &'a Vec<T, A> {\n    type Item = &'a T;\n    type IntoIter = slice::Iter<'a, T>;\n\n    fn into_iter(self) -> slice::Iter<'a, T> {\n        self.iter()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T, A: Allocator> IntoIterator for &'a mut Vec<T, A> {\n    type Item = &'a mut T;\n    type IntoIter = slice::IterMut<'a, T>;\n\n    fn into_iter(self) -> slice::IterMut<'a, T> {\n        self.iter_mut()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T, A: Allocator> Extend<T> for Vec<T, A> {\n    #[inline]\n    fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I) {\n        <Self as SpecExtend<T, I::IntoIter>>::spec_extend(self, iter.into_iter())\n    }\n\n    #[inline]\n    fn extend_one(&mut self, item: T) {\n        self.push(item);\n    }\n\n    #[inline]\n    fn extend_reserve(&mut self, additional: usize) {\n        self.reserve(additional);\n    }\n}\n\nimpl<T, A: Allocator> Vec<T, A> {\n    // leaf method to which various SpecFrom/SpecExtend implementations delegate when\n    // they have no further optimizations to apply\n    fn extend_desugared<I: Iterator<Item = T>>(&mut self, mut iterator: I) {\n        // This is the case for a general iterator.\n        //\n        // This function should be the moral equivalent of:\n        //\n        //      for item in iterator {\n        //          self.push(item);\n        //      }\n        while let Some(element) = iterator.next() {\n            let len = self.len();\n            if len == self.capacity() {\n                let (lower, _) = iterator.size_hint();\n                self.reserve(lower.saturating_add(1));\n            }\n            unsafe {\n                ptr::write(self.as_mut_ptr().add(len), element);\n                // NB can't overflow since we would have had to alloc the address space\n                self.set_len(len + 1);\n            }\n        }\n    }\n\n    /// Creates a splicing iterator that replaces the specified range in the vector\n    /// with the given `replace_with` iterator and yields the removed items.\n    /// `replace_with` does not need to be the same length as `range`.\n    ///\n    /// `range` is removed even if the iterator is not consumed until the end.\n    ///\n    /// It is unspecified how many elements are removed from the vector\n    /// if the `Splice` value is leaked.\n    ///\n    /// The input iterator `replace_with` is only consumed when the `Splice` value is dropped.\n    ///\n    /// This is optimal if:\n    ///\n    /// * The tail (elements in the vector after `range`) is empty,\n    /// * or `replace_with` yields fewer or equal elements than `range`’s length\n    /// * or the lower bound of its `size_hint()` is exact.\n    ///\n    /// Otherwise, a temporary vector is allocated and the tail is moved twice.\n    ///\n    /// # Panics\n    ///\n    /// Panics if the starting point is greater than the end point or if\n    /// the end point is greater than the length of the vector.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let mut v = vec![1, 2, 3];\n    /// let new = [7, 8];\n    /// let u: Vec<_> = v.splice(..2, new.iter().cloned()).collect();\n    /// assert_eq!(v, &[7, 8, 3]);\n    /// assert_eq!(u, &[1, 2]);\n    /// ```\n    #[inline]\n    #[stable(feature = \"vec_splice\", since = \"1.21.0\")]\n    pub fn splice<R, I>(&mut self, range: R, replace_with: I) -> Splice<'_, I::IntoIter, A>\n    where\n        R: RangeBounds<usize>,\n        I: IntoIterator<Item = T>,\n    {\n        Splice { drain: self.drain(range), replace_with: replace_with.into_iter() }\n    }\n\n    /// Creates an iterator which uses a closure to determine if an element should be removed.\n    ///\n    /// If the closure returns true, then the element is removed and yielded.\n    /// If the closure returns false, the element will remain in the vector and will not be yielded\n    /// by the iterator.\n    ///\n    /// Using this method is equivalent to the following code:\n    ///\n    /// ```\n    /// # let some_predicate = |x: &mut i32| { *x == 2 || *x == 3 || *x == 6 };\n    /// # let mut vec = vec![1, 2, 3, 4, 5, 6];\n    /// let mut i = 0;\n    /// while i < vec.len() {\n    ///     if some_predicate(&mut vec[i]) {\n    ///         let val = vec.remove(i);\n    ///         // your code here\n    ///     } else {\n    ///         i += 1;\n    ///     }\n    /// }\n    ///\n    /// # assert_eq!(vec, vec![1, 4, 5]);\n    /// ```\n    ///\n    /// But `drain_filter` is easier to use. `drain_filter` is also more efficient,\n    /// because it can backshift the elements of the array in bulk.\n    ///\n    /// Note that `drain_filter` also lets you mutate every element in the filter closure,\n    /// regardless of whether you choose to keep or remove it.\n    ///\n    /// # Examples\n    ///\n    /// Splitting an array into evens and odds, reusing the original allocation:\n    ///\n    /// ```\n    /// #![feature(drain_filter)]\n    /// let mut numbers = vec![1, 2, 3, 4, 5, 6, 8, 9, 11, 13, 14, 15];\n    ///\n    /// let evens = numbers.drain_filter(|x| *x % 2 == 0).collect::<Vec<_>>();\n    /// let odds = numbers;\n    ///\n    /// assert_eq!(evens, vec![2, 4, 6, 8, 14]);\n    /// assert_eq!(odds, vec![1, 3, 5, 9, 11, 13, 15]);\n    /// ```\n    #[unstable(feature = \"drain_filter\", reason = \"recently added\", issue = \"43244\")]\n    pub fn drain_filter<F>(&mut self, filter: F) -> DrainFilter<'_, T, F, A>\n    where\n        F: FnMut(&mut T) -> bool,\n    {\n        let old_len = self.len();\n\n        // Guard against us getting leaked (leak amplification)\n        unsafe {\n            self.set_len(0);\n        }\n\n        DrainFilter { vec: self, idx: 0, del: 0, old_len, pred: filter, panic_flag: false }\n    }\n}\n\n/// Extend implementation that copies elements out of references before pushing them onto the Vec.\n///\n/// This implementation is specialized for slice iterators, where it uses [`copy_from_slice`] to\n/// append the entire slice at once.\n///\n/// [`copy_from_slice`]: slice::copy_from_slice\n#[stable(feature = \"extend_ref\", since = \"1.2.0\")]\nimpl<'a, T: Copy + 'a, A: Allocator + 'a> Extend<&'a T> for Vec<T, A> {\n    fn extend<I: IntoIterator<Item = &'a T>>(&mut self, iter: I) {\n        self.spec_extend(iter.into_iter())\n    }\n\n    #[inline]\n    fn extend_one(&mut self, &item: &'a T) {\n        self.push(item);\n    }\n\n    #[inline]\n    fn extend_reserve(&mut self, additional: usize) {\n        self.reserve(additional);\n    }\n}\n\n/// Implements comparison of vectors, [lexicographically](core::cmp::Ord#lexicographical-comparison).\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: PartialOrd, A: Allocator> PartialOrd for Vec<T, A> {\n    #[inline]\n    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {\n        PartialOrd::partial_cmp(&**self, &**other)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Eq, A: Allocator> Eq for Vec<T, A> {}\n\n/// Implements ordering of vectors, [lexicographically](core::cmp::Ord#lexicographical-comparison).\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Ord, A: Allocator> Ord for Vec<T, A> {\n    #[inline]\n    fn cmp(&self, other: &Self) -> Ordering {\n        Ord::cmp(&**self, &**other)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nunsafe impl<#[may_dangle] T, A: Allocator> Drop for Vec<T, A> {\n    fn drop(&mut self) {\n        unsafe {\n            // use drop for [T]\n            // use a raw slice to refer to the elements of the vector as weakest necessary type;\n            // could avoid questions of validity in certain cases\n            ptr::drop_in_place(ptr::slice_from_raw_parts_mut(self.as_mut_ptr(), self.len))\n        }\n        // RawVec handles deallocation\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> Default for Vec<T> {\n    /// Creates an empty `Vec<T>`.\n    fn default() -> Vec<T> {\n        Vec::new()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: fmt::Debug, A: Allocator> fmt::Debug for Vec<T, A> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        fmt::Debug::fmt(&**self, f)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T, A: Allocator> AsRef<Vec<T, A>> for Vec<T, A> {\n    fn as_ref(&self) -> &Vec<T, A> {\n        self\n    }\n}\n\n#[stable(feature = \"vec_as_mut\", since = \"1.5.0\")]\nimpl<T, A: Allocator> AsMut<Vec<T, A>> for Vec<T, A> {\n    fn as_mut(&mut self) -> &mut Vec<T, A> {\n        self\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T, A: Allocator> AsRef<[T]> for Vec<T, A> {\n    fn as_ref(&self) -> &[T] {\n        self\n    }\n}\n\n#[stable(feature = \"vec_as_mut\", since = \"1.5.0\")]\nimpl<T, A: Allocator> AsMut<[T]> for Vec<T, A> {\n    fn as_mut(&mut self) -> &mut [T] {\n        self\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Clone> From<&[T]> for Vec<T> {\n    /// Allocate a `Vec<T>` and fill it by cloning `s`'s items.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// assert_eq!(Vec::from(&[1, 2, 3][..]), vec![1, 2, 3]);\n    /// ```\n    #[cfg(not(test))]\n    fn from(s: &[T]) -> Vec<T> {\n        s.to_vec()\n    }\n    #[cfg(test)]\n    fn from(s: &[T]) -> Vec<T> {\n        crate::slice::to_vec(s, Global)\n    }\n}\n\n#[stable(feature = \"vec_from_mut\", since = \"1.19.0\")]\nimpl<T: Clone> From<&mut [T]> for Vec<T> {\n    /// Allocate a `Vec<T>` and fill it by cloning `s`'s items.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// assert_eq!(Vec::from(&mut [1, 2, 3][..]), vec![1, 2, 3]);\n    /// ```\n    #[cfg(not(test))]\n    fn from(s: &mut [T]) -> Vec<T> {\n        s.to_vec()\n    }\n    #[cfg(test)]\n    fn from(s: &mut [T]) -> Vec<T> {\n        crate::slice::to_vec(s, Global)\n    }\n}\n\n#[stable(feature = \"vec_from_array\", since = \"1.44.0\")]\nimpl<T, const N: usize> From<[T; N]> for Vec<T> {\n    #[cfg(not(test))]\n    fn from(s: [T; N]) -> Vec<T> {\n        <[T]>::into_vec(box s)\n    }\n    /// Allocate a `Vec<T>` and move `s`'s items into it.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// assert_eq!(Vec::from([1, 2, 3]), vec![1, 2, 3]);\n    /// ```\n    #[cfg(test)]\n    fn from(s: [T; N]) -> Vec<T> {\n        crate::slice::into_vec(box s)\n    }\n}\n\n#[stable(feature = \"vec_from_cow_slice\", since = \"1.14.0\")]\nimpl<'a, T> From<Cow<'a, [T]>> for Vec<T>\nwhere\n    [T]: ToOwned<Owned = Vec<T>>,\n{\n    /// Convert a clone-on-write slice into a vector.\n    ///\n    /// If `s` already owns a `Vec<T>`, it will be returned directly.\n    /// If `s` is borrowing a slice, a new `Vec<T>` will be allocated and\n    /// filled by cloning `s`'s items into it.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// # use std::borrow::Cow;\n    /// let o: Cow<[i32]> = Cow::Owned(vec![1, 2, 3]);\n    /// let b: Cow<[i32]> = Cow::Borrowed(&[1, 2, 3]);\n    /// assert_eq!(Vec::from(o), Vec::from(b));\n    /// ```\n    fn from(s: Cow<'a, [T]>) -> Vec<T> {\n        s.into_owned()\n    }\n}\n\n// note: test pulls in libstd, which causes errors here\n#[cfg(not(test))]\n#[stable(feature = \"vec_from_box\", since = \"1.18.0\")]\nimpl<T, A: Allocator> From<Box<[T], A>> for Vec<T, A> {\n    /// Convert a boxed slice into a vector by transferring ownership of\n    /// the existing heap allocation.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let b: Box<[i32]> = vec![1, 2, 3].into_boxed_slice();\n    /// assert_eq!(Vec::from(b), vec![1, 2, 3]);\n    /// ```\n    fn from(s: Box<[T], A>) -> Self {\n        s.into_vec()\n    }\n}\n\n// note: test pulls in libstd, which causes errors here\n#[cfg(not(test))]\n#[stable(feature = \"box_from_vec\", since = \"1.20.0\")]\nimpl<T, A: Allocator> From<Vec<T, A>> for Box<[T], A> {\n    /// Convert a vector into a boxed slice.\n    ///\n    /// If `v` has excess capacity, its items will be moved into a\n    /// newly-allocated buffer with exactly the right capacity.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// assert_eq!(Box::from(vec![1, 2, 3]), vec![1, 2, 3].into_boxed_slice());\n    /// ```\n    fn from(v: Vec<T, A>) -> Self {\n        v.into_boxed_slice()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl From<&str> for Vec<u8> {\n    /// Allocate a `Vec<u8>` and fill it with a UTF-8 string.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// assert_eq!(Vec::from(\"123\"), vec![b'1', b'2', b'3']);\n    /// ```\n    fn from(s: &str) -> Vec<u8> {\n        From::from(s.as_bytes())\n    }\n}\n\n#[stable(feature = \"array_try_from_vec\", since = \"1.48.0\")]\nimpl<T, A: Allocator, const N: usize> TryFrom<Vec<T, A>> for [T; N] {\n    type Error = Vec<T, A>;\n\n    /// Gets the entire contents of the `Vec<T>` as an array,\n    /// if its size exactly matches that of the requested array.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::convert::TryInto;\n    /// assert_eq!(vec![1, 2, 3].try_into(), Ok([1, 2, 3]));\n    /// assert_eq!(<Vec<i32>>::new().try_into(), Ok([]));\n    /// ```\n    ///\n    /// If the length doesn't match, the input comes back in `Err`:\n    /// ```\n    /// use std::convert::TryInto;\n    /// let r: Result<[i32; 4], _> = (0..10).collect::<Vec<_>>().try_into();\n    /// assert_eq!(r, Err(vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9]));\n    /// ```\n    ///\n    /// If you're fine with just getting a prefix of the `Vec<T>`,\n    /// you can call [`.truncate(N)`](Vec::truncate) first.\n    /// ```\n    /// use std::convert::TryInto;\n    /// let mut v = String::from(\"hello world\").into_bytes();\n    /// v.sort();\n    /// v.truncate(2);\n    /// let [a, b]: [_; 2] = v.try_into().unwrap();\n    /// assert_eq!(a, b' ');\n    /// assert_eq!(b, b'd');\n    /// ```\n    fn try_from(mut vec: Vec<T, A>) -> Result<[T; N], Vec<T, A>> {\n        if vec.len() != N {\n            return Err(vec);\n        }\n\n        // SAFETY: `.set_len(0)` is always sound.\n        unsafe { vec.set_len(0) };\n\n        // SAFETY: A `Vec`'s pointer is always aligned properly, and\n        // the alignment the array needs is the same as the items.\n        // We checked earlier that we have sufficient items.\n        // The items will not double-drop as the `set_len`\n        // tells the `Vec` not to also drop them.\n        let array = unsafe { ptr::read(vec.as_ptr() as *const [T; N]) };\n        Ok(array)\n    }\n}\n// Set the length of the vec when the `SetLenOnDrop` value goes out of scope.\n//\n// The idea is: The length field in SetLenOnDrop is a local variable\n// that the optimizer will see does not alias with any stores through the Vec's data\n// pointer. This is a workaround for alias analysis issue #32155\npub(super) struct SetLenOnDrop<'a> {\n    len: &'a mut usize,\n    local_len: usize,\n}\n\nimpl<'a> SetLenOnDrop<'a> {\n    #[inline]\n    pub(super) fn new(len: &'a mut usize) -> Self {\n        SetLenOnDrop { local_len: *len, len }\n    }\n\n    #[inline]\n    pub(super) fn increment_len(&mut self, increment: usize) {\n        self.local_len += increment;\n    }\n}\n\nimpl Drop for SetLenOnDrop<'_> {\n    #[inline]\n    fn drop(&mut self) {\n        *self.len = self.local_len;\n    }\n}\nuse crate::alloc::{Allocator, Global};\nuse core::ptr::{self};\nuse core::slice::{self};\n\nuse super::Vec;\n\n/// An iterator which uses a closure to determine if an element should be removed.\n///\n/// This struct is created by [`Vec::drain_filter`].\n/// See its documentation for more.\n///\n/// # Example\n///\n/// ```\n/// #![feature(drain_filter)]\n///\n/// let mut v = vec![0, 1, 2];\n/// let iter: std::vec::DrainFilter<_, _> = v.drain_filter(|x| *x % 2 == 0);\n/// ```\n#[unstable(feature = \"drain_filter\", reason = \"recently added\", issue = \"43244\")]\n#[derive(Debug)]\npub struct DrainFilter<\n    'a,\n    T,\n    F,\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")] A: Allocator = Global,\n> where\n    F: FnMut(&mut T) -> bool,\n{\n    pub(super) vec: &'a mut Vec<T, A>,\n    /// The index of the item that will be inspected by the next call to `next`.\n    pub(super) idx: usize,\n    /// The number of items that have been drained (removed) thus far.\n    pub(super) del: usize,\n    /// The original length of `vec` prior to draining.\n    pub(super) old_len: usize,\n    /// The filter test predicate.\n    pub(super) pred: F,\n    /// A flag that indicates a panic has occurred in the filter test predicate.\n    /// This is used as a hint in the drop implementation to prevent consumption\n    /// of the remainder of the `DrainFilter`. Any unprocessed items will be\n    /// backshifted in the `vec`, but no further items will be dropped or\n    /// tested by the filter predicate.\n    pub(super) panic_flag: bool,\n}\n\nimpl<T, F, A: Allocator> DrainFilter<'_, T, F, A>\nwhere\n    F: FnMut(&mut T) -> bool,\n{\n    /// Returns a reference to the underlying allocator.\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    #[inline]\n    pub fn allocator(&self) -> &A {\n        self.vec.allocator()\n    }\n}\n\n#[unstable(feature = \"drain_filter\", reason = \"recently added\", issue = \"43244\")]\nimpl<T, F, A: Allocator> Iterator for DrainFilter<'_, T, F, A>\nwhere\n    F: FnMut(&mut T) -> bool,\n{\n    type Item = T;\n\n    fn next(&mut self) -> Option<T> {\n        unsafe {\n            while self.idx < self.old_len {\n                let i = self.idx;\n                let v = slice::from_raw_parts_mut(self.vec.as_mut_ptr(), self.old_len);\n                self.panic_flag = true;\n                let drained = (self.pred)(&mut v[i]);\n                self.panic_flag = false;\n                // Update the index *after* the predicate is called. If the index\n                // is updated prior and the predicate panics, the element at this\n                // index would be leaked.\n                self.idx += 1;\n                if drained {\n                    self.del += 1;\n                    return Some(ptr::read(&v[i]));\n                } else if self.del > 0 {\n                    let del = self.del;\n                    let src: *const T = &v[i];\n                    let dst: *mut T = &mut v[i - del];\n                    ptr::copy_nonoverlapping(src, dst, 1);\n                }\n            }\n            None\n        }\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        (0, Some(self.old_len - self.idx))\n    }\n}\n\n#[unstable(feature = \"drain_filter\", reason = \"recently added\", issue = \"43244\")]\nimpl<T, F, A: Allocator> Drop for DrainFilter<'_, T, F, A>\nwhere\n    F: FnMut(&mut T) -> bool,\n{\n    fn drop(&mut self) {\n        struct BackshiftOnDrop<'a, 'b, T, F, A: Allocator>\n        where\n            F: FnMut(&mut T) -> bool,\n        {\n            drain: &'b mut DrainFilter<'a, T, F, A>,\n        }\n\n        impl<'a, 'b, T, F, A: Allocator> Drop for BackshiftOnDrop<'a, 'b, T, F, A>\n        where\n            F: FnMut(&mut T) -> bool,\n        {\n            fn drop(&mut self) {\n                unsafe {\n                    if self.drain.idx < self.drain.old_len && self.drain.del > 0 {\n                        // This is a pretty messed up state, and there isn't really an\n                        // obviously right thing to do. We don't want to keep trying\n                        // to execute `pred`, so we just backshift all the unprocessed\n                        // elements and tell the vec that they still exist. The backshift\n                        // is required to prevent a double-drop of the last successfully\n                        // drained item prior to a panic in the predicate.\n                        let ptr = self.drain.vec.as_mut_ptr();\n                        let src = ptr.add(self.drain.idx);\n                        let dst = src.sub(self.drain.del);\n                        let tail_len = self.drain.old_len - self.drain.idx;\n                        src.copy_to(dst, tail_len);\n                    }\n                    self.drain.vec.set_len(self.drain.old_len - self.drain.del);\n                }\n            }\n        }\n\n        let backshift = BackshiftOnDrop { drain: self };\n\n        // Attempt to consume any remaining elements if the filter predicate\n        // has not yet panicked. We'll backshift any remaining elements\n        // whether we've already panicked or if the consumption here panics.\n        if !backshift.drain.panic_flag {\n            backshift.drain.for_each(drop);\n        }\n    }\n}\nuse crate::borrow::Cow;\nuse core::iter::FromIterator;\n\nuse super::Vec;\n\n#[stable(feature = \"cow_from_vec\", since = \"1.8.0\")]\nimpl<'a, T: Clone> From<&'a [T]> for Cow<'a, [T]> {\n    fn from(s: &'a [T]) -> Cow<'a, [T]> {\n        Cow::Borrowed(s)\n    }\n}\n\n#[stable(feature = \"cow_from_vec\", since = \"1.8.0\")]\nimpl<'a, T: Clone> From<Vec<T>> for Cow<'a, [T]> {\n    fn from(v: Vec<T>) -> Cow<'a, [T]> {\n        Cow::Owned(v)\n    }\n}\n\n#[stable(feature = \"cow_from_vec_ref\", since = \"1.28.0\")]\nimpl<'a, T: Clone> From<&'a Vec<T>> for Cow<'a, [T]> {\n    fn from(v: &'a Vec<T>) -> Cow<'a, [T]> {\n        Cow::Borrowed(v.as_slice())\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<'a, T> FromIterator<T> for Cow<'a, [T]>\nwhere\n    T: Clone,\n{\n    fn from_iter<I: IntoIterator<Item = T>>(it: I) -> Cow<'a, [T]> {\n        Cow::Owned(FromIterator::from_iter(it))\n    }\n}\nuse crate::alloc::Allocator;\nuse crate::borrow::Cow;\n\nuse super::Vec;\n\nmacro_rules! __impl_slice_eq1 {\n    ([$($vars:tt)*] $lhs:ty, $rhs:ty $(where $ty:ty: $bound:ident)?, #[$stability:meta]) => {\n        #[$stability]\n        impl<T, U, $($vars)*> PartialEq<$rhs> for $lhs\n        where\n            T: PartialEq<U>,\n            $($ty: $bound)?\n        {\n            #[inline]\n            fn eq(&self, other: &$rhs) -> bool { self[..] == other[..] }\n            #[inline]\n            fn ne(&self, other: &$rhs) -> bool { self[..] != other[..] }\n        }\n    }\n}\n\n__impl_slice_eq1! { [A: Allocator] Vec<T, A>, Vec<U, A>, #[stable(feature = \"rust1\", since = \"1.0.0\")] }\n__impl_slice_eq1! { [A: Allocator] Vec<T, A>, &[U], #[stable(feature = \"rust1\", since = \"1.0.0\")] }\n__impl_slice_eq1! { [A: Allocator] Vec<T, A>, &mut [U], #[stable(feature = \"rust1\", since = \"1.0.0\")] }\n__impl_slice_eq1! { [A: Allocator] &[T], Vec<U, A>, #[stable(feature = \"partialeq_vec_for_ref_slice\", since = \"1.46.0\")] }\n__impl_slice_eq1! { [A: Allocator] &mut [T], Vec<U, A>, #[stable(feature = \"partialeq_vec_for_ref_slice\", since = \"1.46.0\")] }\n__impl_slice_eq1! { [A: Allocator] Vec<T, A>, [U], #[stable(feature = \"partialeq_vec_for_slice\", since = \"1.48.0\")]  }\n__impl_slice_eq1! { [A: Allocator] [T], Vec<U, A>, #[stable(feature = \"partialeq_vec_for_slice\", since = \"1.48.0\")]  }\n__impl_slice_eq1! { [A: Allocator] Cow<'_, [T]>, Vec<U, A> where T: Clone, #[stable(feature = \"rust1\", since = \"1.0.0\")] }\n__impl_slice_eq1! { [] Cow<'_, [T]>, &[U] where T: Clone, #[stable(feature = \"rust1\", since = \"1.0.0\")] }\n__impl_slice_eq1! { [] Cow<'_, [T]>, &mut [U] where T: Clone, #[stable(feature = \"rust1\", since = \"1.0.0\")] }\n__impl_slice_eq1! { [A: Allocator, const N: usize] Vec<T, A>, [U; N], #[stable(feature = \"rust1\", since = \"1.0.0\")] }\n__impl_slice_eq1! { [A: Allocator, const N: usize] Vec<T, A>, &[U; N], #[stable(feature = \"rust1\", since = \"1.0.0\")] }\n\n// NOTE: some less important impls are omitted to reduce code bloat\n// FIXME(Centril): Reconsider this?\n//__impl_slice_eq1! { [const N: usize] Vec<A>, &mut [B; N], }\n//__impl_slice_eq1! { [const N: usize] [A; N], Vec<B>, }\n//__impl_slice_eq1! { [const N: usize] &[A; N], Vec<B>, }\n//__impl_slice_eq1! { [const N: usize] &mut [A; N], Vec<B>, }\n//__impl_slice_eq1! { [const N: usize] Cow<'a, [A]>, [B; N], }\n//__impl_slice_eq1! { [const N: usize] Cow<'a, [A]>, &[B; N], }\n//__impl_slice_eq1! { [const N: usize] Cow<'a, [A]>, &mut [B; N], }\nuse crate::alloc::{Allocator, Global};\nuse core::ptr::{self};\nuse core::slice::{self};\n\nuse super::{Drain, Vec};\n\n/// A splicing iterator for `Vec`.\n///\n/// This struct is created by [`Vec::splice()`].\n/// See its documentation for more.\n///\n/// # Example\n///\n/// ```\n/// let mut v = vec![0, 1, 2];\n/// let new = [7, 8];\n/// let iter: std::vec::Splice<_> = v.splice(1.., new.iter().cloned());\n/// ```\n#[derive(Debug)]\n#[stable(feature = \"vec_splice\", since = \"1.21.0\")]\npub struct Splice<\n    'a,\n    I: Iterator + 'a,\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")] A: Allocator + 'a = Global,\n> {\n    pub(super) drain: Drain<'a, I::Item, A>,\n    pub(super) replace_with: I,\n}\n\n#[stable(feature = \"vec_splice\", since = \"1.21.0\")]\nimpl<I: Iterator, A: Allocator> Iterator for Splice<'_, I, A> {\n    type Item = I::Item;\n\n    fn next(&mut self) -> Option<Self::Item> {\n        self.drain.next()\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.drain.size_hint()\n    }\n}\n\n#[stable(feature = \"vec_splice\", since = \"1.21.0\")]\nimpl<I: Iterator, A: Allocator> DoubleEndedIterator for Splice<'_, I, A> {\n    fn next_back(&mut self) -> Option<Self::Item> {\n        self.drain.next_back()\n    }\n}\n\n#[stable(feature = \"vec_splice\", since = \"1.21.0\")]\nimpl<I: Iterator, A: Allocator> ExactSizeIterator for Splice<'_, I, A> {}\n\n#[stable(feature = \"vec_splice\", since = \"1.21.0\")]\nimpl<I: Iterator, A: Allocator> Drop for Splice<'_, I, A> {\n    fn drop(&mut self) {\n        self.drain.by_ref().for_each(drop);\n\n        unsafe {\n            if self.drain.tail_len == 0 {\n                self.drain.vec.as_mut().extend(self.replace_with.by_ref());\n                return;\n            }\n\n            // First fill the range left by drain().\n            if !self.drain.fill(&mut self.replace_with) {\n                return;\n            }\n\n            // There may be more elements. Use the lower bound as an estimate.\n            // FIXME: Is the upper bound a better guess? Or something else?\n            let (lower_bound, _upper_bound) = self.replace_with.size_hint();\n            if lower_bound > 0 {\n                self.drain.move_tail(lower_bound);\n                if !self.drain.fill(&mut self.replace_with) {\n                    return;\n                }\n            }\n\n            // Collect any remaining elements.\n            // This is a zero-length vector which does not allocate if `lower_bound` was exact.\n            let mut collected = self.replace_with.by_ref().collect::<Vec<I::Item>>().into_iter();\n            // Now we have an exact count.\n            if collected.len() > 0 {\n                self.drain.move_tail(collected.len());\n                let filled = self.drain.fill(&mut collected);\n                debug_assert!(filled);\n                debug_assert_eq!(collected.len(), 0);\n            }\n        }\n        // Let `Drain::drop` move the tail back if necessary and restore `vec.len`.\n    }\n}\n\n/// Private helper methods for `Splice::drop`\nimpl<T, A: Allocator> Drain<'_, T, A> {\n    /// The range from `self.vec.len` to `self.tail_start` contains elements\n    /// that have been moved out.\n    /// Fill that range as much as possible with new elements from the `replace_with` iterator.\n    /// Returns `true` if we filled the entire range. (`replace_with.next()` didn’t return `None`.)\n    unsafe fn fill<I: Iterator<Item = T>>(&mut self, replace_with: &mut I) -> bool {\n        let vec = unsafe { self.vec.as_mut() };\n        let range_start = vec.len;\n        let range_end = self.tail_start;\n        let range_slice = unsafe {\n            slice::from_raw_parts_mut(vec.as_mut_ptr().add(range_start), range_end - range_start)\n        };\n\n        for place in range_slice {\n            if let Some(new_item) = replace_with.next() {\n                unsafe { ptr::write(place, new_item) };\n                vec.len += 1;\n            } else {\n                return false;\n            }\n        }\n        true\n    }\n\n    /// Makes room for inserting more elements before the tail.\n    unsafe fn move_tail(&mut self, additional: usize) {\n        let vec = unsafe { self.vec.as_mut() };\n        let len = self.tail_start + self.tail_len;\n        vec.buf.reserve(len, additional);\n\n        let new_tail_start = self.tail_start + additional;\n        unsafe {\n            let src = vec.as_ptr().add(self.tail_start);\n            let dst = vec.as_mut_ptr().add(new_tail_start);\n            ptr::copy(src, dst, self.tail_len);\n        }\n        self.tail_start = new_tail_start;\n    }\n}\nuse core::ptr::{self};\nuse core::slice::{self};\n\n// A helper struct for in-place iteration that drops the destination slice of iteration,\n// i.e. the head. The source slice (the tail) is dropped by IntoIter.\npub(super) struct InPlaceDrop<T> {\n    pub(super) inner: *mut T,\n    pub(super) dst: *mut T,\n}\n\nimpl<T> InPlaceDrop<T> {\n    fn len(&self) -> usize {\n        unsafe { self.dst.offset_from(self.inner) as usize }\n    }\n}\n\nimpl<T> Drop for InPlaceDrop<T> {\n    #[inline]\n    fn drop(&mut self) {\n        unsafe {\n            ptr::drop_in_place(slice::from_raw_parts_mut(self.inner, self.len()));\n        }\n    }\n}\n//! The alloc Prelude\n//!\n//! The purpose of this module is to alleviate imports of commonly-used\n//! items of the `alloc` crate by adding a glob import to the top of modules:\n//!\n//! ```\n//! # #![allow(unused_imports)]\n//! #![feature(alloc_prelude)]\n//! extern crate alloc;\n//! use alloc::prelude::v1::*;\n//! ```\n\n#![unstable(feature = \"alloc_prelude\", issue = \"58935\")]\n\npub mod v1;\n//! The first version of the prelude of `alloc` crate.\n//!\n//! See the [module-level documentation](../index.html) for more.\n\n#![unstable(feature = \"alloc_prelude\", issue = \"58935\")]\n\n#[unstable(feature = \"alloc_prelude\", issue = \"58935\")]\npub use crate::borrow::ToOwned;\n#[unstable(feature = \"alloc_prelude\", issue = \"58935\")]\npub use crate::boxed::Box;\n#[unstable(feature = \"alloc_prelude\", issue = \"58935\")]\npub use crate::string::{String, ToString};\n#[unstable(feature = \"alloc_prelude\", issue = \"58935\")]\npub use crate::vec::Vec;\nuse super::*;\n\nextern crate test;\nuse crate::boxed::Box;\nuse test::Bencher;\n\n#[test]\nfn allocate_zeroed() {\n    unsafe {\n        let layout = Layout::from_size_align(1024, 1).unwrap();\n        let ptr =\n            Global.allocate_zeroed(layout.clone()).unwrap_or_else(|_| handle_alloc_error(layout));\n\n        let mut i = ptr.as_non_null_ptr().as_ptr();\n        let end = i.add(layout.size());\n        while i < end {\n            assert_eq!(*i, 0);\n            i = i.offset(1);\n        }\n        Global.deallocate(ptr.as_non_null_ptr(), layout);\n    }\n}\n\n#[bench]\n#[cfg_attr(miri, ignore)] // isolated Miri does not support benchmarks\nfn alloc_owned_small(b: &mut Bencher) {\n    b.iter(|| {\n        let _: Box<_> = box 10;\n    })\n}\n//! A pointer type for heap allocation.\n//!\n//! [`Box<T>`], casually referred to as a 'box', provides the simplest form of\n//! heap allocation in Rust. Boxes provide ownership for this allocation, and\n//! drop their contents when they go out of scope. Boxes also ensure that they\n//! never allocate more than `isize::MAX` bytes.\n//!\n//! # Examples\n//!\n//! Move a value from the stack to the heap by creating a [`Box`]:\n//!\n//! ```\n//! let val: u8 = 5;\n//! let boxed: Box<u8> = Box::new(val);\n//! ```\n//!\n//! Move a value from a [`Box`] back to the stack by [dereferencing]:\n//!\n//! ```\n//! let boxed: Box<u8> = Box::new(5);\n//! let val: u8 = *boxed;\n//! ```\n//!\n//! Creating a recursive data structure:\n//!\n//! ```\n//! #[derive(Debug)]\n//! enum List<T> {\n//!     Cons(T, Box<List<T>>),\n//!     Nil,\n//! }\n//!\n//! let list: List<i32> = List::Cons(1, Box::new(List::Cons(2, Box::new(List::Nil))));\n//! println!(\"{:?}\", list);\n//! ```\n//!\n//! This will print `Cons(1, Cons(2, Nil))`.\n//!\n//! Recursive structures must be boxed, because if the definition of `Cons`\n//! looked like this:\n//!\n//! ```compile_fail,E0072\n//! # enum List<T> {\n//! Cons(T, List<T>),\n//! # }\n//! ```\n//!\n//! It wouldn't work. This is because the size of a `List` depends on how many\n//! elements are in the list, and so we don't know how much memory to allocate\n//! for a `Cons`. By introducing a [`Box<T>`], which has a defined size, we know how\n//! big `Cons` needs to be.\n//!\n//! # Memory layout\n//!\n//! For non-zero-sized values, a [`Box`] will use the [`Global`] allocator for\n//! its allocation. It is valid to convert both ways between a [`Box`] and a\n//! raw pointer allocated with the [`Global`] allocator, given that the\n//! [`Layout`] used with the allocator is correct for the type. More precisely,\n//! a `value: *mut T` that has been allocated with the [`Global`] allocator\n//! with `Layout::for_value(&*value)` may be converted into a box using\n//! [`Box::<T>::from_raw(value)`]. Conversely, the memory backing a `value: *mut\n//! T` obtained from [`Box::<T>::into_raw`] may be deallocated using the\n//! [`Global`] allocator with [`Layout::for_value(&*value)`].\n//!\n//! For zero-sized values, the `Box` pointer still has to be [valid] for reads\n//! and writes and sufficiently aligned. In particular, casting any aligned\n//! non-zero integer literal to a raw pointer produces a valid pointer, but a\n//! pointer pointing into previously allocated memory that since got freed is\n//! not valid. The recommended way to build a Box to a ZST if `Box::new` cannot\n//! be used is to use [`ptr::NonNull::dangling`].\n//!\n//! So long as `T: Sized`, a `Box<T>` is guaranteed to be represented\n//! as a single pointer and is also ABI-compatible with C pointers\n//! (i.e. the C type `T*`). This means that if you have extern \"C\"\n//! Rust functions that will be called from C, you can define those\n//! Rust functions using `Box<T>` types, and use `T*` as corresponding\n//! type on the C side. As an example, consider this C header which\n//! declares functions that create and destroy some kind of `Foo`\n//! value:\n//!\n//! ```c\n//! /* C header */\n//!\n//! /* Returns ownership to the caller */\n//! struct Foo* foo_new(void);\n//!\n//! /* Takes ownership from the caller; no-op when invoked with NULL */\n//! void foo_delete(struct Foo*);\n//! ```\n//!\n//! These two functions might be implemented in Rust as follows. Here, the\n//! `struct Foo*` type from C is translated to `Box<Foo>`, which captures\n//! the ownership constraints. Note also that the nullable argument to\n//! `foo_delete` is represented in Rust as `Option<Box<Foo>>`, since `Box<Foo>`\n//! cannot be null.\n//!\n//! ```\n//! #[repr(C)]\n//! pub struct Foo;\n//!\n//! #[no_mangle]\n//! pub extern \"C\" fn foo_new() -> Box<Foo> {\n//!     Box::new(Foo)\n//! }\n//!\n//! #[no_mangle]\n//! pub extern \"C\" fn foo_delete(_: Option<Box<Foo>>) {}\n//! ```\n//!\n//! Even though `Box<T>` has the same representation and C ABI as a C pointer,\n//! this does not mean that you can convert an arbitrary `T*` into a `Box<T>`\n//! and expect things to work. `Box<T>` values will always be fully aligned,\n//! non-null pointers. Moreover, the destructor for `Box<T>` will attempt to\n//! free the value with the global allocator. In general, the best practice\n//! is to only use `Box<T>` for pointers that originated from the global\n//! allocator.\n//!\n//! **Important.** At least at present, you should avoid using\n//! `Box<T>` types for functions that are defined in C but invoked\n//! from Rust. In those cases, you should directly mirror the C types\n//! as closely as possible. Using types like `Box<T>` where the C\n//! definition is just using `T*` can lead to undefined behavior, as\n//! described in [rust-lang/unsafe-code-guidelines#198][ucg#198].\n//!\n//! [ucg#198]: https://github.com/rust-lang/unsafe-code-guidelines/issues/198\n//! [dereferencing]: core::ops::Deref\n//! [`Box::<T>::from_raw(value)`]: Box::from_raw\n//! [`Global`]: crate::alloc::Global\n//! [`Layout`]: crate::alloc::Layout\n//! [`Layout::for_value(&*value)`]: crate::alloc::Layout::for_value\n//! [valid]: ptr#safety\n\n#![stable(feature = \"rust1\", since = \"1.0.0\")]\n\nuse core::any::Any;\nuse core::borrow;\nuse core::cmp::Ordering;\nuse core::convert::{From, TryFrom};\nuse core::fmt;\nuse core::future::Future;\nuse core::hash::{Hash, Hasher};\nuse core::iter::{FromIterator, FusedIterator, Iterator};\nuse core::marker::{Unpin, Unsize};\nuse core::mem;\nuse core::ops::{\n    CoerceUnsized, Deref, DerefMut, DispatchFromDyn, Generator, GeneratorState, Receiver,\n};\nuse core::pin::Pin;\nuse core::ptr::{self, Unique};\nuse core::stream::Stream;\nuse core::task::{Context, Poll};\n\nuse crate::alloc::{handle_alloc_error, AllocError, Allocator, Global, Layout, WriteCloneIntoRaw};\nuse crate::borrow::Cow;\nuse crate::raw_vec::RawVec;\nuse crate::str::from_boxed_utf8_unchecked;\nuse crate::vec::Vec;\n\n/// A pointer type for heap allocation.\n///\n/// See the [module-level documentation](../../std/boxed/index.html) for more.\n#[lang = \"owned_box\"]\n#[fundamental]\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\npub struct Box<\n    T: ?Sized,\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")] A: Allocator = Global,\n>(Unique<T>, A);\n\nimpl<T> Box<T> {\n    /// Allocates memory on the heap and then places `x` into it.\n    ///\n    /// This doesn't actually allocate if `T` is zero-sized.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let five = Box::new(5);\n    /// ```\n    #[inline(always)]\n    #[doc(alias = \"alloc\")]\n    #[doc(alias = \"malloc\")]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    pub fn new(x: T) -> Self {\n        box x\n    }\n\n    /// Constructs a new box with uninitialized contents.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(new_uninit)]\n    ///\n    /// let mut five = Box::<u32>::new_uninit();\n    ///\n    /// let five = unsafe {\n    ///     // Deferred initialization:\n    ///     five.as_mut_ptr().write(5);\n    ///\n    ///     five.assume_init()\n    /// };\n    ///\n    /// assert_eq!(*five, 5)\n    /// ```\n    #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    #[inline]\n    pub fn new_uninit() -> Box<mem::MaybeUninit<T>> {\n        Self::new_uninit_in(Global)\n    }\n\n    /// Constructs a new `Box` with uninitialized contents, with the memory\n    /// being filled with `0` bytes.\n    ///\n    /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and incorrect usage\n    /// of this method.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(new_uninit)]\n    ///\n    /// let zero = Box::<u32>::new_zeroed();\n    /// let zero = unsafe { zero.assume_init() };\n    ///\n    /// assert_eq!(*zero, 0)\n    /// ```\n    ///\n    /// [zeroed]: mem::MaybeUninit::zeroed\n    #[inline]\n    #[doc(alias = \"calloc\")]\n    #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    pub fn new_zeroed() -> Box<mem::MaybeUninit<T>> {\n        Self::new_zeroed_in(Global)\n    }\n\n    /// Constructs a new `Pin<Box<T>>`. If `T` does not implement `Unpin`, then\n    /// `x` will be pinned in memory and unable to be moved.\n    #[stable(feature = \"pin\", since = \"1.33.0\")]\n    #[inline(always)]\n    pub fn pin(x: T) -> Pin<Box<T>> {\n        (box x).into()\n    }\n\n    /// Allocates memory on the heap then places `x` into it,\n    /// returning an error if the allocation fails\n    ///\n    /// This doesn't actually allocate if `T` is zero-sized.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(allocator_api)]\n    ///\n    /// let five = Box::try_new(5)?;\n    /// # Ok::<(), std::alloc::AllocError>(())\n    /// ```\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    #[inline]\n    pub fn try_new(x: T) -> Result<Self, AllocError> {\n        Self::try_new_in(x, Global)\n    }\n\n    /// Constructs a new box with uninitialized contents on the heap,\n    /// returning an error if the allocation fails\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(allocator_api, new_uninit)]\n    ///\n    /// let mut five = Box::<u32>::try_new_uninit()?;\n    ///\n    /// let five = unsafe {\n    ///     // Deferred initialization:\n    ///     five.as_mut_ptr().write(5);\n    ///\n    ///     five.assume_init()\n    /// };\n    ///\n    /// assert_eq!(*five, 5);\n    /// # Ok::<(), std::alloc::AllocError>(())\n    /// ```\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    // #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    #[inline]\n    pub fn try_new_uninit() -> Result<Box<mem::MaybeUninit<T>>, AllocError> {\n        Box::try_new_uninit_in(Global)\n    }\n\n    /// Constructs a new `Box` with uninitialized contents, with the memory\n    /// being filled with `0` bytes on the heap\n    ///\n    /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and incorrect usage\n    /// of this method.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(allocator_api, new_uninit)]\n    ///\n    /// let zero = Box::<u32>::try_new_zeroed()?;\n    /// let zero = unsafe { zero.assume_init() };\n    ///\n    /// assert_eq!(*zero, 0);\n    /// # Ok::<(), std::alloc::AllocError>(())\n    /// ```\n    ///\n    /// [zeroed]: mem::MaybeUninit::zeroed\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    // #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    #[inline]\n    pub fn try_new_zeroed() -> Result<Box<mem::MaybeUninit<T>>, AllocError> {\n        Box::try_new_zeroed_in(Global)\n    }\n}\n\nimpl<T, A: Allocator> Box<T, A> {\n    /// Allocates memory in the given allocator then places `x` into it.\n    ///\n    /// This doesn't actually allocate if `T` is zero-sized.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(allocator_api)]\n    ///\n    /// use std::alloc::System;\n    ///\n    /// let five = Box::new_in(5, System);\n    /// ```\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    #[inline]\n    pub fn new_in(x: T, alloc: A) -> Self {\n        let mut boxed = Self::new_uninit_in(alloc);\n        unsafe {\n            boxed.as_mut_ptr().write(x);\n            boxed.assume_init()\n        }\n    }\n\n    /// Allocates memory in the given allocator then places `x` into it,\n    /// returning an error if the allocation fails\n    ///\n    /// This doesn't actually allocate if `T` is zero-sized.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(allocator_api)]\n    ///\n    /// use std::alloc::System;\n    ///\n    /// let five = Box::try_new_in(5, System)?;\n    /// # Ok::<(), std::alloc::AllocError>(())\n    /// ```\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    #[inline]\n    pub fn try_new_in(x: T, alloc: A) -> Result<Self, AllocError> {\n        let mut boxed = Self::try_new_uninit_in(alloc)?;\n        unsafe {\n            boxed.as_mut_ptr().write(x);\n            Ok(boxed.assume_init())\n        }\n    }\n\n    /// Constructs a new box with uninitialized contents in the provided allocator.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(allocator_api, new_uninit)]\n    ///\n    /// use std::alloc::System;\n    ///\n    /// let mut five = Box::<u32, _>::new_uninit_in(System);\n    ///\n    /// let five = unsafe {\n    ///     // Deferred initialization:\n    ///     five.as_mut_ptr().write(5);\n    ///\n    ///     five.assume_init()\n    /// };\n    ///\n    /// assert_eq!(*five, 5)\n    /// ```\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    // #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    pub fn new_uninit_in(alloc: A) -> Box<mem::MaybeUninit<T>, A> {\n        let layout = Layout::new::<mem::MaybeUninit<T>>();\n        // NOTE: Prefer match over unwrap_or_else since closure sometimes not inlineable.\n        // That would make code size bigger.\n        match Box::try_new_uninit_in(alloc) {\n            Ok(m) => m,\n            Err(_) => handle_alloc_error(layout),\n        }\n    }\n\n    /// Constructs a new box with uninitialized contents in the provided allocator,\n    /// returning an error if the allocation fails\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(allocator_api, new_uninit)]\n    ///\n    /// use std::alloc::System;\n    ///\n    /// let mut five = Box::<u32, _>::try_new_uninit_in(System)?;\n    ///\n    /// let five = unsafe {\n    ///     // Deferred initialization:\n    ///     five.as_mut_ptr().write(5);\n    ///\n    ///     five.assume_init()\n    /// };\n    ///\n    /// assert_eq!(*five, 5);\n    /// # Ok::<(), std::alloc::AllocError>(())\n    /// ```\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    // #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    pub fn try_new_uninit_in(alloc: A) -> Result<Box<mem::MaybeUninit<T>, A>, AllocError> {\n        let layout = Layout::new::<mem::MaybeUninit<T>>();\n        let ptr = alloc.allocate(layout)?.cast();\n        unsafe { Ok(Box::from_raw_in(ptr.as_ptr(), alloc)) }\n    }\n\n    /// Constructs a new `Box` with uninitialized contents, with the memory\n    /// being filled with `0` bytes in the provided allocator.\n    ///\n    /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and incorrect usage\n    /// of this method.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(allocator_api, new_uninit)]\n    ///\n    /// use std::alloc::System;\n    ///\n    /// let zero = Box::<u32, _>::new_zeroed_in(System);\n    /// let zero = unsafe { zero.assume_init() };\n    ///\n    /// assert_eq!(*zero, 0)\n    /// ```\n    ///\n    /// [zeroed]: mem::MaybeUninit::zeroed\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    // #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    pub fn new_zeroed_in(alloc: A) -> Box<mem::MaybeUninit<T>, A> {\n        let layout = Layout::new::<mem::MaybeUninit<T>>();\n        // NOTE: Prefer match over unwrap_or_else since closure sometimes not inlineable.\n        // That would make code size bigger.\n        match Box::try_new_zeroed_in(alloc) {\n            Ok(m) => m,\n            Err(_) => handle_alloc_error(layout),\n        }\n    }\n\n    /// Constructs a new `Box` with uninitialized contents, with the memory\n    /// being filled with `0` bytes in the provided allocator,\n    /// returning an error if the allocation fails,\n    ///\n    /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and incorrect usage\n    /// of this method.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(allocator_api, new_uninit)]\n    ///\n    /// use std::alloc::System;\n    ///\n    /// let zero = Box::<u32, _>::try_new_zeroed_in(System)?;\n    /// let zero = unsafe { zero.assume_init() };\n    ///\n    /// assert_eq!(*zero, 0);\n    /// # Ok::<(), std::alloc::AllocError>(())\n    /// ```\n    ///\n    /// [zeroed]: mem::MaybeUninit::zeroed\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    // #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    pub fn try_new_zeroed_in(alloc: A) -> Result<Box<mem::MaybeUninit<T>, A>, AllocError> {\n        let layout = Layout::new::<mem::MaybeUninit<T>>();\n        let ptr = alloc.allocate_zeroed(layout)?.cast();\n        unsafe { Ok(Box::from_raw_in(ptr.as_ptr(), alloc)) }\n    }\n\n    /// Constructs a new `Pin<Box<T, A>>`. If `T` does not implement `Unpin`, then\n    /// `x` will be pinned in memory and unable to be moved.\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    #[inline(always)]\n    pub fn pin_in(x: T, alloc: A) -> Pin<Self>\n    where\n        A: 'static,\n    {\n        Self::new_in(x, alloc).into()\n    }\n\n    /// Converts a `Box<T>` into a `Box<[T]>`\n    ///\n    /// This conversion does not allocate on the heap and happens in place.\n    #[unstable(feature = \"box_into_boxed_slice\", issue = \"71582\")]\n    pub fn into_boxed_slice(boxed: Self) -> Box<[T], A> {\n        let (raw, alloc) = Box::into_raw_with_allocator(boxed);\n        unsafe { Box::from_raw_in(raw as *mut [T; 1], alloc) }\n    }\n\n    /// Consumes the `Box`, returning the wrapped value.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(box_into_inner)]\n    ///\n    /// let c = Box::new(5);\n    ///\n    /// assert_eq!(Box::into_inner(c), 5);\n    /// ```\n    #[unstable(feature = \"box_into_inner\", issue = \"80437\")]\n    #[inline]\n    pub fn into_inner(boxed: Self) -> T {\n        *boxed\n    }\n}\n\nimpl<T> Box<[T]> {\n    /// Constructs a new boxed slice with uninitialized contents.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(new_uninit)]\n    ///\n    /// let mut values = Box::<[u32]>::new_uninit_slice(3);\n    ///\n    /// let values = unsafe {\n    ///     // Deferred initialization:\n    ///     values[0].as_mut_ptr().write(1);\n    ///     values[1].as_mut_ptr().write(2);\n    ///     values[2].as_mut_ptr().write(3);\n    ///\n    ///     values.assume_init()\n    /// };\n    ///\n    /// assert_eq!(*values, [1, 2, 3])\n    /// ```\n    #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    pub fn new_uninit_slice(len: usize) -> Box<[mem::MaybeUninit<T>]> {\n        unsafe { RawVec::with_capacity(len).into_box(len) }\n    }\n\n    /// Constructs a new boxed slice with uninitialized contents, with the memory\n    /// being filled with `0` bytes.\n    ///\n    /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and incorrect usage\n    /// of this method.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(new_uninit)]\n    ///\n    /// let values = Box::<[u32]>::new_zeroed_slice(3);\n    /// let values = unsafe { values.assume_init() };\n    ///\n    /// assert_eq!(*values, [0, 0, 0])\n    /// ```\n    ///\n    /// [zeroed]: mem::MaybeUninit::zeroed\n    #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    pub fn new_zeroed_slice(len: usize) -> Box<[mem::MaybeUninit<T>]> {\n        unsafe { RawVec::with_capacity_zeroed(len).into_box(len) }\n    }\n}\n\nimpl<T, A: Allocator> Box<[T], A> {\n    /// Constructs a new boxed slice with uninitialized contents in the provided allocator.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(allocator_api, new_uninit)]\n    ///\n    /// use std::alloc::System;\n    ///\n    /// let mut values = Box::<[u32], _>::new_uninit_slice_in(3, System);\n    ///\n    /// let values = unsafe {\n    ///     // Deferred initialization:\n    ///     values[0].as_mut_ptr().write(1);\n    ///     values[1].as_mut_ptr().write(2);\n    ///     values[2].as_mut_ptr().write(3);\n    ///\n    ///     values.assume_init()\n    /// };\n    ///\n    /// assert_eq!(*values, [1, 2, 3])\n    /// ```\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    // #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    pub fn new_uninit_slice_in(len: usize, alloc: A) -> Box<[mem::MaybeUninit<T>], A> {\n        unsafe { RawVec::with_capacity_in(len, alloc).into_box(len) }\n    }\n\n    /// Constructs a new boxed slice with uninitialized contents in the provided allocator,\n    /// with the memory being filled with `0` bytes.\n    ///\n    /// See [`MaybeUninit::zeroed`][zeroed] for examples of correct and incorrect usage\n    /// of this method.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(allocator_api, new_uninit)]\n    ///\n    /// use std::alloc::System;\n    ///\n    /// let values = Box::<[u32], _>::new_zeroed_slice_in(3, System);\n    /// let values = unsafe { values.assume_init() };\n    ///\n    /// assert_eq!(*values, [0, 0, 0])\n    /// ```\n    ///\n    /// [zeroed]: mem::MaybeUninit::zeroed\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    // #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    pub fn new_zeroed_slice_in(len: usize, alloc: A) -> Box<[mem::MaybeUninit<T>], A> {\n        unsafe { RawVec::with_capacity_zeroed_in(len, alloc).into_box(len) }\n    }\n}\n\nimpl<T, A: Allocator> Box<mem::MaybeUninit<T>, A> {\n    /// Converts to `Box<T, A>`.\n    ///\n    /// # Safety\n    ///\n    /// As with [`MaybeUninit::assume_init`],\n    /// it is up to the caller to guarantee that the value\n    /// really is in an initialized state.\n    /// Calling this when the content is not yet fully initialized\n    /// causes immediate undefined behavior.\n    ///\n    /// [`MaybeUninit::assume_init`]: mem::MaybeUninit::assume_init\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(new_uninit)]\n    ///\n    /// let mut five = Box::<u32>::new_uninit();\n    ///\n    /// let five: Box<u32> = unsafe {\n    ///     // Deferred initialization:\n    ///     five.as_mut_ptr().write(5);\n    ///\n    ///     five.assume_init()\n    /// };\n    ///\n    /// assert_eq!(*five, 5)\n    /// ```\n    #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    #[inline]\n    pub unsafe fn assume_init(self) -> Box<T, A> {\n        let (raw, alloc) = Box::into_raw_with_allocator(self);\n        unsafe { Box::from_raw_in(raw as *mut T, alloc) }\n    }\n}\n\nimpl<T, A: Allocator> Box<[mem::MaybeUninit<T>], A> {\n    /// Converts to `Box<[T], A>`.\n    ///\n    /// # Safety\n    ///\n    /// As with [`MaybeUninit::assume_init`],\n    /// it is up to the caller to guarantee that the values\n    /// really are in an initialized state.\n    /// Calling this when the content is not yet fully initialized\n    /// causes immediate undefined behavior.\n    ///\n    /// [`MaybeUninit::assume_init`]: mem::MaybeUninit::assume_init\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// #![feature(new_uninit)]\n    ///\n    /// let mut values = Box::<[u32]>::new_uninit_slice(3);\n    ///\n    /// let values = unsafe {\n    ///     // Deferred initialization:\n    ///     values[0].as_mut_ptr().write(1);\n    ///     values[1].as_mut_ptr().write(2);\n    ///     values[2].as_mut_ptr().write(3);\n    ///\n    ///     values.assume_init()\n    /// };\n    ///\n    /// assert_eq!(*values, [1, 2, 3])\n    /// ```\n    #[unstable(feature = \"new_uninit\", issue = \"63291\")]\n    #[inline]\n    pub unsafe fn assume_init(self) -> Box<[T], A> {\n        let (raw, alloc) = Box::into_raw_with_allocator(self);\n        unsafe { Box::from_raw_in(raw as *mut [T], alloc) }\n    }\n}\n\nimpl<T: ?Sized> Box<T> {\n    /// Constructs a box from a raw pointer.\n    ///\n    /// After calling this function, the raw pointer is owned by the\n    /// resulting `Box`. Specifically, the `Box` destructor will call\n    /// the destructor of `T` and free the allocated memory. For this\n    /// to be safe, the memory must have been allocated in accordance\n    /// with the [memory layout] used by `Box` .\n    ///\n    /// # Safety\n    ///\n    /// This function is unsafe because improper use may lead to\n    /// memory problems. For example, a double-free may occur if the\n    /// function is called twice on the same raw pointer.\n    ///\n    /// The safety conditions are described in the [memory layout] section.\n    ///\n    /// # Examples\n    ///\n    /// Recreate a `Box` which was previously converted to a raw pointer\n    /// using [`Box::into_raw`]:\n    /// ```\n    /// let x = Box::new(5);\n    /// let ptr = Box::into_raw(x);\n    /// let x = unsafe { Box::from_raw(ptr) };\n    /// ```\n    /// Manually create a `Box` from scratch by using the global allocator:\n    /// ```\n    /// use std::alloc::{alloc, Layout};\n    ///\n    /// unsafe {\n    ///     let ptr = alloc(Layout::new::<i32>()) as *mut i32;\n    ///     // In general .write is required to avoid attempting to destruct\n    ///     // the (uninitialized) previous contents of `ptr`, though for this\n    ///     // simple example `*ptr = 5` would have worked as well.\n    ///     ptr.write(5);\n    ///     let x = Box::from_raw(ptr);\n    /// }\n    /// ```\n    ///\n    /// [memory layout]: self#memory-layout\n    /// [`Layout`]: crate::Layout\n    #[stable(feature = \"box_raw\", since = \"1.4.0\")]\n    #[inline]\n    pub unsafe fn from_raw(raw: *mut T) -> Self {\n        unsafe { Self::from_raw_in(raw, Global) }\n    }\n}\n\nimpl<T: ?Sized, A: Allocator> Box<T, A> {\n    /// Constructs a box from a raw pointer in the given allocator.\n    ///\n    /// After calling this function, the raw pointer is owned by the\n    /// resulting `Box`. Specifically, the `Box` destructor will call\n    /// the destructor of `T` and free the allocated memory. For this\n    /// to be safe, the memory must have been allocated in accordance\n    /// with the [memory layout] used by `Box` .\n    ///\n    /// # Safety\n    ///\n    /// This function is unsafe because improper use may lead to\n    /// memory problems. For example, a double-free may occur if the\n    /// function is called twice on the same raw pointer.\n    ///\n    ///\n    /// # Examples\n    ///\n    /// Recreate a `Box` which was previously converted to a raw pointer\n    /// using [`Box::into_raw_with_allocator`]:\n    /// ```\n    /// #![feature(allocator_api)]\n    ///\n    /// use std::alloc::System;\n    ///\n    /// let x = Box::new_in(5, System);\n    /// let (ptr, alloc) = Box::into_raw_with_allocator(x);\n    /// let x = unsafe { Box::from_raw_in(ptr, alloc) };\n    /// ```\n    /// Manually create a `Box` from scratch by using the system allocator:\n    /// ```\n    /// #![feature(allocator_api, slice_ptr_get)]\n    ///\n    /// use std::alloc::{Allocator, Layout, System};\n    ///\n    /// unsafe {\n    ///     let ptr = System.allocate(Layout::new::<i32>())?.as_mut_ptr() as *mut i32;\n    ///     // In general .write is required to avoid attempting to destruct\n    ///     // the (uninitialized) previous contents of `ptr`, though for this\n    ///     // simple example `*ptr = 5` would have worked as well.\n    ///     ptr.write(5);\n    ///     let x = Box::from_raw_in(ptr, System);\n    /// }\n    /// # Ok::<(), std::alloc::AllocError>(())\n    /// ```\n    ///\n    /// [memory layout]: self#memory-layout\n    /// [`Layout`]: crate::Layout\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    #[inline]\n    pub unsafe fn from_raw_in(raw: *mut T, alloc: A) -> Self {\n        Box(unsafe { Unique::new_unchecked(raw) }, alloc)\n    }\n\n    /// Consumes the `Box`, returning a wrapped raw pointer.\n    ///\n    /// The pointer will be properly aligned and non-null.\n    ///\n    /// After calling this function, the caller is responsible for the\n    /// memory previously managed by the `Box`. In particular, the\n    /// caller should properly destroy `T` and release the memory, taking\n    /// into account the [memory layout] used by `Box`. The easiest way to\n    /// do this is to convert the raw pointer back into a `Box` with the\n    /// [`Box::from_raw`] function, allowing the `Box` destructor to perform\n    /// the cleanup.\n    ///\n    /// Note: this is an associated function, which means that you have\n    /// to call it as `Box::into_raw(b)` instead of `b.into_raw()`. This\n    /// is so that there is no conflict with a method on the inner type.\n    ///\n    /// # Examples\n    /// Converting the raw pointer back into a `Box` with [`Box::from_raw`]\n    /// for automatic cleanup:\n    /// ```\n    /// let x = Box::new(String::from(\"Hello\"));\n    /// let ptr = Box::into_raw(x);\n    /// let x = unsafe { Box::from_raw(ptr) };\n    /// ```\n    /// Manual cleanup by explicitly running the destructor and deallocating\n    /// the memory:\n    /// ```\n    /// use std::alloc::{dealloc, Layout};\n    /// use std::ptr;\n    ///\n    /// let x = Box::new(String::from(\"Hello\"));\n    /// let p = Box::into_raw(x);\n    /// unsafe {\n    ///     ptr::drop_in_place(p);\n    ///     dealloc(p as *mut u8, Layout::new::<String>());\n    /// }\n    /// ```\n    ///\n    /// [memory layout]: self#memory-layout\n    #[stable(feature = \"box_raw\", since = \"1.4.0\")]\n    #[inline]\n    pub fn into_raw(b: Self) -> *mut T {\n        Self::into_raw_with_allocator(b).0\n    }\n\n    /// Consumes the `Box`, returning a wrapped raw pointer and the allocator.\n    ///\n    /// The pointer will be properly aligned and non-null.\n    ///\n    /// After calling this function, the caller is responsible for the\n    /// memory previously managed by the `Box`. In particular, the\n    /// caller should properly destroy `T` and release the memory, taking\n    /// into account the [memory layout] used by `Box`. The easiest way to\n    /// do this is to convert the raw pointer back into a `Box` with the\n    /// [`Box::from_raw_in`] function, allowing the `Box` destructor to perform\n    /// the cleanup.\n    ///\n    /// Note: this is an associated function, which means that you have\n    /// to call it as `Box::into_raw_with_allocator(b)` instead of `b.into_raw_with_allocator()`. This\n    /// is so that there is no conflict with a method on the inner type.\n    ///\n    /// # Examples\n    /// Converting the raw pointer back into a `Box` with [`Box::from_raw_in`]\n    /// for automatic cleanup:\n    /// ```\n    /// #![feature(allocator_api)]\n    ///\n    /// use std::alloc::System;\n    ///\n    /// let x = Box::new_in(String::from(\"Hello\"), System);\n    /// let (ptr, alloc) = Box::into_raw_with_allocator(x);\n    /// let x = unsafe { Box::from_raw_in(ptr, alloc) };\n    /// ```\n    /// Manual cleanup by explicitly running the destructor and deallocating\n    /// the memory:\n    /// ```\n    /// #![feature(allocator_api)]\n    ///\n    /// use std::alloc::{Allocator, Layout, System};\n    /// use std::ptr::{self, NonNull};\n    ///\n    /// let x = Box::new_in(String::from(\"Hello\"), System);\n    /// let (ptr, alloc) = Box::into_raw_with_allocator(x);\n    /// unsafe {\n    ///     ptr::drop_in_place(ptr);\n    ///     let non_null = NonNull::new_unchecked(ptr);\n    ///     alloc.deallocate(non_null.cast(), Layout::new::<String>());\n    /// }\n    /// ```\n    ///\n    /// [memory layout]: self#memory-layout\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    #[inline]\n    pub fn into_raw_with_allocator(b: Self) -> (*mut T, A) {\n        let (leaked, alloc) = Box::into_unique(b);\n        (leaked.as_ptr(), alloc)\n    }\n\n    #[unstable(\n        feature = \"ptr_internals\",\n        issue = \"none\",\n        reason = \"use `Box::leak(b).into()` or `Unique::from(Box::leak(b))` instead\"\n    )]\n    #[inline]\n    #[doc(hidden)]\n    pub fn into_unique(b: Self) -> (Unique<T>, A) {\n        // Box is recognized as a \"unique pointer\" by Stacked Borrows, but internally it is a\n        // raw pointer for the type system. Turning it directly into a raw pointer would not be\n        // recognized as \"releasing\" the unique pointer to permit aliased raw accesses,\n        // so all raw pointer methods have to go through `Box::leak`. Turning *that* to a raw pointer\n        // behaves correctly.\n        let alloc = unsafe { ptr::read(&b.1) };\n        (Unique::from(Box::leak(b)), alloc)\n    }\n\n    /// Returns a reference to the underlying allocator.\n    ///\n    /// Note: this is an associated function, which means that you have\n    /// to call it as `Box::allocator(&b)` instead of `b.allocator()`. This\n    /// is so that there is no conflict with a method on the inner type.\n    #[unstable(feature = \"allocator_api\", issue = \"32838\")]\n    #[inline]\n    pub fn allocator(b: &Self) -> &A {\n        &b.1\n    }\n\n    /// Consumes and leaks the `Box`, returning a mutable reference,\n    /// `&'a mut T`. Note that the type `T` must outlive the chosen lifetime\n    /// `'a`. If the type has only static references, or none at all, then this\n    /// may be chosen to be `'static`.\n    ///\n    /// This function is mainly useful for data that lives for the remainder of\n    /// the program's life. Dropping the returned reference will cause a memory\n    /// leak. If this is not acceptable, the reference should first be wrapped\n    /// with the [`Box::from_raw`] function producing a `Box`. This `Box` can\n    /// then be dropped which will properly destroy `T` and release the\n    /// allocated memory.\n    ///\n    /// Note: this is an associated function, which means that you have\n    /// to call it as `Box::leak(b)` instead of `b.leak()`. This\n    /// is so that there is no conflict with a method on the inner type.\n    ///\n    /// # Examples\n    ///\n    /// Simple usage:\n    ///\n    /// ```\n    /// let x = Box::new(41);\n    /// let static_ref: &'static mut usize = Box::leak(x);\n    /// *static_ref += 1;\n    /// assert_eq!(*static_ref, 42);\n    /// ```\n    ///\n    /// Unsized data:\n    ///\n    /// ```\n    /// let x = vec![1, 2, 3].into_boxed_slice();\n    /// let static_ref = Box::leak(x);\n    /// static_ref[0] = 4;\n    /// assert_eq!(*static_ref, [4, 2, 3]);\n    /// ```\n    #[stable(feature = \"box_leak\", since = \"1.26.0\")]\n    #[inline]\n    pub fn leak<'a>(b: Self) -> &'a mut T\n    where\n        A: 'a,\n    {\n        unsafe { &mut *mem::ManuallyDrop::new(b).0.as_ptr() }\n    }\n\n    /// Converts a `Box<T>` into a `Pin<Box<T>>`\n    ///\n    /// This conversion does not allocate on the heap and happens in place.\n    ///\n    /// This is also available via [`From`].\n    #[unstable(feature = \"box_into_pin\", issue = \"62370\")]\n    pub fn into_pin(boxed: Self) -> Pin<Self>\n    where\n        A: 'static,\n    {\n        // It's not possible to move or replace the insides of a `Pin<Box<T>>`\n        // when `T: !Unpin`,  so it's safe to pin it directly without any\n        // additional requirements.\n        unsafe { Pin::new_unchecked(boxed) }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nunsafe impl<#[may_dangle] T: ?Sized, A: Allocator> Drop for Box<T, A> {\n    fn drop(&mut self) {\n        // FIXME: Do nothing, drop is currently performed by compiler.\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Default> Default for Box<T> {\n    /// Creates a `Box<T>`, with the `Default` value for T.\n    fn default() -> Self {\n        box T::default()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T> Default for Box<[T]> {\n    fn default() -> Self {\n        Box::<[T; 0]>::new([])\n    }\n}\n\n#[stable(feature = \"default_box_extra\", since = \"1.17.0\")]\nimpl Default for Box<str> {\n    fn default() -> Self {\n        unsafe { from_boxed_utf8_unchecked(Default::default()) }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: Clone, A: Allocator + Clone> Clone for Box<T, A> {\n    /// Returns a new box with a `clone()` of this box's contents.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let x = Box::new(5);\n    /// let y = x.clone();\n    ///\n    /// // The value is the same\n    /// assert_eq!(x, y);\n    ///\n    /// // But they are unique objects\n    /// assert_ne!(&*x as *const i32, &*y as *const i32);\n    /// ```\n    #[inline]\n    fn clone(&self) -> Self {\n        // Pre-allocate memory to allow writing the cloned value directly.\n        let mut boxed = Self::new_uninit_in(self.1.clone());\n        unsafe {\n            (**self).write_clone_into_raw(boxed.as_mut_ptr());\n            boxed.assume_init()\n        }\n    }\n\n    /// Copies `source`'s contents into `self` without creating a new allocation.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// let x = Box::new(5);\n    /// let mut y = Box::new(10);\n    /// let yp: *const i32 = &*y;\n    ///\n    /// y.clone_from(&x);\n    ///\n    /// // The value is the same\n    /// assert_eq!(x, y);\n    ///\n    /// // And no allocation occurred\n    /// assert_eq!(yp, &*y);\n    /// ```\n    #[inline]\n    fn clone_from(&mut self, source: &Self) {\n        (**self).clone_from(&(**source));\n    }\n}\n\n#[stable(feature = \"box_slice_clone\", since = \"1.3.0\")]\nimpl Clone for Box<str> {\n    fn clone(&self) -> Self {\n        // this makes a copy of the data\n        let buf: Box<[u8]> = self.as_bytes().into();\n        unsafe { from_boxed_utf8_unchecked(buf) }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + PartialEq, A: Allocator> PartialEq for Box<T, A> {\n    #[inline]\n    fn eq(&self, other: &Self) -> bool {\n        PartialEq::eq(&**self, &**other)\n    }\n    #[inline]\n    fn ne(&self, other: &Self) -> bool {\n        PartialEq::ne(&**self, &**other)\n    }\n}\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + PartialOrd, A: Allocator> PartialOrd for Box<T, A> {\n    #[inline]\n    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {\n        PartialOrd::partial_cmp(&**self, &**other)\n    }\n    #[inline]\n    fn lt(&self, other: &Self) -> bool {\n        PartialOrd::lt(&**self, &**other)\n    }\n    #[inline]\n    fn le(&self, other: &Self) -> bool {\n        PartialOrd::le(&**self, &**other)\n    }\n    #[inline]\n    fn ge(&self, other: &Self) -> bool {\n        PartialOrd::ge(&**self, &**other)\n    }\n    #[inline]\n    fn gt(&self, other: &Self) -> bool {\n        PartialOrd::gt(&**self, &**other)\n    }\n}\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + Ord, A: Allocator> Ord for Box<T, A> {\n    #[inline]\n    fn cmp(&self, other: &Self) -> Ordering {\n        Ord::cmp(&**self, &**other)\n    }\n}\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + Eq, A: Allocator> Eq for Box<T, A> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized + Hash, A: Allocator> Hash for Box<T, A> {\n    fn hash<H: Hasher>(&self, state: &mut H) {\n        (**self).hash(state);\n    }\n}\n\n#[stable(feature = \"indirect_hasher_impl\", since = \"1.22.0\")]\nimpl<T: ?Sized + Hasher, A: Allocator> Hasher for Box<T, A> {\n    fn finish(&self) -> u64 {\n        (**self).finish()\n    }\n    fn write(&mut self, bytes: &[u8]) {\n        (**self).write(bytes)\n    }\n    fn write_u8(&mut self, i: u8) {\n        (**self).write_u8(i)\n    }\n    fn write_u16(&mut self, i: u16) {\n        (**self).write_u16(i)\n    }\n    fn write_u32(&mut self, i: u32) {\n        (**self).write_u32(i)\n    }\n    fn write_u64(&mut self, i: u64) {\n        (**self).write_u64(i)\n    }\n    fn write_u128(&mut self, i: u128) {\n        (**self).write_u128(i)\n    }\n    fn write_usize(&mut self, i: usize) {\n        (**self).write_usize(i)\n    }\n    fn write_i8(&mut self, i: i8) {\n        (**self).write_i8(i)\n    }\n    fn write_i16(&mut self, i: i16) {\n        (**self).write_i16(i)\n    }\n    fn write_i32(&mut self, i: i32) {\n        (**self).write_i32(i)\n    }\n    fn write_i64(&mut self, i: i64) {\n        (**self).write_i64(i)\n    }\n    fn write_i128(&mut self, i: i128) {\n        (**self).write_i128(i)\n    }\n    fn write_isize(&mut self, i: isize) {\n        (**self).write_isize(i)\n    }\n}\n\n#[stable(feature = \"from_for_ptrs\", since = \"1.6.0\")]\nimpl<T> From<T> for Box<T> {\n    /// Converts a generic type `T` into a `Box<T>`\n    ///\n    /// The conversion allocates on the heap and moves `t`\n    /// from the stack into it.\n    ///\n    /// # Examples\n    /// ```rust\n    /// let x = 5;\n    /// let boxed = Box::new(5);\n    ///\n    /// assert_eq!(Box::from(x), boxed);\n    /// ```\n    fn from(t: T) -> Self {\n        Box::new(t)\n    }\n}\n\n#[stable(feature = \"pin\", since = \"1.33.0\")]\nimpl<T: ?Sized, A: Allocator> From<Box<T, A>> for Pin<Box<T, A>>\nwhere\n    A: 'static,\n{\n    /// Converts a `Box<T>` into a `Pin<Box<T>>`\n    ///\n    /// This conversion does not allocate on the heap and happens in place.\n    fn from(boxed: Box<T, A>) -> Self {\n        Box::into_pin(boxed)\n    }\n}\n\n#[stable(feature = \"box_from_slice\", since = \"1.17.0\")]\nimpl<T: Copy> From<&[T]> for Box<[T]> {\n    /// Converts a `&[T]` into a `Box<[T]>`\n    ///\n    /// This conversion allocates on the heap\n    /// and performs a copy of `slice`.\n    ///\n    /// # Examples\n    /// ```rust\n    /// // create a &[u8] which will be used to create a Box<[u8]>\n    /// let slice: &[u8] = &[104, 101, 108, 108, 111];\n    /// let boxed_slice: Box<[u8]> = Box::from(slice);\n    ///\n    /// println!(\"{:?}\", boxed_slice);\n    /// ```\n    fn from(slice: &[T]) -> Box<[T]> {\n        let len = slice.len();\n        let buf = RawVec::with_capacity(len);\n        unsafe {\n            ptr::copy_nonoverlapping(slice.as_ptr(), buf.ptr(), len);\n            buf.into_box(slice.len()).assume_init()\n        }\n    }\n}\n\n#[stable(feature = \"box_from_cow\", since = \"1.45.0\")]\nimpl<T: Copy> From<Cow<'_, [T]>> for Box<[T]> {\n    #[inline]\n    fn from(cow: Cow<'_, [T]>) -> Box<[T]> {\n        match cow {\n            Cow::Borrowed(slice) => Box::from(slice),\n            Cow::Owned(slice) => Box::from(slice),\n        }\n    }\n}\n\n#[stable(feature = \"box_from_slice\", since = \"1.17.0\")]\nimpl From<&str> for Box<str> {\n    /// Converts a `&str` into a `Box<str>`\n    ///\n    /// This conversion allocates on the heap\n    /// and performs a copy of `s`.\n    ///\n    /// # Examples\n    /// ```rust\n    /// let boxed: Box<str> = Box::from(\"hello\");\n    /// println!(\"{}\", boxed);\n    /// ```\n    #[inline]\n    fn from(s: &str) -> Box<str> {\n        unsafe { from_boxed_utf8_unchecked(Box::from(s.as_bytes())) }\n    }\n}\n\n#[stable(feature = \"box_from_cow\", since = \"1.45.0\")]\nimpl From<Cow<'_, str>> for Box<str> {\n    #[inline]\n    fn from(cow: Cow<'_, str>) -> Box<str> {\n        match cow {\n            Cow::Borrowed(s) => Box::from(s),\n            Cow::Owned(s) => Box::from(s),\n        }\n    }\n}\n\n#[stable(feature = \"boxed_str_conv\", since = \"1.19.0\")]\nimpl<A: Allocator> From<Box<str, A>> for Box<[u8], A> {\n    /// Converts a `Box<str>` into a `Box<[u8]>`\n    ///\n    /// This conversion does not allocate on the heap and happens in place.\n    ///\n    /// # Examples\n    /// ```rust\n    /// // create a Box<str> which will be used to create a Box<[u8]>\n    /// let boxed: Box<str> = Box::from(\"hello\");\n    /// let boxed_str: Box<[u8]> = Box::from(boxed);\n    ///\n    /// // create a &[u8] which will be used to create a Box<[u8]>\n    /// let slice: &[u8] = &[104, 101, 108, 108, 111];\n    /// let boxed_slice = Box::from(slice);\n    ///\n    /// assert_eq!(boxed_slice, boxed_str);\n    /// ```\n    #[inline]\n    fn from(s: Box<str, A>) -> Self {\n        let (raw, alloc) = Box::into_raw_with_allocator(s);\n        unsafe { Box::from_raw_in(raw as *mut [u8], alloc) }\n    }\n}\n\n#[stable(feature = \"box_from_array\", since = \"1.45.0\")]\nimpl<T, const N: usize> From<[T; N]> for Box<[T]> {\n    /// Converts a `[T; N]` into a `Box<[T]>`\n    ///\n    /// This conversion moves the array to newly heap-allocated memory.\n    ///\n    /// # Examples\n    /// ```rust\n    /// let boxed: Box<[u8]> = Box::from([4, 2]);\n    /// println!(\"{:?}\", boxed);\n    /// ```\n    fn from(array: [T; N]) -> Box<[T]> {\n        box array\n    }\n}\n\n#[stable(feature = \"boxed_slice_try_from\", since = \"1.43.0\")]\nimpl<T, const N: usize> TryFrom<Box<[T]>> for Box<[T; N]> {\n    type Error = Box<[T]>;\n\n    fn try_from(boxed_slice: Box<[T]>) -> Result<Self, Self::Error> {\n        if boxed_slice.len() == N {\n            Ok(unsafe { Box::from_raw(Box::into_raw(boxed_slice) as *mut [T; N]) })\n        } else {\n            Err(boxed_slice)\n        }\n    }\n}\n\nimpl<A: Allocator> Box<dyn Any, A> {\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    /// Attempt to downcast the box to a concrete type.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::any::Any;\n    ///\n    /// fn print_if_string(value: Box<dyn Any>) {\n    ///     if let Ok(string) = value.downcast::<String>() {\n    ///         println!(\"String ({}): {}\", string.len(), string);\n    ///     }\n    /// }\n    ///\n    /// let my_string = \"Hello World\".to_string();\n    /// print_if_string(Box::new(my_string));\n    /// print_if_string(Box::new(0i8));\n    /// ```\n    pub fn downcast<T: Any>(self) -> Result<Box<T, A>, Self> {\n        if self.is::<T>() {\n            unsafe {\n                let (raw, alloc): (*mut dyn Any, _) = Box::into_raw_with_allocator(self);\n                Ok(Box::from_raw_in(raw as *mut T, alloc))\n            }\n        } else {\n            Err(self)\n        }\n    }\n}\n\nimpl<A: Allocator> Box<dyn Any + Send, A> {\n    #[inline]\n    #[stable(feature = \"rust1\", since = \"1.0.0\")]\n    /// Attempt to downcast the box to a concrete type.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::any::Any;\n    ///\n    /// fn print_if_string(value: Box<dyn Any + Send>) {\n    ///     if let Ok(string) = value.downcast::<String>() {\n    ///         println!(\"String ({}): {}\", string.len(), string);\n    ///     }\n    /// }\n    ///\n    /// let my_string = \"Hello World\".to_string();\n    /// print_if_string(Box::new(my_string));\n    /// print_if_string(Box::new(0i8));\n    /// ```\n    pub fn downcast<T: Any>(self) -> Result<Box<T, A>, Self> {\n        if self.is::<T>() {\n            unsafe {\n                let (raw, alloc): (*mut (dyn Any + Send), _) = Box::into_raw_with_allocator(self);\n                Ok(Box::from_raw_in(raw as *mut T, alloc))\n            }\n        } else {\n            Err(self)\n        }\n    }\n}\n\nimpl<A: Allocator> Box<dyn Any + Send + Sync, A> {\n    #[inline]\n    #[stable(feature = \"box_send_sync_any_downcast\", since = \"1.51.0\")]\n    /// Attempt to downcast the box to a concrete type.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use std::any::Any;\n    ///\n    /// fn print_if_string(value: Box<dyn Any + Send + Sync>) {\n    ///     if let Ok(string) = value.downcast::<String>() {\n    ///         println!(\"String ({}): {}\", string.len(), string);\n    ///     }\n    /// }\n    ///\n    /// let my_string = \"Hello World\".to_string();\n    /// print_if_string(Box::new(my_string));\n    /// print_if_string(Box::new(0i8));\n    /// ```\n    pub fn downcast<T: Any>(self) -> Result<Box<T, A>, Self> {\n        if self.is::<T>() {\n            unsafe {\n                let (raw, alloc): (*mut (dyn Any + Send + Sync), _) =\n                    Box::into_raw_with_allocator(self);\n                Ok(Box::from_raw_in(raw as *mut T, alloc))\n            }\n        } else {\n            Err(self)\n        }\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: fmt::Display + ?Sized, A: Allocator> fmt::Display for Box<T, A> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        fmt::Display::fmt(&**self, f)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: fmt::Debug + ?Sized, A: Allocator> fmt::Debug for Box<T, A> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        fmt::Debug::fmt(&**self, f)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized, A: Allocator> fmt::Pointer for Box<T, A> {\n    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n        // It's not possible to extract the inner Uniq directly from the Box,\n        // instead we cast it to a *const which aliases the Unique\n        let ptr: *const T = &**self;\n        fmt::Pointer::fmt(&ptr, f)\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized, A: Allocator> Deref for Box<T, A> {\n    type Target = T;\n\n    fn deref(&self) -> &T {\n        &**self\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<T: ?Sized, A: Allocator> DerefMut for Box<T, A> {\n    fn deref_mut(&mut self) -> &mut T {\n        &mut **self\n    }\n}\n\n#[unstable(feature = \"receiver_trait\", issue = \"none\")]\nimpl<T: ?Sized, A: Allocator> Receiver for Box<T, A> {}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<I: Iterator + ?Sized, A: Allocator> Iterator for Box<I, A> {\n    type Item = I::Item;\n    fn next(&mut self) -> Option<I::Item> {\n        (**self).next()\n    }\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        (**self).size_hint()\n    }\n    fn nth(&mut self, n: usize) -> Option<I::Item> {\n        (**self).nth(n)\n    }\n    fn last(self) -> Option<I::Item> {\n        BoxIter::last(self)\n    }\n}\n\ntrait BoxIter {\n    type Item;\n    fn last(self) -> Option<Self::Item>;\n}\n\nimpl<I: Iterator + ?Sized, A: Allocator> BoxIter for Box<I, A> {\n    type Item = I::Item;\n    default fn last(self) -> Option<I::Item> {\n        #[inline]\n        fn some<T>(_: Option<T>, x: T) -> Option<T> {\n            Some(x)\n        }\n\n        self.fold(None, some)\n    }\n}\n\n/// Specialization for sized `I`s that uses `I`s implementation of `last()`\n/// instead of the default.\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<I: Iterator, A: Allocator> BoxIter for Box<I, A> {\n    fn last(self) -> Option<I::Item> {\n        (*self).last()\n    }\n}\n\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<I: DoubleEndedIterator + ?Sized, A: Allocator> DoubleEndedIterator for Box<I, A> {\n    fn next_back(&mut self) -> Option<I::Item> {\n        (**self).next_back()\n    }\n    fn nth_back(&mut self, n: usize) -> Option<I::Item> {\n        (**self).nth_back(n)\n    }\n}\n#[stable(feature = \"rust1\", since = \"1.0.0\")]\nimpl<I: ExactSizeIterator + ?Sized, A: Allocator> ExactSizeIterator for Box<I, A> {\n    fn len(&self) -> usize {\n        (**self).len()\n    }\n    fn is_empty(&self) -> bool {\n        (**self).is_empty()\n    }\n}\n\n#[stable(feature = \"fused\", since = \"1.26.0\")]\nimpl<I: FusedIterator + ?Sized, A: Allocator> FusedIterator for Box<I, A> {}\n\n#[stable(feature = \"boxed_closure_impls\", since = \"1.35.0\")]\nimpl<Args, F: FnOnce<Args> + ?Sized, A: Allocator> FnOnce<Args> for Box<F, A> {\n    type Output = <F as FnOnce<Args>>::Output;\n\n    extern \"rust-call\" fn call_once(self, args: Args) -> Self::Output {\n        <F as FnOnce<Args>>::call_once(*self, args)\n    }\n}\n\n#[stable(feature = \"boxed_closure_impls\", since = \"1.35.0\")]\nimpl<Args, F: FnMut<Args> + ?Sized, A: Allocator> FnMut<Args> for Box<F, A> {\n    extern \"rust-call\" fn call_mut(&mut self, args: Args) -> Self::Output {\n        <F as FnMut<Args>>::call_mut(self, args)\n    }\n}\n\n#[stable(feature = \"boxed_closure_impls\", since = \"1.35.0\")]\nimpl<Args, F: Fn<Args> + ?Sized, A: Allocator> Fn<Args> for Box<F, A> {\n    extern \"rust-call\" fn call(&self, args: Args) -> Self::Output {\n        <F as Fn<Args>>::call(self, args)\n    }\n}\n\n#[unstable(feature = \"coerce_unsized\", issue = \"27732\")]\nimpl<T: ?Sized + Unsize<U>, U: ?Sized, A: Allocator> CoerceUnsized<Box<U, A>> for Box<T, A> {}\n\n#[unstable(feature = \"dispatch_from_dyn\", issue = \"none\")]\nimpl<T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<Box<U>> for Box<T, Global> {}\n\n#[stable(feature = \"boxed_slice_from_iter\", since = \"1.32.0\")]\nimpl<I> FromIterator<I> for Box<[I]> {\n    fn from_iter<T: IntoIterator<Item = I>>(iter: T) -> Self {\n        iter.into_iter().collect::<Vec<_>>().into_boxed_slice()\n    }\n}\n\n#[stable(feature = \"box_slice_clone\", since = \"1.3.0\")]\nimpl<T: Clone, A: Allocator + Clone> Clone for Box<[T], A> {\n    fn clone(&self) -> Self {\n        let alloc = Box::allocator(self).clone();\n        self.to_vec_in(alloc).into_boxed_slice()\n    }\n\n    fn clone_from(&mut self, other: &Self) {\n        if self.len() == other.len() {\n            self.clone_from_slice(&other);\n        } else {\n            *self = other.clone();\n        }\n    }\n}\n\n#[stable(feature = \"box_borrow\", since = \"1.1.0\")]\nimpl<T: ?Sized, A: Allocator> borrow::Borrow<T> for Box<T, A> {\n    fn borrow(&self) -> &T {\n        &**self\n    }\n}\n\n#[stable(feature = \"box_borrow\", since = \"1.1.0\")]\nimpl<T: ?Sized, A: Allocator> borrow::BorrowMut<T> for Box<T, A> {\n    fn borrow_mut(&mut self) -> &mut T {\n        &mut **self\n    }\n}\n\n#[stable(since = \"1.5.0\", feature = \"smart_ptr_as_ref\")]\nimpl<T: ?Sized, A: Allocator> AsRef<T> for Box<T, A> {\n    fn as_ref(&self) -> &T {\n        &**self\n    }\n}\n\n#[stable(since = \"1.5.0\", feature = \"smart_ptr_as_ref\")]\nimpl<T: ?Sized, A: Allocator> AsMut<T> for Box<T, A> {\n    fn as_mut(&mut self) -> &mut T {\n        &mut **self\n    }\n}\n\n/* Nota bene\n *\n *  We could have chosen not to add this impl, and instead have written a\n *  function of Pin<Box<T>> to Pin<T>. Such a function would not be sound,\n *  because Box<T> implements Unpin even when T does not, as a result of\n *  this impl.\n *\n *  We chose this API instead of the alternative for a few reasons:\n *      - Logically, it is helpful to understand pinning in regard to the\n *        memory region being pointed to. For this reason none of the\n *        standard library pointer types support projecting through a pin\n *        (Box<T> is the only pointer type in std for which this would be\n *        safe.)\n *      - It is in practice very useful to have Box<T> be unconditionally\n *        Unpin because of trait objects, for which the structural auto\n *        trait functionality does not apply (e.g., Box<dyn Foo> would\n *        otherwise not be Unpin).\n *\n *  Another type with the same semantics as Box but only a conditional\n *  implementation of `Unpin` (where `T: Unpin`) would be valid/safe, and\n *  could have a method to project a Pin<T> from it.\n */\n#[stable(feature = \"pin\", since = \"1.33.0\")]\nimpl<T: ?Sized, A: Allocator> Unpin for Box<T, A> where A: 'static {}\n\n#[unstable(feature = \"generator_trait\", issue = \"43122\")]\nimpl<G: ?Sized + Generator<R> + Unpin, R, A: Allocator> Generator<R> for Box<G, A>\nwhere\n    A: 'static,\n{\n    type Yield = G::Yield;\n    type Return = G::Return;\n\n    fn resume(mut self: Pin<&mut Self>, arg: R) -> GeneratorState<Self::Yield, Self::Return> {\n        G::resume(Pin::new(&mut *self), arg)\n    }\n}\n\n#[unstable(feature = \"generator_trait\", issue = \"43122\")]\nimpl<G: ?Sized + Generator<R>, R, A: Allocator> Generator<R> for Pin<Box<G, A>>\nwhere\n    A: 'static,\n{\n    type Yield = G::Yield;\n    type Return = G::Return;\n\n    fn resume(mut self: Pin<&mut Self>, arg: R) -> GeneratorState<Self::Yield, Self::Return> {\n        G::resume((*self).as_mut(), arg)\n    }\n}\n\n#[stable(feature = \"futures_api\", since = \"1.36.0\")]\nimpl<F: ?Sized + Future + Unpin, A: Allocator> Future for Box<F, A>\nwhere\n    A: 'static,\n{\n    type Output = F::Output;\n\n    fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {\n        F::poll(Pin::new(&mut *self), cx)\n    }\n}\n\n#[unstable(feature = \"async_stream\", issue = \"79024\")]\nimpl<S: ?Sized + Stream + Unpin> Stream for Box<S> {\n    type Item = S::Item;\n\n    fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {\n        Pin::new(&mut **self).poll_next(cx)\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        (**self).size_hint()\n    }\n}\nuse super::*;\nuse std::cell::Cell;\n\n#[test]\nfn allocator_param() {\n    use crate::alloc::AllocError;\n\n    // Writing a test of integration between third-party\n    // allocators and `RawVec` is a little tricky because the `RawVec`\n    // API does not expose fallible allocation methods, so we\n    // cannot check what happens when allocator is exhausted\n    // (beyond detecting a panic).\n    //\n    // Instead, this just checks that the `RawVec` methods do at\n    // least go through the Allocator API when it reserves\n    // storage.\n\n    // A dumb allocator that consumes a fixed amount of fuel\n    // before allocation attempts start failing.\n    struct BoundedAlloc {\n        fuel: Cell<usize>,\n    }\n    unsafe impl Allocator for BoundedAlloc {\n        fn allocate(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError> {\n            let size = layout.size();\n            if size > self.fuel.get() {\n                return Err(AllocError);\n            }\n            match Global.allocate(layout) {\n                ok @ Ok(_) => {\n                    self.fuel.set(self.fuel.get() - size);\n                    ok\n                }\n                err @ Err(_) => err,\n            }\n        }\n        unsafe fn deallocate(&self, ptr: NonNull<u8>, layout: Layout) {\n            unsafe { Global.deallocate(ptr, layout) }\n        }\n    }\n\n    let a = BoundedAlloc { fuel: Cell::new(500) };\n    let mut v: RawVec<u8, _> = RawVec::with_capacity_in(50, a);\n    assert_eq!(v.alloc.fuel.get(), 450);\n    v.reserve(50, 150); // (causes a realloc, thus using 50 + 150 = 200 units of fuel)\n    assert_eq!(v.alloc.fuel.get(), 250);\n}\n\n#[test]\nfn reserve_does_not_overallocate() {\n    {\n        let mut v: RawVec<u32> = RawVec::new();\n        // First, `reserve` allocates like `reserve_exact`.\n        v.reserve(0, 9);\n        assert_eq!(9, v.capacity());\n    }\n\n    {\n        let mut v: RawVec<u32> = RawVec::new();\n        v.reserve(0, 7);\n        assert_eq!(7, v.capacity());\n        // 97 is more than double of 7, so `reserve` should work\n        // like `reserve_exact`.\n        v.reserve(7, 90);\n        assert_eq!(97, v.capacity());\n    }\n\n    {\n        let mut v: RawVec<u32> = RawVec::new();\n        v.reserve(0, 12);\n        assert_eq!(12, v.capacity());\n        v.reserve(12, 3);\n        // 3 is less than half of 12, so `reserve` must grow\n        // exponentially. At the time of writing this test grow\n        // factor is 2, so new capacity is 24, however, grow factor\n        // of 1.5 is OK too. Hence `>= 18` in assert.\n        assert!(v.capacity() >= 12 + 12 / 2);\n    }\n}\n//! Test for `boxed` mod.\n\nuse core::any::Any;\nuse core::clone::Clone;\nuse core::convert::TryInto;\nuse core::ops::Deref;\nuse core::result::Result::{Err, Ok};\n\nuse std::boxed::Box;\n\n#[test]\nfn test_owned_clone() {\n    let a = Box::new(5);\n    let b: Box<i32> = a.clone();\n    assert!(a == b);\n}\n\n#[derive(PartialEq, Eq)]\nstruct Test;\n\n#[test]\nfn any_move() {\n    let a = Box::new(8) as Box<dyn Any>;\n    let b = Box::new(Test) as Box<dyn Any>;\n\n    match a.downcast::<i32>() {\n        Ok(a) => {\n            assert!(a == Box::new(8));\n        }\n        Err(..) => panic!(),\n    }\n    match b.downcast::<Test>() {\n        Ok(a) => {\n            assert!(a == Box::new(Test));\n        }\n        Err(..) => panic!(),\n    }\n\n    let a = Box::new(8) as Box<dyn Any>;\n    let b = Box::new(Test) as Box<dyn Any>;\n\n    assert!(a.downcast::<Box<Test>>().is_err());\n    assert!(b.downcast::<Box<i32>>().is_err());\n}\n\n#[test]\nfn test_show() {\n    let a = Box::new(8) as Box<dyn Any>;\n    let b = Box::new(Test) as Box<dyn Any>;\n    let a_str = format!(\"{:?}\", a);\n    let b_str = format!(\"{:?}\", b);\n    assert_eq!(a_str, \"Any { .. }\");\n    assert_eq!(b_str, \"Any { .. }\");\n\n    static EIGHT: usize = 8;\n    static TEST: Test = Test;\n    let a = &EIGHT as &dyn Any;\n    let b = &TEST as &dyn Any;\n    let s = format!(\"{:?}\", a);\n    assert_eq!(s, \"Any { .. }\");\n    let s = format!(\"{:?}\", b);\n    assert_eq!(s, \"Any { .. }\");\n}\n\n#[test]\nfn deref() {\n    fn homura<T: Deref<Target = i32>>(_: T) {}\n    homura(Box::new(765));\n}\n\n#[test]\nfn raw_sized() {\n    let x = Box::new(17);\n    let p = Box::into_raw(x);\n    unsafe {\n        assert_eq!(17, *p);\n        *p = 19;\n        let y = Box::from_raw(p);\n        assert_eq!(19, *y);\n    }\n}\n\n#[test]\nfn raw_trait() {\n    trait Foo {\n        fn get(&self) -> u32;\n        fn set(&mut self, value: u32);\n    }\n\n    struct Bar(u32);\n\n    impl Foo for Bar {\n        fn get(&self) -> u32 {\n            self.0\n        }\n\n        fn set(&mut self, value: u32) {\n            self.0 = value;\n        }\n    }\n\n    let x: Box<dyn Foo> = Box::new(Bar(17));\n    let p = Box::into_raw(x);\n    unsafe {\n        assert_eq!(17, (*p).get());\n        (*p).set(19);\n        let y: Box<dyn Foo> = Box::from_raw(p);\n        assert_eq!(19, y.get());\n    }\n}\n\n#[test]\nfn f64_slice() {\n    let slice: &[f64] = &[-1.0, 0.0, 1.0, f64::INFINITY];\n    let boxed: Box<[f64]> = Box::from(slice);\n    assert_eq!(&*boxed, slice)\n}\n\n#[test]\nfn i64_slice() {\n    let slice: &[i64] = &[i64::MIN, -2, -1, 0, 1, 2, i64::MAX];\n    let boxed: Box<[i64]> = Box::from(slice);\n    assert_eq!(&*boxed, slice)\n}\n\n#[test]\nfn str_slice() {\n    let s = \"Hello, world!\";\n    let boxed: Box<str> = Box::from(s);\n    assert_eq!(&*boxed, s)\n}\n\n#[test]\nfn boxed_slice_from_iter() {\n    let iter = 0..100;\n    let boxed: Box<[u32]> = iter.collect();\n    assert_eq!(boxed.len(), 100);\n    assert_eq!(boxed[7], 7);\n}\n\n#[test]\nfn test_array_from_slice() {\n    let v = vec![1, 2, 3];\n    let r: Box<[u32]> = v.into_boxed_slice();\n\n    let a: Result<Box<[u32; 3]>, _> = r.clone().try_into();\n    assert!(a.is_ok());\n\n    let a: Result<Box<[u32; 2]>, _> = r.clone().try_into();\n    assert!(a.is_err());\n}\n"
  },
  {
    "path": "benchmarks/haystacks/opensubtitles/README.md",
    "content": "These were downloaded and derived from the Open Subtitles data set:\nhttps://opus.nlpl.eu/OpenSubtitles-v2018.php\n\nThe specific way in which they were modified has been lost to time, but it's\nlikely they were just a simple truncation based on target file sizes for\nvarious benchmarks.\n\nThe main reason why we have them is that it gives us a way to test similar\ninputs on non-ASCII text. Normally this wouldn't matter for a substring search\nimplementation, but because of the heuristics used to pick a priori determined\n\"rare bytes\" to base a prefilter on, it's possible for this heuristic to do\nmore poorly on non-ASCII text than one might expect.\n"
  },
  {
    "path": "benchmarks/haystacks/opensubtitles/en-huge.txt",
    "content": "Now you can tell 'em.\nWhat for are you mixing in?\nMaybe I don't like to see kids get hurt.\nBreak any bones, son?\nHe's got a knife behind his collar!\n- There's a stirrup.\nYou want a lift?\n- No.\n- Why not?\n- I'm beholden to you, mister.\nCouldn't we just leave it that way?\n- Morning.\n- Morning.\n- Put him up?\n- For how long?\n- I wouldn't know.\n- It'll be two bits for oats.\n- Ain't I seen you before?\n- Depends on where you've been.\n- I follow the railroad, mostly.\n- Could be you've seen me.\n- It'll be four bits if he stays the night.\n- Fair enough.\nMorning.\nDid a man ride in today - tall, sort of heavyset?\n- You mean him, Mr Renner?\n- Not him.\nThis one had a scar.\nAlong his cheek?\nNo, sir.\nI don't see no man with a scar.\nI guess maybe I can have some apple pie and coffee.\nI guess you could have eggs with bacon if you wanted eggs with bacon.\n- Hello, Charlie.\n- Hello, Grant.\nIt's good to see you, Charlie.\nIt's awful good to see you.\nIt's good to see you too.\n- I'll get the eggs.\n- No, get the pie.\nI can pay for the pie.\nYou're a very stubborn man.\nApple pie is not for breakfast.\nIt is if you like apple pie.\nNow I need a fork.\n- Working here long?\n- About three weeks.\nHow's the Utica Kid?\nHe was well... when I saw him last.\nWhen was that?\n- Good morning.\n- Morning.\nWell, business is early and Pete is late.\nThe lunches.\nAre they fixed?\nWhy do I ask?\nThe lunches are always fixed.\nWhy?\nBecause you fix them.\nCharlie, I'll make you an omelette like only Pete can make an omelette.\nVery bad.\nCome on around, sit down, have a cup of coffee.\nPete had that place in Santa Fe, remember?\nAre you running a shoe store on the side?\nThose are box lunches for the work train.\nMoney, money, money.\nPete knows how to make it.\nHe follows the railroad.\nI guess a lot of people follow the railroad.\nYou and Pete.\nThe Utica Kid.\nI asked when you saw him last.\nThey've lost three payrolls.\nNow when did you see him last?\n- Charlie, where did I put my apron?\n- It's under here.\nYou must be nice fella.\nIf Charlie sits with you, you must be nice fella.\nI make omelette for you too.\nWe were talking about the Utica Kid.\nHe can wait.\nBen Kimball's in town.\nThey put his car on the siding yesterday.\n- I know.\n- His wife is with him.\nIs she?\nI often wondered what Verna was like.\nI saw her last night.\nAll fine silk and feathers.\nShe's soft and beautiful.\nAnd I can understand now.\nCan you?\nHow long are you gonna be in town?\n- That depends on Ben Kimball.\n- You working for the railroad again?\n- If I am?\n- That would be good.\nPlaying the accordion's not for you, not for a living.\nYou belong to the railroad and it belongs to you.\nThere were a lot of things that used to belong to me and somehow I lost them.\nTwo omelettes a-comin' up.\n- Do you like eggs?\n- No.\nThat's too bad.\nYou got an omelette coming up.\nWell, somebody's gotta eat them.\nCome on.\nThat means you.\n- Could you put it in a box?\n- An omelette?\nI'll be hungrier when I get to end of track.\nMaybe it will go down easy.\nEasy or not, it goes down right now.\nI can't pay for it.\nThen you can help me sell lunches at the station.\nAny more arguments?\nCome in.\n- You want to see me, Ben?\n- I certainly do.\nHello, Grant.\nSit down.\nAll right, Jeff.\nRenner, go to Pete's and get one breakfast and a jug of coffee.\n- You haven't eaten yet?\n- I've eaten.\nJust get coffee.\nHot.\n- How's everything been going?\n- I make a living.\n- Playing an accordion?\n- That's right.\nWant me to play a tune for you?\nThere's other jobs besides railroading.\nWell, Colorado may be big in miles.\nIt's kinda short on people.\nSo when a man gets fired the way I was fired the story gets around.\nWell, I'm...\nI'm sorry.\n- No, I like to make music.\n- And it keeps you near the railroad.\nIf someone needs information about a payroll, you can sell it.\nYou know it's a funny thing.\nI don't like you either.\n- Is that why you sent for me?\n- No.\nAnd keep out of this.\nHave it your way.\nBut I don't trust him now any more than I did when I sent him after the Utica Kid.\nI sent you after a thief and you gave him a horse to get away on.\n- I told you to keep shut.\n- Let him talk.\nI'm not wearing a gun.\nI'll be honest with you.\nHe'd talk the same if I was.\n- It's been nice seeing you.\n- Grant.\nI'm sure Jeff didn't mean to be rude.\nSometimes he has a blunt way of putting things.\nUnfortunately, Ben isn't much better.\nIt's not unfortunate.\nIt just gets things said in a hurry.\nToo much of a hurry.\nThey forgot to ask you if you'd work for the railroad again.\nWould you?\nYes, I would.\nNot to give you a short answer.\n- It's the answer I wanted.\n- Sit down, Grant.\nDo you remember Whitey Harbin?\nUsed to work down in Arizona and New Mexico.\n- Yeah.\n- Well, he's moved into Colorado.\nI thought he favoured stage lines and banks.\nSo did we.\nBut he's learned about railroad payrolls\n- and he's grabbed three in a row.\n- Where do I fit in?\nThey're making up a supply train in the yard.\nI want you to ride it.\n- With $10,000 in your pocket.\n- Why me?\nQuite frankly, because no one would suspect you of carrying a payroll.\nI sure don't look like $10,000, do I?\nAre you building a bridge you don't need?\nThe money's here.\nWhy not bring the men in on Saturday and pay them off in town?\nAnd lose half the crew?\nTurn them loose in a mining town, they'll go up the hills looking for gold.\nIt won't work.\nAnd we have to finish this section before snow comes.\nThat's a pretty big gamble on a man who gave his horse to a thief!\nYes.\nYou might as well know the deck's stacked against you.\nA boxcar will be hooked to the train.\nI'll be one of the men in it.\n- When did this happen?\n- Last week.\n- Renner, did you know?\n- Yes.\n- Why didn't you tell me?\n- I told him not to.\n- Why?\n- Everything we plan gets back to Whitey.\n- You think I'd tell him?\n- You might trust the wrong people.\n- If he takes the job, I'm sure of it.\n- And if I don't take it?\nThen Jeff will be sitting in Ben's chair.\nOh, I wouldn't like that.\nUh-uh.\nSo I'll take the job on one condition.\nIf I make the delivery I get his job.\nYou made a deal.\nThank you.\nWait a minute.\nIt's getting cold up in the hills.\nThis coat has always been too long for me.\nThanks.\nWell.\nI thought you didn't like him.\nHe said that.\nI said I didn't trust him.\nAnd I still don't.\nGrant.\nAre you surprised Ben sent for you?\nI was until I talked to him.\nHe seems to have changed.\nYou're right.\nHe doesn't belong in a private car with clerks, figures and pressure from the office.\nHe belongs at the end of track, running a gang and building a railroad.\n- He's a working stiff like you.\n- Yes, but he can dream a little too.\nColorado wouldn't have a railroad if he hadn't sold them on the idea.\nFor his sake, I wish he hadn't.\nHe was happy at end of track but they kicked him upstairs and sent us to Chicago.\n- And now he needs a little help.\n- That's why he sent for you.\nOh, I may have had something to do with it.\nWhy?\nThere was a time when you were interested in me.\nI was more than interested in you.\nI wanted to marry you.\nTimes when I'm sorry you didn't.\nAren't you?\nNo.\nA man likes to know his woman will back him when he's down and you didn't.\nBen called me a thief and you went right along with him.\nIt's as simple as that.\nGrant.\nFor old times' sake.\nFor old times' sake?\nJust that and nothing more?\nPerhaps just a little more.\nWe want to be sure that payroll goes through, don't we?\nI don't know.\nMaybe Jeff is right.\nHis type seldom changes.\nAnd if we've made a mistake, it's the finish of everything.\nThen why not cut this car into the supply train?\nIf we're all playing showdown, I'd like to see the cards when they fall.\n- Thank you.\nI hope you have a nice trip.\n- Thank you.\n- Ma'am, is that all?\n- Mm-hm.\n- Here's your lunch.\nYou've earned it.\n- Thanks.\n- Mister, are you going to end of track?\n- Yes.\nCould you stake me to a ticket?\nI can ride half fare if I'm with an adult.\n- And you're an adult.\n- Well, sometimes I wonder.\nAll right.\nYou can come along.\nWe'll ride with the other fellas with no money.\n- On the flatcar?\n- Go on.\nClimb aboard.\nPlenty of fresh air.\nDo you good, make you grow.\nAre you sure he didn't come while I was away?\nAin't nobody been here but the man riding the sorrel.\n- What colour horse your man riding?\n- How should I know?\nIt's extremely important that I see him.\nThey've cut in Mr Kimball's car.\nBarley!\nA man told you to put his horse up...\nDon't start that too.\nThat there sorrel is the only horse what come in.\nThat there sorrel is the horse I want.\nHe belongs to my friend Grant McLaine.\nMcLaine?\nThat's who it is.\nI knew him as a troubleshooter in Santa Fe before he went bad.\n- He didn't go bad.\n- What'll you do with his horse?\n- Ride him!\nI'll change, you saddle him.\n- All right.\nHey, Pilgrim!\nCome here!\nDon't go getting your liver all upset.\n- Once you miss 'em, they stay missed.\n- It's none of your business.\n- Could be.\nYou wanting to get on that car?\n- If I am?\n- I can take you to where it's going.\n- On one of these?\nThey'll get you to end of track before the train does.\n- That's ridiculous.\n- $100 aging yours I'm right.\n- You've got a bet.\n- And you got stuck.\nHere.\nI'll let you ride Flap Ears.\n- You can smoke inside, mister.\n- I can smoke where I want.\nYou can burn too if it pleases you but it'll still cost you four bits.\n- For what?\n- Travelling first-class.\nOtherwise ride the flats.\n- You play that?\n- Yeah, I play it.\n- When?\n- When?\nWhenever somebody throws a dime in my hat.\n- I ain't got a dime.\n- This one's on me.\n- Been up here before?\n- Part way.\n- What takes you to end of track?\n- A job.\nFigured I'd get one at Junction City.\nThey told me the foremen do the hiring.\nYou're a little small for swinging a sledge.\n- I can carry water.\n- Yeah, you can carry water.\n- Very important job.\n- Hey!\n- What are you doing here?\n- He's with me, Pick.\n- Where did you get him?\n- Somebody threw him away.\nDon't you throw him away.\nHe'll get lost in the mountains.\nWho tells the men who build railroads how to get through the mountains?\n- The river.\n- Huh?\nThey just follow the river.\n- Who told you that?\n- I guess my dad was the first.\nHe had a little song about it.\n# Follow the river\n# The river knows the way\n# Hearts can go astray\n# It happens every day\n# Follow the river\n# Wherever you may be\n# Follow the river back to me #\nWouldn't you wanna be knowing about Concho?\n- Who's Concho?\n- The man you roped.\nDo you wanna know?\nNot unless you wanna tell me.\nI ought to tell you.\nHe's fast with a gun.\nOnly know two men who are faster.\nWhich two men would they be?\nWhitey Harbin for one.\nI run away from Whitey.\nThat's why Concho was after me.\nYou're one of Whitey's men?\nNo.\nI was in Montrose.\nWhitey and his bunch were robbing a bank.\nI was just in the road watching.\nWhitey was all for killing me but the other fellow wouldn't let him.\nHe swung me up into the saddle and said,\n\"You ain't killing a kid.\nNot while I ride with you.\"\n- Whitey, he backed down.\n- Cos the fella's faster with a gun?\nLike lightning.\nThis other fella, does he have a name?\nHe's got a name.\nThe Utica Kid.\nI'd have stayed with the bunch if he was boss.\n- But he's not?\n- Not yet.\nAlways he's shoving pins into Whitey, laughing at him, driving him crazy.\nEven crazier than he is!\nSomeday Whitey will crack and he'll lose.\nIs this the fresh air you were talking about?\nHow come them fellas can ride inside?\nWell, it's the old story of good and evil.\nIf you spend all your money on whiskey, you have none left for a ticket.\nDon't drink.\nThen you'd have six bits when you need it.\nThat's very true.\nTell you what, maybe I have six bits.\nYeah.\nWhat do you say we go in and spend it?\nCome on.\nGuess I wasn't tough enough to follow the river that way.\nSometimes it isn't easy travelling upstream.\n- That will be a dollar.\n- That'll be six bits.\nI'm the adult.\nHere.\nHold on to that.\n- Don't worry about Concho.\n- You would if...\nOh, no, come on.\nSit down.\nWe can both worry together if you want to tell me about it.\n- It's nothing.\n- And if it was, you'd rather not say.\nAll right.\nI broke with Whitey.\nDoesn't mean I have to talk.\nNo, you don't have to talk.\nI even broke with the Utica Kid.\n- Hi, Utica.\n- Put him away, Howdy.\nSure.\nCome on.\nIt's a pretty good rig.\nToo good for the guy that owned it.\nRemember that draw you taught me?\nIt worked.\nHe went down with his gun in the leather.\n- And now you're an \"in case\" man.\n- In case?\nYeah.\nIn case you miss six times with one, you draw the other.\n- If you have time.\n- I'll have time.\nCall it.\nDraw!\nYou better learn to draw that one before you fool around with the other.\nAbout three inches high, Whitey.\nYou better take another look at that skull.\nNext time it could be yours.\nDon't soft-foot up behind me!\nIt makes me nervous!\nSo I notice.\nWhat else did you notice?\nDid you see Concho?\n- Did you see him?\n- He wasn't on the trail.\nDid I ask you where he wasn't?\nI asked you did you see him?\n- I would've said so.\n- Not straight out you wouldn't.\nBecause you're a funny man.\nYou've always gotta be laughing inside.\nWell, go ahead, laugh.\nBut get this, Kid.\nI'm a better gun than you.\nOr would you like to try?\nIt's an interesting thought, but I'm afraid of you, Whitey.\nYou ain't afraid of me.\nAnd in your feet, where your brains are, you think maybe you're just a bit faster.\nAnd you know something?\nIt could be.\nBefore you break up completely, you mind putting a name on this?\nIt's just a little old wedge.\nBut when you put it through the latch of a boxcar, you can't open the door from the inside.\nNow, you ask me, who would want to open the door of a boxcar from the inside?\n- Jeff Kurth and a dozen gunmen.\n- How would you know?\nI was sleeping up there when Concho told you.\nYou better learn how to snore!\nYou wouldn't know how to shoot a man in the back.\nI'll learn.\nWhat'll it be, gents?\nWe got Old Grandpa, Old Grandma, Old Uncle Tom.\n- And Old Empty.\n- You ain't funny, Latigo.\nWho could be funny, sweating it out in here?\nGet away, boy.\nYou're too young for whiskey even if we had plenty.\nDon't get fancy.\nYou ain't talking to Joey.\nSpeaking of Joey, you didn't happen to spot him along the trail, did you?\nI'll take a shot of that Old Flannelmouth.\n- Did you see him?\n- No.\nDid he leave any sign?\nA little.\nHe was headed toward Junction City.\nBut you didn't follow him?\nJoey always was a nuisance.\nI was for dropping him in the river.\n- Why didn't you?\n- And get my brains shot out?\nYou've got to find a better reason to kill me.\nSuppose Concho didn't catch up with Joey in town and suppose the kid talked?\n- He won't talk.\n- Maybe not, but Concho ain't back.\nUnless he gets back, we won't know where they're carrying the money.\nThat's right.\nMaybe it'd be smart to let this one go through.\nWhy?\nWe've grabbed three in a row.\nLet's give them a breather.\nThat makes sense.\nI go along with Utica.\nYou and me both.\nWe ought to let this one go through.\nIt ain't going through!\nWhy not?\nYou're the one who taught me about payrolls and now I like them.\n- So do I.\n- I'll buy that.\nA man can get saddle-sore looking for a bank to take.\n- I'm with Whitey.\n- Me too.\nWhat about you, Torgenson?\nI got no complaints.\nYou call it, I'll play it.\nLooks like you've been outvoted.\nOr do you want a recount?\n- Right now, I'd rather have a drink.\n- Suit yourself.\nIf I can't buy a fight, I'll buy a drink.\nFill 'em up.\nSorry, the bar is closed.\nOn account of we're fresh out of whiskey.\nEither get this floor fixed or get a new bartender.\nWhen do we make the hit?\nAny time you're ready.\nShe was halfway up the grade when I left.\nWhy didn't you tell me?\nWhy didn't you ask me?\nFunny man!\nMount up!\nSettle down.\nIt's only another job.\nBut if you was boss, we wouldn't do it.\nIf I was boss we wouldn't do it.\nYou ain't boss!\n# So I bought myself a shovel and I bought myself a pick\n# And I laid a little track along the bullfrog crick\n# Then I built a locomotive out of 20 empty cans\n# And I tooted on the whistle and the darned thing ran\n# Oh, you can't get far without a railroad\n# You can't get far without a railroad\n# Something's gotta take you there and gotta bring you back\n# You can't go any distance in a buggy or a hack #\nThrow some ropes around them timbers.\nWe'll pull it down.\nTorgenson!\n- OK, John.\n- Hurry it up, Jubilee!\n- Boy, they're pushing her fast today.\n- Yeah!\nMaybe they heard I needed a quick ten thousand.\n- That water tower your idea?\n- What's wrong with it?\nAny self-respecting Injun could walk away with it.\nFunny man!\nHe knows everything about everything.\nLet's get down and lock the barn door.\nWe've stopped!\nWhitey's making his hit!\n- McLaine sold us out!\n- No, Ben.\nThey didn't learn it from Grant.\nLeary!\n- A hold-up!\n- They did it again!\nStop your moaning and hold on to your hat!\nThey won't stop old Tommy Shannon with a tank full of water.\nThat's no way to treat railroad property, Mr Shannon.\nTake your hand off the throttle and reach for the brake!\nAll right.\nSit down and behave!\nCome over here.\nOpen the safe!\n- Ha!\n- Move in!\nSame as last time!\n- We thought you were lost or drunk.\n- There ain't nothing in there.\nJubilee!\nHow are you making out?\nTry to talk your way out of this!\n- I'm sorry I missed out with Renner.\n- Never mind.\nWhere's the money?\n- It's not in the safe.\n- Then where is it?\nIt could be going to Junction City with Jeff's men.\nThat's not true.\nRenner told us Jeff wouldn't carry the payroll!\nThat's a help.\nLeast we know who didn't carry it.\nFunny man!\nWhen you get through laughing, see what's in that red car.\nSure.\nGlad to.\nAs soon as I pick up my horse.\nHe's worth more than anything I'm gonna find on this train.\nGet those pilgrims out.\nMaybe one of them is carrying it.\nHit the other cars!\nSee if you can find it.\nOutside!\nAll of you!\nIs this what you wanted to tell me?\nHave a look inside, Latigo!\nIf that's McLaine...\nNo, Ben.\nPut it away.\nYou may as well be comfortable.\n- Be my guest.\n- Gladly.\nDo you mind if I ask the name of my host?\nNo, I don't mind.\nWould the payroll be in there?\nNo.\nWhy not take a look, just to be sure?\nBoy, is this stuff mellow.\nBottled in bond too.\n- I forgot.\nLadies is always first.\n- Thank you, no.\nSee for yourself.\nHello, Joey.\nWhat are you doing here?\nGetting robbed!\nDon't bother.\nNone of them's got more than two dollars.\nWhitey!\nThere ain't no payroll in there.\nHow come you missed out?\n- I had a little trouble.\n- Now, ain't that too bad?\n- Maybe I ought to give you a little more.\n- Whitey!\nKimball's back there with his wife.\nYou just got lucky!\nPut them back in the car!\nGet aboard!\nGo on.\nGood little boys don't run away.\nThis time you'll learn!\n- Where's the payroll?\n- The man says he doesn't know.\nI can help him remember.\nTake her outside.\nTake her outside yourself.\nI'm afraid of women.\nThey scream and scratch, and sometimes step on your toes.\nDon't say no to me.\nNot when I got a gun in my hand.\nI won't.\nUnless I'm holding one too.\n- Outside.\n- If you want the payroll...\nYou'll have to wait for the next work train.\nWe decided not to send it through on this one.\nOh?\nI don't mind waiting.\nI'll be at Pay Load.\nYou can bring it to me.\nThen I'll take 12 hours' start, you get your wife back.\nSee what happens when you don't carry your brains in your feet?\nI ought to make you walk.\nJubilee, lead them out.\nStep up with Latigo.\nWhat about Joey?\nYou gonna leave him here?\nHe'll ride with me.\nOr would you like to?\nSettle down.\nWe're getting $10,000 for the lady, remember?\nWhich one do I ride with?\nWhich one do you think?\nTake her to the end of track, Mr Shannon!\nHere's a stirrup.\nGive you a lift?\nI'll take that box.\nDon't crowd the cantle.\nYou'll ride easier.\nWhoa, mules!\nMust have got tired of making the climb and started home.\n- Come on, boy!\n- Just a minute.\nThere's a mining town near here.\nIt used to be called Pay Load.\nIt's still called Pay Load but nobody lives there.\n- It's over beyond that far hill.\n- Which hill?\n- You see the first hill?\n- Yes.\nSee the second one?\nThere's a third hill.\nPay Load's behind that.\n- How much do you want for this mule?\n- $50.\nFlap Ears, when you unload this piker, you come on home to mother.\n- Get outta there!\n- Gah!\nWelshing on a bet!\nNever could understand them railroad people.\nCome on!\nCome on!\n- Mr Kimball.\n- Come over to the telegraph shack.\n- Before you pass.\nDid you bring the payroll?\n- Not now!\n- Did you bring it?\n- I didn't.\n- Now what?\n- The end of the railroad.\n- Shut up, Feeney.\n- Let go of me or I'll push this down your throat!\nWho wants your man?\nI don't want none of 'em!\nThey're all broke!\n- See you in Denver.\n- I'm off to Denver too.\n- So am I!\n- Nobody goes without orders from Kimball!\n- I'm leaving.\n- You are not.\nYou'll take no joyride in this town with them painted hussies.\nWe've waited this long.\nAnother night won't hurt us.\nBut if the money's not here in the morning, out we go!\nGet back to work!\nWe're beat, Mr Kimball.\nWithout the pay, the gang will go to Junction City.\n- I know.\n- Any word from Jeff?\nHe's in Junction City.\nSays the car held to the grade all the way.\nHe and his men will be after Whitey in...\nThey will not!\nTell him to stay right where he is until further orders.\nYes, sir.\nWonder if he thinks that's private property.\nIf he tries to divide that like he cuts up the loot, there's gonna be shooting.\n- Your laundry?\n- Sandwiches.\nDo you want one?\nNo.\nWhere did you get them?\nJunction City.\nA girl in a restaurant gave them to me.\n- Was she pretty?\n- Mm-hm.\n- Think you could get me a date?\n- She's not that kind of a girl.\nAny of you boys win enough to buy a drink?\n- You ain't got a drink.\n- I got a drink.\n- I thought you was fresh out.\n- I was till we made the hit.\nWhile you looked for the payroll that wasn't there, I had important business.\nCome on, fill her up.\nLatigo ought to be running this bunch.\nWe might not eat, but we'd sure drink.\nHa ha!\nYou're a funny man.\nWhy don't you laugh?\n- Am I supposed to?\n- Not if you're smart.\n- I think you're smart.\n- And what else do you think?\nThat you made a mistake.\nShe'll only bring you trouble and guns.\nSince when is $10,000 trouble?\nThat's exactly what you're worth.\nYou're very flattering.\nBut I'm inclined to agree with you.\nDon't make a habit of it.\nLatigo, I want a drink!\nAnd you've got a few habits I don't like either.\nSettle down.\nDo you see what she's up to?\nI can see you.\nAnd what I see I don't like too good.\n- I guess you could use one.\n- Thank you, no.\n- It's the best.\nI got it off your own bar.\n- You drink it.\nSorry, lady, I don't drink.\nI'm studying to be a bartender.\n- Don't you drink?\n- Not alone.\nSuppose I join you?\n- Do you mind?\n- And if I do?\nDon't push it.\nFor a little while you're gonna need me and I'm gonna need you.\nI watched you walk.\nI could swear we've met before.\nCould you?\nFunny little things you do.\nLike when you smile.\nStrange.\nI seem to recognise all your mannerisms, if you know what that means.\n- I know what that means.\n- Do you?\nI'm supposed to fight Whitey over you.\nWith a little luck we'd kill each other.\n- It's an interesting thought.\n- What's interesting?\n- She is.\n- You're so right.\nI may not send you back.\nNot until you've helped me spend the ten thousand.\n- You mind if we join the party?\n- Yes!\nYou shouldn't, cos if you guess wrong you ain't gonna hang alone.\nYou like another drink?\n- Thanks, I still have this one.\n- Drink them both.\nAnybody want to start the dance?\nWith only one girl?\nGet back to the bar where you belong.\nLet's all get back to the bar, where we belong.\n- You almost got your wish.\n- One of them.\n- The other?\n- To know your name.\nHis name?\nHe's the Utica Kid.\nI don't like it either.\nMy family used to call me Lee.\nWhy don't you?\nYou're supposed to be outside.\nCome out with your hands up.\n- What are you doing here?\n- I want to see the Utica Kid.\n- Who are you?\n- A friend of his.\nFunny thing, he never told me about no girlfriend.\nIs there any reason why he should?\n- What's your name?\n- Charlie Drew.\nAnd you can put that gun away.\nOr do I look dangerous?\nNot exactly.\nGive me that rope.\n- When'd you get here?\n- Just before they rode in.\nUtica pulled the job off right on schedule.\nI suppose you've known it was going to happen for quite some time.\nNo, I haven't.\nUtica doesn't talk to me about jobs.\nNot this kind.\n- Did he ever have any other kind?\n- He will have.\nSoon.\nThen why don't you hold out?\nWhy don't you keep away till he stops being a thief?\nI told him that's what I'd do.\nHe just looked at me and smiled.\nHe said, \"I wonder if you can.\"\nTonight he has his answer.\nYou're here.\nYes, but only to tell him that you're...\nOnly to tell him I'm in town and might come looking for him.\nI want to keep him alive.\nI want to keep you alive.\n- You know what he can do with a gun.\n- I know.\n- Well, then, why?\n- Because of a little thing called self-respect.\nMaybe you wouldn't understand anything about that.\nFor five years I've played that thing for nickels and dimes thrown into a hat.\nFor five years the Utica Kid has been laughing.\nI may have been wrong, Charlie, but I'm not gonna make the same mistake twice.\nGrant...\nWhen you see him will you tell him that I'm here?\nLeave it alone!\nSo all she'll bring is trouble and guns, huh?\nDid you bring the money with you?\nNo.\n- How soon do we get it?\n- I wouldn't know about that.\nYou should!\n$10,000 is a lot of money.\nAnd that's what he wants for me.\nWell, I'd say he was selling out cheap.\nNever mind what you'd say.\nWhat did Kimball say?\nIf you don't know about the money, why did he send you?\nHe didn't send me.\nI came on my own.\nWhy?\n- Ask him.\n- Well?\nI wouldn't know.\nThen again, maybe I would.\nYou were right the first time.\nI can walk quiet at night and I'm a pretty good gun.\nI'd like to join up with you.\nYou see, when a man gets fired off the railroad, he has a little trouble finding a job.\nAnd when he can't find a job, he gets hungry.\nI've been hungry for the last five years.\nHaven't I?\n- How would he know?\n- I'm his brother.\n- His brother?\n- His younger brother.\nFive years ago he was a troubleshooter for Kimball.\nI lifted the feed herd and he came after me.\nThen gave you a horse to get away.\nBut not until I'd heard all about good and evil.\nI didn't buy what he had to sell then.\nI'm not buying it now.\n- So you don't want him in, huh?\n- No.\nFunny thing.\nI want him in.\n- Any objections?\n- It ain't that simple, Whitey.\nThere's a personal deal between me and him.\n- About what?\n- He got in my way.\nThat's right.\nOh, yeah, I remember you.\nYou're the man that fights kids.\nWhich way do you want it?\nGet up, come on, get up!\nNow one of you give him his gun.\nAll right, Harbin, you're the boss around here.\nYou call it.\nI might just do that.\nWell, I ain't gonna take him alone.\nThen maybe you'd better move along.\nAny further objections?\n- Yeah.\n- Now ain't that wonderful?\n- I'd be happy to call it.\n- You may get the chance.\nYou mind if the Utica Kid and me have a little talk?\nNot at all.\nCall me when you're ready.\nI think you ought to know I'm working for the railroad again.\nI figured as much.\n- Troubleshooter?\n- Tonight I was carrying the payroll.\n- Where did you hide it?\n- I gave it to the boy.\nIt's in that shoe box.\nNow all you have to do is go in and tell Whitey.\nYou're gambling I won't?\n- Same old story of good and evil.\n- Same old story.\nYou lose, Grant.\nYeah, I kind of figured that when you laughed.\nI'll give you the same break you gave me.\nTen-minute start, then I tell Whitey I sent you away.\nI go, that money goes with me.\nSo does Kimball's wife.\n- No.\n- Wait a minute, Lee.\nHear me out on this.\nIf I leave here, that boy goes with me too.\nJoey?\nWhy do you want him?\nMaybe for the good of his soul.\nIt's been a long time since you heard that word, hasn't it?\nMother and Dad used to bring it up once in a while when we were kids.\nYou were just about Joey's age.\nHe thinks a lot of you, doesn't he?\n- He wants to grow up to be just like you.\n- He may make it, with practice.\nSoon he'll be holding the horses while you and Whitey hit a bank.\nThere's another kid lying in the barn.\nHe got the start that way too, huh?\n- You didn't kill Howdy?\n- I didn't hurt him.\n- And you're not going to hurt Joey.\n- How could I do that?\nIt's not hard.\nIt's not hard.\nNot when he takes your road.\nOr haven't you stopped to look at it?\nWhy bother?\nI picked it, I'll ride it.\nLee, I'm asking you again.\nGive Joey a chance.\nNo.\nYou've got ten minutes.\nI won't need them.\nCharlie's in there waiting for you.\nThink about her.\nShe's been following you for five years too.\nShe's got a reason.\nOr didn't I tell you I'm gonna marry her?\nHow much of that did you hear?\nJust what I wanted to hear.\nThat you're gonna marry me.\nWhen?\nWe're gonna have a lot of money, Charlie.\n$10,000.\nYou can have pretty new dresses and pretty new shoes.\nAnd a brand-new husband.\n- Tomorrow.\n- No.\nRight now!\nIf you want me, take me away right now.\nPlease, please take me.\nWhy the sudden hurry?\nHas my big brother been telling you the story of good and evil?\nDon't laugh at him.\nWhy not?\nWhy mustn't I laugh at him?\nMaybe it would be better if... if you tried to be a little more like him.\nNow isn't that just great?\nNow I get it from you!\nEver since I was a kid that's all I can remember.\n\"Why don't you be more like your brother?\nWhy can't you be more like Grant?\"\nI don't want to be like him.\nI don't want any part of him.\n- That's not true.\n- Yeah, it's true!\nYou don't know what it's like to be the kid brother.\nEverything you do is wrong.\nEverything you try.\nUntil one day I tried a gun.\nFit my hand real good.\nAnd I wasn't the kid brother any more.\nIt's a good gun.\nIt's gonna get us everything we always wanted.\nBut I don't want it.\nNot that way.\nWhy must you steal?\nBecause I like to steal.\nI like to see what people will do when I take it away from them.\nWhat happens when something is taken away from you?\nNobody's gonna take anything away from me.\nCharlie, I'm asking you to marry me.\nNo.\nGrant was right.\nYou'll never change.\nAnd he calls me a thief?\nJoey.\nGo on.\nPlay some more.\nIt's been a long time since I heard an accordion.\nAny tune in particular?\nOr would this do?\n# Oh, you can't get far without a railroad\n# You can't get far without a railroad\n# You gotta have an engine and you gotta have a track\n# Oh, you can't get far without a railroad\n# There are tracks across the prairie\n# Where the buzzard builds his nest\n# There are tracks across the Rockies\n# To the Golden West #\nHow does it go from there?\nHow does it go from there, Lee?\nEverybody will be neighbours\nIn this little dream of mine\nTake you clear across the country\nOn the Bullfrog Line\n# Oh, you can't get far without a railroad\n- # You can't get far without a railroad #\n- Gentlemen!\n- Renner!\n- Didn't you know he was working for me?\n- I've come for my thousand dollars.\n- What thousand dollars?\nYour memory is quite short.\nI supplied you with information about a certain boxcar.\nI was prepared to supply you with information about the payroll.\n- Concho did not keep the appointment.\n- So?\nSo ten per cent of the payroll is mine.\nSorry to disappoint you but we missed the payroll.\nMissed the payroll?\nIn that case I'm prepared to make a better deal.\nFor $2,000, I can tell you where the money is.\nYou made a deal.\nBen Kimball hired a man to carry it.\nI might never have located this place if I hadn't heard that man's accordion.\nHe has the money.\nAsk him!\nJoey!\nCome here, Joey!\nGrant!\nMcLaine, there's a woman with you!\n- That's right.\n- Send her out before we come get you.\nHere, hurry!\nCome on, Charlie.\nHe's in the clear.\nHe's riding away.\nYeah, he's riding.\nAfter me.\n- What are we stopping for?\n- We're going to the mill, the short way.\nGet down to the mill!\nCome on!\nTake cover!\nHere.\nThere's a mine shaft at the end of these cables.\nIt runs clear through the mountains.\nOn the other side, about half a mile, is the railroad!\nIt's two hours to the end of track.\nI have to send you out one at a time.\nCome on, Verna.\n- Tell Ben he'll get his payroll somehow.\n- I'll tell him more than that.\nYou'll get that money even if you had to kill your own brother?\nThe next ore bucket that comes down, pull it around and jump in.\nI'll cover for you.\nIt's clear, Charlie.\nGet out!\nSee if you can reach him from over there.\nHe can't stand them off, not alone.\nYou figuring to help?\nGrant!\nLook out!\nHe's real good.\nOnly one better gun in Colorado.\nCharlie!\nGet over here!\n- I thought I told you to get out.\n- I'm staying right here.\nAll right.\nNow you get back inside and I'll cover for you.\nThanks, Charlie.\nLee, not the kid!\nYou take care of the kid.\nI'll see if I can keep them pinned down.\nWould you mind if I play big brother just this one time?\n- Shoots high.\n- You or the gun?\n- Joey all right?\n- He's all right.\nThat makes you a winner.\nGo ahead and make a sucker out of the kid.\nTell him all about good and evil.\nPut him to work on the railroad.\nThings get tough, he can always play the accordion for nickels and dimes.\nSounds like old times, Lee.\nWelcome home.\nDon't give me that big brother grin.\n- Up there!\n- Get him!\nI count mine.\nThere's one left.\nHe hit you hard, Lee.\nNot half as hard as you did with that Bullfrog Line.\nThat was Dad's favourite tune and you know it.\nI know it.\nYou and your stinking accordion!\nCharlie.\nCharlie?\nYou and Joey get the horses.\nWhat...?\nI'll take care of my brother.\nHere's your money.\nPay 'em off, Tim.\nThank you, Grant.\nLooks like you won yourself a job.\nMine.\nNo, it won't fit.\nNot nearly as well as your coat.\nWant your old job back?\nThanks.\nAll right, Joey.\nGet a bucket and start carrying water.\nWe're at end of track.\nNow go on.\n# Sometimes I feel like I could jump over the moon\n# And tell the sky above\n# Does it matter how full the moon\n# When you've an empty heart\n# Follow the river\n# Wherever you may be\n# Follow the river back to me\n# Follow the river\n# The river knows the way\n# Come to me, I pray\n# I miss you more each day\n# Follow the river\n# Wherever you may be\n# Follow the river back to me\n# Sometimes I feel like I could jump over the moon\n# And tell the sky above\n# Does it matter how full the moon\n# When you've an empty heart\n# Bring back the great love\n# The love that once we knew\n# Make my dreams come true\n# The dream I had with you\n# Follow the river\n# Wherever you may be\n# Follow the river back to me\n# Follow the river\n# Wherever you may be\n# Follow the river back to me #\n(Man) I'd better get back to work.\nDon't lose all your matches.\n- Hello, Mac.\n- Hi, Click.\nHowdy, folks.\n- Hi.\n- Hello.\nWelcome home, man.\nCome sit down and give us a tune.\n- We'll pay you with promises.\n- A man can't eat promises.\nHe can't lose them at cards either.\nMcLaine!\n- No, indeed he can't.\n- Where have you been and why?\nThey were laying track in Wyoming.\nNeeded a troubleshooter.\n- Didn't need me.\n- That's too bad.\nYou can pick up a few nickels and dimes playing your accordion.\nThat's right, Tim.\nWhat's this?\nPlaying cards with matches?\nWhen's payday?\nTomorrow, if they get the money past Whitey Harbin.\nWhich they won't.\nHe's tapped that pay train three times up.\nThey'll get it past him or get no more steel before snow.\n- O'Brien, shut your mouth!\n- My sentiments exactly.\nDay shift and night shift, night shift and day shift.\nNo money in a month.\nMy patience is ended.\nSo is their railroad.\nAm I right?\n- You are right!\n- McLaine.\nPlease play me a peaceful tune or I'll have a revolution on my hands.\nI see what you mean.\nAre they giving you trouble?\nLucky you're not with the railroad.\nTis a weary man you'd be today if you were troubleshooting for us.\nCould be you're right, Tim.\n(# Folk tune)\nCome on, pretty lady.\nGive us a dance!\nI dare you, Mr Feeney.\nWhere's the wife?\nCome on!\nBig Ed, are you through to Junction City?\nThis is for Kimball.\nAs per your instructions, this is to advise you that Grant McLaine is here at end of track.\nYou don't need that last.\nJust say he's here.\nGet away from him!\nGet away from him!\nDancing, is it?\nLet me...\nGet back into your tent where you belong, you painted women.\nYou and your railroad.\nBringing the likes of this among decent folk.\nFor two cents I'd take me old man back to Junction City and be through with you.\nIf you had two cents!\nThey're at it again.\nYou can't mix wives and women, even to build a railroad.\nStop this shilly-shally music and give me a jig I can dance to.\nGive us a jig, I said.\nYou watch your feet.\nThey're heavy.\nAnd so is my fist.\nDo I get a jig or do you lose your teeth?\nNot now, Mac, not now.\nHe's not bad.\nHe's just a fool.\nConsider yourself lucky.\nFive years ago you'd have got a bullet between the eyes.\nI've seen him kill men that could eat you without salt.\nPlay what you please.\n(# Lively jig)\n- You asked for a jig, now dance to it!\n- Here I go, Feeney!\nHee-hee!\nUp Garryowen!\n# I was farming in Missouri I was getting tired of that\n# So I bought myself a satchel and a stovepipe hat\n# And I headed for the station gonna travel all about\n# But there wasn't any station and I soon found out\n# That you can't get far without a railroad\n# You can't get far without a railroad\n# Something's gotta take you there and gotta bring you back\n# Oh, you can't go any distance in a buggy or a hack\n# You can't get far without a railroad\n# You can't get far without a railroad\n# You gotta have an engine and you gotta have a track\n# Oh, you can't get far without a railroad #\nI haven't heard that one.\nWhere does it come from?\nDad used to play it when it got too rough around the house.\nPretty soon us kids would stop fighting and start dancing.\nThe man makes fine music.\nAre we gonna let them use it all up?\nGo on with you!\nClarence Feeney, stop looking at them painted hussies and give your wife a dance.\n- Go away, woman, I'm tired.\n- Tired, is it?\nThis is my day for dancing or fighting.\nWhich will you have?\nDarling.\nNice work.\nI'll give you five dollars tomorrow.\nIf Whitey lets the pay train through.\nThree times is enough.\nHe won't hit it again.\nOh, don't bet on it.\nHe's a strange man, this Whitey Harbin.\nHe's got the big boss plenty worried.\nSpeaking of Kimball, he wants to see you.\n- How would he know where I am?\n- I told him.\nHere.\nYou read it.\nI'm afraid if I stop the music, Mrs Feeney'll hit me with something.\n\"Report to me at once in Junction City.\nUrgent.\nBen Kimball.\"\n- Maybe he'll give you...\n- Another chance?\nNo.\nThat's not his way.\n- But you will see him?\n- Not till they've finished their dance.\n- You old hag, I'll...\n- Painted hussy!\n(Groaning)\nLet go of me!\nLet go!\nLet her go, I said!\n(Woman screams)\n(Groaning)\n(Stops playing)\n(Shouting)\n(Screaming)\n- Hold this.\n- Right.\nAnd this is the tune your father used to play to keep peace in the house?\nI must have squeezed out a few wrong notes.\nYeah.\n- Thanks, Tim.\n- Goodbye, Mac.\n(Woman screeches)\n- Too late for coffee, mister?\n- (Woman) Howdy.\nI think there's a few warm dregs left.\n- Oh.\nHowdy, ma'am.\n- Step down.\nMuch obliged.\n- They keeping you busy?\n- Yep.\nPacking out the ore and packing in the vittles.\nThem miners can eat more beans than they raise in all of Boston.\n- Now they want me to bring in a mill.\n- All at once?\nNo, just a few pieces at a time.\nThey got tired of waiting for the railroad to reach them.\nBetween you and me, I don't think it will before snow.\nYou're hoping it won't?\n- First I was.\n- Uh-huh.\nFigured it'd put me out of business.\nIt won't.\n- It won't?\n- No.\nIt's a funny thing about gold.\nThere's always some jackass will find it where the railroad ain't.\nThen he'll send for me and a few more jackasses to bring in his grub and pack out his ore!\nThem crazy miners!\nLook at the waste of that good machinery.\nTwo miles of cable and buckets to go with it.\nLast week they up and left the whole thing!\nDid the vein pinch out or did they hit low grade?\nThey didn't hit nothing but blue sky.\nUh-huh.\n- This was mighty fine coffee, Mrs...\n- Miss Vittles.\nMiss Vittles.\nI sure appreciate it.\n- I got a long ride ahead of me.\n- You heading for Junction City too?\nYes, ma'am.\nBut I'm kind of in a hurry.\nI ain't looking for company.\nTen jackasses in a bunch is enough.\n- I can save you a trip round the mountain.\n- How's that?\nLike I told you, the boys hit a good vein, followed it through the mountain.\nLast week they busted out on the far side and there wasn't nothing there but blue sky.\nMakes a mighty fine short cut into town.\n- It sure does.\n- Still think I'm crazy?\n- I think you're real pretty.\n- Ah!\n- You going to spend time in these hills?\n- Yes, ma'am.\nWhen snow comes you're gonna need a woman.\nOr a warm coat, else you'll freeze your knees.\nWell, I can't rightly afford a warm coat.\nSo long, Miss Vittles.\nPeople wonder what a calf feels when he gets roped.\nNow you can tell 'em.\nWhat for are you mixing in?\nMaybe I don't like to see kids get hurt.\nBreak any bones, son?\nHe's got a knife behind his collar!\n- There's a stirrup.\nYou want a lift?\n- No.\n- Why not?\n- I'm beholden to you, mister.\nCouldn't we just leave it that way?\n- Morning.\n- Morning.\n- Put him up?\n- For how long?\n- I wouldn't know.\n- It'll be two bits for oats.\n- Ain't I seen you before?\n- Depends on where you've been.\n- I follow the railroad, mostly.\n- Could be you've seen me.\n- It'll be four bits if he stays the night.\n- Fair enough.\nMorning.\nDid a man ride in today - tall, sort of heavyset?\n- You mean him, Mr Renner?\n- Not him.\nThis one had a scar.\nAlong his cheek?\nNo, sir.\nI don't see no man with a scar.\nI guess maybe I can have some apple pie and coffee.\nI guess you could have eggs with bacon if you wanted eggs with bacon.\n- Hello, Charlie.\n- Hello, Grant.\nIt's good to see you, Charlie.\nIt's awful good to see you.\nIt's good to see you too.\n- I'll get the eggs.\n- No, get the pie.\nI can pay for the pie.\nYou're a very stubborn man.\nApple pie is not for breakfast.\nIt is if you like apple pie.\nNow I need a fork.\n- Working here long?\n- About three weeks.\nHow's the Utica Kid?\nHe was well... when I saw him last.\nWhen was that?\n- Good morning.\n- Morning.\nWell, business is early and Pete is late.\nThe lunches.\nAre they fixed?\nWhy do I ask?\nThe lunches are always fixed.\nWhy?\nBecause you fix them.\nCharlie, I'll make you an omelette like only Pete can make an omelette.\nVery bad.\nCome on around, sit down, have a cup of coffee.\nPete had that place in Santa Fe, remember?\nAre you running a shoe store on the side?\nThose are box lunches for the work train.\nMoney, money, money.\nPete knows how to make it.\nHe follows the railroad.\nI guess a lot of people follow the railroad.\nYou and Pete.\nThe Utica Kid.\nI asked when you saw him last.\nThey've lost three payrolls.\nNow when did you see him last?\n- Charlie, where did I put my apron?\n- It's under here.\nYou must be nice fella.\nIf Charlie sits with you, you must be nice fella.\nI make omelette for you too.\nWe were talking about the Utica Kid.\nHe can wait.\nBen Kimball's in town.\nThey put his car on the siding yesterday.\n- I know.\n- His wife is with him.\nIs she?\nI often wondered what Verna was like.\nI saw her last night.\nAll fine silk and feathers.\nShe's soft and beautiful.\nAnd I can understand now.\nCan you?\nHow long are you gonna be in town?\n- That depends on Ben Kimball.\n- You working for the railroad again?\n- If I am?\n- That would be good.\nPlaying the accordion's not for you, not for a living.\nYou belong to the railroad and it belongs to you.\nThere were a lot of things that used to belong to me and somehow I lost them.\n(Pete) Two omelettes a-comin' up.\n- Do you like eggs?\n- No.\nThat's too bad.\nYou got an omelette coming up.\nWell, somebody's gotta eat them.\nCome on.\nThat means you.\n- Could you put it in a box?\n- An omelette?\nI'll be hungrier when I get to end of track.\nMaybe it will go down easy.\nEasy or not, it goes down right now.\nI can't pay for it.\nThen you can help me sell lunches at the station.\nAny more arguments?\n(Train rattling)\n(Train whistle)\n(Knocking)\nCome in.\n- You want to see me, Ben?\n- I certainly do.\nHello, Grant.\nSit down.\nAll right, Jeff.\nRenner, go to Pete's and get one breakfast and a jug of coffee.\n- You haven't eaten yet?\n- I've eaten.\nJust get coffee.\nHot.\n- How's everything been going?\n- I make a living.\n- Playing an accordion?\n- That's right.\nWant me to play a tune for you?\nThere's other jobs besides railroading.\nWell, Colorado may be big in miles.\nIt's kinda short on people.\nSo when a man gets fired the way I was fired the story gets around.\nWell, I'm...\nI'm sorry.\n- No, I like to make music.\n- And it keeps you near the railroad.\nIf someone needs information about a payroll, you can sell it.\nYou know it's a funny thing.\nI don't like you either.\n- Is that why you sent for me?\n- No.\nAnd keep out of this.\nHave it your way.\nBut I don't trust him now any more than I did when I sent him after the Utica Kid.\nI sent you after a thief and you gave him a horse to get away on.\n- I told you to keep shut.\n- Let him talk.\nI'm not wearing a gun.\nI'll be honest with you.\nHe'd talk the same if I was.\n- It's been nice seeing you.\n- (Woman) Grant.\nI'm sure Jeff didn't mean to be rude.\nSometimes he has a blunt way of putting things.\nUnfortunately, Ben isn't much better.\nIt's not unfortunate.\nIt just gets things said in a hurry.\nToo much of a hurry.\nThey forgot to ask you if you'd work for the railroad again.\nWould you?\nYes, I would.\nNot to give you a short answer.\n- It's the answer I wanted.\n- Sit down, Grant.\nDo you remember Whitey Harbin?\nUsed to work down in Arizona and New Mexico.\n- Yeah.\n- Well, he's moved into Colorado.\nI thought he favoured stage lines and banks.\nSo did we.\nBut he's learned about railroad payrolls\n- and he's grabbed three in a row.\n- Where do I fit in?\nThey're making up a supply train in the yard.\nI want you to ride it.\n- With $10,000 in your pocket.\n- Why me?\nQuite frankly, because no one would suspect you of carrying a payroll.\nI sure don't look like $10,000, do I?\nAre you building a bridge you don't need?\nThe money's here.\nWhy not bring the men in on Saturday and pay them off in town?\nAnd lose half the crew?\nTurn them loose in a mining town, they'll go up the hills looking for gold.\nIt won't work.\nAnd we have to finish this section before snow comes.\nThat's a pretty big gamble on a man who gave his horse to a thief!\nYes.\nYou might as well know the deck's stacked against you.\nA boxcar will be hooked to the train.\nI'll be one of the men in it.\n- When did this happen?\n- Last week.\n- Renner, did you know?\n- Yes.\n- Why didn't you tell me?\n- I told him not to.\n- Why?\n- Everything we plan gets back to Whitey.\n- You think I'd tell him?\n- You might trust the wrong people.\n- If he takes the job, I'm sure of it.\n- And if I don't take it?\nThen Jeff will be sitting in Ben's chair.\nOh, I wouldn't like that.\nUh-uh.\nSo I'll take the job on one condition.\nIf I make the delivery I get his job.\nYou made a deal.\nThank you.\nWait a minute.\nIt's getting cold up in the hills.\nThis coat has always been too long for me.\nThanks.\nWell.\nI thought you didn't like him.\nHe said that.\nI said I didn't trust him.\nAnd I still don't.\n(Verna) Grant.\nAre you surprised Ben sent for you?\nI was until I talked to him.\nHe seems to have changed.\nYou're right.\nHe doesn't belong in a private car with clerks, figures and pressure from the office.\nHe belongs at the end of track, running a gang and building a railroad.\n- He's a working stiff like you.\n- Yes, but he can dream a little too.\nColorado wouldn't have a railroad if he hadn't sold them on the idea.\nFor his sake, I wish he hadn't.\nHe was happy at end of track but they kicked him upstairs and sent us to Chicago.\n- And now he needs a little help.\n- That's why he sent for you.\nOh, I may have had something to do with it.\nWhy?\nThere was a time when you were interested in me.\nI was more than interested in you.\nI wanted to marry you.\nTimes when I'm sorry you didn't.\nAren't you?\nNo.\nA man likes to know his woman will back him when he's down and you didn't.\nBen called me a thief and you went right along with him.\nIt's as simple as that.\nGrant.\nFor old times' sake.\nFor old times' sake?\nJust that and nothing more?\nPerhaps just a little more.\nWe want to be sure that payroll goes through, don't we?\nI don't know.\nMaybe Jeff is right.\nHis type seldom changes.\nAnd if we've made a mistake, it's the finish of everything.\nThen why not cut this car into the supply train?\nIf we're all playing showdown, I'd like to see the cards when they fall.\n- Thank you.\nI hope you have a nice trip.\n- Thank you.\n(Train whistle)\n- Ma'am, is that all?\n- Mm-hm.\n- Here's your lunch.\nYou've earned it.\n- Thanks.\n- Mister, are you going to end of track?\n- Yes.\nCould you stake me to a ticket?\nI can ride half fare if I'm with an adult.\n- And you're an adult.\n- Well, sometimes I wonder.\nAll right.\nYou can come along.\nWe'll ride with the other fellas with no money.\n- On the flatcar?\n- Go on.\nClimb aboard.\nPlenty of fresh air.\nDo you good, make you grow.\n(Clunking)\n(Train whistle)\nAre you sure he didn't come while I was away?\nAin't nobody been here but the man riding the sorrel.\n- What colour horse your man riding?\n- How should I know?\nIt's extremely important that I see him.\nThey've cut in Mr Kimball's car.\nBarley!\nA man told you to put his horse up...\nDon't start that too.\nThat there sorrel is the only horse what come in.\nThat there sorrel is the horse I want.\nHe belongs to my friend Grant McLaine.\nMcLaine?\nThat's who it is.\nI knew him as a troubleshooter in Santa Fe before he went bad.\n- He didn't go bad.\n- What'll you do with his horse?\n- Ride him!\nI'll change, you saddle him.\n- All right.\n(Train chugging)\n(Train whistle)\nHey, Pilgrim!\nCome here!\nDon't go getting your liver all upset.\n- Once you miss 'em, they stay missed.\n- It's none of your business.\n- Could be.\nYou wanting to get on that car?\n- If I am?\n- I can take you to where it's going.\n- On one of these?\nThey'll get you to end of track before the train does.\n- That's ridiculous.\n- $100 aging yours I'm right.\n- You've got a bet.\n- And you got stuck.\nHere.\nI'll let you ride Flap Ears.\n- You can smoke inside, mister.\n- I can smoke where I want.\nYou can burn too if it pleases you but it'll still cost you four bits.\n- For what?\n- Travelling first-class.\nOtherwise ride the flats.\n(Discordant notes)\n- You play that?\n- Yeah, I play it.\n- When?\n- When?\nWhenever somebody throws a dime in my hat.\n- I ain't got a dime.\n- This one's on me.\n(# Folk tune)\n- Been up here before?\n- Part way.\n- What takes you to end of track?\n- A job.\nFigured I'd get one at Junction City.\nThey told me the foremen do the hiring.\nYou're a little small for swinging a sledge.\n- I can carry water.\n- Yeah, you can carry water.\n- Very important job.\n- (Man) Hey!\n- What are you doing here?\n- He's with me, Pick.\n- Where did you get him?\n- Somebody threw him away.\nDon't you throw him away.\nHe'll get lost in the mountains.\nWho tells the men who build railroads how to get through the mountains?\n- The river.\n- Huh?\nThey just follow the river.\n- Who told you that?\n- I guess my dad was the first.\nHe had a little song about it.\n# Follow the river\n# The river knows the way\n# Hearts can go astray\n# It happens every day\n# Follow the river\n# Wherever you may be\n# Follow the river back to me #\nWouldn't you wanna be knowing about Concho?\n- Who's Concho?\n- The man you roped.\nDo you wanna know?\nNot unless you wanna tell me.\nI ought to tell you.\nHe's fast with a gun.\nOnly know two men who are faster.\nWhich two men would they be?\nWhitey Harbin for one.\nI run away from Whitey.\nThat's why Concho was after me.\nYou're one of Whitey's men?\nNo.\nI was in Montrose.\nWhitey and his bunch were robbing a bank.\nI was just in the road watching.\nWhitey was all for killing me but the other fellow wouldn't let him.\nHe swung me up into the saddle and said,\n\"You ain't killing a kid.\nNot while I ride with you.\"\n- Whitey, he backed down.\n- Cos the fella's faster with a gun?\nLike lightning.\nThis other fella, does he have a name?\nHe's got a name.\nThe Utica Kid.\nI'd have stayed with the bunch if he was boss.\n- But he's not?\n- Not yet.\nAlways he's shoving pins into Whitey, laughing at him, driving him crazy.\nEven crazier than he is!\nSomeday Whitey will crack and he'll lose.\n(Train whistle)\nIs this the fresh air you were talking about?\nHow come them fellas can ride inside?\nWell, it's the old story of good and evil.\nIf you spend all your money on whiskey, you have none left for a ticket.\nDon't drink.\nThen you'd have six bits when you need it.\nThat's very true.\nTell you what, maybe I have six bits.\nYeah.\nWhat do you say we go in and spend it?\nCome on.\nGuess I wasn't tough enough to follow the river that way.\nSometimes it isn't easy travelling upstream.\n- That will be a dollar.\n- That'll be six bits.\nI'm the adult.\nHere.\nHold on to that.\n- Don't worry about Concho.\n- You would if...\nOh, no, come on.\nSit down.\nWe can both worry together if you want to tell me about it.\n- It's nothing.\n- And if it was, you'd rather not say.\nAll right.\nI broke with Whitey.\nDoesn't mean I have to talk.\nNo, you don't have to talk.\nI even broke with the Utica Kid.\n- Hi, Utica.\n- Put him away, Howdy.\nSure.\nCome on.\nIt's a pretty good rig.\nToo good for the guy that owned it.\nRemember that draw you taught me?\nIt worked.\nHe went down with his gun in the leather.\n- And now you're an \"in case\" man.\n- In case?\nYeah.\nIn case you miss six times with one, you draw the other.\n- If you have time.\n- I'll have time.\nCall it.\nDraw!\nYou better learn to draw that one before you fool around with the other.\n(Clanking)\n(Horse whinnies)\nAbout three inches high, Whitey.\nYou better take another look at that skull.\nNext time it could be yours.\nDon't soft-foot up behind me!\nIt makes me nervous!\nSo I notice.\nWhat else did you notice?\nDid you see Concho?\n- Did you see him?\n- He wasn't on the trail.\nDid I ask you where he wasn't?\nI asked you did you see him?\n- I would've said so.\n- Not straight out you wouldn't.\nBecause you're a funny man.\nYou've always gotta be laughing inside.\nWell, go ahead, laugh.\nBut get this, Kid.\nI'm a better gun than you.\nOr would you like to try?\nIt's an interesting thought, but I'm afraid of you, Whitey.\n(Laughs) You ain't afraid of me.\nAnd in your feet, where your brains are, you think maybe you're just a bit faster.\nAnd you know something?\n(Laughs) It could be.\nBefore you break up completely, you mind putting a name on this?\nIt's just a little old wedge.\nBut when you put it through the latch of a boxcar, you can't open the door from the inside.\nNow, you ask me, who would want to open the door of a boxcar from the inside?\n- Jeff Kurth and a dozen gunmen.\n- How would you know?\nI was sleeping up there when Concho told you.\nYou better learn how to snore!\nYou wouldn't know how to shoot a man in the back.\nI'll learn.\nWhat'll it be, gents?\nWe got Old Grandpa, Old Grandma, Old Uncle Tom.\n- And Old Empty.\n- You ain't funny, Latigo.\nWho could be funny, sweating it out in here?\nGet away, boy.\nYou're too young for whiskey even if we had plenty.\nDon't get fancy.\nYou ain't talking to Joey.\nSpeaking of Joey, you didn't happen to spot him along the trail, did you?\nI'll take a shot of that Old Flannelmouth.\n- Did you see him?\n- No.\nDid he leave any sign?\nA little.\nHe was headed toward Junction City.\nBut you didn't follow him?\nJoey always was a nuisance.\nI was for dropping him in the river.\n- Why didn't you?\n- And get my brains shot out?\nYou've got to find a better reason to kill me.\nSuppose Concho didn't catch up with Joey in town and suppose the kid talked?\n- He won't talk.\n- Maybe not, but Concho ain't back.\nUnless he gets back, we won't know where they're carrying the money.\nThat's right.\nMaybe it'd be smart to let this one go through.\nWhy?\nWe've grabbed three in a row.\nLet's give them a breather.\nThat makes sense.\nI go along with Utica.\nYou and me both.\nWe ought to let this one go through.\nIt ain't going through!\nWhy not?\nYou're the one who taught me about payrolls and now I like them.\n- So do I.\n- I'll buy that.\nA man can get saddle-sore looking for a bank to take.\n- I'm with Whitey.\n- Me too.\nWhat about you, Torgenson?\nI got no complaints.\nYou call it, I'll play it.\nLooks like you've been outvoted.\nOr do you want a recount?\n- Right now, I'd rather have a drink.\n- Suit yourself.\nIf I can't buy a fight, I'll buy a drink.\nFill 'em up.\nSorry, the bar is closed.\nOn account of we're fresh out of whiskey.\nEither get this floor fixed or get a new bartender.\nWhen do we make the hit?\nAny time you're ready.\nShe was halfway up the grade when I left.\nWhy didn't you tell me?\nWhy didn't you ask me?\nFunny man!\nMount up!\nSettle down.\nIt's only another job.\nBut if you was boss, we wouldn't do it.\nIf I was boss we wouldn't do it.\nYou ain't boss!\n# So I bought myself a shovel and I bought myself a pick\n# And I laid a little track along the bullfrog crick\n# Then I built a locomotive out of 20 empty cans\n# And I tooted on the whistle and the darned thing ran\n# Oh, you can't get far without a railroad\n# You can't get far without a railroad\n# Something's gotta take you there and gotta bring you back\n# You can't go any distance in a buggy or a hack #\n(Train whistle)\nThrow some ropes around them timbers.\nWe'll pull it down.\nTorgenson!\n- OK, John.\n- Hurry it up, Jubilee!\n- Boy, they're pushing her fast today.\n- Yeah!\nMaybe they heard I needed a quick ten thousand.\n- That water tower your idea?\n- What's wrong with it?\nAny self-respecting Injun could walk away with it.\nFunny man!\nHe knows everything about everything.\nLet's get down and lock the barn door.\n- (Neighing)\n- We've stopped!\nWhitey's making his hit!\n- McLaine sold us out!\n- No, Ben.\nThey didn't learn it from Grant.\nLeary!\n- A hold-up!\n- They did it again!\nStop your moaning and hold on to your hat!\nThey won't stop old Tommy Shannon with a tank full of water.\nThat's no way to treat railroad property, Mr Shannon.\nTake your hand off the throttle and reach for the brake!\nAll right.\nSit down and behave!\nCome over here.\nOpen the safe!\n- Ha!\n- Move in!\nSame as last time!\n- We thought you were lost or drunk.\n- There ain't nothing in there.\n(Man) Jubilee!\nHow are you making out?\nTry to talk your way out of this!\n- I'm sorry I missed out with Renner.\n- Never mind.\nWhere's the money?\n- It's not in the safe.\n- Then where is it?\nIt could be going to Junction City with Jeff's men.\nThat's not true.\nRenner told us Jeff wouldn't carry the payroll!\nThat's a help.\nLeast we know who didn't carry it.\nFunny man!\nWhen you get through laughing, see what's in that red car.\nSure.\nGlad to.\nAs soon as I pick up my horse.\nHe's worth more than anything I'm gonna find on this train.\nGet those pilgrims out.\nMaybe one of them is carrying it.\nHit the other cars!\nSee if you can find it.\nOutside!\nAll of you!\nIs this what you wanted to tell me?\nHave a look inside, Latigo!\nIf that's McLaine...\nNo, Ben.\nPut it away.\nYou may as well be comfortable.\n- Be my guest.\n- Gladly.\nDo you mind if I ask the name of my host?\nNo, I don't mind.\nWould the payroll be in there?\nNo.\nWhy not take a look, just to be sure?\nBoy, is this stuff mellow.\nBottled in bond too.\n- I forgot.\nLadies is always first.\n- Thank you, no.\nSee for yourself.\nHello, Joey.\nWhat are you doing here?\nGetting robbed!\nDon't bother.\nNone of them's got more than two dollars.\nWhitey!\nThere ain't no payroll in there.\nHow come you missed out?\n- I had a little trouble.\n- Now, ain't that too bad?\n- Maybe I ought to give you a little more.\n- Whitey!\nKimball's back there with his wife.\n(Laughs)\nYou just got lucky!\nPut them back in the car!\n(Concho) Get aboard!\nGo on.\nGood little boys don't run away.\nThis time you'll learn!\n- Where's the payroll?\n- The man says he doesn't know.\nI can help him remember.\nTake her outside.\nTake her outside yourself.\nI'm afraid of women.\nThey scream and scratch, and sometimes step on your toes.\nDon't say no to me.\nNot when I got a gun in my hand.\nI won't.\nUnless I'm holding one too.\n- Outside.\n- If you want the payroll...\nYou'll have to wait for the next work train.\nWe decided not to send it through on this one.\nOh?\nI don't mind waiting.\nI'll be at Pay Load.\nYou can bring it to me.\nThen I'll take 12 hours' start, you get your wife back.\nSee what happens when you don't carry your brains in your feet?\nI ought to make you walk.\nJubilee, lead them out.\nStep up with Latigo.\n(Concho) What about Joey?\nYou gonna leave him here?\nHe'll ride with me.\nOr would you like to?\nSettle down.\nWe're getting $10,000 for the lady, remember?\nWhich one do I ride with?\n(Laughs) Which one do you think?\nTake her to the end of track, Mr Shannon!\n(Train whistle)\nHere's a stirrup.\nGive you a lift?\nI'll take that box.\nDon't crowd the cantle.\nYou'll ride easier.\nWhoa, mules!\nMust have got tired of making the climb and started home.\n- Come on, boy!\n- Just a minute.\nThere's a mining town near here.\nIt used to be called Pay Load.\nIt's still called Pay Load but nobody lives there.\n- It's over beyond that far hill.\n- Which hill?\n- You see the first hill?\n- Yes.\nSee the second one?\nThere's a third hill.\nPay Load's behind that.\n- How much do you want for this mule?\n- $50.\nFlap Ears, when you unload this piker, you come on home to mother.\n- Get outta there!\n- Gah!\nWelshing on a bet!\nNever could understand them railroad people.\nCome on!\nCome on!\n(Train whistle)\n- Mr Kimball.\n- Come over to the telegraph shack.\n- Before you pass.\nDid you bring the payroll?\n- Not now!\n- Did you bring it?\n- I didn't.\n- Now what?\n- The end of the railroad.\n- Shut up, Feeney.\n- Let go of me or I'll push this down your throat!\nWho wants your man?\nI don't want none of 'em!\nThey're all broke!\n- See you in Denver.\n- I'm off to Denver too.\n- So am I!\n- Nobody goes without orders from Kimball!\n- I'm leaving.\n- You are not.\nYou'll take no joyride in this town with them painted hussies.\nWe've waited this long.\nAnother night won't hurt us.\nBut if the money's not here in the morning, out we go!\nGet back to work!\n(Clicking)\nWe're beat, Mr Kimball.\nWithout the pay, the gang will go to Junction City.\n- I know.\n- Any word from Jeff?\nHe's in Junction City.\nSays the car held to the grade all the way.\nHe and his men will be after Whitey in...\nThey will not!\nTell him to stay right where he is until further orders.\nYes, sir.\nWonder if he thinks that's private property.\nIf he tries to divide that like he cuts up the loot, there's gonna be shooting.\n- Your laundry?\n- Sandwiches.\nDo you want one?\nNo.\nWhere did you get them?\nJunction City.\nA girl in a restaurant gave them to me.\n- Was she pretty?\n- Mm-hm.\n- Think you could get me a date?\n- She's not that kind of a girl.\nAny of you boys win enough to buy a drink?\n- You ain't got a drink.\n- I got a drink.\n(Clamouring)\n- I thought you was fresh out.\n- I was till we made the hit.\nWhile you looked for the payroll that wasn't there, I had important business.\n(Man) Come on, fill her up.\nLatigo ought to be running this bunch.\nWe might not eat, but we'd sure drink.\nHa ha!\nYou're a funny man.\nWhy don't you laugh?\n- Am I supposed to?\n- Not if you're smart.\n- I think you're smart.\n- And what else do you think?\nThat you made a mistake.\nShe'll only bring you trouble and guns.\nSince when is $10,000 trouble?\nThat's exactly what you're worth.\nYou're very flattering.\nBut I'm inclined to agree with you.\nDon't make a habit of it.\nLatigo, I want a drink!\nAnd you've got a few habits I don't like either.\nSettle down.\nDo you see what she's up to?\nI can see you.\nAnd what I see I don't like too good.\n- I guess you could use one.\n- Thank you, no.\n- It's the best.\nI got it off your own bar.\n- You drink it.\nSorry, lady, I don't drink.\nI'm studying to be a bartender.\n- Don't you drink?\n- Not alone.\nSuppose I join you?\n- Do you mind?\n- And if I do?\nDon't push it.\nFor a little while you're gonna need me and I'm gonna need you.\nI watched you walk.\nI could swear we've met before.\nCould you?\nFunny little things you do.\nLike when you smile.\nStrange.\nI seem to recognise all your mannerisms, if you know what that means.\n- I know what that means.\n- Do you?\nI'm supposed to fight Whitey over you.\nWith a little luck we'd kill each other.\n- It's an interesting thought.\n- What's interesting?\n- She is.\n- You're so right. (Laughs)\nI may not send you back.\nNot until you've helped me spend the ten thousand.\n- You mind if we join the party?\n- Yes!\nYou shouldn't, cos if you guess wrong you ain't gonna hang alone.\nYou like another drink?\n- Thanks, I still have this one.\n- Drink them both.\nAnybody want to start the dance?\nWith only one girl?\nGet back to the bar where you belong.\nLet's all get back to the bar, where we belong.\n- You almost got your wish.\n- One of them.\n- The other?\n- To know your name.\nHis name?\nHe's the Utica Kid.\nI don't like it either.\nMy family used to call me Lee.\nWhy don't you?\nYou're supposed to be outside.\n(Horse whinnies)\nCome out with your hands up.\n- What are you doing here?\n- I want to see the Utica Kid.\n- Who are you?\n- A friend of his.\nFunny thing, he never told me about no girlfriend.\n(Charlie) Is there any reason why he should?\n- What's your name?\n- Charlie Drew.\nAnd you can put that gun away.\nOr do I look dangerous?\nNot exactly.\n(Charlie yelps)\nGive me that rope.\n- When'd you get here?\n- Just before they rode in.\nUtica pulled the job off right on schedule.\nI suppose you've known it was going to happen for quite some time.\nNo, I haven't.\nUtica doesn't talk to me about jobs.\nNot this kind.\n- Did he ever have any other kind?\n- He will have.\nSoon.\nThen why don't you hold out?\nWhy don't you keep away till he stops being a thief?\nI told him that's what I'd do.\nHe just looked at me and smiled.\nHe said, \"I wonder if you can.\"\nTonight he has his answer.\nYou're here.\nYes, but only to tell him that you're...\nOnly to tell him I'm in town and might come looking for him.\nI want to keep him alive.\nI want to keep you alive.\n- You know what he can do with a gun.\n- I know.\n- Well, then, why?\n- Because of a little thing called self-respect.\nMaybe you wouldn't understand anything about that.\nFor five years I've played that thing for nickels and dimes thrown into a hat.\nFor five years the Utica Kid has been laughing.\nI may have been wrong, Charlie, but I'm not gonna make the same mistake twice.\nGrant...\nWhen you see him will you tell him that I'm here?\nLeave it alone!\nSo all she'll bring is trouble and guns, huh?\nDid you bring the money with you?\nNo.\n- How soon do we get it?\n- I wouldn't know about that.\nYou should!\n$10,000 is a lot of money.\nAnd that's what he wants for me.\nWell, I'd say he was selling out cheap.\nNever mind what you'd say.\nWhat did Kimball say?\nIf you don't know about the money, why did he send you?\nHe didn't send me.\nI came on my own.\nWhy?\n- Ask him.\n- Well?\nI wouldn't know.\nThen again, maybe I would.\nYou were right the first time.\nI can walk quiet at night and I'm a pretty good gun.\nI'd like to join up with you.\nYou see, when a man gets fired off the railroad, he has a little trouble finding a job.\nAnd when he can't find a job, he gets hungry.\nI've been hungry for the last five years.\nHaven't I?\n- (Whitey) How would he know?\n- I'm his brother.\n- His brother?\n- His younger brother.\nFive years ago he was a troubleshooter for Kimball.\nI lifted the feed herd and he came after me.\nThen gave you a horse to get away.\nBut not until I'd heard all about good and evil.\nI didn't buy what he had to sell then.\nI'm not buying it now.\n- (Whitey) So you don't want him in, huh?\n- No.\nFunny thing.\nI want him in.\n- Any objections?\n- It ain't that simple, Whitey.\nThere's a personal deal between me and him.\n- About what?\n- He got in my way.\nThat's right.\nOh, yeah, I remember you.\nYou're the man that fights kids.\nWhich way do you want it?\nGet up, come on, get up!\nNow one of you give him his gun.\nAll right, Harbin, you're the boss around here.\nYou call it.\nI might just do that.\nWell, I ain't gonna take him alone.\nThen maybe you'd better move along.\nAny further objections?\n- Yeah.\n- (Whitey) Now ain't that wonderful?\n- I'd be happy to call it.\n- You may get the chance.\nYou mind if the Utica Kid and me have a little talk?\nNot at all.\nCall me when you're ready.\nI think you ought to know I'm working for the railroad again.\nI figured as much.\n- Troubleshooter?\n- Tonight I was carrying the payroll.\n- Where did you hide it?\n- I gave it to the boy.\nIt's in that shoe box.\n(Laughs)\nNow all you have to do is go in and tell Whitey.\nYou're gambling I won't?\n- Same old story of good and evil.\n- Same old story.\nYou lose, Grant.\nYeah, I kind of figured that when you laughed.\nI'll give you the same break you gave me.\nTen-minute start, then I tell Whitey I sent you away.\nI go, that money goes with me.\nSo does Kimball's wife.\n- No.\n- Wait a minute, Lee.\nHear me out on this.\nIf I leave here, that boy goes with me too.\nJoey?\nWhy do you want him?\nMaybe for the good of his soul.\nIt's been a long time since you heard that word, hasn't it?\nMother and Dad used to bring it up once in a while when we were kids.\nYou were just about Joey's age.\nHe thinks a lot of you, doesn't he?\n- He wants to grow up to be just like you.\n- He may make it, with practice.\nSoon he'll be holding the horses while you and Whitey hit a bank.\nThere's another kid lying in the barn.\nHe got the start that way too, huh?\n- You didn't kill Howdy?\n- I didn't hurt him.\n- And you're not going to hurt Joey.\n- How could I do that?\nIt's not hard.\nIt's not hard.\nNot when he takes your road.\nOr haven't you stopped to look at it?\nWhy bother?\nI picked it, I'll ride it.\nLee, I'm asking you again.\nGive Joey a chance.\nNo.\nYou've got ten minutes.\nI won't need them.\nCharlie's in there waiting for you.\nThink about her.\nShe's been following you for five years too.\nShe's got a reason.\nOr didn't I tell you I'm gonna marry her?\nHow much of that did you hear?\nJust what I wanted to hear.\nThat you're gonna marry me.\nWhen?\nWe're gonna have a lot of money, Charlie.\n$10,000.\nYou can have pretty new dresses and pretty new shoes.\nAnd a brand-new husband.\n- Tomorrow.\n- No.\nRight now!\nIf you want me, take me away right now.\nPlease, please take me.\nWhy the sudden hurry?\nHas my big brother been telling you the story of good and evil?\nDon't laugh at him.\nWhy not?\nWhy mustn't I laugh at him?\nMaybe it would be better if... if you tried to be a little more like him.\nNow isn't that just great?\nNow I get it from you!\nEver since I was a kid that's all I can remember.\n\"Why don't you be more like your brother?\nWhy can't you be more like Grant?\"\nI don't want to be like him.\nI don't want any part of him.\n- That's not true.\n- Yeah, it's true!\nYou don't know what it's like to be the kid brother.\nEverything you do is wrong.\nEverything you try.\nUntil one day I tried a gun.\nFit my hand real good.\nAnd I wasn't the kid brother any more.\nIt's a good gun.\nIt's gonna get us everything we always wanted.\nBut I don't want it.\nNot that way.\nWhy must you steal?\nBecause I like to steal.\nI like to see what people will do when I take it away from them.\nWhat happens when something is taken away from you?\nNobody's gonna take anything away from me.\nCharlie, I'm asking you to marry me.\nNo.\nGrant was right.\nYou'll never change.\nAnd he calls me a thief?\nJoey.\nGo on.\nPlay some more.\nIt's been a long time since I heard an accordion.\nAny tune in particular?\nOr would this do?\n(# You Can't Get Far Without A Railroad)\n# Oh, you can't get far without a railroad\n# You can't get far without a railroad\n# You gotta have an engine and you gotta have a track\n# Oh, you can't get far without a railroad\n# There are tracks across the prairie\n# Where the buzzard builds his nest\n# There are tracks across the Rockies\n# To the Golden West #\nHow does it go from there?\nHow does it go from there, Lee?\nEverybody will be neighbours\nIn this little dream of mine\nTake you clear across the country\nOn the Bullfrog Line\n# Oh, you can't get far without a railroad\n- # You can't get far without a railroad #\n- Gentlemen!\n- Renner!\n- Didn't you know he was working for me?\n- I've come for my thousand dollars.\n- What thousand dollars?\nYour memory is quite short.\nI supplied you with information about a certain boxcar.\nI was prepared to supply you with information about the payroll.\n- Concho did not keep the appointment.\n- So?\nSo ten per cent of the payroll is mine.\nSorry to disappoint you but we missed the payroll.\nMissed the payroll?\nIn that case I'm prepared to make a better deal.\nFor $2,000, I can tell you where the money is.\nYou made a deal.\nBen Kimball hired a man to carry it.\nI might never have located this place if I hadn't heard that man's accordion.\nHe has the money.\nAsk him!\nJoey!\nCome here, Joey!\n(Verna) Grant!\n(Whitey) McLaine, there's a woman with you!\n- That's right.\n- Send her out before we come get you.\nHere, hurry!\nCome on, Charlie.\nHe's in the clear.\nHe's riding away.\nYeah, he's riding.\nAfter me.\n- (Man) What are we stopping for?\n- We're going to the mill, the short way.\nGet down to the mill!\nCome on!\nTake cover!\nHere.\nThere's a mine shaft at the end of these cables.\nIt runs clear through the mountains.\nOn the other side, about half a mile, is the railroad!\nIt's two hours to the end of track.\nI have to send you out one at a time.\nCome on, Verna.\n- Tell Ben he'll get his payroll somehow.\n- I'll tell him more than that.\nYou'll get that money even if you had to kill your own brother?\nThe next ore bucket that comes down, pull it around and jump in.\nI'll cover for you.\nIt's clear, Charlie.\nGet out!\nSee if you can reach him from over there.\nHe can't stand them off, not alone.\nYou figuring to help?\nGrant!\nLook out!\nHe's real good.\nOnly one better gun in Colorado.\nCharlie!\nGet over here!\n- I thought I told you to get out.\n- I'm staying right here.\nAll right.\nNow you get back inside and I'll cover for you.\nThanks, Charlie.\nLee, not the kid!\nYou take care of the kid.\nI'll see if I can keep them pinned down.\nWould you mind if I play big brother just this one time?\n- Shoots high.\n- You or the gun?\n- Joey all right?\n- He's all right.\nThat makes you a winner.\nGo ahead and make a sucker out of the kid.\nTell him all about good and evil.\nPut him to work on the railroad.\nThings get tough, he can always play the accordion for nickels and dimes.\nSounds like old times, Lee.\nWelcome home.\nDon't give me that big brother grin.\n- Up there!\n- Get him!\n(Clicks)\nI count mine.\nThere's one left.\nHe hit you hard, Lee.\nNot half as hard as you did with that Bullfrog Line.\nThat was Dad's favourite tune and you know it.\nI know it.\nYou and your stinking accordion!\nCharlie.\nCharlie?\nYou and Joey get the horses.\nWhat...?\nI'll take care of my brother.\n(Train whistle)\nHere's your money.\nPay 'em off, Tim.\nThank you, Grant.\nLooks like you won yourself a job.\nMine.\nNo, it won't fit.\nNot nearly as well as your coat.\nWant your old job back?\nThanks.\nAll right, Joey.\nGet a bucket and start carrying water.\nWe're at end of track.\nNow go on.\n# Sometimes I feel like I could jump over the moon\n# And tell the sky above\n# Does it matter how full the moon\n# When you've an empty heart\n# Follow the river\n# Wherever you may be\n# Follow the river back to me\n♪ Follow the river ♪\n♪ The river knows the way ♪\n♪ Come to me, I pray ♪\n♪ I miss you more each day ♪\n♪ Follow the river ♪\n♪ Wherever you may be ♪\n♪ Follow the river back to me ♪\n♪ Sometimes I feel like ♪\n♪ I could jump over the moon ♪\n♪ And tell the sky above ♪\n♪ Does it matter how full the moon ♪\n♪ When you've an empty heart ♪\n♪ Bring back the great love ♪\n♪ The love that once we knew ♪\n♪ Make my dreams come true ♪\n♪ The dream I had with you ♪\n♪ Follow the river ♪\n♪ Wherever you may be ♪\n♪ Follow the river back to me ♪\n♪ Follow the river ♪\n♪ Wherever you may be ♪\n♪ Follow the river back to me ♪\nI'd better get back to work.\nDon't lose all your matches.\n- Hello, Mac.\n- Hi, Click.\nHowdy, folks.\n- Hi.\n- Hello.\nWelcome home, man.\nCome sit down and give us a tune.\n- We'll pay you with promises.\n- A man can't eat promises.\nHe can't lose them at cards either.\nMcLaine!\n- No, indeed he can't.\n- Where have you been and why?\nThey were laying track in Wyoming.\nNeeded a troubleshooter.\n- Didn't need me.\n- That's too bad.\nYou can pick up a few nickels and dimes playing your accordion.\nThat's right, Tim.\nWhat's this?\nPlaying cards with matches?\nWhen's payday?\nTomorrow, if they get the money past Whitey Harbin.\nWhich they won't.\nHe's tapped that pay train three times up.\nThey'll get it past him or get no more steel before snow.\n- O'Brien, shut your mouth!\n- My sentiments exactly.\nDay shift and night shift, night shift and day shift.\nNo money in a month.\nMy patience is ended.\nSo is their rail road.\nAm I right?\n- You are right!\n- McLaine.\nPlease play me a peaceful tune or I'll have a revolution on my hands.\nI see what you mean.\nAre they giving you trouble?\nLucky you're not with the rail road.\nTis a weary man you'd be today if you were troubleshooting for us.\nCould be you're right, Tim.\nCome on, pretty lady.\nGive us a dance!\nI dare you, Mr Feeney.\nWhere's the wife?\nCome on!\nBig Ed, are you through to Junction City?\nThis is for Kimball.\nAs per your instructions, this is to advise you that Grant McLaine is here at end of track.\nYou don't need that last.\nJust say he's here.\nGet away from him!\nGet away from him!\nDancing, is it?\nLet me...\nGet back into your tent where you belong, you painted women.\nYou and your rail road.\nBringing the likes of this among decent folk.\nFor two cents I'd take me old man back to Junction City and be through with you.\nIf you had two cents!\nThey're at it again.\nYou can't mix wives and women, even to build a rail road.\nStop this shilly-shally music and give me a jig I can dance to.\nGive us a jig, I said.\nYou watch your feet.\nThey're heavy.\nAnd so is my fist.\nDo I get a jig or do you lose your teeth?\nNot now, Mac, not now.\nHe's not bad.\nHe's just a fool.\nConsider yourself lucky.\nFive years ago you'd have got a bullet between the eyes.\nI've seen him kill men that could eat you without salt.\nPlay what you please.\n- You asked for a jig, now dance to it!\n- Here I go, Feeney!\nHee-hee!\nUP Garryowen!\n♪ I was farming in Missouri ♪\nI was getting tired of that ♪\n♪ So I bought myself a satchel ♪\n♪ and a stovepipe hat ♪\n♪ And I headed for the station ♪\n♪ gonna travel all about ♪\n♪ But there wasn't any station ♪\n♪ and I soon found out\n♪ That you can't get far without a rail road ♪\n♪ You can't get far without a rail road ♪\n♪ Something's gotta take you there ♪\n♪ and gotta bring you back ♪\n♪ Oh, you can't go any distance ♪\n♪ in a buggy or a hack\n♪ You can't get far without a rail road ♪\n♪ You can't get far without a rail road ♪\n♪ You gotta have an engine ♪\n♪ and you gotta have a track ♪\n♪ Oh, you can't get far without a rail road ♪\nI haven't heard that one.\nWhere does it come from?\nDad used to play it when it got too rough around the house.\nPretty soon us kids would stop fighting and start dancing.\nThe man makes fine music.\nAre we gonna let them use it all up?\nGo on with you!\nClarence Feeney, stop looking at them painted hussies and give your wife a dance.\n- Go away, woman, I'm tired.\n- Tired, is it?\nThis is my day for dancing or fighting.\nWhich will you have?\nDarling.\nNice work.\nI'll give you five dollars tomorrow.\nIf Whitey lets the pay train through.\nThree times is enough.\nHe won't hit it again.\nOh, don't bet on it.\nHe's a strange man, this Whitey Harbin.\nHe's got the big boss plenty worried.\nSpeaking of Kimball, he wants to see you.\n- How would he know where I am?\n- I told him.\nHere.\nYou read it.\nI'm afraid if I stop the music,\nMrs Feeney'll hit me with something.\n\"Report to me at once in Junction City.\nUrgent.\nBen Kimball.\"\n- Maybe he'll give you...\n- Another chance?\nNo.\nThat's not his way.\n- But you will see him?\n- Not till they've finished their dance.\n- You old hag, I'll...\n- Painted hussy!\nLet go of me!\nLet go!\nLet her go, I said!\n- Hold this.\n- Right.\nAnd this is the tune your father used to play to keep peace in the house?\nI must have squeezed out a few wrong notes.\nYeah.\n- Thanks, Tim.\n- Goodbye, Mac.\n- Too late for coffee, mister?\n- Howdy.\nI think there's a few warm dregs left.\n- Oh.\nHowdy, ma'am.\n- Step down.\nMuch obliged.\n- They keeping you busy?\n- Yep.\nPacking out the ore and packing in the vittles.\nThem miners can eat more beans than they raise in all of Boston.\n- Now they want me to bring in a mill.\n- All at once?\nNo, just a few pieces at a time.\nThey got tired of waiting for the rail road to reach them.\nBetween you and me, I don't think it will before snow.\nYou're hoping it won't?\nFirst I was.\nFigured it'd put me out of business.\nIt won't.\n- It won't?\n- No.\nIt's a funny thing about gold.\nThere's always some jackass will find it where the rail road ain't.\nThen he'll send for me and a few more jackasses to bring in his grub and pack out his ore!\nThem crazy miners!\nLook at the waste of that good machinery.\nTwo miles of cable and buckets to go with it.\nLast week they up and left the whole thing!\nDid the vein pinch out or did they hit low grade?\nThey didn't hit nothing but blue sky.\n- This was mighty fine coffee, Mrs...\n- Miss Vittles.\nMiss Vittles.\nI sure appreciate it.\n- I got a long ride ahead of me.\n- You heading for Junction City too?\nYes, ma'am.\nBut I'm kind of in a hurry.\nI ain't looking for company.\nTen jackasses in a bunch is enough.\n- I can save you a trip round the mountain.\n- How's that?\nLike I told you, the boys hit a good vein, followed it through the mountain.\nLast week they busted out on the far side and there wasn't nothing there but blue sky.\nMakes a mighty fine shod cut into town.\n- It sure does.\n- Still think I'm crazy?\nI think you're real pretty.\n- You going to spend time in these hills?\n- Yes, ma'am.\nWhen snow comes you're gonna need a woman.\nOr a warm coat, else you'll freeze your knees.\nWell, I can't rightly afford a warm coat.\nSo long, Miss Vittles.\nPeople wonder what a calf feels when he gets roped.\nNow you can tell 'em.\nWhat for are you mixing in?\nMaybe I don't like to see kids get hurt Break any bones, son?\nHe's got a knife behind his collar!\n- There's a stirrup.\nYou want a lift?\n- No.\n- Why not?\n- I'm beholden to you, mister.\nCouldn't we just leave it that way?\n- Morning.\n- Morning.\n- Put him up?\n- For how long?\n- I wouldn't know.\n- It'll be two bits for oats.\n- Ain't I seen you before?\n- Depends on where you've been.\n- I follow the rail road, mostly.\n- Could be you've seen me.\n- It'll be four bits if he stays the night.\n- Fair enough.\nMorning.\nDid a man ride in today - tall, son of heavyset?\n- You mean him, Mr Renner?\n- Not him.\nThis one had a scar.\nAlong his cheek?\nNo, sir.\nI don't see no man with a scar.\nI guess maybe I can have some apple pie and coffee.\nI guess you could have eggs with bacon if you wanted eggs with bacon.\n- Hello, Charlie.\n- Hello, Grant.\nIt's good to see you, Charlie.\nIt's awful good to see you.\nIt's good to see you too.\n- I'll get the eggs.\n- No, get the pie.\nI can pay for the pie.\nYou're a very stubborn man.\nApple pie is not for breakfast.\nIt is if you like apple pie.\nNow I need a fork.\n- Working here long?\n- About three weeks.\nHow's the Utica Kid?\nHe was well... when I saw him last.\nWhen was that?\n- Good morning.\n- Morning.\nWell, business is early and Pete is late.\nThe lunches.\nAre they fixed?\nWhy do I ask?\nThe lunches are always fixed.\nWhy?\nBecause you fix them.\nCharlie, I'll make you an omelette like only Pete can make an omelette.\nVery bad.\nCome on around, sit down, have a cup of coffee.\nPete had that place in Santa Fe, remember?\nAre you running a shoe store on the side?\nThose are box lunches for the work train.\nMoney, money, money.\nPete knows how to make it.\nHe follows the rail road.\nI guess a lot of people follow the rail road.\nYou and Pete.\nThe Utica Kid.\nI asked when you saw him last.\nThey've lost three payrolls.\nNow when did you see him last?\n- Charlie, where did I put my apron?\n- It's under here.\nYou must be nice fella.\nIf Charlie sits with you, you must be nice fella.\nI make omelette for you too.\nWe were talking about the Utica Kid.\nHe can wait.\nBen Kimball's in town.\nThey put his car on the siding yesterday.\n- I know.\n- His wife is with him.\nIs she?\nI often wondered what Verna was like.\nI saw her last night.\nAll fine silk and feathers.\nShe's soft and beautiful.\nAnd I can understand now.\nCan you?\nHow long are you gonna be in town?\n- That depends on Ben Kimball.\n- You working for the rail road again?\n- if I am?\n- That would be good.\nPlaying the accordion's not for you, not for a living.\nYou belong to the rail road and it belongs to you.\nThere were a lot of things that used to belong to me and somehow I lost them.\nTwo omelettes a-comin' up.\n- Do you like eggs?\n- No.\nThat's too bad.\nYou got an omelette coming up.\nWell, somebody's gotta eat them.\nCome on.\nThat means you.\n- Could you put it in a box?\n- An omelette?\nI'll be hungrier when I get to end of track.\nMaybe it will go down easy.\nEasy or not, it goes down right now.\nI can't pay for it.\nThen you can help me sell lunches at the station.\nAny more arguments?\nCome in.\n- You want to see me, Ben?\n- I certainly do.\nHello, Grant.\nSit down.\nAll right, Jeff.\nRenner, go to Pete's and get one breakfast and a jug of coffee.\n- You haven't eaten yet?\n- I've eaten.\nJust get coffee.\nHot.\n- How's everything been going?\n- I make a living.\n- Playing an accordion?\n- That's right.\nWant me to play a tune for you?\nThere's other jobs besides railroading.\nWell, Colorado may be big in miles.\nIt's kinda shod on people.\nSo when a man gets fired the way I was fired the story gets around.\nWell, I'm...\nI'm sorry.\n- No, I like to make music.\n- And it keeps you near the rail road.\nIf someone needs information about a payroll, you can sell it.\nYou know it's a funny thing.\nI don't like you either.\n- Is that why you sent for me?\n- No.\nAnd keep out of this.\nHave it your way.\nBut I don't trust him now any more than I did when I sent him after the Utica Kid.\nI sent you after a thief and you gave him a horse to get away on.\n- I told you to keep shut.\n- Let him talk.\nI'm not wearing a gun.\nI'll be honest with you.\nHe'd talk the same if I was.\n- It's been nice seeing you.\n- Grant.\nI'm sure Jeff didn't mean to be rude.\nSometimes he has a blunt way of putting things.\nUnfortunately, Ben isn't much better.\nIt's not unfortunate.\nIt just gets things said in a hurry.\nToo much of a hurry.\nThey forgot to ask you if you'd work for the rail road again.\nWould you?\nYes, I would.\nNot to give you a short answer.\n- It's the answer I wanted.\n- Sit down, Grant.\nDo you remember Whitey Harbin?\nUsed to work down in Arizona and New Mexico.\n- Yeah.\n- Well, he's moved into Colorado.\nI thought he favoured stage lines and banks.\nSo did we.\nBut he's learned about rail road payrolls\n- and he's grabbed three in a row.\n- Where do I fit in?\nThey're making up a supply train in the yard.\nI want you to ride it.\n- With $10,000 in your pocket.\n- Why me?\nQuite frankly, because no one would suspect you of carrying a payroll.\nI sure don't look like $10,000, do I?\nAre you building a bridge you don't need?\nThe money's here.\nWhy not bring the men in on Saturday and pay them off in town?\nAnd lose half the crew?\nTurn them loose in a mining town, they'll go up the hills looking for gold.\nIt won't work.\nAnd we have to finish this section before snow comes.\nThat's a pretty big gamble on a man who gave his horse to a thief!\nYes.\nYou might as well know the deck's stacked against you.\nA boxcar will be hooked to the train.\nI'll be one of the men in it.\n- When did this happen?\n- Last week.\n- Renner, did you know?\n- Yes.\n- Why didn't you tell me?\n- I told him not to.\n- Why?\n- Everything we plan gets back to Whitey.\n- You think I'd tell him?\n- You might trust the wrong people.\n- If he takes the job, I'm sure of it.\n- And if I don't take it?\nThen Jeff will be sitting in Ben's chair.\nOh, I wouldn't like that.\nSo I'll take the job on one condition.\nIf I make the delivery I get his job.\nYou made a deal.\nThank you.\nWait a minute.\nIt's getting cold up in the hills.\nThis coat has always been too long for me.\nThanks.\nWell.\nI thought you didn't like him.\nHe said that.\nI said I didn't trust him.\nAnd I still don't.\nGrant.\nAre you surprised Ben sent for you?\nI was until I talked to him.\nHe seems to have changed.\nYou're right.\nHe doesn't belong in a private car with clerks, figures and pressure from the office.\nHe belongs at the end of track, running a gang and building a rail road.\n- He's a working stiff like you.\n- Yes, but he can dream a little too.\nColorado wouldn't have a rail road if he hadn't sold them on the idea.\nFor his sake, I wish he hadn't.\nHe was happy at end of track but they kicked him upstairs and sent us to Chicago.\n- And now he needs a little help.\n- That's why he sent for you.\nOh, I may have had something to do with it.\nWhy?\nThere was a time when you were interested in me.\nI was more than interested in you.\nI wanted to marry you.\nTimes when I'm sorry you didn't.\nAren't you?\nNo.\nA man likes to know his woman will back him when he's down and you didn't.\nBen called me a thief and you went right along with him.\nIt's as simple as that.\nGrant.\nFor old times' sake.\nFor old times' sake?\nJust that and nothing more?\nPerhaps just a little more.\nWe want to be sure that payroll goes through, don't we?\nI don't know.\nMaybe Jeff is right.\nHis type seldom changes.\nAnd if we've made a mistake, it's the finish of everything.\nThen why not cut this car into the supply train?\nIf we're all playing showdown, I'd like to see the cards when they fall.\n- Thank you.\nI hope you have a nice trip.\n- Thank you.\nMa'am, is that all?\n- Here's your lunch.\nYou've earned it.\n- Thanks.\n- Mister, are you going to end of track?\n- Yes.\nCould you stake me to a ticket?\nI can ride half fare if I'm with an adult.\n- And you're an adult.\n- Well, sometimes I wonder.\nAll right.\nYou can come along.\nWe'll ride with the other fellas with no money.\n- On the flatcar?\n- Go on.\nClimb aboard.\nPlenty of fresh air.\nDo you good, make you grow.\nAre you sure he didn't come while I was away?\nAin't nobody been here but the man riding the sorrel.\n- What color horse your man riding?\n- How should I know?\nIt's extremely important that I see him.\nThey've cut in Mr Kimball's car.\nBarley!\nA man told you to put his horse up...\nDon't start that too.\nThat there sorrel is the only horse what come in.\nThat there sorrel is the horse I want.\nHe belongs to my friend Grant McLaine.\nMcLaine?\nThat's who it is.\nI knew him as a troubleshooter in Santa Fe before he went bad.\n- He didn't go bad.\n- What'll you do with his horse?\n- Ride him!\nI'll change, you saddle him.\n- All right.\nHey, Pilgrim!\nCome here!\nDon't go getting your liver all upset.\n- Once you miss 'em, they stay missed.\n- It's none of your business.\n- Could be.\nYou wanting to get on that car?\n- If I am?\n- I can take you to where it's going.\n- On one of these?\nThey'll get you to end of track before the train does.\n- That's ridiculous.\n- $100 again yours I'm right.\n- You've got a bet.\n- And you got stuck.\nHere.\nI'll let you ride Flap Ears.\n- You can smoke inside, mister.\n- I can smoke where I want.\nYou can burn too if it pleases you but it'll still cost you four bits.\n- For what?\n- Traveling first-class.\nOtherwise ride the flats.\n- You play that?\n- Yeah, I play it.\n- When?\n- When?\nWhenever somebody throws a dime in my hat.\n- I ain't got a dime.\n- This one's on me.\n- Been up here before?\n- Pad way.\n- What takes you to end of track?\n- A job.\nFigured I'd get one at Junction City.\nThey told me the foremen do the hiring.\nYou're a little small for swinging a sledge.\n- I can carry water.\n- Yeah, you can carry water.\n- Very important job.\n- Hey!\n- What are you doing here?\n- He's with me, Pick.\n- Where did you get him?\n- Somebody threw him away.\nDon't you throw him away.\nHe'll get lost in the mountains.\nWho tells the men who build rail roads how to get through the mountains?\nThe river.\nThey just follow the river.\n- Who told you that?\n- I guess my dad was the first.\nHe had a little song about it.\n♪ Follow the river ♪\n♪ The river knows the way ♪\n♪ Heads can go astray ♪\n♪ It happens every day ♪\n♪ Follow the river ♪\n♪ Wherever you may be ♪\n♪ Follow the river back to me ♪\nWouldn't you wanna be knowing about Concho?\n- Who's Concho?\n- The man you roped.\nDo you wanna know?\nNot unless you wanna tell me.\nI ought to tell you.\nHe's fast with a gun.\nOnly know two men who are faster.\nWhich two men would they be?\nWhitey Harbin for one.\nI run away from Whitey.\nThat's why Concho was after me.\nYou're one of Whitey's men?\nNo.\nI was in Montrose.\nWhitey and his bunch were robbing a bank.\nI was just in the road watching.\nWhitey was all for killing me but the other fellow wouldn't let him.\nHe swung me up into the saddle and said,\n\"You ain't killing a kid.\nNot while I ride with you.\"\n- Whitey, he backed down.\n- Cos the fella's faster with a gun?\nLike lightning.\nThis other fella, does he have a name?\nHe's got a name.\nThe Utica Kid.\nI'd have stayed with the bunch if he was boss.\n- But he's not?\n- Not yet.\nAlways he's shoving pins into Whitey, laughing at him, driving him crazy.\nEven crazier than he is!\nSomeday Whitey will crack and he'll lose.\nIs this the fresh air you were talking about?\nHow come them fellas can ride inside?\nWell, it's the old story of good and evil.\nIf you spend all your money on whiskey, you have none left for a ticket.\nDon't drink.\nThen you'd have six bits when you need it.\nThat's very true.\nTell you what, maybe I have six bits.\nYeah.\nWhat do you say we go in and spend it?\nCome on.\nGuess I wasn't tough enough to follow the river that way.\nSometimes it isn't easy traveling upstream.\n- That will be a dollar.\n- That'll be six bits.\nI'm the adult.\nHere.\nHold on to that.\n- Don't worry about Concho.\n- You would if...\nOh, no, come on.\nSit down.\nWe can both worry together if you want to tell me about it.\n- It's nothing.\n- And if it was, you'd rather not say.\nAll right.\nI broke with Whitey.\nDoesn't mean I have to talk.\nNo, you don't have to talk.\nI even broke with the Utica Kid.\n- Hi, Utica.\n- Put him away, Howdy.\nSure.\nCome on.\nIt's a pretty good rig.\nToo good for the guy that owned it.\nRemember that draw you taught me?\nIt worked.\nHe went down with his gun in the leather.\n- And now you're an \"in case\" man.\n- In case?\nYeah.\nIn case you miss six times with one, you draw the other.\n- If you have time.\n- I'll have time.\nCall it.\nDraw!\nYou better learn to draw that one before you fool around with the other.\nAbout three inches high, Whitey.\nYou better take another look at that skull.\nNext time it could be yours.\nDon't soft-foot up behind me!\nIt makes me nervous!\nSo I notice.\nWhat else did you notice?\nDid you see Concho?\n- Did you see him?\n- He wasn't on the trail.\nDid I ask you where he wasn't?\nI asked you did you see him?\n- I would've said so.\n- Not straight out you wouldn't.\nBecause you're a funny man.\nYou've always gotta be laughing inside.\nWell, go ahead, laugh.\nBut get this, Kid.\nI'm a better gun than you.\nOr would you like to try?\nIt's an interesting thought, but I'm afraid of you, Whitey.\nYou ain't afraid of me.\nAnd in your feet, where your brains are, you think maybe you're just a bit faster.\nAnd you know something?\nIt could be.\nBefore you break up completely, you mind putting a name on this?\nIt's just a little old wedge.\nBut when you put it through the latch of a boxcar, you can't open the door from the inside.\nNow, you ask me, who would want to open the door of a boxcar from the inside?\n- Jeff Kurth and a dozen gunmen.\n- How would you know?\nI was sleeping up there when Concho told you.\nYou better learn how to snore!\nYou wouldn't know how to shoot a man in the back.\nI'll learn.\nWhat'll it be, gents?\nWe got Old Grandpa, Old Grandma, Old Uncle Tom.\n- And Old Empty.\n- You ain't funny, Latigo.\nWho could be funny, sweating it out in here?\nGet away, boy.\nYou're too young for whiskey even if we had plenty.\nDon't get fancy.\nYou ain't talking to Joey.\nSpeaking of Joey, you didn't happen to spot him along the trail, did you?\nI'll take a shot of that Old Flannelmouth.\n- Did you see him?\n- No.\nDid he leave any sign?\nA little.\nHe was headed toward Junction City.\nBut you didn't follow him?\nJoey always was a nuisance.\nI was for dropping him in the river.\n- Why didn't you?\n- And get my brains shot out?\nYou've got to find a better reason to kill me.\nSuppose Concho didn't catch up with Joey in town and suppose the kid talked?\n- He won't talk.\n- Maybe not, but Concho ain't back.\nUnless he gets back, we won't know where they're carrying the money.\nThat's right.\nMaybe it'd be smart to let this one go through.\nWhy?\nWe've grabbed three in a row.\nLet's give them a breather.\nThat makes sense.\nI go along with Utica.\nYou and me both.\nWe ought to let this one go through.\nIt ain't going through!\nWhy not?\nYou're the one who taught me about payrolls and now I like them.\n- So do I.\n- I'll buy that.\nA man can get saddle-sore looking for a bank to take.\n- I'm with Whitey.\n- Me too.\nWhat about you, Torgenson?\nI got no complaints.\nYou call it, I'll play it.\nLooks like you've been outvoted.\nOr do you want a recount?\n- Right now, I'd rather have a drink.\n- Suit yourself.\nIf I can't buy a fight, I'll buy a drink.\nFill 'em up.\nSorry, the bar is closed.\nOn account of we're fresh out of whiskey.\nEither get this floor fixed or get a new bartender.\nWhen do we make the hit?\nAny time you're ready.\nShe was halfway up the grade when I left.\nWhy didn't you tell me?\nWhy didn't you ask me?\nFunny man!\nMount up!\nSettle down.\nIt's only another job.\nBut if you was boss, we wouldn't do it.\nIf I was boss we wouldn't do it.\nYou ain't boss!\n♪ So I bought myself a shovel ♪\n♪ and I bought myself a pick ♪\n♪ And I laid a little track along the bullfrog crick ♪\n♪ Then I built a locomotive out of 20 empty cans ♪\n♪ And I tooted on the whistle ♪\n♪ and the darned thing ran ♪\n♪ Oh, you can't get far without a rail road ♪\n♪ You can't get far without a rail road ♪\n♪ Somethings gotta take you there ♪\n♪ and gotta bring you back ♪\n♪ You can't go any distance ♪\n♪ in a buggy or a hack ♪\nThrow some ropes around them timbers.\nWe'll pull it down.\nTorgenson!\n- OK, John.\n- Hurry it up, Jubilee!\n- Boy, they're pushing her fast today.\n- Yeah!\nMaybe they heard I needed a quick ten thousand.\n- That water tower your idea?\n- What's wrong with it?\nAny self-respecting injun could walk away with it.\nFunny man!\nHe knows everything about everything.\nLet's get down and lock the barn door.\nWe've stopped!\nWhitey's making his hit!\n- McLaine sold us out!\n- No, Ben.\nThey didn't learn it from Grant.\nLeary!\n- A hold-up!\n- They did it again!\nStop your moaning and hold on to your hat!\nThey won't stop old Tommy Shannon with a tank full of water.\nThat's no way to treat rail road property, Mr Shannon.\nTake your hand off the throttle and reach for the brake!\nAll right.\nSit down and behave!\nCome over here.\nOpen the safe!\n- Ha!\n- Move in!\nSame as last time!\n- We thought you were lost or drunk.\n- There ain't nothing in there.\nJubilee!\nHow are you making out?\nTry to talk your way out of this!\n- I'm sorry I missed out with Renner.\n- Never mind.\nWhere's the money?\n- It's not in the safe.\n- Then where is it?\nIt could be going to Junction City with Jeff's men.\nThat's not true.\nRenner told us Jeff wouldn't carry the payroll!\nThat's a help.\nLeast we know who didn't carry it.\nFunny man!\nWhen you get through laughing, see what's in that red car.\nSure.\nGlad to.\nAs soon as I pick up my horse.\nHe's worth more than anything I'm gonna find on this train.\nGet those pilgrims out.\nMaybe one of them is carrying it.\nHit the other cars!\nSee if you can find it.\nOutside!\nAll of you!\nIs this what you wanted to tell me?\nHave a look inside, Latigo!\nIf that's McLaine...\nNo, Ben.\nPut it away.\nYou may as well be comfortable.\n- Be my guest.\n- Gladly.\nDo you mind if I ask the name of my host?\nNo, I don't mind.\nWould the payroll be in there?\nNo.\nWhy not take a look, just to be sure?\nBoy, is this stuff mellow.\nBottled in bond too.\n- I forgot.\nLadies is always first.\n- Thank you, no.\nSee for yourself.\nHello, Joey.\nWhat are you doing here?\nGetting robbed!\nDon't bother.\nNone of them's got more than two dollars.\nWhitey!\nThere ain't no payroll in there.\nHow come you missed out?\n- I had a little trouble.\n- Now, ain't that too bad?\n- Maybe I ought to give you a little more.\n- Whitey!\nKimball's back there with his wife.\nYou just got lucky!\nPut them back in the car!\nGet aboard!\nGo on.\nGood little boys don't run away.\nThis time you'll learn!\n- Where's the payroll?\n- The man says he doesn't know.\nI can help him remember.\nTake her outside.\nTake her outside yourself.\nI'm afraid of women.\nThey scream and scratch, and sometimes step on your toes.\nDon't say no to me.\nNot when I got a gun in my hand.\nI won't.\nUnless I'm holding one too.\n- Outside.\n- If you want the payroll...\nYou'll have to wait for the next work train.\nWe decided not to send it through on this one.\nOh?\nI don't mind waiting.\nI'll be at Pay Load.\nYou can bring it to me.\nThen I'll take 12 hours start, you get your wife back.\nSee what happens when you don't carry your brains in your feet?\nI ought to make you walk.\nJubilee, lead them out.\nStep up with Latigo.\nWhat about Joey?\nYou gonna leave him here?\nHe'll ride with me.\nOr would you like to?\nSettle down.\nWe're getting $10,000 for the lady, remember?\nWhich one do I ride with?\nWhich one do you think?\nTake her to the end of track, Mr Shannon!\nHere's a stirrup.\nGive you a lift?\nI'll take that box.\nDon't crowd the cantle.\nYou'll ride easier.\nWhoa, mules!\nMust have got tired of making the climb and started home.\n- Come on, boy!\n- Just a minute.\nThere's a mining town near here.\nIt used to be called Pay Load.\nIt's still called Pay Load but nobody lives there.\n- It's over beyond that far hill.\n- Which hill?\n- You see the first hill?\n- Yes.\nSee the second one?\nThere's a third hill.\nPay Load's behind that.\n- How much do you want for this mule?\n- $50.\nFlap Ears, when you unload this piker, you come on home to mother.\nGet outta there!\nWelshing on a bet!\nNever could understand them rail road people.\nCome on!\nCome on!\n- Mr Kimball.\n- Come over to the telegraph shack.\nBefore you pass.\nDid you bring the payroll?\nNot now!\n- Did you bring it?\n- I didn't.\n- Now what?\n- The end of the rail road.\n- Shut up, Feeney.\n- Let go of me or I'll push this down your throat!\nWho wants your man?\nI don't want none of 'em!\nThey're all broke!\n- See you in Denver.\n- I'm off to Denver too.\n- So am I!\n- Nobody goes without orders from Kimball!\n- I'm leaving.\n- You are not.\nYou'll take no joyride in this town with them painted hussies.\nWe've waited this long.\nAnother night won't hurt us.\nBut if the money's not here in the morning, out we go!\nGet back to work!\nWe're beat, Mr Kimball.\nWithout the pay, the gang will go to Junction City.\n- I know.\n- Any word from Jeff?\nHe's in Junction City.\nSays the car held to the grade all the way.\nHe and his men will be after Whitey in...\nThey will not!\nTell him to stay right where he is until further orders.\nYes, sir.\nWonder if he thinks that's private property.\nIf he tries to divide that like he cuts up the loot, there's gonna be shooting.\n- Your laundry?\n- Sandwiches.\nDo you want one?\nNo.\nWhere did you get them?\nJunction City.\nA girl in a restaurant gave them to me.\nWas she pretty?\n- Think you could get me a date?\n- She's not that kind of a girl.\nAny of you boys win enough to buy a drink?\n- You ain't got a drink.\n- I got a drink.\n- I thought you was fresh out.\n- I was till we made the hit.\nWhile you looked for the payroll that wasn't there, I had important business.\nCome on, fill her up.\nLatigo ought to be running this bunch.\nWe might not eat, but we'd sure drink.\nHa ha!\nYou're a funny man.\nWhy don't you laugh?\n- Am I supposed to?\n- Not if you're smart\n- I think you're smart\n- And what else do you think?\nThat you made a mistake.\nShe'll only bring you trouble and guns.\nSince when is $10,000 trouble?\nThat's exactly what you're worth.\nYou're very flattering.\nBut I'm inclined to agree with you.\nDon't make a habit of it.\nLatigo, I want a drink!\nAnd you've got a few habits I don't like either.\nSettle down.\nDo you see what she's up to?\nI can see you.\nAnd what I see I don't like too good.\n- I guess you could use one.\n- Thank you, no.\n- It's the best.\nI got it off your own bar.\n- You drink it.\nSorry, lady, I don't drink.\nI'm studying to be a bartender.\n- Don't you drink?\n- Not alone.\nSuppose I join you?\n- Do you mind?\n- And if I do?\nDon't push it.\nFor a little while you're gonna need me and I'm gonna need you.\nI watched you walk.\nI could swear we've met before.\nCould you?\nFunny little things you do.\nLike when you smile.\nStrange.\nI seem to recognise all your mannerisms, if you know what that means.\n- I know what that means.\n- Do you?\nI'm supposed to fight Whitey over you.\nWith a little luck we'd kill each other.\n- It's an interesting thought.\n- What's interesting?\n- She is.\n- You're so right.\nI may not send you back.\nNot until you've helped me spend the ten thousand.\n- You mind if we join the party?\n- Yes!\nYou shouldn't, cos if you guess wrong you ain't gonna hang alone.\nYou like another drink?\n- Thanks, I still have this one.\n- Drink them both.\nAnybody want to start the dance?\nWith only one girl?\nGet back to the bar where you belong.\nLet's all get back to the bar, where we belong.\n- You almost got your wish.\n- One of them.\n- The other?\n- To know your name.\nHis name?\nHe's the Utica Kid.\nI don't like it either.\nMy family used to call me Lee.\nWhy don't you?\nYou're supposed to be outside.\nCome out with your hands up.\n- What are you doing here?\n- I want to see the Utica Kid.\n- Who are you?\n- A friend of his.\nFunny thing, he never told me about no girlfriend.\nls there any reason why he should?\n- What's your name?\n- Charlie Drew.\nAnd you can put that gun away.\nOr do I look dangerous?\nNot exactly.\nGive me that rope.\n- When'd you get here?\n- Just before they rode in.\nUtica pulled the job off right on schedule.\nI suppose you've known it was going to happen for quite some time.\nNo, I haven't.\nUtica doesn't talk to me about jobs.\nNot this kind.\n- Did he ever have any other kind?\n- He will have.\nSoon.\nThen why don't you hold out?\nWhy don't you keep away till he stops being a thief?\nI told him that's what I'd do.\nHe just looked at me and smiled.\nHe said, \"Hurry wonder if you can.\"\nTonight he has his answer.\nYou're here.\nYes, but only to tell him that you're...\nOnly to tell him I'm in town and might come looking for him.\nI want to keep him alive.\nI want to keep you alive.\n- You know what he can do with a gun.\n- I know.\nWell, then, why?\nBecause of a little thing called self-respect.\nMaybe you wouldn't understand anything about that.\nFor five years I've played that thing for nickels and dimes thrown into a hat.\nFor five years the Utica Kid has been laughing.\nI may have been wrong, Charlie, but I'm not gonna make the same mistake twice.\nGrant...\nWhen you see him will you tell him that I'm here?\nLeave it alone!\nSo all she'll bring is trouble and guns?\nDid you bring the money with you?\nNo.\n- How soon do we get it?\n- I wouldn't know about that.\nYou should!\n$10,000 is a lot of money.\nAnd that's what he wants for me.\nWell, I'd say he was selling out cheap.\nNever mind what you'd say.\nWhat did Kimball say?\nIf you don't know about the money, why did he send you?\nHe didn't send me.\nI came on my own.\nWhy?\n- Ask him.\n- Well?\nI wouldn't know.\nThen again, maybe I would.\nYou were right the first time.\nI can walk quiet at night and I'm a pretty good gun.\nI'd like to join up with you.\nYou see, when a man gets fired off the rail road, he has a little trouble finding a job.\nAnd when he can't find a job, he gets hungry.\nI've been hungry for the last five years.\nHaven't I?\n- How would he know?\n- I'm his brother.\n- His brother?\n- His younger brother.\nFive years ago he was a troubleshooter for Kimball.\nI lifted the feed herd and he came after me.\nThen gave you a horse to get away.\nBut not until I'd heard all about good and evil.\nI didn't buy what he had to sell then.\nI'm not buying it now.\n- So you don't want him in?\n- No.\nFunny thing.\nI want him in.\n- Any objections?\n- It ain't that simple, Whitey.\nThere's a personal deal between me and him.\n- About what?\n- He got in my way.\nThat's right.\nOh, yeah, I remember you.\nYou're the man that fights kids.\nWhich way do you want it?\nGet up, come on, get up!\nNow one of you give him his gun.\nAll right, Harbin, you're the boss around here.\nYou call it.\nI might just do that.\nWell, I ain't gonna take him alone.\nThen maybe you'd better move along.\nAny further objections?\n- Yeah.\n- Now ain't that wonderful?\n- I'd be happy to call it.\n- You may get the chance.\nYou mind if the Utica Kid and me have a little talk?\nNot at all.\nCall me when you're ready.\nI think you ought to know I'm working for the rail road again.\nI figured as much.\n- Troubleshooter?\n- Tonight I was carrying the payroll.\n- Where did you hide it?\n- I gave it to the boy.\nIt's in that shoe box.\nNow all you have to do is go in and tell Whitey.\nYou're gambling I won't?\n- Same old story of good and evil.\n- Same old story.\nYou lose, Grant.\nYeah, I kind of figured that when you laughed.\nI'll give you the same break you gave me.\nTen-minute start, then I tell Whitey I sent you away.\nI go, that money goes with me.\nSo does Kimball's wife.\n- No.\n- Wait a minute, Lee.\nHear me out on this.\nIf I leave here, that boy goes with me too.\nJoey?\nWhy do you want him?\nMaybe for the good of his soul.\nIt's been a long time since you heard that word, hasn't it?\nMother and Dad used to bring it up once in a while when we were kids.\nYou were just about Joey's age.\nHe thinks a lot of you, doesn't he?\n- He wants to grow up to be just like you.\n- He may make it, with practice.\nSoon he'll be holding the horses while you and Whitey hit a bank.\nThere's another kid lying in the barn.\nHe got the start that way too?\n- You didn't kill Howdy?\n- I didn't hurt him.\n- And you're not going to hurt Joey.\n- How could I do that?\nIt's not hard.\nIt's not hard.\nNot when he takes your road.\nOr haven't you stopped to look at it?\nWhy bother?\nI picked it, I'll ride it.\nLee, I'm asking you again.\nGive Joey a chance.\nNo.\nYou've got ten minutes.\nI won't need them.\nCharlie's in there waiting for you.\nThink about her.\nShe's been following you for five years too.\nShe's got a reason.\nOr didn't I tell you I'm gonna marry her?\nHow much of that did you hear?\nJust what I wanted to hear.\nThat you're gonna marry me.\nWhen?\nWe're gonna have a lot of money, Charlie.\n$10,000.\nYou can have pretty new dresses and pretty new shoes.\nAnd a brand-new husband.\n- Tomorrow.\n- No.\nRight now!\nIf you want me, take me away right now.\nPlease, please take me.\nWhy the sudden hurry?\nHas my big brother been telling you the story of good and evil?\nDon't laugh at him.\nWhy not?\nWhy mustn't I laugh at him?\nMaybe it would be better if... if you tried to be a little more like him.\nNow isn't that just great?\nNow I get it from you!\nEver since I was a kid that's all I can remember.\n\"Why don't you be more like your brother?\nWhy can't you be more like Grant?\"\nI don't want to be like him.\nI don't want any pan of him.\n- That's not true.\n- Yeah, it's true!\nYou don't know what it's like to be the kid brother.\nEverything you do is wrong.\nEverything you try.\nUntil one day I tried a gun.\nFit my hand real good.\nAnd I wasn't the kid brother any more.\nIt's a good gun.\nIt's gonna get us everything we always wanted.\nBut I don't want it.\nNot that way.\nWhy must you steal?\nBecause I like to steal.\nI like to see what people will do when I take it away from them.\nWhat happens when something is taken away from you?\nNobody's gonna take anything away from me.\nCharlie, I'm asking you to marry me.\nNo.\nGrant was right.\nYou'll never change.\nAnd he calls me a thief?\nJoey\nGo on.\nPlay some more.\nIt's been a long time since I heard an accordion.\nAny tune in particular?\nOr would this do?\n♪ Oh, you can't get far without a rail road ♪\n♪ You can't get far without a rail road ♪\n♪ You gotta have an engine ♪\n♪ and you gotta have a track ♪\n♪ Oh, you can't get far without a rail road ♪\n♪ There are tracks across the prairie ♪\n♪ Where the buzzard builds his nest ♪\n♪ There are tracks across the Rockies ♪\n♪ To the Golden West ♪\nHow does it go from there?\nHow does it go from there, Lee?\nEverybody will be neighbours\nIn this little dream of mine\nTake you clear across the country\nOn the Bullfrog Line\n♪ Oh, you can't get far without a rail road ♪\n- ♪ You can't get far without a rail road ♪\nGentlemen!\n- Renner!\n- Didn't you know he was working for me?\n- I've come for my thousand dollars.\n- What thousand dollars?\nYour memory is quite shod.\nI supplied you with information about a certain boxcar.\nI was prepared to supply you with information about the payroll.\n- Concho did not keep the appointment.\n- So?\nSo ten per cent of the payroll is mine.\nSorry to disappoint you but we missed the payroll.\nMissed the payroll?\nIn that case I'm prepared to make a better deal.\nFor $2,000, I can tell you where the money is.\nYou made a deal.\nBen Kimball hired a man to carry it.\nI might never have located this place if I hadn't heard that man's accordion.\nHe has the money.\nAsk him!\nJoey!\nCome here, Joey!\nGrant!\nMcLaine, there's a woman with you!\n- That's right.\n- Send her out before we come get you.\nHere, hurry!\nCome on, Charlie.\nHe's in the clear.\nHe's riding away.\nYeah, he's riding.\nAfter me.\n- What are we stopping for?\n- We're going to the mill, the shod way.\nGet down to the mill!\nCome on!\nTake cover!\nHere.\nThere's a mine shaft at the end of these cables.\nIt runs clear through the mountains.\nOn the other side, about half a mile, is the rail road!\nIt's two hours to the end of track.\nI have to send you out one at a time.\nCome on, Verna.\n- Tell Ben he'll get his payroll somehow.\n- I'll tell him more than that.\nYou'll get that money even if you had to kill your own brother?\nThe next ore bucket that comes down, pull it around and jump in.\nI'll cover for you.\nIt's clear, Charlie.\nGet out!\nSee if you can reach him from over there.\nHe can't stand them off, not alone.\nYou figuring to help?\nGrant!\nLook out!\nHe's real good.\nOnly one better gun in Colorado.\nCharlie!\nGet over here!\n- I thought I told you to get out.\n- I'm staying right here.\nAll right.\nNow you get back inside and I'll cover for you.\nThanks, Charlie.\nLee, not the kid!\nYou take care of the kid.\nI'll see if I can keep them pinned down.\nWould you mind if I play big brother just this one time?\n- Shoots high.\n- You or the gun?\n- Joey all right?\n- He's all right.\nThat makes you a winner.\nGo ahead and make a sucker out of the kid.\nTell him all about good and evil.\nPut him to work on the rail road.\nThings get tough, he can always play the accordion for nickels and dimes.\nSounds like old times, Lee.\nWelcome home.\nDon't give me that big brother grin.\n- Up there!\n- Get him!\nI count mine.\nThere's one left.\nHe hit you hard, Lee.\nNot half as hard as you did with that Bullfrog Line.\nThat was Dad's favourite tune and you know it.\nI know it.\nYou and your stinking accordion!\nCharlie.\nCharlie?\nYou and Joey get the horses.\nWhat...?\nI'll take care of my brother.\nHere's your money.\nPay 'em off, Tim.\nThank you, Grant.\nLooks like you won yourself a job.\nMine.\nNo, it won't fit.\nNot nearly as well as your coat.\nWant your old job back?\nThanks.\nAll right, Joey.\nGet a bucket and start carrying water.\nWe're at end of track.\nNow go on.\n♪ Sometimes I feel like ♪\n♪ could jump over the moon ♪\n♪ And tell the sky above ♪\n♪ Does it matter how full the moon ♪\n♪ When you've an empty head ♪\n♪ Follow the river ♪\n♪ Wherever you may be ♪\n♪ Follow the river back to me ♪\n♪ Follow the river back to me ♪\n[SINGING]\nELIZABETH:\nDarling.\n- Papa, have I kept you waiting?\n- No, that's all right.\nCome on.\n- Why isn't Peter here?\n- He's playing with Kimani, Papa.\nThat brother of yours and that Kyuke are inseparable.\nCan't he find a white playmate?\nWhy?\nYou can't treat an African like a brother and expect to have a good servant.\nWhen Caroline died, Kimani's mother raised Peter.\nIn a way, they are brothers.\n[WHISTLE BLOWS]\nWhen do you leave for England?\nTomorrow, worst luck.\nI'm homesick already.\nA few years of school...\nYou won't let him marry anybody but me, Mr. McKenzie, will you?\nHas he proposed?\nNo, but I have, quite often.\nWhich of you stole the rifle?\nStep forward.\nYour religion says it is evil to steal.\nYour own medicine shall name the liar.\nIf you tell the truth, this will not burn your tongue.\nHe who lies burns.\nPeter?\nKimani, my son, shall be the first.\nDid you steal that gun?\nDid you steal the gun?\nDid you steal the gun?\nDid you steal the gun?\n[CHATTERING DOG BARKING]\nI will find the weapon and bring it to you.\nPunish him yourself.\nThe city teaches bad ways to young men.\nHow does it go with your wife?\nThe wife with child?\nTomorrow, the day after...\nThe time is near.\nPapa.\n- How does it work?\n- Plain old witchcraft.\nThe Kikuyu is a very religious man.\nHe fears God, but he trusts him too.\n- But hot steel is...\n- Will not burn a wet tongue.\nBut the liar's spit dries up.\nHim it will scorch.\nHa-ha-ha.\nI think you know more about black witchcraft than you do about the Bible.\n- Let me have my way with these devils...\n- Poor old Jeff is the perfect colonizer.\nWhat's his is his and what's theirs is his too.\nWell, have a good shoot.\nWe're not raising cattle to feed a maverick lion.\nPETER:\nKimani, Lathela.\nTell Kimani not to gut him.\nWe'll leave a smelly calling card for the lion.\nKimani, open the animal, but don't clean him.\nThen you'd better service the guns.\nWhen it comes time to kill the lion, I want to shoot the gun too.\nIt's Jeff's show.\nAnd you know how he feels about Africans and guns.\nKIMANl:\nI want to shoot the gun too.\nPETER:\nI'm sorry.\nLathela.\nKIMANl:\nAlways when we hunt it is the same.\nYou have all the fun, I do all the work.\nWhen we were little and played together...\nBut we're big now.\nAnd things are not the same.\nHit him.\nHit him.\nHit him hard.\nDo what he says, now.\nAnd in a hurry.\nFrom now on, when he tells you to do something, do it.\nDon't think about it, just obey.\nUnderstand me?\nWell?\nCome on, Peter.\nI really should've slapped you.\nMight have been better all around if you had.\nHeh-heh.\nForget it.\nYou had no right to hit Kimani.\nJEFF:\nPeter, how many times have I got to tell you?\nBlacks are blacks and not playmates.\nOne thing you can never do is argue with them.\nNever.\nYou tell them.\nOh, sometimes you can joke with them you can boot them in the tail sometimes look after them when they're sick.\nBut you never, never argue with them.\n- The world's changing, Jeff.\n- Not in Africa it isn't.\nKimani's mother raised both of us.\nWe grew up together.\nYou'll never live together on equal footing.\nNot in our lifetime.\nYou can't spend the first 20 years of your life with someone sharing bread and secrets and dreams, and then one day say:\n\"Sorry, it's all over.\nWe live in different worlds.\"\nI don't believe it and I don't like it.\nWait till you settle down and marry Holly and have to deal seriously with the wogs.\nHave you heard from Holly?\nA couple of letters from London.\nShe mentioned coming back?\nJust stuff about school, things like that.\nHm...\nWell, we'd better break camp and go after that lion.\nLathela.\nGet Kimani to help you load.\nKimani not here.\nPETER:\nWhere?\nForget that lion, Jeff.\nWe're gonna find Kimani, and right now.\nAll right, all right, all right.\n[ENGINE STARTS]\nYou want Lathela with you?\nNo, you'll need him to track.\nI'll meet you back here at sundown.\n[HYENAS YIPPING]\n[WHIMPERS]\n[YELPS]\n- Are you all right?\n- Yes, bwana.\n- Does it hurt much?\n- No, bwana.\nYou're lying.\n- And stop calling me bwana.\n- What shall I call you?\n\"Boss\"? \"Master\"?\nYes, it hurts.\nNot where the trap cut me only where Jeff slapped me.\nThat is where it hurts.\nWell, then stop thinking about it.\nNo one ever struck me in anger before.\nNot even my own father.\nIt wasn't in anger.\nHe's already forgotten.\nCan you forget it?\nI cannot forget it either.\nWe are alike in many things.\nYou talk Kikuyu same as me.\nI speak English same as you.\nBut you are white and I am black.\nAnd you are the bwana and I am the servant.\nAnd I carry the gun and you shoot.\n- Why is shooting the gun so important?\n- It's not the gun, it is...\nWhat is it, then?\nWhat?\nWe cannot talk as friends.\nWhy?\nYou said it yourself.\nWe are not children anymore so we are not friends anymore.\nI saved your life as a friend.\nI'll always be your friend.\nKimani...\nDoes it hurt much?\nNo.\n[SPEAKING IN FOREIGN LANGUAGE]\n[BIRD CROWS]\n[SPEAKING INDISTINCTLY]\nELIZABETH:\nThe child doesn't come easily.\nIt is a curse.\nThis morning, I saw the dung of a hyena.\nJust now a vulture passed over us.\nDon't you talk like that.\nJust don't you talk like that.\n- Suppose the child is born feet first.\n- Then it must be killed.\nWhen that child comes, don't you touch it.\nYou understand?\nIt is you who do not understand.\nI'm gonna fetch my father.\nWhite magic will not remove the curse.\n- Perhaps the curse is in your son?\n- What evil did he do?\nSuppose a snake came into his bed.\nSuppose a man struck him and he did not strike back.\nSuppose he broke a law.\n[BABY CRYING]\nThe child enters life feet first.\nDo what must be done.\n[BABY STOPS CRYING]\n[BELL RINGS]\n[INAUDIBLE DIALOGUE]\nKimani.\nSwear him in.\n- Which god, please?\n- The Christian God.\nI worship Ngai, the god who lives on Mount Kenya.\nI will swear by our sacred Githathi stone.\nCROWN COUNSEL:\nYour word will suffice.\nKARANJA:\nOh, no, no.\nIf I lie before this symbol of God my children and their children and my home and my land will turn to dust.\n[STICKS BANG]\nAnd when I die I will have no life hereafter except to live forever in eternity by the cursed hyena, cowardly eater of the dead.\nI speak the truth.\nYou're the father of the dead baby in question?\n- Yes.\n- Did you tell the midwife to kill the baby?\nYes.\nIt was born feet first, it was cursed.\nThen what was done?\nWhat is always done according to custom.\nCROWN COUNSEL:\nTell His Honor what that is.\nWe smothered the child and buried it under a pot.\n- You know that killing is against the law?\n- God says to murder is wrong.\nAnd when you had that newborn baby smothered, was that not murder?\nNo.\nA child cannot join the tribe until he is 1 year old.\nTherefore, he's not really born until his second year.\nWhat was killed was a demon, not a child.\nYes, yes.\nAnd then what did you do?\n- What?\n- Then what did you do?\nWe sacrificed a young ram.\nMm.\nAnd that, I suppose, got rid of the curse.\nKARANJA:\nNo.\nNo, sir.\nNot yet.\nI am still here, therefore the curse is still at work.\nWould you do the same thing if another child were born to you feet first?\nYes, yes.\nIt would be my duty.\nWhat in the name of Almighty God are we trying to do to these people?\nCROWN COUNSEL:\nPreserve the law, Henry, that's all.\nLaw?\nWhose law?\nNot theirs, surely.\nAll men are equal before the law.\nExcept some are more equal than others.\nThat man is an accomplice to murder.\nHe's admitted that.\nBut can we make him understand it?\nWe take away their customs, their habits, their religion.\nWe stop their tribal dances, we stop them circumcising their women.\nThen we offer them our way of life, something they can't grasp.\nWe say, \"Look how clean and rich and clever we are.\"\nFor the Africans different wages, different life.\nWe mock their wise men.\nTake away the authority from their fathers.\nWhat are the children going to do?\nThey'll lose respect for their elders and fathers and when they do, look out.\nMaybe they'll lose respect for our white Jesus too.\nTurn to something else for help.\nIt won't be to us.\nWell, you understand, don't you, Peter?\nIf we don't make the African respect the law well, the next thing you know, he'll be wanting to rule this country.\nImagine that, now.\nWhatever could give him that idea?\nThis is his son.\nCan he come in while we're here?\n[SPEAKS FOREIGN LANGUAGE]\n[IN ENGLISH] The city frightens me.\n- Let us go home quickly.\n- Listen, old friend.\nThe law says you must stay here in jail for a while.\nI'm sorry.\nWe'll do everything we can.\nMy daughter will visit you.\nShe'll bring you tobacco and food to comfort you.\nPlease keep this for me.\nA jail is not the proper place to keep god's sacred symbol.\nAnd when my son comes of age...\nI understand.\nI am happy it was not you who struck my son.\nYou are still his friend?\nYes.\nAnd yours too, for as long as you both wish it.\nMAN:\nBoy, boy.\nI told you.\nHe will not help you.\nOur Mathanjuki will purify you.\nHe will drive the curse from your body and I will be free.\n- No.\n- You do not believe in god?\n- Yes, yes.\nBut I do not believe in our witchcraft and black magic.\nWhen Bwana Jeff struck you...\nHe struck a black man to prove that the white man is master, nothing else.\nYou are not in jail because of a curse but only because we are judged by their laws.\nAnd that is the truth.\nAnd I must follow where the truth leads me.\n- Where does it lead you?\n- To strike back.\nWe're men, not animals.\nYou have much to look forward to, my son.\nYou will become headman as I was.\nIs that to be my life?\nHeadman for a white boss?\n\"Yes, bwana.\nNo, bwana.\nYes, bwana.\"\nThis land can serve me too.\nI want my own land.\nThen you must earn it.\nI will, Father.\nI will.\n[DOG BARKING]\n[GASPS]\nWho are you?\nWho sent you here?\nWhy you come here?\nHe told me to come here.\nYou told me the white man would put Father in jail.\n- You said we had to fight the white man.\n- Your father is in jail?\n- Yes, and I'm ready to fight.\n- You ran away from the McKenzie shamba?\n- Yes.\n- Why?\n- You stole money?\n- No.\n- Guns?\nNo, why should I steal?\nThen why should you run?\nI don't know.\nNJOGU:\nThis is my daughter, Wanjiru.\n- He can be of no use to us.\nHe wants to fight the white man.\nWe can use him.\nWe will take him to the mountains.\nWe will train him.\nCome, little boy.\nFirst you will learn to steal guns.\nHm?\n[ENGINE STARTS]\nI have no parents and I am hungry.\nI need work.\nNot a sound.\nNothing.\nDo not call.\nDo not answer.\nDo not cough or I kill you.\nUnderstand?\nYou are not alone?\nHow many are there?\nOne other?\nThe houseboy?\nYou will call him by name.\nNothing else, just the name.\nCall him.\nCOOK:\nMigwe.\nMigwe.\nThis boy is dead.\nNanyuki Police signing off, 1545.\n- Hello, Peter.\n- I need some help, Hillary.\nIf it's about the sentence of your headman...\nHis son, Kimani.\nHe's missing.\n- When?\n- Last night.\nI want him found.\n- What did he steal?\n- Steal?\nYou want him found, what are the charges?\n- He might be hurt.\n- You check the infirmary?\nAnd I've chased down his family within a hundred miles.\nHe'll show up.\nHe probably went to Nairobi on a toot and...\n- Age?\n- Twenty-one.\n- Height?\n- Six-two, weight a little under 13 stone.\nWait a minute.\nThere was a houseboy killed last night.\nBuxton shamba, at the foot of the Aberdares.\nA gang broke in, stole guns and whiskey.\n- What's that got to do with Kimani?\n- Maybe nothing.\nMaybe everything.\n- Not a chance.\n- Why not?\nI know Kimani.\nI know how he thinks.\nHe's not a criminal.\nYou mean not yet.\nYou just find him.\nAt least send out a description.\nKimani's guilty of only one thing, captain.\nGuilty of being born black.\n[SINGING]\nTake one.\nWhy that gun?\nMy friend Peter has a gun like this.\nIt is a fine gun.\nI can kill a lion with this.\nOr even a man, huh?\n[SINGING STOPS]\nThere will be no drinking here again.\nNever.\nAdam is our leader.\nWho are you to tell us what...?\nNJOGU:\nDaughter, ask the other women where to go and what to do.\nKimani.\nI see you have earned a gun.\nThis gun.\nTo get some of these guns, one of our own people was killed.\nWhen lightning strikes, a bystander may be hurt.\nLightning belongs to god.\nThis was murder by him.\nIt was the will of god.\nNo.\nI do not like your ways.\nSit down.\nI go to Nanyuki.\nI work there to free my father in my own way.\nSit down.\nTwo reasons why you cannot leave us.\nThat houseboy.\nThat houseboy who was killed last night, Adam can hang for this.\nSo can you.\nSo can all of us.\n- That is the law.\n- Reason two.\nYou know our names and our faces.\nYou know where we live and how we live.\nWe would be safe only if you stay with us.\nOr if you were dead.\nWe will not always live as hunted animals.\nGreat men make plans for us.\nPlans to drive the white man from our country.\nPlans to take back our land.\nPlans to...\nMAN [OVER PA]:\nFlight 212, BO AC arriving from London, Rome, Athens, Cairo, Khartoum.\n- Cigarette?\nELIZABETH:\nNo.\n- Dad?\n- No, thanks.\nFlight 212 departing for Dar es Salaam, Johannesburg and Jamestown.\nELIZABETH:\nThere.\nTwo-one-two departing for Dar es Salaam, Johannesburg and Jamestown.\nEach to their own.\nHolly, I...\nSix years is a long time.\nToo long?\nYou'd better see to her luggage.\n- Can't I watch too?\n- It's indecent.\nThat's why I want to watch.\nOh, really.\nPETER:\nKimani.\nHey.\n[DOGS BARK]\nKimani.\nStrange.\nI thought I saw Kimani.\nYou remember Kimani?\nMove.\nStart moving.\n[SPEAKS FOREIGN LANGUAGE]\n[IN ENGLISH] Would you mind letting us by, please?\n[SPEAKS FOREIGN LANGUAGE]\nI've come to pray.\nCLERK:\nThis is not a church.\nMy god does not live in a church.\nHow do you call yourself?\nKimani wa Karanja.\nWe are beggars and slaves in our own land.\nThe British allow us in their homes and hotels, yes.\nBut how?\nAs servants.\nWe are millions, they are a handful.\nWe are strong, they are weak.\nHow then are they the masters and we the slaves?\nIs it white magic?\nIs it god's will?\nNo.\nThey have the guns.\nWe too shall have guns.\nAre we ready for this?\nThe whole colored world burns with the fever of revolt with the fire for freedom.\nDo any of you have any questions?\nIs there a doubt in your hearts?\nWhat troubles you?\nNJOGU:\nKimani.\nHis name is Kimani wa Karanja.\nFor five years, he has been in the mountains with us.\nHe is ready for leadership.\nHe is very strong and loyal.\nStrong men have betrayed us before.\n- You have a question, Kimani?\nKIMANl:\nYes, sir.\n- This talk of guns.\nLEADER:\nYes?\nIs this the only way we can get freedom?\nYes.\n- By the spilling of blood?\n- Yes.\nWe will never drive the British out with words.\nAnd not with doubts and not with friendship.\nIt can only be done with guns.\nThe white man did not take this land with guns.\nHe bought this land.\n- This is truth.\n- Mm-hm.\nAnd I must follow where the truth leads me.\nYou were educated in white missionary schools?\nYes, sir.\nLong, long ago, to whom did the land belong?\n- The people.\n- Yes.\nNot one person, but the entire clan.\nAnd therefore only the clan can sell the land correct?\n- Yes, sir.\nNo man of any other tribe can buy our land unless he becomes, in our religion, a Kikuyu.\nYes, sir.\nAnd have the British ever become Kikuyus?\nOr have you become one of the British?\nYour father was a friend of the British.\nBut your father died in their prison.\nThere is only one way to drive out the British.\nBy terror and death.\nEveryone must either be for us or against us.\nThose who be with us, stand.\nGood.\nWe will need a symbol, a sign, a name.\nHere it is.\nMau Mau.\nMau Mau.\nUse it, live by it, die for it.\nMau Mau is the machinery that will carry us to freedom and independence.\nMau Mau.\nALL:\nMau Mau.\nI swear to kill an Englishman or may this oath kill me and my family.\nI swear to kill an Englishman or may this oath kill me and my family.\n- They make a nice couple, don't they?\n- Mm.\nShe's got good lines for breeding too.\nLook.\nMount Kenya.\nLathela, wait here.\nNo wonder the African believes that God lives on Mount Kenya.\nIf I were God, that's where I'd like to live.\nI feel I'm really home now.\nI love you, Peter.\nI always have.\nI suppose I always will.\nI like the feel of you.\nI wish...\nYes?\nI wish it could always be like this moment.\nSafe and warm and peaceful.\nAlways like this.\nHome is always like this.\nWhy did your husband run away?\nDid he steal?\nDid he do something bad?\nWhere did he go?\nWhy didn't you go with him?\n- I was afraid.\n- Afraid?\nAfraid of what?\nWOMAN:\nHello, my darling.\nMAN:\nHello, my darling.\nLITTLE JEFF:\nWhat did you bring?\nPETER:\nHello.\nLITTLE JEFF:\nYou didn't forget my rifle?\nWOMAN:\nYes, it's right here.\nMATSON:\nHenry.\nWOMAN:\nBring the children in.\nBring them in.\nMATSON:\nWhat do you think?\nWhat's it mean?\nI don't know.\nTwo Kyukes disappear from my place.\nJasper, his headman reports one gone from his farm, rifle missing too.\nOne gone from your place.\nWhy?\nYou saw his wife.\nShe's afraid.\nWhy?\nWhat of?\n[DOOR KNOCKS]\nCome in.\nAccording to Kikuyu custom we come to speak for Peter McKenzie, bachelor to Holly Keith, spinster.\n- This shy Kikuyu maiden is grateful.\n- She doesn't look very shy to me.\nHow many goats will be paid for me?\nThree or four ought to be quite enough, don't you think?\nOh, I'd say 20 or 30 at least.\nWhy don't you throw yourself in and make it 31 goats?\nAnd why has Peter wa Henry chosen me?\nHe needs someone to chop firewood and dig potatoes.\nHe needs someone to keep his bed warm.\n- He promises not to beat you often.\n- Unless it's absolutely necessary.\n- He also expects a child every year.\n- All of them his.\n- A very narrow attitude.\n- We shall also have to shave your head.\nDo you accept my son?\nIf you do, we'll drink to the marriage bargain.\nIf you don't, I shall have to pour this on the ground.\nHOLLY:\nAnd waste all that precious gin?\nThank you for becoming one of our family.\nYou will swear a new blood oath.\nWhen it is done, you will be part of the new army:\nMau Mau.\nHe who refuses to take the oath he dies.\nHe who breaks the oath he dies.\nCut off the sheep's head.\nFill this calabash with its blood.\nSugar cane.\nSugar cane and banana leaves the first source of food.\nMugere plant best and strongest magic.\nThe arch oldest Kikuyu symbol.\nYou will pass through the arch seven times and thereby enter a new life.\nYou will receive seven cuts on the arm to bind you together.\nSeven.\nAll things in seven.\nSeven, the unlucky number.\nBreak the oath and the evil seven will strike.\nSheep's blood symbol of sacrifice.\nMillet seeds of nourishment.\nEarth the earth we fight for.\nThe cause that brings us together.\nYou will eat this oath.\nYou will swallow it seven times so that it becomes part of you.\nBitter Sodom apples.\nTake off everything that stinks of the European.\nWatch, ring, money.\nTo give you an easy road.\nThe endless circles.\nEarth.\nHold it to your belly.\nThat the land may feed us and not the foreigners.\nHold up your arm.\nSo that your blood will mix.\nNow swallow the oath seven times.\nRepeat after me as you pass through the arch.\nIf I sell land to any foreigners, may this oath kill me.\nIf I sell land to any foreigners, may this oath kill me.\n- I will steal guns.\n- I will steal guns.\nI will never be a Christian.\nI will never be a Christian.\nI will drive out all Europeans or kill them.\nI will drive out all Europeans or kill them.\nNJOGU:\nIt is done.\nThey've all sworn.\nI feel unclean.\nI will not let Wanjiru take this oath.\nIt is not necessary.\nShe is loyal.\nTo swallow the oath was hard enough, but the rest of it...\nThe nameless filth, the shame.\nAnd in front of the others.\nWhy was it necessary?\nWhy?\nTo bind us together forever.\nNow they will do anything.\nKilling of mother, father, son will be as nothing to them.\nThey will feel strong with power and purpose.\n- Who gave you the oath?\n- No one.\nYou never took it?\nI am too old to change.\nI am ready to give up my life, but I cannot give up my faith.\nIt is too deep, too strong.\nIn life and in death I will always believe in the god of my father the god who lives on Mount Kenya.\n- So do I, in spite of the oath.\nYour daughter carries my child.\nNow, I wish to marry her before the child is born.\nI consider you married.\nI will gather cooking stones with my wife as my father before me gathered cooking stones with my mother.\nLike you, I cannot tear out what is in my heart.\nDo it quickly, then.\nWe need rest.\nTomorrow is the appointed day of the long knives.\nOur first attack should be on the McKenzie shamba.\n- Why there?\n- Why not?\nLook, that was my home, my friends.\nA great leader has no friends, only a cause.\n- You doubt my loyalty?\n- I only ask you to prove it.\nLet your panga come back as red as mine.\n[CAMERA WINDING]\n[BABOONS HOWLING GRUNTING]\n[HOLLY CHUCKLES]\nThank you for a lovely day.\nLovely wedding day.\n- No more anxiety?\n- Mm-mm.\n- You know why?\n- Why?\nBecause everything's so full of life.\nAll the animals, the earth and even the air smells of life.\nWe've done nothing to spoil it.\nSomeday all this will be farm country.\nWhat will happen to White Hunter McKenzie, then?\nFour years ago, our crops were hit by locusts.\nWiped out.\nPapa put all his savings into cattle.\nThe next year, rinderpest.\nWhat cattle didn't die had to be killed.\nPapa got a loan from the bank.\nSo part of the time, I take rich clients on safari.\nFor the money.\nTo pay back the loan.\nSo the land's good to us this year and the crops hold up, no locusts, no rinderpests I'll be back where I really belong.\nOn the farm.\nYou know, that's the most wonderful wedding present you could ever give me.\n- Are you as happy as I am?\n- I'm a very lucky man.\nI have the two women I love most in the world.\n- Who's the other one?\n- Africa.\nThere are some things I can do for you that Africa can't.\nWhat is it?\nI don't know.\nSomething strange.\nWell, I didn't hear anything.\nI'm not certain.\nIt was something.\nJust a feeling, I guess.\n[HORN HONKS]\nI wonder what's happened to the porch light.\nProbably the fuse again.\nI'll have a look at it.\nJEFF:\nHey, what the...?\nUgh!\nKIMANl:\nRemember me?\nKimani.\n- What do you want?\n- I've come home.\n[INAUDIBLE DIALOGUE]\n[CRASHING WHISTLE BLOWING]\nELIZABETH:\nJeff!\nKIMANl:\nNo.\n[MOUTHS] Kimani.\nMAN [OVER RADIO]:\nJeff Newton and two of his children dead.\nHis wife, Elizabeth, in critical condition.\nOn the open highway to Nanyuki in broad daylight Joe Matson and Mrs. Matson were ambushed while motoring.\nMrs. Matson was killed by machine-gun bullets.\nChief Waruhiu, leader of the anti-Mau Mau movement was murdered at Kiambu.\nMEYLl:\nYes, bwana.\nSUPERINTENDENT:\nWere you in your hut last night?\nMEYLl:\nYes.\nSUPERINTENDENT:\nIt's lucky your father and the one boy were out visiting.\nWhere is Jeff and the kids?\nSUPERINTENDENT:\nWhat's your name?\nMEYLl:\nMeyli.\nSUPERINTENDENT:\nWho was with you?\nMEYLl:\nMy husband and my children.\nAnd the mother of my husband.\nSUPERINTENDENT:\nDid you ever attend any Mau Mau meetings?\nMEYLl:\nNo, bwana.\nSUPERINTENDENT:\nNext, please.\n[GASPS]\nMrs. McKenzie, what type blood are you?\n- Type O.\n- Come along, please.\nHurry.\nAnybody else here with type O blood?\nPeter?\nLathela is, I think.\nDOCTOR:\nWhich one of you is known as Lathela?\nIs that you?\nCome with me.\nWe need blood to help Memsahib Elizabeth.\nPapa.\nWhy Elizabeth?\nWhy the kids?\nWhy?\n[WHISTLE BLOWING]\n[GRUNTING YELLING IN FOREIGN LANGUAGE]\n[CAR ENGINE STARTS]\n[MUSIC PLAYING]\nMAN [OVER PA]:\nA state of emergency now exists in Kenya.\nKikuyus are being sworn into a terror organization called Mau Mau.\nSmall gangs are fighting guerrilla warfare.\nThere may be Mau Mau on your farms, in your cities, in your homes.\nAny African found with a gun may be punished by death.\nPeter, why do you have to go?\nWe've been over this a dozen times.\nI have to go, that's all.\nYes, but there's the army...\nThe army is inexperienced in the mountain and the bush country.\n- How long will you be away?\n- I don't know.\nWhat am I supposed to do while you're gone?\nWhat the rest of the women are doing, help keep the place going.\nPeter.\nIt wasn't very much of a honeymoon for you, was it?\nAre you very afraid?\nNo, not of them.\nOnly for us.\nIt's us I'm afraid for, what will happen to us.\nGAME WARDEN:\nMau Mau working underground everywhere.\nMaybe right here in this room, for all we know.\nNow, the government wants information.\nWho's forging the ammunition permits?\nWho's supplying the guns?\nWho's giving the oaths?\nSo it's prisoners we're after.\nIt's your job to track them down.\nI say kill them, make it open warfare, bomb them out.\nKill whom, all 6 million Africans in Kenya?\nWe're only 40,000.\nThat makes the odds about 150-to-1.\nThat's not the point.\nWe're not at war with the Kikuyu nation.\nWe're fighting Mau Mau.\nFor every one of us, they've killed a hundred Kikuyus.\n- Loyal Kikuyus.\n- They don't know what loyalty means.\nNow, listen, man.\nThey're trying to drive us out.\nWhat are we to do?\nPack up because their grandfathers were here first?\nI was born here too.\nThis is my country.\nKilling's no answer.\nWe gotta give the African a chance...\nBlack man's had Africa for years.\nIt'd be a jungle if we hadn't moved in.\nIt's not a question of black or white.\nThat's exactly what it is.\nBlack or white.\nYou'll follow orders or keep out of this.\nWell?\nAll right.\nI'll try it your way for a while.\nNo smoking.\nAnd no fires for cooking.\nWhiskey?\nJeff.\nTalk to me, Papa.\nI don't know what to say.\nAnything, Papa.\nAnything at all.\nThis off-season rain it should do a lot of good.\nYou're doing a big job, child.\nLike my Caroline, a long time ago when the country was new.\nShe was delicate, but strong, like you.\nShe helped to make the land and hold it.\nLike you.\nNo, Papa, not like me.\nI'm weak.\nI'm weak and I'm afraid and I'm lonely.\nPapa.\nWho said you could get out of bed?\nI want to go to Nairobi to see the doctor.\nIs it your arm again?\nI know you'll think I'm mad but I'm going to have another baby.\nYou see, if there's any chance of it being born...\nWell, I mean, after losing so much blood and...\nAnd I want this baby, Papa.\nMore than I've ever wanted anything.\nIt'd be a little bit more of Jeff and...\nHolly, will you take me in to the doctor in the morning?\n[DOG BARKING]\n[SINGING]\nHey, you, listen carefully.\n[MATSON SPEAKS IN FOREIGN LANGUAGE]\nYou are surrounded by police.\n[CHATTERING]\nMATSON: [IN ENGLISH] Lay down your guns.\nListen carefully.\n[GUNFIRE]\n[MATSON SPEAKS IN FOREIGN LANGUAGE]\n[IN ENGLISH] Lay down your guns.\nYou are surrounded by police.\n[CHILD CRYING]\nMATSON:\nAll right.\nWaithaka, do you know any of these people?\n[SPEAKS IN FOREIGN LANGUAGE]\n- Next.\n- A good farmer, no Mau Mau.\n- No?\n- No, bwana.\nYou see?\nNjogu, soldier of god.\nMATSON:\nHow long were you in the mountains?\nOne year.\nDo not hurt me, bwana.\nWho gave you the oath?\nI do not know.\nIf you lie to me again, I'll kill you.\nNow who was it?\nWho made you swear to the oath?\n[THUD]\nWaithaka.\nHelp me.\nHelp me.\nWaithaka.\n- Help me.\n- The woman lies.\nI never saw her before, never.\nI swear.\nBy my father, I swear.\nHere's one of your loyal Kikuyus.\nAll right.\nWe'll start again.\n- You gave the oath to the girl?\n- No.\n- She knew your name.\nHow?\n- She's the wife of my brother.\n- Who gave you the oath?\n- It was dark and raining, I could not see.\nHow do you Mau Mau do it?\nSince when do we use torture?\nThe Mau Mau do it.\nThey love it.\n- You might even grow to love it yourself.\n- I don't like it any more than you do.\nBut I don't like what happened to Matson's wife.\nOr your family.\nOr any families to come.\n[WAITHAKA SCREAMS]\nWe're not such a big jump away from being savages ourselves, are we?\nPlease.\nPlease let me point him out from here.\nPlease let me.\nThis is the man.\n- Your name.\n- Njogu.\nIs he the one?\nIs he the oath-giver?\nYou said his name was Njogu.\nYou said he was here.\nHe spoke truly.\nI gave the oath to him, to all of them.\nThey know nothing.\nAnd from me, you will get nothing.\nWAITHAKA:\nDo not let me stay...\nDo not let me stay here.\nYou promised, bwana.\nYou promised, you promised, you promised.\n[CROWD SCREAMS]\n[WAITHAKA SCREAMS]\n[DOOR KNOCKS]\nWho is it?\n[DOOR KNOCKS VIOLENTLY]\nLITTLE JEFF:\nUncle Peter.\nExcuse my appearance.\nI need a drink.\n- I beg your pardon.\n- Let me help you, son.\nThat's right.\nAbsolutely right.\nYou're gonna help us all.\nI need your help.\nGovernment needs help.\nEverybody needs help.\nIt's a big secret job.\nVery important.\nToast.\nToast.\nI don't think he's taken off these clothes since he left home.\nHe probably never had a chance.\nThank God he's all right.\nHolly strange things happen to people in war.\n- Inside, I mean.\n- Not between us.\n- He'll be the same as always, you'll see.\n- Nothing's ever the same.\nThat's one thing you can't do, stand still.\n[GASPS]\nLook, his sock has rotted away inside his boot.\n[PANTING]\nI'd forgotten how good our earth feels.\nSo rich and full of life.\nCan you hear the soil through my fingers?\nNo.\nWhat's it saying?\nHow much I love you and miss you and need you.\nLast night, I thought...\nLast night I had a nightmare and it was...\nIt was a nightmare.\nSomebody will see us.\nDoes it matter?\nIt isn't the same, is it?\nYes, Holly.\nYou make me feel ashamed.\nWe waited lunch for you.\n- Sorry.\n- Finally gave up.\nI didn't realize the time.\nDaydreaming?\nYes.\nYou can pick your dreams in the daytime.\nI'm sorry you've gotta go tonight.\nSo am I.\nIt's not fair to Holly.\nShe's carrying a pretty heavy burden.\nNo more than you or a dozen other women around here.\nIt's not easy for Holly looking after Papa and little Jeff and me.\nIt's not easy going to bed with a rifle by your side night after night instead of a husband never knowing if you're going to see daylight again.\nNever laughing.\nNever loving.\nNever knowing if the next footstep on the porch is yours or...\nYou're her whole life, Peter.\nDon't shut her out.\nI feel empty.\nDead.\nIt's not so bad in the daytime, in the clean hot sun.\nBut when it grows dark I'm afraid, I guess.\nAnd then when I think of Holly and how much I want her and when it's the moment to touch her and be with her, I can't.\nI just feel dirty, I feel unclean.\nFilthy business we're in.\nTime will wash it clean.\nWho knows how much time there is left?\n- Ready?\n- Yes, yes.\nWhere's Holly?\nShe's in the bedroom.\nWell?\nDon't go.\nPlease, don't go.\nYou expect me to run out?\nYes.\nYes, together.\nSomewhere far away, where there's no war.\nWe belong here, Holly.\nHere, this is our land.\nIt was worked for and paid for.\nNobody's driving me off this land.\nThey can bury me in it, but nobody is chasing me off it.\nPeter, darling, what does a piece of land matter?\nLook what it's doing to us, to everybody.\n- Please, take me away from here.\n- This is our home.\n- They say not.\n- They lie.\nWar is filled with lies.\nWhat they say, what we say, lies.\nOur place is here.\nMy place is with you.\nAnd you have no place for me.\nI'm selfish.\nI don't want to lose you.\nPlease, let's go away from here before it's too late.\nMATSON:\nDo I get the names?\nThe oath-givers the man who killed my wife.\nJoe.\nLathela.\nYou are not afraid of Mau Mau?\nI'm like you.\nI'm too old to be frightened by men.\nThe wrath of God frightens me, not the brutality of men.\nWhat do you want of me?\nHow is it you gave the oath to others and never took it yourself?\nI believe in the faith of my father.\nGood.\nWho are your leaders?\nYour oath-givers?\n[CHUCKLES]\nBy speaking out, you can end the war between us.\nYou leave Africa and the war will end.\nCan't we live in peace, your people and mine?\nGo away.\nYour soft words are sharper than blows.\nWould you prefer violence?\nI'm no ordinary man.\nNothing can make me speak out.\nThey have tried.\nThey could not do it.\nNot with torture, not with pain.\nYou will fail also.\n[LIGHTNING CRASHES THUNDERRUMBLES]\nWell, that's all we needed, a spell of weather.\nNgai is angry.\nWhat's that?\nThunder and lightning.\nWhen it storms, the Kikuyu believes he is face-to-face with god.\nThunder is the sound of god cracking his joints preparing for battle.\nThe lightning is god's sword of retribution.\nYou talk as if you believed that black hogwash yourself.\nThe important thing is whether our friend in there believes it.\nIf he does...\nYou'll never break him with mumbo jumbo.\nHis kind understands only one thing:\nForce.\n- Kill him, you make a martyr of him.\n- He'll be dead.\nHold it, Joe.\nGo ahead, Henry.\nYou gotta fight an idea with a better idea.\nWith the help of this weather, and if I know my man...\nWell, give me one more go at him.\nTell me, Ngai, if I do right.\nI only wish to do thy will.\nGive me a sign that I may know.\n[SPEAKS FOREIGN LANGUAGE]\n[IN ENGLISH] Lathela, get some kerosene and dry wood.\n- I am not afraid to face god.\n- We will see.\nI am the messenger of god.\nDid god create Mau Mau?\nMau Mau is the will of god.\nDid god tell you to mutilate innocent children?\nDid Gikuyu and Mumbi ever violate animals?\nSince the creation of Mount Kenya has god ever told you to steal and murder and burn and hate?\nIs it the will of god that you eat human flesh and blood?\n- I swear that...\n- Wait.\nLet your swearing have value in the eyes of god.\nSwear by your sacred Githathi stone.\nHold this symbol of God in your hands and swear.\nThen I'll believe you.\nNow begin at the beginning.\nDid you ever take the Mau Mau blood oath yourself?\n- No.\n- I believe you.\n- Did you give the oath to others?\n- Yes.\n- By force?\n- Yes.\nYou swore to drive the white men out of Africa, didn't you?\n- Yes.\n- Did God tell you to create Mau Mau?\nSay yes before God and I'll believe you.\nI've said enough.\nYou are afraid to face your god.\n- If Mau Mau drives us out, then what?\n- Then freedom.\n- And faith in god too?\n- Yes, yes.\nHow?\nWhat faith?\nMau Mau, the promise to murder?\nWill god take back the people who've eaten the blood oath?\nThat's why you didn't take the oath yourself, isn't it?\nBecause you wanted to be able to come back to god.\nYes, Ngai, I come to you faithful with no other gods before you.\nHENRY:\nBut you've broken every law of your god.\nTell him that too.\nTell him you gave the blood oath to others by night, by force.\nThat you gave it before witnesses, gave it to women and children.\nThese are the worst violations.\nHow can you lead your people back to god?\nEven tonight, more of your people are being oathed banished from the house of god cursed to live through eternity as a broken-spined hyena.\nIs that the future for your people?\nIs it?\nIs that what you want?\nNo.\nWho's the oath-giver in Nairobi?\nWho is he?\nIf god cannot accept Mau Mau, Mau Mau cannot lead your people.\nIn Nairobi, his name is Timbu.\nWho gives the oath in Thomson's Falls?\nLorry driver for Bwana Wilson.\nNyeri?\nThey are even in the home guard.\nAre Mau Mau in our telephone service?\n- Yes.\n- Code words for guns?\n- Mti, tree.\n- Ammunition?\nMakaa, charcoal.\nThe McKenzie shamba, who led the attack?\nThe...\nThe husband of my daughter.\nHis name?\nKimani wa Karanja.\nMAN [OVER RADIO]:\nThe capture of a high-ranking oath administrator has led to the arrest of many Mau Mau in the Nyeri District.\nLoyal Kikuyu witnesses are cooperating by pointing out those Africans who have taken the blood oath.\nWitnesses wear white hoods to conceal their identities.\nShantytown in Nairobi, cesspool of intrigue and resistance is being flattened and razed.\nReady?\n- Where do you think you're going?\n- To find Kimani.\nGAME WARDEN:\nI can't spare the men for that chase.\n- Just Lathela and I.\n- And when you find him, then what?\n- Ask him to surrender.\n- Why should he?\nBecause I know Kimani.\nBecause he wants peace as much as we do.\nPeace?\nYou said surrender.\nPeace means terms.\nWhat terms?\nHis precious life?\nA seat in parliament?\nYou and your pet black boy.\nYou're just a black liberator, aren't you?\nGAME WARDEN:\nAll right, all right.\nWhat terms?\nThe lives of his people.\n- What can we lose by trying?\n- Did this Kimani take the oath?\nThe old man says yes.\nYou wouldn't have one chance in a thousand of coming out alive.\nMAN [OVER RADIO]:\nThe emergency operations now cost the government more than a million pounds every month.\nSeveral farmers in the Nyeri District have quit their farms and returned to England.\nMau Mau gangs are being forced deeper into the Aberdare Mountains.\n[GUNSHOTS]\nHOLLY:\nThe flare, Papa.\nSend up the flare.\nHENRY:\nElizabeth.\n[WHISTLE BLOWING]\nJeff.\nWhere's Jeff?\nTomorrow, you can take Elizabeth into Nairobi.\nTo the hospital.\nAnd leave here?\nIt's to help Elizabeth.\nWe'll get you a little flat in town and you can come and see me every day.\nYes.\nYes, I'd like that.\nAre you all right?\nNo one came here.\nDid you make contact?\nWell?\nDid you see Kimani?\nWill he come?\nHe's a big general now.\nI do not know if he will come.\nAnd if he come, I do not know if it is to speak or to kill.\nI do not know how a general thinks.\nKIMANl:\nPut down your gun.\nKimani?\nKIMANl:\nThe guns.\nAnd the pistol too.\nThe pistol.\nNow, tell Lathela to build a fire.\nWhy?\nI want my comrades to see you.\nWe're alone, you have nothing to fear.\nI know this.\nYou have tobacco?\n- Cigarettes.\n- Pass them here.\nWhy did you come?\n- Can we not talk face-to-face?\n- No.\n- Njogu is our prisoner.\n- I know.\nHe confessed many things, told us many names.\n- I know.\n- He is not harmed.\nThen why did he turn against us?\nNjogu was braver than any of us.\nHe was not afraid to die.\nHe was afraid for his soul.\nCan you understand that?\nYes.\nThe people he named have been arrested.\n- I know.\n- You know the war goes badly for you.\nIt is possible to lose a battle and still win a war.\nMust Africa always stink of death?\nCan we not live together as friends?\n- Friends have equal rights.\n- They will come.\nOnly when we take them.\n- I think we're ready to give them.\n- What do you want of me?\nPETER:\nGive up.\nSurrender.\nBring in your people.\nSurrender?\nPeace.\nOn what terms?\nJustice.\nUnderstanding.\nIf you stop fighting, others will do likewise.\nYou must have faith.\nYou must try.\nWe have tried before.\nThen try again.\nAnd again and again and again.\nDo you not love anyone?\nYour wife?\nChildren who believe in you?\nYou know of my child?\nNo.\nA man-child?\nYes.\nHe will find a better world than you and I.\nI sometimes dream of when we were children, you and I.\n- Peter?\n- Yeah.\nI've not said that name in many years.\nHow goes it with your father?\nAs well as age will allow.\nHe was a good man.\nHe's a friend of my father.\nYes.\nAnd Memsahib Elizabeth?\nShe is with child.\n- Peter?\n- Yes.\nI did not hurt her.\nI did not hurt her or her children.\nIt was not my hands that struck them.\nI believe you.\nWhat's happened to us?\nWhen did this hatred begin?\nBefore we were born, I think.\nI will talk with my people.\nI will tell them that I trust you.\nBut they must decide for themselves.\nThis will take time.\nFour days hence, you will have your answer.\nIf they agree we will come to the meadow by the hidden spring.\n- You know of it?\n- Yes.\n- You will be there?\n- Yes.\nUntil then.\nKimani.\nGrandpa.\nHENRY:\nPeter.\n- So you pulled it off.\n- Yes.\n- I wanna hear about it.\nYou like a drink?\n- No, thank you, later.\nHolly?\nHolly?\nHolly is with Elizabeth in Nairobi.\nOh...\n- You see, we had another raid here.\n- I know.\nI asked her to go.\n- Don't blame her, son.\nShe was...\n- Thanks, Papa.\nWhat we do is stupid.\nTo surrender betrays everything we have done.\nOur children need food, our sick need medicine.\nAll we need is courage.\nLet me talk to them.\nYou cannot talk to a starving people.\nTheir belly have no ears.\nAnd if they shoot us down?\nNo, I have the word of my friend.\nYour friend is a white man.\nHe hates us.\nIt is your own hatred that you see in others.\nPETER:\nHolly.\nSister Williams.\nI called at your flat.\nYou shouldn't go into Elizabeth's right now.\nAnything wrong?\nNo, she's just a little overdue, that's all.\nThere's nothing to be alarmed about.\nYou're looking...\nYou're looking thinner.\nYou don't look so bad yourself.\nWas it very bad?\nSome days are good, some bad.\n- No, they'll see us.\n- Let them.\nDo you have to go back?\nTonight.\nOh, I wish I could go with you.\nWe'll go away soon in that honeymoon we never had.\nWe don't have to go away to be on a honeymoon.\nBut I thought you wanted to...\nTo run away?\nYeah.\nHOLLY:\nJust when was that?\nLet's see, about a month ago?\nAt least a hundred years.\nI want to go home to our home.\nWith Mount Kenya and God in the garden.\nThe war may not be over for a long time.\nI used to blame the war for everything, didn't I?\nSomebody else's war is always to blame.\nNo, I was to blame.\nWhen you grow up, you realize you can't run away from the world.\nYou just gotta live in it.\nYou're a big girl now.\nI'm beginning to understand about that other woman too.\n- What other woman?\n- Africa.\nOh.\nShe's not the least bit jealous.\nAnd neither am I.\nExcuse me.\nYour boy, Lathela, he says you have to start off for somewhere or other.\nPETER:\nThank you.\nSee you soon.\nPlease, God, let it be soon.\nCan't you make this thing go faster?\nWe've got to get there by daylight.\nWhy?\nIt's almost impossible.\n- But if Kimani shows...\n- He set no hour.\nHe'll wait for us.\nYes, but will Joe Matson wait?\n- Matson?\n- He got wind of it somehow.\nYou should have stopped him.\nI only heard about him myself about an hour ago.\nHow do you keep a thing like this secret?\nHow do you keep Matson off the trigger?\nThis won't be any ceasefire, it'll be cold-blooded murder.\n[PANTING]\n[SLAP BABY CRYING]\nDoctor?\nYes?\nIs there any marks?\nJust the mark of a man.\nLook at this place.\nIt's a perfect trap.\nWhat are we supposed to do?\nWait around till they show up?\nMATSON:\nWe'd be caught in the open.\nIt's a perfect trap, I don't wanna get caught.\n- If they show, it'll be to surrender.\n- How do you know?\nBut they gave their word.\nI'm taking cover.\nYou know how Joe is, always suspicious.\nI know how Mau Mau is too.\nWhere is your friend?\nYou there, all of you, put down your guns.\n[SCREAMING]\nWait.\nPlease.\n[BABY CRYING]\n[KIMANI SCREAMS]\n[SPEAKS IN FOREIGN LANGUAGE]\nYeah, we lost him all right.\nCome on.\n[BABY MOANING CRYING]\n- When we find Kimani, will you kill him?\n- No.\nThen why do we hunt him?\nHe must not think I betrayed him.\nIf he trusts us, others will do likewise.\nIf he escapes, if he does not believe Mau Mau will fight harder and longer.\nKimani will not surrender peacefully.\nNot this time.\n- He will try to kill you.\n- Perhaps.\n- Don't come along.\n- I come with you.\n- Why?\n- This is my fight too.\nMau Mau has killed a hundred of my people for every one of yours.\nI want the same thing for the African that Kimani wants.\nMau Mau is not the way to get them.\nPETER:\nKimani?\nStay here and don't move.\nAnd don't shoot.\n- Let me talk to you.\n- No!\nYou kill my wife and my people.\nWe were betrayed.\nBoth of us.\nI'm here without a weapon.\nAre you alone?\nLathela is here too.\nI'm coming in.\nKeep away.\nKimani.\n[BABY CRYING]\n[GRUNTING]\nDon't make me do it.\nCome back with me.\nNo.\nWe'll start over again.\n- This time, it'll be different.\n- No.\nIt is too late.\nFor you and me.\nIt is too late.\nMust I kill you?\nYes.\n[YELLS]\nGive me the child and bury us both.\nNo.\nPlease.\nHe is dead.\n- What will you do with the child?\n- Take him home.\nElizabeth has a boy, raise them together.\nMaybe for them, it'll be better.\nIt's not too late.\nSubtitles by SDI Media Group\n[ENGLISH SDH]\nDarling.\n- Papa, have I kept you waiting?\n- No, that's all right.\nCome on.\n- Why isn't Peter here?\n- He's playing with Kimani, Papa.\nThat brother of yours and that Kyuke are inseparable.\nCan't he find a white playmate?\nWhy?\nYou can't treat an African like a brother and expect to have a good servant.\nWhen Caroline died, Kimani's mother raised Peter.\nIn a way, they are brothers.\nWhen do you leave for England?\nTomorrow, worst luck.\nI'm homesick already.\nA few years of school...\nYou won't let him marry anybody but me, Mr. McKenzie, will you?\nHas he proposed?\nNo, but I have, quite often.\nWhich of you stole the rifle?\nStep forward.\nYour religion says it is evil to steal.\nYour own medicine shall name the liar.\nIf you tell the truth, this will not burn your tongue.\nHe who lies burns.\nPeter?\nKimani, my son, shall be the first.\nDid you steal that gun?\nDid you steal the gun?\nDid you steal the gun?\nDid you steal the gun?\nI will find the weapon and bring it to you.\nPunish him yourself.\nThe city teaches bad ways to young men.\nHow does it go with your wife?\nThe wife with child?\nTomorrow, the day after...\nThe time is near.\nPapa.\n- How does it work?\n- Plain old witchcraft.\nThe Kikuyu is a very religious man.\nHe fears God, but he trusts him too.\n- But hot steel is...\n- Will not burn a wet tongue.\nBut the liar's spit dries up.\nHim it will scorch.\nHa-ha-ha.\nI think you know more about black witchcraft than you do about the Bible.\n- Let me have my way with these devils...\n- Poor old Jeff is the perfect colonizer.\nWhat's his is his and what's theirs is his too.\nWell, have a good shoot.\nWe're not raising cattle to feed a maverick lion.\nKimani, Lathela.\nTell Kimani not to gut him.\nWe'll leave a smelly calling card for the lion.\nKimani, open the animal, but don't clean him.\nThen you'd better service the guns.\nWhen it comes time to kill the lion, I want to shoot the gun too.\nIt's Jeff's show.\nAnd you know how he feels about Africans and guns.\nKIMANl:\nI want to shoot the gun too.\nI'm sorry.\nLathela.\nKIMANl:\nAlways when we hunt it is the same.\nYou have all the fun, I do all the work.\nWhen we were little and played together...\nBut we're big now.\nAnd things are not the same.\nHit him.\nHit him.\nHit him hard.\nDo what he says, now.\nAnd in a hurry.\nFrom now on, when he tells you to do something, do it.\nDon't think about it, just obey.\nUnderstand me?\nWell?\nCome on, Peter.\nI really should've slapped you.\nMight have been better all around if you had.\nHeh-heh.\nForget it.\nYou had no right to hit Kimani.\nPeter, how many times have I got to tell you?\nBlacks are blacks and not playmates.\nOne thing you can never do is argue with them.\nNever.\nYou tell them.\nOh, sometimes you can joke with them you can boot them in the tail sometimes look after them when they're sick.\nBut you never, never argue with them.\n- The world's changing, Jeff.\n- Not in Africa it isn't.\nKimani's mother raised both of us.\nWe grew up together.\nYou'll never live together on equal footing.\nNot in our lifetime.\nYou can't spend the first 20 years of your life with someone sharing bread and secrets and dreams, and then one day say:\n\"Sorry, it's all over.\nWe live in different worlds.\"\nI don't believe it and I don't like it.\nWait till you settle down and marry Holly and have to deal seriously with the wogs.\nHave you heard from Holly?\nA couple of letters from London.\nShe mentioned coming back?\nJust stuff about school, things like that.\nHm...\nWell, we'd better break camp and go after that lion.\nLathela.\nGet Kimani to help you load.\nKimani not here.\nWhere?\nForget that lion, Jeff.\nWe're gonna find Kimani, and right now.\nAll right, all right, all right.\nYou want Lathela with you?\nNo, you'll need him to track.\nI'll meet you back here at sundown.\n- Are you all right?\n- Yes, bwana.\n- Does it hurt much?\n- No, bwana.\nYou're lying.\n- And stop calling me bwana.\n- What shall I call you?\n\"Boss\"? \"Master\"?\nYes, it hurts.\nNot where the trap cut me only where Jeff slapped me.\nThat is where it hurts.\nWell, then stop thinking about it.\nNo one ever struck me in anger before.\nNot even my own father.\nIt wasn't in anger.\nHe's already forgotten.\nCan you forget it?\nI cannot forget it either.\nWe are alike in many things.\nYou talk Kikuyu same as me.\nI speak English same as you.\nBut you are white and I am black.\nAnd you are the bwana and I am the servant.\nAnd I carry the gun and you shoot.\n- Why is shooting the gun so important?\n- It's not the gun, it is...\nWhat is it, then?\nWhat?\nWe cannot talk as friends.\nWhy?\nYou said it yourself.\nWe are not children anymore so we are not friends anymore.\nI saved your life as a friend.\nI'll always be your friend.\nKimani...\nDoes it hurt much?\nNo.\nThe child doesn't come easily.\nIt is a curse.\nThis morning, I saw the dung of a hyena.\nJust now a vulture passed over us.\nDon't you talk like that.\nJust don't you talk like that.\n- Suppose the child is born feet first.\n- Then it must be killed.\nWhen that child comes, don't you touch it.\nYou understand?\nIt is you who do not understand.\nI'm gonna fetch my father.\nWhite magic will not remove the curse.\n- Perhaps the curse is in your son?\n- What evil did he do?\nSuppose a snake came into his bed.\nSuppose a man struck him and he did not strike back.\nSuppose he broke a law.\nThe child enters life feet first.\nDo what must be done.\nKimani.\nSwear him in.\n- Which god, please?\n- The Christian God.\nI worship Ngai, the god who lives on Mount Kenya.\nI will swear by our sacred Githathi stone.\nYour word will suffice.\nOh, no, no.\nIf I lie before this symbol of God my children and their children and my home and my land will turn to dust.\nAnd when I die I will have no life hereafter except to live forever in eternity by the cursed hyena, cowardly eater of the dead.\nI speak the truth.\nYou're the father of the dead baby in question?\n- Yes.\n- Did you tell the midwife to kill the baby?\nYes.\nIt was born feet first, it was cursed.\nThen what was done?\nWhat is always done according to custom.\nTell His Honor what that is.\nWe smothered the child and buried it under a pot.\n- You know that killing is against the law?\n- God says to murder is wrong.\nAnd when you had that newborn baby smothered, was that not murder?\nNo.\nA child cannot join the tribe until he is 1 year old.\nTherefore, he's not really born until his second year.\nWhat was killed was a demon, not a child.\nYes, yes.\nAnd then what did you do?\n- What?\n- Then what did you do?\nWe sacrificed a young ram.\nMm.\nAnd that, I suppose, got rid of the curse.\nNo.\nNo, sir.\nNot yet.\nI am still here, therefore the curse is still at work.\nWould you do the same thing if another child were born to you feet first?\nYes, yes.\nIt would be my duty.\nWhat in the name of Almighty God are we trying to do to these people?\nPreserve the law, Henry, that's all.\nLaw?\nWhose law?\nNot theirs, surely.\nAll men are equal before the law.\nExcept some are more equal than others.\nThat man is an accomplice to murder.\nHe's admitted that.\nBut can we make him understand it?\nWe take away their customs, their habits, their religion.\nWe stop their tribal dances, we stop them circumcising their women.\nThen we offer them our way of life, something they can't grasp.\nWe say, \"Look how clean and rich and clever we are.\"\nFor the Africans different wages, different life.\nWe mock their wise men.\nTake away the authority from their fathers.\nWhat are the children going to do?\nThey'll lose respect for their elders and fathers and when they do, look out.\nMaybe they'll lose respect for our white Jesus too.\nTurn to something else for help.\nIt won't be to us.\nWell, you understand, don't you, Peter?\nIf we don't make the African respect the law well, the next thing you know, he'll be wanting to rule this country.\nImagine that, now.\nWhatever could give him that idea?\nThis is his son.\nCan he come in while we're here?\nThe city frightens me.\n- Let us go home quickly.\n- Listen, old friend.\nThe law says you must stay here in jail for a while.\nI'm sorry.\nWe'll do everything we can.\nMy daughter will visit you.\nShe'll bring you tobacco and food to comfort you.\nPlease keep this for me.\nA jail is not the proper place to keep god's sacred symbol.\nAnd when my son comes of age...\nI understand.\nI am happy it was not you who struck my son.\nYou are still his friend?\nYes.\nAnd yours too, for as long as you both wish it.\nBoy, boy.\nI told you.\nHe will not help you.\nOur Mathanjuki will purify you.\nHe will drive the curse from your body and I will be free.\n- No.\n- You do not believe in god?\n- Yes, yes.\nBut I do not believe in our witchcraft and black magic.\nWhen Bwana Jeff struck you...\nHe struck a black man to prove that the white man is master, nothing else.\nYou are not in jail because of a curse but only because we are judged by their laws.\nAnd that is the truth.\nAnd I must follow where the truth leads me.\n- Where does it lead you?\n- To strike back.\nWe're men, not animals.\nYou have much to look forward to, my son.\nYou will become headman as I was.\nIs that to be my life?\nHeadman for a white boss?\n\"Yes, bwana.\nNo, bwana.\nYes, bwana.\"\nThis land can serve me too.\nI want my own land.\nThen you must earn it.\nI will, Father.\nI will.\nWho are you?\nWho sent you here?\nWhy you come here?\nHe told me to come here.\nYou told me the white man would put Father in jail.\n- You said we had to fight the white man.\n- Your father is in jail?\n- Yes, and I'm ready to fight.\n- You ran away from the McKenzie shamba?\n- Yes.\n- Why?\n- You stole money?\n- No.\n- Guns?\nNo, why should I steal?\nThen why should you run?\nI don't know.\nThis is my daughter, Wanjiru.\n- He can be of no use to us.\nHe wants to fight the white man.\nWe can use him.\nWe will take him to the mountains.\nWe will train him.\nCome, little boy.\nFirst you will learn to steal guns.\nHm?\nI have no parents and I am hungry.\nI need work.\nNot a sound.\nNothing.\nDo not call.\nDo not answer.\nDo not cough or I kill you.\nUnderstand?\nYou are not alone?\nHow many are there?\nOne other?\nThe houseboy?\nYou will call him by name.\nNothing else, just the name.\nCall him.\nMigwe.\nMigwe.\nThis boy is dead.\nNanyuki Police signing off, 1545.\n- Hello, Peter.\n- I need some help, Hillary.\nIf it's about the sentence of your headman...\nHis son, Kimani.\nHe's missing.\n- When?\n- Last night.\nI want him found.\n- What did he steal?\n- Steal?\nYou want him found, what are the charges?\n- He might be hurt.\n- You check the infirmary?\nAnd I've chased down his family within a hundred miles.\nHe'll show up.\nHe probably went to Nairobi on a toot and...\n- Age?\n- Twenty-one.\n- Height?\n- Six-two, weight a little under 13 stone.\nWait a minute.\nThere was a houseboy killed last night.\nBuxton shamba, at the foot of the Aberdares.\nA gang broke in, stole guns and whiskey.\n- What's that got to do with Kimani?\n- Maybe nothing.\nMaybe everything.\n- Not a chance.\n- Why not?\nI know Kimani.\nI know how he thinks.\nHe's not a criminal.\nYou mean not yet.\nYou just find him.\nAt least send out a description.\nKimani's guilty of only one thing, captain.\nGuilty of being born black.\nTake one.\nWhy that gun?\nMy friend Peter has a gun like this.\nIt is a fine gun.\nI can kill a lion with this.\nOr even a man, huh?\nThere will be no drinking here again.\nNever.\nAdam is our leader.\nWho are you to tell us what...?\nDaughter, ask the other women where to go and what to do.\nKimani.\nI see you have earned a gun.\nThis gun.\nTo get some of these guns, one of our own people was killed.\nWhen lightning strikes, a bystander may be hurt.\nLightning belongs to god.\nThis was murder by him.\nIt was the will of god.\nNo.\nI do not like your ways.\nSit down.\nI go to Nanyuki.\nI work there to free my father in my own way.\nSit down.\nTwo reasons why you cannot leave us.\nThat houseboy.\nThat houseboy who was killed last night, Adam can hang for this.\nSo can you.\nSo can all of us.\n- That is the law.\n- Reason two.\nYou know our names and our faces.\nYou know where we live and how we live.\nWe would be safe only if you stay with us.\nOr if you were dead.\nWe will not always live as hunted animals.\nGreat men make plans for us.\nPlans to drive the white man from our country.\nPlans to take back our land.\nPlans to...\nFlight 212, BO AC arriving from London, Rome, Athens, Cairo, Khartoum.\n- Cigarette?\nNo.\n- Dad?\n- No, thanks.\nFlight 212 departing for Dar es Salaam, Johannesburg and Jamestown.\nThere.\nTwo-one-two departing for Dar es Salaam, Johannesburg and Jamestown.\nEach to their own.\nHolly, I...\nSix years is a long time.\nToo long?\nYou'd better see to her luggage.\n- Can't I watch too?\n- It's indecent.\nThat's why I want to watch.\nOh, really.\nKimani.\nHey.\nKimani.\nStrange.\nI thought I saw Kimani.\nYou remember Kimani?\nMove.\nStart moving.\nWould you mind letting us by, please?\nI've come to pray.\nThis is not a church.\nMy god does not live in a church.\nHow do you call yourself?\nKimani wa Karanja.\nWe are beggars and slaves in our own land.\nThe British allow us in their homes and hotels, yes.\nBut how?\nAs servants.\nWe are millions, they are a handful.\nWe are strong, they are weak.\nHow then are they the masters and we the slaves?\nIs it white magic?\nIs it god's will?\nNo.\nThey have the guns.\nWe too shall have guns.\nAre we ready for this?\nThe whole colored world burns with the fever of revolt with the fire for freedom.\nDo any of you have any questions?\nIs there a doubt in your hearts?\nWhat troubles you?\nKimani.\nHis name is Kimani wa Karanja.\nFor five years, he has been in the mountains with us.\nHe is ready for leadership.\nHe is very strong and loyal.\nStrong men have betrayed us before.\n- You have a question, Kimani?\nKIMANl:\nYes, sir.\n- This talk of guns.\nYes?\nIs this the only way we can get freedom?\nYes.\n- By the spilling of blood?\n- Yes.\nWe will never drive the British out with words.\nAnd not with doubts and not with friendship.\nIt can only be done with guns.\nThe white man did not take this land with guns.\nHe bought this land.\n- This is truth.\n- Mm-hm.\nAnd I must follow where the truth leads me.\nYou were educated in white missionary schools?\nYes, sir.\nLong, long ago, to whom did the land belong?\n- The people.\n- Yes.\nNot one person, but the entire clan.\nAnd therefore only the clan can sell the land correct?\n- Yes, sir.\nNo man of any other tribe can buy our land unless he becomes, in our religion, a Kikuyu.\nYes, sir.\nAnd have the British ever become Kikuyus?\nOr have you become one of the British?\nYour father was a friend of the British.\nBut your father died in their prison.\nThere is only one way to drive out the British.\nBy terror and death.\nEveryone must either be for us or against us.\nThose who be with us, stand.\nGood.\nWe will need a symbol, a sign, a name.\nHere it is.\nMau Mau.\nMau Mau.\nUse it, live by it, die for it.\nMau Mau is the machinery that will carry us to freedom and independence.\nMau Mau.\nMau Mau.\nI swear to kill an Englishman or may this oath kill me and my family.\nI swear to kill an Englishman or may this oath kill me and my family.\n- They make a nice couple, don't they?\n- Mm.\nShe's got good lines for breeding too.\nLook.\nMount Kenya.\nLathela, wait here.\nNo wonder the African believes that God lives on Mount Kenya.\nIf I were God, that's where I'd like to live.\nI feel I'm really home now.\nI love you, Peter.\nI always have.\nI suppose I always will.\nI like the feel of you.\nI wish...\nYes?\nI wish it could always be like this moment.\nSafe and warm and peaceful.\nAlways like this.\nHome is always like this.\nWhy did your husband run away?\nDid he steal?\nDid he do something bad?\nWhere did he go?\nWhy didn't you go with him?\n- I was afraid.\n- Afraid?\nAfraid of what?\nHello, my darling.\nHello, my darling.\nWhat did you bring?\nHello.\nYou didn't forget my rifle?\nYes, it's right here.\nHenry.\nBring the children in.\nBring them in.\nWhat do you think?\nWhat's it mean?\nI don't know.\nTwo Kyukes disappear from my place.\nJasper, his headman reports one gone from his farm, rifle missing too.\nOne gone from your place.\nWhy?\nYou saw his wife.\nShe's afraid.\nWhy?\nWhat of?\nCome in.\nAccording to Kikuyu custom we come to speak for Peter McKenzie, bachelor to Holly Keith, spinster.\n- This shy Kikuyu maiden is grateful.\n- She doesn't look very shy to me.\nHow many goats will be paid for me?\nThree or four ought to be quite enough, don't you think?\nOh, I'd say 20 or 30 at least.\nWhy don't you throw yourself in and make it 31 goats?\nAnd why has Peter wa Henry chosen me?\nHe needs someone to chop firewood and dig potatoes.\nHe needs someone to keep his bed warm.\n- He promises not to beat you often.\n- Unless it's absolutely necessary.\n- He also expects a child every year.\n- All of them his.\n- A very narrow attitude.\n- We shall also have to shave your head.\nDo you accept my son?\nIf you do, we'll drink to the marriage bargain.\nIf you don't, I shall have to pour this on the ground.\nAnd waste all that precious gin?\nThank you for becoming one of our family.\nYou will swear a new blood oath.\nWhen it is done, you will be part of the new army:\nMau Mau.\nHe who refuses to take the oath he dies.\nHe who breaks the oath he dies.\nCut off the sheep's head.\nFill this calabash with its blood.\nSugar cane.\nSugar cane and banana leaves the first source of food.\nMugere plant best and strongest magic.\nThe arch oldest Kikuyu symbol.\nYou will pass through the arch seven times and thereby enter a new life.\nYou will receive seven cuts on the arm to bind you together.\nSeven.\nAll things in seven.\nSeven, the unlucky number.\nBreak the oath and the evil seven will strike.\nSheep's blood symbol of sacrifice.\nMillet seeds of nourishment.\nEarth the earth we fight for.\nThe cause that brings us together.\nYou will eat this oath.\nYou will swallow it seven times so that it becomes part of you.\nBitter Sodom apples.\nTake off everything that stinks of the European.\nWatch, ring, money.\nTo give you an easy road.\nThe endless circles.\nEarth.\nHold it to your belly.\nThat the land may feed us and not the foreigners.\nHold up your arm.\nSo that your blood will mix.\nNow swallow the oath seven times.\nRepeat after me as you pass through the arch.\nIf I sell land to any foreigners, may this oath kill me.\nIf I sell land to any foreigners, may this oath kill me.\n- I will steal guns.\n- I will steal guns.\nI will never be a Christian.\nI will never be a Christian.\nI will drive out all Europeans or kill them.\nI will drive out all Europeans or kill them.\nIt is done.\nThey've all sworn.\nI feel unclean.\nI will not let Wanjiru take this oath.\nIt is not necessary.\nShe is loyal.\nTo swallow the oath was hard enough, but the rest of it...\nThe nameless filth, the shame.\nAnd in front of the others.\nWhy was it necessary?\nWhy?\nTo bind us together forever.\nNow they will do anything.\nKilling of mother, father, son will be as nothing to them.\nThey will feel strong with power and purpose.\n- Who gave you the oath?\n- No one.\nYou never took it?\nI am too old to change.\nI am ready to give up my life, but I cannot give up my faith.\nIt is too deep, too strong.\nIn life and in death I will always believe in the god of my father the god who lives on Mount Kenya.\n- So do I, in spite of the oath.\nYour daughter carries my child.\nNow, I wish to marry her before the child is born.\nI consider you married.\nI will gather cooking stones with my wife as my father before me gathered cooking stones with my mother.\nLike you, I cannot tear out what is in my heart.\nDo it quickly, then.\nWe need rest.\nTomorrow is the appointed day of the long knives.\nOur first attack should be on the McKenzie shamba.\n- Why there?\n- Why not?\nLook, that was my home, my friends.\nA great leader has no friends, only a cause.\n- You doubt my loyalty?\n- I only ask you to prove it.\nLet your panga come back as red as mine.\nThank you for a lovely day.\nLovely wedding day.\n- No more anxiety?\n- Mm-mm.\n- You know why?\n- Why?\nBecause everything's so full of life.\nAll the animals, the earth and even the air smells of life.\nWe've done nothing to spoil it.\nSomeday all this will be farm country.\nWhat will happen to White Hunter McKenzie, then?\nFour years ago, our crops were hit by locusts.\nWiped out.\nPapa put all his savings into cattle.\nThe next year, rinderpest.\nWhat cattle didn't die had to be killed.\nPapa got a loan from the bank.\nSo part of the time, I take rich clients on safari.\nFor the money.\nTo pay back the loan.\nSo the land's good to us this year and the crops hold up, no locusts, no rinderpests I'll be back where I really belong.\nOn the farm.\nYou know, that's the most wonderful wedding present you could ever give me.\n- Are you as happy as I am?\n- I'm a very lucky man.\nI have the two women I love most in the world.\n- Who's the other one?\n- Africa.\nThere are some things I can do for you that Africa can't.\nWhat is it?\nI don't know.\nSomething strange.\nWell, I didn't hear anything.\nI'm not certain.\nIt was something.\nJust a feeling, I guess.\nI wonder what's happened to the porch light.\nProbably the fuse again.\nI'll have a look at it.\nHey, what the...?\nUgh!\nKIMANl:\nRemember me?\nKimani.\n- What do you want?\n- I've come home.\nJeff!\nKIMANl:\nNo.\nKimani.\nJeff Newton and two of his children dead.\nHis wife, Elizabeth, in critical condition.\nOn the open highway to Nanyuki in broad daylight Joe Matson and Mrs. Matson were ambushed while motoring.\nMrs. Matson was killed by machine-gun bullets.\nChief Waruhiu, leader of the anti-Mau Mau movement was murdered at Kiambu.\nMEYLl:\nYes, bwana.\nWere you in your hut last night?\nMEYLl:\nYes.\nIt's lucky your father and the one boy were out visiting.\nWhere is Jeff and the kids?\nWhat's your name?\nMEYLl:\nMeyli.\nWho was with you?\nMEYLl:\nMy husband and my children.\nAnd the mother of my husband.\nDid you ever attend any Mau Mau meetings?\nMEYLl:\nNo, bwana.\nNext, please.\nMrs. McKenzie, what type blood are you?\n- Type O.\n- Come along, please.\nHurry.\nAnybody else here with type O blood?\nPeter?\nLathela is, I think.\nWhich one of you is known as Lathela?\nIs that you?\nCome with me.\nWe need blood to help Memsahib Elizabeth.\nPapa.\nWhy Elizabeth?\nWhy the kids?\nWhy?\nA state of emergency now exists in Kenya.\nKikuyus are being sworn into a terror organization called Mau Mau.\nSmall gangs are fighting guerrilla warfare.\nThere may be Mau Mau on your farms, in your cities, in your homes.\nAny African found with a gun may be punished by death.\nPeter, why do you have to go?\nWe've been over this a dozen times.\nI have to go, that's all.\nYes, but there's the army...\nThe army is inexperienced in the mountain and the bush country.\n- How long will you be away?\n- I don't know.\nWhat am I supposed to do while you're gone?\nWhat the rest of the women are doing, help keep the place going.\nPeter.\nIt wasn't very much of a honeymoon for you, was it?\nAre you very afraid?\nNo, not of them.\nOnly for us.\nIt's us I'm afraid for, what will happen to us.\nMau Mau working underground everywhere.\nMaybe right here in this room, for all we know.\nNow, the government wants information.\nWho's forging the ammunition permits?\nWho's supplying the guns?\nWho's giving the oaths?\nSo it's prisoners we're after.\nIt's your job to track them down.\nI say kill them, make it open warfare, bomb them out.\nKill whom, all 6 million Africans in Kenya?\nWe're only 40,000.\nThat makes the odds about 150-to-1.\nThat's not the point.\nWe're not at war with the Kikuyu nation.\nWe're fighting Mau Mau.\nFor every one of us, they've killed a hundred Kikuyus.\n- Loyal Kikuyus.\n- They don't know what loyalty means.\nNow, listen, man.\nThey're trying to drive us out.\nWhat are we to do?\nPack up because their grandfathers were here first?\nI was born here too.\nThis is my country.\nKilling's no answer.\nWe gotta give the African a chance...\nBlack man's had Africa for years.\nIt'd be a jungle if we hadn't moved in.\nIt's not a question of black or white.\nThat's exactly what it is.\nBlack or white.\nYou'll follow orders or keep out of this.\nWell?\nAll right.\nI'll try it your way for a while.\nNo smoking.\nAnd no fires for cooking.\nWhiskey?\nJeff.\nTalk to me, Papa.\nI don't know what to say.\nAnything, Papa.\nAnything at all.\nThis off-season rain it should do a lot of good.\nYou're doing a big job, child.\nLike my Caroline, a long time ago when the country was new.\nShe was delicate, but strong, like you.\nShe helped to make the land and hold it.\nLike you.\nNo, Papa, not like me.\nI'm weak.\nI'm weak and I'm afraid and I'm lonely.\nPapa.\nWho said you could get out of bed?\nI want to go to Nairobi to see the doctor.\nIs it your arm again?\nI know you'll think I'm mad but I'm going to have another baby.\nYou see, if there's any chance of it being born...\nWell, I mean, after losing so much blood and...\nAnd I want this baby, Papa.\nMore than I've ever wanted anything.\nIt'd be a little bit more of Jeff and...\nHolly, will you take me in to the doctor in the morning?\nHey, you, listen carefully.\nYou are surrounded by police.\nLay down your guns.\nListen carefully.\nLay down your guns.\nYou are surrounded by police.\nAll right.\nWaithaka, do you know any of these people?\n- Next.\n- A good farmer, no Mau Mau.\n- No?\n- No, bwana.\nYou see?\nNjogu, soldier of god.\nHow long were you in the mountains?\nOne year.\nDo not hurt me, bwana.\nWho gave you the oath?\nI do not know.\nIf you lie to me again, I'll kill you.\nNow who was it?\nWho made you swear to the oath?\nWaithaka.\nHelp me.\nHelp me.\nWaithaka.\n- Help me.\n- The woman lies.\nI never saw her before, never.\nI swear.\nBy my father, I swear.\nHere's one of your loyal Kikuyus.\nAll right.\nWe'll start again.\n- You gave the oath to the girl?\n- No.\n- She knew your name.\nHow?\n- She's the wife of my brother.\n- Who gave you the oath?\n- It was dark and raining, I could not see.\nHow do you Mau Mau do it?\nSince when do we use torture?\nThe Mau Mau do it.\nThey love it.\n- You might even grow to love it yourself.\n- I don't like it any more than you do.\nBut I don't like what happened to Matson's wife.\nOr your family.\nOr any families to come.\nWe're not such a big jump away from being savages ourselves, are we?\nPlease.\nPlease let me point him out from here.\nPlease let me.\nThis is the man.\n- Your name.\n- Njogu.\nIs he the one?\nIs he the oath-giver?\nYou said his name was Njogu.\nYou said he was here.\nHe spoke truly.\nI gave the oath to him, to all of them.\nThey know nothing.\nAnd from me, you will get nothing.\nDo not let me stay...\nDo not let me stay here.\nYou promised, bwana.\nYou promised, you promised, you promised.\nWho is it?\nUncle Peter.\nExcuse my appearance.\nI need a drink.\n- I beg your pardon.\n- Let me help you, son.\nThat's right.\nAbsolutely right.\nYou're gonna help us all.\nI need your help.\nGovernment needs help.\nEverybody needs help.\nIt's a big secret job.\nVery important.\nToast.\nToast.\nI don't think he's taken off these clothes since he left home.\nHe probably never had a chance.\nThank God he's all right.\nHolly strange things happen to people in war.\n- Inside, I mean.\n- Not between us.\n- He'll be the same as always, you'll see.\n- Nothing's ever the same.\nThat's one thing you can't do, stand still.\nLook, his sock has rotted away inside his boot.\nI'd forgotten how good our earth feels.\nSo rich and full of life.\nCan you hear the soil through my fingers?\nNo.\nWhat's it saying?\nHow much I love you and miss you and need you.\nLast night, I thought...\nLast night I had a nightmare and it was...\nIt was a nightmare.\nSomebody will see us.\nDoes it matter?\nIt isn't the same, is it?\nYes, Holly.\nYou make me feel ashamed.\nWe waited lunch for you.\n- Sorry.\n- Finally gave up.\nI didn't realize the time.\nDaydreaming?\nYes.\nYou can pick your dreams in the daytime.\nI'm sorry you've gotta go tonight.\nSo am I.\nIt's not fair to Holly.\nShe's carrying a pretty heavy burden.\nNo more than you or a dozen other women around here.\nIt's not easy for Holly looking after Papa and little Jeff and me.\nIt's not easy going to bed with a rifle by your side night after night instead of a husband never knowing if you're going to see daylight again.\nNever laughing.\nNever loving.\nNever knowing if the next footstep on the porch is yours or...\nYou're her whole life, Peter.\nDon't shut her out.\nI feel empty.\nDead.\nIt's not so bad in the daytime, in the clean hot sun.\nBut when it grows dark I'm afraid, I guess.\nAnd then when I think of Holly and how much I want her and when it's the moment to touch her and be with her, I can't.\nI just feel dirty, I feel unclean.\nFilthy business we're in.\nTime will wash it clean.\nWho knows how much time there is left?\n- Ready?\n- Yes, yes.\nWhere's Holly?\nShe's in the bedroom.\nWell?\nDon't go.\nPlease, don't go.\nYou expect me to run out?\nYes.\nYes, together.\nSomewhere far away, where there's no war.\nWe belong here, Holly.\nHere, this is our land.\nIt was worked for and paid for.\nNobody's driving me off this land.\nThey can bury me in it, but nobody is chasing me off it.\nPeter, darling, what does a piece of land matter?\nLook what it's doing to us, to everybody.\n- Please, take me away from here.\n- This is our home.\n- They say not.\n- They lie.\nWar is filled with lies.\nWhat they say, what we say, lies.\nOur place is here.\nMy place is with you.\nAnd you have no place for me.\nI'm selfish.\nI don't want to lose you.\nPlease, let's go away from here before it's too late.\nDo I get the names?\nThe oath-givers the man who killed my wife.\nJoe.\nLathela.\nYou are not afraid of Mau Mau?\nI'm like you.\nI'm too old to be frightened by men.\nThe wrath of God frightens me, not the brutality of men.\nWhat do you want of me?\nHow is it you gave the oath to others and never took it yourself?\nI believe in the faith of my father.\nGood.\nWho are your leaders?\nYour oath-givers?\nBy speaking out, you can end the war between us.\nYou leave Africa and the war will end.\nCan't we live in peace, your people and mine?\nGo away.\nYour soft words are sharper than blows.\nWould you prefer violence?\nI'm no ordinary man.\nNothing can make me speak out.\nThey have tried.\nThey could not do it.\nNot with torture, not with pain.\nYou will fail also.\nWell, that's all we needed, a spell of weather.\nNgai is angry.\nWhat's that?\nThunder and lightning.\nWhen it storms, the Kikuyu believes he is face-to-face with god.\nThunder is the sound of god cracking his joints preparing for battle.\nThe lightning is god's sword of retribution.\nYou talk as if you believed that black hogwash yourself.\nThe important thing is whether our friend in there believes it.\nIf he does...\nYou'll never break him with mumbo jumbo.\nHis kind understands only one thing:\nForce.\n- Kill him, you make a martyr of him.\n- He'll be dead.\nHold it, Joe.\nGo ahead, Henry.\nYou gotta fight an idea with a better idea.\nWith the help of this weather, and if I know my man...\nWell, give me one more go at him.\nTell me, Ngai, if I do right.\nI only wish to do thy will.\nGive me a sign that I may know.\nLathela, get some kerosene and dry wood.\n- I am not afraid to face god.\n- We will see.\nI am the messenger of god.\nDid god create Mau Mau?\nMau Mau is the will of god.\nDid god tell you to mutilate innocent children?\nDid Gikuyu and Mumbi ever violate animals?\nSince the creation of Mount Kenya has god ever told you to steal and murder and burn and hate?\nIs it the will of god that you eat human flesh and blood?\n- I swear that...\n- Wait.\nLet your swearing have value in the eyes of god.\nSwear by your sacred Githathi stone.\nHold this symbol of God in your hands and swear.\nThen I'll believe you.\nNow begin at the beginning.\nDid you ever take the Mau Mau blood oath yourself?\n- No.\n- I believe you.\n- Did you give the oath to others?\n- Yes.\n- By force?\n- Yes.\nYou swore to drive the white men out of Africa, didn't you?\n- Yes.\n- Did God tell you to create Mau Mau?\nSay yes before God and I'll believe you.\nI've said enough.\nYou are afraid to face your god.\n- If Mau Mau drives us out, then what?\n- Then freedom.\n- And faith in god too?\n- Yes, yes.\nHow?\nWhat faith?\nMau Mau, the promise to murder?\nWill god take back the people who've eaten the blood oath?\nThat's why you didn't take the oath yourself, isn't it?\nBecause you wanted to be able to come back to god.\nYes, Ngai, I come to you faithful with no other gods before you.\nBut you've broken every law of your god.\nTell him that too.\nTell him you gave the blood oath to others by night, by force.\nThat you gave it before witnesses, gave it to women and children.\nThese are the worst violations.\nHow can you lead your people back to god?\nEven tonight, more of your people are being oathed banished from the house of god cursed to live through eternity as a broken-spined hyena.\nIs that the future for your people?\nIs it?\nIs that what you want?\nNo.\nWho's the oath-giver in Nairobi?\nWho is he?\nIf god cannot accept Mau Mau, Mau Mau cannot lead your people.\nIn Nairobi, his name is Timbu.\nWho gives the oath in Thomson's Falls?\nLorry driver for Bwana Wilson.\nNyeri?\nThey are even in the home guard.\nAre Mau Mau in our telephone service?\n- Yes.\n- Code words for guns?\n- Mti, tree.\n- Ammunition?\nMakaa, charcoal.\nThe McKenzie shamba, who led the attack?\nThe...\nThe husband of my daughter.\nHis name?\nKimani wa Karanja.\nThe capture of a high-ranking oath administrator has led to the arrest of many Mau Mau in the Nyeri District.\nLoyal Kikuyu witnesses are cooperating by pointing out those Africans who have taken the blood oath.\nWitnesses wear white hoods to conceal their identities.\nShantytown in Nairobi, cesspool of intrigue and resistance is being flattened and razed.\nReady?\n- Where do you think you're going?\n- To find Kimani.\nI can't spare the men for that chase.\n- Just Lathela and I.\n- And when you find him, then what?\n- Ask him to surrender.\n- Why should he?\nBecause I know Kimani.\nBecause he wants peace as much as we do.\nPeace?\nYou said surrender.\nPeace means terms.\nWhat terms?\nHis precious life?\nA seat in parliament?\nYou and your pet black boy.\nYou're just a black liberator, aren't you?\nAll right, all right.\nWhat terms?\nThe lives of his people.\n- What can we lose by trying?\n- Did this Kimani take the oath?\nThe old man says yes.\nYou wouldn't have one chance in a thousand of coming out alive.\nThe emergency operations now cost the government more than a million pounds every month.\nSeveral farmers in the Nyeri District have quit their farms and returned to England.\nMau Mau gangs are being forced deeper into the Aberdare Mountains.\nThe flare, Papa.\nSend up the flare.\nElizabeth.\nJeff.\nWhere's Jeff?\nTomorrow, you can take Elizabeth into Nairobi.\nTo the hospital.\nAnd leave here?\nIt's to help Elizabeth.\nWe'll get you a little flat in town and you can come and see me every day.\nYes.\nYes, I'd like that.\nAre you all right?\nNo one came here.\nDid you make contact?\nWell?\nDid you see Kimani?\nWill he come?\nHe's a big general now.\nI do not know if he will come.\nAnd if he come, I do not know if it is to speak or to kill.\nI do not know how a general thinks.\nKIMANl:\nPut down your gun.\nKimani?\nKIMANl:\nThe guns.\nAnd the pistol too.\nThe pistol.\nNow, tell Lathela to build a fire.\nWhy?\nI want my comrades to see you.\nWe're alone, you have nothing to fear.\nI know this.\nYou have tobacco?\n- Cigarettes.\n- Pass them here.\nWhy did you come?\n- Can we not talk face-to-face?\n- No.\n- Njogu is our prisoner.\n- I know.\nHe confessed many things, told us many names.\n- I know.\n- He is not harmed.\nThen why did he turn against us?\nNjogu was braver than any of us.\nHe was not afraid to die.\nHe was afraid for his soul.\nCan you understand that?\nYes.\nThe people he named have been arrested.\n- I know.\n- You know the war goes badly for you.\nIt is possible to lose a battle and still win a war.\nMust Africa always stink of death?\nCan we not live together as friends?\n- Friends have equal rights.\n- They will come.\nOnly when we take them.\n- I think we're ready to give them.\n- What do you want of me?\nGive up.\nSurrender.\nBring in your people.\nSurrender?\nPeace.\nOn what terms?\nJustice.\nUnderstanding.\nIf you stop fighting, others will do likewise.\nYou must have faith.\nYou must try.\nWe have tried before.\nThen try again.\nAnd again and again and again.\nDo you not love anyone?\nYour wife?\nChildren who believe in you?\nYou know of my child?\nNo.\nA man-child?\nYes.\nHe will find a better world than you and I.\nI sometimes dream of when we were children, you and I.\n- Peter?\n- Yeah.\nI've not said that name in many years.\nHow goes it with your father?\nAs well as age will allow.\nHe was a good man.\nHe's a friend of my father.\nYes.\nAnd Memsahib Elizabeth?\nShe is with child.\n- Peter?\n- Yes.\nI did not hurt her.\nI did not hurt her or her children.\nIt was not my hands that struck them.\nI believe you.\nWhat's happened to us?\nWhen did this hatred begin?\nBefore we were born, I think.\nI will talk with my people.\nI will tell them that I trust you.\nBut they must decide for themselves.\nThis will take time.\nFour days hence, you will have your answer.\nIf they agree we will come to the meadow by the hidden spring.\n- You know of it?\n- Yes.\n- You will be there?\n- Yes.\nUntil then.\nKimani.\nGrandpa.\nPeter.\n- So you pulled it off.\n- Yes.\n- I wanna hear about it.\nYou like a drink?\n- No, thank you, later.\nHolly?\nHolly?\nHolly is with Elizabeth in Nairobi.\nOh...\n- You see, we had another raid here.\n- I know.\nI asked her to go.\n- Don't blame her, son.\nShe was...\n- Thanks, Papa.\nWhat we do is stupid.\nTo surrender betrays everything we have done.\nOur children need food, our sick need medicine.\nAll we need is courage.\nLet me talk to them.\nYou cannot talk to a starving people.\nTheir belly have no ears.\nAnd if they shoot us down?\nNo, I have the word of my friend.\nYour friend is a white man.\nHe hates us.\nIt is your own hatred that you see in others.\nHolly.\nSister Williams.\nI called at your flat.\nYou shouldn't go into Elizabeth's right now.\nAnything wrong?\nNo, she's just a little overdue, that's all.\nThere's nothing to be alarmed about.\nYou're looking...\nYou're looking thinner.\nYou don't look so bad yourself.\nWas it very bad?\nSome days are good, some bad.\n- No, they'll see us.\n- Let them.\nDo you have to go back?\nTonight.\nOh, I wish I could go with you.\nWe'll go away soon in that honeymoon we never had.\nWe don't have to go away to be on a honeymoon.\nBut I thought you wanted to...\nTo run away?\nYeah.\nJust when was that?\nLet's see, about a month ago?\nAt least a hundred years.\nI want to go home to our home.\nWith Mount Kenya and God in the garden.\nThe war may not be over for a long time.\nI used to blame the war for everything, didn't I?\nSomebody else's war is always to blame.\nNo, I was to blame.\nWhen you grow up, you realize you can't run away from the world.\nYou just gotta live in it.\nYou're a big girl now.\nI'm beginning to understand about that other woman too.\n- What other woman?\n- Africa.\nOh.\nShe's not the least bit jealous.\nAnd neither am I.\nExcuse me.\nYour boy, Lathela, he says you have to start off for somewhere or other.\nThank you.\nSee you soon.\nPlease, God, let it be soon.\nCan't you make this thing go faster?\nWe've got to get there by daylight.\nWhy?\nIt's almost impossible.\n- But if Kimani shows...\n- He set no hour.\nHe'll wait for us.\nYes, but will Joe Matson wait?\n- Matson?\n- He got wind of it somehow.\nYou should have stopped him.\nI only heard about him myself about an hour ago.\nHow do you keep a thing like this secret?\nHow do you keep Matson off the trigger?\nThis won't be any ceasefire, it'll be cold-blooded murder.\nDoctor?\nYes?\nIs there any marks?\nJust the mark of a man.\nLook at this place.\nIt's a perfect trap.\nWhat are we supposed to do?\nWait around till they show up?\nWe'd be caught in the open.\nIt's a perfect trap, I don't wanna get caught.\n- If they show, it'll be to surrender.\n- How do you know?\nBut they gave their word.\nI'm taking cover.\nYou know how Joe is, always suspicious.\nI know how Mau Mau is too.\nWhere is your friend?\nYou there, all of you, put down your guns.\nWait.\nPlease.\nYeah, we lost him all right.\nCome on.\n- When we find Kimani, will you kill him?\n- No.\nThen why do we hunt him?\nHe must not think I betrayed him.\nIf he trusts us, others will do likewise.\nIf he escapes, if he does not believe Mau Mau will fight harder and longer.\nKimani will not surrender peacefully.\nNot this time.\n- He will try to kill you.\n- Perhaps.\n- Don't come along.\n- I come with you.\n- Why?\n- This is my fight too.\nMau Mau has killed a hundred of my people for every one of yours.\nI want the same thing for the African that Kimani wants.\nMau Mau is not the way to get them.\nKimani?\nStay here and don't move.\nAnd don't shoot.\n- Let me talk to you.\n- No!\nYou kill my wife and my people.\nWe were betrayed.\nBoth of us.\nI'm here without a weapon.\nAre you alone?\nLathela is here too.\nI'm coming in.\nKeep away.\nKimani.\nDon't make me do it.\nCome back with me.\nNo.\nWe'll start over again.\n- This time, it'll be different.\n- No.\nIt is too late.\nFor you and me.\nIt is too late.\nMust I kill you?\nYes.\nGive me the child and bury us both.\nNo.\nPlease.\nHe is dead.\n- What will you do with the child?\n- Take him home.\nElizabeth has a boy, raise them together.\nMaybe for them, it'll be better.\nIt's not too late.\nSubtitles by SDI Media Group\nDarling.\n- Papa, have I kept you waiting?\n- No, that's all right.\nCome on.\n- Why isn't Peter here?\n- He's playing with Kimani, Papa.\nThat brother of yours and that Kyuke are inseparable.\nCan't he find a white playmate?\nWhy?\nYou can't treat an African like a brother and expect to have a good servant.\nWhen Caroline died, Kimani's mother raised Peter.\nIn a way, they are brothers.\nWhen do you leave for England?\nTomorrow, worst luck.\nI'm homesick already.\nA few years of school...\nYou won't let him marry anybody but me, Mr. McKenzie, will you?\nHas he proposed?\nNo, but I have, quite often.\nWhich of you stole the rifle?\nStep forward.\nYour religion says it is evil to steal.\nYour own medicine shall name the liar.\nIf you tell the truth, this will not burn your tongue.\nHe who lies burns.\nPeter?\nKimani, my son, shall be the first.\nDid you steal that gun?\nDid you steal the gun?\nDid you steal the gun?\nDid you steal the gun?\nI will find the weapon and bring it to you.\nPunish him yourself.\nThe city teaches bad ways to young men.\nHow does it go with your wife?\nThe wife with child?\nTomorrow, the day after...\nThe time is near.\nPapa.\n- How does it work?\n- Plain old witchcraft.\nThe Kikuyu is a very religious man.\nHe fears God, but he trusts him too.\n- But hot steel is...\n- Will not burn a wet tongue.\nBut the liar's spit dries up.\nHim it will scorch.\nHa-ha-ha.\nI think you know more about black witchcraft than you do about the Bible.\n- Let me have my way with these devils...\n- Poor old Jeff is the perfect colonizer.\nWhat's his is his and what's theirs is his too.\nWell, have a good shoot.\nWe're not raising cattle to feed a maverick lion.\nKimani, Lathela.\nTell Kimani not to gut him.\nWe'll leave a smelly calling card for the lion.\nKimani, open the animal, but don't clean him.\nThen you'd better service the guns.\nWhen it comes time to kill the lion, I want to shoot the gun too.\nIt's Jeff's show.\nAnd you know how he feels about Africans and guns.\nKIMANl:\nI want to shoot the gun too.\nI'm sorry.\nLathela.\nKIMANl:\nAlways when we hunt it is the same.\nYou have all the fun, I do all the work.\nWhen we were little and played together...\nBut we're big now.\nAnd things are not the same.\nHit him.\nHit him.\nHit him hard.\nDo what he says, now.\nAnd in a hurry.\nFrom now on, when he tells you to do something, do it.\nDon't think about it, just obey.\nUnderstand me?\nWell?\nCome on, Peter.\nI really should've slapped you.\nMight have been better all around if you had.\nHeh-heh.\nForget it.\nYou had no right to hit Kimani.\nPeter, how many times have I got to tell you?\nBlacks are blacks and not playmates.\nOne thing you can never do is argue with them.\nNever.\nYou tell them.\nOh, sometimes you can joke with them you can boot them in the tail sometimes look after them when they're sick.\nBut you never, never argue with them.\n- The world's changing, Jeff.\n- Not in Africa it isn't.\nKimani's mother raised both of us.\nWe grew up together.\nYou'll never live together on equal footing.\nNot in our lifetime.\nYou can't spend the first 20 years of your life with someone sharing bread and secrets and dreams, and then one day say:\n\"Sorry, it's all over.\nWe live in different worlds\".\nI don't believe it and I don't like it.\nWait till you settle down and marry Holly and have to deal seriously with the wogs.\nHave you heard from Holly?\nA couple of letters from London.\nShe mentioned coming back?\nJust stuff about school, things like that.\nHm...\nWell, we'd better break camp and go after that lion.\nLathela.\nGet Kimani to help you load.\nKimani not here.\nWhere?\nForget that lion, Jeff.\nWe're gonna find Kimani, and right now.\nAll right, all right, all right.\nYou want Lathela with you?\nNo, you'll need him to track.\nI'll meet you back here at sundown.\n- Are you all right?\n- Yes, bwana.\n- Does it hurt much?\n- No, bwana.\nYou're lying.\n- And stop calling me bwana.\n- What shall I call you?\n\"Boss\"? \"Master\"?\nYes, it hurts.\nNot where the trap cut me only where Jeff slapped me.\nThat is where it hurts.\nWell, then stop thinking about it.\nNo one ever struck me in anger before.\nNot even my own father.\nIt wasn't in anger.\nHe's already forgotten.\nCan you forget it?\nI cannot forget it either.\nWe are alike in many things.\nYou talk Kikuyu same as me.\nI speak English same as you.\nBut you are white and I am black.\nAnd you are the bwana and I am the servant.\nAnd I carry the gun and you shoot.\n- Why is shooting the gun so important?\n- It's not the gun, it is...\nWhat is it, then?\nWhat?\nWe cannot talk as friends.\nWhy?\nYou said it yourself.\nWe are not children anymore so we are not friends anymore.\nI saved your life as a friend.\nI'll always be your friend.\nKimani...\nDoes it hurt much?\nNo.\nThe child doesn't come easily.\nIt is a curse.\nThis morning, I saw the dung of a hyena.\nJust now a vulture passed over us.\nDon't you talk like that.\nJust don't you talk like that.\n- Suppose the child is born feet first.\n- Then it must be killed.\nWhen that child comes, don't you touch it.\nYou understand?\nIt is you who do not understand.\nI'm gonna fetch my father.\nWhite magic will not remove the curse.\n- Perhaps the curse is in your son?\n- What evil did he do?\nSuppose a snake came into his bed.\nSuppose a man struck him and he did not strike back.\nSuppose he broke a law.\nThe child enters life feet first.\nDo what must be done.\nKimani.\nSwear him in.\n- Which god, please?\n- The Christian God.\nI worship Ngai, the god who lives on Mount Kenya.\nI will swear by our sacred Githathi stone.\nYour word will suffice.\nOh, no, no.\nIf I lie before this symbol of God my children and their children and my home and my land will turn to dust.\nAnd when I die I will have no life hereafter except to live forever in eternity by the cursed hyena, cowardly eater of the dead.\nI speak the truth.\nYou're the father of the dead baby in question?\n- Yes.\n- Did you tell the midwife to kill the baby?\nYes.\nIt was born feet first, it was cursed.\nThen what was done?\nWhat is always done according to custom.\nTell His Honor what that is.\nWe smothered the child and buried it under a pot.\n- You know that killing is against the law?\n- God says to murder is wrong.\nAnd when you had that newborn baby smothered, was that not murder?\nNo.\nA child cannot join the tribe until he is 1 year old.\nTherefore, he's not really born until his second year.\nWhat was killed was a demon, not a child.\nYes, yes.\nAnd then what did you do?\n- What?\n- Then what did you do?\nWe sacrificed a young ram.\nMm.\nAnd that, I suppose, got rid of the curse.\nNo.\nNo, sir.\nNot yet.\nI am still here, therefore the curse is still at work.\nWould you do the same thing if another child were born to you feet first?\nYes, yes.\nIt would be my duty.\nWhat in the name of Almighty God are we trying to do to these people?\nPreserve the law, Henry, that's all.\nLaw?\nWhose law?\nNot theirs, surely.\nAll men are equal before the law.\nExcept some are more equal than others.\nThat man is an accomplice to murder.\nHe's admitted that.\nBut can we make him understand it?\nWe take away their customs, their habits, their religion.\nWe stop their tribal dances, we stop them circumcising their women.\nThen we offer them our way of life, something they can't grasp.\nWe say, \"Look how clean and rich and clever we are\".\nFor the Africans different wages, different life.\nWe mock their wise men.\nTake away the authority from their fathers.\nWhat are the children going to do?\nThey'll lose respect for their elders and fathers and when they do, look out.\nMaybe they'll lose respect for our white Jesus too.\nTurn to something else for help.\nIt won't be to us.\nWell, you understand, don't you, Peter?\nIf we don't make the African respect the law well, the next thing you know, he'll be wanting to rule this country.\nImagine that, now.\nWhatever could give him that idea?\nThis is his son.\nCan he come in while we're here?\nThe city frightens me.\n- Let us go home quickly.\n- Listen, old friend.\nThe law says you must stay here in jail for a while.\nI'm sorry.\nWe'll do everything we can.\nMy daughter will visit you.\nShe'll bring you tobacco and food to comfort you.\nPlease keep this for me.\nA jail is not the proper place to keep god's sacred symbol.\nAnd when my son comes of age...\nI understand.\nI am happy it was not you who struck my son.\nYou are still his friend?\nYes.\nAnd yours too, for as long as you both wish it.\nBoy, boy.\nI told you.\nHe will not help you.\nOur Mathanjuki will purify you.\nHe will drive the curse from your body and I will be free.\n- No.\n- You do not believe in god?\n- Yes, yes.\nBut I do not believe in our witchcraft and black magic.\nWhen Bwana Jeff struck you...\nHe struck a black man to prove that the white man is master, nothing else.\nYou are not in jail because of a curse but only because we are judged by their laws.\nAnd that is the truth.\nAnd I must follow where the truth leads me.\n- Where does it lead you?\n- To strike back.\nWe're men, not animals.\nYou have much to look forward to, my son.\nYou will become headman as I was.\nIs that to be my life?\nHeadman for a white boss?\n\"Yes, bwana.\nNo, bwana.\nYes, bwana\".\nThis land can serve me too.\nI want my own land.\nThen you must earn it.\nI will, Father.\nI will.\nWho are you?\nWho sent you here?\nWhy you come here?\nHe told me to come here.\nYou told me the white man would put Father in jail.\n- You said we had to fight the white man.\n- Your father is in jail?\n- Yes, and I'm ready to fight.\n- You ran away from the McKenzie shamba?\n- Yes.\n- Why?\n- You stole money?\n- No.\n- Guns?\nNo, why should I steal?\nThen why should you run?\nI don't know.\nThis is my daughter, Wanjiru.\n- He can be of no use to us.\nHe wants to fight the white man.\nWe can use him.\nWe will take him to the mountains.\nWe will train him.\nCome, little boy.\nFirst you will learn to steal guns.\nHm?\nI have no parents and I am hungry.\nI need work.\nNot a sound.\nNothing.\nDo not call.\nDo not answer.\nDo not cough or I kill you.\nUnderstand?\nYou are not alone?\nHow many are there?\nOne other?\nThe houseboy?\nYou will call him by name.\nNothing else, just the name.\nCall him.\nMigwe.\nMigwe.\nThis boy is dead.\nNanyuki Police signing off, 1545.\n- Hello, Peter.\n- I need some help, Hillary.\nIf it's about the sentence of your headman...\nHis son, Kimani.\nHe's missing.\n- When?\n- Last night.\nI want him found.\n- What did he steal?\n- Steal?\nYou want him found, what are the charges?\n- He might be hurt.\n- You check the infirmary?\nAnd I've chased down his family within a hundred miles.\nHe'll show up.\nHe probably went to Nairobi on a toot and...\n- Age?\n- Twenty-one.\n- Height?\n- Six-two, weight a little under 13 stone.\nWait a minute.\nThere was a houseboy killed last night.\nBuxton shamba, at the foot of the Aberdares.\nA gang broke in, stole guns and whiskey.\n- What's that got to do with Kimani?\n- Maybe nothing.\nMaybe everything.\n- Not a chance.\n- Why not?\nI know Kimani.\nI know how he thinks.\nHe's not a criminal.\nYou mean not yet.\nYou just find him.\nAt least send out a description.\nKimani's guilty of only one thing, captain.\nGuilty of being born black.\nTake one.\nWhy that gun?\nMy friend Peter has a gun like this.\nIt is a fine gun.\nI can kill a lion with this.\nOr even a man, huh?\nThere will be no drinking here again.\nNever.\nAdam is our leader.\nWho are you to tell us what...?\nDaughter, ask the other women where to go and what to do.\nKimani.\nI see you have earned a gun.\nThis gun.\nTo get some of these guns, one of our own people was killed.\nWhen lightning strikes, a bystander may be hurt.\nLightning belongs to god.\nThis was murder by him.\nIt was the will of god.\nNo.\nI do not like your ways.\nSit down.\nI go to Nanyuki.\nI work there to free my father in my own way.\nSit down.\nTwo reasons why you cannot leave us.\nThat houseboy.\nThat houseboy who was killed last night, Adam can hang for this.\nSo can you.\nSo can all of us.\n- That is the law.\n- Reason two.\nYou know our names and our faces.\nYou know where we live and how we live.\nWe would be safe only if you stay with us.\nOr if you were dead.\nWe will not always live as hunted animals.\nGreat men make plans for us.\nPlans to drive the white man from our country.\nPlans to take back our land.\nPlans to...\nFlight 212, BO AC arriving from London, Rome, Athens, Cairo, Khartoum.\n- Cigarette?\nNo.\n- Dad?\n- No, thanks.\nFlight 212 departing for Dar es Salaam, Johannesburg and Jamestown.\nThere.\nTwo-one-two departing for Dar es Salaam, Johannesburg and Jamestown.\nEach to their own.\nHolly, I...\nSix years is a long time.\nToo long?\nYou'd better see to her luggage.\n- Can't I watch too?\n- It's indecent.\nThat's why I want to watch.\nOh, really.\nKimani.\nHey.\nKimani.\nStrange.\nI thought I saw Kimani.\nYou remember Kimani?\nMove.\nStart moving.\nWould you mind letting us by, please?\nI've come to pray.\nThis is not a church.\nMy god does not live in a church.\nHow do you call yourself?\nKimani wa Karanja.\nWe are beggars and slaves in our own land.\nThe British allow us in their homes and hotels, yes.\nBut how?\nAs servants.\nWe are millions, they are a handful.\nWe are strong, they are weak.\nHow then are they the masters and we the slaves?\nIs it white magic?\nIs it god's will?\nNo.\nThey have the guns.\nWe too shall have guns.\nAre we ready for this?\nThe whole colored world burns with the fever of revolt with the fire for freedom.\nDo any of you have any questions?\nIs there a doubt in your hearts?\nWhat troubles you?\nKimani.\nHis name is Kimani wa Karanja.\nFor five years, he has been in the mountains with us.\nHe is ready for leadership.\nHe is very strong and loyal.\nStrong men have betrayed us before.\n- You have a question, Kimani?\nKIMANl:\nYes, sir.\n- This talk of guns.\nYes?\nIs this the only way we can get freedom?\nYes.\n- By the spilling of blood?\n- Yes.\nWe will never drive the British out with words.\nAnd not with doubts and not with friendship.\nIt can only be done with guns.\nThe white man did not take this land with guns.\nHe bought this land.\n- This is truth.\n- Mm-hm.\nAnd I must follow where the truth leads me.\nYou were educated in white missionary schools?\nYes, sir.\nLong, long ago, to whom did the land belong?\n- The people.\n- Yes.\nNot one person, but the entire clan.\nAnd therefore only the clan can sell the land correct?\n- Yes, sir.\nNo man of any other tribe can buy our land unless he becomes, in our religion, a Kikuyu.\nYes, sir.\nAnd have the British ever become Kikuyus?\nOr have you become one of the British?\nYour father was a friend of the British.\nBut your father died in their prison.\nThere is only one way to drive out the British.\nBy terror and death.\nEveryone must either be for us or against us.\nThose who be with us, stand.\nGood.\nWe will need a symbol, a sign, a name.\nHere it is.\nMau Mau.\nMau Mau.\nUse it, live by it, die for it.\nMau Mau is the machinery that will carry us to freedom and independence.\nMau Mau.\nMau Mau.\nI swear to kill an Englishman or may this oath kill me and my family.\nI swear to kill an Englishman or may this oath kill me and my family.\n- They make a nice couple, don't they?\n- Mm.\nShe's got good lines for breeding too.\nLook.\nMount Kenya.\nLathela, wait here.\nNo wonder the African believes that God lives on Mount Kenya.\nIf I were God, that's where I'd like to live.\nI feel I'm really home now.\nI love you, Peter.\nI always have.\nI suppose I always will.\nI like the feel of you.\nI wish...\nYes?\nI wish it could always be like this moment.\nSafe and warm and peaceful.\nAlways like this.\nHome is always like this.\nWhy did your husband run away?\nDid he steal?\nDid he do something bad?\nWhere did he go?\nWhy didn't you go with him?\n- I was afraid.\n- Afraid?\nAfraid of what?\nHello, my darling.\nHello, my darling.\nWhat did you bring?\nHello.\nYou didn't forget my rifle?\nYes, it's right here.\nHenry.\nBring the children in.\nBring them in.\nWhat do you think?\nWhat's it mean?\nI don't know.\nTwo Kyukes disappear from my place.\nJasper, his headman reports one gone from his farm, rifle missing too.\nOne gone from your place.\nWhy?\nYou saw his wife.\nShe's afraid.\nWhy?\nWhat of?\nCome in.\nAccording to Kikuyu custom we come to speak for Peter McKenzie, bachelor to Holly Keith, spinster.\n- This shy Kikuyu maiden is grateful.\n- She doesn't look very shy to me.\nHow many goats will be paid for me?\nThree or four ought to be quite enough, don't you think?\nOh, I'd say 20 or 30 at least.\nWhy don't you throw yourself in and make it 31 goats?\nAnd why has Peter wa Henry chosen me?\nHe needs someone to chop firewood and dig potatoes.\nHe needs someone to keep his bed warm.\n- He promises not to beat you often.\n- Unless it's absolutely necessary.\n- He also expects a child every year.\n- All of them his.\n- A very narrow attitude.\n- We shall also have to shave your head.\nDo you accept my son?\nIf you do, we'll drink to the marriage bargain.\nIf you don't, I shall have to pour this on the ground.\nAnd waste all that precious gin?\nThank you for becoming one of our family.\nYou will swear a new blood oath.\nWhen it is done, you will be part of the new army:\nMau Mau.\nHe who refuses to take the oath he dies.\nHe who breaks the oath he dies.\nCut off the sheep's head.\nFill this calabash with its blood.\nSugar cane.\nSugar cane and banana leaves the first source of food.\nMugere plant best and strongest magic.\nThe arch oldest Kikuyu symbol.\nYou will pass through the arch seven times and thereby enter a new life.\nYou will receive seven cuts on the arm to bind you together.\nSeven.\nAll things in seven.\nSeven, the unlucky number.\nBreak the oath and the evil seven will strike.\nSheep's blood symbol of sacrifice.\nMillet seeds of nourishment.\nEarth the earth we fight for.\nThe cause that brings us together.\nYou will eat this oath.\nYou will swallow it seven times so that it becomes part of you.\nBitter Sodom apples.\nTake off everything that stinks of the European.\nWatch, ring, money.\nTo give you an easy road.\nThe endless circles.\nEarth.\nHold it to your belly.\nThat the land may feed us and not the foreigners.\nHold up your arm.\nSo that your blood will mix.\nNow swallow the oath seven times.\nRepeat after me as you pass through the arch.\nIf I sell land to any foreigners, may this oath kill me.\nIf I sell land to any foreigners, may this oath kill me.\n- I will steal guns.\n- I will steal guns.\nI will never be a Christian.\nI will never be a Christian.\nI will drive out all Europeans or kill them.\nI will drive out all Europeans or kill them.\nIt is done.\nThey've all sworn.\nI feel unclean.\nI will not let Wanjiru take this oath.\nIt is not necessary.\nShe is loyal.\nTo swallow the oath was hard enough, but the rest of it...\nThe nameless filth, the shame.\nAnd in front of the others.\nWhy was it necessary?\nWhy?\nTo bind us together forever.\nNow they will do anything.\nKilling of mother, father, son will be as nothing to them.\nThey will feel strong with power and purpose.\n- Who gave you the oath?\n- No one.\nYou never took it?\nI am too old to change.\nI am ready to give up my life, but I cannot give up my faith.\nIt is too deep, too strong.\nIn life and in death I will always believe in the god of my father the god who lives on Mount Kenya.\n- So do I, in spite of the oath.\nYour daughter carries my child.\nNow, I wish to marry her before the child is born.\nI consider you married.\nI will gather cooking stones with my wife as my father before me gathered cooking stones with my mother.\nLike you, I cannot tear out what is in my heart.\nDo it quickly, then.\nWe need rest.\nTomorrow is the appointed day of the long knives.\nOur first attack should be on the McKenzie shamba.\n- Why there?\n- Why not?\nLook, that was my home, my friends.\nA great leader has no friends, only a cause.\n- You doubt my loyalty?\n- I only ask you to prove it.\nLet your panga come back as red as mine.\nThank you for a lovely day.\nLovely wedding day.\n- No more anxiety?\n- Mm-mm.\n- You know why?\n- Why?\nBecause everything's so full of life.\nAll the animals, the earth and even the air smells of life.\nWe've done nothing to spoil it.\nSomeday all this will be farm country.\nWhat will happen to White Hunter McKenzie, then?\nFour years ago, our crops were hit by locusts.\nWiped out.\nPapa put all his savings into cattle.\nThe next year, rinderpest.\nWhat cattle didn't die had to be killed.\nPapa got a loan from the bank.\nSo part of the time, I take rich clients on safari.\nFor the money.\nTo pay back the loan.\nSo the land's good to us this year and the crops hold up, no locusts, no rinderpests I'll be back where I really belong.\nOn the farm.\nYou know, that's the most wonderful wedding present you could ever give me.\n- Are you as happy as I am?\n- I'm a very lucky man.\nI have the two women I love most in the world.\n- Who's the other one?\n- Africa.\nThere are some things I can do for you that Africa can't.\nWhat is it?\nI don't know.\nSomething strange.\nWell, I didn't hear anything.\nI'm not certain.\nIt was something.\nJust a feeling, I guess.\nI wonder what's happened to the porch light.\nProbably the fuse again.\nI'll have a look at it.\nHey, what the...?\nUgh!\nKIMANl:\nRemember me?\nKimani.\n- What do you want?\n- I've come home.\nJeff!\nKIMANl:\nNo.\nKimani.\nJeff Newton and two of his children dead.\nHis wife, Elizabeth, in critical condition.\nOn the open highway to Nanyuki in broad daylight Joe Matson and Mrs. Matson were ambushed while motoring.\nMrs. Matson was killed by machine-gun bullets.\nChief Waruhiu, leader of the anti-Mau Mau movement was murdered at Kiambu.\nMEYLl:\nYes, bwana.\nWere you in your hut last night?\nMEYLl:\nYes.\nIt's lucky your father and the one boy were out visiting.\nWhere is Jeff and the kids?\nWhat's your name?\nMEYLl:\nMeyli.\nWho was with you?\nMEYLl:\nMy husband and my children.\nAnd the mother of my husband.\nDid you ever attend any Mau Mau meetings?\nMEYLl:\nNo, bwana.\nNext, please.\nMrs. McKenzie, what type blood are you?\n- Type O.\n- Come along, please.\nHurry.\nAnybody else here with type O blood?\nPeter?\nLathela is, I think.\nWhich one of you is known as Lathela?\nIs that you?\nCome with me.\nWe need blood to help Memsahib Elizabeth.\nPapa.\nWhy Elizabeth?\nWhy the kids?\nWhy?\nA state of emergency now exists in Kenya.\nKikuyus are being sworn into a terror organization called Mau Mau.\nSmall gangs are fighting guerrilla warfare.\nThere may be Mau Mau on your farms, in your cities, in your homes.\nAny African found with a gun may be punished by death.\nPeter, why do you have to go?\nWe've been over this a dozen times.\nI have to go, that's all.\nYes, but there's the army...\nThe army is inexperienced in the mountain and the bush country.\n- How long will you be away?\n- I don't know.\nWhat am I supposed to do while you're gone?\nWhat the rest of the women are doing, help keep the place going.\nPeter.\nIt wasn't very much of a honeymoon for you, was it?\nAre you very afraid?\nNo, not of them.\nOnly for us.\nIt's us I'm afraid for, what will happen to us.\nMau Mau working underground everywhere.\nMaybe right here in this room, for all we know.\nNow, the government wants information.\nWho's forging the ammunition permits?\nWho's supplying the guns?\nWho's giving the oaths?\nSo it's prisoners we're after.\nIt's your job to track them down.\nI say kill them, make it open warfare, bomb them out.\nKill whom, all 6 million Africans in Kenya?\nWe're only 40,000.\nThat makes the odds about 150-to-1.\nThat's not the point.\nWe're not at war with the Kikuyu nation.\nWe're fighting Mau Mau.\nFor every one of us, they've killed a hundred Kikuyus.\n- Loyal Kikuyus.\n- They don't know what loyalty means.\nNow, listen, man.\nThey're trying to drive us out.\nWhat are we to do?\nPack up because their grandfathers were here first?\nI was born here too.\nThis is my country.\nKilling's no answer.\nWe gotta give the African a chance...\nBlack man's had Africa for years.\nIt'd be a jungle if we hadn't moved in.\nIt's not a question of black or white.\nThat's exactly what it is.\nBlack or white.\nYou'll follow orders or keep out of this.\nWell?\nAll right.\nI'll try it your way for a while.\nNo smoking.\nAnd no fires for cooking.\nWhiskey?\nJeff.\nTalk to me, Papa.\nI don't know what to say.\nAnything, Papa.\nAnything at all.\nThis off-season rain it should do a lot of good.\nYou're doing a big job, child.\nLike my Caroline, a long time ago when the country was new.\nShe was delicate, but strong, like you.\nShe helped to make the land and hold it.\nLike you.\nNo, Papa, not like me.\nI'm weak.\nI'm weak and I'm afraid and I'm lonely.\nPapa.\nWho said you could get out of bed?\nI want to go to Nairobi to see the doctor.\nIs it your arm again?\nI know you'll think I'm mad but I'm going to have another baby.\nYou see, if there's any chance of it being born...\nWell, I mean, after losing so much blood and...\nAnd I want this baby, Papa.\nMore than I've ever wanted anything.\nIt'd be a little bit more of Jeff and...\nHolly, will you take me in to the doctor in the morning?\nHey, you, listen carefully.\nYou are surrounded by police.\nLay down your guns.\nListen carefully.\nLay down your guns.\nYou are surrounded by police.\nAll right.\nWaithaka, do you know any of these people?\n- Next.\n- A good farmer, no Mau Mau.\n- No?\n- No, bwana.\nYou see?\nNjogu, soldier of god.\nHow long were you in the mountains?\nOne year.\nDo not hurt me, bwana.\nWho gave you the oath?\nI do not know.\nIf you lie to me again, I'll kill you.\nNow who was it?\nWho made you swear to the oath?\nWaithaka.\nHelp me.\nHelp me.\nWaithaka.\n- Help me.\n- The woman lies.\nI never saw her before, never.\nI swear.\nBy my father, I swear.\nHere's one of your loyal Kikuyus.\nAll right.\nWe'll start again.\n- You gave the oath to the girl?\n- No.\n- She knew your name.\nHow?\n- She's the wife of my brother.\n- Who gave you the oath?\n- It was dark and raining, I could not see.\nHow do you Mau Mau do it?\nSince when do we use torture?\nThe Mau Mau do it.\nThey love it.\n- You might even grow to love it yourself.\n- I don't like it any more than you do.\nBut I don't like what happened to Matson's wife.\nOr your family.\nOr any families to come.\nWe're not such a big jump away from being savages ourselves, are we?\nPlease.\nPlease let me point him out from here.\nPlease let me.\nThis is the man.\n- Your name.\n- Njogu.\nIs he the one?\nIs he the oath-giver?\nYou said his name was Njogu.\nYou said he was here.\nHe spoke truly.\nI gave the oath to him, to all of them.\nThey know nothing.\nAnd from me, you will get nothing.\nDo not let me stay...\nDo not let me stay here.\nYou promised, bwana.\nYou promised, you promised, you promised.\nWho is it?\nUncle Peter.\nExcuse my appearance.\nI need a drink.\n- I beg your pardon.\n- Let me help you, son.\nThat's right.\nAbsolutely right.\nYou're gonna help us all.\nI need your help.\nGovernment needs help.\nEverybody needs help.\nIt's a big secret job.\nVery important.\nToast.\nToast.\nI don't think he's taken off these clothes since he left home.\nHe probably never had a chance.\nThank God he's all right.\nHolly strange things happen to people in war.\n- Inside, I mean.\n- Not between us.\n- He'll be the same as always, you'll see.\n- Nothing's ever the same.\nThat's one thing you can't do, stand still.\nLook, his sock has rotted away inside his boot.\nI'd forgotten how good our earth feels.\nSo rich and full of life.\nCan you hear the soil through my fingers?\nNo.\nWhat's it saying?\nHow much I love you and miss you and need you.\nLast night, I thought...\nLast night I had a nightmare and it was...\nIt was a nightmare.\nSomebody will see us.\nDoes it matter?\nIt isn't the same, is it?\nYes, Holly.\nYou make me feel ashamed.\nWe waited lunch for you.\n- Sorry.\n- Finally gave up.\nI didn't realize the time.\nDaydreaming?\nYes.\nYou can pick your dreams in the daytime.\nI'm sorry you've gotta go tonight.\nSo am I.\nIt's not fair to Holly.\nShe's carrying a pretty heavy burden.\nNo more than you or a dozen other women around here.\nIt's not easy for Holly looking after Papa and little Jeff and me.\nIt's not easy going to bed with a rifle by your side night after night instead of a husband never knowing if you're going to see daylight again.\nNever laughing.\nNever loving.\nNever knowing if the next footstep on the porch is yours or...\nYou're her whole life, Peter.\nDon't shut her out.\nI feel empty.\nDead.\nIt's not so bad in the daytime, in the clean hot sun.\nBut when it grows dark I'm afraid, I guess.\nAnd then when I think of Holly and how much I want her and when it's the moment to touch her and be with her, I can't.\nI just feel dirty, I feel unclean.\nFilthy business we're in.\nTime will wash it clean.\nWho knows how much time there is left?\n- Ready?\n- Yes, yes.\nWhere's Holly?\nShe's in the bedroom.\nWell?\nDon't go.\nPlease, don't go.\nYou expect me to run out?\nYes.\nYes, together.\nSomewhere far away, where there's no war.\nWe belong here, Holly.\nHere, this is our land.\nIt was worked for and paid for.\nNobody's driving me off this land.\nThey can bury me in it, but nobody is chasing me off it.\nPeter, darling, what does a piece of land matter?\nLook what it's doing to us, to everybody.\n- Please, take me away from here.\n- This is our home.\n- They say not.\n- They lie.\nWar is filled with lies.\nWhat they say, what we say, lies.\nOur place is here.\nMy place is with you.\nAnd you have no place for me.\nI'm selfish.\nI don't want to lose you.\nPlease, let's go away from here before it's too late.\nDo I get the names?\nThe oath-givers the man who killed my wife.\nJoe.\nLathela.\nYou are not afraid of Mau Mau?\nI'm like you.\nI'm too old to be frightened by men.\nThe wrath of God frightens me, not the brutality of men.\nWhat do you want of me?\nHow is it you gave the oath to others and never took it yourself?\nI believe in the faith of my father.\nGood.\nWho are your leaders?\nYour oath-givers?\nBy speaking out, you can end the war between us.\nYou leave Africa and the war will end.\nCan't we live in peace, your people and mine?\nGo away.\nYour soft words are sharper than blows.\nWould you prefer violence?\nI'm no ordinary man.\nNothing can make me speak out.\nThey have tried.\nThey could not do it.\nNot with torture, not with pain.\nYou will fail also.\nWell, that's all we needed, a spell of weather.\nNgai is angry.\nWhat's that?\nThunder and lightning.\nWhen it storms, the Kikuyu believes he is face-to-face with god.\nThunder is the sound of god cracking his joints preparing for battle.\nThe lightning is god's sword of retribution.\nYou talk as if you believed that black hogwash yourself.\nThe important thing is whether our friend in there believes it.\nIf he does...\nYou'll never break him with mumbo jumbo.\nHis kind understands only one thing:\nForce.\n- Kill him, you make a martyr of him.\n- He'll be dead.\nHold it, Joe.\nGo ahead, Henry.\nYou gotta fight an idea with a better idea.\nWith the help of this weather, and if I know my man...\nWell, give me one more go at him.\nTell me, Ngai, if I do right.\nI only wish to do thy will.\nGive me a sign that I may know.\nLathela, get some kerosene and dry wood.\n- I am not afraid to face god.\n- We will see.\nI am the messenger of god.\nDid god create Mau Mau?\nMau Mau is the will of god.\nDid god tell you to mutilate innocent children?\nDid Gikuyu and Mumbi ever violate animals?\nSince the creation of Mount Kenya has god ever told you to steal and murder and burn and hate?\nIs it the will of god that you eat human flesh and blood?\n- I swear that...\n- Wait.\nLet your swearing have value in the eyes of god.\nSwear by your sacred Githathi stone.\nHold this symbol of God in your hands and swear.\nThen I'll believe you.\nNow begin at the beginning.\nDid you ever take the Mau Mau blood oath yourself?\n- No.\n- I believe you.\n- Did you give the oath to others?\n- Yes.\n- By force?\n- Yes.\nYou swore to drive the white men out of Africa, didn't you?\n- Yes.\n- Did God tell you to create Mau Mau?\nSay yes before God and I'll believe you.\nI've said enough.\nYou are afraid to face your god.\n- If Mau Mau drives us out, then what?\n- Then freedom.\n- And faith in god too?\n- Yes, yes.\nHow?\nWhat faith?\nMau Mau, the promise to murder?\nWill god take back the people who've eaten the blood oath?\nThat's why you didn't take the oath yourself, isn't it?\nBecause you wanted to be able to come back to god.\nYes, Ngai, I come to you faithful with no other gods before you.\nBut you've broken every law of your god.\nTell him that too.\nTell him you gave the blood oath to others by night, by force.\nThat you gave it before witnesses, gave it to women and children.\nThese are the worst violations.\nHow can you lead your people back to god?\nEven tonight, more of your people are being oathed banished from the house of god cursed to live through eternity as a broken-spined hyena.\nIs that the future for your people?\nIs it?\nIs that what you want?\nNo.\nWho's the oath-giver in Nairobi?\nWho is he?\nIf god cannot accept Mau Mau, Mau Mau cannot lead your people.\nIn Nairobi, his name is Timbu.\nWho gives the oath in Thomson's Falls?\nLorry driver for Bwana Wilson.\nNyeri?\nThey are even in the home guard.\nAre Mau Mau in our telephone service?\n- Yes.\n- Code words for guns?\n- Mti, tree.\n- Ammunition?\nMakaa, charcoal.\nThe McKenzie shamba, who led the attack?\nThe...\nThe husband of my daughter.\nHis name?\nKimani wa Karanja.\nThe capture of a high-ranking oath administrator has led to the arrest of many Mau Mau in the Nyeri District.\nLoyal Kikuyu witnesses are cooperating by pointing out those Africans who have taken the blood oath.\nWitnesses wear white hoods to conceal their identities.\nShantytown in Nairobi, cesspool of intrigue and resistance is being flattened and razed.\nReady?\n- Where do you think you're going?\n- To find Kimani.\nI can't spare the men for that chase.\n- Just Lathela and I.\n- And when you find him, then what?\n- Ask him to surrender.\n- Why should he?\nBecause I know Kimani.\nBecause he wants peace as much as we do.\nPeace?\nYou said surrender.\nPeace means terms.\nWhat terms?\nHis precious life?\nA seat in parliament?\nYou and your pet black boy.\nYou're just a black liberator, aren't you?\nAll right, all right.\nWhat terms?\nThe lives of his people.\n- What can we lose by trying?\n- Did this Kimani take the oath?\nThe old man says yes.\nYou wouldn't have one chance in a thousand of coming out alive.\nThe emergency operations now cost the government more than a million pounds every month.\nSeveral farmers in the Nyeri District have quit their farms and returned to England.\nMau Mau gangs are being forced deeper into the Aberdare Mountains.\nThe flare, Papa.\nSend up the flare.\nElizabeth.\nJeff.\nWhere's Jeff?\nTomorrow, you can take Elizabeth into Nairobi.\nTo the hospital.\nAnd leave here?\nIt's to help Elizabeth.\nWe'll get you a little flat in town and you can come and see me every day.\nYes.\nYes, I'd like that.\nAre you all right?\nNo one came here.\nDid you make contact?\nWell?\nDid you see Kimani?\nWill he come?\nHe's a big general now.\nI do not know if he will come.\nAnd if he come, I do not know if it is to speak or to kill.\nI do not know how a general thinks.\nKIMANl:\nPut down your gun.\nKimani?\nKIMANl:\nThe guns.\nAnd the pistol too.\nThe pistol.\nNow, tell Lathela to build a fire.\nWhy?\nI want my comrades to see you.\nWe're alone, you have nothing to fear.\nI know this.\nYou have tobacco?\n- Cigarettes.\n- Pass them here.\nWhy did you come?\n- Can we not talk face-to-face?\n- No.\n- Njogu is our prisoner.\n- I know.\nHe confessed many things, told us many names.\n- I know.\n- He is not harmed.\nThen why did he turn against us?\nNjogu was braver than any of us.\nHe was not afraid to die.\nHe was afraid for his soul.\nCan you understand that?\nYes.\nThe people he named have been arrested.\n- I know.\n- You know the war goes badly for you.\nIt is possible to lose a battle and still win a war.\nMust Africa always stink of death?\nCan we not live together as friends?\n- Friends have equal rights.\n- They will come.\nOnly when we take them.\n- I think we're ready to give them.\n- What do you want of me?\nGive up.\nSurrender.\nBring in your people.\nSurrender?\nPeace.\nOn what terms?\nJustice.\nUnderstanding.\nIf you stop fighting, others will do likewise.\nYou must have faith.\nYou must try.\nWe have tried before.\nThen try again.\nAnd again and again and again.\nDo you not love anyone?\nYour wife?\nChildren who believe in you?\nYou know of my child?\nNo.\nA man-child?\nYes.\nHe will find a better world than you and I.\nI sometimes dream of when we were children, you and I.\n- Peter?\n- Yeah.\nI've not said that name in many years.\nHow goes it with your father?\nAs well as age will allow.\nHe was a good man.\nHe's a friend of my father.\nYes.\nAnd Memsahib Elizabeth?\nShe is with child.\n- Peter?\n- Yes.\nI did not hurt her.\nI did not hurt her or her children.\nIt was not my hands that struck them.\nI believe you.\nWhat's happened to us?\nWhen did this hatred begin?\nBefore we were born, I think.\nI will talk with my people.\nI will tell them that I trust you.\nBut they must decide for themselves.\nThis will take time.\nFour days hence, you will have your answer.\nIf they agree we will come to the meadow by the hidden spring.\n- You know of it?\n- Yes.\n- You will be there?\n- Yes.\nUntil then.\nKimani.\nGrandpa.\nPeter.\n- So you pulled it off.\n- Yes.\n- I wanna hear about it.\nYou like a drink?\n- No, thank you, later.\nHolly?\nHolly?\nHolly is with Elizabeth in Nairobi.\nOh...\n- You see, we had another raid here.\n- I know.\nI asked her to go.\n- Don't blame her, son.\nShe was...\n- Thanks, Papa.\nWhat we do is stupid.\nTo surrender betrays everything we have done.\nOur children need food, our sick need medicine.\nAll we need is courage.\nLet me talk to them.\nYou cannot talk to a starving people.\nTheir belly have no ears.\nAnd if they shoot us down?\nNo, I have the word of my friend.\nYour friend is a white man.\nHe hates us.\nIt is your own hatred that you see in others.\nHolly.\nSister Williams.\nI called at your flat.\nYou shouldn't go into Elizabeth's right now.\nAnything wrong?\nNo, she's just a little overdue, that's all.\nThere's nothing to be alarmed about.\nYou're looking...\nYou're looking thinner.\nYou don't look so bad yourself.\nWas it very bad?\nSome days are good, some bad.\n- No, they'll see us.\n- Let them.\nDo you have to go back?\nTonight.\nOh, I wish I could go with you.\nWe'll go away soon in that honeymoon we never had.\nWe don't have to go away to be on a honeymoon.\nBut I thought you wanted to...\nTo run away?\nYeah.\nJust when was that?\nLet's see, about a month ago?\nAt least a hundred years.\nI want to go home to our home.\nWith Mount Kenya and God in the garden.\nThe war may not be over for a long time.\nI used to blame the war for everything, didn't I?\nSomebody else's war is always to blame.\nNo, I was to blame.\nWhen you grow up, you realize you can't run away from the world.\nYou just gotta live in it.\nYou're a big girl now.\nI'm beginning to understand about that other woman too.\n- What other woman?\n- Africa.\nOh.\nShe's not the least bit jealous.\nAnd neither am I.\nExcuse me.\nYour boy, Lathela, he says you have to start off for somewhere or other.\nThank you.\nSee you soon.\nPlease, God, let it be soon.\nCan't you make this thing go faster?\nWe've got to get there by daylight.\nWhy?\nIt's almost impossible.\n- But if Kimani shows...\n- He set no hour.\nHe'll wait for us.\nYes, but will Joe Matson wait?\n- Matson?\n- He got wind of it somehow.\nYou should have stopped him.\nI only heard about him myself about an hour ago.\nHow do you keep a thing like this secret?\nHow do you keep Matson off the trigger?\nThis won't be any ceasefire, it'll be cold-blooded murder.\nDoctor?\nYes?\nIs there any marks?\nJust the mark of a man.\nLook at this place.\nIt's a perfect trap.\nWhat are we supposed to do?\nWait around till they show up?\nWe'd be caught in the open.\nIt's a perfect trap, I don't wanna get caught.\n- If they show, it'll be to surrender.\n- How do you know?\nBut they gave their word.\nI'm taking cover.\nYou know how Joe is, always suspicious.\nI know how Mau Mau is too.\nWhere is your friend?\nYou there, all of you, put down your guns.\nWait.\nPlease.\nYeah, we lost him all right.\nCome on.\n- When we find Kimani, will you kill him?\n- No.\nThen why do we hunt him?\nHe must not think I betrayed him.\nIf he trusts us, others will do likewise.\nIf he escapes, if he does not believe Mau Mau will fight harder and longer.\nKimani will not surrender peacefully.\nNot this time.\n- He will try to kill you.\n- Perhaps.\n- Don't come along.\n- I come with you.\n- Why?\n- This is my fight too.\nMau Mau has killed a hundred of my people for every one of yours.\nI want the same thing for the African that Kimani wants.\nMau Mau is not the way to get them.\nKimani?\nStay here and don't move.\nAnd don't shoot.\n- Let me talk to you.\n- No!\nYou kill my wife and my people.\nWe were betrayed.\nBoth of us.\nI'm here without a weapon.\nAre you alone?\nLathela is here too.\nI'm coming in.\nKeep away.\nKimani.\nDon't make me do it.\nCome back with me.\nNo.\nWe'll start over again.\n- This time, it'll be different.\n- No.\nIt is too late.\nFor you and me.\nIt is too late.\nMust I kill you?\nYes.\nGive me the child and bury us both.\nNo.\nPlease.\nHe is dead.\n- What will you do with the child?\n- Take him home.\nElizabeth has a boy, raise them together.\nMaybe for them, it'll be better.\nIt's not too late.\n[SINGING]\nELIZABETH:\nDarling.\n- Papa, have I kept you waiting?\n- No, that's all right.\nCome on.\n- Why isn't Peter here?\n- He's playing with Kimani, Papa.\nThat brother of yours and that Kyuke are inseparable.\nCan't he find a white playmate?\nWhy?\nYou can't treat an African like a brother and expect to have a good servant.\nWhen Caroline died, Kimani's mother raised Peter.\nIn a way, they are brothers.\n[WHISTLE BLOWS]\nWhen do you leave for England?\nTomorrow, worst luck.\nI'm homesick already.\nA few years of school...\nYou won't let him marry anybody but me, Mr. McKenzie, will you?\nHas he proposed?\nNo, but I have, quite often.\nWhich of you stole the rifle?\nStep forward.\nYour religion says it is evil to steal.\nYour own medicine shall name the liar.\nIf you tell the truth, this will not burn your tongue.\nHe who lies burns.\nPeter?\nKimani, my son, shall be the first.\nDid you steal that gun?\nDid you steal the gun?\nDid you steal the gun?\nDid you steal the gun?\n[CHATTERING DOG BARKING]\nI will find the weapon and bring it to you.\nPunish him yourself.\nThe city teaches bad ways to young men.\nHow does it go with your wife?\nThe wife with child?\nTomorrow, the day after...\nThe time is near.\nPapa.\n- How does it work?\n- Plain old witchcraft.\nThe Kikuyu is a very religious man.\nHe fears God, but he trusts him too.\n- But hot steel is...\n- Will not burn a wet tongue.\nBut the liar's spit dries up.\nHim it will scorch.\nHa-ha-ha.\nI think you know more about black witchcraft than you do about the Bible.\n- Let me have my way with these devils...\n- Poor old Jeff is the perfect colonizer.\nWhat's his is his and what's theirs is his too.\nWell, have a good shoot.\nWe're not raising cattle to feed a maverick lion.\nPETER:\nKimani, Lathela.\nTell Kimani not to gut him.\nWe'll leave a smelly calling card for the lion.\nKimani, open the animal, but don't clean him.\nThen you'd better service the guns.\nWhen it comes time to kill the lion, I want to shoot the gun too.\nIt's Jeff's show.\nAnd you know how he feels about Africans and guns.\nKIMANl:\nI want to shoot the gun too.\nPETER:\nI'm sorry.\nLathela.\nKIMANl:\nAlways when we hunt it is the same.\nYou have all the fun, I do all the work.\nWhen we were little and played together...\nBut we're big now.\nAnd things are not the same.\nHit him.\nHit him.\nHit him hard.\nDo what he says, now.\nAnd in a hurry.\nFrom now on, when he tells you to do something, do it.\nDon't think about it, just obey.\nUnderstand me?\nWell?\nCome on, Peter.\nI really should've slapped you.\nMight have been better all around if you had.\nHeh-heh.\nForget it.\nYou had no right to hit Kimani.\nJEFF:\nPeter, how many times have I got to tell you?\nBlacks are blacks and not playmates.\nOne thing you can never do is argue with them.\nNever.\nYou tell them.\nOh, sometimes you can joke with them you can boot them in the tail sometimes look after them when they're sick.\nBut you never, never argue with them.\n- The world's changing, Jeff.\n- Not in Africa it isn't.\nKimani's mother raised both of us.\nWe grew up together.\nYou'll never live together on equal footing.\nNot in our lifetime.\nYou can't spend the first 20 years of your life with someone sharing bread and secrets and dreams, and then one day say:\n\"Sorry, it's all over.\nWe live in different worlds\".\nI don't believe it and I don't like it.\nWait till you settle down and marry Holly and have to deal seriously with the wogs.\nHave you heard from Holly?\nA couple of letters from London.\nShe mentioned coming back?\nJust stuff about school, things like that.\nHm...\nWell, we'd better break camp and go after that lion.\nLathela.\nGet Kimani to help you load.\nKimani not here.\nPETER:\nWhere?\nForget that lion, Jeff.\nWe're gonna find Kimani, and right now.\nAll right, all right, all right.\n[ENGINE STARTS]\nYou want Lathela with you?\nNo, you'll need him to track.\nI'll meet you back here at sundown.\n[HYENAS YIPPING]\n[WHIMPERS]\n[YELPS]\n- Are you all right?\n- Yes, bwana.\n- Does it hurt much?\n- No, bwana.\nYou're lying.\n- And stop calling me bwana.\n- What shall I call you?\n\"Boss\"? \"Master\"?\nYes, it hurts.\nNot where the trap cut me only where Jeff slapped me.\nThat is where it hurts.\nWell, then stop thinking about it.\nNo one ever struck me in anger before.\nNot even my own father.\nIt wasn't in anger.\nHe's already forgotten.\nCan you forget it?\nI cannot forget it either.\nWe are alike in many things.\nYou talk Kikuyu same as me.\nI speak English same as you.\nBut you are white and I am black.\nAnd you are the bwana and I am the servant.\nAnd I carry the gun and you shoot.\n- Why is shooting the gun so important?\n- It's not the gun, it is...\nWhat is it, then?\nWhat?\nWe cannot talk as friends.\nWhy?\nYou said it yourself.\nWe are not children anymore so we are not friends anymore.\nI saved your life as a friend.\nI'll always be your friend.\nKimani...\nDoes it hurt much?\nNo.\n[SPEAKING IN FOREIGN LANGUAGE]\n[BIRD CROWS]\n[SPEAKING INDISTINCTLY]\nELIZABETH:\nThe child doesn't come easily.\nIt is a curse.\nThis morning, I saw the dung of a hyena.\nJust now a vulture passed over us.\nDon't you talk like that.\nJust don't you talk like that.\n- Suppose the child is born feet first.\n- Then it must be killed.\nWhen that child comes, don't you touch it.\nYou understand?\nIt is you who do not understand.\nI'm gonna fetch my father.\nWhite magic will not remove the curse.\n- Perhaps the curse is in your son?\n- What evil did he do?\nSuppose a snake came into his bed.\nSuppose a man struck him and he did not strike back.\nSuppose he broke a law.\n[BABY CRYING]\nThe child enters life feet first.\nDo what must be done.\n[BABY STOPS CRYING]\n[BELL RINGS]\n[INAUDIBLE DIALOGUE]\nKimani.\nSwear him in.\n- Which god, please?\n- The Christian God.\nI worship Ngai, the god who lives on Mount Kenya.\nI will swear by our sacred Githathi stone.\nCROWN COUNSEL:\nYour word will suffice.\nKARANJA:\nOh, no, no.\nIf I lie before this symbol of God my children and their children and my home and my land will turn to dust.\n[STICKS BANG]\nAnd when I die I will have no life hereafter except to live forever in eternity by the cursed hyena, cowardly eater of the dead.\nI speak the truth.\nYou're the father of the dead baby in question?\n- Yes.\n- Did you tell the midwife to kill the baby?\nYes.\nIt was born feet first, it was cursed.\nThen what was done?\nWhat is always done according to custom.\nCROWN COUNSEL:\nTell His Honor what that is.\nWe smothered the child and buried it under a pot.\n- You know that killing is against the law?\n- God says to murder is wrong.\nAnd when you had that newborn baby smothered, was that not murder?\nNo.\nA child cannot join the tribe until he is 1 year old.\nTherefore, he's not really born until his second year.\nWhat was killed was a demon, not a child.\nYes, yes.\nAnd then what did you do?\n- What?\n- Then what did you do?\nWe sacrificed a young ram.\nMm.\nAnd that, I suppose, got rid of the curse.\nKARANJA:\nNo.\nNo, sir.\nNot yet.\nI am still here, therefore the curse is still at work.\nWould you do the same thing if another child were born to you feet first?\nYes, yes.\nIt would be my duty.\nWhat in the name of Almighty God are we trying to do to these people?\nCROWN COUNSEL:\nPreserve the law, Henry, that's all.\nLaw?\nWhose law?\nNot theirs, surely.\nAll men are equal before the law.\nExcept some are more equal than others.\nThat man is an accomplice to murder.\nHe's admitted that.\nBut can we make him understand it?\nWe take away their customs, their habits, their religion.\nWe stop their tribal dances, we stop them circumcising their women.\nThen we offer them our way of life, something they can't grasp.\nWe say, \"Look how clean and rich and clever we are\".\nFor the Africans different wages, different life.\nWe mock their wise men.\nTake away the authority from their fathers.\nWhat are the children going to do?\nThey'll lose respect for their elders and fathers and when they do, look out.\nMaybe they'll lose respect for our white Jesus too.\nTurn to something else for help.\nIt won't be to us.\nWell, you understand, don't you, Peter?\nIf we don't make the African respect the law well, the next thing you know, he'll be wanting to rule this country.\nImagine that, now.\nWhatever could give him that idea?\nThis is his son.\nCan he come in while we're here?\n[SPEAKS FOREIGN LANGUAGE]\n[IN ENGLISH] The city frightens me.\n- Let us go home quickly.\n- Listen, old friend.\nThe law says you must stay here in jail for a while.\nI'm sorry.\nWe'll do everything we can.\nMy daughter will visit you.\nShe'll bring you tobacco and food to comfort you.\nPlease keep this for me.\nA jail is not the proper place to keep god's sacred symbol.\nAnd when my son comes of age...\nI understand.\nI am happy it was not you who struck my son.\nYou are still his friend?\nYes.\nAnd yours too, for as long as you both wish it.\nMAN:\nBoy, boy.\nI told you.\nHe will not help you.\nOur Mathanjuki will purify you.\nHe will drive the curse from your body and I will be free.\n- No.\n- You do not believe in god?\n- Yes, yes.\nBut I do not believe in our witchcraft and black magic.\nWhen Bwana Jeff struck you...\nHe struck a black man to prove that the white man is master, nothing else.\nYou are not in jail because of a curse but only because we are judged by their laws.\nAnd that is the truth.\nAnd I must follow where the truth leads me.\n- Where does it lead you?\n- To strike back.\nWe're men, not animals.\nYou have much to look forward to, my son.\nYou will become headman as I was.\nIs that to be my life?\nHeadman for a white boss?\n\"Yes, bwana.\nNo, bwana.\nYes, bwana\".\nThis land can serve me too.\nI want my own land.\nThen you must earn it.\nI will, Father.\nI will.\n[DOG BARKING]\n[GASPS]\nWho are you?\nWho sent you here?\nWhy you come here?\nHe told me to come here.\nYou told me the white man would put Father in jail.\n- You said we had to fight the white man.\n- Your father is in jail?\n- Yes, and I'm ready to fight.\n- You ran away from the McKenzie shamba?\n- Yes.\n- Why?\n- You stole money?\n- No.\n- Guns?\nNo, why should I steal?\nThen why should you run?\nI don't know.\nNJOGU:\nThis is my daughter, Wanjiru.\n- He can be of no use to us.\nHe wants to fight the white man.\nWe can use him.\nWe will take him to the mountains.\nWe will train him.\nCome, little boy.\nFirst you will learn to steal guns.\nHm?\n[ENGINE STARTS]\nI have no parents and I am hungry.\nI need work.\nNot a sound.\nNothing.\nDo not call.\nDo not answer.\nDo not cough or I kill you.\nUnderstand?\nYou are not alone?\nHow many are there?\nOne other?\nThe houseboy?\nYou will call him by name.\nNothing else, just the name.\nCall him.\nCOOK:\nMigwe.\nMigwe.\nThis boy is dead.\nNanyuki Police signing off, 1545.\n- Hello, Peter.\n- I need some help, Hillary.\nIf it's about the sentence of your headman...\nHis son, Kimani.\nHe's missing.\n- When?\n- Last night.\nI want him found.\n- What did he steal?\n- Steal?\nYou want him found, what are the charges?\n- He might be hurt.\n- You check the infirmary?\nAnd I've chased down his family within a hundred miles.\nHe'll show up.\nHe probably went to Nairobi on a toot and...\n- Age?\n- Twenty-one.\n- Height?\n- Six-two, weight a little under 13 stone.\nWait a minute.\nThere was a houseboy killed last night.\nBuxton shamba, at the foot of the Aberdares.\nA gang broke in, stole guns and whiskey.\n- What's that got to do with Kimani?\n- Maybe nothing.\nMaybe everything.\n- Not a chance.\n- Why not?\nI know Kimani.\nI know how he thinks.\nHe's not a criminal.\nYou mean not yet.\nYou just find him.\nAt least send out a description.\nKimani's guilty of only one thing, captain.\nGuilty of being born black.\n[SINGING]\nTake one.\nWhy that gun?\nMy friend Peter has a gun like this.\nIt is a fine gun.\nI can kill a lion with this.\nOr even a man, huh?\n[SINGING STOPS]\nThere will be no drinking here again.\nNever.\nAdam is our leader.\nWho are you to tell us what...?\nNJOGU:\nDaughter, ask the other women where to go and what to do.\nKimani.\nI see you have earned a gun.\nThis gun.\nTo get some of these guns, one of our own people was killed.\nWhen lightning strikes, a bystander may be hurt.\nLightning belongs to god.\nThis was murder by him.\nIt was the will of god.\nNo.\nI do not like your ways.\nSit down.\nI go to Nanyuki.\nI work there to free my father in my own way.\nSit down.\nTwo reasons why you cannot leave us.\nThat houseboy.\nThat houseboy who was killed last night, Adam can hang for this.\nSo can you.\nSo can all of us.\n- That is the law.\n- Reason two.\nYou know our names and our faces.\nYou know where we live and how we live.\nWe would be safe only if you stay with us.\nOr if you were dead.\nWe will not always live as hunted animals.\nGreat men make plans for us.\nPlans to drive the white man from our country.\nPlans to take back our land.\nPlans to...\nMAN [OVER PA]:\nFlight 212, BO AC arriving from London, Rome, Athens, Cairo, Khartoum.\n- Cigarette?\nELIZABETH:\nNo.\n- Dad?\n- No, thanks.\nFlight 212 departing for Dar es Salaam, Johannesburg and Jamestown.\nELIZABETH:\nThere.\nTwo-one-two departing for Dar es Salaam, Johannesburg and Jamestown.\nEach to their own.\nHolly, I...\nSix years is a long time.\nToo long?\nYou'd better see to her luggage.\n- Can't I watch too?\n- It's indecent.\nThat's why I want to watch.\nOh, really.\nPETER:\nKimani.\nHey.\n[DOGS BARK]\nKimani.\nStrange.\nI thought I saw Kimani.\nYou remember Kimani?\nMove.\nStart moving.\n[SPEAKS FOREIGN LANGUAGE]\n[IN ENGLISH] Would you mind letting us by, please?\n[SPEAKS FOREIGN LANGUAGE]\nI've come to pray.\nCLERK:\nThis is not a church.\nMy god does not live in a church.\nHow do you call yourself?\nKimani wa Karanja.\nWe are beggars and slaves in our own land.\nThe British allow us in their homes and hotels, yes.\nBut how?\nAs servants.\nWe are millions, they are a handful.\nWe are strong, they are weak.\nHow then are they the masters and we the slaves?\nIs it white magic?\nIs it god's will?\nNo.\nThey have the guns.\nWe too shall have guns.\nAre we ready for this?\nThe whole colored world burns with the fever of revolt with the fire for freedom.\nDo any of you have any questions?\nIs there a doubt in your hearts?\nWhat troubles you?\nNJOGU:\nKimani.\nHis name is Kimani wa Karanja.\nFor five years, he has been in the mountains with us.\nHe is ready for leadership.\nHe is very strong and loyal.\nStrong men have betrayed us before.\n- You have a question, Kimani?\nKIMANl:\nYes, sir.\n- This talk of guns.\nLEADER:\nYes?\nIs this the only way we can get freedom?\nYes.\n- By the spilling of blood?\n- Yes.\nWe will never drive the British out with words.\nAnd not with doubts and not with friendship.\nIt can only be done with guns.\nThe white man did not take this land with guns.\nHe bought this land.\n- This is truth.\n- Mm-hm.\nAnd I must follow where the truth leads me.\nYou were educated in white missionary schools?\nYes, sir.\nLong, long ago, to whom did the land belong?\n- The people.\n- Yes.\nNot one person, but the entire clan.\nAnd therefore only the clan can sell the land correct?\n- Yes, sir.\nNo man of any other tribe can buy our land unless he becomes, in our religion, a Kikuyu.\nYes, sir.\nAnd have the British ever become Kikuyus?\nOr have you become one of the British?\nYour father was a friend of the British.\nBut your father died in their prison.\nThere is only one way to drive out the British.\nBy terror and death.\nEveryone must either be for us or against us.\nThose who be with us, stand.\nGood.\nWe will need a symbol, a sign, a name.\nHere it is.\nMau Mau.\nMau Mau.\nUse it, live by it, die for it.\nMau Mau is the machinery that will carry us to freedom and independence.\nMau Mau.\nALL:\nMau Mau.\nI swear to kill an Englishman or may this oath kill me and my family.\nI swear to kill an Englishman or may this oath kill me and my family.\n- They make a nice couple, don't they?\n- Mm.\nShe's got good lines for breeding too.\nLook.\nMount Kenya.\nLathela, wait here.\nNo wonder the African believes that God lives on Mount Kenya.\nIf I were God, that's where I'd like to live.\nI feel I'm really home now.\nI love you, Peter.\nI always have.\nI suppose I always will.\nI like the feel of you.\nI wish...\nYes?\nI wish it could always be like this moment.\nSafe and warm and peaceful.\nAlways like this.\nHome is always like this.\nWhy did your husband run away?\nDid he steal?\nDid he do something bad?\nWhere did he go?\nWhy didn't you go with him?\n- I was afraid.\n- Afraid?\nAfraid of what?\nWOMAN:\nHello, my darling.\nMAN:\nHello, my darling.\nLITTLE JEFF:\nWhat did you bring?\nPETER:\nHello.\nLITTLE JEFF:\nYou didn't forget my rifle?\nWOMAN:\nYes, it's right here.\nMATSON:\nHenry.\nWOMAN:\nBring the children in.\nBring them in.\nMATSON:\nWhat do you think?\nWhat's it mean?\nI don't know.\nTwo Kyukes disappear from my place.\nJasper, his headman reports one gone from his farm, rifle missing too.\nOne gone from your place.\nWhy?\nYou saw his wife.\nShe's afraid.\nWhy?\nWhat of?\n[DOOR KNOCKS]\nCome in.\nAccording to Kikuyu custom we come to speak for Peter McKenzie, bachelor to Holly Keith, spinster.\n- This shy Kikuyu maiden is grateful.\n- She doesn't look very shy to me.\nHow many goats will be paid for me?\nThree or four ought to be quite enough, don't you think?\nOh, I'd say 20 or 30 at least.\nWhy don't you throw yourself in and make it 31 goats?\nAnd why has Peter wa Henry chosen me?\nHe needs someone to chop firewood and dig potatoes.\nHe needs someone to keep his bed warm.\n- He promises not to beat you often.\n- Unless it's absolutely necessary.\n- He also expects a child every year.\n- All of them his.\n- A very narrow attitude.\n- We shall also have to shave your head.\nDo you accept my son?\nIf you do, we'll drink to the marriage bargain.\nIf you don't, I shall have to pour this on the ground.\nHOLLY:\nAnd waste all that precious gin?\nThank you for becoming one of our family.\nYou will swear a new blood oath.\nWhen it is done, you will be part of the new army:\nMau Mau.\nHe who refuses to take the oath he dies.\nHe who breaks the oath he dies.\nCut off the sheep's head.\nFill this calabash with its blood.\nSugar cane.\nSugar cane and banana leaves the first source of food.\nMugere plant best and strongest magic.\nThe arch oldest Kikuyu symbol.\nYou will pass through the arch seven times and thereby enter a new life.\nYou will receive seven cuts on the arm to bind you together.\nSeven.\nAll things in seven.\nSeven, the unlucky number.\nBreak the oath and the evil seven will strike.\nSheep's blood symbol of sacrifice.\nMillet seeds of nourishment.\nEarth the earth we fight for.\nThe cause that brings us together.\nYou will eat this oath.\nYou will swallow it seven times so that it becomes part of you.\nBitter Sodom apples.\nTake off everything that stinks of the European.\nWatch, ring, money.\nTo give you an easy road.\nThe endless circles.\nEarth.\nHold it to your belly.\nThat the land may feed us and not the foreigners.\nHold up your arm.\nSo that your blood will mix.\nNow swallow the oath seven times.\nRepeat after me as you pass through the arch.\nIf I sell land to any foreigners, may this oath kill me.\nIf I sell land to any foreigners, may this oath kill me.\n- I will steal guns.\n- I will steal guns.\nI will never be a Christian.\nI will never be a Christian.\nI will drive out all Europeans or kill them.\nI will drive out all Europeans or kill them.\nNJOGU:\nIt is done.\nThey've all sworn.\nI feel unclean.\nI will not let Wanjiru take this oath.\nIt is not necessary.\nShe is loyal.\nTo swallow the oath was hard enough, but the rest of it...\nThe nameless filth, the shame.\nAnd in front of the others.\nWhy was it necessary?\nWhy?\nTo bind us together forever.\nNow they will do anything.\nKilling of mother, father, son will be as nothing to them.\nThey will feel strong with power and purpose.\n- Who gave you the oath?\n- No one.\nYou never took it?\nI am too old to change.\nI am ready to give up my life, but I cannot give up my faith.\nIt is too deep, too strong.\nIn life and in death I will always believe in the god of my father the god who lives on Mount Kenya.\n- So do I, in spite of the oath.\nYour daughter carries my child.\nNow, I wish to marry her before the child is born.\nI consider you married.\nI will gather cooking stones with my wife as my father before me gathered cooking stones with my mother.\nLike you, I cannot tear out what is in my heart.\nDo it quickly, then.\nWe need rest.\nTomorrow is the appointed day of the long knives.\nOur first attack should be on the McKenzie shamba.\n- Why there?\n- Why not?\nLook, that was my home, my friends.\nA great leader has no friends, only a cause.\n- You doubt my loyalty?\n- I only ask you to prove it.\nLet your panga come back as red as mine.\n[CAMERA WINDING]\n[BABOONS HOWLING GRUNTING]\n[HOLLY CHUCKLES]\nThank you for a lovely day.\nLovely wedding day.\n- No more anxiety?\n- Mm-mm.\n- You know why?\n- Why?\nBecause everything's so full of life.\nAll the animals, the earth and even the air smells of life.\nWe've done nothing to spoil it.\nSomeday all this will be farm country.\nWhat will happen to White Hunter McKenzie, then?\nFour years ago, our crops were hit by locusts.\nWiped out.\nPapa put all his savings into cattle.\nThe next year, rinderpest.\nWhat cattle didn't die had to be killed.\nPapa got a loan from the bank.\nSo part of the time, I take rich clients on safari.\nFor the money.\nTo pay back the loan.\nSo the land's good to us this year and the crops hold up, no locusts, no rinderpests I'll be back where I really belong.\nOn the farm.\nYou know, that's the most wonderful wedding present you could ever give me.\n- Are you as happy as I am?\n- I'm a very lucky man.\nI have the two women I love most in the world.\n- Who's the other one?\n- Africa.\nThere are some things I can do for you that Africa can't.\nWhat is it?\nI don't know.\nSomething strange.\nWell, I didn't hear anything.\nI'm not certain.\nIt was something.\nJust a feeling, I guess.\n[HORN HONKS]\nI wonder what's happened to the porch light.\nProbably the fuse again.\nI'll have a look at it.\nJEFF:\nHey, what the...?\nUgh!\nKIMANl:\nRemember me?\nKimani.\n- What do you want?\n- I've come home.\n[INAUDIBLE DIALOGUE]\n[CRASHING WHISTLE BLOWING]\nELIZABETH:\nJeff!\nKIMANl:\nNo.\n[MOUTHS] Kimani.\nMAN [OVER RADIO]:\nJeff Newton and two of his children dead.\nHis wife, Elizabeth, in critical condition.\nOn the open highway to Nanyuki in broad daylight Joe Matson and Mrs. Matson were ambushed while motoring.\nMrs. Matson was killed by machine-gun bullets.\nChief Waruhiu, leader of the anti-Mau Mau movement was murdered at Kiambu.\nMEYLl:\nYes, bwana.\nSUPERINTENDENT:\nWere you in your hut last night?\nMEYLl:\nYes.\nSUPERINTENDENT:\nIt's lucky your father and the one boy were out visiting.\nWhere is Jeff and the kids?\nSUPERINTENDENT:\nWhat's your name?\nMEYLl:\nMeyli.\nSUPERINTENDENT:\nWho was with you?\nMEYLl:\nMy husband and my children.\nAnd the mother of my husband.\nSUPERINTENDENT:\nDid you ever attend any Mau Mau meetings?\nMEYLl:\nNo, bwana.\nSUPERINTENDENT:\nNext, please.\n[GASPS]\nMrs. McKenzie, what type blood are you?\n- Type O.\n- Come along, please.\nHurry.\nAnybody else here with type O blood?\nPeter?\nLathela is, I think.\nDOCTOR:\nWhich one of you is known as Lathela?\nIs that you?\nCome with me.\nWe need blood to help Memsahib Elizabeth.\nPapa.\nWhy Elizabeth?\nWhy the kids?\nWhy?\n[WHISTLE BLOWING]\n[GRUNTING YELLING IN FOREIGN LANGUAGE]\n[CAR ENGINE STARTS]\n[MUSIC PLAYING]\nMAN [OVER PA]:\nA state of emergency now exists in Kenya.\nKikuyus are being sworn into a terror organization called Mau Mau.\nSmall gangs are fighting guerrilla warfare.\nThere may be Mau Mau on your farms, in your cities, in your homes.\nAny African found with a gun may be punished by death.\nPeter, why do you have to go?\nWe've been over this a dozen times.\nI have to go, that's all.\nYes, but there's the army...\nThe army is inexperienced in the mountain and the bush country.\n- How long will you be away?\n- I don't know.\nWhat am I supposed to do while you're gone?\nWhat the rest of the women are doing, help keep the place going.\nPeter.\nIt wasn't very much of a honeymoon for you, was it?\nAre you very afraid?\nNo, not of them.\nOnly for us.\nIt's us I'm afraid for, what will happen to us.\nGAME WARDEN:\nMau Mau working underground everywhere.\nMaybe right here in this room, for all we know.\nNow, the government wants information.\nWho's forging the ammunition permits?\nWho's supplying the guns?\nWho's giving the oaths?\nSo it's prisoners we're after.\nIt's your job to track them down.\nI say kill them, make it open warfare, bomb them out.\nKill whom, all 6 million Africans in Kenya?\nWe're only 40,000.\nThat makes the odds about 150-to-1.\nThat's not the point.\nWe're not at war with the Kikuyu nation.\nWe're fighting Mau Mau.\nFor every one of us, they've killed a hundred Kikuyus.\n- Loyal Kikuyus.\n- They don't know what loyalty means.\nNow, listen, man.\nThey're trying to drive us out.\nWhat are we to do?\nPack up because their grandfathers were here first?\nI was born here too.\nThis is my country.\nKilling's no answer.\nWe gotta give the African a chance...\nBlack man's had Africa for years.\nIt'd be a jungle if we hadn't moved in.\nIt's not a question of black or white.\nThat's exactly what it is.\nBlack or white.\nYou'll follow orders or keep out of this.\nWell?\nAll right.\nI'll try it your way for a while.\nNo smoking.\nAnd no fires for cooking.\nWhiskey?\nJeff.\nTalk to me, Papa.\nI don't know what to say.\nAnything, Papa.\nAnything at all.\nThis off-season rain it should do a lot of good.\nYou're doing a big job, child.\nLike my Caroline, a long time ago when the country was new.\nShe was delicate, but strong, like you.\nShe helped to make the land and hold it.\nLike you.\nNo, Papa, not like me.\nI'm weak.\nI'm weak and I'm afraid and I'm lonely.\nPapa.\nWho said you could get out of bed?\nI want to go to Nairobi to see the doctor.\nIs it your arm again?\nI know you'll think I'm mad but I'm going to have another baby.\nYou see, if there's any chance of it being born...\nWell, I mean, after losing so much blood and...\nAnd I want this baby, Papa.\nMore than I've ever wanted anything.\nIt'd be a little bit more of Jeff and...\nHolly, will you take me in to the doctor in the morning?\n[DOG BARKING]\n[SINGING]\nHey, you, listen carefully.\n[MATSON SPEAKS IN FOREIGN LANGUAGE]\nYou are surrounded by police.\n[CHATTERING]\nMATSON: [IN ENGLISH] Lay down your guns.\nListen carefully.\n[GUNFIRE]\n[MATSON SPEAKS IN FOREIGN LANGUAGE]\n[IN ENGLISH] Lay down your guns.\nYou are surrounded by police.\n[CHILD CRYING]\nMATSON:\nAll right.\nWaithaka, do you know any of these people?\n[SPEAKS IN FOREIGN LANGUAGE]\n- Next.\n- A good farmer, no Mau Mau.\n- No?\n- No, bwana.\nYou see?\nNjogu, soldier of god.\nMATSON:\nHow long were you in the mountains?\nOne year.\nDo not hurt me, bwana.\nWho gave you the oath?\nI do not know.\nIf you lie to me again, I'll kill you.\nNow who was it?\nWho made you swear to the oath?\n[THUD]\nWaithaka.\nHelp me.\nHelp me.\nWaithaka.\n- Help me.\n- The woman lies.\nI never saw her before, never.\nI swear.\nBy my father, I swear.\nHere's one of your loyal Kikuyus.\nAll right.\nWe'll start again.\n- You gave the oath to the girl?\n- No.\n- She knew your name.\nHow?\n- She's the wife of my brother.\n- Who gave you the oath?\n- It was dark and raining, I could not see.\nHow do you Mau Mau do it?\nSince when do we use torture?\nThe Mau Mau do it.\nThey love it.\n- You might even grow to love it yourself.\n- I don't like it any more than you do.\nBut I don't like what happened to Matson's wife.\nOr your family.\nOr any families to come.\n[WAITHAKA SCREAMS]\nWe're not such a big jump away from being savages ourselves, are we?\nPlease.\nPlease let me point him out from here.\nPlease let me.\nThis is the man.\n- Your name.\n- Njogu.\nIs he the one?\nIs he the oath-giver?\nYou said his name was Njogu.\nYou said he was here.\nHe spoke truly.\nI gave the oath to him, to all of them.\nThey know nothing.\nAnd from me, you will get nothing.\nWAITHAKA:\nDo not let me stay...\nDo not let me stay here.\nYou promised, bwana.\nYou promised, you promised, you promised.\n[CROWD SCREAMS]\n[WAITHAKA SCREAMS]\n[DOOR KNOCKS]\nWho is it?\n[DOOR KNOCKS VIOLENTLY]\nLITTLE JEFF:\nUncle Peter.\nExcuse my appearance.\nI need a drink.\n- I beg your pardon.\n- Let me help you, son.\nThat's right.\nAbsolutely right.\nYou're gonna help us all.\nI need your help.\nGovernment needs help.\nEverybody needs help.\nIt's a big secret job.\nVery important.\nToast.\nToast.\nI don't think he's taken off these clothes since he left home.\nHe probably never had a chance.\nThank God he's all right.\nHolly strange things happen to people in war.\n- Inside, I mean.\n- Not between us.\n- He'll be the same as always, you'll see.\n- Nothing's ever the same.\nThat's one thing you can't do, stand still.\n[GASPS]\nLook, his sock has rotted away inside his boot.\n[PANTING]\nI'd forgotten how good our earth feels.\nSo rich and full of life.\nCan you hear the soil through my fingers?\nNo.\nWhat's it saying?\nHow much I love you and miss you and need you.\nLast night, I thought...\nLast night I had a nightmare and it was...\nIt was a nightmare.\nSomebody will see us.\nDoes it matter?\nIt isn't the same, is it?\nYes, Holly.\nYou make me feel ashamed.\nWe waited lunch for you.\n- Sorry.\n- Finally gave up.\nI didn't realize the time.\nDaydreaming?\nYes.\nYou can pick your dreams in the daytime.\nI'm sorry you've gotta go tonight.\nSo am I.\nIt's not fair to Holly.\nShe's carrying a pretty heavy burden.\nNo more than you or a dozen other women around here.\nIt's not easy for Holly looking after Papa and little Jeff and me.\nIt's not easy going to bed with a rifle by your side night after night instead of a husband never knowing if you're going to see daylight again.\nNever laughing.\nNever loving.\nNever knowing if the next footstep on the porch is yours or...\nYou're her whole life, Peter.\nDon't shut her out.\nI feel empty.\nDead.\nIt's not so bad in the daytime, in the clean hot sun.\nBut when it grows dark I'm afraid, I guess.\nAnd then when I think of Holly and how much I want her and when it's the moment to touch her and be with her, I can't.\nI just feel dirty, I feel unclean.\nFilthy business we're in.\nTime will wash it clean.\nWho knows how much time there is left?\n- Ready?\n- Yes, yes.\nWhere's Holly?\nShe's in the bedroom.\nWell?\nDon't go.\nPlease, don't go.\nYou expect me to run out?\nYes.\nYes, together.\nSomewhere far away, where there's no war.\nWe belong here, Holly.\nHere, this is our land.\nIt was worked for and paid for.\nNobody's driving me off this land.\nThey can bury me in it, but nobody is chasing me off it.\nPeter, darling, what does a piece of land matter?\nLook what it's doing to us, to everybody.\n- Please, take me away from here.\n- This is our home.\n- They say not.\n- They lie.\nWar is filled with lies.\nWhat they say, what we say, lies.\nOur place is here.\nMy place is with you.\nAnd you have no place for me.\nI'm selfish.\nI don't want to lose you.\nPlease, let's go away from here before it's too late.\nMATSON:\nDo I get the names?\nThe oath-givers the man who killed my wife.\nJoe.\nLathela.\nYou are not afraid of Mau Mau?\nI'm like you.\nI'm too old to be frightened by men.\nThe wrath of God frightens me, not the brutality of men.\nWhat do you want of me?\nHow is it you gave the oath to others and never took it yourself?\nI believe in the faith of my father.\nGood.\nWho are your leaders?\nYour oath-givers?\n[CHUCKLES]\nBy speaking out, you can end the war between us.\nYou leave Africa and the war will end.\nCan't we live in peace, your people and mine?\nGo away.\nYour soft words are sharper than blows.\nWould you prefer violence?\nI'm no ordinary man.\nNothing can make me speak out.\nThey have tried.\nThey could not do it.\nNot with torture, not with pain.\nYou will fail also.\n[LIGHTNING CRASHES THUNDERRUMBLES]\nWell, that's all we needed, a spell of weather.\nNgai is angry.\nWhat's that?\nThunder and lightning.\nWhen it storms, the Kikuyu believes he is face-to-face with god.\nThunder is the sound of god cracking his joints preparing for battle.\nThe lightning is god's sword of retribution.\nYou talk as if you believed that black hogwash yourself.\nThe important thing is whether our friend in there believes it.\nIf he does...\nYou'll never break him with mumbo jumbo.\nHis kind understands only one thing:\nForce.\n- Kill him, you make a martyr of him.\n- He'll be dead.\nHold it, Joe.\nGo ahead, Henry.\nYou gotta fight an idea with a better idea.\nWith the help of this weather, and if I know my man...\nWell, give me one more go at him.\nTell me, Ngai, if I do right.\nI only wish to do thy will.\nGive me a sign that I may know.\n[SPEAKS FOREIGN LANGUAGE]\n[IN ENGLISH] Lathela, get some kerosene and dry wood.\n- I am not afraid to face god.\n- We will see.\nI am the messenger of god.\nDid god create Mau Mau?\nMau Mau is the will of god.\nDid god tell you to mutilate innocent children?\nDid Gikuyu and Mumbi ever violate animals?\nSince the creation of Mount Kenya has god ever told you to steal and murder and burn and hate?\nIs it the will of god that you eat human flesh and blood?\n- I swear that...\n- Wait.\nLet your swearing have value in the eyes of god.\nSwear by your sacred Githathi stone.\nHold this symbol of God in your hands and swear.\nThen I'll believe you.\nNow begin at the beginning.\nDid you ever take the Mau Mau blood oath yourself?\n- No.\n- I believe you.\n- Did you give the oath to others?\n- Yes.\n- By force?\n- Yes.\nYou swore to drive the white men out of Africa, didn't you?\n- Yes.\n- Did God tell you to create Mau Mau?\nSay yes before God and I'll believe you.\nI've said enough.\nYou are afraid to face your god.\n- If Mau Mau drives us out, then what?\n- Then freedom.\n- And faith in god too?\n- Yes, yes.\nHow?\nWhat faith?\nMau Mau, the promise to murder?\nWill god take back the people who've eaten the blood oath?\nThat's why you didn't take the oath yourself, isn't it?\nBecause you wanted to be able to come back to god.\nYes, Ngai, I come to you faithful with no other gods before you.\nHENRY:\nBut you've broken every law of your god.\nTell him that too.\nTell him you gave the blood oath to others by night, by force.\nThat you gave it before witnesses, gave it to women and children.\nThese are the worst violations.\nHow can you lead your people back to god?\nEven tonight, more of your people are being oathed banished from the house of god cursed to live through eternity as a broken-spined hyena.\nIs that the future for your people?\nIs it?\nIs that what you want?\nNo.\nWho's the oath-giver in Nairobi?\nWho is he?\nIf god cannot accept Mau Mau, Mau Mau cannot lead your people.\nIn Nairobi, his name is Timbu.\nWho gives the oath in Thomson's Falls?\nLorry driver for Bwana Wilson.\nNyeri?\nThey are even in the home guard.\nAre Mau Mau in our telephone service?\n- Yes.\n- Code words for guns?\n- Mti, tree.\n- Ammunition?\nMakaa, charcoal.\nThe McKenzie shamba, who led the attack?\nThe...\nThe husband of my daughter.\nHis name?\nKimani wa Karanja.\nMAN [OVER RADIO]:\nThe capture of a high-ranking oath administrator has led to the arrest of many Mau Mau in the Nyeri District.\nLoyal Kikuyu witnesses are cooperating by pointing out those Africans who have taken the blood oath.\nWitnesses wear white hoods to conceal their identities.\nShantytown in Nairobi, cesspool of intrigue and resistance is being flattened and razed.\nReady?\n- Where do you think you're going?\n- To find Kimani.\nGAME WARDEN:\nI can't spare the men for that chase.\n- Just Lathela and I.\n- And when you find him, then what?\n- Ask him to surrender.\n- Why should he?\nBecause I know Kimani.\nBecause he wants peace as much as we do.\nPeace?\nYou said surrender.\nPeace means terms.\nWhat terms?\nHis precious life?\nA seat in parliament?\nYou and your pet black boy.\nYou're just a black liberator, aren't you?\nGAME WARDEN:\nAll right, all right.\nWhat terms?\nThe lives of his people.\n- What can we lose by trying?\n- Did this Kimani take the oath?\nThe old man says yes.\nYou wouldn't have one chance in a thousand of coming out alive.\nMAN [OVER RADIO]:\nThe emergency operations now cost the government more than a million pounds every month.\nSeveral farmers in the Nyeri District have quit their farms and returned to England.\nMau Mau gangs are being forced deeper into the Aberdare Mountains.\n[GUNSHOTS]\nHOLLY:\nThe flare, Papa.\nSend up the flare.\nHENRY:\nElizabeth.\n[WHISTLE BLOWING]\nJeff.\nWhere's Jeff?\nTomorrow, you can take Elizabeth into Nairobi.\nTo the hospital.\nAnd leave here?\nIt's to help Elizabeth.\nWe'll get you a little flat in town and you can come and see me every day.\nYes.\nYes, I'd like that.\nAre you all right?\nNo one came here.\nDid you make contact?\nWell?\nDid you see Kimani?\nWill he come?\nHe's a big general now.\nI do not know if he will come.\nAnd if he come, I do not know if it is to speak or to kill.\nI do not know how a general thinks.\nKIMANl:\nPut down your gun.\nKimani?\nKIMANl:\nThe guns.\nAnd the pistol too.\nThe pistol.\nNow, tell Lathela to build a fire.\nWhy?\nI want my comrades to see you.\nWe're alone, you have nothing to fear.\nI know this.\nYou have tobacco?\n- Cigarettes.\n- Pass them here.\nWhy did you come?\n- Can we not talk face-to-face?\n- No.\n- Njogu is our prisoner.\n- I know.\nHe confessed many things, told us many names.\n- I know.\n- He is not harmed.\nThen why did he turn against us?\nNjogu was braver than any of us.\nHe was not afraid to die.\nHe was afraid for his soul.\nCan you understand that?\nYes.\nThe people he named have been arrested.\n- I know.\n- You know the war goes badly for you.\nIt is possible to lose a battle and still win a war.\nMust Africa always stink of death?\nCan we not live together as friends?\n- Friends have equal rights.\n- They will come.\nOnly when we take them.\n- I think we're ready to give them.\n- What do you want of me?\nPETER:\nGive up.\nSurrender.\nBring in your people.\nSurrender?\nPeace.\nOn what terms?\nJustice.\nUnderstanding.\nIf you stop fighting, others will do likewise.\nYou must have faith.\nYou must try.\nWe have tried before.\nThen try again.\nAnd again and again and again.\nDo you not love anyone?\nYour wife?\nChildren who believe in you?\nYou know of my child?\nNo.\nA man-child?\nYes.\nHe will find a better world than you and I.\nI sometimes dream of when we were children, you and I.\n- Peter?\n- Yeah.\nI've not said that name in many years.\nHow goes it with your father?\nAs well as age will allow.\nHe was a good man.\nHe's a friend of my father.\nYes.\nAnd Memsahib Elizabeth?\nShe is with child.\n- Peter?\n- Yes.\nI did not hurt her.\nI did not hurt her or her children.\nIt was not my hands that struck them.\nI believe you.\nWhat's happened to us?\nWhen did this hatred begin?\nBefore we were born, I think.\nI will talk with my people.\nI will tell them that I trust you.\nBut they must decide for themselves.\nThis will take time.\nFour days hence, you will have your answer.\nIf they agree we will come to the meadow by the hidden spring.\n- You know of it?\n- Yes.\n- You will be there?\n- Yes.\nUntil then.\nKimani.\nGrandpa.\nHENRY:\nPeter.\n- So you pulled it off.\n- Yes.\n- I wanna hear about it.\nYou like a drink?\n- No, thank you, later.\nHolly?\nHolly?\nHolly is with Elizabeth in Nairobi.\nOh...\n- You see, we had another raid here.\n- I know.\nI asked her to go.\n- Don't blame her, son.\nShe was...\n- Thanks, Papa.\nWhat we do is stupid.\nTo surrender betrays everything we have done.\nOur children need food, our sick need medicine.\nAll we need is courage.\nLet me talk to them.\nYou cannot talk to a starving people.\nTheir belly have no ears.\nAnd if they shoot us down?\nNo, I have the word of my friend.\nYour friend is a white man.\nHe hates us.\nIt is your own hatred that you see in others.\nPETER:\nHolly.\nSister Williams.\nI called at your flat.\nYou shouldn't go into Elizabeth's right now.\nAnything wrong?\nNo, she's just a little overdue, that's all.\nThere's nothing to be alarmed about.\nYou're looking...\nYou're looking thinner.\nYou don't look so bad yourself.\nWas it very bad?\nSome days are good, some bad.\n- No, they'll see us.\n- Let them.\nDo you have to go back?\nTonight.\nOh, I wish I could go with you.\nWe'll go away soon in that honeymoon we never had.\nWe don't have to go away to be on a honeymoon.\nBut I thought you wanted to...\nTo run away?\nYeah.\nHOLLY:\nJust when was that?\nLet's see, about a month ago?\nAt least a hundred years.\nI want to go home to our home.\nWith Mount Kenya and God in the garden.\nThe war may not be over for a long time.\nI used to blame the war for everything, didn't I?\nSomebody else's war is always to blame.\nNo, I was to blame.\nWhen you grow up, you realize you can't run away from the world.\nYou just gotta live in it.\nYou're a big girl now.\nI'm beginning to understand about that other woman too.\n- What other woman?\n- Africa.\nOh.\nShe's not the least bit jealous.\nAnd neither am I.\nExcuse me.\nYour boy, Lathela, he says you have to start off for somewhere or other.\nPETER:\nThank you.\nSee you soon.\nPlease, God, let it be soon.\nCan't you make this thing go faster?\nWe've got to get there by daylight.\nWhy?\nIt's almost impossible.\n- But if Kimani shows...\n- He set no hour.\nHe'll wait for us.\nYes, but will Joe Matson wait?\n- Matson?\n- He got wind of it somehow.\nYou should have stopped him.\nI only heard about him myself about an hour ago.\nHow do you keep a thing like this secret?\nHow do you keep Matson off the trigger?\nThis won't be any ceasefire, it'll be cold-blooded murder.\n[PANTING]\n[SLAP BABY CRYING]\nDoctor?\nYes?\nIs there any marks?\nJust the mark of a man.\nLook at this place.\nIt's a perfect trap.\nWhat are we supposed to do?\nWait around till they show up?\nMATSON:\nWe'd be caught in the open.\nIt's a perfect trap, I don't wanna get caught.\n- If they show, it'll be to surrender.\n- How do you know?\nBut they gave their word.\nI'm taking cover.\nYou know how Joe is, always suspicious.\nI know how Mau Mau is too.\nWhere is your friend?\nYou there, all of you, put down your guns.\n[SCREAMING]\nWait.\nPlease.\n[BABY CRYING]\n[KIMANI SCREAMS]\n[SPEAKS IN FOREIGN LANGUAGE]\nYeah, we lost him all right.\nCome on.\n[BABY MOANING CRYING]\n- When we find Kimani, will you kill him?\n- No.\nThen why do we hunt him?\nHe must not think I betrayed him.\nIf he trusts us, others will do likewise.\nIf he escapes, if he does not believe Mau Mau will fight harder and longer.\nKimani will not surrender peacefully.\nNot this time.\n- He will try to kill you.\n- Perhaps.\n- Don't come along.\n- I come with you.\n- Why?\n- This is my fight too.\nMau Mau has killed a hundred of my people for every one of yours.\nI want the same thing for the African that Kimani wants.\nMau Mau is not the way to get them.\nPETER:\nKimani?\nStay here and don't move.\nAnd don't shoot.\n- Let me talk to you.\n- No!\nYou kill my wife and my people.\nWe were betrayed.\nBoth of us.\nI'm here without a weapon.\nAre you alone?\nLathela is here too.\nI'm coming in.\nKeep away.\nKimani.\n[BABY CRYING]\n[GRUNTING]\nDon't make me do it.\nCome back with me.\nNo.\nWe'll start over again.\n- This time, it'll be different.\n- No.\nIt is too late.\nFor you and me.\nIt is too late.\nMust I kill you?\nYes.\n[YELLS]\nGive me the child and bury us both.\nNo.\nPlease.\nHe is dead.\n- What will you do with the child?\n- Take him home.\nElizabeth has a boy, raise them together.\nMaybe for them, it'll be better.\nIt's not too late.\nStudio \"Les Films Marceau\" is\nRaymond Pellegrin\nJeanne Moreau\nPaul Meurisse\nThe film \"Until the last one\"\nDirector:\nPierre Billon\nBy ANDRE Duquesne (novel)\nDialogues:\nMICHEL ODIYAR\nCast:\nMAX REVOL\nJACQUELINE Noelle\nJACQUES DYUFILHO and other\nComposer:\nGEORGE VAN PARIS\nOperator:\nPIERRE PETIT\nProducer:\nANDRE REFFE\nWarning!\nGive out!\nLet pass, madam!\nPass!\nLet's hurry!\nCome!\nWhere is the farce Marcella?\n- Marcello fortuneteller?\n- Yes.\n- You her friend?\n- No.\nHer brother.\nYou also guessing on a glass bowl and tea leaves?\nIf only, I do not believe that any penny.\nIn any case, things you better than mine.\nMy name Kvedchi.\n- Not all the same call Duran.\nBy Romani which means \"a fig.\"\nHere's how!\nOnce I was an acrobat - I jumped from 12 meters into the bath.\nA one night missed.\nSince then - not worth a fig.\nKeep.\nI mended your pad.\nCan you portray Lovelace evening.\nI do not work the shoulder muscles more.\nBut the language works.\nMaybe I'm lucky, and you tell me where I can find Marcello?\nThere.\nThe second trailer for the circus.\nThank you.\n- What is this rogue?\n- Bro Marcella.\nGo and prosperous branch of the family.\nSo smartly dressed!\n- Too!\nOr a policeman or a thug.\nBut it expressed pretty well.\nSo bandit.\n- Oh, it's you!\n- Your joy is encouraging me.\nHow do I see you has kept the family tradition.\nHow do you come from?\nFrom prison.\nA little rest in 6 months.\nClutter, shorter.\nI wonder, when will you grow up and poumneesh?\nChange the record, okay?\nGive the best drink.\nThe buffet has a wine.\nWait a minute.\nWhat's the matter?\nOh, nothing.\nFatigue.\nHeart...\n- No!\nIt is you not the weakest link.\nYou know, all of this - the word.\nWe fight, finding fault, but generally...\nWe love each other, no?\n- Heck!\nHere we are!\nI need you, yes?\nYes.\nI...\nI would have to...\nI have to hide for a few days.\nBut do not worry.\nDo not the cops.\nSo much the better.\nBecause here strictly look after us.\nFair - is a disease of the gendarmes.\nNo one knows why.\nHow do you think you can get me a job?\nYou are not going to tell me that looking for a job?\nWell, let's say, that was something to do.\nIt looks like you're in something cool vljapalsja!\nI was in prison.\n- Look, Bernard.\n- Yes?\nI do not play face-down.\nI'm ready to be for you, but I need to know against whom?\nI have already told you about my former friend - gang Richoni?\n- Good buddy!\n- I told you, the former!\nThey cranked a small business.\nIt is not weak.\nWe took a big jackpot - 14 million.\nWow!\nGive me my pills.\nThere, in a box.\n14 million - is hiding.\nYou - the shelter that I know.\nYou stole prey?\nWhen you want to settle down, it takes money.\nBut do not worry, my friends about anything not guess.\nEven the fact that I was known for their cache.\nThey are there, for sure, not see for several days, and during this time...\nDuring this time?\nI do not know, complications may occur, minor disassembly...\nAccidents at work...\nYou sold them ?\n!\nI sell?\nNo.\nPassed.\nDo not you think the same, for the sake of the 14 million I will stand on ceremony?\n14 million...\nCan you imagine?\nThey will quickly realize which way the wind blows, if they have a head on their shoulders.\nTo get the moolah, they killed two agents and three passers-by.\nSo, believe me, my head on his shoulders at them - only temporarily.\nThe main thing that I could sit in the shelter,\nUntil they are caught.\n- Money to you?\n- Laugh or what?\n- How much you give, if I help?\n- What do you mean!\nWill you take stolen money ?\n!\nYou would divide wrongfully acquired?\nWould deprive his brother ?\n!\nWhat about your sister?\nYou'll get as much as do.\nWill not work, there is no fuel.\nOkay.\nCome descend to Cinco.\nLet's go.\nIt is the owner of the circus.\nAnd it is more than one, - he owes me money.\nIt's okay.\nJust hoof ragged.\nIt is necessary to treat with ointment.\nOr maybe to get started is to call the vet?\nVet?\nAnd why not pedicurists?\nDo you think I have little parasites on contentment?\nCome on, shoo!\nTake it from here.\nBut mother and Marcella.\nAgain, probably came to knock out money from the owner.\nWho is she?\nAnd it is quite personal.\nThis is your show?\nOh well!\nCinco!\nA, Marcella, my beauty!\nI'm always happy to see you.\nOnly you are not on time.\nYou just do not think I have my bad intentions.\nLong for me - is sacred, but...\n- I did not come here for this.\nDo you still have no barkers?\n- Yes.\nAnd soon there will be nothing at all.\nThings are deteriorating, people no longer go to the circus...\nAnd you know why?\n- Due to the television.\nExactly!\nCircus offered to them right at home.\nThey baldeyut home with his family.\nThis is for him?\nThis is my brother, Fernand Bastia.\nYou do me a favor, if You take it.\nIt's hungry?\nTo work for me, you must be hungry.\nThen consider that I'm hungry.\nWell, if that's the manifestation of humanity - well.\nAnd I know how to be grateful.\nJust keep in mind - here you are not a farce.\nIt is necessary not only to be a greeter.\nI must still be helpful.\nAnd much work to do here.\nAnd in response to the generosity of Cinco:\n2000 francs per week, and grubs.\n2000!\nAre you kidding ?\n!\nYou pay the guy the previous 5!\nAnd nearly bankrupt, with such a breadth of US!\nDo you want to take it or not.\n- I take!\n- Listen Cinco, can you...\n- He has already agreed!\nIt you take a piece of bread!\nYou'll live with the acrobats.\nMadeleine!\nTake this guy for Dario.\nWill live with him!\nNo, sit down, I'm going.\nWell, we'll see you tonight?\nTell me, do you want?\nYes, after the closing.\nBut it's too late!\nI can not walk after 10.\nOkay, come when you want.\nSomething will think.\nOh, unwound, my mother is coming!\nLets go faster!\nAll the time an eyesore, and all the time with a servant!\nAll in father!\nThat did not stop my father to marry...\nSociety lady!\nGypsy acrobats - it's here.\nThis small palace!\nYou must have not often worked in the circus?\n- Why?\n- So, come to mind.\nHow long are you going to stay here?\nLet's see.\nWhat?\nNothing.\nJust like that.\nAnd why did you suddenly decide to come here?\nI am looking for work.\nSo bad luck, you found it.\nWay or not?\nI am looking for work and found.\nWhat is your name?\n- Gina.\nAnd this - my trailer.\nOnly with flowers.\nSince then, as the Cinco cut staff, I live alone.\nThis has its cons and pros...\n.\nDario?\nDario!\n- What's the matter?\n- Brought you a tenant.\nWho else?\nThis brother Marcella.\nCinco hired him greeter.\nCome here!\nMy name is Philip.\nPhilip Dario.\nYou surely have heard about me.\nOf course!\nDario and Nellie - \"The Ghost and Death\"!\nThere is no more room.\n- You did not tell Marcella?\n- Yes, of course, I tell!\nOkay, I'll leave you.\nSee you later.\nWell, welcome...\nCome!\nMake yourself at home!\nYour predecessor was sleeping on the right side,\nIf you have a preference or superstition...\nNo, no!\nTake the couch, I will build on the cot.\nI'm sorry, I have to go to work with Stella.\nStella - this is my daughter.\nI'll explain it later.\nHey, Mom!\nMama!\nWhat do you want?\nGo keep an eye on the bench, I'll be right back.\nThe next...\nWell, satisfied with their housing?\nOh, yes!\nMore than sugary hard to think!\nCould get me anywhere else!\nWhere is it?\nThe trailer Marcella?\nNo...\nI would have liked more than another.\nHere is how?\nWhat?\nI do not know.\nFor example, the one with the flowers.\nBeautiful colors, pleasant company and smells good...\nFor example, waking up in the morning, at breakfast...\n- What do you eat breakfast?\n- Coffee.\nWhen I as a child - More and croissants.\nWhat are you laughing at?\n- You're just like a fair actor!\n- Maybe belated vocation?\n- Yeah, he can.\nA can converge see your trailer?\nNo.\nNot now.\n- Gina...\n- Gina, please!\n- Yes!\n- It's because I'm good,\nI have to go.\nMerchants closed at 7 o'clock.\nThere will be a bakery, there will be no croissants.\nAll this chatter!\nHe must be somewhere!\nGood.\nWe here will not uyd置.\n- So what?\n- What?\nA curtain!\nIt is nowhere seen.\n- So he's hiding somewhere.\nThinly noticed!\nI do not whether you think that it will be waiting for us on the terrace of a cafe?\nPour a mug.\n- You've got the idea, Fredo?\nThey I have always, and it is ill-advised.\nFor ideas - as friends, they should not be too much.\nHello?\nYes, it's me.\nYes.\nA?\nWhat?\nYes.\nYes, I know!\nWell, where is she?\nThank you.\nYou're a real friend!\nWhat?\nThe name of his sister - Marcella fortune-telling.\nMaybe he's hiding from her after the case in a villa in Neuilly?\nWhere she lives, this abnormal?\nPowered by miserable fairs in provincial towns.\n- These godforsaken full!\n- Fredo!\nYou will not find a cigarette?\nWhat if he did not go to his Sis?\nNow, with attendants, that it may fall down abroad.\nWell, call Jojo.\n- All sorts of Jojo!\n- Jojo, the little wagon!\n- What's the matter?\n- Police!\nYou bastard!\nHe passed us!\nOpen!\nPolice!\nYes, all right, go to sleep.\nI have played so!\nBrigade for the Protection of morality!\nO, it happens with them.\nOpen.\nThey better not mess with.\n- What is it?\n- Open, gentlemen!\nUgolovka!\nHands up!\nHands up!\nWell, Richoni?\nWhat you say?\nThis time you got burned.\n- Your informant still confused.\n- Do not move!\n- Oh, Fred!\nLeave me alone!\nLeave me alone!\nNo way!\nShoot, guys!\nShoot anything that moves!\nLet's go through the yard!\nWhat are you!\nThey have there just waiting for you!\nBastards!\nIn the hatch!\nFaster!\nSurrender!\nI give you 2 minutes!\nNow you can not rush.\nTo taste?\n- Okay, a splinter of glass.\nThere is a way out?\n- Yes.\nWhat about the others?\nAs you said, friends should not be too much.\nExactly.\n- You're not good?\n- Do not worry, everything is fine.\nIt would be nice.\nLet's go!\nHere!\nCome executed by my 2000 francs!\nLadies and gentlemen, the idea that you'll see, ... This idea.\nGreat idea!\nWith celebrities such as...\nMadeleine, Gina, Stella and Dario ... and...\nAnd also with the rest of the troupe!\nIf you think so you can get people to go to...\nJust listen, as it should!\nCome, ladies and gentlemen!\nCome!\nCinco The circus - a circus, not like the others!\nNo billboards, no ads, no idle talk!\nJust an idea!\nWe could show you 100 rooms!\nThese we have.\nBut we will show you only 10, but only with the stars!\nHere Freni - Empress nudity!\nArtistic art, in other words, educational,\nWhich you can watch the children.\nLovely Gina - goddess of dance!\nYou go?\nDo not talk just started!\nLovely Gina - goddess of dance!\nDario and Stella - trapeze artists!\nCalling gravity, puzzling scientists!\nMario - magnetic juggler!\nMan flying pins!\nAmedee and his dog, a tightrope walker!\nRiri Fifi and clowns!\nFinally, Mademoiselle Josiane - perfect woman!\nAnd besides - daughter of yours truly!\nCome, ladies and gentlemen!\nCome!\nThis Circus Cinco - the only circus in the world, which they say friends!\nCome in, come in, ladies and gentlemen!\nThe best places - 300 francs!\nMilitary and children - 100 francs!\nCome in, come in!\nThe show begins!\nThis, ladies and gentlemen!\n- Hi, Am?\nd?\ne.\n- Hi!\nDo you want some coffee?\nNo.\nNo, thanks, I already drank.\nListen, you do not have a newspaper?\nBulk!\nAnd you do not have one, but...\ntoday?\nNo.\nI, you know, they just build up the fire, so...\nGood morning!\nWell, Dad, we do not work this morning?\nWorks.\nBut I had to repair the suspension strap.\nHey, yesterday I had no time to introduce you to Stella, my daughter.\nWe are preparing with a single number.\nNumber stunning!\n- Well, Dad, are we going?\n- We are going.\nListen, I want to walk.\nYou do not have another key?\nWhy?\nWhat is there to steal?\nYes, of course...\nWell, Dario, your tenant already awake?\nHalf...\nSuch a strange type.\nI do not know what time he arrived yesterday.\nSleeps dressed.\nMaybe he a lunatic!\nOh yeah...\nView Gina tired.\nPerhaps she, too, a lunatic?\nYou could have knocked!\nI'm sorry.\nStill, good morning!\nWhat you happy - it's your courtesy, tenderness.\nWell, you can not be the same day and at night.\nHave to evening dance with the long sleeves.\nYou guided me bruises.\nDo you want to tell you one stupid?\nWell, tell me.\nI really like you.\nYou do not have to answer me, in turn,\nMaybe it was just a nice night, just for you...\nI wanted to tell you...\nI mean, if you want...\nYou would not mind every night dance with long sleeves?\nHere!\nGo!\nBuy a newspaper, and then I'll give you an aperitif.\nWelcome!\nNo, well, you see?\nOnce he has a grandmother, it can no longer shake hands?\nIf he had a grandmother, he would not have worked for Cinco.\nI know what I'm saying!\nI'll be right back.\nTeach by heart?\nWhat?\nArticle about the fight at Pigalle.\n3rd time already read.\nWell, everything ?\n!\nAre you at home?\nCheck the pockets?\nWe follow the mail?\nWould wait until I take a subscription before removing the meter reading!\nThese are your friends?\n- Who?\n- Men with Pigalle.\nWhy are you hiding?\nWho are you afraid of?\nI perfectly see that you're scared.\n- Where are you going?\n- Where do I want to.\nImagine, I do not like the slap.\n- Liar!\nOh, forgive me!\nWhen I'm on edge, slap yourself frustrated.\nLet's forget, okay?\nYou read that five were killed.\nIf you do not know them, why do you have such a person?\nBecause the other two.\nAre you saying that you would be staged 7 dead?\nYou are strongly capable in the long run.\nYou got me with that thing!\nEND OF THE GAME\nDo not be angry!\nLet's go sit down.\nI'll treat you.\nWaiter!\n- Mademoiselle?\n- The same.\n- Now!\nStubborn around, huh?\nOkay, come on.\nI'm listening to you.\nYou got into something bad, Fernand.\nThat's why you're here.\nI do not want to know, you're right or not.\nAnd even if you're wrong, I'm ready to be with you.\nOh!\nLove - it is so beautiful.\nWhy do you say that?\nBecause you know that those types, which finished off, participated in the robbery of Marseille.\nWhat the police did not find 14 million francs.\nSo you talk.\nAnd since you are able to run, you divide 14 2.\nYesterday you took me for a bandit,\nAnd you liked it.\nToday you take me for a sucker, and you like it even more.\nI had a good night, Gina, but...\nThan 14 million.\nI simply offer you my assistance.\nHelp to spend it?\n- Here, Mademoiselle Gina.\n- Write down, I'll pay tomorrow.\nSee?\nDo you believe that everything has already happened.\nWronged?\n- Not at all.\nYou too cunning for me, Fernand.\nTalking to himself, and makes me tired.\nI was fascinated, but wrong.\nIt happens.\nGoodbye and good luck!\nA pack of cigarettes.\nThank you.\nTime is right, kids!\nHurry!\n- But where is Jean?\n- From Bastia, where else?\nI feel sorry for Gina, she sunk down on a guy.\nWhat is she in it found in this clown?\nI do not understand.\nIf I were in your place, I would know what to do.\nYou have returned the money that I have a year must be his sister?\nAll work!\nAnd with a soul!\nAnd with enthusiasm!\nRevenue today should be good!\nYou know my number with Stella\nReady.\nThis could save you.\n- I know, I know.\n- It is necessary to order the posters!\nOh, wait a minute.\nPosters fine, but it is not important...\n- They can be made in two colors.\n- Yes!\nFor instance, I just thought...\nWhat are you doing here?\n- I need to talk to you.\n- No!\nEvery time you're talking about one and the same, and I already told you \"no!\".\nWhy?\nBecause you suggest it to all the girls.\nBut others - this is nonsense, does not mean anything.\nYou see, I'm honest!\nWhy would I be honest?\nBecause I love you.\nYes, you know it.\n- When love girl, her respect.\nOh, you're reading too much!\nAnd this is life.\nYou're the only one I love.\nDo you want to be the only one with whom I do not want to sleep?\nNo, it is illogical to do everything!\nLeave me alone!\nWhat if I talk to your dad?\nBut for now, if he catches you in his trailer, he kicks your ass.\nIf he agrees, I'll marry you.\nAt once.\nAnd in the church!\nWhite dress, green plants, red carpet.\nAnd the gatekeeper!\nWell, I agree?\n- No!\n- This is the same train!\n- Yes, that's it!\nI am too poor, right?\nBut if that's the case, you will be mine!\nBastia?\nCome help me prepare tickets.\nYou then asked.\n- Who?\nI do not know.\nThe man who got out of the black car.\n- What did he want?\n- To find out whether you're here.\n- He did not say anything?\n- No.\nOnly that will see you later.\nAnd... he looked like?\nIn your style.\nThe style that we do not like, let it be known.\nThank you!\nThank you very much, that I was warned.\n- Where's he gone?\n- To hell, I hope!\n- Then who will drum up?\n- You're, like yesterday.\nYou're right.\nAt the same time I will spare 2000 francs.\nEven 5000 - I add myself a salary.\nAll the places for the parade!\nAre you going to go?\nWe do not prevent, I hope?\nPepe feared hurt.\nHowever, Pepe?\nYeah.\nOgonyok not find?\nYes.\n- Read newspapers?\n- Yes.\nYou with Pepe lucky.\n- So we said, going here:\nWe lucky!\nIn our country such a friend like you!\nYou've always been decent, Fernand.\nWe walked, and said, \"Fernand decent.\"\nWe were wrong?\n- No...\nI was sure that we can count on you!\nWe Pepe plans to leave, but not enough money.\nYou know life - without the money does not go far.\nBut...\nI have no money!\nThat's why we're here.\nTo tell where to find them.\nOr rather, it is to remind you.\nI'm sorry, Fred, but I gave up.\nThe last six months I was stunned.\nI decided to change my life.\n- Well done!\nIt is necessary to give up the old life to doing good, huh?\nYou will have a pleasant memory.\nAnd it will be nice to Pepe.\nThe money is still in a place that you know.\n- I?\n- Yes.\nConverge zaber群h and come back.\nWhat if I caught?\nOn Piga, certainly, full of cops.\nDo you know them!\nI mean...\nDo you know how to behave.\nAnd then - you did not participate in Marseilles, so... 14 million for four - This is good, no?\nA for the three do not want to?\nYes, it is tempting...\nBut very risky.\nFrom my pedigree, I can get 10 years.\nUnderstand me, Fredo...\n- I understand you perfectly!\nOnly Pepe will not be happy.\nHe told me: \"If you give up the slack Fernand, I'll kill him!\"\nPepe - he was.\nBut calm down, I'm here!\nI have to reason with him.\nWell, I'll tell him you agree?\n- Yes.\n- Grandmas are tomorrow night?\n- Yes.\n- Good.\nFor example, at 7 pm.\nI'll give you half an hour of reserve.\nThen - descends Pepe.\n- Everything went well?\n- Delicious.\n- Well, what did he say?\n- And what could he say?\n- And you left him?\nGo away?\n- Yes.\nAnd you'll stay,\nKeep an eye on him.\n- Trust me.\n- If you want to know my opinion...\n- I know him.\nYou do not have to say.\nBut what did he want?\nMoney.\nBut I'd rather die!\nDo you hear?\nI'd rather die!\n- Maybe this is not the way out?\nI behaved with you is disgusting.\nYou could throw me.\nYou're a good girl, Gina.\nI understand it now, because I start to see more clearly.\nBecause you are satisfied with it.\nImagine that also suits me.\n- Yes!\n- Do not start.\nHow was I to guess that you have money?\nI loved you with them or not.\nIt's called loyalty.\n- Listen to me, Gina...\nAre you kidding over all?\nThe parade finished, the greeter was me.\nCan I now draw a dancer ?\n!\nCome on, shoo!\nThis circus does not suit me!\nNow\n- Mademoiselle Josiane, perfect woman!\nWhen they have to go back?\n- Tomorrow at 7.\n- There is a time to collect the suitcases.\n- Are you ready to quit the circus?\n- Anyway, he soon he would leave me.\nWhere is the money?\n- In the suitcase.\n- A suitcase?\nThe cell storage in the North railway station.\nWe'll leave tomorrow morning.\nAnd if you will follow me?\nDecide that you went for the money.\nThe funny thing is that it's true.\nYes...\nOr maybe you prefer that I went for a suitcase?\nYes!\nYes, I prefer!\nYou see, I trust you.\nIn this and the good of the family are being built.\nAnd now it's my turn.\nThis is a farewell waltz.\nLovely Gina, the goddess of dance!\nDo babes such a success!\nLocal public immediately legible.\nIt is a pity that we have to leave tomorrow.\n- Direction\n- North Station.\nDirection\n- Arches.\nWhat do I do in the North Station?\nPick up the suitcase on the receipt, which you stole from me.\nBrock!\n- What did you call me?\nThy name!\nI pulled a receipt storage.\nReceipt, which I hid here under the table!\nAnd that you come back to me!\nLook, Bastia,\nYour pukalki can not force me to give what I did not take.\nDo not give you in the face with it, too, will be able to make not.\nA and so will happen, if you would not uber群h.\nThen I'm glad.\nDo not be offended, I was joking.\n- Never mind.\nBut you're wrong, kidding...\nSuch things.\nYes.\nIt's like a cigarette butt can start a fire!\nPerhaps it would suit the owner.\nYes, but only if he paid the premiums.\nGina!\nCome here.\nWhat's the matter?\n- My receipt of storage!\n- So what?\nI pulled it!\n- Richoni?\n- No, definitely not.\nThen who?\nWe've got no thieves.\nWhat are you talking about ?\n!\nIn addition to the receipt, I stole all the money out of a suitcase.\nAnd so - no thieves!\nWhat a fool!\nThis morning I took out a shirt out of the suitcase.\nAnd the money was there still.\nSo it happened recently?\nWhat does it change?\nAll!\nIf you hurry, you still catch my thief at Gare du Nord!\nDo you have money?\nI do not.\nMaybe you have Marcella?\nYou carry nonsense.\nPerhaps Cinco?\nHe told me to pay for a few weeks.\nYou should in any run.\nI'll come to you first train.\nWait for me at the hotel \"Piccardi,\" you know?\n- Yes OK.\nFernand!\nYes?\nIf you return the money, we will go to Italy.\nIf you deceive me, I shall hand you to the police.\nYou clear favorite?\nYou are not as good as I thought, Gina.\nDo not \"is not so good.\" Not such a fool.\nOkay, go.\nIf tonight everything goes well,\nWe will be able to pay taxes, for the light, and we can go tomorrow.\n- To pay all the salary?\n- If all pay, we will not go away.\nI do not need anything Dario, fortunately.\nHe's an artist.\nMadeleine - too.\nDame illusionist a little money, that's all.\nAnd so well.\nMy poor Royal.\nIn such circumstances, we hold out long.\nIf Dario number will be successful, we will be able to get out.\nThis is our last chance.\n- Phantom.\nCinco!\nWhat do you want?\n- Money!\n- You're on time.\nCinco, I'm serious.\nI have to leave.\n- With the strikers?\n- Yes.\nRight now, Gina, I can not.\nBut in the evening, after the presentation, I will try.\nBut it's not great - throw us in a moment.\nSorry, Cinco.\nI would have stayed, but I can not.\nThe rats are leaving the ship.\nHey, little girl, let's go have dinner.\nCan not find your number 3968.\nPerhaps it has already taken.\nYes, but...\nYou do not know who?\nHow should I know?\nI atonement for service in 8 hours.\nWhat's more, I could not give you your suitcase without a receipt!\nAnd you tell me, as your colleague who works during the day, - where is he?\nAt home, I guess.\nBut if you think that he will be able to remember the customer...!\nWe then give out per day more than one thing, so...\n- Hey, please!\n- Yes, I'm coming!\nSorry, sir.\n- Everything happened?\n- Nothing like this.\nMarcella must leave.\nShe needed all of her money.\nWhat kind of selfish!\n- But we still be able to leave?\nLeave something we can always.\nDepends only, under what conditions.\nAny day fly off the vultures, hawks...\nHawks?\nBailiffs!\nDo you think they will take my horse?\nThese people take everything.\nStraw and logs, stairs and clocks, machinery and horses...\nIt Attila of our time!\nLog in!\nWhat do you want?\nNothing!\nI was passing.\nWell, Marcella sent you to hell?\n- How do you know?\n- To eavesdrop.\nI'm always eavesdropping.\n- Anyway, you're honest.\n- I am glad that you found my dignity.\nThis will facilitate the work.\nCinco!\nYou are sitting on the rocks.\n- Not at all!\nDaughter you hard worker.\nBut you're still sitting on the rocks!\nYou already said that.\nSo what?\nBut if there was a guy, a good guy in all respects,\nWhich will accumulate?\nWhat can you offer him?\n- You know this guy?\n- What can you offer him?\n- Well... circus.\nNumber of Stella and Dario is almost ready.\nInternational Class!\nYou can repeat it without laughing?\nHorse Josiane.\nHorse Mademoiselle Josiane!\nWith or without a rider?\n- Nahal!\nWhat do you mean?\nI mean that is the only guarantee - if I become your kinsfolk.\nI want to marry, and you need money.\nI'm getting your son in law, and you save a circus.\nFor the salvation of the circus, my Kvedchi, you need a lot of money.\nI have.\n- And cash!\n- Yes, I have.\nAnd where?\nYou know, after my accident I embraced you.\nI won.\nYes - compensation, disability benefits.\n400 thousand!\nWhat do you say to this, father?\nJosiane,\nYou're already an adult girl, almost a woman.\nA woman was not created to live alone.\nI do not marry Kvedchi!\nWhat you are discussing here is disgusting!\nIs that you talking with her father so ?\n!\nStrange you raised it.\nIf I knew...\nSidi.\nWhy do you refuse Kvedchi?\nAs it has charm.\n- Oh, yes!\nAnd this charm he gives everything.\nNo one skirt missed!\nDoes it good!\nWell, nothing can be done, Kvedchi.\nI thought you were serious fellow.\nTake your money.\nCircus, certainly will not,\nBut my daughter will be happy.\nI am happy with the ruined and robbed her father.\nIn the living corpse!\nTelevision remove him hide,\nBailiffs will get seeds.\nWe beg, my girl.\nBut most importantly, I make you happy.\n- Oh, come on, Dad, please!\nI agree.\nI agree, if Kvedchi promise me that...\nOh, yes!\nI swear!\nHide grandmother!\n- This is Gina.\n- A, you can discover!\n- Good evening!\n- Good evening.\n- Well, okay!\nTill tomorrow.\n- Till tomorrow.\n- You asked to come in the evening.\n- What is said is said.\nHow much do I owe you?\nToday is...\n34 thousand francs.\nWow!\n- Hold.\nWith a small premium.\nYes, it's a fortune!\nIn life there are ups and downs.\nAt the moment - soon rise.\n- Borrowed?\n- Rodney.\nIn vain you are leaving us on the rise.\nCan I still and will be back.\nThank Cinco.\nGina!\nSo, is it true?\nAre you leaving us?\n- Tomorrow I leave.\n- With the strikers?\nYes.\nWhere are you going?\nIn another place.\nIt's because of those guys that came?\nCinco you paid?\nIt's wonderful, it has money - burn!\nI know.\nThis is Marcella.\nOnce they slept together.\nAnd she always had a weakness for him.\nMarcella?\nCan not be!\nI'm telling you!\nGoodnight Kvedchi.\nMonsieur!\nMonsieur!\n- Who's there?\n- You are asked to phone.\nYou call from Provence.\nYou can pick up the phone.\nHello?\nHello, yes?\nYes, yes, it's me.\nWaiting.\nHello?\nIt is on the phone.\nHe got a call from Mersevalya, Marsevalya...\nStay here.\nYes, hello?\nIs that you, Gina?\nNo, no, nothing happened.\nI am late.\nHow is it not scary?\nYes.\nAnd so, you are not thieves!\nWhat?\nHow to...\nCinco ?\n!\nA lot of money?\nDo you think you can still fix it?\nYes, it is.\nOkay, I'm going.\nKeep.\nSo will converge.\nWait, that's not all.\nThank you, mademoiselle.\nHere.\nUp to 9 hours, you call the number 7 in Marsevale.\nAnd leave this message to Mr. Roland.\n\"Sending will Marsevale this morning.\"\n\"Suitcase was not present in the cold.\"\nRely on me.\n- Well, call me a taxi.\nWell, mademoiselle.\nNow the flowers?\nYes, flowers.\nFor Josiane.\n- So this is serious?\nWhat?\nI told you that it will be mine.\nShe is mine.\nWell... almost.\nI wonder what made her change her mind?\n- My lovely manners.\n- Your manners!\nWhat are these two again come to do here?\nDo you know them?\nThen be engaged in their business!\nWhat do I do!\nIt comes back, but no money.\n- I am surprised that he returns.\n- Maybe he likes trouble.\nGo.\n- I was in a hurry.\n- I also.\nNice to hire?\nWe thought that you're tired, because the car drove.\nFernand!\nWhat?\nSend it.\nFernand, be kind.\n- If you do not fall behind, I'll scream.\n- I shoot.\n- If you think I'm scared...\n- As if I'm going to shoot you!\n- Leave it, Gina, this is a misunderstanding.\n- How cute!\nLet's hope not the last.\nFredo, you must listen to me!\nOf course, Fernand, we are here to do just that.\nI do not dare to go for the money.\nAt the last moment I was afraid that the police monitors the cafe.\nYou is surely arranged.\nAs they watched the cafe, they have not followed the North Station.\nFredo, you're wrong!\n- You think I'm guilty.\nAnd I - a victim!\n- Misunderstandings.\nI know.\nThe only misunderstanding between us - I perceive you as a man.\nI wanted to give you a chance.\nYou look like you could not use it.\n- I was robbed of a receipt storage.\n- It's impossible.\n- I swear his eyes, Fredo!\n- Look, Fernand,\nYou have passed the cops.\nIt is still possible to settle.\nWe all forget.\nBut the favor.\nThe money we need.\n- But I'm telling you...\n- And we'll get them.\nEven if you have to pull out of the bills one by one.\nBut this - work for Pepe.\nI'm telling you, I stole it!\nI stuck it under the table.\nWe have a lot of time, Fernand.\nMaybe you want to work Pepe?\nI'm telling you I do not know anything!\n- You're stubborn!\n- Yes.\nEverything is ready.\nAre you comfortable?\nYes?\nGood feeling?\nWhere is the money?\nI would, perhaps, have learned if you trusted me.\nListen, give me time, I'll find a jug.\nWhat are you risking?\nIt Again we throw!\nI assure you, he can!\n- Fuck you!\nPepe!\nCalmly.\nYou should not tease him.\nWhere is the money?\nHell, Fred, if I knew, why would I come back?\nIn order for us to kill you!\nI do it?\n- While Turn to the machine.\nTurn around.\nWe're going back to the circus.\nIt blockhead!\nYou can only help me!\nI now know the circus.\nTake me back,\nAnd I swear I will settle everything quickly.\nWhat do you think?\nI think that you are too diligent.\nForget the circus, I will do everything for you.\nEspecially not flutter.\nI just I will go and have a look and come back immediately.\nAdmit it, it would be a shame to die so young, with hoarded money?\n- You leave Pepe?\nRecklessly!\n- Recklessly would leave him.\n- I?\n- Today you will work in a new way.\n- You think so?\n- Language, for a change.\n- Do you have a candle?\n- Yes.\nHow old are you?\nPackaging.\nAnd the matches.\nNo, the big boxes.\nPlease, sir.\nWith you 290 francs, monsieur.\nGina!\nGina!\nSo you did not go?\n- As you see.\nSo you stay with us?\n- Maybe...\n- I am very happy.\nListen,\nI go from Arsha.\nEverything is settled, we're leaving tonight.\n- Give me your jeep.\n- You crazy?\n- Give me your jeep!\n- What does all this mean ?\n!\nListen Cinco, all very serious!\nA petrol - is also seriously?\nI'll pay.\nAnd be careful!\nStrongly do not chase!\nShe left on your wheelbarrow!\nWhy did you give her?\nDahl gave!\nI had time to give her?\nDo not you see?\nLog in!\n- It is you - the owner's daughter?\n- Yes.\nLet me introduce myself - Angela Lombardi.\nI said, your clicker left?\nMaybe I could replace it?\n- You ?\n!\n- Why not?\nI started peddler under the counter on the boulevards.\nAnd then, I have always loved the circus.\nMonsieur.\nMademoiselle ready to replace the strikers.\nI'll be glad if go up.\nThese pretty girls can not come.\nBut I can offer only 1000 per week.\nMore I did not ask.\nI ran, Kvedchi waiting for me.\nGoodbye, Mademoiselle.\n- Goodbye.\n- It's too good to be true.\nTwo days of work, and then...\n- Let's see.\nAgreed?\n- Agreed.\nCome later.\nI will teach you the science barkers.\nIntricacies of the profession.\nIt is an art!\nThank you!\nYou can sit down?\nDo not worry.\n- What You take?\n- I do not know.\nCoffee with cream.\nDo you want to eat?\nThey then very tasty sandwiches.\nNo, thanks, I'm not hungry.\n- Coffee with cream!\n- Coffee with cream.\nWhen we get married, we'll be there every day in the cafe.\nHow rich.\nAnd yet, you know, I thought about our honeymoon.\nWe're going to Venice.\nThere's so wonderful in Venice!\nHow?\n- I still have not been there...\n- Does not matter, tell me!\nWell, first, we make love in a gondola...\nO Kvedchi!\n- What?\n- Well, let's say.\nAnd then?\n- And then...\n- Expensive Cognac in the big glass.\n- Okay, sir.\nWhat's the matter?\nNothing.\n- Want uyd置?\n- No no.\n- All right, I was hired.\n- Well done!\nYou were fast.\nYes.\nNow you have to find a guy who suspiciously quickly become rich.\nWho is spending right and left.\nYou know what I mean?\nI understand.\nIt's probably a whore, and I do not want her here.\nI think her dad has already hired.\nI tell you that he will dismiss it, and together with Gina!\nBut Gina had gone.\nShe left and came back.\nAnd even stole your father's jeep.\nOur jeep!\nDo you like crabs in the pot?\nA string beans...\nlove?\n\"Very fine\"...\nYou are pampered!\nYes, but...\nIf you want to nibble on, will have to begin to sit at the table.\nHow funny!\nWhen I want, I'm so merry!\nWell,\nFigured you about money?\nI asked the question!\n- Yes.\nThat's what I'll tell you:\nIf Fredo and his woman would find the money,\nThem and they run away.\nAnd some will remain with the nose - and it's you!\n- You think?\n- Yes.\nHow to drink to!\nFredo left you here to his hands were free.\nBut... the case is not yet completed.\nYou do untie we rush back, I'm taking the money,\nAnd we divide them into two.\n- You're going to work with me?\n- Yes.\nI had been thinking about it.\n- ABOUT!\nWell, Fernand, I here you simply hold oaf!\nCigarettes do not want?\nI want.\n- I do not have pockets, and I do not smoke.\n- I have.\nHere, in the pocket.\nTell me,\nWho's there?\nDo not be nervous, dear.\nIt's great, is not it?\nYou want to know who's here, right?\nNow you know it.\n- Gina!\n- You start talking?\nGina!\nDo Cinco never had any money.\nAnd now - there.\nAccording Kvedchi he gave Marcella.\nFortune Teller?\nSis Bastia?\nYes.\nBut it is certainly not true.\n- Well, hang out.\nMarcella had nothing to do with it!\nYou bastard!\nSo you gave the money to her Sis?\nYou're crazy!\nBe polite!\nWill be explained with his maid.\nI believe her.\nFredo also believe!\nYou are one against.\nAnd you're out of the game!\n- Look, Pepe, I can help you!\nYou do not leave me here to die alone!\nYou're not alone here.\nMadam - the neighborhood.\nLucky!\nHey!\nRepeat.\n- Okay, sir.\n- How are you doing?\n- At zero.\nI put out the door.\nIt seems that fear of something.\nEvery fear, then there is a reason.\nI'm sure that something was there.\n- Could buy me a beer!\n- Get fat from it.\n- What's Your Number?\n- 900 thousand!\nI left 2 more ball.\nI'll become a millionaire!\nYes.\nHere the fair roaming gunmen.\nYou they probably know.\nWho's on the phone?\nInterrogate circus acrobat Dario,\nMore and Gina, a dancer.\nBut who are you?\nAnswer!\nHello?\nHello!\nHello...\nYou'll say, old owl ?\n!\nWill you speak ?\n!\nWill you say, vile creature ?\n!\nHell!\n- You know the kind of Dario?\n- Of course, it is our acrobat.\n- Where is he?\n- Probably in his trailer.\nThe first right.\n- Thank you.\n- What do they want from Dario?\n- This is probably due to Bastia.\nFrom such people - always nothing but trouble!\nDad!\nWhere is Dad?\n- What happened?\nMarcella!\nIt's not moving!\nI think she's dead!\nWell, it just is not enough...\n- This is certainly the heart deposited.\n- It was in the evening departure!\n- Your mother's looking for you, Kvedchi!\n- You do not work, she is angry.\nOkay, I go.\nHere is a gift!\n- She has always had a weak heart.\n- I say that there is filthy!\nIt is, for sure, mutila with his brother.\n- With a guy that was a greeter?\n- Yes.\nDoctor she is no longer needed.\nSo, parted, move!\nYou go out there!\nFast!\n- What did I tell you!\n- Maybe it's her brother?\nThis is murder!\nShe kept the house all your money!\nI think it strangled.\nShe has marks on her neck.\nCall to the site, let people send.\nYes, chef!\nExpenses on a trailer!\nAll forbidden to leave the area of the holidays!\nThis is murder!\n- I told you!\n- I have long sought.\nYes.\nOnly you - not a policeman.\n4 dead man in Marseilles, 5 - at Pigalle.\nWho is next?\nIf the case begins with a fight, a fight over it.\n- What do we do?\n- I\n- I do not know, and you - to collect the suitcase.\n- You want me to leave?\n- So you escaped.\nWe are going to fight, I feel.\nA is not a ladies' game.\nRate - 14 million, and we have something to lose.\nSo I prefer you to leave the game.\nWe are all divided into two.\nMay, will continue?\nYears in prison for two is not divided.\nWhen the motley your age gets 10 years - this is the end.\nAre you ready for 10 years wearing a gray robe and slippers tinkering?\nI do not care.\nDo not say that.\nAs long as you have the conscience of nothing.\nOr almost nothing.\nAnd tomorrow everything is going to be different.\nReturn to Paris and wait quietly.\nCalmly wait what?\nExhaust itself?\nAsk yourself, have arrested you or not?\nAsk myself, what I bring, - oranges or flowers.\nShut up!\nFor fun you have to pay.\nLife - is a journey.\nI would like to go first class.\nI have always loved silk shirts and shoes made to order.\nAnd I have not traded in a row, it would be illogical.\n- What's the matter?\n- It's me!\nDiscover!\nI thought I told you to go back and wait there?\nDisaster struck, Fredo.\nChick Fernand came to explore, and I...\nI caught it.\nShe uttered a few words about Marcello.\nThat she was involved.\nMore.\nYou went to Marcelle?\nYes.\nTo ask her any questions.\nIt is necessary to pass the buck, Fredo!\n- Wait a minute!\nMarcella?\nMarcella!\nI assure you, I have nothing to do with!\nIn her heart she refused.\nFredo, you're...\nYou do not leave me?\nWhere do I, in your opinion, go?\nWhere do you want.\nTo the Greeks.\nOkay.\nThen I will come back to the villa.\nI left them there either.\nThen finish them off for a full set.\nWill you come, Fredo?\nYou do not leave me?\n- No.\nI will ask the President himself, so he put us together for the company.\nWhy did he kill her?\nMisunderstanding, as it said Fernand.\nProtracted misunderstanding.\nPepe was too stupid, Fernand - too cunning.\nPolice will be here soon.\nIt's time to disappear.\nI?\nYou go back to Paris.\nCome from time to time in the \"In Field\".\nI'll leave it to you the news.\nIf all goes well.\nHere's yet to wait.\nNo.\nThey you more useful.\nThis is unlikely.\nThe car, for sure, in the search.\nWhat are you going to do?\n- I'll go as soon as possible.\nEither way, if I do not go down after 5 minutes they will rise.\nNext!\nStop!\nStop or I'll shoot!\nWhat?\nTurns?\n- Minute!\nI sang this number 3 years ago Karpatto.\nPepe - a professional, and I have lost the knack.\nMy poor!\n- Well, hurry up!\nWhat are you naplela about my sister?\nI'm not used to me about extinguished cigarettes.\nIn general, I would have passed anyone but you.\nWhat's more, I just repeated what I was told.\n- Who?\n- Kvedchi.\nGit!\n- You think this is it?\n- Definitely!\nIt's okay.\nStagnant blood.\nIt will pass.\nHow did you get here?\nI follow you on a jeep owner.\nKeep.\n- With \"Hold\"?\nPopey.\nThat's it.\nCome on.\nBastia foul!\nBastia was blown away!\nThey still know enough!\nCome on.\n- Listen!\nIn minutes as the score goes!\nNo.\nDo not for a minute.\nIt can wait.\nOh, you... you bastard!\nYes, it can wait!\nHe accused me of stealing receipts from storage.\nHe even guided me the gun.\nBring it in a report.\nWhat's next?\nNothing.\nHe saw that I was not to blame, and calmed down.\nOkay, good.\nWe have already moved.\nThe owner of the circus - are you?\nGo.\nYou can be free.\nBut do not leave your trailer.\nYou must have a fortune of money?\n- Yes.\nSo what?\nIf I had to kill all those who I have money,\nYou would have to double the staff.\n- We can disagree?\n- That's really not!\nWell that ended this market?\nI think they are looking for a suitcase.\nWill conduct searches.\n- By what authority?\n- I do not know, but it's true.\nLet there be sought!\nThe one who searches will find!\nThe search...\nThe search...\nThe search...\nStay here.\nHey, there!\nWhere are you?\nSomeone looking for?\nGet down.\nNo, I...\nI have come to my sister.\n- Ah, the fortune-teller - your sister?\n- Yes.\nWell, okay, I go to next time.\nShow me the documents!\nThe one who searches will find...\nAnd find what?\nKvedchi!\nThose guys!\nThose guys will not find!\nThose guys!\nHey, Kvedchi, open the door!\nWhat are you doing, Kvedchi?\nTell me!\nYou open it or not ?\n!\nAre you crazy?\nWhy do you close?\n- It is necessary.\nCarriages will be searched.\nWhat's burning?\nYes, it's money!\n- This is mine, do not touch!\nIt is mine!\nMoney!\nDo not touch the money!\nThey curse!\nYes, leave the money!\nThey curse!\nGimme!\nGive it to me!\nThanks to you, give here!\nI tell you, it will be searched!\nIf they find us...\nExploded gas cylinder?\n- It's in Kvedchi!\n- Faster!\nFaster!\nDo not approach!\nGet away!\nHere it is dangerous!\nSave yourself!\nCaution!\nCaution, Fernand!\nEND\nWe proudly present:\nOne of greatest film of all time.\nBrought to you by:\nFNB.47 and others that I forgotten.\nHave a nice time ;) --nttalex--\nWait, Squirrel!\nHere, put it on.\nLook!\nCranes like ships Sailing up in the sky,\nWhite ones and grey ones, With long beaks, they fly!\nLook!\nYou see...\nYou with your \"cranes like ships\".\nTHE CRANES ARE FLYING\nWritten by V. ROZOV\nDirected by M. KALATOZOV\nDirector of Photography S. URUSEVSKY\nAssociate Director\n- B. FRIDMAN Production Designer\n- Y. SVIDETELEV\nMusic by M. VAINBERG Sound by I. MAYOROV\nEnglish subtitles by T. KAMENEVA\nStarring\nT. SAMOILOVA as Veronica A. BATALOV as Boris\nV. MERKURIEV as Feodor Ivanovich\nA. SHVORIN as Mark S. KHARITONOVA as Irina\nK. NIKITIN as Volodya V. ZUBKOV as Stepan\nA. BOGDANOVA as Grandma B. KOKOVKIN as Chernov\nYe.\nKUPRIANOVA as Anna Mikhailovna\nAn Order of Lenin Film Studio \"Mosfilm\" production, 1957\nWho is there?\nWait!\nWell, all right.\nSay when, then.\nThursday, on the embankment.\nCome on, that's too long.\nSquirrel!\nYou haven't told me when!\nSquirrel, at what time?\nWhat time on Thursday?\nNo, I can't make it.\nI'll be working.\n- All right.\n- Don't be late.\nSquirrel!\n- She's gone crazy over him.\n- And he's over her.\nThat's love, my dear.\nA harmless mental disturbance.\nGrandma, why aren't you asleep?\nBecause it's time to get up, Boris!\nStop chomping!\nRunning around all night...\nAre you jealous?\nYou haven't torn it, have you?\nYour jacket's all right.\nOutrageous!\nIt's noon and he's still in bed.\nThe boy deserves a good rest on Sunday.\nHe works hard.\nThat work of his will result in a marriage.\nThat's when you'll be really jealous.\nFor Irina, her diploma comes first.\nLook out, Uncle Fedya.\nShe'll be a full professor soon, while you're still only a MD.\nIf children don't surpass their parents, then the children are fools and the parents are no better.\nThanks, Mamma.\nThis is Radio Moscow broadcasting over all of the Soviet Union!\n- What is it?\n- What has happened?\nBoris!\nWe're at war!\nDo you hear?\nWe're at war!\nLeave me alone!\nHi!\nBoris is working day and night.\nAre you waiting for him?\nI'm not waiting for anyone.\nVeronica!\nIn time of war, one should not get confused.\nOne should hold on to a normal life pace.\nTake me.\nI dream of dedicating to you my first symphony.\nWill you come to the concert?\nSuppose the Army calls you up?\nThe Army?\nI doubt it.\nHardly.\nWhy \"hardly\"?\nThe most talented ones will be exempted.\n- Are you the most talented one?\n- Me?\nCertainly.\nWhy are you following me around?\nAren't you ashamed?\nI am.\nI tried to keep away from you.\nI know, Boris is my cousin.\nBut I can't help myself!\nWait!\n- Wait!\n- I'm going home alone.\nHey, slow down!\nYou just had an operation.\nI'd better be in shape for that field-pack.\nThey're not wasting men like you in the Army.\nThere'll only be one exemption here, and one of us'll get it.\nThey'd better give it to you.\nYou've got knowledge, experience.\nAnd you've got talent.\nSave your sketches.\nMy wife's already got my bag packed.\nWell, as they say, let's get our bayonets ready.\nHey, Stepan!\nGuys, give me a hand...\nStepan!\nExcuse me, Sachkov.\n- Where's the summons?\n- Not yet.\nI can't wait.\n- Are you off now?\n- No, I've got those sketches...\n- I see.\nTake care.\n- Okay.\n- Hey!\n- Yeah?\n- Have you told her?\n- No, it's too early...\n- You're right.\nSee you tomorrow.\n- Right.\n- Let go.\n- I won't.\n- You're going to fall down.\n- No, I won't.\n- You'll rip up the blackout.\n- It's a blanket.\nI'm going to call the militia.\nI'm sick of the blackout.\nGive me the blanket.\n- Let go.\nYou'll fall.\n- No, I won't.\nCome on, Squirrel, cut it out.\nLet me hang this up.\nYou didn't come to the embankment today, but Mark did.\n- He's very handsome.\n- So what?\n- Aren't you jealous?\n- What?\n- Aren't you jealous?\n- I haven't got the time for it.\nI won't have much time either when I go to the architecture college.\nYou'll never pass the entrance exams.\n- I will!\n- I doubt it.\nCranes like ships Sailing up in the sky,\nWhite ones and grey ones, With long beaks, they fly.\n- Do you like my song?\n- Very profound.\nOh frogs, you keep on croaking, Why didn't you think of looking up?\nYou went on leaping, in mud soaking That's why you ended eaten up.\n- All right, you won, hero.\n- I won, I won!\nI won.\nAll right.\n- D'you think you'll be drafted?\n- Sure.\n- You won't volunteer?\n- I might.\nWhy not?\nNo, you won't!\nI won't let you.\nYou know you'll get an exemption.\nThat's why you talk so big.\n- Why do you think so?\n- Everyone smart will be exempted.\nThen the only ones to do the fighting will be the fools.\nI don't want to talk to you ever again.\nVeronica, there's something I must tell you.\nI don't want to hear it.\nAnd, please, don't call me Veronica.\n- Who am I?\n- Squirrel.\nListen...\n- What will you give me tomorrow?\n- It's a secret.\nIf you give me something sweet, I'll eat it up and forget about it.\nGive me something to remember you with.\nKiss me now.\nWhen I'm with you, I'm not afraid of anything.\nNot even the war.\nThough, I'm afraid of the militia.\n- Veronica...\n- You know what?\n- Do you know?\n- No.\nI'll have a beautiful white dress made for our wedding.\nOne like my grandmother had.\nAnd a veil...\nVery long and white.\nAnd you should wear your dark suit.\n- And you and I will go...\n- To a registry office.\n- Is it a deal?\n- It's a deal.\n- You know I like this blackout.\n- What's so good about it?\nHi!\n- Stepan!\n- Veronica!\n- I've got a treat for both of you.\n- Fine.\n- What is it?\n- It's a secret.\n- Has it arrived?\n- Yes, this morning.\n- Why didn't you say so?\nTell me.\n- Well, go on.\nYou should've seen what's going on over at the factory.\nMake it short, will you?\nI'm telling you:\nThere's so much excitement...\n- Never mind that.\n- Your folks told me...\n- When do we report?\n- Today at 5:30.\nLook at those cherries!\nIs anything wrong?\n- They're nice!\n- Army orders.\n- No!\nFor you?\n- Me too.\nWe both volunteered...\nWhen?\n- You volunteered?\n- It's army orders.\nWait!\nWhat about us?\nStepan...\nNo, I've got to go.\nMy folks are going to...\nSo long.\nSquirrel!\nI didn't want to tell you before your birthday.\n- And now I have to go.\n- Of course.\nBoris!\nSquirrel, what is this?\nWhite cranes flying...\nI like that.\nI'm going to be all right.\nDo you hear?\nAnd after that we'll live together...\na hundred years.\nGo on now.\nWe'll say goodbye later.\nDon't be late.\nWhat difference would it make if he went a day later?\nWhat a nerve if he's still with Veronica.\n- Boris!\n- Did Dad call?\nHe was furious.\nWhy didn't you tell anyone?\nSo that we didn't have any scenes like that.\nGet these prints back to the factory tomorrow.\n- Give them to Kuzmin, the engineer.\n- I will, don't worry.\nWhat are you putting in there?\nI'm going out for a bottle of wine.\nGrandma, do me a favor.\nJust a minute...\n- Will they send you to the front?\n- Probably.\nHere, Grandma...\nWait.\nTomorrow when you get up, take this to her...\n- What is it?\n- Her birthday present.\nAnd help her.\nAfter all, it's war...\nPlease, be kind to her.\nAnd what if I die?\nYou don't have the right, especially now, with so many secrets to protect.\n- Well, suppose I do...\n- Come on...\nQuiet now, Grandma.\nThat's Veronica!\nNo, it's just Irina.\nThank heaven, you've come.\n- Boris!\n- Yes?\nCome over here.\nYou're 25 years old and you behave like a fool.\nWhat are we, children?\nWhat is it?\nAre we playing hide and seek?\nAre you starved for adventures?\nWhat kind of a man are you?\nWhere's Irina, and Mark?\nIrina is making coffee, Mark went out for wine.\nCoffee, wine...\nWhat kind of send-off is that?\nIrina!\nBring that thing from the medicine chest.\nBoris, come over here.\n- Where is Veronica?\n- She'll be here.\n- But where's she?\n- She's busy.\nShe's supposed to be here.\nHer fiance is going away.\nI'm not her fiance.\n- What are you then?\n- Just a friend...\n- That sounds suspicious...\n- I don't mean that way, Dad.\n- Then what do you mean?\n- Look, give me a break.\n- Here's the alcohol.\n- Have it diluted.\nI got some port wine.\nDrink it yourself.\nWe'll have a more robust drink.\nWell, are we all here?\nLet's sit down.\nIt's Veronica.\nAren't you going to welcome her, friend?\nAt last!\nIs Boris home?\nWe're from the factory.\nPlease, come in.\nI thought it was the fiancee.\n- We've come from the factory.\n- What about the presents?\n- Sorry.\nThis one's yours.\n- Yes...\nThank you.\nOn behalf of the Factory Committee...\nComrade Boris, you must fight to the last drop of your blood.\nSmash the accursed fascists, and we, in the factory, will fulfil and overfulfil our quotas.\nWe've heard all that before.\nYou'd better join us and drink to my son, Boris.\nWell, I suppose... life in this world of ours is not yet what we would like it to be.\nNow you're going to war, Boris...\n- Let's drink.\n- To you.\nIrina!\nWhat about Grandma?\nWe saw my brother off last night.\nMy mother was crying...\n- What about you?\n- I was too.\n- On whose behalf, the committee's?\n- I wasn't thinking about that.\nThere's no one to see off in our family, we have 3 girls and Mom.\nIt's somewhat embarrassing...\nI feel left out...\nYes, and when they come back, you'll really envy us.\nThe trouble is, not all of them will be coming back.\nFor those who don't, a magnificent monument, with their names inscribed in gold.\nIrina, don't just sit there.\nFill the glasses.\nAnd you folks in the rear, fulfil and overfulfil!\nNow, Grandma, don't forget.\nMark, stay with Dad.\nHe'll be all right.\nI'll see you off.\nAbout face!\nPlatoon, forward march!\nTake it, Grandma!\n- Boris!\n- Mamma!\n- I won't see him again.\n- I'm sorry, Mamma.\nDrink it.\nYou'll feel better.\n- Where are you going?\n- To the hospital.\nBut you aren't on call now.\nVarvara Kapitonovna, I've got to see Boris...\nHe's gone.\n- Gone?\nWhere?\n- To report for the Army.\n- Oh, no!\n- Come in.\n- Where was he supposed to report?\n- I don't know.\nWhat is it?\nIt's from Boris.\nFor your birthday.\nThere's a note inside.\n- Where's the note?\n- Why?\nIsn't it there?\nMaybe it fell?\nMaybe he forgot in a hurry.\n- Forgot?\n- He'll write to you.\nWhere were you?\n- Where's Boris gone?\n- It's the schoolyard near the park.\nCalm down, she'll be here.\nIt would be quite a job finding someone in this crowd.\nWhat are you doing?\nWrite to me.\nWrite every day.\nDidn't I tell you to ship the cauliflower?\nAn airplane is high above, Over the roofs it's droning.\nIt's my sweetheart sends his love From his sky-high soaring.\nIt was used to be before That he saw me to my door.\nNow it's been quite a turn-off:\nI'm the one to see him off!\nDon't forget to write your Army Post Office number.\n- Cheer up, pug-nose!\n- We'll wait till you come back.\nGoodbye, Boris!\nTake care!\nFall in!\nShe will come.\nBoris!\nBoris!\nDress!\nAttention!\nForward march!\nBoris!\nThat's my little chicken!\nBoris!\nBoris!\nGrandma...\nNothing?\nHe hasn't written to me either.\n- Any news?\n- No.\nOh, this damn war!\nWe'll have to keep going somehow.\nHave you decided about a job?\nI'm starting at the war factory tomorrow.\nAir-raid alert!\nHurry on to the subway.\nI've got to finish this.\nGet your things.\n- Where's the knapsack?\n- It's over there.\nI won't go without you.\nIf it gets bad, we'll run down.\nGo on, now.\nBe careful in the subway!\nShe's so frightened, poor thing.\nAren't you?\nWhen I know that Veronica's safe and you're with me,\nI'm not such a coward.\nThe filthy murderers!\nWe'll get back at you, you wait!\nHe's not writing to me.\nOh, he must have written.\nIt's just the mail.\nAll clear!\nThe air raid has been terminated.\nLet's go!\nHere's where I live now.\nIf you decide to work with us, call me at the factory.\n- I will.\n- Goodbye.\nGet down here!\nCome back!\nWhat's the matter?\nAre you crazy?\nI'm sorry.\nVeronica, you can stay with us from now on.\nYou can have Boris' room.\nMark will move in with Fedya...\nMark, she'll need some attention to keep her from brooding.\nIrina and I are so busy at the hospital.\nI'll do what I can, Uncle Fedya.\nI promised Boris.\n- Is it agreed?\n- Um-hmm.\nIs this the factory?\nMay I speak to Kuzmin?\nHe was drafted, too?\nExcuse me, has anyone heard from Boris Borozdin?\nIf it weren't for this damn war,\nI'd be playing this in the Tchaikovsky Hall.\nFor you.\nVeronica!\nLet's go to the subway.\n- I'm not going.\n- Don't be silly.\nCome on.\n- Are you afraid?\n- For you.\nCome with me.\nI'm not afraid of anything.\n- Veronica, let's go to the subway!\n- No, I'm not going.\n- Stop it!\nYou've gone crazy!\n- I'm not going!\nI love you.\nNo.\n- I love you!\n- No!\nNo!\n- I love you!\n- Go away!\n- I love you!\n- No!\nNo!\nNo!\nIt's stupid to get surrounded like this.\n- Stepan, quit whining.\n- Who's whining?\nI'm not.\nThe captain said we might be able to break out by tonight.\nYeah, that's what he says.\nSachkov!\nWhere'd you find that rookie?\nIn the incubator.\nHe's our reinforcements.\nNow we'll break through for sure.\nIs that a way to talk about a married soldier?\nI got yoked in my last year of school.\nThe result of too much of education.\nYou're funny.\nLaughed yourselves right into a trap, I guess.\n- Volodya, you really married?\n- I said it to sound important.\n- Borozdin!\n- Yes?\nYou'll go on a reconnaissance mission.\nYou got to find the best place for us to break through tonight.\n- Turn in your documents.\n- Yes, sir.\nHey, Sachkov!\nTake this, will you?\nWhy don't we rest?\nAnd have a smoke.\nIs she always laughing like that?\nShe probably thinks we're all dead.\nLet me see that beauty.\nHey, that's the soldier's life for you!\n- You're here, and she...\n- And she what?\nHey, let me try that thing.\n- Hold it, will you, Sachkov?\n- Certainly.\nNot bad for a first try.\nStop that!\n- Aren't you ashamed?\n- No, sir.\n- Five days under arrest!\n- Yes, sir.\n- You both go on a reconnaissance.\n- Why?\nTurn in your papers!\nBoris, here.\nOn account of her?\n- I'd say she was worth it.\n- She sure is!\nHowever, we must maintain discipline!\nYou hear that?\nDiscipline...\nStepan, keep this.\nBe careful, don't lose it.\nWe...\nWe'll get married, Uncle Fedya.\nOh, I forgot.\nThere's some sausage left.\n- Keep your head down!\n- Stop ordering around!\nLet's get out of here before they get wise.\n- If you're scared, run.\n- Come on, you idiot!\nHey!\nMusician!\nAre you deaf?\nWhy the devil I've got tied up with him?\nWhat's wrong with you?\nCan you hear me?\n- Go on.\nI want to rest for a while.\n- Are you wounded?\nHold on to me.\n- Leave me alone.\n- I tell you, get up!\nNow hang on, hold tight.\nThis way's no good.\nI'll have to carry you.\nCome on, leave me here.\nAre you still sore because I punched you?\n- You were just lucky, otherwise...\n- Shut up, we'll talk later.\nHere we go...\nAre you all right?\nHold on, friend.\nIt's only a little way to the woods.\nWe'll be safe there.\nI'm winded.\nLet's rest a bit.\nIt's a little quieter here.\nHow are you?\nIt's hard to breathe.\nHold on, we'll have to get you married yet...\nHey, buddy!\nWhat's the matter with you?\nWhat's wrong?\nForgive me, friend, forgive me...\nIt's my fault...\nForgive me...\nfriend...\nHey, somebody!\nHelp!\nHelp!\nHelp!\nCan you hear me, Boris?\nAre you hit?\nIt's nothing, I am just...\nThe Soviet Information Bureau reports that there were no important changes on the front in the past 24 hours.\nNo news is good news.\nFamilies evacuated with Plant 326 will be quartered on Vosstaniya Street.\nComrades, report here, please.\n- Irina, help me with the wounded.\n- I'll get an orderly.\nEverybody off!\nSiberia!\nWe can't run much farther.\nPoor Mother Russia!\nAttention, please!\nChief of Army Hospital, Comrade Borozdin, please report to the military commandant at once.\nMaybe we'll find peace here at last.\nOut of the way, the evacuated.\nYour stove is smoking.\nOh, I'm sorry.\nSave your dreaming till the war is over.\nWhere are you going?\nTo the hospital.\nI'm on duty.\nShe wanders around like a ghost, all nerves.\nThe poor thing is waiting for a letter.\nFrom whom?\nHer husband's not up at the front like ours.\nShe's not waiting for any letter.\n- D'you have the 2nd shift at school?\n- Yes.\nCranes like ships, Sailing up in the sky...\nI can't get those silly verses out of my head.\nThere she is!\n- Who?\n- The mail carrier.\nIf I can count up to 50, there'll be a letter for me.\n- One, two, three, four...\n- Stop it, Veronica.\n- Fifteen, sixteen...\n- Veronica, this is madness.\n- Nineteen, twenty...\n- Stop it!\nForty-seven, forty-eight...\n- Good morning!\n- Good morning!\nSorry, nothing for you.\nHere you are.\n- Lebedeva?\n- That's me.\n- Paliukaitis?\n- Nothing.\nFrom my eldest.\nFrom the Ukrainian Front.\nI didn't know Boris.\nBut everyone says what a fine, talented boy he was.\nWas?\nListed as missing in action doesn't mean he was killed.\nOf course not.\nI just didn't put it right.\n- What's wrong, Veronica?\n- I'm dying, Anna Mikhailovna.\nCome on, Veronica.\nYou poor child.\nI've lost everything.\nYou have your whole life before you.\nI don't want it!\nWhat's it good for?\nYou must forget the past.\nIt is human nature to forget.\nI don't want to forget.\nI don't need it.\nBut you can't go on tormenting yourself for your mistakes.\nI should do it.\nAll my life.\nYou teach history.\nYou're a wise woman.\nTell me what's the meaning of life?\nThe meaning of life?\nMaybe it's in...\n- Did Chernov get here yet?\n- Not yet.\nWow, I'm really famished!\nTry to be nice to Chernov when he comes, please.\nHe makes me ill.\nI feel exactly the same way, but after all he's my boss.\nThat gives you a reason to lick his boots?\nPlease, Veronica, this can't go on.\nYou're always so irritable, always criticizing.\nTell me, how can I make you happy?\nJust disappear.\nCome in, it's open.\nCome in!\nMark, pardon my invasion.\nNot at all.\nIt's a pleasure.\nHere, let me take that.\nDid you see the paper?\nThe Germans have advanced in the Caucasus.\nYes, it's awful.\nBut we'll show them what we're made of yet!\nPlease make yourself comfortable.\nIt's warm here.\nYour place is nice and cozy.\nMy wife and children are in Tashkent, so I'm kind of homeless.\n- Good day, Veronica.\n- Good day.\n- Where are you going, darling?\n- To the hospital.\nI'm on duty.\nBundle up.\nIt's very cold.\nI admire your wife.\nShe's so honest...\nShe must be very happy with you.\n- I was looking for you at the Philharmonic.\n- Was there a concert?\nNo.\nBut are you going to the birthday party tonight?\nI might.\n- What are you giving her?\n- What can I give her?\nThe war!\nYes, this war.\nIt's nothing gorgeous, of course, but tie a little trifle to it and Antonina will be pleased.\nIt's wonderful!\nWhat do I owe you?\n- It's really nothing, forget it.\n- Thank you very much.\nMark, can you do me a favor?\n- Is someone up there?\n- No.\nCould you get some drugs for me from Feodor Ivanovich?\nFine job, Irina.\nHe'll pull through.\nI hope so.\nIt would be downright mean of him not to.\nIrina, you should have been a man!\nI'm doing all right as a girl.\nVeronica!\nWhat are you doing here so early?\nThe clock was fast.\nPoor girl...\nI can't forgive her for what she did to Boris.\nNew patients again!\nI told them I have no more room.\nI'm running a hospital, not a barrel of herrings!\n- Are these from Kalach?\n- From Stalingrad.\nSome from the front line, others from the hospitals.\nNo place for us here, either.\nDon't worry, they'll find room.\nI'll take 80 men.\nThe rest will have to go to other hospitals.\nLet's see now...\nPlease give my regards to Sergei,\nFeodor, Vassily, Aunt Maria,\nAgraphyona, Catherine, Barbara,\nNikolai, Catherine...\n- You already said Catherine.\n- That's another one.\n- Don't you want to explain it?\n- They'll figure it out.\nSo, Zinaida, Antonina, Kuzma...\nNurse!\n- What do you want, Vorobyov?\n- Never mind.\nNurse!\n- He wants a potty.\n- I'll give it to him.\nThanks.\nThat's beautiful music!\nTurn it up a little louder, will you please?\nShut up your music!\nTurn it down!\nYou hear me?\nWho was that shouting?\nI did, so what?\n- Zakharov, what's wrong?\n- Leave ma alone!\nHe's gone berserk.\nHe got bad news from home this morning.\nHis girl just got married to a friend of his, bitch.\nHe hasn't had a bite to eat.\nTry to see what you can do, nurse.\nThose broads are worse than fascists, aiming right in the heart.\nYou must try to eat.\nIt's the only way to get well.\nI don't want to get well!\nI just want to croak!\nGet the doctor.\nCalm down.\nPlease, calm down.\nBecause of a woman...\nWhat a dumbbell!\nGet the doctor!\nGet the doctor now!\nQuit that yelling!\nCackling like a bunch of hens!\nWhere will they take us now?\nThere're plenty of hospitals in this wide world.\nGuys, the chief is coming!\nBastards!\nQuiet down!\nYou're a soldier in the Red Army!\nWant to desert it?\nYou afraid that if we cure you, you might go back in the army?\nYou're not being fair.\nHe got a bad letter from home.\nI know.\nThat's just an excuse.\nSo what if his girl's left him?\nGood riddance!\nShe's not worth a dime if she gave up a handsome soldier like this, a real hero, for a puny draft-dodger!\nRight.\nShe's the one who's missed her happiness!\nAnd whatever she's got, she deserves it!\nWhat a petty soul!\nCan a woman like that understand the suffering you've gone through?\nKilling her would be too good for her kind.\nYou stood the most difficult trial.\nYou looked death in the face, went to meet it yourself.\nAnd she couldn't stand the small test of time.\nFor women like that, no honorable man can have anything but contempt!\nFor such creatures there is no pardon!\nBandage him!\nAunt Sima, bring him fresh porridge and some hot tea.\nBe good now.\nVeronica...\nWhat the hell kind of a mother are you?\nKeep an eye on your kid!\nAnd I'll be held responsible!\nDaydreaming, you fool!\n- Who are you?\n- Mamma's boy.\n- Where are you from?\n- From Voroshilovgrad.\n- How old are you?\n- Three months and three years.\n- What's your name?\n- Boris.\n- What?\n- Boris.\n- Why the fancy get-up?\n- A concert in the hospital.\n- A likely story!\n- All right, all right.\n- Is Mark here?\n- So far yes.\nI've been saving this for you.\nThank you very much, Anna Mikhailovna.\nIt's for a little boy we know.\nIt's his birthday.\nI wish everyone were as kind- hearted as you are, Mark.\nThe symptomatology of this type of compound injury depends primarily on changes in the nodal structure...\n- Interesting, but beyond me.\n- Why, it's really quite simple.\nThey are not readily apparent to the clinical practitioner, but in most cases the etiology...\n- What is this?\n- What kind of a trick is that?\nWhat do you mean, trick?\nThe poor child lost his parents.\nI want my mommy!\nYou ought to have taken him to the Foundling Center.\nYou go yourself to the Center!\n- Rude child!\n- I'm not, you're rude!\nNow, don't cry.\nWe'll go find your mommy in Voroshilovgrad.\nNow, now, be quiet.\n- Poor baby, he wants his mommy.\n- Look, here comes a goat...\nStop rattling.\nYou're hurting my ears.\nHere, play with the cover.\nDon't you want it?\nOh, my God.\nHere's a bagel roll for you.\nKeep him quiet!\nHe's driving me crazy.\nIf we had some toys for him to play with...\nIrina, take him for a minute.\nHah, what next?\nStop crying, will you?\nLet me take him.\nCome on, my little one, my little Boris...\nI'll undress you and put you to bed...\nHave anyone seen my squirrel?\nYes, Mark took it.\n- Why?\n- He's giving it to some boy.\nMy squirrel to a boy?\n- Where's Mark?\n- I don't know.\n- Where's Mark?\n- I don't know.\nYou're hiding something from me.\nYou know where he's, don't you?\nWhere's he?\nHe's probably gone to Antonina's party.\n- What Antonina?\n- Why don't you ask Mark?\n- Who's she, tell me!\n- Don't order me around.\nMark visits her occasionally.\nDo you get it?\n- You're saying this to spite me.\n- Why would I want to?\nBecause I'm married, I'm loved, and you're still a spinster!\nStop it, Veronica!\nAntonina lives near the food shop, in the little house next door.\nGo over there and see for yourself.\nCalm down.\nI should do something.\nWhen Mark comes home, you'll have a talk.\nBut now you must wait.\nSure, I must wait...\nThat's all I've been doing all the time.\nThat's enough!\nMay our lips benumb.\nWords are futile.\nThey so often lie perchance.\nAnd only our eyes Will never dare lie,\nForever true their parting glance.\nMy eyes are now sad and dark,\nAs though therein a candle was put out...\nIn Leningrad after my parties we'd go for a ride, from one part of the city to the other.\nArrange for a ride now.\nThere's a war on, Antonina.\nCars are worth its weight in gold, the gasoline is strictly rationed.\nGet any kind of car!\nI beg you!\nA fire-engine, an ambulance, a truck... anything!\nLet me hope where there's hope no longer!\nJust the two of us?\nTo the point of full abandon?\nI'll see what I can do.\nI love you!\nSorry, I don't dance.\nI thought I'd tried everything, but I've never tried golden chestnuts.\nLook, a note!\n- It's a birthday note for me.\n- Congratulations!\nWhere's the squirrel?\nWhere's my squirrel?\nLook, you mustn't think that...\nThere's a note here from somebody named Boris.\nMy only one, happy birthday...\nOn this day you were born.\nIt's hard leaving you.\nBut it can't be helped.\nIt's war!\nI must go.\nWe can't go on living the way we did, enjoying ourselves while death stalks our land.\nWe will be happy some day.\nI love you, I trust you.\nYour Boris.\nWhy are you so alarmed?\nGo home.\nI'll be right back.\nWhy?\n- Take your coat off.\n- Thank you.\nYou know, all the Philharmonic cars are being used tonight, and I must have a car.\nYou're Chief Surgeon, you won't refuse me this little favor...\nTransportation is our most critical problem.\nIt was difficult for me too, but I did my best.\nI went out of my way, because you asked me...\n- What I asked you?\n- The exemption.\nNow it's about to expire, and this time to get it will be almost impossible.\n- What d'you mean, exemption?\n- The exemption for Mark.\nYou can be sure I handled the whole thing discreetly.\nCould Mark have done it without informing you?\nHe even offered me money in your name...\nI'm sorry.\nI'm glad you're here, Uncle Fedya.\nI wish you'd talk to her.\nShe burst in without being invited, started a fight...\nShut the door.\nDo you believe that anybody likes having his son marching off to war?\nWhat do you mean?\nOr do you believe that for your petty pleasures and well-being others must lose their arms, legs, eyes, jaws, even their lives?\nAnd you owe nothing to no one?\nYou know I've got an exemption, Uncle Fedya.\nTell us how you got this exemption.\nWhat are you doing, Veronica?\nIt's all right.\nI'm going to rent a room.\nAnd I'm taking the boy...\nPerhaps someone else had better rent a room?\nGladly.\nI've been wanting to for a long time.\nI wish you'd driven me out in the first place.\nYou've been through a terrible ordeal.\nOnly one who had done something worse could have condemned you.\nStay with us.\nI can't.\nI cannot hide behind someone else's back.\nI don't want to.\nThink it over.\nListen, where can I find the Borozdin family?\n- Which one are you looking for?\n- Feodor Ivanovich.\nHe is not in at the moment.\nAre you from Boris?\nNo, I'm by myself.\nI have to see Feodor Ivanovich.\n- Won't you sit down?\n- Thanks.\nFeodor Ivanovich should be here in a few minutes.\n- May I go out?\n- All right.\n- Is he yours?\n- Yes, he's mine.\nHe looks like you.\nAre you a relative of the Borozdins?\nNot really.\nWell, I've done all the fighting I'll ever do.\nGoing home?\nNot yet.\nLeningrad's still blockaded.\n- Yeah, I'm in a spot.\n- Why?\nI guess there's no harm in telling you because you're not the family.\nBut how do you tell a man his son was killed?\n- Where did it happen?\n- Near Smolensk.\nWhat do you want me to play?\nI don't care.\nTell me, did you see him buried?\nNo.\nI was put on a stretcher and taken to a hospital, and he was with a friend of his, Stepan.\nStepan...\nI've got to find his girl now.\nHe was really in love with her.\nI'm the girl.\nCome to see us when you're in Moscow, Volodya.\nThanks very much.\nI will.\nThe war's over.\nIt's strange, isn't it?\nAnd you're still waiting?\nI am.\nOne must always keep on hoping.\nWhat's the use of waiting?\nI saw it with my own eyes.\nWhat did you see?\nYou saw him wounded?\nYou saw him fall?\nYou didn't see him die.\nBut if he's alive, why hasn't he written to you?\nAnything could happen.\nStepan hasn't written to anyone either.\nThey know at the factory that he was in some Special Operations.\nDasha promised to let me know when he's back.\nBoris is alive.\nHe's alive.\nLook!\nThe victors are coming!\nKolia, darling, you're back!\nBoris!\nVeronica!\nStepan!\nThe flowers...\nFor you.\nWell?\nWhat?\nYou see...\nWell...\nMy darling!\nDear mothers, fathers, brothers and sisters!\nThe happiness of our reunion is boundless.\nThe heart of every Soviet citizen sings with joy, the joy of victory!\nWe have all waited for this happy moment.\nWe dreamed of it in the darkest hours of our struggle.\nBut we'll never forget those who lie silent on the battlefield.\nYears will pass, our cities will rise again, and our wounds may one day be forgotten.\nLet one thing remain in our hearts, a cold hatred of war!\nWe deeply feel the grief of those who cannot meet their loved ones today.\nWe must all take a vow to keep our promise that sweethearts will never again be parted by war, that mothers may never again fear for their children, that our brave fathers may not stealthily swallow their tears.\nWe have won and remained alive, not for destruction but to build a new life!\nDon't just stand there.\nGive the flowers to whoever they're for.\nThank you very much, sister.\nOh, what a darling!\nWhat a chubby little darling!\nLook, the cranes are flying over Moscow!\nThe End\nSubtitles ripped by:\n--nttalex--\nMOSFILM\nWait, Squirrel!\nHere, put it on.\nLook!\nCranes like ships Sailing up in the sky,\nWhite ones and grey ones, With long beaks, they fly!\nLook!\nYou see...\nYou with your \"cranes like ships\".\nTHE CRANES ARE FLYING\nWritten by V. ROZOV\nDirected by M. KALATOZOV\nDirector of Photography S. URUSEVSKY\nAssociate Director\n- B. FRIDMAN Production Designer\n- Y. SVIDETELEV\nMusic by M. VAINBERG Sound by I. MAYOROV\nEnglish subtitles by T. KAMENEVA\nStarring\nT. SAMOILOVA as Veronica A. BATALOV as Boris\nV. MERKURIEV as Feodor Ivanovich\nA. SHVORIN as Mark S. KHARITONOVA as Irina\nK. NIKITIN as Volodya V. ZUBKOV as Stepan\nA. BOGDANOVA as Grandma B. KOKOVKIN as Chernov\nYe.\nKUPRIANOVA as Anna Mikhailovna\nAn Order of Lenin Film Studio \"Mosfilm\" production, 1957\nWho is there?\nWait!\nWell, all right.\nSay when, then.\nThursday, on the embankment.\nCome on, that's too long.\nSquirrel!\nYou haven't told me when!\nSquirrel, at what time?\nWhat time on Thursday?\nNo, I can't make it.\nI'll be working.\n- All right.\n- Don't be late.\nSquirrel!\n- She's gone crazy over him.\n- And he's over her.\nThat's love, my dear.\nA harmless mental disturbance.\nGrandma, why aren't you asleep?\nBecause it's time to get up, Boris!\nStop chomping!\nRunning around all night...\nAre you jealous?\nYou haven't torn it, have you?\nYourjacket's all right.\nOutrageous!\nIt's noon and he's still in bed.\nThe boy deserves a good rest on Sunday.\nHe works hard.\nThat work of his will result in a marriage.\nThat's when you'll be really jealous.\nFor Irina, her diploma comes first.\nLook out, Uncle Fedya.\nShe'll be a full professor soon, while you're still only a MD.\nIf children don't surpass their parents, then the children are fools and the parents are no better.\nThanks, Mamma.\nThis is Radio Moscow broadcasting over all of the Soviet Union!\n- What is it?\n- What has happened?\nBoris!\nWe're at war!\nDo you hear?\nWe're at war!\nLeave me alone!\nHi!\nBoris is working day and night.\nAre you waiting for him?\nI'm not waiting for anyone.\nVeronica!\nIn time of war, one should not get confused.\nOne should hold on to a normal life pace.\nTake me.\nI dream of dedicating to you my first symphony.\nWill you come to the concert?\nSuppose the Army calls you up?\nThe Army?\nI doubt it.\nHardly.\nWhy \"hardly\"?\nThe most talented ones will be exempted.\n- Are you the most talented one?\n- Me?\nCertainly.\nWhy are you following me around?\nAren't you ashamed?\nI am.\nI tried to keep away from you.\nI know, Boris is my cousin.\nBut I can't help myself!\nWait!\n- Wait!\n- I'm going home alone.\nHey, slow down!\nYou just had an operation.\nI'd better be in shape for that field-pack.\nThey're not wasting men like you in the Army.\nThere'll only be one exemption here, and one of us'll get it.\nThey'd better give it to you.\nYou've got knowledge, experience.\nAnd you've got talent.\nSave your sketches.\nMy wife's already got my bag packed.\nWell, as they say, let's get our bayonets ready.\nHey, Stepan!\nGuys, give me a hand...\nStepan!\nExcuse me, Sachkov.\n- Where's the summons?\n- Not yet.\nI can't wait.\n- Are you off now?\n- No, I've got those sketches...\n- I see.\nTake care.\n- Okay.\n- Hey!\n- Yeah?\n- Have you told her?\n- No, it's too early...\n- You're right.\nSee you tomorrow.\n- Right.\n- Let go.\n- I won't.\n- You're going to fall down.\n- No, I won't.\n- You'll rip up the blackout.\n- It's a blanket.\nI'm going to call the militia.\nI'm sick of the blackout.\nGive me the blanket.\n- Let go.\nYou'll fall.\n- No, I won't.\nCome on, Squirrel, cut it out.\nLet me hang this up.\nYou didn't come to the embankment today, but Mark did.\n- He's very handsome.\n- So what?\n- Aren't you jealous?\n- What?\n- Aren't you jealous?\n- I haven't got the time for it.\nI won't have much time either when I go to the architecture college.\nYou'll never pass the entrance exams.\n- I will!\n- I doubt it.\nCranes like ships Sailing up in the sky,\nWhite ones and grey ones, With long beaks, they fly.\n- Do you like my song?\n- Very profound.\nOh frogs, you keep on croaking, Why didn't you think of looking up?\nYou went on leaping, in mud soaking That's why you ended eaten up.\n- All right, you won, hero.\n- I won, I won!\nI won.\nAll right.\n- D'you think you'll be drafted?\n- Sure.\n- You won't volunteer?\n- I might.\nWhy not?\nNo, you won't!\nI won't let you.\nYou know you'll get an exemption.\nThat's why you talk so big.\n- Why do you think so?\n- Everyone smart will be exempted.\nThen the only ones to do the fighting will be the fools.\nI don't want to talk to you ever again.\nVeronica, there's something I must tell you.\nI don't want to hear it.\nAnd, please, don't call me Veronica.\n- Who am I?\n- Squirrel.\nListen...\n- What will you give me tomorrow?\n- It's a secret.\nIf you give me something sweet, I'll eat it up and forget about it.\nGive me something to remember you with.\nKiss me now.\nWhen I'm with you, I'm not afraid of anything.\nNot even the war.\nThough, I'm afraid of the militia.\n- Veronica...\n- You know what?\n- Do you know?\n- No.\nI'll have a beautiful white dress made for our wedding.\nOne like my grandmother had.\nAnd a veil...\nVery long and white.\nAnd you should wear your dark suit.\n- And you and I will go...\n- To a registry office.\n- Is it a deal?\n- It's a deal.\n- You know I like this blackout.\n- What's so good about it?\nHi!\n- Stepan!\n- Veronica!\n- I've got a treat for both of you.\n- Fine.\n- What is it?\n- It's a secret.\n- Has it arrived?\n- Yes, this morning.\n- Why didn't you say so?\nTell me.\n- Well, go on.\nYou should've seen what's going on over at the factory.\nMake it short, will you?\nI'm telling you:\nThere's so much excitement...\n- Never mind that.\n- Your folks told me...\n- When do we report?\n- Today at 5:30.\nLook at those cherries!\nIs anything wrong?\n- They're nice!\n- Army orders.\n- No!\nFor you?\n- Me too.\nWe both volunteered...\nWhen?\n- You volunteered?\n- It's army orders.\nWait!\nWhat about us?\nStepan...\nNo, I've got to go.\nMy folks are going to...\nSo long.\nSquirrel!\nI didn't want to tell you before your birthday.\n- And now I have to go.\n- Of course.\nBoris!\nSquirrel, what is this?\nWhite cranes flying...\nI like that.\nI'm going to be all right.\nDo you hear?\nAnd after that we'll live together...\na hundred years.\nGo on now.\nWe'll say goodbye later.\nDon't be late.\nWhat difference would it make if he went a day later?\nWhat a nerve if he's still with Veronica.\n- Boris!\n- Did Dad call?\nHe was furious.\nWhy didn't you tell anyone?\nSo that we didn't have any scenes like that.\nGet these prints back to the factory tomorrow.\n- Give them to Kuzmin, the engineer.\n- I will, don't worry.\nWhat are you putting in there?\nI'm going out for a bottle of wine.\nGrandma, do me a favor.\nJust a minute...\n- Will they send you to the front?\n- Probably.\nHere, Grandma...\nWait.\nTomorrow when you get up, take this to her...\n- What is it?\n- Her birthday present.\nAnd help her.\nAfter all, it's war...\nPlease, be kind to her.\nAnd what if I die?\nYou don't have the right, especially now, with so many secrets to protect.\n- Well, suppose I do...\n- Come on...\nQuiet now, Grandma.\nThat's Veronica!\nNo, it's just Irina.\nThank heaven, you've come.\n- Boris!\n- Yes?\nCome over here.\nYou're 25 years old and you behave like a fool.\nWhat are we, children?\nWhat is it?\nAre we playing hide and seek?\nAre you starved for adventures?\nWhat kind of a man are you?\nWhere's Irina, and Mark?\nIrina is making coffee, Mark went out for wine.\nCoffee, wine...\nWhat kind of send-off is that?\nIrina!\nBring that thing from the medicine chest.\nBoris, come over here.\n- Where is Veronica?\n- She'll be here.\n- But where's she?\n- She's busy.\nShe's supposed to be here.\nHer fiance is going away.\nI'm not her fiance.\n- What are you then?\n- Just a friend...\n- That sounds suspicious...\n- I don't mean that way, Dad.\n- Then what do you mean?\n- Look, give me a break.\n- Here's the alcohol.\n- Have it diluted.\nI got some port wine.\nDrink it yourself.\nWe'll have a more robust drink.\nWell, are we all here?\nLet's sit down.\nIt's Veronica.\nAren't you going to welcome her, friend?\nAt last!\nIs Boris home?\nWe're from the factory.\nPlease, come in.\nI thought it was the fiancee.\n- We've come from the factory.\n- What about the presents?\n- Sorry.\nThis one's yours.\n- Yes...\nThank you.\nOn behalf of the Factory Committee...\nComrade Boris, you must fight to the last drop of your blood.\nSmash the accursed fascists, and we, in the factory, will fulfil and overfulfil our quotas.\nWe've heard all that before.\nYou'd betterjoin us and drink to my son, Boris.\nWell, I suppose... life in this world of ours is not yet what we would like it to be.\nNow you're going to war, Boris...\n- Let's drink.\n- To you.\nIrina!\nWhat about Grandma?\nWe saw my brother off last night.\nMy mother was crying...\n- What about you?\n- I was too.\n- On whose behalf, the committee's?\n- I wasn't thinking about that.\nThere's no one to see off in our family, we have 3 girls and Mom.\nIt's somewhat embarrassing...\nI feel left out...\nYes, and when they come back, you'll really envy us.\nThe trouble is, not all of them will be coming back.\nFor those who don't, a magnificent monument, with their names inscribed in gold.\nIrina, don'tjust sit there.\nFill the glasses.\nAnd you folks in the rear, fulfil and overfulfil!\nNow, Grandma, don't forget.\nMark, stay with Dad.\nHe'll be all right.\nI'll see you off.\nAbout face!\nPlatoon, forward march!\nTake it, Grandma!\n- Boris!\n- Mamma!\n- I won't see him again.\n- I'm sorry, Mamma.\nDrink it.\nYou'll feel better.\n- Where are you going?\n- To the hospital.\nBut you aren't on call now.\nVarvara Kapitonovna, I've got to see Boris...\nHe's gone.\n- Gone?\nWhere?\n- To report for the Army.\n- Oh, no!\n- Come in.\n- Where was he supposed to report?\n- I don't know.\nWhat is it?\nIt's from Boris.\nFor your birthday.\nThere's a note inside.\n- Where's the note?\n- Why?\nIsn't it there?\nMaybe it fell?\nMaybe he forgot in a hurry.\n- Forgot?\n- He'll write to you.\nWhere were you?\n- Where's Boris gone?\n- It's the schoolyard near the park.\nCalm down, she'll be here.\nIt would be quite a job finding someone in this crowd.\nWhat are you doing?\nWrite to me.\nWrite every day.\nDidn't I tell you to ship the cauliflower?\nAn airplane is high above, Over the roofs it's droning.\nIt's my sweetheart sends his love From his sky-high soaring.\nIt was used to be before That he saw me to my door.\nNow it's been quite a turn-off:\nI'm the one to see him off!\nDon't forget to write your Army Post Office number.\n- Cheer up, pug-nose!\n- We'll wait till you come back.\nGoodbye, Boris!\nTake care!\nFall in!\nShe will come.\nBoris!\nBoris!\nDress!\nAttention!\nForward march!\nBoris!\nThat's my little chicken!\nBoris!\nBoris!\nGrandma...\nNothing?\nHe hasn't written to me either.\n- Any news?\n- No.\nOh, this damn war!\nWe'll have to keep going somehow.\nHave you decided about a job?\nI'm starting at the war factory tomorrow.\nAir-raid alert!\nHurry on to the subway.\nI've got to finish this.\nGet your things.\n- Where's the knapsack?\n- It's over there.\nI won't go without you.\nIf it gets bad, we'll run down.\nGo on, now.\nBe careful in the subway!\nShe's so frightened, poor thing.\nAren't you?\nWhen I know that Veronica's safe and you're with me,\nI'm not such a coward.\nThe filthy murderers!\nWe'll get back at you, you wait!\nHe's not writing to me.\nOh, he must have written.\nIt's just the mail.\nAll clear!\nThe air raid has been terminated.\nLet's go!\nHere's where I live now.\nIf you decide to work with us, call me at the factory.\n- I will.\n- Goodbye.\nGet down here!\nCome back!\nWhat's the matter?\nAre you crazy?\nI'm sorry.\nVeronica, you can stay with us from now on.\nYou can have Boris' room.\nMark will move in with Fedya...\nMark, she'll need some attention to keep her from brooding.\nIrina and I are so busy at the hospital.\nI'll do what I can, Uncle Fedya.\nI promised Boris.\n- Is it agreed?\n- Um-hmm.\nIs this the factory?\nMay I speak to Kuzmin?\nHe was drafted, too?\nExcuse me, has anyone heard from Boris Borozdin?\nIf it weren't for this damn war,\nI'd be playing this in the Tchaikovsky Hall.\nFor you.\nVeronica!\nLet's go to the subway.\n- I'm not going.\n- Don't be silly.\nCome on.\n- Are you afraid?\n- For you.\nCome with me.\nI'm not afraid of anything.\n- Veronica, let's go to the subway!\n- No, I'm not going.\n- Stop it!\nYou've gone crazy!\n- I'm not going!\nI love you.\nNo.\n- I love you!\n- No!\nNo!\n- I love you!\n- Go away!\n- I love you!\n- No!\nNo!\nNo!\nIt's stupid to get surrounded like this.\n- Stepan, quit whining.\n- Who's whining?\nI'm not.\nThe captain said we might be able to break out by tonight.\nYeah, that's what he says.\nSachkov!\nWhere'd you find that rookie?\nIn the incubator.\nHe's our reinforcements.\nNow we'll break through for sure.\nIs that a way to talk about a married soldier?\nI got yoked in my last year of school.\nThe result of too much of education.\nYou're funny.\nLaughed yourselves right into a trap, I guess.\n- Volodya, you really married?\n- I said it to sound important.\n- Borozdin!\n- Yes?\nYou'll go on a reconnaissance mission.\nYou got to find the best place for us to break through tonight.\n- Turn in your documents.\n- Yes, sir.\nHey, Sachkov!\nTake this, will you?\nWhy don't we rest?\nAnd have a smoke.\nIs she always laughing like that?\nShe probably thinks we're all dead.\nLet me see that beauty.\nHey, that's the soldier's life for you!\n- You're here, and she...\n- And she what?\nHey, let me try that thing.\n- Hold it, will you, Sachkov?\n- Certainly.\nNot bad for a first try.\nStop that!\n- Aren't you ashamed?\n- No, sir.\n- Five days under arrest!\n- Yes, sir.\n- You both go on a reconnaissance.\n- Why?\nTurn in your papers!\nBoris, here.\nOn account of her?\n- I'd say she was worth it.\n- She sure is!\nHowever, we must maintain discipline!\nYou hear that?\nDiscipline...\nStepan, keep this.\nBe careful, don't lose it.\nWe...\nWe'll get married, Uncle Fedya.\nOh, I forgot.\nThere's some sausage left.\n- Keep your head down!\n- Stop ordering around!\nLet's get out of here before they get wise.\n- If you're scared, run.\n- Come on, you idiot!\nHey!\nMusician!\nAre you deaf?\nWhy the devil I'v got tied up with him?\nWhat's wrong with you?\nCan you hear me?\n- Go on.\nI want to rest for a while.\n- Are you wounded?\nHold on to me.\n- Leave me alone.\n- I tell you, get up!\nNow hang on, hold tight.\nThis way's no good.\nI'll have to carry you.\nCome on, leave me here.\nAre you still sore because I punched you?\n- You were just lucky, otherwise...\n- Shut up, we'll talk later.\nHere we go...\nAre you all right?\nHold on, friend.\nIt's only a little way to the woods.\nWe'll be safe there.\nI'm winded.\nLet's rest a bit.\nIt's a little quieter here.\nHow are you?\nIt's hard to breathe.\nHold on, we'll have to get you married yet...\nHey, buddy!\nWhat's the matter with you?\nWhat's wrong?\nForgive me, friend, forgive me...\nIt's my fault...\nForgive me...\nfriend...\nHey, somebody!\nHelp!\nHelp!\nHelp!\nCan you hear me, Boris?\nAre you hit?\nIt's nothing, I am just...\nThe Soviet Information Bureau reports that there were no important changes on the front in the past 24 hours.\nNo news is good news.\nFamilies evacuated with Plant 326 will be quartered on Vosstaniya Street.\nComrades, report here, please.\n- Irina, help me with the wounded.\n- I'll get an orderly.\nEverybody off!\nSiberia!\nWe can't run much farther.\nPoor Mother Russia!\nAttention, please!\nChief of Army Hospital, Comrade Borozdin, please report to the military commandant at once.\nMaybe we'll find peace here at last.\nOut of the way, the evacuated.\nYour stove is smoking.\nOh, I'm sorry.\nSave your dreaming till the war is over.\nWhere are you going?\nTo the hospital.\nI'm on duty.\nShe wanders around like a ghost, all nerves.\nThe poor thing is waiting for a letter.\nFrom whom?\nHer husband's not up at the front like ours.\nShe's not waiting for any letter.\n- D'you have the 2nd shift at school?\n- Yes.\nCranes like ships, Sailing up in the sky...\nI can't get those silly verses out of my head.\nThere she is!\n- Who?\n- The mail carrier.\nIf I can count up to 50, there'll be a letter for me.\n- One, two, three, four...\n- Stop it, Veronica.\n- Fifteen, sixteen...\n- Veronica, this is madness.\n- Nineteen, twenty...\n- Stop it!\nForty-seven, forty-eight...\n- Good morning!\n- Good morning!\nSorry, nothing for you.\nHere you are.\n- Lebedeva?\n- That's me.\n- Paliukaitis?\n- Nothing.\nFrom my eldest.\nFrom the Ukrainian Front.\nI didn't know Boris.\nBut everyone says what a fine, talented boy he was.\nWas?\nListed as missing in action doesn't mean he was killed.\nOf course not.\nI just didn't put it right.\n- What's wrong, Veronica?\n- I'm dying, Anna Mikhailovna.\nCome on, Veronica.\nYou poor child.\nI've lost everything.\nYou have your whole life before you.\nI don't want it!\nWhat's it good for?\nYou must forget the past.\nIt is human nature to forget.\nI don't want to forget.\nI don't need it.\nBut you can't go on tormenting yourself for your mistakes.\nI should do it.\nAll my life.\nYou teach history.\nYou're a wise woman.\nTell me what's the meaning of life?\nThe meaning of life?\nMaybe it's in...\n- Did Chernov get here yet?\n- Not yet.\nWow, I'm really famished!\nTry to be nice to Chernov when he comes, please.\nHe makes me ill.\nI feel exactly the same way, but after all he's my boss.\nThat gives you a reason to lick his boots?\nPlease, Veronica, this can't go on.\nYou're always so irritable, always criticizing.\nTell me, how can I make you happy?\nJust disappear.\nCome in, it's open.\nCome in!\nMark, pardon my invasion.\nNot at all.\nIt's a pleasure.\nHere, let me take that.\nDid you see the paper?\nThe Germans have advanced in the Caucasus.\nYes, it's awful.\nBut we'll show them what we're made of yet!\nPlease make yourself comfortable.\nIt's warm here.\nYour place is nice and cozy.\nMy wife and children are in Tashkent, so I'm kind of homeless.\n- Good day, Veronica.\n- Good day.\n- Where are you going, darling?\n- To the hospital.\nI'm on duty.\nBundle up.\nIt's very cold.\nI admire your wife.\nShe's so honest...\nShe must be very happy with you.\n- I was looking for you at the Philharmonic.\n- Was there a concert?\nNo.\nBut are you going to the birthday party tonight?\nI might.\n- What are you giving her?\n- What can I give her?\nThe war!\nYes, this war.\nIt's nothing gorgeous, of course, but tie a little trifle to it and Antonina will be pleased.\nIt's wonderful!\nWhat do I owe you?\n- It's really nothing, forget it.\n- Thank you very much.\nMark, can you do me a favor?\n- Is someone up there?\n- No.\nCould you get some drugs for me from Feodor Ivanovich?\nFine job, Irina.\nHe'll pull through.\nI hope so.\nIt would be downright mean of him not to.\nIrina, you should have been a man!\nI'm doing all right as a girl.\nVeronica!\nWhat are you doing here so early?\nThe clock was fast.\nPoor girl...\nI can't forgive her for what she did to Boris.\nNew patients again!\nI told them I have no more room.\nI'm running a hospital, not a barrel of herrings!\n- Are these from Kalach?\n- From Stalingrad.\nSome from the front line, others from the hospitals.\nNo place for us here, either.\nDon't worry, they'll find room.\nI'll take 80 men.\nThe rest will have to go to other hospitals.\nLet's see now...\nPlease give my regards to Sergei,\nFeodor, Vassily, Aunt Maria,\nAgraphyona, Catherine, Barbara,\nNikolai, Catherine...\n- You already said Catherine.\n- That's another one.\n- Don't you want to explain it?\n- They'll figure it out.\nSo, Zinaida, Antonina, Kuzma...\nNurse!\n- What do you want, Vorobyov?\n- Never mind.\nNurse!\n- He wants a potty.\n- I'll give it to him.\nThanks.\nThat's beautiful music!\nTurn it up a little louder, will you please?\nShut up your music!\nTurn it down!\nYou hear me?\nWho was that shouting?\nI did, so what?\n- Zakharov, what's wrong?\n- Leave ma alone!\nHe's gone berserk.\nHe got bad news from home this morning.\nHis girl just got married to a friend of his, bitch.\nHe hasn't had a bite to eat.\nTry to see what you can do, nurse.\nThose broads are worse than fascists, aiming right in the heart.\nYou must try to eat.\nIt's the only way to get well.\nI don't want to get well!\nI just want to croak!\nGet the doctor.\nCalm down.\nPlease, calm down.\nBecause of a woman...\nWhat a dumbbell!\nGet the doctor!\nGet the doctor now!\nQuit that yelling!\nCackling like a bunch of hens!\nWhere will they take us now?\nThere're plenty of hospitals in this wide world.\nGuys, the chief is coming!\nBastards!\nQuiet down!\nYou're a soldier in the Red Army!\nWant to desert it?\nYou afraid that if we cure you, you might go back in the army?\nYou're not being fair.\nHe got a bad letter from home.\nI know.\nThat's just an excuse.\nSo what if his girl's left him?\nGood riddance!\nShe's not worth a dime if she gave up a handsome soldier like this, a real hero, for a puny draft-dodger!\nRight.\nShe's the one who's missed her happiness!\nAnd whatever she's got, she deserves it!\nWhat a petty soul!\nCan a woman like that understand the suffering you've gone through?\nKilling her would be too good for her kind.\nYou stood the most difficult trial.\nYou looked death in the face, went to meet it yourself.\nAnd she couldn't stand the small test of time.\nFor women like that, no honorable man can have anything but contempt!\nFor such creatures there is no pardon!\nBandage him!\nAunt Sima, bring him fresh porridge and some hot tea.\nBe good now.\nVeronica...\nWhat the hell kind of a mother are you?\nKeep an eye on your kid!\nAnd I'll be held responsible!\nDaydreaming, you fool!\n- Who are you?\n- Mamma's boy.\n- Where are you from?\n- From Voroshilovgrad.\n- How old are you?\n- Three months and three years.\n- What's your name?\n- Boris.\n- What?\n- Boris.\n- Why the fancy get-up?\n- A concert in the hospital.\n- A likely story!\n- All right, all right.\n- Is Mark here?\n- So far yes.\nI've been saving this for you.\nThank you very much, Anna Mikhailovna.\nIt's for a little boy we know.\nIt's his birthday.\nI wish everyone were as kind- hearted as you are, Mark.\nThe symptomatology of this type of compound injury depends primarily on changes in the nodal structure...\n- Interesting, but beyond me.\n- Why, it's really quite simple.\nThey are not readily apparent to the clinical practitioner, but in most cases the etiology...\n- What is this?\n- What kind of a trick is that?\nWhat do you mean, trick?\nThe poor child lost his parents.\nI want my mommy!\nYou ought to have taken him to the Foundling Center.\nYou go yourself to the Center!\n- Rude child!\n- I'm not, you're rude!\nNow, don't cry.\nWe'll go find your mommy in Voroshilovgrad.\nNow, now, be quiet.\n- Poor baby, he wants his mommy.\n- Look, here comes a goat...\nStop rattling.\nYou're hurting my ears.\nHere, play with the cover.\nDon't you want it?\nOh, my God.\nHere's a bagel roll for you.\nKeep him quiet!\nHe's driving me crazy.\nIf we had some toys for him to play with...\nIrina, take him for a minute.\nHah, what next?\nStop crying, will you?\nLet me take him.\nCome on, my little one, my little Boris...\nI'll undress you and put you to bed...\nHave anyone seen my squirrel?\nYes, Mark took it.\n- Why?\n- He's giving it to some boy.\nMy squirrel to a boy?\n- Where's Mark?\n- I don't know.\n- Where's Mark?\n- I don't know.\nYou're hiding something from me.\nYou know where he's, don't you?\nWhere's he?\nHe's probably gone to Antonina's party.\n- What Antonina?\n- Why don't you ask Mark?\n- Who's she, tell me!\n- Don't order me around.\nMark visits her occasionally.\nDo you get it?\n- You're saying this to spite me.\n- Why would I want to?\nBecause I'm married, I'm loved, and you're still a spinster!\nStop it, Veronica!\nAntonina lives near the food shop, in the little house next door.\nGo over there and see for yourself.\nCalm down.\nI should do something.\nWhen Mark comes home, you'll have a talk.\nBut now you must wait.\nSure, I must wait...\nThat's all I've been doing all the time.\nThat's enough!\nMay our lips benumb.\nWords are futile.\nThey so often lie perchance.\nAnd only our eyes Will never dare lie,\nForever true their parting glance.\nMy eyes are now sad and dark,\nAs though therein a candle was put out...\nIn Leningrad after my parties we'd go for a ride, from one part of the city to the other.\nArrange for a ride now.\nThere's a war on, Antonina.\nCars are worth its weight in gold, the gasoline is strictly rationed.\nGet any kind of car!\nI beg you!\nA fire-engine, an ambulance, a truck... anything!\nLet me hope where there's hope no longer!\nJust the two of us?\nTo the point of full abandon?\nI'll see what I can do.\nI love you!\nSorry, I don't dance.\nI thought I'd tried everything, but I've never tried golden chestnuts.\nLook, a note!\n- It's a birthday note for me.\n- Congratulations!\nWhere's the squirrel?\nWhere's my squirrel?\nLook, you mustn't think that...\nThere's a note here from somebody named Boris.\nMy only one, happy birthday...\nOn this day you were born.\nIt's hard leaving you.\nBut it can't be helped.\nIt's war!\nI must go.\nWe can't go on living the way we did, enjoying ourselves while death stalks our land.\nWe will be happy some day.\nI love you, I trust you.\nYour Boris.\nWhy are you so alarmed?\nGo home.\nI'll be right back.\nWhy?\n- Take your coat off.\n- Thank you.\nYou know, all the Philharmonic cars are being used tonight, and I must have a car.\nYou're Chief Surgeon, you won't refuse me this little favor...\nTransportation is our most critical problem.\nIt was difficult for me too, but I did my best.\nI went out of my way, because you asked me...\n- What I asked you?\n- The exemption.\nNow it's about to expire, and this time to get it will be almost impossible.\n- What d'you mean, exemption?\n- The exemption for Mark.\nYou can be sure I handled the whole thing discreetly.\nCould Mark have done it without informing you?\nHe even offered me money in your name...\nI'm sorry.\nI'm glad you're here, Uncle Fedya.\nI wish you'd talk to her.\nShe burst in without being invited, started a fight...\nShut the door.\nDo you believe that anybody likes having his son marching off to war?\nWhat do you mean?\nOr do you believe that for your petty pleasures and well-being others must lose their arms, legs, eyes, jaws, even their lives?\nAnd you owe nothing to no one?\nYou know I've got an exemption, Uncle Fedya.\nTell us how you got this exemption.\nWhat are you doing, Veronica?\nIt's all right.\nI'm going to rent a room.\nAnd I'm taking the boy...\nPerhaps someone else had better rent a room?\nGladly.\nI've been wanting to for a long time.\nI wish you'd driven me out in the first place.\nYou've been through a terrible ordeal.\nOnly one who had done something worse could have condemned you.\nStay with us.\nI can't.\nI cannot hide behind someone else's back.\nI don't want to.\nThink it over.\nListen, where can I find the Borozdin family?\n- Which one are you looking for?\n- Feodor Ivanovich.\nHe is not in at the moment.\nAre you from Boris?\nNo, I'm by myself.\nI have to see Feodor Ivanovich.\n- Won't you sit down?\n- Thanks.\nFeodor Ivanovich should be here in a few minutes.\n- May I go out?\n- All right.\n- Is he yours?\n- Yes, he's mine.\nHe looks like you.\nAre you a relative of the Borozdins?\nNot really.\nWell, I've done all the fighting I'll ever do.\nGoing home?\nNot yet.\nLeningrad's still blockaded.\n- Yeah, I'm in a spot.\n- Why?\nI guess there's no harm in telling you because you're not the family.\nBut how do you tell a man his son was killed?\n- Where did it happen?\n- Near Smolensk.\nWhat do you want me to play?\nI don't care.\nTell me, did you see him buried?\nNo.\nI was put on a stretcher and taken to a hospital, and he was with a friend of his, Stepan.\nStepan...\nI've got to find his girl now.\nHe was really in love with her.\nI'm the girl.\nCome to see us when you're in Moscow, Volodya.\nThanks very much.\nI will.\nThe war's over.\nIt's strange, isn't it?\nAnd you're still waiting?\nI am.\nOne must always keep on hoping.\nWhat's the use of waiting?\nI saw it with my own eyes.\nWhat did you see?\nYou saw him wounded?\nYou saw him fall?\nYou didn't see him die.\nBut if he's alive, why hasn't he written to you?\nAnything could happen.\nStepan hasn't written to anyone either.\nThey know at the factory that he was in some Special Operations.\nDasha promised to let me know when he's back.\nBoris is alive.\nHe's alive.\nLook!\nThe victors are coming!\nKolia, darling, you're back!\nBoris!\nVeronica!\nStepan!\nThe flowers...\nFor you.\nWell?\nWhat?\nYou see...\nWell...\nMy darling!\nDear mothers, fathers, brothers and sisters!\nThe happiness of our reunion is boundless.\nThe heart of every Soviet citizen sings with joy, the joy of victory!\nWe have all waited for this happy moment.\nWe dreamed of it in the darkest hours of our struggle.\nBut we'll never forget those who lie silent on the battlefield.\nYears will pass, our cities will rise again, and our wounds may one day be forgotten.\nLet one thing remain in our hearts, a cold hatred of war!\nWe deeply feel the grief of those who cannot meet their loved ones today.\nWe must all take a vow to keep our promise that sweethearts will never again be parted by war, that mothers may never again fear for their children, that our brave fathers may not stealthily swallow their tears.\nWe have won and remained alive, not for destruction but to build a new life!\nDon'tjust stand there.\nGive the flowers to whoever they're for.\nThank you very much, sister.\nOh, what a darling!\nWhat a chubby little darling!\nLook, the cranes are flying over Moscow!\nThe End\nMOSFILM\nWait, Squirrel!\nHere, put it on.\nLook!\nCranes like ships Sailing up in the sky,\nWhite ones and grey ones, With long beaks, they fly!\nLook!\nYou see...\nYou with your \"cranes like ships\".\nTHE CRANES ARE FLYING\nWritten by V. ROZOV\nDirected by M. KALATOZOV\nDirector of Photography S. URUSEVSKY\nAssociate Director\n- B. FRIDMAN Production Designer\n- Y. SVIDETELEV\nMusic by M. VAINBERG Sound by I. MAYOROV\nEnglish subtitles by T. KAMENEVA\nStarring\nT. SAMOILOVA as Veronica A. BATALOV as Boris\nV. MERKURIEV as Feodor Ivanovich\nA. SHVORIN as Mark S. KHARITONOVA as Irina\nK. NIKITIN as Volodya V. ZUBKOV as Stepan\nA. BOGDANOVA as Grandma B. KOKOVKIN as Chernov\nYe.\nKUPRIANOVA as Anna Mikhailovna\nAn Order of Lenin Film Studio \"Mosfilm\" production, 1957\nWho is there?\nWait!\nWell, all right.\nSay when, then.\nThursday, on the embankment.\nCome on, that's too long.\nSquirrel!\nYou haven't told me when!\nSquirrel, at what time?\nWhat time on Thursday?\nNo, I can't make it.\nI'll be working.\n- All right.\n- Don't be late.\nSquirrel!\n- She's gone crazy over him.\n- And he's over her.\nThat's love, my dear.\nA harmless mental disturbance.\nGrandma, why aren't you asleep?\nBecause it's time to get up, Boris!\nStop chomping!\nRunning around all night...\nAre you jealous?\nYou haven't torn it, have you?\nYour jacket's all right.\nOutrageous!\nIt's noon and he's still in bed.\nThe boy deserves a good rest on Sunday.\nHe works hard.\nThat work of his will result in a marriage.\nThat's when you'll be really jealous.\nFor Irina, her diploma comes first.\nLook out, Uncle Fedya.\nShe'll be a full professor soon, while you're still only a MD.\nIf children don't surpass their parents, then the children are fools then the children are fools\nThanks, Mamma.\nThis is Radio Moscow broadcasting over all of the Soviet Union!\n- What is it?\n- What has happened?\nBoris!\nWe're at war!\nDo you hear?\nWe're at war!\nLeave me alone!\nHi!\nBoris is working day and night.\nBoris is working day and night.\nI'm not waiting for anyone.\nVerónica.\nIn time of war, one should not get confused.\nOne should hold on to\nTake me.\nI dream of dedicating to you my first symphony.\nWill you come to the concert?\nSuppose the Army calls you up?\nThe Army?\nI doubt it.\nHardly.\nWhy \"hardly\"?\nThe most talented ones will be exempted.\n- Are you the most talented one?\n- Me?\nCertainly.\nWhy are you following me around?\nAren't you ashamed?\nI am.\nI tried to keep away from you.\nI know, Boris is my cousin.\nBut I can't help myself!\nWait!\n- Wait!\n- I'm going home alone.\nHey, slow down!\nYou just had an operation.\nI'd better be in shape for that field-pack.\nThey're not wasting men like you in the Army.\nThere'll only be one exemption here, and one of us'll get it.\nThey'd better give it to you.\nYou've got knowledge, experience.\nAnd you've got talent.\nSave your sketches.\nMy wife's already got my bag packed.\nWell, as they say, let's get our bayonets ready.\nHey, Stepan!\nGuys, give me a hand...\nStepan!\nExcuse me, Sachkov.\n- Where's the summons?\n- Not yet.\nI can't wait.\n- Are you off now?\n- No, I've got those sketches...\n- I see.\nTake care.\n- Okay.\n- Hey!\n- Yeah?\n- Have you told her?\n- No, it's too early...\n- You're right.\nSee you tomorrow.\n- Right.\n- Let go.\n- I won't.\n- You're going to fall down.\n- No, I won't.\n- You'll rip up the blackout.\n- It's a blanket.\nI'm going to call the militia.\nI'm sick of the blackout.\nGive me the blanket.\n- Let go.\nYou'll fall.\n- No, I won't.\nCome on, Squirrel, cut it out.\nLet me hang this up.\nYou didn't come to the embankment today, but Mark did.\n- He's very handsome.\n- So what?\n- Aren't you jealous?\n- What?\n- Aren't you jealous?\n- I haven't got the time for it.\nI won't have much time either when I go to the architecture college.\nYou'll never pass the entrance exams.\n- I will!\n- I doubt it\nCranes like ships Sailing up in the sky,\nWhite ones and grey ones, With long beaks, they fly.\n- Do you like my song?\n- Very profound.\nOh frogs, you keep on croaking, Why didn't you think of looking up?\nYou went on leaping, in mud soaking That's why you ended eaten up.\n- All right, you won, hero.\n- I won, I won!\nI won.\nAll right.\n- D'you think you'll be drafted?\n- Sure.\n- You won't volunteer?\n- I might.\nWhy not?\nNo, you won't!\nI won't let you.\nYou know you'll get an exemption.\nThat's why you talk so big.\n- Why do you think so?\n- Everyone smart will be exempted.\nThen the only ones to do the fighting will be the fools.\nI don't want to talk to you ever again.\nVeronica, there's something I must tell you.\nI don't want to hear it.\nAnd, please, don't call me Veronica.\n- Who am I?\n- Squirrel.\nListen...\n- What will you give me tomorrow?\n- It's a secret.\nIf you give me something sweet I'll eat it up and forget about it.\nGive me something to remember you with.\nKiss me now.\nWhen I'm with you, I'm not afraid of anything.\nNot even the war.\nThough, I'm afraid of the militia.\n- Veronica...\n- You know what?\n- Do you know?\n- No.\nI'll have a beautiful white dress made for our wedding.\nOne like my grandmother had.\nAnd a veil...\nVery long and white.\nAnd you should wear your dark suit.\n- And you and I will go...\n- To a registry office.\n- Is it a deal?\n- It's a deal.\n- You know I like this blackout.\n- What's so good about it?\nHi!\n- Stepan!\n- Veronica!\n- I've got a treat for both of you.\n- Fine.\n- What is it?\n- It's a secret.\n- Has it arrived?\n- Yes, this morning.\n- Why didn't you say so?\nTell me.\n- Well, go on.\nYou should've seen what's going on over at the factory.\nMake it short, will you?\nI'm telling you:\nthere's so much excitement.\n- Never mind that.\n- Your folks told me...\n- When do we report?\n- Today at 5:30.\nLook at those cherries!\nIs anything wrong?\n- They're nice!\n- Army orders..\n- No!\nFor you?\n- Me too.\nWe both volunteered...\nWhen?\n- You volunteered?\n- It's army orders.\nWait!\nWhat about us?\nStepan...\nNo, I've got to go.\nMy folks are going to...\nSo long.\nSquirrel!\nI didn't want to tell you before your birthday.\n- And now I have to go.\n- Of course.\nBoris!\nSquirrel, what is this?\nWhite cranes flying...\nI like that.\nI'm going to be all right.\nDo you hear?\nAnd after that we'll live together...\na hundred years.\nGo on now.\nWe'll say goodbye later.\nDon't be late.\nWhat difference would it make if he went a day later?\nWhat a nerve if he's still with Veronica.\n- Boris!\n- Did Dad call?\nHe was furious.\nWhy didn't you tell anyone?\nSo that we didn't have any scenes like that.\nGet these prints back to the factory tomorrow.\n- Give them to Kuzmin, the engineer.\n- I will, don't worry\nWhat are you putting in there?\nI'm going out for a bottle of wine.\nGrandma, do me a favor.\nJust a minute...\n- Will they send you to the front?\n- Probably.\nHere, Grandma..\nWait.\nTomorrow when you get up, take this to her...\n- What is it?\n- Her birthday present.\nAnd help her.\nAfter all, it's war...\nPlease, be kind to her.\nAnd what if I die?\nYou don't have the right, especially now, with so many secrets to protect.\n- Well, suppose I do...\n- Come on...\nQuiet now, Grandma.\nThat's Veronica!\nNo, it's just Irina.\nThank heaven, you've come.\n- Boris!\n- Yes?\nCome over here.\nYou're 25 years old and you behave like a fool.\nWhat are we, children?\nWhat is it?\nAre we playing hide and seek?\nAre you starved for adventures?\nWhat kind of a man are you?\nWhere's Irina, and Mark?\nIrina is making coffee, Mark went out for wine.\nCoffee, wine...\nWhat kind of send-off is that?\nIrina!\nBring that thing from the medicine chest.\nBoris, come over here.\n- Where is Veronica?\n- She'll be here.\n- But where's she?\n- She's busy.\nShe's supposed to be here.\nHer fiance is going away.\nI'm not her fiance.\n- What are you then?\n- Just a friend...\n- That sounds suspicious...\n- I don't mean that way, Dad.\n- Then what do you mean?\n- Look, give me a break.\n- Here's the alcohol.\n- Have it diluted.\nI got some port wine.\nDrink it yourself.\nWe'll have a more robust drink.\nWell, are we all here?\nLet's sit down..\nIt's Veronica.\nAren't you going to welcome her, friend?\nAt last!\nIs Boris home?\nWe're from the factory.\nPlease, come in.\nI thought it was the fiancee..\n- We've come from the factory.\n- What about the presents?\n- Sorry.\nThis one's yours.\n- Yes...\nThank you.\nOn behalf of the Factory Committee....\nComrade Boris, you must fight to the last drop of your blood\nSmash the accursed fascists, and we, in the factory, will fulfil and overfulfil our quotas.\nWe've heard all that before.\nYou'd better join us and drink to my son, Boris.\nWell, I suppose... life in this world of ours is not yet what we would like it to be.\nNow you're going to war, Boris...\n- Let's drink.\n- To you.\nIrina!\nWhat about Grandma?\nWe saw my brother off last night.\nMy mother was crying...\n- What about you?\n- I was too.\n- On whose behalf, the committee's?\n- I wasn't thinking about that.\nThere's no one to see off in our family, we have 3 girls and Mom.\nIt's somewhat embarrassing...\nI feel left out...\nYes, and when they come back, you'll really envy us.\nThe trouble is, not all of them will be coming back.\nFor those who don't, a magnificent monument, with their names inscribed in gold.\nIrina, don't just sit there.\nFill the glasses.\nAnd you folks in the rear, fulfil and overfulfil!\nNow, Grandma, don't forget.\nMark, stay with Dad.\nHe'll be all right.\nI'll see you off.\nAbout face!\nPlatoon, forward march\nTake it, Grandma!\n- Boris!\n- Mamma!\n- I won't see him again.\n- I'm sorry, Mamma.\nDrink it.\nYou'll feel better.\n- Where are you going?\n- To the hospital.\nBut you aren't on call now.\nVarvara Kapitonovna, I've got to see Boris...\nHe's gone.\n- Gone?\nWhere?\n- To report for the Army.\n- Oh, no!\n- Come in.\n- Where was he supposed to report?\n- I don't know.\nWhat is it?\nIt's from Boris.\nFor your birthday.\nThere's a note inside..\n- Where's the note?\n- Why?\nIsn't it there?\nMaybe it fell?\nMaybe he forgot in a hurry.\n- Forgot?\n- He'll write to you.\nWhere were you?\n- Where's Boris gone?\n- It's the schoolyard near the park.\nCalm down, she'll be here.\nIt would be quite a job finding someone in this crowd.\nWhat are you doing?\nWrite to me.\nWrite every day.\nDidn't I tell you to ship the cauliflower?\nAn airplane is high above, Over the roofs it's droning.\nIt's my sweetheart sends his love From his sky-high soaring.\nIt was used to be before That he saw me to my door.\nNow it's been quite a turn-off:\nI'm the one to see him off!\nDon't forget to write your Army Post Office number.\n- Cheer up, pug-nose!\n- We'll wait till you come back.\nGoodbye, Boris!\nTake care!\nFall in!\nShe will come.\nBoris!\nBoris!\nDress!\nAttention!\nForward march!\nBoris!\nThat's my little chicken!\nBoris!\nBoris!\nGrandma...\nNothing?\nHe hasn't written to me either.\n- Any news?\n- No.\nOh, this damn war!\nWe'll have to keep going somehow.\nHave you decided about a job?\nI'm starting at the war factory tomorrow.\nAir-raid alert!\nHurry on to the subway.\nI've got to finish this.\nGet your things.\n- Where's the knapsack?\n- It's over there..\nI won't go without you.\nIf it gets bad, we'll run down.\nGo on, now.\nBe careful in the subway!\nShe's so frightened, poor thing.\nAren't you?\nWhen I know that Veronica's safe and you're with me,\nI'm not such a coward.\nThe filthy murderers!\nWe'll get back at you, you wait!\nHe's not writing to me.\nOh, he must have written.\nIt's just the mail.\nAll clear!\nThe air raid has been terminated.\nLet's go!\nHere's where I live now.\nIf you decide to work with us, call me at the factory.\n- I will.\n- Goodbye.\nGet down here!\nCome back!\nWhat's the matter?\nAre you crazy?\nI'm sorry.\nVeronica, you can stay with us from now on.\nYou can have Boris' room.\nMark will move in with Fedya...\nMark, she'll need some attention to keep her from brooding..\nIrina and I are so busy at the hospital.\nI'll do what I can, Uncle Fedya.\nI promised Boris.\n- Is it agreed?\n- Um-hmm.\nIs this the factory?\nMay I speak to Kuzmin?\nHe was drafted, too?\nExcuse me, has anyone heard from Boris Borozdin?\nIf it weren't for this damn war,\nI'd be playing this in the Tchaikovsky Hall.\nFor you.\nVeronica!\nLet's go to the subway.\n- I'm not going.\n- Don't be silly.\nCome on.\n- Are you afraid?\n- For you\nCome with me.\nI'm not afraid of anything.\n- Veronica, let's go to the subway!\n- No, I'm not going.\n- Stop it!\nYou've gone crazy!\n- I'm not going!\nI love you.\nNo.\n- I love you!\n- No!\nNo!\n- I love you!\n- Go away\n- I love you!\n- No!\nNo!\nNo!\nIt's stupid to get surrounded like this.\n- Stepan, quit whining.\n- Who's whining?\nI'm not.\nThe captain said we might be able to break out by tonight.\nYeah, that's what he says.\nSachkov!\nWhere'd you find that rookie?\nIn the incubator.\nHe's our reinforcements.\nNow we'll break through for sure.\nIs that a way to talk about a married soldier?\nI got yoked in my last year of school.\nThe result of too much of education.\nYou're funny.\nLaughed yourselves right into a trap, I guess.\n- Volodya, you really married?\n- I said it to sound important.\n- Borozdin!\n- Yes?\nYou'll go on a reconnaissance mission.\nYou got to find the best place for us to break through tonight.\n- Turn in your documents.\n- Yes, sir.\nHey, Sachkov!\nTake this, will you?\nWhy don't we rest?\nAnd have a smoke.\nIs she always laughing like that?\nShe probably thinks we're all dead.\nLet me see that beauty.\nHey, that's the soldier's life for you!\n- You're here, and she...\n- And she what?\nHey, let me try that thing.\n- Hold it, will you, Sachkov?\n- Certainly.\nNot bad for a first try.\nStop that!\n- Aren't you ashamed?\n- No, sir.\n- Five days under arrest!\n- Yes, sir.\n- You both go on a reconnaissance.\n- Why?\nTurn in your papers!\nBoris, here.\nOn account of her?\n- I'd say she was worth it.\n- She sure is!\nHowever, we must maintain discipline!\nYou hear that?\nDiscipline....\nStepan, keep this.\nBe careful, don't lose it.\nWe...\nWe'll get married, Uncle Fedya.\nOh, I forgot.\nThere's some sausage left.\n- Keep your head down!\n- Stop ordering around!\nLet's get out of here before they get wise.\n- If you're scared, run.\n- Come on, you idiot!\nHey!\nMusician!\nAre you deaf?\nWhy the devil I'v got tied up with him?\nWhat's wrong with you?\nCan you hear me?\n- Go on.\nI want to rest for a while.\n- Are you wounded?\nHold on to me.\n- Leave me alone.\n- I tell you, get up!\nNow hang on, hold tight.\nThis way's no good.\nI'll have to carry you.\nCome on, leave me here.\nAre you still sore because I punched you?\n- You were just lucky, otherwise...\n- Shut up, we'll talk later.\nHere we go...\nAre you all right?\nHold on, friend.\nIt's only a little way to the woods.\nWe'll be safe there.\nI'm winded.\nLet's rest a bit.\nIt's a little quieter here.\nHow are you?\nIt's hard to breathe.\nHold on, we'll have to get you married yet...\nHey, buddy!\nWhat's the matter with you?\nWhat's wrong?\nForgive me, friend, forgive me...\nIt's my fault...\nForgive me...\nfriend...\nHey, somebody!\nHelp!\nHelp!\nHelp!\nCan you hear me, Boris?\nAre you hit?\nIt's nothing, I am just...\nThe Soviet Information Bureau reports that there were no important changes on the front in the past 24 hours.\nNo news is good news.\nFamilies evacuated with Plant 326 will be quartered on Vosstaniya Street.\nComrades, report here, please.\n- Irina, help me with the wounded.\n- I'll get an orderly.\nEverybody off!\nSiberia!\nWe can't run much farther.\nPoor Mother Russia!\nAttention, please!\nChief of Army Hospital, Comrade Borozdin, please report to the military commandant at once..\nMaybe we'll find peace here at last.\nOut of the way, the evacuated.\nYour stove is smoking.\nOh, I'm sorry.\nSave your dreaming till the war is over.\nWhere are you going?\nTo the hospital.\nI'm on duty.\nShe wanders around like a ghost, all nerves.\nThe poor thing is waiting for a letter.\nFrom whom?\nHer husband's not up at the front like ours.\nShe's not waiting for any letter.\n- D'you have the 2nd shift at school?\n- Yes\nCranes like ships, Sailing up in the sky...\nI can't get those silly verses out of my head.\nThere she is!\n- Who?\n- The mail carrier.\nIf I can count up to 50, there'll be a letter for me.\n- One, two, three, four...\n- Stop it, Veronica.\n- Fifteen, sixteen...\n- Veronica, this is madness.\n- Nineteen, twenty...\n- Stop it!\nForty-seven, forty-eight...\n- Good morning!\n- Good morning!\nSorry, nothing for you.\nHere you are.\n- Lebedeva?\n- That's me.\n- Paliukaitis?\n- Nothing.\nFrom my eldest.\nFrom the Ukrainian Front.\nI didn't know Boris.\nBut everyone says what a fine, talented boy he was.\nWas?\nListed as missing in action doesn't mean he was killed.\nOf course not.\nI just didn't put it right.\n- What's wrong, Veronica?\n- I'm dying, Anna Mikhailovna.\nCome on, Veronica.\nYou poor child.\nI've lost everything.\nYou have your whole life before you.\nI don't want it!\nWhat's it good for?\nYou must forget the past.\nIt is human nature to forget.\nI don't want to forget.\nI don't need it.\nBut you can't go on tormenting yourself for your mistakes.\nI should do it.\nAll my life.\nYou teach history.\nYou're a wise woman.\nTell me what's the meaning of life?\nThe meaning of life?\nMaybe it's in...\n- Did Chernov get here yet?\n- Not yet.\nWow, I'm really famished!\nTry to be nice to Chernov when he comes, please.\nHe makes me ill.\nI feel exactly the same way, but after all he's my boss.\nThat gives you a reason to lick his boots?\nPlease, Veronica, this can't go on.\nYou're always so irritable, always criticizing.\nTell me, how can I make you happy?\nJust disappear.\nCome in, it's open.\nCome in!\nMark, pardon my invasion.\nNot at all.\nIt's a pleasure.\nHere, let me take that.\nDid you see the paper?\nThe Germans have advanced in the Caucasus.\nYes, it's awful.\nBut we'll show them what we're made of yet!\nPlease make yourself comfortable.\nIt's warm here.\nYour place is nice and cozy.\nMy wife and children are in Tashkent, so I'm kind of homeless.\n- Good day, Veronica.\n- Good day.\n- Where are you going, darling?\n- To the hospital.\nI'm on duty.\nBundle up.\nIt's very cold.\nI admire your wife.\nShe's so honest...\nShe must be very happy with you.\n- I was looking for you at the Philharmonic.\n- Was there a concert?\nNo.\nBut are you going to the birthday party tonight?\nI might.\n- What are you giving her?\n- What can I give her?\nThe war!\nYes, this war.\nIt's nothing gorgeous, of course, but tie a little trifle to it and Antonina will be pleased.\nIt's wonderful!\nWhat do I owe you?\n- It's really nothing, forget it.\n- Thank you very much.\nMark, can you do me a favor?\n- Is someone up there?\n- No.\nCould you get some drugs for me from Feodor Ivanovich?\nFine job, Irina.\nHe'll pull through.\nI hope so.\nIt would be downright mean of him not to.\nIrina, you should have been a man!\nI'm doing all right as a girl.\nVeronica!\nWhat are you doing here so early?\nThe clock was fast.\nPoor girl...\nI can't forgive her for what she did to Boris.\nNew patients again!\nI told them I have no more room.\nI'm running a hospital, not a barrel of herrings!\n- Are these from Kalach?\n- From Stalingrad.\nSome from the front line, others from the hospitals.\nNo place for us here, either.\nDon't worry, they'll find room.\nI'll take 80 men.\nThe rest will have to go to other hospitals.\nLet's see now...\nPlease give my regards to Sergei,\nFeodor, Vassily, Aunt Maria,\nAgraphyona, Catherine, Barbara,\nNikolai, Catherine...\n- You already said Catherine.\n- That's another one.\n- Don't you want to explain it?\n- They'll figure it out.\nSo, Zinaida, Antonina, Kuzma...\nNurse!\n- What do you want, Vorobyov?\n- Never mind.\nNurse!\n- He wants a potty.\n- I'll give it to him.\nThanks.\nThat's beautiful music!\nTurn it up a little louder, will you please?\nShut up your music!\nTurn it down!\nYou hear me?\nWho was that shouting?\nI did, so what?\n- Zakharov, what's wrong?\n- Leave me alone!\nHe's gone berserk.\nHe got bad news from home this morning.\nHis girl just got married to a friend of his, bitch.\nHe hasn't had a bite to eat.\nTry to see what you can do, nurse.?\nThose broads are worse than fascists, aiming right in the heart.\nYou must try to eat.\nIt's the only way to get well.\nI don't want to get well!\nI just want to croak!\nGet the doctor.\nCalm down.\nPlease, calm down.\nBecause of a woman...\nWhat a dumbbell!\nGet the doctor!\nGet the doctor now!\nQuit that yelling!\nCackling like a bunch of hens!\nWhere will they take us now?\nThere're plenty of hospitals in this wide world.\nGuys, the chief is coming!\nBastards!\nQuiet down!\nYou're a soldier in the Red Army!\nWant to desert it?\nYou afraid that if we cure you, you might go back in the army?\nYou're not being fair.\nHe got a bad letter from home.\nI know.\nThat's just an excuse.\nSo what if his girl's left him?\nGood riddance!\nShe's not worth a dime if she gave up a handsome soldier like this, a real hero, for a puny draft-dodger!\nRight.\nShe's the one who's missed her happiness!\nAnd whatever she's got, she deserves it!\nWhat a petty soul!\nCan a woman like that understand the suffering you've gone through?\nKilling her would be too good for her kind.\nYou stood the most difficult trial.\nYou looked death in the face, went to meet it yourself.\nAnd she couldn't stand the small test of time.\nFor women like that, no honorable man can have anything but contempt!\nFor such creatures there is no pardon!\nBandage him!\nAunt Sima, bring him fresh porridge and some hot tea.\nBe good now.\nVeronica...\nWhat the hell kind of a mother are you?\nKeep an eye on your kid!\nAnd I'll be held responsible!\nDaydreaming, you fool!\n- Who are you?\n- Mamma's boy.\n- Where are you from?\n- From Voroshilovgrad.\n- How old are you?\n- Three months and three years.\n- What's your name?\n- Boris.\n- What?\n- Boris.\n- Why the fancy get-up?\n- A concert in the hospital.\n- A likely story!\n- All right, all right.\n- Is Mark here?\n- So far yes.\nI've been saving this for you.\nThank you very much, Anna Mikhailovna.\nIt's for a little boy we know.\nIt's his birthday.\nI wish everyone were as kind- hearted as you are, Mark.\nThe symptomatology of this type of compound injury depends primarily on changes in the nodal structure...\n- Interesting, but beyond me.\n- Why, it's really quite simple.\nThey are not readily apparent to the clinical practitioner, but in most cases the etiology...\n- What is this?\n- What kind of a trick is that?\nWhat do you mean, trick?\nThe poor child lost his parents.\nI want my mommy!\nYou ought to have taken him to the Foundling Center.\nYou go yourself to the Center!\n- Rude child!\n- I'm not, you're rude!\nNow, don't cry.\nWe'll go find your mommy in Voroshilovgrad.\nNow, now, be quiet.\n- Poor baby, he wants his mommy.\n- Look, here comes a goat...\nStop rattling.\nYou're hurting my ears.\nHere, play with the cover.\nDon't you want it?\nOh, my God.\nHere's a bagel roll for you.\nKeep him quiet!\nHe's driving me crazy.\nIf we had some toys for him to play with...\nIrina, take him for a minute.\nHah, what next?\nStop crying, will you?\nLet me take him.\nCome on, my little one, my little Boris...\nI'll undress you and put you to bed...\nHave anyone seen my squirrel?\nYes, Mark took it.\n- Why?\n- He's giving it to some boy.\nMy squirrel to a boy?\n- Where's Mark?\n- I don't know.\n- Where's Mark?\n- I don't know.\nYou're hiding something from me.\nYou know where he's, don't you?\nWhere's he?\nHe's probably gone to Antonina's party.\n- What Antonina?\n- Why don't you ask Mark?\n- Who's she, tell me!\n- Don't order me around.\nMark visits her occasionally.\nDo you get it?\n- You're saying this to spite me.\n- Why would I want to?\nBecause I'm married, I'm loved, and you're still a spinster!\nStop it, Veronica!\nAntonina lives near the food shop, in the little house next door.\nGo over there and see for yourself.\nCalm down.\nI should do something.\nWhen Mark comes home, you'll have a talk.\nBut now you must wait.\nSure, I must wait...\nThat's all I've been doing all the time.\nThat's enough!\nMay our lips benumb.\nWords are futile.\nThey so often lie perchance.\nAnd only our eyes Will never dare lie,\nForever true their parting glance.\nMy eyes are now sad and dark,\nAs though therein a candle was put out...\nIn Leningrad after my parties we'd go for a ride, from one part of the city to the other.\nArrange for a ride now.\nThere's a war on, Antonina.\nCars are worth its weight in gold, the gasoline is strictly rationed.\nGet any kind of car!\nI beg you!\nA fire-engine, an ambulance, a truck... anything!\nLet me hope where there's hope no longer!\nJust the two of us?\nTo the point of full abandon?\nI'll see what I can do.\nI love you!\nSorry, I don't dance.\nI thought I'd tried everything, but I've never tried golden chestnuts.\nLook, a note!\n- It's a birthday note for me.\n- Congratulations!\nWhere's the squirrel?\nWhere's my squirrel?\nLook, you mustn't think that...\nThere's a note here from somebody named Boris.\nMy only one, happy birthday...\nOn this day you were born.\nIt's hard leaving you.\nBut it can't be helped.\nIt's war!\nI must go.\nWe can't go on living the way we did, enjoying ourselves while death stalks our land.\nWe will be happy some day.\nI love you, I trust you.\nYour Boris.\nWhy are you so alarmed?\nGo home.\nI'll be right back.\nWhy?\n- Take your coat off.\n- Thank you.\nYou know, all the Philharmonic cars are being used tonight, and I must have a car.\nYou're Chief Surgeon, you won't refuse me this little favor...\nTransportation is our most critical problem.\nIt was difficult for me too, but I did my best.\nI went out of my way, because you asked me...\n- What I asked you?\n- The exemption.\nNow it's about to expire, and this time to get it will be almost impossible.\n- What d'you mean, exemption?\n- The exemption for Mark.\nYou can be sure I handled the whole thing discreetly.\nCould Mark have done it without informing you?\nHe even offered me money in your name...\nI'm sorry.\nI'm glad you're here, Uncle Fedya.\nI wish you'd talk to her.\nShe burst in without being invited, started a fight...\nShut the door.\nDo you believe that anybody likes having his son marching off to war?\nWhat do you mean?\nOr do you believe that for your petty pleasures and well-being others must lose their arms, legs, eyes, jaws, even their lives?\nAnd you owe nothing to no one?\nYou know I've got an exemption, Uncle Fedya.\nTell us how you got this exemption.\nWhat are you doing, Veronica?\nIt's all right.\nI'm going to rent a room.\nAnd I'm taking the boy...\nPerhaps someone else had better rent a room?\nGladly.\nI've been wanting to for a long time.\nI wish you'd driven me out in the first place.\nYou've been through a terrible ordeal.\nOnly one who had done something worse could have condemned you.\nStay with us.\nI can't.\nI cannot hide behind someone else's back.\nI don't want to.\nThink it over.\nListen, where can I find the Borozdin family?\n- Which one are you looking for?\n- Feodor Ivanovich.\nHe is not in at the moment.\nAre you from Boris?\nNo, I'm by myself.\nI have to see Feodor Ivanovich.\n- Won't you sit down?\n- Thanks.\nFeodor Ivanovich should be here in a few minutes.\n- May I go out?\n- All right.\n- Is he yours?\n- Yes, he's mine.\nHe looks like you.\nAre you a relative of the Borozdins?\nNot really.\nWell, I've done all the fighting I'll ever do.\nGoing home?\nNot yet.\nLeningrad's still blockaded.\n- Yeah, I'm in a spot.\n- Why?\nI guess there's no harm in telling you because you're not the family.\nBut how do you tell a man his son was killed?\n- Where did it happen?\n- Near Smolensk.\nWhat do you want me to play?\nI don't care.\nTell me, did you see him buried?\nNo.\nI was put on a stretcher and taken to a hospital, and he was with a friend of his, Stepan.\nStepan...\nI've got to find his girl now.\nHe was really in love with her.\nI'm the girl.\nCome to see us when you're in Moscow, Volodya.\nThanks very much.\nI will.\nThe war's over.\nIt's strange, isn't it?\nAnd you're still waiting?\nI am.\nOne must always keep on hoping.\nWhat's the use of waiting?\nI saw it with my own eyes.\nWhat did you see?\nYou saw him wounded?\nYou saw him fall?\nYou didn't see him die.\nBut if he's alive, why hasn't he written to you?\nAnything could happen.\nStepan hasn't written to anyone either.\nThey know at the factory that he was in some Special Operations.\nDasha promised to let me know when he's back.\nBoris is alive.\nHe's alive.\nLook!\nThe victors are coming!\nKolia, darling, you're back!\nBoris!\nVeronica!\nStepan!\nThe flowers...\nFor you.\nWell?\nWhat?\nYou see...\nWell....\nMy darling!\nDear mothers, fathers, brothers and sisters!\nThe happiness of our reunion is boundless.\nThe heart of every Soviet citizen sings with joy, the joy of victory!\nWe have all waited for this happy moment.\nWe dreamed of it in the darkest hours of our struggle.\nBut we'll never forget those who lie silent on the battlefield\nYears will pass, our cities will rise again, and our wounds may one day be forgotten.\nLet one thing remain in our hearts, a cold hatred of war!\nWe deeply feel the grief of those who cannot meet their loved ones today.\nWe must all take a vow to keep our promise that sweethearts will never again be parted by war, that mothers may never again fear for their children that our brave fathers may not stealthily swallow their tears.\nWe have won and remained alive, not for destruction but to build a new life!\nDon't just stand there.\nGive the flowers to whoever they're for\nThank you very much, sister.\nOh, what a darling!\nWhat a chubby little darling!\nLook, the cranes are flying over Moscow!\nThe End\nUploaded by George M\nMOSFILM\nWait, Squirrel!\nHere, put it on.\nLook!\nCranes like ships Sailing up in the sky,\nWhite ones and grey ones, With long beaks, they fly!\nLook!\nYou see...\nYou with your \"cranes like ships\".\nTHE CRANES ARE FLYING\nWritten by V. ROZOV\nDirected by M. KALATOZOV\nDirector of Photography S. URUSEVSKY\nAssociate Director\n- B. FRIDMAN Production Designer\n- Y. SVIDETELEV\nMusic by M. VAINBERG Sound by I. MAYOROV\nEnglish subtitles by T. KAMENEVA\nStarring\nT. SAMOILOVA as Veronica A. BATALOV as Boris\nV. MERKURIEV as Feodor Ivanovich\nA. SHVORIN as Mark S. KHARITONOVA as Irina\nK. NIKITIN as Volodya V. ZUBKOV as Stepan\nA. BOGDANOVA as Grandma B. KOKOVKIN as Chernov\nYe.\nKUPRIANOVA as Anna Mikhailovna\nAn Order of Lenin Film Studio \"Mosfilm\" production, 1957\nWho is there?\nWait!\nWell, all right.\nSay when, then.\nThursday, on the embankment.\nCome on, that's too long.\nSquirrel!\nYou haven't told me when!\nSquirrel, at what time?\nWhat time on Thursday?\nNo, I can't make it.\nI'll be working.\n- All right.\n- Don't be late.\nSquirrel!\n- She's gone crazy over him.\n- And he's over her.\nThat's love, my dear.\nA harmless mental disturbance.\nGrandma, why aren't you asleep?\nBecause it's time to get up, Boris!\nStop chomping!\nRunning around all night...\nAre you jealous?\nYou haven't torn it, have you?\nYour jacket's all right.\nOutrageous!\nIt's noon and he's still in bed.\nThe boy deserves a good rest on Sunday.\nHe works hard.\nThat work of his will result in a marriage.\nThat's when you'll be really jealous.\nFor Irina, her diploma comes first.\nLook out, Uncle Fedya.\nShe'll be a full professor soon, while you're still only a MD.\nIf children don't surpass their parents, then the children are fools and the parents are no better.\nThanks, Mamma.\nThis is Radio Moscow broadcasting over all of the Soviet Union!\n- What is it?\n- What has happened?\nBoris!\nWe're at war!\nDo you hear?\nWe're at war!\nLeave me alone!\nHi!\nBoris is working day and night.\nAre you waiting for him?\nI'm not waiting for anyone.\nVeronica!\nIn time of war, one should not get confused.\nOne should hold on to a normal life pace.\nTake me.\nI dream of dedicating to you my first symphony.\nWill you come to the concert?\nSuppose the Army calls you up?\nThe Army?\nI doubt it.\nHardly.\nWhy \"hardly\"?\nThe most talented ones will be exempted.\n- Are you the most talented one?\n- Me?\nCertainly.\nWhy are you following me around?\nAren't you ashamed?\nI am.\nI tried to keep away from you.\nI know, Boris is my cousin.\nBut I can't help myself!\nWait!\n- Wait!\n- I'm going home alone.\nHey, slow down!\nYou just had an operation.\nI'd better be in shape for that field-pack.\nThey're not wasting men like you in the Army.\nThere'll only be one exemption here, and one of us'll get it.\nThey'd better give it to you.\nYou've got knowledge, experience.\nAnd you've got talent.\nSave your sketches.\nMy wife's already got my bag packed.\nWell, as they say, let's get our bayonets ready.\nHey, Stepan!\nGuys, give me a hand...\nStepan!\nExcuse me, Sachkov.\n- Where's the summons?\n- Not yet.\nI can't wait.\n- Are you off now?\n- No, I've got those sketches...\n- I see.\nTake care.\n- Okay.\n- Hey!\n- Yeah?\n- Have you told her?\n- No, it's too early...\n- You're right.\nSee you tomorrow.\n- Right.\n- Let go.\n- I won't.\n- You're going to fall down.\n- No, I won't.\n- You'll rip up the blackout.\n- It's a blanket.\nI'm going to call the militia.\nI'm sick of the blackout.\nGive me the blanket.\n- Let go.\nYou'll fall.\n- No, I won't.\nCome on, Squirrel, cut it out.\nLet me hang this up.\nYou didn't come to the embankment today, but Mark did.\n- He's very handsome.\n- So what?\n- Aren't you jealous?\n- What?\n- Aren't you jealous?\n- I haven't got the time for it.\nI won't have much time either when I go to the architecture college.\nYou'll never pass the entrance exams.\n- I will!\n- I doubt it.\nCranes like ships Sailing up in the sky,\nWhite ones and grey ones, With long beaks, they fly.\n- Do you like my song?\n- Very profound.\nOh frogs, you keep on croaking, Why didn't you think of looking up?\nYou went on leaping, in mud soaking That's why you ended eaten up.\n- All right, you won, hero.\n- I won, I won!\nI won.\nAll right.\n- D'you think you'll be drafted?\n- Sure.\n- You won't volunteer?\n- I might.\nWhy not?\nNo, you won't!\nI won't let you.\nYou know you'll get an exemption.\nThat's why you talk so big.\n- Why do you think so?\n- Everyone smart will be exempted.\nThen the only ones to do the fighting will be the fools.\nI don't want to talk to you ever again.\nVeronica, there's something I must tell you.\nI don't want to hear it.\nAnd, please, don't call me Veronica.\n- Who am I?\n- Squirrel.\nListen...\n- What will you give me tomorrow?\n- It's a secret.\nIf you give me something sweet, I'll eat it up and forget about it.\nGive me something to remember you with.\nKiss me now.\nWhen I'm with you, I'm not afraid of anything.\nNot even the war.\nThough, I'm afraid of the militia.\n- Veronica...\n- You know what?\n- Do you know?\n- No.\nI'll have a beautiful white dress made for our wedding.\nOne like my grandmother had.\nAnd a veil...\nVery long and white.\nAnd you should wear your dark suit.\n- And you and I will go...\n- To a registry office.\n- Is it a deal?\n- It's a deal.\n- You know I like this blackout.\n- What's so good about it?\nHi!\n- Stepan!\n- Veronica!\n- I've got a treat for both of you.\n- Fine.\n- What is it?\n- It's a secret.\n- Has it arrived?\n- Yes, this morning.\n- Why didn't you say so?\nTell me.\n- Well, go on.\nYou should've seen what's going on over at the factory.\nMake it short, will you?\nI'm telling you:\nthere's so much excitement...\n- Never mind that.\n- Your folks told me...\n- When do we report?\n- Today at 5:30.\nLook at those cherries!\nIs anything wrong?\n- They're nice!\n- Army orders.\n- No!\nFor you?\n- Me too.\nWe both volunteered...\nWhen?\n- You volunteered?\n- It's army orders.\nWait!\nWhat about us?\nStepan...\nNo, I've got to go.\nMy folks are going to...\nSo long.\nSquirrel!\nI didn't want to tell you before your birthday.\n- And now I have to go.\n- Of course.\nBoris!\nSquirrel, what is this?\nWhite cranes flying...\nI like that.\nI'm going to be all right.\nDo you hear?\nAnd after that we'll live together...\na hundred years.\nGo on now.\nWe'll say goodbye later.\nDon't be late.\nWhat difference would it make if he went a day later?\nWhat a nerve if he's still with Veronica.\n- Boris!\n- Did Dad call?\nHe was furious.\nWhy didn't you tell anyone?\nSo that we didn't have any scenes like that.\nGet these prints back to the factory tomorrow.\n- Give them to Kuzmin, the engineer.\n- I will, don't worry.\nWhat are you putting in there?\nI'm going out for a bottle of wine.\nGrandma, do me a favor.\nJust a minute...\n- Will they send you to the front?\n- Probably.\nHere, Grandma...\nWait.\nTomorrow when you get up, take this to her...\n- What is it?\n- Her birthday present.\nAnd help her.\nAfter all, it's war...\nPlease, be kind to her.\nAnd what if I die?\nYou don't have the right, especially now, with so many secrets to protect.\n- Well, suppose I do...\n- Come on...\nQuiet now, Grandma.\nThat's Veronica!\nNo, it's just Irina.\nThank heaven, you've come.\n- Boris!\n- Yes?\nCome over here.\nYou're 25 years old and you behave like a fool.\nWhat are we, children?\nWhat is it?\nAre we playing hide and seek?\nAre you starved for adventures?\nWhat kind of a man are you?\nWhere's Irina, and Mark?\nIrina is making coffee, Mark went out for wine.\nCoffee, wine...\nWhat kind of send-off is that?\nIrina!\nBring that thing from the medicine chest.\nBoris, come over here.\n- Where is Veronica?\n- She'll be here.\n- But where's she?\n- She's busy.\nShe's supposed to be here.\nHer fiance is going away.\nI'm not her fiance.\n- What are you then?\n- Just a friend...\n- That sounds suspicious...\n- I don't mean that way, Dad.\n- Then what do you mean?\n- Look, give me a break.\n- Here's the alcohol.\n- Have it diluted.\nI got some port wine.\nDrink it yourself.\nWe'll have a more robust drink.\nWell, are we all here?\nLet's sit down.\nIt's Veronica.\nAren't you going to welcome her, friend?\nAt last!\nIs Boris home?\nWe're from the factory.\nPlease, come in.\nI thought it was the fiancee.\n- We've come from the factory.\n- What about the presents?\n- Sorry.\nThis one's yours.\n- Yes...\nThank you.\nOn behalf of the Factory Committee...\nComrade Boris, you must fight to the last drop of your blood.\nSmash the accursed fascists, and we, in the factory, will fulfil and overfulfil our quotas.\nWe've heard all that before.\nYou'd better join us and drink to my son, Boris.\nWell, I suppose... life in this world of ours is not yet what we would like it to be.\nNow you're going to war, Boris...\n- Let's drink.\n- To you.\nIrina!\nWhat about Grandma?\nWe saw my brother off last night.\nMy mother was crying...\n- What about you?\n- I was too.\n- On whose behalf, the committee's?\n- I wasn't thinking about that.\nThere's no one to see off in our family, we have 3 girls and Mom.\nIt's somewhat embarrassing...\nI feel left out...\nYes, and when they come back, you'll really envy us.\nThe trouble is, not all of them will be coming back.\nFor those who don't, a magnificent monument, with their names inscribed in gold.\nIrina, don't just sit there.\nFill the glasses.\nAnd you folks in the rear, fulfil and overfulfil!\nNow, Grandma, don't forget.\nMark, stay with Dad.\nHe'll be all right.\nI'll see you off.\nAbout face!\nPlatoon, forward march!\nTake it, Grandma!\n- Boris!\n- Mamma!\n- I won't see him again.\n- I'm sorry, Mamma.\nDrink it.\nYou'll feel better.\n- Where are you going?\n- To the hospital.\nBut you aren't on call now.\nVarvara Kapitonovna, I've got to see Boris...\nHe's gone.\n- Gone?\nWhere?\n- To report for the Army.\n- Oh, no!\n- Come in.\n- Where was he supposed to report?\n- I don't know.\nWhat is it?\nIt's from Boris.\nFor your birthday.\nThere's a note inside.\n- Where's the note?\n- Why?\nIsn't it there?\nMaybe it fell?\nMaybe he forgot in a hurry.\n- Forgot?\n- He'll write to you.\nWhere were you?\n- Where's Boris gone?\n- It's the schoolyard near the park.\nCalm down, she'll be here.\nIt would be quite a job finding someone in this crowd.\nWhat are you doing?\nWrite to me.\nWrite every day.\nDidn't I tell you to ship the cauliflower?\nAn airplane is high above, Over the roofs it's droning.\nIt's my sweetheart sends his love From his sky-high soaring.\nIt was used to be before That he saw me to my door.\nNow it's been quite a turn-off:\nI'm the one to see him off!\nDon't forget to write your Army Post Office number.\n- Cheer up, pug-nose!\n- We'll wait till you come back.\nGoodbye, Boris!\nTake care!\nFall in!\nShe will come.\nBoris!\nBoris!\nDress!\nAttention!\nForward march!\nBoris!\nThat's my little chicken!\nBoris!\nBoris!\nGrandma...\nNothing?\nHe hasn't written to me either.\n- Any news?\n- No.\nOh, this damn war!\nWe'll have to keep going somehow.\nHave you decided about a job?\nI'm starting at the war factory tomorrow.\nAir-raid alert!\nHurry on to the subway.\nI've got to finish this.\nGet your things.\n- Where's the knapsack?\n- It's over there.\nI won't go without you.\nIf it gets bad, we'll run down.\nGo on, now.\nBe careful in the subway!\nShe's so frightened, poor thing.\nAren't you?\nWhen I know that Veronica's safe and you're with me,\nI'm not such a coward.\nThe filthy murderers!\nWe'll get back at you, you wait!\nHe's not writing to me.\nOh, he must have written.\nIt's just the mail.\nAll clear!\nThe air raid has been terminated.\nLet's go!\nHere's where I live now.\nIf you decide to work with us, call me at the factory.\n- I will.\n- Goodbye.\nGet down here!\nCome back!\nWhat's the matter?\nAre you crazy?\nI'm sorry.\nVeronica, you can stay with us from now on.\nYou can have Boris' room.\nMark will move in with Fedya...\nMark, she'll need some attention to keep her from brooding.\nIrina and I are so busy at the hospital.\nI'll do what I can, Uncle Fedya.\nI promised Boris.\n- Is it agreed?\n- Um-hmm.\nIs this the factory?\nMay I speak to Kuzmin?\nHe was drafted, too?\nExcuse me, has anyone heard from Boris Borozdin?\nIf it weren't for this damn war,\nI'd be playing this in the Tchaikovsky Hall.\nFor you.\nVeronica!\nLet's go to the subway.\n- I'm not going.\n- Don't be silly.\nCome on.\n- Are you afraid?\n- For you.\nCome with me.\nI'm not afraid of anything.\n- Veronica, let's go to the subway!\n- No, I'm not going.\n- Stop it!\nYou've gone crazy!\n- I'm not going!\nI love you.\nNo.\n- I love you!\n- No!\nNo!\n- I love you!\n- Go away!\n- I love you!\n- No!\nNo!\nNo!\nIt's stupid to get surrounded like this.\n- Stepan, quit whining.\n- Who's whining?\nI'm not.\nThe captain said we might be able to break out by tonight.\nYeah, that's what he says.\nSachkov!\nWhere'd you find that rookie?\nIn the incubator.\nHe's our reinforcements.\nNow we'll break through for sure.\nIs that a way to talk about a married soldier?\nI got yoked in my last year of school.\nThe result of too much of education.\nYou're funny.\nLaughed yourselves right into a trap, I guess.\n- Volodya, you really married?\n- I said it to sound important.\n- Borozdin!\n- Yes?\nYou'll go on a reconnaissance mission.\nYou got to find the best place for us to break through tonight.\n- Turn in your documents.\n- Yes, sir.\nHey, Sachkov!\nTake this, will you?\nWhy don't we rest?\nAnd have a smoke.\nIs she always laughing like that?\nShe probably thinks we're all dead.\nLet me see that beauty.\nHey, that's the soldier's life for you!\n- You're here, and she...\n- And she what?\nHey, let me try that thing.\n- Hold it, will you, Sachkov?\n- Certainly.\nNot bad for a first try.\nStop that!\n- Aren't you ashamed?\n- No, sir.\n- Five days under arrest!\n- Yes, sir.\n- You both go on a reconnaissance.\n- Why?\nTurn in your papers!\nBoris, here.\nOn account of her?\n- I'd say she was worth it.\n- She sure is!\nHowever, we must maintain discipline!\nYou hear that?\nDiscipline...\nStepan, keep this.\nBe careful, don't lose it.\nWe...\nWe'll get married, Uncle Fedya.\nOh, I forgot.\nThere's some sausage left.\n- Keep your head down!\n- Stop ordering around!\nLet's get out of here before they get wise.\n- If you're scared, run.\n- Come on, you idiot!\nHey!\nMusician!\nAre you deaf?\nWhy the devil I'v got tied up with him?\nWhat's wrong with you?\nCan you hear me?\n- Go on.\nI want to rest for a while.\n- Are you wounded?\nHold on to me.\n- Leave me alone.\n- I tell you, get up!\nNow hang on, hold tight.\nThis way's no good.\nI'll have to carry you.\nCome on, leave me here.\nAre you still sore because I punched you?\n- You were just lucky, otherwise...\n- Shut up, we'll talk later.\nHere we go...\nAre you all right?\nHold on, friend.\nIt's only a little way to the woods.\nWe'll be safe there.\nI'm winded.\nLet's rest a bit.\nIt's a little quieter here.\nHow are you?\nIt's hard to breathe.\nHold on, we'll have to get you married yet...\nHey, buddy!\nWhat's the matter with you?\nWhat's wrong?\nForgive me, friend, forgive me...\nIt's my fault...\nForgive me...\nfriend...\nHey, somebody!\nHelp!\nHelp!\nHelp!\nCan you hear me, Boris?\nAre you hit?\nIt's nothing, I am just...\nThe Soviet Information Bureau reports that there were no important changes on the front in the past 24 hours.\nNo news is good news.\nFamilies evacuated with Plant 326 will be quartered on Vosstaniya Street.\nComrades, report here, please.\n- Irina, help me with the wounded.\n- I'll get an orderly.\nEverybody off!\nSiberia!\nWe can't run much farther.\nPoor Mother Russia!\nAttention, please!\nChief of Army Hospital, Comrade Borozdin, please report to the military commandant at once.\nMaybe we'll find peace here at last.\nOut of the way, the evacuated.\nYour stove is smoking.\nOh, I'm sorry.\nSave your dreaming till the war is over.\nWhere are you going?\nTo the hospital.\nI'm on duty.\nShe wanders around like a ghost, all nerves.\nThe poor thing is waiting for a letter.\nFrom whom?\nHer husband's not up at the front like ours.\nShe's not waiting for any letter.\n- D'you have the 2nd shift at school?\n- Yes.\nCranes like ships, Sailing up in the sky...\nI can't get those silly verses out of my head.\nThere she is!\n- Who?\n- The mail carrier.\nIf I can count up to 50, there'll be a letter for me.\n- One, two, three, four...\n- Stop it, Veronica.\n- Fifteen, sixteen...\n- Veronica, this is madness.\n- Nineteen, twenty...\n- Stop it!\nForty-seven, forty-eight...\n- Good morning!\n- Good morning!\nSorry, nothing for you.\nHere you are.\n- Lebedeva?\n- That's me.\n- Paliukaitis?\n- Nothing.\nFrom my eldest.\nFrom the Ukrainian Front.\nI didn't know Boris.\nBut everyone says what a fine, talented boy he was.\nWas?\nListed as missing in action doesn't mean he was killed.\nOf course not.\nI just didn't put it right.\n- What's wrong, Veronica?\n- I'm dying, Anna Mikhailovna.\nCome on, Veronica.\nYou poor child.\nI've lost everything.\nYou have your whole life before you.\nI don't want it!\nWhat's it good for?\nYou must forget the past.\nIt is human nature to forget.\nI don't want to forget.\nI don't need it.\nBut you can't go on tormenting yourself for your mistakes.\nI should do it.\nAll my life.\nYou teach history.\nYou're a wise woman.\nTell me what's the meaning of life?\nThe meaning of life?\nMaybe it's in...\n- Did Chernov get here yet?\n- Not yet.\nWow, I'm really famished!\nTry to be nice to Chernov when he comes, please.\nHe makes me ill.\nI feel exactly the same way, but after all he's my boss.\nThat gives you a reason to lick his boots?\nPlease, Veronica, this can't go on.\nYou're always so irritable, always criticizing.\nTell me, how can I make you happy?\nJust disappear.\nCome in, it's open.\nCome in!\nMark, pardon my invasion.\nNot at all.\nIt's a pleasure.\nHere, let me take that.\nDid you see the paper?\nThe Germans have advanced in the Caucasus.\nYes, it's awful.\nBut we'll show them what we're made of yet!\nPlease make yourself comfortable.\nIt's warm here.\nYour place is nice and cozy.\nMy wife and children are in Tashkent, so I'm kind of homeless.\n- Good day, Veronica.\n- Good day.\n- Where are you going, darling?\n- To the hospital.\nI'm on duty.\nBundle up.\nIt's very cold.\nI admire your wife.\nShe's so honest...\nShe must be very happy with you.\n- I was looking for you at the Philharmonic.\n- Was there a concert?\nNo.\nBut are you going to the birthday party tonight?\nI might.\n- What are you giving her?\n- What can I give her?\nThe war!\nYes, this war.\nIt's nothing gorgeous, of course, but tie a little trifle to it and Antonina will be pleased.\nIt's wonderful!\nWhat do I owe you?\n- It's really nothing, forget it.\n- Thank you very much.\nMark, can you do me a favor?\n- Is someone up there?\n- No.\nCould you get some drugs for me from Feodor Ivanovich?\nFine job, Irina.\nHe'll pull through.\nI hope so.\nIt would be downright mean of him not to.\nIrina, you should have been a man!\nI'm doing all right as a girl.\nVeronica!\nWhat are you doing here so early?\nThe clock was fast.\nPoor girl...\nI can't forgive her for what she did to Boris.\nNew patients again!\nI told them I have no more room.\nI'm running a hospital, not a barrel of herrings!\n- Are these from Kalach?\n- From Stalingrad.\nSome from the front line, others from the hospitals.\nNo place for us here, either.\nDon't worry, they'll find room.\nI'll take 80 men.\nThe rest will have to go to other hospitals.\nLet's see now...\nPlease give my regards to Sergei,\nFeodor, Vassily, Aunt Maria,\nAgraphyona, Catherine, Barbara,\nNikolai, Catherine...\n- You already said Catherine.\n- That's another one.\n- Don't you want to explain it?\n- They'll figure it out.\nSo, Zinaida, Antonina, Kuzma...\nNurse!\n- What do you want, Vorobyov?\n- Never mind.\nNurse!\n- He wants a potty.\n- I'll give it to him.\nThanks.\nThat's beautiful music!\nTurn it up a little louder, will you please?\nShut up your music!\nTurn it down!\nYou hear me?\nWho was that shouting?\nI did, so what?\n- Zakharov, what's wrong?\n- Leave ma alone!\nHe's gone berserk.\nHe got bad news from home this morning.\nHis girl just got married to a friend of his, bitch.\nHe hasn't had a bite to eat.\nTry to see what you can do, nurse.\nThose broads are worse than fascists, aiming right in the heart.\nYou must try to eat.\nIt's the only way to get well.\nI don't want to get well!\nI just want to croak!\nGet the doctor.\nCalm down.\nPlease, calm down.\nBecause of a woman...\nWhat a dumbbell!\nGet the doctor!\nGet the doctor now!\nQuit that yelling!\nCackling like a bunch of hens!\nWhere will they take us now?\nThere're plenty of hospitals in this wide world.\nGuys, the chief is coming!\nBastards!\nQuiet down!\nYou're a soldier in the Red Army!\nWant to desert it?\nYou afraid that if we cure you, you might go back in the army?\nYou're not being fair.\nHe got a bad letter from home.\nI know.\nThat's just an excuse.\nSo what if his girl's left him?\nGood riddance!\nShe's not worth a dime if she gave up a handsome soldier like this, a real hero, for a puny draft-dodger!\nRight.\nShe's the one who's missed her happiness!\nAnd whatever she's got, she deserves it!\nWhat a petty soul!\nCan a woman like that understand the suffering you've gone through?\nKilling her would be too good for her kind.\nYou stood the most difficult trial.\nYou looked death in the face, went to meet it yourself.\nAnd she couldn't stand the small test of time.\nFor women like that, no honorable man can have anything but contempt!\nFor such creatures there is no pardon!\nBandage him!\nAunt Sima, bring him fresh porridge and some hot tea.\nBe good now.\nVeronica...\nWhat the hell kind of a mother are you?\nKeep an eye on your kid!\nAnd I'll be held responsible!\nDaydreaming, you fool!\n- Who are you?\n- Mamma's boy.\n- Where are you from?\n- From Voroshilovgrad.\n- How old are you?\n- Three months and three years.\n- What's your name?\n- Boris.\n- What?\n- Boris.\n- Why the fancy get-up?\n- A concert in the hospital.\n- A likely story!\n- All right, all right.\n- Is Mark here?\n- So far yes.\nI've been saving this for you.\nThank you very much, Anna Mikhailovna.\nIt's for a little boy we know.\nIt's his birthday.\nI wish everyone were as kind- hearted as you are, Mark.\nThe symptomatology of this type of compound injury depends primarily on changes in the nodal structure...\n- Interesting, but beyond me.\n- Why, it's really quite simple.\nThey are not readily apparent to the clinical practitioner, but in most cases the etiology...\n- What is this?\n- What kind of a trick is that?\nWhat do you mean, trick?\nThe poor child lost his parents.\nI want my mommy!\nYou ought to have taken him to the Foundling Center.\nYou go yourself to the Center!\n- Rude child!\n- I'm not, you're rude!\nNow, don't cry.\nWe'll go find your mommy in Voroshilovgrad.\nNow, now, be quiet.\n- Poor baby, he wants his mommy.\n- Look, here comes a goat...\nStop rattling.\nYou're hurting my ears.\nHere, play with the cover.\nDon't you want it?\nOh, my God.\nHere's a bagel roll for you.\nKeep him quiet!\nHe's driving me crazy.\nIf we had some toys for him to play with...\nIrina, take him for a minute.\nHah, what next?\nStop crying, will you?\nLet me take him.\nCome on, my little one, my little Boris...\nI'll undress you and put you to bed...\nHave anyone seen my squirrel?\nYes, Mark took it.\n- Why?\n- He's giving it to some boy.\nMy squirrel to a boy?\n- Where's Mark?\n- I don't know.\n- Where's Mark?\n- I don't know.\nYou're hiding something from me.\nYou know where he's, don't you?\nWhere's he?\nHe's probably gone to Antonina's party.\n- What Antonina?\n- Why don't you ask Mark?\n- Who's she, tell me!\n- Don't order me around.\nMark visits her occasionally.\nDo you get it?\n- You're saying this to spite me.\n- Why would I want to?\nBecause I'm married, I'm loved, and you're still a spinster!\nStop it, Veronica!\nAntonina lives near the food shop, in the little house next door.\nGo over there and see for yourself.\nCalm down.\nI should do something.\nWhen Mark comes home, you'll have a talk.\nBut now you must wait.\nSure, I must wait...\nThat's all I've been doing all the time.\nThat's enough!\nMay our lips benumb.\nWords are futile.\nThey so often lie perchance.\nAnd only our eyes Will never dare lie,\nForever true their parting glance.\nMy eyes are now sad and dark,\nAs though therein a candle was put out...\nIn Leningrad after my parties we'd go for a ride, from one part of the city to the other.\nArrange for a ride now.\nThere's a war on, Antonina.\nCars are worth its weight in gold, the gasoline is strictly rationed.\nGet any kind of car!\nI beg you!\nA fire-engine, an ambulance, a truck... anything!\nLet me hope where there's hope no longer!\nJust the two of us?\nTo the point of full abandon?\nI'll see what I can do.\nI love you!\nSorry, I don't dance.\nI thought I'd tried everything, but I've never tried golden chestnuts.\nLook, a note!\n- It's a birthday note for me.\n- Congratulations!\nWhere's the squirrel?\nWhere's my squirrel?\nLook, you mustn't think that...\nThere's a note here from somebody named Boris.\nMy only one, happy birthday...\nOn this day you were born.\nIt's hard leaving you.\nBut it can't be helped.\nIt's war!\nI must go.\nWe can't go on living the way we did, enjoying ourselves while death stalks our land.\nWe will be happy some day.\nI love you, I trust you.\nYour Boris.\nWhy are you so alarmed?\nGo home.\nI'll be right back.\nWhy?\n- Take your coat off.\n- Thank you.\nYou know, all the Philharmonic cars are being used tonight, and I must have a car.\nYou're Chief Surgeon, you won't refuse me this little favor...\nTransportation is our most critical problem.\nIt was difficult for me too, but I did my best.\nI went out of my way, because you asked me...\n- What I asked you?\n- The exemption.\nNow it's about to expire, and this time to get it will be almost impossible.\n- What d'you mean, exemption?\n- The exemption for Mark.\nYou can be sure I handled the whole thing discreetly.\nCould Mark have done it without informing you?\nHe even offered me money in your name...\nI'm sorry.\nI'm glad you're here, Uncle Fedya.\nI wish you'd talk to her.\nShe burst in without being invited, started a fight...\nShut the door.\nDo you believe that anybody likes having his son marching off to war?\nWhat do you mean?\nOr do you believe that for your petty pleasures and well-being others must lose their arms, legs, eyes, jaws, even their lives?\nAnd you owe nothing to no one?\nYou know I've got an exemption, Uncle Fedya.\nTell us how you got this exemption.\nWhat are you doing, Veronica?\nIt's all right.\nI'm going to rent a room.\nAnd I'm taking the boy...\nPerhaps someone else had better rent a room?\nGladly.\nI've been wanting to for a long time.\nI wish you'd driven me out in the first place.\nYou've been through a terrible ordeal.\nOnly one who had done something worse could have condemned you.\nStay with us.\nI can't.\nI cannot hide behind someone else's back.\nI don't want to.\nThink it over.\nListen, where can I find the Borozdin family?\n- Which one are you looking for?\n- Feodor Ivanovich.\nHe is not in at the moment.\nAre you from Boris?\nNo, I'm by myself.\nI have to see Feodor Ivanovich.\n- Won't you sit down?\n- Thanks.\nFeodor Ivanovich should be here in a few minutes.\n- May I go out?\n- All right.\n- Is he yours?\n- Yes, he's mine.\nHe looks like you.\nAre you a relative of the Borozdins?\nNot really.\nWell, I've done all the fighting I'll ever do.\nGoing home?\nNot yet.\nLeningrad's still blockaded.\n- Yeah, I'm in a spot.\n- Why?\nI guess there's no harm in telling you because you're not the family.\nBut how do you tell a man his son was killed?\n- Where did it happen?\n- Near Smolensk.\nWhat do you want me to play?\nI don't care.\nTell me, did you see him buried?\nNo.\nI was put on a stretcher and taken to a hospital, and he was with a friend of his, Stepan.\nStepan...\nI've got to find his girl now.\nHe was really in love with her.\nI'm the girl.\nCome to see us when you're in Moscow, Volodya.\nThanks very much.\nI will.\nThe war's over.\nIt's strange, isn't it?\nAnd you're still waiting?\nI am.\nOne must always keep on hoping.\nWhat's the use of waiting?\nI saw it with my own eyes.\nWhat did you see?\nYou saw him wounded?\nYou saw him fall?\nYou didn't see him die.\nBut if he's alive, why hasn't he written to you?\nAnything could happen.\nStepan hasn't written to anyone either.\nThey know at the factory that he was in some Special Operations.\nDasha promised to let me know when he's back.\nBoris is alive.\nHe's alive.\nLook!\nThe victors are coming!\nKolia, darling, you're back!\nBoris!\nVeronica!\nStepan!\nThe flowers...\nFor you.\nWell?\nWhat?\nYou see...\nWell...\nMy darling!\nDear mothers, fathers, brothers and sisters!\nThe happiness of our reunion is boundless.\nThe heart of every Soviet citizen sings with joy, the joy of victory!\nWe have all waited for this happy moment.\nWe dreamed of it in the darkest hours of our struggle.\nBut we'll never forget those who lie silent on the battlefield.\nYears will pass, our cities will rise again, and our wounds may one day be forgotten.\nLet one thing remain in our hearts, a cold hatred of war!\nWe deeply feel the grief of those who cannot meet their loved ones today.\nWe must all take a vow to keep our promise that sweethearts will never again be parted by war, that mothers may never again fear for their children, that our brave fathers may not stealthily swallow their tears.\nWe have won and remained alive, not for destruction but to build a new life!\nDon't just stand there.\nGive the flowers to whoever they're for.\nThank you very much, sister.\nOh, what a darling!\nWhat a chubby little darling!\nLook, the cranes are flying over Moscow!\nThe End\nWait, Squirrel!\nHere, put it on.\nLook!\nCranes like ships sailing up in the sky,\nWhite ones and grey ones, with long beaks, they fly!\nLook!\nYou see...\nYou with your \"cranes like ships\".\nTHE CRANES ARE FLYING\nWritten by V. ROZOV\nDirected by M. KALATOZOV\nAn Order of Lenin Film Studio \"Mosfilm\" production, 1957\nWho is there?\nWait!\nWell, all right.\nSay when, then.\nThursday, on the embankment.\nCome on, that's too long.\nSquirrel!\nYou haven't told me when!\nSquirrel, at what time?\nWhat time on Thursday?\nNo, I can't make it.\nI'll be working.\n- All right.\n- Don't be late.\nSquirrel!\n- She's gone crazy over him.\n- And he's over her.\nThat's love, my dear.\nA harmless mental disturbance.\nGrandma, why aren't you asleep?\nBecause it's time to get up, Boris!\nStop chomping!\nRunning around all night...\nAre you jealous?\nYou haven't torn it, have you?\nYour jacket's all right.\nOutrageous!\nIt's noon and he's still in bed.\nThe boy deserves a good rest on Sunday.\nHe works hard.\nThat work of his will result in a marriage.\nThat's when you'll be really jealous.\nFor Irina, her diploma comes first.\nLook out, Uncle Fedya.\nShe'll be a full professor soon, while you're still only a MD.\nIf children don't surpass their parents, then the children are fools.\nThanks, Mamma.\nThis is Radio Moscow broadcasting over all of the Soviet Union!\n- What is it?\n- What has happened?\nBoris!\nWe're at war!\nDo you hear?\nWe're at war!\nLeave me alone!\nHi!\nBoris is working day and night.\nI'm not waiting for anyone.\nVerónica.\nIn time of war, one should not get confused.\nOne should hold on to.\nTake me.\nI dream of dedicating to you my first symphony.\nWill you come to the concert?\nSuppose the Army calls you up?\nThe Army?\nI don't know.\nHardly.\nWhy \"hardly\"?\nThe most talented ones will be exempted.\n- Are you the most talented one?\n- Me?\nCertainly.\nWhy are you following me around?\nAren't you ashamed?\nI am.\nI tried to keep away from you.\nI know, Boris is my cousin.\nBut I can't help myself, you know?\nWait!\n- Wait!\n- I'm going home alone.\nHey, slow down!\nYou just had an operation.\nI'd better be in shape for that field-pack.\nThey're not wasting men like you in the Army.\nThere'll only be one exemption here, and one of us'll get it.\nThey'd better give it to you.\nYou've got knowledge, experience.\nAnd you've got talent.\nSave your sketches.\nMy wife's already got my bag packed.\nWell, as they say, let's get our bayonets ready.\nHey, Stepan!\nGuys, give me a hand...\nStepan!\nExcuse me, Sachkov.\n- Where's the summons?\n- Not yet.\nI can't wait.\n- Are you off now?\n- No, I've got those sketches...\n- I see.\nTake care.\n- Okay.\n- Hey!\n- Yeah?\n- Have you told her?\n- No, it's too early...\n- You're right.\nSee you tomorrow.\n- Right.\n- Let go.\n- I won't.\n- You're going to fall down.\n- No, I won't.\n- You'll rip up the blackout.\n- It's a blanket.\nI'm going to call the militia.\nI'm sick of the blackout.\nGive me the blanket.\n- Let go.\nYou'll fall.\n- No, I won't.\nCome on, Squirrel, cut it out.\nLet me hang this up.\nYou didn't come to the embankment today, but Mark did.\n- He's very handsome.\n- So what?\n- Aren't you jealous?\n- What?\n- Aren't you jealous?\n- I haven't got the time for it.\nI won't have much time either when I go to the architecture college.\nYou'll never pass the entrance exams.\n- I will!\n- I doubt it.\nCranes like ships Sailing up in the sky,\nWhite ones and grey ones, With long beaks, they fly.\n- Do you like my song?\n- Very profound.\nOh frogs, you keep on croaking, Why didn't you think of looking up?\nYou went on leaping, in mud soaking That's why you ended eaten up.\n- All right, you won, hero.\n- I won, I won!\nI won.\nAll right.\n- D'you think you'll be drafted?\n- Sure.\n- You won't volunteer?\n- I might.\nWhy not?\nNo, you won't!\nI won't let you.\nYou know you'll get an exemption.\nThat's why you talk so big.\n- Why do you think so?\n- Everyone smart will be exempted.\nThen the only ones to do the fighting will be the fools.\nI don't want to talk to you ever again.\nVeronica, there's something I must tell you.\nI don't want to hear it.\nAnd, please, don't call me Veronica.\n- Who am I?\n- Squirrel.\nListen...\n- What will you give me tomorrow?\n- It's a secret.\nIf you give me something sweet I'll eat it up and forget about it.\nGive me something to remember you with.\nKiss me now.\nWhen I'm with you, I'm not afraid of anything.\nNot even the war.\nThough, I'm afraid of the militia.\n- Veronica...\n- You know what?\n- Do you know?\n- No.\nI'll have a beautiful white dress made for our wedding.\nOne like my grandmother had.\nAnd a veil...\nVery long and white.\nAnd you should wear your dark suit.\n- And you and I will go...\n- To a registry office.\n- Is it a deal?\n- It's a deal.\n- You know I like this blackout.\n- What's so good about it?\nHi!\n- Stepan!\n- Veronica!\n- I've got a treat for both of you.\n- Fine.\n- What is it?\n- It's a secret.\n- Has it arrived?\n- Yes, this morning.\n- Why didn't you say so?\nTell me.\n- Well, go on.\nYou should've seen what's going on over at the factory.\nMake it short, will you?\nI'm telling you:\nthere's so much excitement.\n- Never mind that.\n- Your folks told me...\n- When do we report?\n- Today at 5:30.\nLook at those cherries!\nIs anything wrong?\n- They're nice!\n- Army orders...\n- No!\nFor you?\n- Me too.\nWe both volunteered...\nWhen?\n- You volunteered?\n- It's army orders.\nWait!\nWhat about us?\nStepan...\nNo, I've got to go.\nMy folks are going to...\nSo long.\nSquirrel!\nI didn't want to tell you before your birthday.\n- And now I have to go.\n- Of course.\nBoris!\nSquirrel, what is this?\nWhite cranes flying...\nI like that.\nI'm going to be all right.\nDo you hear?\nAnd after that we'll live together...\na hundred years.\nGo on now.\nWe'll say goodbye later.\nDon't be late.\nWhat difference would it make if he went a day later?\nWhat a nerve if he's still with Veronica.\n- Boris!\n- Did Dad call?\nHe was furious.\nWhy didn't you tell anyone?\nSo that we didn't have any scenes like that.\nGet these prints back to the factory tomorrow.\n- Give them to Kuzmin, the engineer.\n- I will, don't worry.\nWhat are you putting in there?\nI'm going out for a bottle of wine.\nGrandma, do me a favor.\nJust a minute...\n- Will they send you to the front?\n- Probably.\nHere, Grandma..\nWait.\nTomorrow when you get up, take this to her...\n- What is it?\n- Her birthday present.\nAnd help her.\nAfter all, it's war...\nPlease, be kind to her.\nAnd what if I die?\nYou don't have the right, especially now, with so many secrets to protect.\n- Well, suppose I do...\n- Come on...\nQuiet now, Grandma.\nThat's Veronica!\nNo, it's just Irina.\nThank heaven, you've come.\n- Boris!\n- Yes?\nCome over here.\nYou're 25 years old and you behave like a fool.\nWhat are we, children?\nWhat is it?\nAre we playing hide and seek?\nAre you starved for adventures?\nWhat kind of a man are you?\nWhere's Irina, and Mark?\nIrina is making coffee, Mark went out for wine.\nCoffee, wine...\nWhat kind of send-off is that?\nIrina!\nBring that thing from the medicine chest.\nBoris, come over here.\n- Where is Veronica?\n- She'll be here.\n- But where's she?\n- She's busy.\nShe's supposed to be here.\nHer fiance is going away.\nI'm not her fiance.\n- What are you then?\n- Just a friend...\n- That sounds suspicious...\n- I don't mean that way, Dad.\n- Then what do you mean?\n- Look, give me a break.\n- Here's the alcohol.\n- Have it diluted.\nI got some port wine.\nDrink it yourself.\nWe'll have a more robust drink.\nWell, are we all here?\nLet's sit down..\nIt's Veronica.\nAren't you going to welcome her, friend?\nAt last!\nIs Boris home?\nWe're from the factory.\nPlease, come in.\nI thought it was the fiancee...\n- We've come from the factory.\n- What about the presents?\n- Sorry.\nThis one's yours.\n- Yes...\nThank you.\nOn behalf of the Factory Committee...\nComrade Boris, you must fight to the last drop of your blood\nSmash the accursed fascists, and we, in the factory, will fulfil and overfulfil our quotas.\nWe've heard all that before.\nYou'd better join us and drink to my son, Boris.\nWell, I suppose... life in this world of ours is not yet what we would like it to be.\nNow you're going to war, Boris...\n- Let's drink.\n- To you.\nIrina!\nWhat about Grandma?\nWe saw my brother off last night.\nMy mother was crying...\n- What about you?\n- I was too.\n- On whose behalf, the committee's?\n- I wasn't thinking about that.\nThere's no one to see off in our family, we have 3 girls and Mom.\nIt's somewhat embarrassing...\nI feel left out...\nYes, and when they come back, you'll really envy us.\nThe trouble is, not all of them will be coming back.\nFor those who don't, a magnificent monument, with their names inscribed in gold.\nIrina, don't just sit there.\nFill the glasses.\nAnd you folks in the rear, fulfil and overfulfil!\nNow, Grandma, don't forget.\nMark, stay with Dad.\nHe'll be all right.\nI'll see you off.\nAbout face!\nPlatoon, forward march.\nTake it, Grandma!\n- Boris!\n- Mamma!\n- I won't see him again.\n- I'm sorry, Mamma.\nDrink it.\nYou'll feel better.\n- Where are you going?\n- To the hospital.\nBut you aren't on call now.\nVarvara Kapitonovna, I've got to see Boris...\nHe's gone.\n- Gone?\nWhere?\n- To report for the Army.\n- Oh, no!\n- Come in.\n- Where was he supposed to report?\n- I don't know.\nWhat is it?\nIt's from Boris.\nFor your birthday.\nThere's a note inside...\n- Where's the note?\n- Why?\nIsn't it there?\nMaybe it fell?\nMaybe he forgot in a hurry.\n- Forgot?\n- He'll write to you.\nWhere were you?\n- Where's Boris gone?\n- It's the schoolyard near the park.\nCalm down, she'll be here.\nIt would be quite a job finding someone in this crowd.\nWhat are you doing?\nWrite to me.\nWrite every day.\nDidn't I tell you to ship the cauliflower?\nAn airplane is high above, Over the roofs it's droning.\nIt's my sweetheart sends his love From his sky-high soaring.\nIt was used to be before That he saw me to my door.\nNow it's been quite a turn-off:\nI'm the one to see him off!\nDon't forget to write your Army Post Office number.\n- Cheer up, pug-nose!\n- We'll wait till you come back.\nGoodbye, Boris!\nTake care!\nFall in!\nShe will come.\nBoris!\nBoris!\nDress!\nAttention!\nForward march!\nBoris!\nThat's my little chicken!\nBoris!\nBoris!\nGrandma...\nNothing?\nHe hasn't written to me either.\n- Any news?\n- No.\nOh, this damn war!\nWe'll have to keep going somehow.\nHave you decided about a job?\nI'm starting at the war factory tomorrow.\nAir-raid alert!\nHurry on to the subway.\nI've got to finish this.\nGet your things.\n- Where's the knapsack?\n- It's over there...\nI won't go without you.\nIf it gets bad, we'll run down.\nGo on, now.\nBe careful in the subway!\nShe's so frightened, poor thing.\nAren't you?\nWhen I know that Veronica's safe and you're with me,\nI'm not such a coward.\nThe filthy murderers!\nWe'll get back at you, you wait!\nHe's not writing to me.\nOh, he must have written.\nIt's just the mail.\nAll clear!\nThe air raid has been terminated.\nLet's go!\nHere's where I live now.\nIf you decide to work with us, call me at the factory.\n- I will.\n- Goodbye.\nGet down here!\nCome back!\nWhat's the matter?\nAre you crazy?\nI'm sorry.\nVeronica, you can stay with us from now on.\nYou can have Boris' room.\nMark will move in with Fedya...\nMark, she'll need some attention to keep her from brooding...\nIrina and I are so busy at the hospital.\nI'll do what I can, Uncle Fedya.\nI promised Boris.\n- Is it agreed?\n- Um-hmm.\nIs this the factory?\nMay I speak to Kuzmin?\nHe was drafted, too?\nExcuse me, has anyone heard from Boris Borozdin?\nIf it weren't for this damn war,\nI'd be playing this in the Tchaikovsky Hall.\nFor you.\nVeronica!\nLet's go to the subway.\n- I'm not going.\n- Don't be silly.\nCome on.\n- Are you afraid?\n- For you.\nCome with me.\nI'm not afraid of anything.\n- Veronica, let's go to the subway!\n- No, I'm not going.\n- Stop it!\nYou've gone crazy!\n- I'm not going!\nI love you.\nNo.\n- I love you!\n- No!\nNo!\n- I love you!\n- Go away.\n- I love you!\n- No!\nNo!\nNo!\nIt's stupid to get surrounded like this.\n- Stepan, quit whining.\n- Who's whining?\nI'm not.\nThe captain said we might be able to break out by tonight.\nYeah, that's what he says.\nSachkov!\nWhere'd you find that rookie?\nIn the incubator.\nHe's our reinforcements.\nNow we'll break through for sure.\nIs that a way to talk about a married soldier?\nI got yoked in my last year of school.\nThe result of too much of education.\nYou're funny.\nLaughed yourselves right into a trap, I guess.\n- Volodya, you really married?\n- I said it to sound important.\n- Borozdin!\n- Yes?\nYou'll go on a reconnaissance mission.\nYou got to find the best place for us to break through tonight.\n- Turn in your documents.\n- Yes, sir.\nHey, Sachkov!\nTake this, will you?\nWhy don't we rest?\nAnd have a smoke.\nIs she always laughing like that?\nShe probably thinks we're all dead.\nLet me see that beauty.\nHey, that's the soldier's life for you!\n- You're here, and she...\n- And she what?\nHey, let me try that thing.\n- Hold it, will you, Sachkov?\n- Certainly.\nNot bad for a first try.\nStop that!\n- Aren't you ashamed?\n- No, sir.\n- Five days under arrest!\n- Yes, sir.\n- You both go on a reconnaissance.\n- Why?\nTurn in your papers!\nBoris, here.\nOn account of her?\n- I'd say she was worth it.\n- She sure is!\nHowever, we must maintain discipline!\nYou hear that?\nDiscipline...\nStepan, keep this.\nBe careful, don't lose it.\nWe...\nWe'll get married, Uncle Fedya.\nOh, I forgot.\nThere's some sausage left.\n- Keep your head down!\n- Stop ordering around!\nLet's get out of here before they get wise.\n- If you're scared, run.\n- Come on, you idiot!\nHey!\nMusician!\nAre you deaf?\nWhy the hell I've got tied up with him?\nWhat's wrong with you?\nCan you hear me?\n- Go on.\nI want to rest for a while.\n- Are you wounded?\nHold on to me.\n- Leave me alone.\n- I tell you, get up!\nNow hang on, hold tight.\nThis way's no good.\nI'll have to carry you.\nCome on, leave me here.\nAre you still sore because I punched you?\n- You were just lucky, otherwise...\n- Shut up, we'll talk later.\nHere we go...\nAre you all right?\nHold on, friend.\nIt's only a little way to the woods.\nWe'll be safe there.\nI'm winded.\nLet's rest a bit.\nIt's a little quieter here.\nHow are you?\nIt's hard to breathe.\nHold on, we'll have to get you married yet...\nHey, buddy!\nWhat's the matter with you?\nWhat's wrong?\nForgive me, friend, forgive me...\nIt's my fault...\nForgive me...\nfriend...\nHey, somebody!\nHelp!\nHelp!\nHelp!\nCan you hear me, Boris?\nAre you hit?\nIt's nothing, I am just...\nThe Soviet Information Bureau reports that there were no important changes on the front in the past 24 hours.\nNo news is good news.\nFamilies evacuated with Plant 326 will be quartered on Vosstaniya Street.\nComrades, report here, please.\n- Irina, help me with the wounded.\n- I'll get an orderly.\nEverybody off!\nSiberia!\nWe can't run much farther.\nPoor Mother Russia!\nAttention, please!\nChief of Army Hospital, Comrade Borozdin, please report to the military commandant at once.\nMaybe we'll find peace here at last.\nOut of the way, the evacuated.\nYour stove is smoking.\nOh, I'm sorry.\nSave your dreaming till the war is over.\nWhere are you going?\nTo the hospital.\nI'm on duty.\nShe wanders around like a ghost, all nerves.\nThe poor thing is waiting for a letter.\nFrom whom?\nHer husband's not up at the front like ours.\nShe's not waiting for any letter.\n- D'you have the 2nd shift at school?\n- Yes.\nCranes like ships, Sailing up in the sky...\nI can't get those silly verses out of my head.\nThere she is!\n- Who?\n- The mail carrier.\nIf I can count up to 50, there'll be a letter for me.\n- One, two, three, four...\n- Stop it, Veronica.\n- Fifteen, sixteen...\n- Veronica, this is madness.\n- Nineteen, twenty...\n- Stop it!\nForty-seven, forty-eight...\n- Good morning!\n- Good morning!\nSorry, nothing for you.\nHere you are.\n- Lebedeva?\n- That's me.\n- Paliukaitis?\n- Nothing.\nFrom my eldest.\nFrom the Ukrainian Front.\nI didn't know Boris.\nBut everyone says what a fine, talented boy he was.\nWas?\nListed as missing in action doesn't mean he was killed.\nOf course not.\nI just didn't put it right.\n- What's wrong, Veronica?\n- I'm dying, Anna Mikhailovna.\nCome on, Veronica.\nYou poor child.\nI've lost everything.\nYou have your whole life before you.\nI don't want it!\nWhat's it good for?\nYou must forget the past.\nIt is human nature to forget.\nI don't want to forget.\nI don't need it.\nBut you can't go on tormenting yourself for your mistakes.\nI should do it.\nAll my life.\nYou teach history.\nYou're a wise woman.\nTell me what's the meaning of life?\nThe meaning of life?\nMaybe it's in...\n- Did Chernov get here yet?\n- Not yet.\nWow, I'm really famished!\nTry to be nice to Chernov when he comes, please.\nHe makes me ill.\nI feel exactly the same way, but after all he's my boss.\nThat gives you a reason to lick his boots?\nPlease, Veronica, this can't go on.\nYou're always so irritable, always criticizing.\nTell me, how can I make you happy?\nJust disappear.\nCome in, it's open.\nCome in!\nMark, pardon my invasion.\nNot at all.\nIt's a pleasure.\nHere, let me take that.\nDid you see the paper?\nThe Germans have advanced in the Caucasus.\nYes, it's awful.\nBut we'll show them what we're made of yet!\nPlease make yourself comfortable.\nIt's warm here.\nYour place is nice and cozy.\nMy wife and children are in Tashkent, so I'm kind of homeless.\n- Good day, Veronica.\n- Good day.\n- Where are you going, darling?\n- To the hospital.\nI'm on duty.\nBundle up.\nIt's very cold.\nI admire your wife.\nShe's so honest...\nShe must be very happy with you.\n- I was looking for you at the Philharmonic.\n- Was there a concert?\nNo.\nBut are you going to the birthday party tonight?\nI might.\n- What are you giving her?\n- What can I give her?\nThe war!\nYes, this war.\nIt's nothing gorgeous, of course, but tie a little trifle to it and Antonina will be pleased.\nIt's wonderful!\nWhat do I owe you?\n- It's really nothing, forget it.\n- Thank you very much.\nMark, can you do me a favor?\n- Is someone up there?\n- No.\nCould you get some drugs for me from Feodor Ivanovich?\nFine job, Irina.\nHe'll pull through.\nI hope so.\nIt would be downright mean of him not to.\nIrina, you should have been a man!\n- I'm doing all right as a girl.\n- Veronica!\nWhat are you doing here so early?\nThe clock was fast.\nPoor girl...\nI can't forgive her for what she did to Boris.\nNew patients again!\nI told them I have no more room.\nI'm running a hospital, not a barrel of herrings!\n- Are these from Kalach?\n- From Stalingrad.\nSome from the front line, others from the hospitals.\nNo place for us here, either.\nDon't worry, they'll find room.\nI'll take 80 men.\nThe rest will have to go to other hospitals.\nLet's see now...\nPlease give my regards to Sergei,\nFeodor, Vassily, Aunt Maria,\nAgraphyona, Catherine, Barbara,\nNikolai, Catherine...\n- You already said Catherine.\n- That's another one.\n- Don't you want to explain it?\n- They'll figure it out.\nZinaida, Antonina, Kuzma...\nNurse!\n- What do you want, Vorobyov?\n- Never mind.\nNurse!\n- He wants a potty.\n- I'll give it to him.\nThanks.\nThat's beautiful music!\nTurn it up a little louder, will you please?\nShut up your music!\nTurn it down!\nYou hear me?\nWho was that shouting?\nI did, so what?\n- Zakharov, what's wrong?\n- Leave me alone!\nHe's gone berserk.\nHe got bad news from home this morning.\nHis girl just got married to a friend of his, bitch.\nHe hasn't had a bite to eat.\nTry to see what you can do, nurse?\nThose broads are worse than fascists, aiming right in the heart.\nYou must try to eat.\nIt's the only way to get well.\nI don't want to get well!\nI just want to croak!\nGet the doctor.\nCalm down.\nPlease, calm down.\nBecause of a woman...\nWhat a dumbbell!\nGet the doctor!\nGet the doctor now!\nQuit that yelling!\nCackling like a bunch of hens!\nWhere will they take us now?\nThere're plenty of hospitals in this wide world.\nGuys, the chief is coming!\nBastards!\nQuiet down!\nYou're a soldier in the Red Army!\nWant to desert it?\nYou afraid that if we cure you, you might go back in the army?\nYou're not being fair.\nHe got a bad letter from home.\nI know.\nThat's just an excuse.\nSo what if his girl's left him?\nGood riddance!\nShe's not worth a dime if she gave up a handsome soldier like this, a real hero, for a puny draft-dodger!\nRight.\nShe's the one who's missed her happiness!\nAnd whatever she's got, she deserves it!\nWhat a petty soul!\nCan a woman like that understand the suffering you've gone through?\nKilling her would be too good for her kind.\nYou stood the most difficult trial.\nYou looked death in the face, went to meet it yourself.\nAnd she couldn't stand the small test of time.\nFor women like that, no honorable man can have anything but contempt!\nFor such creatures there is no pardon!\nBandage him!\nAunt Sima, bring him fresh porridge and some hot tea.\nBe good now.\nVeronica...\nWhat the hell kind of a mother are you?\nKeep an eye on your kid!\nAnd I'll be held responsible!\nDaydreaming, you fool!\n- Who are you?\n- Mamma's boy.\n- Where are you from?\n- From Voroshilovgrad.\n- How old are you?\n- Three months and three years.\n- What's your name?\n- Boris.\n- What?\n- Boris.\n- Why the fancy get-up?\n- A concert in the hospital.\n- A likely story!\n- All right, all right.\n- Is Mark here?\n- So far yes.\nHere you are.\nThank you very much, Anna Mikhailovna.\nIt's for a little boy we know.\nIt's his birthday.\nI wish everyone were as kind- hearted as you are, Mark.\nThe symptomatology of this type of compound injury depends primarily on changes in the nodal structure...\n- Interesting, but beyond me.\n- Why, it's really quite simple.\nThey are not readily apparent to the clinical practitioner, but in most cases the etiology...\n- What is this?\n- What kind of a trick is that?\nWhat do you mean, trick?\nThe poor child lost his parents.\nI want my mommy!\nYou ought to have taken him to the Foundling Center.\nYou go yourself to the Center!\n- Rude child!\n- I'm not, you're rude!\nNow, don't cry.\nWe'll go find your mommy in Voroshilovgrad.\nNow, now, be quiet.\n- Poor baby, he wants his mommy.\n- Look, here comes a goat...\nStop rattling.\nYou're hurting my ears.\nHere, play with the cover.\nDon't you want it?\nOh, my God.\nHere's a bagel roll for you.\nKeep him quiet!\nHe's driving me crazy.\nIf we had some toys for him to play with...\nIrina, take him for a minute.\nHah, what next?\nStop crying, will you?\nLet me take him.\nCome on, my little one, my little Boris...\nI'll undress you and put you to bed...\nHave anyone seen my squirrel?\nYes, Mark took it.\n- Why?\n- He's giving it to some boy.\nMy squirrel to a boy?\n- Where's Mark?\n- I don't know.\n- Where's Mark?\n- I don't know.\nYou're hiding something from me.\nYou know where he's, don't you?\nWhere's he?\nHe's probably gone to Antonina's party.\n- What Antonina?\n- Why don't you ask Mark?\n- Who's she, tell me!\n- Don't order me around.\nMark visits her occasionally.\nDo you get it?\n- You're saying this to spite me.\n- Why would I want to?\nBecause I'm married, I'm loved, and you're still a spinster!\nStop it, Veronica!\nAntonina lives near the food shop, in the little house next door.\nGo over there and see for yourself.\nCalm down.\nI should do something.\nWhen Mark comes home, you'll have a talk.\nBut now you must wait.\nSure, I must wait...\nThat's all I've been doing all the time.\nThat's enough!\nMay our lips benumb.\nWords are futile.\nThey so often lie perchance.\nAnd only our eyes Will never dare lie,\nForever true their parting glance.\nMy eyes are now sad and dark,\nAs though therein a candle was put out...\nIn Leningrad after my parties we'd go for a ride, from one part of the city to the other.\nArrange for a ride now.\nThere's a war on, Antonina.\nCars are worth its weight in gold, the gasoline is strictly rationed.\nGet any kind of car!\nI beg you!\nA fire-engine, an ambulance, a truck... anything!\nLet me hope where there's hope no longer!\nJust the two of us?\nTo the point of full abandon?\nI'll see what I can do.\nI love you!\nSorry, I don't dance.\nI thought I'd tried everything, but I've never tried golden chestnuts.\nLook, a note!\n- It's a birthday note for me.\n- Congratulations!\nWhere's the squirrel?\nWhere's my squirrel?\nLook, you mustn't think that...\nThere's a note here from somebody named Boris.\nMy only one, happy birthday...\nOn this day you were born.\nIt's hard leaving you.\nBut it can't be helped.\nIt's war!\nI must go.\nWe can't go on living the way we did, enjoying ourselves while death stalks our land.\nWe will be happy some day.\nI love you, I trust you.\nYour Boris.\nWhy are you so alarmed?\nGo home.\nI'll be right back.\nWhy?\n- Take your coat off.\n- Thank you.\nYou know, all the Philharmonic cars are being used tonight, and I must have a car.\nYou're Chief Surgeon, you won't refuse me this little favor...\nTransportation is our most critical problem.\nIt was difficult for me too, but I did my best.\nI went out of my way, because you asked me...\n- What I asked you?\n- The exemption.\nNow it's about to expire, and this time to get it will be almost impossible.\n- What d'you mean, exemption?\n- The exemption for Mark.\nYou can be sure I handled the whole thing discreetly.\nCould Mark have done it without informing you?\nHe even offered me money in your name...\nI'm sorry.\nI'm glad you're here, Uncle Fedya.\nI wish you'd talk to her.\nShe burst in without being invited, started a fight...\nShut the door.\nDo you believe that anybody likes having his son marching off to war?\nWhat do you mean?\nOr do you believe that for your petty pleasures and well-being others must lose their arms, legs, eyes, jaws, even their lives?\nAnd you owe nothing to no one?\nYou know I've got an exemption, Uncle Fedya.\nTell us how you got this exemption.\nWhat are you doing, Veronica?\nIt's all right.\nI'm going to rent a room.\nAnd I'm taking the boy...\nPerhaps someone else had better rent a room?\nGladly.\nI've been wanting to for a long time.\nI wish you'd driven me out in the first place.\nYou've been through a terrible ordeal.\nOnly one who had done something worse could have condemned you.\nStay with us.\nI can't.\nI cannot hide behind someone else's back.\nI don't want to.\nThink it over.\nListen, where can I find the Borozdin family?\n- Which one are you looking for?\n- Feodor Ivanovich.\nFeodor?\nHe is not in at the moment.\nAre you from Boris?\nNo, I'm by myself.\nI have to see Feodor Ivanovich.\n- Won't you sit down?\n- Thanks.\nFeodor Ivanovich should be here in a few minutes.\n- May I go out?\n- All right.\n- Is he yours?\n- Yes, he's mine.\nHe looks like you.\nAre you a relative of the Borozdins?\nNot really.\nWell, I've done all the fighting I'll ever do.\nGoing home?\nNot yet.\nLeningrad's still blockaded.\n- Yeah, I'm in a spot.\n- Why?\nI guess there's no harm in telling you because you're not the family.\nBut how do you tell a man his son was killed?\n- Where did it happen?\n- Near Smolensk.\nWhat do you want me to play?\nI don't care.\nTell me, did you see him buried?\nNo.\nI was put on a stretcher and taken to a hospital, and he was with a friend of his, Stepan.\nStepan...\nI've got to find his girl now.\nHe was really in love with her.\nI'm the girl.\nCome to see us when you're in Moscow, Volodya.\nThanks very much.\nI will.\nThe war's over.\nIt's strange, isn't it?\nAnd you're still waiting?\nI am.\nOne must always keep on hoping.\nWhat's the use of waiting?\nI saw it with my own eyes.\nWhat did you see?\nYou saw him wounded?\nYou saw him fall?\nYou didn't see him die.\nBut if he's alive, why hasn't he written to you?\nAnything could happen.\nStepan hasn't written to anyone either.\nThey know at the factory that he was in some Special Operations.\nDasha promised to let me know when he's back.\nBoris is alive.\nHe's alive.\nLook!\nThe victors are coming!\nKolia, darling, you're back!\nBoris!\nVeronica!\nStepan!\nThe flowers...\nFor you.\nWell?\nWhat?\nYou see...\nWell...\nMy darling!\nDear mothers, fathers, brothers and sisters!\nThe happiness of our reunion is boundless.\nThe heart of every Soviet citizen sings with joy, the joy of victory!\nWe have all waited for this happy moment.\nWe dreamed of it in the darkest hours of our struggle.\nBut we'll never forget those who lie silent on the battlefield.\nYears will pass, our cities will rise again, and our wounds may one day be forgotten.\nLet one thing remain in our hearts, a cold hatred of war!\nWe deeply feel the grief of those who cannot meet their loved ones today.\nWe must all take a vow to keep our promise that sweethearts will never again be parted by war, that mothers may never again fear for their children that our brave fathers may not stealthily swallow their tears.\nWe have won and remained alive, not for destruction but to build a new life!\nDon't just stand there.\nGive the flowers to whoever they're for.\nThank you very much, sister.\nOh, what a darling!\nLook, the cranes are flying over Moscow!\nThe End\nStop, Squirrel.\nPut them on.\nLook!\n\"Cranes like ships, sailing in the sky\nWhite ones, grey ones With long beaks they fly\"\nLook, look!\nThere you go.\nYou and your \"cranes like ships.\"\nTHE CRANES ARE FLYI NG\nScreenplay V. ROZOV\nDirector M. KALATOZOV\nCinematography S. URUSEVSKY\nSTARRI NG\nVeronica T. SAMOI LOVA\nBoris A. BATALOV\nFyodor Ivanovich V. MERKURYEV\nMark A. SHVORI N\nA PRODUCTION OF MOSFI LM 1957\nWho's there?\nWait.\nWell, okay.\nWhen?\n- Thursday, at the embankment.\n- Come on, that's too long!\nSquirrel!\nWe haven't finished.\nSquirrel!\nWhen?\nWhat time on Thursday?\nNo, I can't.\nI'll be at the factory.\nOkay.\nDon't be late!\nSquirrel!\nShe's crazy about him.\nAnd he about her.\nThat's what love is, my dear:\na harmless mental illness.\nWhy aren't you in bed yet, Grandma?\nIt's already time to get up, Boris!\nQuit making noise!\nRunning around all night...\nYou're just jealous.\nDid you tear it?\nYour jacket's all in one piece.\nDisgraceful!\nTwelve o'clock, and he's still asleep.\nHe works a lot.\nHe's tired.\nLet him at least get some sleep on Sunday.\nThis \"work\" of his will end in a wedding.\nYou're just afraid of losing him.\nIrina's mind should be on her thesis, not on a wedding.\nWatch out, Uncle Fedya.\nShe almost has her doctorate and you're still just a physician.\nWell, if children don't surpass their parents, then the parents are bad and the children not much better.\nThanks, Mama.\nImportant announcement!\nWhat's going on?\nBoris!\nWar!\nYou hear me?\nWar!\nLeave me alone.\nHello.\nBoris is at the factory day and night.\nAre you waiting for him?\nI'm not waiting for anyone.\nVeronica.\nIn wartime, it's important not to lose your head.\nTry to live a normal life.\nLike me...\nI dream of dedicating a piano concerto to you.\nWill you come to hear it?\n- Won't you be drafted?\nDrafted?\nI don't know.\nI doubt it.\nAnd why is that?\nThe most talented people will be exempt.\n- And you suppose you're talented?\n- Yes.\nWhy are you always following me around?\nYou ought to be ashamed.\nI am.\nI promised myself a thousand times I wouldn't.\nI know Boris is my cousin, but I can't help myself!\nYou understand?\nI can't.\nWait!\nThere's no need to escort me.\nWatch out!\nYou'll hurt your leg.\nIt'll be harder at the front, my dear Boris.\nThey won't let you go to the front.\nThere will be only one exemption.\nEither for you or for me.\nThat's right.\nSo you should stay.\nYou've got knowledge and experience.\nAnd you've got something more important... talent.\nTake care of your drawings.\nYou know, my wife's already got my bags packed.\nWell, as they say, let's get our bayonets ready!\nStepan!\nExcuse me, Sachkov.\nWell?\nWhere's the notice?\nNothing yet.\nI don't understand why they're so slow.\nAre you going home?\n- No, I'm...\n- Oh, I see.\nWell, say hello to her!\n- I will.\nWhat?\n- Have you told her?\n- No.\nWhy should I rush it?\n- You're right.\nSee you tomorrow.\n- Take care!\n- Let go.\n- I won't let go.\nYou're gonna fall!\nLet go.\nYou'll tear the shade.\n- It's a blanket.\n- Let go.\nI'll call the police.\n- I'm tired of these blackouts!\nGive it to me!\n- You're gonna fall.\n- I am not.\nSquirrel, stop it.\nLet me hang this up.\nYou didn't come to the embankment today, but Mark did.\n- So?\n- He's handsome.\nSo?\n- Are you jealous?\n- What?\n- Are you jealous?\n- I don't have the time.\nToo bad.\nI think I'll enroll at the Architectural Institute.\n- They won't accept you.\n- Yes, they will.\nI doubt it.\nCranes like ships sailing in the sky\nWhite ones, grey ones with long beaks they fly\nDo you like my song?\nVery profound.\nLittle croaking frogs Why didn't you look up?\nYou kept on hopping and jumping That's why you got eaten up\nEaten!\nWell, hero, did you win?\nI won, I won.\nI won.\nDo you think you'll be drafted?\n- Of course.\n- Would you volunteer?\n- I might.\nNo, you won't!\nYou know very well you'll be exempt.\nThat's why you talk so big.\n- What makes you so sure?\n- I know.\nAll the smart ones will be exempt.\nSo only fools will fight?\nI don't want to discuss it any further.\nVeronica...\nI want to talk to you about something.\nWell, I don't.\nAnd please don't call me Veronica.\nWho am I?\n- Squirrel.\n- That's right.\nListen.\nWhat will you give me tomorrow?\nIt's a secret.\nIf it's something good to eat, I'll eat it and forget about it.\nGive me something I will always remember, for as long as I live.\nKiss me.\nYou know, when you're with me,\nI'm not afraid of anything, not even the war.\nI'm afraid of the police.\nVeronica.\nYou know what?\nDo you know?\nFor the wedding I'm going to make a white dress.\nLike the one my grandma had.\nAnd a long, long veil.\nAnd you'll wear a black suit, and we'll go...\n- To the registry office.\n- Agreed then?\n- Agreed.\nYou know, I like this blackout.\nWhat's so good about it?\nHey!\nStepan!\nI have a treat for you.\n- What is it?\n- It's a secret.\n- Did it arrive?\n- It did.\nWhy didn't you say so?\nTell me.\nThings are crazy at the factory!\nThe guys ran to the barber's.\nI went straight to your place.\n- Make it short.\n- Just wait.\nSo I was saying, the guys ran...\nListen, can't you make it shorter?\n- Your family's worried.\n- What time do we report?\nToday at 5:00.\nWith your things.\nLook at these cherries.\n- What is it?\n- Beautiful.\nThe notice came.\nReally?\nFor you?\nYes, for me too.\nWe both volunteered.\nWhat?\nYou volunteered?\nBut the notice came...\nWait.\nWhat about me?\nI'd better go home.\nI've got a lot going on there too.\nSquirrel.\nI didn't want to tell you.\nTomorrow's your birthday.\nI have to go.\nOf course.\nSquirrel.\nWhat's the matter?\nCranes like ships\nYou like my poem?\nNothing will happen to me.\nYou hear?\nAnd then you and I will live for a long, long time.\nA hundred years.\nGo.\nWe'll say good-bye later.\nAll right.\nDon't be late.\nCan't he stay home until tomorrow?\nHe's a swine if he's still at Veronica's.\nBoris!\n- Did Dad call?\n- Yes.\nHe's furious.\nWhy didn't you tell us?\nTo avoid scenes like this.\nGo to the factory tomorrow and turn these over to Kuzmin, the engineer.\nI will, I will.\nWhat are you stuffing in there?\nI'm running out for a bottle of wine.\nGrandma, do me a favor.\nJust a minute.\nWill they send you to the front right away?\nProbably.\nHere... wait a minute.\nEarly tomorrow morning take this to her.\nWhat is it?\nIt's her birthday tomorrow.\nAnd later, if things are hard for her...\nAfter all, this is war...\nHelp her out.\nAnd if I die?\nYou've got no business dying, especially now that you know so many secrets.\nI just might up and die.\nQuiet.\nThat's Veronica.\nNo, it's Irina.\nThank God, you're home.\nBoris!\nCome over here.\nWhat is this about?\nYou're 25 years old and you...\nforgive me... act like a fool!\nWhat are we?\nChildren?\nIs this a game?\nHide-and-seek?\nHe wants adventure!\nThere's character for you.\nWhere are Irina and Mark?\nIrina's making coffee.\nMark went out to buy some wine.\nCoffee, wine!\nWhat's wrong with people these days?\nIrina!\nBring me the bottle from the medicine cabinet.\nBoris!\nCome here.\nWhere's Veronica?\n- She'll be here any minute.\n- Where is she?\nShe's busy.\nThis isn't right.\nShe should be here.\nHer fiancé is leaving.\nI'm not her fiancé.\n- What are you, then?\n- We're just...\nYou're just what?\nThat sounds suspicious.\n- I don't mean it that way, Dad.\n- Then what do you mean?\n- Stop picking on me.\n- Wait!\n- Why are you bothering him?\n- Here.\nFrom the medicine cabinet.\n- Go ahead and mix it properly.\n- Here's the port.\nDrink it yourself.\nWe'll have a real drink.\nSo, is everybody here?\nSit down.\nIt's Veronica!\nGo meet your bride, Mr. Bridegroom!\nFinally!\n- We came from the factory to see Boris.\n- Please come in.\nAnd I thought the bride had arrived.\n- We're from the plant.\n- They told us to bring you these gifts.\nSorry.\nThis one.\n- On behalf of the Plant Committee...\n- And the Communist Youth League...\nWhat you want to say is:\n\"Comrade Boris, fight to the last drop of blood, and beat the fascists!\nAnd we at the plant will meet and exceed our production quotas.\"\nWe've heard all that before.\nWhy don't you sit down with us, girls, and drink to my son Boris!\nThings in this world aren't going as smoothly as we might like.\nSo now you're off to war, Boris...\n- Let's have a drink!\n- To you!\nA glass for Grandma.\nWe sent our brother off yesterday.\nMother cried and cried.\nWhat about you?\n- I cried too.\n- On behalf of the Plant Committee?\n- No, on my own.\n- Don't embarrass her.\nWe've got no one to send off.\nThere's just Mother and three girls.\nWe even felt a little ashamed, with all the others leaving...\nWhen our men come back, you'll envy us.\nThe trouble is not all of them will come back.\nFor those who don't, we'll build a monument reaching to the sky with every one of their names in gold.\nIrina, pour another round.\nWhat are you waiting for?\nI'll just put these away.\nWell, you folks in the rear, meet and exceed your quotas!\nGrandma, don't forget.\nMark, don't go.\nStay with Father.\n- I'll walk you to the trolley.\nAbout face!\nGuards, forward march!\n- Mother!\n- The last time.\nI'm sorry.\nNot in the mood for a drink?\nWhere are you going?\n- I'm going on duty.\nYou were on duty yesterday.\nVarvara Kapitanova, may I see Boris for just a moment?\n- He already left.\n- He left?\nWhere did he go?\n- To the assembly station.\n- Oh, no.\n- Come in.\n- Where's the assembly station?\n- I don't know.\n- What's this?\n- It's from Boris, for your birthday.\nThere's a note too.\n- Where's the note?\n- Isn't it there?\nHe must have forgotten in the rush.\nForgotten?\nHe'll write to you.\nWhere were you?\n- Where's the assembly station?\n- It's on Zvenigorodskaya.\nDon't worry.\nShe'll come.\nEven if she does, how will she find me in this crowd?\nWhat are you doing?\nBoris, where's Veronica?\nWrite to me every day.\nWho has the invoices for the cauliflower?\nDon't forget to send your field address.\nCheer up, pug-nose!\nTake care!\nFall in!\nShe'll come.\nBoris!\nFall in!\nForward march!\nThere's my kitten.\nGrandma?\nNothing?\nHe hasn't written to me either.\n- Anything?\n- No.\nOh, this war.\nWell, rain or shine, we must carry on.\nHave you decided where you'll work?\nI'll go to the war factory.\nCitizens!\nAir raid alert!\nHurry down to the subway.\nI've got some urgent work to do.\nGo get your things.\nWhere's the backpack?\n- The backpack?\nIt's right there.\nI won't go without you.\nIf it becomes dangerous, we'll go down to the shelter.\nGo now.\nBe careful in the subway.\nShe's so scared, poor girl!\n- What about you?\nWhen Veronica is safe and you're by my side, I'm not afraid.\nThey're still at it, the brutes.\nThose parasites won't even let us talk!\nFor some reason he doesn't write to me.\nIt's the war.\nThe mail is so slow.\nAll clear.\nThe air raid is over.\nLet's go.\nWell, my place is right here.\nIf you decide to come join us, call me at the factory.\n- Okay.\n- Good-bye.\nWhere are you going?\nGet back!\nWhere do you think you're going?\nI'm sorry.\nVeronica, you'll stay with us from now on.\nBoris' room is free for now.\nMark will share a room with Fedya.\nMark, we must take good care of her.\nUnfortunately, Irina and I are at the hospital day and night.\nI'll try, Uncle Fedya.\nBoris spoke to me about it.\nAre you all right now?\nIs this the factory?\nMay I speak to Kuzmin, please?\nHe's gone to the front too?\nExcuse me.\nIs there any news from Boris Borozdin?\nIf it weren't for the damned war,\nI'd be playing this at Tchaikovsky Hall.\nFor you.\n- Veronica, let's go to the subway.\n- I'm not going.\n- That's nonsense!\nLet's go.\n- Are you afraid?\nOnly for your sake.\nCome on, let's go.\nI'm not afraid of anything.\nVeronica, let's go!\nDon't be foolish.\nYou're acting crazy!\nI won't go!\nI won't, I won't, I won't!\nI love you.\nNo.\nI love you.\nI love you.\nI love you!\n- Go away!\nI love you.\nWhat a stupid way to get surrounded.\n- Stepan, stop whining.\n- What do you mean, stop whining?\nThe captain said we might break through by tonight.\n- At last!\nSachkov!\n- Here!\nWhere's this rookie from?\nStraight from an incubator.\nA fresh reinforcement.\nNow we'll break through for sure.\nIs that any way to speak to a married man?\n- Is that right?\n- I got married in school.\nSee what education does to people.\nYou funny guys, always joking!\nLaughed yourselves right into a trap.\nVolodka, are you really married?\nAre you kidding?\nSounds better, though, doesn't it?\nBorozdin!\nYou'll go out on reconnaissance.\nYour job is to find the best place to break through.\nTurn over your papers.\n- Yes, sir.\nHey, Sachkov!\nCome on, help me here.\nLet's take a break, guys, and have a smoke.\nShe's always laughing like that.\n- They must think we're dead.\nLet me see that beauty.\nYep, the life of a soldier.\nYou're over here, and she's...\nAnd she's what?\nGive me the harmonica.\nSachkov, hold it for a second!\nStop it!\nAren't you ashamed?\n- No.\nFive days' arrest.\nYou'll both go on reconnaissance.\nTurn in your papers.\nBoris, here.\nBecause of her?\nShe's worth fighting for.\n- Exactly.\nStop that chatter!\nDiscipline!\nHear that?\nDiscipline.\nStepan, hold on to this.\nJust don't lose it.\nWe're getting married, Uncle Fedya.\nI forgot...\nI still have some sausage.\n- Keep your head down.\n- Stop giving me orders.\n- Let's get out of here or they'll get us.\n- Run if you're scared.\nYou idiot!\nHey, you!\nMusician!\nYou deaf?\nHow the hell did I get stuck with him?\nWhat's wrong?\nHey, you!\nGo on alone.\nI want to rest for a bit.\n- Are you wounded?\nHold on to me.\n- Leave me alone.\nHold on to me, I said, and hold on tight!\nHere, get on my back.\nIt'll be faster this way.\nLeave me here.\n- Idiot!\nYou're sore because I punched you.\n- You were just lucky l...\nShut up.\nWe'll settle it later.\nHold on, hold on.\nA little further to the woods, and then we're safe.\nI'm tired.\nLet's rest a bit.\nIt's quieter here.\nSo, are you alive?\n- It's a little hard to breathe.\n- To breathe?\nWe'll dance at your wedding yet.\nHey, buddy!\nWhat's the matter?\nForgive me.\nForgive me.\nForgive me, friend!\nHey, somebody, help!\nHelp!\nHelp!\nBoris!\nWhat's wrong, Boris?\nAre you wounded?\nI'm not wounded.\nI...\nThe Soviet Information Bureau reports no important changes on the fronts in the last 2 4 hours.\nNo important changes.\nThat's good.\nFamilies evacuated with Moscow Plant 3 26 will be quartered on Vostaniya Street.\nComrades, report here.\nIrina, help this wounded man.\n- The paramedics will be here soon.\n- Yes.\nUnload!\nSiberia.\nWe can't retreat much farther.\nThis is what's become of Mother Russia.\nAttention, attention!\nChief of Hospital Number 4, Borozdin, report to the military commandant.\nPerhaps we'll find some peace here.\nClear the way, folks.\nThe stove is smoking.\nI'm sorry.\nYou can daydream when the war is over.\nWhere are you going?\nTo the hospital.\nI'm on duty.\nShe wanders around like a ghost, all nerves.\nShe's always waiting for a letter.\nFrom whom?\nHer husband's right here.\nNot like us, soldiers' wives.\nShe's not waiting for a letter from anyone.\n- Are you on the second shift at school?\n- Yes.\n\"Cranes like ships sailing in the sky.\"\nThose silly lines are stuck in my head.\nThere it is.\n- What?\nThe mail.\nIf I can count up to 50, there'll be a letter for me.\n- Veronica, this is crazy.\n...16, 17, 18, 19 20, 21...\n- Stop!\n...45, 46, 47...\n- Hello.\n- Hello.\nThere's nothing for you.\nFor you.\nLededeva?\n- That's me.\n- Palyukaitis?\n- Nothing.\nFrom my eldest son on the Ukrainian front.\nI didn't know Boris, but everyone says he was a gifted young man.\nWas?\nMissing doesn't mean dead.\nOf course not.\nThat didn't come out right.\nWhat's the matter, Veronica?\nI'm dying, Anna Mikhailovna.\nMy dear, what are you saying?\n- I've lost everything.\n- You have your life ahead of you.\nI don't want to live!\nWhat's the use?\n- Forget the past.\nIt's human nature to forget.\nI don't want to forget.\nThere's nothing I need to forget.\nYou mustn't punish yourself forever.\nI must.\nTill the end.\nYou teach history.\nYou're an intelligent woman.\nTell me:\nWhat is the meaning of life?\nThe meaning of life?\nPerhaps it's that...\nWas Chernov here?\nNo.\nBoy, am I hungry!\nIf Chernov comes, try to be polite.\nHe's revolting.\nI may find him even more revolting than you do, but he's the boss.\nWhy do you always kiss up to him?\nDear Veronica, you're impossible.\nYou're always so irritable, and you keep picking on me.\nTell me what I can do for you.\nI wish you had never been born.\nCome in!\n- I hope I'm not intruding.\n- We're always happy to see you.\nMake yourself comfortable.\nDid you hear?\nThe Germans have advanced in the Caucasus.\nIt's awful.\nBut don't worry.\nWe'll show them yet.\nPlease, make yourself comfortable.\nYour place is cozy.\nMy wife and children are in Tashkent, so I live like a homeless tramp.\nHello, Veronica.\n- Where are you going, dearest?\n- I'm on duty at the hospital.\n- Bundle up.\nIt's very cold.\nI admire your wife.\nShe's always so candid, so pure.\nShe must be very happy with you.\nI looked for you today at the Philharmonic.\n- Was there a concert?\n- No.\nWill you be at the birthday party tonight?\nProbably.\n- What will you take for a gift?\n- What can I give?\nYes... the war.\nIt's nothing great, but attach a little something to it and I'm sure Antonina will be very happy.\nIt's wonderful.\nHow much do I owe you?\n- It's nothing.\nDon't mention it.\n- Thanks very much.\nMark, I have a favor to ask.\nIs there anyone upstairs?\nNo.\nDo you think you could ask Fyodor Ivanovich for some medicine?\nGood job, Irina.\nHe's going to live.\nI hope so.\nHe'll be a real swine if he dies.\nIrina, you should have been born a man!\nI feel pretty good as a woman.\nVeronica, why are you so early?\nThe clock was fast.\nPoor girl.\nI'll never forgive what she did to Boris.\nHere comes another batch!\nI've told you already, we're full!\nThis is a hospital, not a sardine can!\nWhere are they all from?\nKalach?\n- Stalingrad.\nSome from the front, some from the hospital.\nThere's no room.\nDon't worry, they'll make room.\nI'll take 80 men.\nThe rest will have to go to other hospitals.\nNow, then... give my regards to Uncle Sergei,\nFyodor, Vassily,\nAunt Marya, Agrafena,\nKaterina, Varvara,\nNikolai,\nKaterina.\nYou already said Katerina.\nThis is a different Katerina.\n- Then you should say so.\n- It's okay.\nThey'll figure it out.\nSo...\nZinaida,\nAntonina, Kuzma...\nNurse!\nWhat's the matter, Vorobyev?\nNothing.\nI want the nurse.\nHe needs the bedpan.\nI'll get it for you.\nThank you.\nThat's lovely music.\nTurn up the radio, please.\nTurn off that music!\nTurn that music off!\nYou hear me?\nWho yelled?\nI did!\nWhat's it to you?\n- Zakharov, what's wrong?\n- Go away!\nHe's losing his mind.\nHe got word from home this morning.\nHis girlfriend didn't wait for him.\nShe married someone else, the bitch.\nHe hasn't eaten all day.\nTry to comfort him.\nBroads like that are worse than fascists.\nThey aim right at the heart.\nYou have to eat, Zakharov, or you won't get well.\nI don't want to get well!\nI want to die!\nCall the doctor!\nCalm down.\nAll because of some broad!\nCall the doctor!\nQuit yelling!\nShut up!\nWhere will they take us now?\nThere are plenty of hospitals in the world.\nThe head doctor's coming, boys!\nStop it this minute!\nYou're still a soldier in the Red Army!\nAre you trying to get discharged?\nAre you afraid we'll heal your hands and send you back to the front?\nNo, Doctor, he's not like that.\nHe got a letter.\n- I know.\nThat's just an excuse.\nBig deal!\nSo your bride ran off.\nYou should be glad!\nShe isn't worth a penny if she would trade a handsome guy like you, a real hero, for some rat sitting out the war at home!\nIt's she who's forfeited her happiness, not you!\nAnd that's what she deserves.\nThat's right.\nShe's got a petty soul.\nPeople like her can't understand how much suffering we've gone through.\nKilling people like her would be too kind!\nYou stood up to Death itself.\nYou looked death in the face.\nYou approached it with your chest stuck out.\nAnd she couldn't even pass the little test of time.\nWomen like her deserve only our contempt.\nThere can be no forgiveness for them!\nBandage him up.\nAunt Sima, bring him some tea and porridge.\nDon't be a brat.\nVeronica...\nYou idiot!\nKeep an eye on your kid!\nAnd it would have been my fault!\nJust standing there with your mouth open like an idiot!\n- Whose boy are you?\n- Mama's.\n- Where are you from?\n- Voroshilovgrad.\n- How old are you?\n- Three months and three years.\nWhat's your name?\nBoris.\n- What?\n- Boris.\n- Why the fancy get-up?\n- A concert at the hospital.\n- Can't you tell a better lie?\n- All right, all right.\n- Is Mark here?\n- He is now.\n- Here.\n- Thank you, Anna.\nA little boy is having a birthday and I wanted to give him a present.\nYou are a kind man after all, Mark Alexandrovich.\n\"The symptoms of such compound fractures depend on the degree of changes in the joints, as well as on the location.\"\nInteresting, but unintelligible.\nWhy, I think it's quite clear.\nWhat's this?\nWhat kind of trick is this?\nWhat trick?\nHe lost his parents at the station.\nYou should have taken him to the shelter for lost kids.\nI don't want to go to the shelter!\nGo there yourself!\n- Rude child!\n- You're rude.\nQuiet, quiet.\nWe'll go find Mommy in Voroshilovgrad.\nStop that noise!\nIt's hurting my ears.\nHere, play with this cap!\nHere's a bagel for you.\n- My eardrums will burst!\n- We need to find a toy for him.\nIrina, take him for a minute.\nSo now I have to hold him too?\nHere, give him to me.\nCome to me, little one.\nI'll get you ready for bed.\nHas anyone seen my squirrel?\nMark took it.\nMark?\nWhere'd he take it?\nTo give to some little boy as a present.\nSome little boy?\n- Where's Mark?\n- I don't know.\n- Where's Mark?\n- I don't know.\nYou're hiding something from me.\nWhere did he go?\nYou know, don't you?\nWhere?\nProbably to see Antonina.\nWhat Antonina?\nAsk Mark.\n- Tell me.\n- Don't give me orders.\nMark... visits her occasionally.\nYou understand?\n- You're saying this to hurt me.\n- Why would I?\nJust to spite me!\nI'm loved.\nI have a husband.\nAnd you're still an old maid.\nShe lives in a small house near that large market.\nYou can check it out for yourself.\nIt's okay, it's okay.\nI have to do something, I have to do something.\nTalk to Mark when he comes back.\nYou should wait.\nWait?\nAlways waiting.\nI'm always waiting.\nI've had enough!\nWhat use are words\nLet lips fall silent\nSometimes\nThey tell lies\nThe eyes alone\nWill never dare\nTo lie to other eyes\nMy eyes are now\nDark and sad\nAs though someone\nHad blown out their flame\nIn Leningrad on my birthday, we'd take a car and go from one end of the city to the other.\nLet's go for a ride!\nIn these times, Antonina, a car is worth its weight in gold, and gasoline is rationed.\nAny kind of vehicle.\nI beg you!\nA fire engine, an ambulance, a truck.\nAnything you like.\nA ride against the forces of nature!\nJust the two of us?\nTo forget everything else.\nI'll try.\nI love you.\nSorry.\nI don't dance.\nI thought I had tried everything, but I've never tried golden nuts.\nLook, a message.\nA birthday note for me?\nSo it's for your birthday?\nWhere's my squirrel?\nDon't get the wrong idea.\nThere's a note from someone named Boris.\n\"My only love, happy birthday to you.\"\nOn this day you came into this world.\nIt's hard to leave you.\nBut what can we do?\nThis is war.\nThere's no way around it.\nWe can't continue living happily as we did before when death stalks our land.\nBut we'll be happy yet.\nI love you.\nI have faith in you.\nYour Boris.\nWhat are you so excited about?\nGo home.\nI'll be there soon.\nWhat's that for?\nTake your coat off.\nThank you.\nYou know, as usual all the Philharmonic's cars are taken, and I need one badly.\nYou're the head surgeon and all.\nSurely you won't refuse...\nWe're very short on vehicles.\nIt was hard to do what I did for you, but I did it.\nWhen you asked me to, I did my best.\nWhat did I ask?\nFor an exemption.\nIt's about to expire, and this time, getting a new one will be practically impossible.\n- What exemption?\n- For Mark Alexandrovich.\nDon't worry.\nNot a soul will know about this.\nIs it possible he lied to both of us?\nHe even offered me money in your name.\nI'm sorry.\nVery good.\nUncle Fyodor,\nI turn to you for help.\nHer behavior's impossible.\nShe stormed into a stranger's place, started a fight...\nShut the door.\nDo you think anyone wants to send his son to war?\nWhat are you talking about?\nOr do you think others must pay for your welfare, for your life, with their hands, their legs, their eyes, their lives,\nand you owe nothing to anyone?\nI have an exemption, Uncle Fedya.\nAn exemption?\nTell me, how did you get it?\nWhy are you doing this?\nIt's okay.\nI'll rent a room, I'll take Boris...\nPerhaps someone else had better rent himself a room.\nGladly!\nI've thought about doing that for a long time.\nWhy didn't you throw me out in the first place?\nYou've been through a terrible ordeal.\nOnly someone without a heart could reproach you.\nStay with us.\nI can't.\nI don't want to hide behind someone else's back.\nI won't!\nThink it over.\nCould you tell me where the Borozdins live?\nThey live here.\nWhich of them do you want to see?\n- Fyodor Ivanovich.\nHe's not home.\nDid Boris send you?\nWhat Boris?\nNo, I came on my own.\nI must speak to Fyodor Ivanovich.\n- Have a seat.\n- Thank you.\nHe'll be home soon.\n- May I go for a walk?\n- You may.\nIs he yours?\nHe looks like you.\nAre you a relation of the Borozdins?\nNot exactly.\nYou see, I'm out of the army.\nGoing home?\nIt's unlikely.\nThere's still a blockade around Leningrad.\nI'm in a difficult situation.\n- What is it?\n- It's easy to tell you.\nYou're not part of the family.\nFyodor Ivanovich's son was killed.\nWhere?\nWest of Smolensk.\nWhat shall I play for you?\nWhatever you like.\nDid you see him buried?\nNo.\nI was injured and they carried me away on a stretcher, but a friend of his, Stepan, went up to him.\nNow I have to find his girlfriend.\nHe loved her very much.\nThat's me.\nVladimir, come to see us if you're ever in Moscow.\nThank you.\nI'll do that.\nThe war's over.\nStrange, isn't it?\nAnd you're still waiting?\nYes, I am.\nOne must always hope for the best.\nWhy do you delude yourself?\nI saw it with my own eyes.\nWhat did you see?\nHow he was wounded?\nHow he fell?\nBut you didn't see him die with your own eyes.\nNo... but why haven't you heard from him?\nA lot of things could have happened.\nThere's no word from Stepan either.\nAt the factory they know he's in some special unit and will be back soon.\nDasha promised to tell me when he's back.\nBoris is alive.\nHe's alive.\n- Look, here they come!\n- The victors are coming!\nBoris!\n- Veronica!\n- Stepan!\nFlowers for you.\nWell?\nWhat?\nYou see...\nHere.\nDear mothers, fathers, sisters and brothers!\nThe happiness of our reunion is immeasurable.\nThe heart of every Soviet citizen is filled with joy.\nJoy sings in our hearts.\nIt is victory that has brought us this joy.\nWe have all waited for this moment.\nEveryone's dizzy with happiness.\nBut we shall not forget those left behind on the battlefield.\nTime will pass.\nTowns and villages will be rebuilt.\nOur wounds will heal.\nBut our fierce hatred of war will never diminish!\nWe share the grief of those who cannot meet their loved ones today, and we will do everything to insure that sweethearts are never again parted by war, that mothers need never again fear for their children's lives,\nthat fathers need never again choke back hidden tears.\nWe have won, and we shall live not to destroy, but to build a new life!\nWhy are you just standing there?\nGive your flowers to whomever they're for.\nThank you, sister.\nMy beautiful granddaughter!\nLook, look!\nCranes are flying over Moscow!\nTHE END\nStop, Squirrel.\nPut them on.\nLook!\n\"Cranes like ships, sailing in the sky\nWhite ones, grey ones With long beaks they fly\"\nLook, look!\nThere you go.\nYou and your \"cranes like ships.\"\nTHE CRANES ARE FLYI NG\nScreenplay V. ROZOV\nDirector M. KALATOZOV\nCinematography S. URUSEVSKY\nSTARRI NG\nVeronica T. SAMOI LOVA\nBoris A. BATALOV\nFyodor Ivanovich V. MERKURYEV\nMark A. SHVORI N\nA PRODUCTION OF MOSFI LM 1957\nWho's there?\nWait.\nWell, okay.\nWhen?\n- Thursday, at the embankment.\n- Come on, that's too long!\nSquirrel!\nWe haven't finished.\nSquirrel!\nWhen?\nWhat time on Thursday?\nNo, I can't.\nI'll be at the factory.\nOkay.\nDon't be late!\nSquirrel!\nShe's crazy about him.\nAnd he about her.\nThat's what love is, my dear:\na harmless mental illness.\nWhy aren't you in bed yet, Grandma?\nIt's already time to get up, Boris!\nQuit making noise!\nRunning around all night...\nYou're just jealous.\nDid you tear it?\nYour jacket's all in one piece.\nDisgraceful!\nTwelve o'clock, and he's still asleep.\nHe works a lot.\nHe's tired.\nLet him at least get some sleep on Sunday.\nThis \"work\" of his will end in a wedding.\nYou're just afraid of losing him.\nIrina's mind should be on her thesis, not on a wedding.\nWatch out, Uncle Fedya.\nShe almost has her doctorate and you're still just a physician.\nWell, if children don't surpass their parents, then the parents are bad and the children not much better.\nThanks, Mama.\nImportant announcement!\nWhat's going on?\nBoris!\nWar!\nYou hear me?\nWar!\nLeave me alone.\nHello.\nBoris is at the factory day and night.\nAre you waiting for him?\nI'm not waiting for anyone.\nVeronica.\nIn wartime, it's important not to lose your head.\nTry to live a normal life.\nLike me...\nI dream of dedicating a piano concerto to you.\nWill you come to hear it?\n- Won't you be drafted?\nDrafted?\nI don't know.\nI doubt it.\nAnd why is that?\nThe most talented people will be exempt.\n- And you suppose you're talented?\n- Yes.\nWhy are you always following me around?\nYou ought to be ashamed.\nI am.\nI promised myself a thousand times I wouldn't.\nI know Boris is my cousin, but I can't help myself!\nYou understand?\nI can't.\nWait!\nThere's no need to escort me.\nWatch out!\nYou'll hurt your leg.\nIt'll be harder at the front, my dear Boris.\nThey won't let you go to the front.\nThere will be only one exemption.\nEither for you or for me.\nThat's right.\nSo you should stay.\nYou've got knowledge and experience.\nAnd you've got something more important... talent.\nTake care of your drawings.\nYou know, my wife's already got my bags packed.\nWell, as they say, let's get our bayonets ready!\nStepan!\nExcuse me, Sachkov.\nWell?\nWhere's the notice?\nNothing yet.\nI don't understand why they're so slow.\nAre you going home?\n- No, I'm...\n- Oh, I see.\nWell, say hello to her!\n- I will.\nWhat?\n- Have you told her?\n- No.\nWhy should I rush it?\n- You're right.\nSee you tomorrow.\n- Take care!\n- Let go.\n- I won't let go.\nYou're gonna fall!\nLet go.\nYou'll tear the shade.\n- It's a blanket.\n- Let go.\nI'll call the police.\n- I'm tired of these blackouts!\nGive it to me!\n- You're gonna fall.\n- I am not.\nSquirrel, stop it.\nLet me hang this up.\nYou didn't come to the embankment today, but Mark did.\n- So?\n- He's handsome.\nSo?\n- Are you jealous?\n- What?\n- Are you jealous?\n- I don't have the time.\nToo bad.\nI think I'll enroll at the Architectural Institute.\n- They won't accept you.\n- Yes, they will.\nI doubt it.\nCranes like ships sailing in the sky\nWhite ones, grey ones with long beaks they fly\nDo you like my song?\nVery profound.\nLittle croaking frogs Why didn't you look up?\nYou kept on hopping and jumping That's why you got eaten up\nEaten!\nWell, hero, did you win?\nI won, I won.\nI won.\nDo you think you'll be drafted?\n- Of course.\n- Would you volunteer?\n- I might.\nNo, you won't!\nYou know very well you'll be exempt.\nThat's why you talk so big.\n- What makes you so sure?\n- I know.\nAll the smart ones will be exempt.\nSo only fools will fight?\nI don't want to discuss it any further.\nVeronica...\nI want to talk to you about something.\nWell, I don't.\nAnd please don't call me Veronica.\nWho am I?\n- Squirrel.\n- That's right.\nListen.\nWhat will you give me tomorrow?\nIt's a secret.\nIf it's something good to eat, I'll eat it and forget about it.\nGive me something I will always remember, for as long as I live.\nKiss me.\nYou know, when you're with me,\nI'm not afraid of anything, not even the war.\nI'm afraid of the police.\nVeronica.\nYou know what?\nDo you know?\nFor the wedding I'm going to make a white dress.\nLike the one my grandma had.\nAnd a long, long veil.\nAnd you'll wear a black suit, and we'll go...\n- To the registry office.\n- Agreed then?\n- Agreed.\nYou know, I like this blackout.\nWhat's so good about it?\nHey!\nStepan!\nI have a treat for you.\n- What is it?\n- It's a secret.\n- Did it arrive?\n- It did.\nWhy didn't you say so?\nTell me.\nThings are crazy at the factory!\nThe guys ran to the barber's.\nI went straight to your place.\n- Make it short.\n- Just wait.\nSo I was saying, the guys ran...\nListen, can't you make it shorter?\n- Your family's worried.\n- What time do we report?\nToday at 5:00.\nWith your things.\nLook at these cherries.\n- What is it?\n- Beautiful.\nThe notice came.\nReally?\nFor you?\nYes, for me too.\nWe both volunteered.\nWhat?\nYou volunteered?\nBut the notice came...\nWait.\nWhat about me?\nI'd better go home.\nI've got a lot going on there too.\nSquirrel.\nI didn't want to tell you.\nTomorrow's your birthday.\nI have to go.\nOf course.\nSquirrel.\nWhat's the matter?\nCranes like ships\nYou like my poem?\nNothing will happen to me.\nYou hear?\nAnd then you and I will live for a long, long time.\nA hundred years.\nGo.\nWe'll say good-bye later.\nAll right.\nDon't be late.\nCan't he stay home until tomorrow?\nHe's a swine if he's still at Veronica's.\nBoris!\n- Did Dad call?\n- Yes.\nHe's furious.\nWhy didn't you tell us?\nTo avoid scenes like this.\nGo to the factory tomorrow and turn these over to Kuzmin, the engineer.\nI will, I will.\nWhat are you stuffing in there?\nI'm running out for a bottle of wine.\nGrandma, do me a favor.\nJust a minute.\nWill they send you to the front right away?\nProbably.\nHere... wait a minute.\nEarly tomorrow morning take this to her.\nWhat is it?\nIt's her birthday tomorrow.\nAnd later, if things are hard for her...\nAfter all, this is war...\nHelp her out.\nAnd if I die?\nYou've got no business dying, especially now that you know so many secrets.\nI just might up and die.\nQuiet.\nThat's Veronica.\nNo, it's Irina.\nThank God, you're home.\nBoris!\nCome over here.\nWhat is this about?\nYou're 25 years old and you...\nforgive me... act like a fool!\nWhat are we?\nChildren?\nIs this a game?\nHide-and-seek?\nHe wants adventure!\nThere's character for you.\nWhere are Irina and Mark?\nIrina's making coffee.\nMark went out to buy some wine.\nCoffee, wine!\nWhat's wrong with people these days?\nIrina!\nBring me the bottle from the medicine cabinet.\nBoris!\nCome here.\nWhere's Veronica?\n- She'll be here any minute.\n- Where is she?\nShe's busy.\nThis isn't right.\nShe should be here.\nHer fiancé is leaving.\nI'm not her fiancé.\n- What are you, then?\n- We're just...\nYou're just what?\nThat sounds suspicious.\n- I don't mean it that way, Dad.\n- Then what do you mean?\n- Stop picking on me.\n- Wait!\n- Why are you bothering him?\n- Here.\nFrom the medicine cabinet.\n- Go ahead and mix it properly.\n- Here's the port.\nDrink it yourself.\nWe'll have a real drink.\nSo, is everybody here?\nSit down.\nIt's Veronica!\nGo meet your bride, Mr. Bridegroom!\nFinally!\n- We came from the factory to see Boris.\n- Please come in.\nAnd I thought the bride had arrived.\n- We're from the plant.\n- They told us to bring you these gifts.\nSorry.\nThis one.\n- On behalf of the Plant Committee...\n- And the Communist Youth League...\nWhat you want to say is:\n\"Comrade Boris, fight to the last drop of blood, and beat the fascists!\nAnd we at the plant will meet and exceed our production quotas.\"\nWe've heard all that before.\nWhy don't you sit down with us, girls, and drink to my son Boris!\nThings in this world aren't going as smoothly as we might like.\nSo now you're off to war, Boris...\n- Let's have a drink!\n- To you!\nA glass for Grandma.\nWe sent our brother off yesterday.\nMother cried and cried.\nWhat about you?\n- I cried too.\n- On behalf of the Plant Committee?\n- No, on my own.\n- Don't embarrass her.\nWe've got no one to send off.\nThere's just Mother and three girls.\nWe even felt a little ashamed, with all the others leaving...\nWhen our men come back, you'll envy us.\nThe trouble is not all of them will come back.\nFor those who don't, we'll build a monument reaching to the sky with every one of their names in gold.\nIrina, pour another round.\nWhat are you waiting for?\nI'll just put these away.\nWell, you folks in the rear, meet and exceed your quotas!\nGrandma, don't forget.\nMark, don't go.\nStay with Father.\n- I'll walk you to the trolley.\nAbout face!\nGuards, forward march!\n- Mother!\n- The last time.\nI'm sorry.\nNot in the mood for a drink?\nWhere are you going?\n- I'm going on duty.\nYou were on duty yesterday.\nVarvara Kapitanova, may I see Boris for just a moment?\n- He already left.\n- He left?\nWhere did he go?\n- To the assembly station.\n- Oh, no.\n- Come in.\n- Where's the assembly station?\n- I don't know.\n- What's this?\n- It's from Boris, for your birthday.\nThere's a note too.\n- Where's the note?\n- Isn't it there?\nHe must have forgotten in the rush.\nForgotten?\nHe'll write to you.\nWhere were you?\n- Where's the assembly station?\n- It's on Zvenigorodskaya.\nDon't worry.\nShe'll come.\nEven if she does, how will she find me in this crowd?\nWhat are you doing?\nBoris, where's Veronica?\nWrite to me every day.\nWho has the invoices for the cauliflower?\nDon't forget to send your field address.\nCheer up, pug-nose!\nTake care!\nFall in!\nShe'll come.\nBoris!\nFall in!\nForward march!\nThere's my kitten.\nGrandma?\nNothing?\nHe hasn't written to me either.\n- Anything?\n- No.\nOh, this war.\nWell, rain or shine, we must carry on.\nHave you decided where you'll work?\nI'll go to the war factory.\nCitizens!\nAir raid alert!\nHurry down to the subway.\nI've got some urgent work to do.\nGo get your things.\nWhere's the backpack?\n- The backpack?\nIt's right there.\nI won't go without you.\nIf it becomes dangerous, we'll go down to the shelter.\nGo now.\nBe careful in the subway.\nShe's so scared, poor girl!\n- What about you?\nWhen Veronica is safe and you're by my side, I'm not afraid.\nThey're still at it, the brutes.\nThose parasites won't even let us talk!\nFor some reason he doesn't write to me.\nIt's the war.\nThe mail is so slow.\nAll clear.\nThe air raid is over.\nLet's go.\nWell, my place is right here.\nIf you decide to come join us, call me at the factory.\n- Okay.\n- Good-bye.\nWhere are you going?\nGet back!\nWhere do you think you're going?\nI'm sorry.\nVeronica, you'll stay with us from now on.\nBoris' room is free for now.\nMark will share a room with Fedya.\nMark, we must take good care of her.\nUnfortunately, Irina and I are at the hospital day and night.\nI'll try, Uncle Fedya.\nBoris spoke to me about it.\nAre you all right now?\nIs this the factory?\nMay I speak to Kuzmin, please?\nHe's gone to the front too?\nExcuse me.\nIs there any news from Boris Borozdin?\nIf it weren't for the damned war,\nI'd be playing this at Tchaikovsky Hall.\nFor you.\n- Veronica, let's go to the subway.\n- I'm not going.\n- That's nonsense!\nLet's go.\n- Are you afraid?\nOnly for your sake.\nCome on, let's go.\nI'm not afraid of anything.\nVeronica, let's go!\nDon't be foolish.\nYou're acting crazy!\nI won't go!\nI won't, I won't, I won't!\nI love you.\nNo.\nI love you.\nI love you.\nI love you!\n- Go away!\nI love you.\nWhat a stupid way to get surrounded.\n- Stepan, stop whining.\n- What do you mean, stop whining?\nThe captain said we might break through by tonight.\n- At last!\nSachkov!\n- Here!\nWhere's this rookie from?\nStraight from an incubator.\nA fresh reinforcement.\nNow we'll break through for sure.\nIs that any way to speak to a married man?\n- Is that right?\n- I got married in school.\nSee what education does to people.\nYou funny guys, always joking!\nLaughed yourselves right into a trap.\nVolodka, are you really married?\nAre you kidding?\nSounds better, though, doesn't it?\nBorozdin!\nYou'll go out on reconnaissance.\nYour job is to find the best place to break through.\nTurn over your papers.\n- Yes, sir.\nHey, Sachkov!\nCome on, help me here.\nLet's take a break, guys, and have a smoke.\nShe's always laughing like that.\n- They must think we're dead.\nLet me see that beauty.\nYep, the life of a soldier.\nYou're over here, and she's...\nAnd she's what?\nGive me the harmonica.\nSachkov, hold it for a second!\nStop it!\nAren't you ashamed?\n- No.\nFive days' arrest.\nYou'll both go on reconnaissance.\nTurn in your papers.\nBoris, here.\nBecause of her?\nShe's worth fighting for.\n- Exactly.\nStop that chatter!\nDiscipline!\nHear that?\nDiscipline.\nStepan, hold on to this.\nJust don't lose it.\nWe're getting married, Uncle Fedya.\nI forgot...\nI still have some sausage.\n- Keep your head down.\n- Stop giving me orders.\n- Let's get out of here or they'll get us.\n- Run if you're scared.\nYou idiot!\nHey, you!\nMusician!\nYou deaf?\nHow the hell did I get stuck with him?\nWhat's wrong?\nHey, you!\nGo on alone.\nI want to rest for a bit.\n- Are you wounded?\nHold on to me.\n- Leave me alone.\nHold on to me, I said, and hold on tight!\nHere, get on my back.\nIt'll be faster this way.\nLeave me here.\n- Idiot!\nYou're sore because I punched you.\n- You were just lucky l...\nShut up.\nWe'll settle it later.\nHold on, hold on.\nA little further to the woods, and then we're safe.\nI'm tired.\nLet's rest a bit.\nIt's quieter here.\nSo, are you alive?\n- It's a little hard to breathe.\n- To breathe?\nWe'll dance at your wedding yet.\nHey, buddy!\nWhat's the matter?\nForgive me.\nForgive me.\nForgive me, friend!\nHey, somebody, help!\nHelp!\nHelp!\nBoris!\nWhat's wrong, Boris?\nAre you wounded?\nI'm not wounded.\nI...\nThe Soviet Information Bureau reports no important changes on the fronts in the last 2 4 hours.\nNo important changes.\nThat's good.\nFamilies evacuated with Moscow Plant 3 26 will be quartered on Vostaniya Street.\nComrades, report here.\nIrina, help this wounded man.\n- The paramedics will be here soon.\n- Yes.\nUnload!\nSiberia.\nWe can't retreat much farther.\nThis is what's become of Mother Russia.\nAttention, attention!\nChief of Hospital Number 4, Borozdin, report to the military commandant.\nPerhaps we'll find some peace here.\nClear the way, folks.\nThe stove is smoking.\nI'm sorry.\nYou can daydream when the war is over.\nWhere are you going?\nTo the hospital.\nI'm on duty.\nShe wanders around like a ghost, all nerves.\nShe's always waiting for a letter.\nFrom whom?\nHer husband's right here.\nNot like us, soldiers' wives.\nShe's not waiting for a letter from anyone.\n- Are you on the second shift at school?\n- Yes.\n\"Cranes like ships sailing in the sky.\"\nThose silly lines are stuck in my head.\nThere it is.\n- What?\nThe mail.\nIf I can count up to 50, there'll be a letter for me.\n- Veronica, this is crazy.\n...16, 17, 18, 19 20, 21...\n- Stop!\n...45, 46, 47...\n- Hello.\n- Hello.\nThere's nothing for you.\nFor you.\nLededeva?\n- That's me.\n- Palyukaitis?\n- Nothing.\nFrom my eldest son on the Ukrainian front.\nI didn't know Boris, but everyone says he was a gifted young man.\nWas?\nMissing doesn't mean dead.\nOf course not.\nThat didn't come out right.\nWhat's the matter, Veronica?\nI'm dying, Anna Mikhailovna.\nMy dear, what are you saying?\n- I've lost everything.\n- You have your life ahead of you.\nI don't want to live!\nWhat's the use?\n- Forget the past.\nIt's human nature to forget.\nI don't want to forget.\nThere's nothing I need to forget.\nYou mustn't punish yourself forever.\nI must.\nTill the end.\nYou teach history.\nYou're an intelligent woman.\nTell me:\nWhat is the meaning of life?\nThe meaning of life?\nPerhaps it's that...\nWas Chernov here?\nNo.\nBoy, am I hungry!\nIf Chernov comes, try to be polite.\nHe's revolting.\nI may find him even more revolting than you do, but he's the boss.\nWhy do you always kiss up to him?\nDear Veronica, you're impossible.\nYou're always so irritable, and you keep picking on me.\nTell me what I can do for you.\nI wish you had never been born.\nCome in!\n- I hope I'm not intruding.\n- We're always happy to see you.\nMake yourself comfortable.\nDid you hear?\nThe Germans have advanced in the Caucasus.\nIt's awful.\nBut don't worry.\nWe'll show them yet.\nPlease, make yourself comfortable.\nYour place is cozy.\nMy wife and children are in Tashkent, so I live like a homeless tramp.\nHello, Veronica.\n- Where are you going, dearest?\n- I'm on duty at the hospital.\n- Bundle up.\nIt's very cold.\nI admire your wife.\nShe's always so candid, so pure.\nShe must be very happy with you.\nI looked for you today at the Philharmonic.\n- Was there a concert?\n- No.\nWill you be at the birthday party tonight?\nProbably.\n- What will you take for a gift?\n- What can I give?\nYes... the war.\nIt's nothing great, but attach a little something to it and I'm sure Antonina will be very happy.\nIt's wonderful.\nHow much do I owe you?\n- It's nothing.\nDon't mention it.\n- Thanks very much.\nMark, I have a favor to ask.\nIs there anyone upstairs?\nNo.\nDo you think you could ask Fyodor Ivanovich for some medicine?\nGood job, Irina.\nHe's going to live.\nI hope so.\nHe'll be a real swine if he dies.\nIrina, you should have been born a man!\nI feel pretty good as a woman.\nVeronica, why are you so early?\nThe clock was fast.\nPoor girl.\nI'll never forgive what she did to Boris.\nHere comes another batch!\nI've told you already, we're full!\nThis is a hospital, not a sardine can!\nWhere are they all from?\nKalach?\n- Stalingrad.\nSome from the front, some from the hospital.\nThere's no room.\nDon't worry, they'll make room.\nI'll take 80 men.\nThe rest will have to go to other hospitals.\nNow, then... give my regards to Uncle Sergei,\nFyodor, Vassily,\nAunt Marya, Agrafena,\nKaterina, Varvara,\nNikolai,\nKaterina.\nYou already said Katerina.\nThis is a different Katerina.\n- Then you should say so.\n- It's okay.\nThey'll figure it out.\nSo...\nZinaida,\nAntonina, Kuzma...\nNurse!\nWhat's the matter, Vorobyev?\nNothing.\nI want the nurse.\nHe needs the bedpan.\nI'll get it for you.\nThank you.\nThat's lovely music.\nTurn up the radio, please.\nTurn off that music!\nTurn that music off!\nYou hear me?\nWho yelled?\nI did!\nWhat's it to you?\n- Zakharov, what's wrong?\n- Go away!\nHe's losing his mind.\nHe got word from home this morning.\nHis girlfriend didn't wait for him.\nShe married someone else, the bitch.\nHe hasn't eaten all day.\nTry to comfort him.\nBroads like that are worse than fascists.\nThey aim right at the heart.\nYou have to eat, Zakharov, or you won't get well.\nI don't want to get well!\nI want to die!\nCall the doctor!\nCalm down.\nAll because of some broad!\nCall the doctor!\nQuit yelling!\nShut up!\nWhere will they take us now?\nThere are plenty of hospitals in the world.\nThe head doctor's coming, boys!\nStop it this minute!\nYou're still a soldier in the Red Army!\nAre you trying to get discharged?\nAre you afraid we'll heal your hands and send you back to the front?\nNo, Doctor, he's not like that.\nHe got a letter.\n- I know.\nThat's just an excuse.\nBig deal!\nSo your bride ran off.\nYou should be glad!\nShe isn't worth a penny if she would trade a handsome guy like you, a real hero, for some rat sitting out the war at home!\nIt's she who's forfeited her happiness, not you!\nAnd that's what she deserves.\nThat's right.\nShe's got a petty soul.\nPeople like her can't understand how much suffering we've gone through.\nKilling people like her would be too kind!\nYou stood up to Death itself.\nYou looked death in the face.\nYou approached it with your chest stuck out.\nAnd she couldn't even pass the little test of time.\nWomen like her deserve only our contempt.\nThere can be no forgiveness for them!\nBandage him up.\nAunt Sima, bring him some tea and porridge.\nDon't be a brat.\nVeronica...\nYou idiot!\nKeep an eye on your kid!\nAnd it would have been my fault!\nJust standing there with your mouth open like an idiot!\n- Whose boy are you?\n- Mama's.\n- Where are you from?\n- Voroshilovgrad.\n- How old are you?\n- Three months and three years.\nWhat's your name?\nBoris.\n- What?\n- Boris.\n- Why the fancy get-up?\n- A concert at the hospital.\n- Can't you tell a better lie?\n- All right, all right.\n- Is Mark here?\n- He is now.\n- Here.\n- Thank you, Anna.\nA little boy is having a birthday and I wanted to give him a present.\nYou are a kind man after all, Mark Alexandrovich.\n\"The symptoms of such compound fractures depend on the degree of changes in the joints, as well as on the location.\"\nInteresting, but unintelligible.\nWhy, I think it's quite clear.\nWhat's this?\nWhat kind of trick is this?\nWhat trick?\nHe lost his parents at the station.\nYou should have taken him to the shelter for lost kids.\nI don't want to go to the shelter!\nGo there yourself!\n- Rude child!\n- You're rude.\nQuiet, quiet.\nWe'll go find Mommy in Voroshilovgrad.\nStop that noise!\nIt's hurting my ears.\nHere, play with this cap!\nHere's a bagel for you.\n- My eardrums will burst!\n- We need to find a toy for him.\nIrina, take him for a minute.\nSo now I have to hold him too?\nHere, give him to me.\nCome to me, little one.\nI'll get you ready for bed.\nHas anyone seen my squirrel?\nMark took it.\nMark?\nWhere'd he take it?\nTo give to some little boy as a present.\nSome little boy?\n- Where's Mark?\n- I don't know.\n- Where's Mark?\n- I don't know.\nYou're hiding something from me.\nWhere did he go?\nYou know, don't you?\nWhere?\nProbably to see Antonina.\nWhat Antonina?\nAsk Mark.\n- Tell me.\n- Don't give me orders.\nMark... visits her occasionally.\nYou understand?\n- You're saying this to hurt me.\n- Why would I?\nJust to spite me!\nI'm loved.\nI have a husband.\nAnd you're still an old maid.\nShe lives in a small house near that large market.\nYou can check it out for yourself.\nIt's okay, it's okay.\nI have to do something, I have to do something.\nTalk to Mark when he comes back.\nYou should wait.\nWait?\nAlways waiting.\nI'm always waiting.\nI've had enough!\nWhat use are words\nLet lips fall silent\nSometimes\nThey tell lies\nThe eyes alone\nWill never dare\nTo lie to other eyes\nMy eyes are now\nDark and sad\nAs though someone\nHad blown out their flame\nIn Leningrad on my birthday, we'd take a car and go from one end of the city to the other.\nLet's go for a ride!\nIn these times, Antonina, a car is worth its weight in gold, and gasoline is rationed.\nAny kind of vehicle.\nI beg you!\nA fire engine, an ambulance, a truck.\nAnything you like.\nA ride against the forces of nature!\nJust the two of us?\nTo forget everything else.\nI'll try.\nI love you.\nSorry.\nI don't dance.\nI thought I had tried everything, but I've never tried golden nuts.\nLook, a message.\nA birthday note for me?\nSo it's for your birthday?\nWhere's my squirrel?\nDon't get the wrong idea.\nThere's a note from someone named Boris.\n\"My only love, happy birthday to you.\"\nOn this day you came into this world.\nIt's hard to leave you.\nBut what can we do?\nThis is war.\nThere's no way around it.\nWe can't continue living happily as we did before when death stalks our land.\nBut we'll be happy yet.\nI love you.\nI have faith in you.\nYour Boris.\nWhat are you so excited about?\nGo home.\nI'll be there soon.\nWhat's that for?\nTake your coat off.\nThank you.\nYou know, as usual all the Philharmonic's cars are taken, and I need one badly.\nYou're the head surgeon and all.\nSurely you won't refuse...\nWe're very short on vehicles.\nIt was hard to do what I did for you, but I did it.\nWhen you asked me to, I did my best.\nWhat did I ask?\nFor an exemption.\nIt's about to expire, and this time, getting a new one will be practically impossible.\n- What exemption?\n- For Mark Alexandrovich.\nDon't worry.\nNot a soul will know about this.\nIs it possible he lied to both of us?\nHe even offered me money in your name.\nI'm sorry.\nVery good.\nUncle Fyodor,\nI turn to you for help.\nHer behavior's impossible.\nShe stormed into a stranger's place, started a fight...\nShut the door.\nDo you think anyone wants to send his son to war?\nWhat are you talking about?\nOr do you think others must pay for your welfare, for your life, with their hands, their legs, their eyes, their lives,\nand you owe nothing to anyone?\nI have an exemption, Uncle Fedya.\nAn exemption?\nTell me, how did you get it?\nWhy are you doing this?\nIt's okay.\nI'll rent a room, I'll take Boris...\nPerhaps someone else had better rent himself a room.\nGladly!\nI've thought about doing that for a long time.\nWhy didn't you throw me out in the first place?\nYou've been through a terrible ordeal.\nOnly someone without a heart could reproach you.\nStay with us.\nI can't.\nI don't want to hide behind someone else's back.\nI won't!\nThink it over.\nCould you tell me where the Borozdins live?\nThey live here.\nWhich of them do you want to see?\n- Fyodor Ivanovich.\nHe's not home.\nDid Boris send you?\nWhat Boris?\nNo, I came on my own.\nI must speak to Fyodor Ivanovich.\n- Have a seat.\n- Thank you.\nHe'll be home soon.\n- May I go for a walk?\n- You may.\nIs he yours?\nHe looks like you.\nAre you a relation of the Borozdins?\nNot exactly.\nYou see, I'm out of the army.\nGoing home?\nIt's unlikely.\nThere's still a blockade around Leningrad.\nI'm in a difficult situation.\n- What is it?\n- It's easy to tell you.\nYou're not part of the family.\nFyodor Ivanovich's son was killed.\nWhere?\nWest of Smolensk.\nWhat shall I play for you?\nWhatever you like.\nDid you see him buried?\nNo.\nI was injured and they carried me away on a stretcher, but a friend of his, Stepan, went up to him.\nNow I have to find his girlfriend.\nHe loved her very much.\nThat's me.\nVladimir, come to see us if you're ever in Moscow.\nThank you.\nI'll do that.\nThe war's over.\nStrange, isn't it?\nAnd you're still waiting?\nYes, I am.\nOne must always hope for the best.\nWhy do you delude yourself?\nI saw it with my own eyes.\nWhat did you see?\nHow he was wounded?\nHow he fell?\nBut you didn't see him die with your own eyes.\nNo... but why haven't you heard from him?\nA lot of things could have happened.\nThere's no word from Stepan either.\nAt the factory they know he's in some special unit and will be back soon.\nDasha promised to tell me when he's back.\nBoris is alive.\nHe's alive.\n- Look, here they come!\n- The victors are coming!\nBoris!\n- Veronica!\n- Stepan!\nFlowers for you.\nWell?\nWhat?\nYou see...\nHere.\nDear mothers, fathers, sisters and brothers!\nThe happiness of our reunion is immeasurable.\nThe heart of every Soviet citizen is filled with joy.\nJoy sings in our hearts.\nIt is victory that has brought us this joy.\nWe have all waited for this moment.\nEveryone's dizzy with happiness.\nBut we shall not forget those left behind on the battlefield.\nTime will pass.\nTowns and villages will be rebuilt.\nOur wounds will heal.\nBut our fierce hatred of war will never diminish!\nWe share the grief of those who cannot meet their loved ones today, and we will do everything to insure that sweethearts are never again parted by war, that mothers need never again fear for their children's lives,\nthat fathers need never again choke back hidden tears.\nWe have won, and we shall live not to destroy, but to build a new life!\nWhy are you just standing there?\nGive your flowers to whomever they're for.\nThank you, sister.\nMy beautiful granddaughter!\nLook, look!\nCranes are flying over Moscow!\nTHE END\nStop, Squirrel.\nPut them on.\nLook!\n\"Cranes like ships, sailing in the sky\nWhite ones, grey ones With long beaks they fly\"\nLook, look!\nThere you go.\nYou and your \"cranes like ships.\"\nTHE CRANES ARE FLYI NG\nScreenplay V. ROZOV\nDirector M. KALATOZOV\nCinematography S. URUSEVSKY\nSTARRI NG\nVeronica T. SAMOI LOVA\nBoris A. BATALOV\nFyodor Ivanovich V. MERKURYEV\nMark A. SHVORI N\nA PRODUCTION OF MOSFI LM 1957\nWho's there?\nWait.\nWell, okay.\nWhen?\n- Thursday, at the embankment.\n- Come on, that's too long!\nSquirrel!\nWe haven't finished.\nSquirrel!\nWhen?\nWhat time on Thursday?\nNo, I can't.\nI'll be at the factory.\nOkay.\nDon't be late!\nSquirrel!\nShe's crazy about him.\nAnd he about her.\nThat's what love is, my dear:\nA harmless mental illness.\nWhy aren't you in bed yet, Grandma?\nIt's already time to get up, Boris!\nQuit making noise!\nRunning around all night...\nYou're just jealous.\nDid you tear it?\nYour jacket's all in one piece.\nDisgraceful!\nTwelve o'clock, and he's still asleep.\nHe works a lot.\nHe's tired.\nLet him at least get some sleep on Sunday.\nThis \"work\" of his will end in a wedding.\nYou're just afraid of losing him.\nIrina's mind should be on her thesis, not on a wedding.\nWatch out, Uncle Fedya.\nShe almost has her doctorate and you're still just a physician.\nWell, if children don't surpass their parents, then the parents are bad and the children not much better.\nThanks, Mama.\nImportant announcement!\nWhat's going on?\nBoris!\nWar!\nYou hear me?\nWar!\nLeave me alone.\nHello.\nBoris is at the factory day and night.\nAre you waiting for him?\nI'm not waiting for anyone.\nVeronica.\nIn wartime, it's important not to lose your head.\nTry to live a normal life.\nLike me...\nI dream of dedicating a piano concerto to you.\nWill you come to hear it?\n- Won't you be drafted?\nDrafted?\nI don't know.\nI doubt it.\nAnd why is that?\nThe most talented people will be exempt.\n- And you suppose you're talented?\n- Yes.\nWhy are you always following me around?\nYou ought to be ashamed.\nI am.\nI promised myself a thousand times I wouldn't.\nI know Boris is my cousin, but I can't help myself!\nYou understand?\nI can't.\nWait!\nThere's no need to escort me.\nWatch out!\nYou'll hurt your leg.\nIt'll be harder at the front, my dear Boris.\nThey won't let you go to the front.\nThere will be only one exemption.\nEither for you or for me.\nThat's right.\nSo you should stay.\nYou've got knowledge and experience.\nAnd you've got something more important... talent.\nTake care of your drawings.\nYou know, my wife's already got my bags packed.\nWell, as they say, let's get our bayonets ready!\nStepan!\nExcuse me, Sachkov.\nWell?\nWhere's the notice?\nNothing yet.\nI don't understand why they're so slow.\nAre you going home?\n- No, I'm...\n- Oh, I see.\nWell, say hello to her!\n- I will.\nWhat?\n- Have you told her?\n- No.\nWhy should I rush it?\n- You're right.\nSee you tomorrow.\n- Take care!\n- Let go.\n- I won't let go.\nYou're gonna fall!\nLet go.\nYou'll tear the shade.\n- It's a blanket.\n- Let go.\nI'll call the police.\n- I'm tired of these blackouts!\nGive it to me!\n- You're gonna fall.\n- I am not.\nSquirrel, stop it.\nLet me hang this up.\nYou didn't come to the embankment today, but Mark did.\n- So?\n- He's handsome.\nSo?\n- Are you jealous?\n- What?\n- Are you jealous?\n- I don't have the time.\nToo bad.\nI think I'll enroll at the Architectural Institute.\n- They won't accept you.\n- Yes, they will.\nI doubt it.\nCranes like ships sailing in the sky\nWhite ones, grey ones with long beaks they fly\nDo you like my song?\nVery profound.\nLittle croaking frogs Why didn't you look up?\nYou kept on hopping and jumping That's why you got eaten up\nEaten!\nWell, hero, did you win?\nI won, I won.\nI won.\nDo you think you'll be drafted?\n- Of course.\n- Would you volunteer?\n- I might.\nNo, you won't!\nYou know very well you'll be exempt.\nThat's why you talk so big.\n- What makes you so sure?\n- I know.\nAll the smart ones will be exempt.\nSo only fools will fight?\nI don't want to discuss it any further.\nVeronica...\nI want to talk to you about something.\nWell, I don't.\nAnd please don't call me Veronica.\nWho am I?\n- Squirrel.\n- That's right.\nListen.\nWhat will you give me tomorrow?\nIt's a secret.\nIf it's something good to eat, I'll eat it and forget about it.\nGive me something I will always remember, for as long as I live.\nKiss me.\nYou know, when you're with me,\nI'm not afraid of anything, not even the war.\nI'm afraid of the police.\nVeronica.\nYou know what?\nDo you know?\nFor the wedding I'm going to make a white dress.\nLike the one my grandma had.\nAnd a long, long veil.\nAnd you'll wear a black suit, and we'll go...\n- To the registry office.\n- Agreed then?\n- Agreed.\nYou know, I like this blackout.\nWhat's so good about it?\nHey!\nStepan!\nI have a treat for you.\n- What is it?\n- It's a secret.\n- Did it arrive?\n- It did.\nWhy didn't you say so?\nTell me.\nThings are crazy at the factory!\nThe guys ran to the barber's.\nI went straight to your place.\n- Make it short.\n- Just wait.\nSo I was saying, the guys ran...\nListen, can't you make it shorter?\n- Your family's worried.\n- What time do we report?\nToday at 5:00.\nWith your things.\nLook at these cherries.\n- What is it?\n- Beautiful.\nThe notice came.\nReally?\nFor you?\nYes, for me too.\nWe both volunteered.\nWhat?\nYou volunteered?\nBut the notice came...\nWait.\nWhat about me?\nI'd better go home.\nI've got a lot going on there too.\nSquirrel.\nI didn't want to tell you.\nTomorrow's your birthday.\nI have to go.\nOf course.\nSquirrel.\nWhat's the matter?\nCranes like ships\nYou like my poem?\nNothing will happen to me.\nYou hear?\nAnd then you and I will live for a long, long time.\nA hundred years.\nGo.\nWe'll say good-bye later.\nAll right.\nDon't be late.\nCan't he stay home until tomorrow?\nHe's a swine if he's still at Veronica's.\nBoris!\n- Did Dad call?\n- Yes.\nHe's furious.\nWhy didn't you tell us?\nTo avoid scenes like this.\nGo to the factory tomorrow and turn these over to Kuzmin, the engineer.\nI will, I will.\nWhat are you stuffing in there?\nI'm running out for a bottle of wine.\nGrandma, do me a favor.\nJust a minute.\nWill they send you to the front right away?\nProbably.\nHere... wait a minute.\nEarly tomorrow morning take this to her.\nWhat is it?\nIt's her birthday tomorrow.\nAnd later, if things are hard for her...\nAfter all, this is war...\nHelp her out.\nAnd if I die?\nYou've got no business dying, especially now that you know so many secrets.\nI just might up and die.\nQuiet.\nThat's Veronica.\nNo, it's Irina.\nThank God, you're home.\nBoris!\nCome over here.\nWhat is this about?\nYou're 25 years old and you...\nforgive me... act like a fool!\nWhat are we?\nChildren?\nIs this a game?\nHide-and-seek?\nHe wants adventure!\nThere's character for you.\nWhere are Irina and Mark?\nIrina's making coffee.\nMark went out to buy some wine.\nCoffee, wine!\nWhat's wrong with people these days?\nIrina!\nBring me the bottle from the medicine cabinet.\nBoris!\nCome here.\nWhere's Veronica?\n- She'll be here any minute.\n- Where is she?\nShe's busy.\nThis isn't right.\nShe should be here.\nHer fiancé is leaving.\nI'm not her fiancé.\n- What are you, then?\n- We're just...\nYou're just what?\nThat sounds suspicious.\n- I don't mean it that way, Dad.\n- Then what do you mean?\n- Stop picking on me.\n- Wait!\n- Why are you bothering him?\n- Here.\nFrom the medicine cabinet.\n- Go ahead and mix it properly.\n- Here's the port.\nDrink it yourself.\nWe'll have a real drink.\nSo, is everybody here?\nSit down.\nIt's Veronica!\nGo meet your bride, Mr. Bridegroom!\nFinally!\n- We came from the factory to see Boris.\n- Please come in.\nAnd I thought the bride had arrived.\n- We're from the plant.\n- They told us to bring you these gifts.\nSorry.\nThis one.\n- On behalf of the Plant Committee...\n- And the Communist Youth League...\nWhat you want to say is:\n\"Comrade Boris, fight to the last drop of blood, and beat the fascists!\nAnd we at the plant will meet and exceed our production quotas.\"\nWe've heard all that before.\nWhy don't you sit down with us, girls, and drink to my son Boris!\nThings in this world aren't going as smoothly as we might like.\nSo now you're off to war, Boris...\n- Let's have a drink!\n- To you!\nA glass for Grandma.\nWe sent our brother off yesterday.\nMother cried and cried.\nWhat about you?\n- I cried too.\n- On behalf of the Plant Committee?\n- No, on my own.\n- Don't embarrass her.\nWe've got no one to send off.\nThere's just Mother and three girls.\nWe even felt a little ashamed, with all the others leaving...\nWhen our men come back, you'll envy us.\nThe trouble is not all of them will come back.\nFor those who don't, we'll build a monument reaching to the sky with every one of their names in gold.\nIrina, pour another round.\nWhat are you waiting for?\nI'll just put these away.\nWell, you folks in the rear, meet and exceed your quotas!\nGrandma, don't forget.\nMark, don't go.\nStay with Father.\n- I'll walk you to the trolley.\nAbout face!\nGuards, forward march!\n- Mother!\n- The last time.\nI'm sorry.\nNot in the mood for a drink?\nWhere are you going?\n- I'm going on duty.\nYou were on duty yesterday.\nVarvara Kapitanova, may I see Boris for just a moment?\n- He already left.\n- He left?\nWhere did he go?\n- To the assembly station.\n- Oh, no.\n- Come in.\n- Where's the assembly station?\n- I don't know.\n- What's this?\n- It's from Boris, for your birthday.\nThere's a note too.\n- Where's the note?\n- Isn't it there?\nHe must have forgotten in the rush.\nForgotten?\nHe'll write to you.\nWhere were you?\n- Where's the assembly station?\n- It's on Zvenigorodskaya.\nDon't worry.\nShe'll come.\nEven if she does, how will she find me in this crowd?\nWhat are you doing?\nBoris, where's Veronica?\nWrite to me every day.\nWho has the invoices for the cauliflower?\nDon't forget to send your field address.\nCheer up, pug-nose!\nTake care!\nFall in!\nShe'll come.\nBoris!\nFall in!\nForward march!\nThere's my kitten.\nGrandma?\nNothing?\nHe hasn't written to me either.\n- Anything?\n- No.\nOh, this war.\nWell, rain or shine, we must carry on.\nHave you decided where you'll work?\nI'll go to the war factory.\nCitizens!\nAir raid alert!\nHurry down to the subway.\nI've got some urgent work to do.\nGo get your things.\nWhere's the backpack?\n- The backpack?\nIt's right there.\nI won't go without you.\nIf it becomes dangerous, we'll go down to the shelter.\nGo now.\nBe careful in the subway.\nShe's so scared, poor girl!\n- What about you?\nWhen Veronica is safe and you're by my side, I'm not afraid.\nThey're still at it, the brutes.\nThose parasites won't even let us talk!\nFor some reason he doesn't write to me.\nIt's the war.\nThe mail is so slow.\nAll clear.\nThe air raid is over.\nLet's go.\nWell, my place is right here.\nIf you decide to come join us, call me at the factory.\n- Okay.\n- Good-bye.\nWhere are you going?\nGet back!\nWhere do you think you're going?\nI'm sorry.\nVeronica, you'll stay with us from now on.\nBoris' room is free for now.\nMark will share a room with Fedya.\nMark, we must take good care of her.\nUnfortunately, Irina and I are at the hospital day and night.\nI'll try, Uncle Fedya.\nBoris spoke to me about it.\nAre you all right now?\nIs this the factory?\nMay I speak to Kuzmin, please?\nHe's gone to the front too?\nExcuse me.\nIs there any news from Boris Borozdin?\nIf it weren't for the damned war,\nI'd be playing this at Tchaikovsky Hall.\nFor you.\n- Veronica, let's go to the subway.\n- I'm not going.\n- That's nonsense!\nLet's go.\n- Are you afraid?\nOnly for your sake.\nCome on, let's go.\nI'm not afraid of anything.\nVeronica, let's go!\nDon't be foolish.\nYou're acting crazy!\nI won't go!\nI won't, I won't, I won't!\nI love you.\nNo.\nI love you.\nI love you.\nI love you!\n- Go away!\nI love you.\nWhat a stupid way to get surrounded.\n- Stepan, stop whining.\n- What do you mean, stop whining?\nThe captain said we might break through by tonight.\n- At last!\nSachkov!\n- Here!\nWhere's this rookie from?\nStraight from an incubator.\nA fresh reinforcement.\nNow we'll break through for sure.\nIs that any way to speak to a married man?\n- Is that right?\n- I got married in school.\nSee what education does to people.\nYou funny guys, always joking!\nLaughed yourselves right into a trap.\nVolodka, are you really married?\nAre you kidding?\nSounds better, though, doesn't it?\nBorozdin!\nYou'll go out on reconnaissance.\nYour job is to find the best place to break through.\nTurn over your papers.\n- Yes, sir.\nHey, Sachkov!\nCome on, help me here.\nLet's take a break, guys, and have a smoke.\nShe's always laughing like that.\n- They must think we're dead.\nLet me see that beauty.\nYep, the life of a soldier.\nYou're over here, and she's...\nAnd she's what?\nGive me the harmonica.\nSachkov, hold it for a second!\nStop it!\nAren't you ashamed?\n- No.\nFive days' arrest.\nYou'll both go on reconnaissance.\nTurn in your papers.\nBoris, here.\nBecause of her?\nShe's worth fighting for.\n- Exactly.\nStop that chatter!\nDiscipline!\nHear that?\nDiscipline.\nStepan, hold on to this.\nJust don't lose it.\nWe're getting married, Uncle Fedya.\nI forgot...\nI still have some sausage.\n- Keep your head down.\n- Stop giving me orders.\n- Let's get out of here or they'll get us.\n- Run if you're scared.\nYou idiot!\nHey, you!\nMusician!\nYou deaf?\nHow the hell did I get stuck with him?\nWhat's wrong?\nHey, you!\nGo on alone.\nI want to rest for a bit.\n- Are you wounded?\nHold on to me.\n- Leave me alone.\nHold on to me, I said, and hold on tight!\nHere, get on my back.\nIt'll be faster this way.\nLeave me here.\n- Idiot!\nYou're sore because I punched you.\n- You were just lucky l...\nShut up.\nWe'll settle it later.\nHold on, hold on.\nA little further to the woods, and then we're safe.\nI'm tired.\nLet's rest a bit.\nIt's quieter here.\nSo, are you alive?\n- It's a little hard to breathe.\n- To breathe?\nWe'll dance at your wedding yet.\nHey, buddy!\nWhat's the matter?\nForgive me.\nForgive me.\nForgive me, friend!\nHey, somebody, help!\nHelp!\nHelp!\nBoris!\nWhat's wrong, Boris?\nAre you wounded?\nI'm not wounded.\nI...\nThe Soviet Information Bureau reports no important changes on the fronts in the last 24 hours.\nNo important changes.\nThat's good.\nFamilies evacuated with Moscow Plant 326 will be quartered on Vostaniya Street.\nComrades, report here.\nIrina, help this wounded man.\n- The paramedics will be here soon.\n- Yes.\nUnload!\nSiberia.\nWe can't retreat much farther.\nThis is what's become of Mother Russia.\nAttention, attention!\nChief of Hospital Number 4, Borozdin, report to the military commandant.\nPerhaps we'll find some peace here.\nClear the way, folks.\nThe stove is smoking.\nI'm sorry.\nYou can daydream when the war is over.\nWhere are you going?\nTo the hospital.\nI'm on duty.\nShe wanders around like a ghost, all nerves.\nShe's always waiting for a letter.\nFrom whom?\nHer husband's right here.\nNot like us, soldiers' wives.\nShe's not waiting for a letter from anyone.\n- Are you on the second shift at school?\n- Yes.\n\"Cranes like ships sailing in the sky.\"\nThose silly lines are stuck in my head.\nThere it is.\n- What?\nThe mail.\nIf I can count up to 50, there'll be a letter for me.\n- Veronica, this is crazy.\n...16, 17, 18, 19 20, 21...\n- Stop!\n...45, 46, 47...\n- Hello.\n- Hello.\nThere's nothing for you.\nFor you.\nLededeva?\n- That's me.\n- Palyukaitis?\n- Nothing.\nFrom my eldest son on the Ukrainian front.\nI didn't know Boris, but everyone says he was a gifted young man.\nWas?\nMissing doesn't mean dead.\nOf course not.\nThat didn't come out right.\nWhat's the matter, Veronica?\nI'm dying, Anna Mikhailovna.\nMy dear, what are you saying?\n- I've lost everything.\n- You have your life ahead of you.\nI don't want to live!\nWhat's the use?\n- Forget the past.\nIt's human nature to forget.\nI don't want to forget.\nThere's nothing I need to forget.\nYou mustn't punish yourself forever.\nI must.\nTill the end.\nYou teach history.\nYou're an intelligent woman.\nTell me:\nWhat is the meaning of life?\nThe meaning of life?\nPerhaps it's that...\nWas Chernov here?\nNo.\nBoy, am I hungry!\nIf Chernov comes, try to be polite.\nHe's revolting.\nI may find him even more revolting than you do, but he's the boss.\nWhy do you always kiss up to him?\nDear Veronica, you're impossible.\nYou're always so irritable, and you keep picking on me.\nTell me what I can do for you.\nI wish you had never been born.\nCome in!\n- I hope I'm not intruding.\n- We're always happy to see you.\nMake yourself comfortable.\nDid you hear?\nThe Germans have advanced in the Caucasus.\nIt's awful.\nBut don't worry.\nWe'll show them yet.\nPlease, make yourself comfortable.\nYour place is cozy.\nMy wife and children are in Tashkent, so I live like a homeless tramp.\nHello, Veronica.\n- Where are you going, dearest?\n- I'm on duty at the hospital.\n- Bundle up.\nIt's very cold.\nI admire your wife.\nShe's always so candid, so pure.\nShe must be very happy with you.\nI looked for you today at the Philharmonic.\n- Was there a concert?\n- No.\nWill you be at the birthday party tonight?\nProbably.\n- What will you take for a gift?\n- What can I give?\nYes... the war.\nIt's nothing great, but attach a little something to it and I'm sure Antonina will be very happy.\nIt's wonderful.\nHow much do I owe you?\n- It's nothing.\nDon't mention it.\n- Thanks very much.\nMark, I have a favor to ask.\nIs there anyone upstairs?\nNo.\nDo you think you could ask Fyodor Ivanovich for some medicine?\nGood job, Irina.\nHe's going to live.\nI hope so.\nHe'll be a real swine if he dies.\nIrina, you should have been born a man!\nI feel pretty good as a woman.\nVeronica, why are you so early?\nThe clock was fast.\nPoor girl.\nI'll never forgive what she did to Boris.\nHere comes another batch!\nI've told you already, we're full!\nThis is a hospital, not a sardine can!\nWhere are they all from?\nKalach?\n- Stalingrad.\nSome from the front, some from the hospital.\nThere's no room.\nDon't worry, they'll make room.\nI'll take 80 men.\nThe rest will have to go to other hospitals.\nNow, then... give my regards to Uncle Sergei,\nFyodor, Vassily,\nAunt Marya, Agrafena,\nKaterina, Varvara,\nNikolai,\nKaterina.\nYou already said Katerina.\nThis is a different Katerina.\n- Then you should say so.\n- It's okay.\nThey'll figure it out.\nSo...\nZinaida,\nAntonina, Kuzma...\nNurse!\nWhat's the matter, Vorobyev?\nNothing.\nI want the nurse.\nHe needs the bedpan.\nI'll get it for you.\nThank you.\nThat's lovely music.\nTurn up the radio, please.\nTurn off that music!\nTurn that music off!\nYou hear me?\nWho yelled?\nI did!\nWhat's it to you?\n- Zakharov, what's wrong?\n- Go away!\nHe's losing his mind.\nHe got word from home this morning.\nHis girlfriend didn't wait for him.\nShe married someone else, the bitch.\nHe hasn't eaten all day.\nTry to comfort him.\nBroads like that are worse than fascists.\nThey aim right at the heart.\nYou have to eat, Zakharov, or you won't get well.\nI don't want to get well!\nI want to die!\nCall the doctor!\nCalm down.\nAll because of some broad!\nCall the doctor!\nQuit yelling!\nShut up!\nWhere will they take us now?\nThere are plenty of hospitals in the world.\nThe head doctor's coming, boys!\nStop it this minute!\nYou're still a soldier in the Red Army!\nAre you trying to get discharged?\nAre you afraid we'll heal your hands and send you back to the front?\nNo, Doctor, he's not like that.\nHe got a letter.\n- I know.\nThat's just an excuse.\nBig deal!\nSo your bride ran off.\nYou should be glad!\nShe isn't worth a penny if she would trade a handsome guy like you, a real hero, for some rat sitting out the war at home!\nIt's she who's forfeited her happiness, not you!\nAnd that's what she deserves.\nThat's right.\nShe's got a petty soul.\nPeople like her can't understand how much suffering we've gone through.\nKilling people like her would be too kind!\nYou stood up to Death itself.\nYou looked death in the face.\nYou approached it with your chest stuck out.\nAnd she couldn't even pass the little test of time.\nWomen like her deserve only our contempt.\nThere can be no forgiveness for them!\nBandage him up.\nAunt Sima, bring him some tea and porridge.\nDon't be a brat.\nVeronica...\nYou idiot!\nKeep an eye on your kid!\nAnd it would have been my fault!\nJust standing there with your mouth open like an idiot!\n- Whose boy are you?\n- Mama's.\n- Where are you from?\n- Voroshilovgrad.\n- How old are you?\n- Three months and three years.\nWhat's your name?\nBoris.\n- What?\n- Boris.\n- Why the fancy get-up?\n- A concert at the hospital.\n- Can't you tell a better lie?\n- All right, all right.\n- Is Mark here?\n- He is now.\n- Here.\n- Thank you, Anna.\nA little boy is having a birthday and I wanted to give him a present.\nYou are a kind man after all, Mark Alexandrovich.\n\"The symptoms of such compound fractures depend on the degree of changes in the joints, as well as on the location.\"\nInteresting, but unintelligible.\nWhy, I think it's quite clear.\nWhat's this?\nWhat kind of trick is this?\nWhat trick?\nHe lost his parents at the station.\nYou should have taken him to the shelter for lost kids.\nI don't want to go to the shelter!\nGo there yourself!\n- Rude child!\n- You're rude.\nQuiet, quiet.\nWe'll go find Mommy in Voroshilovgrad.\nStop that noise!\nIt's hurting my ears.\nHere, play with this cap!\nHere's a bagel for you.\n- My eardrums will burst!\n- We need to find a toy for him.\nIrina, take him for a minute.\nSo now I have to hold him too?\nHere, give him to me.\nCome to me, little one.\nI'll get you ready for bed.\nHas anyone seen my squirrel?\nMark took it.\nMark?\nWhere'd he take it?\nTo give to some little boy as a present.\nSome little boy?\n- Where's Mark?\n- I don't know.\n- Where's Mark?\n- I don't know.\nYou're hiding something from me.\nWhere did he go?\nYou know, don't you?\nWhere?\nProbably to see Antonina.\nWhat Antonina?\nAsk Mark.\n- Tell me.\n- Don't give me orders.\nMark... visits her occasionally.\nYou understand?\n- You're saying this to hurt me.\n- Why would I?\nJust to spite me!\nI'm loved.\nI have a husband.\nAnd you're still an old maid.\nShe lives in a small house near that large market.\nYou can check it out for yourself.\nIt's okay, it's okay.\nI have to do something, I have to do something.\nTalk to Mark when he comes back.\nYou should wait.\nWait?\nAlways waiting.\nI'm always waiting.\nI've had enough!\nWhat use are words\nLet lips fall silent\nSometimes\nThey tell lies\nThe eyes alone\nWill never dare\nTo lie to other eyes\nMy eyes are now\nDark and sad\nAs though someone\nHad blown out their flame\nIn Leningrad on my birthday, we'd take a car and go from one end of the city to the other.\nLet's go for a ride!\nIn these times, Antonina, a car is worth its weight in gold, and gasoline is rationed.\nAny kind of vehicle.\nI beg you!\nA fire engine, an ambulance, a truck.\nAnything you like.\nA ride against the forces of nature!\nJust the two of us?\nTo forget everything else.\nI'll try.\nI love you.\nSorry.\nI don't dance.\nI thought I had tried everything, but I've never tried golden nuts.\nLook, a message.\nA birthday note for me?\nSo it's for your birthday?\nWhere's my squirrel?\nDon't get the wrong idea.\nThere's a note from someone named Boris.\n\"My only love, happy birthday to you.\"\nOn this day you came into this world.\nIt's hard to leave you.\nBut what can we do?\nThis is war.\nThere's no way around it.\nWe can't continue living happily as we did before when death stalks our land.\nBut we'll be happy yet.\nI love you.\nI have faith in you.\nYour Boris.\nWhat are you so excited about?\nGo home.\nI'll be there soon.\nWhat's that for?\nTake your coat off.\nThank you.\nYou know, as usual all the Philharmonic's cars are taken, and I need one badly.\nYou're the head surgeon and all.\nSurely you won't refuse...\nWe're very short on vehicles.\nIt was hard to do what I did for you, but I did it.\nWhen you asked me to, I did my best.\nWhat did I ask?\nFor an exemption.\nIt's about to expire, and this time, getting a new one will be practically impossible.\n- What exemption?\n- For Mark Alexandrovich.\nDon't worry.\nNot a soul will know about this.\nIs it possible he lied to both of us?\nHe even offered me money in your name.\nI'm sorry.\nVery good.\nUncle Fyodor,\nI turn to you for help.\nHer behavior's impossible.\nShe stormed into a stranger's place, started a fight...\nShut the door.\nDo you think anyone wants to send his son to war?\nWhat are you talking about?\nOr do you think others must pay for your welfare, for your life, with their hands, their legs, their eyes, their lives,\nand you owe nothing to anyone?\nI have an exemption, Uncle Fedya.\nAn exemption?\nTell me, how did you get it?\nWhy are you doing this?\nIt's okay.\nI'll rent a room, I'll take Boris...\nPerhaps someone else had better rent himself a room.\nGladly!\nI've thought about doing that for a long time.\nWhy didn't you throw me out in the first place?\nYou've been through a terrible ordeal.\nOnly someone without a heart could reproach you.\nStay with us.\nI can't.\nI don't want to hide behind someone else's back.\nI won't!\nThink it over.\nCould you tell me where the Borozdins live?\nThey live here.\nWhich of them do you want to see?\n- Fyodor Ivanovich.\nHe's not home.\nDid Boris send you?\nWhat Boris?\nNo, I came on my own.\nI must speak to Fyodor Ivanovich.\n- Have a seat.\n- Thank you.\nHe'll be home soon.\n- May I go for a walk?\n- You may.\nIs he yours?\nHe looks like you.\nAre you a relation of the Borozdins?\nNot exactly.\nYou see, I'm out of the army.\nGoing home?\nIt's unlikely.\nThere's still a blockade around Leningrad.\nI'm in a difficult situation.\n- What is it?\n- It's easy to tell you.\nYou're not part of the family.\nFyodor Ivanovich's son was killed.\nWhere?\nWest of Smolensk.\nWhat shall I play for you?\nWhatever you like.\nDid you see him buried?\nNo.\nI was injured and they carried me away on a stretcher, but a friend of his, Stepan, went up to him.\nNow I have to find his girlfriend.\nHe loved her very much.\nThat's me.\nVladimir, come to see us if you're ever in Moscow.\nThank you.\nI'll do that.\nThe war's over.\nStrange, isn't it?\nAnd you're still waiting?\nYes, I am.\nOne must always hope for the best.\nWhy do you delude yourself?\nI saw it with my own eyes.\nWhat did you see?\nHow he was wounded?\nHow he fell?\nBut you didn't see him die with your own eyes.\nNo... but why haven't you heard from him?\nA lot of things could have happened.\nThere's no word from Stepan either.\nAt the factory they know he's in some special unit and will be back soon.\nDasha promised to tell me when he's back.\nBoris is alive.\nHe's alive.\n- Look, here they come!\n- The victors are coming!\nBoris!\n- Veronica!\n- Stepan!\nFlowers for you.\nWell?\nWhat?\nYou see...\nHere.\nDear mothers, fathers, sisters and brothers!\nThe happiness of our reunion is immeasurable.\nThe heart of every Soviet citizen is filled with joy.\nJoy sings in our hearts.\nIt is victory that has brought us this joy.\nWe have all waited for this moment.\nEveryone's dizzy with happiness.\nBut we shall not forget those left behind on the battlefield.\nTime will pass.\nTowns and villages will be rebuilt.\nOur wounds will heal.\nBut our fierce hatred of war will never diminish!\nWe share the grief of those who cannot meet their loved ones today, and we will do everything to insure that sweethearts are never again parted by war, that mothers need never again fear for their children's lives,\nthat fathers need never again choke back hidden tears.\nWe have won, and we shall live not to destroy, but to build a new life!\nWhy are you just standing there?\nGive your flowers to whomever they're for.\nThank you, sister.\nMy beautiful granddaughter!\nLook, look!\nCranes are flying over Moscow!\nTHE END\nMOSFILM\nWait, Squirrel!\nHere, put it on.\nLook!\nCranes like ships Sailing up in the sky,\nWhite ones and grey ones, With long beaks, they fly!\nLook!\nYou see...\nYou with your \"cranes like ships\".\nTHE CRANES ARE FLYING\nWritten by V. ROZOV\nDirected by M. KALATOZOV\nDirector of Photography S. URUSEVSKY\nAssociate Director\n- B. FRIDMAN Production Designer\n- Y. SVIDETELEV\nMusic by M. VAINBERG Sound by I. MAYOROV\nEnglish subtitles by T. KAMENEVA\nStarring\nT. SAMOILOVA as Veronica A. BATALOV as Boris\nV. MERKURIEV as Feodor Ivanovich\nA. SHVORIN as Mark S. KHARITONOVA as Irina\nK. NIKITIN as Volodya V. ZUBKOV as Stepan\nA. BOGDANOVA as Grandma B. KOKOVKIN as Chernov\nYe.\nKUPRIANOVA as Anna Mikhailovna\nAn Order of Lenin Film Studio \"Mosfilm\" production, 1957\nWho is there?\nWait!\nWell, all right.\nSay when, then.\nThursday, on the embankment.\nCome on, that's too long.\nSquirrel!\nYou haven't told me when!\nSquirrel, at what time?\nWhat time on Thursday?\nNo, I can't make it.\nI'll be working.\n- All right.\n- Don't be late.\nSquirrel!\n- She's gone crazy over him.\n- And he's over her.\nThat's love, my dear.\nA harmless mental disturbance.\nGrandma, why aren't you asleep?\nBecause it's time to get up, Boris!\nStop chomping!\nRunning around all night...\nAre you jealous?\nYou haven't torn it, have you?\nYour jacket's all right.\nOutrageous!\nIt's noon and he's still in bed.\nThe boy deserves a good rest on Sunday.\nHe works hard.\nThat work of his will result in a marriage.\nThat's when you'll be really jealous.\nFor Irina, her diploma comes first.\nLook out, Uncle Fedya.\nShe'll be a full professor soon, while you're still only a MD.\nIf children don't surpass their parents, then the children are fools and the parents are no better.\nThanks, Mamma.\nThis is Radio Moscow broadcasting over all of the Soviet Union!\n- What is it?\n- What has happened?\nBoris!\nWe're at war!\nDo you hear?\nWe're at war!\nLeave me alone!\nHi!\nBoris is working day and night.\nAre you waiting for him?\nI'm not waiting for anyone.\nVeronica!\nIn time of war, one should not get confused.\nOne should hold on to a normal life pace.\nTake me.\nI dream of dedicating to you my first symphony.\nWill you come to the concert?\nSuppose the Army calls you up?\nThe Army?\nI doubt it.\nHardly.\nWhy \"hardly\"?\nThe most talented ones will be exempted.\n- Are you the most talented one?\n- Me?\nCertainly.\nWhy are you following me around?\nAren't you ashamed?\nI am.\nI tried to keep away from you.\nI know, Boris is my cousin.\nBut I can't help myself!\nWait!\n- Wait!\n- I'm going home alone.\nHey, slow down!\nYou just had an operation.\nI'd better be in shape for that field-pack.\nThey're not wasting men like you in the Army.\nThere'll only be one exemption here, and one of us'll get it.\nThey'd better give it to you.\nYou've got knowledge, experience.\nAnd you've got talent.\nSave your sketches.\nMy wife's already got my bag packed.\nWell, as they say, let's get our bayonets ready.\nHey, Stepan!\nGuys, give me a hand...\nStepan!\nExcuse me, Sachkov.\n- Where's the summons?\n- Not yet.\nI can't wait.\n- Are you off now?\n- No, I've got those sketches...\n- I see.\nTake care.\n- Okay.\n- Hey!\n- Yeah?\n- Have you told her?\n- No, it's too early...\n- You're right.\nSee you tomorrow.\n- Right.\n- Let go.\n- I won't.\n- You're going to fall down.\n- No, I won't.\n- You'll rip up the blackout.\n- It's a blanket.\nI'm going to call the militia.\nI'm sick of the blackout.\nGive me the blanket.\n- Let go.\nYou'll fall.\n- No, I won't.\nCome on, Squirrel, cut it out.\nLet me hang this up.\nYou didn't come to the embankment today, but Mark did.\n- He's very handsome.\n- So what?\n- Aren't you jealous?\n- What?\n- Aren't you jealous?\n- I haven't got the time for it.\nI won't have much time either when I go to the architecture college.\nYou'll never pass the entrance exams.\n- I will!\n- I doubt it.\nCranes like ships Sailing up in the sky,\nWhite ones and grey ones, With long beaks, they fly.\n- Do you like my song?\n- Very profound.\nOh frogs, you keep on croaking, Why didn't you think of looking up?\nYou went on leaping, in mud soaking That's why you ended eaten up.\n- All right, you won, hero.\n- I won, I won!\nI won.\nAll right.\n- D'you think you'll be drafted?\n- Sure.\n- You won't volunteer?\n- I might.\nWhy not?\nNo, you won't!\nI won't let you.\nYou know you'll get an exemption.\nThat's why you talk so big.\n- Why do you think so?\n- Everyone smart will be exempted.\nThen the only ones to do the fighting will be the fools.\nI don't want to talk to you ever again.\nVeronica, there's something I must tell you.\nI don't want to hear it.\nAnd, please, don't call me Veronica.\n- Who am I?\n- Squirrel.\nListen...\n- What will you give me tomorrow?\n- It's a secret.\nIf you give me something sweet, I'll eat it up and forget about it.\nGive me something to remember you with.\nKiss me now.\nWhen I'm with you, I'm not afraid of anything.\nNot even the war.\nThough, I'm afraid of the militia.\n- Veronica...\n- You know what?\n- Do you know?\n- No.\nI'll have a beautiful white dress made for our wedding.\nOne like my grandmother had.\nAnd a veil...\nVery long and white.\nAnd you should wear your dark suit.\n- And you and I will go...\n- To a registry office.\n- Is it a deal?\n- It's a deal.\n- You know I like this blackout.\n- What's so good about it?\nHi!\n- Stepan!\n- Veronica!\n- I've got a treat for both of you.\n- Fine.\n- What is it?\n- It's a secret.\n- Has it arrived?\n- Yes, this morning.\n- Why didn't you say so?\nTell me.\n- Well, go on.\nYou should've seen what's going on over at the factory.\nMake it short, will you?\nI'm telling you:\nthere's so much excitement...\n- Never mind that.\n- Your folks told me...\n- When do we report?\n- Today at 5:30.\nLook at those cherries!\nIs anything wrong?\n- They're nice!\n- Army orders.\n- No!\nFor you?\n- Me too.\nWe both volunteered...\nWhen?\n- You volunteered?\n- It's army orders.\nWait!\nWhat about us?\nStepan...\nNo, I've got to go.\nMy folks are going to...\nSo long.\nSquirrel!\nI didn't want to tell you before your birthday.\n- And now I have to go.\n- Of course.\nBoris!\nSquirrel, what is this?\nWhite cranes flying...\nI like that.\nI'm going to be all right.\nDo you hear?\nAnd after that we'll live together...\na hundred years.\nGo on now.\nWe'll say goodbye later.\nDon't be late.\nWhat difference would it make if he went a day later?\nWhat a nerve if he's still with Veronica.\n- Boris!\n- Did Dad call?\nHe was furious.\nWhy didn't you tell anyone?\nSo that we didn't have any scenes like that.\nGet these prints back to the factory tomorrow.\n- Give them to Kuzmin, the engineer.\n- I will, don't worry.\nWhat are you putting in there?\nI'm going out for a bottle of wine.\nGrandma, do me a favor.\nJust a minute...\n- Will they send you to the front?\n- Probably.\nHere, Grandma...\nWait.\nTomorrow when you get up, take this to her...\n- What is it?\n- Her birthday present.\nAnd help her.\nAfter all, it's war...\nPlease, be kind to her.\nAnd what if I die?\nYou don't have the right, especially now, with so many secrets to protect.\n- Well, suppose I do...\n- Come on...\nQuiet now, Grandma.\nThat's Veronica!\nNo, it's just Irina.\nThank heaven, you've come.\n- Boris!\n- Yes?\nCome over here.\nYou're 25 years old and you behave like a fool.\nWhat are we, children?\nWhat is it?\nAre we playing hide and seek?\nAre you starved for adventures?\nWhat kind of a man are you?\nWhere's Irina, and Mark?\nIrina is making coffee, Mark went out for wine.\nCoffee, wine...\nWhat kind of send-off is that?\nIrina!\nBring that thing from the medicine chest.\nBoris, come over here.\n- Where is Veronica?\n- She'll be here.\n- But where's she?\n- She's busy.\nShe's supposed to be here.\nHer fiance is going away.\nI'm not her fiance.\n- What are you then?\n- Just a friend...\n- That sounds suspicious...\n- I don't mean that way, Dad.\n- Then what do you mean?\n- Look, give me a break.\n- Here's the alcohol.\n- Have it diluted.\nI got some port wine.\nDrink it yourself.\nWe'll have a more robust drink.\nWell, are we all here?\nLet's sit down.\nIt's Veronica.\nAren't you going to welcome her, friend?\nAt last!\nIs Boris home?\nWe're from the factory.\nPlease, come in.\nI thought it was the fiancee.\n- We've come from the factory.\n- What about the presents?\n- Sorry.\nThis one's yours.\n- Yes...\nThank you.\nOn behalf of the Factory Committee...\nComrade Boris, you must fight to the last drop of your blood.\nSmash the accursed fascists, and we, in the factory, will fulfil and overfulfil our quotas.\nWe've heard all that before.\nYou'd better join us and drink to my son, Boris.\nWell, I suppose... life in this world of ours is not yet what we would like it to be.\nNow you're going to war, Boris...\n- Let's drink.\n- To you.\nIrina!\nWhat about Grandma?\nWe saw my brother off last night.\nMy mother was crying...\n- What about you?\n- I was too.\n- On whose behalf, the committee's?\n- I wasn't thinking about that.\nThere's no one to see off in our family, we have 3 girls and Mom.\nIt's somewhat embarrassing...\nI feel left out...\nYes, and when they come back, you'll really envy us.\nThe trouble is, not all of them will be coming back.\nFor those who don't, a magnificent monument, with their names inscribed in gold.\nIrina, don't just sit there.\nFill the glasses.\nAnd you folks in the rear, fulfil and overfulfil!\nNow, Grandma, don't forget.\nMark, stay with Dad.\nHe'll be all right.\nI'll see you off.\nAbout face!\nPlatoon, forward march!\nTake it, Grandma!\n- Boris!\n- Mamma!\n- I won't see him again.\n- I'm sorry, Mamma.\nDrink it.\nYou'll feel better.\n- Where are you going?\n- To the hospital.\nBut you aren't on call now.\nVarvara Kapitonovna, I've got to see Boris...\nHe's gone.\n- Gone?\nWhere?\n- To report for the Army.\n- Oh, no!\n- Come in.\n- Where was he supposed to report?\n- I don't know.\nWhat is it?\nIt's from Boris.\nFor your birthday.\nThere's a note inside.\n- Where's the note?\n- Why?\nIsn't it there?\nMaybe it fell?\nMaybe he forgot in a hurry.\n- Forgot?\n- He'll write to you.\nWhere were you?\n- Where's Boris gone?\n- It's the schoolyard near the park.\nCalm down, she'll be here.\nIt would be quite a job finding someone in this crowd.\nWhat are you doing?\nWrite to me.\nWrite every day.\nDidn't I tell you to ship the cauliflower?\nAn airplane is high above, Over the roofs it's droning.\nIt's my sweetheart sends his love From his sky-high soaring.\nIt was used to be before That he saw me to my door.\nNow it's been quite a turn-off:\nI'm the one to see him off!\nDon't forget to write your Army Post Office number.\n- Cheer up, pug-nose!\n- We'll wait till you come back.\nGoodbye, Boris!\nTake care!\nFall in!\nShe will come.\nBoris!\nBoris!\nDress!\nAttention!\nForward march!\nBoris!\nThat's my little chicken!\nBoris!\nBoris!\nGrandma...\nNothing?\nHe hasn't written to me either.\n- Any news?\n- No.\nOh, this damn war!\nWe'll have to keep going somehow.\nHave you decided about a job?\nI'm starting at the war factory tomorrow.\nAir-raid alert!\nHurry on to the subway.\nI've got to finish this.\nGet your things.\n- Where's the knapsack?\n- It's over there.\nI won't go without you.\nIf it gets bad, we'll run down.\nGo on, now.\nBe careful in the subway!\nShe's so frightened, poor thing.\nAren't you?\nWhen I know that Veronica's safe and you're with me,\nI'm not such a coward.\nThe filthy murderers!\nWe'll get back at you, you wait!\nHe's not writing to me.\nOh, he must have written.\nIt's just the mail.\nAll clear!\nThe air raid has been terminated.\nLet's go!\nHere's where I live now.\nIf you decide to work with us, call me at the factory.\n- I will.\n- Goodbye.\nGet down here!\nCome back!\nWhat's the matter?\nAre you crazy?\nI'm sorry.\nVeronica, you can stay with us from now on.\nYou can have Boris' room.\nMark will move in with Fedya...\nMark, she'll need some attention to keep her from brooding.\nIrina and I are so busy at the hospital.\nI'll do what I can, Uncle Fedya.\nI promised Boris.\n- Is it agreed?\n- Um-hmm.\nIs this the factory?\nMay I speak to Kuzmin?\nHe was drafted, too?\nExcuse me, has anyone heard from Boris Borozdin?\nIf it weren't for this damn war,\nI'd be playing this in the Tchaikovsky Hall.\nFor you.\nVeronica!\nLet's go to the subway.\n- I'm not going.\n- Don't be silly.\nCome on.\n- Are you afraid?\n- For you.\nCome with me.\nI'm not afraid of anything.\n- Veronica, let's go to the subway!\n- No, I'm not going.\n- Stop it!\nYou've gone crazy!\n- I'm not going!\nI love you.\nNo.\n- I love you!\n- No!\nNo!\n- I love you!\n- Go away!\n- I love you!\n- No!\nNo!\nNo!\nIt's stupid to get surrounded like this.\n- Stepan, quit whining.\n- Who's whining?\nI'm not.\nThe captain said we might be able to break out by tonight.\nYeah, that's what he says.\nSachkov!\nWhere'd you find that rookie?\nIn the incubator.\nHe's our reinforcements.\nNow we'll break through for sure.\nIs that a way to talk about a married soldier?\nI got yoked in my last year of school.\nThe result of too much of education.\nYou're funny.\nLaughed yourselves right into a trap, I guess.\n- Volodya, you really married?\n- I said it to sound important.\n- Borozdin!\n- Yes?\nYou'll go on a reconnaissance mission.\nYou got to find the best place for us to break through tonight.\n- Turn in your documents.\n- Yes, sir.\nHey, Sachkov!\nTake this, will you?\nWhy don't we rest?\nAnd have a smoke.\nIs she always laughing like that?\nShe probably thinks we're all dead.\nLet me see that beauty.\nHey, that's the soldier's life for you!\n- You're here, and she...\n- And she what?\nHey, let me try that thing.\n- Hold it, will you, Sachkov?\n- Certainly.\nNot bad for a first try.\nStop that!\n- Aren't you ashamed?\n- No, sir.\n- Five days under arrest!\n- Yes, sir.\n- You both go on a reconnaissance.\n- Why?\nTurn in your papers!\nBoris, here.\nOn account of her?\n- I'd say she was worth it.\n- She sure is!\nHowever, we must maintain discipline!\nYou hear that?\nDiscipline...\nStepan, keep this.\nBe careful, don't lose it.\nWe...\nWe'll get married, Uncle Fedya.\nOh, I forgot.\nThere's some sausage left.\n- Keep your head down!\n- Stop ordering around!\nLet's get out of here before they get wise.\n- If you're scared, run.\n- Come on, you idiot!\nHey!\nMusician!\nAre you deaf?\nWhy the devil I'v got tied up with him?\nWhat's wrong with you?\nCan you hear me?\n- Go on.\nI want to rest for a while.\n- Are you wounded?\nHold on to me.\n- Leave me alone.\n- I tell you, get up!\nNow hang on, hold tight.\nThis way's no good.\nI'll have to carry you.\nCome on, leave me here.\nAre you still sore because I punched you?\n- You were just lucky, otherwise...\n- Shut up, we'll talk later.\nHere we go...\nAre you all right?\nHold on, friend.\nIt's only a little way to the woods.\nWe'll be safe there.\nI'm winded.\nLet's rest a bit.\nIt's a little quieter here.\nHow are you?\nIt's hard to breathe.\nHold on, we'll have to get you married yet...\nHey, buddy!\nWhat's the matter with you?\nWhat's wrong?\nForgive me, friend, forgive me...\nIt's my fault...\nForgive me...\nfriend...\nHey, somebody!\nHelp!\nHelp!\nHelp!\nCan you hear me, Boris?\nAre you hit?\nIt's nothing, I am just...\nThe Soviet Information Bureau reports that there were no important changes on the front in the past 24 hours.\nNo news is good news.\nFamilies evacuated with Plant 326 will be quartered on Vosstaniya Street.\nComrades, report here, please.\n- Irina, help me with the wounded.\n- I'll get an orderly.\nEverybody off!\nSiberia!\nWe can't run much farther.\nPoor Mother Russia!\nAttention, please!\nChief of Army Hospital, Comrade Borozdin, please report to the military commandant at once.\nMaybe we'll find peace here at last.\nOut of the way, the evacuated.\nYour stove is smoking.\nOh, I'm sorry.\nSave your dreaming till the war is over.\nWhere are you going?\nTo the hospital.\nI'm on duty.\nShe wanders around like a ghost, all nerves.\nThe poor thing is waiting for a letter.\nFrom whom?\nHer husband's not up at the front like ours.\nShe's not waiting for any letter.\n- D'you have the 2nd shift at school?\n- Yes.\nCranes like ships, Sailing up in the sky...\nI can't get those silly verses out of my head.\nThere she is!\n- Who?\n- The mail carrier.\nIf I can count up to 50, there'll be a letter for me.\n- One, two, three, four...\n- Stop it, Veronica.\n- Fifteen, sixteen...\n- Veronica, this is madness.\n- Nineteen, twenty...\n- Stop it!\nForty-seven, forty-eight...\n- Good morning!\n- Good morning!\nSorry, nothing for you.\nHere you are.\n- Lebedeva?\n- That's me.\n- Paliukaitis?\n- Nothing.\nFrom my eldest.\nFrom the Ukrainian Front.\nI didn't know Boris.\nBut everyone says what a fine, talented boy he was.\nWas?\nListed as missing in action doesn't mean he was killed.\nOf course not.\nI just didn't put it right.\n- What's wrong, Veronica?\n- I'm dying, Anna Mikhailovna.\nCome on, Veronica.\nYou poor child.\nI've lost everything.\nYou have your whole life before you.\nI don't want it!\nWhat's it good for?\nYou must forget the past.\nIt is human nature to forget.\nI don't want to forget.\nI don't need it.\nBut you can't go on tormenting yourself for your mistakes.\nI should do it.\nAll my life.\nYou teach history.\nYou're a wise woman.\nTell me what's the meaning of life?\nThe meaning of life?\nMaybe it's in...\n- Did Chernov get here yet?\n- Not yet.\nWow, I'm really famished!\nTry to be nice to Chernov when he comes, please.\nHe makes me ill.\nI feel exactly the same way, but after all he's my boss.\nThat gives you a reason to lick his boots?\nPlease, Veronica, this can't go on.\nYou're always so irritable, always criticizing.\nTell me, how can I make you happy?\nJust disappear.\nCome in, it's open.\nCome in!\nMark, pardon my invasion.\nNot at all.\nIt's a pleasure.\nHere, let me take that.\nDid you see the paper?\nThe Germans have advanced in the Caucasus.\nYes, it's awful.\nBut we'll show them what we're made of yet!\nPlease make yourself comfortable.\nIt's warm here.\nYour place is nice and cozy.\nMy wife and children are in Tashkent, so I'm kind of homeless.\n- Good day, Veronica.\n- Good day.\n- Where are you going, darling?\n- To the hospital.\nI'm on duty.\nBundle up.\nIt's very cold.\nI admire your wife.\nShe's so honest...\nShe must be very happy with you.\n- I was looking for you at the Philharmonic.\n- Was there a concert?\nNo.\nBut are you going to the birthday party tonight?\nI might.\n- What are you giving her?\n- What can I give her?\nThe war!\nYes, this war.\nIt's nothing gorgeous, of course, but tie a little trifle to it and Antonina will be pleased.\nIt's wonderful!\nWhat do I owe you?\n- It's really nothing, forget it.\n- Thank you very much.\nMark, can you do me a favor?\n- Is someone up there?\n- No.\nCould you get some drugs for me from Feodor Ivanovich?\nFine job, Irina.\nHe'll pull through.\nI hope so.\nIt would be downright mean of him not to.\nIrina, you should have been a man!\nI'm doing all right as a girl.\nVeronica!\nWhat are you doing here so early?\nThe clock was fast.\nPoor girl...\nI can't forgive her for what she did to Boris.\nNew patients again!\nI told them I have no more room.\nI'm running a hospital, not a barrel of herrings!\n- Are these from Kalach?\n- From Stalingrad.\nSome from the front line, others from the hospitals.\nNo place for us here, either.\nDon't worry, they'll find room.\nI'll take 80 men.\nThe rest will have to go to other hospitals.\nLet's see now...\nPlease give my regards to Sergei,\nFeodor, Vassily, Aunt Maria,\nAgraphyona, Catherine, Barbara,\nNikolai, Catherine...\n- You already said Catherine.\n- That's another one.\n- Don't you want to explain it?\n- They'll figure it out.\nSo, Zinaida, Antonina, Kuzma...\nNurse!\n- What do you want, Vorobyov?\n- Never mind.\nNurse!\n- He wants a potty.\n- I'll give it to him.\nThanks.\nThat's beautiful music!\nTurn it up a little louder, will you please?\nShut up your music!\nTurn it down!\nYou hear me?\nWho was that shouting?\nI did, so what?\n- Zakharov, what's wrong?\n- Leave ma alone!\nHe's gone berserk.\nHe got bad news from home this morning.\nHis girl just got married to a friend of his, bitch.\nHe hasn't had a bite to eat.\nTry to see what you can do, nurse.\nThose broads are worse than fascists, aiming right in the heart.\nYou must try to eat.\nIt's the only way to get well.\nI don't want to get well!\nI just want to croak!\nGet the doctor.\nCalm down.\nPlease, calm down.\nBecause of a woman...\nWhat a dumbbell!\nGet the doctor!\nGet the doctor now!\nQuit that yelling!\nCackling like a bunch of hens!\nWhere will they take us now?\nThere're plenty of hospitals in this wide world.\nGuys, the chief is coming!\nBastards!\nQuiet down!\nYou're a soldier in the Red Army!\nWant to desert it?\nYou afraid that if we cure you, you might go back in the army?\nYou're not being fair.\nHe got a bad letter from home.\nI know.\nThat's just an excuse.\nSo what if his girl's left him?\nGood riddance!\nShe's not worth a dime if she gave up a handsome soldier like this, a real hero, for a puny draft-dodger!\nRight.\nShe's the one who's missed her happiness!\nAnd whatever she's got, she deserves it!\nWhat a petty soul!\nCan a woman like that understand the suffering you've gone through?\nKilling her would be too good for her kind.\nYou stood the most difficult trial.\nYou looked death in the face, went to meet it yourself.\nAnd she couldn't stand the small test of time.\nFor women like that, no honorable man can have anything but contempt!\nFor such creatures there is no pardon!\nBandage him!\nAunt Sima, bring him fresh porridge and some hot tea.\nBe good now.\nVeronica...\nWhat the hell kind of a mother are you?\nKeep an eye on your kid!\nAnd I'll be held responsible!\nDaydreaming, you fool!\n- Who are you?\n- Mamma's boy.\n- Where are you from?\n- From Voroshilovgrad.\n- How old are you?\n- Three months and three years.\n- What's your name?\n- Boris.\n- What?\n- Boris.\n- Why the fancy get-up?\n- A concert in the hospital.\n- A likely story!\n- All right, all right.\n- Is Mark here?\n- So far yes.\nI've been saving this for you.\nThank you very much, Anna Mikhailovna.\nIt's for a little boy we know.\nIt's his birthday.\nI wish everyone were as kind- hearted as you are, Mark.\nThe symptomatology of this type of compound injury depends primarily on changes in the nodal structure...\n- Interesting, but beyond me.\n- Why, it's really quite simple.\nThey are not readily apparent to the clinical practitioner, but in most cases the etiology...\n- What is this?\n- What kind of a trick is that?\nWhat do you mean, trick?\nThe poor child lost his parents.\nI want my mommy!\nYou ought to have taken him to the Foundling Center.\nYou go yourself to the Center!\n- Rude child!\n- I'm not, you're rude!\nNow, don't cry.\nWe'll go find your mommy in Voroshilovgrad.\nNow, now, be quiet.\n- Poor baby, he wants his mommy.\n- Look, here comes a goat...\nStop rattling.\nYou're hurting my ears.\nHere, play with the cover.\nDon't you want it?\nOh, my God.\nHere's a bagel roll for you.\nKeep him quiet!\nHe's driving me crazy.\nIf we had some toys for him to play with...\nIrina, take him for a minute.\nHah, what next?\nStop crying, will you?\nLet me take him.\nCome on, my little one, my little Boris...\nI'll undress you and put you to bed...\nHave anyone seen my squirrel?\nYes, Mark took it.\n- Why?\n- He's giving it to some boy.\nMy squirrel to a boy?\n- Where's Mark?\n- I don't know.\n- Where's Mark?\n- I don't know.\nYou're hiding something from me.\nYou know where he's, don't you?\nWhere's he?\nHe's probably gone to Antonina's party.\n- What Antonina?\n- Why don't you ask Mark?\n- Who's she, tell me!\n- Don't order me around.\nMark visits her occasionally.\nDo you get it?\n- You're saying this to spite me.\n- Why would I want to?\nBecause I'm married, I'm loved, and you're still a spinster!\nStop it, Veronica!\nAntonina lives near the food shop, in the little house next door.\nGo over there and see for yourself.\nCalm down.\nI should do something.\nWhen Mark comes home, you'll have a talk.\nBut now you must wait.\nSure, I must wait...\nThat's all I've been doing all the time.\nThat's enough!\nMay our lips benumb.\nWords are futile.\nThey so often lie perchance.\nAnd only our eyes Will never dare lie,\nForever true their parting glance.\nMy eyes are now sad and dark,\nAs though therein a candle was put out...\nIn Leningrad after my parties we'd go for a ride, from one part of the city to the other.\nArrange for a ride now.\nThere's a war on, Antonina.\nCars are worth its weight in gold, the gasoline is strictly rationed.\nGet any kind of car!\nI beg you!\nA fire-engine, an ambulance, a truck... anything!\nLet me hope where there's hope no longer!\nJust the two of us?\nTo the point of full abandon?\nI'll see what I can do.\nI love you!\nSorry, I don't dance.\nI thought I'd tried everything, but I've never tried golden chestnuts.\nLook, a note!\n- It's a birthday note for me.\n- Congratulations!\nWhere's the squirrel?\nWhere's my squirrel?\nLook, you mustn't think that...\nThere's a note here from somebody named Boris.\nMy only one, happy birthday...\nOn this day you were born.\nIt's hard leaving you.\nBut it can't be helped.\nIt's war!\nI must go.\nWe can't go on living the way we did, enjoying ourselves while death stalks our land.\nWe will be happy some day.\nI love you, I trust you.\nYour Boris.\nWhy are you so alarmed?\nGo home.\nI'll be right back.\nWhy?\n- Take your coat off.\n- Thank you.\nYou know, all the Philharmonic cars are being used tonight, and I must have a car.\nYou're Chief Surgeon, you won't refuse me this little favor...\nTransportation is our most critical problem.\nIt was difficult for me too, but I did my best.\nI went out of my way, because you asked me...\n- What I asked you?\n- The exemption.\nNow it's about to expire, and this time to get it will be almost impossible.\n- What d'you mean, exemption?\n- The exemption for Mark.\nYou can be sure I handled the whole thing discreetly.\nCould Mark have done it without informing you?\nHe even offered me money in your name...\nI'm sorry.\nI'm glad you're here, Uncle Fedya.\nI wish you'd talk to her.\nShe burst in without being invited, started a fight...\nShut the door.\nDo you believe that anybody likes having his son marching off to war?\nWhat do you mean?\nOr do you believe that for your petty pleasures and well-being others must lose their arms, legs, eyes, jaws, even their lives?\nAnd you owe nothing to no one?\nYou know I've got an exemption, Uncle Fedya.\nTell us how you got this exemption.\nWhat are you doing, Veronica?\nIt's all right.\nI'm going to rent a room.\nAnd I'm taking the boy...\nPerhaps someone else had better rent a room?\nGladly.\nI've been wanting to for a long time.\nI wish you'd driven me out in the first place.\nYou've been through a terrible ordeal.\nOnly one who had done something worse could have condemned you.\nStay with us.\nI can't.\nI cannot hide behind someone else's back.\nI don't want to.\nThink it over.\nListen, where can I find the Borozdin family?\n- Which one are you looking for?\n- Feodor Ivanovich.\nHe is not in at the moment.\nAre you from Boris?\nNo, I'm by myself.\nI have to see Feodor Ivanovich.\n- Won't you sit down?\n- Thanks.\nFeodor Ivanovich should be here in a few minutes.\n- May I go out?\n- All right.\n- Is he yours?\n- Yes, he's mine.\nHe looks like you.\nAre you a relative of the Borozdins?\nNot really.\nWell, I've done all the fighting I'll ever do.\nGoing home?\nNot yet.\nLeningrad's still blockaded.\n- Yeah, I'm in a spot.\n- Why?\nI guess there's no harm in telling you because you're not the family.\nBut how do you tell a man his son was killed?\n- Where did it happen?\n- Near Smolensk.\nWhat do you want me to play?\nI don't care.\nTell me, did you see him buried?\nNo.\nI was put on a stretcher and taken to a hospital, and he was with a friend of his, Stepan.\nStepan...\nI've got to find his girl now.\nHe was really in love with her.\nI'm the girl.\nCome to see us when you're in Moscow, Volodya.\nThanks very much.\nI will.\nThe war's over.\nIt's strange, isn't it?\nAnd you're still waiting?\nI am.\nOne must always keep on hoping.\nWhat's the use of waiting?\nI saw it with my own eyes.\nWhat did you see?\nYou saw him wounded?\nYou saw him fall?\nYou didn't see him die.\nBut if he's alive, why hasn't he written to you?\nAnything could happen.\nStepan hasn't written to anyone either.\nThey know at the factory that he was in some Special Operations.\nDasha promised to let me know when he's back.\nBoris is alive.\nHe's alive.\nLook!\nThe victors are coming!\nKolia, darling, you're back!\nBoris!\nVeronica!\nStepan!\nThe flowers...\nFor you.\nWell?\nWhat?\nYou see...\nWell...\nMy darling!\nDear mothers, fathers, brothers and sisters!\nThe happiness of our reunion is boundless.\nThe heart of every Soviet citizen sings with joy, the joy of victory!\nWe have all waited for this happy moment.\nWe dreamed of it in the darkest hours of our struggle.\nBut we'll never forget those who lie silent on the battlefield.\nYears will pass, our cities will rise again, and our wounds may one day be forgotten.\nLet one thing remain in our hearts, a cold hatred of war!\nWe deeply feel the grief of those who cannot meet their loved ones today.\nWe must all take a vow to keep our promise that sweethearts will never again be parted by war, that mothers may never again fear for their children, that our brave fathers may not stealthily swallow their tears.\nWe have won and remained alive, not for destruction but to build a new life!\nDon't just stand there.\nGive the flowers to whoever they're for.\nThank you very much, sister.\nOh, what a darling!\nWhat a chubby little darling!\nLook, the cranes are flying over Moscow!\nThe End\nMOSFILM\nWait, Squirrel!\nHere, put it on.\nLook!\nCranes like ships Sailing up in the sky,\nWhite ones and grey ones, With long beaks, they fly!\nLook!\nYou see...\nYou with your \"cranes like ships\".\nTHE CRANES ARE FLYING\nWritten by V. ROZOV\nDirected by M. KALATOZOV\nDirector of Photography S. URUSEVSKY\nAssociate Director\n- B. FRIDMAN Production Designer\n- Y. SVIDETELEV\nMusic by M. VAINBERG Sound by I. MAYOROV\nEnglish subtitles by T. KAMENEVA\nStarring\nT. SAMOILOVA as Veronica A. BATALOV as Boris\nV. MERKURIEV as Feodor Ivanovich\nA. SHVORIN as Mark S. KHARITONOVA as Irina\nK. NIKITIN as Volodya V. ZUBKOV as Stepan\nA. BOGDANOVA as Grandma B. KOKOVKIN as Chernov\nYe.\nKUPRIANOVA as Anna Mikhailovna\nAn Order of Lenin Film Studio \"Mosfilm\" production, 1957\nWho is there?\nWait!\nWell, all right.\nSay when, then.\nThursday, on the embankment.\nCome on, that's too long.\nSquirrel!\nYou haven't told me when!\nSquirrel, at what time?\nWhat time on Thursday?\nNo, I can't make it.\nI'll be working.\n- All right.\n- Don't be late.\nSquirrel!\n- She's gone crazy over him.\n- And he's over her.\nThat's love, my dear.\nA harmless mental disturbance.\nGrandma, why aren't you asleep?\nBecause it's time to get up, Boris!\nStop chomping!\nRunning around all night...\nAre you jealous?\nYou haven't torn it, have you?\nYour jacket's all right.\nOutrageous!\nIt's noon and he's still in bed.\nThe boy deserves a good rest on Sunday.\nHe works hard.\nThat work of his will result in a marriage.\nThat's when you'll be really jealous.\nFor Irina, her diploma comes first.\nLook out, Uncle Fedya.\nShe'll be a full professor soon, while you're still only a MD.\nIf children don't surpass their parents, then the children are fools and the parents are no better.\nThanks, Mamma.\nThis is Radio Moscow broadcasting over all of the Soviet Union!\n- What is it?\n- What has happened?\nBoris!\nWe're at war!\nDo you hear?\nWe're at war!\nLeave me alone!\nHi!\nBoris is working day and night.\nAre you waiting for him?\nI'm not waiting for anyone.\nVeronica!\nIn time of war, one should not get confused.\nOne should hold on to a normal life pace.\nTake me.\nI dream of dedicating to you my first symphony.\nWill you come to the concert?\nSuppose the Army calls you up?\nThe Army?\nI doubt it.\nHardly.\nWhy \"hardly\"?\nThe most talented ones will be exempted.\n- Are you the most talented one?\n- Me?\nCertainly.\nWhy are you following me around?\nAren't you ashamed?\nI am.\nI tried to keep away from you.\nI know, Boris is my cousin.\nBut I can't help myself!\nWait!\n- Wait!\n- I'm going home alone.\nHey, slow down!\nYou just had an operation.\nI'd better be in shape for that field-pack.\nThey're not wasting men like you in the Army.\nThere'll only be one exemption here, and one of us'll get it.\nThey'd better give it to you.\nYou've got knowledge, experience.\nAnd you've got talent.\nSave your sketches.\nMy wife's already got my bag packed.\nWell, as they say, let's get our bayonets ready.\nHey, Stepan!\nGuys, give me a hand...\nStepan!\nExcuse me, Sachkov.\n- Where's the summons?\n- Not yet.\nI can't wait.\n- Are you off now?\n- No, I've got those sketches...\n- I see.\nTake care.\n- Okay.\n- Hey!\n- Yeah?\n- Have you told her?\n- No, it's too early...\n- You're right.\nSee you tomorrow.\n- Right.\n- Let go.\n- I won't.\n- You're going to fall down.\n- No, I won't.\n- You'll rip up the blackout.\n- It's a blanket.\nI'm going to call the militia.\nI'm sick of the blackout.\nGive me the blanket.\n- Let go.\nYou'll fall.\n- No, I won't.\nCome on, Squirrel, cut it out.\nLet me hang this up.\nYou didn't come to the embankment today, but Mark did.\n- He's very handsome.\n- So what?\n- Aren't you jealous?\n- What?\n- Aren't you jealous?\n- I haven't got the time for it.\nI won't have much time either when I go to the architecture college.\nYou'll never pass the entrance exams.\n- I will!\n- I doubt it.\nCranes like ships Sailing up in the sky,\nWhite ones and grey ones, With long beaks, they fly.\n- Do you like my song?\n- Very profound.\nOh frogs, you keep on croaking, Why didn't you think of looking up?\nYou went on leaping, in mud soaking That's why you ended eaten up.\n- All right, you won, hero.\n- I won, I won!\nI won.\nAll right.\n- D'you think you'll be drafted?\n- Sure.\n- You won't volunteer?\n- I might.\nWhy not?\nNo, you won't!\nI won't let you.\nYou know you'll get an exemption.\nThat's why you talk so big.\n- Why do you think so?\n- Everyone smart will be exempted.\nThen the only ones to do the fighting will be the fools.\nI don't want to talk to you ever again.\nVeronica, there's something I must tell you.\nI don't want to hear it.\nAnd, please, don't call me Veronica.\n- Who am I?\n- Squirrel.\nListen...\n- What will you give me tomorrow?\n- It's a secret.\nIf you give me something sweet, I'll eat it up and forget about it.\nGive me something to remember you with.\nKiss me now.\nWhen I'm with you, I'm not afraid of anything.\nNot even the war.\nThough, I'm afraid of the militia.\n- Veronica...\n- You know what?\n- Do you know?\n- No.\nI'll have a beautiful white dress made for our wedding.\nOne like my grandmother had.\nAnd a veil...\nVery long and white.\nAnd you should wear your dark suit.\n- And you and I will go...\n- To a registry office.\n- Is it a deal?\n- It's a deal.\n- You know I like this blackout.\n- What's so good about it?\nHi!\n- Stepan!\n- Veronica!\n- I've got a treat for both of you.\n- Fine.\n- What is it?\n- It's a secret.\n- Has it arrived?\n- Yes, this morning.\n- Why didn't you say so?\nTell me.\n- Well, go on.\nYou should've seen what's going on over at the factory.\nMake it short, will you?\nI'm telling you:\nthere's so much excitement...\n- Never mind that.\n- Your folks told me...\n- When do we report?\n- Today at 5:30.\nLook at those cherries!\nIs anything wrong?\n- They're nice!\n- Army orders.\n- No!\nFor you?\n- Me too.\nWe both volunteered...\nWhen?\n- You volunteered?\n- It's army orders.\nWait!\nWhat about us?\nStepan...\nNo, I've got to go.\nMy folks are going to...\nSo long.\nSquirrel!\nI didn't want to tell you before your birthday.\n- And now I have to go.\n- Of course.\nBoris!\nSquirrel, what is this?\nWhite cranes flying...\nI like that.\nI'm going to be all right.\nDo you hear?\nAnd after that we'll live together...\na hundred years.\nGo on now.\nWe'll say goodbye later.\nDon't be late.\nWhat difference would it make if he went a day later?\nWhat a nerve if he's still with Veronica.\n- Boris!\n- Did Dad call?\nHe was furious.\nWhy didn't you tell anyone?\nSo that we didn't have any scenes like that.\nGet these prints back to the factory tomorrow.\n- Give them to Kuzmin, the engineer.\n- I will, don't worry.\nWhat are you putting in there?\nI'm going out for a bottle of wine.\nGrandma, do me a favor.\nJust a minute...\n- Will they send you to the front?\n- Probably.\nHere, Grandma...\nWait.\nTomorrow when you get up, take this to her...\n- What is it?\n- Her birthday present.\nAnd help her.\nAfter all, it's war...\nPlease, be kind to her.\nAnd what if I die?\nYou don't have the right, especially now, with so many secrets to protect.\n- Well, suppose I do...\n- Come on...\nQuiet now, Grandma.\nThat's Veronica!\nNo, it's just Irina.\nThank heaven, you've come.\n- Boris!\n- Yes?\nCome over here.\nYou're 25 years old and you behave like a fool.\nWhat are we, children?\nWhat is it?\nAre we playing hide and seek?\nAre you starved for adventures?\nWhat kind of a man are you?\nWhere's Irina, and Mark?\nIrina is making coffee, Mark went out for wine.\nCoffee, wine...\nWhat kind of send-off is that?\nIrina!\nBring that thing from the medicine chest.\nBoris, come over here.\n- Where is Veronica?\n- She'll be here.\n- But where's she?\n- She's busy.\nShe's supposed to be here.\nHer fiance is going away.\nI'm not her fiance.\n- What are you then?\n- Just a friend...\n- That sounds suspicious...\n- I don't mean that way, Dad.\n- Then what do you mean?\n- Look, give me a break.\n- Here's the alcohol.\n- Have it diluted.\nI got some port wine.\nDrink it yourself.\nWe'll have a more robust drink.\nWell, are we all here?\nLet's sit down.\nIt's Veronica.\nAren't you going to welcome her, friend?\nAt last!\nIs Boris home?\nWe're from the factory.\nPlease, come in.\nI thought it was the fiancee.\n- We've come from the factory.\n- What about the presents?\n- Sorry.\nThis one's yours.\n- Yes...\nThank you.\nOn behalf of the Factory Committee...\nComrade Boris, you must fight to the last drop of your blood.\nSmash the accursed fascists, and we, in the factory, will fulfil and overfulfil our quotas.\nWe've heard all that before.\nYou'd better join us and drink to my son, Boris.\nWell, I suppose... life in this world of ours is not yet what we would like it to be.\nNow you're going to war, Boris...\n- Let's drink.\n- To you.\nIrina!\nWhat about Grandma?\nWe saw my brother off last night.\nMy mother was crying...\n- What about you?\n- I was too.\n- On whose behalf, the committee's?\n- I wasn't thinking about that.\nThere's no one to see off in our family, we have 3 girls and Mom.\nIt's somewhat embarrassing...\nI feel left out...\nYes, and when they come back, you'll really envy us.\nThe trouble is, not all of them will be coming back.\nFor those who don't, a magnificent monument, with their names inscribed in gold.\nIrina, don't just sit there.\nFill the glasses.\nAnd you folks in the rear, fulfil and overfulfil!\nNow, Grandma, don't forget.\nMark, stay with Dad.\nHe'll be all right.\nI'll see you off.\nAbout face!\nPlatoon, forward march!\nTake it, Grandma!\n- Boris!\n- Mamma!\n- I won't see him again.\n- I'm sorry, Mamma.\nDrink it.\nYou'll feel better.\n- Where are you going?\n- To the hospital.\nBut you aren't on call now.\nVarvara Kapitonovna, I've got to see Boris...\nHe's gone.\n- Gone?\nWhere?\n- To report for the Army.\n- Oh, no!\n- Come in.\n- Where was he supposed to report?\n- I don't know.\nWhat is it?\nIt's from Boris.\nFor your birthday.\nThere's a note inside.\n- Where's the note?\n- Why?\nIsn't it there?\nMaybe it fell?\nMaybe he forgot in a hurry.\n- Forgot?\n- He'll write to you.\nWhere were you?\n- Where's Boris gone?\n- It's the schoolyard near the park.\nCalm down, she'll be here.\nIt would be quite a job finding someone in this crowd.\nWhat are you doing?\nWrite to me.\nWrite every day.\nDidn't I tell you to ship the cauliflower?\nAn airplane is high above, Over the roofs it's droning.\nIt's my sweetheart sends his love From his sky-high soaring.\nIt was used to be before That he saw me to my door.\nNow it's been quite a turn-off:\nI'm the one to see him off!\nDon't forget to write your Army Post Office number.\n- Cheer up, pug-nose!\n- We'll wait till you come back.\nGoodbye, Boris!\nTake care!\nFall in!\nShe will come.\nBoris!\nBoris!\nDress!\nAttention!\nForward march!\nBoris!\nThat's my little chicken!\nBoris!\nBoris!\nGrandma...\nNothing?\nHe hasn't written to me either.\n- Any news?\n- No.\nOh, this damn war!\nWe'll have to keep going somehow.\nHave you decided about a job?\nI'm starting at the war factory tomorrow.\nAir-raid alert!\nHurry on to the subway.\nI've got to finish this.\nGet your things.\n- Where's the knapsack?\n- It's over there.\nI won't go without you.\nIf it gets bad, we'll run down.\nGo on, now.\nBe careful in the subway!\nShe's so frightened, poor thing.\nAren't you?\nWhen I know that Veronica's safe and you're with me,\nI'm not such a coward.\nThe filthy murderers!\nWe'll get back at you, you wait!\nHe's not writing to me.\nOh, he must have written.\nIt's just the mail.\nAll clear!\nThe air raid has been terminated.\nLet's go!\nHere's where I live now.\nIf you decide to work with us, call me at the factory.\n- I will.\n- Goodbye.\nGet down here!\nCome back!\nWhat's the matter?\nAre you crazy?\nI'm sorry.\nVeronica, you can stay with us from now on.\nYou can have Boris' room.\nMark will move in with Fedya...\nMark, she'll need some attention to keep her from brooding.\nIrina and I are so busy at the hospital.\nI'll do what I can, Uncle Fedya.\nI promised Boris.\n- Is it agreed?\n- Um-hmm.\nIs this the factory?\nMay I speak to Kuzmin?\nHe was drafted, too?\nExcuse me, has anyone heard from Boris Borozdin?\nIf it weren't for this damn war,\nI'd be playing this in the Tchaikovsky Hall.\nFor you.\nVeronica!\nLet's go to the subway.\n- I'm not going.\n- Don't be silly.\nCome on.\n- Are you afraid?\n- For you.\nCome with me.\nI'm not afraid of anything.\n- Veronica, let's go to the subway!\n- No, I'm not going.\n- Stop it!\nYou've gone crazy!\n- I'm not going!\nI love you.\nNo.\n- I love you!\n- No!\nNo!\n- I love you!\n- Go away!\n- I love you!\n- No!\nNo!\nNo!\nIt's stupid to get surrounded like this.\n- Stepan, quit whining.\n- Who's whining?\nI'm not.\nThe captain said we might be able to break out by tonight.\nYeah, that's what he says.\nSachkov!\nWhere'd you find that rookie?\nIn the incubator.\nHe's our reinforcements.\nNow we'll break through for sure.\nIs that a way to talk about a married soldier?\nI got yoked in my last year of school.\nThe result of too much of education.\nYou're funny.\nLaughed yourselves right into a trap, I guess.\n- Volodya, you really married?\n- I said it to sound important.\n- Borozdin!\n- Yes?\nYou'll go on a reconnaissance mission.\nYou got to find the best place for us to break through tonight.\n- Turn in your documents.\n- Yes, sir.\nHey, Sachkov!\nTake this, will you?\nWhy don't we rest?\nAnd have a smoke.\nIs she always laughing like that?\nShe probably thinks we're all dead.\nLet me see that beauty.\nHey, that's the soldier's life for you!\n- You're here, and she...\n- And she what?\nHey, let me try that thing.\n- Hold it, will you, Sachkov?\n- Certainly.\nNot bad for a first try.\nStop that!\n- Aren't you ashamed?\n- No, sir.\n- Five days under arrest!\n- Yes, sir.\n- You both go on a reconnaissance.\n- Why?\nTurn in your papers!\nBoris, here.\nOn account of her?\n- I'd say she was worth it.\n- She sure is!\nHowever, we must maintain discipline!\nYou hear that?\nDiscipline...\nStepan, keep this.\nBe careful, don't lose it.\nWe...\nWe'll get married, Uncle Fedya.\nOh, I forgot.\nThere's some sausage left.\n- Keep your head down!\n- Stop ordering around!\nLet's get out of here before they get wise.\n- If you're scared, run.\n- Come on, you idiot!\nHey!\nMusician!\nAre you deaf?\nWhy the devil I'v got tied up with him?\nWhat's wrong with you?\nCan you hear me?\n- Go on.\nI want to rest for a while.\n- Are you wounded?\nHold on to me.\n- Leave me alone.\n- I tell you, get up!\nNow hang on, hold tight.\nThis way's no good.\nI'll have to carry you.\nCome on, leave me here.\nAre you still sore because I punched you?\n- You were just lucky, otherwise...\n- Shut up, we'll talk later.\nHere we go...\nAre you all right?\nHold on, friend.\nIt's only a little way to the woods.\nWe'll be safe there.\nI'm winded.\nLet's rest a bit.\nIt's a little quieter here.\nHow are you?\nIt's hard to breathe.\nHold on, we'll have to get you married yet...\nHey, buddy!\nWhat's the matter with you?\nWhat's wrong?\nForgive me, friend, forgive me...\nIt's my fault...\nForgive me...\nfriend...\nHey, somebody!\nHelp!\nHelp!\nHelp!\nCan you hear me, Boris?\nAre you hit?\nIt's nothing, I am just...\nThe Soviet Information Bureau reports that there were no important changes on the front in the past 24 hours.\nNo news is good news.\nFamilies evacuated with Plant 326 will be quartered on Vosstaniya Street.\nComrades, report here, please.\n- Irina, help me with the wounded.\n- I'll get an orderly.\nEverybody off!\nSiberia!\nWe can't run much farther.\nPoor Mother Russia!\nAttention, please!\nChief of Army Hospital, Comrade Borozdin, please report to the military commandant at once.\nMaybe we'll find peace here at last.\nOut of the way, the evacuated.\nYour stove is smoking.\nOh, I'm sorry.\nSave your dreaming till the war is over.\nWhere are you going?\nTo the hospital.\nI'm on duty.\nShe wanders around like a ghost, all nerves.\nThe poor thing is waiting for a letter.\nFrom whom?\nHer husband's not up at the front like ours.\nShe's not waiting for any letter.\n- D'you have the 2nd shift at school?\n- Yes.\nCranes like ships, Sailing up in the sky...\nI can't get those silly verses out of my head.\nThere she is!\n- Who?\n- The mail carrier.\nIf I can count up to 50, there'll be a letter for me.\n- One, two, three, four...\n- Stop it, Veronica.\n- Fifteen, sixteen...\n- Veronica, this is madness.\n- Nineteen, twenty...\n- Stop it!\nForty-seven, forty-eight...\n- Good morning!\n- Good morning!\nSorry, nothing for you.\nHere you are.\n- Lebedeva?\n- That's me.\n- Paliukaitis?\n- Nothing.\nFrom my eldest.\nFrom the Ukrainian Front.\nI didn't know Boris.\nBut everyone says what a fine, talented boy he was.\nWas?\nListed as missing in action doesn't mean he was killed.\nOf course not.\nI just didn't put it right.\n- What's wrong, Veronica?\n- I'm dying, Anna Mikhailovna.\nCome on, Veronica.\nYou poor child.\nI've lost everything.\nYou have your whole life before you.\nI don't want it!\nWhat's it good for?\nYou must forget the past.\nIt is human nature to forget.\nI don't want to forget.\nI don't need it.\nBut you can't go on tormenting yourself for your mistakes.\nI should do it.\nAll my life.\nYou teach history.\nYou're a wise woman.\nTell me what's the meaning of life?\nThe meaning of life?\nMaybe it's in...\n- Did Chernov get here yet?\n- Not yet.\nWow, I'm really famished!\nTry to be nice to Chernov when he comes, please.\nHe makes me ill.\nI feel exactly the same way, but after all he's my boss.\nThat gives you a reason to lick his boots?\nPlease, Veronica, this can't go on.\nYou're always so irritable, always criticizing.\nTell me, how can I make you happy?\nJust disappear.\nCome in, it's open.\nCome in!\nMark, pardon my invasion.\nNot at all.\nIt's a pleasure.\nHere, let me take that.\nDid you see the paper?\nThe Germans have advanced in the Caucasus.\nYes, it's awful.\nBut we'll show them what we're made of yet!\nPlease make yourself comfortable.\nIt's warm here.\nYour place is nice and cozy.\nMy wife and children are in Tashkent, so I'm kind of homeless.\n- Good day, Veronica.\n- Good day.\n- Where are you going, darling?\n- To the hospital.\nI'm on duty.\nBundle up.\nIt's very cold.\nI admire your wife.\nShe's so honest...\nShe must be very happy with you.\n- I was looking for you at the Philharmonic.\n- Was there a concert?\nNo.\nBut are you going to the birthday party tonight?\nI might.\n- What are you giving her?\n- What can I give her?\nThe war!\nYes, this war.\nIt's nothing gorgeous, of course, but tie a little trifle to it and Antonina will be pleased.\nIt's wonderful!\nWhat do I owe you?\n- It's really nothing, forget it.\n- Thank you very much.\nMark, can you do me a favor?\n- Is someone up there?\n- No.\nCould you get some drugs for me from Feodor Ivanovich?\nFine job, Irina.\nHe'll pull through.\nI hope so.\nIt would be downright mean of him not to.\nIrina, you should have been a man!\nI'm doing all right as a girl.\nVeronica!\nWhat are you doing here so early?\nThe clock was fast.\nPoor girl...\nI can't forgive her for what she did to Boris.\nNew patients again!\nI told them I have no more room.\nI'm running a hospital, not a barrel of herrings!\n- Are these from Kalach?\n- From Stalingrad.\nSome from the front line, others from the hospitals.\nNo place for us here, either.\nDon't worry, they'll find room.\nI'll take 80 men.\nThe rest will have to go to other hospitals.\nLet's see now...\nPlease give my regards to Sergei,\nFeodor, Vassily, Aunt Maria,\nAgraphyona, Catherine, Barbara,\nNikolai, Catherine...\n- You already said Catherine.\n- That's another one.\n- Don't you want to explain it?\n- They'll figure it out.\nSo, Zinaida, Antonina, Kuzma...\nNurse!\n- What do you want, Vorobyov?\n- Never mind.\nNurse!\n- He wants a potty.\n- I'll give it to him.\nThanks.\nThat's beautiful music!\nTurn it up a little louder, will you please?\nShut up your music!\nTurn it down!\nYou hear me?\nWho was that shouting?\nI did, so what?\n- Zakharov, what's wrong?\n- Leave ma alone!\nHe's gone berserk.\nHe got bad news from home this morning.\nHis girl just got married to a friend of his, bitch.\nHe hasn't had a bite to eat.\nTry to see what you can do, nurse.\nThose broads are worse than fascists, aiming right in the heart.\nYou must try to eat.\nIt's the only way to get well.\nI don't want to get well!\nI just want to croak!\nGet the doctor.\nCalm down.\nPlease, calm down.\nBecause of a woman...\nWhat a dumbbell!\nGet the doctor!\nGet the doctor now!\nQuit that yelling!\nCackling like a bunch of hens!\nWhere will they take us now?\nThere're plenty of hospitals in this wide world.\nGuys, the chief is coming!\nBastards!\nQuiet down!\nYou're a soldier in the Red Army!\nWant to desert it?\nYou afraid that if we cure you, you might go back in the army?\nYou're not being fair.\nHe got a bad letter from home.\nI know.\nThat's just an excuse.\nSo what if his girl's left him?\nGood riddance!\nShe's not worth a dime if she gave up a handsome soldier like this, a real hero, for a puny draft-dodger!\nRight.\nShe's the one who's missed her happiness!\nAnd whatever she's got, she deserves it!\nWhat a petty soul!\nCan a woman like that understand the suffering you've gone through?\nKilling her would be too good for her kind.\nYou stood the most difficult trial.\nYou looked death in the face, went to meet it yourself.\nAnd she couldn't stand the small test of time.\nFor women like that, no honorable man can have anything but contempt!\nFor such creatures there is no pardon!\nBandage him!\nAunt Sima, bring him fresh porridge and some hot tea.\nBe good now.\nVeronica...\nWhat the hell kind of a mother are you?\nKeep an eye on your kid!\nAnd I'll be held responsible!\nDaydreaming, you fool!\n- Who are you?\n- Mamma's boy.\n- Where are you from?\n- From Voroshilovgrad.\n- How old are you?\n- Three months and three years.\n- What's your name?\n- Boris.\n- What?\n- Boris.\n- Why the fancy get-up?\n- A concert in the hospital.\n- A likely story!\n- All right, all right.\n- Is Mark here?\n- So far yes.\nI've been saving this for you.\nThank you very much, Anna Mikhailovna.\nIt's for a little boy we know.\nIt's his birthday.\nI wish everyone were as kind- hearted as you are, Mark.\nThe symptomatology of this type of compound injury depends primarily on changes in the nodal structure...\n- Interesting, but beyond me.\n- Why, it's really quite simple.\nThey are not readily apparent to the clinical practitioner, but in most cases the etiology...\n- What is this?\n- What kind of a trick is that?\nWhat do you mean, trick?\nThe poor child lost his parents.\nI want my mommy!\nYou ought to have taken him to the Foundling Center.\nYou go yourself to the Center!\n- Rude child!\n- I'm not, you're rude!\nNow, don't cry.\nWe'll go find your mommy in Voroshilovgrad.\nNow, now, be quiet.\n- Poor baby, he wants his mommy.\n- Look, here comes a goat...\nStop rattling.\nYou're hurting my ears.\nHere, play with the cover.\nDon't you want it?\nOh, my God.\nHere's a bagel roll for you.\nKeep him quiet!\nHe's driving me crazy.\nIf we had some toys for him to play with...\nIrina, take him for a minute.\nHah, what next?\nStop crying, will you?\nLet me take him.\nCome on, my little one, my little Boris...\nI'll undress you and put you to bed...\nHave anyone seen my squirrel?\nYes, Mark took it.\n- Why?\n- He's giving it to some boy.\nMy squirrel to a boy?\n- Where's Mark?\n- I don't know.\n- Where's Mark?\n- I don't know.\nYou're hiding something from me.\nYou know where he's, don't you?\nWhere's he?\nHe's probably gone to Antonina's party.\n- What Antonina?\n- Why don't you ask Mark?\n- Who's she, tell me!\n- Don't order me around.\nMark visits her occasionally.\nDo you get it?\n- You're saying this to spite me.\n- Why would I want to?\nBecause I'm married, I'm loved, and you're still a spinster!\nStop it, Veronica!\nAntonina lives near the food shop, in the little house next door.\nGo over there and see for yourself.\nCalm down.\nI should do something.\nWhen Mark comes home, you'll have a talk.\nBut now you must wait.\nSure, I must wait...\nThat's all I've been doing all the time.\nThat's enough!\nMay our lips benumb.\nWords are futile.\nThey so often lie perchance.\nAnd only our eyes Will never dare lie,\nForever true their parting glance.\nMy eyes are now sad and dark,\nAs though therein a candle was put out...\nIn Leningrad after my parties we'd go for a ride, from one part of the city to the other.\nArrange for a ride now.\nThere's a war on, Antonina.\nCars are worth its weight in gold, the gasoline is strictly rationed.\nGet any kind of car!\nI beg you!\nA fire-engine, an ambulance, a truck... anything!\nLet me hope where there's hope no longer!\nJust the two of us?\nTo the point of full abandon?\nI'll see what I can do.\nI love you!\nSorry, I don't dance.\nI thought I'd tried everything, but I've never tried golden chestnuts.\nLook, a note!\n- It's a birthday note for me.\n- Congratulations!\nWhere's the squirrel?\nWhere's my squirrel?\nLook, you mustn't think that...\nThere's a note here from somebody named Boris.\nMy only one, happy birthday...\nOn this day you were born.\nIt's hard leaving you.\nBut it can't be helped.\nIt's war!\nI must go.\nWe can't go on living the way we did, enjoying ourselves while death stalks our land.\nWe will be happy some day.\nI love you, I trust you.\nYour Boris.\nWhy are you so alarmed?\nGo home.\nI'll be right back.\nWhy?\n- Take your coat off.\n- Thank you.\nYou know, all the Philharmonic cars are being used tonight, and I must have a car.\nYou're Chief Surgeon, you won't refuse me this little favor...\nTransportation is our most critical problem.\nIt was difficult for me too, but I did my best.\nI went out of my way, because you asked me...\n- What I asked you?\n- The exemption.\nNow it's about to expire, and this time to get it will be almost impossible.\n- What d'you mean, exemption?\n- The exemption for Mark.\nYou can be sure I handled the whole thing discreetly.\nCould Mark have done it without informing you?\nHe even offered me money in your name...\nI'm sorry.\nI'm glad you're here, Uncle Fedya.\nI wish you'd talk to her.\nShe burst in without being invited, started a fight...\nShut the door.\nDo you believe that anybody likes having his son marching off to war?\nWhat do you mean?\nOr do you believe that for your petty pleasures and well-being others must lose their arms, legs, eyes, jaws, even their lives?\nAnd you owe nothing to no one?\nYou know I've got an exemption, Uncle Fedya.\nTell us how you got this exemption.\nWhat are you doing, Veronica?\nIt's all right.\nI'm going to rent a room.\nAnd I'm taking the boy...\nPerhaps someone else had better rent a room?\nGladly.\nI've been wanting to for a long time.\nI wish you'd driven me out in the first place.\nYou've been through a terrible ordeal.\nOnly one who had done something worse could have condemned you.\nStay with us.\nI can't.\nI cannot hide behind someone else's back.\nI don't want to.\nThink it over.\nListen, where can I find the Borozdin family?\n- Which one are you looking for?\n- Feodor Ivanovich.\nHe is not in at the moment.\nAre you from Boris?\nNo, I'm by myself.\nI have to see Feodor Ivanovich.\n- Won't you sit down?\n- Thanks.\nFeodor Ivanovich should be here in a few minutes.\n- May I go out?\n- All right.\n- Is he yours?\n- Yes, he's mine.\nHe looks like you.\nAre you a relative of the Borozdins?\nNot really.\nWell, I've done all the fighting I'll ever do.\nGoing home?\nNot yet.\nLeningrad's still blockaded.\n- Yeah, I'm in a spot.\n- Why?\nI guess there's no harm in telling you because you're not the family.\nBut how do you tell a man his son was killed?\n- Where did it happen?\n- Near Smolensk.\nWhat do you want me to play?\nI don't care.\nTell me, did you see him buried?\nNo.\nI was put on a stretcher and taken to a hospital, and he was with a friend of his, Stepan.\nStepan...\nI've got to find his girl now.\nHe was really in love with her.\nI'm the girl.\nCome to see us when you're in Moscow, Volodya.\nThanks very much.\nI will.\nThe war's over.\nIt's strange, isn't it?\nAnd you're still waiting?\nI am.\nOne must always keep on hoping.\nWhat's the use of waiting?\nI saw it with my own eyes.\nWhat did you see?\nYou saw him wounded?\nYou saw him fall?\nYou didn't see him die.\nBut if he's alive, why hasn't he written to you?\nAnything could happen.\nStepan hasn't written to anyone either.\nThey know at the factory that he was in some Special Operations.\nDasha promised to let me know when he's back.\nBoris is alive.\nHe's alive.\nLook!\nThe victors are coming!\nKolia, darling, you're back!\nBoris!\nVeronica!\nStepan!\nThe flowers...\nFor you.\nWell?\nWhat?\nYou see...\nWell...\nMy darling!\nDear mothers, fathers, brothers and sisters!\nThe happiness of our reunion is boundless.\nThe heart of every Soviet citizen sings with joy, the joy of victory!\nWe have all waited for this happy moment.\nWe dreamed of it in the darkest hours of our struggle.\nBut we'll never forget those who lie silent on the battlefield.\nYears will pass, our cities will rise again, and our wounds may one day be forgotten.\nLet one thing remain in our hearts, a cold hatred of war!\nWe deeply feel the grief of those who cannot meet their loved ones today.\nWe must all take a vow to keep our promise that sweethearts will never again be parted by war, that mothers may never again fear for their children, that our brave fathers may not stealthily swallow their tears.\nWe have won and remained alive, not for destruction but to build a new life!\nDon't just stand there.\nGive the flowers to whoever they're for.\nThank you very much, sister.\nOh, what a darling!\nWhat a chubby little darling!\nLook, the cranes are flying over Moscow!\nThe End\nOh, mighty God\nPlease take my soul, to ask You why You torture me\nTake my soul or alleviate the suffering\nOh, God, are You...\nI ask Your forgiveness\nI know You exist, my heart shivers hearing Your name\nBut I wonder, and You are the Most Merciful and Righteous\nWhy are we led to temptation?\nWhy does sin take over virtue?\nWhy does the evil in our souls overcome the goodness?\nWhy does one sin then remorse and ask for forgiveness?\nI have committed many sins but I am confused;\nwas it my deprivation from my mother that pushed me towards evil?\nMy parents were divorced when I was two\nAnd my father was responsible for bringing me up\nHe was my father, brother and mother as well\nHe granted me his youth, he lived only to please me\nNevertheless, nothing compensated for the loss of my mother\nI envied any girl that had a mother\nIn a girl's life, there are things only a mother understands\nThese things were like a barrier between me and my dad when I started to turn into a young woman\nIt made me feel lonely and deprived\nMy father was the only thing I really possessed\nI didn't demand for my rights as a daughter only, but more\nI considered myself responsible for his happiness\nWe lived with my uncle who was only a few years older than I was\nI was the lady of the house\nMy face had no sinister look to it\nIt is an innocent face, like that of a child who hadn't yet peen polluted by life's ugliness\nI started my evil deeds by pulling small pranks that later developed into big disasters\nEven my schoolmates were not exempted from them\nKawthar was in love with my cousin, Medhat\nI convinced her falsely that Medhat loves me\nI was able to part between them and ruin their lives just because I liked being evil but I would cry also\nI cried for long nights, in regret for what I had done\nAnd I was forever sleepless\nSLEEPLESS\nBased on a novel by:\nEhsan Apdel Koddous\nDirected by:\nSalah Apu Seif\nThen came the day when I felt my life was really falling apart\nI was sixteen, attending boarding school\nMy father came and took permission from the principal to take me home\nYou know something, Nadia\nI don't like your staying in a boarding school\nWhy?\nIt's a great school\nYou know I sent you there because I had to\nAfter you've grown like this, you couldn't stay home without a woman to look after you\nNanny Halima is like a mother to me\nWell, at the end of the day, she's still a nanny\nI have worried about you all my life\nThere were so many little issues in your life that I couldn't approach you with\nOnly a woman could talk to you about those issues\nI never complained\nYes, but we have to live together forever\nYou know, when you get married,\nI will make sure that your husband will take us both\nWe can never live together though unless I married\n- Married?\n- Yes, Nadia\nI have lived without marriage for 14 years, for your sake\nAnd now I married for your sake too\nThe only condition in the woman I was going to marry was that she would take care of you, and I found her\n- I am sure you'll love her\n- You should love her\nIf you love her, Nadia, I will love her\n- Congratulations\n- Just a plain congratulation?\nI only want you to be happy, Daddy\nHello, Nadia\nYou're more beautiful than your picture\nAunt Safiya\nPlanning to get drunk, Aziz?\nThis is your third drink\nWhat to do?\nI'm starving\nLooks like Nadia won't appear unless I go get her\nHow posh!\nBless your hands, Safy\nSee the difference a lady's presence makes in a house!\nWhat have you done to yourself?\nWhat is this hairstyle?\n- Is it ugly?\n- No, not at all\nYou look just like Aunt Safiya now\nI am not as cute as Nadia\nNadia is beautiful, have a seat\nSit over there, Nadia, in the seat across me\nCome on, darling\nIt's our fate to take the back seat\nWell, get yourself a bride\n- Here's my bride!\n- I'd never give her to you!\nYou are always at night clubs!\nWhen I was young, I wanted to marry Daddy\nWell, he's taken now, I am the only one left\nNo man in this whole world is worthy of Nadia\nNot even Daddy?\nYour father is one of a kind\nBut I hope you find a man like him\n- What's for vegetables?\n- Messakaa\nOh, God!\nIt doesn't go well with whiskey\nI have a long night yet, tonight is the big night\nDo you hear that?\nAll his nights are like that\nActually, I asked the cook to make Messakaa because I learned that Nadia likes it\nTell me your favorite meals and I'll make them for you\n- I like late nights\n- And borrowing money\nOh, now you are reminding me of the 100 pounds I owe you!\n- I'm not eating then!\n- Why, Aziz?\nLet him go, he probably has a date;\nhe's been looking at his watch\nYou are not a niece, you are a wicked mother-in-law!\n- Good bye\n- Good bye\nStop drinking, would you?\nGood night\nWill you sleep this early?\nYes, I'm a bit tired\nGood night, darling\nDon't forget to close the balcony door\n- Good night, Auntie\n- Good night, Nadia\n- It's getting cold\n- I don't think so\nIt's going to turn on fire\nAs long as you are by my side, I feel on fire\n- What are you doing?\n- Getting warm\nThis is not how to do it..\nHasn't Nadia woken up yet?\nNot yet, sir\nPut this vase on the cupboard over there\nHalima, wake Nadia up, it's ten o' clock\n- Good morning, Nadia\n- Good morning\nI hope you get married soon\nYour father, Lady Safiya and your uncle are waiting for you\n- Uncle is awake?\n- Yes\nEverything has changed since Lady Safiya came\nI feel that everything in the house is newer and prettier\nThe furniture is still the same, it was just too close together\nI never thought I would ever wake up this early\nEarly?\nIt's 10:30!\nTomorrow, breakfast is at 8:00, we'll force you out of bed\nYour father's marriage is trouble for me and you\n- Good morning\n- Good morning, dear\nWe should take Nadia to the doctor\nI think she's a bit pale, she needs some vitamins\nVitamins?\nNo, all she needs is a husband\nHusband?\nWho could we fool into marrying her?\nRemember when I asked you to make me scrambled eggs\nYou burned your hand, and nearly burned the house down!\nWe all did that as kids\nI will teach her everything, she'll be just like me\nI wish she'd be only half of you\nWhy do you want to marry me off?\nBored of me?\nSafiya?\nNo one is answering\nYou answer it\nHello, how are you, Auntie?\nThursday?\nWhat time?\nSeven?\nDefinitely, yes, we'll be there\nBye-bye, Auntie\nYou know what, Daddy?\nI'll never speak to my friend Aliya again\nWhy?\nShe's a nice, funny friend\nI was once at her place, she left me alone and talked to her boyfriend on the phone\nShe was talking to him while her mother was sitting next to us\nBe fair!\nShe was talking to him, pretending he was a girl\nThe strange thing is her tongue didn't slip once\n- Live and let live\n- Believe her, Ahmed, girls these days can do anything\nWho wants to come to the club for some fun?\nI'd love to but I have things to do\n- Take Nadia with you\n- I am tired\n- We'll expect you for lunch\n- I've forgotten what junk food is like!\nLet's go\nI am very sorry, miss\nI apologies again, a hundred times\n- Okay\n- Okay what?\n- Accept my apology\n- What if I don't?\nI won't eat or sleep\n- It's over\n- Thanks, see you around\n- Anyone bugging you?\n- Not at all\nI know Mostafa, he thinks he's still a youngster\nI don't like young men anyway\nHe's a playboy, everyday a new girlfriend\nAnd you are straight?\nWhere were you just now?\nPlaying backgammon\nSo, was your opponent a brunette or a blonde?\nWatch it, Ahmed\n- Yes?\n- Is this Mr. Mostafa?\nYes, who is this?\nI am a girl, don't you like talking to women?\nI am sure you would enjoy talking to me\nNo one prodded me to call you, no\nI happen to like you\nSo you've seen me, you know me\nIt's not fair, you have the advantage!\nThis is selfishness!\nYou can imagine me as we speak\nBut I will always be asking myself: who is she?\nIs she pretty or ugly?\nWho told her to call me?\nBe patient, you won't regret it\nLater, when I feel comfortable about you\nWho told you I needed more women?\nDid I beg you to call me and test me - to see if I am worthy of you or not?\nWait a minute\n- Wait a second\n- I'll hang up\nFirst you didn't want to talk, now you can't wait for a second?\nThis phone thing is old-fashioned\nTimes have changed\nThere are now clubs and social gatherings for people to meet and know each other\nIt's not logical for a girl to reveal half her body at the beach and then hide her identity on the phone\nPeople have no time for such hypocrisy\nDid you expect me to jump at you and say I loved you?\nSince we've gone this far, please tell me your name\nI will count till three\nIf you don't tell me I'll hang up 1, 2, 3\n- Wrong number\n- My name is Nadia Lotfy\nMy father is Ahmed Lotfy, we live in Dokki\nYou saw me and you liked me\nYou even threw your ball at me this morning\nGreat!\nWhen will we meet?\nPlease, Nadia\nSince we will meet anyway, then the sooner, the better\nTomorrow at 4:30 in front of the Horse-Riding Club\nNo, 4:30\nI am confused, almost lost\nAs if an invisible hand pushed me towards an unknown fate\nI needed someone by my side\nI needed someone to guide me to the path of security\nBut I had no one\nI couldn't ask my father's opinion, nor his wife's\nI felt just as lonely as I had before\nI feel afraid of Mostafa\nHe is stronger and older than I am, and more experienced\nShould I turn back?\nDoc you're beginning to sound like Sherlock Holmes.\nhomer, marge, bart, lisa, maggie\n"
  },
  {
    "path": "benchmarks/haystacks/opensubtitles/en-medium.txt",
    "content": "Now you can tell 'em.\nWhat for are you mixing in?\nMaybe I don't like to see kids get hurt.\nBreak any bones, son?\nHe's got a knife behind his collar!\n- There's a stirrup.\nYou want a lift?\n- No.\n- Why not?\n- I'm beholden to you, mister.\nCouldn't we just leave it that way?\n- Morning.\n- Morning.\n- Put him up?\n- For how long?\n- I wouldn't know.\n- It'll be two bits for oats.\n- Ain't I seen you before?\n- Depends on where you've been.\n- I follow the railroad, mostly.\n- Could be you've seen me.\n- It'll be four bits if he stays the night.\n- Fair enough.\nMorning.\nDid a man ride in today - tall, sort of heavyset?\n- You mean him, Mr Renner?\n- Not him.\nThis one had a scar.\nAlong his cheek?\nNo, sir.\nI don't see no man with a scar.\nI guess maybe I can have some apple pie and coffee.\nI guess you could have eggs with bacon if you wanted eggs with bacon.\n- Hello, Charlie.\n- Hello, Grant.\nIt's good to see you, Charlie.\nIt's awful good to see you.\nIt's good to see you too.\n- I'll get the eggs.\n- No, get the pie.\nI can pay for the pie.\nYou're a very stubborn man.\nApple pie is not for breakfast.\nIt is if you like apple pie.\nNow I need a fork.\n- Working here long?\n- About three weeks.\nHow's the Utica Kid?\nHe was well... when I saw him last.\nWhen was that?\n- Good morning.\n- Morning.\nWell, business is early and Pete is late.\nThe lunches.\nAre they fixed?\nWhy do I ask?\nThe lunches are always fixed.\nWhy?\nBecause you fix them.\nCharlie, I'll make you an omelette like only Pete can make an omelette.\nVery bad.\nCome on around, sit down, have a cup of coffee.\nPete had that place in Santa Fe, remember?\nAre you running a shoe store on the side?\nThose are box lunches for the work train.\nMoney, money, money.\nPete knows how to make it.\nHe follows the railroad.\nI guess a lot of people follow the railroad.\nYou and Pete.\nThe Utica Kid.\nI asked when you saw him last.\nThey've lost three payrolls.\nNow when did you see him last?\n- Charlie, where did I put my apron?\n- It's under here.\nYou must be nice fella.\nIf Charlie sits with you, you must be nice fella.\nI make omelette for you too.\nWe were talking about the Utica Kid.\nHe can wait.\nBen Kimball's in town.\nThey put his car on the siding yesterday.\n- I know.\n- His wife is with him.\nIs she?\nI often wondered what Verna was like.\nI saw her last night.\nAll fine silk and feathers.\nShe's soft and beautiful.\nAnd I can understand now.\nCan you?\nHow long are you gonna be in town?\n- That depends on Ben Kimball.\n- You working for the railroad again?\n- If I am?\n- That would be good.\nPlaying the accordion's not for you, not for a living.\nYou belong to the railroad and it belongs to you.\nThere were a lot of things that used to belong to me and somehow I lost them.\nTwo omelettes a-comin' up.\n- Do you like eggs?\n- No.\nThat's too bad.\nYou got an omelette coming up.\nWell, somebody's gotta eat them.\nCome on.\nThat means you.\n- Could you put it in a box?\n- An omelette?\nI'll be hungrier when I get to end of track.\nMaybe it will go down easy.\nEasy or not, it goes down right now.\nI can't pay for it.\nThen you can help me sell lunches at the station.\nAny more arguments?\nCome in.\n- You want to see me, Ben?\n- I certainly do.\nHello, Grant.\nSit down.\nAll right, Jeff.\nRenner, go to Pete's and get one breakfast and a jug of coffee.\n- You haven't eaten yet?\n- I've eaten.\nJust get coffee.\nHot.\n- How's everything been going?\n- I make a living.\n- Playing an accordion?\n- That's right.\nWant me to play a tune for you?\nThere's other jobs besides railroading.\nWell, Colorado may be big in miles.\nIt's kinda short on people.\nSo when a man gets fired the way I was fired the story gets around.\nWell, I'm...\nI'm sorry.\n- No, I like to make music.\n- And it keeps you near the railroad.\nIf someone needs information about a payroll, you can sell it.\nYou know it's a funny thing.\nI don't like you either.\n- Is that why you sent for me?\n- No.\nAnd keep out of this.\nHave it your way.\nBut I don't trust him now any more than I did when I sent him after the Utica Kid.\nI sent you after a thief and you gave him a horse to get away on.\n- I told you to keep shut.\n- Let him talk.\nI'm not wearing a gun.\nI'll be honest with you.\nHe'd talk the same if I was.\n- It's been nice seeing you.\n- Grant.\nI'm sure Jeff didn't mean to be rude.\nSometimes he has a blunt way of putting things.\nUnfortunately, Ben isn't much better.\nIt's not unfortunate.\nIt just gets things said in a hurry.\nToo much of a hurry.\nThey forgot to ask you if you'd work for the railroad again.\nWould you?\nYes, I would.\nNot to give you a short answer.\n- It's the answer I wanted.\n- Sit down, Grant.\nDo you remember Whitey Harbin?\nUsed to work down in Arizona and New Mexico.\n- Yeah.\n- Well, he's moved into Colorado.\nI thought he favoured stage lines and banks.\nSo did we.\nBut he's learned about railroad payrolls\n- and he's grabbed three in a row.\n- Where do I fit in?\nThey're making up a supply train in the yard.\nI want you to ride it.\n- With $10,000 in your pocket.\n- Why me?\nQuite frankly, because no one would suspect you of carrying a payroll.\nI sure don't look like $10,000, do I?\nAre you building a bridge you don't need?\nThe money's here.\nWhy not bring the men in on Saturday and pay them off in town?\nAnd lose half the crew?\nTurn them loose in a mining town, they'll go up the hills looking for gold.\nIt won't work.\nAnd we have to finish this section before snow comes.\nThat's a pretty big gamble on a man who gave his horse to a thief!\nYes.\nYou might as well know the deck's stacked against you.\nA boxcar will be hooked to the train.\nI'll be one of the men in it.\n- When did this happen?\n- Last week.\n- Renner, did you know?\n- Yes.\n- Why didn't you tell me?\n- I told him not to.\n- Why?\n- Everything we plan gets back to Whitey.\n- You think I'd tell him?\n- You might trust the wrong people.\n- If he takes the job, I'm sure of it.\n- And if I don't take it?\nThen Jeff will be sitting in Ben's chair.\nOh, I wouldn't like that.\nUh-uh.\nSo I'll take the job on one condition.\nIf I make the delivery I get his job.\nYou made a deal.\nThank you.\nWait a minute.\nIt's getting cold up in the hills.\nThis coat has always been too long for me.\nThanks.\nWell.\nI thought you didn't like him.\nHe said that.\nI said I didn't trust him.\nAnd I still don't.\nGrant.\nAre you surprised Ben sent for you?\nI was until I talked to him.\nHe seems to have changed.\nYou're right.\nHe doesn't belong in a private car with clerks, figures and pressure from the office.\nHe belongs at the end of track, running a gang and building a railroad.\n- He's a working stiff like you.\n- Yes, but he can dream a little too.\nColorado wouldn't have a railroad if he hadn't sold them on the idea.\nFor his sake, I wish he hadn't.\nHe was happy at end of track but they kicked him upstairs and sent us to Chicago.\n- And now he needs a little help.\n- That's why he sent for you.\nOh, I may have had something to do with it.\nWhy?\nThere was a time when you were interested in me.\nI was more than interested in you.\nI wanted to marry you.\nTimes when I'm sorry you didn't.\nAren't you?\nNo.\nA man likes to know his woman will back him when he's down and you didn't.\nBen called me a thief and you went right along with him.\nIt's as simple as that.\nGrant.\nFor old times' sake.\nFor old times' sake?\nJust that and nothing more?\nPerhaps just a little more.\nWe want to be sure that payroll goes through, don't we?\nI don't know.\nMaybe Jeff is right.\nHis type seldom changes.\nAnd if we've made a mistake, it's the finish of everything.\nThen why not cut this car into the supply train?\nIf we're all playing showdown, I'd like to see the cards when they fall.\n- Thank you.\nI hope you have a nice trip.\n- Thank you.\n- Ma'am, is that all?\n- Mm-hm.\n- Here's your lunch.\nYou've earned it.\n- Thanks.\n- Mister, are you going to end of track?\n- Yes.\nCould you stake me to a ticket?\nI can ride half fare if I'm with an adult.\n- And you're an adult.\n- Well, sometimes I wonder.\nAll right.\nYou can come along.\nWe'll ride with the other fellas with no money.\n- On the flatcar?\n- Go on.\nClimb aboard.\nPlenty of fresh air.\nDo you good, make you grow.\nAre you sure he didn't come while I was away?\nAin't nobody been here but the man riding the sorrel.\n- What colour horse your man riding?\n- How should I know?\nIt's extremely important that I see him.\nThey've cut in Mr Kimball's car.\nBarley!\nA man told you to put his horse up...\nDon't start that too.\nThat there sorrel is the only horse what come in.\nThat there sorrel is the horse I want.\nHe belongs to my friend Grant McLaine.\nMcLaine?\nThat's who it is.\nI knew him as a troubleshooter in Santa Fe before he went bad.\n- He didn't go bad.\n- What'll you do with his horse?\n- Ride him!\nI'll change, you saddle him.\n- All right.\nHey, Pilgrim!\nCome here!\nDon't go getting your liver all upset.\n- Once you miss 'em, they stay missed.\n- It's none of your business.\n- Could be.\nYou wanting to get on that car?\n- If I am?\n- I can take you to where it's going.\n- On one of these?\nThey'll get you to end of track before the train does.\n- That's ridiculous.\n- $100 aging yours I'm right.\n- You've got a bet.\n- And you got stuck.\nHere.\nI'll let you ride Flap Ears.\n- You can smoke inside, mister.\n- I can smoke where I want.\nYou can burn too if it pleases you but it'll still cost you four bits.\n- For what?\n- Travelling first-class.\nOtherwise ride the flats.\n- You play that?\n- Yeah, I play it.\n- When?\n- When?\nWhenever somebody throws a dime in my hat.\n- I ain't got a dime.\n- This one's on me.\n- Been up here before?\n- Part way.\n- What takes you to end of track?\n- A job.\nFigured I'd get one at Junction City.\nThey told me the foremen do the hiring.\nYou're a little small for swinging a sledge.\n- I can carry water.\n- Yeah, you can carry water.\n- Very important job.\n- Hey!\n- What are you doing here?\n- He's with me, Pick.\n- Where did you get him?\n- Somebody threw him away.\nDon't you throw him away.\nHe'll get lost in the mountains.\nWho tells the men who build railroads how to get through the mountains?\n- The river.\n- Huh?\nThey just follow the river.\n- Who told you that?\n- I guess my dad was the first.\nHe had a little song about it.\n# Follow the river\n# The river knows the way\n# Hearts can go astray\n# It happens every day\n# Follow the river\n# Wherever you may be\n# Follow the river back to me #\nWouldn't you wanna be knowing about Concho?\n- Who's Concho?\n- The man you roped.\nDo you wanna know?\nNot unless you wanna tell me.\nI ought to tell you.\nHe's fast with a gun.\nOnly know two men who are faster.\nWhich two men would they be?\nWhitey Harbin for one.\nI run away from Whitey.\nThat's why Concho was after me.\nYou're one of Whitey's men?\nNo.\nI was in Montrose.\nWhitey and his bunch were robbing a bank.\nI was just in the road watching.\nWhitey was all for killing me but the other fellow wouldn't let him.\nHe swung me up into the saddle and said,\n\"You ain't killing a kid.\nNot while I ride with you.\"\n- Whitey, he backed down.\n- Cos the fella's faster with a gun?\nLike lightning.\nThis other fella, does he have a name?\nHe's got a name.\nThe Utica Kid.\nI'd have stayed with the bunch if he was boss.\n- But he's not?\n- Not yet.\nAlways he's shoving pins into Whitey, laughing at him, driving him crazy.\nEven crazier than he is!\nSomeday Whitey will crack and he'll lose.\nIs this the fresh air you were talking about?\nHow come them fellas can ride inside?\nWell, it's the old story of good and evil.\nIf you spend all your money on whiskey, you have none left for a ticket.\nDon't drink.\nThen you'd have six bits when you need it.\nThat's very true.\nTell you what, maybe I have six bits.\nYeah.\nWhat do you say we go in and spend it?\nCome on.\nGuess I wasn't tough enough to follow the river that way.\nSometimes it isn't easy travelling upstream.\n- That will be a dollar.\n- That'll be six bits.\nI'm the adult.\nHere.\nHold on to that.\n- Don't worry about Concho.\n- You would if...\nOh, no, come on.\nSit down.\nWe can both worry together if you want to tell me about it.\n- It's nothing.\n- And if it was, you'd rather not say.\nAll right.\nI broke with Whitey.\nDoesn't mean I have to talk.\nNo, you don't have to talk.\nI even broke with the Utica Kid.\n- Hi, Utica.\n- Put him away, Howdy.\nSure.\nCome on.\nIt's a pretty good rig.\nToo good for the guy that owned it.\nRemember that draw you taught me?\nIt worked.\nHe went down with his gun in the leather.\n- And now you're an \"in case\" man.\n- In case?\nYeah.\nIn case you miss six times with one, you draw the other.\n- If you have time.\n- I'll have time.\nCall it.\nDraw!\nYou better learn to draw that one before you fool around with the other.\nAbout three inches high, Whitey.\nYou better take another look at that skull.\nNext time it could be yours.\nDon't soft-foot up behind me!\nIt makes me nervous!\nSo I notice.\nWhat else did you notice?\nDid you see Concho?\n- Did you see him?\n- He wasn't on the trail.\nDid I ask you where he wasn't?\nI asked you did you see him?\n- I would've said so.\n- Not straight out you wouldn't.\nBecause you're a funny man.\nYou've always gotta be laughing inside.\nWell, go ahead, laugh.\nBut get this, Kid.\nI'm a better gun than you.\nOr would you like to try?\nIt's an interesting thought, but I'm afraid of you, Whitey.\nYou ain't afraid of me.\nAnd in your feet, where your brains are, you think maybe you're just a bit faster.\nAnd you know something?\nIt could be.\nBefore you break up completely, you mind putting a name on this?\nIt's just a little old wedge.\nBut when you put it through the latch of a boxcar, you can't open the door from the inside.\nNow, you ask me, who would want to open the door of a boxcar from the inside?\n- Jeff Kurth and a dozen gunmen.\n- How would you know?\nI was sleeping up there when Concho told you.\nYou better learn how to snore!\nYou wouldn't know how to shoot a man in the back.\nI'll learn.\nWhat'll it be, gents?\nWe got Old Grandpa, Old Grandma, Old Uncle Tom.\n- And Old Empty.\n- You ain't funny, Latigo.\nWho could be funny, sweating it out in here?\nGet away, boy.\nYou're too young for whiskey even if we had plenty.\nDon't get fancy.\nYou ain't talking to Joey.\nSpeaking of Joey, you didn't happen to spot him along the trail, did you?\nI'll take a shot of that Old Flannelmouth.\n- Did you see him?\n- No.\nDid he leave any sign?\nA little.\nHe was headed toward Junction City.\nBut you didn't follow him?\nJoey always was a nuisance.\nI was for dropping him in the river.\n- Why didn't you?\n- And get my brains shot out?\nYou've got to find a better reason to kill me.\nSuppose Concho didn't catch up with Joey in town and suppose the kid talked?\n- He won't talk.\n- Maybe not, but Concho ain't back.\nUnless he gets back, we won't know where they're carrying the money.\nThat's right.\nMaybe it'd be smart to let this one go through.\nWhy?\nWe've grabbed three in a row.\nLet's give them a breather.\nThat makes sense.\nI go along with Utica.\nYou and me both.\nWe ought to let this one go through.\nIt ain't going through!\nWhy not?\nYou're the one who taught me about payrolls and now I like them.\n- So do I.\n- I'll buy that.\nA man can get saddle-sore looking for a bank to take.\n- I'm with Whitey.\n- Me too.\nWhat about you, Torgenson?\nI got no complaints.\nYou call it, I'll play it.\nLooks like you've been outvoted.\nOr do you want a recount?\n- Right now, I'd rather have a drink.\n- Suit yourself.\nIf I can't buy a fight, I'll buy a drink.\nFill 'em up.\nSorry, the bar is closed.\nOn account of we're fresh out of whiskey.\nEither get this floor fixed or get a new bartender.\nWhen do we make the hit?\nAny time you're ready.\nShe was halfway up the grade when I left.\nWhy didn't you tell me?\nWhy didn't you ask me?\nFunny man!\nMount up!\nSettle down.\nIt's only another job.\nBut if you was boss, we wouldn't do it.\nIf I was boss we wouldn't do it.\nYou ain't boss!\n# So I bought myself a shovel and I bought myself a pick\n# And I laid a little track along the bullfrog crick\n# Then I built a locomotive out of 20 empty cans\n# And I tooted on the whistle and the darned thing ran\n# Oh, you can't get far without a railroad\n# You can't get far without a railroad\n# Something's gotta take you there and gotta bring you back\n# You can't go any distance in a buggy or a hack #\nThrow some ropes around them timbers.\nWe'll pull it down.\nTorgenson!\n- OK, John.\n- Hurry it up, Jubilee!\n- Boy, they're pushing her fast today.\n- Yeah!\nMaybe they heard I needed a quick ten thousand.\n- That water tower your idea?\n- What's wrong with it?\nAny self-respecting Injun could walk away with it.\nFunny man!\nHe knows everything about everything.\nLet's get down and lock the barn door.\nWe've stopped!\nWhitey's making his hit!\n- McLaine sold us out!\n- No, Ben.\nThey didn't learn it from Grant.\nLeary!\n- A hold-up!\n- They did it again!\nStop your moaning and hold on to your hat!\nThey won't stop old Tommy Shannon with a tank full of water.\nThat's no way to treat railroad property, Mr Shannon.\nTake your hand off the throttle and reach for the brake!\nAll right.\nSit down and behave!\nCome over here.\nOpen the safe!\n- Ha!\n- Move in!\nSame as last time!\n- We thought you were lost or drunk.\n- There ain't nothing in there.\nJubilee!\nHow are you making out?\nTry to talk your way out of this!\n- I'm sorry I missed out with Renner.\n- Never mind.\nWhere's the money?\n- It's not in the safe.\n- Then where is it?\nIt could be going to Junction City with Jeff's men.\nThat's not true.\nRenner told us Jeff wouldn't carry the payroll!\nThat's a help.\nLeast we know who didn't carry it.\nFunny man!\nWhen you get through laughing, see what's in that red car.\nSure.\nGlad to.\nAs soon as I pick up my horse.\nHe's worth more than anything I'm gonna find on this train.\nGet those pilgrims out.\nMaybe one of them is carrying it.\nHit the other cars!\nSee if you can find it.\nOutside!\nAll of you!\nIs this what you wanted to tell me?\nHave a look inside, Latigo!\nIf that's McLaine...\nNo, Ben.\nPut it away.\nYou may as well be comfortable.\n- Be my guest.\n- Gladly.\nDo you mind if I ask the name of my host?\nNo, I don't mind.\nWould the payroll be in there?\nNo.\nWhy not take a look, just to be sure?\nBoy, is this stuff mellow.\nBottled in bond too.\n- I forgot.\nLadies is always first.\n- Thank you, no.\nSee for yourself.\nHello, Joey.\nWhat are you doing here?\nGetting robbed!\nDon't bother.\nNone of them's got more than two dollars.\nWhitey!\nThere ain't no payroll in there.\nHow come you missed out?\n- I had a little trouble.\n- Now, ain't that too bad?\n- Maybe I ought to give you a little more.\n- Whitey!\nKimball's back there with his wife.\nYou just got lucky!\nPut them back in the car!\nGet aboard!\nGo on.\nGood little boys don't run away.\nThis time you'll learn!\n- Where's the payroll?\n- The man says he doesn't know.\nI can help him remember.\nTake her outside.\nTake her outside yourself.\nI'm afraid of women.\nThey scream and scratch, and sometimes step on your toes.\nDon't say no to me.\nNot when I got a gun in my hand.\nI won't.\nUnless I'm holding one too.\n- Outside.\n- If you want the payroll...\nYou'll have to wait for the next work train.\nWe decided not to send it through on this one.\nOh?\nI don't mind waiting.\nI'll be at Pay Load.\nYou can bring it to me.\nThen I'll take 12 hours' start, you get your wife back.\nSee what happens when you don't carry your brains in your feet?\nI ought to make you walk.\nJubilee, lead them out.\nStep up with Latigo.\nWhat about Joey?\nYou gonna leave him here?\nHe'll ride with me.\nOr would you like to?\nSettle down.\nWe're getting $10,000 for the lady, remember?\nWhich one do I ride with?\nWhich one do you think?\nTake her to the end of track, Mr Shannon!\nHere's a stirrup.\nGive you a lift?\nI'll take that box.\nDon't crowd the cantle.\nYou'll ride easier.\nWhoa, mules!\nMust have got tired of making the climb and started home.\n- Come on, boy!\n- Just a minute.\nThere's a mining town near here.\nIt used to be called Pay Load.\nIt's still called Pay Load but nobody lives there.\n- It's over beyond that far hill.\n- Which hill?\n- You see the first hill?\n- Yes.\nSee the second one?\nThere's a third hill.\nPay Load's behind that.\n- How much do you want for this mule?\n- $50.\nFlap Ears, when you unload this piker, you come on home to mother.\n- Get outta there!\n- Gah!\nWelshing on a bet!\nNever could understand them railroad people.\nCome on!\nCome on!\n- Mr Kimball.\n- Come over to the telegraph shack.\n- Before you pass.\nDid you bring the payroll?\n- Not now!\n- Did you bring it?\n- I didn't.\n- Now what?\n- The end of the railroad.\n- Shut up, Feeney.\n- Let go of me or I'll push this down your throat!\nWho wants your man?\nI don't want none of 'em!\nThey're all broke!\n- See you in Denver.\n- I'm off to Denver too.\n- So am I!\n- Nobody goes without orders from Kimball!\n- I'm leaving.\n- You are not.\nYou'll take no joyride in this town with them painted hussies.\nWe've waited this long.\nAnother night won't hurt us.\nBut if the money's not here in the morning, out we go!\nGet back to work!\nWe're beat, Mr Kimball.\nWithout the pay, the gang will go to Junction City.\n- I know.\n- Any word from Jeff?\nHe's in Junction City.\nSays the car held to the grade all the way.\nHe and his men will be after Whitey in...\nThey will not!\nTell him to stay right where he is until further orders.\nYes, sir.\nWonder if he thinks that's private property.\nIf he tries to divide that like he cuts up the loot, there's gonna be shooting.\n- Your laundry?\n- Sandwiches.\nDo you want one?\nNo.\nWhere did you get them?\nJunction City.\nA girl in a restaurant gave them to me.\n- Was she pretty?\n- Mm-hm.\n- Think you could get me a date?\n- She's not that kind of a girl.\nAny of you boys win enough to buy a drink?\n- You ain't got a drink.\n- I got a drink.\n- I thought you was fresh out.\n- I was till we made the hit.\nWhile you looked for the payroll that wasn't there, I had important business.\nCome on, fill her up.\nLatigo ought to be running this bunch.\nWe might not eat, but we'd sure drink.\nHa ha!\nYou're a funny man.\nWhy don't you laugh?\n- Am I supposed to?\n- Not if you're smart.\n- I think you're smart.\n- And what else do you think?\nThat you made a mistake.\nShe'll only bring you trouble and guns.\nSince when is $10,000 trouble?\nThat's exactly what you're worth.\nYou're very flattering.\nBut I'm inclined to agree with you.\nDon't make a habit of it.\nLatigo, I want a drink!\nAnd you've got a few habits I don't like either.\nSettle down.\nDo you see what she's up to?\nI can see you.\nAnd what I see I don't like too good.\n- I guess you could use one.\n- Thank you, no.\n- It's the best.\nI got it off your own bar.\n- You drink it.\nSorry, lady, I don't drink.\nI'm studying to be a bartender.\n- Don't you drink?\n- Not alone.\nSuppose I join you?\n- Do you mind?\n- And if I do?\nDon't push it.\nFor a little while you're gonna need me and I'm gonna need you.\nI watched you walk.\nI could swear we've met before.\nCould you?\nFunny little things you do.\nLike when you smile.\nStrange.\nI seem to recognise all your mannerisms, if you know what that means.\n- I know what that means.\n- Do you?\nI'm supposed to fight Whitey over you.\nWith a little luck we'd kill each other.\n- It's an interesting thought.\n- What's interesting?\n- She is.\n- You're so right.\nI may not send you back.\nNot until you've helped me spend the ten thousand.\n- You mind if we join the party?\n- Yes!\nYou shouldn't, cos if you guess wrong you ain't gonna hang alone.\nYou like another drink?\n- Thanks, I still have this one.\n- Drink them both.\nAnybody want to start the dance?\nWith only one girl?\nGet back to the bar where you belong.\nLet's all get back to the bar, where we belong.\n- You almost got your wish.\n- One of them.\n- The other?\n- To know your name.\nHis name?\nHe's the Utica Kid.\nI don't like it either.\nMy family used to call me Lee.\nWhy don't you?\nYou're supposed to be outside.\nCome out with your hands up.\n- What are you doing here?\n- I want to see the Utica Kid.\n- Who are you?\n- A friend of his.\nFunny thing, he never told me about no girlfriend.\nIs there any reason why he should?\n- What's your name?\n- Charlie Drew.\nAnd you can put that gun away.\nOr do I look dangerous?\nNot exactly.\nGive me that rope.\n- When'd you get here?\n- Just before they rode in.\nUtica pulled the job off right on schedule.\nI suppose you've known it was going to happen for quite some time.\nNo, I haven't.\nUtica doesn't talk to me about jobs.\nNot this kind.\n- Did he ever have any other kind?\n- He will have.\nSoon.\nThen why don't you hold out?\nWhy don't you keep away till he stops being a thief?\nI told him that's what I'd do.\nHe just looked at me and smiled.\nHe said, \"I wonder if you can.\"\nTonight he has his answer.\nYou're here.\nYes, but only to tell him that you're...\nOnly to tell him I'm in town and might come looking for him.\nI want to keep him alive.\nI want to keep you alive.\n- You know what he can do with a gun.\n- I know.\n- Well, then, why?\n- Because of a little thing called self-respect.\nMaybe you wouldn't understand anything about that.\nFor five years I've played that thing for nickels and dimes thrown into a hat.\nFor five years the Utica Kid has been laughing.\nI may have been wrong, Charlie, but I'm not gonna make the same mistake twice.\nGrant...\nWhen you see him will you tell him that I'm here?\nLeave it alone!\nSo all she'll bring is trouble and guns, huh?\nDid you bring the money with you?\nNo.\n- How soon do we get it?\n- I wouldn't know about that.\nYou should!\n$10,000 is a lot of money.\nAnd that's what he wants for me.\nWell, I'd say he was selling out cheap.\nNever mind what you'd say.\nWhat did Kimball say?\nIf you don't know about the money, why did he send you?\nHe didn't send me.\nI came on my own.\nWhy?\n- Ask him.\n- Well?\nI wouldn't know.\nThen again, maybe I would.\nYou were right the first time.\nI can walk quiet at night and I'm a pretty good gun.\nI'd like to join up with you.\nYou see, when a man gets fired off the railroad, he has a little trouble finding a job.\nAnd when he can't find a job, he gets hungry.\nI've been hungry for the last five years.\nHaven't I?\n- How would he know?\n- I'm his brother.\n- His brother?\n- His younger brother.\nFive years ago he was a troubleshooter for Kimball.\nI lifted the feed herd and he came after me.\nThen gave you a horse to get away.\nBut not until I'd heard all about good and evil.\nI didn't buy what he had to sell then.\nI'm not buying it now.\n- So you don't want him in, huh?\n- No.\nFunny thing.\nI want him in.\n- Any objections?\n- It ain't that simple, Whitey.\nThere's a personal deal between me and him.\n- About what?\n- He got in my way.\nThat's right.\nOh, yeah, I remember you.\nYou're the man that fights kids.\nWhich way do you want it?\nGet up, come on, get up!\nNow one of you give him his gun.\nAll right, Harbin, you're the boss around here.\nYou call it.\nI might just do that.\nWell, I ain't gonna take him alone.\nThen maybe you'd better move along.\nAny further objections?\n- Yeah.\n- Now ain't that wonderful?\n- I'd be happy to call it.\n- You may get the chance.\nYou mind if the Utica Kid and me have a little talk?\nNot at all.\nCall me when you're ready.\nI think you ought to know I'm working for the railroad again.\nI figured as much.\n- Troubleshooter?\n- Tonight I was carrying the payroll.\n- Where did you hide it?\n- I gave it to the boy.\nIt's in that shoe box.\nNow all you have to do is go in and tell Whitey.\nYou're gambling I won't?\n- Same old story of good and evil.\n- Same old story.\nYou lose, Grant.\nYeah, I kind of figured that when you laughed.\nI'll give you the same break you gave me.\nTen-minute start, then I tell Whitey I sent you away.\nI go, that money goes with me.\nSo does Kimball's wife.\n- No.\n- Wait a minute, Lee.\nHear me out on this.\nIf I leave here, that boy goes with me too.\nJoey?\nWhy do you want him?\nMaybe for the good of his soul.\nIt's been a long time since you heard that word, hasn't it?\nMother and Dad used to bring it up once in a while when we were kids.\nYou were just about Joey's age.\nHe thinks a lot of you, doesn't he?\n- He wants to grow up to be just like you.\n- He may make it, with practice.\nSoon he'll be holding the horses while you and Whitey hit a bank.\nThere's another kid lying in the barn.\nHe got the start that way too, huh?\n- You didn't kill Howdy?\n- I didn't hurt him.\n- And you're not going to hurt Joey.\n- How could I do that?\nIt's not hard.\nIt's not hard.\nNot when he takes your road.\nOr haven't you stopped to look at it?\nWhy bother?\nI picked it, I'll ride it.\nLee, I'm asking you again.\nGive Joey a chance.\nNo.\nYou've got ten minutes.\nI won't need them.\nCharlie's in there waiting for you.\nThink about her.\nShe's been following you for five years too.\nShe's got a reason.\nOr didn't I tell you I'm gonna marry her?\nHow much of that did you hear?\nJust what I wanted to hear.\nThat you're gonna marry me.\nWhen?\nWe're gonna have a lot of money, Charlie.\n$10,000.\nYou can have pretty new dresses and pretty new shoes.\nAnd a brand-new husband.\n- Tomorrow.\n- No.\nRight now!\nIf you want me, take me away right now.\nPlease, please take me.\nWhy the sudden hurry?\nHas my big brother been telling you the story of good and evil?\nDon't laugh at him.\nWhy not?\nWhy mustn't I laugh at him?\nMaybe it would be better if... if you tried to be a little more like him.\nNow isn't that just great?\nNow I get it from you!\nEver since I was a kid that's all I can remember.\n\"Why don't you be more like your brother?\nWhy can't you be more like Grant?\"\nI don't want to be like him.\nI don't want any part of him.\n- That's not true.\n- Yeah, it's true!\nYou don't know what it's like to be the kid brother.\nEverything you do is wrong.\nEverything you try.\nUntil one day I tried a gun.\nFit my hand real good.\nAnd I wasn't the kid brother any more.\nIt's a good gun.\nIt's gonna get us everything we always wanted.\nBut I don't want it.\nNot that way.\nWhy must you steal?\nBecause I like to steal.\nI like to see what people will do when I take it away from them.\nWhat happens when something is taken away from you?\nNobody's gonna take anything away from me.\nCharlie, I'm asking you to marry me.\nNo.\nGrant was right.\nYou'll never change.\nAnd he calls me a thief?\nJoey.\nGo on.\nPlay some more.\nIt's been a long time since I heard an accordion.\nAny tune in particular?\nOr would this do?\n# Oh, you can't get far without a railroad\n# You can't get far without a railroad\n# You gotta have an engine and you gotta have a track\n# Oh, you can't get far without a railroad\n# There are tracks across the prairie\n# Where the buzzard builds his nest\n# There are tracks across the Rockies\n# To the Golden West #\nHow does it go from there?\nHow does it go from there, Lee?\nEverybody will be neighbours\nIn this little dream of mine\nTake you clear across the country\nOn the Bullfrog Line\n# Oh, you can't get far without a railroad\n- # You can't get far without a railroad #\n- Gentlemen!\n- Renner!\n- Didn't you know he was working for me?\n- I've come for my thousand dollars.\n- What thousand dollars?\nYour memory is quite short.\nI supplied you with information about a certain boxcar.\nI was prepared to supply you with information about the payroll.\n- Concho did not keep the appointment.\n- So?\nSo ten per cent of the payroll is mine.\nSorry to disappoint you but we missed the payroll.\nMissed the payroll?\nIn that case I'm prepared to make a better deal.\nFor $2,000, I can tell you where the money is.\nYou made a deal.\nBen Kimball hired a man to carry it.\nI might never have located this place if I hadn't heard that man's accordion.\nHe has the money.\nAsk him!\nJoey!\nCome here, Joey!\nGrant!\nMcLaine, there's a woman with you!\n- That's right.\n- Send her out before we come get you.\nHere, hurry!\nCome on, Charlie.\nHe's in the clear.\nHe's riding away.\nYeah, he's riding.\nAfter me.\n- What are we stopping for?\n- We're going to the mill, the short way.\nGet down to the mill!\nCome on!\nTake cover!\nHere.\nThere's a mine shaft at the end of these cables.\nIt runs clear through the mountains.\nOn the other side, about half a mile, is the railroad!\nIt's two hours to the end of track.\nI have to send you out one at a time.\nCome on, Verna.\n- Tell Ben he'll get his payroll somehow.\n- I'll tell him more than that.\nYou'll get that money even if you had to kill your own brother?\nThe next ore bucket that comes down, pull it around and jump in.\nI'll cover for you.\nIt's clear, Charlie.\nGet out!\nSee if you can reach him from over there.\nHe can't stand them off, not alone.\nYou figuring to help?\nGrant!\nLook out!\nHe's real good.\nOnly one better gun in Colorado.\nCharlie!\nGet over here!\n- I thought I told you to get out.\n- I'm staying right here.\nAll right.\nNow you get back inside and I'll cover for you.\nThanks, Charlie.\nLee, not the kid!\nYou take care of the kid.\nI'll see if I can keep them pinned down.\nWould you mind if I play big brother just this one time?\n- Shoots high.\n- You or the gun?\n- Joey all right?\n- He's all right.\nThat makes you a winner.\nGo ahead and make a sucker out of the kid.\nTell him all about good and evil.\nPut him to work on the railroad.\nThings get tough, he can always play the accordion for nickels and dimes.\nSounds like old times, Lee.\nWelcome home.\nDon't give me that big brother grin.\n- Up there!\n- Get him!\nI count mine.\nThere's one left.\nHe hit you hard, Lee.\nNot half as hard as you did with that Bullfrog Line.\nThat was Dad's favourite tune and you know it.\nI know it.\nYou and your stinking accordion!\nCharlie.\nCharlie?\nYou and Joey get the horses.\nWhat...?\nI'll take care of my brother.\nHere's your money.\nPay 'em off, Tim.\nThank you, Grant.\nLooks like you won yourself a job.\nMine.\nNo, it won't fit.\nNot nearly as well as your coat.\nWant your old job back?\nThanks.\nAll right, Joey.\nGet a bucket and start carrying water.\nWe're at end of track.\nNow go on.\n# Sometimes I feel like I could jump over the moon\n# And tell the sky above\n# Does it matter how full the moon\n# When you've an empty heart\n# Follow the river\n# Wherever you may be\n# Follow the river back to me\n# Follow the river\n# The river knows the way\n# Come to me, I pray\n# I miss you more each day\n# Follow the river\n# Wherever you may be\n# Follow the river back to me\n# Sometimes I feel like I could jump over the moon\n# And tell the sky above\n# Does it matter how full the moon\n# When you've an empty heart\n# Bring back the great love\n# The love that once we knew\n# Make my dreams come true\n# The dream I had with you\n# Follow the river\n# Wherever you may be\n# Follow the river back to me\n# Follow the river\n# Wherever you may be\n# Follow the river back to me #\n(Man) I'd better get back to work.\nDon't lose all your matches.\n- Hello, Mac.\n- Hi, Click.\nHowdy, folks.\n- Hi.\n- Hello.\nWelcome home, man.\nCome sit down and give us a tune.\n- We'll pay you with promises.\n- A man can't eat promises.\nHe can't lose them at cards either.\nMcLaine!\n- No, indeed he can't.\n- Where have you been and why?\nThey were laying track in Wyoming.\nNeeded a troubleshooter.\n- Didn't need me.\n- That's too bad.\nYou can pick up a few nickels and dimes playing your accordion.\nThat's right, Tim.\nWhat's this?\nPlaying cards with matches?\nWhen's payday?\nTomorrow, if they get the money past Whitey Harbin.\nWhich they won't.\nHe's tapped that pay train three times up.\nThey'll get it past him or get no more steel before snow.\n- O'Brien, shut your mouth!\n- My sentiments exactly.\nDay shift and night shift, night shift and day shift.\nNo money in a month.\nMy patience is ended.\nSo is their railroad.\nAm I right?\n- You are right!\n- McLaine.\nPlease play me a peaceful tune or I'll have a revolution on my hands.\nI see what you mean.\nAre they giving you trouble?\nLucky you're not with the railroad.\nTis a weary man you'd be today if you were troubleshooting for us.\nCould be you're right, Tim.\n(# Folk tune)\nCome on, pretty lady.\nGive us a dance!\nI dare you, Mr Feeney.\nWhere's the wife?\nCome on!\nBig Ed, are you through to Junction City?\nThis is for Kimball.\nAs per your instructions, this is to advise you that Grant McLaine is here at end of track.\nYou don't need that last.\nJust say he's here.\nGet away from him!\nGet away from him!\nDancing, is it?\nLet me...\nGet back into your tent where you belong, you painted women.\nYou and your railroad.\nBringing the likes of this among decent folk.\nFor two cents I'd take me old man back to Junction City and be through with you.\nIf you had two cents!\nThey're at it again.\nYou can't mix wives and women, even to build a railroad.\nStop this shilly-shally music and give me a jig I can dance to.\nGive us a jig, I said.\nYou watch your feet.\nThey're heavy.\nAnd so is my fist.\nDo I get a jig or do you lose your teeth?\nNot now, Mac, not now.\nHe's not bad.\nHe's just a fool.\nConsider yourself lucky.\nFive years ago you'd have got a bullet between the eyes.\nI've seen him kill men that could eat you without salt.\nPlay what you please.\n(# Lively jig)\n- You asked for a jig, now dance to it!\n- Here I go, Feeney!\nHee-hee!\nUp Garryowen!\n# I was farming in Missouri I was getting tired of that\n# So I bought myself a satchel and a stovepipe hat\n# And I headed for the station gonna travel all about\n# But there wasn't any station and I soon found out\n# That you can't get far without a railroad\n# You can't get far without a railroad\n# Something's gotta take you there and gotta bring you back\n# Oh, you can't go any distance in a buggy or a hack\n# You can't get far without a railroad\n# You can't get far without a railroad\n# You gotta have an engine and you gotta have a track\n# Oh, you can't get far without a railroad #\nI haven't heard that one.\nWhere does it come from?\nDad used to play it when it got too rough around the house.\nPretty soon us kids would stop fighting and start dancing.\nThe man makes fine music.\nAre we gonna let them use it all up?\nGo on with you!\nClarence Feeney, stop looking at them painted hussies and give your wife a dance.\n- Go away, woman, I'm tired.\n- Tired, is it?\nThis is my day for dancing or fighting.\nWhich will you have?\nDarling.\nNice work.\nI'll give you five dollars tomorrow.\nIf Whitey lets the pay train through.\nThree times is enough.\nHe won't hit it again.\nOh, don't bet on it.\nHe's a strange man, this Whitey Harbin.\nHe's got the big boss plenty worried.\nSpeaking of Kimball, he wants to see you.\n- How would he know where I am?\n- I told him.\nHere.\nYou read it.\nI'm afraid if I stop the music, Mrs Feeney'll hit me with something.\n\"Report to me at once in Junction City.\nUrgent.\nBen Kimball.\"\n- Maybe he'll give you...\n- Another chance?\nNo.\nThat's not his way.\n- But you will see him?\n- Not till they've finished their dance.\n- You old hag, I'll...\n- Painted hussy!\n(Groaning)\nLet go of me!\nLet go!\nLet her go, I said!\n(Woman screams)\n(Groaning)\n(Stops playing)\n(Shouting)\n(Screaming)\n- Hold this.\n- Right.\nAnd this is the tune your father used to play to keep peace in the house?\nI must have squeezed out a few wrong notes.\nYeah.\n- Thanks, Tim.\n- Goodbye, Mac.\n(Woman screeches)\n- Too late for coffee, mister?\n- (Woman) Howdy.\nI think there's a few warm dregs left.\n- Oh.\nHowdy, ma'am.\n- Step down.\nMuch obliged.\n- They keeping you busy?\n- Yep.\nPacking out the ore and packing in the vittles.\nThem miners can eat more beans than they raise in all of Boston.\n- Now they want me to bring in a mill.\n- All at once?\nNo, just a few pieces at a time.\nThey got tired of waiting for the railroad to reach them.\nBetween you and me, I don't think it will before snow.\nYou're hoping it won't?\n- First I was.\n- Uh-huh.\nFigured it'd put me out of business.\nIt won't.\n- It won't?\n- No.\nIt's a funny thing about gold.\nThere's always some jackass will find it where the railroad ain't.\nThen he'll send for me and a few more jackasses to bring in his grub and pack out his ore!\nThem crazy miners!\nLook at the waste of that good machinery.\nTwo miles of cable and buckets to go with it.\nLast week they up and left the whole thing!\nDid the vein pinch out or did they hit low grade?\nThey didn't hit nothing but blue sky.\nUh-huh.\n- This was mighty fine coffee, Mrs...\n- Miss Vittles.\nMiss Vittles.\nI sure appreciate it.\n- I got a long ride ahead of me.\n- You heading for Junction City too?\nYes, ma'am.\nBut I'm kind of in a hurry.\nI ain't looking for company.\nTen jackasses in a bunch is enough.\n- I can save you a trip round the mountain.\n- How's that?\nLike I told you, the boys hit a good vein, followed it through the mountain.\nLast week they busted out on the far side and there wasn't nothing there but blue sky.\nMakes a mighty fine short cut into town.\n- It sure does.\n- Still think I'm crazy?\n- I think you're real pretty.\n- Ah!\n- You going to spend time in these hills?\n- Yes, ma'am.\nWhen snow comes you're gonna need a woman.\nOr a warm coat, else you'll freeze your knees.\nWell, I can't rightly afford a warm coat.\nSo long, Miss Vittles.\nPeople wonder what a calf feels when he gets roped.\nNow you can tell 'em.\nWhat for are you mixing in?\nMaybe I don't like to see kids get hurt.\nBreak any bones, son?\nHe's got a knife behind his collar!\n- There's a stirrup.\nYou want a lift?\n- No.\n- Why not?\n- I'm beholden to you, mister.\nCouldn't we just leave it that way?\n- Morning.\n- Morning.\n- Put him up?\n- For how long?\n- I wouldn't know.\n- It'll be two bits for oats.\n- Ain't I seen you before?\n- Depends on where you've been.\n- I follow the railroad, mostly.\n- Could be you've seen me.\n- It'll be four bits if he stays the night.\n- Fair enough.\nMorning.\nDid a man ride in today - tall, sort of heavyset?\n- You mean him, Mr Renner?\n- Not him.\nThis one had a scar.\nAlong his cheek?\nNo, sir.\nI don't see no man with a scar.\nI guess maybe I can have some apple pie and coffee.\nI guess you could have eggs with bacon if you wanted eggs with bacon.\n- Hello, Charlie.\n- Hello, Grant.\nIt's good to see you, Charlie.\nIt's awful good to see you.\nIt's good to see you too.\n- I'll get the eggs.\n- No, get the pie.\nI can pay for the pie.\nYou're a very stubborn man.\nApple pie is not for breakfast.\nIt is if you like apple pie.\nNow I need a fork.\n- Working here long?\n- About three weeks.\nHow's the Utica Kid?\nHe was well... when I saw him last.\nWhen was that?\n- Good morning.\n- Morning.\nWell, business is early and Pete is late.\nThe lunches.\nAre they fixed?\nWhy do I ask?\nThe lunches are always fixed.\nWhy?\nBecause you fix them.\nCharlie, I'll make you an omelette like only Pete can make an omelette.\nVery bad.\nCome on around, sit down, have a cup of coffee.\nPete had that place in Santa Fe, remember?\nAre you running a shoe store on the side?\nThose are box lunches for the work train.\nMoney, money, money.\nPete knows how to make it.\nHe follows the railroad.\nI guess a lot of people follow the railroad.\nYou and Pete.\nThe Utica Kid.\nI asked when you saw him last.\nThey've lost three payrolls.\nNow when did you see him last?\n- Charlie, where did I put my apron?\n- It's under here.\nYou must be nice fella.\nIf Charlie sits with you, you must be nice fella.\nI make omelette for you too.\nWe were talking about the Utica Kid.\nHe can wait.\nBen Kimball's in town.\nThey put his car on the siding yesterday.\n- I know.\n- His wife is with him.\nIs she?\nI often wondered what Verna was like.\nI saw her last night.\nAll fine silk and feathers.\nShe's soft and beautiful.\nAnd I can understand now.\nCan you?\nHow long are you gonna be in town?\n- That depends on Ben Kimball.\n- You working for the railroad again?\n- If I am?\n- That would be good.\nPlaying the accordion's not for you, not for a living.\nYou belong to the railroad and it belongs to you.\nThere were a lot of things that used to belong to me and somehow I lost them.\n(Pete) Two omelettes a-comin' up.\n- Do you like eggs?\n- No.\nThat's too bad.\nYou got an omelette coming up.\nWell, somebody's gotta eat them.\nCome on.\nThat means you.\n- Could you put it in a box?\n- An omelette?\nI'll be hungrier when I get to end of track.\nMaybe it will go down easy.\nEasy or not, it goes down right now.\nI can't pay for it.\nThen you can help me sell lunches at the station.\nAny more arguments?\n(Train rattling)\n(Train whistle)\n(Knocking)\nCome in.\n- You want to see me, Ben?\n- I certainly do.\nHello, Grant.\nSit down.\nAll right, Jeff.\nRenner, go to Pete's and get one breakfast and a jug of coffee.\n- You haven't eaten yet?\n- I've eaten.\nJust get coffee.\nHot.\n- How's everything been going?\n- I make a living.\n- Playing an accordion?\n- That's right.\nWant me to play a tune for you?\nThere's other jobs besides railroading.\nWell, Colorado may be big in miles.\nIt's kinda short on people.\nSo when a man gets fired the way I was fired the story gets around.\nWell, I'm...\nI'm sorry.\n- No, I like to make music.\n- And it keeps you near the railroad.\nIf someone needs information about a payroll, you can sell it.\nYou know it's a funny thing.\nI don't like you either.\n- Is that why you sent for me?\n- No.\nAnd keep out of this.\nHave it your way.\nBut I don't trust him now any more than I did when I sent him after the Utica Kid.\nI sent you after a thief and you gave him a horse to get away on.\n- I told you to keep shut.\n- Let him talk.\nI'm not wearing a gun.\nI'll be honest with you.\nHe'd talk the same if I was.\n- It's been nice seeing you.\n- (Woman) Grant.\nI'm sure Jeff didn't mean to be rude.\nSometimes he has a blunt way of putting things.\nUnfortunately, Ben isn't much better.\nIt's not unfortunate.\nIt just gets things said in a hurry.\nToo much of a hurry.\nThey forgot to ask you if you'd work for the railroad again.\nWould you?\nYes, I would.\nNot to give you a short answer.\n- It's the answer I wanted.\n- Sit down, Grant.\nDo you remember Whitey Harbin?\nUsed to work down in Arizona and New Mexico.\n- Yeah.\n- Well, he's moved into Colorado.\nI thought he favoured stage lines and banks.\nSo did we.\nBut he's learned about railroad payrolls\n- and he's grabbed three in a row.\n- Where do I fit in?\nThey're making up a supply train in the yard.\nI want you to ride it.\n- With $10,000 in your pocket.\n- Why me?\nQuite frankly, because no one would suspect you of carrying a payroll.\nI sure don't look like $10,000, do I?\nAre you building a bridge you don't need?\nThe money's here.\nWhy not bring the men in on Saturday and pay them off in town?\nAnd lose half the crew?\nTurn them loose in a mining town, they'll go up the hills looking for gold.\nIt won't work.\nAnd we have to finish this section before snow comes.\nThat's a pretty big gamble on a man who gave his horse to a thief!\nYes.\nYou might as well know the deck's stacked against you.\nA boxcar will be hooked to the train.\nI'll be one of the men in it.\n- When did this happen?\n- Last week.\n- Renner, did you know?\n- Yes.\n- Why didn't you tell me?\n- I told him not to.\n- Why?\n- Everything we plan gets back to Whitey.\n- You think I'd tell him?\n- You might trust the wrong people.\n- If he takes the job, I'm sure of it.\n- And if I don't take it?\nThen Jeff will be sitting in Ben's chair.\nOh, I wouldn't like that.\nUh-uh.\nSo I'll take the job on one condition.\nIf I make the delivery I get his job.\nYou made a deal.\nThank you.\nWait a minute.\nIt's getting cold up in the hills.\nThis coat has always been too long for me.\nThanks.\nWell.\nI thought you didn't like him.\nHe said that.\nI said I didn't trust him.\nAnd I still don't.\n(Verna) Grant.\nAre you surprised Ben sent for you?\nI was until I talked to him.\nHe seems to have changed.\nYou're right.\nHe doesn't belong in a private car with clerks, figures and pressure from the office.\nHe belongs at the end of track, running a gang and building a railroad.\n- He's a working stiff like you.\n- Yes, but he can dream a little too.\nColorado wouldn't have a railroad if he hadn't sold them on the idea.\nFor his sake, I wish he hadn't.\nHe was happy at end of track but they kicked him upstairs and sent us to Chicago.\n- And now he needs a little help.\n- That's why he sent for you.\nOh, I may have had something to do with it.\nWhy?\nThere was a time when you were interested in me.\nI was more than interested in you.\nI wanted to marry you.\nTimes when I'm sorry you didn't.\nAren't you?\nNo.\nA man likes to know his woman will back him when he's down and you didn't.\nBen called me a thief and you went right along with him.\nIt's as simple as that.\nGrant.\nFor old times' sake.\nFor old times' sake?\nJust that and nothing more?\nPerhaps just a little more.\nWe want to be sure that payroll goes through, don't we?\nI don't know.\nMaybe Jeff is right.\nHis type seldom changes.\nAnd if we've made a mistake, it's the finish of everything.\nThen why not cut this car into the supply train?\nIf we're all playing showdown, I'd like to see the cards when they fall.\n- Thank you.\nI hope you have a nice trip.\n- Thank you.\n(Train whistle)\n- Ma'am, is that all?\n- Mm-hm.\n- Here's your lunch.\nYou've earned it.\n- Thanks.\n- Mister, are you going to end of track?\n- Yes.\nCould you stake me to a ticket?\nI can ride half fare if I'm with an adult.\n- And you're an adult.\n- Well, sometimes I wonder.\nAll right.\nYou can come along.\nWe'll ride with the other fellas with no money.\n- On the flatcar?\n- Go on.\nClimb aboard.\nPlenty of fresh air.\nDo you good, make you grow.\n(Clunking)\n(Train whistle)\nAre you sure he didn't come while I was away?\nAin't nobody been here but the man riding the sorrel.\n- What colour horse your man riding?\n- How should I know?\nIt's extremely important that I see him.\nThey've cut in Mr Kimball's car.\nBarley!\nA man told you to put his horse up...\nDon't start that too.\nThat there sorrel is the only horse what come in.\nThat there sorrel is the horse I want.\nHe belongs to my friend Grant McLaine.\nMcLaine?\nThat's who it is.\nI knew him as a troubleshooter in Santa Fe before he went bad.\n- He didn't go bad.\n- What'll you do with his horse?\n- Ride him!\nI'll change, you saddle him.\n- All right.\n(Train chugging)\n(Train whistle)\nHey, Pilgrim!\nCome here!\nDon't go getting your liver all upset.\n- Once you miss 'em, they stay missed.\n- It's none of your business.\n- Could be.\nYou wanting to get on that car?\n- If I am?\n- I can take you to where it's going.\n- On one of these?\nThey'll get you to end of track before the train does.\n- That's ridiculous.\n- $100 aging yours I'm right.\n- You've got a bet.\n- And you got stuck.\nHere.\nI'll let you ride Flap Ears.\n- You can smoke inside, mister.\n- I can smoke where I want.\nYou can burn too if it pleases you but it'll still cost you four bits.\n- For what?\n- Travelling first-class.\nOtherwise ride the flats.\n(Discordant notes)\n- You play that?\n- Yeah, I play it.\n- When?\n- When?\nWhenever somebody throws a dime in my hat.\n- I ain't got a dime.\n- This one's on me.\n(# Folk tune)\n- Been up here before?\n- Part way.\n- What takes you to end of track?\n- A job.\nFigured I'd get one at Junction City.\nThey told me the foremen do the hiring.\nYou're a little small for swinging a sledge.\n- I can carry water.\n- Yeah, you can carry water.\n- Very important job.\n- (Man) Hey!\n- What are you doing here?\n- He's with me, Pick.\n- Where did you get him?\n- Somebody threw him away.\nDon't you throw him away.\nHe'll get lost in the mountains.\nWho tells the men who build railroads how to get through the mountains?\n- The river.\n- Huh?\nThey just follow the river.\n- Who told you that?\n- I guess my dad was the first.\nHe had a little song about it.\n# Follow the river\n# The river knows the way\n# Hearts can go astray\n# It happens every day\n# Follow the river\n# Wherever you may be\n# Follow the river back to me #\nWouldn't you wanna be knowing about Concho?\n- Who's Concho?\n- The man you roped.\nDo you wanna know?\nNot unless you wanna tell me.\nI ought to tell you.\nHe's fast with a gun.\nOnly know two men who are faster.\nWhich two men would they be?\nWhitey Harbin for one.\nI run away from Whitey.\nThat's why Concho was after me.\nYou're one of Whitey's men?\nNo.\nI was in Montrose.\nWhitey and his bunch were robbing a bank.\nI was just in the road watching.\nWhitey was all for killing me but the other fellow wouldn't let him.\nHe swung me up into the saddle and said,\n\"You ain't killing a kid.\nNot while I ride with you.\"\n- Whitey, he backed down.\n- Cos the fella's faster with a gun?\nLike lightning.\nThis other fella, does he have a name?\nHe's got a name.\nThe Utica Kid.\nI'd have stayed with the bunch if he was boss.\n- But he's not?\n- Not yet.\nAlways he's shoving pins into Whitey, laughing at him, driving him crazy.\nEven crazier than he is!\nSomeday Whitey will crack and he'll lose.\n(Train whistle)\nIs this the fresh air you were talking about?\nHow come them fellas can ride inside?\nWell, it's the old story of good and evil.\nIf you spend all your money on whiskey, you have none left for a ticket.\nDon't drink.\nThen you'd have six bits when you need it.\nThat's very true.\nTell you what, maybe I have six bits.\nYeah.\nWhat do you say we go in and spend it?\nCome on.\nGuess I wasn't tough enough to follow the river that way.\nSometimes it isn't easy travelling upstream.\n- That will be a dollar.\n- That'll be six bits.\nI'm the adult.\nHere.\nHold on to that.\n- Don't worry about Concho.\n- You would if...\nOh, no, come on.\nSit down.\nWe can both worry together if you want to tell me about it.\n- It's nothing.\n- And if it was, you'd rather not say.\nAll right.\nI broke with Whitey.\nDoesn't mean I have to talk.\nNo, you don't have to talk.\nI even broke with the Utica Kid.\n- Hi, Utica.\n- Put him away, Howdy.\nSure.\nCome on.\nIt's a pretty good rig.\nToo good for the guy that owned it.\nRemember that draw you taught me?\nIt worked.\nHe went down with his gun in the leather.\n- And now you're an \"in case\" man.\n- In case?\nYeah.\nIn case you miss six times with one, you draw the other.\n- If you have time.\n- I'll have time.\nCall it.\nDraw!\nYou better learn to draw that one before you fool around with the other.\n(Clanking)\n(Horse whinnies)\nAbout three inches high, Whitey.\nYou better take another look at that skull.\nNext time it could be yours.\nDon't soft-foot up behind me!\nIt makes me nervous!\nSo I notice.\nWhat else did you notice?\nDid you see Concho?\n- Did you see him?\n- He wasn't on the trail.\nDid I ask you where he wasn't?\nI asked you did you see him?\n- I would've said so.\n- Not straight out you wouldn't.\nBecause you're a funny man.\nYou've always gotta be laughing inside.\nWell, go ahead, laugh.\nBut get this, Kid.\nI'm a better gun than you.\nOr would you like to try?\nIt's an interesting thought, but I'm afraid of you, Whitey.\n(Laughs) You ain't afraid of me.\nAnd in your feet, where your brains are, you think maybe you're just a bit faster.\nAnd you know something?\n(Laughs) It could be.\nBefore you break up completely, you mind putting a name on this?\nIt's just a little old wedge.\nBut when you put it through the latch of a boxcar, you can't open the door from the inside.\nNow, you ask me, who would want to open the door of a boxcar from the inside?\n- Jeff Kurth and a dozen gunmen.\n- How would you know?\nI was sleeping up there when Concho told you.\nYou better learn how to snore!\nYou wouldn't know how to shoot a man in the back.\nI'll learn.\nWhat'll it be, gents?\nWe got Old Grandpa, Old Grandma, Old Uncle Tom.\n- And Old Empty.\n- You ain't funny, Latigo.\nWho could be funny, sweating it out in here?\nGet away, boy.\nYou're too young for whiskey even if we had plenty.\nDon't get fancy.\nYou ain't talking to Joey.\nSpeaking of Joey, you didn't happen to spot him along the trail, did you?\nI'll take a shot of that Old Flannelmouth.\n- Did you see him?\n- No.\nDid he leave any sign?\nA little.\nHe was headed toward Junction City.\nBut you didn't follow him?\nJoey always was a nuisance.\nI was for dropping him in the river.\n- Why didn't you?\n- And get my brains shot out?\nYou've got to find a better reason to kill me.\nSuppose Concho didn't catch up with Joey in town and suppose the kid talked?\n- He won't talk.\n- Maybe not, but Concho ain't back.\nUnless he gets back, we won't know where they're carrying the money.\nThat's right.\nMaybe it'd be smart to let this one go through.\nWhy?\nWe've grabbed three in a row.\nLet's give them a breather.\nThat makes sense.\nI go along with Utica.\nYou and me both.\nWe ought to let this one go through.\nIt ain't going through!\nWhy not?\nYou're the one who taught me about payrolls and now I like them.\n- So do I.\n- I'll buy that.\nA man can get saddle-sore looking for a bank to take.\n- I'm with Whitey.\n- Me too.\nWhat about you, Torgenson?\nI got no complaints.\nYou call it, I'll play it.\nLooks like you've been outvoted.\nOr do you want a recount?\n- Right now, I'd rather have a drink.\n- Suit yourself.\nIf I can't buy a fight, I'll buy a drink.\nFill 'em up.\nSorry, the bar is closed.\nOn account of we're fresh out of whiskey.\nEither get this floor fixed or get a new bartender.\nWhen do we make the hit?\nAny time you're ready.\nShe was halfway up the grade when I left.\nWhy didn't you tell me?\nWhy didn't you ask me?\nFunny man!\nMount up!\nSettle down.\nIt's only another job.\nBut if you was boss, we wouldn't do it.\nIf I was boss we wouldn't do it.\nYou ain't boss!\n# So I bought myself a shovel and I bought myself a pick\n# And I laid a little track along the bullfrog crick\n# Then I built a locomotive out of 20 empty cans\n# And I tooted on the whistle and the darned thing ran\n# Oh, you can't get far without a railroad\n# You can't get far without a railroad\n# Something's gotta take you there and gotta bring you back\n# You can't go any distance in a buggy or a hack #\n(Train whistle)\nThrow some ropes around them timbers.\nWe'll pull it down.\nTorgenson!\n- OK, John.\n- Hurry it up, Jubilee!\n- Boy, they're pushing her fast today.\n- Yeah!\nMaybe they heard I needed a quick ten thousand.\n- That water tower your idea?\n- What's wrong with it?\nAny self-respecting Injun could walk away with it.\nFunny man!\nHe knows everything about everything.\nLet's get down and lock the barn door.\n- (Neighing)\n- We've stopped!\nWhitey's making his hit!\n- McLaine sold us out!\n- No, Ben.\nThey didn't learn it from Grant.\nLeary!\n- A hold-up!\n- They did it again!\nStop your moaning and hold on to your hat!\nThey won't stop old Tommy Shannon with a tank full of water.\nThat's no way to treat railroad property, Mr Shannon.\nTake your hand off the throttle and reach for the brake!\nAll right.\nSit down and behave!\nCome over here.\nOpen the safe!\n- Ha!\n- Move in!\nSame as last time!\n- We thought you were lost or drunk.\n- There ain't nothing in there.\n(Man) Jubilee!\nHow are you making out?\nTry to talk your way out of this!\n- I'm sorry I missed out with Renner.\n- Never mind.\nWhere's the money?\n- It's not in the safe.\n- Then where is it?\nIt could be going to Junction City with Jeff's men.\nThat's not true.\nRenner told us Jeff wouldn't carry the payroll!\nThat's a help.\nLeast we know who didn't carry it.\nFunny man!\nWhen you get through laughing, see what's in that red car.\nSure.\nGlad to.\nAs soon as I pick up my horse.\nHe's worth more than anything I'm gonna find on this train.\nGet those pilgrims out.\nMaybe one of them is carrying it.\nHit the other cars!\nSee if you can find it.\nOutside!\nAll of you!\nIs this what you wanted to tell me?\nHave a look inside, Latigo!\nIf that's McLaine...\nNo, Ben.\nPut it away.\nYou may as well be comfortable.\n- Be my guest.\n- Gladly.\nDo you mind if I ask the name of my host?\nNo, I don't mind.\nWould the payroll be in there?\nNo.\nWhy not take a look, just to be sure?\nBoy, is this stuff mellow.\nBottled in bond too.\n- I forgot.\nLadies is always first.\n- Thank you, no.\nSee for yourself.\nHello, Joey.\nWhat are you doing here?\nGetting robbed!\nDon't bother.\nNone of them's got more than two dollars.\nWhitey!\nThere ain't no payroll in there.\nHow come you missed out?\n- I had a little trouble.\n- Now, ain't that too bad?\n- Maybe I ought to give you a little more.\n- Whitey!\nKimball's back there with his wife.\n(Laughs)\nYou just got lucky!\nPut them back in the car!\n(Concho) Get aboard!\nGo on.\nGood little boys don't run away.\nThis time you'll learn!\n- Where's the payroll?\n- The man says he doesn't know.\nI can help him remember.\nTake her outside.\nTake her outside yourself.\nI'm afraid of women.\nThey scream and scratch, and sometimes step on your toes.\nDon't say no to me.\nNot when I got a gun in my hand.\nI won't.\nUnless I'm holding one too.\n- Outside.\n- If you want the payroll...\nYou'll have to wait for the next work train.\nWe decided not to send it through on this one.\nOh?\nI don't mind waiting.\nI'll be at Pay Load.\nYou can bring it to me.\nThen I'll take 12 hours' start, you get your wife back.\nSee what happens when you don't carry your brains in your feet?\nI ought to make you walk.\nJubilee, lead them out.\nStep up with Latigo.\n(Concho) What about Joey?\nYou gonna leave him here?\nHe'll ride with me.\nOr would you like to?\nSettle down.\nWe're getting $10,000 for the lady, remember?\nWhich one do I ride with?\n(Laughs) Which one do you think?\nTake her to the end of track, Mr Shannon!\n(Train whistle)\nHere's a stirrup.\nGive you a lift?\nI'll take that box.\nDon't crowd the cantle.\nYou'll ride easier.\nWhoa, mules!\nMust have got tired of making the climb and started home.\n- Come on, boy!\n- Just a minute.\nThere's a mining town near here.\nIt used to be called Pay Load.\nIt's still called Pay Load but nobody lives there.\n- It's over beyond that far hill.\n- Which hill?\n- You see the first hill?\n- Yes.\nSee the second one?\nThere's a third hill.\nPay Load's behind that.\n- How much do you want for this mule?\n- $50.\nFlap Ears, when you unload this piker, you come on home to mother.\n- Get outta there!\n- Gah!\nWelshing on a bet!\nNever could understand them railroad people.\nCome on!\nCome on!\n(Train whistle)\n- Mr Kimball.\n- Come over to the telegraph shack.\n- Before you pass.\nDid you bring the payroll?\n- Not now!\n- Did you bring it?\n- I didn't.\n- Now what?\n- The end of the railroad.\n- Shut up, Feeney.\n- Let go of me or I'll push this down your throat!\nWho wants your man?\nI don't want none of 'em!\nThey're all broke!\n- See you in Denver.\n- I'm off to Denver too.\n- So am I!\n- Nobody goes without orders from Kimball!\n- I'm leaving.\nYou'll take no joyride in this town with them painted hussies.\nDoc you're beginning to sound like Sherlock Holmes.\n"
  },
  {
    "path": "benchmarks/haystacks/opensubtitles/en-small.txt",
    "content": "Now you can tell 'em.\nWhat for are you mixing in?\nMaybe I don't like to see kids get hurt.\nBreak any bones, son?\nHe's got a knife behind his collar!\n- There's a stirrup.\nYou want a lift?\n- No.\n- Why not?\n- I'm beholden to you, mister.\nCouldn't we just leave it that way?\n- Morning.\n- Morning.\n- Put him up?\n- For how long?\n- I wouldn't know.\n- It'll be two bits for oats.\n- Ain't I seen you before?\n- Depends on where you've been.\n- I follow the railroad, mostly.\n- Could be you've seen me.\n- It'll be four bits if he stays the night.\n- Fair enough.\nMorning.\nDid a man ride in today - tall, sort of heavyset?\n- You mean him, Mr Renner?\n- Not him.\nThis one had a scar.\nAlong his cheek?\nNo, sir.\nI don't see no man with a scar.\nI guess maybe I can have some apple pie and coffee.\nI guess you could have eggs with bacon if you wanted eggs with bacon.\n- Hello, Charlie.\n- Hello, Grant.\nIt's good to see you, Charlie.\nIt's awful good to see you.\nIt's good to see you too.\nDoc you're beginning to sound like Sherlock Holmes.\n"
  },
  {
    "path": "benchmarks/haystacks/opensubtitles/en-teeny.txt",
    "content": "Sound like Sherlock Holmes.\n"
  },
  {
    "path": "benchmarks/haystacks/opensubtitles/en-tiny.txt",
    "content": "I saw you before but I didn't think you were this young\nDoc you're beginning to sound like Sherlock Holmes.\n"
  },
  {
    "path": "benchmarks/haystacks/opensubtitles/ru-huge.txt",
    "content": "-Две недели не даешь мне прохода.\nВот и действуй, чем ты рискуешь?\nЯ думал, что сделаю тебя счастливой.\nТоже мне счастье.\nМуж не дает ни гроша, и у любовника ума не хватает подумать о деньгах.\n- Хорошенькое счастье.\n- Извини, я думал, ты любишь меня.\nНу люблю, люблю тебя, но и не хочу, чтобы все началось как в прошлый раз.\nТы не права.\nУ меня для тебя сюрприз.\nШлихтовальная машина, ты о ней давно мечтала.\n-Для костей?\n- Нет, настоящая.\nХочешь, приходи за ней вечером.\nЯ тебе не девочка.\nБыла бы ты девочкой, я бы тебе ее не купил.\nТы прекрасно знаешь, что я девочка.\nЯ люблю тебя, и вечером сделаю все, что пожелаешь, каналья.\nВам будет трудно.\nОдинокой женщине руководить таким заведением...\nДа нет, месье Эдуан уже давно почти забросил магазин.\nА брать нового приказчика я не хочу.\nХватит и одного раза.\n- Одного раза?\n-Да.\nРазве месье Мурэ вас не устраивал?\nДа, он умный молодой человек, активный, смелый, но чересчур предприимчивый.\nЕго нельзя оставлять наедине с женщинами.\nУ него есть шарм.\nСамой порядочной женщине трудно перед ним устоять.\n- Хорошо, что предупредили.\n- Что?\nНет-нет, я другое хотела сказать.\nЯ говорила о склонности месье Мурэ в общем.\nЯ уважаю вашу жену.\nСегодня вечером вы снова едете в Лион?\nВаш билет, месье?\n- Какая ближайшая станция?\n-Дижон.\nА во сколько ближайший поезд до Парижа?\n- Из Лиона?\n- Нет, из Дижона.\nВ три десять, месье.\n- Во сколько он прибывает?\n- В семь часов.\nПариж.\nПросьба освободить вагоны.\n-Улица Шезоль, дом двадцать четыре.\n- Хорошо, месье.\n- Что с тобой?\n-Желудок болит.\nНеудивительно, после обеда у Жосрана.\nНа лестничной клетке до сих пор запах.\nТебе нравится новая хозяйка?\nВалери Вабр - настоящая дура.\nСкорее, настоящая шлюха.\nТы шпионка.\nТвоя хозяйка такая же стерва, как и ты.\nТакая же уродина, как и ее мать.\nИ такая же шлюха.\nУверена, вы о Берте.\n- Она тоже?\n- Весь дом - сплошные свиньи.\nВот бы вернулся месье Август, а в его кровати красавчик Октав.\nБедняга Август, он целиком занят своей мигренью.\nА ведь она правду говорит.\nВезде деньги.\nПодарок туда, подарок сюда.\nКак в театре: за вход надо платить.\nУжасно.\nЯ отдаюсь за деньги?\nНеужели ты веришь?\nСкажи, ты в это веришь?\nНет, конечно.\nНа днях я застала ее на служебной лестнице.\nА позавчера еще лучше - в новом платье.\nПодарок Октава.\nТебе ночную сорочку, ей платье.\nЦена растет.\nКстати, какой сегодня день?\nСреда.\nЗначит, рогоносец в Лионе.\nЕму давно пора раскрыть глаза.\nНичего не видит.\nНу, ничегошеньки.\nБоже, боже.\nНам нельзя больше видеться.\n- Возможно, ты права.\n- Ты думаешь?\nТы сделал меня несчастной.\nИ расплатился с долгами.\n- Я ничего такого не говорил.\n-Да, но ты так думал.\nСлушайте, красавчик Октав, наверное, кусает локти.\nЗря он ушел от мадам Эдуан.\nТеперь у него добыча помельче.\nА ведь запросто мог иметь и ту и другую.\nЕму не привыкать.\nДа, но его больше всего прельщает касса.\nОн спит не с Бертой, а с матрасом, набитым золотом.\nВот тебе и общественное мнение.\nГрязные сплетни служанок на служебной лестнице.\nИ это все?\nДумаешь, намеки на содержимое кассы мне приятны?\nТы мог бы протестовать.\nМог бы, если бы это было правдой.\nНо кому, как не тебе знать, что касса тут ни при чем.\nНу да, ты спас меня от разорения, да еще и заработал.\nМожет, сменим тему?\n- Тебе неприятен этот разговор?\n- Разумеется, от него дурно пахнет.\nДурно пахнет?\nКто бы говорил.\nДорогая, если ты, правда, считаешь, что я люблю тебя из-за денег, то лучше сразу брось меня.\nНу, конечно.\nА ты иди к мадам Эдуан.\nИди.\n- Ну вот, приехали.\n-Да, она вдова.\nУ нее все преимущества.\nБедная Берта, как ты похожа на мать.\nПодумать только, я оплачиваю это ничтожество.\nЗаведи себе другого.\nОткройте, откройте.\nЯ знаю, что вы оба там.\nОткройте или я выбью дверь!\nНе открывай, он вооружен.\nОн убьет нас.\n- Не бойся.\n- Трус.\nТрус.\nПочему вы не отвечаете?\nМерзавец.\nНегодяй.\nНу, зачем же применять силу?\nПрименять силу, применять силу...\nВор.\nМадам, мадам, входите, не стойте тут.\nСчитайте это пощечиной.\nЖду ваших секундантов.\nК вашим услугам.\n- Что теперь со мной будет?\n- Надо было им помешать.\nЧто теперь обо мне подумают люди?\nВаши родственники?\nРазве они могут вас понять?\nОни для вас чужие.\nЕсли бы я знала.\nНи о чем не жалейте, не жалейте, раз вы его любили.\nБерта, мы будем драться на дуэли.\nБерта, малышка моя, мы не можем расстаться в ссоре.\nЭто было бы слишком глупо.\nМы оба ошибались.\nВот и все.\nЭто же не преступление.\nТри месяца мы думали, что любим друг друга.\nЭто было чудесно.\nНет?\nИ потом, может быть это и есть любовь -думать, что любишь.\nЕсли мы... не любили друг друга, то утешься.\nЗначит, любви не существует.\nНет-нет, мы не ошибались.\nКак и все влюбленные, мы считали, что будем уникальной парой на свете.\nА теперь, как и все влюбленные, станем такими же как остальные.\nЗаймем свое место.\nБерта, дай руку.\nЯ больше никогда не полюблю.\nНикогда.\nТы почти излечилась.\nДумаешь о будущем.\nТак вы не будете драться?\nБудут, будут.\nТак нужно.\nНо раз вы больше не любите друг друга.\nДуэли часто бывают и без причины.\nПрошу прощения, но, кажется, я только что кое-что разрушил.\nНе стоит извиняться.\nБлагодаря вам... я вам покажусь глупой, но чтобы не случилось, я больше не одна.\nВероятно, придется покинуть этот дом.\nНичего страшного.\nНичего страшного, месье Октав.\nЭто неважно.\nПрощай, Берта.\n-До свидания, Мари.\n- Прощайте, месье Октав.\n- Так ты будешь драться?\n-До последнего.\nТы же не умеешь.\nЯ бы на твоем месте...\n- Что с вами?\n- Ничего.\nЭто нервное.\nНе могу представить Августа на дуэли.\nТы и Дюверье будете моими секундантами.\nНаверное, он у себя.\nЕго нет.\nВы не знаете, где его искать?\n- Так вы в курсе?\n- Как и все.\nКакой же у меня насморк.\n- Месье Башляра нет?\n- В такой час его никогда не бывает.\nВы случайно не знаете адрес месье Трюбло?\nНет, но месье Башляр вам его даст.\n- Во сколько он вернется?\n- Наверное, он у племянницы.\nПассаж святого поля дом восемь?\nЯ знаю.\nСпасибо.\nНа кого я теперь буду похожа?\nМогла бы о матери подумать.\nЯ старалась пристроить тебя, чтобы в старости лет ты меня поддержала.\nА ты связалась с этим продавцом.\nИ о чем ты думала?\n- Я ненавидела Августа.\n- Это не причина.\nРазве я изменяла твоему отцу?\nИ тем не менее...\n- Но она любила Октава.\n- Твоя сестра никого не любит.\nА если мне нравится никого не любить?\nДумаешь достаточно требовать любить, любить, так нет, сердцу не прикажешь.\nОна права.\nНе выходят замуж только чтобы не подчиниться матери.\nЯ вышла замуж, чтобы покончить с этой жизнью, чтобы вдохнуть другой воздух, чтобы вырваться из этого дома.\nВышла замуж, чтобы изменять своему мужу.\nДовольна?\nНесложно было догадаться.\nЯ приняла меры предосторожности.\nПредупреждаю - выхожу замуж через месяц.\nЧто?\nЗа кого?\n-За кого люблю, а он любит меня.\n- Несчастная, я помешаю тебе.\n- С этого момента...\n- С этого момента хватит.\nМы больше не будем терпеть твою диктатуру и преследования.\nГоворишь, что не изменяла.\nОчень жаль.\nЕсли бы изменяла, я был бы счастливее.\nПосмотри на свою дочь.\nТвое произведение.\nНи мужа, ни дома, больше ничего нет.\nНе плачь, доченька.\nТы жертва моей слабости и ее тирании.\nЭто мы должны просить у тебя прощения, мы.\n- Просить прощения?\nДа я лучше умру.\n- Это принесет нам только счастье.\nЯ этого не допущу.\nПосмотрим, чья возьмет.\nВы как раз кстати, будете свидетелем.\nНегодяй, вот негодяй!\n- Свидетелем?\nПонимаете, я...\n- Свидетелем...\nА зачем вы сюда пришли?\n- Хотел спросить у вас адрес Трюбло.\n- Вы издеваетесь?\nАдрес Трюбло?\nВ кровати мадемуазели, вот где адрес Трюбло.\nПрихожу я утром нагруженный подарками и что вижу?\nУгадайте.\n- Трюбло?\n- Трюбло.\nЭтого мерзавца Трюбло.\nА я так жаждал увидеть своего ангела.\n- И тебе не стыдно, коварная?\n- Я не знала.\n- Что?\nНе знала, что он тут?\n- Не знала, что это вас так огорчит.\nА я тебя предупреждала.\nЕсли месье Нарцисс узнает, то будет не доволен.\nВот видишь, вместо того, чтобы меня послушать...\nВы оделись?\nВыходите.\nВыходите как есть.\nЯ же говорил -только служанки.\nЯ впервые нарушил правило.\nНарушил правило.\nИуда.\nА как же дружба?\nВы изменили дружбе Башляра.\nЯ же хранил эту крошку для вас.\nНу да, говорил я себе: когда состарюсь, выдам ее замуж за Трюбло, отдам в надежные руки и спокойно умру.\nВедь у меня есть сердце.\nПятьдесят тысяч хотел дать этому мерзавцу.\nПятьдесят тысяч франков!\n-Успокойтесь, Башляр.\n- Послушайте месье Октава.\nКак вы могли так поступить с другом?\nТеперь будем драться на дуэли, на пистолетах с десяти шагов.\nНе делайте этого.\nВам незачем драться на дуэли.\n-А как же честь?\n- Были бы вы ее мужем, тогда понятно.\nБыли бы вы ее мужем, мне было бы все равно.\nЭто еще как сказать.\nВо-первых, мне нужен Трюбло.\n-Зачем?\n- Быть секундантом.\nЯ дерусь на дуэли.\n- На дуэли?\n-Да.\nНо с женатым мужчиной.\nС Августом Вабром.\nУтром он застал меня с Бертой.\n- С Бертой?\n-Да.\nВ каком мире мы живем!\n- Можешь мной располагать.\n-А кто секунданты Августа?\n- Теофиль и Дюверье.\n-Дюверье?\nКак мило.\nУ меня с ним встреча по поводу обеда у Клариссы.\nКакая прекрасная возможность урегулировать дело чести.\nКоторый час?\nМалышка отбила весь аппетит.\nГосподи, я опаздываю.\nА ты, никогда больше так не делай, иначе будешь иметь дело со мной.\nНу же скажи, что больше этого не повторится.\nЭтого больше не повторится.\nНу же, поцелуй ее, мерзавец.\nВ лобик.\nЕсли я еще раз застукаю вас, лишу своего доверия.\n-Дети мои, что происходит?\n- Вы же видите.\n- Я застукал их вместе.\n- Я ничего не вижу.\nЯ собирался позавтракать у Клариссы.\nКупил кое-что.\nПрихожу, поднимаюсь: и никого, и ничего.\nОна оставила мне мой портрет.\nВсе как у меня: купил драже, прихожу, поднимаюсь...\n- Она не спала в своей кровати.\n- Спала.\nОна была с Трюбло.\nКак омерзительно.\n- Она была с Мурэ.\n-Лежала в ночной рубашке.\n- Стояла в ночной рубашке.\n- Ничего - пустота, тишина, пустыня.\n- Я вышиб дверь и набросился на него.\n- Он вскочил с кровати.\n- Я набросился на нее.\nОна убежала.\n- Ну вот.\n- О ком вы говорите?\n- О Берте и о Мурэ.\nА я говорю вам о Клариссе.\nПричем здесь Кларисса?\nЯ говорю о Фанни.\nФанни?\nА причем тут Фанни?\nЯ говорю о Берте.\nЯ только что купил ей рояль.\nА ведь ненавижу музыку.\nЯ никогда не приходил к ней с пустыми руками.\nВсегда конфеты, деньги.\nХочешь свой портрет?\nВот тебе художник.\nТочно как у моей жены.\nПлатье, драгоценности.\nИ это вытворяет двадцатилетняя девушка.\n- Нет, простите, ей двадцать пять.\n-Двадцать.\nМожет, вы лучше знаете?\nНе сердитесь, но так говорить - дурной тон.\n- Могу вам доказать.\n- Кому, Клариссе?\nДа причем тут Кларисса.\nФанни.\nЯ тоже говорил себе, что Валери уже не двадцать.\nВы закончили обсуждать свои дела?\nА как я?\nЯ.\n- Кто дерется на дуэли?\nВы или я?\n- Ну да, он прав.\nАвгуст, друг мой, скажу вам одно - надо отомстить.\nСлушай, я проголодался, пойдем, пообедаем?\nИ да здравствуют жены, господа.\nДа здравствуют чужие жены и наши, которые, впрочем, чужие для других.\nМы не можем упрекнуть их в непостоянстве.\nВедь они становятся чьими-то любовницами.\nИ потом, верные жены -такое занудство.\nЧтобы узнать это, надо быть женатым.\nРазве нет?\nТак о чем я говорил?\nА ваша жена вам изменяла?\n- Конечно.\n- И что?\nОтбил у нее всякую охоту.\nТеперь десять раз подумает, прежде чем изменить.\nМолодец, молодец.\nЗа ваше здоровье, господа.\nИ за вашу смелость, Август.\nДавайте поговорим о дуэли.\nЗавтра на рассвете?\n- Если у меня не будет мигрени.\n- Тогда перенесем на следующий день.\n- Оскорбленный выбирает оружие.\n- Но пощечину дали Октаву.\n-Значит, оскорбленный он.\n- Точно.\n-А вы хотели дать ему пощечину.\n- Во всяком случае, хотел.\nЗначит, оружие выбирает он.\nРавенство - прежде всего.\nПростите, но ведь я же...\n- В общем...\n- Рогоносец.\nА это оскорбление.\nКто согласен со мной, господа, пусть поднимет руки.\nОдин, два, три.\nЧетыре.\nЕдиногласно.\nИтак.\nМечи, шпаги?\nМинуточку, вы торопите события.\nВы послали секундантов к Трюбло?\nЭто другое дело.\nФанни еще ребенок, она не понимала, что делала.\n-А вы разобрались с Клариссой?\n- Но я не женат на Клариссе.\nЕсли я убью Октава, то буду мучиться угрызениями совести.\nЯ католик.\nНаполеон венчался в церкви, а потом всю жизнь воевал.\nНо не за Жозефину.\nПризнаюсь, Октав не прав, но именно он спас меня от разорения.\nЭто логично.\nА если я его не убью и не буду с ним драться, то мы останемся в ссоре.\n- Не совсем.\n-А магазин?\n- Что магазин?\n- Я не смогу оставить Октава.\nЕму придется искать другое место.\nИз-за недостойного поведения жены, я должен буду уступить натиску конкурентов.\n- Это аргумент.\n- Ну да, мы сразу разоримся, сразу.\nГоспода, это все меняет.\nДуэль будет безумием.\nБолее того, глупостью.\nЯ сам пойду к Октаву, я заставлю это животное извиниться.\nНе будь я Башляр.\nУверяю, он извинится как миленький.\nИ так мы избежим скандала.\nНо будет справедливо, что честь Августа не будет поругана.\nА также и честь его супруги.\nСлавно мы придумали, господа.\nБашляр угощает вас шампанским.\nСомелье.\nБыла бы здесь Фанни.\nНет, нет, я не буду секундантом у того, кто предал мое доверие.\nНе будем преувеличивать.\nЯ архитектор этого дома и отвечаю не только за стены, но и за жильцов.\nОтвечаю за ваше поведение.\nЯ художник, но тем не менее.\nКогда я приютил вас здесь, разве не предостерегал вас, разве не просил, не приводить сюда женщин?\nЯ не приводил сюда женщин.\nЗдесь их много, и все красивые.\nО, прошу вас.\n- Я многое могу понять.\n-Да, ведь вы художник.\nМногое, кроме адюльтера.\n-Адюльтера?\n- Я его не одобряю.\n- Он вне ваших принципов?\n- Вне моей морали.\n- И разума?\n- Вполне возможно.\nВы шутите?\nНет, вы меня разыгрываете.\n- Я вас не понимаю.\n- Компардон, вы не изменяете жене?\nИли малышка Гаспарина это нюанс.\nМежду нами говоря, Гаспарина...\nГоворите тише, жена спит.\n- Гаспарина не замужем.\n-А вы?\nДа будет вам.\nЯ не кручу роман с соседкой.\nНет, все в этом обвиняют жен.\n- Месье Башляр спрашивает месье Мурэ.\n- Пусть входит, пусть входит.\nВходите, Башляр, входите.\nТихо, мадам Компардон спит.\nИзвините меня, хочу поговорить с месье Октавом Мурэ.\nВы тут не лишний, друг мой.\n- Останьтесь, здесь вы у себя дома.\n-Да будет так.\nДорогой мой, я все уладил.\nЭто было трудно, но мне удалось.\nНу так вот, дуэли не будет.\nВы довольны?\n-Дуэли не будет?\n- Нет.\nНеужели хотите испортить карьеру этой скандальной дуэлью?\nДавайте все забудем.\nВы просто извинитесь перед Августом, и все будет в порядке.\nВсе будет в порядке?\nГде?\nЗдесь, повсюду, в другом месте, где пожелаете.\n- И мое положение не изменится?\n- Но мы же все забудем.\nЗабудем все и начнем все с начала.\nВсе, все, все, все.\nАвгуст хочет избежать пересудов.\nОн выше сплетен, он ведь молодожен.\n- И я извинюсь.\n- Ну да.\n- Перед кем?\n- Перед Августом.\nВыразите ему свое сожаление.\nВы знаете, как это делается.\nЧто?\nВыражать сожаление, что сделал Берту счастливой?\nЭто же подлая трагедия.\nОна такое очаровательное создание, она мне так нравится.\nНет, никаких сожалений.\nА если Берта лично потребует от вас выразить сожаление?\nЭто будет принуждением.\nЯ этого не потерплю.\nХорошо.\nА если вы и Август извинитесь друг перед другом?\nДруг перед другом?\nВы за то, что соблазнили его жену.\nА он за то, что дал вам пощечину.\n- Но он не давал мне пощечину.\n- Но намеревался - это одно и то же.\nК несчастью, этого намерения у него не было.\n- Тогда на что вы жалуетесь?\n- Я?\nНи на что.\nЯ жду его секундантов.\nА если он их не пришлет, вы станете посмешищем.\nЯ ему отомщу.\nМежду нами, откровенно, что вы намерены делать?\nРаз Август даровал мне милость и решил со мной не драться, я решил покинуть этот дом и поселиться в другом месте.\nА магазин?\nСердечные дела - одно, а коммерция - совсем другое.\nВы не можете уйти из магазина.\nНеужели вы думаете, что я буду работать на Августа?\nНет, не хочу быть посмешищем.\n-А Берта?\n-Да.\nБерта?\nЧто будет с Бертой, если она вас больше не увидит?\nХотите ее наказать?\nБез ложной скромности скажу, что Берта решила обойтись без меня.\nНеблагодарный.\nНе настаивайте.\n- Это ваше последнее слово?\n- Самое последнее.\nЯ передам ваш ответ.\nКакой ответ?\n- Что вы отсюда съезжаете.\n- Ну да.\nСпасибо, что были свидетелем этого трудного разговора.\nБольшое спасибо, дорогой мой, за понимание.\nЛиза.\nВы выпьете немного кокилы.\nПринесите бутылку кокилы.\n- Нет-нет.\n-Да-да.\nЯ настаиваю.\n-До свидания, мадам Эдуан.\n-До свидания.\n-До свидания.\n-До свидания.\n-До свидания, мадам Эдуан.\n- Мадемуазель Гаспарина.\nРаз вы увидите месье Мурэ, попросите его срочно зайти.\nЯ не уйду из магазина, пока он не придет.\nХорошо, мадам.\nПередайте ему, передайте, что речь идет о важном, срочном деле.\nХорошо, мадам.\nДо свидания, мадам.\n- Среди честных людей...\n- Среди сердечных людей...\n- Всегда найдешь родственную душу.\n- И поле битвы.\nКакой остроумный!\n-Здравствуйте, господа.\n-Здравствуйте, Гаспарина.\nМесье Мурэ, мадам Эдуан хочет срочно поговорить с вами в магазине.\n- Мадам Эдуан?\n-Да.\nПохоже, дело срочное.\nИзвините меня.\nМое почтение, мадам.\n- Вы хотели со мной поговорить?\n-Да.\nЯ...\nЯ в курсе вашей ссоры с месье Вабром.\nЗнаю, что он послал вам секундантов.\nВам нельзя драться.\n- Но он же мой противник.\n- Я не хочу, чтобы вы дрались.\nА вам-то что?\nА если он вас убьет?\nВедь он такой неловкий.\nДуэль предполагает риск.\nВпрочем, рискуют оба.\nКто сказал, что месье Вабр будет победителем?\nУвы, в этом я не сомневаюсь.\nОднажды я от вас ушел, и вы смирились.\nТри месяца назад я для вас умер.\nЕсли я умру по-настоящему, какая разница.\nЯ без сожаления уйду из этого мира.\nУ меня нет угрызений совести.\nМесье Октав, вы должны знать правду.\nВ этой истории виновата я.\nЭто я, да, я пробудила подозрение у месье Вабра.\nЯ ничего конкретного не сказала, просто повела себя не лучшим образом.\nНе знаю, что на меня нашло, но ваше поведение разозлило меня.\n- Мое поведение?\n- Ну да.\nТо, что вы стали доверенным лицом господина Вабра.\nЯ вообразила, что все ваши усилия направлены против меня.\nВаш отказ вернуться поверг меня в отчаяние.\nТак все дело в магазине.\nНе знаю, все так запуталось.\nИ вы испугались угрызений совести, что я погибну из-за вас.\nУспокойтесь, этого не будет.\nУ вас не будет угрызений совести.\nВы были правы, меня интересуют только деньги и ничего более.\nВы донесли на меня.\nОтлично.\nЯ за это заплачу.\nВы легко перенесете мою смерть.\nО, нет, лучше я брошусь в ноги месье Вабру.\nЭто будет забавно.\nПрощайте, мадам.\nОктав!\nНет.\nДело не в магазине.\nПростите меня, Октав.\nХорошо, дуэль отменяется.\nНо это последняя жертва, на которую я иду, мадам Мурэ.\n- Ну что?\n- Еще одна большая пушка.\n- Избавьтесь от нее.\n- Оставить французам?\n- Я сказал: избавьтесь.\n- Есть.\nМесье?\nМайор, вы сделали невозможное.\nКаким образом семитонная пушка проскочила у вас между пальцев?\nОни ее уничтожили.\nПо-моему, она слишком большая.\nВаше мнение меня не интересует.\nПушка нужна генералу Жувэ.\nВыполняйте приказ, а не думайте.\n- Есть.\n- Видаль.\nЗа пушкой охотятся англичане.\nОни отправили в Испанию шпиона.\nНе оплошайте.\nИначе генерал отправит нас обоих служить на конюшни.\nДа, месье.\nВыходите.\n- Англичанин?\n- Англичанин.\nПроводите меня в штаб.\nАнгличанин.\nМне нужна ставка генерала Ларены.\n- Они переехали?\n- Отступили.\nКуда?\n- А вы кто?\n- Испанцы, которые не отступили.\nГерьерос.\nЕсли у вас дело, говорите со мной.\nУ меня письмо генералу Ларене.\nПростите.\nХуана.\nПрочти это.\nЭто Энтони Трамбел, морской офицер.\nГенерал Ларена должен передать ему большую пушку... и людей для того, чтобы доставить ее в Сантандер.\nЗачем?\nЧтобы она не досталась Наполеону.\n- Англичане тоже с ним воюют.\n- Зачем прислали моряка?\nЯ говорю по-испански и изучал артиллерию.\nПушки.\nХотите ее видеть?\nКонечно, хочу.\nСпасибо.\n- У англичан такая есть?\n- Такой нет ни у кого.\n- Она сломана?\n- Можно починить.\n- Вы бы смогли?\n- Если будут люди.\nОни есть.\nКузнецы?\nПлотники?\nГильермо.\nФрансиско.\nПепе.\nСлушайте капитана.\nНужны шесть толстых бревен.\nИ снимите с пушки колеса.\nКарлос, займись.\nПусть все тянут канаты.\nКанатов как можно больше.\n- Что-нибудь еще?\n- Пока всё.\nДа, капитан.\nПошевеливайтесь.\nНе тяните вниз.\nНет, нет, левее.\nМигель.\nМигель.\n- Французская кавалерия.\n- Далеко?\n- На той стороне.\n- Через час будут здесь.\nОставьте пушку.\nТак ее проще будет спрятать.\nХосе, сюда.\nЖивей.\nРамон, собери людей, чтобы рубить деревья.\nПомогите им.\nКарлос, поднимайтесь.\nЗакрепите канаты.\nВпрягите мулов.\nПроверьте надежность узлов.\nЯ нашел лучший путь в Сантандер.\nДа, капитан.\nНо пушка поедет в Авилу.\n- Прошу прощения?\n- В Авилу.\n- Но вы сказали...\n- Что я сказал?\nВы видели приказ.\nГенерал Ларена передаст пушку нам.\nГенерала Ларены здесь нет.\nВам не пересечь Испанию, ведь вас всего двести.\n- За пушкой пойдет подкрепление.\n- У вас нет пороха.\n- Я его достану.\n- С Наполеоном сражается весь мир.\nНа этом фоне Авила - песчинка.\nВесь мир меня не интересует.\nАвила - штаб французов в Испании.\nДо нее тысяча километров.\nМестность кишит французами.\n- Вы не доберетесь.\n- Доберемся.\nВ Авиле есть стена, которую пробьет эта пушка.\nМы войдем в город любой ценой.\nДаже если мы погибнем, Авила будет взята, и французы поймут, что пора оставить Испанию.\nВы все безумцы.\nКапитан, вам нужна пушка в Сантандере, а мне - в Авиле.\nПоедем с нами.\nНаучите нас с нею управляться.\nА потом мы переправим ее в Сантандер.\nГде гарантия, что так и будет?\nЕе нет.\n- Коня капитану.\n- Я пойду рядом с пушкой.\nВы устанете, капитан.\nКоня.\nКапитан, у вас лицо в грязи.\nХуанита.\nДавай, Хуанита.\nУже поздно.\nЧто ты делаешь?\nОтнесу англичанину еду.\nОн не ел с остальными.\nЗначит, он не хочет.\nМы ели.\nОн такой же, как мы.\n- Он не такой.\n- Почему?\nОн разбирается в пушках.\nИ нужен тебе.\nТы сам так сказал.\nЯ так не говорил.\nОн мне не нравится.\nМигель, ты ревнуешь.\n- Не к нему.\n- Ты ревнуешь ко всем, а к нему особенно, потому что он умеет стрелять.\n- Может, я тоже умею.\n- Не умеешь.\nНе говори того, о чем будешь жалеть.\nОн нам нужен.\nПризнай это.\nТогда пусть на тебя не смотрит.\nМигель.\nИ ты тоже на него не смотри.\nЭто мое право.\nВы хорошо знаете этого Мигеля.\nЗнаете, что у него пушка.\nСкажите мне, где он.\nЯ говорю как противник, но могу стать вашим палачом.\nПрекрасно.\nЗначит, нужен пример.\nЯ повешу десятерых из вас.\nНа следующий день будет еще десять, и еще.\nДо последней женщины и ребенка в Авиле, пока кто-нибудь не заговорит и не укажет, где эта пушка.\nУвести.\nВыполняйте приказ.\nЯ сомневаюсь, что все эти повешения...\nЗнаю, знаю.\nВы считаете, что они бесполезны.\nВелика ли эта пушка?\nВ два раза больше, чем вы можете представить.\nОккупированный народ выглядит мучеником.\nНо когда у него появляется цель, он превращается в новую армию.\nВот чем опасна пушка, генерал.\nЯ не глуп, Сэрмен.\nИ мы ее найдем.\nНадо постараться построить плот за три дня.\nПонадобится сотня бревен.\nПушку закрепим на этой платформе.\n- Так пересечем реку.\n- Пушка затонет.\nНет.\nДа и другого выхода нет.\nТолько ждать, пока русло высохнет.\nЯ хочу доставить пушку в Авилу, а это риск.\nГлавное, чтобы работали все.\nНам нужна сотня бревен.\nЛадно.\nСобери людей, пусть рубят деревья.\nДействуйте, капитан.\nНо если пушка утонет...\n- Мне надоели ваши угрозы.\n- Мне это не нравится.\n- В любом случае, риска нет.\n- Вашего слова не достаточно.\n- Тогда позовите людей назад.\n- Ладно.\nПодождите.\nЯ скажу.\nМы знаем причину этого глупого спора.\nЕсли надо переправляться, не тратьте понапрасну время.\nОтпускайте плавно.\nТяните, тяните.\nХватайте другой трос.\nНу вот.\nВсё жерло в грязи.\nЛучше бы я этого не видел.\n- Ее можно вытащить?\n- Как?\nЧем?\n- Есть люди, мулы.\n- Им ее не сдвинуть.\n- Сколько потребуется народу?\n- Тысяча или две.\nВ Альгадо жителей больше, Мигель.\nЖители Альгадо, я плюю вам в лицо.\nЯ, Мигель, иду с пушкой на Авилу.\nВ Авиле никто не сидит на трибунах с французами.\nИ не поднимает наш флаг рядом с флагом врага.\nНет.\nПодождите.\nЧто вы за люди?\nСидите, радуетесь жизни.\nВ двухстах милях отсюда враг забавляется тем, что насаживает испанских детей на штыки.\nМожет, у вас нет сердца?\nИ нет стыда?\nПо ту сторону реки в грязи застряла пушка.\nНам нужна помощь.\nЯ не прошу вас умереть.\nИли пролить кровь.\nЛишь попотеть немного.\nСкажете детям, что в потоке сопротивления есть и ваш пот.\nТе из вас, кто остался испанцем, идите за мной.\nУ вас лицо в грязи.\nВам нельзя рисковать.\nПридется.\nИх больше, они хорошо вооружены.\n- Обходить будем три недели.\n- Пусть будет три.\nКапитан, в Авиле - командующий наполеоновской армии.\nГенерал Анри Жувэ.\nУ него красивая форма.\nВино ему доставляют из Франции, а женщин - из Марокко.\nКаждое утро, чтобы сломить сопротивление, он вешает десять испанцев.\nЗа три недели он повесит двести десять человек.\nВы рискнете ради них пушкой и успехом дела?\nА сколько народу он повесит, если вы не доберетесь до Авилы?\nНас ждут тысячи людей.\nЯ не могу медлить.\nЯ вам не помощник.\nЕсли нас разобьют, вы сами потащите пушку в Сантандер.\nГерцог Веллингтон.\nКапитан, есть люди, которых не изменить.\n- Например, Мигель.\n- В этом наша беда.\n- Значит, вы нас бросаете?\n- Я не хочу идти на самоубийство.\nПослушайте.\nКонечно, с Мигелем трудно.\nОн упрям.\nУпрям - это мягко сказано.\nНо никто не знает Мигеля лучше меня.\nВы привыкли вести себя, как на своем корабле.\nМигель на кораблях не ходил.\nИ воевать умеет, как Герьерос.\n- Вы его поддерживаете?\n- Как и все.\nНо если он ошибается, мы всё равно с ним.\nНадеюсь, вы тоже.\nПочему?\nКапитан, думаю, вы считаете себя мужчиной, а не свиным окороком.\nТак.\nМы готовы.\nТы останешься с Марией и с ним.\nМне нужно пять человек.\n- Зачем?\n- Чтобы украсть порох.\nДай ему людей.\nГерьерос!\nГерьерос.\nОткатите бочки с порохом в сторону.\nЖивее.\nЖивее.\nВперед.\nСейчас взорвется, прыгайте.\nЯ не офицер штаба.\nУ меня нет информации.\nОн полевой офицер, он не в курсе дел штаба.\nПусть попробует вспомнить.\nПопробуйте вспомнить.\nМне нечего сказать.\nЯ готов.\nСкажите им то, что они хотят знать.\nИ останетесь жить.\n- Что вы сказали?\n- Не хочу, чтобы его убили.\nУбеждаю заговорить.\nГоворите.\nКлянусь, у нас нет сведений из Авилы.\nУ меня семья, я не хочу умирать.\nОн клянется, что сведений об Авиле нет, и не хочет умирать.\nОни лгали.\nНе пытайтесь умыть руки.\nЭта кровь не смывается.\n- И что?\n- Я не буду молча смотреть на это.\nМожете не смотреть, капитан.\nВы много вмешиваетесь.\n- Если бы не пушка...\n- То что?\n- Я бы с вами не связывался.\n- Идите, вы нам не нужны.\n- Я выполняю свой долг.\n- У меня тоже долг.\nНе вмешивайтесь, или следующим убьют вас.\nВы безумец.\nВ порту Лас Крусес стоит британский корабль.\nИдите туда.\nХорошо.\nСегодня же.\nЛучше прямо сейчас.\nВы довольны?\nАнгличане не получат пушку, он не умеет стрелять.\nАвиле конец.\n- Он стоит на своем.\n- Безумец.\nЯ буду с ним.\nНо вам меня не понять.\nЭто не мое дело.\nВам этого не понять.\nГенерал Жувэ приговорил к повешению моих отца и брата.\nЯ ему понравилась.\nЯ пришла к нему.\nНо он всё равно их повесил.\nЯ молилась со всеми, чтобы тоже умереть.\nМне незачем было жить дальше.\nПока не появился сын сапожника.\nОн показал, для чего нам жить, бороться.\nЭто был Мигель.\nВы отблагодарили его сполна.\n- Я остаюсь с ним.\n- Вы с ним живете, но не любите.\nПотому эта связь сомнительна.\nБританский капитан и участница сопротивления...\n- тоже не пара.\n- Я готов рискнуть.\nИ подготовите пушку?\nОн сказал, что сам справится.\nМигель не всегда говорит то, что думает.\nЯ не буду перед ним извиняться.\nЭтого не нужно.\nЯ сделала это за вас.\nСколько картона может съесть человек?\nТри дня - вода и вот это.\nЧтобы тянуть пушку, нам нужны силы.\nТы еще не мужчина.\nОн тебе предан, а ты смеешься над ним.\nХосе, они просто шутят.\nЯ ничуть не хуже их.\nИ ты это знаешь.\nТы лучше.\nТы молод, смел, силен и красив.\nМечта любой женщины.\nТы также умен и...\nХватит, Хуана.\nДовольно.\nЯ не сержусь.\nПожалуйста.\nУмоляю вас.\nПрошу.\nПожалуйста.\nВ деревне есть дети.\nОтдайте еду.\nМы умрем.\nХотя бы хлеб.\nХоть что-нибудь.\nМигель, коньяк.\n- Что такое?\n- Вы сами слышали.\nНу и что?\n- Нам ведь нужна еда.\n- Поддержка крестьян важнее.\n- Что вы знаете о крестьянах?\n- Наверное, почти ничего.\nТысячи крестьян встретят вас в Авиле.\nЧто вы им скажете?\nЯ найду, что сказать.\nЯ устал от ваших советов.\nВо всех деревнях будут прятать еду.\nИ никто больше не захочет нам помогать.\nУступаю вам право командовать.\nДоговоритесь с крестьянами.\nМожете расплатиться с ними.\nВ фунтах стерлингов.\nОбъясните ему, что он не прав.\nЯ живу с крестьянами.\nИ меня не надо учить общаться с ними.\n- Нет, конечно.\n- По-твоему, он прав?\n- Я думаю...\n- Для женщины ты много думаешь.\nПо мне, так ты прав, Мигель.\nМигель, извинись перед ним за свои слова.\nХосе.\nНос утри.\nЦелый лагерь смели.\nХорошенькое дело.\nНепобедимая французская армия бежит в горящих подштанниках.\nА они скрылись.\nЭто их земля, генерал.\nОни знают, когда нападать и где прятаться.\nОни и сейчас прячутся.\nОни снова выступят.\nЯ догадываюсь, где.\n- Им помогают.\n- Крестьяне.\nНе только.\nС ними британский морской офицер.\nВоенный корабль англичан стоит в Лас Крусесе.\nЗдесь.\nПрекрасно.\nПрекрасно.\nОрганизовать на всех дорогах в Лас Крусес постоянный дозор.\nПроверим вашу догадку.\nКарлос.\nКарлос.\nТелеги.\nГде телеги?\n- Где телеги?\n- Я не знаю.\nПонятия не имею.\nЯ отправил их назад в деревню.\nВ деревню?\nМигель.\n- Карлос его убьет.\n- Он просто немного позабавится.\nКарлос, хватит.\nРана не опасна.\nЧерез несколько дней...\nЯ не перестану помнить, что убил этого человека.\nМигель не предполагал, что всё так выйдет.\nКонечно.\nЭто была забава.\nМне жаль.\nПравда.\nНе надо.\nЭто вовсе не связано с телегами.\nОн ревнует, и не напрасно.\nЯ сказал тебе, что доставлю пушку в Авилу.\nИ я это сделаю любой ценой.\nНо не ради него и не ради долга.\nЯ знаю причину, ты тоже.\nМы видели пехоту.\nНа той стороне реки.\nНельзя, чтобы нас засекли на равнине.\nНичего.\nПересечь Кано трудно.\n- Там есть мост.\n- Моста нет.\nЯ же знаю.\nФранцузы построили там мост.\nНа лодках.\n- Сколько там лодок?\n- Пятнадцать, шестнадцать...\nМне нужно больше пятисот фунтов пороха.\nВам нужно?\nЛадно, давайте порох.\nЭнтони.\nВозьми Хосе.\nОн работал в шахте и применял порох.\nВозьми.\nЯ скажу Мигелю.\nСколько тебе лет?\nВсе думают - двадцать.\nВообще-то, восемнадцать.\nБоишься?\nНет.\nЯ - да.\nЗнаете, зачем Хуана меня отправила?\n- Помогать.\n- Да.\nА еще вы ей нравитесь.\nЯ солгал.\nМне страшно.\nНо ничего.\nЯ справлюсь.\nЧто ж, пора окунуться.\nСтойте.\nЯ тебя искал.\nХотел сказать, что мне жаль Хосе.\nТы не виноват.\nХуана.\nВсю жизнь я боялась, ведь ничто не вечно.\nСейчас тоже боюсь, что это всего лишь сон.\nНет.\nОбещаю.\nПри других обстоятельствах ты бы на меня не взглянул.\nХочешь, чтобы я сказал?\nЯ...\nНет.\nПросто всё было бы совсем иначе в Англии.\nЯ запер бы тебя в башне, поставив верных стражей, и хранил бы ключ.\nЗолотой.\nТебе не хватило бы жалования.\nКогда я стану адмиралом, у нас будет карета.\nИ мы будем танцевать на королевских балах.\nМне понадобится новое платье.\nДа.\nИ голубой шарф под цвет моей формы.\nКланяться я буду осторожно.\nШтаны сидят слишком плотно - однажды порвались.\nЭнтони.\nДа?\n- С кем ты был?\n- Когда?\nКогда штаны порвались.\nКороль захочет с тобой познакомиться.\nРасскажешь ему, как однажды в далекой Испании встретила английского капитана... и сделала его самым счастливым человеком.\nЯ люблю тебя, Энтони.\nХуана.\nДа?\nМы все испанцы и знаем, чего хотим.\nНам известна цена похода на Авилу.\nЯ понимаю, Мигель.\nНо ты хочешь знать, что будет после Авилы.\nДа.\nЭтого я не скажу.\nНо мы долго были вместе.\nТы жила со мной, хотя я не умею ни читать, ни писать.\nКогда я не мог подобрать слова, ты делала это за меня, Хуана.\nЯ чувствовал себя настоящим мужчиной.\nНо в глубине души я знал, что я никто.\nДумаешь, я не способен чувствовать, чего хочет женщина?\nЯ могу отблагодарить тебя, только лишь вернув Авилу.\nЕсли этого мало, скажи.\nПопытка разыскать горстку повстанцев... останется в военной истории как пример беспомощности.\nВаша карьера поставлена под вопрос из-за этого марш-броска с пушкой.\nМы успели потерять мост и немало людей, прежде чем поняли, что пушка здесь.\nДалеко от Лас Крусеса и от моря, полковник.\nДа, месье.\nВ этих горах есть ущелье.\nВот оно.\nИменно там я их встречу.\nНе думаю, что им удастся уйти.\nНу?\nТам французские пушки.\nЭто же все знают.\n- Я тоже знаю.\n- Как ты хочешь там пройти?\n- Есть другой путь?\n- Мы обещали помочь, но не ценой жизни.\nТы попадешь под перекрестный огонь.\nНас не услышат.\nПостараемся, чтобы колеса не скрипели.\nДумаете, французы глухие?\nЕсли преодолеть незаметно хоть полпути, у нас есть шанс.\nТак что не надо изображать упрямых ослов.\nМы оставили наши лавки и фермы.\nЧто течет в ваших жилах?\nЧто угодно, но не кровь.\nНам нужно на юг, чтобы попасть в Авилу.\nА значит, нужно пройти здесь.\nЭто ясно?\nДа, капитан.\nЯснее некуда.\nНам немного стыдно, но у нас у всех жены и дети.\nМы не готовы умереть за эту пушку.\n- Нам нужна помощь.\n- Обойдемся без них.\nУдивительное умение убеждать.\n- Я должен встать на колени?\n- Если это поможет - да.\n- Они нам нужны.\n- Обойдемся.\nПолсотни греков защищали ущелье от тысячи солдат.\nУ нас всё наоборот.\nЯ не изучал историю, но знаю точно:\nя буду стоять перед статуей Святой Терезы в Авиле.\nПрекратить огонь.\nОни вне зоны огня, но дороги перекрыты.\nСмирно!\nИх нет ни у входа, ни в самом ущелье.\nОставайтесь на позиции и ждите моего приказа.\nБревно сюда.\nТащите.\nХорошо вы знаете холмы.\nЗдесь не спуститься.\n- Спустимся, как поднялись.\n- Пушку потянет вниз.\nУскорение и масса взаимосвязаны.\nПри весе в пять тонн на спуске... ее масса достигнет десяти-пятнадцати тонн.\nЕе будет не удержать.\nОна всегда весит одинаково.\nПоворачивай мулов.\nПродолжайте.\nЖивее, живее.\nБревно сюда, бревно.\nКапитан.\nБревно, скорей.\nОтходите.\nОсвободите мулов.\nПрыгай.\nКрепление пушки сломано.\nВверх идти нельзя, надо спускаться.\nБлестяще.\nСпускаться было труднее.\nНеподалеку есть городок Манесирас.\nМанесирас.\nМанесирас.\nПредлагаю пойти туда и починить там пушку.\nНам нужны инструменты, кузница и укрытие от французов.\nМигель, вдруг там французы?\nОн что, пойдет в форме?\nНет.\nЧто вы предлагаете?\nВыбирайте.\nПридется попросить вас.\nИспанские блохи.\nОни не кусают англичан.\n- Это можно разрешить.\n- Есть еще одно.\n- Что?\n- Пушка.\nСын мой, сила дома Господня велика.\nНо пушка не читает молитвы.\nМы хотим спрятать ее внутри собора.\nА завтра...\n- Внутри собора?\n- На одну ночь.\nИдет страстная неделя.\nВы оскорбите святилище.\nСолдатам и пушкам место за дверью.\nЭто дом Господа, но не арсенал.\nТы много просишь.\nВаше Преосвященство.\nВы не можете отказать.\nНе могу?\nНи к чему прикрываться ответственностью и правилами.\nМало сказать, что пушке в соборе не место.\nЭто не просто пушка, а символ сопротивления Испании.\nЗнаете, сколько людей отдали свои жизни, чтобы она попала сюда?\nВы не видели горных троп, покрытых мертвыми телами.\nРади чего?\nВы можете не знать ответа, но вы испанец, священник, и должны это чувствовать.\nВы не можете отказать.\nХорошо.\nСегодня вечером будет служба.\nТогда и внесете пушку.\nСвятая Дева, ты услышала мои молитвы.\nОн всё понял.\nИ я люблю его еще больше.\nВ твоих глазах я грешница.\nНо я впервые с детства осмелилась мечтать.\nНо есть еще Мигель.\nИ его мечта\n- Авила - которую я навсегда разделяю.\nСлишком дерзко просить, чтобы ты помогла обоим.\nНо выслушай.\nИ пусть твое сердце простит мой выбор.\nЭто за Мигеля и Авилу.\nА это за любовь, обретенную с другим.\nВнутри собора?\nДа.\nПушка там.\n- Да ты пьян.\n- Точно.\nЯ ее видел.\nЛадно.\nПроверим.\nИтак, гости, наконец, прибыли.\nИх больше, чем я думал.\nВ самом деле.\nОни смогут пробить стены?\nДа.\nЕсли сами не взорвутся.\nСколько, по-вашему, там человек?\nОколо десяти тысяч.\nИ подходят еще.\nОпасно для кавалерии.\nЧто-то тучи стали сгущаться.\nИспанцы ждут момента истины.\nОни готовы умереть и окропить землю своей кровью.\nЗачем?\nПотому что это их земля, генерал.\nИтак, как вы себе это представляете?\nЖдете чуда?\nЧудес не бывает.\nЕсть только пушка.\nСкажите им правду.\nУтром мы выстрелим по стенам с расстояния в полтора километра.\nВес ядра - сорок четыре килограмма.\nВ момент удара его масса составит четыре тонны.\nЭтого хватит, чтобы пробить стену.\nКак насчет французских пушек?\nОни стреляют не дальше, чем на один километр.\nЗато потом начнется.\nЯ насчитал восемьдесят пушек.\nКак только вы подойдете, они начнут стрельбу.\nЗаряды будут взрываться, на вас посыплются ядра.\nВ полукилометре полетит картечь - металлический град.\nЗатем стрельбу откроет пехота.\nНа подходе к стенам вы потеряете половину бойцов.\nВы это понимаете?\nПонимаем, Мигель.\nЭтим людям знакома смерть.\nСпокойной ночи.\nСпокойной ночи.\nЭто правда - то, что я им сказал.\nДа.\nХуана, останься со мной возле пушки.\n- Другие не смогут этого сделать.\n- Я знаю.\nНо если ты меня любишь, обещай.\nЯ люблю тебя, Энтони.\nОбещай.\nОбещаю.\nНадо бы сказать Мигелю.\nНет надобности.\nОн поймет.\nСейчас здесь так тихо.\nДа.\nВсе люди собрались и ждут.\nСпасибо, что ты им помог.\nПоэтому ты пришла?\nМне страшно.\nЯ боюсь за них и за нас.\nСтены так далеко.\nНам с тобой нечего бояться.\nЭто меня и мучает.\nОни такие же, как и мы.\nОни хотят жить, хотят любить, а завтра могут погибнуть.\nЭтого не изменишь.\nЭнтони, я не могу сдержать свое слово.\n- Ты пойдешь с ними?\n- Да.\n- Нет, я тебе запрещаю.\n- Энтони, я молилась, чтобы остаться с тобой.\nЯ хочу этого.\nОстанься.\nНе ходи с ними.\nЧто может одна девушка среди десяти тысяч мужчин?\nТы сумел дать мне многое, но этого недостаточно.\nЯ испанка.\nАвила в моем сердце.\nНо ведь я тоже.\nДо конца жизни.\nНо видит бог, любимый, я должна идти с Мигелем.\nХуана.\nОбними меня.\nСкажи, что ты меня понимаешь.\nЧто любишь.\nЯ не думал, что ты придешь.\nЯ пришла, Мигель.\nМне... мне жаль, что я не говорил, что ты для меня значишь.\nПрости.\nАртиллеристы медлят.\nПоторопите их.\nОтходим.\nВыстроиться на площади.\nНазад.\nГенерал.\n- Выстроиться на площади.\n- Но, генерал...\nБыстро.\nХуана.\nПрости, Энтони.\nЯ просила слишком много.\nНе надо...\nХотела, чтобы Мигель попал в Авилу.\nИ хотела любить тебя.\nО чём я печалюсь, о чём я грущу, о том лишь гитаре открою.\nДевчонку без адреса всюду ищу - и днём, и вечерней порою.\nБыть может, она далеко-далеко, быть может, совсем она близко.\nНайти человека в Москве нелегко, когда неизвестна прописка.\n- Раз, два, три, четыре пять...\n- Бабушка, что же ты меня считаешь, я же не чемодан!\nЧистое наказание, Господи!\n- Товарищ начальник, скажите пожалуйста, где останавливается десятый вагон?\n- Десятый вагон, бабуся?\n- Вот, конец платформы бачите?\n- Вижу.\n- Так це он там.\nБудку бачите?\n- Вижу.\n- То тоже не там, вот дальше будки будет десятый вагон.\n- Торопитесь, бабуся, поезд стоит одну минуту.\n- Батюшки, дак как же я-то успею?\nВедь там так высоко, пока вскарабкаюсь, а у меня столько вещей!\n- Бабушка, я вам помогу.\n- Спасибо, милая!\n- А вы-то чего стоите?\n- Чистое наказание!\n- Платформу построить не можете, так хоть помогите!\n- Це не наши заботы.\n- Как это не ваши заботы?\nБерите-ка!\n- Так что же это?\n- Пошли!\n- Почему это у вас такие платформы короткие?\nЭто неправильно\n- Це не от нас зависит.\n- А от кого же?\n- От управления дороги.\n- Мы цей вопрос уже не раз ставили.\n- Бабушка, я хочу.\nНу вот, что ты ещё надумал?\nНе вовремя!\nОх, чистое наказание!\nНу, садитесь, бабуся.\nТак.\nПоехали.\nБольшое вам спасибо, только нужно не вопросы ставить, а платформы!\n- Значит так, 66 на 23 в вашу пользу.\n- Бабушка, если нужно будет, я помогу вам.\n- Здравствуйте.\n- Здравствуйте.\n- Где тут 14-е место?\n- Здесь, здесь, пожалуйте.\n- О, сейчас девушка с нами сыграет в подкидного!\n- А я не играю.\n- А на балалайке вы играете?\n- Нет, не играю.\nНапрасно.\nНу, тогда на гитаре сыграйте, для первого знакомства.\n- А мы с вами не знакомы!\n- Всё равно ж познакомимся.\n- Вряд ли.\n- Всё, кончилась наша тихая мужская жизнь.\nКончилась!\n- Может, хватит?\n- Согласен, перерыв. 66 раз проиграли.\n- Но, говорят, кому в карты не везёт, тому в любви везёт.\n- Не всегда.\n- Поднимите-ка ноги.\n- Вот это вы напрасно, придёт проводник и всё уберёт.\n- А вам перед проводником не стыдно?\n- Конечно, стыдно.\n- Это вам нужно?\n- Пустые нам не нужны.\n- С перчиком девица!\n- Язва!\n- Молодой человек, это вагон для некурящих.\n- Между прочим, это вагон для курящих.\nНо если вам не нравится, мы можем выйти.\n- Скажите пожалуйста, вы везде порядки наводите или только на транспорте?\n- А вы только на транспорте...\n- ...нарушаете или везде?\n- Везде.\n- Оно и видно!\nПойдём, покурим.\nКакой-то документ.\nСправка.\nДана Екатерине Ивановне Ивановой в том, что она работала в артеле \"Восход\" и уволена по собственному желанию в связи с неуживчивостью характера.\nПред. правления.\nКлячкин.\nЗдесь билет, деньги.\n- Так это нашей соседки.\n- Ну, что вы!\n- Точно!\nСразу видно, что неуживчивый характер.\n- Позвольте.\nГражданочка, это вы сейчас сели?\nВаш билетик.\n- Отдайте, отдайте!\n- Тсс.\nЯ просто не знаю, куда он делся!\nМне что, штраф придётся платить, да?\nПравило гласит - за потерю билета отвечает потерявший, тире потерявшая.\nА, значит, вы тоже нарушаете порядки на транспорте!\nПослушайте, оставьте меня, наконец, в покое!\nА штраф большой?\n- Не беспокойтесь, не придётся вам штраф платить, вот ваши документы.\n- А зачем вы взяли чужой билет?\n!\nНе кричите на меня, я у вас его не брал!\nА нашёл в коридоре на полу!\n- Вместо того, чтоб спасибо сказать, кричат ещё!\n- Большое спасибо!\n- А сердце у вас, наверное, в пятки ушло?\n- Ещё бы!\n- А вы куда едете, в Москву?\n- Угу, в Москву.\n- Да, ладно уж, курите.\n- Да ладно уж, не буду.\n- А за что же вас всё-таки уволили?\n- Да так, в связи с неуживчивостью характера.\n- Это вот этот, Клячкин?\n- Угу.\n- А кто он такой?\n- Жулик.\n- Как жулик?\n- Ну так, вообще-то, он председатель артели.\nЯ его критиковать стала, а он меня взял и уволил.\n- Ну, а в Москву к кому, к отцу едете?\n- Нет.\n- К матери?\n- Не-а.\n- К мужу?\n- Нет, к деду.\nУ меня никого нет, кроме него, а тут ещё и уволили!\n- А дед-то у вас хоть работает?\n- Угу, не хочет на пенсию уходить.\nВ райсовете работает.\n- В райсовете, значит, начальство?\n- Да.\n- Чем же он у вас заведует?\n- Дверями.\n- Как дверями?\n- А так, вахтёр он, сторож.\n- А-а-а.\nА в Москве что собираетесь делать, работать?\n- Ага, и учиться.\n- У меня на Москву большие надежды.\n- Артисткой, поди, собираетесь стать, да?\nКак это вы догадались?\n- Да, все девушки мечтают стать актрисами.\n- А... хорошо бы стать артисткой!\n- Вот к нам оперетта приезжала, так я все постановки пересмотрела.\n- А вы сами поёте?\n- Немножечко.\n- Спойте что-нибудь, а!\n- Ну, что вы, уже все спят!\nА вы тихо, сейчас.\n- Да нет, нет.\n- Тихонько.\n- Ну, ладно.\n- А про что вам спеть?\n- Ну, про любовь.\nПро любовь?\nЯ вот тут недавно песню слышала, она не совсем про любовь, но всё-таки.\nС малых лет мы рядом жили, по одним дорожкам шли.\nС малых лет мы с ним дружили, с малых лет мы с ним дружили и учились, и росли.\nА теперь со мною встречи он боится, как огня, ходит мимо каждый вечер, еле смотрит на меня.\nОбъясните, если можно, почему он стал такой.\nМне и грустно, и тревожно, мне и грустно, и тревожно.\nПотеряла я покой.\nНа меня он смотрит строго и никак я не пойму, чем же этот недотрога, чем же этот недотрога дорог сердцу моему.\nА недавно долетело до меня на стороне, что он тоже то и дело речь заводит обо мне.\nНа душе моей тревожно, я не знаю, как мне быть.\nСовершенно невозможно, совершенно невозможно без него на свете жить.\nИ всё.\n- Хорошо!\n- Правда, вам понравилась?\n- Правда!\n- А вы работаете или учитесь?\n- Я дома строю.\n- А...\n- Давайте познакомимся по-настоящему.\nЗовут меня Павел, а попросту, Паша.\n- Катя.\n- Катя Иванова с неуживчивым характером, всё знаю.\n- Ну, спойте ещё что-нибудь.\n- Ну что вы, уже пора спать.\nСпокойной ночи, Паша.\nСпокойной ночи, Катя!\nК третьей платформе прибывает поезд номер 43-й Сочи\n- Москва.\n- Кать, а можно я вас провожу?\n- Что вы, я сама дойду.\n- Всего хорошего!\n- Счастливо!\n- До свидания!\n- А вы можете заблудиться в Москве.\n- А я не заблужусь.\n- Но мне в ту же сторону.\n- В какую?\n- Ну, туда, куда и вам.\n- В какую?\nВы же моего адреса не знаете!\n- Так вот я его и узнаю.\n- Катя, подождите меня!\n- Я жду, жду.\nЧто вы наделали!\nВсю мою диету рассыпали!\n- Гражданка, разрешите пожалуйста пройти!\n- Обождите, молодой человек.\nМы ещё не кончили сбор фруктов.\n- Катя, обождите, сейчас я.\n- Да вы что, с ума сошли?\nЧто Вы делаете?\nКатя, вы идите, а я сейчас, с другой стороны.\n- О, Катерина!\n- Ой, дедушка!\n- Выровнялась-то как!\nНевеста!\nЗдравствуйте!\nВторой день к этому поезду выхожу, как письмо получил!\n- Это что же, всё твоё приданое?\n- Всё.\n- Ну, пошли.\n- Подождите, дедушка, попозже пойдём, а то затолкают!\n- Пошли, мы сами всех затолкаем!\n- Дедушка, подожди, у меня туфель расстегнулся.\n- Ну вот, нашла место!\n- Всё?\nНа.\n- У меня ещё правый.\n- Уж не провожатого ли ты какого ждёшь?\n- Что вы, дедушка!\n- Пошли.\n- Здорова, Павел, вылезай давай!\n- Кошара, моя крошка!\n- Давай чемодан.\n- Спасибо, дорогой, спасибо!\nМинуточку, здесь меня один товарищ ждёт.\n- Какой товарищ?\nСейчас, обождите.\n- Паш!\nПаша!\n- Да обожди, сейчас.\n- Пашка, Паша!\n- Ну, братцы!\n- Кать!\n- Паша!\n- Катя, адрес, адрес скажи!\nНикола...\n- Паша, Паш!\n- Уехал товарищ, до свидания.\n- Хороший товарищ!\nСлушай, какие улицы в Москве начинаются с Никола, а?\n- Никола дураковский.\n- Николозапьянцовский.\n- Николачертовский.\nДа я серьёзно спрашиваю!\nНу, вот и приехали.\nМесто моей работы.\nРайонной Советской власти.\nА в этом доме я живу.\nПойдём!\nВон, в 41-ой квартире.\nДедушка, я же не виновата, я просто стерпеть не могла.\nА вообще-то меня по собственному желанию уволили.\n- Варенье бери.\n- Угу.\n- Должен тебе сказать, как человек с опытом, как выходец из прошлого века, что на людей бросаться зазря не нужно.\nИ иногда характер свой попридержать полезно.\nДедушка, а я зазря на людей никогда не бросаюсь, я просто не люблю, когда они не правильно поступают.\n- Да когда ты знаешь, правильно или не правильно?\n- Это же ясно, дедушка.\n- Как ясно?\n- Вот, правильно - это по-советски, а не правильно - это не по-советски.\nВ этом же каждый ребёнок разберётся!\nА я уже семь классов кончила!\nДа так-то оно так, Катерина, но ты всё-таки этого не очень чтоб..\nпо молодости лет и ошибиться можешь.\nХорошо, что у тебя дед жив, человек с положением, а не будь меня, пропадёшь!\n- Это вам, дедушка.\n- Спасибо!\nЧто же касается твоего трудоустройства, то с Семён Петровичем поговорить надо.\nНаш домоуправ.\nПодумаем, куда шагнуть.\nЭто тоже... выбрать надо.\nЕсли улицы Москвы вытянуть в одну, то по ней пройдёте вы через всю страну.\nЕсли лестницы Москвы все сложить в одну, то по ней взберётесь вы прямо на луну.\nВот она какая, большая-пребольшая, приветлива со всеми, во всех сердцах жива.\nЛюбимая, родная красавица-Москва!\nЗаблудиться можно в ней ровно в пять минут, но она полна друзей и тебя найдут, приласкают, ободрят, скажут.\"'Не робей\"!\nЗвёзды красивые горят по ночам над ней.\nВот она какая, большая-пребольшая, приветлива со всеми, во всех сердцах жива.\nЛюбимая, родная красавица-Москва!\nДнём и ночью, как прибой, всё кипит вокруг, но когда-нибудь с тобой встречусь я, мой друг!\nЯ одна теперь пою, а тогда вдвоём эту песенку мою мы с тобой споём!\nВот она какая, большая-пребольшая, приветлива со всеми, во всех сердцах жива.\nЛюбимая, родная красавица-Москва!\n- Ничего, получается!\n- Ой, дедушка, это вы?\n- Ты что, в постановках играла?\n- В самодеятельной художественности?\n- Угу.\n- Ну и что, как голос?\n- Есть, нет, что говорят?\n- Да я не знаю, мне почётную грамоту однажды присудили.\nТак у меня знакомый есть по этой части, человек искусства, в театре работает, оперетты!\n- Оперетты?\n!\n- Да.\nГардеробщиком.\nБольшой знаток, я его попрошу.\nПусть он проверит, что у тебя там, талант..\nили, может быть, просто так.\nПочётная грамота.\n- Ну, а в справочной что тебе сказали?\n- Слушай, запутался я совсем.\n- Чего?\nТы понимаешь, на одну Москву приходится две Никола улицы, десять Никол-переулков и два Никол-тупика.\nЕсли только улицы не брать в расчёт, то получается 12-ть Никол-переулков.\nВ каждом переулке приблизительно по двадцать домов.\n- Помножь двенадцать на двадцать, получается 240 домов.\n- Это вот это, да?\nА 4800, что это такое?\nА это, в каждом доме приблизительно по 20 квартир.\n- Ага.\n- Значит, 20 помножить на 240, получается 4800 квартир, как одна копеечка.\n- Это тебе все придётся обойти?\n- Ну, а что делать?\n- Сколько ж тебе время на это надо?\n- Если я в день буду проходить по 30 квартир.\n- Конечно, сто ему не обойти.\n- Конечно.\nПолучается, 4800 делим на 30- 160 дней.\n- Это полгода.\nЭто не считая улиц, а если с улицами, то вообще астрономия!\nЗнаешь, Паша, ты возьми отпуск на месяц.\nА потом месяца два у тебя больничный будет.\n- А зачем больничный?\n- Ты же без выходных работать будешь, устанешь.\n- Паш, а ты помнишь на каком автобусе она с вокзала уехала?\n- Что ты, в этой суматохе я и не разобрал.\n- Вот или четвёртый, или четырнадцатый.\n- Слушай, Паш мы завтра узнаем, в районе каких Никол проходит 4-ый и 14-ый.\nИ для начала прочешем эти районы.\nКлавочка, Клав!\nНу, ты что, заснула что ли?\nДавай-ка панель сюда!\n- Пашенька, я тебе сейчас стихотворенье Степана Щипачёва прочитаю.\n- Чего-чего?\nЛюбовь пронёс я через все разлуки И счастлив тем, что от тебя вдали...\nКлава, мне панель нужна, а не Степан Щипачёв.\n- Слышишь, ну, что с тобой?\n- Павлушенька, это моё сердце бьётся!\n- Слышишь?\n- Не слышу, давай-ка панель, Клава.\nТимофей Тимофеевич, сейчас мы исполним арию графини из оперетты \"Мальчик- гусар\".\nКатерина...\nЯ в жизни, Арно, повидала немало.\nЯ много любила, я много страдала.\nТы мальчик, Арнольд, и тебе не понять, что значит, что значит любить и страдать!\n- Графиня!\n- Дитя, позабудь об несчастиой графине, с тобой я встречаться не стану отныне!\nУсталое сердце давно без огня, всё в прошлом, Арнольд, у меня!\n- Молю, останься!\n- Арнольд, моему ты последуй совету, вели запрягать поскорее карету.\nРасстаться, Арнольд, наступила пора.\nЛюбовь, любовь - роковая игра!\nВыйди-ка.\n- Что скажешь, Тимофей Тимофеевич?\n- Что сказать, хороша!\n- Но, не подойдёт.\n- То есть, как не подойдёт?\n- Каскаду у неё не хватает.\n- То есть таланту?\n- Нет, талант, это талантом,а каскад - это талант с каскадом.\n- А без каскаду нельзя?\n- Нет, можно, но только в МХАТ или в Малый, а у нас такие только для статистики.\n- Не понял.\n- Ну, статистами.\n- То есть, в представлении не применяются?\nНет, они представляют, вот, шум за сценой или графиню какую-нибудь безмолвную.\nНо, а вот ежели талант с каскадом, ну, это тогда совсем другое дело, тогда уж тут шик и блеск!\n- А Катерина-то...\n- Артистка должна быть фигуристой, должна в глаза бросаться всем... антуражем.\nМожет, её всё-таки попробовать сунуть во МХАТ, там у меня приятель из нашей артели.\nВедь у нас, понимаешь, и пой, и пляши, и публику весели.\nОдним словом, оперетта.\nЗнаю я одно прелестное местечко.\nЗнаю я одно прелестное...\nКатерина.\nНе берёт он тебя в актрисы-то, Катерина.\nГоворит, не подходишь ты ему.\nНе дуй губы-то, актриса.\nАй, да не бойся ты!\nУстрою не хуже, лифтёршей будешь.\n- Там каскаду не нужно.\n- Не буду я лифтёршей.\n- Знал бы, не звал тебя, старая вешалка!\n- Ну, уж это, знаете... после таких слов, прошу больше не рассчитывать на контрамарки.\n- Тьфу!\n- Тьфу!\nО чём я печалюсь, о чём я грущу, одной лишь гитаре открою.\nДевчонку без адреса всюду ищу - и днём, и вечернею порою.\nБыть может, она далеко-далеко, быть может, совсем она близко.\nНайти человека в Москве нелегко, когда неизвестна прописка.\nАх, адресный стол, вы учёный народ, найдите её по приметам.\nГлаза-словно звёзды и брови в разлёт, и носик курносый при этом.\nВ Москве, отвечает учёный народ, бессмысленны ваши запросы.\nСто тысяч девчонок, чьи брови в разлёт и полмиллиона курносых.\nСо смены отправлюсь на поиски вновь, лишь вечер над городом ляжет.\nНадеюсь я только, друзья, на любовь, она мне дорогу подскажет.\nНу так, давай теперь подытожим.\nЗначит так, в 41-ой квартире никого не оказалось.\n- В 42-ой вообще не стали разговаривать.\n- По шее дали.\n- В 43-ей...\n- В 44-ой, в 45-ой, в 46-ой..\nДжульетты твоей не было.\n- Нет, Паша, так будем искать - ножки протянем.\n- Ну, я ж тебя не заставляю, можешь не ходить.\n- Да ты не сердись, ты вспомни, что она ещё о себе говорила, чтобы один ориентир настоящий был, кроме этого Николы, пропади он пропадом!\n- Ну, что она говорила?\n..\nВот, знаешь, про деда она говорила.\n- Ну?\n- Дед у неё есть.\n- Ну, ты представляешь, сколько в Москве дедов?\n!\nНачнёшь московских дедов делить, умножать, такая арифметика получится!\n- Потом ёщё... да, про оперетту говорила.\n- Ну?\n- Вот любит она очень оперетту.\n- А ты любишь?\n- Люблю.\n- Простите пожалуйста, вы любите оперетту?\n- Не знаю.\n- Любите, спасибо, все любят оперетту, я тоже люблю оперетту.\nКакой это ориентир?\n- Знаешь что, дед у неё работает...\n- Ну, что тебе дался дед, дед!\n- Нет, он работает...\n- Будьте добры, дайте за 40 копеек.\n- Он работает в рай...\n- Спокойно, Главспирт?\n- Нет, в рай...\n- Здравотдел?\n- Нет, нет..\n- В райсобес?\nВ райсовете вахтёром.\n- Что ж ты раньше молчал?\nЭто же самое главное!\nТоварищ старшина, скажите пожалуйста, сколько в Москве районов?\n- Двадцать пять.\n- Двадцать пять районов.\n- Двадцать пять.\n- Двадцать пять райсоветов, двадцать пять вахтёров, считай, что мы её нашли!\nПойдём.\n- Пошли.\n- Паш!\n- А?\n- Ну, куда ты пошёл?\n- Куда, в райсовет.\n- Какой же райсовет, когда рабочее время кончилось?\nДа?\nЗнаешь что, давай сейчас зайдём в 41-ую квартиру.\n- Паша, видишь двор?\n- Вижу и что?\n- Смотрят, ходят два здоровых парня по квартирам, чёрт-те что подумают, ещё в какую-нибудь историю влипнем!\n- Пойдём сейчас домой, а завтра с утра по райсоветам.\nПойдём.\n- Пойдём.\n- У него вся соль в кнопке.\nНажал - поехал.\nДело простое.\n- Я понимаю, Семён Петрович.\nНачальство не надо перебивать.\nНе надо!\nЗаходи.\nК примеру, мне надо на пятый этаж.\nЧто я делаю?\nНажимаю пятую кнопку и еду.\nЗаело... заело с пятой, действуй по утверждённой мной инструкции.\nВот, висит в рамочке.\nБери седьмой этаж, потом на эту - стоп, потом обратно пятый.\nСтоим, так?\nНе едем.\nНа этот случай у меня всё предусмотрено.\nЖми аварийную.\nАх, замыкание.\nИ на этот случай всё предусмотрено.\n- Слушай, надо бежать за монтёром.\n- Ух, а нельзя его проклятого, насовсем починить?\nКонечно можно, но руки до всего не доходят.\nА у меня их только две.\nПонятно?\nЯ теперь в сторону культработы рокировался.\nОрганизовал уголок тихих игр.\nШахматы, шашки, а то от ребячьего футбола, должен вам сказать...\nА, лифт работает!\n- Всё в порядке, лифт работает.\n- Угу, спасибо!\nКуда, куда, куда вы удалились?\nВесны моей...\nЭй!\nБезобразие!\nВыньте меня отсюда!\nСейчас же!\nНе волнуйтесь, пожалуйста, седьмую нажмите, вторую и пятую.\nНичего не получается, жму - не идёт!\nТогда так - первую, аварийную, потом пятую.\n- Ага, звонок работает, а лифт нет.\n- Почитайте, там свежие газеты лежат, а я за монтёром сбегаю.\n- Да я же на концерт опаздываю!\n- А вы артист?\n!\n- Ха, ну да.\nТогда я для вас всё сделаю!\n- Семён Петрович, я так больше не могу!\n- Что за крик?\nПонимаешь, куда ты ворвалась?\n!\n- У нас там человек, артист!\n- Что человек-артист?\nЯ вот комбинацию обдумываю.\nАртист в клетке, а вы тут комбинируете!\nПеред людьми же совестно!\n- В самом деле, Семён Петрович, лифт у нас давно в цейтноте!\n- Правильно, надоело!\nНе надо перегибать, товарищи, не надо, лифт, конечно, застревает иногда... но только на рекордно короткие сроки.\nСколько сидит сегодняшний?\n- Двадцать минут сидит.\nНу, вот видал, всего двадцать минут, норма.\nТы, товарищ Иванова, рассуждай в своём пешечном масштабе,...\n-...не строй из себя ферзя.\n- А это...\n- Ферзя.\n- Из себя не строю, я только за дело болею, вот что.\n- Тихо, спокойно, у нас комната для тихих игр, а не дискуссий, понятно?\nВсё!\n- Делаю ход конём на С-6.\nА?\n- Ну, я тоже сделаю ход конём!\n- Что?\n- Ты зачем на него жаловаться ходила?\n- Я сначала его по-хорошему просила, почините машину, чуть не плакала!\n- А он...\n- Чуть не плакала!\nУ человека по твоей милости неприятности...\n-...и на мне это отзывается!\n- А это вы не правильно, дедушка, говорите.\n- Как ты можешь?\n!\n- На родного деда критику наводить!\n- А если вы неправильно говорите?\nУ нас такой большой замечательный дом!\nА из-за такого вот Ферзя люди и страдают!\nЗастревают между этажами!\nИ какие люди!\nОх, люди страдают, а что я, не люди?\nХодил, старый дурак, в ножки кланялся, просил, московскую прописку тебе отхлопотали, а ты... отблагодарила!\nГде ты ещё такую работу найдёшь?\n- На улице она не валяется.\n- А вы мне работу не ищите, я сама найду.\nСама, где ты её найдёшь?\nАртистки из тебя не получилось, лифтёршей не вышло, ах, Катерина, не будет из тебя толку!\nУж если ты на шее сидишь, так хоть помалкивай!\n- Ну, последний райсовет, последний вахтёр.\n- Если уж и здесь нет...\nДорогой дедушка.\nВам сердиться вредно.\nВернусь, когда из меня выйдет толк.\nБольшое спасибо за всё, ваша внучка Катя.\n- Здрасьте.\n- Здрасьте.\n- Поздновато.\nВы по какому делу в райсовет, молодые люди?\n- Вы Иванов?\n- Вы Иванов.\n- Ну, Иванов.\n- А скажите пожалуйста, у вас внучка...\n- У вас есть внучка, Катя Иванова.\n- А вы кто такие будете?\n- Что вы про неё знаете?\n- А он вместе с ней в поезде в Москву ехал.\n- Да мы в одном купе вместе.\nТак это из-за тебя у ней на вокзале всё время обувь-то расстёгивалась?\n- Нету внучки.\n- Как нету?\n- Ушла.\n- Куда?\n- В неизвестном направлении.\nСемилетки кончаете, а родному деду подобные коммунике пишите!\nЧему вас учат?\nУшла!\n- Дедушка, вы её, наверное, обидели, да?\n- А что такое я ей сказал?\nНичего такого особенного я ей не говорил.\n- Нет, ну разве можно?\nВы ведь ей дед!\n- Так я ей родной дед, а не попутчик какой-нибудь.\nЯ имею полное право и поучать, когда требуется.\nА она ушла!\nПропадёт теперь!\nХарактер-то какой!\nДа и попутчики-то разные бывают, обидеть могут.\nДа и движение какое!\nМосква!\nОй!\nГосподи!\nБоже мой!\nНу, нельзя же так пугать людей, милочка!\n- И зачем только таким права дают!\n- А вы на неё подайте в суд!\n- Да при чём здесь суд?\n- Товарищ начальник!\n- В чём дело?\n- Это не несчастный случай, а счастливая встреча, я встретила подругу детства!\nТо есть, племянницу подруги детства.\n- И слегка затормозила, только и всего.\n- Верно, милочка?\n- Верно?\n- Да.\n- Можно ехать, товарищ милиционер?\n- Пожалуйста, пожалуйста.\nПойдём, милочка!\nСпасибо.\nДорогу!\n- Ну, как вы себя чувствуете, милочка?\n- Ничего, только вот у меня локоть что-то разбит и потом я испугалась,...\n-...когда вы на меня наехали.\n- Куда вас отвезти?\n- Я не знаю.\n- Вы, наверное, недавно в Москве?\n- Угу, недавно.\nНу, оно и видно, вы совершенно не умеете переходить улицу.\nВы работаете?\n- Да, то есть нет, сейчас не работаю.\n- Имеете жилплощадь?\n- Нет.\nТо есть, да, но сейчас не имею.\n- А у вас действительно всё цело, милочка?\n- Вообще-то всё, а что?\n- Я вам помогу.\nСама судьба бросила вас под мои колёса.\n- Ну, а дед что сказал?\n- Да он сам ничего не знает.\n- Да, он получил от неё открытку.\n- Ну и что?\n- Ничего, жива-здорова,...\n-...а обратного адреса нет.\n- Ну, и бесполезно её искать.\n- Между прочим, есть ещё один вариант.\n- Какой?\n- В справочной мне сказали, что в Москве проживает 2137 Екатерин Ивановых.\n- Ну и что?\nНадо узнать их адреса и обойти всех.\n- Чего смеёшься-то?\n- Так, ничего.\nДо самой старости будешь искать.\nБорода во, в руках палка. :\"Дедушка, вам кого\"?\n-\"А мне Катю Иванову\".\n\"Бабушка, вас какой-то дедушка спрашивает.\"\nТебе смешно, а мне кажется, что я её всё равно найду!\nДуша ни по ком до сих пор не страдала, но ты повстречалася мне.\nКуда же ты скрылась, куда ты пропала, неужто приснилась во сне?\nКуда же ты скрылась, куда ты пропала, неужто приснилась во сне?\nПо мне это, может, совсем незаметно, но я уж такой человек,\nЧто если дружу, то дружу беззаветно, а если люблю, то- навек!\n- Ты знаешь, мне кажется, что она на Таганке живёт.\n- Почему?\nНа открытке стоит штамп таганского почтового отделения.\nОна может жить в Малаховке, а открытку бросила на Таганке.\n- Нормальные люди где живут там и бросают.\n- Так то нормальные.\nПускай ненароком исчезла ты где-то, имей, дорогая, в виду,\nЧто я за тобою пойду на край света, а надо - и дальше пойду.\nЧто я за тобою пойду на край света, а надо - и дальше пойду.\nЗавтра на Таганку пойдём, да?\nПойдём.\nКатя, со стола можно убрать.\nМасик, ты будешь болеть или пойдёшь на работу?\n- Я, Кошенька, поболею немножко.\n- Правильно, поболей, Масик, поболей.\nВсё равно не оценят.\n- Кусенька, а ты разве уезжаешь?\n- У меня в одиннадцать психическая гимнастика, а потом массаж нижних конечностей и гомеопат.\nАх, Катя!\nОставьте вазу!\nЭто Богемское стекло!\nЕго нельзя трогать, на него можно только молиться!\nОна становится невыносимой!\n- Масик.\n- Кусик.\n- Масенька!\n- Кусик!\n- Ну что хочет Масик, чтобы Кусенька ему привезла?\n- Масик хочет водочки.\n- Водочки?\nУспокойся, Масик.\nПривезу, мой красавчик.\nПривезу, привезу, мой ангел!\n- Оставьте книги!\n- Пыль же, Раиса Павловна.\nЭто не та пыль, с которой надо бороться, она неподвижная.\nМасик, у меня к тебе большая просьба, присмотри за этой.\nА что?\nОна ничего.\nИ вообще... старательная.\n- Масик!\n- Кусенька...\n- Опять?\n- Кусик, ну, что ты?\n- Что Кусик?\n- Кусик...\n- Ну, что Кусик?\nЧто такое домработница?\nДомработница - это своего рода внутренний враг.\nМаська, ну, Маська!\nМасенька!\nОбожаю!\nУх!\n- Не так, Катя, не так!\n- А как же, Раиса Павловна?\nНадо любить свой труд!\nТруд облагораживает человека!\nЧто такое домработница?\nДомработница - это своего рода директор домашнего хозяйства.\nВы занимаете ответственный пост, Катя!\nВ общем, вот так.\nПлохо у вас получается, Катя, плохо, плохо!\nЯ скоро вернусь, без меня ничего не делайте.\nТолько сходите за папиросами для Василия Никодимыча, постирайте занавески, вымойте пол в кухне, купите всё на обед, перетрясите коврики, почистите ножи и вилки, а потом, когда я вернусь, будете готовить обед под моим руководством.\n- Доброе утро!\n- Доброе утро.. уже?\nВозможно.\nЧто, брат, достаётся, а?\nПтичка божия не знает ни заботы, ни труда...\nВ домработиицы попала.. дя-дя-дя ту...\n- Отстаньте, Василий Никодимович!\n- А что мне будет, если я отстану?\n- Ну, пустите же!\n- А что мне будет, если я пущу?\n- Пустите!\nУсю-сю, тю-тю...\nЭто тряпка.\nЭто же негигиенично!\nЦель сего тра-ля-ля-ля-ла.\nТра-ра-ры ля-ля-лам.\nНам завидует каждый прохожий...\nЗВОНОК ТЕЛЕФОНА\nАлло.\nДа, Камаринский.\nЧто?\nИз госконтроля?\nУже еду, еду.\nСкажешь Раисе Павловне, что меня срочно вызвали в контору.\nВахтёр Иванов слушает.\nАлле.. алле.. алле!\nАлле!\nЯ девчоночка жила, забот не знала, словно ласточка, свободною была.\nНа беду свою тебя я повстречала, позабыть, как ни старалась, не смогла.\nПозабыть, как ни старалась, не сумела, завладел моей ты девичьей судьбой.\nУж давно весёлых песен я не пела.\nНеужели мы не свидимся с тобой?\nТы ушёл и не воротишься обратно, одинокой навсегда останусь я.\nГоды лучшие проходят безвозвратно и проходит с ними молодость моя!\nЯ, девчёночка, жила, забот не знала, словно ласточка, свободною была.\nПовстречала я тебя и потеряла, потеряла в тот же час, когда нашла.\nОй!\nА-а!\nОй!\nБоже мой!\nСТУК В ДВЕРЬ\nОткройте!\nЧто тут у вас?\nКартина ясная.\nКран забыла закрыть?\n- Ну и влетит теперь тебе!\n- Безобразие!\n- Пропустите меня!\nБоже мой!\nБоже мой!\nСплошной кошмар!\n- Что тут случилось?\n- Я убиралась.\n- Маленькое наводненьице, на два этажа.\n- За ваш счёт, Картина ясная.\n- Вы понимаете, что вы наделали?\nЗачем вы полезли в ванну?\n- А-я-я-я-я-яй!\n- Ничего я не наделала, я убиралась и вдруг вода...\nБоже, ну кто же, по-вашему, открыл кран?\nНаверное, Василь Никодимыч, перед тем, как на работу идти.\nДа какое право вы имеете обвинять ответственного работника Бог знает в чём!\nВы лжёте!\n- Ой, какая дорогая вещь, боже мой!\n- Я не лгу!\n- Боже мой!\nБоже мой, мой Секинский ковёр!\nАх, мы разорены!\nВы лжёте, лжёте!\nВы мне за всё ответите, за всё!\n- Боже, что же творится, боже!\n- Раиса Павловна, я кран не открывала!\nА я это проверю и горе вам, если вы солгали!\nПроверьте!\nАлло.\nАлло, алло...\n- Алло.\n- Масик, ты болвасик!\nТы забыл закрыть кран в ванной!\n- Ну, как я мог?\n- У нас в квартире наводнение!\n- Кусик!\n- Такое наводнение, по колено вода!\n- Кусик, Кусик... я..\n- Ты забыл закрыть кран в ванной!\nТы понимаешь, что ты наделал?\n!\nМы совершенно разорены, мы погибли!\nКусенька, дай ей... по собственному желанию и пускай идёт на все четыре стороны!\n- Лгунья!\n- Нет, я не лгунья, я правду сказала!\nНу, что вы стоите?\nКовёр спасайте!\nВы должны в ногах у меня валяться!\nПрощения просить, а не оправдываться!\nЕсли бы я тогда на вас не наехала, вы бы давно погибли, как швец под Полтавой!\n- У, дерзкая девчонка!\n- Вы, пожалуйста, не кричите на меня.\nЯ вам благодарна за то, что вы на меня наехали, но этот наезд я вам с лихвой отработала, а теперь я ухожу от вас, вот что!\nИ пусть всё это ваше богемское стекло кто-нибудь другой обслуживает!\n- А с меня хватит!\n- Прекрасно!\nСобирайте вещи и убирайтесь по обоюдоострому желанию!\n- Куда сейчас-то поедем?\n- В Новоспасский тупик.\n- Снова так, Новоспасский, Николоспасский...\nТак доездимся, что...\n- Садитесь, пожалуйста.\n- Спасибо!\nГраждане, берите билеты.\n- Будьте добры, один до конца.\n- Возьмите.\n- Извините, пожалуйста, я забыла деньги, я сейчас сойду.\n- Пожалуйста, я уже взял.\n- Что вы, зачем?\nНе нужно, я всё равно сойду!\n- Но ведь я же заплатил.\n- Хорошо, дайте ваш адрес, я вам перешлю деньги.\n- Зачем же?\nВот мы сейчас остановимся, мы сойдём с вами вместе и вы отдадите мне долг.\n- Пожалуйста.\n- Ты куда?\n- Не могу же я такие деньги на ветер бросать!\nНабережная, следующая Новоспасский.\n- Серьёзно, надолго?\n- Боюсь, навсегда.\n- Ну, привет.\n- Скажите пожалуйста, Екатерина Иванова в этой квартире живёт?\n- В этой.\n- А её можно будет видеть?\n- А почему бы и нет?\nВы, пожалуйста, проходите, только она сейчас на кухне.\nВы вот слушайте меня, вы идите по коридору.\nПравда там темно, у нас лампочка перегорела, я как раз сейчас иду покупать, но вы не смущайтесь,\nВы идите, идите и идите, и свернёте налево, потом пройдёте прямо, потом опять налево, потом увидите дверь.\n- Ясно.\n- Нет, вы туда не входите, вы идите дальше.\nСправа будет ещё одна дверь,\n- Вы тоже туда не ходите.\n- Так...\n- И идите дальше и попадёте в такой маленький узенький тёмный коридорчик, по нему пойдёте прямо и упрётесь в дверь кухни.\n- Так.\n- И перед вами она.\n- Она?\n- Да.\n- Понятно?\n- Ну, я так и сделаю, спасибо большое!\nМожно?\nОй!\nЧёрт-те, понаставили чего-то!\nТьфу, чёрт!\n- Скажите пожалуйста...\n- А-а-а-а!\nА-а-а-аа!\n- Да чего вы кричите?\n- А-а-а-а!\n- Катя, Катечка, Катюша!\n- Что?\n- Ну, что там?\n- Бандиты!\n- Да вы что, с ума что ли сошли?\n- Где?\n- Ванной!\n- Спасите!\n- Да не может быть этого!\n- Подождите, не отворять!\n- Откройте!\n- Слушайте, я никакой ни бандит!\n- Звоните скорее в милицию.\n- А может откроем и сами разберёмся?\n- Конечно, сами разберёмся.\n- Сами разберёмся.\n- Ни в коем случае!\n- Только через мой труп!\nТам же бандиты!\n- Я не бандит, откройте мне, я вам сейчас всё объясню.\nАй!\n...\n- Феактист Феактистович.\n- Я здесь.\n- Скорее узнайте, сколько их там.\nНу, вы же смелый мужчина!\nА-а-а-а!\n- Постерегите здесь, а мы пойдём вооружаться.\n- Откройте!\nЕсли бандиты взломают дверь, бросайтесь на них и кричите:\"А-а-а-а!\"\n- Но, если я кинусь, то я потом не поднимусь.\n- И как вам не стыдно, вы же мужчина!\n- Но ведь он тоже мужчина, пусть он и кидается.\n- Я не мужчина, а ответственный съёмщик!\nОставайтесь.\nОстальные, за мной!\nСлушайте, товарищ Феоктистович, если вы мне сейчас не откроете, я взломаю дверь!\nЭто квартира умалишённых!\n- Да-да-да-да.\n- Молодые люди, имейте в виду, у меня в руках горячее оружие!\n- Ну, что?\n- Откройте!\nЗВОНОК В ДВЕРЬ\n- Товарищ милиционер.\n- Здравствуйте.\nГде бандиты?\n- Здесь.\nВ ванной комнате.\n- Я их вооружил.\n- Вот!\n- Тихо, граждане, тихо!\nИх там много!\n- Выходите по одному!\nВсе выходите!\n- Все - это я один.\n- Какой молоденький!\n- Как вы сюда попали, гражданин?\n- Я пришёл к Ивановой Екатерине Ивановне.\n- Ах, к вам?\n- Я так и думала!\n- Да я первый раз его вижу!\n- Вы к ней пришли?\n- Да не к ней я приходил.\n- Пройдёмте, гражданин.\nПопрошу со мной.\nВы что, с ума сошли?\nЯ должен переодеться!\n- Руки, руки пусть поднимет вверх!\n- Я не виноват совсем!\n- Гражданин, попрошу в машину.\n- В какую машину, зачем в машину-то?\n- В машину попрошу.\n- Товарищ начальник, я вам объясню.\n- Спокойно, гражданин, спокойно.\n- Не поеду я никуда!\n- Руки вверх!\n- Товарищ лейтенант, адреса.\n- Ну и что?\n- Так, всё ясно, пройдёмте, гражданин!\n- Да куда вы меня везёте?\n- Подождите!\nПодождите!\n- Товарищ начальник.\n- В чём дело, гражданочка?\n- Сейчас одного человека на машине увезли.\n- Да.\n- За что?\nНу, мало ли, гражданочка, за что угодить можно!\nМожет он в квартиру залез.\nА может, ещё что-нибудь похуже.\nДа..\nтогда крепко могут дать!\n- А куда его повезли?\n- Ну, поначалу, надо полагать, в отделение.\nА вы что, что он вам знакомый?\n- Или может родственные отношения?\n- Знакомый.\nДа нет, комсомольская характеристика не нужна, дело ясное.\nТут пришли ваши ребята.\n- Савельев?\n- Я Савельев.И Дубонос.\nОн\n- Дубонос.\n- Савельев и Дубонос.\nРучаются.\n- Ручаемся, конечно.\n- Да я тоже думаю, поверить можно.\nВсего хорошего!\n- Так вот, граждане, ошибочка произошла.\nвы уж его извините, пожалуйста.\n- Простите пожалуйста.\n- Извините, пожалуйста.\n- Извините, пожалуйста.\n- Пожалуйста, пожалуйста,...\n-...это так романтично!\n- Если нужно, заходите ещё.\nБудем рады!\n- Нет уж, спасибо!\nТем не менее, бдительность остаётся бдительностью.\nБдительность тут, пожалуй, ни при чём.\nВ следующий раз, Гусаров, влюбляйтесь в девушек с точным адресом и с менее распространённой фамилией.\nЯсно?\nВот так.\n- Девушка, дождь идёт!\n- Ну и пусть идёт.\n- Ну как же пусть, вы бы домой шли,...\n-...что ж так мокнуть?\n- У меня нет дома.\n- Как нет дома?\n- А вот так вот.\nНету.\n- Знаете что, пошли ко мне, я живу недалеко, за углом.\n- Не пойду я никуда.\nНу, вот что, вошли, нечего.\nТак можно простудиться, берите чемодан.\nСкорей, скорей!\n- Пей чай, кушай как следует, не стесняйся.\n- Спасибо, я и так вторую чашку уже!\n- Согрелась?\n- Угу.\n- Бери сыр, колбасу, ешь.\nНет, я не хочу больше, я наелась, спасибо!\n- Катя.\n- А.\n- Ты у меня пока останешься.\nСестра приедет не скоро, за это время ты успеешь устроиться на работу.\nНа.\nБольшое спасибо!\n- А что же дедушка, так о тебе ничего и не знает?\n- Нет.\nВсё-таки дед... дедушка... я бы на твоём месте ему позвонила.\nЯ иногда ему звоню, только не отвечаю.\nЕсли на работе, значит, здоров, а потом вешаю трубку.\nЯ сама такая, никогда не начну первая, если меня обидят.\nСамое обидное, что он правду сказал, что я из себя представляю?\nРовным счётом ничего!\nЧего я добилась?\nНу, ничего, утро вечера мудренее.\nСамое главное - тебе надо устроиться на работу.\nЗначит, и я тоже виноват, раз ты могла такое подумать!\nСпасибо.\n- Но, о любви я никогда тебе ничего не говорил.\n- О любви не говорят, о ней всё сказано.\n- Это только в песне поётся.\n- В кино ходили?\nДва раза!\n- Ну и что?\n- На танцы приглашал.\n- Ну, приглашал.\n- И целовались!\n- Когда?\n- Как когда?\n- Ну, один раз.\n- Три!\n- Да неужели это имеет какое-нибудь значение, Клавочка?\n- Может все-таки любишь?\nНеудобно, люди же ведь кругом смотрят, Клава!\nСердцу ведь не прикажешь.\nНе плачь, Клавочка!\nДевушка, посчитайте нам пожалуйста.\n- А ту нашёл?\n- Кого?\n- Ту, с которой в поезде познакомились.\nНет.\nВахтёр Иванов слушает.\nАлле, алле.\nКатерина?\nЭто ты!\nБрось баловаться, отвечай!\nМолчишь, ну, молчи, молчи, а ко мне приходил попутчик твой.\n- Видный такой парень, забыл, как его имя-то.\n- А когда он приходил?\n- Ой, дедушка, здравствуйте, тут что-то с трубкой было!\n- Давно уж.\nСразу, как ты сбежала.\n- Ты когда домой вернёшься, Катерина?\n- Дедушка, из меня ещё толку не вышло, как выйдет, сразу приду.\nА я живу хорошо, работаю, здорова, Вы за меня не беспокойтесь.\nСейчас же, сию минуту ступай домой!\nНепутёвая!\nУх, какую моду взяла, от родного деда бегать!\nКатерина, ты слышишь меня?\nАлле, алле, алле!\nЯ, признаться, проявил глупость бесконечную.\nВсей душою полюбил куклу бессердечную.\nДля неё любовь - забава, для меня - мучение.\nПридавать не стоит, право, этому значения!\nНе со мной ли при луне пылко целовалася?\nА теперь она во мне разочаровалася.\nДля неё любовь - забава, всё ей шуткой кажется, кто ей дал такое право, надо мной куражиться?\nПозабыть смогла она всё, что мне обещано.\nВам, наверно, всем видна в бедном сердце трещина.\nДля неё любовь - забава, для меня - страдание.\nЕй - налево, мне - направо, ну, и до свидания!\n- Ну, вот мы и пришли.\n- А завтра, Оленька, пойдём в кино.\n- Вдвоём?\n- Вдвоём, я билеты взял на последний сеанс.\n- Ой, ещё и на последний!\n- А что?\n- Нет-нет, я возьму подругу.\nА вы возьмите какого-нибудь приятеля.\n- Ну, Оленька, кино-то вдвоём интересней смотреть!\n- Почему интересней?\nНу, почему-почему?\n- За что это, Оля?\n- Мы только второй раз с вами встречаемся, а вы безобразничаете!\n- Не второй, третий!\n- Это всё равно.\nВот вы, значит, какой?\n!\n- Нате ваши цветы!\n- Оля, Оля, я не хотел вас обидеть, я думал, что это...\n- Что вы думали?\nРазве вас девушки никогда не били за такое хулиганство?\n- Никогда, даже наоборот.\n- Вы с плохими девушками встречались, до свидания!\n- Оля!\nЯ вам даю честное слово, что этого никогда больше не повторится без вашего на то разрешения!\nОля, можно я возьму билеты на завтра, на четверых, на последний сеанс?\nМожно?\n- Оля!\n- Можно.\nВстретимся возле кино.\n- Хорошо, я вас провожу, а то там темно на лестнице!\n- Нет уж не нужно, я сама.\nДо свидания!\n- До свидания!\n- Катя, пойдём завтра с нами в кино, а?\n- Что ты, я вам мешать только буду.\n- Ну, что ты, мешать?\n- Он с товарищем придёт, познакомишься.\n- Не нужно мне никакого товарища.\n- Катенька, ну, я прошу тебя, ради меня, пойдём.\n- Не нужно, Оль, не нужно.\nОй, всё-таки странная ты.\nЭто Москва, пойми, ну, как ты своего Пашу найдёшь?\nТы даже фамилии его не знаешь.\n- Ну, где ты?\n- Прости, ну, как?\n- Красив, только смотри,...\n-...как бы она от тебя тоже не убежала.\n- Ничего, моя не бегает.\n- У неё несколько другая привычка.\nБудьте добры, зефира коробочку.\n- Мить.\n- А?\n- А может быть, я не пойду с тобой в кино?\n- Подругу приведёт.\n- Ну и что, ты понимаешь, я ещё два адреса достал.\n- Первый раз в жизни я тебя попросил и ты не можешь!\n- Да я могу, но... в нашем распоряжении...\n-...ещё пятьдесят минут!\nДавай зайдём по одному адресочку, а?\n- Быстро?\n- Быстро.\n- Пойдём.\n- Гражданин.\n- О, спасибо большое!\n- Что, Алёнушка, тебе купить?\n- Яблочко?\n- Угу.\nТак, 75-я.\n- Слушай, здесь открыто.\nПойдём.\n- Пашка... вспомни ванную.\nНу, я теперь учёный, ничего не будет, идём.\nМожно?\nМожно?\nА кто-нибудь здесь есть?\nЛюди добрые, отзовитесь.\nОй!\nНу, вот так вот.\nПримерно этого я и ожидал!\nЭто, между прочим, хуже чем ванная.\nХозяин, хозяин, есть тут кто-нибудь?\nКак он смотрит, видишь?\nМы опоздаем из-за этой чертовки!\nСлушай, тихо, она, наверное, не любит, когда с ней громко разговаривают.\n- Ну, давай тогда по-хорошему, вежливо.\nОна ж учёная.\n- Давай.\n- Шарик, хи-хи, позвольте выйти.\n- Лобзик, Шурик, Шурик!\n- Хорошая собачка!\n- Лаечка!\n- Лаенька!\n- Почему они не идут?\n- Уже скоро начало!\n- Он, наверное, забыл.\n- Что ты, как он может забыть?\n- Что же мы теперь делать-то будем?\n- А что, если её зефиром подкупить?\n- Да что ты?\nСобаки взяток не берут.\n- А мы сейчас попробуем.\nЛобзик, Лобзик, на.\nНу, скушай, Лобзик.\nВот так.\n- Клюёт.\n- Ну, теперь иди.\n- Нет.\nТы иди.\n- Ты кормил, ты и иди.\n- Пойдём тогда вместе.\nСпокойно, спокойно... раз, два..\nХозяин!\n- Оля, бесполезно ждать, пошли домой!\n- Нет уж, я останусь и я ему всё скажу!\nНу, как хочешь, а я пойду.\n- Аппетит-то какой-то нечеловеческий.\n- Конечно, нечеловеческий, собачий.\nЧто я Оле скажу?\nВедь не поверит.\n- Слушай, Мить, у меня есть план.\nКидай ей последнюю зефирину.\n- Ну?\nПока она будет кушать, я потушу свет и в темноте пробьёмся.\n- Ха, это идея!\n- Давай.\n- Только спокойно, Паша.\n- Лаечка.\n- Только осторожно!\n- Лаечка, Лаечка...\nЛаечка, на...\nРаз..\n- Ай, ай, люди!\nХозяева!\n- Караул!\nАй!\n- Оленька, я сейчас вам всё объясню!\n- Я ждала вас только для того, чтобы сказать вам, чтобы вы не смели, и запомните это, не приходить ко мне, не писать и не звонить!\nЗабудьте моё имя и тот день, когда вы заплатили за меня рубль в троллейбусе!\nДа выслушайте ж вы меня, Оля!\n- Нет, нам необходимы молодые кадры и они у нас должны быть!\n- Юрий Александрович,...\n-...вы неисправимый фантазёр!\n- Елизавета Тимофеевна, для художника необходима фантазия.\n- Я член художественного совета.\nМне, например, фантазия абсолютно не нужна.\n- Да..\nИ потом, мы внедрители, мы должны внедрять, а не фантазировать.\nЕлизавета Тимофеевна, вы посмотрите, какая очаровательная девушка!\nЯ лично ничего очаровательного не нахожу.\n- Девушка, вы с вашей внешностью могли бы найти занятие поинтереснее.\n- Вы куда-то шли, гражданин, ну, и идите.\nНет, Боже сохрани, вы меня не так поняли!\nЯ действительно, хочу вам предложить увлекательную, интересную, серьёзную работу.\nДемонстрируются вечерние туалеты, созданные художниками-модельерами нашего экспериментального ателье.\nЕлизавета Тимофеевна, что делать?\nЛюся заболела и я не могу демонстрировать свою модель!\n- Что вам сказала эта симулянтка?\n- Она сказала, что у неё высокая температура, 39,2.\nУ неё температура, а у нас художественный совет.\nИванова, встаньте сюда.\n- Размер её.\n- Демонстрировать платье будете вы.\nЧто вы, Елизавета Тимофеевна, я даже не знаю, как в таком ходить!\nСоветская девушка должна смело ходить в том, что мы внедряем!\nНо, Елизавета Тимофеевна, мне же говорили, что я только рабочую одежду буду показывать!\nВы знаете, у меня от неё каждые пять минут ра-разрыв сердца делается!\n- Прежде всего, вы не должны затруднять работу, вы хотите стать асфальтщицей?\n- Нет, я не хочу, но...\n- Ведите её в кабину.\n- Пойдёмте, Катя, пойдёмте.\n- Идите сюда, идите.\nЕлизавета Тимофеевна, ну, как?\n- Вполне на уровне!\n- Даже лучше, чем я ожидала.\n- Лизавета Тимофевна, здесь такой вырез большой!\n- Мне как-то неловко.\n- Почему вы вы-высказываетесь?\nВы-вы же не член худсовета!\nИдите немедленно!\n- Там никого больше нет..\n- Не ваше дело!\nИдите немедленно!\nУберите все ваши руки и не падайте с лестницы.\n- Неужели он тебя выгнал?\n- Не, не выгнал, кричал только.\nНет у меня внучки, если вы ещё раз придёте от её попутчика, это он про тебя, вызову милицию.\nСумасшедший какой-то.\nИра, наверно, вся в него.\n- Слушай, Мить, вот эта девушка так похожа на Катю!\n- Какая?\nВот эта, в белом.\nНу, докатились, видения начинаются!\nОна так похожа, только ростом чуть-чуть выше.\nСлушай, Пашка, я тебе как другу говорю, брось ты эти поиски, не бросишь, плохо кончишь!\nЧто она тебе далась, ну, ты посмотри, сколько девчат кругом!\nА?\n- Платье держите скорее!\n- Стой!\n- Остановитесь!\nПонимаешь, я его увидела и побежала!\nУдержаться не могла!\n- А потом по собственному желанию.\n- Что, неужели выгнали?\n- Ну, что ж ты теперь будешь делать?\n- Не знаю.\nУехать что ли?\nВот, уехать, новость какая!\nА ты знаешь что?\nМне кажется, что я могу тебя устроить.\n- Я завтра поговорю.\n- Оленька, спасибо!\nОпять ты меня выручаешь!\n- Ну, как настроение?\n- Хорошее.\n- Смотри, чтобы всё было аккуратно.\n- И потом, чай наливай пожиже, потому что заварки не хватит.\n- Ладно.\n- Попьют сотрудники в перерыв чай и снова за работу.\n- Оленька,...\n-...а что это вы всё пишете, считаете?\n- Пишем разные бумаги, а считаем разные цифры.\n- А зачем все эти бумаги?\n- Смешная ты.\nНад нашей конторой есть ещё одна контора, которая главнее нашей.\nНу и вот, эта контора присылает нам свои бумаги, мы их переписываем и посылаем в ту контору, которая ниже нашей.\nПонимаешь?\nНе понимаю.\nПочему же контора, которая ниже нашей, не может сразу послать бумаги в контору, которая ниже нашей?\nВот странная, эта контора, которая ниже...\nперерыв, чай неси!\nСемён Семёнович, возьмите на меня чай, пожалуйста, я сейчас!\nИванова, начальник очень занят.\nВы поставьте стакан на стол и сейчас же по - тихонечку уходите.\nПонимаете?\nПонимаю.\nТаким образом, в целом, своевременность...\nнаписали?\n- Написала.\n- Своевременность, оборачиваемость поступающих директив, своевременна..и.. происходит точно в своё время.\n- Иванова, Иванова, что с вами?\n- Ничего.\n- Возьмите пакет и поезжайте на стройку.\n- На стройку?\n- Послушайте, девушка, вы тут всех знаете?\n- Всех и всё, а что?\n- У вас тут один товарищ работает.\n- А у нас не один товарищ работает, девушка.\n- У нас сотни, а зачем он тебе?\n- Так, не важно.\n- Ты учти, мы своих на сторону не отдаём!\n- Ты что, пакеты разносишь?\n- Пакеты!\n- Ну и волоки свой бюрократизм!\n- Не прохлаждайся!\nКому пакеты?\n- Прорабу.\nГде он?\n- Вон туда иди.\n- Ой, постой!\n- А-а-а-а!\n- Ушиблась, дочка?\n- Нет, ничего.\n- Да как же это тебя так угораздило?\n- А мне прораба нужно!\n- Я прораб.\n- Ой, вот, наконец-то!\nА у меня для вас пакет.\nЛично, срочно.\nСрочно?\nО, да я эти новости неделю назад знал.\nСидите там, директивы переписываете, а с арматурой опять подвели?\nДавай, сердешная, книжку-то твою.\nРаспишусь.\nИ кому нужна только эта ваша контора?\nНаша контора - это необходимое связующее звено в сложной цепи взаимоотношений между главком и строительными площадками.\nЯ закругляюсь, товарищи.\nВ своё время мы своевременно сигнализировали и я считаю своевременным... поставить вопрос о несвоевременности сжатия нашего аппарата.\nНас надо не сжимать, нас надо расширять!\nЗначит, вы не согласны, товарищ Камаринский, что ваша контора превратилась в лишнюю инстанцию?\n- Категорически!\nКатегорически не согласен!\n- Это как же вы говорите, Василий Никодимыч, не лишняя?\nНас на стройке только лишними и ругают, лишняя инстанция, лишняя контора, со стыда можно сгореть!\nА вы знаете, сколько эта лишняя инстанция казённого чаю выпивает?\nРублей на 500 в месяц!\nХа-ха-ха, демагогия!\nЭто безответственное выступление.\nДа.\n- Оля!\n- Здравтсвуйте, Митя!\n- Вы меня извините, я в таком виде!\nНаше-то учреждение закрыли.\n- Здравствуйте, Оля.\n- Здрасьте.\n- Значит, вы теперь тоже рабочий класс?\n- А я нечаянно на вашу стройку попала.\n- Это же великолепно, что вы именно на нашу стройку попали!\n- Хотите к нам в бригаду, подсобницей?\nМогу похлопотать.\n- Куда?\nМонтажником, наверх.\nРабота не трудная, инструмент принести, то да сё.\nА красотища!\nСтрижи летают, ласточки.\nБудете у нас королевой воздуха!\n- Скажите, Митя, а вы королём там будете?\n- Да нет, заместителем.\nПодожди, сейчас.\n- А я эти дни только о вас и думаю.\n- Всё время?\n- Всё время.\n- Пять раз в день мимо вашего дома хожу.\n- Почему же вы не зашли?\nА как же я зайду, если вы мне запретили заходить к вам, звонить и даже писать.\nМало ли чего я там наговорила?\nА я боялся.\nДа подожди ты, одну минуту постой!\n- Это ещё что такое?\n- Иван Романович, это...\n-...шефство над новенькими.\n- Ну, так будем шефствовать над девицами, Савельев, десять лет дом не построим!\n- Виноват, Иван Романович!\n- Ну-ка марш на место!\n- Больше не буду!\nЧерез пять минут с третьей платформы отправляется поезд номер 72 Москва\n- Иркутск.\nВот твой вагон!\nТы, Катерина, не забывай, что у тебя дед существует, пока что.\n- Дедушка, не беспокойтесь, я вам писать буду.\n- Как приедешь на место назначения, сразу телеграмму дай.\nС точным адресом, а то ведь опять пропадёшь!\nНа вот тебе, письма от тебя всё равно не дождёшься, а открыточку нацарапай, жива мол, здорова, того и вам желаю.\n- Тут 50 штук, про запас.\n- Катенька, милая, может быть всё-таки останешься, будем опять с тобой вместе работать?\n- Нет, решила, так уж решила.\n- А ты знаешь, что мне Митя сказал?\nОни меня в бригаду возьмут, подсобницей, будете у нас королевой воздуха!\nНет, королева - это не профессия, ты лучше в штукатуры иди, штукатуры - это дело!\n- Что это ты оглядываешься?\n- Я попросила Митю сюда придти, а его всё нет.\nБудет ему сегодня от меня!\nОпоздаешь!\nТы уж, Катерина, этого.. я ж.. не того..\nяж для тебя от всей души.\n- Да что вы, дедушка!\n- Ладно уж!\n- Про адрес-то не забудь, непутёвая!\n- Не забуду, дедушка, вы себя-то берегите!\n- Оленька, спасибо тебе за всё, за всё!\n- Катенька, не забывай меня, пиши!\nНу вот, опоздали, \"ещё по одному адресочку зайдём\", ищет прошлогодний снег!\n- В последний раз!\n- Да, в последний раз!\n- Митя, она!\n- Кто?\n- Да, Катя!\nКатя!\nКатенька!\nКатя!\n- Катя!\n- Паша!\n- Катя, а я вас по всей Москве искал!\n- А я думала, вы меня забыли.\n- Да что вы, я всю Москву перевернул, а вас нет и нет!\n- Гражданин, сойдите с вагона!\n- Проводник, одну минуточку!\n- Гражданин, кому говорят, сойдите!\n- Я вас очень прошу!\n- Гражданин, не нарушайте!\n- Вы понимаете, что я эту девушку люблю!\n- Любить можно, а нарушать нельзя!\n- Можно или нельзя, это пожалуйста, ты куда, Катенька?\n- На работу.\n- А как же я, Катенька, оставайся.\n- Мне же ехать надо!\n- Зачем?\n- Ну, что же мне делать?\n- Ну, Катя, мы вместе поедем.\n- Ну, решайтесь, решайтесь, девушка, поезд идёт!\n- Поезд и правда идёт, Катя, а?\nГде твои вещи пойдём, пойдём, прыгнем, а?\n- Катя, прыгай!\n- Ой, я боюсь, ой!\n- Отдай чемодан!\n- Отдай чемодан-то!\nОй, Пашенька, не правильно я сделала, мне же ехать надо!\n- Что, опоздали, молодые люди?\n- Нет, не опоздали, наоборот, успели!\n- Пойдём?\n- Пойдём!\n\"О чем я печалюсь, О чем я грущу,\nОдной лишь гитаре открою.\nДевчонку без адреса всюду ищу\nИ днем, и вечерней порою.\nБыть может, она далеко-далеко.\nБыть может, совсем она близко.\nНайти человека в Москве нелегко,\nКогда неизвестна прописка\".\n- Раз, два, три, четыре, пять.\n- Бабушка, что же ты меня считаешь?\nЯ же не чемодан.\n- Чистое наказание, господи!\nТоварищ начальник, где останавливается 10-й вагон?\n- Вон конец платформы, бачите?\n- Вижу.\n- Так це не там.\nБудку бачите?\n- Вижу.\n- Це тоже не там.\nВот дальше будки будэ 10-й вагон.\nТоропитесь, бабуся, бо поезд стоит 1 минуту.\n- Батюшки, да как же я там успею?\n!\nТам так высоко.\nКак я там вскарабкаюсь, когда у меня столько вещей?\n!\n- Бабушка, я вам помогу!\n- Спасибо, милая.\n- А вы-то чего стоите?\n- Чистое наказание!\n- Платформу построить не можете, так хоть помогите.\n- Це не наша забота.\n- Как это не ваша забота?\n!\nБерите-ка!\nТак, пошли!\nПочему это у вас такие платформы короткие?\nЭто неверно!\n- Це не от нас зависит.\n- А от кого?\n- От управления дороги.\nМы сей вопрос уже не раз ставили.\n- Бабушка, хочу!\n- Ну вот что еще надумал.\nЧистое наказание!\n- Садитесь, бабуся!\nТак, поихалы.\n- Большое вам спасибо.\nТолько вы не вопросы ставьте, а платформы.\n- Значит так, 66 на 23 в вашу пользу.\n- Бабушка, если что нужно будет, я помогу вам.\nЗдравствуйте.\n- Здравствуйте.\n- Где тут 14 место?\n- Здесь, пожалуйте.\n- Сейчас девушка с нами сыграет в подкидного.\nДа?\n- Я не играю.\n- А на балалайке вы играете?\n- Нет, не играю.\n- Тогда на гитаре, для первого знакомства.\n- А мы с вами не знакомы.\n- Все равно познакомимся.\n- Вряд ли.\n- Все!\nКончилась наша тихая мужская жизнь.\n- Может, хватит?\n- Согласен.\nПерерыв. 66 раз проиграли.\n- Говорят, кому в карты не везет, тому в любви везет.\n- Не всегда.\n- Поднимите-ка ноги.\n- Напрасно вы.\nПридет проводник и все уберет.\n- Вам перед проводником не стыдно?\n- Стыдно.\n- Это вам нужно?\n- Пустые не нужны.\n- С перчиком девица-то.\n- Язва.\n- Молодой человек, это вагон для некурящих.\n- Это вагон для курящих.\nНо если вам не нравится, мы можем выйти.\nСкажите, вы везде наводите порядки или только на транспорте?\n- А вы их только на транспорте нарушаете или везде?\n- Везде.\n- Оно и видно!\n- Пойдем покурим.\n- Документ.\n\"Справка.\nДана Екатерине Ивановне Ивановой в том, что она работала в артели \"Восход\" и уволена по собственному желанию в связи с неуживчивостью характера.\nПред. правления Клячкин\".\nЗдесь билет, деньги.\nТак это нашей соседки.\n- Ну что вы?\n- Точно.\nСразу видно, что неуживчивый характер.\n- Позвольте.\nГражданочка, это вы сейчас сели?\nВаш билетик.\n- Отдайте.\n- Я просто не знаю, куда он делся.\nМне штраф придется платить?\n- Правило гласит: \"За потерю билета отвечает потерявший \".\n- Вы тоже нарушаете порядки.\n- Послушайте, оставьте меня в покое!\nА штраф большой?\n- Не беспокойтесь, не придется вам штраф платить.\nВот ваши документы.\n- А зачем вы взяли чужой билет?\n!\n- Не кричите!\nЯ у вас их не брал, а нашел в коридоре, на полу.\nВместо того чтобы \"спасибо\" сказать, кричат.\n- Большое спасибо.\n- А сердце-то у вас, наверное, в пятки ушло.\nДа?\n- Еще бы!\n- А вы куда едете?\nВ Москву?\n- В Москву.\nДа ладно уж, курите!\n- Да ладно уж, не буду.\nА за что же вас уволили?\n- Да так, в связи с неуживчивостью характера.\n- Клячкин?\n- Угу.\n- А кто он такой?\n- Жулик.\n- Как жулик?\n- Он председатель артели.\nЯ его критиковать стала, а он меня уволил.\n- А в Москву к отцу едете?\n- Нет.\n- К матери?\n- Нет.\n- К мужу?\n- Нет, к деду.\nУ меня никого нет, кроме него.\nА тут еще и уволили.\n- А дед-то у вас работает?\n- Угу.\nНе хочет на пенсию уходить.\nВ райсовете работает.\n- Значит, начальство?\n- Да.\n- Чем же он у вас заведует?\n- Дверями.\n- Как дверями?\n- А так.\nВахтер он.\n- А в Москве что собираетесь делать?\nРаботать?\n- Ага.\nИ учиться.\nУ меня на Москву большие надежды.\n- Артисткой собираетесь стать.\n- Как вы догадались?\n- Сейчас все девушки мечтают быть артистками.\n- Хорошо бы стать артисткой.\nВот к нам оперетта приезжала, так я все постановки пересмотрела.\n- А вы сами поете?\n- Немножко.\n- Спойте что-нибудь.\n- Ну что вы!\nУже все спят.\n- А вы тихо.\nСейчас.\n- Нет-нет.\n- Тихонько.\n- Ладно.\nА про что вам спеть?\n- Про любовь.\n- Про любовь?\nЯ тут недавно песню слышала, она не совсем про любовь, но все-таки.\nС малых лет мы рядом жили, По одним дорожкам шли.\nС малых лет мы с ним дружили, С малых лет мы с ним дружили,\nИ учились, и росли.\nА теперь со мною встречи Он боится как огня.\nХодит мимо каждый вечер, Еле смотрит на меня.\nОбъясните, если можно, Почему он стал такой?\nМне и грустно, и тревожно, Мне и грустно, и тревожно.\nПотеряла я покой.\nНа меня он смотрит строго, И никак я не пойму,\nЧем же этот недотрога, Чем же этот недотрога\nДорог сердцу моему?\nА недавно долетело До меня на стороне,\nЧто он тоже то и дело Речь заводит обо мне.\nНа душе моей тревожно, Я не знаю, как мне быть.\nСовершенно невозможно, Совершенно невозможно\nБез него на свете жить.\nИ все.\n- Вы поете хорошо.\n- Правда?\nВам понравилось?\n- Правда.\n- А вы работаете или учитесь?\n- Я дома строю.\nДавайте познакомимся по-настоящему.\nЗовут меня Павел.\nПопросту\n- Паша.\n- Катя.\n- Катя Иванова с неуживчивым характером, все знаю.\nСпойте еще что-нибудь.\n- Что вы, уже пора спать.\nСпокойной ночи, Паша.\n- Спокойной ночи, Катя.\nК 3-й платформе прибывает поезд 43 \"Сочи-Москва\".\n- Катя, а можно я вас провожу?\n- Что вы, я сама дойду.\n- Всего хорошего.\n- Счастливо.\n- До свидания.\n- А вы можете заблудиться в Москве.\n- А я не заблужусь.\n- Но мне в ту же сторону.\n- В какую?\n- Туда, куда и вам.\n- В какую?\nВы же моего адреса не знаете.\n- Вот я его и узнаю.\nКатя!\nПодождите меня.\nХорошо?\n- Я жду.\n- Что вы наделали?\n!\nВсю мою диету рассыпали.\n- Гражданка, разрешите пройти.\n- Подождите, молодой человек, мы еще не кончили сбор фруктов.\n- Катя, обождите, сейчас я.\n- Да вы что, с ума сошли?\n!\n- Катя, вы идите, я выйду с другой стороны.\n- О, Катерина!\n- Ой, дедушка!\n- Выровнялась-то как!\nНевеста.\n- Здравствуйте.\n- Второй день к этому поезду выхожу, как письмо получил.\nЭто что же, все твое приданое?\n- Все.\n- Ну пошли.\n- Подождите, дедушка!\nНарод схлынет, и пойдем, а то затолкают.\n- Пошли, мы сами всех затолкаем.\n- Дедушка, подожди.\nУ меня туфель расстегнулся.\n- Ну вот, нашла место.\nВсе?\nНа.\n- У меня еще правый.\n- Уж не провожатого ты какого ждешь?\n- Что вы, дедушка.\n- Пошли.\n- Вон Павел!\n- Здорово, Павел!\nВылезай!\n- Минуточку, здесь меня один товарищ ждет.\n- Какой товарищ?\n- Обождите.\n- Паша!\nПаша!\n- Обожди, сейчас.\n- Паша!\nКуда ты?\n- Катя!\n- Паша!\n- Катя!\nАдрес!\nАдрес скажи!\n- Николо...\n- Паша!\nУехал товарищ?\nДо свидания, хороший товарищ.\n- Слушайте, какие улицы в Москве начинаются с Николо?\n..\n- Николо-Дураковкий.\n- Николо-Запьянцовский.\n- Николо-Святовский.\n- Я серьезно спрашиваю!\nВЕСЕЛАЯ МУЗЫКА\n- Ну вот и приехали.\nМесто моей работы - районная советская власть.\nА в этом доме я живу.\nПойдем.\nВон.\nВ 41-й квартире.\n- Дедушка, я не виновата.\nЯ просто стерпеть не могла.\nА ведь меня по собственному желанию уволили.\n- Варенье бери.\nДолжен тебе сказать как человек с опытом, как выходец из прошлого века, что на людей бросаться зря не нужно.\nИ иногда характер свой попридержать полезно.\n- Дедушка, а я зря на людей никогда не бросаюсь.\nЯ просто не люблю, когда они неправильно поступают.\n- Как ты узнаешь, правильно или нет?\n- Это же ясно, дедушка!\n- Как?\n- Правильно - это по-советски, а неправильно - это не по-советски.\nЭто каждый ребенок разберет, а я уже 7 классов кончила!\n- Это так.\nНо ты, Катерина, по молодости лет и ошибиться можешь.\nХорошо, что у тебя дед жив, человек с положением.\nА не будь меня - пропадешь.\n- Это вам, дедушка.\n- Спасибо.\nЧто же касается твоего трудоустройства - с Семен Петровичем поговорить надо.\nНаш домоуправ.\nПодумаем, куда шагнуть, это тоже выбрать надо.\nЕсли улицы Москвы вытянуть в одну,\nТо по ней пройдете вы через всю страну.\nЕсли лестницы Москвы все сложить в одну,\nТо по ней взберетесь вы прямо на Луну.\nВот она какая - Большая-пребольшая,\nПриветлива со всеми, Во всех сердцах жива\nЛюбимая родная Красавица-Москва.\nЗаблудиться можно в ней ровно в пять минут.\nНо она полна друзей - И тебя найдут.\nПриласкают, ободрят, скажут: \"Не робей\".\nЗвезды красные горят по ночам над ней.\nВот она какая - Большая-пребольшая,\nПриветлива со всеми, Во всех сердцах жива\nЛюбимая родная Красавица-Москва.\nДнем и ночью, как прибой, все кипит вокруг.\nНо когда-нибудь с тобой встречусь я, мой друг.\nЯ одна теперь пою, а тогда вдвоем\nЭту песенку мою мы с тобой споем.\nВот она какая - Большая-пребольшая,\nПриветлива со всеми, Во всех сердцах жива\nЛюбимая родная Красавица-Москва.\n- Ничего получается.\n- Ой, дедушка.\n- Ты что, в постановках играла?\nВ самодеятельной художественности?\n- Угу.\n- Ну и как?\nГолос есть, нет?\n- Я не знаю.\nМне однажды почетную грамоту присудили.\n- У меня знакомый есть по этой части, человек искусства.\nВ Театре оперетты работает.\n- Оперетты?\n- Да.\nГардеробщиком.\nБольшой знаток.\nЯ его попрошу проверить, что у тебя - талант или просто так, почетная грамота.\n- А в справочной что тебе сказали?\n- Запутался я совсем.\n- Чего?\n- На одну Москву приходится 2 Николо-улицы, 10 Николо-переулков и 2 Николо-тупика.\n- Так.\n- Если улицы не брать в счет, получается 12 переулков.\nВ каждом переулке по 20 домов.\nЯ помножил 12 на 20 и получил 240 домов.\n- Вот это.\nА 4800- что такое?\n- А это - в каждом доме по 20 квартир. 20 помножить на 240- получается 4800 квартир.\n- Это тебе все придется обойти?\n- А что делать?\n- Сколько же времени на это надо?\n- Если я в день буду проходить по 30 квартир...\n- Конечно, 100 ему не обойти.\n- То получается 160 дней.\n- Это полгода.\n- Не считая улиц.\nА если с улицами, то вообще астрономия.\n- Знаешь, Паша, возьми отпуск на месяц, а потом месяца 2 у тебя бюллетень будет.\n- А зачем бюллетень?\n- Наверное, без выходных работать будешь, устанешь.\n- Паша, а ты помнишь, на каком автобусе она с вокзала уехала?\n- Что ты!\nВ этой суматохе я не разобрал.\nТо ли 4, то ли 14.\n- Слушай, Паш, завтра узнаем, в районе каких Никол проходят 4-й и 14-й.\nИ для начала прочешем эти районы.\n- Правильно.\nКлавочка!\nКлав, ты что, заснула?\nДавай-ка панель сюда.\n- Паша, я тебе сейчас стихотворение Степана Щипачева прочитаю.\nЧего-чего?\n- \"Любовь пронес я через все разлуки И счастлив тем, что от тебя вдали\".\n- Клава, мне панель нужна, а не Степан Щипачев.\nСлышишь?\nНу что с тобой?\n- Павлушенька, это мое сердце бьется.\nСлышишь?\n- Не слышу.\nДавай панель, Клава.\n- Тимофей Тимофеевич, сейчас мы исполним арию графини из оперетты \"Мальчик-гусар\".\nКатерина.\nЯ в жизни, Арнольд, Повидала немало.\nЯ много любила, Я много страдала.\nТы мальчик, Арнольд, И тебе не понять,\nЧто значит, что значит Любить и страдать.\n- Графиня.\n- Дитя, позабудь о несчастной графине.\nС тобой я встречаться не стану отныне.\nУсталое сердце давно без огня.\nВсе в прошлом, Арнольд, у меня.\n- Молю, останься.\n- Арнольд, моему ты последуй совету:\nВели запрягать поскорее карету.\nРасстаться, Арнольд, наступила пора.\nЛюбовь.\nЛюбо-овь -\nРокова-а-ая игра!\n- Выйди-ка.\nЧто скажешь, Тимофей Тимофеевич?\n- Хороша.\nНо не подойдет.\n- То есть?\n- Каскаду у нее не хватает.\n- То есть таланту?\n- Нет, талант талантом.\nА каскад - это талант с каскадом.\n- А без каскаду нельзя?\n- Можно, но только во МХАТ или в Малый.\nА у нас такие артисты только для статистики.\n- Не понял.\n- Статистами.\n- В представлении не применяются?\n- Они представляют шум за сценой или графиню безмолвную.\nНо ежели талант с каскадом, то это другое дело.\n- А Катерина-то?\n- Артистка должна быть фигуристой, в глаза бросаться всем антуражем.\nМожет, ее попробовать сунуть во МХАТ?\nТам у меня приятель из нашей артели.\nВедь у нас пой, пляши и публику весели.\nОдно слово - оперетта.\nЗнаю я одно прелестное местечко.\n- Знаю я одно прелестное...\nКатерина!\nНе берет он тебя в актрисы.\nГоворит, не подходишь ты ему.\nНе дуй губы-то, актриса!\nНе бойся, устрою не хуже.\nЛифтершей будешь.\nТам каскаду не нужно!\n- Не буду я лифтершей.\n- Знал бы, не звал бы тебя, старая вешалка.\n- Ну, знаете!\nПосле таких слов прошу больше не рассчитывать на контрамарки!\nТьфу!\n- Тьфу!\n\"О чем я печалюсь, О чем я грущу,\nОдной лишь гитаре открою.\nДевчонку без адреса всюду ищу\nИ днем, и вечерней порою.\nБыть может, она далеко-далеко.\nБыть может, совсем она близко.\nНайти человека в Москве нелегко,\nКогда неизвестна прописка.\nАх, адресный стол, Вы ученый народ,\nНайдите ее по приметам.\nГлаза словно звезды, и брови вразлет,\nИ носик курносый при этом.\n\"В Москве, - отвечает ученый народ, -\nБессмысленны ваши запросы.\n100 тысяч девчонок, Чьи брови вразлет,\nИ полмиллиона курносых\".\nСо смены отправлюсь на поиски вновь,\nЛишь вечер над городом ляжет.\nНадеюсь я только, друзья, на любовь,\nОна мне дорогу подскажет\".\n- Давай подытожим.\nВ 41-й квартире никого не оказалось, в 42-й вообще не стали разговаривать.\n- По шее дали.\n- В 43-ей...\n- В 43,44,45 Джульетты твоей не было.\nНет, Паша, так будем искать - ножки протянем.\n- Я тебя не заставляю, можешь не ходить.\n- Ты не сердись.\nВспомни, что она еще говорила.\nЧтобы один ориентир настоящий был, кроме этого Николы.\n- Про деда она говорила.\n- Ну?\n- Дед у нее есть.\n- Ты представляешь, сколько в Москве дедов?\nНачнешь дедов умножать-делить - такая арифметика получится.\n- Да, про оперетту она говорила.\nЛюбит она оперетту.\n- А ты любишь оперетту?\n- Люблю.\n- Простите, вы любите оперетту?\n- Не знаю.\n- Любите, спасибо.\nВсе любят, я тоже.\n- Знаешь, дед у нее работает...\n- Что тебе дался дед?\n- Он работает в рай...\n- Спокойно.\nГлавспирт?\n- Нет.\nРай...\n- Здравотдел.\n- Нет.\n- Райсобес.\n- В райсовете вахтером.\n- Что ж ты раньше молчал?\nЭто самое главное.\nТоварищ старшина, сколько в Москве районов?\n-25.\n-25 районов - 25 райсоветов - 25 вахтеров.\nСчитай, что мы ее нашли!\nПойдем.\n- Пошли.\n- Паша!\n- А!\n- Куда ты пошел?\n- В райсовет.\n- Рабочее время кончилось.\n- Да?\nЗнаешь, давай зайдем в 41-ю квартиру...\n- Паша, видишь дворника?\n- Ну и что?\n- Он смотрит, ходят два здоровых парня по квартирам, черт-те что подумает.\nПойдем сейчас домой, а завтра с утра по райсоветам.\n- Ну пойдем.\n- У него вся соль в кнопке.\nНажал и поехал.\nДело простое.\n- Я понимаю, Семен Семеныч.\n- Начальство не надо перебивать.\nЗаходи.\nГляди сюда.\nМне надо на 5-й этаж.\nЧто я делаю?\nНажимаю 5-ю кнопку и еду.\nЗаело.\nЗаело с 5-й?\nДействуй по утвержденной мною инструкции.\nВот висит в рамочке.\nБери 7-й этаж, потом \"стоп\".\nПотом обратно 5-й.\nСтоим.\nТак?\nНе едем.\nНа этот случай все предусмотрено.\nЖми аварийную!\nЗВОНОК\nЗамыкание.\nИ на этот случай все предусмотрено.\nСлушай, надо бежать за монтером.\n- А нельзя его насовсем починить?\n- Можно.\nДа руки до всего не доходят, а у меня их только две.\nПонятно?\nЯ теперь в сторону культработы рокировался.\nОрганизовал уголок тихих игр.\nШахматы, шашки.\nА то от ребячьего футбола...\n- Все в порядке.\nЛифт работает.\n- Спасибо.\nКуда, куда вы удалились?\nВесны моей...\nЭй!\nБезобразие!\nВыньте меня отсюда!\nСейчас же!\n- Не волнуйтесь, пожалуйста.\n7- ю нажмите, 2-ю и 5-ю.\n- Ничего не получается.\nЖму, не идет.\n- Тогда так: 1-ю, аварийную, потом 5-ю.\nЗВОНОК\n- Звонок работает, а лифт - нет.\n- Почитайте, там свежие газеты лежат, а я за монтером сбегаю.\n- Я на концерт опаздываю!\n- А вы артист?\n- Ну да.\n- Тогда я для вас все сделаю!\nСемен Петрович, я так больше не могу!\n- Что за крик?\n!\nТы понимаешь, куда ворвалась?\n- У нас там человек!\nАртист!\n- Я тут комбинацию обдумываю.\n- Артист в клетке, а вы тут комбинируете!\nПеред людьми совестно!\n- В самом деле, Семен Петрович!\nЛифт у нас давно в цейтноте!\n- Не надо перегибать, товарищи жильцы.\nЛифт застревает иногда, но на короткие сроки.\nСколько сидит сегодняшний?\n-20 минут!\n- Всего 20 минут.\nНорма.\nТы, товарищ Иванова, рассуждай в своем пешечном масштабе, не строй из себя ферзя.\n- А я этого...\n- Ферзя.\n- ... из себя не строю!\nЯ душой за дело болею!\n- Тихо.\nЭто комната для тихих игр, а не дискуссий.\nПонятно?\nДелаю ход конем на С-6.\n- Я тоже сделаю ход конем.\n- Что?\n- Ты зачем на него жаловаться ходила?\n- Я сначала его по-хорошему просила починить машину, чуть не плакала.\n- Чуть не плакала.\nУ человека по твоей милости неприятности.\nИ на мне это отзывается.\n- А это вы неправильно, дедушка, говорите.\n- Как ты можешь на родного деда критику наводить?\n!\n- А если вы неправильно говорите.\nУ нас большой и замечательный дом.\nА из-за такого вот ферзя люди и страдают, застревают между этажами.\nИ какие люди!\n- Люди страдают!\nА я - не люди?\nХодил, старый дурак, в ножки кланялся!\nПросил!\nМосковскую прописку тебе отхлопотали!\nА ты?\nОтблагодарила!\nГде ты еще такую работу найдешь?\nНа улице она не валяется!\n- А вы мне работу не ищите, я сама найду.\n- Сама!\nГде?\nАртистки из тебя не получилось, лифтерши не вышло.\nНе будет из тебя толку.\nЕсли ты на шее сидишь, так хоть помалкивай.\n- Последний райсовет, последний вахтер.\nЕсли уж здесь нет!\n..\n- \"Дорогой дедушка, вам сердиться вредно.\nВернусь, когда из меня выйдет толк.\nБольшое спасибо за все.\nВаша внучка Катя\".\n- Здрасте.\n- Здрасте.\n- Поздновато.\nВы по какому делу в райсовет, молодые люди?\n- Вы Иванов?\n- Ну, Иванов.\n- А у вас внучка...\n- У вас есть внучка Катя Иванова.\n- А вы кто такие будете?\nЧто вы про нее знаете?\n- Он с ней в поезде в Москву ехал.\n- В одном купе.\n- Так это из-за тебя у ней на вокзале все время обувь расстегивалась?\n!\nНету внучки.\n- Как нету?\n!\n- Ушла.\n- Куда?\n- В неизвестном направлении.\nСемилетки кончаете, а родному деду подобные коммюнике пишете.\nЧему вас учат-то?\nУшла.\n- Дедушка, вы ее, наверное, обидели?\n- А что такое я ей сказал?\nНичего особенного я ей не говорил.\n- Разве можно?\n!\nВы ей дед!\n- Так я ей родной дед, а не попутчик!\nЯ имею полное право и поучать.\nА она ушла.\nПропадет теперь.\nХарактер-то какой!\nДа и попутчики разные бывают.\nОбидеть могут.\nДа и движение какое!\nМосква!\n- Ой!\nНельзя же так пугать людей!\nЧуть не умерла!\n- И зачем только таким права дают!\n- А вы в суд на нее подайте!\n- При чем здесь суд?\nТоварищ начальник, это не несчастный случай, а счастливая встреча.\nЯ встретила подругу.\nТо есть племянницу подруги.\nИ слегка затормозила.\nВерно, милочка?\n- Верно?\n- Можно ехать, товарищ начальник?\n- Пожалуйста.\n- Пойдем, милочка.\nСпасибо.\n- Что за безобразие!\nТак будут давить среди бела дня!\nСВИСТИТ\n- Дорогу!\n- Как вы себя чувствуете, милочка?\n- Ничего.\nУ меня локоть разбит, и я испугалась, когда вы на меня наехали.\n- Куда вас отвезти?\n- Я не знаю.\n- Вы, наверное, недавно в Москве?\n- Недавно.\n- Оно и видно.\nВы совершенно не умеете переходить улицу.\nВы работаете?\n- Да...\nНет, сейчас не работаю.\n- Имеете жилплощадь?\n- Нет.\nДа, но сейчас не имею.\n- У вас действительно все цело, милочка?\n- Все.\nА что?\n- Я вам помогу.\nСама судьба бросила вас под мои колеса.\n- А дед что сказал?\n- Он сам ничего не знает.\nОн получил от нее открытку.\n- И что?\n- Жива-здорова.\nОбратного адреса нет.\n- Бесполезно ее искать.\n- Между прочим, есть еще один вариант.\n- Какой?\n- В справочной мне сказали, что в Москве проживает 2137\nЕкатерин Ивановых.\n- И что?\n- Надо узнать адреса и обойти их всех.\nЧто смеешься?\n- Так, ничего.\nСМЕЕТСЯ\nДо самой старости будешь искать.\nБорода во, в руках палка:\n\"Дедушка, вам кого?\" - \"Мне Катю Иванову\". -\n\"Бабушка, вас дедушка спрашивает\".\n- Тебе смешно, а мне кажется, что я ее все равно найду.\nДуша ни по ком до сих пор не страдала,\nНо ты повстречалася мне.\nКуда же ты скрылась?\nКуда ж ты пропала?\nНеужто приснилась во сне?\nКуда же ты скрылась?\nКуда ж ты пропала?\nНеужто приснилась во сне?\nПо мне это, может, совсем не заметно,\nНо я уж такой человек,\nЧто если дружу, то дружу беззаветно,\nА если люблю, то навек.\nТы знаешь, мне кажется, что она на Таганке живет.\n- Почему?\n- На открытке стоит штемпель\nТаганского почтового отделения.\n- Она может жить в Малаховке, а открытку бросила на Таганке.\n- Нормальные люди где живут, там и бросают.\n- Так то нормальные.\nПускай ненароком исчезла ты где-то,\nИмей, дорогая, в виду,\nЧто я за тобою пойду на край света.\nА надо - и дальше пойду.\nЧто я за тобою пойду на край света,\nА надо - и дальше пойду.\nЗавтра на Таганку пойдем, да?\n- Пойдем.\n- Катя, со стола можно убрать.\nМасик!\nТы будешь болеть или пойдешь на работу?\n- Я, Кусенька, поболею немножко.\n- Правильно, поболей, Масик, все равно не оценят.\n- Кусенька, а ты уезжаешь?\n- Да.\nУ меня в 11 психическая гимнастика, а потом массаж нижних конечностей и гомеопат.\nКатя!\nОставьте вазу.\nЭто богемское стекво!\nЕго нельзя трогать, на него можно только молиться.\nОна становится невыносимой.\nМасик.\n- Кусик.\n- Что хочет Масик, чтобы Кусенька ему привезла?\n- Масик хочет водочки.\n- Водочки?\nУспокойся, Масик.\nПривезу, мой красавчик.\nПривезу, мой ангел.\nОставьте книги!\n- Пыль же, Раиса Пална.\n- Это не та пыль, с которой надо бороться, она неподвижная.\nМасик, присмотри за этой.\n- А что?\nОна ничего.\nВообще... старательная.\n- Масик!\nОпять?\n- Кусик.\n- Что \"Кусик\"?\nНу что \"Кусик\"?\nЧто такое домработница?\nДомработница - это внутренний враг.\n- Я знаю.\n- Хватит!\nОбожаю.\nНе так, Катя!\n- А как, Раиса Пална?\n- Надо любить свой труд.\nТруд облагораживает человека.\nЧто такое домработница?\nДомработница - это директор домашнего хозяйства.\nВы занимаете ответственный пост.\nВ общем, вот так.\nПлохо у вас получается, Катя.\nЯ скоро вернусь.\nБез меня ничего не делайте.\nТолько сходите за папиросами для Василь Никодимыча, постирайте занавески, вымойте пол в кухне, купите все на обед, перетрясите коврики, почистите ножи и вилки.\nА когда я вернусь, будете готовить обед под моим руководством.\n- Доброе утро.\n- Доброе... утро?\nВозможно.\nЧто, брат, достается?\nПтичка Божия не знала Ни заботы, ни труда.\nВ домработницы попала.\nЛа-ла-ла...\n- Отстаньте, Василь Никодимыч!\n- А что мне будет, если я отстану?\n- Пустите же!\n- А что мне будет, если я пущу?\n- Пустите!\n- Тряпка-то, негигиенично.\nАлло.\nДа, Комаринский.\nВ чем дело?\nЧто?\nИз Госконтроля?\nЯ уже еду.\nСкажешь Раисе Палне, что меня срочно вызвали в контору.\n- Вахтер Иванов слушает.\nАлло.\nЯ, девчоночка, жила, забот не знала,\nСловно ласточка, свободною была.\nНа беду свою тебя я повстречала.\nПозабыть, как ни старалась, Не смогла.\nПозабыть, как ни старалась, Не сумела.\nЗавладел моей ты девичьей судьбой.\nУж давно веселых песен я не пела.\nНеужели мы не свидимся с тобой?\nТы ушел и не воротишься обратно.\nОдинокой навсегда останусь я.\nГоды лучшие проходят безвозвратно,\nИ проходит с ними молодость моя.\nЯ, девчоночка, жила, забот не знала.\nСловно ласточка, свободною была.\nПовстречала я тебя и потеряла,\nПотеряла в тот же час, когда нашла.\nОй!\nА!\n- Картина ясная!\nКран забыла закрыть!\nОх и влетит теперь тебе.\n- Безобразие!\n- Пустите меня!\nБоже мой!\nСплошной кошмар!\nЧто тут случилось?\n- Маленькое наводнение на два этажа!\nЗа ваш счет!\n- Вы понимаете, что вы наделали?\nЗачем вы полезли в ванну?\n- Я ничего не наделала.\nЯ убираюсь, и вдруг вода.\n- Кто же, по-вашему, открыл кран?\n- Это, наверное, Василь Никодимыч, перед тем как на работу уйти.\n- Какое право вы имеете обвинять ответственного работника?\n!\nВы лжете!\nО!\nКакая дорогая вещь!\n- Я не лгу!\n- Боже мой!\nМой персидский ковер!\nМы разорены!\nВы лжете!\nВы мне за все ответите!\n- Раиса Пална, я кран не открывала!\n- А я это проверю.\nИ горе вам, если вы солгали!\n- Проверьте!\n- Алло.\n- Алло.\nАлло.\nАлло.\n- Масик, ты болвасик!\nТы забыл закрыть кран в ванной!\n- Как я мог?\n!\n- У нас теперь наводнение!\n- Куся, я...\n- По колено вода.\nТы забыл закрыть кран!\nТы понимаешь, что ты наделал?\n!\nМы совершенно разорены.\n- Дай ей по собственному желанию, и пусть идет на все четыре стороны.\n- Лгунья!\n- Я не лгунья.\nЯ правду сказала.\n- Что вы стоите?\n!\nКовер спасайте!\nВы должны в ногах у меня валяться, прощения просить.\nЕсли бы я тогда на вас не наехала, вы бы давно погибли, как швец под Полтавой.\n- Швед, а не швец.\n- Как вы смеете меня поправлять?\n!\n- А если вы неправильно говорите.\n- Дерзкая девчонка!\n- Вы не кричите на меня!\nЯ вам благодарна за наезд на меня!\nНо тот наезд я вам отработала.\nА теперь я ухожу от вас!\nИ пусть все ваше богемское стекво кто-нибудь другой обслуживает!\nА с меня хватит!\n- Прекрасно!\nСобирайте вещи и убирайтесь!\nПо обоюдоострому желанию!\n- Куда сейчас поедем?\n- Новоспасский тупик.\n- Вот так.\nНовоспасский, Николо-Спасский.\nТак доездимся...\nСадитесь, пожалуйста.\n- Спасибо.\n- Граждане, берите билеты.\n- Будьте добры, один до конца.\n- Извините, я забыла деньги.\nЯ сейчас сойду.\n- Пожалуйста, я уже взял.\n- Что вы, не нужно.\nЯ все равно сойду.\n- Я уже заплатил.\n- Хорошо.\nДайте ваш адрес, я перешлю вам деньги.\n- Зачем?\nМы сойдем вместе, и вы отдадите мне долг.\n- Пожалуйста.\n- Ты куда?\n- Не могу я такие деньги на ветер бросать.\n\"Набережная\".\nСледующая - \"Новоспасский\".\n- Серьезно, надолго?\n- Боюсь, навсегда.\n- Ну, привет.\n- Скажите, пожалуйста, Екатерина Иванова в этой квартире живет?\n- В этой.\n- А ее можно видеть?\n- Почему бы нет.\nВы проходите.\nОна на кухне сейчас.\nВы идите по коридору, но там темно, у нас лампочка перегорела.\nВы потом свернете налево.\nПотом прямо, потом опять налево.\nУвидите дверь.\n- Ясно.\n- Вы туда не входите, идите дальше, там будет еще одна дверь.\nВы тоже не входите, идите дальше.\nПопадете в маленький узенький коридорчик, из него прямо и упретесь в кухню.\nИ перед вами она.\n- Она?\n- Да.\nПонятно?\n- Я разберусь.\nСпасибо.\nМожно?\nЧерт!\nПонаставили чего-то.\nСкажите, пожалу...\n- А-а!\n- Катя, Катечка.\n- А-а-а!\n- Да что вы кричите?\n- Что?\n- Что там?\n- Бандит.\n- Где?\n- В ванной.\n- Да не может быть.\n- Не открывать!\n- Откройте!\nСлушайте, я не бандит.\n- Идите скорей в милицию.\n- Может, сами разберемся?\n- Конечно сами!\n- Ни в коем случае!\nТолько через мой труп!\n- Я не бандит, откройте.\nЯ вам все объясню.\nОй!\n- Феоктист Феоктистыч.\n- Я здесь.\n- Узнайте, сколько их там.\n- Скорей!\n- Вы здесь стерегите, а мы пойдем вооружаться.\nОткройте!\n- Если бандиты взломают дверь, бросайтесь на них и кричите.\n- Если я кинусь, потом не поднимусь.\n- Вы же мужчина.\n- Но ведь он тоже мужчина, пусть он и кидается.\n- Я не мужчина, а ответственный сьемщик!\nОставайтесь!\nА остальные за мной.\n- Слушайте, товарищ Феоктистыч, если вы мне не откроете, я взломаю дверь.\nКвартира умалишенных!\n- Молодые люди, имейте в виду, у меня в руках горячее оружие.\nГРОХОТ\n- Ну что?\nОткройте!\n- Здрасте.\n- Товарищ милиционер.\n- Где бандиты?\n- Вот здесь, в ванной.\n- Я ответственный съемщик!\n- Тихо, граждане.\n- Их там много.\n- Выходите по одному.\nВсе выходите!\n- Все - это я один.\n- Какой симпатичный!\n- Как вы сюда попали, гражданин?\n- Я пришел к Ивановой Екатерине Ивановне.\n- Я так и думала!\n- Я первый раз его вижу!\n- Вы к ней пришли?\n- Не к ней я приходил!\n- Пройдемте.\n- Правильно.\n- Я должен переодеться!\n- Руки пусть поднимет.\n- Я не виноват совсем.\n- Попрошу в машину.\n- Зачем в машину?\nЯ вам все объясню.\n- Спокойно.\n- Да не поеду я никуда!\n- Руки вверх!\n- Товарищ лейтенант, адреса.\n- Ну и что?\n- Все ясно.\n- Вы мне ответите.\n- Подождите!\nТоварищ начальник.\n- В чем дело, гражданочка?\n- Сейчас одного человека на машине увезли.\nЗа что?\n- Мало ли за что.\nМожет, он в квартиру залез.\nА может, еще что-нибудь похуже.\nТогда крепко могут дать.\n- А куда его повезли?\n- В отделение.\nА вы что?\nОн вам знакомый?\nИли, может, родственные отношения?\n- Знакомый!\n- Нет, комсомольская характеристика не нужна.\nДело ясное.\nТут пришли ваши ребята.\nСавельев?\n- Я Савельев.\n- И Дубонос.\n- Он Дубонос.\n- Савельев и Дубонос.\nРучаются.\n- Ручаемся, конечно.\n- Я тоже думаю, верить можно.\nВсего хорошего.\nТак вот, граждане, ошибочка произошла.\nВы уж его извините, пожалуйста.\n- Извините, пожалуйста.\n- Пожалуйста, это так романтично.\n- Если нужно, заходите еще.\nБудем рады.\n- Нет уж, спасибо.\n- Тем не менее бдительность остается бдительностью.\n- Бдительность тут ни при чем.\nВ следующий раз влюбляйтесь в девушек с точным адресом и с менее распространенной фамилией.\nЯсно?\n- Девушка, дождь идет.\n- Ну и пусть идет.\n- Вы бы домой шли.\n- А у меня нет дома.\n- Как нет дома?\n- А вот так.\nНет.\n- Знаете, пошли ко мне.\nЯ живу недалеко, за углом.\n- Не пойду я никуда.\n- Пошли.\nТак можно и простудиться.\nБерите чемодан.\nСкорее!\nПей чай.\nКушай как следует, не стесняйся.\n- Спасибо.\nИ так вторую чашку уже.\n- Согрелась?\n- Угу.\n- Бери сыр, колбасу.\nЕшь.\n- Я не хочу больше, наелась.\nСпасибо.\n- Катя, ты у меня пока останешься.\nСестра приедет нескоро.\nЗа это время ты успеешь устроиться на работу.\nНа.\n- Большое спасибо.\n- А что же дедушка, так о тебе ничего и не знает?\n- Нет.\n- Все-таки дед.\nЯ бы на твоем месте ему позвонила.\n- Я иногда ему звоню, только не отвечаю: если на работе, значит здоров, - а потом вешаю трубку.\n- Я сама такая, никогда не начну первая, если меня обидят.\n- Самое обидное, что он правду сказал.\nЧто я из себя представляю?\nНичего.\nЧего я добилась?\n- Ничего, утро вечера мудренее.\nСамое главное, тебе надо устроиться на работу.\nВЕСЕЛАЯ МУЗЫКА\n- Значит, и я тоже виноват, раз ты могла такое подумать.\nСпасибо.\nНо о любви я тебе никогда не говорил.\n- \"О любви не говорят, О ней все сказано\".\n- Это только в песне поется.\n- В кино ходили?\nДва раза.\n- Ну и что?\n- На танцы приглашал?\n- Приглашал.\n- Целовались.\n- Когда?\n- Как когда?\n- Один раз.\n- Три!\n- Какое это имеет значение, Клава?\n- Может, любишь?\n- Неудобно, люди же кругом смотрят.\nСердцу ведь не прикажешь.\nНе плачь, Клавочка.\nДевушка, посчитайте нам, пожалуйста.\n- А ту нашел?\n- Кого?\n- Ну, с которой в поезде познакомились.\n- Нет.\n- Вахтер Иванов слушает.\nАлло.\nКатерин, это ты?\nБрось баловаться!\nОтвечай!\nМолчишь?\nНу молчи.\nА ко мне приходил попутчик твой.\nВидный такой парень.\nЗабыл, как его имя-то.\n- Когда он приходил?\nОй, дедушка, здравствуй.\nТут что-то с трубкой.\n- Давно.\nСразу как ты сбежала.\nТы когда домой вернешься, Катерина?\n- Дедушка, из меня еще толк не вышел, как выйдет - сразу приду.\nЯ живу хорошо.\nРаботаю.\nВы за меня не беспокойтесь.\n- Сейчас же ступай домой!\nНепутевая!\nКакую моду взяла!\nОт родного деда бегать.\nКатерина, ты слышишь меня?\nЯ, признаться, проявил Глупость бесконечную:\nВсей душою полюбил Куклу бессердечную.\nДля нее любовь - забава,\nДля меня - мучение.\nПридавать не стоит, право,\nЭтому значения.\nНе со мной ли при луне Пылко целовалася?\nА теперь она во мне Разочаровалася.\nДля нее любовь - забава, Все ей шуткой кажется.\nКто ей дал такое право Надо мной куражиться?\nПозабыть смогла она Все, что мне обещано.\nВам, наверно, всем видна В бедном сердце трещина.\nДля нее любовь - забава, Для меня - страдание.\nЕй - налево, мне - направо.\nНу и до свидания.\n- Ну вот мы и пришли.\n- А завтра, Оленька, пойдем в кино.\n- Вдвоем?\n- Вдвоем, я билеты взял на последний сеанс.\n- Ой, еще и на последний.\n- А что?\n- Нет, я возьму подругу.\nА вы возьмите приятеля.\n- Ну, Оленька, кино-то вдвоем интереснее смотреть.\n- Почему интереснее?\n- Почему, почему...\nЗа что это, Оля?\n- Мы только второй раз с вами встречаемся, а вы безобразничаете.\n- Не второй, а третий.\n- Это все равно!\nВот вы какой.\nНате ваши цветы!\n- Оля!\nЯ не хотел вас обидеть.\nЯ думал, что...\n- Что думали?\nРазве вас девушки никогда не били за такое хулиганство?\n- Никогда.\nДаже наоборот.\n- Значит, вы с плохими девушками встречались.\nДо свидания.\n- Оля!\nЯ даю вам честное слово, что этого никогда больше не повторится без вашего на то разрешения.\nОля, можно я возьму возьму билеты на завтра на четверых, на последний сеанс?\nМожно, Оля?\n- Можно.\nВстретимся возле кино.\n- Хорошо.\nЯ вас провожу, а то темно на лестнице.\n- Не нужно, я сама.\nДо свидания.\n- До свидания.\n- Катя, пойдем завтра с нами в кино.\n- Я вам мешать только буду.\n- Что ты!\nОн с товарищем придет.\nПознакомишься.\n- Не нужно мне никакого товарища!\n- Катенька, я прошу.\nРади меня, пойдем.\n- Не нужно.\n- Странная ты.\nЭто же Москва!\nКак ты своего Пашу найдешь?\nТы даже фамилии его не знаешь.\n- Ну где ты?\n- Прости.\nНу как?\n- Красив.\nТолько смотри, как бы она от тебя тоже не убежала.\n- Ничего.\nМоя не бегает.\nУ нее несколько другая привычка.\nБудьте добры, зефира коробочку.\n- Митя, а может, я не пойду с тобой в кино?\n- Она подругу приведет.\n- Ну и что?\nЯ еще 2 адреса достал.\n- Первый раз в жизни я тебя попросил, и ты не можешь.\n- Я могу, но...\nВ нашем распоряжении еще 50 минут.\nДавай зайдем по одному адресу.\n- Быстро?\n- Быстро.\n- Пойдем.\n- Гражданин!\n- Спасибо большое.\n- Слушай, здесь открыто.\nПойдем.\n- Пашка, вспомни ванную.\n- Я теперь ученый.\nНичего не будет, идем.\nМожно?\n- Можно?\n- Кто-нибудь здесь есть?\n- Люди добрые, отзовитесь!\nНу вот так.\nПримерно этого я и ожидал.\n- Это хуже, чем ванная.\n- Хозяин!\nЕсть тут кто-нибудь?\nКак он смотрит.\nВидишь?\nОпоздаем.\n- Слушай, она, наверное, не любит, когда с ней громко разговаривают.\n- Давай тогда по-хорошему.\nВежливо.\nОна же ученая.\nШарик, позвольте выйти.\n- Шурик.\n- Хорошая собачка.\n- Почему они не идут?\nУже скоро начало.\n- Он, наверное, забыл.\n- Что ты!\nКак он может забыть?\n- Что же мы теперь делать будем?\n- А что, если ее зефиром подкупить?\n- Ты что, собаки взяток не берут.\n- А мы попробуем.\nЛобзик, на!\nСкушай.\nВот так.\n- Ну, теперь иди.\n- Нет, ты иди.\n- Ты кормил, ты и иди.\n- Пойдем вместе.\n- Пойдем.\nШагаем.\n- Оля, бесполезно ждать.\nПошли домой.\n- Нет.\nЯ останусь и ему все скажу.\n- Ну как хочешь.\nЯ пойду.\n- Аппетит-то какой-то нечеловеческий!\n- Собачий.\n- Что я Оле скажу?\nВедь не поверит.\n- Слушай, у меня есть план.\nКидай ей зефирину.\nПока она будет кушать, я потушу свет, и в темноте пробьемся.\n- Это идея.\n- Давай.\n- Только спокойней, Паша.\n- Лаечка.\nАй!\nЛюди!\nАй!\nДержи!\n- Оленька, я вам сейчас все объясню.\n- Я ждала вас только для того, чтобы сказать, чтобы вы не смели ни приходить ко мне, ни писать, ни звонить!\nЗабудьте мое имя и тот день, когда вы заплатили за меня в троллейбусе!\n- Да выслушайте меня, Оля!\n- Нет, нам необходимы молодые кадры, и они у нас должны быть.\n- Вы неисправимый фантазер.\n- Елизавета Тимофеевна, для художника необходима фантазия.\n- Я член худсовета.\nМне фантазия абсолютно не нужна.\nМы должны внедрять, а не фантазировать.\n- Елизавета Тимофеевна, посмотрите, какая очаровательная девушка.\n- Я ничего очаровательного не нахожу.\n- Девушка, вы с вашей внешностью могли бы найти занятие поинтереснее.\n- Вы куда-то шли, ну и идите!\n- Нет, боже сохрани!\nВы меня не так поняли.\nЯ хочу вам предложить интересную серьезную работу.\n- Демонстрируются вечерние туалеты, созданные художниками-модельерами нашего экспериментального ателье.\n- Елизавета Тимофеевна!\nЛюся заболела, и я не могу демонстрировать свою модель.\n- Что вам сказала эта симулянтка?\n- Она сказала, что у нее температура 39,2.\n- У нее температура, а у нас - художественный совет.\nИванова, станьте сюда.\nРазмер ее.\nДемонстрировать будете вы.\n- Что вы, я даже не знаю, как в таком ходить!\n- Советская девушка должна смело ходить в том, что мы внедряем.\n- Мне же говорили, что я только рабочую одежду буду показывать.\n- У меня от нее каждые 5 минут разрыв сердца делается.\nПрежде всего вы не должны срывать работу.\nВы хотите стать срывальщицей?\n- Нет, но Елизавета...\n- Ведите ее в кабину.\n- Идемте, Катя, идемте.\nЕлизавета Тимофеевна, ну как?\n- На уровне.\nДаже лучше, чем я ожидала.\n- Елизавета Тимофеевна, здесь такой вырез большой.\nМне неловко.\n- Почему вы высказываетесь, вы же не член худсовета.\nИдите немедленно.\n- Там никого...\n- Идите.\nУберите все ваши руки и не падайте с лестницы.\n- Неужели он тебя выгнал?\n- Нет.\nКричал только: \"Нет у меня внучки!\nЕсли вы еще раз придете, вызову милицию\".\nСумасшедший какой-то.\nИ она, наверное, вся в него.\n- Слушай, Митя!\n- Что?\n- Эта девушка так похожа на Катю.\n- Какая?\n- Эта в белом.\n- Докатились.\nВидения начинаются.\n- Она так похожа, только ростом чуть выше.\n- Слушай, Паша, брось ты эти поиски.\nНе бросишь - плохо кончишь.\nЧто она тебе далась?\nТы посмотри, столько девчат ходит.\n- Катя!\nЭто же моя модель!\n- Иванова!\nВы взбесились?\n- Куда она?\nПочему сбежала?\n- Окружайте!\nДогоняйте!\nКРИКИ ЛЮДЕЙ\n- Катя, куда вы?\n!\n- Остановите ее!\n- Платье держите!\n- Это невозможно!\nЯ за молодыми кадрами должна гоняться по всем улицам!\n- Понимаешь, я его увидела и побежала, удержаться не могла!\nА потом по собственному желанию.\n- Что, неужели выгнали?\n- Что ты!\nЯ сама.\nОни меня поругали немножко, но ничего такого.\nЗнаешь, Оля, не по душе мне там, не нравится.\n- Что же ты теперь будешь делать?\n- Не знаю.\nУехать, что ли...\n- Ну вот, новость какая.\nТы знаешь, я могу тебя устроить.\nУ нас на работе нужна курьерша.\nЯ завтра поговорю.\n- Оленька, спасибо.\nОпять ты меня выручаешь.\n- Ну, как настроение?\n- Хорошее.\n- Смотри, чтобы все было аккуратно.\nЧай пожиже, заварки не хватит.\n- Ладно.\n- Попьют сотрудники в перерыв чай и снова за работу.\n- Оленька, а что это вы все пишете?\n- Пишем разные бумаги и считаем разные цифры.\n- А зачем все эти бумаги?\n- Смешная ты.\nНад нашей конторой есть еще одна контора, которая главнее нашей.\nОна присылает нам свои бумаги, мы их переписываем и посылаем в контору, которая ниже нашей.\n- Не понимаю.\nПочему контора, которая выше нашей, не может бумаги прямо послать в ту контору, которая ниже?\n- Вот странная.\nЧай неси.\n- Семен Семенович, возьмите на меня чай, я сейчас.\n- Спасибо.\n- Иванова, начальник очень занят.\nПоставьте стакан на стол и тихонечко уходите.\nПонимаете?\n- Понимаю.\n- Таким образом, в целом...\nНаписали?\n- Написала.\n- ... своевременность оборачиваемости поступающих директив своевременна и происходит точно в свое время.\n- Иванова.\nЧто с вами?\n- Ничего.\n- Возьмите пакет и поезжайте на стройку.\n- На стройку?\n- Послушайте, девушка, вы тут всех знаете?\n- Всех и все, а что?\n- У вас тут один товарищ работает.\n- У нас не один товарищ работает, у нас их сотни!\nА зачем он тебе?\n- Неважно.\n- Ты учти, мы своих на сторону не отдаем.\nТы пакеты разносишь?\n- Пакеты!\n- Ну и волоки свой бюрократизм!\nНе прохлаждайся!\nКому пакет?\n- Прорабу.\nГде он?\n- Вон туда иди!\nСтой!\n- Ушиблась, дочка?\n- Нет, ничего.\n- Как же тебя так угораздило?\n- А мне прораба нужно.\n- Я прораб.\n- Ой, наконец-то!\nУ меня для вас пакет.\nЛично.\nСрочно.\n- О!\nЯ эти новости неделю назад знал.\nСидите там, директивы переписываете.\nА с арматурой опять подвели!\nДавай, сердешная...\nкнижку твою, распишусь.\nИ кому нужна эта ваша контора?\n- Наша контора - необходимое связующее звено в сложной цепи взаимоотношений между главком и стройплощадками.\nВ свое время мы своевременно сигнализировали.\nИ я считаю своевременным поставить вопрос о несвоевременности сжатия нашего аппарата.\nНас надо не сжимать, нас надо расширять.\n- Вы не согласны, товарищ Комаринский, что ваша контора превратилась в лишнюю инстанцию?\n- Категорически не согласен.\n- Это как же вы говорите - не лишняя?\nНас на стройке только \"лишними\"\nи ругают. \"Лишняя инстанция\", \"лишняя контора\".\nСо стыда можно сгореть.\nА вы знаете, сколько эта лишняя инстанция казенного чая выпивает?\nРублей на 500 в месяц.\n- Демагогия.\nБезответственное выступление.\n- Оля!\n- Здравствуйте, Митя.\nВы извините, я в таком виде.\nНаше учреждение закрыли.\n- Здравствуйте, Оля.\n- Здравствуйте.\n- Значит, вы теперь тоже рабочий класс.\n- Я случайно на вашу стройку попала.\n- Это же великолепно, что вы попали именно на нашу стройку!\nХотите к нам в бригаду подсобницей?\nМогу похлопотать.\n- Куда?\n- К монтажникам.\nНаверх.\nРабота нетрудная.\nИнструмент принести, то да се.\nА красотища!\nСтрижи летают.\nБудете у нас королевой воздуха.\n- Спасибо.\nА вы королем там будете?\n- Нет, заместителем.\nСейчас!\nА я эти дни только о вас и думаю.\n- Все время?\n- Все время.\nПять раз в день мимо вашего дома хожу.\n- Почему же не зашли?\n- А как же я зайду, если вы мне запретили ходить к вам, звонить и даже писать?\n- Мало ли чего я наговорила.\n- А я боялся.\nПодожди минутку!\n- Это еще что такое?\n- Иван Романович, это шефство над новенькими.\n- Так будем шефствовать - за 10 лет дом не построим.\n- Виноват.\n- Ну, марш на место!\nЧерез 5 минут отправляется поезд номер 72\n\"Москва-Иркутск\".\n- Вот твой вагон!\nТы, Катерина, не забывай, что у тебя дед существует.\n- Дед, не беспокойся, я писать буду.\n- Как приедешь, сразу телеграмму дай.\nС точным адресом, а то ведь пропадешь опять.\nНа вот тебе.\nПисьма от тебя не дождешься, а открыточку нацарапай:\nжива, мол,здорова, чего и вам желаю.\nТут 50 штук, про запас.\n- Катенька, может, останешься?\nБудем опять с тобой вместе работать.\n- Нет, решила так решила.\n- А ты знаешь, что мне Митя сказал?\nОни меня к себе в бригаду возьмут.\nБуду у них королевой воздуха.\n- Нет, королева - это не профессия.\nТы в штукатуры иди, это дело.\nЧто ты оглядываешься?\n- Я попросила Митю сюда прийти, а его все нет.\nБудет ему сегодня от меня.\n- Опоздаешь!\nТы уж, Катерина...\nЯ для тебя от всей души.\n- Что вы, дедушка!\n- Ладно уж!\nПро адрес не забудь, непутевая.\n- Не забуду.\nВы себя берегите.\nОленька, спасибо тебе за все.\n- Катенька, не забывай меня, пиши.\n- Опоздали!\nИ все из-за тебя!\n\"Еще по одному адресочку зайдем!\"\nИщешь прошлогодний снег!\n- В последний раз.\nМитя!\nОна!\n- Кто?\n- Катя!\nКатя!\nКатя!\n- Паша!\n- Я вас по всей Москве искал.\n- А я думала, вы меня забыли.\n- Я всю Москву перевернул, а вас нет.\n- Гражданин, сойдите с подножки.\n- Одну минуточку...\n- Гражданин, сойдите!\n- Я вас очень прошу.\n- Гражданин, не нарушайте.\n- Я эту девушку люблю!\n- Любить можно, нарушать нельзя!\n- Ну и не мешайте!\n- Да.\n- Ты куда едешь, Катя?\n- Далеко.\nНа работу.\n- Как же я?\nОставайся!\n- Мне же ехать надо!\n- Зачем?\n- Что же мне делать?\n- Мы вместе поедем.\n- Решайте, поезд идет.\n- Поезд и правда идет.\nГде твои вещи?\nПойдем, слышишь?\nКатя, прыгай.\n- Я боюсь.\nА чемодан!\nОй, Пашенька, неправильно я сделала, мне же ехать надо.\n- Что, опоздали, молодые люди?\n- Нет, наоборот, успели.\n- Пойдем?\n- Пойдем.\nДуняшка!\nСухари зашила?\nСало солью пересыпала?\nВы , батя, свое дело управляйте, а я братушке так уложу, что до Черкасского не ворохнется.\n— Что он, ест, что ли?\n— Не, не ест.\nНу и не надо, а то он непоеный.\nПетр, пробей.\nГришка его к Дону сводит.\nГригорий, веди коня.\nЧертяка бешеный!\nЧудок конем не стоптал.\nСтепан твой собрался?\n— А тебе чего?\n— Спросить что ли, нельзя?\nСобрался.\nНу?\nОстаешься, стал быть жалмеркой?\nСтал быть так.\nНебось будешь скучать по мужу?\nА то как же.\nТы вот женись опосля узнаешь скучают ай нет по дружечке.\nА ить иные бабы ажник рады , как мужей проводют.\nНаша Дарья без Петра толстеть зачинает.\nМуж — он не уж, а тянет кровя.\nТебя-то скоро обженим?\nНе знаю.\nКак батя.\nДолжно, посля службы .\n— Молодой ишо, не женись — А что?\nСухота одна.\nОхоты нету жениться.\nКакая-нибудь и так полюбит.\n— Пусти, Гришка.\n— Не пущу.\nНе дури, мне мужа сбирать\nПусти, дьявол, вон люди.\nУвидют, что подумают?\nНу, с Богом.\nЧас добрый.\nПрипозднились Мирон Григорьевич!\nЧто нашел, Гришуха?\nДай, закопаю.\n— Ты чего?\n— Да я напиться.\n— Волосы у тебя...\n— Чего?\nДурнопьяном пахнут.\nЗнаешь цветком зтаким.\n— Пусти, Гришка.\n— Помалкивай.\nПусти, а то зашумлю.\n— Погоди, Ксюш.\n— Дядя Пантелей!\nТы чего, Гришка, такой ненастный?\nК дождю, видать поясницу ломит.\nОн быков стеречь не хочет, ей-богу.\nГляди, траву чужую быками не потрави.\nГриша...\nГришенька...\nОтец услышит.\nНе услышит.\nПусти, чего уж теперь ..\nСама пойду.\nПантелей ПрокоФьевич, здорово ночевали.\n— Доброго здоровья .\n— Здрасьте.\nТы что ж зто, ПрокоФьич, примолчался-то?\nСына задумал женить а сам ни гу-гу.\n— Какого сына?\n— Григорий ведь не женатый.\nПокеда ишо не собирался женить\nА я слыхал, будто в снохи берешь Степана Астахова Аксинью .\nОт живого мужа...\nДа ты что ж, Платоныч, навроде смеешься?\nДа уж какой смех.\nНаслышан от людей.\nЗй, погоди-ка!\nЧего еще?\nТы что ж зто, а?\nЕще мужьин след не остыл, а ты уж хвост набок?\nИшь ты , курва, мало тебя били!\nЧтоб ноги твоей с нонешнего дня на моем базу не ступало!\nЯ твоему Степану пропишу...\nА ты что мне, свекор?\nА?\nСвекор?\nТы что меня учишь Иди свою толстозадую поучи.\nДа я тебя, дьявола хромого, культяпого, в упор не вижу!\n— Иди отсель не спужаешь — Погоди ты , дура!\n— Нечего годить тебе не родить — Вот черт-баба!\nПиши хучь наказному атаману, а Гришка мой!\nА захочу, с костями съем и ответ держать не буду!\nПиши!\nЗа всю жизнь за горью отлюблю!\nА там хучь убейте!\nЗа что?\nНе пакости соседу!\nНе срами отца!\nНе таскайся, кобелина!\nДраться не дам!\nНа сходе запорю!\nАх ты , чертово семя!\nНа МарФутке-дурочке женю!\nЯ те выхолощу!\nЖенить сукиного сына!\nГриша, колосочек мой...\nОсталось девять дён...\nИшо не скоро.\nСтепан придет, чего будем делать\nНебось бросишь меня?\nПобоишься?\nМне его что бояться, ты — жена, ты и боись\nСтепан придет — зто не штука.\nБатя вот меня женить собирается.\nКого усватали?\nТолько собирается ехать\nМаманя гутарила, кубыть к Коршуновым, за ихнюю Наталью .\nНаталья ...\nНаталья — девка красивая...\nДюже красивая.\nНадысь видала ее в церкви.\nНарядная была.\nМне ее красоту за голенищу не класть\nЯ бы на тебе женился.\nГришка!\nНа что ты привязался ко мне, проклятый?\nГришка!\nДушу ты мою вынаешь\n— Гриша!\n— Надумала что?\nДружечка моя...\nродимый... давай уйдем.\nКинем все и уйдем.\nИ мужа, и все кину, лишь бы ты был.\nНа шахты уйдем, далеко.\nНа Парамоновских рудниках у меня дядя служит, он подсобит.\nГриша!\nХучь слово урони.\nДура ты , Аксинья , дура.\nНу куды я уйду от хозяйства?\nОпять же мне и на службу на знтот год.\nНет, не годится дело.\nНикуды я от земли не тронусь\nНу, ноне ей Степан даст!\n— Гля, Степан-то притемнился.\n— Да будет брехать-то!\nЗдоров, батя.\nНу, Аксинья ...\nНе таюсь — грех на мне.\nБей, Степан!\nИшо не стряпалась\nНет ишо.\nСобери-ка что-нибудь пожрать\nРасскажи, милаха.\nРасскажи, как мужа ждала, мужнину честь берегла?\nА ну, разойдись Разойдись\nА то зараз к атаману отправлю!\nВы что, черти?\nПойдем, Гришка.\nМы его в однорядь подсидим.\nНешто и ты не попадешься!\nА ну, отвяжись Зараз к атаману отправлю!\nПримай гостей, Мирон Григорич.\nГостям завсегда рады .\nМарья , дай людям на что присесть\nДельце к вам имеем.\nУ вас — девка, невеста, у нас — жених.\nНе снюхаемся ли?\nЗдорово ночевали.\nСлава Богу.\nПро то и речь что выдавать кубыть и рано.\nОно само собой — дело хозяйское.\nЖених, он навроде старца, где хошь просит.\nА уж раз вы , к примеру, ищете купецкого звания жениха, аль ишо что, зто совсем уж другое, звиняйте.\nЧто уж там, родимые мои!\nТеперича самое светок лазоревый, что ж держать — аль мало перестарков в девках кулюкают?\nРаз дело такое зашло, значится надо порешить его порядком и дитю своему на счастье , по доброму слову.\nАль мы детям своим супротивники и лиходеи?\nНаша не засидится.\nДа ведь придется, рано ль поздно ль расставаться.\nКличь дочерю, Мирон Григорьевич, поглядим.\nНаталья .\nНаталья !\nНатаха!\nПройди.\nИшь засовестилась\nНу, ступай.\nАксютка!\nСюда иди.\nПришла.\nВ чем зто у тебя щека?\n— Должно, с подсолнуха.\n— Ишо вот тут, возле глаза.\nМочи нету...\nПропала я, Гриша.\nЧего ж он?\nНе знаешь чего?\nВот.\nБьет каждый день Кровь высасывает.\nИ ты тоже хорош.\nНапаскудил, как кобель и в сторону.\nВсе вы ... — Виноватого ищешь — Аль ты не виноват?\nКсюша, ну, погоди...\nНу, сбрехнул словцо, ну, не обижайся.\nЧего кричишь\nЯ не навязываться пришла, не боись\nЗначится, кончилась наша любовь\nКак зто кончилась\nКак же зто?\nВот что, Аксинья ...\nЯ надумал...\nПлаток сними.\nКак бы не увидали.\nНадумал я...\nНадо как-то дальше проживать\nНадумал я, давай с тобой прикончим...\nЧего?\nПрикончим зту историю, а?\nАксинья !\nСыр каравай принимайте, молодых одаряйте.\nДарим невесте шаль\nДаруем бычка.\nГорько!\nОгонь по зебрам пошел!\nА баранинки хочешь\nТы меня баранинкой не угощай.\nЯ, может, стерлядку ем.\nСтерлядку?\nГде она у нас?\nКомандует есаул Терсинцев...\nКакого?\nВзвод!\nВ атаку полным наметом!\nПики к бою, шашки вон!\nМолодцы , баклановцы !\n..\nЗдорово, Гришенька!\nЗдорово.\nКак живешь-любишься с молодой женой?\nНичего, живем.\nСлышь баба, Наташку не буди.\nОна и так до свету встает.\nСбираются с Гришкой пахать\nДарью стегай.\nС ленцой баба, спорченная.\nРумянится да брови чернит, мать ее суку.\nНехай хучь первый годок покохается.\nГришка!\nГригорий!\nГриша!\nБатя кличет.\nДарья !\nПоди сюды !\nЗнти два улеша вспаши, что за толокой у Красного лога.\n— Петро не подсобит?\n— Они с Дашкой на мельницу поедут.\nПодсоби.\nПроспал, а теперь лезешь Отойди, хохол, а то клюну!\nЯ тебе зоб вырву!\nСтойте, братцы !\nКазаков бьют!\nСтойте, братцы !\nБратцы , стойте!\nБабы , а вы что глядите?\nОни же всех мужиков побьют!\nЗапалю!\nУходь со двора!\nЗапалю!\nУходь со двора!\nНа коней, казаки!\nДогнать Дале гребня не ускачут!\nТы кто такой?\nОткель сорвался?\nСтойте, станичники!\nКуцый кобель тебе станичник!\nМужик!\nЛапоть дровяной!\nДай ему по гляделкам, Яша.\nПогоди по гляделкам.\nВ чем дело?\n— Хохлов били.\n— За что?\nЗа очередь Не залазь наперед.\nВложили им память\nХохлы , они огромадно сердитые.\n— А ты кто?\n— Я-то казак.\nА ты не из цыганьев?\nНет, я не из цыганьев.\nМы с тобой, пожалуй, оба русские.\nБрешешь\nКазаки от русских произошли.\nА я тебе говорю, казаки от казаков ведутся.\nВ старину от помещиков бежали крепостные и селились на Дону.\nИх прозвали казаками.\nИди-ка ты , мил человек, своим путем.\nИшь поганка, в мужиков захотел переделать\nКто зто такой, АФанасий?\nПриехал тут какой-то, просил довезть Кто его знает?\nМоя Фамилия Штокман.\nСам я слесарь\nБуду жить в хуторе Татарском.\nМогу и по столярному делу.\nТак что еще увидимся.\nПоехали, хозяин, время-то идет.\nЧужая ты какая-то.\nКак знтот месяц.\nНе холодишь не греешь\nНе люблю я тебя, Наталья .\nТы уж на меня не гневайся.\nХоть и жалко тебя, а нету на сердце ничего.\nПусто.\nВот как зараз в степе.\nНаталья , вот, сбирается уходить Зто через чего?\n— Не знаю, через чего.\n— А я знаю!\nА я знаю через чего!\nЯ ее не сужу, хоть и страмно и перед Богом грех.\nНе на ней вина, а вот на знтом сукином сыне.\n— Кому я виноватый?\n— А ты не знаешь чертяка?\nНе знаю.\nЯ тебе вот что скажу:\nне будешь с Наташкой жить — иди с базу куда глаза глядят.\nВот тебе мой сказ!\nИди куда глаза глядят!\nЯ вам, батя, не во гнев скажу.\nНе я женился, а вы меня женили.\nА за Натальей я не тянусь Хочет, нехай идет к отцу.\n— Иди и ты отсель — И уйду!\nИ уходи к чертовой матери!\n— Уйду!\n— Куда ты пойдешь\nНехай идет, кобелина поблудный!\nНехай, будь он проклят!\nГриша!\nГриша, вернись\nПропади ты , разнелюбая!\nГришенька!\nДа уж хорошо ли, плохо ли, да так сложилась история.\nДа разве ж сами виноваты ?\nДо такой страмы довели казаков.\n— Молчи уж, мужик.\n— А мужики аль не люди?\nМужики-то?\nЯ как в Петербурге служил, так разных видал.\nВот был такой случай.\nПерепало как-то верхи нести караул.\nЕдем, а с угла студенты вывернулись И видимо их невидимо.\nКак увидели нас, да \" Га-а-а!\nВы чего, казаки, разъезжаете?\"\nЯ гутарю: \" Караул несем, а ты поводья не хватай!\" — и за шашку.\nА тут один носатый вынает из портмоне десятку и гутарит:\n\"Выпейте, казаки, за здоровье моего покойного папаши\" .\nДает нам десятку и вынает из сумки портрет.\n\"А зто, — говорит, — папашина личность возьмите на память\" .\nНу, мы взяли.\nА студенты отошли и опять \" Га-а-а\" .\nС тем и отправились по Невскому прошпекту.\n— Здравствуйте.\n— Вот еще один казак явился.\nТы чего, Гришка?\n— Ты отсюда скоро?\n— Скоро.\n— Я у тебя заночую.\n— Со своими поругался?\nСтало быть отправились по Невскому прошпекту.\nНу?\nНу, сменили нас.\nМы вахмистру гутарим:\n\"Заработали мы 1 0 целковых.\nДолжны пропить их за упокой души знтого деда\" , — и показываем портрет.\nЗтот портрет я взял на совесть для памяти над кроватью повесил.\nВижу, борода седая, собою подходимый человек, вроде из купцов.\nА сотник доглядел и спрашивает:\n\"Откель взял зтот портрет, такой-сякой?\"\n\"Так и так\" , — гутарю.\nА он и зачал меня костерить и по скуле, да ишо, стал быть раз.\n\"Да знаешь орет, что - зто атаман ихний Карла...\"\n— Запамятовал прозвище.\n— Карл Маркс.\nВо!\nОн самый.\nПодвел под монастырь мать его в пенек!\nА ить к нам сам цесаревич Алексей с наставниками забегает.\nА если бы доглядели?\nЧто б было?\nА ты все мужиков хвалишь Видал, как его подковали-то?\nЗато десятку пропили.\nХучь за Карлу бородатого, а пили.\nЦелых три дни пили!\nДа, за него следует выпить\nА чего ж он навершил такого доброго?\nА зто я... обязательно...\nОбязательно расскажу.\nТолько сейчас поздно уже.\nДо свидания, Осип Давыдович.\nЯ к тебе только на сутки, двое.\n— А что, домой не вернешься?\n— Нет.\nА как же жить надумал?\nКак жить А как люди живут.\nЛюди живут по-разному.\nЗаходи.\nСадись вечерять будем.\nДа, Гриша...\nЛюди по-разному живут.\nТяжело будет без привычки-то.\nНичего, привыкну.\nКуда ж надумал?\nЗавтра к Сергею Платоновичу схожу.\nА не то к генералу Листницкому в имение.\nЗто что ж, батрачить будешь\nЗх, Гриша...\nНу какой из тебя батрак?\nНа зтом деле шибко не разживешься.\nСмотри, как бы гордость у тебя не взыграла.\n— Ты чего?\n— Гришка!\nСказал, чтобы как затемнеет, вышла к гамазину.\nТише, Машутка.\nМожет, ишо чего велел сказать\nОй, гутарил, чтобы все свое взяла, что можешь\nГосподи...\nДа как же я?\nИ так-то скорочко...\nДа что ж я?\nНу, я пойду.\nПоди, скажи ему, что я скоро.\n— Чего она приходила?\n— Кто?\nМашка Кошевых.\nЗто она по своему делу.\nПросила юбку ей скроить\nА ты , никак, собираешься куда?\nК Аникушке пойду, посижу трошки.\nИ когда ты находишься?\nЧто ни ночь то им игра.\nНо, будя, слыхали.\nТы ложись не жди.\nНу-но.\nГосподи...\nОй, Гриша...\nПогоди чуток.\nЧего годить Надо поспешать\n— Ой, погоди, Гриша...\n— Ты чего?\nТак, живот чтой-то.\nТяжелое нады подняла.\nНу, все, пойдем.\nТы и не спросишь куды веду.\nМожет, до первого яра, а там спихну?\nВсе одно уж мне.\nДоигралась\nЧего зто дверь-то настежь\nКак живешь Аксиньюшка?\nБлагодарствую.\n— Здорово.\n— Здорово.\n— Ты чего, Гетько?\n— От Натальи .\nГригорий Пантелеевич!\nПропиши мне, как мне жить и навовсе или нет потеряна моя жизня?\nЖдала я, что ты возвернешься, но я разлучать вас не хочу.\nПожалей напоследок и пропиши.\nУзнаю — буду одно думать а то я стою посередь дороги.\nТы , Гриша, не серчай на меня, ради Христа.\nНаталья .\n— Чего он сидел?\n— А я почем знаю?\nПришел, сел вот так-то.\nГлянь Гриша.\nА коленка вострая-превострая.\n— Примолвила, что ль его?\n— Да нужен он мне, Господи!\nТо-то, гляди, а то я его в одноряд спихну с крыльца.\nЯ тебя оставлять дома боле не буду.\nСо мной будешь ездить\nДа Гриша...\nТы чего?\nЧто ж ты молчала раньше?\nДа я робела, думала, бросишь\nСкоро?\nНа Спасы , думается.\nСтепанов?\nТвой.\nНу а где же?\n..\nГригорий!\nНаелся, пустяковая твоя душа?\nПоди проспись\nОбедня отошла.\nНе давай баловать Не давай баловать\nПрощай, генерал!\nСмотри не зашибись\nУ Натахи-то Коршуновой, гутарют, кила.\nБудет брехать-то.\n— Через зто ее и муж бросил.\n— Не, она со свекром спуталась\nСтало быть через знто Гришка и убег с дому.\nА то через чего ж?\n— Чего?\n— Чего... говори да откусывай.\nСкучаешь по Гришке-то?\n— А тебе что?\n— Тоску твою разогнать хочу.\n— Уйди, Митька.\n— Не мордуйся, Наташка.\n— Я батю зашумлю.\n— Тю, сдурела!\nУйди, проклятый!\nКак тебя земля только держит!\nА вот так, держит, не гнется.\nНу что?\nДорога невозможная, моя донюшка.\nТака тряска, что Гетько уси пзчонки поотбывав!\nНа, держи.\n\"Живи одна.\nМелехов Григорий\" .\nЗдорово живете.\nЗдравствуй, батя.\nСобираешься на службу?\nА то как же?\n— Раздевайся, батя, назяб небось — Ничего, терпится.\n— Самовар поставим.\n— Спасибочка.\nПривез тебе справу:\nдва шинеля, седло, шаровары .\nВозьми.\nВсё там.\nВыступать когда?\nДругой день Рождества.\n— Казак?\n— Девка.\nУж такая писаная, вся в Гришу.\nНаших кровей...\nИшь ты !\nТы что ж, батя, едешь\nПоспешаю пораньше возвернуться.\nЗначится, не думаешь с женой жить\nДавнишний сказ.\nОтгутарили.\n— Не думаешь стал быть — Стал-быть так.\nА Боr?\nТы гляди...\nне чужого вскармливаешь\nЧей бы ни был, а дите не брошу.\nНаталья спортилась с того разу.\nКак она?\nЖилу нужную перерезала, шею кособочит.\nНаталью мы возьмем.\nНе хочет баба жить у своих.\nНадысь видал ее, кликал, чтоб к нам шла.\nНа хуторе Ольшанском...\nГриша, стучат.\nЗа жену не беспокойся.\nСлужи исправно.\nДед твой молодецкий был казак.\nЧтоб и ты ...\nЧтоб и ты держал себя достойно своего деда и отца.\nВедь зто отец на императорском смотру в 83-м году получил первый приз за джигитовку?\nТак точно!\nТы , ПрокоФьич, у развилки шибко не гони, а то я вчера аккурат там перекинулся.\n— Ну вот, успел уже...\n— Долго ли ему.\n— Садись в сани.\n— Не, я верхом.\nТрогай!\nПогоди, Гриша!\nЧто-то хотела сказать ..\nНу, прощай.\nДите гляди.\nПоеду, а то батя вон где уж.\nПогоди, родимый...\n— Счастливо, казак!\n— Счастливо, дед.\n— Дай чего подсоблю.\n— Ничего, я сама.\nНаташа, светочка, чего рассказать хочу...\nРасскажи.\nМишка Кошевой вчера целый вечер простоял со мной возля гамазинов.\n— Чего ж скраснелась — Ничуть\nГлянь в зеркало — чисто полымя.\nТы ж пристыдила.\nРассказывай, я не буду.\n\"Ты , — гутарит, — как цветок лазоревый\" .\nА я: \" Не бреши!\" А он божится.\nЗто кто ж такие?\n— Кто их знает.\n— К кому ж?\nПрошу встать Вы арестованы .\nВ чем дело?\n— Вы занимаете 2 комнаты ?\n— Да.\nМы произведем у вас обыск.\nПозвольте ключ от зтого сундука.\nЧему я обязан, господин следователь\nОб зтом мы еще успеем побеседовать\nПожалуйста.\nПонятой, ну-ка!\n— Прошу вас.\n— Нет, зтот сорт я не курю.\nПрошу вас начинать допрос.\nВы сюда прибыли по заданию своей организации?\nО чем речь\nС какого времени вы состоите членом РСДРП?\nВот справка из Ростова, подтверждающая вашу принадлежность к означенной партии\nс 1 907 года.\nПолучали ли вы какие-либо директивы из Ростова?\nНет.\nЧитали рабочим, посещавшим вас, вот зту книжонку?\nМы читали стихи.\nСтихи...\nВы читали запрещенные законом книги.\nОся!\nОсип Давыдович!\nПетро!\nПерегодим жару.\nОй, Господи, искупаться бы .\nВерхи какой-то бегет.\n— Шибко.\n— Ты гля, как пылит.\n— Так и коня запалить можно.\n— Наметом идет.\nСполох!\nСполох!\n— Никак, война?\n— Господи!\nЦыть ты !\nГригория встретишь скажи, так мол, и так...\nВойна, значит...\nПо вагонам!\n— Едете?\n— Садись дед, с нами!\nМилая ты моя говядинка!\n— Братушки, вы куды ж зто?\n— К куме на крестины .\nМолчать\nМелехов, ты не робеешь а?\nА чего робеть-то?\nКак же, может, ныне в бой пойдем.\nИ пущай.\nА я вот робею.\nВсю ночь не спал.\nСтреляют.\nКак ребята палкой по частоколу.\nМолчи ты , балабон.\nГде зтот капитан?\nВам приказано было еще вчера закончить работу.\nМолчать\nО подвозе строительного материала надо было позаботиться раньше!\nМолчать\nКак я теперь проеду на ту сторону?\nЯ вас спрашиваю, как я проеду на ту сторону?\n— Ну что вам?\n— Какие будут приказания?\nДа ступайте, ступайте.\nЧто зто?\nКто приказал?\nПики к бою, шашки вон!\nВ атаку рысью марш-марш!\nЗй, ты , чего встал?\nЯ к тебе, Аксинья .\nТы зачем пришла?\nМне бы напиться...\nПей.\nТы отбила у меня мужа...\nОтдай мне Григория.\nТы жизнь мою сломила.\nВидишь я какая?\nМужа тебе?\nМужа тебе?\nАх, ты , гадюка подколодная!\nТы у кого просишь\nДа ты первая отняла у меня Гришку!\nТы , а не я.\nТы знала, что он жил со мной, зачем замуж шла?\nЯ вернула свое, он мой.\nУ меня дите от него, а ты что?\nТы отца у дитя хочешь взять\nТы своего мужа бросила...\nНе шуми так...\nКроме Гришки, нет у меня мужа.\nНикого нету во всем свете!\nТы -то нужна ему?\nГлянь шею-то у тебя покривило!\nТы , думаешь он здоровую бросил, а на калеку позавидует?\nНе видать тебе Гришки!\nВот мой сказ!\nСтупай!\nТы думаешь я надеялась что выпрошу?\n— А зачем шла?\n— Тоска меня пихнула.\nГосподи... прости...\nПожалей...\nНе отнимай, Господи!\n..\nЗдравствуйте, барин.\nОй, слава Богу...\nслава Богу.\nПомянем.\nЦарство небесное дитю.\nДуша ангельская преставилась\nТы бы , Ксюша, пошла, поглядела.\nМожет, чего снадобится.\nМолодой барин приехал.\nАлексеев?\nНе может быть Не поверю.\nИ тем не менее.\nВерховный в данном случае не прав.\nВот тебе аналогичный пример из русско-японской кампании...\nКушать подано.\n— На днях ребенка похоронила.\n— Да что ты ?\nТак вот, я говорю аналогичный случай их русско-японской кампании.\nКуропаткин как-то настаивал, требовал, а жизнь показала свое.\nЗдравствуй, Аксюша.\nЗдравствуйте.\n— Ктой-то?\n— Зто я.\nСейчас я оденусь\nНичего, я на минуту.\nУ тебя умерла дочушка...\nУмерла.\nТы очень изменилась\nЕще бы , я понимаю, что значит потерять ребенка.\nТолько ты напрасно изводишь себя.\nК жизни ее не вернешь\nА ты еще молода, ты еще будешь иметь детей.\nНе надо так.\nВозьми себя в руки, смирись\nСмирись\nВ конце концов, не все потеряно со смертью ребенка.\nПодумай, вся жизнь впереди!\nТы шо, Гриша, вертися?\nТак ты говоришь что на потребу богатым нас гонят на смерть\nА как же народ?\nАль он не понимает?\nНеужели нет таких, который вышел бы и сказал:\n\"Братцы , так вот за что мы гибнем в кровях\" .\nЯк це так, вышел?\nТы що, сказывся?\nВышел...\nПобачив бы я, як ты вышел.\nМы ось с тобой шепчемся, а скажи ризко — и пид пулю.\nЧерная глухота у народа.\nВойна его разбудит.\nИз хмары писля грому дощ буде...\nЧего ж делать Говори, гад!\nТы мне сердце разворошил.\nА що тоби сердце каже?\nНе понимаю.\nХто мзнз с кручи пихае, того я пихну.\nТрзба у того загнать пулю, кто посылае людей у пзкло.\nИ ты знай, Гриша, собирается взлика хмаря, вона усз снесз!\nЧто ж, все повернуть вверх ногами?\nВласть трзба скынуть як грязные портки.\nТрзба с панив овчину драть трзба им губы рвать бо гарно воны народ помордувалы .\nВ палату.\nБыстро все проверьте.\nНа свое место.\nУложите, уложите.\nМилости просим, ваше императорское высочество.\nПожалуйста, сюда, ваше императорское высочество.\nПрошу вас.\nДонской казак, георгиевский кавалер.\nКакой станицы ?\nВёшенской, ваше императорское высочество.\nЗа что имеешь крест?\nЯ бы ... мне бы по надобности сходить ..\nПо надобности, ваше императорское высочество.\nПо малой нужде.\nПожалуйста, в следующую палату, ваше императорское высочество.\n— Ты , каналья !\n..\n— Я тебе не каналья , гад!\nНа Фронте вас нету!\nОтправьте меня домой!\nОтправим!\nУбирайся к черту!\nСтоять\nПризнал, признал...\nДед Сашка!\nСпишь\nОтцы -святители!\nГришка!\nОткуда тебя холера взяла?\nВот так гость\nНу, садись покурим.\nНу, дидко, живешь Землю топчешь\nТопчу помаленечку.\nЯ - как ружье кремневое, мне износу не будет.\nАксинья как?\nЧто ж Аксинья ... слава Богу.\n— Танюшку где похоронили?\n— В саду под тополем.\nТак... — Ну, рассказывай.\n— Кашель меня замучил...\nВсе живы -здоровы .\nПан вон попивает.\n— Аксинья как?\n— Она в горничных теперь\nЗнаю.\nТы бы покурить свернул.\nУ меня табачок первый сорт.\nТы говори, а то я уйду.\nЯ же чую, что ты слово какое-то, как камень за пазухой, держишь\n— Бей, что ли.\n— И вдарю!\n— Бей!\n— Вдарю.\nСилов я не набрал молчать и мне, Гриша, молчать прискорбно.\nГовори.\nЗмею ты грел!\nГадюку прикормил!\nОна с Евгением свалялась Каков голос!\n— Верно говоришь — Баба — кошка.\nКто погладил, к тому и ластится.\nА ты не верь веры не давай!\nПокури.\nСтучал ты как, а я уснула...\nНе ждала...\nЛюбимый мой!\nТы чего дрожишь Пойдем скорей.\nОзяб я.\n— Гришенька...\n— Ну, ладно, ладно.\nНе ждала...\nДавно не писал.\nДумала, не придешь ты .\nХотела тебе гостинцев отправить а потом, думаю, погожу, может, письмо поучу.\nА ты на горнишную не похожа.\nНа зкономку скорее.\nГриша... давай я тебя разую.\nОй, Гришенька...\nЧто ж ты кричишь\nАль не рада мне?\nВот он, георгиевский кавалер.\nОднако ты возмужал, брат.\nНадолго прибыл?\nНа две недели, ваше превосходительство.\nДочь-то похоронили.\nЖаль жаль ..\nГригорий?\nТы откуда?\nИз Москвы , в отпуск.\nВот как.\nРанен был?\nТак точно.\nЯ слышал...\nКаким он молодцом стал, а, папа?\n— Кавалер!\n— Да...\nНикитич, подавай!\nВаше благородие, дозвольте прокатить вас по старой памяти?\nЧто ж, сделай милость поедем.\nНу-ка, позволь\nЗх, и прокачу ж я вас, Евгений Николаевич!\nПрокати, на чай получишь\nПремного вами довольны .\nСпасибо, что Аксинью мою не забываете, кусок ей даете.\nВозвращайтесь поскорей!\n— Ты что?\n— А вот что!\nСкотина!\nЗа меня!\nЗа Аксинью !\nЗа меня!\nЗа Аксинью !\nИшо тебе за Аксинью !\nЧерт, загнал коня!\nГригорий!\nГадина!\nСука!\nГриша!\nГриша, прости!\nГосподи!\nМаманя!\n— Дождь — Идет.\nСотник прячет марьяж.\nСотник, вы разгаданы .\nНикогда не ходите от третьей дамы .\nЧего зто ты ноне?\nНебось станицу во сне видал?\nУгадал.\nСтепь приснилась\nТак замутнело на душе...\nОсточертела царева службица.\nЧего уставился?\n— Ну-ка, к свету.\n— Погоди.\nВраги ваши — австрийские и немецкие... — Чего?\n— Вот.\n\"Враги ваши — не австрийские и немецкие солдаты , обманутые так же, как и мы ,\nа собственный царь\" .\nКрепко.\n\"Собственный промышленник и помещик\" .\nВ бань бы неплохо.\nВ нашей землянке остается котел поставить воды хоть отбавляй.\nМокро, хозяева, мокро.\nБлагодарите Всевышнего, что сидим у болота, как у Христа за пазухой.\nНа чистом наступают, а мы едва по обойме за неделю расстреливаем.\nЛучше наступать чем гнить заживо.\nМы рвемся в бой!\nСотник, вы как, рветесь в бой?\nЯ?\n8 бубен.\nВ крести рвусь\nНе для того держат казаков, чтобы уничтожать их в атаках.\nДля чего же?\nДля чего?\nКогда на Фронте начнутся волнения, — а зто неизбежно:\nвойна начинает солдатам надоедать — вот подавлять мятежников бросят казаков.\nЕресь мелешь\nА почему же ересь\nПотому что ересь есть ересь\nУвлекаешься, милейший.\nОткуда ты знаешь о будущих волнениях?\nА если предположить нечто обратное?\nСоюзники разбивают немцев, война завершается блистательным концом.\nТогда какую роль ты отводишь казачеству?\nЧто-то не похоже на конец, тем более блистательный.\nЯ ведь недавно из отпуска.\nНу и как там, в Петрограде?\nГремит столица?\nДа, гремит.\nОтрадного мало.\nНе хватает хлеба.\nВ рабочих районах голод, недовольство, протест.\nБлагополучно мы не вылезем из зтой войны , как думаете, господа?\nКак мы думаем?\nМы думаем, раз.\n— Пас.\n— Два.\nЗдесь Черт!\nРусско-японская война породила революцию 1 905 года.\nЗта война завершится новой революцией.\nИ гражданской войной.\nВнимание, господа, хорунжий Бунчук начинает вещать по социал-демократическому соннику.\nПетрушку валяешь Ну-ну, у каждого свое призвание.\nМеня удивляет то обстоятельство, господа, что в среде нашего оФицерства есть такие вот субъекты .\nТы что же, стоишь за наше поражение в зтой войне?\nЯ?\nЯ за поражение.\nНу знаете ли!\nКаких бы ты ни был политических убеждений, но желать поражения родине — зто национальная измена.\nМинуту!\nЗто бесчестье для каждого порядочного человека!\nПодожди, Калмыков.\nХорошо, допустим, поражение.\nНу а дальше?\nЦаризм будет уничтожен, можете быть уверены .\n— Что тебе?\n— От полковника Ширяева пакет.\nДавай.\nСтупай.\nЗкстренно приглашают к полковнику.\nСочувствуем.\n— Всех?\n— Всех.\nОчередная диспозиция при возможной зкзекуции.\nИмею основание думать зто приказ о наступлении.\nС Богом, братцы !\nВ добрый час!\nВперед!\nМолчат.\nПодпускают ближе.\nА я боюсь ноне и не совестно мне.\nА что если зараз повернуть и назад?\nТут как в картежной игре, не веришь себе - голову снимут.\nТы из лица пожелтел.\nЛибо ты хворый, либо кокнут тебя ноне.\nСотня, за мной!\nРысью марш!\nГазы , братцы !\nГазы !\nСтой!\nСтой!\nГазы , братцы !\nХватайся за стремя!\nСволочь Назад!\nНазад, сволочь\nВсе, все, к чертовой матери.\nНе скачи, не скачи шибко!\nЗадыхаюсь Не скачи, ради Иисуса Христа!\nСадись\nПолный сапог налило крови.\nГришка, нынче как шли в наступление...\nСлышишь Григорий?\nНынче как шли, я в тебя сзади до трех раз стрелял.\nНе привел Бог тебя убить\nА ты меня от смерти отвел.\nСпасибо.\nА за Аксинью не могу простить Душа не дозволяет.\n— Ты меня не неволь ..\n— А я тебя не неволю.\nВот она.\nТы чего, Мелехов?\nГригорий Пантелеевич!\nНасыпали нам!\nДураков учить надо!\nУчить\nСука народ!\nХуже!\nКровью изойдет, тогда поймет за что его по голове гвоздют.\nТы про что?\nУмный сам поймет, а дураку силком не вобьешь\n— Ты о присяге помнишь — Иди ты ... — Гришка...\n— Живой ты ай нет?\n— Да ты скажи что-нибудь — Живой...\nНебось наш курень уж развалился?\nНет, зачем развалился — стоит.\nЧто ему сделается?\nСоседи-то наши, Мелеховы , как живут?\nЖивут помалень .\nПетро не приходил в отпуск?\nВроде не приходил.\nА Григорий?\nГришка ихний?\nГришка приходил после Рождества.\nБаба его двойню знтот год родила.\nГригорий приходил по ранению.\nРаненый был?\nРаненый в плечо.\nЕго всего испятнили, как кобеля в драке: не поймешь то ли крестов на нем больше, то ли рубцов.\nКакой же он, Гришка?\nТакой же, горбоносый да черный.\nТурка туркой, как и полагается.\nЯ не про то.\nПостарел аль нет?\nА чума его знает, может, и постарел трошки.\nБаба двойню родила, значит, не дюже постарел.\nХолодно здесь\nГнида гадкая, вонючая, какая ни на есть хуже.\nДавно ли в чириках по хутору бегала, а теперь не скажет \" тут\" , а \" здеся\" .\nВредные мне зти бабы .\nЯ бы их, стервей...\nВыползень змеиный!\nТуда же... \" холодно здеся\" .\nИ пошла!\nВозгря кобылья !\nПра!\nС какой роковой предопределенностью шло к зтому.\nЯ предвидел зто еще в начале войны .\nНу что ж...\nДинастия была обречена.\nНу неужели все же отрекся?\nРазумеется.\nТакими вещами не шутят.\nПослушайте, что пишет Евгений.\nДа, папа, грозные, грозные события.\nСолдаты буквально все разложены ...\nСтупай.\nВоевать не желают — устали.\nВ зтом году не стало солдат в общепринятом смысле зтого слова.\nВы не можете представить до какой степени разложения дошла наша армия.\nА впереди еще худшие испытания.\nСтаничники!\nВолею народа, царствовавший доныне император Николай Второй низложен.\nТуда ему и дорога!\nВся власть перешла к Временному комитету Государственной думы .\nАрмия, и вы в том числе должны спокойно перенести зто...\nПрекратить\nПрекратить ... известие.\nДело казаков защищать свою родину так же доблестно от посягательств как со стороны внешнего, так и... так и натиска внешнего врага.\nМы в дни таких великих потрясений должны быть тверды , как... — Как сталь — Как сталь\nМы будем биться так же доблестно, как и раньше, а там пусть Государственная дума...\nПусть Государственная дума решает судьбу страны .\nВ армии не должно быть политики.\n— Не должно!\n— Дай-ка я скажу.\nСтаничники!\nНельзя так-то!\nНас опять же под конФуз подвели.\nОбман хочут сделать\nРаз превзошла революция и всему народу дадена свобода — значится, войну должны прикончить\nАккуратно я гутарю?\nПо-правильному?\nДа...\nВо что же все зто выльется?\nКак ты думаешь\nВот тебе раз!\nНеужели, живя здесь вы не уяснили обстановку?\nНесомненно, будет правительственный переворот.\nУ власти встанет Корнилов.\nАрмия ведь за него горой.\nУ нас говорят так.\nСейчас две равнозначных силы — зто Корнилов и большевики.\nКеренский между двумя жерновами, — не тот, так другой его сотрет.\nПусть себе спит пока на постели царицы , благо она освободилась\nНо армия... пойдет ли вся армия за Корниловым?\nСама солдатня, конечно, не пойдет.\nМы поведем ее.\nПослезавтра Москва встречает Корнилова.\nДело чести каждого оФицера быть там.\nВечером я выезжаю.\n— Я с тобой.\n— Разумеется.\nМолодец.\nНе время, не время.\nГоспода оФицеры !\nПока казаки поют, большой беды нет.\nТеперь поют редко, все больше митингуют.\nНадо учиться разговаривать с людьми.\nХорунжий Бунчук?\nТы на свободе?\nПрости, но руки я тебе не подам.\nЯ не собирался протягивать тебе руку, ты поспешил.\nТы что же, спасаешь здесь свою шкуру?\nИли прибыл из Петрограда?\nНе от душки ли Керенского?\nЗто что, допрос?\nЗаконное любопытство о судьбе некогда дезертировавшего сослуживца.\nМогу тебя успокоить я здесь не от Керенского.\nКто ж ты все-таки такой?\nПогон нет, шинель солдатская.\nПолитический коммивояжер?\nТоварищи казаки!\nНаш зшелон дальше не пойдет.\nСгружаться тут зачнем.\n— Правильно?\n— Правильно!\nЗдравия желаю, станичники!\nАгенты большевиков и Керенского препятствуют продвижению наших частей по железной дороге.\nПолучен приказ верховного главнокомандующего...\nВерховного Корнилова!\nВ том случае, если не представится возможным продвигаться по железной дороге, то идти на Петроград походным порядком!\nСегодня же мы выступаем!\nПриготовьтесь к выгрузке!\nТоварищи казаки!\nЯ прислан к вам питерскими рабочими и солдатами.\nВас хотят вести на братоубийственную войну.\nНа разгром революции!\nЕсли вы хотите идти против народа, если вы хотите восстановить монархию... — филосоФия!\n— Провокатор!\nЕсли вы хотите восстановить монархию, — идите!\nНо питерские рабочие и солдаты надеются, что вы не будете каинами.\nОни шлют вам пламенный братский привет!\nМинуту!\nКазаки, хорунжий Бунчук в прошлом году дезертировал с Фронта, вы все зто знаете!\nНеужели мы будем слушать предателя и труса?\nАрестовать его, подлеца!\nОружие прочь Пущай говорит, выясняет свою линию!\nГовори, Бунчук!\nЗемно вам кланяемся и просим передать питерским...\nСтой!\nГляди-ка на них.\nА ну-ка, за мной.\nКалмыков, ты арестован!\nРуки!\nРуки!\nРазоружить\n— К зтим приставить часовых.\n— Слушаюсь\nКалмыкова поведем в ревком гарнизона.\nНу, что же вы ?\n!\nРуки вверх.\nЛовко.\nЕсаул Калмыков, извольте идти вперед.\nЗа мной.\n— Иди...\n— Подлец!\nТы предатель изменник!\nТы еще поплатишься за зто!\nВы не партия, а банда гнусных подонков общества!\nКто вами руководит?\n— немецкий главный штаб!\nБольшевики!\nХамы !\nХамы продали родину!\nЯ бы вас всех на одной перекладине...\nВремя придет!\nВаш зтот Ленин не за 30 немецких марок продал Россию?\n!\nХапнул миллиончик — и скрылся... каторжанин!\n— Становись — Не смей бить\nУбить хочешь\nСтреляй!\nСтреляй, сукин сын!\nСмотри, как умеют умирать русские оФицеры !\nЯ и перед смертью ...\nМитрич... за что ты его?\nЧто же ты , Митрич?\nА ты как думал?\nОн бы в нас стрелял, не вынимая папироски изо рта.\nМы их или они нас!\nСередки нету.\nЗа мной!\nВперед!\nОткуда, служивые?\nОтвоевались что ли?\n— Хватит, отцы , навоевались — А ты пойди, сам хвост потрепи.\nЕзжайте к бабам на печь\nМиша!\nМы уж и не ждали!\nА Мелехов Гришка где?\nГришка к большевикам подался, остался в Каменской.\nК большевикам подался...\nМы подтягиваем братскую руку трудовому казачеству!\n— Ты бы потише толкался!\n— Пусти, комарь а то — к ногтю.\nРабочие и казаки вместе лили кровь\nИ в войне с Калединым мы должны быть вместе!\nРука с рукой мы пойдем в бой против тех, кто порабощал трудящихся в течение целых столетий!\nКто на Фронте ввел смертную казнь для солдата?\nКорнилов!\nКто с Калединым душит нас?\nОн!\nТак к тому же вы пристанете, братцы казаки?\nЗадавим гидров зтих, в море спрудим!\nВерно!\nДай им взвару!\nСвою власть надо сделать\nА добровольцы и разные партизаны пущай уходят с Дону!\nИ большевикам у нас делать нечего.\nМы с врагами рабочего народа сами сладим.\nЧужой помощи нам не надо!\n— А знто кто?\n— Кривошлыков, с хутора Горбатова.\n— А рядом?\n— Зто сам Подтелков и есть\nО, и Голубов тут.\nБратья казаки!\nДа замолчите вы !\nНе на базаре!\nДайте Подтелкову сказать\nБратья казаки!\nПокуда мы тут совещаемся, а враги трудового народа не дремлют.\nМы всё хотим, чтобы и волки были сытые, и овцы целые.\nА Каледин — он так не думает.\nНами перехвачен его приказ об аресте всех участников нашего съезда.\nДолой Каледина!\nПредлагаю считать наш съезд властью на Дону!\nПредлагаю... предлагаю из делегатов нашего съезда избрать казачий Военно-революционный комитет!\nЕму поручить вести борьбу с Калединым и организацию...\nГоспода, господа!\nВот они, предатели!\nПовесить их!\nГосподин хорунжий, я протестую.\nМолчать Становись по три.\nШагом марш.\nВсех повесить Всех!\nВсех предателей!\nКакое вы допускаете безобразие!\nБлагодари Бога, что живой останешься.\nЯ бы тебя, хамлюгу!\n..\nСидеть Вставать не будем.\nЗдравствуйте.\nЗдравствуйте.\nНу-с... какие же части вас уполномочили?\nТак... ну и чего, собственно говоря, вы добиваетесь\nНаше требование — передайте власть Военно-революционному комитету.\nКак зто все просто.\nУльтиматум.\nВам, вероятно, известно, что на 4 Февраля созывается Войсковой круг.\nЧлены правительства будут переизбраны .\nСогласны ли вы на взаимный контроль\nНет!\nЕжели вас будет меньшинство, мы вам диктуем свою волю.\nНо ведь зто же насилие.\nДа.\nЕжели Войсковой круг нас не удовлетворит, мы его не признаем.\n— Ну и кто же будет судьей?\n— Народ!\nНарод!\nЧего нам слушать их?\nНам с большевиками не по пути.\nТолько изменники Дону и казачеству могут говорить о сдаче власти Советам и звать казаков идти за большевиками.\nНеужели вы думаете, Подтелков, что за вами, за недоучкой и безграмотным казаком, пойдет Дон?\nА ежели пойдут, то кучка оголтелых казаков, которые до дома отбились\nНо они, брат, очнутся — и тебя же повесют!\nБраво, Шеин!\nДонское правительство рассмотрит предложение ревкома и даст ответ в письменной Форме к 1 0 часам утра назавтра.\nНа конь\nМальчики, красавчики, голубчики!\nНу-ка, птенчики!\nНу-ка, умницы , потревожим большевичков!\nМелехов, строй сотню и выводи в Ерохинскую балку!\nДобро!\nЖиво!\nСотня!\nСлушай мою команду!\nСотня!\nЗа мной марш!\n— Вы командир зтого отряда?\n— Да.\nПопробуйте по балочке в обход, а я буду их держать огнем на зтом участке.\nНу что ж, можно и по балочке.\nПопробуем.\nС такими навоюешь Детей бы ишо забрал с перинами.\nКак я себя ругаю, что не оставил тебя в Ростове!\nБунчук, в вас заговорил собственник.\nСотня, за мной!\nНу как?\nЧто?\nРанило тебя?\nА ну, давай.\nАня, где?\n— Аккурат под сердце.\n— Что под сердце?\nАня...\nАня...\nТы куда глядишь Аня?\nАня...\nВот он я...\nАня...\nВот...\nИлья , милый...\nВот видишь как все просто...\nСперва удар...\nПотом толчок...\nА теперь печет, жжет.\nНа грудь воды лейте!\nВоды !\nДайте кто-нибудь воды !\nЗа веру!\nЗа Русь За мной, соколики!\nСотня!\nЗа мной в атаку!\nАня, не уходи!\nНе уходи, Аня!\nНе уходи, Аня!\nСлушай сюда!\nСлушай сюда!\nГоловной ко мне, остальные прямо!\nЗа сохранность пленных отвечаете по всей строгости военно-революционного времени!\nЧтоб доставить в штаб в целости!\nОтдайте зто Подтелкову.\nМелехов!\nМолодец!\n— Да ты ранен, никак?\n— В ногу.\n— Кость цела?\n— Вроде.\nНаголову!\nНаголову разнесли!\nОФицерский отряд так распушил, что и не собрать\nТы в штаб?\nПередай Подтелкову, что Чернецова я беру на поруки.\nВот так и передай.\nЕзжай.\nПодтелков, зараз гонят пленных.\nТы читал записку Голубова?\nПлевать мне не Голубова!\nМало ли ему чего захочется!\nНа поруки ему Чернецова, зтого разбойника контрреволюционера?\nНе дам!\nРеволюционным судом судить и без промедления наказать\nГолубов сказал, берет на поруки.\nТы чего вылез?\nЛежал бы .\nНа поруки...\nТы знаешь сколько он крови на свет выпустил?\nМоре!\nСколько он шахтеров перевел?\nНе дам!\nТут орать нечего!\nВас тут много судей!\nТы вот туда пойди!\nА над пленными вас много распорядителей!\nЯ был там!\nНе думай, что на тачанке спасался.\nА ты , Мелехов, ты с кем гутаришь\nОФицерские замашки убирай!\nРевком судит, а не всякая там...\nУложите его.\nНу, орелик...\nПопался, гад!\nИзменник казачества!\nПредатель Подлец!\nРазбегайтесь господа!\nГосподи, прости меня, грешного.\nЗто что ж такое делается?\nА ты думал - как?\nАли лоб контре под пулю подставим?\nМаманя, едут.\nЕдут, маманя!\nЗдорово!\n— Здоровый?\n— Рану получил, под Глубокой.\nНужда заставила там огинаться!\nШел бы домой.\nДа ты , Дуняха, черт тебя знает, какая девка-то вышла!\nА я думал, дурненькая будет.\nНу уж ты , братушка!\nСын-то какой, погляди!\nДай мне моего сына поглядеть\nА дочь-то, Гриша!\nНу, возьми же!\nНу что, не узнаете папань -то, орехи лесные?\nНаташа, возьми их, а то я на порожки не влезу.\nТабачищем-то прет!\n— Дарья , на стол собирай.\n— У него своя жена есть\nК масленой блины с каймаком будем исть\n— Ну, признал папаньку?\n— Признал.\n— Зто тебе, маманя.\n— Милые мои...\n— Ба, он на полу валяется.\n— Ничего.\nКарга старая, а туда же — перед заркалой.\nБатя, тебе.\nНу, спаси Христос.\nА я Фуражку присматривал.\nВ лавке нонешний год их не было, а старую в пору на чучело надевать\nТы чего ж, дрючок старый?\nГосподи, ну и глупа ты !\nИть самовар — не зеркало.\nВот он, казачок лейб-гвардии казачьего полка!\nНа императорском смотру первый приз захватил.\nСедло и всю амуницию!\nВот он я!\nНаташа.\nДуняшка.\nПетро.\nДарья .\n— Ну, а знто кому?\n— Мне.\n— Да ты как полковник.\n— Крестов-то!\nПрикинь Гриша.\nПрикинь батяня будет довольный.\nЧего ж ты , задаром заслуживал, что ли?\nфу, какой ты пышный!\nНароди ты себе таких, чекатуха.\nПо крайней мере два сыночка — и обое в люди вышли.\nНу, будя.\nАрбузы соленые есть\nНу как же!\nНаташа.\nПока народ не подошел, расскажи Петру, что там делается.\nПапа, а чего вы водичку из рюмочки пьете?\nДерутся.\nБольшевики где зараз?\nС трех сторон: с Таганрога, с Тихорецкой, с Воронежа.\nНу а... ты какой же стороны держишься?\nЯ-то?\nЗа Советскую власть\nДурак!\nПетро, хучь ты втолкуй ему.\nГорячий он у нас, как необъезженный конь\nРазим ж ему втолкуешь\nА мне нечего втолковывать я и сам не слепой.\nфронтовики что у вас гутарют?\nДа что нам зти Фронтовики?\nПоиграли мы в большевиков на Фронте, пора и за ум браться.\nМы ничего чужого не хочем, ну и нашего не берите.\nТы , Гришка, подумай.\nПарень ты не глупый.\nКазак — как он был казак, так казаком и останется.\nВонючая Русь у нас не должна править\nА то знаешь что иногородние зараз гутарют?\nВсю землю разделить на души.\nЗто как?\nИногородним коренным, какие в Донской области живут издавна, дадим землю.\nА шиша им!\nВот им выкусить\n— Здорово, служивый!\n— Здорово.\nТелка испужал, горластый.\nИшо не хватало...\nНу, Пантелей ПрокоФьевич, магарыч станови.\n— Хлеб-соль — Седайте с нами.\nЧего ж Михайло Кошевого не видать\nДа тут он, на хуторе.\nТы чего, Валет, здесь За рыбой, что ли?\nНа кой она мне.\nХудые дела, худые.\nКончай рыбку удить А то удим, удим, да про все забудем.\nНу, какие новости?\nВыкладывай.\nПод Мигулинской красную гвардию разбили.\nНачалась клочка...\nШерсть летит.\nОткуда под Мигулинской?\nШли через станицу, казаки дали им чистоты .\nПленных кучу в Каргин пригнали.\nТам военно-полевой суд уже наворачивает.\nНонче у нас мобилизация.\nВот-вот в колокол ахнут.\n— Как же теперь — Надо подаваться из хутора.\n— Куды ?\n— Куды !\nА я почем знаю?\nПрикрутит — сам найдешь лазейку.\nБеги к Ивану Алексееву, а я вентери отнесу и зараз приду.\nУходить сейчас же!\nНонче же сматывать удочки!\nТы резон дай — чего мы пойдем?\nНачнется мобилизация, думаешь зацепишься?\n— Не пойду.\n— Поведут.\nЯ не бычок на оборочке.\nВозьмут, Валет правильно гутарит.\nКуда идти — вот загвоздка.\nОпять Как да куды .\nШутки шутите?\nВремя, вишь какое...\nТут все к черту пойдет.\nНе сепети, твое дело другое.\nНи спереду, ни сзаду — снялся да пошел.\nА у меня баба да двое детишков.\nТебе только языком трепать У тебя, кроме пинжака, ничего нету.\nТы чего рот раззявил?\nОФицерство свое кажешь\nНе ори!\nПлевать мне на тебя!\nЗамолчи, гаденыш!\nСопля паршивая!\nВаляй, чтоб тобой не воняло тут!\nБрось Григорий!\nКазацкие замашки бросать надо.\nИ не совестно?\nСовестно, Мелехов.\nСтыдно.\nЕще в Красной гвардии был...\nТаких мы на распыл пущали!\nСтупай!\nНоги повыдергаю!\nС ума сошел?\nА чего он не свое на себя берет?\nДождались\nВон-на, кличут!\nЗ, нет.\nЯ зараз на баркас.\nНа знтот берег.\nПотель меня и видали.\nНу так как же?\nЗараз никуды не пойдем.\nБывайте.\nРасходятся, видать наши тропки.\nЗх, Мишка, Мишка...\nМолодой ты , горячий.\nТы думаешь не сойдутся?\nСойдутся еще, будь в надежде.\nБывайте.\nСлезай!\n— Откель станичники?\n— С хутора Татарского.\nПрипоздали вы трошки.\nПоймали без вас Подтелкова.\n— А где ж они?\n— Вон ведут.\n— И куды ж их?\n— К покойникам.\nЧто ты брешешь\nСбреши лучше, ваше благородие.\nГлянь им уже рели поставили.\nДа, ежели бы вышли с Ростова на трое суток раньше, не пришлось бы тут смерть принимать\nКверху ногами поставили бы всю контру.\nЧерт с ними, пускай убивают.\nИ смерть пока не страшна.\nБоюсь одного я, что в мире ином — друг друга уж мы не узнаем...\nКак не узнаем?\nЧто ты ?\nНу, погутарили, хватит.\nСтарики!\nПозвольте нам с Кривошлыковым поглядеть как наши товарищи будут смерть принимать\nНас повесите опосля.\nА зараз хотелось бы поглядеть нам на своих друзьев-товарищей, поддержать которые духом слабы .\n— Ну как?\n— Нехай.\nДозволяем.\nНехай побудут.\nОтведите их от ямы .\nВыводи.\nОт вашего хутора есть охотники?\n— Какие охотники?\n— Приговор приводить в исполнение.\n— Нету и не будет.\n— Я стрельну.\nЯ согласный.\nТолько дай патронов.\nПойдем.\nДержись\n9, 1 0, 1 1 , 1 2, 1 3, 1 4, 1 5.\nТак и не вспомнил, как звать\nТак и умрешь без имени?\nИмя есть\nЧлен Российской коммунистической партии большевиков, питерский рабочий, сам из казаков.\nХватит.\nПо изменникам казачеству пли!\nИ ты тут, Мелехов?\n— Тут, как видишь — Вижу.\nРасстреливаешь братов?\nОборотился?\nВон ты какой...\nПли!\nПод Глубокой бой помнишь Помнишь как оФицеров стрелял?\nТеперича отрыгивается!\nНе одному тебе казацкие шкуры дубить\nТы , поганка, казаков продал!\nИшо сказать\nЧто?\nСтой!\nЧто я?\n!\nЧто я?\nСтой!\nОтуманенные вы !\nСлепые!\nСлепцы !\nПусть погутарит напоследок.\nЗаманули вас, заставляют кровных братов убивать\nДумаете, ежели нас побьете, зтим кончится?\nНет!\nСоветская власть установится по всей России!\nВот попомните мои слова.\nЗря кровь вы чужую льете!\nГлупые вы люди!\nМы и с знтими зтак управимся.\nВсех, дед, не перестреляете.\nВсю Россию на виселицу не вздернешь\nСвоя голова ближе!\nВсхомянетесь вы опосля, да поздно будет!\nПогутарил, хватит.\nЛучших сынов Тихого Дона поклали вы в зту яму.\nВешать-то ишо не научились\nСадись\nИди-ка сюда.\nОбозники приехали.\nС ними папаша ваш.\nНу?\n!\nБудет брехать\nПраво слово.\nИди встревай.\nЗачем вас принесло, земляки?\nА мы в обувательских, снаряды вам привезли, только воюйте.\nЗто от матери тебе.\n— А ты чего приехала?\n— Да с батей.\nМаманя забоялась случись чего, он один на чужой стороне.\n— Здорово, соседка.\n— Здорово, сосед.\nГосподи, и поглядеться-то некуда.\nЗаправду говорят, мыслишку держите дальше границ не ходить\nА зачем дальше идтить\nВыбьем мужиков с казачьей земли — и по домам.\nПо домам...\nВот придавят чеха, а потом как жмякнут всю красную армию, которая по ним была, и потекет из нас мокрая жижа.\nОдно слово — Россия!\nШутишь что ль\nНе пужай!\nАж возле пупка заноило от дурацкого разговора.\nА по мне хоть всю жизнь воевать Люблю знто дело.\nВыходи!\nНе успели войтить уже выходи.\nОпять значит, на позиции.\nА вы гутарите: границы .\nКакие могут быть границы ?\nПо домам надо!\nНу, пошли.\nНу-ка, Проша.\nПоди погляди, чего там.\nХочу погутарить с тобой.\nНа той неделе я ездил к Петру.\nИхний полк за Калачом зараз.\nОни, сынок, там неплохо поджились\nПетро, он дюже гожий к хозяйству.\nДал мне чувал одежи, коня, сахару.\nКонь справный.\nПогоди.\nТы сюда не за зтим заявился?\n— А что?\n— Как что?\nЛюди ить Гриша, берут.\nЛюди!\nБерут!\nСвоего мало?\nХамы вы !\nЗа такие штуки на германском Фронте людей расстреливали!\nНе сепети, я у тебя не прошу.\nМне ничего не надо.\nТы об себе подумай.\nСкажи, богатей какой нашелся.\nДа и что ж не взять с знтих, какие к красным подались\nГрех с них не брать\nТы мне оставь зто!\nА не то живо провожу отсель\nДавай коня.\nСтепан Астахов явился.\nСлыхал?\nКак зто?\nАксинья к нему вернулась\nТы бы внукам гостинцы послал.\nКакие с Фронта гостинцы ?\nЯ на заставу.\nДарья !\n— Чего ишо?\n— Подсоби.\nОй, Господи...\nВы , батя, и со своим дерьмом не расстанетесь\nМолчи, шалава.\nБуду я им ишо котел оставлять\nИз тебя хозяйка, как из Гришки-поганца.\nБатюшки!\nРодимый!\nГреха не боишься!\nЗа что сирот обижаешь\nСтаничники, ну-ка, подсобите.\nЗа что сирот обижаешь\nОтдай хомут.\nОтдай ради Господа Бога.\nТы Бога оставь\nТвой-то комиссар, никак?\nРаз \" твое-мое-Богово\" , значит, — молчок, не жалься.\nПрощай, бабочка, не гневайся.\nВы себе ишо наживете.\nТебе вспомянется!\nИшо отольются вам наши слезы !\nНет, правда за нами и сила за нами.\nВы находитесь господа, в историческом зале со стен которого на нас смотрят герои другой народной войны , войны 1 81 2 года.\nБыло время, когда Париж приветствовал своих освободителей — донских казаков.\n1 04 года назад наш атаман граФ Платов гостил в Лондоне.\nТеперь мы ожидаем союзные войска в Москве!\nМы ожидаем вас, чтобы под звуки торжественных маршей и нашего гимна вместе войти в Кремль вместе испытать всю радость мира и свободы !\nЗа великую, единую и неделимую Россию!\nУра!\nГоспода!\nГоспода, гимн!\nПо врагам революции огонь\nСтаничники, что же вы ?\n!\nБратцы , куда же вы ?\nСтой!\nЗа власть Советов вперед!\nВставай, проклятьем заклейменный,\nВесь мир голодных и рабов!\nКипит наш разум возмущенный...\nНу что?\nБез погон приехал?\nИди, поручкайся с братом.\nТоже вчера прибег.\nМатерю порадуйте.\nЖена вон, ребятишки истосковались\nДа, вот какое дело...\nГригорий!\nГригорий Пантелеевич, что ж ты , как сурок, на пече лежишь\nСлазь\nПропали мы , батя!\nЧадушка моя.\nЖалкий ты мой...\nМолочка кислого положить\nКак же ты думаешь\nОтступать значит?\nА то как же?\nОФицеров-то они не милуют.\nМожет, вы думаете оставаться, а я уж...\nНе уж, я поеду.\nА дом как же?\nЗто что ж, знатца, вы уедете, а мы должны оставаться?\nДобро будем оберегать\nЧерез него, может, жизни лишишься!\nДа сгори оно ясным огнем!\nНе останусь я.\nЕжели хутор миром тронется, и мы не останемся.\nПеши уйдем.\nДуры !\nСучки!\nЦытьте, окаянные!\nМущинское дело, а они равняются.\nНу давайте все бросим и пойдем куда глаза глядят.\nА скотину куда денем?\nЗа пазуху покладем?\nА курень\nСкотину можно с собой угнать\nУгоним!\nСтарая корова починает.\nДокель ты ее угонишь\nБездомовщина!\nУх, ты , поганка!\nА овец?\nЯгнят куды денешь\nНаживал им, наживал, и вот что припало услыхать\nНу вот, слава Богу.\nПогутарили.\nНашли время скалиться.\nА человек с Большого Громка сказывал, что красные к Вёшкам подходят.\nЗто что ж зто?\nА вот!\nСовсем никуды не пойдем.\nЕхать — так всем, а не ехать — так никому.\nНу, коли так — остаемся.\nУкрой и оборони нас, Царица Небесная.\nДа надел я.\nСипилин Иван Авдеевич.\nПущал пропаганды против советской власти.\nПравильно.\nЗдорово живешь\nПроходи.\nЖалься.\nА я не жалиться.\nПобрехать зашел да кстати сказать чтобы в обывательские не назначали.\nКони у нас в ножной.\nА быки?\nНа быках какая ж езда?\nСколизь\nЗамерз, замерз, ребятки.\nГригорий, здравствуй.\nЗдорово.\nНу, повидал я председателя.\nВхожу в кабинет, а он за руку со мной: \" Садитесь товарищ\" .\nЗто окружной.\nА раньше как было?\nГенерал-майор!\nКак перед ним стоять надо было?\nВот она, власть наша, любушка.\nВсе ровные.\nЧему ж ты возрадовался?\nКак чему?\nЧеловека во мне увидали, как же мне не радоваться?\nЗа что ж тогда воевали?\nЗа генералов?\n— Ты за что воевал?\n— Я за себя воевал.\nМне ни те, ни знти не по совести.\nЧем ты зту власть корить будешь\nА чего ты за нее распинаешься?\nНу ты ... зтой власти дюже не касайся.\nПотому — я председатель и мне тут с тобой негоже спорить\nА власть твоя, — уж ты как хочешь — а поганая власть\nЧего она дает казакам?\nКаким казакам?\nКазаки тоже разные.\nВсем.\nЗемли дает?\nВолю?\nРавняет?\nЗемли у нас — хоть заглонись ею.\nВоли боле не надо, а то зачнут на улице друг дружку резать\nАтаманов сами выбирали, а теперь сажаете.\nТвои слова — контра!\nИ ты меня на свою борозду не своротишь\nТы Советской власти враг!\nБывайте.\nКоршунов.\nКашулин.\nСинилин пущал...\nЧего пущал?\nПропаганды против советской власти.\n— Председателя мне нужно.\n— Я председатель\nОсип Давыдович!\nВдарь меня, сукиного сына.\nНе верю я своим глазам!\nЗнал, что ежели жив остался, он будет в Татарском председателем.\nМиша.\nЗдравствуйте.\n— У вас и сесть не на чем?\n— Садись в креслу.\n— Моховское?\n— Да.\nОткель же ты взялся?\nОткель я взялся?\nС политотделом армии.\nВместе с революцией к вам пришел.\nОчень братки, все просто.\nДа... все очень просто...\nВсе очень просто...\nЧто ж, в общем, все правильно.\nТолько не все тут у вас.\nВот, скажем, Мелеховы где?\nМелеховы ?\nДа, Мелеховы .\nЗто я не с Григорием сейчас в дверях столкнулся?\nДа был он тут.\nПожалели?\nПожалели.\nА он, думаете, вас пожалеет?\nТы о Подтелкове помнишь\nОбстановку знаешь фронт в полутораста верстах.\nЕсли сейчас не взять наиболее активных врагов, снова вспыхнет восстание.\nКазакам 300 лет дурманили голову.\nОсновная масса казачества настроена против нас враждебно.\nВот какова обстановка.\n\"Революцию в перчатках не делают\" , — говорил Ленин.\nК ночи можно будет взять Мелехова.\n— Почему к ночи?\n— Меньше разговоров.\nНу знаешь ли, зто...\nЕрунда зто.\nЗтих отправь\nЗараз Мелехова доставлю.\nДоставишь\nНет, брат, ищи теперь ветра в поле.\nЗдорово живете.\nУспели.\nНу ладно.\nНичего, давайте разберемся.\nМожно я скажу?\nБузуй!\nТолько товарищ Штокман, скажите, могу я гутарить так, как хочу?\n— Говори.\n— А вы меня не заарестуете?\nГовори.\nМы так промеж себя судим:\nчто хотят коммунисты нас изничтожить\nСмотри, не попадись на книжку.\nА я как пьяный: у меня что на уме, то и на языке.\nХотят изничтожить чтобы на Дону казачьего духу не было.\nТеперь не скажешь что расстрелов больше не будет!\n— Коммунисты ...\n— Чего опять коммунисты ?\nКоммунисты хотят одного.\nЧтобы перестала литься кровь и казачья , и не казачья .\nНо пока лютуют наши враги, мы не говорим, что расстрелов, дескать не будет.\nТеперь посмотрим, за что же были расстреляны наши хуторные враги Советской власти.\nКоршунов...\nНу, его вы все знаете.\nАтаманил, на чужом горбу катался.\nВот-вот.\nКашулин Андрей Матвеевич участвовал в расстреле красных казаков Подтелкова.\nБодовсков федот НикиФорович, то же самое.\nМелехов Григорий Пантелеевич, подъесаул, настроенный враждебно против советской власти.\nПравда, Мелехова нам взять не удалось\nБогатырев.\nНу, ему вы все цену знаете.\nКошевой, вы тут митингуете, а по хуторам томаха идет.\nТо ли белые, то ли еще кто.\nСо станицей связь прервана.\nТак в чем же дело, товарищи?\nОсип Давыдович, со станицей связь прервана.\nНе то белые, не то ишо что.\nСо станицей связь прервана.\nСкачи в Кашинскую.\nСтупай, живо!\nБей его, ребята!\nБей гадину!\nТы что?\nСтойте!\nПустите, люди добрые!\nДайте я над ним сердце отведу!\nАнтип, в отца жизню не вдуешь а человека загубишь\nБратцы , на складе сахар делют, туды и ступайте.\nКто там?\n— Кто?\n— Откройте, мама.\nГосподи...\nУходи!\nРади Христа уходи, Мишенька.\nВечор казаки весь баз перерыли, тебя искали.\nАнтипка Брех плетью меня секнул.\n\"Скрываешь — говорит, — жалко, что его, заразу, не убили\" .\nУходи!\nНайдут тебя тут...\nГосподи, спаси и помилуй...\nЗдорово, сосед.\nТы что ж дома сидишь\nАль навоевался?\nВоевать не пойду.\nБерите коня, что хотите со мной делайте, а я винтовку брать не хочу.\n— Как зто не хочешь — А так, не хочу — и все.\nА ежели красные заберут хутор, с нами пойдешь или останешься?\nТам видно будет.\nА коли так, бери его, Христан.\nМы тебя зараз к стенке прислоним.\nА ну пошли!\n— Братцы !\n— Мы тебе не братцы !\nПустите, я запишусь в сотню.\nСлабый я от тиФу.\nДавно бы так.\nИди бери винтовку.\nСотня!\nСлезай!\nКоней в укрытие.\nБратуха!\nПатроны приберегайте.\nБить когда дам команду.\nВот что, отведи свою сотню влево.\nНикак батарею устанавливают на Матвеевом кургане.\nДа.\nПозиция мне не по душе.\nНадо бы минуть зти яры .\nА то обойдут с Фланга, беды не оберешься.\nЧего ты , как зто нас обойдут?\nНе, яры - не помеха.\n— Гляди, парень — Ну, с Богом.\nСотня, за мной!\nЗй ты , генерал Платов, прикажи донцам по чарке водки.\nМолчи, водошник.\nОтсекут тебе красные другую руку, чем до рта донесешь\nИз корыта придется хлебать\nА и выпил бы , недорого отдал.\nУшли.\nПо коням!\nЧерез яр!\nБратцы , в яр!\nСтепка Астахов за хвост своего коня поймал, ускакал.\nА мне вот не пришлось Видит Бог, пропали, братцы .\nВот они.\nЗй, вы !\nВылазьте!\nВсе равно перебьем.\nПетро Мелехов!\nВылазь\nГоворит Михаил Кошевой.\nПредлагаем сдаться добром.\nВсе равно не уйдете.\nВправо!\nПрямо!\nОрудие вперед!\nПулемет на тачанку!\nНавоевался?\nТы командовал ими?\nРаздевайся.\nЖивее ты !\nЛадно, хватит.\nКум... кум Иван, ты ж мое дите крестил.\nКум, не казните меня.\nГляди!\nГляди!\nГляди, что твой наделал!\nИзничтожить бы семя ваше!\nОй, Петюшка...\nОй, Петюшка...\nОй, родимый!\nВстань ..\nОтойди.\nСынок... чадунюшка...\nДа за что же они меня?\nЗа что?\nЧто я им сделала?\nА вы чего выпятились Али вам тут место?\nВсех!\nВсех на Фронт!\nТам вас нету!\nНа конь\nЛети, пташка канарейка,\nЛети в горы высоко,\nПропой песню про войну,\nПро несчастье про мое...\nГригорий Пантелеевич, ты — гордость наша, не дай нас в страту.\nОпять нами генералы владеют, всю власть к рукам забрали.\nКакую ишо власть\nНа-ка, пей лучше.\nДавайте Советской власти поклонимся: виноваты , мол.\nЯ шучу.\nПей, Христан.\nЧего шутить Тут дело сурьезное.\nХучь Кудинова, хучь генералов, всех сместим, а тебя поставим.\nЯ говорю, всех сместим, а его посадим.\nВерно?\nУйдут — хорошо, а нет, так двинем полки на Вёшки.\nДа нету боле об зтом разговору.\nСамогонка есть\n— А поздороваться не надо?\n— Здорово, хозяюшка!\n— И сколько ж вас еще?\n— А вся дивизия!\nГригорий Пантелеевич, сокол ты наш, выпьем...\nБудя вам его поить Не видишь он негожий никуды .\nТы зараз с ним не ходи, толку не будет.\nЧерт бессовестный, залил зенки и несешь неподобное.\n— Может, взвару налить — Зачерпни.\nГригорий Пантелеевич!\nСлушай сюда!\nПервую сотню поведу сам!\nШашки вон!\nВ атаку, братцы , за мной!\nМало тебе?\nМало?\nУбью !\nГригорий Пантелеевич, опомнитесь\nУйди!\nУйди!\nУспокойся.\nОпомнись Григорий Пантелеевич!\nКого же рубил!\nБратцы !\nНету мне прощения!\nЗарубите меня!\nСмерти предайте!\nВидать навоевался досыта.\nКак очумеется, сажай на коня и вези до дома.\n— Молочка налить — Ты лучше раненым оставь\n— Здешняя?\n— Здешняя.\nОсип Давыдович.\nНичего, ничего.\nЗто мы ишо поглядим, чья переважит.\n— Чего же ты молчишь — А об чем гутарить с тобой?\nРассказал бы , как пьянствовал, как с жалмерками вязался.\nА ты уж знаешь\nВесь хутор знает.\nЕсть от кого услыхать\nА коли знаешь чего расспрашиваешь\n— Опять за старое берешься?\n— Оставь Наталья .\nКобелина проклятый, ненаедный!\nЗа что ж ты меня опять мучаешь\nДети вон уж у тебя какие!\nКак гляделками не совестно моргать\nТы бы поменее брехни слухала.\nНу, трошки виноват перед тобой.\nОна, жизнь Наташка, виноватит.\nВсе время на краю смерти ходишь ну и перелезешь иной раз через борозду.\nЯ вот и к водке потянулся.\nНадысь припадком меня вдарило.\nНеправильный у жизни ход, и, может, и я в зтом виноватый.\nЗараз бы надо с красными замириться и на кадетов.\nА как?\nКто нас теперь сведет с Советской властью ?\nВсе у меня, Наташка, перемутилося в голове.\nУж ты бы мне зубы не заговаривал.\nНапаскудил, теперь на войну сворачиваешь\nМало через тебя, черта, я лиха приняла?\nЖалко что тогда не до смерти зарезалась\nМожет, подсобить в чем, Гришенька?\nДа нечего подсоблять\nАх, Григорий Пантелеевич, до чего вы со мной, вдовой, строгие.\nНе улыбнетесь и даже плечиком не ворохнете.\n— Шла бы стряпаться, зубоскалая.\n— Ах, какая надобность\nНаталье подсоби.\nМишатка бегает грязней грязи.\nИшо чего недоставало!\nВы их будете родить а мне замывать\nНаталья как трусиха плодющая.\nОна их тебе нашибает еще штук 1 0.\nЗтак я от рук отстану, обмываючи всех их.\nСтупай.\nГригорий Пантелеевич!\nВы зараз в хуторе один казак на всех.\nНе прогоните, дайте хучь издаля поглядеть на ваши черные завлекательные усы .\nНу и ухо ты !\nКак с тобой Петро жил?\nУ тебя не сорвется.\nЗто уж будьте покойны .\nСлышь Гришка, а мне бабы молодые гутарют:\n\"Что зто за права?\nКазаков нету, а Гришка приехал и от жены не отходит.\nХучь от него и половинка супротив прежнего осталась а мы за зту половинку подержались бы с нашим удовольствием\" .\nЯ им говорю: \" Нет, бабочки.\nГриша наш только на чужих хуторах на короткую ножку прихрамывает.\nА дома он за Натальин подол держится без отступу.\nОн у нас с недавней поры святой стал\" .\nНу и сука ты !\nЯзык у тебя — чистое помело.\nУж какая есть\nА попадись мне, я бы такого храброго, как ты , в страх привела.\nЗдравствуй, Аксинья дорогая.\nЗдравствуй.\nДавно мы с тобой не видались\nДавно.\nЯ уж и голос твой позабыл.\n— Скоро.\n— Скоро ли?\nНеужели нам с тобой и погутарить не об чем?\nЧего ж ты молчишь\nВидно, мы свое отгутарили.\nОй ли?\nДа так уж, должно быть Деревце один раз в году цветет.\nДумаешь и наше отцвело?\nА то нет?\nЧудно все как-то.\nА я, Ксюша, все тебя от сердца оторвать не могу.\nИ дети у меня большие, и сам наполовину седой,\nа все думается о тебе.\nВо сне тебя вижу и люблю доныне.\n— А начну вспоминать ..\n— Я тоже...\nМне тоже надо идтить Загутарились мы .\nА ить наша любовь у зтих мостков и зачиналась\n— Помнишь — Все помню!\n— Даша.\n— Кто зто?\nЗто я, Аксинья .\nПодойди на-час.\n— Чего зто я тебе понадобилась — Дюже нужна.\nЧего зто?\nНикак, кольцо?\n— Мне, что ли?\n— Тебе.\nОт меня в память\nЗолотое.\nНоси.\nНу, спаси Христос.\nЧего нужно, за что даришь\nВызови мне...\nвызови Григория вашего.\nОпять что ли?\nМне с ним погутарить надо, может он Степану бы отпуск исхлопотал.\n— А чего ж к нам не зашла?\n— Наталья могет подумать ..\nНу ладно, вызову.\nМне его не жалко.\nКто?\n— Здорово.\nКошевой дома?\n— В чем дело?\nБеда.\nСердобский полк восстал.\nПехота разоружила батарею.\nА зараз возле церкви митинг.\n— А Кошевой где?\n— Уехал в Усть-Медведицкую.\nЯ еще вчера по разговорам понял, куда клонят.\nСобирайся.\n— А где остальные коммунисты ?\n— Кто их знает.\n— Коммунисты , на митинг.\n— Идем.\nОружие можно оставить Не в бой идете.\nСлава рядовому бойцу!\nМолчать\nМолчать\nМолчать\nКрасноармейцы !\nПозор вам!\nВы предаете власть народа!\nВ самый тяжелый момент!\nВас продали казачьим генералам!\nВаши командиры — изменники!\nБрехня!\nОпомнитесь\nВашей рукой хотят задушить рабоче-крестьянскую власть\nНе смей!\nНе смей.\nУбить всегда успеешь\nСлава бойцу-коммунисту!\nВы можете меня убить ..\nДайте сказать\nДайте сказать\nВы можете меня убить но я повторяю вам - опомнитесь\nВаш командир полка...\nОсип Давыдович!\nВас... ввели... в заблуждение.\nНо коммунизм... все равно...\nСмерть Смерть коммунистам!\nВрагам трудового крестьянства!\nБей их!\nГонят!\nВедут!\nВедут пленных!\nВрагов гонят.\nИван Алексеевич гляди-ка какой...\nГляди, Котлярова гонят.\nВижу.\nБессовестными глазами глядит.\nДовольно, хватит им.\nНагулялись\nЗемельки захотели, а?\nВашего хуторца пригнали.\nПокрасуйтесь на него, на сукиного сына.\nА другой-то, Кошевой Мишка, где?\nОдин ваш хуторец.\nДа по куску на человека и знтого хватит растянуть\nНу-ка, сосед.\n— Здорово, кум.\n— Здорово, кума Дарья .\nА расскажи-ка, родненький куманек, как ты кума своего, моего мужа Петра Пантелеевича убивал-казнил.\nНет, кума Дарья .\nНе казнил я его.\nКак зто не казнил?\nИть зто же вы с Мишкой Кошевым казаков убивали.\nБыл я в том бою.\nБыл!\nДашка, что ты ?\n!\nСвоих побьешь\nАх ты , сука.\nНа какую-то веревку заперлись\nДома-то есть кто?\nЧего зто ты ?\nМать Наталья где?\nДа чего у вас тут?\nПленных давно прогнали?\nПобили их.\nОй, Гриша!\nДашка наша, стерва проклятая, сама Ивана Алексеевича стрельнула!\nЧего ты брешешь А Штокман?\nКошевой?\nНе было их с пленными.\nА маманя забоялась с Наташкой в хате спать к соседям ушла.\nА Дашка откель-то пьяная пришла, пьянее грязи.\nЗараз около амбара спит.\nГадюка!\nЗдравствуйте, господа старики!\nЗдравия желаем, ваше превосходительство!\nМилости просим принять хлеб-соль от казачества.\nБлагодарю вас.\nПрошу.\nВы видите, на хуторе остались только старики, бабы и мальчишки, которые не могут носить оружия.\nНачинайте.\nВсе казаки сражаются на разных Фронтах за наше общее дело.\nМелехова Дарья ТимоФеевна!\n— Мелехова!\n— Тута я!\nЧто?\nА, да...\nВы - вдова убитого хорунжего Мелехова?\nДа.\nСейчас вы получите деньги, 500 рублей.\nПравительство Дона благодарит вас за выказанное вами высокое мужество и просит принять сочувствие.\nМне можно идти?\nДа-да, разумеется.\nМы награждаем женщин, проявивших в боях с большевиками большое мужество.\nПервая из награжденных мною — жена оФицера — сама убила прославившегося жестокостью комиссара.\nГосподи!\nЗа что зто тебе?\nЗа кума Ивана Алексеевича, Царство небесное сукину сыну.\nА знто... за Петю.\n— Куды тебе их?\n— Чего куды ?\n— Деньги куды денешь — Куды хочу, туды и дену.\nЗто, маманя, Петю поминать\nВселенскую панихиду закажите, кутьи наварите.\nА мне бы теперича ишо крестов нахватать и сейчас в генералы !\nОФицеры -то все на Фронте, а кто будет стариков обучать маршировке?\nВот их и предоставят под мою команду, а я уж с ними, со старыми чертями, управлюсь\nВот как я буду ими командовать\nСтарики, смирно!\nБороды поднять выше!\nКругом, налево шагай!\nИ пошли мои старички.\nАть-два, ать-два.\nНе балуйся.\nПодуй.\nОй, Господи...\nЧего зто ты ?\nНу, будя, будя...\nСкоро помру я, Натаха.\nДа полно тебе, чего мелешь\nТы меня шибко не целуй.\nПочему?\nЗаразная я.\nДоигралась ..\nДа ты не боись так-то уж не пристанет.\nВот что, Натаха, хочу повиниться перед тобой.\nМне ить так и так не жить\nЧье колечко?\nДа ты погоди обмирать-то.\nКольцо-то знаешь чье ?\nДа, соседки Аксиньи .\nА за что она мне его подарила, ну-ка, прикинь\nЗа то, что Гришу к ней вызывала.\n— А ты и не догадывалась — Догадывалась\nА догадывалась чего ж ты у него не допыталась\nХочешь я у Аксиньи все допытаю?\nОна мне все дочиста расскажет.\nНе хочу я твоей услуги.\nИть не из жалости ты призналась что сводничала, а чтобы мне тяжельше было.\nВерно.\nРассуди сама, не мне ж одной страдать\nА ты своего дюже любишь\nКак умею.\nЗначит, дюже.\nА мне вот не приходилось\nМне бы теперича сызнова жизню начать ..\nМогеть и я бы другой была?\nПримечаю я за тобой, опять ты не такая стала.\nАль с Гришкой у вас что получилось\nОн, маманя, опять с Аксиньей живет.\nЗто... зто откуда ж известно?\nВерно, маманя, чего уж там...\nНе доглядела ты за ним.\nС такого муженька глаз не надо сводить\nЧего ж его, к юбке привязывать\nНаполовину седой стал, а старое не забывает.\nЗто и вся беда?\nКакая вы , маманя...\nИ чего ж ты надумала?\nА чего ж окромя надумаешь\nЗаберу детей и уйду к своим.\nБольше жить с ним не буду.\nСмолоду и я так думала.\nМой-то тоже был кобель не из последних.\nКуды прийдешь Кому ты нужна?\nДа ишо детишек от отца забирать Как зто?\nИшо сама тяжелая, третьего ждешь\nНет, не велю и слухать не буду.\nНет, маманя, жить я с ним боле не буду.\nИ родить от него боле не буду.\nИ поворачивается у тебя язык, у бессовестной?\nНу хватит.\nВсех слез не вычерпаешь оставь и для другого раза.\nГосподи!\nВсю душень он мою вымотал!\nНету боле мочи так жить Господи, покарай его!\nСрази его там насмерть чтобы боле не жил он, не мучил меня!\n— Опамятуйся!\n— Господи, покарай, накажи!\nСтановись на колени.\nСлышишь Наташка?\n!\nПроси у Бога прощения.\nПроси, чтобы не принял Он молитву.\nКому ты смерти просишь Родному отцу своих детей.\nОх, великий грех...\nКрестись Кланяйся в землю.\nГовори: \" Господи, прости мне, окаянной, мои прегрешения\" .\nЗн-ци-кло-пе-ди...\nЗнциклопедия.\nСтой.\nА вот тута?\nПоваренная книга.\nГде Наталья ?\n— Что?\n— Наталья где?\nСобрала узелок и ушла.\n— Когда?\n— Утром.\nА чего она гутарила?\nКакой узелок?\nДа почем я знаю?\nВзяла чистую юбку, еще что-то и ушла, ничего не сказала.\nГоловушка горькая...\nБеда-то какая...\nБеда-то какая!\nБати нету?\nЧто же ты с собою сделала?\n!\nНе шумите, маманя.\nМне бы лечь\nНичего, ничего...\nГоре ты мое...\nЧего стоишь Постель готовь\nСымите чистую одежу, постелите чего похуже.\nМолчи, молчи.\nУйди и не показывайся сюда!\nНе дело тебе тут отираться.\nЗараз запрягай, езжай в станицу за Фершалом.\nВыдумаешь чертовщину.\nЧего еще поделалось\nНаталья ...\nАх, паскудница!\nЧего надумала, а?\n!\nБатя, не входи ради Христа.\nНаработала, чертова дочь\nОдурел, проклятый?\n!\nКуды ты лезешь\nЧего возишься, как жук в навозе?\nНаташка помирает, а он возится.\nЗапрягай, а то сама поеду!\nТю, сдурела!\nТебя еще не слыхали, короста липучая.\nТоже еще, на отца шумит, пакость\nУкройте мне ноги шубой.\nКак помру я, маманя, наденьте на меня юбку зеленую, знту, какая с прошивкой на оборке.\nГриша любил, как я ее надевала.\nНе плачьте, маманя...\nНичего...\nВот ты гутарила, Дашка, что тебе помирать скоро.\nТебе ишо жить да жить\nА мой час пришел.\nМаманька, ты чего?\nЗахворала твоя маманька.\nПодойди ко мне, жаль моя.\n— Мамань ужинать будешь — Не знаю.\nДолжно быть нет.\nНу тогда я тебе сюда принесу, ладно?\nНагнись Мишенька.\nИстый батя...\nТолько сердцем не в него... помягче...\nНу-ка, дай.\nГригорий Пантелеевич, шибко не гони, не убей коня.\nГригорий Пантелеевич!\nПропал конь\nНе уберегли...\n\"Правь Британия, морями!\" .\nЗа вашу родину, мистер Кзмпбелл.\nАх, какая зто страна, подъесаул.\nВот вы представить себе не можете, а я жил там.\nВыпьем.\nВот мистер Кзмпбелл не верит, что мы справимся с красными.\n— Не верит?\n— Не верит.\nОн плохо отзывается о нашей армии и похваливает красных.\nПроклятый коньяк.\nКрепок, как спирт.\nНемногим слабее.\nА вы мне нравитесь подъесаул.\nНу что вы такой грустный?\nЧто случилось подъесаул?\nУ меня недавно жена померла.\nДа, зто ужасно.\nА почему он красных уважает?\nУважает?\nА кто сказал \" уважает\" ?\nВы сказали.\nНе может быть\nОн не может их уважать Я сейчас спрошу у него.\n— Чего он болтает?\n— Сейчас.\nОн видел, как они в пешем строю, обутые в лапти, шли в атаку на танки.\nИ зтого довольно.\nОн говорит, что народ нельзя победить\nДурак.\nВы ему не верьте.\n— Как не верить — Вообще не верьте.\n— Зто как?\n— Надрался и болтает ерунду.\nПочему зто народ нельзя победить\nЧасть его можно... уничтожить\nА остальных привести в исполнение.\nКак я сказал?\nИсполнение?\nНет, в повиновение.\nЗнаешь что я тебе скажу?\nЕзжай-ка ты поскорее домой.\nПока тебе здесь голову не свернули.\nВ наши дела вам незачем мешаться.\nЕзжай, пожалуйста, а то тебе здесь накостыляют.\n— Слышишь бабка, музыку-то?\n— Какую музыку-то?\nА вот что на одних басах играет.\nСлыхать слышу, да не пойму, что зто такое.\nСкоро поймешь Зто из орудиев бьют.\nУ наших стариков потроха вынают.\nКак встанет Дон, погонят нас красные до самого моря.\n— Зто куды ж?\n— На Дон, искупаться.\nКакое ишо нынче купание?\nНичего, маманя.\nО, Господи...\nПоди погуляй на баз.\nНа улицу не ходи, а то стопчут.\nМишатка, поди сюды .\nРодный мой!\nОй, Григорьевич!\nХороший мой!\nКак же я по тебе соскучилась ..\nДура твоя тетка Аксинья .\nОй, какая дура!\n— Не гляди на меня.\n— Чего зто?\nНе гляди, не люблю.\nЗто с каких пор?\nС таких.\nЛадно, пойду так.\n— Здорово, Машутка.\n— Здорово.\nПрощай, Дуняха!\nТы чего, Дашка?\nВылазь\nДарья !\nДашка утопла!\nДашка утопла!\nДашка утопла!\nБатю давно на Фронт забрали?\nНедавно.\nОн было упрятался, да Митька Коршунов доказал.\nВот какие ноне свояки пошли.\n— Какой он нам свояк?\n— Зверь чистый зверь\nСтаруху Кошевую зарубил вместе с ребятами.\nЗто Мишке отомстил?\nИ никто не вступился?\nКто ж заступится-то?\nУ каждого свое.\nМеня не было.\nОх и постарел ты , братуха.\nСерый какой-то стал, как бирюк.\nМне так и полагается.\nМне — стареть тебе — в пору входить жениха искать\nТолько вот чего я тебе скажу.\nО Мишке Кошевом и думать позабудь\nТы не гляди, что я его старуху пожалел.\nЗто одно к одному не касается.\nУслышу, что ты об нем сохнуть будешь на одну ногу наступлю, за другую возьмусь и раздеру.\n— Ехать когда думаешь — Завтра.\nЯ вот что...\nЯ думаю Аксинью Астахову взять с собой.\nСупротив ничего не имеешь\nА мне-то что?\nБери хучь двух Аксиньев.\nКоням будет тяжеловато.\nНа холеру она тебе сдалась\nЗто тебя не касается.\nНу, война кончилась\nПихнули нас красные так, что до самого моря будем пятиться покуда не упремся задницей в соленую воду.\nЧего оскаляешься-то?\nНевеста, да и только.\nРада, что с хутора вырвалась\nА то, думаешь не рада?\nНашла радость Глупая ты баба.\nИшо не видно, чем зта прогулка кончится.\nМне хуже не будет.\nМолчала бы .\nМуж-то где?\nСхватилась с чужим дядей и едешь черт-те куда.\nА ежели зараз Степан на хутор заявится, тогда как?\nЗнаешь чего, Проша, ты бы в наши дела не путался, а то и тебе счастья не будет.\nДа не ругайтесь вы по-первам.\nДорога дальняя, ишо успеете.\n— Гриша!\n— Тут я, тут.\nНу, тут я, Ксюша.\nГриша...\nБеда, Гриша.\nГриша...\nТут я.\nТут я, Ксюша.\nЗакрывайте дверь плотнее.\n— Зто жена ихняя будет?\n— Жена.\nИ дети есть\nИ дети есть все есть одной удачи нам нету.\nСлухай, друг, пособи моей беде ради Христа.\nВезти дале ее нельзя, помрет.\nДозволь оставить ее у вас.\nЗа догляд заплачу сколько положите.\nСамо собой.\nДаром кто будет за ней уход несть\nТут такое дело, сам не знаешь как управиться.\nНе откажи, сделай милость Век буду помнить ваши заботы .\nНу а сколько бы вы положили за уход?\nСколько вам будет не жалко?\nВсе, какие есть\nИ что зто за деньги?\nНиколаевских у вас нету?\nНету.\nМожет, керенки есть\n— Зти уж больно ненадежные.\n— Керенок нету.\nХошь коня своего оставлю?\n— Бери.\n— Бери...\nНе белые, так красные все одно заберут, пользы никакой.\nЧего?\nЧего?\nНа.\nЗадавись\nЛадно, сделаем уважение.\nКогда воевали — нужны были, а зараз мы им ни к чему.\nНу их к черту, пойдем отсюда.\nДавай подадимся до ТиФлиса, а оттуда к туркам.\nНадо ж как-то спасаться.\nЧего ты , как рыба, снулый?\nНет, не поеду.\nНе к чему.\nДа и поздновато трошки.\nГляди.\nКрасные.\nЗдравствуй, соседушка.\nДолго ж ты пропадала в чужих краях.\nТы чего воззрилась на меня и молчишь\nАль плохие вести принесла?\nГригорий-то...\nОн когда оставил тебя, не хворый поехал?\nНет, он не хворал.\nИ на том спасибо.\nНе может быть чтобы лишилась я последнего сына.\nНе за что Богу меня наказывать\nВы не печалуйтесь об нем, бабушка.\nРазве такого хворость одолеет?\nДа он крепкий, прямо как железный.\nТакие не помирают.\nО детишках не вспоминал?\nИ о вас и о детишках вспоминал.\nЗдоровые они?\nЧего им подеется.\nА Пантелей ПрокоФьевич помер в отступе.\nОстались мы одни.\nНу, прощай.\nОбживешься — зайди к нам, проведай.\nМожет, узнаешь что про Григория — скажи.\nХорошо, бабушка.\nЗдорово, тетка Ильинична.\nНе ждала?\nЗдорово.\nА ты кто такой мне, чтобы я тебя ждала?\nНашему забору двоюродный плетень\n— Как-никак, знакомы были.\n— Только и всего.\n— Я ить не жить к вам пришел.\n— Зтого ишо недоставало.\nА Евдокия Пантелеевна где ж?\nПрибирается.\nБольно ранний ты гость добрые люди спозаранок не ходят.\nСоскучился, вот и пришел.\nЧего уж тут время выбирать\nОх, Михаил, не гневил бы ты меня.\nЧем же я вас, тетенька, гневлю?\nКак у тебя совести хватает приходить к нам, бесстыжий?\nИ ты ишо спрашиваешь !\nКто Петра убил?\nНе ты ?\nНу, я.\nОпосля зтого кто ж ты есть\nИ ты идешь к нам, садишься, будто...\n— Ну, здравствуй.\n— Здравствуй.\nСтупай воды принеси.\nКак только твои глаза на меня глядят?\nНе с чего моим глазам зажмуряться.\nА ежели б Петро меня поймал, чего бы он сделал?\nОн ведь тоже меня убил бы .\nНе для того мы на знтих буграх сходились чтобы нянькаться один с другим.\nНа то она есть война.\nВраг он есть враг, а на врага у меня рука твердая.\nЧерез зту твердость ты и прожелтел весь\nСовесть небось точит.\nКакая совесть Лихоманка меня замучила.\n— А то бы я их, мамаша...\n— Какая я тебе мамаша?\nДушегуб!\nУходи отсель\nУходи!\nЗрить я тебя не могу.\nА Митька Коршунов, свояк ваш, не душегуб?\nА Григорий кто ж?\nПро сынка-то вы молчите.\nА уж он-то душегуб настоящий, без подмесу.\nТраву в лугу косить думаете?\nЛюди уж поехали за Дон.\nНам и переехать не на чем.\nБаркас с осени стоит, рассохся.\nНадо бы спустить его на воду.\nА кто ж его спустит?\nА конопи-то есть у вас?\nДолжно, остались ишо.\nПойду погляжу.\n— А, тезка, здорово.\n— Здорово.\nЧего ты будешь делать\nЧего я буду делать Баркас вам наладить надо.\nА грабельки маленькие сделаешь\nСделаю.\nТы чего?\nМихайло Григорьевич, тезка, принеси дерюжку, я ляжу.\nБабаня!\nБабаня!\nДядя Михаил лег под сараем и так дрожит, ажник подсигивает.\nТы чего молчишь бабаня?\nСнеси ему, антихристу, одеяло, нехай накроется.\nЛихоманка его бьет.\n— Донесешь — Донесу.\nПостой!\nНе неси.\nДуня!\n— Прохор Зыков вернулся.\n— Да что ты ?\n!\nРаненый.\nЯ побегу, может, чего скажет про Григория.\nЗдорово, односумка!\nНе чаял живой тебя увидать\nЗдравствуй, Проша.\nНу как он, тиФок, прихорашивает вашего брата?\nНу проходи, садись Гостем будешь\nПогутарим, покуда моей бабы нету.\nЯ ее за самогонкой снарядил.\nА меня видишь как шляхи обработали, в рот им дышло!\nТы бы сказал...\nЗнаю, скажу.\nВот так велел кланяться.\nЧего ж ты кричишь глупая?\nВот бабы !\nУбьют — кричат, живой остался — опять кричат.\nДа утрись Говорю тебе, живой, здоровый, морду во какую наел.\nМы с ним в Новороссийске поступили в Конную армию товарища Буденного.\nЛадно.\nПринял Григорий Пантелеевич сотню.\nЗскадрон.\nЯ при нем состою.\nИ прямиком на Киев.\nЧто ж он, может, в отпуск...\nИ думать не моги.\nГоворит, буду служить до тех пор, пока прошлые грехи замолю.\nИз боя не выходит.\nБлагодарность ему была.\nВот он какие котелки выкидывает, твой Пантелеевич.\nСадись чай пить будем.\nДа нет, я...\nНу беги, звони по хутору.\nЧегой-то вы , маманя?\nА зто я, Дуняшка...\nЗто... войдешь с база, глянешь легче делается.\nКак будто он уже с нами.\nМаманя, благословите меня за Михаила.\nОпять ты !\nНету тебе моего благословения.\nНе отдам тебя за него.\nТогда я уйду.\nОпамятуйся ты !\nЧто ж я одна с детишками буду делать\nПропадать нам?\nКак знаете, маманя, а я все одно уйду.\nНа хуторе гутарят:\n\"Аль наняли Михаила в работники?\"\nЗтой иконой меня покойница мать благословила.\nНу, свое все вынула?\nТо-то...\nМое не захвати.\nЧего зто вы смертное приготовили?\nРано вам ишо о смерти думать Господь с вами.\nНет... пора мне.\nДетишек береги, соблюдай, пока Гриша возвернется.\nА я уж, видно, не дождусь\nНу а к чему идтить в церковь\n— Аль нельзя так?\n— Нет, Миша, не проси.\nМаманя и так благословила со слезьми.\nНельзя так.\nОх, девка...\nИ чего мне с тобой делать\nГришенька!\nРодненький мой!\nКровинушка моя!\nПомирать собралась маманя.\nЧего тебе?\nНу, старик, получай вольную.\nПереизбрали тебя.\nМеня назначили.\n— Слава тебе, Господи.\n— Сдавай дела.\nВот тебе, соколик ты мой, бумажки.\nВот тебе ишо бумажки.\nВо!\nБумажки.\nА вот тебе...\nВо!\nХуторская печать\nЗабери ради Христа все зто.\nА мне куды уж?\nВосьмой десяток живу, мне с Богом пора беседовать а меня председателем назначили.\n— Секретарь где?\n— Ась\n— Секретарь говорю, где?\n— В поле жито сеет.\nС Егорьего дня глаз не кажет.\nПридет бумага какая важная, а его с собаками не сыщешь\nЯ-то с трудом расписываюсь а читать и вовсе не могу.\nПечать становить могу.\nВот и все хуторское хозяйство.\nДенежных суммов нету.\nА атаманской насеки при Советской власти не полагается.\nВот коли хочешь могу тебе свой костыль отдать\nНу, дед, будем считать что дела от тебя я принял.\nТеперь катись отседова к едреной бабушке.\n— Куды ?\n— Домой иди!\nА, ну ладно.\nЯ тебя сразу признал.\nКошевого, покойника, сын?\n— Он самый.\n— Ну, будь здоров.\nСтупай, ступай.\n— Чего зто ты ?\n— Гриша приехал.\nС радостью тебя.\n— Ну, здравствуй, Миша.\n— Здравствуй, здравствуй.\nДавно мы с тобой не видались Будто сто лет прошло.\nДа, давненько.\nС прибытием тебя.\nСпасибо.\nПороднились значит?\nПришлось Чего зто у тебя кровь на щеке?\nБритвой порезался, спешил.\nТы чего?\nХочу позвать кого-нибудь валушка зарезать\nНадо хозяина встретить как полагается.\nСкажи Прохору Зыкову, чтобы в землю зарылся, а достал самогонки.\nОн в знтом деле лучше тебя разберется.\nПокличь его вечерять\nНу... хозяйка?\nГригорий Пантелеевич!\nГригорий Пантелеевич!\nМилушка ты мой!\nВот и не чаял, и не думал дождаться.\n— Совсем пришел?\n— Совсем, вчистую.\nДо какого ж чина дослужился?\nБыл помощником командира полка.\nЧего ж так скоро тебя отпустили?\nНе нужен стал.\nЧерез чего ж зто?\nНе знаю, должно, за прошлое.\nА Михаил где?\nНа базу.\nПлатона Рябчикова с месяц назад расстреляли.\n— Что ты говоришь — Истинный Бог.\nПотом погутарим.\nЧто ж, товарищ командир, выпьем!\nЗаходи, Ксюша.\nСадись гостем будешь\nЗдравствуйте.\nЗдравствуй, Ксюша.\nСадись\nОдносумка!\nКсюша!\nВместе отступали, вместе вшей кормили.\nВыпей за здоровье Григория Пантелеевича.\nТы его не слухай, он уж набрался.\nС приездом вас, Григорий Пантелеевич.\nА тебя, Дуняшка, с радостью .\nА тебя с чем?\nС горем?\nИ меня с радостью .\nС великой!\nТяни ее всю до капельки, ради Христа.\nУмеешь сказать прямо, умей и пить прямо.\nМне нож вострый в сердце, когда остается.\nТы , Михаил, в зтом деле хуже, чем телок.\nА я в напитках толк знаю.\nВот есть такое вино — не успеешь пробку вынуть а оттуда пена идет, как из бешеной собаки.\nЯ в ту ночь до трех раз с коня падал, как ветром сдувало.\nТакое вино бы натощак по стакану.\nНу, как ты ?\nОх, всего не перескажешь\n— Придешь — Приду.\nКувшин с собой не возьму.\nДуша не дозволяет ходить с порожней посудой.\nЗараз приду, жена зачнет меня казнить\nТы до дому-то дойдешь\nРаком, а доползу.\nАли я не казак, Пантелеевич?\nДаже очень обидно слухать\nСтой.\nЧто ж, потолкуем, Михаил?\nДавай.\nЧто-то у нас не так.\nНе по душе тебе мой приезд, так, что ли?\nТак.\nНе по душе.\n— Почему?\n— Лишняя забота.\nЯ думаю сам прокормиться.\nЯ не об зтом.\nТогда о чем же?\nВраги мы с тобой.\n— Были.\n— Да, видно, и будем.\nПочему?\nМного ты наших бойцов загубил.\nЧерез зто не могу так легко на тебя глядеть\nЗтого из памяти не выкинешь\nКрепкая у тебя память\nТы брата Петра убил, а я тебе что-то об зтом не напоминаю.\nЕжели все помнить — волками жить\nПоглядел бы я на тебя, как бы ты со мной разговаривал, ежели б зараз кадетская власть была, ежели б вы одолели.\nРемни, небось со спины вырезывал бы .\nЗто ты зараз такой добрый.\nМожет, кто и резал бы ремни, а я поганить руки об тебя не стал бы .\nВыходит, разные мы с тобой люди.\nСроду я не стеснялся об врагов руки поганить и зараз не сморгнул бы при нужде.\nПить будешь\nДавай, а то дюже трезвые мы стали для такого разговору.\nТак чего ж ты , Михаил, боишься, что я буду против Советской власти бунтовать\nНичего я не боюсь а между прочим думаю:\nслучись какая заварушка, и ты переметнешься на другую сторону.\nНикуды я не переметнусь\nЯ свое отслужил.\nНикому боле не хочу служить\nНавоевался я за свой век предостаточно.\nИ уморился душой страшно.\nВсе мне надоело, и революция, и контрреволюция.\nПропади оно все пропадом.\nХочу пожить возле своих детишек, заняться хозяйством.\nВот и все.\nНу, зто, брат, ишо не все.\nРевтрибунал не будет спрашивать чего ты хочешь\nВ Вёшенскую когда поедешь на учет?\n— Как-нибудь днями.\n— Надо ехать завтра.\nДенек отдохну.\nНе убегу же я.\nЧерт тебя знает.\nЯ за тебя отвечать не хочу.\nДо чего ж ты сволочной стал.\nТы меня не сволочи.\nЯ к зтому не привык.\nЗти, знаешь оФицерские повадки бросать надо.\nОтправляйся завтра же, а ежели добром не пойдешь — погоню под конвоем, понятно?\nТеперь мне все понятно.\nМилый ты мой Гришенька...\nСколько у тебя волос-то седых в голове...\nСтареешь стал быть\nКаким же ты парнем был!\nДуняшка.\nБратушка!\nУходи зараз!\nК нам из станицы четверо приехали, говорят, будто тебя арестовать надо.\nСпасибо, сестра.\nХлеба скорей!\nДа не целый, краюху!\nСтупай, а то заметят, что ушла.\nПрощай.\nПрощай.\nСкоро подам вестку, Прохор скажет.\nДверь запри.\nЕжели спросят, скажи, ушел в Вёшки.\nНу, прощай.\nГриша...\nСтой!\nСтой, сукин сын!\nТы кто такой?\nКоммунист?\nРуки из карманов вынай, а то голову срублю!\n— Иди вперед!\n— Куда?\nВперед!\nРуки за спину заложи!\n— А вы кто такие?\n— Православные.\nШагай.\nМелехов!\nЗдравствуйте.\nВот уж воистину степь широкая, а дорога узкая!\nОткедова ты взялся-то?\n— Здорово.\n— Здорово.\nРаздевайся, садись\nГде же мои ребята тебя сцапали?\nВозле хутора.\nКуда шел?\nА куда глаза глядят.\nДумаешь мы тебя словим и в Вёшки повезем?\nНет, брат, нам туда дорога заказаная.\nНе робей.\nМы перестали Советской власти служить\nРазвод взяли.\nДумаю все-таки поднять казаков.\nПрекрати мотаться.\nЯ кому сказал?\nСлухом пользуемся, кругом война идет, всюду восстания.\nИ в Сибири, и на Украине, и даже в самом Петрограде.\nВесь Флот восстал в крепости... ну, как ее...\nВ Кронштадте.\nИдиот.\nНу, что же надумал?\nГовори, да давай ложиться спать\nВ чего говорить\nС нами идешь или как?\nВсю жизнь по чужим катухам не прохоронишься.\nВот зто ты верно сказал.\nДеваться некуда.\nВступаю в твою банду.\nЗто мы банда?\n!\nТы зто название брось Почему зто — банда?\nЗто название нам коммунисты дали, а тебе его говорить негоже.\nПросто восставшие люди.\nКоротко и ясно.\nЛадно, будя.\nКоня тебе своего отдаю.\nУ меня есть запасной.\nТот, рыжий.\nКазаки, на собственной шее вы почувствовали, какие тяготы возложила на хлеборобов советская власть\nВы дойдете до окончательной разрухи, если советскую власть не свергнуть\nЗдорово!\nВот оно, мое войско!\nЧерту рога можно сломать с такими ребятами.\nСоветской власти не жить\nА тебе?\nКончай.\nПлетешь невесть что.\nСтаничники!\nУчись как надо.\nСтаничники!\nМы с нынешнего дня освобождаем вас от продразверстки.\nХлеб больше не возите на приемные пункты !\nПора перестать кормить коммунистов-дармоедов!\nОни жир нагуливали на вашем хлебе!\nНо зта чужбинка кончилась\nВы — свободные люди!\nВооружайтесь и поддерживайте нашу власть\nКазаки, ура!\nТвоя власть хорошая, а мыла ты нам привез?\nА сами чьим хлебом кормитесь\nНебось побегут по дворам побираться.\nУ них шашки, они курам головы порубят.\nКак зто — хлеб не возить\nНынче вы тут, завтра вас не сыщешь а нам отвечать\nНе дадим вам наших мужьев!\nВоюйте сами.\nА кто с ними пойдет?\nНе к чему бунтовать\nНужды нет.\nПора подходит убирать а не воевать\nДа, а знтот усы распушил, разъезжает на конике, народ мутит.\nУчитель нашелся!\nЧего молчишь рыжее мурло, аль неправду я гутарю?\nЦыц, рябая стерва!\nТы еще тут агитацию разводишь !\nУ, зараза большевистская!\nЯ из тебя дурь выбью !\nПрикажу задрать тебе подол да всыпать шомполов, тогда доразу поумнеешь\nА зтого ты не видал, Аника-воин?\nМеня?\n!\nПороть !\nА в носе у тебя не кругло!\nИшь ты , царь-освободитель\nНа конь Красные!\nЗто ишо мы поглядим!\nЯ оружие не сложу.\nСадитесь вечерять разбойнички.\nЯ идейный борец против советской власти.\nА ты меня обзываешь чер-те по-каковски.\n— Правильно обзывает.\n— Правильно?\nДа ты понимаешь дурак, что я сражаюсь за идею?\nТы мне голову не морочь Тоже нашелся идейный.\nРазбойники, и боле ничего.\nКакая бы Советская власть ни была, а с 1 91 7 года держится.\nИ кто супротив нее выступает, тот и есть разбойный человек.\nПрекрати жрать\nТы не один пока.\nИшо нас четверо.\nА один уйдет, троим боле достанется.\nЧто?\nТы что?\nБежать\nБежать мне некуда да и не от кого.\nА уйтить — все одно уйду и не удержишь\nМелехов, брось\nСтрелять буду!\nНе будешь побоишься.\nВам тут тихо жить надо.\nЗдравствуй, Ксюша!\nПогоди.\nТихо.\nНе отпирай дверь я через окно.\nКак же ты ?\n..\nКак пришел, где пропадал?\nА ежели поймают тебя, Гришенька?\nНе бойся, не поймают.\nПоедешь со мной?\nКуда?\nНа юг, на Кубань али дальше.\nПроживем, прокормимся как-нибудь Никакой работы не погнушаюсь\nМоим рукам работать надо, а не воевать Едешь\nА как бы ты думал?\nКак бы ты думал?\nПеши пойду, поползу следом за тобой.\nНет мне жизни без тебя, Гришенька!\nА дети?\nНа Дуняшку оставим.\nОпосля заберем и их.\nЕдешь\nГриша!\nКогда-то мы с тобой в Ягодное вот так же шли.\nТолько тогда узелок был поболее, да и сами мы были помоложе.\nК чему ты при оружии едешь На что оно тебе сдалось\nВот отъедем, тогда брошу.\nВсе брошу, Ксюша.\nВерхом-то удержишься?\nГосподи, тут хучь как-нибудь\nВыберемся из яра — пойдем наметом.\nНе будет так тряско.\nСтой!\nКто едет?\nСкачи, Ксюша!\nПригинайся ниже!\nСтой!\nКажись попал.\nРади Господа Бога!\nХоть слово!\nДа что же зто ты ?\n!\nТы чего здесь делаешь\nКто ж там?\nЖена.\n— Куды ж идешь — Легкую жизнь шукать\nМожет, и ты со мной?\nЛегкую?\nНет.\nСтупай один.\nА ты куды ж теперича?\nДомой, что ль\nДомой.\nХочешь бери коня.\nСпаси Христос.\nСчастливо.\nМишатка!\nСынок!\nСынок...\nСынок!\nВо мраке древнего мира, на берегу забытом самим временем, - есть сумеречная зона между жизнью и смертью.\nТам пребывают те, кто обречён скитаться по земле вечно - ходячие мертвецы.\nИзвините, мисс Джен.\nСэм, я думала ты уже знаешь каждую кочку на этой дороге\nЯ то знаю, мисс Джен, но здесь кроме как по кочкам ездить и нельзя.\nЧто ж, я рада, что Африка совсем не изменилась.\nЯ боялась, что спустя 10 лет я бы ехала по первоклассному шоссе с драйв-инами по обеим бокам.\nВ этой части Африки немного изменилось, мисс Джен, - ни за 10 лет, ни за 50.\nСэм!\nСэм.\nОстановись, ты сбил человека!\nЭто был не человек.\nЭто был один из этих.\nЯ очень сожалею, мисс Джен, но я не мог затормозить.\nВот стоит ваша бабушка.\nОна скажет вам, что я был прав.\nОна ждёт вас.\nТы дрожишь.\nМы сбили человека.\nПроехали по нему на дороге меньше, чем в миле отсюда\nСэм даже не остановился.\nЯ видел его, мэм.\nНа нём были водоросли.\nОн стоял прямо посередине дороги и пытался остановить машину.\nОтнеси вещи мисс Джен в её комнату.\nА как же этот человек?\nОн, вероятно, сильно ранен, или мёртв.\nНа дороге никого нет.\nЗапомни это!\nЯ видела его!\nСэм видел его!\nОн подтвердит.\nЗаходи внутрь, Джен, и освежись.\nТак вы всё так же верите в это вуду?\nЯ думала, что это кошмар из моего детства.\nЯ думала, что теперь будет всё иначе.\nПозже, ты решишь всё для себя сама, Джен.\nМне жаль, что твоя первая ночь после твоего приезда сюда, так началась.\nЗа спокойное плавание, впрочем, мы уже приплыли.\nЯкорь стал на глубине 18 фатомов.\nХорошо, хорошо.\nСпускайте лодку.\nДа, сэр.\nНет, я больше не хочу, спасибо.\nА теперь - за миллион баксов в бриллиантах, который скоро у нас будет.\nТы напиваешься.\nПочему бы и нет?\nЧерез несколько дней, я наряжу твоё прекрасное тело в бриллианты с ног до головы.\nИ что я буду делать с бриллиантами на ногах?\nНе обращай внимания.\nЭто было мило.\nА ты что будешь делать со своими бриллиантами, а Джеф?\nЯ?\nЯ набью ими миленький маленький ящичек, арендованный у Первого Национального банка Нью-Йорка.\nВот это романтично.\nТы перепила портвейна, Мона.\nТвой муж позади тебя.\nЧто, уже не можешь по-дружески поцеловать её без мыслей о том, что из этого может получиться?\nА как насчёт меня, Мона?\nМеня тоже поцелуешь?\nТы не в доле, доктор, и бриллиантов не получишь.\nНу, если бы я знал, что к ним прилагается, то настоял бы на своей доле.\nНу ты послушай его!\nПросто Ромео какой-то.\nЛодка готова, сэр.\nКто здесь?\nНа помощь!\n- Я попал.\nОба раза.\n- Идиот!\nЯ ж говорю тебе, я попал в него, кто бы это ни был.\n- Оба раза.\n- Скорее всего, ты попал в Джонсона.\nЧто?\nОн мёртв.\nЯ не мог в него попасть.\nЯ не настолько пьян.\nЯ не думаю, что ты в него попал.\nУ него шея сломана.\nКто это сделал?\nКто это был?\nЗови сюда остальных.\nДоставим его на берег.\nКто это был?\nТы мне всё равно не поверишь, Джен.\nТакому в школе не учат.\nМне показалось, что это был мужчина.\nЯ видела, как он зашёл прямо в воду.\nЯ пришла посмотреть на прибытие корабля.\nЯ не ожидала их так скоро.\nНо после того, что произошло с вами на дороге, я знала, что они будут сегодня.\nМиссис Питерс?\nЯ доктор Эггерт.\nЯ ждала вас.\nЭто моя правнучка, Джен Питерс.\nКак поживаете, мисс Питерс?\nЭто Джордж Харрисон.\nМиссис Харрисон.\nА это наш ныряльщик, Джеф Кларк.\n- Одного из наших людей только что убили.\n- Я знаю.\nЯ слышала выстрелы и крики.\nЧто здесь происходит?\nЯ писала.\nЯ предупреждала вас об опасности.\nВы имеете в виду эту чепуху про вуду?\nЭто был человек.\nЯ стрелял в него.\nИ вы в него попали.\nИ никакого эффекта, да?\nЯ хочу пойти в полицию.\nОт полиции тут проку не будет, мистер Харрисон.\nОна отсюда далеко.\nНам нужно похоронить беднягу.\n- Сегодня?\n- Ну он же мёртв.\nТак что мы можем его похоронить.\nЕсли полиция захочет потом его выкопать, то это их проблемы.\nУ меня нет гроба, но я найду кого-нибудь, чтобы зашить его в парусину.\nЭто могилы тех, кто первыми пришёл за бриллиантами.\nЭто было в 1906 году.\nОни были британцами.\nПрямо перед тем, как началась война, в 1914 году была немецкая экспедиция.\nХотел бы я знать как они все погибли, миссис Питерс?\nЕщё одна британская группа попытала свою удачу в 1923-м.\nПортугальцы в 1928-м.\nПервые американцы объявились здесь 10 лет спустя, в 1938 году.\nВаша попытка добыть бриллианты - шестая.\nА это чьи могилы?\nПервая - для погибшего моряка.\nА другие для остальных.\nОна пытается нас запугать.\nОна хочет сама заполучить сокровища.\nЯ уже знаю, что тех, кто приходят за бриллиантами нельзя запугать.\nПомогите мне.\nЭта могила, она для меня, я знаю!\nУведите меня!\nПожалуйста.\n- Я положу её в постель.\n- Пускай занимают большую комнату для гостей.\nСогласно расчётам Эггертра, \"Сьюзан Б\" лежит на отмели, на глубине примерно 100 футов.\n- Кстати, а где Эггерт?\n- Он совещается пожилой леди.\nМожет, ему удастся выяснить, зачем старушка побеспокоилась о том, чтобы выкопать могилы заранее.\nЗначит, если отмель не переместилась, то корабль должен находится примерно тут.\nЭта вещь сбивает меня с толку.\nКонечно, она дохристианская, но она не похожа на вещь африканского происхождения.\nВы знаете, ближе из всего, что я видел, она находится к тем фигурам на острове Пасхи.\nВы быстро выбрали жемчужину этой коллекции.\nЯ полагаю, что вы кое-что смыслите в Африке.\nНо только что это за люди с которыми вы прибыли?\nКак я и писал вам, уже 20 лет я изучаю легенду о \"Сьюзан Б\".\nУ мистера Харрисона корабль для водолазно-спасательных работ.\nОн прибыл за бриллиантами.\nЯ прибыл за историей.\nЯ думаю, что умер бы счастливым, если бы мне удалось закончить своё исследование.\nНе то, чтобы я горю желанием занять какую-то из тех могил...\nТолько глупцы боятся могил.\nЕсть вещи и похуже.\nТела здесь нужно хоронить быстро, доктор Эггерт.\n- Вы имеете в виду, из-за климата?\n- Нет!\nМне не нравится объяснять всё дуракам, которые считают, что у меня старческое слабоумие, но вы должны понять.\nХодячие мертвецы?\nВы верите в них?\nИ вы поверите, не пройдёт и недели.\nМой муж, капитан \"Сюзан Б\" Джереми Питерс\n- один из них.\nЭто фото было сделано больше 60 лет назад.\nСейчас он выглядит точно так же, кроме глаз.\nЯ видела его.\nВы знаете историю.\n\"Сьюзан Б\" прибыла сюда для торговли в 1894 году.\nМоряки нашли золотой шлем наполненный необработанными бриллиантами.\nОни украли шлем.\nЗатем была битва.\nДесятеро из них считались погибшими, среди них и капитан.\nОстальные вернулись на корабль со шлемом.\nВскоре десятеро пропавших неожиданно появились.\nЧто-то произошло.\nОстальная часть команды была жестоко убита, а судно потоплено в заливе.\nВы думаете, что десятеро убитых членов экипажа вернулись на свой корабль?\nОни были мертвы, как и мертвы они сейчас.\nНо они до сих пор охраняют эти проклятые бриллианты.\nОдин из них убил сегодня вашего моряка.\nОни убили всех, кто приходил за бриллиантами.\nТак они убийцы!\nВаш муж...\nЯ же говорю - они мертвецы!\nУ них нет понятий о морали, нет свободы воли.\nОн убьют каждого, кто попытается украсть бриллианты.\nА как же вы?\nМеня они не беспокоят.\nОни откуда-то знают, что мне не нужны их драгоценные сокровища.\nУже прошло больше, чем 50 лет как я услышала о том, что моего мужа видели здесь.\nИ я приехала, чтобы это выяснить.\nПостепенно, я собрала воедино всю историю.\nЯ построила этот дом.\nВы хотите быть со своим мужем, этим ходячим мертвецом?\nЯ пришла, чтобы помочь ему обратится в прах и найти вечный покой.\nНо как?\nКак это можно сделать?\nОх, опять эта глупая женщина!\nДжен!\nОгонь!\nЭто единственный способ с ними совладать.\nЕсли вы меня послушаете, я помогу вам добыть бриллианты.\nКуда он ушёл?\nВы его не найдёте.\nЯ убираюсь отсюда.\nБриллианты, или нет, но с меня хватит.\n- Ты останешься.\n- Джордж, ты же видел это!\nЯ пришёл сюда за бриллиантами.\nИ я остаюсь, как и вы все.\nНо если ты знала, что будут такие трудности, убийства, то зачем ты дала им сюда приплыть?\nЯ ничего им не позволяла.\nЭггерт просто написал мне и сообщил, что они прибывают.\n- Ни залив, ни бриллианты мне не принадлежат.\n- Но ты хотела, чтобы они прибыли.\nДа!\nЯ хочу, чтобы они нашли бриллианты, а затем уничтожили их.\nТолько когда они будут уничтожены, твой дедушка обретёт покой.\nУничтожить их?\nНеужели ты думаешь, что Харрисон из тех людей, которые уничтожат бриллианты после того, как добыл их с такими трудностями?\nВыбросит их из-за сказок какой-то старухи про то, как люди умерли 60 лет назад, но ещё не мертвых?\nЕсли они когда-нибудь найдут бриллианты, то они будут рады уничтожить их.\nЯ знаю, что делать.\nИ в этот раз с бриллиантами и ходячими мертвецами будет покончено навсегда.\nПривет.\nРазве вы не испугались, что это мог быть зомби?\nЗомби не курят.\nОни боятся огня.\n- Так вы всё о них знаете?\n- Только то, что мне сказала бабушка.\n- И вы ей верите?\n- Нет.\nТогда кто же ворвался вечером в дом?\nИ кто убил Джонсона?\nЕсли бы я знала.\nЯ хотела попросить вас и остальных уплыть.\nБросьте эту затею пока не убили кого-нибудь ещё.\n- Разве я похож на того, кто испугается зомби?\n- Но Джонсон погиб, погибли и другие, похороненные возле дома.\nОно не стоит того.\nО да, стоит.\nЕсли тех бриллиантов даже вдвое меньше, чем то количество, о котором говорят, то моя доля может быть около миллиона долларов.\n- Это куча денег.\n- Чего они стоят, когда ты мёртв?\nПослушайте, мисс Питерс.\nЯ, может, и паршивый ныряльщик, но зато арифметику я знал на \"отлично\", когда учился в 81-й начальной школе.\nЭто в Нью-Йорке.\nИ вот как это теперь сказывается.\nРаботая ныряльщиком, я обычно зарабатываю 100 долларов в день.\nЕсли повезёт, я работаю 3 дня в неделю.\nЭто 15 тысяч в год.\nПредставляете, сколько лет мне понадобится, чтобы сделать миллион?\n67 лет.\nВам бы лучше возвратиться в школу и узнать сколько стоит 60 лет человеческой жизни.\nИли 50, или 20, или хотя бы 10.\nНу ладно, я вам пообещаю, что если я заработаю этот миллион, или хотя бы половину, то я оставлю свою опасную профессию и никогда больше не нырну ни во что глубже бассейна.\nИли, если и это будет заставлять вас нервничать, мне придётся пристраститься к очень сухому мартини.\nНе смешно?\nВы, кажется, даже не слушали.\nЕсть ещё кое-что.\nСегодня, когда Сэм вёз меня домой, мы сбили на дороге одного из этих людей меньше чем в миле отсюда.\nМы его сильно ударили и проехали по нему.\nДолжно быть мы убили его.\nЯ бы хотела выяснить это.\nЯ тоже.\nМы можем взять машину?\nОни должны боятся света.\nЕсли бы даже я согласился и захотел выйти из игры, то не смог бы.\nЭто не моя затея.\nВсё это оборудование и вложенные деньги\n- Харрисона\nВот почему он забирает три четверти всего, что мы найдём.\nЗдесь, прямо перед нами.\nЯ, кажется, вижу что-то.\n- Это случилось прямо тут.\n- Осторожнее.\nПохоже на воду.\nТочно не кровь.\n- Это произошло здесь?\n- Где-то тут.\n- Может, немного дальше.\n- Давай посмотрим.\nОсколки вашей фары.\nЗдесь вы должно быть с чем-то столкнулись.\n- Что это?\n- Водоросли.\nВода и водоросли?\nДумаете, он пришёл со стороны залива?\nОн внезапно появился на дороге.\nСледы.\nВедут туда.\nЗначит он действительно пришёл со стороны залива\nУдарило его, вероятно, там, где мы нашли стекло и пуговицу.\nЕго отбросило на пару ярдов и он побежал вон туда.\nДавай вернёмся и посмотрим, что ещё мы сможем там найти.\nДжен, ты иди по этой стороне дороги, а я пойду по другой.\nСмотри, может, тебе попадутся ещё следы.\nДжеф!\nОн просто поднялся и ушёл.\nЯ бы хотел пойти по этим следам.\n- Сегодня?\n- Нет.\nНадо чем-то пометить место.\nМы вернёмся утром, с остальными.\nДжен, ты слышишь меня?\nПостарайся убежать пока я удерживаю их ракетами.\nДжен, пошли, надо идти.\nЭто должно их задержать.\nПовезло, что ты взял с собой ракетницу.\nПочему ты подумал именно о ней?\nЯ вспомнил, как старушка зашла вчера с козыря со своим факелом.\nЯ не знал, куда меня собирается отвезти девушка,\nЯ подумал, что это может быть ловушка.\nПоэтому схватил ракетницу из ящика.\nТы говорил, что мавзолей, находящийся посреди джунглей, примерно 40 на 20 футов.\nБез водопровода и центрального отопления.\nЕсли хотите, мы соберём вещи для пикника и мы сходим туда.\nДумаешь, ты сможешь найти это место опять?\nНу, я должен.\nТы же не отпускал меня всю ночь и всё записывал.\nЗнаете, док, я думаю, вы должны поделиться со мной частью своего гонорара за книгу.\nМне кажется, ты был прав.\nСтавлю на что угодно, что Маленькая мисс \"Милашка и Солнышко\" пыталась завлечь тебя в ловушку.\nМожно не сомневаться, что она и эта старая ведьма за всем этим стоят.\n- Доброе утро.\n- Доброе утро.\nТёплое молоко, Маргарет.\nЯ хочу поблагодарить вас, мистер Кларк, за спасение жизни Джен.\nОна очень дорога мне и я буду вечно вам за это признательна.\nНу, теперь у тебя есть друг до самой смерти, Джеф.\nМы все умрём в надлежащее время, миссис Харрисон.\nМогила ждёт всех нас.\nТы старая карга!\nТы уже мертва.\nТебе просто не хватает ума угомониться.\n- Заткнись!\n- Ну это же правда.\nОна стоит за всем, что здесь происходит и вы все это знаете.\nЯ прошу прощения, миссис Питерс.\nПонимаете ли, она обучалась манерам в баре Эдди на Фронт Стрит\n- Она...\n- Как я уже сказала, я признательна и я сделаю всё от меня возможное, чтобы вы получили эти бриллианты.\nСпасибо, но сейчас это уже неважно.\n- Видите ли, я решил выйти из игры.\n- Что?\nТы не можешь так просто взять, и всё бросить.\nЯ фактически научил тебя вести бизнес.\nНадо было тогда и научить меня как вести бизнес выхода из бизнеса.\nИ тогда бы я валялся на палубе, загорал и имел бы 75 процентов, пока ты под водой заигрывал бы с рыбами.\nУ нас есть договор.\nЯ вложил в это дело 30 тысяч, практически всё, что у меня есть.\nИщи себе другого дурачка.\nНыряй сам.\nМне никто не говорил, что здесь будут толпится оравы головорезов, и мне всё равно кто за этим стоит.\nХорошо.\nЯ дам тебе ещё пять процентов.\nВозможно он прав, Джордж\nНам нужно уехать.\nМеня в дрожь бросает от этого места.\n- Ещё одно слово от тебя и я...\n- Что ты сделаешь?\nЗакуёшь в кандалы?\nЧего ты хочешь?\nЯ прошлой ночью вспоминал арифметику, Харрисон.\nЗнаешь, 50 процентов - не та сумма после которой я стану сопротивляться.\n- Надеюсь, что ты доживёшь до её получения.\n- О, я на это рассчитываю.\nВидишь ли, я надеюсь, что ты будешь беречь мою жизнь, по крайней мере, пока мы не добудем бриллианты.\nМы теряем целое утро.\n- Доброе утро.\n- Доброе утро.\nДоброе утро, мисс Питерс.\n- С тобой всё в порядке?\n- Так ты всё-таки участвуешь?\nДа.\nХаррисон меня уговорил.\nСпроси у миссис Питерс.\nЯ ж говорю, я засунул ему нож в горло по самую рукоять.\n- Значит не задел жизненно важных органов.\n- Хорошо.\nНо я хотел бы увидеть хоть бы немного крови из восьмидюймовой раны.\nВы верите в ходячих мертвецов, доктор Эггерт?\nЯ знаю всё только по книгам.\nИ что говорят книги, док?\nМертвецы хорошие пловцы?\nНу, дышать им под водой не нужно.\nЧто ж, в этом моя слабость.\nМне дышать необходимо.\nПостарайся это запомнить, Харрисон.\n- Последнее напутствие?\n- Просто найди эти бриллианты.\n- Я пока попытаюсь просто найти каюту.\nПятнадцать минут.\nНе дай себя убить, Джеф.\nЭто будет такая потеря.\nТы слышишь меня?\nСвязь в порядке?\nДавление воздуха в порядке?\nХорошо, поехали.\n...двадцать четыре, двадцать пять.\n25 футов.\nКак оно?\nВода чистая.\nНо я пока ничего не вижу.\nЭтот ваш первосортный шлем протекает, прокладка спереди.\nГде ты его взял?\nВ магазине подержанных товаров?\nЧто, так плохо?\nПока нет.\nПродолжаем.\n50 футов.\nПодготовьте другой костюм.\n75 футов.\nКак течь?\nХуже не становится.\n- Хочешь подняться?\n- Нет.\nПока нет.\nОпускайте дальше.\nЯ что-то вижу!\nПрямо подо мной.\nОсторожнее.\nЯ гляжу прямо на трюм.\nНам повезло.\nЯ думаю, что смогу зайти в трюм.\nМожет, смогу прямо сейчас.\nХочешь попробовать?\nДа.\nЭто даже не погружение. там даже нету 100 футов.\nНо зачем тебе спускаться?\nТы не в том состоянии.\nЯ не могу позволить ему наложить свои лапы на бриллианты без моего присутствия.\nЯ вижу его!\nЯ вижу сейф!\nПоднимайте.\nДжеф, ты слышишь меня?\nТы внутри корабля?\n- Джеф!\n- Что случилось?\nДавление воздуха на нуле.\nОн ни за что не зацепился?\nТы можешь его втащить?\n- Он вроде поднимается, если только...\n- Если только что?\nЕсли только трос не порвался.\nТак может ты спустишься и посмотришь?\nТак будет быстрее всего.\nПродолжайте крутить.\nОн жив.\nНам лучше доставить его к доктору.\nБлижайший доктор находится в миссии Энджел.\nЭто пять часов езды отсюда.\nЯ здесь вместо доктора.\nЧерез мой труп.\nОн еле дышит.\nЕсли мы быстро не сделаем что-то по этому поводу, он может и не выкарабкаться.\nЯ приготовлю для него кое-что.\nТы же не дашь ей давать ему что-то, правда?\nА ты что думаешь?\n- Ну, я не думаю, что она убийца, но...\n- Да у неё с головой не всё в порядке.\nЯ не уверена, дышит ли он вообще.\nЭто поможет ему дышать.\nДавайте ему одну унцию каждый час.\nМиссис Питерс, не то, чтобы мы вам не доверяли...\nПоставь.\nСами решите, давать ему это или нет.\nПодождите!\nОно крепкое лекарство,\nно безвредное.\nЯ дам вам знать, если будут изменения.\nХорошо, Флоренс Найтингейл.\nКогда будешь заканчивать свою смену - позовёшь.\nЕщё карту.\nЯ просто вне себя от восхищения.\nЭкзотическая Африка.\nДикие животные, тропические ночи.\nИ вот я тут - учу профессора играть в очко.\nУ меня 21.\nПрекрасно.\nЗначит он должен тебе ещё одну тысячу спичек.\nНе нервничай.\nПочему она не скажет нам что там происходит?\nОна только полчаса назад сказала тебе.\nОн мирно спит и нормально дышит.\nЧего тебе нужно?\nИнформационное сводку каждые 10 минут?\n- Я пойду и посмотрю сама.\n- Только не скандаль там.\n- Как ты себя чувствуешь?\n- Нет, не останавливайся.\nКажется, у меня наконец получилось:\nМягкие облака, золотые лестницы, глас трубы и ангелы.\nДаже не думай, Джеф.\nТы в Африке.\nИ с моей колокольни, оно выглядит точно так же как и всякое другое место.\nПочему ты не позвала нас, когда он проснулся?\n- Он только что проснулся.\n- Ага, конечно\nЧто здесь происходит?\nТебе на этой работе за сверхурочные платят или что?\nПочему ты нас не позвала?\nЯ предупреждал тебя, чтобы ты не скандалила!\nКакого обращения ещё ждать от такого пещерного человека как ты.\nЯ говорил тебе держаться от него подальше?\nПридётся преподать тебе урок, который ты точно поймёшь!\nВсё равно вернёшься.\n- Как Джеф?\n- С ним всё в порядке.\nПо поводу того, что случилось у затонувшего корабля, мы поговорим с ним позже.\nО ходячих мертвецах говорят, что их души не могут найти покоя и они существуют в мучениях.\nКак будто люди могут найти покой для души и разума во время жизни.\nОгонь горит уже два часа.\nЕсли бы Мона увидела огонь, она бы нашла путь назад.\nКак только входишь в эти заросли, то далеко уже не видно.\nЕй не следовало бы бродить по джунглям самой.\nОна у них.\nЯ уверена.\nТогда мы должны пойти за ней.\n- На кладбище?\n- Я тоже пойду.\n- Уверен, что хочешь пойти с нами?\n- Ну, я хотел бы помочь.\nМы идём не пейзажами наслаждаться.\nЕсли она у них уже так долго, ничего хорошего из этого не выйдет.\nВы все погибнете там.\nЭто должно быть где-то здесь.\nЯ засекал время вчера ночью когда мы ехали назад.\nХочешь опять использовать ракетницу?\nХочешь оружие, док?\nНет, спасибо.\nЯ лучше возьму ещё один фонарик.\nХорошо.\nПошли.\nВот и тропинка.\nАрт и Джонни, вы замыкаете сзади.\nВнимательно следите по обеим сторонам.\nДок - вы в середине.\nА ты оставайся сразу за мной.\nИ не стреляйте пока не будет другого выхода.\nЛадно, пошли.\nПодожди.\nЭто браслет Моны.\nЭто с другой стороны валуна.\nПожилая леди сказала, что это было кладбище европейцев, которые добывали здесь бриллианты 100 лет назад.\nАрт, Джонни, оставайтесь здесь.\nЕсли кто-то из этих покажется, стреляйте из ракетницы.\n- Пойдёшь с нами?\n- Да.\nХорошо.\nТогда понесёшь бензин.\n- Она мертва.\n- Может и нет.\nМы заберём ей.\nНо давай придумаем как и самим выбраться отсюда.\nДок, вылей бензин с обеих сторон двери.\nХорошо.\nДавай.\nТолько не спускай с них глаз.\nЯ буду сразу за тобой и попытаюсь удерживать их при помощи ракет.\nОна точно мертва.\nУбираемся отсюда!\nСмотри!\nМона!\nМона!\nС тобой всё в порядке?\nЗабирай её.\nЯ прикрою!\nОк.\nПошли.\nОни нашли тебя!\nТы в порядке.\nЯ так рада...\nОна холодная, как...\nС ней точно всё хорошо?\nОна не сказала ни слова.\nМожет, она под воздействием наркотика, или в шоке.\nЯ думаю, что вам лучше положить её в постель.\nОна мертва.\nВаша жена мертва, мистер Харрисон.\nВы же видите - она ходит.\nВы же все видите...\nПосмотрите на её глаза.\nОна не дышит.\nХолодна как смерть.\nЯ больше не хочу слушать этот бред.\nВы слышите?\nЧтобы его больше не было.\n- Я положу её в постель.\n- Только не в этом доме.\n- Пожалуйста, бабушка.\n- Мы можем положить её на корабле.\nНет.\nЯ знаю, что это ваш дом, но я не хочу больше, её куда-то везти сегодня.\nТак что если вы боитесь - сами убирайтесь.\nЯ боюсь не за себя, я боюсь за вас.\nЗа всех вас.\nМисс Питерс, не поможете положить её в постель?\nКонечно.\nА как же мы?\nПускай остаются.\nВ первой спальне.\nОни нам могут понадобиться.\nМона, почему бы тебе не закрыть глаза и не попытаться поспать?\nДжеф, ты не спишь?\n- Как Мона?\n- Без изменений.\n- Ты хочешь завтра спускаться под воду?\n- Ну, сейф находится пока ещё там.\nЯ думаю, что ещё одно погружение и мы сможем его поднять.\nА что?\nТы хочешь от всего отказаться?\nЯ должен позаботиться о Моне.\nМне нужно найти ей доктора.\nНа помощь!\nНа помощь!\nДжеф!\nХаррисон!\nОна сошла с ума!\n- На помощь!\nНа помощь!\n- Мона!\nДжеф, помоги.\nЯ не могу её остановить!\nЗажгите свечи.\nКак можно больше.\nОн мёртв.\nОна зарезала его.\nА потом пошла за мной.\nСкажи Сэму пусть принесёт столько больших свечей, сколько сможет найти.\nА теперь заставьте её идти к себе в комнату.\nОни боятся огня.\nМне кажется, что это единственное, что может их уничтожить.\nОна больна, миссис Питерс.\nОна не в себе, правда?\nЯ очень сожалею, мистер Харрисон.\nЯ знаю по себе, что вы чувствуете.\nПоставьте ещё парочку возле двери.\nЕсли огонь действует здесь, то и под водой должен подействовать.\nПоддерживайте огонь на том же уровне и они вас не побеспокоят.\n- Они останутся внутри.\n- Я понял.\n- Если только не найдут другой путь.\n- В любом случае, стоит попробовать.\nМожет и получится их закупорить.\nВ любом случае, вы и ваши люди будут в безопасности, если будут оставаться у огня.\nМы будем тут.\nПошли.\nЯ думаю, что сейф там не очень надёжный.\nТак что я его открою за пять-десять минут.\nи пока я буду горелкой срезать петли, ты стой с другой горелкой наготове.\nЕсли они появятся, отгоняй их своей горелкой.\nНо я надеюсь, что из-за огня они не будут бродить туда-сюда.\nБудет уже темно когда мы закончим.\nПо поводу того поломанного компрессора...\nХорошо, что мы это выяснили перед погружением.\nМогли бы подождать и до завтра\nЯ думал, что завтра ты хочешь отвезти Мону в Дакар.\n- Один день ничего не значит.\n- Послушай, ночь, день - неважно.\nПод водой темно в любое время суток.\nК тому же, завтра у меня могут труситься поджилки, как вот у тебя сейчас.\nЛадно!\nДок, вы следите за интеркомом, чтобы мы могли говорить дурр с другом.\nСамо собой, Джеф.\n- Харрисон, слышишь меня?\n- Слышу.\n- Давление воздухе в порядке?\n- Давление в норме.\nХорошо.\nЯ пойду первым.\nСледуй на расстоянии 10 футов.\nИ следи за моим курсом.\nВали уже.\nУдачи, Джеф.\nИ тебе, Джордж.\nЯ на дне.\nДжордж, ты меня слышишь?\nСлышу.\nИ вижу тоже.\nСтравите ещё трос.\nДа, Джеф.\nТравите.\nНастоящая развалюха.\nЕщё и со внешними петлями.\nЗнаешь, я думаю, что смогу вскрыть его даже скаутским ножом.\nГорит как дрова.\nПервая петля с минуты на минуту должна отвалится.\n- Джеф, они вокруг меня.\n- Ты можешь удержать их?\nНе знаю.\nЯ уже над второй работаю.\n- Сколько ещё?\n- Ещё минута.\nС петлями покончено.\nЕсть.\nЧерез 10 секунд можно убираться отсюда.\nЯ не могу удержать их.\nЯ поднимаюсь.\nПоднимайте меня!\nПоднимайте меня!\nОпускайте платформу для погружения.\nЗдесь двое - ждут, чтобы на меня наброситься.\nЯ хочу удостовериться, что мой трос свободен и когда дам команду, тащите меня как безумные.\nМы поняли, Джеф.\nЖдём команду.\nСработало!\nГде Харрисон?\nТолько показался на поверхности.\nИх целая куча вокруг него.\nЧетверо, или пятеро.\nСтреляйте из ракетницы.\nОпускайте платформу для погружения.\nПодтяните меня на палубу.\nЧто с Харрисоном?\nОн потерял много крови.\nОн в своей каюте.\n- У нас заканчиваются ракеты.\n- Экономьте.\n- Смотрите!\nОни поднимаются на борт.\n- Возьмите факелы и керосин.\nЕсть, сэр.\nПосмотрим, сумеем ли оставить их себе.\nВозьмите бриллианты в каюту и запритесь.\nРассредоточьтесь по палубе.\nИз-за этого факела может начаться пожар.\n- Сколько у нас ракет?\n- Две, сэр.\nДержи их на прицеле.\nПошли.\nВыстрели им в ноги.\nЯ пойду и заберу этот факел.\nДжонни!\nСзади!\nДок, открой!\nПусти!\nЕсть что-нибудь горючее?\nЧистящая жидкость?\nЧто-нибудь, что горит?\nДа, в ящике стола.\n- Да отдайте им эти вшивые бриллианты!\n- Пускай кто-нибудь попробует.\n- Есть идеи получше?\n- Да.\nПройдём через них с боем.\nА кто понесёт тебя, пока я буду драться?\nЯ справлюсь сам.\n- Ты в прекрасной форме для бега.\n- Через минуту буду в порядке.\nЯ возьму это и попытаюсь прорваться.\nЕсли получится, то направлюсь к берегу на лодке.\nОни последуют за мной и у вас будет шанс уйти.\nИ не думай, Джеф.\nТебе это так нужно?\nТак получай!\n- Он не уйдёт далеко с этими бриллиантами.\n- Ты идиот, Харрисон.\n- Он не пытается их украсть.\n- Заткнись.\nОн спас твою и мою жизнь.\nИ сделал больше, чем мог бы сделать ты со своей раненой ногой.\nЯ знаю его лучше, чем ты.\nРасчехляй спасательную шлюпку.\n- Ты в безопасности!\nЯ так волновалась.\nЯ увидела...\n- Потом.\nНам надо кое-что сделать.\nПошли.\nПохоже, она приходит в себя.\nМона!\nОни явно загипнотизировали её.\nПошли.\nИтак, значит ты преуспел, там где другие потерпели неудачу.\nЯ верила в тебя.\nПослушайте, за этим гонится целое стадо их.\nОни будут здесь через пару минут и церемониться не будут.\nИ я не хочу быть здесь, когда они появятся.\nИ я не хочу, что бы здесь в это время была Джен, и вы, - миссис Питерс.\nЯ думаю, нам нужно сесть в машину, взять Мону и убираться.\nС Харрисоном встретимся в Дакаре.\nЯ бы поделился своей долей с вами.\nЯ подумал, что за все эти годы вы это заслужили.\nЕсли, конечно, эта доля будет.\nЯ всё ещё не уверен, что бриллианты у нас.\n- Как это открыть?\n- Этот ларец древнее, чем пирамиды.\nУ них конечно не было ни замков, ни пружин, но они кое-что знали о рычагах.\nОбычно...\nДай мне свой платок.\nБыстро.\nСадитесь с лодку и заводи её.\nМы вернёмся через пару минут.\nЕсли они появятся, отпугивайте их факелами.\nЕсли они подойдут близко, я отплываю.\nСкажи девушке отдать мне ларец.\nИ скажи ей, если она попытается что-нибудь учудить, я застрелю тебя за то, что ты украл бриллианты и сбежал пока на нас нападали.\nЭто не правда!\nОн принял всю опасность на себя.\n- Послушай, Харрисон...\n- У меня нету времени.\nПиви и Джонни разогревают двигатель.\nМайк и Тони ждут в лодке.\nЯ забираю бриллианты и Мону.\nЯ переписал наш договор.\nОтдай ему ларец.\nМожет, ты его уже открыл.\nИ как ты это собираешься узнать?\n- Не надо, пожалуйста, ты испортишь его.\n- Я найду способ.\nЕсли пойдёшь за мной, я убью тебя.\nНо бриллианты должны быть твоими.\nТы их нашёл, ты сберёг их\nСпасибо, док.\nСмотри.\nМы должны быстро пройти к лодке, понятно?\nПошли.\nДавай.\nЗалазь!\nОн мёртв.\nЭто она его убила.\n- Всё произошло так быстро.\n- Давайте занесём его в дом.\nНо вы даже не знаете точно, бриллианты ли они хотят.\nМожет, они хотели ларец.\nТогда мы их больше не увидим.\nИм нужны именно бриллианты.\nОни вернутся, когда выяснят, что ларец пуст.\nНо как я могу их уничтожить, даже если я этого захочу?\nРазвей их по ветру.\nРазбросай по морю, чтобы никто и никогда их не нашёл.\nПошли со мной, Джен.\nЧерез несколько минут мы будем на корабле, а ещё через 10 выплывем из залива.\nГде они нас будут ловить?\nВ Нью-Йорке?\nКуда бы ты не пошёл, они отправятся за тобой.\nНу ладно, я быстро избавлюсь от бриллиантов и обращу их в деньги.\nОни будут продаваться во всех столицах мира.\nЧто они сделают тогда?\nБудут штурмовать все ювелирные лавки на 5-й авеню?\nДжен, я хочу, чтобы ты была со мной.\nЯ хочу, чтобы ты тоже наслаждалась богатством.\nЯ хочу, чтобы ты вышла за меня замуж,\nЯ бы с удовольствием, Джеф.\nНо я не могу.\nЯ не могу её так оставить.\nНеужели ты тоже во всё это веришь?\nВ то, что если выброшу бриллианты, то все они исчезнут?\nДа, это правда.\nОни прекратят ходить по земле.\nОни найдут вечный покой.\nБриллианты должны быть уничтожены.\nУ них невозможно украсть бриллианты.\nДжен!\nОна верит.\nВсю свою жизнь она верила.\nТы не можешь обмануть её ожидания.\nЯ не могу их выбросить.\nЯ бы хотел.\nНо я собираюсь взять их с собой.\nИ вы тоже идёте со мной.\nОбе.\nЯ не могу оставить вас тут пока они тут бродят.\n- Я остаюсь здесь.\n- Но вы не можете тут оставаться.\nЭто слишком опасно.\n- Извините, но если придётся - я вас понесу.\n- Я не сомневаюсь, что вы сможете.\nУ нас нет времени, миссис Питерс.\nЯ высажу вас где пожелаете.\nЕсли вы хотите, я устрою, чтобы вы вернулись сюда позже.\nПомоги ей залезть.\nСтойте!\nОни вернулись за бриллиантами.\n- Чего мы ждём?\n- Подождите, пожалуйста.\nМы уже в безопасности.\nКапитан Питерс.\nНеужели ты так и не обретёшь покой?\nНу ладно.\nХорошо, берите.\nВот бриллианты, миссис Питерс.\nОни ваши.\nДелайте с ними всё, что хотите.\nСпасибо.\nСпасибо.\nНаконец-то, Джереми Питерс.\nСвершилось.\nНаверно я уже никогда не стану богатым.\nSubs by linyok\nДжультта Мазина\nПриз Каннского фестиваля 1957 года за лучшую женскую роль\nНОЧИ КАБИРИИ\nФильм Федерико Феллини\nАвторы сценария Федерико Феллини, Эннио Флайянно, Тулио Пинелли\nВ ролях:\nФрансуа Перь\nФранка Марци,\nДориан Грей\nАльдо Сильвани, Марио Пассанте Эннио Джиролами, Кристиан Тассу\nА также Амедео Надзари\nОператор\n-Альдо Тонти\nКомпозитор\n- Нино Рота\nДирижёр\n- Франко Феррара\nВ создании сценария принимал участие Пьр Паоло Пазолини\nБеги к реке.\nЧего ты ждёшь\nКак здесь спокойно.\nДжорджио!\nПомогите!\nПомогите!\nСпасите!\nПомогите!\nПомогите, кто-то тонет!\nКто-то тонет!\nСкорее!\nКто-то тонет!\nСкорее!\nПомогите!\nЭй, где Ромуаль\nУшёл в мэрию.\nВ мэрию?\nЗачем его туда понесло?\nЭто женщина!\nВон она!\nА Пиладо, его тоже нет?\nЧто она делает?\nВон она, за ней!\nПрыгаем!\nЕсли она попадёт в сточную трубу, ей не выбраться.\nЖенщина тонет!\nСкорее за ней, надо помочь\nПаджелло, сюда!\nЗапрокинь ей голову и смотри не тряси.\nСтефано, поторапливайся!\nОткуда ты её вытащил?\nОсторожнее, держите под живот.\nОна тонула.\nДолжно быть, она заснула и свалилась в воду.\nКак только мы её увидели, сразу бросились на помощь\n- Вы видели, как она упала?\n- Нет.\nСколько раз она уходила под воду?\n3.\nБольше, 7 раз.\n10!\nЗначит, она наглоталась воды .\nНам нужна помощь\nСтефано!\n- Что случилось\n- Эта женщина тонула.\n- Паджелло, быстрее.\n- Она потеряла туфлю.\nПо-моему, она умерла.\nПаджелло, нужно откачать её.\nСмотри, делаем так.\nРебята, отойдите.\nЭто мы её спасли.\nОтойдёте вы или нет?\nДавай позовём Пампео, он никогда не видел утопленников.\n- Мы только посмотрим.\n- Я не хочу, боюсь\nИдём же.\nМне кажется, она мёртвая.\nОна бы не всплыла, если бы была мёртвая.\nОна открыла глаза.\nСтефано, она открыла глаза.\nХватит, положи её.\nНадо снова сделать ей искусственное дыхание.\nЕй бы сейчас бренди.\nБренди.\nЕй нужно молока.\nТихо, она приходит в себя.\nТы , кажется, на мотоцикле?\nСгоняй, привези молочка.\nУ меня нет горючего.\nСпокойно, синьорина, всё хорошо.\nВы счастливая, правда, счастливая.\n-А где Джорджио?\n- Какой Джорджио?\n- Не волнуйтесь\n-Джорджио!\nУспокойтесь Успокойтесь\nДжорджио!\nКто это Джорджио?\n- Разве с ней был кто-то?\n- Не знаю.\nДжорджио, что же ты сделал?\nЭй, успокойся.\nЯ иду домой!\nГде мои туфли?\nВот один.\nГде другой, я не знаю.\nУ неё, как у кошки, 9 жизней.\nИдти-то нормально не может.\nНет, вы только посмотрите!\nМинуту назад ты чуть не умерла, куда ты собралась\nОтстаньте, отвяжитесь\nПустите меня, пустите!\nЭто мы тебя спасли!\nХорошо, отлично!\nВы меня спасли?\nА теперь я хочу домой!\nМне это нравится.\nИди куда хочешь\nПривет, Кабирия!\n-Джина, ты её знаешь\n- Конечно, это Кабирия.\nГде она живёт?\nВ Оцилии.\nОна гулящая, её там все знают.\nДжорджио, открывай!\nЭто я, это я, Кабирия!\nДжорджио!\nВанда!\nВанда, ты видела Джорджио?\nЧто с тобой?\nОтвечай на вопрос.\nГде Джорджио?\n- Какой Джорджио?\n- Мой Джорджио.\nЧто ты придумала?\nЧто тебе надо?\nЧто тебе надо?\nМне ничего не надо.\nИ вообще, не лезь ко мне!\nЗайди в дом и умойся.\nУ меня нет ключа.\nА куда же ты его дела?\nОн лежал в сумочке.\nА сумочка где?\nБыла у Джорджио.\nМы гуляли у реки.\nНе знаю, как случилось, но я упала в воду.\nНаверное, он испугался и убежал.\nКабирия, открой!\nОткрой, Кабирия!\nЯ хочу спать\nСколько там было денег?\nКабирия, отзовись, ответь мне!\nУвидишь Джорджио, я здесь\nНу что ты делаешь\nВообще-то ты права, что остаёшься дома.\nПолежи, выспись хорошенько.\nПозже я к тебе зайду.\nВыпей аспирин, станет лучше.\nТы всё ещё здесь, не устала болтаться?\nВидишь, ты надоела мне!\nИ вообще, с каких это пор ты стала моей подругой?\nПроваливай, сделай одолжение.\nПроваливай отсюда!\nИ не смей больше брать мой термометр!\nА когда это я брала твой термометр?\nВот зануда, брюзга.\nХочешь сказать, что он столкнул меня в воду из-за сорока тысяч лир?\nЗначит, он утопил бы меня за 40 тысяч лир?\nДа любой из них утопиттебя за жратву.\nДаже тот, кто любит?\nВы встретились месяц назад, как же он мог полюбить тебя?\nТы даже не знаешь, где он живёт и как его фамилия.\nСогласись, Кабирия, он столкнул тебя в воду.\nПоверь, дорогая.\nЕсли б на его месте была я, то для верности подержала бы тебя за башку под водой.\n- Иди в полицию.\n-Думаешь, я доносчица?\nПослушай меня, заяви в полицию.\nЗачем, зачем он это сделал?\nУ него же было всё, всё, о чём он просил.\nЗачем же воровать\nЧто же я была за дура?\nЯ же могла утонуть\nХватит, всё, пора с этим кончать\nДовольно, ищи себе другую дуру, которая будет покупать тебе шёлковые рубашки.\nРубашки!\nКакая же я дура!\nПроваливай, ищи себе другую дуру.\nЭто же я купила тебе все эти шмотки: костюм, пиджак.\nТакого больше не повторится.\nНикогда, никогда!\nЖелаю счастья !\nИнтересно, где же это ты собираешься теперь жрать\nНа площади Святого Петра?\nГрязная крыса!\nТы ни на что не годен, обманщик.\nТоргуй и дальше собой.\nВоттак!\nГори, пока не сдохнешь\nЭто было в прошлый раз.\nГоворю тебе, ты меня здесь больше не увидишь\nСтоять рядом с тобой для моей репутации – просто погибель\nС вами я не останусь\nКак я хороша!\nКрасавица, настоящая королева!\nДа, ты похожа на Моби Дика, королева.\nЭто ты мне?\nДа как ты смеешь\nЗнаешь, где тебя ждут?\nВ цирке.\nБыстро ты хвост прижала.\nДа кто ты такая?\nГде у тебя глаза?\nЯ же красавица, одно удовольствие посмотреть\n- Королева!\n- Нашла королеву!\nТебе становится всё хуже.\nКогда тебя закроют в психушке?\nА когда ты там окажешься?\nЭто печка, а тут вода для стекла.\n-Здесь всё есть\n-Даже кока-кола.\n- Поехали покатаемся?\n- Нет, я не такси.\n- Выходи!\n- Я не уйду.\nДавай выходи!\nЧто ты будешь делать\nВыходи, я хочу покатать Ванду.\nНо ведь ты не умеешь водить\nНе волнуйся, это моя машина, и я делаю, что хочу.\nВыходи!\nЯ посмотрю, что будет.\nТоже мне, водитель\nПочему ты не купила модель покруче?\nНе слушай её.\nЧто ты понимаешь в машинах?\nЧто смеёшься?\nДумаешь, раз ты на колёсах, значит, крутой?\nОсторожно, сюда идёт лунатик.\n- Привет, милашка.\n-До встречи, Кабирия.\n-Зайди ко мне, ладно?\n-Ладно.\n- Привет, Мориса.\n- Привет, Кабирия.\n- Привет, Ванда.\n- Привет.\nКрасавица, просто красавица!\nНо на твоём месте я купила бы серую, цвет красивее.\nА впрочем, прекрасная машина.\nДавай, давай, вот посадишь аккумулятор.\nВылезай, не хочу ругаться с тобой сегодня.\nДа на кой чёрт она мне?\nЦвет, конечно, неважный.\nУ машин всё проще.\nСадишься сюда и сигналишь\nХочешь повернуть, делаешь левый поворот или правый.\nВсе мужчины будут твои.\nПодумают, что твой папочка – богач.\nБудут обхаживать тебя как принцессу.\nМне бы понравилось\nЭта всё никак не заткнётся.\nЯ знаю, как ты получила эту машину!\nТолкаешь наркотики!\nНаркоманка!\nСиди!\nПусти!\nСиди!\nА теперь музыка.\nМамба!\nПотанцуем, Кабирия?\nЛучшего танцора тебе не найти.\nДавай же!\nДавай!\nНет, вы посмотрите, что происходит!\nТеперь она нашла другого воздыхателя, чтобы говорил: \" Я люблю тебя\" .\nА потом она переспит с монахом.\nКакое странное лицо.\nЯ должна её остановить\nСиньоры , синьоры , смотрите, я намного лучше!\nЧтоб вам пусто было!\nУроды !\nКуда ты хотела поехать на этой машине?\nНа кладбище?\nДо чего же хорошо!\nУродка, идиотка!\nШла бы ты домой!\nКабирия, ты разрешаешь ей оскорблять тебя?\nПроучи её!\nПосмотрим, где ты закончишь свои дни!\nШлюха дешёвая!\nБудешь стоять на паперти, даже на кофе не хватит.\nА всё из-за милого Джорджио!\nДай ей, Кабирия, врежь ей!\nКабирия!\nКабирия, покажи ей!\nОна тебе ничего не сделает, бей в живот!\nОстановитесь, плохо будет, если нас заметят.\nОтпусти руку!\nРазнимите их!\nЧто вы смотрите?\nДержи её!\nДержи!\nПустите меня, пустите!\nЯ ей сейчас покажу!\nРуки прочь\nУспокойся ты , садись в машину.\nПусти меня, пусти!\nКабирия, может, хватит?\nКого ты назвала наркоманкой?\nЭто кто наркоманка?\nА, ты меня боишься?\nИди к чёрту!\nБоишься, боишься!\nСкорей, поехали.\nСадись, садись, Кабирия.\nТы меня боишься, боишься, неудачница!\nХочешь сигарету?\nКуда собираешься?\nДавай мы тебя подбросим.\nНа Виавенето.\nЧто с тобой?\nЗнаешь, Кабирия, нам с тобой нужно очень серьёзно поговорить\nТы живёшь неправильно, за тобой некому присматривать\nВидишь, как живём мы с Морисой?\nУ Морисы нет проблем.\nВ Риме нам не делают ничего плохого.\nА всё почему?\nСкажи мне, почему?\nДавай сменим тему.\nСкажи мне, что ты будешь делать на Виавенето?\nТы знаешь, что на Виавенето и Вилабадхези приходится бороться за место?\nДавай лучше подыщем тебе серьёзного парня, такого, как я.\n- Мне никто не нужен.\n- Ну да, конечно.\nНикто, понятно?\nЗачем мне вкалывать на такого как ты , покупать еду, выпивку?\nСкажи, зачем?\nСмени пластинку, я счастлива.\n-Дай мне выйти.\n-Да с удовольствием.\nДо скорого!\nУрод безмозглый!\nМашина со свалки!\nЧто?\nЯ просто стою тут.\nКакой ты красавец!\nПроходи.\nЧто?\nЯ останусь здесь, я тут стою.\nДобрый вечер.\nИзвините.\nСмотреть надо!\nДжесси.\nДжесси, ты не можешь так уйти.\nАльберто Родзари!\nДжесси!\nДжесси, не будем ссориться, ну хватит.\n-Джесси, хватит.\n-Дай пройти!\nНе доводи меня, осторожно.\nМои ключи!\nПойдём, не дури.\nНе смей меня трогать, убери руки!\nПодвинься, дай я сяду.\nКуда мы едем?\nКуда, я спрашиваю?\nТы дашь ключи или нет?\nНет.\nСиди.\nПусти, мне больно!\nОставь меня!\nДжесси!\nПослушай, я последний раз говорю.\nХватит, уже всё сказано.\nМеня тошнит от этих глупостей.\nПусти, ты порвёшь мне шубу!\n- Я её покупал.\n- Негодяй!\nСекундочку.\nЧто тебе нужно?\nУбирайся.\nДешёвый актёришко!\nПредупреждаю тебя, если ты уйдёшь, между нами всё кончено.\nВсё кончено!\nНу и ладно, пусть\nДелай как хочешь\nСпасибо тебе, Джесси!\nЧто тебе?\nСвободен.\nЭй, ты .\nИди сюда.\nИди.\nКто, я?\nДа, ты , иди сюда.\nПрокатимся немного.\nСадись\nИ дверь закрой.\nНочной клуб\nДавай.\nЧто это значит?\nДавай выметайся.\nЧто ты раскомандовался?\n\"Выходи, заходи!\nСадись, пошла вон!\"\nКто ты такой вообще?\nИдём, повеселимся чуть-чуть\nДобрый вечер, синьор.\n- Он велел мне идти с ним.\n-Заходите.\nДобрый вечер.\nКак поживаете?\nНе хотите присесть за столик?\nУ нас замечательное представление сегодня.\nВаш зонтик, синьора.\nПрошу сюда, синьора.\nЧто такое?\nВам помочь\nПроходи, садись туда.\nПрошу вас.\nСядь\nАльберто!\nКоника!\nЧто ты здесь делаешь\nСмотришь представление?\nТебе, наверно, не стоит говорить, кто это?\nРада познакомиться.\nПредставляешь, американская компания предложила мне написать сценарий.\nИ, кажется, всё получилось\nДа, получилось прекрасно.\nУ меня дома есть копия фильма.\nСиньоры , первая часть нашей программы подошла к концу.\nНо перед тем как начнутся танцы , хотелось бы поприветствовать нашего почётного гостя Альберто Родзари.\nАльберто, мне тоже надо тебя приветствовать\nИтак, мамба №28!\nДоставьте мне удовольствие, присядьте к нам.\nМои друзья были бы рады с вами познакомиться.\nПожалуйста, пожалуйста.\nВ самом деле, Альберто, идём.\nНевозможно, я с дамой.\nИдём потанцуем.\nВоттак, мамба!\nВоттак, все танцуют мамбу!\nМамба!\nМамба, воттак!\nЕсли хочешь, иди к друзьям, не обращай на меня внимания.\nЧто ты сказала?\nЕсли хочешь, к друзьям иди.\nЛадно, хватит, идём.\nБыстрее, садись\nТы ужинала?\nНет, хотя привыкла есть в 10.\n- Поехали поужинаем.\n- Что?\nПоедем ужинать\n- Прекрасно.\nА куда?\n- Ко мне домой.\nЭй, минутку, ладно?\nЭй, вы , лярвы , посмотрите, посмотрите, с кем я!\nКого я отхватила!\nЗнаете, кто это?\n- Кто-нибудь звонил?\n- Никто, синьор.\nОткуда ты знаешь, что никто?\nВечером никто не звонил.\nМожет, ты спал.\nНет-нет, я был рядом с телефоном.\nХорошо.\nПринесёшь нам ужин в спальню.\nЕсли кто-нибудь позвонит, особенно синьорина Джесси, я сплю.\nБудет настаивать я сплю.\nТы должен сказать ей только два слова: \" Он спит\" .\nДа, синьор.\nИдём, ужинать будем наверху.\n- Как тебя зовут?\n- Кабирия.\n- Как?\n- Кабирия.\nКабирия.\nНу идём.\nИ ещё собака.\nЧто это, зоосад?\nИ аквариум тоже есть\nКуда бы я его поставил?\nОставь, прислуга уберёт.\nНо ведь он помнётся.\nКакой же я идиот.\nСкажи, ты когда-нибудь видела идиота?\nОн перед тобой.\nОставь же!\nИди сюда.\nКак, говоришь, тебя зовут?\nКабирия.\nКабирия.\n- Откуда ты ?\n- Что?\nОткуда ты ?\nИз Рима, пьяццо Ридежемьнто.\nСядь, ты действуешь мне на нервы .\nНравится?\nНе знаю.\nНе в моём вкусе.\nНе в моём вкусе.\nА что это?\nБетховен, пятая симфония.\nМоя любимая.\nВойдите.\nВот и хорошо.\nДавид, закрой за собой дверь\nПосмотрим, что он принёс.\nИкра, омары .\nОбслуживай себя сама.\nЯ не в настроении.\nДавай, давай, это всё для тебя.\n1957 год.\nПочему ты не снимешь кофту?\nЗдесь тепло.\nКажется, я порвала блузку.\nЗначит, где ты живёшь\nНа окраине Рима, недалеко.\nГде это?\nВ Остии, в 10 милях от неё.\nА работаешь на Виавенето?\n- Я на Виавенето?\n- Почему нет?\nЯ работаю на альпийских дорогах, это намного удобнее.\nПочему?\nСадишься на автобус из Оцилии и по прямой.\nУ меня есть подружка, её зовут Ванда.\nМы соседи и поэтому ездим вместе.\nМы никого не беспокоим, не спим на улицах, как другие.\nВоттак.\nУ меня есть собственный дом со светом, водой, газом.\nУ меня есть всё необходимое.\nИ даже термометр.\nЭта кофточка никогда не ночует на улице.\nИ под мостом она тоже не спит.\nНу разве лишь однажды .\nИли дважды .\nНо, конечно, мой дом – ничто по сравнению с этим дворцом.\nНо я счастлива, мне достаточно.\nЧто же ты ?\nЕшь\nЧто случилось\nЯ знаю, кто ты .\n-Знаю!\nМожно сказать\n- Можно.\n- Правда, можно?\n-Да, да.\nАльберто Родзари.\nЯ тебя сразу узнала.\nЯ смотрела все твои фильмы .\nТы потрясающий актёр.\nКакой же фильм тебе больше всего понравился?\nДай подумать Последний.\nУ тебя был такой костюм с массой разных штучек.\nТам ещё играл Витторио Гассман.\nТы распахиваешь дверь и... \" Руки вверх!\"\nЧто смешного?\nЯ не снимался в этом фильме.\nКак это?\nТы красивый, как и твой дом.\n- Принеси фужеры .\n- Несу.\nШампанское.\nСадись\nЗа тебя!\nНет, нет.\nПочему ты плачешь\nОни скажут, что я вру, если я скажу, что знакома с тобой.\nНикогда не поверят.\nЭти дуры никогда не поверят.\nЯ и сама не верю.\nМожно попросить тебя об одолжении?\nДай мне свою фотографию и напиши на ней:\n\"Кабирия была здесь, со мной.\nАльберто Родзари\" .\nНет: \" Кабирия Чиакарелли была здесь, со мной.\nАльберто Родзари\" .\nЯ им её покажу.\nЛадно, Кабирия Чиакарелли.\nА теперь можно и поесть Здесь что?\nКак вкусно!\nЦыплёнок.\nЦыплёнок, сейчас ты избавишься от всех проблем.\nНу вот.\nЕсли хочешь послушать музыку, пока я ем, пожалуйста, я не возражаю.\nА это что за зверь\nКажется, я видела такого в кино.\n- Синьор.\n-Давид, что случилось\nСиньорина Джесси.\nЯ же велел сказать, что я сплю.\nОна внизу.\n- Что?\n- Внизу.\nНет-нет, нельзя, чтобы она сюда вошла.\nОна уже вошла и поднимается.\nИдиот!\nАльберто, открой.\n- Кто там?\n- Не будь дураком.\nОткрывай, слышишь Открывай.\nЯ хочу сказать тебе кое-что важное.\nМинутку.\n- Фотографию.\n-Ах да.\nТы собираешься открывать\nИди в ванную, мы недолго.\nЧерез минуту я от неё отделаюсь\nЕсли ты не откроешь, я буду здесь стоять всю ночь\nНе шевелись, тихо.\nАльберто.\nПожалуйста, пожалуйста, открой.\nОткрой же!\nЧто тебе надо?\nЧто ты опять придумала?\nПочему ты не идёшь спать\nЗавтра мне вставать в 6 утра.\nМне нужно выпить Дай мне выпить\n- Что?\n- Я хочу выпить\nВ чём дело?\nЯ так больше не могу.\nЯ так больше не могу!\nЯ тоже.\nТы невыносима и к тому же патологически ревнива.\nЯ сделал всё, что мог.\nНу остановимся и расстанемся друзьями.\nЭто самый лучший выход, останемся друзьями.\nНет!\nНи за что!\nНет!\nДжесси.\nПерестань, пожалуйста.\nИди домой.\nДжесси, пожалуйста.\nТебе нужно лечь в постель, ты устала.\nАльберто!\nДжесси.\nТы меня больше не любишь, не любишь\n- Я этого не говорил.\n- Нет, не любишь\nНет, пожалуйста, не надо.\nСогласись, это так.\nЯ никогда этого не говорил.\nСкажи мне, что не любишь, и я оставлю тебя в покое, клянусь\nДжесси, я бы солгал.\nЯ была бы рада, если бы мы могли иногда встречаться.\nРаз в 2-3 дня, и я буду довольна.\nПочему так редко?\nЕсли хочешь, мы могли бы встречаться чаще.\nКаждый день\nДа, каждый день Если хочешь, каждую ночь\nНо я не могу сделать так, чтобы женщины на меня не смотрели.\nЭто невозможно.\n- Ты такой гадкий.\n-Да.\nКабирия.\nКабирия.\nКабирия.\nПока, пока.\nДо свидания.\nИ где тут выход?\nЭй, Кабирия, Альберто Родзари тебя обыскался!\nПроваливай, я не желаю с тобой разговаривать\n- Не обращай внимания.\n-А кто обращает?\nКабирия, смотри, надо же, Димпи.\nВот плут несчастный!\nДолжно быть, не терпится за решётку.\nИдём, Кабирия, здесь должно быть интересно.\nПривет, Ванда.\nЧто ты к нему пристаёшь\nДай спокойно откинуть ноги.\nМадонна поможет дяде снова начать ходить\nО чём ты говоришь\nО чём?\nРазве ты не слышала?\nВ центре города состоится молебен.\nТы правда в это веришь\nА ты в чудеса не веришь\nНет.\nУверена, каждому есть, что попросить у Мадонны .\nВ следующее воскресень хорошо бы попасть туда.\nКабирия, а ты пойдёшь\nНе знаю.\nПодумаю.\nОчень может быть, что пойду, только чем Мадонна может мне помочь\nСкоро я закончу платить за дом.\nУ меня всё есть\nВпрочем, я пойду, наверное.\nДа, пожалуй.\nТы думаешь, Мадонна поможеттвоему дяде?\nСмеёшься?\nБудто Мадонна не знает, как он зарабатывает деньпи - торгует кокаином и заставляет женщин работать\nМадонна всё знает.\nЕсли даже я знаю.\nНад такими вещами нельзя смеяться.\nДа ну тебя!\nЗачем тебе туда ходить\nО чём ты попросишь\nЯ спрашиваю, о чём ты попросишь\nЭй, красотка!\nМожет, прокатимся?\n- Пока, Ванда!\n- Пока, Кабирия!\n\"Кратчайшим путём\" .\nИ это короткий путь\nЯ иду уже час.\nГде я?\nТы живёшь в пещере?\nЯ тебя никогда не видел.\nУ меня есть свой дом.\nГорджано.\nГорджано, это я.\nКак дела?\nНеплохо, спасибо, синьор, спасибо.\nА где Пьтро?\nСпит?\nДва дня назад его положили в больницу.\nМне сказали, что ему очень плохо.\nЧто тебе нужно?\nВсё, что дадите.\nСпасибо, синьор.\nВот одеяло.\nПодойдёт?\nВ какой госпиталь отвезли Пьтро?\nВ госпиталь Святых братьв.\nХорошо.\nЕсли у меня будет время, я его навещу.\nПока.\nТуйнок?\nА это кто?\nЧто это за благотворительность\nЯ тебя спрашиваю.\n- Можно вам помочь\n- Нет, спасибо.\nА вы куда?\nВозвращаетесь в Рим?\nНе подвезёте меня на своей машине?\nПодвезу.\nХильда!\nХильда!\nТвидиш, кто это?\nПришёл только сегодня, я тебя ждала в субботу.\nДорогой, дорогой!\nЯ только вчера думала, он придёт в среду.\nТак прошло уже 9, 10 дней.\nЯ думала, мы увидимся в субботу.\nБомба?\nЯ её знаю.\nБомба, как ты ?\nХочешь знать, что у меня было?\nКвартира в Риме, квартира в Остии.\nБыло полно подарков: деньпи в банке, украшения, золото.\nУ меня было 5 килограммов золота.\nНе ври.\nКто тебе поверит?\nВ твои-то годы .\nМеня заставляют причёсываться.\nЯ надеваю кофточку с вырезом, белые серьпи.\nВоттак.\nИди, иди.\nПоторопись\nТы мне принёс сладкое?\nЭто только мне, а не другим.\nДай мне, дай я спрячу.\nА это с шоколадом.\nЧёрт побери!\nЭх, зануда!\nНаверное, пойдёт дождь\nДорогой, спасибо, спасибо.\nНу всё, хватит.\nПока.\nА когда ты вернёшься?\nКогда ты вернёшься?\nВ понедельник или субботу.\nПусть Мадонна хранит тебя от всякого зла.\nХорошо, что они не умерли от голода в Риме.\nОни работают по ночам?\nНет, они прекратили, хватит.\nДень на день не приходится, всяко бывает.\nДа, это верно.\nКак ты нашла этих людей?\nТак получилось\nЯ осталась ночью на улице и встретила вас.\nА вот как вам пришло в голову заниматься этим делом?\nЯ и сам не знаю.\nПравда, не знаю.\nВот, мы приехали.\nТвой трамвай.\nТы далеко живёшь 19-й километр по дороге в Остию.\nКак тебя зовут?\nМария Чиакарелли.\nЖивёшь одна?\nМои родители умерли, когда я была маленькой.\nЯ из Рима.\nНу хорошо, иди спать, бедняжка.\nЯ только...\nПока.\nЧто такое?\nСпасибо, спасибо за всё.\nДон Минченцо, прибыла группа из Венеции!\nВата, сладкая вата!\nШарики из спелой вишни!\nДобро пожаловать на молебен!\nМадонна творит чудеса.\nВата, сладкая вата!\nШарики!\nДавай руку.\nОсторожно, он инвалид.\nСпасибо.\nВанда, посмотри, сколько народу!\nДавай, дядя, пойдём поставим свечи.\nСкажите, сколько стоят свечи?\nСмотря какие.\nЭти - по 50, эти – по 100, эти - по 200 лир.\nЯ куплю самую большую.\nДаже две, тебе и себе.\nВанда, давай купим свечи.\n- Эти подойдут?\n-Да.\nМне одну, но я сама за неё заплачу, сама.\nНет, я плачу за всех.\nА что теперь с ней делать\nКакая тупица!\nСколько за все?\nДве четыреста.\nДорогу!\nПропустите больного человека.\nРазрешите пройти!\nС дороги, пропустите нас!\nТакой молодой.\nМы здесь, подождите!\nПойдёмте фотографироваться!\nПойдёмте фотографироваться!\nУже иду!\nПошли, Кабирия, нас ждут.\nИду!\n- Где Ванда?\n- Я здесь\n- Ванда, пошли.\n- Иду.\nЯ хочу сфотографироваться.\nСфотографируйте меня, пожалуйста.\nЧто теперь надо делать\nВо-первых, пойдём на исповедь\nТуда, вниз, к исповеднику.\nНо я вчера исповедовался.\nОсторожней, он же калека.\nВанда,..\nя попрошу Святую Мадонну о том же, о чём ты .\nА разве я тебе сказала?\nТолько ты не говори, что забыла.\nЯ хочу попросить большую квартиру рядом с парком.\nВанда, это же совсем не то.\nТы что?\nТы что, забыла?\nПрекрати.\nРазве нельзя просить, о чём хочется?\nНо ты говорила, что попросишь ..\nЯ передумала.\nВанда.\nНе надо так.\nЧто с тобой?\nТы задула мою свечу, будь осторожней.\n30 мест по тысяче лир за каждое.\n- Итого 30 тысяч.\n- Ты шутишь\n- Я дал 35 тысяч за все.\n- Правильно сделал.\nНа исповедь сюда.\nА что нужно говорить на исповеди?\nГосподи, я всем сердцем раскаиваюсь во всех содеянных грехах, и я...\nДа вот, написано же.\nПодожди.\nЧто ты ?\nНельзя идти вдвоём.\nНет, я войду.\nВсё, пока всё.\nВ другой вход.\nПотише, не толкайтесь, не толкайтесь\nМне плохо.\nТак лучше?\nТы что, не видишь Осторожно.\nОсторожно.\n- Вот алтарь, дядя.\n- Я больше не могу.\n-А в чём дело?\n- Я не могу.\nХватит, я не могу.\nЯ помогу, мы уже подходим к алтарю.\nМне нужно немного отдохнуть\nРози, подойди на минутку, он ослаб.\nМы почти это сделали, пойдём.\nВсе ваши желания будут исполнены Божьй милостью , если вы подойдёте к Нему с чистым сердцем и душой, очищенной от грехов.\nУслышь меня, Мадонна!\nМадонна, услышь меня!\nМолитесь Деве Марии, матери Божьй!\nСпасибо, Мадонна!\nСпасибо, Мадонна!\nСлавься, Мадонна!\nСпасибо, Мадонна, благосклонная Мадонна!\nПресвятая Мадонна!\nМилостивая Мадонна!\nСпасибо тебе!\nСпасибо, Мадонна!\nМадонна, спасибо тебе!\nМолю тебя, будь благосклонна!\nМадонна, спасибо тебе!\nМолю тебя, будь благосклонна!\nВанда, иди сюда!\nНе уходи, хорошо?\n- Что дальше?\n- Откуда я знаю.\nВанда, у меня сердце колотится, я боюсь, я боюсь её.\nТак странно, Ванда.\nСлавься, Мадонна!\nСпасибо, Мадонна!\nСпасибо, Мадонна!\nМадонна, услышь наши молитвы !\nА теперь преклоните колени и молитесь, молитесь, дети мои.\nЭннио, скажи, Мадонна сделает так, что я снова буду ходить\nЯ думаю, да.\nВстаньте, дети мои, поднимитесь\nЕсли вы очистили свои души, милость Всевышнего отныне распространится и на вас.\nМадонна, помоги мне!\nПусть моя жизнь изменится!\nПожалуйста, помоги мне найти лучшую долю в жизни.\nПожалуйста, помоги!\n-Дядя, пора.\n- Нет.\nПопробуй ходить Уверен, всё получится.\n- Нет, я боюсь\n- Я просто уверен.\nНу давай же!\nПожалуйста, я не могу, не могу.\nБоже, какой же я грешник!\nМадонна, спасибо!\nСпасибо, Мадонна!\nКабирия.\nКабирия, ты что, язык проглотила?\nНа, выпей.\nОсторожно.\nЕй бы не мешало хорошенько поесть\nОна так напилась, что и дорогу домой не найдёт.\n- Кабирия, что ты делаешь\n-Думаю.\nБрось, выпей.\n- Что она сказала?\n- Сказала, что думает.\nНе напрягай голову, а то она лопнет.\nПосмотрите на этих кретинов!\nНадоели со своим дурацким мячом!\nОн нарочно это сделал.\nЯ ему покажу нарочно!\nКрасавица, подкинь мячик!\nПодай мяч, красавица!\nХорошо, но в следующий раз я брошу его в другую сторону!\nВанда, может, она хочет остаться одна?\nПусть скажет, мы уйдём.\nОткуда ты взял, что я хочу остаться одна?\nЧто с тобой?\nОткуда ты взял, что я хочу остаться одна?\nЭй, если вам нужен мяч, идите берите сами!\nЗабирайте, если он вам нужен!\nКабирия!\nОстанови её, она даже идти не может.\nЯ не хочу с ней разговаривать, она мне надоела.\nКабирия, ты правда думала, что что-то изменится?\nВот дура-то!\nУвидите, это ещё не конец.\nЗнаете, что я сделаю?\nВы даже себе представить не можете.\nЯ продам дом!\nЯ всё продам и всё брошу к чертям!\nЯ уеду!\nИ куда же ты уедешь Куда?\nКакая разница?\nЯ же, я же не такая, как ты .\nЯ другая.\nНа земле полно мест, куда можно поехать и изменить свою жизнь\nА куда, по-вашему, они идут?\nКуда, скажи мне?\nЭй, куда вы собрались с флагами?\nЧто вы делаете?\nСобираетесь поддержать президента на выборах?\n-Зачем ты дала ей вино?\n-Да всего один стакан.\nКабирия!\nРазве Мадонна дала вам богатство?\nРазве она послушала вас, ответьте?\nТы хочешь, чтобы нас всех забрали?\nКабирия, вернись Пожалуйста, вернись\n- Сделайте что-нибудь\n-Да что я могу сделать\nДа вы только посмотрите на неё!\n- Ну и что?\n- Верни её, верни!\nОтстань, я хочу послушать\nКабирия!\nКабирия!\nУслышала Мадонна ваши молитвы , ну скажите?\nВы дураки!\nДавайте, давайте.\n\"Мадонна нас услышит!\" Как же, как же!\nИдите и не забудьте свои флаги!\nКабирия, хватит, хватит.\nУбирайтесь, проваливайте!\nКабирия!\nКабирия, ты совершенно пьяная.\nКто пьяная, я?\nЭто кто пьяная?\nКакой спектакль\nЯ тебя спрашиваю.\nХороший.\nЧто ещё?\nСиньоры , вы изволите видеть, голова моего помощника была проколота насквозь\nКинжалы прошли через коробку.\nИз ужасных ран должна была хлестать кровь\nНо уважаемые, вы в недоумении, потому что головы просто нет.\nЧто вы на это скажете?\nТеперь перейдём ко второй части нашего представления.\nЭксперимент с магнетизмом, гипнозом и другими видами внушения.\nЕсли есть добровольцы , прошу на сцену.\n- Может, вы ?\n- Я?\nДавай, разве ты не мужчина?\nДавай, давай!\nИдите, не бойтесь Обещаю, я не причиню вам вреда.\nЭто научный эксперимент.\nА мне за это заплатят?\nВы можете поучаствовать в удивительном эксперименте.\nТеперь нам нужна представительница прекрасного пола.\n- Синьорина, может, вы ?\n- Я?\nДа, поднимайтесь\nВсе увидят, какая вы храбрая.\n- Я не хочу.\n-Давай же!\nСиньорина, мы не можем бросить этих юношей в одиночестве.\nА может лучше вы ?\nИди, все хотят посмеяться.\nПосмотри на себя в зеркало и обхохочешься.\nНе надо на меня давить, не надо!\nПожалуйста, не заставляйте себя упрашивать\nВам понравится.\nМожет, вы хотите, чтобы я сам за вами спустился?\nИдите, не бойтесь, все вас просят.\nВы же ведь среди друзей.\nВсё это жульничество.\n- Идите, синьорина.\n- Хорошо, иду!\nНастоящий доброволец!\nЯ ведь могу и не ходить\nПрекрасно.\nДрузья мои, не бойтесь\nПрекрасно.\nВы храбрая девушка, это делает вам честь\nИдите сюда.\nВсё будет хорошо.\nА теперь, друзья , давайте развлекаться.\nАх, дырявая голова, это непростительно!\nЯ забыл, что синьорина Вера всё ещё здесь\nКак же я могзабыть, подумать только!\nМне кажется, здесь тепло.\nКак вы думаете?\nМожет, прогуляемся на лодке?\nКто-нибудь страдает морской болезнью ?\nНет, когда я был маленьким, то плавал по реке.\nХвастун, ты же боишься воды .\nЗначит, всё в порядке.\nХорошо, мы прекрасно прогуляемся.\nА вот и лодка.\nМы назовём её \" Отважная\" .\nПри плохой погоде лучшей лодки нам не найти.\nВсе на борт!\nНе заставляйте меня упрашивать вас.\nВы постойте здесь Идите за мной.\nПогода прекрасная, море спокойное.\nКуда вы ?\nСмотрите сюда!\nСмотрите на меня!\nВоттак.\nНевольники, возьмите вёсла.\nСмотрите мне в глаза!\nНачали грести.\nРаз, два, три.\nМоре синее спокойное, тихое и прозрачное.\nВы чувствуете морской ветерок и запах морской соли и йода.\nКакое удовольствие.\nСмотрите, дельфины !\nРебята, смотрите, дельфины !\nЗдесь глубоко, погода начинает портиться.\nМы в открытом море.\nВолны большие, начинается шторм!\nУпритесь ногами.\nВерьте, мы доберёмся до суши.\nСледите за кормой!\nМама, нам никогда не выбраться!\nПресвятая Дева Мария, услышь меня!\nГосподи, помоги нам!\nПомолитесь за наши души!\nУспокоились Спасибо, синьоры , спасибо.\nВсё-всё, вы свободны , свободны .\nНу ребята, вы так перепугались\nСтрухнули?\nНе уходите.\n- Вы мне?\n- Вам.\n- Разве ещё не всё?\n- Нет, не всё.\nОставляете меня в одиночестве?\nНо ведь уже всё.\nВы замужем или нет?\nНет.\nВам понравилось представление?\nНет, не очень\nЯ бы хотел поговорить с вами.\nПодойдите, пожалуйста.\n- Вы из Рима?\n-Да, из Рима.\nА в каком районе вы живёте?\nКолонна, Приоли, Прати?\nВ Прати.\nНе пытайтесь обмануть меня.\nСейчас вы расскажете, где живёте.\nВ Сан-Франческо.\nПочему вы смеётесь\nНе обращайте внимания, они шутят.\nВы сказали, что не замужем.\nА вам хотелось бы замуж?\nОткуда вы это взяли?\nКому она нужна?\nВы , конечно, хотели бы выйти замуж.\nЭтого хочет каждая девушка.\nЯ знаю одного очаровательного юношу, который ищет спутницу жизни.\nОн бы с радостью женился на вас.\nНа мне?\nОн красив и здоров.\nУ него собственный Феррари.\nА чем вы занимаетесь\nОна графиня.\nПослушайте, я довольна жизнью .\nУ меня всё есть, всё.\nА теперь до свидания.\nСлышали?\nУ меня всё есть Всё есть\nЧто с вами?\nЯ очень рад за вас.\nЗначит, у вас есть деньпи в банке, собственность и всё остальное?\nУ меня свой дом.\nИ такое бывает.\nА сейчас, если вы не против, я уйду.\nСекундочку.\nВы ставите меня в дурацкое положение.\nПозвольте, по крайней мере, представить вам этого юношу.\n- Его зовут Оскар.\n- Какой Оскар?\nОскар!\nИди к нам.\nКак же хорошо ты одет.\nПодойди ближе.\nЯ хочу представить тебя этой молодой особе.\nДумаю, она будет рада.\nКак поживаешь\nЯ счастлив, что познакомил вас.\nТеперь вы встретились, и я оставляю вас наедине.\nВы в чудесном саду, повсюду растут цветы .\nТишина.\nИ вы слышите только шелест листвы .\nВы можете разговаривать друг с другом, секретничать, и никто вас не слышит.\nСиньорина, смотрите, Оскар предлагает вам руку, в этом нет ничего плохого.\nНо мы же только встретились\nВы идёте по поляне, поросшей цветами.\nСладко поют птицы , и Оскар не смеет заговорить с вами.\nОн слегка оробел.\nВы вынуждены умолять его.\nНо вот он решился и говорит:\n\"Синьорина, я так долго ждал нашей встречи.\nМожно задать вам вопрос?\"\nДа.\nУ вас есть жених?\nБыл ли в вашей жизни мужчина?\nЯ так и подумал.\nЯ часто смотрел, как вы стоите у окна.\nВидел вас по воскресеньям в церкви.\nВаши глаза всегда опущены .\nА ещё я видел, как вы собираете цветы .\nКто любит цветы , у того доброе сердце.\nМогу ли я надеяться вас снова увидеть\nСпасибо.\nКак вы сказали ваше имя?\nМария.\nМария, какое чудесное имя.\nСпасибо, синьорина Мария.\nЯ сохраню эти цветы как драгоценные сокровища.\nВы подарите мне танец?\nПожалуйста, маэстро.\nОскар, Мария любиттанцевать\nОркестр начинает играть чудесный вальс .\nЯ богат, но печален и одинок.\nЧто проку иметь машину, останавливаться в роскошных отелях, скитаясь по свету в одиночестве?\nНа самом деле мне нужен дом, полный детишек, и жена, как вы .\nМы должны были встретиться, когда мне было 18.\nУ меня были прекрасные чёрные волосы , которые спадали мне на плечи.\nДля меня вы на всю жизнь останетесь юной.\nЗначит, вы действительно любите меня?\nЭто замечательно.\nВы не разыгрываете меня, правда?\nПоклянитесь\nСиньорина?\nСиньорина?\nНу всё, всё.\nВсё.\nЧто вы заставили меня делать\nЧто вы заставили меня делать\nСпасибо, спасибо.\nЗанавес!\nВы что, никогда не уйдёте отсюда?\nПора закрывать\nУхожу, ухожу.\nСкажи, все эти полоумные уже ушли?\nВсе ушли, только вы остались\nПочему бы вам не уйти?\nПора закрывать\nУходите.\nХорошо.\nЯ ещё покажу им!\nИзвините, синьорина.\nМеня зовут Донофрио.\nИзвините за беспокойство.\nОбычно я не знакомлюсь с дамами на улице.\nЯ сидел на балконе.\nЗначит, вы видели?\nПрекрасный спектакль, классная штука!\nМеня выставили на посмешище!\nСиньорина, простите.\nПозвольте сказать, я с вами абсолютно согласен.\nПредставляю, что вы чувствуете.\nЯ хотел сказать, вы мне понравились\nЯ искренне восхищён.\nЗнаете ли, мы все такие притворщики и ужасные типы .\nНо когда вдруг встречается такой человек, как вы , чистосердечный, по-детски доверчивый,\nто мы понимаем, что есть ещё люди чистые и открытые.\nВы пробуждаете в людях самое лучшее.\nЯ очень признателен вам.\nСтановится прохладно.\nПодержите, пожалуйста.\nЯ только надену свой плащ.\nМогу я предложить вам выпить\nНе знаю.\nВозьмите, пожалуйста.\nДураки проклятые, всё шляются, шляются!\nПростите, пожалуйста, мою настойчивость, но эти эксперименты с гипнозом могут пагубно отразиться на здоровь и спровоцировать серьёзные болезни.\nНаверное!\nПоэтому я так странно себя чувствовала.\nМеня бросало то в жар, то в холод, я потела, как при температуре.\nПосмотрите на меня.\nМогу предложить бренди.\nЭто поможет.\nДавайте зайдём.\nМы ненадолго.\nПожалуйста, садитесь\nДва бренди, пожалуйста.\nКлянусь, я никогда не страдал так, как сегодня вечером.\nЭтот шарлатан так разговаривал с вами.\nТакая неслыханная дерзость\nА вы отвечали энергично, но скромно.\nЯ очень страдал.\nВсё горело внутри.\nМне больно об этом говорить, я просто заболел.\nПоторапливайтесь, мы уже закрыли.\nНе беспокойтесь\nСуществуют вещи, которые не трогает вульпарность\nЭто не могло слишком повлиять на вас, я уверен.\nВсегда, даже в самой дикой толпе, найдётся человек, который поймёттакую, как вы , и оценит.\nВаше здоровь !\nА что было на сцене?\nОн заставил вас участвовать в деликатной и трогательной сцене.\nСцене любви.\nНа меня это так подействовало, не знаю даже, как описать\nА больше всего то, что вы были как 18-летняя девушка, привыкшая ходить на мессу с матерью , и у которой были чудесные чёрные волосы ,\nчёрные волосы до плеч.\nОн заставил меня это сказать\nНе пора ли расходиться?\nСколько я вам должен?\n150 лир.\nСпасибо.\nСпасибо.\nПора по домам.\nЯ хотел сказать\nТо, что случилось сегодня вечером, очень важно для меня.\nСовпадение.\nА вдруг?\nЯ живу не здесь\nПросто шёл без дела и всё, бродил по городу.\nЗнаете, я сюда не заглядывал никогда.\nИ вдруг решил пойти в театр.\nВпрочем, я не знаю, зачем.\nНаверное, это судьба.\nДа-да, судьба.\nДа, именно судьба.\nНо кто вы ?\nПо вашей манере говорить, можно подумать, что вы из Приоли.\nПростите, не понял?\nВы разговариваете как синьор из самой богатой части города – Приоли.\nМеня зовут Донофрио, я уже говорил.\nЯ бухгалтер.\nЧего вы хотите от меня?\nПоймите, ведь то же имя.\nОскар.\nИ меня зовут Оскар.\nПодумаешь, Оскар.\nНу и что?\nНу что из этого?\nОскар.\nСогласен.\nНо вдруг это ещё одно совпадение.\nВедь гипнотизёр выбрал имя Оскар.\nЯ должен вас увидеть ещё раз.\nВы ждёте автобус?\nДа, я езжу на автобусе.\nПора домой, я смертельно устала.\nМы прощаемся так, как будто больше никогда не встретимся.\nНет, мы должны увидеться снова.\nНельзя воттак расстаться.\nМне ещё много нужно вам сказать\nКогда же я увижу вас снова?\nНе знаю.\nЯ же работаю, торгую на улице.\nЧто мы можем ещё друг другу сказать Что?\nВы о чём?\nЧто мы можем друг другу сказать\nАвтобус.\nУвидимся, до свидания.\nДо свидания.\nНе говорите \" нет\" , пожалуйста.\nЯ тоже работаю.\nНо после работы , завтра вечером, например?\nЗавтра вечером, хорошо?\nЯ не могу вечером.\nИ даже в воскресень ?\nВ воскресень ?\nДа, в воскресень в 7, на вокзале.\nНе знаю.\nНо мне так хорошо сегодня.\nЗначит, договорились\nЧто вы делаете?\nЛадно, поехали.\nСиньорина!\nСиньорина, я здесь\nЯ был внизу.\nПростите, что заставил вас ждать, засмотрелся.\nЯ рад, что вы пришли.\nЧестно говоря, я побаивался, что вы приняли меня за ловеласа или даже за маньяка.\nВсё так необычно, странно.\nКак сон, правда?\nЯ позволил себе купить вам цветы .\nСпасибо, но не стоило беспокоиться.\nЗачем вы это сделали, зачем?\nПрошу вас.\nИдёмте.\nПозвольте.\nОн говорит, что ему нравится беседовать со мной.\nОн всё время говорит, ну просто замечательный рассказчик.\nОн из тех, кто много читает и образован.\nА ещё он назначил мне свидание, и мы ходили на премьру в\" Метрополитен\" .\nЭто уже треть .\nОни такие вкусные!\nЭто самые лучшие.\nТак о чём я говорила?\nМы смотрели прекрасный фильм -премьру, называется \" Гладиаторы \" , о мучениках-христианах.\nПравда, в фильме всё изменили, но он объяснил, что это нужно для сценария.\nА ещё он говорил, как ему нравится со мной разговаривать и гулять\nВсё потому, что я его понимаю.\nМожете не верить, но он красив, молод.\nУ него каштановые волосы .\nОн похож, он похож на северянина.\nА потом мы ходили в ресторан, ели пиццу, и он купил мне цветы .\nНу что скажете?\nИ ты считаешь, что это бескорыстно?\nБескорыстно.\nХватит разыгрывать нас, Кабирия.\nЗавтра мы с ним снова увидимся.\nКабирия, скажи мне, что ему надо?\nОткуда я знаю?\nКакая разница?\nКому какое дело?\nДумаешь, опять деньпи?\nТы угадала.\nПолиция!\nПолиция!\nСейчас тебя упекут.\nСейчас тебя упекут, ты этого заслуживаешь\nСтервы , вы все туда отправитесь\nЗдравствуйте, синьорина.\nЗдравствуйте.\nКак поживаете?\nПрекрасно выглядите.\nКак дела?\nХорошо.\nА у вас?\nТоже.\nСпасибо.\nЭто вам.\nСпасибо.\nНе стоило беспокоиться.\n- Пожалуйста.\n- Это уж слишком.\n- Возьмите.\n- Спасибо.\nКуда бы вы хотели пойти?\n- Куда хотите.\n- Спасибо.\nТогда идём в парк.\nДа, пойдёмте в парк.\nВаша семья живёт в Риме?\nУ меня нет семьи .\nМои отец и мать умерли, когда я был ребёнком.\nЯ совсем один.\nНо лучше одиночество, чем водить дружбу с кем попало.\nДа-да.\nМы жили в Поднополии, в маленькой деревушке.\nЕё название не имеет значения, вы всё равно его не знаете.\nЯ вырос в большом доме с керосиновыми лампами.\nУ отца был небольшой надел земли.\nОтца звали Джованни,..\nа маму\n- Эльза.\nМне нравится имя Эльза, чудесное имя.\nБратьв и сестёр у меня не было.\nИ когда отец умер, родственники наложили руку на этот несчастный кусок земли, который достался моей матери.\nМы узнали, что такое нищета.\nПривет, Кабирия!\nЧто ты делаешь, дитя моё?\nДобрый день, отец.\nПожертвуй для Святого Антония.\nИзвините, у меня нет с собой денег.\nЭто неважно, можно и потом.\nСамое главное – вера в Господа.\nА ты веришь в Бога, дитя моё?\nНет.\n- Не веришь в Бога?\n- Нет.\nПочему?\nКаждый должен верить\nКто находится в милости Божьй, тот испытывает удовлетворение.\nВозьми меня, я верю в Бога и удовлетворён.\nЯ ходила к Мадонне, просила её о благосклонности, но бесполезно.\nВсё дело в том, как просить\nМожет, ты просто перестала надеяться.\n- Ты замужем?\n- Нет.\nВсе девушки должны выходить замуж и иметь много детей.\nСупружество – священный долг.\nЭто тоже путь к Божьму благословению.\nПомолись Святому Антонию.\nА если захочешь у меня что-нибудь спросить, приходи во францисканский монастырь к брату Джованни.\nНе знаю, правда, сможешь ли ты меня найти, я всегда так занят.\nЭй, блондиночка!\nПока!\n-Завтра?\n-Завтра я работаю.\nТогда послезавтра, в то же время.\nЯ и послезавтра работаю.\nКак же так?\nВоттак.\nПо правде говоря, я хотела сказать, что мы больше не увидимся.\n- Никогда?\n- Никогда.\nЭто не значит, что ты мне не нравишься.\nНо что проку в наших встречах?\nЗачем всё это?\nМы просто теряем время.\nЗачем?\nЗачем, ответь\nЗачем?\nНу ответь мне.\nХорошо.\nЯ хочу жениться на тебе.\nМне хотелось заговорить об этом раньше,..\nно у меня не хватало мужества.\nЯ хочу этого с первой нашей встречи.\nЧто ты говоришь\nТы бы женился на мне?\nТы что?\nЖенился бы на девушке, которую знаешь всего две недели?\nНет, это не разговор.\nБлагодари свою счастливую звезду, что я не такая, как другие.\nМы только познакомились, всего две недели назад.\nТы понимаешь, что ты говоришь\nСоображаешь, что делаешь\nТак нельзя!\nТакими вещами не шутят.\nЭто нечестно!\nЗачем ты так говоришь\nЯ ни о чём не спрашиваю.\nИ ничего не хочу знать\nВсё неважно.\nК чёрту предубеждения.\nПотому что самое главное, что я понимаю тебя и хорошо знаю.\nТы и я – мы созданы друг для друга.\nНу уж.\nЯ хочу жениться на тебе, потому что ты нужна мне.\nНе говори так.\n- Ведь это несерьёзно.\n- Серьёзно.\nВанда!\nВанда!\nВанда!\nЧто случилось, Кабирия, что?\nЧто?\nЯ выхожу замуж, вот что!\nЯ выхожу замуж, он просил моей руки!\nМы покупаем в Пирати магазинчик.\nОн уже подписал контракт.\nЯ ничего не знала.\nОн всё устроил.\nДом, магазинчик...\nЯ продаю дом, продаю всё!\nДень свадьбы мы назначили через две недели.\nВанда, я уезжаю!\nА он знает, что ты ...\nДа.\nЯ ему всё рассказала, ничего не скрыла.\nОн ангел!\nОн сказал, что это его не волнует.\nОн меня любит.\nВанда, любит!\nВанда, кто-то на земле меня любит!\nКто там?\nЗдравствуйте, падре.\n-Здравствуйте.\n-Здравствуйте.\nМожно увидеть брата Джованни?\nЕго нет.\nА зачем вам брат Джованни?\nЯ бы хотела исповедаться.\nПочему бы вам не пойти в церковь\nДа, но я хочу исповедаться именно ему.\nИсповедь действительна вне зависимости оттого, кому исповедоваться.\n- Вы это знаете?\n-Да, знаю, падре.\nНо я хочу именно к брату Джованни.\n- Хорошо, подождите.\n- Спасибо.\nЭто тоже в чемодан.\nА это я не возьму.\nСову брать\nНет, это приносит несчасть .\nА раковину?\nДумаю, да.\nВоттак, возьму.\nНу-ка, посмотрим.\nОтлично.\nА это на продажу.\nКабирия, что за разорение?\nНе надо всё бросать, тебе это понадобится.\nА это?\nНет, всё на продажу.\nОставишь здесь, хорошо?\nЭто?\nНо я же не дарю, я это всё продала, понятно?\nТащить с собой дороже.\nИ потом, он ведь тоже всё продал, и я должна.\nМы всё начнём сначала.\nВсё начнём сначала, новую жизнь\nНа твоём месте я бы взяла вещи.\nНичего не забыла?\nА что мне забывать\nДеньпи взяла?\nКак же я могла забыть о деньпах?\nТы оставила пуховую кофту.\nЭто старьё , выброси.\nВыброси!\nМожно взять для тёти?\nБери, если хочешь Они уже хотят внести вещи.\nДа, им и вправду не терпится.\nЗакроешь мой чемодан?\nПодожди, ещё мамино фото.\nМама.\nЗабавный этот мир.\nНадо же, я выхожу замуж.\nЧто ты сказала?\nЯ выхожу замуж.\nЧто я сказала?\nНичего.\nКак я выгляжу?\nКак я выгляжу?\nПотрясающе.\nОна обошлась мне в две тысячи лир.\nОчень мило.\nНо ты слишком переплатила.\nНу где чемодан?\nДо свидания, Гарибальди!\nВ путь\nВанда, идём, идём.\nИдём.\nПосмотри на этих несчастных.\nКогда я такое вижу, просто с ума схожу.\nВанда, пошли.\nВот ключи от дома, я ухожу.\nДо свидания.\nДо свидания.\nДо свидания.\nЕсли вам что-нибудь понадобится, это моя подруга Ванда, она напишет мне.\n- Пока.\n- Приятного путешествия.\n- Приятного путешествия!\n- Спасибо, вам того же.\nДо свидания, дедушка!\nДедушка!\nЯ бы хотела попрощаться со всеми, это замечательно.\nЯ так счастлива, что вот упаду и расплачусь\nПонятное дело, после стольких лет.\nПривет, Чана!\nЯ уезжаю.\nДо свидания, Кабирия, до свидания!\nВесёлой свадьбы !\nПопрощайся за меня со всеми.\nНадо же, сегодня никого нет.\nКабирия, дай 10 лир!\n- Милые, правда?\n-Замечательные.\nСкоро ты выйдешь замуж, а я даже не видела твоего жениха.\nВедь я твоя подруга.\nНе могу же я привезти его сюда, где меня все знают.\nИдёт.\nАвтобус.\nПока, Ванда!\nНу не надо, не плачь\n-А кто плачет?\n- Вот и хорошо.\nНе волнуйся, я тебе напишу.\nКак только приеду, сразу пришлю адрес.\nУвидишь, ты тоже скоро выйдешь замуж.\nНадо торопиться, давай чемодан.\nЯ пришлю тебе адрес.\nЯ пришлю тебе адрес.\nНе забудь\nВанда, не беспокойся.\nЖди.\nТы тоже выйдешь замуж, так же неожиданно, как я.\n- Я надеюсь\n- Всё сбудется.\nПока, Ванда!\nПока, Кабирия!\nПока!\nКабирия!\n- Пожалуйста, я заплачу.\n- Ну что ты , не стоит.\nНо я была бы счастлива потратить свои деньпи.\nЗа всё всегда ты платил, а ведь всё, что моё – это твоё, разве нет?\nДа, конечно.\nОфициант!\nСолнце садится.\nТы увидишь, как чудесны здешние закаты .\nТы хочешь, чтобы я напилась\nЭто ведь лёгкое вино.\nПриданое.\nСпрячь\nПриданое.\n350 тысяч - это всё, что они дали мне за дом.\nОни знали, что я тороплюсь продать, и воспользовались этим.\nЯ забрала все деньпи из банка.\n400, всего 750 тысяч.\nТы никогда не спрашивал, есть ли у меня деньпи.\nТы никогда не спрашивал, есть ли у меня деньпи.\nАнгел святой, ты и предположить не мог, что у меня такая куча денег.\nЯ говорил, что не хочу об этом ничего знать\nПойдём отсюда.\nЕсть мужчины , которым нравится мучить женщин.\nИх интересуеттолько одно: деньпи.\nТы не поверишь, но за любовь ..\nза любовь я отдала бы все свои деньпи.\nА они крадут деньпи.\nПодумать только, в мои годы я кому-то нужна!\nПрости.\nПрости.\nОфициант, получите.\nИдём.\nОдно я знаю точно: рано или поздно но я бы изменилась, изменилась обязательно.\nЯ бросила бы всё.\nПредставляешь свою жизнь, похожую на мою?\nПредставляешь\nЗнаешь, что мы с Вандой хотели сделать\nМы хотели купить наркотик и забыться, забыться навсегда.\nА куда мы пойдём?\nКак здесь хорошо!\n- Погуляем?\n-Давай.\nНе помню даже, с чего я начала.\nКажется, была ещё не очень старая.\nГоды , годы .\nА чемодан мой возьмём?\nНет, заберём потом.\nВидел бы ты меня в 15 лет.\nКакие у меня были волосы !\nЯ была ужасно наивна.\nМоя мать хотела только одного, чтобы я зарабатывала деньпи.\n- Куда мы идём?\n- Просто гуляем.\nПошли вниз.\nПоцелуй меня, Оскар.\nСпасибо, любимый.\nИдём.\nЯ знаю короткую дорогу.\nОскар!\nОскар, куда ты пропал?\nПлохой мальчик.\nЯ нарвала для тебя цветов.\nКак замечательно они пахнут!\nА пойдём ещё куда-нибудь Пойдём?\nХорошо.\nПонюхай.\nКакие это цветы ?\nКакие?\nЧто с тобой?\nТы загрустил?\nЯ?\nНет.\nЭто потому, что я перестала петь\nДавай вырежем наши инициалы на дереве.\nПойдём на озеро, посмотрим закат, там очень красиво.\nЗакат?\nЯ знаю, что у тебя на уме.\nТы и в самом деле хочешь смотреть закат?\nТы был прав.\nЧудесно!\nВ мире всё-таки есть справедливость\nТы страдаешь, идёшь напролом через невзгоды , но, в конце концов, к каждому приходит его звёздный час.\nТы мой ангел.\nУ тебя руки холодные, ты замёрз?\nНет-нет.\nО чём ты думаешь\nКрасиво, да?\nКак там глубоко?\nХорошо бы взять лодку и доплыть до середины .\nИнтересно, там внизу есть лодки?\nТы умеешь плавать\nНет, нет, не умею.\nОднажды меня столкнули в воду.\nЯ стала тонуть, но меня спасли.\nЧто такое?\nВ чём дело?\nЧто такое?\nТы ведь не убьёшь меня?\nНе убьёшь\nОтветь\nТы не убьёшь меня?\nОтвечай!\nГовори же.\nСкажи.\nСкажи!\nИз-за денег?\nИз-за денег, да?\nУбей, убей меня!\nНу что же ты ?\nУбей!\nЯ хочу умереть Я не хочу жить\nМне осточертела такая жизнь\nУбей!\nУбей меня!\nСтолкни меня в озеро!\nЯ не хочу жить Я хочу умереть\nЯ не собираюсь тебя убивать\nЯ только...\nТихо!\nНу давай, убей меня!\nНу давай!\nЯ не хочу жить, с меня довольно!\nУбей меня, пожалуйста!\nЯ не хочу жить Только умереть\nДай мне умереть, убей меня!\nУбей!\nМаурицио, поторопись\nМы уже идём!\nМы идём домой, правда, я не знаю, как мы туда попадём!\nДобрый вечер.\nБерт Ланкастер\nКирк Дуглас\nВ фильме ПЕРЕСТРЕЛКА В О.К. КОРРАЛ.\nВ фильме также снимались:\nРонда Флеминг\nДжо Ван Флит\nДжон Айлэнд и другие.\nАвтор сценария:\nЛеон Урис.\nОператор:\nЧарльз Ланг.\nКомпозитор:\nДмитрий Темкин.\nПродюсер:\nХолл Би Уолис.\nРежиссер:\nДжон Старджес.\n-Привет, Эд.\n-Где Док Холидэй?\n-Наверное в отеле.\nОн ждал тебя уже...\n-Скажи ему, что я жду его.\nВ этом нет нужды.\nВесь город знает, что ты его ждешь.\nПрежде чем...\nЗаймись своим делом.\nИ не лезь в мои дела.\nТвой брат пришел сюда пьяный и просил чтобы...\nВиски!\n-Он хотел убить его.\n-Быстро!\nБудь по-твоему, Эд.\nСдай оружие, если хочешь остаться.\nОставь бутылку.\nУ тебя нет шанса.\nС Бэйли еще двое.\nДорогой, пора убираться отсюда пока не поздно.\nВесь город, включая шерифа, точит на тебя зуб...\nОни собираются повесить тебя за очередное убийство.\nТы это знаешь, Док.\nТы меня даже не слушаешь.\nКейт, мистер Бэйли приехал из форта,\n-чтобы поговорить по-джентльменски.\n-По-джентльменски.\nБудет некрасиво, если я уеду из города.\nХватить болтать про джентльменские дела.\nДело в том, что ты... это то, что ты не совсем понимаешь.\nПочему ты всегда обращаешься со мной, как будто я дерьмо?\nТы не лучше, чем я.\n-С этим можно поспорить.\n-Правда?\nЧто ты говоришь?\nВот что я тебе скажу, Док.\nТвое пижонство и умная болтовня не делают тебя джентльменом.\nТы такое же дерьмо как и я.\nИ я устала это слышать.\nПлантация в Джорджии и все твои друзья.\nИх давно уже нет, давно!\nДавно!\nИх уже нет, но я с тобой.\nТвоя семья не пошевелила даже пальцем, чтобы позаботится о тебе после войны.\nТы действительно хорош.\nОни тобой так гордятся.\nНе смей говорить о моей семье в таком тоне.\nДок, пожалуйста...\nДок, пожалуйста... забудь о Бэйли.\nДавай уедем отсюда.\nМожет быть... может поедем в Лоредо.\nТы же сам говорил, ты же хотел поехать туда.\nУ нас еще есть время.\nТвое беспокойство меня очень трогает.\nТы знаешь, что я чувствую к тебе.\nЯ знаю, что ты чувствуешь.\nЯ не знаю, не знаю, что буду делать, если с тобой что-нибудь случится.\nТебе не на что будет жить.\nНе говори так, Док...\nЯ хорошо относилась к тебе.\nПочему ты обо мне никогда не думаешь?\nИди к Шэнси.\nСкажи, что я сейчас буду.\n-Не ходи туда.\n-Делай, что говорят.\nМне нужны деньги.\nУайт Эрп.\nКотон Уилсон...\nДавно не виделись.\nЯ планирую уйти со службы.\nДля меня новости есть?\nКлэнтон проезжал мимо, три дня назад и отправился на восток.\nДжонни Ринго был с ним.\nНа восток?\nТы не получил телеграмму?\nПолучил.\nПочему ты его не задержал?\nУ меня на него ничего нет.\nЕго не за что задерживать.\nНе за что?\nНа нем висит куча преступлений.\nЯ все спланировал, чтобы он попался тебе в руки.\nОдин человек в Техасе смог бы его задержать.\n-И это ты.\n-Хватит молоть чушь, Эрп.\nКотон, ты меня знаешь.\n10 лет назад я покровительствовал тебе в Оклахома Сити.\nПомнишь, как ты подстрелил самых кровожадных стрелков?\n10 лет это очень много.\nЯ становлюсь старым.\nНикто не говорил мне, что Котон Уилсон стал трусом.\nТы не имеешь права так говорить со мной, Эрп.\nЯ был один на один с самой кровожадной бандой.\nПочему ты не задержал Клэнтона?\nНе справляешься, тогда верни значок.\nЯ верну значок...\nЯ защищал закон 25 лет.\nМною затыкали все дыры.\nИ знаешь, что у меня есть?\nКомната за 12 баксов в месяц и старенький домик.\nДумаешь, мне нравится так жить?\nЭто тупик, Эрп.\nКогда-нибудь ты это поймешь.\nЭто происходит со всеми нами.\nГде этот ублюдочный трус?\nНе торопись, Эд.\nОн заставляет тебя нервничать.\nПочему Холидэй задерживается?\nХочет, чтобы они понервничали...\nУайт Эрп.\nКак давно тебя не видел.\nПочему не сказал, что едешь?\n-Рад тебя видеть.\n-Привет, Шериф.\nСигару?\nБудь я проклят.\nНаверное, издалека приехал.\nСначала Элсворт, Уичита, а теперь Додж Сити.\nНикогда не думал, что станешь шерифом.\nТы всегда был дикарем.\nЯ и сам не думал.\nСтэйк из моего запаса.\nКак братья?\n-Они женятся.\n-Женятся?\nНичего себе.\n-Мне нужна помощь.\n-Все, что угодно.\nКлэнтон и Джонни Ринго.\nТри дня назад.\nПротив них много обвинений.\nЯ просил Котона их задержать, но он облажался.\n-Котон струсил.\n-Ты что-нибудь знаешь?\nВряд ли, хотя, минутку.\nДок Холидэй играл с ними в покер.\nМожет он знает.\nБармен!\nБармен!\nПодай еще виски!\nЭд Бэйли, Док убил его брата.\nСам напросился.\nПришел пьяный, жульничал в карты.\nНаставил на Дока пистолет.\nТы знаешь его?\nДа, мы встречались, он был дантистом.\nОн отлично дерется.\nПроблемы всегда его находят.\nПо-моему, он даже участвовал в битве при Бут Хил.\nПредставляешь, он заработал себе там репутацию.\nЭто точно.\nГде он?\nНужно найти его пока не поздно.\nВ отеле.\n-Стэйк подождет, я скоро вернусь.\n-Никуда он не денется.\nХолидэй.\nСадитесь, будьте как дома.\nНе стесняйтесь.\nНе знаю, помните ли...\nПомню, конечно, Уайт Эрп.\n10 лет назад лечил вам зубы.\nЕсли бы я знал, что встречу вас через 10 лет, то просто...\nЯ слышал, вы занялись другим делом.\nПлохо, вы были хорошим дантистом.\nПациентов раздражал мой кашель.\nМне нужна информация.\nЭта игра называется пасьянс.\nДавайте поторгуемся.\n-Добрый вечер, мистер Эрп.\n-Вас могло бы это заинтересовать.\nВы не знаете ничего, что могло бы меня заинтересовать.\nУ мистера Бэйли есть маленький пистолет, который он прячет в ботинке.\n-В левом или правом?\n-В левом.\nОтлично, Бэйли левша.\nКак Клэнтон и Ринго, которые были здесь 3 дня назад.\nВы играли с ними в карты.\nКуда они поехали?\nНе знаю.\n-Мы же заключили сделку.\n-Вы так сказали, а я не заключал сделок.\n-Вы знаете, куда они поехали?\n-Послушайте, вы мешаете мне играть.\nВы ненавидите закон, да?\nЕсть причина, по которой я не должен?\nВаш брат, Морган, обманул меня и забрал 10000 долларов.\nИ кстати, ваши братья позволяют себе все, что угодно.\nУвидимся, Холидэй.\nЕсли будете поблизости.\n-Узнал что-нибудь?\n-Ничего.\nМне кажется, они поехали в Тумбстоун.\nТам у него ранчо.\nНо я не уверен.\n-Твой брат шериф Тумбстоуна?\n-Именно.\nЯ послал ему телеграмму, чтобы он был настороже.\nЧто будешь делать?\nА что я могу поделать?\nЯ не знаю, где они.\nУтром поеду в Додж Сити.\n-Мистер Холидэй.\n-Да.\nОплатите ваш счет за проживание... я хочу сказать, что мы не знаем, съезжаете вы или нет.\nУзнаешь через 15 минут.\nТы заходишь в опасное место, Док.\nЕсли Бэйли не убьет тебя, то шериф всегда начеку.\nБудь умнее, лучше уезжай...\nТакое впечатление, что ты хочешь, чтоб тебя убили.\nМожет быть.\nДобрый вечер, Холидэй, сдай свой пистолет.\nДобрый вечер, Гарри.\nКак обычно.\nДа, сэр.\nЯ слышал, что приехал господин, который хочет поговорить со мной.\nОн лучше бы научил своего брата играть правильно в карты.\nЕсли ты увидишь этого господина, то скажи, что я буду ждать его в Бут Хилл.\nОттуда он сможет отправиться только в одно место... в могилу.\nЯ тут подумал, оказывается, он и не джентльмен вовсе.\nНастоящий трусливый сукин сын.\nНу что, Док, пошли.\nКонечно...\nВ чем меня обвиняют?\n-Что-нибудь придумаем.\n-Не сомневаюсь.\nСпасибо, Гарри.\nУберите его отсюда.\nВсе кончено.\nХватит.\nВсе к барной стойке.\nБесплатная выпивка за счет заведения.\nДай-ка мне пивка.\nПосле убийства такой беспорядок.\nДок испортил всем настроение.\nОн безумец, но очень смелый.\nЧто будешь делать, Эрп?\nТы же сам видел, они не имели право его забирать.\nОни не имели права это делать.\n-Кейт, его подруга.\n-Его подставили.\nБэйли хотел убить его.\nМисс Фишер, расслабьтесь и успокойтесь.\nЗакон разберется.\nВ этом городе нет закона.\nНе видел человека, который хотел бы, чтобы его убили.\n-Вы должны ему помочь.\n-Он меня не касается.\n-Пожалуйста.\n-Это не мое дело.\nОн мне даже не нравится.\nИзвините, спокойной ночи.\nУ меня есть лошади, мы могли бы отдать их за проживание в отеле.\nЭто все, чем я могу помочь.\nМне очень нравится Док, но к сожалению, я ничем не смогу ему помочь.\n10-ый номер...\n-Здесь живет Уилсон?\n-Нет, сэр.\nЗдесь только Док Холидэй.\nОн в своей комнате.\n-Мистер Эрп.\n-Я уже сказал, это не мое дело.\nМне плевать, что вы о нем думаете.\nНа улице происходит нечто ужасное.\nЭто уже вас касается.\nИ не важно, прав ли Док или нет.\nОн не заслуживает, чтобы его подвесили как животное.\nНужно уходить.\nС каких пор вы спасаете ублюдков от виселицы?\nНичего личного, не люблю линчевания.\n-Чего мы ждем?\n-Рано.\nСейчас самое время.\nГорит сарай Страджеса!\nПора.\nВыходи через черный ход.\nСпасибо, шериф.\nУвидимся в Додж Сити.\n-Еще раз спасибо.\n-Держись подальше от Додж Сити.\nДавайте воду!\nБыстрее!\nГраница.\nНичего себе.\n-Таким не место в Додж Сити.\n-Она наверняка из большого города.\nПохоже, она хочет остаться.\nЗдорово.\nКое-что нужно обсудить.\nНа самом деле, я приехал по делу.\nШеф Далкниф в ярости.\nМне нужны твои представители.\nТебе всегда не хватает людей.\n-Кто эта девушка?\n-Да, кто?\nКакая девушка?\nЯ узнал, что Док Холидэй и его девушка только что приехали в отель.\nДок Холидэй?\nЯ же сказал ему не приближаться к Додж Сити.\nПойду навещу его.\n-Дашь мне своих представителей?\n-Хорошо, но Чарли останется со мной.\nВозьмешь остальных.\nНе забудь вернуть их до приезда фермеров, ты же знаешь, как нам будет трудно без них.\nМарио, иди прогуляйся.\nПришел поприветствовать меня?\nЯ говорил тебе, чтобы ноги твоей здесь не было.\nЛюблю острые лезвия, а ты?\nХочешь побриться?\nУ нас сегодня собрание.\nЯ хочу, чтобы ты пришел.\nНе могу.\nШериф Абелины послал меня сюда.\nКстати, пусть вам кто-нибудь напишет новую речь.\nСлышу одну и ту же в каждом городе.\nТогда останешься в отеле до послезавтра.\nПотом я посажу тебя на поезд и ты уедешь.\nУайт, какой ты жесткий.\nЯ в состоянии полного банкротства.\nМне не на что даже купить билет.\nШэнси сказал, что у тебя было целое состояние в Гриффине.\nА он не сказал, что 10000 долларов лежат в его сейфе?\nЗнаешь, что он сделал?\nТы сказал, что я должен покинуть город, а те две лошади возле отеля обошлись мне в 5000 долларов каждая.\nКак тебе это?\nПолотенце, пожалуйста.\nСпасибо.\nВсех так и тянет покуситься на мою жизнь.\nУайт... сколько тебе платят?\n100 долларов в месяц и 2 доллара за арест?\n-Хочешь подкупить меня?\n-Нет, не тебя.\nХочу предложить тебе сделку.\nНеплохо.\n-Сбережения есть?\n-Немного.\nХочешь купить ранчо или магазинчик?\nДавай все упростим.\nЗабираешь мои 10000, и я иду на все четыре стороны.\nДеньги имеют свойство накапливаться.\n50 на 50, да?\nЛюбому другому я бы отдал 10 процентов, но ты мне нравишься.\nМне нравится твоя стрижка.\nМне нравятся такие прически.\nА почему так щедро?\nПарикмахеру нужно это, шерифу нужен пистолет.\nА я картежник.\nДеньги это всего лишь инструмент в моих руках.\nИ ты гарантируешь, что ты исчезнешь?\nЯ никогда не исчезаю.\nИгроки в покер любят деньги.\nЯ никогда не проигрываю, потому что мне нечего проигрывать, даже свою жизнь.\nДоговорились?\nНу ты даешь.\nНу что ж, тогда тебе придется купить мне билет на поезд.\nХолидэй, я совершил много ошибок.\nИ совершу еще одну.\nЯ позволю остаться тебе в городе.\n-Это почему же?\n-Мне нравится твоя прическа.\nОстанешься здесь и будешь играть при одном условии.\nНикаких ножей, пистолетов и убийств.\nНикаких ножей, пистолетов и убийств.\nИменно.\nДаю слово джентльмена.\nИ еще кое-что...\nИли ухаживай за той девушкой,\n-или брось ее.\n-Кейт?\nБедняжка Кейт.\nОна любит то, что я ненавижу в себе.\nЗаплати парикмахеру, хорошо?\nЯ кое-что узнал об этой девушке.\nГде ты взял это?\nСделали для меня.\nЧто на счет леди?\n-Очень длинный ствол.\n-В самый раз.\n-И приклад какой-то...\n-Что ты несешь?\nДевушка, которая приехала позавчера.\n-И что?\n-Она сейчас в баре.\nГоворят, что у нее целые чемоданы прекрасной одежды.\nНекоторые из Франции.\nОна высокая, весит 120 фунтов, светлые волосы,\n-зеленые глаза...\n-Что она здесь делает?\n-Играет.\nОчень смешно.\nЕсли думаешь, что это смешно, тогда возьми и сам посмотри.\nТы умрешь от смеха.\nПривет, Уайт.\nВ чем дело?\nПридется прервать вашу игру.\nНе могу, Уайт.\nЖенщины имеют право играть.\nЗнаю, но каждый раз, когда женщина за столом, всегда возникают проблемы.\nИгра закончена.\n-Уайт, это Лора Дэнбо.\n-Ты мэр этого города.\nМы договорились с тобой об этом.\nУ мисс Дэнбо много своих магазинов\n-и она исключение.\n-Только не в Додж Сити.\nЗначит, это вы Уайт Эрп?\n-Шериф, судья и присяжный.\n-Да, мэм.\nНачиная с вас и заканчивая Южной стороной.\nКто этот ублюдок?\n-Заткнись и не лезь не в свои дела.\n-Ты разговариваешь с леди.\n-Похоже, шериф раньше не встречался с леди.\n-Вы играете в мужскую игру.\nПоэтому я и обращаюсь с вами, как с мужчиной.\nТы не джентльмен.\n-На этом и остановимся, мисс Дэнбо.\n-Не трогай ее.\nСтой Чарли.\nЯ устал от твоих нравоучений.\nДоставай пистолет, я убью тебя.\nУ меня нет пистолета, ковбой.\nЯ безоружен.\nНе подходи!\nТы пьян и не ведаешь, что творишь.\nОтдай пистолет, пока не начались серьезные проблемы.\nЯ не потерплю, чтобы так разговаривали с леди.\nСтой спокойно... и отдай мне пистолет.\nЯ не стрелок...\nЯ все равно бы никого не убил.\nЯ знаю, ковбой.\nТы просто хотел поразить леди.\nЧарли, отведи его, пусть умоется, и выведи его из салуна.\nВы арестованы.\n-За что, мистер Эрп?\n-За нарушение порядка.\nМинутку, Уайт.\nВсе нормально, шериф пытается спасти репутацию Додж Сити.\nКроме того, я люблю проводить время в тюрьме.\nМожет, позовете своих помощников?\nЯ очень отчаянная.\nЯ вас отпущу, если пообещаете, что не будете играть в этом районе.\nВ этом районе?\nНет, я уж останусь.\nВозможно, судья не такой правильный, как шериф.\nВы не откроете дверь?\nЗнаете, мне это пока не понадобится.\nКупите себе новую шляпу.\nА то эта маловата.\nЗакройте дверь, шериф.\n-Посадил ее?\n-За нарушение порядка.\n-Я вытащу ее.\n-500 на то, что не сможешь.\nДавай 1000, и я ее вытащу.\nУдваиваешь или нет?\nДоговорились.\nВернусь через 30 минут.\n-Добрый вечер, Чарли.\n-Привет, Док.\nГосподи, как же я устал за сегодняшний день.\nЯ провел полжизни за бумажной работой.\nВыпить хочешь?\nДок, ты же знаешь, что я не пью на дежурстве.\nЧто за праздник?\nХочу вытащить мисс Дэнбо.\nДавай.\n19.\n20.\nНе могу, Док.\nУ нее завтра суд.\nПод залог нельзя.\nХватит.\n21.\nТогда подожду Уайта.\nНе думаю, что он скоро вернется, Док.\n-Блэкджэк.\n-И у меня.\nЕсли бы мы играли по настоящему, то я бы захотел взглянуть на колоду карт.\nТогда попробуй.\nДержи мой.\nХорошо, что Эрп не разрешает носить такие штуки, кто-то может пострадать.\nПойду посмотрю как там заключенные и лошади.\n-Присмотри за офисом, Док.\n-Конечно, Чарли.\n-Никогда у меня не было столько ружей.\n-Что ты здесь делаешь?\nПришел выкупить мисс Дэнбо.\nОна же все-таки леди.\nНи каких поблажек.\nТогда освободи ее в обмен на информацию.\nТы не знаешь ничего, что меня может заинтересовать.\nА если я тебе скажу, Шингхай Пирс едет сюда с головорезами?\nШингхай Пирс?\nПохоже, ты не ладишь с ним.\nЯ хорошенько ему врезал, когда он напился и решил меня подстрелить.\nОн не плохой парень, просто заносчивый.\nОн собирается перестрелять весь Додж Сити.\nИ он нанял Ринго, чтобы ты не испортил веселье.\nИ самое главное...\nОн назначил цену за твою голову в 1000 баксов.\nА что еще?\nЯ думал, ты удивишься таким новостям.\nХолидэй, пока я здесь шериф, никто из них не посмеет приехать сюда с оружием.\nИ мне плевать, что его зовут Шингхай Пирс.\nОтлично сказано.\nПовторю эти слова на твоих похоронах.\n-Так как на счет мисс Дэнбо?\n-Забудь об этом.\nМы же договорились.\nТы договорился.\nА я не соглашался, ты помнишь?\nЧарли, ты работаешь на мошенника.\n-Правда?\n-Иди домой, я еще посижу.\n-Спасибо.\nСпокойной ночи.\n-Спокойной ночи.\nУайт, отпусти ее.\nОна ничего такого не сделала.\nДумаю, Чарли прав.\nВыпусти ее.\nСовесть?\nМожет, она мне нравится.\nСкажи ей, чтобы играла в другой комнате.\nНе хочу, чтобы она светилась на первом этаже.\n-Добрый вечер, мисс Дэнбо.\n-Добрый вечер.\n-Выходи, у нас еще куча дел.\n-Спасибо.\nШериф?\n-Приятного вечера, мистер Эрп.\n-Вам тоже, мисс Дэнбо.\nПриятного вечера, мистер Эрп.\nПара тузов.\nПосмотрим, что у леди.\n-50.\n-Мне еще.\n-50, мне еще.\n-Договорились.\nЕще 50.\nДок, нам пора.\nУже почти утро.\nТы слышишь?\nПочему ты молчишь?\n-Еще 100.\n-Док.\nКупи себе выпить.\n-Поднимаю ставку.\n-Для меня многовато.\nЕще 200.\nПоддерживаю леди.\n4 туза.\n-Господа, мы облажались.\n-Спасибо, господа, мне пора.\nВыдай мне деньги.\nСпокойной ночи.\n-Можно вас проводить?\n-Спасибо, Док.\n-Спокойной ночи.\n-Спокойной ночи.\n-Еще разок сыграем?\n-Давай.\n-Тетушка бы моя не помешала.\n-Спокойной ночи.\nГде Люк Шорт?\nРичи Бэл и его ребята грабанули банк в Салине.\nУбили кассира, едут сюда.\nЯ послал его в Абилин.\nКогда ты собираешься ехать?\nНемедленно.\nНужно только напасть на след.\nЛюк - единственный, кто умеет стрелять.\nА как же Чарли?\nКто-то должен присматривать за городом.\nНужен стрелок?\nТы?\nНет, спасибо.\nЯ неплохой стрелок.\nПроблема в том, что все мои враги не могут этого подтвердить.\n-Сам справлюсь.\n-Как хочешь.\nПодними правую руку.\nКлянешься ли ты...\nЭто смешно.\nЯ беру тебя.\nСобирайся, я приготовлю лошадей.\n-А мне не полагается звезда шерифа?\n-Только не при жизни.\nЛекарство?\nДля умного игрока, у тебя куча пристрастий.\nТы не протянешь и года.\nА что ты знаешь о пристрастиях?\nЭтот кашель не излечим.\nТогда забудь про эти вонючие салуны.\nПоезжай в горы и живи там.\nТолько не я.\nДа, ты привык жить рискуя.\nНет, пусть кашель высушит мое тело медленно.\nТочно.\nЖить быстро, умереть молодым.\nУайт, меня беспокоит лишь смерть в постели.\nНе хочу, чтобы это тянулось долго.\nКогда-нибудь меня все равно убьют.\nИ это будет очень быстро.\nЭрп, я приехал сюда не для того, чтобы выслушивать твои речи.\nМеня всегда это интересовало.\nЗачем ты приехал?\nЕсли я буду заниматься одним и тем же делом, рано или поздно ты сунешь нос в мое дело.\nВот так-то.\n-Я не хочу остаться твоим должником.\n-Ты ничего мне не должен.\nМне никто ничего не должен.\nИ уж точно, не Док Холидэй.\nСмотрю, тебе это нравится.\nНасколько я знаю, ты можешь сесть на лошадь и ускакать.\nНет, спасибо, я пожалуй, останусь.\nЗнаешь, мы с тобой очень похожи.\nУ нас есть пушки.\nТолько у меня значка нет.\nВ чем дело, священник?\nНе нравится, когда тебе причитают?\nЗаткнись и ложись спать.\nРичи Бэл больше не будет грабить банки.\nЯ думал, ты спал.\nНет, я думал.\nВозвращаемся в Додж.\nХочу лечь в постель.\nЗачем?\nОна не убежит.\nЯ уж точно, спать не хочу.\nНе ходи в эти грязные салуны.\nПоезжай жить в горы.\nЧарли.\nПривет.\nПойду составлю рапорт.\nСпасибо, Док, теперь мы в расчете.\nПока нет.\nПока долги не выплачены сполна.\nСлышал, ты хорошо стреляешь.\nНу, я готов поработать помощником.\nВсе нормально?\nНайди Кейт и скажи, чтобы пришла немедленно в отель.\nЯ уже давно не видел Кейт, Док.\nВ смысле?\nНикто не видел ее с тех пор, как ты уехал.\nПозвать врача?\nДоброе утро, Лора.\nНе думала, что буду рада вас видеть.\n-Что случилось?\n-Лошадь хромает на правую ногу.\nПодкова треснула.\nЛучше пока не ездить на ней.\nОставьте ее здесь.\nЯ пришлю кузнеца.\nХорошо, что вы едете один.\nЭто не случайно.\nЯ знаю, что каждый день вы проезжаете здесь.\nЯ подвезу вас до города.\nИли вы хотите пойти пешком?\nДержитесь крепче.\nЕще крепче.\nЧто вы здесь делаете, Док?\nСейчас только 3 часа.\nОздоровительная прогулка.\nНужно пройти 20 ярдов.\nЧто тут происходит?\nПриводим в порядок стадо к приезду ковбоев.\nНе хотите, чтобы Бэт возвращался?\nХотя, наши помощники шерифа...\nА где Кейт?\nГде она, Чарли?\nОчень тяжело объяснить, Док.\nЯ...\nСлушаю...\nВы обещали Уайту, что не будет никакой перестрелки.\n-Вы не...\n-Где она, Чарли?\nВ отеле Уолли.\nРинго приехал в город и забрал с собой Кейт на 3 дня.\nПохоже, намечается небольшая резня.\nЭто только начало, подождите.\nУайту сейчас перестрелка ни к чему.\nЭто лишние проблемы.\nСкот перемешался в стаде.\nПроваливай отсюда, ублюдок!\nИ больше не возвращайся!\nУнеси меня.\nЯ готова полюбить тебя, а его оставить.\nЗначит, ты заболела.\n-Так, так.\nПришел закон.\n-Тебя не было 3 дня.\nА я думала, ты не заметишь.\nА ты ищешь меня по всей стране.\nЯ болел, Кейт.\nТы нужна была мне.\nТогда накинь-ка веревку на мою шею и води за собой, если я тебе нужна.\n-Как всегда.\nОпять все сначала.\n-Оставь меня в покое, Док.\nВсегда поворачиваешься спиной.\nЕсли бы ты замечал меня, то я бы не делала этого.\nКакая тебе разница, куда и с кем я хожу?\nЗаткнись!\nСобирай вещи, ты уезжаешь.\nОна остается.\n-Это не твое дело, Ринго.\n-Ты не имеешь право сюда входить.\nЯ разговариваю с Кейт, а ты гуляй.\nГовори в его присутствии.\n-Шлюха.\n-Минутку.\nНе смей разговаривать так с моей женщиной.\n-Твоей женщиной?\nЭто женщина каждого.\n-Я разорву тебя на части.\nЯ безоружен, Ринго.\nТеперь нет.\nБери.\n-Я не буду стрелять.\n-Не будет.\nОн обещал Эрпу, что будет послушным.\nЯ слышал, что хорошо умеешь расправляться с алкашами.\nТак давай, бери.\nНе буду.\nТогда выпей.\nДок.\nМне понравилось танцевать.\nЖаль, но мне нужно идти.\nВы разбили многим сердце.\n-Спокойной ночи.\n-Спокойной ночи.\nМогу я вас проводить?\n-Спасибо, мне не далеко.\n-Мы могли бы прогуляться.\nЗдесь так прекрасно.\nЯ рада, что приехала сюда.\nУ вас поменялось выражение лица.\nВы выглядите как маленькая напуганная девочка.\nЯ не напугана и уж точно, не маленькая девочка.\nПочему вы поехали со мной?\nХотела бы ответить на ваш вопрос.\nНо я не знаю.\nТогда я отвечу.\n-Отличная стрельба, да Ринго?\n-Да.\nЭто им урок на всю жизнь.\n-Мы - хозяева таких городов.\n-Точно.\nШингхай Пирс в городе.\nЕго люди громят улицу.\nНайдите Уайта и приведите помощь.\nЯ постараюсь их задержать.\nНикто не должен выходить на улицу.\nПирс, угомони своих людей, пока никто не пострадал.\nПередай своему Боссу, что я жду личного приглашения.\n-Ты арестован, Пирс.\n-Ты слышал?\nЯ арестован.\nЯ слышал.\nОчень шумно.\nОчень.\nХватит играть.\nПора уходить.\nХватит болтать, я еще не доиграл.\nЕще.\nПожалуйста, Док.\nДоговорились.\nЧто тут у нас?\nТанцы.\nРазве это не прекрасно?\nПриглашаете нас на танец?\nНе очень гостеприимно.\nЗабирай своих выродков и проваливай отсюда.\nСлышали?\nЭто уважаемые люди.\nДеньги они всегда готовы забрать.\nА мои люди готовы потанцевать с вашими женщинами.\nМои ребята хотят танцевать!\nПианист, музыку!\nЖивее!\nПривет, Шингхай.\nНу что ж, мои дни сочтены.\nТы ответишь за этот шрам, который ты нанес мне в Вичите.\nСдайте оружие и пройдемте со мной.\nЛучше молись, Эрп.\n-Твой блеф не сработает.\n-Подумай, прежде чем навлечь на себя беду.\nУбирайся отсюда.\n-Давай надерем ему зад, босс.\n-Отличная идея.\nПусть твои друзья посмотрят, на сколько ты крут.\nХочу посмотреть как ты танцуешь, шериф.\nХрабрые изречения, когда за тобой 20 человек.\nДавай выйдем и сразимся один на один.\nНет, даже и не пытайся.\nВсе время блефуешь, да?\nНу что ж, ребята, взять этого ублюдка.\nГоспода, вы так много шумите, что я было уже испугался.\nВы испортили мне игру.\nВеселье закончено.\nСдайте оружие.\nПерестреляем их.\n-Ну что, Шингхай?\n-Давайте, попробуйте.\nТы первым получишь пулю.\n-А ты вторым, Ринго.\n-Начнем, босс.\nДаю вам 5 секунд, чтобы сдать оружие.\n1... 2... 3... 4...\n-Хватит, ребята.\nСдайте оружие.\n-Гэрри, Джэк, заберите оружие.\nБыстрее.\nДок!\nКто еще хочет испытать удачу?\nПошел, давай, шевелись.\nДок, это еще не конец.\nМогли бы закончить, но я сегодня добрый.\nБыстрее!\nШевелитесь.\n-Келли, отведи их и запри на всю ночь.\n-Вы слышали шерифа?\nШевелитесь.\nДумаю, ты не ждешь благодарности.\nТеперь мой долг отдан сполна.\nНичего личного, шериф.\nДоброе утро, Док.\nДоброе утро.\nПодумал, что тебе будет полезно узнать, что одним шерифом станет меньше.\nДля меня это хорошая новость.\nЯ еду в Калифорнию.\nКуплю ранчо и уеду, пока не поздно.\nУмно.\nЛора едет со мной.\nМы поженимся через несколько дней.\nЯ приглашаю тебя на свадьбу, если это не мешает твоей игре.\nС меня нет толку на свадьбах, только на похоронах.\nУайт, я не поеду.\nОна хорошая женщина.\nЖелаю вам счастья.\nТебе повезло, уезжаешь из этих мест.\nМожет, и ты попытаешься?\nУвидимся, Док.\nЯ хочу вернуться, Док.\nПожалуйста.\nДай мне шанс.\nПозволь мне вернуться.\nЯ сделаю все, что захочешь.\nМне плевать на то, как ты со мной обращаешься.\nПрости за мои выходки.\nТы не виновата, я не виноват, никто не виноват.\nПросто, так легла карта.\nЯ никогда не давал тебе шанса.\nМожет быть, все было бы по-другому.\nЕще не поздно, Док.\nОбещаю, что стану хорошей женой.\nСлишком поздно для нас обоих.\nПока есть шанс, найди себе получше мужчину.\nНе отпускай меня, Док.\nНе отпускай меня.\nОставь меня в покое.\nОставь меня в покое.\nНадеюсь увидеть тебя мертвым.\n-Привет, Уайт.\n-Привет.\nПисьмо от генерала.\nИ что там?\nПишет, что готов сделать тебя шерифом США, когда захочешь.\nУайт Эрп, шериф США, все что нужно.\nОни все мертвы, Чарли.\nДа, чуть не забыл...\nОн твой.\nЯ покончил с законом.\n-Пришла телеграмма.\n-Читай.\nВирджил мой брат.\nУ него проблемы, я нужен ему.\nПойми, Лора.\nКакая же я дура, что влюбилась в тебя.\n-Если бы я мог...\n-Уайт, когда я тебя встретила, я подумала, что не смогу следовать за тобой из города в город и ждать новостей о твоей смерти.\nЯ так не могу.\nМы не можем начать совместную жизнь, когда на тебя наставлен пистолет.\n-Клянусь, Лора.\nТумбстоун и все.\n-Это не кончится.\nТвоя репутация всегда будет следовать за тобой.\n-Он мой брат.\n-А я будущая жена.\n-Я не могу его бросить.\n-Не бросай меня.\nЯ брошу все, поеду за тобой.\nБуду работать с тобой в поле, но ты должен обещать мне.\nЯ должен ехать в Тумбстоун.\nДавай, зачисти весь Тумбстоун.\nТаких городов множество и все они ждут великого Эрпа.\nДавай, перестреляй всех бандитов.\nПоезжай!\nЯ люблю тебя, Лора.\nЯ люблю тебя, Уайт.\nДобрый день, шериф.\nРешил прокатиться?\nДа, 700 миль.\nВ Тумбстоун?\nЯ и сам туда еду, может, кашель пройдет.\nС каких пор ты заботишься о здоровье?\nНемало важен и финансовый вопрос.\nНикто уже не хочет со мной играть.\n-Не против, если я поеду с тобой?\n-Это свободная страна.\nГде твое снаряжение?\nКладбище Бут Хил.\nТумбстоун.\nСпасибо что подбросил.\nЕсли хочешь, продай мою лошадь.\nДок.\nЗнаю, никаких ножей, пистолетов и убийств.\nКак здорово.\nЯ уже забыл, что такое домашняя еда.\nБэтти, я украду тебя у Вирджила.\nТы единственный, кто не женат.\nУ меня семья в Дэдвуде, даже маленький Джимми пытается жениться.\nЧто значит маленький?\nМне скоро 19.\n19?\nКогда ты женишься, Уайт?\nСигару?\nЭто сигнал для женщин и детей покинуть комнату.\nИдем, Томи, пора спать.\nОбязательно?\nДа, обязательно.\nУвидишь дядю завтра.\n-Спокойной ночи, дядя Уайт.\n-Спокойной ночи.\n-Спокойной ночи, дядя Морган.\n-Спокойной ночи.\n-Спокойной ночи, дядя Джим.\n-Спокойной ночи.\n-Спокойной ночи, папа.\n-Спокойной ночи.\nМы рады, что вы приехали.\nНадеюсь, вы приехали не по работе.\nОна чем-то расстроена.\nОна просит меня уйти с работы.\nТы же знаешь женщин.\nПерейдем к делу.\nМорган и Джимми уже в курсе.\nТы знаешь Клэнтона.\nУ него есть ранчо за пределами города.\nДа, я знаю.\nОн организовал банду головорезов и держит шерифа округа под контролем.\n-Кто он?\n-Котон Уилсон.\nКотон Уилсон.\nОн работает на него.\nКлэнтон забирает у мексиканцев скот.\nОн должен перегонять его, но единственный путь через Тумбстоун.\nНо он не сделает этого, пока мы контролируем город.\nВот так.\nУ него много людей и все они отличные стрелки.\n-Мы не можем отбивать его атаки вечно.\n-А что на счет жителей Тумбстоуна?\nДжон Клам, издатель газеты, и некоторые люди, готовы помочь нам, если нужно.\nМы думаем, что нужно покончить с этим.\nМеня беспокоит одно, и я скажу об этом.\nБудет много разговоров о том, что ты приехал с Холидэем.\nА что не так?\nОн самый отчаянный убийца, вот что.\nПлохо, что ты приехал с ним.\nХолидэй спас мне жизнь в Додж Сити.\nЯ этого не забуду и он человек слова.\nПока он играет в карты и не убивает, мы не имеем право выгнать его.\n-Не знал, что вы команда.\n-Мы не команда.\nЭто наше с ним дело.\nОн останется.\n-Только под твою ответственность.\n-Отлично.\nЕсть карта округа?\nМы должны сказать Клэнтону, что для него город закрыт.\nТогда мы сможем контролировать округ.\nЯ передам письмо, которое отвезет один человек.\nГде находится ранчо Клэнтона?\nВот здесь.\nПривет, я ждал тебя.\nОтлично выглядишь.\nЗдорово.\n-Не жалуюсь.\n-В чем дело?\nКлэнтон хочет заключить сделку.\nОбещает тебя не беспокоить, если позволишь забрать весь скот из Тумбстоуна.\n-Это здорово.\n-Он отличный парень.\nУ него полно скотины и он собирается перегнать ее в другое место.\nПравда?\n20000 наличными.\n20000 долларов?\nПлата за грехи растет.\n20000 против могилы в Бут Хиле.\nИли 20 долларов в месяц, если выживешь.\nЯ уже думал об этом.\nЗнаешь, Котон, это хороший маленький городок.\nОтличное место.\nВозможно, я скоро стану шерифом округа.\nЯ этого не боюсь.\nУ меня есть все.\n25000 на счету и ранчо.\nЗнаешь что?\n-Сплю я очень крепко.\n-А я нет.\nХватит упрямиться.\nЭлсвот, Вичита, Джодж Сити.\nМожет, сжалишься хотя бы над своей женщиной.\nХватит уже смертей.\nПередай это своему боссу.\nВ пределах города Тумбстоун ношение оружия запрещено.\nЗначит, этого он хочет?\nОн не хочет, чтобы ты контролировал город.\nДавно не видались.\n-Слишком давно.\n-Привет, Ринго.\n-Все еще носишь свой пистолет?\n-Да, шериф.\nА ты не слишком молод, чтобы носить пистолет?\nМожет, проверишь?\nКуда-то собрался?\n-На шоу, шериф.\nЕсть возражения?\n-Нет, если вы сдадите оружие.\nА ты сдай свое.\nСтой!\nМоих братьев вы знаете.\nДжон Клам из общества горожан.\nТы мертвец, Уайт.\nВ этом городе для тебя нет места.\nПриедешь с оружием, уедешь в гробу.\nПроваливай.\n-А вот и проблемы.\n-Кто это?\nКейт Фишер.\nНе сидится ей дома.\n4.\nМне не нужно.\nБармен, принеси виски.\nОставь бутылку.\nДве пары.\nТуз.\nДок, что у тебя?\nТри.\nОтличный городок, Кейт.\nТак, так, так.\nПомощник шерифа.\nДок, раздавай.\nНе поздороваешься со старым другом?\nРовно.\nДай мне Крим Дэ Мэнтре.\nПомощник шерифа.\nНе хочешь со мной выпить?\nТы пьян, Ринго.\nТы свою репутацию заработал на алкашах.\nДоставай пистолет.\nВстретимся на улице через 5 минут.\nЯ приду.\nНадеюсь увидеть тебя мертвым.\nЧто ты себе позволяешь?\nКлэнтону только и нужна война.\nС меня хватит.\nХочешь с ним сопли разводить, пожалуйста.\nДавай пистолет, Док.\nТы не имеешь права носить его.\nТы... благодари бога, брат Уайта Эрпа.\nХолидэй, если тебе не нравится Уайт, то проваливай.\nЕму не хватало такого убийцы, как ты.\n-Слышал, ты уезжаешь.\n-Именно.\nУезжаю завтра.\nЯ думал, что здешний климат поможет тебе.\nСвященник, мое пребывание здесь очень проблематично.\nНекоторые думают, что я шериф.\nТы уезжаешь не из-за меня?\nИз-за тебя?\nТы тут не причем.\nУдачи, Док.\nЖаль, что к финишу мы придем не вместе.\nПривет, Уайт.\nТут пришло письмо.\nВ чем дело?\nМладший Клэнтон напился в салуне.\nПоложите его на скамейку, пусть проспится.\nМинутку.\nСколько потребуется времени, чтобы собрать людей?\nНедолго.\nМне придется съездить на ранчо Клэнтона.\n-Ты спятил?\n-Я не думаю.\n-Возьми пистолет.\n-Только это мне и нужно.\nЕсли не вернусь через пару часов, пусть граждане города будут готовы похоронить меня.\nРанчо Клэнтона.\nБилли!\nС ним все нормально.\nПеребрал немного.\nВставай.\nИди домой, Билли.\nНе знаю, что делать с этим парнем.\nОн закончит как и его отец.\nЕго пристрелят за воровство скота.\nДумаешь ты крут, сынок?\nНе видел стрелка, который бы дожил до 35 лет.\nЯ знаю одно на счет стрелков.\nВсегда найдется человек, который быстрее чем ты, сынок.\nИ он убьет тебя.\nДумаешь, я не знаю, что творится у тебя внутри?\nУ меня были старшие братья, которые воевали на войне.\nНо я был слишком молод.\nЯ хотел жить так же как и ты.\nПытался подражать им во всем.\n-Вы знакомы с этим?\n-Конечно, знаком.\nЯ не совсем хочу быть стрелком.\nПросто, иногда мне кажется, что я одинок.\nВсе стрелки одиноки.\nОни живут в страхе.\nОни умирают и на их могилу не приходит ни друг, ни женщина.\n-Я об этом не думал.\n-Тогда подумай, подумай об этом.\nБилли, послушай шерифа.\nБольше этого не повторится, мама.\nБилли.\nЧто ты здесь делаешь?\nПривез твоего пьяного сына.\nТы должен гордиться, гордиться им.\nПроваливай.\nНе стоит этого делать.\nМои друзья начнут волноваться, если я вскоре не вернусь.\nНе плевать, Уайт.\nТы не на своей территории.\nПравда?\nНазначение на должность шерифа США...\nМне жаль разочаровывать тебя.\nПодожди.\nЯ не ищу с тобой ссоры.\nХватит на меня давить.\nДавай все обговорим, я согласен на все.\nЯ хочу лишь, чтобы ты вернул весь скот в Мексику.\n-Был у судьи?\n-Был.\nНу и?\nЛегальным путем ты не сможешь запретить шерифу приближаться к тебе.\nСудья как раз уехал, когда я приехал.\n-И нам пора сваливать, Айк.\n-Заткнись, Фрэнк.\nНам остается одно.\nУ нас не было проблем, пока не приехал Уайт.\nЭто точно, Айк.\nУ нас нет выбора.\nМы устроим ему засаду.\nТы не забыл о братьях?\nС ними мы справимся.\nЭто наша проблема.\n-А что, если придет Клам?\n-Не посмеют, слишком гордые.\nОни сделают так, как мы этого хотим.\nЗакон, намного важнее, чем любой другой, семейная гордость.\nПоймаем его, когда он будет делать обход.\nМне все равно.\n-Устал?\n-Да, что-то меня сморило.\nВыпей кофе.\nНадеюсь, это поможет.\nУжасная тишина.\nСлишком тихо.\nТы подумал, что нам делать с этими ублюдками?\nХотел бы я знать, Джимми.\nМожет быть, он поймет, что это безнадежно.\nХочешь вернуться в Калифорнию?\nВсе время об этом думаю.\n-Наверное, она отличная девушка.\n-Да уж.\nНу что ж, пойду поработаю.\nМожет, я сегодня сделаю обход?\nВсе равно делать нечего.\nХорошо, я пока посплю.\nКогда я делаю обход, есть о чем подумать.\nАйк сам напросился.\nПусть будет так.\nОни этого только и хотят.\nНе позволяй им манипулировать тобой.\nЭто ты мне говоришь?\nТы шериф, не выкидывай свою жизнь на помойку.\n-Подумай.\n-Не буду.\nМой брат мертв.\n-Кто там?\n-Открой дверь!\n-Говори, Кейт.\n-Док,\n-я ничего не знаю.\n-Говори.\nЗачем?\nКакое это имеет значение?\nЯ опять все испортила, да Док?\nЯ хотела, чтоб ты вернулся.\nЯ люблю тебя, и поэтому я\nдумала, что если Уайта не будет, то ты вернешься ко мне.\nИ поэтому, я молчала, когда услышала об этом.\nЯ просто сошла с ума.\nЯ сошла с ума, Док.\nГде?\nНа ранчо Клэнтона.\nКто там был?\nЯ не хотела, чтобы убили его брата.\nКто еще там был?\nАйк, этот парень, Котон Уилсон, и братья Маклоэры.\nИ Ринго?\nТам был Ринго?\nДа, он был там.\nНет, Док, пожалуйста, Док.\nНе надо.\nДок!\nДок!\nПожалуйста, Док.\nНе убивай меня, пожалуйста.\nПожалуйста!\nНе убивай меня!\nНе убивай меня!\nДок?\nДок!\nДок!\nДок...\nВсе нормально, дорогой.\nВсе нормально.\nУайт.\nАйк послал меня.\nЯ здесь не причем.\nПоверь мне, я не причем.\nБлагодари бога, что тебя зовут Клэнтон.\nАйк послал меня.\nОн хочет встретиться с тобой и с твоими братьями.\n-Я жду не дождусь.\n-Но без Клама.\nДаю слово.\nСколько он приведет с собой?\n6.\nТам будут, Айк, Фин, Ринго\n-и братья Маклоэры.\n-Где и когда?\n-На рассвете в О.К. Коррал.\n-Передай, что я приду.\nТы сказал 6.\nЯ пойду с ними.\nНе надо, Билли.\nПоживи подольше.\nЯ думал об этом.\nЯ очень долго думал.\nНет, я не могу просто сбежать.\nАйк и Фин мои братья...\nВы же понимаете?\nДа, я понимаю.\nПочему вы сидите, сложа руки?\nКак вы можете сидеть в такой момент?\nЧто с вами?\nИдите к Джону Кламу и попросите помощи.\nЭто не его дело.\nЭто личное, между нами и Айком Клэнтоном.\nНо вы же представители закона.\nВы шерифы.\nВы не должны ставить себя выше безопасности города.\nВы должны служить народу, а не собственной гордости.\nКакие гордые.\nПосмотрите на себя.\nДа вы только посмотрите на себя.\nМорган, твоя жена знает, что завтра окажется вдовой?\nВыйди из комнаты.\nВирджил, твой сын хочет поцеловать тебя перед сном.\nУвидимся утром.\nДок, проснись.\nДок, это я, Уайт.\nВставай, ты меня слышишь?\nПросыпайся, алкаш.\nТы мне нужен, не подведи меня.\n-Проснись, ты слышишь меня?\n-Оставь его.\nНе видишь, он умирает?\nНе трогай.\nДок.\nКак ты себя чувствуешь?\nПерестрелка сегодня?\nНу... я не знаю...\nТебе нельзя.\nНельзя!\nТебе нельзя, Док.\nТы даже не можешь стоять!\nТебя убьют, если ты пойдешь.\nДай мне умереть с единственным другом, Кейт.\nНа нас тебе плевать?\nМы с тобой... все в прошлом, Кейт.\nНам было плевать друг на друга с рождения.\nЛошадей на задний двор.\nХорошо.\nПойдем, Котон.\nФрэнк.\nПолезай в повозку.\nВперед.\nМорган и Вирджил уже ждут.\nАйк хочет с тобой поговорить.\n-Он не вооружен.\n-Минутку, Уайт.\nКейт рассказала мне об убийстве твоего брата.\nОни были у Клэнтона, и ты тоже был там.\n-Я не причем.\n-Пошел отсюда.\n-Поверь мне, я...\n-Возвращайся к своим друзьям.\nОни идут.\nС ними Док Холидэй.\nХолидэй?\nКотон, останься с лошадями.\nАйк, мне надоели эти игры.\nОтпусти меня.\nИди к лошадям.\nСемь с Котонном.\nЯ вижу только шестерых.\nРазделимся.\nФрэнк...\nНа землю!\nПрикройте меня.\nРужье!\n-Все нормально?\n-Да.\nВсе нормально.\nКотон, трусливый сукин сын!\nОни убили моего брата!\nДавай, Эрп!\nЯ убью тебя!\nВыходи, Эрп!\nВыходи, сволочь!\n-Вирдж.\nБольно?\n-Нога, нога.\nДок.\nЯ позабочусь о Ринго.\nБилли...\nБросай оружие и выходи.\nВыходи, у тебя нет шанса.\nИди и убей меня!\nИди сюда!\nНе заставляй меня это делать.\nНе заставляй.\nЯ уезжаю, Док.\nКак братья?\nВсе будет хорошо.\nС ними все будет нормально.\nПринеси стаканчик, Джо.\nХочу чтобы ты знал.\nБез тебя бы ничего не вышло.\n-Куда едешь?\n-В Калифорнию.\n-Лора?\n-Надеюсь.\nОна ждет.\nПослушай меня.\nТебе нужно в госпиталь в Денвере.\nТак ты не протянешь и пару месяцев.\nСпятил?\nЧтобы пропустить игру в карты?\nУвидимся.\nУвидимся, священник.\n-Добрый день господа.\n-Привет, Док.\n-Привет.\n-Во что играем?\nКОНЕЦ ФИЛЬМА.\nКогда-то мир был большим, и ни один человек за всю жизнь не мог обойти его.\nНа протяжении столетий, наука сделала жизнь длиннее, а мир - меньше.\nИ самых далёких уголков Земли теперь можно достичь всего лишь нажав кнопку.\nВремя потеряло всякое значение когда человечество изобрело аппараты движущиеся во много раз быстрее чем скорость звука\nЗдесь, возле самой верхушки мира, люди борются со стихиями чтобы как-то защитить свою свободу.\nРадары раннего оповещения, чувствительные электронные приборы обнаружения присутствия объектов в небе таких как бомбардировщики, или управляемые ракеты, а также грозовые тучи и почтовые голуби.\nНовые радары должны быть откалиброваны при помощи тестовых полётов, чтобы определить точность оборудования и нанести на карту контуры области обнаружения для того, чтобы выяснить мёртвые зоны, куда радар не может проникнуть\nБ-8035.\nВысота 9.\nБ-7540.\nВысота 9.\nБ-7045.\nВысота 9.\nТестовый полёт.\nТестовый полёт.\nЭто Снеговик-3.\nДайте показания приборов.\nПриём.\nСнеговик-3, это Тестовый полёт.\nНаправление полёта 340 градусов от ориентира, высота 10, скорость 400.\nКак слышно?\nПриём.\nВсё сходится кроме высоты, Митч.\nТвоя высота по нашим показаниям - 9.\nАльтиметр показывает 10 тысяч на носу.\nЛучше проверьте уровень крепления антенны.\nПринято.\nКак там мадемуазель Математик?\nЕй уже достаточно цифр, чтобы засунуть в свою машину?\nВы получили всю информацию, которую хотели, миссис Колдуэлл?\nЕщё один пролёт, пожалуйста.\nНа низкой высоте.\nЕщё раз, Митч.\nВектор - 105 градусов, низко.\nПонял.\nРазворот на 180 градусов.\nСнижение.\nТестовый Полёт, приём и отбой.\nЯ не знала, что пилотам разрешают так делать.\nПилотам Воздушных сил - нет, вы правы.\nНо Митч инженер-электроник.\nОн хоть и работает на правительство, мэм но руководствуется своими правилами.\nКак и трёхлетний ребёнок, пока мама не отшлёпает.\n- Мамочка, дорогая, я жду, если ты готова.\n- Забыл выключить.\nинженер-электроник.\nОфицер-радиолокационщик.\nМатематик и специалист по системному анализу.\nОператор радара.\nПара картографов.\nЛюди выполняют свою работу.\nХорошо.\nЭффективно.\nКогда серьёзные, когда шутят.\nДелают свою работу.\nСитуация нормальная...на данный момент.\nСемнадцатый день месяца.\nНебо затянуто облаками, облачность сплошная.\nВидимость ограничена\nВремя, 13:32 Знаменательная минута в истории.\nМинута, когда инженер-электроник по имени Митч МакКафи увидел что-то в небе.\nНечто, что чуть не стало началом конца жизни на планете Земля.\nМакКафи немедленно сообщил по радио о наблюдении НЛО, неопознанном летающем объекте.\nОфицер-радиолокационщик ответил, что этого не может быть.\nКроме самолёта Митча, на радаре не было ни единого объекта поблизости.\nВ радиусе ста миль в небе не было ничего.\nМакКафи не волновало, что показывал радар.\nОн верил тому, что видел собственными глазами.\nИ он решил разглядеть объект получше.\nМакКафи развернулся, чтобы неопознанный летающий объект полетел прямо на него.\nВ голосе МакКафи не было неуверенности или поспешности.\nЧто-то, он ещё не знал что, но нечто размером с эсминец только что пронеслось мимо него на такой скорости, что он даже не успел попытаться её измерить.\nКогда речь идёт о национальной обороне, лучше перестраховаться, чем потом жалеть об этом.\nПо тревоге были подняты в воздух истребители.\n- Ну что?\n- Что, ну что?\nДавайте не будем валять дурака, майор.\nВаши люди нашли это?\nМистер МакКафи, если бы вы были военным, то я бы уже отдал вас под арест и вам уже бы предъявляли обвинение в военном суде.\nК сожалению, вы гражданский\n- и я не имею над вами власти.\n- О чём ты говоришь?\nНо я могу послать донесение на вас, и я так и сделаю.\nИ к тому времени как я с вами закончу, мистер Инженер-электроник, вы будете считать, что вам повезло если вам поручать тестировать батарейки для фонариков.\nПослушайте, майор Берген, я участвовал в последнем проверочном полёте, заметил НЛО и доложил об этом.\nЭто что, делает меня преступником, предателем моей страны, или каким-то психопатом?\nМакКафи, вы электроник, специалист по радарам.\n- Ну да, за это мне и платят.\n- Если бы в воздухе было что-нибудь, если бы что-нибудь летело, это было бы видно на радаре?\n- Ну..да, но...\n- Радар бы засёк это?\nДа или нет?\n- Да.\n- За вами следило три радара каждую минуту пока вы были в воздухе, каждую, и ни один не видел ничего кроме вас.\n- Послушайте, майор.\n- Вам об этом сказали.\nВы это знали.\nИ, тем не менее, настояли на своей глупой шутке.\n- Полегче, Берген.\n- Вы продолжали бить тревогу пока кто-то не нажал кнопку сигнала тревоги и не поднял в воздух истребители.\nОтлично.\nЗначит ваши штурмовики обшарили всё вокруг и ничего не нашли, и теперь вы злой и хотите, чтобы я заплатил за горючее, которое они спалили, или потерянное время, или вы придумали что-то ещё более остроумное.\nЗвено было поднято в воздух и было рассредоточено, чтобы покрыть наибольшую возможную площадь\nИ благодаря вашей совсем не смешной ложной тревоге, мистер МакКафи, один из самолётов не вернулся.\nПропали и самолёт и пилот.\nМайор Берген.\nЧто?\nДа.\nДа.\nДа.\nВызывайте резервные бригады.\nИ измените расписания дежурств.\nПридётся попотеть.\nПослушайте, майор, я сожалею по поводу пилота, но никакой ложной тревоги не было.\nОх, да перестань же, Митч.\nТы и так Уже принёс немало вреда со своим \"летающим эсминцем\".\n- Просто пере...\n- Минутку, мисс Колдуэлл.\nЗвонили с \"Заполярных авиалиний\".\nСообщили, об опоздании и пропаже самолёта.\n- О, нет!\n- 60 пассажиров и экипаж.\nБыл отчаянный крик пилота, а затем ничего.\nПропала связь.\n- Проблема с двигателем?\n- Нет.\nПилот прокричал что-то по поводу НЛО.\nА потом радио перестало работать.\n- А на радарах?\n- Ничего.\nНикого, кроме их самолёта.\nБольше никого.\nНу что ж, майор, мы закончили работу здесь.\n- Наш транспорт уже готов?\n- Самолёт с пилотом уже на лётном поле.\n- Долетите прямо до Нью-Йорка.\n- Спасибо.\nПошли, Салли.\nДержись.\nЯ сейчас.\nПривет, Пит.\nМы там работать не можем.\nЯ думал, по прогнозу погоды мы долетим до Нью-Йорка без тряски.\n- Похоже, на небольшой метеофронт, Митч.\n- Может сверху перелетим?\nМожно.\nПодожди, я отправлю запрос.\nВоенно-воздушные Силы, ЗЛ-7979, вызываю Международный аэропорт Нью-Йорка.\nПриём.\nЗЛ-7979.\nМеждународный аэропорт Нью-Йорка.\nПриём.\nВысота 8 тысяч, скорость 250.\nВпереди непредвиденная грозовая активность в районе гор Адирондак.\nЗапрашиваю разрешение сменить высоту на 12 тысяч.\nПриём.\nЗЛ-7979.\nДаю разрешение.\nПриём.\nЗЛ-7979.\nПонял.\nОтбой.\n- Как я и сказал, нет проблем.\n- Спасибо, Пит.\nЯ замолвлю за тебя словечко перед майором.\nСпасибо.\nПока я не прогоню данные через компьютер, я сказать точно не могу, но похоже, что профайлер в этой точке ныряет вот так и у нас получается мёртвая зона.\nАга.\nТак что, или у нас криво стоит антена, или там местность поднимается и закрывает весь снимок, а мы не приняли это во внимание\n- Можешь дать мне топографическую карту?\n- Да.\nДержи.\nМитч.\nМитч.\nИди сюда.\n- Что такое?\n- Садись, Митч.\n- Ну.\n- Сейчас, может, покажется.\n- Что, например?\n- Неопознанный летающий объект.\n- Пролетел прямо над нами.\n- И ты туда же.\nОй, оставь шутки.\nЯ уже известил аэропорт.\nМитч, я уверен, что видел что-то похожее на облако, только оно двигалось гораздо быстрее любого облака.\nПрямо по нашему курсу с северо-востока.\nСтавлю четвертак, что его не засёк ни один радар.\n- Что?\n- Не обращай внимания.\nЯ, кроме неба, ничего не вижу.\nЯ тоже, сейчас.\nЯ потерял его из виду, когда оно залетело за нас сверху.\nА это что было?\nПриборы не показывают такого сильного ветра.\nДружище, это было сильнее, чем просто ветер.\n- Ты в порядке?\n- Вроде да.\nА ты?\nЯ в норме.\nА вот Пит в плохой форме.\nПошли.\nНа землю.\nСейчас рванёт.\nЧто это было?\nТакое впечатление, что с нами там что-то столкнулось.\nАга.\nЛетающий эсминец, которого не было в небе.\n- Эй!\nЭй!\n- Здесь.\nСюда.!\nХорошая яблочная водка.\nЯ её сам делаю.\nОт змеиных укусов хорошо помогает.\nПривет, Пьер.\nМистер МакКафи?\nВерно.\nЭто пилот?\nДа.\nДавайте, парни.\nОни зарезервировали для вас место на коммерческий рейс до Нью-Йорка и прислали машину, чтобы отвезти вас и юную леди в аэропорт.\nА что с разбившимся самолётом?\nУ нас приказ оцепить местность.\nВсё засекретили.\nЧто случилось?\nСтолкнулись с летающей тарелкой, или что?\nО, ничего банального вроде летающей тарелки, офицер.\nПросто летающий эсминец.\nЧто ж, удачи вам с вашим летающим эсминцем.\nВаша машина скоро будет.\n- Где самолёт, Пьер?\n-14-я дорога, за дорогой.\nПошли, ребята.\nАлло?\nДа, это ферма Пьера Бруссара.\nКого?\nМинутку.\nКакой-то генерал Ван Баскирк - вас мистер МакКафи.\nСейчас, чувствую, будет ещё один змеиный укус.\nНадо срочно принять лекарство.\nЛетающий эсминец, розовый слон - никакой разницы.\nПопробуй вместо них пахту.\nЯ сказал, что оно выглядело как эсминец, а не было эсминцем.\nНадо было назвать это счётной машиной-переростком, тогда по крайней мере ты бы мне точно поверила.\nГенерал Баскирк.Это МакКафи.\nДа, сэр.\nЯ знаю, что пилот сообщал об НЛО.\nНет, на этот раз я сам ничего не видел.\nМисс Колдуэлл тоже не видела.\nАга, радар не увидел ничего, кроме нашего самолёта.\nНу что ж, я этого ожидал.\nШутка?\nЛожная тревога?\nПослушайте, генерал, за какого инфантильного идиота вы меня принимаете?\nЯ же говорю...\nСпасибо.\nДа, сэр.\nДа, сэр.\nДа, сэр.\nПонятно, сэр.\nКогда пастух кричал \"волк\", они поверили ему.\nПо крайней мере, первый раз.\nКомандование Гражданской Авиации высылает первым делом с утра исследовательскую бригаду.\nА после этого и Воздушные Силы, как только КГА закончит.\nКогда мы доберёмся, то должны явиться для допроса.\nПо-моему в этом стакане дырка.\nКуда оно всё девается?\n- Как там поживает кувшин, Пьер?\n- Тебе нравится бормотуха Пьера, да?\nО, идеальное лекарство от змеиных укусов, грома, молнии и неверящих генералов.\nНаполняй, Пьер.\n- Что это?\n- Что-то испугало животных!\nЭто Пьер!\nСюда.\nСпокойнее, Пьер, спокойнее.\nТы в безопасности.\nТы в доме.\n- Карканья.\nЭто была карканья.\nЯ видел её!\n- Что такое карканья, Пьер?\n- Давай, расскажи нам.\n- Это дьявол бури с лицом волка и телом женщины и с крыльями.\n- больше, чем можно себе представить.\n- Ты наверно увидел орла, Пьер.\n- О, нет!\nЭто была карканья!\nКарканья!\n- А, я помню.\nЯ такое где-то читала.\nЭто суеверие, легенда зародившаяся среди французских канадцев и которая потом вместе с ними пришла потом и сюда\nАга.\nЯ тоже что-то такое смутно припоминаю.\nПьер, это вероятно были лишь гром и молния.\n- Ты всё выдумал.\n- Нет!\nНет!\nЯ видел карканью!\nНа.\nГлотни-ка вот этого.\nВойдите.\nЧто с Пьером?\nОн полагает, что увидел что-то странное в небе.\nЯ видел её.\nЯ видел карканью!\n- Он никак не может выбросить это из головы.\n- Да, я понимаю.\nЯ и сам в это верил.\nТут много старожилов верят в эту байку но я в первый раз вижу, чтобы кто-то утверждал, что сам видел старую ведьму.\n- Вы приехали, чтобы отвезти нас в аэропорт?\n- Да.\nМашина снаружи.\n- Я не хотела бы оставлять его в таком состоянии.\n- О, Не беспокойтесь мэм.\nДжо побудет с ним.\nА нам лучше поспешить.\n- Самолёт ждёт.\n- Пошли, Салли.\nИз-за нас задержали вылет, так что нам лучше поспешить.\nМы даже не поблагодарили его.\nЯ боюсь, что дружеская любезность не будет много значить для человека в состоянии в котором находится Пьер.\nОн прав, мэм.\nУ вас ничего не получится, он же онемел от ужаса.\nОт ужаса?\nНу, увидел большую птицу.\nИ поэтому его должно парализовать от страха?\n- А он вам не сказал?\n- Что не сказал?\n- О легенде.\nСогласно ней, если увидишь эту птицу, то это знак, что ты очень скоро умрёшь.\n- Самолёт ждёт.\nПойдёмте.\n- Ок, сержант.\n\"Неравноценны наши поцелуи\"\nРазносторонний человек, этот мистер МакКафи\nСначала инженер и пилот, затем - любовник и поэт.\nО, поэзия была шекспировская.\nЯ знаю, но откуда это желание?\n- С левой стороны поля, наверно.\n- Бейсбол мне нравится.\nА может, просто потому что я сидел рядом с симпатичной девушкой.\nИногда этого достаточно.\nДаже сидя рядом с Мадемуазель Математиком?\nИли лучше вернёмся бейсбольным аналогиям?\nЧто там цифры, что там цифры...\nНепобедимая логика.\nБанально, но правда.\nТы почти поразил меня.\nПочти?\nЧто ж, давай завершим то, что начали.\nСмотри, какая луна.\nЕсли снова повернуть к бейсболу и левой стороне поля...\nМеня кое-кто предупредил, что ты играешь по своим правилам.\n- Кто бы это ни сказал - он мне не друг.\n- Но он друг мне.\nЭто диверсия!\nО, это слишком мелодраматично.\nДавай вернёмся к бейсболу и скажем вместо этого\n- пытается украсть вторую базу.\n- В дворовые команды, тут же..\nТрусишка.\nЯ так и знала.\nНи борьбы, ни спортивного духа.\nКонечно, рефери всегда может изменить своё решение.\nНет, мы лёгких путей не ищем.\nНадо следовать системе.\nСначала низшие лиги, потом - высшие.\n- Я привыкла к правилам, Митч.\nИзвини.\n- Зачем извиняться?\nТы можешь всегда...\nСистема.\n- Система.\n- В чём дело?\nСистема.\nМне нужна одна из твоих карт\nОртогональная проекция, от полюса до экватора.\n- Дай скорее, у тебя есть?\n- Ну да, конечно.\nКажется, она была где-то здесь.\nАга.\nВот.\nЧто?\nПатруль военно-воздушных сил пропал в море.\nРаскрой карту.\nВот здесь я заметил НЛО.\nЗдесь исчез поисковый самолёт.\nТут - пассажирский, наш самолёт у Пьера, и, наконец, патрульный самолёт ВВС.\n- Ты что-то бормотал насчёт системы.\n- Ну да.\nНе видишь?\nВообще-то нет.\nНе прямая линия, не дуга, ничего.\nСмотри.\nСистема.\nИдеальная система во времени и пространстве.\nКаждый случай, каждое пересечение позже чем предыдущее.\nИ каждое новое дальше по спирали от центра.\nТы имеешь в виду, что нечто летело по такой схеме?\nДа.\nЧто-то, что я видел.\nЧто-то, что пролетело надо мной в воздухе.\nХм, тогда оно должно было лететь с огромной скоростью, чтобы покрыть такое расстояние\n- за такое время.\n- Да, должно быть.\nЧто-то, что и уничтожило четыре самолёта и чудом не заметило тебя в первый раз.\nДа.\nЧто-то вроде твоего летающего эсминца?\n- Ладно, забудем.\n- Ну хорошо, Митч.\nДавай будем благоразумными.\nПочему по такой системе, чтобы сбить несколько разбросанных на большом расстоянии самолётов?\nИ что это?\nМетеорит?\nНе может быть!\nУправляемая ракета?\nЕё бы остановил первый же самолёт.\nДа и кто его запустил?\nИ зачем?\nНет, Митч, совпадение.\nНо система - нет.\nДержи свою карту.\nНу ты как ребёнок, Митч, подумай!\nЕсли бы что-то летало по такой траектории, его бы засекли десятки радаров.\nИ ни один из них не засёк ничего.\nИ что?\nЭто, наверно, была Пьерова карканья.\n\"с головой волка и телом женщины и с крыльями больше, чем можно себе представить!\"\n- Только не нужно сарказма.\n- Послушайте, не будете ли вы любезны утихомириться, чтобы все мы могли поспать?\nСпасибо.\nИзвини.\nНаверно, я вёл себя по-ребячески.\nМне кажется, у тебя выходило лучше с поэзией, чем с дедуктивным методом.\n- Я знаю ещё один стих.\n- Да ну?\nУмеренной в еде ты будь, в одежде - скромной.\nКороче, милая, меня ты поцелуй и, будь добра, умолкни.\nДата, 18 число месяца.\nНебо чистое, лёгкая облачность.\nВидимость абсолютная.\nВремя - 18:15 утра.\nСамолёт КГА летит к месту крушения, случившегося днём раньше с Митчем МакКафи.\nНа борту четыре следователя Командования Гражданской авиации и пилот.\nВремя, 08:16 утра.\nЕщё один знаменательный момент в истории.\nЕщё раз поражённый пилот передаёт по радио о наблюдении НЛО.\nЭто птица.\nОгромная как эсминец птица кружит и готовится напасть на самолёт КГА.\nХватит облокачиваться на звонок.\nИду, иду.\nМистер МакКафи?\n- Или его сносная копия.\n- Мы от генерала Баскирка, сэр.\n- Он бы хотел увидеться с вами прямо сейчас.\n- Ох, имейте совесть, капитан.\nЯ приехал поздно ночью.\nЯ только успел заснуть, когда вы меня разбудили.\n- Простите, сэр.\nГенерал говорит, что это неотложно.\n- Мой сон тоже неотложный!\nУ меня есть приказ доставить вас к генералу немедленно.\nДаже если я вынужден буду взять вас под предупредительный арест.\nХорошо, капитан.\nВы не нервничайте, а я пойду натяну штаны.\nМоё наблюдение.\nПоисковый самолёт.\nПассажирский самолёт, наш самолёт у Пьера и патруль ВВС.\nСлучаев слишком много и подходят они друг к другу слишком хорошо, чтобы быть просто совпадением.\nБыло ещё два случая после самолёта ВВС.\nЧастный самолёт прошлой ночью здесь и самолёт КГА с четырьмя пассажирами и пилотом - здесь.\nОба подходят для вашей схемы тютелька в тютельку.\nРадары ничего не зафиксировали, я так понимаю?\nКак обычно, ничего, с тех пор как начался этот кошмар.\nКроме пропажи самих самолётов.\nПилоты что-нибудь докладывали?\nС частного самолёта - ничего.\nА вот пилот самолёта КГА сообщил об НЛО.\n- Он сказал, что это было?\n- Да.\nПтица.\nПтица, огромная как эсминец кружила, а потом и атаковала самолёт.\n- Поверьте, мистер МакКафи, это не шутка.\n- О, нет.\nСамолёт был полностью разрушен и все пятеро человек на борту пропали с лица Земли.\nВы эксперт по электронике.\nМогут ли радары не заметить какой-нибудь достаточной крупный объект в небе?\nЭто невозможно!\nНо я видел это сам.\nДа.\nТрое сообщили о наблюдении чего-то и двое из них мертвы.\nНу значит теперь я стал вроде как и жнец, и швец и в дуду игрец.\nМистер МакКафи, это чрезвычайно важно.\nВы хорошо разглядели то, что увидели?\nНет, я увидел всего лишь размытое пятно.\nХотел бы я иметь с собой фотоаппарат.\nФотокамера!\nГенерал Баскирк, перед тем, как я выехала на тестирование радаров с Митчем, я работала над калибровкой искривления земной поверхности\nИ как нам это поможет сейчас?\nДело в том, что мы снимали изнутри тестовых ракет, а также со стационарных камер и с аэростатов наблюдения.\n- Салли, может быть у тебя получилось заснять это!\n- Если аэростаты ещё в воздухе, то есть небольшая возможность, что они засняли это, чем бы оно ни было.\nГенерала Эдварда Консидайна, Пентагон.\nНеотложно.\nБыстрее!\nЧто-то показалось.\nВырубай.\nЭтот диафильм и вся информация касающаяся птицы относятся к разряду совершенно секретных.\nИзвестите все органы и персонал, которого это касается и который контролирует этот проект, или будет контролировать.\nДа, сэр.\n- Джонсон!\n- Да, сэр?\nСейчас же передайте директиву о полной боевой готовности.\nИзвестите Пентагон и пускай передадут генералу Консидайну, что я уже еду.\nДа, сэр.\nПолковник Тайлер на взлётной полосе?\nПервую линию, пожалуйста.\nНейт.\nНейт.\nЭто Баскирк.\nЗаводи мой самолёт и и зарегистрируй полётный лист.\nНациональный аэропорт, Вашингтон.\nПравильно.\nМы уже выходим.\nЯ и ещё два пассажира.\nОк.\nВы летите со мной в Вашингтон.\nМисс Колдуэлл.\nМистер МакКафи.\nДа, это какая-то птица.\nНет сомнений.\nМисс Колдуэлл, возможно ли, чтобы эта птица летала в мёртвых зонах,\n- которые не видят наши радары?\n- Нет, сэр.\nЯ всё тщательно проверила.\nПо меньшей мере десять радаров должны были засечь её.\nМистер МакКафи, может ли скорость или высота объекта повлиять на возможность быть увиденным радаром?\nНет.\nТакой причины нет, - ни научной, ни любой другой, почему наши радары не могут её засечь Они просто не могут.\nТочка.\nТогда, если вкратце, то вы говорите, что белое - это чёрное, а дважды два - шесть.\nПослушайте, генерал.\nЯ не придумывал этот летающий кошмар.\nЯ всего лишь его увидел и доложил.\nГенерал всё понимает, мистер МакКафи.\nОн ни в чём вас не обвиняет.\nРасслабься.\nРасслабиться?\nКогда мы закончим расслабляться и начнём хоть что-то делать?\nЯсным умом наделены не только гражданские, мистер МакКафи.\nМы знаем как позаботиться и о себе, и о стране.\nСпокойнее, Вэн, полегче.\nСейчас, сынок, поднята общая воздушная тревога.\nСотни самолётов со всех подразделений сейчас прочёсывают небо в поисках этого стервятника-переростка.\n- И мы его найдём, будьте уверены.\n- Ну, допустим, нашли.\nИ что дальше?\nДа?\nОтлично.\nГде?\nТак, теперь уже всё официально.\nПередайте приказ стрелять.\nБез вопросов, без игр и пижонства.\nПросто сбить.\nДа.\nДайте мне запись всех переговоров земля-воздух и воздух-воздух, и по \"горячей линии\" передавайте сюда.\nОдна из наших эскадрилей только что обнаружила её.\nЯ приказал им немедленно атаковать и сбить птицу.\nНаши самолёты оснащены пушками, пулемётами и ракетами.\nЭто будет концом гигантской птицы, которая была, а потом её не стало.\nВы услышите как всё будет происходить.\nЭто командир эскадрильи Ловкий пекарь.\n- Цель внизу и сбоку.\nВидите?\n- Ого!\nМатерь Божья!\nВидал я на ферме отъевшихся бройлеров но эта крошка, чувак, берёт первый приз.\nКлянусь, никогда больше не назову свою тёщу стервятником.\nЭто командир эскадрильи Ловкий пекарь.\nВыходите из строя по сигналу.\nОдин заход и потом уже каждый сам по себе.\nЭто командир эскадрильи Ловкий пекарь.\nПтица жрёт один из самолётов.\nУ меня наверно крыша едет.\nТак не бывает.\nПули, ракеты, её ничего не берёт.\nЭто командир эскадрильи Ловкий пекарь.\nЧарли выпрыгнул с парашютом, когда птица схватила его самолёт, и теперь он...\nНету Чарли.\nНи его, ни парашюта.\nБессмыслица какая-то.\nКак будто мы стреляем по эсминцу из рогатки.\nОно летит за другим самолётом.\nОсторожнее!\nЭто командир эскадрильи Ловкий пекарь.\nМиссия провалена.\nМы собираемся направляться....\nНет!\nОна летит за мной!\nНет!\nНет!\nПулемёты, пушки, ракеты, - ничто её не задело.\n- Пилоты...\n- И мы её найдём, будьте уверены.\nКонец гигантской птицы.\nВы были правы, мисс Колдуэлл.\nМы нашли её, что дальше?\nВторая фаза, привести в состояние боевой готовности.\n- Известите начальников штабов.\n- Есть, сэр.\nБред какой-то.\nЭто же просто птица, большая птица.\n- Пули, ракеты, пушки.\nПросто птица.\n- Ага, всего лишь птица.\nРадары стоимостью десять миллионов долларов не видят её.\nОгневая мощь способная смести с лица земли армию даже не задевает её.\nВсего лишь птица, ага.\nТак что же мы будем делать, сидеть тут и плакаться?\n- Ох, отстаньте же, МакКафи.\n- Мы не плачемся, МакКафи, и не бежим в панике.\nНо сложно ответить на вопрос даже не зная, в чём он заключается.\nА просто грубить ещё никому не помогало.\nЯ не критикую ни вас, ни ВВС, ни тех парней, которые только что погибли, пытаясь уничтожить этого монстра.\nЯ не пытаюсь острить, или грубить.\nЯ просто испуган.\nКак и мы всё, думаю.\nДавайте в этом признаемся и попытаемся что-нибудь сделать по этому поводу.\n- Есть предложения, МакКафи?\n- Конечно, из электронная рогатки собьём.\n- Вэн.\n- Близко, генерал, близко.\nТолько не из электронной.\nИз атомной.\n- Да?\n- Фаза вторая в состоянии полной готовности.\n- Все соединения в состоянии боевой готовности.\n- Хорошо.\nВас вызывает доктор Кэрол Нойман из исследовательской лаборатории.\nВозьму на другом телефоне.\nДоктор Нойман, это генерал Консидай.\nПовторите ещё раз.\nПрекрасно, прекрасно.\nОставайтесь там, я сейчас буду.\nМы держали в курсе последних событий исследовательскую лабораторию.\nОни работали на месте крушения самолёта КГА\n- и там где упали вы.\n- Что-то нашли, Эд?\nОни думают, что выяснили, что это за птица и откуда она взялась.\nИ об атомной рогатке.\nЗа час до того, как ваш самолёт приземлился в Вашингтоне, я приказал привести в состояние боевой готовности все пусковые площадки в стране имеющие управляемые ракеты с атомными боеголовками там где схема зоны выпадения радиоактивных осадков позволяет их взрывать.\nПриказ привести вторую фазу в состоянии боевой готовности, который вы слышали, был приказом выпускать ракеты в тот же момент, когда птицу засекут, где бы это ни было!\n- Генерал, я прошу прощения.\nМне кажется, что....\n- Не извиняйся, сынок.\nЯ восхищён твоим мужеством.\nИ продолжай доставать нас всякий раз как мы что-нибудь упустим.\n- Вэн?\n- Извини, Мак.\n- Мы просто все хотим как лучше.\n- Вам тоже лучше пойти с нами.\nВсё равно вы в этом деле по уши.\nПошли.\nАтом - основной строительный элемент любой материи.\nПеред нами модель обычного атома, как мы его знаем.\nЯдро с положительным зарядом, электроны - с отрицательным.\nВ этом отношении, как мы считали, все атомы одинаковы.\nНо это не так, совсем не так.\nВ соответствии с законами электродинамики, всё в природе симметрично.\nВсё находится в состоянии баланса.\nИ если есть материя, то должна быть и антиматерия, зеркальное отражение симметричное материи.\nЗдесь у нас ядро с положительным зарядом, и электроны с отрицательным.\nВ его антиподе, ядро должно быть с негативным, а электроны - с положительным зарядом.\nНаукой доказано, что это так.\nНе на нашей планете и не в Солнечной системе, но где-то во вселенной есть звёзды, планеты, даже целые галактики целиком состоящие из антиматерии.\nДоктор, вы хотите сказать, что эта птица из антиматерии?\nЧто это вывернутый наизнанку образ, зеркальное отражение, как вы его называете?\nМинуточку, генерал.\nДоктор, существование антиматерии доказано.\nНо также было доказано, что если антиматерия вступит в контакт с обычной материей, они уничтожат друг друга, взорвутся.\nПочему же тогда птица не взорвалась когда в неё стреляли, или когда она касалась чего-нибудь?\nЧто ж, вы оба и правы и неправы одновременно.\nСама птица не из антиматерии.\nНо она без сомнения испускает какое-то излучение, энергетический экран, невидимое препятствие.\nИ вот оно-то и состоит из антиматерии.\nПушки, пулемёты, ракеты - неудивительно, что её ничего не смогло задеть\nПри ударе об щит из антиматерии, предмет взрывался и не мог навредить птице.\n- Митч, это объясняет отказ радаров.\n- Ага.\nНет отражающей поверхности.\nВолны радаров не наталкиваются на неё, а просто огибают.\nНет отражённого сигнала, нет и следов.\nДоктор Нойман, несколько вопросов.\nЭто не просто лишь ваша догадка?\nНет, генерал, это не догадка.\nОчевидно, что птица способна убирать этот щит из антиматерии, чтобы воспользоваться своим клювом, когтями и крыльями, чтобы сеять разрушения.\nВот часть упавшего самолёта.\nИзучая его, наши учёные узнали всю эту невероятную историю\nВсё было проверено и перепроверено.\n- Что-нибудь ещё, генерал?\n- Да, доктор.\nОткуда эта птица взялась?\nВот фрагмент пера птицы с места катастрофы по крайней мере, мы называем это пером, хотя точно не знаем что это, только на что похоже.\nМы подвергли его химическому анализу, электроскопии, всем мыслимым тестам.\nОно состоит из вещества неизвестного на Земле, ни одного известного нам элемента.\n- Выяснение всего этого нам дорого обошлось.\n- Это как?\nУ нас было несколько таких перьев.\nОсталось только это.\nВ качестве последнего средства мы попробовали электронный анализатор.\nВзгляните.\nЭта птица не с нашей планеты.\nОна прилетела из космоса, из какой-то богом забытой галактики из антиматерии в миллионах световых лет от Земли.\nДругого объяснения нет.\nВэн отвезёт вас обратно в Нью-Йорк.\nБыло бы замечательно, если бы вы оставались в состоянии готовности.\nИ, конечно, вы понимаете, что всё услышанное и увиденное вами секретно.\nМоя команда готова и ждёт звонка, Эд.\nПросто позвони.\nПросто позвонить, Вэн?\nМне понадобится вся помощь, которую я смогу раздобыть.\nВсем нам понадобится.\nЕдинственная проблема в том, что когда я в последний раз говорил со священником, в единственное место где мы можем получить нужную нам помощь была не проведена телефонная линия.\nГенерал Консидайн.\nЭто срочно.\nДайте мне министра обороны.\nДо сих пор, всего один человек видел птицу и остался жив.\nСреди тех, кто знал об этом, существование птицы было строгим секретом.\nНо когда были сделаны все приготовления для срочной встречи Президента, Кабинета министров,\nНационального комитета безопасности и Объединённого комитета начальников штабов птица показалась всему миру и спокойствие сменилось паникой.\nПаникой, ужасом и кошмаром.\nНи одни клочок Земли не был избавлен от того ужаса, когда глядишь в небеса и чувствуешь...\nне безопасность и спокойствие, а видишь крылатый ужас в перьях\nА, заходи.\nЯ полночи провела, прогоняя через вычислительную машину твои данные.\n- Надеюсь, это то, что тебе надо.\n- Хорошо!\nСпасибо.\nМитч?\nО. Спасибо.\nНет, ну что это такое.\nС тех пор как мы вернулись из Вашингтона уже как два дня и две ночи ты зарылся с головой во все эти бумаги, данные, расчёты.\n- Митч, отдохни, поешь, поспи.\n- Я был занят.\nТо, над чем ты работаешь, имеет какое-то отношение к птице?\nНад тем, как уничтожить птицу?\nСработает, Митч?\nНе знаю.\nЧестное слово, не имею малейшего представления.\nЭто одна из сумасбродных идей, в полном отчаянии взятых с потолка.\nТы говорил об этом с генералом Баскирком или генералом Консидайном?\nЧтобы они посоветовали мне не совать нос в чужое дело?\nНет, спасибо.\nДа и какой смысл?\nВсё равно шанс, что это сработает - один из миллиона.\nЭто просто занятие, чтобы не сидеть сложа руки и ждать.\nМитч, я тоже думала о птице.\nАга, как и все в мире.\nТы когда-нибудь задумывался о том, зачем она сюда прилетела?\nРади пищи?\nЯ имею в виду, эта птица есть в том смысле как едим мы?\nНу, доктор Нойман говорит, что она поглощает энергию из того, что уничтожает, включая людей.\nСвоего рода молекулярный осмос.\nА может она прилетела сюда отдохнуть?\n- Может и прилетела, но сейчас она точно не отдыхает.\n- Именно.\nНасколько мы знаем, она продолжает безостановочно облетать Землю.\nЛетает без передышки.\nЭто беспокоило меня, и я позвонила генералу Баскирку.\nМитч, помнишь Пьера Бруссара с фермы?\nКонечно, его карканью, или что он там видел.\nЭто всего лишь доказывает поговорку о том, что правда ещё страннее, чем вымысел.\nЭто был не вымысел.\nПьер видел что-то, он видел птицу.\nВ небе на высоте 12 тысяч футов, ночью, в бурю?\n- Нет.\nПтица спустилась на землю.\n- Но ты только что говорила...\nГенерал Баскирк сказал мне, что они нашли следы гигантской лапы на поле возле фермы Пьера Бруссара, и я знаю почему.\nПтица прилетела сюда, чтобы построить гнездо.\nГнездо.\nЯйца.\nЕщё птицы.\nЭто должно быть причиной.\nДругих просто нет.\nГенерал Баскирк.\nЭто МакКафи.\nСрочно.\nКрошка, собери мне, пожалуйста, вот те бумаги.\nИ эти тоже.\nГенерал Баскирк?\nМакКафи.\nПрошу вас, не спорьте и не спрашивайте что и зачем.\nЯ объясню позже.\nЭто ужасно важно.\nМне нужен быстрый самолёт и вертолёт.\nОчень прошу, пожалуйста, поверьте мне.\nЯ знаю, что делаю.\nДа, на ферме Бруссара.\nХорошо.\nМы выезжаем прямо сейчас.\nСалли со мной.\nДа.\nЕдем прямо в аэропорт.\nМы прерываем нашу передачу для важного объявления.\nЛеди и джентльмены, говорит Вашингтон.\nГенерал-лейтенант Консидайн, Военно-воздушные Силы Соединённых Штатов Америки.\nМы столкнулись с кризисом, кризисом, выход из которого все страны мира, несмотря не беспрецедентное сотрудничество, не могут найти.\nНо мы не успокоимся, пока его не найдём.\nМы испробовали самое совершенное оружие из арсеналов самых мощных армий на Земле и оно оказалось совершенно бесполезным.\nатомные, водородные бомбы, способные смести с лица земли города и страны оказались абсолютно бесполезными против этого небесного чудовища.\nДва дня назад все полёты были отменены.\nЛишённая источников пищи и энергии птица всё же выжила и начала серию наземных атак устраивая невиданные доселе фантастические вакханалии разрушения.\nНичто не устояло перед нападением птицы:\nдомашний скот, посевы, дома, поезда, все виды средств передвижения.\nОчевидно, что птицу привлекает движение.\nТаким образом, наше правительство, как и все правительства мира, объявили чрезвычайную ситуацию и ввели военное положение.\nКроме запрета на полёты, движение всего наземного транспорта, включая автомобили, грузовики, автобусы, поезда, корабли и прочего, должно быть немедленно прекращено.\nДоставка еды и предметов первой необходимости будет производится вооружёнными силами.\nКаждую ночь с заката до рассвета, до специального уведомления, будет соблюдаться режим обесточивания.\nЛюбое движение по улицам или дорогам в светлое время суток должно быть сведено к минимуму и может осуществляться только там, где оно разрешено как необходимое\nВы слышали генерала Консидайна из Вашингтона.\nОставайтесь с нами.\nМитч!\nЧто ж, самолёт ждёт нас.\nНам нужно лететь на ферму Пьера.\nВот она!\nнам лучше приземлиться перед тем, как она вздумает сделать так ещё раз.\nРужья.\nПатроны Везерби 378 Магнум.\nОстановят всё, что хочешь.\nВсё, что хочу, Митч?\nНу, всё, кроме птицы, но нам нужны яйца.\nБез щита из антиматерии, будем надеятся.\n- Карканья?\n- Нет, Пеп, не карканья, а в сто раз хуже.\nВыходим.\nПохоже на гнездо.\nНо нет и следов яиц.\nОно должно быть где-то там внутри.\nЕдинственный путь это выяснить - это пойти и взглянуть.\nКарканья!\nЯйцо!\nТы стрелять ружьё, делать большой шум, приходить карканья и мы все умирать.\nПьер, мы должны разбить яйцо, это наш единственный шанс.\nПьер тут не оставаться.\nПьер!\nВернись!\nЯ из Монтаны.\nПьер и его карканья.\n- Он был прав.\nУвидев её, он действительно вскоре погиб.\n- Да.\nЯ предупрежу Вашингтон.\nПускай направляют поисковые группы.\nЕсть шанс, что могут быть ещё яйца в тех местах мира где видели птицу.\nПоэтому их надо найти и уничтожить.\nХоть это мы можем сделать.\nЧто ж, поехали в город.\nС птицей поблизости летать слишком опасно.\nТак что вертолёт мы бросим и возьмём машину Пьера.\nОна ему всё равно уже не понадобится.\n- Давай Брэд, жми на газ.\n- Давай.\nПрибавь газку.\nЧувак, она у тебя еле ползёт.\nДавай!\nГазку!\n- Какой-то псих едет с включёнными фарами, и быстро едет.\n- Наверно он не слышал объявления.\nЯ ему посигналю, чтобы он остановился, когда будет проезжать мимо.\n- Эй, папаша.\nУбирай свою консервную банку с дороги.\n- Давай, дядя.\n- Эй, дядя, испугался большой злой птицы?\n- Погасите фары!\nСъезжайте с дороги!\nТы о нас не беспокойся.\nУ нас с собой есть соль, чтобы насыпать ей на хвост.\nОсторожней там с солью, смотри, чтобы не просыпалась в карбюратор.\nПоехали.\nСумасшедшие дети!\nОни не понимают, что творят!\n- Счастливо оставаться..\n- Эй папаша.\nТы нам не сигналь, это мы тебе посигналим.\n- Парень сильно ранен, но жив.\n- Девушка без сознания.\nПо дороге город, там есть больница.\nОтвезём их туда.\nА мы с тобой едем сегодня в Вашингтон.\nЯ подгоню машину для ребят.\nМисс Колдуэл, МакКафи, я занятой человек.\nПоэтому я надеюсь, что это не какая-нибудь очередная чокнутая затея.\nЕщё какая чокнутая.\nНу, мальчик, вставляй свои пять копеек.\nЧто ты мне хотел показать?\n- Как сбить птицу в небе?\n- Какое-то новое оружие?\nНет, обычным оружием, пулями, бомбами.\nМакКафи, я говорил вам, что у меня нет времени...\nПостойте, генерал.\nМоя идея может оказаться такой же глупостью как и трёхдолларовая банкнота,\n- но мне кажется, что её стоит выслушать.\n- Ну что ж, валяй.\nСейчас неважно, прилетела птица из космоса, или с Аппер Сэдл-ривер, штат Нью-Джерси, она всё равно из плоти и крови в некотором роде и значит уязвима для пуль и бомб.\nЕсли бы только можно было забраться за экран из антиматерии.\nИменно.\nЭто именно то, что, как я думаю,...\nнадеюсь, я и придумал как сделать\nЯ только что поставил на тебя эти пять копеек, парень.\nПродолжай.\nВот это увеличение фотографии из пузырьковой камеры.\nЯ бомбардировал камеру быстрыми частицами.\nВ результате мы имеем след сделанный частицей известной как мю-мезон.\nНо обратите внимание на вот этот промежуток.\nЭто - одно из самых поразительных недавних открытий науки.\nМитч МакКафи, летающий Шерлок Холмс.\n"
  },
  {
    "path": "benchmarks/haystacks/opensubtitles/ru-medium.txt",
    "content": "-Две недели не даешь мне прохода.\nВот и действуй, чем ты рискуешь?\nЯ думал, что сделаю тебя счастливой.\nТоже мне счастье.\nМуж не дает ни гроша, и у любовника ума не хватает подумать о деньгах.\n- Хорошенькое счастье.\n- Извини, я думал, ты любишь меня.\nНу люблю, люблю тебя, но и не хочу, чтобы все началось как в прошлый раз.\nТы не права.\nУ меня для тебя сюрприз.\nШлихтовальная машина, ты о ней давно мечтала.\n-Для костей?\n- Нет, настоящая.\nХочешь, приходи за ней вечером.\nЯ тебе не девочка.\nБыла бы ты девочкой, я бы тебе ее не купил.\nТы прекрасно знаешь, что я девочка.\nЯ люблю тебя, и вечером сделаю все, что пожелаешь, каналья.\nВам будет трудно.\nОдинокой женщине руководить таким заведением...\nДа нет, месье Эдуан уже давно почти забросил магазин.\nА брать нового приказчика я не хочу.\nХватит и одного раза.\n- Одного раза?\n-Да.\nРазве месье Мурэ вас не устраивал?\nДа, он умный молодой человек, активный, смелый, но чересчур предприимчивый.\nЕго нельзя оставлять наедине с женщинами.\nУ него есть шарм.\nСамой порядочной женщине трудно перед ним устоять.\n- Хорошо, что предупредили.\n- Что?\nНет-нет, я другое хотела сказать.\nЯ говорила о склонности месье Мурэ в общем.\nЯ уважаю вашу жену.\nСегодня вечером вы снова едете в Лион?\nВаш билет, месье?\n- Какая ближайшая станция?\n-Дижон.\nА во сколько ближайший поезд до Парижа?\n- Из Лиона?\n- Нет, из Дижона.\nВ три десять, месье.\n- Во сколько он прибывает?\n- В семь часов.\nПариж.\nПросьба освободить вагоны.\n-Улица Шезоль, дом двадцать четыре.\n- Хорошо, месье.\n- Что с тобой?\n-Желудок болит.\nНеудивительно, после обеда у Жосрана.\nНа лестничной клетке до сих пор запах.\nТебе нравится новая хозяйка?\nВалери Вабр - настоящая дура.\nСкорее, настоящая шлюха.\nТы шпионка.\nТвоя хозяйка такая же стерва, как и ты.\nТакая же уродина, как и ее мать.\nИ такая же шлюха.\nУверена, вы о Берте.\n- Она тоже?\n- Весь дом - сплошные свиньи.\nВот бы вернулся месье Август, а в его кровати красавчик Октав.\nБедняга Август, он целиком занят своей мигренью.\nА ведь она правду говорит.\nВезде деньги.\nПодарок туда, подарок сюда.\nКак в театре: за вход надо платить.\nУжасно.\nЯ отдаюсь за деньги?\nНеужели ты веришь?\nСкажи, ты в это веришь?\nНет, конечно.\nНа днях я застала ее на служебной лестнице.\nА позавчера еще лучше - в новом платье.\nПодарок Октава.\nТебе ночную сорочку, ей платье.\nЦена растет.\nКстати, какой сегодня день?\nСреда.\nЗначит, рогоносец в Лионе.\nЕму давно пора раскрыть глаза.\nНичего не видит.\nНу, ничегошеньки.\nБоже, боже.\nНам нельзя больше видеться.\n- Возможно, ты права.\n- Ты думаешь?\nТы сделал меня несчастной.\nИ расплатился с долгами.\n- Я ничего такого не говорил.\n-Да, но ты так думал.\nСлушайте, красавчик Октав, наверное, кусает локти.\nЗря он ушел от мадам Эдуан.\nТеперь у него добыча помельче.\nА ведь запросто мог иметь и ту и другую.\nЕму не привыкать.\nДа, но его больше всего прельщает касса.\nОн спит не с Бертой, а с матрасом, набитым золотом.\nВот тебе и общественное мнение.\nГрязные сплетни служанок на служебной лестнице.\nИ это все?\nДумаешь, намеки на содержимое кассы мне приятны?\nТы мог бы протестовать.\nМог бы, если бы это было правдой.\nНо кому, как не тебе знать, что касса тут ни при чем.\nНу да, ты спас меня от разорения, да еще и заработал.\nМожет, сменим тему?\n- Тебе неприятен этот разговор?\n- Разумеется, от него дурно пахнет.\nДурно пахнет?\nКто бы говорил.\nДорогая, если ты, правда, считаешь, что я люблю тебя из-за денег, то лучше сразу брось меня.\nНу, конечно.\nА ты иди к мадам Эдуан.\nИди.\n- Ну вот, приехали.\n-Да, она вдова.\nУ нее все преимущества.\nБедная Берта, как ты похожа на мать.\nПодумать только, я оплачиваю это ничтожество.\nЗаведи себе другого.\nОткройте, откройте.\nЯ знаю, что вы оба там.\nОткройте или я выбью дверь!\nНе открывай, он вооружен.\nОн убьет нас.\n- Не бойся.\n- Трус.\nТрус.\nПочему вы не отвечаете?\nМерзавец.\nНегодяй.\nНу, зачем же применять силу?\nПрименять силу, применять силу...\nВор.\nМадам, мадам, входите, не стойте тут.\nСчитайте это пощечиной.\nЖду ваших секундантов.\nК вашим услугам.\n- Что теперь со мной будет?\n- Надо было им помешать.\nЧто теперь обо мне подумают люди?\nВаши родственники?\nРазве они могут вас понять?\nОни для вас чужие.\nЕсли бы я знала.\nНи о чем не жалейте, не жалейте, раз вы его любили.\nБерта, мы будем драться на дуэли.\nБерта, малышка моя, мы не можем расстаться в ссоре.\nЭто было бы слишком глупо.\nМы оба ошибались.\nВот и все.\nЭто же не преступление.\nТри месяца мы думали, что любим друг друга.\nЭто было чудесно.\nНет?\nИ потом, может быть это и есть любовь -думать, что любишь.\nЕсли мы... не любили друг друга, то утешься.\nЗначит, любви не существует.\nНет-нет, мы не ошибались.\nКак и все влюбленные, мы считали, что будем уникальной парой на свете.\nА теперь, как и все влюбленные, станем такими же как остальные.\nЗаймем свое место.\nБерта, дай руку.\nЯ больше никогда не полюблю.\nНикогда.\nТы почти излечилась.\nДумаешь о будущем.\nТак вы не будете драться?\nБудут, будут.\nТак нужно.\nНо раз вы больше не любите друг друга.\nДуэли часто бывают и без причины.\nПрошу прощения, но, кажется, я только что кое-что разрушил.\nНе стоит извиняться.\nБлагодаря вам... я вам покажусь глупой, но чтобы не случилось, я больше не одна.\nВероятно, придется покинуть этот дом.\nНичего страшного.\nНичего страшного, месье Октав.\nЭто неважно.\nПрощай, Берта.\n-До свидания, Мари.\n- Прощайте, месье Октав.\n- Так ты будешь драться?\n-До последнего.\nТы же не умеешь.\nЯ бы на твоем месте...\n- Что с вами?\n- Ничего.\nЭто нервное.\nНе могу представить Августа на дуэли.\nТы и Дюверье будете моими секундантами.\nНаверное, он у себя.\nЕго нет.\nВы не знаете, где его искать?\n- Так вы в курсе?\n- Как и все.\nКакой же у меня насморк.\n- Месье Башляра нет?\n- В такой час его никогда не бывает.\nВы случайно не знаете адрес месье Трюбло?\nНет, но месье Башляр вам его даст.\n- Во сколько он вернется?\n- Наверное, он у племянницы.\nПассаж святого поля дом восемь?\nЯ знаю.\nСпасибо.\nНа кого я теперь буду похожа?\nМогла бы о матери подумать.\nЯ старалась пристроить тебя, чтобы в старости лет ты меня поддержала.\nА ты связалась с этим продавцом.\nИ о чем ты думала?\n- Я ненавидела Августа.\n- Это не причина.\nРазве я изменяла твоему отцу?\nИ тем не менее...\n- Но она любила Октава.\n- Твоя сестра никого не любит.\nА если мне нравится никого не любить?\nДумаешь достаточно требовать любить, любить, так нет, сердцу не прикажешь.\nОна права.\nНе выходят замуж только чтобы не подчиниться матери.\nЯ вышла замуж, чтобы покончить с этой жизнью, чтобы вдохнуть другой воздух, чтобы вырваться из этого дома.\nВышла замуж, чтобы изменять своему мужу.\nДовольна?\nНесложно было догадаться.\nЯ приняла меры предосторожности.\nПредупреждаю - выхожу замуж через месяц.\nЧто?\nЗа кого?\n-За кого люблю, а он любит меня.\n- Несчастная, я помешаю тебе.\n- С этого момента...\n- С этого момента хватит.\nМы больше не будем терпеть твою диктатуру и преследования.\nГоворишь, что не изменяла.\nОчень жаль.\nЕсли бы изменяла, я был бы счастливее.\nПосмотри на свою дочь.\nТвое произведение.\nНи мужа, ни дома, больше ничего нет.\nНе плачь, доченька.\nТы жертва моей слабости и ее тирании.\nЭто мы должны просить у тебя прощения, мы.\n- Просить прощения?\nДа я лучше умру.\n- Это принесет нам только счастье.\nЯ этого не допущу.\nПосмотрим, чья возьмет.\nВы как раз кстати, будете свидетелем.\nНегодяй, вот негодяй!\n- Свидетелем?\nПонимаете, я...\n- Свидетелем...\nА зачем вы сюда пришли?\n- Хотел спросить у вас адрес Трюбло.\n- Вы издеваетесь?\nАдрес Трюбло?\nВ кровати мадемуазели, вот где адрес Трюбло.\nПрихожу я утром нагруженный подарками и что вижу?\nУгадайте.\n- Трюбло?\n- Трюбло.\nЭтого мерзавца Трюбло.\nА я так жаждал увидеть своего ангела.\n- И тебе не стыдно, коварная?\n- Я не знала.\n- Что?\nНе знала, что он тут?\n- Не знала, что это вас так огорчит.\nА я тебя предупреждала.\nЕсли месье Нарцисс узнает, то будет не доволен.\nВот видишь, вместо того, чтобы меня послушать...\nВы оделись?\nВыходите.\nВыходите как есть.\nЯ же говорил -только служанки.\nЯ впервые нарушил правило.\nНарушил правило.\nИуда.\nА как же дружба?\nВы изменили дружбе Башляра.\nЯ же хранил эту крошку для вас.\nНу да, говорил я себе: когда состарюсь, выдам ее замуж за Трюбло, отдам в надежные руки и спокойно умру.\nВедь у меня есть сердце.\nПятьдесят тысяч хотел дать этому мерзавцу.\nПятьдесят тысяч франков!\n-Успокойтесь, Башляр.\n- Послушайте месье Октава.\nКак вы могли так поступить с другом?\nТеперь будем драться на дуэли, на пистолетах с десяти шагов.\nНе делайте этого.\nВам незачем драться на дуэли.\n-А как же честь?\n- Были бы вы ее мужем, тогда понятно.\nБыли бы вы ее мужем, мне было бы все равно.\nЭто еще как сказать.\nВо-первых, мне нужен Трюбло.\n-Зачем?\n- Быть секундантом.\nЯ дерусь на дуэли.\n- На дуэли?\n-Да.\nНо с женатым мужчиной.\nС Августом Вабром.\nУтром он застал меня с Бертой.\n- С Бертой?\n-Да.\nВ каком мире мы живем!\n- Можешь мной располагать.\n-А кто секунданты Августа?\n- Теофиль и Дюверье.\n-Дюверье?\nКак мило.\nУ меня с ним встреча по поводу обеда у Клариссы.\nКакая прекрасная возможность урегулировать дело чести.\nКоторый час?\nМалышка отбила весь аппетит.\nГосподи, я опаздываю.\nА ты, никогда больше так не делай, иначе будешь иметь дело со мной.\nНу же скажи, что больше этого не повторится.\nЭтого больше не повторится.\nНу же, поцелуй ее, мерзавец.\nВ лобик.\nЕсли я еще раз застукаю вас, лишу своего доверия.\n-Дети мои, что происходит?\n- Вы же видите.\n- Я застукал их вместе.\n- Я ничего не вижу.\nЯ собирался позавтракать у Клариссы.\nКупил кое-что.\nПрихожу, поднимаюсь: и никого, и ничего.\nОна оставила мне мой портрет.\nВсе как у меня: купил драже, прихожу, поднимаюсь...\n- Она не спала в своей кровати.\n- Спала.\nОна была с Трюбло.\nКак омерзительно.\n- Она была с Мурэ.\n-Лежала в ночной рубашке.\n- Стояла в ночной рубашке.\n- Ничего - пустота, тишина, пустыня.\n- Я вышиб дверь и набросился на него.\n- Он вскочил с кровати.\n- Я набросился на нее.\nОна убежала.\n- Ну вот.\n- О ком вы говорите?\n- О Берте и о Мурэ.\nА я говорю вам о Клариссе.\nПричем здесь Кларисса?\nЯ говорю о Фанни.\nФанни?\nА причем тут Фанни?\nЯ говорю о Берте.\nЯ только что купил ей рояль.\nА ведь ненавижу музыку.\nЯ никогда не приходил к ней с пустыми руками.\nВсегда конфеты, деньги.\nХочешь свой портрет?\nВот тебе художник.\nТочно как у моей жены.\nПлатье, драгоценности.\nИ это вытворяет двадцатилетняя девушка.\n- Нет, простите, ей двадцать пять.\n-Двадцать.\nМожет, вы лучше знаете?\nНе сердитесь, но так говорить - дурной тон.\n- Могу вам доказать.\n- Кому, Клариссе?\nДа причем тут Кларисса.\nФанни.\nЯ тоже говорил себе, что Валери уже не двадцать.\nВы закончили обсуждать свои дела?\nА как я?\nЯ.\n- Кто дерется на дуэли?\nВы или я?\n- Ну да, он прав.\nАвгуст, друг мой, скажу вам одно - надо отомстить.\nСлушай, я проголодался, пойдем, пообедаем?\nИ да здравствуют жены, господа.\nДа здравствуют чужие жены и наши, которые, впрочем, чужие для других.\nМы не можем упрекнуть их в непостоянстве.\nВедь они становятся чьими-то любовницами.\nИ потом, верные жены -такое занудство.\nЧтобы узнать это, надо быть женатым.\nРазве нет?\nТак о чем я говорил?\nА ваша жена вам изменяла?\n- Конечно.\n- И что?\nОтбил у нее всякую охоту.\nТеперь десять раз подумает, прежде чем изменить.\nМолодец, молодец.\nЗа ваше здоровье, господа.\nИ за вашу смелость, Август.\nДавайте поговорим о дуэли.\nЗавтра на рассвете?\n- Если у меня не будет мигрени.\n- Тогда перенесем на следующий день.\n- Оскорбленный выбирает оружие.\n- Но пощечину дали Октаву.\n-Значит, оскорбленный он.\n- Точно.\n-А вы хотели дать ему пощечину.\n- Во всяком случае, хотел.\nЗначит, оружие выбирает он.\nРавенство - прежде всего.\nПростите, но ведь я же...\n- В общем...\n- Рогоносец.\nА это оскорбление.\nКто согласен со мной, господа, пусть поднимет руки.\nОдин, два, три.\nЧетыре.\nЕдиногласно.\nИтак.\nМечи, шпаги?\nМинуточку, вы торопите события.\nВы послали секундантов к Трюбло?\nЭто другое дело.\nФанни еще ребенок, она не понимала, что делала.\n-А вы разобрались с Клариссой?\n- Но я не женат на Клариссе.\nЕсли я убью Октава, то буду мучиться угрызениями совести.\nЯ католик.\nНаполеон венчался в церкви, а потом всю жизнь воевал.\nНо не за Жозефину.\nПризнаюсь, Октав не прав, но именно он спас меня от разорения.\nЭто логично.\nА если я его не убью и не буду с ним драться, то мы останемся в ссоре.\n- Не совсем.\n-А магазин?\n- Что магазин?\n- Я не смогу оставить Октава.\nЕму придется искать другое место.\nИз-за недостойного поведения жены, я должен буду уступить натиску конкурентов.\n- Это аргумент.\n- Ну да, мы сразу разоримся, сразу.\nГоспода, это все меняет.\nДуэль будет безумием.\nБолее того, глупостью.\nЯ сам пойду к Октаву, я заставлю это животное извиниться.\nНе будь я Башляр.\nУверяю, он извинится как миленький.\nИ так мы избежим скандала.\nНо будет справедливо, что честь Августа не будет поругана.\nА также и честь его супруги.\nСлавно мы придумали, господа.\nБашляр угощает вас шампанским.\nСомелье.\nБыла бы здесь Фанни.\nНет, нет, я не буду секундантом у того, кто предал мое доверие.\nНе будем преувеличивать.\nЯ архитектор этого дома и отвечаю не только за стены, но и за жильцов.\nОтвечаю за ваше поведение.\nЯ художник, но тем не менее.\nКогда я приютил вас здесь, разве не предостерегал вас, разве не просил, не приводить сюда женщин?\nЯ не приводил сюда женщин.\nЗдесь их много, и все красивые.\nО, прошу вас.\n- Я многое могу понять.\n-Да, ведь вы художник.\nМногое, кроме адюльтера.\n-Адюльтера?\n- Я его не одобряю.\n- Он вне ваших принципов?\n- Вне моей морали.\n- И разума?\n- Вполне возможно.\nВы шутите?\nНет, вы меня разыгрываете.\n- Я вас не понимаю.\n- Компардон, вы не изменяете жене?\nИли малышка Гаспарина это нюанс.\nМежду нами говоря, Гаспарина...\nГоворите тише, жена спит.\n- Гаспарина не замужем.\n-А вы?\nДа будет вам.\nЯ не кручу роман с соседкой.\nНет, все в этом обвиняют жен.\n- Месье Башляр спрашивает месье Мурэ.\n- Пусть входит, пусть входит.\nВходите, Башляр, входите.\nТихо, мадам Компардон спит.\nИзвините меня, хочу поговорить с месье Октавом Мурэ.\nВы тут не лишний, друг мой.\n- Останьтесь, здесь вы у себя дома.\n-Да будет так.\nДорогой мой, я все уладил.\nЭто было трудно, но мне удалось.\nНу так вот, дуэли не будет.\nВы довольны?\n-Дуэли не будет?\n- Нет.\nНеужели хотите испортить карьеру этой скандальной дуэлью?\nДавайте все забудем.\nВы просто извинитесь перед Августом, и все будет в порядке.\nВсе будет в порядке?\nГде?\nЗдесь, повсюду, в другом месте, где пожелаете.\n- И мое положение не изменится?\n- Но мы же все забудем.\nЗабудем все и начнем все с начала.\nВсе, все, все, все.\nАвгуст хочет избежать пересудов.\nОн выше сплетен, он ведь молодожен.\n- И я извинюсь.\n- Ну да.\n- Перед кем?\n- Перед Августом.\nВыразите ему свое сожаление.\nВы знаете, как это делается.\nЧто?\nВыражать сожаление, что сделал Берту счастливой?\nЭто же подлая трагедия.\nОна такое очаровательное создание, она мне так нравится.\nНет, никаких сожалений.\nА если Берта лично потребует от вас выразить сожаление?\nЭто будет принуждением.\nЯ этого не потерплю.\nХорошо.\nА если вы и Август извинитесь друг перед другом?\nДруг перед другом?\nВы за то, что соблазнили его жену.\nА он за то, что дал вам пощечину.\n- Но он не давал мне пощечину.\n- Но намеревался - это одно и то же.\nК несчастью, этого намерения у него не было.\n- Тогда на что вы жалуетесь?\n- Я?\nНи на что.\nЯ жду его секундантов.\nА если он их не пришлет, вы станете посмешищем.\nЯ ему отомщу.\nМежду нами, откровенно, что вы намерены делать?\nРаз Август даровал мне милость и решил со мной не драться, я решил покинуть этот дом и поселиться в другом месте.\nА магазин?\nСердечные дела - одно, а коммерция - совсем другое.\nВы не можете уйти из магазина.\nНеужели вы думаете, что я буду работать на Августа?\nНет, не хочу быть посмешищем.\n-А Берта?\n-Да.\nБерта?\nЧто будет с Бертой, если она вас больше не увидит?\nХотите ее наказать?\nБез ложной скромности скажу, что Берта решила обойтись без меня.\nНеблагодарный.\nНе настаивайте.\n- Это ваше последнее слово?\n- Самое последнее.\nЯ передам ваш ответ.\nКакой ответ?\n- Что вы отсюда съезжаете.\n- Ну да.\nСпасибо, что были свидетелем этого трудного разговора.\nБольшое спасибо, дорогой мой, за понимание.\nЛиза.\nВы выпьете немного кокилы.\nПринесите бутылку кокилы.\n- Нет-нет.\n-Да-да.\nЯ настаиваю.\n-До свидания, мадам Эдуан.\n-До свидания.\n-До свидания.\n-До свидания.\n-До свидания, мадам Эдуан.\n- Мадемуазель Гаспарина.\nРаз вы увидите месье Мурэ, попросите его срочно зайти.\nЯ не уйду из магазина, пока он не придет.\nХорошо, мадам.\nПередайте ему, передайте, что речь идет о важном, срочном деле.\nХорошо, мадам.\nДо свидания, мадам.\n- Среди честных людей...\n- Среди сердечных людей...\n- Всегда найдешь родственную душу.\n- И поле битвы.\nКакой остроумный!\n-Здравствуйте, господа.\n-Здравствуйте, Гаспарина.\nМесье Мурэ, мадам Эдуан хочет срочно поговорить с вами в магазине.\n- Мадам Эдуан?\n-Да.\nПохоже, дело срочное.\nИзвините меня.\nМое почтение, мадам.\n- Вы хотели со мной поговорить?\n-Да.\nЯ...\nЯ в курсе вашей ссоры с месье Вабром.\nЗнаю, что он послал вам секундантов.\nВам нельзя драться.\n- Но он же мой противник.\n- Я не хочу, чтобы вы дрались.\nА вам-то что?\nА если он вас убьет?\nВедь он такой неловкий.\nДуэль предполагает риск.\nВпрочем, рискуют оба.\nКто сказал, что месье Вабр будет победителем?\nУвы, в этом я не сомневаюсь.\nОднажды я от вас ушел, и вы смирились.\nТри месяца назад я для вас умер.\nЕсли я умру по-настоящему, какая разница.\nЯ без сожаления уйду из этого мира.\nУ меня нет угрызений совести.\nМесье Октав, вы должны знать правду.\nВ этой истории виновата я.\nЭто я, да, я пробудила подозрение у месье Вабра.\nЯ ничего конкретного не сказала, просто повела себя не лучшим образом.\nНе знаю, что на меня нашло, но ваше поведение разозлило меня.\n- Мое поведение?\n- Ну да.\nТо, что вы стали доверенным лицом господина Вабра.\nЯ вообразила, что все ваши усилия направлены против меня.\nВаш отказ вернуться поверг меня в отчаяние.\nТак все дело в магазине.\nНе знаю, все так запуталось.\nИ вы испугались угрызений совести, что я погибну из-за вас.\nУспокойтесь, этого не будет.\nУ вас не будет угрызений совести.\nВы были правы, меня интересуют только деньги и ничего более.\nВы донесли на меня.\nОтлично.\nЯ за это заплачу.\nВы легко перенесете мою смерть.\nО, нет, лучше я брошусь в ноги месье Вабру.\nЭто будет забавно.\nПрощайте, мадам.\nОктав!\nНет.\nДело не в магазине.\nПростите меня, Октав.\nХорошо, дуэль отменяется.\nНо это последняя жертва, на которую я иду, мадам Мурэ.\n- Ну что?\n- Еще одна большая пушка.\n- Избавьтесь от нее.\n- Оставить французам?\n- Я сказал: избавьтесь.\n- Есть.\nМесье?\nМайор, вы сделали невозможное.\nКаким образом семитонная пушка проскочила у вас между пальцев?\nОни ее уничтожили.\nПо-моему, она слишком большая.\nВаше мнение меня не интересует.\nПушка нужна генералу Жувэ.\nВыполняйте приказ, а не думайте.\n- Есть.\n- Видаль.\nЗа пушкой охотятся англичане.\nОни отправили в Испанию шпиона.\nНе оплошайте.\nИначе генерал отправит нас обоих служить на конюшни.\nДа, месье.\nВыходите.\n- Англичанин?\n- Англичанин.\nПроводите меня в штаб.\nАнгличанин.\nМне нужна ставка генерала Ларены.\n- Они переехали?\n- Отступили.\nКуда?\n- А вы кто?\n- Испанцы, которые не отступили.\nГерьерос.\nЕсли у вас дело, говорите со мной.\nУ меня письмо генералу Ларене.\nПростите.\nХуана.\nПрочти это.\nЭто Энтони Трамбел, морской офицер.\nГенерал Ларена должен передать ему большую пушку... и людей для того, чтобы доставить ее в Сантандер.\nЗачем?\nЧтобы она не досталась Наполеону.\n- Англичане тоже с ним воюют.\n- Зачем прислали моряка?\nЯ говорю по-испански и изучал артиллерию.\nПушки.\nХотите ее видеть?\nКонечно, хочу.\nСпасибо.\n- У англичан такая есть?\n- Такой нет ни у кого.\n- Она сломана?\n- Можно починить.\n- Вы бы смогли?\n- Если будут люди.\nОни есть.\nКузнецы?\nПлотники?\nГильермо.\nФрансиско.\nПепе.\nСлушайте капитана.\nНужны шесть толстых бревен.\nИ снимите с пушки колеса.\nКарлос, займись.\nПусть все тянут канаты.\nКанатов как можно больше.\n- Что-нибудь еще?\n- Пока всё.\nДа, капитан.\nПошевеливайтесь.\nНе тяните вниз.\nНет, нет, левее.\nМигель.\nМигель.\n- Французская кавалерия.\n- Далеко?\n- На той стороне.\n- Через час будут здесь.\nОставьте пушку.\nТак ее проще будет спрятать.\nХосе, сюда.\nЖивей.\nРамон, собери людей, чтобы рубить деревья.\nПомогите им.\nКарлос, поднимайтесь.\nЗакрепите канаты.\nВпрягите мулов.\nПроверьте надежность узлов.\nЯ нашел лучший путь в Сантандер.\nДа, капитан.\nНо пушка поедет в Авилу.\n- Прошу прощения?\n- В Авилу.\n- Но вы сказали...\n- Что я сказал?\nВы видели приказ.\nГенерал Ларена передаст пушку нам.\nГенерала Ларены здесь нет.\nВам не пересечь Испанию, ведь вас всего двести.\n- За пушкой пойдет подкрепление.\n- У вас нет пороха.\n- Я его достану.\n- С Наполеоном сражается весь мир.\nНа этом фоне Авила - песчинка.\nВесь мир меня не интересует.\nАвила - штаб французов в Испании.\nДо нее тысяча километров.\nМестность кишит французами.\n- Вы не доберетесь.\n- Доберемся.\nВ Авиле есть стена, которую пробьет эта пушка.\nМы войдем в город любой ценой.\nДаже если мы погибнем, Авила будет взята, и французы поймут, что пора оставить Испанию.\nВы все безумцы.\nКапитан, вам нужна пушка в Сантандере, а мне - в Авиле.\nПоедем с нами.\nНаучите нас с нею управляться.\nА потом мы переправим ее в Сантандер.\nГде гарантия, что так и будет?\nЕе нет.\n- Коня капитану.\n- Я пойду рядом с пушкой.\nВы устанете, капитан.\nКоня.\nКапитан, у вас лицо в грязи.\nХуанита.\nДавай, Хуанита.\nУже поздно.\nЧто ты делаешь?\nОтнесу англичанину еду.\nОн не ел с остальными.\nЗначит, он не хочет.\nМы ели.\nОн такой же, как мы.\n- Он не такой.\n- Почему?\nОн разбирается в пушках.\nИ нужен тебе.\nТы сам так сказал.\nЯ так не говорил.\nОн мне не нравится.\nМигель, ты ревнуешь.\n- Не к нему.\n- Ты ревнуешь ко всем, а к нему особенно, потому что он умеет стрелять.\n- Может, я тоже умею.\n- Не умеешь.\nНе говори того, о чем будешь жалеть.\nОн нам нужен.\nПризнай это.\nТогда пусть на тебя не смотрит.\nМигель.\nИ ты тоже на него не смотри.\nЭто мое право.\nВы хорошо знаете этого Мигеля.\nЗнаете, что у него пушка.\nСкажите мне, где он.\nЯ говорю как противник, но могу стать вашим палачом.\nПрекрасно.\nЗначит, нужен пример.\nЯ повешу десятерых из вас.\nНа следующий день будет еще десять, и еще.\nДо последней женщины и ребенка в Авиле, пока кто-нибудь не заговорит и не укажет, где эта пушка.\nУвести.\nВыполняйте приказ.\nЯ сомневаюсь, что все эти повешения...\nЗнаю, знаю.\nВы считаете, что они бесполезны.\nВелика ли эта пушка?\nВ два раза больше, чем вы можете представить.\nОккупированный народ выглядит мучеником.\nНо когда у него появляется цель, он превращается в новую армию.\nВот чем опасна пушка, генерал.\nЯ не глуп, Сэрмен.\nИ мы ее найдем.\nНадо постараться построить плот за три дня.\nПонадобится сотня бревен.\nПушку закрепим на этой платформе.\n- Так пересечем реку.\n- Пушка затонет.\nНет.\nДа и другого выхода нет.\nТолько ждать, пока русло высохнет.\nЯ хочу доставить пушку в Авилу, а это риск.\nГлавное, чтобы работали все.\nНам нужна сотня бревен.\nЛадно.\nСобери людей, пусть рубят деревья.\nДействуйте, капитан.\nНо если пушка утонет...\n- Мне надоели ваши угрозы.\n- Мне это не нравится.\n- В любом случае, риска нет.\n- Вашего слова не достаточно.\n- Тогда позовите людей назад.\n- Ладно.\nПодождите.\nЯ скажу.\nМы знаем причину этого глупого спора.\nЕсли надо переправляться, не тратьте понапрасну время.\nОтпускайте плавно.\nТяните, тяните.\nХватайте другой трос.\nНу вот.\nВсё жерло в грязи.\nЛучше бы я этого не видел.\n- Ее можно вытащить?\n- Как?\nЧем?\n- Есть люди, мулы.\n- Им ее не сдвинуть.\n- Сколько потребуется народу?\n- Тысяча или две.\nВ Альгадо жителей больше, Мигель.\nЖители Альгадо, я плюю вам в лицо.\nЯ, Мигель, иду с пушкой на Авилу.\nВ Авиле никто не сидит на трибунах с французами.\nИ не поднимает наш флаг рядом с флагом врага.\nНет.\nПодождите.\nЧто вы за люди?\nСидите, радуетесь жизни.\nВ двухстах милях отсюда враг забавляется тем, что насаживает испанских детей на штыки.\nМожет, у вас нет сердца?\nИ нет стыда?\nПо ту сторону реки в грязи застряла пушка.\nНам нужна помощь.\nЯ не прошу вас умереть.\nИли пролить кровь.\nЛишь попотеть немного.\nСкажете детям, что в потоке сопротивления есть и ваш пот.\nТе из вас, кто остался испанцем, идите за мной.\nУ вас лицо в грязи.\nВам нельзя рисковать.\nПридется.\nИх больше, они хорошо вооружены.\n- Обходить будем три недели.\n- Пусть будет три.\nКапитан, в Авиле - командующий наполеоновской армии.\nГенерал Анри Жувэ.\nУ него красивая форма.\nВино ему доставляют из Франции, а женщин - из Марокко.\nКаждое утро, чтобы сломить сопротивление, он вешает десять испанцев.\nЗа три недели он повесит двести десять человек.\nВы рискнете ради них пушкой и успехом дела?\nА сколько народу он повесит, если вы не доберетесь до Авилы?\nНас ждут тысячи людей.\nЯ не могу медлить.\nЯ вам не помощник.\nЕсли нас разобьют, вы сами потащите пушку в Сантандер.\nГерцог Веллингтон.\nКапитан, есть люди, которых не изменить.\n- Например, Мигель.\n- В этом наша беда.\n- Значит, вы нас бросаете?\n- Я не хочу идти на самоубийство.\nПослушайте.\nКонечно, с Мигелем трудно.\nОн упрям.\nУпрям - это мягко сказано.\nНо никто не знает Мигеля лучше меня.\nВы привыкли вести себя, как на своем корабле.\nМигель на кораблях не ходил.\nИ воевать умеет, как Герьерос.\n- Вы его поддерживаете?\n- Как и все.\nНо если он ошибается, мы всё равно с ним.\nНадеюсь, вы тоже.\nПочему?\nКапитан, думаю, вы считаете себя мужчиной, а не свиным окороком.\nТак.\nМы готовы.\nТы останешься с Марией и с ним.\nМне нужно пять человек.\n- Зачем?\n- Чтобы украсть порох.\nДай ему людей.\nГерьерос!\nГерьерос.\nОткатите бочки с порохом в сторону.\nЖивее.\nЖивее.\nВперед.\nСейчас взорвется, прыгайте.\nЯ не офицер штаба.\nУ меня нет информации.\nОн полевой офицер, он не в курсе дел штаба.\nПусть попробует вспомнить.\nПопробуйте вспомнить.\nМне нечего сказать.\nЯ готов.\nСкажите им то, что они хотят знать.\nИ останетесь жить.\n- Что вы сказали?\n- Не хочу, чтобы его убили.\nУбеждаю заговорить.\nГоворите.\nКлянусь, у нас нет сведений из Авилы.\nУ меня семья, я не хочу умирать.\nОн клянется, что сведений об Авиле нет, и не хочет умирать.\nОни лгали.\nНе пытайтесь умыть руки.\nЭта кровь не смывается.\n- И что?\n- Я не буду молча смотреть на это.\nМожете не смотреть, капитан.\nВы много вмешиваетесь.\n- Если бы не пушка...\n- То что?\n- Я бы с вами не связывался.\n- Идите, вы нам не нужны.\n- Я выполняю свой долг.\n- У меня тоже долг.\nНе вмешивайтесь, или следующим убьют вас.\nВы безумец.\nВ порту Лас Крусес стоит британский корабль.\nИдите туда.\nХорошо.\nСегодня же.\nЛучше прямо сейчас.\nВы довольны?\nАнгличане не получат пушку, он не умеет стрелять.\nАвиле конец.\n- Он стоит на своем.\n- Безумец.\nЯ буду с ним.\nНо вам меня не понять.\nЭто не мое дело.\nВам этого не понять.\nГенерал Жувэ приговорил к повешению моих отца и брата.\nЯ ему понравилась.\nЯ пришла к нему.\nНо он всё равно их повесил.\nЯ молилась со всеми, чтобы тоже умереть.\nМне незачем было жить дальше.\nПока не появился сын сапожника.\nОн показал, для чего нам жить, бороться.\nЭто был Мигель.\nВы отблагодарили его сполна.\n- Я остаюсь с ним.\n- Вы с ним живете, но не любите.\nПотому эта связь сомнительна.\nБританский капитан и участница сопротивления...\n- тоже не пара.\n- Я готов рискнуть.\nИ подготовите пушку?\nОн сказал, что сам справится.\nМигель не всегда говорит то, что думает.\nЯ не буду перед ним извиняться.\nЭтого не нужно.\nЯ сделала это за вас.\nСколько картона может съесть человек?\nТри дня - вода и вот это.\nЧтобы тянуть пушку, нам нужны силы.\nТы еще не мужчина.\nОн тебе предан, а ты смеешься над ним.\nХосе, они просто шутят.\nЯ ничуть не хуже их.\nИ ты это знаешь.\nТы лучше.\nТы молод, смел, силен и красив.\nМечта любой женщины.\nТы также умен и...\nХватит, Хуана.\nДовольно.\nЯ не сержусь.\nПожалуйста.\nУмоляю вас.\nПрошу.\nПожалуйста.\nВ деревне есть дети.\nОтдайте еду.\nМы умрем.\nХотя бы хлеб.\nХоть что-нибудь.\nМигель, коньяк.\n- Что такое?\n- Вы сами слышали.\nНу и что?\n- Нам ведь нужна еда.\n- Поддержка крестьян важнее.\n- Что вы знаете о крестьянах?\n- Наверное, почти ничего.\nТысячи крестьян встретят вас в Авиле.\nЧто вы им скажете?\nЯ найду, что сказать.\nЯ устал от ваших советов.\nВо всех деревнях будут прятать еду.\nИ никто больше не захочет нам помогать.\nУступаю вам право командовать.\nДоговоритесь с крестьянами.\nМожете расплатиться с ними.\nВ фунтах стерлингов.\nОбъясните ему, что он не прав.\nЯ живу с крестьянами.\nИ меня не надо учить общаться с ними.\n- Нет, конечно.\n- По-твоему, он прав?\n- Я думаю...\n- Для женщины ты много думаешь.\nПо мне, так ты прав, Мигель.\nМигель, извинись перед ним за свои слова.\nХосе.\nНос утри.\nЦелый лагерь смели.\nХорошенькое дело.\nНепобедимая французская армия бежит в горящих подштанниках.\nА они скрылись.\nЭто их земля, генерал.\nОни знают, когда нападать и где прятаться.\nОни и сейчас прячутся.\nОни снова выступят.\nЯ догадываюсь, где.\n- Им помогают.\n- Крестьяне.\nНе только.\nС ними британский морской офицер.\nВоенный корабль англичан стоит в Лас Крусесе.\nЗдесь.\nПрекрасно.\nПрекрасно.\nОрганизовать на всех дорогах в Лас Крусес постоянный дозор.\nПроверим вашу догадку.\nКарлос.\nКарлос.\nТелеги.\nГде телеги?\n- Где телеги?\n- Я не знаю.\nПонятия не имею.\nЯ отправил их назад в деревню.\nВ деревню?\nМигель.\n- Карлос его убьет.\n- Он просто немного позабавится.\nКарлос, хватит.\nРана не опасна.\nЧерез несколько дней...\nЯ не перестану помнить, что убил этого человека.\nМигель не предполагал, что всё так выйдет.\nКонечно.\nЭто была забава.\nМне жаль.\nПравда.\nНе надо.\nЭто вовсе не связано с телегами.\nОн ревнует, и не напрасно.\nЯ сказал тебе, что доставлю пушку в Авилу.\nИ я это сделаю любой ценой.\nНо не ради него и не ради долга.\nЯ знаю причину, ты тоже.\nМы видели пехоту.\nНа той стороне реки.\nНельзя, чтобы нас засекли на равнине.\nНичего.\nПересечь Кано трудно.\n- Там есть мост.\n- Моста нет.\nЯ же знаю.\nФранцузы построили там мост.\nНа лодках.\n- Сколько там лодок?\n- Пятнадцать, шестнадцать...\nМне нужно больше пятисот фунтов пороха.\nВам нужно?\nЛадно, давайте порох.\nЭнтони.\nВозьми Хосе.\nОн работал в шахте и применял порох.\nВозьми.\nЯ скажу Мигелю.\nСколько тебе лет?\nВсе думают - двадцать.\nВообще-то, восемнадцать.\nБоишься?\nНет.\nЯ - да.\nЗнаете, зачем Хуана меня отправила?\n- Помогать.\n- Да.\nА еще вы ей нравитесь.\nЯ солгал.\nМне страшно.\nНо ничего.\nЯ справлюсь.\nЧто ж, пора окунуться.\nСтойте.\nЯ тебя искал.\nХотел сказать, что мне жаль Хосе.\nТы не виноват.\nХуана.\nВсю жизнь я боялась, ведь ничто не вечно.\nСейчас тоже боюсь, что это всего лишь сон.\nНет.\nОбещаю.\nПри других обстоятельствах ты бы на меня не взглянул.\nХочешь, чтобы я сказал?\nЯ...\nНет.\nПросто всё было бы совсем иначе в Англии.\nЯ запер бы тебя в башне, поставив верных стражей, и хранил бы ключ.\nЗолотой.\nТебе не хватило бы жалования.\nКогда я стану адмиралом, у нас будет карета.\nИ мы будем танцевать на королевских балах.\nМне понадобится новое платье.\nДа.\nИ голубой шарф под цвет моей формы.\nКланяться я буду осторожно.\nШтаны сидят слишком плотно - однажды порвались.\nЭнтони.\nДа?\n- С кем ты был?\n- Когда?\nКогда штаны порвались.\nКороль захочет с тобой познакомиться.\nРасскажешь ему, как однажды в далекой Испании встретила английского капитана... и сделала его самым счастливым человеком.\nЯ люблю тебя, Энтони.\nХуана.\nДа?\nМы все испанцы и знаем, чего хотим.\nНам известна цена похода на Авилу.\nЯ понимаю, Мигель.\nНо ты хочешь знать, что будет после Авилы.\nДа.\nЭтого я не скажу.\nНо мы долго были вместе.\nТы жила со мной, хотя я не умею ни читать, ни писать.\nКогда я не мог подобрать слова, ты делала это за меня, Хуана.\nЯ чувствовал себя настоящим мужчиной.\nНо в глубине души я знал, что я никто.\nДумаешь, я не способен чувствовать, чего хочет женщина?\nЯ могу отблагодарить тебя, только лишь вернув Авилу.\nЕсли этого мало, скажи.\nПопытка разыскать горстку повстанцев... останется в военной истории как пример беспомощности.\nВаша карьера поставлена под вопрос из-за этого марш-броска с пушкой.\nМы успели потерять мост и немало людей, прежде чем поняли, что пушка здесь.\nДалеко от Лас Крусеса и от моря, полковник.\nДа, месье.\nВ этих горах есть ущелье.\nВот оно.\nИменно там я их встречу.\nНе думаю, что им удастся уйти.\nНу?\nТам французские пушки.\nЭто же все знают.\n- Я тоже знаю.\n- Как ты хочешь там пройти?\n- Есть другой путь?\n- Мы обещали помочь, но не ценой жизни.\nТы попадешь под перекрестный огонь.\nНас не услышат.\nПостараемся, чтобы колеса не скрипели.\nДумаете, французы глухие?\nЕсли преодолеть незаметно хоть полпути, у нас есть шанс.\nТак что не надо изображать упрямых ослов.\nМы оставили наши лавки и фермы.\nЧто течет в ваших жилах?\nЧто угодно, но не кровь.\nНам нужно на юг, чтобы попасть в Авилу.\nА значит, нужно пройти здесь.\nЭто ясно?\nДа, капитан.\nЯснее некуда.\nНам немного стыдно, но у нас у всех жены и дети.\nМы не готовы умереть за эту пушку.\n- Нам нужна помощь.\n- Обойдемся без них.\nУдивительное умение убеждать.\n- Я должен встать на колени?\n- Если это поможет - да.\n- Они нам нужны.\n- Обойдемся.\nПолсотни греков защищали ущелье от тысячи солдат.\nУ нас всё наоборот.\nЯ не изучал историю, но знаю точно:\nя буду стоять перед статуей Святой Терезы в Авиле.\nПрекратить огонь.\nОни вне зоны огня, но дороги перекрыты.\nСмирно!\nИх нет ни у входа, ни в самом ущелье.\nОставайтесь на позиции и ждите моего приказа.\nБревно сюда.\nТащите.\nХорошо вы знаете холмы.\nЗдесь не спуститься.\n- Спустимся, как поднялись.\n- Пушку потянет вниз.\nУскорение и масса взаимосвязаны.\nПри весе в пять тонн на спуске... ее масса достигнет десяти-пятнадцати тонн.\nЕе будет не удержать.\nОна всегда весит одинаково.\nПоворачивай мулов.\nПродолжайте.\nЖивее, живее.\nБревно сюда, бревно.\nКапитан.\nБревно, скорей.\nОтходите.\nОсвободите мулов.\nПрыгай.\nКрепление пушки сломано.\nВверх идти нельзя, надо спускаться.\nБлестяще.\nСпускаться было труднее.\nНеподалеку есть городок Манесирас.\nМанесирас.\nМанесирас.\nПредлагаю пойти туда и починить там пушку.\nНам нужны инструменты, кузница и укрытие от французов.\nМигель, вдруг там французы?\nОн что, пойдет в форме?\nНет.\nЧто вы предлагаете?\nВыбирайте.\nПридется попросить вас.\nИспанские блохи.\nОни не кусают англичан.\n- Это можно разрешить.\n- Есть еще одно.\n- Что?\n- Пушка.\nСын мой, сила дома Господня велика.\nНо пушка не читает молитвы.\nМы хотим спрятать ее внутри собора.\nА завтра...\n- Внутри собора?\n- На одну ночь.\nИдет страстная неделя.\nВы оскорбите святилище.\nСолдатам и пушкам место за дверью.\nЭто дом Господа, но не арсенал.\nТы много просишь.\nВаше Преосвященство.\nВы не можете отказать.\nНе могу?\nНи к чему прикрываться ответственностью и правилами.\nМало сказать, что пушке в соборе не место.\nЭто не просто пушка, а символ сопротивления Испании.\nЗнаете, сколько людей отдали свои жизни, чтобы она попала сюда?\nВы не видели горных троп, покрытых мертвыми телами.\nРади чего?\nВы можете не знать ответа, но вы испанец, священник, и должны это чувствовать.\nВы не можете отказать.\nХорошо.\nСегодня вечером будет служба.\nТогда и внесете пушку.\nСвятая Дева, ты услышала мои молитвы.\nОн всё понял.\nИ я люблю его еще больше.\nВ твоих глазах я грешница.\nНо я впервые с детства осмелилась мечтать.\nНо есть еще Мигель.\nИ его мечта\n- Авила - которую я навсегда разделяю.\nСлишком дерзко просить, чтобы ты помогла обоим.\nНо выслушай.\nИ пусть твое сердце простит мой выбор.\nЭто за Мигеля и Авилу.\nА это за любовь, обретенную с другим.\nВнутри собора?\nДа.\nПушка там.\n- Да ты пьян.\n- Точно.\nЯ ее видел.\nЛадно.\nПроверим.\nИтак, гости, наконец, прибыли.\nИх больше, чем я думал.\nВ самом деле.\nОни смогут пробить стены?\nДа.\nЕсли сами не взорвутся.\nСколько, по-вашему, там человек?\nОколо десяти тысяч.\nИ подходят еще.\nОпасно для кавалерии.\nЧто-то тучи стали сгущаться.\nИспанцы ждут момента истины.\nМитч МакКафи, летающий Шерлок Холмс.\n"
  },
  {
    "path": "benchmarks/haystacks/opensubtitles/ru-small.txt",
    "content": "-Две недели не даешь мне прохода.\nВот и действуй, чем ты рискуешь?\nЯ думал, что сделаю тебя счастливой.\nТоже мне счастье.\nМуж не дает ни гроша, и у любовника ума не хватает подумать о деньгах.\n- Хорошенькое счастье.\n- Извини, я думал, ты любишь меня.\nНу люблю, люблю тебя, но и не хочу, чтобы все началось как в прошлый раз.\nТы не права.\nУ меня для тебя сюрприз.\nШлихтовальная машина, ты о ней давно мечтала.\n-Для костей?\n- Нет, настоящая.\nХочешь, приходи за ней вечером.\nЯ тебе не девочка.\nБыла бы ты девочкой, я бы тебе ее не купил.\nЯ люблю тебя\nМитч МакКафи, летающий Шерлок Холмс.\n"
  },
  {
    "path": "benchmarks/haystacks/opensubtitles/ru-teeny.txt",
    "content": "летающий Шерлок Холмс.\n"
  },
  {
    "path": "benchmarks/haystacks/opensubtitles/ru-tiny.txt",
    "content": "Это - одно из самых поразительных недавних открытий науки.\nМитч МакКафи, летающий Шерлок Холмс.\n"
  },
  {
    "path": "benchmarks/haystacks/opensubtitles/zh-huge.txt",
    "content": "魯哇克香貓咖啡 世界上最稀有的飲品 Kopi luwak.\nthe rarest beverage in the world.\n嘗一小口 Take a whiff.\n來 Go ahead.\n寇爾先生 董事會已準備好聽你的提案 Uh, mr.\ncole, the board is ready to hear your proposal.\n等一下下 Hold on just a second.\n來 繼續 Go ahead.\ngo on.\n怎樣 Well?\n真不錯 Really good.\n真不錯 Really good.\n寇爾先生?\nMr.\ncole.\nsir?\n吉姆 你知道庸俗是什麼嗎 Do you know what a philistine is, jim?\n先生 我叫理查德 Sir, it's richard.\n沒錯 費爾 出動你的如簧巧舌吧 That's right, phil.\ngive them the spiel.\n謝謝 主席先生 主管們 Thank you, mr.\nchairman, fellow supervisors.\n我們寇爾集團財務的管理不善 We at the cole group feel the decline of the winwood hospital...\n直接造成了溫伍德醫院的衰敗 ...is a direct result of significant fiscal mismanagement.\n請原諒 我們醫院...\nI beg your pardon, this hospital...\n日常開支近2倍 overhead costs are nearly double.\n你們的租金和置業費用高得不可置信 Your lease and land costs were similarly overbid.\n在科研分析 兒科 腫瘤學和核磁共振等領域的貢獻 Donations have atrophied to the point you've fallen far behind\n萎縮到了有史以來曲線的最低點 the curve in research, pediatrics, oncology and mri.\n7年來 寇爾集團私有化了15家公立醫院 The cole group has privatized 15 public hospitals in seven years...\n每一家目前都為社區提供 或即將提供 ...each of which now provides, or will soon provide...\n最高標準的醫療服務 ...the highest standard of medical care to their communities.\n人手問題就不管了嗎 despite being grossly understaffed?\n越好的醫生 越需要...\nthe better the doctor, the need...\n床位怎麼辦 外面在傳你們收太多病人 What about beds?\nthere are rumors you increased the number\n擠都擠不下了 of patients to the point of overpopulation.\n病人的密度一直是...\nPatient density has always been...\n還有急診室 這可是眾所周知的...\nAnd your emergency rooms, I mean, they are known...\n我開的是醫院 不是健康療養所 I run hospitals, not health spas.\n一個房間兩張床 無一例外 Two beds to a room, no exceptions.\n聽著 我和米雪爾.\n費弗約好了來這兒吃午飯 Look, I passed up a lunch with michelle pfeiffer to be here...\n我們能否盡早停止惺惺作態 ...so can we desist from all of this inane posturing?\n男孩女孩們 你們需要我 Boys and girls, you need me.\n而我卻不需要你們 I do not need you.\n這信封裡有一張大額支票 Now, there's a sizeable check in this envelope...\n如果決定了就請隨便使用吧 ...let me know if you decide to cash it.\n寇爾先生 你沒事吧 Mr.\ncole, are you all right?\n你在這兒幹嘛 What are you doing here?\n為生命而戰鬥啊 你呢 Oh, you know, fighting for my life.\nyou?\n我只是有點驚奇...\nUh, no, I was just surprised...\n我並不在乎保險 and I don't care about the insurance!\n去告訴那個腦子糊了屎的醫生 必須告訴我 And tell dr.\nshit\n-for\n-brains i wanna know everything\n為什麼一定要我打這一針光黴素 about this bleomycin drip he wants to get me on.\n我聽說它會吞噬你的肺 I hear it eats your lungs.\n等我下個月去國會座談時 When I address congress next month...\n我不想通過喉嚨裡的洞來呼吸 ...i don't want to do it breathing through a hole in my throat.\n-其實並不完全是這樣\n-這傢伙是誰\n- that's not exactly what happens.\n- who the hell is this guy?\n-湯馬斯在哪兒 湯姆\n-我在這兒呢 先生\n- where's thomas?\ntom!\n- in plain view, sir.\n-你好 湯姆\n-我們要把你挪上床\n- hi, tom.\n- we're gonna move you into the bed.\n我能自己來 我還沒死呢 I can do it myself.\nI ain't dead yet.\n現在怎樣 How about now?\n我最近炒你魷魚了嗎 Have I fired you lately?\n自從奧普拉事件以來還沒有 Not since the oprah incident.\n-他是個好人\n-對 好員工\n- that was a good one.\nha\n-ha\n-ha.\n- yeah, it's good stuff.\n那他媽是誰 Who the hell is that?\n你他媽又是誰 Who the hell are you?\n他說 \"你他媽...\n?\" He said, \"who the hell...\n?\"\n天哪 我在哪兒 這是停屍房嗎 Oh, god.\nwhat am i, in the morgue?\n那是我第一次將目光停留在愛德華.\n寇爾身上 That was the first time I laid eyes on edward cole.\n一個不祥的開始 一定是這樣 An inauspicious beginning, to be sure.\n放過我吧 親愛的上帝 Oh, spare me.\nsweet jesus.\n我討厭這些...\n我討厭針管 I hate these...\nI hate tubes!\n要是接下來3個星期裡 I'll be damned if I'm gonna spend the next three weeks\n我都挨著這個傢伙一起睡的話 我一定會死的 laying next to this guy.\n怪人一個 像個半死人 Zombie boy.\nlooks half\n-dead already.\n你不能住單間 You can't have your own room.\n不然會造成巨大的公關問題 It would create an enormous pr problem.\n我沒有定過這樣的鬼規矩 I don't give a shit about pr.\n我要住單間 這是我的醫院 沒天理啊 I want my own room.\nit's my hospital, for chrissake.\n別告訴我不能住單間 Don't tell me I can't have my own room.\n無意冒犯 保爾 No offense, pal.\n這政策你已公開辯護過無數次 You have publicly defended this policy countless times.\n你開的是醫院 不是健康療養所 You run hospitals, not health spas.\n一個房間兩張床 無一例外 two beds to a room, no exceptions.\n我從前沒有生過病 I've never been sick before.\n好吧 艾爾德瑞吉醫生馬上就要來給您打麻醉 Okay, dr.\neldridge will be in in a minute to dot you up, okay?\n打麻醉 Dot me up.\n上帝 Jesus.\n湯馬斯 Thomas\n麻醉時別讓我清醒著 don't let me wake up paralyzed.\n我會竭我所能 I'll do what I can.\n這真的是你的醫院嗎 This really your hospital?\n是的 沒錯 Yeah, pretty much.\n難喝的豌豆湯需要改進一下 Might wanna do something about the pea soup.\n在早上的手術時發現 By the morning of the surgery,\n癌癥已經擴散到愛德華的全身 the cancer had spread so far throughout edward's body\n醫生們估計他只有5%的希望能活下來 that the doctors gave him only a 5 percent chance to survive\n但他們卻未曾估計到他對他們有多生氣 But then, they didn't account for how pissed off they'd made him.\n沒有人來看他嗎 No visitors come in to see him?\n手術結束後他就一直睡著 He's been sleeping a lot since they brought him back.\n哦 Mm.\n我親自來護理你 還有一個原因 That's another reason I don't miss nursing.\n你看病人要是那樣 是多麼可憐啊 It's always so sad seeing a patient like that,\n還獨自一人 挺過手術 all alone after that kind of surgery.\n至少他不嘮叨 At least he's quiet.\n瑞秋今早來過電話 Rachel called this morning.\n真的?\n她怎麼樣 Really?\nhow's she doing?\n她在為下學期在交響樂團當首席小提琴手做準備 She's auditioning for first violin in next semester's symphony.\n那真是太好了 That's wonderful.\n還要書嗎 Need any more books?\n不用了 我很好 No, I'm...\nI'm fine.\n今晚的藥拿到了嗎 Got your meds for the night?\n嗯 我已經吃過了 Mm\n-hm.\nI already took them.\n枕頭怎麼樣 How about pillows?\n我很好 弗吉尼亞 真的 謝謝你 I'm fine, virginia, really.\nthank you.\n如果你願意的話 我可以陪你待一會兒 You know, I could stay a while if you want me to.\n沒必要把你也給拖累了 對嗎 No use both of us being useless in the morning, right?\n好吧 Okay.\n她走了?\nShe gone?\n什麼 What?\n作為公共健康專家之流 As something of a public health expert,\n我相信更多的人死於探望者 而勝過死於疾病 I believe more people die from visitors than diseases\n這種草莓 600塊 \"it's the berries,\" for 600.\n這種瑞典草莓和越橘一樣享有盛名 This swedish berry is also known as the cowberry.\n-越桔又是什麼\n-越桔又是什麼\n- what is a lingonberry?\nuh, what is a lingonberry?\n正確 這種草莓 800塊 Correct! \"it's the berries,\" for 800.\n1956年熱賣前40名中 這草莓告訴貝多芬轉存 In a top 40 hit of 1956, this \"berry\" told beethoven to roll over.\n誰是查克.\n貝瑞 Who is chuck berry?\n誰是查克.\n貝瑞 對 Who is chuck berry?\nyes.\n嘿 Hey.\n杜克 Duke?\n你介意嗎 You mind?\n哦 對不起 Oh.\nsorry.\nno.\n-什麼是馬裡亞那海溝\n-什麼是馬裡亞那海溝\n- what is the mariana trench?\n- what is the mariana trench?\n早上好 愛德華 Good morning, edward.\n-早\n-感覺怎麼樣\n- morning.\n- how you feeling?\n明擺著呢 Dumb question.\n導管怎麼樣 How's that catheter?\n真不知道沒有它的時候我是怎麼過來的 Don't know how I ever did without it.\n幽默是個好兆頭 Ah, humor is a good sign.\n你去死吧 Kiss my ass.\n太粗魯了 這是你最大的愛好了 對吧 As is surliness.\nit's one of your favorite flavors, right?\n-對\n-看看這裡怎麼樣\n- yeah.\n- let's see what we got here.\n看起來不錯 It looks good.\n手術很順利 好嗎 All right, so the operation went well, okay?\n所有的術後腦掃瞄都很乾淨 All the post\n-op brain scans are clean.\n現在我們要乘勝追擊你體內剩餘的腫瘤 Now we go after the sarcoma in the rest of your body.\n不幸的是 你的血壓很高 Now, unfortunately, your blood markers are extremely high,\n我希望今早我們就開始化療 so I would like to begin chemo this morning.\n喜歡早上化療的味道 Love the smell of chemo in the morning.\n現代啟示錄 對嗎 Apocalypse now, right?\n讓我感覺像個勝利者 Makes me feel like victory!\n-我等會兒和你去辦手續\n-好的\n- I'll check in with you later.\n- all right.\n喂 大夫?\n大夫?\nSay, doc?\ndoc?\n你可以來看一下...\nYou think you could just take a look at...\n?\n-對不起 我遲到了 你的醫生是誰\n-蓋比安醫生\n- sorry, I'm late.\nwho's your doctor?\n- he's dr.\ngibian.\n我告訴護士 I'll let the nurse know.\n謝謝 Appreciate it.\n婊子 不是嗎 Bitch, ain't it?\n-夸克是什麼\n-夸克是什麼\n- what are quarks?\n- what are quarks?\n你在這兒多久了 how long you been here?\n進進出出幾個月了 In and out over the past few months.\n把我當成試驗品 got me on an experimental treatment.\n-二元方程式是什麼\n-二元方程式是什麼\n- what is the quadratic equation?\nwhat is the quadratic equation?\n有多痛苦 How rough is it?\n化療?\nChemo?\n不是很糟 Not too bad.\n只要你不介意晝夜不停的嘔吐 If you don't mind around\n-the\n-clock vomiting...\n看著你的血管變黑 ...watching your veins turn black...\n感覺骨頭像是汽油膠化劑做的一樣 ...and feeling like your bones are made of napalm...\n與在海灘上度假一日無異 ...it's a day at the beach.\n那真是種欣慰 That's a relief.\n當然 我聽說每個人的反應都不一樣 Of course, I hear people react to it differently.\n今晚你自己就知道了 You'll know by tonight.\n今晚?\nTonight?\n聽著 Listen, um...\n是否介意我八卦一下 ...you don't mind my asking...\n那邊那個奇妙的裝置是什麼 ...what is that contraption you got over there?\n是虹吸壺 煮咖啡用的 It's a siphon.\nmakes coffee.\n它還能幹些什麼 What else does it do?\n它還能幹些什麼呢 What else does it have to do?\n你是否知道咖啡最初是由埃塞俄比亞的 Did you know that coffee was originally discovered\n一個牧羊人所發現的 by a shepherd in ethiopia?\n-不必說了\n-是真的\n- you don't say.\n- it's true.\n好像是他的山羊在一個陌生的灌木叢中吃漿果 Seems his goats were eating berries from an unfamiliar bush.\n沒過多久 羊就到處跑跑跳跳 Before long, they were running and jumping all over...\n度過了一段歡欣雀躍的時光 ...having a gay old time.\n於是牧羊人帶了一些樹枝回到當地的修道院 So the shepherd took some of the branches to the local monastery\n修道院長決定把樹枝烤熟 where the abbots decided to roast them.\n烤著烤著 When the berries burned\n裡面的豆子散發出了濃郁的香氣 the beans inside gave off such a pleasant aroma\n他們把豆子放入燉鍋中釀造 they brewed them into a stew.\n燉鍋 Stew, huh?\n隨後的幾百年裡 咖啡流傳到了阿拉伯 歐洲...\nAnd over the next few hundred years, it spread to arabia, europe...\n甚至蘇門答臘島 正如你從那兒買的烈酒一樣 ...even sumatra, like that hooch you got over there.\n它叫做魯哇克香貓咖啡 It's called kopi luwak.\n我知道它的名字 I know what it's called.\n是嗎 You do?\n從來沒人逮住過我喝那玩意兒 Never catch me drinking that shit.\n你喝過嗎 Have you ever tried it?\n沒有 我更鍾情於速溶咖啡 No.\nI'm more of a instant\n-coffee man.\n來 我來幫你 Here, here we are.\n-謝謝\n-不客氣\n- thanks.\n- no problem.\n好了 給 There you are.\n你一直有雀斑嗎 You always had those freckles?\n是的 Far as I know.\n挺好看的雀斑 Nice freckles\n嗯 Hmm.\n好了 我們有培根火腿和甜瓜 還有些意大利布拉塔乾酪 Okay, we got prosciutto and melons, some burrata mozzarella...\n和一塊小牛排 ...and a veal paillard.\n都是上好的意大利傳統膳食 The folks at toscana send their best.\n你要全部吃完嗎 You sure you wanna eat all that?\n是這麼打算的 That's the plan.\n什麼 What?\n哦...\nOh, uh...\n要湯馬斯給你也來一盤嘛 You want thomas to make you a plate?\n湯米 弄一盤給...\nTommy, uh, fix a plate for, uh...\n卡特 Carter.\n是姓還是名?\nFirst name or last?\n名字 First.\n真的?\n很有意思 Really?\ninteresting.\n要來一盤嗎...\n?\n說不定能讓你振奮 So you want, uh...\n?\nmight cheer you up.\n不需要了 謝謝 No, thanks, I'll pass.\n確定?\nYou sure?\n好吃 好吃 Mm, yum, yum.\n全洛杉磯最好吃的 Best in l.\na.\n再也不是洛杉磯最好的了 It ain't the best in l.\na.\nno more.\n我的天啊 Oh, man.\n瑪亞又是三好學生 Maya made the honor roll again.\n我肯定她行的 Bet your ass she did.\n我的天啊 My god.\n還不如得個心臟病什麼的 Somewhere, some lucky guy's having a heart attack.\n同志們 Fellows.\n寇爾先生 Mr.\ncole.\n別管我 我只是在自言自語而已 Don't pay any attention to me.\nI'm just, uh, talking to myself.\n這是凱爾給你的 It's from kai.\n他說長大後想成為像他爺爺一樣的機械師 Says he wants to be a mechanic like his granddad when he grows up.\n希望你讓他打消這個念頭 I hope you talked him out of that.\n我試過了 Well, I tried.\n看看是什麼東西 What do we got here?\n一部福特野馬350 It's a shelby 350.\n-我一直想要一部\n-是啊\n- I always wanted one of those.\n- yeah.\n凱爾記著 kai remembered.\n媽媽覺得你好像休息得不夠 Mom seems to think you're not getting enough rest.\n恩 Mm\n-hm.\n她愛你 爸爸 She loves you, pop.\n恩 Mm\n-hm.\n好 Okay.\n檢查報告出來後 給我們打電話 好嗎 You'll, uh, call us when you get your test results, huh?\n恩 Mm\n-hm.\n如果有結果的話 If that day ever comes.\n好 Okay.\n-保重\n-好\n- take care.\n- okay.\n你的長子?\nHe your oldest?\n是 Yeah.\n他做什麼的 What's he do?\n-羅傑是稅務律師\n-哦\n- roger's a tax attorney.\n- oh.\n你看 Here.\n他弟弟李 是個工程師 His brother, lee, is an engineer.\n這個漂亮的小女孩是誰 Who's the pretty little lady?\n那是瑞秋 三個中最小的 That's rachel.\nyoungest of the three.\n年紀差得好大 Big age difference.\n是啊 她是個驚喜 Yeah, well, she was a surprise.\n她出生後 我兒子們都寧願呆在家裡照顧她 We'd hardly gotten the boys out of the house when she came along.\n她小提琴拉得很棒 She's an outstanding violinist.\n你有小孩嗎 You got kids?\n這要看了 Depends.\n-我的婚姻關係都不長\n-恩...\n- never stayed married long enough.\n- oh, well...\n別擔心 對於我們兩個來說我結婚夠久了 ...don't worry, I've been married long enough for the both of us.\n覺得怎麼樣 How's that going?\n就這樣 It's going.\n感覺不錯吧?\nThat good, huh?\n這就是為什麼要發明電燈開關的原因了 Well, that's why they invented light switches.\n別誤會 我愛婚姻生活 結過四次婚 Don't get me wrong, I loved being married, been there four times.\n問題在於我鍾情於獨身 Problem is I love being single too.\n魚和熊掌不可兼得 Hard to do them both at the same time.\n人無完人嘛 Well, nobody's perfect.\n我唯一成功的就是我的事業 Only successful marriage I had was me and my work.\n我16歲時就開始賺錢...\nI started making money when I was 16...\n...之後就 ...and that was that.\n沒有停過 Never stopped.\n我比較倒霉 I'll be damned.\n我原來想當歷史教授 I wanted to be a history professor.\n人無完人啊 Nobody's perfect.\n弗吉尼亞告訴我懷孕前 I made it through two months of city college...\n我在城市學院做過兩個月 ...before virginia gave me the news.\n然後...\nAnd then, you know...\n年紀小 黑人還窮 孩子又要生了 ...young, black, broke, baby on the way...\n就接了第一份待遇還不錯的工作 Take the first decent job that comes along.\n我一直想回去 I always meant to go back\n但45年一晃就過去了 but 45 years goes by pretty fast.\n時光飛逝 Like smoke through a keyhole.\n該死 Shit!\n不要睡著的時候給我打嗎啡 真是浪費 Don't give me the morphine while I'm sleeping.\nit's a waste.\n她可能是想把我們倆都殺了 你說呢 Maybe she's trying to kill us both.\nyou ever think of that?\n贏了 Gin.\n你是什麼 魔鬼嗎 What are you, the devil?\n如果我已經失去理智了怎麼辦 What if I lost my mind already?\n老天啊 不會吧 Jesus, no.\n不 不 不 這不是祈禱 No.\nno, no jesus, this is not praying.\n我只是在自言自語 這是 I'm talking to myself out loud, that's...\n你想過自殺嗎 You ever think about suicide?\n自殺?\n我?\nSuicide?\nme?\nyeah.\n沒有 no.\n知道了 你是第一階段 Thought so.\nstage one.\n什麼 What?\n有五個階段 但是...\nThe five stages, but...\n否認 Denial.\n然後是憤怒 抵抗 沮喪 接受 Then anger, bargaining, depression, acceptance.\n所以你現在當然不會想到自殺 So of course you're not thinking of suicide.\n你處於第一階段 否認 You're in stage one.\ndenial.\n那你在哪個階段 What stage are you in?\n否認 Denial.\n想過自殺嗎 And thinking about suicide.\n好吧 這只是一個...\nYeah, okay.\nit's just a frame of...\n看上去你好像不再需要這個了 Well, it looks like you won't be needing this anymore.\n-結束了?\n-第4個療程 也是最後一個\n- that's it?\n- yep, fourth and final.\n接下來做什麼呢 What's next?\n醫生要先看看所有的檢查結果再決定 They have to run all the tests first, see where we stand.\n-要多久\n-需要點時間\n- well, how long?\n- takes a while.\n我會讓蓋比安醫生安排檢查的 I'll get dr.\ngibian to schedule them when I see him.\n謝謝 Thanks.\n我離下班還有一個小時 還有什麼需要嗎 I'm on for another hour, anything you need?\n如果可以的話 我想要健康證明書 Clean bill of health if you got one.\n堅持一下 卡特 Hang in there, carter.\n我就是這麼做的 That's what I do.\n到中心線 上壘...\nAnd line to center, base hit...\n將要打三個反彈球 ...kent will have to play it on three bounces...\n得分 投球手向後...\n...and alou will score.\nthe throw goes to the back...\n啊呀抄近路 天啊 Hit the cutoff man, for crying out loud.\n你看 這就是比賽癥結所在 You see that's the problem\n沒有基本原則 No fundamentals.\n有讀過這本書嗎 Did you ever read the time of your life?\n-威廉.\n薩洛揚寫的\n-是的\n- william saroyan.\n- yeah.\n\"沒有基礎 完全沒有\" \"no foundation.\nall the way down the line.\"\n當我們長大後...\n你在做什麼 When we were growing up...\nwhat are you doing?\n沒有 隨便寫寫 Nothing, scribbling.\n寫點什麼 Scribbling?\nwhat?\n沒什麼 亂寫而已 Nothing.\njust scribbling.\n當然 這是你想做的 Oh, sure, that's what you wanna do\n三壘的人 球偏了點 bounce a slider with a man on third.\n現在的這些孩子...\nThese kids today, they...\n戴耳機了 我原來在自言自語 Earphones.\nI'm talking to myself, again.\n-愛德華?\n-醫生\n- edward?\n- doc.\n感覺如何 How's it going there?\n愚蠢的問題 Dumb question.\n檢驗報告出來了 I got the test back.\n現在就說嗎 I'll just lay it out, huh?\n只剩六個月 Six months.\n幸運的話一年 A year if we're lucky.\n我們有一個實驗性的療程 There is an experimental program that we've been conducting\n但不要抱太大希望 and I don't wanna get your hopes up\n只是覺得你比較適合來試試看 but I think you would be an excellent candidate\n醫生 Hey, doc.\n怎麼了 Yes?\n你擋住我視線了 You're blocking my view.\n哦 Oh.\n對不起 Sorry.\n如果你有什麼想問的 Anyway, if there's any questions\n不管什麼時候 都可以來找我 day or night, you know where to find me.\n有一個問題 One question.\n當然 問吧 Sure, of course.\n卡特 你有什麼要問霍林斯醫生的嗎 Carter, you wanna ask dr.\nhollins something?\n我其實對錢柏先生的病情不太瞭解 I mean, I'm not familiar with mr.\nchambers'...\n那就去瞭解一下 Well, get familiar.\n我只是想知道我還能活多久 就這個 I just wanted to know how I stand, that's all.\n好的 那我先去看看你的病情報告 Sure.\nhow about I'll go take a look at your chart, okay?\n謝謝 Thank you.\n愛德華?\nEdward?\n愛德華?\nEdward?\n曾經有一項調查 There was a survey once.\n一千名被調查者被問到否願意 A thousand people were asked, if they could know in advance...\n事先知道他們的死期 ...would they want to know the exact day of their death.\n96%的人不想 Ninety\n-six percent of them said no.\n我我以為我就是那剩下的4% I always kind of leaned toward the other 4 percent.\n因為如果能知道自己的生命還剩多少 I thought it would be liberating...\n將會是一種解脫 ...knowing how much time you had left to work with.\n最好的情況是1年 A year at best.\n但其實...\n我不是 It turns out, it's not.\n想玩牌嗎 You want to play cards?\n以為你再也不會問了 Thought you'd never ask.\n太陽高高昇起 Rise and shine.\n或者這樣 Or that.\n讓我看看 Let me see that.\n還有 湯馬斯 And, uh, thomas...\n打電話給克裡斯蒂拍賣行的瑪麗 call marie at christie's and tell her\n這個季度我不去競拍了 I won't be bidding this season.\n知道了 I understand.\n我不想冒犯你 Uh, sir, I don't mean to sound indelicate\n但你要我怎麼處理你的...\nbut how do you want me to handle your?\n遺產?\nDeath?\n就當作你的遺產一樣處理 Treat it as if it were your own.\n把所有的錢都留給我的助理?\nSo leave all the money to my assistant?\n去給我買塊杏仁牛角麵包 Go get me one of those almond croissants that I like.\n給我挑好的 And don't buy any green bananas.\n-你在看什麼\n-這是什麼\n- what are you doing?\n- what is this?\n-快還給我\n-是什麼\n- come on, give it back.\n- what is it?\n還給我 Give it back.\n地上撿的 我又不知道這是國家機密 It was on the floor.\nI didn't know it was a state secret.\n我大一時 有個哲學教授 Well, my freshman philosophy professor\n給我們佈置過一份作業 關於人生規劃 assigned this exercise in forward thinking.\n叫做\"遺願清單\" He called it a \"bucket list.\"\n我們要把一生中想做的事情列出一個清單 We were supposed to make a list of things we wanted to do\n-在我們...\n-翹辮子之前 in our lives before we...\n- kicked the bucket.\n真做作 Cutesy.\n我列出來的是\"成為百萬富翁\" Anyway, I wrote things like \"make a million dollars\"\n\"當第一位黑人總統\" 都是些年少輕狂的想法 \"first black president,\" you know, young man's wishes.\n我想重新列一張 但是...\nI was gonna redo the list, but then...\n\"善意地幫助一位陌生人\" \"help a complete stranger for the good.\"\n\"大笑到流淚\" \"laugh until I cry.\"\n不是要評論 但這也太弱了點 Not to be judgmental, but this is extremely weak.\n現在也沒什麼用了 Well, it's pointless now.\n我要從反面跟你理論一下 I would argue the exact opposite.\n好吧 就這樣 All right.\nthat's it.\n你在幹嘛 What are you doing?\n只是稍微改一下 A little rewrite, that's all.\n難道你不想去參加舞會 玩玩槍 I mean, don't you want to go out with some balls?\nguns blazing?\n找點樂子?\nHave a little fun?\n這可不是關於什麼槍什麼的 It was not supposed to be about guns blazing or anything like that.\n你還沒弄明白 You're missing the point.\n\"欣賞宏偉的景色\"這是什麼鬼東西 What the hell is \"witness something majestic\"?\n你有去過喜馬拉雅山嗎 Have you ever been to the himalayas?\n\"駕駛福特野馬跑車\" 這還不錯 \"drive a mustang shelby.\" not bad.\n想到一個 去跳傘怎麼樣 I got one.\nall right.\nhow about skydiving?\n現在我們有事做了 Now we're onto something.\n我們有事請做了?\nWe're onto something?\n-對啊\n-讓我看看 快點\n- uh\n-huh.\n- let me see that.\ncome on.\n好 Fine.\n\"親吻世界上最美的女孩\" \"kiss the most beautiful girl in the world\"?\n你打算怎麼做到 How do you propose doing that?\n大親特親 Volume.\n\"刺一個紋身\" 這就是你的勇氣?\n\"get a tattoo.\" is that the sum of your ambition?\n愛德華 我寫的可比你深刻 Edward, I've taken baths deeper than you.\n比大一學生深刻是容易的 It's easy to be deep in freshman philosophy.\n霍林斯醫生怎麼說的 What's dr.\nhollins say?\n我們只有幾個月了 對嗎 We got months, right?\n也許一年 A year, maybe.\n你覺得45年過得很快嗎 You think 45 years went by fast?\n我們能去做這些事的 We could do this.\n我們應該去完成這些願望 We should do this.\n不行 我不能 No, I couldn't.\n不要擔心錢 我有的就是錢 Don't think about money.\nthat's all I got is money.\n但我不知道...\nBut I don't know.\nI...\n你不知道什麼 What don't you know?\n我只是打比方而已 It was meant to be metaphorical.\n-我只是想試著去處理...\n-全是廢話\n- I'm just trying to get a handle on...\n- blah, blah, blah.\n打比方 Metaphors.\n你光說不做 所以才會遺憾 現在機會來了 You're the one crying you never took a shot.\nhere's your chance.\n什麼機會 把自己變成傻瓜 My chance to what?\nmake a fool of myself?\n永遠不遲 Never too late.\n你覺得接下來會怎麼樣 What do you think happens now?\n我回去 然後聽別人說一大堆 I go back and sit around listening to people\n關於融資理財和次級貸款 talking about mezzanine financing and subordinated debt\n假裝關心很關心我那些該死的錢 pretending that I care about dead money.\n你回到家去為你的死亡準備一個儀式 You go home to some ceremonial procession into death...\n在你想安慰大家的時候 ...with everyone standing around watching you die...\n他們卻都圍著看你離去 ...while you try to comfort them.\n那就是你想要的嗎 被憐憫和憂傷所充斥著 Is that what you want, to be smothered by pity and grief?\n我可不想 Well, not me.\n卡特 我相信在你的內心深處你也不想這樣 And in your heart, carter, I believe not you either.\n我們現在是同舟共濟 這個比喻怎麼樣 We're both in the same boat.\nhow's that for a metaphor?\n我們現在有個很好的機會 We got a real opportunity here.\n機會 Opportunity?\n即使是對你來說 這麼講也太離譜 That is real twisted, even by your standards.\n我們依然感覺不錯 對嗎 精力又回來了一點 We still feel good, right?\nenergy's coming back a little bit.\n醫生說沒事了 Asymptomatic, the doc says.\n照我的看法 我們可以躺在這兒 The way I see it, we can lay around here...\n期待在某個爛科學實驗中發生奇跡 ...hoping for a miracle in some bullshit science experiment...\n或者我們能更進一步 ...or we can put some moves on.\n跳傘 對嗎 Skydiving, huh?\n太好了 All right.\n這是什麼醫院 居然連個醫學博士都沒有 What kind of hospital is this?\nthere isn't an m.\nd.\nwithin a mile.\n弗吉尼亞 我們得談一下 Virginia, we have to talk.\n醫院怎麼說的 What did they say?\n錢柏太太 你們談 我出去一下 Uh, mrs.\nchambers, I'm gonna give you two a little quiet time.\n請原諒 Excuse me.\n情況不太好 It's not good.\n我就知道我們應該去加州大學附屬醫院 I knew we should have gone to ucla.\n那兒的外科醫生和手術水平都更好 The surgeons are better.\npost\n-op is better.\n-這沒什麼關係\n-你根本不懂\n- wouldn't have mattered.\n- you don't know that.\n我們絕不放棄 我有其他辦法 We're not giving up.\nI want another opinion.\n弗吉尼亞 virginia.\n請接腫瘤科的維特裡醫生辦公室 Yes, oncology, please.\ndr.\nveteri's office.\n弗吉尼亞 別打了 Virginia, no.\n讓我來處理 Let me handle this.\n維特裡醫生嗎 我是弗吉尼亞.\n錢柏 Dr.\nveteri?\nvirginia chambers.\n是的 沒錯...\nYes, that's right...\n我要離開一段時間 I'm going away for a while.\n你在說什麼 What are you talking about?\n我在說愛德華和我要出發了 I'm talking about edward and I are going away.\n愛德華和你 Edward and you?\n出發去哪裡 Going away where?\n我不期望你能理解 I don't expect you to understand.\n你說對了 我不理解 You're damn right I don't understand.\n我不理解你怎麼能就這樣放棄 I don't understand how you can just give up like this.\n你怎麼能就這樣...\n放棄鬥爭 How you can just quit...\nquit fighting.\n-弗吉尼亞\n-為什麼你不和孩子們那樣去說\n- virginia.\n- why don't you tell our children that?\n當他們發現是你放棄了他們時 看他們怎麼說 See what they say when they find out you've given up on them.\n放棄他們 Given up on them?\n放棄他們 Given up on them?\n我在引擎蓋下面修了45年的車 I've got 45 years greased up under the hood of a car...\n那樣他們就不會來要求什麼了 他們確實沒有 ...so that they didn't want for anything, and they didn't.\n我想我該給自己一點時間了 I think I've earned some time for myself.\n去做什麼 和一個完全陌生的人離開 To do what?\nrun off with a total stranger?\n他不是一個陌生人 He's not a stranger.\n我是你的妻子 I'm your wife.\n我是你的丈夫 他們的父親 And I'm your husband.\nand I'm their father.\n他們的祖父 還是一個該死的修車師 And I'm a grandfather.\nand I'm a damn mechanic!\n你是個傻子 And you're a fool.\n你是個認為他會給你指一條 You're a fool who thinks he's figured out\n不會得癌癥的路的傻子 a way how not to have cancer.\n對不起 I'm sorry.\n我丈夫不是用錢可以換走的 My husband is not for sale.\n她恨我 She hates me.\n你恨我嗎 Do you hate me?\n目前還沒有 Not yet.\n因此計劃就開始了 And so it began.\n我常常害怕坐飛機 I've always been afraid to go up in an airplane\n現在我就要在一個瘋子的幻想中跳下去 now I'm gonna jump out of one at the whim of a maniac!\n想撿回來嗎 Wanna get it?\n你怎麼能建議我們這樣做 How do you suggest we do that?\n等等 Wait.\n噢 Ow!\n見鬼 Damn it.\n閉嘴 Not a word.\n回到座位上去吧 凱爾 Back to the seat, kyle.\n你要原諒我 凱爾 You'll have to forgive him, kyle.\n他在擔心家裡的那個女人 he's worried about the little woman.\n這和我妻子沒有關係 This has nothing to do with my wife.\n30秒後起跳 Thirty seconds to drop.\n結局是這樣的 The sequel was like that.\n她從未支持過我做任何事 She never backed me up on anything.\n結局 The sequel?\n我的第二任妻子 The second mrs.\nedward cole.\n天啊 那個女人恨死我了 God, that woman hated me.\n可能是因為你叫她\"結局\" Maybe because you called her the sequel.\n凱爾 我從來沒那樣想過 kyle, I never looked at it that way.\n-15秒\n-不 不\n- fifteen seconds.\nno, no.\n-等一下 我不能這樣做\n-當然可以\n- wait!\nwait, I can't do this.\n- sure you can.\n不 我真的不能 No.\nI can't.\nreally.\n你害怕的不是跳下去 It's not the jump you're afraid of.\n當然不是 The hell it's not!\n你只是在擔心你的降落傘不能打開 You're just afraid your chute won't open\n然後你會像個煎蛋卷一樣 出現你自己的葬禮上 and you'll show up at your own funeral as a denver omelet.\n不 我真的非常擔心降落傘不能打開 No, I'm pretty much just worried the chute won't open.\n不 不 No, no!\n他的嗓子不錯 對嗎 Man's got some lungs, huh?\n讓我們用降落傘降落吧 Let's hit the silk!\n我們是勇士 Geronimo!\n哇塞 太漂亮了 Oh, yeah, beautiful!\n啊 啊 Aah!\naah!\n快拉 快拉繩索 Pull the thing!\npull the cord!\n感覺怎麼樣 這才是生活 How about this, huh?\nthis is living.\n我恨死你了 I hate your rotten guts.\n向天空說投降吧 Surrender to the void!\n這麼多繩索 哪條是用來拉的 Which one of these damn cords do you pull?\n別碰他 我們還沒到降落地點 Don't touch it.\nwe're not in the drop zone yet.\n我們可以借助風勢...\nwe could wind up in the...\n好吧 打開降落傘吧 Okay.\nlet's deploy.\n我有種感覺 我在降落 I got a feeling I'm falling\n我們到了紅色區域了 拉繩索 We're in the red zone.\npull the cord.\n我有種感覺 我在墜入愛河 I got a feeling I'm falling in love\n快拉繩索 Pull the damn cord!\n我曾擁有愛 I was in love once.\n湯米 我們活著就為了某天死去 Tommy, we live to die another day.\n我很走運 How lucky for me.\n說真的 湯馬斯 記住那遺囑 它離你很近了 No jokes, thomas, remember the will.\nyou're so close.\n我想問你點事情 Let me ask you something.\n你是叫湯米還是湯馬斯 Uh, is it tommy or thomas?\n實際上我叫馬修 但他覺得那名字太宗教化了 Um, it's actually matthew, but he finds that too biblical.\n我們吃點東西吧 快來 Let's eat something.\ncome on!\n他瘋了嗎 Is he insane?\n時不時地 Depends.\n你決定了嗎 So you decided?\n不 我不想要任何 No, I couldn't think of anything\n會困擾我永世的東西 I wanted to be stuck with permanently.\n還永世呢 我們就要在五分鐘內死去了 What's permanently?\nwe're gonna be dead in five minutes.\n-什麼\n-比喻說法\n- what?\n- figure of speech.\n不舉同盟旗 不信黑色耶穌 So no confederate flag, no black jesus.\n不 我將要...\nNo, I'm gonna...\n去世 當然會 Pass.\nyeah, sure.\n我向來不主張褻瀆自己的身體 Well, I never agreed to desecrate my body.\n你在擔心他們不會把你葬在猶太人的公墓 You worried they won't bury you in a jewish cemetery?\n擔心你妻子嗎 What, the wife?\n這只是個紋身 It's a tattoo.\n這與你在外搞婚外情是不同的 It's not like you're dumping her for another woman.\n我從來沒和其他女人在一起過 I never been with another woman.\n哇 Whoa.\n那個必須要寫在清單上面 That's gotta be on the list.\n不 我不這麼認為 No, no.\nI don't think so.\n66年 Sixty\n-six years?\n夥計 我們應該來次放縱 Man, oh, man.\nwe ought to have a big orgy.\n不 No.\n放縱並不等於是不忠 Orgy's not even being unfaithful.\n不 No.\n這只不過看上去更專業 It's just, like, professional.\n不 No!\n我從來沒去過那種地方 I don't even have to be there.\n你好 親愛的 Hello, darling.\n你要駕駛她還是給她買身漂亮衣服 you gonna drive it or buy it a dress?\n只是讓我們彼此熟悉一下 Just getting to know each other.\n你確信我們準備好了嗎 You sure we're cleared for this?\n當然已經準備好了 要不然怎麼樣 Of course we're cleared for it.\nwhat if we weren't?\n只是檢查一下 Just checking.\n快 加油寶貝 看看她到底如何 Come on!\ntap it, baby!\nlet's see what she's got.\n我們很棒啊 Ah, we're doing just fine.\n你聽上去好像小孩要去參加大三的舞會 You sound like some kid going to the junior prom.\n你聽上去好像誰正在等待扭屁股的勝利 You sound like someone looking for an ass\n-whupping.\n扭屁股勝利 哈 哈 Ass\n-whupping?\nho\n-ho\n-ho\n-ho.\n-你一無所有\n-哈 哈\n- you got nothing!\n- ha, ha.\n有你就足夠了 快樂的吉姆 加速 Got enough for you, sunny jim, dangling.\n開這麼快想證明你雞雞有多能幹嗎 Did you just make a penis reference?\n如果我有呢 What if I did?\n上帝 你要讓我們兩個送命嗎 Jesus!\nyou're gonna kill us both!\n如果我要呢 What if I do?\n見鬼 Goddamn it!\n你給我帶來了麻煩 You're breaking evil on me.\n麻煩 我給你表演一下麻煩 Evil?\nI'll show you evil.\n我來給你表演一下真正的飛車麻煩製造者 I'll show you evel goddamn knievel.\n嘗嘗這個 膽小鬼 Pick up on this, chicken man!\n耶 哈 Yee\n-ha!\n膽小鬼 哼 Chicken man, huh?\n你能跑 但你不能躲起來 You can run, but you cannot hide!\n接下去你想做什麼 What do you wanna do next?\n你到底有多少錢 How much money do you have anyway?\n沒人告訴過你 Didn't anyone ever tell you\n議論別人的財產 是件很不禮貌的事情嗎 that it's rude to talk about someone else's money?\n這麼有錢的人 我還是第一次認識 I never knew anyone with enough to ask.\n很像病房啊 Medicinal.\n這是難以形容的美麗 It's indescribably beautiful.\n我喜歡在地球兩極上空飛行 I love flying over the polar cap.\n在荒涼的上空 Above the desolation.\n星星 The stars\n是上帝所創造的美好事物之一 it's really one of god's good ones.\n你認為是某種生命體創造了這些 So you think a being of some sort did all this?\n你不這麼認為嗎 You don't?\n你的意思是我是否相信當我仰望天空 You mean, do I believe if I look up in the sky\n允諾這個或那個的時候 and promise this or that\n上帝就會讓我們挽回生命嗎 the biggie will make all this go away?\n不會 No.\n那你的意思地球上95%的人都錯了 Then 95 percent of the people on earth are wrong?\n生活告訴我 If life has taught me anything\n這95%的人總是犯錯 it's that 95 percent of the people are always wrong.\n這就叫信仰 It's called faith.\n事實上我羨慕那些有信仰的人 I honestly envy people who have faith.\n但我自己卻做不到 I just can't get my head around it.\n也許你正在努力 Maybe your head's in the way.\n卡特 我們聽夠了無數次類似的討論 Carter, we've all had hundreds of these discussions...\n但每個人最終都遇到了同樣的問題 ...and every one of them always hits the same wall.\n就是到底有沒有神靈的存在 Is there a sugarplum fairy or not?\n沒人能夠回答這個問題 And nobody has ever gotten over that wall.\n那你信仰什麼呢 So, what do you believe?\n我拒絕所有的信仰 I resist all beliefs.\n沒有大爆炸之後宇宙的存在 No big bang?\nrandom universe?\n我們活著 We live.\n我們死去 We die.\n生命的車輪在不停的前進 And the wheels on the bus go round and round.\n如果你錯了呢 What if you're wrong?\n我很高興自己是錯的 I'd love to be wrong.\n如果我錯了 那我就贏了 If I'm wrong, I win.\n我不確定這樣有沒有用 I'm not sure it works that way.\n你不認為你知道一些我不知道的事 Well, you're not claiming you know something I don't.\n恩 Mm\n-mm.\n我有信仰的 I just have faith.\n哈雷路亞 夥計 Hallelujah, brother...\n不談這個了 ...and pass the mustard.\n-你知道他們是怎麼收穫魚子醬的嗎\n-不知道\n-Know how they harvest caviar?\n-hit me.\n當雌鱘魚被抓住的時候 When a female sturgeon is caught...\n漁夫必須注意觀察 她死得是否很安詳 ...the fisherman has to take great care to see she dies peacefully.\n-恩\n-只要她感覺到一點點的恐懼\n- mm\n-hm.\n- lf she feels the least bit threatened...\n...她就會分泌一些酸液來破壞魚卵 ...she secretes a sour chemical that ruins the eggs.\n聽上去像我第三任妻子 Sounds like my third wife.\n她認為蛋黃醬是種出來的 Woman thought mayonnaise came from a plant.\n我對此已經習以為常了 I could get used to this.\n聽上去也像我的第三任妻子 Also sounds like my third wife.\n這30年裡 我常來這裡 Thirty years I've been coming here.\n和一個男人來這裡是第一次 First time with a guy.\n我很榮幸 Well, I'm flattered.\n艾米莉的十歲生日是最美好的 雖然...\nEmily's 10th birthday was the best, though.\n誰是艾米莉 Who's emily?\n我的小...\nMy little, uh...\n她已經不再是小姑娘了 Well, she's not so little anymore.\n你有個女兒 You have a daughter?\n-但是你說...\n-是的\n- but I thought you said...\n- yeah, well...\n那時我還不認識你呢 i didn't know you then.\n長話短說 Make a long story short,\n我們不見面的 i don't see her.\n你在幹什麼 What are you doing?\n現在是時候了 It's time.\n-不 不 把它劃掉吧\n-為什麼不去\n- no, no, no.\ncross that off.\n- why not?\n-劃掉它\n-為什麼\n- cross it off.\n- why?\n為什麼 Why?\n沒有什麼為什麼 There is no why.\n-你怎麼了\n-請原諒\n- what's the matter?\n- excuse me.\n你去哪裡 Where you going?\n真像個女人 Just like a broad.\n喂 卡特 Look, uh, carter...\n對不起 我知道 I'm sorry.\nI know\n有時我有一點傲慢和...\nsometimes I get a little overbearing and l...\n上帝啊 Jesus christ.\n-沒事的 沒關繫了\n-什麼 什麼\n- it's all right.\nit's okay.\n- what?\nwhat?\n上面的導管流出來的 沒什麼 The top on the catheter came loose, that's all.\n也許該送你去醫院 卡特 Well, maybe we should get you to a hospital, carter...\n-我剛從醫院裡出來\n-嗯?\n- I just busted out of the hospital.\n- huh?\n沒事了 看 已經不流了 我們出去吧 It's all right.\nlook, it's already stopped, see?\nlet's get out of here.\n看上去很好 嗯...\nIt looks wonderful.\nuh...\nuh...\n-也許我要去拿...\n-我們直接走吧\n- maybe I'll get the...\n- let's just go.\n-你直接上車去\n-走吧 走吧\n- you go straight to the car.\n- come on.\ncome on.\n好吧 Okay, all right.\n-湯米在哪?\n在哪?\n-在客廳 先生\n- where's...\n?\nwhere's tommy?\nin the salon, monsieur.\n噢 天哪 Oh, my.\n你到底有多少錢呢 How much money do you have?\n我可不會流血到地毯上 Well, I wouldn't bleed on the rugs.\n我要找個地方好好洗個熱水澡 I'm gonna find someplace where I can take a nice hot bath.\n洗得乾乾淨淨的 Be as good as new afterwards.\n是的...\n你...\n好吧 Yeah...\nyou...\nokay.\n好吧 我們都準備好了 好的 okay, we're all set, okay\n好了 雖然花了點功夫 但是我都重新安排好了 All right, it took some doing, but, uh, I rearranged everything.\n明天去開羅 在坦桑尼亞呆兩天 Cairo tomorrow, tanzania for two days,\n然後週六去約翰內斯堡 then johannesburg on saturday.\n而且事先聲明 不准鬥牛 不准獵虎 And, as previously directed, no bullfight, no tiger hunt.\n湯馬斯 我真的很想說你是不可替代的 Thomas, I'd really like to say you're irreplaceable\n但是那是在說謊 but I'd be lying.\n我也很想說你真的是個不錯的人 我熱愛我的工作 And I'd really like to say you're a gracious man, and I love my job\n但是我 也是在說謊 but i, too, would be lying.\n反擊得很合理 Turnabout is fair play.\n肯定是跟我學的吧 I believe you learned that from the master.\n嘿 過來看 他們遇到危險了 在浴室 Hey, look!\nthey got jeopardy!\nin the bathroom!\n電視上的 冒險者 On the tv.\njeopardy!\n冒險者 在法國 Jeopardy!\n?\nin french?\n喂 Hello?\n是寇爾先生嗎?\n我是弗吉尼亞.\n錢柏 Mr.\ncole?\nvirginia chambers.\n噢 我知道了 嗯 你好 Oh.\nyeah.\num, hi.\n我幫你叫卡特接電話 Let me get carter for you.\n實際上 我是打給你的 Well, actually, I called to speak to you.\n噢 Oh.\n他還好嗎 Is he all right?\n噢 是的 他...\n他很好 Oh, yeah.\nhe's...\nhe's fine.\n我能問下你們在哪嗎 May I ask where you are?\n法國 實際上 嗯 明天...\nFrance, actually.\nuh, tomorrow...\n把他還給我 Give him back to me.\n弗吉尼亞 我可以叫你弗吉尼亞嗎?\nVirginia.\nmay I call you virginia?\n我不確定我是否可以讓他 I'm not sure that I can make...\n別拿他當借口 I'm not asking for his sake.\n寇爾先生 Mr.\ncole\n我這一生的職業就是護士 I've been a nurse my entire adult life.\n我親眼目睹了很多人的悲劇 Had a ringside seat to more human tragedy...\n我比任何女人承受過的都要多 ...than any woman should ever have to bear.\n現在 我早有了丈夫將亡的心理準備 Now, I'm prepared for my husband to die.\n我只是沒準備 在他還活著的時候就失去他 I'm just not prepared to lose him while he's still alive.\n-霍迪.\n杜迪是誰?\n-答對了\n- who is howdy doody?\n-you got it.\n-你來選\n-電視木偶類 400元\n- you pick.\n- \"tv puppets,\" for 400.\n這兩個提線木偶 These two muppets...\n是室友 他們長期在芝麻街節目中表演 ...are roommates on the long\n-running show sesame street.\n伯特和爾尼是誰 who are bert and ernie?\n斯必羅.\n阿格紐是誰 Who is spiro agnew?\n斯必羅.\n阿格紐是誰 Who is spiro agnew?\n看來 Well...\n你看起來 嗯 ...you're looking, uh...\n很愉快 ...buoyant.\n這是我第一次躺在一個沒有角的浴缸裡 This is the first time I was ever in a tub with no corners.\n是嗎 Really?\n嗯 卡特 其實我一直在想 You know, ahem, carter, uh, I've been thinking\n剛才導管的事 還有其他的事 what with the catheter and everything\n也許我們應該把旅行暫停一陣子 maybe we should put this on hold for a while.\n拜託 我不是跟你說了嗎 別擔心 我現在很好 Come on, now, I told you, stop worrying.\nI'm fine.\n不 不 不是指那個 不是指那個 No, no, it's not that.\nit's not that.\n只是 我的意思是 或許我會讓你失望 It's just, I mean, if you're worried about letting me down\n你知道 畢竟我更可能會死 you know, it's a lot easier for me.\n你和弗吉尼亞談過了 是嗎 You talked to virginia, didn't you?\n你認為我這麼做是為什麼 Why do you think I'm doing this?\n因為我讓你這麼做的 Because I talked you into it.\n愛德華 你是很厲害 但是沒有那麼厲害 Edward, you're strong, but you're not that strong.\n知道嗎 Know.\n自從瑞秋上大學後 我的生活就出現了個缺口 After rachel left for college, there was a hole.\n我的意思是 你知道 不再有家庭作業 不再有社團 I mean, you know, no more homework, no more little league...\n背誦 學校比賽 ...recitals, school plays...\n孩子的哭聲 打鬧 摔傷膝蓋 ...kids crying, fights, skinned knees.\n40年來我第一次看著弗吉尼亞 And for the first time in 40 years, I looked at virginia\n周圍沒有絲毫吵鬧聲 沒有任何干擾 without all of the noise, without all of the distractions\n我甚至記不起來那種感覺 and I couldn't remember what it felt like\n那種不牽著她的手逛街的感覺 when I could not walk down the street without holding her hand.\n我的意思是 她還是那個我深愛的女人 I mean, she was the same woman I fell in love with,\n她沒有變 she hadn't changed.\n但是不知怎麼了 一切都變了 But somehow everything was different.\n一路走來 我們似乎失去了什麼 We'd lost something along the way.\n你明白嗎 You know?\n查理.\n麥卡錫是誰 Who is charlie mccarthy?\n獅子在今夜沉睡 \"the lion sleeps tonight\"\n看 看 看 Look, look, look!\n啊哈 Aah!\n我很高興當愛德華決定 I was very pleased when edward decided\n把單子上的第9條劃去 to eliminate item number nine\n\"獵虎\" \"hunt the big cat.\"\n當然 他依然堅持要放幾槍 Of course,he insisted on discharging rounds from the big gun\n其實一槍就夠了 One proved to be enough.\n你知道嗎 Do you know\n唯一一條被閃電擊中的狗 that the only dog ever struck by lightning\n就是在這 在埃及 was right here, in egypt?\n我真希望我能在被叛死刑前認識你 I wish I'd met you before we were dead.\n這樣看來 You know, technically\n我們可以劃去兩條了 we could cross off two items:\n親眼目睹金字塔 \"see the pyramids\"\n還有欣賞宏偉的景象 and \"witness something majestic.\"\n這裡已經很宏偉了 This is about as majestic as it gets.\n還是等看到我的山再下結論吧 Wait till you see my mountain.\n噢 好吧 Oh, yeah.\n你的山 Your mountain.\n不過 這裡確實不錯 Still, this ain't half bad.\n古埃及人對於死亡有個美好的信仰 the ancient egyptians had a beautiful belief about death.\n當他們的靈魂到達天堂的入口時 When their souls got to the entrance to heaven\n上帝會問他們兩個問題 the gods asked them two questions.\n他們的回答將決定他們能否進入天堂 Their answers determined whether they were admitted or not.\n好吧 我想知道 Okay, I'll bite.\n問了什麼問題 What were they?\n你找到生命中的快樂了麼 Have you found joy in your life?\n這個 Uh\n-huh.\n回答問題 Answer the question.\n-我?\n-是的 你\n- me?\n- yeah, you.\n回答問題 你找到生命中的快樂了麼 Answer the question, \"have I found joy in my life?\"\n找到了 Yes.\n你的生活給別人帶去快樂了麼 Has your life brought joy to others?\n恩 這種問題 我 Ah, this type of question, l...\n我不知道 嗯 I don't know, uh...\n我不知道別人是怎麼想的 嗯 I don't think about how other people gauge, uh...\n你問他們吧 Ask them.\n我在問你 I'm asking you.\n好吧 Fine.\n好吧 Fine.\n這麼跟你說吧 Let me put it to you this way.\n離婚後 接著我就不再是爸爸了 After the breakup, and the ensuing fleecing of the dad\n艾米麗和她母親一起生活 emily went to live with her mother.\n你知道 雖想保持親近 但只能假期聚聚 You know, you try to stay close, but it gets down to holidays\n偶爾打個電話 寄張生日卡什麼的 phone calls, birthday cards, you know.\n總之...\nAnyway...\n艾米麗上大學了 加入了個拯救窮人 emily goes to college, joins one of her \"save the poor people\"\n動物之類的 the animals, whatnot\n遇見了個男人 而且愛上了他 meets a guy, decides she loves him.\n那小子長得不錯 有野心 聰明 Good\n-looking kid, driven, smart.\n但是他有些問題 But there was something about him\n所以她告訴我 他們要訂婚的時 我反對了 so when she said they were engaged I told her I was against it\n但是不愧是我的女兒 於是 but being my daughter, naturally\n她還是和他結婚了 she went ahead and married him anyway.\n不用說 她沒有邀請我參加他們的婚禮 Needless to say, I wasn't invited to the wedding.\n你肯定很傷心 That must have hurt.\n你這麼認為 You think?\n他第一次打她 她來找我 First time he hit her, she came to me.\n我想打爆他的頭 I wanted to bash his brains in.\n她阻止了我 She wouldn't let me.\n說她愛他 這不是他的錯 他只是喝了點酒 Said she loved him, said it wasn't his fault, he'd had a few drinks\n是她先惹他的 she was the one picked the fight.\n他第二次打她時 她沒有來找我 Next time it happened, she didn't come to me.\n前妻告訴我的 很高興又聽到她的消息 The ex told me.\nnice to hear her voice again.\n你做了什麼 What did you do?\n盡為父所能 What any father would do.\n我把他擺平了 I took care of it.\n我找了個傢伙 他找了個專門處理這類事的人 I called a guy who called a guy who handles these kinds of things.\n我不知道他說了什麼 做了什麼 I don't know what he said, don't know what he did\n我只知道他沒有殺他 all I know is he didn't kill him\n我女兒從此再沒有他的消息了 and my daughter never heard from him again.\n她怎麼反應的 How did she react?\n你無法相信他直呼我的名字 更糟的是 Called me names you wouldn't believe, and worse\n她說對她而言我已經死了 Said I was dead to her.\n我不為我所做的事情感到驕傲 I'm not proud of everything I did\n但是我很肯定 要是能重來 我仍會那麼做 but I'm pretty sure I'd do it all again\n如果他們因為我女兒恨我 so if they don't let me into egyptian heaven\n而不讓我進入埃及的天堂 because my daughter hates me\n我猜他們確實會這麼做 well, then I guess that's just the way it goes.\n不管怎麼說 算是回答了你的兩個問題 However you answer your two questions.\n我們怎麼從墳墓下去呢 How do we get down from this tomb?\n皇后是莫臥兒帝國第5位國王 沙.\n賈漢的妻子 The empress was the wife of shah jahan, the fifth mogul emperor.\n雖然是包辦婚姻 但是他們深深愛著對方 Although it was an arranged marriage, they were deeply in love\n在他們第14個孩子出生時她死了 and remained inseparable until she died\n而他們的感情至死不渝 giving birth to their 14th child.\n介意我叫你雷嗎 Do you mind if I call you ray?\n大多數人叫雷 Main man ray.\n你有在聽我講話嗎 Are you listening to anything I'm saying?\n當然 Absolutely.\n14個孩子 我聽著呢 Fourteen kids.\nI'm with you.\n這個建築耗費了20,000個工人22年的時間來建造 It took 20,000 volunteers 22 years to complete this structure.\n這裡的一切都是賈漢親自設計的 Every square foot designed by the shah himself.\n所以那是真愛 So that's true love.\n那是真愛 That's true love.\n肯定很幸福 Must be nice.\n也許我會把這整個買下來 Don't know if I buy the whole \"20,000 volunteers\" business.\n安排葬禮讓我很苦惱 Funeral plans tend to confuse me.\n確切的說 是土葬好還是火葬好 Specifically, buried or cremated.\n土葬吧 Take buried.\n雖然我知道這無關緊要 但是我有幽閉恐懼癥 Now, I know it shouldn't matter, but I'm claustrophobic.\n如果哪天我在地下突然醒了 沒有人聽到怎麼辦 What if I wake up underground and nobody can hear me?\n他們還會生產那種內置鈴鐺的棺材嗎 Do they still make those coffins with the bells?\n嗯...\n我估計沒有了 Uh...\nI don't believe they do.\n那火葬吧 你打算怎麼處理那些骨灰呢?\nThen cremated.\nwhat do you do with the ashes?\n把他們埋了還是撒了?\n把他們放到架子上?\nDo you bury them, scatter them, put them on a shelf?\n扔進恆河順流而下找個安樂窩?\nFloat them down the ganges on a bed of flowers?\n如果我感覺到火焰怎麼辦 What if I feel the flames?\n但是我確定我會火葬 Well, I definitely want to have myself cremated.\n也許我們應該像華特.\n迪斯尼一樣把自己冷凍起來 Maybe we should go frozen like walt disney.\n不好 還是火葬吧 No.\ncremated.\n把骨灰放到鐵罐裡 埋到風景秀麗的地方 Ashes put in a can, buried some place with a view.\n鐵罐 嗯?\nA can, huh?\n是的 我不喜歡骨灰盒的說法 Yeah.\nI never liked the sound of the word urn.\n是嗎 難道你對地穴有特殊的感覺?\nReally?\ngot any special feelings about crypt?\n-\n-\n-\n-\n-====翻譯=====\n-\n-\n-\n-- 蕁香 卓為水蒙 蜀山天狼 Yancey 呂黎 校對：\n小門柴\n嘿 沒有 Heh.\nno.\n沒有 對我來說一個舊的\"巧克福納\"牌咖啡罐就足矣 No, an old chock full o'nuts can will do me just fine.\n\"巧克福納\" 天堂咖啡 Chock full o'nuts, \"the heavenly coffee.\"\n朋友 好的咖啡甚至是花錢都買不到的 Better coffee even your money can't buy, my friend.\n別拿這打賭 Don't bet on it.\n噢 好吧 Oh, right.\n魯哇克香貓 Kopi luwak.\n你為什麼不喜歡魯哇克香貓咖啡?\nWhat do you got against kopi luwak?\n跟我的品味太不搭了 Too fancy for my tastes.\n噢 是的 對我的好搭檔\"雷\"來說 是很不搭 Oh, yeah.\ntoo fancy for my main man, ray.\n-陷阱\n-該死\n- Gin.\n- goddamn it.\n牌都被你拿光了 You get all the cards.\n寶貝 這就是中國 This is china for you, baby.\n太棒了 Whoo\n-hoo!\nyeah!\n如果我們可以登上去看的話 肯定很壯觀 Be a lot more majestic if we could see it.\n看到那個老女人了嗎 See that old woman?\n真奇怪我們竟然會比她先死 Odds are we're gonna be dead before her.\n想開點 Happy thought.\n當然 如果有來生的話 Of course, she's probably got reincarnation going for her...\n她很可能會去轉世 ...however that system works.\n啊 佛教徒相信他們會不斷地轉世 Ah, the buddhists believe you keep coming back.\n此生的所為 會決定他們上天還是入地 Moving up or down a level, based on how you lived your life.\n瞧 這正是我所不明白的 See, that's where they lose me.\n我的意思是 一隻蝸牛要怎樣做才能上升一個境界呢 I mean, what would a snail have to do to move up in the lineup?\n用粘液畫出完美的軌跡 Lay down a perfect trail of slime?\n要聽壞消息還是更壞的消息 So shitty news, or really shitty news?\nA 第一個 A, the first one.\n暴風雪要來了 There's a storm up there.\n那謝謝你的提醒 湯姆 Well, thanks for the bulletin, tom,\n我們現在沒看到那該死的 we can't even see the goddamn thing.\n他們不會讓我們上山的 除非天氣變好了 They won't let us fly up until the weather clears.\n那天氣什麼時候會變好?\nwhen do they expect it to clear?\n嗯 明年春天 差不多吧 Uh, next spring, sometime.\n如果你們想知道的話 這就是個那個更壞的消息 That's the really shitty news, in case you were wondering.\n好吧 那下次吧 Well, maybe next time.\n只能這樣了 Yeah.\n明年春天 Next spring.\n我們現在幹什麼呢 So now what?\n也許你的山在告訴我們某些事情 Well, maybe your mountain's trying to tell us something.\n什麼意思 What do you mean?\n也許我們離開的夠久了 Maybe we've been gone long enough.\n離開的夠久了?\n離開誰夠久了 Gone long enough?\ngone long enough for whom?\n噢 不 我明白了 Oh.\nno, I get it.\n山不是告訴我們該回去了 The mountain isn't telling us it's time for us to go home.\n山是讓你告訴我 The mountain is telling you to tell me\n我該回去了 是嗎 it's time for me to go home, right?\n-是的\n-一派胡言\n- yeah.\n- you shit.\n你為什麼不管管你自己 Why don't you worry about your life,\n我們各擔心各的 懂嗎 and let me worry about mine, okay?\n好的 好的 你沒必要跟我發火 Okay, okay!\nyou don't have to get chippy with me.\n-下一站是哪裡\n-下一站 香港\n-What's next?\n-next, hong kong.\n一套絲綢衣服 還有黑核桃仁冰淇凌 Silk suits and black walnut ice cream.\n西藏人管他叫\"修馬魯瑪\" 雪的女神 Tibetans call it chomulungma, \"goddess mother of the snows.\"\n實際上是 宇宙的女神 \"goddess mother of the world,\" actually.\n根據傳統西藏語翻譯 In the traditional tibetan translation.\n我認錯了 I stand corrected.\n一杯加州葡萄酒 謝謝 Pinot noir, please.\n我想你肯定去過那了吧 I take it you've been there?\n呃...\n呃...\n嗯...\n實際上我剛從那過來 Uh...\nuh...\num...\nI just left, actually.\n我們打算要爬上去的 但是沒有 We tried to go up, but it wasn't...\n你已經錯過了登山的季節 You're a little late in the season.\n他們也是這樣告訴我的 So they tell me.\n-我叫安婕列卡\n-噢 我叫卡特\n- my name's angelica.\n- yeah, carter.\n很抱歉 很唐突地問一下 I'm sorry if this sounds terrible...\n爬那麼高的山 你的年紀是不是有點過呢?\nbut aren't you a little developed in years to be running up a giant mountain?\n過 你是說我的年紀大了吧 \"developed,\" now that's certainly one way of putting it.\n其實我去上去過 Well, I've been up there, you know.\n-是嗎\n-是的\n- really?\n- mm\n-hm.\n在我們必須返回之前 我爬到了26000英尺高 I made it to 26,000 feet before we had to turn back.\n-真的?\n-當然\n- really?\n- mm\n-hm.\n感覺怎麼樣?\nWhat was it like?\n好冷 大部分時候 Cold mostly\n白天 天空黑壓壓的 During the day, the sky is more black than blue.\n因為空氣太稀薄 不能反射陽光 There's not enough air to reflect the sunlight.\n但是在夜裡 你從來都沒有看到過那麼多星星 But at night, you've never seen so many stars.\n看上去觸手可及 耀眼奪目 Seems like they're just out of reach, and so bright.\n就好像是天堂地板上的一個個小洞 They're like little holes in the floor of heaven.\n-你聽到了嗎\n-聽到什麼\n- did you hear it?\n- hear what?\n我讀過一個人在山頂寫的描述 I read an account of a man who made it to the summit\n當你站在世界世界之巔 and standing there at the top of the world\n他經歷過這種異常的寧靜 he experienced this profound silence.\n就像所有的聲音都靜默了一樣 It was like all sound just fell away.\n這就是他聽到的 And that's when he heard it.\n什麼?\nWhat?\n大山之音 The sound of the mountain.\n他說他好像聽到了上帝的聲音 He said it was like he heard the voice of god.\n我以前從沒這麼做過 I've never done this before.\n這聽起來真是迂腐透頂 That sounds like such a cliche\n不過我樓上有個房間 but I have a room upstairs.\n那真是...\nWell, that's...\n我是說...\nI mean...\n我...\nI...\n我很榮幸 I appreciate that.\n但你看...\nBut you see...\n她真是個幸運的女人 She's a very lucky woman.\n我寧願我比較幸運 Well, I rather think I'm the lucky one.\n做得好 Good for you.\n湯姆?\nTom?\n等你老了以後 記住三件事 Three things to remember when you get older\n得有一間浴室 Never pass up a bathroom\n不要浪費每次勃起 別相信那些屁話 never waste a hard\n-on, and never trust a fart.\n等我老了以後我會記得的 I'll keep that in mind as I approach decrepitude.\n嘿嘿 這就對了 Heh\n-heh.\nthat's a good one there.\n我們回家吧 Let's go home.\n你說什麼 Excuse me?\n我想現在回家 I want to go home now.\n但我覺得...\n那真絲西裝怎麼辦?\nBut I thought that...\nwhat about the silk suits?\n你很聰明 愛德華 That was very clever of you, edward.\n你怎麼知道我不會進行到底?\nHow'd you know I wouldn't go through with it?\n我不知道啊 I didn't.\n我為你感到驕傲 I'm proud of you.\n沒有人在乎你是怎麼想的 Nobody cares what you think.\n美國 America.\n嗨 湯姆 這不是去克蘭肖的路 Hey, tommy, this isn't the way to crenshaw.\n10號公路發生了車禍 我們得繞道行駛 There's an accident on the 10.\nwe're taking the surface streets.\n哦 Uh\n-huh.\n為什麼我們?\nWhy are we, uh?\n哦 我的天哪 Oh, my god.\n他一直在監視著她 就怕你萬一決定...\nHe's kept tabs on her.\njust in case you decided to...\n是你出的主意 湯姆?\nThis was your idea, tom?\n不 是我的主意 是我跟他說的 No, it was my idea.\nI talked him into it.\n-是啊 是你跟他說的\n-喂\n- yeah, talked him into it.\n- hey.\n等等 愛德華 愛德華?\n等等 Wait a minute.\nedward.\nedward?\nwait a minute.\n愛德華 你在怕什麼 Edward.\nwhat are you so afraid of?\n我告訴過你 我的事不用你瞎摻和 Just because I told you my story does't invite you to be a part of it.\n哦 就像酒吧裡的那個女人?\nOh.\nlike the lady in the bar?\n-那不一樣\n-告訴我怎麼不一樣了\n- that's different.\n- tell me how.\n-就是不一樣!\n-怎麼不一樣了?\n- because it is!\n- how is it different?\n你他媽的根本不知道我是誰!\nYou have no fucking idea who I am!\n我從一無所有到家產萬貫!\nI built a billion\n-dollar business up from nothing!\n連總統都有向我徵求過意見 Presidents have asked my advice.\n我和皇室一起用餐 我甚至會被寫進書裡 I have dined with royalty and I'm supposed to make out like\n但別以為這次旅行會對我有多大影響 this trip was supposed to mean something to me?\n改變我?\nLike it was gonna change me?\n你到底是怎麼想的 卡特?\nHow did you see it playing out, carter?\n我去敲門 她出來開門 I knock on the door, she answers.\n她感到驚訝 然後轉而憤怒 She's surprised and angry\n但我卻告訴她 我有多愛她多想她 but I tell her how much I love her and miss her.\n然後說 \"哦 順便告訴你 我快要死了 And, \"oh.\nby the way, I'm gonna be dead soon.\n所以我來找你 因為我不想孤獨終老\"?\nso I'm reaching out to you because I don't wanna die alone\"?\n每個人都害怕孤獨終老 Everyone is afraid to die alone.\n我不是每個人 I'm not everyone!\n這本來應該很開心的 This was supposed to be fun.\n現在再也不會了 That's all it ever was.\n不 你別上車 打車去 No, you don't get in.\ncall a cab.\n親愛的上帝 我們由衷地感謝你今天 Dear heavenly father, we just want to thank you for this day\n讓我們一次又一次團聚 for having our family here together, once again.\n主啊 感謝你帶回了我的丈夫 And, lord, we just want to thank you for returning my husband\n他們的父親 主啊 their father, lord, to us.\n他是在哭嗎 is he crying?\n不知道啊 I don't know.\n他一直都很開心的啊 He's usually so much fun.\n-等一下\n-幹嘛?\n- wait a minute.\n- what?\n-我準備了好東西\n-哦?\n- I got something for us.\n- oh?\n我不確定是否有必要 I wasn't sure I'd need it.\n當然有必要啦 Sure.\n噢!\nOw!\nheh.\n好的 Okay.\n你知道有多久了嗎 You know how long it's been?\n你覺得我想知道嗎 Do I wanna know?\n已經很久很久啦 Well, it's been longer than that.\n知道嗎 我感覺自己像年輕人 像我們的第一次 You know, I feel like a teenager.\nlike our first time.\n如果我們還是年輕人 if we were teenagers,\n我們才不會在臥室呢 we never would've gotten out of that living room.\n我還記得第一次呢 I remember the first time.\n不會踮起腳走路哦 There was no tiptoeing around.\n你對我就像...\n這樣 You were on me like...\nthat.\n卡特?\nCarter?\n哦 你在和我玩捉迷藏對吧 好的 Oh, you playing hide\n-and\n-seek now, huh?\nokay.\n卡特!\nCarter!\n在把康復中心賣給飛利浦醫藥醫藥後 which resulted in a 15 percent increase in cash assets\n現金資產增加了15% following the sale of the recovery center to phillips medical.\n寇爾先生?\nMr.\ncole?\n寇爾先生?\nMr.\ncole?\n你讀過神曲嗎?\nYou ever read the divine comedy?\n抱歉 先生?\nExcuse me, sir?\n神曲 但丁.\n亞利基利的地獄之行 The divine comedy, dante alighieri's journey into hell.\n也許我們該休息一下 Maybe we should take a break.\n我們不需要休息 We don't need a break.\n我在請求寬恕 我是他媽的醫學奇跡 I'm in remission.\nI'm a goddamn medical miracle.\n我只是問你們 I'm simply asking\n有沒有讀過神曲 if you ever read the divine comedy.\n先生 你有電話 Sir, you have a phone call.\n湯米 現在不是時候 Tommy, not now.\n我覺得你應該聽一下 I really think you should take this.\n愛德華 Hey, edward.\n他怎樣?\nWhat's the prognosis?\n已經轉移到他的腦部了 It's metastasized to his brain.\n轉移了...\n能動手術嗎?\nMetast...\noperable?\n成功率不高 不能動手術 The odds aren't what we'd like them to be.\n成功率 Odds.\n上帝啊 Jesus.\n他現在怎麼樣?\nHow's he doing?\n沒事了 He's doing okay.\n他要我把這個給你 he wanted me to give you this.\n我本來想等到 I was supposed to wait until after\n但是後來我想 but then I thought\n她從來就不聽我話 She never listened to me before.\n為什麼改變遊戲規則啊?\nWhy change a winning formula?\n你看起來像坨屎 雷 You look like shit, ray.\n不甚感激 Thanks.\n他們怎麼款待你的?\nHow they treating you?\n還是噁心的濃豌豆湯 Pea soup still sucks.\n我會和負責人談談的 I'll have a word with the owner.\n去吧 You do that.\n能給我喝點水嗎 Can I have some water?\n你不能喝水 You can't have water,\n但我給你弄點檸檬棉簽 擦擦嘴好嗎 but I'll get you some of those lemon swabs, okay?\n好的 All right.\n你還在喝那種咖啡?\nYou still drinking that fancy coffee?\n幹嘛?\nWhat?\n怎麼了你 很奇怪嗎?\nWhat are you, obsessed?\n唸唸 Read it.\n\"魯哇克香貓咖啡 是當今世界最昂貴的咖啡 \"kopi luwak is the world's most expensive coffee.\n儘管如此 它仍被歸類為\"好到難以致信\"的行列 Though for some, it falls under the category of too good to be true\n在這種咖啡豆的故鄉蘇門答臘 In the sumatran village where the beans are grown\n生長著一種野的樹貓 lives a breed of wild tree cat.\n這些貓將咖啡豆吃下 經過它們的消化和 These cats eat the beans, digest them and then\n排泄 defecate.\n隨後 村民們會收集加工這些糞便 The villagers then collect and process the stools.\n正是咖啡豆與樹貓胃液的混合物 It is the combination of the beans and the gastric juices of the tree cat\n給予了魯哇克香貓獨一無二的口味...\nthat give kopi luwak its unique flavor...\n與芬芳\" and aroma.\"\n你這是噁心我 You're shitting me.\n還是貓提點了我 Cats beat me to it.\n-有筆嗎 給我支筆\n-什麼\n- you got a pen?\ngive me a pen.\n- what?\n什麼 What?\n給你 Here.\n還沒完呢 It's not finished.\n這可不是一人計劃 It's not a one\n-man deal.\n恐怕是的了 I'm afraid it'll have to be.\n我們準備就緒了 We're ready.\n我會在這裡等你出來的 I'll be here when you get back.\n聽起來真棒 Sounds good to me.\n親愛的愛德華 在最後的日子裡 我一直在猶豫 Dear edward, I've gone back and forth the last few days\n是不是該給你寫這封信 trying to decide whether or not I should even write this.\n最後 我意識到如果我沒有寫的話 我將抱憾終身 In the end, I realized I would regret it if I didn't\n所以我就寫了 so here goes.\n我知道我們最後一次在一起時 I know the last time we saw each other\n沒有完成那份清單 we weren't exactly hitting the sweetest notes.\n這真的不是我希望旅行結束的方式 It certainly wasn't the way I wanted the trip to end.\n我覺得責任在我 所以很抱歉 I suppose I'm responsible, and for that I'm sorry.\n但是說實話 如果有機會重來 我還是會那麼做 But, in all honesty, if I had the chance, I'd do it again.\n弗吉尼亞說我撇開了一個陌生人 回來繼續做她的老公 Virginia said I left a stranger and came back a husband.\n這都歸功於你 I owe that to you.\n對於你為我做的一切 我沒什麼好報答的 There's no way I can repay you for all you've done for me\n所以我試著 so rather than try,\n想讓你再為我做一件事 i'm just going to ask you to do something else for me.\n找到你生命中的真諦 Find the joy in your life.\n你曾經說過 你不代表所有人 You once said you're not everyone.\n是啊 Well, that's true.\n你當然不是所有人 You're certainly not everyone.\n但是每個人 就是所有人 But everyone is everyone.\n我父母常說 \"我們的生活就像溪水...\nMy parents always says, \"our lives are streams...\n殊途同歸 flowing into the same river\n朝著遠秋霧靄中天堂的方向 行進吧\" towards whatever heaven lies in the mist beyond the falls.\"\n嗨 親愛的 Hello, sweetie.\nhi.\n找到你生命中的真諦 愛德華 Find the joy in your life, edward.\n我親愛的摯友 My dear friend\n閉上雙眼 讓流水帶你歸去吧 close your eyes and let the waters take you home.\n下午好 我是愛德華.\n寇爾 Good afternoon.\nmy name is edward cole.\n我不知道大部分人在這種場合會說什麼 因為...\nI don't know what most people say at these occasions, because...\n說實話 我...\nin all honesty, i...\n我一直都很逃避 I've tried to avoid them.\n簡單地說...\nThe simplest thing is...\n我愛他 我想他 i loved him and I miss him.\n卡特和我一起遊遍了整個世界 Carter and I saw the world together.\n那真是太美妙了 Which is amazing.\n尤其是 在三個月前 when you think that only three months ago\n我們還完全是陌生的兩個人 we were complete strangers.\n我希望...\nI hope...\n這聽來不會讓你們覺得我很自私 that it doesn't sound selfish of me...\n但是他生命中的最後幾個月 but the last months of his life\n是我生命裡最快樂的日子 were the best months of mine.\n他拯救了我的生活 He saved my life.\n而且在我做之前 他就已經知道 And he knew it before I did.\n我真為這個男人感到驕傲...\nI'm deeply proud that this man...\n他覺得他值得來解讀我 found it worth his while to know me.\n最後...\nIn the end...\n我可以很肯定地說 i think it's safe to say that\n我們給別人的生活帶去了快樂 we brought some joy to one another's lives.\n所有 某一天 So, one day, when...\n當我最後的安息時 i go to some final resting place\n如果我碰巧醒轉 看到一扇生命之門時 if I happen to wake up next to a certain wall with a gate\n我希望卡特就在那兒 i hope that Carter's there\n等著我 to vouch for me\n給我看繩索的另一端 and show me the ropes on the other side.\n愛德華.\n佩瑞曼.\n寇爾在5月去世 Edward perriman cole died in may.\n那是星期天的下午 It was a sunday, in the afternoon\n天空萬里無雲 and there wasn't a cloud in the sky.\n他享年81歲 He was 81 years old.\n即便是現在 我還是無法明白生命的度量 Even now, I can't claim to understand the measure of a life.\n但我可以這樣告訴你 but I can tell you this\n我知道當他離去之時 他的雙眼是閉著的 I know that when he died, his eyes were closed\n而他的心靈卻是敞開的 and his heart was open.\n而且我很確定 他對安息地非常滿意 And I'm pretty sure he was happy with his final resting place\n因為他被埋在了山頂 because he was buried on the mountain\n而那卻是違法的 and that was against the law.\n好吧，我拆不开\n好啦，准备好了吗？\n祝你圣诞快乐\n我就是想要这种脚踏车耶\n对，喜欢吗？\n是那种吗？\n那就好，圣诞快乐\n新曲棍球杆\n尺寸对吗？\n对，很适合我\n挥杆给我看\n别打到桌上的东西\n非法制裁\n我最厉害 非法制裁\n我最厉害 非法制裁\n非法制裁\n放马过来吧\n等一下\n准备好了吗？\n好了，用力挥\n你还好吧？\n你还好吧？\n好了，你自己骑\n天哪！\n路克！\n宝贝！\n小心那棵树啊\n耍花招\n耍花招\n你多以他为傲？\n天哪，他好了不起\n那是妈妈画的吗？\n说实话，是妈妈画的吗？\n你看\n我只有一个疑问...\n这是什么？\n是抽象画啦\n我和球队签约就买新房子送你\n这栋房子有什么不好？\n准备好了吗？\n可恶！\n好了，许愿吧\n妈，你几岁？\n我几岁？\n只是好奇嘛\n你很漂亮\n看起来不过才...\n爸，快说啦\n很好\n布兰登休姆，你当选MVP了\n第一名...\n点蜡烛吧\n叫醒以后能不能巴他？\n不行\n拜托嘛\n他会杀了我们\n惊喜！\n惊喜！\n生日快乐，路克\n生日快乐，路克\n生日快乐\n14岁了\n感觉和昨天13岁没差啊\n你要现在被揍14下？\n还是...\n待会儿啦，等我清醒再说\n走开！\n我差点就赢你了\n应该遗忘旧识\n永远不再想起吗？\n应该遗忘旧识\n和两小无猜的往日时光吗？\n打扰一下\n才提到曹操，曹操就来了\n好吧\n有何贵干？\n安妮要我请你签核\n这个人在海星做了6年\n但他老婆死了，没小孩，没遗嘱\n我想把他的退休金纳入抚恤金\n让他好过点\n拜托，我不想搞得太复杂\n要照规定做\n等他死了大家才知道我们有尽责\n你说得对，省麻烦\n我懂了，抱歉\n不是，我们要尽责\n好好安顿我们的员工\n别让他死不瞑目\n你讲的〝宇宙的秩序〞是什么？\n保户花了30万美元\n依据这份新图表、新调查资料\n新社会\n谁才是好员工？\n谁怎么死的？\n几时死的？\n我们拿到资料知道他们表现多好\n你知道调查结果如何吗？\n有小孩的人比没小孩的人更长寿\n有两个小孩比一个小孩的更长寿\n抽烟不好\n超速不好\n家里有丧事不好，离婚不好\n只不过很高兴能证明\n这些陈腔滥调还是事实\n你知道吗？\n你家的小孩就很棒啊\n布兰登，你很狗腿耶！\n我是天赋异禀，没办法嘛\n天哪，妈，我好想死啊\n我知道\n我可以先失陪吗？\n不行\n我有个白痴老哥\n我有个孬种老弟\n好了，别吵啦\n你早该知道会这样\n怎样？\n一家人要相亲相爱\n我能说不吗？\n不行\n我要求豁免权，我要找律师\n好，我要提出告诉\n我回来了\n现在就要\n抱歉晚回来了，错过晚餐了吗？\n没有，菜还很多，我去热给你吃\n爸，礼拜六载我去市区\n市区？\n对，这是交换比赛\n我又要先发了\n真的吗？\n太好了\n对啊\n华教练一定爱死你了\n对，因为他很狗腿\n狗腿有好处啊，大家都要去吗？\n不行，路克要踢足球\n对，但我不是先发，你们可以...\n也许你狗腿一点就不会这么逊了\n爸，他开玩笑啦，只是耍白痴\n不准骂他白痴\n路克，你有个忠诚又疼你的哥哥\n说得对\n忠诚又疼我的狗腿\n大家能不能文明一点？\n不然我要杀人了哦\n我无所谓啦，卑鄙小人\n最好是啦，卑鄙小人\n路克...\n盘子\n兔崽子，给我过来\n放手！\n知道不回家会错过什么了吧？\n对，至少他们没互扔食物\n打得好啊，我以你为傲\n打得好啊\n谢谢...\n我喜欢你拿球杆的架势\n很帅气\n我们队上有人在考虑\n要去加拿大念大学\n加拿大？\n加拿大很远耶\n你们还有路克嘛\n还真欣慰啊\n不是啦，我开玩笑的\n不跟小孩闹着玩就老得快\n你以后就会懂\n你这场球打得漂亮\n好几场都打得好\n但职业曲棍球...\n这是你要的吗？\n或许吧，我不知道\n这可是有风险的\n这是你当职业球员的经验谈？\n还是...\n不是，是我的高风险职业经验谈\n多谢你了\n风险、责任、人生的残酷面\n不对，那是你的人生\n你充满刺激的人生\n别开你老爸的玩笑\n你只有我一个爸爸耶\n再找华教练谈谈吧\n你可以多研究加拿大的学校\n找个人来教我们打曲棍球\n哪里比学法律好\n爸！\n干嘛？\n教我们？\n我只是想打曲棍球\n开大灯\n爸，你觉得呢？\n我们再详细研究看看吧\n好吧\n请别跟你妈说\n我不会啦\n高速公路在哪里？\n〝汽油量：\n低〞\n这下可好了\n〝故障〞\n你要去哪儿？\n我想喝东西\n好吧，又要喝冰沙了\n应该有卖吧？\n不然就喝更垃圾的饮料罗\n你有钱吗？\n有\n好吧，快去快回，要回家了\n好\n老婆，是我，我只是想告诉你\n我们儿子要去加拿大打曲棍球了\n我们不想十八相送\n就直接载他去机场了\n他说会打电话回来\n但我们可能再也见不到儿子了\n但只要他快乐就好了嘛\n先这样\n我爱你\n马上就回家，再见\n小心啦\n让开，搞屁啊\n趴下！\n不然我轰烂你的脑袋！\n给我趴下！\n就是他！\n就是他！\n他要来找死了\n快啊，比利\n天哪！\n杀了他！\n就是他了\n快动手，否则不能入帮！\n快！\n你做得到的\n乔！\n快杀了他\n这才对嘛\n快闪！\n快闪！\n把枪给我！\n我们走！\n快上车！\n妈的！\n他妈的！\n干！\n操你娘的...\n布兰登！\n布兰登！\n天哪\n救命啊！\n帮我！\n快来帮我！\n救命啊！\n乔呢？\n他现在是男子汉\n可以搭地铁了\n快找人帮忙\n谁能救救我们？\n快来人啊！\n医生！\n把床推过来！\n他被割喉了，有人割他...\n打开呼吸道，帮助他呼吸\n他是我儿子\n那是我儿子\n梅姬！\n好了，带他去旁边\n布兰登，我们到医院了\n他们会替你治疗\n把你治好\n你很快就会好起来\n先生，抱歉，你不能进去\n什么？\n让医生去处理吧\n我知道，但我不能进去？\n抱歉\n好吧，他会没事的\n他是我儿子\n他叫布兰登\n5号\n是5号\n他是乔达利\n他是...\n还是个小孩\n他只是个子矮，快23岁了\n他是个禽兽\n明天应该会有...\n正式开庭前的侦讯庭\n他们要我出庭作证\n要不要一起去？\n你去\n让那个禽兽去坐牢\n警察也是这样形容他\n禽兽\n西装要不要脱掉？\n校方说要办告别式\n在下一场比赛的时候\n球队想做点什么事\n他们真窝心\n他本来也应该去比赛的\n直到我的身躯化成灰\n直到我的灵魂不复存在\n我将会爱你\n爱你\n直到太阳开始哭泣\n月亮化为腐朽\n我将会爱你\n爱你\n但我要知道\n你会不会一直留在我身边\n永远不离开？\n那么我将全心付出\n直到生命的最后\n永远不渝\n今天很顺利\n我要你出庭吓得他良心不安\n法官问你，你就把话重述一遍\n当庭指认达利\n懂吗？\n我提呈你的证词，加上你出庭\n公设辩护律师就会吓得半死\n5分钟能达成协议\n今天就送他进牢，很简单\n协议？\n等一下\n等一下，这是什么意思？\n什么协议？\n我要这家伙在牢里关一辈子\n不可能\n保证能关3到5年，顶多这样\n我指的是保证\n不是也许，不是看陪审团的心情\n好过求刑十年至无期徒刑\n结果他逃过法网\n你想这样吗？\n他杀了我儿子耶\n休姆先生，我有你这个目击者\n很好\n但只有一个目击者的案子\n你知道有多少我不想协议吗？\n开山刀莫名其妙消失了\n在那个混蛋身上只找到\n他被车撞留下的血迹\n你又挑中美国唯一\n没装监视器的加油站\n只有你的证词\n还不错，我可以吓得他同意协议\n你拿我儿子的死当游戏\n我送一个混混进牢\n一年后有人替我行天道\n他没活着出狱，我无所谓\n他改信宗教，我无所谓\n但我们硬要严惩求刑\n即便我非常乐意\n辩方也会开始问我们：\n〝你上次几时检查视力？\n〞\n〝你对市区青少年有成见吗？\n〞\n说什么他们在暴力中成长不公平\n被迫杀人加入帮派，不然就没命\n你要陪审团同情这个烂人？\n你要他获释？\n等一下，你说...\n为加入帮派而杀人\n这不是抢案吗？\n只是看起来像抢案\n这是入帮仪式\n为了加入帮派而随机杀人\n这是入帮的代价\n你意思是布兰登被杀\n是让那个混混自觉更像男子汉？\n让他加入什么帮派？\n很遗憾，这种事你不接受就拉倒\n庭上，我要提呈目击者的证词\n在案发当时作的笔录\n他是被害人的父亲\n贝林先生，正式开庭时再提出吧\n庭上，若今天提出\n辩方就会改口认罪了\n省得检方浪费时间金钱来开庭\n那就是证词？\n休姆先生？\n休姆先生？\n你作证这位达利先生在你面前\n攻击你儿子导致他死亡？\n你愿意在开庭审讯时作证？\n不是这样的，庭上\n什么？\n当时很暗\n对方人很多\n我不确定是谁\n贝林先生...\n除了休姆先生以外还有证人吗？\n没有了，庭上\n我要撤销这件案子\n达利先生，我判决你当庭获释\n你可以在法警陪同下回到拘留所\n取回你的私人物品\n有份短口供，你想看吗？\n在我这儿，明天来看看吧\n放心，只要时间足够...\n乔！\n你赢了！\n无罪开释！\n真有你的！\n赞哦！\n我们走，快走吧！\n你无罪开释，我以你为傲\n这下子谁有种？\n我知道\n上车\n好了，动手吧\n我们去那边\n跟这个妞儿好好享受吧\n好\n可以吗？\n我以你为傲\n没问题吧？\n爸？\n嗨\n你在干嘛？\n没有啊\n你在干嘛？\n别乱拿，放下\n那里...\n是一座...\n...加油站吗？\n布兰登被杀的地方？\n对，是加油站\n问这个干嘛？\n我只是...\n想知道他在哪里死的\n好吧\n那是...\n郊区的一个休息站\n你...\n你觉得他害怕吗？\n对，路克\n我想他是很害怕\n结果怎样？\n他当庭获释了\n什么？\n为什么？\n我觉得不是他\n你说是他啊，说他被捕了\n他们会继续调查吗？\n会，他们说会\n天哪\n对不起，你要我怎样？\n对不起\n我有东西忘在公司，我去拿\n现在？\n尼克！\n我会尽快回来\n天哪\n我明天再打电话给你\n天哪，我在干嘛？\n真他妈的\n干！\n天哪！\n干！\n你吓死我了\n等一下\n不可能吧\n是你？\n干！\n干！\n干！\n干！\n天哪\n天哪\n干！\n干！\n你知道妈妈很完美\n这是当然罗\n没有，我无言以对\n爸，我想跟你一样\n这句话真令人欣慰\n这件事我拖了好几个月\n谢谢你这么体贴地帮忙\n我觉得你很狗腿耶\n嗨\n嗨\n出了什么事？\n我在车道上滑倒了\n老公，天哪，看看你\n你好狼狈\n没事，只是手受伤了\n还好吧？\n很好，没事啦\n没事才怪\n我去冲个澡\n好吧，我去拿绷带，待会儿上去\n你怎样？\n还好吧？\n我很好\n大概吧\n新年快乐！\n那就好\n那就好\n我去冲个澡\n布兰登休姆，你当选MVP了\n你有什么话想说？\n可以拿走吗？\n可以吗？\n第一名...\n布兰登休姆，争气的宝贝儿子\n老公\n天哪\n天哪\n宝贝，没事了\n对不起\n天哪\n没事了\n对不起\n没事了\n没事了\n对不起\n〝邦斯修车厂〞\n比利！\n小心那些零件\n拜托，零件很值钱\n不像你一文不值\n你死哪儿去了？\n这像话吗？\n今晚就赚这些\n我可怜你和你那些低能朋友\n给你们几个门路去赚钱\n你最好多赚点钱给我\n被我知道你A钱，我就宰了你\n在哪儿风光是你的事\n你要是敢A我的钱\n我就他妈的宰了你\n我对你够有耐心了\n好啦\n你可以滚了\n真他妈的低能\n干嘛？\n干嘛？\n谁来告诉我出了什么事\n你听说了吗？\n乔出事了\n有人杀了他\n他死了\n什么？\n少骗人\n他死了啦\n嗨\n你们还好吧？\n节哀顺变啊\n我们很好\n总是要想办法调适嘛\n人生就是这样，有失必有得\n日子总得过下去\n换作是我遇到这种事，我会...\n不知道，我大概会崩溃吧\n没遇到真的不知道会怎么做\n自己也会吓一跳\n打扰了，尼克\n沃里斯警探找你\n好，请她进来\n嗨，很抱歉打扰你工作\n没关系啦\n我们怀疑杀死令郎的嫌犯\n有人杀了他\n怎么了？\n帮派仇恨吗？\n大概是吧\n真是老天有眼\n可以这么说啦\n我想你也许会想知道\n说不定凶手真的就是他\n谢谢你来告诉我\n那你忙吧\n我也不必说什么了\n但需要的话公司会支付谘询费用\n我们过得去啦\n谢了，欧文\n不客气\n他不是死得活该，不能让他白死\n他是个正港的斗士\n为乔干一杯\n他是个好孩子\n真他妈的好孩子！\n我们就这样做？\n怎么不至少尊重一下？\n难怪你们一事无成\n难怪你们都是俗辣\n因为你们宁可喝酒\n吸大麻把自己搞成智障\n智障又孬到极点\n是我不好\n我们...\n乎干啦\n杯子给我举起来！\n每个人都要！\n乔只是不适合混帮派啦\n他跟我们不一样\n对，跟你们不一样\n他跟你们不一样\n他比你们好！\n我们从小就像兄弟一样\n你却讲这种话？\n现在我配不上你了？\n乔也像我的亲兄弟啊\n他像我的亲兄弟，你也是\n好吧\n我要抓到杀他的王八蛋\n非抓到不可\n没问题\n去帮乔报仇\n是谁干的？\n不是竹联帮，不然我一定知道\n除非你嗑了药\n我没嗑药\n不是四海帮，比利\n不是万华帮，不是帮派干的\n我妹说她看到穿西装的人\n在那里晃来晃去\n这种鸟地方有多少穿西装的人？\n这就好笑了\n我们混帮派的被杀就不会上报\n但海星企业资深副总裁的儿子...\n〝白领父子遇袭，子惨遭杀害〞\n去问问你妹\n你那天晚上看到的是他吗？\n对\n你确定？\n爱咪，你好啊\n我要回家了\n没事吧？\n需要什么吗？\n没有，我很好\n完成这份风险分析报告就要...\n麻烦你出去的时候\n顺便把这个拿给欧文\n好\n谢谢你，晚安\n〝主大楼1801号〞\n〝阿斯匹灵〞\n等一下！\n抓住他！\n快！\n快点！\n抓住他...\n抓住他！\n他在哪里？\n快...\n快...\n快点！\n1801号怎么走？\n主大楼1801号，往哪边？\n从锅炉室过去，那边\n他跑哪儿去了？\n海可、阿狗、史宾，去拦他\n杀了他！\n快！\n快！\n快！\n快！\n他人呢？\n你有找莎莉谈吗？\n有\n天哪，好了\n可恶\n让开！\n快走！\n汤米，快！\n杰米，你这只蜗牛给我死过来\n你唬不了我的啦\n干！\n比利，我们快走吧\n比利，快离开这里，快点\n走！\n快点！\n妈的，天哪\n老婆，抱歉我迟到了\n什么？\n等一下，怎么会找不到他？\n他人呢？\n有没有打去问他朋友？\n天哪\n我再回你电话\n我应该知道他在哪里\n8\n- 8\n- 14，没问题\n好了\n采集指纹，比对出来再告诉我\n快去彻底搜索调查\n有必要就去街头找人\n一定有人看到什么\n现在有紧急状况\n派两组人过来\n派两组人\n请2组人员处理这件事\n路克！\n路克，你在干嘛？\n你妈担心死了，快上车\n不要\n我叫你上车\n不要，我不想上车\n快给我过来\n去你的！\n路克！\n这里不安全\n对，我明知故犯嘛\n死的是我会比较好吗？\n是这样吗？\n总比失去争气的宝贝儿子布兰登\n更容易接受吧？\n路克...\n请你上车\n走吧\n路克，马上给我上车！\n马上上车！\n天哪\n宝贝，老公\n对不起\n不准再这样吓我了\n我们要杀他？\n〝海星企业，1500号〞\n访客要先登记\n先生，访客要先登记\n快递包裹在这里签收\n不行，我要亲手交给他\n给尼克休姆\n请你按照规定登记和托收\n打电话给楼上\n可恶！\n尼克休姆！\n快点！\n尼克休姆！\n尼克休姆！\n天哪，警察来了\n办公室不赖嘛\n你想干嘛？\n那是自由的礼物\n先生，要不要请他出去？\n先生？\n让你不必再想自己会怎么死\n不必再想自己会孤单地死\n请他出去\n因为你回归造物主怀抱的时候\n就能享受喜悦与荣光\n放手！\n王八蛋，你在哪里？\n我捡到你的皮夹，你要赏我吗？\n快说你在哪里\n不对，我要说的是你在哪里\n你走投无路了\n谁死谁活由我决定\n你最好快点搞懂\n因为我不会再警告你\n我要来享受天伦之乐了\n不行，你听我说\n你敢动我家人\n我就把你大卸八块\n像我杀了你朋友那样，听见没？\n他不是我朋友\n他是我弟弟\n我现在要杀光你全家\n你刚才给他们判了死刑\n等一下\n不要！\n干！\n干！\n干！\n〝洁西卡沃里斯警探〞\n尼克，出了什么事？\n快接啊...\n尼克？\n老婆，你没事吧？\n路克放学回家了吗？\n对啊，我们很好\n那就好，在家里等警察到\n答应我\n为什么？\n怎么了？\n你只管待在家里等警察到\n我马上回去\n快接啊...\n请问沃里斯警探在吗？\n沃里斯警探！\n马上叫沃里斯警探来接！\n可恶\n重案组，我是沃里斯\n他们威胁要杀我全家\n休姆先生？\n那个下三滥...\n威胁要杀我全家\n好吧，你家人在哪儿？\n在家里\n两个都在家里\n请你救我们\n海伦？\n路克？\n尼克？\n天哪\n到底出了什么事？\n老公，为什么警察要来？\n尼克，你吓坏我了啦\n天哪\n尼克，跟我说啊\n爸，出了什么事？\n尼克！\n出了什么事？\n你待在这儿\n谢天谢地你终于来了\n令郎是打曲棍球的\n对\n警车今晚会守在门口\n休姆先生，我想你现在应该\n告诉我到底谁对谁做了什么\n你惹毛了不敢惹的人吗？\n是这样吗？\n你以为住在这里\n杀了小混混就没事吗？\n你在胡说什么？\n尼克，她在说什么啊？\n我没做错事\n那你为什么不告诉我\n比利达利怎么会这么气你？\n是你要我帮你的\n好吧\n好吧\n先熬过今晚再说，休姆先生\n还活着就该感恩了\n但你要是引发了战争\n就只能听天由命了\n你做了什么？\n我要怎么阻止？\n你有起头吗？\n听我说...\n我自己怎样都无所谓\n只要家人平安就好\n告诉我该怎么阻止他们\n首先，他们说什么都照做\n逐一去做\n放心吧，休姆先生\n我们在通缉比利那帮人了\n我居然没发现你做了什么傻事\n你怎么可以这样？\n你以为这样就能一命抵一命？\n恢复宇宙的秩序？\n我失去了我们的儿子\n你儿子\n你是个好爸爸\n这是什么也改变不了的事实\n我爱你\n永远爱你\n幸好你快要摆脱了\n是啊\n快！\n走啊！\n不！\n妈！\n滚出去！\n妈！\n过来！\n过来！\n比利，怎样？\n不！\n不！\n不！\n走吧，都死了啦\n我今晚连动的力气也没有\n你走过去看着我死\n但我知道你心里更难受\n因为爱把你击垮了\n对，承认吧\n你知道你不孤单\n医生！\n医生！\n压住他的腿！\n镇定剂！\n压住他！\n能不能关掉？\n关掉机器？\n还是你的心脏？\n我去问医生\n这件事到此为止\n天晓得你怎么还活着\n但你有自新的机会\n你以为那位警官是在保护你？\n他是不让你害死自己\n我一声令下，他就把你送进牢里\n你要报仇\n杀了几个混混，结果呢？\n战争中的每个人都自以为是对的\n最后还不是死光光\n你永远赢不了的，休姆先生\n谁也赢不了\n我害死了他们\n我害死了我的家人\n你儿子还活着\n什么？\n昏迷不醒\n他在哪里？\n在这家医院？\n人呢？\n别激动，等一下\n路克！\n路克！\n路克？\n他没事，让他去吧\n路克？\n先生，回床上躺好\n我儿子呢？\n快说我儿子在哪儿！\n他在206病房\n路克？\n路克？\n我们会照顾令郎的\n路克？\n他会清醒吗？\n现在不能确定\n以暴制暴是没完没了的\n你说什么？\n以暴制暴\n有时候真是太乱了\n世界就是这么乱\n让我和他独处一下\n拜托你\n我去外面等\n路克，你听得见吗？\n能不能动动手指？\n儿子，听得见就动动手指\n路克，我知道...\n你觉得...\n我对你的关爱不如对你哥哥\n天哪，我...\n我不知道，或许最初是这样\n你也知道的\n我和你妈...\n刚有了布兰登的时候\n他实在是...\n我觉得他很了不起\n他简直是个奇蹟\n但我一直都很了解他\n后来又有了你\n不知道，我本来以为...\n你会是布兰登的翻版\n我期望你像他一样\n结果你不是\n你们截然不同\n和他不一样，和我不一样\n你真的是很像...\n太像你妈了\n顽固又...\n太过于热情\n你妈就是这样\n她是我这辈子最重要的人\n你也是\n我只是想跟你说我爱你\n我好爱你\n我爱你哥，也爱你妈\n我爱我们全家人\n我...\n对不起\n我不能当个更好的爸爸\n对不起\n我没能保护你们\n可恶\n你快去叫医生来...\n医生！\n欧文\n帮我查一个电话号码\n对，5550128\n去查别的资料库，想办法查到\n存款也要领出来啊\n对，全部都要\n所有的钱\n连小孩的教育基金也要？\n喂？\n尼克，我是欧文\n电话号码查到了\n是酒吧，叫〝四朵玫瑰〞\n尼克，出了什么事？\n要不要我打电话求助？\n谢了，再见，欧文\n尼克？\n我要找比利达利或他朋友\n〝西班牙语〞\n我说我不会讲英文啦，你聋子哦\n懂了吗，老兄？\n〝西班牙语〞\n我把你的猪脑袋砍下来\n寄给你妈\n说不定她会认得出你\n但我很怀疑，老兄\n操你娘的！\n干！\n干！\n闪边！\n放开我...\n告诉我比利达利在哪里\n现在就说\n快说！\n你不会想找比利达利的啦\n我有事要找他\n好，放开我\n放开我！\n〝西班牙语〞\n他的同伙海可住在附近113号\n他通常晚餐时间会在嗑药\n可以了吧？\n〝西班牙语〞\n还有一件事\n我要买枪\n有事吗？\n我要买枪\n我不认识你\n我是从〝四朵玫瑰〞来的\n据我猜测...\n你应该不属于这里吧\n别让我闻到你有恐惧的味道\n敌人才要恐惧\n恐惧\n和子弹\n爆炸多的子弹\n这是最凶悍的一把枪\n.357口径\n保证一枪毙命\n这把枪不错\n这是标准的.\n45口径\n火力超强\n这是冤仇够深才要用\n这把枪的火力是天王级的\n既是大炮，也是正义之剑\n带这把枪去圣地\n就可以展开圣战了\n不管是哪一把枪\n都保证能让你把烦恼\n抛到九霄云外\n那一把呢？\n这把？\n好，我要这把和这几把\n买这些枪要花你3千大洋\n你有那么深的仇恨吗？\n这是5千美元\n那你就是我的VIP了\n再送你一些小东西\n因为我直觉你很需要\n你身上散发出一股杀气\n真的\n你是想杀我儿子比利的那家伙？\n他是你儿子？\n所以乔也是你杀的罗？\n你杀了我小儿子\n现在又要追杀比利\n对，我要杀他\n比利不是什么好东西啦\n他做的事都与我无关\n有人想要某人付出代价\n以消胸口的一股怨气\n那找比利就对了\n杀了那个混蛋\n看看对我会不会有什么差\n咱们当爸爸的私下讲\n我也是知道的啦\n去找他吧\n我忍他够久了\n你又是个付现的好顾客\n但别以为我会跟你说比利在哪里\n敢问我就杀了你\n去忙你的吧\n愿上帝与你同在\n一整袋的枪也与你同在\n〝布兰登的东西〞\n我要专心想着痛\n那个...\n搞什么？\n搞什么？\n你是谁？\n你？\n不是被我们干掉了吗？\n搞什么？\n给我滚出去！\n比利人呢？\n去你的\n那是我的牙齿耶！\n王八蛋！\n快说他在哪里\n办公室\n是什么鬼地方？\n废弃的精神病院\n我们在那里做毒品\n在冥府街的桥边\n听见没？\n冥府街！\n打给他\n幸好你爸有赞助你车子\n你就不用溜冰来这里买毒给你妹\n她光顾了我好一阵子\n我也经常去光顾她\n干他妈的\n海可，你这个没用的家伙\n我这礼拜第2次帮你收烂摊了\n比利！\n那个王八蛋没死，比利\n你在胡说什么？\n他说你死定了\n那又怎样？\n就这样啊，操你妈的\n今晚要惹什么事？\n你又想干嘛？\n好像赶着去投胎\n你知道帮你擦屁股有多累吗？\n我还得安抚那个送钱上门的阔佬\n叫他杀了你，你以为我爽吗？\n你根本就不懂\n我很关心你的事\n因为会拖累我\n你还需要什么指示吗？\n不用了，谢谢老爸\n车子我开走了\n搞什么？\n妈的！\n阿狗！\n那个王八蛋来了！\n往你那边去！\n我的腿！\n阿狗！\n快！\n去追那个王八蛋！\n去抓他！\n快啊！\n快点...\n〝欢迎来到地狱〞\n你知道你会死在这里！\n妈的\n瞧瞧你\n你跟我们没两样\n我把你变成杀人魔了\n准备好了吗？\n我今晚连动的力气也没有\n你走过去看着我死\n但我知道你心里更难受\n因为爱把你击垮了\n对，承认吧\n我不孤单\n有新年新希望吗？\n不对，你知道妈妈很完美\n这倒是\n我没什么新希望啦\n5、4、3、2、1！\n新年快乐！\n新年快乐！\n好吧，你今年有什么期望？\n你儿子\n他有在动了\n应该能撑得下去\n好吧，你先唱，起音别太高\n应该遗忘旧识\n永远不再想起吗？\n我们要共饮一杯酒\n敬两小无猜的往日时光\n比利，我们快走吧\n比利，快离开这里，快点\n走！\n快点！\n妈的，天哪\n老婆，抱歉我迟到了\n什么？\n等一下，怎么会找不到他？\n他人呢？\n有没有打去问他朋友？\n天哪\n我再回你电话\n我应该知道他在哪里\n8\n- 8\n- 14，没问题\n好了\n采集指纹，比对出来再告诉我\n快去彻底搜索调查\n有必要就去街头找人\n一定有人看到什么\n现在有紧急状况\n派两组人过来\n派两组人\n请2组人员处理这件事\n路克！\n路克，你在干嘛？\n你妈担心死了，快上车\n不要\n我叫你上车\n不要，我不想上车\n快给我过来\n去你的！\n路克！\n这里不安全\n对，我明知故犯嘛\n死的是我会比较好吗？\n是这样吗？\n总比失去争气的宝贝儿子布兰登\n更容易接受吧？\n路克...\n请你上车\n走吧\n路克，马上给我上车！\n马上上车！\n天哪\n宝贝，老公\n对不起\n不准再这样吓我了\n我们要杀他？\n〝海星企业，1500号〞\n访客要先登记\n先生，访客要先登记\n快递包裹在这里签收\n不行，我要亲手交给他\n给尼克休姆\n请你按照规定登记和托收\n打电话给楼上\n可恶！\n尼克休姆！\n快点！\n尼克休姆！\n尼克休姆！\n天哪，警察来了\n办公室不赖嘛\n你想干嘛？\n那是自由的礼物\n先生，要不要请他出去？\n先生？\n让你不必再想自己会怎么死\n不必再想自己会孤单地死\n请他出去\n因为你回归造物主怀抱的时候\n就能享受喜悦与荣光\n放手！\n王八蛋，你在哪里？\n我捡到你的皮夹，你要赏我吗？\n快说你在哪里\n不对，我要说的是你在哪里\n你走投无路了\n谁死谁活由我决定\n你最好快点搞懂\n因为我不会再警告你\n我要来享受天伦之乐了\n不行，你听我说\n你敢动我家人\n我就把你大卸八块\n像我杀了你朋友那样，听见没？\n他不是我朋友\n他是我弟弟\n我现在要杀光你全家\n你刚才给他们判了死刑\n等一下\n不要！\n干！\n干！\n干！\n〝洁西卡沃里斯警探〞\n尼克，出了什么事？\n快接啊...\n尼克？\n老婆，你没事吧？\n路克放学回家了吗？\n对啊，我们很好\n那就好，在家里等警察到\n答应我\n为什么？\n怎么了？\n你只管待在家里等警察到\n我马上回去\n快接啊...\n请问沃里斯警探在吗？\n沃里斯警探！\n马上叫沃里斯警探来接！\n可恶\n重案组，我是沃里斯\n他们威胁要杀我全家\n休姆先生？\n那个下三滥...\n威胁要杀我全家\n好吧，你家人在哪儿？\n在家里\n两个都在家里\n请你救我们\n海伦？\n路克？\n尼克？\n天哪\n到底出了什么事？\n老公，为什么警察要来？\n尼克，你吓坏我了啦\n天哪\n尼克，跟我说啊\n爸，出了什么事？\n尼克！\n出了什么事？\n你待在这儿\n谢天谢地你终于来了\n令郎是打曲棍球的\n对\n警车今晚会守在门口\n休姆先生，我想你现在应该\n告诉我到底谁对谁做了什么\n你惹毛了不敢惹的人吗？\n是这样吗？\n你以为住在这里\n杀了小混混就没事吗？\n你在胡说什么？\n尼克，她在说什么啊？\n我没做错事\n那你为什么不告诉我\n比利达利怎么会这么气你？\n是你要我帮你的\n好吧\n好吧\n先熬过今晚再说，休姆先生\n还活着就该感恩了\n但你要是引发了战争\n就只能听天由命了\n你做了什么？\n我要怎么阻止？\n你有起头吗？\n听我说...\n我自己怎样都无所谓\n只要家人平安就好\n告诉我该怎么阻止他们\n首先，他们说什么都照做\n逐一去做\n放心吧，休姆先生\n我们在通缉比利那帮人了\n我居然没发现你做了什么傻事\n你怎么可以这样？\n你以为这样就能一命抵一命？\n恢复宇宙的秩序？\n我失去了我们的儿子\n你儿子\n你是个好爸爸\n这是什么也改变不了的事实\n我爱你\n永远爱你\n幸好你快要摆脱了\n是啊\n快！\n走啊！\n不！\n妈！\n滚出去！\n妈！\n过来！\n过来！\n比利，怎样？\n不！\n不！\n不！\n走吧，都死了啦\n我今晚连动的力气也没有\n你走过去看着我死\n但我知道你心里更难受\n因为爱把你击垮了\n对，承认吧\n你知道你不孤单\n医生！\n医生！\n压住他的腿！\n镇定剂！\n压住他！\n能不能关掉？\n关掉机器？\n还是你的心脏？\n我去问医生\n这件事到此为止\n天晓得你怎么还活着\n但你有自新的机会\n你以为那位警官是在保护你？\n他是不让你害死自己\n我一声令下，他就把你送进牢里\n你要报仇\n杀了几个混混，结果呢？\n战争中的每个人都自以为是对的\n最后还不是死光光\n你永远赢不了的，休姆先生\n谁也赢不了\n我害死了他们\n我害死了我的家人\n你儿子还活着\n什么？\n昏迷不醒\n他在哪里？\n在这家医院？\n人呢？\n别激动，等一下\n路克！\n路克！\n路克？\n他没事，让他去吧\n路克？\n先生，回床上躺好\n我儿子呢？\n快说我儿子在哪儿！\n他在206病房\n路克？\n路克？\n我们会照顾令郎的\n路克？\n他会清醒吗？\n现在不能确定\n以暴制暴是没完没了的\n你说什么？\n以暴制暴\n有时候真是太乱了\n世界就是这么乱\n让我和他独处一下\n拜托你\n我去外面等\n路克，你听得见吗？\n能不能动动手指？\n儿子，听得见就动动手指\n路克，我知道...\n你觉得...\n我对你的关爱不如对你哥哥\n天哪，我...\n我不知道，或许最初是这样\n你也知道的\n我和你妈...\n刚有了布兰登的时候\n他实在是...\n我觉得他很了不起\n他简直是个奇蹟\n但我一直都很了解他\n后来又有了你\n不知道，我本来以为...\n你会是布兰登的翻版\n我期望你像他一样\n结果你不是\n你们截然不同\n和他不一样，和我不一样\n你真的是很像...\n太像你妈了\n顽固又...\n太过于热情\n你妈就是这样\n她是我这辈子最重要的人\n你也是\n我只是想跟你说我爱你\n我好爱你\n我爱你哥，也爱你妈\n我爱我们全家人\n我...\n对不起\n我不能当个更好的爸爸\n对不起\n我没能保护你们\n可恶\n你快去叫医生来...\n医生！\n欧文\n帮我查一个电话号码\n对，5550128\n去查别的资料库，想办法查到\n存款也要领出来啊\n对，全部都要\n所有的钱\n连小孩的教育基金也要？\n喂？\n尼克，我是欧文\n电话号码查到了\n是酒吧，叫〝四朵玫瑰〞\n尼克，出了什么事？\n要不要我打电话求助？\n谢了，再见，欧文\n尼克？\n我要找比利达利或他朋友\n〝西班牙语〞\n我说我不会讲英文啦，你聋子哦\n懂了吗，老兄？\n〝西班牙语〞\n我把你的猪脑袋砍下来\n寄给你妈\n说不定她会认得出你\n但我很怀疑，老兄\n操你娘的！\n干！\n干！\n闪边！\n放开我...\n告诉我比利达利在哪里\n现在就说\n快说！\n你不会想找比利达利的啦\n我有事要找他\n好，放开我\n放开我！\n〝西班牙语〞\n他的同伙海可住在附近113号\n他通常晚餐时间会在嗑药\n可以了吧？\n〝西班牙语〞\n还有一件事\n我要买枪\n有事吗？\n我要买枪\n我不认识你\n我是从〝四朵玫瑰〞来的\n据我猜测...\n你应该不属于这里吧\n别让我闻到你有恐惧的味道\n敌人才要恐惧\n恐惧\n和子弹\n爆炸多的子弹\n这是最凶悍的一把枪\n.357口径\n保证一枪毙命\n这把枪不错\n这是标准的.\n45口径\n火力超强\n这是冤仇够深才要用\n这把枪的火力是天王级的\n既是大炮，也是正义之剑\n带这把枪去圣地\n就可以展开圣战了\n不管是哪一把枪\n都保证能让你把烦恼\n抛到九霄云外\n那一把呢？\n这把？\n好，我要这把和这几把\n买这些枪要花你3千大洋\n你有那么深的仇恨吗？\n这是5千美元\n那你就是我的VIP了\n再送你一些小东西\n因为我直觉你很需要\n你身上散发出一股杀气\n真的\n你是想杀我儿子比利的那家伙？\n他是你儿子？\n所以乔也是你杀的罗？\n你杀了我小儿子\n现在又要追杀比利\n对，我要杀他\n比利不是什么好东西啦\n他做的事都与我无关\n有人想要某人付出代价\n以消胸口的一股怨气\n那找比利就对了\n杀了那个混蛋\n看看对我会不会有什么差\n咱们当爸爸的私下讲\n我也是知道的啦\n去找他吧\n我忍他够久了\n你又是个付现的好顾客\n但别以为我会跟你说比利在哪里\n敢问我就杀了你\n去忙你的吧\n愿上帝与你同在\n一整袋的枪也与你同在\n〝布兰登的东西〞\n我要专心想着痛\n那个...\n搞什么？\n搞什么？\n你是谁？\n你？\n不是被我们干掉了吗？\n搞什么？\n给我滚出去！\n比利人呢？\n去你的\n那是我的牙齿耶！\n王八蛋！\n快说他在哪里\n办公室\n是什么鬼地方？\n废弃的精神病院\n我们在那里做毒品\n在冥府街的桥边\n听见没？\n冥府街！\n打给他\n幸好你爸有赞助你车子\n你就不用溜冰来这里买毒给你妹\n她光顾了我好一阵子\n我也经常去光顾她\n干他妈的\n海可，你这个没用的家伙\n我这礼拜第2次帮你收烂摊了\n比利！\n那个王八蛋没死，比利\n你在胡说什么？\n他说你死定了\n那又怎样？\n就这样啊，操你妈的\n今晚要惹什么事？\n你又想干嘛？\n好像赶着去投胎\n你知道帮你擦屁股有多累吗？\n我还得安抚那个送钱上门的阔佬\n叫他杀了你，你以为我爽吗？\n你根本就不懂\n我很关心你的事\n因为会拖累我\n你还需要什么指示吗？\n不用了，谢谢老爸\n车子我开走了\n搞什么？\n妈的！\n阿狗！\n那个王八蛋来了！\n往你那边去！\n我的腿！\n阿狗！\n快！\n去追那个王八蛋！\n去抓他！\n快啊！\n快点...\n〝欢迎来到地狱〞\n你知道你会死在这里！\n妈的\n瞧瞧你\n你跟我们没两样\n我把你变成杀人魔了\n准备好了吗？\n我今晚连动的力气也没有\n你走过去看着我死\n但我知道你心里更难受\n因为爱把你击垮了\n对，承认吧\n我不孤单\n有新年新希望吗？\n不对，你知道妈妈很完美\n这倒是\n我没什么新希望啦\n5、4、3、2、1！\n新年快乐！\n新年快乐！\n好吧，你今年有什么期望？\n你儿子\n他有在动了\n应该能撑得下去\n好吧，你先唱，起音别太高\n应该遗忘旧识\n永远不再想起吗？\n我们要共饮一杯酒\n敬两小无猜的往日时光\n好吧，我拆不开\n好啦，准备好了吗？\n- 祝你圣诞快乐\n- 我就是想要\n这种脚踏车\n对，喜欢吗？\n是那种吗？\n那就好，圣诞快乐\n新冰球杆\n尺寸对吗\n对，很适合我\n挥杆给我看\n别打到桌上的东西\n我最厉害\n我最厉害\n片名：\n《死亡裁决》\n放马过来吧\n等一下\n准备好了吗？\n好了，用力挥\n你还好吧\n你还好吧\n好了，你自己骑\n天哪！\n路克\n宝贝\n小心那棵树啊\n玩个花样\n玩个花样\n你以他为荣？\n对啊，他好了不起\n那是妈妈画的吗\n说实话，是妈妈画的吗？\n你看\n我有个疑问...\n这是什么？\n是抽象画\n我和球队签约就买新房子送你\n这栋房子有什么不好？\n准备好了？\n可恶\n好了，许愿吧\n妈，你几岁\n我几岁？\n只是好奇\n你很漂亮\n看起来不过才...\n爸，快说啦\n布兰登・休姆，你当选MVP了\n争气的宝贝儿子\n第一名...\n点蜡烛吧\n可以用手掴醒他吗？\n不行\n好吗\n他会杀了我们\n惊喜！\n惊喜！\n生日快乐，路克\n生日快乐，路克 生日快乐\n14岁了\n感觉和昨天13岁没分别\n你要现在被揍14下？\n还是...\n待会儿啦，等我睡醒再说\n走开\n我差点就赢你了\n怎能忘记旧日朋友\n心中能不怀想？\n旧日朋友岂能相忘\n友谊地久天长\n打扰一下\n你觉得怎么也找不到规律的时候 规律就藏在你眼皮底下\n好吧\n有何贵干？\n安妮要我请你签核\n这个人在海星做了6年\n但他老婆死了，没小孩，没遗嘱\n我想把他的退休金纳入抚恤金\n直截了当\n拜托，我不想搞得太复杂\n要照规定做\n等他死了大家就知道我们尽到了责任\n你说得对，省麻烦\n我懂了，抱歉\n不是，我们要尽责\n好好安顿我们的员工\n别让他死不暝目\n你讲的\"宇宙的规律\"是什么？\n我们的保险公司花了30万美元\n建立这个新的数学模型、新调查资料\n新社会\n怎样的人才是理想员工？\n谁怎么死的？\n几时死的？\n他们把资料送来了，让我们看看成果\n你知道报告内容吗？\n有小孩的人比没小孩的人更长寿\n有两个小孩比一个小孩的更长寿\n抽烟不好\n超速不好\n家有丧事不好，离婚不好\n还好的是\n这些陈腔滥调始终是事实\n布兰登，你很滑头啊\n我是天赋异禀 没办法嘛\n- 天哪，妈，我好想死啊\n- 我知道\n- 我可以先失陪吗\n- 不行\n我有个白痴阿哥\n我有个没屌的弟弟\n好了，别吵啦\n- 你该懂点事\n- 怎么？\n家人要相亲相爱\n- 我能说不吗？\n- 不行\n我要求豁免权，我要找律师\n- 好，我要提出起诉，现在就要\n- 我回来了\n抱歉回来晚了，错过晚餐了吗？\n没有，菜还很多，我去弄热给你吃\n爸，礼拜六载我去市区\n市区？\n对，这是交换比赛\n我是先发球员\n真的吗？\n- 太好了\n- 对啊\n华教练一定爱死你了\n对，因为他是狗\n也不坏啊，大家都要去吗\n不行，路克要踢足球\n对，但我不是先发\n也许你该多亲几个人的菊花...\n或者口交时候别太用力\n- 我听说这样管用\n- 喂，喂，喂！\n爸，我开玩笑的，他简直是白痴\n不准骂他白痴\n路克，你有个忠诚又疼你的哥哥\n说得对\n忠诚又疼我的狗\n大家能不能文明一点？\n不然我要杀人了\n我无所谓啦，卑鄙小人\n最好啦，卑鄙小人\n路克...\n碟子\n衰人，给我过来\n放手\n知道不回家会错过什么了吧？\n对，至少他们没互扔食物\n打得好啊，我以你为傲\n打得好啊\n谢谢...\n我喜欢你拿球杆的架势\n很帅气\n我们队上有人在考虑\n要去加拿大念大学\n加拿大？\n加拿大很远呢\n你们还有路克嘛\n还真欣慰啊\n不是啦，我开玩笑的\n不跟小孩闹著玩就老得快\n你以後就会懂\n你这场球打得漂亮\n好几场都打得好\n但职业冰球...\n这是你要的吗？\n或许吧，我不知道\n这可是有风险的\n这是你当职业球员的经验谈？\n- 还是...\n- 不是，是我的\n高风险职业经验谈，多谢你了\n风险、责任——人生的残酷面\n不对，那是你的人生\n你充满刺激的人生\n别开你老爸的玩笑\n你只有我一个爸爸\n再找华教练谈谈吧\n你可以多研究加拿大的学校\n找个人来教我们 打冰球和上法律学校哪个好\n- 爸\n- 干嘛？\n教我们？\n我只是想打冰球\n开大灯\n爸，你觉得呢？\n我们再详细研究...\n看看吧 好吧\n请别跟你妈说\n我不会的\n高速公路在哪里？\n\"汽油量：\n低\"\n这下可好了\n\"故障\"\n你要去哪儿？\n我想喝东西\n好吧，又要喝冰沙了\n应该有卖吧？\n不然就喝更垃圾的饮料啰\n- 你有钱吗？\n- 有\n好吧，快去快回，要回家了\n好\n老婆，是我，我只是想告诉你\n我们儿子要去加拿大打冰球了\n我们不想十八相送\n就直接载他去机场了\n他说会打电话回来\n但我们可能再也见不到儿子了\n但只要他快乐就好了\n先这样\n我爱你\n马上就回家，再见\n小心啦\n让开，死鬼\n趴下！\n不然我打爆你个头！\n给我趴下！\n就是他！\n就是他！\n他想拿枪，比利！\n杀了他！\n就是他了\n快动手，否则不能入帮！\n快！\n你做得到的\n祖！\n快杀了他\n这才对嘛\n快闪！\n快闪！\n把枪给我！\n我们走！\n- 那祖怎么办？\n- 快上车！\n妈的！\n他妈的！\n干！\n操你娘的...\n布兰登\n布兰登\n天哪\n救命啊！\n帮我！\n快来帮我！\n救命啊！\n祖呢？\n他现在是男子汉了\n可以搭地铁回去\n快找人帮忙\n谁能救救我们？\n快来人啊！\n医生！\n把床推过来！\n他被割喉了，有人割他...\n打开呼吸道，帮助他呼吸\n他是我儿子\n- 那是我儿子\n- 梅姬！\n- 好了，带他去旁边\n- 布兰登\n我们到医院了\n他们会替你治疗\n把你治好\n先生，抱歉\n- 你不能进去\n- 什么？\n- 让医生去处理吧\n- 我知道\n但我不能进去？\n抱歉\n好吧，他会没事的\n他是我儿子\n他叫布兰登\n5号\n是5号\n他是祖·达利\n他是...\n还是个孩子\n他只是个子矮，快23岁了\n他是个禽兽\n明天应该会有...\n正式开庭前的侦讯庭\n他们要我出庭作证\n要不要一起去？\n你去\n让那个禽兽去坐牢\n警察也是这样形容他\n禽兽\n西装要不要脱掉？\n校方说要办告别会\n在下一场比赛的时候\n球队想做点事\n他们真有心\n他本来也应该参赛的\n直到我的身躯化成灰\n直到我的灵魂不复存在\n我将会爱你\n爱你\n直到太阳开始哭泣\n月亮化为腐朽\n我将会爱你\n爱你\n但我要知道\n你会不会一直留在我身边\n永远不离开？\n那么我将全心付出\n直到生命的最后\n永远不渝\n今天的事很好办\n我要你出庭吓得他良心不安\n法官问你 你就把跟我们说过的话重答一遍\n当庭指证达利\n懂吗？\n我提呈你的证词，加上你出庭\n官方辩护律师就会吓得半死\n5分钟能达成协议\n今天就送他进牢，很简单\n协议？\n等一下\n等一下，这是什么意思？\n什么协议？\n我要这家伙坐一辈子的牢\n不可能\n保证能关3到5年，顶多这样\n我指的是保证\n不是也许，不是看陪审团的心情\n好过不切实际地求刑十年或无期徒刑\n结果他逃过法网\n你想这样吗？\n但他杀了我儿子\n休姆先生，我有你这个目击者\n很好\n但只有一个目击者的案子\n你知道有多少我连协议都懒得试吗？\n凶器莫名其妙消失了\n在那个混蛋身上只找到\n他被车撞留下的血迹\n你又挑中美国唯一\n没装监视器的加油站\n只有你的证词\n还不错，我可以吓得他同意协议\n你拿我儿子的死当游戏\n我送一个混混进牢\n一年后有人替我行天道\n他没活着出狱，我无所谓\n他改信宗教，我无所谓\n但我们硬要严惩求刑\n即便我非常乐意\n辩方也会开始问我们：\n\"你上次几时检查视力？\"\n\"你对市区青少年有成见吗？\"\n说什么他们在暴力中成长不公平\n被迫杀人加入帮派，不然就没命\n你要陪审团同情这个烂人\n你要他获释？\n等一下，你说...\n为加入帮派而杀人\n这不是抢劫案吗？\n只是看起来像抢劫案\n这是入帮仪式\n为了加入帮派而随机杀人\n这是入帮的代价\n你意思是布兰登被杀\n是让那个混混自觉更像男子汉？\n让他加入什么帮派？\n很遗憾，这种事你不接受就拉倒\n法官大人，我要提呈目击者的证词\n在案发当时作的笔录\n他是被害人的父亲\n贝林先生，正式开庭时再提出吧\n法官大人，若今天提出\n辩方就会改口认罪了\n省得检方浪费时间金钱来开庭\n那就是证词？\n休姆先生？\n休姆先生？\n你作证这位达利先生在你面前\n攻击你儿子导致他死亡？\n你愿意在开庭审讯时作证？\n不是这样的，法官大人\n什么？\n当时很喑\n对方人很多\n我不确定是谁\n贝林先生...\n除了休姆先生以外还有证人吗？\n没有了，法官大人\n我要撤销这件案子\n达利先生，我判决你当庭释放\n你可以在法警陪同下回到看守所\n取回你的私人物品\n祖！\n你赢了！\n无罪释放！\n真有你的\n劲哦！\n我们走，快走吧！\n你无罪释放，我以你为荣\n这下子谁有种？\n我知道\n上车\n跟这个妞儿好好享受吧\n- 好\n- 可以吗？\n我以你为荣\n没问题吧？\n爸？\n爸？\n你在干嘛？\n没有啊\n你在干嘛？\n别乱拿，放下\n那里...\n是一座...\n...加油站吗？\n布兰登被杀的地方？\n对，是加油站\n问这个干嘛？\n我只是...\n想知道他在哪里死的\n好吧\n那是...\n郊区的一个休息站\n你...\n你觉得他害怕吗？\n对，路克\n我想他是很害怕\n结果怎样？\n他当庭获释了\n什么？\n为什么？\n我觉得不是他\n你说是他啊，说他被捕了\n他们会继续调查吗？\n会，他们说会\n天哪\n对不起，你要我怎样？\n对不起\n我有东西遗忘在公司，我回去拿\n现在？\n- 尼克！\n- 我会尽快回来\n天哪，我在干嘛？\n真他妈的\n干！\n天哪！\n干！\n你吓死我了\n等一下\n不可能吧\n是你？\n干！\n干！\n干！\n干！\n天哪\n天哪\n天哪\n你知道妈妈很完美\n这是当然罗\n没有，我无言以对\n爸，我想跟你一样\n这句话真令人欣慰\n这件事我拖了好几个月\n谢谢你这么体贴地帮忙\n嗨\n嗨\n出了什么事？\n我在车道上滑倒了\n老公，天哪，看看你\n你好狼狈\n没事，只是手受伤了\n还好吧\n很好，没事啦\n没事才怪\n我去冲个澡\n好吧，我去拿绷带，待会儿上去\n你怎样？\n还好吧？\n我很好\n大概是吧\n那就好\n那就好\n我去冲个澡\n布兰登·休姆，你当选MVP了\n你有什么话想说？\n可以拿走吗？\n可以吗？\n第一名...\n布兰登·休姆，争气的宝贝儿子\n老公\n天哪\n- 天哪\n- 宝贝，没事了\n对不起\n天哪 没事了\n对不起 没事了\n对不起\n\"邦斯修车厂\"\n比利！\n小心那些零件\n喂，零件很值钱的\n不像你一文不值\n你死哪儿去了\n这像话吗？\n今晚就赚到这些\n我可怜你和你那些低能朋友\n给你们几个门路去赚钱\n你最好多赚点钱给我\n被我知道你偷钱，我就宰了你\n在哪儿风光是你的事\n你要是敢偷我的钱\n我就他妈的宰了你\n我对你够有耐心了\n好啦\n你可以滚了\n真他妈的低能\n干嘛？\n干嘛？\n谁可以告诉我出了什么事\n你听说了吗？\n祖出事了\n有人捅了他\n他死了\n什么？\n少骗人\n他死了啦\n嗨\n你们还好吧？\n节哀顺变啊\n我们很好\n总是要想办法适应\n人生就是这样，有失又有得\n日子总得过下去\n换作是我遇到这种事，我会...\n不知道，我大概会崩溃吧\n没遇到真的不知道会怎么做\n自己也会吓一跳\n打扰了，尼克\n沃里斯警探找你\n好，请她进来\n嗨，很抱歉打扰你工作\n没关系\n涉嫌杀死令郎的疑犯\n被人杀了\n怎么了？\n帮派仇杀吗\n大概是吧\n真是老天有眼\n可以这么说啦\n我想你也许会想知道\n说不定凶手真的就是他\n谢谢你来告诉我\n不打扰你了\n我也不必说什么了\n但需要的话公司会承担咨询费用\n我们应付得来\n谢了，奥云\n不客气\n他不是死得活该，不能让他白死\n他是个真斗士\n为祖干一杯\n他是个好孩子\n真他妈的好孩子\n我们就这样做\n怎么不给点尊重？\n难怪你们一事无成\n难怪你们都是贱精\n因为你们宁可喝酒\n吸大麻把自己搞成弱智\n智障又孬到极点\n是我不好\n我们...\n干杯吧\n杯子给我举起来！\n每个人都要！\n祖只是不适合混帮派啦\n他跟我们不一样\n对，跟你们不一样\n他跟你们不一样\n他比你们好！\n我们从小就像兄弟一样\n你却讲这种话？\n现在我配不上你了\n祖也像我的亲兄弟啊\n他像我的亲兄弟，你也是\n好吧\n我要抓到杀他的王八蛋\n非抓到不可\n没问题\n去帮祖报仇\n是谁干的？\n不是14K，不然我一定知道\n除非你啪了药\n我没啪药\n不是新X安，比利\n不是和胜X，不是帮派干的\n我妹说她看到穿西装的人\n在那里流连\n这种鸟地方有多少穿西装的人？\n这就好笑了\n我们帮派的被杀就不会上头条\n但海星企业资深副总裁的儿子...\n\"白领父子遇袭，子惨遭杀害\"\n去问问你妹\n爱美，你好啊\n我要回家了\n没事吧？\n需要什么吗？\n没有，我很好\n完成这份风险分析报告就要...\n麻烦你出去的时候\n顺便把这个拿给奥云\n- 好\n- 谢谢你，晚安\n\"主大楼1801号\"\n\"阿司匹林\"\n等一下！\n抓住他！\n快！\n快点！\n抓住他...\n他在哪里？\n快...\n快...\n快...\n快...\n快点...\n1801号怎么走？\n主大楼1801号，往哪边？\n从锅炉室过去，那边\n他跑哪儿去了？\n海可、阿狗、史宾，去拦截他\n杀了他！\n快！\n快！\n快！\n快！\n他人呢？\n天哪，好了\n可恶\n你有找莎莉谈吗？\n有\n让开！\n快走\n汤美，快！\n杰米，你这只蜗牛给我死过来\n你唬不了我的啦\n干！\n比利，我们快走吧\n比利，快离开这里，快点\n走！\n快点！\n妈的，天哪\n老婆，抱歉我迟到了\n什么？\n等一下，怎么会找不到他？\n他人呢？\n有没有打去问他朋友？\n天哪\n我再复你电话\n我应该知道他在哪里\n好了\n收集指纹，比对出来再告诉我\n快去彻底搜索调查\n有必要就去街头找人\n一定有人看到什么\n路克！\n路克，你在干嘛？\n你妈担心死了，快上车\n不要\n我叫你上车\n不要，我不想上车\n快给我过来\n去你的！\n路克！\n这里不安全\n对，难道我会不知道？\n死的是我会比较好吧？\n是这样吗？\n总比失去争气的宝贝儿子布兰登\n更容易接受吧？\n路克...\n请你上车\n走吧\n路克，马上给我上车！\n马上上车！\n天哪\n宝贝\n对不起\n不准再这样吓我了\n我们要杀他？\n访客要先登记\n先生，访客要先登记\n快递包裹可放这里签收\n不行，我要亲手交给他\n给尼克·休姆\n请你按照规定登记，把包裹放下\n打电话给楼上\n可恶！\n尼克·休姆！\n快点！\n尼克·休姆！\n尼克·休姆！\n办公室不错\n你想干嘛？\n那是让你解脱的礼物\n先生，要不要请他出去？\n先生？\n让你不必再想自己会怎么死\n不必再担心自己会孤单地死\n请他出去\n因为你回归造物主怀抱的时候\n就能享受喜悦与荣光\n放手！\n王八蛋，你在哪里？\n我捡到你的钱包，你要赏我吗？\n快说你在哪里\n不对，我要说的是你在哪里\n你走投无路了\n谁死谁活由我决定\n你最好快点搞清楚\n因为我不会再警告你\n我要来享受天伦之乐了\n不行，你听我说\n你敢动我家人\n我就把你开膛破肚\n像我杀了你朋友那样，听见没有？\n他不是我朋友\n他是我弟弟\n我现在要杀光你全家\n你刚才给他们判了死刑\n等一下\n不要！\n操！\n操！\n操\n\"洁西卡沃里斯警探\"\n- 尼克，出了什么事？\n- 快接啊...\n- 尼克？\n- 老婆，你没事吧？\n路克也没事吧？\n- 对啊，我们很好\n- 那就好，呆在那里，等警察到\n- 叫路克不要回家，好吗？\n- 为什么？\n怎么了？\n你只管待在那里等人来\n- 答应我\n- 谁要来？\n快接啊...\n请问沃里斯警探在吗？\n沃里斯警探！\n马上叫沃里斯警探来接\n可恶\n重案组，我是沃里斯\n他们威胁要杀我全家\n休姆先生？\n那个流氓...\n威胁要杀我全家\n好吧，你家人在哪儿？\n他们在学校里！\n圣巴索洛缪中学\n请你救我们\n海伦？\n路克？\n尼克？\n天哪\n到底出了什么事？\n老公，为什么警察要守在门口？\n尼克，你吓坏我了啦\n天哪\n尼克，跟我说啊\n爸，出了什么事？\n尼克！\n出了什么事？\n你待在这儿\n谢天谢地你终于来了\n令郎是打冰球的\n对\n警车今晚会守在门口\n休姆先生，我想你现在应该\n告诉我到底谁对谁做了什么\n你竟敢太岁头上动土？\n是这样吗？\n你以为住在这里\n杀了小混混就没事吗？\n你在胡说什么？\n尼克，她在说什么啊？\n我没做错事\n那你为什么不告诉我\n你怎么会惹到比利·达利的？\n是你要我帮你的\n好吧\n好吧\n先熬过今晚再说，休姆先生\n还活着就该感恩了\n但你要是引爆战争\n就只能听天由命了\n你做了什么？\n我要怎么阻止？\n是你引发的吗？\n听我说...\n我自己怎样都无所谓\n只要家人平安就好\n告诉我该怎么阻止他们\n首先，他们说什么你都照做\n逐一去做\n放心吧，休姆先生\n我们在通缉比利那帮人了\n我居然没发现你做了什么傻事\n你怎么可以这样？\n你以为这样就能一命抵一命？\n恢复宇宙的秩序？\n我失去了儿子\n你儿子\n你是个好爸爸\n这是什么也改变不了的事实\n而且，我爱你\n永远爱你\n幸好你快要摆脱了\n是啊\n不！\n妈！\n滚出去！\n妈！\n过来！\n过来！\n比利，怎样？\n不！\n不！\n不！\n我今晚连动的力气也没有\n你走过去看着我死\n但我知道你心里更难受\n因为爱把你击垮了\n对，承认吧\n你知道你不孤单\n医生！\n医生！\n压住他的腿！\n镇定剂！\n压住他！\n能不能关掉？\n关掉机器？\n还是你的心脏？\n我去问医生\n这件事到此为止\n天晓得你怎么还活著\n但你可重头再来\n你以为那位警官是在保护你？\n他是不让你害死自己\n我一声令下，他就可送你进牢房\n你要报仇\n杀了几个混混，结果呢？\n战争中的每个人都自以为是对的\n最后还不是死光\n你永远赢不了的，休姆先生\n谁也赢不了\n我害死了他们\n我害死了我的家人\n你儿子还活著\n什么？\n昏迷不醒\n他在哪里？\n在这家医院？\n人呢\n别激动，等一下\n路克！\n路克！\n路克？\n他没事，让他去吧 路克？\n先生，回床上躺好 我儿子呢？\n快说我儿子在哪儿！\n他在206病房\n路克？\n路克？\n我们会照顾令郎的\n医生，让他去吧 路克？\n他会清醒吗？\n现在不能确定\n冤冤相报是没完没了的\n你说什么？\n冤冤相报\n有时候只是混乱\n世界就是这么乱\n让我和他独处一下\n拜托你\n我去外面等\n路克，你听得见吗\n能不能动动手指？\n儿子，听得见就动动手指\n路克，我知道...\n你觉得...\n我对你的关爱不如对你哥哥\n天哪，我...\n我不知道，或许最初是这样\n你也知道的\n我和你妈...\n刚有了布兰登的时候\n他实在是...\n我觉得他很了不起\n他简直是个奇迹\n但我一直都很了解他\n后来又有了你\n不知道，我本来以为...\n你会是布兰登的翻版\n我期望你像他一样\n结果你不是\n你们截然不同\n和他不一样，和我不一样\n你真的是很像...\n太像你妈了\n顽固又...\n太过于热情\n你妈就是这样\n她是我这辈子最重要的人\n你也是\n我只是想跟你说我爱你\n我好爱你\n我爱你哥，也爱你妈\n我爱我们全家人\n我...\n对不起\n我以前未能当个好爸爸\n对不起\n我没能保护你们\n可恶\n你快去叫医生来...\n医生！\n奥云\n帮我查一个电话号码\n对，5550128\n去查别的资料库，想办法查到\n存款也要领出来？\n对，全部都要\n所有的钱\n连孩子的教育基金也要？\n喂？\n尼克，我是奥云\n电话号码查到了\n是酒吧，叫\"四朵玫瑰\"\n尼克，出了什么事？\n要不要我打电话求助？\n谢了，再见，奥云\n尼克？\n我要找比利·达利或他的朋友\n\"西班牙语\"\n我说我不会讲英文啦，你聋子哦\n懂了吗，老兄？\n\"西班牙语\"\n我把你的猪脑袋砍下来\n寄给你妈\n说不定她会认得出你\n但我很怀疑，老兄\n操你娘的！\n干！\n干！\n死开！\n放开我...\n告诉我比利·达利在哪里\n现在就说\n快说！\n你不会想找到比利·达利的\n我有事要找他\n好，放开我\n放开我！\n\"西班牙语\"\n他的同伙海可住在附近113号\n他通常晚餐时间会啪药\n可以了吧？\n\"西班牙语\"\n还有一件事\n我要买枪\n有事吗？\n我要买枪\n我不认识你\n我是从\"四朵玫瑰\"来的\n据我猜测...\n你应该不属于这地头吧\n别让我闻到你有恐惧的味道\n敌人才要恐惧\n恐惧\n和子弹\n超多子弹\n这是凶枪中的凶枪\n点357口径\n保证头也打爆\n这把枪不错\n这是标准的点45口径\n火力超强\n这是血海深仇才要用\n这把枪的火力是天王级的\n既是大炮，也是正义之剑\n带这把枪去圣地\n就可以展开圣战了\n不管是哪一把枪\n都保证能让你把烦恼\n抛到九霄云外\n那一把呢？\n这把？\n好，我要这把和这几把\n买这些枪要花你3千大洋\n你有很多深仇旧恨吗？\n这是5千美元\n那你就是我的VIP了\n再送你一些配件\n因为我直觉你很需要\n你身上散发出一股杀气\n真的\n你是想杀我儿子比利的那家伙\n他是你儿子？\n所以祖也是你杀的啰\n你杀了我的小儿\n现在又要追杀比利\n对，我要杀他\n比利不是什么好东西\n他做的事都与我无关\n有人想要某人付出代价\n以消胸口的一股怨气\n那找比利就对了\n杀了那个混蛋\n看看会不会影响我心情\n咱们当爸爸的私下讲\n我也是知道的啦\n去找他吧\n我忍他够久了\n你又是个付现款的好顾客\n但别以为我会跟你说比利在哪里\n敢问我就杀了你\n去忙你的吧\n愿上帝与你同在\n一整袋的枪也与你同在\n\"布兰登的东西\"\n我要专心想著痛\n那个\n搞什么？\n搞什么？\n你是谁？\n你？\n不是被我们干掉了吗？\n搞什么？\n给我滚出去！\n比利人呢？\n去你的\n我的牙呀！\n王八蛋！\n快说他在哪里\n办公室\n是什么鬼地方？\n废置的精神病院\n我们在那里做毒品\n在冥府街的桥边\n听见没？\n冥府街！\n打给他\n幸好你爸赞助你车子\n让你不用溜冰来这里买毒给你妹子\n她光顾了我好一阵子\n我也经常去光顾她\n干他妈的\n海可，你这个没用的家伙\n我这礼拜第2次\n- 帮你收烂摊...\n- 比利\n那个王八蛋没死，比利\n你在胡说什么？\n他说你死定了\n那又怎样？\n就这样啊，操你妈的\n今晚要惹什么事？\n你又想干嘛？\n好像赶著去投胎\n你知道帮你擦屁股有多累吗？\n我还得安抚那个送钱上门的阔佬\n叫他杀了你，你以为我爽吗？\n你根本就不懂\n我很关心你的事\n因为会拖累我\n你还需要什么指示吗？\n不用了，谢你喇老爸\n我去拿车了\n搞什么？\n妈的！\n阿狗！\n那个王八蛋来了！\n往你那边去！\n我的脚！\n阿狗！\n快！\n去追那个王八蛋！\n我杀了你，王八蛋\n去抓他！\n快啊！\n快点...\n\"欢迎来到地狱\"\n你去那里，绕到他后面\n你知道你会死在这里！\n妈的\n瞧瞧你\n你跟我们没两样\n我把你变成杀人魔了\n准备好了？\n我今晚连动的力气也没有\n你走过去看著我死\n但我知道你心里更难受\n因为爱把你击垮了\n对，承认吧\n有新年新希望吗？\n5、4、3、2、1！\n新年快乐！\n你儿子\n他在动了\n应该能撑得下去\n永远不再想起？\n好吧，我拆不开\n好啦，准备好了吗？\n祝你圣诞快乐 我就是想要\n这种脚踏车\n对，喜欢吗？\n是那种吗？\n那就好，圣诞快乐\n新曲棍球杆\n尺寸对吗？\n对，很适合我\n挥杆给我看\n别打到桌上的东西\n我最厉害\n我最厉害\n《死亡裁决》\n放马过来吧\n等一下\n准备好了吗？\n好了，用力挥\n你还好吧？\n你还好吧？\n好了，你自己骑\n天哪！\n路克！\n宝贝！\n小心那棵树啊\n耍花招\n耍花招\n你以他为荣？\n对啊，他好了不起\n那是妈妈画的吗？\n说实话，是妈妈画的吗？\n你看\n我有个疑问.\n这是什么？\n是抽象画\n我和球队签约就买新房子送你\n这栋房子有什么不好？\n准备好了？\n可恶！\n好了，许愿吧\n妈，你几岁？\n我几岁？\n只是好奇\n你很漂亮\n看起来不过才\n爸，快说啦\n布兰登休姆，你当选MVP了\n争气的宝贝儿子\n第一名\n点蜡烛吧\n可以用手掴醒他吗？\n不行\n好吗？\n他会杀了我们\n惊喜！\n惊喜！\n生日快乐，路克\n生日快乐，路克 生日快乐\n14岁了\n感觉和昨天13岁没分别\n你要现在被揍14下？\n还是\n待会儿啦，等我睡醒再说\n走开！\n我差点就赢你了\n可否忘怀旧雨\n永远不再想起？\n可否忘怀旧雨\n祝友谊永固？\n打扰一下\n才提到曹操，曹操就来了\n好吧\n有何贵干？\n安妮要我请你签核\n这个人在海星做了6年\n但他老婆死了，没小孩，没遗嘱\n我想把他的退休金纳入抚恤金\n直接了当\n拜托，我不想搞得太复杂\n要照规定做\n等他死了大家就知道我们有尽责\n你说得对，省麻烦\n我懂了，抱歉\n不是，我们要尽责\n好好安顿我们的员工\n别让他死不瞑目\n你讲的宇宙的秩序，，是什么？\n保户花了30万美元\n依据这份新图表、新调查资料\n新社会\n谁才是好员工？\n谁怎么死的？\n几时死的？\n我们拿到资料知道他们表现多好\n你知道报告内容吗？\n有小孩的人比没小孩的人更长寿\n有两个小孩比一个小孩的更长寿\n抽烟不好\n超速不好\n家有白事不好，离婚不好\n还好的是\n这些陈腔滥调始终是事实\n你知道吗？\n你家的小孩就很棒啊\n布兰登，你很滑头啊！\n我是天赋异禀\n没办法嘛 天哪，妈\n我好想死啊\n我知道\n我可以先失陪吗？\n不行\n我有个白痴阿哥\n我有个超样衰细佬\n好了，别吵啦\n你早该知道会这样\n怎样？\n一家人要相亲相爱\n我能说不吗？\n不行\n我要求豁免权，我要找律师\n好，我要提出起诉\n我回来了 现在就要\n抱歉回来晚了，错过晚餐了吗？\n没有，菜还很多，我去弄热给你吃\n爸，礼拜六载我去市区\n市区？\n对，这是交换比赛\n我是先发球员\n真的吗？\n太好了 对啊\n华教练一定爱死你了\n对，因为他是狗\n也不坏啊，大家都要去吗？\n不行，路克要踢足球\n对，但我不是先发\n你们可以\".\n或者你发癫就\"\n不会这么渣了\n爸，他开玩笑，简直是白痴\n不准骂他白痴\n路克，你有个忠诚又疼你的哥哥\n说得对\n忠诚又疼我的狗\n大家能不能文明一点？\n不然我要杀人了\n我无所谓啦，卑鄙小人\n最好啦，卑鄙小人\n路克\n碟\n衰人，给我过来\n放手！\n知道不回家会错过什么了吧？\n对，至少他们没互扔食物\n打得好啊，我以你为傲\n打得好啊\n谢谢\n我喜欢你拿球杆的架势\n很帅气\n我们队上有人在考虑\n要去加拿大念大学\n加拿大？\n加拿大很远呢\n你们还有路克嘛\n还真欣慰啊\n不是啦，我开玩笑的\n不跟小孩闹着玩就老得快\n你以后就会懂\n你这场球打得漂亮\n好几场都打得好\n但职业曲棍球.\n这是你要的吗？\n或许吧，我不知道\n这可是有风险的\n这是你当职业球员的经验谈？\n还是\".\n不是，是我的\"\n高风险职业经验谈，多谢你了\n风险、责任、人生的残酷面\n不对，那是你的人生\n你充满刺激的人生\n别开你老爸的玩笑\n你只有我一个爸爸\n再找华教练谈谈吧\n你可以多研究加拿大的学校\n找个人来教我们打曲棍球\n哪里比学法律好 爸！\n干嘛？\n教我们？\n我只是想打曲棍球\n开大灯\n爸，你觉得呢？\n我们再详细研究\n看看吧 好吧\n请别跟你妈说\n我不会的\n高速公路在哪里？\n汽油量：\n低，\n这下可好了\n故障，\n你要去哪儿？\n我想喝东西\n好吧，又要喝冰沙了\n应该有卖吧？\n不然就喝更垃圾的饮料啰\n你有钱吗？\n有\n好吧，快去快回，要回家了\n好\n老婆，是我，我只是想告诉你\n我们儿子要去加拿大打曲棍球了\n我们不想十八相送\n就直接载他去机场了\n他说会打电话回来\n但我们可能再也见不到儿子了\n但只要他快乐就好了\n先这样\n我爱你\n马上就回家，再见\n小心啦\n让开，死鬼\n趴下！\n不然我打爆你个头！\n给我趴下！\n就是他！\n就是他！\n他要来找死了 快啊，比利\n杀了他！\n就是他了\n快动手，否则不能入帮！\n快！\n你做得到的\n祖！\n快杀了他\n这才对嘛\n快闪！\n快闪！\n把枪给我！\n我们走！\n那祖怎么样 快上车！\n妈的！\n他妈的！\n干！\n操你娘的\n布兰登！\n布兰登！\n天哪\n救命啊！\n帮我！\n快来帮我！\n救命啊！\n祖呢？\n他现在是男子汉\n可以搭地铁了\n快找人帮忙\n谁能救救我们？\n快来人啊！\n医生！\n把床推过来！\n他被割喉了，有人割他\n打开呼吸道，帮助他呼吸\n他是我儿子\n那是我儿子 梅姬！\n好了，带他去旁边 布兰登\n我们到医院了\n他们会替你治疗\n把你治好\n先生，抱歉\n你不能进去 什么？\n让医生去处理吧 我知道\n但我不能进去？\n抱歉\n好吧，他会没事的\n他是我儿子\n他叫布兰登\n5号\n是5号\n他是祖达利\n他是\n还是个细路\n他只是个子矮，快23岁了\n他是个禽兽\n明天应该会有\n正式开庭前的侦讯庭\n他们要我出庭作证\n要不要一起去？\n你去\n让那个禽兽去坐牢\n警察也是这样形容他\n禽兽\n西装要不要脱掉？\n校方说要办告别会\n在下一场比赛的时候\n球队想做点事\n他们真有心\n他本来也应该参赛的\n直到我的身躯化成灰\n直到我的灵魂不复存在\n我将会爱你\n爱你\n直到太阳开始哭泣\n月亮化为腐朽\n我将会爱你\n爱你\n但我要知道\n你会不会一直留在我身边\n永远不离开？\n那么我将全心付出\n直到生命的最后\n永远不渝\n今天很顺利\n我要你出庭吓得他良心不安\n法官问你，你就把话重述一遍\n当庭指证达利\n懂吗？\n我提呈你的证词，加上你出庭\n官方辩护律师就会吓得半死\n5分钟能达成协议\n今天就送他进牢，很简单\n协议？\n等一下\n等一下，这是什么意思？\n什么协议？\n我要这家伙坐一辈子的牢\n不可能\n保证能关3到5年，顶多这样\n我指的是保证\n不是也许，不是看陪审团的心情\n好过求刑十年至无期徒刑\n结果他逃过法网\n你想这样吗？\n但他杀了我儿子\n休姆先生，我有你这个目击者\n很好\n但只有一个目击者的案子\n你知道有多少我不想协议吗？\n凶器莫名其妙消失了\n在那个混蛋身上只找到\n他被车撞留下的血迹\n你又挑中美国唯一\n没装监视器的加油站\n只有你的证词\n还不错，我可以吓得他同意协议\n你拿我儿子的死当游戏\n我送一个混混进牢\n一年后有人替我行天道\n他没活着出狱，我无所谓\n他改信宗教，我无所谓\n但我们硬要严惩求刑\n即便我非常乐意\n辩方也会开始问我们：\n你上次几时检查视力？\n，\n你对市区青少年有成见吗？\n，\n说什么他们在暴力中成长不公平\n被迫杀人加入帮派，不然就没命\n你要陪审团同情这个烂人？\n你要他获释？\n等一下，你说\n为加入帮派而杀人\n这不是抢劫案吗？\n只是看起来像抢劫案\n这是入帮仪式\n为了加入帮派而随机杀人\n这是入帮的代价\n你意思是布兰登被杀\n是让那个混混自觉更像男子汉？\n让他加入什么帮派？\n很遗憾，这种事你不接受就拉倒\n法官大人，我要提呈目击者的证词\n在案发当时作的笔录\n他是被害人的父亲\n贝林先生，正式开庭时再提出吧\n法官大人，若今天提出\n辩方就会改口认罪了\n省得检方浪费时间金钱来开庭\n那就是证词？\n休姆先生？\n休姆先生？\n你作证这位达利先生在你面前\n攻击你儿子导致他死亡？\n你愿意在开庭审讯时作证？\n不是这样的，法官大人\n什么？\n当时很暗\n对方人很多\n我不确定是谁\n贝林先生\n除了休姆先生以外还有证人吗？\n没有了，法官大人\n我要撤销这件案子\n达利先生，我判决你当庭释放\n你可以在法警陪同下回到拘留所\n取回你的私人物品\n祖！\n你赢了！\n无罪释放！\n真有你的！\n劲哦！\n我们走，快走吧！\n你无罪释放，我以你为荣\n这下子谁有种？\n我知道\n上车\n跟这个妞儿好好享受吧\n好 可以吗？\n我以你为荣\n没问题吧？\n爸？\n爸？\n你在干嘛？\n没有啊\n你在干嘛？\n别乱拿，放下\n那里\n是一座\n.油站吗？\n布兰登被杀的地方？\n对，是油站\n问这个干嘛？\n我只是\n想知道他在哪里死的\n好吧\n那是\n郊区的一个休息站\n你\n你觉得他害怕吗？\n对，路克\n我想他是很害怕\n结果怎样？\n他当庭获释了\n什么？\n为什么？\n我觉得不是他\n你说是他啊，说他被捕了\n他们会继续调查吗？\n会，他们说会\n天哪\n对不起，你要我怎样？\n对不起\n我有东西遗忘在公司，我回去拿\n现在？\n尼克！\n我会尽快回来\n天哪，我在干嘛？\n真他妈的\n干！\n天哪！\n干！\n你吓死我了\n等一下\n不可能吧\n是你？\n干！\n干！\n干！\n干！\n天哪\n天哪\n干！\n你知道妈妈很完美\n这是当然啰\n没有，我无言以对\n爸，我想跟你一样\n这句话真令人欣慰\n这件事我拖了好几个月\n谢谢你这么体贴地帮忙\n嗨\n嗨\n出了什么事？\n我在路上滑倒了\n老公，天哪，看看你\n你好狼狈\n没事，只是手受伤了\n还好吧？\n很好，没事啦\n没事才怪\n我去冲个澡\n好吧，我去拿绷带，待会儿上去\n你怎样？\n还好吧？\n我很好\n大概是吧\n那就好\n那就好\n我去冲个澡\n布兰登休姆，你当选MVP了\n你有什么话想说？\n可以拿走吗？\n可以吗？\n第一名\n布兰登休姆，争气的宝贝儿子\n老公\n天哪\n天哪 宝贝，没事了\n对不起\n天哪 没事了\n对不起 没事了\n对不起\n邦斯修车厂，\n比利！\n小心那些零件\n喂，零件很值钱的\n不像你一文不值\n你死哪儿去了？\n这像话吗？\n今晚就赚到这些\n我可怜你和你那些低能朋友\n给你们几个门路去赚钱\n你最好多赚点钱给我\n被我知道你偷钱，我就宰了你\n在哪儿风光是你的事\n你要是敢偷我的钱\n我就他妈的宰了你\n我对你够有耐心了\n好啦\n你可以滚了\n真他妈的低能\n干嘛？\n干嘛？\n谁可以告诉我出了什么事\n你听说了吗？\n祖出事了\n有人杀了他\n他死了\n什么？\n少骗人\n他死了啦\n嗨\n你们还好吧？\n节哀顺变啊\n我们很好\n总是要想办法适应\n人生就是这样，有失又有得\n日子总得过下去\n换作是我遇到这种事，我会\n不知道，我大概会崩溃吧\n没遇到真的不知道会怎么做\n自己也会吓一跳\n打扰了，尼克\n沃里斯警探找你\n好，请她进来\n嗨，很抱歉打扰你工作\n没关系\n涉嫌杀死令郎的疑犯\n被人杀了\n怎么了？\n帮派仇恨吗？\n大概是吧\n真是老天有眼\n可以这么说啦\n我想你也许会想知道\n说不定凶手真的就是他\n谢谢你来告诉我\n不打扰你了\n我也不必说什么了\n但需要的话公司会支付咨询费用\n我们应付得来\n谢了，奥云\n不客气\n他不是死得活该，不能让他白死\n他是个真斗士\n为祖干一杯\n他是个好孩子\n真他妈的好孩子！\n我们就这样做？\n怎么不给点尊重？\n难怪你们一事无成\n难怪你们都是贱精\n因为你们宁可喝酒\n吸大麻把自己搞成弱智\n智障又孬到极点\n是我不好\n我们.\n干杯吧\n杯子给我举起来！\n每个人都要！\n祖只是不适合混帮派啦\n他跟我们不一样\n对，跟你们不一样\n他跟你们不一样\n他比你们好！\n我们从小就像兄弟一样\n你却讲这种话？\n现在我配不上你了？\n祖也像我的亲兄弟啊\n他像我的亲兄弟，你也是\n好吧\n我要抓到杀他的王八蛋\n非抓到不可\n没问题\n去帮祖报仇\n是谁干的？\n不是14K，不然我一定知道\n除非你啪了药\n我没啪药\n不是新X安，比利\n不是和胜X，不是帮派干的\n我妹说她看到穿西装的人\n在那里流连\n这种鸟地方有多少穿西装的人？\n这就好笑了\n我们帮派的被杀就不会上头条\n但海星企业资深副总裁的儿子\n白领父子遇袭，子惨遭杀害，\n去问问你妹\n爱美，你好啊\n我要回家了\n没事吧？\n需要什么吗？\n没有，我很好\n完成这份风险分析报告就要\n麻烦你出去的时候\n顺便把这个拿给奥云\n好 谢谢你，晚安\n主大楼1801号，\n阿斯匹灵，\n等一下！\n抓住他！\n快！\n快点！\n抓住他\n他在哪里？\n快\n快\n快\n快\n1801号怎么走？\n主大楼1801号，往哪边？\n从锅炉室过去，那边\n他跑哪儿去了？\n海可、阿狗、史宾，去拦截他\n杀了他！\n快！\n快！\n快！\n快！\n他人呢？\n天哪，好了\n可恶\n你有找莎莉谈吗？\n有\n让开！\n快走！\n汤美，快！\n杰米，你这只蜗牛给我死过来\n你唬不了我的啦\n比利，我们快走吧\n比利，快离开这里，快点\n走！\n快点！\n妈的，天哪\n老婆，抱歉我迟到了\n什么？\n等一下，怎么会找不到他？\n他人呢？\n有没有打去问他朋友？\n天哪\n我再覆你电话\n我应该知道他在哪里\n好了\n收集指纹，比对出来再告诉我\n快去彻底搜索调查\n有必要就去街头找人\n一定有人看到什么\n路克！\n路克，你在干嘛？\n你妈担心死了，快上车\n不要\n我叫你上车\n不要，我不想上车\n快给我过来\n去你的！\n路克！\n这里不安全\n对，难道我会唔知？\n死的是我会比较好吧？\n是这样吗？\n总比失去争气的宝贝儿子布兰登\n更容易接受吧？\n路克\n请你上车\n走吧\n路克，马上给我上车！\n马上上车！\n天哪\n宝贝\n对不起\n不准再这样吓我了\n我们要杀他？\n海星企业，1500号，\n访客要先登记\n先生，访客要先登记\n快递包裹可放这里签收\n不行，我要亲手交给他\n给尼克休姆\n请你按照规定登记和把包裹放下\n打电话给楼上\n可恶！\n尼克休姆！\n快点！\n尼克休姆！\n尼克休姆！\n办公室不错\n你想干嘛？\n那是自由的礼物\n先生，要不要请他出去？\n先生？\n让你不必再想自己会怎么死\n不必再想自己会孤单地死\n请他出去\n因为你回归造物主怀抱的时候\n就能享受喜悦与荣光\n放手！\n王八蛋，你在哪里？\n我捡到你的银包，你要赏我吗？\n快说你在哪里\n不对，我要说的是你在哪里\n你走投无路了\n谁死谁活由我决定\n你最好快点搞清楚\n因为我不会再警告你\n我要来享受天伦之乐了\n不行，你听我说\n你敢动我家人\n我就把你五马分尸\n像我杀了你朋友那样，听见没有？\n他不是我朋友\n他是我弟弟\n我现在要杀光你全家\n你刚才给他们判了死刑\n等一下\n不要！\n顶！\n顶！\n顶！\n洁西卡沃里斯警探，\n尼克，出了什么事？\n快接啊\n尼克？\n老婆，你没事吧？\n路克放学回家了吗？\n对啊，我们很好\n那就好，在家里等警察到\n答应我\n为什么？\n怎么了？\n你只管待在家里等警察到\n我马上回来\n快接啊\n请问沃里斯警探在吗？\n沃里斯警探！\n马上叫沃里斯警探来接！\n可恶\n重案组，我是沃里斯\n他们威胁要杀我全家\n休姆先生？\n那个流氓\n威胁要杀我全家\n好吧，你家人在哪儿？\n在家里\n两个都在家里\n请你救我们\n海伦？\n路克？\n尼克？\n天哪\n到底出了什么事？\n老公，为什么警察要来？\n尼克，你吓坏我了啦\n天哪\n尼克，跟我说啊\n爸，出了什么事？\n尼克！\n出了什么事？\n你待在这儿\n谢天谢地你终于来了\n令郎是打曲棍球的\n对\n警车今晚会守在门口\n休姆先生，我想你现在应该\n告诉我到底谁对谁做了什么\n你竟敢老虎头上动土？\n是这样吗？\n你以为住在这里\n杀了小混混就没事吗？\n你在胡说什么？\n尼克，她在说什么啊？\n我没做错事\n那你为什么不告诉我\n比利达利怎么会对你火滚？\n是你要我帮你的\n好吧\n好吧\n先熬过今晚再说，休姆先生\n还活着就该感恩了\n但你要是引爆战争\n就只能听天由命了\n你做了什么？\n我要怎么阻止？\n是你引发的吗？\n听我说\n我自己怎样都无所谓\n只要家人平安就好\n告诉我该怎么阻止他们\n首先，他们说什么都照做\n逐一去做\n放心吧，休姆先生\n我们在通缉比利那帮人了\n我居然没发现你做了什么傻事\n你怎么可以这样？\n你以为这样就能一命抵一命？\n恢复宇宙的秩序？\n我失去了儿子\n你儿子\n你是个好爸爸\n这是什么也改变不了的事实\n我爱你\n永远爱你\n幸好你快要摆脱了\n是啊\n不！\n妈！\n滚出去！\n妈！\n过来！\n过来！\n比利，怎样？\n不！\n不！\n不！\n我今晚连动的力气也没有\n你走过去看着我死\n但我知道你心里更难受\n因为爱把你击垮了\n对，承认吧\n你知道你不孤单\n医生！\n医生！\n压住他的腿！\n镇定剂！\n压住他！\n能不能关掉？\n关掉机器？\n还是你的心脏？\n我去问医生\n这件事到此为止\n天晓得你怎么还活着\n但你可重头再来\n你以为那位警官是在保护你？\n他是不让你害死自己\n我一声令下，他就可送你入册\n你要报仇\n杀了几个混混，结果呢？\n战争中的每个人都自以为是对的\n最后还不是死光\n你永远赢不了的，休姆先生\n谁也赢不了\n我害死了他们\n我害死了我的家人\n你儿子还活着\n什么？\n昏迷不醒\n他在哪里？\n在这家医院？\n人呢？\n别激动，等一下\n路克！\n路克！\n路克？\n他没事，让他去吧 路克？\n先生，回床上躺好 我儿子呢？\n快说我儿子在哪儿！\n他在206病房\n路克？\n路克？\n我们会照顾令郎的\n医生，让他去吧 路克？\n他会清醒吗？\n现在不能确定\n以暴制暴是没完没了的\n你说什么？\n以暴易暴\n有时候只是混乱\n世界就是这么乱\n让我和他独处一下\n拜托你\n我去外面等\n路克，你听得见吗？\n能不能动动手指？\n儿子，听得见就动动手指\n路克，我知道\n你觉得\n我对你的关爱不如对你哥哥\n天哪，我\n我不知道，或许最初是这样\n你也知道的\n我和你妈\n刚有了布兰登的时候\n他实在是\n我觉得他很了不起\n他简直是个奇迹\n但我一直都很了解他\n后来又有了你\n不知道，我本来以为\n你会是布兰登的翻版\n我期望你像他一样\n结果你不是\n你们截然不同\n和他不一样，和我不一样\n你真的是很像\n太像你妈了\n顽固又\n太过于热情\n你妈就是这样\n她是我这辈子最重要的人\n你也是\n我只是想跟你说我爱你\n我好爱你\n我爱你哥，也爱你妈\n我爱我们全家人\n我\n对不起\n我以前未能当个好爸爸\n对不起\n我没能保护你们\n可恶\n你快去叫医生来.\n医生！\n奥云\n帮我查一个电话号码\n对，5550128\n去查别的资料库，想办法查到\n存款也要领出来？\n对，全部都要\n所有的钱\n连孩子的教育基金也要？\n喂？\n尼克，我是奥云\n电话号码查到了\n是酒吧，叫四朵玫瑰，\n尼克，出了什么事？\n要不要我打电话求助？\n谢了，再见，奥云\n尼克？\n我要找比利达利或他的朋友\n西班牙语，\n我说我不会讲英文啦，你聋子哦\n懂了吗，老兄？\n西班牙语，\n我把你的猪脑袋砍下来\n寄给你妈\n说不定她会认得出你\n但我很怀疑，老兄\n操你娘的！\n干！\n干！\n死开！\n放开我\n告诉我比利达利在哪里\n现在就说\n快说！\n你不会想找到比利达利的\n我有事要找他\n好，放开我\n放开我！\n西班牙语，\n他的同伙海可住在附近113号\n他通常晚餐时间会啪药\n可以了吧？\n西班牙语，\n还有一件事\n我要买枪\n有事吗？\n我要买枪\n我不认识你\n我是从四朵玫瑰，，来的\n据我猜测\n你应该不属于这地头吧\n别让我闻到你有恐惧的味道\n敌人才要恐惧\n恐惧\n和子弹\n超多子弹\n这是最凶悍的一把枪\n点357口径\n保证头也打爆\n这把枪不错\n这是标准的点45口径\n火力超强\n这是血海深仇才要用\n这把枪的火力是天王级的\n既是大炮，也是正义之剑\n带这把枪去圣地\n就可以展开圣战了\n不管是哪一把枪\n都保证能让你把烦恼\n抛到九霄云外\n那一把呢？\n这把？\n好，我要这把和这几把\n买这些枪要花你3千大洋\n你有很多深仇旧恨吗？\n这是5千美元\n那你就是我的VlP了\n再送你一些配件\n因为我直觉你很需要\n你身上散发出一股杀气\n真的\n你是想杀我儿子比利的那家伙？\n他是你儿子？\n所以祖也是你杀的啰？\n你杀了我的小儿\n现在又要追杀比利\n对，我要杀他\n比利不是什么好东西\n他做的事都与我无关\n有人想要某人付出代价\n以消胸口的一股怨气\n那找比利就对了\n杀了那个混蛋\n看看会不会影响我心情\n咱们当爸爸的私下讲\n我也是知道的啦\n去找他吧\n我忍他够久了\n你又是个付现款的好顾客\n但别以为我会跟你说比利在哪里\n敢问我就杀了你\n去忙你的吧\n愿上帝与你同在\n一整袋的枪也与你同在\n布兰登的东西，\n我要专心想着痛\n那个\n搞什么？\n搞什么？\n你是谁？\n你？\n不是被我们干掉了吗？\n搞什么？\n给我滚出去！\n比利人呢？\n去你的\n我的牙呀！\n王八蛋！\n快说他在哪里\n办公室\n是什么鬼地方？\n废置的精神病院\n我们在那里做毒品\n在冥府街的桥边\n听见没？\n冥府街！\n打给他\n幸好你爸有赞助你车子\n你就不用溜冰来这里买毒给你妹\n她光顾了我好一阵子\n我也经常去光顾她\n干他妈的\n海可，你这个没用的家伙\n我这礼拜第2次\n帮你收烂摊.\n比利！\n那个王八蛋没死，比利\n你在胡说什么？\n他说你死定了\n那又怎样？\n就这样啊，操你妈的\n今晚要惹什么事？\n你又想干嘛？\n好像赶着去投胎\n你知道帮你擦屁股有多累吗？\n我还得安抚那个送钱上门的阔佬\n叫他杀了你，你以为我爽吗？\n你根本就不懂\n我很关心你的事\n因为会拖累我\n你还需要什么指示吗？\n不用了，谢你喇老豆\n我去拿车了\n搞什么？\n妈的！\n阿狗！\n那个王八蛋来了！\n往你那边去！\n我只脚！\n阿狗！\n快！\n去追那个王八蛋！\n我杀了你，王八蛋\n去抓他！\n快啊！\n快点\n欢迎来到地狱，\n你去那里\n你知道你会死在这里！\n妈的\n瞧瞧你\n你跟我们没两样\n我把你变成杀人魔了\n准备好了？\n我今晚连动的力气也没有\n你走过去看着我死\n但我知道你心里更难受\n因为爱把你击垮了\n对，承认吧\n我不孤单\n有新年新希望吗？\n不对，你知道妈妈很完美\n这倒是\n我没什么新希望啦\n5、4、3、2、1！\n新年快乐！\n新年快乐！\n好吧，你今年有什么期望？\n你儿子\n他在动了\n应该能撑得下去\n可否忘怀旧雨\n永远不再想起？\n法国大文豪米歇尔.\n德.\n蒙田曾经说过\n我认为吃活人比吃死人\n更加野蛮\n至理名言\n当你还是个不谙世事的孩子时\n大人们告诉你世界是由坏人和好人构成\n我一直喜欢坏人\n我喜欢疤面人胜过超人 (疤面人是美式漫画中的坏蛋)\n对摩尼教徒的我来说\n堕落的哲学比起仁义道德\n更加能激起我的兴趣\n其实 善恶并非那么泾渭分明\n就我来说\n我送人一个拇指表达其实是仁慈\n三周前\n你给了我个\"D\" 我从没有得过\"D\"\n你的作业只能够得\"D\" 我也是那么给分的\n我们正在做爱 伊莱\n-什么 你和我做爱是为了得到个好成绩\n-当然不是\n我给你们留道题目\n一个加利福尼亚奶农谋杀了三个年轻女孩\n在她们的尸体上留有性侵犯的痕迹\n然后吃掉了她们大腿上的一部分肉\n你们认为这个奶农疯了吗\n见鬼 当然\n给你你们一点提示 这个问题\n没有例如\"是\" \"否\"或者\"见鬼 当然\"这样的确切答案\n空的 空的 空的\n你今天有买过一杯咖啡吗\n出于好奇心 你拿这个破杯子\n来我们这儿蹭牛奶喝 有多久了\n-三天了\n-所以我要没收你的杯子\n别\n巴克利・迈克尔逊 人文社会学博士生\n这感觉太爽了\n伊莱・迈克尔逊博士 化学教授 (当博士好爽啊 叫兽 我说的对不对?\n)\n周一把作业交到我桌上 要至少三页\n谢谢各位\n莎拉・迈克尔逊 医学博士 刑事精神分析专家\n你等等 如果你下次再迟到\n我会把你带出去 扭断你的大拇指\n你懂了吗\n麦克斯・马瑞尔 侦探\n这个冷漠的世界 就是为了让你的灵魂堕落\n这至始至终不会改变\n这个冷漠的世界 就是为了让你的灵魂堕落\n这至始至终不会改变\n这个冷漠的世界 就是为了让你的灵魂堕落\n这至始至终不会改变\n这个冷漠的世界 就是为了让你的灵魂堕落\n这至始至终不会改变\n撒迪厄斯・詹姆斯 自学成才者 (笝衾衄跺腴悝盪腔賸...\n×姊×b犒)\n我正处于人生的低谷 简直是地狱一般\n你也看到了 我正在做我的博士论文\n每周只有父亲给的$35零用钱 你明白吗\n我最多只能花$4.40买...\n一杯摩卡咖啡和一根法式面包\n我时常会想起塞缪尔・约翰逊的诗句\n为什么给\"你的挚爱\"一个\"D\"\n柏斯・查普曼 研究生\n柏斯 我非常失望\n你居然期望我会特殊照顾你\n胡扯 伊莱 胡扯\n你这是故意的\n你故意给我\"D\"好让我和你上床\n\"这里记载着学者们的生活中的遭遇\n辛劳 嫉妒 贫困 赞助人和牢狱\"\n-你好 请说\n-办公室来了个电话\n好像你的丈夫获得了诺贝尔奖\n那会让他更加自大的\n不是每天都有人赢得保龄球奖杯的\n更别提诺贝尔奖了\n巴克利・迈克尔逊 你父亲刚打电话过来\n他说他获得了诺贝尔奖\n真他妈的走运\n祝贺你\n祝贺你 迈克尔逊博士 你真棒\n谢谢 谢谢\n如果这件屋子里还有人质疑我超凡的智力\n或者质疑能够当我的学生是多么幸运\n那么现在可以吻我的屁股了\n-祝贺你 伊莱\n-恭喜你 伊莱\n干得好\n伊莱 我觉得这证明了诺贝尔奖不是什么大众流行奖\n这是一件好事 西蒙\n如果诺贝尔奖是大众奖的话 你也可以去参选了\n-你看上去真棒\n-谢谢\n这领带没问题吧\n是不是有人忘记告诉老爸这只是半正式场合\n他知道的\n这么穿是为了显示他很特殊\n吃的东西在哪里\n我们每个人都为你感到自豪 伊莱\n我得了诺贝尔奖这真是一件美事\n因为现在你会发现想解雇我是很困难的\n我从没有威胁要解雇你 伊莱\n我是一个科学家 哈维\n根据我对周围的观察表明\n这里没有人喜欢我\n我喜欢你\n伊莱 听着 我也是个科学家\n根据我的观察到的证据\n早在我要解雇你之前就有人在诋毁你\n有人说你和小女生 我什么都没看见\n你真的认为那个化学系的追星小丫头\n和我那个顽固又专制的老爸有一腿?\n-老妈\n-不 等等\n很高兴你能来 柏斯 我喜欢你这件衣服\n离期末考试还有两周\n如果考试没得\"A\" 我就把关于\n我和你的那些丑事抖出去\n不幸的是\n这将是第一次诺贝尔奖得主牵涉性丑闻\n对 对 不过考虑到卡尔顿・ 格瑟特博士和他的密西西比男孩们\n我认为他们才是第一个性丑闻事件\n我可是认真的\n不就是个\"A\"嘛 你得到了\n我喜欢你这样 柏斯\n你是多么淘气\n当我从斯德哥尔摩回来\n我何尝不想立刻撕破你的衣服\n欣赏你娇小柔美的身躯 但现在 你得离开这里\n她担心期末考试前两周\n我会缺课\n因为那两周我正在做去斯德哥尔摩前的准备工作\n看到吗 西蒙 至少我的学生喜欢我\n谢谢各位今晚出席 你们有人出于自愿\n有人出于被迫\n但无论怎样 明天我就要去接受我的诺贝尔奖\n我的妻子 莎拉 会和我同行\n这些年来她是唯一\n一个能够忍受\n我的臭脾气和怪癖的人\n因为他对\"疯狂\"的定义是那么狭窄\n她居然说服陪审团认为杰弗瑞・达摩没有疯\n于是杰弗瑞・达摩精神失常的辩护被驳回\n他也被送入了监狱\n莎拉\n我们会和我们的独生子巴克利同行\n作为普林斯顿大学\n的优等生\n也就是他证明了我在单分子光谱的研究\n将会是后继无人\n他现在又把兴趣放在了研究食人主义\n还有挑战游戏机记录\n现在他终于知道怎么谋生了\n当然用的不是他那冷门的专业 (这人真欠抽啊)\n巴克利\n在1975年当\"爱使我们相聚\"...\n-走吧 我会给你打掩护的\n-谢了\n祝你和那个女孩交往顺利 她的名字是\n这把戏不错 老妈\n9：\n00赶到那里 飞机11：\n30起飞\n在那一刻我意识到\n通过凝聚相来\n观察单分子光谱\n是可行的 也是必要的\n是的!\n是的!\n嗅着潮湿的气息\n我感觉自己回到了海边\n在一瞬间 我明白了啄木鸟的思想\n-她朗诵了吗\n-还没有\n山雀!\n山雀!\n山雀!\n山雀!\n山雀\n谢谢\n大家好 我叫西提・豪 (好奇怪的名字)\n今晚我将朗诵我的诗歌\"小老鼠\"\n西提・豪 诗人 艺术家\n在小老鼠思维\n空间深处的角落里\n邪恶 如同寄生虫一般在此偷生\n你也许会把它当作畜生 把它当作草芥\n你对阿谀奉承假装不理不睬\n但你深知\n在你自身四维空间深处\n的角落\n这是你自身散发腐臭味的黑暗面\n在这绝无仅有的精神渣滓中沸腾\n你还记得我吗 巴克利\n几周前我向你做过自我介绍\n我只是想说你真是\n-天啊 太棒了\n-谢谢\n我有时也能说出完整的句子\n比方说\"在那里\"\n吮吸我的嘴唇 打开你的内心来征服我\n我想有机会能和你谈谈\n一些关于你创作灵感的事或者其它任何什么\n-好的\n-好吧 就像我们现在这样谈?\n-当然\n-好的\n我本希望能够请你吃个汉堡或者其它什么\n-可惜我现在身无分文\n-我是个素食者\n那是好事 特别当我不得不吃掉你的时候\n因为素食者比肉食者尝起来美味\n我正在做关于食人风俗的博士论文\n-食人主义\n-没错\n-我周围的人都在贬低它 但还有很多...\n-谁这么做?\n那些残忍的 思维狭隘的\n父母是共和党?\n是民主党 不过其它你都说对了\n你父亲\n我的父亲\n他在我15岁时发现了我的日记 并把它烧了\n我的诗歌 我的思想\n我的绘画 我所拥有的一切\n都被焚毁了\n天哪\n-你之后再怎么面对他?\n-不必了 他后来死了\n\"在受伤孩子的眼中\n爱和痛交融在一起\"\n\"地狱为孩子而生\" 帕特・本纳塔的歌 (格莱美音乐奖得主)\n自行车呢\n靠\n我开车来的\n-万圣节用的?\n-我自己做的\n现在我用它们在十字路口吓唬人\n我试试\n-送给你了\n-算了 你太慷慨了\n我不能接受\n不要摘下来!\n它是我送你的\n你一定要戴着\n-你真的是穷的叮当响?\n-当然\n证明给我看 我想看你的存款余额\n-你在开玩笑?\n-我是说真的\n可你必须要戴着面具\n-我把它送给你了 戴上吧\n-这也太疯狂了\n疯狂只是一种选择 巴克利\n好吧 好吧\n快点 巴克利!\n我饿了!\n你没有撒谎 巴克利\n我们去我家吧\n我们可以叫木须肉外卖 我付账\n你知道你有多天才吗\n这太棒了\n我觉得作为你所谓的肉食者 你尝起来不错\n我保证你比我美味多了\n来见见马沃 他是个小偷\n-在晚上他会变成一只猫?\n-不是\n他就是只小偷猫\n他会偷走你乱扔的东西\n而且让你再也找不到\n这可让我有点儿担心\n巴克利\n我漂亮吗\n毫无疑问\n不要伤我的心\n不会的 西提 我保证 (让我心仪的文艺女青年啊...\n)\n放松心情\n放松心情\n放松心情\n放松心情\n-我得走了\n-不要\n我今天得去斯德哥尔摩\n上飞机前我会给你打电话的 好吗\n要不在飞机上打 还是打两个吧\n留下来吧\n像昨晚那样抚摸我 求你了 巴克利\n好吧 再过半小时我必须得走了\n我希望他没发生意外\n他没事 可能他有事耽搁了\n他老是迟到\n他很少迟到 在梅雷迪斯之后他就再没约会过\n他和梅雷迪斯那场3分钟的婚姻花了我$20,000\n他们的婚姻保持了一年\n他去见鬼吧\n如果他这么没有责任感 我们就自己出发\n伊莱\n我把墙纸去掉了\n乔治・格斯那 改过自新的强制症患者\n-这里没有墙纸 我很喜欢\n-事实上\n我发现墙纸流下的胶水\n促进了微生物的生长\n这个地方看起来妙极了 乔治\n我喜欢这里 花花草草让这里生机勃勃\n到处都是花粉\n我很...\n轿车来了 我们现在要走了\n我会给植物浇水的\n清扫垃圾\n我会确保房子外的灯是亮着的\n-很好\n-我会给你一份详细的报告的\n-谢谢你 乔治\n你能再帮我一个小忙吗\n什么忙\n如果见到巴克利\n你能告诉他票在桌子上吗\n在厨房电话旁的桌上\n巴特 他不是要和你们一起去吗\n我们这会儿找不到他\n我想他随时可能回来\n他可以自己开车去机场\n他可以把车停在那儿\n告诉他我会付停车费 好吗\n我会 我会找到他的\n-谢谢\n-我通常能听到他骑车回来\n因为他把车挂起来时 整个地板都在抖\n-谢谢你 乔治\n-74分钟之后我就得走了\n-好的\n-莎拉 莎拉\n如果我听不到他回来怎么办\n糟了\n鞋子哪儿去了\n查一下帕萨迪纳 出租公司号码\n出租车 快走\n十块\n零钱做小费吧\n妈妈 爸爸\n你好 迈克尔逊家 听到滴声后留言\n巴克利 我是西提\n我就知道你不会像你保证的那样\n给我打电话 因为你是一个伪君子\n昨晚 你发誓你没有钱...\n但是 今天早上你却有钱打的\n巴克利 我从窗户里都看见了\n既然没钱的事是撒谎 其他估计都是谎言...\n我们的关系就此结束吧\n我不会犹豫 再见 巴克利\n你好 迈克尔逊家 听到滴声后留言\n你在笑吧 巴克利\n我能听到你的声音\n你是个没有理想 没有灵魂的人\n所以你才会如此对我 没有丝毫愧疚\n你好 这里是\n够了 你他妈有完没完\n巴克利 我是你爸爸 我很生气\n我希望你为改掉那些\n让人愤怒的行为\n-都是有必要的\n-哦 你生气了\n去死吧 伊莱 我更生气\n我那让人愤怒的行为才会是更加必要的\n乔治・格斯那\n改过自新的强迫症患者\n现在面临这一个巨大个人挑战\n你能做到的 乔治 你能做到的\n忘了巴克利 忘了那担心他的母亲\n开着你那环保电力车去上班吧\n好样的 乔治 好样的\n在比立沃斯精神病院呆这么多年\n总算有点儿用\n如果是占线 那么他就在家里\n该死 伊莱 我说过我们要开通呼叫等待\n-我们得登机了迈克尔逊先生\n-是迈克尔逊博士\n思沃森女士是在礼貌的告诉我们\n飞机就要起飞了\n而我 作为一名乘客 想上飞机了\n迈克尔逊博士\n机长说他很荣幸...\n你能搭乘这班航班 先生\n是因为我赢得了诺贝尔奖...\n还是因为我激起了他潜在的同性恋倾向?\n我很抱歉\n他脑袋里面装的都是那些天才想法\n而教养之类的已经没有地方装了.\n所以才导致了她这种让人生厌的反社会行为\n带我去见机长\n他可以亲自告诉我\n先生 请您坐下来\n安全带的指示灯亮了\n恭喜您获奖了\n远远\n离开\n单身 激情\n看我们起舞\n感受它的热度\n撞击你的灵魂\n它是如此美妙\n它是如此清晰\n在这无边的夜\n它是如此美妙\n它是如此清晰\n在这无边的夜\n它是如此清晰\n它是崭新的世界\n你能感觉得到 在这无边的夜\n它是如此美妙\n它是如此美妙\n你好 伙计\n我不知道你在说什么\n什么\n离这儿四英里才有电话\n还好我对电气很在行\n我希望你喜欢橙子 屋子后面有一棵树\n上面结了好多橙子\n接住了 这儿\n你得趴下来吃\n趴下来吃\n你好 请给我接伊莱・迈克尔逊博士\n救命 救我 求你救救我\n-安静\n-快救救我\n你能稍等一下吗\n救命 救我 求你救救我\n别再吵了\n媒体见面会四点...\n在瑞典皇家科学院举行\n然后在那儿 我们会参加一个招待会\n还有一个鸡尾酒会\n-然后是晚宴\n-行了 行了 去哪儿无所谓\n我只想问\n这个冰箱里的东西谁付账\n是我 还是那该死的硝化甘油的发明者 (这里指诺贝尔)\n伊莱・迈克尔逊 诺贝尔获奖者\n你好 博士 你儿子在我手里\n要想他活 除非我收到200万没记号的钱\n得了 巴克利 别耍了\n赶紧给我滚到瑞典来\n-我想和他说话\n-不好意思\n如果不想迟到 我们最好马上出发\n他挂了\n我要你的拇指\n-什么\n-我们会把你的拇指寄给他\n-这样他才会明白事关重大\n-不\n不 不要\n大拇指 不要\n它是灵长类特有的手指\n它不仅是个手指 更是人区别于野兽的标记\n不 不要 求你了\n求求你 我求求你 不要啊\n不要 听着 让我给他打电话\n他是我的爸爸 他会听我的\n我爸爸是个混蛋 但他会听我的\n求你让我和他说\n他确实是混蛋 但他会听我的 让我打给他\n我会让他明白事情的严重性\n我会让他知道你是认真的\n那是什么\n爸爸 千万别挂\n哦 这回没有调音器 听起来好多了\n不 那不是我 那是\n绑架我的人\n求你 听我说 好吗\n我被一个野蛮人绑架了...\n如果你不答应他的条件...\n他会切掉我的拇指还会杀了我\n爸爸 我有麻烦了\n麻烦 你确实如此\n你知道我得付多少钱\n改签原本免费来斯德哥尔摩的机票?\n我很害怕\n别耍我了 快坐飞机滚过来\n越!\n快!\n越!\n好!\n你在教堂干什么\n-妈妈在吗 我和想她说话\n-你想...\n爸爸 爸爸\n切拇指时间?\n-是巴克利是吗\n-他在路上\n-希望他能及时赶到\n-他真的在路上吗\n他让我向你问好 莎拉\n他在教堂干什么\n哪有父亲这样对待自己的骨肉的\n他是个坏父亲 现在得了诺贝尔奖...\n-情况只会更糟\n-他不配得诺贝尔奖\n是的 不错 我知道\n我相信肯定有别人更适合这个奖项\n不 那不是他的成果 是他偷的\n也许 你也知道 他是个卑鄙的家伙\n他从谁那儿偷的?\n-哈瑞曼・詹姆斯\n-谁\n你父亲的好朋友 他已经死了\n哈瑞曼・詹姆斯是我父亲\n对不起\n真的很抱歉\n-我知道我父亲是个混蛋\n-你懂个屁\n你根本不懂你父亲是个什么样的人渣\n妈的\n珍妮特・波兰尼 计算科学学生 2005年9月拍的\n瑞娜・拉曼尼 地球生物学教授 2006年1月\n海瑟・菲利普斯 行政部门的\n不会吧\n柏斯・查普曼 三个星期前拍的\n那个男人是个畜生\n这是我妈妈\n那时候她已经和哈瑞曼・詹姆斯结婚了\n他是哈佛化学系的毕业生...\n他对宽视野显微镜下...\n利用激光诱导来观测单分子的...\n荧光排放有一套完整的概念\n这是哈瑞曼的实验笔记 72年9月\n第9到16页\n单分子光谱分析的起源?\n哈瑞曼・詹姆斯和伊莱・迈克尔逊曾是最好的朋友\n那么 我父亲和你母亲也有染?\n当我母亲怀孕了...\n哈瑞曼・詹姆斯自杀了\n因为他知道自己没有生育能力\n-我父亲知道这件事吗\n-他当然知道\n-你认识他吗 你见过他吗\n-没有\n等下 那么你是我的...\n哥哥\n同父异母的哥哥\n你叫什么名字\n萨德斯...\n詹姆斯\n听着 我知道你为什么来 萨德斯...\n某种意义上说 拿走他所有的诺贝尔奖奖金\n我甚觉得你是对的\n似乎是为你的父亲哈瑞曼・詹姆斯\n报仇的\n最佳方式\n知道吗\n更好是 让全世界知道谁才应该得那个奖\n-不是吗\n-没错\n你说得都很对 巴克利\n-但现在我需要你的拇指\n-萨德斯 我们是兄弟\n-不 我们是同父异母兄弟\n-求你了 不要\n我想和你一起干 我们是一伙儿的\n一起 做搭档 不要 不要割我的拇指\n上帝啊\n我打赌国王是在他的私人轿车里放屁的\n在很多场合 如果他每晚都那样猛吃\n我打赌他得有个男仆...\n而他的职责就是为国王的屁承担责任\n这是什么\n那是下午到的 给迈克尔逊太太的 博士\n是吗 我会有什么东西\n打开看看 别怕 邮寄炸弹的家伙们都在监狱\n你来开吧\n如果想让你儿子活命 准备100万现金 等通知\n哦 上帝啊\n是的 这件事很蹊跷\n我在斯德哥尔摩和乔纳森谈过\n测试结果出来前\n他们不会归还拇指\n-那得多长时间\n-我不知道\n你们可以找个新的容身之所\n现在住的地方太暴露了\n-我们在那儿住了20年\n-好吧\n所以你幸运了20年 伊莱\n现在你的运气用光了\n我走的时候是10:\n15 我已经迟到了\n我必须在10:\n09离开去上班\n我一直等到10:\n15\n我通常都在10:\n09离开\n我以为他们说没有警察\n-先生 你们开通呼叫等待了吗\n-没有\n只是一个问题而已\n-探长\n-瑞乐\n我们查了圣盖博谷所有对外开放的教堂 (位于加州 亦称中国谷)\n毫无进展\n-对不起 女士\n-比尔 我们得检查一下这些线索\n我在脑子里一遍遍的想\n我肯定他说过\n他要去赤道书店去见一个女孩儿\n她的名字叫...\n凯裴拓・希尔还是什么来着\n我们去赤道书店看看\n我没听到自行车的声音 我没听到他进去\n我听了 莎拉 我听了\n我做些吃的给你 你一整天没吃东西了\n-麦克斯 我 我不饿\n麦克斯・马瑞尔的顶级炒鸡蛋\n和烤土司的味道\n会让你饿的\n必须要烤吗\n对于你 可以例外\n-你真好 麦克斯\n-不\n不是对每个人 我为你着迷\n对不起\n但是我很担心\n你知道 那个拇指 还有那些暴力行为\n但也很有可能那根本不是巴克利的拇指\n在洛杉矶 过去三周\n有四宗与拇指有关的案件\n我希望是他的拇指\n如果是别人的拇指...\n这个绑架者就真是个狡猾的变态\n他步步为营\n而且不想让俘虏过于痛苦 使自己过得不爽\n所以他理性的\n截掉了某人的拇指...\n随机的受害者\n使得他躲藏更加容易\n另一方面\n如果这是巴克利的拇指...\n那么这帮人就太稀疏平常了\n他们一定藏身在某处...\n和我流着血快崩溃的孩子\n他可能很痛\n可能还大量失血\n使他们快要发疯\n这样就会比较容易\n去找到或阻止他们\n或其他什么的\n但这样巴克利就不能打好高尔夫\n因为那需要大拇指 (好冷的笑话\n-_\n-!\n)\n我躺在那享受着我的粪便浴\n刺激的芳香迎鼻而来\n生命底线的味道\n早晨的阳光流过百叶门\n我感觉需要洗澡\n很有力 对吧\n凯裴拓・希尔\n听过这个名字吗\n有个叫西提・豪的读过这本书\n-为懦弱贫穷人\n-你认识那个人吗\n哦 这是巴克利・迈克尔逊\n那是他的桌子\n他一天到晚坐在那\n玩他的GBA 乱想一些食人的事\n-食人\n-对 他的正题\n怪人\n我跟他说他爸获得诺贝尔奖\n你猜他怎么说\n\"那个婊子养的混蛋走大运了\" 你相信吗\n你要是遇到他爸你就会相信\n还有什么吗\n对了 还有辆自行车\n一直放在那 我猜是他的\n-谢谢\n-到我了\n失陪\n大家好 我是克里福德\n我今天带来的诗叫\"服毒自杀\"\n四岁时拜仁第一次小试了一口\n-好像比你的贵75美分\n-无咖啡因 无脂\n无害 低能量\n还有盒麦圈\n-我看上去比你更俗吗\n-便宜?\n我花了8.83美元啊 (cheap的双关 译者猜的)\n好吧 你想知道什么\n她叫西提・豪 这可能是她的化名\n你猜的吗\n祝他妈的圣诞快乐\n混蛋们 我树底下准备了礼物\n圣诞老人给你们准备了痛苦之餐\n快去给你家买点圣诞蛋糕\n去北极吧\n你他妈的在看我吗 圣诞快乐\n滚吧 混蛋 来坐到我大腿上啊\n小太妹把我的弟弟搞硬了\n嘿 你这个秃头的混蛋\n你他妈在看什么东西\n白痴...\n我们来双飞吧 这个圣诞老人很下流 给麋鹿吹箫\n弯下腰来 让我把你袜子装满 (此处过于下流 就不译那么清楚了)\n节日快乐\n你好\n-嗨 莎拉\n-嗨 麦格\n现在不是说话的时候\n-你好\n-你给我听好了\n我只说一遍\n你给我准备无法追查的俩百万美元\n钱放在女式衣箱中\n星期六早上把钱放在赖加达・希尔斯商场中央\n九点整\n然后你们就可以打道回府来等我的指示\n到时候我会让你们找到哀嚎悲惨的儿子\n我要是看到警察 我就撕票\n-我想跟我儿子说几句\n-他没事\n我要跟他说几句 我想跟儿子说话\n-妈妈\n-巴克利\n快救我 快把我弄出去\n行了\n我们就去了 巴克利\n两天前\n我给你父母送了根断指\n你给我父母送了根断指\n那你认为我应该怎样使他们相信\n只有你一张拿着报纸的照片\n谁的拇指\n要是我砍的是你的拇指\n你会流很多血\n你就会变得疯狂\n这样对我就没用了\n难道吃死人比截指容易些吗\n巴克利 你做人生观有点问题\n-我会为此不安的\n-只有孩子才不安\n-你说什么\n- 这是派特・百那特说的\n我们跟着他们 然后落网 我们动身吧\n-那是什么意思\n-巴克利没有大拇指了\n这点我已经知道\n事情就像我预想的这样\n当你爸在客厅踱步\n考虑是否该放弃你时\n帕撒德那的警察闯入了错误的房子\n别动 卧倒\n错了\n此时 商场\n我靠\n我跟他们说了在完成构架前不准货运\n我们现在怎么办\n建筑组正在准备\n周六晚上的啤酒\n和星期天的休假\n不用 我来付\n用直升飞机将迷你轿车放入厅中央\n于此同时警察搞了一次不让他们更丢脸的行动\n他站的位置 无路可逃\n想要穿过去\n简直就是没门\n7:\n50时\n西南门就会给雇员打开\n给了我几乎一小时来重装车\n什么都没有\n不管如何\n我们不能暴露身份\n巴克利・迈克尔逊的死活\n完全取决于我们行动的准确性和耐心\n他在干吗\n我哪知道\n等下 跟上她\n我要把这个送过去\n等会\n你觉得把这带到商场去\n还要把这个箱子丢进那个\n千百人投入奖券的车中是一件很爽的事情吗\n这是我们的全部啊\n这不是我们的全部 我们还有儿子\n他才是我们这个世界上的最爱\n-现在没有选择\n-莎拉\n混蛋\n我只能告诉你\n高处不胜寒\n先生\n不是天才 你真的很幸运\n你儿子会没事的 迈克尔逊博士 我们都是天才\n早上九点整\n你可以听见200多尖叫的人拥进来\n抢着成为前百名来获得Mp3\n一旦东西丢进去 好戏就正式开始了\n只是一次尽情的狂欢\n这只是其中的一件事\n只是其中的一晚\n只是其中一美好的旅行\n只是其中一晚\n怎么会这样\n头 他开走了\n只是其中的一件事\n这是个圈套 他们在干吗\n电话不时响起 只是其中的一件事\n只是其中的一晚\n这只是其中一次奇妙的飞行\n这很有趣 但只是其中一件事\n我猜它在往走西北跑\n我们跟住他了 他无路可逃\n没人在车里 他是谁\n只是其中的一件事\n停下来 别\n只是其中一件事\n只是其中一晚\n只是一次漂亮的飞行\n登月之旅\n只是其中的一件事\n这只是其中的一件事\n只是一次疯狂的狂欢\n只是其中的一个电铃 不时的响起\n只是其中的一件事 只是其中一晚\n-天啦\n-哦\n只是其中的一件事\n只是其中一次狂欢\n只是其中一个电铃 不时响起\n只是其中一件事\n只是其中一件事\n只是其中一次狂欢\n只是其中一个电铃 不时响起\n只是其中一件事\n只是其中的一晚\n只是一次难以置信的飞行\n这很有趣 但是只是其中一件事\n我把荧光灯修好了\n他们在不停的闪\n回去 快\n我抓到他了\n头 你来看看吧\n你真是反复无常\n所以你被选中\n你真是反复无常\n所以你被选中\n全在这了\n一百万一份\n天啦 这钱真他妈的多啊\n这将是我一生中最高的成就\n这个比第一次伊利安・赛泽\n给我吹箫的钱还多\n她是第十届高阶乐队吹大号的红人\n比我第一辆车还贵\n比我第二次吹箫工资还好\n但那次没拿到工资 我妈找到我了\n它比你的婚礼用费还高吗\n那个蓝眼专业修俄语的妞\n梅雷迪斯 马\n-斯?\n-你他妈怎么知道梅雷迪斯的\n-我就是知道\n-你他妈还知道什么\n-还知道...\n我知道不能勃起\n所以她就到别处觅食了\n算心理补偿 对吧\n嗯\n-兄弟不应有秘密\n-操你妈\n操\n操你妈 操你妈\n我拿了钱就回家\n你要是现在就回家\n我就杀了你\n什么 你要杀我\n但是你不会吃我\n你会吗\n-你哪弄的车\n-跟拿到上一辆在一个地方\n星期六 教堂 人们都忙这做礼拜\n-你偷的\n-别搞的像犯罪似的\n过来\n你好\n现在\n-吞下去\n-什么\n当他们找到你 他们会搜你身\n你现在吞下去之后就会拉出来\n滚你妈的\n你要是不吞下去以后拉出来\n我就从你后面塞进去\n随你\n你现在要是花其中的一分钱\n他们就会马上找到你\n我们现在不该再说话\n至少是之后的俩年\n我会想你的\n有个兄弟真有趣\n我根本不需要兄弟 我要爸爸\n相信我 你要是没有伊莱的话会更好\n我妈就是因为我总提起父亲而很讨厌我\n好的 随你\n好的\n你干吗\n你不想让他们怀疑你被绑架是装的吧\n唔哦\n我是凯利・兰格 此刻我正站在\n伊莱・迈克尔逊博士家门口\n他们本是要参加诺贝尔颁奖典礼的\n可这一周诺贝尔奖获得者心里却七上八下\n他们不得不缩短了\n和瑞典皇室的庆典\n来面对这次\n孩子被绑架的邪恶之举\n我钱没了 巴克利也没找到\n更甚至的是巴克利杳无音信\n现在门口这么多媒体\n让我怎么出门\n谁通知他们的\n你好\n我是KLPK的凯利・兰格\n兰格女士 你现在是站在我家门口吗\n是的\n莎拉 把枪放下\n现在迈克尔逊也在线\n她孩子以前也被绑架过\n她说她当时也\n- 兰格女士\n-什么\n我先在拿着把枪正对着你的头\n你他妈的现在要是不\n马上离开 我就开枪了\n天哪 她拿着枪\n要是他通知我们等的话 就另有文章了\n你好\n你妈和我希望你能去医院检查一下\n我们只是想确认下你没事\n我想回家\n好的 我们回家\n天啦 你能看到你回来真的太好了\n见到你我也很很高兴 妈妈\n你的大拇指怎么都没事\n要是真没了\n你才觉得那两百万物有所值吗\n莎拉别扯了 你跟我说说\n送到斯德哥尔摩那根手指是谁的\n如果不是巴克利的\n他们恐吓我要砍我大拇指\n他们总共有几个人\n俩个\n你记得他们长什么样吗\n他们头上套了东西\n粗麻布袋子 当时很黑\n我很渴 他们给我水我甚至都不能喝\n巴克利 你告诉我西提・豪干了什么\n西提\n她和这事儿一点关系也没有\n估计她现在恨死我了\n我们能明天再谈吗 麦克斯\n反正我们抓不着那些人的\n现在他们肯定早就跑了\n跑哪儿去了\n我哪儿知道\n他们又没告诉我逃跑路线\n看看我\n看这儿\n我没注意\n那么告诉我\n你知道西提的真名叫什么吗\n当然 莎隆・豪\n别把她扯进来 麦克斯\n她很脆弱\n而且正对我很生气呢 我答应过要打电话给她 但是没打...\n因为我他妈的被绑架了\n-能向我保证吗\n-你是在西提家外被绑架的 对吧\n不是 在这儿\n这儿?\n比尔 我们得叫法医过来\n-为什么?\n-我们搞错了\n巴克利是在这里被绑架的\n可能就在你们离开之后\n绑匪进到这里?\n别跟我说钥匙又放花盆底下了\n我是卡尼帕警官 叫法医过来\n-9.99\n-伟哥改变了我的生活\n我在圣盖博谷\n途乐公司附近的洛杉矶机械工具展会里工作\n我要取点钱到汤米汉堡店 (洛杉矶汉堡老店)\n买点儿吃的 那儿整晚都营业\n快告诉我们的观众\n告诉我们接着发生了什么\n我正在用自动取款机\n这时一个带着纸袋面具\n手拿屠刀的人袭击了我\n这个人拿走了我的钱\n和我的拇指\n什么样儿的纸面具呢\n普通的食品袋 上面有星形的眼睛\n像地毯一样的大眉毛 和圆形的大红鼻子\n巴克利\n就像你会在夏天露营时做的事儿\n巴克利 宝贝儿 没什么事儿吧\n嗯 没事儿\n巴克利怎么样了\n说实话他看起来像个混蛋\n要是有什么我和派姆能帮得上忙的 可别客气\n我儿子伊森 在牛津大学教语言学\n他从英国泰晤士报上知道了你的事儿\n他为巴克利感到难过\n还记...\n记得他们小时候\n常在一起玩儿吗\n还记得他们骑着车\n一起栽进汤姆森的鱼池吗\n那阻碍了伊森在牛津大学教语言学?\n迈克尔逊博士 我很难过\n谢谢\n-看呀\n-来了 来了 来了\n小巫见大巫\n-真是不错\n-是我太残忍了\n我在他答录机中留下了粗鲁的话语\n因为他没有给我打电话让我觉得很受伤\n他保证过会打给我的\n然后他并没打给我 我就想让他觉得痛苦\n因为他让我很痛苦\n他本来要打的\n你不觉得吗 侦探先生\n是啊\n可能是\n-他喜欢我 不是吗\n-是的\n他喜欢我的思想\n-我的作品\n天啊 他喜欢我的胸部\n12月8日你和巴克利\n计划有个约会吗\n没有 他的自行车在书店外被偷了\n他要搭车\n被偷了?\n-你把他带回家了?\n-没有\n好像是我们先是接吻然后\n突然干柴烈火 激情燃烧\n好像整个世界都不存在了\n只剩下我们的欲火\n和对彼此的渴望 这让我们精疲力竭 (无语了 文艺女青年都不太正常吧)\n好了好了 然后呢\n说说你带他回家后的第二天早上\n很奇怪\n-什么?\n-他打车走了\n那有什么奇怪的?\n如果那晚他一分钱也没有\n那早上哪儿来的钱打车呢?\n非常抱歉打搅你 豪小姐\n非常感谢您能抽出时间来见我\n西提・豪原创\n你觉得她和这宗绑架有关系吗\n真是神经病\n但是 那首在赤道书店读的诗\n倒也不是没用的疯话\n\"老鼠生活在没有罪恶的星球上\"\n那是安妮・赛克斯顿的墓志铭 (美国自白派诗人)\n是首回文诗\n确实是\n我要吃鸡肉沙拉\n那个我请客 迈克尔逊博士\n毕竟你经受了那么多痛苦 这是我们仅仅能做的一点小事儿\n我还要吃丁骨牛排 三分熟 谢谢你\n-他要来和我们坐一起\n-把那把椅子推开\n给他个机会吧 他到鬼门关走了一趟\n伊莱 我请你吃午餐\n罗比已经请了 把你这顿排到明早如何?\n我刚才看见院子里都是记者\n要是再扩大点宣传\n你就能进行巡回演讲来赚钱了\n你认为一个诺贝尔奖\n就会令你臭名远扬\n我...\n蜗牛吃我的罗勒呢\n看这些有瘢痕的叶子\n一个星期前这些叶子还是肥厚多汁 很光滑呢\n你什么也没听到\n我是在留意自行车的声音\n但是你从未听到类似挣扎打斗的声音\n我没有注意听有没有打斗的声音 如果我留心听的话\n应该能听到打斗的声音\n-也许我没听到\n-对啊\n我要杀了他们\n杀谁\n蜗牛呀 我要他们去死\n等一下\n你和西提・豪说你的自行车被偷了\n是被偷了\n你的车现在在仓库里\n我把它从赤道书店弄回来的\n不会的 我告诉你那车是被偷了\n我跟你说啊\n你并不是第一个\n用撒点小谎的手段让姑娘上套的人\n我让你离她远点的\n她为你痴狂\n听到你的遭遇之后她哭哭啼啼疯疯癫癫的\n我倒是不担心她\n除非她有需要我担心的地方\n我记得呢\n那孩子只有20美元\n我没有整钱 就找了他14元的硬币\n他很着急 上窜下跳的\n我都数不清了\n乔治・格斯那\n如果他没骑自行车\n我就听错了\n乔治・格斯那\n从柴可沃催精神病院\n转院到比尔沃斯精神病院\n中间还在弗瑞克心理诊所待过一阵儿\n你不是来问自行车的事儿的 对吧\n你要进来吗\n你要到里面来吗\n你要进来吗\n西提\n我以为你不会再出现了呢\n-抱歉\n-我也是\n我好想和你做爱\n我就想让你这样说\n但是\n我不能\n别 我们去别地儿\n我现在和另一个人在一起\n什么\n那你还来这儿干吗\n我想和你说声对不起\n你真是反复无常\n所以你被选中了\n你真是反复无常\n所以你被选中了\n巴克利\n怎么了\n为什么我没想到会发生这儿事\n这边 这边走\n这是壁炉和厨房\n还有浴室\n我本来不想这么快就把它租出去的\n但是我们现在真的缺钱\n他看上去是个不错的年轻人\n很可靠 是做二手车买卖的\n不错\n也许你应该帮他搬东西\n看来他自己一个人能搞定\n你好像不怎么欢迎他\n只是 我的背整天都在痉挛\n自从我被绑架后就一直疼\n我想我真帮不上什么忙\n我还没告诉他乔治在房间里自杀了\n不过好像也不会给他造成困扰\n是啊 有的人就是这么现实\n他在这儿有个很可爱的女朋友 看 就在哪儿呢\n天哪\n我没事儿\n不错的一对儿\n你这么看 是呀\n是的\n真是重大进展啊 真的\n使量子点具有生物相容性\n就能侦测到活细胞中的单分子\n你是做二手车买卖的\n我本来在俄亥俄州立大学化学系念书\n但我...\n但我没钱读完\n所以 现在我在汽车行业\n但是你的学识\n可比化学系本科生强多了\n萨德斯就像一颗恒星\n却被周围环绕的\n一堆小行星掩盖了光芒\n莎隆是诗人\n但我是一个自学成才的人\n所以当得知我的新房东\n是伊莱・迈克尔逊博士时\n我兴奋异常\n巴克利连单分子有多大都不知道\n是不是啊 巴克利\n是\n一般来说是的\n很明显取决于分子的结构\n以及原子的数量\n但至少也要和原子\n的键距差不多大 巴克利\n一般是\n一到两埃 (波长单位 一亿分之一厘米)\n真不错\n你要有空来我的实验室看看\n应该会对你有所帮助\n真的吗\n太棒了\n你他妈的要干什么\n-他是个好人\n-什么\n我能让他感到骄傲\n我会追随他的脚步\n伴他左右\n-继承他的事业\n-萨德斯 我们可没这个计划\n滚\n他会像父亲爱儿子那样爱我\n抱歉 兄弟 我哪儿也不去\n我要...\n滚\n也许该滚的是你\n快点儿 巴克利 我饿了\n快点儿 巴克利 我饿了\n快点儿 巴克利 我饿了\n喂\n早上好 博士\n-看这一桌\n-你干吗不坐下\n博士\n-是请客啊 谢谢你 萨德斯\n-这是我的荣幸\n叫我伊莱\n我会爱上这种烹调做法的\n-除非是个家传秘密\n-我觉得我们是一家人\n包括我吗\n去哪儿\n看起来\n在那个可疑的晚上 你用过取款机\n我是从西提的钱包里拿了20元\n因为你发现自己的户头里只有2.57元了\n我查了银行记录\n你说你从西提那儿偷了20元\n-我没偷 我打了张欠条\n-她可\n一点儿也没有提起过欠条\n你看见她的猫了吗\n她那只猫是个...\n贼\n-真有意思\n-什么有意思\n当晚威尔・凯威乐在取款机\n被袭击了\n袭击者头戴纸带子\n割走了威尔・凯威乐的拇指\n-那又怎样\n-纸带球形鼻子的碎屑\n在起居室墙炉里发现了\n凯威乐先生的血迹\n那天早上我回家\n发现壁橱起火了\n-我之前就告诉你了 麦克斯\n-天\n看着我\n你不会觉得我能...\n听着挺夸张的\n听着\n你的红靴子\n上面带有威尔・凯威乐的血迹\n-那双鞋我丢了\n-什么时候\n就那晚 在她家过夜那晚\n-可笑\n-什么可笑\n我们在你壁橱的鞋盒里发\n现了鞋子\n埋在最后面\n这怎么可能\n巴克利 亲爱的 我们得谈谈\n好的\n任何感情都无法堪比母爱\n妈妈说服麦克斯给我个机会澄清清白\n也是帮我们自己\n现在我得想出个让萨德斯显原型的办法\n我挺爱她的\n你在这干吗\n她触及了我心中最深的秘密\n你明白那种感觉\n你把她从我身边抢走\n莎拉\n你能告诉巴克利\n离我房子远点\n他闯进你的房间\n是的\n你告诉我一个人在那里自杀\n-可没告诉我你儿子精神不正常\n-他干吗了\n他威胁我\n要知道 很抱歉 不会发生了\n我会跟他谈谈 好吗 我保证\n抱歉 能递给我量杯吗\n抱歉\n我真的很喜欢住在这里 他毁了我的心情\n我想要这上面的指纹\n没打招呼没问好\n虽然不太在乎这些 但是你这样对我感觉很不好\n尽量快给我啊\n就这样 温柔点说话 我很容易征服的\n三年前 莎隆\n也叫西提・豪\n从格里森医院逃走\n因精神病犯罪\n她因活生生烧死父亲而被判罪\n在那里她认识了病友\n萨德斯・詹姆斯\n好像你爸爸和我\n很久以前认识詹姆斯一家\n是联邦调查局工作 不能细谈\n什么时候回来\n要几天吧\n周五晚上在派得森斯家有鸡尾酒会\n我没回来就带上你柏斯小朋友\n老天\n我只是帮她 她有点跟不上进度\n萨德斯・詹姆斯 马瑞尔侦探\n侦探先生 我能帮你什么吗\n巴克利・迈克尔逊曾威胁过你\n他妈莎拉・迈克尔逊告诉我们\n要知道 这孩子\n看上去没什么危害 但是\n我来告诉你他很厉害\n从过去的事情能看出来\n我知道你看出来\n迈克尔逊对莎隆・豪很痴迷\n如果你在乎她\n我会远远带她离开这里\n你好 兄弟\n别担心 我消过毒了\n现在你已经发现西提的爱液了\n她的确挣扎了一下 但是\n她现在 我们叫\n屈服了\n听着 我绑架了我们老爹\n要放他我要一百万\n你慢慢想 我不着急\n品尝西提・豪够我活几个星期\n如果西提的肉吃光了\n我还没有拿到钱\n那时候我会着手\n享用老爸味道略逊的美味\n那得多用点卤汁\n你疯了吗 巴克利\n你也得尝尝绑架的感觉\n开始吧\n哈瑞曼・詹姆斯\n你干了他老婆 偷了他的成果 逼他自杀\n什么玩意\n格莱尼斯・詹姆斯挺漂亮 她跟很多男的有一腿\n但我跟她没关系\n你怎么解释这些支票\n什么支票\n这些年你寄给她的支票\n哈瑞曼・詹姆斯是我朋友\n他留下了怀孕的老婆\n一穷二白\n我力所能及的帮助她\n很感人 真的\n我不明白你怎么对她那么好\n你这他妈一辈子没对谁好过\n因为我不帮助那些\n可以自救的人 比如你\n我的怒火狂烧\n我感觉很绝望\n几乎每件事情都这感觉\n知道怎么回事吗\n因为作为你这个混蛋的儿子\n-你说什么呢\n-哈瑞曼・詹姆斯\n跟你诺贝尔奖\n单分子光谱学一点没关系\n他研究的不着边际 我成功了\n你真的觉得\n拿到赎金就完事了\n再说 谁会给你钱\n你妈破产了 巴克利\n萨德斯会交出来的\n-萨德斯\n-萨德斯・詹姆斯\n你儿子\n其实他不是我儿子 就算他是\n他拿什么给你钱\n他只是个汽车供应商\n他上哪里有那么多钱\n萨德斯绑架了我\n如果是真的\n为什么现在才告诉我\n因为现在 萨德斯有证据\n我明白他说的都是实话\n你和哈瑞曼的事情\n看这个 认得吗\n我扫描过\n几分钟就能发到网上\n你跟他聊得不管用\n巴克利是我儿子 我爱他\n但我觉得你应该报警\n不用报警\n他会\n他只是吓唬我们\n送给萨德斯・詹姆斯\n这里签字\n晚安\n我没买什么啊\n烤箱预热350度\n烤制20分钟至到金黄\n什么\n天呢\n变态\n我觉得是西提的\n不会吧\n他曾说要对梅雷迪斯这样\n我没想到他真的会\n我刚找到我爸\n决不允许那个混蛋吃了他\n-你好\n-你好 兄弟\n想要配方吗 是祖传秘方啊\n把钱放在\n莉莉姑妈老米黄色背包\n妈会找给你\n去死亡谷烟囱井的汽车站\n开车6个小时左右\n把钱放在126柜子\n关好 锁上\n偷辆车 回家\n7点整 接电话\n-否则老爸会被煮熟了\n-他妈的\n食人肉说\n朋友就是石棺\n怎么样\n照片 来自萨德斯・詹姆斯\n你玩弄的女性真不合我口味\n妈妈应该配更好的男人\n不是真的吧\n我永远爱你 伊莱 因为你让我生了巴克利\n请相信我\n我只爱过你一个人\n我们离婚 伊莱 我送你去清洁工那里\n这样\n祝你好运\n我不需要好运\nDNA测验证实萨德斯是你儿子\n哈瑞曼的笔记会让你\n诺贝尔奖的荣誉受到质疑\n想象一下那种侮辱\n我打赌是你的主意 整个绑架事件\n不是 巴克利的主义\n聪明孩子 我们的儿子\n估计从你那里遗传来得 老爸\n不敢相信烫衣服的钱\n都要老妈出\n那钱我们五五分\n麦克斯?\n是你的\n如果我正是给你\n-伊莱离婚会得到一半\n这样呢\n我们可以一起分享\n我们在蒙大拿州好好生活\n我想继续工作\n也好\n巴克利\n麦克斯\n商场的监控录像\n装得不错\n我得问你\n那个乳房\n有豆子在旁边那个\n杏仁糖做的\n杏仁糖乳房\n一点假血 在洛杉矶什么都能买到\n至于西提 老妈安排回到\n吉尔森医院精神病犯罪处\n我相信在那里她的作品得不到欣赏\n吉尔森医院 精神病犯罪处\n这都是我们的选择 对吧 西提\n有时候别人为我们选择 宝贝儿\n我完成了论文\n发表了\n吃掉死人并不可恶\n这叫循环\n真正的可恶是吃掉活人\n迈克尔逊博士\n我有点不明白\n动力学怎么从\n利用光子技术\n自相关功能演化过来\n光子 是啊\n就像麻疹分子 人类可以\n从地位闪耀\n转化为没人理睬\n之后\n分子与其他分子作用\n很有潜力\n发光\n先生 我不明白?\n我今晚有空\n你有空不\n伊莱・迈克尔逊 诺贝尔奖得主\n-=YTET\n-伊甸园字幕组=- 翻译:\nSade Eurydice 校对:\nketty 时间轴:\n在美国每天有大约一万人死亡 其中大部分都发生在城市里 这样算来每个生活在城市里的人每天都 可能遇到多达1.7个在当天将要死去的人\n-北美统计学会\n-2002年\n在美国平均每天有774例濒死体验 这种体验指的就是一个人在被宣布死亡后 看到眩目的白光然后再被救醒\n-国家死亡研究中心\n-1992\n我保证你会喜欢\n好棒!\n哦 Abe 我很喜欢\n你选的 当然你会喜欢\n- 那好 打开你的礼物\n- 好的\n- 你早就知道了吧?\n- 才没!\n- 他没告诉你?\n- 没有 我跟上帝发誓\n有其父必有其子 你们两个都是一个模子里造出来的\n真爱九年 一生不变\n周年快乐\n周年快乐\n你还好吧?\n- 你正晚都翻来覆去没有睡好\n- 我知道 我也不知道是怎么回事\n走吧 我们去吃早餐\n- Danny 你饿了吗?\n- 当然\n来吧 我们去吃点东西\nDanny 如果你要玩早餐\n至少也要玩得有趣些\n这样 现在如何?\n- 你还好吗 伙计?\n- 我感觉不太好\n亲爱的 你还好吗?\n走吧 我们离开这里\n谁能帮帮我们?\n放松 坐下\n让我来帮你\n我很抱歉\n鬼讯号 白光\n3个月后\n其中的原因让我百思不得其解\n为什么我们那一天那一刻 会出现在那个餐馆?\n为什么那个疯子会去想杀死 我的妻儿?\n为什么不把我也杀死?\n我是说 为什么留我一个活口?\n为什么?\n这一切都...\n如此随机\n好样的\n我是国王\n爸爸要抓住你啦\n- 你最好丢得远一些\n- 不要杀死我\n怎么回事?\n小心\n我看见你啦\n我爸爸教我游泳\n你觉得爸爸很高还是很矮?\n很矮?\n我们这些矮人的皮肤非常厚 因为不用拉伸成那么高的尺度\n之所以我的妻儿被杀害...\n都是因为我\n因为在他们最需要我的时候 我没能伸出援手\n周年快乐\n我本该救他们\n我本该救他们...\n慢动作\n耶!\n胜利者 胜利者!\n我知道这很让人沮丧\n但我必须要和我的妻儿一起\n再见\n老天啊 Abe 不要做蠢事 好吗?\n我马上就过来\n- 这就是用药过量的患者?\n- 是的\n- 你知道他吃了多少计量?\n- 我不知道 伙计\n用正常含量的盐水输液\n脉搏47 还在下降\n- (心电图)就要成直线了\n- 心率下降 他快不行了\n给他一针阿托品 加大盐水流量\n- 给他整个剂量的单磷酸腺苷\n- 他就要不行了\n- 心脏无收缩反应\n- 看他是否有呼吸\n进行心脏复苏术 快\n- 他就要死了\n- 坚持住\n- 依旧只有心室纤维震动\n- 没有脉搏\n- 你有没有给他整个剂量的单磷酸腺苷\n- 打过 他没有反应\n不要死...\n继续心脏复苏术\n没有反应 要不要宣布死亡?\n可能是良性心室纤维震动 把电击手柄给我\n充电到200\n充电到200\n让开\n- 充电到300\n- 充电到300\n让开\n充电到360 让开\n- 充电到360\n- 充电到360\n让开\n- 出现窦性心律\n- 血压上升\n终于有反应了\n没事了 我们把你抢救回来了\n检查血液的氧饱和度\n氧饱和度正常\n血压高压140低压60\n嗨 你醒了\n我是Sherry Clarke 你正在圣\n-伊丽莎白医院的深层护理病房\n- 你是我的医生?\n- 好过他们 我是护士\n亮光刺眼\n- 我在这里多久了?\n- 几天\nKarras医生一直都在监护你 你是他最近的一个病例\n你想看电视吗?\n- 有什么想看的节目吗?\n- 没有\n哦 伙计 算你好运 这可是我一直都喜欢的电影\n我们终究一死\n你好 Abe 我是Karras医生 我来给你检查一下\n- 你还好吗?\n- 我好多了\n还记得你为什么来这里吗?\n你当时回天乏术 但是算你走运 当今的医术无所不能\n-我死过?\n- 严格来说 是的 你曾见陷入NDE状态\n- 我不知道你说的什么意思\n- 濒死体验\n我是这方面的专家 我费了很大劲 才把你争取到 让我猜猜看\n你看见一团白光将你吞没 好像在竭力让你留下的样子\n是的 没错...\n你怎么知道这些?\n研究结果显示在十个有过濒死体验的人中 就有有八个说见到过那团白光\n- 很可怕 嗯?\n- 那我现在见到的白光呢?\n- 可能只是光环 某种后遗症罢了\n- 这算正常吗?\n我得说我们早已超越了正常的边界 但是 是的\n症状会随着时间逐步减轻的 直至最终消失\n她和我们在一起\n她和我们在一起\n她和我们在一起\n一切看起来正常\n你的颅内没有肿块也没有 任何不正常现象\n但是过去的这几天中我见到3次\n- 见到什么?\n- 白光\n还有一些其他事情 你或许会以为我疯了 但是...\n我看见并听见一些类似电流的东西\nEVP的意思就是 电流音频现象\n你所见到的有预知性的白光 就是超自然现象的一种\n- 我已经得到研究此类事情的批准\n- 到底电流音频现象是怎么回事?\n就是死者通过干扰如电视和收音机 这样的仪器来发出音频的现象\n有些人认为电流音频现象就是 往生者在我们身边的存在方式\n一些人认为 不过是电磁场的效应\n但另外一些人认为 这是死者在试图和我们交流\n说实话 谁知道呢?\n只要我们还没有搞清楚\n他们就会继续为我的 试验投钱\n你在这儿做什么?\n这...\n就是我的电流音频现象室\n这些录影都被干扰过 因此我录了下来 看看有没有捕捉到什么信号\n看来那是你工作中的重要部分?\n那个?\n哦 我也不想然那段被干扰\n那是\"改变习惯\"(猫王的电影) 录下这一段是为研究之用\n我认为自己能从猫王身上 得到些启发\n- 你不太喜欢这一段?\n- 不 就是...\n我在屏幕上看到那种东西\n电流音频现象的信号只有在被录制下来后 回放的时候才能被肉眼看到\n在猫王最后一个特写镜头\n我看到一个扭曲人型的 静电团出现\n- 你现在要做什么?\n- 重新设定并干扰\n看看你还能不能看到那东西\n在那 在那 就是这个 就是这个\n就是这个 我看到的就是这个\n- 真令人难以置信...\n- 这到底什么意思?\n或许当你有过濒死体验后 你本身就犹如一个调频接收器\n你能看见超自然信号发送 和电流音频现象 与往生者交流等等\n根本不需要这些仪器的帮助\n你的双眼能看到未被人探索过的地域\n你有很多机会看到让人毛骨悚然的东西\n我要走了 我还有和医生的预约\n当然可以 你慢慢办妥那些事情 嘿 我还在收集关于那次枪击事件的剪报\n还有相关文章\n我不想再听到关于我妻儿被 残酷杀害那日的任何事情 好吗?\n我只是...\n现在无力承受这些事情\n我不愿意\n嗨 Karras医生要我...\n怎么了?\nKarras医生过世了\n- 什么?\n- 他今早心脏病突发\n我很抱歉\n- 那好 所以这个所谓的...\n- 电流音频现象\n电流音频现象\n让你开始注意到白光\n当你看到光 你认为那就代表了...\n你说它代表了什么来着?\n表示有人将要死去 就好像Karras医生 可能几天之后死去\n也可以像公园里那个女人 数小时后死去 甚至可以是几分钟 取决于白光的强度\n我不知道 但是我看得越多 心情就越烦躁 好像扮演上帝一般\n- 我替你担心 Abe\n- 但你怎么解释这一切?\n如果我说\"我不知道\"呢?\n这个城市里 我们和将死的人擦身而过 这是很平常的事情\n- 我们无从知晓\n- 如果我知道呢 Marty?\n万一我知道某人何时会死怎么办?\n- 现在你拥有这种超能力\n- 这不是什么超能力\n随便你怎么叫它 但在我看来 就是一套超级英雄的废话\n不要再胡言乱语了\n快动 你这个蠢东西\n快越过铁轨\n- 哦 跟我开玩笑吗?\n- 快动\n嘿\n你得离开那里\n快!\n离开那里\n快走!\n嘿!\n- 离开那里!\n- 我动不了 我的脚被卡住 救我!\n救我!\n离开铁轨!\n快走!\n我很抱歉\n- 什么事?\n- 嘿 Marty 我现在过去 好吗?\nAbe 呃...\n好的 什么时候?\n如果我现在就要过去 成吗?\n谢谢\n怎么...\n?\n不会吧\n该死的\n打扰一下 先生\n- 该死的\n- 先生 你得出来\n算了吧 孩子 我掉了几根螺丝 我自己能搞定\n我觉得保险杠支持不住了 你得出来\n我不需要什么毛孩子告诉我 该怎么做 好吗?\n你这个到处风流的家伙还是 回到你得雅皮车里...\n- 哇哦\n- 你要做什么?\n- 保险杠就要...\n- 离我远点\n你救了我的命\n不 Marty 我跟老天发誓 我没事\n那好 那好 或许你该...\n我不知道 休息一段时间还是怎样\n- 我希望你别太勉强自己\n- 好了 我会考虑的 谢谢\n你今晚救了别人一命\n- 你觉得爸爸是高还是矮?\n- 不 不 很矮\n很矮?\n- 无意冒犯\n- 我们矮人的皮肤很厚\n因为不必拉伸出高大的尺寸\n是的 的确\n看看这位奥地利教练 看来他就要跳跃了 哈哈 做得好\n该死\n- 两个星期?\n还早呢?\n- 我知道\n- 我一定会去的\n- 好的\n呃 好了 午餐喝了三杯马丁妮 我差不多要走了\n我会弹点好听的曲子的\n- 上帝啊\n- 我很抱歉 我很抱歉 对不起!\n-别担心 你现在就可以补偿我\n- 别这样\n或许我还会让你在酒店房间多逗留一会儿 你明白我的意思吗?\n- 嘿 别这样\n- 算了\n好了 这太过头了\n- 停手\n- 打他\n停手 你们会弄伤他的 停手 你们会弄伤他的\n嘿 嘿\n- 嘿!\n- 该死 嘿 伙计们!\n嘿!\n- 救命 救命!\n- 我们走\n我就要滑下去了!\n求你 拉我上去\n拉我上去\n你还好吗?\n是的 他会没事的\n至于我 我就不知道了\nAbe 我今天在办公室还在想你 看来你还是决定要休息一下了\n有时间就电话我 好吗?\n再见\n又扮了一天的上帝\n- 喂?\n- 嘿 Marty\n我正要去看我之前救下的那个年轻人\n- 你要不要去那里见我?\n- 好 可以\n很好 还有...\n你替我收集的那些东西...\n能不能带过来\n我准备好了\n- 好的 没问题\n- 谢谢\n嘿\n嘿\n- 感谢你能来见我\n- 小意思 伙计\n这些东西可能会揭开无数个伤口\n- 你确定你准备好了\n- 我确定\n- 那好\n- 谢谢\n- 嘿 如果有什么需要就电话我\n- 我会的\n嘿\n- 哦 嘿 Dale先生\n- 我来看看Kurt的伤势如何\n缝了几针 几处擦伤和瘀痕\n我们让他留院一晚 确保他没有脑震荡\n但是他会没事的\n谢谢\n哦 不是吧...\n不要说话\n你这个贱人\n嘿 嘿 你还好吗?\n还好\n还好\n你刚刚救了我的命\n就快成该死的习惯了 相信我 没什么大不了的\n- 老兄 那可是我的命啊\n- 我知道 我不是那个意思\n是你啊\n是的 是的 你是我的护士\n摔坏了\n我很抱歉\n没关系\n- 你受伤了 让我看看\n- 没事\n嘿\n让我帮你包扎 让我多多少少帮你一些 拜托\n不过是表皮伤口 缝几针 加上点抗菌素一切都搞定\n你要么是在看我的戒指 要么就是在欣赏我的胸 到底在看哪个?\n- 在看戒指 我...\n- 我开玩笑呢\n这是我的旧结婚戒指 我丈夫几年前过世\n所以我想把戒指紧贴在心口\n你一定非常的爱他\n是的\n他是圣心小学的音乐教师\n那些孩子崇拜他\n他用独特的方式俘获了他们的心 不是随便哼哼 而是每年都组织演唱会\n让孩子们学唱鲍伊 平克・佛洛依德 拉什 海滩男孩和简的癖好\n- 凡是你能说得出来的\n- 听上去太神奇了\n是啊 难以置信\n但是最后...\n命运突如其来\n某天我们还好端端活着 明白吗?\n然后 突然间 他死于非命\n真可怕\n是的\n但是...\n我醒来\n突然闪出个念头\n我的心得放开Tommy\n总有一天我会跟他重逢 在此之前\n得接受命运的安排\n- 你们有孩子吗?\n- 没有\n但为纪念他 我每年举办演唱会\n过几天就有一场\n- 你绝对应该来\n- 也许吧\n给\n拿上这个 仔细考虑一下\n如果有兴趣就打我电话\n嗨 警察来了\n好吧 告诉他们 他们来的真不是时候\n这是结婚周年你买给爸爸的礼物吗?\n我可以看看吗?\n可以吗?\n我猜不是你爸爸指示你这么做的 对吧?\n才不是 我不过好奇 我打赌就是他想要的那块表 对吗?\n你得让爸爸等\n再说 没剩下几天了\n- 你还好吗?\n- 我很好 妈妈 那个人救了我们的命\n谢谢你!\n没关系\n没关系\n男子枪杀两人 饮弹自尽\nHenry Caine\n不该救 不该救\n不该救 不该救\n不该...\n救\n- Julia Caine吗?\n我是Abraham...\n- Abraham Dale\n我就知道你会来 请进\n家里乱七八糟别介意 我们正要搬家\n很抱歉我丈夫杀死了你妻子和孩子\n从没有象Henry这样 脚踏实地 什么都不质疑的人\n那么 嗯...\n发生了什么事?\n他 嗯...\n他经历了濒死体验\n他被一个醉鬼迎面开车撞了\n那晚他一定死过三次 可凌晨被救活了\n一个星期后我们带他回家\n然后怪事频频发生\n他举止诡异 对生与死产生了古怪离奇的想法\n对超自然现象着了魔\n超自然电子异象 白光 预知 诸如此类\n甚至认为自己可以拯救别人\n起先我还能理解 毕竟他差点没命\n但事情开始变得一发不可收拾\n你说一发不可收拾是什么意思?\n我带你去看\n看到了吗?\n你自己看吧\n警方确认失踪妇女已糟绑架\n摆渡事故死亡人数仍在增加\n如果你救了某人 就要对其负责\n哦 见鬼!\nHenry在里面时总会烧断保险丝\n真的?\n嗯...\n你知道E代表什么吗?\n不知道\n介意我拿一部分回去看看吗?\n当然可以 这里我什么都不想要\n听着 我为我丈夫所做的再次向你道歉\n我无法相信他到底离死有多远\n- 你说什么?\n- 你是什么意思?\n- 你说\"离死\"\n- 那么?\n你不是指\"死\"了?\n他已经死了?\n你不知道?\n- Henry还活着\n- 我看到他饮弹自尽\n他活了下来 远在贝尔蒙郡\n精神病院\n我们把他关在楼上 自打从昏迷中苏醒后\n他已经在这里呆了几个月了\n如果你要问 他是绝对不用服法的\n为什么?\n老Henry\n能看见死人...\n别介意 我不过呆这儿 确保你们别闹起来\n我妻子和儿子\n你为什么这么做?\n为什么杀害他们?\n救之 必杀之\n天哪 你真是疯得无可救药了\n救之\n要负责\n为什么而负责?\n后果\n可怕的后果\n什么后果?\n如果你允许他介入 这事会没完没了\n你再不能将死者隔开\n死者会骚扰你 直到你纠正过去的行为\n如果你救了人 必须..\n必须杀掉\n第三天\n第三天\n- 第三什么?\n- 第三天!\n救之 必杀之\n救之 必杀之\n救之必杀之 救之必杀之!\n是3\n3和魔鬼的签名有什么关系?\n- 嗨 Abe\n- 嗨\n我刚排练完跟你说过的演唱会\n就在附近晃悠\n就...\n嗨\n- 希望别介意我贸然来访\n- 不不 我不介意\n我不介意...\n但是为什么?\n你上一次...\n喝便宜的葡萄酒是什么时候?\n你真是太客气了 但你不用这么做\n我知道用不着这么做\n可我想\n我结婚了\n但还是谢谢你\nAbe 我看过你的档案\n我知道为什么第一次见到你 是在重症病房\n我知道Rebacca和Danny发生了什么事\n那天晚上你救了我\n我很想报答你\n- 我喜欢毛发的颜色 很漂亮\n- 紫色很迷人 但是...\n- 跟葡萄酒色相映成辉\n- 没错\n这很好 真的\n非常感谢\n- 为了劣酒和好伙伴\n- 哦 真劣\n你得经常出来透透气 象这样\n只有这样才能从痛苦中解脱\nDanny和Rebecca是我的一切\nTommy也是我的一切\n你不能就这样向命运低头 Abe\n- 来吧\n- 去哪儿?\nO'Malley酒吧\n为了弄回买酒的2.5美金 我要跟你玩撞球 把你打得落花流水\n2.50美金?\n你被骗了\n八号球 角袋\n好的\n要么双倍加钱要么全部勾销怎么样?\n好吧\n大显身手吧 高手\n- 对不起\n- 没关系\n不 我...\n不该这么做\n- 至少今晚不可以\n- 没关系 这的确疯狂 但是没关系\n重大新闻 市中心发生交通惨剧\n六人丧生 数人受伤\n一个老人驾驶一辆橙色货车...\n...冲进拥挤的候车棚 到目前为止...\n你还好吗 Abe?\n有关目击者称 货车似乎 故意突然转弯冲向人群\n还好 嗯...\nSherry 我得走了\n- 你认识其中谁?\n- 是的\n我会打你电话的 好吗?\n救之必杀之 救之必杀之\n\"第三天\"?\n警方发现George Sutter坐在厨房 丝毫不掩饰杀人企图\n妻子和两个孩子的尸体被发现捆绑在床上 由于被摧残得血肉模糊\n不得不借助牙医记录核实身份\nSutter以前从未实施过家庭暴力\n指控他时无法解释他为什么谋杀了...\nBeverly Ann Cloy做了27年的护士\n今晨闷死了14个病人 之后打卡下班 若无其事地...\n无法解释Dickon怎么会在驾驶飞机时失控...\n导致9人死亡...\n- ...\n绝对没有理由\n- ...\n无法解释\n总是在第三天...\nCaine拯救他们之后\n警方还是不明白一个老人 为什么会驾车冲入候车棚\n据称没有明显的隐藏动机\n第三天 基督会从死里复活\n那魔鬼呢?\n魔鬼呢?\n他第三天干了什么?\n第三天究竟发生了什么?\n启示录13章18节\n凡聪明的 可以算计兽的数目\n凡聪明的 可以算计兽的数目\n因为这是人的数目 他的数目是六百六十六\n圣经写于罗马时代 对象是讲古希腊语的受众\n所有的希腊文和古希腊文的\n...字母都有相对应的数字\"\n总是在第三天\n那魔鬼呢?\n魔鬼呢?\n他在第三天做了什么?\n第三天...\n在Caine拯救他们之后\n圣经写于罗马时代 对象是讲古希腊语的受众\n\"所有希腊文和古希腊文中的字母 都有相对应的数字\n第三天\n第\n-第\n-第三...\n天\n-天\n-天...\n路西法在拉丁语里是予光者的意思\n天使长被逐出天庭\n因为想为己夺取上帝的权柄\n一度高居天庭的路西法\n现在则是众所周知的\n大地上的魔鬼\n第三天是魔鬼的签名\n我在天桥上救下来的孩子\n今天是第三天\n帮助你那天 我把他送进了医院 我得知道他的下落\n我真的不该这么做 Abe\n他似乎拉近了我们的关系 Sherry\n是的\n好吧 Kurt Green\n- 阿尔弗雷德爵士饭店\n- 阿尔弗雷德爵士饭店 当然 谢谢 Sherry\n- Abe\n- 是的\n我们之间没什么问题吧?\n但愿如此\n- 再见\n- 再见\n- 你好\n- Abe\n听着Marty 我明白Caine为什么这么做了\n他觉得非这么做不可 他别无选择\n- 做什么?\n- 我救了老人 结果他开车冲进了候车棚\n我救了那个孩子 不知道他要干什么 但我知道\n依据白光拯救某人后的第三天 就会发生恐怖的事情\n- 你听到自己说什么吗 老兄?\n- 不 你听着\n也许是路西法 也许是魔鬼 也许是鬼魂\n不管是谁 我都无法阻止它 Marty\n在别人受到伤害之前\n你是我的好伙计 对吗?\n我爱你 真的爱\n我不愿看你折腾自己而袖手旁观 我不能 我不会这么做\n我们有事要做 我不能一个人干 老兄 我们还有事要做\n就是这个车站\nMarty Marty 我...\n再说一遍 我听不见\n救之 必杀之\n必杀之 必杀之 必杀之\nKurt Kurt\nKurt!\n我感到万分抱歉\n我表示诚挚的歉意\n对不起 我道歉\n- 哇 哇!\n- 趴下!\n他有枪!\n我们走!\n- 放下枪\n- 到另一边去 到另一边去\n- 别紧张!\n- Kurt!\n快走!\n现在!\n我抓住他了 我抓住他了\n- 保持冷静!\n慢慢离开大楼\n- 请这边走\n等等 Kurt!\nKurt 怎么了?\nKurt!\nKurt!\n第三天\n你要你立即下楼 拨打911\n为什么?\n我认为你不该救我\n7:\n30\nSherry\n必杀之 救之必杀之\n救之必杀之 救之必杀之 杀 杀\n你来了\n- 我为你提心吊胆\n- 为什么?\n我听说酒店发生的事了\n那个孩子一开始是你救的 可接着...\n你一定很难过 Abe\nSherry 我得跟你谈谈\n关于什么?\n- 去外面 我们出去谈\n- 你可以在这里跟我谈\n- 我不能当着这么多人的面解释给你听\n- 为什么不?\n救之必杀之\n- 这是怎么回事 Abe?\n- 必杀之\n- 你得跟我来\n- 你在干什么?\n你弄疼我了\n- 我得这么做\n- 做什么?\nSherry 我不该救你\n- 冷静点\n- 你不...\n- 冷静点\n- 你不明白\n- 放开她!\n- 这不关你的事!\n听我说 Sherry!\nSherry!\n很多人会死 很多人会死\n很多人会死 很多人会死\n别 别是这儿 其它任何地方都行\n这是菜单 马上为您点餐\n那个害死一大片的老人 你救了他\n饭店那孩子也是你救的\n然后你救了我\n真对不起 Sherry\n别难过\n那个人有枪\n警察 放下枪!\n照他说的办 先生 没人愿意受伤 对吗?\n放下枪!\n请阻止这事儿吧\n你...\n你得死\n女士\n请别管他了\n救之必杀之\n杀 杀 杀\n把她交给我吧\n杀 杀 杀\n她快昏倒了 把她带出去\n杀 杀\n来\n见鬼!\n- 我从没碰到过这种事\n- 记下时间 给她打镇静剂\n下午7:\n29分\n- 注射2cc\n- 让她住嘴\n究竟怎么回事?\n第三天\nTommy\n你还好吗?\n来这里\n鬼讯号2：\n白光\n-=结束=- 谢谢观看\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-- 本论坛字幕仅翻译交流学习之用 禁止任何商业用途否则后果自负\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n--\n-=YTET\n-伊甸园字幕组=- 翻译:\nSade Eurydice 校对:\nketty 时间轴:\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-- 本字幕所有权益归制作人所有 纯属翻译爱好者交流学习使用 谢绝它用,否则一切后果自负\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n--\n片名：\n皇家卫兵\n在古代的摩呵婆罗多时代...\n部落里有个小男孩...\n想学习射箭术 他想拜崇高的大师德鲁格瑞亚为师\n可德鲁拒绝了他\n他是王子和国王的指导者 怎能教地位卑贱的人呢？\n小男孩只有回到丛林\n他制作了一尊德鲁的雕塑...\n把它当作自己的老师 日复一日地练习射箭术\n一天 德鲁外出打猎\n突然...\n他的狗停止了吠声\n七支箭牢牢地封住了它的嘴\n射手能达到如此高超的技艺...\n...以致于狗没有疼痛 也没有流一滴血\n不痛苦 不流血...\n德鲁万分震惊 这个射手到底是谁？\n神射手？\n- 你知道是谁吗？\n- 伊克洛维亚！\n他名叫伊克洛维亚 你的名字也叫伊克洛维亚\n是啊 我的妈妈给我取了这位伟大射手的名字\n- 然后呢？\n- 然后 德鲁很困扰\n这个贱民的技艺超过了他最好的学生 王子阿尔杰\n他必须制止\n德鲁说 \"孩子啊 你在我的雕塑面前练习...\n...要请我当你的老师 你得先付我报酬\"\n伊克洛维亚笑了笑回答 \"无论你要求什么都行 老师\"\n- 你知道德鲁要求什么吗？\n- 什么？\n- 伊克洛维亚右手的大拇指\n- 他的大拇指！\n为什么？\n没有了手指 伊克洛维亚怎么握住弓弦呢？\n他永远也无法胜过王子阿尔杰了\n伊克洛维亚没有切断他的拇指吧？\n伊克洛维亚只是微笑 然后切断了拇指 献给了他的老师\n不痛苦 不流血...\n...不 娜蒂妮 痛之入骨 到处都是血\n毫无畏缩 伊克洛维亚履行了...\n...他的誓约 他害怕责任\n- 什么律法？\n都是错的 我不\n伊克洛维亚错了\n伊克洛维亚错了\n\"我怎么能够把你来比作夏天？\n你不独比它可爱也比它温婉\n狂风把五月宠爱的嫩蕊作践\n夏天出赁的期限又未免太短\n天上的眼睛有时照得太酷烈...\n它那炳耀的金颜又常遭掩蔽\n被机缘或无常的天道所摧折\n没有芳艳不终于雕残或销毁\"\n还记得这首十四行诗吗？\n你第一次来这里的时候 我读给你听过\n而你送了我这朵花\n它现在都枯萎了\n\"但是你的长夏...\n但是你的长夏永远不会雕落\n也不会损失...\"\n妈妈在叫伊克洛维亚\n亲爱的儿子啊 上帝保佑 皇后恢复了知觉\n至今忧伤包围着我\n只有借这笔纸以安慰自己\n只有借这些信件 才能与我的心交谈\n工作之余总是太寂静\n除我之外 就只有城堡的砖墙\n我的存在只为了保护国王\n我的生命何尝不是这城堡的一块砖\n而这城墙已随岁月逐渐腐朽\n曾经敏锐的目光也已变得模糊\n可我的的耳朵却依旧灵光\n它在渴望着什么?\n或许 是你的声音在呼唤着我\n当年迈父亲的双手开始颤抖...\n...他儿子的职责便是伸出援助之手\n你在哪?\n我的儿子\n水?\n要喝水吗?\n我的皇后\n妈妈说 要见伊克洛维亚\n妈妈说 要见伊克洛维亚\n- 喝点水吗?\n- 伊克洛维亚\n- 叫谁?\n亲爱的\n- 伊克洛维亚\n- 谁?\n- 伊克洛维亚\n不!\n不!\n妈妈死了 现在我们不再需要伊克洛维亚了\n伊克洛维亚!\n快来皇后的房间 快点！\n召唤我的儿子 伊克洛维亚\n去叫我的儿子!\n马上!\n爸爸\n你的眼睛怎么了?\n很好啊\n好?\n一点都不好 王子\n刺眼的阳光几乎让他失明了\n瑞秋带他去看医生\n他说他的眼睛...\"有光感\"\n是的 妈妈在信里提到过 我去找医生谈谈\n- 瑞秋还好吗?\n- 她很好 谢谢\n瑞秋一直在皇后身边照料\n她说皇后真的很想念你\n过来\n快点!\n一个王子怎么能这样公开展示自己?\n一个皇后怎么能这样拉王子的耳朵?\n是吗?\n她不能吗?\n那你想要她怎么办呢?\n厉害的小王子\n- 她应该说对不起\n- 对不起 对不起 好了吗?\n你回来就好 哈什\n没能在你母亲最需要你的时候出现 真是羞愧\n无论如何 现在说什么都晚了\n来 进去吧\n- 为你祈福\n- 她一直叫你的名字\n直到离开人世\n我说\"我在这里!\n你的丈夫 叫我的名字\" 她却始终没有\n只呼唤你的名字\n你知道那是什么感觉吗?\n我感觉...\n只呼唤着你的名字...\n然后离去\n大哥\n温柔的心被伤透了 她有所恢复 可还是...\n去吧 去准备\n葬礼必须在日落前开始\n要束白色腰带 都放在你房间里了\n是这里的习俗 人人都很敏感 我们走吧\n妈妈 你最后的遗言 \"要照顾好哈什\"\n给予了我力量...\n...去减轻他的悲痛\n指引我吧 妈妈...\n- 他怎么样?\n- 为何如此担忧啊?\n孩子\n看见那城堡了吗?\n你的心上人越不过那么高的城墙...\n...他向你问过我吗?\n- 他问了\n- 他问什么了?\n- \"瑞秋还好吗？\"\n知道了\n上帝啊 请保佑我的女儿吧\n她是如此纯洁 如此天真\n请别伤她的心吧\n娜蒂妮\n娜蒂妮 你在哪儿?\n噢 亲爱的国王 娜蒂妮公主在家吗?\n娜蒂妮公主不在这里\n噢!\n她去哪里了?\n她和她的妈妈去神殿了\n请转告她 她的哥哥哈什来看她了\n她会的...\n我是说...\n我会的\n那好吧 我回伦敦去了\n你真笨!\n你真笨!\n你怎么没想到?\n妈妈死了 我怎么和她一起去神殿呢?\n- 我不这么认为\n- 别再说你要离开了\n每个人都离开我\n除了瑞秋 可她每天晚上还是要离开我\n瑞秋在这里呆到晚上 我一个人害怕\n陪着我好吗?\n瑞秋\n- 你好吗?\n瑞秋\n- 我很好\n你的父亲告诉我 你一直在照顾我的母亲\n瑞秋一直陪在她身边呢...\n皇后一直很想念你\n她留这封信给你\n她让你回去再看\n她一定说\"照顾好哈什\" 对不对？\n瑞秋\n亲爱的儿子...\n希望当面问候 却只能用信件问候...\n...你的归来\n我小心翼翼地喘息 担心生命就此结束\n我多么希望能再抱你最后一次\n恐怕我等不到那一刻了 这封信...\n...会告诉你一切 关于你身世的秘密\n儿子 杰维尔国王不是你的亲生父亲\n他一直被蒙在鼓里\n被发现的话 他一定不会将王位传给你...\n...你的祖母采取古老的传统...\n...只有贤明的人才能继承王位\n在这些众多人才中\n伊克洛维亚同我们一起\n皇后认为伊克洛维亚最可靠 他超过所有别的人才\n我也这么认为\n你和娜蒂妮有个贵族父亲 他就是伊克洛维亚\n我现在告诉你 因为你的父亲很需要你\n他年纪也大了 眼睛也几乎失明\n要是你父亲知道我泄露了这个秘密...\n...他会认为我亵渎了我们的誓约 我没有尽到守约的神圣职责\n但我相信 誓约是...\n如同古代的摩呵婆罗多所说的\n\"誓约 智慧 真理\"\n誓约生于理由\n誓约也生于智慧\n那便是你的思想灵魂所认为正确的东西\n誓约是你的灵魂所能接受的真理与圣洁\n我已完成了我的誓约\n现在 我的儿子...\n你也必须完成你的誓约\n承诺我 你会照顾好你的父亲\n我承诺 妈妈\n我真想砍掉伊克洛维亚的头颅 把它挂在城门上\n他污染了王室的血统\n你以前怎么没告诉我?\n我自己都不知道\n这些年 我一直信任我们的母亲\n她说过 她选择的是我\n我信任她\n皇后生下一对龙凤胎\n其中一个患有精神问题的女儿\n即使如此 我也接受了\n可今天我才发现...\n...一个没用的保安...\n...我孩子的父亲\n他和我的皇后睡了\n杰伊提 他是我孩子的父亲\n我的妻子...\n和我的保安!\n这些年那么顺从 卑躬屈膝\n他一定乐坏了\n嘲笑我不育 嘲笑我所有的缺点 还有这个 杰伊提!\n伊克洛维亚来了\n混蛋!\n殿下?\n告诉他 杰伊提!\n殿下刚才收到一封死亡威胁信\n信里说 我们必须归还农民的土地...\n...否则国王就会死于非命\n这怎么可能?\n他们没还清欠款 我们收回了他们的土地\n彼克...\n他们的头儿 被发现死在...\n...铁轨上 还有一封自杀遗书\n可他们控告我们谋杀 那群混蛋!\n现在就去 出去!\n去通知我的儿子 他父亲的生命处于危险之中\n谁的命?\n他的亲生父亲 快去!\n杰伊提!\n我把真相说出来了 对吗?\n不管谁是哈什的父亲...\n- ...\n都得死\n- 放心吧 哥哥\n明天日落前 伊克洛维亚将躺在他的火葬柴堆里...\n...就像皇后那样\n王子 我到处找你 你一个人在这里干什么?\n妈妈也是独自一人 伊克洛维亚 每个人都抛弃她\n你愿意和我们在一起吗?\n- 她会因此而高兴的\n- 你得回去了\n你的父亲收到了一封死亡威胁信\n我的父亲?\n我有父亲吗?\n你见过我的父亲吗?\n我想见他\n想告诉他 我和妈妈在这里很寂寞\n想告诉他 我很想念他 他会来陪我们吗?\n对他来说 妈妈算什么?\n无关紧要?\n他力不从心?\n我们走吧...\n...王子\n我很想哭 伊克洛维亚\n却哭不出来\n你能给我力量吗?\n可以吗\n儿子 别这样伸出你的手\n如果我握紧了你的手 会招来灾难的\n那次决定性地甄选...\n你的母亲和我形同陌路 直到最后\n我们决定 不让我们的孩子知道...\n...我是孩子们的亲生父亲\n娜蒂妮无邪的笑声...\n击碎了我的心啊\n我多么想抱着她大声呼喊 \"我是你的爸爸啊\"\n但这是绝不允许的\n绝不\n哈什!\n你在哭吗?\n哈什\n为什么?\n别哭啊 你想妈妈了吗?\n傻瓜 她一直在我们身边 我们有好多的妈妈啊\n一，二，三，四...\n想见见她们吗?\n看看? \"妈妈在排灯节\" 她可爱吗?\n\"妈妈的生日\" 你看啊\n\"妈妈在寺院\"\n\"闪闪发光的妈妈\"\n还有这个是...\n不...\n不是这个\n- 画错了的\n- 给我看那张画\n不!\n很恐怖的\n- 有血\n- 好吧 乖\n告诉我 怎么回事?\n这个秘密不能传出那个房间 他会杀死我的\n- 谁?\n- 我不能告诉你\n要是这个秘密离开那个房间 他就会杀死我的\n哪个房间?\n要是这个秘密离开那个房间 他就会杀死我的\n哪个房间?\n现在 这个秘密绝对不会离开妈妈的房间了\n但是门是打开的\n你紧张吗?\n巴布鲁\n别担心 我们生在民主主义社会 这些国王不过是纸娃娃\n我的警棍远比他们的剑有势力\n嘿 巴布鲁 看见那城墙了吗?\n我的祖父被那城墙活埋了\n就像剪断开幕式上的绸带一样...\n...这些国王杀死我们贱民以求好运!\n见过我的祖父 卡洛维加尔\n若不是因为想念伊克洛维亚...\n...我也不会坚持到现在\n进去吧\n先生 还记得我吗?\n我是帕努 帕努加尔 达南加尔的儿子\n上帝保佑你\n还记得那个市集吗?\n我就是接到铃铛的男孩\n还记得吗?\n你那时好厉害 我整晚都没谁这\n我当时就想 长大以后要和你一样厉害\n现在的我 警察长官帕努加尔\n谢谢你 先生\n我真想再看一次你的精湛技艺\n可以吗...\n求你了?\n我不确定现在能否做到 孩子\n尝试一下\n先见过陛下 走吧\n就一会儿 答应我?\n好吧 来\n那些该死的农民发疯了 他们威胁要杀了我\n做笔录了吗?\n巴布鲁\n别以为我不了解状况 陛下\n为什么有麻烦的国王 只敢藏在巨大的官邸?\n他害怕愤怒的农民?\n难道他不知道这有多懦弱?\n你胆敢嘲弄我?\n别忘了 我是这里的国王\n而你只不过是...\n- 贱民?\n我不想谈这个\n民主社会里 歧视就是一种犯罪\n是哪个法案规定的?\n巴布鲁\n不管哪个法案 手铐会说明事实\n世世代代 我们制定法律 你胆敢在这里跟我说手铐?\n我们统治了两千多年了\n而我们因此受苦五千年\n我的祖父 被这城墙活埋了\n算你走运!\n我是那些贱民的孩子 他们的手都被切下来...\n...只因为摸了一下圣洁的书本\n受够了历史!\n你的保安得跟我离开一个小时\n一小时?\n陛下 民主的意思 就是自由意志 明白?\n很多警察在茶摊 糖果店也有\n用他们来换这点时间 不愿意?\n先告辞了\n可以吗?\n先生\n- 现在就开始吗?\n- 别太早放弃啊 帕努\n你怎么看待一个贱民成为高级官员?\n- 巴布鲁 蒙眼罩!\n- 我不需要\n太阳光够刺眼的了\n带上眼罩 看上去更令人佩服\n那好吧\n准备好了吗?\n- 是的\n我们睁着眼睛都无法做到 而你带上眼罩也行\n淹没...\n...我的父亲为保护国王溺水\n我在湖水边找了他一整晚\n后来妈妈来了\n- 儿子\n这是属于你父亲的 现在由你来保管它了\n从这一天起 他会时刻陪伴着你\n今后 你只有一个誓约 保护好你的国王\n违反誓约的话 我们家族就没落了\n如同坚强的伊克洛维亚 你必须坚决顺从你的誓约\n那天以后 她叫我伊克洛维亚...\n...而我父亲的武器 也成为我唯一的武器\n没人知道这件事 我也布知道为什么要告诉你\n我知道为什么 因为我们俩都一样\n先生 国王收到威胁信的时候你在场吗?\n没有 只有他的弟弟杰伊提在那\n就是住在红瓦平房那儿的人 在铁路附近的?\n再见 先生\n伊克洛维亚快来陪你了 那时候 你会很快乐了\n我该怎么办 我的皇后?\n你总是给我指引\n我该给杰伊提打电话吗?\n陛下还没有打电话来\n\"陛下...\"\n每次你一叫\"陛下\" 我就血液沸腾快发疯了\n要是哈什也让我这么叫他 我会用枪爆他的头\n尤迪 我看起来怎么样?\n\"陛下\"\"如你所愿 陛下\"\n你怎么叫得出来 我都不好意思叫他叔叔\n你叫了他多久的叔叔?\n27年了\n- 52年!\n52年的\"是的 陛下\" \"好的 陛下\"\n\"你的心愿就是我的职责\" \"我的陛下\"\n你好 杰伊提\n- 是的 陛下\n警察刚才来过了\n好的 陛下 我们半小时后到\n现在什么时间?\n- 下午5:\n25\n快了四分钟 请调一下\n我们下午6:\n10见 陛下 6:\n10准时\n爸爸...\n有客人\n吹走了 吹走了 瑞秋的风筝没了!\n切断它!\n把风筝线切断!\n瑞秋故意输给娜蒂妮 娜蒂妮很高兴\n瑞秋是个好女孩 奥迈克\n你把她养育得那么好\n- 很艰辛啊\n每日忙碌 来回为皇室开车...\n...我都没注意 小女孩就变成大姑娘了\n她很可爱 我担心她以后会嫁谁\n一切顺其自然 奥迈克\n马斯克曼先生...\n...告诉你吧\n要是你有个英俊的儿子...\n...我就不担心了\n他们坠入爱河 我们就是亲戚了 是吧\n瞧!\n王子来了\n让我看看\n国王怎么对待这么优秀的儿子?\n皇后死后 他一直很孤独\n真想给他一个拥抱\n父亲\n不 小王子 别叫我父亲\n我没有权力 我只是个卑微的保安\n我也很想抱抱他\n可是我不能 我没有权力去做\n我只是个卑微的保安\n你把她照顾得很好 谢谢你\n看见她高兴 我也开心 现在你来了 那我先退下了?\n请等等\n你还记得妈妈唱的那首歌吗?\n月亮颂?\n- 是的\n能为我唱一曲吗?\n在这儿?\n现在?\n- 拜托\n我很想念妈妈\n听见什么了吗?\n只能用望远镜看看 马斯克曼先生 不是听\n她在唱歌\n\"我的孩子 我的月亮\"\n\"柔软的微笑 我的月亮孩子\"\n\"轻轻地走来...\"\n\"...\n我的眼眸是你的天空 在这里快乐直到永远\"\n\"轻轻地 噢...\n柔柔地\"\n\"乘着风 乘着云 还有满载的微笑\"\n\"微笑吧 我的月亮孩子!\"\n\"柔软的微笑 我的月亮孩子\"\n\"轻轻地走来...\"\n\"...\n我的眼眸是你的天空 在这里快乐直到永远\"\n\"柔软的微笑 我的月亮孩子\"\n\"在这里快乐直到永远\"\n殿下传召你们两人，马上过去！\n马上？\n要去哪里？\n\"吾可否将汝比作夏日璀璨？\"\n\"汝可是更加温婉，惹人怜爱\"\n王后最爱这首十四行诗\n莎士比亚写的\n她去世的时候还在听它\n\"吾可否将汝比作夏日璀璨？\n汝可是更加温婉，惹人怜爱\"\n\"狂野之风摧残五月蓓蕾娇媚\"\n\"夏日匆匆离去，毫不停留\"\nEKlavya，你想在哪里火葬？\n殿下？\n我也不愿这样想，可要是你死于意外\n你希望在哪里火葬？\n殿下...\n我想在我的家乡Dhachigam\n那怎么行！\n你忠心侍候了我们这么多年\n你的火葬将在皇家之地\n挨着你的王后\n趴下，殿下\n杀了他！\n杀了他！\n你在磨蹭什么？\n快杀了他！\n你聋了吗？\n立刻杀了他！\n遵命，殿下 您的心愿就是我的职责\n殿下...\n殿下...\n殿下，他们抓走了我的弟弟 他们说我们谋杀了国王\n他们要绞死我们的儿子 －他们叫我们是农民\n可我们甚至没有足够的土地来做自己的墓地\n他们先是夺走了我们的土地 现在又夺走我们的儿子\n我们曾试着抗议 可他们却杀了我们的带头人BhiKu\n还宣称那是自杀 殿下，请听我们说\n我们是被冤枉的，这是个阴谋\n够了！\n我们再也不能忍受了！\n这骆驼是谁的？\n这骆驼是谁的？\n回答我！\nRajjo？\n我会娶Rajjo为妻\n愿您赐福于我\n我可以进来吗？\n这儿现在是你的家了，Rajjo 你可以自由来往进出\n谢谢\n谢什么？\n谢谢您让我的父亲含笑而去\n您的结婚承诺让他走得很安详\n我看见了他的微笑\n可现在他已经不在了\n我不想用那个承诺绑住您\nRajjo，我...\n－ 请听我说完\n并不是我不想嫁给您\n在我还是孩子的时候 我就梦想着能做您的新娘\n梦想着我们能够在一起\n爸爸总说我太天真\n可我仍然抱着这个信念\n我的眼前总是浮现着...\n...我的梦想因您的爱而成真的情景\n而不是您的施舍，或您的怜悯\n现在可以轮到我说了吗？\nRajjo...\n为什么妈妈信任地将她最后一封信交给你？\n为什么Nandini这么喜欢你亲近你？\n每当听到你的名字时 她的脸上就会燃起神采\n事实是...\n我对你的感觉和她们相同\n可我选择保持沉默 我无法表达自己\n而Nandini可以\n她是这个城堡里唯一心智健全的人\n你知道这城堡...\n它对人们来说很可怕\n这里数不清的传统、风俗和礼教让我发疯\nRajjo...\n我已不再是你梦中的Harsh了\n五十年来，你在这城堡里享尽厚待\n可当国王最需要你的时候 你却躲在了骆驼后面！\nUday！\n那杀手踢掉你手里的枪时 你在干吗？\n唱赞美诗吗？\nUday！\n对EKlavya尊重点\n他们家族世代保护着我们的国王\n是刺眼的阳光让他目不能视 火车的声响阻碍了他的听力\n否则那些没用的农民根本不可能接近殿下\n长官，你查到了什么？\n我们现在只知道 那骆驼是个叫Hariya的农民的\n他现在正在接受讯问\n敲碎Hariya的膝盖，他就会老实点\n那些人不是农民\nEKlavya？\n你看这是几根手指？\n才五英尺远你就看不见 你又怎么知道那些人不是农民？\nEKlavya的父亲为保护国王献出了生命\n他的故事被唱成民谣传颂\n告诉我，EKlavya 你是怎么躲开那些子弹的？\n是那些农民饶了他吧\n他和他们一样 血管里流着低贱的血\n啊！\n我明白了 原来是贱民之间的手足情深啊\n长官，请带他出去做个笔录\n先生...\n您不能因为口头上的侮辱就拔枪相向\n他们问我 当杀手踢掉我手里的枪时...\n...我是不是忙着唱赞美诗\n为了这个，您就想杀了他？\n是的！\n先生，这是不理智的 为什么？\n我并没和任何人说过...\n...我的枪被踢掉了\n他们怎么知道的？\n您什么意思，先生？\n是他们刺杀了我的国王\n我认得他鞋上的钉，就是他们\n你让开！\n－先生...\n先生，请冷静下来\n把他们交给我 这次让我来，他们是我的那只\"鸽子\"\n你做不到的 给我让开\n我向您保证，我会抓到他们 我会找到方法的\n不管是用旁门还是用正道\n您知道是他们杀了BhiKu，那个农民的头儿吗？\n他的自杀遗言是伪造的 他们也会遭到和这一样的命运\n死在同一段铁轨上 带着伪造的自杀遗言\n这是我的工作 我会解决的\n你让开，Pannalal\n如果我让你过去了，你会杀了他们 然后因此被绞死\n那又怎样？\n我不在乎...\n－如果必要，我会逮捕您\n如果必要，我会杀了你\n把枪给我\n血已经流得够多了 把枪给我\n我的盲眼都能看见的东西，您却看不见\n他们谋杀了国王，接下来就会轮到您\n他们会为了王位而杀了您\n外面有辆吉普车 开车离开这里吧\n在你的家乡 每个月你都会收到一份养老金\n你自由了，你走吧\n离开？\n带着国王未报的仇恨离开？\n我只是这座城堡的城墙\n我的存在只是为了保护国王 我生命中的...\n\"我生命中的每一刻 都是这城墙中的一块砖\"\n\"可如今，这城墙已随岁月日渐腐朽\"\n\"曾经巡视着这城堡的敏锐目光在渐渐模糊\"\n您看了我的信？\n是的\n这里面的每一个字都是写给我的，是吗？\n谁...\n是谁告诉您的？\n是妈妈\n她违背了誓约！\n她犯了罪！\n我这辈子都在掩藏这个秘密\n王后犯了罪啊！\n－ 不\n妈妈并没有犯罪\n看看她的信\n\"信乃心之所选\"\n\"信条源自情理\"\n\"那是你的心、你的思想认为正确的东西\"\n妈妈实践了她的信条\n而现在，我 ，您的儿子...\n...将实践我的\n请离开这里吧\n您...\n你...\n孩子...\n你不能这样放逐我\n你不能！\n一个儿子怎么能放逐他的父亲呢？\n但一位国王...\n可以解雇他的皇家护卫\n我，Harshwardhan国王 带着最高的敬意...\n命令你，EKlavya 马上离开Devigarh城堡\n是，殿下！\n爸爸，回到您那平静的村庄去吧\n好好享受简单而快乐的田园生活\n我会把您接回这城堡的 但在那之前...\n我要先清除那些疯狂叫嚣的\"信条\"和\"责任\"\n然后替换上您孙子欢乐的笑声\n我想看到您的笑容 您以前受的苦太多了\nHarsh！\nHarsh，村民们告诉我 你命令EKlavya离开这里\n真的吗？\n为什么？\n看这个\n嘿！\n谁在那儿？\n是你？\n你来这儿干什么？\nHarshwardhan国王他...\n－ 说什么呢\n大声点！\nHarshwardhan国王把我开除出了他的城堡\n我在另找工作\n没有适合我的工作的话\n给您擦鞋也行\n出去！\n我说滚出去！\n别让我再看见你的脸\n您的心愿就是我的职责\n立刻滚出去！\n黑暗已经遮住了我的脸，Udaywardhan\n可我却清楚地看见你的\n我看见了杀死国王的凶手的脸\n你的子弹用光了\n现在任何一种声响...\n...都会意味着你的死亡\n我仍然能听见你，Udaywardhan 我听见了你的每一次呼吸\n小声点儿\n安静些，别出一点儿声\n安静才能活命\n要是你现在呼吸了 我就能追随着我的信条而行了\n你的死亡就是我的责任\n你怎么来了？\nHarshwardhan国王把我开除出了他的城堡\n我给您带了一份离别礼物\n很好，就放在门口吧\n您不看看吗？\n我说了...\n这里面是什么？\n打开\nUday？\n你对我儿子做了什么？\n他在哪儿？\nUday在哪儿？\n他正沿着铁轨散步呢 您要和他一起吗？\n你见过EKlavya笑吗？\n没人见过...\n除了我\n那时他解救了挨打的我\n谁打你？\n－我爸爸\n你一定是干了什么坏事 －不是我，是你\n我？\n我干了什么？\n你不记得了？\n－ 我想不起来了\n王后那时揪着你的耳朵\n你大喊着 \"一位王后怎么能这样揪住她的王子的耳朵？\"\n哦，是啊 那时我在大家面前亲了你\n后来EKlavya在爸爸揍我的时候解救了我\n他带我去骑骆驼，还给我番石榴吃\n可我还是很难过 － 为什么？\n我说，\"我还没有回亲他呢！\"\n当他听到这句话的时候\n他笑了\n就像现在的你一样\n我得告诉你一些事\n什么事，Harsh？\n这是我父亲的枪\n要不是为了你和Nandini\n我向神明起誓，我...\n你吓到我了\n我还害怕...\n怕你会离开我\n绝对不会的，我保证...\n等等，先听完我要说的话\n然后再作承诺\n你干了什么？\n你杀了我儿子！\n他杀了我的国王\n我不过是实践了我的信条 － 实践了你的信条？\n干得好！\n非常好！\n那就去杀了那个下令刺杀国王的人啊\n告诉我他的名字\n我就会带他的头来见你\n你会带你儿子的头来见我？\n好！\n很好！\n是Harshwardhan下的刺杀命令 让我看看你怎么取他的人头！\n是Harsh！\nHarshwardhan，你的儿子！\n砍下你儿子的头吧，实践你的信条\n是Harshwardhan！\n别走，Rajjo\n求你了\n这是为谁？\n你杀了我爸爸，Harsh\n你以职责之名杀了我儿子 现在就以职责之名，去杀了你儿子吧\n你说谎！\n！\n－这是事实，他...\nNandini睡了吗？\n是您？\n您在这儿干什么？\n在等你\n您的脸上有血\n是谁的？\n我不知道\nUdaywardhan的...\nJyotiwardhan的...\n我把他们都杀了\n而现在您来这里杀我？\n是的\n但在我的短剑射中目标之前\n我必须听你说出真相 是你下令杀了国王吗？\n是我\n那么我，这个城堡的皇家护卫\n同时也是你的父亲\n必须履行我神圣的职责\n准备受死吧\n我的亲生父亲来杀我\n多么好的死法\n我准备好了\n为什么你要这么做？\n我从没想过，你会为了王位杀人...\n您竟以为我杀他是为了王位吗？\n那就动手吧 把你的短剑刺入我的心脏\n来啊！\n您无法投出那把短剑\n因为您知道您的儿子绝不会这么下作\n那是为了什么？\n为什么要犯下这么可怕的罪？\n为什么？\n信乃心之所选\n我选择救您的命\n看看这幅画，他杀了我妈妈\n他用他的双手扼死了她\n您知道为什么吗？\n因为她的双唇一直呼唤您的名字\n我知道下一个死的会是您\n您知道您的身价是多少吗？\n只有两千五百万！\n我用十倍的价钱救了您的命\n谎言！\n！\n都是谎言！\n这不是真的！\n我的国王绝不会这么做\n永远不会\n他不会的\n你听到的都是Nandini的一面之词\n这有可能都是她的幻想\n就像她画的那些飞马\n你别想动摇我的决心\n那就别让它动摇啊，EKlavya\n切下你的拇指，实践你的信条\n信条？\n信条超越所有的疑问\n信条是无可争议的\n如果这时我的信条动摇了\n我家九代人都会在地狱承受焚身之痛\n妈妈告诉我要履行自己的职责 就像那个坚定的EKlavya\n你的死亡...\n...就是我的职责\n可是，您的手在颤抖\n当年迈父亲的双手开始颤抖\n他儿子的职责就是伸手帮他一把\n我的儿子啊，你身在何方？\n－ 我迷失了方向\n但我会找回我的路\n我的双手沾染了鲜血\n那是Rajjo父亲的血\n我永远也无法洗刷干净\n就让这些血迹随着我一起燃烧殆尽吧\n好好对待Nandini\n告诉她，妈妈一个人太寂寞了 所以我去和她作伴了\n我会告诉妈妈，我履行了我的诺言\n我还要乞求Rajjo父亲的宽恕\n我会完成您的职责\n您的职责...\n就是我的死亡 － 住手，Harsh！\n住手！\n这是我的职责\n我的手也许在颤抖，可我的心很坚定\n我的眼睛看不清了\n可我的耳朵不会遗漏任何动静\n一句...\n只要...\n...一句话...\n我的短剑就会找到你\n爸爸\n爸爸\n我以为您从不会失手\n我没有失手，这是我投得最好的一次\n与其砍下我的拇指\n我选择弄伤那只想要杀死我儿子的手\n你是对的，孩子\nEKlavya做错了 EKlavya做错了\nEKlavya做错了\n错得离谱\n妈妈，请赐予我力量\n让我能追随您的脚步\n愿我的良知能指引我\n我的心要我原谅Harsh\n他是做错了事，但他的心灵是纯洁的\n他本想用他的生命来赎罪\n已经有太多的生命消逝，太多的鲜血流淌\n如果必须有人来阻止这一切\n就让我来吧\n请保佑我，妈妈...\n让我能减轻他的痛苦，让他忘记...\n好好照顾他吧，孩子\n他有一颗高尚的心灵 看看他为我们做了什么...\n整个村庄都在这儿感谢他\n他归还了我们的土地\nHarshwardhan国王万岁！\n.\n万岁...\n...Harshwardhan国王！\nHarshwardhan国王万岁！\n我归还你们的土地是出自我的私心\n我想让我的父亲感到自豪\n今天，你们所有人都是我的见证\n我在此承认EKlavya是我的父亲\n孩子\n爸爸\n警察怎么来了？\n－ 是来逮捕我的\n是时候抵偿被我杀死的那两条人命了\n恐怕我有些坏消息要宣布\n我已经准备好了，走吧...\n－ 等等\n今天，我们搜查了Udaywardhan的房间\n在DVD盒里找到了一封自杀遗言\nBablu...\n您看\n真是皇室的耻辱\n他们知道我就快逮到他们了 于是就找了个简单的解脱方法\n他们跳到一辆飞奔的火车前面，自杀了\n真可惜 他们终究还是逃出了我的掌心\n我不会宽恕他们的\n这字挺好的，对吧\n很好\n好极了！\n是不是，爸爸？\n陛下叫你们俩去 马上!\n现在?\n去哪儿?\n皇后喜欢十四行诗\n莎士比亚\n她去世的时候 我正给她念\n伊克洛维亚 你想在哪里火葬?\n陛下?\n苍天不容 要是你死于意外...\n...在哪里火葬你?\n陛下...\n我的家乡\n那怎么行!\n你服侍了我们那么久\n你的火葬...\n应该有皇室的排场\n躺在你的皇后的旁边\n趴下 陛下...\n杀死他!\n杀死他!\n你在干什么?\n杀了他!\n你聋了吗?\n快动手!\n是的 陛下 你的心愿就是我的职责\n陛下...\n陛下...\n陛下 他们抓走了我的弟弟 他们说是我们杀了国王\n他们要绞死我们的孩子\n- 他们说我们是农民\n可我们连耕地都没有\n刚开始没收我们的土地 现在又抓我们的孩子\n我们想反抗 他们却杀死了我们的领袖彼克...\n...还说他是自杀的 陛下 听我说\n我们被陷害了\n够了 我再也不能忍受了\n谁的骆驼?\n这是谁的骆驼?\n回答我!\n瑞秋...\n?\n我会和瑞秋结婚\n上帝保佑你\n我能进去吗?\n现在这里是你的家了 瑞秋 你可以来去自由的\n谢谢你\n谢什么?\n谢谢你让我的父亲没有留下遗憾\n你的承诺 让他走得很安详\n我看见他笑了\n现在他走了...\n我不会要求你实现承诺\n瑞秋 我...\n- 请听我说完\n但我并不因你的承诺而高兴\n当我还是个小女孩...\n...我就梦想有一天能嫁给你\n现在梦想实现了\n父亲总认为我很天真\n可我有这信念\n我总是觉得...\n...你会真的爱我\n而不是你的同情和可怜\n我能说话了吗?\n瑞秋...\n为什么妈妈信任地把最后一封信交给你?\n为什么娜蒂妮那么爱你?\n一听见你的名字 她都很高兴\n事实是...\n...我也有同样的感觉\n可是我依然保持沉默 我不能表达自己\n娜蒂妮可以\n她是城堡里唯一坦白的人\n你知道这里...\n对每个人而言都是危险的\n这座城堡里的各种礼教约束 很让我头疼\n瑞秋 ...\n我再也不是你理想中的哈什了\n这五十年来 你在这里享尽了优待\n当国王最需要你的时候 你却躲在驼群后面\n尤迪!\n凶手踢掉你的枪时 你在打瞌睡?\n尤迪!\n你得尊重伊克洛维亚\n他们家族世代保护我们的国王\n他耳聋眼瞎的\n否则那些没用的农民也碰不到陛下\n警官 你查到什么了吗?\n我们查出 驼群是一个叫哈瑞亚的农民的\n他正在接受审问\n砍掉哈瑞亚的腿 那能让他老实点\n凶手不是农民\n伊克洛维亚?\n这里有几个手指?\n这么近都看不见 又怎么判断凶手不是农民?\n伊克洛维亚的父亲为保护国王而牺牲\n很多人唱民谣歌颂他\n告诉我 伊克洛维亚 你怎么就躲过那些子弹了?\n那些农民饶了他\n同样的贱民\n噢!\n我明白了 那些混球的兄弟伙\n警官 请暂时带他出去\n先生...\n你不能用枪去反驳\n他们说凶手踢掉你的枪时...\n...我在打瞌睡\n因此你就要杀了他们?\n是的!\n先生 那是不理智的 为什么?\n我并没有跟谁说过...\n...我的枪被凶手踢掉了\n他们怎么会知道?\n你说什么 先生?\n他们暗杀了我的国王\n我认出了他鞋上的钉 就是他们\n- 让我去\n- 先生...\n请冷静\n让我去解决 这是我的职责 他们是我的\"猎物\"\n你解决不了 给我让开\n我向你保证 我会逮捕他们 不管...\n正当与否\n你知道他们杀了农民领袖彼克?\n他的自杀遗书是假的 他们会使一样的招\n一样的铁道口 一封伪造的自杀信\n这是我的工作 我会解决的\n让我去 帕努\n要是我让你去了 你杀了他们 会被判绞刑的\n那又怎样?\n我不在乎...\n- 那我不得不拘捕你了\n那我不得不先杀了你\n把枪给我\n够多的伤亡 给我\n你不清除我眼睛盲的程度\n他们杀了国王 你会是下一个\n他们一样会在驼群后杀你\n外面有辆吉普车 开车离开这儿\n那边会有人接你\n你自由了 走吧\n走?\n杀国王的凶手还没有抓到\n我就是这城堡的墙\n我的存在只为了保护国王 每一刻...\n...\"我的生命何尝不是这城堡的一块砖\n而这城墙已随岁月逐渐腐朽\n曾经敏锐的目光也已变得模糊\"\n你看过我的信?\n是的\n每个字都是写给我的 对吗?\n谁...\n谁告诉你的?\n妈妈\n誓约!\n她违反了!\n我承诺一生隐埋秘密\n皇后违反了誓约!\n- 不\n妈妈没有\n她的信\n\"誓约 智慧 真理\"\n誓约生于理由和智慧\n誓约是你的灵魂所能接受的真理与圣洁\n妈妈履行了她的誓约\n而我 你的儿子...\n...也将履行我的誓约\n请离开这个地方\n陛下\n先生\n儿子\n你不能流放我\n你不能!\n一个儿子怎么会流放父亲?\n而一个国王...\n...可以流放王室守卫\n我 哈什国王 以最崇高的权力...\n命令你 伊克洛维亚 马上离开这里\n遵命!\n父亲 回到那平静的乡村\n享受简单快乐的农村生活\n我会接你回来 那时候...\n...我会甩掉脑子里那些发狂的 \"誓约\"和\"职责\"\n取而代之的是欢庆 和你孙子带来的快乐\n我希望看见你的笑容 你太苦了\n哈什!\n哈什 村民们告诉我 你命令伊克洛维亚离开这里了\n真的吗?\n为什么?\n看这个\n嘿!\n是谁?\n你?\n你来这儿干什么?\n哈什国王...\n- 说什么\n大声点!\n哈什国王让我离开了城堡\n我得另谋职业\n什么工作都行\n我可以为你擦皮鞋\n出去!\n给我滚出去!\n别再让我看见你的脸\n你的愿望就是我的工作\n快出去!\n黑暗淹没了我的脸 尤迪\n可我却看得清你的脸\n我看见杀死国王的凶手的脸\n你的子弹用尽了\n再发出一点声音...\n...就是你的死期\n我听着呢 尤迪 我能感觉你的呼吸\n安静\n安静 别出声\n安静才能活命\n要是你再喘息 我就解决你\n让你死是我的职责\n你来这儿干什么?\n哈什国王让我离开了城堡\n我给你送来了告别的礼物\n那好 放在门口就离开吧\n你不看看?\n我说...\n是什么?\n打开\n尤迪?\n你对我儿子干了什么?\n他在哪儿?\n尤迪在哪儿?\n他在铁轨旁徘徊 要和他一起吗?\n你见过伊克洛维亚笑吗?\n没人见过...\n除了我\n我挨打的时候他帮了我\n谁打你?\n- 爸爸\n你一定做了坏事\n- 不是我 是你\n我?\n我做了什么?\n你不记得了?\n- 不记得了\n皇后扯你的耳朵\n你哭喊着 \"一个皇后怎么能这样拉王子的耳朵?\"\n是啊 我当众亲你\n伊克洛维亚帮我不挨爸爸的打\n还带我去骑骆驼 给我买石榴吃\n但我还是很可怜\n- 为什么?\n我说\"我不会去亲回来了\"\n他听了...\n...就笑了...\n...就和现在的你一样\n我得告诉你一些事\n什么事 哈什?\n这是我父亲的枪\n要不是为了你和娜蒂妮...\n...我向上帝发誓 我...\n你别吓我\n我也吓得要命 ...担心你会离开我\n不会的 我保证...\n...等等 先听我说...\n...然后再承诺\n你干了什么啊?\n你杀了我的儿子!\n他杀了我的国王\n我履行我的职责\n- 履行你的职责?\n干得好!\n非常好!\n现在去杀了那个人 那个谋划杀死国王的人\n告诉我他的名字\n我去取他的人头\n你去取你儿子的人头?\n好啊!\n太好了!\n哈什安排的谋杀 让我等着你取他的人头!\n哈什!\n哈什 你的儿子!\n砍掉他的头 履行你的职责\n哈什!\n等等 瑞秋\n求你了\n为谁?\n你杀了我的父亲 哈什\n职责让你杀了我的儿子 为了职责 去杀你的儿子啊\n谎言!\n- 是真的 他...\n娜蒂妮睡了吗?\n你?\n你来这里干什么?\n等你\n你脸上有血\n谁的血?\n我不知道\n尤迪的...\n杰伊提的...\n我杀了他们俩\n现在你来这里杀我\n是的\n在我的匕首确定目标之前...\n...我必须知道真相 是你谋划杀了我的国王吗?\n是我\n那么我 城堡的守卫...\n...以及你的父亲...\n...必须履行我的职责\n准备受死吧\n我的亲生父亲将杀了我...\n...多么好的死法\n我准备好了\n为什么这么做?\n我无法想像 在驼群那儿你几乎杀了我...\n...你认为是我...\n...在驼群后面?\n继续吧 把你的匕首插入我的心脏\n来吧!\n你做不到\n因为你知道你的儿子决不会退缩\n为什么?\n为什么这么罪恶?\n为什么?\n\"誓约 智慧 真理\"\n我救了你的命\n看这个 是他杀了妈妈\n他的双手杀了她\n知道为什么吗?\n因为她一直呼唤着你的名字\n我知道他们会杀了你\n而你的王子为你做了什么?\n两千五百万!\n我给了他们十倍让你活命\n撒谎!\n全在撒谎!\n不可能是真的!\n我的国王不会这么干\n永远不会\n他不会的\n这些只是娜蒂妮的话\n这可能是她的幻想...\n...她的胡思乱想\n别试图改变我的决心...\n...醒醒吧 伊克洛维亚\n砍掉你的拇指 履行你的誓约\n誓约?\n誓约的前提是事实\n誓约站在真理这一边\n要是这一刻我的誓约有所动摇...\n...违反誓约的话 我们家族就会被埋葬\n妈妈告诉我履行自己的职责 就像坚强的伊克洛维亚一样\n你的死...\n...是我的职责\n可是 你的手在颤抖\n当一个年迈的父亲双手开始颤抖...\n...他儿子的职责便是伸出援助之手\n你在哪 我的儿子?\n- 我迷失了方向\n但我会回来\n我的双手沾满了血\n瑞秋的父亲\n一辈子也洗不干净\n让这些血迹随我的火葬一起被焚毁\n请照顾好娜蒂妮\n告诉她 妈妈很孤单 所以我离开她去陪伴妈妈\n我可以告诉妈妈 我履行了我的承诺\n我可以祈求瑞秋父亲的宽恕\n我可以完成我的使命\n你的职责...\n就是我的死亡\n- 住手 哈什!\n别!\n这是我的誓约\n尽管我的双手颤抖 但我内心坚定\n我眼瞎但...\n...我的耳朵好使\n我...\n只要...\n...一句话 ...\n...我的匕首会找到你\n父亲\n父亲\n我以为你从不会失手\n我没有失手 那是我最好的一掷\n\"砍掉我的拇指...\n...我的职责是你的死亡\"\n...那会杀了我的儿子\n你是对的 儿子\n伊克洛维亚错了\n伊克洛维亚错了\n错得那么严重\n妈妈 给我力量...\n...追随你的脚步\n给我指引\n我的心告诉我应该原谅哈什\n他支支吾吾 可他的心是纯洁的\n他愿意为此付出一生的代价\n太多的生命消逝 太多的血流失\n必须有人制止\n交给我吧\n祝福我吧 妈妈...\n...让我去减轻他的痛苦 帮他忘记所有的难过...\n...好好照顾他 孩子\n他有着高尚的心灵 看看他为我们所做的一切...\n...所有村民都来感谢他\n他归还了我们的土地\n哈什国王万岁\n万岁...\n- ...\n哈什国王!\n哈什国王万岁!\n我归还你们土地有自私的原因\n我想让我的父亲感到自豪\n今天 所有在场的人们都是我的见证人...\n...我在此证实 伊克洛维亚是我的父亲\n儿子\n父亲\n警察来干什么?\n- 来逮捕我的\n是时候以命抵命了\n恐怕我有些坏消息要宣布\n我准备好了 走吧...\n- 等等\n今天 我们调查了尤迪的房间...\n...在DVD盒里发现了自杀遗书\n巴布鲁...\n看看吧\n皇室的人渣\n他们知道我要抓他们 所以他们选择了更简单的解脱...\n...往高速行驶中的火车上跳 系自杀\n太遭了 终究还是逃出了我的掌心\n我心里是怎么都无法宽恕他们的\n先生 好手迹 不是吗?\n很好\n太好了!\n不是吗?\n爸爸\n在远古的摩诃婆罗多时代\n有个低种姓的男孩...\n渴望能学会射箭的技艺 他想拜入伟大的导师Dronacharya门下\n可是Drona拒绝了他\n他是王子和国王的老师 怎能去教导一个底层阶级的卑贱之人呢？\n男孩儿回到了丛林\n制作了一尊Drona的雕像\n并尊这座雕像为师 然后夜以继日地苦练箭术\n有一天，Drona外出打猎\n突然，他的猎狗不再叫唤\n七支箭矢牢牢地封住了它的嘴\n这位射手的技艺是如此高超\n以至于那狗都没有感受到痛楚 也没有流下一滴血\n没有痛楚，没有流血 没有痛楚，没有流血\nDrona震惊万分 这个技艺高超的射手是谁？\n是个不可思议的神射手吗？\n你知道是谁吗？\n－ EKlavya！\n他叫EKlavya 你的名字也叫EKlavya\n是啊 我妈妈就是照着那个伟大的射手给我取的名字\n片名：\n「皇家护卫」\n然后呢？\n－然后，Drona很困扰\n这个贱民的技艺 超过了他最好的学生Arjun王子\n他必须得加以阻止\nDrona说\"孩子，你在我的雕像前练习箭术...\"\n\"...\n把我认作你的导师 这样你就得付给我报酬\"\nEKlavya笑着说 \"您想要什么都可以，我的老师。\"\n你知道Drona要了什么吗？\n－什么？\nEKlavya的右手拇指 －他的拇指！\n为什么？\n没有了拇指，EKlavya怎么拉弓弦呢？\n这样他就永远不能盖过Arjun王子的光采\nEKlavya没有切下拇指，对吗？\nEKlavya仅仅笑了一下，切下了拇指 然后呈在了他老师的脚下\n没有痛楚，没有流血 没有痛楚，没有流血\n不，Nandini 是痛入骨髓，血流如注\n但是，EKlavya毫不退缩地实践了他的信条...\n...他神圣的责任 －这是什么信条？\n这个信条是不对的 要是我就拒绝\nEKlavya做错了\nEKlavya做错了\n\"吾可否将汝比作夏日璀璨？\"\n\"汝可是更加温婉，惹人怜爱\"\n\"狂野之风摧残五月蓓蕾娇媚\"\n\"夏日匆匆离去，毫不停留\"\n\"苍天之明眸时而过于灼热\"\n\"而其金色脸容亦常蒙上荫翳\"\n\"一切优美之形象总不免褪色\"\n\"遭遇偶然摧折，抑或自然老去\"\n还记得这首十四行诗吗？\n你第一次来Devigarh的时候 我念给你听过\n你还送了我这朵花\n它现在都已经枯萎了\n\"而汝之长夏...\"\n\"而汝之长夏却永远繁茂不凋\"\n\"秀雅风姿将...\"\n妈妈在叫EKlavya\n我亲爱的儿子，神明保佑 王后的病情有所好转\n可是阴郁仍吞噬着我\n提笔写信是我唯一的慰藉\n我的心只有通过这些文字诉说衷肠\n剩下的则是沉寂\n我只是这座城堡的城墙\n我的存在只是为了保护国王\n而我生命中的每一刻都是这城墙中的一块砖\n可如今，这城墙已随岁月日渐腐朽\n曾经巡视着这城堡的敏锐目光在渐渐模糊\n而我的耳朵却不会遗漏任何动静\n它在渴望着什么？\n也许，是想听到你对我的呼唤\n当年迈父亲的双手开始颤抖\n他儿子的职责就是伸手帮他一把\n我的儿子啊，你身在何方？\n水？\n要喝水吗，我的王后？\n妈妈说，让EKlavya来\n妈妈说，让EKlavya来\n你要喝点儿水吗？\n－EKlavya\n你要叫谁，亲爱的？\n－EKlavya\n谁？\n－EKlavya\n不！\n不！\n妈妈死了 现在我们不需要叫EKlavya了\nEKlavya！\n快来王后的房间，马上！\n去传召我儿子，EKlavya\n去叫我儿子！\n快点！\n爸爸\n您的眼睛怎么样了？\n很好啊\n很好？\n一点儿也不好，王子\n刺眼的阳光让他几乎失明\nRajjo带他去看了医生\n医生说他的眼睛是...\n\"光敏性\"\n是啊，妈妈在她的信里提到过 我会去找医生谈谈\nRajjo还好吗？\n－她很好，谢谢关心\n王后生病时，Rajjo一直悉心照料\n她说王后真的很想念您\n过来\n快点！\n一位王子怎么能这样出去抛头露面？\n一位王后怎么能这样揪住她的王子的耳朵？\n哦？\n她不能这样吗？\n那你想让她怎么做啊，厉害的小王子？\n她应该说对不起 －对不起，对不起，可以了吗？\n你回来真是太好了，Harsh\n没能在你母亲最需要你的时候出现 你真该羞愧\n无论如何，现在说什么都太晚了\n走，进去吧\n望您赐福 －她一直在叫着你的名字\n然后离开了我们\n我说，\"我在这里！\"\n\"你的丈夫就在这儿，叫我的名字\" 可她却始终没叫\n只是一直唤着你的名字\n你知道这是什么样的感觉吗？\n我感到很...\n只呼唤着你的名字 然后...\n她就走了\n大哥\n温柔的心总是受伤 她本来有所好转，可还是...\n去吧，去准备一下\n葬礼必须在日落之前开始\n去换上白色的缠腰布 已经在你房间里准备好了\n这是这里习俗，他们很在乎这个的 走吧\n王后啊，您在临终前说\"好好照顾Harsh\"\n请您赐与我力量\n让我能减轻他的悲痛\n请您指引我，王后...\n他怎么样了？\n－怎么这么着急啊，孩子？\n看见那座城堡了吗？\n你的爱比不过那高高的城墙...\n他问起我了吗？\n－问了\n他问了什么？\n－\"Rajjo还好吗？\"\n看吧\n神啊，请保佑我的女儿\n她是这么单纯，这么天真\n请不要伤她的心\nNandini\nNandini，你在哪儿？\n国王啊国王，Nandini公主在家吗？\nNandini公主不在\n哦！\n那她会在哪里呢？\n她和她的妈妈去神庙了\n那请告诉她，她的Harsh哥哥来看过她\n她会的...\n我是说...\n我会的\n好吧，那我就回伦敦去了\n你笨蛋！\n笨蛋！\n你难道不知道吗？\n妈妈死了 我怎么和她一起去神庙呢？\n我没想到 －不要再跟我说什么离开了\n所有人都离开我\n只除了Rajjo 可她每天晚上还是会离开我\nRajjo，晚上留在这里吧 我一个人害怕\n你会留下吧，Rajjo？\n你还好吗，Rajjo？\n－我很好\n你爸爸都告诉我了 你把我妈妈照顾得很好\nRajjo一直陪在她身边...\n一直一直\n王后真的很想念您\n她给您留了一封信\n她嘱咐说让您独自拆阅\n然后她说：\"好好照顾Harsh\" 是吧，Rajjo？\n亲爱的儿子...\n不知我或者我的这封信...\n能不能在你回来的时候祝福你\n我每一次呼吸都小心翼翼 深怕那会是我的最后一口气\n我多么希望能活着抱你最后一次\n但我恐怕是等不到那一刻了 只能用这封信...\n...来告诉你，你的身世之谜\n儿子啊，Jaywardhan国王并不是你的生父\n他也不可能是 那是神所不乐见的\n当他被发现无法为王国带来继承的子嗣时\n你的祖母求采取了一个古老的传统\n就是从一位贤者那儿得到一个继承人\n这个追求将我们带到了圣河甘戈特里的岸边\nEKlavya也和我们在一起\n王太后信任EKlavya更甚于任何贤者\n我也一样\n你和Nandini有个高尚的父亲 就是EKlavya\n我现在将一切告诉你，是因为你的父亲需要你\n他日渐衰老，眼睛也几乎失明\n如果你父亲知道我向你泄漏了这个秘密\n他一定会觉得我亵渎了我们的誓约 我违背了我的信条，我神圣的职责\n但我相信 信条应该是如伟大的《摩诃婆罗多》所说\n\"信乃心之所选\"\n信条源自情理\n信条源自智慧\n那是你的心、你的思想认为正确的东西\n信条是你的灵魂所能接受的真理和圣洁\n我已经实践了我的信条\n现在，我的儿子...\n你必须实践你的\n答应我，你会好好照顾你的父亲\n我答应您，妈妈\n我要砍下EKlavya的脑袋 然后把它挂在城门上！\n他玷污了我们皇室高贵的血统\n为什么你以前不告诉我？\n那时我自己都不知道\n这么多年来我一直相信着我们的母亲\n她说那人是甘戈特里的一位贤者\n我相信了她\n王后生下了双胞胎\n其中有一个 是神志有问题的女儿\n即使那样，我也接受了\n可是今天我才发现\n一无是处的护卫...\n他才是我的孩子的父亲\n他和我的王后睡过\nJyoti，他生下了我的孩子\n我的妻子...\n和我的护卫！\n这么多年来他是多么顺从啊 卑躬屈膝的\n他心里一定是笑翻了\n笑我的不育，笑我的一切缺点 甚至还有这个，Jyoti！\nEKlavya来了\n混账东西！\n殿下？\n告诉他，Jyoti！\n殿下刚才收到了一份死亡威胁\n来人说，我们必须把农民的土地归还他们\n否则国王就会死于非命\n怎么会这样？\n他们无法还清欠下的债务 我们就收了他们的土地\nBhiKu，他们的头领 被发现死在了铁轨上\n身上还有一封自杀遗言\n可他们控诉是我们谋杀 这群狗杂种！\n你现在就去，去啊！\n去找我的儿子，然后告诉他 他父亲的生命正处于危险之中\n谁的生命？\n是他父亲的 快去！\nJyoti\n我说的是实话，对吗？\n不管Harsh的父亲是谁\n他都会死 －这毋庸置疑，大哥\n明天日落之前 EKlavya就会在他的火葬柴堆上被烧焦\n就像我们的王后一样\n王子，我到处找您 您一个人在这儿干什么？\n妈妈现在孤身一人，EKlavya。\n所有人都遗弃了她\n你能陪我们坐会儿吗？\n她会因此而高兴的 －您现在需要返回城堡\n您父亲收到了一份死亡威胁\n我父亲？\n我有父亲吗？\n你见过我父亲吗？\n我想见他\n告诉他，我孤单地坐在这儿陪着我的妈妈\n告诉他，我想念他 他能来陪我们吗？\n妈妈对他来说算什么？\n无关紧要吗？\n他连这都做不到吗？\n我们走吧...\n...王子\n我想大哭一场，EKlavya\n可是却流不出眼泪\n你能给我些支撑吗？\n拜托了\n儿子啊，请别这样伸出你的手\n如果我握住了你，就会招来灾难！\n在那次宿命的甘戈特里之旅后\n你的母亲和我就形同陌路，直到最后\n我们起过誓，不会让我们的孩子知道...\n我才是他们的亲生父亲\nNandini天真无邪的笑声啊...\n击碎了我的心\n我多想抱着她大喊\"我是你的爸爸啊\"\n但这是决不允许的\n决不\nHarsh！\n你在哭吗，Harsh？\n为什么？\n别这样 你是想妈妈了吗？\n她一直在我们身边啊，傻瓜 我们有很多的妈妈\n一，二，三，四...\n你想见她们吗？\n看到了吗？\n\"排灯节的妈妈\"，她很漂亮对吧？\n\"过生日的妈妈\" 你看啊\n\"在神庙的妈妈\"\n\"一闪一闪亮晶晶的妈妈\"\n还有这个是...\n不，不是这张\n这张画得不好 －给我看那张画\n不要！\n这张很可怕\n上面有血 －好了，好了\n告诉我，那上面是什么？\n这个秘密不能传出那个房间 他会杀了我的\n谁？\n－我不能告诉你\n如果这个秘密传出了那个房间 他就会杀死我\n哪个房间？\n如果这个秘密传出了那个房间 他就会杀死我\n哪个房间？\n好了，这个秘密永远不会离开妈妈的房间\n可是门是开着的\n你很紧张吗，Bablu？\n别担心，我们生活在一个民主的社会 这些个国王不过是纸老虎\n我的警棍比他们的剑更有威力\n嘿，Bablu 瞧见这城墙了吗？\n我的祖父就被活埋在这墙里\n就好像新建筑开幕时要剪断彩带一样\n这些国王杀死我们这些贱民以求好运！\n来见过我的祖父，Kalwa Chohar\n要不是我渴望再见到EKlavya\n我甚至都不愿在这破城堡撒尿！\n来吧\n先生，还认识我吗？\n我是Pannu，Pannalal Chohar Dhannalal Chohar的儿子\n愿您赐福\n您还记得那次十胜节的集市吗？\n我就是那个抓下铃铛的男孩\n想起来了吗？\n你那时好厉害 我整晚都睡不着觉\n我那时就想，我要成为像您那样杰出的人\n而现在我做到了 我，警察局长Pannalal Chohar\n谢谢您，先生\n只要能让我再看一次您那精湛的技艺 我愿付出一切\n可以吗？\n求您了\n我不确定现在还能否做到，孩子\n试试又何妨\n先去见过殿下吧 请进\n等等 您能保证吗？\n是的，进来吧\n这些该死的农民都疯了！\n他们威胁说要杀了我\n你在做笔录吗，Bablu？\n不要以为是我做不好笔录，殿下\n为什么有麻烦的国王要躲在他巨大的宫邸里？\n他是害怕那些贫穷赤裸的农民的激愤吗？\n难道他不明白\"时光变迁，岁月无情\"吗？\n你竟敢嘲笑我？\n别忘了，我是Jaywardhan国王\n而你只不过是个...\n－贱民？\n我可不愿这么说\n在我们民主的社会里，歧视可是犯法的\n是哪个法案规定的来着，Bablu？\n别管是哪个法案了，手铐会说明事实\n世世代代，我们就是法律 你竟敢在这里和我说手铐？\n我们已经统治了2000年了\n而我们已经受了5000年的苦了！\n我就是那个被活埋在这城堡里的 低种姓男人的孙子\n你是生得命好！\n而我是那些贱民的孩子 他们的手被砍断了\n只因为他们触碰了圣书\n真是受够历史了！\n你的保安会在一小时内到达\n一小时？\n让我来告诉你\"民主\"的意思，殿下 就是\"自由意志\"，明白了？\n有的警察会在茶棚里，有的在甜品店\n集合他们需要时间，不是吗？\n我告退了\n可以吗，先生？\n现在可以展示给我看了吗，先生？\n－你还真不容易死心，Pannalal\n您以为一个贱民是怎么变成一个高阶官员的？\nBablu，眼罩！\n－不需要了\n这阳光就已让我目不能视\n可那时您就是戴着眼罩的 那让人更印象深刻\n好吧\n准备好了吗，先生？\n－是的\n我们睁着眼都无法做到 您戴着眼罩是怎么做到的？\n淹溺...\n我的父亲为了保护他的国王而淹溺在湖里\n我在湖里找了他整晚\n然后妈妈走了过来 －孩子\n这曾属于你的父亲 现在由你来接受并继承它\n从今天开始，他将通过你重生\n从此以后，你就只有一个信条 就是保护你的国王\n如有违背 吾家九代将会在地狱接受焚烧之痛\n如同那位坚定的EKlavya 你也必须追随你的信条\n从那天以后，她就叫我Eklavya...\n而我父亲的利剑成了我唯一的伙伴\n没有人知道这个故事 我也不知道我为什么会告诉你\n我来告诉你为什么 因为你跟我是一样的人\n先生，国王受到威胁的时候您在场吗？\n没有，只有他的弟弟Jyoti在\n就是住在那铁轨附近的红房子里的人，是吗？\n后会有期了，先生\n日落的时候，Eklavya就会来陪你了 到时你想和他做什么都行\n我该怎么办呢，我的王后？\n一直以来你都是我的指引者\n我该不该给Jyoti打电话呢？\n殿下还没打电话来\n\"殿下！\"\"殿下！\"\n每次听你叫那个太监\"殿下\" 我就血液沸腾想发火\n如果Harsh这么对待我 我早拿枪打爆他的头了\nUday，我看起来怎么样？\n\"殿下！\"\"如您所愿，殿下！\"\n你怎么对他叫得出\"殿下\"？\n连叫他\"伯伯\"都让我觉得羞愧\n你叫他\"伯伯\"叫了多少年？\n27年了 －我叫了52年了！\n整整52年都是\"是的，殿下\" \"不，殿下\"\n\"您的心愿就是我的职责，殿下\"\n喂，Jyoti －是的，殿下\n警察已经来过了\n那很好，殿下 我们半小时内就动身\n你的表现在几点？\n－下午5:\n25\n快了４分钟，请您调一下\n我们下午6:\n10见，殿下 6:\n10准时\n爸爸...\n我们有客人了\n飞走了，飞走了 Rajjo的风筝飞走了！\n我剪了它！\n我剪了风筝线！\nRajjo故意输了放风筝比赛 Nandini很高兴\nRajjo是个好姑娘，OmKar\n你把她养育得很好 －恰恰相反啊\n我整日忙于为皇室成员开车\n都没注意到 我的小姑娘何时已经长大了\n她很可爱 我现在担心的是她会嫁给谁\n顺其自然吧，OmKar\n神射手先生\n这么多年来我一直和你念叨\n要是你肯结婚，然后生个英俊的儿子\n我就没必要担这个心了\n他们会相爱结婚 我们就会成为亲家了，我亲爱的神射手\n看啊！\n王子来了\n让我看看\n国王都作了什么啊？\n竟修来这么优秀的儿子\n王后的去世让他很孤单\n我真想给他一个拥抱\n爸爸\n不，小王子 您不能叫我爸爸\n我没有那个资格 我只是个卑微的仆人\n我也很想抱抱他\n可我不能，我没有那个资格\n我只是个卑微的仆人\n你把她照顾得很好，谢谢你\n看到她开心，我也高兴 现在您来了，我就先退下了\n请等一下\n你还记得妈妈唱的摇篮曲吗？\n月之歌？\n－是的\n你能唱给我听吗？\n在这里？\n现在？\n－求你了\n我很想念妈妈\n你听到了吗？\n用望远镜你只能看，神射手先生 不是听\n她在唱歌\n\"月亮啊，我的月亮\"\n\"温柔地对着我们微笑\"\n\"缓缓地，缓缓地\"\n\"投给我们一瞥后又悄悄躲起来\"\n\"月亮啊，我的月亮\"\n\"温柔地对着我们微笑\"\n\"缓缓地，缓缓地\"\n\"投给我们一瞥后又悄悄躲起来\"\n\"缓缓地，缓缓地\"\n\"在云彩的掩映下看着我们\"\n\"缓缓地，缓缓地\"\n\"在云彩的掩映下看着我们，轻轻微笑\"\n\"月亮啊，我的月亮\"\n\"温柔地对着我们微笑\"\n\"缓缓地，缓缓地\"\n\"投给我们一瞥后又悄悄躲起来\"\n\"温柔地对着我们微笑\"\n\"投给我们一瞥后又悄悄躲起来\"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-- 本字幕所有权益归制作人所有 纯属翻译爱好者交流学习使用 谢绝它用,否则一切后果自负\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n--\n片名：\n皇家卫兵\n在古代的摩呵婆罗多时代...\n部落里有个小男孩...\n想学习射箭术 他想拜崇高的大师德鲁格瑞亚为师\n可德鲁拒绝了他\n他是王子和国王的指导者 怎能教地位卑贱的人呢？\n小男孩只有回到丛林\n他制作了一尊德鲁的雕塑...\n把它当作自己的老师 日复一日地练习射箭术\n一天 德鲁外出打猎\n突然...\n他的狗停止了吠声\n七支箭牢牢地封住了它的嘴\n射手能达到如此高超的技艺...\n...以致于狗没有疼痛 也没有流一滴血\n不痛苦 不流血...\n德鲁万分震惊 这个射手到底是谁？\n神射手？\n- 你知道是谁吗？\n- 伊克洛维亚！\n他名叫伊克洛维亚 你的名字也叫伊克洛维亚\n是啊 我的妈妈给我取了这位伟大射手的名字\n- 然后呢？\n- 然后 德鲁很困扰\n这个贱民的技艺超过了他最好的学生 王子阿尔杰\n他必须制止\n德鲁说 \"孩子啊 你在我的雕塑面前练习...\n...要请我当你的老师 你得先付我报酬\"\n伊克洛维亚笑了笑回答 \"无论你要求什么都行 老师\"\n- 你知道德鲁要求什么吗？\n- 什么？\n- 伊克洛维亚右手的大拇指\n- 他的大拇指！\n为什么？\n没有了手指 伊克洛维亚怎么握住弓弦呢？\n他永远也无法胜过王子阿尔杰了\n伊克洛维亚没有切断他的拇指吧？\n伊克洛维亚只是微笑 然后切断了拇指 献给了他的老师\n不痛苦 不流血...\n...不 娜蒂妮 痛之入骨 到处都是血\n毫无畏缩 伊克洛维亚履行了...\n...他的誓约 他害怕责任\n- 什么律法？\n都是错的 我不\n伊克洛维亚错了\n伊克洛维亚错了\n\"我怎么能够把你来比作夏天？\n你不独比它可爱也比它温婉\n狂风把五月宠爱的嫩蕊作践\n夏天出赁的期限又未免太短\n天上的眼睛有时照得太酷烈...\n它那炳耀的金颜又常遭掩蔽\n被机缘或无常的天道所摧折\n没有芳艳不终于雕残或销毁\"\n还记得这首十四行诗吗？\n你第一次来这里的时候 我读给你听过\n而你送了我这朵花\n它现在都枯萎了\n\"但是你的长夏...\n但是你的长夏永远不会雕落\n也不会损失...\"\n妈妈在叫伊克洛维亚\n亲爱的儿子啊 上帝保佑 皇后恢复了知觉\n至今忧伤包围着我\n只有借这笔纸以安慰自己\n只有借这些信件 才能与我的心交谈\n工作之余总是太寂静\n除我之外 就只有城堡的砖墙\n我的存在只为了保护国王\n我的生命何尝不是这城堡的一块砖\n而这城墙已随岁月逐渐腐朽\n曾经敏锐的目光也已变得模糊\n可我的的耳朵却依旧灵光\n它在渴望着什么?\n或许 是你的声音在呼唤着我\n当年迈父亲的双手开始颤抖...\n...他儿子的职责便是伸出援助之手\n你在哪?\n我的儿子\n水?\n要喝水吗?\n我的皇后\n妈妈说 要见伊克洛维亚\n妈妈说 要见伊克洛维亚\n- 喝点水吗?\n- 伊克洛维亚\n- 叫谁?\n亲爱的\n- 伊克洛维亚\n- 谁?\n- 伊克洛维亚\n不!\n不!\n妈妈死了 现在我们不再需要伊克洛维亚了\n伊克洛维亚!\n快来皇后的房间 快点！\n召唤我的儿子 伊克洛维亚\n去叫我的儿子!\n马上!\n爸爸\n你的眼睛怎么了?\n很好啊\n好?\n一点都不好 王子\n刺眼的阳光几乎让他失明了\n瑞秋带他去看医生\n他说他的眼睛...\"有光感\"\n是的 妈妈在信里提到过 我去找医生谈谈\n- 瑞秋还好吗?\n- 她很好 谢谢\n瑞秋一直在皇后身边照料\n她说皇后真的很想念你\n过来\n快点!\n一个王子怎么能这样公开展示自己?\n一个皇后怎么能这样拉王子的耳朵?\n是吗?\n她不能吗?\n那你想要她怎么办呢?\n厉害的小王子\n- 她应该说对不起\n- 对不起 对不起 好了吗?\n你回来就好 哈什\n没能在你母亲最需要你的时候出现 真是羞愧\n无论如何 现在说什么都晚了\n来 进去吧\n- 为你祈福\n- 她一直叫你的名字\n直到离开人世\n我说\"我在这里!\n你的丈夫 叫我的名字\" 她却始终没有\n只呼唤你的名字\n你知道那是什么感觉吗?\n我感觉...\n只呼唤着你的名字...\n然后离去\n大哥\n温柔的心被伤透了 她有所恢复 可还是...\n去吧 去准备\n葬礼必须在日落前开始\n要束白色腰带 都放在你房间里了\n是这里的习俗 人人都很敏感 我们走吧\n妈妈 你最后的遗言 \"要照顾好哈什\"\n给予了我力量...\n...去减轻他的悲痛\n指引我吧 妈妈...\n- 他怎么样?\n- 为何如此担忧啊?\n孩子\n看见那城堡了吗?\n你的心上人越不过那么高的城墙...\n...他向你问过我吗?\n- 他问了\n- 他问什么了?\n- \"瑞秋还好吗？\"\n知道了\n上帝啊 请保佑我的女儿吧\n她是如此纯洁 如此天真\n请别伤她的心吧\n娜蒂妮\n娜蒂妮 你在哪儿?\n噢 亲爱的国王 娜蒂妮公主在家吗?\n娜蒂妮公主不在这里\n噢!\n她去哪里了?\n她和她的妈妈去神殿了\n请转告她 她的哥哥哈什来看她了\n她会的...\n我是说...\n我会的\n那好吧 我回伦敦去了\n你真笨!\n你真笨!\n你怎么没想到?\n妈妈死了 我怎么和她一起去神殿呢?\n- 我不这么认为\n- 别再说你要离开了\n每个人都离开我\n除了瑞秋 可她每天晚上还是要离开我\n瑞秋在这里呆到晚上 我一个人害怕\n陪着我好吗?\n瑞秋\n- 你好吗?\n瑞秋\n- 我很好\n你的父亲告诉我 你一直在照顾我的母亲\n瑞秋一直陪在她身边呢...\n皇后一直很想念你\n她留这封信给你\n她让你回去再看\n她一定说\"照顾好哈什\" 对不对？\n瑞秋\n亲爱的儿子...\n希望当面问候 却只能用信件问候...\n...你的归来\n我小心翼翼地喘息 担心生命就此结束\n我多么希望能再抱你最后一次\n恐怕我等不到那一刻了 这封信...\n...会告诉你一切 关于你身世的秘密\n儿子 杰维尔国王不是你的亲生父亲\n他一直被蒙在鼓里\n被发现的话 他一定不会将王位传给你...\n...你的祖母采取古老的传统...\n...只有贤明的人才能继承王位\n在这些众多人才中\n伊克洛维亚同我们一起\n皇后认为伊克洛维亚最可靠 他超过所有别的人才\n我也这么认为\n你和娜蒂妮有个贵族父亲 他就是伊克洛维亚\n我现在告诉你 因为你的父亲很需要你\n他年纪也大了 眼睛也几乎失明\n要是你父亲知道我泄露了这个秘密...\n...他会认为我亵渎了我们的誓约 我没有尽到守约的神圣职责\n但我相信 誓约是...\n如同古代的摩呵婆罗多所说的\n\"誓约 智慧 真理\"\n誓约生于理由\n誓约也生于智慧\n那便是你的思想灵魂所认为正确的东西\n誓约是你的灵魂所能接受的真理与圣洁\n我已完成了我的誓约\n现在 我的儿子...\n你也必须完成你的誓约\n承诺我 你会照顾好你的父亲\n我承诺 妈妈\n我真想砍掉伊克洛维亚的头颅 把它挂在城门上\n他污染了王室的血统\n你以前怎么没告诉我?\n我自己都不知道\n这些年 我一直信任我们的母亲\n她说过 她选择的是我\n我信任她\n皇后生下一对龙凤胎\n其中一个患有精神问题的女儿\n即使如此 我也接受了\n可今天我才发现...\n...一个没用的保安...\n...我孩子的父亲\n他和我的皇后睡了\n杰伊提 他是我孩子的父亲\n我的妻子...\n和我的保安!\n这些年那么顺从 卑躬屈膝\n他一定乐坏了\n嘲笑我不育 嘲笑我所有的缺点 还有这个 杰伊提!\n伊克洛维亚来了\n混蛋!\n殿下?\n告诉他 杰伊提!\n殿下刚才收到一封死亡威胁信\n信里说 我们必须归还农民的土地...\n...否则国王就会死于非命\n这怎么可能?\n他们没还清欠款 我们收回了他们的土地\n彼克...\n他们的头儿 被发现死在...\n...铁轨上 还有一封自杀遗书\n可他们控告我们谋杀 那群混蛋!\n现在就去 出去!\n去通知我的儿子 他父亲的生命处于危险之中\n谁的命?\n他的亲生父亲 快去!\n杰伊提!\n我把真相说出来了 对吗?\n不管谁是哈什的父亲...\n- ...\n都得死\n- 放心吧 哥哥\n明天日落前 伊克洛维亚将躺在他的火葬柴堆里...\n...就像皇后那样\n王子 我到处找你 你一个人在这里干什么?\n妈妈也是独自一人 伊克洛维亚 每个人都抛弃她\n你愿意和我们在一起吗?\n- 她会因此而高兴的\n- 你得回去了\n你的父亲收到了一封死亡威胁信\n我的父亲?\n我有父亲吗?\n你见过我的父亲吗?\n我想见他\n想告诉他 我和妈妈在这里很寂寞\n想告诉他 我很想念他 他会来陪我们吗?\n对他来说 妈妈算什么?\n无关紧要?\n他力不从心?\n我们走吧...\n...王子\n我很想哭 伊克洛维亚\n却哭不出来\n你能给我力量吗?\n可以吗\n儿子 别这样伸出你的手\n如果我握紧了你的手 会招来灾难的\n那次决定性地甄选...\n你的母亲和我形同陌路 直到最后\n我们决定 不让我们的孩子知道...\n...我是孩子们的亲生父亲\n娜蒂妮无邪的笑声...\n击碎了我的心啊\n我多么想抱着她大声呼喊 \"我是你的爸爸啊\"\n但这是绝不允许的\n绝不\n哈什!\n你在哭吗?\n哈什\n为什么?\n别哭啊 你想妈妈了吗?\n傻瓜 她一直在我们身边 我们有好多的妈妈啊\n一，二，三，四...\n想见见她们吗?\n看看? \"妈妈在排灯节\" 她可爱吗?\n\"妈妈的生日\" 你看啊\n\"妈妈在寺院\"\n\"闪闪发光的妈妈\"\n还有这个是...\n不...\n不是这个\n- 画错了的\n- 给我看那张画\n不!\n很恐怖的\n- 有血\n- 好吧 乖\n告诉我 怎么回事?\n这个秘密不能传出那个房间 他会杀死我的\n- 谁?\n- 我不能告诉你\n要是这个秘密离开那个房间 他就会杀死我的\n哪个房间?\n要是这个秘密离开那个房间 他就会杀死我的\n哪个房间?\n现在 这个秘密绝对不会离开妈妈的房间了\n但是门是打开的\n你紧张吗?\n巴布鲁\n别担心 我们生在民主主义社会 这些国王不过是纸娃娃\n我的警棍远比他们的剑有势力\n嘿 巴布鲁 看见那城墙了吗?\n我的祖父被那城墙活埋了\n就像剪断开幕式上的绸带一样...\n...这些国王杀死我们贱民以求好运!\n见过我的祖父 卡洛维加尔\n若不是因为想念伊克洛维亚...\n...我也不会坚持到现在\n进去吧\n先生 还记得我吗?\n我是帕努 帕努加尔 达南加尔的儿子\n上帝保佑你\n还记得那个市集吗?\n我就是接到铃铛的男孩\n还记得吗?\n你那时好厉害 我整晚都没谁这\n我当时就想 长大以后要和你一样厉害\n现在的我 警察长官帕努加尔\n谢谢你 先生\n我真想再看一次你的精湛技艺\n可以吗...\n求你了?\n我不确定现在能否做到 孩子\n尝试一下\n先见过陛下 走吧\n就一会儿 答应我?\n好吧 来\n那些该死的农民发疯了 他们威胁要杀了我\n做笔录了吗?\n巴布鲁\n别以为我不了解状况 陛下\n为什么有麻烦的国王 只敢藏在巨大的官邸?\n他害怕愤怒的农民?\n难道他不知道这有多懦弱?\n你胆敢嘲弄我?\n别忘了 我是这里的国王\n而你只不过是...\n- 贱民?\n我不想谈这个\n民主社会里 歧视就是一种犯罪\n是哪个法案规定的?\n巴布鲁\n不管哪个法案 手铐会说明事实\n世世代代 我们制定法律 你胆敢在这里跟我说手铐?\n我们统治了两千多年了\n而我们因此受苦五千年\n我的祖父 被这城墙活埋了\n算你走运!\n我是那些贱民的孩子 他们的手都被切下来...\n...只因为摸了一下圣洁的书本\n受够了历史!\n你的保安得跟我离开一个小时\n一小时?\n陛下 民主的意思 就是自由意志 明白?\n很多警察在茶摊 糖果店也有\n用他们来换这点时间 不愿意?\n先告辞了\n可以吗?\n先生\n- 现在就开始吗?\n- 别太早放弃啊 帕努\n你怎么看待一个贱民成为高级官员?\n- 巴布鲁 蒙眼罩!\n- 我不需要\n太阳光够刺眼的了\n带上眼罩 看上去更令人佩服\n那好吧\n准备好了吗?\n- 是的\n我们睁着眼睛都无法做到 而你带上眼罩也行\n淹没...\n...我的父亲为保护国王溺水\n我在湖水边找了他一整晚\n后来妈妈来了\n- 儿子\n这是属于你父亲的 现在由你来保管它了\n从这一天起 他会时刻陪伴着你\n今后 你只有一个誓约 保护好你的国王\n违反誓约的话 我们家族就没落了\n如同坚强的伊克洛维亚 你必须坚决顺从你的誓约\n那天以后 她叫我伊克洛维亚...\n...而我父亲的武器 也成为我唯一的武器\n没人知道这件事 我也布知道为什么要告诉你\n我知道为什么 因为我们俩都一样\n先生 国王收到威胁信的时候你在场吗?\n没有 只有他的弟弟杰伊提在那\n就是住在红瓦平房那儿的人 在铁路附近的?\n再见 先生\n伊克洛维亚快来陪你了 那时候 你会很快乐了\n我该怎么办 我的皇后?\n你总是给我指引\n我该给杰伊提打电话吗?\n陛下还没有打电话来\n\"陛下...\"\n每次你一叫\"陛下\" 我就血液沸腾快发疯了\n要是哈什也让我这么叫他 我会用枪爆他的头\n尤迪 我看起来怎么样?\n\"陛下\"\"如你所愿 陛下\"\n你怎么叫得出来 我都不好意思叫他叔叔\n你叫了他多久的叔叔?\n27年了\n- 52年!\n52年的\"是的 陛下\" \"好的 陛下\"\n\"你的心愿就是我的职责\" \"我的陛下\"\n你好 杰伊提\n- 是的 陛下\n警察刚才来过了\n好的 陛下 我们半小时后到\n现在什么时间?\n- 下午5:\n25\n快了四分钟 请调一下\n我们下午6:\n10见 陛下 6:\n10准时\n爸爸...\n有客人\n吹走了 吹走了 瑞秋的风筝没了!\n切断它!\n把风筝线切断!\n瑞秋故意输给娜蒂妮 娜蒂妮很高兴\n瑞秋是个好女孩 奥迈克\n你把她养育得那么好\n- 很艰辛啊\n每日忙碌 来回为皇室开车...\n...我都没注意 小女孩就变成大姑娘了\n她很可爱 我担心她以后会嫁谁\n一切顺其自然 奥迈克\n马斯克曼先生...\n...告诉你吧\n要是你有个英俊的儿子...\n...我就不担心了\n他们坠入爱河 我们就是亲戚了 是吧\n瞧!\n王子来了\n让我看看\n国王怎么对待这么优秀的儿子?\n皇后死后 他一直很孤独\n真想给他一个拥抱\n父亲\n不 小王子 别叫我父亲\n我没有权力 我只是个卑微的保安\n我也很想抱抱他\n可是我不能 我没有权力去做\n我只是个卑微的保安\n你把她照顾得很好 谢谢你\n看见她高兴 我也开心 现在你来了 那我先退下了?\n请等等\n你还记得妈妈唱的那首歌吗?\n月亮颂?\n- 是的\n能为我唱一曲吗?\n在这儿?\n现在?\n- 拜托\n我很想念妈妈\n听见什么了吗?\n只能用望远镜看看 马斯克曼先生 不是听\n她在唱歌\n\"我的孩子 我的月亮\"\n\"柔软的微笑 我的月亮孩子\"\n\"轻轻地走来...\"\n\"...\n我的眼眸是你的天空 在这里快乐直到永远\"\n\"轻轻地 噢...\n柔柔地\"\n\"乘着风 乘着云 还有满载的微笑\"\n\"微笑吧 我的月亮孩子!\"\n\"柔软的微笑 我的月亮孩子\"\n\"轻轻地走来...\"\n\"...\n我的眼眸是你的天空 在这里快乐直到永远\"\n\"柔软的微笑 我的月亮孩子\"\n\"在这里快乐直到永远\"\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-- 本字幕所有权益归制作人所有 纯属翻译爱好者交流学习使用 谢绝它用,否则一切后果自负\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n--\n片名：\n皇家卫兵\n在古代的摩呵婆罗多时代...\n部落里有个小男孩...\n想学习射箭术 他想拜崇高的大师德鲁格瑞亚为师\n可德鲁拒绝了他\n他是王子和国王的指导者 怎能教地位卑贱的人呢？\n小男孩只有回到丛林\n他制作了一尊德鲁的雕塑...\n把它当作自己的老师 日复一日地练习射箭术\n一天 德鲁外出打猎\n突然...\n他的狗停止了吠声\n七支箭牢牢地封住了它的嘴\n射手能达到如此高超的技艺...\n...以致于狗没有疼痛 也没有流一滴血\n不痛苦 不流血...\n德鲁万分震惊 这个射手到底是谁？\n神射手？\n- 你知道是谁吗？\n- 伊克洛维亚！\n他名叫伊克洛维亚 你的名字也叫伊克洛维亚\n是啊 我的妈妈给我取了这位伟大射手的名字\n- 然后呢？\n- 然后 德鲁很困扰\n这个贱民的技艺超过了他最好的学生 王子阿尔杰\n他必须制止\n德鲁说 \"孩子啊 你在我的雕塑面前练习...\n...要请我当你的老师 你得先付我报酬\"\n伊克洛维亚笑了笑回答 \"无论你要求什么都行 老师\"\n- 你知道德鲁要求什么吗？\n- 什么？\n- 伊克洛维亚右手的大拇指\n- 他的大拇指！\n为什么？\n没有了手指 伊克洛维亚怎么握住弓弦呢？\n他永远也无法胜过王子阿尔杰了\n伊克洛维亚没有切断他的拇指吧？\n伊克洛维亚只是微笑 然后切断了拇指 献给了他的老师\n不痛苦 不流血...\n...不 娜蒂妮 痛之入骨 到处都是血\n毫无畏缩 伊克洛维亚履行了...\n...他的誓约 他害怕责任\n- 什么律法？\n都是错的 我不\n伊克洛维亚错了\n伊克洛维亚错了\n\"我怎么能够把你来比作夏天？\n你不独比它可爱也比它温婉\n狂风把五月宠爱的嫩蕊作践\n夏天出赁的期限又未免太短\n天上的眼睛有时照得太酷烈...\n它那炳耀的金颜又常遭掩蔽\n被机缘或无常的天道所摧折\n没有芳艳不终于雕残或销毁\"\n还记得这首十四行诗吗？\n你第一次来这里的时候 我读给你听过\n而你送了我这朵花\n它现在都枯萎了\n\"但是你的长夏...\n但是你的长夏永远不会雕落\n也不会损失...\"\n妈妈在叫伊克洛维亚\n亲爱的儿子啊 上帝保佑 皇后恢复了知觉\n至今忧伤包围着我\n只有借这笔纸以安慰自己\n只有借这些信件 才能与我的心交谈\n工作之余总是太寂静\n除我之外 就只有城堡的砖墙\n我的存在只为了保护国王\n我的生命何尝不是这城堡的一块砖\n而这城墙已随岁月逐渐腐朽\n曾经敏锐的目光也已变得模糊\n可我的的耳朵却依旧灵光\n它在渴望着什么?\n或许 是你的声音在呼唤着我\n当年迈父亲的双手开始颤抖...\n...他儿子的职责便是伸出援助之手\n你在哪?\n我的儿子\n水?\n要喝水吗?\n我的皇后\n妈妈说 要见伊克洛维亚\n妈妈说 要见伊克洛维亚\n- 喝点水吗?\n- 伊克洛维亚\n- 叫谁?\n亲爱的\n- 伊克洛维亚\n- 谁?\n- 伊克洛维亚\n不!\n不!\n妈妈死了 现在我们不再需要伊克洛维亚了\n伊克洛维亚!\n快来皇后的房间 快点！\n召唤我的儿子 伊克洛维亚\n去叫我的儿子!\n马上!\n爸爸\n你的眼睛怎么了?\n很好啊\n好?\n一点都不好 王子\n刺眼的阳光几乎让他失明了\n瑞秋带他去看医生\n他说他的眼睛...\"有光感\"\n是的 妈妈在信里提到过 我去找医生谈谈\n- 瑞秋还好吗?\n- 她很好 谢谢\n瑞秋一直在皇后身边照料\n她说皇后真的很想念你\n过来\n快点!\n一个王子怎么能这样公开展示自己?\n一个皇后怎么能这样拉王子的耳朵?\n是吗?\n她不能吗?\n那你想要她怎么办呢?\n厉害的小王子\n- 她应该说对不起\n- 对不起 对不起 好了吗?\n你回来就好 哈什\n没能在你母亲最需要你的时候出现 真是羞愧\n无论如何 现在说什么都晚了\n来 进去吧\n- 为你祈福\n- 她一直叫你的名字\n直到离开人世\n我说\"我在这里!\n你的丈夫 叫我的名字\" 她却始终没有\n只呼唤你的名字\n你知道那是什么感觉吗?\n我感觉...\n只呼唤着你的名字...\n然后离去\n大哥\n温柔的心被伤透了 她有所恢复 可还是...\n去吧 去准备\n葬礼必须在日落前开始\n要束白色腰带 都放在你房间里了\n是这里的习俗 人人都很敏感 我们走吧\n妈妈 你最后的遗言 \"要照顾好哈什\"\n给予了我力量...\n...去减轻他的悲痛\n指引我吧 妈妈...\n- 他怎么样?\n- 为何如此担忧啊?\n孩子\n看见那城堡了吗?\n你的心上人越不过那么高的城墙...\n...他向你问过我吗?\n- 他问了\n- 他问什么了?\n- \"瑞秋还好吗？\"\n知道了\n上帝啊 请保佑我的女儿吧\n她是如此纯洁 如此天真\n请别伤她的心吧\n娜蒂妮\n娜蒂妮 你在哪儿?\n噢 亲爱的国王 娜蒂妮公主在家吗?\n娜蒂妮公主不在这里\n噢!\n她去哪里了?\n她和她的妈妈去神殿了\n请转告她 她的哥哥哈什来看她了\n她会的...\n我是说...\n我会的\n那好吧 我回伦敦去了\n你真笨!\n你真笨!\n你怎么没想到?\n妈妈死了 我怎么和她一起去神殿呢?\n- 我不这么认为\n- 别再说你要离开了\n每个人都离开我\n除了瑞秋 可她每天晚上还是要离开我\n瑞秋在这里呆到晚上 我一个人害怕\n陪着我好吗?\n瑞秋\n- 你好吗?\n瑞秋\n- 我很好\n你的父亲告诉我 你一直在照顾我的母亲\n瑞秋一直陪在她身边呢...\n皇后一直很想念你\n她留这封信给你\n她让你回去再看\n她一定说\"照顾好哈什\" 对不对？\n瑞秋\n亲爱的儿子...\n希望当面问候 却只能用信件问候...\n...你的归来\n我小心翼翼地喘息 担心生命就此结束\n我多么希望能再抱你最后一次\n恐怕我等不到那一刻了 这封信...\n...会告诉你一切 关于你身世的秘密\n儿子 杰维尔国王不是你的亲生父亲\n他一直被蒙在鼓里\n被发现的话 他一定不会将王位传给你...\n...你的祖母采取古老的传统...\n...只有贤明的人才能继承王位\n在这些众多人才中\n伊克洛维亚同我们一起\n皇后认为伊克洛维亚最可靠 他超过所有别的人才\n我也这么认为\n你和娜蒂妮有个贵族父亲 他就是伊克洛维亚\n我现在告诉你 因为你的父亲很需要你\n他年纪也大了 眼睛也几乎失明\n要是你父亲知道我泄露了这个秘密...\n...他会认为我亵渎了我们的誓约 我没有尽到守约的神圣职责\n但我相信 誓约是...\n如同古代的摩呵婆罗多所说的\n\"誓约 智慧 真理\"\n誓约生于理由\n誓约也生于智慧\n那便是你的思想灵魂所认为正确的东西\n誓约是你的灵魂所能接受的真理与圣洁\n我已完成了我的誓约\n现在 我的儿子...\n你也必须完成你的誓约\n承诺我 你会照顾好你的父亲\n我承诺 妈妈\n我真想砍掉伊克洛维亚的头颅 把它挂在城门上\n他污染了王室的血统\n你以前怎么没告诉我?\n我自己都不知道\n这些年 我一直信任我们的母亲\n她说过 她选择的是我\n我信任她\n皇后生下一对龙凤胎\n其中一个患有精神问题的女儿\n即使如此 我也接受了\n可今天我才发现...\n...一个没用的保安...\n...我孩子的父亲\n他和我的皇后睡了\n杰伊提 他是我孩子的父亲\n我的妻子...\n和我的保安!\n这些年那么顺从 卑躬屈膝\n他一定乐坏了\n嘲笑我不育 嘲笑我所有的缺点 还有这个 杰伊提!\n伊克洛维亚来了\n混蛋!\n殿下?\n告诉他 杰伊提!\n殿下刚才收到一封死亡威胁信\n信里说 我们必须归还农民的土地...\n...否则国王就会死于非命\n这怎么可能?\n他们没还清欠款 我们收回了他们的土地\n彼克...\n他们的头儿 被发现死在...\n...铁轨上 还有一封自杀遗书\n可他们控告我们谋杀 那群混蛋!\n现在就去 出去!\n去通知我的儿子 他父亲的生命处于危险之中\n谁的命?\n他的亲生父亲 快去!\n杰伊提!\n我把真相说出来了 对吗?\n不管谁是哈什的父亲...\n- ...\n都得死\n- 放心吧 哥哥\n明天日落前 伊克洛维亚将躺在他的火葬柴堆里...\n...就像皇后那样\n王子 我到处找你 你一个人在这里干什么?\n妈妈也是独自一人 伊克洛维亚 每个人都抛弃她\n你愿意和我们在一起吗?\n- 她会因此而高兴的\n- 你得回去了\n你的父亲收到了一封死亡威胁信\n我的父亲?\n我有父亲吗?\n你见过我的父亲吗?\n我想见他\n想告诉他 我和妈妈在这里很寂寞\n想告诉他 我很想念他 他会来陪我们吗?\n对他来说 妈妈算什么?\n无关紧要?\n他力不从心?\n我们走吧...\n...王子\n我很想哭 伊克洛维亚\n却哭不出来\n你能给我力量吗?\n可以吗\n儿子 别这样伸出你的手\n如果我握紧了你的手 会招来灾难的\n那次决定性地甄选...\n你的母亲和我形同陌路 直到最后\n我们决定 不让我们的孩子知道...\n...我是孩子们的亲生父亲\n娜蒂妮无邪的笑声...\n击碎了我的心啊\n我多么想抱着她大声呼喊 \"我是你的爸爸啊\"\n但这是绝不允许的\n绝不\n哈什!\n你在哭吗?\n哈什\n为什么?\n别哭啊 你想妈妈了吗?\n傻瓜 她一直在我们身边 我们有好多的妈妈啊\n一，二，三，四...\n想见见她们吗?\n看看? \"妈妈在排灯节\" 她可爱吗?\n\"妈妈的生日\" 你看啊\n\"妈妈在寺院\"\n\"闪闪发光的妈妈\"\n还有这个是...\n不...\n不是这个\n- 画错了的\n- 给我看那张画\n不!\n很恐怖的\n- 有血\n- 好吧 乖\n告诉我 怎么回事?\n这个秘密不能传出那个房间 他会杀死我的\n- 谁?\n- 我不能告诉你\n要是这个秘密离开那个房间 他就会杀死我的\n哪个房间?\n要是这个秘密离开那个房间 他就会杀死我的\n哪个房间?\n现在 这个秘密绝对不会离开妈妈的房间了\n但是门是打开的\n你紧张吗?\n巴布鲁\n别担心 我们生在民主主义社会 这些国王不过是纸娃娃\n我的警棍远比他们的剑有势力\n嘿 巴布鲁 看见那城墙了吗?\n我的祖父被那城墙活埋了\n就像剪断开幕式上的绸带一样...\n...这些国王杀死我们贱民以求好运!\n见过我的祖父 卡洛维加尔\n若不是因为想念伊克洛维亚...\n...我也不会坚持到现在\n进去吧\n先生 还记得我吗?\n我是帕努 帕努加尔 达南加尔的儿子\n上帝保佑你\n还记得那个市集吗?\n我就是接到铃铛的男孩\n还记得吗?\n你那时好厉害 我整晚都没谁这\n我当时就想 长大以后要和你一样厉害\n现在的我 警察长官帕努加尔\n谢谢你 先生\n我真想再看一次你的精湛技艺\n可以吗...\n求你了?\n我不确定现在能否做到 孩子\n尝试一下\n先见过陛下 走吧\n就一会儿 答应我?\n好吧 来\n那些该死的农民发疯了 他们威胁要杀了我\n做笔录了吗?\n巴布鲁\n别以为我不了解状况 陛下\n为什么有麻烦的国王 只敢藏在巨大的官邸?\n他害怕愤怒的农民?\n难道他不知道这有多懦弱?\n你胆敢嘲弄我?\n别忘了 我是这里的国王\n而你只不过是...\n- 贱民?\n我不想谈这个\n民主社会里 歧视就是一种犯罪\n是哪个法案规定的?\n巴布鲁\n不管哪个法案 手铐会说明事实\n世世代代 我们制定法律 你胆敢在这里跟我说手铐?\n我们统治了两千多年了\n而我们因此受苦五千年\n我的祖父 被这城墙活埋了\n算你走运!\n我是那些贱民的孩子 他们的手都被切下来...\n...只因为摸了一下圣洁的书本\n受够了历史!\n你的保安得跟我离开一个小时\n一小时?\n陛下 民主的意思 就是自由意志 明白?\n很多警察在茶摊 糖果店也有\n用他们来换这点时间 不愿意?\n先告辞了\n可以吗?\n先生\n- 现在就开始吗?\n- 别太早放弃啊 帕努\n你怎么看待一个贱民成为高级官员?\n- 巴布鲁 蒙眼罩!\n- 我不需要\n太阳光够刺眼的了\n带上眼罩 看上去更令人佩服\n那好吧\n准备好了吗?\n- 是的\n我们睁着眼睛都无法做到 而你带上眼罩也行\n淹没...\n...我的父亲为保护国王溺水\n我在湖水边找了他一整晚\n后来妈妈来了\n- 儿子\n这是属于你父亲的 现在由你来保管它了\n从这一天起 他会时刻陪伴着你\n今后 你只有一个誓约 保护好你的国王\n违反誓约的话 我们家族就没落了\n如同坚强的伊克洛维亚 你必须坚决顺从你的誓约\n那天以后 她叫我伊克洛维亚...\n...而我父亲的武器 也成为我唯一的武器\n没人知道这件事 我也布知道为什么要告诉你\n我知道为什么 因为我们俩都一样\n先生 国王收到威胁信的时候你在场吗?\n没有 只有他的弟弟杰伊提在那\n就是住在红瓦平房那儿的人 在铁路附近的?\n再见 先生\n伊克洛维亚快来陪你了 那时候 你会很快乐了\n我该怎么办 我的皇后?\n你总是给我指引\n我该给杰伊提打电话吗?\n陛下还没有打电话来\n\"陛下...\"\n每次你一叫\"陛下\" 我就血液沸腾快发疯了\n要是哈什也让我这么叫他 我会用枪爆他的头\n尤迪 我看起来怎么样?\n\"陛下\"\"如你所愿 陛下\"\n你怎么叫得出来 我都不好意思叫他叔叔\n你叫了他多久的叔叔?\n27年了\n- 52年!\n52年的\"是的 陛下\" \"好的 陛下\"\n\"你的心愿就是我的职责\" \"我的陛下\"\n你好 杰伊提\n- 是的 陛下\n警察刚才来过了\n好的 陛下 我们半小时后到\n现在什么时间?\n- 下午5:\n25\n快了四分钟 请调一下\n我们下午6:\n10见 陛下 6:\n10准时\n爸爸...\n有客人\n吹走了 吹走了 瑞秋的风筝没了!\n切断它!\n把风筝线切断!\n瑞秋故意输给娜蒂妮 娜蒂妮很高兴\n瑞秋是个好女孩 奥迈克\n你把她养育得那么好\n- 很艰辛啊\n每日忙碌 来回为皇室开车...\n...我都没注意 小女孩就变成大姑娘了\n她很可爱 我担心她以后会嫁谁\n一切顺其自然 奥迈克\n马斯克曼先生...\n...告诉你吧\n要是你有个英俊的儿子...\n...我就不担心了\n他们坠入爱河 我们就是亲戚了 是吧\n瞧!\n王子来了\n让我看看\n国王怎么对待这么优秀的儿子?\n皇后死后 他一直很孤独\n真想给他一个拥抱\n父亲\n不 小王子 别叫我父亲\n我没有权力 我只是个卑微的保安\n我也很想抱抱他\n可是我不能 我没有权力去做\n我只是个卑微的保安\n你把她照顾得很好 谢谢你\n看见她高兴 我也开心 现在你来了 那我先退下了?\n请等等\n你还记得妈妈唱的那首歌吗?\n月亮颂?\n- 是的\n能为我唱一曲吗?\n在这儿?\n现在?\n- 拜托\n我很想念妈妈\n听见什么了吗?\n只能用望远镜看看 马斯克曼先生 不是听\n她在唱歌\n\"我的孩子 我的月亮\"\n\"柔软的微笑 我的月亮孩子\"\n\"轻轻地走来...\"\n\"...\n我的眼眸是你的天空 在这里快乐直到永远\"\n\"轻轻地 噢...\n柔柔地\"\n\"乘着风 乘着云 还有满载的微笑\"\n\"微笑吧 我的月亮孩子!\"\n\"柔软的微笑 我的月亮孩子\"\n\"轻轻地走来...\"\n\"...\n我的眼眸是你的天空 在这里快乐直到永远\"\n\"柔软的微笑 我的月亮孩子\"\n\"在这里快乐直到永远\"\n陛下叫你们俩去 马上!\n现在?\n去哪儿?\n皇后喜欢十四行诗\n莎士比亚\n她去世的时候 我正给她念\n伊克洛维亚 你想在哪里火葬?\n陛下?\n苍天不容 要是你死于意外...\n...在哪里火葬你?\n陛下...\n我的家乡\n那怎么行!\n你服侍了我们那么久\n你的火葬...\n应该有皇室的排场\n躺在你的皇后的旁边\n趴下 陛下...\n杀死他!\n杀死他!\n你在干什么?\n杀了他!\n你聋了吗?\n快动手!\n是的 陛下 你的心愿就是我的职责\n陛下...\n陛下...\n陛下 他们抓走了我的弟弟 他们说是我们杀了国王\n他们要绞死我们的孩子\n- 他们说我们是农民\n可我们连耕地都没有\n刚开始没收我们的土地 现在又抓我们的孩子\n我们想反抗 他们却杀死了我们的领袖彼克...\n...还说他是自杀的 陛下 听我说\n我们被陷害了\n够了 我再也不能忍受了\n谁的骆驼?\n这是谁的骆驼?\n回答我!\n瑞秋...\n?\n我会和瑞秋结婚\n上帝保佑你\n我能进去吗?\n现在这里是你的家了 瑞秋 你可以来去自由的\n谢谢你\n谢什么?\n谢谢你让我的父亲没有留下遗憾\n你的承诺 让他走得很安详\n我看见他笑了\n现在他走了...\n我不会要求你实现承诺\n瑞秋 我...\n- 请听我说完\n但我并不因你的承诺而高兴\n当我还是个小女孩...\n...我就梦想有一天能嫁给你\n现在梦想实现了\n父亲总认为我很天真\n可我有这信念\n我总是觉得...\n...你会真的爱我\n而不是你的同情和可怜\n我能说话了吗?\n瑞秋...\n为什么妈妈信任地把最后一封信交给你?\n为什么娜蒂妮那么爱你?\n一听见你的名字 她都很高兴\n事实是...\n...我也有同样的感觉\n可是我依然保持沉默 我不能表达自己\n娜蒂妮可以\n她是城堡里唯一坦白的人\n你知道这里...\n对每个人而言都是危险的\n这座城堡里的各种礼教约束 很让我头疼\n瑞秋 ...\n我再也不是你理想中的哈什了\n这五十年来 你在这里享尽了优待\n当国王最需要你的时候 你却躲在驼群后面\n尤迪!\n凶手踢掉你的枪时 你在打瞌睡?\n尤迪!\n你得尊重伊克洛维亚\n他们家族世代保护我们的国王\n他耳聋眼瞎的\n否则那些没用的农民也碰不到陛下\n警官 你查到什么了吗?\n我们查出 驼群是一个叫哈瑞亚的农民的\n他正在接受审问\n砍掉哈瑞亚的腿 那能让他老实点\n凶手不是农民\n伊克洛维亚?\n这里有几个手指?\n这么近都看不见 又怎么判断凶手不是农民?\n伊克洛维亚的父亲为保护国王而牺牲\n很多人唱民谣歌颂他\n告诉我 伊克洛维亚 你怎么就躲过那些子弹了?\n那些农民饶了他\n同样的贱民\n噢!\n我明白了 那些混球的兄弟伙\n警官 请暂时带他出去\n先生...\n你不能用枪去反驳\n他们说凶手踢掉你的枪时...\n...我在打瞌睡\n因此你就要杀了他们?\n是的!\n先生 那是不理智的 为什么?\n我并没有跟谁说过...\n...我的枪被凶手踢掉了\n他们怎么会知道?\n你说什么 先生?\n他们暗杀了我的国王\n我认出了他鞋上的钉 就是他们\n- 让我去\n- 先生...\n请冷静\n让我去解决 这是我的职责 他们是我的\"猎物\"\n你解决不了 给我让开\n我向你保证 我会逮捕他们 不管...\n正当与否\n你知道他们杀了农民领袖彼克?\n他的自杀遗书是假的 他们会使一样的招\n一样的铁道口 一封伪造的自杀信\n这是我的工作 我会解决的\n让我去 帕努\n要是我让你去了 你杀了他们 会被判绞刑的\n那又怎样?\n我不在乎...\n- 那我不得不拘捕你了\n那我不得不先杀了你\n把枪给我\n够多的伤亡 给我\n你不清除我眼睛盲的程度\n他们杀了国王 你会是下一个\n他们一样会在驼群后杀你\n外面有辆吉普车 开车离开这儿\n那边会有人接你\n你自由了 走吧\n走?\n杀国王的凶手还没有抓到\n我就是这城堡的墙\n我的存在只为了保护国王 每一刻...\n...\"我的生命何尝不是这城堡的一块砖\n而这城墙已随岁月逐渐腐朽\n曾经敏锐的目光也已变得模糊\"\n你看过我的信?\n是的\n每个字都是写给我的 对吗?\n谁...\n谁告诉你的?\n妈妈\n誓约!\n她违反了!\n我承诺一生隐埋秘密\n皇后违反了誓约!\n- 不\n妈妈没有\n她的信\n\"誓约 智慧 真理\"\n誓约生于理由和智慧\n誓约是你的灵魂所能接受的真理与圣洁\n妈妈履行了她的誓约\n而我 你的儿子...\n...也将履行我的誓约\n请离开这个地方\n陛下\n先生\n儿子\n你不能流放我\n你不能!\n一个儿子怎么会流放父亲?\n而一个国王...\n...可以流放王室守卫\n我 哈什国王 以最崇高的权力...\n命令你 伊克洛维亚 马上离开这里\n遵命!\n父亲 回到那平静的乡村\n享受简单快乐的农村生活\n我会接你回来 那时候...\n...我会甩掉脑子里那些发狂的 \"誓约\"和\"职责\"\n取而代之的是欢庆 和你孙子带来的快乐\n我希望看见你的笑容 你太苦了\n哈什!\n哈什 村民们告诉我 你命令伊克洛维亚离开这里了\n真的吗?\n为什么?\n看这个\n嘿!\n是谁?\n你?\n你来这儿干什么?\n哈什国王...\n- 说什么\n大声点!\n哈什国王让我离开了城堡\n我得另谋职业\n什么工作都行\n我可以为你擦皮鞋\n出去!\n给我滚出去!\n别再让我看见你的脸\n你的愿望就是我的工作\n快出去!\n黑暗淹没了我的脸 尤迪\n可我却看得清你的脸\n我看见杀死国王的凶手的脸\n你的子弹用尽了\n再发出一点声音...\n...就是你的死期\n我听着呢 尤迪 我能感觉你的呼吸\n安静\n安静 别出声\n安静才能活命\n要是你再喘息 我就解决你\n让你死是我的职责\n你来这儿干什么?\n哈什国王让我离开了城堡\n我给你送来了告别的礼物\n那好 放在门口就离开吧\n你不看看?\n我说...\n是什么?\n打开\n尤迪?\n你对我儿子干了什么?\n他在哪儿?\n尤迪在哪儿?\n他在铁轨旁徘徊 要和他一起吗?\n你见过伊克洛维亚笑吗?\n没人见过...\n除了我\n我挨打的时候他帮了我\n谁打你?\n- 爸爸\n你一定做了坏事\n- 不是我 是你\n我?\n我做了什么?\n你不记得了?\n- 不记得了\n皇后扯你的耳朵\n你哭喊着 \"一个皇后怎么能这样拉王子的耳朵?\"\n是啊 我当众亲你\n伊克洛维亚帮我不挨爸爸的打\n还带我去骑骆驼 给我买石榴吃\n但我还是很可怜\n- 为什么?\n我说\"我不会去亲回来了\"\n他听了...\n...就笑了...\n...就和现在的你一样\n我得告诉你一些事\n什么事 哈什?\n这是我父亲的枪\n要不是为了你和娜蒂妮...\n...我向上帝发誓 我...\n你别吓我\n我也吓得要命 ...担心你会离开我\n不会的 我保证...\n...等等 先听我说...\n...然后再承诺\n你干了什么啊?\n你杀了我的儿子!\n他杀了我的国王\n我履行我的职责\n- 履行你的职责?\n干得好!\n非常好!\n现在去杀了那个人 那个谋划杀死国王的人\n告诉我他的名字\n我去取他的人头\n你去取你儿子的人头?\n好啊!\n太好了!\n哈什安排的谋杀 让我等着你取他的人头!\n哈什!\n哈什 你的儿子!\n砍掉他的头 履行你的职责\n哈什!\n等等 瑞秋\n求你了\n为谁?\n你杀了我的父亲 哈什\n职责让你杀了我的儿子 为了职责 去杀你的儿子啊\n谎言!\n- 是真的 他...\n娜蒂妮睡了吗?\n你?\n你来这里干什么?\n等你\n你脸上有血\n谁的血?\n我不知道\n尤迪的...\n杰伊提的...\n我杀了他们俩\n现在你来这里杀我\n是的\n在我的匕首确定目标之前...\n...我必须知道真相 是你谋划杀了我的国王吗?\n是我\n那么我 城堡的守卫...\n...以及你的父亲...\n...必须履行我的职责\n准备受死吧\n我的亲生父亲将杀了我...\n...多么好的死法\n我准备好了\n为什么这么做?\n我无法想象 在驼群那儿你几乎杀了我...\n...你认为是我...\n...在驼群后面?\n继续吧 把你的匕首插入我的心脏\n来吧!\n你做不到\n因为你知道你的儿子决不会退缩\n为什么?\n为什么这么罪恶?\n为什么?\n\"誓约 智慧 真理\"\n我救了你的命\n看这个 是他杀了妈妈\n他的双手杀了她\n知道为什么吗?\n因为她一直呼唤着你的名字\n我知道他们会杀了你\n而你的王子为你做了什么?\n两千五百万!\n我给了他们十倍让你活命\n撒谎!\n全在撒谎!\n不可能是真的!\n我的国王不会这么干\n永远不会\n他不会的\n这些只是娜蒂妮的话\n这可能是她的幻想...\n...她的胡思乱想\n别试图改变我的决心...\n...醒醒吧 伊克洛维亚\n砍掉你的拇指 履行你的誓约\n誓约?\n誓约的前提是事实\n誓约站在真理这一边\n要是这一刻我的誓约有所动摇...\n...违反誓约的话 我们家族就会被埋葬\n妈妈告诉我履行自己的职责 就像坚强的伊克洛维亚一样\n你的死...\n...是我的职责\n可是 你的手在颤抖\n当一个年迈的父亲双手开始颤抖...\n...他儿子的职责便是伸出援助之手\n你在哪 我的儿子?\n- 我迷失了方向\n但我会回来\n我的双手沾满了血\n瑞秋的父亲\n一辈子也洗不干净\n让这些血迹随我的火葬一起被焚毁\n请照顾好娜蒂妮\n告诉她 妈妈很孤单 所以我离开她去陪伴妈妈\n我可以告诉妈妈 我履行了我的承诺\n我可以祈求瑞秋父亲的宽恕\n我可以完成我的使命\n你的职责...\n就是我的死亡\n- 住手 哈什!\n别!\n这是我的誓约\n尽管我的双手颤抖 但我内心坚定\n我眼瞎但...\n...我的耳朵好使\n我...\n只要...\n...一句话 ...\n...我的匕首会找到你\n父亲\n父亲\n我以为你从不会失手\n我没有失手 那是我最好的一掷\n\"砍掉我的拇指...\n...我的职责是你的死亡\"\n...那会杀了我的儿子\n你是对的 儿子\n伊克洛维亚错了\n伊克洛维亚错了\n错得那么严重\n妈妈 给我力量...\n...追随你的脚步\n给我指引\n我的心告诉我应该原谅哈什\n他支支吾吾 可他的心是纯洁的\n他愿意为此付出一生的代价\n太多的生命消逝 太多的血流失\n必须有人制止\n交给我吧\n祝福我吧 妈妈...\n...让我去减轻他的痛苦 帮他忘记所有的难过...\n...好好照顾他 孩子\n他有着高尚的心灵 看看他为我们所做的一切...\n...所有村民都来感谢他\n他归还了我们的土地\n哈什国王万岁\n万岁...\n- ...\n哈什国王!\n哈什国王万岁!\n我归还你们土地有自私的原因\n我想让我的父亲感到自豪\n今天 所有在场的人们都是我的见证人...\n...我在此证实 伊克洛维亚是我的父亲\n儿子\n父亲\n警察来干什么?\n- 来逮捕我的\n是时候以命抵命了\n恐怕我有些坏消息要宣布\n我准备好了 走吧...\n- 等等\n今天 我们调查了尤迪的房间...\n...在DVD盒里发现了自杀遗书\n巴布鲁...\n看看吧\n皇室的人渣\n他们知道我要抓他们 所以他们选择了更简单的解脱...\n...往高速行驶中的火车上跳 系自杀\n太遭了 终究还是逃出了我的掌心\n我心里是怎么都无法宽恕他们的\n先生 好手迹 不是吗?\n很好\n太好了!\n不是吗?\n爸爸\n陛下叫你们俩去 马上!\n现在?\n去哪儿?\n皇后喜欢十四行诗\n莎士比亚\n她去世的时候 我正给她念\n伊克洛维亚 你想在哪里火葬?\n陛下?\n苍天不容 要是你死于意外...\n...在哪里火葬你?\n陛下...\n我的家乡\n那怎么行!\n你服侍了我们那么久\n你的火葬...\n应该有皇室的排场\n躺在你的皇后的旁边\n趴下 陛下...\n杀死他!\n杀死他!\n你在干什么?\n杀了他!\n你聋了吗?\n快动手!\n是的 陛下 你的心愿就是我的职责\n陛下...\n陛下...\n陛下 他们抓走了我的弟弟 他们说是我们杀了国王\n他们要绞死我们的孩子\n- 他们说我们是农民\n可我们连耕地都没有\n刚开始没收我们的土地 现在又抓我们的孩子\n我们想反抗 他们却杀死了我们的领袖彼克...\n...还说他是自杀的 陛下 听我说\n我们被陷害了\n够了 我再也不能忍受了\n谁的骆驼?\n这是谁的骆驼?\n回答我!\n瑞秋...\n?\n我会和瑞秋结婚\n上帝保佑你\n我能进去吗?\n现在这里是你的家了 瑞秋 你可以来去自由的\n谢谢你\n谢什么?\n谢谢你让我的父亲没有留下遗憾\n你的承诺 让他走得很安详\n我看见他笑了\n现在他走了...\n我不会要求你实现承诺\n瑞秋 我...\n- 请听我说完\n但我并不因你的承诺而高兴\n当我还是个小女孩...\n...我就梦想有一天能嫁给你\n现在梦想实现了\n父亲总认为我很天真\n可我有这信念\n我总是觉得...\n...你会真的爱我\n而不是你的同情和可怜\n我能说话了吗?\n瑞秋...\n为什么妈妈信任地把最后一封信交给你?\n为什么娜蒂妮那么爱你?\n一听见你的名字 她都很高兴\n事实是...\n...我也有同样的感觉\n可是我依然保持沉默 我不能表达自己\n娜蒂妮可以\n她是城堡里唯一坦白的人\n你知道这里...\n对每个人而言都是危险的\n这座城堡里的各种礼教约束 很让我头疼\n瑞秋 ...\n我再也不是你理想中的哈什了\n这五十年来 你在这里享尽了优待\n当国王最需要你的时候 你却躲在驼群后面\n尤迪!\n凶手踢掉你的枪时 你在打瞌睡?\n尤迪!\n你得尊重伊克洛维亚\n他们家族世代保护我们的国王\n他耳聋眼瞎的\n否则那些没用的农民也碰不到陛下\n警官 你查到什么了吗?\n我们查出 驼群是一个叫哈瑞亚的农民的\n他正在接受审问\n砍掉哈瑞亚的腿 那能让他老实点\n凶手不是农民\n伊克洛维亚?\n这里有几个手指?\n这么近都看不见 又怎么判断凶手不是农民?\n伊克洛维亚的父亲为保护国王而牺牲\n很多人唱民谣歌颂他\n告诉我 伊克洛维亚 你怎么就躲过那些子弹了?\n那些农民饶了他\n同样的贱民\n噢!\n我明白了 那些混球的兄弟伙\n警官 请暂时带他出去\n先生...\n你不能用枪去反驳\n他们说凶手踢掉你的枪时...\n...我在打瞌睡\n因此你就要杀了他们?\n是的!\n先生 那是不理智的 为什么?\n我并没有跟谁说过...\n...我的枪被凶手踢掉了\n他们怎么会知道?\n你说什么 先生?\n他们暗杀了我的国王\n我认出了他鞋上的钉 就是他们\n- 让我去\n- 先生...\n请冷静\n让我去解决 这是我的职责 他们是我的\"猎物\"\n你解决不了 给我让开\n我向你保证 我会逮捕他们 不管...\n正当与否\n你知道他们杀了农民领袖彼克?\n他的自杀遗书是假的 他们会使一样的招\n一样的铁道口 一封伪造的自杀信\n这是我的工作 我会解决的\n让我去 帕努\n要是我让你去了 你杀了他们 会被判绞刑的\n那又怎样?\n我不在乎...\n- 那我不得不拘捕你了\n那我不得不先杀了你\n把枪给我\n够多的伤亡 给我\n你不清除我眼睛盲的程度\n他们杀了国王 你会是下一个\n他们一样会在驼群后杀你\n外面有辆吉普车 开车离开这儿\n那边会有人接你\n你自由了 走吧\n走?\n杀国王的凶手还没有抓到\n我就是这城堡的墙\n我的存在只为了保护国王 每一刻...\n...\"我的生命何尝不是这城堡的一块砖\n而这城墙已随岁月逐渐腐朽\n曾经敏锐的目光也已变得模糊\"\n你看过我的信?\n是的\n每个字都是写给我的 对吗?\n谁...\n谁告诉你的?\n妈妈\n誓约!\n她违反了!\n我承诺一生隐埋秘密\n皇后违反了誓约!\n- 不\n妈妈没有\n她的信\n\"誓约 智慧 真理\"\n誓约生于理由和智慧\n誓约是你的灵魂所能接受的真理与圣洁\n妈妈履行了她的誓约\n而我 你的儿子...\n...也将履行我的誓约\n请离开这个地方\n陛下\n先生\n儿子\n你不能流放我\n你不能!\n一个儿子怎么会流放父亲?\n而一个国王...\n...可以流放王室守卫\n我 哈什国王 以最崇高的权力...\n命令你 伊克洛维亚 马上离开这里\n遵命!\n父亲 回到那平静的乡村\n享受简单快乐的农村生活\n我会接你回来 那时候...\n...我会甩掉脑子里那些发狂的 \"誓约\"和\"职责\"\n取而代之的是欢庆 和你孙子带来的快乐\n我希望看见你的笑容 你太苦了\n哈什!\n哈什 村民们告诉我 你命令伊克洛维亚离开这里了\n真的吗?\n为什么?\n看这个\n嘿!\n是谁?\n你?\n你来这儿干什么?\n哈什国王...\n- 说什么\n大声点!\n哈什国王让我离开了城堡\n我得另谋职业\n什么工作都行\n我可以为你擦皮鞋\n出去!\n给我滚出去!\n别再让我看见你的脸\n你的愿望就是我的工作\n快出去!\n黑暗淹没了我的脸 尤迪\n可我却看得清你的脸\n我看见杀死国王的凶手的脸\n你的子弹用尽了\n再发出一点声音...\n...就是你的死期\n我听着呢 尤迪 我能感觉你的呼吸\n安静\n安静 别出声\n安静才能活命\n要是你再喘息 我就解决你\n让你死是我的职责\n你来这儿干什么?\n哈什国王让我离开了城堡\n我给你送来了告别的礼物\n那好 放在门口就离开吧\n你不看看?\n我说...\n是什么?\n打开\n尤迪?\n你对我儿子干了什么?\n他在哪儿?\n尤迪在哪儿?\n他在铁轨旁徘徊 要和他一起吗?\n你见过伊克洛维亚笑吗?\n没人见过...\n除了我\n我挨打的时候他帮了我\n谁打你?\n- 爸爸\n你一定做了坏事\n- 不是我 是你\n我?\n我做了什么?\n你不记得了?\n- 不记得了\n皇后扯你的耳朵\n你哭喊着 \"一个皇后怎么能这样拉王子的耳朵?\"\n是啊 我当众亲你\n伊克洛维亚帮我不挨爸爸的打\n还带我去骑骆驼 给我买石榴吃\n但我还是很可怜\n- 为什么?\n我说\"我不会去亲回来了\"\n他听了...\n...就笑了...\n...就和现在的你一样\n我得告诉你一些事\n什么事 哈什?\n这是我父亲的枪\n要不是为了你和娜蒂妮...\n...我向上帝发誓 我...\n你别吓我\n我也吓得要命 ...担心你会离开我\n不会的 我保证...\n...等等 先听我说...\n...然后再承诺\n你干了什么啊?\n你杀了我的儿子!\n他杀了我的国王\n我履行我的职责\n- 履行你的职责?\n干得好!\n非常好!\n现在去杀了那个人 那个谋划杀死国王的人\n告诉我他的名字\n我去取他的人头\n你去取你儿子的人头?\n好啊!\n太好了!\n哈什安排的谋杀 让我等着你取他的人头!\n哈什!\n哈什 你的儿子!\n砍掉他的头 履行你的职责\n哈什!\n等等 瑞秋\n求你了\n为谁?\n你杀了我的父亲 哈什\n职责让你杀了我的儿子 为了职责 去杀你的儿子啊\n谎言!\n- 是真的 他...\n娜蒂妮睡了吗?\n你?\n你来这里干什么?\n等你\n你脸上有血\n谁的血?\n我不知道\n尤迪的...\n杰伊提的...\n我杀了他们俩\n现在你来这里杀我\n是的\n在我的匕首确定目标之前...\n...我必须知道真相 是你谋划杀了我的国王吗?\n是我\n那么我 城堡的守卫...\n...以及你的父亲...\n...必须履行我的职责\n准备受死吧\n我的亲生父亲将杀了我...\n...多么好的死法\n我准备好了\n为什么这么做?\n我无法想象 在驼群那儿你几乎杀了我...\n...你认为是我...\n...在驼群后面?\n继续吧 把你的匕首插入我的心脏\n来吧!\n你做不到\n因为你知道你的儿子决不会退缩\n为什么?\n为什么这么罪恶?\n为什么?\n\"誓约 智慧 真理\"\n我救了你的命\n看这个 是他杀了妈妈\n他的双手杀了她\n知道为什么吗?\n因为她一直呼唤着你的名字\n我知道他们会杀了你\n而你的王子为你做了什么?\n两千五百万!\n我给了他们十倍让你活命\n撒谎!\n全在撒谎!\n不可能是真的!\n我的国王不会这么干\n永远不会\n他不会的\n这些只是娜蒂妮的话\n这可能是她的幻想...\n...她的胡思乱想\n别试图改变我的决心...\n...醒醒吧 伊克洛维亚\n砍掉你的拇指 履行你的誓约\n誓约?\n誓约的前提是事实\n誓约站在真理这一边\n要是这一刻我的誓约有所动摇...\n...违反誓约的话 我们家族就会被埋葬\n妈妈告诉我履行自己的职责 就像坚强的伊克洛维亚一样\n你的死...\n...是我的职责\n可是 你的手在颤抖\n当一个年迈的父亲双手开始颤抖...\n...他儿子的职责便是伸出援助之手\n你在哪 我的儿子?\n- 我迷失了方向\n但我会回来\n我的双手沾满了血\n瑞秋的父亲\n一辈子也洗不干净\n让这些血迹随我的火葬一起被焚毁\n请照顾好娜蒂妮\n告诉她 妈妈很孤单 所以我离开她去陪伴妈妈\n我可以告诉妈妈 我履行了我的承诺\n我可以祈求瑞秋父亲的宽恕\n我可以完成我的使命\n你的职责...\n就是我的死亡\n- 住手 哈什!\n别!\n这是我的誓约\n尽管我的双手颤抖 但我内心坚定\n我眼瞎但...\n...我的耳朵好使\n我...\n只要...\n...一句话 ...\n...我的匕首会找到你\n父亲\n父亲\n我以为你从不会失手\n我没有失手 那是我最好的一掷\n\"砍掉我的拇指...\n...我的职责是你的死亡\"\n...那会杀了我的儿子\n你是对的 儿子\n伊克洛维亚错了\n伊克洛维亚错了\n错得那么严重\n妈妈 给我力量...\n...追随你的脚步\n给我指引\n我的心告诉我应该原谅哈什\n他支支吾吾 可他的心是纯洁的\n他愿意为此付出一生的代价\n太多的生命消逝 太多的血流失\n必须有人制止\n交给我吧\n祝福我吧 妈妈...\n...让我去减轻他的痛苦 帮他忘记所有的难过...\n...好好照顾他 孩子\n他有着高尚的心灵 看看他为我们所做的一切...\n...所有村民都来感谢他\n他归还了我们的土地\n哈什国王万岁\n万岁...\n- ...\n哈什国王!\n哈什国王万岁!\n我归还你们土地有自私的原因\n我想让我的父亲感到自豪\n今天 所有在场的人们都是我的见证人...\n...我在此证实 伊克洛维亚是我的父亲\n儿子\n父亲\n警察来干什么?\n- 来逮捕我的\n是时候以命抵命了\n恐怕我有些坏消息要宣布\n我准备好了 走吧...\n- 等等\n今天 我们调查了尤迪的房间...\n...在DVD盒里发现了自杀遗书\n巴布鲁...\n看看吧\n皇室的人渣\n他们知道我要抓他们 所以他们选择了更简单的解脱...\n...往高速行驶中的火车上跳 系自杀\n太遭了 终究还是逃出了我的掌心\n我心里是怎么都无法宽恕他们的\n先生 好手迹 不是吗?\n很好\n太好了!\n不是吗?\n爸爸\n== Srt 字幕转制：\n中國影視論壇 阿龍 ==\n你喜欢热天吗\n是的\n我没怎么想过\n可是...\n好像有点是的\n因为有那样的工作\n工作出色\n前面是永川\n没下雨吧？\n是的\n那个\n我一直拿着伞\n很喜欢\n是伞吗？\n折叠伞\n我喜欢折叠伞\n只有在需要的时候变大\n我很喜欢\n我走这边\n一点都不好\n挺乱的\n是的\n是伞吗\n没什么\n欢迎光临\n你养着猫吧\n不，不是养的\n它偶尔来玩的\n是野猫吗\n是怎样呢\n不知道是从哪里来的\n要是说野猫的话\n全都是野猫\n但是到了我这里来后\n就不认为它是野猫了\n这么说的话，我也是野的\n活着的东西全都是野的\n是那样吗？\n这是干燥的嫩芽\n是很好吃的\n我非常喜欢\n浸在水里会膨胀变得很大\n很好吃的\n这个什么都行\n比方说撒在这上面\n我很喜欢吃\n是增加味道的\n你总是自己做饭吗\n是的，我很喜欢自己做饭\n喜欢那个味道\n经常这样\n你妻子不做吗？\n现在是那样\n不在一起\n不会做\n没有一起住吗\n是的\n有点\n她和女儿住在一起\n和我想法不同\n你有女儿吗\n我有个女儿，哪里都一样的\n她几岁？\n20岁\n一个女儿吗\n是的\n对了，月薪多少？\n要说吗\n那个...\n20万的工资\n再加上副收入共30万\n要供房吗\n是的\n你一般去哪里玩？\n那个...\n要是能得到的话，还是想要的\n可是我不是说这种话的立场\n不是那样的工作\n80左右吧\n欢迎光临\n我要乌东面 好的\n要一碗乌东面\n一般多久来一次\n是的，一周2，3次吧\n2，3次？\n是常客吧\n是的\n总是吃乌东面吗？\n总是吃乌东面\n除乌东面外？\n除乌东面外，都没吃过其他的\n没有吗？\n除乌东面外没有其他的\n一般是什么时候来的\n我不记得了\n最近来的多\n你知道他是大日本人吗？\n不知道，原来如此\n很棒吧\n是的，人不可貌相\n你经常来这个公园吗\n是的\n我女儿经常来这里\n那个\n很怀念\n看到这里的时候\n其实\n我想要个男孩\n你喜欢男孩吗？\n与其说是喜欢\n不想在我这一代结束\n有那样的责任感\n有那样的\n当然我还没有放弃\n还想生一个吗？\n与其说是再生一个\n当然并不是说女孩不行\n我是这个打算\n想要这么相信\n现在也来玩吗\n和女儿？\n现在...\n每月一次吧\n做怎样的事玩？\n就是那个\n很普通的\n去看电影\n不去旅行吗？\n不去旅行\n总之\n不知道什么时候要工作\n我女儿要上学\n必须要马上行动的状态\n因此\n不能去旅行\n不能去海外吗\n从没去过海外\n我没有护照\n那个...\n想要放弃\n那是\n并不是有反美情绪\n我并喜欢\n保护日本的说法\n那是很少的\n你不喜欢美国吗\n要是说反美情绪的话\n当然\n在这个时代\n没有敌对的事\n这样的教育\n稍微接受了点吧？\n有点感觉到\n不要想太多\n这种事\n你怎么了\n喂\n不好意思，可以吗\n可以停下相机吗\n为什么\n是工作方面上的事\n喂\n喂\n是么\n好像是的\n那是关于角色吗\n哪里？\n是角色的事吗\n知道了\n知道了\n那么赶快\n是，我等你\n是\n怎么了 那个...\n或许\n会起作用也不知道\n作用？\n我在等联络\n是么 有可能要走\n那么可以继续下去吗\n要继续吗 是\n好\n你喜欢欧洲吗\n是欧洲吗？\n那个，对不起\n我接一下电话 好\n喂\n喂\n可以吗\n原来如此，是，知道了\n是，第二\n知道了\n请多关照\n怎么了\n我要走了 现在吗\n是的，我必须要去\n在这里吗\n不，我必须要回去了\n是工作的事吗？\n是工作\n山城先生\n山城先生\n我来晚了\n我接到命令赶来了\n知道了\n对不起，等等\n我正在采访\n让我进去好吗\n不要 只是一下子\n可以吗\n可以进去吗 不行\n很快就结束\n不行，对不起 拜托了\n不行\n那么可以在这里拍吗，从这里\n好\n封闭的野兽\n偶尔会出来\n把人吓一跳\n展现它的习性\n可以吗\n所以大家都看nhk\n原来如此\n这是很好的\n可是这不太好\n你做经理多久了\n从2002年\n4，5年？\n是的\n很忙吗\n还行\n最近收视率不是很好\n不是最近\n长大后怎么回来？\n不管他，他就会回来\n是男孩吗\n什么都不会\n那么很小吧？\n是的\n不断的...\n好像是那样的\n有多小？\n2，3天吧\n可是在回来之后\n很快就会走\n你的袜子很漂亮\n是么\n那是什么？\n是龙\n很烫\n好棒\n这个是床 好大\n说过不可以进来这里\n还在睡\n那么我也要回去了\n还有有赞助人要来\n下次不要这样\n再见\n这个是大日本人，怎么样\n感觉很好\n建造起来\n看了吗 没有看\n不喜欢吗？\n会给我添麻烦\n看过一次\n很大的麻烦\n虽然很好玩\n之前的很漂亮\n完全恢复到从前了吗？\n是的\n我觉得是恢复了\n自己也不是很清楚\n大概猫不找也会回来\n打了一次会累吗\n那要看情况\n可以到下一个怪兽出来\n都可以休息\n不知道，或许是今天\n也不知道地点\n不能休息\n要准备好\n这里有很多照片\n这个大的是谁？\n啊，那个是\n第四代\n第四代？\n第四代\n就是\n总之\n是我的爷爷\n啊，是你爷爷吗？\n就是那个\n那个是泡沫经济好的时代\n每晚大家都聚在一起狂欢\n佣人是那个\n有50多个人\n现在呢？\n第四代\n不，佣人\n没有佣人了\n完全没有佣人\n那工资还行吧\n并没有那样的情况\n所以，想去赏花的时候\n一个月去很多次\n自己付钱也不可惜\n大家会抢着出钱\n现在呢\n自己会出钱\n以前为什么那么受欢迎？\n那是因为\n因为怪兽的数量很多\n怎么说呢\n这样的产业是少见的\n现在只有我\n大家对于怪兽...\n认为非常有活力\n现在不会出现怪兽\n以前没有处理过吗\n我不是很清楚\n是黄金时期\n好像有过\n有很多人看过\n现在是深夜放送\n是的，深夜\n是的\n2点多\n是2点多\n收视率还好吧\n我不知道\n今天去哪里吗\n今天是\n听说中部地区有怪兽出现\n那里有很多电线\n我要去那边\n全国有几个地方？\n现在是...\n全国有几个地方\n还有在青森的八王子有个地方\n那里几乎没有被使用\n以前很多吗\n整个世纪听说有52个地方\n52个地方？\n在都内\n一个地方也没有了\n在都内的话，变身不是快吗\n特意去那里变身吗\n大佐藤先生被人称为兽吧？\n是的 是怪兽吗\n一般是叫怪兽吧\n总之就是\n对我们而言\n不是怪兽\n并不是可疑的\n现实中我们必须对抗\n要是有什么可疑的话\n融合其中\n一般叫兽\n在高中时\n想过这样的事\n我想一定是那样的\n不确认吗？\n不确认吗？\n是否那样\n光是想\n另一方面出动自卫队\n不是更好？\n有这样的意见吧？\n那个\n这种无心的意见\n我偶尔会听见\n那是没意义的\n传统这种东西\n应该怎么想？\n当然是很复杂的\n结果是\n生物和生物对抗\n然后弱的生物\n死去的样子\n给生物们看\n这种文化\n我绝对不能轻视\n最后的生物是谁吗？\n总之\n是独角仙之类的\n像是玩具一样的\n那些能控制的东西\n想要收拾掉的一代\n是孩子们吗？\n孩子们...\n包含孩子们\n不是很清楚\n这里能进去吗？\n我想没事吧\n你稍等？\n好\n我是大佐藤\n辛苦了\n他是来采访的\n可以让他进去吗？\n没事的 好\n你好\n你好\n开始\n我进来了\n退下\n变身的时候，总是这样的感觉吗\n是的，这样的感觉\n没错\n总是这个样子\n是的 是的\n总之，最近\n有点堕落\n这个仪式\n在从前是比较隆重的\n是很正规的\n在更早之前就开始了吗\n是的，从很久之前\n就开始了\n仪式必须要正规的\n现在不做也行吗？\n也不是说这样\n时代有了很大的改变\n没有规则\n必须在这里变身\n不...\n他偶尔来这里\n不是这里也行吗 是的\n必须要举行仪式吗\n没有仪式也行\n不举行也行吗？\n那为何要举行仪式？\n那个...\n因为这样最好\n因此...\n对不起，对不起\n能再来一次吗？\n能再来一次吗？\n从那里开始\n不好意思\n开始\n进来了\n请退下\n你们认为正义是什么？\n正义？\n正义是...\n正如字面意思\n就是...\n正义\n是很难的吧\n怎么样\n正义\n正义...\n有正义正义之说\n所谓正义\n谁说是正义呢？\n个人有个人的看法\n大家认为自己是正确的\n我想那就是正义\n因此\n这是不是就是正义？\n在这个世界上\n是\n你们认为生命是什么，生命？\n是生命吗？\n所谓生命\n是很难的\n所谓生命\n自己的生命在这里\n生命本身\n还是...\n世世代代继续下去\n那个连续就是生命\n说自己是生命\n死亡\n只是自己死\n自己死亡这件事\n是很重要的\n是不是有更重要的事\n比起生命\n生命当然是重要的\n生命本身\n杀人\n受伤\n不管是不是垃圾，都是生命\n动物也是\n这种东西\n是最...\n弹跳兽\n从高空跳下来\n会叫着，盛，盛\n这是弹跳兽的习性\n拜托不要遮住胸口\n德拉.\n阿默雷\n德拉.\n阿默雷开始了\n谢谢\n谢谢\n就要开始了\n大佐藤先生经常来吗\n是的，在长野工作的时候\n经常来\n对不起，你们是什么关系\n我们吗？\n是朋友\n青梅竹马的朋友\n从以前起关系非常好\n是好友的感觉\n你是怎么看待 大佐藤先生的工作的\n是很辛苦的\n我也看见了\n他的身体\n会变形吧\n那是不是很痛\n充电后，要是我变大的话\n变大后，救人\n有没有这样的\n想要帮助人\n妈妈桑，你几岁了\n怎么了，你看我像几岁？\n50...\n50？\n你太过分了\n你是不是太过分了\n不说是20岁\n50岁太过分了吧\n48岁左右 讨厌\n妈妈桑呢？\n对不起 妈妈桑不去吗\n妈妈桑不去吗\n危险 不要一直拍\n小心点 谢谢\n再见\n小心点\n妈妈桑，你小心点\n明天见，晚安\n再见\n京子小姐，你很大\n嗯？\n好大\n是的 多少公分？\n87公分左右\n她还小，不能对比\n牙齿在矫正吗\n是的，矫正中\n是她的社长？\n是她的社长\n社长 社长\n社长\n社长 社长\n社长\n讨厌，你在这里，再见\n春\n有人吗\n你好，我是大佐藤\n你好\n这个 谢谢\n是三号室吧\n是的\n== Srt 字幕转制：\n中國影視論壇 阿龍 ==\n是三号室吧\n是的\n失礼了\n来这里多久了？\n爷爷\n三年左右\n是不是在发呆\n年纪大了\n是么，有什么奇怪的行动吗？\n是的\n他会嘴里絮叨\n晚上会转来转去吗\n有点\n爷爷很辛苦吧\n是不是吃太多药了\n在年轻的时候\n吃太多药了\n有来自国家的补助吗\n顺便说一下，你父亲怎么了\n结果我爸爸\n他也有责任\n或许是有责任的\n我爸爸死了\n年轻的时候\n想要更大的\n因为做过头了\n猝死的\n取而代之的是\n我家的第四代爷爷\n连儿子的份\n都要长久下去\n这是我的判断，我是这么想的\n什么都变得很大\n突然之间改变的\n这有点不好\n因此另外也有问题\n因为头脑聪明\n而溜走了\n实际上变大了吗\n没有\n喂 爷爷出去了\n从医院逃出去了\n东京塔对大日本人\n这个怎么办？\n就是那样\n这是第四代做的事\n这跟第几代做的无关\n我再怎么努力\n赞助人都不见了\n我为此感谢你\n但我怎样都行\n你在说什么？\n赞助人都是当官的\n那个我不知道\n那是作为经纪人的你做的\n我？\n是第四代？\n你是第四代吧？\n是第四代 这到底是什么\n像这样的？\n有你不知道的情况\n你家里的情况\n请要和睦点\n我正在这样努力着\n总之关于赞助人的事\n这个月或下个月\n我要回去\n我不行\n不要让我一直说\n只有我不行\n这样不是很好吗\n这是最后一次\n我心里知道\n你在说什么，现在的你\n赞助人是不会来的\n你给我适可而止\n我说了现在不行\n那请你想想办法\n不行的事你不要那么说\n你别对我生气\n这绝对是不行的\n那是我的政策\n不管别人怎么说， 这绝对不能让给别人\n要是做我的经纪人的话\n你要好好记住这一点\n瞪眼兽\n瞪着敌人\n位于新宿\n有瞬间沉睡的特征\n这是瞪眼兽的习性\n那是什么怪兽？\n我不知道\n下次是什么时候？\n数字很好\n是的\n平时是7%\n是的\n太好了\n我很想看\n早上好 早上好\n能和你谈一下吗\n这辆车很好\n是，很好吧\n是你买的吗 是\n新车？\n嗯\n多少钱？\n500万？\n好棒\n已经付清了吗？\n一半一半\n付清了吗？\n你的狗好大\n它叫什么名字？\n它叫新桥\n在下面的是叫德尔加希\n德尔加希？\n你现在是去工作吗？\n是\n带着狗？\n嗯\n不要紧吧\n嗯，它很乖的\n哪只？\n两只都很好\n德尔？\n哪只是德尔？\n你上次看了数字吗？\n是的，我看了\n非常好\n托你的福 还做那个吗？\n是的\n要是附近还有就好了\n要和大日本人打怎么样？\n我看了我看了\n怎么样？\n那不太好\n那不太好？\n我也看了 看了？\n比起被人打\n喜欢打人\n是同样的\n不要太儿戏\n想看正经点的\n有点可悲\n日本人要再振作点\n是的，那样就好了\n当然我会支持，觉得很好\n你有车吗？\n还没有买吧\n还没有买\n你想说什么\n就是那个\n我想让你调查调查\n我现在正在调查\n尽可能的告诉我\n那个时候不逃走就知道了\n我知道 那个时候\n逃走不好吗？\n你是经纪人\n不要说我逃走\n很奇怪吧 因为你逃走了\n让我看的很清楚\n那非常好\n我不是逃走，那个时候\n只有那样做\n你看见了也知道吧\n总之看来不像日本人\n那个\n是哪个国家的？\n不晓得\n我们的邻国日本\n惹恼了将军\n要惩罚大日本人\n是那个\n是那个\n是很难的\n那个\n给我女儿的礼物\n给女儿的礼物\n不知道买什么好\n我买了帽子\n帽子\n是给我女儿的\n我女儿说过喜欢的\n我不知道哪里有卖\n你看来很开心\n不是这样的\n跟平时一样\n我想尽快\n看到女儿的脸\n多久没见了？\n是一个月左右\n总是来这家店吗\n是的\n我老婆的老家就在附近\n我从以前起就来这里\n不认为是大男人主义\n这是碰巧\n你很开心 不是这样的\n是很普通的\n是的\n我想看见女儿\n一月一次\n可是我有工作\n不能一直来这里\n可能的话，每天...\n我想女儿是这么想的\n是很难的\n喂\n你在干吗？\n怎么了 不知道\n我没跟你说要拍摄下来吧\n没事吧 别紧张\n一点事都没有\n你是不是化妆了\n在做什么\n你做那种奇怪的工作\n怎么了\n你说吧\n由你来说明不是很好吗\n对不起\n我会带来女儿\n可以的话，希望你别拍她的脸\n今天不知道要被拍摄下来\n可以的话，用马赛克\n不需要用马赛克\n要是被人知道了， 她在学校会被人欺负的\n不会被人欺负的\n你声音太大了\n怎么了，没有什么害羞的事吧\n要是大马赛克的话就行\n我也打，她也打要是打马赛克， 就不知道什么意思\n只要拍下你不就行了，我们不要了\n不要打马赛克\n没有其他的方式马\n你喜欢爸爸吗\n不知道\n你是怎么看待爸爸的工作的？\n不知道\n你想要爸爸吗？\n怎样都行\n多久见一次面？\n是半年一次吧\n半年？\n是\n不死一月一次吗\n不，半年一次很好\n他是说一月一次\n那是限度吧\n没有离婚吧\n打算离婚的\n我\n我打算离婚\n不知道他是怎么说的\n和小孩还有联系\n对孩子倾注的爱\n不会倾注吧\n是的\n大佐藤先生说女孩也没关系\n那绝对不行的\n这不是不好吗\n怎么看都觉得不好\n绝对讨厌\n你现在做什么工作？\n我现在在朋友的店里帮忙\n是\n那里的社长是我的朋友\n竞争是比较激烈的\n原来如此\n是\n这个录影带 是\n能给佐藤先生看吗\n是，那当然了\n是这样的感觉\n感觉好吗\n不是这样的打算\n是这样的情况\n你丈夫是怎样的人？\n是很普通的日本人\n夏\n好热\n是的\n今天大概不会下雨\n保险起见\n很热吧\n是的\n很热\n出现怪兽了\n怪味兽\n身体会发出怪味\n这是怪味兽的习性\n怎么回事\n你在干吗\n什么？\n因为你在这里\n有多不方便你知道吗？\n我做怪味兽很多年了\n不用你来说\n总之你不能来城市\n你快逃到郊外去\n你这算什么\n拿着棒\n那是什么？\n恐怖的表情\n彼此彼此\n罗嗦\n我说，那个\n大婶，在这种时候\n谁是大婶？\n什么？\n什么？\n我不知道你的年龄\n你光是站在这里\n就会让交通阻塞\n这个我不管，把车这样不就行了\n你别这样\n会给汽车添麻烦的\n别...\n别这样\n你不要弄碎玻璃\n去死\n我是保护这个国家的\n你闭嘴\n你是从哪里来的\n关西\n滚回去\n我刚来\n你的目的是什么？\n不能告诉你\n你快滚\n你看看\n一直跟着我来的\n等等\n那是什么？\n是想和谁较量吗？\n是的，想和我打\n一直跟着我\n不...\n这不行\n在这里发生那样的事绝对不行的\n你看着\n他还是小孩，才10几岁\n绝对没事的\n不...\n别这样\n绝对不行\n我知道了\n谁会理他\n他只是个傻瓜\n可是他很有热情\n只有那个\n要开始了\n声音变大了\n你真烦\n等等，你想说什么\n你也对他说说\n你\n你，请别这样\n你在做什么，你啊\n不管有多兴奋\n完全感觉不到你是个女人\n这算什么\n童之兽\n要回到郊外\n这是童之兽的习性\n还有任务\n妈妈\n妈妈\n我要快点\n这个怎么说呢\n是不同的东西\n在转最后一圈的时候\n相差很多\n即使相差没有那么多\n头脑中还是知道的\n向着终点\n总之\n就是这么回事\n妈妈\n我要快点\n好痛\n事情变得很严重\n什么？\n什么\n你杀了小孩\n上次的事\n这次...\n杀了无抵抗的孩子是事实\n对他的印象有了很大的改变\n想要对他采访\n他没有来让我很吃惊\n我没杀人\n原本那种事，没事的，你喝吧\n谢谢 原本是那样的\n我没杀人 是么\n只是时机不好\n一周一次吧\n相反的为何不行\n我没做什么坏事\n他咬了你奶子\n杀死他也是...\n奶子是很重要的\n还有那里\n下次你什么时候回去\n不要\n为什么，请做吧\n数字很好\n你别再说什么数据了\n不是这种事吧\n快到终点了\n我不感兴趣\n这是很好的\n我一点都不感兴趣\n你害怕吗\n什么什么？\n杀了孩子\n我为何要害怕？\n像是恐惧\n我之前就想跟你说的\n是\n并不全都是可怕的\n是么？\n总之\n要是我有什么不测的时候\n那么...\n我最在意的是\n谁来照看第四代\n要是我遇到不测的时候\n第四代\n由谁来照看？\n送到老人院吗？\n不能送去老人院\n上了年纪吧\n不是那个，是心意\n我受过第四代的照顾\n他对我有恩\n恩义？\n我要表表心意\n对了，还没有问你小时候的事\n我不喜欢\n是怎样的孩子？\n是怎样的孩子呢？\n是个很普通的孩子\n很胖吗\n有点，只是一点点\n多少？\n是个健康优良儿\n有没有减肥\n没有\n第五代，我父亲的教育\n是叫我不停的吃\n你有一天必须要成为大日本人\n有这样的教育方针\n你父亲去世了吧\n也有不好的方面\n为何那样？\n因为眼睛不好\n喜欢出格的事\n你害怕吗？\n那是很过分的\n总之对身体还没有完全发育的 小孩的我\n那个\n想要给我通电\n没事吧\n不是没事\n我还没有做好心理准备\n还是小学生\n痛吗？\n我很害怕\n不知道是怎么回事\n那个...\n是古怪的吗\n是第四代的爷爷\n在通电前阻止就没有意义了吧\n被电到了吧\n可是\n通电了吧\n要是没通电的话\n更加悲惨吧\n你很强\n什么\n酒量\n什么啊，不仅是酒量\n什么\n我要回去了 你没事吧\n什么 在下雨\n我有这个\n那是什么？\n是折叠伞\n你今天带来了吗 跟你说了一直带着\n你真行\n我是大日本人\n喂\n我刚刚出来了\n接下来请看拍摄实况\n美国英雄超级贾斯特斯!\n超级贾斯特斯之父!\n母亲.\n斯特乌兹米\n青春期的妹妹德塔齐米!\n婴儿毕玛宝宝!\n超级贾斯特斯开始射击\n不要输，超级贾斯特斯\n我看见了，贾斯特斯\n很高兴见到你\n我赢了\n我赢了\n组合...\n组合\n是 组合\n组合\n组合 不要了\n一定要\n是\n那么\n组合\n没什么关系\n组合\n我要回去了\n谢谢 组合\n不，我不会飞\n组合\n组合\n一定要\n好\n没事吧，我害怕\n没事吧\n组合...\n组合\n对不起，对不起\n我的鞋子\n剧终\n主演松本人志\n主演竹内力\n务必尝尝\n不好意思\n干杯\n什么 刚刚做了什么？\n不行吗？\n让我看看\n是很普通的\n是什么\n除我之外的没有94分的\n不是这样吧\n一开始是怎样的？\n开巴士来\n突然间巴士变成红色的\n一般是巴士吧\n有使用动物的作业\n作为英雄是很棒的\n那么是什么？\n一般是这样的\n你太守旧了\n跟新的不同\n一开始就要战斗吧？\n从那里开始吧\n不是的，是巴士\n突然间是很难明白的\n你听我说\n我说了这是很难看的\n突然开巴士来\n首先是拳击\n还有踢，先从基础开始\n中间或许有巴士\n一开始绝对不能用巴士\n是么\n不管怎么看，都不好\n非常的丑陋\n哪里？\n从整体来看\n是么，感觉...\n你是怎么想的\n像是这样的感觉\n你在听我说吗 我在听\n我并没有生气\n还有你\n必须一个人干下去\n我不能一直都照顾你\n我知道，妈妈\n知道吗？\n我知道\n顺序不好，看来很丑陋\n希望你做的顺利点\n我是说这个\n原本\n宝贝是第一的\n那是决定好的\n我觉得这样很好\n最后你的踢脚\n踢的很好吧\n我踢到了 踢到了就结束了吧\n我踢到了\n有客人在，你不要那么大声\n我生气了\n一般当然是给小孩了\n结果是这样\n你不觉得很土吗\n不仅如此\n我知道 我很生气\n我知道\n一定要\n你不明白\n你真烦，我明白了 虽然你总是这么说\n但其实不明白吧\n我都听见了 你完全没有听见\n不是的\n那个时机不好\n对不起\n你觉得这样很好吗\n不要怪我 你是傻瓜\n不要怪我，不要这么大声\n不觉得害羞吗\n你总是这样子\n适可而止\n一定要\n太好了\n打一拳就好了\n的确如此\n我觉得很害羞\n为这样的孩子感到丢人\n什么\n太不像话了\n最后你想怎样？\n想要打人吧\n你要清楚点\n太不像话了 一定要\n要像这个人\n顺序不好\n太过分了\n这么说是他吧\n你别用手指指人\n是他 别用手指指人\n在加入的时候\n全都是他不好\n你是叫佐藤吧\n是吧，你\n所以大家组合的时候是什么\n你说了什么\n为什么那么做？\n不，那个是\n他不知道\n一般会知道的吧\n一般是不知道的\n你要清楚点\n适可而止\n一定要\n希望你伸出手\n客人没有说\n今后必须要保护\n这是无关的\n希望你进去\n先跟你说清楚 你要到最后\n全体在一起的时候\n我也在\n一定是那样的\n你在旁边做什么？\n你一直在说什么吧\n那是什么\n那有点丑陋\n或许不知道\n我们在飞起来的时候\n是没有意识的\n所以向旁边看的话\n是不是很丑陋\n要看周围\n所以有点害羞\n你为何一直说这个\n我要杀了你\n杀人不行\n杀人是不好的\n坐下来\n一定要\n导演松本人志\n如今\n我们迷路了\n没有\n这是近路...\n亲爱的 我们都开了一小时了 但一辆车影都没见到\nMolly 我会看地图 知道吗?\n不久前刚经过一个加油站\n调头回去问问别人\n那可是40分钟前了\n我可不回去\n别这样\n又为这些事争吵吗?\n男人也会有问路的时候的\n不 我们不回去\n男人天生就这样\n路线我清楚得很\n哦 那好 在哪?\n99号高速路 行了吧?\n就快到了\n99号高速路 嗯?\n你瞧 到处看看风景也不错\nDavid\n今天是我们结婚纪念日 就这样耗在兜圈上吗?\n我知道\n我很抱歉\n那我来补偿一下 行吗?\n过来\n别 我生气了\n哦 过来 Molly\n嘿 你会喜欢的\n不 我不想\n你真混\nDavid 我说真的\nMolly!\nDavid?\nDavid?\nDavid?\nDavid?\nDa David?\n!\nDavid?\n!\nDavid?\n嗨?\n有人吗?\n嗨?\n是你\n你没事吧?\n我很抱歉\n当时没看见你\n你...\n你受伤了?\n先生?\n凶鬼恶灵 第二季 第16集 时间轴：\n何何 @人人影视\n停车!\n停车!\n该死...\n你们得帮帮我\n求你了\n求求你!\n好的 好的\n冷静点 冷静点\n告诉我们发生了什么\n我..\n猛打方向盘 之后车失控了\n当我醒来 车毁了 我丈夫不见了\n我去找他 可是之前路上的那人追了过来\n他看起来是不是像被割的七零八落的\n你怎么知道?\n我猜的\n女士 你叫什么?\nMolly\nMolly Mcnamara\n或许该和我们一起走\n我们把你送到镇上\n我不能\n我得找到David\n他也许会回到车那儿去\n我们先把你送到安全的地方\n之后Dean和我会回来\n帮你寻找你丈夫\n不\n找不到他我哪儿也不去\n请把我带到自己的车那里 行吗?\n没问题\n上车\n\"公路杀手\"\n就在那儿\n我不明白\n我肯定当时就在这里的\n我们就撞到那棵树\n这...\n怎么可能\nDean 我们要敢紧离开这\nGreeley随时都可能再出现\n我们怎么和她说?\n实情?\n她会离开 跑到别处去的\n我知道听起来叫人难以置信 但是我当时真的撞到这棵树\n不知道谁把车移走了\n整辆都被移走了\n你们必须要相信我\nMolly 听着 我们相信你\n所以想帮你离开这里\n那David怎么办?\n一定有什么事情发生\n我要去报警\n报警 好主意\n我们带你去警察局\n快来吧\n对你和你丈夫都好\n好的\n我们本该在太浩湖了\n你和David?\n我们的5周年结婚纪念日\n可怜的周年纪念\n不久前 我们还在冷战\n当我们被困在车里时 才能真正的吵上几句\n是啊\n我很清楚那种感觉\n你知道我最后一句说的什么吗?\n我说他是个混球\n哦 天啊\n万一那是我和他说的最后一句话怎么办?\nMolly...\n我们会查清楚你丈夫出了什么事\n我保证\n- 是你?\n- 不是\n你这么说我还真有点担心\n这首歌\n什么?\n我们出车祸时也在放这首歌\n她是我的\n她是我的\n她是我的\n那是什么?\n坐稳\n你在做什么?\n那是什么...\n刚才怎么回事?\n别担心 Molly\n没事的\n言之过早 Sammy\n我想他不会放过她的\n这不可能\n哦...\n相信我 已经发生了\n哦...\n那好\n多谢帮忙 但我想我该告辞了\n等等\nMolly Molly 稍等一下\n离我远点\n别这样 听我说\n别过来\n我们遇见你完全是个巧合 不是吗?\n你是什么意思?\n要不是遇见你的话我们也不会在此\n早就离开了\n猎杀\n猎杀什么?\n鬼怪\n别...\n对她说真话\n你们疯了\n是吗?\n比流着肠子消失的家伙更疯狂吗?\n你清楚自己看见的\n那人名叫Jonah Greeley\n是个当地农民 15年前死于这条路上的车祸\n别说了\n每年中在他的忌日的夜晚 他就在这条路上作怪\n这就是我们来这的原因 Molly\n来阻止他\n那我想这个幽灵也把我的车弄没了\n恐怕更糟\n嗯?\n知道吗?\n我可没发疯\n我自己去报警\n说句难听的 我觉得你根本走不远\n你是什么意思?\n就是计划A是把你带走\n显然没成功就因为 嗯 这个农夫马路杀手\nMoly 我们说的都是实话\nGreeley是不会放过你的\n你们...\n说真的 是吗?\n绝对\n每年 Greeley都会他的死而杀人\n今晚选中了你\n为什么是我?\n我没做什么\n跟这些无关\n有些幽灵看见谁就盯上谁\n你们的意思是 Greeley绑走了我丈夫?\n哦 天哪\nMolly 我们会帮你的\n但是首先 你得帮我们\n帮你们?\n怎么帮?\n就是这里 我在这见到他的\n一定曾经是他的杀人乐园\n真是个温柔的家伙\n外边没有墓碑之类的\n你找Greeley的坟墓?\n是的\n为什么?\n我们可以挖出尸体撒上盐然后烧毁\n哦\n当然\n这是消灭幽灵的途径之一\n这能救David吗?\n你们俩个都能救 前提是找到尸体\n那我们怎么找?\n嗯 不大肯定\nGreeley死后 他的妻子领走了遗体\n之后她也没再出现过\n猜得没错的话他被埋在这里\n但这可有上千英亩土地\n埋在哪里都有可能\n你们就是干这个的\n鬼怪克星\n是啊\n除了没穿紧身衣\n让你着迷的故事还有很多\n但这条路上的幽灵每年只出现一次 得赶在日出前解决他\n所以边走边说 好吗?\n太好了\n我们找什么?\nGreeley的房子\n他可能埋葬在那里\n注意道路或是小径之类的\n跟紧些\n好的\n那好\nMolly?\nMolly 救救我\nMolly?\nDavid?\nDavid?\nDavid?\n嘿!\n你没事吧?\n那个该死的家伙是不是这样抓走我丈夫?\n别太紧张 好吗?\n你会再见到David的\n一定会\n嘿\n沿着这条恐怖的砖路走吧\n走吧\n那枪射的是盐块?\n是的\n简单的盐就能驱鬼?\n小东西往往能派上大用场\n在多数文明里 盐是纯净的象征 能驱除不洁之物\n和驱赶抓住你的那个是同样的道理\n知道吗 我还是头一回想在这种地方 看到一间好房子呢\n外面有墓碑吗?\n是啊\n哪有这么简单?\n我猜也是\n你们两个检查楼上\n看看能不能找到他埋在哪儿的线索\n我在这边看看\n太棒了\n看这个\n是Greeley和他妻子\n这是他写的情书\n我的天 写的真美\n真不明白这样的人怎么会变成那种妖怪\n像Greeley这样的鬼魂 他们...\n就像受伤的动物\n迷失在...\n无尽的痛苦之中 他们要宣泄\n为什么?\n为什么要留在这儿?\n他们的一部分\n把他们留在现世\n比如遗体 或者 呃...\n未了的心愿\n对\n也许是复仇\n也许是爱\n或是仇恨\n不管是什么 他们太过于执着\n无法放手\n他们被困住\n陷入无尽的循环\n同样的悲剧一遍又一遍的重演\n你好像很同情他们\n因为他们并不是坏人 你知道\n很多本性善良\n只不过...\n发生了一些事\n他们不能控制的事\n一说到这种事 Sammy就像J Love Hewitt一样\nJennifer Love Hewitt:\n鬼语者的主演\n我呢 可一点也不喜欢他们\n也绝不会向他们道歉\n楼下什么也没有\n你找到什么线索了吗?\n呃 只有他们以前的信和账单之类的\n我翻了翻 还没找到有关坟墓的\n什么?\n后面有东西\n拿着\n从里面锁上了\n闻起来像个老太婆的房间\n这就说得通了\n现在我们知道为什么没人再见过她了\n她不想一个人独活\nDean 帮个忙\n来真的?\n你要干嘛?\n不能就这样把她留在这儿\n为什么不?\n她应该得到安息 Dean\n见鬼...\n如果你们能让Greeley安息...\n他们会怎么样?\n女士 这个问题可超过我们的能力了\n你们猎杀这些鬼魂 却不知道他们会怎么样?\n反正没有一个回来过\n这就行了\n当他们放弃了让他们留在这里的东西 不管是什么 他们就...\n就这样走了\n希望他们去了更好的地方 但我们不知道\n没人知道\n你们烧了他们的尸骨以后会怎样?\n我爸说过 就像鬼魂的死一样 明白么?\n可是...\n事实是 我们还是不知道\n没法确定\n也许这就是我们拚命求生的原因\n死者也是如此\n我们都只是害怕自己不了解的东西\n我唯一害怕的是失去David\n我得再见他一面\n一定要\n我觉得咱们应该告诉她她丈夫的事\n不行\nDean 这太残酷了 她这么想她丈夫\n我不想瞒着她\n这是为了她好\n我知道你觉得内疚 可是咱们得按计划行事\n带她离开这儿\n然后再告诉她\n告诉我什么?\n你们瞒着我什么?\n是关于David的对不对 你们知道他怎么了\nSam 别...\n别什么?\n别告诉我 因为我会搞砸你们的行动?\n你们根本不关心我或我丈夫\n不是的\n真的?\n那就告诉我 不管是什么 求你了\n他来了\n和她呆在一起\nDean!\n他抓走了Molly!\n这家伙真死心眼\n我们得找到Molly\n我们得找到Greeley的尸体\n还有 呃 不是催你 不过离天亮只剩下不到两小时了\n嘿\n找到什么了?\n1992年2月6日\n车祸之前2个星期左右 对吧\n对\n看起来像是狩猎小屋 可是...\n我敢肯定他们站的这个地方有颗树\n早该想到了\n什么?\n这是一种乡村的老传统 Dean\n种树作为墓标\n你简直是个活的怪事大百科\n是的 我知道\nDavid在哪儿?\n你把他怎么了\n你不用担心他\n哦 天啊\n你该担心你自己\n我又没对你做什么\n哦?\n我知道 我知道你妻子的事\n就算折磨我也不能让她回来\n我妻子已经不在了\n我只剩下...\n折磨你了\n求 求求你\n放我走吧\n走?\n你哪儿都别想去\n永远别想离开\n去救Molly\n哦 感谢上帝\n叫我Dean就好\n这家伙真把我惹急了\n快点 Sam!\n哦 心肝儿 今晚真够漫长\n好了\n咱们离开这儿\n我哪儿都不去 除非告诉我我丈夫怎么样了\nMolly...\n我一直在找他 你们知道...\n你们知道Greeley杀了他 对吧?\n他死了?\n不 Molly\nDavid还活着\n什么?\n你确定?\n是的\n我们带你去见他\n来吧\n他就在那边的房子里\n我不明白\n你会的\n这不...\n不可能\n怎么回事?\n那是谁?\nDavid的妻子\n对不起 Molly\n15年前 你和你丈夫开车撞死了Jonah Greeley\nDavid活了下来\n你在胡说什么?\n我们是说41号公路上不只有一个鬼魂\n而是两个\nJonah Greeley 还有你\n在过去的15年里 每年的那个晚上你都会出现在公路上\n不 这不可能\n昨天是我们结婚一周年纪念日 2月22日\n1992年\n对\nMolly 现在是2007年了\n哦 天啊\n好了 说说41号公路吧\n15年里发生了12起事故\n5起有人死亡 所有的事故都发生在同样的晚上\n那我们找的是 州际死亡地带?\n幽灵搭车客?\n还是什么?\n不完全是\n每一年目击者说是同样的东西害他们出事\n一个女人出现在路中间 被一个浑身是血的男子追赶\n两个幽灵?\nMolly葬在哪里?\n她 她没有被土葬\n她被火化了\n她的尸体被火化\n对 是什么让她还留在世上?\n有些鬼魂只看得到自己想要的\nDavid?\nDavid?\n停车!\n快停车!\n帮帮我\nDean 我想她还不知道自己死了\n求求你!\n开门!\n求你了!\n好了 好了\n冷静点\n告诉我们出什么事了\n你要告诉她什么?\n实话\n她会跑走的\n有些鬼魂太过于执着\n无法放手\n那Greeley呢?\n每年他都要把自己的死怪罪在别人身上 追杀他们\n折磨他们\n每年 这个人都是你\n但我什么都不记得\n因为你看不到事实 Molly\n这就是为什么他不让我离开公路\n因为...\n是我杀了他\n我把我们两个都害死了\n为什么不在看到我的时候就告诉我?\n为什么要等到现在?\n你不会相信我们的\n而且你们要我当诱饵\n对 我们需要你\nDavid\nMolly 我们带你来这儿是为了让你能放手\n我得告诉他\n告诉他什么?\n你爱他?\n还是你很抱歉?\nMolly 他已经知道了\n要是你想进去 我们不会拦着你\n对 但是你会吓坏他\n吓死他的\nDavid已经用他的方式说了再见 Molly\n现在轮到你了\n这就是你未了的心愿\n我该怎么做?\n只要...\n放手\nDavid和所有的一切\n你那么做...\n我觉得你就能走了\n可是你们不知道会去哪儿\n不\nMolly 你不属于这个世界\n难道你还没有受够折磨?\n时候到了\n是你离开的时候了\n我觉得她还不错\n作为一个鬼\n你真的觉得她会去一个更好的地方?\n希望如此\n我猜我们永远不会知道\n直到我们自己亲身体会到 是吧?\n无所谓 Dean\n希望是最重要的\n好吧 Haley Joel\n[饰演《第六感》里的那个小孩的演员]\n上路吧\n你不会相信 我替你杀的人会复活\n罗洛托尔斯 你欠债 你一定要还债\n否则你不能活着 看我是否说实话\n欠债?\n你认为我欠你多少?\n克伦斯说你知道\n我从17岁就没有 被人用枪指着头\n而今晚\n今晚\n今晚还没有结束\n你不能离开\n你活不久\n不管你是谁\n你不知道我是谁\n这本来是友善的拜访 托尔斯先生\n你的烦恼都结束了 你应该松一口气\n你的还没有结束 我保证\n谁都不能对我这样!\n没有人这样对你\n你没有办法阻止\n一遍又一遍又一遍\n做好了再做\n刚开始就结束\n手骨 人手 骨头人\n一遍又一遍又一遍\n做好了再做\n刚开始就结束\n刚开始就结束\n刚开始就结束\n刚开始就结束\n想看魔术吗?\n你有问题\n问题?\n居然用枪指着他的头 你这个疯混蛋!\n我不会砍头 我同意时跟你说过\n我说过让我处理\n你应该处理\n这全是误会 还来得及到那里然后\n我不会回那里\n才怪!\n你看不到全貌\n关系到的不只是我们的命\n关系到什么?\n克伦斯 那个人是谁?\n为什么尽快解决这麽重要?\n没时间解释\n你在那里等五分钟 让我有机会跟他谈\n我不会在这里等\n这里是敌区\n我挂了电话马上离开\n那麽五分钟后 打电话到糖果店给我\n我没有带零钱\n那就打对方付费电话\n听好 混蛋\n你害我们惹上麻烦 要给我机会解决\n我五分钟后离开\n你最好打电话给我\n(主演 戴伦威尔)\n(主演 艾德奥罗斯)\n片名 杀手无名\n接线生 要打几号?\n史丹菲66286\n请等一下 我替你接\n谢谢\n好了 不要再按铃了 该死!\n我来了 第一次就听到了\n我来了!\n我还没有聋 该死!\n当然是你 莫迪曼先生\n不然还有谁?\n让我猜猜 你的钥匙又弄丢了?\n对不起 你大概弄错人了\n如果你想表示什么 我不明白\n如果是笑话 我并没有笑\n我一点都不知道你在说什么\n我15分钟前发现 挂在门柄上\n门开着而且没有行李\n我看你想溜走\n对不起\n对不起 我不知道头在哪里\n很漫长的一个夜晚\n先生 你连一半都不知道\n你再弄丢就不给你了 我保证!\n谢谢你 对不起\n嗨 莫迪曼先生\n房间在哪边 记得吗?\n狗屎!\n笨蛋 你懂什么?\n一秒钟前你以为是糖果\n我虽然不知道它的名字 但不表示不知道是什么\n它不是一个人\n你不知所云\n对 我不知道\n我甚至不知道你说什么\n这场谈话让我头痛\n我什么都不想说 但我闻到尿味\n好 你走吧\n我好像没听到\n你听到了 把你的臭嘴带走\n把小甜甜也带走 他让我毛骨悚然\n把门关上\n贝马许和柯威尔在湖上\n唐保姆和法兰科在船屋里\n我刚在码头上见到班吉\n最后还有我们\n我告诉你 罗洛\n接下来几小时谁都动不了你\n你只要确定比我先死\n耶稣 我在地狱里\n拜托 主啊 让我熬过今天晚上\n我求你\n如你所愿\n谁呀?\n是谁呀 该死!\n罗洛?\n伏斯柏?\n老天 伏斯柏\n你在干什么?\n你开枪打谁?\n没什么\n没什么 只是意外\n意外!\n罗洛 你\n关掉该死的灯!\n关掉!\n好 关掉了!\n别紧张\n现在出来\n好 你要装子弹时叫一声\n我的枪\n我的枪在哪里?\n在哪里?\n在哪里?\n我的枪在哪里?\n你在这里\n是的\n嗯 你想怎样?\n我已经办好了\n你没有 你跟克伦斯在一起\n是的\n老天!\n你是怎么进来的\n老天!\n我以为你\n你夺走我的枪\n你在开枪\n我\n我以为你是别人\n我不是\n你说的别人也不是\n什么意思?\n他死了吗?\n他死了 我活着\n确定是他吗?\n他脸上戴了黑面纱\n是他 老天!\n头在哪里?\n我离开时还在他肩膀上\n胡说!\n胡说!\n我跟克伦斯说过 我要他的头 我告诉他\n我建议你自己去砍吧\n我相信你有东西给我\n是的\n我有东西给你\n我要问这是什么吗?\n一块钱 混蛋!\n为你没有做的事付的钱\n并不是我欠你的\n你误会了我的角色 托尔斯先生\n我不是你做的协议 讨价还价的人\n我不是来谈判的\n你想吓我吗?\n你连脸都不敢露\n这不表示你不该害怕\n你这个可恶的家伙\n你不相信我并不会使 我替你杀的人复活\n罗洛托尔斯 你欠债 你一定要还债\n否则你不能活着 看我是否说实话\n欠债?\n你想我欠你多少?\n克伦斯说你知道\n我从17岁就没有 被人用枪指着头\n而今晚\n今晚\n今晚还没有结束\n你不能离开\n你活不久\n不管你是谁\n你不知道我是谁\n这本来是友善的拜访 托尔斯先生\n你的烦恼都结束了 你应该松一口气\n你的还没有结束 我保证\n任何人\n谁都不能对我这样!\n没有人这样对你 托尔斯先生\n你没有办法阻止\n接线生 要打几号?\n史丹菲66286\n请等一下 我替你接\n谢谢\n克伦斯?\n你在吗?\n我听得到你的呼吸声 可恶的混蛋!\n趁还能的时候享受吧\n因为只要我还能活一天\n我对天发誓\n我就会用想得到的最刻薄手段 让你从地球上消失踪\n对你那个狗屁贼要加倍!\n我知道出了差错 我知道!\n他没有杀任何人!\n人头还接近在会呼吸的脖子上 所以他不能拿回来\n他还活着!\n听到没有 活死人?\n他还活着\n还活着!\n这里就是了\n他拿着一把开山刀 站在坟墓上\n他戴着面纱\n混蛋!\n每次都这样!\n他们好像在外面看着我 等我\n停!\n不要按铃了!\n该死!\n我来了!\n第一次就听到了!\n我来了!\n我还没有聋\n你需要什么?\n我很抱歉打扰你 但我的房间钥匙又丢了\n朋友 我们这里没女人\n要女人就自己找\n我们整夜都开 价目表在墙上\n不问问题 没有列外\n我不要女孩 也不要另外开房间\n我姓莫迪曼\n我住223号房间\n我的房门钥匙又弄丢了\n又一次?\n是的\n223房的钥匙?\n是的\n挂在223钩子上的钥匙吗?\n你比自己还快 莫迪曼先生\n不知你住的地方怎样\n但这里的人要先租房间 然后才能拿钥匙\n权利都写在墙上 不问问题 没有列外\n我要223房\n早说呀!\n223房\n走楼梯上去到左边 然后第一个弯左转\n罗洛托尔斯!\n你大概是开玩笑\n什么?\n这地方跟别处一样好\n我们离岸30尺 柯威尔\n那麽?\n冰融化怎么办?\n有人在这里游泳 知道吗?\n这里会有小孩玩水\n他会踢到其中一人的脸\n你看到水桶多大\n你知道谁要把它们提到这里\n你想走多远?\n要远到他们的头 不会从洞里伸出来\n可怜虫最后跪在教堂前的地上 乞求上帝\n主啊 我一辈子都是好人\n我遵首尾每一条规矩 做你叫我做的所有事\n你每次都诅咒我\n你夺走我的一切 我的家人 我的家\n我的视力 我的腿 我的整个世界\n我还是赞美你的名\n你为什么一直这麽惩罚我?\n然后尖塔倒在他身上\n他向上看时 最后看到的东西\n喂 伏斯柏 不想听吗?\n第一次听就不好笑\n小心不要踢到这个\n说什么 班吉?\n你以为呢?\n小心别踢到这个!\n好 好\n几点了?\n我没有手表\n沙漏就在你面前\n这是沙漏 看不出时间 只能看时间过了多久\n想想过了多久时间吧\n然后从开始的时间算起\n我不知道几点开始的\n老天!\n你看看这个!\n太厚了 像是假的\n我怎么跟你说的?\n不要靠近窗口\n没有人能看到我\n你不能确定\n当然可以!\n如果我能看到外面 表示这里比外面黑\n这表示外面的人看不到我\n除非脸贴在窗子上\n香烟怎样 大教授?\n那有多黑?\n你远离窗口 好吗?\n你让我紧张\n所有的事都让你紧张\n唐保姆和法兰科怎样?\n他们不会有事 他们天生要看水泥变干\n其他人呢?\n真想知道吗?\n昆西当然是发疯了\n法兰科说他们用扳手 打他的头整整两分钟\n他们还比他先累\n至于其他两个人 装在袋子里很难说\n女的好像已经死了 小孩的头还在上面\n在哭吗?\n没有听到 或许吓得不敢哭\n换了我也会\n你说都不要说\n这不是笑话\n什么是笑话?\n我还是不知道 为什么要在这鬼东西上\n你用不着知道 只要安静的坐着\n你连这都做不对\n你看\"\"小甜甜\"\"\n你没有听到他唠叨\n\"\"小甜甜\"\"不会唠叨\n你看他 几乎不在这里\n他在这里\n他在做叫他做的事\n相信我 如果事情 跟我想的一样\n你会感激我让你坐在船上\n不浮在水上就不是船\n这里的水在五尺厚的冰下面\n他们最后才会到这里找\n他们是谁?\n克伦斯吗?\n别管克伦斯 我们要做就做吧\n说真的 罗洛 我从来没见过你这麽\n没看过我怎样?\n犹豫!\n没看过你像这样犹豫\n你这麽紧张 我也该紧张吧?\n只是我不知道要紧张什么?\n知道因果是什么吗 伏斯柏?\n因果?\n好像是一种糖果\n不是糖果 白痴\n那是宇宙的平衡\n宇宙的平衡\n你在看什么鬼书?\n相信你这辈子做的事 下辈子会报应在你身上吗?\n我相信就不会在这里\n没有宇宙对抗你 你就已经够危险了\n几小时前我会同意你的话\n什么东西让你改变主意?\n头上撞了一个包吗?\n不是东西\n而是人\n谁 罗洛?\n因果不是人\n唯一的人是在黑暗里的你和我\n你懂什么 笨蛋\n一秒钟前你还以为是糖果\n我不知道它的名称 不表示不知道是什么\n它不是一个人\n你不知所云\n对 我不知道\n我甚至不知道你说什么\n这场谈话让我头痛\n我什么都不想说\n但我闻到尿味\n好 你走吧\n我好像没听到\n你听到了 把你的臭嘴带走\n把小甜甜也带走 他让我毛骨悚然\n贝马许和柯威尔在湖上\n唐保姆和法兰科在船屋里\n我刚在码头上见到班吉\n最后还有我们\n我告诉你 罗洛\n接下来几小时谁都动不了你\n你只要确定比我先死\n这不是我要的东西\n跟一个疯子玩\"\"追随领袖\"\" 该死!\n是谁呀 该死!\n罗洛?\n你在干什么?\n你开枪打谁?\n没什么 只是意外\n意外!\n罗洛 你\n关掉该死的灯!\n关掉!\n好 关掉了!\n别紧张\n现在出来\n好 你要装子弹时叫一声\n混蛋\n我的枪\n在哪里?\n你在这里\n是的\n嗯 你想怎样?\n我已经办好了\n你没有 你跟克伦斯在一起\n是的\n老天!\n你是怎么进来的\n老天!\n你差一点\n你夺走我的枪\n你在开枪\n我以为你是别人\n我不是\n你说的别人也不是\n什么意思?\n他死了吗?\n他死了我活着\n没有发生这种事\n此刻的任何事都不可能\n不可能发生\n也许我在做梦 也许我在别人的梦里\n不知道是什么没关系\n知道不是什么就够了\n这不真实\n没有关系\n我不会丧失踪理智\n不会丧失踪理智\n我感觉他在这里\n我开始走路\n这些是事实\n我走过的世界不理性 荒谬\n即使如此还是世界 还是有一套规则\n不论规则多麽荒谬不理性\n如果能找出规则 在体系内运作\n我就不再是世界的 无知受害者\n就是这里\n疯狂循环就在这里被打断\n它为我打开过一次 再也不会了\n看得到我的人 我不存在 我是谁?\n没有用 宝贝\n停止是锁 谜是钥匙 答案不是免费的\n又是你\n欢迎你回来 欢迎客人\n这次有零钱吗?\n有什么可以施舍给瞎婆子吗?\n还是你带答案来了?\n什么的答案?\n谜!\n看得见我者 我不存在 我是谁?\n要玩才能通过 付费才能玩 通过要付费\n让路吧!\n图案需要三个人 其中一人是我\n这里是我家 孩子\n这是我的路\n安静!\n无名小卒不能说\"\"不\"\"\n唱同样悲怆的歌 一遍又一遍\n留声机和断骨\n唱同样悲怆的歌 一遍又一遍\n你有问题\n我不会砍头 我同意时跟你说过\n你应该处理\n我不会回去\n我五分钟就走\n想看魔术吗?\n看得见我者 我不存在 我是谁?\n没有用 宝贝\n停止是锁 谜是钥匙 答案不是免费的\n又是你 这是你做的!\n开门!\n你回答我的问题 门就会自己打开\n来吧 别说你忘了\n这不是游戏\n不是游戏 是谜!\n想想其实很简单\n看得见我者 我不存在 我是谁?\n我没有答案\n白银 这会有帮助 闪光是线索吗?\n给穷苦残障的人一点钱\n我没有\n等一等!\n留声机和断骨\n唱同样悲怆的歌 一遍又一遍\n一遍又一遍又一遍\n知道吗?\n两个人做会快很多\n好主意\n我去找人来\n混蛋!\n不能跟他说话 小甜甜\n不可能!\n知道要怎么处理吗?\n只能跟着罗洛七上八下 直到他把自己累垮\n然后让他睡觉 我们回家\n家 说到这个字就让我 眼皮沉重\n几点钟了?\n小甜甜?\n小甜甜?\n小甜甜\n我自言自语多久了?\n小甜甜\n小甜甜\n小甜甜\n哈 有收获了 搞什么\n法兰科!\n法兰科!\n什么?\n你可以到这里吗?\n为什么?\n只管出来!\n不 我要躺下\n你会错过\n你会错过\n错过什么?\n我会错过什么?\n你快点好吗?\n最好值得!\n如果我出去 而只是兔子 那种愚蠢的东西\n我会要你付大代价\n那个混蛋!\n拿起电话吧!\n小甜甜!\n来吧!\n我不需要你对我发疯\n小甜甜?\n小甜甜 你在里面吗?\n说话呀 笨蛋!\n你像这样溜走时最好出声\n否则我要把铁罐绑在你的\n老天!\n时间到了 混蛋\n有什么好笑吗?\n好像似曾相识\n真的?\n可惜没有早一点发生\n我知道他撒谎!\n那个该死的混蛋\n你派他来杀我\n不然要我怎样?\n我知道你迟早会回来 你自己说的\n我从来没有回来 罗洛\n是你的行动把你带到我这里\n现在怎样?\n接下来会怎样?\n你知道因果是什么吗?\n从来没有听过\n东方人相信宇宙平衡\n相反而相等的力量\n你这辈子做的事 下辈子会报应到你身上\n你觉得怎样?\n不知道\n别把它想成宇宙或神秘的事\n想成简单的因果关系 简单的物理学\n我会想\n希望别想太久\n我不能等到下辈子\n把电话拿起来\n打电话给谁?\n你以为呢?\n我不能\n为什么不能?\n我不知道他是谁?\n你怎么找到他的?\n跟我找到你一样\n透过克伦斯?\n克伦斯 对\n打电话给克伦斯\n我试了半个钟头 但他没接电话\n再试一次\n他不会接电话\n我现在就告诉你\n如果我是你 我会往正面想\n如果他接电话要我说什么?\n随便你说什么\n我告诉你不可克伦斯?\n克伦斯 你在吗?\n我听得到你的呼吸声 可恶的混蛋!\n趁还能的时候享受吧\n因为只要我还能活一天\n我对天发誓\n我就会用想得到的最刻薄手段 让你从地球上消失踪\n对你那个狗屁贼要加倍!\n我知道出了差错\n我知道!\n他没有杀任何人!\n人头还连接在会呼吸的脖子上 所以他不能拿回来\n他还活着!\n听到没有 活死人?\n他还活着\n当时很暗\n我连他的脸都没有看到\n他用枪指着我的头\n然后就消失踪了\n我不知道他到哪里去了\n我知道\n你能告诉我的事 我不知道的很少\n我只是自卫\n你把包里给他了\n不是我给的 是他拿的\n里面什么都没有\n他活该!\n他不知来干什么 所以活该!\n他来干什么?\n确认!\n所以你要我的人头吗?\n回答!\n我对天发誓不知道\n因为这个晚上 这个恶梦\n老天!\n回答!\n回答我!\n否则我从你的大脑里挖出来\n证明 我需要证明\n证明什么?\n证明我死了吗?\n证明你曾经存在\n上帝 我在地狱里\n求你让我醒来\n我愿意做任何事\n只要让我现在醒来\n在自己家的床上!\n罗洛\n如果你在外面 醒来吧 醒来吧!\n转身!\n我不想看到你的脸!\n我想看你的\n转过来!\n老天!\n跪下!\n上帝 求你别杀我\n我不想死\n今晚不想!\n经历过这些之后不想\n求求你 我可以做你要我做的任何事\n我愿意做任何事\n求你不要杀我\n瞧瞧你自己\n骄傲而无情的罗洛托尔斯\n跪着像小孩一样哭泣\n求人饶命时尿湿了裤子\n怕你的如果看到你现在\n托尔斯先生 你现在是新人\n但你不会活着欣赏改变\n我今晚要回克劳斯公园\n不论死活我都会出来\n我发誓不论世界怎么运转\n接下来我要找你\n到那时之前 这是你生命的证明\n你不会绕道踩死人行道上的虫\n如果虫跑到你脚底 你也不会让它\n罗洛\n你是虫子 罗洛托尔斯\n罗洛\n罗洛 如果你还在的话\n请你醒来\n从现在开始 你活着的每一刻\n都要知道你还活着 是因为没有重要到必须死\n请你醒醒\n一切都有秩序\n必须有一条途径 让事件自然发生才有可能\n我并不期望你了解这些\n我不确定自己是否了解\n喂 罗洛!\n我醒了!\n我醒了!\n老天 罗洛!\n发生什么事?\n我们以为你死了\n没死\n我没死!\n发生什么?\n我昏迷多久?\n你几分钟前停止尖叫和躁动\n我进来看你是否安静下来了\n但你倒在地上 全身是血而且在流口水\n老天 真龌龊!\n谁替他包扎一下\n扶我起来\n法兰科 替他拿点东西来\n扶我起来\n我猜你被什么绊倒 然后撞破了头\n这是尿吗?\n班吉和昆西回来了\n他们找到他吗?\n找到他了\n克劳斯公园\n你说什么?\n你没听到法兰科的话吗?\n班吉和昆西回来了\n他们去哪里?\n你是开玩笑吗?\n他们在哪里?\n在船屋里 要叫他们来吗?\n知道要做什么再说\n你出了什么事?\n小鬼咬我\n老大 下一步要做什么?\n让他们穿水泥鞋子\n柯威尔 找人开始凿冰 碰到水之前不要停\n你开玩笑吗?\n你刚才说什么?\n你刚说什么?\n罗洛 只是一个孩子\n一个小男孩 我家也有一个 我不能做\n好 好\n好\n他也一样\n搞什么?\n罗洛!\n罗洛!\n好 你听到他的话了\n拜托\n这是怎么回事?\n罗洛?\n你还好吧\n别说话 只管听\n我们抓到你的太太和孩子\n正在替他们穿水泥鞋 懂吧?\n别跟我胡扯\n你知道只有一条出路\n今晚此刻 他正要到克劳斯公园\n因为是他告诉我的\n我不要你叫他取消\n我要那个混蛋死\n然后找更厉害的人\n这是你闯的祸 克伦斯\n找人办事吧\n否则我会让你的漂亮老婆\n看你的漂亮男孩 像大石头一样\n沉到寒冷阴暗的湖底\n你明白吗?\n还有一点\n我要他的人头\n听到没有?\n我要他该死的人头\n给你一小时\n到底发生什么事?\n把灯关掉\n就是这里\n他拿着一把开山刀 站在坟墓上面\n他戴着面纱\n就是这里\n他拿着一把开山刀 站在坟墓上面\n他戴着面纱\n你在这里\n是的\n你要做什么?\n我已经做了\n我以为你是别人\n我不是\n你的别人也不是他\n什么意思?\n他死了吗?\n他死了我活着\n做好了 好了 得到了银子\n跟开始一样结束\n他多了一块钱\n他有耳朵听得见另一只\n-\n-\n-\n-\n-====翻译：\n=====\n-\n-\n-\n-- 梅格 紫米稀饭 潇湘夜雨 月生白水 小门柴 校对：\n火精灵\n老兄 你他妈的想什么呢\n嗨 伙计\n你还好吧\n不好意思我来晚了 钱带来了吗\n你不买饮料的话 下次就不要来这\n-什么\n-我上周告诉你了\n-该死的别碰我\n-我会报警 滚出去\n你是不是把我当傻瓜?\n滚 你这个白痴\n滚 再也别来这 否则我就报警\n我会报警\n你来不来?\n-你到底来不来?\n-别碰我的窗户\n-再也别回来\n-妈的 整死你\n老兄 你到底来不来?\n我没时间 我很忙\n快点过来\n我都安排好了\n我在这呆了一晚上 就是给你安排这事\n没事 没事\n你一般不会在国王路见到我\n警察对那里的乞丐管得挺紧的\n但这里是我的地盘 从十岁起就在这了\n这是我的地盘 勇敢人的家\n那些年我管着这里呢\n我想进商店买点喝的 行不?\n老兄\n知道吗\n我把钱忘在家了\n借我一块钱 行不?\n就一块 回家就给你\n保证回家就还你\n就一百便士 老兄 快给我\n我就拿50便士 行吗 我马上回来\n白痴 你看什么呢\n真是个笨蛋\n-看\n-混蛋\n-谢谢你 肯恩\n太爽了 我们走\n你在国王路干什么\n-我在附近工作\n-你肯定有份体面的工作吧?\n看 那是我以前的家\n挂粉帘子的那个\n我过去用的是蓝帘子 不是粉色的\n-凯拉 你没事吧\n-没事\n-好 不错\n-你去哪\n和这个家伙谈点生意\n-我一会来看你 好吗\n-好\n那是麦凯拉\n她妈妈是妓女 就住在那边\n每次她妈妈有客人 就把她赶出来消磨时间\n你知道最惨的是什么?\n老兄 人人都知道\n想象一下 麦凯拉知道每个人都知道\n这是我家 老兄 知道吗\n也...\n不算我家 但是我每次吸毒 都来这\n老兄 没有人知道这个地方\n这就象是...\n我的秘密窝\n-我帮你把衣服挂起来吧\n-我不会呆很久\n-什么\n-我办完事就走\n老兄 脱下衣服 休息一下\n酷 酷\n告诉过你 我就知道是巴宝莉牌的\n日子真不错 这正是我想要的\n老兄 正是我想要的\n干嘛不和我说你有伏特加 早知道就带可乐来了\n可乐加伏特加 我最喜欢的饮料\n我在索霍区俱乐部里就喝这个\n你不介意吧?\n太棒了 太爽了\n太高兴了\n坐 休息一下 你怎么了\n喝点东西\n休息休息\n过来\n你寂寞还是怎么的?\n-什么\n-你寂寞吗\n-你想说什么 老兄\n-我只想结束这一切\n好吧 他妈的\n他妈的 把钱给我\n不错嘛\n750块\n什么\n750块\n-我是说800块的\n-昨天给你50了\n-你没给\n-我给了\n-你没给\n-我给了\n呃 那50呀 那50块只是余款\n-什么\n-余款\n道上就是这么办事的 老兄 明白吗?\n-那不是余款\n-是 是余款\n-余款是 是一种诚信的体现\n-嗯 嗯 诚信\n诚信的契约 一种礼貌\n-也就是头期款\n-对\n如果那是头期款 这是剩下的钱\n富佬 别自作聪明\n那50块只是保证我能替你解决问题 你出得起钱\n我查过了 你不是警察\n你也查过我不是警察吧\n-什么 警察?\n-嗯 警察\n警察 差佬 公安 条子 Po\n-po, 条子, five\n-oh, one time.\n我想每个人都看得出你不是警察\n你想说什么\n妈的 你这个自大的家伙\n你在我地盘呢 富佬 我的地盘\n你觉得我看上去很穷 就以为我是个傻瓜?\n我路子多着呢\n妈的 死白痴\n-妈的\n-麦克 怎么了\n麦克?\n怎么了\n你要去哪\n出去\n什么意思 我不明白 怎么了\n麦克 求你了\n-你要去哪\n-出去\n麦克 你打不打算告诉我发生了什么了吗\n发生了什么 你要去哪 你要去哪\n塔妮雅 看在上帝的份上\n你要把这东西带到哪 我不问别的\n有点事 现在出去解决\n听懂了吗 现在就去\n麦克\n你少给了50块 告诉过你是800块\n我只有750\n-我们去提款机取\n-不行\n-为什么不行\n-我没带卡\n你还带什么了 你身上还带什么了\n这是什么\n照片不错 看上去你不太舒服\n霍...\n霍..\n霍拉提奥\n赫莱西奥\n赫莱西奥・班布赖吉\n你说你叫汤姆\n你会四处告诉别人你叫赫莱西奥吗?\n当然\n-这是什么\n-我的工作证\n我要它有什么用 白痴\n别跟我搞鬼\n老兄 我告诉你 我认识的人多着呢\n-你不能这样出去\n-你他妈的让...\n-让开\n-你不能走\n-让开\n-不\n-让开\n-不\n你他妈的让开\n-妈的\n-麦克\n麦克 麦克 你冷静一下\n我担心你 我担心我们\n麦克 听着\n我不管你去哪\n我不介意 我理解 你有生意要做\n麦克 你要冷静\n否则你会做坏事的\n那天晚上 这么做管用了\n不 亲爱的 管用了\n求你了 再试一次 为我\n再试一次\n就是这样 就是这样\n再试一次 亲爱的 亲爱的\n阿弥陀佛\n南无...\n阿弥陀佛\n阿弥陀佛\n看到了吧?\n就是这样 就是这样\n阿弥陀佛\n阿弥陀佛\n南无阿弥陀佛\n-就是这样\n-南无阿弥陀佛\n南无阿弥陀佛 南无阿弥陀佛\n南无阿弥陀佛 南无阿弥陀佛\n你在外面小心点 好吗\n南无阿弥陀佛 南无阿弥陀佛\n南无阿弥陀佛\n南无阿弥陀佛 南无阿弥陀佛\n阿弥陀佛\n南无阿弥陀佛\n南无阿弥陀佛\n南无阿弥陀佛\n他妈的\n那个戒指\n-什么\n-你口袋里的戒指\n-它不只值50\n-跟我有什么关系\n事实是你少了50块\n如果我没得到我想要的 你也不会得到你想要的\n-金子做的是不是?\n-是\n-手表呢\n-什么\n-手表\n-你没开玩笑吧?\n-该是我的就是我的\n-妈的\n你要去哪?\n老兄\n老兄\n老大\n别这样 别这样\n冷静点 好吗\n我刚刚只是试试你 好吗\n看 你把戒指给我了\n750块我就做了 行不\n-兄弟 你去哪儿\n-关你什么事\n我要给迪弄个t\n鹦鹉还在窗户那里吗\n那只该死的鹦鹉还在他妈的窗户那吗\n-没有\n-是吗\n-不 没在\n-没在 你这个他妈的杂种\n但是 兄弟 我正爽呢 今天是发失业金的日子\n-我有钱 老兄\n-去你妈的\n我们现在在做生意 伙计\n来 碰一下 喝一口\n来吧 兄弟\n你准备交钱了吗?\n我想看看我买的东西\n先交钱 兄弟\n-看到我要买的东西才给钱\n-先交钱\n不行\n好吧\n好 行啦 你想这样玩吗\n你会把事情搞砸的\n知道吗 会搞砸\n看这个\n搞砸了\n该死的你\n-谁\n-霍德维克\n-克里斯托\n-霍德维克 怎么样啊\n-很长时间没见到你了\n-你看见迪了吗\n他昨晚来过\n发生什么事了 小迪给自己找麻烦啦\n算了\n-我不感兴趣 迪身上有钱吗\n-霍德维克...\n相信我 要是迪没钱他是走不出那道门的\n-他有多少钱\n-50镑\n50...\n他妈的50镑\n现在真的很无聊\n想和我谈?\n怎么啦 笨蛋\n真他妈的\n英国他妈最坏的牙买加人\n你死定了\n对啊 那能行\n800镑买这个很便宜 你知道吗\n750 真是物美价廉\n麦凯拉 今天你看见迪了吗\n麦凯拉\n你今天看见迪了吗\n你今天看见迪了吗\n你看到没\n是的 他和一个人在一起\n他跟谁在一起\n-以前没见过他\n-他长什么样\n白人 迪说他要帮他解决问题\n妈的\n操你 迪\n没事 没事 麦凯拉\n没关系 没事的 没事的\n这个白人张得什么样子?\n他们去哪儿啦\n你知道 就像 你妈妈有时候给我钱\n你知道 因为她需要我\n那么 我需要你为我做点事\n你得告诉我迪在哪儿\n我得看看\n它就在这儿啊\n是啊 但可能是仿制品\n这是一只38口径的抢\n特别是周六晚上\n老兄 你知道吗 用这个可是能造成很大破坏的\n-他们上那儿去了\n-另外一个家伙也去了?\n是的\n相信我 粗鲁的男孩\n你把简单的事情搞复杂了\n-我可是个神枪手 兄弟\n-给我看看枪就行了\n-看了我满意的话 我会付钱的\n-我是个刺客\n-我保证\n-什么 什么\n好吗 付了钱就走\n好吗\n只要我一走 你就能\n你就可以到这儿的烟馆去 抽上一整盒\n怎么样?\n-把钱放在桌上 老兄\n-哦 别这样\n别这样 我看起来像会了枪打你吗\n不 不 你不会\n但那不是你要问你自己的问题\n事实上\n我看起来像要射你的人吗 像吗\n像吗\n你干嘛要以貌取人呢 有钱人\n我可是个嗜血的烟鬼\n也就是说我是个危险人物\n你笑什么\n你他妈究竟在笑什么\n我向上帝发誓 不要试探我 知道吗 有钱人\n知道吗 老兄 我已经杀了很多人了\n滚回你的地盘 要知道你和个携抢的烟鬼\n起了点小摩擦 竟然还能活着离开\n听懂啦\n把钱放在桌上 给我滚出去\n-把枪给我\n-你他妈...\n-不\n-给我\n-滚开 你他妈在干嘛\n-你他妈把枪给我\n你真是疯了\n你他妈这个肮脏的杂种 把枪给我\n给我!\n给我 给我 你\n-你这个杂种\n-你在做什么\n迪\n滚开\n你他妈的同性恋\n上帝啊 迪 把那小东西收好\n霍斯!\n发生什么事了 老兄\n还好吗\n那他妈的是谁?\n你从什么时候起开始当鸭了\n你从什么时候起开始当鸭了\n-霍斯 兄弟 我没有\n-是吗\n那我进来的时候你们在干什么\n-你赚了多少钱?\n-我说过了...\n我知道你挣钱了 昨晚你到克里斯托那儿去了\n-你为什么不告诉我?\n-我没有在当鸭\n不告诉我是因为你欠我钱 你他妈的烟鬼\n你他妈的欠我钱\n给我他妈的下楼去\n不 等等\n我有几句话要跟迪说\n要是在走之前再看到你\n我会他妈毁了你的\n同性恋\n霍斯 兄弟 轻点 轻点\n你他妈在干什么 两星期前怎么跟你说的\n-不是让你躲起来吗\n-我躲了 那儿都没去\n那你那个小白脸是哪里来的?\n-我在街上遇到他的\n-他该死的到底从哪儿来的\n-我是在街上遇到他的\n-哦 是吗\n在他妈的街上碰到的?\n轻点 嘿 霍斯 求你 别打了\n-你他妈笨蛋...\n-我发誓 我什么都没告诉他\n妈的 你要干什么 霍斯 不要 妈的\n-这看起来像什么\n-妈的 妈的\n在我们干那事后三个礼拜以后\n你竟然随便把个变态同性恋给带回来了\n你他妈不要\n-冷静点\n-我这么做只是为了活命\n霍斯 可我什么都没做啊 兄弟\n-伙计\n-不 你他妈做了\n妈的\n妈的 它在这儿 妈的\n上帝啊 一直在我脑子里\n迪 那个男人可能是特别行动组的\n哦 妈的\n好了 兄弟 呼吸\n南无阿弥陀佛 南无阿弥陀佛\n南无阿弥陀佛 南无阿弥陀佛\n南无阿弥陀佛\n好了 问你个问题\n是不是关于你的钱?\n我欠你的钱?\n霍斯 我一直在想办法弄钱 但佷不顺利\n我一直在想办法弄钱 我发誓\n一切都搞砸了 记得吗 我去了你家\n-你在那儿很安全 记得吗\n-确实\n昨晚你在我东西边上打转了 是不是\n是吗\n是吗\n那么我的枪他妈在哪里\n我的枪他妈在哪里\n我不知道你的枪在哪儿\n-我没有拿你的枪 我发誓\n-上帝 好吧\n原来我的0.38好端端的在我的浴缸底下\n昨晚你来了 然后今天早上 它就没了\n我发誓 霍斯 我发誓 我没有去过浴室\n我更本没进过浴室 霍斯 我一直都在前厅\n记得么 我一直都在前厅\n求你了 我发誓 我真没拿...\n妈的 去你的\n等等 老大 我发誓 那一定是赛夫的手下\n他们来过的\n老大 还记得么 他们来过的\n赛夫是来买白粉的\n他和2个你从未见过面的人一起\n雷和格雷\n格雷很擅长使用武器 霍斯 我发誓...\n-妈的 混球\n-我发誓!\n那几个从来没来过的混帐怎么可能\n知道枪在哪里?\n老大 因为是雷 听我说\n他住的那个公寓\n他们住的那个公寓 剑桥塔公寓\n和你住的公寓一模一样 我妈的发誓\n你也知道 那把枪能带来好运\n它跟了我他妈的至少15年\n-在哪里?\n-天哪\n迪 他妈的枪在哪儿?\n操!\n够了!\n他欠你多少?\n多少钱?\n如果我帮他还 能放了他吗?\n多少钱?\n270英镑\n我没告诉你叫你呆在那儿吗?\n你以为他妈的是谁?\n警察?\n过来抓我的吗?\n是吗?\n来呀 快来 来抓我呀 死条子\n快来啊 来铐我呀 死条子\n嘿?\n来铐我呀!\n哦 不 不 我明白了\n你这死同性恋是过来花钱享乐的\n来操男人 真不要脸\n觉得自己有钱?\n啊?\n从口袋拿出钱扔我是吗?\n啊?\n那好 看看吧\n妈的好好看看吧\n霍斯...\n霍斯...\n霍斯\n看到了吗?\n我说过了 他不是警察 不是吗?\n我还让你得到这些钱呢 老大\n我只是想...\n为了老大你 我出卖自己的肉体\n出卖自己的肉体 帮你赚到这些钱\n我没拿过你的枪\n老大 我说了 是雷干的 是雷!\n他住在...\n住在...\n剑桥塔公寓\n和你住的地方一模一样\n所以他知道浴室的事\n喂?\n赛夫 是我 霍斯\n等等 等下 好吗\n霍斯 请等一下 好吗\n-你在干吗呢?\n-你看到我的耐克上衣了吗\n我在打电话 给我滚出去\n出去\n妈\n霍斯 怎么了\n你在哪里?\n在我妈家里 怎么了 老兄\n没什么 我要过来\n在剑桥公寓外见\n叫雷和那个昨晚一起来我公寓的\n叫格雷的小家伙一起过来\n霍斯 老兄 不行 我学校有事呢\n我管你什么学校 给你10分钟\n你最好慢慢祝福祈祷...\n是雷拿了我的枪\n南无阿弥陀佛 南无阿弥陀佛\n雷 我是赛夫 你和格雷一起吗?\n霍斯想要见我们\n不是好像 是要马上\n我他妈的什么都不清楚\n马上去车库 切记叫上格雷\n你他妈的怎么了?\n老兄 你不用这么害怕霍斯的\n相信我 钱 再找几个家伙抢过来就行了\n那你也相信我 抢过来后 买把枪放身边\n-你说什么?\n-我说\n找几个疯子 蠢蛋 抢完钱 买把枪防身\n妈的跟我有什么关系\n告诉你 我会打爆你的头\n该死的胆小鬼\n知道他是谁吗?\n霍斯 老兄 是 霍德维克\n他妈的我才不怕他\n疯子我可见过不少\n但像你刚刚那样的疯子还真没见过\n我要这把枪\n滚蛋吧 我不会把该死的枪给你的\n你知道吗\n你还是走吧\n-你该走了\n-我要枪\n-我不会给你的\n-我给你钱\n-不行\n-我帮你还了债了\n你自找的 我可没叫你那么做 让开\n你在干什么 你滚吧 你要我一枪杀了你吗\n我他妈的早就跟你说了 这可不是闹着玩儿的\n你还想让我再揍你几拳吗\n求你了 我可是说真的 赶紧滚吧\n从哪来回哪去吧 你到底怎么了 赶紧滚吧\n那要不这样 你呆在这儿等霍德维克过来\n-我跟你拜拜了 有钱人\n-把该死的枪给我啊\n把枪给我\n把枪给我\n把那该死的枪给我啊\n我操\n你他妈的饶了我吧\n我操 我操 我操 我操 我操\n别踢了\n我操 我操 你这个混蛋 我操\n操死你\n有钱人 你在干什么\n你这该死的 我操死你\n操死你\n他妈的\n啊\n有钱人\n我不知道哪招惹你了\n求你了 兄弟\n我只是个小烟鬼\n有钱人\n你这蠢蛋\n你这该死的...\n我哪知道他怎么突然要见我们\n-你生什么气呀\n-别问我了 我他妈的不知道\n-他听上去是不是很生气?\n-他妈的谁知道\n我操\n霍斯 怎么啦\n-你从我浴室里拿走了什么\n-什么都没拿\n-你拿了什么\n-什么都没拿 霍斯\n-我他妈的枪在哪\n-我什么都不知道啊\n-啊\n-我的枪在哪\n-他妈的枪在哪 小混蛋\n-我不知道什么枪啊\n-那怎么迪说你知道\n-什么?\n-为什么迪说你偷了我的枪\n-我不知道你在说什么\n谁都不许动\n喂 保罗 你好吗\n恩\n是今天吗 我以为是...\n我以为是明天\n不 没问题的\n没问题 为了你会让鹦鹉一直在窗台上\n我大概10分钟就可以到了\n你只要敲门就行了\n塔妮雅在那儿 她会招待你喝咖啡的\n10分钟好吗 那再见 保罗\n-我们不知道枪的事\n-他妈的闭嘴\n我的枪不见了 我得找回来\n不管谁出面 总之得拿回来\n什么型号的枪\n是什么...\n什么型号的枪\n是一个.\n38\n哪种 像个塌鼻子吗\n对\n-好的\n-是的 就得这样\n我要拿回我的枪\n我才不管是谁去帮我拿回来的\n我们真没拿 肯定是迪干的\n-那就去找迪\n-要是找不到他呢\n这烟鬼到处乱窜 连个住所都没有\n你知道那个大仓库吗\n-在糖果屋大道上的那个\n-知道了\n10分钟前 他在那儿做鸭子呢\n-做鸭子\n-是的\n什么意思 迪真是个疯子吗\n雷 他太恶心了\n所以我是你们的话 我会尽快过去\n就用我的表计时\n给你们一小时\n我发誓 兄弟\n我发誓 要是你再这样冲过来的话\n我会他妈的开枪的\n我会他妈的杀了你的 伙计\n听到了吗 有钱人\n有钱人 跟你说话呢\n我随时都可以开枪\n兄弟 会射到你的\n-我觉得事情有点不对头\n-那还能怎么办\n-是的 但是...\n-不 你看看我\n我可没拿那把枪 你也没有\n格雷也没有 所以肯定是迪干的\n我不能就这样被他妈的白打了\n我们不用去打迪 只要拿回枪就行了\n-我们一定要给他点颜色看看\n-我们只要...\n他妈的 迪诬告我 他是个混蛋\n我要去揍他 说到做到\n格雷该死的跑到哪里去了\n上帝啊 你给我开门\n我找不到我的白粉了\n什么?\n我有一大袋的 可是找不到了\n什么?\n去你的白粉 格雷 我们要干大事\n操 就知道吸毒\n你给我该死的快点\n你还真是磨磨蹭蹭的\n但你知道我要干嘛 别管了 看看这些\n双节棍不错啊 伙计\n-是我的 真粗鲁\n-拿来\n什么?\n你有T型棍啊\n做工很好的 很棒\n我不去\n-什么?\n-我可不会带着武器跑过去 该死的\n-我以为你是我兄弟呢\n-我是啊\n-那就拿着T型棍\n-你说什么?\n你不来?\n-我们要去拿枪啊\n-拿着 赛夫\n现在就拿\n听着\n伙计 保持冷静 行吗\n行吗\n我不想再惹麻烦了 有钱人\n我只想要这把枪 仅此而已\n给我枪我就走\n-求你了\n-不行啊 你不会想要枪的\n我一直在告诉你 有钱人\n你的商业伙伴出卖你了 还是怎么了?\n你想杀了他吗 不值的 兄弟\n等等\n是不是和戒指有关?\n你妻子离开你了 是吗\n所以你才到这里来?\n你想...\n你想杀了他的相好?\n是不是?\n想杀了那个杂种\n不值得的 伙计\n-你根本不知道在说什么\n-我知道\n我知道我在说什么 伙计 好不好?\n没有女人值得你\n为了她毁了一辈子\n听着 伙计\n我和你说件事\n你这样做是没用的\n没用的?\n!\n我给了那个女人6年的时光\n你知道什么\n你可能从来没给过别人什么\n-我给很多人东西 兄弟\n-比如说?\n我一直给麦凯拉东西\n我还给了布莱妮一些香水\n她很好满足\n第二天 她走过来和我说 \"迪...\"\n\"迪 我只有19岁\"\n\"我已经开始堕落了 无路可退了\"\n\"上瘾了\"\n\"但还有人送我香水\"\n是不是就是她被杀了?\n什么 啊?\n-那个女孩 我在海报上看到的 她...\n-别说了\n我发誓 事实上 你还在这呆着干嘛呢\n你觉得被女人抛弃了 自己好像个小丑吗\n你觉得这事不可能发生在你身上\n-闭嘴 闭嘴 闭嘴\n-你猜猜发生什么了\n-就是发生在你身上了\n-你给我闭嘴\n你要买把枪去杀她的相好\n别这样 伙计 你要向前看 嗯？\n我不能继续走下去\n你可以 你老婆出走根本不能与我经历的事相比\n-我和那个女人有个女儿\n-这理由不错\n不过就这理由来说 你就更不该\n要这个东西 你有个女儿啊\n对 就是这么回事 对吧?\n就是这么回事\n她不是我的女儿 她不是我的女儿\n现在你懂了没\n两年了\n两年来 我一直以为我是她的爸爸\n现在却发现我不是\n整整两年了\n别人才是她的爸爸\n那个人我认识\n我竟然认识他\n我竟然认识那个男人\n最后我老婆为了他离开了我\n你知道那是什么感觉吗\n我...\n她是我女儿 她却不是我亲生的\n我辗转难寐\n我看完我以前日记\n我想知道到底什么时候开始的 我疯了吧\n操\n给你 兄弟\n有钱人 给你\n拿着 伙计 这是你的\n我知道你生气的原因了\n我知道你生气的原因了 我明白的\n但用枪 伙计\n这可绝不是什么好办法\n兄弟 你得学着怎么来应对这烂事\n向前看 对吧\n我挺过来了\n千万不要孩子气\n我从十岁起就在孤儿院\n那时只有我和我妈妈 兄弟\n嗯 她干得可真是不错\n-对不起\n-你刚才说什么\n-你刚才说了什么\n-我不是有意的 只是...\n-只是顺口说说 对不起\n-我妈妈尽了力\n我会到孤儿院的唯一原因是她死了\n想想我的感受\n被丢到了孤儿院\n没有爸爸 妈妈也死了\n我十岁的时候就完了\n为什么我现在成这样了 因为我的过去\n而你 你是我见过的最有权势的人\n-他妈的\n-听着 我不...\n不 不 不\n操你妈 操你妈\n如果你的人生和我一样 你也不过是个烟鬼\n如果我有你的人生 即使我知道 也不会这样\n你他妈个瘾君子 你他妈个贱人\n你完了 伙计\n兄弟 你要干嘛 你要干嘛 兄弟\n你这个贱人 过来\n好 我知道 我知道\n低点 放到这儿\n保罗 注意你的手放在哪儿\n你摸的可是我的女人\n你感觉到了吗\n嘿 你过来\n快追 雷 快追\n快点过去\n格雷 伙计 冲过去\n看 兄弟 看着我\n坚持住 伙计 别这样\n我抓到他 我抓到他了 伙计\n操\n过来 你这个小...\n全城最棒的\n快点\n-我在这 兄弟\n-伙计 快点!\n打开那扇门\n-我来了\n-他跑不了\n他妈的贱人\n雷 他把门锁了\n雷\n你跑不了的 伙计\n妈的\n他脱了衬衫看起来真壮\n他看起来真棒\n看那个\n-准备好了?\n-好了\n你觉得很有趣吗\n哈 看看他\n麦克·杰克逊!\n现在怎么办 嗯?\n干他\n你跑不了\n跑得可真够远的 我要把你从这扔下去\n-别 伙计 别\n-你要干什么 兄弟\n我没带武士刀算你运气好\n看他呀\n放开他\n我说 放开他\n-你以为你能...\n-雷 格雷\n雷 格雷\n-我说放开他\n-好 把枪放下 伙计\n放下 好吗\n-我们得去找霍斯\n-操\n听着 我不过卖些白粉来付我的大学学费\n-我可不是什么骗子\n-你会没事的\n赛夫\n你是我的同伴啊 赛夫\n你为什么那么做 我简直不敢相信\n-做什么\n-你让他们看到枪了\n-这全都是你的错\n-为什么\n因为如果昨晚你没有来问我买枪\n我们就不会卷进这事里\n天哪 麦克 鹦鹉又不在窗台上\n我得走了\n轻点 轻点 把我放在这\n啊 啊 轻点 操\n操 你他妈是怎么回事\n该死的脖子\n操\n你他妈在干什么\n我看起来像在干什么 啊?\n我在找...\n粉 行吗\n我记得 我发誓 我记得昨晚我在这丢了一些粉在这\n看 我真的...\n我可不认为那样能解决一切\n你 你在说什么 我要振奋一下 伙计\n你不认为你该走了?\n我说 你该走了\n你说过他还会回来\n我他妈的能去哪儿\n我去哪里?\n我能往哪儿去?\n啊?\n呃 我只是...\n我不知道 总会有你能去的地方\n你还不明白 对吧\n你有钱 所以你可以活下去\n不 这不光和钱有关\n不 就是钱的问题 兄弟\n我们之间最大的不同是什么?\n钱 他妈的钱\n操 保罗\n肯定出事了 伙计\n行了 如果我说给你点钱的话?\n-什么?\n-如果我说给你钱呢?\n你觉得你就可以离开了吗?\n你说过你再也搞不到钱给我了\n-对 我说过\n-那你到哪儿给我搞钱?\n用这个\n我可不干持械抢劫的事儿\n不 不 不 我不是这个意思\n那你是什么意思?\n他干嘛到处找这把枪呢?\n为什么他这么急着找这把枪 啊?\n行了 行了 我听见你们的对话了\n-他说了什么\n-他说这把枪是一件凶器\n那又怎样?\n所以 如果这把枪落到警察手里呢?\n我不会把枪给警察的\n把枪还给我\n我可没说要把它交给警察\n那你到底什么意思?\n我们手里是有霍德维克的枪\n那又怎样\n拿着枪去勒索他吗\n赫莱西奥 赫莱西奥\n他不会买自己的枪的 伙计\n干嘛不?\n因为你不能\n-为什么\n-因为他是个杀手\n他妈的 上帝啊\n你...\n我操你老娘\n操你老娘\n你凭什么说他花钱拿回枪后\n不会一枪毙了你\n-我把子弹拿掉\n-什么?\n我会把子弹取下来的\n他只是要枪 又不要子弹\n他妈的\n你就不能帮帮我吗?\n-我在找白粉\n-别管那破东西了\n-在这儿你找不到的\n-我都快得痴呆了\n你不是痴呆 而是疯了\n我疯了?\n疯的人是你 是你要把枪卖还给那个杀手\n现在这才是明智的 你知道吗\n听我说 我们必须离开 就现在\n太棒了\n我找到了 现在看看是谁疯了\n所有人都将见证巴比伦王朝的覆灭\n回见 兄弟\n我操你妈\n你他妈的死定了 你这小混蛋\n退后 他妈的给我退后\n别他妈的干蠢事 同性恋\n给我他妈的退后\n把枪放下 然后滚开\n滚开 把枪放到地上 然后滚开\n我和你可没什么瓜葛 同性恋\n不\n想要枪的话 用钱来换\n我知道你干嘛急着要这把枪\n-你他妈的跟他说什么了\n-给钱吧\n是的 把钱给足了\n不然我马上就报警\n好吧 好吧 好吧\n过来拿钱\n你他妈的过来拿...\n这笔钱啊\n去啊\n拿啊\n你敢碰一下我就杀了你\n我不能\n他妈的\n哦 同性恋\n-你他妈的放下他\n-你死定了 我操死你\n-放下他\n-我要杀了你...\n他妈的放了他\n冷静点 迪 冷静\n把刀放下\n他妈的给我把刀放下\n-快啊\n-好吧\n拜托 你看 我...\n.\n我知道你想要还我钱的 这我明白\n求你了 迪 求你了\n想想塔妮雅 我马上就要...\n做爸爸了\n求你了 迪 别做蠢事\n想想我们还能一起拿白粉 就我们俩\n不是吗\n到克里斯托那儿去坐坐\n拿半袋白粉 再到我家里\n-吸上一口 真是太棒了\n-够了 闭嘴\n多么棒的烟啊\n你知道那种深吸一口烟的美味\n棒极了 迪\n太美了 太棒了\n把同性恋给杀了\n来吧 迪 你行的\n把该死的同性恋杀了 你就没事了\n别 迪\n来吧 把同性恋杀了 他知道得太多了\n他就要逃走了 杀了他呀 迪\n开枪啊\n-和你开枪杀wee briony一样\n-求你了 迪 别\n我可没杀她\n当然是你干的\n不 不 不 不\n是你开枪杀了他\n-拜托\n-不 是你开的枪\n迪 我们是一帮啊 你和我 迪和霍德\n来吧 杀了这该死的同性恋\n当时可没说要杀她 老兄\n和讲好的不一样\n可你想想 迪 布莱妮当时在威胁我\n她从我这儿偷了钱还要去报警\n她要勒索我 你让我怎么办 我都快有孩子了\n-所以她必须死\n-你怎么能这样说她 兄弟\n那可是我的女人啊\n-霍斯 我爱她\n-你爱他?\n她是个不要脸的贱婆娘\n为了白粉她能跟男人上床\n是我的错\n我把她引到地下室\n他就在那儿等着\n我以为他只是吓吓她而已\n他该死的说话不算数\n接着他就发疯了 杀了她\n就这么一枪杀了她\n迪?\n迪\n我们该走了 马上走\n不 赫莱西奥 不 你走吧\n你走吧\n这不是你该呆的地方 兄弟\n我们有钱了 可以走了\n去哪 兄弟 我他妈的能去哪呢\n我犯事儿了 你不明白吗\n他妈的走吧 我杀了很多人 你知道吗\n-你走不走?\n-好吧 好吧\n好吧\n好吧\n-这儿我看着\n-好吧 我走 我走\n你走吧\n拜托 迪 你也必须得走啊\n她躺在地上时的眼神历历在目\n你猜她眼睛告诉我什么了\n以为我和你会永远在一起\n永远不分开\n我试图救她的\n但还是死了\n只有她的眼睛在说话\n她说 \"为什么 迪\"\n\"为什么 迪\"\n这就是我唯一得到的 唯一\n你得听着 杀人什么好处都没有\n我一直和你这么说\n所以他妈的收手吧 忘了这一切\n我没想过要杀人\n我只想杀了我自己\n为什么 赫莱西奥\n你又没做过坏事\n我就不一样了\n你仍有重拾美好生活的希望\n而我却没有\n所以你收手吧\n求你了 汤姆\n走吧\n走吧\n我们都能继续前进\n可以继续下去\n继续生活\n-=TLF字幕组=- 翻译：\nmortia xaon 校对：\nhaha168\n片名：\n地牢围攻\n我就知道你会来\n我早告诉你了\n我意思是，我感觉到了\n你来之前我能感觉到\n你的力量在慢慢变强，玛丽安娜\n我们在一起的时间终于开始有用了\n等等\n你必须走了\n你希望如此吗？\n我们每次这样见面，我都觉得...\n无力。\n觉得被吸干了一样\n可能爱情就会让女人这样吧\n你知道什么是爱？\n我知道诗人们都愿以一死来交换\n- 你会以死交换吗？\n- 可能吧\n在诗里\n我父亲会怎么说？\n世上的事情你父亲不知道的很多\n让这个也变成其中之一吧\n渎神，这太疯狂了，盖伦 你太过分了\n神救救我们吧\n用力拉，扎夫\n用腿的力气\n它不想出来\n最大的都是最顽固的\n看吧，有价值的东西都不会轻易到手\n你没打中\n我不想杀了他们\n只要它们不吃庄稼\n猪来了，还是老价钱吧？\n冬天的玉米换这猪？\n老价钱，不变\n是个挺旱的一季吧\n- 更旱的我也见过\n- 国王在招兵\n兵的待遇都很好\n我有这块地，还不够吗？\n你老了后，你就会厌倦只是这么活着\n你不想挑战一下你的勇气吗？\n我意思是，这样的生活有什么勇气可言？\n我靠，法莫，说说话你会死吗？\n我的意思是，我们又不是动物。\n人就应该跟别人说话啊\n诺瑞科，如果我能把这些甘蓝说出来 我肯定会的\n雨一来，地就变成块\n那时候你都不能把它们说出来了\n这就是为什么我喜欢你爸，扎夫\n他总是知道怎么来扫兴\n- 带诺瑞科去我们放玉米的地方\n- 好\n给，扎夫，给你这头猪\n你留下来吃晚饭吧？\n嗯，既然你都开口了...\n诺瑞科，能看到你太好了 你应该常来\n嗯，我觉得法莫小时候已经看厌我了\n现在既然他成家了， 就应该稍微调整一下\n诺瑞科觉得父亲应该不种田，而去参军\n等等，我没这么说啊\n他说国王的战士都拿很多钱\n法莫，你没诚心想这个吧？\n你们是我的家人。\n我哪儿也不去\n- 你得到答案了，诺瑞科？\n- 我只是说说\n- 只是说说\n- 嗯，人人都有特长嘛\n只是说说看来是你的特长\n出卖朋友看来是你的\n- 我能来点鸡肉吗？\n- 别给他\n把鸡肉给我！\n说点好听的给我听\n告诉我你多爱我\n你知道的\n我只知道你告诉我的...\n你却什么都没告诉我\n看看这双手，为养活我们而开裂\n这双手比话语更说明问题\n告诉我有什么损失吗？\n你还想要什么呢？\n每个女人都想要的\n一点点激情\n- 一点点激情？\n- 嗯哼\n我想想我能怎么办\n- 该走了\n- 你为什么不跟我们一起去？\n我还有很多地要清理\n记住，当人从辛勤劳动中创造生活时\n勇气永不灭\n对了\n我讨厌睡觉时没有你\n小心点\n石桥镇而已，我们当然会很安全的\n为什么别人都叫父亲法莫？\n他没名字吗？\n你父亲相信人跟他所做的事情密切相联系\n他很小的时候，诺瑞科把他带到石桥镇\n那诺瑞科是他的父亲？\n整个镇子收养了他\n不同的时候有不同的家庭收养他\n但是诺瑞科总是关注着他\n他现在有个家了\n我真高兴是我们和他一起组成的这个家\n嗯，我也这么觉得\n将军\n报告给你的国王\n陛下，克鲁格人...\n野蛮的军队，克鲁格人...\n它们用剑打仗\n这太可笑了，就好像你在说持武器的狗一样\n它们像人一样打仗 它们把整个侦察队都杀了\n如果将军没命令我会来报告的话 我也死了\n这是某种魔法\n外婆！\n外婆！\n扎夫，是你吗？\n抓住你了\n终于！\n放你进烤箱\n我不喜欢烤箱\n烤箱又干又暖和\n你不想我们把你生吃了吧？\n你为什么要吃了我？\n今晚，我向你外公保证...\n要做他最喜欢的菜\n- 集市上卖得怎么样？\n- 不错\n当然，男人都想来占我便宜 因为我是女人\n我就让他们多付钱 因为我是女人\n我们还小的时候你总是当头\n- 总是当头\n- 不，我知道我要什么，就这样\n直到她遇到你父亲\n你父亲放荡不羁\n- 外公呢？\n- 在钟塔\n- 我们去看看？\n- 我们得小心点\n钟塔是为战时而建的\n你不想拉错绳子而引起场战争吧？\n什么耽搁了你这么久？\n哈！\n他们没那么容易被吓跑的\n这真是疯了\n克鲁格人是野兽 他们没有盔甲和武器的\n我要用你的马，诺瑞科\n- 你去哪儿？\n- 石桥镇\n- 索拉娜和扎夫在那儿\n- 我跟你一起\n法莫没来？\n没，我丈夫喜欢让我来做买卖 他好种地\n你为你丈夫做得很好\n他很爱你\n对，我相信他是很爱我的\n新郎新娘接吻时，鸣钟五次...\n给整个镇子他们结婚的消息\n走，现在就走，带扎夫回家\n带他走！\n你能保护他，父亲 保护他\n- 准备好了吗，我的女士？\n- 从来都是\n等等\n这么快就认输了？\n你进步神速啊，令人印象深刻\n如果艾柏能有更多像你这样的剑士\n让我加入你的军队，你就有了\n我不确定艾柏的军队是否准备接受女兵了\n而且，你父亲会怎么说？\n我父亲从不让我做我想做的\n泰利斯!\n准备好你的军队，准备出发\n克鲁格的散兵在抢掠我们的土地\n噢，太阳刺痛了我的皮肤\n你在胡说什么？\n你服从命令就行了\n我只听从国王的\n你应该...\n学习怎么尊敬别人\n敬意是赢得的\n错了，敬意是我天生的\n回镇子！\n所有人都是！\n- 索拉娜在哪？\n- 她在敲钟\n别担心，扎夫，我会找到她\n- 父亲！\n- 巴斯蒂安！\n拿着我的剑\n- 进去，堵住门\n- 快点\n- 谢谢你，父亲\n- 去吧\n我们在镇子里找\n大家快走！\n快点\n干得好\n有种的人？\n放开他们\n你今天杀了我一次了 但是我们又见面了\n爸爸！\n跑，儿子！\n看！\n它们撤了\n扎夫！\n- 它们撤到高地上去了！\n- 扎夫！\n别让它们跑了\n我还要给索拉娜做个标记\n没人看到她，没人知道\n我们没找到她，她可能跑了\n他说得对，法莫\n盖伦！\n你去哪儿了？\n我一直在找你\n我很忙\n- 很忙\n- 我们达成了协议的\n我让你进出我的城堡 我们就能合作\n我守着承诺\n我肯定最近这些消息都能表明 我有多么的忙\n对，你确实稍微搅和了一下\n搅和？\n告诉我，公爵\n你对一个叫法莫的人了解多少？\n石桥镇的镇民们\n艾柏的军队同情你们\n这样的惨剧会被复仇的\n克鲁格人来的时候，国王的军队呢？\n农民，不要忘了你在和谁说话\n在你的世界里，你不对国王鞠躬吗？\n在我的世界里，国王的军队是来保护国家的\n不是只是城堡\n被克鲁格带走的人怎么办？\n- 克鲁格抓了人质？\n- 安静！\n如果克鲁格人带走了人质...\n它们的目的就很不明确\n国王的军队召集任何一个 能打仗的人\n- 谁来？\n- 然后怎么样？\n国王有军队和城墙\n被克鲁格抓走的人就只有我们\n- 你敢违抗国王的意愿？\n- 我跟你走，法莫\n- 卫兵！\n- 让他们走\n这不是艾柏之道\n- 你违抗国王，冒很大的风险\n- 不比你冒的大\n- 我没有选择，她是我的妻子\n- 她是我的姐姐\n好，我们开始吧\n留下来，跟着艾柏的军队走吧\n你想过军队生活，不是吗？\n不。\n我不喜欢制服\n- 你有马吗？\n- 有匹母马\n老，但是很强壮\n老...\n但是仍然很强壮\n你挡我路了\n我们以前见过吧？\n说些好听的给我听\n告诉我你有多爱我\n你知道的\n- 我是梅里克，国王的大法师\n- 我听说过你\n孩子们关于魔法的故事\n你的国王需要你\n嗯，我的儿子也需要我\n但是我让他失望了 现在我的妻子需要我，如果她还活着\n你有没有想过，法莫\n在国家处于非常时期的时候...\n我们个人的爱和得失难道更重要吗？\n不，但是和我无关\n好好活着吧，法莫\n你的国王需要你\n远远超过他目前的所知道的\n你怎么知道这座桥的？\n小时候我在这些地方玩耍\n这就是我怎么浪费我的时间\n- 如果我们绕过这个峡谷，我们就浪费了一天\n- 你觉得呢？\n我们能过\n让我们先把马上的装备拿下来\n你什么意思？\n我们就这么放了它们？\n你担心我们会伤了它们感情？\n回去吧！\n走！\n来吧\n- 好，我要去了\n- 你是个勇敢的老头\n我只是不想你在我之前先 弄坏了绳子\n- 快点\n- 好，走吧，快！\n你更关心你的马\n我喜欢我的马 但是我不确定我喜欢不喜欢你\n嗯，等你了解我再说\n这的确节省了我们不少时间\n噢！\n- 陛下\n- 站起来，士兵\n多少人在守卫着？\n我在守卫着，陛下\n嗯，你在守卫着？\n法罗公爵，你非常，非常坏\n你让我胸痒痒的\n我要告诉你妈妈\n你们在干什么\n我的侄子在王座上玩耍\n你觉得配吗？\n你在国王和他的军队\n出去进行招兵活动的时候玩耍...\n而你唯一的工作\n就是保证城堡的安全\n而守卫城堡的人...\n等于零！\n陛下...\n去调查偏僻地区的事务\n你给我消失\n快，别让我推你\n拿开你的手 你都不配去吻我的袍子\n你不配弄脏你叔叔的王冠\n除非国王特别下令...\n你不能碰我\n皇家法律\n是个我最喜欢的\n玩具\n- 一切都在按计划进行\n- 我等不了了\n我受不了那个老山羊的控制\n实施那个\n你想快速解决？\n好！\n我们就来快速的\n好\n盖伦\n你一定要突然悄无声息的出现吗？\n我没有\n我是突然从某个地方出现的\n你不受邀请就进来我的房间 这样有些过了\n你以前的热情好客我现在都得不到了吗？\n你不能想来就来，想走就走\n然后突然消失\n我不是你的妓女\n你为什么这么想？\n你很清楚什么我必须这么安静地出现\n我不能在我爱人的门上重叩，对不对？\n你怎么能想来就来...\n你又被我父亲认为是国王的敌人？\n我有我的朋友，我有我的关系\n为什么我父亲这么恨你\n他是一个很谨慎的人\n问题！\n我不是来被责问的\n你父亲恨我是因为我不会\n对伟大的国王和大法师鞠躬作揖\n因为我可以从他那里得到我想要的\n甚至是他女儿的纯洁\n你离开我的房间\n离开我的生活\n你也在驱逐我吗？\n在我们完成了那么多事情之后？\n我没帮助你发现你的力量，你的预感吗？\n- 你只是教会了我小把戏和恶梦\n- 收声！\n帮帮我！\n陛下\n再次请求你接受我最深的歉意\n我错误理解了你的命令\n错误？\n- 那个是错误？\n- 对\n我可以坐吗，陛下？\n仆人！\n我知道，退下\n我知道我在几个场合都辜负了你的信任\n而且我可能让你和整个王国很失望\n但是我会改变\n我会在这个战争年代摆脱 年轻的愚蠢\n我会证明自己是个合格的王储\n吃吧\n我的侄子，你对适时的外交\n有独特的理解\n那就是点优点\n我能敬你吗？\n可以吧\n在早上喝酒并不是表达改正决心的\n最好方式\n没错\n对，没错\n国王万岁\n是\n克鲁格人攻击了南部的石桥镇\n对，然后这片山\n会迫使他们北上，绕过沼泽\n然后我们进攻\n那是基于如果克鲁格人按他们应该的习惯 而行动的话\n我不喜欢这里，法莫\n没人去塞奇威克森林\n森林在山脉之间\n我们会在板岩道和克鲁格人会面\n塞奇威克森林里不止有灌木和树\n你不能想穿就穿啊\n你不想在这里过夜的\n- 我们点火炬\n- 火炬会吸引东西的\n- 让他们来吧\n- 法莫！\n你知道人们怎么说的。\n塞奇威克森林里有东西\n人们说神保佑无辜者\n人们说很多事现在都对我们没用，诺瑞科\n快，我们还有很多路要走\n我看不到路\n- 本来就没路\n- 那我们怎么知道怎么走呢？\n等等\n你说对了，诺瑞科\n这个也是意料之中吗，法莫？\n- 放我们下去\n- 我想放就放\n滚出我们的森林，你们与这里无关\n我们恨你们的武器和你们的杀戮\n- 我们只是穿过这里\n- 那就穿过去\n别再回来\n我们迷路了\n人类，不仅没用，也很无助\n陛下\n我想要知道我父亲的消息\n- 你父亲为他的王去办件小事去了\n- 求你了\n发生什么了？\n我担心他有极大的危险\n国王的大法师有很多的责任\n他并不需要一个总是用绯闻\n来惹麻烦的女儿\n我父亲觉得把我锁在城堡里 能减轻我的担忧\n他错了，我感受到宫廷里的气氛 从来都没有这么困扰过\n黑暗威胁着\n我们的国家\n从魔法中生出的黑暗\n走！\n快\n你父亲在寻求原因...\n- 和解决方法\n- 陛下？\n陛下？\n- 你的父亲...\n- 陛下！\n盖伦！\n我觉得我要死了\n你跟国王吃得好吗？\n你干了什么？\n我以为你想要加速呢\n我想我可能对国王的吃的做了手脚\n你给我下毒了，你杀了我了\n别这么戏剧化\n没什么不能弥补的\n求你\n求你\n希望我们都记得谁在这里有着最大的权力\n好\n我觉得我救了你一命\n你应该为我做点什么呢？\n国王被下毒了\n能救吗？\n可能吧，如果还不迟的话\n性命保证\n私下谈一下\n法罗逃出了城堡\n还带走了两个军团\n那我们就知道谁给国王下毒了\n准备北上，和我们的新同盟会师\n我们联合的力量...\n将使我们享有世代的和平和安宁\n我能感到盖伦跟这个有关\n为什么泰利斯长官没有跟我们提到过这次行动？\n还有想要犯叛国罪的人吗？\n- 还剩下多少军队？\n- 三分之一\n嗯\n我看到克鲁格人在大量集结\n盖伦在召集军队\n- 大量的军队\n- 怎么会？\n一个人怎么可能会造成如此大的破坏呢？\n我亲生女儿背叛我，投进死敌的怀抱\n你这么恨我吗？\n我以为我爱他\n他混入了我们的血缘\n你把魔法的平衡偏向了他的一方\n因为你，这个王国可能灭亡\n对不起，对不起\n对不起，对不起\n你们为什么这么恨外来人？\n你们互相敌视，我们为什么不能敌视你们呢？\n我们躲藏在森林里，避开你们的战争和争端\n和你们愚蠢的劳动\n但是你们还是在这里 对准我们的树射箭\n伤害就是你们生活的一部分\n你们最危险的地方就是你们自己\n我最远只能送到这里\n好运\n我们有计划吗？\n你醒了吗？\n是，我醒了\n你会发现杀死一个国王没那么容易\n我们要进攻\n但是，陛下，你被下毒了\n- 可能你还没认清形势\n- 我认清了\n我也有我的头脑\n克鲁格人不会料到我们会攻击 所以我们就一定要攻击\n谁给我下的毒？\n我认识是你的侄子，法罗公爵\n噢\n更坏的是\n他逃离了城堡\n带走了第11和第12军团\n我们要进攻\n拂晓，集结你的军队\n我还能活多久？\n你的生命即将结束\n但是剩下的时间足够了\n你确定吗，诺瑞科?\n一点也不\n她在这里，诺瑞科\n- 我感觉得到\n- 我觉得你是对的\n嘿，慢点\n索拉娜？\n索拉娜！\n今天...\n我们为国王而战\n我们的国王骄傲地\n为艾柏而战\n陛下\n起立！\n神佑为荣耀和真理献身的人！\n我对你很好奇，法莫\n我能感觉到你很危险\n我看不透你\n我能看到大多数的人，就像 阅读活着的书一样\n但是你，我都看不透你紧锁的眉头\n为什么？\n你是谁？\n有些谜不值得去解开\n你在这里\n我以为是个噩梦\n法莫呢？\n扎夫呢？\n巴斯蒂安，扎夫在哪儿？\n跟我们父母一起吗？\n对\n他是跟他们一起，但是\n他没逃出来\n你被带走的那天，他就被杀了\n对不起\n我的宝贝\n他死得安逸吗？\n告诉我\n对\n他死得安逸\n法莫会来的\n他会找到你的\n你怎么知道？\n因为他必须这样\n因为他需要你\n再怎么说，你也是他真正需要的\n法莫别死\n你要做的事情还有很多\n你看上去不怎么好啊\n啊，这个\n来试试\n- 味道怎么样？\n- 这是什么？\n药。\n快起来\n回家真好\n我不是你的妓女\n他用你来毁灭...\n我知道诗人们说...\n他以玩弄感情为乐，你还不吸取教训？\n不是我帮你提升你的力量，你的预感吗？\n小姐？\n我是我父亲的累赘\n我阻碍了一切\n但是你父亲很爱你啊\n我小女孩般的愚蠢伤害了他\n自杀会伤他更重的\n可能你是对的\n我想要我的父亲以我为荣\n他已经是这样了\n他只是以这个想法为荣而已\n准备迎接你们的新盟军吧\n这是克鲁格人\n顺从，无情且不犹豫\n你看到的是一个强大的军队\n带走这个人\n把他放在王国的营帐里\n保证喂饱我的马\n等等\n这是你的紧急事务？\n这是法莫，石桥镇的\n对\n为什么一身泥土味的不尽忠的 石桥镇农民\n会让国王的大法师怎么挂念？\n因为国王对这个农民有特殊挂念\n我怎么不知道\n国王也不知道\n我觉得现在你们应该好好认识一下\n我们见过了\n上次，他拒绝了我\n去做他需要做的事情\n我以为陛下会对这个农民感兴趣\n从我们见过以后，他经历了许多事情\n大家都一样\n什么让他这么特殊？\n因为，陛下\n他是你儿子\n法莫的朋友诺瑞科\n是管理王后马匹的人\n上次在石桥我认出他来了\n在牛草地小道的屠杀后，这个诺瑞科\n在战场上找到一个3岁大的小孩\n牛草地小道只有一个小孩\n你觉得这个故事怎么样，法莫？\n一个老人以为他认出了一个30年没见的人\n这就是你们选国王的方式？\n你是国王的儿子，王位继承人\n我没父亲\n没父母\n我与这里无关\n你的意思是那个傲慢的混蛋是我的儿子？\n他30年来\n住在石桥的农场里？\n就是这样\n就是这样，你告诉我他已经死了！\n你说他们全死了！\n神对我开了\n什么样的玩笑啊\n有时候神知道什么对我们最好\n那是什么意思？\n你记得我们那个时候混乱的状况吗？\n到处是战争，到处是敌人\n如果这个孩子带回了艾柏城堡\n他能活多久？\n在石桥长大\n他很健壮\n离敌人很远\n敌人随时都可能\n除掉你的儿子和王储\n亲爱的朋友\n你最好是对的\n你最好心里有数\n国王需要所有有能力的士兵\n- 这不是我的问题\n- 他的王国被侵略了。\n你的王国被侵略了\n我不认识这个国王\n索拉娜是我的亲人\n诺瑞科和巴斯蒂安，他们是我的亲人\n你住在哪儿呢？\n嗯？\n如果王国落入盖伦之手...\n你又能为你妻子提供什么样的未来？\n想想吧\n制作：\njesseding\n字幕来源：\nShooter\n片名：\n末日危城\n我就知道你会来\n我就说我会来的啊\n我是说，你来之前我就感觉到你要来了\n索罗娜，你的力量还在成长 我们在一起的时间太少了(意译)\n好了，你差不多该走了\n你想要我走吗\n我觉得不太舒服...\n就像是被榨干的感觉\n也许那是你爱我的一种表现(意译)\n你知道什么是爱？\n我只知道诗人会为爱而牺牲\n你会为爱牺牲吗？\n-可能\n在诗里\n不知道我爸会怎么想\n这个世界上有很多事情是你爸不知道\n就让这件事也变成其中之一吧\n高卢人\n你太过分了\n夭寿...\n用力拉啊，柴夫\n用你脚的力量\n干，就是拔不出来\n大萝卜是比较难拔...\n你看\n不是很简单吗\n你没打中耶\n我吓吓他们而已，让他们不要吃我们的作物\n一切如昔\n给猪准备冬天的食物吗\n-是啊\n没多大改变\n机八的干旱，对吗 我早看到了诺尔克\n国王在招兵买马 他可以让你们没后顾之忧\n这片土地，他破坏的还不够吗？\n你搞的这么累也只是要苟延残喘而已吧（意译）\n你的ＧＵＴＳ去哪里了\n你为了苟延残喘浪费掉你的胆识\n该死的我只是想跟你谈一会儿， 我没这么可怕，你总得跟我说说话吧（意译）\n我比较想跟老天抱怨\n老天不下雨，河流都变干了\n就算是你也不能跟上天说话吧\n这是我喜欢你的地方， 你总是很幽默\n儿子，把菜拿回去吧\n来牵着阿偷\n要一起吃晚餐吗\n除非你求我啊\n诺尔克，见到你真高兴，你应该经常来绕绕啊\n喔我突然了解到原来我们的法墨已经长大了 而且我自己也有家人，就给彼此一些空间吧\n诺尔克说服法墨去参军\n等一下，我可没有那样说\n当士兵可以有很多钱\n你不是认真的，是吗？\n你是我的家人，我哪里都不去\n是你自己要去的吧，诺尔克.\n我只是随便说说\n哦，那真是太好了...\n...谈谈你自己就好了\n用法语说的话就是你的问题啰(法语也是yours,自以为幽默)\n给我点鸡肉.\n-别给他\n把鸡肉给我\n我想听些好话\n告诉我你有多爱我\n你自己知道\n你不告诉我怎么知道...\n.\n...你什么都不告诉我\n你看我的手， 虽然没啥力气却养活我们(意译)\n我的手就代表一切了\n你告诉我有什么难处？\n你想要什么\n我想要什么， 一点激情\n激情...\n你会感觉到的\n该走了\n你不能跟我们一起吗？\n我还要忙，还有很多事情...\n.\n你要记得，勇气长存心中...\n永不凋零\n没错\n我想跟你喇寄...\n（我不知道这句要翻成什么ＸＤ）\n小心点\n嗯我们会小心的\n人们为什么那样叫父亲（farmer有农夫的意思）？\n有什么意思吗？\n你父亲觉得他就该当个农夫\n村庄的人都这么认为，我们只是其中一份子\n诺尔克的父亲也是？\n他们都是被村里的人收养的，不同的家， 不同的时间\n我们都一样\n我真高兴我也是一份子\n傻瓜\n将军\n跟陛下报告\n陛下，库格军大举入侵\n他们带着剑\n这真是豪洨，你们只是警犭吗\n他们真的很厉害，简直不可抵抗 还把我们侦查队歼灭了\n要不是我拼死回来报告，我应该早就死了\n不可思议\n奶奶奶奶\n扎菲，是你吗？\n终于看到你们了﹗\n我好想你喔\n天气这么温暖，看到你们真是太好了 你们不想错过这美好时光吧？\n你什么意思？\n今晚我答应你爷爷做一些好东西给你们吃\n菜市场还好吧？\n-不错\n当然他们想占我的便宜，因为我是女人，所以我就让他们付更多钱\n谁叫他们小看我是女人\n女人在市场上永远是佼佼者\n没什么，我只是不想被人小看而已\n如果是你爸的话...\n...你爸是最不会作生意了\n爷爷呢？\n他去钟塔了\n要去看看他吗\n我们要小心点 现在正值战争时期\n你也不想出去被打吧\n你怎么这么久才来？\n他们不是很容易对付\n真是夭寿\n是库格兽，他们都没武装\n诺尔克我要借你的马一用\n你去哪里？\n我要去石桥\n-我跟你去\n法墨没来.\n-没有\n他有事要做,叫我先过来\n他是个好丈夫，我看的出来他很爱你\n是啊...\n...他是很爱我\n新郎新娘喇寄的时候,我们会敲五下钟\n象征他们在村子见证下成婚\n快，快带他走\n快带他走，我相信你能保护他们的\n你准备好了？\n-我准备好了\n等等\n这么快就放弃了？\n你的剑术进步的好快...\n...甚至比我的士兵好多了\n那就让我加入你的军队\n我不确定我的士兵是不是可以接受女战士\n还有...\n你父亲会怎么想？\n我父亲从来不让我做任何我喜欢的事\n塔里什，库格军快打过来了...\n...你要赶快整顿你的军队\n干...\n这阳光真是刺眼\n你应该没资格命令我吧？\n你是指挥官\n我只属于国王\n你能不能给一点点尊重...\n.\n我只给该尊重的人\n你错了 打从我一出生你就该尊敬我了\n她在钟塔上\n柴夫你在这里等着，我去找你妈\n父亲﹗ 巴斯丁，等等\n带上我的剑\n全部进去关上门\n快点\n谢谢你父亲\n我们快走\n快点\n有胆识\n放开她\n我已经让你杀我一次了， 不可能再有第二次\n父亲﹗\n救命﹗\n他们撤退了\n扎菲﹗\n我必须去找索萝纳\n没人知道索萝纳在哪\n没人知道\n我们没发现尸体， 说不定她逃过一劫\n没错\n高卢人，你去哪里了？\n我一直在找你\n我一直很忙\n非常忙\n我们达成协议， 我给你最后一座城堡，我们一起合作\n我遵守承诺了\n我真的很忙\n这听起来有点牵强\n牵强？\n？\n告诉我公爵.\n你知道关于那个叫做法墨的人的事吗？\n石桥的人们\n军队需要你们\n我们会替你们报这个仇\n村子被屠杀的时候你们在哪\n喂!\n别忘了你在跟谁说话\n你该尊重一国之君\n国王应该保护整个王国 而不祇是一座城\n那些被抓走的村民怎么办\n库格人抓村民当俘虏？\n？\n安静\n我们还不知道它们抓人的动机\n军队需要骁勇善战的人加入\n谁要加入我们？\n加入军队就不必了，被俘虏的村民有我们去救就够了\n违背国王的意志就是死\n我跟你一起走，法墨\n护卫!\n不，让他走，道不同不相为谋\n你知道违背国王是犯法的 你不也一样\n我别无选择，她是我妻子 她是我姐姐啊\n好吧，我们一起吧\n你确定吗\n你不是想加入军队吗？\n不\n我不喜欢穿制服\n你有马吗？\n有，不过年纪大了，但还算强壮\n老了，但还强壮着\n你挡到我的路了\n我们曾见过面，诺尔克\n告诉我一些好事情.\n告诉我你有多爱我\n你知道的\n我是国王的巫医\n巫医?\n你想跟我说魔法之类的荒谬事吗？\n你的国王需要你\n是吗，我儿子才需要我\n我让他失望了，我的妻儿都失去了\n你想有没有可能...\n...有些东西是比失去挚爱更重要的(勇气、信念之类的)\n不\n我不这么想\n别死喔，法墨， 国王需要你\n超乎你想象的需要...\n你怎么知道那个桥？\n那是他们必经之路\n如果我们绕道会多花一天\n那你觉得？\n我们可以过\n我们先把马儿放走\n你什么意思？\n我们就这样把它们放生吗？\n怎么？\n你伤心吗？\n快走\n来吧\n好吧，换我了\n他真够胆的\n他只是比我先过去而已，没什么大不了的\n快来\n快点快点\n你不是担心你的马吗\n我很担心啊，还用你说吗\n（喃喃自语）...\n还好你的马离开你了\n我说这真是不错的尝试\n陛下!\n起来士兵\n这里有多少卫兵\n就只有我一个，陛下\n只有一个卫兵？\n真是太棒了宝贝\n你真是太淘气了\n来吧宝贝\n等等\n抱歉打扰你的娱乐，\n\"国王\"\n王位坐的还舒服吗\n你这个败家子\n为什么你没来参加军事演习\n而且就连你唯一的工作...\n保护这座城堡的安全\n都做不到...\n简直是空无一人！\n！\n陛下您听我说\n我一直在调查...\n.\n让他从我眼前消失\n不要\n来吧\n放开我，你根本不能这么对我\n你，你才不配我动手\n除非你有国王的命令...\n.\n不然你根本不能碰我\n国有国法\n你根本不能动我\n我们应该要照计划慢慢来\n我再也忍不下去了\n我不能忍受他高高在上指挥我\n赶~快~完~成~\n你想一步登天吗?\n好啊!\n那我就顺你心意啊！\n很好\n你都这样突然出现的吗？\n是啊\n我可以在任何地方出现\n我只是...\n看到你突然出现有点吓到\n你忘记我们过去的情谊了吗\n你高兴要来就来，要走就走\n反正你总是连个屁都不放就走了\n不要当我是笨蛋\n你怎么会这么认为？\n你知道我要低调 除了你我也不可能随便出现在其他女人房间吧\n你大可随意进出我房间 但你别忘了我父亲把你视为仇敌\n我有帮手\n这对我没用\n我父亲除了恨你\n已经对你没有其它的想法了\n闭嘴!\n我不是来这里让你审问的\n你爸爸憎恨我 我是不可能向他妥协的，这个国家迟早是我的\n我会夺走你父亲的一切\n包括他女儿...\n我会跟你在一起\n我早就是你的一部分了\n你也想走了吗\n等我们事成之后...\n我会给你无限的力量...\n与洞察一切的眼光\n你是想告诉我你想要...\n.\n打败他\n救命\n快来救我\n主人.\n我错估您的命令 请让我再致上最深的歉意\n错估?\n是这样吗?\n是的!\n主人我能坐下和你谈谈吗\n来人\n我知道...\n.\n我知道我让你失望了，我让整个国家蒙羞，\n不过我会改变的\n我愿意为你去战斗 我想证明自己我是名战士\n吃吧\n我可以给你一次机会，亲爱的外甥\n让你来证明自己\n你还想说什么\n我们来一杯好吗\n或许\n早上喝酒好像不太好\n没错\n是的没错\n国王万岁﹗\n好\n库格军驻扎在石桥那，他们应该会往北绕道去沼泽地\n.\n这就是他们的行军路线\n我们猜对就走运了(意译)\n我觉得这树林不太对劲，没人敢走进这片树林\n地图上是这样画的啊\n应该没什么吧\n树这么多，总不能全砍了开路 你也不想晚上被困在这吧\n点火把不就行了吗\n火把会引人耳目\n法墨！\n！\n！\n你知道人们说什么吗？\n他们说...\n这森林有怪东西\n人都是以讹传讹...\n谣言对我们没好处吧，诺尔克\n快走吧，我们还要赶路呢\n根本没有路嘛 现在走的不是路吗\n这根本不知道通去哪...\n等一下\n你还好吗诺尔克\n这也是计划之一吗，法墨?\n放我们下来\n我高兴再放\n快点离开这，这没你们的事\n我讨厌你的武器\n我们只是路过\n那就快走，永远不要再来\n可是...\n我们迷路了\n你们啊...\n.\n...真是逊咖\n我就送佛送上天吧\n国王陛下\n有我父亲的消息吗？\n他在外帮我打理一些事\n请告诉我...\n.\n发生了什么事情？\n我感觉他现在很危险...\n你父亲肩负许多责任\n你是他女儿，应该要清楚，不要让他为你担心\n我父亲一直把我关着 不让我的魔法解禁\n但他错了\n我根本不会给他惹麻烦\n黑暗力量...\n可能会袭击全国...\n黑暗力量有魔力...\n快,快\n你的父亲致力于解决...\n.\n你的父亲...\n.\n国王陛下！\n！\n高卢人，我怎么觉得快挂了\n你想跟国王一起挂吗\n你到底做了些什么？\n我觉得你太急躁了...\n...急着投胎\n干!\n我没跟你说要注意国王吃的食物吗?\n(超贱)\n你想毒杀我吗\n别这么神经质嘛\n任何事都有补救的办法\n求你了\n救救我\n我希望你记住谁是老大\n是\n我已经救了你的狗命\n你现在要为我做些什么？\n国王被下毒了\n陛下还有救吗 或许有救\n现在还不迟\n你说的是真的吗?\n我发誓\n我想私下和你谈谈\n法罗自己带兵出去了\n那...\n我们知道是谁想毒死陛下了\n我们会退到北边，证明我们是同一阵线的\n我们会证明我们是爱好和平的\n我早就觉得奇怪了...\n为什么指挥官没跟你一起来\n还有谁有意见？\n我们还剩多少士兵\n三分之一\n我之前有看到为数众多的库格军...\n...看来高卢人正在招募军队\n一个人怎么能号召一支军队？\n我唯一的女儿背叛了我，去帮我的敌人 你就这么恨我吗\n对不起父亲，我爱他\n他一直在对你说谎...\n你的力量都被他吸走了\n因为你，国家可能会被他毁了\n对不起\n对不起...\n.\n为什么这么讨厌陌生人\n你们都彼此憎恨了...\n凭什么叫我们不恨你们\n我们躲在树林里， 就是为了躲避你们的互斗，战争\n但还是一样\n树林变成战场，很多树都中了箭\n许多人的生命 就在这里葬送掉了\n我只能带你们到这了\n祝你们好运\n有计划吗\n你醒来了？\n是的\n你知道身为一个国王不是这么容易就被干掉\n我该起来了...\n阁下你中毒了，应该再休息一下\n我休息够了，\n我答应要保护人民不受库格人骚扰 那是我现在该做的\n谁给我下毒？\n我想是你的外甥法罗\n更糟糕的是他抛弃他的城堡 把大部份士兵带走了\n好吧，你先去整顿剩下的士兵\n我还有多少时间？\n你的生命即将走向尽头了\n不过对你来说，足够了\n你确定这烂方法行的通吗\n也没这么烂吧\n她在这,我感觉的到\n我也这么觉得\n索拉纳？\n索拉纳？\n今天...\n.\n我们为了国王齐聚此地...\n护主...\n是你们该做的\n国王万岁﹗\n陛下\n起!\n上帝会保佑我们，以及我们荣耀!\n安心上路!\n法墨,我对你很好奇\n你对我是个威胁\n我看不透你\n大部分的人，我只要有他们的血，就能看透他们\n而你...\n.\n为什么我看不透你的过去?\n你到底是谁？\n你再嘴硬啊 (太豪洨了)\n你也在这...\n.\n就像噩梦一般\n法墨人在哪？\n他在哪？\n巴斯丁他在哪？\n她跟爸妈他们在一起吗\n是的\n他们是在一起，不过...\n他们没逃出来...\n你被抓那天他就已经...\n对不起\n噢天啊\n他是安然死去的吗(意译)\n告诉我\n嗯...\n法墨会来救我们的\n他会来找我们的 你怎么知道\n他一定会来，他需要你...\n就算他会死...\n他也会找到你\n想我吗,法墨?\n你还好吗\n你看起来气色不错啊\n试试这个\n尝起来怎样?\n这是啥?\n哈哈这是伟哥，喝吧\n哈哈哈回家真好\n我不会让他得逞\n他一定要死\n小姐?\n你看我对父亲做了什么好事\n我把一切搞砸了\n你父亲非常爱你\n我本想以死谢罪...\n这么做只会伤害他更深\n没错!\n我要让父亲感到骄傲\n他本来就以你为傲\n他引以为傲的是乖乖牌的我\n前面这些就是你们的新盟友\n他们是库格人\n废话，还用说吗\n你将会看到前所未见的强大军队\n把这个人带到王帐去\n对他好一点\n来\n这就是你的大英雄？\n？\n他不是石桥那个农夫吗 没错\n为什么国王这么器重他\n因为国王对他有兴趣\n我怎么不知道?\n你可以去问国王\n是时候该介绍你们认识了...\n我们见过面了\n上次他背对我(对我不敬)\n那是因为他什么都没做\n我想你误会陛下了法墨\n他为了石桥村做了很多事\n没有其他人了吗?\n为什么挑上他?\n因为...\n他是你儿子(老梗)\n他有个朋友，叫诺尔克 以前隶属皇后护卫队\n我在石桥村认出他来了\n当年在皇宫的战役，诺尔克捡到一个三岁的小男孩\n而皇宫里只有一个人不见了\n法墨你觉得这是真的吗\n你要我相信一个老人说他认出三十年前的故人\n还说我是国王的儿子\n你的确是国王的儿子，没什么好说的\n我没有父亲，没有父母\n那这里就没我的事了\n你告诉我这个混蛋是我的儿子吗\n过去的30年里住在一个小小的农场\n我认为是的\n你说他死了\n你说他们全死光了！\n！\n上天是跟我开什么玩笑啊\n有时候心腹...\n知道什么对你最好\n你到底是什么意思？\n你记得在威登的混战吗\n到处是战争，招惹了很多敌人\n如果这个孩子在那时候回来 他会活多久\n如果在石桥村长大，他会变强壮\n而且如果敌人知道你儿子死了， 就不会去注意到他\n我的朋友...\n.\n你最好是对的\n最好确定是对的\n国王需要每个人参加这场战争\n这不关我的事\n这个国家正遭受威胁 也就是你的国土遭到威胁\n我不在乎\n我只为家人\n不惜一切只为家人\n那你要去哪里？\n国王输了，你老婆怎么办\n想想吧\n法罗你犯了叛国罪\n如果你们跟法罗一样，听从他的话，那就一样有罪\n我们不会原谅叛徒！\n！\n各位听我说，这个人曾经想背叛国王 还叫我跟他一起，哈\n你的野心还不是普通小的\n现在,王国是我的囊中物 我也绝对不容许你们在我之下撒野\n你不可能会成王的\n不管是现在还是未来...\n都不可能...\n第十一队为陛下卖命\n懦夫!\n这些库格人没有感情，什么都不怕，\n他们为数众多，\n但我们是尊贵的皇族战士\n他们什么都不是，只是冷血的野兽\n你来还是不来？\n我选择战斗\n跟你一起战斗我感到光荣 这样我才能监视你\n去侦查一下﹗\n射﹗\n射﹗\n没事的!\n出发吧\n大家出发!\n跟狗打架一样 没错\n上﹗\n预备﹗\n射﹗\n射﹗\n这些人是我要杀的\n那我去杀老大好了...\n你们赢了这场不算什么\n我们会一直赢下去的\n那这些就送给你们吧，我会派更多手下\n温德山...\n这鬼地方就是我们的终点吗？\n不，诺尔克\n我们不会死在这的\n你放心好了\n停!\n国王\n擒贼先擒王\n射﹗\n卫兵﹗\n快!\n快把国王带走\n再见了，我的好叔叔，我们走！\n哈哈哈，干掉你只是时间问题\n我不想跟他们一样 我们早就像他们一样变奴隶了\n我就是不想变他们的奴隶\n诺尔克，沉住气\n为什么我们要走这?\n从这儿过是快捷方式，敌人根据地就在左方 而且没敌人守着，我们就可以来个瓮中捉鳖\n快离开这个鬼地方\n停﹗\n看看这是谁啊，不是我们家族的成员之一吗\n树林这么大，你不觉得很巧吗 离我远点！\n！\n你倒是对自己很有自信嘛\n-\n-而你的行为举止都只像个胆小鬼\n行为？\n端正？\n这些话等你在皇宫的时候再说吧 这里没这些规定啰\n特为你准备的 谢谢\n每个地方都有规则的公爵先生\n你真是让你的家族蒙羞\n我要带他走\n快跑\n诺尔克﹗\n这就是你要的，死得其所\n你是个真男人\n快跑\n没事，我还好\n你今天很英勇\n杀他们是小事一件，一群有勇无谋的家伙...\n虽然你这么说，但还是很出色 这不是难事\n我...\n也差不多该把王位交出去了\n你想今天你这么威猛，靠的是什么？\n你觉得是...\n运气吗？\n你有潜力\n领导的潜力，而且...\n最重要的...\n你会坚持自我\n让你变的更强\n智慧就像是把铁锤\n而勇气就像是钉子\n人就是这样盖起自己的一切\n勇气永不灭\n你有听过吗？\n你小的时候， 这句话...\n是我每天晚上都会说给你听的\n我没跟别人说过\n孩子，未来的路会更难走\n我只是个农家孩子 没错，没错\n所以我不会是国王\n你知道以前这附近有个小村子吗\n村民一年只种两种作物\n这么做会伤到土壤...\n他们没伤到土壤，因为有海草的关系\n海草让土变的更肥沃\n你可以试试\n你是怎么知道的？\n因为我是国王\n因为我希望你成为...\n一国之君\n这位子只有你可以接\n一日为王，终生为民\n你要保护你的人民\n但这场战争不会结束的 只会带来更多的伤害\n那就为和平而战吧\n和平\n是大家的梦想\n也该是你的梦想\n人人的梦想，永世的和平\n你不明白\n这战争夺走我的孩子\n我何尝不是呢？\n吾儿...\n将军\n是，统领\n叫侦查队去树林北边， 看看有没有敌人在等我们\n是，统领\n司令你看\n嗯...\n这真是天上掉下来的礼物\n我带法罗来领罪了\n你们的国王应该还没挂吧\n布莱克将军，把你的剑给他\n不准戴盔甲\n哥们\n真谢谢你了\n你还记得小时候我们一起做过什么事吗，塔里什？\n我们至少一起喝过酒啊\n没人要给国王戴护甲吗？\n笨蛋﹗\n哥们，差不多该做个了结了\n国王驾崩，国王驾崩\n不可能\n我是国王了﹗\n你去吃你的大便吧\n塔里什将军，你该对我效忠\n你绝对不能杀了你们的新国王\n你这懦夫...\n你们新国王的愿望就是...\n国王万岁！\n！\n把剑放下\n别听他的\n大家听我说\n就在不久前，你们挚爱的国王...\n已经去世了\n被这个...\n一心要谋朝篡位的侄子 给杀了\n按照律法， 王位必须由直系血亲来继承\n请让我来介绍...\n你们的新国王 故王的最后一个儿子──\n他就是...\n法墨\n请起\n都起来﹗\n国王虽仙逝\n却不是白白牺牲\n他的勇敢精神与我们同在 他想让大家知道，要相信自己，并勇敢面对\n今晚我们好好休息，安葬死者\n明天我们就去温德山放手一搏\n胜利是我们的\n天佑吾王！\n！\n干什么干什么\n带他们来这干嘛，还不快带走！\n！\n等等，把她留下来\n退下\n我好像看过你\n你...\n你是法墨的...\n哈哈，他会来救你，太好了，我只要在这等他就行了\n我对你没用 你当然对我有用\n你比法墨还重要\n应该说...\n你对我来说比法墨还危险\n他马上就来了\n我认识你吗\n别动...\n我感觉到了...\n你已经怀了他的孩子\n你怀了他的孩子...\n你哪里人？\n克拉森，我在家里被抓走的\n我们会逃出去的\n我们都会死在这儿\n再见了，我的朋友\n你觉得要怎么打败这么庞大的军队？\n他们的边界薄弱，我们可以挖隧道\n我们没时间挖隧道了\n你要知道一点小错误就会全盘皆输\n你要快的话，只能直取源头\n如果我遇的到那个高卢人，我就可以干掉他\n长官，恕我冒犯，为了一个女人...\n会让整个国家身陷危机\n如果国王能把他马子救出来，那么他也能干掉高卢人\n只要把他杀了，国家就有救\n梅耶拉，妳的机会来了\n陛下，我想参与你的计划，仅供您差遣\n好好，现在不是说这个的时候，你先回城堡去吧\n我身为父亲的女儿\n我只想尽我的一份力，就像父亲那样\n你有带国王赐给你的铠甲\n是的将军\n或许有帮助\n我收了\n有其他人愿意帮我们\n哪里？\n这儿\n你还活着啊\n死不了\n跟你们战斗的那些人，控制库格的那些人\n我会帮助你们找到他们的\n你们不是不想介入战争吗 我们知道这场仗快结束了\n我们的树林可能会被烧了 我别无选择\n我们跟你一起奋战，今晚我们就一起走\n温德山...\n以前是马甲人所盖的避难所\n避难所?\n但没有门可以进去\n你有办法进去吗 马甲人不需要门就能进去了\n我会想办法\n你不觉得人有机会活着很幸运吗...\n我就这么觉得\n活着...\n你不觉得兴奋吗？\n跟我一起来的那些人 你干嘛不放了他们？\n你不想让全世界的人知道你有多厉害、多仁慈吗\n你什么都不了解！\n！\n我早不需要仁慈这种东西了\n我早就超越善与恶 这些事是小孩子才会谈的，我在改变这个世界命运\n这样我还需要你朋友去宣传我的仁慈吗\n说不定...\n不可能破例，\n包括你，妳那亲爱的老公， 还有那些被我抓来的笨蛋\n杀了我，杀了我\n我不会杀你\n我还蛮享受的\n如果你会流血，就代表你也会死\n或许吧，但我一定不会死\n我还有很多事没完成\n准备！\n！\n射﹗\n射﹗\n推﹗\n那里有个洞穴\n你们可以从那进去\n我差不多该走了\n我不想你一个人去\n如果那个疯子还有一点良知， 那我就必须跟他沟通\n他早就没救了梅里克\n也许我可以转移他的注意力\n我就知道你会来\n我的老朋友\n我们曾经是朋友\n只不过你变太多了\n是吗\n梅格之力只能用来保护国王\n你怎么能违背诺言，反而对国王不利\n喜欢我的库格军吗 他们只是一群冷血的野兽\n库格军没有国王 你猜怎么着\n我不想猜\n我自己就是国王了\n库格军的国王！\n！\n我现在只让一个人卖命\n那就是我！\n！\n够了！\n！\n高卢人，妳跟我是仅存的马甲人\n我求你不要再疯下去了\n你根本不知道...\n...我有多疯\n在我的地盘，没有疯这个字\n我都叫它──\n神力﹗\n冲﹗\n喔，他来了\n他还真是不怕死\n梅若亚\n喔你来啦\n我不知道我怎么办到的\n我怎么会这么白痴？\n原谅我\n我把体内最后的力量传给你\n跑\n这边\n这边\n法墨！\n！\n好久不见法墨\n我知道你成了国王\n一山不容二虎，你是知道的吧\n一定会彼此争斗\n直到见血胜利为止\n那你就来吧!\n你的小魔术用完了吗\n我说过我会报仇的\n不﹗\n你要用什么身分来报仇？\n一个父亲？\n一个丈夫？\n还是一个国王？\n我是为了我的孩子报仇！\n！\n怎么了？\n我有话要说\n我爱你\n-=结束 谢谢观赏=- 制作：\njesseding\n导演：\n维.\n鲍尔\n主演：\n拉森.\n斯塔萨姆\n片名：\n末日危城\n制作：\njesseding\n你只是争取到了点时间而已\n我不会像他们那么活的\n我们已经是他们了，我们是奴隶\n- 我不会当奴隶的\n- 收声，诺瑞科\n我们为什么要进入塞奇威克森林？\n我们要从森林走近路去艾柏城堡\n没军队没卫兵，城堡随便拿下\n我们快离开吧\n看看，一个家里的朋友\n我非常高兴\n独自在这个森林里你不觉得容易受伤吗？\n- 你离我远点\n- 你从不相信我，是吗，玛丽安娜？\n你的举止从来都没赢得过尊敬\n举止？\n礼貌？\n这都是城堡的言谈\n我们不在城堡里\n这里也没有规矩\n给你的特别礼物\n谢谢\n到处都有规矩的，我的公爵\n你喜欢打破规矩的这种天赋 最终还是没用啊\n我带这个走\n跑！\n索拉娜,跑！\n快跑！\n我会找你的，走！\n诺瑞科!\n诺瑞科!\n这是你一直想要的吧\n光荣战死\n你是个勇猛的老人\n索拉娜\n巴斯蒂安？\n靠后\n不，我没事\n你今天很不错\n杀野兽\n- 需要狠下心来\n- 没错\n不管什么出现\n- 你都能战胜它\n- 我做苦活习惯了\n当你是国王的时候\n将会更有用\n你怎么看待你今天\n战斗得这么好？\n我意思是，难道这仅仅只是\n运气？\n你有天赋，你知道的\n领导能力，然后，当然\n你实话实说\n这会让你更好的为国家服务\n智慧是我们的武器\n谨慎则是我们的盔甲\n当人在诚实劳动中\n建设生活\n勇气不灭\n你从哪儿听到的这些？\n当我儿子还小的时候\n我每天晚上\n都对他这么说\n别人都不知道\n现在开始你生活会变得更加艰苦\n- 我只是个农民\n- 是，是\n- 我只知道这个\n- 你知道，这里不远的地方\n有个小村子\n他们一年收两季稻子\n- 那会破坏土壤的\n- 不\n这样不会破坏土壤因为有海草\n你知道，海草从海里来\n给土增肥\n你该试试\n你怎么知道这些\n因为我是国王\n因为我应该知道\n关于土地的一切\n就像你将来也会那样\n只要有国王\n只要有土地\n他们就会发动战争抢夺\n抢夺荒芜的田地\n如果战争不结束那会是什么？\n他们为和平而战\n和平，梦想而已\n但是你如果当国王\n可能\n就能实现\n你不懂\n战争夺取了我的儿子\n你忘了他们夺去了我的儿子了么\n我的儿子\n海力特将军\n在\n带队侦察队去这片树林的北边\n- 我们要看看我们什么在等待着我们\n- 好的\n- 将军？\n- 是\n看\n嗯，这个...\n是个令人惊奇的收获\n法罗公爵来受到裁决了\n我猜国王还活着\n贝克勒将军\n把你的剑给他\n不要护甲\n决斗\n可爱\n你记得我在你还是小孩子的时候对你 做过的事吧，泰利斯？\n我能喝口酒吗？\n没人会帮国王解下护甲吗？\n禽兽\n这个决斗会是你最后的决斗了，法罗\n我杀了你\n我要杀了你\n国王死了！\n国王死了！\n康里得国王死了！\n不，不，不可能\n我是你的国王\n- 不，你就是这个国家的诅咒\n- 泰利斯将军\n非常忠诚\n他永远不会杀了艾柏的新国王\n懦夫\n艾柏的子民们\n国王万岁\n收起来\n艾柏的子民们\n艾柏的勇士们\n片刻前\n我们敬爱的王康里得去世了\n被他的侄子谋杀了\n他想篡权\n根据这国家的法律\n国王的继承人必须有血缘关系\n我给你们介绍我们的新国王\n康里得失散的儿子\n卡姆登 康里得\n有人也叫他法莫\n起来吧\n站起来，请站起来\n国王召唤你们来冒死而战\n现在还活着的人已经从死亡 那里得到了奖赏\n但是我们的敌人还活着\n他会重建军队，重新攻击\n今晚我们疗伤\n葬死\n明天我们袭击克里斯英得要塞\n- 直捣恶魔的老窝\n- 直捣恶魔的老窝！\n天佑吾王！\n什么？\n你要什么？\n带他们走\n带他们一起走\n等等\n把她带来\n退下\n我在你身上\n感受到他\n那个农民\n他会来找你的，太好了\n- 我会等他的\n- 我对你没价值\n对，但是他对我有价值\n不仅仅只是一个农民\n比一个农民更加危险\n现在他会来找我\n你怎么认识我？\n怎样？\n别动\n别动\n我在你身上\n感受到他了\n因为你\n怀了他的儿子\n你怀了他的儿子\n你从哪儿来？\n格拉森。\n他们从我家里把我带走了\n我们会送你回去的\n我们会死在这里的\n再见了，老朋友\n你怎么与那么大的军队对抗？\n大剑失利的地方，小剑就得利\n大法师，没时间猜谜语了\n一小组人会溜过克鲁格人的防守线\n然后在根源解决问题\n带我到这个盖伦那里\n我就能杀了他\n先生，我很尊敬你\n但是我们在王国危急之时去救一个女人？\n如果国王要救他的妻子，就得杀了盖伦\n如果他杀了盖伦，王国就得救了\n玛丽安娜\n就是现在\n陛下\n我想加入你 我想要尽我的义务\n好，你已经说了 回城堡吧\n我是我父亲的女儿\n我会尽忠国王，就像他一样\n你带来了谋杀国王的人\n他落入了我手\n一个人需要他所有能得到的帮助，大法师\n我接受你了\n- 还有其他人也想帮忙\n- 什么其他人？\n我带你去\n- 你还活着啊\n- 我一直远离这里\n你们对抗的人，控制着克鲁格人人的人\n我们帮你战斗\n以为你们不参与人类的纷争呢\n这战争完不了，我们看出来了\n当我们的森林被侵略被烧毁时\n我们也没其他选择\n我和你们一起战斗，然后 我们希望还是不被打搅\n克里斯英得\n- 当作是法师的避难所而建\n- 很坚固吗？\n嗯，门从里面开\n你能进去吗？\n- 一个法师无需门就能进去\n- 我会找条路的\n你觉得你还活着很幸运吗？\n对\n生活\n从来没这么刺激过\n跟我一起来的人\n为什么不放了他们？\n你不想让整个世界都知道你有 无穷的力量和慈悲吗？\n你理解不了吗？\n我超越了慈悲\n我超越了好和坏\n这些是孩子气的思想而已\n我在改变世界的结构\n如果我给你的朋友发了慈悲， 我会怎么样？\n- 那可以...\n- 没有例外！\n没有例外。\n你不是。\n那农民也不是\n你那个尖叫着被我撕开的孩子也不是\n杀了我\n杀了我\n我不会杀了你\n我很喜欢你\n如果你能流血，你也能死\n可能吧，但是我不会\n我还有很多事情要做\n泰利斯\n弓箭手准备\n放！\n就是现在！\n上面有个山洞\n是用来通风的\n我得走了\n我不想你一个人走\n如果那个疯子心里还有一丝理智 我就得去试试\n你不能跟恶魔讲理啊，梅里克\n但是我最少可以分散他注意\n我知道你会来的\n老朋友\n我们曾经是朋友\n但是你变了很多\n噢？\n一个大法师的力量\n是和他为国王做的服务紧密相联的\n你做为国王的敌人，你的力量成长的怎么样了？\n你觉得我的克鲁格人怎么样？\n可憎的野兽而已\n克鲁格人很好笑\n他们没有国王\n猜猜我干了什么，老朋友\n- 我不敢猜\n- 我封自己为国王\n克鲁格人之王\n现在我辅佐着一个我万分敬仰的国王\n- 我自己\n- 够了\n盖伦,你跟我是最后的大法师\n我求你，意识到你现在疯癫的情况吧\n你根本不知道\n疯癫\n可以有多么强大\n我的王国里，没有疯癫这个词\n我们就简称为\n力量\n冲！\n嗯，他来了\n他到了\n我找不到理由继续打这场战争了\n玛丽安娜\n玛丽安娜\n你在这里\n我不知道发生什么了\n我怎么这么愚蠢？\n原谅我\n大法师\n接受我最后的力量吧\n- 杀了他们\n- 帮帮我们\n小心后面！\n走！\n跑！\n快走，我们走\n这边，法莫\n这边\n法莫！\n你给我造成了很多麻烦，法莫\n我知道你当上国王了\n一个王国不容两个国王不是吗？\n国王一对一的战斗 笑饮死敌之血\n这样的事情多久才会发生一次呢？\n你想打，还是想说死我？\n想用魔法跟我打？\n你的荣耀心呢？\n我会复仇的\n不！\n你现在享受什么样的复仇呢，法莫？\n一个父亲的复仇 一个丈夫的\n还是一个国王的？\n你忘了一个母亲的复仇\n发生什么了？\n我一直想告诉你\n我爱你\n片名：\n末日危城 王者之役\n我知道你会来\n我告诉过你\n我意思是我感觉到了\n你还没来之前我就有感觉\n你力量愈来愈强了，慕黎拉\n我们在一起还是有好处\n不行\n你得离开\n你希望我走？\n每次我们偷偷碰面，我觉得...\n好虚弱，好无力\n恋爱中的女人可能都这样\n你知道爱情多少？\n我知道诗人说愿意为爱而死\n那你愿意吗？\n或许...\n在诗句中\n家父发现会怎样？\n世上有许多事令尊不知道\n这件事也瞒着他吧\n悖理逆天！\n盖里恩你疯了，你走火入魔了\n愿众神拯救我们\n继续拔，瑟夫\n脚用力\n甘蓝不想出来嘛\n最难的总是最好的\n看吧 有价值之物不是简单就能得手\n懂了\n你没射到\n我不想杀它们\n只是不让它们偷吃作物\n我带猪来了 相同的交易吗？\n冬季谷物换猪？\n相同交易 说好就不改变\n这种干燥季节还真不好过\n我遇过更吃不消的 国王在召募新兵\n士兵的待遇很好\n我有这块土地 这样就够了\n你变老之后会厌倦这种生活的\n你不是想展现勇气吗？\n种田生活可不需要勇气\n可恶，农夫 讨论一下会要你的命吗？\n我们不是动物，人类需要沟通的\n诺瑞克，你先说服甘蓝出来\n等到下雨，土壤会变得泥泞\n到时候谁都无法说服甘蓝出来\n你老爸就是这么固执，瑟夫\n他很懂得自得其乐\n别有样学样，我们走吧 好\n瑟夫，猪牵走\n你大概会留下来用餐吧\n好吧，既然你邀请我\n诺瑞克，真高兴见到你 你应该常来的\n我想农夫从小就看腻我\n现在他有自己的家就该好好享受\n诺瑞克叫爸不要种田 应该加入国王的军队\n等一下，我不是这样说的\n他说国王的士兵挣很多钱\n农夫，你不是真的在考虑吧？\n你们是我的家人 我哪里都不去\n诺瑞克，这回答你的问题了吧？\n我只是随便说说而已 人各有所长\n我想你拿手的就是随便说说\n你拿手的则是打小报告\n我想吃点鸡肉 别给他\n鸡肉拿来\n说点甜言蜜语\n告诉我你多爱我\n你知道的\n我只知道你说的话\n但你什么都不说\n看我的手 为了养家粗糙不堪\n我的手比我的话还具说服力\n亲口说又不会损失什么\n你想要什么？\n每个女人都想要的\n一点激情\n一点激情\n我来试试看\n该出发了 你为何不一起走？\n我需要整理作物，记得吧？\n男人本来就该负责苦力\n勇气会长存\n没错\n我不喜欢一个人睡觉\n小心安全\n我们要去史东布基 当然很安全的\n为什么大家都叫爸农夫？\n他没有名字吗？\n你父亲相信人做什么就会像什么\n他很小就被诺瑞克带到史东布基\n所以诺瑞克是他父亲？\n镇上的人领养他\n每户人家轮流收留他\n但诺瑞克一直对他特别照顾\n爸现在有家庭了\n我很高兴是我们\n我也是\n将军\n向国王报告\n王上 库拉格人\n残暴且武装的库拉格人\n他们用刀剑攻击我们\n太荒谬了 你好像在说一群凶暴的野狗\n他们像人一样 杀掉我们所有巡守队士兵\n若不是将军命令我回来通报 我应该也殉难了\n一定是巫术\n外婆！\n瑟夫，是你吗？\n我抓到你了\n总算能把你放进我的烤箱\n我讨厌烤箱\n又干燥 又温暖\n你不希望我们生吃你吧？\n你干嘛要吃我？\n今晚我答应外公\n准备他喜欢的菜\n市场价格如何？\n男人当然想占我便宜 因为我是女人\n所以我开更高的价 因为我就是女人\n你总是这么强悍\n不，我只知道我想要什么\n直到遇见你父亲\n你父亲才不会乖乖听话\n外公呢？\n在钟塔上\n我们去找他吗？\n小心点\n钟塔是宣告战争的装置\n你别拉错绳子启动战争喔\n你怎么这么久才来？\n对他们狠一点\n太疯狂了\n库拉格人就像野兽 他们没穿盔甲，徒手搏斗\n我得借你的马，诺瑞克\n你要去哪里？\n史东布基\n索拉娜和瑟夫在那里 我跟你去\n农夫没来\n他希望我交易，他照顾农地\n你是他的好妻子\n他也很爱你\n对，我相信他是\n新郎和新娘接吻时 摇这个钟五下\n向镇上的人报佳音\n快走 带瑟夫回家\n爸，带他走，你能保护他\n小姐，准备好了吗？\n我随时都准备好了\n停手！\n这么快就放弃了？\n你的进步...\n好神速\n真希望艾柏王国能多一些 像你一样强的士兵\n那就让我加入军队\n我想艾柏军队不欢迎女战士吧\n况且令尊一定有意见\n家父禁止我做任何事\n塔利斯\n叫你的军队准备出发了\n一群库拉格人正在侵略王国\n太阳刺得我皮肤好痛\n你在胡说什么？\n还不服从我的命令\n我只听从国王的命令\n你最好...\n学会一点尊敬\n人受尊敬要名符其实\n你错了 我凭家世就值得受尊敬\n索拉娜正在摇钟\n别担心，瑟夫 我会找到你妈\n爸！\n巴士汀\n拿我的剑\n进来把门闩上 快拿去\n爸，谢谢 快走\n他们正在劫掠村庄\n厉害\n你很有种嘛\n放他走\n你今天已经杀了我一次 但我们又对上了\n爸\n快跑，瑟夫\n看，他们在撤退\n瑟夫！\n瑟夫！\n我还要替索拉娜建立墓碑\n没人看见索拉娜 没人听说\n没发现她的尸体，她可能逃了\n没错，农夫\n你去哪里了？\n我一直找不到你\n我很忙\n非常忙 我们有协定\n我帮你潜入城堡以利我们联手\n我正在进行我的工作\n最近的灾难相信能显示 我是多么地忙碌\n的确，你引起不少骚动\n引起骚动？\n告诉我，公爵\n你知道一个叫农夫的人吗？\n史东布基的人民\n艾柏王国的军队同情你们\n这场重大悲剧会被平反的\n正当库拉格人屠杀民众时 国王的军队在哪里？\n农人！\n别忘了自己的身份\n我认为 你应该在国王面前低头吧\n我认为 国王的军队应该保护国土\n而不只是城堡\n被库拉格人掳走的人怎么办？\n库拉格人掳走村民？\n安静！\n就算库拉格人俘虏村民\n我们也不知道他们的目的何在\n国王军队需要所有能作战的男人\n谁要加入？\n国王有自己的军队\n那些俘虏只有我们\n你竟敢违抗国王的诏令 我支持你，农夫\n卫兵！\n让他们走\n艾柏王国是民主的\n你竟敢冒险违抗国王 你更冒险\n我没有选择，她是我妻子 她是我姊姊\n好吧，我们去找人\n你留下来 跟军队待在艾柏王国\n你想要当军人，对吧？\n不 我不喜欢穿军服\n你有马吗？\n一只母马\n她老了但仍很强壮\n老了 但仍很强壮\n你挡住我了\n我们见过面吧？\n说点甜言蜜语\n告诉我你多爱我\n你知道的\n我是梅里克，国王的术士 我听过你\n你会小孩的魔法玩意\n你的国王需要你\n是啊，我儿子也需要我\n我却辜负他 我妻子若活着也需要我\n农夫，你有想过吗？\n人生可能有更伟大的事...\n比起你爱或你失去的人？\n不，我没想过\n努力活下去，农夫\n你的国王需要你\n可能连他自己都不知道\n你怎么知道有这座桥？\n小时候我常在这附近玩\n我童年就在这里渡过的\n如果我们绕过峡谷会耗掉整天 你有什么馊主意？\n我们越过去\n把马具拆下\n什么？\n要把马留下来？\n你怕伤马的感情吗？\n回家！\n快点！\n过去吧\n好，我先来\n你真是勇敢的老男人\n我只是不想绳子被你弄断 结果轮不到我\n快点 好，我们过去吧\n你对马还比较关心\n我喜欢我的马 至于你，我就不确定\n你跟我熟之后就会喜欢我\n这样省了我们不少时间\n王上 站稳，士兵\n这里有多少人在看守？\n我正在看守，王上\n你还真尽忠职守呢\n法罗公爵，你真调皮\n你弄得我酥胸好痒\n我要跟你妈告状\n你要去哪里？\n我的侄儿正在自得其乐\n你觉得这样适当吗？\n国王和军队出征时你还在玩乐\n你的唯一工作就是...\n守卫城堡\n结果却完全没人在看守\n王上\n我刚才在调查...\n奇风异俗之事\n别让他出现在我眼前 不\n别碰我\n你连碰我衣服都没资格\n那你更没资格玷污国王的王位\n除非国王确实命令你\n你不准碰我\n帝国法律\n正是我的挡箭牌\n事情正依照计划进行 我等不及了\n我受不了那些老臣的规矩\n快实现我的目标\n你想加快进行的速度？\n没问题\n我们应该加快脚步\n很好\n盖里恩\n为何你总是无声无息突然出现？\n我没有\n我的出现其来有自\n你自以为能擅自闯进我的闺房\n我喜欢你以前欢迎我的方式\n你不能想来就来，想走就走\n然后什么都没说就消失\n我不是你的娼妇\n你怎么会这样想？\n你了解我必须无声无息地出现\n我不方便敲大家闺房的房门吧？\n你不能随便出现\n况且家父还认为你是国王的敌人\n我有朋友 我有影响力\n为何家父如此鄙视你？\n他不常厌恶别人\n干嘛质问我？\n我不是来这里接受你审问的\n你父亲厌恶我\n因为我从不在国王和他面前低头\n因为我从他身上夺去我要的东西\n甚至他女儿的贞节\n滚出我的房间\n滚出我的人生\n你也要驱逐我吗？\n我们一起做过许多事\n我还发掘你的力量 以及你的理想\n你只带给我小把戏和噩梦 别说了\n王上\n请再度接受我最诚恳的歉意\n我糟蹋你的命令了\n糟蹋？\n你承认过错了？\n对\n王上，我能坐下吗？\n仆人！\n我明白...\n下去！\n我明白我辜负你的信任好几次\n你与全国人民可能都对我失望\n但我会改变\n我会抛掉我的年少轻狂\n在吾国面临此伟大战役之际 我会证明我是够资格的继承者\n吃吧\n你真是舌灿莲花，侄儿\n很适合外交\n这方面你有本领\n我能敬您一杯吗？\n下次吧\n改过自新的人不该早上就喝酒\n有道理\n没错，有道理\n国王万岁！\n真会说话\n库拉格人上次攻击南部史东布基\n对，因地形险恶他们会...\n往北部沼泽地移动\n我们应该进攻\n库拉格人的行动只是假设\n我不喜欢这样，农夫\n没人想进去塞吉维克森林\n这座森林刚好在群山之间\n这样我们就可以追上库拉格人\n塞吉维克森林不仅只有草木而已\n你不能随便穿越\n你不会想晚上被困在这里的\n我们可以点火炬 火炬会引起注意\n我不在乎\n农夫，你听过传闻 塞吉维克森林有怪东西\n我也听说上帝会保护无辜者\n传闻现在对我们没用\n快点，我们还有很多路要走\n我根本没看到路径\n没有路径 那我们怎么知道通往哪里？\n有动静\n诺瑞克，你没事吧？\n农夫，这在你的计划之内吗？\n放我们下来 我得看情形\n离开我们的森林 你们不能干扰这里\n我不喜欢你们的武器和杀戮\n我们只是通过而已 那就赶快通过\n别再闯进来\n我们...\n迷路了\n人类啊 不仅没用还很无助\n王上\n我请求您告诉我家父的消息\n你父亲为我出任务 拜托您\n发生什么事？\n我担心他面临重大危险\n国王的术士肩负很多责任\n他的女儿不需要烦恼男人的事\n家父以为把我关在城堡 我的心灵能够平静\n他错了 我能感受到王宫的紧张气氛\n现在遇上天大的困难\n黑暗\n判决\n我知道魔法酿成了黑暗势力\n快跑\n你父亲去寻求来源\n还有解决之道\n你父亲 王上！\n盖里恩 我感觉我快死了\n你跟国王一起用餐？\n你干了什么事？\n我以为你很急 想加快进行的速度\n我对国王的食物动了手脚\n你毒害我，你竟然杀我\n别自哀自怜了\n任何事都能解决\n拜托\n希望你记得谁才真正握有大权\n我会记得\n我救了你一命\n那你该为我做什么？\n国王被下毒了\n他能得救吗？\n或许 只要不会太晚\n我保证\n能私下谈一下吗？\n法罗逃出城堡并带走两大军团\n现在我们知道是谁下毒了\n我们是北军 我们会在北方跟新盟友会合\n我们集结的兵力\n会为各世代带来和平与安宁\n我感觉到盖里恩的魔掌\n为何不是塔利斯宣告这场任务？\n有人想叛国吗？\n还剩多少兵力？\n三分之一\n我感到库拉格人的势力在扩张\n盖里恩正在召集军团\n巨大的军团 难以致信\n他一个人怎么可能 造成如此大的毁灭\n我自己的女儿 竟然跟敌人暗通款曲\n你这么恨我吗？\n我原本以为我爱他\n他渗入我们的血统\n你也拥有他部分的力量\n因为你 王国可能会灭亡\n对不起...\n你们为何讨厌外来者？\n你们互相憎恨 为何我们不能恨你们？\n我们安身在森林避开你们的战争\n还有争夺及愚蠢的野心\n你们闯进来 箭射进我们的树林\n彼此伤害是你们人类的天性之一\n你们不了解自己多么危险\n我只能带你们到这里\n祝好运\n下一步呢？\n你醒了吗？\n是，我醒了\n他们会发现害死国王没这么容易\n我们要进攻\n可是王上 您中毒了\n您也许会撑不下去 我撑得下去，指挥官\n而且我有智慧\n库拉格人不会料到我们会进攻 所以我们要行动\n谁下毒的？\n恐怕是你侄儿法罗公爵\n更惨的是\n他弃城逃走\n并带走卫兵及两大军团\n我们进攻，展开第一场战役\n召集你的军队\n我还有多少时间？\n你的生命所剩不多\n但时间还够\n诺瑞克，你确定吗？\n不太确定\n她在这里，诺瑞克\n我感觉得到 我想你是对的\n别激动！\n索拉娜？\n索拉娜！\n今天\n我们为国王而战\n国王也要一起奋战\n以艾柏王国之名\n王上\n出发\n上帝祝福为荣耀而死之人 以及真理！\n我对你很好奇，农夫\n你让我感到危险\n我读不出你的心\n我读得出多数人的心\n读出他们的全部，但是你？\n我读不出你的过去\n为什么？\n你是谁？\n有些谜不值得解\n你们来了\n我以为我做了一场恶梦\n农夫呢？\n瑟夫呢？\n巴士汀，瑟夫呢？\n他跟我们父母在一起吗？\n是，他们都在一起\n他也遭不幸了\n你被抓走那天他们被杀了\n我很遗憾\n我的儿子，天啊\n他死前没受苦吧？\n告诉我\n没有\n他死得很快\n农夫会来\n他会找到你\n你怎么知道？\n因为他必须如此\n因为他需要你\n在末日之际 他最需要的就是你\n别死，农夫\n你还有许多使命\n你看起来不太好\n来\n喝一点\n感觉怎样？\n这是什么？\n是药\n回家真好\n我不是你的娼妇\n他用你来毁灭...\n我知道诗人们说...\n他以玩弄感情为乐 你还没得到教训吗？\n不是我帮你提升你的力量 你的预感吗？\n小姐\n我伤害了父亲\n我危害整个王国\n你父亲不会改变对你的爱\n我做了一堆蠢事\n你自杀只会伤他更深\n或许你是对的\n我希望父亲以我为荣\n他本来就是\n他对我有期许\n准备跟新盟友会合吧\n他们是库拉格人\n服从 别再质疑了\n他们是强大的军队\n照顾这男人\n带他去国王的帐篷\n喂饱我的马儿\n这就是你的紧急任务？\n他是史东布基的农夫\n没错\n为何一个只顾情爱的背叛者...\n会赢得国王术士的青睐？\n因为他对国王有特殊意义\n我不懂有何意义\n国王也不懂\n我想你们该好好认识对方了\n我见过他\n上次他违抗我\n我只是做我该做的事\n我想他对王上有意义\n上次之后他受了许多苦\n大家都是\n他有什么特别？\n王上，因为...\n他是你儿子\n农夫有位朋友叫诺瑞克\n他以前负责看顾王后的马\n我在史东布基认出他\n奥斯里大屠杀之后\n诺瑞克发现一个约三岁的男孩...\n在战场上徘徊\n当时奥斯里的男孩只剩王子\n农夫，你对这故事有何看法？\n一个老男人自以为记得 30年前的事\n难怪他当不上国王\n你是国王之子 王位的继承者\n我没有父亲\n没有父母\n这里不关我的事\n你是说这个狂人是我的儿子？\n他住在史东布基农地30年\n表面上是\n表面上是 你说我儿子死了\n你说我家人都死了\n众神在开我什么玩笑？\n有时众神知道怎样对我们最好\n究竟什么意思？\n记得那时多么混乱吗？\n到处都是战事 被敌人包围\n若这孩子被带回艾柏城堡\n他能活多久？\n他在史东布基成长茁壮\n远离那些极力夺取...\n王子和王位的敌人\n我的好友\n你最好没认错\n你最好能确定\n国王需要有能力的人帮他作战\n这不是我的问题\n他的王国被威胁了 你的王国被威胁了\n我不认识国王\n索拉娜才是我的家人\n诺瑞克与巴士汀也是\n你们打算住哪里？\n王国要是落入盖里恩的手中\n你能给你的妻子什么未来\n你想清楚\n法罗，你犯了叛国罪\n你在这里没有权力\n跟随你的士兵也被视为叛徒\n我们不饶恕叛国者\n各位\n塔利斯指挥官毒害了国王\n却指控我叛国，真好笑\n你的野心真大，塔利斯\n艾柏王国属于我的控制\n我们不会让他掌权\n你绝对当不成国王，侄儿\n因为你缺乏勇气\n现在没有，永远也不会有\n11与12军团跟随您，王上\n懦夫！\n库拉格人没有弓箭手 但他们也不怕死\n现在他们人数较多 但我们是人类\n我们效忠一个高尚的王国\n他们是残暴贪欲的野兽 什么都不是\n你前来尽自己的义务吗？\n我决定为国而战\n我有幸跟你一同奋战 这样我才能监视你\n保持警戒\n指挥官\n率领军队\n发射！\n发射！\n别怕，乖马儿\n将军，打起战旗\n士兵们，快走\n他们像狗一样凶猛\n是的\n我们走\n准备好\n发射！\n发射！\n这些库拉格人丧心病狂了\n他们一定还有很多人\n为了战胜，一切在所不惜\n我们不会输的\n不管你们杀多少库拉格人\n我只会召唤更多人手来\n魔灵地 这里是我们的赎罪之地吗？\n不，诺瑞克\n这里是我们的贞洁之地\n这里使人坦然面对罪恶\n国王\n别乱动，亲爱的叔父\n射击！\n卫兵\n快点！\n护送国王离开战场\n真棒，我的好叔父\n你们只争取到一点时间\n我不想过这种生活\n我们身在其中，我们是奴隶\n我不想活得像奴隶 诺瑞克，别说了\n我们为何进入塞吉维克森林？\n我们穿越就能抵达艾柏城堡\n没有军队没有警备 我们等着城堡到手\n我们快离开这里\n真想不到，看谁来了\n遇到家族成员真开心！\n独自一人在森林 你不觉得害怕吗？\n别靠近我 慕黎拉，你从未信任过我对吧？\n你的德行绝对不会获得信任\n德行？\n端正？\n这些都只适用于城堡\n我们现在又不在城堡\n这里没有任何规矩\n不！\n送你一件大礼\n谢谢\n哪里都有规矩，公爵\n你破坏规矩的下场就是失败\n我带走这个\n索拉娜，快跑！\n快点，快走！\n诺瑞克！\n你一直想要得到...\n壮烈的牺牲\n你是一个勇敢的老男人\n索拉娜！\n巴士汀？\n快跑！\n站在我后面\n我不饿\n你今天很勇猛\n杀掉野兽\n这种勇气很残忍\n不管这代表什么\n你会完成使命 我只是一个辛苦农人\n迟早会有意义的\n在你当上国王之后\n不然你认为你...\n今天为何如此勇猛？\n难道是...\n好运？\n你知道自己的资质\n领导力\n当然还有你的坦诚\n这些都会助你一臂之力\n智慧是我们的榔头\n审慎是我们的钉子\n当人类吃得苦中苦...\n勇气会长存\n勇气会长存\n你哪里听到这些话？\n我告诉我儿子\n当他还小时我每晚跟他说\n我只告诉过他\n现在开始你的日子会更艰难\n我只是一个农夫 我懂\n我只知道这样 你听过一个小村庄...\n离这里不远\n他们一年种植两次作物\n这样会破坏土壤 不\n他们没有破坏土壤 因为有海藻\n海藻来自大海\n能使土壤肥沃\n你该试试\n你怎么会知道这些事？\n因为我是国王\n因为我应该了解...\n这块土地\n你也应该这样\n只要国王存在\n只要国土存在\n人民就会努力奋战\n这样会让土地更贫瘠\n战争不断有何意义？\n你为和平而战\n和平 这是梦想\n这个梦想也许得靠你...\n身为国王...\n带来永远的和平\n你不了解\n这些战争夺去我的孩子\n你忘了也夺去我的孩子\n吾儿\n哈雷特将军\n是，长官\n派巡守兵去森林北边\n探测我们将会面对怎样的敌人 是，长官\n指挥官 什么事？\n你看\n真是突来的访客\n法罗公爵来这里接受审判\n我想国王没死吧\n贝克勒将军\n你的剑给他\n不用盔甲\n决斗啊\n真友善\n记得小时候我怎么教训你的吧？\n至少让我喝一口酒吧？\n我没有盔甲怎么保护我的国王？\n一群猪\n这场决斗 是你的最后一战，法罗\n我会杀掉你\n我应该杀掉你\n国王死了！\n国王死了！\n康瑞德国王驾崩了！\n不，不可能\n我是你们的国王\n你是第一位继承者\n塔利斯指挥官是遵守荣誉的人\n你绝不会杀掉艾柏的新国王\n懦夫\n我的艾柏子民\n国王万岁\n好！\n好！\n万岁！\n好！\n好！\n万岁！\n把刀放下\n艾柏的人民\n艾柏的士兵\n几刻钟前\n我们深爱的康瑞德国王驾崩了\n被他的侄儿谋杀\n为了夺取王位\n依照我国的法律\n国王的继承者必须是他的血亲\n我向大家宣布我们的新国王\n康瑞德国王失散的儿子\n一般人称他为农夫\n平身\n请起立 站起来\n国王召请各位面对死亡\n留下的人要以生命为代价\n我们的敌人仍活着\n他会重建力量再度发动攻击\n今晚我们包扎我们的伤口\n埋葬我们的牺牲者\n明日我们前往魔灵地\n深入恶魔的巢穴！\n深入恶魔的巢穴！\n上帝拯救国王！\n什么？\n干嘛？\n把他们带走\n跟其他人关在一起\n等一下\n把她带过来\n滚！\n我感觉到他...\n在你身上\n那个农夫\n他会来找你\n太棒了，我等他来 我对你没用\n对，但他对我有用\n他不只是农夫\n比农夫危险多了\n过来我这里\n你如何认出我的？\n如何？\n别动\n别动\n我感觉到他...\n在你身上\n因为你怀着...\n他的孩子\n你怀着他的孩子\n你从哪里来的？\n葛罗森 他们把我从家中掳走\n我们会送你回家\n我们会死在这里\n再见，我的老友\n我们如何对抗那么庞大的军队？\n阔剑失败的地方，短刀会成功\n别猜谜了，术士\n弱势军队能溜过库拉格人的阵线\n解决根源的问题\n帮我找到盖里恩\n我要干掉他\n长官，冒昧问您\n我们的计划是救一个女人 却不顾整个王国的安危吗？\n国王救妻子，必须干掉盖里恩\n干掉盖里恩，王国就得救\n慕黎拉\n军队要出发了\n王上\n我希望跟您一道作战 我希望为您服务\n我们说好了 你回城堡去\n身为父亲的女儿\n我要跟他一样为国王服务\n你抓来杀国王的凶手\n他落入我的手中\n男人需要任何帮手，术士\n我接受你的请求\n还有其他人想帮忙 什么人？\n我带你去\n你存活下来了 而且没再干扰你们\n你们对抗的敌人 控制库拉格人的敌人\n我们会帮你们对抗他们\n但你们不希望介入人类的战争\n我们知道这场战争不会结束\n等到我们的森林被烧毁及入侵\n我们连选择都没有\n我们跟你们齐肩并战 之后再平静过生活\n魔灵地\n盖得像坚不可破的密所 多坚固呢？\n门只能从里面开\n你能潜入吗？\n术士不需要从门进入魔灵地 我也会想办法进去\n你认为自己活着很幸运吗？\n我是\n人生\n没这么令人兴奋过\n跟我一起被掳来的那些人\n为何不释放他们？\n你不希望世人知道你同时 拥有神力和慈悲吗？\n你不懂吗？\n我超越慈悲\n我超越善与恶\n这些都是幼稚的想法\n我要改变世界的结构\n事情会没完没了 假使我对你朋友表现慈悲\n我可以 没人能豁免\n你不能 农夫不能\n被我剥夺梦想的男孩都不能\n杀掉我！\n杀掉我！\n我不会杀你\n我欣赏你\n你只要会流血，你就会死\n或许我会 但不会发生\n我还有许多事未完成\n射击！\n弓箭手准备好\n射击！\n放下石头！\n上面有一个洞穴\n空气可以进入\n现在我要离开你了\n我不想要你一个人过去\n如果那个狂妄之徒还有一点理智 我一定试图感化他\n你无法说服那个魔鬼，梅里克\n但至少我能分散他的注意力\n我就知道你会来\n我的老友\n我们曾是朋友\n但你完全变了\n是吗？\n术士的力量是就要帮助国王\n你却坐大成为国王的敌人\n你认为我的库拉格人怎样？\n他们是残酷的恶兽\n库拉格人很奇怪\n他们没有国王\n好友，猜我做了什么事？\n我不想猜 我让自己成为国王\n库拉格人的国王\n这是我最热中帮助的国王\n我自己 够了\n盖里恩 我们两人是仅存的术士\n我求你承认你已陷入疯狂\n你不懂\n疯狂是多大的一股力量\n我的王国中 没有所谓的疯狂\n我们称疯狂为...\n权力\n进攻！\n他在这里\n他来了\n看来事情不必再拖了\n慕黎拉\n慕黎拉\n你来了\n我不懂我怎么过来的\n我一直太愚蠢了\n原谅我\n术士传人\n吸纳我最后的力量\n谁来救我们，拜托\n快跑！\n快走！\n跟他走！\n这边，农夫\n这边\n你令我心神不宁，农夫\n我知道你成为国王\n吾国一山不容二虎吧？\n两个国王只会造成战乱不止\n彼此争得你死我活\n你是想决斗，或是说服我就范？\n你想用魔法跟我决斗吗？\n你的荣誉呢？\n我要复仇\n不！\n你想要复什么仇？\n身为父亲或丈夫的仇？\n还是身为国王的仇？\n你忘记身为母亲的仇\n怎么回事？\n有句话我一直想告诉你\n我爱你\n法罗，你犯了叛国罪\n我们不讲条件\n任何听从你指挥的人\n也将被视为叛国者\n我们不饶恕叛国者\n先生们\n泰利斯将军毒害了国王\n还说我叛国\n你野心无边啊，泰利斯\n艾柏之国现在由我统治\n我们，也不讲和\n我的侄子，你永远也当不上王\n因为你没胆量\n现在没有，将来也没有\n第11和第12军团归您统管，陛下\n你们这些懦夫\n克鲁格人没弓箭手，也不会害怕\n现在他们比我们人多，但是我们是人\n我们忠于一个高贵的国家\n它们是野兽，嗜血的野兽，仅此而已\n那么，你来尽责吗？\n我决定了要一战\n有你们在我身边一起我很骄傲， 我也会留意你的\n中尉\n将军\n走吧\n弓箭手\n放！\n放！\n没事的\n将军，包抄侧面\n勇士们，出发\n它们像疯狗一样打仗\n对啊\n我们走\n预备\n放！\n放！\n这些克鲁格人人不用脑子打\n它们的脑子在这里\n你赢得一时，不算什么\n我们赢得一世！\n你杀了这些\n我就招出更多的\n克里斯英得,这是我们偿还罪孽的地方吗？\n不，诺瑞科\n这是我们偿还美德的地方\n罪孽比美德在这里要吃香\n国王\n别动，好叔叔\n放！\n卫兵！\n卫兵！\n快\n把国王抬离战场\n快\n永别了，好叔叔\n走\n你只是争取到了点时间而已\n我不会像他们那么活的\n我们已经是他们了，我们是奴隶\n- 我不会当奴隶的\n- 收声，诺瑞科\n我们为什么要进入塞奇威克森林？\n我们要从森林走近路去艾柏城堡\n没军队没卫兵，城堡随便拿下\n我们快离开吧\n看看，一个家里的朋友\n我非常高兴\n独自在这个森林里你不觉得容易受伤吗？\n- 你离我远点\n- 你从不相信我，是吗，玛丽安娜？\n你的举止从来都没赢得过尊敬\n举止？\n礼貌？\n这都是城堡的言谈\n我们不在城堡里\n这里也没有规矩\n给你的特别礼物\n谢谢\n到处都有规矩的，我的公爵\n你喜欢打破规矩的这种天赋 最终还是没用啊\n我带这个走\n跑！\n索拉娜,跑！\n快跑！\n我会找你的，走！\n诺瑞科!\n诺瑞科!\n这是你一直想要的吧\n光荣战死\n你是个勇猛的老人\n索拉娜\n巴斯蒂安？\n靠后\n不，我没事\n你今天很不错\n杀野兽\n- 需要狠下心来\n- 没错\n不管什么出现\n- 你都能战胜它\n- 我做苦活习惯了\n当你是国王的时候\n将会更有用\n你怎么看待你今天\n战斗得这么好？\n我意思是，难道这仅仅只是\n运气？\n你有天赋，你知道的\n领导能力，然后，当然\n你实话实说\n这会让你更好的为国家服务\n智慧是我们的武器\n谨慎则是我们的盔甲\n当人在诚实劳动中\n建设生活\n勇气不灭\n你从哪儿听到的这些？\n当我儿子还小的时候\n我每天晚上\n都对他这么说\n别人都不知道\n现在开始你生活会变得更加艰苦\n- 我只是个农民\n- 是，是\n- 我只知道这个\n- 你知道，这里不远的地方\n有个小村子\n他们一年收两季稻子\n- 那会破坏土壤的\n- 不\n这样不会破坏土壤因为有海草\n你知道，海草从海里来\n给土增肥\n你该试试\n你怎么知道这些\n因为我是国王\n因为我应该知道\n关于土地的一切\n就像你将来也会那样\n只要有国王\n只要有土地\n他们就会发动战争抢夺\n抢夺荒芜的田地\n如果战争不结束那会是什么？\n他们为和平而战\n和平，梦想而已\n但是你如果当国王\n可能\n就能实现\n你不懂\n战争夺取了我的儿子\n你忘了他们夺去了我的儿子了么\n我的儿子\n海力特将军\n在\n带队侦察队去这片树林的北边\n- 我们要看看我们什么在等待着我们\n- 好的\n- 将军？\n- 是\n看\n嗯，这个...\n是个令人惊奇的收获\n法罗公爵来受到裁决了\n我猜国王还活着\n贝克勒将军\n把你的剑给他\n不要护甲\n决斗\n可爱\n你记得我在你还是小孩子的时候对你 做过的事吧，泰利斯？\n我能喝口酒吗？\n没人会帮国王解下护甲吗？\n禽兽\n这个决斗会是你最后的决斗了，法罗\n我杀了你\n我要杀了你\n国王死了！\n国王死了！\n康里得国王死了！\n不，不，不可能\n我是你的国王\n- 不，你就是这个国家的诅咒\n- 泰利斯将军\n非常忠诚\n他永远不会杀了艾柏的新国王\n懦夫\n艾柏的子民们\n国王万岁\n收起来\n艾柏的子民们\n艾柏的勇士们\n片刻前\n我们敬爱的王康里得去世了\n被他的侄子谋杀了\n他想篡权\n根据这国家的法律\n国王的继承人必须有血缘关系\n我给你们介绍我们的新国王\n康里得失散的儿子\n卡姆登 康里得\n有人也叫他法莫\n起来吧\n站起来，请站起来\n国王召唤你们来冒死而战\n现在还活着的人已经从死亡 那里得到了奖赏\n但是我们的敌人还活着\n他会重建军队，重新攻击\n今晚我们疗伤\n葬死\n明天我们袭击克里斯英得要塞\n- 直捣恶魔的老窝\n- 直捣恶魔的老窝！\n天佑吾王！\n什么？\n你要什么？\n带他们走\n带他们一起走\n等等\n把她带来\n退下\n我在你身上\n感受到他\n那个农民\n他会来找你的，太好了\n- 我会等他的\n- 我对你没价值\n对，但是他对我有价值\n不仅仅只是一个农民\n比一个农民更加危险\n现在他会来找我\n你怎么认识我？\n怎样？\n别动\n别动\n我在你身上\n感受到他了\n因为你\n怀了他的儿子\n你怀了他的儿子\n你从哪儿来？\n格拉森。\n他们从我家里把我带走了\n我们会送你回去的\n我们会死在这里的\n再见了，老朋友\n你怎么与那么大的军队对抗？\n大剑失利的地方，小剑就得利\n大法师，没时间猜谜语了\n一小组人会溜过克鲁格人的防守线\n然后在根源解决问题\n带我到这个盖伦那里\n我就能杀了他\n先生，我很尊敬你\n但是我们在王国危急之时去救一个女人？\n如果国王要救他的妻子，就得杀了盖伦\n如果他杀了盖伦，王国就得救了\n玛丽安娜\n就是现在\n陛下\n我想加入你 我想要尽我的义务\n好，你已经说了 回城堡吧\n我是我父亲的女儿\n我会尽忠国王，就像他一样\n你带来了谋杀国王的人\n他落入了我手\n一个人需要他所有能得到的帮助，大法师\n我接受你了\n- 还有其他人也想帮忙\n- 什么其他人？\n我带你去\n- 你还活着啊\n- 我一直远离这里\n你们对抗的人，控制着克鲁格人人的人\n我们帮你战斗\n以为你们不参与人类的纷争呢\n这战争完不了，我们看出来了\n当我们的森林被侵略被烧毁时\n我们也没其他选择\n我和你们一起战斗，然后 我们希望还是不被打搅\n克里斯英得\n- 当作是法师的避难所而建\n- 很坚固吗？\n嗯，门从里面开\n你能进去吗？\n- 一个法师无需门就能进去\n- 我会找条路的\n你觉得你还活着很幸运吗？\n对\n生活\n从来没这么刺激过\n跟我一起来的人\n为什么不放了他们？\n你不想让整个世界都知道你有 无穷的力量和慈悲吗？\n你理解不了吗？\n我超越了慈悲\n我超越了好和坏\n这些是孩子气的思想而已\n我在改变世界的结构\n如果我给你的朋友发了慈悲， 我会怎么样？\n- 那可以...\n- 没有例外！\n没有例外。\n你不是。\n那农民也不是\n你那个尖叫着被我撕开的孩子也不是\n杀了我\n杀了我\n我不会杀了你\n我很喜欢你\n如果你能流血，你也能死\n可能吧，但是我不会\n我还有很多事情要做\n泰利斯\n弓箭手准备\n放！\n就是现在！\n上面有个山洞\n是用来通风的\n我得走了\n我不想你一个人走\n如果那个疯子心里还有一丝理智 我就得去试试\n你不能跟恶魔讲理啊，梅里克\n但是我最少可以分散他注意\n我知道你会来的\n老朋友\n我们曾经是朋友\n但是你变了很多\n噢？\n一个大法师的力量\n是和他为国王做的服务紧密相联的\n你做为国王的敌人，你的力量成长的怎么样了？\n你觉得我的克鲁格人怎么样？\n可憎的野兽而已\n克鲁格人很好笑\n他们没有国王\n猜猜我干了什么，老朋友\n- 我不敢猜\n- 我封自己为国王\n克鲁格人之王\n现在我辅佐着一个我万分敬仰的国王\n- 我自己\n- 够了\n盖伦,你跟我是最后的大法师\n我求你，意识到你现在疯癫的情况吧\n你根本不知道\n疯癫\n可以有多么强大\n我的王国里，没有疯癫这个词\n我们就简称为\n力量\n冲！\n嗯，他来了\n他到了\n我找不到理由继续打这场战争了\n玛丽安娜\n玛丽安娜\n你在这里\n我不知道发生什么了\n我怎么这么愚蠢？\n原谅我\n大法师\n接受我最后的力量吧\n- 杀了他们\n- 帮帮我们\n小心后面！\n走！\n跑！\n快走，我们走\n这边，法莫\n这边\n法莫！\n你给我造成了很多麻烦，法莫\n我知道你当上国王了\n一个王国不容两个国王不是吗？\n国王一对一的战斗 笑饮死敌之血\n这样的事情多久才会发生一次呢？\n你想打，还是想说死我？\n想用魔法跟我打？\n你的荣耀心呢？\n我会复仇的\n不！\n你现在享受什么样的复仇呢，法莫？\n一个父亲的复仇 一个丈夫的\n还是一个国王的？\n你忘了一个母亲的复仇\n发生什么了？\n我一直想告诉你\n我爱你\n谢谢观赏\n你说对了，诺瑞科\n这个也是意料之中吗，法莫？\n- 放我们下去\n- 我想放就放\n滚出我们的森林，你们与这里无关\n我们恨你们的武器和你们的杀戮\n- 我们只是穿过这里\n- 那就穿过去\n别再回来\n我们迷路了\n人类，不仅没用，也很无助\n陛下\n我想要知道我父亲的消息\n- 你父亲为他的王去办件小事去了\n- 求你了\n发生什么了？\n我担心他有极大的危险\n国王的大法师有很多的责任\n他并不需要一个总是用绯闻\n来惹麻烦的女儿\n我父亲觉得把我锁在城堡里 能减轻我的担忧\n他错了，我感受到宫廷里的气氛 从来都没有这么困扰过\n黑暗威胁着\n我们的国家\n从魔法中生出的黑暗\n走！\n快\n你父亲在寻求原因...\n- 和解决方法\n- 陛下？\n陛下？\n- 你的父亲...\n- 陛下！\n盖伦！\n我觉得我要死了\n你跟国王吃得好吗？\n你干了什么？\n我以为你想要加速呢\n我想我可能对国王的吃的做了手脚\n你给我下毒了，你杀了我了\n别这么戏剧化\n没什么不能弥补的\n求你\n求你\n希望我们都记得谁在这里有着最大的权力\n好\n我觉得我救了你一命\n你应该为我做点什么呢？\n国王被下毒了\n能救吗？\n可能吧，如果还不迟的话\n性命保证\n私下谈一下\n法罗逃出了城堡\n还带走了两个军团\n那我们就知道谁给国王下毒了\n准备北上，和我们的新同盟会师\n我们联合的力量...\n将使我们享有世代的和平和安宁\n我能感到盖伦跟这个有关\n为什么泰利斯长官没有跟我们提到过这次行动？\n还有想要犯叛国罪的人吗？\n- 还剩下多少军队？\n- 三分之一\n嗯\n我看到克鲁格人在大量集结\n盖伦在召集军队\n- 大量的军队\n- 怎么会？\n一个人怎么可能会造成如此大的破坏呢？\n我亲生女儿背叛我，投进死敌的怀抱\n你这么恨我吗？\n我以为我爱他\n他混入了我们的血缘\n你把魔法的平衡偏向了他的一方\n因为你，这个王国可能灭亡\n对不起，对不起\n对不起，对不起\n你们为什么这么恨外来人？\n你们互相敌视，我们为什么不能敌视你们呢？\n我们躲藏在森林里，避开你们的战争和争端\n和你们愚蠢的劳动\n但是你们还是在这里 对准我们的树射箭\n伤害就是你们生活的一部分\n你们最危险的地方就是你们自己\n我最远只能送到这里\n好运\n我们有计划吗？\n你醒了吗？\n是，我醒了\n你会发现杀死一个国王没那么容易\n我们要进攻\n但是，陛下，你被下毒了\n- 可能你还没认清形势\n- 我认清了\n我也有我的头脑\n克鲁格人不会料到我们会攻击 所以我们就一定要攻击\n谁给我下的毒？\n我认识是你的侄子，法罗公爵\n噢\n更坏的是\n他逃离了城堡\n带走了第11和第12军团\n我们要进攻\n拂晓，集结你的军队\n我还能活多久？\n你的生命即将结束\n但是剩下的时间足够了\n你确定吗，诺瑞科?\n一点也不\n她在这里，诺瑞科\n- 我感觉得到\n- 我觉得你是对的\n嘿，慢点\n索拉娜？\n索拉娜！\n今天...\n我们为国王而战\n我们的国王骄傲地\n为艾柏而战\n陛下\n起立！\n神佑为荣耀和真理献身的人！\n我对你很好奇，法莫\n我能感觉到你很危险\n我看不透你\n我能看到大多数的人，就像 阅读活着的书一样\n但是你，我都看不透你紧锁的眉头\n为什么？\n你是谁？\n有些谜不值得去解开\n你在这里\n我以为是个噩梦\n法莫呢？\n扎夫呢？\n巴斯蒂安，扎夫在哪儿？\n跟我们父母一起吗？\n对\n他是跟他们一起，但是\n他没逃出来\n你被带走的那天，他就被杀了\n对不起\n我的宝贝\n他死得安逸吗？\n告诉我\n对\n他死得安逸\n法莫会来的\n他会找到你的\n你怎么知道？\n因为他必须这样\n因为他需要你\n再怎么说，你也是他真正需要的\n法莫别死\n你要做的事情还有很多\n你看上去不怎么好啊\n啊，这个\n来试试\n- 味道怎么样？\n- 这是什么？\n药。\n快起来\n回家真好\n我不是你的妓女\n他用你来毁灭...\n我知道诗人们说...\n他以玩弄感情为乐，你还不吸取教训？\n不是我帮你提升你的力量，你的预感吗？\n小姐？\n我是我父亲的累赘\n我阻碍了一切\n但是你父亲很爱你啊\n我小女孩般的愚蠢伤害了他\n自杀会伤他更重的\n可能你是对的\n我想要我的父亲以我为荣\n他已经是这样了\n他只是以这个想法为荣而已\n准备迎接你们的新盟军吧\n这是克鲁格人\n顺从，无情且不犹豫\n你看到的是一个强大的军队\n带走这个人\n把他放在王国的营帐里\n保证喂饱我的马\n等等\n这是你的紧急事务？\n这是法莫，石桥镇的\n对\n为什么一身泥土味的不尽忠的 石桥镇农民\n会让国王的大法师怎么挂念？\n因为国王对这个农民有特殊挂念\n我怎么不知道\n国王也不知道\n我觉得现在你们应该好好认识一下\n我们见过了\n上次，他拒绝了我\n去做他需要做的事情\n我以为陛下会对这个农民感兴趣\n从我们见过以后，他经历了许多事情\n大家都一样\n什么让他这么特殊？\n因为，陛下\n他是你儿子\n法莫的朋友诺瑞科\n是管理王后马匹的人\n上次在石桥我认出他来了\n在牛草地小道的屠杀后，这个诺瑞科\n在战场上找到一个3岁大的小孩\n牛草地小道只有一个小孩\n你觉得这个故事怎么样，法莫？\n一个老人以为他认出了一个30年没见的人\n这就是你们选国王的方式？\n你是国王的儿子，王位继承人\n我没父亲\n没父母\n我与这里无关\n你的意思是那个傲慢的混蛋是我的儿子？\n他30年来\n住在石桥的农场里？\n就是这样\n就是这样，你告诉我他已经死了！\n你说他们全死了！\n神对我开了\n什么样的玩笑啊\n有时候神知道什么对我们最好\n那是什么意思？\n你记得我们那个时候混乱的状况吗？\n到处是战争，到处是敌人\n如果这个孩子带回了艾柏城堡\n他能活多久？\n在石桥长大\n他很健壮\n离敌人很远\n敌人随时都可能\n除掉你的儿子和王储\n亲爱的朋友\n你最好是对的\n你最好心里有数\n国王需要所有有能力的士兵\n- 这不是我的问题\n- 他的王国被侵略了。\n你的王国被侵略了\n我不认识这个国王\n索拉娜是我的亲人\n诺瑞科和巴斯蒂安，他们是我的亲人\n你住在哪儿呢？\n嗯？\n如果王国落入盖伦之手...\n你又能为你妻子提供什么样的未来？\n想想吧\n法罗，你犯了叛国罪\n我们不讲条件\n任何听从你指挥的人\n也将被视为叛国着\n我们不饶恕叛国者\n先生们\n泰利斯将军毒害了国王\n还说我叛国\n你野心无边啊，泰利斯\n艾柏之国现在由我统治\n我们，也不讲和\n我的侄子，你永远也当不上王\n因为你没胆量\n现在没有，将来也没有\n第11和第12军团归您统管，陛下\n你们这些懦夫\n克鲁格人没弓箭手，也不会害怕\n现在他们比我们人多，但是我们是人\n我们忠于一个高贵的国家\n它们是野兽，嗜血的野兽，仅此而已\n那么，你来尽责吗？\n我决定了要一战\n有你们在我身边一起我很骄傲， 我也会留意你的\n中尉\n将军\n走吧\n弓箭手\n放！\n放！\n没事的\n将军，包抄侧面\n勇士们，出发\n它们像疯狗一样打仗\n对啊\n我们走\n预备\n放！\n放！\n这些克鲁格人人不用脑子打\n它们的脑子在这里\n你赢得一时，不算什么\n我们赢得一世！\n你杀了这些\n我就招出更多的\n克里斯英得,这是我们偿还罪孽的地方吗？\n不，诺瑞科\n这是我们偿还美德的地方\n罪孽比美德在这里要吃香\n国王\n别动，好叔叔\n放！\n卫兵！\n卫兵！\n快\n把国王抬离战场\n快\n永别了，好叔叔\n走\nTLF字幕组出品\nPresent By:\nShooter.\ncn\n字幕分割：\nLiChangShun 时间轴调校：\n天空的心\n片名：\n末日危城\n我就知道你会来\n我早告诉你了\n我意思是，我感觉到了\n你来之前我能感觉到\n你的力量在慢慢变强，玛丽安娜\n我们在一起的时间终于开始有用了\n等等\n你必须走了\n你希望如此吗？\n我们每次这样见面，我都觉得...\n无力。\n觉得被吸干了一样\n可能爱情就会让女人这样吧\n你知道什么是爱？\n我知道诗人们都愿以一死来交换\n- 你会以死交换吗？\n- 可能吧\n在诗里\n我父亲会怎么说？\n世上的事情你父亲不知道的很多\n让这个也变成其中之一吧\n渎神，这太疯狂了，盖伦 你太过分了\n神救救我们吧\n用力拉，扎夫\n用腿的力气\n它不想出来\n最大的都是最顽固的\n看吧，有价值的东西都不会轻易到手\n你没打中\n我不想杀了他们\n只要它们不吃庄稼\n猪来了，还是老价钱吧？\n冬天的玉米换这猪？\n老价钱，不变\n是个挺旱的一季吧\n- 更旱的我也见过\n- 国王在招兵\n兵的待遇都很好\n我有这块地，还不够吗？\n你老了后，你就会厌倦只是这么活着\n你不想挑战一下你的勇气吗？\n我意思是，这样的生活有什么勇气可言？\n我靠，法莫，说说话你会死吗？\n我的意思是，我们又不是动物。\n人就应该跟别人说话啊\n诺瑞科，如果我能把这些甘蓝说出来 我肯定会的\n雨一来，地就变成块\n那时候你都不能把它们说出来了\n这就是为什么我喜欢你爸，扎夫\n他总是知道怎么来扫兴\n- 带诺瑞科去我们放玉米的地方\n- 好\n给，扎夫，给你这头猪\n你留下来吃晚饭吧？\n嗯，既然你都开口了...\n诺瑞科，能看到你太好了 你应该常来\n嗯，我觉得法莫小时候已经看厌我了\n现在既然他成家了， 就应该稍微调整一下\n诺瑞科觉得父亲应该不种田，而去参军\n等等，我没这么说啊\n他说国王的战士都拿很多钱\n法莫，你没诚心想这个吧？\n你们是我的家人。\n我哪儿也不去\n- 你得到答案了，诺瑞科？\n- 我只是说说\n- 只是说说\n- 嗯，人人都有特长嘛\n只是说说看来是你的特长\n出卖朋友看来是你的\n- 我能来点鸡肉吗？\n- 别给他\n把鸡肉给我！\n说点好听的给我听\n告诉我你多爱我\n你知道的\n我只知道你告诉我的...\n你却什么都没告诉我\n看看这双手，为养活我们而开裂\n这双手比话语更说明问题\n告诉我有什么损失吗？\n你还想要什么呢？\n每个女人都想要的\n一点点激情\n- 一点点激情？\n- 嗯哼\n我想想我能怎么办\n- 该走了\n- 你为什么不跟我们一起去？\n我还有很多地要清理\n记住，当人从辛勤劳动中创造生活时\n勇气永不灭\n对了\n我讨厌睡觉时没有你\n小心点\n石桥镇而已，我们当然会很安全的\n为什么别人都叫父亲法莫？\n他没名字吗？\n你父亲相信人跟他所做的事情密切相联系\n他很小的时候，诺瑞科把他带到石桥镇\n那诺瑞科是他的父亲？\n整个镇子收养了他\n不同的时候有不同的家庭收养他\n但是诺瑞科总是关注着他\n他现在有个家了\n我真高兴是我们和他一起组成的这个家\n嗯，我也这么觉得\n将军\n报告给你的国王\n陛下，克鲁格人...\n野蛮的军队，克鲁格人...\n它们用剑打仗\n这太可笑了，就好像你在说持武器的狗一样\n它们像人一样打仗 它们把整个侦察队都杀了\n如果将军没命令我会来报告的话 我也死了\n这是某种魔法\n外婆！\n外婆！\n扎夫，是你吗？\n抓住你了\n终于！\n放你进烤箱\n我不喜欢烤箱\n烤箱又干又暖和\n你不想我们把你生吃了吧？\n你为什么要吃了我？\n今晚，我向你外公保证...\n要做他最喜欢的菜\n- 集市上卖得怎么样？\n- 不错\n当然，男人都想来占我便宜 因为我是女人\n我就让他们多付钱 因为我是女人\n我们还小的时候你总是当头\n- 总是当头\n- 不，我知道我要什么，就这样\n直到她遇到你父亲\n你父亲放荡不羁\n- 外公呢？\n- 在钟塔\n- 我们去看看？\n- 我们得小心点\n钟塔是为战时而建的\n你不想拉错绳子而引起场战争吧？\n什么耽搁了你这么久？\n哈！\n他们没那么容易被吓跑的\n这真是疯了\n克鲁格人是野兽 他们没有盔甲和武器的\n我要用你的马，诺瑞科\n- 你去哪儿？\n- 石桥镇\n- 索拉娜和扎夫在那儿\n- 我跟你一起\n法莫没来？\n没，我丈夫喜欢让我来做买卖 他好种地\n你为你丈夫做得很好\n他很爱你\n对，我相信他是很爱我的\n新郎新娘接吻时，鸣钟五次...\n给整个镇子他们结婚的消息\n走，现在就走，带扎夫回家\n带他走！\n你能保护他，父亲 保护他\n- 准备好了吗，我的女士？\n- 从来都是\n等等\n这么快就认输了？\n你进步神速啊，令人印象深刻\n如果艾柏能有更多像你这样的剑士\n让我加入你的军队，你就有了\n我不确定艾柏的军队是否准备接受女兵了\n而且，你父亲会怎么说？\n我父亲从不让我做我想做的\n泰利斯!\n准备好你的军队，准备出发\n克鲁格的散兵在抢掠我们的土地\n噢，太阳刺痛了我的皮肤\n你在胡说什么？\n你服从命令就行了\n我只听从国王的\n你应该...\n学习怎么尊敬别人\n敬意是赢得的\n错了，敬意是我天生的\n回镇子！\n所有人都是！\n- 索拉娜在哪？\n- 她在敲钟\n别担心，扎夫，我会找到她\n- 父亲！\n- 巴斯蒂安！\n拿着我的剑\n- 进去，堵住门\n- 快点\n- 谢谢你，父亲\n- 去吧\n我们在镇子里找\n大家快走！\n快点\n干得好\n有种的人？\n放开他们\n你今天杀了我一次了 但是我们又见面了\n爸爸！\n跑，儿子！\n看！\n它们撤了\n扎夫！\n- 它们撤到高地上去了！\n- 扎夫！\n别让它们跑了\n我还要给索拉娜做个标记\n没人看到她，没人知道\n我们没找到她，她可能跑了\n他说得对，法莫\n盖伦！\n你去哪儿了？\n我一直在找你\n我很忙\n- 很忙\n- 我们达成了协议的\n我让你进出我的城堡 我们就能合作\n我守着承诺\n我肯定最近这些消息都能表明 我有多么的忙\n对，你确实稍微搅和了一下\n搅和？\n告诉我，公爵\n你对一个叫法莫的人了解多少？\n石桥镇的镇民们\n艾柏的军队同情你们\n这样的惨剧会被复仇的\n克鲁格人来的时候，国王的军队呢？\n农民，不要忘了你在和谁说话\n在你的世界里，你不对国王鞠躬吗？\n在我的世界里，国王的军队是来保护国家的\n不是只是城堡\n被克鲁格带走的人怎么办？\n- 克鲁格抓了人质？\n- 安静！\n如果克鲁格人带走了人质...\n它们的目的就很不明确\n国王的军队召集任何一个 能打仗的人\n- 谁来？\n- 然后怎么样？\n国王有军队和城墙\n被克鲁格抓走的人就只有我们\n- 你敢违抗国王的意愿？\n- 我跟你走，法莫\n- 卫兵！\n- 让他们走\n这不是艾柏之道\n- 你违抗国王，冒很大的风险\n- 不比你冒的大\n- 我没有选择，她是我的妻子\n- 她是我的姐姐\n好，我们开始吧\n留下来，跟着艾柏的军队走吧\n你想过军队生活，不是吗？\n不。\n我不喜欢制服\n- 你有马吗？\n- 有匹母马\n老，但是很强壮\n老...\n但是仍然很强壮\n你挡我路了\n我们以前见过吧？\n说些好听的给我听\n告诉我你有多爱我\n你知道的\n- 我是梅里克，国王的大法师\n- 我听说过你\n孩子们关于魔法的故事\n你的国王需要你\n嗯，我的儿子也需要我\n但是我让他失望了 现在我的妻子需要我，如果她还活着\n你有没有想过，法莫\n在国家处于非常时期的时候...\n我们个人的爱和得失难道更重要吗？\n不，但是和我无关\n好好活着吧，法莫\n你的国王需要你\n远远超过他目前的所知道的\n你怎么知道这座桥的？\n小时候我在这些地方玩耍\n这就是我怎么浪费我的时间\n- 如果我们绕过这个峡谷，我们就浪费了一天\n- 你觉得呢？\n我们能过\n让我们先把马上的装备拿下来\n你什么意思？\n我们就这么放了它们？\n你担心我们会伤了它们感情？\n回去吧！\n走！\n来吧\n- 好，我要去了\n- 你是个勇敢的老头\n我只是不想你在我之前先 弄坏了绳子\n- 快点\n- 好，走吧，快！\n你更关心你的马\n我喜欢我的马 但是我不确定我喜欢不喜欢你\n嗯，等你了解我再说\n这的确节省了我们不少时间\n噢！\n- 陛下\n- 站起来，士兵\n多少人在守卫着？\n我在守卫着，陛下\n嗯，你在守卫着？\n法罗公爵，你非常，非常坏\n你让我胸痒痒的\n我要告诉你妈妈\n你们在干什么\n我的侄子在王座上玩耍\n你觉得配吗？\n你在国王和他的军队\n出去进行招兵活动的时候玩耍...\n而你唯一的工作\n就是保证城堡的安全\n而守卫城堡的人...\n等于零！\n陛下...\n去调查偏僻地区的事务\n你给我消失\n快，别让我推你\n拿开你的手 你都不配去吻我的袍子\n你不配弄脏你叔叔的王冠\n除非国王特别下令...\n你不能碰我\n皇家法律\n是个我最喜欢的\n玩具\n- 一切都在按计划进行\n- 我等不了了\n我受不了那个老山羊的控制\n实施那个\n你想快速解决？\n好！\n我们就来快速的\n好\n盖伦\n你一定要突然悄无声息的出现吗？\n我没有\n我是突然从某个地方出现的\n你不受邀请就进来我的房间 这样有些过了\n你以前的热情好客我现在都得不到了吗？\n你不能想来就来，想走就走\n然后突然消失\n我不是你的妓女\n你为什么这么想？\n你很清楚什么我必须这么安静地出现\n我不能在我爱人的门上重叩，对不对？\n你怎么能想来就来...\n你又被我父亲认为是国王的敌人？\n我有我的朋友，我有我的关系\n为什么我父亲这么恨你\n他是一个很谨慎的人\n问题！\n我不是来被责问的\n你父亲恨我是因为我不会\n对伟大的国王和大法师鞠躬作揖\n因为我可以从他那里得到我想要的\n甚至是他女儿的纯洁\n你离开我的房间\n离开我的生活\n你也在驱逐我吗？\n在我们完成了那么多事情之后？\n我没帮助你发现你的力量，你的预感吗？\n- 你只是教会了我小把戏和恶梦\n- 收声！\n帮帮我！\n陛下\n再次请求你接受我最深的歉意\n我错误理解了你的命令\n错误？\n- 那个是错误？\n- 对\n我可以坐吗，陛下？\n仆人！\n我知道，退下\n我知道我在几个场合都辜负了你的信任\n而且我可能让你和整个王国很失望\n但是我会改变\n我会在这个战争年代摆脱 年轻的愚蠢\n我会证明自己是个合格的王储\n吃吧\n我的侄子，你对适时的外交\n有独特的理解\n那就是点优点\n我能敬你吗？\n可以吧\n在早上喝酒并不是表达改正决心的\n最好方式\n没错\n对，没错\n国王万岁\n是\n克鲁格人攻击了南部的石桥镇\n对，然后这片山\n会迫使他们北上，绕过沼泽\n然后我们进攻\n那是基于如果克鲁格人按他们应该的习惯 而行动的话\n我不喜欢这里，法莫\n没人去塞奇威克森林\n森林在山脉之间\n我们会在板岩道和克鲁格人会面\n塞奇威克森林里不止有灌木和树\n你不能想穿就穿啊\n你不想在这里过夜的\n- 我们点火炬\n- 火炬会吸引东西的\n- 让他们来吧\n- 法莫！\n你知道人们怎么说的。\n塞奇威克森林里有东西\n人们说神保佑无辜者\n人们说很多事现在都对我们没用，诺瑞科\n快，我们还有很多路要走\n我看不到路\n- 本来就没路\n- 那我们怎么知道怎么走呢？\n等等\n-=THE LAST FANTASY=\n- 荣誉出品 本字幕仅供学习交流，严禁用于商业途径\n-=TLF字幕组=\n- 翻译：\nmortia xaon 校对：\nhaha168\n片名：\n末日危城\n我就知道你会来 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I knew you'd come.\n我早告诉你了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I told you I would.\nl\n- I felt it.\n你来之前我能感觉到 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I felt it before you came.\nMuriella.\n我们在一起的时间终于开始有用了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Our time together is paying off.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Wind Whistling]\n等等 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Stop.\n你必须走了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You have to leave.\n你希望如此吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Is that your wish?\nI feel-\n无力。\n觉得被吸干了一样 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Weak.\nI feel drained.\n可能爱情就会让女人这样吧 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Whispering] Perhaps that is what love does to a woman.\n你知道什么是爱？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}What do you know of love?\n我知道诗人们都愿以一死来交换 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I know that poets claim they would die for it.\n- 你会以死交换吗？\n- 可能吧 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Would you die for it?\n- Perhaps.\n在诗里 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- In a poem.\n- [Laughs]\n我父亲会怎么说？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Chuckles]\n- What would my father say?\n世上的事情你父亲不知道的很多 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}There are many things in this world your father doesn't know.\n让这个也变成其中之一吧 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Let this be one of them.\nGallian.\nYou go too far.\nScreaming]\n神救救我们吧 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Man] May the gods save us.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Indistinct Voices]\nZeph.\n用腿的力气 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Use your legs.\n它不想出来 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Zeph] It doesn't want to come out.\n最大的都是最顽固的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Grunts]\n- It's those big ones that are always the toughest.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Grunts]\n- [Chuckles]\n看吧，有价值的东西都不会轻易到手 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}See?\nThings worthwhile don't come easy.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Cawing]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Squawking]\n你没打中 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You missed.\n我不想杀了他们 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I don't want to kill them-\n只要它们不吃庄稼 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}As long as they don't eat the crops.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Pig Squealing]\n猪来了，还是老价钱吧？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Brought the hog.\nSame deal as always?\n冬天的玉米换这猪？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Winter's corn for the pig?\n老价钱，不变 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Same deal.\nDeal never changes.\nhasn't it?\n- 更旱的我也见过\n- 国王在招兵 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- I've seen rougher.\n- King's recruiting.\n兵的待遇都很好 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Soldiers get taken care of really well.\n我有这块地，还不够吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I have this land.\nIsn't that enough? 你不想挑战一下你的勇气吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Wouldn't you like to test your courage?\nwhere's the courage in just surviving?\nwould it kill you to just talk for a little while?\nwe're not animals.\nPeople actually do converse with one another.\nI would.\nthis ground turns to clay.\n那时候你都不能把它们说出来了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Not even you could talk 'em out of the ground then.\nZeph.\n他总是知道怎么来扫兴 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}He always knows how to set a mood.\n- 带诺瑞科去我们放玉米的地方\n- 好 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Show Norick where we stack his corn.\n- Okay.\nZeph.\nHave a pig.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Laughing]\n- [Squealing]\n你留下来吃晚饭吧？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Farmer] Guess you'll be staying for supper.\nsince you asked.\nit is so good to see you.\nYou should come by more often.\nI figure Farmer saw enough of me when he was growing up.\nmaybe he needs a little bit of a break.\n诺瑞科觉得父亲应该不种田，而去参军 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Norick thinks Father should quit farming and join the king's army.\n等等，我没这么说啊 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Gasps]\n- Now hold on a second.\nI didn't say that exactly.\n他说国王的战士都拿很多钱 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}He says the king's soldiers make a lot of money.\nare you?\n你们是我的家人。\n我哪儿也不去 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You're my family.\nI'm not going anywhere.\nNorick?\n- I was just talking.\neveryone's got a talent.\nWoman Laugh]\n出卖朋友看来是你的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Just ratting on his friends seems to be yours.\nplease?\n- Don't give it to him.\nhar.\n- [Zeph Laughs]\n说点好听的给我听 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Tell me something nice.\n告诉我你多爱我 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Tell me how you love me.\n你知道的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You know.\nSighs]\n我只知道你告诉我的...\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I only know what you tell me...\n你却什么都没告诉我 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}and you tell me nothing.\n看看这双手，为养活我们而开裂 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Look at these hands\n- Broken to feed us.\n这双手比话语更说明问题 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}These hands speak louder than words.\n告诉我有什么损失吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}What is the cost of telling me?\n你还想要什么呢？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}What more could you want?\n每个女人都想要的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}What every woman wants-\n一点点激情 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}A little passion.\n- 一点点激情？\n- 嗯哼 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- A little passion?\n- Mm\n-hmm.\nlet me see what I can do.\n- 该走了\n- 你为什么不跟我们一起去？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Woman] It's time to go.\n- [Zeph] Why can't you come with us?\n我还有很多地要清理 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Farmer] I have all those fields to clear.\n记住，当人从辛勤劳动中创造生活时 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Remember\n-When men build lives from honest toil-\n勇气永不灭 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Courage never fails.\n- [Laughs]\n对了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}That's right.\n我讨厌睡觉时没有你 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I hate sleeping without you.\n小心点 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Be safe.\n石桥镇而已，我们当然会很安全的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}It's Stonebridge.\nOf course we'll be safe.\n为什么别人都叫父亲法莫？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Zeph] Why do people call Father Farmer?\n他没名字吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Doesn't he have a name?\n你父亲相信人跟他所做的事情密切相联系 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Your father believes that people become what they do.\n他很小的时候，诺瑞科把他带到石桥镇 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Norick brought him to Stonebridge when he was just little.\n那诺瑞科是他的父亲？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}So Norick is his father?\n整个镇子收养了他 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}The whole town adopted him.\n不同的时候有不同的家庭收养他 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Different families took him at different times.\n但是诺瑞科总是关注着他 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}But Norick\n- He always kept a special eye out.\n他现在有个家了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I'm glad he has a family now.\n我真高兴是我们和他一起组成的这个家 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I'm glad it's us.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Mmm!\n嗯，我也这么觉得 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Mmm.\nSo am I.\n将军 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}General.\n报告给你的国王 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Report to your king.\nKrug-\n野蛮的军队，克鲁格人...\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Savage army.\nThe Krug-\n它们用剑打仗 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}They\n-They fight with swords.\n这太可笑了，就好像你在说持武器的狗一样 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}This is ridiculous.\nIt's as if you were talking about armed dogs.\n它们像人一样打仗 它们把整个侦察队都杀了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}They fight like men.\nThey killed off our entire scouting party.\nI should be dead as well.\n这是某种魔法 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}This is some sort of sorcery.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Chattering]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[No Audible Dialogue]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Low Rumble]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Rumbling Continues]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Rustling]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Rumbling]\n外婆！\n外婆！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Zeph] Grandma!\nGrandma!\nis that you?\n抓住你了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Laughs] I've got you.\n终于！\n放你进烤箱 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Finally!\nInto the oven with you.\n我不喜欢烤箱 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Laughs]\n- I hate the oven.\nit's warm.\ndo you?\n你为什么要吃了我？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Why do you have to eat me?\nI promised your grandfather...\n要做他最喜欢的菜 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}we're going to eat a dish he really loves.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Rumbling Continues]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Muttering]\nhow were sales at the market?\n- It was good.\nthe men tried to take advantage of me because I'm a woman...\n我就让他们多付钱 因为我是女人 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}so I make them pay more\n- because I'm a woman.\n我们还小的时候你总是当头 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Laughing]\n- When we were kids you were always in charge.\nthat's all.\n直到她遇到你父亲 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Until she met your father.\n你父亲放荡不羁 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Your father does not take orders very well from anybody.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunting]\n- 外公呢？\n- 在钟塔 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Where's Grandfather?\n- The bell tower.\n- 我们去看看？\n- 我们得小心点 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Shall we go?\n- We have to be careful.\n钟塔是为战时而建的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}The bell tower was made for times of war.\ndo you?\nSnarling]\nGroans]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Norick] Hah!\n什么耽搁了你这么久？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}What took you so long?\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunting]\n哈！\n他们没那么容易被吓跑的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Hah!\nThey don't scare easy.\nGroaning]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Aaah!\n- Aaah!\n这真是疯了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Norick] This is crazy.\n克鲁格人是野兽 他们没有盔甲和武器的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Krug are beasts.\nThey don't have armor and weapons.\nNorick.\n- 你去哪儿？\n- 石桥镇 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Where are you going?\n- Stonebridge.\n- 索拉娜和扎夫在那儿\n- 我跟你一起 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Solana and Zeph are there.\n- I'm coming with you.\n法莫没来？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Farmer didn't come?\n没，我丈夫喜欢让我来做买卖 他好种地 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}No.\nMy husband likes to leave the trade to me so that he can farm.\n你为你丈夫做得很好 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You did well for a husband.\n他很爱你 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}He loves you very much.\n对，我相信他是很爱我的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Yes.\nYes.\nI believe he does.\nring the bell five times...\n给整个镇子他们结婚的消息 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}signaling their marriage for the village to hear.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunting]\n走，现在就走，带扎夫回家 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Go.\nGo now.\nTake Zeph home now.\nFather.\nProtect him.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Bell Clanging]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Laughs]\nmy lady?\n- Always ready.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunting]\n等等 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Hold.\n这么快就认输了？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Giving up so soon?\n你进步神速啊，令人印象深刻 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Your progress is truly remarkable.\n如果艾柏能有更多像你这样的剑士 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}If only Ehb had more soldiers of your caliber.\n让我加入你的军队，你就有了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Let mejoin your army and you shall.\n- [Grunts]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Both Laughing]\n我不确定艾柏的军队是否准备接受女兵了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I am not quite sure that the armies of Ehb are ready for women warriors.\nwhat would your father say?\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunts]\n我父亲从不让我做我想做的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}My father never lets me do anything I want.\n泰利斯!\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Man] Tarish!\n准备好你的军队，准备出发 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Prepare your troops to ride.\n克鲁格的散兵在抢掠我们的土地 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Hordes of Krug are ransacking the land.\nthe sun is blistering my skin.\n你在胡说什么？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}What is this nonsense you speak?\n你服从命令就行了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Just do as you're commanded.\n我只听从国王的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I listen only to the king.\n你应该...\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}It might behoove you...\n学习怎么尊敬别人 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}to learn a little respect.\n敬意是赢得的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Respect is earned.\n错了，敬意是我天生的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You are mistaken.\nRespect is my birthright!\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Clamoring]\nScreaming]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Screams]\n- [Snarls]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Clanging Continues]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Snarling]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Gasps]\n- [Snarls]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunting]\neveryone!\n- 索拉娜在哪？\n- 她在敲钟 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Where's Solana?\n- She's\n-She's sounding the bell.\nZeph.\nI'll find her.\n- 父亲！\n- 巴斯蒂安！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Father!\n- Bastian!\n拿着我的剑 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Take my sword.\n- 进去，堵住门\n- 快点 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Norick] Get inside.\nAnd bolt the door.\n- [Mother] Come quickly.\nFather.\n- Go.\nScreaming Continue]\nSnarling]\n我们在镇子里找 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Norick] We'll look for her in the village.\nmen!\nCome on.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groans]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Hissing]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Scream Echoing]\n干得好 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Laughing] Well done.\nhuh?\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Screams]\n- [Krugs Snarling]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Woman Screams]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Horse Snorting]\n放开他们 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Snarling]\n- Let 'em go.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Echoing Laughter]\nhere we are again.\n爸爸！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Father!\n- [Groans]\nSon!\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Screaming]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Horse Whinnies]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groans]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Panting]\n看！\n它们撤了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Look!\nThey're retreating.\n扎夫！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Zeph!\n- 它们撤到高地上去了！\n- 扎夫！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Man] They're going to higher ground!\n- Zeph!\n别让它们跑了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Man #2] Don't let 'em get away!\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Gulls Crying]\n我还要给索拉娜做个标记 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I need a fourth marker for Solana.\n没人看到她，没人知道 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Nobody saw Solana.\nNobody knows.\n我们没找到她，她可能跑了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}We didn't find her body.\nShe could have escaped.\nFarmer.\n盖伦！\n你去哪儿了？\n我一直在找你 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Gallian!\nWhere have you been?\nI've been looking for you.\n我很忙 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I've been busy.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Door Closes]\n- 很忙\n- 我们达成了协议的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Very busy.\n- We had an agreement.\n我让你进出我的城堡 我们就能合作 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I gave you access to my castle so that we might work together.\n我守着承诺 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}And I'm keeping my end.\n我肯定最近这些消息都能表明 我有多么的忙 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I'm sure recent events demonstrate how very busy I've been.\nindeed.\nYou have managed to stir things up a bit.\n搅和？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Stir things up?\nDuke.\n你对一个叫法莫的人了解多少？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}What do you know of a man they call Farmer?\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Chattering]\n石桥镇的镇民们 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[King] People of Stonebridge.\n艾柏的军队同情你们 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}The armies of Ehb sympathize with you.\n这样的惨剧会被复仇的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}This great tragedy will be avenged.\n克鲁格人来的时候，国王的军队呢？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Where were the king's army when the Krug came killing?\ndo not forget to whom you speak.\ndon't you bow before your king?\nthe king's army's expected to protect the kingdom.\n不是只是城堡 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Not just the castle.\n- [Woman Weeping]\n被克鲁格带走的人怎么办？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}What of those taken by the Krug?\n- 克鲁格抓了人质？\n- 安静！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Krug taking prisoners?\n- Silence!\n如果克鲁格人带走了人质...\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}If these Krug have taken prisoners...\n它们的目的就很不明确 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}it is not yet clear what their purpose might be.\n国王的军队召集任何一个 能打仗的人 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Man] The king's army will require every man capable of combat.\n- 谁来？\n- 然后怎么样？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Tarish] Who is with us?\n- [Woman] What will happen?\n国王有军队和城墙 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}The king has his armies and his walls.\n被克鲁格抓走的人就只有我们 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Those taken by the Krug only have us.\nFarmer.\n- 卫兵！\n- 让他们走 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Guards!\n- [King] Let them go.\n这不是艾柏之道 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}That is not the way of Ehb.\n- 你违抗国王，冒很大的风险\n- 不比你冒的大 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Farmer] You took a risk turning your back on the king.\n- No more risk than you.\n- 我没有选择，她是我的妻子\n- 她是我的姐姐 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- I have no choice.\nShe's my wife.\n- She's my sister.\nlet's get to it.\n留下来，跟着艾柏的军队走吧 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Stay here.\nGo with the armies to Ehb.\ndidn't you?\n不。\n我不喜欢制服 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Nah.\nI didn't like the uniforms.\n- 你有马吗？\n- 有匹母马 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Do you have a horse?\n- A mare.\nbut still strong.\n老...\n但是仍然很强壮 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Old...\nbut still strong.\n你挡我路了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You're in my way.\nhave we not?\n说些好听的给我听 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Solana's Voice] Tell me something nice.\n告诉我你有多爱我 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Tell me how you love me.\n你知道的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Farmer's Voice] You know.\nthe king's magus.\n- I've heard of you.\n孩子们关于魔法的故事 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Children's stories about magic.\n你的国王需要你 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Your king needs you.\nmy son needed me.\nif she lives.\nFarmer...\n在国家处于非常时期的时候...\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}that there may be events of greater importance...\n我们个人的爱和得失难道更重要吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}than the loves and losses of our particular lives?\n不，但是和我无关 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}No.\nDoesn't occur to me.\nFarmer.\n你的国王需要你 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Your king needs you.\n远远超过他目前的所知道的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Far more than he understands.\n你怎么知道这座桥的？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Norick] How did you know about this bridge?\n小时候我在这些地方玩耍 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Farmer] As a child I roamed around these parts.\n这就是我怎么浪费我的时间 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}It's how I spent my days.\n- 如果我们绕过这个峡谷，我们就浪费了一天\n- 你觉得呢？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- If we wind through the gorge we'll lose a day.\n- What are you thinking?\n我们能过 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}We can cross it.\n让我们先把马上的装备拿下来 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Let's take the gear off the horses.\njust like that?\n你担心我们会伤了它们感情？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Are you afraid we're gonna hurt their feelings?\n回去吧！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Go home!\nHah!\n- Hah!\n走！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Hah!\n- Get out of here.\n来吧 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Let's do it.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunts]\nI'll go.\n- You're a brave old guy.\n我只是不想你在我之前先 弄坏了绳子 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I just don't want you weakening the rope before I've had my turn.\nlet's go.\nCome on.\n你更关心你的马 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You were more concerned about your horse.\n我喜欢我的马 但是我不确定我喜欢不喜欢你 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}My horse I like.\nIt's you I'm not so sure about.\nwait till you get to know me better.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Yells]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Both Yelling]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Stops Yelling]\nYelling]\n这的确节省了我们不少时间 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}That saved us a lot of time.\n噢！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Oh!\nsoldier.\n多少人在守卫着？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[King] How many men on guard here?\nmy king.\n嗯，你在守卫着？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Hmm.\nYou are on guard?\nvery naughty.\n- [Giggling]\n你让我胸痒痒的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You make my bosoms tickle.\n我要告诉你妈妈 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I'm gonna tell your mommy.\n你们在干什么 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Where are you going?\n我的侄子在王座上玩耍 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[King] My nephew amuses himself on the king's throne.\n你觉得配吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Do you feel it suits you?\n你在国王和他的军队 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You play while your king and his legions...\n出去进行招兵活动的时候玩耍...\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}are off on a military campaign...\n而你唯一的工作 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}and your only job...\n就是保证城堡的安全 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}is the safety of this castle-\n而守卫城堡的人...\n等于零！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}which is guarded by...\nno one!\n陛下...\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Your Majesty...\n去调查偏僻地区的事务 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}was off investigating outlandish claims.\nAah!\n你给我消失 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Get him out of my sight.\n- No!\nbefore I make you.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Door Slams]\n拿开你的手 你都不配去吻我的袍子 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Unhand me.\nYou are not fit to kiss my gown.\n你不配弄脏你叔叔的王冠 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}And you\n-You are not fit to tarnish your uncle's crown.\nah.\n除非国王特别下令...\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Unless the king specifically orders it...\n你不能碰我 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}you cannot touch me.\n皇家法律 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Imperial law...\n是个我最喜欢的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}is a toy...\n玩具 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I shall never tire of.\n- 一切都在按计划进行\n- 我等不了了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Things are progressing according to plan.\n- I cannot wait any longer!\n我受不了那个老山羊的控制 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I cannot stand the suffering rule of that senile goat.\n实施那个 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Make it happen.\n你想快速解决？\n好！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You wish to accelerate things?\nFine!\n我们就来快速的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}We shall accelerate.\n好 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Good.\n盖伦 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Gallian.\n你一定要突然悄无声息的出现吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Must you always appear suddenly from nowhere?\n我没有 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I don't.\n我是突然从某个地方出现的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I appear so suddenly from somewhere.\n你不受邀请就进来我的房间 这样有些过了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You assume too much entering my chambers unbidden.\n你以前的热情好客我现在都得不到了吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I'm not welcome to the hospitality you've offered in the past?\n你不能想来就来，想走就走 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You're not welcome to come and go as you please...\n然后突然消失 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}and then vanish without a word.\n我不是你的妓女 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I'm not your harlot.\n你为什么这么想？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}How could you think such a thing?\n你很清楚什么我必须这么安静地出现 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You know very well why I must appear so quietly.\ncan I?\n你怎么能想来就来...\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}How do you come and go as you please...\n你又被我父亲认为是国王的敌人？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}when you're considered by my father to be an enemy of the king?\n我有我的朋友，我有我的关系 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I have friends.\nI wield influence.\n为什么我父亲这么恨你 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Why does my father despise you so?\n他是一个很谨慎的人 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}He's not known for his hasty opinions.\n问题！\n我不是来被责问的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Questions!\nI did not come here to be interrogated.\n你父亲恨我是因为我不会 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Your father hates me because I will not bow and scrape...\n对伟大的国王和大法师鞠躬作揖 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}before the almighty king and his magus.\n因为我可以从他那里得到我想要的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Because I will take from him what I please-\n甚至是他女儿的纯洁 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Even his daughter's virtue.\n你离开我的房间 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Whispering] Begone from my chambers.\n离开我的生活 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Begone from my life.\n- [Chuckles]\n你也在驱逐我吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Are you banishing me as well?\n在我们完成了那么多事情之后？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}And after all the work we've done.\nyour vision?\n- 你只是教会了我小把戏和恶梦\n- 收声！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- You've introduced me to parlor tricks and nightmares.\n- Be still.\nGrunting]\n帮帮我！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Woman] Help!\nPlease.\nPlease.\n陛下 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}My liege.\n再次请求你接受我最深的歉意 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Again allow me to offer my deepest apologies...\n我错误理解了你的命令 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}for mistaking your orders.\n错误？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}A mistake?\n- 那个是错误？\n- 对 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Is that what it was?\n- Yes.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Hmm.\nYour Majesty?\n仆人！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Boy!\n我知道，退下 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I know\n- Go.\n我知道我在几个场合都辜负了你的信任 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I know I have failed your trust on several occasions...\n而且我可能让你和整个王国很失望 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}and perhaps I may be a disappointment to you...\nbut I will change.\n我会在这个战争年代摆脱 年轻的愚蠢 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I will shed this youthful folly in this time of great battle...\n我会证明自己是个合格的王储 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}and I will prove myself a worthy heir.\n吃吧 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Eat.\nmy nephew...\n有独特的理解 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}for well\n-timed diplomacy.\n那就是点优点 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I guess that's something.\n我能敬你吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}May I offer a toast?\n可以吧 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Possibly.\n在早上喝酒并不是表达改正决心的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Drinking wine in the morning is not a good way...\n最好方式 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}to show...\nreform.\n没错 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Indeed.\nindeed.\n国王万岁 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Long live the king.\n是 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Chuckles] Yes.\nin the south.\nand this harsh terrain...\naround the marsh.\n然后我们进攻 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Then we should attack.\nif the Krug behave the way they're supposed to behave.\nFarmer.\n没人去塞奇威克森林 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Nobody goes into Sedgwick Forest.\n森林在山脉之间 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Farmer] The forest passes between the mountains.\n我们会在板岩道和克鲁格人会面 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}We'll come out at Slate Pass as the Krugs arrive.\n塞奇威克森林里不止有灌木和树 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}There's more than brush and trees in Sedgwick Forest.\n你不能想穿就穿啊 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You don't just cut through it when you please.\n你不想在这里过夜的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You don't wanna be stuck here at night.\n- 我们点火炬\n- 火炬会吸引东西的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- We'll light torches.\n- Torches attract eyes.\n- 让他们来吧\n- 法莫！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Let 'em look.\n- Farmer!\n你知道人们怎么说的。\n塞奇威克森林里有东西 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You know what people say.\nThere are...\nthings in Sedgwick Forest.\n人们说神保佑无辜者 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}People say God watches over the innocent.\nNorick.\n快，我们还有很多路要走 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Come on.\nWe've got a lot of ground to cover.\n我看不到路 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Norick] I don't see any path.\n- 本来就没路\n- 那我们怎么知道怎么走呢？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- There is no path.\n- So how do we know where we're going?\n等等 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Whispering] Wait.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Whoa!\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Oh!\nNorick.\nFarmer?\n- 放我们下去\n- 我想放就放 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Let us down.\n- When I'm ready.\n滚出我们的森林，你们与这里无关 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Get out of our forest.\nYou have no business here.\n我们恨你们的武器和你们的杀戮 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}We hate your weapons and your killing.\nthat's all.\n- Then pass through...\n别再回来 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}and never come back.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Both Yelling]\nuh\n-We're lost.\nbut helpless as well.\n陛下 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Your Majesty.\n我想要知道我父亲的消息 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I beg of you news of my father.\n- 你父亲为他的王去办件小事去了\n- 求你了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Your father has gone on an errand for his king.\n- Please-\n发生什么了？\n我担心他有极大的危险 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}What's happening?\nI worry that he's in grave danger.\n国王的大法师有很多的责任 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}The king's magus has many responsibilities.\n他并不需要一个总是用绯闻 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}What he does not need is a daughter...\n来惹麻烦的女儿 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}who's troubling herself with the affairs of men.\n我父亲觉得把我锁在城堡里 能减轻我的担忧 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}My father thinks that keeping me locked in this castle will ease my mind.\n他错了，我感受到宫廷里的气氛 从来都没有这么困扰过 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}He's wrong.\nI know the mood of this court.\nIt's never been more troubled.\n黑暗威胁着 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Darkness threatens...\n我们的国家 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}our empire.\n从魔法中生出的黑暗 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Darkness that's spawned by magic.\n走！\n快 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Come on!\nHey.\n你父亲在寻求原因...\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Your father seeks reason...\n- 和解决方法\n- 陛下？\n陛下？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- and remedy.\n- Your Majesty?\nYour Majesty?\n- 你的父亲...\n- 陛下！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Your father\n-\n- Your Majesty!\n盖伦！\n我觉得我要死了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Gallian!\nI feel like I'm dying.\n你跟国王吃得好吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Did you dine well with the king?\n你干了什么？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- What have you done?\n- [Chuckling]\n我以为你想要加速呢 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I thought you were in a hurry to accelerate things.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groans]\n我想我可能对国王的吃的做了手脚 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I suppose I may have tampered with the king's food.\n你给我下毒了，你杀了我了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You've poisoned me.\nYou've killed me.\n别这么戏剧化 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Don't be so melodramatic.\n- [Groans]\n没什么不能弥补的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}It's nothing that can't be fixed.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groaning]\n求你 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Please.\n求你 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Please!\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Chuckles]\n希望我们都记得谁在这里有着最大的权力 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Let us hope you remember who has the real power here.\n好 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Yes.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Panting]\n我觉得我救了你一命 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I'd say I've saved your life.\n你应该为我做点什么呢？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Now what shall you do for me?\n国王被下毒了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}The king has been poisoned.\n能救吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Can he be saved?\nif it's not too late.\n性命保证 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}On my soul.\n私下谈一下 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}A word in private.\n法罗逃出了城堡 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Fallow has fled the castle...\n还带走了两个军团 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}and he's taken two full legions with him.\nthat tells us who poisoned the king.\nwhere we shall meet our new allies.\n我们联合的力量...\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}The strength of our combined armies...\n将使我们享有世代的和平和安宁 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}shall allow for generations of peace and tranquillity.\n我能感到盖伦跟这个有关 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I detect the hand of Gallian in this.\n为什么泰利斯长官没有跟我们提到过这次行动？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Why has Commander Tarish not briefed us for this mission?\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groans]\n还有想要犯叛国罪的人吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Anyone else care to commit treason?\n- 还剩下多少军队？\n- 三分之一 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- How much of the army remains?\n- A third.\n嗯 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Hmm.\nI have seen the Krug massing.\n盖伦在召集军队 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Gallian is raising armies-\n- 大量的军队\n- 怎么会？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- vast armies.\n- How?\n一个人怎么可能会造成如此大的破坏呢？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}How is that possible\n-That a single man can cause so much devastation?\n我亲生女儿背叛我，投进死敌的怀抱 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}My own daughter betraying me to my sworn enemy.\n你这么恨我吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Do you hate me that much?\n- [Moans]\n我以为我爱他 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I thought that I loved him.\n他混入了我们的血缘 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}He has tapped into our bloodline.\n你把魔法的平衡偏向了他的一方 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You have tilted the balance of magic in his favor.\nthe kingdom may be lost.\n对不起，对不起 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I'm sorry.\nI'm sorry.\n对不起，对不起 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Weeping] I'm sorry.\nI'm so sorry.\n你们为什么这么恨外来人？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Norick] Why do you hate outsiders?\n你们互相敌视，我们为什么不能敌视你们呢？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You hate each other.\nWhy shouldn't we hate you too?\n我们躲藏在森林里，避开你们的战争和争端 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}We stay in the forest to avoid your wars and your contests...\n和你们愚蠢的劳动 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}and your mindless enterprise.\nshooting your arrows into our trees.\n伤害就是你们生活的一部分 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Harm is but a way oflife for your people.\n你们最危险的地方就是你们自己 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}The fact that you don't realize it is what makes you so dangerous.\n我最远只能送到这里 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Woman] This is as far as I will take you.\n好运 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Good luck.\nGrunting]\n我们有计划吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Norick] Do we have a plan?\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Bastian Groans]\nGroaning]\n你醒了吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Are you awake?\nI'm awake.\n你会发现杀死一个国王没那么容易 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You'll find it's not so easy to kill a king.\n我们要进攻 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}We will attack.\nyou have been poisoned.\nCommander.\n我也有我的头脑 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}And I have my wits.\nso that's exactly what we will do.\n谁给我下的毒？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Who poisoned me?\nDuke Fallow.\n噢 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Oh.\n更坏的是 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Sighs]\n- And there's worse.\n他逃离了城堡 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}He has abandoned the castle...\n带走了第11和第12军团 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}taken the guard and the 11 th and 12th legions.\n我们要进攻 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}We will attack.\n拂晓，集结你的军队 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}First light.\nSummon your troops.\n我还能活多久？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}How much time do I have?\n你的生命即将结束 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Your life is coming to a close...\n但是剩下的时间足够了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}but there is time enough.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Thunder Rumbling]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Thunderclap]\nNorick?\n一点也不 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Not at all.\nIndistinct]\n- Shh!\nNorick.\n- 我感觉得到\n- 我觉得你是对的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- I can feel it.\n- I think you're right.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunting]\nhey!\nEasy.\n索拉娜？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Solana?\n索拉娜！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Solana!\n[Grunts]\n今天...\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Today...\n我们为国王而战 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}we ride for our king.\n我们的国王骄傲地 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}And our king proudly fights...\n为艾柏而战 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- in the name of Ehb!\n- [Cheering]\n陛下 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Your Majesty.\n起立！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Ride!\n神佑为荣耀和真理献身的人！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}God blesses those who die for honor and truth!\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Cheering]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groans]\nFarmer.\n我能感觉到你很危险 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I sense danger in you.\n我看不透你 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I can't read you.\nlike reading scrolls of flesh.\nI can't see past your scowl.\n为什么？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Why is that?\n你是谁？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Echoing] Who are you?\n有些谜不值得去解开 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Some riddles aren't worth solving.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunts]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Panting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Moans]\n你在这里 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You are here.\n我以为是个噩梦 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I thought it a nightmare.\n法莫呢？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Where is Farmer?\n扎夫呢？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Where is Zeph?\nwhere is Zeph?\nIs he with our parents?\n对 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Yes.\nbut...\n他没逃出来 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}he didn't make it.\n你被带走的那天，他就被杀了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}He...\nwas killed with them the day you were taken.\n对不起 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I'm sorry.\n我的宝贝 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Sobbing] My baby.\n他死得安逸吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Did he die quickly?\n告诉我 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Tell me.\n对 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Yes.\n他死得安逸 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}He died quickly.\n法莫会来的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Farmer will come.\n他会找到你的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}He'll find you.\n你怎么知道？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Solana] How do you know?\n因为他必须这样 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Norick] Because he must.\n因为他需要你 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Because he needs you.\nyou're all he really needs.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groaning]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Hoofbeats]\nFarmer.\n你要做的事情还有很多 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Much for you to do.\nare you?\n啊，这个 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunts] Ah.\nThere.\n来试试 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Try a bit of this.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Gagging]\n- 味道怎么样？\n- 这是什么？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- What's it like?\n- What is it?\n药。\n快起来 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Laughing] That's medicine.\nCome on.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Woman Moans]\nIndistinct]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Woman] No!\n- [Man Groans]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Gallian Chuckling]\n回家真好 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}It's good to be home.\n我不是你的妓女 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Muriella's Voice] I am not your harlot.\n他用你来毁灭...\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Merick's Voice] He has used you to destroy-\n我知道诗人们说...\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Gallian's Voice] I know that poets claim-\n他以玩弄感情为乐，你还不吸取教训？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Merick] He bends emotion for sport.\nHave you learned nothing?\nyour vision?\n小姐？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}My lady?\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Weeping]\n我是我父亲的累赘 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I am my father's undoing.\n我阻碍了一切 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I've jeopardized everything.\n但是你父亲很爱你啊 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}But your father has nothing but love for you.\n我小女孩般的愚蠢伤害了他 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}My girlish stupidity has damaged him.\n自杀会伤他更重的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Taking your life would damage him further.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Exhales]\n可能你是对的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Perhaps you're right.\n我想要我的父亲以我为荣 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I would like my father to be proud of me.\n他已经是这样了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}He already is.\n他只是以这个想法为荣而已 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}He's proud of an idea of me.\n准备迎接你们的新盟军吧 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Fallow] Prepare to meet your new allies.\n这是克鲁格人 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}These are Krug.\nrelentless and unquestioning.\n你看到的是一个强大的军队 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}What you see before you is a powerful army.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Horse Whinnies]\n带走这个人 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Merick] Take this man.\n把他放在王国的营帐里 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Put him in the king's tent.\n保证喂饱我的马 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}See that my horse is well fed.\n等等 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Hold.\n这是你的紧急事务？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}So was this your urgent errand?\n这是法莫，石桥镇的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}This is the farmer...\nfrom Stonebridge.\n对 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- It is.\n- [Exhales]\n为什么一身泥土味的不尽忠的 石桥镇农民 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Now why does a disloyal dirt\n-lover from Stonebridge...\n会让国王的大法师怎么挂念？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}command such careful attention from the king's magus?\n因为国王对这个农民有特殊挂念 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Because the king has a special interest in this...\ndirt\n-lover.\n我怎么不知道 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I know nothing of this interest.\n国王也不知道 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Neither does the king.\n我觉得现在你们应该好好认识一下 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I thought it was about time that you two were properly introduced.\n我们见过了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}We've met.\nhe turned his back on me.\n去做他需要做的事情 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Turned to what needed doing.\n我以为陛下会对这个农民感兴趣 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I thought Your Majesty would be interested in this farmer.\n从我们见过以后，他经历了许多事情 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}He's been through a great deal since we met him in Stonebridge.\n大家都一样 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}So has everyone else.\n什么让他这么特殊？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}What makes him so special?\nYour Majesty...\n他是你儿子 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}he is your son.\n法莫的朋友诺瑞科 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Merick] Farmer has a friend\n- Norick.\n是管理王后马匹的人 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Norick tended the queen's horses.\n上次在石桥我认出他来了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I recognized him when we were in Stonebridge.\nthis Norick...\n在战场上找到一个3岁大的小孩 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}found a boy about three years of age wandering in the battlefield.\n牛草地小道只有一个小孩 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}There was only one boy at Oxley Pass.\nFarmer?\n一个老人以为他认出了一个30年没见的人 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}One old man thinks he recognizes another from 30 years ago.\n这就是你们选国王的方式？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}That's how you determine who's king?\nand heir to the throne.\n我没父亲 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I have no father-\n没父母 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}No parents.\n我与这里无关 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I have no business here.\n你的意思是那个傲慢的混蛋是我的儿子？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Are you telling me that that arrogant bastard is my son?\n他30年来 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}He spent the last 30 years...\n住在石桥的农场里？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}living over a Stonebridge farm?\n就是这样 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}It would appear so.\n就是这样，你告诉我他已经死了！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}It would appear so.\nYou told me he was dead!\n你说他们全死了！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You said they were all dead!\n神对我开了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}What kind of joke...\n什么样的玩笑啊 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}do the gods play on me?\n有时候神知道什么对我们最好 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Sometimes the gods know what is best for us.\n那是什么意思？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}What the hell does that mean?\n你记得我们那个时候混乱的状况吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You remember the chaos we were in?\nHmm?\n到处是战争，到处是敌人 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}War everywhere.\nSurrounded by enemies.\n如果这个孩子带回了艾柏城堡 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}If that child had been taken back to Castle Ehb...\n他能活多久？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}how long would he have survived?\n在石桥长大 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Growing up in Stonebridge...\n他很健壮 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}he grew up strong...\n离敌人很远 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}and far away from the enemies...\n敌人随时都可能 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}who would have jumped at any opportunity...\n除掉你的儿子和王储 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}to rid you of your son and heir.\n亲爱的朋友 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Dear friend...\n你最好是对的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}you better be right about him.\n你最好心里有数 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You better be sure.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Chattering]\n国王需要所有有能力的士兵 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}The king needs every able man he can get for this battle.\n- 这不是我的问题\n- 他的王国被侵略了。\n你的王国被侵略了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- That's not my problem.\n- His kingdom is threatened.\nYour kingdom is threatened.\n我不认识这个国王 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I don't know this king.\n索拉娜是我的亲人 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Solana's my family.\n诺瑞科和巴斯蒂安，他们是我的亲人 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Norick and Bastian.\nThey are my family.\n你住在哪儿呢？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}And where will you live?\n嗯？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Hmm?\n如果王国落入盖伦之手...\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}When the kingdom falls to Gallian...\n你又能为你妻子提供什么样的未来？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}what future will you be able to offer your wife?\n想想吧 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Think about it.\nyou have committed treason.\n我们不讲条件 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}We offer no quarter here.\n任何听从你指挥的人 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}And anyone who follows under your command...\n也将被视为叛国着 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}will likewise be considered as a defector.\n我们不饶恕叛国者 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}We will spare no traitor.\n先生们 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Fallow] Gentlemen...\n泰利斯将军毒害了国王 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Commander Tarish has poisoned the king...\n还说我叛国 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}and accuses me of treason.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Hah!\nTarish.\n艾柏之国现在由我统治 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}The Kingdom of Ehb is now subject to my rule.\noffer no quarters.\nmy nephew...\n因为你没胆量 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}because you have no valor-\nnot ever.\nYour Majesty.\n你们这些懦夫 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Fallow] You coward!\nbut they also have no fear.\nbut we are men...\n我们忠于一个高贵的国家 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- and we serve a noble kingdom.\n- [Troops Cheer]\nwith bloodlust.\nNothing more.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Cheering]\nhave you come to do your duty?\n我决定了要一战 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I've decided to fight.\n有你们在我身边一起我很骄傲， 我也会留意你的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I'll be proud to have you fight by my side so that I might keep an eye on you.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Clicks Tongue]\n中尉 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Mid guard.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Horse Whinnies]\n将军 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Jingles]\n- Commander.\n走吧 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Lead out.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[All Grunting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[All Grunt]\n弓箭手 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Archers.\n放！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Fire!\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[All Groaning]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[All Cheering]\n放！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Fire!\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Rumbling]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Shouts]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Horse Whinnies]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunts]\n没事的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Horse Blusters]\n- It's okay.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Horse Blusters]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Hoofbeats Approaching]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Hyah.\n- [Whinnies]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Horse Whinnies]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[All Shouting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groans]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groans]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[All Grunting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunts]\ntake their flank.\nmove out.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Snarling]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Snarls]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groans]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groans]\n它们像疯狗一样打仗 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}They fight like dogs.\nsire.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[All Shouting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groans]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[All Shouting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groans]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groans]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[All Grunting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Growls]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Whoa!\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Screaming]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Laughing]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Screaming]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Horse Whinnies]\n- [Screaming]\n我们走 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Let's go.\n预备 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Ready.\n放！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Fire!\n放！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Fire!\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[All Groaning]\n这些克鲁格人人不用脑子打 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}These Krug fight mindlessly.\n它们的脑子在这里 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Their minds belong to those.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Shouts]\nit means nothing.\n我们赢得一世！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}We will win more than a day!\n你杀了这些 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You have killed these.\n我就招出更多的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I will simply beckon more.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunts]\n这是我们偿还罪孽的地方吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Christwind.\nIs this where we pay for our sins?\nNorick.\n这是我们偿还美德的地方 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}This is where we pay for our virtues.\n罪孽比美德在这里要吃香 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Sins are more than welcome here.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[All Shouting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Whoa.\n国王 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}The king.\ngood uncle.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunts]\n放！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Man] Fire!\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[All Shouting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunts]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Horse Whinnies]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Horse Whinnies]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunts]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groans]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groans]\n卫兵！\n卫兵！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Grunts]\n- Guards!\nGuards!\n快 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Quickly.\n把国王抬离战场 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Get the king off the field.\n快 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Man] Come on.\ngood uncle.\n走 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Ride.\n- [Grunts]\n你只是争取到了点时间而已 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Chuckles] You have won nothing but time.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[All Grunting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunting]\n我不会像他们那么活的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I won't live like them.\n我们已经是他们了，我们是奴隶 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}We're already like them.\nWe're slaves.\nbe still.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunts]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groans]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Exhales Deeply]\nsire?\n我们要从森林走近路去艾柏城堡 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}We shall cut though the forest to Castle Ehb.\nthe castle is ours for the taking.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Whoa.\n我们快离开吧 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Let's get out of this place.\nho.\n看看，一个家里的朋友 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Lookee here.\nA friend of the family.\n我非常高兴 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}How delightful.\n独自在这个森林里你不觉得容易受伤吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Alone in the forest does not make you feel vulnerable?\nMuriella?\n你的举止从来都没赢得过尊敬 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Your comportment has never earned trust.\n举止？\n礼貌？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Comportment?\nDecorum?\n这都是城堡的言谈 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Those are words for a castle.\n我们不在城堡里 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}We\n-We are no longer in a castle.\n这里也没有规矩 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- There are no rules here.\n- [Horse Whinnies]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[All Groaning]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Gasps] No.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Both Grunting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Hyah.\n[Grunts] Hyah.\nHyah.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Whoa.\nhyah!\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Horse Whinnies]\n- [Groans]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groans]\n给你的特别礼物 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}A special gift for you.\n谢谢 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Thank you.\n- [Grunts]\nmy duke.\n你喜欢打破规矩的这种天赋 最终还是没用啊 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Your talent for breaking them has failed you at last.\n我带这个走 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- I'm taking this one with me.\n- [Grunting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[All Grunting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunts]\ngo.\nGo!\n我会找你的，走！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I'll find you!\nGo!\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Krugs Grunting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Gasps]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunts]\n诺瑞科!\n诺瑞科!\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Norick!\nNorick!\n- [Sword Clangs]\n这是你一直想要的吧 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}What you always wanted-\n光荣战死 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}a courageous death.\nyou were a brave old guy.\n索拉娜 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Bastian] Solana.\n巴斯蒂安？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Solana] Bastian?\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Grunting]\n- [Clanging]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunts]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Oh!\n- Come on!\n靠后 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Gasps]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Shouting]\n- Stay back.\n不，我没事 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- No.\nI'm good.\n- [Chattering]\n你今天很不错 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You fought well today.\n杀野兽 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Slaying beasts...\n- 需要狠下心来\n- 没错 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- can be a cruel courage.\n- Yes.\n不管什么出现 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Whatever presents itself...\n- 你都能战胜它\n- 我做苦活习惯了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- you'll do it.\n- I'm used to hard work.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Chuckles]\nthat'll come in handy...\n将会更有用 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}when you're king.\n你怎么看待你今天 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}How do you suppose it is that you...\n战斗得这么好？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}fought so well today?\nwas it...\n运气？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}luck?\nyou know.\nof course...\n你实话实说 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}you speak your mind.\n这会让你更好的为国家服务 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}This will serve you well.\n智慧是我们的武器 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Wisdom is our hammer.\n谨慎则是我们的盔甲 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Prudence will be our nail.\n当人在诚实劳动中 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}When men build...\n建设生活 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}lives...\nfrom honest toil-\n勇气不灭 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Courage never fails.\n你从哪儿听到的这些？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Where did you hear that?\n当我儿子还小的时候 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I told it to my son...\n我每天晚上 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}every night...\n都对他这么说 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}when he was a little boy.\n别人都不知道 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}And no one else.\n现在开始你生活会变得更加艰苦 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Things are gonna be a lot harder for you from now on.\nyes.\nthere's that little village...\n有个小村子 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}not too far from here.\n他们一年收两季稻子 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}They raise two crops a year.\n- 那会破坏土壤的\n- 不 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- That would kill the soil.\n- No.\n这样不会破坏土壤因为有海草 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}It does not kill the soil because of the seaweed.\nthe seaweed comes in from the ocean...\n给土增肥 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}and enriches the soil.\n你该试试 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You should try that.\n你怎么知道这些 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}How do you know these things?\n因为我是国王 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Because I am king.\n因为我应该知道 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Because I'm expected to know...\n关于土地的一切 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}about the land.\n就像你将来也会那样 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Just as you will be.\n只要有国王 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}As long as there are kings...\n只要有土地 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}as long as there is land...\n他们就会发动战争抢夺 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}they will fight over it.\n抢夺荒芜的田地 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Battles fought for barren lands.\n如果战争不结束那会是什么？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}What are these wars if they never end?\n他们为和平而战 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}And they fought for peace.\n和平，梦想而已 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Peace\n- that's a dream.\n但是你如果当国王 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}A dream that maybe you...\n可能 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}as king...\n就能实现 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}can bring peace forever.\n你不懂 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You don't understand.\n战争夺取了我的儿子 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}These battles have robbed me of my child.\n你忘了他们夺去了我的儿子了么 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You forget they robbed me of mine.\n我的儿子 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}My son.\n海力特将军 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Chattering]\n- [Tarish] General Hallette.\nsir.\n带队侦察队去这片树林的北边 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Take a scout to the north side of the woods.\nsir.\n- 将军？\n- 是 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Commander.\n- Aye?\n看 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Look.\nnow this...\n是个令人惊奇的收获 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}is a surprising delivery.\n法罗公爵来受到裁决了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Duke Fallow's here to meet justice.\n我猜国王还活着 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I assume the king lives.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Whimpers]\n贝克勒将军 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}General Backler...\n把你的剑给他 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}give this man your sword.\n不要护甲 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}No armor.\n决斗 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}A duel.\n可爱 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}How lovely.\nTarish?\n我能喝口酒吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Can I at least have a lick of wine?\n没人会帮国王解下护甲吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Will no man help his king with his armor?\n禽兽 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Pigs.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunts]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunting]\nGrowls]\nFallow.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunts]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groans]\n我杀了你 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Tarish] I should kill you.\n我要杀了你 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I should kill you.\n国王死了！\n国王死了！\n康里得国王死了！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Man] The king is dead!\nThe king is dead!\nKing Konreid has died!\nthis cannot be.\n我是你的国王 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I am your king.\nyou are a curse to the throne!\n- Commander Tarish...\n非常忠诚 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}is bound by honor.\n他永远不会杀了艾柏的新国王 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}He'll never kill the new king of Ehb.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groans]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Laughing]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Sighs]\n懦夫 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Coward.\n艾柏的子民们 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}My subjects of Ehb!\n国王万岁 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Long live the king!\nhuzzah!\nhuzzah.\n收起来 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Put it away.\n艾柏的子民们 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Merick] Citizens of Ehb.\n艾柏的勇士们 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Soldiers of Ehb.\n片刻前 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}A few moments ago...\n我们敬爱的王康里得去世了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}our beloved King Konreid passed away.\n被他的侄子谋杀了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Man] No!\n- Murdered by his nephew...\n他想篡权 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}who sought to take his place.\n根据这国家的法律 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}By the laws of our land...\n国王的继承人必须有血缘关系 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}the king's successor must be related to him by blood.\n我给你们介绍我们的新国王 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I give you your new king...\n康里得失散的儿子 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}the lost son of Konreid...\n卡姆登 康里得 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Camden Konreid...\n有人也叫他法莫 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}known to some of you as Farmer.\n起来吧 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Stand.\nplease.\nStand up.\n国王召唤你们来冒死而战 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}The king called upon you to face death.\n现在还活着的人已经从死亡 那里得到了奖赏 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Those still standing have cheated death of its prize.\n但是我们的敌人还活着 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}But our enemy still lives.\n他会重建军队，重新攻击 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}He'll rebuild his forces and launch a renewed assault.\n今晚我们疗伤 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Tonight we dress our wounds...\n葬死 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}bury our dead.\n明天我们袭击克里斯英得要塞 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Tomorrow we march on Christwind hold.\n- 直捣恶魔的老窝\n- 直捣恶魔的老窝！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Gouge evil from its shell.\n- [Man] Gouge evil from its shell!\n天佑吾王！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}God save the king!\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[All Cheering]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunts]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunting]\n什么？\n你要什么？\n带他们走 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}What?\nWhat do you want?\nTake them away!\n带他们一起走 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Take them with the others!\n等等 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Wait.\n把她带来 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Bring her over here.\n退下 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Begone.\n我在你身上 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I sense him...\n感受到他 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}in you.\n那个农民 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}The farmer.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Laughs]\n他会来找你的，太好了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}He'll come for you.\nThis is perfect.\n- 我会等他的\n- 我对你没价值 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- And I will be expecting him.\n- I'm nothing to you.\nbut he is something to me.\n不仅仅只是一个农民 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}More than a farmer.\n比一个农民更加危险 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Much more dangerous to me than a farmer.\n现在他会来找我 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Now he'll come to me.\n你怎么认识我？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}How do you know me?\n怎样？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}How?\n别动 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Whispers] Don't move.\n别动 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Don't move.\n我在你身上 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I feel him...\n感受到他了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}in you.\n因为你 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Because you're carrying...\n怀了他的儿子 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}his son.\n你怀了他的儿子 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You're carrying his son.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Gasps]\n- [Chuckles]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunts]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunting]\n你从哪儿来？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Where you from?\n格拉森。\n他们从我家里把我带走了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Gloucern.\nThey took me from my home.\n我们会送你回去的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}We'll get you back home.\n我们会死在这里的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}We'll die here.\nold friend.\n你怎么与那么大的军队对抗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Farmer] How do you fight an army that large?\nthe dagger may succeed.\nmagus.\n一小组人会溜过克鲁格人的防守线 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}A small force might slip through the Krug lines...\n然后在根源解决问题 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}and solve the problem at its source.\n带我到这个盖伦那里 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Get me to this Gallian...\n我就能杀了他 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}and I'll kill him.\nwith respect...\n但是我们在王国危急之时去救一个女人？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}are we making plans to save one woman when there is an entire kingdom at risk?\nhe must kill Gallian.\nthe kingdom is saved.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Chattering]\n玛丽安娜 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Muriella.\n就是现在 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Now is the time.\n陛下 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Your Majesty.\n我想加入你 我想要尽我的义务 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I wish to join your mission.\nI wish to be of service.\nyou've made your point.\nNow go back to the castle.\n我是我父亲的女儿 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I am my father's daughter...\n我会尽忠国王，就像他一样 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}and I will serve the king just as he does.\n你带来了谋杀国王的人 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You brought the king's murderer.\n他落入了我手 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}He fell into my hands.\nmagus.\n我接受你了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I accept your offer.\n- 还有其他人也想帮忙\n- 什么其他人？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- There are others who wish to help.\n- Which others?\n我带你去 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Muriella] Let me show you.\n- 你还活着啊\n- 我一直远离这里 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- You've managed to stay alive.\n- I've stayed away.\nthose who control the Krug-\n我们帮你战斗 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}we will help you fight them.\n以为你们不参与人类的纷争呢 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Thought you didn't involve yourself in the conflicts of men.\n这战争完不了，我们看出来了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}This war isn't going away.\nWe can see that.\n当我们的森林被侵略被烧毁时 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}And when our forest is burned and invaded...\n我们也没其他选择 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}we have no other choice.\nand then we wish to be left alone.\n克里斯英得 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Christwind.\n- 当作是法师的避难所而建\n- 很坚固吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Built as a secure haven for magi.\n- How secure?\nthe doors open from within.\n你能进去吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You can get in?\n- 一个法师无需门就能进去\n- 我会找条路的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- A magus does not need doorways to enter Christwind.\n- I'll find a way.\n你觉得你还活着很幸运吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Do you consider yourself lucky to be alive?\n对 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I do.\n生活 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Life...\n从来没这么刺激过 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}has never been so exciting.\n跟我一起来的人 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Those people who came with me-\n为什么不放了他们？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Why not free them?\n你不想让整个世界都知道你有 无穷的力量和慈悲吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You do not want the world to know that you have ultimate power and mercy?\n你理解不了吗？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Do you understand nothing?\n我超越了慈悲 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I'm beyond mercy.\n我超越了好和坏 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I'm beyond good and bad.\n这些是孩子气的思想而已 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}These are childish ideas.\n我在改变世界的结构 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I'm changing the structures of the world.\n如果我给你的朋友发了慈悲， 我会怎么样？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Where would I stop if I showed your friends mercy?\n- 那可以...\n- 没有例外！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- It could\n-\n- No exemptions!\n没有例外。\n你不是。\n那农民也不是 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}No one.\nNot you.\nNot the farmer.\n你那个尖叫着被我撕开的孩子也不是 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Not your poor screaming boy whose insides I tore out.\n杀了我 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Kill me!\n杀了我 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Kill me!\n我不会杀了你 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I won't kill you.\n我很喜欢你 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I enjoy you.\nyou can die.\n可能吧，但是我不会 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Perhaps I can.\n[Whispers] But I won't.\n我还有很多事情要做 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I have too much work to do.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Thunderclaps]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Men Murmuring]\nIndistinct]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Thunder Rumbles]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[All Grunting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[All Grunting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[All Shouting]\n弓箭手准备 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Archers ready.\n放！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Fire!\n就是现在！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Now!\n上面有个山洞 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}There is a cave up there.\n是用来通风的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}It allows the air to enter.\n我得走了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}And now I must leave you.\n我不想你一个人走 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I don't want you to go alone.\nthen I must try to reach it.\nMerick.\n但是我最少可以分散他注意 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}But I should at least be able to distract him.\n我知道你会来的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I knew you'd come.\n老朋友 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Old friend.\n我们曾经是朋友 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}We were friends once.\n但是你变了很多 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}But you have greatly changed.\n噢？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Oh?\n一个大法师的力量 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}A magus's power is contingent...\n是和他为国王做的服务紧密相联的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}on his service to a king.\n你做为国王的敌人，你的力量成长的怎么样了？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}How is it that you thrive as the king's adversary?\n你觉得我的克鲁格人怎么样？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}How do you like my Krug?\n可憎的野兽而已 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- They are a cruel abomination.\n- [Laughs]\n克鲁格人很好笑 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Funny thing about Krug.\n他们没有国王 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}They have no king.\nold friend.\n- 我不敢猜\n- 我封自己为国王 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- I dare not guess.\n- I've made myselfking.\n克鲁格人之王 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}King of the Krug.\n现在我辅佐着一个我万分敬仰的国王 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Now I serve a king who deserves my utmost devotion.\n- 我自己\n- 够了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Me.\n- Enough!\nyou and I are the last of the magi.\nrecognize that you have fallen into madness.\n你根本不知道 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You have no idea...\n疯癫 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}how powerful...\n可以有多么强大 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}madness can be.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groans Softly]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Chuckles]\nthere will be no word for madness.\n我们就简称为 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}We shall simply call it...\n力量 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- power.\n- [Groaning]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Men Shouting]\n冲！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Charge!\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[All Shouting]\n嗯，他来了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Hmm.\nHe's here.\n他到了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}He's arrived.\n我找不到理由继续打这场战争了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I see no reason to prolong this battle.\n玛丽安娜 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groaning Softly] Muriella.\n玛丽安娜 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Muriella.\n你在这里 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You're here.\n我不知道发生什么了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I don't know how it happened.\n我怎么这么愚蠢？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}How could I have been so stupid?\n原谅我 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Forgive me...\n大法师 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}magus.\n接受我最后的力量吧 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Take the last of my power.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunts]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Krug Grunting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunts]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Man Whimpers]\n- 杀了他们\n- 帮帮我们 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Man] Kill them!\n- [Man #2] Somebody help us.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Shouting]\n- [Grunts]\n小心后面！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunts]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Man] Look out behind you!\n走！\n跑！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Run!\nGo!\n快走，我们走 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Move it.\nLet's go.\nGo!\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groaning]\nFarmer.\n这边 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}This way.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Chattering]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Thunderclap]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Men Shouting]\n法莫！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Solana] Farmer.\nOh!\nFarmer.\n我知道你当上国王了 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I understand you've become king.\ncan we?\n国王一对一的战斗 笑饮死敌之血 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}How often do two kings get to do battle one\n-on\n-one...\n这样的事情多久才会发生一次呢？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}getting to taste the blood of one's true enemy?\n你想打，还是想说死我？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}Are you gonna fight...\nor talk me to death?\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groans]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- [Chuckles]\n- [Grunts]\n想用魔法跟我打？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}You wanna fight me with magic?\n你的荣耀心呢？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- Where's your honor?\n- [Laughs]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Shouts]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[All Shouting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Grunts]\n我会复仇的 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I will have my vengeance.\nShouting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[All Shouting]\n不！\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groans]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}No!\nFarmer?\nthe vengeance of a husband...\n还是一个国王的？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}or the vengeance of a king?\n你忘了一个母亲的复仇 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- You forget the vengeance of a mother.\n- [Groans]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groans]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Shouts]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Blood Trickles]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Groans]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Sighs]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[Coughing]\nGrunting]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}[All Snorting]\n发生什么了？\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}What's happening?\n我一直想告诉你 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}There's something I've always wanted to tell you.\n我爱你 {\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}I love you.\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}##[Folk Rock]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}# Would you believe in a night like this #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#A night like this #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}# When visions come true #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}# Would you believe in a tale like this #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#A lay ofbliss #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Praising the old lore #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}# Come to the blazing fire and see me in the shadows #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#See me in the shadows #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Songs I will sing of runes and rings #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Just hand me my harp this night turns into myth #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Nothing seems real You soon will feel #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}# The world we live in is another skald's #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Dream in the shadows #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Dream in the shadows #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Do you believe there is sense in it #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Is it truth or myth #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}# They're one in my rhymes #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Nobody knows the meaning behind #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}# The weaver's line #\nnobody else but the Norns can #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#See through the blazing fires of time and #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#All things will proceed as the child of the hallowed #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}# Will speak to you now #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#See me in the shadows #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#See me in the shadows #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Songs I will sing of tribes and kings #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}# The carrion bird and the hall of the slain #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Nothing seems real You soon will feel #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}# The world we live in is another skald's #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Dream in the shadows #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Dream in the shadows #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Do not fear for my reason #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}# There's nothing to hide #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#How bitter your treason How bitter the lie #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Remember the runes and remember the light #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#All I ever want is to be at your side #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}# We'll gladden the raven #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Now I will run through the blazing fires #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}# That's my choice #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}# 'Cause things shall proceed as foreseen ##\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}##[Vocalizing]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}##[Ends]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}##[Pop Ballad]\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Pale\n-face the innocent #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}# Will drown in blood #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Hurt and withdrawn #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Don't ever steal my grief #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#In this haze of green and gold #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#He's gone #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Blind my eyes and I still can see #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}# Through the mist to the very end #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}# There I'll face what I fear the most #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Blind my eyes But it all doesn't matter right now #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#I will bury my dead #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#And keep on till the end #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#I won't give up #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#I won't give up #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#I'll turn to the red fields of none #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}# There's a grave #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}# There's a rose #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}\n- #Drift away #\n- #I can hear me say #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Soon you all shall be free #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}# Carry the blessed home #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#No one's left here but me #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#And I will sing out your name #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}# Call me insane I know #\nson #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#So pale turns the innocent #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#And all I feel #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Is pain #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Suddenly I understand #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#He's gone #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Blind my eyes and I still can see #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}# Through the mist to the very end #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}# There I'll face what I fear the most #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#Blind my eyes But it all doesn't matter right now #\n{\\cHFFFFFF}{\\3cH2F2F2F}{\\4cH000000}#But it all doesn't matter right now #\n伙计 你一定得听一下这个\n肉棒鼓\n嗯?\n你想来点什么吗\n你有什么?\n爆米花?\n-嗯\n-好吧 给我来一碗\n上面撒一点...\n凯普麦片\n伙计 怎么回事?\n老兄 我又熬了一整夜\n我的血糖现在简直是...\n露西尔小姐 你今天看上去真可爱\n那个手势是给我的吗?\n嘿 嘿 拜托 还没加牛奶呢 等等\n尼尔\n嗨 伙计 老兄\n我没找到勺子\n给你 威利\n太好了\n-伙计 这太恶心了\n-嗨\n尼尔\n布鲁斯\njets(一种燕麦圈)和wackies(一种燕麦圈) 有兴趣么\njets 肯定不要\nwackies 肯定要\n香蕉味的燕麦片\n只有他们才生产这个\n九元四分\n好吧 九元整\n但是别忘了你还欠我$26.12的donkey kong(一种燕麦圈)玉米片\n-还有那个蜂巢门铃?\n-当然\n-你听说过易趣上的cheerio么(一种燕麦圈)\n-没有\n他们盒子里的一些cheerio都快有炸面圈大了\n图片有点模糊 很难说清是不是像真的cheerio那样爽口\n可能还是几块小的融成了一块\n也许是个双芯片相机拍摄的\n管它呢\n我竞标了 所以...\n希望好运\n好吧 随时告诉我进展\n最初 它叫cheery燕麦 但是后来改名了\n通用面粉公司 1945\n现在我知道了 你想来点什么\n嗨 汤姆先生\n-又是一顶新帽子啊?\n-澳大利亚牛仔帽\n我刚拿到的\n我不得不让我的擦鞋佬帮我加了个帽系\n是顶不错的帽子\n大家都说不错\n当然了\n谢谢\n好了 决定了么?\n我要那个\n代言凯洛格公司(麦片公司)产品\n时间最长的的家伙\n太帅了\n我以为你不知道\n我也很惊讶我居然知道\n你有带狂欢节珠子的东西么?\n你知道 紫色的 金色的\n当然 那种是挺不错的 可都是街上的人\n在胡说八道的\n我推荐包角质层的幼鳄脑袋\n那些游客干嘛要来这呢?\n他们难道不知道佛罗里达才是他们的旅游圣地吗?\n我应该回去扎染点东西了\n至少那些玩意还能卖出去一些\n尽管装饰的有点吓人\n-你好么\n-不错\n很好 那么\n这是个...\n麦片吧?\n还是...\n-是的\n-很酷 很酷的主意\n太酷了 太酷了\n最畅销的是哪种?\n这里 是所有的可可制品\n我们这有好多上瘾的人\n我想 全国范围内 应该是玉米片\n正确 玉米片\n最早的也是至今最畅销的\n玉米片不是最早的 伙计\n-最早大规模生产的\n-哦\n好吧 对了 大规模生产\n你知道我就是这个意思\n那么 最早的是什么 麦片吗?\n不是\n麦片生产于1924年\n最早的麦片是凯洛格兄弟\n捣碎一捆小麦\n做成麦片一样的东西\n可以被分成更小的小片的\n那时起麦片就是一种健康食品了\n因为它的创造者是巴特尔克里克市的\n那些狂热宗教性健康迷(凯洛格兄弟来自巴特尔克里克市)\n基督教科学派那个小妞的信徒\n玛丽·贝克·艾迪\n是啊 这不像一种幻觉么 伙计?\n麦片是一种宗教\n感觉我们现在像在教堂里一样\nC.\nw.\n波斯特(早期麦片制造商)不是健康迷 也没什么高见\n他是个失败的投资家和蛇油贩卖商\n他是个傻瓜\n他在凯洛格兄弟对面建了一家工厂\n他们竟在大街上为了燕麦聚众闹事\n事实上你说的那次骚乱是因为垒球赛\n好吧 这地方太棒了\n不管你是哪一类人\n-人人都爱燕麦片 是吧\n-是啊\n八种基本维生素和均衡早餐的所有成分\n斯图尔特·泽里格\n尼尔·唐恩斯\n尼尔 幸会\n你想来点什么?\n我不知道 那是什么?\n-对\n-那是quake(一种燕麦圈)\n在销售上曾经跟quisp's(一种燕麦圈)势均力敌\n-quisp's...\n-它停产了\n-不再生产了\n-那你是从哪里搞来的?\n那么...\n你是店主了?\n不 我是经理\n店主是那边穿睡衣的家伙\n哦 你好\n你...\n他有没有考虑过特许经营?\n怎么了?\n听着 特许经营非常简单\n对特许经营人来说风险极低\n你们已经攻下了最难关\n现在你们只要再找到另外差不多50人\n来做你们已经学会的事\n然后你们就可以获得规模效益\n然后你们就可以赚大钱\n听上去不错 伙计\n我们可以把它们放在\n商场和加油站销售\n把小块麦片说成\"超大型\"\n然后再给麦片起些拉丁名字\n我们可以成为产业巨人\n这就是没人喜欢我们的原因 伙计\n因为美国不管什么都要特许经营\n标准化 \"麦片化\"\n直到它们变得一模一样\n我们是资本家 我们就是这样获利的\n我是说 你正在实践资本主义\n就是这样...\n不用找了 看到了么...\n这就是我想说的\n有人会因为这个好主意获益的\n你为什么不能成为那个人呢?\n因为那样会让他窒息而死的\n你可以创造 也可以积蓄\n但你不可能一边照看你的灵魂\n一边照看一大堆钱\n你可以开一千家店 赚上十亿美元\n但你知道最终你会变成什么?\n一个商人\n是啊 那有什么错呢?\n看 我...\n我完全晕掉了\n第四种魔力是什么?\n心灵 月亮 星星...\n还有...\n车轴...\n车轴草\n车轴草!\n对!\n绿叶车轴草!\n谢谢\n他们加入了新东西\n把我完全弄糊涂了\n有点复杂了\n好吧 我很抱歉\n我想你可以继续做...\n你现在做的...\n直到你变成...\n那样\n等等\n这还真...\n-请让一下\n-慢用\n我要你现在下班\n-威利\n-怎么?\n我下班了\n好的\n-你想做什么 ?\n-握住你的手\n没问题\n谢谢你们的掌声 谢谢你们\n本来以为我们的CD永远出不来了\n结果它终于完成了\n你们想要的话\n到后门告诉杰伊一声\n谢谢 晚安\n尼尔!\n尼尔!\n你搞什么?\n那些家伙开始做CD的时间比我晚的多\n你知道 我只是...\n我不能...\n我不能急于求成粗制滥造 你明白?\n我是说 如果我的东西不够好\n如果它不够火爆 你知道\n那我只会成为另一个\n用笔记本电脑和麦克风\n制作CD的蠢材 你明白么\n那简直像vh1电台一样 让我浑身不舒服\n或许要变得火爆仅靠业余时间是不够的\n你要做的是\n到麦片店请一个周假把它做完\n我不能请一个周的假 那是我的工作\n你知道 那是我的饭碗\n你为什么不靠你攒下的钱生活呢\n不 那是用来出版发行和买盒子的\n如果我没那笔钱 就根本无法发行\n不可以\n我今天辞职了\n-你什么\n-我没告诉过你么\n没有!\n你不摆摊了?\n哦 好吧 很好\n怎么 你打算重新回到\n-\n-\n-\n-\n-====翻译=====\n-\n-\n-\n-- 鬼娃娃 Hanabi 黄小占 月舞 祁霖 校对：\n亚力商大 总监制：\n火精灵\n迪凯特大街上\n跟那些流浪汉们一起生活么\n不 我有个主意 给我在麦片饼干店找份工作\n什么?\n那样你就可以有时间做完你的CD\n我也能多赚点钱直到想好下一步的方向\n这主意棒极了\n不 一点也不棒 这是个烂主意\n你不能在麦片饼干店工作 完全不可能\n那样的话会不断发生利益冲突的\n-为什么?\n-我怎么能指挥得了你?\n我们怎么跟人解释说你不会因为\n跟我上过床而得到特别待遇?\n好吧 如果这也是个问题 还真是搞笑\n这不是关键 好吧?\n关键是...\n关键是地狱之路已经开始\n对么 一小步已经踏出去了\n因为你有了该死的现金问题\n我不会让你那么做的 我不会让你出卖肉体\n出卖肉体?\n上帝 尼尔 拜托\n事实上 这个主意倒也不错\n也许我是该去卖卖淫 那倒很有趣\n-那你一定得让我看看\n-我会让你看的\n-你知道我是对的\n-哦 对 你是对的\n当你70岁了 终于完成你的CD的时候\n你可以过来到纸板箱里看看我\n我会完成我的CD的 好么\n你也不会住在纸板箱里\n因为你还没听到我的好主意\n跟我住到一起\n跟你住到一起?\n你疯了么?\n你不能因为同情而同居 尼尔\n不是因为同情 我是想要你开心\n这会让我开心么 跟你住到一起?\n-那会让我高兴的\n-那好吧\n等等\n当你说\"那好吧\" 那是指\n\"那好吧 别再吵了\"\n还是\"那好吧 我搬来和你住 你个笨蛋\"?\n你认为呢?\n看箱子里\n我为我们的同居做了件礼物\n这些是你画的?\n真不可思议\n那儿\n就像淘气的天主教徒同居一样\n几乎是了\n那是干嘛?\n这个\n为什么 唐恩斯先生 那会让我一丝不挂的\n好主意 凯茨小姐\n流线型的靓车\n但它的颜色一定要闪亮\n不要暗灰的 要闪亮的\n然后我们要把它和...\n和一辆\n巨大的老式厄尔拉多敞篷车连在一起\n我们要戴上\n配有无线电话的头盔\n-打开开迪车的喇叭\n-那是必需的\n我们要把车停在good sam露营地\n和沃尔玛停车场\n我们要用大量\n的摇滚乐\n使老人们一直清醒\n因为我们要用我们的打折卡\n买很多专辑\n让开迪的行李箱里只有CD和超强低音器\n没有人会怀疑\n那过时的流线型跑车里头的两个老人\n就是摇滚风潮的领引者\n著名的尼尔·唐恩斯先生\n和催眠者\n艺术界的传奇 普西·凯茨小姐\n同父异母的乱伦双胞胎\n关于吃的还能有什么新鲜的?\n我不知道 也许是新吃法\n放进你的屁眼然后用后边消化\n那吃苹果会很困难的\n-那羊肉串呢?\n-天哪!\n喝汤会花很久\n是的 喝汤会花很久\n-吃羊肉串会很好玩的\n-是的\n伙计 你在干嘛?\n做个棒子\n今晚和跳舞高手去参加个爵士乐演凑会\n-我必须会点\n-跳舞高手?\n你怎么演奏那个铜管乐队的曲子?\n-我弹全部\n-各位\n注意咯\n我有个好消息\n该死的\n一盒燕麦饼干?\n在这?\n不 不 不 这不是燕麦饼干\n这是在周六早上看老鼠\n在浴盆外吃冻鞭子\n那是什么...\n那叮当声是什么?\n-对极了!\n-我要了 多少钱?\n-30\n-成交\n30美元买一盒老的燕麦片?\n得了吧\n可是会有人花三万买这个盒子里的东西的\n是的 一些傻瓜\n为了盒子里的童年?\n谁的童年?\n那些东西生产出来的时候你还没出生吧?\n把这些算在你的账上?\n地下天鹅绒乐队成名时我也还没出生呢\n但我肯定知道他们是谁\n拆开他们吧\n不 那是藏着非常时刻用的\n你好\n还记得我吗?\n你称我为草莓\n我记得 你好\n你...\n你把这个借给了我\n你觉得怎么样?\n我的天哪 太让我吃惊了\n很变态 很不可思议 对吧?\n他真是个天才\n我喜欢为我认识的人做mp3\n你做mp3?\n你剽窃了吉尔·斯科特海伦?\n我只是想...\n我知道你在想什么 我是这么想的\n出去买上20张他的专辑\n然后他的孩子就有钱了\n你难道不认为一个70年代的黑人歌手\n还没有被他的商标骗够吗?\n因为作为音乐人\n我们要考虑那种事\n因为将来某一天\n或者我们中的某些人 在不久的将来\n我们可能会靠版税生存\n事实上 对于尼尔\n这个日子已经不远了\n因为他会在一周内完成他的CD\n从今天开始的一周内 这会引起轰动的\n不 一礼拜?\n怎么可能...\n那谁来打鼓 老兄?\n-老兄 你为什么不...\n-好吧\n在我告诉威利之前你要保密\n但我想我要请一礼拜假\n街对面是怎么回事 让我大吃一惊\n那不是个新概念\n见鬼 那不是一个新概念\n那是剽窃\n是谁竟敢...\n-不可能\n-怎么了?\n不可能\n是那个香蕉共和党人\n那个问我问题的男人\n原来一直我身上了解市场行情\n可能他早就租了那幢楼\n不是燕麦饼干 像是专利剽窃什么的?\n威利会起诉那个混蛋的\n那混蛋是不值得我们去麻烦律师的\n跟我来\n走吧 我们必须去\n欢迎光临新原创麦片店 我能帮什么忙吗?\n你当然能啦 斯图尔特\n我的朋友和我想吃点燕麦饼干\n可能想来点以前的\n你这有fruit brute(一种燕麦圈)吗?\n是一种停产的怪物麦片\n我这有boo berry(一种燕麦圈)\n你现在有了哈?\n黛西(狗的名字)也有\n我这还有一盒...\nyummy mummy(一种燕麦圈)\n不 谢了\nYummy mummy是怪物麦片里不太有名的\n我想我更想要\n一碗alpen(一种燕麦圈)\n-那是牛奶什锦早餐 来自...\n-加拿大\n瑞士口味\n你要大份 中份 还是小份?\n特大份\n告诉你吧\n看在咱们是邻居的份上 第一碗我请客\n牛奶也一块请了吗?\n他是个白痴!\n没有牛奶 老兄 蓝色的牛奶和塑料汤匙?\n看上去很好 虽说 但弄的很干净\n你不用担心 他够不成威胁\n他只有吃西北风的份\n不 他会吸纳游客的\n但他们不给小费 他们不会碰燕麦饼干的\n又不是我们的人 没门\n他们确实有yummy mummy那样的东西\n他们有c.\nw.\n波斯特(早期麦片制造商)\n-就像巴特尔克里克一样\n-别大惊小怪的 威利\n别害怕 听我说\n这个男人会在几天之内破产的\n凯洛格兄弟就是被波斯特给搞垮的\n凯洛格弟弟接手过来\n然后全部售光\n害惨了凯洛格哥哥\n他们从不妥协!\n-乌托邦?\n没了!\n-我们不是凯洛格兄弟\n-暴乱!\n-我们不是凯洛格兄弟 好不?\n这家伙是个饭桶 他有什么?\n无非就是一些漂亮餐具和桌椅\n谁玩谁啊 他就是个小丑\n别这样 谁\n谁是这的老大?\n得了吧\n谁是早餐界的冠军?\n我要...\n我要听你这么说\n威利 过来 过来\n我给你做份混合冷饮\n为什么不呢?\n就一个礼拜\n因为那个冒牌骗人的\n原创燕麦饼干店\n让威利很抓狂\n我不能不管他\n我想那样做自私了点\n管好自己的事并不是自私\n我会给他说的 好吧?\n只是刚好这礼拜不太合适\n那就让这礼拜合适啊\n雇佣我\n如果你不在那\n就没有利益冲突了\n你甚至不用付我薪水\n我只需要在你工作的时候\n照顾好那个老人\n你知道的 你的真正的工作\n我很肯定我能搞定怎么做麦片生意的\n你难道没听到我说的吗?\n我听到了\n你只是很担心\n担心会搞砸\n担心是否会成功\n我知道担心的感受\n我一直都很担心\n而现在 我担心\n你是个做些音乐的燕麦饼干小子\n而不是在麦片店兼职的音乐人\n燕麦饼干小子?\n多谢你那么说 宝贝\n多谢你的爱和支持\n这就是爱\n帽子不错 汤姆 夏洛克·福尔摩斯\n"
  },
  {
    "path": "benchmarks/haystacks/opensubtitles/zh-medium.txt",
    "content": "魯哇克香貓咖啡 世界上最稀有的飲品 Kopi luwak.\nthe rarest beverage in the world.\n嘗一小口 Take a whiff.\n來 Go ahead.\n寇爾先生 董事會已準備好聽你的提案 Uh, mr.\ncole, the board is ready to hear your proposal.\n等一下下 Hold on just a second.\n來 繼續 Go ahead.\ngo on.\n怎樣 Well?\n真不錯 Really good.\n真不錯 Really good.\n寇爾先生?\nMr.\ncole.\nsir?\n吉姆 你知道庸俗是什麼嗎 Do you know what a philistine is, jim?\n先生 我叫理查德 Sir, it's richard.\n沒錯 費爾 出動你的如簧巧舌吧 That's right, phil.\ngive them the spiel.\n謝謝 主席先生 主管們 Thank you, mr.\nchairman, fellow supervisors.\n我們寇爾集團財務的管理不善 We at the cole group feel the decline of the winwood hospital...\n直接造成了溫伍德醫院的衰敗 ...is a direct result of significant fiscal mismanagement.\n請原諒 我們醫院...\nI beg your pardon, this hospital...\n日常開支近2倍 overhead costs are nearly double.\n你們的租金和置業費用高得不可置信 Your lease and land costs were similarly overbid.\n在科研分析 兒科 腫瘤學和核磁共振等領域的貢獻 Donations have atrophied to the point you've fallen far behind\n萎縮到了有史以來曲線的最低點 the curve in research, pediatrics, oncology and mri.\n7年來 寇爾集團私有化了15家公立醫院 The cole group has privatized 15 public hospitals in seven years...\n每一家目前都為社區提供 或即將提供 ...each of which now provides, or will soon provide...\n最高標準的醫療服務 ...the highest standard of medical care to their communities.\n人手問題就不管了嗎 despite being grossly understaffed?\n越好的醫生 越需要...\nthe better the doctor, the need...\n床位怎麼辦 外面在傳你們收太多病人 What about beds?\nthere are rumors you increased the number\n擠都擠不下了 of patients to the point of overpopulation.\n病人的密度一直是...\nPatient density has always been...\n還有急診室 這可是眾所周知的...\nAnd your emergency rooms, I mean, they are known...\n我開的是醫院 不是健康療養所 I run hospitals, not health spas.\n一個房間兩張床 無一例外 Two beds to a room, no exceptions.\n聽著 我和米雪爾.\n費弗約好了來這兒吃午飯 Look, I passed up a lunch with michelle pfeiffer to be here...\n我們能否盡早停止惺惺作態 ...so can we desist from all of this inane posturing?\n男孩女孩們 你們需要我 Boys and girls, you need me.\n而我卻不需要你們 I do not need you.\n這信封裡有一張大額支票 Now, there's a sizeable check in this envelope...\n如果決定了就請隨便使用吧 ...let me know if you decide to cash it.\n寇爾先生 你沒事吧 Mr.\ncole, are you all right?\n你在這兒幹嘛 What are you doing here?\n為生命而戰鬥啊 你呢 Oh, you know, fighting for my life.\nyou?\n我只是有點驚奇...\nUh, no, I was just surprised...\n我並不在乎保險 and I don't care about the insurance!\n去告訴那個腦子糊了屎的醫生 必須告訴我 And tell dr.\nshit\n-for\n-brains i wanna know everything\n為什麼一定要我打這一針光黴素 about this bleomycin drip he wants to get me on.\n我聽說它會吞噬你的肺 I hear it eats your lungs.\n等我下個月去國會座談時 When I address congress next month...\n我不想通過喉嚨裡的洞來呼吸 ...i don't want to do it breathing through a hole in my throat.\n-其實並不完全是這樣\n-這傢伙是誰\n- that's not exactly what happens.\n- who the hell is this guy?\n-湯馬斯在哪兒 湯姆\n-我在這兒呢 先生\n- where's thomas?\ntom!\n- in plain view, sir.\n-你好 湯姆\n-我們要把你挪上床\n- hi, tom.\n- we're gonna move you into the bed.\n我能自己來 我還沒死呢 I can do it myself.\nI ain't dead yet.\n現在怎樣 How about now?\n我最近炒你魷魚了嗎 Have I fired you lately?\n自從奧普拉事件以來還沒有 Not since the oprah incident.\n-他是個好人\n-對 好員工\n- that was a good one.\nha\n-ha\n-ha.\n- yeah, it's good stuff.\n那他媽是誰 Who the hell is that?\n你他媽又是誰 Who the hell are you?\n他說 \"你他媽...\n?\" He said, \"who the hell...\n?\"\n天哪 我在哪兒 這是停屍房嗎 Oh, god.\nwhat am i, in the morgue?\n那是我第一次將目光停留在愛德華.\n寇爾身上 That was the first time I laid eyes on edward cole.\n一個不祥的開始 一定是這樣 An inauspicious beginning, to be sure.\n放過我吧 親愛的上帝 Oh, spare me.\nsweet jesus.\n我討厭這些...\n我討厭針管 I hate these...\nI hate tubes!\n要是接下來3個星期裡 I'll be damned if I'm gonna spend the next three weeks\n我都挨著這個傢伙一起睡的話 我一定會死的 laying next to this guy.\n怪人一個 像個半死人 Zombie boy.\nlooks half\n-dead already.\n你不能住單間 You can't have your own room.\n不然會造成巨大的公關問題 It would create an enormous pr problem.\n我沒有定過這樣的鬼規矩 I don't give a shit about pr.\n我要住單間 這是我的醫院 沒天理啊 I want my own room.\nit's my hospital, for chrissake.\n別告訴我不能住單間 Don't tell me I can't have my own room.\n無意冒犯 保爾 No offense, pal.\n這政策你已公開辯護過無數次 You have publicly defended this policy countless times.\n你開的是醫院 不是健康療養所 You run hospitals, not health spas.\n一個房間兩張床 無一例外 two beds to a room, no exceptions.\n我從前沒有生過病 I've never been sick before.\n好吧 艾爾德瑞吉醫生馬上就要來給您打麻醉 Okay, dr.\neldridge will be in in a minute to dot you up, okay?\n打麻醉 Dot me up.\n上帝 Jesus.\n湯馬斯 Thomas\n麻醉時別讓我清醒著 don't let me wake up paralyzed.\n我會竭我所能 I'll do what I can.\n這真的是你的醫院嗎 This really your hospital?\n是的 沒錯 Yeah, pretty much.\n難喝的豌豆湯需要改進一下 Might wanna do something about the pea soup.\n在早上的手術時發現 By the morning of the surgery,\n癌癥已經擴散到愛德華的全身 the cancer had spread so far throughout edward's body\n醫生們估計他只有5%的希望能活下來 that the doctors gave him only a 5 percent chance to survive\n但他們卻未曾估計到他對他們有多生氣 But then, they didn't account for how pissed off they'd made him.\n沒有人來看他嗎 No visitors come in to see him?\n手術結束後他就一直睡著 He's been sleeping a lot since they brought him back.\n哦 Mm.\n我親自來護理你 還有一個原因 That's another reason I don't miss nursing.\n你看病人要是那樣 是多麼可憐啊 It's always so sad seeing a patient like that,\n還獨自一人 挺過手術 all alone after that kind of surgery.\n至少他不嘮叨 At least he's quiet.\n瑞秋今早來過電話 Rachel called this morning.\n真的?\n她怎麼樣 Really?\nhow's she doing?\n她在為下學期在交響樂團當首席小提琴手做準備 She's auditioning for first violin in next semester's symphony.\n那真是太好了 That's wonderful.\n還要書嗎 Need any more books?\n不用了 我很好 No, I'm...\nI'm fine.\n今晚的藥拿到了嗎 Got your meds for the night?\n嗯 我已經吃過了 Mm\n-hm.\nI already took them.\n枕頭怎麼樣 How about pillows?\n我很好 弗吉尼亞 真的 謝謝你 I'm fine, virginia, really.\nthank you.\n如果你願意的話 我可以陪你待一會兒 You know, I could stay a while if you want me to.\n沒必要把你也給拖累了 對嗎 No use both of us being useless in the morning, right?\n好吧 Okay.\n她走了?\nShe gone?\n什麼 What?\n作為公共健康專家之流 As something of a public health expert,\n我相信更多的人死於探望者 而勝過死於疾病 I believe more people die from visitors than diseases\n這種草莓 600塊 \"it's the berries,\" for 600.\n這種瑞典草莓和越橘一樣享有盛名 This swedish berry is also known as the cowberry.\n-越桔又是什麼\n-越桔又是什麼\n- what is a lingonberry?\nuh, what is a lingonberry?\n正確 這種草莓 800塊 Correct! \"it's the berries,\" for 800.\n1956年熱賣前40名中 這草莓告訴貝多芬轉存 In a top 40 hit of 1956, this \"berry\" told beethoven to roll over.\n誰是查克.\n貝瑞 Who is chuck berry?\n誰是查克.\n貝瑞 對 Who is chuck berry?\nyes.\n嘿 Hey.\n杜克 Duke?\n你介意嗎 You mind?\n哦 對不起 Oh.\nsorry.\nno.\n-什麼是馬裡亞那海溝\n-什麼是馬裡亞那海溝\n- what is the mariana trench?\n- what is the mariana trench?\n早上好 愛德華 Good morning, edward.\n-早\n-感覺怎麼樣\n- morning.\n- how you feeling?\n明擺著呢 Dumb question.\n導管怎麼樣 How's that catheter?\n真不知道沒有它的時候我是怎麼過來的 Don't know how I ever did without it.\n幽默是個好兆頭 Ah, humor is a good sign.\n你去死吧 Kiss my ass.\n太粗魯了 這是你最大的愛好了 對吧 As is surliness.\nit's one of your favorite flavors, right?\n-對\n-看看這裡怎麼樣\n- yeah.\n- let's see what we got here.\n看起來不錯 It looks good.\n手術很順利 好嗎 All right, so the operation went well, okay?\n所有的術後腦掃瞄都很乾淨 All the post\n-op brain scans are clean.\n現在我們要乘勝追擊你體內剩餘的腫瘤 Now we go after the sarcoma in the rest of your body.\n不幸的是 你的血壓很高 Now, unfortunately, your blood markers are extremely high,\n我希望今早我們就開始化療 so I would like to begin chemo this morning.\n喜歡早上化療的味道 Love the smell of chemo in the morning.\n現代啟示錄 對嗎 Apocalypse now, right?\n讓我感覺像個勝利者 Makes me feel like victory!\n-我等會兒和你去辦手續\n-好的\n- I'll check in with you later.\n- all right.\n喂 大夫?\n大夫?\nSay, doc?\ndoc?\n你可以來看一下...\nYou think you could just take a look at...\n?\n-對不起 我遲到了 你的醫生是誰\n-蓋比安醫生\n- sorry, I'm late.\nwho's your doctor?\n- he's dr.\ngibian.\n我告訴護士 I'll let the nurse know.\n謝謝 Appreciate it.\n婊子 不是嗎 Bitch, ain't it?\n-夸克是什麼\n-夸克是什麼\n- what are quarks?\n- what are quarks?\n你在這兒多久了 how long you been here?\n進進出出幾個月了 In and out over the past few months.\n把我當成試驗品 got me on an experimental treatment.\n-二元方程式是什麼\n-二元方程式是什麼\n- what is the quadratic equation?\nwhat is the quadratic equation?\n有多痛苦 How rough is it?\n化療?\nChemo?\n不是很糟 Not too bad.\n只要你不介意晝夜不停的嘔吐 If you don't mind around\n-the\n-clock vomiting...\n看著你的血管變黑 ...watching your veins turn black...\n感覺骨頭像是汽油膠化劑做的一樣 ...and feeling like your bones are made of napalm...\n與在海灘上度假一日無異 ...it's a day at the beach.\n那真是種欣慰 That's a relief.\n當然 我聽說每個人的反應都不一樣 Of course, I hear people react to it differently.\n今晚你自己就知道了 You'll know by tonight.\n今晚?\nTonight?\n聽著 Listen, um...\n是否介意我八卦一下 ...you don't mind my asking...\n那邊那個奇妙的裝置是什麼 ...what is that contraption you got over there?\n是虹吸壺 煮咖啡用的 It's a siphon.\nmakes coffee.\n它還能幹些什麼 What else does it do?\n它還能幹些什麼呢 What else does it have to do?\n你是否知道咖啡最初是由埃塞俄比亞的 Did you know that coffee was originally discovered\n一個牧羊人所發現的 by a shepherd in ethiopia?\n-不必說了\n-是真的\n- you don't say.\n- it's true.\n好像是他的山羊在一個陌生的灌木叢中吃漿果 Seems his goats were eating berries from an unfamiliar bush.\n沒過多久 羊就到處跑跑跳跳 Before long, they were running and jumping all over...\n度過了一段歡欣雀躍的時光 ...having a gay old time.\n於是牧羊人帶了一些樹枝回到當地的修道院 So the shepherd took some of the branches to the local monastery\n修道院長決定把樹枝烤熟 where the abbots decided to roast them.\n烤著烤著 When the berries burned\n裡面的豆子散發出了濃郁的香氣 the beans inside gave off such a pleasant aroma\n他們把豆子放入燉鍋中釀造 they brewed them into a stew.\n燉鍋 Stew, huh?\n隨後的幾百年裡 咖啡流傳到了阿拉伯 歐洲...\nAnd over the next few hundred years, it spread to arabia, europe...\n甚至蘇門答臘島 正如你從那兒買的烈酒一樣 ...even sumatra, like that hooch you got over there.\n它叫做魯哇克香貓咖啡 It's called kopi luwak.\n我知道它的名字 I know what it's called.\n是嗎 You do?\n從來沒人逮住過我喝那玩意兒 Never catch me drinking that shit.\n你喝過嗎 Have you ever tried it?\n沒有 我更鍾情於速溶咖啡 No.\nI'm more of a instant\n-coffee man.\n來 我來幫你 Here, here we are.\n-謝謝\n-不客氣\n- thanks.\n- no problem.\n好了 給 There you are.\n你一直有雀斑嗎 You always had those freckles?\n是的 Far as I know.\n挺好看的雀斑 Nice freckles\n嗯 Hmm.\n好了 我們有培根火腿和甜瓜 還有些意大利布拉塔乾酪 Okay, we got prosciutto and melons, some burrata mozzarella...\n和一塊小牛排 ...and a veal paillard.\n都是上好的意大利傳統膳食 The folks at toscana send their best.\n你要全部吃完嗎 You sure you wanna eat all that?\n是這麼打算的 That's the plan.\n什麼 What?\n哦...\nOh, uh...\n要湯馬斯給你也來一盤嘛 You want thomas to make you a plate?\n湯米 弄一盤給...\nTommy, uh, fix a plate for, uh...\n卡特 Carter.\n是姓還是名?\nFirst name or last?\n名字 First.\n真的?\n很有意思 Really?\ninteresting.\n要來一盤嗎...\n?\n說不定能讓你振奮 So you want, uh...\n?\nmight cheer you up.\n不需要了 謝謝 No, thanks, I'll pass.\n確定?\nYou sure?\n好吃 好吃 Mm, yum, yum.\n全洛杉磯最好吃的 Best in l.\na.\n再也不是洛杉磯最好的了 It ain't the best in l.\na.\nno more.\n我的天啊 Oh, man.\n瑪亞又是三好學生 Maya made the honor roll again.\n我肯定她行的 Bet your ass she did.\n我的天啊 My god.\n還不如得個心臟病什麼的 Somewhere, some lucky guy's having a heart attack.\n同志們 Fellows.\n寇爾先生 Mr.\ncole.\n別管我 我只是在自言自語而已 Don't pay any attention to me.\nI'm just, uh, talking to myself.\n這是凱爾給你的 It's from kai.\n他說長大後想成為像他爺爺一樣的機械師 Says he wants to be a mechanic like his granddad when he grows up.\n希望你讓他打消這個念頭 I hope you talked him out of that.\n我試過了 Well, I tried.\n看看是什麼東西 What do we got here?\n一部福特野馬350 It's a shelby 350.\n-我一直想要一部\n-是啊\n- I always wanted one of those.\n- yeah.\n凱爾記著 kai remembered.\n媽媽覺得你好像休息得不夠 Mom seems to think you're not getting enough rest.\n恩 Mm\n-hm.\n她愛你 爸爸 She loves you, pop.\n恩 Mm\n-hm.\n好 Okay.\n檢查報告出來後 給我們打電話 好嗎 You'll, uh, call us when you get your test results, huh?\n恩 Mm\n-hm.\n如果有結果的話 If that day ever comes.\n好 Okay.\n-保重\n-好\n- take care.\n- okay.\n你的長子?\nHe your oldest?\n是 Yeah.\n他做什麼的 What's he do?\n-羅傑是稅務律師\n-哦\n- roger's a tax attorney.\n- oh.\n你看 Here.\n他弟弟李 是個工程師 His brother, lee, is an engineer.\n這個漂亮的小女孩是誰 Who's the pretty little lady?\n那是瑞秋 三個中最小的 That's rachel.\nyoungest of the three.\n年紀差得好大 Big age difference.\n是啊 她是個驚喜 Yeah, well, she was a surprise.\n她出生後 我兒子們都寧願呆在家裡照顧她 We'd hardly gotten the boys out of the house when she came along.\n她小提琴拉得很棒 She's an outstanding violinist.\n你有小孩嗎 You got kids?\n這要看了 Depends.\n-我的婚姻關係都不長\n-恩...\n- never stayed married long enough.\n- oh, well...\n別擔心 對於我們兩個來說我結婚夠久了 ...don't worry, I've been married long enough for the both of us.\n覺得怎麼樣 How's that going?\n就這樣 It's going.\n感覺不錯吧?\nThat good, huh?\n這就是為什麼要發明電燈開關的原因了 Well, that's why they invented light switches.\n別誤會 我愛婚姻生活 結過四次婚 Don't get me wrong, I loved being married, been there four times.\n問題在於我鍾情於獨身 Problem is I love being single too.\n魚和熊掌不可兼得 Hard to do them both at the same time.\n人無完人嘛 Well, nobody's perfect.\n我唯一成功的就是我的事業 Only successful marriage I had was me and my work.\n我16歲時就開始賺錢...\nI started making money when I was 16...\n...之後就 ...and that was that.\n沒有停過 Never stopped.\n我比較倒霉 I'll be damned.\n我原來想當歷史教授 I wanted to be a history professor.\n人無完人啊 Nobody's perfect.\n弗吉尼亞告訴我懷孕前 I made it through two months of city college...\n我在城市學院做過兩個月 ...before virginia gave me the news.\n然後...\nAnd then, you know...\n年紀小 黑人還窮 孩子又要生了 ...young, black, broke, baby on the way...\n就接了第一份待遇還不錯的工作 Take the first decent job that comes along.\n我一直想回去 I always meant to go back\n但45年一晃就過去了 but 45 years goes by pretty fast.\n時光飛逝 Like smoke through a keyhole.\n該死 Shit!\n不要睡著的時候給我打嗎啡 真是浪費 Don't give me the morphine while I'm sleeping.\nit's a waste.\n她可能是想把我們倆都殺了 你說呢 Maybe she's trying to kill us both.\nyou ever think of that?\n贏了 Gin.\n你是什麼 魔鬼嗎 What are you, the devil?\n如果我已經失去理智了怎麼辦 What if I lost my mind already?\n老天啊 不會吧 Jesus, no.\n不 不 不 這不是祈禱 No.\nno, no jesus, this is not praying.\n我只是在自言自語 這是 I'm talking to myself out loud, that's...\n你想過自殺嗎 You ever think about suicide?\n自殺?\n我?\nSuicide?\nme?\nyeah.\n沒有 no.\n知道了 你是第一階段 Thought so.\nstage one.\n什麼 What?\n有五個階段 但是...\nThe five stages, but...\n否認 Denial.\n然後是憤怒 抵抗 沮喪 接受 Then anger, bargaining, depression, acceptance.\n所以你現在當然不會想到自殺 So of course you're not thinking of suicide.\n你處於第一階段 否認 You're in stage one.\ndenial.\n那你在哪個階段 What stage are you in?\n否認 Denial.\n想過自殺嗎 And thinking about suicide.\n好吧 這只是一個...\nYeah, okay.\nit's just a frame of...\n看上去你好像不再需要這個了 Well, it looks like you won't be needing this anymore.\n-結束了?\n-第4個療程 也是最後一個\n- that's it?\n- yep, fourth and final.\n接下來做什麼呢 What's next?\n醫生要先看看所有的檢查結果再決定 They have to run all the tests first, see where we stand.\n-要多久\n-需要點時間\n- well, how long?\n- takes a while.\n我會讓蓋比安醫生安排檢查的 I'll get dr.\ngibian to schedule them when I see him.\n謝謝 Thanks.\n我離下班還有一個小時 還有什麼需要嗎 I'm on for another hour, anything you need?\n如果可以的話 我想要健康證明書 Clean bill of health if you got one.\n堅持一下 卡特 Hang in there, carter.\n我就是這麼做的 That's what I do.\n到中心線 上壘...\nAnd line to center, base hit...\n將要打三個反彈球 ...kent will have to play it on three bounces...\n得分 投球手向後...\n...and alou will score.\nthe throw goes to the back...\n啊呀抄近路 天啊 Hit the cutoff man, for crying out loud.\n你看 這就是比賽癥結所在 You see that's the problem\n沒有基本原則 No fundamentals.\n有讀過這本書嗎 Did you ever read the time of your life?\n-威廉.\n薩洛揚寫的\n-是的\n- william saroyan.\n- yeah.\n\"沒有基礎 完全沒有\" \"no foundation.\nall the way down the line.\"\n當我們長大後...\n你在做什麼 When we were growing up...\nwhat are you doing?\n沒有 隨便寫寫 Nothing, scribbling.\n寫點什麼 Scribbling?\nwhat?\n沒什麼 亂寫而已 Nothing.\njust scribbling.\n當然 這是你想做的 Oh, sure, that's what you wanna do\n三壘的人 球偏了點 bounce a slider with a man on third.\n現在的這些孩子...\nThese kids today, they...\n戴耳機了 我原來在自言自語 Earphones.\nI'm talking to myself, again.\n-愛德華?\n-醫生\n- edward?\n- doc.\n感覺如何 How's it going there?\n愚蠢的問題 Dumb question.\n檢驗報告出來了 I got the test back.\n現在就說嗎 I'll just lay it out, huh?\n只剩六個月 Six months.\n幸運的話一年 A year if we're lucky.\n我們有一個實驗性的療程 There is an experimental program that we've been conducting\n但不要抱太大希望 and I don't wanna get your hopes up\n只是覺得你比較適合來試試看 but I think you would be an excellent candidate\n醫生 Hey, doc.\n怎麼了 Yes?\n你擋住我視線了 You're blocking my view.\n哦 Oh.\n對不起 Sorry.\n如果你有什麼想問的 Anyway, if there's any questions\n不管什麼時候 都可以來找我 day or night, you know where to find me.\n有一個問題 One question.\n當然 問吧 Sure, of course.\n卡特 你有什麼要問霍林斯醫生的嗎 Carter, you wanna ask dr.\nhollins something?\n我其實對錢柏先生的病情不太瞭解 I mean, I'm not familiar with mr.\nchambers'...\n那就去瞭解一下 Well, get familiar.\n我只是想知道我還能活多久 就這個 I just wanted to know how I stand, that's all.\n好的 那我先去看看你的病情報告 Sure.\nhow about I'll go take a look at your chart, okay?\n謝謝 Thank you.\n愛德華?\nEdward?\n愛德華?\nEdward?\n曾經有一項調查 There was a survey once.\n一千名被調查者被問到否願意 A thousand people were asked, if they could know in advance...\n事先知道他們的死期 ...would they want to know the exact day of their death.\n96%的人不想 Ninety\n-six percent of them said no.\n我我以為我就是那剩下的4% I always kind of leaned toward the other 4 percent.\n因為如果能知道自己的生命還剩多少 I thought it would be liberating...\n將會是一種解脫 ...knowing how much time you had left to work with.\n最好的情況是1年 A year at best.\n但其實...\n我不是 It turns out, it's not.\n想玩牌嗎 You want to play cards?\n以為你再也不會問了 Thought you'd never ask.\n太陽高高昇起 Rise and shine.\n或者這樣 Or that.\n讓我看看 Let me see that.\n還有 湯馬斯 And, uh, thomas...\n打電話給克裡斯蒂拍賣行的瑪麗 call marie at christie's and tell her\n這個季度我不去競拍了 I won't be bidding this season.\n知道了 I understand.\n我不想冒犯你 Uh, sir, I don't mean to sound indelicate\n但你要我怎麼處理你的...\nbut how do you want me to handle your?\n遺產?\nDeath?\n就當作你的遺產一樣處理 Treat it as if it were your own.\n把所有的錢都留給我的助理?\nSo leave all the money to my assistant?\n去給我買塊杏仁牛角麵包 Go get me one of those almond croissants that I like.\n給我挑好的 And don't buy any green bananas.\n-你在看什麼\n-這是什麼\n- what are you doing?\n- what is this?\n-快還給我\n-是什麼\n- come on, give it back.\n- what is it?\n還給我 Give it back.\n地上撿的 我又不知道這是國家機密 It was on the floor.\nI didn't know it was a state secret.\n我大一時 有個哲學教授 Well, my freshman philosophy professor\n給我們佈置過一份作業 關於人生規劃 assigned this exercise in forward thinking.\n叫做\"遺願清單\" He called it a \"bucket list.\"\n我們要把一生中想做的事情列出一個清單 We were supposed to make a list of things we wanted to do\n-在我們...\n-翹辮子之前 in our lives before we...\n- kicked the bucket.\n真做作 Cutesy.\n我列出來的是\"成為百萬富翁\" Anyway, I wrote things like \"make a million dollars\"\n\"當第一位黑人總統\" 都是些年少輕狂的想法 \"first black president,\" you know, young man's wishes.\n我想重新列一張 但是...\nI was gonna redo the list, but then...\n\"善意地幫助一位陌生人\" \"help a complete stranger for the good.\"\n\"大笑到流淚\" \"laugh until I cry.\"\n不是要評論 但這也太弱了點 Not to be judgmental, but this is extremely weak.\n現在也沒什麼用了 Well, it's pointless now.\n我要從反面跟你理論一下 I would argue the exact opposite.\n好吧 就這樣 All right.\nthat's it.\n你在幹嘛 What are you doing?\n只是稍微改一下 A little rewrite, that's all.\n難道你不想去參加舞會 玩玩槍 I mean, don't you want to go out with some balls?\nguns blazing?\n找點樂子?\nHave a little fun?\n這可不是關於什麼槍什麼的 It was not supposed to be about guns blazing or anything like that.\n你還沒弄明白 You're missing the point.\n\"欣賞宏偉的景色\"這是什麼鬼東西 What the hell is \"witness something majestic\"?\n你有去過喜馬拉雅山嗎 Have you ever been to the himalayas?\n\"駕駛福特野馬跑車\" 這還不錯 \"drive a mustang shelby.\" not bad.\n想到一個 去跳傘怎麼樣 I got one.\nall right.\nhow about skydiving?\n現在我們有事做了 Now we're onto something.\n我們有事請做了?\nWe're onto something?\n-對啊\n-讓我看看 快點\n- uh\n-huh.\n- let me see that.\ncome on.\n好 Fine.\n\"親吻世界上最美的女孩\" \"kiss the most beautiful girl in the world\"?\n你打算怎麼做到 How do you propose doing that?\n大親特親 Volume.\n\"刺一個紋身\" 這就是你的勇氣?\n\"get a tattoo.\" is that the sum of your ambition?\n愛德華 我寫的可比你深刻 Edward, I've taken baths deeper than you.\n比大一學生深刻是容易的 It's easy to be deep in freshman philosophy.\n霍林斯醫生怎麼說的 What's dr.\nhollins say?\n我們只有幾個月了 對嗎 We got months, right?\n也許一年 A year, maybe.\n你覺得45年過得很快嗎 You think 45 years went by fast?\n我們能去做這些事的 We could do this.\n我們應該去完成這些願望 We should do this.\n不行 我不能 No, I couldn't.\n不要擔心錢 我有的就是錢 Don't think about money.\nthat's all I got is money.\n但我不知道...\nBut I don't know.\nI...\n你不知道什麼 What don't you know?\n我只是打比方而已 It was meant to be metaphorical.\n-我只是想試著去處理...\n-全是廢話\n- I'm just trying to get a handle on...\n- blah, blah, blah.\n打比方 Metaphors.\n你光說不做 所以才會遺憾 現在機會來了 You're the one crying you never took a shot.\nhere's your chance.\n什麼機會 把自己變成傻瓜 My chance to what?\nmake a fool of myself?\n永遠不遲 Never too late.\n你覺得接下來會怎麼樣 What do you think happens now?\n我回去 然後聽別人說一大堆 I go back and sit around listening to people\n關於融資理財和次級貸款 talking about mezzanine financing and subordinated debt\n假裝關心很關心我那些該死的錢 pretending that I care about dead money.\n你回到家去為你的死亡準備一個儀式 You go home to some ceremonial procession into death...\n在你想安慰大家的時候 ...with everyone standing around watching you die...\n他們卻都圍著看你離去 ...while you try to comfort them.\n那就是你想要的嗎 被憐憫和憂傷所充斥著 Is that what you want, to be smothered by pity and grief?\n我可不想 Well, not me.\n卡特 我相信在你的內心深處你也不想這樣 And in your heart, carter, I believe not you either.\n我們現在是同舟共濟 這個比喻怎麼樣 We're both in the same boat.\nhow's that for a metaphor?\n我們現在有個很好的機會 We got a real opportunity here.\n機會 Opportunity?\n即使是對你來說 這麼講也太離譜 That is real twisted, even by your standards.\n我們依然感覺不錯 對嗎 精力又回來了一點 We still feel good, right?\nenergy's coming back a little bit.\n醫生說沒事了 Asymptomatic, the doc says.\n照我的看法 我們可以躺在這兒 The way I see it, we can lay around here...\n期待在某個爛科學實驗中發生奇跡 ...hoping for a miracle in some bullshit science experiment...\n或者我們能更進一步 ...or we can put some moves on.\n跳傘 對嗎 Skydiving, huh?\n太好了 All right.\n這是什麼醫院 居然連個醫學博士都沒有 What kind of hospital is this?\nthere isn't an m.\nd.\nwithin a mile.\n弗吉尼亞 我們得談一下 Virginia, we have to talk.\n醫院怎麼說的 What did they say?\n錢柏太太 你們談 我出去一下 Uh, mrs.\nchambers, I'm gonna give you two a little quiet time.\n請原諒 Excuse me.\n情況不太好 It's not good.\n我就知道我們應該去加州大學附屬醫院 I knew we should have gone to ucla.\n那兒的外科醫生和手術水平都更好 The surgeons are better.\npost\n-op is better.\n-這沒什麼關係\n-你根本不懂\n- wouldn't have mattered.\n- you don't know that.\n我們絕不放棄 我有其他辦法 We're not giving up.\nI want another opinion.\n弗吉尼亞 virginia.\n請接腫瘤科的維特裡醫生辦公室 Yes, oncology, please.\ndr.\nveteri's office.\n弗吉尼亞 別打了 Virginia, no.\n讓我來處理 Let me handle this.\n維特裡醫生嗎 我是弗吉尼亞.\n錢柏 Dr.\nveteri?\nvirginia chambers.\n是的 沒錯...\nYes, that's right...\n我要離開一段時間 I'm going away for a while.\n你在說什麼 What are you talking about?\n我在說愛德華和我要出發了 I'm talking about edward and I are going away.\n愛德華和你 Edward and you?\n出發去哪裡 Going away where?\n我不期望你能理解 I don't expect you to understand.\n你說對了 我不理解 You're damn right I don't understand.\n我不理解你怎麼能就這樣放棄 I don't understand how you can just give up like this.\n你怎麼能就這樣...\n放棄鬥爭 How you can just quit...\nquit fighting.\n-弗吉尼亞\n-為什麼你不和孩子們那樣去說\n- virginia.\n- why don't you tell our children that?\n當他們發現是你放棄了他們時 看他們怎麼說 See what they say when they find out you've given up on them.\n放棄他們 Given up on them?\n放棄他們 Given up on them?\n我在引擎蓋下面修了45年的車 I've got 45 years greased up under the hood of a car...\n那樣他們就不會來要求什麼了 他們確實沒有 ...so that they didn't want for anything, and they didn't.\n我想我該給自己一點時間了 I think I've earned some time for myself.\n去做什麼 和一個完全陌生的人離開 To do what?\nrun off with a total stranger?\n他不是一個陌生人 He's not a stranger.\n我是你的妻子 I'm your wife.\n我是你的丈夫 他們的父親 And I'm your husband.\nand I'm their father.\n他們的祖父 還是一個該死的修車師 And I'm a grandfather.\nand I'm a damn mechanic!\n你是個傻子 And you're a fool.\n你是個認為他會給你指一條 You're a fool who thinks he's figured out\n不會得癌癥的路的傻子 a way how not to have cancer.\n對不起 I'm sorry.\n我丈夫不是用錢可以換走的 My husband is not for sale.\n她恨我 She hates me.\n你恨我嗎 Do you hate me?\n目前還沒有 Not yet.\n因此計劃就開始了 And so it began.\n我常常害怕坐飛機 I've always been afraid to go up in an airplane\n現在我就要在一個瘋子的幻想中跳下去 now I'm gonna jump out of one at the whim of a maniac!\n想撿回來嗎 Wanna get it?\n你怎麼能建議我們這樣做 How do you suggest we do that?\n等等 Wait.\n噢 Ow!\n見鬼 Damn it.\n閉嘴 Not a word.\n回到座位上去吧 凱爾 Back to the seat, kyle.\n你要原諒我 凱爾 You'll have to forgive him, kyle.\n他在擔心家裡的那個女人 he's worried about the little woman.\n這和我妻子沒有關係 This has nothing to do with my wife.\n30秒後起跳 Thirty seconds to drop.\n結局是這樣的 The sequel was like that.\n她從未支持過我做任何事 She never backed me up on anything.\n結局 The sequel?\n我的第二任妻子 The second mrs.\nedward cole.\n天啊 那個女人恨死我了 God, that woman hated me.\n可能是因為你叫她\"結局\" Maybe because you called her the sequel.\n凱爾 我從來沒那樣想過 kyle, I never looked at it that way.\n-15秒\n-不 不\n- fifteen seconds.\nno, no.\n-等一下 我不能這樣做\n-當然可以\n- wait!\nwait, I can't do this.\n- sure you can.\n不 我真的不能 No.\nI can't.\nreally.\n你害怕的不是跳下去 It's not the jump you're afraid of.\n當然不是 The hell it's not!\n你只是在擔心你的降落傘不能打開 You're just afraid your chute won't open\n然後你會像個煎蛋卷一樣 出現你自己的葬禮上 and you'll show up at your own funeral as a denver omelet.\n不 我真的非常擔心降落傘不能打開 No, I'm pretty much just worried the chute won't open.\n不 不 No, no!\n他的嗓子不錯 對嗎 Man's got some lungs, huh?\n讓我們用降落傘降落吧 Let's hit the silk!\n我們是勇士 Geronimo!\n哇塞 太漂亮了 Oh, yeah, beautiful!\n啊 啊 Aah!\naah!\n快拉 快拉繩索 Pull the thing!\npull the cord!\n感覺怎麼樣 這才是生活 How about this, huh?\nthis is living.\n我恨死你了 I hate your rotten guts.\n向天空說投降吧 Surrender to the void!\n這麼多繩索 哪條是用來拉的 Which one of these damn cords do you pull?\n別碰他 我們還沒到降落地點 Don't touch it.\nwe're not in the drop zone yet.\n我們可以借助風勢...\nwe could wind up in the...\n好吧 打開降落傘吧 Okay.\nlet's deploy.\n我有種感覺 我在降落 I got a feeling I'm falling\n我們到了紅色區域了 拉繩索 We're in the red zone.\npull the cord.\n我有種感覺 我在墜入愛河 I got a feeling I'm falling in love\n快拉繩索 Pull the damn cord!\n我曾擁有愛 I was in love once.\n湯米 我們活著就為了某天死去 Tommy, we live to die another day.\n我很走運 How lucky for me.\n說真的 湯馬斯 記住那遺囑 它離你很近了 No jokes, thomas, remember the will.\nyou're so close.\n我想問你點事情 Let me ask you something.\n你是叫湯米還是湯馬斯 Uh, is it tommy or thomas?\n實際上我叫馬修 但他覺得那名字太宗教化了 Um, it's actually matthew, but he finds that too biblical.\n我們吃點東西吧 快來 Let's eat something.\ncome on!\n他瘋了嗎 Is he insane?\n時不時地 Depends.\n你決定了嗎 So you decided?\n不 我不想要任何 No, I couldn't think of anything\n會困擾我永世的東西 I wanted to be stuck with permanently.\n還永世呢 我們就要在五分鐘內死去了 What's permanently?\nwe're gonna be dead in five minutes.\n-什麼\n-比喻說法\n- what?\n- figure of speech.\n不舉同盟旗 不信黑色耶穌 So no confederate flag, no black jesus.\n不 我將要...\nNo, I'm gonna...\n去世 當然會 Pass.\nyeah, sure.\n我向來不主張褻瀆自己的身體 Well, I never agreed to desecrate my body.\n你在擔心他們不會把你葬在猶太人的公墓 You worried they won't bury you in a jewish cemetery?\n擔心你妻子嗎 What, the wife?\n這只是個紋身 It's a tattoo.\n這與你在外搞婚外情是不同的 It's not like you're dumping her for another woman.\n我從來沒和其他女人在一起過 I never been with another woman.\n哇 Whoa.\n那個必須要寫在清單上面 That's gotta be on the list.\n不 我不這麼認為 No, no.\nI don't think so.\n66年 Sixty\n-six years?\n夥計 我們應該來次放縱 Man, oh, man.\nwe ought to have a big orgy.\n不 No.\n放縱並不等於是不忠 Orgy's not even being unfaithful.\n不 No.\n這只不過看上去更專業 It's just, like, professional.\n不 No!\n我從來沒去過那種地方 I don't even have to be there.\n你好 親愛的 Hello, darling.\n你要駕駛她還是給她買身漂亮衣服 you gonna drive it or buy it a dress?\n只是讓我們彼此熟悉一下 Just getting to know each other.\n你確信我們準備好了嗎 You sure we're cleared for this?\n當然已經準備好了 要不然怎麼樣 Of course we're cleared for it.\nwhat if we weren't?\n只是檢查一下 Just checking.\n快 加油寶貝 看看她到底如何 Come on!\ntap it, baby!\nlet's see what she's got.\n我們很棒啊 Ah, we're doing just fine.\n你聽上去好像小孩要去參加大三的舞會 You sound like some kid going to the junior prom.\n你聽上去好像誰正在等待扭屁股的勝利 You sound like someone looking for an ass\n-whupping.\n扭屁股勝利 哈 哈 Ass\n-whupping?\nho\n-ho\n-ho\n-ho.\n-你一無所有\n-哈 哈\n- you got nothing!\n- ha, ha.\n有你就足夠了 快樂的吉姆 加速 Got enough for you, sunny jim, dangling.\n開這麼快想證明你雞雞有多能幹嗎 Did you just make a penis reference?\n如果我有呢 What if I did?\n上帝 你要讓我們兩個送命嗎 Jesus!\nyou're gonna kill us both!\n如果我要呢 What if I do?\n見鬼 Goddamn it!\n你給我帶來了麻煩 You're breaking evil on me.\n麻煩 我給你表演一下麻煩 Evil?\nI'll show you evil.\n我來給你表演一下真正的飛車麻煩製造者 I'll show you evel goddamn knievel.\n嘗嘗這個 膽小鬼 Pick up on this, chicken man!\n耶 哈 Yee\n-ha!\n膽小鬼 哼 Chicken man, huh?\n你能跑 但你不能躲起來 You can run, but you cannot hide!\n接下去你想做什麼 What do you wanna do next?\n你到底有多少錢 How much money do you have anyway?\n沒人告訴過你 Didn't anyone ever tell you\n議論別人的財產 是件很不禮貌的事情嗎 that it's rude to talk about someone else's money?\n這麼有錢的人 我還是第一次認識 I never knew anyone with enough to ask.\n很像病房啊 Medicinal.\n這是難以形容的美麗 It's indescribably beautiful.\n我喜歡在地球兩極上空飛行 I love flying over the polar cap.\n在荒涼的上空 Above the desolation.\n星星 The stars\n是上帝所創造的美好事物之一 it's really one of god's good ones.\n你認為是某種生命體創造了這些 So you think a being of some sort did all this?\n你不這麼認為嗎 You don't?\n你的意思是我是否相信當我仰望天空 You mean, do I believe if I look up in the sky\n允諾這個或那個的時候 and promise this or that\n上帝就會讓我們挽回生命嗎 the biggie will make all this go away?\n不會 No.\n那你的意思地球上95%的人都錯了 Then 95 percent of the people on earth are wrong?\n生活告訴我 If life has taught me anything\n這95%的人總是犯錯 it's that 95 percent of the people are always wrong.\n這就叫信仰 It's called faith.\n事實上我羨慕那些有信仰的人 I honestly envy people who have faith.\n但我自己卻做不到 I just can't get my head around it.\n也許你正在努力 Maybe your head's in the way.\n卡特 我們聽夠了無數次類似的討論 Carter, we've all had hundreds of these discussions...\n但每個人最終都遇到了同樣的問題 ...and every one of them always hits the same wall.\n就是到底有沒有神靈的存在 Is there a sugarplum fairy or not?\n沒人能夠回答這個問題 And nobody has ever gotten over that wall.\n那你信仰什麼呢 So, what do you believe?\n我拒絕所有的信仰 I resist all beliefs.\n沒有大爆炸之後宇宙的存在 No big bang?\nrandom universe?\n我們活著 We live.\n我們死去 We die.\n生命的車輪在不停的前進 And the wheels on the bus go round and round.\n如果你錯了呢 What if you're wrong?\n我很高興自己是錯的 I'd love to be wrong.\n如果我錯了 那我就贏了 If I'm wrong, I win.\n我不確定這樣有沒有用 I'm not sure it works that way.\n你不認為你知道一些我不知道的事 Well, you're not claiming you know something I don't.\n恩 Mm\n-mm.\n我有信仰的 I just have faith.\n哈雷路亞 夥計 Hallelujah, brother...\n不談這個了 ...and pass the mustard.\n-你知道他們是怎麼收穫魚子醬的嗎\n-不知道\n-Know how they harvest caviar?\n-hit me.\n當雌鱘魚被抓住的時候 When a female sturgeon is caught...\n漁夫必須注意觀察 她死得是否很安詳 ...the fisherman has to take great care to see she dies peacefully.\n-恩\n-只要她感覺到一點點的恐懼\n- mm\n-hm.\n- lf she feels the least bit threatened...\n...她就會分泌一些酸液來破壞魚卵 ...she secretes a sour chemical that ruins the eggs.\n聽上去像我第三任妻子 Sounds like my third wife.\n她認為蛋黃醬是種出來的 Woman thought mayonnaise came from a plant.\n我對此已經習以為常了 I could get used to this.\n聽上去也像我的第三任妻子 Also sounds like my third wife.\n這30年裡 我常來這裡 Thirty years I've been coming here.\n和一個男人來這裡是第一次 First time with a guy.\n我很榮幸 Well, I'm flattered.\n艾米莉的十歲生日是最美好的 雖然...\nEmily's 10th birthday was the best, though.\n誰是艾米莉 Who's emily?\n我的小...\nMy little, uh...\n她已經不再是小姑娘了 Well, she's not so little anymore.\n你有個女兒 You have a daughter?\n-但是你說...\n-是的\n- but I thought you said...\n- yeah, well...\n那時我還不認識你呢 i didn't know you then.\n長話短說 Make a long story short,\n我們不見面的 i don't see her.\n你在幹什麼 What are you doing?\n現在是時候了 It's time.\n-不 不 把它劃掉吧\n-為什麼不去\n- no, no, no.\ncross that off.\n- why not?\n-劃掉它\n-為什麼\n- cross it off.\n- why?\n為什麼 Why?\n沒有什麼為什麼 There is no why.\n-你怎麼了\n-請原諒\n- what's the matter?\n- excuse me.\n你去哪裡 Where you going?\n真像個女人 Just like a broad.\n喂 卡特 Look, uh, carter...\n對不起 我知道 I'm sorry.\nI know\n有時我有一點傲慢和...\nsometimes I get a little overbearing and l...\n上帝啊 Jesus christ.\n-沒事的 沒關繫了\n-什麼 什麼\n- it's all right.\nit's okay.\n- what?\nwhat?\n上面的導管流出來的 沒什麼 The top on the catheter came loose, that's all.\n也許該送你去醫院 卡特 Well, maybe we should get you to a hospital, carter...\n-我剛從醫院裡出來\n-嗯?\n- I just busted out of the hospital.\n- huh?\n沒事了 看 已經不流了 我們出去吧 It's all right.\nlook, it's already stopped, see?\nlet's get out of here.\n看上去很好 嗯...\nIt looks wonderful.\nuh...\nuh...\n-也許我要去拿...\n-我們直接走吧\n- maybe I'll get the...\n- let's just go.\n-你直接上車去\n-走吧 走吧\n- you go straight to the car.\n- come on.\ncome on.\n好吧 Okay, all right.\n-湯米在哪?\n在哪?\n-在客廳 先生\n- where's...\n?\nwhere's tommy?\nin the salon, monsieur.\n噢 天哪 Oh, my.\n你到底有多少錢呢 How much money do you have?\n我可不會流血到地毯上 Well, I wouldn't bleed on the rugs.\n我要找個地方好好洗個熱水澡 I'm gonna find someplace where I can take a nice hot bath.\n洗得乾乾淨淨的 Be as good as new afterwards.\n是的...\n你...\n好吧 Yeah...\nyou...\nokay.\n好吧 我們都準備好了 好的 okay, we're all set, okay\n好了 雖然花了點功夫 但是我都重新安排好了 All right, it took some doing, but, uh, I rearranged everything.\n明天去開羅 在坦桑尼亞呆兩天 Cairo tomorrow, tanzania for two days,\n然後週六去約翰內斯堡 then johannesburg on saturday.\n而且事先聲明 不准鬥牛 不准獵虎 And, as previously directed, no bullfight, no tiger hunt.\n湯馬斯 我真的很想說你是不可替代的 Thomas, I'd really like to say you're irreplaceable\n但是那是在說謊 but I'd be lying.\n我也很想說你真的是個不錯的人 我熱愛我的工作 And I'd really like to say you're a gracious man, and I love my job\n但是我 也是在說謊 but i, too, would be lying.\n反擊得很合理 Turnabout is fair play.\n肯定是跟我學的吧 I believe you learned that from the master.\n嘿 過來看 他們遇到危險了 在浴室 Hey, look!\nthey got jeopardy!\nin the bathroom!\n電視上的 冒險者 On the tv.\njeopardy!\n冒險者 在法國 Jeopardy!\n?\nin french?\n喂 Hello?\n是寇爾先生嗎?\n我是弗吉尼亞.\n錢柏 Mr.\ncole?\nvirginia chambers.\n噢 我知道了 嗯 你好 Oh.\nyeah.\num, hi.\n我幫你叫卡特接電話 Let me get carter for you.\n實際上 我是打給你的 Well, actually, I called to speak to you.\n噢 Oh.\n他還好嗎 Is he all right?\n噢 是的 他...\n他很好 Oh, yeah.\nhe's...\nhe's fine.\n我能問下你們在哪嗎 May I ask where you are?\n法國 實際上 嗯 明天...\nFrance, actually.\nuh, tomorrow...\n把他還給我 Give him back to me.\n弗吉尼亞 我可以叫你弗吉尼亞嗎?\nVirginia.\nmay I call you virginia?\n我不確定我是否可以讓他 I'm not sure that I can make...\n別拿他當借口 I'm not asking for his sake.\n寇爾先生 Mr.\ncole\n我這一生的職業就是護士 I've been a nurse my entire adult life.\n我親眼目睹了很多人的悲劇 Had a ringside seat to more human tragedy...\n我比任何女人承受過的都要多 ...than any woman should ever have to bear.\n現在 我早有了丈夫將亡的心理準備 Now, I'm prepared for my husband to die.\n我只是沒準備 在他還活著的時候就失去他 I'm just not prepared to lose him while he's still alive.\n-霍迪.\n杜迪是誰?\n-答對了\n- who is howdy doody?\n-you got it.\n-你來選\n-電視木偶類 400元\n- you pick.\n- \"tv puppets,\" for 400.\n這兩個提線木偶 These two muppets...\n是室友 他們長期在芝麻街節目中表演 ...are roommates on the long\n-running show sesame street.\n伯特和爾尼是誰 who are bert and ernie?\n斯必羅.\n阿格紐是誰 Who is spiro agnew?\n斯必羅.\n阿格紐是誰 Who is spiro agnew?\n看來 Well...\n你看起來 嗯 ...you're looking, uh...\n很愉快 ...buoyant.\n這是我第一次躺在一個沒有角的浴缸裡 This is the first time I was ever in a tub with no corners.\n是嗎 Really?\n嗯 卡特 其實我一直在想 You know, ahem, carter, uh, I've been thinking\n剛才導管的事 還有其他的事 what with the catheter and everything\n也許我們應該把旅行暫停一陣子 maybe we should put this on hold for a while.\n拜託 我不是跟你說了嗎 別擔心 我現在很好 Come on, now, I told you, stop worrying.\nI'm fine.\n不 不 不是指那個 不是指那個 No, no, it's not that.\nit's not that.\n只是 我的意思是 或許我會讓你失望 It's just, I mean, if you're worried about letting me down\n你知道 畢竟我更可能會死 you know, it's a lot easier for me.\n你和弗吉尼亞談過了 是嗎 You talked to virginia, didn't you?\n你認為我這麼做是為什麼 Why do you think I'm doing this?\n因為我讓你這麼做的 Because I talked you into it.\n愛德華 你是很厲害 但是沒有那麼厲害 Edward, you're strong, but you're not that strong.\n知道嗎 Know.\n自從瑞秋上大學後 我的生活就出現了個缺口 After rachel left for college, there was a hole.\n我的意思是 你知道 不再有家庭作業 不再有社團 I mean, you know, no more homework, no more little league...\n背誦 學校比賽 ...recitals, school plays...\n孩子的哭聲 打鬧 摔傷膝蓋 ...kids crying, fights, skinned knees.\n40年來我第一次看著弗吉尼亞 And for the first time in 40 years, I looked at virginia\n周圍沒有絲毫吵鬧聲 沒有任何干擾 without all of the noise, without all of the distractions\n我甚至記不起來那種感覺 and I couldn't remember what it felt like\n那種不牽著她的手逛街的感覺 when I could not walk down the street without holding her hand.\n我的意思是 她還是那個我深愛的女人 I mean, she was the same woman I fell in love with,\n她沒有變 she hadn't changed.\n但是不知怎麼了 一切都變了 But somehow everything was different.\n一路走來 我們似乎失去了什麼 We'd lost something along the way.\n你明白嗎 You know?\n查理.\n麥卡錫是誰 Who is charlie mccarthy?\n獅子在今夜沉睡 \"the lion sleeps tonight\"\n看 看 看 Look, look, look!\n啊哈 Aah!\n我很高興當愛德華決定 I was very pleased when edward decided\n把單子上的第9條劃去 to eliminate item number nine\n\"獵虎\" \"hunt the big cat.\"\n當然 他依然堅持要放幾槍 Of course,he insisted on discharging rounds from the big gun\n其實一槍就夠了 One proved to be enough.\n你知道嗎 Do you know\n唯一一條被閃電擊中的狗 that the only dog ever struck by lightning\n就是在這 在埃及 was right here, in egypt?\n我真希望我能在被叛死刑前認識你 I wish I'd met you before we were dead.\n這樣看來 You know, technically\n我們可以劃去兩條了 we could cross off two items:\n親眼目睹金字塔 \"see the pyramids\"\n還有欣賞宏偉的景象 and \"witness something majestic.\"\n這裡已經很宏偉了 This is about as majestic as it gets.\n還是等看到我的山再下結論吧 Wait till you see my mountain.\n噢 好吧 Oh, yeah.\n你的山 Your mountain.\n不過 這裡確實不錯 Still, this ain't half bad.\n古埃及人對於死亡有個美好的信仰 the ancient egyptians had a beautiful belief about death.\n當他們的靈魂到達天堂的入口時 When their souls got to the entrance to heaven\n上帝會問他們兩個問題 the gods asked them two questions.\n他們的回答將決定他們能否進入天堂 Their answers determined whether they were admitted or not.\n好吧 我想知道 Okay, I'll bite.\n問了什麼問題 What were they?\n你找到生命中的快樂了麼 Have you found joy in your life?\n這個 Uh\n-huh.\n回答問題 Answer the question.\n-我?\n-是的 你\n- me?\n- yeah, you.\n回答問題 你找到生命中的快樂了麼 Answer the question, \"have I found joy in my life?\"\n找到了 Yes.\n你的生活給別人帶去快樂了麼 Has your life brought joy to others?\n恩 這種問題 我 Ah, this type of question, l...\n我不知道 嗯 I don't know, uh...\n我不知道別人是怎麼想的 嗯 I don't think about how other people gauge, uh...\n你問他們吧 Ask them.\n我在問你 I'm asking you.\n好吧 Fine.\n好吧 Fine.\n這麼跟你說吧 Let me put it to you this way.\n離婚後 接著我就不再是爸爸了 After the breakup, and the ensuing fleecing of the dad\n艾米麗和她母親一起生活 emily went to live with her mother.\n你知道 雖想保持親近 但只能假期聚聚 You know, you try to stay close, but it gets down to holidays\n偶爾打個電話 寄張生日卡什麼的 phone calls, birthday cards, you know.\n總之...\nAnyway...\n艾米麗上大學了 加入了個拯救窮人 emily goes to college, joins one of her \"save the poor people\"\n動物之類的 the animals, whatnot\n遇見了個男人 而且愛上了他 meets a guy, decides she loves him.\n那小子長得不錯 有野心 聰明 Good\n-looking kid, driven, smart.\n但是他有些問題 But there was something about him\n所以她告訴我 他們要訂婚的時 我反對了 so when she said they were engaged I told her I was against it\n但是不愧是我的女兒 於是 but being my daughter, naturally\n她還是和他結婚了 she went ahead and married him anyway.\n不用說 她沒有邀請我參加他們的婚禮 Needless to say, I wasn't invited to the wedding.\n你肯定很傷心 That must have hurt.\n你這麼認為 You think?\n他第一次打她 她來找我 First time he hit her, she came to me.\n我想打爆他的頭 I wanted to bash his brains in.\n她阻止了我 She wouldn't let me.\n說她愛他 這不是他的錯 他只是喝了點酒 Said she loved him, said it wasn't his fault, he'd had a few drinks\n是她先惹他的 she was the one picked the fight.\n他第二次打她時 她沒有來找我 Next time it happened, she didn't come to me.\n前妻告訴我的 很高興又聽到她的消息 The ex told me.\nnice to hear her voice again.\n你做了什麼 What did you do?\n盡為父所能 What any father would do.\n我把他擺平了 I took care of it.\n我找了個傢伙 他找了個專門處理這類事的人 I called a guy who called a guy who handles these kinds of things.\n我不知道他說了什麼 做了什麼 I don't know what he said, don't know what he did\n我只知道他沒有殺他 all I know is he didn't kill him\n我女兒從此再沒有他的消息了 and my daughter never heard from him again.\n她怎麼反應的 How did she react?\n你無法相信他直呼我的名字 更糟的是 Called me names you wouldn't believe, and worse\n她說對她而言我已經死了 Said I was dead to her.\n我不為我所做的事情感到驕傲 I'm not proud of everything I did\n但是我很肯定 要是能重來 我仍會那麼做 but I'm pretty sure I'd do it all again\n如果他們因為我女兒恨我 so if they don't let me into egyptian heaven\n而不讓我進入埃及的天堂 because my daughter hates me\n我猜他們確實會這麼做 well, then I guess that's just the way it goes.\n不管怎麼說 算是回答了你的兩個問題 However you answer your two questions.\n我們怎麼從墳墓下去呢 How do we get down from this tomb?\n皇后是莫臥兒帝國第5位國王 沙.\n賈漢的妻子 The empress was the wife of shah jahan, the fifth mogul emperor.\n雖然是包辦婚姻 但是他們深深愛著對方 Although it was an arranged marriage, they were deeply in love\n在他們第14個孩子出生時她死了 and remained inseparable until she died\n而他們的感情至死不渝 giving birth to their 14th child.\n介意我叫你雷嗎 Do you mind if I call you ray?\n大多數人叫雷 Main man ray.\n你有在聽我講話嗎 Are you listening to anything I'm saying?\n當然 Absolutely.\n14個孩子 我聽著呢 Fourteen kids.\nI'm with you.\n這個建築耗費了20,000個工人22年的時間來建造 It took 20,000 volunteers 22 years to complete this structure.\n這裡的一切都是賈漢親自設計的 Every square foot designed by the shah himself.\n所以那是真愛 So that's true love.\n那是真愛 That's true love.\n肯定很幸福 Must be nice.\n也許我會把這整個買下來 Don't know if I buy the whole \"20,000 volunteers\" business.\n安排葬禮讓我很苦惱 Funeral plans tend to confuse me.\n確切的說 是土葬好還是火葬好 Specifically, buried or cremated.\n土葬吧 Take buried.\n雖然我知道這無關緊要 但是我有幽閉恐懼癥 Now, I know it shouldn't matter, but I'm claustrophobic.\n如果哪天我在地下突然醒了 沒有人聽到怎麼辦 What if I wake up underground and nobody can hear me?\n他們還會生產那種內置鈴鐺的棺材嗎 Do they still make those coffins with the bells?\n嗯...\n我估計沒有了 Uh...\nI don't believe they do.\n那火葬吧 你打算怎麼處理那些骨灰呢?\nThen cremated.\nwhat do you do with the ashes?\n把他們埋了還是撒了?\n把他們放到架子上?\nDo you bury them, scatter them, put them on a shelf?\n扔進恆河順流而下找個安樂窩?\nFloat them down the ganges on a bed of flowers?\n如果我感覺到火焰怎麼辦 What if I feel the flames?\n但是我確定我會火葬 Well, I definitely want to have myself cremated.\n也許我們應該像華特.\n迪斯尼一樣把自己冷凍起來 Maybe we should go frozen like walt disney.\n不好 還是火葬吧 No.\ncremated.\n把骨灰放到鐵罐裡 埋到風景秀麗的地方 Ashes put in a can, buried some place with a view.\n鐵罐 嗯?\nA can, huh?\n是的 我不喜歡骨灰盒的說法 Yeah.\nI never liked the sound of the word urn.\n是嗎 難道你對地穴有特殊的感覺?\nReally?\ngot any special feelings about crypt?\n-\n-\n-\n-\n-====翻譯=====\n-\n-\n-\n-- 蕁香 卓為水蒙 蜀山天狼 Yancey 呂黎 校對：\n小門柴\n嘿 沒有 Heh.\nno.\n沒有 對我來說一個舊的\"巧克福納\"牌咖啡罐就足矣 No, an old chock full o'nuts can will do me just fine.\n\"巧克福納\" 天堂咖啡 Chock full o'nuts, \"the heavenly coffee.\"\n朋友 好的咖啡甚至是花錢都買不到的 Better coffee even your money can't buy, my friend.\n別拿這打賭 Don't bet on it.\n噢 好吧 Oh, right.\n魯哇克香貓 Kopi luwak.\n你為什麼不喜歡魯哇克香貓咖啡?\nWhat do you got against kopi luwak?\n跟我的品味太不搭了 Too fancy for my tastes.\n噢 是的 對我的好搭檔\"雷\"來說 是很不搭 Oh, yeah.\ntoo fancy for my main man, ray.\n-陷阱\n-該死\n- Gin.\n- goddamn it.\n牌都被你拿光了 You get all the cards.\n寶貝 這就是中國 This is china for you, baby.\n太棒了 Whoo\n-hoo!\nyeah!\n如果我們可以登上去看的話 肯定很壯觀 Be a lot more majestic if we could see it.\n看到那個老女人了嗎 See that old woman?\n真奇怪我們竟然會比她先死 Odds are we're gonna be dead before her.\n想開點 Happy thought.\n當然 如果有來生的話 Of course, she's probably got reincarnation going for her...\n她很可能會去轉世 ...however that system works.\n啊 佛教徒相信他們會不斷地轉世 Ah, the buddhists believe you keep coming back.\n此生的所為 會決定他們上天還是入地 Moving up or down a level, based on how you lived your life.\n瞧 這正是我所不明白的 See, that's where they lose me.\n我的意思是 一隻蝸牛要怎樣做才能上升一個境界呢 I mean, what would a snail have to do to move up in the lineup?\n用粘液畫出完美的軌跡 Lay down a perfect trail of slime?\n要聽壞消息還是更壞的消息 So shitty news, or really shitty news?\nA 第一個 A, the first one.\n暴風雪要來了 There's a storm up there.\n那謝謝你的提醒 湯姆 Well, thanks for the bulletin, tom,\n我們現在沒看到那該死的 we can't even see the goddamn thing.\n他們不會讓我們上山的 除非天氣變好了 They won't let us fly up until the weather clears.\n那天氣什麼時候會變好?\nwhen do they expect it to clear?\n嗯 明年春天 差不多吧 Uh, next spring, sometime.\n如果你們想知道的話 這就是個那個更壞的消息 That's the really shitty news, in case you were wondering.\n好吧 那下次吧 Well, maybe next time.\n只能這樣了 Yeah.\n明年春天 Next spring.\n我們現在幹什麼呢 So now what?\n也許你的山在告訴我們某些事情 Well, maybe your mountain's trying to tell us something.\n什麼意思 What do you mean?\n也許我們離開的夠久了 Maybe we've been gone long enough.\n離開的夠久了?\n離開誰夠久了 Gone long enough?\ngone long enough for whom?\n噢 不 我明白了 Oh.\nno, I get it.\n山不是告訴我們該回去了 The mountain isn't telling us it's time for us to go home.\n山是讓你告訴我 The mountain is telling you to tell me\n我該回去了 是嗎 it's time for me to go home, right?\n-是的\n-一派胡言\n- yeah.\n- you shit.\n你為什麼不管管你自己 Why don't you worry about your life,\n我們各擔心各的 懂嗎 and let me worry about mine, okay?\n好的 好的 你沒必要跟我發火 Okay, okay!\nyou don't have to get chippy with me.\n-下一站是哪裡\n-下一站 香港\n-What's next?\n-next, hong kong.\n一套絲綢衣服 還有黑核桃仁冰淇凌 Silk suits and black walnut ice cream.\n西藏人管他叫\"修馬魯瑪\" 雪的女神 Tibetans call it chomulungma, \"goddess mother of the snows.\"\n實際上是 宇宙的女神 \"goddess mother of the world,\" actually.\n根據傳統西藏語翻譯 In the traditional tibetan translation.\n我認錯了 I stand corrected.\n一杯加州葡萄酒 謝謝 Pinot noir, please.\n我想你肯定去過那了吧 I take it you've been there?\n呃...\n呃...\n嗯...\n實際上我剛從那過來 Uh...\nuh...\num...\nI just left, actually.\n我們打算要爬上去的 但是沒有 We tried to go up, but it wasn't...\n你已經錯過了登山的季節 You're a little late in the season.\n他們也是這樣告訴我的 So they tell me.\n-我叫安婕列卡\n-噢 我叫卡特\n- my name's angelica.\n- yeah, carter.\n很抱歉 很唐突地問一下 I'm sorry if this sounds terrible...\n爬那麼高的山 你的年紀是不是有點過呢?\nbut aren't you a little developed in years to be running up a giant mountain?\n過 你是說我的年紀大了吧 \"developed,\" now that's certainly one way of putting it.\n其實我去上去過 Well, I've been up there, you know.\n-是嗎\n-是的\n- really?\n- mm\n-hm.\n在我們必須返回之前 我爬到了26000英尺高 I made it to 26,000 feet before we had to turn back.\n-真的?\n-當然\n- really?\n- mm\n-hm.\n感覺怎麼樣?\nWhat was it like?\n好冷 大部分時候 Cold mostly\n白天 天空黑壓壓的 During the day, the sky is more black than blue.\n因為空氣太稀薄 不能反射陽光 There's not enough air to reflect the sunlight.\n但是在夜裡 你從來都沒有看到過那麼多星星 But at night, you've never seen so many stars.\n看上去觸手可及 耀眼奪目 Seems like they're just out of reach, and so bright.\n就好像是天堂地板上的一個個小洞 They're like little holes in the floor of heaven.\n-你聽到了嗎\n-聽到什麼\n- did you hear it?\n- hear what?\n我讀過一個人在山頂寫的描述 I read an account of a man who made it to the summit\n當你站在世界世界之巔 and standing there at the top of the world\n他經歷過這種異常的寧靜 he experienced this profound silence.\n就像所有的聲音都靜默了一樣 It was like all sound just fell away.\n這就是他聽到的 And that's when he heard it.\n什麼?\nWhat?\n大山之音 The sound of the mountain.\n他說他好像聽到了上帝的聲音 He said it was like he heard the voice of god.\n我以前從沒這麼做過 I've never done this before.\n這聽起來真是迂腐透頂 That sounds like such a cliche\n不過我樓上有個房間 but I have a room upstairs.\n那真是...\nWell, that's...\n我是說...\nI mean...\n我...\nI...\n我很榮幸 I appreciate that.\n但你看...\nBut you see...\n她真是個幸運的女人 She's a very lucky woman.\n我寧願我比較幸運 Well, I rather think I'm the lucky one.\n做得好 Good for you.\n湯姆?\nTom?\n等你老了以後 記住三件事 Three things to remember when you get older\n得有一間浴室 Never pass up a bathroom\n不要浪費每次勃起 別相信那些屁話 never waste a hard\n-on, and never trust a fart.\n等我老了以後我會記得的 I'll keep that in mind as I approach decrepitude.\n嘿嘿 這就對了 Heh\n-heh.\nthat's a good one there.\n我們回家吧 Let's go home.\n你說什麼 Excuse me?\n我想現在回家 I want to go home now.\n但我覺得...\n那真絲西裝怎麼辦?\nBut I thought that...\nwhat about the silk suits?\n你怎麼知??\n帽子不错 汤姆 夏洛克·福尔摩斯\n"
  },
  {
    "path": "benchmarks/haystacks/opensubtitles/zh-small.txt",
    "content": "魯哇克香貓咖啡 世界上最稀有的飲品 Kopi luwak.\nthe rarest beverage in the world.\n嘗一小口 Take a whiff.\n來 Go ahead.\n寇爾先生 董事會已準備好聽你的提案 Uh, mr.\ncole, the board is ready to hear your proposal.\n等一下下 Hold on just a second.\n來 繼續 Go ahead.\ngo on.\n怎樣 Well?\n真不錯 Really good.\n真不錯 Really good.\n寇爾先生?\nMr.\ncole.\nsir?\n吉姆 你知道庸俗是什麼嗎 Do you know what a philistine is, jim?\n先生 我叫理查德 Sir, it's richard.\n沒錯 費爾 出動你的如簧巧舌吧 That's right, phil.\ngive them the spiel.\n謝謝 主席先生 主管們 Thank you, mr.\nchairman, fellow supervisors.\n我們寇爾集團財務的管理不善 We at the cole group feel the decline of the winwood hospital...\n直接造成了溫伍德醫院的衰敗 ...is a direct result of significant fiscal mismanagement.\n請原諒 我們醫院...\nI beg your pardon, this hospital...\n日常開支近2倍 overhead costs are nearly double.\n帽子不错 汤姆 夏洛克·福尔摩斯\n"
  },
  {
    "path": "benchmarks/haystacks/opensubtitles/zh-teeny.txt",
    "content": "汤姆 夏洛克·福尔摩斯\n"
  },
  {
    "path": "benchmarks/haystacks/opensubtitles/zh-tiny.txt",
    "content": "谁是早餐界的冠军?\n你突然来信说最近要搬到这里\n帽子不错 汤姆 夏洛克·福尔摩斯\n"
  },
  {
    "path": "benchmarks/haystacks/pathological/README.md",
    "content": "These data sets are specifically crafted to try and defeat heuristic\noptimizations in various substring search implementations. The point of these\nis to make the costs of those heuristics clearer. In particular, the main idea\nbehind heuristics is to sell out some rare or edge cases in favor of making\nsome common cases *a lot* faster (potentially by orders of magnitude). The key\nto this is to make sure that those edge cases are impacted at tolerable levels.\n\nBelow is a description of each.\n\n* `repeated-rare-*`: This is meant to be used with the needle `abczdef`. This\n  input defeats a heuristic in the old bstr and regex substring implementations\n  that looked for a rare byte (in this case, `z`) to run memchr on before\n  looking for an actual match. This particular input causes that heuristic to\n  stop on every byte in the input. In regex's case in particular, this causes\n  `O(mn)` time complexity. (In the case of `bstr`, it does a little better by\n  stopping this heuristic after a number of tries once it becomes clear that it\n  is ineffective.)\n* `defeat-simple-vector`: The corpus consists of `qaz` repeated over and over\n  again. The intended needle is `qbz`. This is meant to be difficult for the\n  \"generic SIMD\" algorithm[1] to handle. Namely, it will repeatedly find a\n  candidate match via the `q` and `z` bytes in the needle, but the overall\n  match will fail at the `memcmp` phase. Nevertheless, optimized versions of\n  [1] still do reasonably well on this benchmark because the `memcmp` can be\n  specialized to a single `u32` unaligned load and compare.\n* `defeat-simple-vector-freq`: This is similarish to `defeat-simple-vector`,\n  except it also attempts to defeat heuristic frequency analysis. The corpus\n  consists of `qjaz` repeated over and over again, with the intended needle\n  being `qja{49}z`. Heuristic frequency analysis might try either the `q` or\n  the `j`, in addition to `z`. Given the nature of the corpus, this will result\n  in a lot of false positive candidates, thus leading to an ineffective\n  prefilter.\n* `defeat-simple-vector-repeated`: This combines the \"repeated-rare\" and\n  \"defeat-simple-vector\" inputs. The corpus consists of `z` entirely, with only\n  the second to last byte being changed to `a`. The intended needle is\n  `z{135}az`. The key here is that in [1], a candidate match will be found at\n  every position in the haystack. And since the needle is very large, this will\n  result in a full `memcmp` call out. [1] effectively drowns in `memcmp` being\n  called at every position in the haystack. The algorithm in this crate does\n  a bit better by noticing that the prefilter is ineffective and falling back\n  to standard Two-Way.\n* `md5-huge`: This file contains one md5 hash per line for each word in the\n  `../sliceslice/words.txt` corpus. The intent of this benchmark is to defeat\n  frequency heuristics by using a corpus comprised of random data. That is,\n  no one bytes should be significantly more frequent than any other.\n* `random-huge`: Similar to `md5-huge`, but with longer lines and more\n  princpally random data. Generated via\n  `dd if=/dev/urandom bs=32 count=10000 | xxd -ps -c32`.\n  This was derived from a real world benchmark reported to ripgrep[2].\n  In particular, it originally motivated the addition of Boyer-Moore to\n  the regex crate, but now this case is handled just fine by the memmem\n  implementation in this crate.\n\n[1]: http://0x80.pl/articles/simd-strfind.html#algorithm-1-generic-simd\n[2]: https://github.com/BurntSushi/ripgrep/issues/617\n"
  },
  {
    "path": "benchmarks/haystacks/pathological/defeat-simple-vector-freq.txt",
    "content": "qjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjazqjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaz\n"
  },
  {
    "path": "benchmarks/haystacks/pathological/defeat-simple-vector-repeated.txt",
    "content": "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaz\n"
  },
  {
    "path": "benchmarks/haystacks/pathological/defeat-simple-vector.txt",
    "content": "qazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqazqaz\nqbz\n"
  },
  {
    "path": "benchmarks/haystacks/pathological/md5-huge.txt",
    "content": "60b725f10c9c85c70d97880dfe8191b3\nbf072e9119077b4e76437a93986787ef\n87c0a0816ee34adc6ce9793e5a5d96ed\n8880cd8c1fb402585779766f681b868b\na581613063c95fb4935d19159b0799b1\n644aeead8a88ee10fe6cc645e0199f25\n82ed9492853cc473a4e8dc7f673d34eb\n7b0ded95031647702b8bed17dce7698a\n76309e72a14a18c4b81838475e42d0d9\nf892dd1234a125341fb0a360e94a9d90\nc3f4404d9e95bf96376432c64dfa8a09\nec7a597060023e6ba4af40f5ea7ba345\n3a1427698e2f4185d41b153131fb241b\n2b2ac0980b42299be92fc2d87d1afbaf\n76a113065092a9a470cbaf987b4a8de4\n98f539f0a304197d476373609994e67c\n7433c432b96c3453472fa517e22038e0\nbe1e4fb922301ea9f1b1216060cde087\neee523a657c878eb29b5d7892124d3dd\n71ff2f59c91dcb47ca91f8e09b855d1b\n886639cd08e7422f60bc5eac67bc342f\n7313943279f4e4534ed733f98ca863a2\n5cbbdfc92604901fa27100ccb797e75f\ne4c4e06b5509ba7fdf5eb18a840ee4cc\nf2dc435d2f5c9d2c203c9a6640308afe\na82b620e3d0ff46272c794c576f9040a\n30f13bfe3401077e774cdda8bce30eba\ne0e9447fc5e79a10575951c5daf34243\nb31d8967ca350c78b48576fc560f00d3\na56ffd9f01fa749377cbaea011a57365\nde88250cdc0dd74177898dcffabd2e33\ncdb6ea9af3024dda46a1de71399186b5\n008385ed0301676efe2b9fafaca8b53d\n6469c4cc93b804a280aaea80069757e6\nc1b09bd03a06efe7cebda886f95ff805\ne9548296b88648af18575cd711e9f47b\nc7536598d6ff0038f4809e7727c52ef1\n240ac67e846e34a271d2556ab53512a2\n6c4c7897e335187e887b28c7a1a7c11d\n822f6e178ad4734d1783388cca2b8ff2\n5d512a47d9f8d72cb9985a3eae0a8dd9\nbcaf33a6362a8ce9021391f8b52911d0\nf606400911af58f4f64de39892651bef\n6f59def3ab19720f4680aa146812e0fb\nbb4f79188a199a9454f93c8ea0a03759\n889ce7d6998cc10f5ff30a711fa3a350\n877888ad2655545c8ded167e63342150\ne741a1d54e5314ba9d08a9ba5ec27725\n258def64c72dae45f3e4c8516e2111f2\n1f0dc792a6ea9b2a28d79b6a588a23ee\n63ad175f81016ceb978310ec21b6f5d2\n9d23dae2943cc97d14ec52785e6d08f3\n797c3f63b85f4f84fd0180089c970aa0\nb0df637c47e084aca5e9fe2f7dfa04dc\nfcd76b5bbb9125499d7f0b3d168b6779\nc01c09984b9485cc0b822dae374fe5dc\nb867cb6f00785fa3a9ad05e519b502e1\n26f5fcaa52a78b24770b3c8b2ced1270\n8657feb48dd552bb4b83003e34502bb1\nd1b20d81ffca1998d52000ccdc786e33\nc84f82f6fb4cb4947d288c2a5f799543\n0f38d1a543b96eb8d34b6fcdc9227445\na4a391ede878f0bd1d8e0d0dee3659c9\n294209bb8a8bc9feb728c21a5d408cf1\n3abc35af06a4f4e894351af37da2ad7c\n0efffb235da08727472ea69661a5b20b\nbcd1a37a1a2c1348a76b22f8e2a18dae\nd40f981befcd46cf54b075006baf1d95\n25e94a6564aec052dc88e9f43a63c3c2\n69a904ac9adfbefaa69a720e4c13780a\ne0371468885829d9e686dbe15e2e578f\n42973fa5b2696b23af739f73656c02b7\n2832e21254f4d3b0ed755a827d07ce58\nfb294d5e5d46694f74bd0fa498950830\na65e0310033901ad76e3b05b5737531a\nf8b8ebf2f3fca7e4999cef4eb839138a\n5c8eea92f16062a5afc573043e60e274\n92c48aa4e3056e191c74a67dcb4cfe14\neb0ec21a576bfac9c3bffe5879b15093\nf7d0e1b9fc3f163b363dcd2397a7f869\n5325905f99354c744ad981ffc9e8425d\n2e593a7f2c3f2e5fc0b6ea1d4f03a2a3\n500d22de1b49239e5c67119d65fd2547\n218cb21622021006bd78f59596b2c03f\n7ce4ef45b7c82cc0ea6ae5ba5d9eba1b\n59b4c6f6f177674f94a7425a90c5196e\n94a8593a689786dc5ecf7829a50fc19c\n9602ff0475edf708f8e6a32c0760b67d\nb3f20bb15665ba62380c2bad0823ff60\n8a5469910268f12754b160aa784d3b87\nda09e91459719b9f121b54e844cadf37\nd6638c2906f5d155f49e9278b47de829\nb561a32bd5802d379d01024ffe71923e\ndd55c0c4871d184d250888915e5a18a1\n0e0b7f934de20fcc39caf2e81dfa2048\nee5ab84f8fec9fe8fb2dd0b042808d52\na6a9fdba23057a1dd5120b061e8515f9\n79d1f9df0adf9a1768f23c754d96bb4d\nebc8b0c58480a45374e89a9af9974a0f\n2027ac6cd4c69d7564f1f9058b350763\n4e410b2e3d27530106b3a32d9f89c55b\nabd148420a09b514d1f22464c6d2a2e9\n54e0f1b148db701b0e4ed218f2b734a2\nf49f7c2a99efe9bfc0be9021fc7a7041\n061f5d84c9831384a7fd29024d513108\n8c6ad61dd7c0b62e2a4c69e986f22377\n8cc5700dcec9acfcb5a2cf53437c10a0\n62d44974e2e296c42600ff067bfb2af0\ne544363876aa91c17334fc5148b14751\n34af6d580de3c6dec7ea2a0b594895b7\nf3d37d192079706862c46172ec96a8b4\na1586235411d40cefaa4fec6c7d5a0b1\n6213c6bd99cde9f4b41cce96f7cdef94\n3119f6518eb8df5066bb2f9f6ccc5e61\nd34f66a023552954628ffd32b7c02e30\n001e01779591c3dbf3308f23355c8228\n3135e09770680a5ac905fa0d0e9ff773\n0592e796510980e915a6d5d4eef9b8d8\n5d0e87ec2e476bc61a25b5569fb43209\n99fd6b62bc270c9bc820dc111f370acd\neb41307a248a7d11b3999356c2831d6a\nb86520e700cf383b6d69d463e4a9d81b\n9a929dc52cdcb99b173e5183a3b7571c\nd809a607f1feb76628431e6d355ca002\n2aa6dbe649c0237515c016619ea517c0\n3561f8c06784a5d67cf7d5bc89bd8ce6\n13901a622f2b2737658a9a8177f2031f\nef09247a0e23cdb6490d96a68433df3d\n438049e5176b5d8aca1a066825482271\naab170ad5b1651ca6776b12012a410df\n798efc2e97cf3e2050d20f0ee5f00f9d\nc3c6607fb0c1741ebe3835246dbf340a\n25087751dffe29fe8dd72429a748eb04\n18fa1e27086d24af806d77d104756374\n869cdfb59eef781ebd6a3b78e43344e6\n2bbcfa3b295b759983ad8664cd388258\n1d5e22119f6b2bd06a4e461492dcbe56\n67dad48b5a62a151219620e2d7949f7c\n32720294f6471da1d3bbfcb30a117a93\nece3d9b6c3dc8de60adab39377db1f41\n76a397316335e4615acd439e1b7a5edd\n393be782bc856e419fda05ea68170287\nc125dcf20660b5d3ec05c8733036e13e\n4df9cc121afe1c00de4e9e396af4cdb1\ne149f60955e1f072ed4da29fc3c3752c\ndefa66ffa143368eb9bf6e28d9f36ed9\n366dbc71de2d7a1f6850baa739ed4059\nbc0b7cf32aa5e8e798d43f4382025715\nac2c0c6ab5fcc23914811f6c27051068\n7fe7ace44e748c78651b19d76b6edb24\n7a6bf8fe0526d4e4a68b08a1756f6cda\n9270f6ecabca29c8d25348b032f83976\n95845bbf4f294d4480e74090d1ed25fc\nb35c38185e97afe11d3a53143c57d193\n8c8a4b4242487b9da61517dd39462710\n53fd2cfb1985189c8ac17f067216dddc\n0ae32fc4ae993d09dfba9f0545e27d85\nc7fb8c988ff47ad625643c3bda727e3b\n9772c4c2648437fa49454c62dc22af84\n667d5fa72f80788a5ed2373586e57ff6\n817a2ae9e6efb8aff87b1de5083a9181\n82e2aaa1bf110953161a0de4f7f84243\ne051015b7b858c79a9715e6e218578b2\n4f51f4c5062d1081776190e9a1636184\n9f5a84de4e6df01dc18a96489d54ff4e\n9f13eadb35170b221815ee83ff8c64bd\n9d4babfa77ab2bd1a3cefb6678e0921b\nba95f18e030b2f35c9cd41090518092f\na1b8c1873a66f158f0aa1584c9b5ef55\nc9350c9993b20a05bdffbeef153bafba\n3e983042bce1b0c8b07c5433cc04dfc1\n57fcc5ec8be65ddc3f4f9dca56593346\n07ae20d0be677d0b35e9846f79fdb769\n12fa30d9fe153c0f2526f3da3f7ff0ad\n421aa59085af3de8b07d14fc995e8566\n6f80dc929ddca7ad9f980606cea38bad\n5e930f4078ec6770719b82e7cfbc8c73\n6c4d8a43cc2a976ce1de2c7bbdcd426e\nc50368ae5e839e9224eb0947f06fc605\nb05afa5a38af95de08d3ea2b3bd78a84\n765d18c2508923e7de70b47fbf3b183b\n5bccf43a5d06be572af2bf934df0aa59\n53fb844b56da888376ba98952e44165f\n3e9ddeb7e698a4a5a5ec158ed2df5bf2\n19bf32b8725ec794d434280902d78e18\nbf71f08c7bd8624a228c05556cb3d8f7\nb140670bbb9e4cb457b941ba6eab9750\nf31b155a3d4f446f6b696077e8ce477d\n3740570a423feec44c2a759225a9fcf9\nc50867a39874650a117304e749b4dcc6\nba05a5b4d1c90e69b6da7da8b50a5c26\nd1ef05226d77bcc2d12f52b057bdc1f3\n1e60dbbad25e192a1c732411c017ae8e\n3a5e0978ba80e9630664343e14895dba\n7ea9fa4a980974c9f5c1cab9b0491de7\n0111522949b56c3e71bd5be437bb0fd5\nd24c711703fbfccba5db385176939345\n4f8cac94e8bc1f17fc4871ff26abdfa1\nd2b0651f86424ea8e74202fd37745933\n3c56ab9d65e1a1dfd4a6394026cf335e\nce806d916373a9bb80565f811e4c0dca\n3fde6a56bf0a7f0aca5eb3f7231fed74\n7e8a1dc61a3c8e9528920253383e6fa9\ne8840c312112f9aa7568a77bfebb983d\n98984e78fde3e2c9ad475438dbad815b\n7f4d3e34dc8da98e10f188d7f14c54ea\n2a97dd5683fe2d161936007b4e8ac1eb\ne24281fa015e84ee99c49bc1ed2b073a\n5adb1c7b2ac920e80b7cf28cf814abef\n72f5ac05e0bb374a18d2fad9d089faf2\n2e0650a16cb4feeb9b5d7160027d2635\n8ed6c103906ab21b27fc2003440ba640\n33a3313205e7cbe1cf7fc3936b7f8067\n0e77d88887f2557bcd7d2b8034d91458\n84cfc36471a437eba211476c37dcf42f\nf14e1cd3fdc24ae20c2a195d67041c35\nae5fb44c28fd9df392ec1417c650d745\nae92fefabc8e5d44a6a6ab78c5e234ec\n162aad3402a59ada80fbd661aab729e9\n65059a3c815870df72e21d3f53819582\naac3d6e704a2701320f88b62cd19a567\n09db734dfb9f2fde44c564ff3ac43727\nd1ba4d7f5b7689c8a8a2e8aa2b21be3d\n3922d962b6f61c0aea39b0ce1677c5a0\n74949ef58bcb1bda3ccfbb1647de6e53\n6e06819ed31be0446adf1cd22514761e\neacbe4d1b2dee530eee7460477877c4d\n9f198fc7cf9ed327ef12239ba9873e90\n702d7ed678164b4c7efee1358abf86ab\nbbe80e26b5e6b61ceb584c99ff481adb\ndb7e8550fc25318cf7120af46408c62b\n6832760c12105560a2bbb16eb556bd7d\n8ac780c05999fa7f1605d272218449da\n12f872b3b1e4120dc4ae7eb6d5051b96\nb3de8676221a4ef963de3d0f89a8cc98\n35ec570b5cf06db442d24817ba47a4ee\nbdc5e31ecb60788c39fa8c9939c62d79\n573e8d0326f62b9a8f23c93b35093911\ne757cb8c6e57bd2f8b80eaab8f94e469\nb1f1c487c1dcf8c4d3c02a0381259873\n5a02255f16aaa1f2b1c47846fabf735b\na7cf24f7419fd981d559528c30eb815f\n90978c8edad36d5faac226d8edc50226\ne1c44f9dd5454a5dda529f03e4843316\nb4e3ac6b7d6f0cbcc41f1314798fe45e\nb9628c4ab9b595f72f280b90c4fd093d\n84f3aeb7ef19b63b53716ae23dcade51\n12884e5ca2c9e27244f60438c02b5698\n60e20a6f0936b9805a6969ce96096dcc\nc24f1a111cfc497ac7185d7b91f03422\n18d0cd1c73f72466b950e60760349cce\na4d059f7d13a47ad13fc9770de044579\nd7a403af9dee898144ce96676e3adb52\n6988f9f58fa9d01ed6c147466f09db29\n4cd638b44a9388b363add2905fb6240f\naf5db9f454f570d6169dcba4bb1f246b\n7974e7ad4633a7426fc13b3cf80da175\nf9057d95c99a4e287a2e903299618ba0\ncac7c16b018c62f7aa3b3d154134cc1f\n53176aa91b2381819e1d8da7a765f7f5\n0ea04045156ec98752d69ab7c4b3f215\ne83b65d87ea5b50f88ec4829fe61c6ac\n14f4e2f5123f67357ecb5a475255c697\n0cfef798bebb03ca7f9280a580478d59\n33c595f42483b4ad1c64680b32ef4b52\n5003509b9e91c3bc5667ca217ef41da9\n9e603676ad3ad683dec432a17d86e47c\nc418df151dd4046575d7c83ab07f7661\n8bc5026b8b381bcd5915390a649d4671\nbea0094b9f201178db1b183f804f5de6\n2dc23baa9c532eb4a19973aeb3fc9292\na3772124741fdf4e8a40984bbf4dab0e\nd1d940769b09a44343942c00a814f510\nade9ea04fd370026060d0d7647b5f087\n86ec01a566a2cb1164789669bf131be6\n2a9544b78ca6c8798091a6a32e89e8e0\n32135b36fd0fdeb23da1c17f7b21c160\n34db4741071c7ba0fda95ae6af6b5a78\n1c7eff6b97175d6770e781543513793d\nbd4bec0de0eb14386554e60ba07824ab\n611b6d5d3dcb7b0fbb50fb893a3d8438\n26cb36f0e04ea6270b331d352e0ee694\n4724c7a3abad11c8e588a654052b963d\n585eab4bb8b80bd5af2978f2c973535b\nc954d75b8b9b5b6cb8dee07b8d0ce1ed\n64bebbfc021fc814c3a9c932b72215e0\n6bbecd52253d9934ce2e4f2c6e3f7b30\n92a18b5f4b93a54360fd7c3126c8a631\n8381c99f0d912d037a99eeac50363a7b\n029f03e6624a67393424f5c0cb5b1087\n2720be193612aec156b3836018d89468\n81e6ab76f31d7069d83f2a500164d345\n411730635b02ec4c337d87d7c290dd45\n8e01478256c3b8110de5c6f01a767fb1\n9df6d2f14b7c14871c415ad0766142ca\nf2e50d503396c297d13284d7849c9846\n510cff4360eb764e8b044b33503dd67e\n75c345e1f775c5187a05700aab2dff98\ne8e4bbf6b9f97db11a5b23ddc7141701\na943f5ff506ee6198e996333e0b672b1\n71527b1940635288412469089ccb3c64\n451e20aff0f489cd2f7d4d73533aa961\ned2e2125f798e813ce37e92add49bd14\n19a8ded47af288b084dc9bf943a3dfc4\n8b485f74d3fdbb556da5a54885784e7c\ne8a9d66a3824eb1985ebe2da5d626660\n4433035c9fedf71d01254faafa9b8850\n375f498d74e9d6007b53455099293822\n9639d6b5936e156abb9eafb2ee3eb1a4\ne8a3b06fb1d2688cf841a0a397714d32\nc88aa9bcff4f42f82ba914087b6c4f57\n276c2074d5334a6b9a3f84173a0be62f\nf6728fefe0aa40d83e43039ad2fa990d\n0f186d67e3ea726801526e6bd45a1b6e\ndb523bb90f560bf490cba45f26dd44f5\ndde283e42547027b70dd441361c89051\na8bfcc7fdd9414c7bbddbadc8ebcb87a\n3da2efec9e95ac38bfbd63a8351624da\n6bbf6fbd2130b55b416f3c5f83124c04\n37087753a8af8805dfd02b99af1da7fc\n912a74aea60b59718b56fd6a2c2942aa\nea38813ca046681a19efcefe5d2136de\n005d7a55ce42c927d6ec4046bf5ec4b4\n645aedc8a285fef107aaa656bef82788\n7e980571597eb345a3edfb5f0b090f28\n3b5d5c3712955042212316173ccf37be\n30cf3d7d133b08543cb6c8933c29dfd7\nbe5150997fa0e113ecf457f099fb35a7\n8f877cc990b6c05632cbf24c02957e28\nb7ee3531c0640e07d45978804005b1a6\n12a3523941bd398900367f4a18a97562\n4bad2dd5c709fadeaee226acb4f65b48\ne5aeeb730fd2f0a69491cbe27585d123\n75b7355c2f04cc7f08003d029710a99a\nc474302c13743e0e5632fb33300ba4b9\nce771bb33a2a445c8e616a88ec29c517\ne69182d9fce334d351d1e0875f1fd871\n4d5ba9968ac99068d8b126e4edd447b3\n907b699b97abc727c0413aa86e2792e6\n145cafb4dd8c932143b72b08c7d8b6ee\n8db8e4358f1f4480f9501ba3f82be09d\nfd8d01f2d8226596278785a30dfed968\n146cd3d5e33fce539409b6411d9ebfd2\ne8c7a1827eafd0c6559fae70c10811ec\n4491010d383d0a1a9bb70f8dc08e1aa8\n55b41eb3720ddd2ab0a37a77afacb26a\n0a5387a0f82c4e5613d5a7baeb4f15f9\n84c805ca4fc0d0d9e47045df156b8d08\n0c2497c8d15a4319fe5eac2fba0975ca\nbfacf1e22e8e792a929b74f5872f32d2\n90b3a5f70914589b360682c99456eb88\n0800c1ac3525303007a51fc477d21576\ndc34e14bac311c83916e86ddb09ea3cd\nab8d71b3fdce92efd8bdf29cffd36116\n3dff01cf122e6cfb840adfe0623a7bad\ne7e1e4ea59a5b16f5eee88b81d8d041e\ncc4922508743906e8b3f14f6dddb95fd\n9c2cbd504ac61ea0db87a785b979ecf8\n81169b83100bbac4b44e4209e007cf05\n4f3dc24fb38437da00ac129987b6f23c\ne5d0453e6d24c001a44e3f0c2e30f61b\n2c3efb2c81465caa1956a82cdac0faac\n9f649d576069d1b95773945d74e16a43\n631e6be633e541829635ab556a43e9ef\n18e21ea395b983d41b788db29f300323\nd9bba6f9f1bb8fe13d9859bc23dc7e0b\n3cf29afdc796e0ad36ada4abf96f3ac0\nebbb5bdacb26fdd2cef48867e4a59558\n489715c5608f76b1b4e64c631d813a43\n35eb7f24570d077b889fbc684c1f985a\ne9183f3e37c8bb045ccf033fcd73d4f4\n5532a2e760f3b0a8a96fb5103dfb4b67\n0d7774aca946c050fd8555e4b8769c99\ncfa0d236bb656e502d788202aed18449\nff62741ba96c0b0501ee056d41c5237f\nd8ead32e4da9fc0b1de7f533af386ac6\n8c7868d168fbacf6262f4631f72856b2\n70e97c324b0aeef136a2feb9baaa841d\n7d3915f62ba14841036d7e5b9b8af65b\nb3ca2da3b9ccd292662871ac36ef9efd\ncbea9c4d4ef5f2e5c541e59bea296540\n6590b33a2eafe467c81e87f27338b08e\n3b4df51f8f8f3229cb4b950d4f8b9175\n1c73c19ee0cf6582ee8d458bab1e2330\n1e59dd43bb6eb0ff21785aa255074fcb\n224c7242ca5856fc63f2ae749062b105\n6ab8ac4cca99c0c7c9629adcc1c67b59\n3a3f3b6e914f44b37c6f00d17bffd76a\nb35e5cb85601b7007f9eb635200ea488\n3156879b07b391d80de0ce8c437bc66b\n85af4f7cb17735c516637445d513dc72\n6520bb961105290269b698f318edea99\n653f431628bae5b65c97afd728406d1c\n4997759aaff28ee8e3afedd462ea3a16\nf7380998b99a23af0c4c4edf3e923b44\ndf0e9fdf9333babc4a493eafde9630cd\nadcb4621dc4a49ac5da1b073c4dbac21\n419d7f961416c4958dbd1b2dcd24946b\n9c0da952b0fa5e39faa2f9a44b2b581f\na29bec6f5385ecbc761a9a047770c9bc\n0c1c633cce6bb150afabdcd84ee4ac9e\nce3e4920b2764ce657ba9562292dbc36\ne066f68b3b991cb80a9744f56c798ad7\n1b6ac132209bf365156bedc3bb31e4a7\ncbf19975f168298c0d10f1b5380ba931\nee931b43b77590e3ceb5c5c2c9df7a40\nfd9b17cc39d1cd808aeb629cddf8d217\nd9e44ab1a54eadafaa7ceff2bf6eda6e\ndde264268c19f8fc2e64ce5cdfe24c1e\n600fd931a2b28640280ae28bf1b31d81\n5a4444883a12ac73b5c074f24d7148f0\n5edd1d281b7e630f3c642460454ad14e\na11771b4da6c579b5cf6c2b0fa05d918\n7f5e05c17fc87ee964c612ccb4992642\nc459bdc27fcaad4acb4f51a9336fe7f3\n594a5d9356a8defbf5dac10cc06e9fda\n4f98663772651c870e911982e991d0d9\ndf0f926016e3ea1f5ffbe27788756898\n5a8a490b9035f1641149a15c2190a78c\n85814f1e9c8b96a7199d1caf5531d2a0\ncba8daf74a2cdb83b76172b834dffa5c\nef505646c3218799c108906fe05e8345\n7e4d192900b29565450a90c350b1e7a8\nb55d448e88212f8f6ff3e6949e230d0e\nc3a7806aecf1bd627f50d2c4bea5cb4f\n1cd03c23edea3b571f3ede33cca21618\nc4f3d4eced61c6d57ecd3dd30791ffe8\n00e26edda4f39fb757953521cce74bd0\n64877f73ab73711f107f982fe16b66ab\n19d955d1dd433d656b63d2dc267f3197\n5b02e2b85864662aeac6c0960ca6698a\n2cdb0301c8e628a0503ddd7955efc9f1\ne4ef8847482d240d0a3ac612876ba8d1\nece5a95b7001144527d7ccc645b6f29c\nccbb2ca3f38cbce9cda46767b2ad4516\n139c7130afacfdc952511c8979e1c4ab\n8bccdb5b75987b19e5ec76bc2b285ed5\n475bcbf75f895f35f28605f0c94ca801\nc647a4a59653d8e296090433da7e26cf\n7184935a166265c9f5e953482d3d102a\n99df69f80e72a660346459fa63c31fd4\n87e0ba451e31e9f8133d684e924a3db0\ne1e790cbd81f5ddd9805764f24e36ba6\nb79e6957f5d6abefdf44cb317fcde740\nafa47615d8062713f2e07106e306934b\n885b142d558300384c58032b53948abc\n882a65083dac96f07ed4c3121f44582e\na63d1c69381a57c6007ace7215dcae81\n06fc88f1a4b29d7d1834affa8f8f3190\na49547b8fa61cde57332fdfea1af18ea\n3aa2cd35731e9a93e79fd1cde1a83b46\n39bf622a908b8b7772730b2402c0b974\n6205aba5357d5f5a134c269051da00c5\nd5ef04e2c7c44db101507e222496b290\n062d2b045f09378ceb59814098d27137\n6da70764e54687afd113510668d4930e\n590b6c26778995e093b19cce11a28be7\n798e5e50fa3f5c2374d833d78a4da2d3\n3dcfcd4ad7ee36369f216980ce74d57f\n053ae3fe7ad9cba05fc4247c5a334c93\n2366aba7b0eb699748edb25f514a7cf5\na61e73978d2f471e5fdd288a2ed21398\nd30bfba83a84196423735e6eb604561f\n2524f24ebb13b60f724d8e1f5857f5e0\n9a944aafb565387318ca04b7e60a5a04\n784249cedf45926260238a7b0533f495\n8e7a3dfe74492f7aeaccaa266d66c05d\ne7c8fdfc609077984e2fa74212f6a748\n75907d8592cfc66fc06bc641f7dbeb65\n350c983f5d4be34834c3a7f826f82218\n5ab6fb8bc4e43974c6e06df8c90d3848\nef7ecb543e4118f66a32e385f01187ce\n3b429879780ca7737732b919fa0007bc\nf68db142742c6ee83d68f3c8d6f13070\n93f17cb45a171ac173a7196f670a8339\n7834dadcdb71e148646ede9a42e7d1d4\nb63a2720e9616c4892b7275de8a305da\n3f4bf553ce7fb7a748434863d4d5fb51\nd07dc549f06c9e32a33716553dfbcf4b\nc737fe6f4f7f3652f660c6f647770f2a\n1bdaf89255fc5013f0105bca68fbe3af\n8add954a2134695b9cb3cc945fb9024d\ndfaa66a6b4a619f18cf65bebf1b13d20\nc9f2f2f737a681ace48c1f330a8559a0\n987ddd03eb3f374d0d60e5d5b53852e5\n6437dbf5334ade3d492b69993e166f59\na6d13cd69feab44de1a69a0221b0c575\n2ae6e105676f63934631a6c423743b20\nc9bb6ef03eeb2d87220e5250cb5cbccb\n1725903835e8f0974acbb8e9031dbe98\n1b454cc4ad133b2a5395f5e969aba718\n5fbacc081126c48528341c89b877de7c\n5543471f94fcfda2293d0b57e089ba1f\n155ea5291f260b562fd70b20e64f08cd\n2cd6ee2c70b0bde53fbe6cac3c8b8bb1\nb39bfc0e26a30024c76e4dcb8a1eae87\n21f241cccaa5cfa33190f56ff1510e37\n0a8bb56fc873c195bf7117af925c7f08\nb0fabbc9cc1abb944e3a4862267710a2\n9777e4cb6f78cf294c754fe71f24ca66\n7e8853a8645f6d6926df9a789efad80f\n438dab4eddb2ce06cfda8778a0e16f81\n57c3808c5f394907f866d61f2d005893\n168b734173a337f5d513117e1fe433bd\n6e56a420eb5f31c3dd8491872fa2d687\n655d72b032b06c02b6c973eb220bee1a\na349df2f34eb19b2983867796e011047\n660a21f8821c74d20587395c9aade447\n353a3c1df73c9e1c2caa2642c21b68e0\n6b72b1396ec951a35c2422f8d6e53e4d\n72ab237210d032602bda88dcb4b845ca\n2caba222b310eecbaefc511ffe708df9\na4fff2b0beea011aaf5dcf0635a13b6d\ncb1c057858afd1df5d96d199cafb1910\n30ee64599c34277d9cb28422a83381f4\ne76b25a75aa6fde9b13bb76dfd60deff\n12a36a073da1482933e42a7ae789546a\na07d11cf317fcd61fd2cc1c482d92348\n7ea70bd4da4754db45b52c36c673b75b\nf25c56c8372366cba86959e164da7380\n632217606a5333bd4ace6fcccf6e3ebe\n73b6ce9500f783c59b1b739f2fb33ca7\n64cb645eae26cba95123cc8d81f44d90\nf7c4ef052eaa1bf8baf1d59f62a75c7e\nfc7ebd1688f22b85ae243f2852a2e850\nb8d92886fde9201f6fe55dc667efb694\ndaf45bab624ad7d4ce0f30b2e505ecbc\n3757bda1c2a5146e2e58fe8bd7b3ea5e\n06eca3bac3cec0b51e484c7288e61dfa\nb8596978550a171a396b777057a53f16\n4146d121df055920cd2a1971ea0c68f3\n9c535410c73287a9b25a175d7df7af52\n55ffebfc109f2adff3117c9c12ad78a8\n42e7b6f9f73ff9c0e8d94753f3b7f4eb\n2f300505b36b9cc5782db7e1f3409beb\nd14d804f4fceabc77688b85044e7ad79\n6126eac0fa4a9f14b608d1fd75f2f833\neabc75344b4cd1c04437f8b02e9412bd\na069a475f8555844edd07cf607547b59\n0a8d5195759ab66db4fb667f50f8c654\nf0300603ad3212b76a3af006960a471e\n4bb31e1ce88a87a73fd7a5089cf54430\na245ded7bdfab9e8c89351a576e132eb\n0512553f40c5fb668b9c87d3c584b695\n9fe0dab21dd5a88f15caabc04ba921be\n188dcd03b0287a162ddd547540b2eb74\nc13fcf332f9e43850422ec213531d222\n65e9d56a653a7040c681c30f472d1adb\n5d4bb9c4f21f64970c49d0929e94f335\na4729875bf34abd1901ad0cf5bc3a83e\n582dbaef0ef6d6e1d1ada6dca3433cf5\nec7f11b78c5d92eb5e27c294c7512b47\naaf6aa594ff8675c7bea8e4f4513e6ac\n870c06c00566c4fb1861bb10f34d1904\nb50ca9d003ff7611453a2f066eb1b949\n172a565f1c833634fd38176b4934e9ec\n0c22f99bd4736d8ebbb0ecda75e7b254\n16277831884dcdd76345feb8ec873f04\n3a9334fdb39fd04400e4163ea4e3ef96\n0ac59710ee0bd76214e8bf8bdb5913a6\nbae539678db1c2d10aeca0fb88fab5df\ndd69b5ce06c72e17b9aae7c8bdff212d\nc8b2d0a42ff593b24fcf71f4409e94e3\nd787b98a724e5507c0aaf771d21b0707\n90c2e3f41a95f9fcd35174efc60bef4e\nd63b21b1c4e41c138e4a1bc56e69de52\n85cc946febe51aedce1e449c8f85ad37\nb346244cf4e3e5622e5f4b088227a8f3\n162491aaf3aeb4aedc1a57d5c8d9e03c\n7842933040fe211dabcc744273796423\nf3886e4264a02fcd3f0c8f7df9900d06\n04b0a0b4ae28443a21696f00f84fa041\n0b815c7c8313884c6b5a62c742c70f04\ne6cfd032e8349788ecf88e4b399c4697\n37fbac1d00038d4b23c48ff99416f620\n024806f2fa97902441809b55769a3504\nab45692266285b0e96c6e0972220f445\nec1bebaea2c042beb68f7679ddd106a4\n8324097cef4071d57ed0598d79c90454\nf2f43598425351e9f8ad38fef569861d\n09f8d77d81471c6942d29bad3e877e3f\n820db91ca24e2a85584f94ee8ac38a44\n910158dff61f2e7e3da9c50f8db65279\n36734ac8d0c7eb30975d0fd06c2a829c\n32560b254cf740d40ffa08b88966aabc\nc463e91ad6440efcf637a78054a11e06\ndf986424e928faea635b4a184544e060\n9a1a61384c80a1b29d98d2795d72d1ef\ndc0101afda6cb162a3637a91ca7a827f\n2766df3ec0af8302635dfc78667b401c\n2dc01cfdbdcb268cfbcf04f63527e762\n8671f7a34351d45cff3967427eebc400\n5e9b13ce8f6c99f3f510756be58d15fe\n84cd2e898a12572835ee037140b08c08\nf4adb0274b7899917dc56079e3afeeb8\na0780fb04e1ad0cae6fe5c95a049bb60\n472aa0a968778d3e7d69602a206a27db\nbea14d5edce519452205a1f64cab030f\nec993e37366b1a07cc91b851f08fd80a\n4ded49b9cd7972b7ca94ef9acb8fce57\nddf9f78b3b3e80163db7175d75745b60\n7bec05fd83f3383338f6698d02654090\nce2b608fe9b88c5a262ff3d471e555b5\na5ad12eb6447538f19c5182a390514fa\n3ac0e8403af6097c14e8083175483f67\nb42d16b09e2d87464ce31035600caf54\n18392125c194dd5cdd44f0215f561126\n8881311e3a950631029f84587e65a942\n023c93b041d7bf418cc63004a6b7901c\n3b002f86d83e3a588cb4117e67187d46\n6f66ac531eb146efe2ec95860432cb85\n9925932ef174e7740582468f85c009c2\n79554b9d2cebe5dcb5e7b0850a71990b\nc82efc885941f322df48ac4ab17e0d8e\n4270fe89cd843b7c89b25bb7a4f7c8bb\n3b1b1171ef7ef0fd8496239f075ebe50\n3b0811881fe50b3c02dc4d88ac6aebd2\n39496aae59747762fa8afa07eba66604\n20a882c5c27d7d7200ed5f431204314f\nd04fa11f7880f330c284bff3f44f42fb\n21f28a21be425954db1b9733becde51c\na09ccac39e223c74d65475c6ac6efd46\n5bd88970ded34f9fb49bd56506eff1e7\n4ae6151322c641f79976171e063432fd\ne41fa4996f83af7a92f0766f598e73f3\nc947deefcce5fffe809a126c051d1a17\nea02e278d682585f3701c2f70de84797\n05cac50f47bd9793a1578ddc85de1393\nf731a7e59ba590c321938604cf5261d0\n6d2f46756bc6ae75fd6da229bf2236fd\n60d5ed1382ec436c76231088a23a886c\n8b64d6a283ff6c0a06d162dfd2761bc3\n90a1d0ea3781f5a5e26ce683b0fc4680\na75786122245112f9ef5f66dba74bd7e\nc749bc8ed9ee74655dbb77131b128165\n867219bcf045d756843f8fe25c10dd05\n03f898cdeb1e74a793f06ba8e8b8d189\n39102a856fcf320ca699fbfa3518044c\ne0245218c870303e62d86b3dd9263fe9\n489771d6be71fe00f9985977715b1fe5\n90543dbabc2d34ffa16a1854f41e6efc\n4536a917c69224150c61d26d7b542017\n7f81229428fb73b082b73291dc6d9de5\n935a81b4624c9fc7ebbb6fe897fb422b\n390a861939ab9c0648a077f2dbe16f8d\ne7376bf7a5e1e85fd9e281d7ff155369\n9aa20ad2ce464d5cba2a1dd9110082e1\nf2c35a0cd41c7b2d68aeab03c21d236f\nf2f9f0764e0f2f076ed48f58dc42a987\n172b65837ccd1720add44ed58c149229\ncfbe059b012cc037804c545e569abda1\nb0c0a0430bff443c69466277a164a082\nd8d5c2e8c563c0ce52066ef5250b2f38\n7844a93ad4b97169834dade975b5beff\n3339c3b5d0f0a25b93f02e49df07d5e1\n228c88c6701bdfd0b1421a384b01d050\n0a3614ac2191733cc08ca94533e1a595\n88557f2ef5212999218bec54df8b07c7\nd4e997e0ed397b4f890b8372088980cc\ne1855b2b72e259546e9d410871de7be1\n8b7f29715459bacc9b2025915ba2bb30\n70abbe62146ce9d168a28cf2a34f9abf\ne56c4cb6aa23185090ac6206bb494757\na4f0a7724629839d3c88c511ccef2168\n6c6743cdf63bc5947e48c9d5653756fb\n57c01752c12b8ff1169a4a706963feb0\n76a804fb7666253284e297d58c388eb7\ncc7bbc4897158ad81a183f1e2d8cb4dc\n28d07647484f1751aab8baa5f22b806b\n60bfc2a7607f077ad33a75964b508494\n1f5e5e1209a69f3fee070d32a3df7008\ne08f79a86a97dfc31fc56c06cbaddfbf\nbc626609a0d56cb6e13e92a5c3dc35b2\n36bdf4e45bcaf8ece61179de5eed3645\n576d2a9b1d1a083d47baf9bd5229d3a6\n482be40cbf880102c2c1914dccf7130d\n53a5a9e0908dbf8e3389738abc627e5f\nbe64c52db00822470e4ec96de98e1f5e\nc5b6b391bee206cedf9045309b331e8d\nabdc582fd25c0c7b1782aa24c995c01e\n220d922e3912de23b20b5ca4e3c661f5\n2dacd278744e75ce3c66a4de9382f029\nf8b7ee9d043526e763a4f9be12095a8d\ndb1a08ee5e167986ee10231a334ebbc1\nfd4f01d54d318fbb78940080bc03ea38\n0f33bf8340366f1bdabbbacd5a4a25d5\n0acf855839da006911413eb5bb07880b\nf42f53a636441dd43451f4b652179bc9\ne860fd5fe8a726d23739d6b683fb41d6\na20d5f61eb5e82bf21be35c03013681f\n8c9c3dd552582bb0ee67f93792cd6ea5\nadbb4c8ee1705c7767b79b8a80b0f9a7\n4c4911bd82776420ecd63ed189959957\n313a40f227cabf2ce724274de7a13a56\nae7ccd1fa8900966addf037d0c75f5d0\n7f4a5d5ffa93955d10121970174f6c6d\nebbe1ab92031af8fa803b4373bb57bbe\n63d9123b6c4b87a5d00f1c44fcb2881b\n6ce90c414e67272877c3c0d4c382ee40\ne9b3fbfd1075a3f48bcfbb41cf5ece1b\n52b6ed30322060bceef6ff6a2ca15f89\n17fe18949c58b3773131d82fbe999f92\n371bd3cb7e2ba4a530f1055f376a72bd\na00fa0818334449eb754c47ee563ad8e\n22ff89dddcf854bd06d5187e355f1171\nb5b61e4b59c55beb3dd82d7c9aac7054\nf1f417a295add7bd2ef3e3282837d6d2\ne32d0bf2283296a4640b2125d6f3d810\nc514939fdd61df26b103925a5122b356\n0d3c88fa0c0b58081785a12486cfeda9\n8cea315ee9ea02bb13b3041905448cd9\n914a3a4b3edbba0b371c91d8273b7332\nfa395ab7c87d964567e98ee752ac7550\n409d9509ff5f5d17516d0bd75590c175\n2b121a69e64651df9867a7232ea0498b\nec4ac1723672e1edb6011ae3a7119a5b\n66ebc15e23071192ed21a827f2fa0641\n02f86e13cde03ea48467ef4003e5ebe9\nf4cb56a17064f07f1b094e0d783e491e\n1df53155fb2189aeb683cb2ac19d68ac\n36933361cd35db24380e88bd5b15a9d7\n66c25ef2b94c400f241dfd73581ac10b\n091ddbed5d5b2d4575ada10b7f38e6f2\n2dbf88612e33e829e48b00e52447822b\n1051591d17b70012589e63ae43ee2619\ne7d4b7f9663d84668deb11c8f75dcc5c\nf536b6206f808e342036e3e184b31927\n2577b7ea7a278f17a763b8bd9aa28040\n339f04168b5eb298c563d01d647cde8a\ndd94f18dedfabca95cfc6c00d1617188\n0fca8df25660b84f1a848c69bf62ca6a\ndbf5e4b5b9bf693d19231117e582eeab\ne61530dc961f3c0996e3ccff4c42a5f6\n295f7622a569f114ba19c3834c123820\n6d65a8ddb434a4bd8718c368e9121993\n9c38bfc2106cb5971bf605f766db4aa3\nb9f5460b267ab199022ec9676093dd2f\n4f273d6517c65b735e5c2dcf2e68e3b2\n3d7303ee5a2e2b1d06e7fbddcc9f88e8\neead6d82ef91e50a280b355c74f9376d\n313ea8e87f1b1071cee5b5dac4b19d39\nfbebe22335c34280498c5fcef48ed6f3\nfdf7dc0a8881232b9b0d77ba088b6839\nf77c5cc9a274cfb9a9ae1ae5f880966a\n49da2132b47a6616d6e7edc57c41f3f2\n25a6246164da98e1cd52814e945bb25f\ne3182531929bfbfaf46cc5f87f6810ca\nbc0c1ea54dcb4b55148df05c58daa9a7\ndf7a3e7664b6d313f6d756404936a80f\nfb12befa3647072c8fe7b6c615b999c4\n505e94aa203c27174b4aca88cfed3d45\n38aae23582c46ea07c279ac6811e621c\n9684c07c27db459515d294a52fef60a9\n065423951c1e41c8e76642b4d78d4a0a\ne31dd9f06fef4d4b20ca4f77a8f9beec\nee08f3bbbf97a564feb96ab8ced669d7\n11dffa03d71f256fde07b15bcbdf6e49\n1844f7ff0014e34ed84640c824e48562\n5986004ecb772a0d04466f414169f54a\n2bd96edd4fb940e46066079a86a8e88b\n826da96234df63dedcd1a6bb52dae0d4\nf46d5ae1f1684feec202815975b3b2a4\n310393cdc704baffff7f2f2ef3548e3a\nec6140f49ff3f383d464f60042e8d3c1\n6ab7488619c799d6c2a86559929aebc3\nef6e2ed0862edd77b0e53d50fd100243\n94b6593af44236421c74082f0b06ac67\nc6f8db20bbbec121f5d61a40bbe458b9\n803b54502b403997d289059b522617b6\n58b61c700395612ff31bdfec6b6db18d\nb97a77fc852aa62d29d2aaa9e793785c\na16a04b3f03fd908b85ffa36ad29422a\n059e4e9de9219809fcd20d9946bad2ed\n8b9b7b7e11582c3b9dae020ffc6c2af2\n98e7a008c4916bf75e3ee330c99955c5\nbb12f226944e0637e37992b472f5d28a\n2f537882b03196eaf7e495077aa0b371\nd125f943c4d92c547992b509e5530cb3\nbb478d557c0fe1f98cb082f31e0f5a58\n71cd26051582343224bdfe70e77ac64b\n11968a7e86e40aeef7e91750f282f8bf\na7ad0f0f33b2006e7363c0fdf45b3b90\n23394b5f1f60e0c30e6a9ce5d76c5122\nf75b8179e4bbe7e2b4a074dcef62de95\ne66545a2155380046fce3fdbd32a6b4f\n68ba00eb6995aeecb19773a27bf81b3d\n8f8691cd41a1c3d93c130e6e4435d9c5\n000e497a465ee1e6a23dda65fb9c746d\nc645dea65bb482e04c8dda4e0c1def22\nb253bb6660601b0045d0de045b5ba70f\n6210a07b13188cfcdd8541eaea599d73\naec4c4a7fe9da9a76508d2b14812a58b\n6413a26d41df3a7b075c32e18dcff634\n4158accc53d5e565ba5cfb26a071042c\nbc461a38626c0e1f1c334674458216fd\nf18dcf73916cb6e85520017448703763\n11fdab71a3283112484bffc827ede93d\n84ce36d241b5793252fcc3e724e79a16\nafada380375374d22c05c8cbb3755e0a\n3e70d8ab970694b058abe6c717cbe4b9\n36082ed73973bd473bade249d1a4683c\n0fca532ffc85a953dab09f0b8f3898ba\n27e791d563c8384f713fb41390bf91a9\n5a3dc9f27c53b1ba6e1487d00087f4f3\n9c37a33325cc4ac7ffe8ca5783020648\nf5633dde9ed6530ad661e7b97b9ad48e\na97f0a2410f3825a2d90d3e0f3b5cdd6\n6cad61ab61cda6ada9e01cd7ca300454\n5e3ed3a061f1407cb6e6f11de09501ca\n108725b979eb469bb716566b809182e1\n684c18ba54604079a9c7911730529180\n441031a6ca69276ee7fd7977704fbfb9\n6ca0b3c905c0ddaba60e08bfa9a9b8bd\nfe2cd1022800d7ff786c811be0648bfc\n256c795ac8222d4f90ea836d69687b68\nd1eab9a647e0f9c5e330431a6895b48d\n27bf4c857026a3b9fbaa495c58359c3e\n28b1ccddf00a827b6bafb1817967c9ac\n85a4cbb7b09a2bfef23a40dda6effd54\ne60d1020b0746b5e0b4a24793adcb5f0\n185b29e63044d9881d7f470a71a2f65e\n6a01e6980d28d6786895fe27e4b4852c\n5500d0c4c5038096da1559ab7e320ce0\nb86051bdf920328c2b30960d00a29cc6\n9dce8aadbffc34a760659c3c74719807\ne8f8382cc9f096625916049b1340e314\na3572d01c1979d47e37ae47a795d04db\n4cdcdc524a20b80627b9ef93fff5ed12\na14df5247c82fcdd98f261769116aa72\n268d9b68d35cfdf0c169861f9e863ec5\n6fe6c516b4dfb05f29eaba7e31f34963\ned990ce8195fa7ddfe206e15a8ea2d44\n392be9cf4cdb39539d1f20eaa62d5744\nc614739f701280cf1c20cc01beb3bd3a\n76dec88889c576d7f888eea53f2cdf81\n74851aba1402e97a59a68fe50fcf59c1\n3d1edf44ee0e3753c85eda0032d8e50f\nb86d08bd60d98401870b95e9520fea62\n971ff50db55ffc43bdf06674fc81c885\nada9bd2575f98124f2114452eb4be591\nb7676de42cbef632c61df5b358eabd52\naad5c034ac2d6757c1d4d5366ed492c2\n246dda05dcd994c9f779b07940eac844\ne0e49760d7a7a9faf7421e4b2725b828\n62a984af8203a5e93da7a5fc0612694a\n014f932b5ede5ce8d8a7cfc68499c413\n432123b0d803afb0bb2e8a8cce40a1ad\n05daa195d2a98bfc4016a3170671ab0e\n0295fd033b59eebdaa4c94943f30d5b3\n0d63d8460f1b6e60fc25fbb2995a37ce\nebce85276ba5c0220aa00bf8b3916bc0\n2dc26abbf247104b3cbaf7480f62fefd\n6cf42e9b9c0e20277f9e0c70f1e51182\n64ce1da966578e1165baca35674b2b83\nb871c46f60ed3b3e169f66118a2eee18\ncc32a0b1f42bfe935c9886a1980b3fd3\n09e093b88aa3d316d38494aa48365a36\ndd7623ae715d9ea6e3c064c9f7fdfbd9\nb1c438c9a8dac385bb580d121a88a698\ncc34d3f48cca9f9d7f9d1cc1dbb1582a\ne13e949ba1f0210e2f6bbb81fbf7eaf7\n26cbb186accca3b8cf8b824e486b983e\n0f2fa23471511c398c13d01b50f48d01\n6d60481a012b5d32c18f5b90bd913b56\ne546cab54b76511b36a8171a99410247\n3e3efcd1fc8d129dddb97ba92e670a32\n2a6e2bcca861fc1c32feb45798e5fc7b\nb11d506999bef82d783cbaca10c539cb\n2f76db193eac6ad0f152563313673ac9\n701f9749d62c039b304518c86e2d7851\n046abac5664b719c6c34cdebb9dec054\n651905064eb47bb8e32996209dd3c198\n708f8d0cdf905e771f8e18826cc4961b\na9ea6ded63bc1801a82624279a2f2ee1\n9d07fe45ab7045b0763d01234bab4b5e\nbdb3494d7b6f955632e828e1fe60c7f0\n0333122ff4d05647d3d8e691402930eb\n8aef595260cf440c67da223d5a9b3e74\na083d7dafa9bf1c53b682c983a9a0a54\n8fae4b1fab2cf736ad8b6830a3e32c2a\n04f7359edbea0f42ad98a082e060ccef\ndebda4f8462a72850924edbbb0a52a6f\n35a4b1178a4bdeb4203ad38320e7780a\n2c7f94c03bb80182f986399a5efecf78\ne2e065166717c5c296d71e0aeff1e915\n103f053710c05e5e2e1b3cd5d77ef80c\nb1e1d39e4b347ae5a411f173f7caaab1\nbe67006d75ec0aa7219aa4e4417ba0ef\nd709e933ded0564f850bf95ee8b603b4\na564ac418cd52cad3b3d20924b20b3e9\nef25e829ec7d1f3ef96974da34a2651e\n344f99d366ce1983be130a834f97f541\nf6da251269301c757029af3f663596fb\n4dd7b509aa65550d637ceb41822b81c9\n31ca50fd5326ddf1c98efd51d1dabb51\nb302e4159e21fdbff71dab8d8be1a8c0\n83ff7e27e03901ceb2f16e1c14074cc9\nc2e08fa19a2c42cfc88f2611fc24ff25\n5ff01cf5a231158e8309858fbfe8cef4\n29b43ab8628fcb68047af30369c5c0c8\n1a95d48eb31c1832e9b1cc10e1e8c8d8\ne29311f6f1bf1af907f9ef9f44b8328b\n57b8d745384127342f95660d97e1c9c2\n01703329b67a52286ef6e81f84643f85\n01e685ca444e598dee7f2fc508b9bd40\na3769cf77a632d1f36eacd0a2aeb7aed\ne1f8758225e5983e31eee315b61798b6\nc934204059aba504247c0522ad85d52d\n6137cde4893c59f76f005a8123d8e8e6\n8e0421401db22a930150410f6a03bb3f\n8f9a8158ab32b19ac82e727653cb6776\na9564ebc3289b7a14551baf8ad5ec60a\n6f36b833528ac861007e920fcd06df30\n3938971d2e66e083004fb0b31cdf7329\n2b50d2cd21bbda38f0b7cf5b1c1c2a43\nf648b5a4dc7cbda516c2149391552174\n0af464bb9e6ea54188eb4b221ab96029\nfd49f4794e84d32c0ff44a5aa64f009c\n44774e8a2c71b1c3cc1211177d2c638e\nbd9b2db635b47f753e401416cddc5d5d\n50572592b75f8765d639d429a5588621\n213c06c51ed7df6f08e02866c7758cb8\na6907cea5e9cf4a58b2fc0a7d54514fb\n1204bde08617c65fbc54b085bb1b8eb2\n704b481de1af2852815629ab44080116\nf6afb7eef90fcbb623649951714f249d\na1269f45dab88615e9014e23f979db31\nf9aa7015dac694171ac0c906a37325a0\ndddc67806da99ac74af18c6797fd1119\nb406bedf762a7bcbd1512d8e4de839d3\nac92b99ed4e343bdfcd209b52515ee56\nf8444e7f49687f6546d259b6ea271f6c\na9982061a2827a555b5fcbc0ada1bd6a\n64677af9bd755f674e5e84b3b7acd82b\ne6ad1ea292837594d21532a8acb579c8\n0f8c29ca2043513a64e9538d9e700af5\nba0346eb5b13e970b1f6efc3a099ae97\nb242f17d31564e8e37d1dcacf9800592\n4617214e885f3b453d735977619e435e\n8c900ccf8f35c561b651e22add513ce6\n036ecdf2ca5a2eb0c7e16e44396e4b6d\n97866cbdb2037561292b53531360cdaa\nc2f636bbb643da047d9a9f7dfac8f7ee\n61c4675093b2719f8c16866ff52204f7\nde2b14ae7499f90736fc4a92327553a5\n8a7376b7c1f8816003559e6a3ddbba8d\n1d678750144b505bab7845dbb47e9e6a\neb8cf3a7c31f3cf37e6a100ef3f9dc9c\n089bc64bff3199b59952d800914798d4\n98f790e39e9754852ea16a876b8a0a56\n93edaf64d38cdcadff035a1d50825f8f\n3c28d6d37709466e2d4a09fc979039c2\nb060ddfde826c0190e0a8030a28ef99a\n91086569cb14dfc535d90cdcfe83bfa8\n4a65cc98964571888d186bf3a0d825c6\nb9a169b24b1f7c28dc4c91b411fb4c26\n81d3232c9756e8bacf6d91c09dcc6887\naaa6f74cf1b82f0f34b039d4ba0e622b\n26c93302493e6ddb90ba0704a3a62d75\n4f70aeff4b4f5693508bfcba725053d3\n08724e740ec01bc83c0660a983527d91\nb15221482cb94d787524d5d4cd79749a\n24bcfe309b7bad8704fdf76d16fd07e1\nd82d1fc760737a9ab3af4d48a25600eb\nf3caff39d0ef30ced2a7d3fa8065317a\n4d742b2f247bec99b41a60acbebc149a\n676aff885736c4133e985203c30a99e3\na78ea01220dbfcc1310dbddac1cdd7e6\n9ed45e6658ed9785acd48fb66fb4cdd6\n400dc7079f085b337f7b3832c712bc12\n2e0279c1413e7bfbd23e22d89a0e3105\n4f3f7d303d6f72e6f107c2aaeaf6ef63\n3066ebd2ce3f5d2e804d829d9d38dddb\nbcd197897d352c6dfc8146d205816fe4\nd591c86e5d3c3c0feaf3f037abbea160\n9d8f37e0c9fcc656ad620cd5cbe778a4\n29136dbdf4b2eea72929e5b8f839da66\n45f8355f6d467d6a31cf86e1853ad3f4\n4ea49b84f2ba58f0fbe8c4e90b29620d\n273160aefbc66f5a9b78cd45e4fca6c0\na5e10b209aa556df77c6469fec4a570a\nb94a42e5722f58c423e84ff9584aface\n3464e8d8dbe8f67c4203458c7dc35cfb\n018c568f532d5fb21980ab8a57776c08\n0a22336b47960a21b3af4e372b2b3536\na94f69232e52c563d28a75e0c480fd41\naf21629dd0c620abb1df82dc60c3605e\nca55f5b1d19aae0a019b8afb8d995ca9\nb0b33bc113dee07c003c1684774c77df\ne147266d21628764329e9685364d48ad\nbe7d0f9991e2e4da75f06ec1339994d2\n957cea2b74c8a0203c18fc9c0f17978e\n57458f7e3c2e93b984f77f63a304fdf3\n3546003fd73843cea535cdef6aaac814\n4e2ba63476ae19b9cb23f962fb88d131\n32a0c707d600993add35b1c640cbf43f\nadede190e4a34e30b049c04f3939d5b1\nd86a25515f038f4dc8955b0a452ff4bf\n46c0d366b93f168c9143ff7f169b9c0a\nae232214608e552f454e56264b823f30\ncf7c585bfe298c9632fc365f834af170\n215ae54c221a3d5805593a31246af3af\n1ca2e4008dbf3c630f3824f00c67db88\nfa729cfe032a9cb6d531dbc8a16078bf\nd82a8ab19578fe302003865b101cc6c1\n736fb96592d9d58161ab675d6e7787d6\n4a7de4c0bda1dceb1440a3d9ee8ef4fb\na7b6b19453b011ee6080c30b9943bdcb\na764c8c4770d91035947eb1ca90b448a\nad60b612a92ba95359f00b6425372673\n544d3e0d499c159c60a3e2957ccb50bd\n3c211ccbc3cb16b4c5aa81bd9c09063f\ndff077f2380f4c0733a46e554c93719c\nfd4cda0c1609a4295ff6cf67d59d9b64\nd7d8660a90389231b05d6a34ee97e9bd\n6d59d936b3d83e256f0151eec8b99c3f\n672f56fd5d76dfadb097266dd8ae7be2\n9137195e2b56cd1658d420e58b9d3696\n8b129f7b5b8b58871176bd11e8a02a9c\n1343eb86f2b664dedec652aaee952d84\nce0d637ee0ea749393345dd3c6b786da\nd2fb9cd6e4a607f96b2a628d817c0e68\na0b79acc3a59b0aa06b9173513b9caf2\ncced5f5fb3d3e9ca127f0ee7ae8b99e0\n246c377c1682fa6d4cc52e60db4a53d1\n253b826397436dccdda292ef89077e50\n4f636b2093f38f7d46f6ca574c75cdfe\n1ad5054c7e39fffa3859e3f38566b3bd\n349e9f8017fe3a58a48bf3c7dfe4ae7f\n82d4599df33da8d385fca6a0d15e73b8\n7efb4f4f50e296cb3eef7248df006ab6\nde72bba72d7783f7b5e55be9e7111169\ne42d5f60192d1f8f94ce446fff3113b0\nb069b3584c9753191f8c7c5ca64d6ab1\n756e5da9ebc198d3c3a146bdce2858ee\n4573ab29e8ffc5a9b1c3a5d472225c94\n33c4439a987dfe3681cc91cbf07a710d\n8a0623cff8ca2c95523b80568497d312\na9dcf1b60445f33e1aa87e3e72d2b33a\ndd69b32086f1e8856181a551d71aff0c\ncc8d25e9cea8bc4fd8393a36bff98209\ne0d13ef4c966e5b0388185ac4c787c9a\ncfede6be71d1002dfe737c7ac3b686fb\nddaa1f9d8ad3972c9ffb4c66b3f11f9b\n6b69a4275bda2059a48c80fcbfce12e0\nd285e676f4a29aae50177a2629c56bfc\n5e3b66114b9ecfc6ba7d8dd9c5e90452\nad517beba2f5d57a2a3a7bd754b10492\n43a8a4b5447a60f2048603f5183f90b6\n16c1580cc085e0c8879515f75ffe4dfe\ne77d9b8dcb84d1fcd21187b03eac74f1\nfb0677df22a91c5b141dcd572e860550\ncc3953712e935235a7c5be1d7ac68bf3\n28a9fce937a13389c8a5e9a7d5d1fbd9\n3e7845bc2fa17da1c4a093dbae141195\n760c444d3d6bfc5f8ce222448a87590d\ne4283b40ca1a642804bd2409af8b2375\ne3eb3c8c39ad41a68bb182b00386c71a\nae381caaad86c0de9b810274803a79bc\n0b9415e061fc4a9db4c0ffe038af4d55\n78f4ac72f60acd922a403bd00562251a\nde5d84ccc559a94db4203e23afa90d54\n1e2011accf901e76548a1faf55684da8\n210b9c649145ca3e534c0076edefeb8b\n5718e0e30db4c7ce8bc220a7ce2c172b\ne4edbc12f4dc8146656716d63208a51c\n13441e29b4210d9d48e69e28b9d7ccd7\na92a52fa9e8d58da07ad51bf857c4308\na193ac63bce2e2ed1c6378e2f1f6fa20\n73907cca5e5f4ea091bd96bd0cf388c8\n50ab4e04387497d32dbd87ef5e558b95\n81f7adaec9c242416ffd63621f1f5588\neadfa32614c6ebf25f4c929607272a52\n33a817d24bccdb88f94b6174b7da11ec\nd911007c3ef3957a7a1851e78825b375\n000848a969ca91f39a1da9f74f895122\na68992c8883cb8ede10fc1c4434b75f3\nc9fc701e7dc1854a9dd035862a218d67\n3c703600d3cb906f6c7b80f9e2a56bde\nf63ea0dcb3623601545f3bd1ff302f76\nf1441c3960c4cde01cd036d0181495e0\n9c5c240d94962aa58c4f01cd188e427e\nd799d6625f37a65c939a72daa6b76747\n708f11a90f708391e5c855aa91e56ca2\n41ea81d6d670ac6ef9c83bd792057aff\n3882275d653110ec0177e9ba7fc49a82\n50098d0d9694353d1980740837a8fe0f\n452cbb1ea056919ad3747912e5a0254d\ne937502ba8635acc6591c9e92e84cc0c\n2e94f8590103ffef4fb35ecb70db62eb\ne65e2ef52fa30dfbb0635269022184f0\ncb544c506b263b2c479a2e7d5d3b309f\n83330d4408bcd5bb0b216cb78b00fe1a\n6fc60c435119e7ff9de4a0cdb42f5cd2\nea75acb6d51c02b4890c553dadb68652\n61e1b672a593741ff6e6d76ce5ab09cf\n177db2fd00db5a05d5f39476b1ddc50b\nda0d0718b9132afcd91b6f3efe73008b\ne04ce07a6d46a1dbbfea836506f98a24\n50b6c8101a9ee6c55b044449d2429d78\n1d89a6712a13ec0ae4f1568cc42821a2\n2c710771322b8dcb1a3bcc8004f4c17c\n28da591ac195b6c5ed7313333f2cefa8\n7d931e69a6d8d666843359cf6f56b0ca\n8a9e6d1800f7b0675fd7ba73196292b3\n7bd4bb35a590604e34a76c18ca3e01b0\nc810c60ee4b02620e2eec207c4578610\nde33e7cd136d0cc5d6c575aba43d3168\n1b17a587ddc8713e7575740fddca6310\nf1441c1494bd57a98cdadb8886bb71e8\n2a2bc6c77e1e74919feb10c9e799c47d\n285baee7b582268e8f730871cda9d814\n0c2e0121449e9c5edb92b7f349e41721\n0b0480ef5268e2cc9ce50169849d3e31\nf3b96ba1f712a19b473311455ddb717f\n83dc38ab4e11b77fe818068fa13ebe3f\nb69184cfd2242fcb417ce3bccb9a5b29\n302f8ecd23cda08dc30ea8faa2982773\n13859b9e208dffc3782c867f9bc8d121\nf9ebcf923ad909491da2b652164bb361\n39a74dfede4d6b782ed0b92a4e271c89\nb6048b3b94c10037955d5a6a9dcfa4d2\nf17775e21c8f5e9cc2c7ca36ed1df4d9\ne9437e60f9fc6c4e894d97ea43154026\nfd475d8c66d6c49697f4232caf31c90b\n35d52ae8e5e6147049c5ad06a981ddf1\n306a6ca00f1afdec316489ddbbd83838\ne37a47cd6a29730492a24cb7aa21256f\nb5a6743cbf02512be23fb30d11e2806e\n088d0ac6caf4dd952817566f12b9c99d\nfe2f093e55c6e01c88656217dc7eb0d3\n88d4e59c78f144b9c793f60c97e8b02d\nb4ec42b014793afe67ab40002fa3ee1e\ne59f74970d578320aa7236c0a7598980\n2058d27c5da9377252cd56eff65fbef5\n7fc33a6fb30899db6d36f97c106eec80\ndd0fb8fb1811b6d663e86679f9efc386\na5a7da0dffc7ff6dee92bb7686bc929f\nbf49ed1542fbcf2fc5ea0fced7b17ee1\na2a1176feda046f884d871706a627be6\n78fa32905114b57fa4a868accbcde249\n45784b8c44ed69baa13e1f78a2063625\n678e5e019a79526d0fcca5e29f6e5f78\n40bc979fc51c312c66f13621c9c53e84\n1084f6e39a37c1d09e49d25bfaf46e58\ndb836970ae594c868d260daa82d884b7\n37e040895d513605b94d7062c992e447\nb989ae8734e8a1a5afc365ed595ea7f0\nb112019db1fd9add9026b28fde65c816\n28e7a2905c7e95a52684ad2732230fcd\nbe0ab5e695645dfdbc2faab8fb249e97\n6792695b30bc77ce16eb245c9ecea930\n6888c17dbfc42c5b6e9f1aedcb4b9fda\n96af09ba7e1d7e93bf8d4c8591fbc779\ndeae7052d5300aa35707d9475244573a\n70d89f93aaccb5d744f11b6b0bd1bae9\n7238c6374945ae4d46ee4c66d0a1c910\n5eccfe9ebc33b65f0a7714c03ae2a425\na0aae535beab6756e3b69c3e78e1df04\n92e9e866dc16d1d6258aa980a9350717\n2d0d9e19256e9f1f7f310bbad3a2978d\n734ab2ee41a74d5b6498d3bf55ac2e84\n8900167c19d6973b0baefe16d9da162d\ncc446cd7c43e8147a577ce093948f422\n08914b150cdd6888bf32d668c9336169\n78ceda451495ba84d02c28f4608ba891\nd0f08cc3831a31d686189c4f784bf948\n059a1e9917fd3c3d46d3bca920a8b3cc\n68727183f7a8dc1878b8947d845f04a8\ncfd0280493314f4c56aa5781a9bf3d8d\nd0a736241ca5c490e465ff5edad43119\na19c3d31ce299bebbbd53cd22f8a0898\ndc271e59edbc284444c05a0820e74e26\n2257daef930a33efc1b422d4f3d41890\n32703b9d0a14cb875c0946894098df19\ncb5ef2dffdb3b8314190b53fdfa737a7\n6bd0d82f90d3b3fc074f4de844a98f45\nbe4f811c5218fbe546170e4a37bb8f3c\n221791f6e1f14cb5404a7546912a1ff3\n3440216e970f39b5a0d0bb45f37ea45a\ndf09c2d28e03aea8285a50b47f6b96e0\nc766eadda04d957ab099bc37e60788c3\n45dc37389ab8f73957451b1ff2bfe0f9\n8d8bcb9f650ea8a443030ce0e8ae27c8\n4dc53fdffaa810544d048bebae90f836\n9ffbf43126e33be52cd2bf7e01d627f9\n787c9a8e2148e711f6e9f44696cf341f\nf44a7986867fcace717975f132d9f1e0\nd1c421cc7efb17a0e755906d67b9e735\nb9b9fe92c46a98d70af3dc5e6f1d63c0\ne0fdb3a905da433d8eea3f59cf80db23\n8e5baa34d6c3869611929f18dfda326e\nafaecdd59b3c26b63e9c8929f1e22749\n2edb7ee0981796d67b3be05384f25f3c\n10fce144622b05eabda17fb6c45082f0\nd8ddf282ee7b6ad929b5b05e82a54025\nce1ddd1a46197cab6b2c03f8d5526d09\n19bddbcc29b0dc865cdccde2cc2b96b1\nbef3fa9efb97837aa17bc678fbb942e5\nb0cd5f326931024d52d90e99d04adaa6\n11a0f80deaf7fb46838716ef2af6b99e\nd7431d8f2c58b7575858c77b741d2da8\nbd4c1dc953466a6abd1a7694b55e4c83\ne2d42d6a75d9ecad45e345ada902579f\n775dc00b4d1cf2fd2b03ce5bcf993362\n7ac90dcb1cb342cd526dc5a62ea7f782\nb925134746cb640b194f433bb153314a\n6d2acce6399bc4e65b2b10f2aa6318c1\n4524ada27ac14f7102de28075bf026e9\nc78a221c90cf37cd47129652a72a73a7\n024a64e9056d4ea99e8b54a274f1ba51\n9425f633e1ffbb111751600b69e6d98e\ne749be788b5fd679cf6311df8603dcd7\n9b970db22b77c3b62b8e842cb4fcf71f\ne424f652ba533680703622140bf1416d\n3f378a3edcdae4fcac582a4a33ad99b2\ne43fee1154bf41baed90b3d27a2b56a3\nb10f34bb50f1bdfa52644a4072d4712e\n6c99651d62b6e038547caa974a79dd45\ne177e2e7fb6a7936deb3381f51678efd\n069640eea5965a350fea04bebaceedb9\n5de63424c4ba7eea36b5516f9c5f9773\n31ffa42deb34c20afcdd930f9f99dcb6\n02133ac8d4516e0ee1cceda9dbdc7fb0\nf1c97fbbdc0eebf49753336fb81a7811\nebca5a68338e106c0e4a581c51eca99d\n14f6412380bf9cc2cfddf310b6f385c9\nb86de701ace341fa1e1e30ce14270287\n8ce2abb16fe865caef13b68875c8a87f\nd9e07dab38bc124dc1c21ef0f0e1c11d\n5b6375b647844bd55ab5b907e0e17151\na32edb9e7ec7aeb9d0d271b71eac0c24\naa674eb1ffb744954a45f2460666b469\ne4f9eaad46536469cf90c464e5e6d29d\n432ddf71b89e729e0fcc63cf9ed88760\nb1cf7be6cdf68f3a5852d3f508920fdb\n0900689cb2f1b4f9a29a089809ff3fcc\n1ef68cb90d4241da14c923118bae2913\nd3751527d39ff2621d1f4c314ed7f3bb\n93282146eca2470b432363e27a972f7d\n5472db438a1dc3720478ccfb4f25c45d\nc15a53d2373164585d68fd99881575ce\nd356f6ffa70a748d08d8ca56e92b8541\n54967b0824da52fdbaf105a43264b6c1\nf9f3a5c9feadc80cb97a3710cfab9131\n7e7bc2edea94ddbae209e700c0017727\n8ed887d8804815b64c0d15e294c22863\na65cf5c7be6fa9ebc322aadb7fa3d742\n923d6c94479b11c7e0ce7fa6755edbd0\n02b99311d7a05a8638890634809823e8\nee7a0d63608efb5dc89b43934d79ce1b\n30e468907b730405f108ebc6102decfa\n393e648528f1c2ed89c9e36588f2f9e2\nc2fc1e40ab82a6f103048efda2a04f3f\nbdb9079ce4a4e3ff76d459d4867da35a\nee880983f7dc16e8738ab3b7c7864126\ndaa36d43d9ae5bc2559d916f0dda749d\nba332570cd89ffb290b3db270c10356d\nc802eea3c74cc836301666cfa54eda61\nf013fe16b721f950d515c93370700035\ndb5c3c9d348ce26169c56901a7606961\nf7f0795af3b4a135ca0c1e5f404c93bb\n846753232d9cb2a86e8da4bbd63cbca2\n3a9d431ccb6844c5bad6eefc14b4d976\nc7ece1e21cd11e0531938c3114ece8c9\nbd47d9fe13eea8f41da16846e46a7aa0\n511fb255c56cbfaf7a0fc7bf763cb096\ncbb9adbd7f05c6bb7ed9cc8361160a37\nc3c155cd50d9c1b28016baca62ad0f0c\n45b5847cf7f571b351997e694a116f54\nc4b42f5d67642ee9d98875eec7978e39\ndaf09e67dd471efabcf51f270b25a0d8\n20566a24bb586ba4a412345dce266624\nb4f150685947cec6ed9b34220f85fbb9\n9c71025074220a10d617ced27117c27b\nb0061974914468de549a2af8ced10316\n0819cf399cf613b5b222ac36e39b3b16\n2d2977d1c96f487abe4a1e202dd03b4e\nb73a605172a4066b68330d8be34451f3\n6a852b6526d3d19a5c7dae8758035b61\neae72900f1b298e87ac2d7feb6de61fa\n459a32ee8d6a20cb7b7d1215168b519d\nb165c11e1e6465ab556e50bac6e66bcf\nd0ede336fa16bf3bd7cb729679b829a3\nd744712c3edbf7bea2a33841ee4bb0ad\n5bfe1d03a67ee9898ca3bd8cfc00a49c\n0a94fe962672ac051a9082e19bf693c0\nbfbb7d1faf68fdd648e32403ea4808e5\n02ef686766ab91168f3024ad49ec23cb\n159ce6099d3ba326c0a18777324dac97\n97ebf397ee6d4032ac099ac5e660e4ca\n18e6425c6e1e6c06814d27233ac486ca\nd67e90da27bfb7d6690cdab0c242cf44\n404d5575d5e6eab179fec32ce4d4079f\n7746260b994fcc1466800c0e85079445\ne8fa71ef544b988a772c98f3c9eb8dde\na97c4168d3631417d0c6fef4802776c1\n861b1ea05039a4d4a737a62d5977ddf2\n40f2f6d7d5696d4ba5bcad579b841503\n365dba6bcfdf291b63281db9802eb136\n764dc2c82c1856d13039f8c5b41762cc\nb88cd71cae2bc8a0205506b79e5515b9\n34db1a2d42d25b8c0acbf0767b25f2d9\n014489f80844e7455967b59f9ca5f999\n301f35eaef32aac0cc9093772bc05fa4\n0b9252a99583764e0fd44af8a40e6b43\nc6b365ab168101f84493f58e9ebf97c7\n7ad7c0fc6d234e55adcaffd3b0fbab0c\n5988995e490843f1d1fe0a492acaa412\nfb9dfcd9ff82c14aa6ba3e7ef111fe83\na54950a9f40711703436a4ee7c20bd1d\ne63c9b8ea3849ae32307ac78b7fcd178\n6a90b22538c72b6cb608355ab38b59bb\ne757dee0b79a0130612bc52adb244464\nea09837a78394a5f5e997755b25d6330\nfc8bd36d0b1cc5b58bd55e18859a7dfb\nfb442c269d69704db7d730f450300e4a\neb64a78d3eecabec945cdd0c8756d36a\n2ca7743ab32bf575c150828e7e4997e8\n72be1344cbf82ce786b0452ced2b6688\n1dc33b7370f5e00eb109ad539ad2f939\nfaa87e73d53adedaea9db880752f26cd\n9f1dfe11e92265f45857a89a2718d5a1\na49537b2bf01cad03c35214cedfc3376\n702dca30d11b19ebd06055da4442df55\nbf8ac761ff948f2a51107eaf75f13b96\n0a77766c89a5ca8bb5ec3c090f4ab734\n2e79706cd317b5766cad3d8951f50b26\n0b9921e4081bebf8536cd9b72d19938c\n899fb4c51d0d5a1f6794680c0815d7e9\ne3a49993ae9d968981ebac84c637c840\n777073f3cde34eb0efee5f7d1f3919b6\n11a2f64c1fcc7a3cc893efc1b415ed50\n334645f09074b2597a692e395b716a9c\n3aae6bcd7d58678748bac3afca4bd167\neb7bf8907f44f4aced8898ac721e008a\n6378d4880df4ba2d5824cc52b663c03a\n63413cc0c5427e087031eed1472affc6\n202158983a04b94daeb2295256d3efd9\nfbbfc285adaf96ebe0071b3f7436bd59\nb175c1bd55e63b1989e34bf8bedb2076\ncdf3a6fd896687284d6ba12766fd16bb\nbdf6f83ea246fc2ab32b350161b34dae\naabc09526d1cc80ea4f5457a2d22f67a\ne7ba016972e4204e55048824f6688875\na97a19d2fb7ee1fba3c7276f256fded1\n07a1b1b04273db9b8b4929d6d7b62f5e\ne81a881f006aefe01b865cf17d10ef01\nd4af3a20cd29907b909e390f5448ddba\n82b99c5c78e5ea49e8e1bf476efd3db0\nf40ea7b78b48ae02a4b2b87f30c6771f\nb4ae8df517989d653b2a611880d0ba2e\n29edf0e0ddfc960b7420aa6f73338081\nbe6f3a35a998804d2c6365ed6a3faa95\n9d2c38961d8534d72a46fad803d327bf\n4effbb3e10cede82492f80e08db0f621\nb48417d96eb65b5e740ac3950dff2ee8\n39fafcc4d33109ce35ffcb5f00591dd4\ned34bdc7b2cfd868b7bfc238dd1b7fab\n3cc8f9e2ff74f872f09518ffd3db6f29\n783dae91eedb405162a191e1bab16ea5\ncb75daaaa21ba90ec2ee19a506309990\n1ced78f521333bb28c3681ab8cc35432\nb90c520ca3981ece3d9840a35d4dd26d\n629c2868ffa3b7a11e1b122909c3098a\n4c371f378eeefeaa166198befcfab316\n6e64d9638a4a23e60fc09108a946d893\n3e1904017b1253d6e81a6a44cd316128\n1475a2312eb2aa4419c3d25188fc3564\nf0f9ab7bce956f90679adb463e495419\n1d4f1d3c585bcff37adf7a4d83d07b77\n34ab9558f87b957f5508f7f033f0ec7d\nb4fde836e3391bdc058341a9d5758b93\nddce269a1e3d054cae349621c198dd52\n02fb126282cb0d596a9052bc21948326\n9f4ebce3b8214176c3cb49e52d9fdad7\nc1fb2df131f9b6be4e9c0868b3352fc0\nf6725e0f6458e24e28884866259c476e\nb46a77874d7109d319bcabf68855c93c\n72c081e030c7ca6d0ab3272b9889f51c\n731fb425cccf8535adfda59e9a0c70c3\nbfe0acc55febaaed8a13c27017d22873\n8fec124afeefe87d95563ce96c3b9ea3\nf33904d37291f0bd3bf2aac4c74cab3d\na20b6bb2f9639bc39e64249c139aac03\n45f914c04f7926d9ca4bb3a842cfa8a9\nc0b8728cc463cc92c5ba091939531d8b\nfb12eaccebfa07ddd15f920bb8742030\n45eed25fc087efadb092d4624675e1e9\n7e0daaf62e64da647669ddc836b740e2\n5c1033e1ad62e470dc57e92c02cb0a0b\nba880d966dfc73d0ce69fc7bacbcbf7f\n21a83f074102c8d83d1def6b4007d713\n19057b6c3cdf4cb20507e0ee51974d80\n71982c046dba21cffcc7aa50d5e5bee0\nc74bdce650e7223f57cba6e557ef5306\n5d51e3cd68a73a2ffbea6204f37f108a\n394fcfe03035d9c3780ff7a30a5642c6\nf5bdc1d9877830879e85442946a836eb\n30b1fd6d5e242f208c0374b0441d89e0\n208035e6d611c0460e72e988797529e9\n59f5954cbed961e9c87ad9c480707012\ncd7f4277cd43e5376e81165422418db7\n1a1133011798c1e25cb68aba04d6708f\n6880db2ba019cd4f617792565a88c144\n59a1b8fe536c21d19ad58664bbb0874b\nfe2ce782751642eda33aa226eb5fd819\nf41634ebc5934c1c49998e19b110e964\n63f6f389b18215d3641446bb8b311e0e\n70a188e117de412b6d2bdae137d3f484\n14f770ed795c6a29bf9bc636531e9a6e\ncf36d76305927d785e8e6bf85664139c\n97e8429c647dc1a526d6b992c384962c\n6806a2fff13b2b0fdb451c63bdc0ea15\nbb12bc8ac2a57d7d089ad13415b52866\nde40e3d15c5140d4a77c3ad0d782d57b\n2035d752af2b6a1f0604034d41b92821\n7ba6ca74b292aaa5d46bc407ac5be166\nf4b524261fce06c1fbd10b4681ad0b97\n18a9ac5318a994f12924c95a56dac084\n7b5fe05b5d76ffc77d753eebd97e955a\ndbf84c0ebdd315a66956332c56813df5\na2279d8ac31bad61b99bf85aa851158a\n0e8efd8653318032219bc607bfaf3ddd\nbd704c8fd28fb7b822c37420254c827a\n79527fe12fa634afa7b01603e9033ef1\nbe12a34ef2e73fcfd9593393527eae26\n5bb8be5058bce010317c26bc1fc8ec92\n8a42cb46a14ea5ee51df58dd3301563e\n2e0cf0d361a8267a9653c0ea3e350229\n7e51926af3cde0666d5cc4d7ea95214f\nbd76552563866f784861e636abdb9a59\n8e13717164014bdbef702c0cd50f042c\n6c64917cc4a2b48514ce95bfed6c99cf\ne959ac6d0f10c984d144b99993e36425\n2c4fadfb12a909852f0819ce50490137\n3e58d6bc1b1f48dd225561394e8fe06b\nbe6d6e915b8ee9a19ccd35091d3ef5ae\n2a66785f66ada19c559b661e5da4eef2\nfe43a2d3915c48581833d7baa7b4aaec\n8f0d14e836ebe38a69799fd343c86a4d\nba302e625207aef1b6613fe7fa2d41a5\n06d746840aaba77d33a87e6d023407e0\nb8139419209b17e4b9de3eaff5c25f87\n77e77db5c0d7aa06d43f7c9dddd15b05\n334590e821650296e64907677bf25409\nb96a10c8ee1cb4e3c92567f88ccfa0b7\n3088732582e2097de2288afab8a1d16d\n76a5e3603d97732d12b89bff31b2a1df\nc6b4af48bc616eddd6cf9adc809b97dd\n87d12a5afd9b8ff62bffae326c54e4b2\n2e6d23d86e2a02a74b815434ca0919c5\n6ffe8c31161caf947216cd6a590e83ab\n8e763b0b493d2fc2b2d8da2a728b58a5\nfe607df67c69301715abc0292448ecfc\n156379d395d6e071ca29455a00dd00b7\n21ebda92dab1abfdbaaae16adf9dec6c\n5e22989f2c7caf1c175a0caff0da5f57\ne038b815e21f40baeec9367040f8898a\nc7055c2b2f79b8071753c9a29cd6efe0\n347560b25c5f2057ccd813b66489a356\nea1d74cbb300cd1f321d5d4e0faa2d63\n3b93d8da768ac892843244bd9df6527f\n51c8c98d5b82f4de2bd1504e254004f8\naf13937171d1851e0329f8c286de0f7e\n0d643e526e61b23dfc37e8b7dc09c7bd\n0badd879611422b214d8c53e19b4f2a3\na17e14ce64d18ab070c1cb64589679b1\n07f42e2056dbcff5b7781afac8085081\n7b48666b13c02ffd7122df4275adc002\n0ebb77dca841e0c3254eb7005b1ccd57\n6e7bb525f12fc29a2b9f4c48a57bbc71\nb8985ea71ef23edac9f191b9898688f2\n3105b3483359b3a7bd8ff24cee3bc01c\n56aab407dc017bc229b1a1208d1eec20\nd576165eb2549f04187c02b5adcd86d6\n5fcaf8ecdb537febc6dd46feaa45cbb8\n8f2ce0dcb162d1b2d88adfb552c8ae61\nd2a33790e5bf28b33cdbf61722a06989\n669168ea4d2c57173ea57f418b9c13a5\n11b339cde0534532c3c1a7d995440c44\ne9c0f1e6a18fa1ecce9cb7b38fe0ba91\na9f445edea679b70a32a8cd8ffd23ae6\nfb697b0790ebaa204d9bffad490998af\n8019f301e7c8a25c56c8c9121255980e\n497a86d4c7adac14abb578b97ed0bc35\ne55a23376480ebacf5ecc81d8b8c3432\n74170928bae84bb0a107a0906596aa52\n1bcba98459ed84f2f5a8e102b95f4b38\ncfba99fe0d14214dc3e04a5ab5387fab\n6c65f0577ed96c176f37ec3257824133\n85d372367fc6a5c183acf686abb857da\n5d4d7d6bcf5d42a3df23e490627a1af3\nbdf7d7676d06f79044f240770db52cce\nd42f2da1df5ecdf29be4ac27edda0c12\n45ce3b2543a563aac0f955d52767e570\ncae76e31d8c7942573e57de533c4c73e\n5ac0b0278e11c2000dc3de3703b44c13\n0ce020a5c3c1f7524593fb5292419f93\nb3e19e47e6229d1e642d9e2a2f11678f\ne716a99215e146e01a335804ca2e2785\nc0e4852b5be3ee1ee31c8c2f6c7ea676\nb8742dfd3b9fa3d9beeaac3a1a557617\n5a3e27488cae6470a51407d9036c04f3\ne2f7b2357146baf028641ff21fff9b0d\n3588a0861ef7e00f1cef13b11ef93393\n43eda0dcecbd12f7f1e934bbaecf4115\n67200e5f08274ed1de00f01ac603c2f8\n5742a0b024dda4fa62858e60dce7796d\n6b95ab7dd9f1c74afb538d8cc01f7f3b\nc35c2d7e779f00e69e4b921f71b0004d\n80e9f630bc3243e8230d6d2f8111772f\ndf73a54dabadc6734533fb7bbd56c36a\nabc4a219b2c5a071200cb1911ad99629\n5f631560dbd4e7826a2b2c06a0bce497\n02b25fd6b283c84a45b167157a11c51f\nb130d8ab92fb8dcec1781881fe73b25c\n964827a6b27b6ff4b4992933fb247df2\n29ab85b5ff0fdb0a1239684df2519fa5\nf78bf9452aafb9f71f0577e4d9e55035\n0731e29a81c2ff526e8084baf217e975\n26ce53e25dcc15794c1a85badc423e80\n58bab5bfc8d55ef7ded3923f5ef0735f\n81a0aecc785d7bf17030b82756445344\nc369555e08ee6931b91e555e8afcba12\n78e6ec4a5bc14d6eb3eeba1165e6ad53\n658a0621be2024d192728a263c8825d1\n8fb936ced7d446503e16465ef5ebd606\n7090a0880cb8ce159231f8b4f30edc9f\n2a056eda406b2163a887385495f75973\neeaf2bfa81d1f331d4edd2cff676b485\n90bb921144d85f5a3f09ef82ff9a61c2\n1b180d56f5dc8fd2c47bb842b6ad4e07\n8aee27ffbf986af186bd61d4007a1547\ne311c41b6f47ac74398821ed1300ccce\ne7271b0a25dfa46fea5f8fd692b19d31\nfe290119dd1228bae350fc1347d6066c\n4841a3de68aff231f06398a0184d5264\n9c95fc9c5243adf7bee912fbdb0cd00e\n23ba36a48e38bd009c2b4e2fe924b4c9\n3fa692c8e3d878d724d39059476fa362\nfec90ab8084c030b6a8e959c5975dae2\ne4b1adbb95feef9774b17c04b90742e3\n92aeb0f371f961ffb9491c111989b836\n4e1d55e3c5ccb0ccbafc625c91347a92\nc3cb907bc65cd50e1162b827781b3578\nea401502838075208731a4da556dcec4\n0544bdf8447f076fb8e0d66342d85adb\n19dabecf732721eba4b0cf0dfc21a8d4\n2f2b7d9736c9670b4d6340aaa112571e\nc4fc643c5a8d6b62c59bd9e900f41f58\n678dbe5fa567cceb0fd3c612d8f21bc8\n73b144cbc18af3747aeb1959170ae95b\nbbe02f946d5455d74616fc9777557c22\n4ea7a509772658671857e9372c1880ba\na072a3258dac3f6a54cee0c0ce81f90b\n4d3e52e8f66ded92a9ee0470d6d784a1\n38f5975ab63921453b8811252636b381\nf68ec4a88974d07606e78a104fb0ba6f\n6cc967d7ff6b372356070a5512f0707d\nc73f57a771f98f41ea0cbfd364899fee\n75de4c4a4b65f2f076f31f691f3470b0\ne51f6a5c168fa9ef51a113c9a96b9e52\n612c38bb69e64de1ccc4c1e5961e9c3c\neb260e9ae827821beceeed4104f0ad89\nb9d779299b9b8df580850f5e82397e44\ncb13f4754b0826d6b5cd35be235ebe31\n4cc8121cb8bc8fc17a322daeecde3eaa\na9391ac7e39dd775943376dbe2dff158\n014835e36358e38c7f7897d6571e4529\n906f25b188bbe2a9e3a67708176b4259\n708837c1d238f0955c23a38051f5ebb7\n7861fdf36a9227f825bd486a335855f6\n6470e394cbf6dab6a91682cc8585059b\nc6232ccf78437d606202f91502a7586e\n734b12fac1c2875367114a1d42730610\n929022a1f0d6bc3245e522ce4ff43da3\n55ed7c8889ce911482e767e865620bfa\n10d864114387ee85fe634c63505722fe\nc9a5aa53b1891aa96b1bb76c7d4619b3\n06f3ae1264169a54b8ea8a7cd333d97f\n0d403839540c5e01523181be590843ac\na91885ed640df6e5c8ec8d4c337a4383\n90d70dd894cdf88b4483f674ce0598fc\n1c3d44e2c9d1326cbcdb9ae4dc8a0c15\n124c883428afcb134cb9a1e95656f180\n465325cded4332142dd94932951144d2\ndb5a397ed75bf79c4dc244feabea0a77\ne1b844b7ff8e69ad10d8d28104627c33\n18a39ddef4b20e51595bb4176c90270b\n50bb076a040843d741168883f6cb0612\n54994d6279d74c39155ca1477c406d25\n4d0cb3c137775c0dbd24e9d6f04dc63c\n5df248d21614def6ddf71d9defa81920\n088cc6ebd1b471d593fd40e6399680d0\n91e454eba04c1aca45d1ef5d17c65285\nd5b29a51e55d1e935dc0712771475e09\n91764b3da36b9deef625f13e456ad96c\na40053051c978701fa8bb66f110fc487\n5d5ee8270ebcd3047e68700be54f425f\n1714d2c7f34a8a0a74a143a40bc7fb80\n4ce6de95fd8d32e890aceab69396face\n63e0c03e0b194867c7560b0d8ad450c9\n8d11393ca02d4ba48b8d70ce04a2f160\n04cbf5f31dad92fd9dee473b9dbad852\n1da8b6649162d7435430a3268387c79a\n666eaf1e4ccc59a642524fc2cebd42a0\n3e7f660d6eca0f25be1b79d69e580cc7\n044c61236a612d311e7072440ce0201e\n3b623e5210d81d1a0094196f5708924a\nef929b7b57d0465655d309075b9bc478\n7be6dab3286e9689626ab73d49a52b9c\na2f11e6571e711441f08831e78fc528b\n91673a55aeac5583204794aa053519e8\n43d9e5d39b885568661cd31aba72c225\nbda916090cc0a05f70d22d30f821b60c\n6412b72f4d5315d52a34bb138f3c6b14\n6fb1c9241f3ac8e63ec3b535ebbe25da\n3bd78f157f1711e1c03f13368dc5ee47\n35527bd2f150f47c046894e6be3cab5f\n5b5bcc270cc34f5b1ec8eb23723ae37a\n75ffdb827341e578959bfcabde3789d8\n7a0ee20d8e1d0c5c22a2539fe30a9da9\n6ce322f62d42fd2625c6c509692cbe8c\n6df2795d7e00e16971e249988495fdaf\n583283b732969cc2bcb1218e2cb517b4\n32725ef162e52f232ef92c0b783b5af4\ncec2f7de1da7efa56fc27f18fe0a07dc\n137500bcca0d3f1a979d198e9f8dabcd\nbb7e48b926df72d53c5e7cf4c0e9bbfd\n610387492db237a878b50b75ac41f6cc\n5bc7f42b83b6020d2394fe96ee3441a2\nc259f6c41a8b665ed43c35ea15b6b516\n38b5a22bb376712b7c88b52d9429eb06\na745d6158302ea63df7a38202af497df\nc92bbce1cec8e4c3afc734b0a398dc14\ne3e5be88e2f84fe29333af8647c396de\na0531db54fa845d213fd40d3a3146d46\n1bb23b8766b8ccab5e08990bce0f862d\n3d4f6ff35ef2ace5ded941142a0a5c39\n3b674de4febb3461f41ccbef8d2275ec\n34c860db7290e016d5e34e428b16f47c\ncd38e8bef8f412b4c4fcb776ddfc94e5\ndfbfc09aef387eeaf7158f8bb8c0be31\n7468081a0247a6f4bf1e85f3e17df420\n1eee21d45f2944760873bf8d8d93eb0a\n4adb5fae002b16c059abea038130944d\n5863d40b572db607b49a19fe56b56189\na8def52788fd7f679f6adf5ea0c26cb2\n8891ab1e63bbbf002e998e5f7507b5dc\n2e6a02dd6574311863f7b47021b0f330\nd84b70c244e7a6df2288182a648dec77\n2620362139e62d0607a9e3de3af4c57c\n11c7c8b76546bcb175c62decee7a032c\nd497e4f79ec5796e0de686ffdbe0b2ad\na8ef91fbb4477fb35be5ed9497c181a1\nb1ea142ee12cf0331fc2680240cd04f1\n2162f15df14c0588f1f67380de9b0652\ne79cfefcde6362f4f6fd60d6dc5d88b1\nf5302386464f953ed581edac03556e55\na19f65f69d5ae486a7ecd8da66e69b83\n319a02032d34e3a582bcfbcb4f3a09cc\n4d746dee9dde402658f4b0bedeba53d6\n3eb4cac8a194e533f369e9792fb19d34\nf596f2f69a76a824ec121692478ef043\nd700de499254e3959cbb5e7d670fd969\n92b2519cf64735043403c8c10347f4c7\n9e3359791b9058b3241953ca222ca37c\nb33417394c9559d45a12ad9c53ebe9a5\nfad7aa65f9b2a35af671791f4d883839\na4d4fab79769c4578d213c0ac823f31f\n8128f7d6271391d1f0ca556bc3c37c22\nb47d5bf73350a54357901871df4cd703\nc24fcd72b8fccc2a5d722091b7786af2\n1f41b3fd6f7ae842d5bdb11a5c52a6dd\n216f03835726c3cb3c10a7aa6e06e990\n7d83afa7cd77191878905a71587f8624\n7ba5a8d2df7be8121b694c5c00d0919a\n242e3f5eb9fbbd77436f9bf9b0ab6999\nb55a9d92627c0ec4c675cac9edb2e52b\n7871dc425c720b526fb6896aaee3418b\n7faa6eaafca86ed52c493402d996417b\nf1fc258e19d2e389b16985aa19a4f4a7\nde3e3503868a959979815d3424f4e4c1\n329ffba8af828e6cff655df25b259694\naf05669796eac419835d84d5791b4bfe\na17b58ae6c28bd31aba9224666cf10a4\nbf9091f4a58cec43e323883df9a02154\n9a3d761a55a30141a6a040c1b8bf5839\ne57cad92b86d48d821e849c362a9144f\nb38f5ef047c56f6ecfbc9e117e6a8ac8\n0e22d6499715ef61dd8b367dcb3460e9\nae1c9b1be162b3fa41f84e910aec0fc7\neb89349f321d5ea8b124de70432f8e1b\ne7c05fe46d6c243dad4d965fb7b19502\n08c3cdbcdbbd8da9cea5dbbf16f77f68\n3264376dd3e10997af454195f9253f93\ndad9094199ee8ba9cd5e3fb2fe27312d\n118b0bf942a2f51ced599a6af1c49a5c\n7990aaf8c0e898f6e5090449bf082663\n13ec5b8e14c3fc46a8d89fe81b122b19\n9dff798cacc420c2386cb9b16d34c93d\n12018a223edee73ec79d6a70de6e855c\nb6b3f51996c7da2d8adcbb44baa39750\na9cff7f91e97a88e92ec296139e3f893\nf8ff3b25c583e5bfc98bbc6611c66805\nb3d0ae8cc6f8b0ea1c80736875d43759\n6d3a669bafbcf72e87277a27bfdf65ab\nad4e766c716d358344965c1c38d838ce\n56d3c13f22a9e63d0a4ede416647269d\n3c31f894e794a012744a06942ba03eae\n253b4b351e64a0f134e55d227aa9ec3d\n453e14325fa0df4006c9cc9c090f3ef2\n2f8cd9e9e969c3f4f7da005d9b3a2bcd\n07be01d42ddde853b7922fe8fd42b7e4\n41ee388535a6c35d953d25c2afc4c3fa\n498ef1f987dcd518fbd559b3f6e7f5e5\n60df5d647b0f2a1a1c5583ae78a802aa\n5ed3578e6172fb621eddc76f5b735266\n5edaa3a9d2ad878c03e2fc540abd9fe0\na7f8a33cbef694610e864deb0885ad0e\n2b1b49e7a77f447b88f8dcad3abe3314\n25eb87ea0de507890c099df7c8c4e6b2\n8845febab90d9f1ec753e480f8b5a622\n543281460ccd25d91f383a816054443f\n259776452cdbebfa9ac7a7f545fee88c\nafda6124a134ca3277208470da1afde4\nfc3fb79b8f68df4ca197612b442d18ca\n414b34fab9a686ddd7c09833790f246a\ne353709054fe7d687aef9e8e5f5cf6cc\n6ed3981d7bce6a268106493b3a234245\na85110a55c1076d1fcf3703d3a7e1672\n87b0906f991ae7cc4f874ae1e3e1947f\n5a6d85646e5000b67366641876aa5099\n566141ba5c78a7f6489cef7848882c72\n235919d96db1aa4cf754edb3bba2b0dc\n4642371fc064150a577f10323b85a469\nffe936239abd7017f7bfc6c0915609ca\nafb984fd03784faa8815ddb740022594\n2b6739281f9372442df30e784b7dbdc7\n378be7ce4529375f3c1d14abc5b8fbed\n0639759c5190547ca19cc8e5951e5e47\n59c5a07abe7bf0198a3455fb69efddd2\n2cb60802d24f41f7394bd1ed44ba69a9\ne5537bc980b7ca994095bf8cd85118f8\n7a3d0f862ba0ce66d0591ea017a5a94f\n01fbdc44ef819db6273bc30965a23814\nc8a8a19969fcb59d1351de2b5a3cd7c6\n61094b11327dcbc2d3c3a44ee969e0e4\nc401d7ee7f4b11db784dbc395499af37\n968f3e9276f3aa6fef82ed8a61d04b81\nb22e22f7131dbba258932f12188ef7d2\nd5620306105b18413a36cd53d50116e3\n34ea4e858dc985a75bc61dcaff357b07\n1e961525c3b899886a6695cbb12d80b5\n2dc72d003e7b00cadd59a18c69891476\nd18f36de520a5e7b9865f36864cb1c64\n5ca7671731ff1731abbba7460d03a974\n1220392ce3f085c00b868d87660d68e7\n4e0d5fed7b5c900aca85475fab2a4bda\nd3eaac23a80157018916fe6e4a56267a\n3e1d6d3c13418bfb3e6eba70e32e26e5\n12e7cf990b2044b730065826365cd016\n973fbd39835ea18c59ebd76b199f070e\n3ea95502df52152faa5f01e0a619970b\n3275fb8da3a4a72be0f5a62a9c95c918\n1869e7d1ac1f6274db315a92f22a9efc\nb98049008f3e8bc7aa0769b65b510e1a\n0147652c1783a56e2f7ece44be2aab90\nd929f6a9ff59c5e60b59ccfd4433c5bb\n45b758a4f518f3ff31363696132f5f5a\nd225ebd657efbf277f35f056199d0fed\n398f38098e892ef1765c6145d64c7c81\nbc98d84673286ce1447eca1766f28504\n1cffe198e119ee4a486a57f8df95452d\n43203f05122ddc347bfb26c62364e2b1\n6e622dd961b9df26554a74575e482961\n5603c9ec50d89a0674fbfcd9cef41216\n52eaf68fadf470e9c993efb54a26ba35\n8143d18da0fd4c4ebf35ae9cf7046001\nab1f046d57ebab648b540eff03d43f4d\n3f686d154c4eb575205e7175efd83dc7\nd339ec7c5fe5332d889610bf0c6f0ced\ndce1f198ab15efbacd9b68692f12da60\n01c3eee3fd9398f326e80d372041a405\n58832ac51d980fabe04165e9de493f1b\nce8c4b20653b2ef54f5abba8833ba809\n8eba6cef944ea7ad2e7d60f3670b8877\n9764928e722b2cfa738f8559197e32d5\n634d398e96eb1550956b8128cfeb0747\ne3eb5b9d9d55948ecb4501cb58386ff5\n99c5ec683c3e8b4634583e987c3eb824\n0ee2cdecd2d9ca288274eecdd87bd56c\na0fe2866c69f92b6ff34da7d773cdc8f\n3c5b4e1e4ce6eb2322c25ecdccab39b2\n1ca122a8de138acdac472a6a05f1690b\ncebf21f09c8755a7977ac0b66239c32b\nfb0e782455a00cda10342c8727fca312\na849550523fb4f524ce4b429f803a198\nda008760094ca2f2b175ca002de7c346\nc2e3013d05d58a9eb65541eb25e52198\nfa7e5c028672614f0f1c9acd70a24355\nf2bfce9c3ba5d173db870af344fe1829\n607b680fc39ff982e2bb6bc62452906c\nfbb2c30027be158ad0ef7a06a556a733\na39ad04e3d9a22056b2fcddb1e4a4ad4\n11ac264ac1dc20a70524799bf6f0db66\n2fd1b66d13f33d780b0d007c97f97347\n372e25f23b5a8ae33c7ba203412ace30\n32f8e0bb6944a6efe8b1351b72b8facc\nd2f555a7c51bc4fc6df1f36da8feefe2\ned52d6aa4c9fc48d5d0b22016abba54e\n5fcbe3edfb7b66292463f66d5113277f\ned1aadd678bfbb12bdd9e63724a6751c\n7e5ec2f64927098656f99a99667fe53b\nf63da516ab4a8dc6fa5fff1660d7b033\n49f96038f20aa062772267b640a18d79\n7235c87511b978ef95e768196707e26d\n20bbd391747b46634f4e8dd4b2855bc3\nc4ea4fb50bb5073f7a6fb78fae4f1929\ne7576c27844afc0a30690ae46a264bf2\nc78f003ed871f405091e3b00646dc6ea\n24d79d62adf51f2d9ebf309a3cc1177e\n95c7a3801edd45af1ed587260790dd11\n171aab4a1835b72067bf6657b8af2c26\ne727c733a6206fc7dc56b205fca0f4b6\nc7a26500d738a9a5d9663bc0e80477c0\n721064191c362794be96a678e11b49f2\n4e62887166c32d09ea77d8801f9ecabf\n3f0331ed2e6dbb0d44ffb9ad9a561c04\n4550035e8e0ac0a4b42b9f8b4740f4f8\nb00ac137fb4a6c68e21fc3719282bcd7\nc7e0aa6868c12d905af7a01eaadc2f48\n0a1a18116596406a49b1479c3a914921\n24add36a4dfb560d7b443ef9e218efa6\n93d22f20e4687c8e23ea8d3ac33eeea3\nae73145e0bf680f2da08d942e44c0146\n16dfe0d39bb143346e232014dd2eaed8\n19d041104bce2f5a357e13ef7491e128\nca2d26f76e9d7fd2aa8ab8628cbfc4b3\n4207a6382322e1c1fc2396d0a0e6e119\n686f76e93eddfdaeca4d269b68565e2b\nf78ffcb5c1e00ac6dc34b14f9971bf1b\n58119fda499fcda0561b9b24ca9012b0\n2383bdb39e567976a9b3ed46dbdfdeca\ndaceded1ee5fa6109ac642ae0f5ead27\n099c1f1a68842ed1402eb4d2d3662775\ndb48d522318c2875999ed53966f1efbc\n561884418c8cd7ed1a49a30caf520595\n00a382f9911c71b529d999a4e2b62823\n6687f30a3a8a3ed2e92fc079d758bc92\nc6f5e2747df864bfd059436ca6e68a1b\nafdb93f79ec175bf8f15b6cc3de97942\naab7eb80b301fbfa31eebdbfda995d13\n87a6487a84aa350adf30b1673cce098e\n410aa509dadacccb67d5b5c70c10e135\nb4bf6f6511edf7f2bce74646da879bb8\n4802fcebd761ca4f04c9a6320330fd10\nbf87ec0391761d03cd1d21e9c9a17f10\n5f0290631266d8cf3336f294a81ee799\nbee4c45b85f5534ed641745bdda41a11\nc06a5c04acce77ba50518e7362430b51\n3d7fc5be8c43c91508492f3501cdbca3\n228987342a7bef48edde0be78b71daf2\n4527d32c9fabc9e6bdabcf9b83fd47b9\n2bf8800b0a2bba388885341901ccbc59\nd58ead29f85f570f82ab256393aedcae\nc40ad31eecb503cb54477ad751dbca6f\n2b464e5c68c99c05f953edcd4b8c8683\n5a25edd2ea311630c3c82997dcaa6a49\n760206273e41a2d58fd4be7260f6b931\n3df4cbacc7e187b09c03b3acd7b4c6d7\n926f71a9891c85d00e8191bddf464b87\nff52f447a6f7c75430a79da06ba39d0f\nafba515d96a4a5b9817d5220eac4894f\nb84280964d75ae6ac958aea8d61d81d6\nd258f7c463e37bc0db94c47cbec6f684\n221f82ebfdfa80c05488abda273a4592\n5871900c24691e816067652ca07a0d86\n2c5e2268c8fc17961b808a0545c762fe\n06fbd43d8d56f6db8f3fde9f0a84cf21\n3a82b89a4629394832124542aaee4cb5\n50dfc2dc02d6fa642c48fbc745c07fa9\n2b57cb9126bad18148236c9e2797457a\nb4dc9b4cabac11fde1835c7b9a0b7704\n026ee57926afb2f653879ec8384edc94\n03b5c6443bf8fad832a0ea7de6cb4197\na30ee1b159f992b90e1754663bd718f1\n60e5926142fbac1cff424ae3c217edc7\n87cde4c3ea8d74711428501214195bf1\nd055161ae59aa73b046962ef93f604f0\nba8d2b9408ed255ee92a112fe7ba59be\na51f028bf4caf6ef18d8ecfd5e453270\na759f684e27357ca4bac1c1fecf39802\nc05ad0f9e272d01009ce9f31c219ef25\nd5b018f1d227cf6f98bafc06930a2413\nca10b868cfca745de0fe393d5e8a6b4a\n616a72d9aafb3704653d199a334013f9\na534f12a50feb1b9fbdb6cf0a8fb1d67\ne8604fea9f67dc12bd9184deb7edaf33\nb2a486541730498dd126e9d458440ce8\n976ab48c6751502bf5f2fea0dfb5310f\n47be009181fb3492c6d5e5469753f6af\n67ecac800d846566d1765e8e06844903\n50f5cdaf8918be25f8878eb8c0623f2f\nb0ce784bc47018b3ce79441b3a662ab2\n81aef75b9275f71d450b12c1a0857526\nef35f00480338b2dac9c1950682eaeb2\n154eacfc6b2f572377ff267a1b52ce66\n100f5bedb1471c6b227badc20149099c\n6d55b307200e6b208beac695f0306405\n246f03826f7f765877b9cdcea9073df0\nf582422487fef5728d153eec1c45c3bb\ned85b9e4b2b8c0d8276823683af997ab\n5edadb206bb695a5a762cb0c63a91dbb\n648471725ad75f53de5f828da8d855c2\ncb825aeb9be9efd1c77f908145302978\n57ec194eef46063bd6271476d64ff4fe\n0323a4cd8b03d3be4318aa4e30994b59\n283bcecab9682860627bea8e19c619fa\nbeea4e795d094f655ec348e579a88d6e\na9f45098d1ca97e579d8bfcebbdaa9ee\n6915021b8d237a184b0ff9c1ad810c25\ne3b3f56d021563fafcdc30b0be5d1ef5\nb20d99a2fe8036c41ec7888c9c5372bc\n1d58e6036fe0ebe3815b8ef130e93337\ncaf7e7bf96a799f0547469cb698bfb68\n06807d36f025df31dde07eccfc8c3510\n124174340885a661df08acdd0dd19c7d\nfb0b808fa7492d29be6089d0272bbf20\n7692814314e133783da6f832fdcfe39e\n6e0ee5760ff87bcd311a86b04eb61441\n3e5444070552e2883b1fdcdae291460a\nefd1d613b76045979bf9df4affceda8c\n94091285603e6b8f0d8e564c4ecd21eb\n051794625459cb29e70d1c40b5d9dba1\nd956888c748032e94bdd8f55f4095828\nab84583fd6bc84dc0c21912dbf68d3a6\ne79bb1ecfb8dfcfdb697895c9a19c579\nf868779475a07fc4fb4a407e6b26b8a9\neae60d5667189b9515b2280c4b920940\nd46268bc1722e00e20486fba1ef04278\nfa426057fd9b1335d037b5217f52d973\n61fe954f427208941a17d4905722f044\ncef87bccb142c421ab8f108a1e5299f5\nd637cf0e13353d6118ea2d584a50be90\n6d1dc4c6b9e16db400974f4ec8fabc62\n2745de855cf97e8c05070ff11d226fb2\n985c64488c8d38b8494cb3c267ba6676\necaa6a131ad56cd4b8251e9432dcb85e\n4a3bcdfcfb0f8bc7f03a9e729d85c35c\n690148668c6f8e55b0b82f9ac32167e0\nf4c31e2da6db4fd31b8497af7e8360ef\n1c3d77e696ad903f3ec5f7351d437660\n1d894655a5dd22ba103f0a3d731a6737\ne507c1077a8a217eaadd54b426714bc9\nc973b01a7f2dd08bcedfbdcee3c8612f\n2dfcc0c8313299cc65cd40177c1d62e8\n7f812d21ff175aca1e1cb1a4a139b3a1\n2e472204c1163e52546ca2fb02488149\nc975707b18c75550a8def14dc0df9797\n3339654e37c35a19149197755b7a2af4\n031b845f225dc2d5f21757dc66d14f4b\nffbc95a2902738cab6e91b61df16e3b3\n4b804e57dd6f5b73e952851ea11fa658\nff6cbaeae5f9c1b34b5b30ef045b4d97\n0abc9e0202dc3cbaa73b151bc3719ebc\na8ba672d93697971031015181d7008c3\n7be81d84ed999c2a9801674656d8d667\n875bd36b125dc2bffa5cad53cc421ba8\n7cac0309f7b501fd028e77a588168b08\n7b5088027e9209563fb557eea0e73354\nefe3e10b0df2bb7eb42f90d42fd6baed\n215162c09042bfce4ada6fb34952a398\n3163a1b778215fd9e58f9160d1eb5812\n89773bcfd5c2a22982c25be54eae85fe\n345f75dbbe4977adfdbc5b6792a34e9b\n6f7e99ec47f23c1fce78ff4dd08b3532\n9fdf3da54f2ea563ffe733fdeb360e83\n96e23f7ca3a59099ff1918181c6245cd\na95825ffa9e59bdd730890c7d04d2ace\n40a9e2d6dd6c5a7898e3a803dcba38b0\n7720d86e3e282ffd4420f58ef736f620\n76e5bfc9d525db667772a5aa76923aad\n1f5600c3a4762d1dc289dda464225c12\nec9187a89c2f150e910b6db5f37521b9\nc957531b1025032ea0b305f420a17ece\n9b1eff0bbab045693a1cdaa05cb750ed\n571f9ba3a66b0d23d6cd7f5f4480b261\n6f5ac41e79f4fd5cbe18781709195276\n5d4a98f3ea0bfa10d373f22834933dea\n831630c87f4d7739be3f1f4caeea3c7e\nc0e63aa286d31e0c48a731e19549d66a\nd4e49e3bbe872055ffed6e3720d8bb17\n9c2fdbed9bbd30efbaec3f758e845864\n9e398542b559c4384bbe685f908ea073\nc76472ba190d1b56c59c51b6295e0677\n484779989b0a3242a29d6636ef24b03a\n147c263ec80caa6852d3f843e36108d6\n77f84342263e968e8e74bf24b2e885ed\nf9fd2c3b3ecf2473f64e746d4e2f41c3\nfc9e730b2ae47b866a61e83749cbbc21\na91bead9c31c09f26f32077ece04e9c9\nbbe0a60071eafc8ad1b0ba55423c3ac0\n921fc888d48899615a4cd3e0f8c108a7\nf1d98b6f97581cd027672675a5b2bd89\n2a546549969e90c558cb5cda11449e10\n95f49907f8266e97e38772f847278d50\n4e64a2cece05dbdcbc9decbff0f9c860\n61ef37866a52db902a968f9331f456de\n9f0f344a49d55a7ab2636abc29a3a756\n112abdd5361c239b238c819e178c5d3a\n62b40735525d1d736bffd8298d550a22\nfec2d0600bf363a510034e2619519212\n4a095b96b2690d29b900c4b86c3d6d6e\n8f8a25a4f2e14ddf4e97b3ffaff97546\nc45f40d2c8cbeea673e8cbf4881bc417\n1450e96f901e8c3188d29695de805309\n82a290bc010cf4cad62980f3ac82ba1d\nc7c503064f68b789e383e50141315705\n24fa3f103d0a6d0bd036acf8b7cff5fb\n024cf805805f3c07d952fe4606171774\nc6eec19d700059831b4628a64d1a9171\nfc893fd3da38b57c4f2d985631cb0bde\nf6a7a941596b33fd83fdbd54873e6b42\ne3f109f2fd5bfbfd96e8db6bffd7e9ce\na846ccc3030d009a44cb7c4551e53004\n2951a829beffd6765d13216740da4bcf\na1e2322e740926668d55a60e796f6c4a\naadcf99dc8b28b754c36024009b43be9\nebac4e3e401ca8df928f025689c04569\nfdae74a398298b67ad08f4f7306f9362\nc376211c029ac0fa681fa8087fd5b74b\n3dd32690103e06b4c27a5bc666964213\nd3cba2942555c79ce5b73193fd6f5614\nab611e7b91297147dbbb7300a82364a1\n31d5b594ccbe8bcf025adce255a9d4dc\n87f57692433ac98b1b7fd464008dd287\nf74d93768789d739b2e553ab76e4bd18\nfddc2eccda62e39b21a1bf03fd2d4523\n28b86339c5162eb29cee1b06597c2b5b\n08c6867990c271cbce016e1435f0363d\n59a076e1d1223fe3c5c0e562e207ec0b\n3609691c5cde44a006be3dac8a653f20\n4ddca3de3374dd72105f100481107d7b\n191e2d774b290acbf86948b235f458c4\n9bc60394ea559841f7e4bedb076da4ef\ndac69e0eaa66e877099618b3eb0b9dbe\n796ce9e364a2992a66fc4982fc9ef974\n190cd06ff7f62478d2b233ed5117119c\naecf1364e40ebedb1f7666f51db810de\nda1aed05ff8282a04c9096d6bd22b9e2\ndb72ae991ecdf140d7658c6b91657dcc\n462329601a362f9896649e99a48c480b\nddab5e501d28d9b63e1ba61c309b557a\n3448e2fc2b3bffac02fd72de681f5b45\n15cc77c86a29c7f23fb6ee97d274c869\n7649b357a9fc44ffe7210f34110fc68c\nd383b6f75fe0faada84971fdb4fadec3\nffffcd5f135ed7face975a1ae193b91c\n6cfc388981b56ea67830c4d57389a93b\ned0866e0eae0bda71f5c081b319336b6\ne626d55222fb76824e8301ed04ca5a47\ncabdd692bb2801c749b701e3272a4bb4\nae7acc250e6847d31578a2dc79bddbf8\ne463968a883d2913e8db185b5e894685\nfad2b170366926d9ab4ca66559d708d9\n7e657108543acdb0ca300bbb4bf16740\n8935e69ebecdb8d1b61fd8100a52a909\n3fde56c331c137f5370a1ba381134239\nfde48a683649e9ae3bb7f644ef38e7f2\nbe1f9c368a33f545ac6296add9f81f81\nc9e7b3aebfaa0f2dd9808bd88d5e97c5\necd6997281b753c028b143c04a7a449b\nf276e94913daca36d5e418675cc0c64c\n31cef7f095875771819b4480f379b9c5\n95d77e79c0f38dcf50d23c777c3d8854\n49982bc8a97a515bda01d9254898e5f6\n9dbce9b99a2877ba56e2b71e0ac72298\n14077b2405cb31a0d1b2d5cc472e5d4f\n53980deec2db643c8cc059800eaecdae\n3f3457fb065323b7eda1d2611c3b5f6f\n554cd12e1688bad17864b491f2168c91\ncf57437eb38925b61c2ffb53a9ad4e6c\nca16628ee17c61b344710e611e5abf79\n8076af946e28cd3b4065ab8f67baf747\n7ac8b9fa9b68473237ef9f3977cf1427\n97671a537ada0581fd57011ea6c61865\n080705be45c5e36946656736e76f6bad\n8ae48890daa96bda48e64d4f5f5755be\n2b8d8327280c8e2dc3382830cbbc9da1\n7f272b132d5aa2642141fe23f25ce3a6\nbb044bc87de2ddc29bd89ee26f1fa24f\n7bfb18ad4d709bc23b68b1ee8db932c4\n94e8794150d35113649de8f20deccd53\na26d6509446e18b9c29e37f5eaa51c39\ne30e349f0c5ca79f4918cf00ff95560f\nd341727f85ea83e238fc2e19f0796725\na7eb8d0b9f446f1548572fc71c92716f\n96452428dcce695a01e793c0deb79b7f\n920709894c018e5a0e04160e88627319\ndb999c9ce1580bfb9b8f33cf28966165\n44dc72330bec71270eb0bbe607a9a527\n95df388254a4e2859e8fb8a18f7a24ce\nab0d67603ac05c2353b52f4d6a868315\ne66806021b38eae258aaea7511f4cd34\n4de7e7acc3acd53a7aeab77bf71909e4\n20a0a7cb6e0b8f438a2f4dba32573dd9\nbcd47d1f96655a43d67b3291b092e0ac\n6d71c1f1478e0b8106868bda4711ebdb\nc0ed477d68d9d214d7c21695e96126c9\neb79a35e0213e20fdb6573e6bec5c17e\n9b8b4b42e4dbc9edb04efe14e645a759\n61c038e75ed495f88f10d6b5afee19a8\nffbc21ba7911d146b23422abeeb8944d\nfe3d46a81398831a527e95871223962d\n7e1b6dbfa824d5d114e96981cededd00\n864d9ebaffc24ef9bf37b35c565769eb\n7c0c0577834d29be479910502833588a\n2b42811d70264d52965ed3ca6bcccb15\nb400ff1a4e962c4e2822f323a8fc9b47\nc222f4fc698d00e3b1f58941c760a51e\n0f962ed52174a5468ae28697f08402b2\nbab4bf9d91e82ae12998b53b3050419d\n23b9ec1f564e4f438de99c7bc4eabc6a\na8dc2edd7978520d4e807607a411a399\n064283853646e8a89c3ce967771bec28\n452654966c6d3addb9fdce005a66bb1d\naac9ed1d22c81ffd6c84db03b975de59\n04399da03fb2bf7333c9b252c872d66d\na2630d23f73a02f52b1926bc979bbcfc\nde0121a27337474fd0f92167924a92f0\na65ff54b2a9e1198173495219c3b23ea\n33bc051ef7c58fb8a8c717ed7b685ece\nda122f4d6b3058ce387e72f886145f47\nba1065e873c08bb49da7f5176f14efdc\na1a687b803f4fa8b6ee53de862614613\nd23762d6a59655795b47189465a736e8\nd533763f78b2df74901b8486f32cf509\nccd960d65399c1bf4f0e47804d4c3d54\n2fa08f7852b342125aa3001592109be9\n0950de4f7b17cf153474c2c0b8c24a5c\n66eef281ac174799a73e174098eaa253\n846b993eaca299d38c1522a026e63720\n76b0b0b60246f4e8e92a39ef7dbea194\n01aa32191c80c02cb3bcde3927af1a9b\n9f35891f4e5d295a18d368d43e394eac\nf51c6775ae00a9d966be700e8a6d677f\nd2f1f6074fbc84f2bfbb458d14c22b0a\nadcbd69c315865166519892f2330c881\n514a7a73aaf4c555dcf420ebeefd12c9\n0833a57db49abc11baebadbd92ed09df\n402944ed743251abf17c3895a5f71959\nf1e2d52298c6d48092107dd89e31f1a3\n9cbb0ac0f3b5c9d644ff7f5d06953c03\n52836b2719ed26c47bfd915a8ef1ecb0\nb00a3bc97f34ea956a87fbd96a32cb4e\n07f96bb9bb342a1e6703673cf470e482\n9a0460cb0110ea14d03d273a56944311\nc339bd366387b6336fb6644f5c162e50\n09f11ae0c5e5b5539659fdea259f71fd\n9fd32358f9428860237a68cfb34fcd80\nfaa02eea8839eba5310d66d6ba7fb482\n6eaca5bb9e7dde5966fec1d5bff308df\ne630c63c31e650468673ccd97fa2c320\nb68e00644250808662537b72d9444841\n76bec7c55bb1f8c6a320945d36a6fe76\n22e42251f36fd9fd255f2a071ac14e14\n88e25c69cf9b4c411958a2de130990b9\nc4ccd6ec73f501da1474614ffff5c83b\n523e630a56abcc021ef527129a7a77ca\n4a72d722d3244db68366a09031c54401\nb265a781c6c9e6e2a84fc33a930fc936\n8b60d733bed585f5b897db1bf278ff80\nb5f34fa794a90456f479e865aa1d0565\n3e4fc13da2cfb425b77918206e6a8af4\n0ca111ebd97759a593c952f6038200df\nd4fc56135110ec004894fd597208c9d3\n12b22148a30a8b885cf940f2c94566bf\n2d16952cad2b406861f4700667e815d6\n700d730968e88c3b7e9155472abf32c7\nf578de31afb37c4cfae26cd9581a4c97\nb4f0afd12a000593a170d36e1df180be\n633108d7beb80bc6937b7080614cb2f5\n041afa6660dbc5ef949e2dc364fbe57b\n27895eaa69332f5838f1e39ddfdf357e\n81e4a73a8d726c400813b984aa771f06\nf5a34c048fdef80e5eafb2ab34935fe6\nddf584f99b8a1560f1f37ba3d31481c6\n62d9f7384486301f29bdb34892960e15\n138615dfca9bd7debe5cc4a2ca0c3a29\n0fd3e295adac4eb8c2c974596cb0bfc1\nfde32792c6e1438108279b2b1217bef3\n46028609922581afcfc377a820ab5684\nd0a8e7af23e9c036f14f92fe04633a07\ne9372e73589d60f3c5ac3908cb5d31b6\ncdaf68b769386d35613969a715fea7ee\n2374b8d2e1a7be35583a3f2a80754e6e\n3015d0e2f66dc5863bf5ba73f28ffd4b\n542a15317bc58e13db1115d4c05c5936\n146c07ef2479cedcd54c7c2af5cf3a80\ndaca6f5f6def6b2b9ae72359f71bb37b\n842659618853c79c4790f9b6ec0bd31d\nc8051456110d7255ee1184923b7bfd6f\n7ba370fb466a987577504adf88534418\n7f42b10a4be8ce633aef426511980053\n44e444b4429f7d44faac23db92cfb1e2\nd545d2d430ac8a26a2f0d2549b970449\n38b86a456d1f441008986c6f798d5ef9\n0a056faed2e9decfb2c355f380991dfe\n240b8a86ad30adccbea703fc6edbef01\n42f463c8479642e92eaf6a151ebcf9d8\n41cc0e4945e162021cfdd993f4c1104d\n3fc45e97ece3a6d14e9826afc4746a45\n5e790dc9486602b8667091e867d20dc1\n0e2ffe9471ed9172d76f80003b527a6b\n218ee1a4aef9503d73e71779aa7d0d9a\n0944b3a57aed6b439c78cc4cd8f26cf8\n6de38ee68596592a3c3d62a7cbd44c98\n5ee45602a9850408b639e1fb4c38822a\nb7c81951d322cd9f461ef988322389a0\n1296633fbfc8a045ad5722f89cb337b8\n5887841545986b5f4b22a87cb49f5ebf\n3943e85eb605124efee8b5aa64819c63\n4e86d530212a0800bafef2f0ea6ca76c\na567843b87da3e95b12164e999d9ae3f\n545ad9c244c7dd51ce3095e1e19dc97f\nc9620546a7f3dd52238863736188f7a6\n6961d7607f40a71bc7f0111a7c0bb443\naaeb1ad1a7a3a65f3a43068c3b739561\n5cbf96a18c53170abdc28195c6a82d60\nce03cee6411a3e5cb00d8af4dea091ae\ncf50063bd1845008d6517fc11c9caecd\n2c70028d3868f800c891bef563bb6fe2\nb22cb184c5a56569be6e52b33cd3eac5\n20f1d2255fe0ce004a3049a234bf42e5\n441ae7a4a7d4fd143180ee0043076fe3\n0d3bb8c2a405f0729430a488c3473ddc\n5e4ecf641a1adc17618c0d56066468d3\nb8f7d4e6339c33ebc0c883d8cae3ddd6\n1acec837ea80f1921650825127a5a3ce\n6f6a922aebd20842c704df7c7571feef\ne4caf530758740298491ebe0750e4200\n5b623c59af783c1a2448385c8225c820\n77b07e55404c260105f8007a0c93a85d\n36ae58fb5c5dc933ed046dcdfd20d55e\na3f811f4d29ac814d52ddbfe6c00ee05\n184d720ff26f5629a1e91a8f3e9c5f68\n0e7b5ca5d2fcf18507b663a73ca17000\nf9d71f3723f29a8deed471e0ecd8fdf0\ne46730fd7a686c5d02df8db4b3154d38\n16c678dc239dabf760f8a7d4369f2015\n14252c4e8730223487160e248889ef3a\n02ead54d7641d63752e368936d9b0b01\n8aa5e3dc1a10b5a62cdd4961e4eb1176\n345c182979ce8de0f6e5700a6bdfc63a\n46304e75e0dc89bfd7cd0b00131d5a64\nb916b9bed6d25bd7124682a4467a55c6\n40e1042a312806f4612152d057cdb09f\n11c4e0112ceaaf294dcf8ccd0d8ac1d5\n7ff71f01249a43aa214b90c6aec673c8\n9cf56f394795d96b937a6a5e9929ea9d\nbe998e41de1ff6960247cc9cf1cd7ae6\n894a2b27f47f98c8f6638e0dbe4eb837\n9c9aa89000ec58377140a70677ea6837\n58f18c8440f530a99c0baae01c89a70f\nbaecdfc57b70f54a42a243914ba0402b\n5d35608db8e6daa18e1a8aaec9395a8c\n17c537fbc72988fffeba154efa43223a\n8de3c4eaa0b44000e4e957d4b4ca8d07\ne9e943b5d15c5eed56b7f67737f62f8e\ndc732e6bb0437202d731d46f30d5d7e6\nf55700efc94b8238d8e4d08d82d0c846\n91f867cbb6ce00f2d7d251d969dfd198\n02d79ec7f989d13fb958b9d5028a2f1f\n3e53c1b98588b7baf6a852d9b5812bf5\nb70d2ad95db6549744dc246d670a056e\nbf9aeb8ef1a073b96c0bb30a938ab987\na3fc0f88c3833c3238e856e65fe323ce\n22d6d44483ec48a8d1aaf3418b70ce32\nfc02b49d5eae32177a1a6af6587458fb\ne0beb4ef2fedd4e9726e3e9e11b5ac48\n2939dbe554e1a5a69863f5496cc3e2c9\n6a574bd992ea888e5df52406176c4207\n27101f43db5eb7a34f5dff66e57a001b\n852b449965294cf2fa8150babc29739d\nf138af416eb00a1018450f3523f608cc\nad3d188d83b2ade122564faeec73d0bd\n87a210fc32d104e28ad89831311891c8\n65a55cb301a640d98e574bf82ab6b132\ne5221ed7b3f7c9ac421fc264b6a23900\neefeed2507792246ff3e00c9c8a7a95a\ne2b77905c722aa8dc39119f2f33f4b36\n3568ae9a3f9b551942124acb8675e4a5\ne1deb9ac5c8e416b78ee2b07502df3c6\n58c3885f4d3e646222796cfd375ee909\nb2f57c09022bc371e7b2558ac9b49cce\n3a205ab2a2f5106007d17c1875bb8d3c\n98f32faa17e4468705e3863a7365fb42\n84d6041b5969b734b9a99de45bd397d7\nec5932106e6b1bccd0f80bd2d7c7b306\n5b4bd9815cdb17b8ceae19eb1810c34c\ne78250b058473688408c02e2f1f5fd13\n5637c8d7e7222930cbfdca101220c296\n0ac87f9e53597c7cc8ca9f4efe2706b3\n3fb162a4fe05c08ca2401e1d3c73b27b\n18d24eecf375d4f34d8fe52afce4c083\n9bdaad751b444ea899521e4999ae2020\ndab367425750482a00e39f5af7b3833d\nf7fd99903cb3bd3f06330e9733e477a5\nefa9007524bc13baf940e7a803e58a73\n87db8aa204d6bb80fb8e69ad73aae22b\n2df03f2a9c30b82c552d8a42d6e99146\n8dd0b7dd0bb33d657a13f546df2cb0ff\nc6c0a1d798b33e1651d8a372222dbd22\n4832ccd3b64ccacfa63929722867decf\n43be2f60a6db7bf23ed742e2b13ab659\n14c93a357701b53f60882eb60496f89d\nab5b741f88e45c9907f5dfb284e6ba93\nb2c1ca005e5f997a94c2a2d423d9a0cf\n2c8341f56c3dccd94c433a74374f6072\n5fbd4849eaa0410391f92c0b804cb0f6\n53b5b773231a0d69213a5658ee37f9db\n950918db657f08b7aeed5377d9859807\n9113090666e1b8bfd8b4dc59710a8a00\nce407db965dccc652097b371cd0a5a49\n33a1633a08ceadb490f1da4faa9af861\n3593a7462865d783ea6f935465c1a3a6\n6a58e8cc4eda4f4171e0f6d861b47790\n1663c12de46424c19644a5cfb2d27fb3\ncafba385846bc9bac506aaeecbd8bd19\ne045e90337603a7102d928534a2d248b\nd4a84ed3c304a7e852a4e38315c2fd8c\nf7743358a1dc1ac99adf0d322d728bf1\nc368fa5d0ff0f6e336db6a66d9a63d0a\n19ace289bfa6ef492630ef71f27f1c9c\n264bdf14bc0415619dfff38e959b0427\ne7960ae68c5e2a31422e140c413ae7b1\n654ce32db587ac4a76a95d216672663a\n5bff9cec94f5ab89567a1d0a24c1bfa9\na184f4517f73ace5bd3bec0da1852a55\n0b5fe2bf13f5414b91af52ff0d10a79b\n1a8647bafa562cc57aacb5c7c62b638f\n828e9af0cb1dbcd622ca1d63e0e1bdc8\ncbe6f1d64cdea427ef66eb78b8855711\n235966e001353a4a671da45065525b1b\nd803fabf3b3bd0a060b1eb7042eb7659\n5f4b6f1ca735f44296cb984c1801ab34\n371e5b91a7af79e1bffdfea8e5a62445\n5b346431022303cab5816981f8ec696f\n621b70c222b0b3dffa693fb015efd519\n22b416a4835fa528e312e7a27522e970\n300f139554327e63b13b44a2e3040ce0\nd57b80dbf2d1164433900d8c6e753b5c\ncd6f27e5bb4b648684dca7c2a5c5801f\n6695bfad5b17c19efd236a560f93f620\n94b4d303549927a4912bd3c6cc5639a1\ne332565d743a4b7db9952210350d3c62\nf735ad5c7410f050691770818eaa3d1d\n6a1356f3d456c337bfd561624154cc46\n22608871f31618ad6f8df0f9a1178998\n0c69004182d032b4cf92872c4d6a09f6\n8458bcc7abcb4e10eabee70fe4e8b44e\n4704984a628b889b27b134ab58d97742\n9a115ebc25a0a303b3ffee1a7437146d\nfe6ee789aa8fef72503c64b79c7cb5b7\ne58a4852ebb956f4056f7aeda25f9413\n7fdcd8ed6b8880e31310e8613254b8e6\nc0bc77f777b93d65a435e81421adcfe4\n7d21fe8ef3e29df1ec3017bc327a8371\ne86220c200f12c6ce3b15b86156680ab\n0f92c08458d44aebc2cb419604be833b\na8dc201ba917885b6362ac200308b4a7\nca1aedec008657bee2e6bbcc63e21053\ne3444859b200505e41a3e3352fea93da\n14f426f50f4afa3a9a5f9bf5b879b744\n2ee9e32270acc80925f62113f94392dd\n28deb57b1fbb74d22b4ae65204502993\naa5c64e78c74f10ffe0a435a7d1d8ab3\na2ead81566c3128009dc7ffeb6605494\nac8545899003da9305956ee6dd18a471\ncfa9dcf111fd54c29fa6014dd779e497\n3fe4fc53ae0ded41d1b932caddc360c3\ncabad31261fdd6a5eb76834f049679ea\nd4340b502fe9f5c16ed28bd799a17e71\n8a0d33b144eb30c117a3d456559d5cf4\nb6d7228bc818c5a4346eb99741563719\n86eacb6993cb51ed07f72f2f91526662\nda564d9ecf0fb407ee4a816a6012e5c2\n41f31b3f6da7ed8c03772f5ee36aa866\n119dad86ae1be26956470005db7afd24\n20e1b9b2d102850a752c098fc4614f40\n7e854ee55e83c13a6bb45cd55c4d49fe\n4eb681f841198895a0fd0a4b1e2f8ac9\n415bce594eda2ee5221147183056d56d\n581e5329b6d82504673c4d7c46ff3129\n86abb910b1840e895f695ed707f65433\n5da4353e89def83877aa4e8cf3310170\n2dd4f9fb69277367a096135d7d1bd439\n7254267461fa5b1df2c3e391064f4b75\n76e91ab53cdf8a08ce71add2aad7117a\n715d1ac24d4b08e27ac7db3b4df844e4\nd1e1f6cfd986dfe64c009ef5aafcffa9\n7daf644c4999f3f82ad19ee6a118f2fe\nd6e58050557bf4bef80fd837d594e8cb\n2b87b1d305f07c5704717aa7e7324011\n004e6da6677e401eccb9d23e075aff71\n212cad0a751bc284038a98a525ff7e90\n69b64623f86def16ce17d454b8be41ae\n370751da74d8145ea4153e218746f10f\n016908e6a21e495a617bc24c0d050726\n40dd3550d8f10d93cba27deb289f620e\n95e02f7a0499f69b5401438eb8352f55\n917bccdb12ef9f132bdf78ff1d39e174\n71699bca367512922bb0d9130bfb9d64\n3494a24e3892ed7e2fc3749c0e22a2f6\n9b141cbf65189b1661344a0c56b1def8\nc1f1cb2039432fb0174f3b99d393f601\n46d5439c68be91fa15201edf2a41456c\n249eb42739c27b22511e1604ae5aa561\n855e5d12216d747f89e7443063458447\n7c897c2167f77748644493434066ae04\n88256c6e5f2f065962a80ec48ebba834\n33432a4d8bdc89d5e916779a63409b48\n144a5ea4f1fbce22708f459b4ddbc4c7\n813d307ff728acc84c791bbe6b001e12\n87e9c3597eb886dfac124d20459a4182\n4952278fb1ab93867c572bfac0082713\n9fa16c784b1b979eff483e4b203941b1\na16fa9635abc982ebce37f97a82d7a58\n3e77e559b968a4c79fe2b885daa9052a\n02df026f33e62dba2c10a1952caaca8e\n7cc90a6f535be39935215f0cd1f28bf4\n279c116aa328b23168545060fa2086b1\ne0b1a605610f4d3196be32721050ae0d\n759d05d9478213e50a48a3ca7545fdcd\n2e56514cf9e03ffe2d10cbb8a01580dd\n70bc5392fff93c24301acd8ace1097c2\n126b2b7a6935656fe296df8557f5bf51\ne25dde36879ed857d502e33ec8e642cc\n0e99ef084328bcfefd4d0130a282c41b\na06aa11872ff4ee751f00a22810e6665\nfe92d0d6b68926940d3c06df288194e6\nadf281ab68fe7f2ecf11df0709aa0582\n8944fdcc8c392fd637aa8529a04acfd2\n0a51b6f97c7765a89da9bab51b70df60\ncf3f2a865fbea819dadd439586eaee31\ne47cd52500f9507a477072f6738f5b0b\nb629cb84b39bdf20d7d68b245dde56ea\n8ddf33b4f339d522b92984eafc17d932\nf9ee849c07c646b7a71d9cc8b8682506\n845a23bfbed9e43c4c866fa474be7ae5\nac0e4f99992fdc2fd829c1e39d4a0f85\nd9f9d87d0950a11a870b763bbd6f3d2d\n52b9c2acc49533fa9782651e481d125f\n713154c3cd9d72825e5752ca9e6e221b\na7c84d6d5a617cccac374e629df30c32\ne29351ab419eadc32685e89b46d8df7f\n0fa75170a54de978c565a8f3e87aaa6d\nde26e24e835669d2777b5af0222cdecd\n706ac4a6c7151728fbc6e01af9762551\n51548e9396084cc0f79cbb718b49602d\n001f12cfde389280e2006fc5a5739896\n7fca975872ca9dc9090cd7fca82cdb94\n1a3434a24eba845273ee621dc551a484\n4bf833b33656abbc8ceb478f4b9b499f\n0f0e9fe8f7fa4e1a770efcd895543509\n9424517f98623de227e504e4e1131f7d\n5ad8ab470c30f477d7c6b5bffa42acd4\n37808c8c9488f99d089838d7d465274c\n8e15e4a19102eafe4136acfb7d8f1502\n9b5b645255307c844e90f56a2bb2d0bf\ne399e10eb96f14f58ae70853de498897\n5bec9e8af0acf4571dd506a851e304d9\nccb43fe5f257c057814b7e7e253c6ca5\n81e69c59ce97b60da9f25d02d39af536\n257115c86f1b7261d6854ff84710967e\n89bf13de0aa8c34c0e990af8cc056234\nbd8a89c726bdc3096aa0cdf99187f790\ned38c5c24fa59c78d889f9b7e5c0e3eb\n1a4d91a6e4828bba4e48641eb47c04cc\ne533685511fdee8ed435ecd908d9ba19\nc4f349f655a96993ad0b0680862f731d\n674f3def787399af6e8148d5c09ec115\nfd1fd0a1e254babbf559bf1dff17be3b\nc1a860a59fbf1aa59cc4fd8358900f23\n7c1a5d12744dec24641ab8ca14fff597\n5783a5c8d63d076972f4661f9d8b9b79\n30acc1ac6de04d373afeb61039029ceb\ne2533fddd0850da09e119368a106e0de\na7b0f3b699e20bcae5c880594006436a\n0b59fd40b443549c917f88a348b3b9c9\n8ca8b980e7531e4d78d0a6b787c1110b\n65c1026364078cdd1f4de310c12ab0dd\n915a00868b4dce1238b6d5da8de37878\nd99fd76b7b60817974d0515934805961\na6f919fc48a0c6dc5005c9188e3f7460\n980a68a6988c40a4ed77a9dc2c517485\nb51501d2735402b74db282396e5d2c04\n26028f3375621d8bb0971a89ada3c71f\ncc6b164294747fda794af512bb5193d2\nbdb2ed86777c39a9daea5c50934435f1\ne8db92077ec6bf69aab2ffec184aa4db\n8d189e7552327caece995598a5c10934\nf51e7387de4082c40a77a905ae3180e9\n5b996944fca5160289c5ad6e923bb0ba\n3244309cff42fc2f7eb62385e536ce28\nce012c16757c1328c5dae3e8c4d7861d\n2a97020ded0229afb1a8879f4584cc3b\n571130d5d32c4ff3a93af13e82d570e2\n6174ee50ba2632ccf006bd17e80c3d46\n0cb5b778715ccb6b300892e974e2f427\n3b2c0a4b9cb066507b320f87db65c938\nc9c80a13fdf9df2d910df2ac7fad39c0\n688333f9fa37f22efa526d59d20de9ee\n9c9046eec60ffced1ad3dfa673c8ed07\ndc6edd64d7a13befd0d1ef7e1bb7d77f\n69c84eed586829e6c7745c9e8d82082b\nb116ec0f9d6cb50c7cbc85efa52b63f6\n3a6fd3ef9394efd432419b3104389683\n865814ea0f3bc666774a873400717c53\n2f8cd79ada7a2c8cfb1923c71cdb4dac\n75b1df3e94fa84175e62a653be155b84\n14a06c67943a9c7d7b1cd66a6a7fbc2b\n80463801fac263134be3da3d45cb4bef\n1d1e63a3fcb12e33abc088af6f76020f\n1417171afd3e17fcc7670c6d17ad3a3f\n1e0242698333591c46dcec8c522a0310\n7c9f1a90bdefa3ccaea80f8a894c5cd7\n88d96aa87b5f1141266273ee8b2b509d\n25dd7f71eec15a4d010f74201cf1ffe1\n41ff29bebd17ec9f08a252d97579dca9\n2e863c478429ef3ddca46ce7e471a029\n0b24cc97c2665656dcdab5ec6690d665\n0589d080909a1cc85e9f633892341025\neaa80568e89172a4c67128a8d2fc11ee\nfe4f298677172abf5220b5741f3f9eab\n5791cec09a1eda6c8487089e5da557db\n056e3decbf68ee87dc24ce544129159d\n0c493ac924f9104e5fa4967b68388279\n63dadecd5323d789cafe09f01cda85fd\ncfc6a61a0ae7fb18b1f52d68411c40b8\n6a4f591c239fb295a7d90a3ddad685f4\n281e398e53bf354f1ae378b7a0213d0c\n41f58cb5c86a751e7e2065d7c021efe3\n2cdff93f5f3bba398c537620612d94df\n90f235ead27d4349a4b108c963158025\n9acc63c25f0ba4043b7aa15f0afda8f0\neb86dbe69b0e36eba607f7ebc47488c3\n4c993cdef3049c592b359e3a58109de1\n90af554c6d7e167767765f1371490ec1\n12ef5be68b9628aee6cbf6d3443477d5\n389c8b8f2c825ae4e1398b080059da56\n36d2de54d52b6158c2c9bedabdbd5bf1\n464cd9eb2f1cbfa3fb7c13a03cc063f1\n263d7b5c5b0d30f1a06001c38ad04cb6\ndcbb6c3364fd3a79f84ec725005a9f7e\n458d5f1afc81ae7291a7aaad852dc12a\n96922cda733ed8dfb320b2a5afca949e\nbc4e70dac4a264e62a80b58427011b8d\n6eefd37109ed544c7a5721f6e2b06817\n078f890f1b4ebfe426b4d33971c04e83\n3c880e8965dd86d4b71a56bb53e8ed0c\n95fb7688b875d03d4003c904bc68faf8\nd2508118d0d39e198d1129d87d692d59\nf3508a3a70bbd8351716d9a895f085bb\n0beee71d891a072d90dde496bd48f2f0\n8833bf75a3c54f38944e60fa31f80634\nd7eb0a6f0967c91a1d654b168ea024bf\n055ae1f7fa3bc0700aa6cbdeb40fb5f4\n8e242ff2578f4be7958a1fdafba21a0d\nc7ad1dea6ec57ffdb5b80a285c2efead\n6b81811d392e183cac4c26755d137d00\n1264a9e3c0f79a201662bd0ae6900c38\n3a690fef098f767e15cb435a91bffc02\n2c8c9759d4bf4ac392bea195273eecd8\nfa3c19e8b89ca8067bacd7c9e669786f\nf6e5c496f1fe799cf25c12e3fdd26d58\nad2ac99c259a5e8c99b43807f7b80c2d\nf3b9bacfcfead73e0ae49b341e8e3a52\n809da39b639cf58799713ebbcaa99b24\n817d0dc6b35d1471050751ab38d771db\n64def923b770b04c08e592f599405bd2\nfdc8283977e50ff7064f6b2adbec9cf7\nbbd092550ca6dfda01c2d03be2ac1d86\n98aa63b2d247f7561e25cb602f8818a1\n83af423d2f2baa88b5962cac65c545da\n2a725a2a3dfe4b80e07a19bbb3706c5b\n0e583da44bbd30b8786a820afb91ccbd\n5771344d06686d3b8b225b580e82b7c0\n43b8e7663ad3873c8076037e48f3c7a6\n86acf692e6a993bbf3428af13f540500\n390a08238214b6a629a613ead3fa9632\nc2b96183ded5287a5885758aec452ace\n7511fd1dadc135b89ec42db38dd8a10b\n09e45b294521429126daccfbde202b81\n66250e1b542cbb67dc8cea2ad8c60d4d\n2cb14ba63de29b5b409e59a8c4757a7d\n8eb563719298a20c2df97b2ea1a558fa\n6c547efc37cfa9abb979ece1d00bfc2a\nbae7c318c8f19c603f14a5f1eeff50ee\n436e2671a1b5a98944375a19c9e2d377\n9883871fd19191f1fb488a6c259231e7\n0fc128694962b96d8a25edacfd0c1b9a\n9105e8832e5b61272d27b6747808f07b\nbebc1a873dbcc9e0305472fe6a61bd76\n9eaa769dfd92170e3963675cae828c5b\n9e154c3ac3392eaab9147639f5719ce0\n4f457ae0d50c8369951276ecc17507a1\n61380324537ef499a4394f615ec002aa\n1a43322efb962a456c0f1880b33cf88a\n58681149558784a41d56b0cb6da9a064\nbc5bb7274d4a1bf2738be8a7bd1396a3\n4cf5f43c05428be428b8b1b5e5bb25c8\na8def8c2faffc61b74bfe0a289e0d591\n9d90a0e7f65b744fd6ad5cd00cd1d8a8\n02d5bf51cef06b25a8db4e1a18adf685\n50b873ced18f6ca3052bbaaf06af8ab0\n4b9cc7e425e8ad58b271cef2e57b9a95\n89be0c50c9b29cdcd3cfde297fa95645\n240e99e9c7a67fc302e8bd47316543f5\ne15b29f7697fef7d6f585089dc0f13d5\ned87b95ca4c93ceeefbaa30094d18d62\n3033e57514b616edffd5c42740dd45eb\n0c287612152e4fd5c4360cd5189a4bb5\na3466d6ea3a1fc2d89384239dde73ebe\n125752622edb29484b3b6d6019e8556f\n062259faf9d75798b9df36178cf68bed\neab802f6bc2639c454b09ef82cb3d10b\n315d6e4931a5196c82d1372e05fd7394\nda719826457688a32fc355f954282139\n19dd8c4e6f05d3ef61bdabae204440ea\nb27b7c6fa16c50eb942e0f3ebb8060a7\n813a4219d79396f889752fceb9ad78dc\nc30b5d3533e64eba623e2a2ea0f0751a\n73e3cf367946048515f46d96dcc61569\n5f06f985a510e4ed03268a4a9a671561\n2aa949c8ddfc40d8c992cefbfc16f9da\nb9353bc00c519e1b6a01f0d980e27f66\nc407fa0f7489e46c205c8a6af3dc6bc8\n1c27f4bcdb6f72ad039c5fefedcd24a9\n22e104c8ec7bb7154350c2b4a9ec1c0d\nd205abca4174fa4fbe729bf324125505\nfe13119fb084fe8bbf5fe3ab7cc89b3b\n5e07141d73470853a4d31f05ff2ecf3e\ne321471812e5c4b54c9c58319aec9f2b\nce1776d3f1362ea57c5039278f4f0049\n18697449d7c48cf32cdd4f14857e68ee\n9804048db7e16d9c9692cc6f380a09bd\n3015d77ef7e58fd770263639e33f3c73\nadd54a687c6aef45e63eed9cc9b65408\n2d6361616dc5ef65bcea83ab716ffbb3\n763921f80799db92bf00dc74fcbfd8c4\n46b5bc835dc835af2f38abba6fe8e1e6\n8ce8bcb8588ba3bfa98d9d8c854d0c8a\n8b68b155a433141fcf0aef81f70cf020\n8e7fce12d46b2706585fcbb258a76345\n65611f6c7dd655826667564aed1d8219\n074a22f21dd30f563e5256a4922fc814\n6ad2df3cfc4ea58a34975ea17422e63e\nfe0d02610b3bbaa518d365edc8e2a40b\n288df1b766b0cd3a9a72d95fa4194f2f\n2da538aaec60bbebeee60e510ddaefa2\n4f501848e69f05a1ad307c29646b3884\nd1aef16003f1d085f1e233a4b8080a94\n82d965a52a8794cbd321c54f340d6655\n38310b9266a4602d4b61151f4aa86fe1\n88f7f811c5ce7a239ee20eeaf4264a5e\n918be526d14eb9ac5713b6541c770299\n0d54ae7ad1db6495c1737d7246f51f53\n836fb3fc94326d0d7c1a105b9664463f\ne4f39349ec32b57a0b6b8dcee03005ac\nf1e319b8ece2f31a4affd9a911d53c57\n95ec9c3ed988959fe521e2392f25fe41\n624c050bdc9e7032c8385c69a3ae7c53\n9c6c4b03debd0d9810b2a1315fb9d6f9\n3d2fabfd501abd89f2996a97e1faf044\nc39bd0d012aceed4a07ab94f04d31688\n4c2dc668f05726cbfd2f5e89bccc22af\n6983b4cd210aab338877de6d3b33c926\n7e541ed02c95050c2adc0578cec44fc3\n02df99f5fd027241b30413c96905812e\nb1f4190918ef5aefc1c744f32dd0a4f7\n0f4036499be2e755d0fae2c749664b65\ndd34e94b95abf02e177b48f0366099d9\n1468849c7dacd87b19262bd0add7efec\n9cd599a3523898e6a12e13ec787da50a\nb3db44e0b62512e27505251390a09877\naa5ea07b7635132ac4fb1772b90665ae\n4d70e93c98a3a5ff1e7e5160d909a9b9\n2d7ea60e3afc65423c79ddea106e0075\n91bfc7a8ba770df0020d1d927ba7b171\n2b55ed7e47db414f2082bd373e4200a6\nb3a1f819b62b1538958129827d37023b\nc99cdfb28579b1e36ddede800b88fb89\n48b031a573bfb741996e65dd69ea1486\n032e0c4adfbf1c197d56d9975498fd7c\ndd71717420fb418121333ddd04f14570\n331a145dbe850529f6f2be94db621359\n875a168599fed50b049e061f24ad8fbe\nf01339fc4abbc1a4cefe83c503d44b0c\ne4ac654ba9b61686c2dc854a1128a323\ne14b420b7266f69a2b2b457f3bbec804\n19541a2746e08a6b8f5145bdbaa23e45\n06d0145b66fd46c81425bf9e38891272\n7e5eb6d825a7f37f0c7be4fdd95429ee\n3fda81469016e997ce1c19d79a29605b\nd5c8456987fdde69f283fd34802d0140\na6a2ad65c7da0f0f28f4f908d9c9fd6c\ned967890f5e0f5dad4d6eb8c01a8cc9e\n5bbe8678783011869d67ff0087cd8fc5\n7e5b152fcf63f8dab71a695d1dbe01fa\n08e9de24ab150d083240557cec091d53\n82964817bb3687780b7c2e9016ccb2fc\n7f813597ae935d5bfc30a7aa7b31aa35\n1bbe688a9b125b8e70f2037a51e6e80d\n8a8ee9af697ef1f6fd5d2bd4dbd42f5a\n992b85a92c01e462bde35f2f09edf986\n46af79067ccc9a409290afe55f678d91\n12812ee3a31fed982d1e33afc936864b\nfc87ad40f8d502d70dbc1199c5cc45e9\n87e6b529685eb8d7765a925666fefc16\n14b16718a968f5a6eb0397fe1eed1db1\n2f3c3dd012fff07506bc8e641ab7ba13\nb3a7a04957b9155efe1bdfe1091e3591\n4373f82543616ee768a7e4e205872480\n61aa5b6c78fa4e3636069347ae39df10\n1d5019176434d4f4fd9eb347c5a6d983\nd55fa734c1fa905b7a4b7f40c535819b\n5f6ca5e5842af98bdf9f267b26b14105\n6cb86681008e4c1d22673bae3fcab3c7\n4d1d0482ce8e27a7467874d69c44d9bb\n3b09fe568a3f024d309cd0c64db92f09\n68613f71357a59c03935f2c9d9453000\n3fc9aef608a93d25517d8f99fd5691b4\naa04282dc5edcd285d6f4bd3a9c293d8\nb46f2effab845cd1ac6dfaa8fecce4c4\n3618634fc7650e537697fd7f542002c0\n26a6911bb179e433be77eb3dfae00794\ne4c8860ad5fd9da4bfa1b158e1c76670\n6bc1ffdea33face9a3ede95169c14ccb\n08792dfbb668cc9d280f1f37d8e3cd26\nb7f002b308f5770e67aae23cd9379301\n6a88c80e51afb6f0476c3b855b46afcd\ndf796f86501577e369d6a3054c77bd80\n674441960ca1ba2de08ad4e50c9fde98\nca35c56c0c379f292f8fab68b3a19f61\nf3a2a427c0020a4af9259b4115eb8da3\n032e88c736faa115dd7d26273ef17cdc\n6384d241aaa8b07343b88a6abd670742\n67fb6d381e8ba29ef0840ac8af406c7b\n426f8401232ba50bc8537cc259e3c8ef\nea758d023ca0c5b511086bcc5916a02d\nbcd2272fd102f76a65cf173261cd1221\nff4cb78054ec27108bb9d9522001f511\nf405ef9870492261e2baf0c477ac3e96\n2dc2561452b90c7dfa2de4cb74008ebf\nc99621b28b3d4f3d6f6f8d2c68a7f564\n93831623f24e09f627bec5de284b3f47\n1722a7c6a388fa783f7372c8c93bbd05\ne73af36376314c7c0022cb1d204f76b3\nd47336d969baca890ee24730a37b0435\n465f33eaf03e8239eceddb1571b8b2f1\n58e6c85a66031074c2efb66af1d64ceb\n2224caffa98b46da55ed4131b01a9989\n49077cd8846964ce865c72e324be16a1\nb8bd40d7f6a822d5f0f191a7f8bdcd80\n521cd7b832cf88bc7bf0f85f4aff993b\n65878c95b1d5055b0dce287fdb970ff0\ne710990eb64a10366f72e0528572344c\n14bd6ae80ecfe2ff182ffcc9ec49358b\n7ed1b87c709239339c1ff0863ce482cd\nc79c87bd1ed892e1da65e3b2e5d26665\n0a7740e654623915245fa1f8e985f244\nb1e3598f3837cbf336a2488105b95522\nedec7973b20ab2b97b0425267e0ef412\n9b616b5bc92aac2a23cce334c7576aab\ne6c7b6683fb0dfcc191793acd5bb08be\n5a33df9ab940d7a95d4c4f7501f6c444\nc5875e887d4876cbbf887489312cf679\na2b03f22efe39c68c049a26d46a5e2f3\nf027869eecce8914925fc7865a01609b\na1a740e5f7e4a21557f2fc05c502c552\n36244a2f27481ac112568ae8a40b6913\ne7b6e3fe91f8e4f9ce48f95c8f5e310a\na017f43d17bba6f32f90a4c86e8055c7\n3b8117f71a543345b1b317fc792feea7\n867240cb4a235673636a4eded5ed2d95\n073fb397954f0a9034a78122fd1d2fb6\n8a337f6360d312d0336b90f8805a681f\na69b49b975bb960b921d6675a83fcd02\nb087f94e1f3ad4756678ce80b32fe570\n66eb4ad35cfeceffa1ecb4aef34bea2b\n59c084ab2e28a5118835b55e2c23b8c0\nacbc02782691b078435e1e4f296ce5db\n84b7340a7136b7af7a76f8251e5cb0a0\n8d6363b62c3c1865e30be769dc4d44ab\nde2c2d88d06254a74854462d94ee5e62\na968667010d65112900f27a282204c15\nd36f8f9425c4a8000ad9c4a97185aca5\n814fa5ca98406a903e22b43d9b610105\n3c2018f200058a703a7aba9f941b2ddc\nc192130986511d07aab2caf8b6417d3d\nd65c0531bdc51a85658541c131b84e47\n6bbdf3a30d5304b536e0bbf464b22acc\n1f681635c89df401ef18598ffe3a0694\nf6c68da8e9f60874fdb6262a59dfb8b9\n7d97dcf0a101baea5a5cabab7def80c6\nbc6c583385e5855fa96d5549f0f7210b\n3246a85582036e262538c6bd3088e9df\n6c9f3c47faec5ed035269c989e72cf47\n2fbabac8f811d96550201494332885d7\n5bbf5a52328e7439ae6e719dfe712200\nb602183573352abf933bc7ca85fd0629\na2228660c82a860a7d13a5d0f1c7d455\n14bc4a711d82fd75b0b781bd678398d2\n0619c1b70dc21ff936694addd9fdb36e\nd403433032d14fcb3e547c4c23c9426d\nf076a3709a64330bd05266194a761bc6\nec8c2bb4550b4c3b15593a06be652e15\n59bf3f6f08723b9cdce0904298526d14\n2fd160889c4e98b3eee09b1efc7397ee\ned4487512de30c5e054b229c7e4b047d\n7f3e0ba1ee665c4c052e44525c5cf69a\n2d90c6b20732e7210d654b0e7a9e3a80\n9df921c968e7074909651ccd613af0a6\nb26d4afedb4acc765d89290b8a83c5ae\n2033ea3066c4fe12be571531f09ae94d\n374570a06b9e5e9f0de41750b283c091\n0141029fa227c3ac4e429e5a6bd64e28\n11d9812a5f520429be28d90954943b48\n7c153925f73ae4379900c595d0d93bcb\nb7cb7e90741d9f786e56070512b0ed00\n89dc4a518a3d5f078c5c554eaf025858\nacec79f265f963c0cea08e8cd13ad495\ne34142e877a26f0050b65a6b7962df46\naa6680a0a2fd9a165f8938309e58d1c7\nf26d12047f7b9b9b3ba2eccc5a6ded1c\n8001b595e2cd10e445f36a022d7c6e0b\n55cc8de5e6642e060e76ba86d9ca767f\n71dc632ce9fde8249540d99519942fab\n67642efd498ac7024a68da47824ab5fe\na8b0cbbf3784b21eaeafbae4275bbd62\n13339b6fae864f0da2bcb5917dd872fd\n4cbaf90d9dda68c6a0b21286ecc98590\n06b2b243c2b7073b32d7158e5513e56e\n8a4caf77a77edd2beeb588161a1d8523\n4b62858447fcafe744304ac302844d5b\n7e1fbd65d5d6a7a32cadebacc2c0013c\nf3bbc05c5bcb4195c7a50f2f238a2e2d\n023a186382a3cf06dee7a5434674423c\nc3e1cf6b123cb0d5cfb04bb1acd38595\nd3e353a4e7798aef768776b10c29ecc7\n54895a7fc98dec00b0c60ee700098423\n50c44c85122f3bb80423a2f3e8f75e30\ne35104e0d2ba6b9a7c731b73226733cf\n072c1a5cfd6b485725e0e2d9854f8409\n3b2992c503f32d3599b3179745dd1db4\n59013fc994496533ecedd0e68df2ae60\n6b0c72a08e3a2d33f247ae8c6f2bc0b1\nc34b0d70fe65ac4209c6a079fff99add\nb10ddd0c218f8dd7f420b4e2dc12436c\naaa7b7e50c39dcfd648e975c6966d078\n522472e9e8cb391d2220d3a89125bd46\n36dc69bb796402759beade2c851a9281\n3cd639231c1221fd6e8905037bcea39c\nc171af021717f6b8c83b5a5f66754ce9\n9587dd0d97c4d7d5173b5ff91129de7c\n416d77a1288453e8663e6c30d214a991\n26ceb3e41f60c247ce12f264972f7c6c\n7964b26d9277ce91dbef067def4ee38f\n88fa9f694690e11239096536ccf2702b\n91cfd35a6513bde5ef088568fb7a1e2f\n466a09b4cc34cc9ec407fd8caf5723f0\ne65d2794fab03ae498c3aee136760b2e\n1dbd3ad151ca7750720ee90f62295230\n68d16db1cfdc67ff29f488491d41ec68\nba7790b1708b71cb2b61b1a30d824712\nec6fbb422f684a89c81e9522e87db426\nb71bb12bb7a7e446bd96cf4ec428865a\n814bf51258bb208d948c106dae3e610f\nc56c7b392f303d53b3a3149994bd5a22\n54a6483f5130ecfa75a0c5628396bc0d\n9e99c1a541127c391618c4cead906d77\n1ffe0427ae635aad3e2891cd6c69ab82\n5241d05abe3d56a0825e9a26af6f945f\nfb7792b6596fd12502dd132c0aba0568\n036e1e1b4618a5d772fe06da7a9a7ee7\nd4c6d1957aab60656d244d958290f5d8\n40d4f24f1e9717cbd9f72fcf0f0f3191\nd4090c9aece7bd147df15ab2d6b43c9f\n510b82f4399f3392224b2427611d362d\n24237202692ef9941ced239161e446a6\n838337db0b65bfd3a542f0c5ca047ae2\n9761a7fbe884b0f99a798662c37cb817\nb9be14d4ec3a3374f3980cfcfd391453\n4c3203f26e43d8ae515b97c61d7c1dff\n0fcf18ea3f8d261e7db16bee8598c036\nc20e4cadb22a9940811171c21f086ae2\n0dc7297dba75171203a4b0fadc21f4cf\nd1f423e166ff81d90d32acc0f53549ef\ne4675471e795dac44abbe4ee4b074327\n9bf545b357a9858da2315ea35dcb11ec\n004eef552d21be12d566000b05a85722\n586452f5b1e6b9521a174f7317014b92\n34cd39b138b527de24d6576fba5f6ceb\n1465ee5b6d264f6601daeb4e3d83105e\n4d0f4ed3203b0803d2d07e6a4401f2bf\nfe8c2cb17cf598ed340b86e09d8c7a61\n7ed85a60254d3e798fc6ae2a38c55068\nb0d84bc3440f8262bd006e56b4a61abe\n9ef3a40d6c62a6aef6e1ca0da4f150de\n60bdecd91d995b42f84e09c5accd34a5\n7139760026dd5bfbe735fdb193aca43d\n45da8d03b558d27851b80e9a5d20bee5\n4ba1612034954e21ed1db46e3906b42a\n76a2b24c7772fa4e4edd4fa7cbe73fba\n13f8017dbea1ba8ad373f1957d79f5ad\n670260cc6c817bcb41af52c4db301927\nadf6defb6314925a46a9747cfa21c740\n1ab1baedfaf89b4124723e8776ed65ba\n63b652010c5bdcf9d2f7a2116d80b4ee\n0673c13e87d61768ecbeb4a32aeffc0c\n4a5ffb56c73e5265fc3823712f9f82b1\na41a9b2bedb10fe9cd8973038ccaaa04\n858fddcbfaad945264f1f46c6872268e\nfc9aa3dc9bb4699c577b3a9db0e441a1\n9d7bf075372908f55e2d945c39e0a613\n5c6d81c07f7c268ca6a5c4a9c829dd97\n8801045427ecb0431b1dde4b198fc059\n13904743ff50d8a4747f730b90a661f9\naa0ac0bf65aecee154f9bab6296e3527\n6a9058c597a83f8da0f7f22cf3668129\nd95b2b2ddcc670a66330a508ca3af5a0\n2adf521149526dde524f030851c7f903\n819900cf628b5e5e3f6d32666edeada0\n242ec6f98523f85812ca700e54c29daa\na8a14835467bf45da93d858ffd3bf71f\n6138a13d3d4c90c36ac1a9c13a70c348\n3dfbd5e9f8d46974d732afd482e91210\na9f2082af1d8403bcb3953644d8c9d19\n54f67150ebe2d7d4cfa6d1d9348dcaa8\na2dc902164ed35216482088f5c11a225\n29eff9c741d432819ad44d9628008609\neeb336ddfa888cb3122b8ad5f1350e16\n7efc6e01f155c4ece892fbe9d540d28a\nd8ae4cd335576d75ce6319b90cb34e52\nbe0e77d1505b5fd31fd0eb69f02d3e35\n26599a2d5754ba0e42502773811ba539\na9d2117e820674751ef6eb190df5c5c2\nb6492f8aa398e19ecf4295c9aaf0e72c\nafd239c5451bfb86220cdabce4d8b30a\n34493b077419b8bfdd94813ada011ee4\nc60c5b568d5916b5172bcc4de1249b32\n86711773d8cba579a5e85969051e74dc\neff7490b8ccbfbd4b6e72a412b5b383a\ne8fdb230928e36e2939b09153ac91f3b\n2bcccedd86035dc0161dc0101f58695e\n45870402888b12dee460cc73114dee17\n71483a002eef416b98b6ee103a6ccc15\n21fdd5669673bcf883a6b8b3f3e2952b\n83ad77ae50304b3f01d90e337e40f59b\n6f0cb8ce082a1d25dcfe12801403f58b\n1e82e6c5df875009c57b04c4ba25857a\n84de5c660e48687189fa7ed15cdbb57d\nbe27028bcd71b41715043a865ce01b11\n0908fce9b1c4c54057ef8e69f22e02db\n3fc4af350cb9d2984fab35d925c4f718\ne7c00af75dfc2e18f407b8a1ad4ebc50\nd0e7f6a94e23ca5b07eea3fafc7cd623\n3270bb98d8714ff9ee49388d728ff9d9\n4528e6a7bb9341c36c425faf40ef32c3\n239749e7fca41c215a24212eeb0171f3\nedf1b9bbb2e79dff0fa187fdc33dd0ac\n46b4aa6e9493045fe0662c1f802f2bff\nfd3adaf12d07eda50c944f014e96418a\ne7fa32cb05ba9ddc8d5f75bdf1694790\need33f61bf2988ccb2e98450a2be1668\nf1adf7c2df0758fc149936ea34b9e8ec\n921f416932d7f37aee4875d2832f43d8\n2633d841a94068e477eb42c3f04b4297\nbbbbb43af4416f485ea18bdb705228cb\n8a6d8826b87b69ad56767e77232da79e\ne35a43bb57ab57bf2da8764c7bad274c\n6e75aa3d851d4c737ce56f13aeec3255\n7257a37c541b29c23ced7ec4a81de7d7\nfbae4e521c5167ea032ee739ee944afb\n683e7c0dae508462e3c1766330b83eae\n52ab65a20f7500311a77553f711bf530\n79532a4063a520a4f4aac67e687099c5\n3115645784e9e1b9d6a653382f45d5fe\n611a2f126c291d5ae98e97876cb27014\n9ed0ee7d259f7d2807f843f3e0f95344\n7e2cf6b60c065ee95439bc007abdfa7e\nef17e107d8c685be4fbf4ace30abad69\n313f3ec249bac7a8d31d2139dc5faa46\n39e7dd9a5b84a5b6ec1936ddc88e4bf4\n39121550f853508dc3b50fb8323bf4c1\n1951db00d7621de45582166334979c55\nd80e4cc5ea645d79ce358dd1892b7960\n5c275e5aa628d8274287bc9a532f59c4\n52747e23869f0898b1f60144ffbf5e2e\n9b1db7c4b5f517844f202bf7ffc3bc5a\ne7dda9703abd72d41407244d94b0544e\ne4c8f179f899ea1843d9c6daba4f18b6\n1ff1a34228b5db54a0957c18d08c4b4f\nd066c53f5efebac9bf0f865583a14e17\nff69597e924d807b3f7017d19df737a5\n83235cacc7e7b5fa7a4bc9fcb44cb5dd\n51ceeeba96884b37e62ddcdc174ee6cc\n986762321ea6c350eb0d726f80d96d76\n95632b99239050122001d2d53a95ef03\na6a3ac1f2b95eeff6a4fef2d62f683b1\n74c4c12140b5f1096537e01c357a5653\n74fae5cae140fb8c992d72f7b7536413\n78214a1716aabfc7523a0f5cca684481\nd0fd15432e9574e6baf8d8c24c89f505\nb2d6ac43a43b6131099064e2bddae6e9\ne4ff5f01de3ffe7ab01878e2a0ce4a1c\n300154ad5611568886a7a0382c5d43f0\n08286e0f0e36d5c4db8b554996cbe03b\n4138c17c157d79500efc2a5271b45c35\na8dee2928be5339615c8155234a64144\n3be6d8a1d24c146ed3f5d5fb5089952a\n76189897b5d55c98aca6919a2b431783\nbe66c77a2aa4491b927debb5078c3aba\ne97adebf2447f501664a1867c538f724\n4443a9c7bd04697e4889f3c1f601ed4a\n5e3c7b35a39e8abdb7f21584c7bb3364\nfbb9c819182c584fbdac18f87f531694\n208c76b438dccf89be43436a5b0dcf3a\n7d5d87993bd73d6daa86ce68e5bf6937\n613a6ea73bfff02f0eb934be13cad4b7\n8364d6de758507b5e52cc23b55608b96\nbda13838e686a3e2b6986400cd26fd93\n67ed05d7e5a4212d2ee15bea7c44a241\nea2d16040430d8a53ec38586edf6aac2\n81cc255e17b34bfbaca5de45376ca540\nf980791b4b1f8b89de50d46947050c8b\n523bdc6b1a4148b2e5bb82a9702da250\n5fd6b41a8015a5a4fa5f6c66a8496704\n3835f12efaca3ab92297aacef68af2b2\n03a0bf48db85881c7f1928864158e67a\n68d280e5f2fecdfd071939089ef56109\n45a47cb2f6c51c49277701bbcf084cf3\n21b75b7b6052047b8c45ed0597d9c258\nc9016643e4c4b35fe29f49ec33b7dc10\n0751ead5bf259e8e0c3ec02a59656242\n44c94fff6a5901f838ba165fa198965e\n1169cfdd2251e558aaab374d91d34d1b\n6ececcf2dd0a1579822037a917d13779\n089c80c0bce399e8625774eebeabd6d2\ndbaa1b2e2ca91e6f09a2a8d4041bf50c\nc8c6b8bbad5930c15e4931be6db0b5e9\nb8a39d4a946a02133237231cbc8d8150\nd33a34d4ff178d410e2032801934c779\na16dcb7549915546893a27a6d7927615\n9937c75b74879bbf448404a485f69cf6\n1061a3a173c24f17a718abc38e4de759\n05399877fb41f4fd90ca328b8c2344ab\n7c189d486976a79a2d44eb6f238a5d35\n7343761eac8bd68c84bdedf06e3ccbc6\nf0c26fbb9c45239b3b49b4de88859f39\n88acf761b172aee8448602fcd7bc93fb\n7d069ab854d57df34d43084f777b2813\nae1745b3794b78a5b69ff30f77dc8749\n085f45fe61e58e8c203a633304fe44bc\ne36f76529345bf590975aa0aac3fbff7\n10520f2bbf50e4f710925d3a94a933f2\n3da8068c4487068b34fbda555a2d3f18\n7f5a5e922835892301f43715deee13eb\nfe9c72a03100e332544cf29b428ef8bf\n65ef97cc0023d69935747340d386f9ab\n3ba8823090714d94745db97188eac499\n9aba1c9be514810364eb729d71ab6370\nae7c4122496b9a2ebeb39b72ed324199\nf1ff26eb1e44d41afba77800eb99b1a3\n1d42b7567c7945155ca173262c4d5782\n49bacefb8b056cc00a822bd0b5477805\ncf982747df48e674e432668c9a0d87a9\n1bc89212e3c29d807c1d7e6a3669c812\neb127b015221538029b30cce12cb4f32\ne1633dfe99088bad221a7d7b057473df\na47d7d2b0837f5155770630fc3480e76\n4dad22f58a189b1d7cc91ccd8410020c\nf5f79ba90d11fab4258abef2bc1f9836\n8d014a8b61c251bc6cf9fd8e33ec606c\nafd550e3b24e03afd38a69939e2d257c\n0e577c52070a783d34e388db7b821dd9\nd7b6c1bd8843b4197722c546652e34a8\nae4ecda39965914e899ccb4bf4d9adb3\n087125eb8ddc4612e90d54b5607f74c7\n1694d8494a04094fecf14c70515ae23e\n2cee2613cd24c9f02529fed43b26a614\n5106882e11196e68179492944812fba6\nbc26a697e977e9154acefd512e4dc94e\nc1bd4c58bb82164265461cf5fb4e359d\n36712aa280f041c683c2dcc3762574fe\n0e6031baff82d2af576ccd3ed651367f\n547761558a8317b1fd6c760e2362bab0\ncd81f07240bceabc47684665b724bef3\n001de480d5946e14ca9fd68a49d0edb2\n58a661ce71e3db8d253e92885399b7c5\n6a42367ef59dedd0a0c07d9b6f7db11a\n1b29599f54c556effd5497c6a880d9e2\nca0782163636d1a8a0ca6ff9288c39eb\n1526e73b4d8f06d94409fd2600fb2b0c\n2af39739cc4e3b5910c918468bb89828\n6f220f6ade7668bbb47ba4e3a005cd09\n845a26f9d5976fe9e3fd239ec381d9b3\n9eff008d4a374aefddbcbdc8cd1bc7bb\n52802d907cf24c1d5b2336965d9e42c3\n6ef04723483f6570ba1aab3bcb5d2b28\n330d932caf2026b13731e594c6fe1859\nf5d3c590e0fa0cc1af8aea6d3ac4d1dc\n8ace2fa7cfd03f215ea4966a4aa30c11\ncaacaddcf6ed42a183b78c163977a4db\ne0db08a61c51d911c9e4fe3f610c6175\n7f681d6483e05ff9f00646ba2bfc968f\nc7203d6e0a09eb3fc9dfb67f2375443f\nb0044fbe9323862727e0f42f9993eb7a\n3dd2ea234e548a1b17e06adbd0bf5ce2\n091d2ed1c7f1e2a5035df4bd199485fe\nf6b622771a108a8cbe1d8009727cac23\ndea3a36864c3f6c61c4ff12141d6c4b0\n3bbc96af0d8c2183a639ef9ad5488cf7\n893b3187aa442addb4bba10fb9af841d\n2e36a7f5c9896f3fe766bba6f1c673e2\nc1cec96895a46af00c94b755c85610c7\n5c89e09d2558c18d9a25c0a0c0f7311d\n82455346ef05fb3a0041f427979cb529\nb91c590abcef3c85139f7506aa900934\nf0ef9e5cb4e4eaeb04a57529a4c80057\n965295500ee864fc566a51fc0d4ee774\nc52129103313b36d120edde91516c6a3\nc6f8719bbbd823e8a9351a6ea866a9b7\na0dcd6830c1636a967c7581c0d187e1c\n08aea3b73a9498546c2d16b6be0516bc\n4272f9624c9902f8adddce9abb7b2fec\n7595f514a65d234ce9ee0db583335e15\n0b610845ef1a9a403524cb48cd876f7e\n3287e491603eb4c58d07dcd8fc6fa1d1\n973a1f6cdbbfece82ded045ccf46a752\n2518ff1698f539f8410576e93a4c0f99\n4dac80836bd0164a1fb3339eeab8fb23\n5859a61a44923eb094563f7ea5dfde1b\n023066c62bc9de504086c4d86123efa8\n2cf85821bb91bec1eba147be025dc040\nf97725ac5652bb139a385ba96cdf5af5\n553356d34af2668fd0cbd5796bc1ac0f\neff6097716868d8c0ebe1f6a26e55dcc\nc5080896b14ba9ef3a123cf30b3ba372\n162c229d89b95de7638b03acf5308654\ncdda04f35a8c5b1e3c9c30ed4a541646\nec92cd47959ff3b006a412469e15a70a\n3ce1e1db8792d86d21210d89d85f4325\n1c82a8ddf9772d329439ac35db8a3e02\n1cca78bab327174725ff0c0e4ab91413\nb66364c943adbbe87f1efed6006d11a0\nae8594dc3cc4f678eef304f98948ee5a\n72f9a298354b323e943093486013bfc2\nf5ede2d3fa5f945f21d0d6ad05f462a8\na080d82f592a56a396f62a1c539dd025\n3759bd943f81b276cd45da15a8c07685\ne0f3e51d555c38a95d0b65066f3278e5\n88a3f45c147c39dff133528d44412c8f\n7408c7a5b6402f4a60a544cf29f7cb0f\n07b5010e24c8a059286390b36b513e3c\n145cf122c84a4d81d0968b000b7a30ae\nb2c6e73515adf84c41ed5afe70bdea94\n12a1a1865e8e23f2716a1e32c7f6f980\n34115ae07978c6ae82e9d1aefafe5fe1\na3b69e7eaf09a20696a0d40c180f4f3c\n6f03617bce8a5d04fe97df572f273d05\nbf256b8fce880c9650557c33b53191d1\n527ac16399fbead1fa3d0102ae589d8c\n014ad490257f1757f32f4c106284b1e1\n8c3863eaea37a877d8ad3b75e8319f23\ndb86415fab273e8640eeef1068efca43\ncc2a2bff17a8f1a032c2f3c3b0f48731\n43c67dd35b18d9eddfa72b3e6b3fe3aa\nbd89637201cfeb3796d88d326d341ac8\n322e4c5687ef90a028603a7583f54508\n620f291e4857477cafe5e528b75fcbfe\n18609fe427452f8dfcf33b06e33437e1\nb4120c39e8f6c056bee6d074bbf17d4f\n48eb089a98207025c9789ef138e9ec06\neb1ca19417c16e854c0c6ab681472b42\n354bb46ead5ac2b1f84021cdc0653d8d\n2263c3c06ef342c8e44a0c094149f6a6\n89914c6ed581ff46a4ad32c690cf57bc\n1a5e1eff3978b5faea8304ac53fb7851\n2425300110ac22e03c67657eb468d202\n4f2029fb0cfa1403cdebe297557d81e5\n7f3608c07c4d1da5c5bd475ba793f7e7\nfb7077358390b03ff61cf4edb285d3dc\n93aa9b0359990f11f33e5cc746ae02b3\n7b934213f4d4adba4e52ee15ea9f03c8\n48f546cf2d58f6331cd0a9e780cd12ba\n96529bc42e557190f292a0f137f5d27f\n49e232e684f5ae0f556e4e3c7437f785\n94888133b92b3469e9bceef63aed14c0\nd95445cfc7136ab4b0156db0125c706b\n5ff81b0adcbeaa76a555d8e773bfb6a7\n57054334de979de8663aab8a3fd25f81\ncd01f3a9c66b52683ff002ef68516145\n4c28985f201442c45101365d3a8ead5c\n60d9c3b404678a9d18615cdda343bf0e\n27c6f7c6cf51181928fdf738656b82b1\n8f81ad81957e147dd01500d90885925e\n1b15054def71c3ea96b107543c0e2c6e\n208568ff599e7fa7f82f75ad6d5585bb\n56b288c91ca0595c34d6ad43856a8de5\neeccbb5f7c04f34f106372b467c2904f\ne40a285715c49eaec3cb9c1b2a071836\nb6673efc46c2ccc2b9f797dd3f1a17c1\naf2e5bc4b793b0f413bb21d60c959e0c\n33b70c76c087bacc0e4aa99f9373f96c\ne049d7c90a298ba66b18556767ec8b3c\nfe854c94464612d3681b7efb829b70e7\nf3ba6ede7e2388ea8528199307053ce3\na15d8d5c7a841cd0893330801c72e0a6\nb6841c3288f6e553700d28dd5885d4e9\n7666f96663c9d5de4985e640ddeed4e2\na099a436d138c3264c7edf8b5f378a66\n9f3c2ae52508146f86b3fc51a35add83\nc40ce5fe26aa23cc5f4355770ea57c48\n21a2c892d8e401ddb701bc0de8beeb27\n69ac36f1cc051017a566b9c199dc7b70\nb1f1435260e1361fc291704a3f5b307c\n46db34578445af7accc03362408e4c2e\nbfc083ec9f950b57092a8f0fae3ff6e4\n2d6d0ef0a53dd2ebf350c9c28f0711e8\n4ae19eeb3374928c641ce286c81d782e\n542b93afabf20b3875e8db8c838ec8c9\n285ae2b6d74088e208ef46516b37e82b\nd69da09b02dece52bc5a42e9dc17b6d7\n67ccdf27e1a7f61386543b22a4e4e5f9\ncc8f169ce9f1280d3bc4ee0ea78743a6\n083b2220be838108dc5d62f0ad40ef9a\nefca0dde803f2bdfd77acc7f60e71018\n172b13dd04d3daba45957c88cfc53b34\n804f4c558d8af50f4930727290b66211\n7137c409c3b57b29020d66a9ab552dd9\n2b18434f0dbf7813e8c7cd577ee2abfe\n46ce6ddc095ca29426c4af425b4f9b8e\n6a2cb90df46c4e8bab4b0d6a2b3c0645\n3f70a811017c4fe4fb8d115edd50e3ee\n50e3b632bf40cb665eb4c8c1a03d9bb1\nb2fc1742595463bc41bb117ed4a56d7a\nbc7a340b831e1a4da392ab6eff3f147d\nc30592cffab7f35fc9c3454193ecb037\n1bc79787a5363a6063cd1b5c203ca9a3\nba645ed04bb4d8e8fda7b42de42a9f27\nc6ed4e91b578557b74c4e5f488bbe0d0\n7bf8ed15e57d9ab8deb80111180303a6\n4abd826fb6354646402e661b64f6dafb\nf9fdace683eb2897408e108869956588\n448bb4369c12e2ff763644bdabe3e6ee\nec70c1ff8c5fd743bdb97ac0f0492e7c\ne710650e54821dba5b73e1057503e02d\nbdf588f43c318169050569c5783723ca\n482b2d5c05d5b8cb9ae886cf8642fd5f\na0fa9b9ecb457221096e07f59b4b118a\n7150df4767888ddc22f831809b81ce80\n72cfd272ace172fa35026445fbef9b03\n485bdbacefe22344f6e78ca58a669242\n26814ed17a01a176039a18c4c3acd81c\ned426bd4711aa51c8fc7f6be4e14b568\n450c64614ff4cb60c672f3c3ca690afa\na02e939e5ac33143cbbf7e7aae249881\n8d8bea89388715ee7c01183a0667e892\n5439e53ff10c983e27d09d7174efc0bc\n3ac4062a046bc25922196f2b8f864ceb\n4f368a48b4e9bc07be976e0dacea2266\n7404d44ec06f4be311d2228451aa2e93\n4168ff76e2a0c9398a5f838feb15fcb1\nf084bf9a25585ab9a6e7212188d58ea2\nac2144ac2b4c1422be9aad30489d6186\n2306b4377429730ee03a806cff76e92b\n10b6096d4437ac0b5696baf7d92f8d7a\nfb5d0d429d56432ef83e50bf54c19b28\neeec9624e5ff4e0ba983a898d964b3fd\nd5424d89418c330de795902205b1d6ca\n64dfb1b7003fab04f9480b7f637166df\nff1fbdb87634e4a5bb20eda35728ce4d\n02f7c34269455731e3e97ee383bcb8a5\nd49132778e5edacc861d8cabfe55ab88\n0685e72cd7956ecb70270814c54b4289\nc0ecbb1cee3ce4dd411ca1ce0f237645\ned384f58875d01e242293142eed75a7a\n60e82485f77275f3ac69a6bab34a876d\n8f49a85e4cf6056adba5da3a42fb5a68\n4706ed30058a9c1543177851d43fa093\n5f4d1fb3ca84b0e94d6bdac300a9f39e\n0794334c7244830bd4514a9f17e46f64\n6daea91df5a78e67bb1c6e4843362e44\nca1250db1d77ce4308657341015cfa3f\n431315274d2edc9509d4246a8c395607\n28854bafa79a455c3ecdb40ef8b1149a\n7dcda8e702f5f4471da65d9a96c1dd45\n4b3ff01d0f9a084fc50507d97de6b82e\n89a5bc96d967419ec0d07c6c704a6f1e\n6a7ce4655e696f9603913c4298bf5836\n999b30c12f8a363e1ed6f3d673e2000e\ndba2feda26da30806b8ac672ed63a29c\n173dd5249ff65d48535635e7d741fb9a\n9b8c73966ef6d9e83cf689bb1a774d81\n2b72d44ef2598353228e175a72034f1e\n602131bd90d6d9a9eb56f814b4a154c0\na79a6b661553189a23eb1791e3cb06da\n69708d03c4e8c8126a59594a1779c85b\ncf377eee2bd1a76e7890f85f45fbcf9c\n941500a2c79b1b74eb8faad93bc3d6ce\n396b989748d10207ce3d7b5d599147b2\n259f893765959d7f2af062b8e4191139\nf35c1df4ee058e9fd7079f26225e4d1f\n25b9c3fbd9a5e1ddfb5a1cf927f7a40f\nff4d9eb46f3e626cfa35861ad5cf2a6d\n2ffbd5c60ba3464c061021df236dc9d0\n61d72c1cdcf9661e0365641c3760437a\n7ba93ca58754d7c44e4a69fd18c46ce7\n914c719a704026b016e7c12a6ed37de8\n12b0bff46dd2cd587c42f0328ef4f874\n03aa3b1979e255fd53cc424e44f74f46\n295d2e68c65117e8a4b9956e75b35563\n0acee51f13c266e0239c3e6be36c359f\n72e77ad72dcdcffbbb9cf882536bf82b\n3a5f1b52344f42ccd459c8aa13487591\nbec09de8b4330289d62b6a3459ab6b7c\nfcb2f10e988fe6707be9acea5fcd9c44\n461cc3d997a78797dbbec30730421001\n24ec9c5c126b90a85ce2c45ac5ba14c1\n5ecd51396ba784ebfa11ddef4ba12718\n882760bf05fc70d7709029e5a6b6449e\n136b8f37fda14192621851578e12c410\nd21c8c6e2e0190c686f8fa61b3a1c5c9\nce524718b7cbe6e5c02c3e33b5867209\nb18a0aa42ada5c8ca81ee2e72ac84893\n73b907dfbbab27737ab6e4dae478f0ec\nb0edab5a6cfcc6dfecb71e1e5d9e3e04\nb0ff05e707a482d4b86a9ec8b507e998\n0984446f90922a5cfe1842c0f6140ec0\n3793ea6dfe8fc96906c7ebe937690315\nb4b8061b9d0ac9812995a11cc2941a51\nfb8fa9101feee280f854ace37b660f56\n1b48d5f39b06f24992488ad11b420d4e\n622cd1f8ff4c4f3f7015bd2903afd213\na6591f218a9759134703e7f0e07a284f\n7a27249aff75a1efeb2c07e243bd61fd\nefa227ba9097efde72ee1765e1a06bea\n498ba5f7d43d657cae3e4625b32a43e3\nb409934c4e848b824825982fb990470b\n9f6a424ce939fb1e3f70492f96a6b3fb\na768683096834fb8c619387e4ea386b0\n1e6a49bb28d3b69409ec4decc40c6ead\n8db8db648747cc6edac5c1db443b178e\nb3278df3f92a8448eac0837674944316\n4200f0916f146d2ac5448e91a3afe1b3\n4dd9f43f0043b0a3afb049d0d621b00a\nfe5bce8a8473ee0bde400502c184436a\naa64b81e05217fc1e5f54003ba926ec5\n4040d6bdf7c2bf466a735e7ba11c6811\na8b5a2617ebf4f00cddc2c49e9a4b1e3\n91d2a3cd2d79ad40574b4c2ec58584c1\n6ab1e0bf4364368bc48248ff6d9db00e\ned0e225800ca78499b3b3daa2c93a18c\n34783fb7b702ad1f96866fc6419c307a\n9a4ba0834a34176a2bfaa9c37e47c9e5\nbc67d93f5b038c7a264cf21cda28bef3\nfab65dd0e6ef1df394889b395d7abf30\n7742a19693cd0ae9d71596a86aca8cf0\naef4c2aa4948b789a7d79037c5a30a82\ndab84a414e10aba21b9578a2ff7494a3\n90cbd57adb210a3a29834a356c44e58e\n788a53553f0b8b182ca427a4227e4f61\n049893cc5c70c8b46152a5acea1da0e8\nbb33b73645098f025403dbcc0c5a1024\nf66d8a91abc64b793e7f31dc589e385e\ne890fd0569b716ded61c07c056d85074\n3bdfbc988313b6d076daa8bda7f2b00d\n3f60b281d6a64223b357278b57225579\nbff3e5177ae55665ffc7fb532d60fede\nd49f47b58bead3c7525d411086ebf034\nad9235abb88576f2f435d1507b1a2866\n06205467897cda16a2b4a9253af8517e\nd0ab373a2c6cbfaabc5d6486d1ebd56b\n5055c186a30bc3f1eefad8d0383872ed\n468dcc757771371c28ece7dfd5265c76\n950671aaf9ab2f72e0890f58a6787f57\ned1e7195d28b52bda0a793a5183d9fd1\n1581f8d2f73c1f3c8442928b68a6c9a3\n5da9947000661f4fe3651dfbce34f57b\n87920fe14e6a67f5abba3fbbd47d935c\n39e417bc9b1fda9b3108536a0b08d60c\n9adf88ca8d98aad738aabf26a7cd24dd\n928d88ccfe503ece8a0510f5a17c3c9b\n437245d679d2aa568aef5c8142a1f94e\n895780e77fa0cd82fb13dfa33973f838\nd2bbcc3de5cdba80d3bc90fed5f8cf56\ndf24456bafd21115f1633f845223150f\n36eeb2b6643960bf42d4d9bccf8a0e49\n2708041f54dc85ef2be064e0a9412845\ndb847403be6ff06a21d88ea8f36a18af\nab6e5c702965a99d4ce13df381ce7f1b\nb3a3ace9de7e4d7d4e652e99409f2a1e\n0007c21b18645483cfb12f91da90f7b5\n8e5b2aafa321c8118cbf9623e8b09bb2\n911c34cbb2c5a82fef9ead1580cde36a\nf07bb5f2470234eab51edb086443af3b\n3cece9520487cb8395a6ba682bf03824\n096f78fa65d871578b45b1cdcc03e522\nc80dbd650e1b93dadb101a70b704fb41\nef6bc0b5fc44f63db2e0210def9fd3c8\n962b9616edd2147cea6f21a8e1d8c7be\n55fb79f803743609b8349c1e54503bd2\n28025c349670e3a3580744b42739190b\n57fc0a0881fa9ec3d77c2373fa52f42b\n305be74d09d593a34e302a3569bbb738\nb7195e06a678e175e82bf75b931f8571\ndd96085478c3e234c3ef72490aa2e3de\nd908d26cac8092d475f40a5179ca6347\n8859a31ce60ac0798ecbe1b754b76ff3\nb20694acb68364c5b44d8447cc523b0b\n8e9f3d8e00f72097762ce1d51b6bd607\nc87ad1b6fb388f88b07460ebb5d2e4c6\na9346fbaf920e99acc512e8dcc57fa3c\n44ed81da123e4dd3f862b8562e82df9b\n53d10efcb2a40fdf652611bba780871e\nff5d9bc9e53ab8dd6df2233d60cccd24\n65cac660346ef0e94fa112bcdb8e7c78\ncd0d07f735c34b699f128706df5ca9bb\n9c5796c4e30a6476d20bea319cc77caf\n10d37f58cb44c26de21a08a6c119094c\n4a11560a2a5774704fc347ddbfdb269c\n66ce461bbc18f31b0cc709dfddff5ab6\n358eb6ab9e06f0a0aa6f38af4984dfb7\n24a2e888f0482d4ffc7877525711a0d4\n42a11af6227acda973cfd368bc8aa5c0\n9ab40a014cea1a3dea999143a66d735b\ndb9b8dd0865370b68d39042fd8132ab3\n81d36e029c78eca5574a4def8d336df1\n8d080a8501b3a15c9b97dda12cb8500c\n43a9fcc86ed8b1aca2e483e2b1e74f3e\n197b4deb87ffa3decd9f045926a86cd0\nbfac6eb8308e1153c1f1fab4294d34f7\n665cebec3ce1380ce4e3c90b1bedcbf5\n8913761f23880c40c49026849f13cb7b\n6427ad6b4dab1ff1309636d6daaf42fb\n3a14e4a0f527f7bad14830728358c396\nab03520d547d26c54744031083a783e3\n29789ad93651e9f57262b803cbd81195\nacae486196d032990b9591c834c8242e\nc02185aebb5d1cdd0015347dc31033b1\n4a2c70fc0f089474b23d85269eea8e71\nf2552d9066912d2cbcedc286db3ea336\n384748a252d780e94aea05cb2ee75563\nedd9490fc1a956d214e1a05d17430b17\n4315a6d93d3182f18ca74fc5999704ac\nc422ec06693c82dc724301b88d91d48a\n4318be73b75c1c95a8921288e4c47c82\n73b0a84c5b09ac014aafc9bd98cf9ce7\n89f4d0a4998385251c2cbfbf8a64bdd2\ncda7d772d861d401400109e900daacc2\n49d26d671e79524da6250206c639edaa\n5192591abaa2e8aa365c32e737cb0fed\n1cc4c59cedaa83ed1e944f95bfbcc05f\nf2d4d6ad53cd97f282f3347364c700d6\nff35868766d5214cc636e22bac9a12b9\n22e7e915e3a8d161e6d2904dc86d3772\n0844967db23304cb0d3e344760e61dee\n6196f35e26c63205dec2ad561521509a\n243c516c93ec8eb0c654505a521c967c\n3039c53e50678532b821263d9217a56b\n60e473933578055d5b8681f1dddb7f40\n9c3d0064431924eeba5be7dcdd681950\n5209fa2d5ea8c6c83a13876832c78c35\n80a473afdf871669b0ad6859854fbe89\n8981e3cff69d4c15b342b4025332f640\n7de035f7a527f25257d0ffb087757124\naf78b4c306cdb93d512a2786141d5225\n6723b215d9185a85276f5b912c4bb9ce\na5c14093eca1594f117a7772b592a418\n66f835b66af08f2620883e308eb336fd\n59ec69fccca64cd638f1a7bf443b435c\n30470e51c01847aa81bda27ff91a701b\nab043a2d5d70fcebaa16f7021f372d19\n83c2d7a5ea41a50add074fda596685f7\n61ab43a1e2a8f4fd3a4a83a95f597727\nbd61e08b4eb2ecd09bb2f3b5786f6d04\n690551171b4ff812702d2956dcc23958\n9f4f1593d390e5e390207e93bf5a28b9\n15a9ee740946da71d9cc420458843984\nad3b9994c5910dd8207448ba742b5493\na399379121bcd7ef15f33b5392482f8f\na5b1e83cd0273aefdf9cca2994b97c77\na22aad1565104cea1367161c348e3433\n6b492d35ac957c9d2e7c16369597ec71\n980bffe1404d71ba492b4f8108879849\n9afbd5fc213d64e04bf72d3de9853395\ndae71d5bb903b5097f4d9f1a1f1ce474\n1f3c225c2f1a60c057a9f526b619310e\n757399c2560a7d8a34436198108282da\n20bc17c9ac3f68808b47d0b326b55e66\nc1168ff54af7251fba945464cd01b319\n538bd7f4eaf11c81e8213e2207c750c5\n88eeeaa575f99cbf043b8300693f57a2\n0401d799f87003f603a1c2aac85c3571\nec9618b679e945e7c743ccca26c24e67\nf1f81126b40dcfc90ea0464294a87bd1\nbc705d2a2e9b9f1dbf4903f0563e64c9\n980e4a3a1d30c780d536f46bfe827b24\n64672a10de469fbe6988486f9582d37c\n3b814241937b4a0d99727ca76b551a5d\n1558b6291d803e34744016d5804a95f1\n8b2e4ef12d5a2d448f074cb6d1205d5c\ne2c0c58cde7910e7d6e54e58d5c67b6e\n3e25277b8f5e3340b9d0bda1e16d25b6\nb7c222116d83f3b32cfac14c28ee93e4\ncb2cb95f5201872b355e3b8e886b88b1\naddb367baa9d77f2d915eee00a201de1\nce20f616ebb53f8b7ed6767f76863cb3\nbe0e7b9eb4b49a49d9582546e43b8853\n47914c825a0c5238d1db74a5920148aa\nfc102d75f7a6ed749cd1befe2ac4fd21\ne830791df12065d8212cc099635ab411\n13a655960d5b602f947d5be350bd49ad\n8d0067d6794fd0c766f65cd9a857d975\naa1fd6a0f7b485ddcb4b2b066acab6ed\na7ad0ebf3b90c99242b12608d1a73106\ncf59b028cdc20f280e26692246e4a6a4\n1ed9046059f4ba5f890bbeeda5ec06a1\nc2289f55788f2626b4c0a4c5d07856b3\n14d860572f28febf9f9559b754bf41e0\n5cd65de219f5572acf19f91993bacb1e\n1a293be1097418c5250472b37f332c07\na2a8503e3c69e7992863e97f45093a42\n4240ef459f32527c040abbb149aa969b\nbdf6ee62a0d069b6476f005e56ee13e4\n790a02d1fd38d0d35af9da3878b772a9\n0bd5eed17191e28be8e121e3796e0615\n52175753820ae06dcdabae01a9257cf4\nb39408a7d96d4e0c8f1624080b421864\n5587adaaf248082337bc0abd5dbc57ca\nf327c6e5721d2fa67234720aa9e5d85c\na81e1f271bc4a3dd4ac87827da4d0a78\n1c782e8ff37e1d2114b80fe0bb8d05ed\nf5b9e636ddfcef037e6a5d5bdc479102\n8abf56dd542c2dc45b7efd4f5fda170e\n691e412dd009758132b1569de00f6aaa\n3e62c6277e1a7b7b3518af78df5bfdf6\n24af095fc12fbc4cd5deaf358911102e\n002f08cf8cbfc31287de47e3a61c9d6e\n8a2c5bfab98149c80791f3ecb146ae4b\n34628092121ad47faa10a27b7d15bdfa\n370d57e0c09c6b4d5471897733f85add\n98e5fa6ea6e88e6f0fd66028c1624201\necfd6c61d671a9c94511a92024daa814\nf659e88ad9b9a1e7a29f69ef3a35b09f\nfb66bb90028a8fe8179acd70a7ad3593\nfdefdd4014332806d53ee0944ce2623b\nb6524895d6945ed5b6d1c61516dbe355\n4ac4ee1444c48423a5665841463331df\nbd3c3d80fe71bc6ba03d2610b1f3c2df\nff00b53517b0bf3c7782123bb78dfb32\nb0f24e3d11bfe3d31529d1b9f2745cfd\n47a87c6cac1a8b856c99bdea15bf4247\nf26dcfbe6386c21aac6c61d369d0c4f1\ne2a191c1213e03f69a58b21b69627f3a\nff522719161cfe5441a7b0b7772e7e8e\nbc3f381953be1f16b956a9d394cf969f\n1b1d5addd8d977b2d912c1ab2f705041\ne3ef737035c7afe5ed0f26b3401f86d2\na7838a5aaece334541df6f4f0b7b3f6e\nf4d5d0c0671be202bc241807c243e80b\n65db27307aa0cdf0b3c0323431e08a15\ncf9989da61e12e358226d3f79186f356\n5339f5204de061a7d8269c9b84e123f0\nb529bc78ae166049c777f2b90e388d34\nc8927c1f953e44b55f327010c444a2d8\nd019a263fce94b0c6c135dc97c39768f\n847676261680bff61c72961c8198abc0\n490f7cb1fa4b6f10ff51f35a306be9e6\n2b645b131bea1b0c322fb1ae4d1bde7d\n5d2c5335a81a2b37086596bcf0609951\n80d3b7dc0b80674158b08ef77ab61180\n5cff428b66d667252a181f10f022e794\n9c814562c1d7a8537578492a1d959470\n166e2e545492631c311ee43362379d38\n1a9b8d7de566afb7584ff1a25e91a6f9\n6632109070097d9a73f93c156481c2d5\nefd21632159ea74ea9bc2c86896cbcff\n588e209f698255999f059a7bfca72b37\ndb30af3fcd5a64fa6ae858b1922692eb\n2cbe250a19308f6400cc3ad4a6ec3ac0\n831421a27cffe58eb042e5e4f7ae7917\n89f2535d67e222d7a56e996c2e310e86\n78d5422da2d430a8096b0a760780c267\nb7fc60d69ef710d3fb045a0ccb4ceac7\n9181ca4e510cbe41777e5fe8af4f4f4d\n72d2dab880a0d84462596fc17707645d\n3b737fa9b592fcc30fcd9ec96d1704b6\nf9ed90681ebafb6f3d9addddf9c254ad\n338b5f3468983deb1351b6ad6a376ca6\n94c17d926eadd4dace908872738a7d5e\n5e9c8d6c357693521c42b0762a53b9c6\ne759c4a1e8b4fe99718eb664902d4d37\n78a9e6a037b9c867289fc93d7f0296d5\nc7af35dcd99d483d8242f12e77e69054\n85d563a0ece5f4e448bce6d83ac945e5\nac0c704b79d91ed85180f7a288f000ad\n570e544e33c3c36bec2d8abb0423ebb2\n143f95691ebd66bc2c7de072fdd7bcf7\n2ec28a25be7be9ea1665a81e2a921a58\n0732dcfad3544e41b61571ca60a78845\n05f10c925987038a33be7b25a15cbb81\nde153269104dd48ccde6a7f5d007e85d\n5ad62ab33650888608a11d17a2ccf39a\nd3edc9c5cb8bf98c779e809ab25f4b58\na449428a47383acfd816603b55c3cfa7\n37f7c08aeb26d0e2b93e38c12c9f6365\n7b8e44d396f61ecd12b6b7b38d96d9dd\n56ec95c9613f05ead3c197b24bf8374c\n1b9be335d4ebbe7f9bf8507119549d98\n74188fc03e8f4afd03a39753b3c1bf19\nc1d4770507f608acacdefcafc5d3ee1f\na2eec100b59a280e50ee341cced5a6bd\ndb5572a20f49b44ec501bb67cd26aee9\nd17096621171cc4fdfcf69afb04c4d09\nb4a03011c2188ee6993dd9d0aaab1327\n9c4fc45b8e6ad4bf08f959548f52099e\n59d0d19fc45ca69230d858f60a5557f8\nf317f81a4a41f492e041d1caf0eab219\nb847125e5aed8ec18a235d5e3251eb75\n1ca6939028cacc775aeea5f5e8595a8f\nb4aef0e33c28557063958cd0883b21e9\n60ccde56a561811d3f7c19b9853f3c64\n07477e193d9fa110774342b29065e005\nd749b99237cf8fca85c08948723cd9d0\n764329b9bd80b588bc65a647ac09a3cf\n055967acf4caa06c3867b03a337fe29c\nf9344cf0b170677dc96d28cdf2a2a8c1\n3e60e983990b7ad2c4de8f4b504155f9\n997997d2b58e3c0be9498d8fd00ef08c\n3aff70cb5f931a610bb56b0e57bfa8b0\na982f2b687bbd30e13e70c87b41a7005\n38606eccf137b88763fed1bec119831e\n38958f001cbd129116e2fbe4041d77a4\nad824a0966167577e445683f4bc15376\n219f27585bb3bd9844dcc500c2a6e635\n37de7e389e2f61a080ffd2f1a3bb2ad0\ne95ceedfd38dcecf07600469bf58c55f\n2e570c40b8714aaec907e2b63b9042bd\n2a198faaa6b8e75d40c6179afe5dd32c\n827cd2c07fca7aa3d83bc37f92ba3d09\ndbe93c4d55c91faab11daba48f314574\n3c9e0c65100e2f2a9228890843f8c1c3\nd71c4e31fba0e867992bc0adb8fc5453\n0b4f191f10bf73c29f0976bd42f67010\n1cf6949d9278c5c6ecbaac8e518ecb8d\n3bab23e62b1aaabc610aed5d57d083d9\n302e4f4abea2b61f23a1846052014552\n992ef5ab29b716c45721b9e56167c5c7\nb394a2f7defb630c81ff8fa1daa07d30\neb34fdc06d6c488617f7658f7fe33aac\n337ceb2f3d395d55f5b65c5f2be6980f\n9f5ed8222f50d9dba8887bc250ae0680\n35d4eba7bf0f97a7ffb45b992c163df5\n19b284236e896e5f12468d732ad0af10\n93a71ec9479f6156a606ad646794bfdb\ned76be33910d777506dad4215891b46f\nb5200bbd53959f1d7ebb3507129d10a3\n189d70d74792dbc4b462721eb65ccd19\nb600b4cff8f57392dd2b6ff8b4a71b5c\n81ab7b68da18d6145db34147b6bbe293\ncee15e4bc744d199ba6bb6fe15d45933\n801640c9e02763fba15ebeedbc6ed454\nd7975bad2ffe426353c669b85d80f758\nc21ace4f27329f8f60bb586e0a807496\n1498be5d5e53647b12fa23156c3d9902\n33824d6707146540d1b748f04adb7553\ncce91d2ec01c06685625a486cac116b9\n61cb137233dd09930156b333b8a2bb50\nc363ce3a51ffa060d461f30793f50bd9\ne483f8dec5ddc0447a801a738b9f9ab5\n67b098cf2ea57412c4cee6102eb3bb09\n9674cf21ca827b719419ee267d1f9e20\n349c7ff61388bc35b351f788f13d0ae7\n8b5100d929e0c7be8f6fbc2e0019876b\n5c49a226a50aba2ec09dc6b60cec3e68\na70c2cdde803dbeaca10cc3200a24e5f\n2dc467b8a6325669fcb60bcad0341654\ne8a673d5d4d69a5fd11c880fd4c3c481\na2caaca07d301455006408d052cc098a\neb7c10af1de47a9c087a3008e79cc0ea\nac3217052063464d2b909471f915ac11\n804e75256d494f5b3a7837d5efb8a562\n7cca79b6e8d1844a2d701ff07a2d6630\n395f7f443a26db8e3548149a880ee10f\na1beb9eadc23c00a7a2b70c0075572d7\ndf326079a0934d35b91437c4b654eb9a\n4ae3cf4252e2fb2bc5cbf2d878a08dfb\nfd328e7dac414ef8cac94502a95ccb4e\n96e8e302abccaed1db53ce29467159f8\nc7ae6462d0c5ec146b24decb30e35c08\n93aeed40007e310d00a96d96af082c82\n94fdca0b9c2c80ebda6a8f4295726234\nc9f22962adc3d6afa603553b5094efde\n94d43bcb4e885796840bcd350556eb47\nd81c81138e7ac584d26b57b105b1f2be\nd8756c6e1a827ea7a41b010733e0a4cd\n2940cbb5dc8914dd0236b7fb9859e2f5\na6a44b09c6731bb2d43d652d24efc963\n9554ef898e32d1dc3eb798b33ec3af53\nd4e5ae8a6b22b08f43e61d69c6c646e5\nab9a4d30da0eb8b479f70e7a96240459\ndfcd51dd5086b01bc608c666697a762d\n4f8880072e67b3c3b4cbee2563be3b71\n74536db8993d8beaca5e90bee0c5b488\n4ae4a79bcea6d70dfc666e8a51b64037\n063cdcb062f575f0497b9d4cbd8b582a\n810cda1888d15927fefd1e8f8fcb32dd\n097a792054b14cd07adf7cef6e26437f\n8bf3bed35607d209a34508e73ba4fc99\n83504e2315c1e9dd1d10703f7e847863\nfcdc3ab9a8f1c346ba4dc0afd3efcd71\n2ec160502f1b8df4b65632c8491aa69f\n2e90b299d03f4544aff17b3e7f4271dd\n6c8971e7b681999e29cd8d0288f922b1\nb11245dd394f43465f580d7cacfe6786\n2e09a50311cdc3cace4b704bbcfe2f86\n1ff4cab93f5d28e86ff30730e0a56b02\nb8c080bb8fadd24ccc37ccecd2a78730\nfef12151fbdda6c2f9bec9e301da7a6b\n53ee90c5ab8ee4df2abc5158e438785e\n9a94428dd05a534f70bd5600b3340024\naee0bad78aa8511e61d937907612e93d\nc9a5a17c297b3b35ad01fafe95d16f50\n2c1d4f59f062ce424618f4d25961fb76\n6525f0afe74e7be04ea8310e725e93f7\ne78e7faf2c91332782285f057698f37f\nd788d370c534cfdd1f67f5c5f1fe4836\nab4aa87031bdb7506be3378c95433fcf\nac47fb58d5d2020127e970e56879e0fd\nb8f9076acf713661e17a63b153e8c14a\n9988bcb5543739b7734d277f8f8fbdfc\n851db0af7eb098da15b8efd8fb9d474e\n7af6da7e82ccdf7982a0f168ff186234\n0c2710c14e36d184252ea92fc65093f4\n66d27281f018f27b010487f5e5944eaa\n06b3513ef848b1cf5ffa20e67ad18254\n4d247cd55e5185bd9eb6a4bad11ba431\n899015c45efbb95c469a61527498cf4f\n941a82a3b8a9099a52ce16076a9ed20b\n4c01bd2afb3c9aeacbe2adf14309b27d\nf9328b1bc7af8a2fc6cd8db26efea1ec\n85a6bad15b6ed05f60660ecba40cdedb\n10a8101a02dd29a9c052c5988e90ddfc\n030b691da24d60cd4e0fc5ce4c0808e2\ne9f32c63f576fe795dec2c012a32f9f4\n4aa247bc710fdbd2fd68ba4f6f21f822\nbd01056fc6a2851cead51a02381ded50\ne7d05df7a20ef007ee827401b1c272a1\nc474c37ee65c2dab25d75df2ecea6d2e\n3f80c1ecaa9e8645448e737c86cde3ac\n58cf96aae382ecefa61f86dbe6ae94c8\n522610f341f6e31bfd8817844f125194\na5eba3ef0c4237bf93f65497a8978443\nbad6f1ca002d538211f2765e159c9c5f\nbef6783162f22ecbec735fa885ac914d\nff3ad0c078e35fbccd4e8952291f73eb\n24a852299dc6d49ed83aeff0a5a599be\n16cf69effbe0c64b48e7c340cc5b57ff\ne0c2579c6e0f00b4296530d4aeab6946\n8b6f3e9e17ba26f2a89ce0efd2f21d1d\n14c2557a2735842341eff8060a21685d\nc7b14b6fcadb255321210c7830864f97\n9703c415763b78405b05380f67e1054c\ne911432f68ed99e8cf3454698453c720\n24ce8ce69601495d42360966957842c2\n6eb29ddbb44a0d7c4c949e24627fa0a0\n3c81c975001ddcf20bed5a8ec1df6d26\nae2efeca48c807f05712bba44c2f0ef5\n8b362228bf565fbe486574e7a1580c32\nda04038981b5f554618b27e991590de7\nbc5ff613063333679a00e2e4e322ffe6\ndce4d358c964073707a72e5ff43e572f\n4c4399203341142953a318e4a586623a\n0cca6b229cf2da3a2f3424704f6f4c24\n91031ae2e4a8e50b68bc18754c6f888c\nc5c7316a866499995563d79049a8e617\nf3a4e5590172a34bb8c1dd009c8547f0\n29f760a087281a3b8529a65d98185ab2\ncb5dcf686e0cf2ee3acccb384ed43ea1\nbf6a9ca12c1916b87a65f8743777e66f\ne860b6ab0ccfb04456c5379e4fb7620d\n3ea5b881aefb9097bb0b28a38d5218de\ne474ac59a9f892b2b2bc4c5e73a45a8c\n36376f854b5363a3643689627b190855\n2271bb08ae974546293b87a772a04980\na39cce46f68858d14998c58f03aabdcf\nc7a9c6f108d584a4295405b721e0f5fa\n16c23d13fbce1806efef594fbe0d2475\n266219049307758ee02b864907418433\n95ab6fd831766fe5ae579dd725bb36b7\n7b7a4698dbda71efbb564e3db7dfcfb1\n6d182ef7ea0b9755331380590c9c20ac\n7e90c093039493c8de83f657d91772f5\n1bcaac66e484326d4403731f45bc23b8\n64f0be93ec5c6ea4dd938a1f8f9a3056\n2230f2c0139dbceeaf48732f5ccb2a78\n1a19a120cc12fc93ae2186fa3e8cb248\n57e347932e481eff3837c1716a9964ab\n516e24b9624880bebc5e9cf07b7f1e2d\n75dc0f212ae0df47a2dc4b64e8338686\n704a6d060b5042d0728295db4a75d0b9\ndf554a9e9bbc5a4189bbe04adcb0acee\n1b26352878b4ebb7a0cdc8ef486faf5a\nda3e4f45eaf9c8ef89d070d67e772377\n4ac1dcf49d8b721165c4057819f0862b\nc344f591ccb00d20c5e9a0ccd1cb8b5c\n3094909fcce9db3e514e21a46a2c7343\n5d2dfbea120f23e84e689374aa2ba84f\n8dfbfd06496dd93b237f5e9a2aebda4a\nd31dd22d27e7aa61f2e0535cc2c74def\n645d0ac840c62f57c46e38cef1567426\na27dbac4728f18bf3e38266fb4751853\n346b40254291f3ff4acf55d697699889\n24e3a18228b219bc264c745424b7660e\n899b03fc2f59bea3e5577a9bf337c70b\nb3a494301a33a7c5fe3192d479bc909f\nddd1f62423f2f658a815546c2f1e3f85\ne7db4ac94dbd428f442f531847bba597\n2e638c6ea9bb1b2231803572143bf5d9\n379c2d754e0801853173d57cd2afa264\nb1f08a92e90ba8514e9250622d5bb2b5\nd15dbfcb847653913855e21370d83af1\n869cf89a286ea8d0919039ba32aa87b1\n1bb8bc6c986036ff24fe4bcd232145b5\na5048a3bada8b78ba6fb7aa79bdce7bf\n11e0cac682b228e9150cd03a1e016fca\nabadbf1166d71c4857f70054456cfbb8\n6f51c19375c5077a8a579ea3f0aaa850\n0410f861f6044703c7eb8a56d40702c9\n89428860b65242b7880ddbc6ee619c0c\nbdeacbb9b177c2612f28cde6f97f1f56\n79288e64d690d77a5fdbe5f0a93d8584\nd8e7124a5142b544af071ef02bfa505c\ncd213ac0c295354aec0ad5a9890fe260\nc6408e50c9ca50c28af86796bc7c954e\n3e537287e752de6eba5ed8f6a7846155\n106ff44cd98abcd450c3eea5fc97ae5f\na2e5e988620bbe17ef14dfd37e4d86ca\nc5f699aa9966a5c0ed693fbde76aaf91\n0beb64a76e622c38c26e658335f438eb\n5d08d4bfd3f89865b6b293e6e37630aa\n0a7d9e1947ac26b812a606781ce51392\n9d10e1857a3c3cad6850d619407798e2\n846573eae597fc4d0736847ba9001b1b\nd6907fb104672b733a6b25a90798f614\na50fbf9fe847b7dd34a032b206c1d45c\n56adaadf5b1c4d8efd2f2137e1492778\n8daa03768f8fc05392758879042481a8\n65168ed7db0dc0786731ce74df2b0458\n673ca705dc55cc8f845ff91de9f4f938\nf945ece6b359adf187927f1b8063610f\n12982fae78652a27df41eff6e2756281\n1ab436dc96a6a1e97c169f2e869eccb4\nc1f10cfd640618484a2a475c11410fd3\n8271dcd433a8e58371cdc3b0831113a3\n70d94f8411569e9355e6bd7d2244de38\n18ec3318fe135c6c3d47cbfcead6b251\n750710d4bea29ebd0239ffaf15a0aad0\n715659ded383fa0f89f8818b8f554a5c\n95fb31277fcfdea7ec1f631d1b0f28d5\n0af08c912523fc1e036e77a65af3f129\ne5806adcb32a4c0b3ea085d6cebdcb95\n63268cd3c3f89789c620a31c4f3c9404\n5456a421c8bdba8d3ea8607beb3b473e\n7c6f3c3bd22faae24ac12facfa4ce32b\n2fc7c380ec44eebcbdb06df1fd2839f4\n03d4fa39aac5271c36a421639f62c416\n4c2a0bde5e3fd81e1fdb5f193c894101\n2b04ceeb5016f22d5693d75e2b2e5f90\nea72fa1467bd4c9efd131ef4a84b829d\n242ecef96f4d5c4da0ceb6f6780fe244\n4a7529591a57e6e5406528e4c965937d\nb5bf1d4c35e99be0b52d0d9267734eb6\nd92326882226dea9aaab97af5cc000a4\nfc6faa496ec811226b5a8db061bdf038\n598a9ac4590350fbfc962fd589261d65\n6dbde58d57c4a89c6d925a5cd8dcb944\n89c7a2773c5f42e81c3d900a385dbe9f\n9b8210d0784d2634689fda21f151487a\n077a3a925c724878292600b83c9af884\na96e8035b5d51fe20bca0f80f7daee20\n27d6ae93d30f8cb058a2815d3cff3407\n7704076bc8325ba0e9529a6549ee8cd0\na543b9622f7bf1a340a8a6682d09ad17\n40725a07e08dace32c821417efa91efb\ne06cd975d0d1b511f71de80ccc2c7de6\n7e53cfa7856eea35472b843c590e6c99\ne10c4c618f85521f69018c76b78f3ddb\na3a9489e57863b81d5c6248dddc8db11\n9c44ff01b7d92fdd438fada07d74cb22\nbf1039f4a4fcf71ab1fc7fa496bcc076\n8a730a6705f57926d80817186fcf337f\nf806962d32ee3980d23814526f67eaf8\n5c6d10da5a3dda53f63ebd94ac1d1433\n889e0d7343405c079195e7b8903c8c9e\n6e6a9b53231e0a312c542add87ab9720\n8ed1ff0681353bc517351f43580ef48d\n89ebc5d832a158c2716564a33fe2a4e2\nf3a9bd5df1b9eaee6a35ff299ac444e6\nfe679966c85515105142b42e97e06667\ndf972ebc50f626705061deec93ad70cc\n6c2c4fb96e7c5805b4cdb0590292edfc\n942260a5222e002bd106669ff7673f0f\n7de215fbc6d24ffed2772b05d20b23fa\nb8befea206310b60ab930dbafc546cc4\n5c4842a0c464e988c432bec9d4a1da0c\n149b8992594b5d299f6938df3474e5f0\nda1c0644d71a64d1e1ef7d2cd152e311\nb9a90a8da80dfb1b17f330b9e0fa6ea8\n0cba061c25c86424187f08b0344c13d1\nda616d88e7c0c86328e1627fb027cd60\nbfdcd38749914b6a6f6b809d28f3b748\nb3288a1ccbedb57fbc099f8091c72f5b\nef291aac1fced903097c8c97c092cb5e\ne0b7ab6cd3e2df496849e69c355045a7\nb16eb97fcad2058dc843e67c4231d612\n59ad0715af88b6ce0d40846ba2b911ef\na13c509bcb49e671860a1b6bcbacb192\n683eee9c5490841fa9340db2d4460af5\nd122b23cacade5bab9fc7e4ae01aa12b\n5e4007784c6812c05949626b818d2f3e\n2fa6c7db96bcbf0d221eb1756cc5d1e6\nb046737d4e8bad5e75c7255bd4565132\n30d9529ff51c6977fa9fa57bc73fdde3\ncdbc96e660fb1ec36bd2240d8a099e8c\n007002d02a0e5243c2c2f05d49658fff\n99d3d9299539358521750646b32b208d\n86a06296bf6edd34aded6359968a2f91\ndd3d5ba946d1666686722c6841ed140f\ned1652b55d75ce122d819ad918855b68\n6747fe07fd795ea7a05ccac8684a16bb\nc4affcecd39cef6aaeab30ea1b6e5d39\n73e18607485b92176854916f893853b8\n38b88927572ef1271e58f51973360740\n90bfede40f7589351813975552f0738f\na0e04bda23c0e577b0c1886c6b7654d5\nb35883144e0fc29c60bf917c854723b8\ne840b808b347dea2266e7c8aa6db9679\nb28bd0ec523051c497c3f5d30d438476\nb99bc5545c2eb2a6fa6e3fc98f0ef972\nfa4df337a7c7775468fe99e40a7db75f\nc0f4ba36f371e0c64482f10e3fd9db9d\n4392eabdec418400435caa224e63d5a8\nb4f080358944d93c278b168ffe7eab0f\n84bd0e336749e2139d35a4e1035f4bb7\nb80fa55b1234f1935cea559d9efbc39a\n550ad2dc9ce7c5cff074cccdbfb690db\n71f48b3561c9e187a7f356729c929a69\n8cab5c3f5106aa48299dec51e77921ad\ne5a76fba846cf9ae8094b4eec61a37b5\nd2c41bd3eca10077d3083451a97d7589\n41b0f6b48ac0a1ae5415e271c8a7d28b\na539ef1081d4db7907c282c5177942bd\nfbc124edd79499c4be3d2c562f2f2086\n1195b8149924fc984d72028d2854d1c3\nc127d565b1d2d24c4f427371e2da2d35\n17633033415b3f5203b35ddf8d62f932\n8675e02958680d04d4a3b0841884985d\n9eb84090956c484e32cb6c08455a667b\n3feec316c195d244a5a5c9ce39996c37\n3a844f435fce71b6195b8e0e4c858373\n9c134b68bda2a13fdd45e305317a72f7\n8085e32668d6c092bd8db6e0f8d6b0d5\n172ab715ac322bb086c5f5779efc119c\nfa4f924ec5fabe54c01454f5d0c226c7\nf57dbda547fc6e900a0f8a585ddd9b49\n3acc80fe16baaa7906b5d509bfcc9beb\nee756450501a87a3d32c9ad4f8601f8b\nc0f29360f10cb91d6e4aa076d6683be6\n4406ab09708eb799608f42ad0808a0da\n07e3a8e88aa6196ec679ee53bac208ed\n94f4b86bfd588edcd2a1ad1b0c15e5f2\n1dadfab8c4b9ad144c0c7d67aa27de98\n3f270edf01290ae09757b8d0b48e9c69\na1e7c35a6096236ac22f4552d1fd9f93\n48fc24a29e691cbef73a7cfebcba20f4\na544f253a1ea5a0299a20c45cfdf5de5\n5da9bdb109db78e382506b3f191c1a6b\n2feef6c63c6310d25c432e8395978f1b\n22522d301e83920f34347994964c6a7c\ne3227418df82f5f21c975e49ccc62a2b\n5300ee158812c49ae76f8de7023b7439\nbb1af71a0b5df1b195d4450f17b94234\n39fb3684093f22431670b76ec39cae52\n02cefbcf8b365c43ce10f25d7268e2be\n1a5169406e826a80fd6f4b90ae065952\n26a9c51120f830485bb5361013c66bfe\n3a3d1c1aa974a4307357e8bcae7cdf04\neaeedc10835c6fac7596b8fb50501071\n064b20c12758debaabc5b6bc9a5e5931\n9094577cf5e5d1b7eff82eeece831efa\n0e68eb77bc44140efe97cc93cdc5d4da\n04d38d87b3aa8b03542ecf27233f561e\nbfab74763aacf3256e7ad5a89a2eeac7\n5ea9dd9cea51ba1ef910b1bbbd695635\n60adc6013a720e5b5b817752149a668b\ne6177e9ebe0e44db1e92913ed7ff99f5\n77c84fc3d9f3dbe3e0829c619c85b5cd\n012c96f98a453db38c9d690033c1cc20\nad6d3cc73e852918f36e6011096669f2\ne7375833e499638505be5e2583eb317a\nd5b238df9d63ec959c8730656faf3f12\naf0967225ab898d02c6f97c9a624b66f\n5e05d9ae98d78c9a2b7c613aeffab988\n463893148111c989d75f0886226e1994\n9834672e612ef82a2a07ad406104cf04\n5d591db4475b1e78f147d51511815465\n825306bd68f26cbe3325d824c3b20cc1\nfa75871576052f8b15bfb9a3ef492242\n52e82ffdc207f2022f41d9d5fec5f3f3\n462d21090c7918fd1e157a08b327dd0f\ne7d0906355ddb72f435f7f990a358370\n90583aabc2dcd7d36997303c01464171\n4334c7e4b358612d394c0471f69af171\ne37b623db6a9b45031b3cec4644b50db\nb89272900240ee6e7bcf5ec7db6efca2\n7dc468a515d60b4c69930c50abe96276\n1a723d1ffd70f56ce1449a7349670850\n74e50b1e6797952d4fdcac808d9ededc\nf52cfa44c9b0a11e69e788aee795ff76\n4aec7ca39d17bca10f2238c1e2ef1169\n81d3b6052df9ad3798dc4e9fa96e5052\n1cf105a07fa2fc158f21dcef44018325\n4c8ce59cdb4834e74f151bba4a57ba84\n99736faf3381d2051d01780706678f88\n7ee1cfd817ae55f51c9a396c297b520a\n73f031bd44dac526edb4f5b193557697\na39054cef5a96cfda8d792f8f3cd4737\n002980e7414c1fcfbf9320983a4c4d6b\n81385cf7e83e4370a7e1581217ed751f\n84ee95c4cbc823a158668d35c27efa27\nd05b2fea9741071988bfa2ba987d2cfe\ncbd4ef67ac77c80dd91cad74e7960ad4\n05142e537fc83cc6f93b4682221bf85e\n16518dce5771e4aeb31bfd16ed73bc4f\n52d280ef3ebab81285cfc6866f2498f6\nbb2c7288c178cb1346418969e347a353\n8ced34b8bd1455f6b57b3cbd5ecd6a15\n4c6babbb0ee6ebc829a56ebc597f5bd3\n6eab4351c3351ea73819564cd665d43f\n6d6f65477636e5838d26cecc435b3609\n08a4efdc4c95e018f4fd11cbfe8af422\n232e9e798028bcdcaa14b893abd226d8\ncfb776e72387bc6de0e092d516dc9588\nfe0c090e584d0a6aa3e7e001eaac0149\n2817291c4092f609d2ae366b554a7151\nde6c7e7c554c0254a4b07872c61460e8\ndd4534a4f803a68ce350b40e5234098f\n277854115e1670c0ecb1e5ae2b5efef9\n7e9ca543c4c6314bd143adfc3a1c4d11\n7cb5cc3cde0c2269657e012c970b88c5\nb7173868f1aadd737a0fbda1281308a4\n956ea5fd237fbc4bf4663937749af0dd\n774a8d45adefb0ec265a0835f2c5ecb6\n0378b130c9e2302dbdc1281a03a1c074\n0ffea914bfac201b60140a5925192bbf\nb48c3588e6cf18b292cc7af30b5e8f69\n9e72465be50879757a8ec278663ecd42\n98c365db908cb42d8c417d69793606ce\nff935c55fd2946a85dee642014a453d1\na492eef8abc81fa693ddd4f293d5a9a9\nb7269fa2508548e4032c455818f1e321\n8f898b22d33b4ae6b360ec4725a2d646\n8afb93df9265cd8ab1df1ecaac0d74e7\ncc866fc448709b673c82cb83a4be6f8c\nf49d6dc10dc227fdf9b4c95955697573\ne41e31889a758e04bfda829a724fc075\nb9be181aa4624c8f5cc09edfce2d4196\n9fa48ebe8fb777e0d81a801eb61950ca\n31375aebb8d31ea683bfa31eb04e1c38\nc49d1edce15ebd093bbbc7c4f506f274\n2ec48e00fe452aa0f1d95b8e0ac468b6\na70b71e92566e81f59bca1e5967eb9c4\n63bb9ee368ed384a03b3beed479dc860\n93e5d1d0e8c4da0f12f5bae2c2fced78\n73802e597ab87a2a8f6ea6907f6a6ad6\nfa72ddad4d944251e16f0c65b02b6bc2\n57973818092c59ce168823efbb536956\n9993a5f6fada34ec9af99f5c6370c804\n80fb1dd0b20823f1d83e10d25840e2e4\n9c0ee35f44109c7f38478e4c7caf4cae\n754b762e94697416eb89ea9e8cefc166\n196e4f23a22b3d2f8240708d94a8bf53\n5d391c476b5e10ba6a0a6fe4147f2b42\nd700e940c650241fd47e99fb4e3e2677\n88fa324bab322a2596641adc8ba99480\n758d7a134078bd1bcf04f82bb5e8d8aa\n57e5c60e9d200cbcfa0867052778423f\n6b69ce8b0eace6f1998240976ed4c985\ncf031cccbf0dd9c73388c22d51dcdaaf\n929ddcb2e8619ca3716e1411e4503fee\nc704128ac51a5f5a7171648aa4dc1312\n1bdc324d110fa64dec7b56ec831a30d6\nb42842a8200086e3f154b90a032ad044\n188a0ff1e830261d0253b185a1c0f94f\n5c5ba1d3579e3cd3d73ddced303d694a\na4e1a801816ada60b8f7b1a2f654f3a1\n93254335c827dc880e530dcbf8925939\n867860f2dd82367754a54d6b139c96ca\n26b23aac8b6ddb8f4a65a8c49efe70b4\na022dc29515dbb4226014dfe38052ef5\nef33de907fdcdd63ddf2e0ec4eb1c98b\n7c626f5526751e0432ced5f86008d511\n5d143f4f47b62ab4a22f01b285d05a06\n2b57aaa1d9a9cbc86f8c282be9233d21\nebaf19e3e578b52e0271eefd37157585\n87aaaf3c265e344d17860a0d4ba240d0\n0bfd48b1e8e7646128f83dae26f6b370\n854338ed991088e58d2bb754fb088280\n277922353fd59e2eb74c1f9db3450bb3\n5dcc29f36b73a4af554f5fad30ecfc2d\n0ad893bfe4e2b15fda1444c1ff6cf593\n09a97e9f6c14ca5b8a71dde5933a89a2\nd8e8fca2dc0f896fd7cb4cb0031ba249\n2205e48de5f93c784733ffcca841d2b5\n2debfdcf79f03e4a65a667d21ef9de14\na3a61ce0237840f62ae9dfc6d9a1424e\nacc5c90d8a4b6a1e8bf8b74048fa9c6b\neb1a3227cdc3fedbaec2fe38bf6c044a\nec4d59b2732f2f153240a8ff746282a6\n9a0382fbb0742ab1a08014e3e9fc4ec9\nd4866cd84fa2e28c335a236195802ce6\n4322b73ddc93bd1101802ff640e5b46b\n418aeefc75f38080fc12ce1e8fdd56a6\n67f61d9c1808c837284ccd67b69425dd\n2faf048b14739ef68413b94fe3a088d2\nc7eab01b0d087513397725d80165a53f\nbb34469a937a77ae77c2aeb67248c43c\nb0cbbccc6ece36f9a7677632520f43d1\na53794d214dc5dedbcecdf827bf683a2\n4cc79ff6318ecedb45a283b92c656f96\nc0eefed8d2ddd395fab8c03de9d9d8a1\n1984d628a17d7712693f60710d8020dd\n36a09f728752f10fe5e46e02ce216991\n1d84409d0eaae64a76de9f4c390d4369\nd6f328f61d79e8131e6dc9ca0a4b4827\n5027b27565499ee648b3113c9a014f5c\necfbccc0b7b059cd905f2716090efc74\ne2dc32c08f2b46c3ecd83e7b06e4d93b\n5e2f97e53effb9c2dc7b8ab0617f8f85\n899181d8658f5dcf2c84e77650fd2481\nf468d9da133a7a0625b0fd3ad6a92147\n6c8885513306fa3b0bf5aa0042d64ea6\n67f3ea148367ee7502eca86f96c3f22b\nc4ff45bb1fab99f9164b7fec14b2292a\nf326bed0dd25ced6bc1799eaf74e7f8c\n0d2370ce20f4689891a3a6a9cfb52834\n399f1dc306daacced93aa906fcc5b585\n1d9d1028a95c6dae6c20ae4676e69f5d\n110cb0fc39697d49110b46ba9acb4521\ncc1f2c7cafa072da28e66791a4619402\nc5a90045f2c32b491d1a0fb8c2d1b18c\n1e89c15ac25f7ebe164931d3e814d455\n15446c8061c2cc44758a55544a69bc90\n48cfe40c1334fa18cf39d961ed1c5dbd\nee3e2d2eb00491408a0ff79b4863f863\naa62cba149c51923916eff46f80fe74c\nd6108272b2bf80d8902a77d6d470a965\n9e7b964750cf0bb08ee960fce356b6d6\na0311b12ed8180f815965a24044a3add\n8f8f627ede15cd352a16a79d78e75a3b\n2ce39a0a4d1cf193d9629ddf0c457a24\n7c5b5c2b4d2127ad1e2dbc53606b79ab\na491ab373f6f7aa1738089a7548165ff\nf53e8d48da3fa60e04dda18ba1645ea1\nfebe6995bad457991331348f7b9c85fa\n38a460ffb4cfb15460b4b679ce534181\nbd0070ead20c5c45e202b4d4f2d5295d\ndf1effe92d4ea42426a40f4d0f90b772\n9b327405e4fe7297cfd1ef1af3bedd26\n25564d0c75d8d56b86d0e4d6c0799307\n6ca41843cf09f8c1296234bea87cc48c\n8d3d6c9b6a91cb42882f598eb8f6ede8\n7fb16c8f37a37be280233794b1847f83\na2f0e4d38570b827176904d9f75022d6\n6ff3bc94ae1d4b040cbd75243e8ac7e6\nc0b909bf1956c267dfcbd8cab2fdeac1\n4f135cc16357a7d55602ff28b4533af3\n14e5e74f6103e9afd76cd8528edacc79\n4821726c1947cdf3eebacade98173939\n490f60352181a3546fce422abdaeed64\n24864075bebb7a75861045ac093a0658\nb63b0f7e3297b20287196cdc7d1e0ea8\naaf9ec25b4877670d23590aa8f2fb16c\nf8212fc11b66cefcaca5dcf1b9474299\n898e528c7057174e403372d4df54fadf\n03a92999986198530fb5bf891693d814\n12bb4bd8e6ee35d152c473de7849ed90\n2492535347e81b38cb7889b5f6ac76d4\n0e1c638eb33ea94bb774334c820ccaa6\n6e0a768eeb548233b34d669a534b7136\n7bec9acb4a8b60a1f297f6f719100a9d\n7a6719ef744f7f32c85545d621d65e1f\n701e476eee0691a18a3763787c042946\n6a31452a4e5b4499ce89d3d2cf862547\n8ca31376e26c97f12d16aaea685bd0e7\nfacdca2fa68795a4937fd54f654c3f9d\n0e83100aa553f07d83d201b8bed875f5\ne20523853d6733721071c2a4e95c9c60\n6f470c58e045630a6431ce230219e44b\nedb0991a250879cf70eebad39e0d2f75\nc0ce2ea06c2c4922160495bb441055d3\nacae2d0ab946259abc554699cde9bdca\n1aefd0716c03cfe5803598e6d27d918b\na61e6d2cd26bf56adf01c5a25ad3ffab\n38cc5dfec756b5eb2603ad5afce96534\n4772db3c5549125227c4b2309fdaaaa7\nf956a62a2b7f9469318649f39387621d\nc84f2b52af9b820f4073958e8360ea36\n1a3156195f49de0199fede82d3357acc\n7ccf504529ac2e7fd6895acb3fc97ccf\n36700c2f72721ee5886b8f7ac4c8e444\n697d6490afae7e89577eab3065b1c9bc\nfce2d147f70cc4ed43bd07bf9b55df99\n62c1c57fe95dfc6832b04d6f2a10af00\n85fa285c1a1f5beb6fd295dc5ea1d826\ncf865c9a244f96e1ea1b1886f613fd7e\n7514c0b6137b57735a2f276eb0c06a29\nf47320fb24803359f363a0430e6f7f9e\n92dd26a8ae50838fa0b6ddece1006491\nd8e912ef0c335c08f64c9e276a78cb31\nb37aebe1e2a2ff606fc0cffeb5fa0f59\nf1cdc4ce132f796364f2067fe623fcca\nf93f8928fb52458f9f651cded047244f\n8ebf6644ea7e49c63508f74be6cbc9f3\n46545b999dc166a5036719d7c434c5f4\n75aa783cf373f05e4d0bbc3e2da457cb\nc721c2844057c849fd9039049ba132cf\n2691d423bec668b88524951114eb661f\n7b8d801421fa7c19bbd7e5ed68a083af\n101d04088bcdafb421b24bef4c2fbd68\n6eb67bac545741aecf3b6f1c5b83ff3b\n95349d1fe2c28e6de0650aee15e115ad\n06cf395adbd9cb66d755ba3a508209b6\n6cb212062c319a6ce3472704f878fc4c\n962f67f394b92d60a5edf6d173532234\ncee8c022234e9e17ea9c11545201ffdf\n45b7a0083d25e60c25a69a0a6441c836\ne37131f10e34780b6f663d18766a6a4d\nc9d73b8ba717a53469579759435a68d2\n956155b55e401994dd5985616f69ada7\n6a62f84bec025ac467f5b881d5df1d80\n4146a7522065815381b70488b89a15bb\n064ebe816ba8970e46e75147c0f2d000\n206a863d746e0daa3ba0031832cbe56c\nb69d6b6b260c478889676fc07279b02c\nd79a46321d578beac5947088a76d2d67\n6fc8ad2d58a14c64feca87d90df4bf71\n7ab1a2438f033cb96a69bbe646cb4590\na49eee6c5494b1aa3f185693885f78b6\n24571084278bfd6468de4af277ecd038\nf294b0e353fb3c29084ba676457d9783\n74d9a83219cabaab06a69fd318873f33\n1159184937f1a52d70a06a50d63b5947\ne2c105228519b5a5433db375118e2332\n99239ba46e7dcffa0784a4f0d1c5ef64\naa2014dd3b122914bf4f824b853af869\n317f692fe624155ec1947f50d331f271\nd53b211329e78af5e6463749bc6d0714\n9b070a21dc6e73061349c78d539bee5c\n09e0a3de2d7dfcafa973715ddb760f89\n5841af25c604855409fc52cabe606f26\n13d1f781cc1bed9e667d8572d874222a\na03e77341a8b095c2d8f024383006f2c\n64949674c4123e25e25f2c43b5deb362\nad526cf8cb02ba4357c2ba5b0c57835c\ncb157e9c24f6a40a02fc374035be62e1\n1fb5c31f942b57d951c1012ebaddf09f\n2de789af4b14bd026268b6b6eb985d37\ne996ac15dc6dc9a2769ef5c5ae161a45\nc193497a1a06b2c72230e6146ff47080\n3b0ea049a78d4a349993eeeca0c7b508\nf35d7efe3efb3e67af82d59c734bf437\n9b74508bd80070fb3be9d5b0de67b225\ndd16a8073116b85e214695092e275668\n6d88d14412c9b641978dd78699106431\n42e9e20b1c07e46bacb8be1c2e4ca464\n3185bd622133f978233810eeabb26139\n98e3c03193aa7f4d98afeb99fc20a19a\n686b9602ec609a6ee2a8036e163d3012\ne85dde330c34efb0e526ee3082e4353b\nc03b74ce71730958d41ea3cf66bdd775\ne71ce4c522df214699c016e6a2462d05\n68b8c83772ba7fbde6ede4c028cadde5\n69964c85e7488e7f6bb90de35346939f\nab8515e66763916a2ca9ee64f75d65ce\necb6e8fbe54f0cc1675ad53bcc00929e\n50bdf511fbd5246aa0b501728157549f\ne4cb2404c80f4ae6c3a6e6766428f31b\n2cfe6d80c57e253df65e2fbf35281c8d\n85ae5b04dd0a666efad8633d142a4635\nafa9e055a5eaeda84dbf5400e5279da9\n4666fbda06deea61fa7aa8b1105d322e\nce32ccc4d84a0618d3f1cd92264ee629\n20c6d5ffd97e51e743dac4e261780bb6\n002bcaa7be0e2aa3d666479c6a58cc91\n7938eb76df1eaf10e69f51b4596c0d4a\n2fcc8acea8f04abf3cc89f988915fb1c\nb12eb505c077a659ce9892086626dbc6\n78c30f15891078bd62509293901b0b9d\n488177cd52f120d49db1c37cb6549d5e\nfb4b8bf5689b30826d92cc6c5e60ed86\n7f2a7e8b8188d4561facde7646209e8d\n41e2ddb3f605be9d6078c45bdacdf030\n758763b1dbcfc998ccbab81c4caf7ab6\nb3285394cfff6ed95a312df2a77904fd\n973bf50a5b18d48c11bfc36ebb9b6597\nc574c049157e40cd633a729f785c2054\nc212f715e6479c580c698bff6e33f513\n07f044c4aa2aeef9f99063b5c683e883\ne00cf001dd1b9411808595a64fb36afb\ne0f38923f92c2d291d58963d50c61af4\n0cf57d02e3d8f8bab9dcb840ccbbc29b\n0209bbf95b332e2ed15315b1c3c04cfc\n74758f3e77948f32762ac7a3185d3bbd\n9cb460c967195a0c0b495b46a678a00c\nb4baec8e06bc53c8c247d52257094c93\n5a94696761e458f1c659a666554848fd\ndb46819e9b11ba1d7b2755607f9df790\nd8d4956af6c16bef1e8bb607befb1df6\na4265ae04f1d80a2234fdf681044250f\n9ba4476d63f36e51797fc8fb55038b78\n2453eb7e7bffa21eaaa0eb8748e725bb\n8c06943322f5851baa3b8f227ede6ca0\n8bdd12d543a6de810291990b7b75cf1d\n2f4a44ddc6f9b12b746ff87acd87dce7\nd182dca4ec032d6ad8e502271db27987\n5c01f54a0e31c7c1d5ff326e9c0af66e\nf9a2457174f30afce1bc036885028f27\n17642f323beb2ae893849864865ca1c3\ne6ea1d51e76e2cf4b854031c5299741c\na7439af1dd7f4d3b0b04d68c8340e60e\n71459664d828b0ae9c6b0ac65010f7ff\nbbfea47a95c7d46a8c316b4a0b163e98\n632ad53f324229fefb9c815e00cfa803\nbbf9479f272decc274925301b03c75e5\n62c449dae5b3d88fca3ed3a696c6d10e\nbd6a883255a0fc9d9bf6836ebac2991e\n78942cb2e9eeed33eea0d3ade9ef8091\n67839e1bba5029447aa47d2e4b280b37\n01eb2c11c2685e04a0e3b0556549b914\nc5e1670a76fa30eb5c8cb1969cb58536\n83d043db4fdfe6882fb7f01a09d92b11\n81f28522db473d9139d0d4fb8d614063\na0c4b5e29773d26e23e002bc7b736786\n551e5380f5506bb4d719a7b45f9a1abe\nc253705057a0524fa60402bd97885b33\n362b74a8afc92b057106c5fbc04a0d90\n81efbab6fee9ecfde6a2f776f786b2a4\na1e28f4d48a02908698bfedc88c219f7\n094cd8a9f8fc80977346f2785e22ff2a\n0aecde75489b576541e5d9f4be3d00ff\nfeb5d5e8c4cf0497a3c5ad306efb398e\neb82e525a12d649fb9510f07e9c83325\ne3fc5ca459fa4184986eab4c0231dfc6\n1626aa5c31e7884b064c687e410b2d00\nd10acba4acaca68b887d94b595e71ec6\n00289fbb5238b3130ebb557b51654b34\nb048fc430cc5b27394d380182f6c6092\n66732bda8c829a56b55ccdc2e1c5d471\nf5bcd92f1768a52d4e6051cef7d6cd52\n3fc55ec19cabe5c2d41512941734c90b\nbc37cfb8a4ab960c684c7feb5cfa699e\nf0379bf2126c75446b7564e136856783\n00b4288b12a81b04c5f2479addcec521\n8af8b52c137b5c51a46f3d0ad34af4bc\naf8004eae894359af3216aa1c60d95a1\n17294a8c1602cf65f9c74356e5d74f97\n1011347732ff50bb963505c6c0b8ac0b\nf81230e49142f7e24740eb27129d9ec4\na81be4e9b20632860d20a64c054c4150\n4425322b4d3b21484e2719c278c0a459\nb908744b4652957ee5dfaee289eb2d3b\n6711f799eb9198afaba01c3218d1f7fd\n17e927e24398f2a8d664921f72a6db49\naf3a4c7a64503fd41fd2272d480de458\nab1294b58a623d6286a85c0f7d412228\nfbfa2612d486c74e872cb4bd607cc4ae\ne8260b6a05e5c2e81a386ded5c997c3d\n0e2eb4b09f21fceb7b5599375e88d4fa\n5466dc8e0f19c658db16ea420ad5fd98\ne46608d1e2a94002080841cd602cb37e\n4d7103309dac636f38076156e12b1770\nca87d201d4ea41b06e488ed98491dc87\n00cb3b67cdc727d0f4fcbd14fe881b61\ne734a88a1110fa3d657454b2dd348822\n425a3e9d228952d6bf6ae19e67d8ade4\n04958db9d5ea968f563c5c3602735692\n008ad728a0f71173de0a786b9906a494\n24faa4ff9c940cdc28d61bfd7c3249af\n2afc18e93681279742d4db33766b4acf\n62110a75095ebf61417a51fff9af9c7f\n5c6d8547e8358ffb80b9528598d72784\n864fec29a0552d8775fa793ce861bd92\nff082c7565fc3663a2515e87b522ca17\n2ab93cb59cd9062c9f06e4b349559dee\nd64ffd4275f606aaef843121055ddcf3\n756c412732c9e787f483d35d939b8ef2\n3aeb223d7c502f5b3636a800390a4b94\ndb1bde148504c1023b5d56c6942f7db4\n6495f524902879c01f8a5d9f9d9ef519\n26dd85b0dc5ae876930dcacaafcd5d6a\na5ca744578c7c5adaa6b5b40ae82264b\n621aa3eecfb67224f195a703bc17b015\n841ad5a77be924b17e38dc1912e89561\nf08018680e2ad19006c5488f9a74917a\n1a0369c838551f778e3ad7a7d994232b\n50f6c8412200021cb20303bbc0a0243e\n30fdd54916489507bb21c8c0d72e1cbe\nf04e34bfeff17815d948c11dc1744ef9\nf75c79dc29b1674b4709631ec6dce111\n2355160526e73e68fa203cd3bf38f4c4\n6a90a572f66e44ca87d2c4ccd7201821\nac2410819223130b133199326572628c\nb35dab38131090d8c042dc6c88668d38\n78d2c1f50e67bc0e9a47beea1c71a8e4\n13370c426aaecd1affadfbb4ff8d762d\n4021ddad6787cb9a6f9a3a20cd6644b4\n5f6608c9486199de2b4926f0de14ca28\n44bce04a1b8cc69c30c6f0f4db426b88\n0f4add675eb7a0f1ab60fad1d520d88c\na9f4c6999c22bdc3d2beb09ede41c303\n5c17bcd16bb3be2b37a891cc392ede76\nfb4c4bf8e31a6b199bfdb27d8a83ba10\n681353e1c604daa6e1ae76fcfac42f2a\na01ec276627545c93d5af1e967038d33\n66eb65ba78e264e73ac3f63e17fef4bd\n4f3aef420aa0949b4f5008203e45d856\n4b4c453c615a7e02ee30cfe39f6453ce\n6e6c2420ff71849263a56ddabc5a1731\nd1bf2f2bd3de831653bc0bacbb09b467\na52d3a367cc210f15c9e069bbd9b7be8\n39d72474da39b9c3f1b7b5479516b2f9\nd705d440d550129f6a315bfc489bdac4\n73edaa53630092479f75833f31e8a5f8\ncf435b0c182b6a660be221d30a9ac740\n83e352593dcf03d993fd671c0e367875\n358a9643e1a3eaba14829bd18f20c114\nd5306b61d06a31eed60a5b43fcf2f0ef\n8d6511088d84c292bfffb3129ec0febc\naed58a22fbb7e21e28800fc59cf734e3\nb7f5e804744db46230e9b9fc9e1c3b81\n441e3bcab93a36ceb4c698b95b85077b\n0c583b2e313ae447b56fe6799917d64c\n41bad005d542c027f208773d3f0f4a28\nc5b29130a66acd93dd6faffc6b26ffa8\ndbfae9271df847ee0997ce868ef7a4c2\nfcb81f10d3508a1776a7d66be7d76ca5\ne4b5d9bc903fc15e809d5168d4053aa8\naff776838092862d398b58e380901753\nc31d417aa704daa7442ff04914ba2857\n125ac6c93baeb3cbe2cc2e609736e373\nd0e8e4d91ce92ddd5bd6459e0388a59c\nb938b801a0bfbd5ca4825715039e7574\nf14e837db317a2bba9826144e7831b51\ne5509d515db158951ca12f8394421da9\n007fe7a50612722850c6d0d914111cb2\n2f0f58e1d3eecb6a059734397f4dcdaa\n61884835943e3bee24d58a0fca7db8cc\n52b1ad3c07418ba7ad6dd365bc1a3e8f\n850877f11e3b738d45416a956917d918\nf8806e5e8dae9baf7489e69b39b8fc7a\n8c1d89fffe96c9b579a0107da70a4d87\n00e0eed5ae9818676e0232661640f765\n8c247d847a49e597f8768befc4593aa6\n1af83dd9b1ef773614b21a6ad04b679d\n019311d24fdfe9d30aa767f19673f08b\n159e710993ef5f4bc56e6a663ec4d9f5\nc436479d58079d5e6abf7402040afff1\n34dac36fc280a4ebf0cd18737ab28489\n1b42a11f5f647e53d20da8c8f57a9f02\n84c41802423e95432b5d02d73c6f1b20\n0f19042b401e559884e6200d95f1732d\nd8d77109f4a24efc3bd53d7cabb7ee35\n5d0863dec02079debb22c05afc933dd8\n13634f24a4eac7f899aba1a9dc59f989\n6aba28f98c745024e4dd93bc75414d08\nd559ed7168ad81e8f7949ac3335653c7\ncf735762346983d0079d942c83886005\nb3e1bfec468534ef3df6a064caf8d153\n93f578d6a0c2f2ef3bc516e3180ffcd0\nf788b5d932a7a7ca56ac03c42a9724ac\nf4ff3b86b5bd67b194e1bd800ec35263\n5af0140cbb7473bcd747b524554801d8\n304d82c0867e556f1b5e676e0d11f520\n24f90815ef27c641dd13775f97d561d3\n05f08c093385d02c7037c83235df2c88\n0fbbec077755a1170055e60098ba5419\nf0499d65622d0e4e1c12e96c5edcd4c3\n5bc81eaaa1393ef052830ee3c8f92bff\n28eed834a318435684627015056d81f8\n869936e8dfe38c70b651abab3b50ea14\nb147499b537481868fd466e59d2f2e9f\n55695ada382339fd7c790dc774e71f8c\n71e92394af11cb927a5740b34c6e5d35\n6736b737bf7184a2d8e96641efda2dbc\n240c2b1789881a6e3a6e211b68abc979\n81ab62a717e411ce854fb278c7776989\n00cf4c1f92298ef931d0c219812bb3b3\n78b03bd32f8513e38612b2a33ef246d7\nab08aabe2888fded5a84286e9dc92de9\na6f23f62bff85ec6f08fbd0b177b439b\ne1cf1ce02de3fe42c8666443f04a7ad8\nd6e4a2182f7914b8f82b8c73114ad24a\n351333891b9653349fcd40204d44ee6a\na46ec67a0f2e7c387926ac5d783ea4b8\nfc1ceb9bc84bb7b35340fd852928b4ad\n4fb7f3f4f1b4ceaa707e1429a0e81524\n82ebf1d8509d459d2771fc7f122371dc\n993ed7d20d5f775dc558eb129f5a6c20\n0bab532090d2068e05637757784b9ceb\n2940952dfabfbf5739edbfb236d85778\n17cabade1f6212fc0bec52e64e366add\nfdacb7c20b9065fcc1d3c5ae350a31f7\nf10a990c00b231fd5b8e35099453f41d\n9fbc73065780f5fa7700d8e5001f28cb\nd9ffc45a69e7cf198eca9e905cf486a5\nadef66d348293d06e2991529f6882135\n68e82fd46cc9b9a4199594e5b28eb050\nb50075a4289e9847569ff09c0dd4393c\nc4c04f969e1678750996b3f16cfd11ce\nfa44d96b596c5eb05e68f14578e7a2c1\ncef8a3eb82d81b0a93a77e962042a26c\n26dd41bd1005550477ef82a72db3de1d\n0132a316c0945ba04b0c37c6cc229268\ncd61e69a6dbcabf44a61a2652324fd4f\nd8f1c5dee9f2ab31b628607fcbc2a982\n0c170fe680f144851874a532f3e66dce\n7108b7e24d06d2edf311719ff65725a1\n67d3ff178a2af39a853fc07ca32b67bd\n513b2572a5582e37b88e0d9932d77abf\n54342318b35fa81c742f4faf9f88aaab\n9d365f59076828add0b000414583cb33\n81ebcae3d7d8e2f6bc985fa037cfdaa8\nff907fe5198fd9e2c453aba0b3497473\n2f3e54cf1b329803bbf81b39fa6b46e7\nbc744907ca20678910242e565fc65ccf\n0f7220a0df94ad88e497ae2fa6c56cdd\n401b30e3b8b5d629635a5c613cdb7919\n253bcac7dd806bb7cf57dc19f71f2fa0\n44276bcb960eb2abae2d79defe367351\na4b091c0b5db4740d4bb23c630efc121\na47551710577014847f4dcdf9b2e26d4\n4f4fffafcedea0aca5a4d70e80e2238d\ncf4bcfbb7b32695fc4556d9d818dcfc9\n571e7514c0dd9e66686493f790d5f44a\nde6157099845708abfa016b514a56ac6\n4c1731dc135c831abc8835f1c33d049b\n6581e073b5df62bc934e9c3bb63eb037\n099fc8a2760a04ae1e6874a343a1fdff\n102f5037fe6474019fe947b4977bb2a5\nf8caf16cb8f98353e7c5c0875b146714\n531c55eb282fbac78466099ac4d56b69\n3ae2ea0c3867b219ef54d914437e76be\n21da93069c74dfbc3c02999e8f27a712\nda75d143c87e8bf310df70dbcaf3a6a7\ne294e47d9b5eb55a3d0e7abd0e5056b9\n81c26d1dd57fd11842fc13e53540db80\n83d7aa8efee1b5e742d7686a6d16c9f1\necf2414ab13383a708b8bd37cd846688\n2a73131d35404d2308beaafebf1b236c\n41ff0912a07fdc52799ff27b38e7f140\nae33d6face3d0a8882059e2583725b78\n5753f5136b1e824a4ae16b8eac1f89ac\nc4d9fa4ac16aec5cbf13aba643207372\nbbc6d2e38fc62e52cfdbb1d2b61f5ea0\n446ae41827a47ea591871493d8a804f7\n310db8d7617c0aeea032c3213a87c260\n6855adcbb183229d50471852801d2f93\n831df319d8597f5bc793d690f08b159b\n"
  },
  {
    "path": "benchmarks/haystacks/pathological/random-huge.txt",
    "content": "56be084d3f2715872569c01199344289983528891e88bb026f672d4e20c09c3c\n8da6c3d42db76214c3518cccc6b23083a83c1d238f7f68dcd9ebc978f37b1555\n2fbf8080518b0f14a20354896b164ebc85322853912f5d85cb4315006819b1c0\n172f4f5f318b71ac77a57d3ae74217e6c4af81d890fff8390161590ec1432f8c\n0e919cc3aac91cc2c17e864e43058556bcc8eab980140a40f20b88df0b255ed0\n93de9c3cdd42c07d1b379b9a7bd9fe3dcba2d73d8d98d368e042c999040e072d\ne6f36399001e131292b539a6d31cf30740bb43bff9dab5445c5cd3a77c6c6cd4\n9f35047352218fcfbaa4bd7184fd9f9bab1b2280f1fb287f20a7b7768d34ec2c\nd3c9944a994c537a65f3201d767865fb0ec376ca4464f88d254a0814e768c64a\na2700561cf29ad4b935da21801854d20498e330a05cf889652642638a26be7b6\na8b94aec972b3eea23a33c2baddbf62c832123691d9aed9e50594599832fbed3\nbc63adfcbe66680e773edf681601945ff8efd114f789a890d5e3d083efc17ebc\n3b2565599cff5c1a1df7f41a20e96c83f84a836b77874ec90ca37eb89528742a\n7b7e188293f9c2da4241b7b4da29c80c2b0bc5c8542b9a8dc2ed35ef27702482\nd15a9db94cd23a7c96bd99c5ddbf47aa2e4c060a207aab6d2cb18eec5609734b\nafcd0a88ab53f797329e10890f5c6fe662c6673f577fa43205900c39a300edc3\nd642312181b2cfccd407bca979cbf68a6f4848300323411d588936a8a8b2d8cf\n26cdd63afe57d3e7ddee03f8eea28acbe2ec3cb867f381c41135ddd808d74576\n872a7220d44e54e4e736021713645ddd128e766359b5145460e0e2fab343f58a\n446cab34d5a596c016d4d0776ff15330ba67ac50bdaaf763a5d8b29f91a57470\na30f51b2e3f1b6969ba1607e01a0d43e948b10b82dcf2e4f61df38bd7228803e\n4cbe70e6ae2a4609e435803b99ba6ab0d71ed3fe70f4fe212f58688d67a171eb\n5f7fe2b057a336baafda048b01ae86cc49576b023a570f5c2bfd188815197c3e\na594a5a22b30e5537541f84e03e5dafc890031cb6c1b41aecc9dd872a8f62fef\n3907501634feffc4be3bcd37b0f417bf614e6393a15cdaf2d77a77bf28501c07\nc561f1c15317f186a73bcb9a578c5b361b29f92a580febf1859f7d7494682d70\ne836b8fc425aaa8c1f90a7b8bd1ca2bf45ea0b85df53f6e5f469097e564f1b80\n04dfc6e4170e7c82f9801b50cd0e82e78e68c8399a6625a1b50271861b7fecb4\n6b4570524522c468b9de43631659bed793c140e70c5ba7ffd69a0d1856068dd6\n5fc868d380ceb7baf7d1f55d105c7040a9d0d9edd2b06c2233b95f157a8a3c34\n0f63474a5a7b7f357764e0206afafd52333a1b00c61fb68631eb541dc021c010\n66738ffc8abc2416ea4a9d7e41b633f8aaacc8f3bafc6b0d7aec15d5143d43eb\nee9ebd9a367b8e7a2e0a9c7b6cd03e22fa1f33001982ac35682d2778a6533c63\n5c49a43d8d73f0087d0aef4f34ca899141b76b256a15bead1729de9122bb13e0\n1218f02d488688b97551caa1520858b6d34d5cad20c9db5d7535e044e53a4556\nab75110d9b4c3372e861544959787ed851e97710398d4e30c96955a9a506a1af\n0ab7f810ed16350d6fdb00ccf1d3882e2e0e416c18ec15d89a6c668437fe383c\n930fb139445a083c94960ef2d996b39c88a688f3a43a345656f36d63b98385aa\n3fd20527459dcc5a552082521bbe5a59c6af51fdd822294d9f3835504c7a043c\nce65da6469ea11a1357befac8b80a148b3c37eb64b2df348ecbeb2a281751e42\n9d28538f4f1da2f91fb16d087f4ce7c502d2635ba8a4810bff34b16704b8c82b\ne1599d31febdeb0be01847614efc0654c5b33292406343806371e818fffd8e07\nd44e70f2211275ae201a4897e956b81ad1e9cdeb87a994313c9af70b86967eca\n08d88617d217457576c287e4a5a957d199f27da4ff09ef2e10be81e41ae446e7\n7ade1e3316210df092a15139177cb3063d9dfb332d42fa5ed33a2b704a133ebc\n240b21a16478d48f0bde7c6c444ca2cb02321ddf74f5d76de98cf6028f1b3278\n29d56c620f0648df0bc5aa2167a0a062b9b49ddf9da63aaf11589506a509312e\n54f960043fe51250f9ba892a3d7d2dd01d642c515ba9b7f6219c1b3b1c7823ca\ncc275c210c6298bf0e305e0868709c00596f240c83d803ef4e72fbea148947b7\n8c93531f265c51c42d77f7e5014317b2327c1c4e36cde8e47ce505e9b0d5b851\n5543297326a9b5f3cb830bc0cf9a98002ad2cf50cbe1cb00ae24b1758cdad206\n5f2b6dbe9c480a61a463c4ca1883246176f4f001dddbb8719e879bc7dd35309f\n9f06b8e3f179fe9cea6bea7e42bd2d1702e6a9c5c99f412840b422086db9227b\n08120f13be3f8b80cd79f020ef357aac128917e8c0dedc46f2815ebd205070a5\n53e4d9170423af2bb74ab5b6a907adb52e65d2ddaa3eb6398b3a844814b2ce1b\n8364c2231512a93cd3208f645ebc2f3669cb825f445dcb1e305c4e92015beacc\nde9bbd2359c628eadb29ef5958ea9a1aeacdbf8eb37b79b7cd2044b08b4e34de\nf92d35617d91481f3804e063be5550129986c240281b74fd3e07e9452de719f3\n06a004bca7d2535871887ff1acabc3f0e0d19c4c7a7c034eb486b832ab47bce9\n60c609cf35016a27d6e9847c3239d1bdc1888ee43f72a28eca5e268cd4041ed9\nab325c5a7088d4689dc6d9f748de348b73f3ee437108d3b0a4f7a910045f7798\n5a533b2c6eef0e6d6b5de3afa619e110aedfa9fbd1f809bcd075ccce67c3dde0\n6392182c9c17b0b8cba683a31120d31777b30c39c708188f53ee1a177083cce6\n95b2005f4eab38f10d6b9bc49f8b3b92871c875083d4f7dfa47bb261ab48aaa9\nd4af3822b1ab4450ae7cac420bd2d7b49325b7855bdcd5961ba20d76634fdc46\n4d87576aa16337f78901b8f37059961c8d2eff472cc5a6d14e50251512145264\n3e7ed615f0485400a1072741b21dd58f8da00debf5ce253859f07fb6caa6c435\nf4df3cc96fc9dcee14c304be1ae0c2c9e6b48fdcfa3802c7b94083a5f9070f85\nbaa6a6b96e8bfe9572fee98e3438e6ca78f1f149e450b46a5cd07bbae105933f\n550a1edd2bf51fbe98871267529bc359cf3d3fa63da5181f6797188e455d1eb9\n73dbef11631369dd9baf64c79bf9a1a44c8e975d10f0cf7cdf6a8ecfa4f7a79d\nf576cc40b74d7c0e119d9a44ebceb96584b99a9a74cac6ff68189d81600a4d2b\n507c59fae3581ece2be999c147d0709bf8366ca83461edd431d126760ffe9345\nac33341e6e3829c9cea3ab7efc03f2d286c6a20e5244286a54206a5122aa5a36\n39b49549f0e50a2ef1334a528a413d616ef0fbcc346ae0a6f44c506ec595aad6\n44cb278ccfe5fff8224611f21defc32a502c685b19281f70fa9c057ae3176ee1\nf1004ad2e62acdbfc3926d26cf6609237709b9daa6d6533c70a8eb6ae5de803f\nec9645754915aef6403e14a2ac86ad8cfb9177aa0f92680d6fdb69e827d7a258\n2ac4047e10c409c92e4a694a14fac2955b4af919b8a188afc82608959610114e\n1777700d92b076b4d7c8f2cc5c098177bace8ec3193fadc944e58390843c0af4\n2f403d595fc399900bad7c80876b5aa155049b55c13d62634d842556519e72ca\n099bb9c10c1f634b06d68a19f047899253e0a3fe13f9ddd6b863e4e4cdadb154\nf60c044df83e5d34e0d5c4039ce27b9e6af2f7a785f2827eda982724c7ea35d0\n3aea0d0aa5b23273cdec1641db0e9f4754a7e63f822d2d9b654084a43ba992ac\n490a1a37a58a7e9690336215188fbaf8df411c84f41b2d660aee4ca712f3b662\n1d427cbc2cff960e4c7bbe6c3423381162e6aa9eda81b1a71b336eb5ca3cb99c\n1438bce7c957873df9344ebb382032d4f3abce87c2d9b45ca0acad41a2fe134f\nc9b57022aea6dba429883b478d568971dae8c4dd913c2c6cc3107b459d8d4439\n7bfee8dd65b6600b8aeb2f46b8ec8378e60a080c279b6609e52b813570d0a93d\n6881d9076e4bc37502fd639326534923ecdb1d0418d6bb047522214089580090\n7d80a5b62bae0836ecaeb19332ba8697d73f0c18b81abf218f20ae22a4cb040a\nbcfe749a587ee3c231ca49564be41227a7b024f4e12017e52525d3bc250ac02c\n9021f7c8f192a0ca00dec05e5b2810d38c89e862f602bf0c2f790703f5a339bb\n06106df04c3f088044e90400c7eaa8fede6e7fca62299d79c851d2197b97a681\n8ca2844fff7632e4c04033cdc7664a58cfa2654688f002e7ea6bdbf9b4cef02a\n27e8054a50ade53ed96001797afa9fdaf96a880056ca2ec6f87e50d525e0965a\n7e0f2244db2709e85b8c7f41cec210cf724fcace38d6b2a7518d2741bed0e94e\nf800b685ed6b8d9ad8c27006529fb3c1438e670067f73ed03fa7100b25f5c944\n691e114422eb6a13374398b57468b5b82f3bf34f66392c22616d8ed156f9f07d\n48225d19e558d9867cfc9c135d77af2575a3931d171c55f82745596de2cbea86\nf9bb8c6cdddda9c1dd22c71cb8747b432a84804b6f924ad1a30b413ace06ba70\nb5e846325dd6436743250726d1f5b55f9516285acd720f1f02f16246146880aa\n549713f9bf3c6e25c1c9574858622d1aee1e886e94ad9d6e17f80730e0f58c5f\nd516a7c523c3eed7965b5b3fc77c6705c44ac2453b9d540841cf92edd3ac1e27\ned66ad49957602137131049b585fd4d6db4ed69322aee62d20445666851599cc\n4c978fbb837169a8d62c09fd72772683d12074721eee9072155184386a69a895\ne2cd1fb99a61787726a5bcb6e8294da5bbf206d37d56fe7d0f42a7fa5413f0f8\na405a371b19bec14ec1a06a6483db2d1585f307b32a9e3015f5ef0650601758a\ncba47b0d2ab681287e83df6a5ea626ce3dbd128ac1078c270b19cfd9c7dfbf2d\n73cd28fde8158b5ddb5c3c1b1ed19c3f69b33cea42bfec88e3c4999e55d1a22a\n0ebb74f0f118a7bc551ca324c6d466ba4b1b39e55eca3a1960a20d6c742bb49f\n9f2113da325623e68a44e695363e2dbc8448ca37692a36d3ac53b5badf7de798\n3873ea0fb819b9ddd6bcccf99f279110a7d57d363aacf9afe5b72313704dbb4e\ndb9e7f6b91c24604cbf909e6e9b8770a1972e1b79d539dea8b2857714f1bf135\n7f46997d1e24f9f9429f5fb464775bdc798fc69d181b2e2576bec38af916513c\nf92a79aedbd4462f8dc12b0489e248d2cdf29def752f50faee8696ad0fb182a6\nacdb3171cc6e9686abb7594186a22f25d2549c899d37c252d78a61f3175685f9\n8edf116e082adf12384f0d5b2dd788e1d2fcf73356c2105f0448439888c3b85b\nee13b20f44feee131b66bd63556572767c39c727755e692ae84a854e33705455\n33f1fa4710e8c6cdcbda94fbdaf05f5df0e49247f75c122514a8892bddb546f1\n965e798275e6df6ccdbdcf8b9723cd7553b24d18f0d399f02f69534a070f5816\nd79f804631b4622edd4ef34ddf44caebac13eedcf4873e64d11cd9ece65e6c10\n5078bceae85225f7c6868ea66d22bf81a68eb0b70488c51072af538d9bbd86f9\n38307bc9bdbf89e34465cf26548dd049fb0a55279d73e52f66e6e385ad88eb56\n23ff7419fdf1e695ba2ad54fcc8fd642117630d84d5caab184684fee04d284f1\nb49d9f743f85ab96586ad9768569f55c0ad3b46f0f34daebe196dd2089cd34eb\naefcc2aa7922f8c95540fefd48ccffb1b3ec62b95dcf76343c545efdf7a9766b\n9d0870d39b9d775728d05c01e686dc3cfcd3d037f3cf4d69e9b4bff4fab84d48\n360d8a4bb581b419da05d6702cc1752bd4460fa08501a509329fa6aba740d04f\n28778f302be818dd1fad14ad6a766effd6c85f45658196401ff319410c88ef56\ne2758fbb33ef22e99b1a496b9f7f575158f4ab6f9de59f1eac4d3f09c0432f8e\n6cff7335e2d6e038a781e9f3eadbedd39da3ff7edb2826f717cc8c911c47d2c2\nf8191f3802e678f1828dfd271b1e1859ee77126c4faefdda98aeb6873bd0c258\n2a09aee71d37b678af908e55de764981b0ce12b25f42510f24bbeed002602bdd\n0484483a2145f2b46b5c5bc8421ab320e2da048ac13200695c104574580f47e6\n79551a8c8a809a91c1e53c763e929eadd2764feb8744ea2306562eca1b954f8f\n7151fe6032e48008e179f55fc0a847e51dc092bbfda5db059b121234bf0c757e\n12ac37908041a79e0052f5a8c7ead7936acb50b136dd67f14f5c8fa413706908\n8927d7c65a839794914488c03586fbf04aba75e9fa9889214ab9ddc557b77ebf\ndb1af8e12514386deb67488742d5ab469dce55b1628da772b0132807b5cc988e\n67597a9ec842d006526da716b298271ab67d0cea67a7325ee544074a88975cde\n3a89d8f6d6185157f558e4b9c593fc59e66ba3d8a6a0776d7ea1efc84503de73\nd53fbe640d69145d0247b476b384ba273dbee531f6659394af9caa275ecb4c40\n6bdcd05a729f6b8f1b243408407ed8c786bb058cd47aa3516c461760810660ef\nb8a7ea71dbdb4945d194dd0166f13dbd65172899dc29e919260dec370ec59a15\ne9e48693be94a087a9207c06bb0287d9208204ab90b07bdaf543bcdecd7fcdb6\ne3a8881bf657856e86789798ba437a871cfe88ae714c142d49b4946a38821266\nf3e44ccb9cb363cd29fae137d565fa2559581d881a91fe0fb88712033aad5ef0\na0016553e93f38b43c4d59665b068396a2b307cd76ab784340caf445c268070d\n5a751cda3372ca50e01c36a9ba2221cdd2ec3c4a85edfa4e18c62d815e81e3b3\n5128ce879e500ca2642c97e590d4c36168faa66c5b9b2f39ea6f06b3450eab3b\nbf21c352a764c26e3812e952db866f599a744dabb01e294750ce42839ed84742\n627c2c7685d84043129fe5ad42b8211ff01aa8eabde3c85aa3f2e686580b0ad1\n9e626acb3133db17804614116533d901d62546d9842db199e77b125673442801\ncac9b916c2dc482d622326f4a5ce27b409dcf73027ca8883b2df0b28d964cc64\n0fb2afc8dfb71e32d1cef508e45d02bd529f988b6a88c420b6bb83cfb356926b\nec1d0e4edf951553de537a665f886722cf1cfb456f9e342c866c2ec03071f032\n82d3f1bbd6ecf5a053ad2fd27b9662859f0336ae24e963712d894b4463fa4aa9\n768da67b0ddd8306f1ae56824eb1cb72cfad40cf584709e259a9819a87fa07a9\n31466828a73391d0e643182c44eb369ae7557c956ee0a2841df211b576e35d97\nb1c197bef13c11e8749adca6ea0229986a45198b3f4b2ff5807293c05e3cd47f\n56bb2451d56906afc827cb0996263662fdae686fad51c4f1ff179172dc500d30\n3722e84da8c81d413c4a1ad997923db032408036fd13bbca46ce49e7c92fef15\n0945986709fdd244f5d127b88c36b611785243462ed8e117f64a0a5ae0496fc3\n6d8eddd8c1fb9dfdc985160a81c81f0b417e4a210abe85ca6ca994f244a00802\n11c90c1da70d3c684b2006270138c126e57ecbf2ff848c3112a13ff605d8ef2f\nee0bd9e4646ed35838950a226e4be9996514bf54f0b4e8f2feb58d427aaa5968\na6ae62d03178d9720c5fba70b3fabd91534f2ee94925683e1ddbfe0c25c149c3\n1ad398255c295c149d6b541a90794ea258639edeb989c0b857138264654fcaff\n286760e6e15b25777ae8ebc6717b4aeeb7e43cf52edacd183df54f1de78e3a3c\ncc6a5466a9f7c7793f5d9bcfcf2358e42091e1c0cec04a8a2d9846bf6c2b9e67\n58d640bec2d874a1bba89b82454fcb20418a818a4928903dffeaca5625eb50dc\n2d3dc911f14cd5796990fc6addb7a2803c314ad259bae426058495db02650a92\n41be67309f3c7dad949f91cd3e2498dd73b6c223d95c56cf52dda131e38f81b4\n3e9c3ac38905270a6350376814c450857f3efe2e9fc7bb44d0f5a5613b92fd88\n59a15f9d03c7f8b759c59e0e0bc44a440c7f694e44500f7f276580906a04f024\nd1e196ca27563f8f81bea33a60b4a1cc6932b31a80680122396e79a37d4b871d\n55369ceae2009fdfab316bd949be53b2bcd732e3795f3da40b5e33af6c228463\n813c7b231651360aacd6f7864c0cf493397c19fd9ff0b85a8816b2900e2f117e\n3aec395efa60e0702c02009b26293f9fa0da2722daeb9426dcffd99fa3569c54\ne4caf2491908eba35fcd46e5f7767ccda28538930fc625f1c8275a98d9c3793c\n2654007cb2b248bd9dae665b980a7cfa0b7d68caed0ddbb3e88893167e8e2597\n7ac119a103fac36b1a4f202e5a5655d7f0cde8da0a644822143d306a073b9932\nac18897807c46114d9d1c04fb2d94e18728d8eaa110c389633c4fe674bdee989\nf59d873e8fad88eb3ac8864e2f4b380f765d44fdbcb7321b0f254ee25b94ecef\nc4e82a19c36769a79d74ac98a854b8c7683cc2458a11a74d765e6c311d359819\na4d41c7c396f7462995654a06afac91a0a94f21ba860b984ddf8bd6cfa7d21cf\n0a2a31f50dd3c59f066f4ff6fe6921e776f6a12846ebf8d2454dacc244bd5a72\n28b5df4e443eb7580e79273d983031754cc037102b7190c83732dba868ae385a\n8181f2919d0c7d20d45304c3afe097223814527558658c7c8a8cde57f407cb3a\nd5e2eda76937e4a2075fa47d40c7a34d566b8c683351e2e430e388e888be4ac5\nc1f6797ba7cdc4e8e8ceee60c334835027266a9fb69e20fa3277e42b0d95f0e6\n11b1786fe9edb1c2367365001c87ca011f911a9c7eabe707df108fd5319a8569\n5fed9f8d01ecc92603fb9f0b3ab8a73ff516e87651093825cda89a3176952e9a\n3318cdb311c80fb73a24d81531da94b6cdafe30a2884acc5f8d58a78b9f1fd94\n13d44e90e79cbc36b409e9f43ae493bc0e62207f20cdc697d7617f2cf29c557a\nc35f19a4e8693f7b0c01bf1484a664b4a7f77701835b64333723c8533e33ebe0\n8747ed309542508c8987e03c25d20bdad49dc1d3c180b17d32c3590cdbdc0153\n0e7b4bb6a687dcbee1a72ee0a0e4124afbc97a1002eb405afd3ca4d83837fc1b\n4f43f655db89945e2469a093bd4c19f95b729a17b164520a92b3f63c1e22222d\n5de7f2f4c0a8deace404b5d6429e599a77dfbfa1ad6e839566e024669a6b2e1d\n6b218f0c4dd20a09127bb5eb96f9dd110e0870c256245f54f3c58664e02f881c\n923f46b13306f5f02818a303adc15d14067faeb7a5079c7abf788204385e4e96\n71a3f9180ed8df6d82ac974d15c6e17daf626459d05861a9c06751fc99c72708\n8e105711b34a7b2529c9703ae7d9799560bdd4dc0c9d60006baa0258689f2256\n9871ed1b5a3da989a4761908ad57c74f1fca0f0944ecec2e241d580bfadc1f5d\n762720673ae525dc337f7b23d3a2381574a9fa661b37cbcc1fc460ee79991bd3\n830707b616cbb2455a642b97843118196d32c40d5ad0d4696c7c64676a8075cf\nfc97320eee798d5187d0e0426cc932a6100c4b657d018ccd914d34a7a634acd1\n8795a2aaa4a5553f043bd2adb8b5c4825303d5eed03fe85235ef2691b0d42cb2\n52f96912e37c9495f225d5d4357422448f25353a5041e2e4bccd3a04c88ad819\n654feca8436d8fa4e8016e435f22853ee59c64b6b367b43e58663d9ca97133f1\n139f9d7bb473e9c3c12995a18f005d484c7c10445a9526829002add60353cb29\nb9a3efcac530804a54afcb99c4704b7380d9719e4998ba55240b23ab8b9e067f\n18093406c73296d012fc0a246a8fe01d2aa28c47289b7b50e9d54708104af041\n1a9879627aa3b3333c4c0c84dd34a48a9788adc0b5076f522a4e9ad053b3ca4a\n95d9ba7c8d264227c01a43d1b435a2c12435405659ddf4855f833bfb3c3cd49e\nfd85437a999878d187957ab56f9fe63f1b866b3bfdc8e4babd1e6df865dd69af\n1ceac8f7c9982c4ac3309709c71b14a7820a5dd29f57d82009295c7a94700c46\nd097cfa878e29c66fa4b283e778afe3ac61f569d3cd65444d15a10bde5dd0964\n0c5e3fa84efafb9de1774d309476f0b2bf763e6b1c9516fd3c1b263deca484dc\n5d2af501f0ba8377388ef909793f49522b810f64c2d515c4d34df762941d43a8\n2c7494402c2fea35e70e620b340ef29b9556dcad04354f94ae7fbffb193a5aab\n06d8f87199345de8e247ede51efa10d2ab3d04f8565fa6ab24c79220a96b7b9d\n8ef6869370cbe8caac368067ff30ca83dda5258de66dc6033f15ddc19fc7c4c2\ne8319331cde20c73d5caaf493a36f21aa1bce3d64d774157d33a135290f73540\nd858d9cfd7a5efa470f4429c6e8e95bc8843ebbc1a953fe774fde2cf5c6facd6\n8427006b0e9d1fc6b429786e3070d16d3c66f9eead10d063a0dbf9f3b74670cc\nb0d60dba7f0038e360300d9b049861f2b4756214a5d43bd001894ba2ab44a08e\n3c02a9d3cdc1a6ee423c612627e49dc9edaefc07000a575f3576556058d52083\n6df0757c8b1b28631c7c02c460c52ac1a49a2160051fb773240d99c541880953\n5dbe4287b122bd1f933e43818f05d37ea6da106f2f2427b94a5c71e5b0cce465\nad89610b5414012f8faba638d06897fd202b49e5ee02d387418655f730120236\n345418516fd64cc42ae9fbf2adf69e949438fb56db3ad04d92244bf7b355cf90\n0a67cd331c1695fd208e092860bb48c9ff393c8fb997f4f285a7f648df7435ee\n020b2469b728ca778d9a21db5cdc2b8786c6ea4a24a586e2686af78238ad6663\n39c2763aadecddaa7d336a6205d84c23ca3df72a30c4dc8eb30ffa0339360b2a\na38b33b16a0d25c87ef758d0a94b7d2d79df47c816bfe9c9c0d9bdbfe85a1541\nd5893d23de6560d4f037f2cbee49b8429b13e945ff2eb342ac4b9f7385e4f334\nc6555378fc5a0ad507a9d12765a1c77fc6bdc1f448454eb6340e426a7b920958\nd2a6665a2faf4d25b3252f8fd07f6d16ed718eae274977b7a33b2e365c94bfcf\nee15fce33ba6f96b0018bafa91336a8542156cff2effc1f396a786e229843bb9\n94650d68772cb48d17719076472b2f2e792be644c6dfe85d5dd225caae354b65\n4cd19bca06bcaa85d8cf4d1462019130810848f588452c9278d4c29659b65fd6\nb0bc77e182378647ec266ac507d29e7767104171096187bd6e96058c1630adc8\n0fdb184f24219574b236ae25a967667299dbd18e805f41d852d44b44a65b6151\nf8f8036ad29c08eaea109ea79905f1bf2e30aa9f76a2fadb9bf5cf0b4a34d03c\n090950910f561089a1721cd4617f25d1e0885d9f0562385318dcaf58814265a0\n71197d8e4d111a1ca154d336758f8c7b47e521c2008785819f8ab92b67626afe\nb411380ae356045122c71f1ec45ec64150b26df3527e4329e4817ac0dbebfb57\n090ab88ee917678a7a1d2338ded696259f65770fa382a95e5ff330a2c1e9c808\n94ecd3ca9f21fefb5566ff368feda55e8a2f8ee439ed00ca2efa25673be2131e\n0fbfebb5d3ac6d09d1de828f548b0ef0ecdfdefa4bd5e0f3931a3ed58e36f7b8\n4dbef2005626ccb366ccb629a71254b80b8203e9ce79e172ae28678fe0b59929\n3c582f91f23cd5f0842c14e3e028e1da28fdb3772288929cb026f3dcd4cc055d\n61eafeab2468e8ac4c7d163a6c59bfd5b66148be7f850e8ede4dc5db0ab00366\n8fddc8afd358a72c93719ab10a0be48fae714242efbf62eed1ad791df3d6eed1\nb158412a71d37ad577aea0714a8c98b45ae1336d2570c9f95f6009d2c6747fc8\n5b53d20b45172afaa509428906c5dd9b429459e6b550357a29f8dc23ab1f9823\na5bbf397d615cd6bae9ec7e6c6384a8a0328ec2a43ae0f5653bcec315ba31fb8\n46b3727fad9a8ae7912fd7d8a1decb673802e44409a05e068d8b909f1fcbb39d\ne1e853c4af2353971e469f6e7875594d135f830de1aed128cfbba3dfe8d502f1\n453dde0c8a34d27b0cbd1ecdf409e0e41824b86393c4db1d6dc7326a3cdbd520\ne6229470a49c2dab8b6bb706893a604b9e89d12ed504d5db0ba31d1ecf65ece1\n64fad4f9184f874dfc4d34c6feea11c56c7887c7826d471297a89c1fab529cdd\n012b07723a9d33cc249bf69911ce4d3ea2790b3b6e8b0facfc03e7dd44c77b8f\n2bdef94259cc87990bca400264667aaf1718f3c0a7cd6820fcec400e701505c9\nd4eccf33d9ccacfa45e4c3b9c1575ae74af727b179e8799077c081bb77651a76\ne87240fa76c4c769b81cc2be7a9c8ae3bee0d8fce587816ed67116b93a000005\n9df664d74a77b80d2bd56dac83339c24905c170379629b19c5c585599d421726\ne6f1d826329f242b600e8bb5dbbc35eed1b3e06c45d9a70dafd0c0c26d0112e0\n7c7539c9794e76b7a73efce6dc78a83bd53295ba37bc08abd5164c84a79d30c1\n67056f456e73b22b72d593a698ac62e0475abf6ca41488ba1738761926bae05b\nd658963fb5261161c3d2694d86eca6b761eb21b2fd005687133efb186516f9a0\n509e196e88b6050654d67e0efb0f57a16cfa05c4ab9931fd1036612c00bee740\n05e70af6d26884987ceecd8c910ccc87466c8d53727144480b2f9714e07ec445\n783603f36ce2f49c52da4c2ca625111152845c168a9bf48cbe1fdf96005c48f7\n6d4d11081dc00b13a214b14c9e71ad457b823d3cf412924b811a26011d8bc9bf\n317647d0203602fddd14eed20a9242e523bdde7509bd970c0f15a37850d21978\n6a8c60e8c4efac34a7e44ef849986944e8957e65d7618b7ad129172a4c7f7f54\n91d48ebaea1293a687c7a06c73bfb0a1dc28fee3fc3dbb84dbd205c4b725b6ab\n058336e33a3f9d6c6fc1a86b69aa32c8b7b9296d3a9e10d1624ceee2c99b3a18\n3070da6c905b3f3d6a2174fb259b83b05688e6c107d0d560f892eda5b381bbfa\n6ea0e2a9f4de9def9cd5e00643ee6ca71837757f98cbde7e2e25bd5abf6edfa2\n0620e56d949253359bd53499403339f827e58b3d782c4aadcf094dd2d1bec66f\n22bc41eb8d8d1841e070b21c122063a21d898745eaf5c66bb024a8fa9442ec84\n92f69baeff37921a019ac06ae4cf01fc0bfbe6e2278e4ca0caede4da85cc998b\na7711ac83f957b828d935ee92b335053f10732570aefd980a4de62a2c23b28a1\n3c1cbd2acc27adf227c53c2d56c36b1b7f223eadeb2c306b015348cebe257605\n6f43953c33d89bad9225027db68564d11a9025d624372db2515740a98b72bbda\n0e9c8e49c6b7b835d95d4c56af1d187d461ffdcf9c2a3b944c3b8b4d672643bf\n5ffdcef2369ae5833ddfa3dbd6f0f3f690aab8899b2419da12be7c67d31555e6\n13dfd2c725ef044467dcee9fc98842f1b859c41b2d6fa0f97bbfe53863e03ac8\n1df91077ff15d34d6861042f358851d02471d03ec42b720d630d4981e2675f7c\na88c125004e7e5a87e9a86c5d6f357f27b8fd980bd2675c9ce637c1577f91efd\nce8e881cfebb8647d10d58d551ede30e76fa9e6afaf654d63820ecc309ed6e28\na3feb32f1e66a7577ddfab7a5529817a37210c7c02797eeaa23e5aec6b16c7fe\n5e825ab864c57eb8e4e276cce2e2bc9e119c9ca7e4bfcd4bb3b2b8fc7433784f\nec7e82826a5064f2b66a9ad5b13675fb2659a01582cb57394213d84860b27ba2\nb70d1757bb5ed787c87dab8a7283df9131783b8d87500a323e3e7af4fd002bc6\n2a02e94942fe995e4e833de1c89cc5e932b25b1279c03b0e0192d0197fcf166d\ndfb13a39964bf4970aab9b85f265de9219dc5874153afb7f94ba455c01c13ff3\n9d88524c795b0ac19c20215de403e801e6395c1bb30f5ff20c64657a12956bee\n90ad20c2840d264efd509d8a68fc4f28445b6e46821d6ea1fb966446fadd5ba2\n2cbab0237e98dea777ce00eec4e54b81a3283f78dba81cb25dae73397f130a8a\ncebf7da472b6b09d4ef5619332f1ce7a2d84a1cc47d8067328901cdf016b022f\n0cb22e399b0ce226fdf57d718b90eeed737398025853d6ff0e0748eed9498373\nbeed705c268daa6c4bb9b3acb56bc5cfaf65011f1a6f8837e2d6cdb9be4be3cf\n42ad0bac1ec6b99169c581975aefa58f9af4b92218e3b78af8dd76e4d57a3bff\n2f14521d225de66a19de11d9d2d8c5455c50e44a69851b16c0ebf2f7a1fa11fd\n11482e491ebc1cb0902f6e813d2c9fb1e581cf05743b300bfd67e778bece08df\n7f9ebc7f7e65f43b9a813ffa7545642c9244723cad85c984eb4a5c5b2d5fa959\neb0bd17f9f1fba38637255b9d96d1d1d4e6a747dc86ff18d4acb968d4beec634\n4445d0abd79df1a60d0660732b72aa6311e0312ac6d74e4396fad711d49d1a4a\na1fc22b21b17160782d466078502a3afc342108ae179fd861f8d58b030db47bb\n632215db75250404aa398c7ed673f67a1935769951744434986b63b242a1744f\n13b6fb2cf7d5c105bad1cbe8549eefe24e90bafbefcc970166d63a968df59cc5\n4a51fe11eb9246776f7cdf47ae633e54d16a079460dbcf33ba34842d6880e818\n98e879d5926d7acbe07fb95fd908c059b86c80db5695c5726fda97121fbf564c\ndef11b27bd8165297abde326b0fa1a90eebd3aa6a26b4ffbcb3f30336341c44f\n7955a352f868f0c3482010f1c9da06136e55cbf197073036f8a8f8a872517973\nb20bcfb0a199cdbd8be2eca47890f9be5f5c65b1ee1501d30f459e3d91b2eb6d\nea02e49a2359e4945eca988b59a8f22f930b3d33c45124a7f12af6e9d442c9bd\n88d5526102f11548e15d9ec6e3983f82aefbb8e773c1370bacd267d264e351a3\na438703404d5379d52567754891b2d9195fe8173d8ee5e85255886833f219a3c\nd7fc0d2a8eabbf6181d6ee5915fe917488ccf11071b8836aba341bcfb88b6d7d\n1e8d0a6b12174cbd386c7a999a52deb991610af9038fd3a75871687235438dd3\n38fe28ad3b8ce61b5c1f13c833f0da3fcc1adb67f52559d908e8f844447f1643\n2cab6d5430e01fcd6e9107a9a91f91f4e7f08727fea8c9a245e518e49934cec6\n713af64914ecc2b1a70deb2dc301588a6df7e0ccbb4b1300c7951f8da3b71848\n1dafb56b8f91c178dfa5533f8498be75ddac5e2c79be59097e480ea22349b7e8\n5eaa8cdd4031f635beff0445bd763d959fc4a40e17658f045756f7fee6d19f5b\n657fd1efbddbc113ab4d6f36c084d59979ddd0d704015dfc7b82a91c7f2181ac\nc1da2f4465fd6f15642bb1a452888c1761199d626fb16d00d46425c833a56100\nf12db6d7c398e15ad7f68a3c5d5562aef94e052aa8bedb9a5d848e66dba45b8f\n1fde4d82bfea165b1531f8646b106ede22f1915bd5b3030d2f4682d9095672fc\n3e8a0ad3a5048a604cdd04dbad389564d77ffd21e611ca5f659848207aedf2e3\n921014f0b0e3900e0c6ed58972a40b8ffe1c4ae44e9812631645ffeb4d68a73e\nef6b8662e57538a67f52bff2c959d7a197c590367e281ee8af821a6023aa2aca\n32183814ff2a3cebb028b3b4637219073fed1f98b02a72a2a58b32d29b6085b1\neaf012300757173a2b92a8531b01ddbf21c1a86ddb8f1afa2dc1d67fa3143e3c\n96888d07a61275ba0dd7242a7ec615bbbedde669160858cbbfc0a8f48dba2ba1\n311196a2826e14ab1b036ccea5b6f7b486c1d108a2926912c9fa2c8e7a6dccb8\n4aef2cf7db8c7fbfa1ec7a0c9ca9ed96d0114ff75bc56ae57f3248ea26d89860\n83e7b86b312b755c7fef8ec3076af4555ce7b0badd0a5a97a029d15a6e587166\n55de4ee449f9ebb35fa5fe4278aa2ce6111902b431e93d3bfaadd97b137249b7\n25ce63755d4aeec31febb9886db8231de854cab0849805d86cdcb6e5eefb167c\na75057cc4c3bff9cabe6d68fdfb1af5e130fd130391cd33efb740c4f10208c41\nedca0c91fcdae364e2394218df94610e2716f9caa2ef6cc6fd61b8ab8672deef\na436f912c5e40a5192ff11d39a2e8c1e276d1d7911fa6a600f522a834ae75f3b\nf5c6afca3e8f2c8da9668b7e50b4ee0aed71c46789a69a3da60641f94aa01e22\ne3ece20fa36729a27a06f182dd18b9385aa8b704a28aaa23ccc2e6dba7111715\nb34aca7327193b834ed673989fb2981ac06dc60896cf2cc9b88ccb76026df374\nb0313d9c7f2cceea586f971d9ee9e2bbe998d604a871fdc739d23ce1c721ee08\n7156b9728975546eefce42b6e965395333c8b7402b4a512a223c5aba537eacaf\n44ff01375ee3bddd0c7ca7b932c95df51042a6aef8e8a9247ae1cda3c297eac3\nfbb7f287f79eb86423348262c220f16a419f145cccb47347b526af1bf10380a1\n8d43c3764c00c6ea41bba8356c1cc95fc841c4aabcd4a1bc2d7be6cc373b75d8\ncc222bdefa67365166629d3314cc3bf7328799109b1e38ecca9d6b0e2e2ceeb3\n84c16ff9c4518d23d70244d7fed72a238895d63fe5eef0cb31bc849ad85a4b52\n6ba7be6e01e698010fe17f126d880276306c161079dd60281868bc2d28027a77\n9a338b1425795d4b64de3ca45b9e4d5203fc291d93c6ea1853c1c81bfec094c4\n4c35b41e18054d62386f10f3129df37aed81adeac5b428e094dff649641d48c9\na080c4f509de8e4ffabec39e4805d90194b081ed196cf1a658d07afaaa11d100\n648000edc887024f9893f1074991c70bb56b779d7c9b78a12c61723e2b60be90\n7b0d8b78e345632e05e7bc44e8c09912a3d9ce1018fdb515c5c7efb44f7fa275\n2d3ec8b2b2b1e73277cab998e47b90f946fccb5bf7247ab0768d7e2e02ee03ea\nc571f69b0b4fecf5a3859ee411c24bdc8ee00798e4df0ee3c2e5ae1ae8990acc\nda53f2242b8679f8ebd85a081af700fb86d753fd68254bc7ba4c87cc389f53cb\ndeb0c97701f50e9659beea392bcf0cc0307a0b6608bebe586e928f07b0e64dc4\nce4cf59adda693b5b4a7e873f3e5b36099e49ac5377f80386af862e39cf812b1\nbc52dde26058fa0faa714052e0ecacfbed090cc1286572f7dda507037fb33b62\n4d1bb37df4441801309f23cfc9e7be782bfedd7aedcd7afd51b685c4690dff48\n262879d3b516b97cfe2eceac8748893a693d895f4fc33408a42c46aee8b99dc9\nd41fd0f611416266296df33d76353e12d70234f932a1c71bdc096f528ba894e9\n886cf504332fe7b699c7a7fff2b9c41771149cd63843eb31b8e48bf79e0de23d\nda8f9acd38916d7bf53a995881d63f785004267dc749c667e26a2d87f1c53198\nb36bb5cf72329e9a8e69f786d1d3f471065dff5f90b36f5ff615a27603acef4c\n66c550fbfaef0aa02bf6fb2d327f01734c21cd13877156ee0c644beee632cfa5\n63effb6fcaa00e814b6ac29ef8656e18079fea3ebf8b5586a0d57b3fea8541fe\n48eab443fe8ab71a003ac142b27fd6c9930fc77a2e934b4dad0b03b2f0e12a5f\n4cf9c1b076380d49e044a679af6aebbffe38fa7f6ec6f526775e8a35cc793ca3\n16f595cb4e7471ba60926781251ff3e9f9a05ab329f9266bd8d0f220d742df6d\nd35251a38455fd98cfad6dbfd3f93c8ad8f62b884b7690afbe73269a79b8b4db\n5be6f1cc2bccfc1454782dd0f695f31ec0af05f8797bea1a3f39dc5d2284f694\na829048a0f7ef58588c1db9d589eff648424546560ad4d628e419536b3843b6d\n9e5d050ff984ae26d025989cd911a89e0282baafdbf20e0c98ce300263432b92\n716c4b4eeff442b8fedb8e46303a589764db094736715a876021bc5efc7d094e\n0ffee62f1cc23f32e12a0ca83c229970b83f95c21b57e07e465d5b04fb8dfa62\nbd93cb24bbd7975d4fce0a1f2634e31bfa1abfa4a6a1326f024ddf30364352de\n21f5cf2422739651d5adcceab8d4eebdccb08b5fcc064b3afb9a2989d1b9608d\n2932f8e23054e1af8e626a41cfee6057d0b24450ea7a264b48cc1f33193ce4a6\n60c687d950bb1fb5cf6a965e5612b0f43d703714ad2e34c0626a048fad890ce0\n8d679f0d581966926a26233a0e22c2f78526cbe5fb4de7f2eccadb7efc9b8d56\naf23b397aa13142b53b756809583ca027ecf8f5b82ba604d8c9422f7106cf87f\n4c734adc08eadb525e16044aa110b3f9a0363598495ca6a3f3ea36842b103d1f\n4c72ed554b2ae58805c95f80db1dfb7f43c4f17e0ce989a07695024777a50343\n03d59f8d64cbde99c9d2e227bec4462bc3a7b5feb1d33a7ad09c069667da2d3f\n6d86b1e93f1b72c63e4ac78add54810303cb062b871c4db49c4e782cbed25fc4\n2478256d612531d0e07affb40105fe6fbc362044423d08dca5aed166eb52019d\n67c366d10ec6acf0acf08112421ecb2471e87bfcd4a0da360caead36c2b76d92\n868b5028964cb9ecfa7b24fe699e033af88f1d89eebecc822aa0845a7339a1d4\n623005b72ccf8c746b04b57a26025eac9425ec04a76c1452c325c000373ecac8\n1b1710919be6dddb912beba06dbf21e6fe5c46a35299635dcca05029d2668e8e\ne86a801898c5b00821b0482ca3a055675b7a746fb9b4c718b4c8fe09d4a15922\n39828a698631c534b5f85533b629827cc4f4454fc6a4725febba4523b6fc380e\n53e37a9c90c1c1479e3a56985126259c96d41ed07b98c5ef2fe7c180c27b66b5\n804a286133d3be0a3ef7114a18ff068efeffa319dd79fce340d1986f8188ba43\n88217d6a51e459aa763f0a600c16c6ba8ea0107b412c081ba77df47603163962\ne1f6ac376e7a30f83e74c8232a58d53d00c8666b2e4b5fb49a44a1431af7bf29\n39bbd572543ed07b9a201c81d8cf197054cf7e06610e5ffad5d14c814112e954\n962828fb7e82e1cf70872dd94c4198c0a8a4a103d92dd3afff89dc71f9d37ace\n686382267e976a4820283bf82477123b8826ca69fd87594430a0dc0802e22e25\n25a58fbf5db80a693956a93220377ccd322657dcc4d0aa15b2b56a797a865ea9\n0701e8db50d2b19496967b52fc8c6e944bf7d935183801a913abc6c967028c4f\ne7babb4d25a1d66b02f82ebc3e764c7cb46d33192ced7e9c3909a847ac7b3e96\n66ca0069a76a818e92127d86290ddc2cf78f97eba20aab2c800b5a4536f1cbb9\n5e500a91d5ce654aac5a1b7ea1be11e41dbfebb28215a59679b852254f8bbb75\n4dce54c58e327bef1c6a9fa0c1f45d285e6c4172a608748942840d5f74671311\n3567c57fb7ea67258c742ecc6039fc900b60d7dc73c1f6cdb8459528b4b257be\n9115d782d7f866d25c740a7b4dffd48d2ec59015dbdaf03d053fca37aa9b3c4b\n2df4dc405714654017d1ce0647c3669e6d79790ee3ce762d6480d63b330419ca\n8b6c303582e29168a7f775a2416d33f25c514461da4d8fa27b032de70ae7b8dc\n2e5866c67f8c6500d5a31fb561a7e0965bcf461257c966cd02ca3fb274c6b0fa\n00abfabe6b9b1c04db9aba05ddb3395d0af9ca4687a8b1265ad822c500241a21\n841fb7816e9e9c1682e4d4afca38943c1c758ec68964c7d5c90f0ea48ec12260\n550b633e10ef8d25e9816ead14491ced1cd5c61daf85989bb54f53f991a4d239\n0566fdc2bc3a7811feb98b86901f749bfe22e8a160e222a2584c205186140f31\ne4087a9214182333a6b24f5107e0d2703808ea8e219836628381939679a8ad87\n33ffeda1aa730135c2143e3527a72010187465a5e6ebfb46b04e2f2d079a2950\n6efb81ad3f645629272c3f05730ee82da38e146d60bc9d59b5e97923ed2819bc\n0d4dce843cebe6eb0adc240836ea7fc366e0ea4ffe11e0fa03c80681be0570f1\nab7bb5cdc8308b6e14f2b19a4f8662efccb22b6e912a1d50a0469f5261a4be9a\nd73e024f8516add8ada4f601a67ed18e896082bbef5d1d45a5d33892d8ca944d\n08d63a3ca29baa418397b7017841e500fbe95d70f7f832937089a21bb4b1a3de\n25775a21890dc657a63f1c26162dda0c9bd4266c5be91dd3028be4b394ff4679\n462c17d71da9a03f8bbaac19b7ffa5e132052c88d61a56e6827a86da4aa42580\n7bea1dfefc2e1dab7a1ec8fda443baf7d3eac67468669dc332c3f1462a572e94\nca4ad16ca9e094374ecb0fd8c34fcd0be914a5310e6d2218706e67e832d68d11\n965833d779c8a08e5296cc8da171b999f549cba36af831a9dcd02ffc1e35d03c\n8eafdba2d40ab02e2f2b8ee90bce734618758ed6353c7528e3da88f4ddb2fc51\nb6f60b11b95c3e05b46189ab369f453778f31251157dc509cb37ffadf582d1f8\n7e885ad2f62e591d9a4b91e088d2677c89680e29b54b8e98c0426fdaf26444b0\n7a8a4c4169e74c60cc6d6d026048bb155573d4e6be7e58d7e7542fac41347eb8\nf2dcf5d626b90194839d4a5dc5a6a60d0e66f8557bbaa1dc4802a400e0694be2\ne27ce3c3370f5bbda3ba441572ed105d229abe73b1c9beee68412b3923f22069\n5515000c14a111c5b1e714e7553ec871208b090a11aa3b8ab89b8983a8b4a431\n20078bce6b53b461f8228974cbd8cdec13127522a8e6cdfebb9af6919437b089\n34e5475e10fdac5b57e62c79e4ecc2fdefcd9444baa85880f0e240c118b9a92f\nc66c1c1a1daf6ada80ba6e8683fc3bf621aa20042baa28661225eaed299d2232\n10794ee0c4d95f70f3525777c1de7b145b4dbc3ec3703b9ff51ca925a2bda4a0\n0e3e97a75fae2004f8403a24a56ed0b0c39203f55032d97b74346bae719b002c\na9bbd4d1e9cd6a0581fee7421d791b82b3df6584d04e19d0605fc3acf755583d\neb97984498edac736b5e1003b872eb4093eedf43dd1441eb690e6b2a583488c8\n9595e1b2eaad33e34b70d72f50f43801cbee18441460b1666278a69585b7075d\nac0a65d596bb6c6f5456e1a21a983863dc9c0e3e4783f32efec3446663d1e389\n7b2c80e339a362d99bf24b939844c5b9056773ca62944f2544d483cfbed0be63\n2a7e0a9b272e3e02eca6601ae90d2d995b6168e267816c7ffc5181e2b1ba6343\n74562575aa670ed4c7979be1b15bb48cdfc2f71c3a09a6c9a5898e2ac482d960\n79b355f01c253ea5abfee887cd59b908fa03530a48f1df35d5b16bb51a86db4d\n2863ef6338b22e5d87dacf0674c6605bb58ee1457a1966e6ca6e3dcea08744a9\n04cb322603f0a84baa728c411b3bbb12e72a05e61592a7b0537ce93b00ff78b5\nd4279794a2b5fe7bd377b5f380b6ebbf88ab1ba2e77d00cc8cb47846487b2813\n67c3f879f59ebed9a22a330c79090183955414da0bab01b16f7e2b746374c21d\nacb1f0139a9a3f41180c9ac7e563ae89444b65c0364f3868cd4c3a79422031f0\n65c5714bb0503ba02b161f3230b4de46fab7329a68025ae2f8c5d4d1ad6f0c21\ne2ce4e6ced25d0b5bc09b6c533ab1d50086d33f41ea5069b1601d9474f3f7adf\nd515b902c880c541607e7d10f197a9d256610dfa70a515829d1dba895d40fec2\n19d9b785216e57a0753b92a5a0efde82266a222f55d2e7879a0abc9bd5c86918\n8631dd44a986aee508e8d5ed4c57aed65f440b1fd660854e98c2615a20e81e1a\n8022b01eb50c13d8e63380624bfc7f8282922a6d0942f68b545be9c4993338d6\n6f469da6fbb23954163a4aea72c07f14cb2d16074c1657954e30b6526a26f40f\nd285920aa5ebb03e9fa893a04b16922def3c21b78ef86e6e9cbaf35dd5918a48\n85b9061c8dc3441a01eb4774d4ecf5eeb941eba4f33417d093a9d36e80580be4\nf0e520f16e4a699c1ea542a46b645cd0a85953852935a0c84da2fa7b0fa53e3b\na3dfdb1f265695452d7b8ce4897da5cbd3385a0e5c9c8c261550a5d8de8ed3a7\n29bd8125af7adbdd498f6b5451c1379323ca769092bbcfb7ec1e036b90291c8f\n15711728c8a6ea6a887c5caacca3580d9b4f76530da46852720c667586dcf40c\nf4a75954209bc089eff7318c3473aea9ba766ab20bd4f8789ba6c3941d96ab84\n583a2ba36a893eb4e3a5d99a4e359d29dce1e32dd792b8f1a35677071b4b970b\n4a3160070a7f98beb5c86339f6c4a9ba0b1fb2609b1c39f5ca19459da549b693\na37ef6f7bc5e47e73acb8af340d6c0048fb581d1331b576d600295bbb139645b\n837d74b10643c30545c199ddae0f58745f248ef6106f3c0bfc31701e52ec86c7\n09d35567106d6fd208c60b33671ce61d23d23fc53e1ad6f4d1749502c26c00a4\nce079927e8b0cb92b3f7911dabddc95647bfa95c3568db00d89941ff83312050\nf0ef237b5ef3be5a0b6d8a922e84af2f2d559a706b50f40fbfb8afaddc834ce2\n229b194dbcf71eddd1d1c0f79c3b4560f025b75772129aa568be5a948b982a32\nd270a4c12e6afe7232a97395b7e4c638f2f01661792f839610c54c8d071a6700\n9a146d098f5ec75bb09c228256624d57dff5a8ede821dcef65243e57ccb71af0\nf8aea0f5451fe1945d9c22248d0e0f4fb27cbdbfc5b0e5926f66b4880085282e\n5e52e12b083389c7adcc2e08cd4c40966604ce2582b51bbe557ce772d7f94f39\n29ed7140b760fb2dc1a2c5c2fab51b79a7391fc13490ecb78f4256b1293021bd\nd06a5e14b44b4fb9c3775643d64fdf660133ef1da637c237e3557a55b12c8364\n6302eded01d3b0f65267af07e455476e3c1d68eff9b37307ce9e83cba6a4beeb\n84950dce3f303574477188bea813ca6744d63c73c922a3afb5d34b58a81a817d\n1040d1767738803000b207761bc9ab78257112594ff5ea54f97d72f89f242d39\n8ca6e35bb55b78ea6b9c8da0c53be94e71a4e9d65753212bef1a24424a41ac2a\nf3d5f6f775f2593e4851e5ff3327f96010059bc620cd360f5a42f2d3cf41f614\n8b08c20065ea07474871d3aa9033c32ae55bfbe2262d93c83175833ad5d4f370\ne1b6c5cb6df7ed836b7e86badd1e62fd477de4a33c33fb54d7fb9c5b6dac57a6\n34118d5041d5f3e61d5d5f73d410c41ed953f941752f6548988136f1c469253a\n0845ff0d4dc3392f2c6c4059736b74f3fe97eb71ea23ce6469d6f48af5440bba\nd671be362b52c36c4f733d8547e7123012d3aa297ea203eb7e01f48451b803bd\n723f3f34798bed11b510680c1ac6a76c4d390982cd4de72759b9a2ba3c6d1ef4\n15eb7a811306859f0fd0095b557a76bef28b813649b9ddb3a75967acbdb591ff\n73b7731d67ffe7fc0e61b673127eb58fbf208427aff785758f225f7c7dbf0ac9\n80ee732a4559935e255d72cf4baf7bcf6fde9b64df061d300352e0029fae43ad\n088fdf01aa71714a275052a1cf3d575506d84b1e66ce997e62674990cf354a77\nb0a9132c31daebd4efc2b06793b18925a3cdf832c5a92813287b69e99f86f621\n4a6fde3062b071633410cc8e305c0730aced2f037975856cd9e6dd5784381bb0\n9e4c430c39f39300315513245ab294bc87f894b1a1337fac73ee4e1102fae0db\nc0137bad05d37c7ae77d714228ffd206d1a0a6c62ba88685c9cbd69571f143e4\nd7555ab7330fa2ad377eff3fc7e30182102fcbe634a04bd6df11d054877e75d4\n79222808103eab1fb07ba343f71c4364b7bab746f15516c8d8490d765eaa7477\n1407bf5ec9cff775d9f5bf839bd32cb44961b26b7bebe12489b8caf92fc83d1b\n448b3d4b652994583f62c036cfa4e014cb9268e70defb2d291ef6a163940d5d3\n13b74d3aef6840e3428f6acb1e8e55e63ab174f92cd7c347a2a619b25ffeac83\nb6c5faa45ab8e4db89a0fb326ba54d6bdd3c27b374fafb88acf50a9b4ee63e47\n43dd1a88e58dd9ace25a1d38422ef8b2c4ddbf4f81a1c0b34586cc6ec51080c4\na06218f5dc8ef6d28d7b3da805ba4dbc5897a8ac4212cdfea2ab5844da4adbca\n6e2966140c764e191e1e7b5d9f05517e3d9bab70c3b6a033e88beb200254bff5\n13a4feef5f5181c30fbbe4aa32118e16017b59a7dfef7370afe675cb1a58fc19\n5b1c6f6f0ce5090cc325cf88077dca3c5b29c7925d23c7832ed9ed2e26f35a8a\ndfe2211194ba66ee3b51916534518cf073e258fcd4c5201a8c7b08219b6db448\ne4a70a815deaa3d5f0b2a85d3fbd777a79b4ae881c21dc60d4e345af911ec541\n1d2fecd73e9038f5397db3df6b41d234adadac2a9c6f82754a59be3200e51bbb\nbd1f8af3fecc54dae0137b28bfd86f511ec3556d3f509bdc97106f986f3f3921\ndb670602548a11058a4c831a2dcbda5313772f4472a23d85ac23c00788c122de\n0eb9a917da22106cb2133e8c86d70eec2468375d825c0a08e681cac20ed6970f\n94a67898cfb97e79f294f1442516cd624f3731edad4d956d13c4b4a9a9a4434e\n66604a82a73891f73f033d23e0e8038d481986df5d2be8f6c3ef12395bceaf29\nf6f94b7a2000a308f0044f64f8e73fbf3cc9de1b80c79792e397a9eb562fc3e2\n623cd06ff173f6b892586edcf6a9c61dadff8a94162baaae9b7d4414075962ab\nf58fc1079198b6c09c74e9a9cf8f4fc9fddba8278fb04332781e188d24054ef9\nf57f19b904f7734c6aaabf677a183bcdf87c2c5147681080b88868fcf1ea5c78\na56a0e2d5a5e60de54a993838789367a83cd83d32cad76c6c7cf1cba78299b71\n648a995deed5cd4d279ba3deb36ada92ec07c244f0a10b82c8383946d1dd35a4\nb4ee4b943dd5a95a80d6699ee4fa56f1b3c569e7037a3200d0e28f4775f9d0f3\n529d181788098111da3bb2aa70e0852fa204edec66a725b7ce99f92fe47871fc\n3caf7f8660e639016ed082496ceb90423c42eb5c3787bc6782943824a7993757\ne4d44fa8a51699eb13f329a16106c316cefc686ea17063905202d9197d5f1c74\nbc10bab4c389d542ec322af7fca6858b877a6fd3ec292eb1c054366e751dfd46\n69f8cccdc66c99bde52e94c084813c6381a8a75b31f7d9706617e1f0e8039ea9\n3e1a7210501b4a240ac1535cc93ed8c17a93c8ad644feac59453f8ef2ea7a9a1\naf2e9b924e1c57c17cf3c3b3e0a8760e25567dcaf496962bac8d14375366a3f1\n56a8e1b8400ba34c8b8e7cf9b889fe5ce5d19b51fb9b0727f95ed06f8208e843\n22496a6dce041391fa3711c5a30fb429a374c158cb66b97c463cf8d7e96e72a8\n2305773245360025945274d6d1a4a0b0d18dc0325fb460e93bd7f1545f605358\n92efeaba80dc613cb14311a431f3eb61786645b37138c778988d31f8d87f4e30\nfe1b5248f3e67ae5c6668162ac7f3b497200849489129097730a0842f3b91f3f\nf33e4cfc2c5ee93e29f737a060431ecb050c8700faf72a0006cb6de0f9480339\ndb722c96aab3a7673aef5d9ffb15521900a1c11291d6d8ae5ced56bf31f88bd1\n0d98131dcc69d0f878f0589bf4db7a9d6ec07dd43252a8ebfbef27c95aede562\nbf536c32b976145bce5355fba377e9299565b04e52e794f54320fec6e5ce60ae\n35f2fab9a61b84b2e30aba2e2c1107fc117bd8c8163981cf493b72f6cd1209f5\n931a506d536dd9710d8176857d840f5af830176bb67291c9525ddd8877a47353\na85481749a0fd194961e69c72bceeeb7185351a07af683adae55e6ae01f5c76a\n18f5796063bb3fb5ccf2a44e3121ddfb3d4fb8bf6970c2ecc93bf24ce546ec6f\n0b24f1ce3a6392928554ff2a95441bb16a8596d2d7bf7a01354a45fc23ff572c\nccd43d012b0fa8eba0056bb6915fc8d249f740ac9d3654bb29abc83f2d9710c4\nb84bfe46950585053933ef55fb6839286bd1f5ae221be05c179d7951c308f80d\nc7b7fad732f6510e47710c3f241d9f5780a01da59c240640a22a3588c3a9aae9\n0f5f77471fe2f5b8a49a604c0d369ae53253b1d1ca664332e4d07c09a36aba28\ne86e6c70fbb622528961fdb085a905f0bff4e9b82398684a9acd27f5d94d2e2f\n026ab33c48ff168e7e23d531a9644dbf0c359398c0b35dd7e919495de1f6bae1\n4c3784dec041eaf8279f0bed38fd62ba691f9d8e95e9e3156425b6a5b1c402fa\nca9d72c720b1fc7a8b18d5756d01bead795843458e0d9faeec09a231e3756f3e\n00eac719eb5a750f2095d1fa9406be862f403dc9f30491a6ff28fdce9ff7524a\n9e76aaa3ce7cdd2967f6e7af3fa39c156cb658638b2be85b8ebf55ca4be36c82\n670c06289a6535f9eefa7d411a2771f32793c68d52f9f6098448d70fa4c12054\n859274678c4bb3d97e71d10ea90341f9fce4fffbbce6db3d45b030c352559562\nec1be6b1e05b10ebc0e5c8d3e89dace7cca8005d9b0a7116cec46d86c388c28f\n49c64a9d471b6f060b442c16104549e1e5dead208c97749a343b5bf21034412c\n9b01d144d4ec744ba3f9c525e0b240f9e52e7a41809e4d33098ce8b326fd7b4b\nb86fc67b16ddad6c7b088226f5034ee8dd1a6827a8c66b50054a41c4b6efade5\na1ed967f1990b9cd5889682aa94b419806dd82a04818a4313a0716d83738629a\n854beb75472a583c4ebc18b798d4bfd69ce8ec8092a23b719b45dee0e1789f9b\nbd250d0a797bc6e1940d1d1616e6d8268d008c39f85295ea6a97f122c5f28243\ndb55bc591c0e060eb322a065302db1aa9d85d9949163364cf6d28f2f274a9826\nec7ab129199d643dc57ea3ef49353c8a9155eb217450be935dc1b256a80659c6\n268b7a23331011ce35b431df850f2c468bb51188cec737290bb23ac4fa9715ce\n64f69b6119dc0f371a85b27aa010fcbde3e598f0a08596e475ff6645f2878c93\n0ad15e2afa16fd23031ccfbdfe01f77695b47a3432465f5164be8f30dd35a2ce\nb26858a2b0b026e43a63975a33d2af0298aa78dc493d1b58d87151c2e138a3c6\n54ec5a57fb06f6eae0c2bb992040a33b8f92b83c7f0618b6053529b17f324d2d\nbaabafc074161a3e1629f271429d683451a8e2a07230e030ed72b95bde2b6d4a\n5d0af0f265fdde648381c7f665828deeaf31ca545dafed3deb55277b27a4349c\n46edb83634849cb2fa5dc096b22af7c03e6537070760801f2d671be9eddf692b\n88476f5493cf417e5af4a2a53ff44584022b9e4aa0da618534850b78718b4d2d\nef3ef110fc3d02888b748bfdacd54a6d395ef5e33c8e806ba5c4c2ec0245692e\nd8a0ba8988f9bfc1999840099107485192f72bbb2bf9d44500878b36aa398383\n1e9123da27662544b900c75c7fb7a4bc55465239f413e29394bdcb0029b0859f\n0bdfe2dbc94d685ab9300335e8e5fa46b3bb9d8fd3ed0cee2e29c7f429700e28\nc01fbf3d80adf7513fd275bddc9faf101d79dba5e646196ddc90e5d790e670cc\nfeaaad9324aaa341846f6542e104dbd56e226b74d26736f496611b1d60a7eb41\n92cf91710786aeb99de998de89b114b29e6ac77c285ce0ba15e4b87c233f61f8\n507b83d6d814b6b6bfd1957d3677e3e3e300e8d695fcfff2d22b4fb749121233\n0be1af105a8cb2a505bca4f5266e7b5993f9f87a7f00034790de8e866873f95e\n21c0925817fa9e29aeb18810c635931ad0ee7327226d1e8845227cc1e45e884d\ne52b55dff9e4a79cedc8baf48726fcbab62fa010e5b4175fc78f27ddf87c35c8\na944a7c761bb7367e193f3580dabd77e95211d7ffba8f5ccfa9966693bb7c243\nfe98318ad499a4bf3d7096566350340e168be8e791df2d7e208ec6fddac9358a\n288cfd8f5520a1eea4596d1ff3f5bb81841a52be506fc3254833073450edc1d2\n56329750e74522f3cd04fb968296cc7765b5d9226e7a1adead409e13bc14a8d1\n50ff963fe9572392296f01a4faa2ca4e31d18657b902a0bb61c5bcd09ade309b\neb29326094b7eb0518e4cad11adde596021263f456d89ded04795baece347c98\ne30742af7b5a1f0908a2a05c2d6207b8f43ba6865d593d117f2437c316288415\n20542036da0483d1dde6f5ad936d7bcd9fc176f2737f492f6f2d4f505dca4578\nb3570337946895adf45494f776166a2bdf02778d3bfa33b0a50dedd172618ac1\n2780949e0439932954240e1806725e6bf180ed9ca778f4bca505750ad0b29aff\n71579e2bc10fdd27297dc97a26e98b7e1623ad07aff4214bf51f8831168d1dd7\n142d0bc31cbe6e14a31a500454bd54ab518e674f0738ebf599a5c39381555b15\nf78cda3549d6cf0f686a287e6af3e9846ea7230af9b16acb5bdd05877943b61c\n8a5f603067368014edcedda07e63419c5b9393b3f6c0887fdba1bd4e29cdf045\n954cdecd0dad15f1b6233f179bbcdcb865f363a5b0e663f9da7ce01e78aba1d1\n4d397ad1f13f460fa455bbaf414291ab30ff1e1ebc28cfb9c4e1d8a8092cf8ba\n0b2b0c2549e3341825e016ac8625e5a24a765d0df71755a42c7e52e77248ccbc\nf9f6e9a9e9281bf218b3c8889d565caeb91a6660d13085b785e11b5273feb505\nb8506ca32de2ae1ae14dde32ed1bfae80950a00ba225f7fda06acb605540e14d\n32b478697ca9426207a9219560a70052c48cad4a41c6c690d140121d7b6c2cac\n04b7abb38618febdf3148cddb6332c12e372a72119efd827cdb569fee77ac4b3\nf019f04e73edd6cfc6ae8ae443b5afed8d31a09ab0bef2c7c5a56d4abaa14f5c\nf96b4e325179e20f91a6b2184a0945e21af297ba48bec84bb2fbfcfcec9a4c4d\n54b8a849d02db3a4cf9081341801ffc09b54fcc15641f12eb6e552ea0f754f42\n21c812c6e356b9d89a9a1a89e0c98617c7a27a56a348da8723b973d10737e9f4\n1320218392be55acab9080ffb1ba598a23f45fb443fe1dd5ec6ebe4e92c683aa\n42c4f49d43160a5258531d9d952907959538da4c3bdd6d2909dcef29bd26a7e4\n5ce311dfe82a5df26550d2dac8b4d72b8137d93138923295b1a37258b64de471\n3d68d3e3e20e66cb8a80ee87e266a2ee7a99d37d146d0b728e785f7aede6ad6f\n01cada2bd11b82b5043f3339346976330612e9471b252f570f1b5c898109d7d0\n36335e3c88aff0e9801345ee302ecc2338b6e84497e0c329a8d126980452e06b\nb60711c48c7c06528687c732069b5437277b4c9462477ad721f4921f5567d804\n10e7a5129924c182fecb7002db237891b270060d5a89c73aebdde7160db0b67d\nccb80e00bdc0cd8e07d384ec67f85b0afb67d3c8df6e7a51dc94ac494c60a65d\nf8acadca8c84dc3597b03c9178f7341fc0e5873389fca9af05b7e0e899d19020\n373aab0c27cf2947e7ff760a9697fdca82ec9e11d0ac41c0cd67a81119ac73e3\n58cd8c80a0e3276a9096a965535687a28106e164e2d622dc85bd7b2f9b06f67d\nd9c18c1df038a8302f0dfeea1619e465a2d1ca1139799933f670803b225efb4c\nc9975b35392170e6a15c38170ac8c18344733c9c830af8a587e2974cc7914bd4\n10c5b4eb8027289a65f68b761083745892c56aca2517356d1b3481c13de9bc68\n8aeeb9c30432490b0c9015f7d4a75dcc357f5a4129617bc517f255fc35d2b182\nbc5b0b582a75c5586994a32ffb8a0f4bb0cbc9062dec5a6d62eaf9a2b71ae979\nd1372a1eaa61dbfcf390add0fb501566a3e124decedd705dc93c3b588ae87c66\nb329e2b51eb090824e5cd65723c1ec6b76f5386dff0be90a7d0d6ef9d7445f49\nb05875d7f7d9363a6c7a33017eb5efc73b543703dc17d9f400bf9dc53c9052fa\n4e164e59a0bfa762049920960537342ea46faecbbf57f13748e9fc4ea129fd83\nea7d9bb652ab16361f5f34c4e9616bb2a276328ce49927d86c591359ded9d7e4\n34856238945254ada7cfd255a55ce3e8d86b30e4a81c8b27371eeec4eb998aa0\nf43d2906f15ab122e99099e33b239db971ecf507474fce8b117313dccca5660c\n125637fecb01ad1812e390b7a33f84975f7f501c735aa99603dc353ee8d1f73e\nd85eb506fd30b47af9f9d60b88824b9781b685c02032675c7b5a3d7265a794b7\n0e9de3f8734138c6351ac5c54901f83245a247817d68090999c10ad83e794d64\n9cf32e12054761bcf8ae97d86f4069aaaab8138ad3994be4aed4f16cb4d25137\n620126eadfd6ad8282a965848e1d9ee624672864f01b87cedd40ee5b71001f58\n65535124cd4e359d6091ccf487e7c2282daaf3be14765a41ad3618b1e01febec\nab75d4bfd9b9a9d4c706912c92fa53cb5c1bf32b6aa437e214fd08882024c9a1\n04ab47eb0dac68d080e9e9ab4749b1a5a74064f30c75b464df90d4349017440e\nf142ea4e9915afeaf32c532f24ad68d0636f40ca3ba544ab124cca2627800974\nb80a990c2e0e757d94e99770431e5afdd3166cfae6801f572aa2058d49d5e35b\nb4a658ebd651559d9ce6e83eca2403713e4817840f17bf8cddeca2b7127c3e00\naffe2926eec9cf9ee3430da61485a6f3ac4a5290328d3883e290bddbebdc9f08\n6940b7d9bbada853b9afbc5dd7fb8cf03a74078da1bd9829349674aaecd70ee6\nd9eb566bf17914673d0e1a08de068e3d6959976a7a4045a1d113523d6d3de723\n9a74d081264ec2633fb28db345407788e0c33116a02e3907ba86613d15b6cd18\ncfe718347da5796306d4ac055ee0b09b3416ca6c4cd92aa121e001261b27de37\n08724f02125e4398340104a371efa0114d44e6bbd785895258c3a953e6193c5c\n0d40ecc3db5278673ee61790d3baefd1d9464246d54b88c6c8a3afa7056fbd21\n2224d6115a673b11e31e7c94ebcd6e0bedc2acfea576044e9d4556625ed9e8f3\n0c8aacd52d937bb1a1c905eac5a917fb66cdae15d5f9bdbc16dcf09a68866583\n49f5244c53f805c6865df58fef03081277ab66722a487163a9560fb2a2580d4e\n097c5f1191cd3dcda898d72efb7107004019ce50e7959e8df14de414d967f1ce\ncc4e0dd86ec04bcbb98d8e6b84b3fd735bde57d5dc2dc27258ab5d1f8c0fb6be\na8808f19b8be0f7378e633a528cac17842b7fd2977364ceac61b99aa78193f31\n57d3b89608e48e68622ae9e87e821f5310c09f576c1797a6971c033e1bb17860\ne307be8531e04b4add8dfc9f87e366d17a82e3ff7d33993108e6ceb2f2517e44\nafe7e46aec7e86fb93df8a11c13aed6c169f30f0e72fd1cab8593f9bab1d01da\n957f1114a1176ee9025c61b91946df39aed15cb952f4f78691b12766a71a3da8\n1c48bf76576e94b314b56a0f7cfbf9c07c527b110ff3bc6c5beb0c4a0f0aedc1\n7af467aa305ed2f6f44ffadb99b7e5bb1ecaf4417a7bfa2b7c415dc2f2b98117\n9124825b4c9929404d045ad776e7ad938b7476e3539d1933c898cefb7674f0cd\n8cfb57d4f720ddd8415f7e78bf00b0e9c25f221c955595553eb0248ecdd1961d\ndc2436db4a3e821f730a9a56b4a8d7498b07e5f4ba8f370cd74d020af7b7efcb\nc29a1702a145c4c45ebd3dbc629b149813b41d8dc2146132845719d41c244c53\n6bc85b4e407e2a5e895661eedf5c6c0bcaa7a2a693d0d9e859cdad4c752b6696\nb4509726e2040397a93ee73386246216918f727b0208329e148f689a1551f88a\n012530040375616a9ade43f842df48626d5895097d847f6528a500d4c775d9d7\ne4b337a4cff0bf64b47f23df83e189610c62d3355024e8f8206ff9fcf96913bd\n3bbcda6f068c71095f8ac3c76a2a9c37ca6fe1dcb01db723729e4ac1f0f279a5\ne452412f9352318f80a780001873dbcae387ece0a5276db73e5f6b39aa8c9046\n1d380cc4f8fbad53e1e6e3dbdad7a5effe1611a1465edf8383ebbb156bf21fe0\n055d97fa1980d15b14a009413ffb8da4db4d8346f382497a19f6c1c2bef05bba\n3d2d6ee04a3b7bafa1a4e66691e580eba6f8dbac8312c8152ccce85226a272fe\n189f66c8cf431eae9ea3af795a70b1ecd73834a3208123860447497855b71359\nce662ef8a2ef2e8bfab320de2f50bc3e632edccaaa91585cf53a41717f514f49\n38feae4265728d1865975f4a98ea642412839af40834a4c51c1760a31d490c83\nf29dc13af10b67fd69669038bc1a32b54e641b68beebe567cdfd2a7e91297f80\nba13c99b64d29645a769b9672f24860510b3e43483e711053fb0aa79bc7d727a\nb51fcab5bde991b71888e7ed9ce043da81fd29aabaf3d5d4376abb4fbf3c360a\n2714f4b5522769f78b5ceb0554a749727bdcb583e3b0dd63e0a8806938c3be3e\nfcf66b2052d0b41327587291caa5d85e65618186507d0df8610e8577d1828f76\nf969f060f6290be91130d49794c6ac31e2d62e891de4c04748f2374a205d06ff\n2fd338d5f55175b0c0785779336ca30cd6d54ca9cab27490c1238cec17892f40\n4d5c7bfa43ccff0056dc5a5e2eaed0632e4824efc69321e11b9e2f73b0b819c0\n69a9a967e99d231ed29d400991c6f8eae096abfd966067f702e2aefa6c95c6d0\n95dc957629146b17c34c703ab264bdf15f08b1a4122bbac280a90de7ff1a9166\n1dd8eace2c50deaa0f727ff18a863ce76dbdbc88d3a01cde8ac047a91923014e\n840d0af91b95f33decec2768649ee98d8fa4f323d6ebdce4d488c2b4706caf18\n6dc2c2b0311f2a253ee39cecbee25ab5f6e0df32b757a5328fd0918925266e9a\n79d1e3dae3c4b9e211a0f68330d43bd6cde537b2b88c0ff6e5ba7714acd196de\nff206dbeb1d313be2b4f0a2f996e2342a902f12a4a19e767479b4de74438d3aa\n70a779925034a8b00ae004803a13f6ff0465d07d18b34e9d578377b8d765d775\nb5dcf0f39a285e961e0390dd95c392d085089bc973c7b255b9b73ae162147683\nec183bf55f592c77cb84a398243d0424c6709073b632864aeb96cfb2f295b2bf\n4cc5b0e5102d130e3cdc4a047e046a9b0883c30e5c8e0f086942c43af477097a\nb7bfe7f6224cb1ea917ceb928ef8395b41a546d5306ddf2565e513d4573b1fe8\nba9daf3f2254b83208016f5895549bb2dec8c7694fcdf104efd3cdc00c42a7f7\ndc2bbf0914fb34d5c405cb97d6e5a8d3ab1a20f0e4c1c3bb9319e77bc5e38cac\ndd1dbddc39a284e86f2e2cd05809cf59ac5e699d452129dfea3382c71ee85048\nfecf6bdd9302451aba74b621c42cce93396deb139ddc9ae3a75295a8bccf8c96\n691578cd3de5575826ffba1896817379723f1710dafea6e46ecb0ef0f23869bf\n4020a9e81a4e763e06aa889d4bb42c9eb053c6bf5dc9d5b090d0419a3fbf1a3c\n815d2cf5881ca98a747cbe3a31c67bca36e454f089ad395a62c9839af8f1f057\n0e6012beaf04f4f00a7ade236a108a9ae428a4c772816eae9d7c1abab322d05a\na9e2476380f524c1f608854bcccfe0f6eec631b02667582ccc3e236f470bd042\ne1199bd62db38b7358016a204d117137856e913ddd0e477d4910833321e71c2b\n60ccd162cb0452c0992b3165cb0d7d41457591cd44b531d9a16756cfabf8cd3f\n66d52f56d4c625e4b8395c1340ad937e0bad5d080b4d5c2a4fc40375bd73758f\n41c160f11792f2195f79aa88839ff56a1f910f956c1cea1ef066ca1eced608ed\n162c030ea290ed422af8f21ec8f984a30bca49f3f9e5ee165da33b506a8bcf28\n31df33356d267a018e1666b4f46789596426824349db59a162d7b6a54d8d74f1\ncff1d1b581fa13328d18e01e9f214d8f617c354ce1500218c7fcdaec7d8894a0\n4945284ed7fc30ac69910627f91c427b6395934ef0d60885842c3bed90ba5496\n2822314e6c99efb623be210cde5181550d722f2d8a7b697358cdc8677069f174\nabba298d6099a5bea8edda5c410f90ac0c8534a2621cb646923afde8cae980cf\n46268b7c6d9541fd578a333b730ea29b87fe4b9da8911fddcaacac463d6ca320\n1e561d8ac75f89e0a14e1277ffac07527f9a3aeae0b8f54b5edcaf4bd06d1a99\ncde92c440782fe1ed9689e6fbf50e5483392cfbbeaa2658b39b4149b8c9fd892\n7e37718c2bf0bee8b6cc700b30038e35c94594b6bd061368e71595160d772ed9\n00291daae9dbb36b07ffd612990f94a0e3885d874aa3c72d83dd326ffd7508ec\n0e5ec3e0f4d12a0230e84a6c43579b1733f184272ed78b85825e12a82e7a0640\nd8c0639bf87a5cf2ae8872fa37eb71a23a474b1265348856a8cd55fc7f69b944\n596bf05fd12b69c3cea1ff57371c5ebf08ee80fffd19b2913732d3ad0c0653a4\n39355776c3724c8c3e0eae2071692a01e992c0fa93fd3d7f636d14f100d33584\nca0ae5349027cb2bc9e414d553e943c6e18164bca27146dec431e0b366ece204\nc46686b7eb3668ed6bac7b232bde2ac7f27374f63098bf32a468d6a74d41c690\na589dde0d2c243aabc0f147749abaf3ef139104b7455d39414f9f5f120440b5d\n2153bffbdb5a2e4fecef35604baf41e7f73faf603309e04a5e305418b33edbb3\nd05cf06d041f610555a4249c023b81a8272145872db8e81a11244b10212763f4\n1a92e9ebdef4581548252258e03da4204d91da7e4a1b4e48d95a2e393a2eca8a\n252e5fcafe9966ea4c64408799830d4449d5838c944f20de40669eb0c4d430ac\na66e8a260c1369431fd90d88e996e3f3fc1911cda1b3366476d75f707cb5e89b\n41773862a56f2066ec7153c07350d8e579326af5d3730faefeff93b742341ffb\nc7c4c3e4225b3b27315ba72199cbc52b89186626df8c64b2e62c44b1e023f3c2\nf0c79a4a2680c56e1afda2336193b9550a1b8f8de7cf5fa8ba229a4b6db64d40\n7bd6e59f3b4a06b4f3166b2f8aecd1cf811ff8dc1888f003d48866326de34886\n59a9eb9f2fc3f3b34fdb156088845ae0f284a0baabcbfd83fdafa8bc5ee2a54c\n25de8c98ef5712fa11d3e6dd9ea89e88565e137450e663ac02ad570e1fa16623\na37b8aeaaa9cf754ba2140fdd8b00d5acd5bf10c9fa3af4f2f1f86f7410d17ec\n608ff4f24dd152d476c6a2deef3854ce4853a6ad252601aef63c34430d37edd6\n37fe838fd70b6392815e4c4eb2489164ef45bfc00ed4810eeca455aa73f58da9\n63ea019674c0f63a996001cc9429c81dbd682e14bd5cdcfba7b00a94713e944b\n13d4530117005f38ce34f785dda8a12519ba08cfb85010672ee7ffc6693f0975\nbb3c784be90aa02c6d2e42046d3d5266fb1af44f96e18156bc0f383eab102bda\nb17e590cdfaeac3efe588b2320583def9448a9edb9966cc53e1eb81d2978e2e4\n07d443e66ad6bce411857f593045fdc59aa6bcb13eef0a726f69c63302527b79\neb2ccf9f7869b42d3913f7e85ef793483f2b8a1fa457f5436dd52543ab01187b\nba0bd98a82b9bca00f6fcd7ea4b8c42fbb281fc9f5e45c85655bfa3389002d22\n08a351b81f53ba3a328007ceb51b42ab104a15ad389074518e9b2a24361d466e\n0ceee8e66a2b7bdf1e0fcf1d67e3e06c76e3546c33e9b3d3266791a3c5d1c1bb\n0ecb2eb0ff00b5c168e88eef521740508aa19373f1e64a99d2097c52888e820b\n7665f808ed40e446164bbac844f2903ef6d550b48fb2ff1e69a65c0c0fe98034\n391d3edee4d5395e6d35906ef44793a79fa76e127d18e8093e3e7074c23ad7d8\n2ddba94b8a22003c3c8270e8f7c41ad8961be79d71842b839c51905cb466f653\n03949a4e063190ef2cf33b555034d815ae65d6a43563d3ceec6c199435d726f2\n80022e0df342bcb72bde7d08444b7f93559af65639687e6df61f2d3745804272\ne4384ef82bdf646c0a2d59773dcefeb06cfa957e3fcf9b962141bd30bdcd3883\n98c07c4c3496e2dc0e447fce1025aabc12542f0fd7aabfc7b5ccdbb96ee4000d\n047c0ea9da3462ec7df9c5d6018e9b8863ad93236658fa01f6351d67ba093d6c\n680607a9a23860355c0e827b86d8ec09d4b5f9c186f2e260952893b9fbfd1b70\n6b1e830bac2d50cd2fa8f5a35d95c25b8ee851e16c475e59caa186be451cfce2\n383045a870a3ea186d2c8035fd3d83ccfc82662bc590a7b64d200d75aedf6a75\nd9376a48b61aa327bfa53a72ee558d42fa5d4e43fb43dc8a5768358d57c1dece\n01edc8bcb96f6d4455f40058e33801b2467c666bae34dc478c29e8c3f2937789\n2573199c9b01c8c62ba65e017b1ab3e49dd915bbfbe7ce979af5243979b62d40\nb762cd985a39a2ee6314537e15ea205a3593ed162209c7fed23c79b35476c885\nbc3bb3e9302bf4293a12eae9d12ca2446d84660aa6e733e22cb88ab24a269df3\nb8bb11c63e733f63c51f31398918554c875b5f3add9ac6e40b85a9837c6f2bde\n8cc13ece6a688e8a602de0104093897bbec1cea77f7b7e0e3aba82e57cc54757\n58ed49d50cd7ea94d8c628c80c1a6025415bc83c730a56338421288a9aa2de59\nb96149d7ca409e2a4fcf262ace3addc52cda081712bd1754c281f5e007cd8745\nfc1e2c784734adf8e931923dbed3844cb44a3837917b3e1868a28765ca1fa61a\n20d3d0c25bc303332979c82732c9f637133d8a9c178d81352b0342596cb7e99c\n89fc012a392ba18a62b925524aad451b4a5c2b0b48b84eacb2e896daa8aa90b5\nfce6d47d574ae523e7bf269a74d47f9c1d38a9d121a3765ab70953ea39dc4114\n58f2e157d54fa551b598b7d2b14f8fe49c58fad988c1500cea4002f8f44e337d\n8913d3486734437fa1a2dc947fa0a46fa904d5daf848c25ae65d80ece7b58e0f\ncad4125470bdb4f9973ba7a1f750528efe9f1d47fa1c3fb1eaf6d58f0250aae3\nebf2ed89d9eb027011260ba94726a74b86b66ec18ed5726a31265ad078d38b38\n6d95e85fc321bba9e0709b5b6228ba2da7aa56d2bad6532bae9d2fb584da5d64\n97575554668b2db7222b4df1396934b2939c45adabdd1f0fd4677b0b03299988\n56e3f1f55e2d0c6c9cba55df7b9dcbe3204e22039853290245abf937af9ba7ac\n3fb8967d62477214488bc48b49bb2c2ba2f2763e38deb76db5fb45382d7b81cf\n63a6e4fcd5266528a7007bd926ef61c7c2bcfea3cda6490e568f894a2da0fa3f\n81b3be299c1753af2dbc05ebb37363d5e2e3aa2a8ef4149d74fc6a0a02783f97\n02acb454a92cbc24e90665ab11ee26d7c6b6cfa4da91733288e679cf77f786db\n90423894c53f30302f0bcbdf276e153e3fdd647b183d07257a9d658c098f227e\nc029a286b9c610e3a17347e4c2691d3ac63118732bf849ea12e0ebb751592067\n5a4ad429b21bb909dff80a32fb71547a06c2f5cda8c9f57648acc2079db01f90\nab1f9c7f89abd2f4db5eb088999b34aee7d398cd301ca85bb2b57bd43bfa73f5\n9d0d7fd84932dd320a173808251be340de901bb5b97e513dcfd022a255acb57c\nc4f2bce71f269c916328493e24c43268f97577fc3f31f768b2372376275a3fac\n9b05b27663f1e9f6fe1617a137021a1ef6f7859213c6cb4da876a92d247939c2\neb5caba308b4200b94295603842ac9c68adc845a8fd3590d2555ee4092b7238d\n82865d973336c9fe4b59b43caffa93da7f400806c5caaa0a8636deed8bf36059\nf80c195626274b20051cf969966043554cf34608d4a4b6f73e6038766ab3f6bd\n3eca4b172a12c5e59a1ec954ac7ea0e59643ee1b2b24c306dd053e3784f01a87\nbb964366bdc1ba9d674a64d6bd647aa887d72ed953ad458b32e3b2e0dbc4fcc4\n7c095766e0d6b06b247ed15c5279a27812bd1c94f0751ca406ab9c91f5cf9cfa\n376cc760642b8f08ddbc9cabcf75b0187de8701dae1a3493232e4c71faf48476\n3fef879229d952f95c0d919db0d62f959f7385101dd01f5efdf6eff72e20a5fa\nc900600871c73d4684361357846f5277392824f48e7cceaca93caed06ce24c16\n3f733c129afd405b1ef786a0682c82333c8b0dd477e0d0b223ee2bda19d576e0\n194c1e631d9dbf67bd9966d74e41884f42ba97d73b93e2825ebf22b2884f50c8\n921c2e4c6b9186a446b412ae0e1ff8035d145bec0b370b55537c964ea7531a12\nf0df2cb4541892bb39278dd9bde4fd241db9dbd70af58d11685203c9ab19e836\n9da185f88c5cbc5d4a03f53044ee0bc6d6b6f7766f98e70439f5f7fd896f4956\n12a8eee64eb978a9c384fdfda418007c71f498b0cee59e3376e4cdac6c2cbc79\n5d7951d9b09c60423e66f2c37be050f7ac9ba5257fb948e3549d07e956f36332\n02e990aa2271d2f28a77fd0f141df2cbcc4f64a4a2f5ccc99878b853282a47ba\n690056d92e77d30525eeffbfd98f36008cec7db26fe978a6e251e6214a8bdd05\n104b0e7000d83a1068eb308847033a8de238eb43c496d15bdb6663ab3c4de5ed\nc2a576fcaa66b92e696a31c7fdf1a322f1f6b9edc6239cffd59fee7bd20904f7\n646c814201da9561511124da9ab8de9efc9cf2a83ac73c742d3865ebfe976c2c\n64f405c8e8ec6303b23f5c403ac13e70bb99a879a22fbf6e95a3941e7717d942\nf77474d496a18f9ddfd441e04cd7b3afcd5e1872ebd167558c6708c9ba3b0f7b\ne4c522b873e9f6631756e2d44d1a3e731c84e841e890a25d2186052129bf0706\ncf57a821c81c3e7e860d4fd65d85b57e49b39ac863f52da5509c2faf29705b90\nc81e44d9bb7b704ce4f4ebd7eef10f657f879b100ea3916c2b23449cc029e2f7\n0a9aa98bb63236c5b0dda14eb6d6c979ac4c2c892b6643a8d2680b1f7b1a134d\n7a9d555d5592853c39f846808c1bb1ecbb0b57e4f6e7e0a0943958bc293f723a\nddb2ee750ce6b49ed499d52f244feb0b0a696cc3fee8b50e2f7105bcdebf4066\n680194cc8c898d73149e745d86b5851e39f524ff3edcda297b4cd0756d8e5d45\n616c09335b3228f963a04f7cb28eaa2bb7632762891fc1fbb316948782a2aa54\n934f9120236ceac3738bd35e1b53d6ce9e1b4896b9d867ef0422d01707cd5da1\ndd21748e5c6ee359fd390e617bcf3832410ca1516691b39377ab52f9aec5706f\n84f565298bb05d589ec61ff6529a72945a98d3c734a048d28e73e843c2b57da7\nc1fbfbe9896144c56c9bef8e731eba495304223daab2a1f2d1ac63afa0d4ce8e\n448a5e4b74996896169081057583b159ebe6d532500ff72a4cbe387b1cd298c8\ne38934eebfb16e18a6a6997251bd0bf65e2e87a784e39ff47d1d56d128c27892\n95804979a0bae4e814d6fac8e6703637210e49198ae4dcf5d2ffef0b36465d86\na74c41e15e059eafd88500729de54def349c2ece3eb49e1c38a790a212685449\n1aa624445a3eb7da8d2dd159aa31c38c86760810d7feb455f53cb99a3359a861\n4416c6023515e1567af64d2032105cff128f0358c5c76ca88a3aecf85be9594f\nb07c333ae7f0fc811c82f41d81401a0e4bb8adaa66f9d7d346e209bf9b674b7e\n6adc0efbde47bb27a4a105f32ca9ed41feb5452f573b117987513af082f7e586\n8a0600076c7c0bce493f8007ee14d864b0af615d265449f99ea064021c3718b7\nc54f8667804791b1db160632837e029bcf0d2a7f16ea2a19a9bc96139d1f3093\ne11872f76c67ae13c27d950f97929dd0e43db9ee71f287885c1684c2c66b2a72\nbc2050ed428a6e2c3e88e50a861294aae4207447d0d2f26c5a8e00f61506c18f\nc8d5257fecf5a80180edb3601eeadc22f9c8187734e405e488283f853cc34c59\n9b3b66d4148c947dacf6918fc51809031a18d11291d149f60ef3b69f33c4642f\nab7b1785c1b58c7dba7a30d7fb7d74771d02674ae4746fd9d24356a3002dc4f8\nd4c21ab930dbf8d013211f71cd1909f3d946dc6afc29e20a2499081519e7b0d6\n868b23cf92eecd8f0227708cab0ef57c93e51d926aa5152bf99d3d5504acfd2a\n555a0ed75cccbc02055bae95e23321a705dbff2bda4dd9a5f202dcaa77418c49\n987b4f390fa1f792b8b5f82324ecc32e8bb8ff8d8daa724d9a282ba14188988c\nca7807703f0237504f69e532c629f339a9a3bcd1233732787ddd8d3f9fdd5223\nd4fa965c6c61737dbb65dd64d0ce08e9341538a36ad6fdabbf427110ed4b265f\n2df004c761775d7fab859fd654afd9d9f3949d9d2db89de013f6806cd72cdcf0\n4a914c052ffd6136bbdbfae56ef8e003e2a22173b22c6ee8455e1322f2f1f20d\nb472d2d4565206e423ca348e8238df937cbd7d72be1fdaa657540989cd17ad6c\n3dbcbe6f1134aef232f541ddba3f32470ce4fd14124b64f9de0a423cc7d3d196\n1f1df60bc67d40f89857497ae1bc0f7f8d8f9096f55102bd904e77b62ced8049\n3b83f70242887d18c511bb3485c458b40e0b424674036f2054565529a1ac75b1\n595f375f9af36c700a0c4239973818c14f1e0965681b0368a1d26d15d62fdf31\nf4fd9ff37ff2141b4addede8bf86ebe020d753da435674f740b68ec15ea8a331\ndb959a0ac36470142f9e0541ccd3ff9bd8f1c5b6dc8cc0aab9e84bd0af7506e8\naf351f116c2727bdf45a39a2ca992b520627bed59bdf11f01dcefe6eeb93b20b\n7ea5742ec8061eccdc7deb25d21d919e11dc33829ebf9aa6aac2021c466e244d\n118f9f26c14989ddb5aa47a3f56be8f629f7ef4a7ed2452b6d932d5cc8118c12\n491836f81863f50352fd73022a88a230704e488345972a49c0c4c04f819da7a1\n23c66c16eb0f81f3dfacd154dbd751076d7e3c43d951a3a536e59ab9e281faa7\n830ff5eaf4849bde5d6366fbd79d1552b725dac4f5d7d2f8a2696edfc057cd1a\n77a30bbea4931c629919fcb46255597c80bedad691d08c4536a812433415356b\n10641f78bac2dd37a5612e5b80088388503b2f6d1407e702bbd3c47f73f712e9\nfa534207300c8be9bdb13bf293a611303221742dd687a799c74caa0ebbde839a\n0641b244cbbf6d357902d4b035904d5a2f61e4e099070e8888b8fe45aae49952\nb836d867d9d3c0f81ebfa4603a3fb053572c957cbb30f12aa07e45eaf86bbf59\nf08ee99993ab54a3221361d07b85c19ee37523fc4c8f9233bf1c7b4d0f5dbc82\n35e64c99154275ef904d3aa13ca33c7d92a5e091ade464562f2610b19f803f94\n37022dcb7e952c8ef300925dc7af99859de3fbca0b27b4c06db902bdeab2e3e7\na1f1b987d54a51749a3b362ccc267918c044e2c254a03581bab674cba4b88be5\n231bd8ea025ba46b79fb7ba769ce6ebf37cb27ff24659c485e84f0a29c037b47\n5e4bc5eb7686d709ed2ebbb4f608c0a25331bfac8283fe57daa3370ec23a0bac\n7dcfeca8a14f7cf6a84a95ec58273d9cdad6e8a548d6ea7696cddaf2f02a2aba\na57ae310ca5191ecc14a567d35ff5c0f3213b2ce997606a59c70ede173a80935\n83a0742144819859233915c31f64f11e35e165f4c7179a8ee1ea79ec7736dd45\nd05cdfd3a2880e08a8ec81798bb38144534dad2fca07eac523d7c291c58842c8\n459ec9b1536fa6690e777dee467a23778dc575706924effe40269a5e38109594\n4676393c49d315851dfa2c0f445c0971f4101135c46d7d44d4c64f0f2242c5bd\n61a070bf3105f0884e07dcb5000ac86b51c3eed287b2d9d0307b2aa3ec2f528b\n59b9f0e02ed6ca32f7cfc76333d040a643fa71caf2a5dd52091c483f8e136abd\na46de8d058a81dea5bed08e17e3953cb75bfaa003e214b0c666bbde9c19fc81f\n3405bafbab7f655b8a419baddbd6a22f06d9dab0d3c2454ea5e1b3c43ea0a3df\n981fca7a92d23c3740cb046840febdf55264e4409a85bb2dc58942cfb9309019\n0c47485d938cfb86ade5feae41074f480480eb6782c322e7eda51ac0aaa81c7b\nb70fc4451f36964b53728d67ee79b0115a372201228435419f9d67113dd548c4\n3e5479916516f075311c07c376ddf2fc920f42c35cac12cbaa6453a7065f781f\n232f6796947b7b967bf5a8761679908721e8a8c15debc944b1f91f16de60a43b\n4d7d8b0773bffd161e6ba68b6fab57740dc192cbca3e85ff5dad2a581fc44ca9\n2814b1877a58f06972d7b0579ea38c1b5e9c1e767fec1e07448c52cc62ce712e\na69e7769db41f5b80e03ffedd415d978db6ba09a9fc424b5d00e8146faa8fd80\n7455448400137916238301616d50a1aa6457aa5ceca2e2b1b5ed811122139d68\n85ade3e9da58f00e442058809307e6a4247804bb13f87a5b47332d08509a9dd9\n0f1a5508bf16a6e76af5ef15d215ea6ed2b17adcf76c2b005f48f83a5b78a64e\nb2ff0ef81530707490b393715950d17835be5f6a5b5791ed76e8d84b1f8c57f3\n885814c5debf2708a00093197e105097ce61391874f121a5ca3d6f3bec647368\n04542ff4bb78c8a28cb211da00c70f91e60832625d01267aed217b69051f9163\n1c1fffde1891d6ee999aa7f5d625b23a082f4946ce2b8d0e619269ff5dd2e842\nede7482334bf59506b9d8db9ccf775219a7a3ee9cf9ed4357deb5a05199d4ee7\ncb5d16b8e1349732d76ed5f292708481cb3c8bc3088ef01716627e1368dd6191\nf1fe834c2f29b711bdc8bb7d992085a61fc48ac7426f73c9588d28757871378e\nf124a7373b458e71bb1f8deabc65eb25ec69dfa9c7589ae42844ade3bed6a6f0\n539fcb524fac13f988151e170db09b97354e48efbb4d75c3c501cc1dbc7f1247\n5c6bfff259ed7280e8ca3ed071f310696f1918f921fd2a4f541c8afd45c317a8\n53e439e13373750b2d969f67d6c72752cd9ab249f01b6336143f7d459a6ae648\nab49942095e170584ac7c711240da3f3d43622c331165d3021219a6a88b9c6b7\n280a1a27bb2eb0daf2d5600f177ddbe533dc87a5690fae942d7d3ec7b197e868\nd4e33fdf8d938f089fe27673ceec8154f07e21057a150e5789ed902a572a58e7\n1fac5d0431055dbc8bf8e9ea033516568867613f75fbf0e4f970ca3e2b866a33\n10eb78219174a4852513d9912faafdb51019148b04779cff1cf009836fda0809\n0f80d57ebdc87f2e4dbbee5b953286cf545fe28ab123754fc811f6963e183366\n47d8fe237cfedd0cd4e16b3df3f62d121b3d1f2c823119c8d0d0bc645a03afc1\nef43faf30b15d44ade6724ab412c144f996c38dfa9b13d75739d7c26072cca5c\n092b88605e707e6e73345318aae8157b12030b21e794ff991ce4d6e31a49398f\n80b087f66524b2a030069ac7fc57c17c639f04840c57151d12e9cbe612460951\n71f11959cf33f3256f0e2ed817ccc804c619f1bffbc93c4cd0b9c6c523edcc23\nadded15d4a724d7090b5c0e16cd22b0606e9d2ff335be6ecccb7067d5b9a6fbb\n9dd67ff08b2a855c195ae5ae841b55a70870ccf1d34ec15581b9d2549fee9f78\nf7517793947cb1418c3895b304aa6945cf80465488a760702b8e790cd02bbbef\neecc7ea3f876147825352de5b16c604feb1f743d6cc53e7e02d777e265cd087a\n365c8ba9a367075348aac23c14f1e493bc8ea48044822207282adc0060f76d4f\n01901e0d240db3b1480d937b0e41523f5e0b8241e3331ddf6c9996aaa998dd5e\n0d04d00b98c7974adaf5322a8943fd32dd228780730755ca54b136de824c271f\n747b6469950e2ca731fc19736af154951596b11fadcaba5fadb9feb62ac4bcc9\nbaa5a366d6b30a44dd635ef57a30433adc6c2e089ae32150fc64dc4a085c970c\n3af28d0075acbc0851382d44a7c4cefb2ef09273e140a79eef335cf48e7323a1\n6bc80586841f04c0ecd93ca1c57cc321788b866a8fbcbfcf2dd9d60c2711f78a\nf72f418bf9d48ba1b2545521d86b2d34d2a2941c7ccc81380036076d1ccfe14e\n02182406ba8d83611f1e6a38f9d027182926da8e42f615dadcfe181f2cba9247\nf6ea9d21bb94797d8c90d7c04acbb182bfb8e2af1d3a3311b67f521a13a5a8a1\ndc788ea3a3a6ee8a2f562b10d41fa91b731d1e454b1d27e23b1b7b2b5c1286c0\nfca52c1cc13f69d8789140604b1dbedf37a8d47f4d543bcd0fe2bc425c727424\n149b99202e7a30af2a88259f860d91d4d9041f2c2be22ceaf3f2dddc0c8ac498\nc3dbabc55cc3f559f0f7f3cae9438053d01cfc63277c79b9d2afcf228c368a0c\nae510a18f0c1a872f25dc287c70bb7ed5f544644fc6252ab79a653093b5b2f1d\n94e96a67b473ce13dc18090f094299deb468afd14fff7be8f96d2e92899981ec\na70f0a84f29b97f7a08872413c891ac0ba4d35cf453781331ab7f819bfd303b2\n3c73185e14f2bebb526e55a152fb2d91eb4b2cffcd7fc52680b70d4edfd4daa1\nebe3959c121110e598f832201426b3949b6149b92e4bf49bcfda3d73cddc3e02\ne245b55b8955bdc55594015a4a8b5a29f1313dd7e469e90e42ef7e2ebc566bbe\nb571678760d8729df0a7d9d5bae270a433b57caa3fb817e64ed8000bcc01d985\n9a80460bf93703cba36ad8f5792b7550c0d9367670490464e20448d74abd5b26\n4a0f408344afc4dd9421b18e30cc55fac8549c451474e76956efaa1b1d7b210a\na84b46349138f053be0be0ed0e177b9cd3ee148b0d282f4198aabc1f6dea957d\n5b59f50ee1873664d1a5472b2d45a9da0e225763b860c69c3333ea78b235538f\n4c68e42e5dfd7f9d900c1122911b90786fde9b8ab63373751c45de6c5b2f614a\n0bd867a639d4707458aa59d5891cf15fd501342c5939ffbddd994e36b3cf2218\ne371aa4266ef37e6de5253fab7792704f8644135dedca11e041161e0d2112a19\nbe3db5f1b499a4f1855ba568650b57fd888782a6f1a120a01e16e9955b1d0be2\n5d345ff5dd2da520456fbc8c511ed690d48684197e1a057bbf5ec52a5425cafb\n987e2b31672554ef7e53d06c069524ed33f5f516a0fd970fb797faff55420781\n4f948d4fb3da933f8d1c998c462f63413332c7e9eb3a43dc7ccb12507e43c7c3\n30311ac2594a6af050ce883da53850884b37517eba81ae07f332cc204f0b9c89\n942960340c3a9c51e0a60bed43f492d866a6206a930118bf6b9646945cd45430\n21949c7b0a365073bf8389f3724aa6be372aaee7826bd8d4b72a310f9127bf51\naec07c86fe97da8d45431d88ec5c34c431af96167433afc7315737423d513ebf\nd31892e017ba6c62f44980dd5b1267fcbf313848fd2fef6000470812c5f25b52\n26abe66114760cbf45fd163736a4ce450d521e60358b3460f594d38712db6a39\n41def38f42a02daa3246eac7c793ff5b8a8ca36131590763da4b5d6a4159f44f\ndb2e2cfc616e54f172a2660d807f5dfef515465333e9c5b7e6fbf0814972022d\nda4fd512ea824ca9462a5b0c203253028b70db3db2501454cfc32b731b727ef1\n6ef419733de2289e2073eb820b935011afe0c277db58dd9769d035b90adf746d\ndd95ce373ae09a2f7814eea0b28b32b6bf0479463debc2311557db80f75a1220\n2d41a75c8a7929a39137e0c0957c91992f040ed1ccd5554a0fd5c7586e8d1e3b\na90f6c0c7ddf9415f95ff36d3926795b10f30a3ff3c55e878f547d5d6f4a11a0\nf485dadddf6a411ebbf4f6fbf545c5c7a4717a04d4122d004c8c2f54738c99d4\n64796882e0d6a49ad4e10c4fdfcdeec39be8e90dd6e54664d1622c5713395793\n11c8f9b70c302cdd98658838714a9d3cb6765b2252af9405083ded61d9b88d3f\n100b6beaeaeda8ecb9f2832446dd03270e007f2270458adebb0a55597ac5bab8\n3014c8e8f4455a36db7201756caf0b086ad93af5213b23776b4f39982e70c4ce\n8678f7eb05f2d27d9c6d229dcb2086f535c1597ea315a7594f8d22f5c3c28fea\n5f4b100776ad467b447913d708b418895bc0e46461ec7edac19ad6e29609cad5\n9493fd7b966677d3326d6bdea60c063a36b40baff0772ed66e7f5a494d21a03e\n644926fa5976b8fc520aac97945987209b2d25de759eafd679b899aecd219a81\nfe9a72f59b5ed4af891d255d018db8dfc201898a7d9698ad535450bcdc001e2d\nff8ee7d78a25a4d7eec4aba0b528b58028753e224b759b84d6dfcc77a442cde2\na4ee3e074f1c787eda7e340f1562853ab553fd911bfcc7596a230f423dbfde78\n679c997abfdbba02a260af430847a1b6b4bf779caf51ad481782a1e1c8d6d40a\n27c07657f1e712f6619c6422b69b98b86b48aba79ab02fa79d27867c67bce6f3\nbd0fa82aa33ed5cd64c8f6c9d21759776c9c31f03657bcbdf3c02afadc32380c\nb2c8ecfebbcd0db05416381cc140edd91fe6b58280f74b5949899be9fad9c733\n39ca20b5ab0ede6ec6dac9fc28f45041e8b66876b9246d5b83b0144795766eef\n9cbf5e63d7dcd4100c05578abd4552e35d755bb76a7537e7ea239eb0c4d968af\nce017ee70d783a78997d55634f6b62d4713a1005b36efd4572e92ff74f1a2873\nb45afc621a34e2302ab694bf2d536028ee1e20c61779f57c9a0d31eb51bf9f15\n38b609f69b9dbd7df8800a043db7ad35f4ac9ad6617a8391c15af4c4164bf560\ne880502905d4d7445a364f3b628cda42e23b556ee923a16230d933709f3ea7af\n5dd875a9c0751b06dd0b2e5a06407d43b029c9eec3f42077adc7f1fd09a403d5\nf1d97798f066b8185f7c31a9f2134e38e439165bfb6dd9f1270d8b226829e26d\n6448228ec6dcb78732b2869f7eda0fa73a3a80416a93cce6bbff3e968099a1d3\n53bd84c074135976ee7f750d481451a850ff7719c464752fbeef86781c5d9bbf\n2df7c8cfee893e4b539da6948480c4061ee64b6c823634d308d47722ad0af8fc\n2982754852475d18dd4eb040802677bbafe7a86a746d8f83a5a9b80deeda84f7\nf147520d7e56850bcfd739f5a70a1081dda998867b8633b1c2795c8903304922\n9e95fdb11d9c01f5578a0f2fe4bd1b40d51e0dc545d278cd15545e2c12c11b77\n1255a75ec5dfcf0f16c0e00100bede9d706ca7fed3615c513c2fe5efb12ee2b5\n768c93277398d76803c93ba46644b44b9580fdeeda4c35a02b44ee59cc182e26\na24d17b0059fcea9c19ee14d056cecd620db3df7a679cf5f04a1a09e7f501d81\n92e6910e36b113efe84d7e5417d3e747d469df9290cc5420fa48ca5d201476bb\nad476ebbfb4899055ac6ad3531fd8e0ca2ac86c182228abef4000bdaea1cb2d7\n5ff1ba4eb82d99364e4d35b65da89a126ee0f8b4d6f916db01649db7a86ba20a\n07196d8a17da625305565b4b1627be291170e5f51ec9c24fe7b5a1570ee772e0\n68a2108f420ac9f9d14f5c5e8fcf3f3d80a99752073a582b81ab15e281519437\n0b0a2d8591caff39e8a58870018262b676df9a21a27e4508723e6aa7a5ffd287\nd55beff3527f8322bf0717f2e4fca1f43df8ecdb137bd4e84d034340e565b323\nf54a1cf4f80806f9f190a19c4c5a2a3cf4ddc3ed62a46d39d017ad85bc9fe64b\nae59012fa9a24f96b0b4ff883d28779c0e96289b9b6f99848d98f81798edcd21\n8997ac4876b99a1ce2253e5f60c8f28295326d97f9da65cb5e92d1ad4c77676c\n03bd84d9dd7dcb03f84ecb042401f93ef7ea8fcfefc2148e73dcd868aa5f7cf1\na377655a218cf35520d993e42595c9c0bf44da64397567d46b2eef3f8ad2b86b\n62f3fabe414c6511ad191a5e4b1d75f1a8d132dc9a5f2907d731d548645eb13f\n32ae08a63e1673fe282b803f3ea7e62e3ae031d66610225fc9c48ec2325f3682\n4bd852ec0350b3de317915339d4deddef3292dbaccbccf80323bbad05e9073e6\nbb726ed5f6382ae055b3b7c36f3945bf16df7e0b69b632e01d247a610e9905e8\nd3fe156d3170e66cbe452357ed9bb0c67f8fc16d2aa46d7c7bd4c2b7ae4221a2\n74e1b1f273f4325f58cbd3c4acee20531ffffb3faee6711f36e6e431586806b5\n93ac400be336898f55098396614eb5e7f9e0a2eb1fe50b939a0c9ba03dfa6eea\nf5e97afad54c54cf65f991a7ac5af1486fdc8b1c2385ed93d2d96f8746eedabc\n3ef56bece70e3d3a7e2ed0abec5cff9aba226cc4721ca10be199ea5beb9cbe93\n3391386152b0989784e0d826189c8076512520b2fc727a5b0c9b42fc8ba16902\n71628769d9e9b67a489beafab6245e32d3dbaf1d6432af5befd7c5479ac00ce6\naedad2cf03d9f26947b259e959b2cbadc29ba4e0a8f4c47edec7e0d66a77a95b\n6d80d6803f47d8d9da259a674e31427911e4b845293847566db28bda0fb41510\n36d710e26e6fda96d1696090365f39c8e20babf470b800949358869ee2c6a07f\n803566ba9d96190169e4538538ee5b51718cf954b01677827a3763d234271582\n967c4acba9f043eb7b90940e61d4e6258465b33b1c6e73f4e308ef5f2fb4bf41\n55ff011fa211cede75d05aa7e0f663ddaa11b6b3cbd4aca564448f141d5aa0e7\ndc01d85123905ee7edaee15586729c78ba80cbf3d4cc29e7c4721768d91f74b0\n78dc40eedfc6665b80dabce5a294589d38efc0ad1c81d7b58fa5eb317fd597b8\n8e97724b4458ea93d74d7b79a7a5b1b2074b7d943501b10b8c3657627fa0b94b\nbe45c51414ad28114b9c6626887ad30adf05ea3df88e2905231b56e4a14775fd\n6653efe98275478150d5a08d18625a6b291fc6f5116c63a8534bdc15a4d5e225\n8d55962d7a61e96c18cf89605e2379dfaef596f849d8ab7079a4deba7f22d602\nf2ef87e5a2a1d4b0b01690b7717909ce8b19a54ccf71ec7bdc911fb8c3f30788\na610f04b33aefe91eb623888dca11cca6cba72dcc43321c2bbb6a5f658098a40\nb9d962c6854b8c78b9c06cd3294f9981096f1e526bb86cfa811bac9f890072cf\n848ddd43c8ab9188c36b4fd5b6360b43399f7cad276071ab18455ba51b103075\n379b99b974e614686f214a5a55e04df670536b4d152e80604106ccbf468bcb4a\ndfad33b6b841f85adba987f4fb6744aeffa09fb1a245757acc966ad80ef7776a\n640c23a470ea23435aa9e830a77d17b3223631b2207cd6e358e55e4cd351e471\ncee561126d7bef360ddec03b6797783a8b0db2b8c6df75cd837bd52aa7858871\nf4882c9054aca746c1ff72f683831186cffbac1f5ea41eced0fdc444b75976cf\n94e9f59ae0f266e1c2478f93b4de78b8ca9ff2570bef17758843ad75aaac6b5d\n3a72cad592b3478a3bc696e5233e968688096284da4a3c209eb293508deb183f\n6158ab36e65972be5ed1af2a1f871a1356de71c64f24ba5f67ca448adee4e42a\na7855644b0da9d3365a6dac57740c5cab4f1b75888c7548a315e7b22b70129cc\n9148351106eab6dc3604ad1daa6a4bf211b0dd0849ada9aab62120e26b8483b5\neb3dfc37556006f8fc7ff9122ad4507d028a99f5404245dfdacac72551eb2b68\na29815975c68355d8a0caaffcba0acf36ddadef0f9d3ab37387ebc8d06369a65\nd448fffa24a1f74dfefd7b80597ee1745350f555d8b8eedf507f4e77521a2c12\n3482d60e05cae64ba2000236f754dc383e92a98f30e671d840fbf674b550ce2b\n6c269dc99fe9abaa5bdc27db2d34e716eaadd6b891e428638fd2976830b54a52\n63ec0dbaeab2169b887cc81232fd5b58fd9289c0381eab53bd285fc8b094aac4\nda0058d9d02a3eef8d32057c98f72dbf2b90c9776fc2fcd3c3d6f007f6310fe1\n2d101c5fc54bde036db20c6b755e7f2365670468b6a27e0ff590fb6250a1c5c4\n832d3eac27b10518f136471ed0b5f4daa36f6915ab3ed214602e94ee500652a7\n7a978ff7bc2c4558e0d3a96377171341f22036e9a4799a18be7118871c0524b0\n933df9cb72cf1f75353a8e57e889bc9f29320b3b92bff35c5a93a4ccddff74ad\nf2370ff6e619cc9f840c1411b7e76f47444e7e64ad41cf524ff6f1445e315792\n48469e81c8c35b4d1f584693bf82b12fe513fddcb234fc2803060d3ece5c6354\n422d71252fee69607ff39008e6d5b122d7917b1c170c093e829d885583d8dc0f\nab88319ad48d292e2ece68ea6a7d65417ef5c1fb409887a6782f914d20a18821\n197e2e508e5444b047b2f6e1047531322397e405b56b2d1944cfba7da9d26ef0\n2ec53d54bcaf4bf8720fbd4ec0c515068dce82d9466fa5493b2e9e7109a76cf6\n86a5e9c10562f3dc18f31a6957f90a905573aefe9a73ee9de3fa1dca21843093\nabc7cc13b03a32b50de4dc316473e8854ae99cf4fc3f0e410c5d7852d2805b1f\nec18541b04404bc4df261b8024a559209cfa834e228fa86c4724d28aad9882cd\n01426d285e86118f7bf6e18bb42d3cb5c7b021500ba0f4fae5f53438bbc4a6ac\n362db2f710963402cd272afc56a58233deff36009542ff8911c26b13ed3f0ca7\n6b389a7298f2f82944416fcb0c0c409b82469f44b3f805094be740964830abed\n0373b216a1fb44582ea16320184f142efba5a22fa171744b047d20b3225887ff\n7fcf7d533d9c129dcb06e2fc1e9b16d3f40f3ff5d5d5d672ffd99a77857eeee5\nacd3cb3383c37a81f6cbb0c18d3d775d6434220006c4a0ce9f7185a0314d43aa\nd8952f7fbfde2837aa3bda75b9d6ebf7b2c18392d88e69d791375064eefe5a57\n34a515f8c20ac9cc513469aaa8f32960cf474ba5da1c127a1de7a67059e154f3\n8cadb18f4efc5859156d2cd959c9cd997eb4445b4009a28671e671721af615c4\n1483da6788042bae5cce2beea9ce304ca1a023398861c0b642da25b3c2c1d4e4\n05f9c6cb068db23ef88a0ea5065c7c87df2bb5c785d2ed2aad41b0ad1e4aa8ee\nfff1cb5a2afb8e855d0150c7389084c7b249343e33983e5c60fefb6b4f7c1377\n9bdaa5b4c735a7bf4b7314cbb65bdf38f1770fd2c237f71157f105edfad16d2f\nb981ab8c183853414be8fdfc6d932ad4099b982e0b5652fb512a5908c01b6e85\na591eeb68f682588444bbbc1ea13c84eb6f33966055ed4cdc17ee77ba5fd5281\n5022b5184510b16f909b7269715a962ba392d458280dfdbebc7a73d2ff313d75\n48660d43329ef8557c31dcd9441ab38487d20575520916f2ef2792b6201c88db\ncf324ee5a59df10ab1916059770a87ade4842a91ab854338452bde766cf6e7f3\n6eb369321e2e26dcfaf0c0a96248f3e7a944c2a42615e9e0396b1fd539006189\n8b65ca9c98a87b843b1de982a16d0d438cad157a39a1992d3d8eb264a6ea141a\nb0ece0a6c553bff1b00e488522e72bfdc9aba97e4599743a6c2efdc78bf595c8\n825cd9d4026ebe5b9f4dabef79522c5b12b4854ce541f3f550c182e2c394528e\naa2db1bde91755a832b2044e3be9dfdf989ac410c23811237b2cde8b30892ea9\ne458d40bda4429f830d98cff2f08f55c371bdc3ddf7bc00114b4579fac1149de\n5c43fb09e4a3282fb74d1b83da12f95450d6372c2073db78ec6ff53c17a1c133\n6a89954a4fc5439c6259c60333a42abc61b9a670666037789cc22a29f475f1d3\n7d3b4a819cc0642e5e72cf632e4f1c7b9f86cc7aba867cdddce6403c7c708f08\nb93f6bf262aed94b528a5e17dbe3de222dcc8d8c22dd94400579ff6ec6ad41aa\n31d6fe3a30e800ea6046c8f0399ae5e99bec18dce83421caf72a87a29020318f\ncbdd468621819ee91c8b9f362d851dc4aa9a82b4200d9bd8600b44aef715d1a5\nfe6aa73bb0096cc0c43d38dd04397a9372d4f7b50c5d16b9353caee7f4afcee2\n24476251d9f26799de5525b2692fc9c3165e30428c91b0ec3b24b0560f33fe83\n10d2087e074afb21d1e46a715c4965a7f331e847be37edec5eebbe7a403f5be5\n89db8169ff958d3ce7bebced6533376d0d58374358a3f38fe526b9c27ebfe02b\nc7b00421d587c644ff8bfd7df30bdc8b6a0469abf3aa29eb5ef062d4b0a2f6b4\nd510303c022560dc77cb80230ff5930b7c735ee79a4c8f2b8bf7aecb9d3b228f\n65eada42d01928ffcff4e3b26066cb82dd1f8a6df7d906e418cb25cd0b4501df\ne2e1c53d96c7a21dad443a7b05895c4bb29c3093b23440c6b27f89e7b8414019\n743f36e5657c73a673a9581ecaf6572223408eb1e2214c4d0de023ca0c793d23\n0bc08688985927b6a3c41b866dda6f8d0a1698d3b134d7323d751820d1484843\nf601d980fa92b066419ad15d750812d9664c31ddd86db842ed67a6b6dfd6f1c6\nd7484719149da2545de302898c445a2dc42ceef0d8b61480b1a8f5542f41a9d5\n1f9e7b647781eac5e670edd7b074a737e13eceecd70fb81e1773d4b5cdba5ff5\neb92b4313fa2b80fe222960a610b640af586a50b427f0845ce9b7136686bb702\ndf4a7b180715bf50a9865ec2ffcf7bc00019d755d3d895a7a1df59e62c707351\na04e583a2c151e1f975695dccbcb93103be938d1cc7c557314c9f038b2883404\n522fac9dd8783a168e4439581073b74217c25d9c669af9b2420e5690de5e4db4\ndd5467218e0a9d9406004c2c5afcce47a9a0d5bb50d5ffaabeb1d63062bcd7c1\n8a19f453b9eec6f07748edfeb3ec19dd00a086735b5e808c1c2277645d2f6009\nc3fbd95ba28bf33cee8703a6ae7696fe5e92288c60c2e9ebf486f616cb0a5ba7\n2ba42f902bcebc0024a1cb5a9e7f6459e4cfaac41309a7f13e31dece298231c8\nad6ee5fb3af0eaad887aff78343087e8d66f1501f5387cd6bbf0389f8810ca93\nb72f9d6f160af7313c3f3ebb638d824d9c5b21669d5e875deda8c183bb2db7fe\nf0781b3f3f8f8543f788780743e4acee084ca9c953e301a11282f8ac4a4b1987\n34c7b4a12b71c90a451e4f4fe4ab4415746b58a8eb5cbc71a4c36ac9aa5603d5\nc4674a650192d3d02fcb2cd9b550a41e6643315bc104bc83c5820e070d5df945\n9340435292a8d442f15bc10fb042807bec3ae61407ab6b1a3cbe886cc5a9ff1a\necdf66ca409c6a30adf223adb3fc1fe69a79232c9a84f8f01861f29c1a9786b7\nfb53caf49ac30283cb89ded2ee4dfc6a3a1904858f0e96d0b2a98647c3cb2ba5\n6fcf0938c915aada786909cb2e7c3b99d46f35cb3b27e4423376528bccff5cda\n04ffe6a81508044012cce2d4c02bda5e7b39d33f49d0e6f7cc7ae104ab6ae1c8\n27623d799e747c80a3fb7ec6abda7eb9b390eff99868e14661a726732c9b3fc8\n0aab129fc2d323bf277e77aac06325afb97e2fe9947b05c9b74ffc47f841decc\nb8cae0eacacf7479db857155ff892ba6569ea3f0dc3976715d5d3aaf77c89894\n84281f1f60726acd09189ebc770bfb64abfcb3324a9ace1ada3347daa205cd5a\nd156ef5ab9b602abf1656bd66e769cd6ea3dbfc0a167d59b223d31c9c4724892\nc46a73a6acf60a7f4d5067074605879f858af5f370e3f1b308ed2ec99636d8ac\n26dc6e2f856b2e95d1dfbdbc00f52f27d3f084f619ad466acd67617ddb734633\n81969e0421cd4b124d41b860163f5a83b63453285af0709e6a9327780ada947d\na5a66b3cf21177a6c364eda796fed24363fe2750226c6229c267bf642231de00\na8fca4f2c5ba8aadf2f4f68e80ce6ee2fd39b53463143e8c10a6bc16f1b3fad0\ne5d50612cd6ab2fb46ced027fa36285619ec6ae6b4956bdacb58e158f36fbcf1\n5afaa909e4835ea7caef56fed31cde6c3171244f336d2b9ad7bd07d8a36a09a7\n2fb1ea84f16f828393100b300bdd38329e2d66e5246a5e5d701e920e4f51608f\n7d1f828b8ed7b1bbe1d1dc87f28d42b505f62439ef5c5a4a63011803e74cae57\n1cbd1e6a27b7972e25ae9fb9234df9dd084e8e7e0c2d81c0ce87c4eeb49b552c\n76db7ba39eebb3c65ab93f311ca713e4860ced0f4a6e15394d9407d41a685fa8\n0cdf48492792e51eaa4effe570af2aa27dd431420b6437aa5ee12d75f6fdc0f4\ncd66a6629d2416eb6a4d3d2ceec1d26511fac54ad49d3f809ef36666be876907\n5ff22443bc4d55ba7ae4c2a5f290ad188f6b23de1fb8416cbc929e57c3dae7ae\n28d14a1048b6385ced2f19fe4f465dda8fd1d2b2e0a4cff6d37ecbe8aeb19297\nc5268bb9164bdc03d46cf11dd310fb01b7c2f40a3517f055ec362b61ef9f0dd0\n544f9303aa997af6d21dfe2285c6eff48bdaa1424ead80198f41b294273df710\neb9e8866a3c6fb02340d40bd90f535d23c43f29f3f8fb3c013bd69ac24f07386\n894d32aa34698a8c06828498d0d89812421ec61ed479bfb37930171368fc1af6\n7ef4abd9bdc9f67acbae8bb3591a62516377b9b00521683d6ff8adf41ec14aa1\ne122607c80d8d2a53156a386d75431161c12107edad2a037a7afdddbea746294\ndb3004528109f0199355876227f8d23498a1c100444a2996e51f250ca33cb9e7\nedbf148ed569d58128256a5c1e0d62ba8e799c5e550b3b4358cdb22dc71107ad\n37a841406ebe8a83ef73b866db04ebaee9cf0f539d6ac40875ecae23c5c84809\nf21006263fb455d2377e303d985d2649233f59b3b6549121babc14c516f3728f\n76bbe906b6dfa50697cc4b29c8bf0957cfd4052fec114df59fc9caacebaafcf7\n8f4c5da6d156b406e973d1cb038132e6abb0400bd15bfe2e4ba58a54efdf6d06\n13feb1bba09de5b4a53b1acff47e78c3fd8016f250d2dd680f623a0b87efb2d7\ndb210ea39847f399719c29294b0e5812e2046a7bbfe8f4e896c8bb5840e28f23\nb67c8f3ec4ae3d718a3807aa24b58fe96ea8858f9db00677e9425067bf4ae9b7\n0eec71acc2ca17ff77e79626b0f0a421b29e20872d6760e70c9688a93b8a625a\n0d2d677e18ea7f72014bd01e5c35a9a676059c7f8ac5b2400c9fa15b4239147b\n0e90028da2f97fbf809c2f653396d4ea3ae0df39032d7059b04ca99797635d40\n6c269c7b410bd691e6d31244afc9cfbb56a856768a23de6ae713cd424fb05b97\nf241bf91ad7ce093570d1cab605b81876aac4acdee766ae1b15881ca15a64422\ncdf79fa1548da2dbe428a0a44089f615f803d5d67668896a925e1dd642dc2178\n9ca88776e0be735661d6f18a30fd265f84350637822c552bd04bb42f94ab6f2e\n56fe57cb07362528840198d974d899b68745ba45f6020c7db39be906309127b8\n38f55a1db974663cac6705638847792468d82653de9b753a400fbadb00672c47\n94f79b9c4542cb344977f3ecc7ae97419c8315553fe32e4970a581f85377b2a7\nc4a2588f828831c14892cdec389a30494c441114a3d2410e0f3b9d327954f42e\n04241acc05530b9d39974661ae420d59346107774193f4f4eb5baa8746329010\n0a1310531b50ef9ce229f711673682557e068df7cbb23cdcec366f0ecec8e91c\nf611434d56f5cabd80a453c8f458184a7e46cac66ff46e8b84db5c8315dcb575\na951f66af979952017b7ddaea757944155adcf2dc4894b5342e51f6781ca8ec3\n0f03fc5f95df5260572f411c0086e1fee7752a7cf74141013695ee7e62ff1643\n9c0e607df19ef295964a1f75869424be8bde0a6d7b7d177a02a56b5385929317\n2157a55fef6dfdda3132d8e114013961ca65e071494b6e4aa42d6171978a98b4\nee454bf44c60f04a867f4f7e18fd47623a377fe3e903516c2f1bb2f47f6284b3\n5f06eaf3ccc094fb448fae58ed65c40e3134353fc8f97ad65993b482f9c0302d\nb5f657b1ed54c3b2bf33ae26e0dc6574de706c5390f896f1c33f96d945743ddb\n9838d38c973ddb867f6b3743f63f61815615536c94a1819a9c9d0f0ff4338e35\n0afcf6c5677b14206e2a72033912850aa0a6a92c6059ca7b3a369bbf776adb67\nf21d9d637ab5e91ee6357d689f896489a99b1ebc1d69a2a743a901d521ff46fc\ne67537da6d856f10f7ae3fae3960154552f69d0114abd421163956fa0579232a\n5f4e9401b7ce116464136f02f4f8c21e085e677ff3d1c8703164d6de9e2c257a\n00097824d684ac7039ae06b600b8bb77bc253c937a0d24186b811da960673cfa\n1cf2f72ba4a590f4423ed7783590103c1a28d7ddfb8637901ab28249055d84d7\n37dcfabe237113fb8f4b9613a4a80e4d6fcd087885f6a748668c05c765478d65\n1201e5bb6dd32be5dccce28c45e28557dd567e19c806af41379951d0b61ac880\n4cff6a21b90018316e3e882ad762d30ec245ce0f9fb73f7da87bb2561edc787c\n51a01665d3a3b72f07d93a50198e26a0276e639aa863c193708917ce0ab71367\n5ee73c936f191cabcde7292f8cd65644669126db403c1f7e6f823023b8ca806a\n654acb48083ddad9e4703066c97241569be8284bb678dfb63c143bdf5f7cb262\nc71db77333595afba55aa27f4b0073d49552257521519385a9642501901d89e1\n09754b598158fb7005591cf718f41d75e374591b8b6ce6663dce1c4a73cf5b74\nf260851a02ba9353ae7940e4e8a8c7dbf6f64317aaeb0b21594b1c51bc17f12c\nf56bebcc7b4b106cd807a192029b795731cd640b25e126961e83942150c07e20\nbf989ad7397d89ebdcb0642049984eac0354df9bb5c325489a2f996293a9d8d6\n6060de01693f32287765e3a8bbc7831e61aca2102ffc7a1155eaa9efe2ddd7a3\n7c559a090c110d73d7aad4ac17c8b8b8449d6d9a2ac0a6896f4a9279a7571756\n969cefae2cfa3f08f1c5ac8dd1106d3211600398c6da69854d020db9e58b2724\n74ac37e6079cb50c099058a5e83f0761d15cf673bd880359e32544eed514e11c\nc841b65943a50bf9271d5697274354f10680a00313e1da9786363429a667f8d7\n632b7d7881fed5385b7506b58b9f48551c2496935e30feaf64ca14831e043e17\n457a65ecaf6a895f4906384953ae5591224a63b02fe8f496afad481593ad1fe7\n9df36a154ed7279efff538199784c56b01170e774e969daa170356d96722da1c\n8c83a5428f9ee6ba36d02c98f7f782a1439c76e43ba456aa35caeaa05cba9036\n40f14b4021f3316c80dbea37f2f06c682a0cf8646815ca35dd80036983f73eab\nbf4e70fe5667b837f80d63b55bf146b01e51737c7b32e320207fe54f8901b658\n1521620ce9c6c9c3001dff058cbc8dbcc351935427d55ecb8c4186b9f10aee96\nc0a6e0067dc47195041ea8182d00729345378116658c52d463930af6aa6e8860\ne907d5bfffd00f932bc08dfe19653f21bdfceb31d1e52e58d726436d188543da\n76eccc820cebb2c4c57b5a56dd840a1a707a68f0007054ce99b62f1c8e33e7c6\n6d6769270dc4aa68375959465ecbec267b9083aab5ccfc04800f09c65e4fc7f9\n6f4f74130019671927846f8c6481dd00068a06c150b1c4f1473970f0bbea1e8d\nace07db3c7a015b9d6411045e1d9b32c4442a98f273b5c135010133320293d68\ncce3e0b09ca562dcaeed7ec63671245c135f3e654e8470536bec7752fdd69a2f\n2f266cd2f2d3d8d148e7597d98cea4bee9e0bea9cd0205fa0beaf70c929bc7f9\nf1aae48d433cd33d8560d157e06852a2d2b84e97ebc97bc2b1b89ed3f0f4dbd4\n00744ff4f45fdbdff6f20a8cb4ebfffd1b528997a65ad6d3b2d3d36b7d8378d4\n79bc038ff11f10dcc400d558b908def2ae7a97d16a56adeffcbc2a8deb959cb7\n07b46299345f12fc8814ea03389106c44ad7174855e0b04c65937bc54bd327e2\n010dba393d15dd7ae57f6bd8409f825f3280573bde655dfdf8955836c8f95570\ne42cfb8f6188900b58611cad7281e9d6e3cbcc9be49df832b30915dc47b4504b\nb4e84adf58258a663dd5113acbd9e869374495b9afed7cd273408147ca7678ec\nec0e56a445f10891989ea42a0d0cd4af5fb6f4b74702d40d1f761d31d06c317c\n6d294627f949d6ac7174c567e350fd9ea42f27579e5caebae7de99b245189912\n0a658d4d85b5897532f42200ed99f706b0ec8e752c85209608e5bc9dbb85b1b0\n5d537d7e28da0f5a44e5f3c5429e81a73ad7f13d4e759bf90d72caac156d25a1\ne7d6c515ac84322a5f838b8f480cbac3696ca23369e7bbb42665c6a1838c4051\nf68a3339f224b701478f0813e44ae3ac48c0304cbc2381e19c34670c11c2a39d\n8093fc127b43e051cbeffe4d63c8f1562bf859f50a35b68188b997d14466eb9f\n5d9dd88f8433f56d335028f2702239991869e37faf56d99101ae98d8f62fa910\n39410345268534bdadab8dbfdbfdbdd51ae14feb4d0cc5bc500dd406d686fcf5\nf9ca023c35088ac4cf100b602c150004e6d2658eb596e9ecac008ce6638d4cf1\n32e5b80d2d90daa7d1f27ba6c944291ec385fffc9603b5226913d8fe4898ebce\nc9d0b566efef3c2043797e36e0a4c0fbc82c06ed05471828e064e81c4b3b6836\n2c3d984552c7bf3a2aabf9fb1209470165e954b05d15bf408a08b8ddb00aa238\n779b1e8465423cd18a343c0fd9bc4fb15930e8cc0d7c2d87efcbd643c1cda935\nd4da58ee70d6de5b40d50dd8bc2ed1afa53ac21e54302db9b512563b1155dd14\n996216e3678fb993cd90c6c79dbcc49236a4429625571706362a82fcfe4e3d10\n4ec649919af52510cfa10667ea18983ff60e742fa456c2b27fb9c8d6af4b6cb2\n6ec4e668d631d60c246b393e367c8d384cfc9d469360719bc9fe0fd06bc3fac9\n94f6bca98cadf6ad4b9781a8fdc8d19b598269cc58ce04b6181b5b4a0ffd627b\n904f55609a2574fb65ac84856daab3995eb4e956a75fae43f396786bf2935942\n366538e7db1651f3701ddad24266cb805b8c6cb20da1f61d8a694099aed73bb2\n4b464b098abcc036571b0681eebb40f1e5f613105126fbd129e3f69fceabcf51\n0e8870dbe76818e871f743262b06e4e8fc2415f2a4b873fc19e920d3740cb006\n66742ee99535ba94764eccedaf397d562cadb5a92f8509c9f3073948a5337dde\nbca7643fed08e3c9fe7678b82ea70f98c43a0030f28b095e385929c8f7c795b6\nd43d4c811a4e006f5df52a69b2a155a0f40454bf6d2a01473bb3b33ee10a980d\n04959fd4b90c70d71b317b5e753d3057404f51b192b96d3c28e6f5be7ecc2ddb\ne05c957a822d4b76c7d86ff7c77dd5a2c22563cc0e0ef565db5aab296e15e037\n952251c2dde36d13c25ec536c084f3962068bb4d40e40bd201ab722b9586246d\n2915e2ab7b523a5c4eadf47a0e11f6e83f31ed5037df2ced3947922e7e3d8faf\naeb14fe8a1b27210086d0b7fd36deaa11fe841f71032078e7e4fc25b44dac06b\n3a623bac695c5d5a79b274d667dc906191328fd2e09306e2bea0647e2ffb4c2f\n7640149924257a7df5b0740301fa4f85e0dfa195525637cfd07325dd8be081ec\n60ce360afb9b688c9827592ca27a6c3cc2c9f415dfdab067fa12970a5e25d3ec\n15f3cea6cdce1c8ba2a8a2b1fce6e4cb2ed598bfe44c2c052b9904d545951893\n27a1c1fba95ce41e168390fd02d8b559fffeda5186b7fe8d891954027799ba27\n7fa8092c5813d0e21833489f546278a5a9bf71c7af143390cc88c6d8b14493e6\n38a2e03d0ddf5f9cb0867c0e440573409ec67b365a62bc863a51216a2619a77a\n91f205ad22f12130ebfab1d150e3b8ea97f0fc829c13f5e2d912d9b450430e3d\ne74c121c7e7ad08a22020b33f97762e10e9f0925152a1b6545a843bee73f9ea3\ncffa6f978debc78395a6a8f7e3ef10e1cb3cab5df123b4b987d52514d9ca8fd0\n7b9f2b93401470975050cbb71a47653522268ee55855564a7c2335f3a0be45f4\n6108e326dde921ac0e8e680940b68b749a346caf656fc6cc768ec8e8ac1aa102\n285c4a78b304504a289c85a8b51ff4269b0f082beac3ef4c661cd559f7d4d7b8\n62f0db04db2c235cb2923162dd4215e6c5441c4d9a01dd149127ffdc8f3195d2\n155b7625d0b1dc74f506267852f4dad5a46e763998dd520f4cbd09ea72a33e37\nafda1fcf20778c7875fe6c5f0b8f57e15d564dd1d8a98a964909c85dfad1281c\nd028053816b6d6036b34975c3c4df87f234f986e5d304465cfd8a8246ab5571e\nf173f88e07acafb91c3b5696de510b0873b009f65a0dca7e2a27699af3f69f8a\n3b50876038da3bba339f0d7f29f829c4d8b661d8a2aecd0463d1373fac89235a\n32a5d2ba0df86cbb3dd83328b4cb5675b42cab2a81eb433c82ef2110a21e2899\nfca42f648390eb6ec78e4f9007165a3ebe26278953b1c9192fc18d00958496f3\nee80722ba1ade5d06c137731278d7b444206fc3dea27304b9bba5bbd55e20014\nbe933254922bc696875490ba0ba1be684696c882b17df50f91ce91b9fcca0750\n18eb19274ac1d09c7f785058c66046b5a19498a5b2e5e4c0e3e0a2ef0481924e\n458ca80cc9dcb35365b3b3883e964bc3f54fddf81047bdf282045cc8da8b8007\n2dab1f91c984a845c8bd82f7dbe8025b73d7cb40b4abb46fb1eae583c465e396\n0ea5367f6775bdb872652641fdc54d7ffba2c948acb8b2d9dd77e496e75d9612\n315379b7ca6a3d5f769fbcfe39107fc4918cd09ee4d3bc25dafd8db133a0fc95\nf05223693ae11f6a021e0e79abe6d0db856c22d622be3d70688b027966091b92\n1d9b1a5c1d3be76642cf95975ed9263076dea2d81304447ff46ada0e0379dd71\n33af85299dcb2efd6dabf1414f978e61f21cd39a614808c1ebe6e729fa7ec7e4\n91447be7a4d6c36f90d6e21fd3fdd725041ca440211e2d6d3083de73ea2af310\neee95912d33390d5b2f79c5033ffd56b0100cf6d034981141e94e306556a931e\n399aef0c60c30a27d70ce8cf12859ad31c61632030a177beafc74d60c89e99c2\nab1e21834d219a6df33f7bb34924042cba8b6d281567ef200236a5ed9d10c8ca\nf6309789a4564a6ceb8e416c0c618f0f1050c1abd46c508e50f492dd9f701399\n8faf065384e7ed1bbbf7f36a60ade6779c7e0e9cb975416a35f4db5aeac80ed2\n8453ea6a4d5d9fb637970054be3bff0145569b4df59dfc90198b0031a98df35a\nd9482abb2bc4f21b7d66e56f405644468a6ab11cf584cd51c99e2b45dcb93748\n5de0c7009143e7968fadcfc0a0c377c71d268d54f478a51a959486519ac533b7\n45cfd61a1cd78b7818f2aafde00b6916e71eaf4c16bc30c9bc827fbf2ebddaa1\nab4ece7b615760893ef8e812420de0b4ad7ee7f4d071668e7ddf982022bf4b47\n33715cf49c38bebe62676b0cb5a6fe2f9c4f8085dc284d6cb2d5a6d8cce86df8\n94b54c597fa4b07b54fa8dd9b06ea932b6c4892536db3ee3ef7ab77253771354\n0d1059141a63cba7a142fca31a6469bcee37cde307d1386aa7ebf8cfd9759baa\n971657cd8844a5775418c80e2345859af0f6f35c3aebe24984700e2152e048ba\n651e141c5c842ee48cc52dac91bcdd7ad7a42d4eb0acad637b05b3812fc82ef4\n85b29834050d00621f15b93848a4ab7c72a280072719f5e2f6859f0d90d735f0\n973272e1afc18eb949fe512befbdf7bc8ccfe36b960a801ad04b0cb5796ee7aa\n295ae2a199cefe0798cba8db2c8f899d699ea1db395da2eeca6cb8b6d1175807\nd505d30bfcd2945a2771f19b24646cc6770599d1eb36166a7e5ed2048cb7d85f\nc3d6247ea0a5362597c70d068de4866bebc494eeadfd7a364abede29e4b1bebf\n8d95cc577ef8b5ada814fb528c114a45ae9ffe3ef3582105733c55aad2e5aa61\n4f63c48fc143ac3c3b1ac6c650616cdbbab5d146b6018e1a1db578960acdf0cd\ndc3ebfdc1394bff9692522951dcd7628c2dd53b0be6128282ae7e9cf09262271\n978f4b9caf91cfa3902c6de36495c9c0a9a297ac3f80a1f3b8cd60a3c23d3198\n14b4dba8b486afd722509824af735711c9ca5294fdfbba458b7ba1d211aac6ac\n29019961e41868cac2693f0b06a791397410c245c9a1f43940ae75a03154642b\n6daff9e14d69148d2cc19a48836a531b745c8d90d3e04f744bd633f51e2d5a2a\n31bf683ad754011252321c0e174ce5ead609769f8562db00c875545cbe39c4e4\n613932677616448b942aeed37c80b1782e52cbc8bb3d9c0ea9257fd8909b6000\n667d82813fa287a7f3c7ab7fdf28302b4918b560195fa4d3a83faab8791ecfb1\n717ee75004a5b923574687fb7dcf5c954b9a48841e9dc5fe53cd0fa928b82b37\n7d322ce8156e6079923335fc62111a2be855279e6e6921dfd86264da7b202425\n9753df0f63b559e34063928e9eada2b75c460a4eb9e3cff6dab5635362ea3da5\nb246e49d838dc9d09554af673c5b6e891dbf0d86f8a7e7f2324e58a6f00f5479\n8a0b57c5e2b6d8c1a449ad54726a80129a6671992618f67c7e2a104dbc0aafee\na6141921c0b47cf70e09a3b15cb9d6c2e47eea8586413baf1feb1db654590c1a\n7be44030223fd6049f3a57c89ecea20c0bcd410b068151db8ca4dd3bc63ad81f\ncc5585eabb8af702b77246e7c83cc718ede988a1e6d9cec87c9313d997b6354d\naa94e0fe9a593f330e1c048ff88e64b65d887ef751b61d87626c4b4d198a85b2\n727feebe8f1fc278a9363c1efcc029d79f7e7fe6d7271fd369821f550e5f9910\n19394c90abe3ae60ee499465c6b74b478a2b9b53fae6d5789e6e02155f1c6977\nc313665911c8313c58cccb43142247f668ef559b683f0d63d5989366ef3bd4cb\n50528ce1656ee3c7dbe5964bfe01c70647c313737d650c69f92e13a0707af3ef\nc6ecbfe2cb53bc8146c06e1a2351cbdb53f33c97c200a320c38fa7e5cf3b259a\n029b5fa36a3d2e233e9cfdd13f53f314e153371c3e798657d5177e68d5317831\nec3dc11334e391054895bc10638feda8e99cf50152db0cc14594b63ebceca6f1\n1a557c1f003615b885e856c05b5af1cf069dfe4fc442b7854d9acb198186aac4\n123da915c1350874af50f565a6a91bedfff77d4b85d9c7d35de6c8198b1a8c76\n44c45d68a3081c695eccbc537893f00a9622f271f45f16c8294598ad66841cc1\n414c5323a698991b4bca480b94d2b4bc97b683fe4c16a48e72f33a3ac45ee479\n6c7371e87f3fbbd8b76ce121e6f532a4999ad057304f0aa07d04534b0ed1971d\ne41f667017c4a3f305104eda5a720970e0473c98a3ea718fa0f8a699ad23ca70\ne900f6dd876968a08886211bb186896595743352cc2f818093d9ce2197c65a32\nc44ab74f9951d2aa32a5e7d7760def33043659a416feded2309c10eac41eaba0\n4c6715a7089cb441e26da41e96bd7b5c2afb1e17da4e73a53b28e2c70ad4c352\nc5b41aff3846a47232f01a04dd64f121503fb3234e17ca658a0502b7ceb6d321\n8d72c7637055a820504de49f299faa85af2969d5ecfebcb7086343419c2e2fc1\n83b528a6fe597ee8aec71f2a294848ac666b4f60604318a9359d696e2c3c94fe\na770252cbf2c18ed6e7831fbd276a6e450c55f48a9f757c9f6aaa0c8cf07f15b\n4cff95fae33783885cd40e8442f622d21d294e92397cb249192c5407ecc895f0\n9d370ab7d09256aa6ea9cd8c65f65228c66f5c5e710e0460f9bda7913720ea6f\n8e3a3fe8cf7cd88b1dd893ae1cbe4707228e830341bd7d607390b9d98b5561b1\nc76b574d7de022e0fc7b711b5cc0af47483ad66588ce0c7f113da8831e92c8b3\n0504eec87841218a963e68c87f3ac532d398d5a3f0d3e4844b76cd7f33bfa2b9\n7a70e3875bb447bff00f0ea05e3268325b2d338b51c38124f26d0baf5ed55104\n683c015c3867121a7f509848b76f337a3eeb151ea3bc05ef80a05a001bf98a0f\n297c6a11bf681bcdd6fa2d0a7358fc1facf7efab8f5b75c6dccba66cd9152d51\n6617b03f5c83becedc2afc128d86dcd477fa238b7a0273ed33bff569a14ec0ee\n77541970c0d461b9e10d802fcf76396020f56498f00bae13af9f8846282e7eba\nef87e4b34d4c5ad1077f01a885e15e3fd7536b81b51458554153650c156f45ee\n0b4fa1b424349bf9fffe92fde83ba8d938aa1d7de4bcad2e0a4229cdfdc25a66\n10e3f67ac33b8c4f65ab3d629c25fc3878fcac0903b162089dc732a6db704e92\n68ec3bf58b9dd619176ae01b330bd183711096ca5992a78be562bdd4ed834e28\nde5e80f4bd5e5e3b41c6e277c63aa6fe2828fe2d0f378ddcd94491476be3845f\nc781662ee1e2e842b00869ddfe1f1e843c4f65d467c589568e544ef8cbfb51f1\nabe48ea264671e21cda126d14974fa63defb4b71e0ffe394a12d43b36731bd3f\nba45c47ef6274b4444065d1325d9fcfff286447df740eeb699bf2899aa126068\n1d8b7377cd6127552c817e13302ed75be3f0558bc77f346a0393f44bc442fc1a\n593a8b8e771e05cdbea7e5ae9094ac1c6248824b29c3bb703338a1654c4f3a0d\ncbf0cd7a007f3c4dd34b7c2895d83e2a3ad0e6276b7e12b48b1682f67aacfdd2\n4db204a48b232f7cac395035c55eadd6d746ad11eb94d19a081c078ab68cd222\n66b64ddd33bc7d58dc9b66ffc408af85abf04d425ee0001af5fe3e674027531a\n91b46d995ca27863482cfc14805e1a7ca2553c7553fc96fd1f216e2b997d8aba\nf266ad06df327f3b41fb642178ebbadbf8b390f84ea53de59d5986aeae9c4921\nfda47166940d87e0574e6305f83c086918549f90450cf6512044a4368856febf\n577037212a37193824eb1c06d1b8ba4436e14a6438be0bf8bc114cbc014dfe8b\nc135e23b7aee07e8f190eeb6aabce271f2522309b50e11a68fd55738cabea025\nf0dd875c95e90cf764d092b8013c795a8aa0cdbcaf347883beebb8bc567ce652\n3b8c428e83b05d900a4f50a5cc9f0a624cddea2f3324f8be85feff5d2d703597\ne878cd39c11df0b788f3947a939d8f17ac230a41a597e93f7d9b9e10e69abe0c\n3af2a637a03a2ecd926e13676c639d6016f9b5ef9a292f753cfebd57baace326\n0536fc20d1a604cb44facfe31d586130dbc2d909fbce1a1f953c319ca47c67af\n8e350891f2dda914ae0e5d65a13614329fc03ca8bc80ca5ab04c6939847d93a2\nf103361944b6966d0527c9758271e59c9f5f62b6580e20ed5d801c3a92d0f398\n27b8496f3a42ad6cc504ff2d4a393f155c71c3be3e5f3c484a6532eabea19e8e\nb07dda76251bc96bcafc3464d533bc8a1aa75fb2de17f9721a15c3994a3cef8f\n2d3e06b40b5ebfadf8397a6beab47647a38dc77499599227c1ee4e463273b000\ndcbf1ac67d45952837e67f2dac0c4c58408e1e60840f72afccd815b5ba821ba1\nf8f569c87ce4187323d30999806fec666c6cea1708d7fb71b7879cd278cb2f8b\ndf0d5cc79c483d9d2d767dff1aa025cbb9f6136b01e7ffe177c05b0219d9b34b\n93c611f1658624c01f3ccbf966e23bf1ef73ce21a20befc6c2543cf2bd1d873d\n2ac117ea3ce7c2f6a7b5ecb2e6143768395f6006ad23307b33183bfa6f6527f5\nb76a908191cee08a03ab99d60605eb5804d9d9f5d4d8838901431bd361ca7561\n67eb509b1927377aace3d4496ef0dcc6fc804e396e0451b6ae384c3652f9bc5f\n3b5d0f3b9fe9ce74fc0887e965fc7573734d6e877fcd5ed87710685dad834e21\ndb5897ecad09ede8e09bb8e82a32d7279e86714e6f3a158942d463b86fe77d90\n9ff70c92d3e834500e3be8628efe168ab2bfecb7d0d0b31668220af50fe5268f\n9f18a277e2434a6567f15a29999d741c0d8150edf67e8fd98d0c2eed5384a91a\n28624fa84f65c29f3807afe1e0013170832c4d9f3c9faeee6c19c87ad7190f22\n56afe531cb6e2ffe4be283f3a9f8bacdd15defeca6952f73d2ab087322edb7cc\n6e8c617f373f2901d5648c9f4ab5453458e4afda1f03e7f1e2001a317454b09b\nbcc9c66b278c96d28d9bd487712afae7f98d4836fc49583bff8525d0f237ee10\n8115d1dcea1d23a30b3252b126dc152ba45746d64eefca4995afc70afc07e968\ne3b6e1ff0b1ecd5d17c5e91f17e71f35f63d67933734639ac69a21358ee67f9a\na02a016f8066b327a1496209158b24adf15496a8e6032789cb9efecd1f01ffab\n0bccd97e1d49bcc767025f48b158cea609ab69a6915ac7a84fbf5714cd3ff87a\n59410c3a575db59442e9bb0dd0a37600a5b72080a95953db037559dc937aba13\n73a2ffbfc2169b771569af80991501731d305a01918c3519f5b2c465fab12b3e\ndf490649b155bf33fc6fdee3e0e15a11cd7c44c89eecc11f1c63615777cd09e8\nb62aee5a083335ee663976ce38afda2d2003492cbd98841e91e9dd17800a47a6\ne2ad0c9d5373b8b7e5f8b6bf6a8baece928bd8431869a064068a117b0b38e216\n7924b18677bcbda065eb1fc623672ce410df8a0568fd458bd0852120e5853348\ndfbbd336f108a75fa9e4ad1a54f126a8adea3d84e2aec9674b2fbee722c5bc5a\n8b0cb8ef7413e1797769493357e9a2877c82ffd1605255d9f05953d5457d36d6\ne7dbd0152e60c43fa4ca430159661205bdae357f2c3c75ae49b9210104e1badc\n62703c20aa440027c87de84bfd62b9c130d42467cdedb25e5bbade8dec3bccac\n3701a6493a6c0ac8b14686ce0cddd6c51d855642bdae93cb506fc8efbe9f9813\nee78e27f8f8036c29262505bea6e9c1f630e2117726c41a09ade3509da5a10a8\ne63400b24d39e555b13720bff02a667a885a6eaed805a3f3802ac2a5a94883d0\nb2e85af538b011ed65b8e8071b9881b6a40a437fd0569764589367f446cf3593\n8c3151f57cceff0ad9d49927ba1bb01edf54d830bc2311b90e01cf2a5437ac00\n79adc587e08cb2e23647f759f78e8715ce49d09176f6059be055cff4a9e18ffe\n973bcf3669cf962a488b53619ccfdcbf90669b7fb463194d9b40d76ba3a08b24\n1a3980f79a00c95a165c9233764057bec2f547677a9e684e94b27715b7d9b01d\n9dd7d27c21e5e694347495727d0c2b1a8d8cb03884ff0d3601c84031bf066224\n6eca8e5b069c1d27a9cbd78f5bbf1868ea0784d010a517b011c8eeaaf085c25f\na2e9db8878b0c1f5a57da214e2fb0be0ba253e2855c12e3e4f2c501a77e00aef\n96a415847bb8d637feec3e4a6dff18bde2cf7bd68ac25409cd2db51fc7c82f99\ne6e4beb7c2c911e54ad38a697b4a3c1bb0b3908d9cbd04c418fd01be783f36db\n523ab9c936117ae838b84d01da11f3c3953fb9bcd2160f267c05e23d190dab5f\n9195665caf100962fae8f5fa5d0254e6d2072f9ef126758fda77dc05b707ce1c\nd4716a6ceee3509c81b0995c9b4116dd870c324007f1b210f9dc59738336881a\naed14e54cea71a2bef9372f283d6f02deaa53154037cff97ab2ac90c112bffe7\nfed02c45300faec179a1817b0573f2f0de281036ad408f652cdead7c07a6451d\n6cf622482fd40b855c146344dd3ee36b8e070d2b4eec1840574d9f065888f380\n57803f2fc1a360356bc2cc0a0108bb8589d3a4a7f4f5851632c209504c169a50\n4b8595ede35a7425e54ba0b6d9848ba56fbe5282ff5078666465fd73081f245b\n8b78b51a643ae01f1fe3be1a56c7f98e252343b525f630b23696cf234e467016\n9487b2882ad3677cee7a6668e33b92ff0e18eac6d94c3b9fa5049ce22592a97b\n0bb0d9e23c27cbd9f52a3e12cefcfc6458485902380755c44f15007174fe2212\n6ac6d942943540e06623c7db8173df192a8a4d26bc67b5cc8bdf2d0fccdcbae2\n87ebd6b8f8eb0427dd0accaa734b87a00886b17866870bd83f4f3f60bfd887ac\n99e6c27e81ac69017dee5e51233d3c80bc08d88bcdf9388115a253df204b44f5\n8e1f42a35c97a4cdd79e69184c7c41a226e0de81c379c61d261d2336a7bcbc72\nfdefb7345852ef3d03b3b487e08b5664685449bb52815ac45aece47ba221d83e\n6715c0c36d09ce53ecca362acda51309bac376e2777d90a1e7706e5c62ce2745\nc3825af3184a784aaa0c8eede1b4d2556a98d58dfbf696a04a69e03fa39e0221\n6c3d8c2735f695e6855fba60d90df76c512f755131141574fe367df968cf6acd\na495c4a6277ebe98573c28df19c70579facd3f0c610212d3aa2ec110e1b20555\na3790153afc9395b43b8b1fff9dc94ac0716994b675b93dbbb174b646fe5c4ad\n0423cfa907082c8595b7e32fd83a6c5f2413c94499e8ff3717b3130a53edaccd\ne664965f0fa5e4393832218ac9c29a82a40082e0cf00e37986eeb16bce3b77f6\n1f48db470a0e687dc7ca20ac3ee9d98bd467e60ecdbb2e932e89f739462b37e1\nfec2500f70e2e883e3700223afcba7b0d7ffb1ce48cdee1aa219bb4db47a2ea7\n780f89aa8e3389a0ced580def66c376ddff84b2e16dcbecc711af35e2c1bb346\nba31a190ccbaa1e36361194bff210a673d9592371575289a5ef9ac0365529283\n62449227a300b7c721b2b56a5ddc1dc93f29623a019d1ac5b127c5bf4158cfb1\nf7d5c20469f123c1e703921bb177425437fc488c1a011c5f7f926641f98c7d51\n8e955e2e84aad48d1376cc6ff6d9e6815ba9f9e33b408fd2a15a0b0763765245\ne155ba93c003d301c454aff22b5ba0b10a5fbfbcd51529dd0895a5a4e2ad8d84\n2e5f2373823487d26009eb2717535824265900bf55c0fcfc37973a658ed14e47\n8daf93611e30fd2e5328203071cc4e264b7927b2002c79ddb5ed9332d8da0d94\n993005111c0f4e0a6e06d917a59be6649f96a1d16c6d5f6cede84a85a8be2e3a\n94a77bfcb1ed95cb7ec98122e46c991688f48a6780109c9951fbdf7e52ad5cea\nca1d232c47457d0d08d00c205fd7a091cf36a8a761c65db7c24b0e68bd66b83e\n184f4ff5ca6ea83d1fe3c2926097c119a48494818ce44909a66b1bdf427d1cb7\n673a556791810ad274b8b67168d806acee7922d362c52fb3b11939430b32b5ba\n3d0be02fb1b7780e1aee35a314555756163951cf37b46ca822eecf4cbc6763d0\n69e00944bbec453a8937cce17a80704e9e6a691dbcdebd2448cdb5eb1b8aef4c\n8e989f4ee7f6e66734d1a7a9ba837973c8c176f0d4234f5fae6b0ed6ba856c5a\n67c45fa55bb67b87315c216c76398f039a83502ae00036bd82aab2fc692d8f0b\na6ca4a8021916f9aa3a383ff3acf383f53d885a49365ecf23ecd30f2bd204b7b\n5f9d6a99759d8c9c60e10dd037717271423dcfbe97438248a812a1db00229d6b\n14f80fd349988a842bfa248a27017a499a9d6518ca9b127ccbc8390ffad2d656\n3a84d1cd9c1f86432462df68ae1c307f041ee7166b7eaf3b9e51c7923e36a578\n00a505eff79dec34dc2826ccddfc2d103da3803973a832da107ae08517695ada\naa7731650a9d475d0ba725eb2f300f52134cfaf7f822c7f31adbdc28857c8b18\neb9c52549a74068edc4e9ebb8e065fed61161c8a74670199fa4e325ba67148e7\n0a1e7ecb21d78afad30c6de81e29d1a7ea2d278b85db7900afee050d1aca5adc\n219a30cdfc498f387bcfa2b610ed468c3420a8d6f4bc347891dd964fa44c360d\n3bb6211995561a808540f25dd3ee310d7c92a0e9484738a1d1eedeeb55d302ac\n85eb3ef0ab7418c702fdd9507fe6202e5c500ccb072d6be043df029e32c4f1fb\nd203532a866bc66a73a52772627de1a1d3cb651014ce986593fc1807db6bd2ec\n7f596917717624cdae2ecae3a1c6acab900b61d882d39ccc1a706b38d4165dcb\nc70fe67c8275275c2f1bc872445e18a49d1925f5cb0bf75626b02b52f61dd7f8\n8b3163c86e0685b45fce8f2f0368d95466e7128348b5ed3e765539bb45a35934\n8b28ac5b26e53eb2d95ef60ac11ed77228004b41c6a91e26db63a97311d58bad\nb8e4db3b32c4e4df898f2cf012da175397bab3e54a298bddc320dbf70e4a7199\n99f386b884962e7ff522a6f727aca0796641f2c6d6138ae0c4a534f80fd6a301\nceff1e4a0b54cfa00ab4351f0b6b9484ede19a7db64e29baf2c3fc09e787ef8f\n4bb075114cfb109f1f6b418b66b48da6a23e25f712ebfd3adda9ea656d6c5e6d\nc41cbbd711acfd8a3792451078bd5d57e39eb4838e2c0abf5db1821fc041e93d\n672dbe33aba9fd2248218e170c34c18ee980eb2753f75a87bda81e4f9839638e\ndefeb188f79fc18c737bb2d466349c242f768a2fd0ff7ffa3ebc6ec714a94aef\nc4ab7a67072b39e3f1c28a9e4c7f04bc9b158c246f41e12a1759f5f9becdeca6\n7b23f141d9110cb81db5cea5610d18d142fe504c8abacd9b7e4287c5ccaa4fb6\n426f5bed9c810581efee9dec56e37540fe1667966767008580ae1c3e73ead685\nb95e856eead79711d798f81dc5168599b6080c0152258f2c898035be7239b1c9\n100d24a1557151d68c21884def1664883a04a70128c5c5462bf177c6a5e21463\nc8d80d198dd9a7c1fe76900fd341f8ca5294791bacc744b6330ed1ebe342eae0\n72d9716470bfadf889eadb80d5edf8f0a7796314a7ff8d47c831933f92ed4392\nf3e4d53d401c47faf4c560576f38184c82ba8ed45c70c549cf7d68ab54c2d03e\n23430d70604bfcd8a8e27445f0aa13582768e75bbd23a358a51e225f972874d7\nf7181c605030ad4fc2cd91c1bc3f6e44449931448890d4f7e580e2c8ad6b7cd6\n14704ee04c75822c2bbc0ad031c4de10a2f4bd580a3c703c60bc5ade91c03b2f\nd24857caa4e30dc4a11daa26045b7f984b8577daa4be487add11e48ec7eacdc0\nb8c41789f6bd6312914fce8787ca9b678a041731593ec5ca20e8b1b594f343f0\needa0a33b04dee41d2c3fd11771e9c409a4fb689208b73ee28e68d1ab3596e70\n84bb70f26ae9264497639181bcd9a3940bc019fe20361b61c1621ce35c407090\n2f288c62442ca2bdcd35385dd0b5e48af827f7de2d1e3199b22495e3fee9472c\n2c6549de6ab19c6f996a29e0176d939c5a6ebc69a2e74cd43708cc317c50a79d\n1fa21434a28e539de4d61a5bc87be9b078313f690b9130211d41941359c911d8\n58026dcd0ca91d09ba751dd9e7f4f82902fb02b42d3b091d1feff20835ea6b05\nbf0ddfca8d3ed1dac2a58ce91233117a1872cc6a5579106ebb8800f2ecf5018e\n1be8254a60982e56b211af1541e5f64a18141c6fa68197900f59e801cb855eaf\n66111e6c08a4486d15e70522d3bcd9bf27f30f7bde8bbdb272ce764e49d6c901\nbd75ccafda4dfa6449560ea2b38727ee00f7d98f104a57c6a8730b6556b27ff4\n5836ce4254b53ed91e877606199660ffb6b2df1a3f66c6884a00b817bc4cd366\na6e6164e5c31f7fa1d0e3e7ff67baa68e0c96a9f4a738f75d3ce8b523e9ad89d\n9ad5a45b0a1be6e28d0ef08a9315d2abfdd784285f95437e9cc3c4262a96e58f\ne887987f2adec7791d66d7a743551cdb0ea0b4c704870b6d9e179d5f090f0d80\nde0963fb0cfaa0751f035114fef578e44e52f2f119ce5ba50f9d2a2d6fcd974f\ndcd63342210837e4eca5750073a07f63235b00b4d7205e1d2f7f510d24ed9c1b\naaa6df5a5a4b0c90621e416785558d05c60ea50189dc727d7546e354a02a5e7e\nf080015e3f47c9d38f43c652ac6f4d89db580cbbe6db8a5d328497e9094bdcbb\n4c5e48ccf6a7ae30c0812bcfe1f5489be6051c62b5aa46d39acacf87acfee079\n44bc5301340f5c0f402d93e944f0fba1409b926d968cf893871e6e82e3a5cf66\n1fecdc28b8f49c68fec1eab5c1bc74e4c0cbf6a236afe3341da149c18db1ffe2\n801a5a4469df7936389c5dfd5cd6825585c6fd115322dedf3ad540c2b0306690\n83c2ed2e11f1edbd10d3dbb4d71d1397842c36994495ef95de6b366dae2322e0\n5e2dc08302af814364e9e880fbc1266c02429997f1013be347d911444ebfe03c\nf3a409021cbb1e9b25ed96b87a9798487770a0c4a0dc032a1af5fff31496a68a\nf0c83eec12c651eca6ffd40919b132abbca34f4cef8f2b9a8ae02c0b3004306b\n336ef5cf8b8afabce1fec8052bb4d720828edfb402f6a5b5bc4c5ea1db080da8\n5fba9effc2f7f7b489106ee7527a789b3d9ebb68dfcb29c0f9fb22b0ee97cef1\n5d02ee15d752e2cacc1e137aec6ba284e739fb1dc5f0784914b0fb8a3a175e07\nc7a93d1a310d9ad826a83e34fd7598a435cd3e2187620f9680e73ba2a6409fc8\n44f0802c6114fccdf30d6c525977f0be0d091a60fda1ae8c046ec0b4ff7dd208\n6e0135a53c7511fa4b860c18d34f1f54392e32a963673fa69cb5a2311f55d26b\nd38c3a5ddf434702110c9f959cebad4ac113b7c274a626742f0eaacf34acfeb9\nc7f1da5d961a103180cf3606b4b9f8f74c0db7ed691174f797cfa782f4443e45\nb9ebcdac8d19a150ee208265487c5587a30f26da7c7fe34f44103d30dd29c753\n8f333586134955c8a860337c716b9871a768a181a0fddf030d97cc70761b48e1\nc83c18235d3baea7592efc689ee393a0040377d0e08e043b08e03683f50b6523\ne04593713d69216e78fc6433f9890a01f7a61a4e73e826241da97a8385c4f995\na55ba955d09428d86e27cb2009f652fdd5ba1971584891015e2a7ac3ca5e0f9b\neb0ce96707e16f2a71ce2a62b43ccc3cbd8cab1b37cf6209f08b33bca9d59e74\n1c763f7c37219d9b8aaa22be16a6fdf3880946c3cc8700e1b04bbf8510bc61a5\nd12938181aa9d2c409d460a322ea631264eb2e7bcb56e841b39197852f2bca62\n4fbe69b746d0f9c4afda14ba80d8460230cf7a6b08795819fbe208d3bb24aab6\nc103172c3de86a9b3d055d7df86afcaebf39a5748a960015f66acaee2fef90cc\n5ad3a4d27dbd78d2bcbf03be5467a3be56be91d119ea1da489ba51ea2c46bed1\n98d58dad122f9ead1c8befb496e264bc1096cf3036f9634eade29c325b766767\n3fcd0f29b9ecc605d63cfb4b1fd91f6b8b521805624ddee9e96b51707a2aabab\n84368aba1e61964a0c9de8082bbec9a52edbd5611a727306cc50a1e572531efd\n86727988ea16d88b4d0795272ce92601b462b93f0426a3a8d154c1aa7054a503\n5d8c10f15ab9cfd1c66c04023ca9aa679da357fe42c526af58f662ebca062195\n3fd55d2451d17ae2e590e73c38ff14b8dda9e6ffd45b9ae32cd646691a953dfa\ne64c8bf528730d41eaac3f24601538344e1b2ceac19b5fff891deaf0dafa43aa\nb223d5f4d3a1221b816ed1256f3df539e83b9b51d96c72d6956ac27ecb3552e2\nbf18259676da5884232beadf4c50d3fed9b198005c4c88368b04acb9c0acd002\n3d36ebd2545590f3bb2cb390e0a3569860a2fe9683ad7c9cbbefbda91315b228\n3c11fe9c7972aa299eb7116e713bff50e51b44577589a7c198603a555369e5fa\n31c8e5e636fea9bd68e0a66fac1943da5902ac61b26d02cf5c6bf54f4f63e827\nfd1e4e375bcf573eea23309a5e782031371bcf54224ee9344d7404d89092cca1\n35f052490c545a4c5ac9cfa2c5c6a8689da44dc600a3fa9ccad0e75589ed116c\n28d28b3091c3eaa2c4c125450ac3c7b5e1320cb470fd46714de841c4df8e04cd\na459f5eb9da56c03aeace327a1b6073dece9b0b2cbd851c71250d2e632fbb10b\n43a4c79afe241a26258d3f1b1df75579bc5381449f1a838084b7f86ab91dc3b8\n945d65b91400d51d187f0576345f75377470d2b92700495825f97119559ecc0f\n0b7c76c099c158a3c04b4e1a694aa910f38e83f623bf7072ffc021a57c3e6d60\n11fa927c7bc0655e8264afdf7022aeb76023c9bf73affced771f4955c661247b\n7aebb95960ed5d11fd787a18d696ec9c9f2f081b3039ed3a5976d887bbc62f1d\nad16c3ac173a7e3673ddc9c0968417d4d4b9cebb9ac8f7774a7724dfc2019de7\n2711faca94e80a21413e4b8f32f9ea99798bb5e7ea52e743fbe3c662fd376ee2\n5b8365e4f535a66e4a3167f63be99c12ef0dfa2c7e39172fe6371ed7ee0678df\nc27c74b9b763662dffd19f62dea51ae2082047bf9b99b16657da00657b8eef90\nb7e758c19d056b709821c6f1cff1ce662356e045c2ad4173afc60bbd0f5f188b\ncc8c005d1d79dbb98e3e1faf3c93b45167a6280075da491d6494cf7c399e19d9\n4fb50b00b2508e9282065ab1072b8e1ba0ab3078f6380a3e56e02d865e2a2e4c\nb94c4d6734ebf4643022684a8ff1b630a876ba4c805b1f9da541f3cee9ee7c96\n7ad972f4501d4ff351ad0f5d8c22e500f9f70b5533419be30e0fc6bdc2b0093b\n1b10dfcf6a798b51ff59f0cd51bd208e994ddaa73060eff0a49920236e7beaaa\ne65d80ca88f36e5216b961f3d564691bd61f12f0bea3e3e3c26c5f86aec50f68\nca75ac905ce5a3f822222fd63d32bdacbcf7d9acf123e354de553ff8002b9d82\nf98f5bda34be444fec1863318032d8639dc1261b16f833a0a2d989bd6afb7144\n97d06e2bd9257261593f8d75c86aa1ff342ba90a9a3cf89b066c482ac5744866\n3cf5fd45d9da8ba8364a569cb4c691a9c1c6d313f1d4d11cf8ee183a13de9f9d\n10be0e803e0991376cadab693afabd9ca02d2a667efbfe19cca2cf2b09e9f3db\n0440fef4993bccf141bd886afed9008e516a61e66c6d94dd5cbdd988a508f09e\n90f0cc12ce5770b32e75d769d1cbb17d3490831c5be2765fd8a41eec64723420\n9316cabf2f7e00be9a8de673fd6a9aef84e6a7a593fe0395740be07e1a98217e\nf388f14336777cab5079aa6ea885ef2c9e2444a37157431118d0983b81d152c1\n5d99f7c78aebbb79764cba527661b742cbbc2db8202774b968571fc4f76316f8\n4149c74215ab991b0104d97100fc7a9ca40606a8f6ac76722b0834467afdd90f\n39a32ddd1740e23cefbe76a0b2ef556ede6d5bfd1fc388dbde783bf007713a79\n8db55ee829d431c7802bd747fa2867f3099b9b3ce174766ae91181cf30e64aeb\n32278f14a6c697691f9b92810ef226bde8d88c46c7b09e38d40326b75adf8dde\n4e5735a1785bb9758f20b4ca12e10d4e43253f557c66bea38e032f3296ef1b37\n4f1dac8357612c95a7857444fae85014e0b639a04a7840d5f659b2774950c811\n780ac2d4bec1f67e9d91e7122cb0f2ecf81f2155d797fdfabc49427249b069f8\n17a53f85bf109be40efc48b1a43678cb8fcc3e40dd2630527d970842c960b266\n1e68f08a2d4c2e78350edb18eb3398abed0d667ab411bb535335e22341ab27ad\n7743bab55ec8f9084006190f6f631ba23d0e187bc89a21303ab567dfdebae465\n7b2f12e664753da85cedda08c25da1ba01d198a7bb4a913f97e80672aa62e460\n420a65bf4efec755caa59b8f200a934b972e4d2148341ada4df389c8e7e4e773\n18864075878be2270eb8c11a9926f81f41bde90aba6841e7e775cc9eb2f51bb9\n9d85d17230e6049b144fd6f28cacd0772dea813530a79c0f6db7cd9aad3065d2\na751d157e8cfd3dbdaea4aa9f21f85045c4d13f47f801b5e500640262c1ba676\n9adfc4d001611785d1cce43227629fd3650395f784799a9d68cde0c25b0c3b59\n507cbefe3fd2b578bf26b9111ff5794fabfb3cab094840688058b41de0e84099\n6b717acd73aa9c47d93dcb9470c7560e6c95b9cdab10c6fef8d23ceca84234a7\n558569d828e0210b6de8167dccf041ab4c99a1d35ca9800624a8f8bc1e6c524d\n02de68d91437fe00653cf2cf2cc77e433c226947f6c8da313a43ef44e77ec641\nc056ee89f475bebc46503875fffc99d4da774fdfd2ae215b44a5bf16b8c924e1\n7e714bbd8a4a73baa2cbc1e7fda7dd048e41058e315e26f4c4ee4e8c19c94cd9\n2520e27f8cb64db6fe95832abbfabf386c9b4c1360a02aad5a65498c22d37887\n1afe0e9d2b567944915d6b3bd304c00374739957ae49a3944d58ea45c0d4de3b\nac86aacfadbdd00238e809a648699a9337c9b6644c67afd7ea7c605ab52b346a\n975942edca65974b5bbfc5798a96ba6edc98b8837f995e160fcff8ffee18fd9d\n2c0faaa6d2674ead1bdb0b81ff0a96e8af3a3cbb12231f9f4865f9fd194aac63\n95bc0f33576ee89f93e7d30dc4c5ae6bdaba1cb3da9fe6e88d5a1b0d06c04e2d\n995a054aa73607d885cb1e75b154872b94a461785a4c1f269e931a0dc31defaf\ndba3901d75b3f28bcc546268b9b89174c22173f07f18b92011ad776fc0fa31d2\n7da125611aff13a7c4c10698b9cab5bdac1c03bfeccb20fe3068e366d77aa8aa\nfe9cb63d57757dbc4bb91a92e27229d774074d13aa21a3fce50ea7cc969ecb1a\n50e3f36a6a982a5971963fef8425473063549e272c5a2f7df1e2469640947807\n8f192fbd3713ec9ac7f3346791cf9ccd93accee3efcbd8da37c47c1f8cf069db\ne19ba0a3c6490bc4380b063ac8395aa7602b985af5a6622aae239a8e02f2992c\nda1c426f2a2974342e435dd4e2864f56553d6105645957e8ab12dcb7e8962196\n8eb1ab959872584b695977506472d14417522a6b14ddaa173f81c6d67aff2787\ne9860d1cc3d36a6685435105582d334a1ce6f35a44608a6c246059f7deb4afa4\n0e0e1e461a007aecab08a9d241536b85aaa35d595f734d3eea485d22bb653b14\n9dd5a9b632d2193c393e29feff2619f79fd805bceca4ad85877867d339de5ea8\na48d95af3f91f3ddc38c21bc451ef7e38688f812c4cebb4bb69d9835faa5b0f7\n41bc8c7493ebc974d11218679fef9d2ae77e5e42200af7685b7ff5b8395e13a3\ne5542508275a47d9cf3c705f0f9a4bcaf29752e88dc6711312f012a5436477e3\n60acb5c9f116e279ebff4b1573c2a29caa7c875beef6e1f6d54c7a5c85691738\nd07d88b8d8ea616fc49372c591aaf50003934d2fb56702cdcf39d747fb4e230e\n7b8929a345bfc0a56f06e14912cc567f23cf4fa8a9449d247f52915f47598c13\n8000c176bf1905d42ac72fb6428862f5b2825715e25d4adfbf47597a4e6bac5c\n6ef7cd617630b1270152100ede1a995b41a122e0853a641b66579a818bd0dd33\n2282cce5c8179f5f8f52567c0f34117824f21208bc04fbc5d468b6a6cef8bc22\n631ed4724e74af727807395e35cb5a02b6d49288564e7ff2c6192ff104227dba\nd9d09711d6be70f151216ad994bcf850c570e288a6d13b1be1d7057acc614034\n7ba4b1791a4e948cc68e6e3a1dc9398ff0df8bbfbb3ee8dfdef4b2227751b491\n814e6b81de0fd596c5f909d7eb70bc3294a7f14da98743c97cd35e8ca3611cd0\nd428fc80847fb3bc948432dcaa062c98fc0895839aef7059bad8d8001c33c8ee\n4a376fb54d427e8e33e01b8b320d8c0e156de84b9993fa98934dbed5efa41293\n91fedb05b103c19b9b9cc887624621fee56b29d44d56b597013f7e19ded0df31\ncb48ea6e205eb79f02254ff9d1aee9ef8bbf7511f9a23ef4d53746c75c2367b2\n747a341d993055262ba15fe48f2f2e3cda2a7862b351ec881e00fa13c65a61e5\nffe723fe2f6a5b9fdec9af450d2431675e1aee407f9b1db491e7134a6c8b759d\n460f61ccb4c000a4a8285256549753d39e9e02d60b95f6fc42e69cf2258d8568\nf34220f437bfbd3dc0c44ab31dcf33a97672c3b8aa70d3a08eddcce381e5f11c\n79066019efd2e7c3307091a0f0fa5b24594952a30369ae68ecd19cc07bda35bc\n36639f8be539234f5a56d95acdae8338bc1eb20a9362391aa5b040c4502cf75c\n6118519acdeb8f0726b2d7415ea25c36364b33840de805395def022570b34e89\n10d78f19fc86b9fb296f99325666593e0f3952aa2726f8ca260d06d0de226a43\n17f0641f874d32b1f0d6031d9ce13fa0cc5c956db520ca17926469f12f40b543\n12a8ba83d187f43804895d4cc51025afbec5c1ed156d09a64ce96c974a3f2a26\n69134a4e1317709e17c1d038bae8c161b71f0e704e416fd3e9bfc1a2592d51a3\n8ebe269743f7704d9a0de3fbe4a059df125651b709bdd0582f01506213c403cf\nb8d1034a1a38a09d5b1405cfdca405b04ac6bb8ce3aab7dc9f1c27133eb16b42\n0aa9663cfd4eea285e422cd8abde6792b7ba7b3e90529629aea34f00e81b1dd8\n5345532c560082764e4a8a3a007adcb7892065461adf3dc78b300d60d56e636f\n6481d6ef93a80f2bc7197996c07871c070be82eef1f650dd2413e5a87d54795d\n35c11239bbfb4cb11ed0d3c60bbbc1794ea6499bcc1b511cf281f4e7b33d7bb4\n20c81133e62c62690dd98e8ee2e30aee10151725ac8211ccbe9ab59a22585233\n6ec52d04ab69d976cf22e0e8a9d16d7de139b9c510808a92bcab77199764fb76\n32817891e81e258ec49d389a6356a0f3c949d10e555ee8266601ed3873d6df46\n356cea99563fb7f540cdceee77abe73116f24713493ce7b79e14952fe597e87f\nbfba53c290805c36542662bef833a7e0eaeb3bb1b98c3daf0565465c9372afc1\n32042339be21ecebbdd3aeeaf25f97fb15d155edd9ec8046b97568464c9a81a1\n050c3bd3c16796ff7237666d3a3d217f06af0ea62cb800151f59b213bcaf0bb8\ndf93da4d9dfaa703fd4009dd53520eddf02eafe8b04b1aeda8de6dae8fe066ef\nc732230661b97fe066c1fbb848a8739c182a29437b42334a9b93a45a787bc98b\n71af89d4ca222282b98ab2764d5f4652c81c55d2a7f4b09f8f8f6afa1cb88abf\n8bccb37d8e491d2dc3822b5d0b6e2ef1d95e77e3f8720ee2b22df9d4c6af96bf\n831477789344f4cb4fa03d9da3ae6e7d00e8e3a9ac8503d5568be51dc044a9bb\n40afb3d6ae8ae160fc9133e2fbabd2dc7391920bb44191eeb971c0dbb6f5787c\n047f866571d1778035a60e27ad86ef1991518d377a70e1d54eaf35fed9cddc85\nb86dc1ac6e18b55dd07aa7d8ddd4904fc4529b131bfe3bf5ab67da671903e66d\n65fe29382aff367766bc4133e64575a9d9ec4086fadfc1355fb42aa274a6af0f\n6bff90eaaea51d399c346924982160a3347b6db3ae592d44bec2b8eeb1b22cda\nc10cd883b71b6abd7150e10d41bf9368f19db447ced4c1e9b7ed8f0a955f1568\n2f84298f5452057a01bc69d663989660f8e70e460100a4353cd9a69b5ebb0037\nffdd4aa9f63317f449a52880151046bfc883ea6d2d4147923dc0a9ec0109358c\ne662ff496e4fdc81f711de1821271c688fafffd8717e586cff1147b4a3a0de93\n34dbb70ad80c72740506cfebd69946d657125abf630e1ce9379367ebf2155092\nb0cf80d5f0cf10866007ccefc64a2cd4b48d3e9ebc7294354b1bde82f419aebe\n814322ce9086457e8029b304c8cada804b3942e6a8a5c7abe6dd8b7047df7f05\n82f31c230616e555c59b26625c29aead1eccaafbee08cfe6032bfebe1eb525f3\na188a62b29e632964a99e3d4cff5b962bb28aabb355e3360edb4dde181d694a4\n01ef5a9c9b2a22ff8122cb5e42889a4ef299d2573673fa9f6ba9ecb73cf29ea6\n58c37ac9439e163fc552c48a1b60cd80928bb84d0f8b1cf2e39c6794c510a156\n06f242bcf2bd78cdd5a93bbf991f461adb81abce61e168d74379776f5df0fde0\n3f8225cba99b20b1564bea245ab2a2bdcb3956f9d1f02c2169a990aaf2bd57a2\n9eda00b8320189b0fc830867362d0295d0d54e485b100773a046c9d6f0318f73\n5e6b15d4e0c8c0cd4ed939546eeb5d0417e826758ff71210ebe712f8e95d26b4\n02cdaa715ebcb7f9239b57cf252b5e903a5145d1ca5c4fea3cc40fb619ac006f\nb338dd8b83f81ba168206f67c3e76e1627e383c0342262add38d890f6f71f30b\n3b4a4dbfab402067dc61ac1852f8048d2b821914269ff868e0888686fd11980e\nd2519632935b6985080b0f5b76b13017dfa718acb6153d0b27799cee11571ac7\nc24c3e6b6b1e1b296238198421b99c508d6b76d7223ddd6b47421d1bd0c55784\nb2a11811c3195ba97c5d6ae215220f1acf5cb2469a5fa4c56d651ac42a970986\n261cffddbd8b9a139eb043cabe1a89f447b47c1d176db753ae17a6398ac738f0\nbef85dff033e4fcf1e7b2be8e135014ac82513ee7657b2094b773019af90f416\ne6d3136b1f1a0af8f55d84c688f0c2210f98e58c711312c3f5e1c45ba9405106\n5c885921e91621e7c5f5e5e3fa6d64039817aef7c6e5b728b504b2ec9bb32e24\n53d5c3bd4c8d70064018d9f8eb51dc6f82d92c205f6e155eb6d172779e6cfe7d\ncec0f3997436c553c6bdcdb7083b9aaf8145d5c7df6462dac27f7fd1c26abb71\n7619b46b276ffff65d23439777df6e3d8495b22436101dc4168a543c26a2004f\nc578768b1a43f6e9ddfa028623aed2c4ba6787bdd8a443fc33635d7ec461ad86\nbaa4153847656579414083aabde833f354943504928e18798bcab85f41aa6440\n8328f4d3f2c7dc01b7b51d980ac22e982c8dae315a57fd855278a8a01f4e5b37\n504432813d565ec54bfd4d072cfe298f9c22c2e05e2fb9daa3d8a0cea9799c55\n0c32a773c0641a415570d514b51f660fdf559f54019df5e3f1b4c61f7de24d53\n6c0703b2c79804cebdf0116732bd499f850223df6d219109451c0bb448a874f8\n42a466277a22bfc481d384d7fd6505bb3ef3ee555b8e7dcfc5abd892c35db1a3\n4f5e56edc9ccce355d4bb752269a8c89dbc6a31b152817e74a3119eb0c07295c\ne0d9cbaa71ac8bdaeaf76d2f912919d3321d8ffee9fe6481e4fccd79e80369ea\n21c98af14f9ff50689a6699914b5c049e530ecbb666797fd760f66f3b2057cb9\nc93a1510c27386d08576d5d3f2ad0978dbec793fa6e082174b330735f9445fd6\necffdebeefdd5567e15bd3aa6393d61d1b371681a8f65f6651f54cc9fc59eecf\n7670ff2b4ec0a2035815315f49db0c9e26eb0e7f6c0098f425e06876110f5128\ne1b9ed81ec3c37f9d6ef563ff28a8f711095f19a303ecaab97a253ab9e1b90ac\n09f3d356618c257875c5e0cc575bf1b0b25d5020e9326a2787a58e315bbe2968\nc21d758c8c900f3feff4f93e44556468e84cd3a14528eb3f12295563c230ecff\n4b10f0d3d1c294cc60b1c3db381c857aee13294131378187b4c3743e0b76b343\na3a9b07c2e6b7eb35e99ceec94c3347c58034a84b99f0870b4c489f04c455ccb\n7db54c9f9ef91c0b2fa594e4317ed0e6f0c6aa69c6ab3c983d1b1301aeef5329\nfb295adb6a103ae920407b4ba17e1a0cc586ccaa626e66e22ad2bf530ebaf2ca\n1d1a80aaf58b8a3260b41c2d8832a987a8787ffaf22957d654a8f8d0cfaf5c79\neab7ffe9495b02f8bc7813c50bb5b6bbf61ebc7e7565450be27d685152dfa213\n938c04ee5181fb0ae7ff3efad9c363177e22336df9043ec22f8271fefa19c69c\nae751e41e3c63a3289cca82cbea700c163e505a0a554aa7c027bab67eb5f28d5\n38acb8c41bdde3fc8e0276e63a2f4766bf0e353576009bd765db429ef4c68821\n328a041e8bfc92e8fcb6af6616db3075362fb4bfa0f71d46ccf16edd5a362356\ndcc4d7460b167802f6fc0e7bb6b83dbdbdab620b60d1e98a9cad17d73732567f\nbdee1d217b02f5e6e2e3077d45c3a99f15e289f616350f876c1ecf60e1fefa2b\n20af5edf9b00aaf2d1572f502ace33fcab04f28fa6fb7c8ddc41c4690227e2c8\n97bddc1a5a1c11babf547727100e5cc09e41d4ca39113d764da7d1723307d23e\nca113c636986f91ca61e2eab93aaec5155eeb8ea897aaf3ff343a20389ebe369\n500653eeddccf4ecf8e6e201d538b3308c469cae909158200ae5fc0813cca7c1\n949177656d93a2274f2cce6f74cfb61f39739ddb4ff4f719c46a3af60ef80b17\n79712ea4281e7fda32929987d4c906d2fed0f2c617cf3ed32dc4e2874f93dc6d\n1e9420d944cb468210823a19677718bb26c29dbcc71bfe5cf23fc3be1bc46075\n8ef0cfcfe6598d4b953c670020da874a6ce1e5f641956ce57f57daf6195411a4\nfe39038a594c6621bfd14c272745d16b8432710f92a689cb782ee85f7145df71\neeef33e6118cc9d9a2c7932cd498256fe21a4a3c2ce9bc079b6ac4ed3eb21f11\n471650bac51d69fd81f402d64e1506b55b1b5f914ad0dd2bbd95c58fb2f24dfe\n4c9da08d834fa349d645e1189a8cdf5214610ed977861e42d6c47ac4026b8c56\n3a7a6eafe2c5b8668ff684a5a79b9879ffd7afe742f962b72908617adc681d7d\n7245e36fc3836438c2b260406d1abe3c7c8ae83fd47e618c5dcab795644e5de5\n7787819f619a94d4de3525ac3000448767af7f117bc5f374483fd32e30d334ca\n0be86d845decddc3668fbc869a31dd01821f5616bc2b12b910ac1b5e991207c6\n03b389fc28058d7fb6239d24b0de97eba5f9bf8f40726b83c0498f8df449c74c\n483c284c6534c4ce72c891a23c539e215e942d9f2637c7e3eba4247d0dd01a80\n02d66e3c6b303d57eeadc17a99b19c13e4b4ba8bdd119bb7c274870dc3703b44\n5400490204e1f68c0669ae67ca95fe5c692c02899f7fd1c8308f854f7c88eb84\nea00652456476662f069219a8f283c547ced588ecaaee0eccd3bc529ec1048ff\n3c3c5e128baa654ae85d997dd938aca7825f130d6969991d553fcef5fb0a5991\nb89c0e2bbec984343a65d283d55e87999cc5657feaf7461cdb1e078a879f5bcb\n366bbbac74e72d7d69c22ee06850e5f686bfe426aeb6651f13be9970e6c047a6\ncabd1cae184273a41853f0aad04e61a28f7251d8f21c96405dcbfb0a7b3cb943\nb02bcaeb73bd14c07a64cb4feb1dec416e5a50c8dc492a02f0b1b4dfac3e6e99\n559b665c3e2e612b71f33cfc63c86cd49ec3265df2eb1770af0a93b4aac2e787\ne5e452de0056e3eb4c9987f9619678acf1c96e1cf0ce0579c71ef56d8d6c5565\nad46c8a56f261ee4cc4a1714ada2716815a7ceedea10ae0a131636e374b23695\nec811cfe9a323263be26a1bb57e88d6fc25963b9d066ce956b7d65b8431e18f4\nd32e39a9ef4030bb3d534944e7d701d4c167095ee0a258156d594c21d7825775\naa5c172253d3c60a1da8d3a6139bfebd2b0088661b15dc8d2413c43b402b7f80\ne80aa51ce42aeeb603cbc381ad54dcd4815e2580e7d595c3ed7ffa8ffb334353\n0d00c30aa25285bf5cb579da573b28d6715034ad18b948fb96b21ca3625901b7\n8ede76633325fa213f299e7a0de6756467f49e69a0fe012729498a9a11f08d64\n46b835a5e513214a0f028eaccb5dc8154d6abccd7c5ad06cb2bb7a561499c87f\nb1cd74162cf30cd3e41c0a74763afb5899ad99fce59c5d9b4d657645d087fcc5\nb89ca2c6d73771bfb656cef19118f3c4169b90ffd11735b4cd02e45a2c10348f\n2fc863bfe853326be2372b7e33316b6865c780bb8a3da5540973f6fbfafe99b7\n99743045960177981ada72a404c0af46bdf7b50855787ca50579a45962360ae8\n54ba2d628161a36e2f3a5519e6264408b279511a91d728445d4e2a1ce06a671c\n01072e21eec13d5fb1e8319a576295d0e6327c2edb71ce1e6b3d4b718b416945\nf08705d7664f07368ebe4ec465c8012bb84bc492680110611b8665c66ff66582\n1ab59586fde88bdd9b242564eecf18da2af435c501bed7e81bb0fcbaf3aeb06b\n2656f460a559808f842c7a90e6278c86b77a5f55aec96678b326791b9d1fcf91\nb201beb926e66a34c5a7d2140b135a0d5180e7229a734a5ce91b0de10ec1854c\ncb3eb9f702f52f2c804680744f583d4f72270c1774bc382c1a1cb341070aa2a0\nb80310b153f0440a9b892dab5726dfa15b0b491a511ea3a233785e3570231e09\nd62ee2c65e5f31772bb95220261e1e15884585f1976443809ee3911fc691d4a1\nd67ab91c712c23ef849d153fdeffe898437f8b13ca3de282a1003e48d30dffcf\n27f09fbd950ae6bac7977089c02c26e26ddd4f6ecf43dd5114d65eedfd6825fd\n7dd7a46047fc2dc628cd95e5c3a518febb70ed20c4cef8fd8e66cf93bcaa1288\n92d398048075c0a539b04976d790a45def974ee863d7ca7725dbe47c0f54bbf1\na62cae24c33d6860c89823e5101ed703477dd1c448dedbb9461c003d6d5af4ca\n182d81f7e50e98254c3a8c43cdd723b3cc2940e3603d7ebb3b0bc64b33206294\n4ef2e8bfdbf08355d9fec7177857d7ba20c69a984484737b698517436ef4bea5\nb575487d074c6a808437ae4e3ea356bebcbaa0d257cb875dd316512a8cff0df7\nc98ccc1310c5bcbcacb220f0766fbf68cb4962e1537720ceef260525a393ace5\n4472824d89cebe1885d282f16f9d02a54ee9cdf3886d1d26bae70514e50dd73d\n88ab735ab95eb3351014ba9a76c326ed3dd82276d3c8437aadfcf26f3d21128d\nd591614383f1b87f4b6618384c34e046fb512df307de3707ea75f6eb136728c2\n4789561e749808fbffce8682f16a332e2739a879641a2b2e3e973dc507bce1cc\n478a41f80da9ff08b1184d769f036cc7d90f27e8dd3fe39d38cdbae26e6d2db9\n497b367a9b19f59f8c2efe41e44ccb7f81a4d4a093c4799bcb4426eb12952246\n61b173f94d3d9704f5bb77fc5309bbc8eb87ea91a482c232c5bc1218c5ceee94\n05686beec2474bacee754f45d35e65d39df6d74d24ee839e7e6b876471acc121\n0fec304da8888beb0bcb2d251951cee4533f8bf9d48322d267d68d6965684532\n37f56d5cf4618fd58c658b377e2cccf8a6d89d3931facf3ef856140afb2dae47\n4c7fc51aebcc0b4b04ae3daf9fb23b60de50005d5dcd6cea88f5320f859030bb\n6a77dd32507e32b1bb6999972de7beb5b369a0af34de934ae8e53e685da5fb39\n52b7b89be030dbec3d29742cb3044032b5f434104ff37640a59fa1529a7e978a\n58613e40d10de97952f0a51c589a7b8532141841c973614be40db6d10b628d6b\nacfaa0a04cda593718c097be1212b5188c4d34e987226967358c59dfb9a75036\n84f038713ba853ac2119527fff25abe68f92c620895b5e0441a811c8b2d46e49\nb87f73046a7146db4e42621c346b53f9976fe08f15ccc3f6c59c04ff4ec19d7f\nbb8ed7feaf83e0317c24f72c72b5c44f927ccd2813d08bf29b771ff8bf087bb2\ne25bea342fc10aee84a95bf46f48c569c57b9fdee0716a23684485960d76ba2e\n794534194043312a4d15c10e08921f9b6af5587f45f9e381b37677fccf80f87f\nab1bbcf0b38cb88c1bd6b964442492774d28c9da1841aaa9aa2af54dcb8b5dde\nc2dc23271db0365471a4efdfb9716c8614aa47f5d6aa0101e03d65914a31735d\n93511495b94ea7466d96e15743121675524f788d966d5614e58666a7dbad20ae\nfcfb4231f018b554d565fb66ef291f8612a1edfcfa129e1b93c654980477f1fe\nad771f9c07575febdaf73a938c89f743be71315d8292e4aecfc8a42b37b1c6fe\n3d73ebbd0caf8d491075c6b67aac3c0586cba2662b2396b17e767379aae4c5b7\n62ce752136a33c91585556ed20c9b64b1ad958215781ac8649d0e307957ce819\n799d8cd95271318966a8d81abaef7b15e0f8293110ac0847074e7679af123aea\ne537300041c41307f8c2522e2fb868d6f94022ade8ed8df1f778fc65822d11a0\nfbecf2e39ed2d65b7be3fd9b7a671c68d7d34589d4ef505248fc27815ba03cc0\n886576189b95da544f162265188a05c7e9c9c66fb85a0b3bb800d930f50d7d02\n141088b2eb438b15489d81e1a5637fabc3bfb9c4e7c12a9531010361f337e1ce\n9dccca85ebe9976b15e297bbf0223d08f5568f4f710b2fceba86048f20cb85ec\ne54a7af9ce4fdafe9348fe8179182601a5b95eb4a06441fb37ea56d19d7eec62\nfd8a1eab7571ebc4b14f6add4cd6fcc0aff1aca98c7e3ed93ddb54f60a6bc55a\ne0efa92354930094c82aa3de8ae12d41ffb4746197ee3132d7903544d4236099\n9e1a11baeabdd4a81b07eb6ba7214a201b01e5d4034751ec483927194208f933\n17e652f02fc4f1339ff006a3f0f94baff08b14b1b34ce801fecaa18cc121ee3b\n7c3aab08987f41ffbb83b7d9270fc7f859cab01b0b137aac2d46526670042cf6\n21cefce2d72b33fb8f7c43cd54e515c6dac37ceb6e6ddd2d79009264b8e11998\n6dd96b2b383d5fdc6879267510ac3dc80ea31902e2b5bdd50b03ee22dd9e402a\nca45afd908c0de3f461e4217f2b41dadebb84d98064f284ecdb119a9607757f7\nab84e69f17816bfabc2319c921d848f6c577bfc87a416eccdb83579f06c68836\ne879d22ce4b7d796bf99f547ed61e8d39f4b5a3d8056e750d5b326b849d93121\n93d685d42495365cd7d0a20334b901e6ef846068949f479a50a2f70c4c2e0080\nd5a1c3008c2fdca0733a995da1e0508300b3b0520e21b28f65bde4cc9a8fdbbb\nbdce0e00a5de1e58cb5fcb4c70a1bc17700b0208c871a9282997320e71f32753\n357fe557910a2ffeaedc8e8592b5f8dcc92ef5c7e7665e8c0dad9e6180c5a32a\n2d825def5f9a9a17004561f9ccb4643b427c070c0d14cf88965a43911cc6b9e4\n6efff56856692115b7fac574348157e8a23985a0fee20de5e26e14dc3e35c875\n945ea80731f78ef78f1e970d44d06d76f1871db67c20632575074376d339b33e\nb53c3814cfa585a0ac09f78918be6f6ea48631da1b000584822dc8999d64cb26\n986c1c6bcc740e4253bbf451ab2d106968f1251abbebb6f90fff5f17c1df8ade\n3a943933812574728719a141e0548abee17845f2ac2361df8e2620328e185fd2\naf8b87b55f64ebf7a11d7b7b8f79f24802060c84905e6c2f08a4cd5390ff28f2\n1c6845c608f51f9ffc7ad8d8c649cbf14e20b5227c5c4be9ed42c85c2a12da90\n417e54faab8292dcc0a1f1437497498088dbe07c027d222b6e2c65d3894ab9af\nce8b4d2823af6d436b67668861940ffe090c089cbb4e0170fc473d4a92eaea66\n76007f3c760ad22b9548e982046b102e91859184c40ea49b6b32e6a890863e08\n1b7ae8d6a48b339278520f2dc678b66ee3f8aedde368140a17bfc7ca167f1a85\n3cca08a323e923c37049425719d03363f0d5e51e7e0d5f44c880d2725bbb5aeb\nee7264cc5061fe6da1e03bdc8234c0fcec038151c4a697b51ae1dc38a9392b22\n5ed4675a5de20a349dbc91857da033f59c78916d4b8914e3ab628c7075cfc706\n99054467dff03bc464f80a3017847b938e217b04fd4f46241d48c7498d15a399\nc3c9ea217e527fc5561d0d885a6a63583b41f1d54a506278c572623250aa61e4\nada6bee6fed3593e5cb9a42f997cc91a0affd7fcd84b77c4e7f0bff3ab1f9746\necbd4dffb89b4108ee9097dbf9f9d075aca8ac546ac0d0a0c050ad871f4a2a05\n9fd0c298403e6ead4c093a2afe548bff23e742a9d8eb1fa00ad976534eb5149e\n336d2afd18ae235424fc6a06aba551c7e0dd26e92bbbd372c85aebfee8d48484\nb9419d515b81c4d5f3b086876b3e4ab635ba702d3f6b5b74eb25a9b123c4614c\na19a795f71a80c61b893e6ecb067209506931d38f584ae2d07207aa6adb29061\n0aabb496bb8cd38f14ffe001ce6023f683152ccf2a73b688b946e787e102c744\n0236587daa52df27d113b4dd4819de40b4efa54ba5e8b28f687b74a6333f5624\n69890331cda71177bf368d07c1b739892b1e0b0193f9befbf8d18bdbba23a727\n9795347d730e9c8f8dfbf356ee8142024190006e0e04dfcc4ed01a852189f3f3\ncb4e7073abed8aebee3a4dbc2dc10697100282778c9116b32c0392bd21017dbf\n1bc5800e827034243d084524628e8ab2733446a53e4f6caa0208364afa44a7ac\n8b1a242a248bdc223e025cad987ceda3001dec7fb40371c46bbea4bc80596408\n7fc5693e3293a55b5a3cf1295c5a79f955b7cd78f68ff6ddd7b8a0ae11930713\nf6521e4981207d7e427f3e1475f80631742e7c8f8403e79834ec540ff645d40d\n4e4a32d263c98c39512a2e6e307a35d5770c93a02a717a3943009ba38ec48f9d\ncab18ee6f266cfea9911feb778eb864dd58e8f4524b7c45b76503d992eabc505\n480443dd9145bd4e92382df65209f49e34ea080522eee9ca0dca2a023d613be5\n217b445e8592008c692066628e3e948eb9a5063e40f768b5de13fc75a98c5189\n7b1be013bd9021668f02e8d70f221be19421690f013f04560d1dc555aea003ff\nfaed9bb38c0602663ae07c7f5cbd14b217df7d5c3c2d252fc6a95e5fa28eb0fa\n78b03beaeb1f571b8a1928bbc1010707291d171fa5d19f88835138c0ebcc9ad6\nf6f07ffe2d02c2134a705bb9662e66e1cb11f2831b3cb0edc22ac3fa266cb848\nc04dc03c99b247629b7e643b6e24dfa2c98fba7df987fa4e943d67bd2d061ca4\n56d21caf5fe2c31d311322c24dd751390ebf06189064dc79d86ba84eda87aada\n8c141b902d544b42d82a5078f74b37bec60621c8df7e7e542b3b80254d6867b1\n1ad9d94c9630931aad8013b384fed9d9ca04968c832ac492d6a8a4e549b966fa\n6a52120662f29406d11bed53965e6ec209abcf496514f4aa5a8c2f36f46b5536\nc27669ad51efaabba6bbda7ad49122c244b8c58c6b647e3bbf2dfb46be9eaa29\nccad342ad5304c6c2d5a2d269d3758fc78440007eede89df8277fc8bfd1e1cda\nf9f44e67ea4c1a6d4456a0cbdae35e7d6db4a19389addc5c0e23480d4d300cf4\n3bf952bdcbbac892667acd4e88680335ace79d917b71d2cc07182af0c6798c74\nc7605fd7f7c70808cb6a2fd9cecce47ca372f24b5f95f6bf962114771c2cc9b1\nb8c346c93fe984c2eacc657fe30e8ba4f808ea155b995401dd0ad7e738f1bb3f\n7e2b89f8df057a09c64fc47d2b91dc72a8fc2d8fdb41a955fe92b580c0ed401a\n1dca8851e7d45086dc7019e02fd3f335115268bcc3406d603d5a44d7fbe9099b\n187ee5af078267036398d920755f5e8188fcc8cec47675590c60429951d0d63e\nd7bc32ac52f72396d17cc80d7dcb62b19e35db98f5954d2cbef1385910c4a200\n0f4dc65bf780bc28d5ee28a00a728c6e50cc6eb12c9419ea6a3c77028615fe4a\n8cdd61242cbf232bc1b0ff233194c6d5811fcead386294d14623a929bbe6febf\ne198ac2a6ca2b69e1012d85d3a8fe78813574bc3629121a85d3c5f7e042f0ab2\n95ea855fe690cb4d392875144ebf2b7641e0f681803dc6463b8bc2dd9ce8018a\nacc8621ddb03d463660e675bdd657d23e75619a70b41d754cec98d886c7679c3\n6c67173907f990d49a935d00fe3a4e139201b6699e4244eed2a7f8e137818f87\n7113af0f9cb12d26449e8379a44989613b1663cdf4362a4e8cd014bee740feb5\n0979467989de884f227b6133563184a5f8ff66ce3d612a9c473ac15d335c2bbc\nb4d18c4488aae6ebcc5df539f7ab6a7a37b03376b38b21cd1e3146c17521548f\n212a2426c9032649d844b8b831b3e8ee3e8dafedf87c38c6b0a3ffad3545abbb\nde5275db46c97455dc4e9c6bf0243eb363011fe2fa32f4dc63e4c694ad61adcf\nb56207af09bda5eacb5f086adc015979bc8f36d08e09d491b52f9b7f27fc96b6\n950fe2f68bed81895244a045ebae47b609e71ea12633cc71d9f6ab57e5ffa00f\n2cca5c7bf3ed0b8d6afa7f1a985a2fee9da0f9d2f69ce9c5302a70c774a311e1\n1646a9a1c83656ba90e31dd2a5b66fbc255b4c3a5618b7c3d4eb6c467fbeccb7\n0dd8627e66581643a7af844c71cb207f4bca25b4a361780f7c4aa28feeb010bc\n36c983ca8eeba18e165e611a6f075213263e2c619094f523083b8966679e686b\n0fd350cdc3df5d2334d27a22e554561cfbe1142a87d9f370ab78ca1e94644b88\na0bcf408eadea49734e2a1a4013b10c5eb997e215fb1d3821a23b32f27f2a3d7\n53b4a92170127528f266e66ee325ee53bb24a9714d36318c4c915225666039fc\n9ea5a09e9284e230b4513c949dffd4a0c648cecc34725bc331a20cfce37e3dae\n137aeb0bacda9ce22112eda1079df5e12537264f69053b945485e0d63f1a0bbc\ne272c4009972b826f3bff37871c44fbb3d82354b8ef978106690fabba5ceab80\nf0f00f6713bad0fbc8a39cccf7394cc1c1806dbe9f9c3b9cc207f859314395b8\nb32f44a433e5223a341788fe1c660cb4368fed883a55c8a1e51ca5e3381ff16e\ne01997d9d80108d9ef0bda07317bba6b81ab9c7abdb3a6c722b142354793576a\n80eda04ab3ceb391a1f5d45ce5208338b1f90ebb9964bdf27190689b01a8c0c2\nc9fd69ad7eccea07128e03266acdb44826ecc463847ce547ba40b5d5be4ea76a\n3a531e8df8bf4edeee186fac23ad28922d405b6d8f39dfba4e7b16b498556296\ndc85d39e4d2b3f97e58f576fbdf09c70426f2133f41dd106aff75a2122f808aa\n29af16c4d1b40c22bba8d41270a9d446d73e83d8f591b85d94f51222672f14c6\nc465392bd556dfba53c41fa6962066f13f579ae18c9747e51e5b5e47616036d0\n36772d307138669d8951c6465007d63ced2bd506b232c12f2bc9245b9a23b35f\n6dce7b06f412ad2a7d62fe3649c32e58a90c5ea14d4e7795821ad225b996edc8\n04ef7008fb5c78646162218a7d0e9894a7195ab7f1e1a217856f36315bc8b2b6\nbee875692a392ea264ba1780a9696a5445031b1609369a7f36343593d18c45c1\n74a2c1833aa41225002ac3a7235f2469361abe88a5907c082a287ea0183d0eea\ne0cffadb1f0800bfe229958c312ef70b0f823b32d9ab348bdb4afbe8794a5494\nc983b24e62f67487c3e297d87ee4d15b8c447cf3afb26255944d387d358e8a06\nc318b4c65285a998e5535d2826953f5f35bbb2a60d713f5562e11137e4079053\ne495edba9fe0c3f517c3352e0c5afd3f4637202cc6c65c3fa79ab02c4b1ec6ba\ne1d04ba8abf5bfe31b580d5439f3ec7344d827cd3b25ddcab517706216176981\n2b9addae429da8737a0ec96c5bc74f847c1a32f929e02030a12d3539c5ca5dff\n2d45e1d494624ced544c32de79961a3d304f4fe97d2fa2e2a78af3db4d15fec0\nc5d5de0ddf13edf1085a9b6a05fb4fe0f9de2a5d8b147a8b12dc63fd616fb21a\n72c38dd35fa2326192451564e0e358d6e098ec12621ea425294eac600a6dbedc\nf4e390fbbd8b1d1e78f7c27bcefa57ef955ba3a680f56797018967dfde52998a\na9ea66fa6b7aab9ae0fc39bb456e2128a5af9a0f65603659c27fea8ed3bc8e57\nc0d9ca2d52e5b72a48107131658eb661d8535425c032fc6efd503ea5aaa6e174\n4fa26fc025e31734e4fffdeb515b69758f60a6bfb00b07d215a0fb7b22331276\n23d72f0cec6746edb21944d535463de6d43319c6891000b07ce276a39442a606\n69c8db6ff8861700f49dcbd65c1fa9548f471134bffe3d64cc878de513f57574\n42fd3205941881da4ffe6a4b1606d1e6b65374dd48ef6d8ebd4a915457b5e957\n677aff1efd417cfe2d51444b8feec5ada29860beb8b6642d023ef1318441d44c\ne70b1bb65c1a9aa728dac9131d0758539e72b4cefdc958dface65744e77317f5\n358158ac418ad5b33dbc85fa857b44a7e4cb89bcc549a29df166be1a547e8bd0\nf9363659991d2e99d4de96cc82b0cb18dabef21aae8521b9fc203fb3547c415b\nf41f308e429ebcca2fe64d05767ea83a4d5ae34dc789c9f24125ca60d1f27a4f\n70d8e31d063605e18037def1fab152fbaac1be299b8db88405037ef005c3ad85\n3e731c68c76ef23a5fa2f2c07beb8aa5be3c29fb71d8bd0ffe8026f09cdf530d\ndff38a0e21d552dad7a7ee5d4167d71081e92ce8ae16a202fe46a41cfbed9a58\nc898bc5d8fa3a844f8f93b98233e7e116513d120f005e68fe439e57ce130a013\n3fb27b935f5e2dd9aad2c2674d682561e690f1ad341a0b46879c782a08f6f381\n34970a52b0c07c13b86f46d1e8525d29171cdf7e3d29ba1e1389d06743660be0\nc3325200128755934ae34c18c479860039da9e1e9a1d0ff80c74ef248fed8775\nf834763956705dca7d64a5259f507ff4f074bce8f3332a6ebcaa220db6064eb8\n50fa3209c7513fb6dfcef6402e60e74bcc050efb164eff5b9a815db76adc9493\nc069288d3c80bb72259d4ec58632dfe29b4dd882445e5b70fc5de45e1bc3e735\nb82734f803e1c1063655229f1087c7da8046b5541f24c609e45165bb26f35271\na2e7f262aaa4eee563120c746a574c51447817ce1e706abf28dc44a1dc9898c3\nb464f52684b005d153c3342fe7206fc5ce3defd950c66cf49520fb0366f34588\n017da09eb5011dc8f3d67db39f5f553956e665c724c54e5d00eba63157257943\nd2bec9a986e371c7adac385a4492e8b9345bd3cb9218ab4911c506d0af2d8371\nce0ad05a892483d88be17a302864630d3ad774d8a2762ee00d432709026d953f\nb7e45ae928a28bf16b09a910b180fa27df300268cdf31862c3be11ea2b96a64b\n37175753331cf356999d5d5a83b6009d26076f6362ab4f2e6d3d63ad8865f2a1\nf4d9933c6ff6eb06339d30a201e7ea9c7d9574103761129cc5dcdabcb465aecb\nb36a4014b65bb10f02b31412ca3700c916a7c527d95c61444db8931bb413defd\n8c90c7e8ab1e02ebdf7b32ca597d58c5e146d6b5b8ecb77c608f7952db52f989\nb1aca39435ce8a427eeb69f740979f5dddd5d52266b331a0d6ad202e9a36f486\n4460b53425f691a08aff5a0521501d5b006d9a1450ef57315bc3f27f80d67778\n546e7b1c85ce707a2ede03459a934e7b3957fd28667cbe3e43543d0e37b7641d\n73e22bfebf18b5a36965ac02ebecddc41b1acab99ccae5eb67dafb76b04f69e7\nd72729a4c3e9705f85f3000cbc4d2c4a2d90e049a781b92e01efb9e54ee19d17\n89b87a50049eb2d03026119568f751f1647eb621561488c29bbd35c5cffe2496\n8fde1ded7cb13ea360c52b2539e082ae10918c1780ac3051e65479e699fe1423\nf117b2b761d3dbdec70139c9749808d486092b30dd937b72cc13cc316c9adc54\n8badaf0fd807dc2a565fa83afeb904bc87644dd3c5adfff7b5bcb1ffb00d533c\n2f40fd10e51f8d4f13b01cfb92662b56f41bc534d19fba86e4aefd849a1dc26b\n2ddb16999e3fe03379045b0e42f8b724f3568dd3d301a2a36b7cfc80330c74a7\n3099f399be7578ef5eea2cae6559cfc1bf9f2935412ba8f489099d42e0d8bf4c\ne2d8914fefefd2164da6e085ac162bd08cace2d5553150400794282dfb991aed\nc86e2175c68e2150c965946d2ffd27f1b3b4c53fdf613379e3c043414cf9dad3\nddfb9aeb7e088a3e8138f1808bbbe60f82593f16258d04ab408ffe04136830a5\naad3e35165b396d9acb619eddd300aaab545ccc81cff612bceb75920cf6af3b2\n033f45cb6419c03460ce2016ce3269036d56425db1f07e3379771712cfdf3c95\nd09fcfcb80c1eb139b34e419e732723baf0f1e02d918cd2426027c51735413b2\n6ac40db12bd865aa800b694345a468a37b4527d736cf8ce2fc3f9f459f267616\nadf329dd7968499800dcbb92aa0e983b04fa9ebe4aa24555d4bcef07af1150c6\n327c7775e90e52ec73022d3eb23a2d2737bd5a879d2fac31e720e2563becf62d\n9bec24ff8a0ee6e72cd8cbafb28a057364eecd104ddac119ef62e27cdfa0b353\n69f221cf5bd7ba9dfbbdf120f7ef92b84227a5ee36ffb9b2b69fa1263d0b962e\n8b151758b9db7bc077ab927ebe6e91ad5f7576c91be5a3a6e0a0477613072bf7\n9a3564533d37ab8e3c09677532493c360a8019d1efca1f97979c47673558517f\nbc2f7541037e460d57a25b9451a6b2a2a3be872a21750449990d7ed391753a2b\n0898d507450dd771e39ac639eca79e9d48afa80cad88c14a18e17a1335041f10\nbb3fe58a8f837f1ab43224b130b16a9f0f47e8fd491d806114e18e99ae467b63\n2cdf0857ae32d9a8646a9c3b298599db84a11b6e69497c4a81d60621c3a66e67\n5d7f629c5b59be286b97987dc3460126a156f37400229491be2b420350a39368\n006d8383839eccac5f543e0758881a43c086b856a9414096db2046d8f626b7e0\na35b74947cb9b83fb2101b551b17744036736b8e52ec164c31e59e51b63830d4\nce1680fe3bd4ec934f16062e5ee5a492a5ab819af7255f27ccd4b75140387ac9\n03984726b0b720f90461b5f727ce08f6af87e8e6463e4b19003eb1b985749bf6\n2d434614e2c1466962594b5a06ffa39ab50426dabd31e604a4b9b8b7e9f95167\ne777819959e198a7c98adb330f6243876b63b3c7e4ec054443e5f7c49860e005\nd494c9392879fc826bf4fbf224addcc5189da09b483eb452d90215f8544dedfe\n7aaf52f05c2541a7e6593ef9302cd93c72f3981d50886137236a5b3a3a4de4ee\n4b61f7708080781de1bd8c2cb7aa5145aa5cb6b055ee2207e160a691c81916a7\n0c9406b07791808bfcc9cb75f016f0d1738a5a965e02bdca37ad958efab6faa6\n8102aa1158d7775ca2f47efd160781082af8a2dbf43f7b07fe03dc26748af59d\n2a1d1611370d94a90bdd52ae4d9da489b9da4d0611b506e648ef81af101aceef\ncfe5037163d914c0b6f0730dbd9a201eee80c96c8f1203c406ff0042f38bf8b9\ndd645571c1495c513018ec5bdf16a80f308c70048024a843d07eb71af6389d1b\n519fa1bd1ec6d3b66ddba468f1a7af25f9efe775b2dda3ba0d50331ed2590736\nb856d7e57db58de7d63a97b3f1fb9543522c5fab87e140d76705e3ffe61f7c6f\n483afbf06a6be50a1d179bbe80c45ea87b65b69ad5fa7f4a0b24f667836691cd\n58a33553843c3b308fe2d1e3f609e467b6052e246d90e462ade9688913f3891f\n9e5f97dabf3a6357a7e7e85491b3a30170c44dd23ea7e78b180854108be94f56\ne1ed7212fdb243ad2a0b65946a01c7d28fee75ce3ec99aafef6c91906957677b\n994d2a98779eea644cc6ae7182d43ac11cb79294a7237cf6eddeaeba9ca29134\n4818144227f46664c586b786195292ed40eadc05a5082d53e37e2d5b8f7297d3\n11349b32a48368481e9808e99c48762130f53136168c1b8c1f6b2c5c3068e2eb\n446f55acd64d62ebd132beef41a83e1b7726b8af4e33b1e151f65c68581adc4a\n97a8f291c989e867aa3914230d078fc3fbf82894a0e4dbda9f7218f0e7b3a532\na5d745d56abfebd4a6f3dd7405d519af233ea1ba59192c889189c2484c81a4fe\n0b450be642481b3dc4d11c879df51aafb9c7199ba72e2091b463beba1b314dbe\nf48f50fd0eca044337057d74a38c651fbe6950afaeb4c970706bb31952ccc0dc\nfb58db5d6a4670659480856d671afcfd3a3ba1a9371d5f94656fbf99090bd52d\nb617d2f4eda38de34d798bfa36af40ca596cebb556cdb2f745b07464b6b25fa9\n79a6d7b62ef10fc153548597d9aa3646dee92816b029c43d3b770a850dbde98f\n777ddfd5c14df2ff52138283ea31aa35e4ab39449963169bda94e62cbe91e2bc\n70df5c9558d8d7ecd8365cac56e9a0d34fd2a059dc21fac276351609dbbbae0d\nb8bc3ea13919a9836be813b3118e374a1de719ac47a23a580c444961f13a4a0c\ne9ae75af7637df639cb1c9b594a65199e8d1c9dcb7d357642cb1436e94775c66\n5ac11554c927be5b00275930b269c378a8328ec4f00327b824c2a4f108b82d7a\nc51da07e5e81fce4817cc054c548887610c8facd01f3589ddfef21ebe6e807cf\ndc6377b8b2bb9a56f761c99797b3d4b231a816fec9fe4f9b4838ff0da25d75b6\ncf033d02a2a9536478ba16c59aa2b10a7e87664d18a2389abf575e7ce2c7efc2\nb48e25aabd92db109af22ff9bbd8f081a1773756a17cb565989af961d833dfb0\n82d16d2f40380588efcf2497726b413c14fd13f5bdc0f88672c0744976980929\n8730f17eca21e714d468ee2b5389a560c2833e962a5f40329bdc1c61936a4ad6\ne8a38a01ae87c21d19a43047ab7be01e6b74a6c13bc6862753f3cecb9322b267\n7eb1205d7b859d471e0747f791a7e6b6fa78795e1883579d789e77561c0ccada\n5c495a628fa071c9091c9199f20022e43a00910f9fd8a4f0c77bf14be09b635a\nbac705291fdb40680ffeaced85cb61873a97dcd81d4dc3f90c2ee51d59668b43\n208a94efc5fa3143a2ce4c4943aadc595b3f66c4c0b985ea627eced9b5c707ac\n6a48386a950f82eaa3abce78c86127a1173ad76908520cc48657d0a35493d734\n8edf53d2543b1532c98120ea82866bfbb1deae844ee33dde2a578a158cb2ae23\n47491febb4945e6d0fb31dd4892f5021c1fae11baddbd30f9dcc70ac33e6bcd5\n808792ba633132105f7457f80d408e254dd1be3c96eb80818ff56c54323733d9\na7db26b65cdb0d667d8395905664602ccbea6fe31c275f890b9b60538e859afe\n39053910521f9ad8345e0e97eb1e07d83d7661533b8dc5f810fa19f5d97a8e9e\nb154d74835b39636dc35b07dd52e9d5d63f5ac77d4061e062d9c8be040988a0a\na200e23922ed12f9fb7c00b0fff42ee5ac1bc92c6997d75150ee007cf456bc59\nab07946c8074101379ce5df4961c47d5f3e5977e20ad645badfa6281fa83d5c4\n8b0b41912cf19bc89af14eacc817c0e72ae868385a6f8a2fbe008b3ae500970e\nef79a7a13bc903481cdadfebf4d4c91919d3ab30927eafac5b0bfcd28d642661\nf2e47941bb79132f3dae1aa3e1abf3f7ecd67da07c35aaa2df1bb7d4af893d28\nabcd1201348a109eec956437ccda080359bef3ce7404bb9774982f987081ccfa\n7fad92592528c9f19e37a9d1863c8688453f761295d4a53b721e9d86958300ca\n8ca59244940bcf1256adf83d7f74a3bbc9deba0ba07843f3834b3337784ff01a\n5ba65c715354aecf7b4918ae8c8f6d43bcf429f27c4c5959a80fa5c605dda44a\nbd8427ecab0880be86354902b145fb205731b04280d91a9278d53cdd40da8d84\ncf24f5023132e812fefbef8cbbdb691f85fe9b3e8c8de15e38ccc1cd84cd308c\n07f67e1c73449eb7ac09fa0b5027fac4edcf7d283de8408bab51c33033cb5d20\n7dad4f2d6a23517906fef5299921c5cad3fdf0378a4303503e2ce2fe68500c1c\nc4ba0e1069c5c6aa052243ff9b139f34fc353c43f5ef3bd0b9ca2930b85cc33c\n07d23c12438fe226d4428cf123d213a20def2ee05fd250c394ae4bed4f54e1ff\ne64591437106007d96e21d23ee87c578f8afd7c59e7e2d73744472ce3af77a9d\n2cdc258c1b73f8763f43ab5eebf4bd95fcf1e2c5f70dcc600319e476e8469b7d\nba2b31abab29f906448d764dca3371b9fdc76a7a893476f1b3c330e981af6e5e\n9dd4b4b11cc0b969d22de20b536dcc1f16683a677768c36c8d2bc39c66b4f497\n875d82a9ec50fe1de0570d816578b93a515ec7665e70d12016b02220d3d3e7c6\n91231862d31bdadaa8a9533496579206b298564501992c8e31165768b04beb24\n04763409e1f8579436bf2908e87dc1117010e5d9e71836ee5d8873140eb35447\n217aa19e4cccb0ff2585efe8605470acc8dbabcb1c98344516f8cb2e644afc7c\na12af6ec57cc2e90f29a1670a1e22bf41869eff3d005cb4df1562efbdaad7511\nc8de3c73b67eb3b99486ebd496695267b3b105854219061aa4c82453a3313c02\n7da3fc264fe870ab2e1993eae5481cf409d11e9b299f18b926dc7d3e6e3a407d\n8601753b850621af32fdc7ba783dd085e0da1f058407905fa881b45903e7dba4\ne2b12262e78fdd844bc37d3aa2dc36d49cdbd2dbb6c62bf8c9d41c042c661fdd\n1cd324d3163ef4e750b1a4a9534b719cb54facfa8e71e3ba98249759a0ac760e\n965387bdddc2c00d427cc9ab4ae5a082562c75182771b00d223a8bbd8661b197\nb7045cb49c53aba93baaf71af50484dcfde7a673ec7a2fe5a5db7c2622db0522\nf547ccd1d6ff5f097fc1378d72810b0543f3d52d21e4f9abbc483ca880ded6ce\nb5b4bd291a44cc4cba004970c2ce4255a3d4b30437c0093385d1039ca6d908c9\nb98fdebe9f47456bb4c86594b25c8a9c92939809933f57a5d5d3eaf0d7d8f5a8\nd3110375c026380eda50fe043d5ec585208372b68142249da03137a02ba4d005\nd6828c34542da81825d0c0f892c218a93451095640717cb9fa3a5dd5879972a2\n173d2ac337d61eda9b8144757f2d3c102c38aaff521dcef1fde7ae46ccb20240\nfd6a649684b233bac304045dc0eafad82bf2079f8373913349b4c03cc6f7be71\n44b3e779172312b56df6b9f0bc85ac9f6d58c2f15d9bc3018f6ddf432a657af1\n75ba090ae3efd06d9c30781cf6e700fc2df3e7b86f512503c72d80db90f8c19a\nddd45843039787f5ad5e2ed2261ed0bac38a08de9e3810be6168fa3beefdd2ee\n74a6cadba8def8b97e6f434f5251224940efe5689a53d0e06a7c74294f6fe659\n322e6333f57d19f033849d8f04001d5f4ef0689dd78b4dc50c33dcc2cf90945b\n078853fcceb60f6e7eb7ac552c7d5c7cd338bbb4559adb24534162fa15e06b0c\na7f376a0f655a6b723e1529e0db1df9f59d4370a5fbfb02721fc822728f7a731\n12647a9638ef403a5fb0e7c05226810ffea0ca7b8ce77bffa788e7be8e15b0ef\n6f58e7416caa6e995c04c97feefb5f95111cd75990fdbf0d1133f983da55ebe3\n5b1316a67b23422723437db08bc8c9cd9ed4beb4ba09d1831278a1effe4299c7\n9528b77e311632cfff0a596a4759d170f8b9af39a22d05d8ccf274c7a42d2f67\n66ade9f82c3f2edd44307d042287b6259a641e1a9622d9bd3b95d43c5e175adc\n7865dde907b9c8f0be4bca943ee2a02dfc8488ea5a4af0dfd9f750a106575c30\n54607acca3c633dd29111e064caca8dde33efc13f121e1cdea6bdb8ffb39a25c\n3f212063b802e1bf92a752b317f70561b0db3e86e3a544ebd7d3ac97a208cd3d\n964e10f60f8ee5461e82fd38ad54b47490a64877e68583adab4b4ec17e974e1f\n05e2bad2ae1d1eee95325eb79e3d5d1c8d26f5381539c49c09a7c042656f3d6a\n3a3c5de842a60566af0b9fe80587311ab324ac24e525d544f2554a1f8a6af82b\n124f910f5a957149672b6bd913e86b786d7fbc8fe42fccf3fae2300f9a548e78\n2bc54e022b107656eb27df3150c5b9cfe7bb86f87bf23fc3a1c09817c91ed9ba\n45fe4629967085674ccb1d29e2e4de7e8f4c79f974fd3fbed19b0e4478a41a4d\n7ce62be3933987cc2f4162ad5c28a3da3d7a4b2d9f09e82251605481e863276d\nd4a71ddb5f1dbdc38a9e3bfc6678d7484ae60ed9a42e0ebdff8ee23996bd6a98\n535b377741321ae2c81703e5176b4e7c4b08bb14f7596157d35cbc149bdb7eb3\n3f56fe7077907d6558dc0da7184baf53dae403c2f332300d8eb5ff54046ed40d\n62b45a3746e5946b9fcb5f4c498817ea79ccc65398f8c64b49adbd6bdb17c3cc\nb1b817eef018d29124146f5b3b489e29141cc86c3150e08920a3ac7f75cc0885\n913050882808c591a5e05843b9748ea223469ce5962909c41efd425587fd3d9d\n2ca69676f486c0ef3fd2ce4ed3b16ee8ea94e89acd9e4ab39a25832089c9600b\nc88c48848232ff6f75381bb1954a241ce82b75634e765eecb30ee136cde63d7d\n86ef56cddb231a24f824c9ae833ae8f4048145075869aa0aebd0756af96a751d\n706aaae27091eaef2df6b6cd5ee90ce4f804f0c7890955ce59987b75ae82b186\n47439d847f90701ce27c39724b38d273712a9457db6cf4a414ca71526d72fb19\n0bf47b957efae5aeaed04b658aa909a07d00a66691365a7374253508220efc20\n89e8e687b28f41d8c94da212b2860806d47c8acf0832d8bae9b67a5d0b5d4caa\n1a35689845a570cf5edb9998a2c555f327e849d8fc86173393662650b4e8e08d\n19173b41f8fcf0304348b40fd15f50f9ccb44bed5bac13507d692edc57cfcb7d\n7639cf2e3c15632d48968a6ed28e385e2a658e25570d074bb6897352933f1fc6\nbf004d26c57cdd66345b9c631922be83267e75a47a26914ceb7d4b1e44b72e8a\n262333ca58afe8eed93d4077df3202ca08f28fbcd024f855b9c7ed61bd28122a\n82eac6284d6c2abc0e18c73c6db2f89519e9c59c5cb0c222187ce1fe80e11c68\nf019e054f3b36cf2c49e504b7fbbdfd1c7bacf42583517cad5230fe5b1246c58\ne6e6bb0541ea55f673eabbeaef8544a14725995fcb2af559bd0868fbab516f6f\n4e2754442dee1660524172d757050c8a8d0f92293344f50a4bd9df0eb148f47e\n711ef8ce2678bfd19bf08d461c580aeb845abffb9c8c2b68eba458f09fca0155\n50e17637d5dbf141ff9cf4c50b61e0357357afcdce54b37df373150d0521b19e\n2c614af5c15c5b24ade120cf9af5b83541874754fbfc7ff14fd6981a234f1a71\n1f1f4c8d486c399eef2dd02ebcbc9134ac437abcd5c783c33fc51fad2d316a70\na001eb6ffc9a1d0483094300eb0352651bf0d84aa14a0e97db7008009a062988\nb1408f4b9baa574e1f22eb79bbf88bf2e1ab654dd5b0103412ea064918c3b7b3\n8b129db4d9ede0437ad2cc81aea18aff8c98eccf3ecc1fc7d6952c5f54370ead\n6a0c69f727c9a825250895bb9bdab622aec5730be2f0933027c2cc2b45fe2819\n2c82124f6e10829a5b29eab310f457cb5c3b1145eabfff55435fd91c66749cea\nf948cc14a17f8f1aee7440897199af7f4f5e4a722e3c6658ed9495128f792d06\n30712c9d777fbc9f0cdeede42752daa2618516e6c4d9e4d66d3bfadff5d5a5f8\n033c6cefe1736702eeb8499bd8adcf2e11661c0233056e8d0d3eae127ddd30fe\n1177b693e2d6669afcfb3ae766c8b5f22c088b9ebece669e6461f0ce8ca572d0\nc38bc82325e221684cadea49e0f3d490cfb9a42d5da9d437299052ecab142ae9\n1f9eb1c9b635c8f51474428a8e46fa0ccd5c17f2b3dd3e302a2d39e779975f89\nba80e5c3b01fb21730b02cb118377590382016a52ec5b248f6eec6276e50a60a\n775eeb00ebb1290a50b65cb378fc222456d105571172c75e73ce8cfeee81bb20\n7ac1be3de25044909721fcaac900fb2c917ff6c8a1539ec6213993687612b415\n15390c340606603e1c53eaaaa56f6897e7ea5acc17b8fc3356512b75395f72e7\ndcfff3d808c9d2bccc2ec0918fa6447ea8ee13e1eaa5e63245bf2bdc3855213d\n90685c2cb5e3f605325bc5ceacb723280cb147c8235bd71513ab96c9f0b2b103\ndf5c1bdb1a62f98aafacfd652c6dbe1e026ae4859c8c349966112b73577d4719\n3fdbb9bef40025c437de4814e84e35426c2f7a3a722f3d050ba1612639b0d52a\nc1eb705b4f23209fc06ed06292039199ea09046ff9b317f5f9b17b332e7138ab\n12f4d343e593beee97bf42b5f733cfe207ab3f4ebd7b9891bc4116e32f9a39ea\ncee2d5315c343392151e5bd618f4faf738fc81f8002ae948a5c45060f9e93921\n7a8ac5e65859a83d1f75eae3df52e5ac25ca27d1f592e43a80c600ebdc67e8a4\n4194358b344f425d4b9f6cda54bfbae1810a4c35593e2d08dde6aecbb88ad54f\n0e0598c1e21086df6a0f532859d2ab924b9b93a08e16cdbc672689066ca8bae6\n2cd51a2c0aecdef0c7d9279275fe18c0a1f79ec29d6491d4907a43a77fec2190\nc309bcd039915f62900408587d5edb710003ec0482618f4fb9898fc9a81853bc\nf8240a0132cf4c5c1528ecd438229a3ca73423c0056325c12d26f5dad707ed96\n549b9637efa8c1ed5ba979527258dc7ef35223f5e2f64ba6c701c90036203984\n761d1a178d23a5b0c7f297b4918e220f57d9cf9408f34748333d67527135cbfd\n4cb0a085b239463099f8644e7a33257e2b511562d36412a00c4efe0ba1e2d3f5\ne90ee3ee3dc6ff0e36764ad1edfbbf42b97fb56faa9015a85a8fc263f4b72aa3\naa6d359974137d99498e8e6f518cd36db21eb20491b2a556c6300874bc73e9fb\ne0273b75cc23a0f4230735807fd2010c6b6418cf90083eed0543c163c852e76c\n79790e6a33d914932b0594d418389a6ae50284f8ccdefc350c6b6bde6ebcf4d4\nda070d8e4bde01cca59f6d75dbb205228e3e2a447291a7da4315fe62c3c7ddd4\nea00759f8d9407a32e6285a6669510f9fbf54414f693ebec0c71893a3344f33c\n265a192edea51fa1bbf833b08b210f0efa8a5d418fb3ce97504c5dcc97059960\n22949d231b974b0c37638d8236c1cae58e112f35a719b4e54c41c021ba4859da\n2a2c9397f412fc20c1b0c7429328c592b8da04548c97d83343c1723a4aaa9ac3\n835186d437bb9e24d514530fc898fb8e5f5157d22a1acd023ab3f88f62281820\nd958c695c4541cdf1c8fc8ad538dc80905784c52c4bb74c99b9cb5e06127c284\n4fb5b9c20e53c842a0640b6d5d67bbba04663e1339e1cff1b4ea918fa79e2c45\n84a978e648ebbea680e1ca73d9354536fcefe57b8f983d9a89eb8b68979aab44\n28310f85489fcbc3d51f9fda5a1c92c21e1244fd2b668a2a85b1d78cef5191ac\nff3a9e9ec4acde099e530ad052962bb67f1292f994d0b1e279d8e68a20cb40d2\ncecd59684241f224a5b14e55857714476e5cc88f8dc462a1b94c209bc482d4dd\n4c7f185a0e1befdbccf52d9da58c4a27ff8ddc38d0651e82415728dc38ec1cfa\n5871e2ef24e46e0c19f65fdae2a7cf642b8faff29de72e0485009138572b2a9f\n7cadb3d918b58e8674e88358d125f5261de1b87ee4d1902ddda615a6dcba1921\ne9f856d98660e0014457914fcc759d33260f5f63324639b03b9a683ff928057b\n015f470cbdb001ea956861ab908928b8978e22ad26d240059f775c7981b6d720\n304fba4729eca1e3bfe366a5192b05683c5d6e5c6509840acd59f097aa72f5b7\n78ccddfc41f75cc5d22514ad82b3ea08cdac0686c0bd396845a606e9830528e2\nc48fe36344f60a8530613503d383f38dbb36ad864ff0f3b8650b228002cf6cd9\ne29425c87fe8ce16f35fd23ab347c551e4ec4dcd69271651fd1e963ffa5bb354\n1dacfac97b9d30c6baaa643c04a4ecdbea8414a1da19d57504c7e3caec41a17c\nb84d90cd15010f827bd1bdb95f8199169b35a26c8bbfac6835f386c74f5a9f88\nf4be408207eb6046e2ae92906f7904db76da0d23447733e6dbfb7f554d55001a\n6c1b60e1c898f45ace7d62dd32689dab8145c07aa1eade386cf764a60bd611f9\n6acc3d13f332f5d0511f6176ead16144547551284b8c8d608830d1c2d60c8b18\nf3314ff1a6e3abd50ec45f7815a91fa0695a97e236aa61500a4d16f8e22dca0a\n577f5d1826792d6cb8f375aeb30af65e5bd61dcaeec6fc4c8091719337b8d981\n3cdc0aa55eb4958530cfdd46d2dad6d24ec98cff49981e912efc6706d8d9074b\nf6ce642e69cd4470b4b725fe629b4293efc48da27bc62a752a17eddd25532b50\n11c9cb3893faf02141b90d334ef6208132559846ad79eefe27281f772d1852ed\n594d4be9cd09aeefad7f4a447f8991c985ef6d05d54b62a8a096769959c4772e\naa53971c31ea13ab37ffe84bedd794719617f9e888e82a58e0c9307e05d62ef2\n56756ead134996ec9d2bf6a5e62223a04d869f951c2ed18ab3948afbdcd156f6\ncb2b04a9c34e22e212410ace47a525fd5a12753220cb3a85648fec2482068745\nfd81e83375005cf81feeca19c54db64c82bb35cf0e7184b28fb66ee9baa7b326\n90a75e7d039a7c1ca9879f8c5c532577030a4ad54741991f93a7fd6e7ba24000\nc73e9d4076fcd336100a669a9b4c31d9034bcd51a09c6ddc5cddbb9996cc4eb8\n0456427134fabdf830460695e0a8c09d82a45459a4f5bce6c2f4c1e32bffa6ac\n59bd32a20b27ad23b3930eea6fd17ec4f9dd6b9ac505a1f949d95ab1e73369c8\nd1313cbbe37ee9f1558131dcb51d7c29af8eabc956e546719d5edeffc4077257\nf75c8135e4644694c37d93e135e25b77ef0e95f7368d803c28d5cb61adbcfaaf\nde062f9b248d8940232a8bb9b72bffb14b3966da3180e4b92988652381305c33\nee36e932b4469fe1bc2bad393bf41ea7046715c31f08ddfef164143e021c3c7d\n1721bdb0a217aa17a7df5a031ee95e82b166f74eb39314320edd5ac2a8668e32\n8a9576fdbb20dd62eceaf7dc6ea4f6b93727f3ae79521ca8c94e93ee7694e17c\n9ecd11b568c2a63985c53c0ea135c4b260c033b96f9f3ce9c3867b4276776bf9\n33a4b20daafc7e8fd08b24a57d5f99aeb37198a4939e5934766c4fec640b9945\neb90c7c2100e0e438d8c83dae543e4857cb9dd6891ded16bdf4ef4663cf56a73\na8a5220e2e001e3a6dfd3b714765a305b982751bc3718847362bdfbfc454e766\n8ad4cd85a2cff316832aaaf9a89a70beea00ab3efaf1cd96c537c6d83e124f76\n13de5c7d906fbd65c0937a61059dc2e6d990f58b30c9e32a053f6b0d6697add4\n18296cd9f83f72740f04815725a8884517803403b95c772a56babf1ccc7625c2\n2cec4d32acbcd28ff9c7addfbe8291ec7555a01270519265114d8dda4e0183ee\n4c8d6c7b9908d61e6611b7e32e36083dd1655c02a8a68672f8a2eec5c47e56a9\n2ddfa580743ff8ee428676d2103ae1cd77ae07b524b3d4bed1be33204b6f68b7\n15bad94d3552440a29f10e308560806859d7711da272af448fc3fe1a526844f4\n09a41fe24fdc387321d429558185c5ecf8f474b67d0829c03597fd877f86e0ed\nd15780c8592ef4821df1ed1b772ca1a41d3171b8d46a45db3dd37d93645af4bf\n6f53a5bc3e01b6306e7cc71c43cd856d8a972b4be3c84ff023fcc652b65d4645\n72d190a64966bd5930ede8b7fb12b5e89844685df2a364c02e3cccec5bf60e7c\nc3ddc2c7b2bc7809e9bb58b3640c30a80bb8bc8b1596dc412712453ed63d7e14\n4a3efcfb55613fd1bf1b3b7fde6eef00dbf0949b0ff21e8f2119e040e09b0fc0\n1bad86d3ac48a86b8a542eb6913190169ba965c567f0bebeef588fc847557537\nbe6708ba5389dadedeedebe0e6c21a65bfb1eca6e8169cc42417a1aedc604a70\n5b2396c8b1ff1f8fb5cbfe8c736a14a5fcf1d89d5ba6780384c5588e8eeae83a\n1cb88bb879d4fc731e0770871a846ef1869591e0a477bf8cd8c3689791b9af49\n0ee82cda972000b710d08553fb4838ebfb833d62d54913989806d1c858ac05e5\nea188c683126853ce9a2795923c10d37cf1bda22099acbfbd3e85a5b978719ff\n337208d3d3288e84371bfb8037157a3684109f8145981868a1a7d14a7b1b12c4\nc8890acabd6b9e792fc55ecaba1528d0ef5147044f5f16403afe8fcd9cc1f794\nc98bfecd26b587bf281f813080118f4e96f2e238455f3887a94fa5f207367327\n442d322f4ad674dfb6766734314bf4259db11efbfda913d3266318f511667f96\n2143e3b464989935a51c206422ce2047bf6daf9f868dac2236e3fd91fda97865\nd06a7e5cf95f91f4e5466c8fdf59d972b4c6cca43b2eb935244397740d731d47\ndcbfb7102023325fc822919af4f0cff18234466d7211c4ecfebf3c5426e36571\n337fa99aeb27e6bde1b8c32e0ab2474e7d8ace2a7d488bd03ad6a9a4134c6403\n97af59d92bc713115d7cbabec7cc08f566f84971bfce7224303c7b3608879785\n9b1db4ed59b3bfdbd07c1fb994760bbad3f341a5a2504f830feb71bf35b79163\n3e86370c05b34e4665c18b18077b379e0aa52b939b943fa07be8447623b95cee\n2ebe909525f3472eb82b8f37d8943fd458fcc11eb9ac4a46a78a9d00f1a48540\ndbe2ef48be21bdcd80a161c81451a54e77b787bb9fc9ed259f61b5e4ac6543c2\nb98e03d22cbc124403761bfbcc1519deb31b87f4cc906bf98f9280fb89bc98bc\n88b3e415632e1c423ab515ac2c2631f36120dbfedcc2093e6c411fe740345bc1\n8b4fbfc8a3f7b674c551a2f0d7a0e02cd89d410ba497b88eff14b165d4b5f5d1\n99525bd0f3b86fb986ff1dc023a0dae4ae53c811e3670a1e4dab11c7b0f2279d\n80e293600e13ec68b497a3c0c6a7fa49f12ffd805c4a8e7b88001f7eace756b0\n1add90bb4a35f6f9c405241364ab7e78efd5c5f06ed7dc295b976e56f8405678\n3385f08c77f9c05dcd4d03e07d0df829ef384d01ea4d3440eabb730feb0e5135\nfd2ea3ab3b613cbdf0a23e6de75a1c98378cf8f2fa5c2003a3eb83837be39f91\n0a0214c31f075b99d13197f98a04f5cf362cf4f06e627092cccb25e135730590\n20c157fc6cbd3d42b4b167bca99cb89ae0672bb04dfcdf315d8072d71d8db187\ne2a0776541bd6b9706a0801e0581c855673f4496d2a16e4181d70e354c7b4a10\nd916e367ff0f81faea2cdd5bc1d2f693e7159507be84cc941d5953879bd7e8d7\nd36c3ee4a5c72e40868eee3eac4dbed8cb814202307bf61fae8e89267d37e0fd\n8d058cd9762d337893a88c6512033e414611009a854354ae43d6906fa7415050\ncdc4924c5bd46e0e881b76e48ab44e39d551cca084e102f4a75210c7b4ca37bd\n82d5785165ca8114a03472f3b26379568a7459faa11fd186209801354d169f15\nf976f53588d5e12371931d1c39fa0419e565e7eba70e934894a6b776058c89c7\n5289c1674abd7a80b1c41731d93a7dbeac3e76671fa66ebf3454e83c920a13a3\nbf44b25f1d504828fc71a6bd8137c720339f1bb6abf25e592825eb27fca2daae\nbe86a0f2dae0412b59451878a70711870fe01008d20b5255e1a55bf6f17211b2\nfdf0270bb4009934abc06fbd80164633e048f67f80f6200d02c321eff17590bd\na5793346ae5c0b2dc1e47e41a264cd5cde63fc65004a2b788ffb46cafb81c041\nd8ccc2f8ddf7fb62be668e63c52f14d8cf61cb33a93212e136703c12995b92c1\n58f1221cd916883b57446a69a1213b7c0dddf430ab2909600b16beb9d133ee74\n37cbd80c2412f94ca15a7ae55e55e0c5238626b5dffbb6d3a11edee267657652\n51641cfdab64856db068dc3369c294ac50bb56d96d121f07fb44c16832ea6750\n1087b3f6f53d0ffe9483cd11124a12a63ac342b9d89b3d9d5523caeadb3067e7\n0127a5de460922ee3935ca2bbaf560143d6acbe649bf30c5d2ac114b0c4b27b7\nf3e81d6697306aeb746c08feff2f5a8a3b5f9c3eead0afa713c86ea09585ac55\ne6527f8f1f1cf8575e8344345d419fc5ed753df2cf98b8b7a0dc0f192ede34d6\n9b1a571a446fd911d78658a7b6596d7a8cfaa9e25a918ee361a96cf897d65d78\nf0a142094eae4d825d00fc1031928f958420cdfee57ab2fc3d38e36cda14790d\n80d1c338cd77e9ea50e68d167cbdc1d3f37c7b37e1b610652abf5c3f2360d1fd\n7074b10cd85742a2ec9ef908b7943da5f2491a143b9ff99f1cac2bf80117f85d\nf2bc9e4cf7854f63c4b0eb103d868eded9cb365df9b5e329fecda80df3db5f0f\n1a7e458865e54e5df0504f16da3e5f9879ab1c7a6b7eeb9fa5e59e56a3ce519f\n7b950b8d99942d4a1fe670f90ab098439334659cea9156a8f3d8a03b2c3d4d50\n9ff613ab2720adada9e3055196b8c63639f03924eb45a95f76b7197ce70a8ad3\na9337f5c2016a69211e1fe97be9652f851127fb5207cba990c03dc957c44c689\n6f0b8d29a3f52d0d7e5af968a779fefd473cb51365a48228d8441aca1fed29e5\nf7bf4be839dfc23f1d6d84a7151075b038aca5dc602c6381a94a90c8bbc1fa4f\ne84601189d68e5198c224140c001712247336f490116634e760951e4a397ebe2\n40ea7794b6216ae53fe1ec030a1e51adc1c1a67b3c3893befbbf08e6f385c50c\nc42c304b83c6a9853785f4ee6de79dd021f2695062645d106e9915d567417659\n99d028b0a20d64e23c216690963a1d6e7c414a7f97e4a719a89b7c6a5153c8ba\n87670385bb30ba7c98a3f065ed26ef10b9245a2318cae4bfcf0aac90e742fea0\n18017cbc6c004d92af8ee4f43a372600be011c30a8bd7adbf54be3077483e1e7\ne2b5592ef1404b03b891f063a6e5437d1ae0033fb42e18ada9d2bb04b07c8a7d\nb267636e9f246010890a37da432956aa67ae1d68a8c3e1dd00614c0d994ef53e\naee7a61625dff52bf8d7757e8bcc55cb49147cdc2e9e389a236d0b5ec48d3d2b\n7daeabacd61b980d11b3513c4edc30096cdc44bdd1caf502cfa2d3f18ddd8e59\nb15a4d7fcf50899a27e7294268d3fbacff4c75ed4ee843a155ad8e6ebef8aee8\n52cdc94a466213cc13c0b421db8fc6894a4c6855a1b471ce1636681434581c3e\n395dfecca77d1c944b66f99d20cddd3e36492bf5451662e0a5a42a344bfa0163\nc66f123a2c3876a15b521aab8ad81afa6178bfeb620fdd4ae74ccdb2edd9aaec\naf3e813c82691d30a0dfe3a75a68caf2db3982e89b03cfe1737e5f5d9962a775\ne16c675d9e1820b0d85018ccf06492dedc1da29ecb4dbca68cdf5f8323fa0f94\nb72ccfffcb7e825e3b634990a4c6d2ca8301c6611265f6ca8dcd3b3eb6ec341b\n8a11e9c0a33f2bebe1496270788cb336b254d443e8ab343fe38842955f810af9\n32f37257426234e99e0e79f3a4b87435547157781f7e74a9c0a3ce503c30f583\n0b414a79f81577f807c2577c1b057f8022c7ef5d78208c73b7495a493c954b10\n1980901b38a17769a9cda4bf2d883b04183f8f68330e0be3c4ad0d3857e8c10c\n96c6fc29155351786a4c85432f5c838263908f462199eddd45918c97ee95055c\n81741178642feb53e9039f58ee51ae93418317f74eb52b6467e6d1e5ff9a1ff4\n8ec9cc0551768330dfe41f17c8beced4deccd6837f1fc7da8e4c871316a36813\n77ba655ab28e4c09168b3fd08fc0b0c7d3577c28493db9f6ac405970175d95a6\n5c291eab6c217335ec9fd1dd24ea9c1a32660dd70f77c26ead967bae0ffae90d\n359cb66b315c6a1ed57c1ab0fe1d5ac164bbb2e17753e94bdb24df991b60949b\nbfd46bf2c4faaa818cfc3e94154e5b5d934136c66c0016fb1c1f82e8d0b487cb\nb8f256f8886fcb121c8f3a11854cf398462f262f777eaf6301cd75b13f3142e2\nc39f01d9e001c6ed7226014e28e7d8bd2bd0baa1450c1577855d038f7362cbc2\n22c7210d407dc84ad568b18f757224900a678b7bf079d84af62adaf6b2d3b70e\n7a30085792a0ecea4a02450bc1093f86ead4366a12c9aaa3ee019469770a7018\n4edf01435a4787e5836b115a3987652ee65d8d7d0ba5585861419b6d27899212\n0dbb2e6217dc20f2f6979267d56ded31253a120364abd8c1a58fcea35ee2500d\nba1dd8c7ab4ed9ea04bde76923ff725e6667423882df901082aed78ada64388f\nce44bc07b089e8b77db1fb1606c13a8c607c5dd459e6c5dd0d0e2569b2821a45\n5f70aa72ddab1b132ab0e7480ea931f0006e2d7690f29d1dc5de37c4fe892df6\n335e2c6b3368c8ab9d19a2e09288dbd513d95253dacc8c21aebc9f4e0a05a68f\n6e94a7159cee3256e3e262ccc39f4fa18b69d55bf8a5c1fcf8383d078920b8f6\n702d3f8709ecd9b1809c97bb93a569a6d977d08a2573367ab34e3a96d2beed6b\n1874ba217e03d16a42d54d665c54408e125ed5fc2aad300973e22c164983e987\n2aa87bb6f34d2c8ec698832f84c92c87fc7fb0c96119e32228845804e27e745e\ne1577931badbca5635c2d56dbbe5fc1573e5da768219c4c3871d832755845f7c\n0ccd258aa69ef90d81253d194067fa1a6dcaaf9818b5fbe953c0fc67be05b195\nc52ef29956630b137ab3f4f4eb45e1294ee94359e10048dd1da7a17156ae7cce\na8dba368fab9e2d5d3635528bfe1dd5a526764e6f2a5acfdde35360d208785c4\nb27b295c8f5c3ec608a380511f619c69e65f4683c9fa9b61a8b72b7b628d6e20\n60cbe640f7372def47181ab9fdae10c219ae28686e656d35c1bb064523756f9a\n1b3137afd95f1deb4b2b4963ac4c8beefc00813d5b18cee7ad40c6e557ecb4a4\n94ae82a8a65ca6bb9df0b159df43712a4759ad2a1ba906974cf916a4a4b2a47c\n95ad8110cf34808f7b1b0d605dd99e21146f7d296028f5dcd0827845a58e928f\n7dbc3110a61a293c6b7b5cff97814648c7f323d761768888f351071eb8371eed\n7677cae290e55932bcf4e38415b36078da12324fa110df1e9d1f4f1d9ebf467c\nd412a9d8aa86a0243c5a63d292f74b5f0b90b796279c00d6983da697a1325950\n671064ac2d6a47178349347bf2368456c08d07ac32bb1466fa1be9ef1a293a58\n857532b9050211ae50858160f1c821733a3dcbde3fd69c5c0e224276954255f0\naf44171817b567950b25812cf5e8249b683c13f2f9536511d673eee3014b5011\nc08da82a104813d3ce04fa1a9a4bf53d0d6f23904633ac9b61ec90687a120c58\ne5d129cc46d9324796c7a617f7bb65370c98f461333e598714ad3dc5ba690f20\ne34115737d71986e24275f7c3895a5be744e34f01007d5ff4ebe7b40dd789f57\n146170d3cbcc0c8c84184002cef73ebb726e4df04a4431e5806dc3bee8ed626a\n952a21b36d908f6f3f09d547d085f1526ba3bc31aa9c8af70ab6284cc8acc753\ne191d0ae237f9a2464388334dadde4c9fa54232fe75ea210caa2a0527d42f204\n5b4f49fbaba06cba116bed6c5de24578887d4564fd36c4dcf6861f4a5b4c2e2d\n2f193e93a51aaa0218488c80a32e7e4e29a1e9fc93fd6bd7f38673b65dd4e35f\n62cd153274a84c7f0175fbdeb0f1df4261bfcfd6f09e4cbb3902f648d40ff502\n0ad407b36652db41915d2e2c8f2c8f666a557c58b4e2fd5f58a6613f924d1165\n9327e8937430f9949639bbb55664b27f6a9fe723e83e44e64e6f64a81c781284\n3d9e7c55552404b156e87f41f1d42de2e9ef1348ee9bfa86bf38d311bf815c1e\n915280383be90766c0f6b3e667811ae8149c1a78cd662adbc1660b8191cdc968\n563f4bbd53e57cb2e07d367892f42c74e643d075e58ddad3f58942e0d1fef622\nc1a0a8a2e1efea818d44ffe75df8abafe65f2eae1e0619533f5d4e522fc832da\na893499072192adadd59b67381c9b397ff740ebb3249022a7a5997df100d8dd0\n4274b0b92b5ccf5de7764bbfaf6ebafac3da8b6aa5a392fadda94d17628bfe5a\nd0a2971ce05939d41616a68dc129c680447ad700e34ad245da5336e3bc1aa8da\ne4e874d2beef9ddf3571759c70ee8194448eb9f2a313a74e2bdfbaecf51a6edf\n66e60c95bb1a8d85047c1a9e682cd0b42d8e8d281ff87fdce0881d2c5f575545\nf3e148f0e7e3f22f3b1464754c32367a66dd4dd51b6ded1e69422cc9767356e8\n04632930adf233959f31e69ae7ee58d40cba7c7d26c272e8c96c8bd26db6063e\nca83773aa63d0ee66f0e9c70b85cca8fd4b454bfe3357293e43945590cacb503\na15b1de9a846aec0acb168b1a30a7c38ed878a1d5e7eee93db62f4379b10c3ad\nf71be7cd8d0b39d1eca9540b87ef54d234924158dcdd1d53266efc925969cdb3\nb86e3474ac0c48a4fff910a8292c70c621fedc72e282d0ed76c0a1147743be63\nf064b1f715a07c6baafba8feb558ef3374e47ff98857d18ce9783c789c99fb91\n953822a2d71f8db43e45fedea79fd49c33ed165424ed12f834bf57966963aa38\nc407a0db2dd259405874e3026dbb3fdd003e234ee24be1b56737447a8cef49e4\n315223afeb76626243822c00bad465687c7fd6187e546ab1361cdc49ee1eb3c7\ne6c372e6571b345bedfe853cf78ab7465e8538ff2d8a55f2fac016a4d1f914b6\n33c439f9f010c3f74878e61e60aa60354e0f0ed6dc52d5e1637a741d72ccd83e\nadd266e4a42a7b6a41618dd5adbd80de7c61c5e1e40445a5b7c889213fa91b92\n1a2a81f3271776024997cb8cfa342ade35ac2d0d98cf006f0861d7d0f16dadb2\n889033ae095d0f738ba00f35a1f63307fdc6625fe2452f3aeb0b70938df15786\na77fb94b18897832ee6d7b91345ae28cb06c59fb10483c97c4d9bc93a042999c\n6b34dba334b4eb658b43504a1f907b6d4eca56d7dd9a5b5794455784d1714fa5\n45cc09d1f7a412c3351794b6d976aa7812e25279390823dd9cc81bd8ccaa28b3\n0004df9174c5d6e28713f8266738823821de8da93505104e2c0643abd99740ba\n729796727f0db12f7fb72c1f6b278c8467324e5b22a7d40be9b21e3f978dbbca\n8bb15d0a3cef8a871bedcd3abf839ffedf95ae6617d6e07f8f22c7564868b8e6\n49e77adcba0c167b77c0bd5917096f2d51940af46ce23e2b2d9720c692d017d5\n8e1dfc57339a8e023c1e89576c40dc049e2785ab2fc3d15bd6192954b7e00d74\n71ff9155a89cc87e650364c52729c33971457cf61d7ebbf3f70603f9d10ffec5\nace2c6755f88f4a37e4770a0dfeda2717de19d345a47fb660f9a4b3639c5381b\n0a59754d61878bff36ba6566eee1257471e6e6e11bc98d92c91a3b1aa0727072\n18cbad39b156a771b784f879afb1f2f036aab78740c47309a81b7799fd74604b\nebe47d5879587d422914236335b9dc9e7c8b0811385ece4166a4d1e4cfc60b48\n80eb7eece4d8b49c638ff0f9d729de43dabdbd301d84de77326d44ae15ba84f3\nde9ae5b991fc377ff43c822646557576e6194d080f40a04ad0c0b0589b0248e6\n2e939fd907021398309a0ba4b2e381c326007d1f58648782b86f09d8a5399b7a\nc489278f36d20e12d2beb471ab25e39bcfce8fcc9aa971562cbef7d0a4bb408d\ne2e01340e2cd9ed090cb787ae0f2a1191745e34a68955417dcf131f86f763558\n2df98fe45042e71f4ffcd7c486370b014995e13719180b1c689e77c8e98cc64b\n87f76995e5398847398b94423ac4c25b95822ddf597937b0d3f5d6dd7ba98f31\nd5419baaf4bb0e058e97f0c660abc490caa36e774a160afa9a1e53b8970e423d\n0e8745fc237e1e15c226b1baa96e6a2a0692fab8034ca5a91625eb2672750e0b\nf2017c864f2631d9d143b89942c2c9d6012f38417325963a037b229f7969a804\n15328087e656fb9f93e49cf3b3cf581218e8850df19e4eda639b13c9de484bc8\n2243a8a3f29a6be7651c31f90226b739b4e822ac1984b216663b0d86a1b88f14\n5cee96a185d5f408ec49889276bea3780a55679b4b2ec5b3a95f09af81c994a1\nf556d8254ee80277502939fa19479bdd6eae6f53435a1dacf214d75b9f113f40\n675db73d2b432e7c950dffc7890a27bba1d9063424aa17757eb9b2a73911658f\n6031eaa55cf723be4e50a139040061e7110684151a7d8fd2df82ceae5e9d6be1\nd2d3570d32452ed44bb4bc7d42991387567f7c660e8348d4d9838f55d399e538\n9d225d45f7b10957f746dc9cbe32c846f191a6fe7412bf19f2de9f15ab51d74a\nb4e8055fd410f83ef80ad66cc9146cd805a29dbe18cb4281b918186891ef6e82\n933335309fbd8ae874fd7280d4b88c924198df2f861353393f405c49f266b179\n8659578c6b5aa795c4b03763805db50caf43c29dff5175779d80b85d95153c21\n54873d9f5c33a862ac8feb8ca039a2e6d96303f15b4789c2a88d21b86fb92598\n0b9c0f0c087f0162644157326189a636445bf3527e85ea2b1fc535bc23dc3c18\n588a1bf9abfdcee18b82805777d938ecc1bd6123780f59b09e63d2d8bcd8f4ec\n59664689c390c966c34e7f5378594f1ce250b799ae06ededefc9e900a228a5e5\n0aa1b99ca9b85ee273ba45a76719d61e13028fc7a55a3ec13a06e18d3cd606eb\n3592e004556d8516e0d13ad4e8c85e823b873c9723191e5fec9740a750a407d0\n527a4ca3afcfe57fe6306469443ea34544f53127cba15d2c46a579973c94bf6b\n9b249a404a0c95ec1fb25f2ce65c169221f71f0c30c8cb2b8da2e5da239c6c1b\n49a7c3e7cc037d63233d341634734211b6a313753504db203a0c2f6b8ee39a16\n200b81c2a57eeaae47f977ba39de1ae8e9018474c3dd7f7deab452b4d35e9095\n56047df880e94650c4d9992adde2776044248d6da95b22aa3ac1e69e59b11111\ndb559ca3b47989ca86e885da154b62bc5290c1f29cd0394b95a50a78774ff796\n6d8560a6da97a6b3fbc7c122fc36f095722859fff688b5aa6d5ec437cdcaf6c2\n3e47a8760385b1a504c4176dfa628e43fa7cf3a56fac4544a03198bea7867063\n389341704549feebbd905f7566bc000322a8b91bccb5a5f374cada255731bd97\n40d9de1f3feb7ba0846e46ea3e8d89e47e3ba77b1d952eb612e417eb81dbff5e\nf8ca2742eef4101e50fd8a8cc9ff2353e61a0fa4662e2f2c16587b2e1fe29656\n0690f89ffa473e58693e8474ec369a2506912ebc380aea2d1707adc895a17238\n854ce757119da3ca09ed2e2c816a10c7ce4732b374148198fef61123d65fcb43\na0360d58ed0705c66b538de0ae94ead29c7b226f4ef3ccb9d889f638cbcdbc7b\n26478fa48aa812754826c665e07a226666f37bea5f635d035087d02ec08095fb\n07e670aa1b77ecba7b44111410b9ddf922fed806f834cb5cb48a8c816f8eedb1\n307b41d498db52766ad0f843f58b9dc70107ce9bafb9f89624cef63e76293f64\ne249c9069fe04c191391860b30b43bccaf1daa16c5114e2f509fcf3181c737fa\nd67782bc7eb1f6845bb30b0d53ee8e4db533d6b433bccb2f1df16e1abbfc99ba\nd144d7bd4987288ceba32a93ef96dbd3fa77016230298767466e055533325263\n85eff7e2b79f639e5d7e006a0b11094308df2220f14da4bde9bee8a0d32d1ea9\na91173b965093354e10ae3514cf4d30839b576203e58c47c3a600de0319ecc44\n26d49e67c8c5a36f924525dfff0ab505e112f8e52b5232369bae0daa2c02aa80\n64c6effbf9158fc26e4cb737b0765b2aa5f6c0d1df0b053fd8dea78719528837\n7e1f12cc08daffc8d09f80e68e4f29860fea18da7bb43e127da620f4a0bfa1dd\n907ae2596f49aaa7655524c7591c2b4f97ecf6817ddea546e5bbc0613534f7a7\n9211bd9f2bec8a7dd3409b005112f8a48b77d67ce7c64761c6c52bd538e2c3e1\n1af960c4cd06b83bb52d5394e9579b11ae6b220a190b10ac605ba0fdcf519371\ncbb4e52b1488c68f1e76888dd8d9955896f9b9f827209cc714fd661a547f5ca5\n570adcb8238266784808354fd293277bcba4895eccdc62ba648d6acd612e568f\n8a1b5a384d9dbfd5658a55824c88587cddfccec8cea25b4a03f8c7568d9f1e52\ncea809e80cabe10189c2f1643a086f20323344e3c7427a38900d8cad9acef2a4\n289cc98a33cf6acdd5eac7484aefd2280b4b7a0e21e2a30181f075e6cd21821a\n3fb2fc3c5b01c36b627187151fafb113108bd6b7359e9468ae8eccf29e47fe75\nb4d621421b764c54a7c729e04c93af7bcf4a66fdc06cd1e01a080dc5de8e3940\n4117c8bd66daf42be4b5f788c9458832382832109e31a44b4996057f3be0211a\n36829a5b62118c5e688ba49d1d6ad6ce370e78c46a01b31e1b41af9d256a5d88\nbb1dad8066a532aeac726108ae7c5dc46ed8b03d0aeb5013830723c815ab4aea\n720a9301ab30028d2df192b6e364e3e2932d274e8c0167f8806b0622e079d451\n302be712a481474ab7836212a84e71c40ac7f09ec43d7d89eff46dc4c30a786a\n633bf24c791f0c24d7bbb289ca5af28f576b1f82e2c888853495fec8693b193c\n331b9eaef45b813f5f9e0cb1e418820c1ed230710337c21a84e6380a737a9f88\n5f68d7759a6a559b516295cc05ae396108e9c1e2e93574d40c1cc061fc8bd6dd\n75248ff58ab9a17e90da5c9de7e063168f289e865ff82fd2f375d7a8153c0995\n13ad1b03ee5a3ba01cfcda6f095640a2f02c39e4c236fb06b04bd4c41633728d\nd04919fc02929a12d1ca6d94c8f1c27f47a7663d035e0b0c86f203d6a18ce136\n4627bf3e9ae1ac5848de91a30a644be2d2fd9031260669a1e3d91a0561a3f128\nde0ce74b7d9c670e5df71c1c86b322e353771f6e1e6fab569cea1e4da3b95168\na93c42a0947716eb4a00ce16d7d65a48a485afee1c911c7954d09eeacdef0f8e\nf684c4e7de0d0546b365fce208643b11b46e51928e4fe729eac09a27a3c5f87f\n3ec823345be0acfc0c86a8266cf576d353bd7db47493be9ce1ae26bfc22dc882\na28c4c73a8845b7f751837d7ad65466d8a89e967d21b4f3d1f35e3101570ffa3\na4f979df8707a0c79130d8fb2e1c9c8ed3a5127fac437a76d237a0bc1644dd93\n12cacd1a4152df315f886114f4ea7b275e961a445e2ef325c6491a1af8bb7d75\nc75008e1478bc88d3ec126f736472a5efcee134e672f55ccd1cc466597fed0af\nb7094806c5bf1ae83279b383d3115da0e32bd72048161b0f7ddab6e2431bce37\nc0d4aedd6eab2b0936b24629100b74c7665d39e9f6f8d10ba96464d0a3f05017\n166314e115dcbad9418e31044f91bc5aaf18e1bfb90a29d94aa5e6c23486c250\nff401d3c922863e46cec5dfb67f7a7dcb1224a0745faceeef349e801e363bc1e\n5cd4d7ea4c15980e456c2a08b508e7d678ad412b212beef1d6b1c55291300562\n81634c293627090e0c61d88b3e36e6f087944825cf28717ddcfc067f6c5f6c2b\n9f4282d32dce6b1e73a8c6f56675f20e122abe73144bdb859310a3029222a91d\n60a4c5ed9892ec5b9ac93744c0454979a57f2669e0d46c04e85bd1d8bb1684c7\n89b9ed812824a6d414f1954dfa40bdd95d94d9baceb856c0caaff55fb89b3669\n067b3c8280405f6f9da5227ea5bec87af16524a93187346635e73c77f47e1dd3\n251a52deb521376b1c65df61a4583a8d940c85a52f97674f2be09b22dde3abff\n04c119495a86f65e60b0b7f68d4ebef6eff903b92cfce68b6ca2074a468d3701\ncea1ab37040ed573900db369dc64ad434bcd1cc1a39970841816cdc2ed4106d4\n22182478c3ef96cc690e471fe81d9ad0ad8e7e5503c312ccfec23b308646153b\n5b9c5707fcb863aa5dad5100ae7ecd4c02b23b6acd75cecc0128d714c5d84152\n2238f9ddb4ffc2cb215f1eaf8994e2af610f443c3c696749a3ffcf420cd2a5bf\n92a5869e3c160975ca101950408eee0315b13be4082994f9465706cb87bd36dc\na10c84f5728f6cdbc6df897dd88156f3e0c18e554d17749b90df4da83e54ba1b\n0922ed87908bf158764f5a7b647dbe4add493671ae0c338b6ea934830271c3fe\n45a00138176aac9ac1224787c1b17adceefd4749f91eb75d3d5c51ed8d1bcd1b\n26c593e444083fd82bb3960fab4ced4ae564ebb8424a8bcc95077cf5f3cb3374\n74bdbb35f00e616561143eecfbee6e5eece039645653ceddd53486998edae733\n1f8fb385364b9ada6282437abb99e2828d04fbaed605f1dfc71e532666ab7a4a\n588516984b71ae57c980ba1e1260e8fda87110281b9d5ff68134b88a1d0262c0\nec758d3b9dffff0f86857192e1776c0fde5fa2bd6db38626ff8624950c2bff11\n7714093944b1c6785c86d4e55dcfdf73d86ae6338edd333bc5ba84b582db5d8b\nc64cb7b9977e7797bc590c4d893c559af4acb847e780f8780498b71683624d85\n76bcf01849b14d6690888ec198cb495cd933cf1e8b7b80b1662d33234b511bd8\n9ab4508f0f43eeff9bb2ba9b7a88fcf80d9a8372fa61ffdfc48b84c2a0706eeb\n8b5f0ca77e7507b5365dffe81836f5a2d6cfe2ba77015edaef9944797beb6e3f\n6c095a4f9048b9748f8b53db1eb3f6f1addf97faa4408b2427bb9136a2fd96a8\n55a55aa3b6b57dd6dcd1ecc5abc3bb226850811df975a8e773e199ce4fb0fdae\n40e7194c2f7708aca6ec4bcb026bd2ff886e6be944155700b88be6011cda3274\nb903da62ef527a1dcfad82a6db26d677d6773fb53fc721c4a08e88d49a7583d7\nc6b80ad5d00db0cbf7721e264646e5e60800b007cca3374c3e8cd3caa52cf179\nf6845fbc7f5e4e135412483ef2dd18483c175c62cb1c36467b971ad98843e9ba\n55e2a830462fa6e548575b3381d732aecfbe2e88ab2fffa0e6ab972b1e161f39\nf85f95be6f3d8e8208909f75a189dc1798ff27b41dc3374ae19c72364dcf20cc\nc1bd2b56e6912331797a30252e5c598dc79a75e9adbae2554f808a6e00919e99\neaad8871ec840c1a2cf51fe27568f24b30140bc5e8ac16be902b592484caa264\n44fc9a00c38aadd17640cb520fb00fc3ed5b8ef01e52ef44aa711bdfad34c774\n1fb44980da57ddae2f5a871850b94bac9fe2a60e273fb4aa13309809d07acf6c\n2e4ae4527fe18423396364ab90dc7a9a8bcf85566c294648e0f73fe31f8cf150\nfbd92de67858e69ff3248a5efc049560154042076b8e2bf41fa36af2bb8be648\n35dbb541892cb66b3ea7ddb7672b6baa42a79a065579208677d1f11019196bf7\nb210421cbb45badd96159e92a294e7d81ee1b80a99269e60df4acb6a9a8291f2\n48324da99b767019c4ef8ae06dc2b71cc8b9521bb26f9ad3f58e53275e4f06b4\n36f12c38a9932f48ff9c99f30f14394c9e1a949030735dd41b4bd6eaa403b0ab\ncd2fa093575635f36cd0e0fc01376cb9294d877789f10e1c6fa6dc7e749caab4\n79acdc12441ece89bc62bbd958789bbc5df4dd42c2d2e6e38f9637796d44e16f\ne7d63c75c8922872ec4397837535a5955b2e728d8ae6316a2b6b2ffd07bf09a2\nbe0518c1cdb5b5010b94c721bedd9aaffd26411caa1b085d505f3b0f4e09c46a\n7a44622a06240fe897494f701614878aeb229d1803ad43c5cce6b7817b2fb27b\nc351030f05399b558f0e1e02e69009c5dd8834b372ae3307abfb52fc8edd941d\nd5b2ae81bcee24b16081834b5a51ecb586716a17ede7bdb20c1bd9856a8220a3\n9eab1e6bcba3654ddff33281729141cbad3d4f89017f1c2282bfd128755f8bfe\nf570009e5d1b0b0e219ea29535d7a213a3978e09624cdd94007753133755c12e\n150ac073895d1f36da02ded23b37176a8130304900e5fe0982eadd54c5b71eee\n9640bb875a4bcd3b8ad6808cedf24b2c7a2aa2635bf2a7fb272b82356c971004\n6796de8a7ec4f6ac2b6b4ec2c998657c15b637db58fff97e8bb55c0846ad3cc7\n7bd4decd88bf7772269da22d4f1291c6eb5c9cc564280d0c7b5a7abca63f6888\n2138842bd5471a50d6e67ef534b6e1beaee4566a1aacbaa5c7ad99745bba9888\n948ee12fa432147783bf7fc0862f03aa0c3a9501abaf025e03e3f4aab7e5d0f1\n921b030e4aa122732352b6738574f9b48321161cee58a96eeb048e902b62be1a\nc7c79c12d35fd40a62f839b0ddd2d14fd24b9e7b2dfa9f87ee2c077ee36ea836\n0001f801c853bcb8d2916e20136a9705c7266e51d157d24c323369f51d16e1e2\n259878d8629ced9ed0957d1c0f5a4d78b72def69c984b697f8d95bb311014ade\n938d5b5df909af274466ad8abec2b422746348ff8422e233ea9b9681af3f451b\n3d96e413c23a60a5386b865ed4ff33bdc3b363b70fe0adf16da0d286ec41506f\n110eeec7b35f71e533ff348515a35d96c79e787391afed140fbe1cef9a1391d8\n7d09b5b7b7e83a5c525aecebc76b168cd728e2593ac5df6b950bf73bae36d4ea\necb67d3f49a16e1a402383aa4affda0903b3fc60324c713c1e914c9a0e3cfb72\n1ec0081a81f09898782f925180dd59e1aabdbe9f24a8541fb6d50632c0034cdf\nf104611465e8f12aa55137d03296965ae1c59d05b37a1d2c0ac6d3d87f6229bd\n906bc39fca2021fd411db01cd75c8d69d1966ca83235ec776e71c94a0c59afd6\n9e57e2fc8ddc2ff748350338e65f96d35fc798b54bf2c1557c0b18c5d0557e32\n23038124b80db9cb7083f3e7e4397069a372b847f517162b182fd92e65dcec33\n727d919728241881f05d13b48e4ac07222d7e7b884faf3bc18590551885d2c62\n08db316bd4fd05969d98a7c5801f92e969235df0d628250c6cdf859d7031483c\n6cf830db3fc7cba88ec9aa89017a73b2dd6b2e0770df1f97fecb59f12a8348a8\ne3fbef18e42c03ab4f3952f28259ac4d0e149bb034c47a4ce282c9fecebd2336\n001e56d9663daf977ba312b361503f1618937f6c70f6be85989f50a57d864c4d\n40622490deca61503c73eb488fe7f9adedd6eda65722c8e853cb80f3acae9b19\n55a81d337bf979b5372dfeb60ea071d32c14b402a25890ab9817d329b3d12e01\na1da362ee3b5f939ae9d6189f4937de601d3e081515f06619a3d2c3a0741c26b\n37d06f8c23577f6828cfc9d98fb417501124bd7b51757e4336f6fb41919fff83\n676c1370311a2f22fb02628be4a250e8c9b0f953c9342e047e68bc93b3f76d21\n43e99c2e6426ab2c5828f587e88d62954c0bb319123c825e92afc061ce94350d\ne9c95dfa112b66e3eac16e1008aec6b0759c821c0bce8cffd2c78846e2b5ee00\nf020dc34dcec8115699e910ff4b320e45f7b815a471e61883362c518685ddba3\n5bc9ce26000f3cf591a8c3fe692bf29d27a39315b76a3d1cf44a52cd5b7bfccc\n332530c2590b35c9bd81ec3d74c1acb10a11463cb34f85c6648b619f74728f2b\n962afff21bf646eb32a9cf0d0347d6ea7fd4f45d257b0adfc1007d0f48f18898\n8c74526cb46f4080dc13f721b7836f2fad5c7716cde4f1277f3568a4dca5ccb4\nc84e6ce66fb7ac77a24b42b969815780a5dc43c7aae4fd8753ea13ec26229d21\n53f88603e9df35f6ad8654e447ee865b0234de3f6d602b4461176d4e320213b7\nd62b95d67250bee9139ea13a7d4c1d93a3956bdc9f43eb9c2c7d215375a3a5b0\n6fe8ad173a15e3ada0df73a05eb17403c7fe16baaebd2056ae790a5d9eeb8a0a\ne2672bdbcc22f87f63e37b8ddd8a6cdd104207075ff475f2c3d35fa5ede6c5d3\n476aa22ddafb081bd587f5677d4f9843a261fff8bf2825cc42552524effeff0f\ne32735dad946f8fdaa5c0a7a9d365a6473709896fe6e292d07abf01a5fdde88e\nfca569a298c50ea8193b7d6106827f694ebf14bb23d4fa6ef2b789414d0e9bdc\ne045e388e48d0842824d8c88d247977f63c9ce5d3f7693be3abc10694ad29c61\n6d4ba1f49784d4c8b3dc5da51099e4ebd5e02f053072e57232cc4c91d240b0ca\nb46b9502cfde1663c073d68357fb8c40c87dd7d90f447a42a67067ad55031e1c\n652cdbecb22a8feb9f29e449a12792a17499d01a17db4794e829a267c98158a2\n3440e40bf226ce6e3fd211bb245c8988bb52d56ddba909775d7fcc6a481ba962\n7dab6d133a3f4a06037e76206c602a8813600c6ce1a190718de71ab9758a0441\n6955afddfdd6f6d70f987864f50f0f38c5a4cdb3bf8c713610d85a2a602a544e\nf319fc45e00403015974daf877f7d132a0225b0e493747f110b7a955dab5dd8b\n8e6f45a81ceb26154499d760e3b836309ddd3efe5d3e588eb39519213fffa8a9\n6b15c3fda976e7758343a5d81ff0981b27516d5c21088df1eeeeaecbfeb6b52d\nef6f0960cbadf9ec16f1f4b0e04d781de8bc8218cccac208ea8612a0c9f548aa\nc92d58ad77ca2d624d8ddc0ce85433ae775f718a4be8ce855ac2bcfbf804414e\nee11039786488b67752407b911f413697ebff6c03371824f90e4289dce7eb991\n35d485477ce955cd32dfc4eea7a2257487d01953c3eca9bd294d7f85513217d6\n57d1beae921cd27bcb3d53b606c3ae09a389ad6a8ddd12825b8b98b275904725\n99078b8aa2498eb4e38317c3eceb94bf40a5c2dc84fc039cee45a76c5741722c\nd025e137b502bccc7e83d1cfc442c99f83b0b54379f29c900a0c47639d4e0d98\nd1431fcea982764fd1b5ce3b7b219eb4bdd507d0ab40d691575ed42e98f7f0e0\n563a00283e85079c4b31d20fc09173192123c192a18c7cb9aa4a85e7c4e7d5bc\n0291bccc5822d63e571a62b14c9ac57b05bedffcf4e7dcc56ee44a426911c1bb\nb38d47557e24d4571ac1a676aa957883cc00c4d58ddc907218e95e88b08fa76d\nc6c2352ce8e0857625e2470ab3bdce538fef2c79d89ce6947a772a023d666026\nffb1611070607519ac93e465bb8ba008f5e625b273dc7d5d6fd572b6226aaf0a\n24e919d942234826927d27eeb34854a91da6342370cc0fe9440633e46f976984\nbfaf2c6bc28f90270bcba941e59a9a1172760a6c6c9e2173c2ab21d5aac5197e\n0cb546ecaf9d2d18f4bc6b3f47a086f123d2e3bc90e0e7338fb081189a4c1e25\n950ce85919783ee403ef31b1c09dcf423fd1d108f5f41df38923bffa2b395663\n3e041ff2616e0ec4616cb0091b354caad9c50070d0bbc28fde15d009a211c730\nd1ef2d98ce1364e6f2fd380eb23e2793b1aa756ec5d33f079a28f31cadcf4cfe\n55a2386081f7b504bc05c31cc6222316ac86f792f7e43a2ecc1247fddbed6732\n5f51e23f4f2cceba360a2847ddb97131ed8c7f2505313274209d41970a1fddf5\n0c35b6e2b9fc6f8d0cc9f9673bea128f751f8ae44c57c012a64996227f1448d9\n11b9a3eae350bbb5aa34a2a2f0d90f94df1db1ec98e8c00d847dc186e9cc3c6e\n48b98a8190e036508f9e539143287f6b6d0111f64231fe773e725b7ee530344f\n1ed21b03768db094635a8989a384c78bc27994a94a629e5ee921e354842ea24b\n0e09acff9651c510bc80308ee634a3872f065b2e6571de20b684b5222b98a34b\nc29df4102821255d1a19d7aac64bcbd0453c0887e077c668060a38bf2ca0e99e\n0e64769b170053f325be21ba945dd092358f05616c8ad18ec3440cf8db623b8c\n440ccf8bd94e397e29b40e9fd3d9d172170301fb578a76eece2402cae743e62a\n7d3dc49fda542617a8024814d4efc26dfa957a953297f13d20cc83dc89652d7e\nb93d970f74195cb1b4750fbf2690ac320c0ef11a23f92ff73e9e1ba1e3f6ba84\n9fd80536ffa85e269607b2c0f8577787ef357f32d793923af2fd13290f938812\nf8fcf03ce176b108da6daaec993182a790db55f5a148fa214c8eea4db8531a9e\n9af8d447731d84d28bbf756b9b801cce8b7370c637c847cd3d77f900e547a37e\nc5ad5034cf4fee398cde62d3f5fc912a971de28146ec4454a040f2f3127b754e\n4e71002e3485ca7148edd05c949037ffa1d17aee11d271dd8ee5f373250839f6\n0cb3c88e6db1524771ad6586add3079c62d7ac14b0f7ea8e96bfc9c43e074949\n0c0f885611d7c6d12d97a1e471a7c0c472219960d20bd4fd36ed1a73392d81fd\nd187f7549336687bd3b65c2ab636a670a47d3ccd500af9253e318b38b9d4c618\na67cb816274c25fa6f599063eeaa193b6f9cbab837791e84da80dae7bc17d750\n70c745a018b25d47e569fef64be22e2f98a0b89cda7f1530d13e8cadca2851bf\n9301951b8dbd2b6ceeb9a634790005cb8649e3f2ee2004754592a3fa632c2fad\nb53accdb283b48690c3e15f2e903c0cea747a7aa49137d1236d4bd945992a6e3\n6a1d4a4495db09332a12b4385d82b776f2816e061fba4b9c8ddd4fe38009dd47\n300da207abf5fae992294d1d737787f13328735f20ca14364d83def2ec119352\n96502da2637ea0cb703ee2032183699b46500065b98d9d4e325fa0638daceb86\nae5c5ed1192e2379bc3a88980e35e814d3b3246b69ee7210b6ddb4b7e385e525\n3df7d8c6d393b3230106101a29f033d485a8f1b1a1352869905e5552fb4ff95f\n47dbfa9300ba183b2c447a9f63fd7900bbed2c0ea64ffd51656b0eae1949eb36\n4f1f32e3780580d59285847ac1763cbc7cbdd916e4dab09bffd70d641200428c\n308eaf3b0b2b1b32de5123b6c2a6c706b7f297c13bca055d95e249443c06cab2\n7a84ba144fc27efc5ca3c310f4673dbce99b6542749f5b186d8bde10b35a5f68\nc4a3808bb1ab5e1e4ac62140b1eb6bfc44b417ca51a715eb38f8294d3af65e24\n381f2573d778ac0c1ab7d446e3661179aa84d7100ef99e6002ac4dc0b317c04b\n4636abd253f1545b8749827e136c93501206e173ab56385995941dd96f6233b8\n0de54bc431fd90b97ee9d593bf232aff4b59286d60b66814439e3c26d8b8493b\n56894b452897a57c207058ed1fae7bc055e3ccfeffe514f481c1c98cb7ce4728\ne533eef900d92078d6c15e68d5c80a878abd4e12d5d8623a699a56f9077febab\n419fc2d0e283f2d1d59db8aec11aec5d5ae9d8bfb9e96a87e8c79f926084887d\n57b958f5e52be3b7134bb5ac508c79dc3b35d2110f5b9b217a1c764cca3d625f\n4ce86c7eb8e75231ac5a647dc2da18c0e344317695f9ee2ae060faab2e501187\ndc64fb83550f74dea89e3a130b4f168912037ecc41b8c911348ac7d0a3703dbe\n42c80573a05a6f714649a904d545b111eba385791b0e3a60197307a5144f06b8\n34bea09d6640bc5200a489bad38f4dee32590adb029d30fd5ae32d1c66356fa9\n042c47f9f4e7ea0c5a8c44547d73828a0ccbb3a4b50774bda6dbf0475668e2fa\nd68162efba20042b834479d6eb4663822002dfa6a9f505d045190a8fdae41167\n72194e2f49b91e2f540365621c4b55a1c2108858453050d89dda0d4a4b833cef\ne5ff8d04d0f8f658cf350a20158875ef33ce4cff5fb4cc2d760dcae9017e4420\nd5ae28f7e88b933d67f49b9517a9178c0c97e1cf8ba07b60486666761e71d929\n7049d371be77e40abf054db623de965bbc824696eab418c69e5e9775e4388cd3\n0e5a470174b0198232824e9cce5d0893eeeede516d374307bc2f3655db3735ac\nd9f80a0932c15f8bbd8886f651ff39847857a250f99342ab7cb3e205ea7e1d44\n20c5449c7f0e56492cd84c2067af02ee4727577ca6dc95b285b5eb1053b4f922\n284278e07c80e15a2e149b416040052d1997ef06286222143cd3f365de2c72b7\n27c6e3352f5490a3b8aebb95e8766bc275dbb3bf6511c053d7dbb23bc344d502\neba85608fcb47321568ca5ad4e56c79ea45f1aa0b423ffb596e38f5ef9980f0d\n296bf0addff74d9ead927def331573037eb3097bee3ab4ffd47bfa8ac16afe40\na8038c3a7a1c7a673be2ec8724888be72d0a7bb9d503d8a65f409b1e33141f36\nf68a1cabce6c12e9bb2b695149da4a206ca60d7f610126ec454affeff3f26b55\n3c8bc724976bbc73c9c3f3a3e183874a614e547a99cdbab2d9efc7c76dc20791\n69d42eb38ba3e0e865c0dbd8f7dd659a70e9de6a3b6c576073a9dce12e0764ad\ne28ff03047e7a329a68d75618d064598048c6dc29b20a3182936b0799b02eba9\n0423e3ba4bb53b983bb510eec6c90bb282b9e419fee378f0f04d2bfd074ac9f9\n348d6cf92565b3428dc927c6c76748491ce5b007dae6fbf101c2291b70f1be33\n1898a19ea64d9109d0cf7d5831360649cae3b15a4cf80e83476cb52bdb634fa4\ne2920cf97a7262f712b7f94b645e1939bc9e5c9c4e6eb202f2bdc7a723c960ca\n1c0aed7c509d2f84363eef8529abdebc5d086f3b8b3566d1d2db76234ffc00f0\nc1eb342953c0620ff729abb01292a8a040d4717c25f3cb254039c5e13deec58e\n1d2f27d1e2402f176999d687b3081ae802eecb60e457c0f92b8bf65bcf289f90\n53b1c496f7aeca80472f6c79efce3f413f1406cf36b3d3c6023cb66c76eeda9c\n36abe8c1e8b41567690bdf81eede1f0d19ffc0cef2f7522f7095c290eb856624\n6e3046a4508dd2ee593b7650bf7fbbefc9cd632e2dcda3f25269cad103b32b7c\nd07dc1c52370136180a0d4c3b3cc8713444cf0d57471d1698d61a3676181dbce\ndbbc4c76edb9cf2d3a8a45313cbf965dd9558acfdbd6ee1b2f8b20bf217afe92\nf3fdc9430027e6ad059850c7071c788430c4831397429e5f41840136bbf16c46\n8a20c3da4e510a6770412a88315b68662ac92584589d49bd045934307eea356c\n39bb45b756bca6271e2a790c33ee8ee57c39a88c1d7104cc069ad6b9c934c8b8\n5a7e58e4cca4d22122f40ed50e7fccb746b4638a544fe344941d3677b8dcb181\nd7748e578995d94b95ec78389ca38d2fb89169446cf8ead7edf4f159980a819f\nb091496526dba9c767dcb800f4a02304e34a540a214b48ce98224f1f0859ff06\n4271e1bcf4327c0bd899f8be48d8ef2d4ec21af76f58309358486701eac40aaa\nf25fed34002eabec8d4998997de5f5266f8b9d405b050e80a70d4f24bcde2086\nae662bd9fb804d94d6e1a070030faa7f1555ad435c3cdca6ab3359e080f046e5\n53efc6f8f3b92afb6c67677debfa40bdf106ab64d7a678b1250f9c671ce0285e\nf2801dc5d1180f2a0cad5948134e64d0a3e042d8efa9213bd1e836496b586562\n04bbc6490e19c2b75ba8f79938b022c833db576fe9bdb5b966ae60438ebb0716\n00fda8db20627cb5ea9e85cee8454d2d33191e8522bff4474a618cbbf123e1c6\n74fb16f10e817d8ab15516d91bd30a2a8e9e8dd411843810c10d5aa8499e9ee2\nba8dfae6dead6ea07df21e491dfdef5220baffcf3d1bdce96a22074375f7255e\n0530babb7880101a1264ecef4007cad714970d74ec3f87c5041be48a3532af4c\nb81af597557d6af050aceac7e3b39957089ba162f772b660669466fa20f2e145\ne48eb3416619515731511924e22b642229d0a727ac30a68e8d306978af8f03a0\nf0165750e7c6a38f4ece2f560c197de8b790a549dcc9e8f7be4fb91012b00998\ne2dcc2a1298e126619e150c91e58a7f4a1c37058e05c7b6475ef68dd36726a8d\n5f62f3879aa5c5f629906c688a6a31baa6cb3ae9d395ca890b452e3e3573e436\nd429ccf54dd80ec67d789a55e4a838c4ad51b9580a1b9082c826ada36398005b\n4005be39f88bf70c1828045e66272d425bb95faff8482602d1d24bff3b89fb85\nb621678a5ea228448a14e5a530a93e653b088121aa1bdef1044a76f4de2fb04e\n4d74547ed262b0d5481c72e743685f76a867025b65848058d8289467853b7de9\n045cff1ac4358535d56df2867777940218ee2c79a0bc3af1217a3d30fcc39837\n56122d733846e569d1ca420628c8100d79acf99b036cf8d4186353ef87a7e4be\n0a261878ccdaaf3afe4f0fee1b8253cfa5fb6d7192d969ab7f8e1c9362a4e9dc\n7ed706ae2ab4f48eeb7dcde92a224ee834c78de08ee3e0e9673490a3ae2e59d1\n7a09bc969c391a190d0c7cdf8f30586bd20521a6219305b29943a67061312db5\n6a51aae121becfb217c15c51f36fd9fd0f137c835f6b2028300da5d3e27767bb\n792a1c6d04f8a37185c5c1d27f99ab1378f33fae16269d2454000a70d69bc2f4\n9131f4c48cbc43af8eaa6a0601141b837faea3e87d6428db5ca70cc07a6509d4\nf68e62020f453441e436bf6fefb807b1fd27d93ff1c0a5d8e44134999ac1ca4a\nf469a4f467cf380d3d59ecdafc12d486bb2349cc0b969e7547e554912cf59b71\n5db814d6e24fbb812a561291c9701774d290b542d6111ec0302d24eaa3f52652\n8874d42f138d756df4d941ed6120f1a7694e6a7c1185d324e75de8ff2613f492\n654d1e93611c399373c877f560f7594e3471455088128b734e2a64528c79a483\nd0e401be46ca99339f955bc6aa94fd92df93c65c7073d0cc013acdb9bf055859\n27c7846ad0f353f863e7fb8cb4739172eed00103611eb45ff3b64455c8474572\nb41418ae21bfe191643abcd27c84598a8dc705ac1d7675e9232a83f7a52468a4\n2dacefcbad08ee88527b02bf2714cff31bed930c798a740d1c21ceb6bed75fdf\n097c9ead0f73144c800738affb87134286fb9619d16dc80d2090a50c854e28df\nbbbdce58cbc441f22f9af5c5b04e8a0758d29e966270b45a237e8f357add6ee0\nc3aa9cc60e1cb48597bba41a7833082daa5d5f1111bf1cfe602d53d65e72a218\n088644a1fd43f03887ba4e222f88b9a0011eab97e72f6651ba9f6632fe3a1aa5\nd04d1cc1f4c4abcacaeec09eea2b14b12006234fd2127303803113a082bed58d\nd64e21b55136e33560eb8e47b898121895df2da19e5acf71dd5493c1391a9b21\n2ab2b6c0d5072ab4dc57c2ab840f03eff0d5b7ae02695b345f2f2905b0992a52\n3ace32483f8db1513d7030d2089a6970fdcb60b07f96be54bd64c68ce5db2f91\n6a820efdbde2fca094a6b3431d90e0d9882e586a032a33d89e40c329670aec12\n9985ad7d5796ca1dbfe42ebe195a6003f73ed252928b591ffd22e460ed9bf96b\n8d63e7c519371537544ff891fb3999d0d0ad3429e76afe112ccd450344c6d15e\n3396e4d00dee53392100f34fb6286508aed328d3741adde92dba741d5ed9cd31\n8a356c33d26171baec08fd196837ec3c6714376b98e337355a84e32b55d89156\n1aca0614ee5855b627c669141be528ae57b747a67a438b7521337e6a446e6678\n9b88a3072d308df8ad4fb0aef83784eef7f3c48d762009355147ea6810921cb0\n5bec03caa582d2e0dd86e1043db0108cb75491ad87544f9c4c9e31a3efdb8452\ne016183b888d677b6841ff09e1147cbdb42f5e1f5549ca52f670d120de28888b\n9f68a91e84321e39f879fbe6044b59c958f9a51ce5c153deaa5932dc6e72a284\n3acdf98fb02aebddf8ccc2f33cd10671fd9f9c0e84e71d881c4f420439c22023\n9c4f222af3457b3e97380d4f0aa1748749a899575a9c087ce38fc709ebf20e4e\n0c8f8353e5358a3ceb3c7aefcfa11934029b4b285256b40e432ed98a8c0768d6\n9ea0c885f200ffd3719af1d526e6eec185f77f3cc04091953d3774e47eeb90e9\n9572faa488cd9fa2cfe8c319a77caecfaf6d720448a85547238afc726a1a4aa3\nc1b9f0fb6cc3e72d14c032ce4aab590f86a52d1fa0bb143ae1188026056bea13\nf1b3523ce7d8dca9336df949ad23e2953dc5a102b49da8850672679c6737a176\n4a03e7a09b01b6e31928edcf528ec7d093f5316305b3c5cc21fbc8a59e41d464\ndb34e1113ac3b78be72103795d2495dd389af694df33661742e3c2510a852d24\n7165a2b628433711c030e6999af517ca7e6ac8cdea4b3a7d99ece764d53d7b3b\nd8b19f769a580266bf9e06b38d9973a5ad13e13567b64e482fb11c0eeeb908af\n318bf37f9a65975523df27033d409384a43eca74bfeaec64ec1f2e9861ac718f\nb1ee902ae8800de884dcd33aa65dcf5a34a0d502af47ce8d0cd6ddb487ea4d09\ncd998d92f1bcdddcd6725f174757fcca01de2172ca364870fcf9e7e4da8ef78e\n12400da4c1d7b4755732d85b027eb922f47cc385c9352ec0b05538b429d8afd4\n3e2805a91b7a02a13b602d91775bcfbfe76c7afb4706d71cf548128b6c296a8d\na386d684e11bb2327c1253dd3de27c768a1ee5dae100935b38ea746e17b02b6e\n4318bd2f22bccca295899ff9e28a2ad30c24be10bb6d2234478faa56270d0c5e\nb372cad7414b875bbaa2f088f8f8fdfb4cb66682056c73d47502f24b9a52b0d2\nac05e71360b3dc8185efdf6154207f9e653a12fe4111881ce11f98a234065baa\ne8da3237c176bdcd5681ae1856eb5d6005f15665a95ddf48caefcb3515de0bbc\n0e5b06ab83a1cb271fbe46a5abda688419b15ceff2726cbe7d7931eb3619c32e\n4dcdf873dd0522b7d7b84a3e84ee3323be5352835774d5a0c171de84d428d6b7\n389f2b18ea67f2f212d8d3607a567fea20d0fcf6c049a78a443ed910c9d93e8d\n77df8a62f9eef53be11492da3271b81ae431e714f701e4629ac45e6b09439f45\nf9e6949df2eee317391dcb0ae0aae489a2727c9180071ce0afb5fa03e90bacbc\n5a75711739f227d18a5daf1cab97c52be42a074313558297aeaa2c78e4e0bf97\n7423dee419dc11665012d7b04a0fae36e3b48a448492a19874665b247a766bb4\na5dde12307ed82444d92162024e1e954e8bf5ce379fb46933a129f717abd91e7\n1b18192c9c85be627d0d799eb591a8617f28b94d448fc6ddc41f9b49f2f61006\n501de3f70448aa83e7c71591fe9191a7fa3d4889f38e7006ff94cba4f6ae4cf9\n471c247c77baa11083c2a758f21bc2f21ab79eedce906e5e624dc5f80395fa3e\n9a1ae2ef4bd856f34b04a4628e7d5f5f4318f5dc2a8c5a836a75f2b570bef432\nc4cc28f0858df3701169f5b67c940a7e13c24a0199ad4a9d1ca8e97417197d51\nd0f26541c251559c92cd47d75956480a435457c8f6ffbce3392000cd068afd42\n644db28d71ea5ea6f7b5b836abb90a3cfdc7c79adc8f4962d7b788a181afb8a4\nea87388fec7b1a508cdce1adbaf6e7c0e4727619e836058469c6103d032cbbdc\n6b8883ea4486c4864a0921997d6e06a794b5daa277473ab5b7beb796a3187942\nc3f9e65206ab31e7565a941df6830003c9135bf4f62187e968aee87ab09672f1\n5945ec9c7eebf3051714371499f446e10ad9ae6ca575a0265b920a3f95828a76\na3ed49e71bdef5b9d914dbecd31635c8057e4fc424c7889a19328c22d8253885\n5b10df69a49920236446ebda69ee5e211002cee1aa293a2d09b6f5911037afc4\n0ef9115dfdd3cca09040e7d37ffdc7864ee839c41ee34b843406e72c24a3f73e\n5304de6914f6b2bee9d5b0f0ec99afc8b2c32af6630dcc71bf469b65c2c3e209\n422e64fcb017927c3d60d1079bcc82f66452c2890a959ee7ac4d0d84ea5c80b8\n1b769d9857b154e2828d3b0577904a4e0bbf6ffb57a4b526fc481bae903b2c5e\nc34097fd6347d297a35e0e80bd097c9e402d4404dc72be253f92d14f59dcc360\n662f8b7020a893396e8e7b37f0b218fe30536654a9d056b69fa94208d0623d74\n2a01c6ffb2d1b06f29b9f9bc0a2bf96b20a641e7aaa6deacc517d4bd25616b27\n673a143ab51927516dc55a8fd032d05562410bf84ca8c78ddd35903ea93acb16\n94a331d5a60cab9c0c4120954f7abc552e7d95824d7ed9376fcaf19f37099414\nd8b10b4bdfb3fafeedefdb8e9e494f216aa2eb7468327ddc77e8e694f6f6995f\n873488ef8b62d99fefa9803a16a560e99ff7f8641f9babe54ed9fe1997c89558\nb84efd32b51b39ea86e7bae1f06947750319a4d6a06f94d4d560bd1cfb2cc8c2\n74be6d08d4910af563633aa115ed604e6a6718b2850d954fd6dfdcb86efc30dc\ndec816974f004142ca9867de81805e1fb94a858ad3bbc3a99de56e49b4657d04\n0ed399de5895706d7cbe11a5bef85c2dea883d1ce49e61a161fdbeb6a85c9e0f\nd028d9ccfe8f17a92b498ededfc0d5c981435960090116a675404f27c1bcee8b\n53d611a4521928ea8664bbc5365ad245831adbc4d53aebc20a89667b215c9f34\nf9dd1598a508f8281f0e08f8bd56cb3a7ff37f12a2bca4f390a542b3ccd2d700\n34df7d40755ac79d837f0f54be2f8b64cd3af8cf76e3291781dad8546d8f5040\n3e6c5fca14cc1efad27344d982a4dee4d53a3e1ca318c7c7de4bbe348297212c\n3888abe94c9197b5e34b0656b4ff22c8d65860b2f208309ec615f2f1cf3162b2\nbebd51f4bf9c1c0f1bab40e6bdd8b30280ff79087451188585c09775359c1eb4\n9bc1325ee476b383522b264d3af8561801bd108a23b44ddfae2ce4f6f635c059\ndb046dae4806fe31863aa8446b9d0dc0375eb50b561706c6d7d72eb9924b21d7\n22c8dfd97802066ec8b9bbdf373bff5b37976cff3f496dc62d5b7b00c98f2c77\n7a4df62ab56efa331fb93891c80f6a058ec8c89eb0faa8a383a28be577f24872\nb379e5465915093c3321be9d925592ed2400d7c2d3c71843ad132f07123d498c\na41c0a41cf981ec825552fd62482913596d484eab4b6eed8177197db6d85049a\ned04d17bcae9142e9f3db73c7c96498accd2e34e299d30f7f5a46fe3feafef4b\n2d0ba8ecb36c91774c2f2c4aeaa9557250efab06568875f0bd57e39758736d16\n4bec5df41509f69d2954c12fcc4884d73c63847ae1e70a791e6e0a6bd8497e9e\ne096a432c237bf659b8c1021495c261ffb6f8753f757a8156a634c6d3faf81f6\n00ce518581dfacdff00e90b78f730adae456a70d547d1dafe541c56273efa04b\nfb0c882f13da2f495bf00452519d522e1d07b6bf5e93630e39408a5e011c0940\n8344cb26ec7f0bc859a99d367c03c22566b3e747172f5f7df04cd9d385337ad3\n893690ca430f9fca756691b13da295b437add5bf13b4cb46480fefca2801546b\nb47a1c62e8c6971e9a25fefd44f0e22e5b6c313320daf02319c28ce850649edf\n2d2514e82f1b9374598b4ac96fcefda4514799a2a78144458f2778f6f5350cff\n5646f2a136dcf74df23ae08a4982fe0b2685dbb1b013ec4c0f1c1546de39b3ca\nabfc326ffa9639a4d4314b8a316571289244376f2871cb599dc50c1380caf038\n64c1504d48b345d253a81c3121570fa4dfaab60747c03df592550eda1d097fc6\n826d14c1502cf0c5e506063ffffab005cdeacba9e645b1667e2a51b53594be1d\n8763f864d511372ad578a7cd9bf821e6c54fcd954d91da8705c498c340e5c820\n3763b164cc89553ab25ffc43c111919b4907131e2b57237ca4f5578297c273ff\nd9f6a869b4b7a757bb72cfcb3dfc78cb1f30c6d6a90720938d1e72f65b2be525\nc0de2e5d2a8cc4611a3341a321ddfbee824c287040186add08340ff54aa2508d\n4902b08116e0dcf98b1c3c55259384a6ebf7fbbcef27b2fc5c6c46cbe8e5f602\nc18746f2dcecd2f6e114aac27068c8d396f2d1b6e99341c88cc8836a9d9fcbc2\nf150c01474ba8b690cfa9bdce9bdfe9d0edf1e6e7f34e8e49df0bb16e1da65c6\nf4412fc707300c09e124ff58ce1effce49e4cec56921a2addeabb70422eca207\n1264dfe7c05a8b0c343905a96dca8b103d924d83afd8425fc72297c3fbb5c055\n138c35fe80159a61be2f4d907c690f5e9aafa1eedd2a8b95e00967acc11a0e0f\n9e306043acb4972c7807e306cd4a103a70d803fab4fa0130902e729cb2f98bde\nd18f703660952191a77109972cde502c1505d7c1eb2a1b28dc498fa52d866154\na3d89c396d533555ec5d0d2cfb52defaf65121426f1e14b40c76e48db6d8ed5d\nfd75a9e2209a817577c526065cd8a4f3eea95b613af799748923106f3fc75e3f\n726e196f8daf792d0f8e14e6cacfed4b28458744895d3ef10361baab574ece88\ncf753b2d1d4fce42a7441d52012150ad81cde35bcf9a2e871e07dd2da9b6eb44\na5ab34254bd4367641a046ead88b3d10b95c7f4adc84492918ba9fb00fe3ca8c\n945f332799588a3a4212d11f17633939e3330056b927b6f74ca837b3917b4f21\n9b7343df75dc111071f2b4eb6b77869fde790cf84bf997cb5a646ada25f73319\n6d6d077219cda760c6c4882007627e094f85a3302d0676b292d87df19e478f7c\nf75ee1e7d3b9fbdd51049b1e6b3751e92bdb2d7a89994d03d0588cb5a769a02f\n6bfa55611902a035f22c05bfdb126ec9af38e7e62d739ffde3dbe5bb4556c90e\na42d229789753e1be6f779919f8bb54bfd4ff319b081f2017951297823c6a28e\n4d2f426540f8cca55d733aad531b9fd2cc8f50b53360a890763822cda4252f09\na0be806d609edeb9af6ae04b3dfdf8f706d99e9e93c815c014d03243fcaf01e2\n75f538926084d2975446fb0504cdb59dcf70ac78f263edf4cd8b3bac7ae0d6b3\n4f7fcec7e79d47783f93f8f7a33b0047004ed9baa1cc09b6477de878d52d08f1\n5953e4dd6ff1bef0862bacca7087703b440971006ebbcbc954d045056a5f8caf\n00863b50b307f732d1f74c98b7b838a1a162ee1301fcabdc810aff4d97c51b54\n789d5fcb73ab199ee339877de2740ab703f707ef0729e938b9488ef1d92ec434\n343983946388dd286051f46033cfee5ee2356f1682c6c2a4367a40bfdafe2086\n63e25826c66a9ee1cd51de10b58fbdbf67927ec0c2fd2ff2f70c204e8fb28195\n281129bcc9501e0a2a1b8cebbe1fed06778eeeeef3adc0389e5b5bd2cc6ec35a\n34d154efed2e23b6e92d55d5e9380353e3996c8a98e8af5a144e865800aceaf9\nd2e7dafd4704a90a5a0ca249b3a5562711ec25a2c8110b05580a08cb443ef3a9\n10d1c45ab2f0e750c8607a13381a2c59ec96389c91f547af23ea347e773b1459\n6723b9a4e495f91b6274f1e556b02cb24f72192b558aceb1d780fcba5e56bfdd\nf594053cae29e5c04482660900cd04f67771075955709e3ccad4e8f21f66150a\nbc55fc604c4747b2ee6882f9b58adf66f9f0ad5f78072252d2088257ada35fa7\n780d3c14894ed60ec428d3c45b607dc435cf6645deb587183d6af6fb0c2ea65b\n7478b9e698ada5b4089cb24e081826af96bf3b4d08fb3a4a73cbe17d0232f299\nbd0bd00e2df84c3f687628e126dcc665a2b399cab3cf3c717d4999e783633c31\nd4a31b3f2663c35e87812aa3789e39df118bd62286346bf8ab1c6576512a51ed\neae3a9713792726039605e4bc48b082775e3f6967204adf341f2e71d3be37b11\n489fe410be55b86ca3ba08d56a3dcabf543358ffc7238dee54352fccd4c67316\n14a38751e220134b867724c416cafb43405ca178be8d99558443f3d65c43eb4f\n543547131913c1bf184a3ec570ec7747f040f028d6ddbf7a604c80614ed3f13b\n03669d43e91d36dbddac8eb98c992344f8d0814dbb60623bd52e3a2d83598d80\n32aea6cb7f16333be3ed28a9c352fb3839ccf4d496a2022002718a28f17d45eb\n3a983b469892472d738f9e17441b164fd64ae80e0796aeefb10ee2d2249bd12b\n56402c4711057313ab380fb0c925cbd189054559a76eede4164f1649633ffcaa\n74946b09e748ce88c5d91960d672841dfcd2a209ca65076328317b42f538436c\n21856322bbf15c233bb348e46ef6e55a191fffd8c27689de9e3fce9cbc26541b\ne8a44891da54891fc41ea63434292bcd16d15cd71f9f694a4e2e1af180c80585\n39dbcf1dd75dca4531726aec0ac671d3a49c37812c5a24077300dbdd2d505b6e\n3492df405d7c08acd4ead50ee0fb36536220893904f0c0b195783d2145d2d3da\nb4964495df6fb184071e3bc55366d93bc00dfcf8f27cbf12e25fe6922ae7469b\ndd75222b8a76810ca5a05dd3f1b4be4059202ffb1e741eaf25d2bfae51a2991f\n0a7502d93c14c9ec7df13ae0e1e2190b750551d4c8040b6c2bc94352ed6730ab\n5eec8a7bfbc415ee0bb11f244d32a14043db9e5f9ba610877f88b7bf76786e77\nf1c0db2ccb58e86d511decb102e59f0b458dfaa11dec4901209275074e734c4b\n68b4e0f523984f789f6fb9455c98bf8332378a9bdafaa73e41e17b55de7cab7b\ne89bfd4ff0737ffd762b448a1a184b00f2f6422d818cf9f1171d16872dcfb9c1\nd5d4dd2bf4a41675ceb9fd5aa182948fa485ae4a1dee1ef69f63b510685ad37b\n01ab4f5ab745c0017fde08662ad50265c3d18f0e974a6c5b23cce23f47154889\n4c9ecccde4f2215ef675d57f18eb1508b2dcfc442520b1a9956bcb5a41e6c9be\n871b6eed9a48aa0ee247e41329e90db9dbb77249e8b242b6d8cb58ccbb88e3fd\ncdb9abe8677091ab657b60ce0280d21aa46c00647c4e17b05a55729d265b3e29\nb0a64043386d82d0bdf5d1a89b4fefe9a4b960585ab64ca89bbd7ba9c5bc719f\n45ea0e13ed94a690a6cfac157f1ec9f0640bef0eb56141383d60097d08f521eb\nbdd81e580a2b6cd5355b3a7b39e28d156bcd0458d338dab3aaa2efa7473d3851\n5a4cd8967d9a841bbb02adc454e621ab4bf1b24c6c45c0d4b1d6eaf1f726a21f\n8663c0e6db0816d79dd6c4c1eea0484483629567598fbada7f556c08caa61479\n00d0c1ef9d9f7d4245fb639493c20577ac1806689ed1505186dfb4af6689646e\n4c968e20de4b4690f7f69af780ae2e570393d6f2171779b484020e5519bb8fef\n2bfe908988d4166e73e49206b35e23f153f83ebdc4abe68a7c5fc79b200bccff\n7a6728c3185c23b2a357c4831e0ba7e7e92f115c140da639bb714f3680320dfd\n765f36be88d4a02dd0fcea29515addd32f5f79909787784c0be084bef16cbffa\n7dc5482a712740c8f47a39a388dd2bd7f0ce98542cb624951c610d015497d58f\n43563f6fe4f86ce9a493e3f183b881048b37b0488e7ad86dc6c16d2031ec367e\n2a706c19025fe18f4236f50b94a69cff0f09f09a66c6c5cb7e9c342bfdef4a9b\n2115fa05c641247759946333e4e16afefa343c2ec752f16fff351d19b6fa4af5\n512720883733bf99286bd3344d7760d685f624a36d418951f1f0efbbd4172ba3\n1e8bd690c80a8505d317f4957f4181a369e3e848e519562b768c6ba36a907ebc\nb8c5f3685f795e2d475e46cbbcf410368387b36736ebee3e9bb20e709c34ea5a\n6cc46ebf06dda7d078f50e99178dfb0239af54ef5643bfa82ec99017235d562a\n69b24660e3381d97635ac99cfb8059ab8428de65e74d17cf63a6e7ca8f02342e\n041c51529a672c07712f30deca2e5d0b2a047b05ffdfbeb0fd06db763f6c3129\n8191da2d9080119c5f3246fee285b8f865627aaec46f50ae40a4e01751a5e039\n2b6ed5365f8bd496251e5cc988224ed34b11265a3456623d561d6b527eb64ba6\n602acee1b66eed4aeff8e546154f061159d17b3f604659e0cdc5a6a019b360d4\ncf8ccbf9bff2c03c5f832e6d2bc921b9406a23cc99cff5d9d2fa19ec12c71e4a\n7f36e22e84e0b3df83bbd1eefa3aafc540d89cfca30bb0031c9d72aadff0606a\n4fc8adc99037e372d6da03c60ea8a718bdd2fdcda477e121271c1a6a50fb8205\n193384a66c3b2106726a7d713aefb8889d02399a56249b42f09fe7dd6feb5e49\nafe929d39bdc63c16f7680044a58ffebdb1a86c534c3be9859041bbae3bc35be\nef73fc6aaf63f7c682e8d06b38f3f0756140f5bb786878c39b69afa0fb4d0056\na87e8f5ebccfc6dfe5cf43f0bd559a2b2b892e9bd498ce26fad8fbbe6c6fa434\n8f129e293b9fdba495d88b92b08c424024bd434094e7dac8bc3b775744927cc4\n5c7218aff4a105634b1138214f82abcead701431d0b882c980e7fc49bc303ec7\n33fb529dda8824f6892d861aab637fb6eb6029230b05f3e7612018eb9c438424\n0746be95808eb29b71b468d41ffbc1bd54a4ec1d976274bbdfe09bd0463b5129\n04ce74b7483d917e98b4c54858c73107caef5cc959c7bcb89dd508648548a863\nfc597d5b9ec199e77d69912c33a33cd8852cffdc81d88389afbfa672da8d08ec\n0bb9c4506c7113ffc1fbb032abb04dc61dbdf2fcc7f3e7438382da34cf6e795a\n8a798bae5d197642175095b99ea18075214b959616688d82fd3e8bcad4f6d230\ne67e7125a88e3cc7fc5b7248933dae009568fed65c9a7c69be843ee97b50e674\nd8e7f1376d4cb67198ee182d14dea56d13d3fba8fa1b1e40a3d5ef9186537a06\nbda06147406a1dd9edbc49341eaa03e35ad88fb54047ec80aad7a126edf58c51\ndfcac3e2c45c122ed78108d479da88ad159ce220f96575d86c682e18adb46331\nc4141848d1175617a0bb1df857a6f57cfc7b25f7e4731197e2114d41f25efb47\n9fef56be4fc19bc8c17d890e681678f704ffd718d8d4594b670fe9da36c75e4b\n5d7d4a7f194eb63e4bfbf16e3d963b7e2edc72ff17d5f17834d04c09fda71a5b\na82114c2a3dff0b865fbed06ad1859aa2d8b3146c248b2a97e8dd058cfc9bf3d\n570bd62e0d6e73800a2ae8cb770e2cbd29ea05a92202c12853b55f9dfdec5144\n4bad959eec0071334966531b768544bb92dfe0e3f15ac7731a8af84af803aa4a\n0f072ca3ad8dcfa63c9612d2850e879c519d7e628534c84082bf6062a5c336ce\nc26156af635c2fb61d45eb28f52c853c2c41f5f0157c6de6342a5ed20a2627f6\na5aef4a6661991f7addf771e31bcefda32f64573f58a67d7fa0083cffc27c1fb\n6a72d8f2a0f19731e5c41b12402ea44d029a0c0823a97f75a0b04d51474107f9\n41d841dd5bebff85afb7ac67a5c817e3cef443b8136bbdff5a112b93be5c4ec5\n08c5cd0412eb2ca0a7fed49e416e7a5c899a9118a0a2c590b6c1a482479ff7ec\nf361c6a276a5a2956cff8fca308015789540b33f2991c466b8050ef0e328f36b\n07b638527ca6da278aa615e1ccd8afdafd3005e88799ede1799b0960edc8ee16\nbd0de4cddeae5b4c09b646409d7ca97398d35f915fffc9ef28c3f6311a38d8ba\nb79d924cf77a3ffeeea709624344556d0bd444ce3285b9cc2dd47fe10c9bb9a8\n84f200db79faf147fc7b7ae65058021a3c281f6e77a038aab5142fa333bc4127\na9a83911fb9f2aee6fd86788cf8067fa4a4630994e5a644ddfec7b982f2379e2\n224406d54ea57a51e48dc39a8562a710998f494bee0f31321698273626f83a76\ne1cc6e22ae5994ffab9eb643b2ce3151fb199d593ba51ea4e31dc06a51918ae6\nd1b7009ca6b52adf396b2aeffadcddd29a2dc156e1278c1cedfaa83e6ca1e1db\nb21ca2f099f52060a562b4da822aceb2ada7bbbd56287809b9e0e6d377dac168\n92b935f9d8b0c06f441d31d98c7b36745ba7ae6b94edd368ae2e711c4e89f36e\n8a2e3a40121fdac29bc8d0ef2e67147cc9ef495b93f512a2f74f7518b8d8b2ec\nfe90fcf73c47a40e0801ee70153426a80476f7a5287cf6a24ae4a082c5697ff3\nbd2b1d5bc2ad73db3452a49f4d83d792d1e2ba4eec06fd4d3d9b42c8897ddd28\n7aaf1707ee10b794c9f7e1be564a3dbfc44fb88e84dd6bf253b73575db658801\n2355aa59dc652627430a83a93e386d6dec364b93d113a27ba37539300559f66c\n014be7fccdc2f6df84deb7dbd36de72e2911f94056cfbe2703f2eabeaf5fcef9\n5cfb4bd33adc4aba14cb8d021e84abe3c5c07d58195339da38d321101ffab18b\n6baebfd40b896631137aa7f44f6581d26345cc4d08e00ec80cefb364523b5d62\n6932e79a3c662820d2d2d7120e8159d141fa3d6a39e5c0cfadbaeabe56cc58da\nd2bb07aa899109176de21e9238f723dcf01bbf5a9bcf65b48c084265a6292553\ne79672d92e01ca02883809a2d8ed8c3b1c3624bffec507d7098b93fda16e68fb\n28cd427159472ee414bbdf61611f506cc17f261ae7f62729883e157be0b6f369\n7a27ddd6298f8387214c0f7a972c88f247c702261db573c6cf943c88faf23e5e\nad410ec4891db790ba2f3e9b01275da23a1dc085a5a88f515eb636c2f9b37a84\n42ccdb48fd68d9dba9f36d27103748d3e65d141112a48bc0a538eca907a2543d\ne38d0034708af79851ad622feb8f114ce23cf68ea5af94ece5de102ad396ca60\n908aad2d41382e489de5a21f29bf236c8661e75f10e8fb698f8d1b891471550c\ncb0b7ff9124a88df59718fede4de2f7a48cab77047a433a53b4493719698d271\n957b2c052ec053a07895b432ab070b0ee3b7ba3254a30bc3e7d25031b54f8e6e\n6f83e029f96ec78d7d2aa7a86697e14850c0027106d0870e9176b411511fb526\nf3d407bc1aac74c84c9b6ee0c0652bd735431ed464235de8d1a04fa154ea4315\n3045cad50be4fb45fa5f96f2a21199e4c10616d0ce7aa7d464d19e96d1e70712\nc45726b5a433bb53d0a7f8942401280fe10f84f772c36d522847f5017c345501\n55d75c9e209e6e509c15a5e7e35d1a0d0407ae1a0894be8c3cbb49685b853b43\n24d4e9c6001d40a4b995c09380364e33720cbf7bc3f6aaa7ee38f7c11ca2602e\nc0bf5cc74b790c2f2b3525b7f36ed6c6f28a2d0bb42354ddc143bcfbbbe8c815\ncf033b1195e2df6f32a34c5c7a516987cc30f85ddc3767a41273c396cb74594d\n2e3a02dcda51a8c6813cbb668477a88d6dbf49e092949dfc0054f8b6e37298f8\n2e16a5f626e6662849b37e6dedec725aaec082c75ed13090500e515093fea09e\neb7dac674bb5da04117df2fa23b0dabdea710c537d4de590c6f552525adb539e\n4354ef03ab7156158672f24268daafc0cb7e1cfce8dc440d26021a82a519c244\n82fa5e4d5c060999b7eeb3fd23646abebd4e23c1b248c952366ae78bb7b02fd7\n0ff0ebb551cbf206e34d1d11f1101624cd9ce90a4a0c77f0034805280315d0ac\nb5edd96312f2deca7005d9a110578a7f36d5f42eb243bbd5afabeca1109f4345\n610c2fa3cd78a0df2be97200681c408b9cc7cf6c0f91bf244c2c6f550e42e138\n75e9ee9841c3115fdb06bff4e69e7e8820313eca46d817f9b9da77156e059f7d\n0da916a3d79c98b6b6aaf5627f65d87537437d09e758a6b4e75743a2572052b9\nf9570763ebef559489fc2cecc0da39239d7ce95bc0932a081d72d1627e20c1b3\nfaef633e5f30cbe3f2efd188da2486ddfc7c46fa4b79d23f4cc74fbb9125a3f8\n3e7e01b60e27857a74fa928ef4cc745284f34312d8976901e792128071532489\n4dd44a4a52d2249193ee2c6640854b11c867dece18f17e367525007559f01696\n6e0b79962444a74e16d6cde9a99c2e73ee70502ea18f86ab048f57170fa6d88b\n69a9eeabb8411e9c8699da9f458a9a0febdfb913788e0f1feaa99efdd14148b7\n3f8aec4a032b1fea73c7751baf2214aa74c013eb1573639c8d5684b97dd3c102\n424e28b25ff9a54ca7d74d9c7bd89b8384b0e6c7b08dbbcc2cd00dcab22165d4\ne5f60981bc76ebbc6668507f18d3df632cfeb15fe34b6663d216c19e281087c1\n4d17efd2e8e3249efaf7c40596ca1cc8ee466a2d34ec9da57d956b574f941a29\n01a345953543872dfa2abc6c268d025497ffa2dd0cf3d79b00fcd96202b57c54\n994d405e63b6bff30202e2b18dc3203109605149c30deb46f58decfa28e793f6\nb5e721bb78cc77d2503dabe7912db5ab1598a6f4f92265d069c19b5ea6a87eca\n24b621a051a16264f680a253d803dc927fd043e4e428c518caf703208d6709bd\n9a44258bc00c2733b04c835211bd3935d154c1ce0f69a86674b39fadf719e16f\n2a9bf8eb3e47a7755b2669d77e48814e35531db83e00c4bae0dce0f04da7a054\n836e1bfec5d78d89ded973ce2c3f884a66dc9fdcaa326eaea5734f4fdf9227a0\n447bd7aad507403d5b3eec16bf9c7d93865307a1955e4f8aa7ec9a89f62c1d0f\n8f2edc864568614450e85dbfddf4b496580a020d2dfd541f0f9919a877d5623e\n1b98e8d40c1b446c60d34f0cb96cc2e44173c9b49d08c881fef0a6634701dae5\nda244b2d17063db74be090eb511181cf7d2916ae9bbd37c5472b60f1dd726858\nb91cf086ea7ef7a3f718c0dd406d8f469d28dbf8861271ff6854bfbbba1cbab6\nf4a714336112e5864841f9295c294e45cc848cb76bd8555d7f66c23499f4639a\n6b1eeab8490b68d906a16b5ad32b4546f88940aec78b011ca6e8f3cd33cfb9eb\nf3c5db69a448585da094ebb2ed6eaa283ba55274cdb30111a259c775f79d3a3a\n7c41c6da1c6cc97e4bdec11681dbb5967840f388c8dcca858682c7563d648424\n316a87bb2e970191acaa143079406edc0969c514f388890bb060ae8b5d3746fb\n57ed3e509380525003a43d61e756d0c7f9e9108fa4dea269db8e0dbf79f3864c\n1ff753922c523241c1547f707b707694e89bcfb31c112dc3ef08fda30e0d273f\n5df88210828ccc95c116be29cb55ebc86bf38100ede685287eca53a637a7f58f\nae1a6dfc144b1ba48456eea650128134bfaddde3e604afc293493a7e910eec77\nb99d8429a209b7728427869ea42fc7892077cd168f28359260a5864814b9ec78\n75a18e9556b33d0edd47612721d8f0a44f285b58441444feb1c71904c54ae2c4\n96dd2229daf695a1543b3ac16cf53916e2396ba0c3927231bf8e64e56d5ef49e\n66bd6640d36aea19f446e26234d2dd22b1df911dbc4143b8cea59e84461bf0b9\ne16d3f4361465c81367a6b1eb810f9271d56dc7cf8a4ef514be1bbbd921de31f\nadf2fc63e6e86984598fe942f5fa759dea60f55ae4ef011c4cf2ecf2f32438eb\nb7e99c04a5944068ffe9a9ff9810a903cf2419bc5bf33a079b1cd3f862426f63\nfe283710fd2da0149146d6515e2713ba828274a20211d350364c05c1767033ca\n2c4108abbd924112290bc5226bb666b2bcf8103192f6ff86d6db449427d1d6e9\nd93a5fc559ccd546482b8c8b2460ca70df5b3793695e2ac690ab772927a5d578\n5e5b090573a6ae831542a63da23ccc6d2bb1d45fdffbcb029591943a34442718\n42126ffa773af9527733e4f4d8c10457b743d1e6c3caf34f29bdb53a73f6dc84\ncf3cec5c41a226bd5a1dc4c3409f63b4546ca326d9b637d323e8c44e55cb0fef\n8f8c807e2893f07f75aba52ceabf8eaa9922e6d08500e133982653b87c236520\nc79e40168f5b83c66f857111b8b4d38190e25e9f41a41fb64a5dde7af8f2dfb4\ndaf80eaebfc48717b90a3ca26de249c7c68fda8820a21546998c47357283e816\neaec04a50a12aa4f7815c42a1ff5647cc4326cfdc354bdeb351a62e511333130\nc2dc4dbeb26ada4ad2c04d2c9a3841d13e9a3910431bfbe5acf2d0107e2a8433\nf4c2664eb161ab237ba38360aef60c04fb2a1be7695cd42e7cbd3a645f9a8348\nffe933668bdf286b7a9c394677c3f316ff725ec4fbf56776a3ec46e8b81629a0\n18c62bf6bfac2f9aa1e444570ee0af4a72d68498d05ab1920931a1b1d29ec01b\n70aeb0667f252fabb8741f18f1d2b3b6d19f24e6b36e4266e8fe1e6efb04d27a\ndc2be6802fd7e7fffe88ef550a88c31c9dde4580a3370f6a8194dab7335036dd\n72ee7a491ed43f4a69ef98483523d1331cd9223d202d5bb33b18941602d1b717\n00ae62ee6477ea39bcd399451b537fdc4ef0c593485b3118b9e36fcc0db68396\n9d4682edfa645980d4126701df51890655bd73bf85767a234b7a718cb672979f\n2791e95613f48b3b93abba0ac356bbee5e8b701b986cebcdda9b87c8cc135b4b\n6586a3fd160b4e3acf13a88fbd7704e17b1a6d73ce4db474f73a29cf562fa1f7\n306a40b1909129becb291d2c4986de647996bbff881c6622f7374470132a1c64\n631e9c402021286c52674d774ffeb9e9e844dcbdd2a809a1ae24c015578b6f62\n8fab2cdb318b03b5c3d77f3a3a87c46989bd3dd5fa09dc5375c0fc51fba832e9\nb6621697a90acbc66dcc6ea0d890ba2129eb41bf22906d01f82cecaad87f7496\n9dc37ae417b0ba79de5aa66d8a12cbee50f4f038206ffada5f92496fffc05a1c\n5655659fa25ed472659e1b7651c90786e8a33edb004f205986795a4fba089fea\nd47fd7c14af633dcbfb26572c2ded8a65b9e2d51b0ee83abff13a2a25544ca71\ncc00913d46253ccfd215d760a458a22f7fac1ec5ceeb39026ff3658525c53185\n6e119cb22e4d2497555a2ff4d51c323545e6e464891e9d6e384d7c65fdb819a6\n9f2af990675045049d225c8575309f982ccc94f0c4908a6d14c3e4318c38677c\n9bc7186ba5f69eebc5e5410586d388a0253fe25fd319f890dcf20d98be7182d5\n7d177469cf6cd9d51f728effa27e41d953275a73c1f44c2c8c7103ba2a1ae893\n63f429b96183a160e636a4e51e7dc281732b480dc24793a26de59cf401fa7bc6\na6a8634935c4656e8eeddffc3805e6b69b1dac63715bc0da3da5e331dd67d1b6\n927fb2a7b652d1b74785344d9f64ea4d64d86f2473d2f43800d2f3068179cd3a\n34392eaeafc9bfde8de3eadcb20faaedf9640ca49e9f25e5a43fabecbb521c6b\nb79d02483da1ceda4cbc38041f5506afb9088ba352952f2be867b9f10e9968cf\n529b537fedfcef63457d3620ac25a9ef6cd30aee9a43a43fa1fee197de64e966\n641e653eff07d2cd151879751bc354dcb69a71d98096c3a3a9dfe94c308378e0\n47cabcb3d8994c929face095fd1a1b2acb51ece0870e0d635cdde62e29ddac9b\n929db95c08d0a19f16bf7b45af8f12d9e67459db154b9dd7888aceaaf51645ec\na1826052ff43175977f583f4eda06a6c5d26d0bc30238e96aef89b96cf8260d5\n7e701089625539aa8f2d7a5cd6559bbc7fd74c237e51b38643706f004187ed2f\nc49becf19ca45457c64c0df43dd51979b735631d5729f160c4522246df1a9380\n07382b56a45ab96b76910fb9d329f7bb42e4732c3dca16856f5db5d0a4fb4cd6\n066ee1f14936d68016ba41e8cf4e37dc01a215c906b51d26d5755c715407fe7c\nf05116ff7a2ad5f715f04f116294cc60c48c8fdc1ff144079415f1377707fdff\n37aa7518390b34ffa7a92e5c61e8bdb5c8c901263b863c12fcbb286ac5cc3e85\nb552d3e3c77c66f7f7a7286fbf511e682ab7d6522cb0cd60e5bbd41c254e6de7\n99d7788e2042c0f4307a6b9df0557bd9ded3fb4485c849ae8f4f1a02f31ae4b8\n351c876581bd88185bd73d0804b23edd386a39d1dc676e97bfeee2ade915ee97\n343f43c7e78000a6efcf17ebc986097ff4fedd38414cf6d8992c09491e49a260\n8124d00eec2cac95ff05df23e4d24540d0789722f365a0b1d6198d35d75ecd5f\n33f85d0e817b5e4eb435a60362edf8d424c61bd3c6b4474badeee3dae2af4db4\nfeb9d20b773aa6bfe4dfd5042c03005040557014bb9daa1e0958e4ff1e1f2da2\na2e3d0b7a58752bf5910e9d9372d13ca3f0786d7b55420bc1a8f9fe13130e579\n678313fb7f6fc7623938b5a44476bb0ec785584f5dbd05c03e09b892803bd514\n4b4b4a5044c528d64e76e1aef14fe63f16ec3bd6e3fabe8631b5d5b424abf28a\n8abc621a4b79e50ef09bc5fc60a1769de2478903519738afc50d645f537cb4ca\n9dfd667e69fb3df22195d61d86b7b3346722d73c01cb1a939b89e070efddc3f0\n777ce207a9fac77e784d7880471f0419a36a1ad8c866be1df3cc764b71e69ddb\n5af7f39b3b8a27e829c2db591e51029f5a18bcce64cd7ad6de8e4b1341374e38\n3dbaaaea01af0592cfabf086b56be55bb4bd5a23fe9d670fe2f9969c8f5a2e2d\n0ff138deefda719f6b59b93a6bae0effe4f530561c2b5a61a82783222d1156f7\n8f70396cf382c4ff780f5fe200968242a3a0fe6f3580fdf9306cb816d3691a90\nc78c6a309b858301b254e6a4bba28cb2037b7f1373a3c657b1b66916deb6dfed\na8044a45cf25587120f1c0bbb3debad55eea5c0ecafb817a901efc72cef1c85a\n4dfcc017a1279648b91a7b756c3b2dd689aced540d1d19948575675dad1dce70\n9ab2fcbd4ad6a016265669962316c8ee5b5314e7707f979772aff5ab074f09b1\nb078627f3ddb648933e1cdf8d6a3957a8dc37d1a21aa378bcf217115107d2cbc\n0e7ee912ebf02282147bdcf240655114a793fe8aafab8e953664b0312f6b355e\nc3b28204a191e125ddc8973d0391cfec829c7aaf75228f0c3bfa265b49d426c9\nf0fb8a357daf3a0b8c5ba5ac0cc3a80f67c158442928d129c87c82bef16e0133\n3a84a9f97844cc900671e3bf515b079aa1ba921e1861a9f7e49166f70cc0c994\n9f26e3038330ec90f92f2dbf4edd4e34bff875af72021e7bf969188d2cc4a994\n858bf93723c375d96c1f4b75fbaef14a69e7e25101d847b45ac0f89fac718f04\n888e3ddb1efd8ea6a46fbf401afac4bd70ed48957335794defbd095de9a347fa\nd28d04aca1acc0004201df1e852d9792d5ff18c1627f89917eb5d94983cbd6c2\n645307eec9cbc222707e0b868854b7237a25c64cc65ad9baee4fe5dd3c77978c\nf91e0d529126026a0c2634ca181e9a8d02dbe71b368b5e565e2edf1d5856fc6b\n03d58d18879ec92c94c552491db94f1a4178929a23e76d4d52f95408b63ebee2\nb1bd3d7997f558062cb96e55e4a1894d5e0a4a35868e870d2447884331e106aa\nf7bd08c7b62ba767ee609c87d4a15814385248493991c07652d764afe95a174c\nbb5751c32eb447ba50155961a4a892c2d8a70971d20d9b6fa94a8d80d9671ba5\n9f6cbcd32fd6cff32a2cb877cd60675afd995802ecb37bde513846f530a60c7d\n9d432ee768a9c4b742bb62337221b0981bec2271214013ae23f1762fe7565168\n2f9effa5b993227c02ffaf7d3b37ec6ebe101c0ec2d8e8a3c13c0a56ac9231de\n48a0e39d7f25997954861ba8826b52d8852f189b4e2bb7593ff75df173c596f7\nebd980f276b3574e1327660f62835d56f32bdb3a658c2da90ffead81fd03c7f9\nd5c5db03edbd8f9bfa8230601a3a15226c429b6a36bb86d6fd139a315a71932f\n144c046f135067d5767ccf94cc21ccfaff4f446e442c497c280e0cbc53ebe6cb\ne65367afbf04087b8257e10cdba89b4d2c1482d154c863e6ff252bbb85e50b68\nea500dee2d18c22740844efcaa533d7b628b5bb1227d2a72e6fe9e73c46e3419\n811fe74ad28310cb6106aace75a26bab659af471870d03a3493ab13fb97b92d4\nb71c91461196ce842e5d6d06679e032ba5032f6cc209978525efe1be59c52149\ne226f073772f1b697b49c53ddb1311e142e67df158953e48910f568411161604\n3c8c9d20812d1277372071bcfb6ac73ce4813ebadd05886376d38d7b811d5070\n8f23bdc8b3fb24acf061bcd55fa93ae0d169466754d478b06ab91d46f3086a25\ncee56f257e18aa302805e063cc88bada0b3bb2fa731db39e961e7a077286bf03\nb977c1a59f5ef33e40e0b40072fde7062d534452dabcd864fb25b8304434810f\n25038ea5a47f312ca71477cd738fc948ef1eeab724824568734effde2e39afe4\n26555c67ef2ecd78e328c4ac784e3be334f867cecab5e5e45bf756c88d8d1803\n75dfb81e6c943f2b298fff75ecb9299e1692af63e00b3e6ed6a45895abaae85a\nd9830e8deb8fd05e1bee1d7d1f57a4b53b0556457370a69f52d05675979b4986\nd3bbb2e800673963decb713d612a42c27a51db1c0137ddf068a33531cbdaf4d9\n9f9156d5b3d7c3d708171d985976705f7025dad8e781309e4ab983b8d7d825e2\n8bc9c7f8d8d4f6b7c531ae29e8ec30f5eccb2fd2c172e74ff0a5e2a90f88ba3f\n6f9e6545edd2b7ce3b0ccde0ddce75bd2547a027c6bfecf05f18b1ec4cc5d162\nf149b3a0cbcbf1f2a95a66a04930e37ec137630fa381a3b5e3685a5b1d1be905\n3d618870e5832f2f1d2c2d10255ff681142df338c9e7485707ea9a77726defe6\nf0778be7b9d6d5c722a1898b623ab11bad7b885c136fba7a56020cdb4c020e18\n21ece0b76f763e7559aad7b361398503b5751e785fb10039a01d77f54bdae229\n337add36f182ff16e035d24e4f54592fee1061aafca1f4d6b6993fb040141f5d\n44653d1355ea6c77f1d57d35945f786ad90c63887d39e5186d006eb6f8b9da8a\n443b2abd36b268b134b453188a00f61a7936a2936f30d6a7775b6891b7351084\nd8cb4322bb0a39440639542991ecb9a1563ea1f7d22aec9ce5424194758c6c55\nb986bc88f918243160de4443a496b585a8ced5df964fd3981bcd25e65ab1992f\n9bccd071eb766ef099280a7879aeafe5af75af95e89948d5200c42ffd8a356f8\n6d17a388be3c6678dfc35d5606f67b6f92b4a17b30408ac8deef1dd26a9ffa3e\ncf959522995401e29bfe9d06af57db27487a24db5060565881be3e918a1d547c\n85b7e979a078118111767371ba2075e792af13d5c48e60cbb32a154856807119\n43ff8c16a48e2c629804f5abef3a0e0d5228463c7708f0baa3f8a644c2c9ee64\na9945f6b2e72b6f5cb41c7455f11c4677e7adee3f5e720e623a69b98ba7f9759\n828ff89a30f0218e4f7d07922b420dac3ee811d7fe9782fb7a72c8b25fcc4b3f\n5a976495c047da2594303745ecd748932514e249686c716419792addb993a534\nb8b6e5c2570cb73736789d6cfeba3981389217226ee3108b08375a177290f6a5\nd98b740d9545199eab421ef818a18f837927e5c0cd9a8bb048a3a106b279512e\n7776d882fcc14382c022a483d01290adaa4556f9df43b0211843b45d443eba3a\n64144491a6fe1f0ffeca69162bd1c394f9070d010a5d661d59dfab0c40b7d964\n74f1f6d157cb43e1a066e8d7ef77f438d82d680ede607af96ffbebc8a0e950f5\nde67372651380863e39a67608259232cba21e941183dd8692f54dfa0efe9c4a1\n10e77dd8072bf57a08134fce7bd5fb34c3af3271febc16b4de891d1d00988022\n7b710fd222051e1b9da5f95af123e38e1e34911c57da17b37278e3f776a23680\n5f909072c94d9b4c123d9eba1b98c0bb46ba4ea8711946c5addd30b7aa439e38\nb6a357a952b7fbc812d864cfa983ba33c26b6a8bd79fa9cdb371fdfc437a36f6\ne00c1f75086de6b1796c3fd01b60d48b3d563eb5c6e826b6658c4c4168ea8c0f\nff8903bfe9ba441e48e9a970c05a5ff66ee31203fd762ddfcb7cf024905c6186\n5dd35273069008bf9ec95310365aceb69da815c513b4575a863c861ad4553033\n4a1a8430aebb65b9123540c3d1095aef2709862183b6483284267e4e54a88ca9\ne1549cfb6a0a67ec65bc50aece1d80c99fb39e5dcd5a011681fdbfeabe703341\n38849b9f2794853d58107d086a888c42427a7ec0a98094f2b1294dc8b37fdf69\n5da95d4ced2990c683ae106aa1f8a156dda7bf2fe6ac5f0cb2c9595a13161290\n1f9d0456a6f1b018f53c3815afee7af05e4f732aeaa045b7fce5b2fa5e2dba2f\n9dbb4e8cd6674665914462cc2fdac31bc58d6307f06edb988a23a3713595f56b\n4ad3e287f1806514414fd10cd0249bbeb7dec9f77f025b505db686c7358be24c\n7f75f5457a18fc784ea0ecd1df1922c1670932db36fc6b5a3e51b947183eb07d\n7851786f4d102a3decdf8d030ae6ee465ab75a832383a14d5dcad421e1fe0f3c\n6746eaef4f17098fa85d208975f58628fa214145cdc1c84052bd77a1e8c99521\ncf3060c0b0a9f745816315f8d93491b6481fc1662fc4900a7c2b1800c1dde8ce\nebdcf8ac88d248adcec59f4697acc61e732a28bb4384dbf4db6b103b12e08e04\n03829f1fd503e21fb6726cd213d801e31a00b82c39b36ee436961f9eab20f293\n06052ce2ab621af2c4e7ae1e90797b0b3705829272797764883e8ff3aaf39d6e\ndb48ba8c329eeccf19fcc9cba567722a27c5d849073ea473d97191d40ac3e134\n8f64d66df9e960f01bf9772c851e58d27f9589edb445eab6dac705cb048f4c43\n437775ef8acd9a55f0d0a4548bed6e24a284976028b8b5d5ffb9f009d6648f75\n3cd704f2fd6bda7ff9a2295f2eb2ba9cfa919d6ab3aa11e2cc6457dd05af0102\n3d487a6b0108f28377352aaf85761c72fb9ed115057d610580946469e2af00de\n723895de453a2d5ecb9a564ef46b5de3e98e90848f42411d9239baa896e454e3\na19d3abfd97a5293c9afd01b2acbc1ac9149c73bbe31c125072cc19d6c27889c\n93635fd5bacb84b6a43a16e35ab11fdda94f14c1b92eb912b770f2a7743813ae\n57dbbac535844711a30a321346606890711dbb9cc0c2ad4bbfd1a37ec1e77554\n81d89c0e679aa473a6ca59932b533c91392d44e48238fba1d95c1879cf65282d\nf5540b97abcf74d326c5367daf60fcd7a7b032daa1732e94dc8b13dc6f1ed1a2\n4c3d716a196ecae2028270e984d7c3af146f8f4aafa47242c540a007cdcebb3e\n049120d8352417ec61071e4099f164adb0a3485360990b5cb056a1f5ef92f033\nf265461880c9b0e7c2431a3d35bac0e98ae33bec8ca14bb091d9bdc04020a907\n60f075d56a0443528dccce2237ee418d15cfefd23ba0e7a3d64003c4cfc48635\ne212a9da1fd93cb5bb4bf84e945f33dc13f480ed8f8fa353004ab4bee27961eb\nea77c54f3c2cc5fd41c99e1f00288b48163a91d3700a6a7333228ebbe74edef7\n462e2d36f86d55d130a4a06ee66485810baed16caab397026765d05fde388d62\n3d0b5bc50891e71bd2694f90eb786c2b5faa0778574e03a702a150a36f70c1dd\n47ab1f37997b3a5ce5014a53ff6ae87cd158872f81ad96c52d3a16d6cd828e9c\ne67661dd4d4309a2901c4dd4b8e3ca5be050b2815f1f3b07f96c9008be79e132\n99a2bbabfe3ab2deb282251f98e02f07c59954b39982d05dcef9d93a00c33add\nb3afe36f5a07f1a4dbfb44904c04d6a261f11dbb71ec71700deb5fea74bb15f9\n7c7866ff4d4feeb7f6e2cad8984f781b9286436592d578562245212d4af80554\na16ca28f7a1145f70a0266200c0e8947dabdc48c382c5bbe4595695c7b63c52d\n548252aa2c618fde22700bac288b2bb3958a32c2d848c8c72810f4e394bb8736\n93aa57120d97de877cde80786d76967f415146c83bf3ce17076880354009ae94\n782f4a4114cb97030e41be0a82431c1d8c946c99ca86f1c649cbc0722ea36aa9\nae552074e0b1e67c4f458508c33afaed1aa33cbf6ec863dab2f96ba35a661025\n8ccaaf5076c726637f577e479204a95d8c2196ba4ff25886b954b11031d53426\nb824b68346ae5a880102de8e6e8e6e9706395589aed9be28f81d74712893dd7c\nfecb232511066da78a975c06b6108ec13687cd3f3e7779e64507cb878aad6c87\n8bcd01d78f7f4be45214245d6ad59430f02e96151224e57cedee4b00c33ba5cd\n88b8ae206cca3740db31f96b37e84277ea2ca3cd6818edce75288aaf01d1c7a6\n302f1ca5d1b31d50bdcb4e2f9eddd5525a540c6dd23213bae7d5899c9b9423e1\n48d967cf7e887747be5da2df939cb4c8bdec7ef2f7f7b902100acc638d48bce1\n2c35d6fbb827276806d65765d2902d9276a04da74ab37ae9ad746dcfa6721502\n767db51cdfb4f659477de1d234fd95da077be793329940dbe505a37dd9e0ac26\ndedd7912ae2d74c801844b6beca88f3aa4c6e424ba1062f8b8ff0c8fa5fce657\n62e893f1742f19fc728cc1d24cc11c049d94da4aa2e8071c67dc3ceb8ec148b5\n85265b34e9ba65a928d3126c103476e75b0c7fb1b6417fa9cc8b2404cb4b6d7f\n087174936c128b73aaf9a02d0740d30c516053c8cd895326ba1e0ed08f69f88f\n01ee793771266f1ae0bdd891dddfc8dee1d5729a4f1d56e5cd0e9bc370c0c4fd\n2f456796d707afae69ab2821442ea8d1f458b3d77412029d24e704f4d30cdecc\n4fe2d35deafbcaa202694105e54ba32d025aa85964aae9050652ac84dbe38031\n0b04dd0592d28e527aa4f0cd3372d205b761e59c6da575307d85d4a64e754c15\n1a0750c97524a6b384b875196c2e78656ef4e97e34f376dbfe37a968ef3d0f2b\n3d0d92e8cd6fbee9ca364900fcf1d262cc07b79bd4b4abf9e43390d7f32c859e\nf522f9dbb8391cd3da9743bcdd3786f0c43a5afb14c18096790ed2b3ef547e10\ncd04df6737b421d0adfa956d8bd86c3276e8b1fc979a16dcf54d20f60e57cd97\n6b48f6bde4cadf626595d25c63d64d35a19985fe167610da47e34121c8fc35d8\n007dcdde7d5eb887d4a15f26480129b1095f19665751ff2367d09e73bd2d4afd\n0ff73a12ca7727588a2e99e2491fb2e129c058c3ba5bea9c9faa26da9987f3c4\n2e1c1a4f3beb58f2c4423b06fec89128aa87deb3c58d1dec34f65f431913bad0\n859d735ea762c00edc6bdb491b641eb04f6d739fb9f5c81a5ae0f21082a97377\n57819325d6dac4640fd10d94eeb6ae17ad4748c41d6de01de580cd46822aa77e\ndb8e89cf09744744bcd49c884e843cae4d273bee5c3b7677fb6d61f3bf828e06\n3cc3767253577e7c1a5fd45eb846e9b02ee00b8db07532ffc1daed2d134d0726\ne9a594c278a128696382ccb48fb680432a57033b26bd661c2c7f5bfb9fa1b238\n1b0d19da4f0b66d2782fd47958690b6c8a7d515ed74db08199f569327008be7d\n4745d5b014bc7356ffa2dfd4a29f127da7c8c6a224e2991f2768214ceb9ae7cd\ne4cad5ece1a5f646dc6a62c9a71e27cac04eeaafda04c52016a2e80f53b89b2c\nd0547923ae39ea12b726aae931d85aade7e84b7f18a34eb93e384de3e34022ab\nb39995cda75fbdef0b207dac38c19a2fff96ba53c78ab98a94ca33314c8a136f\n60bc2e0656e032f4740c6ab26b64d82c3335d4e50a4ca0b49373d55902a74238\n28fba34cef0642462cad4a1b281b2443eb350660966b7a6262cdba724eae79af\n2f33060c3989b3131a63150f35c90b876b84be5806811e621061393178942ed5\n7bffce2b343dfeeea42d81e4afca4013f0e12b502b0b945e456128b6aad85b28\n11afcd492358f3dadad631e52545da996dfa6635b5f000af2d27c7249688daae\ne542eff938f675416c11f4a1e619e0651fcb89ad9e9c959c65ef3d1b259cad02\nc46d11e1dfe7cf0f6a01c9755e6b1b0788464adc0f24a2a61b2553fd1f360b73\n268e2d8b605d9b8987693eb3ae797afde0d95dbae52133063b97f4705ed4b52f\nc3a4ae78b3b95a2e96fa82f13c7a9be2e736a5b625c685b5ea5ad35f56ccec3b\n7d78b20ee313787d732ed49d3a9b75c1bf0405cced5b0e4127ca051c2e23f154\n494592f7ad266c8e9d2b5ab441a28c8eaa00ac2ec41374b179cbfd27584293e3\n0a8eba0ffe463f4e8a2864ff3a08a6b1d96117f53dea762a16e8ad8e823814b0\n237f62d1b448d93963811ffd2df9540572291ed29cc5482a9699ac490848d480\nc1c3eddf8cf277a144ac5f41a8519585719a0ec0ac1bb933a6fe47f18d5a607b\n1e526e0d0296e8fd4ae6220d411e0e0aaa712b164e6cb6a1678d26b81a857b9a\n84e43403ca23f11e7f10d5b5ec02236c22ba82a6ae9b77487f1466708142676b\n049ad89453a7074499f82b6af372493ee58cfa6cba41f0b94a73d3797a499e18\nca013ed02875df97e32ce0cdcb7a4971dc2acd7aaf0bf4a0517d76dedea0c04b\ndf7463d6be65d4f2cce195d6a2b100ab7d9db9a41e802cc59d7d5440eb58fbf1\n02dce85191d672b009e750dfc77620652ff4e80042961cae4e984017781eff9c\n43224eb387d79cc005e8e0646716078b7a1534b2cb0957a827fa27156a137968\n35ba0178cd71cc64556c7be17dfd03e4f07f7451133345d186f666d68fd33a7e\nfe49977274fe833df777a6c1e49b728f7ac3c472fd720084e7b004770c02cf2b\n38213c5df6da2c96e16292563f0ffda791af99708a71e08c0a1fd8696267df72\na9cf2fc5838e38784014f8d717a1e327ec5c9975fe0e44659e069624a73f3a41\n9b86b0b744f9dc624606011b810071e48af4f66edffcf80298969eae693efa40\n650f81c709b20f68fefc9e50b84202c111cc2282501b92ec27e4bbdfb2abf028\nfb5ff79a07194c4f0c7e7d682df84fb8437ea69a00166d267df774413c25ae96\n5f253c7ad38bf53d25e92de24e776f4b2ec39883e8c312faad560112f70932ce\na863a7f462e48e292c178ba2261773d5fdea85f8b57bb606e85f2c73e14c0006\nd9de6bf96a4e55778c2e1e4ed241183dd1986d8ef5d7f802031fde4d54624f27\n701459ce2f8816f2241c462d00bd031cf5dbb1db93776c585d41cd884e628ab4\na637996b54da1326e06c3f8eec9abb82fb21f63f8a7451a498775ca78fa77840\naccd876953c86cb37a2499956ca138807c2935151e198704971bceb36a630eb2\nd7415feca5088ef238f0b9304c9d635450ccd346ab3a2b9d283452a8da0e1039\n45108e29ec07459b6a4c2eafd47b74ff14861c5c7fb820cb14b90fced5650716\nd449d6a5d4de391ff952f6a6b62c13df6cfc905e90dcdeec87a9b55d650cd245\n2a5778974390e6e49e23b3fff7886c03405a9b8f4eff4ec9e12039df454b5c9d\ne8d316a1070162d8328b9fc7737bf8e36ed41faabe819ce5acd5dacb3ea61fc5\n0f74a3bd5353f45049ef6dab7e9ccdee891673a82beee26a918244289937f578\n4624b2fbb8d9e6576031dd565549d238bb7f5b0032141e6fad99bcb71eadec0b\n771f74a4f403f2ba460ac19bb155ead5ca5ee911d5858814802a58cfa02e5b88\n108b0858b7460baa6451cfc6597dd2a5334542f54849f7d143d138d99c303c5d\ne0f534abd6b7bae22969f179c2e531304b90f7f7929001ce3f13533d62b5c060\n8f1c191fb504915d42c94098b03b85046ea208da33c2a4ca55bcb4fbeb7fc292\n6bbd2e030cb7aa7c0f66205db385657aecbaf41105939e5ba3105b7a28aa07f5\ne483127364acc7f663cbb38c3625510cb1c3e993432db7136291b2cd10383443\ndaec0887e297c4e1ad98b4b599c86c9d23f9cf991f49c416e62986a40c93b70b\nc445561ecb83399b2b09a79e531dc69e5e128b7ded72f6c1582ff8dd118216f3\nd50759c3cc309244b7115df32dd94de19b70b79ce133636e4d9af9e5ef90bfa6\n306a51f7de1fe92232cc8e601c4092d24e6f07c5c3ef3bbbf65ebd38c776a065\n3b249ff82d28bc485bca0694a625813a5aedcf50c73644f80cd66d2aab337d3a\ne44828ce1e282955e07052183b86ccfa0d7bfbc399579ab518ef365276118060\nc16f5e64561d5bc860d17d77a7e1054ff3f9226ebe73b4723b4a86d4ff55cab0\nc275d602554f03e6f1eb3ac6abbd10efd4c7e4d0a9b3cc86468fb855afc313f6\n60f65a98a33ec89a7c85b666ca271a5e9b55e69e82d447dc1cfd8a510de3317a\n46488223efc136a7e934517d2a57ed104c3c8e9232f572824e39cfe54552bbf1\n1fc5454470da20ca46cebb0240d4d4a3de2557ff8bf39fba0f9b8651c0a8ac8a\n26d532931f4e1c9e9a7eadabcb91b2490a4f8c24d34abca7d59c2f9eceee6d28\na12bd77195c2643bb7ef31bd7d38bbcc94a9fa901a4fc08f75f5e705cd4af4fc\n823bbafaf76eba4f3f414f5e02a900f57a72345c2457fa923805396a0a76c1c7\n0e3fe87dd617279648dbb85a3115cc93cc3875d834f76c14ba3763d893e1ef31\n85109c0963da880fc44ff9088ac00034a147fd3e38897fc84e8d6a64765e8ff9\ncb9579ae75e19f405be3aa6050498de7a7c4f2777df613b80a1bc19f8e7970a6\n6aa1515817088a5c2c1028519354baf856ac95ffed41f05c8a880cdfd5ba40b4\n071a5a9296a01e3675a665ddcd351bbafaa26868189dd507f252425ee8a15744\n7995d4ff79e35d23d36eccb953a7d3c9ab677cd10718b36bef17e67d5c31d049\n6523ced555b31b1aa1a322c8121061ea70afe4baa6b48a84d6c705ee19eae98f\nb8b178ab53b8049e0b44db097ce9a09e5f4984405adcd3b786d1b56d8fc3eb68\n4a0ad48618009c60831f2596a7532f20b8747fb12f42d3f57264a09b2cd90d7d\n644f1d0b00b74a9e99a540f96531d33224fa87caca9a79f300a94407947c980e\nb84a11d0a84ff95ed219df934b1aff1e21e6ae0af3549ba0a392a9df4dbfd1d7\n80008837efb84fd143bea8ad15012ab0a8464ad3debb63ccead5f3c53dd00fc0\n4a8bb8321f76c0e9f9682fe37f92537caf6222c19a91cc78619fd52aa569a271\n1f9309c2fb97aeae5087f7411f832a9d025794f7ea7e0c5c4e51a6319fd57cd1\n2b15fa67192b92cd2928038385385f9b316badc630c37405dbc76ec96da8667d\n773e4d7299fbaefafeed2e154d72e61b18403adbc27e6a7d2fc40c224a74e415\nd2cff37962463e52d54323de5bf8f28a8b868a353f974a6ba0d948d3d80edc49\nefdb3d5f8dfd7b70931a09bcf689dfa25dff8f359d6ef1c77c7023153344b837\nd27d346e3e01b4c563bf3650f0ee7121e5e6bce7eef34bada5416dd2d1638d45\n72f313f6e0d2707f4d39a35e89c24d3837bcbe6c6e1e7abf410053db8c2f4d06\n98d8b57901bc0d065140c8b255a2ed6cb2f4f2d5490908790672888a7f730043\n37478eaf0b2671d9d8dd3731cdf2171bcdeaeae52bfc938452667b5cbcf94136\n9895921bc270465a91f2d4a4a1fc9b7bf8e6de083fc0f42b06989c84b7d277a2\nf6e5efbe029d57ef50f3c203bebd446d757e2ae683ddaa1f43b1ea4b572c03df\n71b36a5e597819f6a93abcf9761f9e3b3d472b3c5b9848cd47ece407782878e8\na9dfd2b9ca3cc0bf1926eb2d9ad4c1b17da35f8fc53b9717ef7cd1bf12b39ebd\ndc709a6be92ca760f74d83a84c7ac7a91e49fa974f0d59ded061b245083eca5c\nf7510d4b150c959a64bb5045ea658015702f0d5e6ee802b84fb02203ea84efe7\nb5af45e90e3ef8d31ed750f33e6fbb697bd33f9ccb53df74c866c97679487caa\nda18499e2747b045e502c3def8465d9232a483927057541e0617aeb2be94e800\nbc98628dbe74514d17cb9fe22347d1f14a9d039266732a3b6552f0bc52c3e08e\n67b45478b7f381a4e44dece47e9a8508039a4cf41f7397590019c78bacf175e2\n656857717870088f49a6b46872a56e68192d597a0cd95d78c31df0eaeddb0889\ne4fdb32183d92fbb008bfea78de40dd00339165383fed6dd3abe8eb777230b52\nc0bd6d2abc5e7e43b948b95d4432d2cde72e3846b11e5ac47dc239e6f6a9563f\nd49489dc96ee1ef7e8c09fb2852649597014318527ba7e2d7faf57708f2f6047\n38f48bff3ed379f1240f7ab02968918fbd72ead95554287407db3fca569b0e40\n1c95bb73e14b99167c1fbac7d728e258a73c2aef3195adcff2ec1215134ff3e1\nab872b387d01e34c2540afd8dfba0b524029a13c0a3dc6d4a645d77d6e8872c9\n6da71d6efa0c268e8b8f9fe15e3a412717aacfff75024b3d3d87b59de69df6fb\n1db4eef7233876e2225ed403eb0f15db64da545ed89bff3504cd3effd8c22752\n9e45c55c1bbb2306ecdf004e07957aea29fcd5c68cc45e99750707aff8ee0c69\nfab10569ce90254e92420df10e2c6a6700c97be2dace8a52744f06ca6207fd26\n42fae02b93cc5949480f8152dd6c76c3907f09595d84b236f9e74c413b7819fb\n2abf6b400fe3462b5b5d76e23c46997f93a3b79d8501a783638404d696f54d92\nd54c12dc172b7d80818760d2301777c097f43d82bd6033cbe360bd96d2dceddd\nd174125da69f49f3fc88996ac478491df66d8db3f338a9f4bec6f49f47d560cd\n867d214fec710ef3198a397acb022ce73b4f9ff28b8a4c4c048e781fe5dd9b81\n1d29e4175ecb6285bd950d4e74b1fd83f4a1afe405bd0ff26de0bbdeb18c1a3a\n06b1c6061830bbb7c0712899fbdd7d9e7272a16b769eef601a0ed6357c4a5635\n90432966ffdcc5e62de2741eaa10a13ebbdd4a50a97f1774bdc09ede8d7f23b4\n5e38b810c6675e9cd7eef69ddb4fcb914d3c7855d748d265d96ae4e03d8134b1\n50784fd107583be549ea82d13b83a97c0df1c9880dea6520d707d111bc0ab9bc\ncaec0d601a69c9d5cfc8fc27ceaa5f472a31d5952967930b7f0a162a0a6c4d97\n8d4656617e61569000454befc89f2a43723c63b03d6e7088648a673f279c673b\n9785c916dafa2e7c5023b9fe5f33caeb8e6d62dad3617c6892c9e84fd5d66844\n7a79845a62b5b90d62bc902a58711a8fc70a5e8124b1ac688c11dcaafb4c5c49\nf74244f22806dcb9f9dd77c3b7f5cef01208ac69d0e1d34476c2d3f9c9109cc7\ne9acda7805bcc1c77e42c3d51a8b3111246918270342e1f8fd950f87de0a7de5\n68c4454e215962fb89c26fd4c6c0f76cf56405b1f5278b9a53d1c71a30ba5bf7\n5eda303e75ebffc92117c3f58b5313a225e50ed1191d47babb7c2e0e797d892a\n9db18b914d6c5ecf98a35a56b577f2d3bea488d812fb3aba9dd799e18413a176\n5bbe044f2b855511b53f9c3f71e6b78386b83c21a680c0393e3629905068e17e\nb3f2fda638b4de63106f39274b8ad93f7f82eb79bcea8ddb19d5594052712f73\nd9478015b008c62fb824924bd09850519357d07ab34143dbbcfda218e5b37071\nbd778a09302936cd0ad62d9ba4dd5fb7fb61fcf239f04fc3a6f897ca42800eb2\ne8de582c8d788a62b1dbc0e9275be5f905b520b74565a1251e83e7be2fe0933f\n556c118dcd40af7c9108e33b1302b7653c2057d3a2a99cedf27f7185477b8953\n40b201e4ef7eddf6b81bb6692ef90a4bf8cd66462236d61ee4bc9d23419e588a\n60a2cb0ac902b31fad5f324f7e78846a77747a1b16df617f168bf009a9ab27d1\n9239c6c9c14a85c073a5836369170920b8e076f58d31365849fe73b3fcc47cd2\n5021363f6155ad007b1740a66f17cdf12a2016173b1049043321a1b8eb1ab278\n223af3606ad0e0c1788e83b2a9fcbfe1640fc3dd69f604f1e05d9c24d70b1c88\ncbe6f26953696285b833c99b777b361350c81e51a816f7ead7f399846877faac\n8f1a04ac053b288432f6c223de41c0a07924e27edac39fc9c74ecb664be7bd59\n2b1b7c77a7e79bef8ea256dacd5c84269a96a719690a496e08dfc8afeb11b22d\nc27db5261a458077180dc8a941e9692573d1ce78777c4997116229050afda9ae\n6a081a1dd4c01f233a73427cbe82ab6627c6cd63a6f1a55cbda1d7da7219330e\nd4fa62b9e24c5e9c7a226657e3a214ac2b6754232869a187a2a5cc68864f689b\n657ee0b7a87829d702cd05d9c825665ce2a6eaf4711c0bceaedd4a6766dd00e8\nbcd00e580d82bb60d4b6af8ff74e193af5f9720aaa971475b5c132aab080c694\n463a4900f4751fb33f6764175c2aabe3fdcec21285c1c8ddefb8cf427767ea71\ncda4df4ab6ad8c542176d41fb307a8dfe6024b36e8ddfeed487a0ad4adc2c9bb\nd11f05865274c478537417271f4c835b2067e911596f9085711c4b595359c9f1\n842ca391171c819a15d3d51117d2c2568f4c26b7bf25450044efdad8e3148849\n03abd0c39f61a26f5803cf2dcc411db7f3a8d0961dc180cdf71fead6e53054db\n45f2ae80b1f27327231a5d1b50c6b5187c7b21c194208edcad3ba0c17f86a14c\ned87914d2920b56b44f77319b5a2bb318711191c29a9c77675db208f9bd2cab4\nfb35676eae529fc3c5d340b2885cfa66ca73a09eac38b0353090f02c60f420d7\n11494b800b0a83c6ed05faea46edb0dca0bf066190f53ab98e5ef8a9bb45794d\nad4ed2e03cfd079f218bcff2cdb18019dfecd30b2a91382fc6ed4b80178b3bf8\nc4141c5e1b895a31cbf9b1a89ce0834351d7dd67c997a001f88d14366a46c640\nfbbe88a4af7c1a2ed9fab22a57838121de18233240e8e0c3db4bdbe8f8a26a5d\nb53b830afaac97135a89603626a3b145a0317c1e25124510829236e295934a80\nf5c47bb7de54b70af222c14ce762d68595a74df8bbc1f7a3df87a0c4ec1087e3\n95db170092e4c1f3a28d863c4f4b9ffd970bfbd98ca8dc77b970775ec5d0587b\nd4fd4f670c0830d60e59d1a01d95a930f8e6e767d156518d978cad77e49c80e2\ncdfb53ac8e6e9d2e98585892d5905e587459f1f84bb989bcaa4bb507fbbfed40\nf977903a6a6cdcb1140cf27b8774dc327468e0dddb1f08ad498052a942bf49b3\nf54710becdb8a6cbd6654831ebd5e82e560a57defe28c2f2ea5add62718f0aa0\n79f4b700bf8e09dd31539e643a78eb10908ed04708b1607df45c3813412e3465\ne0c73f806c700f863d7d3275fc3c710e7e6ea5426e9295dd7748be5a5a76ea4f\n76ca59e2aa5d8d99e7f1627429b13fc4fb21add8ed22deb368b30650b7fc0179\n930ea203a9cbf4a550b923ac8a6615c66e5f35b6a75ac677bc5b3c35c3ea7265\n18752b9f3e3ba37c8077a7f9dc1af45718348a1877d95f0fc33055b95ca21f33\n29a80082c176b60f09fba90b2b73f6285cd2045e7e70d7d1f85a816c38192a42\nea0017a4a6a6e6e1f0d5194574dd7a90464219dedbe213d77154ee9e83ceac5a\n4791804de2ad25889589178d4a672a2d006bfed0f1148f8feb60a12534f519c5\n19d5c889d908115a80b8fae4cd2f941d320730d5cbddd41b4aaa2664bf1fab95\n6f0f5162e27baf85c5f5cc2be8103ba0ac124344dcc4a5c25775818ba301003b\nf7f8e5a39e133c3b073ef21cc0af5d8ad6e73c9e32e2266d27a2efa6150414f5\n519fa27e0d4f924cb23f2a9d1d340e2f4fe4cdd1b0289c49993655f9a1567582\n3d4d5b7e4d647c66f3f52e3be416750b302c988f06d125d36c1510c06a6096d6\n48535b79e228bbac646152f191ef7b919635b7426f581cf324bc47ab78ce1c51\n9f6571e7e120923616f5e326fc64af2f878181d7a723f9f857b26587df537eab\n3e7203d79297cd61881ca737dab209415448024aacb8f740204937f961a89f68\n3a56fdac364c6994fe3a9e4712544262a0976339e4423ffac22812c619322015\n421b15c21455315fc68b738a76f375416864944939f86ba79e332f60ae0ed6cc\n9da23821ed2335d1e2a6874b848261b2aadb30cc4ff029b234df6fe3f35fa4fd\n7f25085696335d841286536b0119643dcae8bbe83345a66cc6a8fc875f613971\n9281c1d6a6d6ae2e36a74c8cecf9fa2ad4267ff78636be147e5133ae79814d30\n114b3a417a370926cad7db75e4cada32addad6e08b525a546e3398c48e0f3f53\n0ce7a9df593caa7bd1c73ea5d23513c290996269611f6f8352223102cac73e65\n7f9db567bf0e8547736aa5202369d9bc3e9ad14930ff3dd0021fa13f4cf086f1\nd925f1158cfa6fa85e767467920ee70a51af666217d37e949c250da1e420c278\n684a87b612a2765afe6a8e05d83469b5337f30111a6bce01b82b5c4f7e4a8e75\n8f4c3a8653fa818792bb0ba3c3cf86d680c1cb931e61f2dfad8a27474abc855a\n00c00981798df1cda4cd9c4e1b285448f5007103877d0f365242333a2119c22f\nca537b070720a85bb9d4ff3db1eb8cc4cff1fb721063694e050e6c82866ca62d\n0d9e576588e48b7cd83ab4090b3b1fb482e8a2a0541b36b7e1633a758711f140\nf76d471343ed5baa28e4ffe22727c71c5e1bcbfdcbc95cf61bbffd50af60a3c8\n2a64480ab2b0f78fdbfef93bab4be7f6c8dcc7e5ddf76f943fd09162af81ad7f\nd9c4612b10839c9f0e99fe1e6c632504ec2ca896e937d45a1a4d72b1bc500ad8\nc99e816e4f3132ad0bd68f1976680e54b0b2ad35c6328aed3b4d997ff1f22ccd\nf257c75d07f031db658b6ab3b6d917664fb9f684e1b4ab61e0b94764815632e7\n5ed9e6b6029034fe279e54cf76ac7f732595b985a81f37a82ad34770f3dac351\na2fb0db97de985ff573ab29ba189547273d82a0bf21eb2afa32f8771b74d57c8\n4e5359855cfc8dbf1f8dda6ddee564f0d5e4a4466dd167376bce055869e62b83\nad7fca77b39119347e6565963a8ec106cc264372359a26e14ed7740c2f1da5a6\n5ef178bcd24d041a2d58c52eee2b74b1458dd0f0c7b563882e1882b743ca1cfd\n7e0ab6be2aff9a85081936002ec9f55396e6612e1484a1d2172888fe56360177\n6ba92638a4cf518a9e409ed13f13198247fba3cc0db502952bbd94da89a34437\nca5b8e6ffe02e64a55477c1b3580306622c4d09620c141f1698859c747128693\n9a73315169a5c0724cb400cc27e2c8a947049f0c2d74bfb0030276422ca8448b\n8fa131ace5da1e6ffdbb14feb34c358ec756ddcec4b8a9bfe8bd547c5621fe62\nebfc3518fc75c6b67854dda994fa8e53321a574eaba504523d83f361fcea15b6\nb86543ffc82d0705906c9fe76dded500a2759445a15d9618d34c014893794a0e\n687389a7b364d84feaa066df3398c6493933fb12cc2d45d2a96d2f1e87d5e72a\n494737bb808c49833593428a5c0b72a752ab1afeda4dbb3dcb560984b0214d0b\nf839a671b4628118cd271e68c04cb109a376750ae7b835ae125c18009063cea7\neac016a6f74ceb7ec1a8f9d18656610ad549282da9c2d4d7a04dc89ccafa7ecd\na5883d9e080345a75e8bb431550521ef89d39ddcc76296cdb38b5441bd505831\n5f29c0274a7acef85573a41614e02d4f35668aa5ed5f6dceac920728ff72d874\n953a914cd6e5faf084e208ae2e6f1e5a54608b5dc3bcb514ef24be021c60dfec\nb40d908a767db7a6ca3b35e3f282a667935f7f19ec4187ef8baf85b93db85869\n53bb31faf4c31a76ea4d6c06aa4ce4510b89a7bf13524fb026ee1a6d76a35424\n563d6217b54359d7a3b83e0460e22be6c9e959b21a205755f756a4cb0f4150c0\n8c110236f2e46f78d61f1ed95b7c00f2591aacc51a57d624ef3ff9cfe9735c3d\n607722fefaed453988aeffa520c7dc99108125cce2e89b0b485b7b9dca7d4bcb\n00b7a2a1ed7ede3b8a611c651b6e85821b70f71b1dc59df2c77a281a639015ef\n02d7c25f65e07b00a4cabf47d07110bb2e7681073255705908ed0494e42f68c1\na6adcba5a7337e572fa9a4dc795cd3bc6018b56edb2d5b809d59d07ab1b01114\nb038d8d0c3d265817b5b6ad0d2c0c859aab2116dd18cace3bd1753bcf1f11c2b\n21a1a5a745b42c58be1f858a03fa9189e7103d16709c7235258c0f321b0171bf\n0a9b4d91aef7343f60d1cf80104db0023f25147126190d93193de9642abf2347\n697618535b49ca49f6dc1fc0f9c27cd050b6f1a749188ba527dcc0f79daf3abf\n3941f30a31d014435d99af16004836bd31353d4dc409d44b0cd95ec42db500c9\nf82f9ab6f07f7532376a9bfceabaf2d3295ef409c5b520a0dde07ea9f09c74a4\n8d2abd80b98ba29e644f2ba5d4cabf74962d76f3449009a786930816162275d4\n36efb7e820af49277cac5daa30ccddbffd1f0d028e58b389d31841fb49a0ef2d\n8bf42817c13a24b258c04fe4b17ab31b959b41f74632b2d1847fc222aacf935e\n2db93b1a77261a00bf1112ea62ccd57d76299330c4209a0a4572d20bda04cbdf\nb85e5a4b19e32b05c2615e71a8083228dac6430167899198262d3dfdd4d089d6\n318eebffb60a1f2d4f3b4b71d7c0f49b1ed3d1a1351859d675630d617661cdc7\n78069ec3d936bf8f3ac4ade3b35f848b29e0fb26b8ce7fe0229b43eb268974ef\n59aba9a6cf3a379299e8b3297b9c9df1dd089f565ebfb0c38a4e9f679224c944\n9c6fda5e5f573f390de4bd37b764348a5c2c6997411eb2498bab06c52af2587a\n912f8c77156986476f786efef0fa17994bc37ceeb90aabdef33c727ad87ba2b4\nf5c313a1d10fd5f220b514b7f51b97f521b7bb316629f752494d3e0fb5f6b748\nb41e7661d3c71ef5180e6457ddef8e5359bb590e34ec2291db6ece5a0b29248c\ne63df126c6ef09c5060f310d9dad6edb1da5aec3c7b8c26d5fa3b28e3b432dc6\ncf5609eb082447b0694f9ce0e6392d7116d30048162f566f70368ee80770186f\n01bb8f4960e0ea3df5d0315227189de770e620d681547729f92d7c474a58bdd9\n5ef2dff081f54d0be338a664a674d3b6f666a25189b1c104a56ad1cae207da06\n0aec7850848f1da0cbf9bafe5bef824bc391f0427567c6ede423ce54c2b49533\n8f6da4d6836acc2d84a729d8acea8184ead3920970cab92ef4b18da18228e07c\nb7ac4505f0643f0b9a13364a15ad89fa560dfba19c105f4b164cfb744a58e661\ncf208474ba7ccc1abef268c0ff906397b01706f49e6bc7883602848a6ecd9195\nc78abcade622f92b96076a99759f79baf7d846eb1696a26bd7355aac9b86cb45\n972dae5d951b98ff74fcf5c1427f071b074c5fe4927784c6ead4d88f1d4cd367\n86ed776db08abea68cbe145663c9345ada875f3bac904f2b995a2e29fd473592\n117faf946f5dfc8645ab792d1c3fab132d9edbe7524d7e4ef4829d3899f6c2c5\n4c9135050176f8730f2f612b5805a25cba6d191e229e4a6dcb99736bde1b2630\n64c641ee7ad134d2f0119388bea082dbb61cde8734ef4ebef4f7e830890ec19d\n4041c9df01810d31471beb73667dbc90117d80785ecbde02db0dcbd6468c8b02\n35ce080c7fd68e24963e3773a9b5250f9de2b5e84095c0f16dbfb1129cadc586\n5bd8445439a672c8058555670f2c8fb02012c2a5c2334a0828f1855f8d3693d1\nf55ac39d1057658a1cceb4adf073ccf5c5e06ae3e0f2d50aa5e771dc5289aad1\n563633706ea884cdaae49c4e48665763fd58ae0e7c130a8c917a8f575bf0454d\nd2412c3a0d79eca718bc2871a45049b388645e13b53c8b021e843cb7ca2c6735\nc4aad33308e850da39d7df29cf466f1691ad6abce6eabe5f48eb7161a2210956\nf3166611bfd858b6e82cecab053a16436457f72bddb3e9f2c8bf49ba6a829a34\n157d1b609fcd796f34ae1648c7ee506f155ca1a381294b3010f96faec1bbfc04\n68cf3830dd202c4b85dec8590a24380fbf7998617b5024562895c88eae8ddc21\n80a3b1d2aca606900f20643fa1336f27e1803888a0d202f8c3dc0e17742e40a8\n4a2daa2764fa28700be873a43dae964d380b468898f1794aa86d9169bc078188\n1c63a2c0143983becf796b020f4f74bd55afb2e9a96571c3db8da7e353b80f61\nebb33bb2e63cf0cbfdc531c2d0eee4a1fa2223c6bb5989b1c5021e1d78fa7863\n8f207b3406310260e8fa71eb6c37b0f5dfb0046f0fa5dd20f58853fffb6c384b\nb6fc254159cf9d47426e043cc63858b2d16084ee699f3c7c52252c6ee3cc6a91\n48ae94d6aef1040f24538f829200a69fa642d3db89a91550127ae1952618e1bb\n550ee63281620855a6f4f07e45e747451dc068df05c7aa6f9a15641aee97a863\n902128b956dd4b424c0a645bf6db468aa081dde5972d055572aac44697eb0d0d\n448b1f42bb954d5478a9781cd155f56fb8cfef43bc0566cd1f7a80ba528169e9\n135e6f614a632eb56dcee9f110e40e98be3fba5972e4673009326c99105998dd\n6fa6e6bd8e0f62e0feab6a02559cc074ba5a4aea3ad94c15ff967a93b3be0c36\na9789befa25bd4cc365ca26751b4a452a6092ac8fd5cb71f833823ee7f9cc7b4\n87511813d09fa5cbe7c68208b3aff0d103acfcfbda4497a177a81f53f6c2e84f\n76caa79def04cd77e03a34e85823c26b4c9664e3a3ad1861b7ac1d29ea407cc7\ncee87730b32d03aef0997df3242ca5cf24173b15933e6a7d9ebc2e00082cc9a6\n4578199694f851985a929714fbf961a8434c04eacdfe29dd83a3905d94fea050\n3ec012785084c2326c3180374df13e66ec7aa9400de0051fc9101d764fd828c4\n8d321c6a2a506aa31a80701bbf0b9a5a6941e4e77d2d37f1cb60482807df2f77\na896d545de7eb859ce90732412ffbc7f108bd51740bea2af08eb48ca8a96045b\nfcb6e4b6c03175d439406d0ab5d3dd6be364959ffe2dbc4dcfe8828c512625c1\n863ed69568af5896578d2955b86b6b1189a7fa1d2c1cea93bb59d970d7a5947d\n0e0185b36ff1cd6b1b783d7b5b2920d599c00dfc35c3a1f443512528bac05716\nc8b36bd964302168c253491410aa127faf165c57f595900bba2e8dfe0b4f50e7\naf1d23198a9a3c385ace40ff8ccc43fb9a8a64a13bf273089557ec31e1389c55\n1fdf812630edb9c3027eef4c7226b5915054fc1f7a4553a83f1510f8cd63b9d4\ne3de0ed6feb732c3c9658188324e8c4bc44e83dff331f62eacff1625d1450a93\n77252a8b862ba626d688a016b1b7a766f3510cd83d047b7e4fc0e1ef0fbeaf31\n948775bef5ce100447d7bb8a5eb3d39d1b17353ee611444d341af17070e67b04\n38b830a54b86f19808e24f618e0686445c271dda7e9ee1aad2f216fdd08b024e\n5f6a30ca4c30b90a483e81285936b47c78577c15054f7b4ff05612e55dd43e3c\n59b808d35843a27c83e82984fd4ab18d880ed19a67d199442fb46932469a16e2\n7c853ec5b2a3bd0465a65f0ba3fb10d853ee1d5041de10f461de326f505e3148\n4c90ff76dd5f6745aa6f2962d78f54139b2ed7cc470484dbd1d92f38577a9a99\n35c13061ff350ccdd724abdba06a297faa8100cf052c590ddf93439ccc4d8ad7\nc6dd21d739c6e1dda03f577723ce425ae9c534107b51155947510ba8c3a6c90c\n1ae9b223ddc025d847dfd6676a0d730851f72df4bbc954eb65134dbfadd3956f\nf1e955f5e4dd82c923a57725074ef099d9445b9eda8f07d686a326beb33cc40e\n8fa628e743c46c23ada0c906a7680d9e3915420129f8c2833327d62314df57be\ndec9bec9a7b348649d6e32ba7ba8dc3d4e5d567b69e4a157a538af5f9ed426c6\n84d24c64931161efa48c908fce398eca888c88c0716fb19235e7d50c14dfb2eb\ne37d309e685d49006924b1453438bad74d4e8f5e50195aeeb5ef743ccb761465\nfafa81435392c00e12094f2c4152a3314b11992caf8fcd1342de8a0b3edc9a4a\nde57f5732b9256e81bb1c017c08964dc43ce13cd13a9c2bebca0439a4ff5146e\nfec0cf9358de65a4ada4ff46666d8289639a74df657ab03d0dd5e34dbe15cef4\n2b1b672699e131d7cfbb5f75310e115ca822e3ba5bc7673946afa462238d16bf\n5f1da9ae95469a9cd32c82155455d3c8e5dab4ea1cbd834b02a2a07a2b8a17c4\n09bab72c7dc17f4244be28173ce05e4a7a2cf0689a82793f36597540575404d0\nedcc461017cc8ed9ec002f500eb60db674b29195320054f7242b4b96f0cb8631\n1ef1fea2e672fd3bd38d29ae5d71310aa2a10f89867a9138c1a0a987a991c573\ne4fc1af6c4428108d7522f076adfd5600afa502b30d7885369652b53bf066f76\nef65814b87343925e38d4cf0a4bb481c314aa73516d1cd9c3d2d46097a8ac663\n622a74f6665515b1def6ee7c71aedefa03db38241398e3645ee8b44320452f15\n8765869f92423bb3cf329115745dc2380937436f8a100027cafd2af2c755f04d\nea02a723a3a344037025a1bd85fce024251451333cae97c57f09438902648011\n6adc0d99e8a7b8a30b8679c494be0a0cac5aa365fa519a1172abda81a7a75890\n535dac01381fd4133f0b093f7d7b5e5080bfa48fc652cb6673d9826979c11c57\n82c57faadbf9a75da7af55ff6efeab340dd6d9f8840359d4296b3aac85c383f6\n58116e0eea078528a6aeb697ef977a2fb28ae2b306b80802404dadce26938fea\n5eda09061e832be667f567bb2621ac6ce40cfe794f0e24b2cb937c62cf32c9a8\n277b4f492024c317418a32f60e325915f733befc64d0c3815bafebc3429eac92\n7f24740f98f625893ae753084eed9f3eed17bb77cd88d6a974dbf1799690b87b\n8a7201ab39fe37f602a64ff1a263f06e9e1964ddf4eccdae450fc8761edd0334\n4252ef79f118312a576e2d66b4140905a0a2e464fcbda39b6f53857248d52a6e\nb00f2da5a5d9b7a1611156e6d2f0bf39d6ae1e931f959ef4d0ff86d80e27acdd\nac59dc2cd2e5e8a2a9b5a26ac885b6db10a6376837cbffa46f20209c182bf1e7\nc84576edc484c19c13c4dc6072e1bb94beef26963444b8da24c977ed2c950c62\n46491b7587b5ac684c78498cf564ac10860cbb1f6dccf6562b16043bd1f25b0b\nbb1d5991982c87bf541bbf9deeda682cc1c986a4b1af8dce8a3f28b9570cca1e\nf609c45e6b333dba964f076eaa4e8dff311a83f55722cd5b73c026ac6a53abf3\nc33fcebe6829218090e425cf1281a1098240cb3a8007b84e09866d17def4c827\ned60e3ffb8ac5b1fc70acba1a577f1c388ec52269910a72ee85f435f73de3ad7\n1625126ff8ec0b54a324a733bef4d702397270ea42bed7b06307074a356e3b99\nd3f130d622ad8c7c4477a3e0091810c4f38bdbfd3480ce59db0bb92559a1a84d\nee9a0706811114bb3edc999211da0dbf26cc8946024b9b4de9b7d0404c1b5bb0\nfb6caef2ba7a8c9c1a31486c03eae6d98eea5962a9277c7cf1c54f7553f1cab1\n481ebad43e9d6ffb3511c55b39a375f2157f56ea31a74c70a59b52a723475825\n296f726f9e86151120a954c294d39ec26089edbce9a7bb75a0955ad3e5b2ad6a\nb4260a25e5080bd4520b6e5f2d22e88f858549259739a83d573cee0addfaa79a\n2dfe02e7c1e93198ec10d464f90ab70e3dc75180d9aa2c3d0bd6b6014c5ce075\nfa015e5108b7e08c899ecb1c99cd72e17f6b31c8147f486eab546b0839cf2e7c\nd3e3b4c23ae1721203ab6ee6f43e55878307a746b262a5ff64bea6ce12e1e350\ne9516b95b7edb95576d30bebb42661556ecaa0336925ed15b91d77090207c58b\n349b8177aba733fedb1f94020dbaecb824785b2e66cc5a12c94f1ba5cd3726b0\nf3c1eab0afb075f03abb31eeb7c166af21c1a74c2ee75aa3a7e4a5ffbb4939a5\nf2019f53ecf527d6488cb0c3446bee4bc6364de10af7f939e5c04eadde61d9e1\n14c686a830b222f85b17a99377ded182ec37365ace8b7028f460b770f88f9a3e\n883558d55d2174eecbdf48a27c4398d75e5995f13b68d8ba1fa9115dbafcbf91\na7645c38825ddebda44e96615f654d0a39789bbda8c076b8c7e76153330806ee\na89ad133190c2e5d154155f83b2ceff890c549307ca20f587873ba14d59dbdeb\nd6cbf9bd5d799f1d58d3018d9e4b65d5722ad38234ca54ccd83e10fdb33b8b2a\n479db24f31cf06fb035c9d0977f524a79c7aab7e81e63f874495adc346c73cd3\na83e8f8a17116cb25a01cf229d453756ce021a6992e839630b06126ccfcbcc6d\n691e6d409872a2eba49d10cce7da3d0b3a9b8c633162b6c87a4f8949f6e9fb0a\n396d8a1a95ac753aa963948faa6fc8b80335f6a3e229b85dc58b05401ecb4129\n1de6690a0913f4dc678b41e07099fa68a069d2fad54c882f241c634a9fee7392\ne8a94f81e934ad134843f0d120f6ce7b7f8fa20a17965302d45c4d76a8a1c509\n246ab3c77b02b8401d813034e0cc6c6b11e7a45137fb5091ca5c07d170b90149\n4362d957354b644a7a4ac3920b40c3702e76072cd89f3e79f53cfcd0f24b1ef0\na84d7471a23824e4f4a6f1d6dc7ebee46047a95e5b254579da1bf2199b2fe334\n030dee09f9450f8ee20a36356e5cfe6c187da88eb9d98fbca5a3bac575adbf68\nf7deaa3f308c0a4dd5c235d4fce9c75221a5a8d2b85650c1319e996f0e446153\ne2d53a85f47e8db41b703b41aed5b5ffdd7e67a2b633b052851b6382485431b2\n78a9a635ba4a57d1f46b9a751531dfed7710c429f4c6f6bd772a0ca9d87c2071\ncd0c3a99b0fcd93195f722b1d6ff45edd1150e2bf34922c83048c0becb62dcd5\ne9c7ee879701d354d165a5612d52b33a6eafb8f397b3fc5160d2c56aea5a43cd\n1549275fcf3a484ec085cc6adc3c03cd44a5946536d84cc756e6926cdd8cb13e\n902af575d72530d2d19148b08a1481b88bcd81ede06afa03a5193cb2ae2e4a04\nb500b9e7239b6b8f1f880729cbcc783f4f7a3fb38f09aabf39cfd1206b5be385\n79ac7a4b2123e51c7bfe243527227a779b3d91fdebce4d5394849540c2fd99ed\n98ff068c3fc5e0d81b3bff8729f66ed3fcb83a666320a128926f5bde21463f25\n3d819ab6b0366cb104ffa8a088fc1abc72ccca0b176a955909709742996dd166\nc6d76a28b9ca9f2920d440a945f363453029033fe6575c8aa848c3c63bb0dbb3\n802a67e100c820d08c8078064d97da977224721884ccd78bbb13ba739f3a73c8\n1d62edbca9247eb902005b0822e0bce20ef55b9adc1bcc1ebbd9a6a41bc97a0b\n380b5549ae58270bba5d48e816aaad13b8a8abcc6a601a28f643081946af02c5\n6ca95136d704321a08ac09be9e6e44edfc735d99d05d22bb9cf817075f404873\nd7ba5b9ae721cf0bae250dca9849af75f67442982b10a809985c8f07b621081c\nd537864be2bd4294af130b1151b5fbfcb109bd036e2c9463476c9004ed4de3a9\n64a1758c271646186999411f03fb8f90b0cf8fba0c57d61990d9e1ddab8357c0\n182e69323818ae63a9165619620bf88a6ffa98f300a5840e25382aac7e76fa49\n4fb7b5c4dc04123445f679e475037307b4db5866e8e88789f9fa723ebada6cf2\n19541d474bb9c49cb4a6197a6a4f054d7afdc627eec359f716a4419ce35c04f2\ne2c5e0af8ef0b546566d2f44b035d9d0dea87ae6ed093779af0727efc97d5287\n77a60922b319039de3c31bbeef033ac366a4616d7e7ac8558f4717c66ecc950c\n096f04f2568956eca50588a8935b98fe440a71aea4b35697b2c5d26ec89a948f\n887465cc870c093e6d604ed2025b99e502874ea32a9fc2f8f560e508d74eedc7\ncf140a6886fc51fa77c8e373e14078396d5a6b2f75f63e88923dc593dbe7cce6\nb1d29834e0d6215aebea3633c7b0d221792eb91b7bdda979aefd56eabeaa7278\nfa302257f8f1464416ddf56bff037cbe0a63c55fbe09d62c739fc271b78cb2d7\n65492e3dab5bd772c105a93a321c35cd3e1ad88b95c7643253a07afe5ba9bfca\n3d7872f06e27fd22999cb7f33f03e7c60f2a4e03bac4a145b483a80150096b79\nd91f0097a62e920e6664614c85b486dcd56bbd503bc4fc182dc13ec0276190a9\nb384342bd37c9e0d8d3513d634c77797f74ff945f59d659789fad05e79eeff7d\n5f9bd77d4c2dc9c71c484e15f12a177e3d196f50a2b8467d6500e638c299b1ae\n967a4d9e9162d0ee0b040c511e50eafacb688f426b7a0e3a18670821db36375e\n88c4234bd20a700c8e428bdad943eb8246961c8b0d666832f828afe6a8d3456c\n53591d9024e63bcab6bfd714c799628beb84f376f971446af59b95d933dad3e9\n09cd00ec3f66b72b81bebf37e6d12cf60fa5838501a9833afffe09ec63c81dbc\nab0102543bc9d2dfb424cef24052b15952f08f77f419c1e381e748b43fb2dc71\nf0ff0ff424a350f22ef005528b58e477f3931b754564bce31cef2f9343245906\nbc7ac8dec19ed3b7577bf42defdb70243e27652684cf2b9d5515e82cd958c9d6\nd4320486e471d0f68db80847a5172b89803822c6ee7f9a775815b87e634001f2\n64f66891eef2fffd3930d5c7f6913d74875f35f6cdb47aa9e79690b7297514b5\n680958bd9af04a64ea6657694e82af8640273591f79b8ad4799beb9abd32f80a\n4726526372b4e9b8fdfae0db062d19202c6796ed98cefaa897c2666292e25ccb\n1792e42f9397f58c7b9d5adc228d6b97678723480b1db418e88dd7e6a297a675\n137ee4eef3b0a20c1458562aa1e8d1f7ca15738344bb9c35b653246ccd47d564\n7dac25ebc965092b09906782940995ccd9c2842e3409f215ba1d4815ba254862\n021f333b3c46eb0118c45c4821eb6c81bb2a19b1c6e2d916148765c0e1f33d34\n4a5e833b67c81f620a41b0e647a298e125532fc8fb0f4202a87fc31e6f8be0c4\n92f8b91311d887915e5326c8fbd2a6bcffae0bd45f21c60746cda46c9b4390da\ne9a82911abbb7320a479f790a88420baf34994c6865e3eccb6a0b3304d12dd76\n585d29071473ca8c726633035b5c7be49212f377408a4658e7dcb45a2ab55dd6\n76cbb59112c585bf9c4dde0441badcda6ff9e0e6d00ac818b3c98fb782649b5c\n8f0e65ec26e7133b2db3258a6971392b21eacf1ef5fc73077b1bab87d599954c\neeaa2ec60a3021035c222caf916de01e09695425fcb9c651552e318fbf64e8ec\nea288f68682d502c8676c3062889ae5c89bddfc18008079750168591e1b83d29\n65c7e628c1952a9c4d8cbf9a9b3fffe470c69df2bb152855724513051791dc59\n8bf4c9026c65cf942007085e853f30dd66790701c073855f1aaecaff7f3e9e99\n7ff584319d5d75ae8816e04e4f5c150e08a1cc68e87f8bd9c6f1824b04fe9499\na61676ec46dbd448c1b694eed6973c7ccb1a9a56a1aad011d02921dc0a3c1b5c\n123f3271d4f519754fe8d85dffb23bf551a54b73f7855452fd515c71bc61ec4d\nbceee9e5aced96e6309182463289781abd4421dd250d970b0650c7491a3df14e\n8e70e9ececf4182ccb1b56fd93fad614a29a50cf651c74da437ed5149b0b2b3c\nc66296039cad03792b7d0fa75b40053b31a0c7de8f63d8e5cc91293ef393bba5\n38a23c1105031bfcddd026b9aaea9b59506b763fac59be63421c37d58c0a51ee\n56e22d8464dbce432ae8f773a0a90c5ca0f49585b82ef8b665ef2bfc7f171dd0\nb11d2d28f9c5ac1806ffafcf990f60c0dbafb2e747ad845606acdbdac8b6c8d4\n61b8fd58a87dcceb95de6f99054fb98bd996255e27c4bfa610a9fe6362b6f5ee\nd140ccca12f2ae113a55cb814a7bc17c408c620f67b80bb7a6e38b8f0e1ecfc7\n42f473e9452d1aeaf91a49faff60bbac17c6c3371fda2b27d48287c26b0abbe7\n01f4860c25137e611fd7b29b4b2da4ac2d552e928d2a4bf058b11498fee19430\nb0fc778d1213f083fb083d24f99c17bd6cf6071a12ee184c53143d3e17321697\n2e9f99ad14f066e010c410858c186fd564e3beacf55c7cae12237e12ae4c7705\naa8b88a3c04ab555c6fef17d294d5f6f32ef360ad5e5a76a87be5b2beb4b892a\n246113cccfc7974667f2f4b666afe19e574bb9ea9625776c8eb746ca3d3b50e0\n8a0dbe29f1e169de31ca00ec092511fe30ca6c04011fda19d2abbf9f8bbcdfcf\n4954b3e330cc6c1f629fab049eddc7bf2edbfab83c2d9918332e3dbf0cd93d92\n0231c3a85b5d44fd1aefd272256b697972aab105d7f58929afb20faca2481bfd\n695a920b8b980181da9317c76d47464cc23bb4ed3e404d4c6d9073710167dcab\nf0edd64db7261473cf8cc655323a4ae8500fdf9d2dcec5e7afdea808199848ec\n62f5a115421e41073899b2bc4f8637d0e5fa1e91cea94ac4285a7095f675c440\n421bad69e58b1fc0dcaf4bd02f65dc4204339d11333ac1a1dae46a95ad8a2427\ndf48b2a05750714b0adc7c812014a7861889cc820665f57550aad037724b87bd\n9d6153e439f4e89af6413eceb869d1b7fc9bc66bfc0a33134c344af83b7d504f\n28eb0b0a99bcaeeabbe0a7fde5130d6ea92bdf55776e440a394de22b1964ae28\n1ad2cfc8922dd5d952885c1a6d0c704d99f999f31c23b24f5812b3d131c03374\n646a251f1c2cd28255e444f871d759f23b3874cb32c0bded36b6baf6480a806f\nd17a6c782444d42e7d79cd98e9ff2b35c7c567e05c2dcff0617aa332a4dbd768\nbfffdc891febe75b40b816e03539bde90ce221b336d134d141328e7a5f62bbd2\n660734e8d801dcd4f68be785e5b03c1258c2e3e6e935be0cc55525a43c9b0eac\n5c4a5529531c83ab5192c03846e2391f6bcdd2fd3c554a471089416a49dd8b7b\n58b9e8c6ab833667e8c415dfb509671f3c800c665c377394b54fd35c873de735\ne053cccbffcd6694de73f7b7d92c9b4558a9af6fbe4db94c27d7b25ddc291106\n0d14d0560434a3989e219721e8bf7c41ca8ad9559b8e946f87a6b65a4f372d25\n0a6c36069f76ecb170b0f376f287acd86f0a95d1f1fa37635e4b0ef47489f4ec\nbc6f6f63ed1ec5e7a64cc59cef0304f05832d4d75b23fe895cb3cc0624bd7fe1\ne495da2503398e62bf7073ec19aee7fb11b3809b8dd130bbc14530c8c13b6a73\n2e8a8ea8a67f2581a0d501d7e5f8432e63020a7761de4df08f409ece7274f070\n651905088d0c12e950baa2147f95459e209464b46dc98f86f9d6fe83f21270ab\nb24b8d7ce8d6932e4f5064fc26cafb92bc18ec63148b71f84c3808b05d7797f6\n8a2c2c7d77993b2ee4eb14ddeb13b634c5af7bb15fb93c061c6c735866438327\n2422e457351a7d15dc3365ea38655c6735e26539bfb141ee520a14da7c0c1998\n4214743dcb56868df139f5edab3ebf16c9215b79a9ed548e53d00c888a8b5178\nd8af4ee8f4010e664b90bd72f84f051517bfa1698f9c8e870be40bc600725e58\n6810a5a856d049d0d85953fb18c6ef9c163c4445a64a79ad87f4aeaa43429cd0\n412817eeb0aa034f1cf19673914121526bde5574c1531c0b753ca9d520997a3a\n8298151fddb9e4977b3e6983e56846a92ddbd95dd693abd5121f00c035eda2e6\nb2ec1d0b77551a276a675eb1d757f30938419f687bceed74f1dcac5e4414e5de\n73fdee712c1728f4c94a91bac38d54039d0a0e4c26d8e5f70fb4b76eaeb3f286\n12d399d0c9cd65bd2d2a663ad8bae773f207c538b6a39e65108e5a5585ad1233\n78954f8478a15c6da23db4a3715ededf1ed40d35021ad7e478c8bb6490dab278\n806fe9e23e2c99c9d4233176135a969dc6c74b34d144d6f9d65b54edf57252ca\nd365d0bb2683df7d105b6669145ddb25608f2956005668896864057ed4c089fe\n49adf24b51c8b8432edbe63ebbadbe9e7cd2663c37de30b7ca8531b30a0e2ed4\n18087fe61192b3dceb209038ad440e0ae058c9d77889d72037ac683ab87e3a22\n4989bfdd6fd099106c2a7dc9dc4543a250806500b9b0272acc38b48e595a72b4\nb89c05e5d1615072c62d9ce8547acbd85ef853c696313c58bb89751b509472c7\n24fd5b6a64426f03a0d6404a23d19224740355e3a7cad701bd7619863c3d3b0c\n05cf01410f013a3cf7718bad01ade679637ce0770254839db1290f2eaedf7353\n6454d68e5fe34446abbab4c294266bc0c248a063763c974797fe78b17d0250dc\n7c25893a2c598534fd0a0a84c7c519eef24816048015c621d8e2d715914e27b3\n738fd34add53b3034f7c267ea7c566e82f259425812eed5f5e19c74ae859b44f\n11677f04fd177dc3b56e3c37df5226c13eeb361531f347f980920663b2a31ce0\n2a69875d895280737798b2e34aa90bd4c2c914f075b68829635a9436d95afb09\nf4c18ccc87077fa1eb9eb6512ea0ff0c365bd470be78c0f39b47fe2e9e9eca7a\n2352a31d9dc7d7ada3dbc1b841677b24b5ffb647c9fe83f00acbb1c0220d5330\n31af740809ebb7c3df9d894cc0a97b9bb5e2a8eb6d16b5875da5dc4517c09195\n524e860e5f5bda35bfb1a9e8e24c3bb8f84869d8f6577c1eb8fbf38e667f2c85\ne1a8561c766289beecb229a470c63f74d49230724c037fad4e51a0992603dabd\nf1fe20adb4995df3154e5829aca9d2af59a06a063ceef580628ab18ca450c2fd\n16b3cde6e911c06583c7c55e7e74190d760a3792e6e848bd9bff6852a41a932b\n4e8949935133b6acfeab815439d4f8b1619258eec4c802d9d7214681acd269e6\nff3e07f29e53800831df42ba776a83afd9b8c139dc4d0d1430ce0c95f77734c1\nfb8af40687e8060399c1efb7ea2cbc86f74cc7fdb7e952b0dabdd4d1fc7c589f\n38e2e693bd34541e8d9e1338a3fef82bb9ed41ee69e4e9ee46c0daa3330ffb34\n0d406c20c7bd8a8177e9b206f066db9fc48bdc27c8d5d245e718fdd3248b26c1\n0c9fabc3365ccc3389d422207cd8fe815fc8f60b1d436590a5b57a60c075a953\n7300a096c905b8a43d2b4dce99b4413efe51195d76fb1622433a60f6480dc7a1\n6835a5491c28aa0afb49893cf0350ead65d68c17f9aff599d5f8b43391904175\n6fb368e0e8be0991a245011006adf7bbaf7fa00a46431bc1a37c2dde3fa61c0c\n8175282ec68c9f8b9698d204ca4665cf85f28d41f728d8613f05d20b2b228bcc\nbc453bb9e294f0ce352b59365535efc50187e0f6bc044a42739c9ea7ddb02300\n9201aaaffde1b4b4169acb5ce731276ae7fac57e35fd57e249f64b2c0ee28cd6\n33afc7351c42ef0a5631273459d5234a03256c9bd74a77f8142c6afe1a1b766b\nd6d100aa589e76980fc0ecae323abc9adc7a69d257a7c9fa08a043ee27dcb7e5\n721a5d20fbd1b5cdae1ae9cd323bc155c118373521cba2af1af55655a134826b\n4c8e13607360d88d927e971934d8622e7ff8d46bcc91ef6dbced5666af5116f4\n606942560cf49360b490ca6ffe6a210c9be50e3cd0c016ed623ad7de42d334c9\n64685c1388bab75319e7ec3b374f455746ff38f9963b085a307e6bd6c9e310a8\n8bb74a86e128effed21fd046b4999e473d296bad69ece297dd911729061a46c6\ne57de988783f8519609ff80e10e71bc3dd8efa15df736a8d7bf5d8886f283850\n9dac12ec060cb9cedf9bd08375d0ccfcdaf12cb9a695f3b6fa8f39763fadbd1d\n3ddd253f5a62c36c85f70fa334c204cef99bd0d528c62ba20ed315ffa14e0927\nb3499b70e6b2bbe1a0e2ed3740758516c2c379611acb6eb67bdf721ff4ec1fb9\n01f5dcb20b9c83107c57ff2c3fe9539fd0139437324e485068c58e33d20bc091\n81989b0faa54bbc9f1504a009a5d9baa4661df863b69803bbe1d24d5a5ff2bfa\n725a3e1e3a0dceab2f641248a5b49d6db84d32e6af058a5cae68f40c9052e2e6\n87c0bbcd5e2451795ca1c37869125c8eb2fb59db8aca4b24c7d520bfce6ed01f\nf4efbd6bc3a9e397e89abce93e00c3cb0425405f59a0b75561823e355d7c718d\n09c2f6f40303b98c575a17158d7cd3cf7bcf544e264085f1ce58320a3f222eb5\nec468e97cb9be869eab7c1039babb5b811c25b00943207e7c7df0e09cab7ecd5\nc4e4e6f17b9edbb4ce5071f00c57290e1538c45ebd540f8629e45c3ccfa79a54\n91e23e4a3baaa366a119456dee726240cfa7cdf6d52f754111ece87bfe3790da\n6c8de4ed0ae13be32b600311f6d8e718d99b9c8ef282d24ac767e0aa99ef431b\n32f6c30d6fcd3adda5d09068cd6320ae052e704702af30303064e22b18fa07ee\n27e8da9ee58659320e0d51d21d3f8dc2938f05f6568533d3373f560f50aa801c\nea8d2abf80d746aba726d9f688456efde22522556e05636f391f345992027f7f\n51fb8467d972f893d22cf36a94b42c1a7383682686987028ebb5d3bdcb2c776a\nad24e87058fa2608fc8f2ce042c06c13879e9598a9e041ee4e65d523f0ce6513\n2aa90b98bcebb464b0d44837af74457fd11a68e9739744e990b32968ba767892\n75060d7d07d84224b29a9beae2ac6a6494fa9d6f8a9ac52d3c48eb3f860571eb\nb056f4a11955b66cbe1a6f5ec2bc6ad92049c6464fdc1e4f46ef3ea2ccef7a0b\n4d836bdb1b63adf417ccd1dc9f8cfdf86c2b8da53e107c0bd79261b30b0e325e\nf56a6bee589b4de951d96e51592c8ad0094d7f825057b387a07317ac832ac661\nb9d28b154662a1a3a83f347d3b4d087156545f6270f79aea77b580edd12bae8c\n15c27ca20fa54172893a923839055cffc0014ab01d9107f6a2416b9df9ecc2af\n7a0a68dfae8df3bfc0b8add67d425800039dfa7e3e534a36d863b243141b3542\n6c16ced8392b58afd4b1e185550258b97c4982661a66890c0b20be04bcac423f\n17c1f490af78b9dc1b1ed398b168717ca58f5d43f88e00f9db301404bd210daf\n658ead7a915ccb0e28452b18490751dbbd453add5ccbb9c71a27a9a79a30ba93\n104183be3622c590b5a2ca5bd92ee65b1666e3412cd169d385bcd3ecb7121f25\n35c3014678273fa41c7890983141361093ca4b62350446afd179ce8e1147a87d\n012e8958bf39f323a4e9e9a1b51539b38b743f6f0e1aa0117cb3d5027c5d0a91\n8008d9138ca7f781ba27eaa72e2e7fd7d218063de98e50830af619c607efdbea\n4e20b13d603f28d12497e73e3eaf4ce1f5851aa343606adb377940ab631f25fd\na65bdbada3c2214935cb8ba70030e734d99f190914b3cc6ee403a848d47f7b8f\n5063f1b967b1859bcd18211ba241b61aa9167609276623a0d8ccacc464f375d6\n480f72877105c53f2f3f1e7b56d52d00435f98815d85355dee6d39f6a6a04a64\na67d306db80952d995eb1055d9300292ec432cb54a9d8a71c898970bc57e1a42\nda7b608974eb08378110c74a71f6e40afbca88f838db1a011d551e37d05109ef\na138a0c7d3cf0ad428e7c012fd41eea9cc4c30be73ec636326bd9eea1620bd9e\n6547c92b8d44e9668034b8f1baeb12d621bdb4f0f5c78f3e2da778b995ecc09a\n6fffa46207515e56215ef88616d41fdfa97a7d9e88f7aad28a0de2dd26283d17\n4c95e7cf0b172e0569cf3e1fa71041ad8605befd82c1192bc4863f017ba6211e\n4984c94bfbfa7fa43d53865b781677ab06c8623d1fc812dc789b3ee550a1365e\n124a214333bd7f4769cbe78047574dbea8e7681ab7d8d8bc582ec6b8c6eec36e\n65fdca8ca2397f60031fb37fb502ec1647fcbf4f5bb48e3e16adb3d06aad6a3c\nc9491ad499fa3bd3f980c3c174b8a2b9b59bea09a3f7e134d796521c7d8d5293\n804f94b6b9f18b9a2dcf0d5d728669906799b3ec681b48c7d207cbf80f3182da\n3a99ce2499e5ba6299bfa019bbfa14c764604da291492b733a883413ebe8616e\ncb9706e98849d99588e0aab1bce3831d7beb19cb4ba5dda76774649e51a610c3\nf6138f2a742be7617978ac8e438ecf2a3e4bc484a4d5d0b4e92c7fcea8354c46\n826f11947dbe237c8ce9eaeaaeb6ee77291ecec2cea5861e024791bd012e4624\n5d49ea5a9525941954e596cc89def50b0fdaed94d99b88e01bc964ddaeaa839d\nbfed7f110c0ee55c7caf4bcb3b59990bd86b05e068f5ef93efee0c291647378a\neb12d0f47166cab4b0985bfb6de6e80330b390987d19fa40a09366dc3231b751\n208cd5173f09aabc24002c5c5e777c4880d8c0a35453afdbd6bfca37db6f91e2\n362dda0019691fcb814695cd7461558ee3e6d875a1c95569108edf436f2c9541\na5afaaa0562b0d59cdf112252512dde062abb61f6d7e1bd8d368e04e362c2ae6\n84f44408e257c052de0e2ac3024c7775b8e5e5fc4c452b0a313925b58d73ebc0\n7d234fb91f5c7496141e43c5983f084b7e351100c3b8988740bbd2cfa94a73bf\n71febaba001abd0ffe9b7a349f096128abf057ca59d70bb952e8c0f390c87a81\n80563252307984f4d7831cf74b15cf39bd442bbbb3a1b4cee1022dedec6e0c6c\nbe9999b21782523b4a090935c00ded80f814e0b0029b768ec533c36638a7fa54\n893539a5d9b6167f5f3d10a0cda51d3b702f741dbdb5590ff527c4bea45d48e0\n47080b5c32768115fb3208910abf6cd7bc02c12a5698c7ca193e6eb879ecc701\n48bde12aa3832a46029a726a0879ec50f916084ac6a412032a574437a808a593\nc8023e26a0c2392a21c591490917647d9fe2bcdf31484dc37358018a636694a0\n7bb6d91cbec52fb725bcad7432346b12ef1b75fbba96d7542bc7f5c2b25c15e4\nd7ff0ad3fd11d1076f4b16520fde36ff086f7d5b72f784fcf2826ff0f1365797\n2ee415d80520beaf869b1f4ed2a14f69b5bb0a432e577d3beaac07839f410755\nbd6c0f60918914ceb0ec606e7fc400348e9e0fa0dadb6a515a1274655c3c4b53\nc28a75de2fadf99afe389a776e649a600b153923c07e0fbfbfa0a10fd14ac5d8\n52975f21b77af8427b2853853701acfd624610f4eaf83f0e4ac46efeab274406\nc28d0a80cce460ad30050ff664a6b321484ed80c51168df12d6d152c1ef6e756\n9ca7c0b37cd56312dfb1e047622c297ea31ab43dfe10a7ea611debad30656fb7\n7106f499c72ebeac773f43cd9d3b7eb76946352ccfcd6c0b1e4aaf6ea32af4e8\n04556819f5dc267a06de88a8706138cef601ee2a1053b8cf1656fb3fb8771fd2\n05d0c027263ff54bb194ab06f2f9c948f1f6123665014f8cb05c44666c55b07f\nb57d33f9f3dc939846c2dfee063759021c3903bf813fd21fd71229ab10878a0b\n0efaa1efd9552b37b8a8e8e1b5df85494ae3618cfaccaffd80094ed7850e85ea\n485c9904a0c6c93ad2d03f0f927da0d23c55b1086c44a450198fa26608d6b4fb\n04e9f388eb8f1862450f320a283065d7de10f46f6d5630c8d3ae1fb5fad45c5e\ndd903e25c762c4ad1abb09a627df4ebe0b79accc5a205a44092a7f1b6c7cc92c\n0b17602371847da1dd23e3e915814b8453b694f21639db69b4b213fa67593d13\n932ad5dcb732fb3c52dff150b8f0ceb487506b5c4a817573375f621ee00c7201\n1fc86600383ff364abf402363cbf9c6bc6a8887e2109b22bdcaa5324d3bbbb6c\nbf883e465b90f9b44681d24bc03f72adf4a6b8ac9aa33b2d5ec6f7cb38b339a9\n43d72ae5ad87990aa2bb6fa2d87102bff4018f2ca650408e63562bc43084a143\n0c64df2f0d2988f927a4e33abe8859823366f63124d47fa2dcb01513bbbebde1\nccd484bdf8cc0703d14f33c2bfa3d8bc6b68c35047332b02a719b7f39897c260\nf4a5ec853e92fe97ea9d9cd601bc53e3a53410f3524feb2d785174a0c6c3a837\n0afe09ddbda12b8fdfdd4e89f032a59f4419a70d7050fb00d14a672ac120dfcf\n23888200e1f4fca7fbad8cbfc3b70e5448c0f14643c9ff3517606b3746a99963\nb6adc59206316e9f808d1f8f308ce2e0bd42ae6247c469d5567342b6c079d63d\n3661734cc17e6d0cbc698013ce7268eae7068622e4c297f5ed415327345c0295\ncff24aa30fa2072e389069f5ebe42ed82dd56ef9396f11537de086be59305947\n1f39309402a3a0e71da896861c057cda08b24628f32d479dbff2717fc9a1f93f\n77b57d6b5c5306f2615740cbc35ed67115532a4da296ed70e6e1be1d007a4631\n136481d860cbddd442db2aed32c3f584f7a1a904c276c3ad121b6902b3e8014e\n1048829e7bf222ea38f678023cb96ab3f4aa0f0d1647ef53986b88785d22c406\n05481a658d618d7e8e360b1f409988521c549df8cc4bc0502f38bc2fd2084e6c\n43bd0daba204091534daa7e611f589ef78e181660fe3820883d5eee35108703e\ne79eb1acef8e8c11c63e03770b23f63c2021830f25afad20c3c2175caddf34c2\n4e53f9871854e77998fe7a03a1331e50582e3b4ff52b679b8534c3b718e82390\n7d05175046a5ba898ce55526a4c85b9a3bf45bae3c66a3a03d470c0b3048c947\n3c5c31369b5f37b778fd4482842978540590e341150eeab3a090cfa8d23acd0a\n5d1eb9456dfdf19562864ff40494b506e3d2d32dc991de637c21c5ebf3318e70\ncbb09c4cb82f52c65de4ecd2531a15e3e41a836240e4579c442d4d7a823bb5a8\n123ac039bc668e9fa62a38510674f3125289b94795608a16c504aae33de2a358\nb689f4416ea0032f869e24e2e79c603096382ca5afd27574f108887fa7bc1315\n39a1575599586bff2f0e2325216d0b7c9d0d21c5c90b40f023b2ac2c05afd63d\nf32c01149d3aea9380cb5d9cc0feb0c91aedebbb5e76c08b1046c387495b0fa4\n91d8d1cde73f726f7ce63756004d44bdd77a14e24ced99a51b0505d7e9c1c04f\nfc19052a162b4adeb22778e0bf441cc649564cdd4f6085548adc8d12fd8b3f92\n1475f4485b9453d7c4aef9230d42497f4a46bdbbdf2d4c3b98b317efe4a6675c\ncf703f7737c42902c397d2ed03028ca5e241a5959b431daa27281bfe41478216\n60e22b4b9291acce9846886720f610630e7f3cc78ac4bf62734f79349515d386\ncba6f5d3c1e326bfede2544dd78722f450504ecd87ebcf6adfd5ed27f92b2fb4\naa82592f1edefac2a2c49e2403475e3559cf385a99e8e33e29e9332a6a9dd047\nd2759aa2f044401175a1636495fe87986c33a9d75a567ca4f16c86d1c72798b6\nab290ad23d1cab9ba6db5b11927e76298e8c905910ee05ba7fe37580d950f007\nf2e422e30815f4acbabc0b6e61da645d942d32785efc646c0fa673a332db4d2e\ne1091a8f55ea44c36e20245b551a297a0d3d497f609d5da88c7e4c95345ff0d3\na8089a39877d7557a40ea1283c78dc589a5aa12918f633abb11fc14cb6897c8d\n9b61f5ed7c7439ab74b722c2c655834e9bce9d6953c0efb93f3f966f6f7b0867\n9e25102b795e6e196e639da785ae1d65ec8e380ec79895446fb1e78aa86755ad\nac648d33c2b396e67c9b934ee6c16ac5c8b31490f6e507ee92c68f52c5d85b80\n63a23769386c324b8b5e2f38157dd693d3e1f0c5ba13eab00d6ab7053e4003db\n942f700e249f183f1ac3477d7186dfc3dd54ce0bbc82b1f76e1eaf9077bf0d48\n28eee89046f9426a52c9e896e4bef7266235d28f9173c7dd6f04e221a4c664fd\n69ad44c9af1c286b597fabdb5e16f9ef2b90bb07e53688cdb2c5d247adbf7d08\n2224d5893873547fc06cc75bc37aeb6c976210942f9b3a01f70e8a2455506943\n1adac8a34e0076eb7545905d64afffe3e72790aca77e39e90b88f18c44c57129\n70a32b47e1edc7ca337008999402d19fe6e19f00f0e087a09f86b748a86cf32b\n0731d4dc042af5a02e5d127eb7c5d8e148094d1dbd9cbb60ea32f3713a6f57a0\n2082d1a8b34d756b2b02ffba234b2a54212c0ba70056c4af7633b453f1def81d\ncb94a82ce48c9f97f2273bf4b59939f9d369c4f9d8ae9c527d7dba97bf81a549\n123c1252dbb371d5f5a7ce9858abfc53897945d95fe22049eda73ead25265374\n7fb79264f1cb075dff3eb08f85a3af9b0d7a9026ada0887e0f91cdab99ab72cc\n5c0b55d9c84cd054016f8d3626ba0efdf864f1b80e9ed5d01f3ffb6fc78fbddb\n9aa8a28f7524da27968cad9851bd3e568976236116a03d812672592cbc245f22\n603d061626a861ad0953260939e75a6a3cd0fa201287f3c11f03c3029b4628c6\na94c6afb2dcd9fa1f80df3e4a2016281658e1ef929fa6657ebeafd25c446d44f\n7b4e1af7be59ca4b4fdaf8a53b926ca0563e895fab0cb3add0cebf0b5bc99bfa\nf1c2bd81ceaf0bc13bdef9e31b733ed6784e3fcd5d1cf8ad32d622f2832021cb\nda97fce78e7456b92102556ff00dfd5fc3155f9244014870ec9a712e974b7931\ndfbf759bc98cf3bf7984af4a8fa5cee0e145974e2e2b27b129d993de1464eced\n8f914a598332c57a0e2e2d67f481a1f87f8801e1c8da16c0ac421073621d8ef6\n296b6dd1aa05c3af79e5563c075a61059871128ab22183cf7736989e2b2d3c07\n5720c1a74fa6856ee4d15d31d55cfb438804d9ff866689b08f5b80f2575d670d\nfdc15aefbd7aef85b146d445086a867a6b76108e0159b2f8fd0ba436f987c64b\n69a74954601d83b4e00e29ecc2b1204fce6a0084b23c8e5b11ed32501c4e5b81\n48ea3163b0b778614002e081ce1e9f0f298cf0c13f3bed7e199b61fbb08ab162\n34a85d14e811d6d221f5485f23e7bc19765496a32d505eaa6461934638146410\ncafb403d11825e6cb4f532ba170fae2d521ea3105db2163aa0401fbba4fc8955\na9beb53e64a04679dfa3c9aec5d82bea640f0cba5a82bf7794411bae377a0ede\n83da52d851c820859edd906909c9f3021ac0aafe4fedb16361fba42b0843006c\n7445c1ccc85675d7a50a9b2eaf80a4869b60b6b993249b657bb8e0dfe536dcd0\n86a78abd77688896c4c29e8b7c5d1af3007a36fdc1cd3b70c113bf7660772ca0\nfa00c682e2567d377df1ef6db30154f5da3892bb4b512a0d053bf4548e52e437\n858fc88cfebd47dbda6cb35986156a5edff8cd0ead579603dda8513d1e27fbb2\n990c20e7f0e2337d583c74d21316ebace4074bcb154954508c5c25e0730d928d\n5c65799b83d508c23175cf090bc4520627c768d861d522dd2176cbf7fbae41e9\n4b0623c1263c960dff1868d057296675b44dcc7a5f02dd3d8f559fb8e5b65a8f\nf9607bac681c649ae74229b7bdacfb5e1b9b11df965cb66a5991178266917c35\na5f969ce489bea89576bd58dd342c232f7f2b08cd03ec2b35758f18aa4b73801\n8109ce5bbc8ad235c7b5e0f447510eacf9eb9daeb5a2ad489487c8e7b0ef3ac7\n67908a80ad793ac6543db4bab4f1dc6121d4b16d31aac0cc074d945117a6f1fb\ne5dbad2222cbf3a4f355ce2f8f1a570d0919679aa3996c5ac783c242857720cf\nf052ce3ce78c2080617b9be5c9a5cca1f959a0ba3b594aefca48fb1f439e06a9\n063b58deec0e7ca5a3a40221768dbe5c35bcd5f7e175c7403666d2065233b711\n7f86510648e6e448de1f099c926d2d9b9bf1ae8c4ae7ef828cb3df1e75e63c62\n8a62fe27f01b538cb63e965becc0c3aa84eb3c529019859477045a52c3dd5c8c\n31803f1016b8bbf26fcf063f607f7d6c19d851558d6b3c812f608875d341d18b\n8c39c82af2a495210542efbd37a69c15fd9c03a8952f05c2f346abbcdfd03f53\n6a56d6130e5af9fb7b3830d4a6068912e3f4079fcf693c5a9cfa16e248d14d8c\ne116a637ec47b4c26b6e6376bf8d7afccf31ffef28b7a9e9b20380eaf6a5fc91\n54edf8b1880825b782c81379f84f4085515c47c5d20760f5a27a0cae1ff65c84\nc810adf1a7f2ce9a1c6c76fb71c1607da884916ce987a5a4128acded8abec535\naacf05af347e8ad8e4bf35348a0aa50b628c2242ed2d30643791ceb98bd86ea1\nfe997ffdb68b92748efadc0284aeb3fa557a885801c9c863a0850279e48e65c6\n05ed85a3f98a11d3268643556b4913808bdd4a2011c6511ed19b3f94f10c508f\n7dd1ec9d37ce86dc8ad8efc914d0e46816f16fb60db48f85c31e34884fa9168e\n1098abe4d62d2c1abf4efa4f0a84f202250d438d8a19e9e6b1391fa54c49ec0f\nfc8476187cb857bfbd2aad76087bb74fc1f45b015447a90e8431e55dd4c882c7\n1d4b605ec13d01e884c7940f82e62d76933a7a88cc2f4e5eb485ddabe118ebc9\n86dfdaf86cc12ca2ae55b9ad7b7821cc3c6a64c112ca56f5926a32b06612027d\nc0bc2caafae6c2dd74e1b88219d7515b506393919cbfa7891b92bcf08f4ba9bb\n88cedceb4e89d3872e912256413299b3130666f288d1c5d504605de11b1fa999\nb4a6f117c5f86d03d7aeb41b0fc65cd5fd7a39383a1fcd629a15b9d7d8423bcb\nc8ac1327ca65115ace1911f922ba70a9fa061e2824a80e664dc4c7307cefbee1\nc80bf093276f45e1e0c9c0d22202602c561797261079b35454a29d6d596e93b0\n2efb624fa2c75fc5e400c8475aed2e94402f0e2858a1626d9880e540d199f70b\n34e1f8fcb5b3317c0a0cb1272898fe8d9d2f8e99b774887e459a4a6bb4cb34b7\n9aef6b5424ddde2982d1193fd2d891dc3de4cb61afe7197da3841087d02ed87c\n8d73155b72036560b8aa4d5d0a3f1f828872307dd8b7e6e0b95a3a6acf57f490\nf1c86e459d8e3046487c457d5025b3f9817697613bf63f2c2e314cbe19acc65f\n93a25039eb015919d3315990a644fa6aa523fef2e77eda125a970e4bbf28ca25\n4cdbd03a3d23202a2b8d6c12410570f23d0cf4464392058e495bde9352abff49\n4ea60a43b8a233060de9a13512d6411b113593b2f7e3abfbbc379dbec0e25060\n8d7277a0d0f0ae4a389e94006a60c7d298d5ef59240ba40039c893ad71d61d36\nb2633d2783671afd7cbb2d5cb33e06bd45da0346451fa238d942493fd87c6703\n0309828bc808dd519137596ca934397e6307db1e92cf48dc7ee20c3530288a06\n48ec45fd748f9394b942de71c006897986fc6e5daab53b01057ed961fa180f27\nfc3004af7b436b9aacd83ba39ba03914c50ee00ee2781db73973077da008d4c4\nfab5bbbe02d763db2f63418efbf96dbe94baad2df6a97b8b41465b9f86bfdb02\nc6a63949936ac92c7a1215e9b2c8fe01b3e97a0b2fda8ae44e3c67a79d5534b4\nb67502e6e35cc7ff491ce664bb9550d5dbaae96e10174c45e56a1f449f5730a0\nfb805a689b368a2dfb6ca2cb690242eae2f3efd00b02eb116642acbe10c0f3ee\n32ff26370bcdb5e9334074219c6c77ce0831e60ad88cd8c4f1ab12049d065982\n07542ba230483566bb97ec9dc9116024e8846e459ff6243e439e1cf8c1477b3a\n5a3e9cebb504668693429e367ef4a3fac6eae9db83f2dc0aa641f09ee8ab14ef\n961b6ddc2927a490fca62f15bd8b891ad459c77d26eb48c4a099ce3df24c3300\n94189b1c8e76644411670721a72919fe7460e0c6ad2712dfdeb5646358e29b34\nee63433f3358d8122be5494dc8532cc44226943cb7e22a37c87c1def3dd8eb4b\n0714dc44d5385ab5c86a3708dac1884eea3e26298a4ada86544847cc92f7efc9\nf028fc10a9267b7e6063eca9267520ce8690a07ef3866f3ba71cc0d7d2ed9795\n65531f14fc7e7e75b6d241b5b5f35b9422b3fcd1fc6d7de1a85e26048a6614da\n6c689cd384564565992249959359f56631a973853299146a342d29e6a256ea28\n9d3d4b711e15e713951bfe1ead076014e78eada7fce65e2ce3d2929179b97e27\n90f2b9c0ba086b71338f14174e9d85e6773436c2d08ec335c40ddb4191d9f929\n4d8dca6da12efd75fd39145fa330cfc7926676d7e3c002519549ac9a20170a3f\nd1b8cc3a45291e7c07c9b53d2d4e6bb86a707fd6a1c766dd46997e7518446a55\n8a2a6459152d5faa207dd61f326c863e1885bae88b141f670d07e6c2db905a53\n2d5ecd51027fac9e6386de38043be4272a7f24be3c3e26e0da5597298489f1a8\n629c23b4608891a5622da8cab64d5c51591b098cde326aa75713e3f858fc0292\n46f7d2dbcbc1b16807eada2d46e4889c3637467ea8ad9bb1ff8c21f0eee0559e\na346558476fafe7270d1da6e66f487b4e01e610d639fafb46ddb80b4f9d57057\naafe5b475b884b175bc619867f4c2fc28053bab73d0c32b85d731a1bad5e7827\n6415e8b7f972d5c5fd108658216ae9e4f14c63dee83c30f0009a41709724ea96\n191b9c5e46b3f7dff5de00c35e5db5b279011bababcfc136670d1d35b62b08eb\na97555d19ddfba6e22a444dcbb8e351585771568f112cb6c7d8334a8ab1730ad\n12f4304b5ffa6165b483de459b205c0197d1dad828a6c13e11af650689d70d40\nfefda05127d993f93b6aa9936dafb52f1ec5a73bd8e900036683193f3af30af6\nedf08a30a3e782ea9c5dc139d3501a9383a5c20b96e1a067e49b60cc964b8067\n94eb2f14057803c4d4f606d0e6f4ec908406138f8bb691c7ff10fb30bb042c52\nf53658418356bdda66eb1437256d00b94489efafa50959d798a69effce9391eb\n5caab5598305e136106a5a3fbfae6d9a3625fecab8f062714db5b5741985424c\n44fb5bc3f3832cfc5dbd25448deb821a83116289307e025efbe46932aa442407\n91f32e5cf3fb73f4d7bd035bb9b2a605a9f9a5fdf34a4396225b25a2806258a1\n5597bee13a9a3fad79694d57cde0284a2de9cc3fd1f172986507eaebcfcbcbf7\n2f43b4a586ea02e9c58592e7b65033028e19ca2bfd4eef1f25fb25e6fad42aa3\nb5d6f68ad839cbb4a342285ca7cecaefb0a479ef4f424d4e35242c3be2d490a8\nf85671257c2fd3e6cb51f491b711badc1207d70edfbe5b30769573eb313ee7fb\n50c01d2d795d43e640e8c853221eb4e24ae9bdd9feeb1948c3e5650f7d4eab2c\n0a2005cb73972c8b361279733ef420208cce4855ce6cdc07992bab3a518b199a\nc05e2c9a71dd9638ee19cef161d03653fff0c68bc7c31856a7e3eb0ddc95a4ee\n44c3f42637f133581140cfc8763efc2e38356e15734fce489bf330987e13989d\n001504d3b6a768c1aea311dba4206e3ea50e48d1913cae5a6e9314d2cd27a0d9\n90bab0d0a4d7eb0ec54793aa3a2548b26361563c6bdc0569614e35c22cb0545c\ncb89a0f84a949a11079ffcc3dc52ae51dc842f39dc102f7aad9485c0951f63da\n5bb43ef4e4c6e796ffba2dfbdae20ae017c3b2d53f6eb0a96c2737375f15e208\naaa0bde5f64336db344f18e7fbf55d8a21a08373b6c0c392805ac87d3bd721e7\ne48604af8a3dd85db44b373d19388f5f755f619968ec7c349b421e8a05573758\n2563606a06bd2b4d6d8bba85a8fad06769acd6e412a51c4f53f0e5b76fbcb1c2\n6d1f59c08bdd45388c3b12f6d511b544ba033219b445165a0512572afef4246b\n54cec7715f904a6feeaec858daef686fcd16df4b420f2250d7ddf2b0736c3984\n197376836630c269514a483fdf18eb28083c05d9d03a4f3f72b5fd193cffebca\n72d95ed6dc403588f73bb2ad2b6f5c9ce9848303368c1c136f46a8d6f83ecdc8\nfadd4f9e90c5c1104e5b37efb374e03c1640b137474dbefb433f779ebd1896ee\n63ed2b57b2ab5ebf30d91e16099066c39653c5a8fde39c4c28d76d6f5cbccb55\n640fb246bc7604f4f5fc50fb621da401989a5a038c6e23e2472f82153c877253\n82b71d4b2fddd156adc3e7039b9a865f92420212bd5236ee51e65e7b0d625127\n8ab3875d23234794b47f29bb65bb0251d263ce94226eee28e0d2f38f5b997537\nd3ffc7b57b243966841afe869bf9020bf81b1f835a5b53f4cd255861bf0f7c05\nfd8675254085c098414fd3c8379f1d2cbdeddc257f72f28f982a10d9ccf3ea80\na32b8518a62cf64af73c5d187e2c5408289dda2ec1ad98adff51e572f2fd43d8\n6dc2131c082a78d597b55666a2bf4b960579bca80c04583c078061ee8ba4feba\n2aae48c96198c86a779068f310cd87069f9e7b61a532a74d8b0dddcb1ab70f5a\n8be7bf1105c7d25198cc73b02e33ca1db8517d3cc448248f643d0bf4a952116e\nf5bd30039a6f1f6a4c5c671e6c2c08ad439be8a9fecba17a598efaf0945c38fe\n5d96c1fe7d4dcfb636e95e462dbab6c29dde452fa0e6ce48965c6355df209a6b\nb79bf0d4a9eaf444989ceff136c14636775496145adb44897761e753a2efd870\n55e423a70ccc743dd4012f0d8f070060bebab52d84d6a0f6c5d95bf3ad44cbaa\nceafd50033e5b94a70d8cda11e20fce69da0eaf091a1aa1edadb67afe133f9df\nd49aa9bb4952fc1ec2a440c41d6b26258f81e4ad62fcede6ffe44bed65e9ae61\nd05115f43c39cd2484b5e69cd157482085a54dc286334c0632b0441f201f7cb2\n263adb5007dca00fb99b052a2416c3b9881982c901dc8de717fd083ab61ae55c\n9ba834f6c9a80b2f6efc41093d5de5a68bc4525a457d10b75ea6f3f6497cb7ec\nbfb60aa9ea0f2c90b85440cdc1a72087fb8b3fc98f67dff161cc15824e0f764c\nf44beca127f584b096d6d864b05f26a2526b7abbbf0102eca2b66b397d5f09e2\n2b5c6f9a9dce12538e345698966ca746863977341537adfeef016e119275a14f\n01fe161f7680d6ea9107695f6fe48220a9f39ca6f8ef5b8552eca3c57b5566bd\n58f86cb70257fbef7469009b7fa652c5c9d8b6c53f337d87c40f0ae7d5a3bb10\n3d86130dc0e6cff74a48c38297eb8fab72ee72b77ad22c87e5e5df473b46ea7e\n3e6a32d97e8f354290a33779fa4de37e1c5b9628c6943b2c64b04ba05ac08737\ne129bc248f7bcd5e6341bd8a6459df78e8e6b9b7dad1cff12c0594618e578910\n8286db522cb837e33134c03c519e86ad5cb4f47808fd8c987bfb190206920a67\nff26d100c740339c16b52aa51b10d5467ef6b7888a6c5124b2561197abd2d7af\nf9c903f356197ddc026cb8eb0072b58a5fadd75e08ba6a20099e38afdf8eefe4\n6c10d78567e7cf9cb444fccd18bc365cb6f3dea1e0fcb11160b8b7c005cb543a\nf50789eb7a531b5ee3040494d4836491545425c6605cc17a851b36228e12e76e\nfb628ed03448b5430dd6284859f01fcf9691e4f9a147c17186482d6e89b5413a\ned377eac296c6c06fdbfbf8b419bcb6c6c0cdc636e8ae985afffdd92a409192f\nfad7446b107f96744dfdcfcd5e3e93615ff5934787089c97c8d7a93b3195c60c\na722d63f8ebf5bad16ea890ad8665d8e3c4cf9af7141ca9cd9e77bf7d2cb1a9e\n392cde11a08e2a2386c33268479f1ba60860e63b88f0774087ab6aedc10259fa\n3371565686908ac74daf5daf59a4629cb31418da9d5a7826b883572d86fb70fd\n00cb8834e7006e9dc1b91cc5f50095bcca09706f0b5d9c589c63dea6997046ee\nf0e9bec1d53a0b9f6f207742d4609d67e38c6e37a1c5610efdcbfc5dfc2bc796\n6e92dbe5d0a9f4b9bc161458c3e3f2264da5abe0907895e0195fe4678d4174cf\n2512b8071287ab4c27af9234d966897f3ecbb9d174a4ea08f026a2fcc19b0c58\n97034358333f3bf000a5d6e5194d0878b2ac02e82b3f293f535f6e1ab625c242\nb90c9f13ec07eea9e403e84ea18f1221270a9c55374a439edfc0d9f0a7206438\nfe6ff0da60b669c8e05e33ab76a9dfd78f530937f6afaa52bbfe0501ada9d51a\n506b02274fa92c9c0b8e899930179c5b200e8909840e7d3ddf80c1823a175371\nfaf2875991821be2b38c7568feed405c53e5eaffd187f293bda4a609669ddb9f\n537393e5395895261eb472e5f402b0ec3bc208aa1061bb6b78ca1f95f1501d47\nf36a31d481ab47fea23c6bbf096471815cb6786f95858d903464b1be9c323258\n86a8b593e1b63773b5a0344a99febf865320c0dab654a2ba96e89d7b42ec7b88\n5583b2102d9c983dc0bbcbadbb23c1ca8986e4491229dfec6dcc07329070b34a\nff25d610df1522f50a7b66c7a7672793932a41f304fa2303e0ca73b198bae567\n3391d21cf2c7bbecbf3282e4fd802229051deec56017af46573523c36a6c7a2f\n5e51074cc1d058956eaf6687953af2bab19b0d381e140f45768f7ba3cdb7c351\n2230a4f772ef22cc2e260138b183a9d33b64584fa5b671454d132064b27d1e8d\n9d9a11b9d7bd5cb2778ea68f2271b8d1011658aa4130cb9189b61f71bae0c39b\n5842bff1aad5543c43ee7108c1a211c9ab78a5eeb31f7b461df58572d1957437\nb1d1337b178c07d3dd267df44b0a81073282ea18a8f546f41d401a8066753eb2\nea5930e41eae35a9d6e8d1ead8e044ff0e9d0995c933db14c363243a77e38644\n4689aee3a6947042b1bac0a1f2b6d540ec9632c8217181ec7f0152d0db166c59\n2c82eb39e307ba6c2a19d88d9d157c2ef925c8e2a51ef5c1e7ef9046313de1d9\nc98214a15a568332d6f44bcce3b5ef7b09d7c7b04a4389010586e549c0d98adf\na321335447a1f78e82719e5ee0780197a5ff726d92c55cce5226552d7843b8e4\nc6d5a80b9ee877e2be5d76d07af9be45c8355c14059f603aa85ee784e7a6d803\ne5a35e453961b3554a6cd945bb130ae83f01d0163145ff618c89de3bcf105294\n3d7e9369fbc3b8f11f880f76cac0664ba1ecd49de09fd29e13de60b02031fc8e\n5958fb4413772f5b88f56b7fb9964562ac0f86be18dfec748ebdab3030ec0eae\nb4780596ef2817bd2c5e24a6d502177e011f60ae0a8a0e8f2ec4df2c66583489\n22730f9fed1ec5ccd56e1fee3faea783996dd0b1277a3f50a5fc2cab7c837a31\nd3f6058172f1e6b8faf15908c253a2084c89c1db2a462582b8b15f363c112c10\nbf530a3a05782f424eb62f30130e2dbfb57ddafff84640e22357b3efdc38333c\n4cf1c28b71e785be7f47c59c3bb7056473ea3bed8f296c9ec17d9c781f52fd04\n798ae8de014cabc0285530a8e72a1313d5c17ddc93f421491f935eab8edde78f\n2637174e97f1e46c83896fed45bc00bc27616b87f9ad627a6e0be0423fbfe6b8\ne02d5a8dcd661f700a31e817ea22304d9582f3c5653df62a0ec49f8658b5ea46\ne67c64e563aa7783591127864f7a8935ec7d983e6b1d1784384324284818580c\na9da0c8666cb26b520cbaad90e398af8c0775967774977348fe0a1ae2ed358c0\n6e953f684a67efa4e3b37342e10150ac41421cd04213ec807e212e717005c6df\nd7eccc639f4699308603e25abb0cf8ad288fa94fcd18fe973c50824fc2bda939\n1cb0475ff36e2cba914f8bc9ad62e9254c5883b111ad75df9a1fb13c1007a9ba\ne51a924ae1f4cce7b03a9c22e4c5f882cf39d08b50675d50bf9c89a09056be6f\n1d5fde54f49780d4386a9a5fa111f4e496e55be9781a80deab8feac8e90c11ea\nead90829a0e27684ee4e237bc5dbc8b0f21a91ee5266ad072d9bf7e48e227218\ne4ddfc1e7687b2d71841cab471bcb3a3e1808bb24904de8c426069a58200741a\n06f12d910f2aade1baeba427b2788f66b0f9567d8bfe588cd026ae7d4169c169\ncae8e52df06f42e961097338c5855c8c084dbe6387beb16ed9d757d0d880d18a\n0892957721ccbac487807fdb42a12261418c772e359a7257477491558212dbf9\nfff55b8a81dbc1f95d17a3a82946bf8077983529f2a5094f1c9b157b537d0279\naa0f81e3cff9b9adb1fa0ee70d8295e823d50275c073b0ab87a4c917821ad416\n30336e3cd54cd6b1aa0d7b1a36406439ef5baa75ac3be7af2a19eba2f22a27de\n42857da3c47561a9c63f9534fc855ba8daa3de0c145dc2e60cf7a4665f392c2d\nef0fa737df7938886939368f7cb0042f71a18a8aaebcf7b7101f124f15702e78\n2b8ff75d4ed43b085395f59082775adf6e133764000f81e91f7f23eed6f265b3\na69e5225a6d1f1152c447e26c7b7d795e96258b62c04ad1587f1663628ecec6e\n21e6ab23d99ffec79e6e46d55e758879f58dac96966e3b9ae9f780b7a109c70b\naa6d5543183b3bf621d7b707d9259615b5b8be65f59d9b84b41802fa0a8611c5\n8a551d69dd2a6c2f33b6bd8023d9ffba08de0dd4150b8434a533ac94e5222efa\n42ea9cb3aebdb9913193615fc2e87588b419be0abac644d9414f5e7f7305bc36\n18af6fb1dc0f383f867c99b1ea0f24ac1a609eb6cafc653711701148462296a5\n364947053cf5029b18cf588a2d2bab0f51845f711075f23d890476c95db4fc8a\n2a6622aa1f652e1b7c014f9fb90f81ed6a527d885af6b60891254eb914178a6d\ne297353498bdc35cc30e679293a8af970b3ed41f439564c7e260fe0b67543a1c\nac29939e2054372018ac0390a1e5970fde0b36bfc097ec871504756e47153b13\n7491533934d4382e82166faf59212ffa38963dc1fdc1b49793bcca23c1c37e5b\nc6cf2c4dc084937b71db039057064604c310bd431262e9793f3af6c3edd9b878\nba7d5c62793ff0486b4cc89313103ff214062ec98b682a177da36d8cde6d41da\n27637ba6bdb9078949ddb13f8b140b1fe3c9559f74e2c87681d2acaeff9e5ec4\n3013c81bf79a4e89a7a517a7d45729b9b99056c7230395586cc7adafbfd5268e\nf4933fded81074162947d422bcf5c06d85ca3f3e01a30aab2bab23bf703eae58\n8b992c6f25300092bfb6bdd50e8cae5747f44b95187f1b4836c72bc8fd702573\n330007e1fbe2289ed7538ca7a8a048d1f4ede36b0882a476caa8d40211594fed\ne9c607469259d559bbf9b655effd2f12c8f43f2a2644d9c1e081032424b259fd\n45c2aff20382e95c83220904b2ca9a6c1ffc92bc8a1d8696360bfc6fb83e5a7f\nf949cb63cfea82318d95fb74494ea9de45506d670c56d869f6d0cc8b8e09aaa6\n1f287bf3701f1e25eeb761effe1aa764ee9e8c1f697015a07c3ef89fdfad712e\n81d4c94801f799098e0008617f10a4c5d0f941ded6d44a59d0e915d6c4eee7df\n99eca076caa0c0b76ff7ddec183c0173c99e83e42cc5563d4dfdc895ea5ba284\na21cdd39c748b61ca607f5a36a6322a59dda113ae168de6e7ff7c35a31d2edae\n2a9e8860dd4b7e969bdba7e8a7f3bb8a646ebeda176c4b5eb4783faf6245034b\n472ca9f8870717b11494219a36ac4a7ce0673c083347b10030722e9019647a96\nd909f037b875af1e798394c98d8b0e96d2a7afa9374c6602b4923099181a31de\n6c1b67c3df05c57e54bd1913f2060ab21e84080036912c5569380561502ea577\n064fe99c97e45d02df1c659ea96fa11d8ebdae89a899c0d414ad25a77607c6a7\n336d610bad8fdd7e5e2364fbeb06f6ff8d90cae94dcdc24a4162003fea3883d4\n1864cc782d9bfc98cb3c3c95ee7407e04881107380ee3aa92b2d9a253b1ac08e\n98ea18887a8504ebd390ab66bd4a54edd2dd79c2c949dd6040aabbf81cbb9f7d\na1615e5946875a5a3bfb49bbc6d3aaff3d6e43734e5e9692a39155407a20871a\n8c087babb87de124831e46e336bb987ec8190bb2c47d18566d3a9a7f3c79c2bd\ne257c5519671b078f3dff5373d4358cc49bf3956edc39e77cf03c2437c1e9d07\n75ecdd0800106c535527e3073baae45a92a68456149dd21b01e3cfc51d521fee\n4c1312821d3ca3feb3050d0e0f8056d93cc279eabecadfbed9f47c7e8fc028b6\n16613dd386e89371acbb2db7850d242f887046da135e7791e8a284963a56764a\nb839065a6a9a0089def7aa7fadddcc5dcc8530ffc2760c9f0942fb5491cdd434\n010ceb1d945761253587a42d274acff3605ca4aa48fd001c9a2bdb57cbfd946b\n257c2530f83a0f9883c9420a6c020d6440d56f33e9346374dfa096932ac289a3\nbbd9ca598e1208472a99c3905972541a0f24278f1bf8fa39c8c67fc6a438e13c\nca9556c6b24444a07dbe1d0adac16460e8db1ee085b3b2a0056428fb4cdcc49f\n0b82dfccb5c3db9460714bca093ad5829903cf7a4fb47b3ff515b7517263ef63\nde1ebb20c781f35f83dfe2c1347daec0ef80e7555fb26ba6cd28361c473fb97c\n60bc5bb92db418245b610a37a11471352382e323ef711573bd174f42a5504290\n9c8c4ba58f21cbf56e7e02148df641de08a1be2ede3e773f7f2cd9fc56c517ef\ncc5c1538200f06b57cd0b6933d0ca2b9d13827084a88a7c45ffb0c91f1570107\n7ecfbd1b817bcd45dec55fd5784d112dce70fdce59bc48ac4b678e87fee3dbe2\nbd1ed6da2533c36bc14f18ff5444edf4bc4824e1681aec147b861f1dbba518ed\n01c3e7a43107bd01bdc7acf186bbaea8bf405a6cab7bf6abb23593aeaab99395\nf06c9724ee9e9c9cb096c0960444e50425a3af2e55c035b7d754263333ca3079\n1950d85e72d5b9295ab083bc1d357e64afdd00265d17558bba86e670d256e9e2\nfd34d38ad27cb761e4f60bdf7f5c6d4c68f28b49626f7ff8e4248ec6402a04c1\n0f136e9dc93d75d30458563bf1c87692e54a93612a006fae7bdc250445b9ca38\n10ecbe96e1644a5833a9876948c090c88f6272023a64dad34f139551b2f472ca\n59370e410c961a609d5b39fb99f2d4eb57595602fb04ba6ca4ab61ccfe26818f\n1c8a5628f44d83a51be82136e685e93d206f5ceb377e9d70e5a866113180d4b5\n697d803ea39d8ae8f6737e57853da0d3baeeb0c7df7b679996f2164ed773f661\na36e1582ff77682dbe467e5e9638718560f8cf57844190c6b7838dd325344ba8\n731a5424a8ecca297f0a5e92cf8c11837862e9e0384ede1a7d46b8b43aebc1c1\n671d682514606c4b4d6b055d5caf71c09f35622a5181758d081c082833e23ac4\nc059c0681c988151778087cc54875be084e8b2ec434917fd8cd919b19dc55774\n836ce92e98216033a20538656445c9ea61c07ef70721cd0df2b8417a45da0276\n9acbf88965dc193b5f6915594d14ee7f0f70e94a8780db5617f9a9d60cb66955\nccee986700630a9b0dc484598f26b483ec6a8ba3d5fa7a29085d37e322762759\n7e50001cadc3f3f96e85946a17909b8f7a0423969d611bb4cb6d8c3d2ac74df2\nfb50d278da856923995a1c37aeaf4f35d66c597d39b3908b416af40fe364a366\na6498db24f7bd494e72c4505b2d00df83fd181c2cb9aa19401be3586a7e1470e\nd75a78ccbe317613c07226e445e3e6389cd4282518f7cf6955a06f4eac010cbb\na4a76e4b60197fa000851625a8c54c73f4d2b9f9cd039f7649f841a8fe6964bf\n64337af790c11bd481c7079aa50a972de75ac8e59acdf213331fe1dc2f152780\ndeb5bdbb4046d50cd56f37c88a9cf092e99f7b47b2d035ca924d81d0d54dfa20\n0a8b796ba5606f7ca6a373f80c7b15bca08094258dce183cd51547ef63606bb3\n39fee2b8745340bf06198e5cb53a51e2000e8771ab78851a7c5283d48dd7f9f6\n8f208cdaa8aadba546cdfec09b3f8765facbff9c110bd3f277df50b03eb01739\n49c457631b366fea5419053fda0a0c8bf5e6d2d85d1436607b4cf7afc6346d0d\n5258c755263b32de7d0fd6d302aeb77179ba2728990d9f6904335ed6cb5dc40e\nec2d4b9242cd5c94935444e8f4b208c8c8af47a9ef7c1aa0e6b26b89a299a709\ne13ab1235ab10eb212c608fc6a5d12e930ecdf029a8164d0dd4a07249f965d2f\ne55f41d44d5e66e8ae2b99ccce2f14e0c8b91db22bd9405e2d3de8bab6b7d7a2\n542cc2f25555f9a3aeb711ae16037f5ddf36c3ddb77963691d7c10f88690f900\na67f69e1e7a7c54924051917540de8b955e8d33523fb2cc1999f4023d09b2e18\na525dfe307352e899a47c8c21a92d52521e00587fb9a97fa64e510f084d813fb\naa7ba56e3278aadf6b3c7c8734ecd971661917e4a7f95e145b51806ad3ab44ac\n06dc80508f5a4428c65e2c01e219aeedaa9eb37f208d6870110812575b419c53\n81f40fae821974d8c517832ddac04515cb82418cee049303b3305ae4e73a938a\na8752295c892b6d596ed70daf62955613aaddedf62586d421632a03f06f80afa\n52093b208c7dbaa942a5f045e07e1f213378ff4b72cfe6153df87170da52e3a3\n99908356c282d6e08ab521c820b784263255eb2f36deef47d24c8fe80d80d29c\nd102aecffce86b6650cc0243872473f4faf727c23b47e96378b1c73da70837ea\n3e3ac6e2b0ba84cea31f69bddf4e25c9000687f92e437ca3134ef0f06f3cbda1\nc32d37847e020c1cd138979932ed537c49c0ed1ffda02eb27434de66f28bdbf5\nb050c84ecb3b41ae947fd9efd44899a2ac747c45823809d56bd8659214043280\nb9ebf7be2a342a2d22676506ee60c24604f34085f7b4d0daa12424459d674494\na26962cb6485dd0956548be96f0fa8a904b225bdf2e355ccef003345e43fd884\ncdb5467a1aa9a340363585ce7bf95ee254777ac009bd73137406ea9f92731f1b\nc31f87122e4a4592850d5ae0abb6b520c6d7d8f90e0efe027a403b4fce76ffb9\n1d19fe4a0dbaf0f105ecc25fbc814030ec4eddf431500015d74450d88c6f5675\n3e4c9d6512ee3576f29f62b24b3fc046faa686ae8a6a8054728c34651ca92594\n9340d56ec0b2263d668c94133cfd5cf2be34281a06ee3a8c976e99ee525bd86d\n32ba92e4233880f10ea5975b83f79ea6870ca11bc733332f6008c22bca116a90\nefd63f1ec35f606a6a2943e3b6bfb99e3b3aa1dd188d3dc259d01b939fa9cb45\n326673e0eaa704756ace85fea56ddd6c81b92d4efc083a835696ab29a5d529d7\n00cbec9cf891e5db32434331148b0456570954e9e16d3b10646e7d7b993466ee\ne025c8ef83aeb971380074eaf283397b28e0b42289d2eaf0b52ff54821785d81\ndb269089bad1c5033ea931d12f5a7f806e6ecb28828825a94f5c8a6111e32897\na454eff81d42f2bfea0fc6442c8b1b5754e0baab05e9987b0528909f14678a66\n64dca042b3d3ac7fe603a5862181f30d9bc70c4c28bb078f7da0f37613322c00\nf7db455ba719520dd8c473f84db210ebc5c3cd359335b13a7fc5c72f163a136d\ndaa029ba30b301b822e998107c81c77e20fb088b3e49cc220c426b54aeb8e4b4\n6c8074802e671285039da2623bccc4a17d6897e3e7eec5353f90ad5522ce80c6\n3fb64f1b7384fa728f5b8ec68cba7328a225714b957d903127fa07fc188c1225\n2a8465429b149781d41e55734387fd2b7cb2f013556ffcb9210c26918e0291f7\n44bb36ac936ef778c0ce8a4a4431b58d1a4e857fd58c77551299d9b312bb473f\n91f99d2bdb062dc21368e73a4f09374ce5d89915c1f6d11a071dc2efa01f6bbb\na30811fc7209251e9714c5d8e0a3278416e0efe38863b0c488707fc3a3b7708d\n09dcc1f7a19fc376d9a53e567c982030cc8be908ae853e367dd51ec2f955bf49\n421e1febef84220b0a6ffb73b0c82d5f056b29e85359b4daba59b25ea61d5bf6\ne1c5c0773e1dffe196af0669ad9f0ab2b8c10eb28442133bf3805d5bbc7ca56c\n3618076beaaeb2863bed8f016159b685bc4c328e3073e6145977be19cac32fb5\ne1c252d657873371593db6e4844da17e5669139495b900b5aa4a7b6e3b81409e\n0a95a178d0d7fba7cb878a2cf5ba1aee108842a72009af953600923e852cb2aa\n6e0f035a87b161d89b64a473fb4f0ffaf1aa16ec5789fda3b9c0b11497f525e4\n4be74896bb4cff59ac095088d975ff43a136d92b056330f812a1fd369675205b\n1deb6f4f390de5169bc5985162f38af6694500852e14ea26ac774e7dbcb451c0\nc4dd8c5718652a7537e7a94f14208e57a3a72b90808c3760bb1837e269d5b5f1\nba33ec5cab8eb4e379da6bbb26e56700c0ef7662f0e92739d89478dac1a00a61\nd95a2768a229e15fc51aa6a86f3f4315023bf6fc9d6e05b5a8e313403f17efe1\ncc7e26ff1fb5a7d26dc1e3e44b878958b3b48db1e0ad26a515d03c0c0931ff6a\n50733493825f59c80236feaf467bb66c4f2f17b025335359848f083a8008681e\nce2479807720a55f5e6565ff2abda7f209e20d0e92359ecb6c803cccde11dd43\n00002d6ec434d0f0469b80c95f66adb9c8189dd764fd8fb031b050d65dde2ae6\na86a596bf7e2f1e2da604c49df345e08cd3cba7c4b4f80a3fcaa6ee560ef3eb3\nac46256d883c4c8022400acbe6cf56b0b9170e4cdd649b11fe5aed602518ec03\n422c74c8eb5891a07b335a765b04a1f11601130ecb00dc392257fabc8fb82dda\nb23c40a29aac3a1fd8b86e0b0f4600abdbdea1481ab8652ffa29374f0c25936e\nea60d9834522299735c1a56cfc897223ea34bb09a1f48b32e232ec8316823aaf\ndfe428b7fb6c6f44538404839f29da33ce8ccd94c78af279e183bbd48d5d7243\nb5512679b457a1c04f5d178c5dcd2b2a5e400852ea7a14da6de2ba6ceab654cd\nd270a789436b3c3e912e2579d629542d87d9c03b6fd8fc68c3acb2b821fc2d9f\n1d998838b376847d254606cf3dce0dea455f67eb94d85e2ac8835c9ede2ce08d\nea94552a389620acdcd11caac81a498c4580ad4715695502a3aaf2d993cd3d66\n2777de78494242266b02a25312a860968e62d4e4b2a2e3c8d6fec42e54a80b06\ndaa91fa8542a3ed66de591f2d3281f42c484d58e4e40b49a7cd661874c6c0abd\n88f84eeb22bac4f1c39cf5aa69b7e4d816361fa35a9668b2114f83c32a560af0\nfbec2b8b31554a70e8aced3e887af7c297715efda696489d29d8bbd9b65c58c6\ndfb1470f29f7d94b9a837d828498a70bdcf0f5b5d51c25e05aeefa0833490788\nd18bc48ebbb7636698fb57ea64df6b17c5c50bf39844f3ea0dc97a9c198abbc8\nb6f6116835902ea3fe4efa957fc6effdb0876794f3aca4deb998efe80d94f73d\nfd3bfb89e429215009c9a2d559ed7b5360541f8aef09f82edc4b257b4357b4d6\nb2d78028f579b155af9cb395ec678e8d63784df5c5a197fa85e961ed18f5f863\nbad90252999f909ed42be8a6347f7d03472b1ff776e80bae87f023ec92f8224c\na2d347600ac6c5bcf20242fce55ebb143a626c602fb4065fb720c83b42805915\ne5ba098ad8924df6d45bb99ef8001786ebcf7fb52893c7f1f42d00c549ef7e83\n7a4b4eda517049c7cdff6b3a4935cb9fe3ade448ad1b0f8307e4d18f513f4a80\ndddc93629981beff5207c55dfac2579a3d227994b6c1e788d4084e1ff152535a\na58d609fe9f7b6456f51acffb15f1d4329ed5f95fe66add22e385442ae61d7c1\nfadbc0b8b358cc6956df7980bffc15c67efa13a639ddf98823ed2852a20d8740\n519db6482f1a1b3ccd1ccd8c53d798898329c459579eb96f759978d232b9c913\n683b9f44a5cc027534b43985add3ef248b0ea9b8a861d6e3ba12bfa3d4c3f0b0\nd30a44f8e0eee84eea1baba91e1c5ce13548cc11ac720b50b4a6ddffc0d4a706\n8af5872d999c1432723da84d529ed54fb4c3de8e1ed98cd0f10e6fbcf27da0ea\n05bf4494019d97b84ecaa445d817d8c79c97e5983c2ecbb40b7e22f5a27879d4\n9a6cb69df5e0165bf2a3a6fb5d5198691f4ecf7ad778959cd008cdf4dc2f11ca\n02caf1a8c0161799aeefeb7bc393bb9ae59f0362de55c5b2503e9ef2d47b3ebc\nc65a4a58e19623fa923299d17ce3d64593602699b4b0342669c63ec924cef85f\n0ee64df7092d5fc8b3404f363e3fa5dca6f814594ddc3f74fcda0cc7ed18489e\n112243ee5bee9c282fa4b1fabc7dfa8e3c112501e76fac905584cc4bac177e88\n0784a3f513ea064dc8afe188bd0a4a6177adcc6485041177af351dd94b7313c2\n2eac0a1972c4065513ca26a95b01d37f801b331eb642d3ec39e178743b79a94e\n1d690c0e048b8dff5fc5fb7a594c790465a6ac819fc0d728bd07103e68aae78f\n1b013e7f8bbf0d595ad91d2c22179693518fb9e38f70b10d3617f0558a499157\n9da81bce9f67f33e98fa026146374a83042a43e1ece9ab51e23ed7224b09d7dd\n54ab79b3891e1e8c32eddaf1272bfff6b62502b520738d0d3a81d4bd5ff92712\n70130ff041eddb608a98926b8cfe655a5897469dfb7b7a9edac1a8da1f280224\nc1324adae3a9fed3f93babeabe802029c196c5258bf852780ad2286bf020ba5c\n6135b39a2b7f5769bbc5f78b6300e96644537435b72d21cac9cf04d797851b23\n9dfecaa0f7052f3e319d23b63204907bdc42b84621165b55a635dde4438c72c0\n17bcc98ff25fcd612c254c41769564f4e4d7c81aa2b85c96225ff7aa6988142d\n95897d4ccfde315c7e8c078f8f53a5a2fdaffadb4a6ea734a431a7b5f9f8a7d6\nabf75156bf4d31674f2fdd98692aab772c2b17d71f08b584b0e56f3c670b5cc1\n8af6cbde831498077839a59b59996dabc1b2c7efc4fd9dff0a16cdd33c720fee\nf82dbd587c2e29b51282f7909aa5ce4b0fce63028ccb4e92158e77cc5e0661e7\n1a8e619b362eebf31e56eb350c25ed503b00bade176c52068c8b43251932e974\nf0f30f4875f9bda936de956c973585f16e09a24d8ce0540cfba47f0f970b5159\n4d5782c4b1a172e76a09a99442b1b24360d26e4ca0127c51401322ff32680079\n9f8319a4fb82aad8bdd2aa312397b6b04704d4aca0bc7e438f7839b72b02ab8d\nf775ca3125f1873af8eaf10a7dd92089f1b3b3d6f61d7a02bd1307e99ab63efd\n4b54716b6204f3268bfdb7d4bcf8c4c6fd630276a7aabb23007ba1929f0c959e\nbefbc36cb56bab5fcacd1ddf1700f3980646774e24a45a7fb5b37427a0dde532\nb6c1d2d6bc67825ecfc674b9a3339f89aa399e6cb0efa2f452c7f37713f7906d\n4c8bda7b8053dd2ed43bee01aa0f5f67a2d5394d55eb7b8a8aea50a44c046475\n531614d9001ffce90f24217a99e10f07e5ba404afb180b7deef3ebdd055964b0\nabd3e68c1cc67cf07989bd1dc06282272462c2754bdf1a244e6cea7d8ecd77d2\nf5a03ecd04eaff1d64fda247293c033aaf042710ccb50a4cf1c16ae730b833ac\n0443ebdbc2f9fd6e514b57d10e3a25cc60bb6c1518bc299ab3e499dbe17035e1\n514a029173d5c3dcb9c70681871ac70d620971f334cef0356bbacd271bb44ecb\n468186c12c74db5dbe37357b5996e0f38fb94af7efdf90d1f1c05f2ab893c0e1\n2ea1dbe5a05e6bcbb4c3689263aba65821c89a6798fbe66bc04fe5f8d44fd458\n2fbebd1cbc563f4bd536a58a136e25b50daae849956154c0889d279ba913e40a\n03a01d16aba68e84ea94a44e664f7bdd46b9f547685e28e1fe8a8d803f5390c1\n70fa927609ca453553e2903e9daefac8c9bd5c1acde9652ca52824b1be7b5b43\n4a5555876db1e0b3c340aedfcc41119fb92653ddb0f3b61d5ab6615fcda3e258\n62561e0429d503ba0992aac7d5f39702b46d5969177c31f9c6a8c57616190d4b\n64348f6b66f15ce9e8239729d62483ccd040b7eeacbf93236411a10c21712d97\nd456c848e0b0c21c2245215e6e071a7473c23b5a69530f40e223973ae24a44ad\n7ace0e9493782d7a4da33f227bbf6e0a378aefe47cb08af18a2df146029be1e9\ned455709394c4ea21dd36425673f09816563eb6effae29e999d5e9d61997a833\n9edb1ca3d217fc991a246dbe061d4f0de8f4dc66a2d9c708045db737a80acc4a\nf5d075199e38867782095663750b26dfb8222eeb9b1fcec6452c8fef89de7839\ne7e1bdd9c546dbb15bf3e36e4cf9fff5b38c0f65e2e0a419354338cf25f49522\n4f497edbf74c11581239671acd0648e40900e58fd609b234082792f48d83ad1b\n8b0e5ef1a675ba8344f3aff0d64cf00e34cff3cbbf8170533d1ed0c65fca4906\nc2ce5ef1e68f9b99c47cf94d7950e485b43bc0032dabb2bd398527962124fd1b\n7108aede8db6a43ad6685309ff8387cd5b55cb6a6c09472a2e1db82786e626f7\nc32d87c2066bc79f037786df08cc344434af721507b799f48b771f0c3c82dd69\n9cc56d082dfb9bf31f3af2f13155f276f6b0257d326bf50a63e2f332a456b503\n254229536bb34eff299fb886d1c2192e5781d33a846b8a0c5a33a0aae00bb2e8\nec6b2cf9ceeda9e14859890c3bf06d6c3ab156eb1821baab15198589c487cd90\nbbed036c716fd876d57c6ee5e518ab1f36f6d446b844234683390e8f4e1a05b0\n2756b1eb9b82b7afdcec323ccec6e6d823f6138d0e15c0a5725ca0e42a1ef934\n5380656abd59348c9a071a9b4e6f70cdedcbf8d2c773bb8548ba1de4429a9ee4\n7ae8cccff4ad0ec81c9d458630d8e1e938fa8c567ff75e50ba8e9c6c39fe4775\n319b7acae470c2e160113be66d34de1d631a317f6af5a35062df88f094ef2032\n698419fecb803ee9bae42579fda2e2aa9701531b7db29f702243582a3e9a6982\n504eda3bcf255732b66745f9402ca50f6bd5643b6dd0f20379ac93e992844f7e\ndbb4da38cf872a4a19f1037c505243337f9e6647777752c81ddb9ae20b20ee3f\nc128c35f8d63187a5684a78ee257ed479b6d3c205ec545024cf4e9d2f1a811ed\nefd3395207d27366945d5822720b9657f0da05141c437c98fdb3516590faf723\n4b460e3ac4610bf23fbd27acb53c9370e0a5a20bccd0a1f657d3c4bd89427c62\n93f44a33e09c8bcdfc8c177a92f815c0119ff18ddce5c53905a3bf1eb111aa24\nd365d5999b781f2e0cc443c883e5c9277662a28b12346d95add63fa229282e3a\n23a3e9f1ca800cf79b858dd86e5e8500ab56a5d04e3081d96d632f10df64e56f\nc0b967276866a2d31e8a250cb80995b205642d70d6b81c5ae8576ade657c741a\na7624892474b558148ad632ef18d68af73ec4b978dc703b4a95ad30c7512b77d\n6a38b0c8dcec1ebf57af5e0c8b29b89f0ba0af78152be2b1fe2ec744d0d71834\n3364f85c1b6c6a4d6607905f0fbd91f5cbc59d78e5fe5913b4af0bf6a18b4648\ne370b03e53e9666ccccb44c39eb520b3a393e32f5896353392715c566de206ec\n65643daa0942bd64d175aa9b13ab442be8ebe3de19aee44bf9cc7e40fd54659d\nd3ee90ec5e77f3d673fdea96fdeaba96f3ce15775b1033ebbc29402c2a8c3ca7\n0334d73b401b575299214168b3a478ae560ba4c3218d239278df200d2f6f5efd\nbaae6eeb627b4bf95339b0f2e004473153018a5030dc91269ae60de8e5dcdb87\nd7408d89fceb3f1067add34e2ffa4903aeab3154f38e614e520ab7e27720762e\n56c441dc0bf7d271d4bc35f82fa472c99241f2dbdea6f42efa2965074eb438b9\n9c8c0002b34391eabaf0fa0f48b0d1da69296feaf28ec1891a0b13e1227a038d\nd61f884250bf41af7ecf5d687977f321d8ecd7d9803e9396c1f4c67d6453d578\nca16781367e1ad396e3faf6205b7c3cd1cd6d49179ec9c39f88298ed7051c59d\nfc11fe71ab0b3e071bfc132f0e9d392198fc09f0bf2f9dc10211298691199a1c\ne07c5385dd3a5671617bc3847134af0f9c499abf1543c48b051228b66b325a12\n29cf91e5747cbbd67388b0588f1d46c5b2ac4c4bc70f591516b13caa783ec5e6\nef25edaf9d7392fb630e51fdd353c6dbbcd37a0e89d07b50db52722714f82902\ne9171dcea8825d15901ec32cfb1d62c67ed6d0d08d7f5c821dc8539d06dacb9b\n76fbe55939f5b6eb74677cd7641c623ea47a6d7bb8761563a04838375e1757b7\ne827c23b02c243e49c7e7fd805b6c844480f299527848939eb998a03bafbc0f3\n88549c9f07289b26c2d37be0dbdd3b7fabde86645790468c44d931ea2e0a6bca\n3879e2dd2b90bd67e10fe5ce55d9fa286352a1bc165420c9f4c974331e28b2e4\n81599529152453818ba4b78f3172aa7c8e53d805a7d9273ce8e15209d03e2560\n5921dab1f3048ac28d24846b0fdfbad7734888b5c00fb7db59678eb48a73620b\n191d62bb11b74cca3f41b56f73307b43549771a01ae497067ebb45b077b6b1f7\n79ae8c5b9df4c2a562e6192c20bf51d0e17731738c526b847fe5e8f1a260f963\nbaca74b4dc11aefdde4e916e7f2c298094aa0e657f61807e5bc3e09576e182c6\n4f861cc3c48157ea7d276a6092cd4e1861c208141245da61bab3f10544398176\n78bfb0c6bbf10e818649ba1c735be3337d27c7440d8e2e67fe5b9577b5240b45\ne31ae394549a419abea548130cad3d978a6959ac4c921acb321d2cbd71076d84\n91fa113f6bccc3a68ff3f01a9d3b901a8dea1d9d3bf464bd9d6afe82efd9a61c\n1bbc83fe71ff0169147ee8bce5720ef34c87b9ddd0919a32660c0a895cb78e25\n5ab066550e18e080da24286d74e549d463b36226891589bcf820e37f641e36d8\n990b2b3047db62b8275144651da91f77422fad6e20fc64dd9ec20d76d2bb5d63\n8bbf6561ddf5bc5da5f9e3b95bcbc298f1ce3482f4f5caf9e7b69019e932d062\nb574892c8956c04e27154232e8de101bbcb5e1dc95107d50c87a54d8c08f7080\na344936fde36fb7c6d2c78d8b0c508ac9d12ae0432463d990e1d2ed99fb109ea\nb2689b76377735af4f7692c65c70adab547c451f36632172e6132b1c439d5130\n0dc22f872aadec5620a4ccbd39cea9189e52ee7679ba2c34275e80acb7fca1bc\nd587441e8fcadc9daa5d5760155134a71bdd5f46cdf1d170eb267d0c4c24a0fc\na25053b8ee96f3ce18947f7545095a8e433f87de2749f5819afe661ccbad593d\na1a64273ebf4ac8f0ce768ea5a5860503d60ff8854e254f9e8734e8f5237a681\nb00e11783098dda2dd845e8ccb8e83447a42ada67f1373702f54875b988557af\n5828be45e9241a313053258609ecb3ed4213faef26c5fc806ae24406e5a26329\n63ee3a58428ea2ea140f2a164b268b02f54b2824f402eafed5050fed71744253\n3699c1bfb1e69c4a873839b4c02d6223a9d143eaeed0d3bb8d0ff90b3d4eab3c\n72e58287584e6802eee8ca3408a6c80e43b94302ad59286eab768facb19823e8\ndac4580194b97ecdb9d5b9f693276b01dea7eb1b2834070618998a15193e0af4\n5a310ce8d8c59a453ab64a9e470d4c0bd2dae51f753e407b49e50df65039a9bc\n966e641bae1c535f0345d4bb533e1079cf9e513ea72522d168124187d55d7f01\nfdef1a53fe1e4aad16bd2cbb42c961c1a61070a6da932311129af9cc5e5cb5ac\nbf69abb472fc144a76c44002dc437884e2270b21c1a650d2b70955dbc2b62c78\ne0c3ad81cdf119e76fe5540eac22da4417b9ff2cb876886e85e2848773fedb68\n739165ae4111bd7b58c3adb86f6a6f00e960f96109a5983b8ed433da8507b440\n2adabfccd145ac74b9485c7ec9e5212e7c4d37db59a90a68e7577a8a825a0e4b\n615c281a218f43180466ea3c25b164747f36b203c3a80b6eb26129a16735b00a\n049f2b543f85b6b6ff54352355647e76cde28eccd09a55221ad9b57eafe5aa20\n30122f630a712ef443babcac57f142b0dce30df2ede17351494e9ae8d0143dfc\n16f70fa7c11c7af558ac7de807f25d157ae5337be8d725aac876310e7b3bdd4b\nf86fc1b504c71a94653d66cb05c533fe665b4a551495b4fd6b0cb23a909189bc\nbb85f5f5d6980e0bb50abc54067d9b1cf08d38618aeaf7c7ebae7d16f99fc397\n71c190207fa19b457789498ce47e4930a755ced4083f21f61fb10aaafc0a9f55\n3b92036687a1515cf59c7a0b77e29c6963909824a2469889c55afaa184075740\ndeb99f0e9497ede395a90b611a753f9e6f370503ba419c02e40d34fedd443bfd\n51b6e66b73e4f84b670666738ae8a6c19bae685c9482f697baa994446335c405\n7963c86a991077462c3b92c8a019a642fa034dcb01282b31037a615a53f5ab03\n095021bb796a9415367cf972e9e26fe339aee6fcbbe03099c5425715fefc55d7\n93a92f5339e84182241e9c43a6c0d0c5437216a180ee0d0141d1d86d5cee3c4b\ne64360144cd4ed78a88fa504aadebbdf7a5fadc4883a080caa3e07967f3aedbf\ne1c74b080d77999e57e6b8dd15f9e2a0a9b7e71c0f8269808470be73f75ea80a\na942d2f85a5a9696e2ae026823eef06abc4e0b2a2eaf6fb4f8089d178b8cd451\nf6b4418f979bda95cb05ba04ad93af56161f4abc6c2cab85113b610faad49c09\n264c6224b5b7e67f7ea32722ae612bf65bc9ffc968408359f7d6cd6c336111f8\nbb9b5ad9da24110dcec5f53d5f7da64af247cc734924ebd6656e6ba6c729bc2f\n2fa1946e18c2f3a72de7fb6be038d89dd4e2a7d49c5a1a20705a9b75de20cbbd\nae5fb5197fc51e087c1697ef49add6f6cb3f0ee32a0a3706699d61f7a6f590fc\nf07d10d799e420f97b256802be061b3df4ae10207b9af189edd53839a16d1536\ndd80db57ba1747959e5e43e03bce5a095346af5d8793c4ac498b51ca74665549\n8a668ad5190ebeca1945cc459e6cccb4de74a6a5060de3180b3314ce64e24fc5\n84f7bbc090d2092dc52e1bad04359a06552e3fe2bcb84ad343019b5d2ec92218\nf35705bbf651388a3f1acd43bf99e3772345bf8cc5e4277fe280ae74cdf2858e\nd8c1e8c2a6b367eec2d4c729169503fa33a0c02696e94f1db57031475f039c9d\n4988eb6a0615a6e4c367d680fedffd5a88f27640f15562eef0b474dc8439a107\n2ac151a86c8f88f6a8cddb2f66e771cb28ef4fc5f3f887318709afe060e30b35\nff818ada4939f0106e58b5026e9740a32ebf5b430a1bd035a7d720fa474e17dd\na0d48723c722b11fc87069fbb6389080fdef2f0789411bcf4717e911c6091899\n998af6d3374850930b49ef5302a5712fa655a0c530ec885aa823c53522fea326\n747f5964b35c642df805c054e84fe8e3cec0ee3aa7b55cae1664a00afc75071a\n3b965416a81eedab12a70f8454bd2ba7e641eb02d33e3efa56a2866be4670514\n464f4e7945e651efe8b484297451c166b550ab5419a7ba71bf2079f35969d620\nef974a7911458c4d6025101d31e830ff9091a349dd2b7e57b364988dba66d85f\ne7438bad5830d2eaab8dd2fe65bf1d2e7899a912a251f78fd435d1e96daf8379\n595ee7590402385dcbbe5b1e1dbdd70954b615d17f33656358823102b5c44e59\n61a233e3148f069938d077398cdddd5648341848158367b9b5fa418af1f4ea9a\n73226d662b395327baff3213feb7cf8fe9e8fa81beb3b9568c07ea243cc028da\ne678f99bdb138f46671fec959519def6d49b55280dd098af3d92d15c78b35ebc\n5b3b8076886fa2f2f33fbb4e3c59cd1d88dd5e033f8d6e1e8dcfb88422dd84f9\n1c14f4493ab16ce2b2c274baedeb6640fa980e15568db8348760dd5225918ad2\na82c5bac1a191990cdbb53a7692d5fe2ee97753ff305a1495f7565f9e112e948\naeffeb0f3d141397f7faa4d435f9d2a6d39cb870c935a73c418a49884e9cf95b\nae30ae0a8788161e6634a9a1c933549f171629db2e5803ebf37469736d0d455c\n515713f83d5fc6a4961110b0e730055e84b2cccf12f3b70bc9132527241d62b4\n1f4e351af1782c55845a2e8625ea2f3522c74bd2ae224e81fbebddb66248e7e1\nb0eb8fe498531d5c57f7c89c680b9ec01e1b17b91e586e09d39008d85659dc7f\ndf10c7f88eb18dc415182a0ebc093f2aa7c61b6275fb117d53ec839ae09f3238\nbe93beb08aa103cb6ac517923d146cba418342e6d2b0126df99042055285522f\n681ca59e31aef9003f984c938a0eee0485bd052c96297cde1d0c2956911a5e4b\neb5e7391177af34d2f013ea6246823240b0285c0100f997796ade58f393aaf32\nd7535416d8e2bd6128a625adac422d980935614b31c4f4283a056ddd18fbf92f\n4b95200f71461476817b3019f736c5e2499652f368df95d84d6c12ae63248a45\n5d751c239283dc6e41848818e0132a21dd356a1a82c5adad78780575ecd79a6d\ne3863a2faa359da6ad4b24404a85c3f3d4b44bbec4815e6cc312f15e3431fbcc\n72688c0d0609fa5562112ab19fa6d0d33db861ebdc2e10d6740fb37e0cf0b19f\n0594c7c21f471a309709c673368614b08b43fe774eb9b3ace8e36a1c84b2b14f\n97db3e955d0b699c73f19f9be0e3134fb93f48d33a13dddf54ad32bcb57137a2\nc88429e319b32876d1c1f731fdcb3bbe66e710b0029ebf11f709363386db9ceb\n51a04209c1df5d72af2af52e8e210f3e61e6b7244de2fa16f5727f5bda340b3f\nd170b7e6d209fcab286ade512e7bd871cc7ef906108ef5354eeeaf15510ca21a\nb49ae21590f1979a8047e27d6fb36f27b54711768d731d9a1088889dd7e807db\n7bef88c2b025f9b102d495f9e648fdf323710e48b3078d454b60facba9d6bb2f\nbfb67bc9113bc8b3e3517e23651826ae49ea58106a6832cb4bf0e2d1e76fbba0\n5a831c03c57b7a08a4e68e489f5cacea1a5cf1b6f7ca803276b8b3e9d4c3f1b0\nba8514790b9a6cb817ec519da6fd008cc5e218a4c1efb070128fd86413967a61\n6da594e4e51d53df267660b88114d834406d4c6421ced9019bafd1363e250719\ne25bb47114a347144e9e5eceee02547086409f0b2a7770a2e7583234c5126a14\nf48ccc2a2c93ca07a61acafb14171473c210194a7fa23d1ba79e58e5caf3f907\n19e8ca3bd878d6733e6d1fc9c81c790f6c40df4f60c7bb3358e6a8529435176a\nc111b9e8b942866bf072093d9245dc74f153835cc0b944e24bc4bfc9b097c1a0\n3337a61c255fa78b88f2cb21d9390663bcda7e4630fde2af54f869e0923312fb\n6754efad81defa6dbeda821f606d7a3d6394a214389fb9c0c6444b95ada21660\na3fccc3e3bc7aafa87aeb5efed1e0dcfff45e7fcb050f773bf757870ade8b058\nb29ef7b416bb6cbb58551e094f6df43dd5be9c297a328f7f45b97c0fa08e9ce3\n3d8010f4fb0d93aa698bb117839e51003616c63b7b722ae3e610cc10e3f750cd\na82ac7bde07a6e40ad6f5e85992f7b4f2aef98ca130adbdba0e4a35cdbcb5dd8\n2425c4e326e1a8ff4afa85ed6f6bb72dfc693b8a2f660afd8dbc430234f675a9\n83d2602c4b7555adfda22180ea596710cbeec7d0870a3f51c8dfff4b670a4370\nbee51ea340d7c9558a6beccf5dc0d96469fbc6e7484b0e71ec6754f00561fc23\n9ccbf9a2fa7499f891656c0b5c79136743973bfaf83473baab00f070c4b401d3\nd756e0cf99eb5adce5da8f7fa61b0b5b9b96c1f56ee7c5b349ff71fb4a689042\na92a524bb164bc6b7c2e3e8c7e5c55f90cf636db11edef43044afa0ee88c3057\n0301fa4384ac552182a2188543b8c9c61bb246ee40a98a186f5ccfeb51509826\nc9a6bc1d0428360491be30698d67532446abf86620af529097601459187321c0\n905f2128dd06bb0beb2455e58a920d49a50d91e2f3c5cde339d497fc864ed85f\n4c7cff48795c44966ec236bb7067d3e639b4e988df397b3da60979c4872142f8\nda61a08f104f9a7970decec9f5dca99b56755615f091039d09ec9e5e419c3b6f\n87551de0751f550489190b8e2679b8d6170a7a58ab017b5f671dd0610863453c\n086d3c7b085a7d7a84d6bee4ffe9b923b638396c2e76bbf621b667d6c728089c\n40379af1f0658c7b0d1904534f244a9de6feab40ee214487754083d08ab28e7e\nc9fc8b30d5503e72cd763b703079ff00d7d1d6d47b122b8b7d51c5e5e70ab529\n56c02c44df0c227861f6548b736dad55055f5a45993418edf78b255780e40959\nf5b6cf76b34be9518738788e2169d2f9a6cf4494b3d3088bc453fe36d03d615f\n88f21a333424ca8a8be607a0cc9f605e29a38b2e272f6475e96fa4414dc4bfc1\n098a1114939e7cfa127311df21cf8c1f0205cbda9c6d7eaa6c8ae2124f75bc0c\n1ceac501126f03694b235d0bb992ccb28c6d8ac62653370b1b2e05e2b959f6b6\n2b91bac6e4cced6a3010630b32fd10a461eec219cddbb6bd4e59829b2a5e8729\n33799a41e25cc0461151421fc1b9cc710aafabd299a540a13b79a0b26a2607ae\ncb385914dea5ce340a8f5ec1d0d48d567fd0e9bb418f199e0b48d3b98ace00e8\ne5a18f0628a5ea1943a7a1d25a12c06e9295d149028f06c1cffef016549228a1\na7f6a277745fe5833162d11f25518b7c90f7c3ed8f48e9e4c03f4317272193e8\nf29d3e1b29143b6c81ab73689efd5ca0ceb588bbe8b4dc37c1b0511d56f3e94e\n839fb09514300bbb360839fe1a9d7fc42a7120015fbd5e649886ce079565e087\n2209ef88bc23220c94ea8dd4faeeb1f8ebd2b445a9b385f1195cd5350292f4f8\n49c2c5e51869a9ba79a8be224decad84615cf5a57b5341e9165c772fa1f6e6bc\n7b43e0d677e3da80dcac64a99662cad2d814d306516cf6198282e8b29f10b2ca\n4eca2ce598c3f5d278b522b1afd31531277e9738f59d65fadb73afeec3f503d1\n10ff4d0fb56d41e1f19806512b4fa763c82d0776381e73356df6016f77a6d420\na3f9d20cc636fd05d18618608c04a42cbea8c427fe949618678014513ffaf692\nec1f0ad07a18c22bfec4cecee3fb03d5c769221d8b81dd0eac9c358b60a12b8e\n956594fbf42eff07765766b0699a6b0809cc5698b0d8f5e84e572c67971d780f\nbf8f6c47671cb8e6237fc97809679460db5f56029aec8a9cb8e1687e396e21b8\nf4be922a6dff8c304c88f874471f141a6d2f1f4433e7215e9b9b9d9e69bfdbd2\n669bb7c4cc74c57a18dc4684a0bde8a533d5fb362d5829bec471bf3c5e4e501e\nca0ba7e59fca48afb22f7c5e032a85c310e067a304dbf8b907a4b6ffbae41343\n13c222bc8e3f06cccd637534e9a2d7111fcbeb93cb409bd5153df47d55501f09\n4cb68921e9b0c3e5b896b711cd63805f14396b01ceb0c4f44b1c3b91032a743c\n169fb76dd413022a3cede0b76459c80fc0cbbc92e93295d710e0434d1dd5a11e\nfa141bdc49ff0437a043e80ac0f8b97f8b42a30f034ca4c4981de2af5d37b945\n483f424f670cd538e39467cbb0bd2c017c91a79df4e75a4decc69aa2cea81a80\na4d60816ff3db12f131e4ec1c5f6758ea43bdf51e627542e48c7822de7201596\nf88f85ed853538986b02051308c4d15db9d439ed9dfc8b57d320b512c4e19719\n23ec398ece1ac4d67fa08d723072365fee15693f552a6022147e64854c80ee6e\n2bca2879e42cdd7103e83af3b815f31c622f0e959ed9f6e9653690db01dd1944\nc50c65902655c2158a74b7bbcb856924bb47056d06e6c6d3ccac847bdd2daa9e\na080e6bced3f45129b258d0103fcc61c8671d3f4297a942d5889738fc0c5b9e9\n770e01e66a90d20043207dd9d1d32d59933accd1b92f36f1401a8efeeaab08e1\ne0a1c1652ef46fb45c78a331673a5ffa2215357ff31493e896a6fabafbfde68c\n2fa968080b6ce48b8768f8abf9e9e0311a8725dc91fa78c9255e6469de9f71b8\nb88254d0099466575b797b6b0ca3545dfaec1a4737fff5b10384b426b9dd2a1c\n0c7bdcc13c5d3d33335b8e175f5a5ee4a9545f9842a1b202eddbc4d370d03385\n00a3a68d775eed0f0734aaf625f8ff8aad07cf06587a0da8bc372a1d74b6fe6d\n4da74de83428f0f921d1df958c0d9678651a3fd9fa2b01cd4213dff86d6e1087\n56ee8c5f6ce36ef570c886a8ecf12906184a6ec01942d1441706cc2e0f2b3b04\n663cf26eefb02d7135b6bf08b45af4c739a518bfd5936fa3be24d5f925ffe033\n1c1423c238fac9dc9d109b6c0c552e69c2cbcb63676b6719a53bb1eee69f6c50\neb0a4af9f72a78593a980a509893a7466f88786c75adb5dd58202b9f4d84c2c5\n6ef4f7b51d3e80f5f523913cfab5cb1d66969843d977ed8dbd985777ecd6627c\n5965b92b66a29078f604cb4e2f8aa35c7c6d3e74a7136fdd60f1edad2095dcf8\n66cf8027bbee7a0a7e1b481be27186ff55e06e925613069cd042a7a054364194\ndedc335b28764371159ebc0e692631aaa6d2cd5c2056ed4b635d1ce0ad07dbbf\nc7ea953d680e2edc4b8574ef6b564505e6bab472187f074d8af30277e4c7607e\n358add560d692e16540e1a82793212ef5665ee181d9de6fb9827ab6e6433f6ca\nfb5a3d61fc7235d77fda86699465b6f48ca04aa9d4a6312af64538c666bdae2f\ned90552e0f29c4f92538680f0cc83baee4d2ba3db1e7bbc25d9ee1fc1245c383\n1251c5c590a5e9a5b163d6f32b39a085a1db1331914022635369237a0873cec8\nbe1a1ae8b586a79a914b526c39568063abe512a953842f73e026fc495fb54022\ne992ad981d6cbbab15d7c3a0217567eb1ce3ea2fab493545779dfd28ebe447ed\n4bb9282134a71bd8b9b544a0556713dcd53ff30680d4189424769a38f50199c9\n40963243aaf3968b8a847047eedd2b4561b0992bbba2357a60e8ec791d69e3dd\n45c2d42bd71710b3bfd0a237c056c0e9131c83cdb4641585e993f0d5bf31c638\n571fb036134dcbdb76cb75a47bef8737896e98182a0248dfbb1fa277d91bcad1\n81f84c195a5333be5f1b487c9aaab979b2137d92ae6c154927b98c58074ef0b3\na05134271fb5e5b64069428bdfbc978d27348362fbd7f59b2808d39854c8a428\nafecf18e57e41d0a560376addf2dda48e5baacadb22db19c05c4242e5861ec66\n95c7986bd6eb50107a932126b0bbc0947756bc4e9c6eba65748b49372a2d314a\ndae054a75fe08472e6c52143aea3ed5c8ecde25a04a3ae67b44d2075563e3571\na135a85e2476c7e247d3d88599db975732808e6290cb9abdc8603c00ac9b3fd2\nc301074b1fe24d1eea871b53df0ec6b7a35235892572069ad74014849e3ce2a8\n65be37d16bc8f40568e210c6ae17488a7c3407e9d51a2f6b47b588df46f7fee9\nf5bacec5097b3b510012de233e188c8e7881cc588f9e5a0fc393af258106ce22\n4e0a5b64994e138cdfb80f5eed656ce0a6396ca7c34a0b20c3a363811c9288af\nf5cfe49e3e609a100bef4517e4db29bdc6d2760a2d53664db7d69625ece02abb\n7ea7cdde7bb4a06a8ce4ac80845db5bc47bcfab212a5047a4af6fa720d19559b\n60a4f0cd777f4abc0f6c82f58722418729b9fbfb3a7deb2d71501448370e4c52\na8760b15f4ba02151462880cc71a4815647347cfe964d906e7736cafc95c19aa\ne4423091ee39af6822bc9d5a25ffc21ec5351598a9bb79a9877c4dfa18bf47ab\nc45d3900fb09767c00daccf4acb15e0ca920d8f1c33d2197d29e3b2d663fe40f\ne504610a1c109a6c803faa220d7efd983bc59e32cb063b5ba2d81050a03213f6\n9899171ca3c2f03f841fccc328d247d9e081f300b65522d75e18c07c6d55ee35\nbe7d1d93580a8a5776a607d7b682c088ecd3b22e4b11feca0f8dd32eacbd1937\n984bcb06bd906139dd19132ef0be0fc8d6d63cefe29cf8466ad4bddab6451fac\nb87a956c0cb0864aac4df8b378a2b1bcc07e8092c84d97e27ca5fc1f4aec5a7c\n331086227f2723971a6725c22034e194c6547f97608dd2fe532723b1ea90276d\n3cd538de9b07166b8367dffea73b7be63a649404d1f088d2f3092f73b61dd9e6\n0ed470a69dcadcd5731d7f829f0923b9ed0932cfd508b4abac5946b1430c081d\ne520822cbd5c06769bfaecd4c758316dd00769c4cf685b783b929910304ad037\ne407627e76a23c54faa03900f3fe3b8be4a276a1d2e89b9a5b0a23f5b88697b8\nea5042bead89d5f0f9ca9ad5853d8be2f81fa92591a82834d07342b634b8c61e\neb75200651104220a9bb67486ded0e525b7f8650207e4252d0bd202ff114a5ec\n2f9ddcefb11bcfa83958c6ab7d96d6297de1715c0222753472c681fb10473574\n42d4ca82fc491c43480e98ba5cfaa04eff24aaecea5e61c0b957f5a51cccc0ef\n7add55c709059bebd124c784ee739652d57ae8214c310923be62ef00cb1aa16b\nc45516af16f39bd91b5e750f3f2c5bcc226bd394b97eba2ef9579863e4a198c9\nfc2c7bbbd53b0fbf498e3d6b2f88c8375c30737ba7de7b95a101774490710c89\na72599515a552aed7488bf31cedd7408afdcf4bcfa4ee8a29380c1869badca78\ne7433f74a9eb522e253b4432f0248f0a944d28999a694c3880f72acf16196c32\nbeb5501174266d559a0258847a088edf3483fe5b7087ca78bd73a018d162fb4b\n236220f50c94797b15571f7e15a83b681c02fdb733e7fe3d1c301a1b4b28b6ec\n75702ea2f3f90fd33b6fff5bbf30cb1a3039b8a869a82d33d8a6a83324f942ce\n5822485b5f059a795521d17daef0f2294da3a48943eeddd9e22e5712f77a0043\na9e0d3e29f10b19f5f29ff7471e02cf788cbef07539729822f3cd37dfd9febe8\n8310031b1528e0dd1185ead7b1a10c3a69f54ca2272af2d86c332572590a2c82\ndeb80bbf41e089bfa6006f2e2c16b2c38f264b0e4e197f235713a69274fe7e9a\nc36e5ba7d8d00a709b2b02075e88413ff2f742e18c0178794545bfd111de1f14\na5367c393e9499a948d8153f9dd219dea51d6d11e31727bc74026b91f62880d7\necb652519ab09cc44d5ccfcc825b9e0b408a45961fa9e2f562ae07f626fca598\n634b6f6362694144643ce8de08543d7fbc3288642bfb77b6f11d7b36e36835cd\n11a0e946ccb6afaf0829a6838447fdda1cc1aad7f7a17cffe6863e4228cff4bb\na821483c181658d5e2de37f339517b674320d5f3d1e1d9f9101d92330ae7642c\n5ffccce22ecf4eae5a726f166d63e507ff4df128b483d793024cdd3369154932\n3f9dfaa841ef566043baa8e42cfb6c4282ad4851c410bc212c66bd3fa7b82cc9\n13407c5b7923404e1f5a6730e4a89f4a3ccb2f325136eeb974f7979ef4537923\n1d38a1ac0f7afd731058e26be517bf115420537dd9687d023bc3b06fa75c5360\n483af15f248351e9c7cc0d0b00be1ab7d794f75bb257e42740aba38aa7c6b9e5\n331a0f84980917c22ce7ddf588937237771b8ba4eda5fe92d59b5718086e6d29\n0482f9f0135758b74305a64b6fd020578e1b4e67398f735d3b9604e1c6d75b8b\nf2c5c01b83d0845b7fde820766898aa22bd5fa2a17172c2f72ed416fbe93096a\naf54a432e675b1731ad23885d81ecc5ac94369a96af12c54e95e01a1b876b8cb\n1938979ef8eb4100da5c2e522e93ca0bd471f74c8267eb3682273f2f2044f323\ne59c4b7df9d75f769d6d998225eea3eb1331acd1691af7060ed0add8b7277eaa\nadb47c982491fec33655c7ca377d545bd24c02afe547c85c3ada798c9637a64d\n00db51d5719c73b5c919d0e8b33c64cb3ecf9d25c01fc6f09c842577d19eda47\n739ae84cee865ddc412abac6d234ea50075fdcb59219a703dfe084bf8c7d5c05\na73c0d1c9a59a59891b5111cd78ec163fded47ac9152f8eed59dde5ac069eb13\nfdacdf7bbe3496be8de28c649b0b4fbae0355f4e50d7737b1ff07f27a29505a0\nfcee561f475fe6ec40b1210fe107326bdc385417ee5208ddbd3c2af8aa96bb46\n52d585a9f3b032680f158d0b73e380912ec64d3c155f78e5f5112a86f4d1b7bd\n37df5eb4fb309a4d5fbff180e691f86cdc643af34e7b1f572b66a5c98513dbc2\nbde47fd000698f48c6b58330be688e375eda117106318f651fc203e260511262\nb36fddf9289d23c31dfcb94e0216bfc978394851eb0eb2be29839397e6d722f0\n3b7965e63090ca190812db054eb42cdb71de31e1d34ba12af9df9a2635bf5e6c\n9f6c3789a4795c39ea94b96cbd0b3a2550cfba4a4321f26e0bcf41a889cc905d\n54759f5041bd62b9361e618213ce8d003a182c47987c1c7bc0fcef8afe0689a4\n9df8df3d0d2bf78a947c645d8e3035162ed2e888eb24d17574221348fc4ac4bc\nc8cf123a374aa63caa422b4f09a918b3e1679ed9478dffdd23a24731dc86507e\n4d1252f53a99c54d0accb9f9c2973c3157de81fc5676444a97f32d84e0060b40\nf1cbb0aaa97acdcacae0d2bc3e7584c54e1ea8e0af04ce1d0253639267918ca8\na25d90449cc36a4a0fbee9be49ac75ca4ed54d211329568703f5eea3a5efd08f\n0e5a1dec3ce9b355e874786f0db3af929b40cc7e667b96124afd6ac6acb9caef\ncc9965b21e85bef1f56b46328fdd40a273866cee81d49c8ac7e44f5cda6db9c6\nc7b9f2b2548719baa620f3c7c28f1e866afa2d29f7e9a47ad6e0946fbcb32229\ncedb3531ad30d7b6d893c78ca52e6c849aed87eb6f76e1fe81dd7223844bd7ba\n140ac8d8698615c8f10da9c33dbad445fb6da3f9d6eccb3889b82fdd8e191e7e\n1a5a3b21ccedafcffc0bedab572bf0cd3b328d661b289103fa523dc83d89c2e4\n55b6b0065db2c07bdf17a1d252872fd12df1d772e2db444d90acb755c9e05a2f\ne87aeb0fb2565e4eaffa0ec4f684b45ef6070ec34c4b6fac5889de6a2c477153\n52a28455fdf77693064f628eb91cb9cc8b1e548c9f5ad14b32d686ba0b53e50b\n520c982b59057809eb0bbff570435f18e02ff2b2055c48459786dc07709731b8\nf336a128fd42ce2bfca20a35ae08b2f32a9177a3138167e24c753ba197c25f02\n73f6deaa077f58a457e9aa2f02616dbb1c5b4230906be1a031c2d15250aef6a5\nbe03c52a2a97c45db68d8e88a1bd04542d0f3859ce59ef5ef5e817181b1dbf28\na1534ed5903b89a1f9fd1e61dfb406c4e04325c4fd26812f8a3daeff3ba1a473\n287b69d6746ecf06a6429775fdc01f1dd9b05030df9fac25484dc90561cb09b0\ne4f5e44d12e23412bbb4abcd409af48277d52771b94d47835ed9c3522fd1ceff\n9dd869fad76eac27e9883c968a274a8aa8f9c82987b7df6b14fb8686092c6ed0\ndb02e4c3798fd1038c8ea0dd57d87bb57a98f01e06fcf02cc080ae614b345395\ne9b6134db5b227ede1241f0418b5285e7367f6159d79d1e33e5c614affc4cb03\n98e52f8a6e1fb5be3648a0c15eb8ad5b9b113cf9cb139cd232a56445ecee98f8\n9c57ef7f4d46a8f43100e53573a63c58dd9b7ad6b1cbaf87858cd1784391f326\n983bb8edc83944478fda9a0618cdf26db2ff464544c8ab7cf67bf8cb0b734f84\na67d6d988d011b2a96f2828656d49ad7b69958ae65a8cbdaec32d0fa24401fea\n521f627cbbbd741ccbf96f1423270b1e7a45a3d54cc209aa93ed95b5fab1d6c9\n92fa46521439989a9be2e907a3f5aff15bf8d6bab0976370c428bc169263f150\n4e0077be024f738bbe3e3b29fc2ec6ece6c0f074d0534b4df7c959f133b257a7\n69a2c3b5a55b20db9f16ea04710378edecf42b2cb62745a7eaab3635f7056198\n7cd38cd0481f2b4c05340f00296dd9c76b6a769b540c3a3f9dc9aef14697a424\nc865a1dfd24f72edfce5570b9422862fff8e0b0c2f28067ee56143a0fa5771ca\n5623b594a9cdc4c30176381d850916c09bad5df8a1f06cc4a126d4251e3f10f9\n71f7acd0f5d69d85f2c72159b2876603f8e12b4ea8dbc33b83c6853f0660c5cf\nf17b131b71e0aaa276544b7cb9fb4e68142a788ec4d635875584798250ff6c41\n92cf1bca3ecf4e61c3bd3ca4f538d35d2dde5c96358ec7b8e7422e3937c23f6e\n1ece53ae3e46dea01a9771354362cd79b0c38cf01a96aa39090d50fd4267c551\nac8eda79ee3b48ecbd96edcbe51e62972170c023056a98fd22a47bb6d47adefa\n0155030406b1bed8c86f21d14ce87177cc9a409059b71b1ec628560438fa4de5\n395b07111bdd2ebb7819311eae89043011bfbe0e6099bea7b2dd41fb72fdc444\n928713aaa20909beb343c0e4a9b4f50625c045f727c2f0f80b51072d05c0e50d\nce7f1d5db47c5e1b34aa7a294b622f02c656c6a588580e3f3ad8489fdad9d533\n7de5084be37a053b6b689134ec6e3048edff621ead02c477bad059faedde1c24\n524617d2f2f63beb163b9c3d5c6d30516dd439df499280e536ea3b7dc3cea458\na15538426d97f7c73727680815380fa09bdc10ea08ba417399ee336b14a78d6f\ne5bd5e143382bb654b7ba7cad38a5d6228cde2e032ad0ce589a3d5ff6ea40125\na2cac3457cb289f0cd8a509521adbb5ab8bec1b547ac56b8c748c95d1f2ffa99\n8da7a4a73b75e2a61451b2ff161cacc0a86e332e82e008122944ee311ebe9d6c\nbe69cee97ced7a468e1cde07406153f8057261f79a9abc72dba2b98f260bdbf8\n916505e3980ea47c0562522743c778c5d0144d3712fefb3f00f2614e05439e7a\n144a5c987efe49cc1cffd32ba11af0be78cb46e9cad5457f7ae5ac2d3f014d78\n99532b927212fb7447d3d7c00ee076d11dc6e85fdd5272c1b57ca7607ee01322\n8e6a3e3f7e355ea6ede5a29afbba8e8ef6d164cab77f031ac10704d9de3d801d\n1b6f46e86f19b3a2638bf8580336365dcfe729c5c50cbfa2caffde768f3457d9\n43c39aab3d72d3e9a1eb578e5ab84795fa066704fadc69f4a2f5d520e953a323\nd039a4221fd130a20fd99adc6a5d85fbd04887367747ec0e706a57a4e661802b\n981f8a9ec42655fc147ffd853632b1d543c95ad8accae230dd6ed879695e540d\nbdc5ca4007ee887de1e222a2cd2468d131af76e5b65bc1b3b8129fdb34a223c0\ne3bd3e36b8987c53bbe13721a84123b45010bc2fae3428dabdc7027722fcac6a\n9f5c404e484e4e138aeab42f6c3f14f484b0e0b7b71ab35b16167dcd4fc1c16c\nf43fedf12be8d55076188db43b9d51118c9dce37f1a5a646517f835cc345412a\na50b9fe6e9abafb9293af40e5c7026a1885b3b9f8c1781cd5e7d5b78ab080c22\nd90f4b63ec26f080d181c6f78734ffa3841d1c49589542aa237548c36e447d49\nd3bf16b154b60a2be5b109c1c0d93937447a855fa815005dedfd4b974dae0702\n6386dbef992ba10ef2b2257b5d4cac6bc3240255c22ac621e51499865489771d\nee81713decc232d28d140cad1b7451d2c67922935651995023eb218bd1b04368\n731e750cfe38a6e95d0a6b9990f0c384075ba7d0c0377168aa59f26d078865e9\n7e4b0ec2a46a5f910ae06ffc4150fb56b2b12ef2deb837b599c8ab5435f2ef2c\na8a4b73cc3563308ed507ef7d97c094efb3ad015f8f72a60ece2817fa28ad871\n62eb5679ddc98c48aa4424a11004e325863f5aead4dc83d4d486e5c3164250fd\n53f7ccf74fc079b38c0e2d8a1f50b691d128496f44c8f3158d21aa084529de4c\nd79c0b517bfbe8297110cf79818dc53ecad72be6121d975add64210fbefb21fc\n95a751fbdb4e353a8d8b0cb4aa0d744a907a8fba1672d3e0f121568e1db30f50\n9170a2c5b2d87514374dd4f87692ae93d2cc42670c6fc1b64cacd5b15161d3cc\ne14531b6f6b60ad195ec96290839fb3160e6ba6a30460c77dbd9aa873fc993c9\nb3347dad1e6a400c2d5cb952350d6b37cfdd94547a70005b31ef2b5c390245a8\n916fa1c2ab3afe6c9ad9f8ca46b626c2fe78fefb100d1e96ffd896a72092cf00\n012659112651822ec9888b21478f898f3e85ec9c748d8fe396b786a7f145dd6a\n53304121fb6fee88877147d78e5b3f0548820cd7e838ae0ab64a4b401eb47c75\n1a4a40a58c076df2d26cdceedf7c87871f2166f575f23acb231224a13b271c54\ne8171e71545229492dcb9abe0a7fa5c4f033b43327a057c62bbdbc7026963815\n9e33cbe7e7e83f26d07eacd9c02bed7d82d45022e5c1a30844a87214771616e1\n655cbf98b4602f352267c340ebe156ed77474ccc4ed8400b7858f60555eddf12\n63bbbeae47c2b0ba526f9f9ff5231f2ab79aac8035e6107f4ddd98e7dffc0222\n69734772e73ce5d190020595dd04d263b792569f06e0b3262ccfcc0b1f51cd68\n16005ef3aa9799ce762cd95995d929ef834b0adf7c5500f39dd823567610e710\n8bc381a572b77fcedffb45faba957262949836edb2e998ebffaf1966f8036667\n4ac02d09eeda5cac59c019017a327f3f3e5a0880b16f3a1a3384d09b23adbb5c\n850a420085da3ff503d74ab9d5399671124830d7cb4dbf2a1212fdb66bca0f7e\n06a96205639193396aeff36045e910b119d9d0e69836063b88f67c9da2188142\n8731f406a1939569bc96cfa1498f3fe51315bc01b529cd2808b9893f62ac637d\ne09931efb564dc0c8061b4c93679b49efda6eb21cf82fd030d1cb4645b16ea77\ned213ee98d0d011b6d67b510db7d9509cdb33bdd725fe216c527ab73947e7137\nab627c4e6bf22127d196a9654997c7b1195510d92f0d25ec599d16836afe744a\nd926d40735e6e7a8a151331c8709be8ee5005cb2b2dd8d647e8e02c3b315f331\n1942264d7e04f458090bbf233406a13ce7c150651789dca683bf4d9b5bb848e6\na6b2b6c19e185e21b3d60227b049f2fc7e793f711b253872322de690e515609b\na2e163fd44dbd7fa68271ebca17b70402f9c62c3f31ac5d7e6304cd5ac3ca032\nab4641b942b5923af234b1c5be70ad9ba89c9d70ce0fab2265561d47fd4387de\n7cd096bcde91bfe3d62144368cead36a1445c641099ec68c90e82d992a3a2b3d\n8443b1e0953cece57b9e070468e85a1367673087fb39aa260a0717863d5f898a\n705d50c196b81b5292ed966d44fb414df7083ada1169ac5dd9c18a89ffe37c2b\n903b8586add36bb456ac0323db888ac258bcce04dbaf6b7d1ca3c8292cb7cc48\n4832b698d630ae5a55b8f6d5bad1bac5c5dffa667c21932edc5e222ce2e0f9f0\nadcc482f1ad9d61dfa3f8a651d50f6d0d4b444ef46cc4fb2e781aa72b13a9431\n941084e99e0d9f0124d8b236a54da0ee51dd8421970d5a25156b620b08c0ebe6\na752eea6b4b02581bc602ceb93ecc3e7f67319de90e6add657f25e10336c7966\ne7534a0b70f2f72e721619d48d744e3ce9fe6c8bb0cdc061f45c7a3d60d2f268\n7b245741dc56595764df816de17f42eea084fa22c1fd794275866f3de3f80bc8\nb20cb6b81dbd2ed362c492309aa82d3346e69ba39721a74c2bd2052d694eb6fa\n1a6fb067ff873d95457342c5c957850840a6934f0aced82cb5933eb85347c43f\n1d0db6713c7a1005a157bbbfe10956adadbb5fbdb7751655928e9e31ce953de8\nf8ac377e2e84f494ca2928fa5a1edb438ed464999c49881e60b8acb9e09f3b68\ncc06a3e9a63603be7f3e7a8383fee59a4922518dd1520a4c276f1009b4079d5f\n37c1cbed317f37fb1910b6eda695e7edcbd6c0df9308c943486b68c6755e8a70\n4a54c75cddeb6cd99031be4090c229272febc9b12ec098429925321153c858c8\n455595607dab9d8a833f196685c9ea34aaf16bffe9502b79be2fcdabbd6b604d\n942e3203e2aa9731a13a2e9e13df408d24d4a5463b2f12771b55c0264b8c3b69\ncfa68ef306e21cf9b891c9c85044174ba48708dbab91448e8afe777e63b8be7c\n8ed1c79ee20edf2eb1506aa4edf7bf380e2f38d70d9668bd0ac88d0826985591\n049a6ce668611f5b8b3d42f5ede43cf523171f6e07b78e13ce0567d9345c01b9\n0c6da55db6816f094ebe2f825ce02dcbec31ba9477932e4ea07dccd65ee0e362\n9cb0722776845368c425d3808002e0106014bf9441ab68a574666ca0bf72fcd9\n11d83fb9f5d76112a62a3318139357c2b2ae970689d0edebd317bd9e5c090491\nc06e19450c10d62adca51882d5e36660f36c033dcc6cb21de066bd5c7c1829ef\n8f411c25de4a204ac0d8739fdb017c6a32d583f0e5e8c18e754288b180bb882d\ncd899be46c0305e0cad550d2a21e4acbce7c894db55a378835efe58869681489\ne8bc0eb09dbf2b6cbba9cded925ee0f275d5dfbd58e74028124d7f0d2f436ac1\nc17c37c2ee56ddac8d02aaef9f28b64d9227f76c64fe0a6a9f7997648b73822a\n7b87c827da2a9e4c5ff97ca0790751c3626e91e0391a3894e4231e0355bb65f7\nfb217735eb3abe32f7bbdd503fda9cae0d98e778e5c984b58fadb53d612bdbf9\n20065a02113d039e8e74dad0d80e70df8892dad2dc0c80be5a11c81bc58d4c7c\n0aaa74bd1c2406167b632d2f5a1c71307ac632055bca86d1ef5ea68af236b777\ndb378b7dfa7e6b8e778d1008d8ceda07966c9357463214dddd2d8356dc8616cd\nbb32e7f502c104095a8c9723f087172e31761e3f0aabd40a2dbdafccadc9b60d\n48da520ead359e0f4ba9677e4ddd8399483ee5ef0b1e98049cc83982360007bf\n3ade7e49079c8cf14a33e63d7887ee7dce4f0686b73fbf107debda634c6394e7\n938e97fb624e74a73304fb8b40df9482a5c81ba2ba1bd78370a46f1c897775e0\n8a3522d88e56d136a8edaa69bafe99426e27e913c87d792c1acfd1f79ee44035\n4326dbe7ce6027db3615058608fd5bb71425bf78fa9f46b9e7d35a484390ed7f\n22f85d77a2e612e3c33d18087a437b2565fe15ada3921547c17b16ed3ce8c8cb\n68b292bed78242bd17cc9eec27bdccf8107ae6089630660832a121912862e3c8\n8fe2d8390e57acec29caff3fa8b0ca73a90bc00be646f68384617666e2dbb108\nf2c28db3b42e2b66748f6731fb137b4e4735c4836e048e1c36b1eb5a76c21718\n3ddac5d9a88413db7843b840d4f6c0ff6e10c6b5b2742f1f1e00f0e8a472b916\na111416b218ce9677ab2edba61fbeded37f4d009eccc3fbbd5f48221f373a01a\n2f833e6745fb42114b8e449d09ab449886b6afb314c86d43b756d42da291e3ad\n6d1298a83035333b698ce0d3cc36c77d43f07c30134df21aef5cb7024cd6e452\n00bc9c2e30e66c89228c5e7d75ebc947bf275f7cf58f8a9c0e081c83c57e4faf\ned055817b3386287f3f55c72c2c17bae66b65d2dc5678c58e515320ed5dc779f\nc397797479af0cf73b85689e86bbf917768c722a767558a4c5fbfab268be7cda\n872d5d2156287f4f31eb62d86eb4611f2ff227c51d512b57cf0ba46592f0bf0a\n10864b60058b134e99760539733c1871b126664309d89d382d131301739e1f95\nebd91970cb83933406038d2e3af823a769c4f8c975252e48f1b3b2c024906fbe\n88850af2af86a055794fa056baeb92a2bacd28420d8bb66e557bf77390ee5b33\nd37ac189cde46af1d7007b25eb23c2f119b814542bb0442fc1245775c7547646\nd2f154abc44351e238b0e5f8a45bd338a06d11a98aa5d63d43310057df9b945e\n4fe8e4dda55aed79aaf5f40029ecb046b2aab0f3fd36785c77ccfd8c844a265a\nc000a6a6b6499be3dab5012dca48caceba5c78442ca44ff88b422af7176b1d30\n5d187175b8c6081450df333f048c10783582c8173409d09d4931cb84f69b8ae3\nddfa648e1c7daeb288280de69be37de65f1d99ed6c61551a3cb382144855d7ee\nff39ff890551b0a8ff2966a2bdc0cc6c4932050ceb2461cb97ce67f419faacee\nac1ddd3b9d76267b06d68b72010801919e3fab0e1ab487e67584cddfdbbf5fe9\n8015c0c3bb9495d31db6272ff80d3cddd64b7ac9f3d7ceae6f26d93410da428e\n48add0c427b7054fac4d8d4f0236212e7c021192c4d3971f834487914c4507db\n5c7dd612d2359ebc1d43d41be072c58c171d2442f6ce4edce0f66908b4ec6aa4\nd47564d23dfb34acddbdd038ca8b966815959a8795bd9a354d06c115783a6ae0\need059bf679b5bcaefbfb2eb61c970219d36976803c3ef4475b9e18976fe8d61\naf8837f9ba6cc5c3f775c8c575208ce364bbb4ac4e3154f73ef43ad1c64ca644\ne9244990f513877484acc230a266c4fad98899d36d5de1d88cfab985afe95282\n9a0f2109280cc038f23f19dc1a5a55b1be536a87e6f7e7b52e9f7d3c0610f236\n352b67d6b94d9cadcd112bed83aee29678d66a44a6a2905298915fbdeb318f4f\nd7c31ca21ae36225c897c012ad6be19634949a537177e67673ea7a5e8069dcef\n7a7de0153848f775a5570ab535b28cf2b469d801247a6f5cc34f4992febd499b\nffa47c06e625b27b5ad47aceaea892b1def2f8607e514644a1dee18f6e033179\n230624406ee58bad2eb1c9acb9e44a2afd57c1134dfa75c27da726a48da243e2\ncae2ff7c7058fadb8f3ff1795e0db17af69d6ecf40eb9dc683a7548a4cb87dc9\n9437c80d59ea0f9f4fdc448f1d70ded8c501eca673f25efe55aca6876a1569a8\nf5fabe666f01f21af82e451bdf6e9a9b37d80c0f3c9184a8bdba645f12fa66fd\ne5e5a7d6acf7c96a9ad0b720c926e16ca7dbca1bbdd6cc39239eedfdc0f13bcd\nc1df99b5dfa43125747458a6f1374ea2cda5aed20627d655b1bdd36536994ba7\n8dffef0fda855b6cc50120b8930534814734286376f6c8c80f7c75d4500d6cfb\nab4391de4f4887a1b976de5087ee77ed005bc1b3f99216a65cb5c08b05d69f0e\nc7c9e41a9b1de7aa3e8087104657b01a6b8a1f562f478c973d195e247c7097aa\n20a3395eae9be3c7bcd0a9aba8d3a8bdb59ac58f45a770b333ae80ab4b963af7\ndecc7c79af4a3cce10e05eb9721e676d9e1cedbb97fc46e082a3a7b459652438\n105638852b6d436565545983698e97056d9bfbff2a74c4f7f08542f57582e4d4\nb3e216d02b3f44faf09d9bb3fc29d29ea06aa4281696e16e76727e549e35248d\nfad3f1ba6a73431b336c9fd18003688e73130014a63a49355dfca4c71379e041\n39be38d6933c6ce2b78573ad78c8427bc4618e78911d9fa7890d29b5f0d5e99a\n8dbe6f40c55b7a7f6b0d86e1054badb9868fb54c6db977e941fd4a55e0a49280\naaa8e594268edfc4bb9628039ead564071d247ca5508a4f318594e3dbd0d6a27\n9b6a7416fc210d8800cb4a2406fb31989e98219417de3a4654fc3132d559cbcf\ne0f14d1863dc28c392731a8d8e9fde524faa51df82bf0c61b473dc087ca9ad00\n804ad655e3f27473e20515e79cb7c520c1b2a1ac21779ac6b31ff2a77f7bf95b\n3a6b16815634cc59f2f818d50dea4331ed48e96979b2523cdf3cf46b90d85fc0\nc2ceb4ef868a40287152155ffc8571325089132a7a54b6c25760d8db89724c3f\n5c97ecff16cd4507f6157cb52d4f454300173f49341fe047010ad3bbbf0d35a2\nd82498a69ac3712ecb297495ce2c6131aac363ed663907787ea21011b78c2d91\nfc0ee6cd273ef5e658b0b5a8d1d27c780edd019e8d9e11dd86a44c67ebee6b01\n0e27cdb08c4a54655d2004f161f6364f0f96c5bb9300d24d1c347937eb3b8147\n86b12b11e47a1ec0f6fdb6b06f98c08a9f7bf1a533efa2fa8037d373f768cca0\n2e53c937b9508b64f283c1a645777153b7125b2a7929926bdb33c1adcee7cb69\n3feba5bf8524d148e8484b4a623c18575dea5e8ea207cbd96d2bf2e33d2a638c\n873a0431a11cf0d135dd30c5963ba944bb998fb09301c31c7bbb3ac4676807b3\n0e8e422b0ab663a8b3f4c0d7e2639ddf58fdbd9d360c287b857940cfd64ebb47\nbdccf1faa4b5709ba9734534612bf9a09c4e5ee7480d5c8f03fa6dde63c0b0d8\n520ba5c877bbe83761cf3096d1ad417bb6672dd30ce25c594110cfebfa36d7ed\n68b748e4b761ce4f792d940ad5d9bd5095c5aab0ace678f0c758497c61b5c247\nf87559afc15f4b021ff3632f1712f271d1d4b8c32459044f1401a41261d49176\nbe8ecebe860a35279372d8c1ddd3d9e76e51a1e7bd7a53859de95d7f9910450a\nc1129aa64f1490f31ead41fee51e1b10d1cdb25fdd061efe9504e288c7c93cc5\n50b53a2a887ab74159a4c94b525e265744ecbce3710f9febea3ab8fe47097fda\n91398068ae4290dc9941e31615536662bfee4c88bfb0b1999496bd964ff7e119\n493e901627822ddd8e0b9d8d9f1fa341d2eeb23293d5d527621c5453e21d48f5\nf2b0f3121a06365e8efbc32e2457671441c77ebadf4fa73d469f8b065ddda03f\nc892f3dfce8ea24adf431e422665477fe7172d7b5dd4316a22055a1ba753b6f0\na294b95316c62879bef16e81b679f6cf238d200e38ef89d7af2e519b66e96252\n9b84609b57736141f0b183afd8fd31c394b01af80b44aac4637ac11dd93751ec\n8768d38f77ef32f6b2401cc350c626737afc8381a96d48118db3434297207f8e\n5ddc7a8450d70d0d1a51f51bc9189c1407abf92d0c3ec5c42b836dd954afee30\nfea10544f02635727ccd806fc9b292c42ce439a4976a53e28b826675ef102c86\nedc22d366a38e20977d45419e533e299a087775b296bb6284b775546b15b5dc1\n0a1489629b8bd45c46ca87545bbe0539332ece33cc0c72606b2a460df4e79e23\n6f2eed77eb62563c7c64610a17d72f5861e7a235ecc85fdca33ea8d7ea75ffb5\nad1418e9b62eb7b938848015639d3836401518d80c54713bb689762e028830e6\neaf196ac69bdaeef85e1ac91b21d5910cba0de3b357a296cfd798553ff1bb13b\na6f01fa241ee7de8d450059b32180af5d71087e2d2b16ca9c5f42991206e4734\n0537b3d56153282ff59c675320e3e596b13a04fb3b9d6a5eac12ed50866aaaf8\n8a79a4d1209b58bc416b9a273d7f47295942aec7547b1f1feed4496d27a61d1c\nbb5fa817acf9bafbd2d3111cc337b709b1273e1ab4bf9ae2bbb51716e3abfe0d\n9609a4a0b49c16824da191affb038a8af7f7ea5de1acfb3983c122914af4c138\n8d5c2d8731d0b73b0f4ca8f699a882534e343c3501e21f0d5331052964810d24\ne4da7e5dd579271b942f8ada2c0b3ef7c3cceab9e9b310bee35f05d2727dccfd\n25434fc295ffa9287cc8d4e1c743c9d5d5ed32c146e665e4f1f6fc95b5244678\ncb99c834b3ae88b5352475749547f8829170552c6f1042a5f513d04f9b251a39\nc0b64e8eee609e041fc2727ce28213a6feb3e4a59b0d9dcfdc6bb3ab2ef4ea4b\n8757cbdee04803fd1188d25be64efd069ebbb26a7aa52c496efaf587b92fbad1\n66acad9643557dc761fbcf7f44e343393dbf4dd57b529af5003d34046f31c14e\nb40a68d58521919dd4e588c7c55bed22acc5db8e86aa00cb6a2aac9ed6008d5d\nf8e35cb62d6e6ab015d09ea79a9fde04d4b99cbbc32e80f7b08323b519e85103\n7378b65975d2f879ad9024a19677a3fa91998e9a0084cf1b0dcc538b8b2e1e3e\n25a84159de16d55c8d455bb8598bef36920b599e09ef99f85eff74dca169c344\n7e611fc0757fde7c4042e557518d431d67d309d7fcd1b94d5c062725cc65d353\nbce84a1f13e186056aa41d9fc420e3c16fb911fdcf3d28452bb74ff47294b81f\ne0d67ed34442dcaf29bece98369e0c2af8515780809a5cd692ec8790ff4b4bd9\ned20b19b65a3fabf62c28749efab8072322c53a3d8e1e726f2eda8c531aa9b40\n4c81f64a0f4c02f3325c97b98d8bd768f1feaf6b66fd2fddd9322a00c6f9ae06\na8e53cdb4426650273837c96011dfab505117eef54007bbf2ac524dc8ec4c862\n8a67713c2e1eb35dbd3bf55479cf70efaba2351ae1414b7e2376504b953b2523\n8babd80d511b572d8ff30bc656f1e0e2ba49f44cc5640cabcc86ac87fbbf26a8\n40ece37c51d300b55458b4ffc7e2dce7cb1d8f743377e1cfdf2c1f107e90ce98\nbbb57d2bae0fd9c471a50a446414423c55bf7845da511514e200a66a6272aa88\n94e958fa35ea079ffd2590898a7ec57ff8f3698ef2b0ce0ad9df3b34f1c982b0\nb1c527f31062ddbb890daab89955ad2d2743f537588aeb6612f8a04fe111938d\nda10606562f96d12ffe5da878a18461278d179e0e2c9cffc3d2bcf287d93b008\ndc05cbb656db5ddb76cc213874c9f86923269eb0874705801a98a64bc057b6e1\nda07a2b35bdf4261d79a6c9015d1a240e451127ad08b765f681c22e87a25da7c\n9b64ec0a71222c8ec10c162f4a973f50ba91a2ac29bae6ca812358ef1905c88f\n77aa02642c339fd90f3cb943dd89f0d163918990473a58975986c467a0e4eedc\n04e975762a4589e862be9f3c0452e5f4c79b29bedb4e6f9e07097fa99361fc9c\n9949b5b708e43973409dce0a34bc696b444136b23c2e537f7b63a39bdeae3406\n42bb55e0bb082926ba5638d830ebfb04850e6931d7e9e7732f59523062813336\n99069e0d2010da264a4356a21e783d1e087dba44e8a7d6b2f33f73568d0c1c29\n9b2ee9fcb0d15e0db198d6612242c52567c3da1b8453f07b359de455864e24f0\n64736abe3f9a61ebbecbfc297318aa5b439e97408e2d5cbc7f34fc1743e21a15\ne32c1c935564aa13f7c4870afc6966b765e3767458ab60ab86cafd0874957dc6\ndbbc2aa9df3787b91f8b45180d00beeb34d65237d1c87fcbd819c7f3a5964029\n5c516e61dfcc54b88e7ac546e8b516b2e19b6ab31112e4e6a7e6bca7e35d7e8e\n0a42f284c3c9b4fbbd01903d809896ff4450b68b40494890430cdd8117ce469c\n5c20bb3d6e448f5b9c794c4787a55a7d34576c942bad4b3801a1e304e0a58b35\n0796a0d9fd6fe03e3bab47f7fef49a2a32dc199b1f7745e107653b2fa3f48b0e\nb68c47fe0364ef6e00435a4cbffe21ba10bc3e9f042259672961edfac0fca2d3\n18ff0cc302035a258a1d483a4e5be1de8996a9af430fa67036c387d6ced09b57\nf49ac0de065fe68899f5c93fa6de81110d0b0c8ec81ee3ca9ac74440ab6dcfd2\n5edf82b70f8f2b896ed09a0716271b6f88b9bfb3c997da394849f4eba20c23fb\n9f76e4a0dbd8ab7fa09cb02720d6a15b395d28ce75eff6e7237fd170a1236357\n7f238299a60660b3ab74fff140e1c7c110c23e15c2ceff04b49a0b0a51844204\n051d4a670af2ce2cc40995201014a3a31eb4233a575bc7f89782329d65e9e429\n6a7ebf6d7335868fe26aa0c9205a56cd872d01bcc81b78cd08fab64ce4c297c7\nb17a04d161b11bd32a4a36d2353e68fb74c6fee0a4feb0869e014888ec8a0cc1\n6900f2ddabd4efbe23014e4a68c2c046d6dd5f0bff28a77f943c3e0c2fa6fc7d\n283402931b15564329abb7fc8219801bcd4ad0e94b5496c6e5ed434215f5b9d5\n4240fa289f520237b10bf7e0c5938006bfb4625a041e8f88d8f0f51bf05415c2\n3518b6eaa4f3951af7f555141ba3b2368bf658ae234bdf75d2d47521be75f87d\nc6401c807eb9027f562795b9a38f1b8e8d70f8f3fef7cbeec675001a228e5bd8\n783929ce690c7459b5128eff37f59cc7c67110e351047a5dcfc8f6a0b0348cf7\nc4c7db235f1184f1ef6cdf5b0cb0fc4f3e5a2a5409aff2d63bb27c5e89d1d0ae\nf289804511c01ecb81e9f8eb6c1cda53284cc17574cbc8c622c2acc837181c4c\nac1a500a688d6751648adb5fd803034cbf4cdd0265577664307d51c52a2fa27c\n099a7bfdd2308330bdac3c73722dac62e33bd85f2f73e99fed06b4c5b89adbca\n0f690b28d3c48f643c7885a68cae60d557521cfda5ec918839f3934bf12d2d5f\n15b024946ed029bf3597ff21168d1ebcc5007a692f3f0b6ad60ec1d240c34aaf\n800095b275513e392d7734f2c2bfbad833be106eb13ffd107a2b4fa90ba84442\ndd7e8e2adc0b208fcbf90d60cbbbdcf2e135075e5f40f619a56d729419015fc8\n30e77795125f33abc9b5d13f36bd6111469237d27932c2dd17cc029650239dea\n0d531e13e05194e02f216e16040e6492705850798f9fe26d395ff897be1ea6af\n540aa07f85720ed73b459ca81afcfe8162147c4daaa1f0ef51d16ba61c6cbfdd\nc12c25bd0dfd75ac6159468de018063acfebd25e46892cabc58ec5da56994a6d\n44a9a2c0f0becd895f860819acb9786339dc5f58d4570bc1fe6c44c7744e45fa\nec718db4f175064f274f5d7bb88bee7e7f9e83ae7d87ec6ee2ed71634f0ec2aa\n99f1be7ae64713d79e189be45461204340d11a7b6163f237086fe711a1d4f122\nb27fd75b3013eac386818ff12ec9f024d262db2f3ca7abb701d68a3ae16185ca\n7ce4a28ac1a376eb5ef7d3aa9a22a2da4f01957fd9d9220404aaeeb93e88022b\n59e2e0fb69b7751c7198bef2d7d289960a8e4ed7750cf021361b61581acfdf46\n0b2db402803fde39cacdb8541db36099fbbaf1079cee60a07cd6f78003119e50\n7c5d631af09108c810d1f3b5defc86bc8223b562186e218f5d58dbd7c25c25b5\n6d8b984287d72129d27073e743a949520297ef70b6069d9a78d816e760862803\nfbf8382f6ffebbb86db4944e6bcf5012c8c65bd864b3b4f882b5e8d370cbab7d\nd05751773e58b9621e3fb87006cd9b461881f798cf959cb98e8ad6cae41e9ced\n20b52a339b5bedd61bc2414e8c1d5bce530803f6280080c834892805ce237595\nbedfe533f3e8338dc4d33292fe47aa831f9fd380314e150b3cdf5497cb57ff87\n8316454bd851de2112dfd5a412690d440a873feac4ef062f9c50ac46185d854e\ncd994457db4a2d8f03368f079f5c37a07e742c03f4bf706b88cfdc007742cb47\n7846bea275e3479458947d7af061b0a3a20cce8b118cdbbadf962dc8429d5b1f\n30f4d805a0b39f2e0f489465ebacb2d66559b85e887a6ed4f02a1f1726392423\nb5492e71f1748ac7692d7e5cbf8a5c4dada15ce0e84d40a394974e7c3a7e27c7\n0696dcfb4d4368f8f6fd650268f379ef47dee0de45d9655f39bd42599bc2e701\n28c81630470751d15d5958cb7c3b29103d637f59bc222f3413d7fd85da32376c\ne16244fcf46fa24cbc95f5b10990a1c42cc87b4855d5e321ac43594550049293\n3b769610f5bbdc9e15577c54123676dedb1e221dfe6c1f41b8bc4e5cee02cb32\n5b14ac2078e356cf7ef1d2b1bab573e642c6a5cef4e02d3fe0df089d3100403e\nb5f0dc55bb1fa1896f304b2524d6b8bc6762d352b70f9d4ffdaacdba2a68f80c\n286e64cc8810aa4e0dba214abc5a107a60900dfb7674056102e6dc37104773aa\n12ed7dcdcde7ada542c5e308f665f3797c968e703ccc4dca38c44d4d9c22a96f\n82c6789d3610f1da97a393ce2ec7a807ca0a42c3674e92c2fbd058a719b13533\ncfad95bc18597de0aff36582e7aa83ab20e2bad951e32119e374bd795a3f6ada\nd83d3a2c5c19cf2ba48b70f845b381939022c792b03a2fc804ee0efc5a3d814e\n4aa337b328d62d43fdf90a77a6a09d0a6387f12ce22a843d0f1c7c12e297e47c\ne314a240629b4271f1149dea68fdbfdd4e83d659757adafd999d6e1e141707a8\n54a95a45f22d46192825863561a4f36c3361ddc5128bd7b764217a0728d1293d\n4aaeadf258b45e93db3cb7098af521333f0261ec3290c05c3dda2bd70623e107\n2a4bf28840372a7f3b317ec93190944ae38cb6bc6508696be68f09436d4f112f\nea845ac845bf1ad0de0965e9b4dd4b7341a267e81cff96d7ea9244865f74c5ab\ne4374d32d0c0daa8c43f4147fec64d2d15b7d608be6d1af18bba69a1d9c26e10\n3f1dbd45aa3268a5b028874c004d456017b3c9750b16b50901c1d28ce3e53a90\nda5c624644aa1d244dcc31334b8614d82cb6529dd59865f0ad1f636f584ebcad\nd405eab7c506c513a1b567365fb13aa8559281a1e859cc83ee0ca69debb25966\ndc78d122bc779071cc9aa69a64e05fe9af03c834d21bfa37160515851f3ed877\nc7c4bafc9707f381c97d780d833faf5c7fd964182383f9c3380fd4c2ca594fe6\n998b594004204141a0c0065e347ec6c3207ef01b38a5bd178b3bc312d756dd10\nb879f41239107e37139191682213d4c3ccd156970b8dfaa9f365365fb5fb994f\n9cb5be971a29c256006d65447fa691fe39039218f54a94405ea1e403b1a5ce9a\n58a51d101caae283fbc933391ead3be3a670425f6743c5713e7c8ae1c3afe6a2\n14e183d1793b3c2f5e3feaa09281cdae191981bc343d6a35c91dc4961052674d\n950e11a9410360d467632d0b9ba1cc42beababe36e97df88e19df6d52a038a51\n975de34a8d359de64fa4453c3bb7e05e4d697a9f0147981490e4e7bbfa74f759\na990d4268338812b3d76080d6f7577d7578d971bb128868492f968385bc912ef\n9f703becdd9d004c204ee297cdb99cd3c68fc105c37c6d3bb5736644516f2bd1\n428c3b8cf98361ca836db5bd883f84f62c7682f37fce8713ff7e610c684dcbc3\nfa04795c513062c0ddb524464033cc36aef65e5ba2207384c3235003b561f540\nd11a77c455b1859834243d982541cbd78fe5c33c18542eb9cde303c69eb0f022\nc5cea61a6032dae43d7ef0446bbcb13e80ad007e8b4c6a0506787b4ae6f1a43d\n093ae35e7a01e08a0a1cb350bb51702bf7f93bfd80a3530f38cfdf063c3bd085\n4e4ecffb7521ea7320efebb8fa01052f447b1a5d9cce9b1113b3cdfb1671d1d3\ned8751d4231ff6fd3364d0944940fc64ed1ded6996b960ec1ad5b68a998a0ea8\n51ca9e64b59cb1b13d0c905f23269ac6beb16600446a0a92df88bd4e634a2837\nf2181f924dd82dd467e87e97d0626e26c4b9df0e5c7b578f30592eb0fafbfbe2\n627d95a518a69ea5409db9a66b825ddf6297460a48ff7aedfe11d35db98ad46b\n49ae42acc57e0f9dddb00b629c2299476bc2892c173e21a10b968d092671c32e\na97acba094a9527aea17ad3c06b0644488f3e10ffd0700313c3e645e132a2b63\nafb66675455d9dfcb5c165559ac28351040a8a15ed8e383770fb253d5cace7f4\nf77d24a46e4bfbdbeb1ac96d07b7b6db8140921134fd74275429a5db4cebe5c7\n195dbe5fa1b0ecceb13baaac0ace55794b3435e757c6f72dd6b6bf1a34ceafa9\nc66f436d08d55faeb0d125ad47a17cd8338cd2a75417b09aaea8c3faaa53e80b\n3f44181b9e261b8353866f82b6f0053ea24abf092ff06167c9902aefe27ad169\n71bdb71a9cfc7f3ea2d279ab38b4b04acf541d4382fa21e8215b952f52841657\n5a0834e997f9e2be93fdbf93378cc22188c6c982e6ff88ae80f351d9e369fefa\ncc49f6985664f420f0671ee692094548470b90d80de790ccfc6f6b6a9d56bb53\nda9e74bff3585d23ab355bc8cd9157b6029fc119f1254cda7135cb85f58803ee\nc18df0cdc8d48ce6680d72fea15f4a97903c93e45a5a617091a2ab02c5c5fad3\n88fb3ef25f9edcc2b218bb420e9bcbf9d012978d9c311d75ae7c57995a470696\n6c8dde4322f4f68f790ff1ae911c32ee4a462f5ae194e2b9e9c2a42efed4723a\n1fef5318cc92d6931c4219abf239c5f74fdc426229c30bf0d72e34488046d9e5\n4366d8a0d342c785d9d1f4f4c5c8701fc82e02952550371e7fc6c892de8d844c\nd0cfba17183b6ef86d9f2e499aabc789bec2913bae66642b02243a2e00f16880\n0b607885c5326f3f74045a956c87adb01a855a4545cdd74ed7e4bcad2fb9614c\n493997474d0e5d45595658c8f4788dd522cc7e635aa7c2cb3d9df06e840a9fcd\nbf3f44168086502b6bf47ebdc5d5b3bd477a686fb90efa256e8df00cba0ba7d4\n68a0f5071ee8f4837c3a4650500672ab24655306ee431b21a21dd9e652381a04\n2d93ee0862828308c633b6b1730e57c40c38e4662a07ceb0416ef8ca355d329d\na0096c577e0a503fb71b63a00ba730f9f4a30c1c7c308eaccb0176a8d8392967\n61839bda2aa083e18c1ba3f7fe023f06e2a397023190f93acd7960cfa5edd8d0\n8d6ee96939a4b1e8e9000250a7cfaf0b5ffa65822f1a9d738bdf7cd1dbcb42ca\nc9af214489bb10425b879a1562b8666882794c1e23a78b33b64a563c58eb40d1\ncae1872b548867245983a153aab777e4ae80b32c26098de07c99b690c9e63444\nc553e25f3ca70b621bfdcc6dada94199f3b02f88e68d5961074009141bd302e6\n9234cc16d71491a66ad65af2fad3b6f4270832ca02468c53c9232734e6a3bd02\n11432089ca6027618d45784e346de518921673d9a2487fd6f204ff9799fd5359\n76e6d825f2e6520623a3af13843aed22811e6c5016520c0e25b0459fac1b7845\n4cb83750c29f6f2d2ee50b1e35c391974f20510fe0755e57027541d3742ba5b0\nc03826461f4c91f768d3d92a8bb7329b54900258eab85e26572631e301d74e50\n4aa32fc466da8d2a9859f92d57e47b97e124f2b9bf0a5138a50295cbc8d0556d\n3e2b562f1e02a75510dc160daf5ff6ec14cd9c74a167e64d23b0ddf31dec6f19\n828bab59b21c06f61a1d1cb0e72afdf88712b20bfa27fd7e7ad052e0812f9c40\n782c4e253acae1202e3e63d7b300df5f74acd73fb645b2adf55290c7655a2faf\nefce8766f89cd8f5eaf4493bdf8cd1b74a75cc8fade60881d8ef66c44b34005f\ne4a96f37636be9373f401d7e8e9ae9d87e53e2cd781f7e9acfeb4f8c86b879c9\na37a518feb45240d2c3617fd9bb25920cfe75d9637e1dedc097fcb9741ac3882\n2ce23d556d68b4c5f3de1b347524a603b21a5116eeb9da0656a55f2259a095f8\n98a412d6c7132306932dddfd1e8f0dd26c65b8f7ad65ea756c62c9ef0a12daf3\nf656bbcba96e25bea161ec36eb92eedd99dbfac878a66ccd72182ee9c8b97ed9\ndcaf8fdd1df0a593557fbb2d4dd639850e82604a08ff1e564c31037bc96fbf50\n3136fb31fae78dd120f19f32e2f2f5f628337e22518101eaf7bab15de32a821a\nae162727b1ecc6705e47daec06f63ae9d1e29fde811c29863fd54e47f91091f7\n89d8cb29d4c781f24992ac08c64ce92c717912a7b5156ab6f3df804bfbdfa1a1\n15be13b2c892440d00ddf831fe211a65fd7541f7555d6eb35ea4eaf7a87f1017\n8ba1fac972a4a074a3ee0ab1b040d7ca0851c98cb11b699d24a7d73ec9bf0408\ne5caa7ecebb70b5efc09d70759388bcfbb5b5cb58b283ef74641abcfdf509708\n0f6c5cc5da55f801868b23fc501e6eace0102dd5b0fd99fa90924869ebf80ea7\n8df3d701eabc5c4dc366210409179fad692ac4a552fa138364b5b7b661f9ed4f\nd5cd2047e18a66a64d61a6ec8d2bcf65af57d80d7127db6686366f8c2a7c9636\n9cf4dee4f788237c39aa9eb3e4ffaf677442a305108a13b889cafd55fef7d036\nc6aaffd6ee0199605b512c6a78f5a9e32ae8058bf6fb8c8c66658e9067a8acfa\n1094b30985eae047624ac24aafec120a26d89bc03f2f7a4ab1fe695899c42f7f\n69beed958671e821ccd09b050766b1094e4f1f9ed43a6872241cc6eacb412d37\n4aa0241d3bebf2cd687287728cd6066159f1fd7d5ddd1628753ee98da39d4919\n46d9583cda4a1ef832bc2c66d170a45aef91b49ddd19e3300324332b8ea7e989\n08606c0065e8ec72fa621c075e1dbd86a6e83773412d36634165ead28ffb4e57\n412f39de3b8529f688b6a628184a15b1c0eca5d86b72e85960d1b282780d0723\n1df62c95545f83ac6f106fe67d5cae48c862af6ab53d0f36c86125e64adf9ed1\n77bdc1f0a0044a465d6c2d36e589d206eae1a6b0a4613f94df9bcc8473ba9b8c\n7827bc1ac99da87356083811bf6338e447769ab190dc10b56c1890003be7fa5c\n98a69f1945b5999ae5b41cb1ed818765ce9b481605107e620f60504d63f49738\n254eee7fecb9534f97d3a4b9b7dc4442bed6c65a8847a7d8673c002811762c60\n5cf4548424ab55aac287831f781bf787978318f0be359d75fa354b7ee9e8503a\n0edfe6c78c5d1151dfae6db7321661035622710e5a11a449588711b53465182f\n4232f19d6e655a81b6925d61e9eb7cea6633c6efb16537ec3ecfb40c54d68918\ne97085cae818a5f61e3c4df6069f683a8430e386ac9e6e937f75bb6f57b4add8\ndf4070997a0b9f3ac424244557f38cc5f71abfb64304d1016c67f27ba88d03ef\n4571917a0b40b9228c3f718295c288a29648bece970b214556f28c396858a086\n8974c0cb489bf6d624eab0b767251e40a4abedfa8bfc29417325939aac30fe65\na9a93f7f343c6fdc5b67113dcefd381449349435c95776313343a9c7afd07791\n866d4105863f0cc027af32533be71538a0d8536f5de2f7f6f942147380228da3\na58176954c64257c15925689b71b3cc2042fba43a7b2d52d1854c3d38976cc41\na5a791ac9fcc3be9ce972d30ecb4be043d4f7083fb9269c88bf8c9fb6fc40038\n59f7b259f6be1f5fb6b7cdf14a7de9c583690b8267e9217c8cb335fc060493f0\n8269cecbc919503ed46d887166f8b78c4001185dc8dcaad0b75d84da91ff29e5\nfcaab6d3b6b76c090d1889613a2b7635139c6d0640b84f8edd8b95f6a1a5fd04\nc6ab2e407e9eca62088695646e309ddb7f06491c33a119b68a0789fe52666023\n04f86aa14a03831c9e743c16c84d7ef33e534393c058110dfcdaf6d3ba790567\n7691e8b304076237303d712afc4c0e6cd7b77f12b610af89c67018b13e694e6b\naaf89cf0b0feaa22a88057189a5d182f8eb27160a4ff2e7c156748cd8c7ead4a\n812a85d4a207bcea3ca0147079ea66e479b0acd670556a4c254897839110e561\n8c53fb0e548cb052463cc92e79ab75d4ea0b8ec43fa6588419d2d9dc607f90f2\nca9a1c7021a6dd78dc12c2442baf7b42d2801005bcc72d80f9c5476345b8e85a\nc9b44e51ce5a2143b5c3804b7e434a7b803c90f761b5baa562c70f210b4f4d37\n85711a305306b2382b8c15b147d8f86b334cac4c6d7d84b5ff8d7784f8de22a0\n0c46ffb0f28a444241a69ac670c58a5a1a49f7d2335f84be4e18a3d78dbc827b\nac6f98ebde89872750c3e28f34ebd1a2aac24f8f573284094031369f2e4b4790\nfc8098a0af2b8065d4671a079125c77afc4de97dcc2106bce382b3446e5dcc94\n8ef730e56ebe6b04710c2f5f2e920571d83f5f18b867b7a4e981bfab0ce0ffa8\nb42072468e0d8f5b19f6f633dff65c08e262aa0700362b52232d9ef00c6a0531\n63e2a3192336144667350c010214b325d0113a465497902729aeaea217a7774f\nd532579f5d9f38fc19af106ad41a6a20e01bc9df8d90a2ba79a557bef48f0611\n4512343c02d8628066610a544e54b7f8fbecea64046664444dd77fd13459cda0\na383bf55295f37ce722f6e5cb6b6cc5dab3943bf9d9205b94c7874b92e145e26\n7d2700c1c3217a4eb25c65afa3b629003f02e73f48091995f838111afac9dc2d\ndd693d58077e04fc33e2e6953a85f535c00d1a8f69cfab04ff24991af63314f6\nc17f7b33c55cdb28fcd1f0a362023471dad13ffc372508be9f199c73393e991b\n2c63b129381a5ab0ea4772bc81a2fe3854297975b7aa8fb7064708952ed04487\n0bdbc1874e86c4c57c7190c52dcba232430f08b6491872bba6ce2a1c50956ee5\n759073ef1610284f7f1f6a60f2bcb7d962b7ed9ace9dd39234b446d1651e67d0\nd2c1b17912561082a42778fe31278794a9972f31f77c95b058e3c51573ab6de9\na28a86c3d65faeab4df0790d2dad4dbae05b301d8514c3714bdd2533be030b5d\n236084fbb303356530030787a85b78578885c503354e17d076bd99d622fc4883\n04e565aa60452cfb5bac54998f2e06290cc3e8fcc1d6b85d5d978cc49e811771\nce1656bfbfd301335a1bcd56d6a11f4d4bf9526baf930a6d617a054d4201d79b\n770c19108850ce0d89e412e1db6e231051c3002bc6d832429ff09e35a4082a8b\ne8156a6d89c803933b092eae7bc27fefe0c06d5bf90a43eebc86c8a69ccd7740\n5bd4160de266a982ba73c94b6ecd092d78245abd4bb93e1d5d594b0835b7c06d\n06d1a6a1af50b9d75869a8550d4e73853b141600c57bea93010f2c04573ee4a3\nfbd0f2c179d18991f6284ac87ef599054b890d7e0ea817c3a42db49cb7401efb\n82a00d6ef69c17c3cf15295440da405c2ede71ff80844c229d835362bee56e43\n83c1b2d2e9c1edc3849d9158e26a626fc1bdf7444b24dae505abd45f789bcc43\nf917baab7a54de05cdd84ff917e689b8130ec2d989bc95b99d5c405ab4926654\nf258d2dccc4d01eeeefc00ac39224678101115d4ec8ac55d495bff2e7680107d\n92bbf19334278f28e919811adb01e32f06ed44705b614bb6deda7927ae4bd0b6\nc96a953f67c3b09d5f117922575c1b9adddd19214ce0165d9e90ffda37d64d46\ncfd27b697254c28cb41787d7a5d01a1c4e3191bd26b7bfb3d32f1d169fc92e9e\n856e4327a297a750d29251c4611259475a43a3c8f453b5fd8f29663918e84bd9\n590755dc3b1b5cbe3f790abec801755c69aacef4d6c9e36926fa0a70eb0ce8bd\n858429755006d2d38ae6806fcc9f1856597626481678be712e81b9ac43e595f2\n02d774eea4dbe92fcd712ae9bd1cbf78c2bd98530969f2ec0ecbd3a44539ccad\n922cb135a902d5d1be3516b4ffa2d0debf03838933f262fd449dbe77b9bd3db9\n1880a99fc7badafe8da5aa1d37846ef358f102efeb22b4fcbb19fdc7eda7b273\n864522b47fbdc5bbe818679ab78645526d532089996759134a8f5e9bb104e8cc\nc264cff6ac0818c89228c78d81c2a223cf0b722f0bda2901eab365c2160d20c6\na50de71a8086716b82ca56dc0384f243c757e5570591ebc815e4e7e426feab8b\n135c09ea1e1df754201da6598dda6967aed4135336e7528e064d2541ea750044\ndb40324504ecd722bb391d63d289af7dc0dbb95596c9f7e0937740e3d20874c0\nd079285f42e11a43d281983d174e766f9a18ab5d4fd7fc8a559edb4ce0eeebb3\n69ce353f30c58dc5e8f80e6d921a29d354258e1c9237a683edb9b03391336d4a\n8f09215c9801b86d706bed8723c24856fdee91be3437e223fab5a38bd1a6b5df\n55786afcad18591e18cbf7d0e4a171fb68d007ba3fdeeec7139a2a15a0044f05\nba47135abf90c1f467c20a7850e6043e2c1c89f9ccce86242afe54df1cbc5600\n4e2d0a825550b640c03dac094fb52e21d2fb2a85fb7b49e339e30bedc4686850\nbc4c913da0cdb9f8f3b97780c35e76b8677b282a0af96a88dd59af76af6bf891\n3a64ea2f21b643f3863a54205c070fe0e9ae2470064e60d84ab85f6f20acc8f9\n56bfc2d291c2dc701fc36fe70578bc777389953c45203d203b399a35f46ee3b3\neeb9e156c4ccb44d5f7654a36384d5bcb8986b8c0d68c0b8491bab8ef27f168f\ncb53c3d3f99a48451b9f644e1d44db1c2c40f6b5e11cca22b3db2ccc67365513\nca5c4cb66828e6b3abe351ba4fddefcd5973ee8f7652f81fa18505fbfeaa6e79\n1323c41c939cd888449c051e3dad8231415b59f42fffc37a265fc866b76bc2d1\n115f9bafdeb7814df3aea38aef93b1f1e576bd7e9e0a1c936d51e2e2e7e218b4\n8057174b6f866dc4b24ac54b63974aa17b1dc71370cf3ecf3c155dbf3c85bf34\n231495cf23879be707f8629460a470da2448343157dd54ee4eb3871f2cfb475b\ne0177ae71effe2aefcafffa608e53a48e82ab41c7f289aca8536d782ac600851\nbc023f7a84795a35038e38f5f3cc32d819d8c9699b9052c777e2161d996e9195\nfd5c1ea0dec3221ed1c91c5ebd3074dd7841f5b3fb8e13c4880059ee6814bafc\nb4b3060c15a341fa4630e6135085a2360e2ce0fb70b563ae8244d1f89b967b04\n36b5e7871a050fcade45de8f2948e7b75c28ad9a084ed6090ed6a833b5fc5f6e\n6cdfe026dc44f3fe42cabce96b5b7b6c482d441af0fa0d9ffa5136ef35c79100\n48bf7fbc877aa6a835d916b23866f3a869238db42d491cf2ca65ffb9ea148eec\na01fa16b2e7a5ea4d7f3ca5225e3746f92fd1b1aa662565e9785ef3e1190140b\n002e71447b975e043d8b7325c6fbdd1ef937891ef64b66046ab167aa09f6ff48\n6583a3d81b1927fe24b81c00017b3bd2b525ef59200bd0425bc4fe7fb94d5c1d\n75e570bfa6b7d62e0a71cdab967b819229249a74032c37f6f10648fb89e23ac3\n75329752eabbe1d292d02b6c47886944fccaf67c11f6754d11a1f388c7e52b17\n745f876fead905dbb245922fcf3ca5bc1a8fdc3ef33c2b1157148d71e3c93820\n8490172c85441f1c5ad7650fdf7112c2f9b2b293719707d46c61cef4f588c095\n41ccb8117efbc6b2d7b01ff14b0514ea358e7d34a69f67d75307ac7cad3eff79\n09b1270e972feb0f713a16dd32e331a69ad65ae02a8966079787f359f91052e7\n37a6da9fcd9c64410bab7e3225984c914b970accf6208de9756fc1f54b879e92\nab9de5f136d12879a290cdd4d6574e6b4bcd0c395c7c17052caa3a1190ed2c30\na6ba1eaa4d01770e265b09d99ca65938bf872e0763bb8dc07958cfb185ac7334\nb2d4337c635e82be11dd6cc8def460e5e9715395389282974b3f586fb1f482df\n9bc2e76431fee4bdd6a4af8187bd79d624425db52575072f84441475de602499\nec61b0b86a7049a70b9c074bf140a11ae4fe8a6511f8b2fa427a1acdd19bc28c\nedd8614b34e3e86c025025c7209b905f8c8a647f7c5d8309bdf781e657c72785\ncc1e21b389142908e92b722ab642a7bde1745c8a505d1b92d4e214a6598f7d8d\n75bab28ec2c248d8cad9beb013a86122027e329018d07a354a7290672afa723f\n04f817a591ec3ac6a4b7597593d78a4a699d5948d6648e847d5cee0afa23c465\nff45f45ebf5991bf05be8963552e6f471e3fabbbce62a5f8d65eb186592cc4ec\n5b175656ebd8d5251207ac307f7950301a397e4d6e976e8f8ddc49e2326e4f94\n60a70433d21e08580b570fdb3c0ac4b9c97c1c90d36ef92736f0855545a53c4b\n99432a9f10c0f5279af798da76e373bdd618fa8f712b907383e880aece8e5531\ne9806a2e711bd69cbf7bba237b9474026dfb9ed146c1a49fecb4a1059ce8a658\n4f93a6f890701ba764fb2772a90ffbc744c704d15b93e42fba4300933cf0e34a\na5be79811e6f86ec7a723cd650dd6c9bd939155dff9b33f1bb11c716e0d7d6a8\nc728ecded8d0cbecf6371d7fc7babf84d0c3391b224ccf0c2f89d5f10698e7e7\ne9ab0857908db18da2801df5de2c729ec5deb8c84fe082d1b80f6673931493d0\ne2d5cbac700cf3cf9673482e800458c972e05c01adec15879971ef7cf1153862\nd445a993a400c8abc02ccda91a372456af17ece850fd86a6e8ad7738c6d46e0d\n5d8b88b23f7de7341fbc53c498994679982bf8b521315143d743782e08c4aaac\n511f1820528e97a4fc8acb882b48ad057e958660042c7c7bfb634bb86cbc38ad\nc206667eb140b3b49f1c69b92ebf5288907ebea7952c140c3283d2f822e30043\n2ad81e9bb0aa06a0b238164a4d2b2f20e651bcaf643c3bfad8ccbc6b92db2a31\na384b6d9db4e5099b8a1d772c65f67047c107e75b61d1c1c86a9140d9e565abf\nc3476dbcd6995138a0bce19e4432c8fe99ba1e39ac58ea314d029d0d2f241553\ne0a0af0c91b26901332e1514d0728c5b0bc5f2bba79d3b40dd0852a88abaa396\n768692582798c23521394d0e379f0d298c23566fbc5696c052cdf32f071f1a44\nd3d14cf70a939b946873ae07d2a8ffa060fb707a775b81de109cf086cb4b992c\na29c2e1562cf83141947e3dd578a19a536cbbca1f1e59f5fbfde703aaad0a837\n8621f32ab0fce72f2818d8e4cc1e1e7d9888604f5d6d9442cd3353da5b7e5a5f\ne4aa832a22938e76446134b0f098bacc4b1d57cb3d6759f36c4d3145582ffec4\nae75e51c555cd5e88961a386a4386cfa203266a3715c1179bcc91c1f11f94811\n3f5dda5d72d30bc52622eedcbb5ad4f7efcecc4d55e678412b89524e62437ca0\n3f42e50050e5ee07093e16452fd9bc2c912d202614b890f665bcc3f38f334f72\n6a956e7189143973303006d9b6319bf65ebd916fa86869d92e78192561753f39\n6ebe8d4c826ba7bebd1ec8ce609911b2fcfa3f0f441fd29c6d48919be0c2463f\n1c2697461b3008e121026447e97775555f13645f4dc4f3f3c0c9524fadd9082b\n81052ccc102d67c6408279fbe2eeb08a4ec32310e62cfbe1af030016b332fc59\n933c657614b009c196b5fe81c5642eb6b3f233354c3452167d146c19ce739f2b\n82d49b7e162c707e335f22783575f409396c138f70aae0efed0541cc05248bfb\n69de77190bbb48dbdca583f75f8541e2c306601cdbbbc9f8998a33e504c9c04c\ndfa7f5eea3744d82f7ad4eeedc3459aca7463052a582827fbbbc37d21f01d7b2\nfb06010f8cfcde87c94d8d2267800d01375d94be7667356895fff6fab76dc5f3\nf867a464c2ed83b8195459e2e56168be3c10b646cab7c8f36da16f85b0833442\nb6c2403de62fe02158fe4e1789297443fed232c020cb3ce47af775b60e8f01c6\nd0262d7e872db796c94952204afac3501acd193771a18eb0cabb07b444f89fc5\nc3585a3b674fa49ec98c1bd4e8815f018e4e15c3ea21ae88efc0bccfb4a38e00\na77c1466b12589aeb9d8f1a8e5533157b59f4011410f0e2980de87d9b3e1dc25\n5edd76bf0d839abee8c5e08c4a12c3c9a5cac552f64500f9aacc8cf6e35cc758\n7aa756277f26865236426a633857879a59be32305d3776eb77361c9b3996aced\n38b628d726f33e5cb0ddb79a988e149b2400a2deecddc16110758a0b740aad44\nafbc2067e29b72849c8ca097965223220d5a835e22d9d23856bd1d247a04eef6\ne7a274eb779a737347b2a8ef65ba48eacf013446c86d1a425703eb40436d4d7b\nd70cfd9a6ca6b20586e55dcc3bb8a329828a9defaccc3ac7c35d5d3bbd9863f8\naa6f24cb9113b255b26263c25c3812d4d29342a794cd39b6fd5dcec7956d7a9b\n89bd97d9641407a0a734bc86dc16c104f0ea602d0f9244109c3f272e48687efb\n3cac0122c024a8399041ac7ae1f4cec169eaa2d0d0ce9385f744415e75e3d3c2\nabc6f187011f5afb757057a1524f644302206c6b606f6895aa94f5cf484d5c4c\n359be18bb21faee6f7e4e8ee085208ccd11bda9c11a48604567748c38788e45a\ndcc4c7f6f43844f772b075d526951712cb8917f998aba43f5ec6cc163ded4a56\n90ac883bfd6f8715b32f63125de395f92c14ee715cc9b2cd1895e527194ad814\n03e5b4cf9bb383e5f9604f9c7d3a457fde8b23009346b16b604d6e82c3989b4d\n058d24d83fab0b7973eb389ce36d1eff88c6d8451b0fab9e1d280884e05752c3\nccdca5f3af0b2be37620a4efced4af20e1bd7f6d6fec604af297e1e2d970ae99\n77f1574426fd959a8f16283574c32b6874c2869fd3212c04cfe17b368863a1aa\n43c8d230deaa4c013075ffdbd49b18c2db51124c77886beea6a6d83f31dc850e\n74eb0ce09f9ede433f4acc52ffa82a86857b89698d8e7274436b486a095c9f7d\n506f1e517198062a738d9a96b2b299ce2491ac249316aa845566d139c24e5977\n9fa5c3b476472b14948af88efd863cdcb36ddfdd35589d01b6ec5eb7cba77aa0\n772bbd1369c480640bb55e04b856b1d0bddf8e744f1558e6b436194d8498bb0f\ndd54d7cc7b1cd3e1888c5ad1a55364a4dbe2f73fc90138e6d6c2d79f7c3029a8\n4b3bb17e68628a4d623354c1f7b33f76328f179a0087139cd37aa3404501bca2\na432fa989bdcd3ce29938bb36ba63356f37ceedf5e8c22c1ace2f467589583d4\nea8a02c37a86957d978e11de32be15c74158f439a088863fd22ec27db31dfa73\nadf640c938949b94fd034b1e2142aec4935fd383e6255ae768bac5e070332987\nab937a023299a82b8110251f2bc15d768de22d72042936ac1c5c1cf9d5260664\n59a7c3046f23cda3381356f428465c29ec71addd04335f996e873a64cc4ea32e\n727c7f562698e61a826678ff1e81a044c5d0629442315eb726f82307b11a653b\n0f314e18ee0e344feb6d4c950d92a34a2499edc9256f93adf67ab4e448f13147\n871250f2ee69418ea6cae8f887d67af6aa702082562a825a94fa6f1e3e920c04\n36f36e4b95a8b4e0fb63841b0b4810797070e9bc45cf3ef8b4806085db5e835f\n780cbf37721b05927976b370cccff996a2431e11e2aab479834ae1774322751d\n5927469f585f6901288c5bc87a5cce712dff28515af55b123e15e9c6ddb7ab75\n74d6e77c2f8498b3e21ec0ddd270c465cb372d481831535852481cd8835ade83\nb9754a2d34d7be6c443d43316f83c8d9ded197c1afc8ff8ea4fd1c62495e56fe\n3e06fa9eda1c6b87556a4b8d8170026a22cb53bfce07b51d49dabd4e2756bd31\ncd3c653b89e848fe7ab6b88c5aa64daefa7c0679b02a803ca4ecbd76a5ff3419\nf3ffb6ec183d43dcb9224942fb8dc35826a423576723856a4a048407aaea2849\ne4cf741162a21931a232816ecb969c769daba4e7326c233684ba5b8551659ccb\n9b0e4b77983ab14cf50d0057ae18af7e93919ae31a49d8f2987f364bb83610c7\neb1d2cf8f6bf9a1bf2ede3235e46a219e45b14b274fcf45bd058a95c0fbb15d7\n9b099190baebf4cde84820c3cbe160d906b73cdc44150ec2777a7d66a936fd46\na343eb36d512b3de95ee9140b1a5c731619df3c8c2c9e1f15bce59c88f396fc8\n076ea2b729b6a8bd1e49b40c2737afd3de50482ffbb936359ec9eca6f29ef284\n1cab994319f85771b72a435b8df6ee798b77727efdc60b50045dd5f12f7bfe2f\nfa18954e547a856223d9eb5acd07c5e86143edd2123ca6d5ff6c11349ff7fd4e\nabb0157781215dec89483f88abc2173546935e4095eebe5e0bed6a27e7e8670a\nc08afd5d91ee567f5d9d3ce44ce0c3becd8e62a13c8bb5248c3684b3ba86d7fc\neef73ccee3bae0e6792420579e87e3d99b0656d9772be85985d37ab787bec49f\n9f22f7fe7c2e3b2cfed6967f3b2a32b27a087a3ec043200845393683cc6ff67d\n01d743b407df690146764310aea9afe2b7ed6cb38751d1025ea0645b69eb424b\n5da8331c0c7725389a62675407ee17a45223dcf0fa49833be05b0250aa396c4f\n306717f1d8232b4cde4b811724e9d70fcd39d6befb06847eae300770d041893c\n58a84a5e6259946668229cf23923d3f0a9babb0709ec3e380cac763ce3701398\nec1758649701c9719fc309b975ff88b58e49559f994778b0a9550e848bf9bf19\n265c035cbb7299bd25f5b9d8c3ba658f552e7ff2e58f015e2abc7d3c6676417b\n51e5e657647d40f73ded17eb2c582fe9444782e7fe390fedf742e604bfb8ed2c\n6d0dfc9c56c6e18f4b6296cc17a655445cae411162018623b1146dcf678994d9\n6a046a7b4ff93bc44cff26febdf4c3226d2b8c95fd6cd80ae7fce619e1a43f27\nfb9bdeb636f147de98204ef4c4616a3bb9ce2e29f2f653caaf002c0c9a3dff09\n09816a441a09beaeff396337aa85d41dfd6d6597a165b0d5815231805dd6ba40\ncf9796f7eb1357fce305abe0651abe50ea93e3a7478bf97634b8d6d0d6f2a12e\n8dbfe8f93396409d9f9a7178f974cd79b57e413f7f749ded1b0e4c8b8907731f\n7b523da6a6755b7ad3ecbf899beadf7395e66b76cbbb2ee694a467c3b26862f6\n8c99c2b97405ece42178fed4f5b06b6bb85db670cbb65e081329f4a87e4955df\n24d9e1d2c5a2a8929c284549b0e2fd4251b2066e373a8d555f1bc2b62a395ed6\n9d5cc81f828461f6cc654da5882d92841cf53be470370271edaf857e71c1fb28\nc0fe9233107cb167b671939cf8bebad7d2148a01f3c365a78f7dffc19655e0dc\n51c75ba6950ee64acd75a1ad8e8e3ff17881b8034f3ee46dc3fe3cd7b17a5ea8\n3d86e23d916bc586b709b77d938f2db80c2edaac3c77963696a70290c67efdfb\n49eb41fd2ac0e2fa5d2fc5d0965303969050c64dbe220c2ef2b0ea7cac2ff4b6\nabddd9dd014855a3f14e9c0c649bc21637ed21666df76ff7c74adcba53a803ab\n1b5fbec88bf51674349b965977584fdbc24410315c6cc0b68facb2bc09622b8b\ne47a7ce9b166e54f0b61e2cb466a60782eb46a96c0130d82716389d12c41ace1\n7fa3b8404c9963d386975ad30b6eafeb248e4fb251b9fad694ee2e1f29bfc09a\n80060c5ceae0698c5c2e18309ce85ffc7c1208d0ea1253517aa559b79662455d\n568ce916e90fddbe80b47fc01e6df0677fd9e77e274f75761926686c9894cf00\n0b95dbe12705a549417759e369bfe7e9b418062a4514ffb27b1c39f574686a23\n4d458d1ddd05de060cc88f73b0d717468e313c2dba6ce711949634416e8c9be3\nbfe7685ab9dd06b8aab65d8219d4475e1351be5a55dc09924969dfbb448f083c\n666b897bfb65cb930919947b18534ab1a4c15b8ad853e856810877815e8d02b6\nf9498c028a53032f67d895cf234e324ee84111831ca0441f36694d50f3870093\n175a1c2cf16753ff80ae4d9eaf823c2927a5b4d40a6c2bf2cd2ddd743e181970\nc83ed21fabc5867ed9dc9fb05f91489a70aa2a2be479a90436510c8180701eb6\n465656fce77c3d4eaaee745afc54caa54a33f92092358dbbe3d1cca7ec6df012\n63abb27d028eb944d0f782da79acbe19510c6e39929cb863b0407a6eb9b2fcc0\nebbe26b2db6104c6fd55886f1db4c6f6243912146c1f38bd0b26aa6079ac51d3\nbb8db15d3655a4729fd6aabc5980459977c3a3d18d7c0f95e55d9e8e563f1655\ne80f313c0e29eb03a4a68f8fee1ab7c0c27b9945e484a39a084b454bb82dd0e7\n532d696dcbfc8ac2dbfa90472fdda2805759fa08b027dd7a49ce42fc476416cc\n20f52ff394da2a1a279233c70464429966c33b5fce083a637f1c0686937071a6\n3e128565dd7d89b832c98b7ad50000065fbd565273e9308f59b7537f53738d38\n2afc10a824e9791e5af49d593ba350f3390df5463bdf63af61bda3e4594cd477\nbf5fefc1031cbd1eee6e372999070eb17001dfc35d837edf5c811ade89366b5f\nbf9ac083965c9cefb95c31c5c05eeadbf6b3cd0bfc0e4fd9f6d7d35930fb39f7\ncb87abf5a0435dd8111a68ad9837c8db66ae12e3074e04b6d46852cd4097b54a\n29b186cdd19769639dc6514eeaca24be9529d072857d006172d1b7dcd5f26ba8\n0caf024ffe23d0a6ae5f7051aaff68ac414e5d94371e46381eb4358aeb05dcef\n695fd30a2bfeaa32a1f39e701a0b22da16ca221077ba39b795bff2b10b173525\n544a9f10a34979d631ea4ca5128322ba28b25bfaccfe0f7493cad333f970dc2c\n1873b546440f449a38ff7865409330c8505c61d0d6b7baabac8735cbc4b69eed\na4e8c35d2d8e289bb95175cc204696d37a6940e3f3b54fee522e113c22a93764\n278e3d526b98a3e6d37ec3b3ed6e574a1c54d1fd754c4b9df33fb3b2364334f3\n5099b103a89b522b7ede51066fb3f5a72683390f656ea9654f3ccf7c16101e65\n950ffb9fea569f8e67ccc65ddc6053fefc8e69ec5dfcbe42b67c76a5a1611cc8\n76c720fe967ce946e03dd404c830067e26de9dc5bb7979d0f95c57c537301f5c\n7fcf97935f8fa3bd0b9a7dca87b678710553d653c34acd354b9d002d97dd9f7b\na5f966d3df220445bb7c065879aa2b05c3bde254f64516d7c147d21b05cbb83c\nc805a03e0be0b86b58ce1c14d139978a643d746aa6ff33af0aef1440263ae3bd\n79017fc9025e59c415e89dac3fd5ecd5bfd857217dcdcc649f258255822c279e\n6ac65750beca018f716f7422085e6b95dbc4d11b2b4e4a266ee59b1446dbfc14\nbb49c5e4f5cea87d1c766981c456e2fac57a15181cb0b24c443c8cc9c8649a69\n0f822ec4a397c0b9b043074de1bb46a035aa4b25d0e4219f2138138a7e29c44c\nac0b5388afd7d76cf4c52f99e309717187335c237f146aee096c16beac3a4efd\n201c1d21bd984ac6b905921f1c71c022afadd6746420e5867005ddbb164bed6d\n54d969a17b7dc7aae6269b2218735597ceb1fc593015ae08a39f18c19d3f70e7\n8ab9d6aa9ee769311da7b52743cf147447c13f5c90b6016f84fc9052e597090f\n16046715bed89c215ce0ed38a064a63d69b99b3b909f0353fd143c5751fcd391\n2b126d8edbe0fab3ea4ae11083bf5d0a2efe6b290319fe27bbc5aadd59138995\n951b0e2c1e209555e97f838c0f908d3bfd060682c824af8962038df2b73fcbb7\nc0a2775df2332611ef5b690af173f6c344a29cf0f4ce986d42e2bad55d8ce590\nbc0afe71777837fb5131eed96c676c1e6bc656b67be64c00371dc8b56cd549b1\n73b3a876d355fdd8bc63a84eb22cb4eb65888d8e24342b1f68a614ded19056b7\n33312536c75897e40ad0c091294a6eec96d8e51c7c59ba7e797022dd7bb9c45f\n33bf02d1550e44aee52720c3ae5fd3c2f1095b6683570c73d19c990bd4852a2e\n41abaab3e30d1922508c594dc2bd99fb1cef86eec37371ec51ef76f97977ac11\n32e003fbf538ff534f7e1d229c770772414234ad64e5b4ae8fdb77baa0e8ec1c\nb5780cdd622c6a15a068d954224ff7e314a9a79cf2be4850506fa932eb21a451\nf1787561775f9d95840bb5a02e1acd527b275633fbf2c17e999cd4cb7890826d\nc46efec9817eed931a2757d3fa352bfebdcf5c62e4e043fe4ec130beabb7bc38\nfb2e6d75119eadebe290e6e9e79c0a2fbed78cfc02e1baf2afbf03877bdfcfb8\n183632d0f793007ba63ac477221536af3621d45cefac5679fcbcdf2b06d4a7b2\n9dc8ae77c05ab4d3aa1de559ccf70b5aa5ea026807ecfb17969bb999d06db9b9\n59220fe6558066551d200fedb18d0873c353f0139af9f34626ce86970e9a092a\n1779cdd8bed176c3534bee31e8556913275d27fc40f2c8ad18d3d059f5137974\n4f0f35481007d22a4bd0ceb368c74a7433d6b3eb62d923b02cfa69298254dab3\nb135e32db45ea916527b32f8ebc29a19ad6cdd817ddb0f671bb45dcf6b394dd0\n007ed31580f4ccf57bc8fd04aba04bce0e6728b95db3e8e104a870ab98aa224f\n07bb53f7be9eef0176ae6b08985453a536dcd69a87b4ab3089e5287824ff433b\n5510cc46a4292ea87d64c508171ca883259b4b41308d6a30710ffc945d1625c8\n7f8e8fec4e2a857365e729b788d9e213071a2646a5687e30a649de3dcb40cd31\n492b285595e3361f0823389e572ad01c7167b1293a1ee84beab407ef1fa8e69d\n27d96ae859abeb36e39b3e1e38671ac57fcca2e64af7f1182e23d8d34263360e\nf39103e0a9ad9b723f5f1e2ad9aad685c4406a0a3b1cbd102203ad2722a6f88b\n639649c3503e0e27b871482b8e84e0178581b02913fa935ea249a24abfcdd03f\ncdb93d27f286e98362e6d50ff7bbfe1b72d5a655c16f9a4297c7b70372a36f44\n07db13b4a8b953166d771480a322fb98d73a63872d8d197f25e4a10e99345960\n98f975fde431be82d1580f13b7ec36fc7ea075d9361543a3d46765bc55dc7767\n3fd130e21368f2bf23c9153991cc1ce30d7f0a822e15921139a8db076f10da0a\n0dd2598a3f979ed9e8209f257c60048b12d9473dce8cfdf5b7eedcfff9d056d5\n228eabe5851c2e4bc4babd884feb18e59125b4ec9ed31e7f16f93ac01a4e9d0c\n206bf3a83589ecb0b3805e85a6978e984706017f57cd656a1feffa1d581c54a5\n98b45f1d1008f61c44bd3dad76d196f3e0576a9faaa232107a2cb65101e02f3b\n643f4fbd8d846fbd4bf8c586cfc48d3daf921d5deb0add55d62136ba93d37bc5\n42debd8eb5687eedcc003eff6726d827d57c08e015ad2c882cdd5d56e12b1a03\n274cad07221b343cd8667e8a36638742c9f118df07e979c3a947d40a4423a35e\n32192198a5825818b526fb009f6600125b1022ae1842c556d4ff4b72ccda1930\nc8ebb8c4552523983e6fffe464093f5eb33ec64dd39cf4cf1e7d618e109acb0a\n5a41e878200837b124cd71872fd8f974be9f2ad317bb1fc3781e312f49f81b28\n9fbcf673799ab15d57e07e955f4afb8970595899ef22e15e2738fcbb64cc4d92\n588fe3f7b50e0a449d8407e8dd92e162ed09af955755859ab70b10d80abcc583\n1ecb1c972863d19e547d2cc2db0113cfd410bbad499b90a0d9def3eff77b5da8\n9f927c6f29cb035b8eea907d9e16927f095fd79b74a76d02965e3813530c9fe1\n225d8bb2a5ffd638cacee041ef9a4aafef99311effeb35b50de563714e891253\n57ad4950782ebc10d91c522585ebcb02da3f6e0f8077a8abffbe4025b18de4f9\nea8eeab044e9ebee67120aa5c07a8b2480f0376a129062cb29dc071d8f43d3b9\n1b5c13ea52bb60c6b997b92314159096ba1d545e49d221dfc4c2aaa9d4b4a7c2\n87eabfbcb25a6048cd81b38de5e4bc1e6d8334136b74dd74ee5dc18fd8ebf813\n8b25ecffdbf848c413b45c0d6b436bb0ebabe44f938fd8ba4e31ef5ef991350a\n46498384802a8166d0684da5b2848c55bfa48a5211c8817669afcc8faf44004d\ncf8181b01cff4593bebedbb769a1bece2fa67ef316bca4d6a2ab654979f9d454\n4426ee3ec0d21d8759355a14ed92fd0e44ee0a3e78b284cf9c9993a4e8c13058\n8a319f3c00e13a49e26787f1d7e3a0df05442aedd515fa76ec10e08fc01bd28c\nb3f8a87f80d47a6caa3160521a27de06028745fcc6a40c7378d08a1f2c97d409\nfd717d285651800f597ed098b63725a15ca42f5ee70162fd475766d871fd7980\n3653b586733e04157f0256b17a78c6393ac4300e999bd8f4cf6480dde1549f5f\n4ff19162b9f7f3632fb2bde2be698a54bb4ab2e724a4796d1c9b4994747ebd26\n84a4e55bf3701d1f73d0b6c316bd30f1164fdefb48b2cde56cc3260e7d8a74df\ne65aefc9aaa258df9e9fda144bd46a3254b2fe8bc7ce2b04440a830c3bc26ce7\n7d1e539a059f8a2404d0782249ea95f297ab2131b00d955c2a6f14900185f022\n739cd218a64428f36285ec36314d112be95335d9f3515aca0b3f4684a4601e61\nf23a67f8808cbeecd39522de70bc3ed744a4dfee9aa9181c9b8627f4688743f0\nc51d9ab986485ac4642918a784293aa9d1149ee7d1a6f02f2d49721fc71281dc\nfef68de968790feeb0a9b94cf9732ce1fee45ae151425bd7ba4f37adb98135c8\nc88ad0281a65962ba6c4e316a919ff01d40df99de78fd4786da490cd10676748\n4009bf971a874f46b14e1442bc202b85f4f7da944152f703e0a487fe01c74d18\nf5d68780bffd0bd69aab0133c33dfe2cbdbb5a8edaa421f99e5fbe81f2c9b0bc\na6b8f2a2f5c9bca06991b641184dc75c2ca6112887b2c901a0b0fb7b9296bd26\nbea985de732a62b5e0574d0107f9c1704bdedf8e3435a0e76fc58671a68af9c7\n0b0624b7d7f9950cc2dfbee24ea224e59739deb70f03bd15f56b9816cc602c99\nd85d83d411ecfdd1ff87773c475273f2a82c264ac363de19238ec0c405c7fcda\n6987fb8142213823dec4f8d1f5fc0f9b30f35d49f42565bf31f33d94286cd068\n82accdc429c094d6ad65fa2eabd50c73d79a37fb46a3e425aa38879c0ee5225a\n982c2948ff615cfaf0ca47ab479db8f336bd52efb4f0a063a293b82b1a3f94dc\n8c1f2404aeb6f24abf71f6062efa97071b408927d0dc6b2d373fb20b87129b32\n2c0d40e4e81b585042825b5b362edfdda8bf372fbc4ef6e08b2cbddfcbfead1a\nec875980f7dfc1b465aacc6bb4176fbcb07b4dc9e91aada9dc229283bddcb296\nc631ca4c7661ce436d9ec24c3f4b2183d2337a455929f5bf74f3d5b16b3850a2\n6a99ef6183c2ee516e7346eb77cd899814e9792bcf794bbceaa4bd58375006af\nb12dfddc9b82685d50e82f3cc29a591b5f4724dcaff43f2a3bd5c0e6bb4fcdb7\n3a896fdd097be8817481a6c4e955c7e4a16ac3fc16349559c47bea185f74c8d6\n9b847f44774d8d54c3ed0c62517ccc1058c69c14fab412923f7367af406109b0\ncab296c6bfc48f6a29b5641738e78fff2f5cd35c2dbac10644a665b6c952ded9\n095b1278648045c66b4218e0c9aa9255ea65facd6cd090e6c24d75707b956cb8\ne10b6654abc00d93eef80d665259a69a70e1c8dba67fa674d36965a33e0a8223\ne6e4065011bf50bdb68ba8bdb1fa12dfbc2571a0167492ae886954b047e3aae5\n1133fc02675000425cf640dd2431b4136a4fb829d6554e16b139a3edc404cc26\ne48a0b7a08c4a1b051607fbca99895bc50f15718e84b9e0f0a751eccff26bb42\n6636395589e670a158e3d1c18aa4e5da877d7dc40c2dd480686c413c82569955\nbc811cdd76e93023090e20ce479fc6ece05bc3057cf379715d00ccf6a91f2490\n567fa0d893dbf3a4cc118e895b5a1364bcae1f0c27104ad33d907767429e6cb5\n960437205e19b86155a94c68c17c3f1fdd48571f9025c9ba5d1d4d8d03112363\n92ba4368a9a29d3c2f8fe8660e5f3c31ce4a4d7d4444d54cdab05e0105b55d68\n3477fc1c50aa93c72e4313eefd3060ebe5a1aff02f1588002c55d2b8d5276423\n1c2c7cfbdd0bf6fea877bd5c30419e92fa642cdda2dfdee37bb5fc937456fe1f\n0dabb9f058afbc011b2fca9edc3fec0b614786d133d14e2f8e30b34bc35e2143\nca0ad732fb0c65c7bf7c1853f382eb4491a2da12e0193d84f90dfdfceb985159\nebca2675b60dc6da402b99b23a9d612295eec4810e6a472cccc2b5e6bbb4a6da\n11f93f84c7650daf556452fe85ef98b2e3f6933487a499dc3b638e4ea100d3e0\n57f787ca5faad40f23aa8c603f9388c799e996261c83ad4f632ecee8c0335019\n0a9544b2e66c58292e9257ac694885ef8ee4c4a9fce9ab392c630dbd0226e23b\n66c9170d1932c87a93e52b776ed27c2a885f84c95a21a13af803ed9f4c9bd5b9\n04601b3324870f2dadf6966e8507f4265e1c2da5981c07c140a42579d7610b5c\n7ab77de645c80b821397f37e8761402845ee8a3608d7b5161d7c96fb723d65f5\nd0e7a5a9c4ae2005831b51997f987f3e9c58a0fd2fd03f2ffa5990b2576cd54b\n8ceacaa715096209cda6c271245fdbc5296299154fd9d5d64de4854fd59a665c\n2c7553d4797632a43a60fb9c82ecfc617e6f30b558c4b225328dbb7b846852d2\n3924785be3d5d382c04a948bc48da496f05a125da3d112f964b8628456d50283\n8fecbb7289756619d2f39658d55ae2c314d7e3d1207aeab773f6df0b60c192d6\n7cb20c1b0facfde9ae50ee04a96d724385c4b60b4b23890a2445283e6822cd25\na3afe1dfdd88a89569f050a1fb492ca13c4ab4214e3c2d2fcecb246bf935cde6\n4dc7229f69d9c7eebee89aae710a02a8ecd9fd43c1c33d581eba8c4055aa40a9\n89b95ef917e9d9c27da019df07e522192d03f02737daf056a6a90829af2336b4\n11bfb9f8f6834188432cff829c1a97796dc4074a1c6b50f7d6e83ef566822cd2\nebadfc9da5ade3837fabb432be6f7b0f897c8b12a493a99fd0c4038da194f187\n5bb945af4ffbd8fa8a78d06f013e650a510c14817724d6cf20359e184a8df5af\n31c79ef2a597967f755fd7e4e9b039568e7ba8e147c20ffd91837f9c20cd6806\ndbe4f5f3a88106328da179b7e259b5e63441ac532aa3b8d5740b1e3f6b380319\n48558d424ee75d360d1a7cf2142215519486215c35d8d8ae82830ec7a82583c1\n0996b934019ed1f37a5748ba06ab9414e852865982f78e6a83ec35c5925a2374\ncde823ac5447cda34a6cfca4dcfac955e3045802a349af109d40b86553787b6b\nf0f116068a75aeed5c2f720897bfd636ed9b4f239e23a2786672d7fb3ddceed6\ndc98c3f27c68791566da54343b3b4217a010c9011d07493c309e2acf26b4b023\nda82d1d89ba5cee59bcb678f317e7583be2b7a28a0906a828c8feaee6c47d10b\ndbad86332822e689c9744670ef4e2787a196c8a7b84b7c513b68c0e10aa8c923\n07d8b41868b6cc3fcbf2bd3611395df88f252f85f73067c1fa210d8278165f16\n9a849b23a36b49520f3e87a90d2df11368b7126e00aea49f3254d108aab0baa8\n519ed0f0f7fab5cd528fea728fe623074ca01addc6996026aba7e9398fca6bfd\n3f7e73928c14bb58fd5f0b8efe88f3f03be36ff90fcc84d37a08c1cc0126828e\nf2b59d870a73be9ff346f101f2c82379987a1c68c50b7b9e8eef9e112ff26914\nf5241f60ca6b4e32a3a43f32a9c8f94d8ea3aff3dbec72a5df9de63ed4080c29\n9dc68c52c9da2688960cceff55d5b57573c84c062df01b56521ef0ae5f8ded0e\nda4d1c596a5b061af56329794539db71201d0bc78e6f41314b386a3d2f683bb8\n852f192b82c5f1fecb892fbfc1a9e2fa3852e16082da9986951f141bd4df6bb1\n1f45c4dfc8429f851582005c673a992e220dcfbb8f661cb08057856c28961154\nb4694edb6dbe58af90265722d10ae694f8fec785bbdcbb0e7202f06770cc6222\n4d157f89ebbec48dd1c4450dd3f814ee8ecaff5357ae9e4290c317bddcb5ab8b\n0cb32904119894202a9facae03521fc32a5b68d9828be8a2de3a67880bf52605\n89ee5571b038f32f0e410d3b84a30a264adc0c90e04fbd04c25dcc8146b3277f\nca781d200bf3be8984d4b8fcb677e8a92868cd8492778ca4e391db41163df000\nc534b87b54a9a678eb9dfc206a9061bec2c220ce9d3c3451b84bcf4fbfa21919\nea018fbc064ef31d31b3ce72f3d832c3ada238dfe9807b234f86e1b32dd03054\nbfd9737cf99e3f555b6615e570479d93c1706f050d0095c9f1681f3e140c384d\n4aba0a0b16b0986cd839580ff1cc8dc4c084739eca39b68d0669b35ea1e9ee95\n6c10db54abad1f1a1dde32e5d95a0e11097ae2b74336d029f27f6f48acfb371e\nc1632341c8a05163cc16acd1a94d1d9a591e167839d519c2d967f0c62e52647b\nd6a0ed66679606d2663f29ec042d33ceea2d7a31d89234d70b9147845fbcb427\nd15b56e445ce1c499c665261cbebe93dd9fb8a3f54d66990a863aae745e37cff\n51aa6c642ed17ac7cfa3d246a538d238cc121a3554bca2850d653f0b53bca7a9\na9bf161ed9eb25e31b84c90083bbb95022b4d17bd695799abc1f24e83fb8c84f\n5ee46c4e7f0ce0d43e1299d99ff017f4f7a81f1692797133e876550e93888ad4\n2f69bbda038befa42c51ef654a82db11a76886c26ff69db8677d3ac4175cdf66\n47b6ecb85a9c8975aa377670cbb9da357e1b4080389360508acd77f66cd11078\n5f71456b54ccc11aff3f52603a02c6b621dee1407c6430dbdf44da587294e62e\n508eb8c074e079a655a5f8da46cfae233dd8e8d4add4d104610947263e72e7f1\nd5c4c69d256f41ee6858dc6694f99da81cf63e4e74b5374004618137a2e936d7\n9fa44701cc0739d9abcc835af08e300a57591fac544695e5c5f6ca3fbd3f77bd\n01b8ded4c324cfbfeaad94567f7c0cf12764830a208edc53049365effadca1fd\n4b3385b99f07f8a10b825389bea7116777f532aa96979cc7eb48fc5850f6080e\nd4ff9b98368053b0ea90d9449697bf9347d791a18c396c360db9e48f9b13f7c8\ncf12bcfbce0be43e2b52e36baa650cdc163c3ea930c1ecb2436a1e433e37b450\n69fe65ce7d27a4c29bf4c789baa8ff4c09613c040f09c961611212d96ad05bd5\nd016daceeac47c5374f7d6cee93d9af9cecc139f306c373b9c0e32e9229fd6fb\nb2813a3d1b419d209abc8f0f77d499d6d8e3907e94c62cff0545f5e416ff4b3a\n8adbbd817ebfcb669a1b2c08f6213842f0005e288834e6045abe1df17d556664\n271d5f6e4724d44928ebbc5665ae24b047826d426dce3333f10cb007a9064820\n8764985688354e04b1065d02fe6e76cd2de4dc59db8bbc76599f52ee07fb73c7\n3e81d7598c6427361dbbaa099447dc5b4290e74fbeb3700c6e97513efb46bcc0\ndca4781fb88f1b4b82fd90a399e7c93298f6ffc4192706e297bb0ee074b52472\n0e170e66caacc8dc052cc80af85ffa278274a8f6213e930f12421bdf98ce565c\n199177f4c3b179b79e7d6903756ffc79994b75a4f1b959636b5afaa9466a16ad\n72f5c6d00f52907d599e4d74630fddc99b44a79aeaf75f2fb8da9e2f8531695a\n62cd6b2ad58549db45c1b5b214489f57e0c0b1b2393ff26663b6e890c8483edb\ndd672b22eb541c8feaf7bfee15c3111654e22f0a83380ecfe154c635d242cb12\n668edf31d90c6166d066ed228f6c76413149e5c848102008f14cd5560037a177\n23c22311d647a2f952461acc2075bda665090ce22480936236f013a4c914ff92\nb650574e9584831d68e4a399d02bee84a37f465d724b7091834b0aec0c255c7d\ncec44abf3d6dabc8440ef5eee5a0656ac71b86422136806411506c6bfc7ee7fa\neff2ebdd9b383e2e468c29c1fb6c6fcef3a19a72010bdd2329a4cd3ed81b5ddb\n7b4ec9d4bc22f05a0635775662795276bb0645b354bf0d88e65b1ef0fac98a2b\nb3df8004b6dbf62ffc4b6a5d5b60ac44ec928f426db153b737d89556c4eaff85\nceafc7e456d5620cff0bdfc6376cf83ebe9f1f6261b8c494c238383cf3d4d4dc\n99b67c1af41edce69c756cde34d60cdd83bb5c2a799f56eea962cb18995d1b57\ncb1c9ecbd6845dadaf8f884fc963c0c873196e091ee977569d6b1555d0e8e1e2\nd56b8fd993471767b7a4e6803b5a42b0c11f438f3582a11566af97d5e3642fc1\n0685f0c7e7e6b9ae0d3099ba6fd3302c44fa6f4d04d5f42dcfd6d30139b9ce2f\n655e2f47f680b69802e969e7f4d285cd8cddd4e96a31c08379c86534cb74b2bb\nd03dc8ff3a027c4514c8019fce1514993457819a6dddfeb9b4fbf06f74c4b9be\n013933bcc0100919e7337b9c728c52dc36c74feeef6f35121727af91774be2c5\n16620265a04e48ff2d6c58258417afcffcef9d8003b2f61d73114d267e0dc4c8\nb25194071e4e4367930df1411c27852f03e8727359bfec157cc1e530c8f28d21\n3490b5c2b6c12eda25baeca866ba5e6e14d0e57d428abc8857f3ccc24b2eb245\n5a93ba68ed1578b43922bd2085a904c106bb62e79e296e8e64732de57a7522d2\n1b35a5ad7f0c55939aa948644957479323e025aacb86fc71969d66ddf514ba0b\n950f82e6d7125a6e10e2d0330062c8a015208ef08eea3e4ad6ee7142ba103214\n6a1eac1f5e1129be057cc83c9c75e7202be27e0e3904b1d47cd3d98b118ec78d\nc3b3e2d087827a902287b12f91be7e8103efc2b0c85df09f24e5b43d028a1722\n5cfc9341d1acd12507b0bc091722e2477c1b827ad6d46ce605a7e510397b0269\n3ae212e093c1cf5d6a35170a9d9b893108c7f757f587c8614cd73ca0d6df841a\n712bb119a8813db7e7fb7288a826a288e45654aff9a51b3371ea8c2b593211ab\nfd72526d9c1845693af5192bae0aa640e8440e9ef8158c6069bb31becfa9238a\n32990ef62fccf9e1909e8f07de2291281e2a1f118e40679be8fa676d85d10c10\n9ff9700c2dfc5a38899805008f75a472fd7a5938fde0eae335492028af9306eb\n475b0b02bc469a7e45d8326d7424b8f33f70d22aea963b31be57947abbe06654\n8f1f0021776e4e9de5a36eb44c65a1701ea18c9820e7a5b835deb5ad75ba5c40\n3735d9bd2a174c6bf95831c9424e70f925a3946858bce621b42cb1ad71c76833\n49a3a7cf85a1f1c8411d8d2d3b82779a4aaa632ae96dbb33e37a7228d70e0c7e\nc5f2575678ff83e8c1941ee5dfd9b49d410bf8fbacf5279e1f50aedafe113281\n0cba64e9db430ca26ed08e1bae0fcdab7b6feb52daee9368f70b1b7f0c69dd23\n3f4cc2edf3b166e3b895f3285c69ffd13bc2523467ac15cb40d91515fad53c6f\ndc6377e3035e4d9e014e212205a492dc710e01a925320c4ac193cb59a4a916b5\nfad91ff8da91b31eb72e8ef788f880952a087d526b1bd7eb1e762fa5838acce8\n182de2fd6818520bd993c0d2f5ca4532a18c077578b49687ac2a637e03e3f3a5\nea2481db65dd8fead1a547fed4b0020c0e4326d59acb524c65fd2332276abda2\nb3e238604776fe32228d0c43960791075144dfdd94d2389252d2d8bb0aebf9ea\n63f3bec0e793ceece73ab3dc7fb750d2c91d0b442c54f38b8db64709ec566f75\n317aadc25e6b562b9070eec69c0f483f63a8fa8195faa765389c21f85a78b2f7\nf262e9bee5152abb4022818d238f4cc73fabcd291764cd89b13565c93f2dfb03\nbe940f078df23c87ea8dc42653e5542c8fe2813ac95652ad001d57dd11b90a96\n88d4e0b4ac08caae2d74feb6dd9115de259a358d83f1dabf7c127ba346d007de\nb7dfdfc4fd7c68eb12b7089fd15435ceb18a72747af68632b2debcddc21e8216\n453f7d28512760b0c3c25a8076d8dccbc6b98a1d6100fb7c1dcf93eb30a1981d\nafa539047794912141927741237e96be9891ff264cd399c4aa159f83e4eb6aa3\n180beb47e31f3768703a21b8753cd92ebd81a49992f05c0f1eeb3c4683b494bd\n461e2efa8a68967eebdf169ee03e972255d868e036e4ecd56a0f83cdcc67d907\n6c29eb141e4778ed0f01311db8f1c869be9ff4108afdd9e2a7407a209fa4217a\nafcaf4571c2ba9649635de546a8667a6825762ea42e00ea923abb4e2560f6536\n4db50dac39d9be24d036cef1726a4fe9ac59bb38e23b19512ca772a053415776\na40dd0f148f1e2e7aa99809c81659d5a60eb784a7a2deb5b46a3f8197f96e212\n98884580a08199516b78fbd18b6634632f01865f4387e8e1c8a940272db79604\n1a4fea79ef970c32fea41b0db0dcf8d0ce4ba940b9a50b7493589737845fe212\n019d54bba34737911e24268cf2a36362ff3ca6ceebd29712d6df0cf1a747fdd0\n2b50d3fa6aff26f3e635eabba2b9e57ac890b20833fce797bcf92f807c46e41d\nafd6598c154ed167df29af4877dd8b42f1913a9860706b72cb6503ac1f5ebd03\nb81b9f6853e338aa0076b846e310c894d5733674d3545bcb205544b1bdf2e737\nf2425cc4fa6602c05aef2dc8266c3a490fb57edb6eee725f5c7b26bd58a337d5\n52695c2b84e35d0758e2011a455c346f063f5244ba4646f0d2ca793e8da03de1\n566094adfe10546f1b50a290a15af7725d660476d711216ebabc83635c47342b\n676720e460515ac4fbdaa749ab8dc5ae1fa565d3003099ea80b6a9b458058728\n4f9063f9a6bd78c1102ded4522c8214988fbee271c6555641032d2affedd1d98\n2c970a7345cf7f20191265a07d0aa0c6a3ba25af1124eb477a5715a5d2c17af2\n8c76a7c633fe50be2979eb214c51f98eb1370ce197b1f876a7bb6faac9b56203\ne6fbc0374ea811478e8c594bb8ca5d0929721d9ceaf4d4d1591581061bb30364\n79366078e8bfca55aa51f636b67ee46a0e8d0566ef36a1581502c3960c5085ee\n19f208aa5e5cd0e7fd5d974e95dfbe2046a3c7990b8612254c169b579690256c\n001da431e8538d5b49457663e75be3df1f2d09ddce45e286d1a2433bf545423b\n0c7311ebdb4a6422ff1133b145a426b22daa72a6f65e02907302247195785513\n6057b8ba2d8b57ca654f85af022c76aef4a790eb19bd3e7687a307ed1f84544f\n8f8a933b5271684681119de23a97024edcc3fad98a2f8646586a7c4ba5dc2181\nf00e409838b552ff1ded863886203117e11afc0b0e18171981c3fa5f1fa748a1\n0e171be6e6cf1a6bf8fa161c8b2b7ccdb980231e34c86582bdbc5f65364174c0\nd087421358ae5353ae0d000836165c4a8d3f7029e047641282e44780d2bd800c\n83c591611c58b8e33b778e397bdc79cfd1107d34dcfcb356681d1091ffe21424\n0ac2cc22d510792878587ac5cfade34595de42d90f4b92b9dcb59518e72fb74c\nc6fa18b3ddec37918a907c9aa7d504b95f99c214afddc479e8eec920cf022f73\n7bf09c99b60ebb9eb85f901c374da0995a4a1ec7ddd5a63cbc5c122d9ead04dd\n02adb7c3ee04348644fd5b3559115baaaa65a5b6d07bd130ac9259d786443d72\nd6f6986d3c7bbdf76cddebf1dd124f23096729443edd36eac8896023cc5c03de\n9de01f56d34a09f0b8d012c47ced4ff569d4f5d452e1fe6bd5267b8dd6038ca7\n77de84acf8f8a9f4f7b1b832d8932f3088dcf2c7d540a5a5e9b9a5827f1a3966\nb2dd65a1c1fbcbb7c7f2cf87c299544d539238bf5b811cf7294479f681cbb9ed\na51aeb63ac706da7550d71cee5654c995738d280e111f458010cf98d7352cf43\nc4ec5c4b716667140c572d5903daa78b16e112f5352daa644c3ee65e7e6dc03d\n83ee292abc9e0adaa7cccf32602ed2e6217878ff29b7bff261b31e93e11c98bb\n9c1ebd925cd8840599ddf0585f7a02ba5f6e15120c07bb11870d56fc92079ea7\n2db4864a51cfb428624a0af32aeda94595ca60c32d501bb4850d3cce5387b3d9\nf8948b71a11a9b9863fe351eca149f0fa9f6465a49b9a67bca804682c27358c4\nd551234d3914009459f55719c4c74e5b358c556ca9d9fcda2a8438b57f6edfc6\n5f0b295afa8b3d93906bc594690412677e81230eb8800d1b3b9ae41b97d3971d\n1894ac085dc100f94b9d67beb45742ff524d5e18dc9b0a4ea62e57f9f650da4e\n09c70b41ad94560d336d480b9894768931bfeb0731a2c912cee5daddce4899c6\n59ae6d53ce01a4d32128015dde5f1ec558b0c266ab1378a3e21992462318df80\nfc1d25f84f3f00269e573096098b4918b7f48a44a35e285d57b29f220f679569\nf950c72d6990144a12f224020c6edac83c7edfe325ddd64c5dd2eb9da0ba0a7b\nf5cdd4aa88bd226f9dd0714f40b045133c84a5cc8a447b3ed265464515c86e6c\n3c14d0a2888800d2daad9c541c15f43e40baabc58d5060916407bbb3ad6fbe6a\nc88e4b4f7090118ff995e245037108fb155c72d6b098ce0f7a051bc80f2278eb\n04b64468c7c241e308f286e0e82b54f66855aca2e1fae3a405505df79a0c6cba\n4bb3600507be0f0cc1206fdf01bc6afadcb6fed179901c43519a35dbe0112fe2\nd4d3314f86972e1fd201f5f21d479a3e980f3eb4912ab42bf7d1a8aa5ded4632\nb6390b875f4ab665f5b9d4eea9f355564a3392bde2026462c93a03d86a787db6\n97d3da00d99f583acef733b036122a18186c149e05ac8ebcad8b3caa7cd16340\n3404bbc9f501eed3d9c32887a27c395a25cdd6f3b2e35ac2a56b07f707259cf0\n2aa12a5d5986379ffb8851bb3f0850bfd7993c2878bc689ac0472b40dd1ccdfe\n569f0b607a2b054b3bfd947eccada6a97344ddd6e3bb34cd043b04755691e88c\n17772e19722b28046720a2bfab1b831f4aae3cc9a2e8227cfd46ff56caa6ea0e\n20d5b7cc258fd05a2d7c97f820b6f3cd754a4f608b2da05363561e98b83b8708\n8ba9365525bdc2afba88484ebc203db6377f21f2e77db8646d956943d4b03388\n545a881796d4e9b18a59f5de7b593c057f0f39341ef93cf833afbea0b3466b4e\n87a4ce13fb456512f056ee81492271010f9d0b7c87a85e46d3372c80666fe3f1\nf14bd0030afd372d3dcff914844d15d9cc9ce0aebab1e7bb31f350896f04eee3\n2936e348a47424ce7d8731a1a9af0838ec171d6b282f7d27c1d023ceccb33555\n5b25a319b1d924082866e4f0af23acd80b7f44b7b2d01976f2620b34dc02e899\n81cbefdc5be54bb4341aaa4d08e8b9e59f18033c4a9e81345c5af6dc0f020508\n8a5a50cd2214c9e771d96ea714b1770bbbf8bf677e4a7ecabacf8d9477f59d19\n32d5333f995f259ba32652b9304d4c835526cf8dab74ab4a1318842dc9b48fb8\n838397f4efa5a2ab639967761b4474376cd028600003f2d534f24e326206c4b2\n4863e38f8c4e4ff3a1a444c97dbafcd68bd4f3287f080112d7bc42e9bc4872c2\n1b3569aeaa6292068b5a57491f76ee6d1a24689f0bf829929f8d36e55cfec0d9\n1a17b30d13ca0f5a22d1c8818ac65595c60f6ec92c29b68ef970b2bdfa118e33\nb576e77cee9e65835a175e7bcbc383b01d85f59fc84b6ab3a03ccd194ec4a79f\n220cc0dc1351005d01ef54e4404178ffd17686735c7568fcf20a1b471e0a6da3\ne7ff425eb593f919fc664a5633df8e3f57062fda10befb9adbe59d3f21d12a7c\n8df9b78034c6d72dfa281eebfa03d7fde94b12ce1ad639ea67301baa458fadba\n07a66add59015cf5122c027be7016238900ee14c2b5317f7adadfacd55b4c493\nfb5faf5571a53d6e7e7a01549cf395cabf60bc0d4fffa0448ace9c1123a768fd\n0e35393afdd608b3128115bd681333ec9a864edd3dd729709896c188621a49a4\ne5b1853e5514b2fc845dbd6c575b65b4fdaf9687be91566cf47a22997fe3a301\n9a5bc8a911b1f5d187c3242696ea2c31aa1781a6f95028755298ff221e4c243f\n41bc5bf210bc1a3e6874bf4307ef2b911289330464485704e8a50e0144272c81\n75d906413752754c8fa16eb301a531021379fe7a847acf53a48d63df447eee98\nd7f551f8c97199afca0471fb46ede464fc2b91f405b6f1250a0b41847ae4dc1a\n9a2b7bff52614d395eb97ad86944db27f470470704ad615f8baf1926bb77050a\n2434a20103661013fd653513c247249315309ef31f4246e3447e5a807b32f9de\nab6ccf16e72800daf3a89c34277bde75a6d02599fcfad66cb3f010f77eeb3081\na06a5640285490ba0755ac091af0166bd81e38bc71a62df9ae3d2e8e17cbc62e\nff4f882f19647d88c6947132ce559de0730f32ebaf5253af098df70770320afc\n3047c52de82df92a1d087a4fec2e76e4adf00d5cc617f95ea7e1905c84ca7970\nc0857f2384bcb4d502447dc58f2099c0c626c3263e61cb3b3e7e8f74dd4d75a3\nadf2a1e8fa5a98e206496c85304c1f25e377d5ca34d4b9f4edc45f0bc710cd07\n0c72044a3764bd2196ef2c436d77333f78951f46518f8544fd2dcc0d2931bd48\n55ac4e645956a4ef0b24ed9f3d8b4b32bac43f9d91549110fbd49f72faf4130e\n3c329d65029f9606fb4e37f15ad99639c23940f4226e313c3c4d3ab9cdfe6199\n873bdd76cc59bc360a87c37cf739adafe315f34f482f25964447dec8d4d1afaf\n071b8695aa4f9d0c56a32b4d9b664688cfd60873515ef90875790fc9bc140d40\nbb4e7139c280428dde762d22e574f9416ae712e8df98710596a8dd3b47eeb9f6\n6a39b9d37e64077b5d056b8f866d5ac6a0cbb8ba7e962a991339dc93537bc22e\n6c6a34d6c30db1ed07e8b87de2cf6950f208096c9f6c9ff29325b5600a126453\n82d8eaf146186b2d87530b1838762c2ec6716f94659b6b935a63158300392a50\nda1f2a4ccda82fc3846c9aa88f282067bb1bf377a07d28a79330640d1fbe142c\ne86b91946ad51911a8d46e116012034550182f4df6a1342ed942819e0c36fd90\n304c93110653a1e6fa0e1b3f335bf737244dd3554b89a8e068c4cadb4ea7526f\nec091a61eb8845b5acc3ecee137820a68389e71ec21cde0114574925a5718359\nf543c08d50accd751f2637f8699e2b58ae7ef3d69b4ef1dbe347065a86819cdc\n492e6d46fd5bf58a63e078df6678f71b189c56fdd15f1e202dfb909019e25ffa\n31f62c0dc832133f5074da7077e1deff287eb6c67ac8e90e89429ca4a197b244\ne493e3a5be89984a8b2f48d6ac51ae118d31f5750c8416199d1543c88c712478\n6e9b613b0c8601381916755d9d2638206886012c8a94e3a509fd97d04b8fc30b\nb8c34048d12d4f2c21c930e9346fbb4e9cdfdf66dfe7f56234f8db18f63cfac2\n8c8374dba0fab6a3100df67f6b71f1613f3088ac91a7d0d3d1447969f1a807d2\n3149aae0706a166b1b22e1b3e7c4fcf8855edf32d8cbff5b8cea92c4eba3572a\n7a769a4e57feb825bc0be7cb3f4422c763646847544787b0cf0fa483d94c40a7\n5b5f794fe37c6b37eac85f2015c46a1c74916f4eaa8302d9d04520668dfb59c9\n529f9809385877e87d082e4791801a6ed73f22fd01f302749684064d9d5bf7c2\n760ff7f219375fd94d8891c717e77fdb3f4e13f782be03f34e5eed715540c881\n89df93ff94a0f3f32b3901c0061391846aeae723a64469f0ca220bd124fbd624\nd11dc9dde6fc58d94625f47771bc2ee4137f27ad1abaf12799e354127a9ee70a\n8c76d4642eff7f521a606b4e40911a7e020a8c23565cf67fbc5ed1392b8ae501\na86d878fbdaeba333cff3572670961176de205cd50d5e987f6d0df91f2b228c3\n396cff3794e0fd1a855aa9be5508516c0233ecff77dc0bdf81a7cc8bfde40a75\n4a051b0b7fa618fdcfcf1cb93769f5849304c4bf0d48b814274d2f4a4d5fc4af\n7bc4658b38addfd124f9357b077c0dc732b9d73e59ea40f0f1f3e761d4efdeab\nd7a96cd6da40f844fb4eb70e00d85cccba060dc0d3cd0d3ceec12be94dc54e3e\n811c2c4d9076d601181b6892c5c1d8765b2bba6900bb9ac215a1858ad78acfa0\neada7ef2a9e0aa3515f7d0849f6c421bbaa630410b6aaed2883de6e5d3d5c7c7\nac2a71f3377b7c650b3f78e15f3a9ce435c2f371d09dde7ffffde6069d98d0a8\n617e714abe16a9e442f0b3eb22cd0261ee02938df0cd79c17fb2965b1b98ac62\ndc89df1dbb1bc8320b5c50d88bf258fec36d768e3d4cceae535a87bc6243ee5c\n943485cff5a83fbb6016c74365bb734c080493f6d9ddd8f13796cfdd3aad671d\n3708ddfc796c2640833c61301671fb8fef2b88371746e1bbe62b597c9373fa9e\nc7a7ebbe8abf6e9e406bea97cefd91b019da85c9e54cf71e9f52b114b547777a\n47567454ee0c9d5380deba96a0c0e2c329d412b3e1eeef7eddd90f814b160777\n85cdf15d2d1ee4b81babeba0872b5451d66dd72a38a38e4263e63ada9603e9d6\n7d4cf799aed0dca2d5357ec7e386fd5042e554b1340203329b62eb19acd8d68d\n3207611c282dd84876eef2190f01fde7059aba370753eb4626de6f80b0a6b7ea\n503b2d4c5bdca9e9e7dc84da4b3202b5b1ab19f60d179b7ff78f9a97e22a6ce4\na93b730c1dfb7855c341112bb4c6681702bbaef7e547d7177be9c02377e5a23b\n3064c45f5f6b03084cf8b15ef1afd8e58a2c538426841f36bf5e99006a6185ea\n8e85b3a06ba5f35ed59068ee1a55db79ad815d2501c36e716e11ac1f2d99a75f\n85243990d1d91a1d9916a4dd3fa98476b38bea752ee4aa63770d7654145008cd\nf8e47668e0b384b900ecf41b4aab9eb69e152f3ebfc224dc8387c6b997afbc3b\nb8f02bfd03c7995e8fcd57af2ac2f312f9b88a2041467ee6314aec3bb5ecb25f\n8937a9122119169469d06033a6aaa472360ba3846d3be7686bf5e4c7ebbe9ede\n55f9d40574dfc8c0b90cf37ed5f3e8adda9818c95c3f6fabab866c0a04dc22cf\n134c22cdfc2c5f934f4b995899ec1851cacbbf486cefdc83b463ce1ff62b4f04\n04d905ed55e2fc161ca22340cb2835a0f2aef111e7af5117a2393c9077f3f8e6\n66e4c7fc339d65d14e65354809003bd4223c456a9dd64b21202890a336f8977c\n1130000238482fbaffd3bdf1c0edcfb68fac24e02b9fe1e4b1fcff96f3c7555a\n5bd53ec00c427b844eab272bb938305a05f3643b637c14ce1b075a3ebc8e0d4b\nd491b2c5b90c083766271044eac63ee468226d952e8442449c3fef2518ee49b3\n3d2a532f13347c9e11e3e53baf9088fc9b0b86c426f303d45e0a09e43952485a\nb1fcd6353bdcccf30a2b953f6be60f52a47e4951df38a13a12e8e465137b87b3\n6953e9babf2009fb6f91e2bc8cc160e81fabba5a912857a0fa8eb7b5fac5d529\n3836639c845a5f44b86b3aaf5a34e8e65cd1fc125dc3856e4f3a88485b75622c\nd434a967ac360d5ac61689e3efd76c05c0ab1bd6644d7e505508ae0fcba4b55b\n767fcf2e5603861cb9beae686355918c7159db7fdd096a9f8e018bc545da07ee\nd3419f5e64db442cf8375909d9347ccaba4b5a781be9bdbb7aad2c046a0953b5\nacc889215cf0e11a7822a6bc009d579ae0ca50aec158395fc2640baad2a902c3\n0bc4f885666db91983b6bee46b9ef86e511560350f17253d822bcf7d50199551\n7c323c70312ed0de4a6aa4c2422370f471554d80cbfaca99ac0bd010b2f2b718\n4dd8384a4606a8cbfb3aaa94eddca975f465ff43864d6f39b235d47d371938ea\n11dafbd0bcd309360134fcaac1bc88b5d149d3b1ba6188f66d69695642f0d100\n5bbd636c17e1ee1766e3b65d15583e9e59bef57047dd180202ef4c3993010738\nc1c6f85e545d38a8ed60f24795c1cb5e5b314476f76a0688f24c6a14036a25d5\n3a9cacdda825c58ff6c537ef03cf78bc08628a2c8ebc698d1637b18a134be31f\n847845f5e928127809f00ec51133c0d6238234a8c33ca1c2d0045cef8ee1eebc\n924f70a7a99a6c66a7de28275d4ce98d9aa2839bda58fa88db0d2c357018276b\n870d6aa199794cc440bcbc57d1712eae621c3590ce5c674199ce218f4842c77e\ne2c5d024003c1e0481e0c4963809dec27d236e13938b977b286c903b1e3014d5\nb21eca7ffc25fd1ead9f16dcd0cf7086c960812b4a6689405581ae9e34c72902\n7928ca9bcb8342a9c5b3d4eb87702359166a4eb5f286c5bc49f0bd1d7f6286cf\n6698930b4e00d35b6b2ae46c904cf2a6c21ec3318c4734f3047aa8267bf1ec37\n136fa00f0cc745e585298e48619b4c4a20cf4f40572d268d822e43cf58be57ba\n488471a6f3c1d6efff41b49974102d10c7ef18c6d101296dd0df5f308745d1db\n221784176596c168302f546e60b27257cd17a79133a9fc97600ec5e3d7aa49d9\n6ee18f505411329412af3fd9715c2ab867584b716bafe9c83b5d283e3dcfd127\n2d79e4891f431d77fc40fd33e2eb4a0764314c585da46a9d4f97a09be6eff786\n04d54ba789e362a22588203b21b0a6ffb5110ad7f8806f45160e456add5a2b9f\n068b2e54ccff0c2f42a2204ab0902111f34210a0e4a9b7bf95a18dace87f1f35\n7a34a02afffe4e15d412c86575577fd011a5b5176883f7e3c60f1d3833748297\n6179032b642ef3f4cf3270e1b42df1cd9e88b401b1fff85be269815300c18f5b\nfe02460b1ee2e8a9b1c8ec956fda009d07e4b12d82567646c72cf2d6c29256d1\nbebe6418ddc33d13c8316b9e4f102e2d4c7c2c14774bea25c5a5323832742e36\n67e646df288b864ef6dcfb26ca389b8c2652e6b4a9aee9b20a089204f94e89b6\n353415fdccf618891ab6694c816ec49da9d51835f190e5e3d8534e8c85311ace\nbf21d3677e6f66cca2e8c7a6386b63624880e3b2e650a659a9aaa63fdc48d557\n07f2dce64c77c3acc383509ee98b2b9392d44e7caeb70621ba808dc714f127a2\nb34998265a263d199924b89f007a6c0556dd0db43f7de06473fbc7b7cb42fabe\ne4a4ff32f873daff2137c98fe1b9fb7122142616b4390bd0078e81d21b2c4a1d\nbb562abc0ade97283d880f9618292552d8f8b62b377d90216f983f12549b3d89\n19347cd92c9525bf2ea1e46bb075363347e732e92508285438d508f5b200f674\nd614fe53796520e09a2c3372c58ad840e62cd6c2d925356aac3f7bf1b7738ea7\n0ecff7bf5dce5a7d7e193bd7cf174cdd1f8151f21baf98a995ef46a572802462\nb5dc3225927803486eb8ee9c6c90c15ad431e77887f5b34fc467ad3fafcb5fde\nbcf6af81b6eab9bbb0a3a17fb430f9c790f519dfed867fec0944d82965f34156\n262934d1e4e650e90a37ebe57d2c61d377d05436b1969c059c8b6a0317ae9b8a\n0414a5fcc72aa6caeb2877a9522fc772c53b8378fb8b8e0e235712a373187b83\nd72d8bb055d347ec03cf8071fb7c20c9602f2f639c71e64ed479f2df5868a0ab\nb9c4d2fef497ace71bf01585621000f86de2b6bbb8c1a5ed831fd394a91ed848\nef38d5bebc8661a97420746937c22786fceee15229eeadedd50ec9883351b650\n0199c94470a0571904621296e804fd023545234ebb26dcf8e68cbb7f7143c366\n2a20287bfe7450abaa8e784abbb3da5f2e02304e2bf107e31c1c4741fa6d3398\n42f2134a2d4db29be19486e032922f541021a3863bb69ccb41a103bcf13516e5\n49a1b899e11f07d146cfbd095cfb832c6cea1ba2931a227deb580273e6f5a0d7\n4cd70e6e31e37c631fe7bdab83dbab86bb3347274cc2301c23d55693058ebfb8\nda9586ec91d681d6356aa6c37b0d0727ee2e6dffa230004cd1d7a69e240621f9\n71f3d8372455954506f4066b2c6bfb9984c9c5ed99680600cd5565c194746ebf\n59bce825de6223426c7738de852d34c93f606ee962ef9b2f84ed0b862480d4e9\n5eb29744c0d070ba6ad130f5730c5e48786125dd374c029fc4ce9ed6ac6dfa1c\nc2577e2b9999e249291ed429336876a96117ae680e08ac9e5054f3c04acdfb02\n717c1694d145c02d0bf4384ce80db160de54e2ec926302feddf9c39de436d610\n205c3249f4db2b0858d93552014d451e2ced9663c7685ff83c141a8a013bf315\n8c3b7d1729dc9f699f077a57012f68d15cc259bfdfc0ec8b9010355525c6f6a0\n5fe38d70b88c57a2f2315685a2780e6aedace2b650981b99f1a755e170016775\n0cac25d007720c63497ce5cd72701220511c1607fb197f2bead3f6b1ce687e0a\nf2948d545d53524b6a2447176cd1e74e0875ac0c65fb0db5b80b5cd08f6f7e2f\ncc4494f4fe2c9a3b28dfc399db10bed25c68006b3fe825a3833878238c6c9b8f\n09cfdc05c7b4bd7da70264e8a362dad85407bbaf61d4fef1307bea381a51efb8\nbdc5f58ae5b0fe4f57a4b7b2aa9d3ae4a77e3afb1ea7aa15f90e193fd6c71f7e\n576cf77778d1974bf82689655fe724644d5c99f8b677cb274f408fb3e735883a\n7032ea2296d285fceb0ea61f0e5faca3d0d6d872e678a08668100a922c660227\n26359b9c697710aa2da2b248a1ec340ed7d9d14a00e89f191afa7cea81a4994c\n6b9a0d92edec77060da50559a0406a62c0689edf9c120357d8501845eef12825\nb99f131d80629b31e4647ba5863aa7c275298efa02d03a97b83f9fa41a17ca54\n314dcc0ed7c476a32eba2f9d7a66d9f796423e906d15bf20076733f114021b0f\n2d1582ade5aa69bd80616c7ff7ea5532c888ff0ed081542440c0195c5c198670\nc9b27898f8caa2cd72fab731c147681281cf17097bdaad36561724f1a61155e1\nf2553340c53f457c43f69e0b9f480b9bd458a0419ee037a03d84b2f999cb81b2\n72a739f7d0ad827f1b38c2ac4bfbcdc14e400465f17ed01cb4f047c1f0512b1d\nc89a94c2d8d165b5f290de471df3d15fa7d5c182873ae58556ade6e86b28c9b1\n3d07622ae8aeed896b14f9cd3b04068da3837075a84d5037e7afc303565600e6\n69850ecc0c7eb301e2bf271aeaf84eb09dc61229c028fc10e7fd270724ecef5a\n0d2e2c85be75bd11bc33bde504a1a8873a512b7c7312783bee6e9307f933fd6e\na5d90721e07922c99eedd5fc9900f85a66b356c56f32cdce3c7a6e994fb47263\nc318d82035e2b9a5f05b34d9c05ed5e95a6cee2d0904837aed3bedf1e9a3cb01\n0d1a2357386dba87bfd9c27783cd5578da2b0f5ea5560063c36dba917622aece\nc6393da617b08845abe45b6b3db1e9ea99e54bab9544c3173dae5e94b1078a79\n1b97f7dee35e902f75c1179f8dc828d12d94996e26e01678f4aaebe5aa43d37f\nde2d02d50ed080ef513ce3bc53e870b7c453fdf46ebb12d24fce859a8bab685d\n37db811493951e84de8694c18fe465ddb0a2adcba5184b34c62e6ab4e71bded3\n701c709e4820894f39ff3a5409ca27493c88c298970dacb90256c77af9efd88f\n69ea0408d3fdbd555b3ab988beaa62451fd7052d9b341f5f95813d88123754a3\n47b0887cb97f339db3a7d6478e4a7e4d714648dafb6656f8bad04e297bd8b256\n609c84ced1b423bd4423cbecdc6a6a4a07f42fce3f4094cefc66c84ec5a11df8\nab5e9c72a440e1be48b906fe7e70250271676479fd3261d3a1230962f3fa0c3a\n18db1b98b652776918541526b974ed694ee1a127c4997078b06d724d145094b0\n9487b765bd4ecf9f13368d85f192b450fcf35f031defbcc3f304abb68c780fc8\nd4e329beee6b32b8d302cd94aebadb4761c8d1e55e317ba21a8245a3a7b6524a\ncd3321c6e353bf4965c39739357f0442488edeef1da940474e76a64d83a2efe5\n5cfdaa37e21ad27785f6ffc572d750ea16f2e27d2dd2b08f5704456817288892\n07a209e6fe357d503382e387e57c00073959b8c1a267da6276feffcd9e7b0a67\n726fa7bbbf88e7d39a519bcea130364c4d00473f1f6f8c5a6f0848700166200e\nbc7f567fbe49115733de41d7d5a5e2efae42c4a6d655d7793395948d884aede9\n8b2e41e05a43a32ac425c370315f86ac015bcfd48ce58e36f306f4bfec554fb7\ndadcde4f3dff3cf0210f658d44c2ca26a8480f81a45afe339af208c618a5c6d8\nb3c837958e226f197a6ed44f01221ec9a138906a3b574f39f0fe3ead400f6ba5\nf558b9e370c3416c972d5e0133369b9a8214d29e18c050862aaee801394ef456\nb42cc3fb3c1c1664ae32b14c78d7db4830b6abb93e88542fd17bbe717d737ead\nca855e181f6fecfb8d3fac4872a0cce9d65752e54bda81834eddcdf349e2a4d6\nefdef8ba00948f8e3515ea1cc88b17fa46581298ac76c308c811db98644d10d0\n8130a4e7852050b58972110f8770213e663b20b82dc7c6964ff94fb4db0cf7f9\nb032ea1519005d98bde056e1121762e0526632479769857a840b3bc864db5c4e\n529c7ce95b3f3e7a8e479801a3ec6af7be6b770668743b6e37189d2c3f618209\nd83e9d1dd5a8f17e46e85a61569dc1309ca0f5fdac5da8493ff4aa0cea5afb9d\n57b70ee73dfd9af43d82a9b8fca9c0a63f2d709b11f0542e8b925d33ae2af35f\n2eb76135e935e821892db40d1d8b56fc8b94805287cea43426dd85710e91704a\n72136a2cba8dc2cc7e82df59c04d3e98cb4997c20cf513d26925ea9388e75558\nd91fb8640dc81f67dcf7e2aea1cf6bfc4f900fa8beabf81ebab51d5116299ca6\n448b98d431032d846c2dc960cb23c09cb8181e3f0734a63a735bb5b587d63a49\n6fb8016f8c51670fd6afa55a1fa00101ae972a881426ced46f9bec3343ff5f75\n6d301496fab359726365d6fa7a69ed4bfdca99728c29de4ab0d04b565f4ed2cb\naf190b9fe5d58fb6141443da95f6e652c529f38d336fce0d8d171763e1dc6392\n17849300b3b46388d90e4eeda8ad2bb428752ce2c9a8f54f10725df7b6c57a32\na9f39e8ab60c4d02981a2b194c01b7e23fd070173ba20ab8b5d02d0969b7cf5a\neae74ebae49467137f76627ba8263f258ce5a92ae7ccbbbf844a87d7700a4d0b\nd1ea13a79d202e1370ac3fbcad57cb8cde150351072a8addc01e66438ef58b9b\ned57912d50544f490b3f4315cdc250674f3fd5ef29c71b174a73202ec145df68\n75d26349462d14a82f0ef02f58ed81ca92f8f921628617379011fbbca58eb1fc\n12c67e10cf696fa0a76a5696637339afbfc89635010d92aae016415e67d02488\n49a7eb01f7dd0223275111a417d85249fbbe3866c0608bfa3e1b95987a363231\nf52540b45c8a4160f90ebf192178cf52435c664e07ac620618330a92a86ab918\n855265f3675ca5d7d400f12ee41a718b476443ac4642db447b3eba3643a58418\nc0d87e719469873efc0443d8f3545a6685202e032e04b356e2f9a581fe9f2ab7\n3e7fdfc3b9bbb342c3b87d87c5060d0cd515754ef964327b346982b0e8e4ed35\na7da95eef77c1f44509636a41544d6bf8c75c4134ba5a84035c0ff9d7d31b974\n3473e190c3f054041e203d33e7a8d873c843079b7ce4282f62817c269a9d1e74\n67159e9931fe444dda75e61e26d554b8a1b4a8b347b2dc3abd701d470093ffd3\n2749d7d274f3d294999b0c80368b0508498829bb49867cf0f096e7a53f2b0bbf\n89e25408f93c304bad3175d0717f77f3ff0426937a513f162adeaab8046a467b\ne4b46a2b28f2b710c4c3e1299aa62d4d37ff5fcdb9312d83ea7f67e61c6f381e\n08a4cd65c71008809fd2339f4e7c03de4c4b697bd6b706e1cda8b583c0088725\n6921d2f07936c633b2e18b1cc5960486cf9a43b49be59f721e0206a95c71e81f\nf917d25acea663912b4518b018778923811a5b28f4a0a9796478ab20dbc67e59\n8a122182cfda63957e4a26d08e5a1c510c723259058352c1f4424d0305cf4dcb\nc2175d452e47e7b4056a75141fac32db357a0686eda9e9fd7d51f17ae2a3f48b\n111079ce7582877aa2001f7e7d1548b6d701c5028704e0c71c40cb9d7677ecad\nc9ca2b0417e0846a4b747744df4d08a1aed6fc8702b58eec5d260b870046cba0\n24819da12ef67f0f073d20d5de79c5e9fcda8cf6e59b9c61c8742c8e43538c3e\nafd100544bb031a47a2e5154abfa3a8379879749d2c1f9ffb090d55f7da18aa2\n3ea6a89fde11b84190a54e29f607496b5fccbcc3fa1da762d52ecf7b1979d2e9\nc5be884fc398ec87c23f572785a4cf83582da3d03cee2571ffb245257a1181dc\n9ea45376b2cf389ce47145d77f414b9c1528b10b66ade161c8e76f5f01db0052\n9b8bc8bef375b8721c80076ae2e020bfe3df5c84b151a6df4322a095d1b56a4c\nb19baf565ccebd08f06e25739c743a1ef4aafc44ada66492c87aa7b6fb8935bf\n8460a0488eb6867152e55250e073e988073a2a49e261f2b66dde7e521d683ff4\n5d2d2c9421e5780ed85b9b7f85502f3c5e62a2e0c458e7430ceaf0eafa02aa98\nf4cf886a88f3743bc0f9fd74db933b5ce3373b4ccc66188679dddd147873e026\nac180086b92954a9a2705d7f2f20b20284829af4f9ee037fdc134062febe4d53\n6fadb4c294c0ff4bae91af784624aac3c4e9bfd727bf0a57633c34e96bfb2bb8\nf3d7ce00fbd810877976587606cfea18ae626242f88a845d5b9516b346490c39\n023c7f7c0a9e8293c67e2f72579180d17f298fe7eac14e3c5364122b2050a6a5\na30cd414f66e3032385dd173e19d161fc996e77bb81eb94eda73e4b26efdab72\nd2be0a2a0d381c7cf3ff655a55eb75e26ace8513ccd4cb8ba46256c5a334df2d\n663c3da0b1395eb89b067778fb98e0ecccd98b73cbf6f2fe070c5dd6a4538cdf\na8cf8c4393046a4847d422715499ddba705058080728e742babbf17e84fde53a\n8032a59def1591bd6dbcb3b47c2597a9a60c797384d0278b772043a1448f3520\n23acda8876456a3b94c82bf6822609739a06e6c1a8de416ddde8d16c7bf01155\n46ea6d6d6e9f165f05fc063edb571cacd4bf65d74c9fb903771a34fa9a99bb94\nd72052bc9aeb1aaf93b7e2a17a08a55af3cbcca8503d552c7bbd9659fce2617e\n88eb49754abd4897390768e4bfc3a9b6588f3800b9440f338cbc0c79ed287f82\ndfc6de330f8988cf6a2cb290fca612a1b8c4f1e9578578e2c3f9b102874724c8\n8a1a0af2288962beb2700cd79a9f66dc348981b798bf30ea82157edf08b6e876\n9773656980064c702d78d3c6ad5537d722a3fca572637bb98898c948ac8c7a80\n2e9b8899927c5be96c412708f1c988033e09634f84ecc6ee2fe2aa0e80c9180e\nf72abf3c8833d6337ec4c679d9e186eea69f454db4dd4a98e968fa556a2f822e\n24343b79daae420a0c990467c988c33cc3583a806c34ae5e8815bd29cd535cbb\n623c01ad938372b98db31058f32b8c8303a4675edbea04dbc742b5f6f858c9ea\n225d41d387429a1674b4179de9fa0758465abdedc439c5188e981be7d0240adf\n7eff1fc847e968547af03366df2840c1d0bfe602820c16aa7482a9393e437067\n5ea47070c87c9385abe1bede352f107d6c1f8bfea36212d56ea915fa39f69551\n38b92eac8132991714559a28fa18c3dbdada6d48d9dfea512cf591ecbfaa0319\nbdc06aba2d52c8022156324cbd718b6ab3d7623f45438890e3e6448c184d3576\n2ea831c947e30aa163372a2c22e52d573a37f132d137065a405fbafb1322647e\nd2b4b69ea975c8e9c87bd0ac2af84c835f6bd05338fb3c067f1211d0309dd67c\n2b07e66ae6d5a3b62e4bcd9a3961ed667a01ef9d3bcf1d2b504e5a72801c0fe2\n13f6ee6f0a8656451df8e6b3c675127ec86bf74d265135f2bcad9eab496039b7\nc9e012eb6f7032c97cbb4f589f0c6483356a7d0d6a0d5926315b3c5c9362ecdc\neff3547796fc7ecf5b6c9e0c2445d88288cf0ae84eb1b0b074da2d3960e27082\n3a94534b0517cf7943e007b65945856ca4ecef56c94cf33cf0564f9ea6a686fb\n75b14cff7ac5d96a9e3b8f2806abf77035021e2fc9a6ca6ed32941460ebcb6bb\nabba0850204e3b99cadec260e447f6bfe3fb0de512f9efb73c0b76f3661779cb\n1b5fc401b7ce7c5680941632a4734d883c85fed2c0445b65f826793d9237adfb\n1026f608831b4a1d51bb6dbffaefb425aacd72d15e250e7c4c1f2b8b4f80eba0\n9a2ebca61f0e0ce6e1e8553c244e2cdd4ae1ec2a86981a70d0acd08b99e557c9\ne78e6c955ea3151b6386def808fab512ead3df4f5429972348b39060657f0531\nab21a0d078256d2e5c0999b2b9b81a7ef0aa7d3741abee1c2f606d0c70fa8a08\n2cb12c3936801296f334e0c11465178918f628bc94d164d0277c999fc3581180\n26cc7aa0cec66f7954c7c889418ca8e995f15a78f5161b78d67a12d85b1028c3\n13f569c083826b7d4e83d1030050f4986a0b0345e7b6b118aa3cdf17572f279d\n8798688209980a297ed5763ec39defae97927782825cccc65eeab80944b3e4cf\n691d0cffe774f395ef9f9571b0a0cab031b42f5829631e97ce5a438086dc8740\nbab48ca59bf9401747f4a36c9d03916ae1df6a5f48ecc67fa5c4cbb67dc93127\n4845caac7c664a3cdaa68d9cc658e44d1d430b33dc451c60607de1da0fba69dd\nce1c082d2ea007e5be7a723da8e1752c56a96973be728731911947229fecfa54\na4a193eb8b603a61a4fab26470cb0cf734d123451b5209f9205dbb684677c93a\na306a354c694831dc1469ad07642d7eee7b09f7daede2e83c23945cb7d4e95e1\ndd9b1d7ee556b212562969126a743763318bd75cfd3bd900227dc31063c3cbe0\n4297ea043588fc1ae4eeb88184745b771153885b455c43f9a856081afa605bfe\n13ed4ed6661e5dcb69b98757aa95d96da5d8260f0e7bbcaab6d072b9509abca8\n85b3c2fe3028b5a5e43e8510b31fd241d8c457e892e7e0d8fd316b1ee7456a44\na3909f20951e950548ff41571c206c72d9f597a1dcafad19ea0e29859ed7774a\n477741e0230f054d0f815471fba86b8bd00ded7d05d80cf39497b3bb434c5869\n68e6c343c562d39af8a34bf9816289dbab30f37301fe19cfcc5ff9660d8bca8a\n9cfd02e55483aa417440c5101ede59e997a50494ca2e20895194566c8b78d7b2\n54bf338cd3833e687c98e1b1214bed4926802d88322de87b89fe8a83eb96cd92\ne9f9b7d39c322d7be1932da95528ffbc4ae740c367053c9511618d11364dbd7c\n0b5ec204cbcb88affc5172dca52db35465df886b71d1f9f836f376017fe69967\n877747f6dde7c1af478c028ccaf25978fcea2e84df9e14af67b4c71750e38d46\nd93fde0728da18663b04d843a55af2437098eea59fc4fa0cd562e5f3a2660fc3\n8064037a133fd2a38247818bdbc7e8c4b5f44c1f6caba612bcf922cb0b709522\nd8bafaefb8c0dde1a5dc1be97b7eaf6bfb27674c74c1a46829cded17973f22e3\n1be37fca7a71cfb258ea74a148a0fcd88367d475ac7f1516b27c969f179c3d17\ne2869e778fc329cf706167633887f2ed719946579fe926933a5cf1e29d5a4451\n00131292d5e355ec978069fdfd0312e47b451a717470ca9678e343499bc6e190\n18a56f4523bbc5ac87619948f5353941cfecd232ea0812041edaa7f190bb9dd1\n2f9dde13cc1a867b5bcf75772d361ebce978e9f38d524e9f60019a95a9366edc\na8a7b527372479a27790ec8e05e897773ec63f290ad0796953208e40a0c2ae44\n178a4cd2c5fccea95c552d4b5b1a9f329aca6e73343ff28262ae0a0eb9001337\nf9bba144a90c2eb435c0b1156e4df1f364280870291ea0ac0198f069785e54b7\n05a3c19c6a93c6cc9eec1ca7c83005c891290e589a69a6c850bf79977902bd28\n767460bab54cd0e9ee9cdd97f932f9ccc92732da1c243fd17e268fe0fd4cdf92\nf23d4d148a87644ff2ecb94cb3674e34c834fc03292ad2515f20313319f55155\nd5159a86478bc9b51e228fd4c5c75e9fa27cbf457be922b7f0800d53f53a1f62\nbdada98287a608df2c3f022a87f131974de0f8dd2b1920123f5d1948806780e2\n7ba7ce4d6fc0a3a283aaf17c9fc7a7e7bcc73b200f405eecfe81cb3ecd96f9ce\n2d0ed53ac424b6cdbfc6ae9e15fb8958acc7f234302ad092e3b2ddebb288827c\nbdc2cba43be6eba791e242478491c5a15788b5a7c8fe25418a447a428bef9d50\n73b586adacfbe10a701c6ba204aff1e6ce0375f195754a48db2ae23cff5daec7\n9c93c40c6b52b197e311e591a9a1c231de90cdeb495b40bc4cfb4716646fb7f7\n017e8a8f8f23cccca6405090ddd34d43d373fc0a678b6ebed8ba66f9271b2f46\n6b09fe96f0c234f57312f1d84cec1e43af4c771d41e735fac026958b638d18e4\n3fd7033e0cd5a39fe55c9a6fdfbf774d9717a13e6575efaaab15e3ee791855e9\n44c4e8f418beef608507927a88b2d8a758c5341fb00765bd7f6d9500d910c71e\n6469f507c9bac634d36b304afcf94304a9d01f64d1d2b42fce73fcde97fd5081\nb2345232834a0bd9fc48082b652b5b9e5ad2cf67b848de86ad8b0c2fd34cf45b\n98ced4eb9f3063bdcd785b02897eb3c80705da1aa5f7ac92d776c67e630bf7a4\n5bfc6babba0695c4908dfe8b88c4cc7ad000d414981c097668bb0efbf470c592\n40f2853dcf71a59460bdf0f7036c5766b16386ee2e0f8eff5ac6e8de130c690c\na0fb2df2ffe2d63ee456a145fb016ab5ce8a1c04851f486f352c9d2c38df2722\ndd93a3ccd58e31c7a1c80b551d19144ecd3b102134f7eb78566142ce7e0c7441\n7ea337ff7ba0f952270159751c80f3e83385c91c5622d8b8eda5e465684cd1d6\n16bbf130d097454068b68c5360075575fdd8c887dd33e8dc31dd676ae29cbdee\n07150ac59782bcb82187dcf7633310334a164ff03ed83e74f11f04bfbf630d64\n659c66bd6cc229cf46a9bc91d055df43e68bef190d2ee7133550a7f554274c06\nb0920f60877fc44b90e1f314f1f631d8362bb6f4730f8b1bc205ae851ce17296\n1893bd1b179dbccdbbef71e1ac372979540f9ac7d248775288d2bdadf0213a7a\na2d1b81939a0af7ffe6572098446528fbea73f5191a77383faed70c82b769395\n9fe8bfce8402afead09b56b3ff97a2e9b5e0f03c8db3c0953d9d8a227a261b7d\n1445a6598cbbcfaab5779ae3e40b73a354ac9c7f72979571ba8754362e5113b5\n8d9d5cdf3ba778df2ca766a6b9e6599c135b179fd77657a99d95231d111c60c0\n29ff0e31a12b778edbf3ca370eff83399784a9cc8d37cedf5285a21863da7ca5\n912d6f0263305c1f57ddabf21f41b85875406212dded7926dea0b70a805ab390\n3710c8b851cc91a93eb401b51b157319ee42c9c2ac0775fbce9edf66ff4bc50f\neefd104f9e7da6d55978e1a37c06767fc118a883cde158e92138ef4d17f39228\n3380194abbde4741470bf848c68197576b3aab5ee4b1776f7a16b6e6b42e463b\n1cf3d31eec4370dba36e34bc59dda7bc1df5dd438993091831d210c48cdd6d46\n48e2845f0e8f8e29b1e219798ad0ee40b81202c1ce093653627c8d363aceefc2\n7b89c5c24355e8a7479550807c7ac0b6641b62df669748738231a7e7a5c8fde0\n5b5189852033c70a08edc32c5e090df36ec8c88e01389f808b3950e8561d4732\n81cc40b96972d9a2e1c3382e6bc2a40e347a4d6c6cadb5feb3cb0819989d3e88\n1481c61dbe357e6c99cf74e2304b146fa3366e58533a1ad1385f72654354d7a3\n23e26f9cb5bdcf68b1763a5ba53df352865120029dfa28cbed6e95f72c41ad9e\n3e6d0d732b39347579f2b031972d0034d6cd2b52830c6d6f511d04d6ce983111\nb2b6f233baa3d072f3fffb663f663c89f335cf413a53ce2c9aec4d06fd878421\n87902e75f72577586a457f2edbb388339cb9511d273e2141582443f3fc6e4102\n8f32f946b7740ec0d71053810b8c82da58e70c3fbeb5f303ec8edd57f1c74db0\n3356bce2aa7c51845d46ea95da66cce57a4da66d424d49f316394ec3fcf77ca0\n7c35757737dea575b38c8138e4427e33f0b6282f017e853aab9a829906da292e\n16ec3f97512e3b8eb0b1761b382002d6dc9348c70a449a2a2c8bdea987b15445\n1339eb99b8022a619942941dd8f714855b4ce35dd20ad593ef2cc9d07057239a\n790607cfb4c47d44df1921778ddac0645fb3f014ade20d9c2feb02c078cf5428\n4a9497cc1f7c329bff723404d28d9e419f77b817df268de004df45d0ea95846e\n54c2d650f475896c12e99182a9ba4cb7066d32ae03895a1a3c8cc8aebad3fe16\n7c3354c4e39f4e3df1d8760605fcda5c832a7f41e166354dca43171311e158a0\n324047dddf2f53f66667860b1f35fe9ae218a45472352ca8809d4abd0313508d\nde240ce8991b493899d0bcf25a9b8cee1577a2e0524cc2cd83a6a5a2aa528ab8\n79740e0a8a72e907c4daad35c20df2cb07299dd50717fa6bd2ed7fcebdb1e0c1\ne13e0d95e7132446b1a47adbdb8182905e495cce1631dcbdb37ca1dca6d92a42\n6e95fd17cc0d6ddfce8ddb5bdb157b90de0f6a401f7632eceaadfde2ded4d299\n168e712c2e9982a8c1ab93fcf11dc2e235ea08e01db00b070aff4e8b59a9a248\nb520556a22a3c91a1c6a29d8c39dd658d0d853c4fd973a1d176fc6c1ce35e2c7\n9316b32b96c3b05a42b1d377b8e4d980c34c196e02e41a87676f52e15018067f\nd72f9a6131a9e0a3cd7b1124ce353ccd34116c1cf0591bbea938821ee1bd3caf\n3ccd05d65e2c74a315faa3d2ae7fe66e6a64080dc362afe5c3ef572b8466a67b\n502f80db51f2291dcc81108cf38869f52ab76e04ea944052c8ea5b73e29f2840\n672c7b5055452325a0b2277efc2034501ee291c67e1b7df80c92f8ef53e97573\nba44ccf99d57e18d29b1f9f39ca38a199b371f4032be5d78337f3fb5ae355208\n1a46c040706f787f65cbb281c416565aaaafec0a84dcc009b7f3eb57275f1b1a\n56a3438891b0a33777ae4b90d71cd2aeb2f683533ce4af0c0a17b07b88f136f3\ndfed76c2b28756667a03229c52e1e3460514847bd4866467b1d4ff9e7b2ba9be\n75edb0d9d8bc351226c557ec62323a7d42890239b2e6015198a8e630351cd71e\n9ab24de29cfe511fa0379733eb0966d62b1d6555d3c03ace31529aac7dc1f8cf\nda5e5b3c475fa84c18e9eb83b8590eedc660ab161143241c4913e10860f63a0b\n174b9d12b05b7bbe4481e1866f03ce2d112142d470cc2ae0d6c9d0046e157eb5\n2d40c9215517a70f9a42f18d7edadc5ec2840f126dd26f0c9a1d4860eb8c9e6e\n5ccf91b7524be3090c613334b3f5e52eaaeb2b13bf62a3050ea967fe21e98551\n21b3ff49a68e39c661dcfe0e97840052e91f16428ac50ee0ae842c89ea361512\n8194009a9e0bb10b5c63c886f9deceb458db7d845343afa2dde4ca1de2f80958\n70ac84efedfc7641f51b7c43786994f41b19be397cee3510424dc68126fec6a7\n87398ec63f957deafe11a0f7ada8c89159fad8e3ff44a4290fbb0efe8a52af27\n29e74f02f69b2acb2ec141ee2521db80890e10cf78456bf86fe675b87f76ca6f\n563b6b774e06b5fefad57ee5180c48d9f40d5696fa92fb2e1d30081e9a8a3165\ne39421a6e3561d36c739275211e97675e5397586b8caab5be84fc8079fa2ea96\ne4b2eacbdb8ebf731a167c8576e6a3440b2a163d5f5e4afb05645e19991154d5\nbb9ae8dcd148285bbaf4dec8d9ee5c4cab2784ff6301e0a98a68546c8bd30f43\n193633b0d203f99cf4de8a45a7f7897491d5662121b214aff50c5515427a613a\n436d007f5010a56f7c43903fc413438ff94e9c2f9f6bbfe8245a8d9d6e503832\n15c65550331f0e5a6ae10e7e4b5b52a4573d39edf4bbaa0c6ad1201b8f5bbf42\nfa371368126c5ffd6723b2c04123cefcb89f8fb2444b03a47701ce7cc5b8ccfa\n81f5ec72a4fdb51fc802236205abb475a0eb2fdfe069cedc10e2221f8a243efb\n446e95884170f56643a4b4dfed3ec4acca3e45dab31f6e6a5a4347dfd6117c2f\n212103d7fd8f0fdfc9d8083d8462aff80b6385a96f694ee006ebe7144488e6b4\n8b3764aea976c5178a2f035f24b5ed92091c2fdffae29982e8f352d49f224870\n503a471ea2fc96416b2fe4b4b8ac813f505d2bf18e6dcdd64bf2f167933948c8\n197b8acd36c4d6b6c0d95e720d7497e8592a07715099b5a7f69b5a36f0a385ff\n8fc0ac9c4d1b0584a0789ccb18535e9dcb835a6bbe79879f42182bd88e8e3e18\n02114d403aeb338596111430f806f553f9519f4e589d6aadd0c5f7020fa38e2f\n122111d4b2e0c869d0e57bf35098063336d7f968c5005b690a1a3a821227bf5b\n655499e126c87d3ada24b5728bdf279b711ece03f9c2ecc7b7a79b25d83bf246\nfa39e3500831ce106c8008072ef14a657847935c91ebbc6bb7dda9cd0cc7c65e\n687ff2248c2bf42740aed73b831955bcfc414e7a0eb1f228f707d58986377f57\n262fdfe335592c6a45800b46fb223d2592336840bbf53b72219f0287b402407f\n583d661d369598adf3e8b4407cbfec4b2b7cd8e5feb290bcfa6a34a4938e238d\nfb0b5ccfb74d6fef68f17aa6185aa97738e9de05f96cb7cfe1cf09644c8acfcd\nc90a8e5d730965fec38eab286b98e1073cf086f852347772cc6cbfcf15a70409\n87a1c26563d7101dd0fd7b74c04ffb5885435cc9ed52e5e2417601d224ee99cd\n0bd2a8efffa03e75ef6bee027ed6c98a1c52e4a04ab667510c0d66c3b6eb4017\n950543f0a1b6ad0d34c789a82d93d48221dc28678a25f88add97b197efc8d033\n2c38226613dc8304848878ad7f1f76dd7d50a0afd6022ae5952dedc2b89a2589\n85e7a2877875be37f775080de606cb39b90601ca584b66f173a2611f9ffc0c7f\n26ba45788e53a0d29aade81d31f7fba90763b1a6384c68cfc8617d830afa9141\n4a8f75c87f37e487c0aaed4cbe6d9c0293aa7213841142d6603ddd830e6af3ae\n3c509e714583369de0b36e70fa29c5fc916b9a1abdcbd85ac52361284c404c5d\n8a64fac57d94d61969e8824fa0df2586a113e70e0cbfae1ef29cc3f28d73eae1\n98ebe4ebd8469331aea82fe4554ea07662dc8ed4a26ac829f1707172d3461edf\n9b786213cffc696c276cbfda0b869d49bd627efbc7cee1e79f80be893bbed428\nb7cf5d9d29f926f4a06e947a049f3ec2f935b194379ffdf8cd10297c20839883\ncd0ac5b0d6a77a5e3b44f783dbc5e1fe83f91bc256a9c0bd163a5d5d42360c20\nd2048c3a6ca7e684f10fbbc8ae87aa1d60df6f8f50077b36e83aee39479ac291\n4f5515add4a2e46b8c6c853663e3b4081e57bd9ad1c477d185503c8c47f916d6\n6b21c7762c134b13614ca91e7067b41c30ae8c5129bca83e0c99bb02c7065eed\nea731e29c5ffae15ae65881794342fac5308545bd37a4a18450424b02e8ba5c4\n4015fe5f05f628767472a96433c4f5b7d3c8835d7a13fc62042423c4b3bae505\nda978d2982b2e9944e656a1de71b19d3182a290d1f8da7762dbd0088d182694d\n894d32531c712ae8a53239eafaab1654b8e8484c464026537e2fcb8c9ada9d6e\n070188242693fad0443fa03cb7c309716694b4412123115a42c86ac3b734c421\nb3e96e876134efdbaed532918225098f47c6249db4470dbf4381838c809574db\n87792599e977a5fa97858b6d4173a2b8bab0e56dcbe04f13bee6b50d90ac2d7a\nd8a3bd0b657bca23cea67d993abc4c342148bc2132459cf928e9c1882f81b3db\n97bdd3678fca7023dbd79e1ba9281c30617527220f6a9d01d9b7d91447184294\n5271bb3449de1441a20250efc99df772817104ca84be7824368a0a1beb7fcbaa\n5b8dbd37dd8c11a1f826fe974ba0a26a69d0832d67f3efaa80de3d7c1ee14716\nf264cd875011669a695d108287b1aed0e814aa266f88f0adad6ad59bc380dbdd\n7daed2b962ad79bc4f2820de44c62047f564a1ab2d21930dd9ccd1a19bc089cb\n9d7183a3a8a23862218ac46c368c5f8d4fa82ec594d8fa254e1930bc3c98acf4\n60c5fd4418439e16ba0ec15ea3c5a4e8741671e39fb84c2922e8d4a2304d19d6\n6201f828660028c5497c69b11b278f24d7bf6cd2bcd6efc690785d52f00dcbe3\n26451c875de811692f133bf162ea63603632732d818cd09197648123fa431ba1\ndda782805998c6eec82b3a85fe6851768a1919b308bf7a78cb34e715c7ec9fdd\n81e8376caba7ee44813275d97a75ebee6aa78c2ae7ff9d83848d4112b6b7afac\nb57f0e9b84b854561d2b1ca368fe2ea8a01027e38694948f4b84d205c2e545cd\n7c12cdd7d85a80d5d692a34bd28ec1d8e62ecb8476e56c4799de59d7ca02a768\n0c3c70d4394a6feba21caafbb0bf93257ffd10884037a42cb278cd4a0706b8dc\n872b153bfd9ae3642985fb1691f975988683bcaffbd95adb10ca39c8235f2e01\nfa9a0ba1666e71d62aaf44ec5d02db12df6df7f9e99a47038e038cc2e60b857f\n29c2753692e8b711ac6993c6bb3e39b61c066125922277bc94c5b6f375c21b7a\n69ce8e30b04afcca1a89d9bfdeda32fa2371536a8fbddb4cac691c35b3209527\n1df7327724872678a0bc18c28109244c4e388ecc34019e702c5336fcfe482a0a\n4a292d1673e1fb5f669b1e9d1a8edec87f60cff527168421f791668989d71f68\n903e0ccb750209c7a192fa98dcdbbe86f2b409bdefe251f513b35e5b4dcb4439\nd4c4ba7187e34ae32d9e5cebdcbe76cd7fd3805491db0a22caa715e99f31d597\n84bfb10b84fbeaa42b859996a075b2e2f5f920454da25667cadb79f2086ce296\ndc18148839988ab60cc0da451f51841dfda9eec6f741c8a8a3b392a6bcd6d8f3\nf2df5f3f0c1d7bee73133e578ab9ea64764e6ed3a863e2cfdbdf438ae72861a0\n6f0adee82c62ed345e7625a78b89a2a8068d110167ed0e542c4f5c9658478c54\n372cc7ab1706616e67379b61ff1acabedce7e0e9f4a45ea657c43d313f7bc7c6\na77bb90faf1befcf8c6026ba53deb8af9bbf9e76eb7c7810031d3a62a3047fef\n4baaf9604eca731c9aab066e50f5e26c4deb7abe5834b73a8c15aabdf2bc67ad\ndf3d8c42061d443742ae79a312fb9aaa8da92269bb25260f0f758d0020a64701\n6adaed256d16a0938322a001c3b7b4df06f029093e088e2ebf84e9f9b7f03ec9\nde031f9254992d862c23f2a9054b02493ea9e8ce38a955720c9abb84e906cb6f\nf52605a7b4eb530322183496b1fd6f091b076f84253a43e5f56965a97627ffc2\nf884d75f8728f272c3d47d306150a6eee7c1405379d331d2adbbc11c82ce9226\n6795bf88a75023ae35fdfe634f3ad2d7359a102d329d210107aff1ec633432b5\nbbf3feff0b2499f5ad93261c25ce2dddb3ea20b26e79aec8bb107b0788fe5d1a\n7ab9169f923effcc1a1b7b8a81b7fed5cf61a922bbaad4e354c0c8e016dbea1d\n5dd1d24146326d82911993e2cf72170e17ec4310867f17a116c75f337afea954\n45ae7e16fd43a004b05f6c13878a10bb0a5f785017842569f2fa4e76d96c83f0\n1f79c3cbcd79ac6d95643cbaa555366a36dcf3941f90f667bf737b646369ea9a\n08bdcf273b76dccca6ffb3775b25e96b13838c02a375ba801f67bafffc9715a5\n65b07848791bb67dfeff7a0a1d9ebd84a17fec62781e68b9866062af8fb95b48\n5be7e3bdd38535370ccff33ac6a9f479d77e908c306a45ee253bb9acabbb338d\nceca5400f06ddf3c1114d472118bcd9a9a5d873795968b6ce7ba55b42f0caf95\n2e1bb3188f23273784683b86631cba00641fed68290ce1bf48f3f6d91310630a\nadd043fecc95fd2779b616caa3d6f899aabc030015f799c9956e0ce71aeb69da\n920db0bf43417005839e7c5ebe08ffa5cfb0c6f25c91c728289982aae002bd6d\n17401c42f7ec7cb680fb8c2fe614368a2599afff865ebee6a5508af4ad27b8a0\n7fac1f2b2e99c22677b9ba346d4bb846c0f06b883a08bd36de605289fc4216b6\n8f33e57692fc6fe6d1392d8aa8bd0aca82016259466aa3b5c550816db4d752a5\n7ab55c4ec2e592ae006b54135e87a1477cf30971aef579452337eb981610012e\n4cad5999d58b183363a3fe36fcbca3da7538eb3699db08cb411a0d369e3046cb\n56a7fcf333d08fca0cfd4dfb5e268dd42b8162013032ca37a46ce0858e72a212\n2cfa1c3ee9315be5fcf796e34f4c95a0b13906ac90275ab04879f32648276eb0\nd205bbca608aa2a6e95cf202c7e1eca9c33d851fc67eee832fe414f78dc1be04\n00f1340e91fe39bdb5b87bad3b19cf67c9b8d6b1b0707b40eb8871aeb3447377\nfb17aae00f0f983bac00b72cd32e426415827f130e9480fad4bf3f54831967d6\n3c777d15fc50de9e2dee1e9292db38e2e2fe24afb9348835e6e624365e3be321\n747418adf15fd2296f9615263f4977f4e49d7cf3ef9dfa1b010d233e1c0c7652\n3af52b374be7ae6c80e19f40d4a4f8fcb28def0828d8ab8b9300cea69d320fe9\n0d5bd99ecfc5ffd5fed305ef3cf5a6ae6d04bb769520ff14f5253465883abbf6\n14680096fd21794bf6166abe90af531d7c9126d2e9d119f633050031dfa840bf\n0da39b66290e6f95ec31af178d365aa1647c75701b5451748b4720803505e265\nc25e013b05ebfcb0d53a3bf2d733dd614813ce3475b5091196ab2f62ab394456\ncef225574aa6368cf5d84b58fedd899c0bb9aba90d8a94b28725adbf9bbd0df0\n7a41e6173506c96398d583b611545e17438d6790f54c27029dc1b563b41f1184\naa151b2dd3ccafeb4a4454312df18bd8fbae30e9a8c1ad5e642bcb60732d505f\nca75640b3fa7e29883090c1504d2ceff0327f8822fd4de5a6880a579ea715c18\necfbcfdac6abadc51cae4e121febe80a5fe0321fbcdea27417f742f1f266848a\n929a435e3d032535db6db7345fec4287742a1dadec33c8ea6a7cfffdb354d4e9\n1e9bb807e5b723ee8e067d9216c17de15de218617596d103b23cdc0f1e34019e\nf36d272708b04a1c08aa931889df97f3067c597c5cb1495ccacc0ef5ec486939\n9b9106bad96d248eea7021aab7c39c16f405ebd12e2ef469b7ea78d406027b2b\n365f098fe0572152ea5a6ed0c0d8c28ff19b86c8c9e9843d7ecb5825ccac3071\n17bbe152f70185b3d308fa9b36ac56817246a1d776c393c664b6ea7674ef8999\nfd30c0b5735072fa8ef23ab277adc000eb693dd410f886dea81456e2742a6f85\ne675c8a331f59e544aaae9dffcb1f5497bfb8e073a21b4688cf317a38451fa07\nd68431a63607656a833c107c37753cc661ae9d55cdb8bbc6ac116c0b8a21fe4f\n6273035ae5647561ec1064610cc4572b3a052adea890854e441dff6fd154675c\n2c4be401c9068efd6de4524fa08e09453f4ee81072114978a3096969d67861a4\ne6f32d0475c79aae6495a35372910b080029569abad6fca781acd7ab36185826\n2f4cb76a17e65b4a92425f7e36bea7a4303c8f5be566a7b59f87dff6a5d9ad71\n5c361d4eab657308199b40af2c68d42fb9312e15d74dc5f922cab3bc361dd549\n7c2355ea6c757bfa1815244d835bd8b580d3e7a9a90b137bcb807632b48780ad\n561064b38f4be9b770e0a17442cb34525c62439bb656154e42c7912a91da3901\nd7cbeb8c5202a33156b683c884abb4c3d43374b8540a5365b9d111876f9dee20\ne70ec8b3c3b79b53ea032d18b50eb1e42cbd9000c284fbd242fd6f0dd2ea6d58\n42e1c308a81ae4abf36cd07eddb928d157191c88f388cd200eec5cf6279f79ca\n38e44b58be534f0e8afa0fd00acc7ea6489fafb078081e46d7def7311d49ac03\n7ecce1201a37db29fbc80482fb96bff236768b7036566b2ad69a9357fa1a0de9\ndf75f8828dfa4bf3d26d697cb9f40282fc800c3c7ed4990ea6bbcaecc42c3dcb\nf4638dee2a4fb5ae2320bbc289c677012dbc64c5549cdba90bc2972de7bdba7b\n62c1a76cf6bf7b93c418acda894069a55967bb3ff987d593ba330a08cee65437\n8f370e81494188262128b21708bfefe6838b586058f7a08f35fff9dfd490e489\na9cf609a2542f10bf7cde0dcf598c360b65b7fcdc078e6622ab2206c7217f63e\nba51d569de2072b95752243eda81e12ffee48dd95c0f189937d6266ac340ca62\n992dbda5b977fc983ced3d440c159f3c5dd1994347ae6fc543a7109ed911ad1e\n098ddafa2e6ea8ea8e8e81897fd4917e59b52e78981c1587196c66698af8e87d\n6c21edd578a52d5dddacdb3b7bea104a2af449fa9aa1e3f5deec08a79a962f2e\na5e2a9ec2d75620a04b9de916e795e920222ba81fa91edaceae8ebfbf3da186a\n8f3dad674dd476f0178a5f30cc49fd5001174377910619a65ddf09db0a4b4b71\nd54453c5b33e3ba01d658da034ab66d4e4048654d3fb36718fa95235f486abc5\nfd11091f68176d3051afebb133224713b3d5c8746fcfd5d45a78ba1b9a97a46d\n990d39a2218f93b2119cf4a17543bbdbbe58835290546ca8b877de55c241549a\n9bda906a4ed45a512fe0c46957f366bba57826a3bdd138f78be5a90552cbfae2\nce0740f06060f2cb8fa5340701848077130857962f54d11cd4710625438da7a1\n66575e043bf3ab5755406d28fd510937bb85c478170d85c0a3d2f61efdb1a08b\ne826a35e3346eceeb0f428b733de60f12d694f770e0ff3a06c1be2c97874a992\n89eacdb3fb21fdaac91c9e98636c2d7c3acf397294ef0ce01237d0ec970e3f13\nbfcd7493be64ce675330ad002608e65e0d4f9f9661066a86d43b198dfad71f36\nfd51e4170e61343d5eeb35f4f27edf764d4beb7c209dcc61f7b942e932e391aa\ne3335a31dede03d507a7ae500a9b5e1689193a3cf46f1176cc11d1569b188560\ne2082883d78b097c289af062c2d288230c908f6a8371813325e3459c91e88836\n7b0ef9d7cbcc764c0785fb5d2fc4e494b499fe4a34b5d4259fe73a67720407ff\nd4a27597912a076a8808436370dbdcc362c79682577092e2f6449a26d1507491\nb62e55449a070e8ac36cb412f43cadfc7d1eb32c3d3a17875fe493db349d19c4\n548e6ae8d297c34cf13837819b984f3ea1ffebf02bc9dff7425eb3b015517ff5\n1082893c9b81c83a6b0692687076b8a19f4eccfc1b2d1d81be2b68f149a57d77\n6b11c07588c30e0b6a5b9000fb1b02174d38a1c161bf749da33b8f802b98a377\nc33583f544368cbf3db0612a7f059a8f37ba44f441620995397efe39a6621a52\n713bf6fd26f8db69bbb374129933ec97742e27ec82db164eebad8ff091ccac3c\n4f6c58363c111480b1c01caec12a7c1d65f0ab7650b286ea692d4782e3ca2143\ndaec5c675d82bc21bdf9067e1b56773f900d385413908326ac36feafa7620d90\n9b0f1db4771586bc553cea5c262f006415c1e6d203cb3da2cdf3954f6ccf1366\n4b1d396071ed925e681a42a6f2f475ef453da85167c395c658acf6d1cbb33b5e\nc266bf355fec8550178eff9d12d30eef71367f2fe5cdfce9c07c02065af58420\n176691121d826c3b9a06b509465274e4d9bf0663de2cc77602ef6e768ca4d87c\n2b5d133f615d29ca0327e712d90c9a0266f3e8969b18608c364ea30bfa84cd78\nd0d806a2b9f80191d8d4c0cfcc975dcb8a5b5a5fba531d824cfd2ed1bb27423c\nb60fe841f88fb69fd97dc181eeb31e18ca51592ad8b30db23a711104d0a15846\n60ab609baa330e31494692bdd9b56d809720a0880b97ceb95f24f61dbc406a70\ndd497e160ed976a4460d5c4e042fbdbdea66106bb5974ee65bf33fde3793f7c9\n2ee75b3f9ed07239682ddd8336be0233ef27afe3c437b7751dd875b9e5b47eed\n5332c70fbfc4e900ca61f08e5ffeb00daf84b55f3e0234d3ca433cf731e49eb7\n8b6d83c9f8a18afbd0d8deaee804c10a67477a2b2161d800aa222e245683a159\na0ed79814c89ffa440966e22c31b0aceaa3cec0309d5063f3dc777b399e39cab\n643a3097cc3869df0c34ff57819a97fee889842db4bc54ae95d4311555ec821a\nb43ffc065784977104186159b229ef1e9286470a9a28255f230e41b7cb0fe4f8\n1a6128ac872a9be7ae548172a869fbe2320517d502b2a59f2efb7b8de0946cb7\n1a7c15bc1dedbaee69fdaeaaf495be6fb45e4e8f3dc62c42e533aea29f0e6cb2\n43a86af020c6195b16229ec6447541236541816d031e879678b7ccd93bfef4bd\n3df834b8cccba222189ac48db305772634f77f953e4d44d1364a6bd580827064\ne5fd0b4a11ad994096fc0765ab8027d3b1140addd437db719198877f82163116\n6e691f3568cd8d686a2718e8bf60292c6abc1bd373958de0d81025e0e29519e7\n5a91e0ae190de1d442abadc8b3584c356b5f88c81494f4872db918136b5c9ff9\n029d384cb3f42e10519224c2b9180b00a192b4daaf52c6957d44627930acabc1\n3c17bd1a7a4a4079a87da4bfa98aeec42e738b095934cb0ae198b96170698a7b\ndf01f4504eae106ca797aafe50ff28b7f801b0ab253dbd0922b65803fe4401dc\n431cc41684a347d8f925355ce2000f2be13e55b21abae5288193040f2c35bea2\n861c8d9e6ba76296638ef808bffd1103212c37ba8fb6e9ff974ea263d220ab14\nbf69092632b5efe964f00b358be4145b0ac0a335e6bfb036afd2998dd8ac1388\n8dbd159aad1014a4ba1da9d55ff8f807b4652c4e3fcb52ebc6d9e93aa33e76c4\ne441521aba48d87065a44298e283a9cc85fc18b267f8a7b4c889722f440c4810\n3e5c9e0dfcfc55199a8406bf46f5af06dd3a454ae0312c8e244451a35dbda3a3\na42df83d82656d9900c969e109cee325d7a20b3572a2e5269745cc0108cdb969\nbb7ee593da8a7c0e0aa5ef789b8b8b00c193954564cef6e16598a370dfbdb7a5\n8015124cca87e72265a95f378507608f308cad87614465ad607f8e218ff7bc27\n2c253f362f2996be81479004ba6305c6b3a9eef2dfa91981065d113dd70722fa\na9fe7981422bfd8833a56f4bf2466dfeb42ae65900b71c9b1c2079b03f2d051e\na29c216548b79e991c33beb7dfd98adaecb011dcf57dc607cb26c6da794f68ee\n6468b0585d20976af1ca199f1b8e7e0ce1afc1b6e3792059340908c3c8077135\n4ceed71e676c4d1330bab06338dad20c460f22bc4feb277762cc9937bc20450d\n374dea0f1e0b8eaa10ac338bd87923d9b44fd1e9c0069c57c1bea34e06e95c16\n1ed93428b2ca0eee2f3625fb771c28944398af7959f99b37e028a3289555ebe4\naf93471e6fb8fe599888edab9ef397dba2195764a1ebf9fca215b2f992877cf6\n17f426e81e2e2cd3184edce42596f1bc8e74d8470b70faffc6d0facf03134198\n0b292b23f2ff28229df9a987490c5d8cb1a37511c47db854a556e086d5ed83c2\nc2780c8e3da3a9b07cec09428e7eb0b27cc172ffbe470a966ec523ba5a545373\n85b718c372834d0aa0f68136298f31acc5b64643e41c6f7130ebd84831a7500d\n338d341f639204c95c35b405864e874b117eddc28a665af708a517c5ab0e2f93\nc0d2ee58bf7360ce9d4e4f637c62644cac432ea1e0c6ae80bf0fc044ea4ea47f\n222dc0df4f2e426f9913d6ee0d3bfc0432f8228899231b2e9aa50e6a4fe2dff2\n52891a9dab40d5d3696fa90aa3bacbce1b198d13d4bc78b6c21493d6f222d92c\na250b37612fee9447733ba053c8f39dcea939bcfbee053af9de1ca5fcb30aa24\nc5bf3ddc309318384db538f3532ee919934c563253e4d4e776e06ba016aa4c71\n5a6b80555793a13f9910cee83832aaf5de98d78fc4b5ca58597fdd8169e52727\nb3ce3cef81a8a281596472f86e698ff2e8b6e8e01c5a0e063a86e3d112195525\nf1f5814b3ce29311f0da378b21ca667417d6a7129ac5a5a7d6e3b459e1f9f01b\n9bcbcd172dbbcf1ad3c8cd35a435c599ba26ad5306e51477849d6b72349b29bc\n45069e53189a9107ec0cc07e839908f53bf72662922d1ac6f8d40db7b412411f\ne13ec13167fdc92590fdc3cb947f36924e5b20eb5383081f4af7c98a331b99e9\n50222b0a55f39a235f12b3bc3c48fe77b1718fbd9fcc3ab51a2bbf2c875802d6\ne5d23dbffbcb7dd26cd5f2bf63f5812f42f7e5d0c44f4e4aae9b0fc52917c1d9\n67c66471add8979f4947d686a7e257114449e771e99b4811d86228fdcd22fafb\n3e1702243a9808aaa281f775b83c2ccbaaff1d53f88862c849ba606d35168594\n0d489f4957e80727e3a5cc2b5871e3ac4e42f3b6e5ec505945ce13a572876d85\n3a71ed9fe8dede2766f408fc0a56c97d69ea961f3d4f6845716ef35c19bd7f70\ne25eeaa3c352ee7c076f872f0344cc0927f10559b9865f127f6e3e4381662fc5\na1f485ff300992af1fedc1216f1fe96212d2ab094a1e3e2f151f845fc79058f1\nfec085688d1205f9dd0b6c4fa5f39f795a53c495d8859009bb1674764ca4c3d4\nf131b9a33dbde51fcb0f240350af46dcac953b9cb5c5038a3c5089ad10641ff2\nb2187a3ab446fc5da2ac27003b922246f50154705e39c2a965f72a81f45a4bc1\n798aa06f1c6aaaaa98c531a4e3e69d243a69a0b35ca5e3948507685ea6a9a4ec\ne367d2d5fba7ecb44386640f7a0230583d90999a66905ea574506639cfb450c9\n9ccf660c755fcb161e868b37b1817be93fee086f986b7c94c5131e49a5741245\n229f2530020e37d94755808adfb16a57d84b945b1ca05cc0cab1a1a64c0ed43a\n88291dbd489eac602560cec7a74f6e9b20f7848fb6a8c6b327f36b7e01d7f4f4\nd8b49906e02c56dc10302f175c5dee1a50948924032e56710e1ba13f18035db6\n374d4b3ba2454e821adbdfdf4e8e37b0b6cbd3b0a893b7c8941fbac6ec116231\nf2f8d5fb992f9126a5f42ac7bbdd7fe64a3dbc058fecd9099aa1fd5840579803\nd6f2817ce28933faeacf317e958b5abcd96b5459d4b34dcbb9d74877287a8f8e\nc19998cc6e7fc4030e57db867889bf5b9c36ad6c5f5cc77a631b8eb4d383d0be\ne92ce3ceede1e32b5aadb8a3fee08c0ca04a6b0fe4f955910bd2c70ae66e1d06\n075e49eb8864ca277d6a9ca6d3809b0e7a7d90032943eb6a6e75673d85e28a71\n905810088c462f12ebe161553a16bc02110930448aaa8d856a906f5322405b7d\n2ed7346bd37d57a22e3882b18d0cc94ed6d4ae4748acdae9fb05cc8676cbaa0a\n8da587e33c17e63fe3117c326bc855e5b38079a8c4db9f0c995e38cc7d186fd1\n3a8d2f6fd38c711dd30a3f6f6ef658a9632b0c610e37b9e1005e42fd240d769d\ncd3f63262e6626161d9e399853f45ac6a21028a8b07319fdaeafbae79b50158f\n38f8596ec689bbef1e1de5b75de1df0677034660bad6daf05393c1b52e98cb8d\n7eb0569424f516fb566015a4d96929f21ef78f82da98da0960f7d82e9c077f43\n9cca030f6ad66d47c63e462965e0623979245e1393130d736f220360d2a5db97\nd953c6181763d8a679f02838d0b3961be8dade8faa4f84a11a82345b43b4ed87\nc17c9fc3b24074714d52d82fc255061609937b130ea024c29f78df3ad79b83a4\n52a129ac42b1cc46ee590ece007dffe6335f8efb2e8bb06d350048b3f19d6dec\n5a7291a029be5265df766d7fe9e728e11d414d75d8f1b22a6f5a9da0f34d6dd8\nf844257e9a268c65cfa43032c72b751bbc6181f4625e985a4baa17e9c14f4e43\n3763a6c0dfc76d0614ded599b5a3e5a3e5d52263615e9a618f68f6e26bd12afc\n1afd5f7efd302cba26a3a84afb156889be16bac9c597f1de9a11a71472cb2454\n628f160e959b82cdb0769dd9f6fdaf25f72e57f12a597c34c46538680bfbd41b\n61a116433e257989009eee8084413729e87254842ac8b0b2e4700f825f26531b\n41644687d70c9d890179a7cf304f6ce4b8214d87ec4e6ab789dda8cc1b700355\n5416aef4c2a7bdbbfe256c6a2a76b2237939a840dc592360b762ad4031573325\n5e901dfad2315d9fabc6325a5d62dd165323b53e33b082a480030537f9be4d8e\n885f04f4b9978349577273953fe39268013b12214cf6d45d69a0772455d950e1\nb3e49e04b86feb035706c6e15fdbaa4a97d765bf86b5b53a83f81582a6dbcf14\n09e407c95a39cca328c408013f785ac593637ae8551b46d27ba28b1653ff2469\n746456431fe8105b6bc7e93c1afc11a4a7281bd853d356ddb2a560baf564aa61\nf0e9ce9f5b7a5dde5a4bf35627f8466a5b18f81817876188b213c8b148aad2e8\nb1eae12af87ca3c9fadc9f3e2141eb5f14ef6a503eab022676cf1e3ec595136f\n526251d4661c4e7d1cb1074db787dc80d43448102636a2a3e80e785ab605f21c\nf5dc743d1aca4b5872b4bb75d3255844e79a8e499a0c750dedc8f5dfcf164e48\n1b866631bb4855ba48b50ae2ed852839e8942f34fe9dcbbb391cfefdf397d00c\n9e78a41633ee39a0caf687195b763882e3149e13252188b4af494a1cfd772599\n842e9189d59defbc3b907c6c542c2dd957a09077190fd2d70c3c98326cc2fc5a\ndd3446eecfe3b7a572a0eb3f068c894c20ddcdf588e89f35c9914e8c1e8a9447\n0461452ce988e1dcc299207adbf987c2e8188adac46d05e190baa88295aa0702\n8c4d460d5926e93f2daa65380c500f55b568ebc904361614b06bed34947db93d\n4cc749575ae96cd01435c2b0b5420e9e9dba65335745953432281471aa23efdd\n515811d331f48484777cd486b6416c78157928a802f51a7be977af214497c2cd\n1f1a1fb5095d55f0ba80bf0760080dae608f7f7cd7847c25ce73a0133db1a697\n9ab7c7c734aa11c115430e923d7cca19a82cf9856e16548f861b3d91b9810bc7\n68e5fd59ff0476cb583c48af0c49edc1f3101d14629ab3703e177dfd59995640\n2684e9c8f2fcae09586dce858e56c6624875110cceda619855f84e74b9df0948\ndf3f422632cfb7051e22f8f8818ed7c87db593cef4149b3fc6c9b9ef563dcc0f\nc0ba86ceb346b05dfb4b3e58ee74133dc7f7b7c164dd5b2c8c66ad41ca0f366e\nd67957c0fc63544c65e9acb700e642b8a1d593592203489daaf6f52c7e705fc1\n3cb89cee4465154d6f6e96fd9cdd6b53840bf0cd14773d4ebd48cd03707bb3b3\n3a5504e6678c9676ed925a6eceb9bb9a76e3a0930c98821609800342e9c895ba\n4f60d14f3c07f3ef318eb6e096d8274cfd53dd54be0f4f55aefefa0707b3cef8\n6efd90e897bac6b76fdfebc9947121c6d5397e0be97255dfe0fef054abdd07ce\n93ef68e1d33b30e581dbac1afab27e308716041336f78f8cf5678d1b5912e0f3\n5a569765657cf9b49304e52b12bae3a42ced94789c348de6f8ba2a38e013294e\ncc1d816d497346a86db3111cff801ed7f9ad614641ca97acb8ff6fa97fb9f275\n83b74c8b104ef3523ca159a3ee996918ab60fed393fae47ce098325a8d670b66\n57f63f68f71468e9155ab5119c32daa7cb78e118b86cc4110f5a9c42e1d485e0\nb197c8ec7affffbd3fcc8cb8b438a62518caea8b6484d015df808342fa70f939\nb57e54f823921d31dba8e6a1f479ad4c1f85a8d063331df1b245f6ca82a1d1f8\ncaa96f9cc635a9c2d7df2ac0140f489b52597ba2a940e412f57752fe6f022ff3\n075a9b07a637dd69fedd515402b5ec7943c249d632f71beb82e84a16b3b31e9f\n396b55468ddd51fa82a7430e975488781749121aec60622a24ec2adbcd884f08\na975562dcadaf69217b638570bb4e03712689b9b42df696189eb3124daab11e6\nfd1ac9d31d81556144bb406f404141b8c6ae1746a4dec10cce07b73c7e1a8ec6\nad570c2543d60c2d3ab48a94b261c7111d1c44f915f85e8177a2fd3ed5de2abf\n21d7ec35ea1529cbea7997f68b294d7b1ef030c41362a43eb0aff900b8dee49a\n146450c66ff262dd852cde536225ed5fdb408ffd348c083dc6cb26b13082b089\n5666a181fcc5d887f511361435692304727cbaa9fbab82ea7316cf5157084d01\nf78c4cfec26eeea90b7c5a7717efa0965f295c1a43d6ff56ab89a812064053e6\n2e3a19a8f08ddb345b3aed9c825fe10d8942bef773d46633d1a6043bfd87e1e9\n504ff50d30312fa67d79e3bf7a8fbfd1ab225a863cfe20b07e80f712e8914f54\n4886ea10f7fa96b76c8e82cb24cccfb53caa6c99f06383f94395af1778e172be\n59d75d50c8d2cfb27fd40703ead3efa25bc4d6c55ff3f555434d4a184976c02f\n17c06c965199b321e0ea08bfdcd9ad086752baf29c155403ee548c7835f835f8\n6e6324eb8c1ec101c3d37c1a678c656f09060a562e645b3e6f45c8343c9f3d78\ndba13bcf1aa51d21e4f7251bd0382f7dfd1d18be3af373f1ad974a0d05c6789d\n8ac6d032c83d00f517507f80821a9fb90a6d95ff5ddf2f2cf12464bd147b87ee\ncb4242e2b2c18e85abea2dfd9ed3abdfeb0fa3d81646dd1102c8aeade41a9a11\n5b2bef211876f745e0d91e5ddda56fc8582b21fcceb3ab8283aa2203f875da22\n1bb8e648c4563e6d2842b3ce36525cf1ac68d7cd371a347587d86f9bf3a6c192\n7ae3abaa4fe15352336a44e57e68ce3ce7801029696df94208ef7cf4419b0e5d\n370400d1aadc70232ea3080811c0c9b6e3fca94cc6b0daafede34fc7f5b6fe21\na9ee255f4c432e349ab56c3566a2121a1463fb295efe9600be1b55ea231c5c67\neb802d35d1c9bc2fc4a436d610e3578090d20aada7620824447782b4b98561e3\nf437855bdf58d9817887908084e612e5aae90fad7c22a40402c2ebc8cabf0a1f\n806e90bbca95abee19ca8cf93c995eaece3653103c28929b2526e777c7a47fdc\n2a3eb21774582ad740193ff9a903b7573d3a8d26df0255738ad859285c3abc8d\ncbf7ad09e57c2d6502e6cbf3051a87344c8cfd8a003f13dbfeb5a1844bc877ff\nf42970ce76019b89166b528fd0ec3875958d802016c0ab77fbfb6b12274ee243\n0c22f0af2065d8b16f57b2f04138b56b8cec19b34b4c9d2de2b603e6efce5bbc\n495a757413404fa188b5c006228a2d50bb7b6185d87569b50bc7a44d3a7895f1\n336bb902d73a33d9359255252e30f63a486da3de445b38d5c49ec34755b1df4c\nb585057338280549877e994d7306be4b8e5e99fcae66f2042d9a2e63cc978f5f\n1ff1382b32b3a211dcc16f8fb83fa7aababb3e3dde596045e5a88b518fb8a721\nca96c097e0731a46eddfde3c82ba5a89b04345ff49fff0dbbe2990f6e020c5a0\nf0c70c1d3e793248e996182bf31cd24aacfb33c7b2c44bed02f5c7e4888fb71e\nb5a55dfa9be9eb0c9a42a02ea413720512b112aa86cfc4e95e3b7591b5d5ceaf\n08be7e6cff5ae306f8e03e87f9392377980c54a11d42c38475e20bfcdf627aec\n6d9c807fc0616f3b5465c84c6d1f431442c0f1696dfa90e654e80151a7a7fc85\n77e65470f5b55a7e306dd6b42ce4d68a2ca39b64fe94395ad405240c8884bf28\n45e04aff559bbd1e45e7ee58dc8a9b42b74622bb097522177de01a8552d22e9c\nfb7ee3424fbf2ea83ba8c90327cd38cb10cc1283f894656d128fdf243e5fbb8b\n269fda31695c224a9ad6c7c559cd19be34a49c7c92d924207ecb40cec8a944a2\nb15c76f21bfd783bfdcd645766009e61bc60194ad6b39abd39993f9b553bc6fe\n3acaee88504a4861a45cd29f6623ca202500d4ea24b5e0758611fbf6411c8b4c\n3a963f16576dd0af0b03f453a4ab01e8006dadf9e8f749d4754c073be3bb532d\n8c15067dd4656907b24ead8631c283adbfa1ab99453de1c9e1381d4f7aacd50e\n32423a1302a6501943f8b41d216159e0b8821995586a7622f8d0557e6023d4d6\n0ab3c3852376c83a0346ca01886a1fcc4b300da8eae8149357021158fc33fa29\n604d40eabef8de09b9d55b24ee7f752743eef2119783d7135d38b32e5d8d5c72\na4a9f251e78777ecaea2d585ef6cccb16a9d6446b6b8d45509e273e74fc9a285\n2ad7b78b75179bf1134c39e663f980e03916e8816707ba0adb9685d9879d5c71\nc3099f5c7eb36f7d68f6702dbb0ff6f1986e02d12c3dd58348dec391f56c589f\n44f2c9bb32ce0fbdcfc0731fcb3429410fec345a77bc1b3af582d8ec1c8bbf0c\n3307707e6d46b1ec4a2beae476bd25e6a2e94526c75cf51c7d11143c856d614f\n7fbc33cbe533793690eea5f76b53dbd4a87468c7f02d802dc581fbf1cb3db546\n333b17f256464998eb7bf793039ba46e4a89088afd48d3fba59b66c8d37d7f03\n83b08ab2170f4b755f93506e00d9f0fd436cf19f18834529fba92fc49bcbfa21\n3e9356dd236c661d9b0dab928eef8b121b14acdd50b181999b12f8640e582e19\n351bf762081ff21470a3a8d36002e7023f8a116d13bc03b450e2a107e2f243d3\nfd57e4b96893b5bc713503f761eac00a9d7eccc1c130d377ff0c6998af527720\nd0bf23f85811712ca2015cb8bc729a8f9f53d4a7ef10d861db6ab1c570d40165\nd79a39605c25003f291718283ce262cfce9f985780540a1145b194170113d653\nd5094319322e1ffc9896c4e08dc919b34be77e084823721142e198b6571306b3\n3d2439ac6b044e0f58838a6d2b7d6e5540c868d2979ef5e443b4adf7e419ca12\nebc02ccf5a3081023c111bdf9deaf8697db123f660ca1d2e649756e696e90383\n12566522eba1733d440d9dbcb80491e7e650f7da0bb2f30a6fdcb3330f8c66a5\nc4075a1b2d1a1083058f08063657de58dd8384ba40cfa6b15911fa27b3b93e7b\n13c1b109971c8e6c1862d06e86722df5a9f83f81569f6d8073a898db2cf8d1f3\na2b4346a9e798804c5f7b321d0169c7789b4f097d0d0fa85cbbfcc7c617c03a9\na67f5497ea2e9980e329be6526c19f085e14a8346977ba15cb8497dcd3be1fc7\nc7c23498ce9058e51b4c81e8e59677fb397c750c265018b992ed450543cb4d8a\nfcfac6cc5fcd6e6a150c78def5c3bacc35d59214cfcc396acaed7c2109f4542b\nb3e449129a74431d663dac6baf344f4fe5882dfda6a15972216cd05534e46ed1\n2dd12374f0e2dd3245a401d5432690a6b36f2ff3a83197cf812114a2db541773\n539ffd5adafb7fce4bdd4852f8c3a2653cccc7780add61c5540ccd8b64891907\nd9b9b79cfaf2bf8ea442ffa0537795ec29b40435c6c9af9f83760a346ebbc0cb\nb1a0e403e9c4db8db45ccc1d202a5140ee96aa1319b5ac25fa06c76f38c7924d\nc9a5d2b2d69307709b4dba2183b3c317509c4cb06629b8829ca745c2fec7d733\n2974c911a49d9836839d5a71362dcaea4ea2ffd09836cc0325afce2fc1e17d04\n7e9229ff4edd4c6468841ae46f918d2962170b51e3552d9f6d2d6a984fc935df\n9e6f161f5d7f8921a9ae79f61563d1a44ec9728766396b8e0cb738098d6dfb06\n7cc8b9c760d5ddf98b8f9369b504a6ecbce28d7539a3093ae7aa758451d5fb11\n00f95a38941aef86d4142fcaf74f5ea184b3d4020ec21472dff04c7a188008da\nd0282f7a7d8f4831722060a0a086666b82aa901e27840f23d2300975aea74d9b\n8ebd5b5941efb313339bcfb864a354308635b89d698617b72e5786649b4426c4\nfd1a8adcd7479a63e284eddd0fab789e536a35b4956ebcf9295aca13e701c199\n0fa9d97ec7605f5e1e93979742e99c0c540e31ec27470ae5ee889d2cecb5805b\nd28063f58414bda33d434fc23b35a582be6e2d092f81f577c19ce5f4851aaba1\nf00d23770ba1ee9e6d63298f7616a16bd66ac120f440f6ff33f1c083a04e4bd9\nd381faadb35b5db94e9a445ee0c062b6c5fbe39092256be23d43f02b259f0728\n119ef69eb5fa0c3019ef8355c6b664b2d4519fba557ce0955cf5cd9a29eb8051\nb118af87e90c255b831979dc4a6f3989c1ee61460cc038ca1f2702a2500ec30d\nc101866f16f6662e6480216683e20240657c5988e9177c6275f610a0ce095627\n5d35e0bd236dd263a7c6c13e46ecdb7e9c1a28d861b6440530d4d4ef214c25a6\ne8a19594de8210cd8f6530009e29ef41d76d0173e4983e7ce766d4460f3cfb9d\n74a65d0397bc4a198300488fdf3dc8d393f01b0ddc6bf6d0dd6c281a61dcfe41\n7d9f18764aac1f660fa691668c4178b6b5c970ac1d9fd87ab89ca8749bc8293f\n2f4aa559a80f1bb980760eef53529a50bdd4c980e3bc8e91713ad348839a0916\neae38950670aea8130b39b3ca807517ca53ecb35b3202a5318615ece4cee8196\n57106a0909c614e4d5069452b044c61959a61d4c52144df8ffdb03611fc11e15\n7a75d6e0157e2afc56a7e6489dbc78937b16b08bebb99df7931604e93d525938\n472a3f85acc6d6e199c5fa4f23be9c9df09e4055fc56bca5232df7506a310590\n78eb3396369a120c15c86c0a3348a927566effeec482d35b65f37d466cb52d91\nf2273ec77a324d246d6e00796bad78031c463d22d9cdec5fdffb0016ef2c1204\n1904c2c11401aa27a752c734f60a494de5f0d8746e3ea183a08abada72dd3db8\n304eacabb467cce3cbef0965ce62ff8c9843b80304f3664da9311d6c6fbedf0b\nb76aa9df76c8032b3617b6d1169f03f00355fb6e33c81d2083b2385a73ac9763\ne2a02bf475587c1adb1711108da9e2ca1dc657be75d184e4b5e811c869227ebf\ncc48be27488287ea07de0ed94b15c0f6338e6214cfc3c6422c8a88e70e9fdeb2\n750da9b19aaee8bb4f4dcf11c94389ae24cd7932dcd4785964137f1dcee0ee40\n34eab74a37077d54ec81fc74b6852109918c3b5e054513768e61b2f3e9577c19\nfcf6d787cb0f91b95aa79d4a07a16648bcfc93bcce70e1b694cca7bd4ed441d9\nd7f4ab44d7e212441fe2fb58f95de157939752408c85ded66063215811683700\n0b149ac257696b5a756f63bf067c2cb5d95a0e8c624b6fb70823edc3b1c76d65\ndc4d5c45efbc4a15f9535f1d2510bf192dc50360dfd346183b270add124afd9a\na1fc9ada3d9601d8deae5343296e79137cac2b14f5bef1412f106c80ddd16f31\n0afc318312f115a2caa7d18d68bae43698401211c627318012eb0ae7f3670b9e\n64d283869954bdcc36e9a9e6f31dc629b1b5b4220b092e37c154de14d06cf0b3\n968365c495b6cb83aa0d6874ecc2ca9c0567a8714763a866168f4feede37476e\n7e03bebdb3ff0377c8c14bbb83e171b895ed8127af11a831d90e018522ffba89\n6ffee5af03cdf0fe4d6d2f2bbc1f36df363e1ec8ade78da829e10bfc81d95185\ne0b3f52997e9829d4f55eed1abeb79988a703371effb55c4d355b14ec885022c\n57b877da3c99b91085465afa3c0aaa40c267657fe9dcaea7e1d9286e78cec507\n7edf640bb17e9c72e9e348564d2585daa1a8401cdbc2f405d012ea652ececbb6\nf51a91b5c2e1c43a653404cd5c7438bbe81c2442354d8bccdd28db1461b17c67\nce69ddeff50e1b01bfd8903ae5b8855e46591d0f4e74ad3a5b94ea32d084b503\n6f5529145287bf0f7a36b289999c02e749903595e4c0c9964a12868c61038add\n360de51ca4e37523bce21590ec894e5d769f0c8c0d84d766bb3eefd99456c6bd\ne4b626c4990f7dfb481b8919e5df29b350d9911ac166b812312ef0bb4054ce4f\nb9d04853dc437d840fcf2d099fa6819978be454682f7c49857b3ea3b51105e4f\n0ffbcb18d4b5c4a8adf72b7a43046fcd7ca5f7677802ab2ce24f536243fbb4ad\n9fa48dfa43008410d2c37cde9d55af3935776e067cf31a5f9c4e64f8001383dd\ne4a246cd9fc7de74fba2a4987851dd7fb5c704e0fe91be14eb3ff92faf5b1c24\n57537179422c11e095260f85f96e58523d508b213d512cefce5901cdd96d77e8\n83928b21360d687a33fc0050e462beccbf67c313344ba04dc996453efc00d417\n0a63ca01d112cc7bf96459ed7504cf59d36a10e80e5d925368ad3e8c49d60372\ne104cd0339519b7e881c8e1ac0a3b6fa084b4c22eaa94d7764036b54244ca9f3\n3e6f504100914bf93d9b83aee55f5963b18c9fcbb0779852db948718b0e19510\n7965dca4eed64689efc01531a02b88c058b4166553d014f5e431ed771f89f903\n598f79ee0deec8e220fdec61e645b07287922f842981c09f4175a6a31cf67188\n87cd674915986c371429c77d041a154f544dffcecb068350f4dc33663b4cdbcd\n19fa1a3d76185b50829fa3196a79b938bfe1810f2f45d0c70f267ea7d20c5bd0\nb5df06976ea605e1fbf65572a7a45d49a3c63c153c8377dc3376da2b170ffcf4\n4e9aaa66e6db4598813f5cdc91fe5950e0815bc0f6844a556d3ae5b77853cef1\n5e14022c8911a21ed0661681b8f497ce79e79c306fbd5050efe799fcc9294bec\n62c3390836da0e4cba741dc9ade2e641cb4803b6d828da11e1df765c72d5a46f\n019a348d7f799fedff037cd188e0f87d38a1be7ff3d169c49b71bb20e67814f6\n0864eddf1d7219c38cdbc5f47982bce7f3e151ad15cb4575b931c71cf16bc130\nbed1b90f11a3f2abca9c67871c31393e188d9dcee785a4dd55163f88c21b1240\n0dd522f6ca3d8a7cd56320bb0379c12b32f42a08fa9f78cfc4a54e4f3ed54799\ndafa79d84e648039a7397b2c3756f5173991f714262ac25a5be355664fdc1943\n199384c11deb6cbc0d9e84d12cb72c5a8235651a13a496c6bc771dd5a51a12c7\n371c2451292a86a4980e840c9c704243b79d69daa569192d6c17cfc9c0283c7e\n11af40a05922bc32dfbcf28982041667266a3213b105ff2fb0d3a2e5e033dd3d\n695831a09f80d9a0bb2c1a557c4ab957be63c1ba9a732c7271f639d77806066e\n5cb05fb9298e1acda5b4816ef2e9540f78ac482630fa48df127f886c6a6f0f2a\n57e8674e2df70ee3a48f90e8936f41548470a8bf112da247203c3c6e436451d8\n19556aebf66225db3b5d085226a20a87e81ad38595d5aaed4e3c6f2848f6ad05\n089ec513a70ca4c426a7d5bc799f7831d916656ea0b4cd95fade84ff399dc059\n6a2d5e9d6a4f2782b4dba14b6eaee969f917011bc0cd4748da7c0496501277ac\n8b31bd926a12006dd9923f28a832c2472ccaeeb0563a76751f32be27b94edb94\nb940c8c69c38ac0a4dfa127d876b9ecbc80f19445cb1f6ad76df9b9b27b7409a\n5b8fbb605df42049e82b85589e7448048fa43483390b3a0a16809308bffd7e92\n1a1c2cac9242fd16191a32ea7bafb56970146457233fb64136a646edc8d68010\nfc58b0d9c9a03acdf9be13700c3e1012a98912e0ea3fab3ba9ef3f96bf1b9477\nbff0a109b1b7b58ef6c1ec22a9be6bd5873831d3108f2090c9b269fc69dae417\nbbda89b1ee6d89aee6ac79a4f324d4341d6178c8280625ed8138c259f58494dd\n2999fe85897c24e220df1e038a7a365fd6f4c7d70d5637d65aa525dbd4199ac6\nc1f7771f977b7c45ce1cad206f710532a7cca4581e1bb35bee1836f0a7dffea5\n14c1772a81c1b0e0116329446c4cff527cfd644a8495142ffc5c9971e56ce47c\nba3e666a8a2d4bf7328129751deb16314fea953a99123fc9f80b002a8596238e\nca4fcb457cd92c50f8716b17aaf344cbed3a90187392d166693edf2d0479e83f\ne61c87a3e4831f864fe98346e07a8a1c2a9b5506403ede022825798a7b862bd3\nde66e460c0d6b096b0a6872a0b84612ea75b6f07328c5830de51c774cd47ed46\n0eacfac027dab8ae57827c06fef218ba062298bcc85f3b597364419ab626ca3b\n135969afce0d27d8cd3858c3e6f55b47bcf8f10b98b4cf02cec1d5226005f88d\ndd957882cd38a96ce959a7bb3be01ca3a0555b06e43442c2a4d30e58c0132b09\n3ab36159a7f3de69979a5f5c355cccaaf34e6f8982ddea19eda6ad06ce65042c\n79c846f5cf4deefb890ecf9975f62faaed21712f886791a3a7cf4a6fec89f808\nacbaa13291f660ddf1d6b5971906c2ea7362ab18c7ce36fd74e328a6c1dbc2a9\nda8e56d1277b3a7a791cf1e637718177922df51eef5bac177d35be1ed96e91f7\nba04ed43b3779885b4b596a3832a546089ed292714552ced6a7b4200a8e56bcf\n4cbce7b6e5ae0b0265044ea68106a6ad47b6548c2fabc6fcfbc4bb99b59a3288\n1a01f4a7b80448ffb07ad5651aadb41fe5ae0097de7504e09ced6c87b03fc53a\n1af214aa0d8a7763e3ac120243be6e020e336b9799855bb909bed8ee6bfdc1dd\n4f4dc2bf9756ae5c71671c211c9140e8a3ffb4efc6d90157207d97502194f827\nf3ab6b522cd1fb2c6b50577b2dc0a132aa7e404db93fd4159d5be35907136eb4\nf883d372f4f0d79c1c1bb92088c3435f0e9bde7233bc2c2c2c3a8b0ce77cd5e0\n80edf88cdbdceecbd12de998cfd0c39bbbc70b3ddca706a00f7260a2756e58e8\n6e9f3f1b2f630dabbbb5babafc322c6e96d224b66a0e1f3b00ed36056ad2b7ad\n9ed4ab851f10c873ff7c107aa30ebf6b3a64492aa9ffa867bdcb646cf2723041\nce5729083ec44686d9d2e36f8a4b83e6ccc7a1c7fb908b6fc18fa89c87207a83\n5cedb44d57c59a133fb1bd0bf2afe363ace3a04ae4e1050ccd7f097a7437feba\n40bcd8350ea03b3b23fffd4c8f72fd10d631468fa6bce1bd229485d63e105784\n78276dbca3c8919c308aa7eac84eceda1f7643ed62f0e9b8243612849271cbbd\n0b7f62a7ba7d12b5d94bd3de720b94d8f7fdfe02a86c9c0d5a01b1dace70cb30\nd5cc9ecd33fd67b8a9f1a8978d087c52d76fde279e5d347f927e405a75cd2e06\n6715e3105e489dbadc7661f1b3e13c16fbb1d55b9a8e6a3234e5face956901bb\na0e6b543123c509cc20940b8502f8f793a157d9c502d77560e1ccbde5a34ae55\n27b549b89371954c674df04396267ff94a56348ff9cff71d5d4c437b6ea3cba7\n57833fe11098f0686bd337f97196ef909df61ca761acf99538d9ddc5b2791187\n853016273dd47a5ca482c06f1155c0a3eba895d36a0b4e1e82b7048addb4a1b3\n8d3f3a2378ea46e22dcf35464d7824290844815b542513f54f53c0dd6355bdc2\ne7918ee8382f469c9912c1f746ed07521cf9c861d7092d1ab8b59b56117dfd74\nab6ccf2fa1db5f5aa822d2f39bc8e353452680899d07f6d81a19e2434972b4d0\n18313201d817e9e372e3cc7034007040b162c64209922b9a3f7736adc2e0f112\n6f333c48b86c60cf6cff1886e979a00278a6d74a09a692b2f5c0d658444bc021\n0b4f13d25426f164346b13d9ca826609e87b8cb8fb0cfc9a9cf46095abadbad8\ndeed4a34e5f09d5621277327c87109a85f5cc885c918bf6ebf8ab9c7d1df27ca\na7a045e6f509de6cddd1fca3b9840a263251b83767c8efc8ad1c36d1ca6bf20f\n6f9fd132f4c7588cb7db085db67b4501c3243423ee3f405331732879def541c2\n0b60e49bdc01e726c2793b3099baac333ea27472d8d27060fc16d6e5fc55bc80\ne7f6eb4d32ca5838a7bbf6a63f4075dfcc41ae0345c57da2f37000a1043e0286\n7272dcb010651e246b42eb4a4ce3f9b00f0ae08f0e2169a65437f6e4fe6ac566\n2360316d7748ba6dd40500eb1ade97eb333af2fe4ef8e7c9d3635dbec7e41941\n98e73685514969998a5ff66aab14652764ffeb4b4a47980e8fba34c2bdfe8c6e\n88fe245e88e84de953a93a8582013028ccb178c521e9f7e0ba542e44b7778d67\nd42c6bcf869e3d2be1cd35d58889bfe83d942cd902ef824641d29fdf55bb4926\n3c9fb086055f66af555f6cb2e6a1c7bd6a18cb23bef93e1832698886e30a6415\n8f7453508fa1b566f0be0f9cab67c54669b92e92668f4dbc017412bcbc43b6f2\n45e757f6799060cc7559f2abb6a02517a457a0cd033e0b0b6d98c8068b5b6ff1\n987e150088572b89d62d888934b7d6f46db500b2de858b3cfe05cc45b889d428\nb196f5646bec1032b18472621d0fdc8449aac8bb1191d1e0d3a6b70fc08afcec\na2707fa329e30b773cda1edda980d33f557f2e78cb2f3185f4f5af0abcaad93e\nedc81b417b746c6a9353bc3ce85a36960c2c70f9e74f49e9f4ebcc84fe79c559\n6363f61df068a4965f81f03b5683618403f105c5fb02b8f8f235a2ab00f3b9e7\nbdfb42e252d2978b27d769672016b11563d57019e350cc5d4375d50dfa83877f\n456167fd1d4bbbfeca9fd39a3d11539555eb5665e6da58af00295b875ee95032\n4f9d9af5c36c4e38bb25baac27bb1eba8072d131b86aa641abfd50f06bb7a6c9\nafe9d34b2f9c985eef6b8b976e2028e93c7d6b73d01b6150715c30929946d682\n6115ca12df24304306a3a8d38da3547542c9f7724232653d318eae76ccf16fb8\ne26c0ea994aff716c026d1ed40975f3f319a4806e179ea03381ae5f1c337768b\n628915142f7f652acd6e9d7a962709c9c251cae5b8392916657e21faf7cb756b\n50ed7118e7ffc7305238ff241f86b7f34ee71ea772c5e7108093dc02af4691bd\nc53fd49c4584996961fab51d909a6e3befae0b8e0bb998ea9f97dad1f6f1baf1\n56e54113ffc6b824c249cf1e3be63c426b3e3a291e40dcc1948b073565f087e4\n96afd45cb8cb02add9aeefd59748c088f0994557e37946c7a8245a5f70fe014d\ndbc5c6b331180b3c5ac3d2a3b4c790fa6ddbe054809645c57bc35d559d522871\nadaa77188f1847c2efd822cf040d0c9bd4500193d032507c6e316d14687b274d\na65c14a8f13a591fdbcc3eab99f290e020cb02ee606c90f7b980c5f57cbb37cc\nb49332ee05a59a5006c8d6d3d7092aba7a7aeeb4ea322f70d9ad8a0735e42924\n8c944181ae86daf86a392329162032c9e4f94e2054b2d46b5f5bb5d3646816ea\n7b08fa9de3389395163f7d082b0fa3b6442b0c546f16ae7f315940c3e77fcbb7\nffae573308462cbd8b99292295929de8771401ad1bcb17761453c0f039234498\n535db2eb82b47994986053e3c3322bc3c92e57a54b6e6e1a08ef4c9951fb4ca5\n120935eb7fa42f52910eda183f2fe35c6b2a381d319bed8189bdeeace1ed433e\n30c45ace8dea5b5c80895c75499b48e92dcf3f38bc11e7bddb8f59fb5ea09b44\nd6215d7f891696e83d1c16cba3a420fc4d305b1ef1897ba478031589628a410d\na93d84082813e220ef4d90cc93ecb0bcfd855b636e7a2c536fe7bd0fc2dda3a5\n9aa75ab8b95f70bb73acbcb780d37a21eee4f75efe6107ef3a79e4b4e0619b6a\n69ec5834322500fa634000740e21559e6bc73d327a73776fc472f05af6d6b2cc\na827733f0a735382b3cb1460dbbf6a53cbdc37374fb52f26f12f475184aa9029\n522ed393427f987f89557dc161a6d50af7cd91277fc1b65a2c9d4668824ea108\n089d428dfd1e953fdae3fc510b436f3c874063be031c2b342a3e59fcbd0e3dc5\nb082d4026fb097e6806871d108dd0205d3328c957a364dd7736f58f1c646957c\nca7808129bb1b3b93f4e1fc94ee81a79dc147f86bbe4c51364bd6e582c105b5f\n38340b4d56ff9d5a349bfe705261a79d1e0f62d392662daf89a31902636e374d\n1a0c6050842ce6d4dc3ca0cac5f05bd3948115dad8b32398ce1b9e37dd6a4672\n11f6054a097555ca5c73428b88a994fa62fa8bbd19f5b2822d5f4c6acda086a9\n2fea6a346b0679212e7a6d72e5def724d9830b7ffd05d3a54181a75a35bc9632\nfcfb406860d41a2fc02c250d00f6b74693fb6f7b5abda4e19d67fa2d4e8ead50\n2c39b723a91dae878e6891ee9f3c1432155c1259fd639c8beac55774da563ff3\n402b7a551583176633c3275b40378e65de70a6d6dfb54ce657b1db8f195fdecc\n9e825996f7b6cd3d75cd694c390a60042929253a1915920bcb3b9db9038d402b\n9186237e5b84202ba9c769c0a0abe77ba4da5fef2ae04679456d89fefa424ab1\n2d344d40ebc4edf9b49a1d83ad245753935617b491bf9d44f91fedc87000e2f5\nb3f38ccb1b0c604fd79595841d5c757d3e7f7a54ed78ddc7491e526bf7304de7\nfd889898bbc7439c1a7304201dc26d1c2ebbb3a5fa0f11280a896876902aa501\n9fdad2d3062e24c53858702909ee549eab46ba7387b1c502876e439ddd81707a\n85a7fd5a1deb80cca09d8d2bbd728172f0427e2b53482bb017d3c8bd38504d1f\n5576a2995272ba439b7cddf233ba7160652d53630ab0f946f21fd7d35d9c388c\n6a65b52075103f2eb98818eaaa86aac02bdbf285b19f499dcc3ac2c26a630347\n21ed15d93ad79200647c077e0a5196304bf9b85e755106f2d38c4e76c1515f73\n16b65d32fc00cdeb4d2b577f50b90b24ced8d2ce98834a86ef5994f22fafffae\nc6ae3914d2628171516063df8eea1ecdaa393d510bb6fb51d3ad98e0bbf30196\nd1fa3e73f0819e5c2a979444dee2dc649c34a1a64c5f9d9695bdddcaa1b35c3f\n423f9664b9ea1cce833a9450a7208f3ee1434de658bdc9b656232da6652229d7\n25b37b68ea025dff577159e671397f0cb635fb0ce77c5905d8714dcbdcaa8edb\nce1e3c3af35a0eabb89ca7be1afe03a6f2bc72af4f8256d131ce0055f53e6508\nec0415778cd6d4afe3c86f3121ac1885aef7d4fdc8972aa576332746991c9529\nb76bef109b6096f5ab93c8916e3857aa874bb89437485a91778796d4f7fde6bf\n23eca0acabd15f314d4ba909e07dd62397d603be308bf3fb1356d1d7e985b69c\n8c97fe2fd68cab182ea2e51e4efbb996bdee5b8891caec566844142da9e95e3f\n5523ac269b6a806fb5e8694621af032c962107072d1e502f5bb476f8a823a254\nfe32f22b495f694e8efc0c76dec23d9847ec77b49b950ba661cf6f7a40d2e270\n1eac6ad81e675526443954aaa8ba0959b5fc703fbbfaa24779b13a4f1c284988\n30524bee139a96e511d63c85f4f723db6aeb31aa40b22948426cccf580ab681f\n0a5717580aebd054587bb8178f52c1524ae34143148cbf5b2101177ade49ff8c\ndc69c848054a9a310fe04aa7f61abc21f66332886e7f9bf070b0ee5015b62b75\n8027c533c06758db6c02721e1db63307771d66a33814ae3d7f5f483a5a4d51f5\n2bbe8534e3512329fe42445f339a61a412620ad88e878ac6158fc21770821077\nee98b2ee8766ec5bfd63bb4d56f7218455b27ce008f4eb0bcfdb20a2d16dfb74\n3739d19073d9870fd3446fd1f0a2d66b30514b148f3ff462f80c0b73f0d95055\n1d0d37b0852aa69b148d76a1b2a5275c1fbb4fca70cce06c73c441e49e19f30f\n312ffe75f1ffc8c16070634a1576ff29433d34177900f72539df823e2d40bafa\n103555953bf2d332120c5adc806f0f7ff951a95dbef3eabfad23a6914fcdaf3c\n15ab9957d2336f22d163c41a860121aa3387d2891a7e15ae8fe947e8f4dce180\n55f4e46166a47441c02cb496773152edabb793408351dc1ab38ddb6eab87b51d\nabd61a66195207d0eeca93f32a453621e1a523dc601c8a69799cdb0fd13f4c9d\n49713cc203a65cee224c8735bdbf78774fe80652278d4e1026e56855b2f2d465\nec02371e6b5ad0b9efa14c801620d9286704d64e74b1be29c2004bc0724db0f8\nb7a2f01f2e44fad8bd056e99256f0ecaea9aa5edf9d5769f8288bb2b74e8630a\n32ae755a4530fab4e94e9ce8e66e433f9cb294ddb578d25b3990c34c5154992b\nf8319d28c5906c2ff5a84b85f2c417a5622cee15e0b2a1d7378779fde78a140e\n5f278e98c4397f30fb718dd758e224874510d0565f323d9d0d559b7b5d4c9e7d\n3b2080be35e140cc98c7d8cf7448fced97456620501b1ab9f4838d7903157b43\n40177c4ad92aa14ddfb2d2e9474a1295fc6c7ea14ba871a6a4e70033d61291ce\na2bd689d0b0a2d31b261ffbbfe1ec2ec87add1f76214ecf841690187dd127a49\n5563cb02c2664025b522190cf5c804c543f5c08102ae2292d7685c9dcfe06a1f\n8166b0fcce655aa0af26b555f4db94e3eee7aa284914120ec18ebbbd3ccdef1b\n01bef75e2552b1bade4bf72c2f13c26bedc502d2d573886d14457ac1320f4beb\n21883c198052e091991fc9dfc7f638e5492aedfca78c0789dd2b21410ca4e956\n04af1d34d2d98c16adc03e4a52384d318e424aba717275740d49810f4e45406a\n65da979fa5cccf10656c32ebe957d9bec6f7f9fbab9945910f43559230f6df1c\nfe867778fd3967298c79ee0272f6802f42da557304e0e9283a3aeda368873205\nd221cd78612c8a6d4559536fca946bc37a9489b3823b1b72bea4fc84ba485fdc\nfd9250042e68468297e35f8df6c660975293b5ad53e30ea2393eeb9c34c0a721\nfe884d3f3ce96d83df89434d2b40bd163e9c81da5978ffd0507cabd1480ead9d\n2986294fba9539c8484d3e12e2f208b7b8690caae0d89b520748e4cf0d4a8311\n8438435ae116aaafb743967f30a0867aa9ea23125380bc01bc6a443f9a2f3b2d\n4e8103c281737832eb5cbc826f1eea3476b94685c0bff9914658871bbc5ec91c\n6cb3df628e10592c0ac1e60b207deb1f5431e8b2450c5e72bbf93baf56df4559\n9a093ac1934c8f0c82d015ee40b69dce5658f1c9aab46b68de64c5089c929aed\n8ec525257a780c5a02cf48e8e795b7795255c39aa08703dcb619adde9aa45776\n09afb244203679bd6b06a47517dc37b69139b4442e3b150ed11e3076a064a469\nc048627a7119893902c23adc6a35374ae4347279175d7fc0288adcbde31b02dc\n5bf474a2af040ba30cc07a7b9010ce80d1ea20f48748c6b7df7745511a9ba00e\n3afed904361bf3ed70e37854d49d28653443efe29ba070a2e1323dcfedc216e3\n850607249d6da6d792566014686e0a480b4e0e92d086d08bfa16379d8a716ad4\necf8cdeb7bd1b70bbe2da48962dfe8a3f2d17bf6cd0fb871a405ead6bb15991e\nbedf12cb136263e0fb2b1fdacb86d5b963eccf6a3e43c3f9574a4b3b589fe23e\n8afb96c2e44fedb8f914a27af31fe6b2c306a1ede486ca7f5868fd2e93ce9026\n25ed201e1d804b47f98765fb5f9e885804b382fac75b2669dffdc0bb62524b59\nf7dfa427a9b825bd6cdb31d47badd42f2edb50af768763a2a119e70d7f9b4fae\nd8f3bddf6d99b848689d2c66d32ecfbb51848671d5411725e11ab704bff0c13e\naca83dc079b7eac168a25f3884f1fcbff08b36a4279101ebd1ace341559a0fde\n923cd6ab532e667a1bbd5441357f408c593ed7b90d79ff8f173065320c8928f3\n8f56b99e7d1ec6ee6af5c42b3b88333151ea12e91ba00887bcb47c91416c7607\n2c615748b24e4127ea194f42fc09d9f9ae76da3a7079971d7cffa56efccdb0ee\n259e5ad824758630a347c6d8a5d55b34303122f532d0cbd148e1a27c16ed82f9\nf5a50f36b74bef14e321c47706d119207cfa9ed48167b8f2c3a364c0cec895b9\n359b12b03e7e6b7f9d6ad99379841acd78c4e6035e4293286e6f25382961eda3\n83f9e4bf8416e3527e24d3545bf14039dfbbd056d243838f2baf846e361cf99f\n1297bbc113076d2fdda278bacaf8bffef964b31e6eaa8fe72a2aad5b0a401f7e\n52084225e2fae495e621fff749378ce1778dbe0cb0a801bf016326b90473e019\n471390ae69c9624cb0549bdcc3ba465d95be6a2acdeff59f8e36091e017682bb\n2b421fea645e4e185c132bf13a1190e9ed069e6d064ae496bc3792dce5fa0a3d\nb6e90cad810c708c666741ddf558f7dfcbcf7e67a2a1835c5ff235f4bd362233\n31f368d56024848a5c7afbca41cd86316330ae44549a0f386659b84be61345c4\n6330243856e232ea3d4fab164acb9f363d5a90ab82b96f80713caee3a8122ce9\n2ee2a809d66a55e4fe7a0f9e80a0e3ea3cc26982ad3d0581c700dbad09def872\n6ae6d5adb52aebe2896ed9679034bfcb370005084bf61bc9a636aa64b4ffb797\n783fffdd8856883a9f01acbc436f3c20af757db2d5706cddc16b730f7f5f1bcf\n8ff4ad417afddbe3a3219d7f81bfd1f23e86aa90544fef981c51d1f894dee934\n9f83adfaa58762757777033ae9e247af05d3e898fbe055c6cd73dcc8259ee4d3\n3fefe6cc94745f10c8b730db055023147896fc721987c418eb62b7e805fde6a8\n7791e4a660afc06a032716601a83e1a2d0e5cc7ccdd9be98c775c9af030c9ef3\nde41f0012cf6ebc780ad972c076550e05e264692f0cf32c34aa65a2caa26f192\n12e7589e8cb05e6088f653daab5726629ceb2aa2771a1d6fc0358d0201b3e768\nf0164f8d5ea44178da7568c9243cb40d95f91664da4049afbb447def62648214\nac3e3f6e2881c7e9df7b0181e13f047ae3b5e5fa90af3c84351c98fe04b91bc5\n719d357834c2fc98a42591b55aa24bf5f490ebddc1fa545b91191e342c9bcabf\n8653360afb102cf85778f01821aa578924ded8195d1eadc8762eeb32e321f654\n37be34ca242ff06d5865347bec5c82abd7940cc32b5006a67605c0e0d6316b68\ndbdba0f96f9b5fc5c8262779b593b8db2775cceefe7a48b5f316a4f31698bac3\na5ff84645c79829775952dd3cc0c417544f784ecf9d10ae8bbe2532e08609ca1\nafa10975cdd1b934df11862b8fcda2edfbe9ed95d63d4f36a9ce6105bff37954\n6fe72c56c682168be923884b5dd4450f9e389fa76b95ea79f3fe1df64f7f662d\nc8a586d75519e10dd0d90ebbf9666ccecf73bfa05b1aeff9e85f5c618c675f74\nbdcab0a3f41478b03bf53ec27e2e99c1146c9127a1593cd244abe930a8a8a4ab\na7f5ddcc932009d415a11dc6883c6af0cf4399f691c1a5b5397eda6025794ea4\n4f1efe05fd4936f1f7654e9159c4d0ecf71c858228578c33a475761fbb30fbed\nf83d5174cc8c999b33e27b774c78781b59de133ef6f4c5b784041927cc0da839\nb5960dcea98808afa536f7d56ecf6ba84ae05191e94c4ec4e15e66f3733d6496\ne8a97243c0d8607b7c762d6cf1b73d7fde323ab1169b4d4b047530bb1f7d63cb\n48de4680496579099a340644c4fdc510246b8c5791790f97c96ff10ef65bf01d\n85f297cfbf856f2bef9e2955c0fee6a0f577502723e7bee25f0ec9144a9f2be2\nb24edbacde402e9058c42a6860fa28b93c668434a9fa52989384ba1a6efd9df7\n4edac86c57c903f0538df34caca11e21dee02e09e83d3174c94314cc77030e6e\n436e7afe04e363cb0899da3e04b3356f37ba3a063bdcbc931e6b5bc67f4646cf\nb8d270a718b86d36a8bf71cfe37c8b406e66b6dd2570711309ffbdd171673e9b\n55b8ca879b59eace860c1389778b357c03f657d909d7a070278f3acc4596937e\nca71cef11fb4e07f7961d98bf4aa12021a75db2f9bb648add01a8ed2714dd3e7\n9240afcd1c4ed4645fb4dca172c3e44a2a40a05f4d89596dabbec24c4c815f5f\n352783e7f793966af602685453b8f05bbf52a4f79d1e4bea5fe588e556d66ad5\ne0c0a6b48e8464800520aa5027228c6aff5753c8ac00dc469ad07952a8af8fa6\n7ecb5c245335e6e86c8cc5c81189e9326084d45e6c72ac8c58f1778fa7ccfd5d\n4c3c69ccc99d6f0f1429ea3739829377c3dcde2505d56d872d1e7fbcc5a334c3\n9de1af692018b0aa10ee06f2c5656f914e70b7abe70282a8b722185f001ca4e8\nb9e224031d674ba17b2d9690a4974b11ed8e6341dea79eac4958244512fa3a62\nd8429d2f0d2a32aad6f1e52280dd739d012ec6cb456d909621121209daad0765\n862e024ae2f65144796c60d12d3ce00c0d1af7dc4a4cab72e543df51ac9eddab\n35fc9dfaf1e25d537a5f026489065a78071e55ddb03976df8773adcc2a90e59a\n44d95f68ec096de828f70c35b16a2a75fc04ccee27ad1ddc30b81d91cbe73022\n7b25422f95b4972e0d0b1489f9f8148ba9cbae8f923207a39ebbf1cf4a1c9983\n414a7f19e6863f688edd21ea5c3a6854b2ab8504c823d05a0ea90172991cdfd0\n2ce488448fede5a046f7a8049c5a41bc324b03675842341c4105a088572abdba\nb894a2ba251dd0e47bcfc1e7b7863e5c554d7174406a3e4ba884fe84c8a4e62d\ndd4a0e330a3310bf626808012f9500c8bd74340a3c842c28201e49f9f83a7003\nfd9fde13b05dd88319817b9276a30d101cef4f0102ff616a1b91e42d31413fd3\n740f60fdc8fb87dbdf7bd0748b228476fa55d89c5d2b7fda2bfcd44756b65106\n0e91900e774fedfbd2a858109c777c3456a2c929e28c211ca1d28841b5466032\n98ce3ce53ce31899d0cc6a741b44cb8c1308ba983ec621b93ba0490d6b5080ef\n53fdfb287db9e07b7044c0f64bc548c2044cd67308fac1593bdb701d6b3053b6\nbecb0dbec807744898ee1efd3ddb57e4bdbc9ac308b31ae4a028dae4ff15e1ef\n5116c7a6c133cc29ae3e2d505cfee7f7a396e9cd2d7e33e538923d69e6ffd765\n2e78436ce9a25c2ed8179c67e571dc890df7f88dcb29e08bca5ef7485171c396\na77cf997429644ef557b273a4b03d1f05303d18c1635defe672db610ebfa9f52\n0487328a99e4a4db3419894c8f21289bf056c6426e86e897ebcfa1b3e4a1bc1a\n2f93e99966d3224f5ad6de20efc7f3a6e9404f06f6abe0fe7319ddbe30c89321\n454804f55f46b6138889dcb05d5608d4f55f7f46f803d94252559b7dfa19c173\n667f3ee87fab52cf3bafb2a6090719016541278fa4b56422e7fc53f9d7e66438\n54d39408dbef48ea95af31ffed44d5390ef4c18149fd0a7d8e8a001551e26ce3\n837930a7d957e97c83eab239f0be76c0ce6d61fbcb657b2a6adae3841418a7c2\nda3e20a16d07f3e9752220bff072433444a675b5611e40e02d2f2470e5f0afb5\n3e3e7c55f2ced72826e1e30247abc1461c655eac5ea9a6a6d6e4ebd01befa5c3\n9c5a9b3e0851a08dfad338f5bb16bca6d2b8556dcb1b882633838830433260e4\n315d6166ae11d5b71d5c522695849ae7baff2a06ea1156220e0bdbb7ca18a000\n0bfebd199a922241008946061f06d6f51b3d6568e19a8e8ed69296cffea6a575\n7aaeb86026e15cb2ba7f152863f8a5abc40307c6645798d73339d00cc5c92a2f\n3da3bc763b4de25d77540ef12bc5b226ee156058bf7bf558e090dbeaaf39f535\n29154eb0410907b44735702bdb2bf5e7383656f10064a202bd37bd277c731e59\n42826b293f74abbd674ebdc8b405f73cded0b8a257a0367f5fcc093df445f7bf\n831b3019bcc1636e1c47279a9b1e930054f1b45199cc42bfc2d5fd2887a20cf0\nf6d017336a6b24b0dc355e5abc204e2d6dd28b16427ed27492a58cf285fb8fb7\n2c53da51e8c9582695fc9e378e91e3648597c0f4936fc43ded814e6f6ffc00cb\n9980f27a0dfc81dfbd0118c872d054ab50d417b528dddcfde8ab02cf1c49eff9\n917085013c5f4ae08711b5e6454a44a8ff5cb43af88c506846afefeaf97dedf5\n42d7df4d6233b04dded5a3ac873f0959eae931e8dd80c716d00ef7e4809a3aee\n1fb830706a69b1f3bce192c2ccc0bf0cbdc5d567f71e68a7906c0067c2d20b6d\n079576ccae6e3eca892aaa0547e526c31b7972b75d3050411f8fdccb9541a9f2\n9c16a8c027cf0584f4c80fa71d208fe3cd393ef2ed3971f9e1c981b4b134aae9\n07e09862601e91011ff4b20495fdf7158e6c37d77efc2b4fddda8cd506cd8065\neb2fe9e63052d128e4b0b61391170cba97cdaefe24b8332379e05d724dec2d2a\na7efb8e4bd9ace9e57d0c156b6def69c91e6c40b3dfdce56e3382e440ffdf8dd\n9892110499f9bfc8c5bb34c980c3677fbb4322cfff989040abd16faa5b1b41af\n7add784f950b601acd78016747c7e75ca596ff36f17cc5513c55557250632e9b\n48d93a6324385ef9cbabbfbf892120f72c2c3264f72fb2cbaa5e8cb7092aa1db\nb47600f988d41347fc29edbd930350a9515227324e1069d65bbecedbfe30c322\n518d3f4e8d03e852ca889a804268de2bc3e32e7e3276dfe95e9b909fa8d1cac9\nde44f3113e84e7390c00101ae9735b679ba962700994b46c1f32b123888e6c66\n1e2c0818e29fa44762092a49d3526e3dd0ca3aec9bc73b0090d9e328dcc503ea\n6767a35106c231d18154bdd971570f27b74a2c6baaf1354ef8e54cc3f0142ff0\n10bf7d5815715d64995607543f60cd47cf1eded92694cdc49634a4bd96fbfc5b\n5afe077e1939bb4ba5cc81b202b502fda23e552f4ffd0df0a97db3c1b965e4d4\n7941091dc0d09f50fa9358ba1916009d970d7aeacf926f870cf4e925c58c9524\n3401a64331f960d464f5ce7bdd01b324c32c47371c55bcae0714db3c50d5d2cd\nb22974f81feae7084bcd792b13f6872ffc69b953b13dec4a49ed337bcd537690\n967f380d93385254a9c8844d12d8c5912492e5600c12d73a28a758dd08fca2e5\n160fe8849277767c4cc2dca9895b2152cab6547f8c2578311abd111b372c5f3c\nfe65ae9ef1812c5dd18cc16f291b91f42c3c33583b2683ababfa6da3d1012d11\na01c9659593cb99375e449ef54147c6e8c7f2c7cd02851ddbdc23a223d6fa75c\n2922b78ac0365868dcbe38242fed4e598d46456d9a6b5db4aeb6916602f42210\n2927dc778232be64679f464a66a1b8ea70209c801d7c951e166ae532381ea65e\nbb49bb665f9ecb7d793e65fcf279983ab9eb95469954b031be5c135ff7882bad\na36060388027f824e0b00ab50289f11e483e872fe90895b3ab88ea5f30511843\ndd3e3c75ed15a3e587a4610807fb3208da4b916517860983e4ae750b4e69ea34\n992645bd81eacbc6159ee6370f0fe3e5c2b8d3a0e7d1d75a8f7baaac0fae120c\n687a87c8fe67c9c65222b09a1624e7229603ed41bb1c31e8ca6035c729a2e86e\n1dfdbcacdf4ec7b17b7e1f3648474d1341ff370ec49ba285d919d88b1dfa03a2\n4f491b26eb1dc656b9c9f88015d231071e5e87694086d05e4f8e5e05fc814d3d\neb86db8d0cd804d8508e316636857e25aa90fdd69d7107438bca1fc816fb5299\ncfc6af918ffec351c806583913b7eed861e77eab0557353f45eec68500c3d82f\n2492f932f8312ec4691d1801ae0cf7304af7314ad3434c877f0b44ccdca7faeb\nf903b522c09968d538719c2ea1cd58bdac3d4af0904ad3ef0a4e3e4efcaa14eb\n7290575cb38e67e534c8937558165d194b5f3bd6acf48f5e4775d2cd7a17a9d9\nfa0ec0a67011e397f50b4f3b17fd1b070e9267aaee4f71987e7fb0338c177703\nfb1a0996b702fd1520775f97d7c467cca3cf75a6cd67bc369d2ab175bd5b39da\nf954d496b1e1669c8db2c171763a379e4ca6b58960073e74a85fe3d47b25a25d\n9ab41c029c4705f1ec2800f8934d7bb96a37d756ebb15814dc1d289ff9168b2d\n78111b72ce3582eaefa04f1b05a148ed3cae1d923c9ceb60ba22b8c43dc3d789\n7cb56f1af50cfff8ca2bcbc912494e57f56cedf1d4525fc42b621af1b574ff13\ncbb11f6314aff0b296fd1af2a56a3a6c71f135447e72abc7b02964d51b8cf1d0\ndc62ffdcaacb719bf698df7e24fbc429d8e4e6be344b96584091954d324408cc\n963f4701a0802cbcbf00f6ad81c79ef8c4cc73640cdd7811386192c522fa64cf\nac05466236ac61c13cd599a71d1f999cda7ce2a67f95f60f8424bf93f1266ee2\nf595b8ce7c00d812fce669bfee31d905a881eaf8b51d6c8b02ddb275461e934b\n47b8f63ea8079200999216b7bb9b01c91af024e6a1aae940c1a85a8bca13c67f\ndc8d93eb74ed97d22c441aa83546c360e15ce65823e67040adde64c9aaed4262\n62d75053f3780495f508bcfaf9c39041eab9d31ea89e3c46e732c420a676f85c\n898ee8e27202976e80b5b8ea0296d46310a64780d7a8afd2ca23d360e0a1fd0c\n99e0a84d0b6b0a77cfd41ce794477382cf1358e08aafc4f63aa2aa2e573b1cc3\n97797d98aefa5288acdd517efcfe6caf7485a4d8fa034e5d2184b653e57a2ba9\ndab7db4933af96c94b49788cf8f63c66c96c08f609b3ed94aa751e8b607311eb\n6cdc6e8dc8d4cb464ad6518946c0bc908f905bde90a85678f9132543809139d8\n776a1aee37df269ded879677e284e47b011591732bb9ab0cbfebf34c06911c5e\n343cf808ba5fc8c834fa58ba7186715b6b8a49d6b005d393069aa25039e61950\n2f008ce4ee7184f9d5e6225debe6665970379839f62bff5eeeed9c187eae8c72\nb2ae42e63f9942e7919741030e3ef41db2101903689fa998b3a34fbee735d9cb\ndec51719b6f93acf6e356906f658b9930b4fd4d9946ad7c842278bfd9f3ad910\n44a63f9c58cdb9713f5f304aafc72f6b02f3229c3c565129499e8ce112eeb4c1\nb3850dff46803b659ebd45522721b38f91c747678471f4e481e95d47e3311cb2\n9436a874cf87d61e19312952ab90c908d72284646ddd165edf96c95b184103b7\n2f43770dcafd181d2d97fddc1babbd5e3f91282e512acfc54fba8c6801331490\n88fabf08ccf4b6ffcfb3ae0e927e31b295cce6fc1d54b6f35aef07bd577e1fe1\nab5db3d36fb8c9a6c41b04d3beae08cbf9347cb69ce1fb8fe919567c897d6144\n9f47469c7cf62cf2ee8725185cb21c96eb2cabeafdf6dda13e5d23ae6dd30ff0\n0e8229a2215e4ebb5a2be81166750f0ccceea7b0d9e14114621d72e47c995b50\nd6de7e490d587fc116bcd14307c2b0f236c96b8a7ad62959f2a59cf623a191ca\na61af509119cb1eb607997dd2ecfefc378e8be9f85f52aa0c4393c954c0a2650\n530297903b4544768be5ae8cb36c5bd7c377c0b092562ee02781424debfb0567\n03097172daae9f078da6363d6600d83a4ca10eb3d3730514c00c3ed23d0bc790\n6d452368dab19fd9d9e77368d39d3b3a9ccd25cb0a20d84da60ab033eb91dec8\ne4a437996e331f582a355cbed7f67817142d26bfb89106e15f75618f7facd537\n60f8e25a62505e6222bd3172fa8948c65cdcb54d63b4df1f45519bb0e284cbbb\n6096a8f734c7a4687e041109f4447d9fe7b6920654fb602a5811d6abe470857e\n3855802b13c4fbfe9b04a224b51abea99b199c9938ab3cef5e5df590b8544ecd\nf89ffd8296b1ed531b23c7778850e51ea00aaf01f01934805b1a25efb95a1db5\na392d73ce8248238ea529992ee52e25ec80898444cf8f030e07ad425e8c60e9b\n2cb46235833b056b0c4c56d2aa35e7d765c48ba672dc5f68d5a1116287125673\n33a7e3aa96aab2b63bf53cadeec8641669a4a08e545e8715d7809c4434b771c7\n410dc0133e15cfda27efa523e776ca26dad3b27a3a7e33fd73ec9e8f7b5859d4\n5068eae3a934221219c096119e9d83ce70e24bd978ae7d38b6169e64d6c995de\nb644397e0e0fc86aaf47f0f0940434e435068ab163aa963710ea914f5b4e6c19\n9c9005b869ef45e2d9beb3ff446ba1258c97faec99d59cfe674a154fb7d647be\n7384e1e3d727d1f35fb1afb7ed16f0a9f6363df34ec66ecc4ada1b7e98b7992a\n7031d7ac6633f56b493fe1a3011bb4a7ca6c83d8d0cc70cf83bfafbba64efc79\nee1656fbf299ade5c7f5053b6ed002ec6da9b3afe8e25facd9fc7c37dd6b3382\n2a30efb91448b46eccf9101525493478b1d89aaf2d74b36d8a37df3667f16444\n7e6cf7fff5d05d7753d9c2254fd8a78d5c34d1a96349a6bc393c851c72fb876f\nd2d7fcde10f52e559191b7f2bcc4ab90812188c1b5509d9035f2256b786f1b4f\n5c9c713a2e3d9c9c57bce758ddbd0b4541475c636426729cc20c525f1d28c35d\n5f552f95e0e33b1084d8e6edd848e992cd91e44a91024b8f5606df9c90b0486c\nadcca028abee412a2e1e3bca866d3a27d48ab6cfba8b9b728456e4e68077f249\n29d754485153bc5398abe5e7bae4c0df65b867f33e87c87b95f5c3533111c0ce\n58e92f6bf2b1a81bf1c388ced960b636077e6f919373ca9edc8eacfcea353d3c\nd329364ea1f12e77a5270da0df336f0dccac0296cc6b105123e7c561295e7342\n30d7a610059bd0dd92208790bf53a3b866af7e41d755abecf0828047dc9f48ba\n187b933216ca753e0b3279feea006564e28693aa03a4402452e25d284acc525d\n497f3bedf42f439846e73a6cfb16acdb3676f96a66e0293f1211fa369fa546bf\n4312c86a5c050c0c3f5f753a6910421842e0f26a501f1a92534159a65b2dc4e0\n046f68af0db555b4c1707caaed588db2e036eafa40766cbefb5c183e327be4e8\n84024145af204a3df67ddcfa785aae5a0bb3a4580476363440efb744e634735f\n95fed5f06cc31c40ac4b9ae87834a15860041e4f069375e547a21cd42b38c1f0\n944c28f6beb7e3a960113b940b9a0afac5e69b84c018a93a4773b79032d82871\nd7f65f7ecc50e5effc983b647a0e5ea134b3f74fdb60613a2964d52ea4420b39\nafce2c80bf3cf145e402d8d4d43abdcefa2b27780d52b2c331360c904aca25c3\nd2936426e9deed9d968d7cdd8f31e8780f3de4aeb374a7ec723c35f37cf9fd9a\n5d45e292b03bd62a13677c83d5aad30675aaeab27044c7492ef942e45096f304\n62bf062dc1a21da6a0a49b883145a360fb05478785b47231bdbaf85eb87ac824\ne2ec98fecffeec36a983aeb1fda15daaf6f74778b524146b2d30a02e898e0717\nb1b92e19b5d8838823c69323cb0723ce6948747a59fd8ad8839ddd83612ca910\n7003baf0550aee23de6e4dbfbda1fd901f73d6049f463af751b166827eaf6cd1\n85ae1342ae3709921ce9cacc41a4758ea0ad557d44daa2c1f8b7e8100d5d4d0e\nb2b0c5b89bac53fc9075b7ecc6488f24a7ca879b64f0b32cf88a0b826b1b80c6\n427bc55028579db7b10bb7064bfc0c66ea8ef7b944e8d6ab1256c8f30437d107\naa5efe6905898b1be5fc1be1ab87a643e77bd5ad3887a4e57c8acb9ddbf31f60\nae4c44599b91c55dbc8b329a40a3f6355171d26a09dbc9eb31566f133f963004\nc62501c178acfa72a92f9049593a84cc9ce7f679dc3a879e3264353b850883af\n07389672801bd132b609c22540cc5ce53e6bc64a6a112df84c0fe7d28b3251a2\ncd5bdf29bbcef2f00831739667f2f9613193c82187aa7624a8dd65059e16587a\n2b04df11d0c83501804463f2410035bc5d25cd348b74f2bf1690c48d81973536\n2ed4850757c2410caa4afa1d69178abe118abc37008eb98276582f0a2835510d\nb6d94944bd9c5307840a9818596b58376fa143828a162ec1dd223a615f20a067\n8c95e3bd23a91e344623de55226a6d65d8c1b5ae1dd5cedec93757b9415167f3\n9eddd35de5967174babb9ee6ead083025cbc1ff2f6e8043ad7140f406f28058d\n8ad04aca4292e4154a1b2ff3f95a327b6cb1931288a00a83492b9cc909e16e63\n879cdc4da2b7a0959a10ce535aee643a558deb122b6cd733243452eb8f4c54ca\na1758e3069cd21c15e7768c9ce6335d1d3a7e5e365d352ce7bac9bc25ff5cbdf\na3f1ba8f14a6f032a842ffca22445d2bd61ed00e61a3b6f36cf71c0f0a74bd01\n7b0929ed4ff827378316f4d36af68823a63435fdca1d768628c01aa6f6f48d83\n1c5f29596409672fecbf761246fb1d24affac7ab4b9d4570164b98cba249c187\nb21b5d9ac4431a08d224b015d73fad60dde81ba6d663fa7f30680615a1c76e66\n6565bd44a5fdb00df11e7bbd72107757dcd094760697a33019757d74d3733877\n8a92ac1b6e13be1119b64111352ea0ce6fbf924e1c117d1bb91bab47c0357519\ne45acc4c6b8d3550cea042d894e177ecb982c3d840218883eaef00a87c053c43\n55789542d2daaafb8b303c72c68ab43b5255d8812b195523e698a9e7e53d0b4c\nc9b93f0eb6220bcf19929718b194a33455ebbf37dfef58ae91bdf82ceea844cc\n4e7df3ed312556ead2cae10a980a8aab0b55bad971fa87ba63844b9374a71253\n9c403a8aa1a44126eda154b03389750345d19abc3d81b84a5666c7995af5f91b\nf2d1ab79a31a2c9675c18f90d77dce0dc498b17a952d3e0b6d772920ec704e34\n9d5214c3c5711d8a3e4f5310dc276eb5df5c93c809336fec269bfef55d563c97\n4f30229d75fceb8d9ca5391f8152be387909fb32e173eafbde513320ae0dcc96\nc898fff63c3914cf2278326fe90c250c3124c4ef66d672cfa0a38ca7af87d972\ne6b647be9f9e9e4bf4efaa2b8e8fc8c2235b356952651c773ef7abf15665e40a\n284041bcd252c3a501a9523ca992dbd7f9f63f0f440a277f32a00eb9c0dd97f3\n6f2c541af63f6a589e16c60121ef459ba4259a4c4c97cc4c78a34a55fbe767e7\na8efedbfa031d4d579c5f56f1e3522d0d17585d5084d6f6b14de8a36e50e5c62\n407de368a35bce42affefd55a6ad0ea91f0ad2c580d84563a5c983d7f0c222ef\n4869481b4916040e5a505587139726bfd25b3b3323150523cc2ce03bba4f54fd\ne638b7c26d08c7fa9d0972aa34e7210e8a9bff6566abd958c10773029a9277c5\nfb2c051d412a29f650467cd3621f044f2e6f84b0bc6d638fa037337eab2b4387\n28f75d05d2ef758ac3bc8ce0009b97573881f01b202c3412343c6bf2053a9905\nd661aa7384a4225f6056fbca8f1f5e273044cf781e5e1a8689f7510a7b6ea81e\n77433ec4f50f4d50b86e74f634e54225e7cf61c7504e1fef60bbb84d179d5f99\n97f744b72ce03eac2f2c675d3f024d497e908c9f118d26ac7deb208ef531997d\n02a99d2913490941a7bb03453e086a7eb6592f864623ae3c62c717742ee1af4b\nf19decae1e5d3216d5ec47fa5215681c82354f6cd1e6e273f2cf427e5a3988d3\nde453fa04d0e07b463ddeab85010f93fbe4c85f740105f732b9aa63cb9ff7b3b\n7b128e3f5ba593aca2799f584aa68aac71fa5f5ff4d0c751f024de5dfbf8470c\n5d0652995e02ca02f60f9a9f588c1a9b5a5618d252b0aabab6f73d6274e97168\naca26b60bbeb72ccaa91b3c5df1909cdcb409d75e6ddd1b49112cd934b5063e3\neea902ad90a1d45360467af8a6bdc06e168074c51cc43658bd0e48e91e12c149\n5436f16db485f850333ac6cbdc09d8be9e27c76fdbd15e1f85feb151259ab359\n522c9976d5dd16b775900c0cf0f540ce6c498277acc6f0663c8a4deed0335d98\n7b06311399c48a8df1fb8c0ee01b23d2137b3ba76e5fc1a1e88dc763c4aba767\n74e06c41d692c6c741dca611594116b6ddeced30e843788f75463e605c7b655f\nfc7e9bbc4b81817e9a373a99f6322b6bce04340a1dedb9b36b1015366ec367ec\n037f8a631204134ff52ed407f55c60ff1709dbbd06b9887fccf6adcbd642b36f\na95b6e264bd1e69bf02a36b5b48f9cbf60d4c0c81376d0fa83f26370675c6980\na4131e980fbc485b06ddb32d55ad76ca0d105c1dd387b8a4136c28b1a088253b\n1504d32944bd3083547e42c2aaea2da3f9396621bacf60543421ebfa45d77a42\n0a7980f2a2b61e89c08cbf9dde671d54b82a260956a52b5e8c77fbec567141e9\ne5f8e75278e459dedc2335e9bdb6d3c4b98cce4d500fc6d0636e0398cbbccf2d\nf76fe8303aa2ba599cccffdf84906bed5ba0ff000484e03c880b3d429755d0bf\n967a6da4813daf7f8ec17ab61b1ce6e215ec9d15c493689416563c79d1bcd8b5\n9334bf423ccfdef43c93a81ffeebc74bdfc0205fadcac11a9a355038ccd0f608\ne96a815d4c347561f123e656a4308654b47a0cc733c1b487d9aeec318e8c4827\n70178170638491377c7b9ec5ddc283d8582979d123384a1bbff59de08092f0b9\n2dfa2dea557517a74632eaee181f773b8a0d2e45245fce7d7833ae58231a7e3c\n0a380e8e8ac2f3d4ea8cda8511d162ed19436fd348f16363d1581d481613b226\n9268f0132713ec883102a083f36fe80d00b3b8576e4f0473b6a4d471bb5bc9af\n46f3f764b7ea223f3431aadeb55dc0208574682e79ecd9bd313dad8ace2e794e\ne0c843e295836f4bb99e96bbf2a44374b970fb85e2812ae6dd7b14a9539894e7\n660a487574762dfdbcc9268559429b456f617ef0139906d5986a6bb089ed0030\na929121d5f72a567246454d7a8a2de4718da4f1f73b6099d8377d46e39523ffe\nbb134776eff54d47b640092060df689803107ff21d03d2b1f74880556b46e270\n06c3f605727414348d157b60b7b43f152161929eb4ca2dca5d1649c06bac767c\ne6662a0217a507452a733280425cee06d4547f7fa935f422de443ca5332de926\nb3697b3759e859c8035b455809a10699404e50fb19a27f9570ba99e1db5537c2\nc182e209dd3272dd274a4ef30ef5329f7cb948abde8516aecdb489b2fe612fd5\nf7e4a58795eff39bf979c37af38994be52de19475289cdfd44a814e61f082992\n5dd33629dd21237b0755907cd4b1f57613a40a1df5fb49e4c669bc6d9d9021ef\n82d47116e9f0f2411b86f9d992306e6ce7d67023e719b4de162a56cf5179a122\n064790ea77462dada4aaa01e3712cf968a5d927a6345e57a38b1e39fd450a104\n55c4774876d425bd600a0d39f4bf40143d86c9482865acbf02103e8d5820c8fe\n5e970f8c13716d6c2527bfc9f2a0379f9497d66ec0568a848ce1d27a5f35da87\n873b9fd0618fa1a21fe0cad26c94146ca1a7d2c3675c22edd8c65e382ef60951\n83367a8c20c5e03cf363bdc01a6b518c23b5a7af0199093dbaa827be1dca4716\n0890d2d0093f4f1542e5d4bb97b43d3d1d31080af30efe20a27ccbcf07db14be\n614257b1e68eac82d68ae3dbdcd0615313450d751d66ce2d3be94cc2c1c2ff95\n8e92fae38e2ca53bc008f833012a59c250298fcb189bd53f5e480a582a677cc8\nd2cb0e808e3ca2012829789ba301445f03472fd4b8c420cb868d1e9212fd10e3\n61369358976feb648b7cc1f93f6b480237eabebc32b938c2121bb82eaff43593\n721a55506efc368c2c92282d3139d1352acd1d4ac198b92e613290575e824bba\n6414fb1bdc7d67fce5bc6d60b0fbaede50ef85dd26c0bd6d27f9850272b02aae\n396c5f2673f65cf547c683046c64fe90ed19e481199e708e65917163ae2f031a\nde518d5064a5981ed1baeb1155cb080aca0fd2ce55bb8b085d4d15946ebc88c8\n7748ff4af7b88ce353dba4a4d2c420e0f788cb7c7a4a0b23c081fbb3c0959268\n61bdca395e27a3183080b4476e04d886400dd28cb01e1e14ee5c9f721c7b0f44\n739c4be12ce26be1a92feab1ea81638d61711c9e012e08a3eba26bc5ea9c00e1\nf70802c51d31ac4a905beef495b891d45b1a5439cc680e03556e9dc2560290e5\n05ddd0846d20f50884d42ed6c72527919a1465cb0b4143f4f215d895135c5b70\n4c41503eae0e06675ba7ac9ab88d49ec122625a338ec28fc01a7dd1812420e06\nd4630346ff874aba0a22454891e100d2a618002eaca5e9efe1fdafe2dbd2977d\n1afad242ae5e7d2fda923db586f5e295ec83959c7c5e16012e5e31c82146445d\ndf96f31f8438f53726153700b5e6ba5538ce77cf3d3f3f49fe264ec6b449f4f2\nb8e1fed15cbe6523c248cbd608e005fabe621191d601fe1cc9acf5afefb1604b\n919cc57d493bec27325557e0d9dd5dac25ff2c1a369603374f165e87a86ce022\n09c3e0c297ef44763d132a458ccef3195353ecc2043a0333e154f2df1a7d23d1\n33460042b9d33971bacdae39f7c2834d9e5a97974a0d697dbdcf6d5fbda7d581\n10658e2d71ec87f16eb4164422a2e8ee2735e0ea85547f9d3471351c2f710cb8\n642d5b8b6c877bf459c21f4fdfc4716b5184b187a7ee37050c5133219dae0b92\nb7a44974ea3cf1364f950e3901db4b5246b3908cf9dea59552362a6924b34586\n66a09be4067110bcdde3271fd9106d49697e0ad442513a16e9672c6cb53aed1e\n33ec24ced53578b60cd1f7dd2b58be891b1d4205ef257d853377ed1ec37beee1\ne364a09fe3113775e9d76a55775c9eb227dc53f3645f339a9bba3d3483091447\n96fde4c1c5542a907e02d877b7532819beb7cdcd51e15bc39482d291f397db12\naff63c263b47062086c5ecbf0e63e689da4b5b22deba60c9f4278f7b9a886c8d\n99df9b261c68261cf0cb62f406c1401b687de891b7a0cf5788a4c1e877e095e3\n312c629a9f54a9cc60f02767a440f1b618973c76b43858fbc5ae0869ae88c7fc\ne7174e54ce714bc8a571e225d8e1872a9d5a76741be3dfe06b7930e24ff33d25\n3c8ce59873a7c7ac75f82b6d1caf0c047a55042c726e18711f0a6c77abce9702\nd6f17479ece8e39b0cc6846ade7c2e20a57b362a18b535ae884ad6287f1ac74f\na2d714107f24c03eb17568f419e17e6a52036f68acf17c73aac73d3231b7984c\n09b96f15b049c7eee6fd3193ccc673fb9796261bf3ea1b655d16cc4ef6320ca7\ned485e424fe2e1b69a06018a70ec7458f42ab1a08962acf035e98a6f5db7057b\n50da20a4f5348d94d3bdcb829cf08cbe700cf21ad654494bf4244c09217d1850\n01db22fa6217d524ce1cbf361cdf72374499ebb1fca85a1b3d60c862c7386728\n76e4f74d83196401c78febd87de92347c5bdb89ea0d960a46f0c0f433942ddfb\n5326791254250ba4962b9068ffb8a4c695ff7706197fed23aaa680d551be80e1\n258d65da8d02dee4e2bb12cf98caa07aa6731f8ba25596bed3423ca5304662ad\n9d309e28ce9c76e7416c50ba0bda904da834e43bc6e8e721f1bf73030cb5a500\nc7e03ef20f0b4efca4043edb3033dd5bf89f0d0913552190aec70f687c5464e3\n5e24aed17837c6f079146c17f973f8ecbdbb22c8e77206463ea32ea24935d738\na5a6d5a1519486d5842c458a47d4bb04428e879df74c8835f995c4f0fd7870e8\n3e7930af0bc177eb8fa0920991e3d67e4672eeb2137a28a8fa09b88f4d4db0df\nc19803a0b2d219784decc78a4d695039c22347b5911dd9ee8286eddf365e555d\n24a14a5d22b89a915e436e4c23981eec1b6b5c3b3f3f84b7a678fa403ff96de5\na6fbc31140ab5b24e89b0b460fc9526f726e39acd48abe50aa7173e725a1a9c4\n7d69435c4df08a506b2e68740fd7bf2dadf94082317229a399751c65e9972499\n6f988a9d141b52049b19474ce511a84240e4a52d57fea47bef625b187b1ab717\nb68009ab8ce303047c198a43db0ae0192d5facbcee1be3a37bcc47ab4cef09e3\ne9bd56a0196167ba1b45cd5ff5199826af968247bf48f00a70c9db5b0987572b\n08e95940d78f95b0d1b5cbf7f0b3b70f76790b368b31929a14cd819304e7e0f9\na381cde34cb8f11cc2bb8f6d5c01bc1f1fa51c18c404825148d2a2029160fb27\n8961533afdaead0dd09941d16e76c5da8e15cb13d92479a36ae85b8a02879334\nf1e3c173b4b4b2aff0a1f1914db36ca66f425fd340356eca0c080cba285565e7\n8f27e45cfc330e84d2a9879de18b4b2762fc761152cf9db4eac4c94ae999815e\n60877a45ad33264fa712fc0d15d27053c595ee0f7c67648f600b892d94b8fbd5\n435fac8a5f3ffc0ca0f2181cdba4fc7a4862794e77a844a8906f4fd77ee915ff\n8e96998ec36f32af55e3791fc6b20edb20cd01b7fc561396fc66b3833be4aaf6\nc5ce157a9421366965f6e49b97938f1ab4f1466abc7928c6adf247cde5a7d797\nfc7aa39e29967ed556f3c5d65c3a098209e0cdbfb1ecf59c9e735273a370d914\n8687c5c066d9cdef6d9c428792def3c98848cb360e5d55591839665fbb5c34d6\n4321b4f8722265a16e62277c33c7bdf4d6d2d9dd0778623de5682844ff7d4075\n9d626842eaa05da8a1a66b5721b88a494a5b84b21bf4dab98a34fcb44b7c3bd0\n6291edba92859a42bcc1184ea4415dd8499c7b2733dca7ceb807bf814e7c4b71\n0ce0c2c9da71383d14a6812ec9f2e6a85ef10341503918fa3e7a62873696ac99\neeb41dc7ec50e88677b7f7c8d1f49d695c270d0d3aca3c045dee419bd190f348\n4b181171d988ca0199152774862a265ac6e2a5b96ea4ddc92bf9391ec0d13e5d\n19fbd276afe0257edda975f14697c41e88fc6444bf2f1d6a404c1289163344e8\n55809fa6d91c746677246036befd28f5b3834c23172a7d3f52ca469aabfc13db\naecebf84553aa8b3ebe96894df63ebde8b2258575dad6e9356b19f07ca4d8ac7\n7600c166405c58efebc89dd5b6fd10ffdf8fe4d89caa056c9832dd874bc253dc\nc3cb06c5ba28a7651238e7a2f2c0e116d7215cd09f5e57119b76f47feaaae478\n7a17220aa7644705494776f3707ca265290a0c52871343d147fa69a7b03cf871\n6e9a0039db590cdd1d03ec4f8f4e261260f9aea48c99a343bf2b151b13bae351\n6f743fd1620b3ee01d9e878e8c88c08efdbacf07306e345619ac82ebb7cf98ae\nb0d3ed8b3839aca5045aa1339249a620a1967410dfba5148961530c0275fd700\nd4245b32375b0fd2d7c07149bb35a94caaff26baa4a31b9caf8838ac32a4fda8\n0fecf6ad67e090bf8fed16f4d1404a8af766dd4b125a7fedf3da3b79abadf3e9\n7c8bb36fdb2b88b8858ec9ad26eb971a23125ac4f62391f1e8f1e8e9c185409f\ndfacd96200b5ca345320cad4bbef8239773ddfd65a8f8b58c886327de53c77e2\nea8da37938762110f1cf8f1f0e12aec0fa3ec00f1de30587b0224089fe24ea82\n84b721bde34b01090fcb3b782b0022f25a61252c046841bab161186f2b38bdea\n6a10d9669389192b901053901c2e4508bcdd4ca39e75a7b219df8bee291741b5\nf56de311b7a67947703e3c8d04372b608e7c8b7c623290add8960bf7e471dd22\na148d87f116459b82c5414e1872493fec79cf27571c70e5074617a3a32f5b6e4\n3f195ff74d9e3247b7e9fde7e0b7ca6c9a498cf2d63d116b8b26dec8157346b7\n17f9fb6e7d6232754f00be17a7952e0c039758912979bb522c2cc0b6e94e7d6a\n411dfce18f3ba0104e2ba7c2811645555880e247942ad15d9ea0a8319357edb0\n2b500a92f77bacb559ea30a96317377fe83bdd591e594a0df82513aba98bf3eb\ncc0655c6d140a44b14aecda0b5ca90df3874a186a5bebe1ce16f2950813cd66c\n25bae442c42bf9ed1ac5fcb996e587b424c021e6b7ded3c5a91f1015911e847f\n79c6c6823b109a31ec4f4665a586112d3d504a0692ecff9dcc7ea9e518b28f1b\nb29e168f08c496aae361762844cea22c2f1e1cb6f5fb26bc105034b52c73d8f2\nabe241b900f0e8426186cbeddfcd7225d29e3096064d3cf271c7dd0f514755a8\nb1db386c886552b1e8ba53695a3ae0d3b6e53142b4ab37bdebed75922313bc41\n6899c393cda735b1bcae0b41ecb03c9b31b2462280511c0c12bbe42fead3e023\nd988e587869ad1e63dc8753200a9a437a2260e1cb6007a807fc0f02563ec9dc8\ne835dedd7933b45b68b812d28f7f37d5bf01cf685bf37f04ef99314617b5e7e4\nf5fa6d64659da3200a978c021657323882ba209ec1a2a0acb9bf07ce427a41c6\ne7c1955f635f464cba024000a65f7fc33b60060448f203b908f4c3ff1d71d91d\nd30a0382ebcc8fdd53370f08901858f02d3060c7644b545696e20ab605d6d803\n369337b5514d24878a5610e3eedd2d3ba82574e79b982327e460058090333b80\n83ab8c16cb516c78914abb58cd4618abfde26e7a3855719c6b2f3306dd5ccabd\n789c4fd7db23b3a41475e643a0b473384406512dd75de0a89cc610dfb25a4d2f\nf78ab16c330fb68b13c2867f20373169398d63eedb070be2adcc29a81a3132ab\n8cf44516838268b807fef228e82ccb5c9dadf92dc57a3dc06a8f38e356ca4de3\n3e8c0bcb7326c5278a22b3736b08c2350e368b9a5d89672b3b92048613fbb7cb\n57dd8fcf5e056ebcec9bee00eaad324aebcb5fda695a0af2452f41a816227113\n86039a36c9f196d65c924f30aa5ced77c8e3701487b1a33f2b1aa334de66fbe6\nb6d2101e664768cda8732c1d7c85e791238514b2858b21c3a775ab27b0fed6dd\n513cd381234abdfe3e1dae6221b7878e9db26d739ca31ad11167a80381fa36dc\n6b0f7623d8182b278359b00f245fb045365a9298fd5a3be7fa913076f364c5c0\n51a293871d527c5675ec8f36d72710299e269a40a34ad6138b8a1da8c1d66e03\n8a0f0de3501ad8d93b9d8020d1b46069b38bd8abe98be6712e61ccdfef23e82a\n77a56eb056d60dd42d4aacd0bf4babe343571eaa8fc622d13c98884dcfe93a97\n8301b21bdd7773542a23c8fda8a8382096b4c206ef5bbe05cd76e622b8b2f0f9\n278a319ed57a024263a9bdc2ce79742116c82ec37c6014cd3b15e8b924f8eeb4\ne82ac6b2cf32a3c6f2a38d44633acb89b92679101808834cb1e13f5a1ff5ce4b\nd3017a9da06c0ab45c2580a057f2cd74d5b203c27e9924af8aee6d416f186cf2\nb95605a705f98bf50a25835da882ea7630a70c6af4e04c9d736ff86e50bb11d5\n6ab515a9e73564c780b13c0300762aad0668d55dfc2db6a470099dc78cca0b12\n8100871e14579374422920abc312e508c57e95225daf5e0c0155d3343f9ed655\nae052d55f46c8827c6247da2c813febc01e7733a6d66d251c15f5d5c0c38e84e\n90b984a4450fb26510eea10ac3bb43326de906adf18f9591f30df1e067f85b44\nf95b7643d21932bb35311dea9000cb945a51ff01f36d82929dd4085b1689454a\n48bd5a5ce75a16447072dfaa4f3d3c293038bbdcf48e03a5ba15eb44eccd5643\n3ce5d37bd1593295789abe8a8723cdc2417a9ba82c4c62ad4759da998bbdec83\ne9ff2c4334a27b8de8e1bb75ada62294fd7ea1f0c53c31b353fd38429b0824e1\n888753ee5da640ef8a218c2c3c207d45168bdab2ed0ed2e08ef4268d5cea574b\nec086e0a73cb318ed02484b2c2fc3eed6d0821774a77dfd70fc666eef2024872\n97fe21b04a47ff7f3176594f8a22b81937eca1fbbe8b910ac15378fd0b376112\nfdb8e069066ebec35a45e85466fc9f88b43cc03c337c46d98fd075e2a5e1e47c\n1ca0df930e0cb2fccc0de3caaa41f73afcab61bddf7842257099a4de1331fff8\nb34dff2d15d14ce6cb17954bd04d8468b8ef8b6468ed2ecfbc442ecdb8693e07\ndd2d0ae55043534f2411bf89f29681de9a61d76010a4a7c6038815c47906983d\n8ccf17d4576ef39ede68a055d50707b7213edc0e7929726d58f0b89a4839205b\n0986e6671a981bab106740465fecce455154ac627ec02391fed4129e92c6f518\ne84d00a26a6a8207c7abb0148d2005fd4105657d9341bd3cbd0e373378ab3c67\ncd33e98e8d1473e2468365f849d3519abb3c3c260134d4e355cc499e39875124\nf330a5f3e80310e661520cbde3656936cf78672029d1b3468c77aaad7d8b3524\na98c944bf56f44dd96e9261a8a157da4f8486736a2d2c3ecadd6d4fa623676ca\n6964a6f97c46dcbcd7fd390e138b914368ffd17d873ea616651bf265428e1725\n8400e22960e4c58985ac3241a605e45374dee6ac0d8aa250b022921f40df733f\n415cca0f91897c723587169c5f73270ebf424bbdd2a866784fe5e1cdca21cd23\n654e46093f3f54b5f28e163e60c4cf8ec3d3e57a31154a3f12e0a7e0ef8183b5\neeb83111bd05d370743b505059ccd4cb669ddfee34a44a01a1afe49c254d0171\nd3b4426ed4d34b27b789396e6d32fd847c45eb629aaa44d24ba07461ec9e710b\nff26974bde239997db3df3eab61eb5ba8403e1e15fec22a114cfbf69e30e7f74\n13269f315145a82f1a97b49cf98a54aa48c8b663e0b613ea70e6e455f8d73318\n296d094ef68e78e52a91e0102f80fe013b1d92c965732c5703036a2a26fd5f9e\n8580ace5e3371a2d7ec86c68c209c9b74f45b06ccf9adab496fce70e19eb6330\na169e4d347f3648cea314d976135c9f289063d4ac7e5e971127011039afdaf8f\n5fd7b5dac52eeb0cd6b090bbcd758befa34b303f987d5b208a30bc856b4d17a9\nd58c8ea780a83500cb0ea13a08fa4c2c264a393194419108996bdbf2c805d542\nac1223ff71b7c31e53ae9be22122cd755d192cef5c80954ac5a6a7499e5d16dc\ne6a90fc6bec67d6c91f5a22f598f7462104414f7ac5e66d3e332839cfe667192\n64079199396f3ed88bf3357d8a9301a09357bb43d00a5b8bb672835608523da4\n3bd2580e0e08928505b952d93bb90566cb3c2682b28d4e9e0a459a2561d71179\n6765d37d74b608087515e33355fd19026d04e621a9badbd738c888cba04c04c4\na758ce6296675a0905ffec6e4d1d066c84f61aaa2daf83fe1e94c8995478762f\nd14ddabfe22f868ffa55870c49001505f237d46a33e1c6c547918362f9b19c37\n442c9d0b10b331b9277a0cd59255d0722fa6ec3b8ba0b94ef8a8bc95acd3ff2a\ncdfd7a888c2bceac43700a3ade9933667f65ad3ce4122e4477c996c742b43b5b\ne2e67871365c7cfe613ea0bd1d2dd2b01ed893c346ca6be0f2f89c1f62319526\n806902427866c54ae37baf41e5da07191ba865c9cee70de58fc0e5d7b5afab9a\n52da63afc2bea4f1bf2e12e4f4f70320accf53dc4d469b7bbbf8019f4b2eced3\n4163b8e5cb27686864fc0d4d00e7c1d0c42bfad143832e425d4ff4d83a2316a6\n10d65e27af207e302e39f2e66fe00f37e25667390826436012c6931abbca89da\nc81f8ba7465670a39f9c9a276c2d6b287061794bdc1507f458edf3f88680966c\nad1ec5e21127ee4af4b3a87ab49802f1ac67f3d7208bf3976c0eb25cb2a0ff30\n0b2037a37a0ccc9c2b3fbc583510ad74a788076a9c40cf6c889e00b214861160\nf15c71811af98e2a0fe826701b8f33a1384bbac077e222a4db6f0e6857e7c9ce\na51590934ca3581abcd23cf2cb7c5d081db2404e0698cf8248935850d5484cba\na6e4ba4e5b025aa05ef5151a50398b57568aed4598f3c73868c6b0133f7b8600\n2641e949c95372fad6ae53d952a0e343a3fc04254ef10999d90a090279c16d14\naf937b1dc58f593a2259b9c8a4bb17b3ee7785df89ec9c349a3a67abec6fe0ac\n48a30c667ee0707bc09ca108fb2c993404d61132a9322ccc1301e0a33cba3036\n689980c9ba55598d9dd524445ceb43545e42bb9e83f57580e06a0c51aa7d917b\n8ed8be20b458aa060c5f19c491a6bb0781f5ddeda4c9cdf3284a7cec68170caf\nbe91a43a850aab12b53f87eae4cbc45e343a574e9651d0e1e3b031d3552ac311\n93c368c4634c2937f2be8407a97dc60d729262e7e47f7238e42b40a82dc66754\n9d172e070444039a8646610a2cda2b1fec5c5fab4f8f1890e5d5fbb5413b2e57\n4094692cdc63bce3ab0c2ba9f420297b4ae86ca7ce6220fc7ce4cb3faa39a11f\n16ae53f607aab3280ac70f58c115357b592ef8ee51be0152f5faa8be3fc4374d\n9446c76a89400d441e6ca06b1ce9c2f6ae97afe5acbe1dd4f339fc5439365d7f\nd0138db5b90405b3091b62b240541c1d867a3cd19cdf44bafaf66265a99b1e7a\n7a0af97c5687c0c204c2b7810089ab8ccede922d872fbe167f7cf24ca4f2639f\n4f68e7820e61d5c25c9242e2df539fdce9e0be6c8efb3ed7b3d9b17230c5a48b\n0ff4be192fb121edc0748da3970e8147a59eb78f8201a3d7a5550f165f6dfff3\n7cba3daa527de423696e448178b7e345adf977987323a329d04770d7b4fb0060\neb688b0d90c8b588738455bc12ef67dff8abf04686533d45c1bac790cc317931\n20cac2d5b1aaa347020088b1e8ef244a62d1d759925d838958932e41113f80d0\n6c91ee932bab1b64f88313fae2eb0d55873a15c0ad0caf7c0c8312d93c9b5dd9\n12fe9e7f1ebca0364bd5afe4e9a834cfbd0380cac67f116f6ce5fad4f3d8abce\nf0cc1250bc57179bb3f36f3539f234012dc27dff8db45a7dc4ac7739a3987594\n320ad7d4a1464ac3c46a56619d4915fb7d89be483fb77cf81c4c0fdfac87bec8\n4ea059a51815d4313837db4f775070442838f46f94ae1e4aaf9a40b635b38d67\n05d0f64b5bec93d746fdf56f8090492e056be449055406923d22c27e3143ff88\n1e0d1b52567a15c9d47fa64e172222a6eccb05b2e8f5a4cccbcdd26a0c5b31e5\naaa53260e0be80167f594903af48b6c2a2830a76ab4f8a207acfebfb4691ae5c\n4c9d6f2393309adee42cb9f45a58ed1838234e5f286436a2ac7de8af83912f92\na5472b6602a7cffdc91261707c3864e6d19a77d7e60222fa554b1f269e89a88d\n7237a44da6e3430fbf4b63f2f3183084f74b583c9cf8699dde0eb8a945959759\n355e55dfc4c229da611604903448e1729ac934933792300ad0dded4d44bedc1f\nb8ff5c56d14712a9f5e8905dc6db96c8c25114b95f04b362aca5ba0fe443527b\n6b0d1f2e6ed4c799bacb4c948816164f5408600a5e25a8e5dc0fc80d491603cb\na2fb43fd8715e5dd15cf5c584c07075b0465aa90778f516b1942a555d289488b\na9e1c9d2148cf6299a204f90466eedf14b020483eb9b4daa75c5b0cc4f9b9b11\nd06ec0aa0c3c1475daf006b10d19ffc2541763176034890957be10f62c3b499b\n852854691f3e650480830d2066b9d3ed06a16d343d2d9d7d48c0a39202842d3f\n40387191b2a7aa70fd2e31ee9267ba4e6535087f7a03331d1d1236eebd8433c7\n2f66fc5d7129aa2b41d91b8328f1e248be7b2e8da21551290a54e7531ea11a0b\nab9c9f20aecd5603fb2833f72c161832228a70b6fa25a5246ff866773e8b5c6c\n9b8a73136e7bcb0341f73eeaf54b8d3987790d5c16ff7778e0790071b46e6693\n160b0acf76ece2451e2c8effaf5fe03e344eb547e000343431b38805a6dbdfef\n54e080b7d3d367951e7d127465ecaf1da9e6185c456681c9ed3baffd508f36d9\n9d11eea551be9ffdb0fa5d55188aa04e3481353904ded48678be6673d753c2bb\nbc8dbfef72afa9b71b316393a15bcaee74641a39b542765b406f1b497d58bf72\n8672deabe12745ef672565b88961c06a16cb174a067efc8b2d9131bc1dd2009b\n80493611da547fb451aa19a519f86abddcf86b18de0f34e0174fce78706c9109\n621a18ae5a29e3af67e41585b465109493f437fa8b7d1494ad9183f17a748c00\n02b3c8a420e56a0d610f64834b51dd2aa0912469cfeab9ee151ad85aefa8eeca\n874396941282bf80d6cf556df8295596f5100fb8a118d9dcc2cc93c8ea0df22d\n6bec2f8598e54fdedf12ec77cc3b98d028a2942c76d923ebb99876e3a92e23df\n6e0d05222036d64ee486fd0ef68bdef71e119a7a45df13b4102bcac2e3510658\n69c947a9e0bef7f2b95aba798cd79a232cefc07d5c1bc0a77e0a2b4acb93c51c\neb380f5809fbe96380da48f7b7bdc6591db3f75dc4bcead50a311542f86ce755\ndb6be9e1e0984a3e98573558c644c04926d259e4ed344ddc943171a9cd35004f\n7d4ace0fdfa0ae068ed7af368a9e5846213234924eaf47e3464c46abb67f4b3d\n6685e8ba02f424660c69cb43ba4c4bf127cf833deb6dc5ea3dbd5e6ffba3ba7f\nab2de63babe5a211dbc6038028013b2a8dac9175b5e3431537ded48f2c09e69e\naba0e814b0356a9f05b217728e09aacc5db1a7d7278fb9e370dcbc2e6d913fb0\na31f6d11b830d8ac16ef136517c25e47cce6e50adc9bae292231b8cfaf2b0640\n0cc522128a5e380185bd683c2d332f8512cab9e78a6d5c6fa35ac45dd18d60c0\n4be1db384bb65237bb7ff77ebb467c975bee1a668babee0575632b96b4daf48f\ned305319f98a94a86f0962dca973ab8417535b57d378240227f950d223070171\n12ab7643e9fe2309a7e11cfd31e7658db941d3c27d092c9512d97a21606d375f\n83880e8a553b1cf46449e0350edb0c48dec5d2041a5724146d43131942c6f1ab\n133fefc5f18461c9a36329fe38dc2436654d28553aab7d1741b550e2ff766333\nf671cdfe172c172bbf2ee8accc648fbbc7e3ace2875d4e5c561b9756494abf70\nabc556c70fe226697e3b27be31fb0fdc8202436df9c90f89bf885cb223dd6726\ncdedb7a0a4f7bc832e63516efd40e7661a840224de4adc0c6c9c03a565310dfb\nc4ad440101a77a1aa546ab6178245090884ed4095d9712c35a700035762c2663\nf5da47624f3f9aaa573abd4a464b61aa921e2ffa2a24e63846089b21279e41e5\n4744e9e7ca1e9478417995624ac40b16e22662faf90796da1cf76aebcf01d68e\n77a39532f40f3bd94b0fac09cb700776c67831c39a0f6baf962b27d0f3393c5f\nf57e185b63cd10a019426ba4b7ff00dd61c8689ba9d7ccd06d6eaf336fac1e20\n60e2b09a73f71f1f074b12069f79ac6b2eabe5d9637d1e27b093907e96f799b8\n2f6ad492854a5fca3dd8ffa52fc1aa95a4ce81b64eedeaff9af16db6f3b6418d\n0fb9807202d8b5e5b41ecaccd37456fe65d43cc7720cf80023ac0689a41b4aac\naf7cd971c0b1d54ce1bccfaba32f4bced904b27dd38fb8d5acb1fd116ab8ea21\n28a747474d06a936632742e18956846d0a9ab9b67c903b7b3bab2cf6011f7eda\n9fce017957e4ac8ba9a8d43eb94180244d3a81b29ee025825c7c5c4c1fe838e6\n7aae93f2cf034e42b42f378449230859a53796edc8ba4dbb53a286abab436646\n6f82af205d574dcea933d6ddddb84286ca92e31518de64c2aa790c3616ee4f76\n60642fa4f5f75bc162321ebafd3207ece99b37f6095576d17a1aaa02f922fd51\n54c7dd995930f4ddacd6c048148cca3683694e187b1a53b1830674f7649abb07\nd646ca670d13599f6d4d99dc0fadb7bbe582cc84e7d0bb0e436facb887b8c1e2\n45244971f972ac8ae95374e7abb60fe21934846634dbad542897cae445ddb7e1\nb87257c44ac8a8c4b1c75ecb038ed31bb99f764c09b5569affd0152981d51d9d\nee8e759d00106e881a90c87d23a56477886e6036bfcfa9f0e5bf214fba1dc6ad\ne2376055e5970e561957f5e915c98c7546e9fb3bb7965638ff35c7e9230b9358\n9ad2f280ea37a7a475300828d004f4a565dbb400597851726dd1e49075883923\ndec3591fa5689f353eb622ae01b1e72a80766d02829c7a6bbf0b9704a5f88031\n84bd8304c6dca591c342e64fd631835a5881dbdf2377256932967482d265b3aa\nde51023a57936092a7ddc742b4b5d5ba125cec271cb4edfbe0e3cb6900a5066b\n109b7a9b255d15711816299a6a687e68931c3a4416972811ffec05ea47f699a9\n96446e1ddcc120b0852296e068462e2f4d951653532c15feb633abd09516c48d\nc2890a54cfb26b0755f37dc2eaf8749dc9f9cdce4718997d7e85c84f269e852b\n9995be889dfac69969d5edd03a4176774c42392bee0ae3ba7314c4474848fafb\nf581f6acb6ceb0dfeb30bc534ad3fe86b44c2673d2da5770e740a5e94f4fcedb\n171f3d7ed5d2952a59d9e055886bbda5be0a09deddfc59420aed00b6f8a592a6\n2f406f494cdd2c1c3c0a4b6f5d9c39acf16cb4466a2993765ede54951db9cf90\n0cb5ab6b4ab4d79fd06514745621afec39295d1935f9083acd8ab372d52b0dce\n8e155f13d65393b4cbf582d18a139d8a433612bef85460f394e4ffcea41d5a6f\n36166db76c3db309254630a67a38d65d9bc7c1c6a577c22e2e0288f4d9c7c872\n4dc4a5f09e09307b1cec575efcfdc4cca30a7351de4cfbf2ae9abc2f2d6c84d2\n6a2810ed8c2a7a01ebd671dd8abddea253838c86168960dd9c6a94d39bccbce4\n320bd5f5c2a3d329aedd2462a1f0c65b3fbce417516d4691a4af2c7c099c85f7\n518d71884523f12f9096186908911887c57916d9cbcd4338599d90abb6e06ea0\n9c096aa06516745fbce7d8e236af4756334c8f9e05550c6edc4ee8aae2e2b81b\n8662dfb363abbcb1a084c19d574a9152b4eeeb2045cadb3205831a43863660dd\n3c669c247e6c194bf14b6f2331be617a8f693bb6a93d5dbda69425e77522072d\ndbfe63e79e6a87494cc66874719878a3fb22b3808209cdb4719b685ae3063cef\n6a2b7025c95726fcc8b21866b85ebd3bbd4c0497be4d63dc62c6b53d05dca7e2\nb6ff467bb3142ffed621fe4e4358fbdb0d51d4f3fd496fbff714c25a32b75780\nbe192c6b2b112ea3dc5e9ded480f7adba865d8cc9a27157f2e940e71f1911e76\nc4d2d1ad724c5d1bcaf609257ae4cf58998fca8e74d802fdcd205ada28f2b7ef\n044ae178501b0086cfd5a894655a2eb16233964ccedce58bd3d8807a84074d4b\n881e3394f229a54562fa4f5cac343eb38a69be1b06258e393d9433ff4634a1e8\n1b738c80fff7070f8bbaa5129441ef0f996d2e34fb5eaf642cb829489efeafad\nbfee0e4f0a41d12a8bc0296b4b5ee82651463c9468595bb09ea3c39f41385cd5\n4838087fc3fa98b6a53e4f73a8b564aad5033aaf96e684f7dca8a2923dea718f\n5fc17c93898492ff26ba5efbc82f03a53c4d7f96628806c340fde7748872efb6\n162f7fa1a160cd8cdc57e9d39e2618eb16d82f0ab76eb59b2cb340861599f416\n43ef3155f62dfb800923a9b4ec3e97c4249081713779f177b0ede94ef993d56e\n5d20ee529a199ee7e661cd156d63bf019ca92b27681107f8f5e333b01676e9b7\nc1487556de27c4748028059dcffdcd98a0bccb76da67dc05a791735ac0224a21\n2aa444741df3d97d502bb84ee9cf9ac89375a0a6f519f56dd26fdd024e365b91\nef6063c986b0b3f904daff17b576ef2847ce9234a24586b731d19c6ea1aedb45\nad01025ab1f1644dd2dd6b3ec16e58f46b8088fd8df984cec2a0f81f5db2337d\n45585cf901dea1961940899fd51a263fa6cb58eb94c74cd84ee06c7d3606270e\na51cdbce278081780b70baaa0dd408744ce5b84cece12523e38e705db4218979\n27538ee6e2cc67e991e6320ec9cdeeacfb642f99a4c2e065e4fd4090196b80b2\n14d4ac0bee545cf70b535e6b92d25d0f362fec6ae77a43656cd7f28eacc2a020\nd07c546c55621673e8c0e2425b89891f58a2c371f6022b0bca575b119180700a\nbb0f90b4e2e04ae1d38dd61d8e5b4556e4ca380bca3d98c5607a5ee0cfeb383d\n45be4578c747da830d9fdf6de80a0983494cc4f034293199d631fd11d98a05fa\n6571c1e566c6817c433b6a71c0c38e353237a017e0a9d0f2dd19de2e047e8776\n701e2cf00e971b84464dc07d6dd43ffae4812b6d773242a5b04c9fd4ebbfacf3\na06ac6c1a84eac01b133d0109ad5315ca3057879886d961403e8e1e5baccc5bb\n1ba80afee9262edb32861600e132725c3349ab66794559363c0daebf794e6c05\nff110dec413548e459475bdaa3c24c5f28b32f3b6a2ba6bdadb99fe6b9a3d90a\n710199cda61cf424e1090dedde59f296cfed62cac54f8c639bca42ba0be9098b\n8fe8d9d5898f704f7f7684db54abd970231bd7bd6fb1245d8758fe0dc7ead62a\n1a90434a99161d95ee07482712d14a9d49bb2520b725b9a73321e5b0531b8771\neba73f90e2dd19a7c1dc9aae9c25d8d7f78276ccf2abfe036684a02986dd2748\nc6bb4a21c7c57e293674cf2167919645605d835ab25a9f49754e97138066ebb7\n681b11266fd305dc469ff7cc6f17db89b1eaccfed44824e9082c71d0ffba5ab3\n34a03a070f7316081c80b8a2641e14c5f63fa6fea29b4cd2080f9dc1bbb431e7\na05e4bc48c99dba378373200e3bb3a4c56506b28a99e5d743cf3396279f6d403\n6d8297dd9d254c80d8b134b068206ec4f950bf12ade37ccee67e2e44bcc0ed02\n842877a6e6ddf30ad54dcff3c884d455b372b5485630fc8ce25c3e84be781565\nb3212a2eebff8541b44704d5e2fa8edb7d70bcc411d5b73b8da182279ef2f77d\n09d76b1fab0f55f2e3eeb18443a8c7e630c3dca2710558d022cee7cc516cecd1\n031b256c07ec52e0f50974a0e680cb3eb6f10b5332cbbbf859bbaeda5ac3d1f2\ncf6989178e19da2dcaf8a905cf22ad3546a2d5474f9b404474dbb3ef576b326d\n2418213bcbf25d9260e7b70ca7b2a715eb62f69353eca010bcd1db1e827efb69\na79c788f80b9a1ed34f35341ef9ce4df58534744a9601595b8cd0240b1941f66\n567dac2a2bffc830a970bc66e61acced24e88a4568e315e293448027039addd7\n4c6de6c15b47d2c9d04c9393661181e642553f01d1c7c6a6b49688ea979f9cda\n3e3fd6562f706f916d998070c7952c118be015fa0d60be98fcfccbfb8437eb23\n23cd6f185996e56a95b4b371611b7d3910d2bfa6e4edd6afe62040cbeccc1d7c\nedd5d520471c657f3ced6f8867129a3562ac7099bf6fc9773947773434fe2e2c\n5543dbcd8280c71a56608508339c50c6d538a81f4d86225d695ed13aa26bc8b0\n89b65eff7d05559ab9ec44183951bd6e81b0ea95d705f7e2996f3c6f6066fef7\n2be92f6c717eed3981102855c56d96ca4fb6ee97c5fe41b24710fe1f99aed293\ne24b1752ea645cd4c0cdaf5f7433948b1ebcaac161462d18a2f57c748e971e9b\n7138cd74e7cc703f7d62e44279559881e06b61239ee28a41fd09626a3cfb3746\nfe96c1d96a09f25c9f0a7f8d70b2aefb7d4e503f941464d6a57513da7b3df764\ndc99c560d23cb8dc53832fb08f3aeed682975387f2c2e6a78f5a151978e83603\nd2cccbe7e5aee9b5116d675644028528edc5f0dee57540d0fbb0c8db6540cbea\n4370f4911b0b34e56b7e344bb486b58f7ee4daa3498cd5e6169df473a6a650cd\n527eb8b74f71c65e65dda090ffc3a78b1d7665c8783a45e9cd273af6cc9f89c3\n89c0729f41f493a1e8d55a15d1d947570c0ea8178b9b7a654506e3637e41578e\n2e4bb335f86e3579ad3a645ebae46357b38c885c8d4ac005904fbe0cf0a28950\n1b44db44587fd42150e469a428a1ef7dc1bad79a0625ea3daa63c631fe5d84a8\n153e04c1f5f6dfcca66de8c0e43a13b370d227176193654c5e3a90287209f01d\n068f61e4897a6baf221cbe1aae45f00614e96ebfc9fccad0eede85e5ea6e888c\nb34447fccf202cb6b1fa427f46f9a69dc79932aa4dc6dd019c3ef77a6fdfc49d\n04005a0576615741655ae9ce079607256217f35a096b67caaa7e131493633077\na34f079999e0a5406e5187413ead0d6422645d38227d5dd1d8300941edf9d882\n094db156794645fcf6208acce19bc0fd7f154312cd5e8a28155441421fda4e9e\ne460ca62db34094c6a14fed56749665010b991884d5fd3fbf5161bc63a15b017\n9d75388bb80132c2fddb36c5a19d57352a9c22b296f3c695ff7efdecd732b529\n6af9a9f79f4c701b25255685b31bbe9e4e695e59aedc0228604e0b77d51d1056\nfb111621e740d271ef4c87a6faf102a199842e4b971cfdf854b8775349c85b25\nb28e21b5000a2461c2a528c1f26dcd2937bbbb4f2196c1633cf5b3e1d5f71647\n5034bd13da07608498b7996efed3df1e58a3661caf31c2ef147d76f91d29386d\n04fb7a9e2c2f9a6792268cd6568d9c29d6b32a5d14a99c255499bb33c2cf5e41\n0b4f217f4ba1435841ae9f84f656aa21c63b584d3db03c35b391cbc4099cb56e\nd3c6bd3e62bc3613ba7b26bcddb41cc38477e03625a40df1066ebf844452d369\nb9ca2041cb38016b2a37267b33aca449b5b0295c8337f77ba4c3d13b4b59472c\n161fc90bf7051619efd67ca25439fc45f0ad37f39c1e852777a00da41ad19f6a\nfc57d2d6c33ae5a5ff3f633c6ddc92c49efc43acbfe713491d3d95d1f177219f\n695acb6112ee14118786df46acc8bc769f7adf79f1bb84deb8952d91d5f18039\nf4d4f972e76ee6905dcb19a14467c568382a6cd73050aea4acb40bd48d93fc77\ne294dd8d2401397584c8fd320baeb5d63f485bef786be0b83b1b8e615a419082\n284158aef6f3ed6e528cb0f8f696163764da19a95d51b4b42d085a3db800956f\n36529af572ab0a41b21304f714869459af9aeab3749ecc2f50c840f6298b1085\n590250ef1342103160d9911181d39813d14a3faf570868385810225cf499e351\n2558730a7f53075c68266b7d332f8f5b5edff074866ad96d261c43a9b7f723e1\n7259f38010e94cb03911e18ea6fe843e153895a3d7a1e7c7c7fbf5dac998476a\nc55a4c2075ec47a3b09391f5d5993a1952090e507aa3eeca3864e4fb330a5805\n855a86245b06d0c9b51b7563b1b4aff063db320337243d83527e314d779dc35e\na9d3de4d7656425f5ed403a95f7c21ff827b3fe382326b65a0c9cb3bd0b088d3\nd1a545b2dcd660a7b84811c4f550b7549873c4897c6cb4332c5ddc0ede76d7be\nd91f6669e6f734e7c02f2c51ce5ac9e9dafc6bccf4f4cda82b457105a432426a\nfb6c1f1a58b2e35c2455bca9aba08d3c98ec0afefacdced90c84cc2b657aaa60\n57e358bcf4217950ec5df087069d68ac806bef1c6e41772ebc345a255fcfe6cc\nf8c55bad47494b9be3ab648551b37fa7cc4b6d20a252b154d9d7cf3b61e1b110\na2a0668304de465d6e62694b366e32738b91acf63e57dcb24b5e9f0159463e2c\n455c459f5105d4ead853928505417cf09cddfec5b3fbffee15eb107223248a20\nf6ec1feb9e9e98ae7b29d216e91dbe6ee85a77e9409b94358f2d74e8a72757c9\nbe275a0b39efac8cb23824cd83e1a4ed92f6c28bb498ed1c66f0d0642a63e73b\n484acede90200d99a7e31a2771b1694637a0c4227edc87bc4b2ae926c2e8a48b\n4b038231e2b5d90e8ba8b31d78d52d035fb4bed72fa8a466a9adec132069f00e\na75f717dfd7a57456b89ede8e580f9a7bc808702e6395d9a0dbc1b0fce2e3297\n0e7243bb407f01242c79445e22b2378ec0e8d12a7bef467f02b3a723447da94f\n429d4fc6ad5d8b4550fa71afefab7d7d33d315a99ba1497346723d83366407a5\n3714de90f68a5d6947e9b43316f29d4a12c67d09e58876e0993a1da56a7a67a0\n4935cef25eb01c13bfdb9951e3f21bd05293c35272fa4907f8d0d3473f68333f\n318dfe1b8fd5eb9c08e44e24f8c4cf631b49c1933f5625b0390f82bb3bc4bdb5\n0900abe03868d04c60b3ef4a9542c39ec7e41272e82ae66c57692dd8490a30c8\nac40fad0b9d61a7b85e3dc3e4b5eb6faabaeeadd1aa995a902aa92219e04b3f1\ncbf5b482799fbac0ed0dccb279872719e8e7e80418e57b7717ea4fc67783de21\nd3b52b653a89c6dee78ef873da7ca848ff5679821304aef509c16786ce500fdd\n464e0308ead2d2cb71330d8cde2d2e31ec97b4ab4fbeb1f9013daf417f60aee1\n7ae301ae1072922b15027d6b042721490717b60872918105a0866b7ec1f470b7\n9abf54c6fd6cb79161171e4126ad4e3bfc12f62ac7e26ed2f76dafe3881c5211\nf295ccf54e4ee194abe59067f662f4af1d5c1c6c8e6defe5bccbb85a73ae8d8f\nf4849c5a714d9f76df66518d3c4b0a13aa86238125a1615c03d0bb5847e2bb06\nc33e9fca60339e9a570209b52647c331a6efb0d310a363c5317b3382d25ed1fb\ndfa05c2272a58ce31a49f7d48c6d3b7302711b0c6cd277c63a98de8acb69a9e9\n8417cd45fb483b961ae1f1153f75187ce279d8f4fccbca72283feb27964ddb99\n55e826bc567bdf937879347ca922a7e831af7344d0adfb70ca9f6897d2f91172\n988475be6e91625d5a664f5fa8dc85e527587c81a0d07b0ed618d1e825ac95e9\n5deb76d18862a940cfd7f49b470e7234b238a3dc4f72b997c9ac756704cbcabb\nd2aebbcc23419ae57fbffbbc2b2cd8fa68852d731edd63904710156269504dae\n423e960ee985754ca0db05d182aaebfa851e4174a5ae13957bd0790d1ec92cbc\n536cc7d8b1a2f35e63183ae5bfb4faf3ce8cc51300689fce98dee68445e9144e\n65eae6c9172a0f7d0ffb98432505890108de83878717ed96ff46cda8d1a2b970\n77251382a8de58a3fb564ff538e7cc786f314abbba4020565eb5b1ff931560cb\nf5e054bfc9a0d8d46f34476916c7020f3979485bf7a2de9e43c6d949f1f6e49e\n8ca4e3be6152cad19e487d910fdf3e164989ae859454a398c0bc5dd159b7e9e9\nae3024bb77854b4912d65906081f8bc4dcabee7be0a4ff2557b950c09ef64b00\n1c8cdf3daef1dd63d345076f3c49ee20e8f71422f0fd6f4f7a98fc36d0601be0\n01af01efd401e05acf5a48306b29e954f1e5250170893ae33d18491711c5516c\n0158cf63477ef03477a2815c0c51a47b7813cec6200ac1dc05bccd26b1fcebc5\n8f5ddcad5233e3b63cbad55464d18a04718af59cdfce9895de045fefb2bd38a2\n112f7ff9af159e1289b190552673355fd40fe72df45922f3a4fe3ab29c4bbad3\nb3479cb30b72980fcde0dbb910e0350bc97c55bb7cd8af0447367cb3b2312d49\n39518cff3bec251c90ff44cbf1110ba7daee0828d5301e62558df46d26353491\na4dc26b6472e553ae46c2190ce4541b05c7b71a94824b4cef4a2fbbfc467b3c0\n61764010d748099ccb8818a5c165c3f3e4469feafcea2c3dba5ecd7c7741c131\n1adaa3140db182cdeabcc10d3956dfe2d35ddd28c593510b4079ad411274000c\n001cc880e5eed850d0ecea8a280be913d6e459639cc5fdaee8b65d77c42d5080\n759db4ab69a6d32225f6b6243a40f9e3d9389da2eab4c2bec7166fd89407798f\n0ec78214492eb47aa6fb4df9761fae9e6aab5ddad5dde8baf00a6c91ddad2f15\n732db023be0b3140126679a860d62ec2f128c399767bd7312d9ed43ff8c68889\ne463167a8d0127daad5486b44ba1b5bda1e24e944ade91c2433d4710ab630a67\n0295e03598956b9cc78e9abac7caeb62c8dea6a432254b49d4c959c406e972cd\n741f5137b0e9103d10f5f5a3d96f918dea62d92c5da60fb9e1ccc0bec7e6f716\n9d3773d4677cceed6db4a8362260e9f24ff6fb305498e20138210e5d563f437c\n8516d1c9eb056181f890e2305db63ad201b2caa2b982474039a390b0c133b525\n570258c25c999602c7ad83102f976dd9fc559adad64ccefbdc38f162a13d3bc4\n36c3d296c6852305e1ad41c77dd72c7300f3d0627bccaddc95535609d53713ec\n0a1594b0c694a04cbe5deacdfd6c0055c7e20139a7b79d5db630283521523a3d\na7c9ac6000ae42950d2697ac85e930afdc7a09902811fc7e9b73f6d10fc24d93\n5586a08a9c847d3d9e6bb5f7fb908b67d70726f6b6fd679ddb13d6e8117c3ca1\nba98d06d3ac6a214978a9d197d25b54c8e20de2a54704079206d31e06ce0cbb5\nf8e0421a1ccd91c64685f29bd6d779d8b1546298d39590f77ce9866c43ec9ea4\n897861d539fa24afd24be8969931621c87eaddd653d7fc910bc8cf6da745050f\nd2e28710b990171e5b7e653f233f890259c970c0696ef7b022b1372996fe1a76\nf50407709dfa92f39ea4bda0fde91897c4b0b9bef349b7128b224ce8e54acf8a\n025ffcb2524ec8cde156f066e952947470cdfff632ada33f89ff518f3462d70a\n7b85c3281f8e5ab1212997cc3426821581273834d56c0a4c0a38e84b359b762a\n6d265f9f54a4f2ddf611bf5f8701aebce82a040ff9564fabc2ecd639c64ad198\n8529da11e21667755a62e0dd1d10505b7ea15932ddc2cbdb5735190d73c1aad1\n12c8eeaa1d8772b4e6b714da532d798d0321cd94fdd6e7fc276eb98d07f2277c\n09ffb2e0736bb093ea87f3c343835cb3b8a1e3ce9bd7d053f3060bf26b92189b\n3377e9edcbea5c7724689b91d3f5a50c8531201c23097dbde2e8454203b3d24c\nb32e33dc39a90bd50db8ad640897d6ed76d0adc0ebfd79783b69e30f1c687ef7\nbe7d10cd1fd06d923ed34b5e434b2d63b355d1b98e3f5fee137e76b8c5aca1b8\n9bb4f6ba46e7eaaa75fdafec3c23e80eeb687821bf5e25baf57e1101e6b3ebb0\n88a61dc91c2cf1bb120a50b99b9fe80c8e1ccdcc0f94f0c9f76d2cd312418d0a\n49ca321df616ee0030583dc3d3d55290605c8d3a6e3f85811e3ab36bdaf56725\nabc76d1c49e4df6cdab3827440662ca47370425d8ba17da04681ff7d5bd1863e\nd168e7ad8c70d70d7af3c13da0d9cef3f8decdf3f5a237f8c9e58ce461ff8c1f\n96a3e0cb3aa6ce07d01b9cdfacbddfe246a9bd86ce1881c62d0f82494384325b\nce6e3ccc1ca33b63df477b09b263ba547a65aa97476a18c373c05464b2a50487\n06bde82e7e4727b3561e4e9140748c73d19e35d38539e148322eb293978f1364\nb075c7dfa0f71596890c4615c13bd0cd7de2e75300c0d0a52aeb209a40ac0cca\n283c86c116aaaa0b77c48eb264bcabd8cb3bf752e475dbe202c7bea8021b2cdf\n08bf5140f2fd2f4e752649a7594c84d6b3e4eebc67f3eec9fd85b2e4a107b44f\nd322dddfa5fac17ec535cb6b2b7dc602c3f11f3bd6e83b27b7ef93acf3a0d1b3\n27fbb02c97f3e02d4c505c6adf32eccf9a04cd5f9ba0fdd39600ca40542404f5\n188b471bb4e4f537337ef6c42a677985d634fd4edab093512e15d43023c17c7c\nfa3917c4da14f60dcc623217ffbd25d4d5d73d177554c5142bdc2e37a7640358\nc99fc81378cf65b11355e465cf170fca258f51957d4f37759d375fb223611223\n45566b4ffa0a37428274c3723300cb3af8d024b81c6926f32d469b7fc0dc1b04\n32994d62d18ecb1c106ce6767e770dc4df3e45c4b4e16effd4e3be490d159bec\nbaa056b42edb5327d460cedc286e5377337e552d3be149bef2c14dca3726cbc5\n1ff672a563d51860a18839d4acc29d9d303b7570ff2fafd430cfc2a0ba2d9c2e\n8781a845af259a8a239d2c0e13049cce35afd0f67a37f8f18254acf5535d0a6a\n737106b02ee39a69a42d20138526f74c2daa06088df3bb7fd78405d3605b0e03\ndeca35ea04ffa2d157dfad7d0596f70f7c317e59c018e8c0f0e424dd21f3d81b\n5436c7983153c89ca759bb117389093d1e00a224437d1500f36c4f29162ecbe8\nd315d550a0c94c88711ee09f547caaeee8cfc10d6af34ba25a2c1c72f1dd6c3c\n97e8dd9700743759bbae91c242187fa17a35484a979b47628ce47f2f46cd597e\n3ce2ad40704446b9ef91482a6284a06a1d06213b1797b81057972784f6100de1\nd99fcf74bd02d63cda9fc557c1c41690308255c6251aeb7db0d89e6358613103\n4a361e9a3c5358743cc065ec10e059abd5b7232ce393b233b395de271b5d52f8\n0b805892472899cc72171400f52f992f387275dd1241c357916baf2ee2ac1731\n6a7fc42c339a0e94f6d144615a8c762cfeafe0527cfac41a28474695701f33ae\nea4249da7ba77b008441bb5c7ff23680a13f02cdbdb6c5544f89574884c50884\n907325800a20eb4ddb8d21317a9d432fd16234c5b01fe30f4b65195e8c532f47\n4d45e853e2c7414da9a51f8a94fd55bdd7b85d2de6c3064c7178fd724aff828c\n47910597526839f59cf9313fc237ab0e0949ab3d102a66791c44cd5951ad0931\nc3057249a55faad0b6e8836f775fc0689b51418ee1fd995f7b79b5f1106f34a3\nbb32f7f9d439ad0c780a5c7ac8a63ba5b17a45b1cc483f4af5cd5c493513caa7\n2448f5228ba7354fab7c5cad235b71274bcd65080150c175d03d669ec3ab0dd2\n799db6dee8c0672a66cc82729ae86557b3f794d7577e347f9ed9f922309f3cbb\n0b19d00bfd68b430e49148cd12d317d06debf8229374cdca3e56d1acb3d4b5d8\n6ae03bacc3afcf96b52191a2f5e4b13554e5bd661f2878b76d1b171de7cbfbc7\ne99e669586361b35252a2cccb7f27206c98eb609e4e6fed1c4fa51ac0d7b2815\n14bb5233332e6b2f95e7fdaaeb1bc291640c18f6c90b7bcf805748efa4f888e7\n24cb015baa965e8106403f1fe6744f5311337773e912581f66e8b27cec49615b\n34fd833d810ebf140524aeee4772e41293bfb778e1da87a87fb2ce2165c915dc\n277d3bd8c390145ccb630332d4ca1d6f073c5059a3ae66d531ebe1602d6be186\n6b2d49dcee6acc7932893ec4339fa0a1345dea85fcd7bff3c3e676d022004fcf\n204001db4a46c13d2e5e1c938900dcbdf9227f42f0f6ada292449c225e06048a\n5a4bbb6e14910b1a78997c1019c1ccd50c685226983f7527c40ff5f77a9acea4\n94422a6659efc9dcb389e5f1e7338b320786ba74ea00a3340e7d7ad0c18ef475\nddd72581836d20d62c6cdd30b2b449cbee906ab37b6687a2239afb4a7fbbc09e\nba2de9622eff3c96a04120681210592336b4f4ce228c0003fd5713ce834c43e3\ned283a927d423c62ef420021b61eb3095094a87e957dc49fc0136531f87d9916\n14130e6d918e9ec3c97359255711b743a8dafb150765429e47ec782bace49331\n99e7a85bb5bc82e46b7c8f51f4b6cd3d806e2bc598b1352fec0bccbe8edd2594\n2735d6229073cec47f76f0e5fa0da9beba52dfc70d96ed87350b171f9bc18ab0\n7d8f374bea9ded8f0533d2e94ba6a1bf58d321f7759a7400ec7d785dd4fc94dc\n4b02091a145264c2c51a04ca32ffa2d3e0e46b505da3c57ef85dc7b207c2e93a\n39af3921ae0f8df9f10589ed42a4c13b058f177749a3c03db7841243cacd5554\n2c46676213e931e3a541bd8d2a72525faeb6ff96b743c9e4060b050cd32a22c1\n330db734025efd6b33e285f4a23ca3053283010696956ae5428ed8fef8bc4e7d\n574800c7e54a231ef9f07dbd2428ffb5b5bec82dbb541e9ad816385ff46853c2\n55908d0539c6c4b21e5ae78b395645aba3d7c89028b0f370a4df028514847647\nf585288c7332d152b487611378375ae520d1503a2e9542da763d0f2ae53a4aa9\n43e6373956aba78fff98390bf68034791ad58d7d1b9f3bb34856bb1c508e5bc2\nfa5abd423cf5943662b6c74e3413645433aa7df8b7c5d22ef5a4a2bf73f3d171\na4ffa706b529ff41d0c299cb60a716058aef137d8ee578defc4dac22e5556fc1\nb81db2b9a2c75756461f8eb72830416b68109264f1c67dc28a220b57eb37e5d2\n782d6f5d35c8e45e52fb53eeaef933d9443174c41e47522ef72d3346770581c8\n6486c55bb15a6005161a47ad82d311bce127d4fe4ad976b239995675a04af910\n32396cd0c342fd51d5a1022dc0fdafd55f427b90c0b2ab29f4daacb4dd059a56\n666c2190f4b3709afa100aa0a7de755a4391e47c546095c80b63de7d303420df\n6d2671d71345fff46c485daaf7636ee2b15c019e27dd9a19dc7da7e3aa585d49\na2225308024814866655ecbbc88ffbe1b829f7ac74da6c922da5ac97b66c815d\n378f2f2b374f82916cce652ee6dbf244f94388d35472fa12816e753b5f884679\n51e014d192e2a26e052e43d4a6982ff3cb7a85b8233e82bc6bc4a3ae29fa6189\nda4ae206f9d83c20a4f276f0e5a229631111e5ac9de23213c6d5c42a34326aab\n8b9f1d5aa00080ff0c40d57b0e4fe76125f7c5e888e005c85989b6f82d1da44f\nc756450a7d0fdd398cd64fbb3f31122103548fc69082f42ee11225c3c0556fa7\ne1d2ed7de277c5b707dd8d4a64e87bcd9a8c2a4855ed9df6fe6c456f713ae637\n87b7779dc109d501f4c7dc0907cb51ba8fe0dc6daddf45165eb9d5908675c7bc\n72803e3d9b92dba16c1d3d5f3a5389f74409280d042cd1eab279f2cf88ed2820\nc6ddda8a97d620266dab13039b798c5942b7a166d2b193a1736336ae5de868ae\n99dc922a322a48e1cd43bdd48a83489a82046685a8f3b2bef368efacafe66058\n0ef2990f299b84bac976aa256f2b8fef7dc4d949259de5bea6419133712332bb\n692901bced530d81dfb7da98cd4d9965b8cc97c249a52364e32cc84fce84cd20\nbd39e2ed6469f058be753ccf09e925d616aa88e6dc5dd56a04e1c8a10d5cb5e5\nbbd0ef0d2466fa1aa00acc6f5f37da9d6c3a84b56bce200232b51a62e865e3d6\n6906a20a44324a29cc340ff54cdab96747eab64f7ec668cef33c2e95cc526ed7\nf900b7beb3e31f084c257d0de9a74f696e5134e3c155a48403a97c21e6dc6c34\n913f836f08299f9477fcb351f671c596984f27a33b950b40ea6523a622cb53c6\na402f9fba9c84db0a5fd80e550ea85bb89429ac0ce77eb685c09f8d2cbf9b708\nd4fe8e6fa0575b3fa1c371493ff2d23f9a42c4cc0d1b69eb3f3e345fdc70b11c\n88faa6d7b7e04ea059518e5b05fff0fe0c067419bcb23d125023799e8b270892\n77a9f08d33bafea135a773a5a24ff93eddbd7aa8d766af90a15abfbb3d84c1b3\nc475bccb235bd2f913bd4ea6402121e5fb7864cde421af29edd309a31f3237c3\n9f907b78e544c13f93436799a8b9e4711ff4d261166fcdaaad411de49b692f76\n8e140ef851a39d2a2f9a785403a226886ca98b85308cf3f74ee3b05a63d4f96c\n0dfab95292c29a862bb3ba9613881a7dd14d035b074ed565615f86a2892bb496\n0b6cc5d25a21fcb15de4cbb1dc45b5e6ca896ddb98b69ec42e6c6ad37d9c269c\n1a472f411cdd56fa8192df9b0ce0246cd0678e9160a488853f1a5631be94dbab\n5552e14826507752840d4da62c089f0baea99d996773ff4b362ebae2f11a35c6\n7593a1aa3ced4c64e7d3c76ecf39c7e953e20885a69c75431af78d2b63e67c1e\n08902a8582094078acd838722cad6d88f99ad12bdec7fd5d2de2556274860307\naf8bbd254d7fcb78824556721827eb44926b67ce88ddf57ad239512c1ae21cd3\n4e2a221f59f8289b0d9e947f0295c435052b42c30ece12e744f57b4b730fcbd5\nb07e8eb5a47b9c4caf22f837844803abc66d0c8d87f566548f4f08e42e5e14bd\n07a79c642c81273915952da1f8ab85d1fd0f92847d755f311cdc972f679ce293\n45cb9851e417f03fd24118a0ef43ba408622cd94b5c96926a2180bb964fe76d0\n0251aece5fb921335bd7d32f616b403ffbd53f43552e5966f726e385c3fab1ac\n2b4583735665cef2a55fe898c50df1bcf259d249d37c80e1cd61ee822dada5ea\nb16b1d883a54b22c535e004eb8001a96ceef978a35418b6d9d6c7e7d9c20d8be\ncde80a5ec0d2c0867b610ee3563a52d78d261f4418b155eb44a7b740aa97f768\ne29c329013f094eb7e3fa74e9820c323991b16ad0da873ca29b6d4ff10a4a125\nab4cd76bfab2fa378f1cbcb3b20d3075ad862cded28fab1d5c60cc04dbc6e84f\n6e94d49573d4d8aa82e1e3e28afe84e301da62375fca5d0f81af28c5a1f66c1d\n2fd13a0843d70229c9e927ca0ab3a2117eef88431b794baa0a2878b3aca9167e\nc0aedb650c677af0708cc0a0c0b8fd10b222d6d97a1b917fd8c380bd0257fb3c\nd68cf314e984f7650165d2e2d42a8096b92a3ea4f08c5c396645cc318c831fbd\nf65d90280630eaaaf1804c652540515c2ee95a911ddc5f6a48adbde1b5f609b5\n458d6c804a8818677e490627572b856209294bc37971a4cc68c81ac2a2fb28cb\n078e149b11a5ab435f6198aa4a8a3f863d2155fc727013518dd8b1dfbc5728e1\n53b7b5f319d33f9c0b243ae6139ea4a7946eaa373c16532ab124b7886548a69e\n084c8a37e69c0b11d9f2e4226313b9b706cace7afc1b4430a9d71143f2bc49a8\n44b2d7ca26b22ba7111fe3e92665cb53c3df01ee233da4fd6b92869f7e7c50a0\n9102fba004d1845baa478dba436937562be1440e1bf762bedae787cdc26b4830\nfef67b8b51f96dcc2fbd708b4e8d5f441f62052ebb5643d7b664849b0a4d7fc6\n774f8da74b43df8b084f0fc27cc4f0080811a7f47a93a4da9ffb8c0f3945935a\n3a74193f43783dba76ab7e4a23c129609137d024b803adc05b78430e6d2e421c\nba986e67d014a9bcc9691630a3dedc18685d37680ca1193f110232fcf057dfb5\n72668f23d8ec30be16f276bb119202f136ad40015dcea75dc17d4f320ed6ec9d\n37b28a4296382e49e4eddbe41f8126ec6f926c3f32619d508ee29dbc15bfc3a9\n145ba996101befdd7d861c0845e5dfa3c654091bc82e3efbc62724ea475d0e60\ne4ae7576fa444829a045ba14a8fe43d16bad056f736449186840ff36cceb3a10\n8e3fa1b59eca2f55d4a4e995049e283642a8ce2fcda4d1d5508b106d015ea22c\nc6605097675432da8ed9c9e253b4736cb363ce13ce9e3a5d35f84b550eae9c4a\n10fa8721516a1d5adab0cf1a066103a2fbd89e7bcdc29d11d904889bc8eabea2\n9670204c58cb87fbdf992a98866c5d3ceddc511cb0c87f9f15f29bb8494e95a3\nf95d2097e0eac6fdcbe62d024676463c7012185d7272170ea89b3f17617c78de\n9f6bc90c8e567db2bcdd227852dd251cbb80d1119e4e19896232797d703bcea2\nb7858eb5f598a51c1e155ca9124b296639d484881a7e5a31461c182d9d618d10\n291c56724738cb79e25bf6a3802a744207a7042221ab4b3cc1f846a8fda116fe\nd306db68e4979c7e11eae38c1cfc623333ecc9f160527c04f1c879dfe6489e0a\n3497917d071ca3a611e95154f6e9efe96dd9b2023f7a7ac0e77c7be608ba13cb\nbcaec1c71232933c98845e9263eff993d9d840e3a02d4d987bef06d20f001042\n0209b29962e76989f80c4df04b55135d1492978320c287352b5111a95e6e29ab\n4aa8a5d51bb722efe7cf32c4f7760fedf849e8695c177fe070954e94d3b340d1\n4d584742531197b64c70cabbea602435dfb90bd0a2792c72d65ceb876966a080\nb395964d7d7dc069f43664385265f6a61558a10723e8f97757425fb8ff3fc24c\n26c9b79a4e93319d77bb3db1821670c6480263d11f0b0bec4da7c4b7b26d6b78\nc858da4db33de8f4336cecd53e3395a505b0dda3580b78827c8c7a2b428d2192\n991c94d9ecebf07275f369254ff98c790a7315df86e074a79a5d373a7691da99\n6f36f09975ef6de834728c722f248ddfe50492ffa18f983c5888998ec10e2ef2\n3b0733b78ca9a5e51dce2a2ed0340238bebca874b8e9895df8163e8afa40afa4\nb6eb1a9b0fd1718d4d7f0fd94239d83b6f3bd1acf706c5886262fd6983ba102e\na5319aea2b526827a55c917073f54082767821ef3b672c856bec7ab9657bfd80\n90b7d1e5649d6429545e70cc96195b402745ab450268208db9f64239f041618a\n7248a0dcbfcfcdee78df8ceed783fd172eb0dc5af2a1b39bd9618fe8b21de3a3\n014533589c6c39b42df79ff1096790df51a5d923619a4f547e5f32b81b2c5005\n565dcae7fdebbadbf8cedbef5c7885029d34544b996b27665909673b95ac678f\n07d80e899406fb39fca48fe2df3d05fa4f80c2ffd9dba622a976d0de2d464942\n6d40b2a0bd911aa1c1e85d48e3245e66768dc7d4092279167dd7eaa9b07675e1\n806bbc6f4d6957fc3518a44a83583b22b74ea1bc70dbd69b6c01031d2e5fe6f4\n8b5ce0131c9d2071dec4f88aa0f611cdc538abc4ef29d3af8d71364458001c88\nc25be335edc66705bbe246f05a22463e1145571f3ac6ca321526cc083c5bea41\nb4e019e606582684858220471631fb6fa39fa42cdeb118fc26db6d50ee2de9ce\n213b2dd54d33b082494c443c9116c92238cb07e241aba9d18e92ca3947dc1add\nf1a8b70a5c09e72cd553d3720ef326c71fb45ff2ddd7f3e5815ef05d1554fcb8\n30e89e8e27baa07e51c6415dd109885a761eb4528dcdcf58dd1dcb7862ddd97a\nb52d58fae5d4defa02e0a183d70a6d1189e7a7874cdec91563ea6265455159ab\nef2f1b204c156d289e613100d5721942cc1f03ce05e07d04607abaa9793cfcf5\ne856ad2a590c9255e4598702215a31edd65b66668d87be6116b7686dc42d7c20\n7e9ca22262a557e547eb23895676eb233b048fa04053fbcf32554605258b5a49\nab64666d96056f28398815302a160018f6acfc15a5363f64c20177baba7ec82b\n2de60567e9e7fb67cf761904d3f4f12fc3582d9c9ec23f9b72b0403aa4de3ee4\n7e22fca3e567cd6af49affef6069996ac084d363deb95e5fbd273a163d2d1228\n37e45c59ccc242ec3ae8650396a1bae6c086153cc49fd86ba7549500591becf3\n2f56b3571c612efc1c55247657c0dbaa60842c3a3fb67aef29bcfadbecd14fe8\nca1c86c9f9756d66e0df8a3235692992aee405717d90cef833bc0c7bed7aecee\n037191ff16ecd741abe0c44c3fd73e36fd1194cd20fbbe867ad2ca039ad434eb\n39de0f50b4de63ecf8d635ab312fcef48142ef6839dcf84cb2bda76dbe69fb15\nc2375303e542bfbc8c04f47a237c214d12c0d6dd8746989fd66c0f2334c98dce\nec5b7e3ef8087e5c3a661eb1a32a8e86d6de99a24108c6aeec63c255bf1d3e90\n6f5b88eb3390a0d6fbfe5e60e0d8679a59dcebcb0df80c8b78737c49dd588ead\ndab9d817b5416415b47652257c7d1f98d18957f87747fbd093b2820ab14a8dd4\n875418fc3bc1bd7cb751c7314b877ce803ea41e2daf74fe137d17c08e9a3bf1e\ncc2070bccea63b479e1d3dd9c5f08ee728d3112262deceff42eaaa4b55da32ba\n841a51a1adf146c040b9c566f0f733e4f6dc118ce20e370d53e1ae67f1839b85\n93feef4a7d23c991c22fd1f41386a46a4d57646a8a4d6621565245f578a9a6ee\nb33e92a66ba4d34eed55f19324228af6f411824a029ee884fbe00e92a34b54bf\nad46e5e486b6ed4d2520daaa6ddd8fae72b4214893bb6b691d9b67e96cfe39d6\n8154c75c956a25ca428a706f241f08bb4e0e935bf2160033c3396abb91aaa24b\n35564cf3434a01f574719caf3fd3fe02de62e561da2949bb6cd34a0211d03c8a\ne705f9af97e68b5732747c30fe93d0ced1c5987b6ab41da740b235aebe21bccf\nde1076d22ec110e77d59543ff037db0ed5880cf5bb8598f37d467b574bb51329\n94eec174f18a4e95ed39167e128f1a5e527fb4987ce8050fc485d1e7a59f7551\n3fce7694ba99aa08ed55bd83667efdc2245666e45580986d05f5bc7062bca256\n997ffe766b6243116c0e8f7ce3198c32cc82754695d2df64dc8a3496f45d01da\n3813feb3db0ea6d580c82fbd130dca79b7ce2b1ef2c266e1beb1fa6fac58cd44\ncbce5b4cdf383003fafadf5ef450e8983fb8c7893315c278c69fb2f210803e46\n0dcf0b3f72d24e6de5bc65f9e5d336ae7b2fa01163f50ca6c521ba0ca330a812\n78f7f5304a9c81a63c971f4dec9decd6188b6745da72bccc97d226d1cac9675e\n7dadcff4d5e9a8f6198a4fcf3f91259e492977affdd410b474b3ecc874cd46da\n8af1ee630ecaf7e8b125cc8908856f79cd3a49d2212e88622889cfcb5a7f0027\n01b34b2a17d91eb58f68bbed2f8310365e3db63c451f78548300cc6586e626c3\n4b24192f1074566cbfbc9d18eb9ab8bb23991d07ceea8ea45f6739358d8d2762\n48cd1407f194bbd02a7c820596e9c2cdf19b9bc0e704263aa223581dcdfd64b3\nfaa638df011ca2ea2442e3b0de5946f6955f95943826f0231b35d72a94ab6807\nf75e4957b635e13b43c942fbf4dc8ae3e484745fad2bc4022c69fe441d22a384\nd1899224262b6f29ae52026c9362e1de82f091486c8e289ff539e1c62fb85729\nc3110a138dc996cc34493f820ddef7a6aa8bb89b1aa44d2a337bc1d6ab46e711\n43bb602f3565af19cc5a16d245d57bee02c3a050f7afe716bc32b8cd2ff183d6\nc06c88988fbfb2b85c8287252b061b28686b4b970001dda7fbb702d81e9c13ca\nf0ccd0060802e883cad3e3954b4f21f239a6b520bac5d20c8c4cd7484ffc945c\n23678530a321e82a4e4e18270b1e47413dc86b755f7d383aa63498cab5a10ced\n6487000b062fa73ecda7f67e3a839963b4a85f3fef8f4a368d5de29c015d4872\n14bdcf49974dd14b42681395baaa569db58e2ca8d6bb46733879da5946418b9f\n24dd6600fc9d5ac7d462b3689aaa5f9b4ab8c25c85745312a43aaddaa9ffbde4\nc2a83da8b689255568f739f794ecef5f22734b64e5f4d453c3b31593a0d4e112\n2c449df261805154c376f78933f74f10f865612e83af51e7be607b1b2f2251e5\n03f7237e48344cf10303cfb25e2cb443a532216a2fe362881956ad860c47a452\n39820d27e9bc085b1fb5d55e41bf1a2f7b5efcb78280c9677d92eafca20cacec\n1e02e733af30ba024f46ecdb2d060be3dd03c5c06a79b7593ad653c0692fae8f\n5b5d11dcbfcbab8834e685bf39cbca5bdc1a69e7abb604ff7f189308c306eaeb\nc77953df1b2ee4bef5c09443bf30021144f0b259937f061aeed230b382fb2c02\nc197ea93e18a0133304376926873a5699a7f3d890274dbc71acd5782419e7704\n7fb2a59fedfb27ba959b152719790282096ae63928a5cab1e2dd09ca9ec6d510\n55207dde0b49788e431476ce83f52e9ff913fc1bbe4735d1570ef0741e7c0789\n3a2b2d33386f931eab21b61042b34cfb32cb51b9dc64e90465ab28a50c74ffab\n8963dd26dc20a7b3c0bec11e79ce982dcdfe15bcbcb9e204ee24d815b1a39666\n441d0b83897d84a8b3492c7a50773278a94a4e5175e669622ed49a9619f368ac\nb7ef0f841f29d0a0bde1923b3c70c5014af46c2ed0087284329ccc60627a3814\n5393bc0a594aa8ce3bdbd7fe38df5e9ce89c1bc51debddbbaadf9d3b66e4011d\nfe0dbb682d804366bf48cd36d9df7cf95060389c048294185d8eede8a231b167\n5633b0261de99086129fe626bee8e0b6ac6087e4098bf7bab0083c4b1da8fb5f\n725d89ced1d54a52e5edb2c67b658ae999aa1db6801bf63e58c054bcb9b979b0\n44be3770f491622f30cb77681019106323a7ccfca47c8b833c9c229bcfed2878\n17ac07bb85318e014897e365dd2bff8dc2c30f72ff9a65f5435d97b440902f83\n0b07314f2d6f8fd3e527e7d70a5a4b6d2f08f4f3bac3911d48d490b56b7f9346\n0e357d2dfce2cc5b82af7a281e1b9c2639efa67bec4cdb56fe17da792b922fed\na119223fef41b33aa38adc6da423ea43182961ea8fc0b67b13493405efecf560\nc3139d6f4bb110a3d4c7e2719977ed80d39ce0f43cf43c65ec278e4be77c2881\n137e14665c04dbbebd78249599a7bdb68813fbdceb3c7a94c064a4728d055f8b\n3d2841f3214896b5ab023b55d03d25c0e8905f4e4ef9a9cfb690e4ff0767cbb1\n81547cc0a48a5956710ca8b55f4e02632a5e20c07ae7678e25d1baaf5d433bdf\n25e06f198238fad24184ef49aa9c4d963f1d85c874055f3bc9b9d4f834adb495\n472d98b443cc1a806342fd4a27073b5f3b8924544a643aa0e50bf591403a72f2\n9539407177fa2ba681b8ed6d39edf7b7960c733746c7ca8c51b9f5f78f5514dc\nb677176b71729d8507fa775c981cea01664f0767e342d63de3936c6c09be4b1b\nfde6522b07c5ecb9ab9c872479be2807b25fd9d66a6a180a316d8538339e4cc5\n5991a4f3f24e46f2550d17984caa6692d137b93c2abd4efb06db6334f41e246d\n75801017ac071bb813fd2a13b0fb4165f06a241106a1e2ce1ef6d71d8f7c2a97\nff01823f0d1dba051fb3e9b673492617ba48ed7e95446b2a74249c65d1396bea\nd7fb99a983cf351a3d0fdcd835fdefd78d0de39797b674f9ca23f3ccdce704da\ncc4ea6ff4cfad17690a915ebf6d2c770a0d40f1c618df8dcb36d369154492b72\nc7b9f409e757985a5e53ab6c233a73cafcae253ebeedeb06070f5e00957d2fe4\nebd4c201338d741e12a30fef6864ccf1dd7d9a2fe1dc989eb8c689180967d035\n4b261603701b901839c794893480cd1e5fd8a60f4b63ccad923ee84ed0d7b57a\n1abfa2f0056c50a9e0f03d8e0c43bf3682579cbe7d084fdf46504e1a8a7ef8fb\n0f37ba52cb40e0e3cf1a725ca5de2313b113d3f54b4945aa2d37bfadf5361289\n2852b9239bf8d9594a07e45dac5f112a16c904b74745b83208154be26a92500c\na61dc77d628d4773ca16d4fa29ec536ef0b8df25a6815a6f910edeae012b8362\nef8b5129fc9c198b345581947468c78393148c4be35e5e1c37f4088db48c1d8d\n766d0f3b2ac21961d572194de6c3897ed5acfdc0382ac8f6fd696911f636d457\nc800fc11be2e1a7b386b4f6ca8cd5c2f24d17df5ffb348c358043f20ebf13ade\n8320c681f789737c01b6cc1c84680eb33b23efef3301e9b1ad4ed1ab9e87e620\nd77a45f83a7948a6bb5c1c2bea25a83495ff1b0d97d5f90d84d2fc6f5a63a7a6\n1a35277a91efc5f9f6b3e53843b954b44157e514217e47283900284a87d8413e\n6bfb7e86850cc80bd0e861747d291853a3f735661e4f08c65247c7c884bad225\n93a67ddb4fb179080c91b217973eb57048a985e6a9608da729edf2d7ccbfb76a\n418fafec995fc01614000e782b6008c9548a01065e8054463b8c9a1917190f33\nd864e1d6c3c3aa3c09b25a4a41aa55f32898b50bd3fef5492a8f40756e2d53b1\n196342d58798a48f6c0f147a963509e9eb75650073c358de6f448bfce33ced7a\n2bb9f3ccda14f4a9b9bb507c9fbf0bf1c1d57199ad46bff0e5000c0896acb0b8\n00162e63e32c136010118c7051f0529869a696a5ee28a6bd38841cc6c3f6128d\ndfe8556c57dadb9bdb4d9b9edfeb0b269fa4ff0a3ec1572c1f374ea911e20be6\n696c464e5e2617c7913e8b910e722414b285ed96319420fc6d1fad3b04bc808d\n16730b2eaf53a51b50b83e140f1b0703311da867d593fdaf857b1d18302ba9de\n3f765230ca02519b04a56a01c03326365d22cf8037fa540b6f514bf12361f5d9\n03706642a162dda6ae610280bb7e0597ef825a76e7eab346a3af84a7edafe24c\n0b64517d401bc26a81015f6340de9ebc5a0c356c36101a9b8a2abacd48ab83f2\ncc62684761a24476528b438074df1894cd26789c276e2336c9b9b739862f625e\n57ba0606b33e63ad2164c8156b8fe3bc02e8ebeb61902e31bf8f9d4533cf167a\nc9fe4a1e2e9159abc35ff38090ea3087f41d453827ec78d92d2330c4c945130e\n7128676f56d5d91270f37ae4305f94190110a17400aa7d7d1c84dc7ec6421ba5\naae3811a1acbf4a62a01deb6d729ec9c55559019c10c36d31ccdda0f2b93d5e7\n241f88dd6c33eda84388f6d539c98fc585523e592087bb4e574f2d74d940bef5\nef0d4334a7440415ef44628544b6bc126a2015563891bef491adab2d8e4a63a2\n1fe93b1a7e731ee4b7d9b5f570de0620b97e3a0b36296da019a7c8e985014748\nd03f21759bf423bc83fe9bf8fca6ebfbc6954dbf16a5efe6b14a116124ad5dfd\n3a4b948eb7f10a346ad70204f991439c6442e2349e417071da1bbbc0b966d3e9\nc5803e6eb08206b0f21c89e09cf4000db5ceda56594c943557f22d57a9725a5a\n476a054f7a219a18e7fd62da0cfc53b7b8874c3a252f895e97eed04d5ba26585\n2d54d7b6cbf1c4b2c4dbb506b3025fc94bf0ee43c2c889456d5c8aa105075a30\n6be2c42fc992441286db6cd9e808788f2d8c03f0882dade1a19e97c0adcaa3dd\nc8fb3cbf3b98bf46c486f4e1ff6ccf15cd04dfb5436375d75915764be9b8444d\nf40781e36df7265b69f3d3e298f199f7a34e68a79929b7c1c20e83993c1a27c4\n80ded0d7373ead401c57ff67bb30e83b382adf6be243e58b1d0b1227bf93b292\nf3d7e4fbd4c7dc8bdd103562131b2e907c4f9e335c37c532e549229d8ffc9f4b\n9735ad4e376ff07714d083bcac0659f7e8d3987f6c32888bc92bd94129442fb5\n0c9157c4a1070dc1d612a1c2045fdb984d768930918e4362a6ccf4c3167ae5a9\nab0a925e827aa06f8bd7b1270fb7c2971c28cdcdb9c3c24468d22e80efa8c87d\n8b061e93fb76faec80e879e0eca9f611a3b7e82eaec430bb019ba625f8513eb3\n5e3b9510ad70e82ca186e2927bf22a7fe0c3f9bca400aabec0fff49d4e0f477a\n7dfb5e5378ebc48b81d783f531a312858e01dc7fee271e351777d052e557afe5\n9e17225e153dc589fdf0bc033b451304c08d9bc58b80b72ed6b28928f54700c5\nff3c49ce70ce5513f29a3ed907251480d3f06d1f99e8b41fe5caefcb11b878f8\n77f8fd78c85764e49ddac4f44088792d5a3b522dc51ea27fb66e33b20371b9a0\ne7a122d915d382fe86cefe0d305015004f4ed4feb3bcb8b7bf49d1106b6ac266\n55855382d710616eeb5ee4099c360dddbaf2acf3be365a797c5cf6b2bd13c134\na52ab1a3da661a2dba6f60bdca624b5051d1dacc2d65a6e29d6318fede214615\n858095e9ce16aadda399b9b1cfc8e1585e9320477275270b8602369fdf0a97da\n1eee670a3a8e02b1d891d19a4f111c38d823a6863037338c62ab7ca1806e42ef\n4d04237c37b219398a6e29c2d1ab9d2e86d1e4473bf83ffb4838ce928017ea63\nff89f16c2b4e8f8e66a9a57014d41cc77c14559ee921a456928f8e9c50848fd5\n4116068ce74bc8edd0fc7767e826fcd82309399e15a324b20ac37a980ef7dbab\ndf7e4fd8ecc9885af152d694344cf09849602945ff20bf9cd16afe80f9b32933\n7da14addaa509483fa4694cb15d1b2d4c83fd4ed2e468fb19516f3837dfe6484\n7da72e2b14349ab133fd9c24eb7bc14fc3c0fe7bbf3bf8da1a57df3116795b25\nce5948e2e83d717a49ada72dcaf420a4cee926d569d7e07229892e6a9862b009\neb31ac90cd99a854cab3612d2c18f057fd70f05bb90408a2a62d0c2391c1e3c0\n3da4bf3e93f3e531c7d997a87c156b9b2d6d31b2fe1d3908e4bc800ec24b0283\n83dfab5b1aeb48541550839ffe6165235f5601246551da1f64338dd91414f6c1\nd24c5950b90801b58405c2469362c7c5120b89faf703e48f7898162a02fb29d7\na20e75e5f3c5ed1adb04b6127a69d18d70936917c01d3318992b39956d0977b1\n532e2fe43b35ee11879d55d8d89c0351e21d47ae93f6ecd71321f6cf0cd7a74f\n22d9a203c94d2cb0eec9553134d9cbde34e55690a1b274fc2433c9f083a13472\ne13f2f492e10c5e0bcf552b32901b7af4d6412b6d413c11067045fbc7757207b\n0c3b737a840f18c20c6b8b74a66c0180a18d8b065c036552bde2c3c7bfa713d9\na2ba8aad7557cac3d0bd2ba332e9181bc270ff1b1820d0cd156b668c0908003b\nc36e3e7550658f59ec079a817f0988c1c1b96d528e8d58bfad9c99f1d44020ec\naad482ac8b2383fb9a92fd2fc0680dce9cc7db90de3caabb6e2c652222d767a9\n73662da9ff4b9bb1d979966d03f06c23fbe2c7ac15b8f742dceb78a651fdf470\nb41fddce5cfedd1677c8d01c187940d9af7dd5cdda5fb7523bb667735ecc9207\n46473c4c10a3a51c69f2e958b6a832c107ec0ff63e9194cdcf255034bf4d09d1\n19f364179f6ad8106f6ed68907729ca9a01196812bdbec90e78d5113d09f221f\n89fc417e4f06842044c6ce9ac9ecbd85a0616757c28678a0a3c7f3624dcbe674\n5a8550f7557906c9aa6c90977b735d32bd77f25f9714de9595aea6a815a3e06e\nf4fc046d55719d8cf993f60928231d4fb0aa1f9b80c0939b19aa931db23f17d4\n9d360cb9070108fb91c6573b117f68fdfc4285890ebb32b222171a65da5157df\n7a6fdf3d296d0e13a86aec0a7a99b6cb8a3abbfbae7eb299c1cbf73160d7c213\n372f3455b416728e9173cbdbf7e6f8d4f5e185c94df556237fbe4cc389eceb54\nc21e71c1c82443a27bf7fc66e5c84b5963845d5560966a3c5dfb739b0506ec5b\nf4733b72376556c6af37425ac0108d7b190fb26494473f8f720ebf66eb9c5417\n826a3041b1e7d57e980abcc79e870e1e49e7c1caa56b0a12ecbaaa34e1aa369c\n968fd9e4b0314bbf86a08497dbf5e8cac4a47f41ae54729652a4ee3b12d85d51\n5324f8d4016967ee2ab1f934f41b22d97e5dd0a33f8448d62107cff14eab6892\nfae61f6faa3ded688b9b60f5756032d22bd9c57a383ed585ea9a263f4aa001a5\n8f88da41f506511f633ccc8a3766a7a687777a39d3d71e4329cce1ae07cd2dd1\nda96cb02f5b63e9ac0ed47a8beb46d0e0a3a9b813b1ba71df9b696a500bc0a02\nc66e1c2af94bd336ca10026f927dd78e0f148f72512158293253559178943fb5\n0923339332a9945d6a67a82dafb389d6fa49b04a8b8482b69f143ddfd7f2cfed\nc64e0b6e173773cb2761d5024b3e3a7c9c9c4a39fc94d23b370f09332af958cb\nf0e14676eaf816964e2fec497ea48307a9b8a47db797808d9e92377b346b30b2\nf5b8fbb311db72500b58b0d18062cc793ef5287c6217f185bd93c188426e8c1c\n6bc52ce0f19998ae4fc3f2aa0b4ee7cf0c26443688d2bb27f825e46d558d61f1\nd24756e15728331419710fe16e0a8624ec0d03afe089c68d66b86c8cd9b1a7b0\n86d80adc06cab95034bc5e96f7250a7d59a2e4188b8ff8b39703fe1b7f262782\nd17034e308605eefcbe85aa6943aee75239d0a2af8c3a8f6fd7167f564db12ab\nb9636b99e1349707eee6999afe3e6c6c4f9b4e4de1f6ccec259c7e3872174f89\n3efbeca7fac60593529125d4b014a9026cd55c450e026d6e813806c3a4cb65d3\n63c27d5e9a0007e8e1a9d1079ad9e6c194d8af82f16f3adab54806c1dac68356\n83fe6ebfb78d933ec30caa76347b8d733104649d943866b2efee4394020bf2a7\nba05248c9b278280aeea776c3a8f674173e08390de4f587d286f529f20bb2a40\n593fd4aa33686ab100c3871ea9c0b6330f0a5e9b85db517b91b0c9eecd3885d1\nb054ebe900a0ef912106c68e5a36809501e5559f7a236da41693c00b17441ac2\n203ef5f518da5b69c78a064cf4c761f9ffaae1bac25718ec5165ed3ce5d9030f\n74ade38604181475068d15f9a90e7ab08a930252cb600dd4add187b04810f80d\n4400ded0db3b9eaf91254874f1f2d97a67081f36d21e8a8f162956556dd3eadf\n451c2bc0c435fe2efd9649515c3bbc655d0a466d91e89390d02829e873357b97\ne7ef453498d586de919f9f6543633d282285d14fd243aeb76a6db11a196ddda4\n6e2fdd0f5980d7b84c1aeddf00f9d0ecf038588e26145d0fa74f18be798bfe63\nbcd800875be789718a23622e2d546e77dbef857869c9fcc41c537922cbcba96c\nb4e8f741b1ab5837ac45dac68bbcc12f4291142617109e996992003d209271d2\ndd1184bbe9f210566faa12f62d8865ca4354f74f9322a5b7b3482a1b54680755\ne4f774fa24e181df6edad531be38877a60f68db94865b117bc1eab1876e4b89c\n3f3db9c512989e70c9399d5bdeb80ceae0b034189c3faa53ae71bf943bd1f52e\n1e76369eb77b6a3ff1ed3dbf2b1e3c4553cd1f4acc2dcb377f2f047d9885de6a\nc499eab7160fc0d7302b0b90d00568fec3f4fea660e68d16b848942fce22a937\n00ee9609914128dcceebb9601ebc2dc8498d24b3eb93a960d6854da5b6601278\n9c9d8542caa1b8e6e283c8a51f1d736d919d1c5013f87326f4f06c7e085bcfbc\necbebc43a1e0a67983a9916957b337952df707de1fac1144c40e2fd51dd57a1b\nb9360180c4c3950439e5357d82ff2072720a6878e8e8733ed7b537c5733a5469\n3b18fe88f0ae10919c5c4e539835e272558733fc58c6aeaf7c9d26c544cd964a\n53a0afe689a0ee40405c5962913adcdd3fe36f1ce608ec8c2ca86667a2734c34\n45e7a0e4400479a8c64ebd58cc550f38504a45ee8b443385d1f434faecd3ce99\n1f6704b83edd7b1ceae54a2c6e9ddbb7fa9ae3797e3a9b4132c7b136eec9cbff\n4f7d5988d1b87698e8cf35654bd4ec772485e3f81cb33d745c4b0e5aff00df17\n083d49305205ca3c11df28ae29158f5cc6d0fdf0bf2953e7559c7c88d3104cf7\n61760eccfd97ffea10eb72517e03b3de2e9d0f752d66c423c4cfe7a4a6bbd565\n63ce56e05c7ab7141c39fda77ef85209ae258ecb37284de69a8c762913f20007\nd6b97dec7b6cd8cb083856b8de868234a5cbcb9cea80c42d52e0ff4202d16d8b\n8dbb44c3de46428ede377bd53171ae21eb64a8c1aa80bcf59a0da23203fcf448\nc4c1192c2eedb282e09e8c8dc09fff5a40a5258ac415caa36d93f1b72cd96900\nc9b86e2eb70ad26a83c75d0e940fbd7783e80a5eff317554893362b5c95e66e4\necdd488cd818a83ceca3be0e954a7f86f10458728801e2cc8a9d407636beda43\n7f0e7d4847e491fceae350f35d0bcf89ba0e7d545c2a9ee2bbc99dc3c8dbf9b0\na084d55bf3a96649fb6a16314e67430b69c60092f00cfc75e393ede69962f6ce\n4a428e63773f38449b47c974dac7447c4e868e26cb15eefa02f204ae8495838e\nd6fd0c146ae6d0692b50fed3014c7e5e37d2b1c1dcfb46eca6b6943223e7ffc3\ndf110993bcd1a43bca72c8e41a7c1193ec82064da5cd018fe742d4e7a1b8b8f2\n332e55bd50dc8cb3cbbaec384d2e5f9a31771eb7b3c6f9e125ac11f84f0ae93a\n74a2fc4ce192dda56e77cf999dc4f91c5fea94fdf0b521089669477dc219104f\n73841f154f8685d0ede9288e528110562a43fd5fa2540cf9d7d290fe57164bc5\n2749dc8e7cb4c3bb1605714b3eb28fec94870e3061a9b5c00e7413b5fa0aff15\n917ac947f88ba0d7788c0bc70fd3b32a4921b822df3ecc79309badac5720b3ec\n75d2c1eb94d422e67e7491cec125e00b06a0be47fae975bb8491c7d9df886c29\nb13cfb2a249da84025055ec10301ef893ce1faa6f49975a1fb20c56c7e8de086\n49de0e6f6510110c5e7ce39176683b1960b37339d1d8b37f2d605d9f2e587d04\nd1b16439952ead9ef56d84e1462146b96c5e1b648cc966a5902e48f91e520706\nf0b472d6e253c4bec560e5de92f42b29b0c29e0aa25842ea43bea4dc7c79708e\n690c33e4e8d30755022f40b8a2d99984897596a31c4f0b95cfb742e41f0862cf\nba245497d6ecf7476a9b583db6e233b923d195d88c2ed6bb0aaaa99ad5f71851\n32326df6444e75517b96424503e2e99fdd16d8ba6a970832abced1828dce02e7\n5da65f28b4a9c4b0fb949a588fbec1d8cef39f23bf8b61b94f2726f58cb40487\n9d310e6b079b369ca94cd1f970069aecedd21e36249c69581b63cfa472de41cd\nc954284696278219290fc8627b8f9c937c36bdeb3a8409105c26685e5edfade1\n2b402b7daafb9d431240280b0ed1f8e8aada88ad200975c22ccc16220f517666\n1e2fea46f7e60a8825985d41751477131d7a5991a2ad0c2e7e5f750e83c923d7\nc7a1c42449f2335685d9cd3e59d7761c60798e263c24792f958fb1aad9727691\n8e880fc1b090134530d686240381f7b2cd3e9106341a9d862c878771c8530048\n8889011e9b3aae67190de05286f59c9f1da533823f7437c0a66889ea6e8aedcd\n77533ca527f5799559bd37f8d9e9f78a7e5a6be3cc056d82a46512cc3fb78f58\n5c69307652b45d616df6f32f48538d473a33fd8846c5b6eb456bbe45c1311d75\n94daa3a751a29a9646f0fdb8e2736f617828359fb05423ba42bb5549d95f4c0b\ne7ec60670de406b80d3c826aa01c16cda3b6797dbbdee222ce3d53fd4c74f4a1\n9afd3e336a0199d260137e8fdfa03d6a2bbd6890379b0772676822dc84f71974\n27ddde5df607d64460074e37d6a220fd476b06d85069ab2baca29ca8d887eb1f\n32dabef026a722d14a391599f85241f682b3b4903bcaafc3fbf650e8733b0598\n95c6ad12630af0d019bfc262826dbccb5a67b74aceecaf15f768a42317ae93b2\na96b38c6f34e513f1b0144b979baad80384d239791bdec94105771c56708c192\n7537127968c5a969ac055d2dff16c5a2b577cb26e0cf2f11cddac62ec670de87\n4777ae70d9521f01d8d912cd13214e9d6e31f876c4b616ab6e3bd5b7e1ccb7a5\n6ca4feb7080ffa68ce96055b41339bfbe64eddb0626a4ed043f863d34283eb0a\n53d0981f44a6bc331c2d9ddb1b74af01cd8a5f1afd19398aadbda6b254e3a603\ne2b460c6ce58b937fc8bff542dad32204a90459bee20d00792c7879f3469909e\n0d74fcd184e98da2fbe9fe93bb8ffd799a8386415b3bb61cf5a805ac55d66b15\n01b12eca335d10803ab61ea66fc72101664e462ab72662bb3534c0ec10bc5b16\n51cd48e45faec6d73d46b52d1133d4b614dc35789555b2358c9de040cddc8e0d\n7fedbfec032fd1e0e204b0e750a6e2665aeacb58771a662ed982bf1a770af880\n72fd5da06ae34fd25249178df00c52baa04185d263f04f02d6b0d222d4c5e26b\n7758ab5e832560fd137999ec4ae6aed00f3e6a33b7a812a8340a00ae19bb7013\n2cc31702ef3e2e1e7004844923a55cda56b1640ac59cc7a9aec757d73bb700e4\nf56f9f0c1c74039d16c2c157300679c1e1bafedb016084a8978dee1fc53f8721\n47772bd1abae9fdc71392babb0d5254af6630306eb5b07fa60d0ff4b0b381e72\nb436279afcb436a531ba7f98ca8a5d7902e4fd7dc661376468f46117f57e4c16\n16237082bcd4f19ca5325f42dee8098442fe6f36ce7f269da4e21c380d3a4c6f\n171a6c6d7788b909da37b4cb66f6537615b9e06bda8a0d276aa3c75f0d994c61\n4f5b4dc807d30608fe6f12bd6c7ba9ceb174c244c1a970b08b831fb5dc38e07c\n73ee32d5ae8362a50e70cf1dfea6b4104c30ab189708ecd6ff2639bb127976fb\nc6bf2c6b851816a2da34fc48954ad21ce91f4ba60517b7aa8b790d324c2ff78d\n694a36db4f27460b3f5d3a462b68b5acf79d0ea5dcf233450149ae37415c49cf\n6ca18d220e27864acb907ea2971ce67e53ae26d64743222af14690e5f8aaadb3\naaac4a73200e2b9c4af1790553a3b36f24c45f32ecd41638d52502993763e7af\n8582fa7cd7226aae9b1bbf5be24b1df2d44dddcaf6a815ff9f69fcdff3b29f0d\n1224cebba370a5dc0b0bf53985ae7bac98fd743c647b6c4279e7ba7b0a636939\n52b4d24d173ab7b87b704e9a74828b7a69aa2bfce9edade4be0bf5332a741352\n522a048425249cedaef394a69f5c1d09718b90edf2c32a85bbd27c1bfc7791b4\n2a845980ccce379bc7a7ba91960949891fdb317e3871a88b123673c801fb4b2c\n9a6b33c853c392553d8f4c4456518b65dc7e99a4ea18472be4fc7872972b9776\n6d8432e306574d12813bc2056a87bfb77c73ea6a9ccbd623c4756bfcc4271835\ne7bc41ff9272d09c6574d3a4e75cc7ceb97eb6943a2823d36d50e8c9694b9c40\n24a6c38de8d5e008ad69a6808d9d7e4e1c1b94c5666cf5a1d550963951d02d63\n2c04a7de5140804783a53e75e9190cf4ad761bed6232f0788d99d1ee55f49068\n2a5fa5d8bdac3d0a116fe2230e69c5b90ba3295b7d560c2ad3bea96a87fc1a9e\nd3f68fe5d4bbf3d73c78355a1e017af51e33370743f6e202424423613a81c060\ne08daf6b0994928838d020e00aa9d01bad81351d15783fb881c58a21d5c7bfce\n9e3177ba55132bd584681e4a5610637781c2de9a4385677e4cd7a8a51af6c091\nb1fdee405f6e8ed4223ce62a51dfce13d083a6df54c0d3b72995081987eaffbd\nac031a542f03d3dc6aebda1ad174194207802f0d58d800b1d0277a196892bdc6\na1026709e646dde42e5490c915a2b1637f7acb1f37f08ac7e1ad640ba7a96c15\nb5d3feeee226ffeb8bd79ab9583e4e1823f9f4b244ec3bea7ed2b58f34600767\n0bb7109542f55d1bb0c0cb93326da0f1319b0af018ce04d2f01878364c68de8b\n63b7f029de8b339fc4dfa32cad8a269389536d7fae8ca57cb916da95d8f4bb33\n5dfd155222e3a3dfa611bd5d5912acc19d93d1c5f9edd193089fa9f392b06191\nc2ee326e9c5c37e65e4f91ecefd4e59634465b1d8b3ecf73a6ffc82a0fac71f8\n205cdc50a1e5004d4196ef5806553a8c972e5593ff22e407a26530656fcdeef9\n401d700425604b5e3c2c2b6b45b610a406b3798c2c41a61674e1a55918f4793d\n8c80f329145c60014f1467165b881c285fa5e1398da9a4c0fd51a777c31a5714\n798402af1ae06d63f3b803a979c6ca1a8dfbf4537fe620674d70fbe1e4410d1d\nc08acce620eb01d8962ce2ad30bac1acbb6917c4612d4e80b2bcb668744bd1f0\n396f9a337218a7d194bd0d765e0799062309a460fdf4b216ddb0ad68da465346\nc9b48df61bd9076f93fb35b45c5016562ea3f8773de4fbd407124f05fa6070ec\ne663de6a5f02b37787b7f2d1f754a7c8cef685b459617862b15150851330df33\n2210d6da7f784c750a920180fb11d1c34682f208fe868e6837b976bba84cb540\nd5d89f17912dccaaee97e8b567348be0d0dc6608df300aafbffe4e29d0d43e44\n64fc94e781b796023007141cd4e8648b0add02c970457f0ad982ff698a80d811\ne073cfa3ba6db7125f6b2b24eb312e180b09794758e338ba40cc2c114b60f862\nd45dffa383c72cc7f0c143489c5453f7f811152cb765fb30a8b49de5230fc36b\n16b1707e6358f30e856221021cdfbf0865a0c5ead11ca45828fe8eeb45363b6c\n7cf41a08284880f8de416a5a1003d93d755426ab0213be299be5aa539cab98d6\n5f5c03c406b5ae831f34872e315a8192432ef0bc48a5a1d1f064eeb4897d0a93\n2b72edd4639cb0902b98599f004aaadf287f743f6cb044aff228cb2e1b3a471a\n06207bd139193b5196585c35c119c34da6c1eb44360b2bddfb3a885088321c19\nc4114a017daa77df610652ebdc172027e5860bdd4d787b2211577602b1704c7e\n0dd71692df99c9c78ac0e470506a9b4d30a11492bc71b78c6e3b7b468e2c8b28\n524c5e260bb2bb31a02e27f30a2f29bc0773cbf5aaf3786e54c0372715eaa42f\na1b718b822de0d009d9d8aa0e45b5dcfff14e4c503aa73545a6d82b23c01e240\na31b8b7dee871b9ea7ae8516e52dbd8cf878c330104c7ee3b525ad98052db19d\nc7fb43963bb16b6e85113738291ea629c98ae4fdddd5868503624344d71553c2\n5e7326399040c9f136f8abbf1e853b535bad847465d96e235d0b26c49e231a89\n9ba2e3859d5f8889f4e2cb2d38161f4bdbf440824de741dd7111701309cbdffd\n47b312a5095fbfbf986c03bef15496f2564df639ac45094b1baf86a1eb111dd1\n920ed35a04dffd0b456a1d055dce6403ba82394c9b3e2d34ec0dd9ecb343cf81\n83e1ff8c797bffdb20d727d0f2fc313461801fae5cd843f136aae5c95a6892fe\nf09dd9fec7c2de536351e3a9b67f0d371552500feb2d37b3f29747a69707143e\nef62052c0efb012fd2470e1a8bbd443d504bb613ca9e90017538f397a2502294\n908c668337b532903d77272a1ef7c0df83b363c903b6a2653ce24fd9e67c82d2\n959ac88ddbf5421be23b19dfc025f12977c48621271427eae91c15f6d191a408\ne7b90f044979c2b5e6604d3dbfaaa460dc2c5799b5c58f3572621f9141ac9088\n00000706902551d709a1e72fea79e49eb34d70e94602cc2fa2ae0939a8ef47cc\n7dc0419b8c5b71901124ee72686a293c62af9f424a458d28e14619494b241cc6\n5d3bbefdfcff6be295633c8ee90808078c984a310e5d2036d9742470b4012d6f\ncd441ba9b27e843c2e97f0281a5519e76adcd4fd18503148d75d445bdb3573d3\n821c4e067e06bae09f1ef1fdea48c1f8682c642f0fdb4a5a0dbc3cb495807d3b\n46cd22a5c2eea3f06288b40eb949530b9bb5c72426225672fe2b72d4fc4c213d\n16fdb889e8ad999c09d4111785f70314a0278df3085f98653fb18fb967d6fa8f\n99d26c7e31697d646b9bff7263f7f7065d8410dc058ce309bb4f3b3e380ba0b2\n714f94f683b246cbe4c5fcc9d63cf18a54d305afb505f395468bf5479460f8ae\n64ad81e75e10692134a0fd9fd8eae8d67afedb8e3b7505381592687fbc72d593\n54eda94f5086bf4d8e498c33b9ce17ea8c1fb8818ec62a25d9dcd725151dae54\n0864c17f4c1db1c599c82f1a595869ba15598bb9aa0831efc25e41d2fa4d2c2b\n4e6ce79395b8106e9ada4eaea7177674f2dd69d9494f492ed9ee87f9e4f08c8e\n39f3909b8276fa81ff60f2829479ab2035dc07b8b54fc667bbb33fa80e0abb9a\n602486d46f98b780a576f2c2703e8e99663cc91004bc1f80e34c0138c6117d41\n9cca9f6d6b692bf27691423605a6f592741061fde84082ee9df9e226ba2b283b\nff2c26c5310b50519cd41c4c28eda3a32aec1fc73391480aadaf834232aa79fc\n00dd81a4f9e63c388cc6d299bad9961c0ef4fcae337e4810d0a1f9aaec0cf24a\n4af6cab051e605f468aae1ef3e866b7c159eb6e4669a35d7e8c898591b72f6d1\ndef8c45bb913d449f9d80362237378d3ce0c3cda82c0a4a96613e67086bf4880\n2a03d5ed6bab3f45d43dbe839d899f39c526f6f5331464f1b7d45c340d87d207\n22e5429356f14eaa9f664b7c1d6226aa3e3c42886c8c1cb0ed1c93dc909eec0a\nf14214da7adf7a5e5d062765856bb5f3d759a93d54f972662356da086078a9d7\n4b073d165a49e3a0287cc8c3130806cefd311a90267d9a8e1e334d1c795462cb\nb80e25951c0b06c5043f4fbb4ac2a467c75ce9fb9c88b71de2f58f44d7031510\n64ca2f71fbf7a67ab57cc83572febb3416f5c72c9a306c1e4fed1af006af7c9c\nf0dadc83df3fd630f3ff3d3664a0045f4f2710ad7532052c4974d12ba8ddc070\n762ca39d567b91160c2cbccd27c42d0f417f7e1b15314b1b50a05ab828a9d29f\n8c32b8459221fbf5838331db2741ffff2689fb9b812ac7381233f64627a3a889\n224d7a12e6ba029314052c91cbb0d70f91d16f95b77fc2b28ff7bcaf262ca8cf\nc0e3f4c49ee6e2c9a0c4556a5f8b00c56eeef04af490d5aca632765f5cd5078d\n7bef56e512151788ef48aad74b9a3ffaa2ce6493569643173d00b42a8d7f3b4b\nc3b81adf393fd1a1458a7775a84f8245b34aa125df283afb14b2dff876316a24\n765b42a696dfb39492b7e8b03970507f9aaa86edc09e70da8e03f7491bcac251\n4f803afe78aefcc2ce129e133e0ec6f5322a90f1e2517acd6816be5bbbb92595\ncb6b7887ceb2626cec5b62cf1fa50901323ba325472f996fb01badf21c840ac7\nae422e401f42b7fd70d5e8ed6d81487d8c6dbd070063e2da6181f9ab30cf541d\nebb7ef8a4af752cd02aecf84a10d412bf25135907cfae2406160011a66c76c3a\n7c363ba0fca6368db1b89da3d8734dcaaf20c9b09e8e5132d9d629825ffabffb\nde19b823c16a0150d7c1f13b7f1342256bb0dfaa2c28ab9f71042947689f69c3\n54ef5b6fe740d5d291f0ec1bd3289cdb4b8d64cbe60e7a2a7ce194fe1bd50099\n65b0ef12711186c7cecdbd3ea82b15113edede0c8605808f50a215c84ff18a2a\naa0b526a48b60509319cfbf293f627e746afe07bcf02ea06f4e4acc82f2eb3c3\n753a90867061a67ec3b0750635bccc3059a4d84159f72ce51da7886c29c170cb\n5c64e919dc0ef5222a9e890112f483d78728ffd2140acb95521cf132995afb49\naad0a0fff06f7c3c8dd8106cb48777fdb32f4e578ba5ae5273d88550f2b02158\n8cb6f1dd762e3a720a03fae8cf15457c9d61aab4c31df4c77e5c85857b3f749c\n642803021cf9364090199a468741f8fdbaf40cb11926737819839f3ec097ce3b\nc6f961f6dc9e4ffacb3a048a752ab0dfa119cb3537d04c202ef715fbceca9350\nadb9c8b21d2e6a7cdc1ba38cdedc1d19a64e58e3f5819950123f936f0c991e43\n0ab86c3e20810b8c13c06724e1e2e5521ec783c3d61f5581018ed8208a616a8a\n287183bc922f116ecf2a5fd5a31e3e0f901cfbcfe538267e9597588a1d2931b7\nb75b143c8a9d710852c2dc41f5caacf35ce6173c43788552867bbb36ce1594b5\n0557f9e2dfc4fac92071888f37f67a2e567043b9338b5d92c708e139d308e2ef\n063f5f116b87a581ed0cfddd312aadcf47dc17d4e540c902a9ea4d644244d1fc\nbe629cdb274a1add4ec7c3717dc5db43c73b394eb13c003be67529062e52a02f\nd93bc4ba09a5e1f7d8548737d810638f7a9370ee1f74d92419e3f00396727ecd\nd79b5f40b445ac717f28a283aa9f45d2478ee16c70579761d7f356889794a7fb\n663a73b8c4f8da09936fb1ecd779eeeea29402696327cb1e64725dceebf7a508\na126c91cb393eada5aead56f16633eed8ba3f05515bf9916fe5889c79c159683\n78e6cd8646afb91ad2c1335b1612672e70c3aa492daa53a20fe02414f0606a3e\n520af2960b83a70523357fd68291809fffb5d04dc7e6a9ffb342967fe5d6f22a\n169aa63d67860e6a58d59c476a6df226ba349cacfa55b044ba5df149257542a7\nbd902731d6fba07db5ba995a665eb6a9e4d62635bccef69d0ef1d55e1ae58d46\nc0d7020dce5d5656ded913bd8894b9ca3f664d851ea6607549cc55d02933fb35\n99559a8b6292c0823e9531b52a285112dce446840eaa90cbbbf6eddbc190c5be\n8e2ebb5d4f3384ce8a309c43d499b73a1b8ec567f3fa528e71201afe4c762fd2\nc8a3ed81981c13b9f00eba6200b5377b90f6e82fe2e33d6453044bdb6ba77ab1\n4ad1f2dc683c997a777e56d66ae0719c458eacc0a451e0970827100f8ed6e0da\n125fc0cd3ea4d601f74a62898252290dc2252fcdc93b735b8582f86240c81af4\n7a67c72dcf3bd2c7a640e4bf854d6c4ebdbeea2daf8d0cfe63ade559dae0e379\n21639a057cce78215bb83b901f310caf0c34f4e28434df6458b782e677fa39ff\n2727f8b68d0c793c27ba85bddec977ac62e839cf1da5a895f4923df9890455b1\nee5c168543df60eb27d5b14466c114a3a36a9ff09658e0e38c66fca6766d3401\n33fad16834ca98b96949597eb6b268039cd277a0ecb2faaf025bc9624b512675\nc0c43bbfd218d779dfa2d409b50965fa127a42b0a120ae0b1c750b5070a9fb76\n1c345ad6f3c42a743b35d89d869cb96149e761660725e37818c1f7293e90ddb8\nc78bec135aa47fc00170f53a3d263b20e8809766e6ae7576a669deaa91a2a297\na002feaaa5b85a3bee9967d37806229a1d480f305b51f41c662812292e400a2b\nc314e31afa74f8783ae04cff122b22111a984800ca0ef228224001eadc15191a\ne5ef2c278ec0921fb6b0d41cd158796aa9f9f7e1a8f4fb52d8e73b41611606d9\nc2748d3e6a0297db2accf3c714581f63c5a0127e8c512cad85d9f98b0c9fd606\nf08091d18983c70c87cfba86900450c5b9d871ce39eb2c6a71d2baf7f7356fa4\n952d3bda92b0e4fc537d2d10c8f3b1e53eaeda75405362fe00d8b6e8eb64afd7\nf5a3640a6378c90392b6a3683121617b8d1d18c6d1589b59ae8998a1b1efd0f9\n3d2d3a405fff89819959d8ec5e86756d4e227714b69a4a8465863c9b86802463\ndb47c629b3dc0daee90cb6c14eb150427e74e25282c9b9f82bbca1cea0892ce6\nbdd59e645ee6cb2589d55627a8da0d32226c363b6d5504387e1bdc425dd6d95f\n57d0df364cb55137c3952266e3b1497df1b23be0b79d03b2840ef797317ab998\n7bad06467cdcb3ef5e4a1a02313d865b8355ccca2c1afae4d5d959f92792107d\n4b4368ac7c349f77aa1f085f8a5ba7d7a1b372f3b252a82e5d3038bee30b0cc1\n0f232d504886e5700c0f75447aa43e8f12ffd3870eb5f22cd4e41764f848c7fa\n42a04d90634cba334aafcb1a65b60ab4c22e278c835f978a67babb3bdfe6b039\ne7fa7535e3179133d42cf8ed361fd3fdfb43876213bdc8b01dd3fc4f96897546\n63ad48ab253dc6ff9026c6f28eb1b84957decbdae7a16285794a6276f031feab\n769b208aa1d666220889771dc0a9b642f271e25628e213319d6003acd95126fd\na0e9eb48fe77fba6f5e720d720a4dd5bf93cd6b8723728124a7f38331fa5462a\na63250f00acc34cadb444040b1803d4f2b422453f6e5ee89af155c5b4cb34532\nebaa21927d2e82578180d3a36cc9fa1d5d5f7820916dc8dcfce90ff3e1083e7b\na7bd1b78b69462104c15515cf44cb2b1f0af06fb07c2e0b246be8696185cd531\n59667fd1c7135252f6a1a5d8217ad74c9370e0446c9783ceff93e833dbfac4d8\na453393798e6ef3f4b331b88811f1d047be2926e48cf9b5ea904075b9e536a2c\n9a623b9c929e301044b0faf008d5d24190a35d412aa255ee231930a3673a57e6\n4ae07873cdcadff021abb9affa1029eecb3f2966846089acb3f9136db633d2e8\n327aa11720474bb13e90ef063596bab4cc32ad4d693aab59a1a49d03ff6f5bbe\nfd7c06cb60c55f7c7b9c9da109e0a4e5d4bbcf80136280bcfc8bb2ecf7321c5b\n310b5be6df4f26c47c83f445a52b294c86edb94152596e80dcdd7cde2fdfc8a2\nc30fff2dc8578980babb42141580f202c4d53da318d945077bf84ee07e492cd5\nb3e16c97fb89bf8fd35966bf3ecbcc0121eb2eb781ac3fdccc1ecf2deb4e152c\n3e1eb0ed2dee3fa16fb66d1f4504f46cdcc9c37fa3716b8137025f1df03152db\n0018e7631dad78c15a7aa0cdcc5b872f9d563279ceac87be46d67198fdd5bbef\n1bbc7cca500df6ca81d102454116190cd7b87c938e73a722c6b4b1ee88d73259\n9a5ed21670c9d757ae0022bbcda87dedbca88a099035a62908d038bda0fc09a8\n86cb95a488bb3e81fa4d3b30ed1d1f4dc26c23aa2c5e64b6991240b4b5e4de16\n29ceea60f562580c5b42d99eb60753d91f5c2237fcf739767e6d978a1ce860cf\n4786fe43ca67e99df025368de8521da58f224fb9b06d02b668d12930a3a3ff13\n787113c7be9ede6f307053edd7e0c6de06d57f843a5cc40c806f965fa6497206\nea89e33665afc5c13f9fc5804145702a3541d91f405094d74efcfaa077d4b8b7\na83678911f68cbd3254f32052b541f4400819907e48383d20fbb3067c1cece3c\n091b8f5f15f495035670e7d7d48c5ff4489f4bcf9b82cbc3a0868f1055b3836c\nbb1db3d1a7856149f8b7e893098b3479a1f5c800c3ece4b247aa4f975e4ef01b\n13f0907975c9d594b599c5144e8d709712e9cf354750c856675b55c1f34a1549\n44dfb2b6b6123f09e3683a0f05518c4489e1751f70149e71633dbf5b80cb8108\ne2cfcd258f0ccc6b0615b6f02700824106bb875a80157eeba27fa779563d7d1d\n28a15102731ab42b5619d20e43505c97136af055ee903723e98483582bc1cc65\n66e149b0464053a113982243260c5670b865ea02c2e1c935ffb840b5e6aa92d6\n36cee9a690e2e48c0795cc38b09b6518807036d977af0108f346fa5ca6fbbf14\n8d6b58964adcfdefa386284732dabdedeeb0cdeb41cbc6eae7ded459d67643ba\n16264e4765ee37b7669b78f56f8a11bd2dd25f412c7ed451b5aed116f07fdbbc\n4dbd67c64db7eab20647f590415230739b3e67cb9606091ebb2801f9d6d1fca7\nc9c7279da57e7f4062f38462e1173d8903f9de52d3f6f12c4a44b56c4ead8661\n682d44dcc514bdf12725dc7b20693d59a18442f915bc374ad2acbdba7622a81b\n9cf013922f721d6bd6ad5c858eb5ea05535a92d7d46db9abc1f737b5b5781f30\n138420dc98382455bccd9a9748feb64b67482e41f41fcaecb30e1b22a7562eea\n7bf4aaeae013c605e7eea4d1b1ba089b316e75202f901e336ca5d4a514afa228\nb561cd7e96f1b01a5281228baf36af972c9a3be5ddffe6154b1d5a8553f9dcf6\n45f4a99a2af89b45816eb5b75ddc9b4c0fecf32b6de97b6bf719f51fd99e7c0b\na562ba58e0b082620a2fa901a0e58e2e9de953ac4b97b3d1602e62aeb61a5a4d\na0ee6f50f3fedee2578ece3248a6e8b1330b0ba763cf58d60fcb382b6f13f76c\n20bccffda6b84e3ea5d285618c4af3666ca8ba3fe971199b4dcde00829e474b5\nb39918c63d02dd6d53b87c8bf4d4be380f3839c9e12b3ec4618fac75aa29c971\n3602052615f48ee877804bb2cf46a04e94c1bc23a5abc1ae58b4c6e4afd7c813\n62ea198e39018c1e8f3c483c8af8f8c91c2c5bb28dbc81a7837992498fd338dd\n3766480ae11d22806620a4bbdb495884944473e2eb5b1a17f9dd6863caac913f\nc4f2e610dad5d666f578d5a9b7f874fb2de781c8d2ae236603c94cd083fdfe69\n24575f4017b25e694c3ac7feaf6b7f371a217bd5b62086cb13ec8dd32fb852ad\ne065446f0f9fd97e860e174e18d14a7caf7ea2befdb3778382cc91ac5c705d92\nfd67e011d6d6316ad24305a453131cdda2a92fa89463a00e38773e1e13dc4d1d\nc500046b2721763dfd2f8826f64b893187b4595482b2f4048de7eef61bbb6a33\nd0756bec77811e9ccfdff9fdd3d2d8ebdb73f18d2bb6aa9f2a2f936fb853697c\n113289397bd3c673499877a5dd0be0dfb94dbae1e33dded9fc3217a57e47ae1e\n1d5d89579202df5cedfc0e6b061a6f2bf616c835ab081bdce8630f019ebd22ad\ne213020dfce9853e90c4651d6c9715c0d690e255e968146a1b8c94aee2533c0d\n6c0aeecbc06324816eb752ff19cf4791467b37bd577f882f437d33a87b16874b\n53c9c2a52486bb061f75fa93d4b77c6dc539167cb4e4a140f4abb9d85c9a8b98\n74d0681012d9c5ce3cd6909d56c1b7b15524f96adde56deb3dc2159eb1ecb5ad\nf2753d4b32fc734818342d07233fd2a4db9b0db0462eac732e04bf1a6d729f45\n5f862a6a6423a12741305da44644c56d244d3078112f5f152c7ff6a1b6d95529\n4e97bf1d4ce7f954d537f7013175b81c79cd85bcb932e22cee9ebe4474fe8ef9\n08c0a97fa635ecf8609fb8590b3c34c8ec270cc582181a645ad5015044c69c6e\nf5c4bdd6a63efee3b6773e301c558d4d501017788f518100a8477b38c4ad810e\ne609ee77a99642f6ab056263e980ea99ec0192f670024d176e8784e9b12bf35f\n5ca1c83e4709c69a936175b5ccecc58cef5c16a92f22fcd77e45452e69e3653f\n01d1f142849647185346f0c14c57dab63b17a6caaa63c0a6209a39440e8ab783\nc02e0b36589600e7170b8342fed9cc01c35735ab32fbc2cb805e4899415ec113\n0b710564c9542d3359964fa0c6cf0f79a6e31df3fa89d43bb6603e0f654d35b6\nbea8cc7830a76c8f2c9626406069b5bcc40095c71f77246eeeadb5a4bfa83dd3\n87f2b72e02eb55336cdf8479ed33a5deb7e0789a4f0f8c86625863ef89b942af\n6cde3c7b982da14a9b489580b8ed34a4a5b54bde3ab55700051c560f05d940f8\n51022c76ed87a882cd11981b161db7c3a7b6f98b3e426f0d212c3f2afd045cdd\na560f7b3bec58c956b52513b84ca624be699695d34e6b3dbb037a59cce366330\nb46ea31cabaab10ccee5bb86d9b47553954124ca07336f2726beaf033d5926d9\n231503b1a754f97b438853508b079f1343eff35c6e2740f386eef6b04fa40a68\nb8e9f8878d601c9e280aef245db798a15fa27d6df9b790b53ab47ba3f81a75b9\n9308b0e18864e5708ece120386c628f1ef662b7b2f60a0b66e64d8d3e5efb48f\ndc4f4506bc01c5adc4a1fb7afabd27483aeceb61c16981c06e9ee2570a6e30f1\n32058dd115603933ced84bf693bd899093067b1479813d5cb72255421df88e96\n1d3e88b735f9a6137fc2f91a983f44f487d720f865ff710d669b7d1aa7de0f0d\n8026bf0f32b8a42b7e8241f8cea027fd363a10d0384dfca31ed51efcc0184365\n0c048ccd17fb61c7dc2cec3ceade9b205be376c84d7f60f8fff720e1f97661f7\n1988d5ff5f5b721863deb8afe9cfbcd6d673a7bac7b929c039f130b3d1fa9217\n4933c65dc207092c0d413106c05a01eca2a92d7c39f0380543e2350691601b65\nd300a4d2b9fa3e43b26e2c9792186623a6cb32cfad44fb62b4f9f4ebdb1b8ce9\n5b5c00608fc185c041e141218dd1a391e9592b11e00027895ad32bcf69b9399f\n6d4216b47320db608b4e38bb2d7e821b70ec7e3ac7bfb929fc54f36b4b4e2b1b\nc334ea91900d4b7fd109fdd6d2ae28bccf75cc3aa65e67aab8e5158ac807defd\nbec2d1ae678e5eebcb841f37cde6ff41c1a9d14f07cf420095422d781c82ba0e\n498a7f00367e203f880ed50fc82f0b7df23ece4e1c239fd83f40efea3b9033da\nbf17a9b8a8d614f2dd6c618319aab0dfa918f4e49e33fd8b3ac5aa66cb727db0\nb0d91a80ca48042f29dbfcd636ddc12f5559ae0c0a7444cc11f4a590a4e25262\n4b44b1e542b76128a64263952f955e5d822c5d0dff70a7c402d53dd4be7463c6\n6b5adae50cf38225e7a67ad8d60e630eafeaa26eb07ceb8f745040aaa0ee8911\nb36d817b4e0d40d026a84d9731832b32248b9eead9a42b5a0da56706942ac344\n1a6a2fd2462504ed912406ab8e87317af04593f50b0a28d04168890321f5dd5e\n3e8b0c8c94aaf87055ece844e05eef2f316c65a91531e895100a17e2b4185395\n3ab47d5a5f3b1abbe4edb1d3e93481daa53706633c2e7c533eba3af56639ca21\n7944dc9fa75a3508cd1e063e5652dfdcb9ff15e734e07eb8a3780adadf8a2bc7\n2735d86bba29b78877496c8bb8c9251023b856c560eca5868ff9efd290f5f233\nf404b16e58f48f9695c39eaf022583d8ca9edbff8bf4910c48ab9f4878e4a315\nfcaff68d4a68258efd83bab03f20b394ebce37fa82a30b5a7e668bfee874692d\n9cab1e9eebf4580153f7beb823bea8da6bc48d1b137e326d29df21e8450be652\n0e7e41556509e5bcc8b0c15f0fd158bfebc7787a7812112f9f6d048b587a8adc\na0094f71107e4b1abd7ddc1aec83da1f30387a97455ca87535784d301ff7662d\n959917769ea0dda1a18e35be58382043ec3b51bdf59a7c7045e5807a2b9728bb\n0a74eec85eb6ac343e0d62435d6c43682c8b7b8a2d7744efa5f251d7355b8e7a\nbf31ee249f68158072ba6302088a52a9489d616d51ae01918a9538c1d9ad395a\n16fe03867f7e8fd1af2211efb58ed843f9bd45a68e708d20b6dfc2054f959dd5\n2b6757aba1fa0ebb5d0df7f102e290e5fdea483cfc0fa7fcdc13b205c618d183\n74c6a1f362bea77b58c4f789afe4e47da55bec99619e8edf640695262ad7ed14\naa64ebf0950b05a8ce32a378f4c2588f593a04dc5858c20dcb40435f44220a46\n38633113a74f8101f1c0fe2be961a894b2e47b302c4b70b9d77c8aacd214d9be\n40d7cf219da496850ba2a1e7d4b214c7ef9ada82d6df4273fff726614d81fbcf\n94bb7c0c724fb62714073f2a5fd4ee91d9f24a5b7c659b55bceb5bcdbabcb5bf\n0bf89766473cecc78752f07e52393ba9bcf5ed7fbef6be56fccc82c0b083b14d\n537faf2b3990ac24269e6b1268413ed4bb50c8b5c14e8f03779fa9dc6298c6f9\nf6e35148b1b8f30eaa957026c6ac31887606d8f641077abe01eaa33de4357719\n5f2deca1b92910bd68fa0089f46eb25d6320525aa3ea8422fc110b05eda5fd25\nbd7c84dddae5f06ea259869b1b462495969288ddbc604b9853f798b5d5a56afd\n001f3658909be3ad5e5b4f8d7d31a7cc6e556499e67552bce47458c98c264186\n5ee230bf2e9fd017ad32407279fb55180d529445695770cbe9993046dd069499\ne538c64c3f0b4ef6ef97d319483c45433a1f04166528c8fb900dde5cee0ec737\na25c4d7a03c171457cddf925b4f8a8b8ebbedc51e921d1328b2aa05308b3935e\n7c43265828697f2bb7eb120a15015733443adc248406bf8d8b9e99b41d9c1585\n9a1e687994c606a5f5161f084723bae5c58e61c79e2ac71fddf8223f70d546bf\nefba136a35d867078b59ff16de24e528a53bbfa2d0441a1b6ed0206c2f6db1fd\nf7cf65a8b5543b5f481952de72a5a8a7276f1d73d17f3fc5dc01dae90668bad5\n3d7ebe6f6223a5b2ae68f5a06490191a1cca79306eebaa9e4d843049772f5f87\n48df9aac15e1aef0572a3e68319dc6d40207dedc2a80dd178a1e758d04ef595e\nca495467e7dfeffea304408ed92817f052d18cabae8b6a7f176934b9ffe4b88b\nfad3122a7c62159f455c397eaeb6443c0a17a989ba40f5651196ddf9aa216be1\nb685dd4a0c0aff86077d7a2abbc87ee4e6b46da3a6272e7e35beb60cd40d2518\nd40eacb190744ed134a3c5f75e562dc6bafb1e0e4d254059adcb8f0dbc994264\n868780b8f72611b104fb03bf5fcc0110e29ee51744873fa5a4a5b00a743f9a78\nc8a79dda6971252ac4ebdae0107020bf98965095a119db836a68b48ee3f9b5bf\n9d3cd3d27223fed47f063256b91cb9236ffea2a8b6d08af1e7d2e900a9cc7ada\nebd62c585c54975d9fd56a4af5a5b07b058a9cbba748c6edae1693e5d5934541\n394c35ede2b8b496d030788d3804a1c4f06fda1b6f0af56fc8f0b6c31c755820\n8446ee2f451e00f0c9d4e28fdbcc8b8d3cbc002246b04978174347a71c7c9728\na10164c7f48c02243beddb7defb725e23d0d80aecc7921ff5acb439e54f9e917\n3bc74956c38cf2768baf0808f5437f99c280ec325fe85c96ec2a87062f26ef6c\ncdeeb867ea7bf597b3f87327bb595c53677e5603e3b248b1fdc62a2a4c58ca3c\n3e0ab2712a82571245ab4ccd803c3678cc8c4bca0ded1c2b925355128a9139a6\n647ac2a16b50deb2a2238407409159e6d0c1faa4a1f87c459f15db23c9a7b39e\nd0cd289956ae0238195bf148d02454bb57169d28b738eedc50ca7784e4e09bb1\nd413a3131ede08f1eaa3bccc0beae5ee4838a699b947586c52c962e124e933b1\nf43c116ae511f35ec43df95033b1745db313d401d6992c6db9aff794f20480de\nb159dbeba8c9e34f521f3350a192be69b9213fd4ac398c57f8756e8eb7a5d71b\nf83362b9bcabcd7637700d450cc5fa919c1119e90c33a990578db7340e8158de\n23dc2498a99fb6a8db305bae52e82141cf49cda9e717ef58f0624e83bbee9576\n33bb6d69c619ca3a40e3bcd6cbde7831c7036f818c15b75612175eaf762ec001\n51c658ae5eacad9e6fa14e1f2557359aa68042dcdf66e53ad5335977e466c26f\n685bd27184f9352e18c0033c36218b31cc8bba3b5be12b04a66545aa27a0eebb\n363b047d2b1ae57f9bce38b41504e46b3ac63fc61d6e0509fc55cab6ba28aacd\n6373c1e097a56b9b48f3e9429d96b7a7e089a0d9d8f828fb238401a7eaed3d55\n57a97d51597b987072f210b088c782fa2d420589a67f824f383f7bf7a742a563\n933caa0adf94f1ecebd77c176ad69e16e18a8e0515a1dc38a4cde670dd5b151d\n0decb79e3a384218b2dcb7143836244ee6a908e25099b5fba878a7c03731a5fe\n1da7d562e5af3b9a243d42f8c4a9eaee24a6a825e5b1047555a38b31cf7b64e2\n50dc46414ef78e1c899acf9691324f02c16870d0fb2045c63fd1f6a046a94f6d\na6a8c7d21fd6575b14abbaa3bc4239ebdf3353a7f997a39692b81cfbea8b279b\n6d475f06628f3eaacfe260a904ecb5cc514c3320eca98867981767a9d8a11bdc\nf2a685c71afc1f9a3c4e149feaaef55a03ec19b2ea6432bf653b867adaf894bb\n7fb5c6cbabc9a8c195e839782eec5a597718459da9ae46514e423198ff5d62b2\n02cd12ed62408040ff84f51e4e28d8f451e6713e4b6bb707daffbfd616895722\n07bb3236d2da5217ab665aae6d41a2ad907f13c049dcaee201e2207dcf4a356a\nede8bb08754677ca45e722792f36efb184dfecb7c6f555c2f74964c3f7c9f76d\nda0f07b399084d55efd83cf4a4a1bae852d390179a55682e520807f4909c16e6\n2d8db470fe81479a32003f736a0abecacabfdcbd671da397951d1d13cd2b0e25\na7bf2ad1709f4267c51621f349b9d24f533f7069fec5457181285ca427d20417\n8ddd8be103dc3668622501058529de2f97844cf44ca0524d760d405f6439d8de\n80b87a40ee8752500dba319014f015e4963d67d65c73c46add9a0b3f71ae4da0\n74c310898b32102c2a4e62add7e4a1ce48fca53c6608167ad82fd30e7d360a8e\n0b6f86216fe5893911becd06aff8dfb149e9c8396933fee262082fbef6a8f8e3\nc2eb43d39cdd87f6be0c03c90cdcce57afdc32443ea58b43a3113e835cbbf92c\n8e8aeff653d6c15363c23d69be43f3afe1345f356342325baa4ad7e9fc3e59b8\n893b777aa57ec3f7d1fabfd73a3de15adaab64a182718fd01f3a35b5e3ad9640\ne4a9190133fd480be7b933d2cbc805c349738cc4efe623b5ad7f3174334ef1c2\n711dbefc67b42fcd7d530efa33a5b303c98ef61e3327ac843f90e3ce9cbe6944\na944346bd63058f7d440bb4f4e8648a3dcef372ade50f676785f2d7db2644d4a\n7bf741e0b74e741d8f2bec0b5681f48bb0df8d136d9ea2aa17098951ac2c7794\n11eeef6e9967ef1c9f95936144cd138fc4a953e88a047fb4f3c45bd4bcba7d40\nd8fa01ad396e4a2689fb803b3b9f2eecaa7c0b61449780b90ef98a56311dbcce\n746212d70bd0a2f58693be692e35bdce93e69eef6273a82ea53b8c365ed4ec27\nb2546e3c74d11dc49f8ffa88dd47b4bc60fe4d402440ae62dd5977a63462b1d8\ncc6b0dd45076641aaf60a0d6ed67acf0dab693a67957012b4ab960b084320a62\n59a94f7061596c742c6cf8a489dafe2658e46d31aaefa68abd9a033e5907586f\n6813b79f8bf6e9c70dfb3ce3d353e0de3fbf43450275d1a6668e3d362a0b96cc\na08a53d8c6ffa7097f421e3e0cb7992e846b41eade9223f2526b67420773cccb\nd5219d64fdab5062785d7efaa3cae67ead720c35cb10a95b87f5afb155a0cf90\n46fefbd0d6f2464f4ddd6185bd1f4b6599588227f8b79212536dae68d71d9c6a\n6ac78154dffa90accaee2299542cab0257148dad3683428cd9456f47fd8e643c\n5641ede30fb2416cc9c77511239316b612cbf9c56ae697fd2d9e089df4330e5d\n3ee5aa8031bf73407c1c76b991d3f5cd858f84df504828a18b27ddcaf91948bc\n331330f7603bf11b5b1b44f3062584f861715ce0c24b3203bbb2a6024ce24819\nab61a5693f87f4d9f90e326b7c462d2efd15410c3883d83b885325a252b10727\n30ff403ec1fbfee64af5f34e764e3885af92cade246212debfba97ad8a32af2d\na2ffbaef4eb5229ee1764be882c7ef2b77c30f20fb3ca641ea567fceb488177f\n3ab4cee106f667a9690260e18c58c843e75cb19fa97d3dd5ff1e21c8a28e597b\nd4304e7928a7236dd8eccac507efd75343a7a21f212b75dfc3973dcbaa54e5bc\nf14e5a21fa4de7176fab9d55a8eaecb4f26bf07f95abc492fde37dd2dd883210\n36e82d78b5923a7d6ce860b5dce6f8188c835111221b6760d8e1b6bf1556e95d\n5df81932b53353dfe6c40b8733035fdf85ae2782b73c3d9fe167107e7b088031\n58881fbe8ea285b5a805b14797669bf8970deafdbacec6ce6908a27edfc55260\nd96788c8baa567663fa72cdb014dde7aff4796fcfecdb3cff91b5ee1a2d7df69\nca32107124c43157b7847cf136862afda282e5237ffc9a028a5cdbd917686bd2\n2d2d36772203cd60d421bc58edf4752ee5c5782285ec699d1d40ef1d0db21bd6\n551e74faa5921f0ff71e80740b1ee7e95ca612aaf69a977bb8bf182f98083f2c\n51ff2833ad09f995f768a3856b5be22ea86e8c081c0d983e176d1cc1c1609b30\n261b84aa16b53aeb5abf9740eb8e03c8c0f4f7fd8c62fd8595259b1f97d8c789\n83a3c9279506091ca46deb372529bc9f9a5bc146f7181921e9f2ff025e9fce82\ne3b12ccbf6d74b71e6ec51212bfbb22d81d21cbcb18a766a63961931e4ac69e3\n4205e0ab1db1faaab63d3f8d64ccf69ac0b0dd99a2dc96b21bf8b8d6377f076b\nf3af7ffcde4948e8f23195bfb0479612d280fe72ba886e08a3997203792e3512\n0e9263011780783abb055aa04f678cae49692cb89c371a8009dfe67aa35b454a\n1b3af2f2060d43a354c068bd5f310ee33c8a6c3dbe054a042ad0019159e3e431\n073ac273795575f8546b1cea930608f825b8e6e1ec7509f440966b79a9f9e083\n66c8f4d9384925cc4d4176ed9d448baba332025dc2a389b3203d78122fb9de8c\n2b7a7c153082b81c8a2536d28999d89c8ae381baf6f439b8660ea203946367a3\nb082cd8c5ef313f3e515bf0cd3fd5265a013db50bf49100f6dd508f23ece97a1\n14eb5ce749277914b12ebcdb0e6550cae4d0417530f86df8308b8d284c17d9d0\n05bdbf7d3dd5d8559c0214f1076953e19f2943ab034b44058f460ccbaca7d3bf\nf63c9c81b3416f4ff3613a7da325aea08d269c66e670d41569865cd07779eba4\n75d7fa2c96b66ddc9c2e473d1a472e2928a3701889b0cdddd86145ae37438a74\n4a787d81100108280f7624ad82a472d41902257a2758ce9aa037959d83ef5e96\ncc7b179f04f8bb9c5769e1746b1084b7169d3fa55e1536ad14a49b9e615185e4\nc42426f65d1a2deb0f332eb0740d1887e9f6af20baa4b99edffb99f1802ce26a\nb179476ba7ef71dcb131a6cfc1a31f9537249e09750b28e8979ff8283cc8a255\n9a50e3635d48c56377784ded25fcab2ff9139e495b57da75528de075cb04d91a\n0a6a0d3f4b37f8d650b5e51e8e9fb985b75c61c69e336c75c9dfc1cf1aa681aa\nebffc191020969264fdd1912f44a07b5d13d112374102621e8a7631c1857a505\nd3e547b1109a60ba6031d71ea40b4c3695fb2c8bb755909b95737ee86823ff78\n540b33d1e64c10cd1068d1d5a5fdb2f6df2ceee009d6210a30f586701f77395c\nf7c57c1c725e8d151936ab8dae8f5452dfac5d1e6954f3489d2be7cd227f769b\n57fd86e96ab20df1e2840e5d884326049f89bea0369975bbdab892148571ac5a\ne85b9457902ff3cda13a2e623f947bfa3d60cc5814d4372f09a15760e593c799\n716a7327e7c05ed7182dfe96cfe239f4cf10fc6eb4e1a51100340e58801e1ae3\ne71d1f85610ebaf89ee27ac6d3eb46f7d03e393db87e42c6485d04a0adb2ec3d\n6c8e0c88f4653d6c57e122fc1d34aff45e8d4b43dcac7de1105814e9eceea95e\n6c03daa0bead4faf3e9b0d75819a4b5a89b988e25ec418b51d648add3217cb01\n4f3ffcbc4fa2a495674b660fdab6f3458fcbcceafb0d366d30e85e3fa09bc362\n035399a0c2ac314364d4857a41edbce6054a66c3706fd03578d62b4f7d5f210d\nd06dc913bfc669b1a4c50e7f56049d19aac212a25b731545bd006a11dcd226c2\n912ef4223c8091a838bc5ff7babf4862520a8e1833e7fce433bb5f2aa5452e75\nfad2135200964ac23d24b8bc91f64774b712abdbf4a0144ae7a567af05a85f4f\nd44058fc8a59bcb5e0f3295eece5e7a89e3975b3b4ba19898f9ab7fa24b01785\n8a8ac6050e48fa2c51d39b51ee03d533c3fb1d0e1c74322bb33f19ee21736b79\nf17db82f4426911b12c1572e699ebf27a7af072c09a5b2a23c9000694ad30e92\n450e034deec78c0b8637de7b572396d896a358b4bb6b05ff00152dfdbd498ed9\n933eed8771c6260560de9bcb7e31720729bb39e332755c5eac0d11071fa3a286\n20b1a558ebb532076ae3bfe622a13f9b119cab8fb082a646fba8f7aee0313cdd\n56e48ca0fd99e90098bab7542a02ff69ed56d786e14a099c8838f607158ab1bd\n9ec4ea716e0079d2def6da45bdd14e27e804c81b31b6fe1745fe9ad9d758b988\nef41bc6393521a777849825ae77c67db3893a9f662962232f38b9a99c3ce9b82\naa9f787208d27503e85b1bb058ae7190e62e2ad6681f46ee506edcf43299f122\n5784ed41009add7f5ac2b3382d8fd7dc206d54c817394924be5d3ca0bda708f0\n67fbd541ba916d253ecfabfa24ab81d412b8b219158696bea27afa1125204312\n5b85f7958e567ce82f3b605444dfd0e13860bd3f8467df87bbb371b5e070e740\n0732510ac177c4d6f9221771f17b61cdfb6bb32807b8a99433ebfd0e0ba3c4c0\n57c0c0d23ec147874c295733bb1f128da64d039dc1732a28b6b93bb3ec1cfe25\n69aac2fbf36436e6ccbe7092b6b5fc3594c5502f116df7ea280b84a77f7144c5\nabc43f9af14fdb51e5c935693ddd3918ec4ee19d01bc718eeb5f544a13dc4e6e\n01a61f148c3898c7c62df58809714f762a5b6d06eff4526e927fc701ae1aa647\ne4c95e7b009d9105b7c3c9505551d58ea5510fff8e22a5451590bcc55b8f9941\ne70c438505c2f524274ac86ac0cd59c96cf7ad035b231dc8caf3b19aaef0f5ed\n4177585949dc6f8beb815d8cf8ef988082cd7a41cfb14cd013994554e90bc67a\ne468ea623d13be032f4760af34217e768a6380a14908b3e7cdbefac30f4ccfab\n5fa246e22da94b2bdd76b3e74bb87b71e69db58ffa0c6d71984f06c96c0ab5db\n9878a521c5c2e6523a62cb327b9183ed2a8703dec324b0d68df8dcbcdcee2dae\nc1935742e767cdc7d193396594bb0b28876a2bac6c6e59e2c877307476802dfd\n0472ccce259c3da47352d3f4f88d069e8f0c6375f7712b10e25966c8fe4cebcf\n15539da4e762a2095a3a8fc17880852507347fff106492b481e687d693205fc6\ncd654b3fc4ee1bdf2b422a89811f7c0b74b391b78ef82df1ca6e305dcc69ff2b\nf5d324c467f6f56cc5e6c104485ad0ecc19f4ae6a75522f7cfc843bfe6edbaa0\n830c54d582903b78d8b8257a0ee6fcc5543f1b2edadc45290cc30f94435c4f6b\n4b1bc7eb088440418f50a23b2d1070bc658c025f0917700f7fcef6701bcdfd0c\n51d1cde8a4f0e349a148c965d3aedbd89975131316f3c197c1130776c75ba31c\n5f4066d5181784da75f4ee258bf0370f8d8b34fae0eccb99c662da3743554840\n4c09ab577480ebb06bbd4675daea99deb2c38fec31dc56768bd433680fb53875\nc77bf579de5acbe02b5cf15561872d24dfd81dac03a53ff059c9b7b85547c595\n583a49c644c1c0402f6a6191be1ab614773d16e5832eecf0bdf7ca7f14872f39\nc505e25f615f34098372d78df535a5cee2ffe67b752578155ad8600543b4430c\n99fec379916ed83a36e85b81fcadce80c15b381c381b7b60f5dcfdee8da98828\n05a1a53b665e4b2383aeba7988c74ce47756654b636ca5d02a3f3ad146a9d2dc\n5f08f62ad94e7da2c9b5df872579c514b0a81271ba407f7eea739e9117568fe7\n841eed90e69428e3df60d3cc60d64e22d4b326d55a5eafdf690f55470dab2e99\n9703c2686cc9dab66e8f111258ba670f6a22680125d39b3983198f52f4255850\n8cac936cfe028e10ea2e9b110416e67d03737b27a26941e671e274fd1a3e08c8\ne79689c481d348e6c42cd5d1089d351e89dd4f1aafa781595ff0cf4adc959bd2\n487dcce627fe370eb5762ef3828e2312c0e45aa555ce05f2781d29526b4d1cf8\n5a2d3e60a270de917902225f24b6a515853c1bd317f6c54b266746293bc2eeea\n3a6cacc79f666f5834f4d96736aab8873456527c279971df6a5afa314f6e0583\nb71196cb11f71848960e74ce272738f10ad7b626b9b16f1e69aeb2ea377e882b\nc7649835dcf593463058db8d15494bb2cb38057e2b5326ae51cb97a53d945ac0\n2f7498ac690a4a168a76dc06aae34f2b14af612173c8c71c82d891db8bbb0b84\n706bcba2e6e05919c7966a32904eaa327ceefc31482354735d6630c617226cf5\n6a3865a77585fe22f99b22a841fbf19f7fafede2af8d411323d4cacf31a75c8c\ne9b955c68f0c93741c3ab8c65f4457b17b4279205a9d818cadd9ca1fe0afbb3f\n776e5ccdf4b1be99fbbe48e26e0dd03eec24d69d80c34d7cde434c40ae576e45\n1b31ca60bd418e4875e03412fb413441ca2b4daaa0c2905ef79c27af69b4a73d\n6cd7a85ab22ea9808da4687fe04cfb410e7289f69ece255a7d577d480888fb54\ncba2ec08d908c77303b61686206ced2bdbb3bb80ab592cd6f611f313ae64020c\nb123ab3f6f1e8c31cd591f4fdd992491cbf75f1b2a26dff2d3566415caafeaad\naed4497646a0217f95a1fcc861ac91f985c2497bc3f2eec6efee9a48e9150f3f\ncacb26ee145a66ac3b4c3ca9ddc1c752649a97ba9e7f41c096e526d8dd0696dc\neccc0dfd15d5255dbb664af441ba58f92af41d738e51c0fae6859510242ce3a7\n904944831fdedd2832287235f7379143e3e134b6c1ae20a4d9de345b34141418\na47ec292b7a683686e8db50b3859c0ebb99cadf5f4f08490f52b592416c616b8\nb77b3bbfc395ce785bc53401dec1d9573d0baf86b795b5998ffaee5f911d832e\nad667fc26d5a0f0ce658ab87351f423ec818b8a369494f9408a640c57e4c22e7\n7073c644d3b5c0caabb0b772f3528988f8acfdcb3d52dd9f517363c852e4cfb8\nfbd23d3da71d6331e59a9c9d3205b35a46c11d1a60001686372b9c9e3940570d\nab4674aaac0d78adcf92b436ea61f7a8b974a490d72aa03ad47c37b39f48b58d\n18aba7e78f58cc1a9b4d70d323d3325811719aa4016a49a93cf1b622c0cb791f\na2013ea9013c3f55a10968df0e72d388b703c6be35e52ff915a1a01869eef72e\n8422eccf5d97126dcf94a62399ef11000f63585707e023778b2bdb952de3a33d\nd6501a4007378e7b6623ad4569a286e468ffaadc01603fa26599917472d1b68d\nff814675ac3a3bbfd00beaa783fe94355f8d3a18d4b84a2b1a186dddf545dc3d\nfc3768c252680915434e8525a16ae2ef31ac5fd7529c353bc572ebdde69e3ed1\n9bab84bf55de3e7640b941a755d7229fa9cf5c3515fc898b5eb104ec3141dbba\n768aab984351da0027ec8c7f22f7e834cb274e80519bb55a2258cb081f63e841\nf05208b73626c49447a7dacffd6a9d0ddf5e51e49a3d4e37710e7fa31e58c3c7\na92c5210dda96428680098d4ca53d08924cdb0183841d20fce606ae5a0c06747\nb7086a16ba4c39466caa0ecfdfecb08c517774decc50726ca7d3c73a8985d27e\n70fabeec4efc51b0f6556881c6e7b521c2a1342d5bd2710750f2606cacd3e495\n17538fe0d733d2b544288f8ff4cb30c10d753c0cbb3aa7c29f50137c24859954\nafcdda904a3c46967e2441347406fae07f2f1c60669f86de55417a7dc1874faa\n66de7b01218b35a2423b715415d44c271c1949261161686da1863fe1c322b30c\n79eb39137d1e8b7f2f47f69f9812cf81a2ccd6f3818e5138aa90afc438e3b670\nd0eee9894bfb4de2312656c112784e741673e8ce0e47215dd67677a87b0d20c2\n99f7810dfcec78e6f5b5a6c570c281bcb76075dda1a4ab96ee9f7bd540f8723e\n32ee488e3151bfb2f670f8f33183e303b5a4f9c0aac4244f45546d03d9b9017f\n63ee2e221379a0392080d5e5008032f11f3db7427914e2002e0d8f1e410ba9db\n7a7266102b06c64c4b84eb94b37b607c7454c44d4397e94fe6382984daa10b80\n82770c73e54f56b35e5bc9a55202a6ebbaa02726022a875b9cdb2fbc9b252502\n2f9763cc14131ad2ad872974b9fcf11b13c178a45807baa1a524d8836fc99b8e\n2af63cd82f5e2bda034555ecefdf0945ca2d6bf3d554a190f50fc2e8cd35262c\ndfe47ac63dea0c56ad63d32aea0fba8a0a68da908d57c82e127d6b5298cb317d\naeed149c4b7980a7420653ec2362403eb064b17909e1ffcb7456d4527a830c7c\n0adda5b408254795996126a255ada105c5b59de8edcc03f00d2e107bbc17efa3\ne4920e09edb63e5df684474fe9fcb732b6bbfa649bf11b506608fe2f067092b0\ne1479ff170e2d7e99d86abf8b84e5b9a850f5154b82f86c319272bc1979bc3d3\n15a2a40677b1cfa4f3422a8d300cef415d537e24eb58c812eca3aab1d96e747c\n6f80c4c963f19391b440a188a7b94d003a0ce98b578afed5795657e927af9a44\n70d66556202cba602abd70fb66b7516047fe5b7f88ecb669d070af32beec1a38\n6e491af72453c2fe04945a2696dcd82ab5079f814dc34f3455b50f100f575361\n85578a64f32b83015337e36e574268f366e386b71063c949e79b0836de5c8022\ne346694f5a4b63ce16f0562b68286b07e857f636e487f613018919d1a731f4bc\nc207cc5271e050e3685b5ef4d89508bab7d403e5144ba76c9dcdb9f277d1f0a3\n2883bc5ba4ec26e5968bf0c5307a482d82e96dfd176531783f19536bec91c45c\na9957f257f24b39fa50714a4bf93a0a65343f07bf346fa656706f24e0d3726c6\nbd84c9b30a89af8e97e0650f95ad87a36deb66aa6e6adae49ebbcb38219d9958\n8e2d30e469ef13bc2096ea4a1fe6a95d35191bdd998397f12b439cb6ea2bc9fa\n2dd4524efb0228c8380a00ca0d386fc8437b7d4a7608e6649eba532bb0bad877\na7988cef6c76034cd9570585ad9c89ac9d7997cda45b4653fb5e91a68b4a8a0d\n081386fba61436561cb4e89d729934621ff92d7a71c6c46a0d8339f4b7c819ed\n39ca9fff7aa1e67c355ccd879a7da940ae66c18f7cd1ea0e908f4d6f8788feae\n4c01f84e6450d4a0fd3b4b32db955db709154a68d4f84931c27e0adcfc882880\ne3b28b048fb05cdf2c6dd5557719f33f9eaffbe9a734444f46489807215cb1d2\naa9d9fed02cf8d9a66f69611f26a1fcb79768a04bd91bd6a65fe67636812602a\n55bb201f62eefb6091b59287cc3eb9731aefc613f8eca67a8bc12251da7975d9\n1eeffd4b7eef98d348dd64ccbb181179b04ae3b945304c6e36a7be5cd74f4479\nd2fa1aa5e44e09ee7718073ab2649357a83b5236ab0a6698175311ae025bfca8\n89b2d9f3ed55d970dc5ae3217dac364bad286304e515b7ab869d83e188956b11\n3f73286b6434d8405528a243aa4c20ea31d515d2ec8c7c4ece638357fcd4e2ef\n4325c6792828c8e2da9987f84693a6b525505d87b01341a71d274fcb51c54f1a\n59d44cea928f9cd3a65dad29e140b47294023878b920591d4269b306396c6eec\n0b690c97f693e7d79662079ddcf203fd5aa12534f3f2d31a02b4f8aa8de4bb9a\n9e56037f29f8e4a3fff030b72ca7d2271e9ee1c7ca3a185ff53aba6be22f7704\n1a76bb36f98d0b95510c4ba85fd9c01098dbcdd29294461879bf162f0f7cd048\n7f4610ed0f7e97e4285ff4f9bc93f36344af2410671fab3d3afeb316a037524f\n779e2497ee8d4572ab7ac5c19e7b445ae940a55935219a53df4840896e9e79c2\nb0ca07d0f887f5488bb03d0fb5b1ddf31026ad9e91f8b7bbed26671a7b10da46\n737b26cf570903f91b62ea4b349306e488c14ba4ac801a1fa8f3ddd40bbbdf04\n6a960c00837b289738ce792475a728ac8f5f4b29e4df5984d4869a7936cd99d3\na082318d6e948832b46d71c2fbdb70fd4fe5832470b56f4ce76d7eafea04fdbf\n89a02a2d3aad41b78bae846ce28427b41462a452ad278d4e87b72a96fd5c02b4\n9749f536ed0d48046ba24ccb6e8ead818e9a1f530fcee6ed893a8d98fbce8857\nb7a30d8f722884d6ecebce5918223df52f0693fd642fa2bb5162353854b7e3f1\n7b7f45a7802f8238d685c6a1c732d7f4dcd9496605bacc47cf2d166c85ba3d01\na8ad7334dab2d26bea12893100b3d1a73765e4aa89cf6af3e8d08999400edfc1\n9aad644b7649df2ef437e6d8a6d48aafb9f89dbd500515bc4090a9c49475c409\n8e5529db9ace63e48caa7019a6adb8d1df8f7d5941648ab5e5b4b256d8b504c6\nf49fcbe1f578d958305032a5ab862145eba8829be82639ec55acdf80952ed9bd\n043c37609fba7ff3eb7de9464842727492a13442247fcc0925489a2868657763\n039bf54d6e2f376e75e1bd8887314dc20e610289415f46e881ce0e9a62623574\nbbb4e01474e0f09832b92c5694d677e44c7a5e77fad0759a7823c7e3373a6bc4\n4d3c2c509d80c15f26ea48167052087a8bebdb7b70f54b3434e764198b30c66b\n44bb0defd0af2a74b4cd2eca75a0ce7e76328a3716a09a8a4c50f413353d6174\nc7fd3db1742c1071a8188b4fdf44e973f4a08cc9d7adb51500f009a810e5d7b3\n2c4f32f34d5ee83fc3a8cee6ed25b69dda4829907244402d4cc1db95a417193b\nf768faf3913f0fa8c1771b0037014ffc28e58fda7647a4b80931c1b3f32285f8\n4e62536272701e754296880dfd89c850167aa69e7e189a96dd4249767f15a0e4\nb412891a35741ad34beab6f2e46b071d8465c7f9b9e4c5aafc9215709eedf3c9\nc17b0bd9753b56af93ef0c7df9b8c958fa47b54694abce796e5367e5609416c0\n89c03184a4e267d19442a1a49bce27641a0a2924b91169eb64bc2c6f62e6998f\nb5b79c7aa6247e80d75838615de8ab22f8445bed8177725b9f3545853d9010c7\nf45bbf8d794ff944ccadca461a4d5d06cce70655148e4c5751b8c2588cc37013\n6735f37bfb1c08b9128d6b1ab58d091512f198642d672ca166cf3702ab4426b1\na8e6693ab5055f9495cef6fd2db335df17f01694ea56622d6c6dc5f17ed60250\n4ffc1cf14819318e9b74421309c85fa6c4cdebd0ff2cc34218723bdefa1cd21b\n0fd65a4d8237dfd5700a2f502d77c63ab4565c5223a296dbf07f87af5b72f04b\n27f80b66244c2bf08c74ac5d00abe49b3ef447c7917c94e9ef8e72d034dd18b8\n8c92b2cc1d754758f1593afbad91d657fa30d88673c5b9d7761ca36daf09a468\n70fb86e9f3bc84e11ab0cceda6c62234988cc48b398ba740eae29653ba2972e6\n2978a10b235510b2db15ce6e3fa1b7cc72e57dbca04b9d49921704fda621980f\nf486fe3216c9e8e6f7eff27c05bbaa8c0fd1a39adf8de0e58389c3b5468afaac\n2f3da5cadcdf2e89d323ed7296956c44e4c687a1c17bb7354d1162d8ee0f2497\nc96694fe9b345fe03aec50754f7f15c89a31f76dfc3f797366935d8596c11118\n8a7db4daf624c2b0dda4fc1d4aa589bdf14d074b1a97eb0d0ea365eb0d897d63\n1288baa0c525c875a15be4362d7ae58277800a4f0e0d0fa60e74c1cefc3c970d\nd1fcea62be430eabc65ff0dac222132530fb42a3bf2564036717c963087951ff\nad089a321a486b4820282982f11f10825c28b4fda3c79f95698088c8575b7fd4\nc86b5cc6c440e256d76106333ea750ef8b94c33f4d6f6c0d995e28d952ef9e9b\n7b952810c94a109b81e14b3028cba01996d038726d1a2a981c04cd69ab8a8e11\ne27a3afaec4f6389dfdffa83d20589dd4659b32734d96f11497855f8df1dcf26\neea26cab2e56adf4d50e9f4a913f84ef8b01edf2f69d0d1ff3840ea0170766e9\n332584029820f4fa0e192707ca3ff65215bd8340d5c6b477acaee3b04a36fa15\n3314d84e36e19009f239869f88a1eb8725641a8ebb1f3197c1a9017a608a2d68\n7cf66aa18e7f7095c0c368368c60d7f8c4b694d65ab44a6f8d8bca94ef164281\na391700b0de9185ffdba7f4561e2a1f2c3fb4a2f5ba9f6862ac6ae139a8d68c4\n36433d4c50551268bcfe732eaeb53a0a831ab06949a1d3b9e88fed215af5ec1f\nbc83bd5cf62dd9cb8ea4004bdd4a6844f920950a8e5f6ddb6e8d27d4481d208a\n821d1954a2361036e649ed4e8fe77d15023d132d40de3efe550a3ca434edbaf1\na5f259277d23e1f6e518aef6ffce4b3b9793ff548bdeaa79696d3d16b9c36cac\nb4d8da3432eac235422f55ed1daa0ef0e61c0ff579197c86e18cdfb45d17c2c7\n6078299a84d8e0297e93968d5698e9a1dd7880879401c7b52a0acddcc75226e6\ne6a8c1a2ed16d17567ff474867551dd34873c3061508679d5a4af084d4afd9cb\n6b143ef3759cb5b099f7cda8a21ab4de377e0030401908b670866f73b56ad7fd\nb9b681c7295745a865b772f3383f82068d2f0e89ba2e08dbd38af402aa8676d2\n375a972850efdfd7de7a45027e1c38743d79c1968135f116b61fc9dbbfb0cfd5\n1cfb355cc6a6901368e8f8ef4a56a288b1d4590e6962e8e11fbad97822fbd7c4\n1d8d44e0e14c723872184401d6f0d7ac69d69d1eaec5b21849fed9a26c07523d\n87d60bbc96a4bc2538f512ebccf9b4b7caf6282f7fe00488fac09dc037850e2e\n85a51e8714e1f3718cf89d97a604b40a053b7591b1c39ea8de3713c9fdb1182d\nfc7dd601ec9d1e1a26d180690626e07fe4cb7b0fcb3b6b85ccc857a11c14879e\n59d3dead393c2175874ef460d6364d77de810ad2278090071b5397ab16b5dd8a\nd35c3827b2448bf2159d514b94edd357c12069923c2070d494ff17f345001221\ne334a80a740e849031b5736afe0fd4c83715570e0bd7a7b25a95e3051d2b7333\n18af69fde3140d6ea1102ea1ab4a6ca05350b05610174be84c86ce2dc40efcb3\n672bf69827c9c6d787ca3d0157cd6b39872e066def513f99ae66436c53e96138\ne8b15c35ffc07e03b5839fa27b482a3f63b36067e14eb7065308ba4d19c637ad\n2e3663576414f515e2bf89fa0620b202d70a41134d361a491d7721060316b7f8\n0067436d75657b2d7ef960fb382d69c4d9fd5485cfdcc9f4da3d0993b759eb45\n8d513eb5141fde7e4df28c7e55428e21e8f91764c30c7579c29ed90ef9cd6db0\n8aace6479c5249fb306fcd1d21900e72d1554a4864adfac6f1d612cd2835fa26\n18f8a16388968275d53810da5c1f7543c57e29a73223da6cd59980d314e36322\n9543820029509eda0aca2dbd3d36108af310b0f52db41acd6216831d83c269dc\n50518eead1c7ebebbe7cbe2e8ab928c2a1e4e8264798c0e969ce997256cdfc2d\n6af9fdb36d6964f1df2253dc4def007e3ac8b41a13a07319fb729dc5df226ebf\n45418608aadba84876531113aa524c22215c220d5c331f562c04563b6162e51d\n2eb0e9335361c7d2f0f0086e5d1a10c70ea0740574939e36768fd1dbd48d6568\n78573004fc2eca60bcde7244ef4be88761818dfc040b8e435fa1e6dbc6b6ea16\n0d0e87314fcab94f9dcbe16daa4aa5ccaebecb2524c8667abcd4aef4083ca0db\n48378e7221371b386f685a4b9e8d71f3b4f1721fd4670fcb13bb78bd6c6eec3d\n59cd0f684f2c20fce387b94ef27f75d5e05bde7118c361f1dcf341e95b234e75\nd735f20570783715190fcd8db65cace232b745f97bc193b94a3efaa009b33a25\nf948fdecb6edab1d51d6c8c73fd0196cdd21ba01955a602c90771ec4f96b7eb1\n8b35ce0b795b615a00161bdf004dd85ef977050942dc1d345d541798a66827da\ne9da5f61f50b60ec60ea384ec3435337fec2abeae117a31e5121af4247e725f4\nfb159a58fc527044351db5a3bc0416f6a31a9b92aade17fcd842cbe8cc42105c\n81be8b49982730971baf837888071671297280cb7a1b6cf530afc3578ca702fe\nb152bd3fad54e7f783d59a530d387718f6b4cfa7ef5022398f1157a9eba94b77\n90e0f53c13067095188448d2c28250da47be63261e2fac5096fffb7b22ec5427\n7934eec6bd1408a417d11bcb9a8ead6d62232eb55968e016095d22a83e99f0b1\n1a1484ad3c941e9a904eb93aee780797188d5d3a1d7142e4230db9726ccd1ec4\nece9a0dd83f69df0b0fe6324e6e577f6ced7f9e7b6de17ded8d20a5143a24e13\n96ac7e6bddea24c8825bebe2e87fa1b30487c6217be92979090bf3c8ee7165fb\n680d69838b452609c970f49ecd3e32517dcbbe773a772421eb35f1ae629f6a6d\n5a3c2116b792d7173f8cf8e9a72271b0783239130ee96fe3be305251c3da4c59\n41ac5bf116752bd7fe9b08f65a4b82e4b3bef24042ae8f71644f56f28b5b8d25\nf7feeb742d3e372509c5a7bfb0b09ad083ec4e50b70f61f4ec54f0d5deba535d\n1609826fb29f08203b1c5bb7d0d52328ab438d00e7568777353a54bb50a76654\n383edeba9ea3f3d1a9ad8bc7fe22c43962a9c2317b295031f4662e53dbb90d67\n79154602e4e1f0940942b1df76b8bc883e93b4ebfd29329a488e16b87168ac80\n0e91fe8b4705b62ac4e4588ec5239a7970415ae9f981e3c8b333c94dcd3920d9\na5d18e5c7ff007e15276f09e6d90fcce8fb6bd6c9d8e192172ee0167f7bd3fdf\n3a229ef62680c5546d9e40607989de32bc66dcb7840dc66f67294a5861e3bcd6\n7017e70d6ead00c49d18e7d9becd3583e3a8fb48d74ea789ccc37c62167e1b3f\nc8229f9bbc8dc1f7b24dce4665255cb070bce6561f205caaaac4d7ded89a326e\na08f837ae047b73483416347cb9a7b94f7c1d3585551c60036466332fa1d98e4\n3df99e8b9833ecebb415c7c4297e9844dd590f0876d0352a3e9078285415c7a6\n7c85d2af390fbfb70b72757859fa5b770187623d59a8d4d29ba9d5a17c42b679\n50204c3b720f344dae963de359d342ba79f59e166469f6291dc359da5e1440c1\n89ebe32be098a1d1c8a6cc84b7b651a3c67f12b51528be0eb73395a1ab62bdbb\n9e2ef9c04d85fb00b5d1bd8cebc577ba370e7657cf1cb5e819c6c2df15b216a4\nc6b35d1b51f4df14c066ece41809804463f75cd46c33216ea06fc64e04c3eada\n524e7f603c255a62055f2192918620fbceb50bd4cbf9b43279601e9228d12e31\nd9adb2ab630980c58e2255d93a36bc945a1e0a20cdeb3b1c093a8a8415fa3dab\na6c8ec47cfafaef1e156f401942cd0b28402a6a6f7f3b15f62763ea88915b488\na09c3105386fa0476313ff47c2740de4587ffe760cce4eef62c7031579b58491\n21d2fa319e1d0041524fa3a2d8638b2cb84861c8ece641e88325fc01d4082aab\nfc6ade90bd26fdf0ed4ac41483a9594d76b6e084b54f63bee479ad0802eb35da\n44e4021c287c705c908e095edd9b0f874e62f3a4fe69a80a24f085172070cdaf\nc28430695555391c458f8f41c81e84779de2e32e7659e88c82ecebaa482fcc50\nb682a0ce721bc7a085af98bdfa1a8f97f27deedcbe7241c89f5290e92a9f005c\n5048f3fceedc6e359a4808d9cb526171199ac24749af2dae98df031c8bc3f110\n360b1a3e6fbc087e511e4b959e9069be64de3508f91786aa0c6b502a5152c7b0\n1dd27211323105578122a1edf2ebd9dacfba9b41b9489194e27fc22ad39c0525\n8cdc775d0ccec79d40d472dd387479502b2328e5eab9716ca4ba4a39a1e0ac05\n56e7a27c539c1b32789948b23e65210752460c5e8c825aefe2f973eb4d218555\n20398611e7d207902cd2bb0feb6888cf1d6c00e3a90f9fc3eda91a0b894d5bc4\n1b6a87e8ce07e037806eb4d182a675df73a2c6627c5fd75e02b130c6bd7d0461\nbb14254d3a1c35ef3735f904038819b1688d1bdf33ea819f6fa16b4690152b0c\na6eae7b049deb3138b685ab9166f65425219c9d44f405a1cc21013aedea40073\n38363c9838275baad49ed98399051950feb0f42d0ca1f37f84773b6bdd23b630\n1643e03b03c3fe298e053d74be437fe850e0c991faf47bb47149d96a051e44a4\n7e6bc4733c4d3cd1512e42ae6b1fe4146d2671d94b1a898d2f3630aa840a5eb7\n6ec1a8cca0a56f43dce15880e21b687646f7c2acab9d82b71a5a9c3048b4226d\n28c28dfb069b1894dfe5e7db967af4057e4072e17209b77aaa758113943fa3d7\ne599341c12d6ec7524a559f108e7e978803a715ccfb88cd1dc0821cc52cd4826\n4e906a4fb8cca0031183f8b32e944f35a8edf76f78c865ed84ffe7b452ddfba7\nd925e9f691d83f7f6fcc58261b713fd53143f6b8c1368737f61c0c5f13f339dc\n2876f77e27372c572e57c6a5e82c997af33a6bc14e1fed56fc19d6f9d8bb0714\n17bb689b4dbe8d3beb01bcfe69156d87fddb54e49530a4056f53cb93000a7e7f\n7b5bc27baca5261491322852a7bd0d73d307e5dedb29236aeff99cad1a7e9788\nbc2ba1315e87b1f41ec046b8eac45b2708171e73ab1bd4c8be7878d1c9e7b8bc\n78c920cf5501790d95a7898b443d87e1a096faf28f8239c88ad031f02415ac10\n51855a0b399d1fc95bcae15c7da004379d95917460cfbc57054099fe1ff027ba\na5f9c69575b15e7ee934b40a60c3cdb05aa6f54c4a4884c0e6807b7f30927c3b\n5e922e1bafda817e114d0fa30edb7715620d7509f9c3169d3be525c1d2958642\nbffe567733f3ebe76f32555c2ac816587f54d63087c633673192c09dd3325d5b\n17d8afa0cf5c94be37b712202399b67c2a7ba1e01305600812501168de8cf3b7\n47a5ea70cfd892afce2ed51350df348457543ac036f23d48f3fd48f6eaa2a899\n6e303b4c1c4cc0268495694eef984e4dbe2b8324469fb9859181f0203a9f5bff\ne6c4ecd3bd3af95c497fd847341bcc7941fd5296b3d10b4bd7680d436665491e\n84810e7d13e11ffdc446a7896e88b91f57bc2c41f2162b13696a559367d65c7e\nef1057eae9093531aee1b03daf42776314211130a987a9408d54af7cf5aaa11c\nc193904a3ee2743e24743ba5a6d9350e3d2c87436eb682d82c54a86a075950f9\n6013660890d3ac3916dfb15494d96259be03a4bcd7eef574b2a7b6c3e9dd1f26\na9988134e5d475b1985c0a0f2e65784935ac59e4c13bdacb04940569c9ceee0e\n6cab49a975e3c5325688fb51dcfbedfa0da6bd6d4aa92f9111f8d397e7ab510a\n6394a811be882d8e7348ef725dc943db8a0dfea530854ca8608898b059678122\nef0d101e88c7e67df407fb14e929cbf8d4c235c00c527f9d65909b293c921252\nb9b442e6362b4cccd829b06caceb8ef86b53bd06ee7c95d388d8447db8e601e8\n1dca63e6a61eb114ff7a5e0194dad11b9b5d8fd030a3e99d0861da13873431c9\n4aee217489b951beb2ec9f1378b1fd4bac70dc90d4132a562bd84ace553dd62e\n3b696e0bc9390a0179307be8697fdd675d6133eeceeceb2c54df050c1fbaff5c\n523be917681e84502de68406b1254fca2191a0d8c6c6007862e1f2f911d7d32a\n41cbe4f725eadc6d2eb8a15363bc701f217758282d420e2d714a7be00e1d32f3\n3bf0efc9f475488c4e8633f72bfbfee399d66820f374a0da92c37dba2f81d212\n0b755e24be78d38657924fa1aa6f1076b919565737ab634ec96da578c428dd94\na3b63b6a8d97f4525ce9fde9de04345b0ec2b96389e57a3ba5ed9fde31c37c7b\nc91e5997b9439487ba26222ca6cbe87bb21147b9db42b85c8db0ae3a989dfa8f\n38555ae0517108bf4a0cb1bf1e10b6a1758ab8c5c3debda4d80bced4c72a3ea7\nd2287c3360148767d2b900226294f55a5ecf198a9cfd8783e480d10ee115d6a4\n5161f073d88ff13f2f2cc59ef29e2455a02d5db20fe45c4bbdef96a58e8e38d5\n02fa57216479f31656cf619deda575c9d2f0fff7d7f6b491ce9f50e15c902f2f\nbe0cbcd891682c4a065d8592f3e172d2a44d7bd01e2958ba734653af979e19eb\n5cc26592b4d9faf92f456a418554c63df26096c710961af9d0f169e4e8f3366d\n4842f8685315184892f7d404d4d32217da25b7d0417c49a20075b5b2c54b34d5\ne02f07246998fe994cd1a871bb09ec1e14047477f86b80649a7c0006b2cde3e8\n31d9deefb06873e64767f8b780845108294423bbbda7ead8a369e591d406a811\n6c688baac04cb3259a7a53ae2c57ae131a2eeaa349dcbbd30738b5ec808e81a6\nbed6631ad29d055bcabeacd9827dc08b7523884761068ecaf2efba7f8cfdc96e\n33308ce3620027ee07d8174ae835689a72b13f25e3781939c9411b28e4c96f94\n3441e9ae37c65146d28b974da19f63a8e1434084a095ac763728ee16deb1a37e\nb35d379093a72dbc96d66aa8969f41ed56b65f75dbfe80a56720e3400563a7df\nc6d1ec090442a716cab817492c7cac42b55391ac1642e6da41933bdc2e76abe1\n9d3b7f7c8c02ce662596a3c63f2d7eb1459cfd2c03c4fa433ed01eb9bd693738\n1e4144b4199507602556723e9a0219954a31e6b4f4e2e67189de2e427609c511\nc99db8972c4918ef31ac903010143853f21950341255f604ecfac59b480a7ee5\nc36131b4335fdbccef99c178e8222df984fce61284f74f650d5e9e62a8e38e43\n02a1e32e4b76ef0630df574ef333e89def284f127139e14d92ae04b270f20db3\nb7f35444d19c6d5b649db8e95ab585072ddebce553d9f63845d0259dae632538\n02ef42e5268e45687f3284fbfb2efeeb0476af4e7e54705897a0c11d80acbe88\n7c0d28c296e225ba30ff7135a3157102969a8c4cdb8375ac76ba351db4a9b98d\nacb739283e661ccc87495d9ba27d31f7355764f144f68ea197f6489c29614c46\ndd0c35a0725e4be144b2b66317f4ec156437c62cb57e0b94886ef0da4a04614a\n328bf3d6ba67f9a498d5fe19b2651a55b08be7a29de00295a4027aa1c3dd7ebc\n4e98e471196b6e19d9f9ec1d93ae8576daf113e4ca96473f68cc523d540d9aed\n056488420bc37a36da2a45f4ede644100ada2b97d5491e8ed39d26a63652c849\nf8981046cabaa01e31ea493f88847488189dda59e2dd0870765a003772a6fd4a\nb76a5612625f19f6bae32ddad94bcf302526a8fea7d745b3837d2483827f6550\nc7040631ac17344ceb30da7566259c329b4678205206bad170934f8e2e505f0d\n7d9e61acf85fd657d0768885e60cbf2ed4d28c64a187f4fbf5de0e22550fd058\na75e05f076b69f54e5e5b9ec21504418cad09c50b1a80f2782b6fa76e4433a7e\nf8d5f85b2b6f038a146cabe484289b4d94e0e3cf24c9fb63d65ed6daa71b1af5\n7cc0f9ad71d988c4ce24969dfd95889b98508a16022834a8a3939e9ff26b1f12\nfe7059378566e6c4bf4b41833ae9a8fe45b72671938c2f97a52922359687ca97\n644ac142827f0a662a961b53c528255c7f04841a0a015f0978935fee51fedc10\n1ba7ce7bbbe8ca29849e5a06ba219dfb36a190ea2bc7b29123eeadf611e5958f\nee53646285f4b17a2685a24b4decb62a86066c65b0d81b0f8b292fa3e2790c7d\n900c1f54a56f2cdcb924acd34dc93d4b8fec4096cc13c9ab786bb21a33f6e369\nbf0a2dfc76d5f693f5b1f4dc90422e7ee002dd4027506bf45b3107a551147c61\n894a1def5eff276fab0a952062b7faa1e4e64cca89ffb1b6362f911396e67532\ne9554e3ab275abb09c9446ad9f88e1911a38501de5a0eb109536b62298a87aa7\n390d3a216ee7effe327d7a0337b5fa34f48f71c69a01579f506b9e03bd6e876a\n05e404ca88e8f0045492dde6dde8c3f626a7a088cce735c1c5bd2fd952a9d22f\n6991884a43812ce55b3eb9a391b7924fc782fe18e3d6749ce6e83e6589079903\n20fdb6b4ef946eee6b2d8bf416086795747bf7d27a23b9722f45e29bb1e806c8\nac985961c47e0899e312b1fed1dd210703eddf1fe2cc1f376cd4548e68274383\nb6e5f56dd88323408334fe7e6e14ef393a7bbee1993f98da9283cbd1f0eef247\n55c5de629f355e8b7ca9f68312bdb8f51aaccfea8653aa06a56eda32a506f5d2\nd3ae861e2c98c872e94c7c16cc1c8acd6dfb649a9f9cb1274c602dbe2fe3f77d\ne1123273d05e79bc957d32fda96bbf34d767e150f7924a260cd3046333f2a8dd\nf1e8a3c44d971fdcc39d98e95f49fe63a74576463863b9baf6112394ed03ec3e\n6bb51dffdc07a3c47c2cb683087896576e87fe71fa01a2279714389fb03807e0\n1f9873e9f2e0e050ff64852da7a474a94120daefc96dac8244e7a530d9ab4cf1\n0520453a53a32f682176156e83f2af670301b26cfa98a079c43e802bba99708b\nf0726b9ea0de0de76db63c074c65cee69f1230ff48f388494eaa966a0550c812\nf0a9c4f26a3c13468f824068e8d9b3edb226a0b9e556fa5c55c8089fdd5e4e51\ne48ebda40a2b90681d7fcd922f979b7925c6f203e37ee2e27cfef00f82a24c43\n4852ef57b633426acfb3e382527a62fa3ee38087c9156a3999a6183406904265\n01415e08c738a18ad9120b7612a2347ca1098360532e5b4291d9f6d6753a5646\ned8d0d900fffe4171dfd993a56a3feda62baa0e5a1212ae3195045354d8c592d\n2421abc9d4a0ceb4058ec97f53ea0455a9d1a54ff5b4ac1232aa8b347699ea7c\n5a923baecc7aa14ea7cc176def22ccf88af3392d072b211d2b02118c0d0467dd\n9f4e76fd8ec705145f10e07accdc35377871a620424f23d5cc9fc7551c7e552c\ne3ca9f5c1d75f9941fe11d41188291d40da52cfcfa3effd78d180432953e6f25\n047cabb753be659d05065b3fef07f1e16916c4f25e6c6d8c430519a9f098d8a3\n8511f6935ade41f43eac40e08339acab39366fe093fc7010ec2fdd35e0f6b5a3\n586b7b42ba7927e7721864809d9652f7a33b7ad78a7075b642ceb4d45143aa89\n886e779e1bc8d084239bffb8e78a86e6f4fc02aaa699f3640fa37d40e39b7db5\nca233fb2abd84c0f201346aeb1175adb2006ca3cbaa2b0ab9276b5b5809a9af8\nfa76cb8d98f11f430a1c494bd1350cbea8dd245cb74a6efb729696e65a567640\n135b4624c016524aa14aa67ec9c90d89b488f89dc6ea52536d81c467653158c9\n303a381c8ba05146adef44a855ef3038d1d676dd44e6def16efc64187fd36faf\n231127b8d8fd254984d5645368aaa9c8a0b586dde75361ec9f795461dda36d28\na00c19488e9bd6c375b923d2ebc89e0710df782108ade9eb73eceee256905bdc\n463e73a22448bcf789d253da514a9f5e8cb7539d17336932386dca7dff88a7fc\n25ffa50a21fe2a64cde5a52e89d92ff956e2e48ae3bd6556910f18c5912cf17c\n56e29ac8f45a9a8bfdfeea2386fdcf51f21e32a03d2e17b2d5dc5220a4935615\n5834c1eed31f5c70179ee8879b344a648e7313e054e8e706aa079e371e16a78f\n2ac740699ab1dc61e1b751923614c0643452512a26ffbdd79b31b8dd4da95a7f\nbd9ec5562ceaf99581f408d93b9eb9d338cae016d7d3646bc61fc12da310df59\n83ed05299ebc13c737c4c55757a84d993d8df91b269f4f36958234f419a13aba\nbddde5dc24f551a1ada4975fccb625ef1a4f22015e0b6a8a0f8d66d6127cd76d\n111719e406f6db257908fd1f57a9a5145f4f4532d8d280e69614dcd9b8ddeaec\n62219c44a8496bf9df0ad4f292cfa36e35479ca0aeea312916d30932285a94a8\n29f8ef11fd537dc4a305a64f737a53f88b9ca7ea2692e30183218875d0931f0a\n53203ff1282438436f076f7f718e445df21b7ac59c03db5fe56aa2d7ea0153e2\n5626b9610e28fa3582ecff1392bd44d323fc859bc11e8a768100637c1413bc6f\n0bd6c586ae6abe9cbcf02d6fa1b2bbb68e0f530f491be98d485f39d30827cb95\n37ae4e5c7081e87e4797443a0770e8a043f2ab1596c0a434d029599b07c93e73\nb5498897a40e465949b03ea948fd77855f48896fdba50718d6b7db9074a51d2c\n4260a13980a70942ee3dc3c4cf3fa88018f2a4e55d7f7680d0a18a1830ddd221\n7f3c28bf4c975bb9462f539e6a6d254330a1469b05790e6cefa46438d7d342b8\n34cb719641272471b139a29f3b2f729c17bb7a969366a8b4baac2a768790c435\nd4c8c7e9e7015ad96ef91e5ed4d6a971590fdc9d2d4eaa65394518c4684873c3\nc9548b00a4b4801bf63bf9732abf951a1a4e485f3a60969dcb2f0da30d846292\n0f1b5b858ace7407a0cd70977ddefd760c4275d37f3efbcd1259f3b9d0f22c27\nb8518e5fce1e5bff83c949ae043acaa85bb9024bb33c24c2041bda5866e41bb8\nce7d3dbc862a0ced2cac22067e63612c7234906b2e6c99d00d13407c4000a85a\n5dfe194e1d2271f9b37e3261eddfb517c88780a642599424e1741635c7b8ad56\nbf2cb593a3d71a978407a88707e54ee1afccb0cc0ca0dcd7770940ab96bfbd51\n9bd81f03a9a439318e2d6a17cc5915e595ce314bea1e4a03f1b7374bf9236d5c\n2ea78ee9b5606722d4e451e51db973820828259a94c7bec0d11017e8d82943c7\neecbd9f0d90fe831beb6a23a49691a85b51b79a026cd4d104b1caaaa91771753\n217caebbcb9ac489265c6d753a4cf9c8f3a1cda7ce2937e505a3313a3bab31d4\n6375a477a7d889b3fa8d5cfa92bd42a80f8e52f9aeba3269d40f5684a3883641\n4b9a249866e06a2ef59c2c2d1450258686e4a5083e9faf749a9678c0e56a94e4\n998aa1e9f8941b2ee42ce1279ffa76b8f01abdb8639edfdd626f0d5cc8a4fd96\ne96278628f09c67a336d105f8bc2df8fa1781c15b4bde5d240afedb1b9c3b3f5\n6906df16f28c235cd9f4bc34217c3c0283078ac174436b7e9e2b705555b30fc4\n707cf79ab07431f839fdebe1f2dbb509a753a0f9fedf72adf2a49ea00bec1598\n024b21bcb4a457263609296ad8e7cb64218e6bb6bc7c1995ad2940e95ac4307e\n77bf6fb40328ed3600b76cce254051705fd709705efbe5f5da57015393b68a6f\n328535e8225266b917099a4632174b976c6067a48c529ed27284100c204f2218\n648386bf2bde0e262af693baa89430afc07b93fb161d6e4686dc1e8bb994bc95\n09b24ec4ca894dfce3edd480803853b911a99db143021d4e253da4c2835b67ef\nf8d0b497d8482d90f47cd3a37c7ce8a1d1d59daf2915b7ec82da29c8d5570a86\ne6ba0be6869f5050b95708f82b86f270dc45e800fecc67063f960e902973c36d\nd40bb3006315e70aecc46e83ef60f620f5899f8fcb1f18fd5146273005edab76\nb01ef72f459b9b706749d43f5183ed9bbd7ebd0507ab2548f54c4c67f4410d46\na2cc307474a9f0d2c8c856b79043b348c91eed6ed350cdaffebded562f683e95\ne5730d339c830ca8b40c4fd27236de18bf2f0812fecfdfc188b3ef6f62349e1a\ne97032d515d07ef71130a122485b2b89d87289882c4e96be33755412462b322d\n9c92942f74736bb34db6810eb084c4621030d44ba35378d09617e6cd0692252c\n3d2c35d0b5718ae1b07cf24306a4c2fa248598b8813cd5f4dc39e6c21235050f\nccf0614d15be18c3cf89f5540062297d956dd94cb501fd0f982f2a9006635785\nff23a9ba6752014f8a7206c11ddfbbe47f315988298855e30fd2723c7f4d1283\nebc6e356c1c8629746f9a3ef068b41ca3a5ca6fac203ee8bec5b301d94fe82a0\n75a2e27fc5eab236f8f53498b6bd0e5902802728fe85cde7c4abe0cf8175cbbb\n8c34e6ff97b848277beacb0a2f319e8121ad8681e1a0558b8dd16db6baf184c0\n0e89611f63f3aaad8a5a3f9efa7fb8b034dad32e06c3ba1a71814dea6077a4c1\n98c0ba6404903e6bfb5235b093d93058e4b7c287343f7ed24a53c30842bfb70c\nf1a249487a933829d3e5e3c5a207667c706d1ff845fddef030c096b2a2a135e6\n1ab5a5ae99a85e477bb92e53b566250146ced05e443d548ae11e83e2c4d92527\n71786498d6a00f6b5a2315bd2068b608a6fce154ce7d43e217bc28a7008d93b7\n1fe461c6ad18b554cbbe3ad6ea62f15e3bb7ef3d20e286961e87783f0a20b22a\ne0e47debb3b2ea57682981892bbe8b3ec0d79299af8b05d20d4bd4f1e078e5ce\n8ceebef5a1a3199e11d9522a34091381052e640b94a7684585a93e8eecc704ab\neab23146958079f9f175080640f6b6503f84661d41db35f8e52c76dd28e29310\n10d5aed48de2beb79094885e60d8486afd7ae51d2ded4554f4aebf684a4866e6\n26dd9968011c7aaa2af1537e572cf7793676c6000bfeb0bd243966d59b27a41d\nd77c0223a8083c2f37dc04053a6370587449d7b71cdc6afd5118b6caaf469ea2\n7dbb68cae5daa15df1a632b0c7be2d9553520fa0ba3e76361b534e7f637423ad\n93f02bdb620534354e3a28b0c3536fdce32398271ff1264d150b53e2449aad0a\n4790effe3df92291ced68516b1df02147cd78849302618525daefa83e3650c0e\n171145c8a98a75c7bf07acab7bca2e962065884148c2396ad535c2303bd06384\nd793baf4a169aac0918e8b9e4d62b623cd23f65e130d31cdb99dd04a09eecae3\n0718fc31557b87c5f46b91bcbde14c0910302a70e5bf7a0e0d8f1d4a74df525d\n587e66350278452af63418aa79a265211f08f80159084edfeb1d802a3564c664\nc1f1f447ee6dbf4a0bb98087e2fd42c6d9e779d72d4eb33b33a487df5e7a5146\nd08c984629ed129cab860f2f9830a7f98f3cfacd99db63a1b194d2ad90e31833\n05498d875d8fa4a10bdb384b1e24064a50add9fc2fc7298aea324ea673eb9ecc\nf9833f99acce33463d0ef3913d439c068b6f447c675bca727d53fafd5cd83296\n2bc239967fb2c14eecf1d66812ddfe66adcbf230b9a5357fa547ec0892d15b9b\nbf82d3696f7b2fc14134d5e26808b2fd50e36e2e0a35796c4b7707c67005a913\nc0a2069ba87ed2e5edcb48fd26d7ea47b7d94811d6def12a41ca7aafa9aaef2e\nba5ed07c71180409f316cf13f05b1814942fcff23f628687b53a42492aa1f443\nd0fed5ee5be085d2a048abefaa907272b2d31acc139fb8a036a24ba113a72661\n37a49d200b2891313dd13c55d1e392ff68088b7e9beca7cb9a0ea43b1a6eedc3\n4389dd6e8823c0f8a5ea98f77d7b392b916bb35b1942f83cdcc967fe06d5a872\n6a4648d04625226fa5fb018385deefbd70555e0a7e9d1e221a9005a4b5095bd7\n43c829a7c43f339a4d993ec2de7ce3d3f27d8daa76458e2b8fb708550c7422b8\n305ccce1be5026ea64dba4766ec25daf2bacdd3b1e05c7b52a1778d6b0409528\ne4da6323057a195deb155e26890a19e623b56584a1886bced82c0b4d79af93eb\ndb7002aca587a18d819f8a4beef80d3273e4cdff36bec37869704a86ffead4ab\n22eea5618247a286ab74744cda88f47b85d3f0ed4043d89fc3c90dcfbf98c8a9\n971635a4c89c513fab552c18f7d258bebc839939aa4cd709bba2aed0fae5e294\nadfae71d8b9af280da612a3a7461f3235cd5fc8e55f9679b8d83a3184bf2021c\nc6166c5addb9a52a2e8bc1a3830f05b5903a88a4894a25da6a4de51517b275ce\n122cb8f1f4672e866ca6692d429726974cae9775690f37f5ffb50fd30008a613\nf29b7edd5fde862f1d80bc93955b2e3a2d3d71aeeb3d241a53d384c5426d7a11\n9bf76fa6d83753509b877dc29ccad45fd97b3d82375e20465710c0be9b7f043b\n4aa419276715757628e3fa0d7f297a21df69d417126aedbe815bc67687276148\nb76ad721b4835c3dd3e5fb1719ba84898a86e8ae12f7c305d51efa23504b29fa\n909161301cd5e5d65c94bb00e84a69783012a199b9b96ece3ff8968ada473446\n126b5b1fef3861f8ab91cce83815a10c575b6abca0181cacb3087528382d2438\n9a535811e58541fe36c6ca24743e37b348bd13e75e75b5067a16bb3c592de0bc\n0c157fd2b12a44311494e532ca312b7b86c7c980efede75a1273d744877826e3\n85bb432bcb21563f9b021deaeb8a633d354f03466a0686d8e5dbb8fe222104bc\n0fcd3b10027ac4ee5d23899b11b59ce989f0959d1a17ac408e39ced7340231f6\n9de107c8fc65a3a7f65b690884e2dc1b8d118c1d9006cd59525d5bda5378a3c1\naffeedeeee22ba2a05459682bea129b3c2288717e381d98622eae961bddd9786\nc4b843d0e7acf6d5b6bee6ad01368ea09f26dcad17b0c0ad838f567709a3f0dd\n828b4df34c5cdb7a566e4a3bbffc9f5ff04bcf03ec6f492876fa96d1a34e3848\n8188b6c1be4c1ee414a3e5814f7ec32b94e3477524a0726503ec181e43b9700f\n147043593dd4263ef683326cf57aad2b38656aef4885f4c41138d3b3efcce825\nb01418224c178379a814757ddf77c18a52dad07dbdfacb7e8f66d0d3a045586d\nf0d93c10d411c3015f343436323fd1667f3a588535b6c061cdab290fd8a15a88\n70a7548944d5db7010bb7cee41e5a1c6f51f7bc9e73949880dfb502fa3581654\n047410ae05fcb79478f4cd3270567b6bb01fcdf85ae618160ceab54082b0185b\n67681d9ee847e2b69dd312a5d995f2da716ca428f0ee3679f2970aecc2daa598\n931f197dcf1c9eb83fab2b7238501c205560915524a92daf1a8479373515057e\n62c7c14f725be50bb72627404a34ac78b6e3fce48ff4058d405a7c5df40b380c\n31e42a44acdcef827e19f73f33adf5d2eafdc6389b60a8cbc65ae68c42cefd3c\n536a12e40f0753ec5ab3b14c91f38332c0f60765e5fbe9e66bc3eabcd7777485\n902caca09b1fbc8653e91b8dca0b0065b8cd9a439fb5b69549b75205f9cae36b\n07fc2677c145f56a1557ea646d95fcd4bd8a263713552be6189ec873b1254295\n4d458ff4fb11ef768165575ca82bcd6666387098a8596fcc4d1bdf55a1980923\n9f68c046db69bfef9eba04060c2875cb7c8d96e27173062358a65e2cbe1c465f\n3fbbce9ae0a5a918891e64f4de5d6e5e75b7ee434ddbd7dbfd873387af5bcfbc\n1b8a69e84f4190a4375be5c93c9bfb6ee23d4ac8183a3d9ec5300f1a25ca2cde\nb91f0aa3a2a1098cac98963856dd1105ca375114e345f65eba9162ddf0fb5a33\nba9fbddaa13e829174cedc6e57ba8e2d5ff3ac08e6ae4baf124e04a8d10ecfb6\n9d44e084395aa06ca1b3d1b98d299b96f6751849a134f4ca2efe82866878a60d\n4a52157b0ca7dc40286c821196d5aaec01b8dc0f4a7dbe535107986ed43e1022\n04787d2e3f03f693afdcb5c2584730648e51b814cc6cecb3a41cfcc918460f8a\n828ddf68f67866037bffdc571a6471f5b0b8aa7360eaf5adf9cd2970bb285d75\n81debd1810f6415fddd2de6d3a249fdc3d8ce6bc1aff70701dffc4b1ad86f2c0\n3fc66fa8f307be46c54a255a58bf3ec5df7f64a8180d4cf8c1603ce8ad1be1ac\n5b916fa050916b7c3c006a20f35c60b66b4605d732558b4152631a8346249ebe\n79442f6df4eb764513e02a93cac27140a1cd70bc8e563149d7cfab9bd7d6a4ec\n3d1210713df79e3ef422925b12c601808f03fc4ca2d283dbd188ab328c8cb2db\n3fd6bdd91c7031431a6fb0d154d72a2bbf796934739070f65ca4ea92e0207f03\n9f8d73ad017ca24960c126cd289d3bdef26ef72a17d517b42012a3e22ecc761e\na60c2f156cdaf6ccb6a49f0503ead16e47977288e32df2c7e4fa9b359f52ffee\n8060cf5eb42906a9d35bbe526336d8e93f9d56d76c40c7d61a7b7bdec95e2575\n250585e11909945256ba2e1dd96d420b8c5c0bb7636eb8234e419d04e85a629b\nbd0072b089f5bb73c89e9f7bfdef84e2850090f72646f922392a725ebe2cb6c8\n343aeb9c8baf7154d8ca56aa817dabc2220b7258c980f7e7880ead81f9da6e59\n5efa0db3ea4c4b172b15509b5a6252e774c26df190de06994770b61316c978b2\nbd9d4b3644c5aa9a49042c8bcff9147214064201eaa9db2f2fbb695c5d3f5c3a\nad7401f15c4c00cea6b1cdce485dc35541d4aed99ebdcc335e3850ecc036e4a1\n29b1156ddb34a497c79c469f6ce70a2919eded2adf07453943fa76fb2a41000b\ncd71d32076113f5e687d28b57e00bc8bd038f679f9d6c86168dc51bc8643ece1\n3d8caea46cb1ee1a7728fe6fc7a05cddf79bcdf68d4f755749c17e4434028006\n337d86cfc4a698a8a6a376d82fd2d49240ccc3ecf2203a1546a44dbe0a9c9fd2\n5eff1ea6b883b91df7dc0db60ee41ef68913e98b46470685ce276fbf41150619\na39df7cb6e0dda07eee74dc41bd2759e6f57d8556941d7ac6350ec213b8246f3\ne2fa2b2fa15d9bae2fbe095ce9a217959ab7ba76bb5e6c3bf6cfc09a82292513\na826aecb477345e4905da0d1af89b4c008c41fa2c0b093e256f4fdc814232066\n20870b29cd32ede41c54c174202f827f9ac05aa25dab391736af54dba404847f\nedab37588b15a1570f96744abaa64d532ed4e76d91168afe8e6be37940393328\n2286145804418a1d5274d0f072e518c8b8c3aa4af4718053afde9d772faf920d\n94ae066a16f80b075bbdbfb58a6cf11f4c5029279f1b971c9544bdff022be713\nc05b73a53e8f548410f9a611cb1904d3d76d4ed5117c1fd9adbb9af29848982e\n47678dc905fb915ddaaff75947b1c41bc615c4e7b24b99c49919e786431a9303\n620908d7a996325d5ea27b14ee4a197776191e369954d3cf616e7b838f718aaa\n640e48255a04450caf9f75bf0d40127ec8f675a249fb2600903b2e8adfba0f99\nc8c66cd3cde61284dc53f1b2ac81e230497f83877019fe512348a044b5c91f9b\n9cca9404e56d81869d333102f564d4672971e9a5f6c90f596a1e1518aa18aaaa\ndb50f07fee75a56e95c234fdb18910b009fad7dc43c38978671ac4d1680ae563\nd5688407f9a486faf33bab104629f2a1c581a3ff5e5dd04c44310ae3fb2dbd6a\n418203cc8c35b5c916b434d794b9c0bc41e80763a421b64f2edb8bea9e96d3b3\n9803b9ee01a595bc6175f0e3a9492a1fa097a0eab54002570a5f8ef291e8f9e6\n5b02ae79a0e9fee3437afbdefc580832243ac1e1ad94346d5d41aef946d8edba\n66026bbe10d4f502d9edbcdd1d9e856d01aaadcf9e851dd9ed59352054a5dc18\n8f16dd9adf652f3cf9943224873c2e90fcdc9499c63ddf446d4ca87c1c1efe90\n15928c90b1a9fea971eb9119ccce106857d8fcedf94f700cf34de03ca35adec7\n9fd79ea2d465262a75cbb964f64ffa99d230b7343fa1ac54d8abb4a21c1225a0\nf17e29d70cf592cb1f5100d0330e481c370f6178924e13a81c6f43b94b224d2c\n28dfc7b4d4b9c95709906d02916b1d6a7d5cd111eb0c74086ac1f15d9aae64b5\na7dc9daccd3c2ed2be6ac5f8d6ac9c9e70eddea1ac134dec8175b25a1fdc3f84\na194fea85267934b806d3384956959ce84e8aac7a119706b61fdb00712ba6435\ne8f70e84f399d06b90168c0fc1e5b26f618b0767424664c37c89e4b5cc2c95ff\n256e6b7693c9fdd39b02362a916f6f5fc19a84173430362596f59e4c6271f098\na6706b0bc2630d48d357c190e201087ae41587825415b572958a81a5c2f89f1f\n79557d86c0b7ecda4ddc35ed71f458361647f9e78ade57b1fe1d502a3bf21718\n673d1421880695fbdc4f913c6f584dd95d3159546f58b49cd75f6ccb801b7894\nd26c48f0f6911233c056189d50738a653b31a12df225d07984a140e95e77791d\n8c083f2342d1706a892a81af96977375d2f95d7e8b5207312286f919881e7921\n43f814470eea3bdadd08dee3020fd93dcb162e07f9b26997a1569feee19455e1\nedf38e5a37ae6f4a7cf77ce05eb75dbe446ed8197bdc9346d6d37800097b0885\n595271b36dab790c32d4b1154c3ab5fb04df0c9baac2cc45b2e7f3c871530ac7\n0a4380fe21c64afe24e92881ec30c00ef5f467cf43e3ea5b99b60b39a0684110\nb8e1df9a815c0a2713f955b43048a4bdd073d15c6dcafc4d421ddc76183c6e5b\n2dd53990d9a06058b370aa3ff872ba4a6812080a1866a2fec8f7148eae7460ce\n219e1627df1eabc83fd984cf1ae2a682e12649e0d5e386f12db42fbb3b025eb2\n3cae941c7cd68ce12c2029d28c14fa200210222ed09e8ebcaddcf384d10c5653\n8957d1de7dd4e0381378814585332d840e1aec5a50f437513737b08c03e74c22\n007b3b803d542e978ff10c57cbae202b3eabf442eb25cd5d86e1a2d7e300412f\nae851646e8d04d2bbc21452cbff685fb493941a352d572121df16568004e47ea\n208a5f27b1c8fceaed0fb421a0181547c4ac1b3259349b6635276ca01bba317a\n0373be80219d13db6dc364e21f91d1341ee3bf30454d26d5ebecd1fb35140b3e\n2a33b15fe27e189c01827fad1563872932bf2e7ba4998bf7f4725e3f7f7695b5\n98ace4af950f0d08469b569319985463af4992cfd67fd7d91327c38ad6b76cdd\n5e08049219fc44249096ba3c5b503d989844ea92dfb6f67cab05a36cdab31c83\n93ad419ce4609018b197c5e1116ec69166a0003e0dc81aff3a1b3ea5bf4461c3\n7c92d7a8658733260bd8251abc2abbb413f4f630734c89e4c306b5d814a73912\nd247a1f0af9cf52531221c065ce354590b5a9a37215de3460511acf32fa4f181\n2ad3edc3d2e60cb853105622a80429256cdcc0ddb4ea60d7a0c43e2a7ab632ea\nc0f04d4ca17727c65519f5ec551999f66a3963d435b73a6383bf595fca7151ba\nf486b1a1b4a17a14557c0bf56ace010216978c7e5546671407d4dfc1e92c5c10\ne6e1dcf0fccf6bb50bb5f9f70eef99e7a546cc887a053f9709c192c528a04ecb\n6810e0efde77f7345fd128804fcf1fd8d6152da3de7bc0b80730b8b5803606d3\n2d81d2c54e8d8c9bb972110770321550c04b8090ea7d9a3c69a5b8c891342d9e\n92f6162779ef6dd591169e9370a8087e33f37e63eb581b268836cb8cfd954c81\n85d3eb9610ff2d1fb82fa703be57509404fa614ba849203dca57045be6443209\n19baf2a3e59005c9477c3857254c205cb775a525fd2883ba78659f7b3712aa56\n3470a4e4fcc9d6dfc9bec668f4dfe3e4b0d6734bf3515d04bebf2f6043984583\ndbfcffac0e2019ee35be67093b5de42c8f6c9184b8c87f6012e5d5216c24a738\nbafc2697dbc0396a18183fceb1965c65428259dd290a6d44c66faaeda3674de9\n8a740570eaae745e2943a8bf44f333562782b5a0971b7d5eb3abd5f54630b455\n0ca16b241c532d92ed7053996d6928bdfa975c03074a4307519da07c2531f560\n4eb1aa98cb442af9f7a3bd33598bad6dc3d8dbf4e48f754386a78bb4e6155cf5\ndec39386977d4599a00cce76a0f37630169b2a8a183349b0677b733f97baad38\n83bccc62ce5b8656af930ca27fcb1b12af2ef2c2d4a0db1877a475aa90a6e10d\n81b4f7f633e69e455e0dcdca16c991a2ee3d1ae57cc9b201b1e46baff9b68f18\nd916b5804424fa91bf72276da0abd4869b22424371dfd28416335fa4c674e431\n280f9ffe2677ec57c9cfb9db44c88e587858be1d8f8ea8ea276c5dd166500b6d\nbdf495ccc08bf4fd630e7ddc090c60ec9b8deca957072fd89a9da58ac26990d4\n6d75b995142906c5c3c6b06782fb8bd33335061c3cdc2d74e5cc3b4e7e0ceeb9\nc92729e1481662617d822ca37a307a9bdd4abaafe1790b53d3a2bdfbd41be68b\n44e15531afbcb18fb111b84f95d89bcd5568d18b450b77cf49662b4a1b3cb395\n49c9637a8676bb153714d56571f3aa808be09c81aa55c010c71df18cd6840453\nc81b449d572b52d29bf19328f808b6edc06e213868b96d4bcd0250cf997d2dad\nc2bd698392c4a48c0a7149732e92f54a446456e00d03694decb6c2cf238dae44\n28ccce653213b76afb9631a11475a1a62c0c59ba53a5218cf19f336f20ac9375\naa95fc15c37e7f3663d53e8b0b5b84a0e5c95596f73f4411ddaaf5c1c8d5182d\n1d067c6be0ba970e33aa1b3f35fe6693b7d06e14e960f6e6c703be253cdb7cfe\na64bd40d393a8bed217a7189eabf1cc290007412ee2f8a16cef31f0fa45f6bc7\nab92f600c117dd1a0e26f4823433f5e840da98de06aebf0b88004d7341f40295\n8e5eb7377c1f6f8d685be3a3d4c920603dcc3c1c6f988fcc951cecfaa79c5dd7\n7ddb39cad98e45dd127e19ef968ac6603bd72964245e1e890b4c78ed620209f8\n373be4dbeffca37bef421ad3cfa31c95bc7629be283ffca44d3a6f5bc141b84c\nae5d256ee7cbcb5d544a7392a8c29c41f57f6130fc7e46a12dc73e913a5fca4c\n971124bf3120b532a43d3d5b395205f2611a1879454f7e82c327b48e4838c801\nd43658d121493f25671f7dbdb15e0edd0832eadd23380c9704b266685517cd10\n41b8951e9c33dfab2134df765b97b5971a7df2d87efdcddd8099659a9c549b1b\n3dc2c37cfd01d9efbad73a552546b9fd621de30a63b043fbcccfb097757cf3f2\n32bb2a7db54129315890488a79f796fa1f42e14fdd60c380ba1298d164300478\n6a720fbd9b15ee15201697c89a7c8885f6b0245126c4fa3de3bce590526b9481\nf5f7151cbf02681576222ce30bf9632b1bde0029569c7cea5bc3eec357543524\n343bdb4b0c231d1f4b68e85cf00bd864a9d780b283f8689c4c260668f25918f0\n67a1584723f7f15ca3538c1146cc4550b7e0c20a12783dc56f04fff9b44ae037\nb9824abafbf6e65abca51e25597d4fb6190c8a23e436c9532b3d082eee1f7d25\n576ab267123d180aaeb198b7c1fce3821838041fbec5591380e8c20391a25af6\na38923f665605e34a32fb1fba22753baa62d23c7d2a3dac38c544f41092e7a6e\n06637c1a7574c589e7943a68f04f551ae7c77231820fcdb03cc4cbea5c43485e\n4f096bb07306e7f401fd282301d9f7538c7908357fcff14ea839a6b81f448e56\n94c8eef01074224bb110688c21c208b022531e170ae021079952c96044770a2e\nfb2ad9652965a8509ff5306096b4b0cf2423d009b65b4d8888050373b9f0ad4e\nb4cb2bd602de157ccb2fe4a26f54623f3397b67e0f917771d035533aefd52465\nb14777c6d2b3de51de8a04668f614f77480758aede46ca821b0077aaff9356d2\nabbd6b13a3bff523f1de717fee462cc14afc54de700ef4e326deec5863eaddc7\nade1c6a0903a7145324b3a1038ba2989af8e135ece66157e8046ba06256b469c\nfe288a87ae7d18c96613ee6312db029b90fc370b0a15c82d7e61dd19b7062cc4\n4d13b89183fb7185f581c4072401927483f85b2dd1b5fdaee0a7f578b411f923\n951614645a50a78a38a6f32b05a481a54f9d8f1552104f66e2923cf3f4401410\n9e336022628aab9e947e6a4cb432f24bf2afd3989d48d905619e7062b71891dc\n750b389e9e7481fd80433db8a0d85bfbfba4a782abdde1a4c114740767c1c620\n8c188edf5adfbb8f68343bc5dce92a59de5f452384b83f4aa810400750fd03bf\n8ee6a2d0e570a661038ad1d76d4b9541bda0b7cb473b1416b360db548b0b22a6\n0d2ff4d67a54a290151052c5362e7365f39e5193bbc31a6be872540feb171208\n5642039e9bcb0a90ade728d7b88779e0a51d2efb42a9ea02e48a089ed7ed9dd4\n3bdfdbfa2a51201ed1519b4ceec89d03bce2961ba26ffd7fd7f0076f3259f491\nf790ddd9fbdd82e40de16791acdbecedf776fce9b3ef253c2de11cb7364bff3b\n022f5a9c96bf66ba00aa3e6e17a010a3c5c4948ec587f1c24cc46f16ddc2f1a0\ndcb4cdf93e9c042427a08e47cdc3c6b58cca6a9fdec329bea92aa3e0e6f986f4\n5da5728a1ef1759984bdc3cbaadb9cce1e1b030ee80c68cd309a0bb207fda8d6\n38bd476ee0159c5b70737697c9a612b3f3ed49f08d773945f03268f07d34cf21\n8294549d77271ff575eba9969c245310617b03aae1f6246f57e3fae2c370b5f7\nbaf2bd9d56e2627d88e4d773c4800b94e4f44793d29d6ced0f612054332c6b94\n9ac2180d8e4dc1caccf026d6a34178a2bff2efc96488f49c0bb2d1ec23fb665e\n7cf32ab3841ae4482908d3e992ae15d87ff2c573af9d4cdb3e3bafd4816bcbc7\n196444a47e02e34b4feba700dc845303196351286fef1ae5345e58ae55679aa0\n71ea69e68ea53fc07988af914f827b68b124602be0b2378e264026ed196f68bc\n458378d284517a26b75cf55c7544b4d2ee8af5b254b7b20eb1eb814ecb2d0d6e\n06a9e1c1ba3e459918442ba220e0b2f986f2262d235f85541b65f064325d27a9\n749ac8fb95ae5873d4392ec142551cccf8a348790f2d36ea0ee48b7239365bb6\n75c9f4b54aab4ec1264a43e9fe5cddbee5ee992d9401097b60b752a1537905eb\n93dc8e58ac22a6e795bfd6a69e0c695ddaa7846c7768b1f6cd9f7ce003550b1f\nb65769fe9701f1cd2a2e721af2c4d1f6d0051226f16a1b017c1b12534354dfb1\n8d0c434affbf0a47eba707310a79d6df91e68a6e0e9ef1d5b90a475c2f85addf\n2eefd34216396416d48e7872004e0585677771cb26d32cb01bfb908e7d8ccada\ne8813619ed33023c3ed8e30e9c2caba72bb6b14c5764a2d7524ba0ffdf01df19\n66acb311c9150b7d4cb46d2e8de3bea434297f26150902ac6de41e8fca298d03\n62f38f136ab2bda46bf5fa41093be8da2e477f08cb9a7cddde3a2eec2acb7e5d\n887061afeac6844ea5ce933165fb2e7d06e3e363296d8143dfab0f53c61dda36\n73e8cd6244fd04eb58f1c9c73de28745045620702b8afc35bf7d8a21a70659d5\n618a4b0f18c4a3199908770ffe29129f41f95932bb3c3265ffd6a660c4992858\n564ef834474c5908c87e3f48e93cfc62cc88fa7cf1d9fe10e947231f63b74b0a\n22775830ac1af768fc366b0baeb9c78359fe4767d4186d8c1ef799237a3036bd\n222209cb85f6c6ebc28eba5dfbd93ddabdd39012ecc79dce0453d0bc5365ee74\n122af8d88186ea05743eabb0cb2ba826f0546ea7204524ff0ee5477be9ba515b\n1f8b1670532f6028c3a725907f3a8c3185185550332b90a8d44456f5d32361c9\n34b7a7f40f94b9523c1079e146017c2c289dd7ab2d907cd30e58b11723e55faa\nc61fb6b0cc55f4a4dc47c1b4ff01d38672fb1d33e47e5d09e0c2ca0391fc4b25\nbe1f8fd50018bb9e0db3779f2ab036e4c1b831c191f76636ff3bff76aabce300\n476e0122ed54cffdd8130ac52aa9363dc0eabb6ebda1e77a68b91e0fdc08536d\n01916f6f15826f1fe6732dacf0cb69e0119e1fbe2c0415e06b6b258adb74b52a\n7e126d27a3ef564834298f0722d686f76290149c19124bc5fea25d0bed08cdea\n81905af28e74e4070131e18e7a3ad5271f56b5c3837c23e6a0feb11b51fb2cc4\n313173ad1457af7fd1c24a379445f23b7c90a70e8f54fbff6167840dc061febe\n7ea57806f34e4d740332984cd5095d762774c68581475a42d4a58a4d7ac43c5e\n21cab652a986ebca65cb1be8e3370c1225f9177345da66574e773a3ac1efb728\ne8ada71daf1d73288a33f1152187d9fe44bc68ae2726c39f6a2afa3c88fee542\n81961b758717bb63cb734b8fd55d85d7a9060d7c1d9d28eb6830a68238311eaf\n86a7979603b5477078dd30f548a72142c28442b32e7690ade18d96bf703a6c91\nce6ebf0f8a87ddc0e8ed699cf5ebe1dbe9c75cba9e47250f2079ed72e27c42c9\nd735ce9aaa89116780c1de3727935e4430e99f776819561b56a73791fec936aa\n43856a125d89bced348644c3f91d6ebcb5d7b2ff3a72d50ae135d5780e6ea1ba\n3bf610741595d94a0c711b998453a6c322b2bb651c81c09efeb3ffa1859ae2db\n5c4db3f6129c677d33e24e4ef633220a4624ee6a949ce80e4484bb154a968e57\n055a8cb32a4c9e8686c3bf4aaaa2c29a521f0c0c4637dd110818459443e23e80\nbe92bd008eba84934d1afbe27831b0afb4e526e13ffca5bb98aee53143c34b06\nb0878e8e437d5304c97f04699fb1a10e8f788d11e373397a467610e876896259\n765d0078dfa3fbe9f6feae501accdec1b1b1e091fc7a5ae263149db1aef53cc1\n70b7263fe4490ae5408d630687c68e2e04464162c552bbca4d5166ebd12e7ce5\n4538667ddf5bae827ad04d952a78544192b6ffb9cc739686990f4e3cae67acca\n337146410dc7ad7195ff8083a647467e8c39cbe52067533a73178c5a5605d38e\n8b9acc7344d832193c4b5f547f07e666bece10434771b306e4afb135a7cf99fb\n4c328ea20d2a22dc1a17f9601324eaca49977a989f795737d84a11a461eb4e37\nc6814dedc2651e51d7edb5906f370aaae1e9d8b6a786e3347eb64a0206cbcc36\n2c5e18c751af1c4a4bb9ae77864cc90c27cf67f124397c87c79a07601d46b502\nd5355a8820173304b2c7599ff5c22842db273f5a941317bf3ec4df5cd13a7a6b\na333c49b78dc33076b8eeb0cde012a1257e6a823c0b4ce86fedfda050d83c61b\n2602ba18b28a12eb8850ce04ca46c95a0aa27ced8fa25af61ec15136a1e9fd7b\ne65bb9709fe7905037dd6680c2ed25fd1c1e258dc0e079b1c0bebb4c96e3a436\nbd43319a627568edce15e74b5571b5448f2cadb4fe2241afbadb24f90d216ec8\n7c1bca8bc43cdf99ab78806d5685f3adb10811935c14d568465f760da5182c7e\ne0a2c25634b3b8efcd07098a138ea7f00bc08b613d403851346306658e06178a\n1545f6f197773678de21f5a8d7be26d5729d92114ea4e54df7a171735317f0fd\n6d79611212157bdb83c8899a59503a7886af884dc2697937c09276e4012eed1b\nb147490217d213b575d0a9bcbcfbb19639b22330292267c36b1d2a7e9993d5d4\n5d675a7268f0d608797dd5685250ce89c059b97a686880270c77aa1ceaa4f8d5\na373a0029a7b792e01d464ef7464109760c7f4ce41e6278504be5eaa9d8fc5d9\n36c09ea51f7a9aa8871155c5b9473e5186af63ddad940ef59e6eb237e1bfc68d\n21f6376b16b8f04b46d4c6e96d53c8e14e2f41785f2cfbcedf100a9481d13a93\n44f1a8418fef517420f035f70c0033505b0de0b473255f534600b2daff9c2fce\nd4c250adf25e1fd22c38e90d8c27df6eb519bcc3a0c8644f57af71854dbcb88f\n6aa37493a6cd719c4c0272e7f2e0f55b64c3d90ec136e4e0a1af6cd69ca74c23\n328513c22c23bbc91833e76de82386daa0bc54a55f0bc0a9c9f9dd37a5b452af\n551aa497e0b8a040a6955d28332a9e0877d5359f0d5d4dfae5983517de706c0e\n2b2647463a46e1ff7ba5b576697817ccf43074aff425a727b41ebe9b1c09fe55\nd683b8947282a523dd017ac22067a3fe6423d60cacd9882d917478409e702dc1\n7b9ac08bb7817bd84c02f698d6f3839eb0296bbd3c00eaa8f162ff12c3220e1e\n5736c3d5978dd6b161648f7fc880af2b28988b4a5e431722a7d81ea9a343e5bf\n5664905b5f6f59d74f9e63208d63c3ebac615b3e680602ff2b8cab55dd72b6c9\nccb919fc7ba52dbefce21b99594f159e48917c779300614411653151e0384377\n539274509a4f3811b6c9171a6904313ee7f1b52fde5638c81c82ac84b74c2c9e\n241e9cc553d1d386dd29d8bfc9415fdc8a9449ec82cffb12ade0c6d4ec299947\n4916db9b2ccb0fd73e39f7dc2f5f9c3577c2ee242a982687fe40b76594b63dcf\n94c7f6f84d965fb938d1e4cf0b9f693e37f820c5b0ac69a8defafaf1c8d23bca\n4ddfb21da955c550a77ceb34c52b207fd59f8aed6197f1a9c7f523b6de9ac1c7\na3d16bf7fabf08705766a74d9323ae61bab989aa506c971898729692a39852ea\n8ec685c3269f7c4206491a83503c9f6ea2b9f4646cfa8ce06df9511410f2610c\n45986cfcc9138932749a114202c1775244972c74d1ebd08262edd76401856a80\nf4996d1e379b7e07178b7618087fae5bf3a6ecb99e8378ab55fb43b0053b5086\n7453441cf966749fdc59dd356b47789acbd5a172dce4d7421471fc922c6beb9e\nab457f39216ad83012d682f629ab31147b29c5c85d0e3a5e7c30eb6b20f871c1\n8a008ec165a98615b30de91f44bf787aa7a58d221d520ad24f91ad7b9ff247b3\ne6e909cb515d3b396caa84ba9f7b803b04bc63bc4110cd283e9a44823d513d58\nf2edcab4ad36dcc2df9da533194d605eee8621a994a6c3413e16c3ba8ce9dfe7\n0449c61581bb436a99b4ab45de719c422575a2c69ab8b77177150216acebbb00\n3906f5583619121f9425262b44dd3fd77ccef640c7efa9c4dd9d813aee006f88\n3e66a4ab6c5048e15ef8aaecf79ce3c5b0c4553839c6f85a49dd497ee756d2c4\nb875787fb43469a2efa0dca4331ed0b164b94eac1ba96ad941afb98ef5765bb6\n28055424d97295ce0f7c9185cab0cc7b73acc1ea506bd111efd69f3c63012a77\ne387459969564555df03b50a5d65bb7535f8899bcb34f41f51167edffaeff18f\nf354e040c8b7049d587873f39565b67cee55ccc6adec1a5609834763078f2b88\n76ba9da5a453e5bdfc854f34cee03655f2236f5f40624aaf5b5df6004c578da9\n97c7def8f00006fbb16ecccb6bf7e60fb03c15517897906f6d2e4cc252ea08f4\na450bc2eed85908f822550741f3057666c635caf0d4c80e57c662daf3ec0e8bd\naa68e2445d0187719af4af90bbce1aec0733a99308fe1eb6383fa008e9d6d628\n40b015f61030d236416c02bd31b73fbf4c27392302893bf68b83708b795752fe\n0f1a079a4135509d768895ba95ccffe0b96571c1f6809babec5688920c879140\n540d853e858fc12ff1048a1b460d4a581d6967c14812f4153653f93d7d560e12\n6d08f335b16bfb667ce3b2d1c6f195ac7a1072d8b43c50ce40cc2a6002ed1d11\nd9e61b975489d8d08e210f5b8c3f5e3f5d6389821f8aab32c1b01307b4218642\nf967318a019534024cf4d76f58410d445e7d29e3c5752a5fd9e2ce0837198c4a\n111efdebe4c15c937fed958ddef976e7cccd2401a2fd79baad265701f8f39362\naa860758cce007c5df093841f556263067236b88863f96b308fb97fe877842ea\nd7a8fcc7ac7f055cca59338b4aefb1e7b9674d537bfcc6958cebc1146f887820\na95541d461592cf9e37fea1133b4f5ead77e1f2368a1ad2ee391b568c2e67348\ndd41c03ede53df2888d52cba69c1ca9eab24b3ace6f826915cdfab79a6e39878\n6e1b233d7350cee1404b4db8e944a6ebac16451e20400ea24114c8402d5bb16f\n95721975a8b25c2d3f97c18ea975c43154659b94f9261016a0acf8fdf47a12a9\n5ddedd88e338592ffe6ee52dd5d802e8d7b9d401248cdd341d89387207838f7a\n3ec6e39a2e3affa2d98ca659a126b3138b5dd1e64238c320f121f595975f7c2f\n45e0a83972a642e2d279dad8df1e26c15205e40a054c1f8f47e4a19df859e060\nec365528180f6e0ea211579ce90a83d72d81f8815200f0e47cc0164c7ea84e32\n5d7d0f0e7daeff099a2b80336c6f0864a41571ffa7f0f9c06b80e00305b5e6de\ne722a24b8ab8a8c842e3c5b61ac921ed31ab29dd1bf4172d5f736b9b80b8c7f5\n4d9b455eede1e499db9bb2f382839ef7922867c6fa734c2ac7ec010c6d6b81c1\n3354a59aa502f50325abb38b4be61bc2048bde4f525da48b99cd5bf849f8b002\nafdd66de45ca6cfd1ef420a3d506cbf51cef5c033bc23f79516d7d6c607adee5\nbfb4dbe6a752874358f8588dff6fb5eb12604e1229663fe5e600043a2230311c\n2549cac22f85a0aa464d0ac9d181bc4de118a7c0d3232a553c80ecf9a5c37a4c\n87818445427fbc0d8c57e2871bbd47ac1a0e83dfcd8a87fc17962e80c6c6fb2b\nfae3a639e4d1b526aa0f3109b23fc50e831c3b790d7f5976d593db0db861d4fe\n983c5cacae717a660c7a7e96f097f2a35bbf535e25627f270d305d1d0bf8bcbc\nca577cd64aefb186bff79ddc6dd0372c2ed351da16aa4f284047cf2f34f18e75\ncc6787333047ec7fb6894049f2625942db647417729d726c49814900d9f02085\n90b5343d488be07fbd18d5901facce3d0fe36a0902d5291a706d0eddf6012f50\n857d064f1a9ad5325aa4281f95c553d7da4d28330ba92025ba2de11d2fce5ab8\na140b0c8505d5b70bb175fc2b95e612a785191dfea6d6759d9897951d8372750\n161cd05c623e5789d9aa4390d883779b0d9c79745cc9c9fc4610609e764d236e\n61321979a473005ee8c9d2df23d5962f7fd1b447d580b9b4ec19baa44e14d1bd\n0b62e7142cd43457448516bc725c5b714a2441125c58af63e0df29a3779953fb\n81b8abe1bcfc5bc341cab609ca0973bed1a6013a48509080851b444d4e64f378\n89481e4e2b55e39e52046ef3aa1aeaca42e15f59845ab9c5c0889aeb4a672d14\na5bbe9e566056af5408df596a0d950a29c88ba5e0654381ad22af59fcd95ba94\n396b93119c1eef03566e77a09d2a1dae2e89838cf076f8ff1b8377be1e042662\n38aaed91672f8eb1325f1fe468886ad383489e1a60b910148ba9f905cada719d\n461a9c066d3020ffeef74360b07ce1d814a3f6ed7c272fee322fac716cb01bf9\na230c885d1aec213d634824d6f986c78e5565a3ef4a6b2504d4795b021b7e3a9\n245bdc0c8a41489a96310a957dbc82bf114800280c8013af0c153faacbbbc020\n52b88f180f6f54ca210df9b551c6fda21344b05caccaee651f008e2f28de5aed\n5a7e42dd459b3ae39bcd0977e7ba2119a7a3994109dff489fae509b5cd1c8ae3\n12844f0034904febab7963ad55015b9c0da446e794cacb4b7481bb3475f8238f\nb94f136741c4dbeb2693df562beb0bdabb35486a62b0582a616f4e03db579662\n4cb5365cca7273244c0543c9b88f8352f2faa33487d6889285b08b10265440e8\nbdc3ad9efea1cea534864f390ba71e19d892a24befde42ce42dc10e1a6c2d66f\n13bd4861a718b8ea0eec18cf3e2e73ffaeab593fb6f821c81ba9481ed3c518ec\n65c55960681e7b02cf4711709704f9c7d6d6cb7d0af7cc878755f3654df3d9a7\n916b125224380ceabbc611577835a8c8ce838fb6fd0c7c1ef7a6f182e77fb8ea\n5763fd9ac05d7935d85f2a66b76d98abb3db4927beab67022721c708fc2142de\n0ff6ce5d1759f90c985e53e594ce9bbd8bfb1479f25d5fadefbae1693bfb870d\n877b09c348065bf755a3f94ca1177cf5e0f9867b7afbab5630dee683c4014c4e\n11051696760877e40f58df8efbcfe4b5b2f11794444559a8828e482e0b1fd108\nbe763cc7a59f81929e5f244333313dfd77e3b10157ffb9e7bf8ba78da5b6950d\n00d5b465c7b8521bdceb7757e28460969adee591946c3b9776f09046e1a3c89d\n1fc33a1b92e4b86c283e5640cc83e1ace06ee6a3dc27e0eae9ad810ac44defd4\nb8e95d6fe1d9f643c0c461a2a3ac392eaed8e8fe5f5e8c6e56eace4e9072214f\n991a769892446edf4b46be77c8923276965d8e42f91614adba885708719b9468\n5b21cb377802551608a6fc05a2126600b5be647d84632d9b676aa18e4d4adb77\n445c52577c1166088d4f565339fa93dcf6af49e2626f8fdf24427459a65e37c9\n362c873af0bbe44688c0782abb02e4e7f62ef9136566515ae944d7e1a86df46b\nfee8d1412383bd1f2ef05a9337d4cfe04f7843d118d67902b6ed12c2f5ec2d9b\n8a32c7340acbd1502e0309b282fe6be8d588a8d77da5f5913fbe25d4862cb9c4\na32f10e0b3e8b1e33a08b48a8f87b63bfe77299a7fbc606eed2f0dde20380de5\n45be88f6325988f60634a9cbdd510172a744229fe884ada9b6199348976cbe18\n45b60f0141a27b36333ed7cba6a7178def83e2765da5bd5625aa84a7b2fe2ce6\n5543e7ea2e106cad4c58f1ee31802ecaac06897eabb1cad50ac2275141e29efa\n25ef04962123bbc472175d9a1fb1c5526f9667fa32840d3305a07b37b4bd1c8d\n8a10c057b9b44732e8b452cb9ef161f4747a376bc34de0ce1247e273bad1c795\n91d75add205842b56bc016e1032bdfda5ddd59cf52b6366c18f31380343e04cd\nb72af6f735f38961c4f149832eaef49202ac2f4cd458837db9886d564bb4d1e4\nfe78d20882d6616ebf9f95d4fd90ca291b62f2db006cb462be94aa93f8c62f7d\nc43910a0132a84a4c07fee2aa05fecd83fca08f6665b9a86823481e144e38fff\na096ea6560dc0ceffea5097c0d8c19b3775e10bf2c45eb9ff4d32625c22c2a30\ne1a4da703e69b640179b1c0cfdd9ae84bafc8a955f9cd0ca536a33d441ba1e65\n3439982aeab578821354f4717242ab793598bc01209b16e17cff4b44df6b61bc\nc7aa2f3d616b9f7373977e507a9022d781182c971fc1817a4aa4314a7b99b54a\n2f7affe02a0c77b156e082a6d7e06937bf50437af4c279f8aab2e89c3c794525\nae6eec1f8ed02b1518a39d24810e1b1b56342167c3fe487f8841ba1728c6b062\na93a48acaa9652e9e05a4005c0485f180c868aefb7c0ef4e195a07759b765aa5\n932a1eb8e03e282f8e0354b817db6e08bd562fe7a79162eaa08418efecbadd76\n990f0ce9b5947ca5138ec811c8637e525c01b3e0cb517e00bd556e32148cf5bd\na8b7cc7f7adca5c45db4e40902a68ed130247a5d735ae6b955a699f6c499a34b\nd2a26a77b01fb53f787005874d6c74cbc5875abfc4ee6bc6715d160dcd5df49d\nfb1e69d31534da4ef2c4869fb9d872c66e7e9879d529707ee414eea66ba69f54\nb6b2a5c1fe764fda1d7d1087b2b900b5b3aa1959321a1505b0aa709c70a4815d\ne7ad7d14a37f1d82e4e36f33062fedaa3536c8bc21ab8162341a286d67947245\n648bfe3b4d9c3fc156a1d188a535695add00a84c868d93a04ce3dfce5081be97\n7dd5a65f674e2bae7ee174169626d1ef469e1157e132cb29001da093e1aff1b9\n5875ae9804748ad1d1538823c57991ee1615fc624fe33ca1497146218ae0e27b\n3de8d5d9a489dff8bb53f00c8118fbc8ee4d6d02639a015a21b81f549ec8c504\n7075df836d07765f45ab840f0a3443055de480dde9c8bd111e20c0c2c5c50192\na81f1a3071338131bab28a4631eeea975941c9fda0ef03ee7ca55ebd3dd20e3c\n5cee8996e044f9ddcf5e0682215fe017356af14214475fe6ff22a58b8c3006ca\n53a351253dbaf384f2a0c29cac3da0b4484159df1a4aac70a2e57ef9a623a132\n7c2b936312f52b360ea792cc68021e5a7408b00cfe1479013925b33ec2a520d9\nc17efd0d223ea60425ddcbb117fa75fc7ece0ce1550e3d3fa6a6aec57a2d2399\nf19271b39bbb92fbe8e59d0485bd2b1601d0f5ced636bb8a15c643b27367bad3\n7f18a6e6c236051f4eeb0fa48890bd1d430962980a0222cb134bfedb276bd0d8\n4e5d7e38f2428fbd752b05f12ace3075e31ad4a4d572318abc7d888c1ac5df3a\nac240fcf1ca37e7a1ca22bba05d3248f5b1fea2e0968dd438eb7cd97665e83da\n70dea0cd94bfbfb5fba03144bfccc8c0c06ea19397c7be82837788e662606b5f\nc9e330b753980c9036e93e77e00e968f94915ff55d12bb6d1071d90377ad4bd1\nb60537600314ae42582ff4aaab236a8b5a4a8025749014465c2977f90cff3fd7\ne01b3c3c79a6bb1009d6e4a403d31668142bcdacb63a60db63bd1a2b0f99a2a3\n0ebac082250178b0104469c36f626ab1248d44a9a2b8670b5b63d7a7f430423a\n232246759edfd2bb106e067461ed77153f7ab6d79ce3c9589a51036358581062\n3cd58c5cc651f40e8838b684f65c09a945fed032efed63a5e4499129264ff25f\n6663435b49c0b988f33be63ff22009c85b0b088e114c189cf70e7d0a5673000c\nc74ce3d432ec454b3be66c700d93ae69c6c53c69fbe681731bc0b508f62dc4bd\n6dde2b1985993a1d06d9afff8807974fc44fb45c5d1104df3dbfaf9d83e8d664\n9837648dd0bbbd7d3643e5f59acf57eca887f8a43ba98cb2b8e2e3c02872c70e\n29ee7fc165c890fe15f516a4701230ea3e3e9a3c0a21e05ab71382af7278bb16\n9c95e5bb7e70b4f0a722262332acb7df42560c9acd835283469967f61b114ba1\n7e1b29a4e851a36255e36b84e00544f92d8e8595ee847243c02b4dbb8af5afd1\n8e7cadfd9ffab8cf8c565eeeef57904fc9e6c74ac163e39bf7a7b11165ee050c\nef1eb8522c851a056395a5c9fcefee0655fae739eed7782e6dbe742251b19a3b\n6608727b46060050d108e0af2d2618e6e3b41a0df0b8778e57a6102875ec1ea8\n90901e138b1d675d2a01e4d2e3f83f8b658e0a9da2ca51e44f4d30684990430a\n462ae89523919d1805bd3af12e9497bc680a95b1550118b464e79344cdc220e3\n405a652f072dd6fb8c0b8c02c06dbe55c0b42a2e77a8515786a90c4c8725a2b4\n951f8348468cddb1404cd840ccbdd304bfc62c4a07f70e4927e6ae98f96ffca3\n1004235a571758e6956efd46d32e31a750aeccf779578f738e43c131cc807ca3\n338c46badb33d7733957748fc74b51ef22c13b018331ed05c2addc8b723c668e\n0533a6b983e5974e9af9f2b16b5152a4a4429a5060d1cc29788436e18b0c03ae\n5647eb8b132578df8e3776201597e6da18b55162be04e9a08ea3179cfaec5873\n3283b6d844975abc8cbbf15e7432541fe41c7ab2b59ebdcb78a987234cf54c17\ne1d3aacb3dc26d45e50549abf8de12d5410e90333e6984befbbebdcea94f7db6\n3deba616b24dd013c3586ca0c6c2c980d8cdec2377246ab97e968b2b6b2954f0\nd1357c9b6bdb9ca552e4f74d0f370c3301d7ccca9973e36d5faa284d0a7e4686\nbfece1356ce2efe1072d2cb25c2cf912c74beaa3e3543384d2de41bc9acdb222\n743e1a54fda86f381d2f243fa9c51bf18c885bffbe32b2a6a2e3d883274d5319\n1bf841f3a0328cddf5b120856ab45177875b711e4f55dd2a074129701e4c5190\n428ed996562ec7b33161f8d043ad357eb007f88922518e0c8155ff9cf2087783\n4d876a777511928cd8d6fbce99d8910e40fe150ea31960f0932215381c8ea903\n07140f74313d9d6fc2131043fce65c5750f0bc1b7e47fb5f8c73609a881b803f\n98f49e0f7328e4a2aa65cfe8db5d7451c869abfa5840ef78d427f0894128ff13\ne2d40fd97832a8c54463ce6673e5179b7942b4ca313da46fc984ad3f055e4403\nd721c36c8eaa781541a7f50362683d0ae21d1ca8cbe77ae938f4ef6d254416ac\nb27c310e51f7692479b2c2e7b39802cfad847427c03795db5d3b7d97ec066eb5\na3b7adbf9dd66f73567c9c39df064715a716c5db61361b5c2df5a797f9e31bf9\nec029b666d48f3c54e427844d510839ef14f628c3db0e2e1eb6e9a86b6978cf2\n8e4a53b5252873fcbcf7f3e571bd36fc6658f3a5d117fdd06426c07d7cc670cd\n753aae52eae16a3185525b1a3dc18c04264759e36462398d7e7e0ba9b609b2f0\n2e7cd5fb1abe7b8abc64d8138a2afe08f9412afd4b98e212ad958bf12965e619\n64f121923f5485c0c05bf2e8814c89f04cffaee2d1dfbad7fb679e1d3a3fea65\nd46d564cf8c95cbef0a7fa59b9a6e46c455d95d396ef2d89462969b30b43ae0c\nd395ee09d0602c66ca6169ba099ef54202ffb28c5cc4a528c30f9f9ca910ab46\nbdf9ebf91b238b5db3929dd1b3f21bf8e4d6230abe740e882ef877791fe62322\n3c0f553589a19ecbf5ec49fa283a3818591f8602bd2cf8a081a64c920a3a7339\nf4c744d91ac5c6087ee7963ad78c6c7391c0edacf2c4a4647ee528f9b052613d\ndc59f4e6f065fb2c5a8d22f8286c8942eb145cfb9691c453be12afacc93df77d\n744b6f87c5bd21abfa92436ee65e8ec1a1fdf949444dff1055586d05e9cfd2f4\nc1c5848b014ab0489f900ec674eb934aeec65a7bfaa7d6ff77d4e92d4e219c5e\nae149f9a620b17def305d5b46a08950d258b05781c790c3c5404a004a842f8c7\n008494c5598c8115247c5afbc6abf8ff39f1b26443495eda2f840248389b972f\nc8b5d508aa450ce60d1104b6044cba2aa07bbb0aecff4370d643d22f0a66cb08\naeb47ea20346c8989d4f8b1bba75a1950ad6db6c60ac2726b35d3b5aadb04901\n97755dffdd498e9fc54d322c041f7e69211e06d5f92ad4fb1605f7ac4a36f5a1\n98d9c97c429342355c2cc990769626d5051d298bbbdd58969aba8c1237a78c41\n96f2367055a46d6c31795c317c67209c975c94513e9176b44d873bba66b0d975\n19e973e1738ccd2b7cab053b4ef7b1e5c0b5f2104f339c480953ce05a49ffbe5\n3149da2ebdaf47ccfc2cac057f58513c0c4b82482bb0b7aa0fd58f5691a871ff\n9b53d2cb0bd092d2b63ab1536b522d39feed0906ef4bdcdcc2cc4c21a1e7e9b6\ndc665503a15c7e7ccee7c039470b584a381aaae9fa6500a38074daa357fbd746\nfffddcf9d56df90660387d0b2e9baf9fc9f1cbf3595f92703e776fbd32898206\n61df55696ae256d1c48ec6a3c874aa81cb9ffbe8b3b7997c15744a0916a5a4e5\ndd759822dee0869fc218f31cad84a2dfc3d11114beee3c161e1aaec661995dd3\n0436cf7ae4009015790a5fea7a9fd8a31e963f661d9fbe1af16666328cf741b7\ne9a493bf1503f8fdbc7c2befd4a92cb0bb88f7e5e09c8419cdb25e9554bc54b8\nb4ff1fd0d24735b2fa1acc00a62edceb3d6212aeb071ec4565be6486535a82e7\n16a58a282af8c38a04862c6a62600f957188a118bb365abcc60be3f319d4cd8f\n8c39f5d1b6a37335ffedd8e83d6ac433960be6e72fb2169daf1b37703e2ecff6\n74fd1bbe40d42b89aabf3d97303ff6038ad34b34d3fbc8dc4dc17134d436afaa\n4efc433643891c24b2c82f597b0e7f6e3ddd230e6e46115591e0ce37bf0b6570\nf7c5fdd27841ba05f6093777c8f16763d3fe33f1774caaeb34d740ca66ff9f3b\n741228e435a48e8728e10a029e61dfd22dd60b76504a0da2df7e05831a1aa1a2\n71f928626393e1c65bf4cdb471a0a12fcbc6d28b2d5bb51875a505f9caec67c7\ne9fb344c92a3efe246f4190605bc243524644db6c03440a7fbd9420cb5bd5d45\n865132b52aec7f19cfc212585adf388ce8fd3b85181b009a9a2ba0d4a6d5d046\n73dbda91b2038eb39b4ecda24f932b33d3ca112748206f15c991aae3f745222b\nb6a51bc3897134243a22a006dbc432c00e3b008918146bc49ca27cce9ae3fb34\n3e684ca188c3233522f23e880a462e99bd8f4d7f5fb1faf075e290be2d8897c1\n2e578e0aae723660f88c1b5a8d1a68d2cca9f80e652a76fde446f016e60de2a1\n8892839936ff385a8018441e993023c1b0f63c326e77c45284b1be877b4c7cfc\n090cd2e86a20490fa23f477e86f3d045bc74f2ffa2a441c608641455a3a21e3c\n63ab1ef26219ee198d02ab650218f1239b769d0dea2c94bc2fe7c237e5bba7e3\nd97913fe7bdcbe81342219b35105c808076971017be1734cf6059f5fca481882\n4ebea50a382044b96372ed6467a1aa3605abc889bd40cabf805873cee42ef2cd\n92665af9a1c50cc531136c91bb2b17dd4f853434cdff6b379ec4383bdaa9c706\nc66c24a5f57bcba69cf375eec429f7a0f59634019f2b224f1d414e90477e05eb\n7de38a22267d7147e1d880bd05f1444b9aad4da90067006d4ebb9f7c3aa8a3f9\nb17913d2b56b9c16d92d2be3195afc9773524ee4088248e71de06f91bdc858e9\nb1f7aa6894fd2c0e97c4a77355e825d9cb3bfabe43fce4d64f7e9d6b8c74a97f\n532cf8fede7a4a8853ad07912371cdd9d78523c62adced0025944601e02a95bd\n44b147b355a31dd1fb35ea2aa152e52a351e74cd860a325b4309309612ba0e7c\n2636ff5112a52cbb8256cf537cfd7030a6bea1841d4c33f82569d0240911d153\nd1d5da41b61336762f70ed8ceaf9caef5af83385782ea4e9cf85344d86622963\n80ab5633b80826da9d3f3225f1284d338491c240e5f78811545db0c5431982c2\n1cabe4f206121c0882a0ff49908cb0a60815e22b614dfa17372a7a9fc48afa7b\n28db0af1816cc2d1c0f89fb6e18c86e7a849fa837aaf9809fab92f2b28f2cc2e\nddfccc31fcca1295370d34b6e0acd1034ee4b7d95722d45b1195ae09f46432bd\nb25e870c2c46bafa1d61bc1ee10fc28333af358ac11d39f6ad8cb2f4a184f48e\n4b8422e64a55d346e82be62c50e74c092f8fbe320ad008e5dbeed50186d2e3bc\n432152d95f38fab4b1a7c4b5cb6c924144c056928da4f60f88ed172694dab9b2\n83ef92e62906bab03a5b07e5e0e3572587ac771e8f7d6022d7f821494415c244\n19d752da2c8101b1da0b3e8e39ba22347643e549b81b0bddf5b6c43ec8b80db3\n5c107b7c12b77c9994360ee9c1ef243e41bdf97ee2a5e930e75b127733f5611a\n5a5d418369d89a3cf9a2c8dd3a61808c8329e37a2901fb6d96bb5482a49c89cc\n5918357ff901189d2760afb7ea71636fe212897481d891bb66375d87d98aa320\nbeba9d5eb4b2c742f8fdc031bb571ce73c99b2e697ae91764b53ec680cef3a91\nf3d6d662eb4abbed7c7671af59a0f7019b3dbb6c72d1473d69dbbb00786d69b4\n39aba3e45c84aed07decc7ec4611ccb146b135f92556b594468b6139e6f59a5c\n2ae275f970f736b55e5c8a20a9873161ec30cf7ae7c1a2e61daaa8310c0d8f82\n705673885da42e360d1594a2c2f25359f6a666931fca6bdaba25c25d5db5e649\n1128fc66f8f3aa3ab07ad57a1ba6bbdbe264f1f0885c15dca646910aace9c3d0\n01e466f128a7a92846c544e3838afb98e480e53fb0457a3e976c0a6b831e28d2\nd51dd22001c93e25da4aa99ad822c3174d78ec4a833cf489b9ffb9814d4b1876\n850277ff0c9749f1b194ed7f16b7aa506c213ab2cecf031fe836190c5024cfa9\n0175ee3b9b9387c4d1e76ab2c77406dcbb0e3378983b688ae583c1b476d8e243\na2d8f00ddad5277b753467959f81603db2cede11215bb53f7a7d379e670bbd59\n68c2c1ff4025cb92e87e1e3d6543ac92b153e24631645065994cb9df4e45f716\nf64cc5b364accb7cf05e53d93f0236813f60f36860b14ee83af7a394f27f0198\n0000ad844984a2ea18de70ab354baa678ed437a78c48d82f7f4de383659227dc\n8bda2531a800a34e3b19e5ebaaa71b3f17b665665c76c2190795a70250dc6a85\n5c27017c8a7e0768b01c979049080abe5c03dcd3f6627af8b561790f8ab2d9c8\nf3444f14f173016f4066d165cf2d19644d3b10cac3c1681af093010d955f4f05\n18bf0d4bb15c83db373079545dcbfdeec54e4df1de26bf8ad49393c7d533079f\nffe87f1f5973571bc2f3c26740bb3edff596e48f7027b610d8297905a7702680\n88828d4733a63f54f183312cb2036fbed1df6eb0560d8df038d0937836ac6835\n861f8e4cac607688d517e5937385caf9f9b96e08bf9d3f83705754761295d8a5\nbdaf8776b31f64b2c04433eebaf19b15e46343d3b879956cf2dcfcb3704bda0e\n79af14d781ee7468730f697581037c421e86ca93673ec7cd77dda77fdaba7244\n42c629d682dd1435a66aef57d63c6c5a93794a3ff1ae329272d6e7ab1f1e57a0\n800d1eeb04cba7aeded1d4ae9fbbf78d7d38f7bd31e0b50b2521f61ca3bf4048\n245e98d27b439fee588924d13dea49fa2f53ad8581ecee20e2a8fcf74e1f89b3\n480172ffae755dc9ef3eb30995f7ef3ffe4b73e69968055785ea9d9562e9fab6\ne6414c1120a42e49562b78e449cc61c5eddbd428e1f63f749cf4416a836c2018\naf4560c6071f610b958f9d4176c81856f8252f0b3ef625cf247577e401a185b3\nab9ffba5a763cd9612b877a52767f1d01b73c49961085d86ed3621fb1478f16e\n226a679bdfa7979593ce92fbaf5c463ad163fc1e7e67e7626efefaed16dea9af\n198b06a7042b45561be8c69ce85f9ad67213bbf589054c5fc836be20a3eec5ba\ndf75736a682053bc4d75f73ce5e6168863ac682cca4be41d7845d5cb4883548e\nbf36d20790e8e5445df6283cb41a86cbd3adefaf2f51cd58ece7fe55e32bbbad\nb4d6a962bae556e509ecf9d98c6bd490cfe636dfd437082346d093c0f89313f8\n7309c697dd332a4b82f340a129027bf504b32e9f711a3fcfe1e300b794699d7d\nd45dfd89e61a7ea37371082923e76aa992a3b57f5263d7ec4a71a8e06bbe88a7\n598aa6422ecbba39a6291f940f51011de5b884d96aea72b32feed89d03c55b2b\nc90d2dda93bc6d1d72871da9b51b0df786983367f650eef5891955d1e0646051\n223818c24383edd6674a362647c7f7210bc045954b5c1d53d4e98e94fe8aa214\ne55559b115dc28af1764137d10f127868ac7409719f3ef317f75bb418bef8b9b\n71190940603f44a7bc6ae0e03f43a52dcceb93fc4ec6d63409f86f73cd9293fb\n7a36c3a5bd854c1e6cece0f925864e6a17a9d3216f8214817b43c5cf5fbc6fe3\n03692fe1b142b382c561cbb9018b219e2d5e2e03b05dcc6942adf50f06ba0722\n854926d41ab3225dfc944f9f1b42d5da363fffbcb6c28aa22e88ecd634de217a\na7166837997f10129c1d4877e00d5488604b15a66cb4ed85ab7bbc922a23b7b0\nfea6f0621bb5e57cf06cd1e56239eb63f6c6ca958a94edd192efef4e96ff0e26\n9413adfd109a813b39862574b09dbc78e357be557cb0a5d7b8e259954a07dfa5\n9b42c9c82566db47ec17091627f73024131e629abd79f804446f87f5a956e94d\nf4987ec8e2606036941181add7ce236b005bdf8c52ab816c971ab141579fd9b1\n9805e8f72442ad9afe690f9574c1e749726c083f6282fb206a9751f40458cb38\ne0e50adb0fa1f67ee19aeb79921c6bb1de4d55759951952e6db0edb8036ece0c\ndea8457564631deef2ca2a3940e30114f73332573e602fc74d97b948a7b2f66b\n728c96091d54788bbc995ce295088665a31dfe4f1b8e022cb7ef0b8c851bca66\nc4d2447610ab2f8de12bc955142d26ad71a5dfd38681f3a0591e1854ed535f49\n53486d7a7b416ee24a4bdc650f0bfd14871666081bceb7a3a5417dd52c115f37\n7a419411e70b7850fd2904bc5caf6f2aa9f2d63a4e16d9f8b09fbfe5f7795fe4\n61ec0dc2da6d59e10b367d7a2bfedb8714cfa199ba32331247ea553dc686c14a\nc707b4f187d4315fbe021904fd8cdc487bed06edfb44d5325edc400fb28744d7\n40d1229541a870d002e99526866b7532d6af43c82797255e4d367a1dc2971f9d\ncec641a9f09d2334c9d21edf7fc3cbe5302104905febca894defee3d673ab1c1\nb581f91841da7c3f6e3cab8051c57c1619a1863be9dab596c97f7055cf6cca2a\n4f008b8772ebc546dc5f7c10b89d7b211d39f6d3717e5ee30f0e22bfae00dced\n67c570a34d46b0cc0b31fb89657e5bfcae894a0472555ece5c93d41ab84c112a\nf40f1a941e51fd16d7e62539ac3fe3d42aee225ed18652a8301d72a4873d80f4\naccb7652ba3c68765fed15293795b3063334f67626233f8dac67b65b9c80ceac\nd1c9ad88b9c943463cd64b18c3fcd6869176254b2f23b35088cebb46add907b3\n6a800c20a180f0fe119a448ae713d17e359725bf5d859a348e33e9a32ec5f1cc\n9f111fe3770fc6b6c42b39620fc8d12ad8aa40e2b0b572ee6aeb01db2698b21d\nefe870a04be8d780399ab2e82a6caae5a6637f5d4f89fe50d0fd377005f4d514\n9c3a91af653903c3e7c4a6221b98f9ce74a22e72e3bee031582bcdfc9f7cad36\ndbc9b735f615edcfb499cdbc28f3127e2bcd7bbc1ee51643b49f3bf88a791df1\nd5e8460e86291c74b610eb7d9285f740325af7222c1e436a337a2a6591239bb9\n4e1daea7685c598a89963b5b84eeef8f1316dbba72bf4e37d752c0a88d031c39\n99e08f2c7af93a8b6d33f149dc699f79dacf2aef7b5258dd24e8047ec3094d76\n44d1bfd65247450b7824a8df2fa8d8328b544b62508ad3230bba77ea8c141112\n5e59b59e325fe83cffefa647510956fbb669e03aeb7a6394d7857f3284089bff\n42648498b60dbca173f7b1bd6b38f30f146e88034ee9b1a88cc78e24f11de5a9\n4c62ccb0e8c1520ba4b09bf2e18450c0f0074e70ddb8e12f53f3b3b72a80f445\n0b1f8f007d4123aeed467baacf1cd68ca86a2995716c363802d3dd11826fb19d\n8ee5dc41fcb05c9a42fb5be36c99113da155df9bd1a1d6cd5fbfe976518df999\ncc807c8f96ffe38b33c70745abf4061b80436657d5d0fe3491383267bacfbdf5\nee391bf5d2ce07dd40737847a4773d8c2bb9fd97cd167a98256a48cd8d49bc7c\n3b82943c5a18b029775e519154c0f738d9dd27ab3a8a9aa54b5a623d81b79678\nbd77868478087fa2d01d69d8194019c7df37159c0c955c0997552487f9caea4d\n801e4ffda5ba8b1c5e286e636b3b925ad077b6c3736e838b62db74c44d18d42c\n102f1044a52b3f6aabfe837304488cd4a7f4bb180081ad29f19291143f171d74\n0beaf90c5fad4a34cb1e8544518cbb0c906ed62dba904dc075eea9d616e042ba\n1bb6414eba1d6c599de141773e9be2f6b80deb92592061287f4e22a5fa3d440a\n86515a468f8166efd085b9d48c193b262217f10d1221fda332b45314e189917a\na9e58aeb016c8be4b63ce93ff13861b225550852dabc50fc0b8b55b8a8799a30\neded52a1fbacd7eada4e73d273bf6bac8d34d069224e6fde5615473b377e55a9\n24a626cba22865ee57aa15f2ee76893efd5b3cae7a4db707d65c78e034796373\n2eb2d0bb1528537aac9f37fc907a80f300ff904b06cfb464a6e357bf4ad14ce2\ncbb004d6d09b2a1fc445c297b9891c87776303d5bc4f7b57c687d10ad11218cf\nc767ae040993a92e62b252c28d9e960ba8aa03ffe0998b87456e3560b8afad25\n5dcabbfdf73d7d88a69d0ccbf0ad078d98f3e76a0c031149fdfc8ac9ebe9e7e5\n5bc942f5323dce3533bac5bf749096c7d6bfd308e688c157f23252a1e699f213\nf81f49060e3723c6da5147db2b6f6babe97d229ddd87b2468305191387668769\na56fb1fb755f3e70782a3b1af9998eaa3d9119c3b00a867241f6f896c928aef9\n480ef59a81ee88c62269a65d0249c2fa0f8fcdff8cd23186eafb8c52456594c4\n6dd20aad4d5a92b82e552a0a2624494b3c59935209ee105670d3a9a9fc6823a0\n4953c0b5c68c8d39973791109e243053f124a3f43f1530ce37f262d36ceccc78\n9e3f3c5780c4fbfd5de919db66271c528dcf7bfd275c68325354bc02fcce61dd\ne05eaf1ce5826bfce074f478041ea4d3024642042f7522f65467c6978045c9b7\n1731ccee58a591b02890d1065a2ebe4b3d0ae857b7425cbe5690d32013c8d868\n4f5c1e10f224d430e0f0e397edbb6406e8d55b12496ecc2897dce7b3cdd31cd2\nb464429dec6b61095ac9f91cf942cd8114128de0188990941087d45cb6dd3551\nfe96c002743fcc4b61a52193f7c9b66a98b917767eaba9c664fad69a152648d1\n04b9470204061a835d506a0c72ddd24e313b6b97eac5dfd14c7d77dc5e60fbc4\n3886af76660991b8710b997b41f784b53dc026c45f1a691249c9effdb798ab21\na9cb9512bb6535defd3281decdd31490e1e905fc6aafb4945562e66b83490268\nee9b465882805806783c958d1c0d03411476c5ef29f6f17334d687d6e1e1c88e\nd0edcfc2290a6d55b642876b29aed1cc922fafc85a308dc7dcb5dc6a91811dfe\n5a6b254f25810565b2e765cbdae5f31a252253e1c7d74ccecf3692581ba8b00e\n93688d8ad5e4ad06c0a2feb689d1bd4257051c632d1bfdd0e1b69546491e1b57\n4d952af863c2fa695a8590c98157fb02a8209c29cbf223d61b9442f9fafe99bf\n70b208a982df1dcb3a688209e03d10b7ff5cc3dbc0472e9cd9af762678019a36\n0492a59f8662927cce598b2a9a3737a72160ddfde2fec825832302b8e128d612\n4a97e53757e1e34b25ebc5455adfa2105658ab328087718e67c157336ad48796\neb601d439393846747dbe34150b906411540fad9ac4d7c293ddcb7b8b53d6324\nb9e65dd68859fb70a71e3f8420030c5ad5160b3285cc13409b0dd58eda2c2f07\n2cb0868a393a134a9560298659c9a1661dd007b053826210edffcd291c942ffa\n40a3e040204424d2b0fd0ec50ab91e4d07c64c23b5ea65f9355ca86a0ce4d10b\n61e7e9f63463440f770efa4251ff5e55c7e97bf4e8bb164b8e69545668abe4cb\nef9a8add18d2415558d7228a8bb3ee62bf686e6a7ddfa2caa244e8366a992583\nd4b68ae572ba79fda7a2b5981559d372978912786d3e7584e192ee3e2508224d\na8c4b41123486f5d1f9bd153279cbc0d6a211e988570490c634ff4ae26b6a1c9\naee78d65dff7d3d534522648e26cad18c29b7f1bb71c59a67931b619bbf4ccb2\ncada094ec149aac8afd198149cdf679ee3f65fe7badd85b801ab64863e294c11\n9ff4ff265611f041a672734c83bfd7952b94a01e8c48ee82192d4f3a7b082378\n4bdf73d423ae41bedbe7388cc84305d048e22f5678b2440ce1928fb9384775b9\n91116305394ddb3d66a1c7a3a0b4f5ec9ec89732d5c6c93dc1bb73702df8c523\n16933f0474c6b61c6d0198bb9eb7f537a6f138daa9a6363255f3b4bfcac82b16\n86d72ec295f298b5b6897017d8c2cef535ec4a3486b8a6996af31283f1d0bcd0\n2c24d2062b94f05093b0d7f27b74c98e05d265efe602996b524aa0a360592101\n6a9ea3239dad37915227f55921c7ed5fb4969217137fef1e8576fb82d274c69b\ndcc3d9d868b4bc76f08fc7097c539230c1bfbd9b61fa268be5d354f826ec7161\na414ae882d5ffaca6c7e08aafd6cd7eb40ff30ea9784c30e2f5a7832544130ce\n9a524039777003e3d1d405940e9fdb64656372b18ee57df90a5ad00fb311ea96\nab0e383a10b03869bca603d287a815ebff72c1ccaa677e173bbfeb4434c579e5\nbcd2271b8438e69edde033f502e96403a8d697e2c102a90fbda669fd5670e108\nf79bd0252186908d0d09acff3e8e3d41b48dd0ea63cd87282af53a55166236a2\nc89be70db782434f1096cac76284d05f6b792a5994951fd74276a2d22b907528\ne04b77372e8277d7400516a83333a56b313c33ef392d28aee8ac5b0efd0e64cc\nd778730eea922b8394c443c154d30b05b059d1c8ad63b84dc269131f0750b4d1\n728a5cb9dbfc3d278815313b6be256b2617411b8c8db73c24fb1fadfb6a04f46\n2c743a73ec4062b8b777abc4a87dc517415c97631d3800f95600d4f7c66d518e\n9c6c609fac65e636e17e73daf3d9d79241b83036028ac1b461e80725addf9d73\n5c1af28c53b1810dd60e451e692680846ac32e892887fb95eefddb6d74d4079a\n1218a5b38c704a6f12a525de47631032c03f62901f3be9eb4c3d5717ccca71d2\nef067677527e3058a6f6fe67ee3e46cf261af808731ebc5e27074af304177035\n202e188357ddab495c4c52ebb05f0c24e6670e920370182f8921726d2485d4d7\nad0e3782887c5d1f198fa818917286f86434f7d854a0b544e3b886da8f2a80ac\nb2d6deb33bf7b99da69a36010be0ca395a3d63648ba4a6bd2a199d34b34bf187\ne344a29a3c6f55e4d084703082655ba0f06f6ce0e44743b09f005236987e27b5\n4460fa181bed4a8999b5592ac20e099519c94980812286042606c90c562be1e9\n9693d3c8eaa609b63694b2e78ccb8aaaa32f59941f22612159a45fb8f1428c85\n71f6771dfa5fdfacb7f2f8717a2f97ff1b78ced9a81ebc4d395ff56df408f97b\n967991d6cbea68f798d4596177d0ba76bb8c5030158585bb2a81e84ea68385e6\n18668836b8212f4953b910d70a94f5a929946b353adf12b03a68762b4c02c0ed\nb244993cf912f1141de141b96b6338b9cede7766b2c4ac1c3731767be70581c2\n3a84ef8a01c7de2203719568e88b5fb8369b7424992b9154050182e45fc8d701\n2c359bf949a8c570757b5688f9eafc6c55c63cb525d7c177e2a300aeccd9a64e\n3670d4ac535e39e209f123277c30c211cdfb93dc5c0e94d0ed393c9065abc78d\n1fe648cfd6f0931e2cf2b884bc27843a53d197b1dcebc547e5ab4356bf35ff3b\n86e673c92badb7370ab9746f560b0edbf41b62cdf79c5d589f17edff5f7cfdce\n5b0ac5a4216b1b8e217d1a9ea53a49087fc97a4920e739938164f45877e1e0ef\n20806c16db9f5148a3718859b7fba187c06f78954908bf50064c4b94bf9fda1e\na3f70467261ea101596bb21228eb6ed9dd126326d7bbecb6b94a89516daf9d01\nfaa69e1fe5376d4030e51f18bf9aa0c2a9b87cc969954cc9720081fb0eb0a72e\nb18e65eadda42354ef61f0db46e7cf55166e4213bb2b1627a090a324911c6fcc\nd721263edf4e5140be38a892a07c8ac9cef90f0fd196f34007d3390a9c9b76bd\n8a20367c050fe35a1b7d3d8b1265d44de1b6d24da58475acd88186329bdb62e4\n8270a57deacc9f1bb5b7432df1d21021820a90e5b508cbe133be1d6d7ac31652\n3477214f0614685d24a15e6b54d22ba2afdc2dec0304204fe62e7f9a17ce9846\nd21dc23f38127a6956ea2c5c3a028d6cfae6e076774f817cdb17b1352e1cf6f7\n0baa7878f5b0dd33ddce27e72435b4de648699f595a064e0ae1868267c8dd02e\ne3a1083c093f04a58ceda75c10ea7d7de1883f9e6a891a37eb5f421661e43154\n6099a72d02a9459c9a75a1edb18e899724ad870a3ff3a1d001494b7a87b0a177\n4aba1af3fffe247e1157d9c6dcf44fc35b66d45b8b13deab9b446fc255aa3bf2\n0423b92154720021b6987c1d92ca3762f75e3aa56248615d1a1dd9c508a1825f\n5c84b6b50fdd0f5c99422e943a963f3fd3a47d9339d8fb8b2c7ada2df5c1bcdc\n42a04aa5a362eb91176f74c39fe53f452df73d7620bc678c4f836fed529820f1\n30377414ce8dfba51ade14c58acd69267f0145961298afaa5f79812a1032af9d\n9daae3a58a30e11b5e9cdd0710aea3d454fbe4b8aea2b9b136ebea65d73d49ef\n949feea04ec3c64be956ce1a51c7d21871257d5bba5ceadd5fe018d6dd6a0967\n103bc4300e7cd70aac8922f726c777c5c145bf8ea207bc46db6b6386e5025fcc\n728517b0853eeff7df0de2b5deb912050e6021263544c18eaf9edc07f865be77\n8cddeced5e2fbfba63e8a38e55e0aab1ff820c4926f680ffe93cd4a20795470e\ne68b7e72059b83a5e1ab62c8d9a1231c427367d5224de64b62a8c46903348c92\n311f27deeeb2a2fd07796c6559371d7a1ccc26025f24c3d85d6c89aa703cc595\n43111108c9cb4ce0494e57d13e9d5eaa8b1e85821a490f0b111556b880b5918d\n00adf6954de59695190b1a3964330046a92359f1b8df3217128fc1e60145fc48\nc0d347efc9882145db1e4a1e8f0fa218ded491dcc162560ff4d94a49618821c9\n327c306d43e59f6ea366c9aa3a0c58f6748de22981e6b8836885d8a361b7ff85\n54b659c223a9495998f165da3143148510d765323efe9a1479cd3d019631ce63\nd5d576f4cc7c3a3cc4b8207eab9a0e3b6211f96421a5aa2f6ca94bdef47294ee\n6ca7fc29c7a68d4f0b2f9316b9774349802c61fe6e30f0d3dfa0dc8d74e45b6e\nb998ea869a3657fdc0cc109ff636aaa8c5c39214b1cec2f771f861da32b8da21\n8194af7a1ec7c3d13079951994613e1930f0bee02525cf0a8b9e3419b79d2f63\naf057f40c8964b8855be58003e43f259698240e18b46a23e36c443c5d7da630d\n5e385c938505aaa86e9ffec45ffb4cdd58696f8b657e06f9d37fe2d22d55c767\n08da9bb99a1fa174782c003503a3dd8252e363c879970451114fb407829903a1\n81aabaa7efcae3e01b5e9dfdbec466d13879019f6757da957cc9bede41e95af7\n1f04e96cb6bec0a58c29b0eae0d0c98cfaad65bc7a6f8b7a19d01e4a3bee6c7f\nfb33820f7c73aa8c3049479b0356c9fffd36ff1cbab1f4903ce8ae2379fe9935\n7ac7dd8768f19f4af38ae7c039231f47cb96c8927c9f83dbd2e179c85f09368b\na71f1e5b9a3141c337b46f97d03896fb24b2dc7737da2db618a7ebaa05038e48\nf9166c461cc850bf200d53ae071524c3723e92179b5ba4c269a2a8efabeda02f\n1a4f027efa599783bb8a1fd21017ae234ecf2edd70da4ae8b337e12f9c8edc45\n9156086830b90a8eb3ed7b79e1e5863dcb354fec724a30ba0c3f6f831f424063\n7bcf7313e7efbaa548d28b48ff06ec16dbc2dbce150cfdb3a3146126617b1d53\n52c5531c158b157b231e8fc48910ab62f5da08b288a361e80bbaa49fd6a13d06\n1400a17b4abc85bf2787b3ed37269b3a79e236ca25bced2854080ef0fe98a2ba\nd377774963bbe8a4feeedba11ab77bf9f09375efad241058ad0b662d848014ff\nee7e05738cd360c254e81f52ba3557e7e693e4a2fc782baa1214e33f799ad9d1\n60272b3ba6023c68e9ea2d7e8024963bcfd7244cbf2f6f0ad24221b5b543125f\nd88afc073247eec95b417380bd7e39d28bc9cde7c6229e3ce0c11e999a16266f\n9f3a9589b1d87cc99589c671548fc955616223ff54d9265f06c733ccfb045a5f\ndbdd2a420ea9bfbf3e370abd1d598ddb0a18f257624bf55a7836ad6ecc9210fe\na69b4b012dbed65d14a6da7c2bebf8fd3b870a68b2a02a16b910deb7d3a1e935\n35163ff1d8cc52e7a8ea6fa48e232b26c53988c2b424761e56300e3c01ed3727\n88c2c6d5913d74e464622d044f31be7734d2d965de973642a2e5059bdef34d52\n3f9bd51bce13b862e38a713c578f194583f6b300f1575dd88eb1a035afd42d15\nc20e97f2536fc79af90cfc40231ac17b512350e4d1d1cbc0a19f775f37b66a2b\nf67b60e5a0c861650cbfa96000942450fedec972e86cc4f417c6b0cbabedf661\n060381a991f6e019e9b20dc930633c9500e0c4238c7560b8ff31175588a21b46\n282f6892457f85e9e3b9eb674b3d4b3bbb86eb85385326e6484606663caddeda\n70fe9ac9fb0a17f357d9a0b5b9c28f48575ae73122eaf5d0d9e8337d5d93a9c0\nb700c89b43d9fb502ad5decdf79169a817fd7560054b9e9ff15b1cb6bdc41118\n645da62cf4ca07754ddd45e99121f10eb2ffd0f31db3070dd386a514343f03c0\n57e3b530e3c8d209c32a2f616dd3ff60a22781a639a264147cfb14f617cb68e2\n5f3cdbdd9cc58748e70d2697a79cc2d59d137b9dc6fd2fd74b9f267b0678e724\nf27358f36d259ccf31c6ee4bff2fd0ee4c5870352bd3981cb674ec88774deb14\n51f3087e92d642dfb86739c3b7ac7c8c8e782b038aab6dd7a63da832c6bb41a3\naa33278f9212e2ca1ba2ac3b011d2f9418821094361e7dc48c51b29be5b4a50e\n0b8edf4a78b3e99fe9323ecc87d1b0421e7bff644619587092416aa754c96162\n132b040e6b4028525e5e3874ad80036b13bcbfdad2327a2242c31ab273a06aa4\n396d2f0e10b4fab4be6a9f2200a0f018b8414b558ca1e663433e9af36993e65b\n7663881a0ee655389484b79beddae62edb8223d03c1cbb4edbad6b96690ddf88\ne2b04d0f367d4d227591a63709cae3a44b5d7125036a41ad762b3fb2a88b866f\n17e1f1bd375e049917861ccf8c05248416fb200b909c80036b98b8a08b847e93\nc13b1224265bddecd5a80e169c1e342918dc741b1f96b6c0d623b6edcc032303\n258cc6916525a1a83b1e99605596b5dbb96047c243218f9009f935a3a6eeaec6\n7141321dcbabdf62930dedad38a68f0215667c4676e94c9f2abaa97694694ead\n3b197e23710455e73cfcb9ee8801a5d6d362130d8e3165a5cc82def6c5dab033\nc478baf385d41c3a5f7b98a10bb5968a3ff8c4b6e89b3cc718253405742b8368\ndd22465b61e754bb9bc3025ceaa2b0a3086e3864913442bc67fd3bb154a76001\n82de768826604a658b2f5368838d9a3d0d79b7aaab1bd012b1de1ed8f61c692f\n7be570f7d5d326cb59734a16c73c5298047ae35a2a9e503630ef556aca7333cf\na90e0f3b8fe304b07400c1074488e9812c534acfa7eca477e95519558c4747af\n3a9ab70fef8e29da574cd1bfecfb4874bec13db3334a83601926ed69017469f3\n617c48754d949a17f4cc75670d55ea8fdf1c14c7da190ef75d753434e921ae27\n599173e95d8c7a8d813cb5ea4004021d4a4a2c8ab276b9f559d188cd6aec3fc8\n694294b4b379a4744983a4de9663f52ee3872cfd5e1e0b9d50e7e5e91fa71510\nd0e3fb5a6d5bbcc94dc1214aa8cf09b4ad4dbcb8da2dcb75fcfe405dc8f763f9\n2b6f8a26a00be9c135011d2e081be749d0ea4198b116dfec5b35b8b98293ab27\n4c519d0a510cf8c5af6def3058e8e72dffbe4d20f070bae20249290fdfc0a4a8\n78158beefa59bb1cc3356a85e4606fa4a4ba3fa8f5d95f30cb09f87eb73ccdc6\n639581e6a0bf798d4c5bf88ec278eeb9bb6acb8a2a106ae09648ec2f30cbfc19\n89e06e933d232eb43c79cd80863efd00888cc3bb1e5ce25379f6dea7e345ad71\na36618f26a186a564d1cf377bb2032fc96f886addd351b9f511bbd6841ff045d\na3b6f69abb0230893bb6595478af59fd9d4b9a0e0b16c3887a034fc286f67823\ndea405c44ac71d02e088e5a377136cd5800ae5d6d670eb644237ded577b91492\n4c4aaf74a53bde7adff3b7776b82f2ccc4eac259cddbdfcd4da9137f8e0c6eee\n021de0c2d7c8ec3bf3effd2a28cd5726b31848c3346ab5c05e7025ae326e3938\n364ec7960c921875e789c30f27356fc2da5ed310b6752ea493bb6edaacbe6780\nb286d3829a4f18e110f369d944fafe54bb9da1e757f83f2b01912a9b8b7cc379\n5deef3039d23338ff7250ba43d94f7846207a851756658b0d3fe11c7cd022df1\naae8f0098aa2857cd535b6d5a2c0eaf93292a1f4764036b60d0f5ec01320d661\n58ab38e15798d3305512df53d5a6e5cd32ee44bde4b63643f6dff72d33a9f312\n7eb1fc78326d5ec5e53be40a96f5ff9139ce4c03ac0d4fee3aa6b888341dc440\nb6f4deea2e485ef17cefd47e3236f0c6ba722a58cc0134116c29d74cb09b1abf\nd32d57b6062871302ab0634cbfbd3be7bc83921d914bc67515e1a2abe3d8dff6\na9d71aad56798e1503bbc49702d6c957df99218e57c588620cec420cbdcd5882\ndae9d094ca8079484370f86b230c3ea8cd5233a3a8db3a46405c2f66b6e079f0\n0ca8901612ad5cda9f5e1e60beef876200da0c4b4a4ab198d8b053297aa7c3f8\n8a7ff8d9cd94d71963dc8886618a0eeecd19510a2e427f07e23776a2c1f229a2\n4a5b7e781aac58129bcac103f81ea7766cc81ab74937a96286a088b96554db50\nc87fa22c998f9feb073997e9932e33277ee3149823c24603b680b30fd84641a4\n65a2ac8f4bcb07f55175b136982313bf106954059c80f3930d23b6ca41e5aafe\nfd26aa6389d4fd96922ff96468a9f0689fe0f0cbbd1a55f408aaba6b1435bf47\n45c0da4ce896195f9783e4844fef01088a991c004f64e0a7de42afe0526cfdbe\nba949a723572cb7761b909fb3255e8605d26598d7fcbea0502b79b9d7bfd75eb\nd6b71908307af9718c211e375f0d544b7fb410628a7ab3428d3a5ab4da709ff9\n6ec1df440462ad954919e06cdd7b3daef6fef859ef7d5a14fb5b9a22bc027a7e\n2ca589e00acb1b578c41bb44033bb5edb9fa6b8f2200b0bac9eb6f2aaac34bbc\n63eca505aa37dfacf59f48a79df820bd8f0e36976e9a0f33ddc4bb037767d25e\n91d559d81f3775f01f7f98f4b7f293ccb43d5991e626fbb753da2e8b94d0d864\n88835421652ad204e228044092ae0a5e6be4413f12ada4a5d2852cd863e55430\n4251d37b3fe96eeb4f895a9f265e06b5a8c2ba78c25bc53b4e728cfec4f5213c\n5872b6f167ad81240986748669f4414d6921473c9b91c842654c7fabae3e3996\nf1effe2a78923791d83fc1b38f2910292b13f34c91a54124fa75ef6c521510e4\n9f267a945ccd13d9381f8f54b1d6322bfbf8337d7d5d564a4ee141a407d400b5\n2d54982f9cfc5671bdca32ff73083dfe398d150d9a6a260f78be4dbeaafdafe4\n281659413f6e915f1773ae5fe319e8881d02f077e4a8a3171cd88342e79df1e2\n5e28d1524b35699bb33cdd5b2f0c449205ba0ad92948f596422ad322d90ecfc6\ne5d90ac2fe1621aff448f49ae9f75c0744085d3020f7564589fd27c344e6b0de\n208ac87e3241019d6efdb3ca1774c34d634a44f7964ce634e01331ef969bd0ba\na27488196f384294d74932def39b1835841ba50b1ddeb1d926c4fcf047e815d5\na24568a222945342e44c05dda6f5134a71c83ab2f2f8820d057c7f65d796ad08\n57cf5bdab356126cf51a205fe751bc98189bc5ffd2ec088dd6eb39105e5e872f\n740dc65f089083b030738aaf413aa590fe686d9781ec522d2085d2c00dedbcf8\n4ee1a9925b28627e86317da45064edbf33b3d8f3f09415787d4eeac258f24e42\nece2698c6ecd3642afd575c5dd6b9ed0f467e17e9cb9b1a57709af3ca0b18cd7\ne63122f4d7a9b5f20cc12add1f35fd155ddd28224177819a300592cfe1067d39\n88b4290fa754f318af76237f73b0030b4cfc1eeac60930e26dacffe4bc4661e3\n860cbfb4bc0307b3978e4c1ffe387094a710e3c46a4c2fa5e411beb1c38db8e6\n546690b318303c2237712817a4b9758964afe00225fd572dfb20e528c1a632a1\n1b0911a77694da1255da5884cc6f152ba5b0006f82dab26d3bb4852e02f8c1e0\na34e56e909112e9790778c26914e029fee5f54888bf491233d6eac63e5ff87b2\n73fc25979c3f1686f6ffcc4471f729d79036717f7009689f73504ce32a3fd867\n795275c727950ec49b2c41d0dc0af5ed406a357dc83eb9dafd5d799af3b192b0\n580dc9154552630c35e2a8bbd5c1496305d59763a5f3a5d415c4d3a97fc7a6f2\nd7eaf12a8bd4083c9d264fcd95eab7d8e18b4a33236666cfd2a2b673c07b1e29\ne2400e31753120c8de033b4332897b1f217c0f5cef0ed13a9faabfe4e33c94e9\na2df7bdf990e4ee8333cd97b842df5641a83a760e9ff3d3c75f59a4be0835382\n4f9445040f50b49734fb61d255369dc481bb02aa0644b3b828fb63f35449d77a\n0f18339f032303b016e64733f5b11b82172414706c8231b77de97017716bc7e8\na8a02f0d2ca3d82042f8ddc6ff4c3c9335f895826cba8d1b7aa61238ade19ada\n86055373810c870ad6c3249e06a395b1a712b9bfbff0033748a3f03e2c627c3e\nc95427a325be766edd3921b38050cfe9faee1fad8842a374d505a091cd626186\neaee63628fc135aa637d1692bde32428bbd323c8054bdf2b9ef1608145a7691f\n7db4fdf71e191f82f0ed16040582ae286fe9e1893b05725901319427984fd50a\n873efbf0c10c4f72ca78292ba068bb96b7d4e5f69f3e011bb13a5670c358c3e2\n1942de2fa4c48634cd06517c30e1159e5136c0567cb816612a4c06cb5db42195\n7448421b2356ba5618f9cd31f3c44c0efacb04b75384d17421a58c0b2b05b92e\n4ab85ff7e31515514d5ae2935fcf3dc44ffa47e221776c0a80cfdb1a298a3e59\n3f9257a74c37c6bb7aaad65474eb5f971c95db0fd1c065ebd15f38f3861699a2\n56bc1f075d4b52847bae10ad457f34e3bcbe7e2e64a7654979ac60551faad547\ndff55dd0ec25e8950eeac9b6db7719af06a2ffc09e4d6a35b63c55e6771787e4\nee845fa9da58669ea67743e8731d76bf02d2ff22720a0d73ee2515b32fd4ac0b\n098be9c157278b01ba9f5bb4880453ceab6f6cc1ede07000ff12a68cbb6d4531\n8f200aee8a948266ee7e78377ed3d78e4fc0032eaa60a98dd39f193e2f33b544\n47997c1a362bfcbff345b6cc175d5c11cae9efece90512d0e0dc085a32d86f60\nc8766776696c0285eedc9f8812d02248b41183c48bdd72faa4bed53a3ea2a281\n6af6d1962045442296bbcea27af756155cfa358abf9fc04ad0f7c24cd247a649\nef24926604770cb8b6026a1ace117901cb6735b517c242b0d05c16830c54f9d7\n4bf50df32791e3d0f9a36426f77ca744df23fc1e4910c7fd44727e28c3067d65\n1c4e24f1c075330be43fe03cc55fa77a4f0c26d94529024bb390696bb124237e\nd3c3b2588c81640eee1caf0a599b0e695484262549e3fe21b165fa8db2d75130\n1d3e620edfaf0e3c905a099c21a0a356a6b8593cdab8664186bbeee500d846b9\n84dd3ab6de9d55af56f828c833d9c99aea15cb765a34dbff69ca5c46236a1881\nb9ebf618d093a4ef2ef82c3007ad44e1c50bed8e97c163c5ce73f9ede71dfd17\n178cc64d9d4763b81cc1717a4399db49f67aa2d419de60e262f2da8b1f6d8fda\naca2c6c7badcf6d945b58bf1eb6ede2a2562813b7c2f0e45a752068801617c0c\na465cf4a02abd13182f380ae6ecd21e92cef2622c5bdf295f40d3b9559ce91eb\nb256e93820a46ce8e2269d3af2304e74daaf3dd2b84144ae131b342ad1cabc45\n076415815f885f93597baba494111aadaaa089b845fe3a730393fbf110fe3241\n9fb839c4a04d944ccab1e294060111058cbdb333a8e34e089b4fd517d396c001\n971dda246935d5d7a3dbff11cd32662d14564344eaac84ec7529fe7aa34159cb\n4383e0ffac0bf5c1094948f84f079936c32e56f0967b03245e8c71cde8c31770\n35dde9c9823bffb056a8eb48b0f975695b5dfedb0a095ac12f80c46e70400f0a\n79ba5fbb46b8bd695c08c0dc95d4a148684907ca98d7d601cd0b92077f887d92\nb06bb42366affb7fecb09ca1e19b1cc76f752ff5ddbf586db8c1b39c8f78be12\n8ea12d10a032c15cd0f1af8a0484b3ad9e363c78401f03150bed0bb922813190\n6983674d816054c634aa04563c99ce4c4977092b8c490de16e7145c411183fcf\ndc915014a4dc4113b1185be27b67593ae938cf9c60b53096bd76cc400628157e\n7524cb0821a63e914e0891e4f47f60e570d79ccb7ec90952e6da3bf2484167cd\ncf51dcc2d6a660e3640edb8f7ab689e1b001647ddca21631fd4b8838adbc63c7\nc50dd60cea7edec89fb756699c9148b83bf65a3187b11a1400e8104fa4f0e61e\n4e62cf0d66e759a69e50a5721c44c9f1af651e73ba72b3abc2782595bd24ae77\nf0ec01bba702afb857fcfffe8105dc647a753b4a4cd05e6196804da8e4b5a6c4\n023d996a960cab5c7d8f90eeebfeaf3cd61efcc015218fa7ab5f5827606381f4\n452468531b9ccf4859ff7331449bb7592a20b80feb3484a088baba8ac4dd29a7\n1038a3f885e5044da35c29304a0465199ddaad81efbfc9f5a41d13d3489ec736\naba5046d1cc591134ed36989ce226ef103888f1310b6cc8a29075016e685c808\n747a3ad6a1b9c8eafaa263e2f405fc236971983f61a9a45e53e5d425b5cefaa9\n9685bcbcb9dc5baac89db82582d68f0b2ec557bc24421a3a6873174c433a8ef4\ndcae69f7560b9daea7760d9ba34ff4c6b84e4f10b2c1ab57aac9cede6b8a430b\n6b506581ded879e2e82fccd0a920da6d390c290d3743b8e940c9c2045812ae39\nd2bf87a18e9626d03c0e3c2273d917009a209480cb144fe95d60102a4bcc2bc6\n0bd13d764af4b6fb88924984f63b8ddb0ac24a90c30fee4488b52092141027ba\n1431b6e4bdec39b66b6703ea6d73d00ef0c028398b088f02cf3265ccabceef26\n054ddf3fd27f10f2703eeca2baba4eb2bb832cee63bc357d1002d0a475d5fe75\n2f793e7863b2255930b5fbe3edad8522e5e9889d47f1d3be145421a2cd885067\nbe5824c3ba60eb1990d6ce6e39fd0a8696a4f139d8452627778cb961c1407d94\n1b01fc4c396f76ed0843c6d3db9a031f69d1036b4705c7880625c5e277dadcb4\n5e8edb6df08935ffe1bb7a1e3c6659a176ab1acf3767410781be0613bd67d2f8\nbfce6ccdfbaaaa0471936705349b61e39bf24d9291f41e9cedd75f2daf5c53ba\neac61e9132911365437912b9546ed3a75d10bcba0d26cfc49dd10a0896bc7b2a\n77dc3e7e9933255fb1eb54ca2f0b93b83e5c51dd522ce09d906c0a9d256de715\n624ad5523b32b765399f842560554b84fdaa69a262c06fbaec4c498c9a221cca\n912cecca680623026346e395468ff48f26fde31250e84d484600b2c179bf8ac4\nbd1e5ed00212316fe1d708eb77057d59cd05046eb936540a63f83bfcea53bd86\n4dba1b2e39ef3db4dc865898439940ddbada1c1396b9a9aef6aae5747b3787f8\nbafd41ab310a5ab22326103110886e5c80e5fd4894babe32dc7d7112973dc33a\n2ad0a138466adc3a7b6d3fad48efde845bdabbb63282a310688695bbd3573a30\na6f014f1fb11f372eb17c0b24548cc31408395a499e28b5457e91a8831c920f2\n488bf3d5aacae6c435b79191751d389dbce3948291f614c846016152c344b7c4\n39ff8919b7271368ae2defc5ad9b047bd1dc36b0b925474cc18eb8f57566a626\n68edebe55168cbf660a56c2178ae3364be9d729102be1169a86635a898a47845\n75104dc625ac8bd1bd317b9526e01e23b4e8b215d1d9723f532184dedb9dcf54\n48d8a1972986060ce6bf2489652e6149da56816cfff80bc004e574054ea19c57\n1290f986c260583e921937302e9bab3fbdbdf7b87df696b3581acc9250ad21a0\nc6f87e4d2b9877177f8598b7ef0cb56bb101552c7c4406c1b2389f2345e74d61\naa25db0dd85c8d7e287a530403dc4530ad26c8d86104be3f4552e19578b28547\n11ca075c2093650fae35017f7b05a085180cf7e7055a1a2593a761c318e5b130\n303b2c3edaa70a94ceb27e1d9084992c54dd71becb06fb2d68a927b4310b5e44\ne8e75a44c9e9bbe1ada8026410bcfefc664d152eb659c1262c0c2adc52b2d5fb\n1ba5c7478a100b673b3c0e6f9242dc779bd03d475f08a2fa62117d452b836172\n54c259d27d8ccce94884cd675d4306435910f6697dd9dcdeaaa514302d509969\na7aacc4cf4a7b0eded706621ab26152c25eceb2d4a0c2506870db532f34e9793\nc088695ebb3bb93624be7b9570646d097e865ab916d6901932134dd2fd1dfab7\n97844c4b22efc2c6e81dfaec6cc5934ce98b9af1e50c110128064eb85292a32a\n2b7d5260473ffe693a8dda1b4303af78a6def107d6b06af340a3355d706e9b1d\nc16ca758c215ca67ede2e45f8d4e0d62f8aec2a473b50af8f24ff028a5e67751\n6de538f4b65361677b23bcc294c1d785a20d2436e9ed7c8727cd7f4647e1438a\n1c5a133002ab5fa224b2ef80c4adda60d646db7aeae1fb329359e8dd45535165\nc9446a2d729a01fc3e83842e1f06fb507ff35445268c0a4e27037ee697a7f82b\naf77b77878a172d69f5d3bf5b6d81ab7985fde13cacd3cd73ed9b965cee5df77\n61a9e9a293978c005a7f491df48dfdefb8da0781e73a1f122777d310b13c8057\n13358b742aef216c38e79136fc4b3cc61eb64f347a0c7781ca67eeeed1775fb6\nefd5eb792f440f305c53f0fabdf0e1b03ede8d1bbfe2f974c2da4774771c4ca6\n2ae401a2cd7a91354bd185cec69fb822af15265146effad3bf5cf1c796c69a94\n96fbff8b7f165e74643b775b0eabac9881cba7a45b3b505ff1c835330fe77704\n3e645fd372a5ab1c236db4daaf859cba7e28adfd438235cf648b098f74bac810\n1315791e5733431b3706cfbf848241569a883f9c49ee2b471c8459bd7251f4b9\n6b51cdd0fde839a29568ada192c8ada1fb06cc856f9e0546ebbcb8197b354af1\nb6b4b98f2833b5dabc46a90b8a928290ed2aa89ec657c7d6faae20776656c5fb\n089379aa86fa6677eab83d7970a1fa2d3924e20f73c7cb4e25d21aee86110538\nb37059a856f2218451bdb7a2b34856c55434d65c0e9471be961df7c95157d770\nc01ea4bc7f6c4157fc688939c68ef615aa644ac838d82cdf9543ccab5783207f\n4cdc1cb0a6d557a5b956f8b082f663e59e8eb03464a4c8a5b6f86a490ab5b06b\n558e43ddc0e0155416880eb4bf2f1150ba86d8103fd26e447e9cc1ff9afeea80\n3b7f668ffb65af7c4f345ca86bc64443918e0453ba45edaac684603d9896fe50\ne80458f7565c4851c8aa4d1b4f5e8e27d12c79595adae2a092b19ffefd61a4ff\n4fdbaf700a6e9a965b95d35415f86a297e7741a0027b787d011b3375b55c85e4\n888ebb8bc3a074585e7e4489544d71c34a9c971634250d2afaa19f31b71181e0\n678ce646f8d922ff862082420f6ff7f6e06835535e3b1b58f503624db81b1773\n2af7e8b9c09278d633a7195a9322c19779384bbf05f302158ce73dd769f403c5\nb651e2275e06bdda225a8f6c1f9e8a45209c3b944933547c89285c5cf7ee85d2\nbb78eb4a66924e938702662bd9f691d0e93add17d33472e6c53eb5da2abe1297\nfc8e57a9eb8c2e41eaa98ddf5ea6bebdb9a972bd1a24865db37773aee05b862a\n6780d0212647aa7afec35543b9fef22cf499388ba3ad9fef7ed4216443e9f2cc\n4d054c860e8f2524184ee4c7bb4f79e6610947a231bd5345207f840d9d5cbc74\n0c4f5f95338860351706c16d2373e708257d2e59be02889d23bfb4ff16f36cd5\naf8e70383a46e4da92749b8c50d448c7e18db340c649f510fcc18995ccce82a1\nc102c323d79c42a781851c04b7b3594f37960ff083a8dde29a5a1ebd30240cbf\na09e4e9c54ce7b19a40b28da083829d5a957806166f79f5b880d546c5d84dcbf\nd7367461b982dcade6314ac722c6990d329b31030216b93899662482077ab97c\na3d66769414745e72fa40eb1592369c34a6e3e41b9aa58eb44a3a0b2959507e3\n714367f60bf84a88edad98f6cb38c706368246e40f7465098f099dbfce47fbfc\nc2966f0a24cd31e40ff746ac6f36790d9d62d426096cc8811c42ba4691073fc0\nc3533609b425afe28d12542f078c0e7b368fd3714070304abbbb25b3fd82e873\nde52577249c8fcef7453fb4f2098362e8f97e24dc8e93efcec525e357761e422\nc305223218928c3902c4e5a3ee7886c511396a008611820d997b9e2eb1382639\n97b52d63d522b3e2309e6178776e71cb0452919a5ba3dbc34edeb545d45f5c48\n27ce9adf9467a99276210cbf0f904303944a0bf00a398401585122ab16af29ab\n711ea132f61378cc736816ed6dbf2e81cab85ac1e0484a09d7a3276e627fde91\nb81d7673a90d350ed8877ff9915025d19e435c95c2868d24aa0c2de05ce68ef5\n915d30fe890ea0f43cc05eedecade250080f316f04090d75679235862ebde72b\ndaf6736fed7f64b4377db19a049717630654538bd7941aea1e4e44eda11443fb\n93da2ca5a7f2e2621e8ac4accaaebc7a1350f7e8f477950d86ca189ab7c18ac8\n67ab1d5a447a4fcc1548d66b257baa5eb382206b1cd2be5020dd85509e269f23\nf0993149c23e92c93d43fb043a65e7cdd8a6d632de5fc0636ee0fedb27657026\n8fa3b7069cec8aa1ec0a9edd17b783df9e0ebef0ea1974a1da3c71c09ae1c649\ne4a39599432916d754700da66b9e5e0ae17232b4cb70d754e6874e784a7336d2\n6c531b366d24fa342f077fd76fb5aca2680037deaa7313caa5f0912f2d1610cb\nf5464535baaca84ba618c2cbc997b82dd64f9fc322a9988ff9674306e0510c7a\n9837150be6039e5231e2235635994976ea0a853dd743bc74c75f2ae325f3ffd3\n9462bf6809f298b6b701fa3d52feb2fb3c659d8d8fdf258d1637fea577b44337\nb1abe24ba151a04b22f50a43157d5ea9dc917c205b3f3629fb89a67a25c125b4\n549b9cbd79bb18ce526ac1759e3658366cad031b15490d6efd2ac399650e1c2b\ne9f4af7343e95f09e11173ad0723b08db7f8a1a5b3a61dc5b6bd9f67998d85b8\naff4fe6849c96419ea10e43376639eb01c6a4761620b0d2d92aff40439e00113\nd9803002c1521dc251a2a4ef8001f181e62a3454764db2c03eb9fdcaf7a0c58c\nfbcbd95727b97e9958d6fe86065765cf837e41ee5bae89a085854fa1782be1ba\n1e789120d9441082a65db3be4be079cfe7cf9eb48a4f5b6750e730822d760a31\n2a07ad2785642a0ce83a1aaa06d487f024a35ed6b5438cae5eaa927598ff6ff2\n9dc580410b946ca61b2c480e043be2493cf7f1755f91126659797cb6121403a8\nf75f622fdd1d851f15c92e170233c84a902d094ca5b696662d44cfa2e3494c46\n20612ad15dd9ccd47ff2e90d0caf042a9fb39a3fb2d19064c6b988f89b6be7eb\ncb35eeabb3e8c1713213188ab4a673cfc2964dd24807d268043987419c139acf\n3a3a17ebc667ca0c3d584e169d0cdbfea8fe173f120153432760162f391c0f90\n6b5f5dbb6b3b00eb6307b8d2fff9a4a12a32690610433be547ce700605d2e7e9\n123af081498357d198b533a391d6635a33244405905a746a9cd7a4681e2a4687\n63b2bcaeb248ad75c2dac2ada6687ba10e5b560852f353bb1f622cea9064728b\n6b41a1cfacb658519f83ac156697ca591bcd873f0d937fab8e985b384331c2e2\na61f0b5c0781abaf8d0d2f85943f5eecc547bcfe85325e78777688ee4fe42aba\ndbe25a4f0e01e09406e7ff3a44d366a6072d6899542e7ffbd6d6fefc089f3c7f\n55c3b15f137e8d448bd15eb90699542b552b32c4be4d09d6a82dc0cbb5a0844a\n04a9345d6899fa3b714724745f3c2aff63b429e8f41901dd8b0259b8f27be3fd\nf01a46262b634bfb4cd8e5a78819911a5a0d5c0d92d6bc31cef1dcf2b401917d\na88aaa74e7665fcab5518652c7062d0c48338336dd28e0cdb2ae80c6b4da5982\n3b4bb560bda9799f65887fa980d39eb80e2581d9aa10c337b2dc4bc058cc4a8d\na768846ea95e47a6adeaa4b83f7c00391cc1046a008b4be6e35be03bac81c12c\ndbb250dc67295028a1ba2af69a0a8b5dea99e51eb1950471233df86003c0e01f\n1635f6f95243c288eee268d0920f565ca657a0c9101e4439877a58e78e0a4a41\n5a38f0b165ecd6b8e3b842ec6aba8507597f23ef0fb2ff906b683e58cd733dcc\n413c4e6f818a98e4d90368328c67e2efd6f330872014e225b5fb405591a91c55\n4084570824ec59ff61c7387cd34790fabb60e58820aa28bfd384a5f26c1d5108\n364625aff6bf3f497e85b39e59ad762001c9dca97e7e6b64670e3c31674172b2\n4e0de15a38fb77bad04638e77a1958378877faccbb2b499b5e93199203a9f0a5\n631c6086e2444d113fbc9031a3476a236775ee96f4f467ccf42ea4c50ce95a4e\nf302076e1b50dae5602e9d6b41fa905765a334588b712e56a4419bd6f15252d4\n4e4ab835ac825732b2201a30f275f0cc785bbc0164607cbe6c1dacdab1ee8440\n44c4544bbe0690af14ea01936970faf1c02f06409d5576e98e42b00cef10420f\n58ad350263cdc6343b494185d0a2920f5aab386c08e6a0ec038e7b26d70de878\nf6be5d03f2711e138cb930dfbb96b4103dec608f10eb526d19ad5b1c1b279869\n3ab68ee54156eaaf81a4f1f981ad43bd8abc51005e5f522a3551f6c957e68017\nf509fe4bd1c5296949a44eb4d1bf1e44333abb1e9d8fdc31ed2e22f8ca887f09\n21e912f5a139bbbc500f522ebf0877b1e2308a47f206354b50efc7223f166a96\n4a98ba5f1d28b833b367c50d97258039ca8e9ffe9c7acee7cc26f07e6d5f811a\n05cde2b84fd8931412ccafe0ad39545238c569dabb007240bff2ddbef6a321a7\nc83b63fd1bc07eb0b9734b0e0fcf1ca5b4451c2f7fb51958468dc31397fbbdb9\nfbc956a5d0de83ff8f8d39f68964165e7366056abf6bc26f9a09f1d982201498\n63aa2d19324b49fe396a77b32c1cac9e82af3a2e03339c9de3240b0e3b6bd8eb\n49a9515a34c27f8258d4c3cceb90a4bf92a0763d6b55c3f8abcabc2141ee914a\ncfeb0b9de96a4bd92eb236d4c74077925567bd44f4db38b5e4e7a503017cccdf\n1b82536845793ae5699f3121c712dbab95b092bbe2931e1cc4feb939df41a96c\n0ec9452f14bb12f20368c7db6e596b76b6d6fe8832590eb2ee790720e8860fef\na0d73ca533d64664c919281513e8a5333b5a660c24e6fd4683faabb670cccb88\n8cad89eeef668c8fda727c6f608ed7be5cb8ac6f8af16d64ab436b6be894f488\n3219450646e313371e73fc3db28bf0c9f7c4a97c2ef7faa7bb0e794c53e3bb04\n04f545777733b8d4467c85e4c433bfe26a2538b64ce5e0345782cca3e106d749\n856f1ccf4bb14477938bca48d42746f9d8bce0822dd8e9c321db82ec01577c5b\n6d608f448a9de7b5b308cc70a41548f5daf421039615e2f95d8cc38c4656b127\n35a0717ecbbb4582ab0ff367653dc183617ebfa64c6c2120f12c30b0fe1e1d53\n9e71c0258c58e7d6d2edd850144524b626a2abe828044e86ddec4d3ef59655ed\n824029d104eff680bf3553487391b4741a083b80dc419e798d668b9793ba6413\n84f6972adc0f0caea96a35ceb0b2ac9675de31be1d7b26ef558f9437cdede1d5\n366a227a425b61fcfa63655823a4c95e0a3a8fce49e1c6653be9d891e38cd9ec\n6a572b852b451d2e8dad4ed730249e777b53426367072e0b812c9c340f284961\n89861d8695de060b6552a01bed27497c6166aae6cf1c1b097f8b28f0fa6b464b\n473fc0bec931872ab72c655d4aeb7ef93c3668a7333de4e592bd280bd2dd3f06\ndf33ef8b66bfc278db5c2750291b190706c508977e0fb3dc501d4bc6e7e81d0a\n23424d6ee4fed4634b8ea9fc74ac8db15d50e54a0c83b364b70fc17bdb065c3a\n51d215102ae0134c6d1498528bdedb0ddb5ab9375fc49288caed2d40ef96b29e\ne29c3132f862a1bd41e6961d60878c4d5396c75f967a54f89349ff3af0b50070\nbc9ddf6e7e5fa79e95d611bce6cda060b2c305c1a9ea4fff7022fe178afdee98\n37af039610af735610ec381cab4f2d26f38df7f9eafb9948373af081d679c2a7\n00b6ed45af9e39a40883fde23752c791772e57f4122f7def893ad40d17f9ff37\n44095c49b45b15679ed6a2f4a24c795d4ab26d912681cef9bf460604a12553dc\n890854bad6b8a911d79668afca3ca1387be2025af0d743e1f86a4e62a5f3a1f0\n3f86d85568f50a57a8f6be6756aa12d2ea3335787ba458b751e15a79c047c843\n3615dfb17fbda7bb5bbf2b3a43bed4ee9bce6a6ad438cbc81bdb8ad1db1f6fcf\n81bd69d3458633206c01223dda1871d78d686e7d7b4d3275a1680f1d384e9b10\n858d9df80da954e6a3fa320ecd2645bf880d2baa0e98b914dce61ac0e4b23063\n23816bbe4a8b20f88cff751755491a24ea1f3178e39eac832be9364a0133832b\nfc99c99c171d983159ae6e806f2c84e1748694dd24eef9664ba3d8d85c538a17\n6b75de6c0b0fde541c9c20efd69e365a71617ea68cf8c798302ec0ff6ac1ea2b\n33c9db8f9819c37c4d5d3bc84e7caefe16ac6cdfb31903594f363c8d90b06331\n47568a1ecf6642d615423cd149b3fb2ed528f375188d2a9a00a42126a08346a7\n05c7418a3219bf881b58c1deb58bb62d41ab0a75e8d63c01449393e6c63c21ce\nc97533aebda945063d996d261518c152dc6334a467e497867aec3bcf8a488ef1\nd44cbe372bf0ebcba9f3783c03474a33277de31f2a0dd86e21672f45141061fa\nf6b74355f9029370184d2b4750f34e8a4675b05e1dc9570fcc61a4218a0373db\nec01a16fd4fb9fc0c2de7841bfa0d57ddf2317969a2aefce888a9d0ea2fb0901\n723e3916b07913e79dab98e71bc2b62c0e7e88c9f2bb58f744ab97babbac3ef0\n4862717aa20d683647d8fe18bd40e9d6a27c97d7ab28414d49114468cfefdf1e\n2918c2189ad39cc2a3c335bede7f4920b3d3c7cd36616f57e6852c65839b138f\n0d4ff50493acfff757394510708298aed4dbb611ff8236b8ee94f718f745abde\nebbf1161c9c9c191656f937dd236cd2c85069bc4d25d63b9395c3837d038a6a1\n6510506c8b3a0537f05a3e1516d5d0e1dff6e1c8585509a4211d5802c67ea429\nc6eaa49f972c9c5c0e9f20e1d2b671bdbafcd696e5c6dd72538356317c53bc9c\n78a1a251a2439829a273ff63e27a6c42f4ac611d201ff0b5f15b6b2ca91de8b1\nc451599c8b6a50d61b921cd8aef961de5b5c87c106475202869a1eb509342ccb\nc06633f1befd3dcdf773eb70000bf7f2734b0e3a6fa7bd661fcf097fd02b92f2\n33af002ca98081e8ad5ed7ee4c98eb713b2efcf99e438539ad102376985fbcab\n10d0f170d98e04c7f5e69df55e7a8ae551c8816f062267faae301c8005a467fd\nc8b883aec2a74a283462789fbf4fea596f319025d91cadbced95cb8adb87a241\n0efb07b6a4a756818913bf23de832951ba921e3c03308dbe5cbc01e09567cfe7\n88da7e7cb4acdc70d1d20e46f6c9c3a5e1d870861ec52462dcc8b31a9f0542cf\nb3aa829791a75a00955785a7e7488bc6603225e3ae8481b2b87a9b28163f65de\n6c45dc893d6feee51662aee2b23821a10169e015b303c9238d4c367d9dc814c2\nbad01d346377ee7c179b8ee4cd281475165c8514242dacab1fb78ae32e3f3953\n7529855b6ae136b500c6a92510fe4220826af48ef09c37b773a999302424b17d\n8288db737f90482a089004a5bcab79177b61b1953b5521b7d10e88fdae60b789\n0d1f547f1b46b36a2edae940b73f9701bc1711bef79fb786092d21bcacc65a2b\n350a8a6a2f36177df3e9b6910736c9ea6417857294577d689c16cb5bbd1d889f\n5e51fbd13f576914188fee55902e1e5f4ff58efecc038f382a9824352aa85dbe\nf7a78c039f5f8246dfeb7e4c6f8aefc00e3da7f8c9c0622d6df136ada2796e41\n20807810dc99cadb7bfbb2df5a2c09db87a245e581af639128ea69c4d339dd7b\nab75b62054f3eb6ac2e6f5cb37eb2b7c2bea0d6a65a4b4318442460fcc0287f2\n5917e3a36a6a95590bb1a83668d777596a425c1b526807704f68c643da040c97\n308d2cca7d69cc834908dc5001a82b02897f831b0491b4c5a3c1161373168de2\ne1321bd2dda572077b2ec2f8b88aa430fca42d0af69c787a13f2386afc7c8daa\nf5446e0448ca8772f6d0fd99f3140ede7b69183224e6e011b4fcfb7c594db4d6\ne8c185cc33b90d269803068e0a5f7bcae4f5a9fc2eea263cba4e4b75a642fab2\n169915adba620637d9d349beae5db9c371c61895dc5f784e1035c723d78c3c09\ne4a9dd3fd747ff068441b59989216cc248daa84736807d06b0a9ee91c381a033\n370ddd16080cb98795d226bf93a89eabd256318cc1ed755776020d5174e245ad\nb45b69554735b834feaa42b7ed1db61b5d6b81edfba9f096548711036237859e\nd0d8851a663442d6e5db6350254c016088eeed2a976647ba6d7b78b1a86dbd61\n5bb4ff0ba48656e4ffed976e62884b085bef7a10cdb49399ad2379259c9d02e3\nf89bb2f9e1369f5cd825c587e0a6b9bc4829e90fc5ca49e532dd685a46263787\n10c93d08502ad50c746594461b54b34a6c157ea9b9ed471e4c8e999d834c8d50\n1a05d3f26cc40bf010ad9156d7f6bbc459aa6a0f4499ac5ad7a29354aee21b1b\n0bb49a004b91edbaccbcdb90e8a18e6c07d02b9e1954d66de69eba19b69757e8\n01c73d2641203e2423d6a7fe1257b8d34379b208a1e6805f9381a2f21c2a891c\n15fe2fa515840075795393008a9581322703648591da93bed99ad109361a59e8\nc62825990a8440c274c80e65ef8dff2e8ade47ce3886f10c0c05bba0dfc727fd\n136dd183d633b3c411dcf2cd24d532af295bb36f871f461fde35b1c8e3d3df25\n94cfac5d21d715e19124f5d7fea2d3875f7115dd1b786450bb2fd8279091cd77\n44b17c3682558d43f6eab340177eab3c82027ec15ad2e07a3bcd4de0121445dc\n5a2a711010bfe13060edc9c0c376a5af472aeca1353d0c9dd2d49bdb2b8e646f\n2a1fa00d8bb6dc6fdbd6276410baac7fa9484e8e6e6b3eba07aed18abd78c64c\n8e0f76471b75811cee38fd2b47358b6f147351c57b7aa179f11171175fe22b6f\n432033d08b9e5e0ffb80741dfd69355d1e5d9c8c07f33676f9479922da139cc4\n6d782673825562a6470b7a0e10461a66c285de24766357891bab39f01c8a4a05\n7aefe911de1e8d9e607d01dc9b8cdc9b29ada109661fe0e5934b268c6082169b\n25c43f8b2e3360471ee8f44e9daa1b9acbecc2e51194e6d636d644ce0b6b377e\n595d5b7bfd969b9a0be952e0b18b4cba81360b5f25ff7bd2c9b7885b6cd1011e\n74f270c0402051ad23326bc7b2399477ea8fd3ead497a43bbc66ca029e99f84f\n6aa9021cc9605232aad2577a12ec10bef66acf6c6769afb0e616b997520b3b27\n7bf453566f355a288515394e840b3cc3ee489ecc4503ce7f81b395949d403bee\neb2c59c3d0d6103c1551f664b4b1b3506afd9b4920a964dacf25a67fe3f89130\n1b472bfd6c7098563c07643d134f0d39fa60a292396e65c5a3c8791d50be06bf\ne87e986f065e69741c78ebdc124e767125164c25e99e061c4b4d443b0f3a7a3b\n48dacef7f9fe76a5b321d32b950d0ee36be4ccff7c56b427891106443b21fc0a\n68d74a15fd8b3f2ee93063300dbf7d6fc271adf387ffc5f23366d0de5297c3b9\na51d758c36c8f4be99aa50489c20d60646ef1887af0654a9759bf4b87263388f\nbfc8ed7948ef10578c35fe90eb67e28acedd939e99c140ad8fe3a4b3d0538d10\nce88a2e79cff50b821d8315f926b846aef2ece329b7e91b67dcaaf9f69031160\n67f7345ea4f5931499e84f7172d0e4a53a0a9e6f0aa22645c75bf780b0b7914d\na5b8812ef5a61a351c13bb2e4d2f76c27dca25609858cf2a26148d7a48d13003\nac2bda07184f95dab06aac809ba50ec3a0db099d9bc9aaf3107fa6e1a15124d4\n5e609c4d7b3dd13dd3f932bcfa19ce5c01d9c3ccd7a2ff2e0b90228a975fec42\n4e2b7f80d8bdb6f3e1befbd9997bbdb3de791fe82ddeb96d1f959268621ed8d2\n0f534bb54bde0cb5dd0973909beec1496348d10d2ce1e4a5c9b46fd4b2ef7744\n55b0d015aa2b368009d934fe565ba5def3f1850a97eb1a2e3373864097ef00db\n1635d2717db77cc6bdef0eedf599abedd401937c3f3c11bffb9de008159efc41\na986e8ad1e5e8d5f9f69428a3f8fb80e1bef4436fc844c1b67005fffacb0709b\n0f874ed4f0742fda758400f09bb2b26c162e0117c1e9749a60dc4f9b495bd136\na101100b884b3f5e30aec67c000eb3057ac57a4c1eb72b3f373ff4fbade7d229\n742f05bca2e6919875be98607ccf6fac092051687a3444df7ed371b58e993de5\ndd1a1721ae5b6d1a43fe5f37fc4050c9b13c2ed5c983618dd1c763cfbc62eeb0\ncc2c05583884a537473f3c7f114d2ef9fa3ca54ce920bd22e9a4fc386966eb53\n88597fa7e08c753d95f9ace5b6df44c3922a7dbf6697e71c22d79e1a7c2af1ba\ncbfa61ab6af64c84ff1fc0be29c2065bb44c202a1090333ff706266b789edfe8\ne48291964cc1b167f44f5dcc9ce0951de5f92193886ee2a58be64f20bfdebb4a\nd5d6b4bd0081ce581a736efcbe15c038fac658ccf5e3172ed61fa198438a0899\nbddea82e4ff0004be423c1c7d8b74b8d193b817c1319e0039f3cba0f04d7e294\nc7ce1885cf3f8ea7ac1daabf1795ef575a007c815c5e9824c64188aabcb92ae7\n8d3d2ec8d97ce17bf9b85f1b7e957e21343759dd217f125cbc59b2859c2e104b\n5e97e2af3f28b99ec5f1b8ae34437957d4df110a8b9fcb3474fc1229b351b800\nad32d1eb9748b47c258a02d45176e994145e9dd4b596ac07ae815d46a05abe30\n93f6e65fbee64d7a1c6ecadba359c90593590ded3ad30918bc5d79062b7c94e5\ncd1ab9b034995d33549e3db1f32786ff5adbcdef3d08cf5f804171608a4aff4c\n8f7b4a8b9f428d9ec51edc29291554fe62a1c8f68a72abba60d30bea0606a840\n1b583f37ab6753c36506e0269f9be05b2f8f5778fe340a832c8864f0dbbc9f5a\n428494d420e2cd911baee09dbdd47ef580b93cc66ef68b0e8215ed48034541b6\nd403e8fdf9c3ab12d35db3ea70b671ecef6f4d8a93af267585eec6c9dfdcebf3\nd71e4ee309c689d3a784a08d58ce160d57ad6220e58f788851e34b895ac59c6d\nfd9fc5338e98e49263d103012bde703826eb1cd6d3cd56d876287cb9cea1a05a\nd02421d3a5343049ce2af9bb573097942621accf0c5c134477a20b5ded8af98e\n0fab563ac3fdec4cdc090c59bc2c9537641d30f8ed8a695b76529a10c437b055\ndd600ad39dfe207ff3af60c3e486a8b2774d35f619cf529d72ba03d2be29cf1f\n3324bae7b7be35f4154eb2e5d427f89560a35f559322f690b17ad5db51a0235e\nb9d53d0f23cc5e202b0dc561366017867655f040ac069ba5b5083360c2220cdd\ne9fb9734caceb88e8f98417997ee90b9fd60622e2ac4dbdbbb09b8c582d516d5\nb79d625449f6a40c43e003657820ca264ebe41dbb953e178f017e6d284c9cf9e\n7d17c75ec6b8400c3d0edcc8948ffc80aad357616c05ce578c4f3d7bcadaa3e0\n16df796c318edcc908cff0fa5ddd914d9ef3356f658921f62669baa148757c56\n5918d31185451af525419197f7ddab80c37724d78ec530964ee7cc923d48ec2e\n01ca696b493b7d8a8424e108eed4d9458ad5e20fd312dda34ecbb98e7ea10af4\nf2f6f382657a56f8607593b25f02e4cdbcf4ccfc5cea36388715b2f66297891e\n4a9a87b08daf6ca44d02b054cf7db1bfb34eb8cb984f613a2c3f4688ef4df2d4\n9cc272bd5c6da992f1ea2673d1b5f056adde7c3a39b237422a9fa8646b11a6c4\n7155c70ce24ca1352c67e82d20c6ad534b4391a3c11baf892ca1309da7ac2d36\nd1215e0e73b3d666e2cd15099b3fb0bc720a36c288764a159400768b7ad5fded\nddf4de443aac0e0dc9f54e4f96038816aed77c043c6afc0c27f9363626d52a89\ne98fbef7bc39d965ae741b77305aa0df3248fc7ed66248b3f3501c750250df7c\n17e402b28d6a5b5d5854039ff9ca675dc1eec6e287853926254a6712b403bb72\n70031c39ebcff8be522f1466268c68974c5cd3e9755b1f00eb463590674df837\ne9c796684467e17adbe6bc8c97540a4ff32a3664055217d97aa9229a908a7a3a\na7eaae57814f566c4c0058cb256b0497ee959b079939d804047e01ef8a7c78d4\nada8428ab3c314c0bea6616910e938daec1527655b2203f511be858006f8467c\n59cfda21574c51c7d604e7d3e4b2aef91f38895584c0440329b37012b9937d93\n34e87d92a65ba50bd5b04963ed4579934135d333817bcc80f4136bf510b4707b\na0be100d95340c192ba0bf40176d6e74e7652e00c23a29561156b6655fce7092\n1e1b2104bfefb61123f14e4a3146dc1df04d8127e42c2ace3787d7335e1a527f\n4dd26986e6f2f3e3ed57a902e3a0147184ba7797e5ea8bbbfe00407857f094da\n1e6eff62d586777a2032d295d61ee956b9f24b5551b675f82a0cee37a677e6e5\n47cde2e6b9d15fa725ea26c816503c9fe062abaeec06c739fc41fad9b5d18b61\n6476e227403aa3c7a21ef1330905d78eb7de2569676133a66a3ae8657b74bc42\n4ad4793d837d009ec2f59ec1a05f317c1f42e5c1e7072d08d61d897dc6bd4347\n499bb84206f74385921771556909dc66d16ce0fb8e3077d5ddfee7ac9571892f\na87f7f17fa5d9c7ae4cc53d63845d876805f27ff3d1b48ee3980e98d33ed6e69\n224b0115621c3b3be5f3f072db194024adbe8ede025d580c1bc4e1cdc41b668f\nf23b3d7d741940a8a33c777b36a411aab50f077783b3c5f817eb7b320a8faea0\n193f21d1d20705361eff54ac32f51fd3ed67bbb89934631d515b4492890d4233\nb879bc1513cd538cf075b33e4b819bb54f7e3a3a4691a3e1020b902926b73d57\n6abc3bd44f55f03e24268e129593de555e44f6844adeed547d2e5f8d7cdc9f8a\nf2474f7b32aae459c6cacea8d838cb527986ba8a1b3d79902b3059049d17dd76\n3eb5f58952e38a94f76ce59f868ac6e94c96be9fdea4c6285f208bde77fbb396\n18748bd910c92832c8e6ac9f44d22d918fa9d952074f3d4b5c47233fd2199b1a\n9e98773a6b5f740404b04218e98c17c95044a133e271c1dfb0f074d8b43f1f3e\n0fd7d3a8d254e82056cd89d55a65f621a1dac3cdc433f9a124db4fba1587af75\n09b5eb7444bc1bbd74226523076337f2c5712fd4113007f6154e5af81c9b0a99\n37459114e829009a1710b5f36e36728854e92d25cca4b0ef5a705c22ed0588da\n5a3c5934931a34c3b8b174bc4b47933833342e1d42fa9f0963d467662810dc4e\nbd291e7ff5459c55ad802a584429e0ae15c8b9573812d92631b556264507f634\nd8109bfa7346e32dc29120f567490ca3fb838c4c3de1b91e1e37f14e670f1167\n0fe9de5aefc66d1535338ffe014d60732078cc43d43d0fae5a966846eb4b279c\n31c56cc7593a87e9cdca26f6f12d0e7b22cc68e65e749c3315bdcb172f5f2f62\naf74b29846efcfb196feb9d8b226dde567a1df5891eac5a1b570ca9c424ff41a\n6c63d3fe5cea1acbcca1a5241b0f2c5836eeb70a26c5c497b973b33368b93ee9\ne743d765d0f44dc0046dba878775040aca86bacbb32dff12e3d35a6a7b5902e3\n13b72823adab1b3821efc8eb4371ec7ce0a2893bb62dd56071f5af634f44cdee\n2eb28205d85fd8cf0f02a0ff3f84fd3a17d57305d992eb27c376e49b1c9f19b5\n4d4c9b7e293c8b84afe07c48838e98c5ffad17d9e0dee94953fa478c8444c6ed\n865c585c3e2e6ae90ab2eeea3edee0d7b40f971bc10293eff05ed167a4aab9ab\n929df5bfc60a89088e29ec21ccb091d0e0ded7c27d2ba28388db6485b8495511\nc60833c4d5dad64c9c33ab4fb76061060206113250f6e47d42b336526fd23213\n6e9ece77e66f63d4a54d7343e672df2f6f538e7c7268ac7f8ac2fa9567b51e9b\na36f99995c3d6a013d8ad41bce8483fab3cf2dde2542c9f0b46057fa45a455bf\nc71dee6a4bbe16ce6126b792741329e7c33f30bfd6431d21f267c099c8b34be1\nfce08358bfce3ef549da7c0b89d3b42668d984d3034b5c3fa3f90c3d3eecfe88\n55e9afd1b57ed6611ba418b817b1870acfe6e86860a19352f2ed7d3f9fd381a2\n"
  },
  {
    "path": "benchmarks/haystacks/pathological/repeated-rare-huge.txt",
    "content": "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
  },
  {
    "path": "benchmarks/haystacks/pathological/repeated-rare-small.txt",
    "content": "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz\n"
  },
  {
    "path": "benchmarks/haystacks/sherlock/README.md",
    "content": "These were the original inputs used for the memchr benchmarks. In theory, they\ncould be replaced with the subtitle text in order to trim down the number of\ninputs we use in the benchmark suite.\n\nThe nice thing about the subtitle corpus is that it gives us a translation into\nRussian and Chinese, which lets us measure our code on non-ASCII text.\n"
  },
  {
    "path": "benchmarks/haystacks/sherlock/huge.txt",
    "content": "﻿Project Gutenberg's The Adventures of Sherlock Holmes, by Arthur Conan Doyle\r\n\r\nThis eBook is for the use of anyone anywhere at no cost and with\r\nalmost no restrictions whatsoever.  You may copy it, give it away or\r\nre-use it under the terms of the Project Gutenberg License included\r\nwith this eBook or online at www.gutenberg.net\r\n\r\n\r\nTitle: The Adventures of Sherlock Holmes\r\n\r\nAuthor: Arthur Conan Doyle\r\n\r\nPosting Date: April 18, 2011 [EBook #1661]\r\nFirst Posted: November 29, 2002\r\n\r\nLanguage: English\r\n\r\n\r\n*** START OF THIS PROJECT GUTENBERG EBOOK THE ADVENTURES OF SHERLOCK HOLMES ***\r\n\r\n\r\n\r\n\r\nProduced by an anonymous Project Gutenberg volunteer and Jose Menendez\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nTHE ADVENTURES OF SHERLOCK HOLMES\r\n\r\nby\r\n\r\nSIR ARTHUR CONAN DOYLE\r\n\r\n\r\n\r\n   I. A Scandal in Bohemia\r\n  II. The Red-headed League\r\n III. A Case of Identity\r\n  IV. The Boscombe Valley Mystery\r\n   V. The Five Orange Pips\r\n  VI. The Man with the Twisted Lip\r\n VII. The Adventure of the Blue Carbuncle\r\nVIII. The Adventure of the Speckled Band\r\n  IX. The Adventure of the Engineer's Thumb\r\n   X. The Adventure of the Noble Bachelor\r\n  XI. The Adventure of the Beryl Coronet\r\n XII. The Adventure of the Copper Beeches\r\n\r\n\r\n\r\n\r\nADVENTURE I. A SCANDAL IN BOHEMIA\r\n\r\nI.\r\n\r\nTo Sherlock Holmes she is always THE woman. I have seldom heard\r\nhim mention her under any other name. In his eyes she eclipses\r\nand predominates the whole of her sex. It was not that he felt\r\nany emotion akin to love for Irene Adler. All emotions, and that\r\none particularly, were abhorrent to his cold, precise but\r\nadmirably balanced mind. He was, I take it, the most perfect\r\nreasoning and observing machine that the world has seen, but as a\r\nlover he would have placed himself in a false position. He never\r\nspoke of the softer passions, save with a gibe and a sneer. They\r\nwere admirable things for the observer--excellent for drawing the\r\nveil from men's motives and actions. But for the trained reasoner\r\nto admit such intrusions into his own delicate and finely\r\nadjusted temperament was to introduce a distracting factor which\r\nmight throw a doubt upon all his mental results. Grit in a\r\nsensitive instrument, or a crack in one of his own high-power\r\nlenses, would not be more disturbing than a strong emotion in a\r\nnature such as his. And yet there was but one woman to him, and\r\nthat woman was the late Irene Adler, of dubious and questionable\r\nmemory.\r\n\r\nI had seen little of Holmes lately. My marriage had drifted us\r\naway from each other. My own complete happiness, and the\r\nhome-centred interests which rise up around the man who first\r\nfinds himself master of his own establishment, were sufficient to\r\nabsorb all my attention, while Holmes, who loathed every form of\r\nsociety with his whole Bohemian soul, remained in our lodgings in\r\nBaker Street, buried among his old books, and alternating from\r\nweek to week between cocaine and ambition, the drowsiness of the\r\ndrug, and the fierce energy of his own keen nature. He was still,\r\nas ever, deeply attracted by the study of crime, and occupied his\r\nimmense faculties and extraordinary powers of observation in\r\nfollowing out those clues, and clearing up those mysteries which\r\nhad been abandoned as hopeless by the official police. From time\r\nto time I heard some vague account of his doings: of his summons\r\nto Odessa in the case of the Trepoff murder, of his clearing up\r\nof the singular tragedy of the Atkinson brothers at Trincomalee,\r\nand finally of the mission which he had accomplished so\r\ndelicately and successfully for the reigning family of Holland.\r\nBeyond these signs of his activity, however, which I merely\r\nshared with all the readers of the daily press, I knew little of\r\nmy former friend and companion.\r\n\r\nOne night--it was on the twentieth of March, 1888--I was\r\nreturning from a journey to a patient (for I had now returned to\r\ncivil practice), when my way led me through Baker Street. As I\r\npassed the well-remembered door, which must always be associated\r\nin my mind with my wooing, and with the dark incidents of the\r\nStudy in Scarlet, I was seized with a keen desire to see Holmes\r\nagain, and to know how he was employing his extraordinary powers.\r\nHis rooms were brilliantly lit, and, even as I looked up, I saw\r\nhis tall, spare figure pass twice in a dark silhouette against\r\nthe blind. He was pacing the room swiftly, eagerly, with his head\r\nsunk upon his chest and his hands clasped behind him. To me, who\r\nknew his every mood and habit, his attitude and manner told their\r\nown story. He was at work again. He had risen out of his\r\ndrug-created dreams and was hot upon the scent of some new\r\nproblem. I rang the bell and was shown up to the chamber which\r\nhad formerly been in part my own.\r\n\r\nHis manner was not effusive. It seldom was; but he was glad, I\r\nthink, to see me. With hardly a word spoken, but with a kindly\r\neye, he waved me to an armchair, threw across his case of cigars,\r\nand indicated a spirit case and a gasogene in the corner. Then he\r\nstood before the fire and looked me over in his singular\r\nintrospective fashion.\r\n\r\n\"Wedlock suits you,\" he remarked. \"I think, Watson, that you have\r\nput on seven and a half pounds since I saw you.\"\r\n\r\n\"Seven!\" I answered.\r\n\r\n\"Indeed, I should have thought a little more. Just a trifle more,\r\nI fancy, Watson. And in practice again, I observe. You did not\r\ntell me that you intended to go into harness.\"\r\n\r\n\"Then, how do you know?\"\r\n\r\n\"I see it, I deduce it. How do I know that you have been getting\r\nyourself very wet lately, and that you have a most clumsy and\r\ncareless servant girl?\"\r\n\r\n\"My dear Holmes,\" said I, \"this is too much. You would certainly\r\nhave been burned, had you lived a few centuries ago. It is true\r\nthat I had a country walk on Thursday and came home in a dreadful\r\nmess, but as I have changed my clothes I can't imagine how you\r\ndeduce it. As to Mary Jane, she is incorrigible, and my wife has\r\ngiven her notice, but there, again, I fail to see how you work it\r\nout.\"\r\n\r\nHe chuckled to himself and rubbed his long, nervous hands\r\ntogether.\r\n\r\n\"It is simplicity itself,\" said he; \"my eyes tell me that on the\r\ninside of your left shoe, just where the firelight strikes it,\r\nthe leather is scored by six almost parallel cuts. Obviously they\r\nhave been caused by someone who has very carelessly scraped round\r\nthe edges of the sole in order to remove crusted mud from it.\r\nHence, you see, my double deduction that you had been out in vile\r\nweather, and that you had a particularly malignant boot-slitting\r\nspecimen of the London slavey. As to your practice, if a\r\ngentleman walks into my rooms smelling of iodoform, with a black\r\nmark of nitrate of silver upon his right forefinger, and a bulge\r\non the right side of his top-hat to show where he has secreted\r\nhis stethoscope, I must be dull, indeed, if I do not pronounce\r\nhim to be an active member of the medical profession.\"\r\n\r\nI could not help laughing at the ease with which he explained his\r\nprocess of deduction. \"When I hear you give your reasons,\" I\r\nremarked, \"the thing always appears to me to be so ridiculously\r\nsimple that I could easily do it myself, though at each\r\nsuccessive instance of your reasoning I am baffled until you\r\nexplain your process. And yet I believe that my eyes are as good\r\nas yours.\"\r\n\r\n\"Quite so,\" he answered, lighting a cigarette, and throwing\r\nhimself down into an armchair. \"You see, but you do not observe.\r\nThe distinction is clear. For example, you have frequently seen\r\nthe steps which lead up from the hall to this room.\"\r\n\r\n\"Frequently.\"\r\n\r\n\"How often?\"\r\n\r\n\"Well, some hundreds of times.\"\r\n\r\n\"Then how many are there?\"\r\n\r\n\"How many? I don't know.\"\r\n\r\n\"Quite so! You have not observed. And yet you have seen. That is\r\njust my point. Now, I know that there are seventeen steps,\r\nbecause I have both seen and observed. By-the-way, since you are\r\ninterested in these little problems, and since you are good\r\nenough to chronicle one or two of my trifling experiences, you\r\nmay be interested in this.\" He threw over a sheet of thick,\r\npink-tinted note-paper which had been lying open upon the table.\r\n\"It came by the last post,\" said he. \"Read it aloud.\"\r\n\r\nThe note was undated, and without either signature or address.\r\n\r\n\"There will call upon you to-night, at a quarter to eight\r\no'clock,\" it said, \"a gentleman who desires to consult you upon a\r\nmatter of the very deepest moment. Your recent services to one of\r\nthe royal houses of Europe have shown that you are one who may\r\nsafely be trusted with matters which are of an importance which\r\ncan hardly be exaggerated. This account of you we have from all\r\nquarters received. Be in your chamber then at that hour, and do\r\nnot take it amiss if your visitor wear a mask.\"\r\n\r\n\"This is indeed a mystery,\" I remarked. \"What do you imagine that\r\nit means?\"\r\n\r\n\"I have no data yet. It is a capital mistake to theorize before\r\none has data. Insensibly one begins to twist facts to suit\r\ntheories, instead of theories to suit facts. But the note itself.\r\nWhat do you deduce from it?\"\r\n\r\nI carefully examined the writing, and the paper upon which it was\r\nwritten.\r\n\r\n\"The man who wrote it was presumably well to do,\" I remarked,\r\nendeavouring to imitate my companion's processes. \"Such paper\r\ncould not be bought under half a crown a packet. It is peculiarly\r\nstrong and stiff.\"\r\n\r\n\"Peculiar--that is the very word,\" said Holmes. \"It is not an\r\nEnglish paper at all. Hold it up to the light.\"\r\n\r\nI did so, and saw a large \"E\" with a small \"g,\" a \"P,\" and a\r\nlarge \"G\" with a small \"t\" woven into the texture of the paper.\r\n\r\n\"What do you make of that?\" asked Holmes.\r\n\r\n\"The name of the maker, no doubt; or his monogram, rather.\"\r\n\r\n\"Not at all. The 'G' with the small 't' stands for\r\n'Gesellschaft,' which is the German for 'Company.' It is a\r\ncustomary contraction like our 'Co.' 'P,' of course, stands for\r\n'Papier.' Now for the 'Eg.' Let us glance at our Continental\r\nGazetteer.\" He took down a heavy brown volume from his shelves.\r\n\"Eglow, Eglonitz--here we are, Egria. It is in a German-speaking\r\ncountry--in Bohemia, not far from Carlsbad. 'Remarkable as being\r\nthe scene of the death of Wallenstein, and for its numerous\r\nglass-factories and paper-mills.' Ha, ha, my boy, what do you\r\nmake of that?\" His eyes sparkled, and he sent up a great blue\r\ntriumphant cloud from his cigarette.\r\n\r\n\"The paper was made in Bohemia,\" I said.\r\n\r\n\"Precisely. And the man who wrote the note is a German. Do you\r\nnote the peculiar construction of the sentence--'This account of\r\nyou we have from all quarters received.' A Frenchman or Russian\r\ncould not have written that. It is the German who is so\r\nuncourteous to his verbs. It only remains, therefore, to discover\r\nwhat is wanted by this German who writes upon Bohemian paper and\r\nprefers wearing a mask to showing his face. And here he comes, if\r\nI am not mistaken, to resolve all our doubts.\"\r\n\r\nAs he spoke there was the sharp sound of horses' hoofs and\r\ngrating wheels against the curb, followed by a sharp pull at the\r\nbell. Holmes whistled.\r\n\r\n\"A pair, by the sound,\" said he. \"Yes,\" he continued, glancing\r\nout of the window. \"A nice little brougham and a pair of\r\nbeauties. A hundred and fifty guineas apiece. There's money in\r\nthis case, Watson, if there is nothing else.\"\r\n\r\n\"I think that I had better go, Holmes.\"\r\n\r\n\"Not a bit, Doctor. Stay where you are. I am lost without my\r\nBoswell. And this promises to be interesting. It would be a pity\r\nto miss it.\"\r\n\r\n\"But your client--\"\r\n\r\n\"Never mind him. I may want your help, and so may he. Here he\r\ncomes. Sit down in that armchair, Doctor, and give us your best\r\nattention.\"\r\n\r\nA slow and heavy step, which had been heard upon the stairs and\r\nin the passage, paused immediately outside the door. Then there\r\nwas a loud and authoritative tap.\r\n\r\n\"Come in!\" said Holmes.\r\n\r\nA man entered who could hardly have been less than six feet six\r\ninches in height, with the chest and limbs of a Hercules. His\r\ndress was rich with a richness which would, in England, be looked\r\nupon as akin to bad taste. Heavy bands of astrakhan were slashed\r\nacross the sleeves and fronts of his double-breasted coat, while\r\nthe deep blue cloak which was thrown over his shoulders was lined\r\nwith flame-coloured silk and secured at the neck with a brooch\r\nwhich consisted of a single flaming beryl. Boots which extended\r\nhalfway up his calves, and which were trimmed at the tops with\r\nrich brown fur, completed the impression of barbaric opulence\r\nwhich was suggested by his whole appearance. He carried a\r\nbroad-brimmed hat in his hand, while he wore across the upper\r\npart of his face, extending down past the cheekbones, a black\r\nvizard mask, which he had apparently adjusted that very moment,\r\nfor his hand was still raised to it as he entered. From the lower\r\npart of the face he appeared to be a man of strong character,\r\nwith a thick, hanging lip, and a long, straight chin suggestive\r\nof resolution pushed to the length of obstinacy.\r\n\r\n\"You had my note?\" he asked with a deep harsh voice and a\r\nstrongly marked German accent. \"I told you that I would call.\" He\r\nlooked from one to the other of us, as if uncertain which to\r\naddress.\r\n\r\n\"Pray take a seat,\" said Holmes. \"This is my friend and\r\ncolleague, Dr. Watson, who is occasionally good enough to help me\r\nin my cases. Whom have I the honour to address?\"\r\n\r\n\"You may address me as the Count Von Kramm, a Bohemian nobleman.\r\nI understand that this gentleman, your friend, is a man of honour\r\nand discretion, whom I may trust with a matter of the most\r\nextreme importance. If not, I should much prefer to communicate\r\nwith you alone.\"\r\n\r\nI rose to go, but Holmes caught me by the wrist and pushed me\r\nback into my chair. \"It is both, or none,\" said he. \"You may say\r\nbefore this gentleman anything which you may say to me.\"\r\n\r\nThe Count shrugged his broad shoulders. \"Then I must begin,\" said\r\nhe, \"by binding you both to absolute secrecy for two years; at\r\nthe end of that time the matter will be of no importance. At\r\npresent it is not too much to say that it is of such weight it\r\nmay have an influence upon European history.\"\r\n\r\n\"I promise,\" said Holmes.\r\n\r\n\"And I.\"\r\n\r\n\"You will excuse this mask,\" continued our strange visitor. \"The\r\naugust person who employs me wishes his agent to be unknown to\r\nyou, and I may confess at once that the title by which I have\r\njust called myself is not exactly my own.\"\r\n\r\n\"I was aware of it,\" said Holmes dryly.\r\n\r\n\"The circumstances are of great delicacy, and every precaution\r\nhas to be taken to quench what might grow to be an immense\r\nscandal and seriously compromise one of the reigning families of\r\nEurope. To speak plainly, the matter implicates the great House\r\nof Ormstein, hereditary kings of Bohemia.\"\r\n\r\n\"I was also aware of that,\" murmured Holmes, settling himself\r\ndown in his armchair and closing his eyes.\r\n\r\nOur visitor glanced with some apparent surprise at the languid,\r\nlounging figure of the man who had been no doubt depicted to him\r\nas the most incisive reasoner and most energetic agent in Europe.\r\nHolmes slowly reopened his eyes and looked impatiently at his\r\ngigantic client.\r\n\r\n\"If your Majesty would condescend to state your case,\" he\r\nremarked, \"I should be better able to advise you.\"\r\n\r\nThe man sprang from his chair and paced up and down the room in\r\nuncontrollable agitation. Then, with a gesture of desperation, he\r\ntore the mask from his face and hurled it upon the ground. \"You\r\nare right,\" he cried; \"I am the King. Why should I attempt to\r\nconceal it?\"\r\n\r\n\"Why, indeed?\" murmured Holmes. \"Your Majesty had not spoken\r\nbefore I was aware that I was addressing Wilhelm Gottsreich\r\nSigismond von Ormstein, Grand Duke of Cassel-Felstein, and\r\nhereditary King of Bohemia.\"\r\n\r\n\"But you can understand,\" said our strange visitor, sitting down\r\nonce more and passing his hand over his high white forehead, \"you\r\ncan understand that I am not accustomed to doing such business in\r\nmy own person. Yet the matter was so delicate that I could not\r\nconfide it to an agent without putting myself in his power. I\r\nhave come incognito from Prague for the purpose of consulting\r\nyou.\"\r\n\r\n\"Then, pray consult,\" said Holmes, shutting his eyes once more.\r\n\r\n\"The facts are briefly these: Some five years ago, during a\r\nlengthy visit to Warsaw, I made the acquaintance of the well-known\r\nadventuress, Irene Adler. The name is no doubt familiar to you.\"\r\n\r\n\"Kindly look her up in my index, Doctor,\" murmured Holmes without\r\nopening his eyes. For many years he had adopted a system of\r\ndocketing all paragraphs concerning men and things, so that it\r\nwas difficult to name a subject or a person on which he could not\r\nat once furnish information. In this case I found her biography\r\nsandwiched in between that of a Hebrew rabbi and that of a\r\nstaff-commander who had written a monograph upon the deep-sea\r\nfishes.\r\n\r\n\"Let me see!\" said Holmes. \"Hum! Born in New Jersey in the year\r\n1858. Contralto--hum! La Scala, hum! Prima donna Imperial Opera\r\nof Warsaw--yes! Retired from operatic stage--ha! Living in\r\nLondon--quite so! Your Majesty, as I understand, became entangled\r\nwith this young person, wrote her some compromising letters, and\r\nis now desirous of getting those letters back.\"\r\n\r\n\"Precisely so. But how--\"\r\n\r\n\"Was there a secret marriage?\"\r\n\r\n\"None.\"\r\n\r\n\"No legal papers or certificates?\"\r\n\r\n\"None.\"\r\n\r\n\"Then I fail to follow your Majesty. If this young person should\r\nproduce her letters for blackmailing or other purposes, how is\r\nshe to prove their authenticity?\"\r\n\r\n\"There is the writing.\"\r\n\r\n\"Pooh, pooh! Forgery.\"\r\n\r\n\"My private note-paper.\"\r\n\r\n\"Stolen.\"\r\n\r\n\"My own seal.\"\r\n\r\n\"Imitated.\"\r\n\r\n\"My photograph.\"\r\n\r\n\"Bought.\"\r\n\r\n\"We were both in the photograph.\"\r\n\r\n\"Oh, dear! That is very bad! Your Majesty has indeed committed an\r\nindiscretion.\"\r\n\r\n\"I was mad--insane.\"\r\n\r\n\"You have compromised yourself seriously.\"\r\n\r\n\"I was only Crown Prince then. I was young. I am but thirty now.\"\r\n\r\n\"It must be recovered.\"\r\n\r\n\"We have tried and failed.\"\r\n\r\n\"Your Majesty must pay. It must be bought.\"\r\n\r\n\"She will not sell.\"\r\n\r\n\"Stolen, then.\"\r\n\r\n\"Five attempts have been made. Twice burglars in my pay ransacked\r\nher house. Once we diverted her luggage when she travelled. Twice\r\nshe has been waylaid. There has been no result.\"\r\n\r\n\"No sign of it?\"\r\n\r\n\"Absolutely none.\"\r\n\r\nHolmes laughed. \"It is quite a pretty little problem,\" said he.\r\n\r\n\"But a very serious one to me,\" returned the King reproachfully.\r\n\r\n\"Very, indeed. And what does she propose to do with the\r\nphotograph?\"\r\n\r\n\"To ruin me.\"\r\n\r\n\"But how?\"\r\n\r\n\"I am about to be married.\"\r\n\r\n\"So I have heard.\"\r\n\r\n\"To Clotilde Lothman von Saxe-Meningen, second daughter of the\r\nKing of Scandinavia. You may know the strict principles of her\r\nfamily. She is herself the very soul of delicacy. A shadow of a\r\ndoubt as to my conduct would bring the matter to an end.\"\r\n\r\n\"And Irene Adler?\"\r\n\r\n\"Threatens to send them the photograph. And she will do it. I\r\nknow that she will do it. You do not know her, but she has a soul\r\nof steel. She has the face of the most beautiful of women, and\r\nthe mind of the most resolute of men. Rather than I should marry\r\nanother woman, there are no lengths to which she would not\r\ngo--none.\"\r\n\r\n\"You are sure that she has not sent it yet?\"\r\n\r\n\"I am sure.\"\r\n\r\n\"And why?\"\r\n\r\n\"Because she has said that she would send it on the day when the\r\nbetrothal was publicly proclaimed. That will be next Monday.\"\r\n\r\n\"Oh, then we have three days yet,\" said Holmes with a yawn. \"That\r\nis very fortunate, as I have one or two matters of importance to\r\nlook into just at present. Your Majesty will, of course, stay in\r\nLondon for the present?\"\r\n\r\n\"Certainly. You will find me at the Langham under the name of the\r\nCount Von Kramm.\"\r\n\r\n\"Then I shall drop you a line to let you know how we progress.\"\r\n\r\n\"Pray do so. I shall be all anxiety.\"\r\n\r\n\"Then, as to money?\"\r\n\r\n\"You have carte blanche.\"\r\n\r\n\"Absolutely?\"\r\n\r\n\"I tell you that I would give one of the provinces of my kingdom\r\nto have that photograph.\"\r\n\r\n\"And for present expenses?\"\r\n\r\nThe King took a heavy chamois leather bag from under his cloak\r\nand laid it on the table.\r\n\r\n\"There are three hundred pounds in gold and seven hundred in\r\nnotes,\" he said.\r\n\r\nHolmes scribbled a receipt upon a sheet of his note-book and\r\nhanded it to him.\r\n\r\n\"And Mademoiselle's address?\" he asked.\r\n\r\n\"Is Briony Lodge, Serpentine Avenue, St. John's Wood.\"\r\n\r\nHolmes took a note of it. \"One other question,\" said he. \"Was the\r\nphotograph a cabinet?\"\r\n\r\n\"It was.\"\r\n\r\n\"Then, good-night, your Majesty, and I trust that we shall soon\r\nhave some good news for you. And good-night, Watson,\" he added,\r\nas the wheels of the royal brougham rolled down the street. \"If\r\nyou will be good enough to call to-morrow afternoon at three\r\no'clock I should like to chat this little matter over with you.\"\r\n\r\n\r\nII.\r\n\r\nAt three o'clock precisely I was at Baker Street, but Holmes had\r\nnot yet returned. The landlady informed me that he had left the\r\nhouse shortly after eight o'clock in the morning. I sat down\r\nbeside the fire, however, with the intention of awaiting him,\r\nhowever long he might be. I was already deeply interested in his\r\ninquiry, for, though it was surrounded by none of the grim and\r\nstrange features which were associated with the two crimes which\r\nI have already recorded, still, the nature of the case and the\r\nexalted station of his client gave it a character of its own.\r\nIndeed, apart from the nature of the investigation which my\r\nfriend had on hand, there was something in his masterly grasp of\r\na situation, and his keen, incisive reasoning, which made it a\r\npleasure to me to study his system of work, and to follow the\r\nquick, subtle methods by which he disentangled the most\r\ninextricable mysteries. So accustomed was I to his invariable\r\nsuccess that the very possibility of his failing had ceased to\r\nenter into my head.\r\n\r\nIt was close upon four before the door opened, and a\r\ndrunken-looking groom, ill-kempt and side-whiskered, with an\r\ninflamed face and disreputable clothes, walked into the room.\r\nAccustomed as I was to my friend's amazing powers in the use of\r\ndisguises, I had to look three times before I was certain that it\r\nwas indeed he. With a nod he vanished into the bedroom, whence he\r\nemerged in five minutes tweed-suited and respectable, as of old.\r\nPutting his hands into his pockets, he stretched out his legs in\r\nfront of the fire and laughed heartily for some minutes.\r\n\r\n\"Well, really!\" he cried, and then he choked and laughed again\r\nuntil he was obliged to lie back, limp and helpless, in the\r\nchair.\r\n\r\n\"What is it?\"\r\n\r\n\"It's quite too funny. I am sure you could never guess how I\r\nemployed my morning, or what I ended by doing.\"\r\n\r\n\"I can't imagine. I suppose that you have been watching the\r\nhabits, and perhaps the house, of Miss Irene Adler.\"\r\n\r\n\"Quite so; but the sequel was rather unusual. I will tell you,\r\nhowever. I left the house a little after eight o'clock this\r\nmorning in the character of a groom out of work. There is a\r\nwonderful sympathy and freemasonry among horsey men. Be one of\r\nthem, and you will know all that there is to know. I soon found\r\nBriony Lodge. It is a bijou villa, with a garden at the back, but\r\nbuilt out in front right up to the road, two stories. Chubb lock\r\nto the door. Large sitting-room on the right side, well\r\nfurnished, with long windows almost to the floor, and those\r\npreposterous English window fasteners which a child could open.\r\nBehind there was nothing remarkable, save that the passage window\r\ncould be reached from the top of the coach-house. I walked round\r\nit and examined it closely from every point of view, but without\r\nnoting anything else of interest.\r\n\r\n\"I then lounged down the street and found, as I expected, that\r\nthere was a mews in a lane which runs down by one wall of the\r\ngarden. I lent the ostlers a hand in rubbing down their horses,\r\nand received in exchange twopence, a glass of half and half, two\r\nfills of shag tobacco, and as much information as I could desire\r\nabout Miss Adler, to say nothing of half a dozen other people in\r\nthe neighbourhood in whom I was not in the least interested, but\r\nwhose biographies I was compelled to listen to.\"\r\n\r\n\"And what of Irene Adler?\" I asked.\r\n\r\n\"Oh, she has turned all the men's heads down in that part. She is\r\nthe daintiest thing under a bonnet on this planet. So say the\r\nSerpentine-mews, to a man. She lives quietly, sings at concerts,\r\ndrives out at five every day, and returns at seven sharp for\r\ndinner. Seldom goes out at other times, except when she sings.\r\nHas only one male visitor, but a good deal of him. He is dark,\r\nhandsome, and dashing, never calls less than once a day, and\r\noften twice. He is a Mr. Godfrey Norton, of the Inner Temple. See\r\nthe advantages of a cabman as a confidant. They had driven him\r\nhome a dozen times from Serpentine-mews, and knew all about him.\r\nWhen I had listened to all they had to tell, I began to walk up\r\nand down near Briony Lodge once more, and to think over my plan\r\nof campaign.\r\n\r\n\"This Godfrey Norton was evidently an important factor in the\r\nmatter. He was a lawyer. That sounded ominous. What was the\r\nrelation between them, and what the object of his repeated\r\nvisits? Was she his client, his friend, or his mistress? If the\r\nformer, she had probably transferred the photograph to his\r\nkeeping. If the latter, it was less likely. On the issue of this\r\nquestion depended whether I should continue my work at Briony\r\nLodge, or turn my attention to the gentleman's chambers in the\r\nTemple. It was a delicate point, and it widened the field of my\r\ninquiry. I fear that I bore you with these details, but I have to\r\nlet you see my little difficulties, if you are to understand the\r\nsituation.\"\r\n\r\n\"I am following you closely,\" I answered.\r\n\r\n\"I was still balancing the matter in my mind when a hansom cab\r\ndrove up to Briony Lodge, and a gentleman sprang out. He was a\r\nremarkably handsome man, dark, aquiline, and moustached--evidently\r\nthe man of whom I had heard. He appeared to be in a\r\ngreat hurry, shouted to the cabman to wait, and brushed past the\r\nmaid who opened the door with the air of a man who was thoroughly\r\nat home.\r\n\r\n\"He was in the house about half an hour, and I could catch\r\nglimpses of him in the windows of the sitting-room, pacing up and\r\ndown, talking excitedly, and waving his arms. Of her I could see\r\nnothing. Presently he emerged, looking even more flurried than\r\nbefore. As he stepped up to the cab, he pulled a gold watch from\r\nhis pocket and looked at it earnestly, 'Drive like the devil,' he\r\nshouted, 'first to Gross & Hankey's in Regent Street, and then to\r\nthe Church of St. Monica in the Edgeware Road. Half a guinea if\r\nyou do it in twenty minutes!'\r\n\r\n\"Away they went, and I was just wondering whether I should not do\r\nwell to follow them when up the lane came a neat little landau,\r\nthe coachman with his coat only half-buttoned, and his tie under\r\nhis ear, while all the tags of his harness were sticking out of\r\nthe buckles. It hadn't pulled up before she shot out of the hall\r\ndoor and into it. I only caught a glimpse of her at the moment,\r\nbut she was a lovely woman, with a face that a man might die for.\r\n\r\n\"'The Church of St. Monica, John,' she cried, 'and half a\r\nsovereign if you reach it in twenty minutes.'\r\n\r\n\"This was quite too good to lose, Watson. I was just balancing\r\nwhether I should run for it, or whether I should perch behind her\r\nlandau when a cab came through the street. The driver looked\r\ntwice at such a shabby fare, but I jumped in before he could\r\nobject. 'The Church of St. Monica,' said I, 'and half a sovereign\r\nif you reach it in twenty minutes.' It was twenty-five minutes to\r\ntwelve, and of course it was clear enough what was in the wind.\r\n\r\n\"My cabby drove fast. I don't think I ever drove faster, but the\r\nothers were there before us. The cab and the landau with their\r\nsteaming horses were in front of the door when I arrived. I paid\r\nthe man and hurried into the church. There was not a soul there\r\nsave the two whom I had followed and a surpliced clergyman, who\r\nseemed to be expostulating with them. They were all three\r\nstanding in a knot in front of the altar. I lounged up the side\r\naisle like any other idler who has dropped into a church.\r\nSuddenly, to my surprise, the three at the altar faced round to\r\nme, and Godfrey Norton came running as hard as he could towards\r\nme.\r\n\r\n\"'Thank God,' he cried. 'You'll do. Come! Come!'\r\n\r\n\"'What then?' I asked.\r\n\r\n\"'Come, man, come, only three minutes, or it won't be legal.'\r\n\r\n\"I was half-dragged up to the altar, and before I knew where I was\r\nI found myself mumbling responses which were whispered in my ear,\r\nand vouching for things of which I knew nothing, and generally\r\nassisting in the secure tying up of Irene Adler, spinster, to\r\nGodfrey Norton, bachelor. It was all done in an instant, and\r\nthere was the gentleman thanking me on the one side and the lady\r\non the other, while the clergyman beamed on me in front. It was\r\nthe most preposterous position in which I ever found myself in my\r\nlife, and it was the thought of it that started me laughing just\r\nnow. It seems that there had been some informality about their\r\nlicense, that the clergyman absolutely refused to marry them\r\nwithout a witness of some sort, and that my lucky appearance\r\nsaved the bridegroom from having to sally out into the streets in\r\nsearch of a best man. The bride gave me a sovereign, and I mean\r\nto wear it on my watch-chain in memory of the occasion.\"\r\n\r\n\"This is a very unexpected turn of affairs,\" said I; \"and what\r\nthen?\"\r\n\r\n\"Well, I found my plans very seriously menaced. It looked as if\r\nthe pair might take an immediate departure, and so necessitate\r\nvery prompt and energetic measures on my part. At the church\r\ndoor, however, they separated, he driving back to the Temple, and\r\nshe to her own house. 'I shall drive out in the park at five as\r\nusual,' she said as she left him. I heard no more. They drove\r\naway in different directions, and I went off to make my own\r\narrangements.\"\r\n\r\n\"Which are?\"\r\n\r\n\"Some cold beef and a glass of beer,\" he answered, ringing the\r\nbell. \"I have been too busy to think of food, and I am likely to\r\nbe busier still this evening. By the way, Doctor, I shall want\r\nyour co-operation.\"\r\n\r\n\"I shall be delighted.\"\r\n\r\n\"You don't mind breaking the law?\"\r\n\r\n\"Not in the least.\"\r\n\r\n\"Nor running a chance of arrest?\"\r\n\r\n\"Not in a good cause.\"\r\n\r\n\"Oh, the cause is excellent!\"\r\n\r\n\"Then I am your man.\"\r\n\r\n\"I was sure that I might rely on you.\"\r\n\r\n\"But what is it you wish?\"\r\n\r\n\"When Mrs. Turner has brought in the tray I will make it clear to\r\nyou. Now,\" he said as he turned hungrily on the simple fare that\r\nour landlady had provided, \"I must discuss it while I eat, for I\r\nhave not much time. It is nearly five now. In two hours we must\r\nbe on the scene of action. Miss Irene, or Madame, rather, returns\r\nfrom her drive at seven. We must be at Briony Lodge to meet her.\"\r\n\r\n\"And what then?\"\r\n\r\n\"You must leave that to me. I have already arranged what is to\r\noccur. There is only one point on which I must insist. You must\r\nnot interfere, come what may. You understand?\"\r\n\r\n\"I am to be neutral?\"\r\n\r\n\"To do nothing whatever. There will probably be some small\r\nunpleasantness. Do not join in it. It will end in my being\r\nconveyed into the house. Four or five minutes afterwards the\r\nsitting-room window will open. You are to station yourself close\r\nto that open window.\"\r\n\r\n\"Yes.\"\r\n\r\n\"You are to watch me, for I will be visible to you.\"\r\n\r\n\"Yes.\"\r\n\r\n\"And when I raise my hand--so--you will throw into the room what\r\nI give you to throw, and will, at the same time, raise the cry of\r\nfire. You quite follow me?\"\r\n\r\n\"Entirely.\"\r\n\r\n\"It is nothing very formidable,\" he said, taking a long cigar-shaped\r\nroll from his pocket. \"It is an ordinary plumber's smoke-rocket,\r\nfitted with a cap at either end to make it self-lighting.\r\nYour task is confined to that. When you raise your cry of fire,\r\nit will be taken up by quite a number of people. You may then\r\nwalk to the end of the street, and I will rejoin you in ten\r\nminutes. I hope that I have made myself clear?\"\r\n\r\n\"I am to remain neutral, to get near the window, to watch you,\r\nand at the signal to throw in this object, then to raise the cry\r\nof fire, and to wait you at the corner of the street.\"\r\n\r\n\"Precisely.\"\r\n\r\n\"Then you may entirely rely on me.\"\r\n\r\n\"That is excellent. I think, perhaps, it is almost time that I\r\nprepare for the new role I have to play.\"\r\n\r\nHe disappeared into his bedroom and returned in a few minutes in\r\nthe character of an amiable and simple-minded Nonconformist\r\nclergyman. His broad black hat, his baggy trousers, his white\r\ntie, his sympathetic smile, and general look of peering and\r\nbenevolent curiosity were such as Mr. John Hare alone could have\r\nequalled. It was not merely that Holmes changed his costume. His\r\nexpression, his manner, his very soul seemed to vary with every\r\nfresh part that he assumed. The stage lost a fine actor, even as\r\nscience lost an acute reasoner, when he became a specialist in\r\ncrime.\r\n\r\nIt was a quarter past six when we left Baker Street, and it still\r\nwanted ten minutes to the hour when we found ourselves in\r\nSerpentine Avenue. It was already dusk, and the lamps were just\r\nbeing lighted as we paced up and down in front of Briony Lodge,\r\nwaiting for the coming of its occupant. The house was just such\r\nas I had pictured it from Sherlock Holmes' succinct description,\r\nbut the locality appeared to be less private than I expected. On\r\nthe contrary, for a small street in a quiet neighbourhood, it was\r\nremarkably animated. There was a group of shabbily dressed men\r\nsmoking and laughing in a corner, a scissors-grinder with his\r\nwheel, two guardsmen who were flirting with a nurse-girl, and\r\nseveral well-dressed young men who were lounging up and down with\r\ncigars in their mouths.\r\n\r\n\"You see,\" remarked Holmes, as we paced to and fro in front of\r\nthe house, \"this marriage rather simplifies matters. The\r\nphotograph becomes a double-edged weapon now. The chances are\r\nthat she would be as averse to its being seen by Mr. Godfrey\r\nNorton, as our client is to its coming to the eyes of his\r\nprincess. Now the question is, Where are we to find the\r\nphotograph?\"\r\n\r\n\"Where, indeed?\"\r\n\r\n\"It is most unlikely that she carries it about with her. It is\r\ncabinet size. Too large for easy concealment about a woman's\r\ndress. She knows that the King is capable of having her waylaid\r\nand searched. Two attempts of the sort have already been made. We\r\nmay take it, then, that she does not carry it about with her.\"\r\n\r\n\"Where, then?\"\r\n\r\n\"Her banker or her lawyer. There is that double possibility. But\r\nI am inclined to think neither. Women are naturally secretive,\r\nand they like to do their own secreting. Why should she hand it\r\nover to anyone else? She could trust her own guardianship, but\r\nshe could not tell what indirect or political influence might be\r\nbrought to bear upon a business man. Besides, remember that she\r\nhad resolved to use it within a few days. It must be where she\r\ncan lay her hands upon it. It must be in her own house.\"\r\n\r\n\"But it has twice been burgled.\"\r\n\r\n\"Pshaw! They did not know how to look.\"\r\n\r\n\"But how will you look?\"\r\n\r\n\"I will not look.\"\r\n\r\n\"What then?\"\r\n\r\n\"I will get her to show me.\"\r\n\r\n\"But she will refuse.\"\r\n\r\n\"She will not be able to. But I hear the rumble of wheels. It is\r\nher carriage. Now carry out my orders to the letter.\"\r\n\r\nAs he spoke the gleam of the side-lights of a carriage came round\r\nthe curve of the avenue. It was a smart little landau which\r\nrattled up to the door of Briony Lodge. As it pulled up, one of\r\nthe loafing men at the corner dashed forward to open the door in\r\nthe hope of earning a copper, but was elbowed away by another\r\nloafer, who had rushed up with the same intention. A fierce\r\nquarrel broke out, which was increased by the two guardsmen, who\r\ntook sides with one of the loungers, and by the scissors-grinder,\r\nwho was equally hot upon the other side. A blow was struck, and\r\nin an instant the lady, who had stepped from her carriage, was\r\nthe centre of a little knot of flushed and struggling men, who\r\nstruck savagely at each other with their fists and sticks. Holmes\r\ndashed into the crowd to protect the lady; but just as he reached\r\nher he gave a cry and dropped to the ground, with the blood\r\nrunning freely down his face. At his fall the guardsmen took to\r\ntheir heels in one direction and the loungers in the other, while\r\na number of better-dressed people, who had watched the scuffle\r\nwithout taking part in it, crowded in to help the lady and to\r\nattend to the injured man. Irene Adler, as I will still call her,\r\nhad hurried up the steps; but she stood at the top with her\r\nsuperb figure outlined against the lights of the hall, looking\r\nback into the street.\r\n\r\n\"Is the poor gentleman much hurt?\" she asked.\r\n\r\n\"He is dead,\" cried several voices.\r\n\r\n\"No, no, there's life in him!\" shouted another. \"But he'll be\r\ngone before you can get him to hospital.\"\r\n\r\n\"He's a brave fellow,\" said a woman. \"They would have had the\r\nlady's purse and watch if it hadn't been for him. They were a\r\ngang, and a rough one, too. Ah, he's breathing now.\"\r\n\r\n\"He can't lie in the street. May we bring him in, marm?\"\r\n\r\n\"Surely. Bring him into the sitting-room. There is a comfortable\r\nsofa. This way, please!\"\r\n\r\nSlowly and solemnly he was borne into Briony Lodge and laid out\r\nin the principal room, while I still observed the proceedings\r\nfrom my post by the window. The lamps had been lit, but the\r\nblinds had not been drawn, so that I could see Holmes as he lay\r\nupon the couch. I do not know whether he was seized with\r\ncompunction at that moment for the part he was playing, but I\r\nknow that I never felt more heartily ashamed of myself in my life\r\nthan when I saw the beautiful creature against whom I was\r\nconspiring, or the grace and kindliness with which she waited\r\nupon the injured man. And yet it would be the blackest treachery\r\nto Holmes to draw back now from the part which he had intrusted\r\nto me. I hardened my heart, and took the smoke-rocket from under\r\nmy ulster. After all, I thought, we are not injuring her. We are\r\nbut preventing her from injuring another.\r\n\r\nHolmes had sat up upon the couch, and I saw him motion like a man\r\nwho is in need of air. A maid rushed across and threw open the\r\nwindow. At the same instant I saw him raise his hand and at the\r\nsignal I tossed my rocket into the room with a cry of \"Fire!\" The\r\nword was no sooner out of my mouth than the whole crowd of\r\nspectators, well dressed and ill--gentlemen, ostlers, and\r\nservant-maids--joined in a general shriek of \"Fire!\" Thick clouds\r\nof smoke curled through the room and out at the open window. I\r\ncaught a glimpse of rushing figures, and a moment later the voice\r\nof Holmes from within assuring them that it was a false alarm.\r\nSlipping through the shouting crowd I made my way to the corner\r\nof the street, and in ten minutes was rejoiced to find my\r\nfriend's arm in mine, and to get away from the scene of uproar.\r\nHe walked swiftly and in silence for some few minutes until we\r\nhad turned down one of the quiet streets which lead towards the\r\nEdgeware Road.\r\n\r\n\"You did it very nicely, Doctor,\" he remarked. \"Nothing could\r\nhave been better. It is all right.\"\r\n\r\n\"You have the photograph?\"\r\n\r\n\"I know where it is.\"\r\n\r\n\"And how did you find out?\"\r\n\r\n\"She showed me, as I told you she would.\"\r\n\r\n\"I am still in the dark.\"\r\n\r\n\"I do not wish to make a mystery,\" said he, laughing. \"The matter\r\nwas perfectly simple. You, of course, saw that everyone in the\r\nstreet was an accomplice. They were all engaged for the evening.\"\r\n\r\n\"I guessed as much.\"\r\n\r\n\"Then, when the row broke out, I had a little moist red paint in\r\nthe palm of my hand. I rushed forward, fell down, clapped my hand\r\nto my face, and became a piteous spectacle. It is an old trick.\"\r\n\r\n\"That also I could fathom.\"\r\n\r\n\"Then they carried me in. She was bound to have me in. What else\r\ncould she do? And into her sitting-room, which was the very room\r\nwhich I suspected. It lay between that and her bedroom, and I was\r\ndetermined to see which. They laid me on a couch, I motioned for\r\nair, they were compelled to open the window, and you had your\r\nchance.\"\r\n\r\n\"How did that help you?\"\r\n\r\n\"It was all-important. When a woman thinks that her house is on\r\nfire, her instinct is at once to rush to the thing which she\r\nvalues most. It is a perfectly overpowering impulse, and I have\r\nmore than once taken advantage of it. In the case of the\r\nDarlington substitution scandal it was of use to me, and also in\r\nthe Arnsworth Castle business. A married woman grabs at her baby;\r\nan unmarried one reaches for her jewel-box. Now it was clear to\r\nme that our lady of to-day had nothing in the house more precious\r\nto her than what we are in quest of. She would rush to secure it.\r\nThe alarm of fire was admirably done. The smoke and shouting were\r\nenough to shake nerves of steel. She responded beautifully. The\r\nphotograph is in a recess behind a sliding panel just above the\r\nright bell-pull. She was there in an instant, and I caught a\r\nglimpse of it as she half-drew it out. When I cried out that it\r\nwas a false alarm, she replaced it, glanced at the rocket, rushed\r\nfrom the room, and I have not seen her since. I rose, and, making\r\nmy excuses, escaped from the house. I hesitated whether to\r\nattempt to secure the photograph at once; but the coachman had\r\ncome in, and as he was watching me narrowly it seemed safer to\r\nwait. A little over-precipitance may ruin all.\"\r\n\r\n\"And now?\" I asked.\r\n\r\n\"Our quest is practically finished. I shall call with the King\r\nto-morrow, and with you, if you care to come with us. We will be\r\nshown into the sitting-room to wait for the lady, but it is\r\nprobable that when she comes she may find neither us nor the\r\nphotograph. It might be a satisfaction to his Majesty to regain\r\nit with his own hands.\"\r\n\r\n\"And when will you call?\"\r\n\r\n\"At eight in the morning. She will not be up, so that we shall\r\nhave a clear field. Besides, we must be prompt, for this marriage\r\nmay mean a complete change in her life and habits. I must wire to\r\nthe King without delay.\"\r\n\r\nWe had reached Baker Street and had stopped at the door. He was\r\nsearching his pockets for the key when someone passing said:\r\n\r\n\"Good-night, Mister Sherlock Holmes.\"\r\n\r\nThere were several people on the pavement at the time, but the\r\ngreeting appeared to come from a slim youth in an ulster who had\r\nhurried by.\r\n\r\n\"I've heard that voice before,\" said Holmes, staring down the\r\ndimly lit street. \"Now, I wonder who the deuce that could have\r\nbeen.\"\r\n\r\n\r\nIII.\r\n\r\nI slept at Baker Street that night, and we were engaged upon our\r\ntoast and coffee in the morning when the King of Bohemia rushed\r\ninto the room.\r\n\r\n\"You have really got it!\" he cried, grasping Sherlock Holmes by\r\neither shoulder and looking eagerly into his face.\r\n\r\n\"Not yet.\"\r\n\r\n\"But you have hopes?\"\r\n\r\n\"I have hopes.\"\r\n\r\n\"Then, come. I am all impatience to be gone.\"\r\n\r\n\"We must have a cab.\"\r\n\r\n\"No, my brougham is waiting.\"\r\n\r\n\"Then that will simplify matters.\" We descended and started off\r\nonce more for Briony Lodge.\r\n\r\n\"Irene Adler is married,\" remarked Holmes.\r\n\r\n\"Married! When?\"\r\n\r\n\"Yesterday.\"\r\n\r\n\"But to whom?\"\r\n\r\n\"To an English lawyer named Norton.\"\r\n\r\n\"But she could not love him.\"\r\n\r\n\"I am in hopes that she does.\"\r\n\r\n\"And why in hopes?\"\r\n\r\n\"Because it would spare your Majesty all fear of future\r\nannoyance. If the lady loves her husband, she does not love your\r\nMajesty. If she does not love your Majesty, there is no reason\r\nwhy she should interfere with your Majesty's plan.\"\r\n\r\n\"It is true. And yet--Well! I wish she had been of my own\r\nstation! What a queen she would have made!\" He relapsed into a\r\nmoody silence, which was not broken until we drew up in\r\nSerpentine Avenue.\r\n\r\nThe door of Briony Lodge was open, and an elderly woman stood\r\nupon the steps. She watched us with a sardonic eye as we stepped\r\nfrom the brougham.\r\n\r\n\"Mr. Sherlock Holmes, I believe?\" said she.\r\n\r\n\"I am Mr. Holmes,\" answered my companion, looking at her with a\r\nquestioning and rather startled gaze.\r\n\r\n\"Indeed! My mistress told me that you were likely to call. She\r\nleft this morning with her husband by the 5:15 train from Charing\r\nCross for the Continent.\"\r\n\r\n\"What!\" Sherlock Holmes staggered back, white with chagrin and\r\nsurprise. \"Do you mean that she has left England?\"\r\n\r\n\"Never to return.\"\r\n\r\n\"And the papers?\" asked the King hoarsely. \"All is lost.\"\r\n\r\n\"We shall see.\" He pushed past the servant and rushed into the\r\ndrawing-room, followed by the King and myself. The furniture was\r\nscattered about in every direction, with dismantled shelves and\r\nopen drawers, as if the lady had hurriedly ransacked them before\r\nher flight. Holmes rushed at the bell-pull, tore back a small\r\nsliding shutter, and, plunging in his hand, pulled out a\r\nphotograph and a letter. The photograph was of Irene Adler\r\nherself in evening dress, the letter was superscribed to\r\n\"Sherlock Holmes, Esq. To be left till called for.\" My friend\r\ntore it open and we all three read it together. It was dated at\r\nmidnight of the preceding night and ran in this way:\r\n\r\n\"MY DEAR MR. SHERLOCK HOLMES,--You really did it very well. You\r\ntook me in completely. Until after the alarm of fire, I had not a\r\nsuspicion. But then, when I found how I had betrayed myself, I\r\nbegan to think. I had been warned against you months ago. I had\r\nbeen told that if the King employed an agent it would certainly\r\nbe you. And your address had been given me. Yet, with all this,\r\nyou made me reveal what you wanted to know. Even after I became\r\nsuspicious, I found it hard to think evil of such a dear, kind\r\nold clergyman. But, you know, I have been trained as an actress\r\nmyself. Male costume is nothing new to me. I often take advantage\r\nof the freedom which it gives. I sent John, the coachman, to\r\nwatch you, ran up stairs, got into my walking-clothes, as I call\r\nthem, and came down just as you departed.\r\n\r\n\"Well, I followed you to your door, and so made sure that I was\r\nreally an object of interest to the celebrated Mr. Sherlock\r\nHolmes. Then I, rather imprudently, wished you good-night, and\r\nstarted for the Temple to see my husband.\r\n\r\n\"We both thought the best resource was flight, when pursued by\r\nso formidable an antagonist; so you will find the nest empty when\r\nyou call to-morrow. As to the photograph, your client may rest in\r\npeace. I love and am loved by a better man than he. The King may\r\ndo what he will without hindrance from one whom he has cruelly\r\nwronged. I keep it only to safeguard myself, and to preserve a\r\nweapon which will always secure me from any steps which he might\r\ntake in the future. I leave a photograph which he might care to\r\npossess; and I remain, dear Mr. Sherlock Holmes,\r\n\r\n                                      \"Very truly yours,\r\n                                   \"IRENE NORTON, née ADLER.\"\r\n\r\n\"What a woman--oh, what a woman!\" cried the King of Bohemia, when\r\nwe had all three read this epistle. \"Did I not tell you how quick\r\nand resolute she was? Would she not have made an admirable queen?\r\nIs it not a pity that she was not on my level?\"\r\n\r\n\"From what I have seen of the lady she seems indeed to be on a\r\nvery different level to your Majesty,\" said Holmes coldly. \"I am\r\nsorry that I have not been able to bring your Majesty's business\r\nto a more successful conclusion.\"\r\n\r\n\"On the contrary, my dear sir,\" cried the King; \"nothing could be\r\nmore successful. I know that her word is inviolate. The\r\nphotograph is now as safe as if it were in the fire.\"\r\n\r\n\"I am glad to hear your Majesty say so.\"\r\n\r\n\"I am immensely indebted to you. Pray tell me in what way I can\r\nreward you. This ring--\" He slipped an emerald snake ring from\r\nhis finger and held it out upon the palm of his hand.\r\n\r\n\"Your Majesty has something which I should value even more\r\nhighly,\" said Holmes.\r\n\r\n\"You have but to name it.\"\r\n\r\n\"This photograph!\"\r\n\r\nThe King stared at him in amazement.\r\n\r\n\"Irene's photograph!\" he cried. \"Certainly, if you wish it.\"\r\n\r\n\"I thank your Majesty. Then there is no more to be done in the\r\nmatter. I have the honour to wish you a very good-morning.\" He\r\nbowed, and, turning away without observing the hand which the\r\nKing had stretched out to him, he set off in my company for his\r\nchambers.\r\n\r\nAnd that was how a great scandal threatened to affect the kingdom\r\nof Bohemia, and how the best plans of Mr. Sherlock Holmes were\r\nbeaten by a woman's wit. He used to make merry over the\r\ncleverness of women, but I have not heard him do it of late. And\r\nwhen he speaks of Irene Adler, or when he refers to her\r\nphotograph, it is always under the honourable title of the woman.\r\n\r\n\r\n\r\nADVENTURE II. THE RED-HEADED LEAGUE\r\n\r\nI had called upon my friend, Mr. Sherlock Holmes, one day in the\r\nautumn of last year and found him in deep conversation with a\r\nvery stout, florid-faced, elderly gentleman with fiery red hair.\r\nWith an apology for my intrusion, I was about to withdraw when\r\nHolmes pulled me abruptly into the room and closed the door\r\nbehind me.\r\n\r\n\"You could not possibly have come at a better time, my dear\r\nWatson,\" he said cordially.\r\n\r\n\"I was afraid that you were engaged.\"\r\n\r\n\"So I am. Very much so.\"\r\n\r\n\"Then I can wait in the next room.\"\r\n\r\n\"Not at all. This gentleman, Mr. Wilson, has been my partner and\r\nhelper in many of my most successful cases, and I have no\r\ndoubt that he will be of the utmost use to me in yours also.\"\r\n\r\nThe stout gentleman half rose from his chair and gave a bob of\r\ngreeting, with a quick little questioning glance from his small\r\nfat-encircled eyes.\r\n\r\n\"Try the settee,\" said Holmes, relapsing into his armchair and\r\nputting his fingertips together, as was his custom when in\r\njudicial moods. \"I know, my dear Watson, that you share my love\r\nof all that is bizarre and outside the conventions and humdrum\r\nroutine of everyday life. You have shown your relish for it by\r\nthe enthusiasm which has prompted you to chronicle, and, if you\r\nwill excuse my saying so, somewhat to embellish so many of my own\r\nlittle adventures.\"\r\n\r\n\"Your cases have indeed been of the greatest interest to me,\" I\r\nobserved.\r\n\r\n\"You will remember that I remarked the other day, just before we\r\nwent into the very simple problem presented by Miss Mary\r\nSutherland, that for strange effects and extraordinary\r\ncombinations we must go to life itself, which is always far more\r\ndaring than any effort of the imagination.\"\r\n\r\n\"A proposition which I took the liberty of doubting.\"\r\n\r\n\"You did, Doctor, but none the less you must come round to my\r\nview, for otherwise I shall keep on piling fact upon fact on you\r\nuntil your reason breaks down under them and acknowledges me to\r\nbe right. Now, Mr. Jabez Wilson here has been good enough to call\r\nupon me this morning, and to begin a narrative which promises to\r\nbe one of the most singular which I have listened to for some\r\ntime. You have heard me remark that the strangest and most unique\r\nthings are very often connected not with the larger but with the\r\nsmaller crimes, and occasionally, indeed, where there is room for\r\ndoubt whether any positive crime has been committed. As far as I\r\nhave heard it is impossible for me to say whether the present\r\ncase is an instance of crime or not, but the course of events is\r\ncertainly among the most singular that I have ever listened to.\r\nPerhaps, Mr. Wilson, you would have the great kindness to\r\nrecommence your narrative. I ask you not merely because my friend\r\nDr. Watson has not heard the opening part but also because the\r\npeculiar nature of the story makes me anxious to have every\r\npossible detail from your lips. As a rule, when I have heard some\r\nslight indication of the course of events, I am able to guide\r\nmyself by the thousands of other similar cases which occur to my\r\nmemory. In the present instance I am forced to admit that the\r\nfacts are, to the best of my belief, unique.\"\r\n\r\nThe portly client puffed out his chest with an appearance of some\r\nlittle pride and pulled a dirty and wrinkled newspaper from the\r\ninside pocket of his greatcoat. As he glanced down the\r\nadvertisement column, with his head thrust forward and the paper\r\nflattened out upon his knee, I took a good look at the man and\r\nendeavoured, after the fashion of my companion, to read the\r\nindications which might be presented by his dress or appearance.\r\n\r\nI did not gain very much, however, by my inspection. Our visitor\r\nbore every mark of being an average commonplace British\r\ntradesman, obese, pompous, and slow. He wore rather baggy grey\r\nshepherd's check trousers, a not over-clean black frock-coat,\r\nunbuttoned in the front, and a drab waistcoat with a heavy brassy\r\nAlbert chain, and a square pierced bit of metal dangling down as\r\nan ornament. A frayed top-hat and a faded brown overcoat with a\r\nwrinkled velvet collar lay upon a chair beside him. Altogether,\r\nlook as I would, there was nothing remarkable about the man save\r\nhis blazing red head, and the expression of extreme chagrin and\r\ndiscontent upon his features.\r\n\r\nSherlock Holmes' quick eye took in my occupation, and he shook\r\nhis head with a smile as he noticed my questioning glances.\r\n\"Beyond the obvious facts that he has at some time done manual\r\nlabour, that he takes snuff, that he is a Freemason, that he has\r\nbeen in China, and that he has done a considerable amount of\r\nwriting lately, I can deduce nothing else.\"\r\n\r\nMr. Jabez Wilson started up in his chair, with his forefinger\r\nupon the paper, but his eyes upon my companion.\r\n\r\n\"How, in the name of good-fortune, did you know all that, Mr.\r\nHolmes?\" he asked. \"How did you know, for example, that I did\r\nmanual labour. It's as true as gospel, for I began as a ship's\r\ncarpenter.\"\r\n\r\n\"Your hands, my dear sir. Your right hand is quite a size larger\r\nthan your left. You have worked with it, and the muscles are more\r\ndeveloped.\"\r\n\r\n\"Well, the snuff, then, and the Freemasonry?\"\r\n\r\n\"I won't insult your intelligence by telling you how I read that,\r\nespecially as, rather against the strict rules of your order, you\r\nuse an arc-and-compass breastpin.\"\r\n\r\n\"Ah, of course, I forgot that. But the writing?\"\r\n\r\n\"What else can be indicated by that right cuff so very shiny for\r\nfive inches, and the left one with the smooth patch near the\r\nelbow where you rest it upon the desk?\"\r\n\r\n\"Well, but China?\"\r\n\r\n\"The fish that you have tattooed immediately above your right\r\nwrist could only have been done in China. I have made a small\r\nstudy of tattoo marks and have even contributed to the literature\r\nof the subject. That trick of staining the fishes' scales of a\r\ndelicate pink is quite peculiar to China. When, in addition, I\r\nsee a Chinese coin hanging from your watch-chain, the matter\r\nbecomes even more simple.\"\r\n\r\nMr. Jabez Wilson laughed heavily. \"Well, I never!\" said he. \"I\r\nthought at first that you had done something clever, but I see\r\nthat there was nothing in it, after all.\"\r\n\r\n\"I begin to think, Watson,\" said Holmes, \"that I make a mistake\r\nin explaining. 'Omne ignotum pro magnifico,' you know, and my\r\npoor little reputation, such as it is, will suffer shipwreck if I\r\nam so candid. Can you not find the advertisement, Mr. Wilson?\"\r\n\r\n\"Yes, I have got it now,\" he answered with his thick red finger\r\nplanted halfway down the column. \"Here it is. This is what began\r\nit all. You just read it for yourself, sir.\"\r\n\r\nI took the paper from him and read as follows:\r\n\r\n\"TO THE RED-HEADED LEAGUE: On account of the bequest of the late\r\nEzekiah Hopkins, of Lebanon, Pennsylvania, U. S. A., there is now\r\nanother vacancy open which entitles a member of the League to a\r\nsalary of 4 pounds a week for purely nominal services. All\r\nred-headed men who are sound in body and mind and above the age\r\nof twenty-one years, are eligible. Apply in person on Monday, at\r\neleven o'clock, to Duncan Ross, at the offices of the League, 7\r\nPope's Court, Fleet Street.\"\r\n\r\n\"What on earth does this mean?\" I ejaculated after I had twice\r\nread over the extraordinary announcement.\r\n\r\nHolmes chuckled and wriggled in his chair, as was his habit when\r\nin high spirits. \"It is a little off the beaten track, isn't it?\"\r\nsaid he. \"And now, Mr. Wilson, off you go at scratch and tell us\r\nall about yourself, your household, and the effect which this\r\nadvertisement had upon your fortunes. You will first make a note,\r\nDoctor, of the paper and the date.\"\r\n\r\n\"It is The Morning Chronicle of April 27, 1890. Just two months\r\nago.\"\r\n\r\n\"Very good. Now, Mr. Wilson?\"\r\n\r\n\"Well, it is just as I have been telling you, Mr. Sherlock\r\nHolmes,\" said Jabez Wilson, mopping his forehead; \"I have a small\r\npawnbroker's business at Coburg Square, near the City. It's not a\r\nvery large affair, and of late years it has not done more than\r\njust give me a living. I used to be able to keep two assistants,\r\nbut now I only keep one; and I would have a job to pay him but\r\nthat he is willing to come for half wages so as to learn the\r\nbusiness.\"\r\n\r\n\"What is the name of this obliging youth?\" asked Sherlock Holmes.\r\n\r\n\"His name is Vincent Spaulding, and he's not such a youth,\r\neither. It's hard to say his age. I should not wish a smarter\r\nassistant, Mr. Holmes; and I know very well that he could better\r\nhimself and earn twice what I am able to give him. But, after\r\nall, if he is satisfied, why should I put ideas in his head?\"\r\n\r\n\"Why, indeed? You seem most fortunate in having an employé who\r\ncomes under the full market price. It is not a common experience\r\namong employers in this age. I don't know that your assistant is\r\nnot as remarkable as your advertisement.\"\r\n\r\n\"Oh, he has his faults, too,\" said Mr. Wilson. \"Never was such a\r\nfellow for photography. Snapping away with a camera when he ought\r\nto be improving his mind, and then diving down into the cellar\r\nlike a rabbit into its hole to develop his pictures. That is his\r\nmain fault, but on the whole he's a good worker. There's no vice\r\nin him.\"\r\n\r\n\"He is still with you, I presume?\"\r\n\r\n\"Yes, sir. He and a girl of fourteen, who does a bit of simple\r\ncooking and keeps the place clean--that's all I have in the\r\nhouse, for I am a widower and never had any family. We live very\r\nquietly, sir, the three of us; and we keep a roof over our heads\r\nand pay our debts, if we do nothing more.\r\n\r\n\"The first thing that put us out was that advertisement.\r\nSpaulding, he came down into the office just this day eight\r\nweeks, with this very paper in his hand, and he says:\r\n\r\n\"'I wish to the Lord, Mr. Wilson, that I was a red-headed man.'\r\n\r\n\"'Why that?' I asks.\r\n\r\n\"'Why,' says he, 'here's another vacancy on the League of the\r\nRed-headed Men. It's worth quite a little fortune to any man who\r\ngets it, and I understand that there are more vacancies than\r\nthere are men, so that the trustees are at their wits' end what\r\nto do with the money. If my hair would only change colour, here's\r\na nice little crib all ready for me to step into.'\r\n\r\n\"'Why, what is it, then?' I asked. You see, Mr. Holmes, I am a\r\nvery stay-at-home man, and as my business came to me instead of\r\nmy having to go to it, I was often weeks on end without putting\r\nmy foot over the door-mat. In that way I didn't know much of what\r\nwas going on outside, and I was always glad of a bit of news.\r\n\r\n\"'Have you never heard of the League of the Red-headed Men?' he\r\nasked with his eyes open.\r\n\r\n\"'Never.'\r\n\r\n\"'Why, I wonder at that, for you are eligible yourself for one\r\nof the vacancies.'\r\n\r\n\"'And what are they worth?' I asked.\r\n\r\n\"'Oh, merely a couple of hundred a year, but the work is slight,\r\nand it need not interfere very much with one's other\r\noccupations.'\r\n\r\n\"Well, you can easily think that that made me prick up my ears,\r\nfor the business has not been over-good for some years, and an\r\nextra couple of hundred would have been very handy.\r\n\r\n\"'Tell me all about it,' said I.\r\n\r\n\"'Well,' said he, showing me the advertisement, 'you can see for\r\nyourself that the League has a vacancy, and there is the address\r\nwhere you should apply for particulars. As far as I can make out,\r\nthe League was founded by an American millionaire, Ezekiah\r\nHopkins, who was very peculiar in his ways. He was himself\r\nred-headed, and he had a great sympathy for all red-headed men;\r\nso when he died it was found that he had left his enormous\r\nfortune in the hands of trustees, with instructions to apply the\r\ninterest to the providing of easy berths to men whose hair is of\r\nthat colour. From all I hear it is splendid pay and very little to\r\ndo.'\r\n\r\n\"'But,' said I, 'there would be millions of red-headed men who\r\nwould apply.'\r\n\r\n\"'Not so many as you might think,' he answered. 'You see it is\r\nreally confined to Londoners, and to grown men. This American had\r\nstarted from London when he was young, and he wanted to do the\r\nold town a good turn. Then, again, I have heard it is no use your\r\napplying if your hair is light red, or dark red, or anything but\r\nreal bright, blazing, fiery red. Now, if you cared to apply, Mr.\r\nWilson, you would just walk in; but perhaps it would hardly be\r\nworth your while to put yourself out of the way for the sake of a\r\nfew hundred pounds.'\r\n\r\n\"Now, it is a fact, gentlemen, as you may see for yourselves,\r\nthat my hair is of a very full and rich tint, so that it seemed\r\nto me that if there was to be any competition in the matter I\r\nstood as good a chance as any man that I had ever met. Vincent\r\nSpaulding seemed to know so much about it that I thought he might\r\nprove useful, so I just ordered him to put up the shutters for\r\nthe day and to come right away with me. He was very willing to\r\nhave a holiday, so we shut the business up and started off for\r\nthe address that was given us in the advertisement.\r\n\r\n\"I never hope to see such a sight as that again, Mr. Holmes. From\r\nnorth, south, east, and west every man who had a shade of red in\r\nhis hair had tramped into the city to answer the advertisement.\r\nFleet Street was choked with red-headed folk, and Pope's Court\r\nlooked like a coster's orange barrow. I should not have thought\r\nthere were so many in the whole country as were brought together\r\nby that single advertisement. Every shade of colour they\r\nwere--straw, lemon, orange, brick, Irish-setter, liver, clay;\r\nbut, as Spaulding said, there were not many who had the real\r\nvivid flame-coloured tint. When I saw how many were waiting, I\r\nwould have given it up in despair; but Spaulding would not hear\r\nof it. How he did it I could not imagine, but he pushed and\r\npulled and butted until he got me through the crowd, and right up\r\nto the steps which led to the office. There was a double stream\r\nupon the stair, some going up in hope, and some coming back\r\ndejected; but we wedged in as well as we could and soon found\r\nourselves in the office.\"\r\n\r\n\"Your experience has been a most entertaining one,\" remarked\r\nHolmes as his client paused and refreshed his memory with a huge\r\npinch of snuff. \"Pray continue your very interesting statement.\"\r\n\r\n\"There was nothing in the office but a couple of wooden chairs\r\nand a deal table, behind which sat a small man with a head that\r\nwas even redder than mine. He said a few words to each candidate\r\nas he came up, and then he always managed to find some fault in\r\nthem which would disqualify them. Getting a vacancy did not seem\r\nto be such a very easy matter, after all. However, when our turn\r\ncame the little man was much more favourable to me than to any of\r\nthe others, and he closed the door as we entered, so that he\r\nmight have a private word with us.\r\n\r\n\"'This is Mr. Jabez Wilson,' said my assistant, 'and he is\r\nwilling to fill a vacancy in the League.'\r\n\r\n\"'And he is admirably suited for it,' the other answered. 'He has\r\nevery requirement. I cannot recall when I have seen anything so\r\nfine.' He took a step backward, cocked his head on one side, and\r\ngazed at my hair until I felt quite bashful. Then suddenly he\r\nplunged forward, wrung my hand, and congratulated me warmly on my\r\nsuccess.\r\n\r\n\"'It would be injustice to hesitate,' said he. 'You will,\r\nhowever, I am sure, excuse me for taking an obvious precaution.'\r\nWith that he seized my hair in both his hands, and tugged until I\r\nyelled with the pain. 'There is water in your eyes,' said he as\r\nhe released me. 'I perceive that all is as it should be. But we\r\nhave to be careful, for we have twice been deceived by wigs and\r\nonce by paint. I could tell you tales of cobbler's wax which\r\nwould disgust you with human nature.' He stepped over to the\r\nwindow and shouted through it at the top of his voice that the\r\nvacancy was filled. A groan of disappointment came up from below,\r\nand the folk all trooped away in different directions until there\r\nwas not a red-head to be seen except my own and that of the\r\nmanager.\r\n\r\n\"'My name,' said he, 'is Mr. Duncan Ross, and I am myself one of\r\nthe pensioners upon the fund left by our noble benefactor. Are\r\nyou a married man, Mr. Wilson? Have you a family?'\r\n\r\n\"I answered that I had not.\r\n\r\n\"His face fell immediately.\r\n\r\n\"'Dear me!' he said gravely, 'that is very serious indeed! I am\r\nsorry to hear you say that. The fund was, of course, for the\r\npropagation and spread of the red-heads as well as for their\r\nmaintenance. It is exceedingly unfortunate that you should be a\r\nbachelor.'\r\n\r\n\"My face lengthened at this, Mr. Holmes, for I thought that I was\r\nnot to have the vacancy after all; but after thinking it over for\r\na few minutes he said that it would be all right.\r\n\r\n\"'In the case of another,' said he, 'the objection might be\r\nfatal, but we must stretch a point in favour of a man with such a\r\nhead of hair as yours. When shall you be able to enter upon your\r\nnew duties?'\r\n\r\n\"'Well, it is a little awkward, for I have a business already,'\r\nsaid I.\r\n\r\n\"'Oh, never mind about that, Mr. Wilson!' said Vincent Spaulding.\r\n'I should be able to look after that for you.'\r\n\r\n\"'What would be the hours?' I asked.\r\n\r\n\"'Ten to two.'\r\n\r\n\"Now a pawnbroker's business is mostly done of an evening, Mr.\r\nHolmes, especially Thursday and Friday evening, which is just\r\nbefore pay-day; so it would suit me very well to earn a little in\r\nthe mornings. Besides, I knew that my assistant was a good man,\r\nand that he would see to anything that turned up.\r\n\r\n\"'That would suit me very well,' said I. 'And the pay?'\r\n\r\n\"'Is 4 pounds a week.'\r\n\r\n\"'And the work?'\r\n\r\n\"'Is purely nominal.'\r\n\r\n\"'What do you call purely nominal?'\r\n\r\n\"'Well, you have to be in the office, or at least in the\r\nbuilding, the whole time. If you leave, you forfeit your whole\r\nposition forever. The will is very clear upon that point. You\r\ndon't comply with the conditions if you budge from the office\r\nduring that time.'\r\n\r\n\"'It's only four hours a day, and I should not think of leaving,'\r\nsaid I.\r\n\r\n\"'No excuse will avail,' said Mr. Duncan Ross; 'neither sickness\r\nnor business nor anything else. There you must stay, or you lose\r\nyour billet.'\r\n\r\n\"'And the work?'\r\n\r\n\"'Is to copy out the \"Encyclopaedia Britannica.\" There is the first\r\nvolume of it in that press. You must find your own ink, pens, and\r\nblotting-paper, but we provide this table and chair. Will you be\r\nready to-morrow?'\r\n\r\n\"'Certainly,' I answered.\r\n\r\n\"'Then, good-bye, Mr. Jabez Wilson, and let me congratulate you\r\nonce more on the important position which you have been fortunate\r\nenough to gain.' He bowed me out of the room and I went home with\r\nmy assistant, hardly knowing what to say or do, I was so pleased\r\nat my own good fortune.\r\n\r\n\"Well, I thought over the matter all day, and by evening I was in\r\nlow spirits again; for I had quite persuaded myself that the\r\nwhole affair must be some great hoax or fraud, though what its\r\nobject might be I could not imagine. It seemed altogether past\r\nbelief that anyone could make such a will, or that they would pay\r\nsuch a sum for doing anything so simple as copying out the\r\n'Encyclopaedia Britannica.' Vincent Spaulding did what he could to\r\ncheer me up, but by bedtime I had reasoned myself out of the\r\nwhole thing. However, in the morning I determined to have a look\r\nat it anyhow, so I bought a penny bottle of ink, and with a\r\nquill-pen, and seven sheets of foolscap paper, I started off for\r\nPope's Court.\r\n\r\n\"Well, to my surprise and delight, everything was as right as\r\npossible. The table was set out ready for me, and Mr. Duncan Ross\r\nwas there to see that I got fairly to work. He started me off\r\nupon the letter A, and then he left me; but he would drop in from\r\ntime to time to see that all was right with me. At two o'clock he\r\nbade me good-day, complimented me upon the amount that I had\r\nwritten, and locked the door of the office after me.\r\n\r\n\"This went on day after day, Mr. Holmes, and on Saturday the\r\nmanager came in and planked down four golden sovereigns for my\r\nweek's work. It was the same next week, and the same the week\r\nafter. Every morning I was there at ten, and every afternoon I\r\nleft at two. By degrees Mr. Duncan Ross took to coming in only\r\nonce of a morning, and then, after a time, he did not come in at\r\nall. Still, of course, I never dared to leave the room for an\r\ninstant, for I was not sure when he might come, and the billet\r\nwas such a good one, and suited me so well, that I would not risk\r\nthe loss of it.\r\n\r\n\"Eight weeks passed away like this, and I had written about\r\nAbbots and Archery and Armour and Architecture and Attica, and\r\nhoped with diligence that I might get on to the B's before very\r\nlong. It cost me something in foolscap, and I had pretty nearly\r\nfilled a shelf with my writings. And then suddenly the whole\r\nbusiness came to an end.\"\r\n\r\n\"To an end?\"\r\n\r\n\"Yes, sir. And no later than this morning. I went to my work as\r\nusual at ten o'clock, but the door was shut and locked, with a\r\nlittle square of cardboard hammered on to the middle of the\r\npanel with a tack. Here it is, and you can read for yourself.\"\r\n\r\nHe held up a piece of white cardboard about the size of a sheet\r\nof note-paper. It read in this fashion:\r\n\r\n                  THE RED-HEADED LEAGUE\r\n\r\n                           IS\r\n\r\n                        DISSOLVED.\r\n\r\n                     October 9, 1890.\r\n\r\nSherlock Holmes and I surveyed this curt announcement and the\r\nrueful face behind it, until the comical side of the affair so\r\ncompletely overtopped every other consideration that we both\r\nburst out into a roar of laughter.\r\n\r\n\"I cannot see that there is anything very funny,\" cried our\r\nclient, flushing up to the roots of his flaming head. \"If you can\r\ndo nothing better than laugh at me, I can go elsewhere.\"\r\n\r\n\"No, no,\" cried Holmes, shoving him back into the chair from\r\nwhich he had half risen. \"I really wouldn't miss your case for\r\nthe world. It is most refreshingly unusual. But there is, if you\r\nwill excuse my saying so, something just a little funny about it.\r\nPray what steps did you take when you found the card upon the\r\ndoor?\"\r\n\r\n\"I was staggered, sir. I did not know what to do. Then I called\r\nat the offices round, but none of them seemed to know anything\r\nabout it. Finally, I went to the landlord, who is an accountant\r\nliving on the ground-floor, and I asked him if he could tell me\r\nwhat had become of the Red-headed League. He said that he had\r\nnever heard of any such body. Then I asked him who Mr. Duncan\r\nRoss was. He answered that the name was new to him.\r\n\r\n\"'Well,' said I, 'the gentleman at No. 4.'\r\n\r\n\"'What, the red-headed man?'\r\n\r\n\"'Yes.'\r\n\r\n\"'Oh,' said he, 'his name was William Morris. He was a solicitor\r\nand was using my room as a temporary convenience until his new\r\npremises were ready. He moved out yesterday.'\r\n\r\n\"'Where could I find him?'\r\n\r\n\"'Oh, at his new offices. He did tell me the address. Yes, 17\r\nKing Edward Street, near St. Paul's.'\r\n\r\n\"I started off, Mr. Holmes, but when I got to that address it was\r\na manufactory of artificial knee-caps, and no one in it had ever\r\nheard of either Mr. William Morris or Mr. Duncan Ross.\"\r\n\r\n\"And what did you do then?\" asked Holmes.\r\n\r\n\"I went home to Saxe-Coburg Square, and I took the advice of my\r\nassistant. But he could not help me in any way. He could only say\r\nthat if I waited I should hear by post. But that was not quite\r\ngood enough, Mr. Holmes. I did not wish to lose such a place\r\nwithout a struggle, so, as I had heard that you were good enough\r\nto give advice to poor folk who were in need of it, I came right\r\naway to you.\"\r\n\r\n\"And you did very wisely,\" said Holmes. \"Your case is an\r\nexceedingly remarkable one, and I shall be happy to look into it.\r\nFrom what you have told me I think that it is possible that\r\ngraver issues hang from it than might at first sight appear.\"\r\n\r\n\"Grave enough!\" said Mr. Jabez Wilson. \"Why, I have lost four\r\npound a week.\"\r\n\r\n\"As far as you are personally concerned,\" remarked Holmes, \"I do\r\nnot see that you have any grievance against this extraordinary\r\nleague. On the contrary, you are, as I understand, richer by some\r\n30 pounds, to say nothing of the minute knowledge which you have\r\ngained on every subject which comes under the letter A. You have\r\nlost nothing by them.\"\r\n\r\n\"No, sir. But I want to find out about them, and who they are,\r\nand what their object was in playing this prank--if it was a\r\nprank--upon me. It was a pretty expensive joke for them, for it\r\ncost them two and thirty pounds.\"\r\n\r\n\"We shall endeavour to clear up these points for you. And, first,\r\none or two questions, Mr. Wilson. This assistant of yours who\r\nfirst called your attention to the advertisement--how long had he\r\nbeen with you?\"\r\n\r\n\"About a month then.\"\r\n\r\n\"How did he come?\"\r\n\r\n\"In answer to an advertisement.\"\r\n\r\n\"Was he the only applicant?\"\r\n\r\n\"No, I had a dozen.\"\r\n\r\n\"Why did you pick him?\"\r\n\r\n\"Because he was handy and would come cheap.\"\r\n\r\n\"At half-wages, in fact.\"\r\n\r\n\"Yes.\"\r\n\r\n\"What is he like, this Vincent Spaulding?\"\r\n\r\n\"Small, stout-built, very quick in his ways, no hair on his face,\r\nthough he's not short of thirty. Has a white splash of acid upon\r\nhis forehead.\"\r\n\r\nHolmes sat up in his chair in considerable excitement. \"I thought\r\nas much,\" said he. \"Have you ever observed that his ears are\r\npierced for earrings?\"\r\n\r\n\"Yes, sir. He told me that a gipsy had done it for him when he\r\nwas a lad.\"\r\n\r\n\"Hum!\" said Holmes, sinking back in deep thought. \"He is still\r\nwith you?\"\r\n\r\n\"Oh, yes, sir; I have only just left him.\"\r\n\r\n\"And has your business been attended to in your absence?\"\r\n\r\n\"Nothing to complain of, sir. There's never very much to do of a\r\nmorning.\"\r\n\r\n\"That will do, Mr. Wilson. I shall be happy to give you an\r\nopinion upon the subject in the course of a day or two. To-day is\r\nSaturday, and I hope that by Monday we may come to a conclusion.\"\r\n\r\n\"Well, Watson,\" said Holmes when our visitor had left us, \"what\r\ndo you make of it all?\"\r\n\r\n\"I make nothing of it,\" I answered frankly. \"It is a most\r\nmysterious business.\"\r\n\r\n\"As a rule,\" said Holmes, \"the more bizarre a thing is the less\r\nmysterious it proves to be. It is your commonplace, featureless\r\ncrimes which are really puzzling, just as a commonplace face is\r\nthe most difficult to identify. But I must be prompt over this\r\nmatter.\"\r\n\r\n\"What are you going to do, then?\" I asked.\r\n\r\n\"To smoke,\" he answered. \"It is quite a three pipe problem, and I\r\nbeg that you won't speak to me for fifty minutes.\" He curled\r\nhimself up in his chair, with his thin knees drawn up to his\r\nhawk-like nose, and there he sat with his eyes closed and his\r\nblack clay pipe thrusting out like the bill of some strange bird.\r\nI had come to the conclusion that he had dropped asleep, and\r\nindeed was nodding myself, when he suddenly sprang out of his\r\nchair with the gesture of a man who has made up his mind and put\r\nhis pipe down upon the mantelpiece.\r\n\r\n\"Sarasate plays at the St. James's Hall this afternoon,\" he\r\nremarked. \"What do you think, Watson? Could your patients spare\r\nyou for a few hours?\"\r\n\r\n\"I have nothing to do to-day. My practice is never very\r\nabsorbing.\"\r\n\r\n\"Then put on your hat and come. I am going through the City\r\nfirst, and we can have some lunch on the way. I observe that\r\nthere is a good deal of German music on the programme, which is\r\nrather more to my taste than Italian or French. It is\r\nintrospective, and I want to introspect. Come along!\"\r\n\r\nWe travelled by the Underground as far as Aldersgate; and a short\r\nwalk took us to Saxe-Coburg Square, the scene of the singular\r\nstory which we had listened to in the morning. It was a poky,\r\nlittle, shabby-genteel place, where four lines of dingy\r\ntwo-storied brick houses looked out into a small railed-in\r\nenclosure, where a lawn of weedy grass and a few clumps of faded\r\nlaurel-bushes made a hard fight against a smoke-laden and\r\nuncongenial atmosphere. Three gilt balls and a brown board with\r\n\"JABEZ WILSON\" in white letters, upon a corner house, announced\r\nthe place where our red-headed client carried on his business.\r\nSherlock Holmes stopped in front of it with his head on one side\r\nand looked it all over, with his eyes shining brightly between\r\npuckered lids. Then he walked slowly up the street, and then down\r\nagain to the corner, still looking keenly at the houses. Finally\r\nhe returned to the pawnbroker's, and, having thumped vigorously\r\nupon the pavement with his stick two or three times, he went up\r\nto the door and knocked. It was instantly opened by a\r\nbright-looking, clean-shaven young fellow, who asked him to step\r\nin.\r\n\r\n\"Thank you,\" said Holmes, \"I only wished to ask you how you would\r\ngo from here to the Strand.\"\r\n\r\n\"Third right, fourth left,\" answered the assistant promptly,\r\nclosing the door.\r\n\r\n\"Smart fellow, that,\" observed Holmes as we walked away. \"He is,\r\nin my judgment, the fourth smartest man in London, and for daring\r\nI am not sure that he has not a claim to be third. I have known\r\nsomething of him before.\"\r\n\r\n\"Evidently,\" said I, \"Mr. Wilson's assistant counts for a good\r\ndeal in this mystery of the Red-headed League. I am sure that you\r\ninquired your way merely in order that you might see him.\"\r\n\r\n\"Not him.\"\r\n\r\n\"What then?\"\r\n\r\n\"The knees of his trousers.\"\r\n\r\n\"And what did you see?\"\r\n\r\n\"What I expected to see.\"\r\n\r\n\"Why did you beat the pavement?\"\r\n\r\n\"My dear doctor, this is a time for observation, not for talk. We\r\nare spies in an enemy's country. We know something of Saxe-Coburg\r\nSquare. Let us now explore the parts which lie behind it.\"\r\n\r\nThe road in which we found ourselves as we turned round the\r\ncorner from the retired Saxe-Coburg Square presented as great a\r\ncontrast to it as the front of a picture does to the back. It was\r\none of the main arteries which conveyed the traffic of the City\r\nto the north and west. The roadway was blocked with the immense\r\nstream of commerce flowing in a double tide inward and outward,\r\nwhile the footpaths were black with the hurrying swarm of\r\npedestrians. It was difficult to realise as we looked at the line\r\nof fine shops and stately business premises that they really\r\nabutted on the other side upon the faded and stagnant square\r\nwhich we had just quitted.\r\n\r\n\"Let me see,\" said Holmes, standing at the corner and glancing\r\nalong the line, \"I should like just to remember the order of the\r\nhouses here. It is a hobby of mine to have an exact knowledge of\r\nLondon. There is Mortimer's, the tobacconist, the little\r\nnewspaper shop, the Coburg branch of the City and Suburban Bank,\r\nthe Vegetarian Restaurant, and McFarlane's carriage-building\r\ndepot. That carries us right on to the other block. And now,\r\nDoctor, we've done our work, so it's time we had some play. A\r\nsandwich and a cup of coffee, and then off to violin-land, where\r\nall is sweetness and delicacy and harmony, and there are no\r\nred-headed clients to vex us with their conundrums.\"\r\n\r\nMy friend was an enthusiastic musician, being himself not only a\r\nvery capable performer but a composer of no ordinary merit. All\r\nthe afternoon he sat in the stalls wrapped in the most perfect\r\nhappiness, gently waving his long, thin fingers in time to the\r\nmusic, while his gently smiling face and his languid, dreamy eyes\r\nwere as unlike those of Holmes the sleuth-hound, Holmes the\r\nrelentless, keen-witted, ready-handed criminal agent, as it was\r\npossible to conceive. In his singular character the dual nature\r\nalternately asserted itself, and his extreme exactness and\r\nastuteness represented, as I have often thought, the reaction\r\nagainst the poetic and contemplative mood which occasionally\r\npredominated in him. The swing of his nature took him from\r\nextreme languor to devouring energy; and, as I knew well, he was\r\nnever so truly formidable as when, for days on end, he had been\r\nlounging in his armchair amid his improvisations and his\r\nblack-letter editions. Then it was that the lust of the chase\r\nwould suddenly come upon him, and that his brilliant reasoning\r\npower would rise to the level of intuition, until those who were\r\nunacquainted with his methods would look askance at him as on a\r\nman whose knowledge was not that of other mortals. When I saw him\r\nthat afternoon so enwrapped in the music at St. James's Hall I\r\nfelt that an evil time might be coming upon those whom he had set\r\nhimself to hunt down.\r\n\r\n\"You want to go home, no doubt, Doctor,\" he remarked as we\r\nemerged.\r\n\r\n\"Yes, it would be as well.\"\r\n\r\n\"And I have some business to do which will take some hours. This\r\nbusiness at Coburg Square is serious.\"\r\n\r\n\"Why serious?\"\r\n\r\n\"A considerable crime is in contemplation. I have every reason to\r\nbelieve that we shall be in time to stop it. But to-day being\r\nSaturday rather complicates matters. I shall want your help\r\nto-night.\"\r\n\r\n\"At what time?\"\r\n\r\n\"Ten will be early enough.\"\r\n\r\n\"I shall be at Baker Street at ten.\"\r\n\r\n\"Very well. And, I say, Doctor, there may be some little danger,\r\nso kindly put your army revolver in your pocket.\" He waved his\r\nhand, turned on his heel, and disappeared in an instant among the\r\ncrowd.\r\n\r\nI trust that I am not more dense than my neighbours, but I was\r\nalways oppressed with a sense of my own stupidity in my dealings\r\nwith Sherlock Holmes. Here I had heard what he had heard, I had\r\nseen what he had seen, and yet from his words it was evident that\r\nhe saw clearly not only what had happened but what was about to\r\nhappen, while to me the whole business was still confused and\r\ngrotesque. As I drove home to my house in Kensington I thought\r\nover it all, from the extraordinary story of the red-headed\r\ncopier of the \"Encyclopaedia\" down to the visit to Saxe-Coburg\r\nSquare, and the ominous words with which he had parted from me.\r\nWhat was this nocturnal expedition, and why should I go armed?\r\nWhere were we going, and what were we to do? I had the hint from\r\nHolmes that this smooth-faced pawnbroker's assistant was a\r\nformidable man--a man who might play a deep game. I tried to\r\npuzzle it out, but gave it up in despair and set the matter aside\r\nuntil night should bring an explanation.\r\n\r\nIt was a quarter-past nine when I started from home and made my\r\nway across the Park, and so through Oxford Street to Baker\r\nStreet. Two hansoms were standing at the door, and as I entered\r\nthe passage I heard the sound of voices from above. On entering\r\nhis room I found Holmes in animated conversation with two men,\r\none of whom I recognised as Peter Jones, the official police\r\nagent, while the other was a long, thin, sad-faced man, with a\r\nvery shiny hat and oppressively respectable frock-coat.\r\n\r\n\"Ha! Our party is complete,\" said Holmes, buttoning up his\r\npea-jacket and taking his heavy hunting crop from the rack.\r\n\"Watson, I think you know Mr. Jones, of Scotland Yard? Let me\r\nintroduce you to Mr. Merryweather, who is to be our companion in\r\nto-night's adventure.\"\r\n\r\n\"We're hunting in couples again, Doctor, you see,\" said Jones in\r\nhis consequential way. \"Our friend here is a wonderful man for\r\nstarting a chase. All he wants is an old dog to help him to do\r\nthe running down.\"\r\n\r\n\"I hope a wild goose may not prove to be the end of our chase,\"\r\nobserved Mr. Merryweather gloomily.\r\n\r\n\"You may place considerable confidence in Mr. Holmes, sir,\" said\r\nthe police agent loftily. \"He has his own little methods, which\r\nare, if he won't mind my saying so, just a little too theoretical\r\nand fantastic, but he has the makings of a detective in him. It\r\nis not too much to say that once or twice, as in that business of\r\nthe Sholto murder and the Agra treasure, he has been more nearly\r\ncorrect than the official force.\"\r\n\r\n\"Oh, if you say so, Mr. Jones, it is all right,\" said the\r\nstranger with deference. \"Still, I confess that I miss my rubber.\r\nIt is the first Saturday night for seven-and-twenty years that I\r\nhave not had my rubber.\"\r\n\r\n\"I think you will find,\" said Sherlock Holmes, \"that you will\r\nplay for a higher stake to-night than you have ever done yet, and\r\nthat the play will be more exciting. For you, Mr. Merryweather,\r\nthe stake will be some 30,000 pounds; and for you, Jones, it will\r\nbe the man upon whom you wish to lay your hands.\"\r\n\r\n\"John Clay, the murderer, thief, smasher, and forger. He's a\r\nyoung man, Mr. Merryweather, but he is at the head of his\r\nprofession, and I would rather have my bracelets on him than on\r\nany criminal in London. He's a remarkable man, is young John\r\nClay. His grandfather was a royal duke, and he himself has been\r\nto Eton and Oxford. His brain is as cunning as his fingers, and\r\nthough we meet signs of him at every turn, we never know where to\r\nfind the man himself. He'll crack a crib in Scotland one week,\r\nand be raising money to build an orphanage in Cornwall the next.\r\nI've been on his track for years and have never set eyes on him\r\nyet.\"\r\n\r\n\"I hope that I may have the pleasure of introducing you to-night.\r\nI've had one or two little turns also with Mr. John Clay, and I\r\nagree with you that he is at the head of his profession. It is\r\npast ten, however, and quite time that we started. If you two\r\nwill take the first hansom, Watson and I will follow in the\r\nsecond.\"\r\n\r\nSherlock Holmes was not very communicative during the long drive\r\nand lay back in the cab humming the tunes which he had heard in\r\nthe afternoon. We rattled through an endless labyrinth of gas-lit\r\nstreets until we emerged into Farrington Street.\r\n\r\n\"We are close there now,\" my friend remarked. \"This fellow\r\nMerryweather is a bank director, and personally interested in the\r\nmatter. I thought it as well to have Jones with us also. He is\r\nnot a bad fellow, though an absolute imbecile in his profession.\r\nHe has one positive virtue. He is as brave as a bulldog and as\r\ntenacious as a lobster if he gets his claws upon anyone. Here we\r\nare, and they are waiting for us.\"\r\n\r\nWe had reached the same crowded thoroughfare in which we had\r\nfound ourselves in the morning. Our cabs were dismissed, and,\r\nfollowing the guidance of Mr. Merryweather, we passed down a\r\nnarrow passage and through a side door, which he opened for us.\r\nWithin there was a small corridor, which ended in a very massive\r\niron gate. This also was opened, and led down a flight of winding\r\nstone steps, which terminated at another formidable gate. Mr.\r\nMerryweather stopped to light a lantern, and then conducted us\r\ndown a dark, earth-smelling passage, and so, after opening a\r\nthird door, into a huge vault or cellar, which was piled all\r\nround with crates and massive boxes.\r\n\r\n\"You are not very vulnerable from above,\" Holmes remarked as he\r\nheld up the lantern and gazed about him.\r\n\r\n\"Nor from below,\" said Mr. Merryweather, striking his stick upon\r\nthe flags which lined the floor. \"Why, dear me, it sounds quite\r\nhollow!\" he remarked, looking up in surprise.\r\n\r\n\"I must really ask you to be a little more quiet!\" said Holmes\r\nseverely. \"You have already imperilled the whole success of our\r\nexpedition. Might I beg that you would have the goodness to sit\r\ndown upon one of those boxes, and not to interfere?\"\r\n\r\nThe solemn Mr. Merryweather perched himself upon a crate, with a\r\nvery injured expression upon his face, while Holmes fell upon his\r\nknees upon the floor and, with the lantern and a magnifying lens,\r\nbegan to examine minutely the cracks between the stones. A few\r\nseconds sufficed to satisfy him, for he sprang to his feet again\r\nand put his glass in his pocket.\r\n\r\n\"We have at least an hour before us,\" he remarked, \"for they can\r\nhardly take any steps until the good pawnbroker is safely in bed.\r\nThen they will not lose a minute, for the sooner they do their\r\nwork the longer time they will have for their escape. We are at\r\npresent, Doctor--as no doubt you have divined--in the cellar of\r\nthe City branch of one of the principal London banks. Mr.\r\nMerryweather is the chairman of directors, and he will explain to\r\nyou that there are reasons why the more daring criminals of\r\nLondon should take a considerable interest in this cellar at\r\npresent.\"\r\n\r\n\"It is our French gold,\" whispered the director. \"We have had\r\nseveral warnings that an attempt might be made upon it.\"\r\n\r\n\"Your French gold?\"\r\n\r\n\"Yes. We had occasion some months ago to strengthen our resources\r\nand borrowed for that purpose 30,000 napoleons from the Bank of\r\nFrance. It has become known that we have never had occasion to\r\nunpack the money, and that it is still lying in our cellar. The\r\ncrate upon which I sit contains 2,000 napoleons packed between\r\nlayers of lead foil. Our reserve of bullion is much larger at\r\npresent than is usually kept in a single branch office, and the\r\ndirectors have had misgivings upon the subject.\"\r\n\r\n\"Which were very well justified,\" observed Holmes. \"And now it is\r\ntime that we arranged our little plans. I expect that within an\r\nhour matters will come to a head. In the meantime Mr.\r\nMerryweather, we must put the screen over that dark lantern.\"\r\n\r\n\"And sit in the dark?\"\r\n\r\n\"I am afraid so. I had brought a pack of cards in my pocket, and\r\nI thought that, as we were a partie carrée, you might have your\r\nrubber after all. But I see that the enemy's preparations have\r\ngone so far that we cannot risk the presence of a light. And,\r\nfirst of all, we must choose our positions. These are daring men,\r\nand though we shall take them at a disadvantage, they may do us\r\nsome harm unless we are careful. I shall stand behind this crate,\r\nand do you conceal yourselves behind those. Then, when I flash a\r\nlight upon them, close in swiftly. If they fire, Watson, have no\r\ncompunction about shooting them down.\"\r\n\r\nI placed my revolver, cocked, upon the top of the wooden case\r\nbehind which I crouched. Holmes shot the slide across the front\r\nof his lantern and left us in pitch darkness--such an absolute\r\ndarkness as I have never before experienced. The smell of hot\r\nmetal remained to assure us that the light was still there, ready\r\nto flash out at a moment's notice. To me, with my nerves worked\r\nup to a pitch of expectancy, there was something depressing and\r\nsubduing in the sudden gloom, and in the cold dank air of the\r\nvault.\r\n\r\n\"They have but one retreat,\" whispered Holmes. \"That is back\r\nthrough the house into Saxe-Coburg Square. I hope that you have\r\ndone what I asked you, Jones?\"\r\n\r\n\"I have an inspector and two officers waiting at the front door.\"\r\n\r\n\"Then we have stopped all the holes. And now we must be silent\r\nand wait.\"\r\n\r\nWhat a time it seemed! From comparing notes afterwards it was but\r\nan hour and a quarter, yet it appeared to me that the night must\r\nhave almost gone and the dawn be breaking above us. My limbs\r\nwere weary and stiff, for I feared to change my position; yet my\r\nnerves were worked up to the highest pitch of tension, and my\r\nhearing was so acute that I could not only hear the gentle\r\nbreathing of my companions, but I could distinguish the deeper,\r\nheavier in-breath of the bulky Jones from the thin, sighing note\r\nof the bank director. From my position I could look over the case\r\nin the direction of the floor. Suddenly my eyes caught the glint\r\nof a light.\r\n\r\nAt first it was but a lurid spark upon the stone pavement. Then\r\nit lengthened out until it became a yellow line, and then,\r\nwithout any warning or sound, a gash seemed to open and a hand\r\nappeared, a white, almost womanly hand, which felt about in the\r\ncentre of the little area of light. For a minute or more the\r\nhand, with its writhing fingers, protruded out of the floor. Then\r\nit was withdrawn as suddenly as it appeared, and all was dark\r\nagain save the single lurid spark which marked a chink between\r\nthe stones.\r\n\r\nIts disappearance, however, was but momentary. With a rending,\r\ntearing sound, one of the broad, white stones turned over upon\r\nits side and left a square, gaping hole, through which streamed\r\nthe light of a lantern. Over the edge there peeped a clean-cut,\r\nboyish face, which looked keenly about it, and then, with a hand\r\non either side of the aperture, drew itself shoulder-high and\r\nwaist-high, until one knee rested upon the edge. In another\r\ninstant he stood at the side of the hole and was hauling after\r\nhim a companion, lithe and small like himself, with a pale face\r\nand a shock of very red hair.\r\n\r\n\"It's all clear,\" he whispered. \"Have you the chisel and the\r\nbags? Great Scott! Jump, Archie, jump, and I'll swing for it!\"\r\n\r\nSherlock Holmes had sprung out and seized the intruder by the\r\ncollar. The other dived down the hole, and I heard the sound of\r\nrending cloth as Jones clutched at his skirts. The light flashed\r\nupon the barrel of a revolver, but Holmes' hunting crop came\r\ndown on the man's wrist, and the pistol clinked upon the stone\r\nfloor.\r\n\r\n\"It's no use, John Clay,\" said Holmes blandly. \"You have no\r\nchance at all.\"\r\n\r\n\"So I see,\" the other answered with the utmost coolness. \"I fancy\r\nthat my pal is all right, though I see you have got his\r\ncoat-tails.\"\r\n\r\n\"There are three men waiting for him at the door,\" said Holmes.\r\n\r\n\"Oh, indeed! You seem to have done the thing very completely. I\r\nmust compliment you.\"\r\n\r\n\"And I you,\" Holmes answered. \"Your red-headed idea was very new\r\nand effective.\"\r\n\r\n\"You'll see your pal again presently,\" said Jones. \"He's quicker\r\nat climbing down holes than I am. Just hold out while I fix the\r\nderbies.\"\r\n\r\n\"I beg that you will not touch me with your filthy hands,\"\r\nremarked our prisoner as the handcuffs clattered upon his wrists.\r\n\"You may not be aware that I have royal blood in my veins. Have\r\nthe goodness, also, when you address me always to say 'sir' and\r\n'please.'\"\r\n\r\n\"All right,\" said Jones with a stare and a snigger. \"Well, would\r\nyou please, sir, march upstairs, where we can get a cab to carry\r\nyour Highness to the police-station?\"\r\n\r\n\"That is better,\" said John Clay serenely. He made a sweeping bow\r\nto the three of us and walked quietly off in the custody of the\r\ndetective.\r\n\r\n\"Really, Mr. Holmes,\" said Mr. Merryweather as we followed them\r\nfrom the cellar, \"I do not know how the bank can thank you or\r\nrepay you. There is no doubt that you have detected and defeated\r\nin the most complete manner one of the most determined attempts\r\nat bank robbery that have ever come within my experience.\"\r\n\r\n\"I have had one or two little scores of my own to settle with Mr.\r\nJohn Clay,\" said Holmes. \"I have been at some small expense over\r\nthis matter, which I shall expect the bank to refund, but beyond\r\nthat I am amply repaid by having had an experience which is in\r\nmany ways unique, and by hearing the very remarkable narrative of\r\nthe Red-headed League.\"\r\n\r\n\r\n\"You see, Watson,\" he explained in the early hours of the morning\r\nas we sat over a glass of whisky and soda in Baker Street, \"it\r\nwas perfectly obvious from the first that the only possible\r\nobject of this rather fantastic business of the advertisement of\r\nthe League, and the copying of the 'Encyclopaedia,' must be to get\r\nthis not over-bright pawnbroker out of the way for a number of\r\nhours every day. It was a curious way of managing it, but,\r\nreally, it would be difficult to suggest a better. The method was\r\nno doubt suggested to Clay's ingenious mind by the colour of his\r\naccomplice's hair. The 4 pounds a week was a lure which must draw\r\nhim, and what was it to them, who were playing for thousands?\r\nThey put in the advertisement, one rogue has the temporary\r\noffice, the other rogue incites the man to apply for it, and\r\ntogether they manage to secure his absence every morning in the\r\nweek. From the time that I heard of the assistant having come for\r\nhalf wages, it was obvious to me that he had some strong motive\r\nfor securing the situation.\"\r\n\r\n\"But how could you guess what the motive was?\"\r\n\r\n\"Had there been women in the house, I should have suspected a\r\nmere vulgar intrigue. That, however, was out of the question. The\r\nman's business was a small one, and there was nothing in his\r\nhouse which could account for such elaborate preparations, and\r\nsuch an expenditure as they were at. It must, then, be something\r\nout of the house. What could it be? I thought of the assistant's\r\nfondness for photography, and his trick of vanishing into the\r\ncellar. The cellar! There was the end of this tangled clue. Then\r\nI made inquiries as to this mysterious assistant and found that I\r\nhad to deal with one of the coolest and most daring criminals in\r\nLondon. He was doing something in the cellar--something which\r\ntook many hours a day for months on end. What could it be, once\r\nmore? I could think of nothing save that he was running a tunnel\r\nto some other building.\r\n\r\n\"So far I had got when we went to visit the scene of action. I\r\nsurprised you by beating upon the pavement with my stick. I was\r\nascertaining whether the cellar stretched out in front or behind.\r\nIt was not in front. Then I rang the bell, and, as I hoped, the\r\nassistant answered it. We have had some skirmishes, but we had\r\nnever set eyes upon each other before. I hardly looked at his\r\nface. His knees were what I wished to see. You must yourself have\r\nremarked how worn, wrinkled, and stained they were. They spoke of\r\nthose hours of burrowing. The only remaining point was what they\r\nwere burrowing for. I walked round the corner, saw the City and\r\nSuburban Bank abutted on our friend's premises, and felt that I\r\nhad solved my problem. When you drove home after the concert I\r\ncalled upon Scotland Yard and upon the chairman of the bank\r\ndirectors, with the result that you have seen.\"\r\n\r\n\"And how could you tell that they would make their attempt\r\nto-night?\" I asked.\r\n\r\n\"Well, when they closed their League offices that was a sign that\r\nthey cared no longer about Mr. Jabez Wilson's presence--in other\r\nwords, that they had completed their tunnel. But it was essential\r\nthat they should use it soon, as it might be discovered, or the\r\nbullion might be removed. Saturday would suit them better than\r\nany other day, as it would give them two days for their escape.\r\nFor all these reasons I expected them to come to-night.\"\r\n\r\n\"You reasoned it out beautifully,\" I exclaimed in unfeigned\r\nadmiration. \"It is so long a chain, and yet every link rings\r\ntrue.\"\r\n\r\n\"It saved me from ennui,\" he answered, yawning. \"Alas! I already\r\nfeel it closing in upon me. My life is spent in one long effort\r\nto escape from the commonplaces of existence. These little\r\nproblems help me to do so.\"\r\n\r\n\"And you are a benefactor of the race,\" said I.\r\n\r\nHe shrugged his shoulders. \"Well, perhaps, after all, it is of\r\nsome little use,\" he remarked. \"'L'homme c'est rien--l'oeuvre\r\nc'est tout,' as Gustave Flaubert wrote to George Sand.\"\r\n\r\n\r\n\r\nADVENTURE III. A CASE OF IDENTITY\r\n\r\n\"My dear fellow,\" said Sherlock Holmes as we sat on either side\r\nof the fire in his lodgings at Baker Street, \"life is infinitely\r\nstranger than anything which the mind of man could invent. We\r\nwould not dare to conceive the things which are really mere\r\ncommonplaces of existence. If we could fly out of that window\r\nhand in hand, hover over this great city, gently remove the\r\nroofs, and peep in at the queer things which are going on, the\r\nstrange coincidences, the plannings, the cross-purposes, the\r\nwonderful chains of events, working through generations, and\r\nleading to the most outré results, it would make all fiction with\r\nits conventionalities and foreseen conclusions most stale and\r\nunprofitable.\"\r\n\r\n\"And yet I am not convinced of it,\" I answered. \"The cases which\r\ncome to light in the papers are, as a rule, bald enough, and\r\nvulgar enough. We have in our police reports realism pushed to\r\nits extreme limits, and yet the result is, it must be confessed,\r\nneither fascinating nor artistic.\"\r\n\r\n\"A certain selection and discretion must be used in producing a\r\nrealistic effect,\" remarked Holmes. \"This is wanting in the\r\npolice report, where more stress is laid, perhaps, upon the\r\nplatitudes of the magistrate than upon the details, which to an\r\nobserver contain the vital essence of the whole matter. Depend\r\nupon it, there is nothing so unnatural as the commonplace.\"\r\n\r\nI smiled and shook my head. \"I can quite understand your thinking\r\nso,\" I said. \"Of course, in your position of unofficial adviser\r\nand helper to everybody who is absolutely puzzled, throughout\r\nthree continents, you are brought in contact with all that is\r\nstrange and bizarre. But here\"--I picked up the morning paper\r\nfrom the ground--\"let us put it to a practical test. Here is the\r\nfirst heading upon which I come. 'A husband's cruelty to his\r\nwife.' There is half a column of print, but I know without\r\nreading it that it is all perfectly familiar to me. There is, of\r\ncourse, the other woman, the drink, the push, the blow, the\r\nbruise, the sympathetic sister or landlady. The crudest of\r\nwriters could invent nothing more crude.\"\r\n\r\n\"Indeed, your example is an unfortunate one for your argument,\"\r\nsaid Holmes, taking the paper and glancing his eye down it. \"This\r\nis the Dundas separation case, and, as it happens, I was engaged\r\nin clearing up some small points in connection with it. The\r\nhusband was a teetotaler, there was no other woman, and the\r\nconduct complained of was that he had drifted into the habit of\r\nwinding up every meal by taking out his false teeth and hurling\r\nthem at his wife, which, you will allow, is not an action likely\r\nto occur to the imagination of the average story-teller. Take a\r\npinch of snuff, Doctor, and acknowledge that I have scored over\r\nyou in your example.\"\r\n\r\nHe held out his snuffbox of old gold, with a great amethyst in\r\nthe centre of the lid. Its splendour was in such contrast to his\r\nhomely ways and simple life that I could not help commenting upon\r\nit.\r\n\r\n\"Ah,\" said he, \"I forgot that I had not seen you for some weeks.\r\nIt is a little souvenir from the King of Bohemia in return for my\r\nassistance in the case of the Irene Adler papers.\"\r\n\r\n\"And the ring?\" I asked, glancing at a remarkable brilliant which\r\nsparkled upon his finger.\r\n\r\n\"It was from the reigning family of Holland, though the matter in\r\nwhich I served them was of such delicacy that I cannot confide it\r\neven to you, who have been good enough to chronicle one or two of\r\nmy little problems.\"\r\n\r\n\"And have you any on hand just now?\" I asked with interest.\r\n\r\n\"Some ten or twelve, but none which present any feature of\r\ninterest. They are important, you understand, without being\r\ninteresting. Indeed, I have found that it is usually in\r\nunimportant matters that there is a field for the observation,\r\nand for the quick analysis of cause and effect which gives the\r\ncharm to an investigation. The larger crimes are apt to be the\r\nsimpler, for the bigger the crime the more obvious, as a rule, is\r\nthe motive. In these cases, save for one rather intricate matter\r\nwhich has been referred to me from Marseilles, there is nothing\r\nwhich presents any features of interest. It is possible, however,\r\nthat I may have something better before very many minutes are\r\nover, for this is one of my clients, or I am much mistaken.\"\r\n\r\nHe had risen from his chair and was standing between the parted\r\nblinds gazing down into the dull neutral-tinted London street.\r\nLooking over his shoulder, I saw that on the pavement opposite\r\nthere stood a large woman with a heavy fur boa round her neck,\r\nand a large curling red feather in a broad-brimmed hat which was\r\ntilted in a coquettish Duchess of Devonshire fashion over her\r\near. From under this great panoply she peeped up in a nervous,\r\nhesitating fashion at our windows, while her body oscillated\r\nbackward and forward, and her fingers fidgeted with her glove\r\nbuttons. Suddenly, with a plunge, as of the swimmer who leaves\r\nthe bank, she hurried across the road, and we heard the sharp\r\nclang of the bell.\r\n\r\n\"I have seen those symptoms before,\" said Holmes, throwing his\r\ncigarette into the fire. \"Oscillation upon the pavement always\r\nmeans an affaire de coeur. She would like advice, but is not sure\r\nthat the matter is not too delicate for communication. And yet\r\neven here we may discriminate. When a woman has been seriously\r\nwronged by a man she no longer oscillates, and the usual symptom\r\nis a broken bell wire. Here we may take it that there is a love\r\nmatter, but that the maiden is not so much angry as perplexed, or\r\ngrieved. But here she comes in person to resolve our doubts.\"\r\n\r\nAs he spoke there was a tap at the door, and the boy in buttons\r\nentered to announce Miss Mary Sutherland, while the lady herself\r\nloomed behind his small black figure like a full-sailed\r\nmerchant-man behind a tiny pilot boat. Sherlock Holmes welcomed\r\nher with the easy courtesy for which he was remarkable, and,\r\nhaving closed the door and bowed her into an armchair, he looked\r\nher over in the minute and yet abstracted fashion which was\r\npeculiar to him.\r\n\r\n\"Do you not find,\" he said, \"that with your short sight it is a\r\nlittle trying to do so much typewriting?\"\r\n\r\n\"I did at first,\" she answered, \"but now I know where the letters\r\nare without looking.\" Then, suddenly realising the full purport\r\nof his words, she gave a violent start and looked up, with fear\r\nand astonishment upon her broad, good-humoured face. \"You've\r\nheard about me, Mr. Holmes,\" she cried, \"else how could you know\r\nall that?\"\r\n\r\n\"Never mind,\" said Holmes, laughing; \"it is my business to know\r\nthings. Perhaps I have trained myself to see what others\r\noverlook. If not, why should you come to consult me?\"\r\n\r\n\"I came to you, sir, because I heard of you from Mrs. Etherege,\r\nwhose husband you found so easy when the police and everyone had\r\ngiven him up for dead. Oh, Mr. Holmes, I wish you would do as\r\nmuch for me. I'm not rich, but still I have a hundred a year in\r\nmy own right, besides the little that I make by the machine, and\r\nI would give it all to know what has become of Mr. Hosmer Angel.\"\r\n\r\n\"Why did you come away to consult me in such a hurry?\" asked\r\nSherlock Holmes, with his finger-tips together and his eyes to\r\nthe ceiling.\r\n\r\nAgain a startled look came over the somewhat vacuous face of Miss\r\nMary Sutherland. \"Yes, I did bang out of the house,\" she said,\r\n\"for it made me angry to see the easy way in which Mr.\r\nWindibank--that is, my father--took it all. He would not go to\r\nthe police, and he would not go to you, and so at last, as he\r\nwould do nothing and kept on saying that there was no harm done,\r\nit made me mad, and I just on with my things and came right away\r\nto you.\"\r\n\r\n\"Your father,\" said Holmes, \"your stepfather, surely, since the\r\nname is different.\"\r\n\r\n\"Yes, my stepfather. I call him father, though it sounds funny,\r\ntoo, for he is only five years and two months older than myself.\"\r\n\r\n\"And your mother is alive?\"\r\n\r\n\"Oh, yes, mother is alive and well. I wasn't best pleased, Mr.\r\nHolmes, when she married again so soon after father's death, and\r\na man who was nearly fifteen years younger than herself. Father\r\nwas a plumber in the Tottenham Court Road, and he left a tidy\r\nbusiness behind him, which mother carried on with Mr. Hardy, the\r\nforeman; but when Mr. Windibank came he made her sell the\r\nbusiness, for he was very superior, being a traveller in wines.\r\nThey got 4700 pounds for the goodwill and interest, which wasn't\r\nnear as much as father could have got if he had been alive.\"\r\n\r\nI had expected to see Sherlock Holmes impatient under this\r\nrambling and inconsequential narrative, but, on the contrary, he\r\nhad listened with the greatest concentration of attention.\r\n\r\n\"Your own little income,\" he asked, \"does it come out of the\r\nbusiness?\"\r\n\r\n\"Oh, no, sir. It is quite separate and was left me by my uncle\r\nNed in Auckland. It is in New Zealand stock, paying 4 1/2 per\r\ncent. Two thousand five hundred pounds was the amount, but I can\r\nonly touch the interest.\"\r\n\r\n\"You interest me extremely,\" said Holmes. \"And since you draw so\r\nlarge a sum as a hundred a year, with what you earn into the\r\nbargain, you no doubt travel a little and indulge yourself in\r\nevery way. I believe that a single lady can get on very nicely\r\nupon an income of about 60 pounds.\"\r\n\r\n\"I could do with much less than that, Mr. Holmes, but you\r\nunderstand that as long as I live at home I don't wish to be a\r\nburden to them, and so they have the use of the money just while\r\nI am staying with them. Of course, that is only just for the\r\ntime. Mr. Windibank draws my interest every quarter and pays it\r\nover to mother, and I find that I can do pretty well with what I\r\nearn at typewriting. It brings me twopence a sheet, and I can\r\noften do from fifteen to twenty sheets in a day.\"\r\n\r\n\"You have made your position very clear to me,\" said Holmes.\r\n\"This is my friend, Dr. Watson, before whom you can speak as\r\nfreely as before myself. Kindly tell us now all about your\r\nconnection with Mr. Hosmer Angel.\"\r\n\r\nA flush stole over Miss Sutherland's face, and she picked\r\nnervously at the fringe of her jacket. \"I met him first at the\r\ngasfitters' ball,\" she said. \"They used to send father tickets\r\nwhen he was alive, and then afterwards they remembered us, and\r\nsent them to mother. Mr. Windibank did not wish us to go. He\r\nnever did wish us to go anywhere. He would get quite mad if I\r\nwanted so much as to join a Sunday-school treat. But this time I\r\nwas set on going, and I would go; for what right had he to\r\nprevent? He said the folk were not fit for us to know, when all\r\nfather's friends were to be there. And he said that I had nothing\r\nfit to wear, when I had my purple plush that I had never so much\r\nas taken out of the drawer. At last, when nothing else would do,\r\nhe went off to France upon the business of the firm, but we went,\r\nmother and I, with Mr. Hardy, who used to be our foreman, and it\r\nwas there I met Mr. Hosmer Angel.\"\r\n\r\n\"I suppose,\" said Holmes, \"that when Mr. Windibank came back from\r\nFrance he was very annoyed at your having gone to the ball.\"\r\n\r\n\"Oh, well, he was very good about it. He laughed, I remember, and\r\nshrugged his shoulders, and said there was no use denying\r\nanything to a woman, for she would have her way.\"\r\n\r\n\"I see. Then at the gasfitters' ball you met, as I understand, a\r\ngentleman called Mr. Hosmer Angel.\"\r\n\r\n\"Yes, sir. I met him that night, and he called next day to ask if\r\nwe had got home all safe, and after that we met him--that is to\r\nsay, Mr. Holmes, I met him twice for walks, but after that father\r\ncame back again, and Mr. Hosmer Angel could not come to the house\r\nany more.\"\r\n\r\n\"No?\"\r\n\r\n\"Well, you know father didn't like anything of the sort. He\r\nwouldn't have any visitors if he could help it, and he used to\r\nsay that a woman should be happy in her own family circle. But\r\nthen, as I used to say to mother, a woman wants her own circle to\r\nbegin with, and I had not got mine yet.\"\r\n\r\n\"But how about Mr. Hosmer Angel? Did he make no attempt to see\r\nyou?\"\r\n\r\n\"Well, father was going off to France again in a week, and Hosmer\r\nwrote and said that it would be safer and better not to see each\r\nother until he had gone. We could write in the meantime, and he\r\nused to write every day. I took the letters in in the morning, so\r\nthere was no need for father to know.\"\r\n\r\n\"Were you engaged to the gentleman at this time?\"\r\n\r\n\"Oh, yes, Mr. Holmes. We were engaged after the first walk that\r\nwe took. Hosmer--Mr. Angel--was a cashier in an office in\r\nLeadenhall Street--and--\"\r\n\r\n\"What office?\"\r\n\r\n\"That's the worst of it, Mr. Holmes, I don't know.\"\r\n\r\n\"Where did he live, then?\"\r\n\r\n\"He slept on the premises.\"\r\n\r\n\"And you don't know his address?\"\r\n\r\n\"No--except that it was Leadenhall Street.\"\r\n\r\n\"Where did you address your letters, then?\"\r\n\r\n\"To the Leadenhall Street Post Office, to be left till called\r\nfor. He said that if they were sent to the office he would be\r\nchaffed by all the other clerks about having letters from a lady,\r\nso I offered to typewrite them, like he did his, but he wouldn't\r\nhave that, for he said that when I wrote them they seemed to come\r\nfrom me, but when they were typewritten he always felt that the\r\nmachine had come between us. That will just show you how fond he\r\nwas of me, Mr. Holmes, and the little things that he would think\r\nof.\"\r\n\r\n\"It was most suggestive,\" said Holmes. \"It has long been an axiom\r\nof mine that the little things are infinitely the most important.\r\nCan you remember any other little things about Mr. Hosmer Angel?\"\r\n\r\n\"He was a very shy man, Mr. Holmes. He would rather walk with me\r\nin the evening than in the daylight, for he said that he hated to\r\nbe conspicuous. Very retiring and gentlemanly he was. Even his\r\nvoice was gentle. He'd had the quinsy and swollen glands when he\r\nwas young, he told me, and it had left him with a weak throat,\r\nand a hesitating, whispering fashion of speech. He was always\r\nwell dressed, very neat and plain, but his eyes were weak, just\r\nas mine are, and he wore tinted glasses against the glare.\"\r\n\r\n\"Well, and what happened when Mr. Windibank, your stepfather,\r\nreturned to France?\"\r\n\r\n\"Mr. Hosmer Angel came to the house again and proposed that we\r\nshould marry before father came back. He was in dreadful earnest\r\nand made me swear, with my hands on the Testament, that whatever\r\nhappened I would always be true to him. Mother said he was quite\r\nright to make me swear, and that it was a sign of his passion.\r\nMother was all in his favour from the first and was even fonder\r\nof him than I was. Then, when they talked of marrying within the\r\nweek, I began to ask about father; but they both said never to\r\nmind about father, but just to tell him afterwards, and mother\r\nsaid she would make it all right with him. I didn't quite like\r\nthat, Mr. Holmes. It seemed funny that I should ask his leave, as\r\nhe was only a few years older than me; but I didn't want to do\r\nanything on the sly, so I wrote to father at Bordeaux, where the\r\ncompany has its French offices, but the letter came back to me on\r\nthe very morning of the wedding.\"\r\n\r\n\"It missed him, then?\"\r\n\r\n\"Yes, sir; for he had started to England just before it arrived.\"\r\n\r\n\"Ha! that was unfortunate. Your wedding was arranged, then, for\r\nthe Friday. Was it to be in church?\"\r\n\r\n\"Yes, sir, but very quietly. It was to be at St. Saviour's, near\r\nKing's Cross, and we were to have breakfast afterwards at the St.\r\nPancras Hotel. Hosmer came for us in a hansom, but as there were\r\ntwo of us he put us both into it and stepped himself into a\r\nfour-wheeler, which happened to be the only other cab in the\r\nstreet. We got to the church first, and when the four-wheeler\r\ndrove up we waited for him to step out, but he never did, and\r\nwhen the cabman got down from the box and looked there was no one\r\nthere! The cabman said that he could not imagine what had become\r\nof him, for he had seen him get in with his own eyes. That was\r\nlast Friday, Mr. Holmes, and I have never seen or heard anything\r\nsince then to throw any light upon what became of him.\"\r\n\r\n\"It seems to me that you have been very shamefully treated,\" said\r\nHolmes.\r\n\r\n\"Oh, no, sir! He was too good and kind to leave me so. Why, all\r\nthe morning he was saying to me that, whatever happened, I was to\r\nbe true; and that even if something quite unforeseen occurred to\r\nseparate us, I was always to remember that I was pledged to him,\r\nand that he would claim his pledge sooner or later. It seemed\r\nstrange talk for a wedding-morning, but what has happened since\r\ngives a meaning to it.\"\r\n\r\n\"Most certainly it does. Your own opinion is, then, that some\r\nunforeseen catastrophe has occurred to him?\"\r\n\r\n\"Yes, sir. I believe that he foresaw some danger, or else he\r\nwould not have talked so. And then I think that what he foresaw\r\nhappened.\"\r\n\r\n\"But you have no notion as to what it could have been?\"\r\n\r\n\"None.\"\r\n\r\n\"One more question. How did your mother take the matter?\"\r\n\r\n\"She was angry, and said that I was never to speak of the matter\r\nagain.\"\r\n\r\n\"And your father? Did you tell him?\"\r\n\r\n\"Yes; and he seemed to think, with me, that something had\r\nhappened, and that I should hear of Hosmer again. As he said,\r\nwhat interest could anyone have in bringing me to the doors of\r\nthe church, and then leaving me? Now, if he had borrowed my\r\nmoney, or if he had married me and got my money settled on him,\r\nthere might be some reason, but Hosmer was very independent about\r\nmoney and never would look at a shilling of mine. And yet, what\r\ncould have happened? And why could he not write? Oh, it drives me\r\nhalf-mad to think of it, and I can't sleep a wink at night.\" She\r\npulled a little handkerchief out of her muff and began to sob\r\nheavily into it.\r\n\r\n\"I shall glance into the case for you,\" said Holmes, rising, \"and\r\nI have no doubt that we shall reach some definite result. Let the\r\nweight of the matter rest upon me now, and do not let your mind\r\ndwell upon it further. Above all, try to let Mr. Hosmer Angel\r\nvanish from your memory, as he has done from your life.\"\r\n\r\n\"Then you don't think I'll see him again?\"\r\n\r\n\"I fear not.\"\r\n\r\n\"Then what has happened to him?\"\r\n\r\n\"You will leave that question in my hands. I should like an\r\naccurate description of him and any letters of his which you can\r\nspare.\"\r\n\r\n\"I advertised for him in last Saturday's Chronicle,\" said she.\r\n\"Here is the slip and here are four letters from him.\"\r\n\r\n\"Thank you. And your address?\"\r\n\r\n\"No. 31 Lyon Place, Camberwell.\"\r\n\r\n\"Mr. Angel's address you never had, I understand. Where is your\r\nfather's place of business?\"\r\n\r\n\"He travels for Westhouse & Marbank, the great claret importers\r\nof Fenchurch Street.\"\r\n\r\n\"Thank you. You have made your statement very clearly. You will\r\nleave the papers here, and remember the advice which I have given\r\nyou. Let the whole incident be a sealed book, and do not allow it\r\nto affect your life.\"\r\n\r\n\"You are very kind, Mr. Holmes, but I cannot do that. I shall be\r\ntrue to Hosmer. He shall find me ready when he comes back.\"\r\n\r\nFor all the preposterous hat and the vacuous face, there was\r\nsomething noble in the simple faith of our visitor which\r\ncompelled our respect. She laid her little bundle of papers upon\r\nthe table and went her way, with a promise to come again whenever\r\nshe might be summoned.\r\n\r\nSherlock Holmes sat silent for a few minutes with his fingertips\r\nstill pressed together, his legs stretched out in front of him,\r\nand his gaze directed upward to the ceiling. Then he took down\r\nfrom the rack the old and oily clay pipe, which was to him as a\r\ncounsellor, and, having lit it, he leaned back in his chair, with\r\nthe thick blue cloud-wreaths spinning up from him, and a look of\r\ninfinite languor in his face.\r\n\r\n\"Quite an interesting study, that maiden,\" he observed. \"I found\r\nher more interesting than her little problem, which, by the way,\r\nis rather a trite one. You will find parallel cases, if you\r\nconsult my index, in Andover in '77, and there was something of\r\nthe sort at The Hague last year. Old as is the idea, however,\r\nthere were one or two details which were new to me. But the\r\nmaiden herself was most instructive.\"\r\n\r\n\"You appeared to read a good deal upon her which was quite\r\ninvisible to me,\" I remarked.\r\n\r\n\"Not invisible but unnoticed, Watson. You did not know where to\r\nlook, and so you missed all that was important. I can never bring\r\nyou to realise the importance of sleeves, the suggestiveness of\r\nthumb-nails, or the great issues that may hang from a boot-lace.\r\nNow, what did you gather from that woman's appearance? Describe\r\nit.\"\r\n\r\n\"Well, she had a slate-coloured, broad-brimmed straw hat, with a\r\nfeather of a brickish red. Her jacket was black, with black beads\r\nsewn upon it, and a fringe of little black jet ornaments. Her\r\ndress was brown, rather darker than coffee colour, with a little\r\npurple plush at the neck and sleeves. Her gloves were greyish and\r\nwere worn through at the right forefinger. Her boots I didn't\r\nobserve. She had small round, hanging gold earrings, and a\r\ngeneral air of being fairly well-to-do in a vulgar, comfortable,\r\neasy-going way.\"\r\n\r\nSherlock Holmes clapped his hands softly together and chuckled.\r\n\r\n\"'Pon my word, Watson, you are coming along wonderfully. You have\r\nreally done very well indeed. It is true that you have missed\r\neverything of importance, but you have hit upon the method, and\r\nyou have a quick eye for colour. Never trust to general\r\nimpressions, my boy, but concentrate yourself upon details. My\r\nfirst glance is always at a woman's sleeve. In a man it is\r\nperhaps better first to take the knee of the trouser. As you\r\nobserve, this woman had plush upon her sleeves, which is a most\r\nuseful material for showing traces. The double line a little\r\nabove the wrist, where the typewritist presses against the table,\r\nwas beautifully defined. The sewing-machine, of the hand type,\r\nleaves a similar mark, but only on the left arm, and on the side\r\nof it farthest from the thumb, instead of being right across the\r\nbroadest part, as this was. I then glanced at her face, and,\r\nobserving the dint of a pince-nez at either side of her nose, I\r\nventured a remark upon short sight and typewriting, which seemed\r\nto surprise her.\"\r\n\r\n\"It surprised me.\"\r\n\r\n\"But, surely, it was obvious. I was then much surprised and\r\ninterested on glancing down to observe that, though the boots\r\nwhich she was wearing were not unlike each other, they were\r\nreally odd ones; the one having a slightly decorated toe-cap, and\r\nthe other a plain one. One was buttoned only in the two lower\r\nbuttons out of five, and the other at the first, third, and\r\nfifth. Now, when you see that a young lady, otherwise neatly\r\ndressed, has come away from home with odd boots, half-buttoned,\r\nit is no great deduction to say that she came away in a hurry.\"\r\n\r\n\"And what else?\" I asked, keenly interested, as I always was, by\r\nmy friend's incisive reasoning.\r\n\r\n\"I noted, in passing, that she had written a note before leaving\r\nhome but after being fully dressed. You observed that her right\r\nglove was torn at the forefinger, but you did not apparently see\r\nthat both glove and finger were stained with violet ink. She had\r\nwritten in a hurry and dipped her pen too deep. It must have been\r\nthis morning, or the mark would not remain clear upon the finger.\r\nAll this is amusing, though rather elementary, but I must go back\r\nto business, Watson. Would you mind reading me the advertised\r\ndescription of Mr. Hosmer Angel?\"\r\n\r\nI held the little printed slip to the light.\r\n\r\n\"Missing,\" it said, \"on the morning of the fourteenth, a gentleman\r\nnamed Hosmer Angel. About five ft. seven in. in height;\r\nstrongly built, sallow complexion, black hair, a little bald in\r\nthe centre, bushy, black side-whiskers and moustache; tinted\r\nglasses, slight infirmity of speech. Was dressed, when last seen,\r\nin black frock-coat faced with silk, black waistcoat, gold Albert\r\nchain, and grey Harris tweed trousers, with brown gaiters over\r\nelastic-sided boots. Known to have been employed in an office in\r\nLeadenhall Street. Anybody bringing--\"\r\n\r\n\"That will do,\" said Holmes. \"As to the letters,\" he continued,\r\nglancing over them, \"they are very commonplace. Absolutely no\r\nclue in them to Mr. Angel, save that he quotes Balzac once. There\r\nis one remarkable point, however, which will no doubt strike\r\nyou.\"\r\n\r\n\"They are typewritten,\" I remarked.\r\n\r\n\"Not only that, but the signature is typewritten. Look at the\r\nneat little 'Hosmer Angel' at the bottom. There is a date, you\r\nsee, but no superscription except Leadenhall Street, which is\r\nrather vague. The point about the signature is very suggestive--in\r\nfact, we may call it conclusive.\"\r\n\r\n\"Of what?\"\r\n\r\n\"My dear fellow, is it possible you do not see how strongly it\r\nbears upon the case?\"\r\n\r\n\"I cannot say that I do unless it were that he wished to be able\r\nto deny his signature if an action for breach of promise were\r\ninstituted.\"\r\n\r\n\"No, that was not the point. However, I shall write two letters,\r\nwhich should settle the matter. One is to a firm in the City, the\r\nother is to the young lady's stepfather, Mr. Windibank, asking\r\nhim whether he could meet us here at six o'clock tomorrow\r\nevening. It is just as well that we should do business with the\r\nmale relatives. And now, Doctor, we can do nothing until the\r\nanswers to those letters come, so we may put our little problem\r\nupon the shelf for the interim.\"\r\n\r\nI had had so many reasons to believe in my friend's subtle powers\r\nof reasoning and extraordinary energy in action that I felt that\r\nhe must have some solid grounds for the assured and easy\r\ndemeanour with which he treated the singular mystery which he had\r\nbeen called upon to fathom. Once only had I known him to fail, in\r\nthe case of the King of Bohemia and of the Irene Adler\r\nphotograph; but when I looked back to the weird business of the\r\nSign of Four, and the extraordinary circumstances connected with\r\nthe Study in Scarlet, I felt that it would be a strange tangle\r\nindeed which he could not unravel.\r\n\r\nI left him then, still puffing at his black clay pipe, with the\r\nconviction that when I came again on the next evening I would\r\nfind that he held in his hands all the clues which would lead up\r\nto the identity of the disappearing bridegroom of Miss Mary\r\nSutherland.\r\n\r\nA professional case of great gravity was engaging my own\r\nattention at the time, and the whole of next day I was busy at\r\nthe bedside of the sufferer. It was not until close upon six\r\no'clock that I found myself free and was able to spring into a\r\nhansom and drive to Baker Street, half afraid that I might be too\r\nlate to assist at the dénouement of the little mystery. I found\r\nSherlock Holmes alone, however, half asleep, with his long, thin\r\nform curled up in the recesses of his armchair. A formidable\r\narray of bottles and test-tubes, with the pungent cleanly smell\r\nof hydrochloric acid, told me that he had spent his day in the\r\nchemical work which was so dear to him.\r\n\r\n\"Well, have you solved it?\" I asked as I entered.\r\n\r\n\"Yes. It was the bisulphate of baryta.\"\r\n\r\n\"No, no, the mystery!\" I cried.\r\n\r\n\"Oh, that! I thought of the salt that I have been working upon.\r\nThere was never any mystery in the matter, though, as I said\r\nyesterday, some of the details are of interest. The only drawback\r\nis that there is no law, I fear, that can touch the scoundrel.\"\r\n\r\n\"Who was he, then, and what was his object in deserting Miss\r\nSutherland?\"\r\n\r\nThe question was hardly out of my mouth, and Holmes had not yet\r\nopened his lips to reply, when we heard a heavy footfall in the\r\npassage and a tap at the door.\r\n\r\n\"This is the girl's stepfather, Mr. James Windibank,\" said\r\nHolmes. \"He has written to me to say that he would be here at\r\nsix. Come in!\"\r\n\r\nThe man who entered was a sturdy, middle-sized fellow, some\r\nthirty years of age, clean-shaven, and sallow-skinned, with a\r\nbland, insinuating manner, and a pair of wonderfully sharp and\r\npenetrating grey eyes. He shot a questioning glance at each of\r\nus, placed his shiny top-hat upon the sideboard, and with a\r\nslight bow sidled down into the nearest chair.\r\n\r\n\"Good-evening, Mr. James Windibank,\" said Holmes. \"I think that\r\nthis typewritten letter is from you, in which you made an\r\nappointment with me for six o'clock?\"\r\n\r\n\"Yes, sir. I am afraid that I am a little late, but I am not\r\nquite my own master, you know. I am sorry that Miss Sutherland\r\nhas troubled you about this little matter, for I think it is far\r\nbetter not to wash linen of the sort in public. It was quite\r\nagainst my wishes that she came, but she is a very excitable,\r\nimpulsive girl, as you may have noticed, and she is not easily\r\ncontrolled when she has made up her mind on a point. Of course, I\r\ndid not mind you so much, as you are not connected with the\r\nofficial police, but it is not pleasant to have a family\r\nmisfortune like this noised abroad. Besides, it is a useless\r\nexpense, for how could you possibly find this Hosmer Angel?\"\r\n\r\n\"On the contrary,\" said Holmes quietly; \"I have every reason to\r\nbelieve that I will succeed in discovering Mr. Hosmer Angel.\"\r\n\r\nMr. Windibank gave a violent start and dropped his gloves. \"I am\r\ndelighted to hear it,\" he said.\r\n\r\n\"It is a curious thing,\" remarked Holmes, \"that a typewriter has\r\nreally quite as much individuality as a man's handwriting. Unless\r\nthey are quite new, no two of them write exactly alike. Some\r\nletters get more worn than others, and some wear only on one\r\nside. Now, you remark in this note of yours, Mr. Windibank, that\r\nin every case there is some little slurring over of the 'e,' and\r\na slight defect in the tail of the 'r.' There are fourteen other\r\ncharacteristics, but those are the more obvious.\"\r\n\r\n\"We do all our correspondence with this machine at the office,\r\nand no doubt it is a little worn,\" our visitor answered, glancing\r\nkeenly at Holmes with his bright little eyes.\r\n\r\n\"And now I will show you what is really a very interesting study,\r\nMr. Windibank,\" Holmes continued. \"I think of writing another\r\nlittle monograph some of these days on the typewriter and its\r\nrelation to crime. It is a subject to which I have devoted some\r\nlittle attention. I have here four letters which purport to come\r\nfrom the missing man. They are all typewritten. In each case, not\r\nonly are the 'e's' slurred and the 'r's' tailless, but you will\r\nobserve, if you care to use my magnifying lens, that the fourteen\r\nother characteristics to which I have alluded are there as well.\"\r\n\r\nMr. Windibank sprang out of his chair and picked up his hat. \"I\r\ncannot waste time over this sort of fantastic talk, Mr. Holmes,\"\r\nhe said. \"If you can catch the man, catch him, and let me know\r\nwhen you have done it.\"\r\n\r\n\"Certainly,\" said Holmes, stepping over and turning the key in\r\nthe door. \"I let you know, then, that I have caught him!\"\r\n\r\n\"What! where?\" shouted Mr. Windibank, turning white to his lips\r\nand glancing about him like a rat in a trap.\r\n\r\n\"Oh, it won't do--really it won't,\" said Holmes suavely. \"There\r\nis no possible getting out of it, Mr. Windibank. It is quite too\r\ntransparent, and it was a very bad compliment when you said that\r\nit was impossible for me to solve so simple a question. That's\r\nright! Sit down and let us talk it over.\"\r\n\r\nOur visitor collapsed into a chair, with a ghastly face and a\r\nglitter of moisture on his brow. \"It--it's not actionable,\" he\r\nstammered.\r\n\r\n\"I am very much afraid that it is not. But between ourselves,\r\nWindibank, it was as cruel and selfish and heartless a trick in a\r\npetty way as ever came before me. Now, let me just run over the\r\ncourse of events, and you will contradict me if I go wrong.\"\r\n\r\nThe man sat huddled up in his chair, with his head sunk upon his\r\nbreast, like one who is utterly crushed. Holmes stuck his feet up\r\non the corner of the mantelpiece and, leaning back with his hands\r\nin his pockets, began talking, rather to himself, as it seemed,\r\nthan to us.\r\n\r\n\"The man married a woman very much older than himself for her\r\nmoney,\" said he, \"and he enjoyed the use of the money of the\r\ndaughter as long as she lived with them. It was a considerable\r\nsum, for people in their position, and the loss of it would have\r\nmade a serious difference. It was worth an effort to preserve it.\r\nThe daughter was of a good, amiable disposition, but affectionate\r\nand warm-hearted in her ways, so that it was evident that with\r\nher fair personal advantages, and her little income, she would\r\nnot be allowed to remain single long. Now her marriage would\r\nmean, of course, the loss of a hundred a year, so what does her\r\nstepfather do to prevent it? He takes the obvious course of\r\nkeeping her at home and forbidding her to seek the company of\r\npeople of her own age. But soon he found that that would not\r\nanswer forever. She became restive, insisted upon her rights, and\r\nfinally announced her positive intention of going to a certain\r\nball. What does her clever stepfather do then? He conceives an\r\nidea more creditable to his head than to his heart. With the\r\nconnivance and assistance of his wife he disguised himself,\r\ncovered those keen eyes with tinted glasses, masked the face with\r\na moustache and a pair of bushy whiskers, sunk that clear voice\r\ninto an insinuating whisper, and doubly secure on account of the\r\ngirl's short sight, he appears as Mr. Hosmer Angel, and keeps off\r\nother lovers by making love himself.\"\r\n\r\n\"It was only a joke at first,\" groaned our visitor. \"We never\r\nthought that she would have been so carried away.\"\r\n\r\n\"Very likely not. However that may be, the young lady was very\r\ndecidedly carried away, and, having quite made up her mind that\r\nher stepfather was in France, the suspicion of treachery never\r\nfor an instant entered her mind. She was flattered by the\r\ngentleman's attentions, and the effect was increased by the\r\nloudly expressed admiration of her mother. Then Mr. Angel began\r\nto call, for it was obvious that the matter should be pushed as\r\nfar as it would go if a real effect were to be produced. There\r\nwere meetings, and an engagement, which would finally secure the\r\ngirl's affections from turning towards anyone else. But the\r\ndeception could not be kept up forever. These pretended journeys\r\nto France were rather cumbrous. The thing to do was clearly to\r\nbring the business to an end in such a dramatic manner that it\r\nwould leave a permanent impression upon the young lady's mind and\r\nprevent her from looking upon any other suitor for some time to\r\ncome. Hence those vows of fidelity exacted upon a Testament, and\r\nhence also the allusions to a possibility of something happening\r\non the very morning of the wedding. James Windibank wished Miss\r\nSutherland to be so bound to Hosmer Angel, and so uncertain as to\r\nhis fate, that for ten years to come, at any rate, she would not\r\nlisten to another man. As far as the church door he brought her,\r\nand then, as he could go no farther, he conveniently vanished\r\naway by the old trick of stepping in at one door of a\r\nfour-wheeler and out at the other. I think that was the chain of\r\nevents, Mr. Windibank!\"\r\n\r\nOur visitor had recovered something of his assurance while Holmes\r\nhad been talking, and he rose from his chair now with a cold\r\nsneer upon his pale face.\r\n\r\n\"It may be so, or it may not, Mr. Holmes,\" said he, \"but if you\r\nare so very sharp you ought to be sharp enough to know that it is\r\nyou who are breaking the law now, and not me. I have done nothing\r\nactionable from the first, but as long as you keep that door\r\nlocked you lay yourself open to an action for assault and illegal\r\nconstraint.\"\r\n\r\n\"The law cannot, as you say, touch you,\" said Holmes, unlocking\r\nand throwing open the door, \"yet there never was a man who\r\ndeserved punishment more. If the young lady has a brother or a\r\nfriend, he ought to lay a whip across your shoulders. By Jove!\"\r\nhe continued, flushing up at the sight of the bitter sneer upon\r\nthe man's face, \"it is not part of my duties to my client, but\r\nhere's a hunting crop handy, and I think I shall just treat\r\nmyself to--\" He took two swift steps to the whip, but before he\r\ncould grasp it there was a wild clatter of steps upon the stairs,\r\nthe heavy hall door banged, and from the window we could see Mr.\r\nJames Windibank running at the top of his speed down the road.\r\n\r\n\"There's a cold-blooded scoundrel!\" said Holmes, laughing, as he\r\nthrew himself down into his chair once more. \"That fellow will\r\nrise from crime to crime until he does something very bad, and\r\nends on a gallows. The case has, in some respects, been not\r\nentirely devoid of interest.\"\r\n\r\n\"I cannot now entirely see all the steps of your reasoning,\" I\r\nremarked.\r\n\r\n\"Well, of course it was obvious from the first that this Mr.\r\nHosmer Angel must have some strong object for his curious\r\nconduct, and it was equally clear that the only man who really\r\nprofited by the incident, as far as we could see, was the\r\nstepfather. Then the fact that the two men were never together,\r\nbut that the one always appeared when the other was away, was\r\nsuggestive. So were the tinted spectacles and the curious voice,\r\nwhich both hinted at a disguise, as did the bushy whiskers. My\r\nsuspicions were all confirmed by his peculiar action in\r\ntypewriting his signature, which, of course, inferred that his\r\nhandwriting was so familiar to her that she would recognise even\r\nthe smallest sample of it. You see all these isolated facts,\r\ntogether with many minor ones, all pointed in the same\r\ndirection.\"\r\n\r\n\"And how did you verify them?\"\r\n\r\n\"Having once spotted my man, it was easy to get corroboration. I\r\nknew the firm for which this man worked. Having taken the printed\r\ndescription. I eliminated everything from it which could be the\r\nresult of a disguise--the whiskers, the glasses, the voice, and I\r\nsent it to the firm, with a request that they would inform me\r\nwhether it answered to the description of any of their\r\ntravellers. I had already noticed the peculiarities of the\r\ntypewriter, and I wrote to the man himself at his business\r\naddress asking him if he would come here. As I expected, his\r\nreply was typewritten and revealed the same trivial but\r\ncharacteristic defects. The same post brought me a letter from\r\nWesthouse & Marbank, of Fenchurch Street, to say that the\r\ndescription tallied in every respect with that of their employé,\r\nJames Windibank. Voilà tout!\"\r\n\r\n\"And Miss Sutherland?\"\r\n\r\n\"If I tell her she will not believe me. You may remember the old\r\nPersian saying, 'There is danger for him who taketh the tiger\r\ncub, and danger also for whoso snatches a delusion from a woman.'\r\nThere is as much sense in Hafiz as in Horace, and as much\r\nknowledge of the world.\"\r\n\r\n\r\n\r\nADVENTURE IV. THE BOSCOMBE VALLEY MYSTERY\r\n\r\nWe were seated at breakfast one morning, my wife and I, when the\r\nmaid brought in a telegram. It was from Sherlock Holmes and ran\r\nin this way:\r\n\r\n\"Have you a couple of days to spare? Have just been wired for from\r\nthe west of England in connection with Boscombe Valley tragedy.\r\nShall be glad if you will come with me. Air and scenery perfect.\r\nLeave Paddington by the 11:15.\"\r\n\r\n\"What do you say, dear?\" said my wife, looking across at me.\r\n\"Will you go?\"\r\n\r\n\"I really don't know what to say. I have a fairly long list at\r\npresent.\"\r\n\r\n\"Oh, Anstruther would do your work for you. You have been looking\r\na little pale lately. I think that the change would do you good,\r\nand you are always so interested in Mr. Sherlock Holmes' cases.\"\r\n\r\n\"I should be ungrateful if I were not, seeing what I gained\r\nthrough one of them,\" I answered. \"But if I am to go, I must pack\r\nat once, for I have only half an hour.\"\r\n\r\nMy experience of camp life in Afghanistan had at least had the\r\neffect of making me a prompt and ready traveller. My wants were\r\nfew and simple, so that in less than the time stated I was in a\r\ncab with my valise, rattling away to Paddington Station. Sherlock\r\nHolmes was pacing up and down the platform, his tall, gaunt\r\nfigure made even gaunter and taller by his long grey\r\ntravelling-cloak and close-fitting cloth cap.\r\n\r\n\"It is really very good of you to come, Watson,\" said he. \"It\r\nmakes a considerable difference to me, having someone with me on\r\nwhom I can thoroughly rely. Local aid is always either worthless\r\nor else biassed. If you will keep the two corner seats I shall\r\nget the tickets.\"\r\n\r\nWe had the carriage to ourselves save for an immense litter of\r\npapers which Holmes had brought with him. Among these he rummaged\r\nand read, with intervals of note-taking and of meditation, until\r\nwe were past Reading. Then he suddenly rolled them all into a\r\ngigantic ball and tossed them up onto the rack.\r\n\r\n\"Have you heard anything of the case?\" he asked.\r\n\r\n\"Not a word. I have not seen a paper for some days.\"\r\n\r\n\"The London press has not had very full accounts. I have just\r\nbeen looking through all the recent papers in order to master the\r\nparticulars. It seems, from what I gather, to be one of those\r\nsimple cases which are so extremely difficult.\"\r\n\r\n\"That sounds a little paradoxical.\"\r\n\r\n\"But it is profoundly true. Singularity is almost invariably a\r\nclue. The more featureless and commonplace a crime is, the more\r\ndifficult it is to bring it home. In this case, however, they\r\nhave established a very serious case against the son of the\r\nmurdered man.\"\r\n\r\n\"It is a murder, then?\"\r\n\r\n\"Well, it is conjectured to be so. I shall take nothing for\r\ngranted until I have the opportunity of looking personally into\r\nit. I will explain the state of things to you, as far as I have\r\nbeen able to understand it, in a very few words.\r\n\r\n\"Boscombe Valley is a country district not very far from Ross, in\r\nHerefordshire. The largest landed proprietor in that part is a\r\nMr. John Turner, who made his money in Australia and returned\r\nsome years ago to the old country. One of the farms which he\r\nheld, that of Hatherley, was let to Mr. Charles McCarthy, who was\r\nalso an ex-Australian. The men had known each other in the\r\ncolonies, so that it was not unnatural that when they came to\r\nsettle down they should do so as near each other as possible.\r\nTurner was apparently the richer man, so McCarthy became his\r\ntenant but still remained, it seems, upon terms of perfect\r\nequality, as they were frequently together. McCarthy had one son,\r\na lad of eighteen, and Turner had an only daughter of the same\r\nage, but neither of them had wives living. They appear to have\r\navoided the society of the neighbouring English families and to\r\nhave led retired lives, though both the McCarthys were fond of\r\nsport and were frequently seen at the race-meetings of the\r\nneighbourhood. McCarthy kept two servants--a man and a girl.\r\nTurner had a considerable household, some half-dozen at the\r\nleast. That is as much as I have been able to gather about the\r\nfamilies. Now for the facts.\r\n\r\n\"On June 3rd, that is, on Monday last, McCarthy left his house at\r\nHatherley about three in the afternoon and walked down to the\r\nBoscombe Pool, which is a small lake formed by the spreading out\r\nof the stream which runs down the Boscombe Valley. He had been\r\nout with his serving-man in the morning at Ross, and he had told\r\nthe man that he must hurry, as he had an appointment of\r\nimportance to keep at three. From that appointment he never came\r\nback alive.\r\n\r\n\"From Hatherley Farm-house to the Boscombe Pool is a quarter of a\r\nmile, and two people saw him as he passed over this ground. One\r\nwas an old woman, whose name is not mentioned, and the other was\r\nWilliam Crowder, a game-keeper in the employ of Mr. Turner. Both\r\nthese witnesses depose that Mr. McCarthy was walking alone. The\r\ngame-keeper adds that within a few minutes of his seeing Mr.\r\nMcCarthy pass he had seen his son, Mr. James McCarthy, going the\r\nsame way with a gun under his arm. To the best of his belief, the\r\nfather was actually in sight at the time, and the son was\r\nfollowing him. He thought no more of the matter until he heard in\r\nthe evening of the tragedy that had occurred.\r\n\r\n\"The two McCarthys were seen after the time when William Crowder,\r\nthe game-keeper, lost sight of them. The Boscombe Pool is thickly\r\nwooded round, with just a fringe of grass and of reeds round the\r\nedge. A girl of fourteen, Patience Moran, who is the daughter of\r\nthe lodge-keeper of the Boscombe Valley estate, was in one of the\r\nwoods picking flowers. She states that while she was there she\r\nsaw, at the border of the wood and close by the lake, Mr.\r\nMcCarthy and his son, and that they appeared to be having a\r\nviolent quarrel. She heard Mr. McCarthy the elder using very\r\nstrong language to his son, and she saw the latter raise up his\r\nhand as if to strike his father. She was so frightened by their\r\nviolence that she ran away and told her mother when she reached\r\nhome that she had left the two McCarthys quarrelling near\r\nBoscombe Pool, and that she was afraid that they were going to\r\nfight. She had hardly said the words when young Mr. McCarthy came\r\nrunning up to the lodge to say that he had found his father dead\r\nin the wood, and to ask for the help of the lodge-keeper. He was\r\nmuch excited, without either his gun or his hat, and his right\r\nhand and sleeve were observed to be stained with fresh blood. On\r\nfollowing him they found the dead body stretched out upon the\r\ngrass beside the pool. The head had been beaten in by repeated\r\nblows of some heavy and blunt weapon. The injuries were such as\r\nmight very well have been inflicted by the butt-end of his son's\r\ngun, which was found lying on the grass within a few paces of the\r\nbody. Under these circumstances the young man was instantly\r\narrested, and a verdict of 'wilful murder' having been returned\r\nat the inquest on Tuesday, he was on Wednesday brought before the\r\nmagistrates at Ross, who have referred the case to the next\r\nAssizes. Those are the main facts of the case as they came out\r\nbefore the coroner and the police-court.\"\r\n\r\n\"I could hardly imagine a more damning case,\" I remarked. \"If\r\never circumstantial evidence pointed to a criminal it does so\r\nhere.\"\r\n\r\n\"Circumstantial evidence is a very tricky thing,\" answered Holmes\r\nthoughtfully. \"It may seem to point very straight to one thing,\r\nbut if you shift your own point of view a little, you may find it\r\npointing in an equally uncompromising manner to something\r\nentirely different. It must be confessed, however, that the case\r\nlooks exceedingly grave against the young man, and it is very\r\npossible that he is indeed the culprit. There are several people\r\nin the neighbourhood, however, and among them Miss Turner, the\r\ndaughter of the neighbouring landowner, who believe in his\r\ninnocence, and who have retained Lestrade, whom you may recollect\r\nin connection with the Study in Scarlet, to work out the case in\r\nhis interest. Lestrade, being rather puzzled, has referred the\r\ncase to me, and hence it is that two middle-aged gentlemen are\r\nflying westward at fifty miles an hour instead of quietly\r\ndigesting their breakfasts at home.\"\r\n\r\n\"I am afraid,\" said I, \"that the facts are so obvious that you\r\nwill find little credit to be gained out of this case.\"\r\n\r\n\"There is nothing more deceptive than an obvious fact,\" he\r\nanswered, laughing. \"Besides, we may chance to hit upon some\r\nother obvious facts which may have been by no means obvious to\r\nMr. Lestrade. You know me too well to think that I am boasting\r\nwhen I say that I shall either confirm or destroy his theory by\r\nmeans which he is quite incapable of employing, or even of\r\nunderstanding. To take the first example to hand, I very clearly\r\nperceive that in your bedroom the window is upon the right-hand\r\nside, and yet I question whether Mr. Lestrade would have noted\r\neven so self-evident a thing as that.\"\r\n\r\n\"How on earth--\"\r\n\r\n\"My dear fellow, I know you well. I know the military neatness\r\nwhich characterises you. You shave every morning, and in this\r\nseason you shave by the sunlight; but since your shaving is less\r\nand less complete as we get farther back on the left side, until\r\nit becomes positively slovenly as we get round the angle of the\r\njaw, it is surely very clear that that side is less illuminated\r\nthan the other. I could not imagine a man of your habits looking\r\nat himself in an equal light and being satisfied with such a\r\nresult. I only quote this as a trivial example of observation and\r\ninference. Therein lies my métier, and it is just possible that\r\nit may be of some service in the investigation which lies before\r\nus. There are one or two minor points which were brought out in\r\nthe inquest, and which are worth considering.\"\r\n\r\n\"What are they?\"\r\n\r\n\"It appears that his arrest did not take place at once, but after\r\nthe return to Hatherley Farm. On the inspector of constabulary\r\ninforming him that he was a prisoner, he remarked that he was not\r\nsurprised to hear it, and that it was no more than his deserts.\r\nThis observation of his had the natural effect of removing any\r\ntraces of doubt which might have remained in the minds of the\r\ncoroner's jury.\"\r\n\r\n\"It was a confession,\" I ejaculated.\r\n\r\n\"No, for it was followed by a protestation of innocence.\"\r\n\r\n\"Coming on the top of such a damning series of events, it was at\r\nleast a most suspicious remark.\"\r\n\r\n\"On the contrary,\" said Holmes, \"it is the brightest rift which I\r\ncan at present see in the clouds. However innocent he might be,\r\nhe could not be such an absolute imbecile as not to see that the\r\ncircumstances were very black against him. Had he appeared\r\nsurprised at his own arrest, or feigned indignation at it, I\r\nshould have looked upon it as highly suspicious, because such\r\nsurprise or anger would not be natural under the circumstances,\r\nand yet might appear to be the best policy to a scheming man. His\r\nfrank acceptance of the situation marks him as either an innocent\r\nman, or else as a man of considerable self-restraint and\r\nfirmness. As to his remark about his deserts, it was also not\r\nunnatural if you consider that he stood beside the dead body of\r\nhis father, and that there is no doubt that he had that very day\r\nso far forgotten his filial duty as to bandy words with him, and\r\neven, according to the little girl whose evidence is so\r\nimportant, to raise his hand as if to strike him. The\r\nself-reproach and contrition which are displayed in his remark\r\nappear to me to be the signs of a healthy mind rather than of a\r\nguilty one.\"\r\n\r\nI shook my head. \"Many men have been hanged on far slighter\r\nevidence,\" I remarked.\r\n\r\n\"So they have. And many men have been wrongfully hanged.\"\r\n\r\n\"What is the young man's own account of the matter?\"\r\n\r\n\"It is, I am afraid, not very encouraging to his supporters,\r\nthough there are one or two points in it which are suggestive.\r\nYou will find it here, and may read it for yourself.\"\r\n\r\nHe picked out from his bundle a copy of the local Herefordshire\r\npaper, and having turned down the sheet he pointed out the\r\nparagraph in which the unfortunate young man had given his own\r\nstatement of what had occurred. I settled myself down in the\r\ncorner of the carriage and read it very carefully. It ran in this\r\nway:\r\n\r\n\"Mr. James McCarthy, the only son of the deceased, was then called\r\nand gave evidence as follows: 'I had been away from home for\r\nthree days at Bristol, and had only just returned upon the\r\nmorning of last Monday, the 3rd. My father was absent from home at\r\nthe time of my arrival, and I was informed by the maid that he\r\nhad driven over to Ross with John Cobb, the groom. Shortly after\r\nmy return I heard the wheels of his trap in the yard, and,\r\nlooking out of my window, I saw him get out and walk rapidly out\r\nof the yard, though I was not aware in which direction he was\r\ngoing. I then took my gun and strolled out in the direction of\r\nthe Boscombe Pool, with the intention of visiting the rabbit\r\nwarren which is upon the other side. On my way I saw William\r\nCrowder, the game-keeper, as he had stated in his evidence; but\r\nhe is mistaken in thinking that I was following my father. I had\r\nno idea that he was in front of me. When about a hundred yards\r\nfrom the pool I heard a cry of \"Cooee!\" which was a usual signal\r\nbetween my father and myself. I then hurried forward, and found\r\nhim standing by the pool. He appeared to be much surprised at\r\nseeing me and asked me rather roughly what I was doing there. A\r\nconversation ensued which led to high words and almost to blows,\r\nfor my father was a man of a very violent temper. Seeing that his\r\npassion was becoming ungovernable, I left him and returned\r\ntowards Hatherley Farm. I had not gone more than 150 yards,\r\nhowever, when I heard a hideous outcry behind me, which caused me\r\nto run back again. I found my father expiring upon the ground,\r\nwith his head terribly injured. I dropped my gun and held him in\r\nmy arms, but he almost instantly expired. I knelt beside him for\r\nsome minutes, and then made my way to Mr. Turner's lodge-keeper,\r\nhis house being the nearest, to ask for assistance. I saw no one\r\nnear my father when I returned, and I have no idea how he came by\r\nhis injuries. He was not a popular man, being somewhat cold and\r\nforbidding in his manners, but he had, as far as I know, no\r\nactive enemies. I know nothing further of the matter.'\r\n\r\n\"The Coroner: Did your father make any statement to you before\r\nhe died?\r\n\r\n\"Witness: He mumbled a few words, but I could only catch some\r\nallusion to a rat.\r\n\r\n\"The Coroner: What did you understand by that?\r\n\r\n\"Witness: It conveyed no meaning to me. I thought that he was\r\ndelirious.\r\n\r\n\"The Coroner: What was the point upon which you and your father\r\nhad this final quarrel?\r\n\r\n\"Witness: I should prefer not to answer.\r\n\r\n\"The Coroner: I am afraid that I must press it.\r\n\r\n\"Witness: It is really impossible for me to tell you. I can\r\nassure you that it has nothing to do with the sad tragedy which\r\nfollowed.\r\n\r\n\"The Coroner: That is for the court to decide. I need not point\r\nout to you that your refusal to answer will prejudice your case\r\nconsiderably in any future proceedings which may arise.\r\n\r\n\"Witness: I must still refuse.\r\n\r\n\"The Coroner: I understand that the cry of 'Cooee' was a common\r\nsignal between you and your father?\r\n\r\n\"Witness: It was.\r\n\r\n\"The Coroner: How was it, then, that he uttered it before he saw\r\nyou, and before he even knew that you had returned from Bristol?\r\n\r\n\"Witness (with considerable confusion): I do not know.\r\n\r\n\"A Juryman: Did you see nothing which aroused your suspicions\r\nwhen you returned on hearing the cry and found your father\r\nfatally injured?\r\n\r\n\"Witness: Nothing definite.\r\n\r\n\"The Coroner: What do you mean?\r\n\r\n\"Witness: I was so disturbed and excited as I rushed out into\r\nthe open, that I could think of nothing except of my father. Yet\r\nI have a vague impression that as I ran forward something lay\r\nupon the ground to the left of me. It seemed to me to be\r\nsomething grey in colour, a coat of some sort, or a plaid perhaps.\r\nWhen I rose from my father I looked round for it, but it was\r\ngone.\r\n\r\n\"'Do you mean that it disappeared before you went for help?'\r\n\r\n\"'Yes, it was gone.'\r\n\r\n\"'You cannot say what it was?'\r\n\r\n\"'No, I had a feeling something was there.'\r\n\r\n\"'How far from the body?'\r\n\r\n\"'A dozen yards or so.'\r\n\r\n\"'And how far from the edge of the wood?'\r\n\r\n\"'About the same.'\r\n\r\n\"'Then if it was removed it was while you were within a dozen\r\nyards of it?'\r\n\r\n\"'Yes, but with my back towards it.'\r\n\r\n\"This concluded the examination of the witness.\"\r\n\r\n\"I see,\" said I as I glanced down the column, \"that the coroner\r\nin his concluding remarks was rather severe upon young McCarthy.\r\nHe calls attention, and with reason, to the discrepancy about his\r\nfather having signalled to him before seeing him, also to his\r\nrefusal to give details of his conversation with his father, and\r\nhis singular account of his father's dying words. They are all,\r\nas he remarks, very much against the son.\"\r\n\r\nHolmes laughed softly to himself and stretched himself out upon\r\nthe cushioned seat. \"Both you and the coroner have been at some\r\npains,\" said he, \"to single out the very strongest points in the\r\nyoung man's favour. Don't you see that you alternately give him\r\ncredit for having too much imagination and too little? Too\r\nlittle, if he could not invent a cause of quarrel which would\r\ngive him the sympathy of the jury; too much, if he evolved from\r\nhis own inner consciousness anything so outré as a dying\r\nreference to a rat, and the incident of the vanishing cloth. No,\r\nsir, I shall approach this case from the point of view that what\r\nthis young man says is true, and we shall see whither that\r\nhypothesis will lead us. And now here is my pocket Petrarch, and\r\nnot another word shall I say of this case until we are on the\r\nscene of action. We lunch at Swindon, and I see that we shall be\r\nthere in twenty minutes.\"\r\n\r\nIt was nearly four o'clock when we at last, after passing through\r\nthe beautiful Stroud Valley, and over the broad gleaming Severn,\r\nfound ourselves at the pretty little country-town of Ross. A\r\nlean, ferret-like man, furtive and sly-looking, was waiting for\r\nus upon the platform. In spite of the light brown dustcoat and\r\nleather-leggings which he wore in deference to his rustic\r\nsurroundings, I had no difficulty in recognising Lestrade, of\r\nScotland Yard. With him we drove to the Hereford Arms where a\r\nroom had already been engaged for us.\r\n\r\n\"I have ordered a carriage,\" said Lestrade as we sat over a cup\r\nof tea. \"I knew your energetic nature, and that you would not be\r\nhappy until you had been on the scene of the crime.\"\r\n\r\n\"It was very nice and complimentary of you,\" Holmes answered. \"It\r\nis entirely a question of barometric pressure.\"\r\n\r\nLestrade looked startled. \"I do not quite follow,\" he said.\r\n\r\n\"How is the glass? Twenty-nine, I see. No wind, and not a cloud\r\nin the sky. I have a caseful of cigarettes here which need\r\nsmoking, and the sofa is very much superior to the usual country\r\nhotel abomination. I do not think that it is probable that I\r\nshall use the carriage to-night.\"\r\n\r\nLestrade laughed indulgently. \"You have, no doubt, already formed\r\nyour conclusions from the newspapers,\" he said. \"The case is as\r\nplain as a pikestaff, and the more one goes into it the plainer\r\nit becomes. Still, of course, one can't refuse a lady, and such a\r\nvery positive one, too. She has heard of you, and would have your\r\nopinion, though I repeatedly told her that there was nothing\r\nwhich you could do which I had not already done. Why, bless my\r\nsoul! here is her carriage at the door.\"\r\n\r\nHe had hardly spoken before there rushed into the room one of the\r\nmost lovely young women that I have ever seen in my life. Her\r\nviolet eyes shining, her lips parted, a pink flush upon her\r\ncheeks, all thought of her natural reserve lost in her\r\noverpowering excitement and concern.\r\n\r\n\"Oh, Mr. Sherlock Holmes!\" she cried, glancing from one to the\r\nother of us, and finally, with a woman's quick intuition,\r\nfastening upon my companion, \"I am so glad that you have come. I\r\nhave driven down to tell you so. I know that James didn't do it.\r\nI know it, and I want you to start upon your work knowing it,\r\ntoo. Never let yourself doubt upon that point. We have known each\r\nother since we were little children, and I know his faults as no\r\none else does; but he is too tender-hearted to hurt a fly. Such a\r\ncharge is absurd to anyone who really knows him.\"\r\n\r\n\"I hope we may clear him, Miss Turner,\" said Sherlock Holmes.\r\n\"You may rely upon my doing all that I can.\"\r\n\r\n\"But you have read the evidence. You have formed some conclusion?\r\nDo you not see some loophole, some flaw? Do you not yourself\r\nthink that he is innocent?\"\r\n\r\n\"I think that it is very probable.\"\r\n\r\n\"There, now!\" she cried, throwing back her head and looking\r\ndefiantly at Lestrade. \"You hear! He gives me hopes.\"\r\n\r\nLestrade shrugged his shoulders. \"I am afraid that my colleague\r\nhas been a little quick in forming his conclusions,\" he said.\r\n\r\n\"But he is right. Oh! I know that he is right. James never did\r\nit. And about his quarrel with his father, I am sure that the\r\nreason why he would not speak about it to the coroner was because\r\nI was concerned in it.\"\r\n\r\n\"In what way?\" asked Holmes.\r\n\r\n\"It is no time for me to hide anything. James and his father had\r\nmany disagreements about me. Mr. McCarthy was very anxious that\r\nthere should be a marriage between us. James and I have always\r\nloved each other as brother and sister; but of course he is young\r\nand has seen very little of life yet, and--and--well, he\r\nnaturally did not wish to do anything like that yet. So there\r\nwere quarrels, and this, I am sure, was one of them.\"\r\n\r\n\"And your father?\" asked Holmes. \"Was he in favour of such a\r\nunion?\"\r\n\r\n\"No, he was averse to it also. No one but Mr. McCarthy was in\r\nfavour of it.\" A quick blush passed over her fresh young face as\r\nHolmes shot one of his keen, questioning glances at her.\r\n\r\n\"Thank you for this information,\" said he. \"May I see your father\r\nif I call to-morrow?\"\r\n\r\n\"I am afraid the doctor won't allow it.\"\r\n\r\n\"The doctor?\"\r\n\r\n\"Yes, have you not heard? Poor father has never been strong for\r\nyears back, but this has broken him down completely. He has taken\r\nto his bed, and Dr. Willows says that he is a wreck and that his\r\nnervous system is shattered. Mr. McCarthy was the only man alive\r\nwho had known dad in the old days in Victoria.\"\r\n\r\n\"Ha! In Victoria! That is important.\"\r\n\r\n\"Yes, at the mines.\"\r\n\r\n\"Quite so; at the gold-mines, where, as I understand, Mr. Turner\r\nmade his money.\"\r\n\r\n\"Yes, certainly.\"\r\n\r\n\"Thank you, Miss Turner. You have been of material assistance to\r\nme.\"\r\n\r\n\"You will tell me if you have any news to-morrow. No doubt you\r\nwill go to the prison to see James. Oh, if you do, Mr. Holmes, do\r\ntell him that I know him to be innocent.\"\r\n\r\n\"I will, Miss Turner.\"\r\n\r\n\"I must go home now, for dad is very ill, and he misses me so if\r\nI leave him. Good-bye, and God help you in your undertaking.\" She\r\nhurried from the room as impulsively as she had entered, and we\r\nheard the wheels of her carriage rattle off down the street.\r\n\r\n\"I am ashamed of you, Holmes,\" said Lestrade with dignity after a\r\nfew minutes' silence. \"Why should you raise up hopes which you\r\nare bound to disappoint? I am not over-tender of heart, but I\r\ncall it cruel.\"\r\n\r\n\"I think that I see my way to clearing James McCarthy,\" said\r\nHolmes. \"Have you an order to see him in prison?\"\r\n\r\n\"Yes, but only for you and me.\"\r\n\r\n\"Then I shall reconsider my resolution about going out. We have\r\nstill time to take a train to Hereford and see him to-night?\"\r\n\r\n\"Ample.\"\r\n\r\n\"Then let us do so. Watson, I fear that you will find it very\r\nslow, but I shall only be away a couple of hours.\"\r\n\r\nI walked down to the station with them, and then wandered through\r\nthe streets of the little town, finally returning to the hotel,\r\nwhere I lay upon the sofa and tried to interest myself in a\r\nyellow-backed novel. The puny plot of the story was so thin,\r\nhowever, when compared to the deep mystery through which we were\r\ngroping, and I found my attention wander so continually from the\r\naction to the fact, that I at last flung it across the room and\r\ngave myself up entirely to a consideration of the events of the\r\nday. Supposing that this unhappy young man's story were\r\nabsolutely true, then what hellish thing, what absolutely\r\nunforeseen and extraordinary calamity could have occurred between\r\nthe time when he parted from his father, and the moment when,\r\ndrawn back by his screams, he rushed into the glade? It was\r\nsomething terrible and deadly. What could it be? Might not the\r\nnature of the injuries reveal something to my medical instincts?\r\nI rang the bell and called for the weekly county paper, which\r\ncontained a verbatim account of the inquest. In the surgeon's\r\ndeposition it was stated that the posterior third of the left\r\nparietal bone and the left half of the occipital bone had been\r\nshattered by a heavy blow from a blunt weapon. I marked the spot\r\nupon my own head. Clearly such a blow must have been struck from\r\nbehind. That was to some extent in favour of the accused, as when\r\nseen quarrelling he was face to face with his father. Still, it\r\ndid not go for very much, for the older man might have turned his\r\nback before the blow fell. Still, it might be worth while to call\r\nHolmes' attention to it. Then there was the peculiar dying\r\nreference to a rat. What could that mean? It could not be\r\ndelirium. A man dying from a sudden blow does not commonly become\r\ndelirious. No, it was more likely to be an attempt to explain how\r\nhe met his fate. But what could it indicate? I cudgelled my\r\nbrains to find some possible explanation. And then the incident\r\nof the grey cloth seen by young McCarthy. If that were true the\r\nmurderer must have dropped some part of his dress, presumably his\r\novercoat, in his flight, and must have had the hardihood to\r\nreturn and to carry it away at the instant when the son was\r\nkneeling with his back turned not a dozen paces off. What a\r\ntissue of mysteries and improbabilities the whole thing was! I\r\ndid not wonder at Lestrade's opinion, and yet I had so much faith\r\nin Sherlock Holmes' insight that I could not lose hope as long\r\nas every fresh fact seemed to strengthen his conviction of young\r\nMcCarthy's innocence.\r\n\r\nIt was late before Sherlock Holmes returned. He came back alone,\r\nfor Lestrade was staying in lodgings in the town.\r\n\r\n\"The glass still keeps very high,\" he remarked as he sat down.\r\n\"It is of importance that it should not rain before we are able\r\nto go over the ground. On the other hand, a man should be at his\r\nvery best and keenest for such nice work as that, and I did not\r\nwish to do it when fagged by a long journey. I have seen young\r\nMcCarthy.\"\r\n\r\n\"And what did you learn from him?\"\r\n\r\n\"Nothing.\"\r\n\r\n\"Could he throw no light?\"\r\n\r\n\"None at all. I was inclined to think at one time that he knew\r\nwho had done it and was screening him or her, but I am convinced\r\nnow that he is as puzzled as everyone else. He is not a very\r\nquick-witted youth, though comely to look at and, I should think,\r\nsound at heart.\"\r\n\r\n\"I cannot admire his taste,\" I remarked, \"if it is indeed a fact\r\nthat he was averse to a marriage with so charming a young lady as\r\nthis Miss Turner.\"\r\n\r\n\"Ah, thereby hangs a rather painful tale. This fellow is madly,\r\ninsanely, in love with her, but some two years ago, when he was\r\nonly a lad, and before he really knew her, for she had been away\r\nfive years at a boarding-school, what does the idiot do but get\r\ninto the clutches of a barmaid in Bristol and marry her at a\r\nregistry office? No one knows a word of the matter, but you can\r\nimagine how maddening it must be to him to be upbraided for not\r\ndoing what he would give his very eyes to do, but what he knows\r\nto be absolutely impossible. It was sheer frenzy of this sort\r\nwhich made him throw his hands up into the air when his father,\r\nat their last interview, was goading him on to propose to Miss\r\nTurner. On the other hand, he had no means of supporting himself,\r\nand his father, who was by all accounts a very hard man, would\r\nhave thrown him over utterly had he known the truth. It was with\r\nhis barmaid wife that he had spent the last three days in\r\nBristol, and his father did not know where he was. Mark that\r\npoint. It is of importance. Good has come out of evil, however,\r\nfor the barmaid, finding from the papers that he is in serious\r\ntrouble and likely to be hanged, has thrown him over utterly and\r\nhas written to him to say that she has a husband already in the\r\nBermuda Dockyard, so that there is really no tie between them. I\r\nthink that that bit of news has consoled young McCarthy for all\r\nthat he has suffered.\"\r\n\r\n\"But if he is innocent, who has done it?\"\r\n\r\n\"Ah! who? I would call your attention very particularly to two\r\npoints. One is that the murdered man had an appointment with\r\nsomeone at the pool, and that the someone could not have been his\r\nson, for his son was away, and he did not know when he would\r\nreturn. The second is that the murdered man was heard to cry\r\n'Cooee!' before he knew that his son had returned. Those are the\r\ncrucial points upon which the case depends. And now let us talk\r\nabout George Meredith, if you please, and we shall leave all\r\nminor matters until to-morrow.\"\r\n\r\nThere was no rain, as Holmes had foretold, and the morning broke\r\nbright and cloudless. At nine o'clock Lestrade called for us with\r\nthe carriage, and we set off for Hatherley Farm and the Boscombe\r\nPool.\r\n\r\n\"There is serious news this morning,\" Lestrade observed. \"It is\r\nsaid that Mr. Turner, of the Hall, is so ill that his life is\r\ndespaired of.\"\r\n\r\n\"An elderly man, I presume?\" said Holmes.\r\n\r\n\"About sixty; but his constitution has been shattered by his life\r\nabroad, and he has been in failing health for some time. This\r\nbusiness has had a very bad effect upon him. He was an old friend\r\nof McCarthy's, and, I may add, a great benefactor to him, for I\r\nhave learned that he gave him Hatherley Farm rent free.\"\r\n\r\n\"Indeed! That is interesting,\" said Holmes.\r\n\r\n\"Oh, yes! In a hundred other ways he has helped him. Everybody\r\nabout here speaks of his kindness to him.\"\r\n\r\n\"Really! Does it not strike you as a little singular that this\r\nMcCarthy, who appears to have had little of his own, and to have\r\nbeen under such obligations to Turner, should still talk of\r\nmarrying his son to Turner's daughter, who is, presumably,\r\nheiress to the estate, and that in such a very cocksure manner,\r\nas if it were merely a case of a proposal and all else would\r\nfollow? It is the more strange, since we know that Turner himself\r\nwas averse to the idea. The daughter told us as much. Do you not\r\ndeduce something from that?\"\r\n\r\n\"We have got to the deductions and the inferences,\" said\r\nLestrade, winking at me. \"I find it hard enough to tackle facts,\r\nHolmes, without flying away after theories and fancies.\"\r\n\r\n\"You are right,\" said Holmes demurely; \"you do find it very hard\r\nto tackle the facts.\"\r\n\r\n\"Anyhow, I have grasped one fact which you seem to find it\r\ndifficult to get hold of,\" replied Lestrade with some warmth.\r\n\r\n\"And that is--\"\r\n\r\n\"That McCarthy senior met his death from McCarthy junior and that\r\nall theories to the contrary are the merest moonshine.\"\r\n\r\n\"Well, moonshine is a brighter thing than fog,\" said Holmes,\r\nlaughing. \"But I am very much mistaken if this is not Hatherley\r\nFarm upon the left.\"\r\n\r\n\"Yes, that is it.\" It was a widespread, comfortable-looking\r\nbuilding, two-storied, slate-roofed, with great yellow blotches\r\nof lichen upon the grey walls. The drawn blinds and the smokeless\r\nchimneys, however, gave it a stricken look, as though the weight\r\nof this horror still lay heavy upon it. We called at the door,\r\nwhen the maid, at Holmes' request, showed us the boots which her\r\nmaster wore at the time of his death, and also a pair of the\r\nson's, though not the pair which he had then had. Having measured\r\nthese very carefully from seven or eight different points, Holmes\r\ndesired to be led to the court-yard, from which we all followed\r\nthe winding track which led to Boscombe Pool.\r\n\r\nSherlock Holmes was transformed when he was hot upon such a scent\r\nas this. Men who had only known the quiet thinker and logician of\r\nBaker Street would have failed to recognise him. His face flushed\r\nand darkened. His brows were drawn into two hard black lines,\r\nwhile his eyes shone out from beneath them with a steely glitter.\r\nHis face was bent downward, his shoulders bowed, his lips\r\ncompressed, and the veins stood out like whipcord in his long,\r\nsinewy neck. His nostrils seemed to dilate with a purely animal\r\nlust for the chase, and his mind was so absolutely concentrated\r\nupon the matter before him that a question or remark fell\r\nunheeded upon his ears, or, at the most, only provoked a quick,\r\nimpatient snarl in reply. Swiftly and silently he made his way\r\nalong the track which ran through the meadows, and so by way of\r\nthe woods to the Boscombe Pool. It was damp, marshy ground, as is\r\nall that district, and there were marks of many feet, both upon\r\nthe path and amid the short grass which bounded it on either\r\nside. Sometimes Holmes would hurry on, sometimes stop dead, and\r\nonce he made quite a little detour into the meadow. Lestrade and\r\nI walked behind him, the detective indifferent and contemptuous,\r\nwhile I watched my friend with the interest which sprang from the\r\nconviction that every one of his actions was directed towards a\r\ndefinite end.\r\n\r\nThe Boscombe Pool, which is a little reed-girt sheet of water\r\nsome fifty yards across, is situated at the boundary between the\r\nHatherley Farm and the private park of the wealthy Mr. Turner.\r\nAbove the woods which lined it upon the farther side we could see\r\nthe red, jutting pinnacles which marked the site of the rich\r\nlandowner's dwelling. On the Hatherley side of the pool the woods\r\ngrew very thick, and there was a narrow belt of sodden grass\r\ntwenty paces across between the edge of the trees and the reeds\r\nwhich lined the lake. Lestrade showed us the exact spot at which\r\nthe body had been found, and, indeed, so moist was the ground,\r\nthat I could plainly see the traces which had been left by the\r\nfall of the stricken man. To Holmes, as I could see by his eager\r\nface and peering eyes, very many other things were to be read\r\nupon the trampled grass. He ran round, like a dog who is picking\r\nup a scent, and then turned upon my companion.\r\n\r\n\"What did you go into the pool for?\" he asked.\r\n\r\n\"I fished about with a rake. I thought there might be some weapon\r\nor other trace. But how on earth--\"\r\n\r\n\"Oh, tut, tut! I have no time! That left foot of yours with its\r\ninward twist is all over the place. A mole could trace it, and\r\nthere it vanishes among the reeds. Oh, how simple it would all\r\nhave been had I been here before they came like a herd of buffalo\r\nand wallowed all over it. Here is where the party with the\r\nlodge-keeper came, and they have covered all tracks for six or\r\neight feet round the body. But here are three separate tracks of\r\nthe same feet.\" He drew out a lens and lay down upon his\r\nwaterproof to have a better view, talking all the time rather to\r\nhimself than to us. \"These are young McCarthy's feet. Twice he\r\nwas walking, and once he ran swiftly, so that the soles are\r\ndeeply marked and the heels hardly visible. That bears out his\r\nstory. He ran when he saw his father on the ground. Then here are\r\nthe father's feet as he paced up and down. What is this, then? It\r\nis the butt-end of the gun as the son stood listening. And this?\r\nHa, ha! What have we here? Tiptoes! tiptoes! Square, too, quite\r\nunusual boots! They come, they go, they come again--of course\r\nthat was for the cloak. Now where did they come from?\" He ran up\r\nand down, sometimes losing, sometimes finding the track until we\r\nwere well within the edge of the wood and under the shadow of a\r\ngreat beech, the largest tree in the neighbourhood. Holmes traced\r\nhis way to the farther side of this and lay down once more upon\r\nhis face with a little cry of satisfaction. For a long time he\r\nremained there, turning over the leaves and dried sticks,\r\ngathering up what seemed to me to be dust into an envelope and\r\nexamining with his lens not only the ground but even the bark of\r\nthe tree as far as he could reach. A jagged stone was lying among\r\nthe moss, and this also he carefully examined and retained. Then\r\nhe followed a pathway through the wood until he came to the\r\nhighroad, where all traces were lost.\r\n\r\n\"It has been a case of considerable interest,\" he remarked,\r\nreturning to his natural manner. \"I fancy that this grey house on\r\nthe right must be the lodge. I think that I will go in and have a\r\nword with Moran, and perhaps write a little note. Having done\r\nthat, we may drive back to our luncheon. You may walk to the cab,\r\nand I shall be with you presently.\"\r\n\r\nIt was about ten minutes before we regained our cab and drove\r\nback into Ross, Holmes still carrying with him the stone which he\r\nhad picked up in the wood.\r\n\r\n\"This may interest you, Lestrade,\" he remarked, holding it out.\r\n\"The murder was done with it.\"\r\n\r\n\"I see no marks.\"\r\n\r\n\"There are none.\"\r\n\r\n\"How do you know, then?\"\r\n\r\n\"The grass was growing under it. It had only lain there a few\r\ndays. There was no sign of a place whence it had been taken. It\r\ncorresponds with the injuries. There is no sign of any other\r\nweapon.\"\r\n\r\n\"And the murderer?\"\r\n\r\n\"Is a tall man, left-handed, limps with the right leg, wears\r\nthick-soled shooting-boots and a grey cloak, smokes Indian\r\ncigars, uses a cigar-holder, and carries a blunt pen-knife in his\r\npocket. There are several other indications, but these may be\r\nenough to aid us in our search.\"\r\n\r\nLestrade laughed. \"I am afraid that I am still a sceptic,\" he\r\nsaid. \"Theories are all very well, but we have to deal with a\r\nhard-headed British jury.\"\r\n\r\n\"Nous verrons,\" answered Holmes calmly. \"You work your own\r\nmethod, and I shall work mine. I shall be busy this afternoon,\r\nand shall probably return to London by the evening train.\"\r\n\r\n\"And leave your case unfinished?\"\r\n\r\n\"No, finished.\"\r\n\r\n\"But the mystery?\"\r\n\r\n\"It is solved.\"\r\n\r\n\"Who was the criminal, then?\"\r\n\r\n\"The gentleman I describe.\"\r\n\r\n\"But who is he?\"\r\n\r\n\"Surely it would not be difficult to find out. This is not such a\r\npopulous neighbourhood.\"\r\n\r\nLestrade shrugged his shoulders. \"I am a practical man,\" he said,\r\n\"and I really cannot undertake to go about the country looking\r\nfor a left-handed gentleman with a game leg. I should become the\r\nlaughing-stock of Scotland Yard.\"\r\n\r\n\"All right,\" said Holmes quietly. \"I have given you the chance.\r\nHere are your lodgings. Good-bye. I shall drop you a line before\r\nI leave.\"\r\n\r\nHaving left Lestrade at his rooms, we drove to our hotel, where\r\nwe found lunch upon the table. Holmes was silent and buried in\r\nthought with a pained expression upon his face, as one who finds\r\nhimself in a perplexing position.\r\n\r\n\"Look here, Watson,\" he said when the cloth was cleared \"just sit\r\ndown in this chair and let me preach to you for a little. I don't\r\nknow quite what to do, and I should value your advice. Light a\r\ncigar and let me expound.\"\r\n\r\n \"Pray do so.\"\r\n\r\n\"Well, now, in considering this case there are two points about\r\nyoung McCarthy's narrative which struck us both instantly,\r\nalthough they impressed me in his favour and you against him. One\r\nwas the fact that his father should, according to his account,\r\ncry 'Cooee!' before seeing him. The other was his singular dying\r\nreference to a rat. He mumbled several words, you understand, but\r\nthat was all that caught the son's ear. Now from this double\r\npoint our research must commence, and we will begin it by\r\npresuming that what the lad says is absolutely true.\"\r\n\r\n\"What of this 'Cooee!' then?\"\r\n\r\n\"Well, obviously it could not have been meant for the son. The\r\nson, as far as he knew, was in Bristol. It was mere chance that\r\nhe was within earshot. The 'Cooee!' was meant to attract the\r\nattention of whoever it was that he had the appointment with. But\r\n'Cooee' is a distinctly Australian cry, and one which is used\r\nbetween Australians. There is a strong presumption that the\r\nperson whom McCarthy expected to meet him at Boscombe Pool was\r\nsomeone who had been in Australia.\"\r\n\r\n\"What of the rat, then?\"\r\n\r\nSherlock Holmes took a folded paper from his pocket and flattened\r\nit out on the table. \"This is a map of the Colony of Victoria,\"\r\nhe said. \"I wired to Bristol for it last night.\" He put his hand\r\nover part of the map. \"What do you read?\"\r\n\r\n\"ARAT,\" I read.\r\n\r\n\"And now?\" He raised his hand.\r\n\r\n\"BALLARAT.\"\r\n\r\n\"Quite so. That was the word the man uttered, and of which his\r\nson only caught the last two syllables. He was trying to utter\r\nthe name of his murderer. So and so, of Ballarat.\"\r\n\r\n\"It is wonderful!\" I exclaimed.\r\n\r\n\"It is obvious. And now, you see, I had narrowed the field down\r\nconsiderably. The possession of a grey garment was a third point\r\nwhich, granting the son's statement to be correct, was a\r\ncertainty. We have come now out of mere vagueness to the definite\r\nconception of an Australian from Ballarat with a grey cloak.\"\r\n\r\n\"Certainly.\"\r\n\r\n\"And one who was at home in the district, for the pool can only\r\nbe approached by the farm or by the estate, where strangers could\r\nhardly wander.\"\r\n\r\n\"Quite so.\"\r\n\r\n\"Then comes our expedition of to-day. By an examination of the\r\nground I gained the trifling details which I gave to that\r\nimbecile Lestrade, as to the personality of the criminal.\"\r\n\r\n\"But how did you gain them?\"\r\n\r\n\"You know my method. It is founded upon the observation of\r\ntrifles.\"\r\n\r\n\"His height I know that you might roughly judge from the length\r\nof his stride. His boots, too, might be told from their traces.\"\r\n\r\n\"Yes, they were peculiar boots.\"\r\n\r\n\"But his lameness?\"\r\n\r\n\"The impression of his right foot was always less distinct than\r\nhis left. He put less weight upon it. Why? Because he limped--he\r\nwas lame.\"\r\n\r\n\"But his left-handedness.\"\r\n\r\n\"You were yourself struck by the nature of the injury as recorded\r\nby the surgeon at the inquest. The blow was struck from\r\nimmediately behind, and yet was upon the left side. Now, how can\r\nthat be unless it were by a left-handed man? He had stood behind\r\nthat tree during the interview between the father and son. He had\r\neven smoked there. I found the ash of a cigar, which my special\r\nknowledge of tobacco ashes enables me to pronounce as an Indian\r\ncigar. I have, as you know, devoted some attention to this, and\r\nwritten a little monograph on the ashes of 140 different\r\nvarieties of pipe, cigar, and cigarette tobacco. Having found the\r\nash, I then looked round and discovered the stump among the moss\r\nwhere he had tossed it. It was an Indian cigar, of the variety\r\nwhich are rolled in Rotterdam.\"\r\n\r\n\"And the cigar-holder?\"\r\n\r\n\"I could see that the end had not been in his mouth. Therefore he\r\nused a holder. The tip had been cut off, not bitten off, but the\r\ncut was not a clean one, so I deduced a blunt pen-knife.\"\r\n\r\n\"Holmes,\" I said, \"you have drawn a net round this man from which\r\nhe cannot escape, and you have saved an innocent human life as\r\ntruly as if you had cut the cord which was hanging him. I see the\r\ndirection in which all this points. The culprit is--\"\r\n\r\n\"Mr. John Turner,\" cried the hotel waiter, opening the door of\r\nour sitting-room, and ushering in a visitor.\r\n\r\nThe man who entered was a strange and impressive figure. His\r\nslow, limping step and bowed shoulders gave the appearance of\r\ndecrepitude, and yet his hard, deep-lined, craggy features, and\r\nhis enormous limbs showed that he was possessed of unusual\r\nstrength of body and of character. His tangled beard, grizzled\r\nhair, and outstanding, drooping eyebrows combined to give an air\r\nof dignity and power to his appearance, but his face was of an\r\nashen white, while his lips and the corners of his nostrils were\r\ntinged with a shade of blue. It was clear to me at a glance that\r\nhe was in the grip of some deadly and chronic disease.\r\n\r\n\"Pray sit down on the sofa,\" said Holmes gently. \"You had my\r\nnote?\"\r\n\r\n\"Yes, the lodge-keeper brought it up. You said that you wished to\r\nsee me here to avoid scandal.\"\r\n\r\n\"I thought people would talk if I went to the Hall.\"\r\n\r\n\"And why did you wish to see me?\" He looked across at my\r\ncompanion with despair in his weary eyes, as though his question\r\nwas already answered.\r\n\r\n\"Yes,\" said Holmes, answering the look rather than the words. \"It\r\nis so. I know all about McCarthy.\"\r\n\r\nThe old man sank his face in his hands. \"God help me!\" he cried.\r\n\"But I would not have let the young man come to harm. I give you\r\nmy word that I would have spoken out if it went against him at\r\nthe Assizes.\"\r\n\r\n\"I am glad to hear you say so,\" said Holmes gravely.\r\n\r\n\"I would have spoken now had it not been for my dear girl. It\r\nwould break her heart--it will break her heart when she hears\r\nthat I am arrested.\"\r\n\r\n\"It may not come to that,\" said Holmes.\r\n\r\n\"What?\"\r\n\r\n\"I am no official agent. I understand that it was your daughter\r\nwho required my presence here, and I am acting in her interests.\r\nYoung McCarthy must be got off, however.\"\r\n\r\n\"I am a dying man,\" said old Turner. \"I have had diabetes for\r\nyears. My doctor says it is a question whether I shall live a\r\nmonth. Yet I would rather die under my own roof than in a gaol.\"\r\n\r\nHolmes rose and sat down at the table with his pen in his hand\r\nand a bundle of paper before him. \"Just tell us the truth,\" he\r\nsaid. \"I shall jot down the facts. You will sign it, and Watson\r\nhere can witness it. Then I could produce your confession at the\r\nlast extremity to save young McCarthy. I promise you that I shall\r\nnot use it unless it is absolutely needed.\"\r\n\r\n\"It's as well,\" said the old man; \"it's a question whether I\r\nshall live to the Assizes, so it matters little to me, but I\r\nshould wish to spare Alice the shock. And now I will make the\r\nthing clear to you; it has been a long time in the acting, but\r\nwill not take me long to tell.\r\n\r\n\"You didn't know this dead man, McCarthy. He was a devil\r\nincarnate. I tell you that. God keep you out of the clutches of\r\nsuch a man as he. His grip has been upon me these twenty years,\r\nand he has blasted my life. I'll tell you first how I came to be\r\nin his power.\r\n\r\n\"It was in the early '60's at the diggings. I was a young chap\r\nthen, hot-blooded and reckless, ready to turn my hand at\r\nanything; I got among bad companions, took to drink, had no luck\r\nwith my claim, took to the bush, and in a word became what you\r\nwould call over here a highway robber. There were six of us, and\r\nwe had a wild, free life of it, sticking up a station from time\r\nto time, or stopping the wagons on the road to the diggings.\r\nBlack Jack of Ballarat was the name I went under, and our party\r\nis still remembered in the colony as the Ballarat Gang.\r\n\r\n\"One day a gold convoy came down from Ballarat to Melbourne, and\r\nwe lay in wait for it and attacked it. There were six troopers\r\nand six of us, so it was a close thing, but we emptied four of\r\ntheir saddles at the first volley. Three of our boys were killed,\r\nhowever, before we got the swag. I put my pistol to the head of\r\nthe wagon-driver, who was this very man McCarthy. I wish to the\r\nLord that I had shot him then, but I spared him, though I saw his\r\nwicked little eyes fixed on my face, as though to remember every\r\nfeature. We got away with the gold, became wealthy men, and made\r\nour way over to England without being suspected. There I parted\r\nfrom my old pals and determined to settle down to a quiet and\r\nrespectable life. I bought this estate, which chanced to be in\r\nthe market, and I set myself to do a little good with my money,\r\nto make up for the way in which I had earned it. I married, too,\r\nand though my wife died young she left me my dear little Alice.\r\nEven when she was just a baby her wee hand seemed to lead me down\r\nthe right path as nothing else had ever done. In a word, I turned\r\nover a new leaf and did my best to make up for the past. All was\r\ngoing well when McCarthy laid his grip upon me.\r\n\r\n\"I had gone up to town about an investment, and I met him in\r\nRegent Street with hardly a coat to his back or a boot to his\r\nfoot.\r\n\r\n\"'Here we are, Jack,' says he, touching me on the arm; 'we'll be\r\nas good as a family to you. There's two of us, me and my son, and\r\nyou can have the keeping of us. If you don't--it's a fine,\r\nlaw-abiding country is England, and there's always a policeman\r\nwithin hail.'\r\n\r\n\"Well, down they came to the west country, there was no shaking\r\nthem off, and there they have lived rent free on my best land\r\never since. There was no rest for me, no peace, no forgetfulness;\r\nturn where I would, there was his cunning, grinning face at my\r\nelbow. It grew worse as Alice grew up, for he soon saw I was more\r\nafraid of her knowing my past than of the police. Whatever he\r\nwanted he must have, and whatever it was I gave him without\r\nquestion, land, money, houses, until at last he asked a thing\r\nwhich I could not give. He asked for Alice.\r\n\r\n\"His son, you see, had grown up, and so had my girl, and as I was\r\nknown to be in weak health, it seemed a fine stroke to him that\r\nhis lad should step into the whole property. But there I was\r\nfirm. I would not have his cursed stock mixed with mine; not that\r\nI had any dislike to the lad, but his blood was in him, and that\r\nwas enough. I stood firm. McCarthy threatened. I braved him to do\r\nhis worst. We were to meet at the pool midway between our houses\r\nto talk it over.\r\n\r\n\"When I went down there I found him talking with his son, so I\r\nsmoked a cigar and waited behind a tree until he should be alone.\r\nBut as I listened to his talk all that was black and bitter in\r\nme seemed to come uppermost. He was urging his son to marry my\r\ndaughter with as little regard for what she might think as if she\r\nwere a slut from off the streets. It drove me mad to think that I\r\nand all that I held most dear should be in the power of such a\r\nman as this. Could I not snap the bond? I was already a dying and\r\na desperate man. Though clear of mind and fairly strong of limb,\r\nI knew that my own fate was sealed. But my memory and my girl!\r\nBoth could be saved if I could but silence that foul tongue. I\r\ndid it, Mr. Holmes. I would do it again. Deeply as I have sinned,\r\nI have led a life of martyrdom to atone for it. But that my girl\r\nshould be entangled in the same meshes which held me was more\r\nthan I could suffer. I struck him down with no more compunction\r\nthan if he had been some foul and venomous beast. His cry brought\r\nback his son; but I had gained the cover of the wood, though I\r\nwas forced to go back to fetch the cloak which I had dropped in\r\nmy flight. That is the true story, gentlemen, of all that\r\noccurred.\"\r\n\r\n\"Well, it is not for me to judge you,\" said Holmes as the old man\r\nsigned the statement which had been drawn out. \"I pray that we\r\nmay never be exposed to such a temptation.\"\r\n\r\n\"I pray not, sir. And what do you intend to do?\"\r\n\r\n\"In view of your health, nothing. You are yourself aware that you\r\nwill soon have to answer for your deed at a higher court than the\r\nAssizes. I will keep your confession, and if McCarthy is\r\ncondemned I shall be forced to use it. If not, it shall never be\r\nseen by mortal eye; and your secret, whether you be alive or\r\ndead, shall be safe with us.\"\r\n\r\n\"Farewell, then,\" said the old man solemnly. \"Your own deathbeds,\r\nwhen they come, will be the easier for the thought of the peace\r\nwhich you have given to mine.\" Tottering and shaking in all his\r\ngiant frame, he stumbled slowly from the room.\r\n\r\n\"God help us!\" said Holmes after a long silence. \"Why does fate\r\nplay such tricks with poor, helpless worms? I never hear of such\r\na case as this that I do not think of Baxter's words, and say,\r\n'There, but for the grace of God, goes Sherlock Holmes.'\"\r\n\r\nJames McCarthy was acquitted at the Assizes on the strength of a\r\nnumber of objections which had been drawn out by Holmes and\r\nsubmitted to the defending counsel. Old Turner lived for seven\r\nmonths after our interview, but he is now dead; and there is\r\nevery prospect that the son and daughter may come to live happily\r\ntogether in ignorance of the black cloud which rests upon their\r\npast.\r\n\r\n\r\n\r\nADVENTURE V. THE FIVE ORANGE PIPS\r\n\r\nWhen I glance over my notes and records of the Sherlock Holmes\r\ncases between the years '82 and '90, I am faced by so many which\r\npresent strange and interesting features that it is no easy\r\nmatter to know which to choose and which to leave. Some, however,\r\nhave already gained publicity through the papers, and others have\r\nnot offered a field for those peculiar qualities which my friend\r\npossessed in so high a degree, and which it is the object of\r\nthese papers to illustrate. Some, too, have baffled his\r\nanalytical skill, and would be, as narratives, beginnings without\r\nan ending, while others have been but partially cleared up, and\r\nhave their explanations founded rather upon conjecture and\r\nsurmise than on that absolute logical proof which was so dear to\r\nhim. There is, however, one of these last which was so remarkable\r\nin its details and so startling in its results that I am tempted\r\nto give some account of it in spite of the fact that there are\r\npoints in connection with it which never have been, and probably\r\nnever will be, entirely cleared up.\r\n\r\nThe year '87 furnished us with a long series of cases of greater\r\nor less interest, of which I retain the records. Among my\r\nheadings under this one twelve months I find an account of the\r\nadventure of the Paradol Chamber, of the Amateur Mendicant\r\nSociety, who held a luxurious club in the lower vault of a\r\nfurniture warehouse, of the facts connected with the loss of the\r\nBritish barque \"Sophy Anderson\", of the singular adventures of the\r\nGrice Patersons in the island of Uffa, and finally of the\r\nCamberwell poisoning case. In the latter, as may be remembered,\r\nSherlock Holmes was able, by winding up the dead man's watch, to\r\nprove that it had been wound up two hours before, and that\r\ntherefore the deceased had gone to bed within that time--a\r\ndeduction which was of the greatest importance in clearing up the\r\ncase. All these I may sketch out at some future date, but none of\r\nthem present such singular features as the strange train of\r\ncircumstances which I have now taken up my pen to describe.\r\n\r\nIt was in the latter days of September, and the equinoctial gales\r\nhad set in with exceptional violence. All day the wind had\r\nscreamed and the rain had beaten against the windows, so that\r\neven here in the heart of great, hand-made London we were forced\r\nto raise our minds for the instant from the routine of life and\r\nto recognise the presence of those great elemental forces which\r\nshriek at mankind through the bars of his civilisation, like\r\nuntamed beasts in a cage. As evening drew in, the storm grew\r\nhigher and louder, and the wind cried and sobbed like a child in\r\nthe chimney. Sherlock Holmes sat moodily at one side of the\r\nfireplace cross-indexing his records of crime, while I at the\r\nother was deep in one of Clark Russell's fine sea-stories until\r\nthe howl of the gale from without seemed to blend with the text,\r\nand the splash of the rain to lengthen out into the long swash of\r\nthe sea waves. My wife was on a visit to her mother's, and for a\r\nfew days I was a dweller once more in my old quarters at Baker\r\nStreet.\r\n\r\n\"Why,\" said I, glancing up at my companion, \"that was surely the\r\nbell. Who could come to-night? Some friend of yours, perhaps?\"\r\n\r\n\"Except yourself I have none,\" he answered. \"I do not encourage\r\nvisitors.\"\r\n\r\n\"A client, then?\"\r\n\r\n\"If so, it is a serious case. Nothing less would bring a man out\r\non such a day and at such an hour. But I take it that it is more\r\nlikely to be some crony of the landlady's.\"\r\n\r\nSherlock Holmes was wrong in his conjecture, however, for there\r\ncame a step in the passage and a tapping at the door. He\r\nstretched out his long arm to turn the lamp away from himself and\r\ntowards the vacant chair upon which a newcomer must sit.\r\n\r\n\"Come in!\" said he.\r\n\r\nThe man who entered was young, some two-and-twenty at the\r\noutside, well-groomed and trimly clad, with something of\r\nrefinement and delicacy in his bearing. The streaming umbrella\r\nwhich he held in his hand, and his long shining waterproof told\r\nof the fierce weather through which he had come. He looked about\r\nhim anxiously in the glare of the lamp, and I could see that his\r\nface was pale and his eyes heavy, like those of a man who is\r\nweighed down with some great anxiety.\r\n\r\n\"I owe you an apology,\" he said, raising his golden pince-nez to\r\nhis eyes. \"I trust that I am not intruding. I fear that I have\r\nbrought some traces of the storm and rain into your snug\r\nchamber.\"\r\n\r\n\"Give me your coat and umbrella,\" said Holmes. \"They may rest\r\nhere on the hook and will be dry presently. You have come up from\r\nthe south-west, I see.\"\r\n\r\n\"Yes, from Horsham.\"\r\n\r\n\"That clay and chalk mixture which I see upon your toe caps is\r\nquite distinctive.\"\r\n\r\n\"I have come for advice.\"\r\n\r\n\"That is easily got.\"\r\n\r\n\"And help.\"\r\n\r\n\"That is not always so easy.\"\r\n\r\n\"I have heard of you, Mr. Holmes. I heard from Major Prendergast\r\nhow you saved him in the Tankerville Club scandal.\"\r\n\r\n\"Ah, of course. He was wrongfully accused of cheating at cards.\"\r\n\r\n\"He said that you could solve anything.\"\r\n\r\n\"He said too much.\"\r\n\r\n\"That you are never beaten.\"\r\n\r\n\"I have been beaten four times--three times by men, and once by a\r\nwoman.\"\r\n\r\n\"But what is that compared with the number of your successes?\"\r\n\r\n\"It is true that I have been generally successful.\"\r\n\r\n\"Then you may be so with me.\"\r\n\r\n\"I beg that you will draw your chair up to the fire and favour me\r\nwith some details as to your case.\"\r\n\r\n\"It is no ordinary one.\"\r\n\r\n\"None of those which come to me are. I am the last court of\r\nappeal.\"\r\n\r\n\"And yet I question, sir, whether, in all your experience, you\r\nhave ever listened to a more mysterious and inexplicable chain of\r\nevents than those which have happened in my own family.\"\r\n\r\n\"You fill me with interest,\" said Holmes. \"Pray give us the\r\nessential facts from the commencement, and I can afterwards\r\nquestion you as to those details which seem to me to be most\r\nimportant.\"\r\n\r\nThe young man pulled his chair up and pushed his wet feet out\r\ntowards the blaze.\r\n\r\n\"My name,\" said he, \"is John Openshaw, but my own affairs have,\r\nas far as I can understand, little to do with this awful\r\nbusiness. It is a hereditary matter; so in order to give you an\r\nidea of the facts, I must go back to the commencement of the\r\naffair.\r\n\r\n\"You must know that my grandfather had two sons--my uncle Elias\r\nand my father Joseph. My father had a small factory at Coventry,\r\nwhich he enlarged at the time of the invention of bicycling. He\r\nwas a patentee of the Openshaw unbreakable tire, and his business\r\nmet with such success that he was able to sell it and to retire\r\nupon a handsome competence.\r\n\r\n\"My uncle Elias emigrated to America when he was a young man and\r\nbecame a planter in Florida, where he was reported to have done\r\nvery well. At the time of the war he fought in Jackson's army,\r\nand afterwards under Hood, where he rose to be a colonel. When\r\nLee laid down his arms my uncle returned to his plantation, where\r\nhe remained for three or four years. About 1869 or 1870 he came\r\nback to Europe and took a small estate in Sussex, near Horsham.\r\nHe had made a very considerable fortune in the States, and his\r\nreason for leaving them was his aversion to the negroes, and his\r\ndislike of the Republican policy in extending the franchise to\r\nthem. He was a singular man, fierce and quick-tempered, very\r\nfoul-mouthed when he was angry, and of a most retiring\r\ndisposition. During all the years that he lived at Horsham, I\r\ndoubt if ever he set foot in the town. He had a garden and two or\r\nthree fields round his house, and there he would take his\r\nexercise, though very often for weeks on end he would never leave\r\nhis room. He drank a great deal of brandy and smoked very\r\nheavily, but he would see no society and did not want any\r\nfriends, not even his own brother.\r\n\r\n\"He didn't mind me; in fact, he took a fancy to me, for at the\r\ntime when he saw me first I was a youngster of twelve or so. This\r\nwould be in the year 1878, after he had been eight or nine years\r\nin England. He begged my father to let me live with him and he\r\nwas very kind to me in his way. When he was sober he used to be\r\nfond of playing backgammon and draughts with me, and he would\r\nmake me his representative both with the servants and with the\r\ntradespeople, so that by the time that I was sixteen I was quite\r\nmaster of the house. I kept all the keys and could go where I\r\nliked and do what I liked, so long as I did not disturb him in\r\nhis privacy. There was one singular exception, however, for he\r\nhad a single room, a lumber-room up among the attics, which was\r\ninvariably locked, and which he would never permit either me or\r\nanyone else to enter. With a boy's curiosity I have peeped\r\nthrough the keyhole, but I was never able to see more than such a\r\ncollection of old trunks and bundles as would be expected in such\r\na room.\r\n\r\n\"One day--it was in March, 1883--a letter with a foreign stamp\r\nlay upon the table in front of the colonel's plate. It was not a\r\ncommon thing for him to receive letters, for his bills were all\r\npaid in ready money, and he had no friends of any sort. 'From\r\nIndia!' said he as he took it up, 'Pondicherry postmark! What can\r\nthis be?' Opening it hurriedly, out there jumped five little\r\ndried orange pips, which pattered down upon his plate. I began to\r\nlaugh at this, but the laugh was struck from my lips at the sight\r\nof his face. His lip had fallen, his eyes were protruding, his\r\nskin the colour of putty, and he glared at the envelope which he\r\nstill held in his trembling hand, 'K. K. K.!' he shrieked, and\r\nthen, 'My God, my God, my sins have overtaken me!'\r\n\r\n\"'What is it, uncle?' I cried.\r\n\r\n\"'Death,' said he, and rising from the table he retired to his\r\nroom, leaving me palpitating with horror. I took up the envelope\r\nand saw scrawled in red ink upon the inner flap, just above the\r\ngum, the letter K three times repeated. There was nothing else\r\nsave the five dried pips. What could be the reason of his\r\noverpowering terror? I left the breakfast-table, and as I\r\nascended the stair I met him coming down with an old rusty key,\r\nwhich must have belonged to the attic, in one hand, and a small\r\nbrass box, like a cashbox, in the other.\r\n\r\n\"'They may do what they like, but I'll checkmate them still,'\r\nsaid he with an oath. 'Tell Mary that I shall want a fire in my\r\nroom to-day, and send down to Fordham, the Horsham lawyer.'\r\n\r\n\"I did as he ordered, and when the lawyer arrived I was asked to\r\nstep up to the room. The fire was burning brightly, and in the\r\ngrate there was a mass of black, fluffy ashes, as of burned\r\npaper, while the brass box stood open and empty beside it. As I\r\nglanced at the box I noticed, with a start, that upon the lid was\r\nprinted the treble K which I had read in the morning upon the\r\nenvelope.\r\n\r\n\"'I wish you, John,' said my uncle, 'to witness my will. I leave\r\nmy estate, with all its advantages and all its disadvantages, to\r\nmy brother, your father, whence it will, no doubt, descend to\r\nyou. If you can enjoy it in peace, well and good! If you find you\r\ncannot, take my advice, my boy, and leave it to your deadliest\r\nenemy. I am sorry to give you such a two-edged thing, but I can't\r\nsay what turn things are going to take. Kindly sign the paper\r\nwhere Mr. Fordham shows you.'\r\n\r\n\"I signed the paper as directed, and the lawyer took it away with\r\nhim. The singular incident made, as you may think, the deepest\r\nimpression upon me, and I pondered over it and turned it every\r\nway in my mind without being able to make anything of it. Yet I\r\ncould not shake off the vague feeling of dread which it left\r\nbehind, though the sensation grew less keen as the weeks passed\r\nand nothing happened to disturb the usual routine of our lives. I\r\ncould see a change in my uncle, however. He drank more than ever,\r\nand he was less inclined for any sort of society. Most of his\r\ntime he would spend in his room, with the door locked upon the\r\ninside, but sometimes he would emerge in a sort of drunken frenzy\r\nand would burst out of the house and tear about the garden with a\r\nrevolver in his hand, screaming out that he was afraid of no man,\r\nand that he was not to be cooped up, like a sheep in a pen, by\r\nman or devil. When these hot fits were over, however, he would\r\nrush tumultuously in at the door and lock and bar it behind him,\r\nlike a man who can brazen it out no longer against the terror\r\nwhich lies at the roots of his soul. At such times I have seen\r\nhis face, even on a cold day, glisten with moisture, as though it\r\nwere new raised from a basin.\r\n\r\n\"Well, to come to an end of the matter, Mr. Holmes, and not to\r\nabuse your patience, there came a night when he made one of those\r\ndrunken sallies from which he never came back. We found him, when\r\nwe went to search for him, face downward in a little\r\ngreen-scummed pool, which lay at the foot of the garden. There\r\nwas no sign of any violence, and the water was but two feet deep,\r\nso that the jury, having regard to his known eccentricity,\r\nbrought in a verdict of 'suicide.' But I, who knew how he winced\r\nfrom the very thought of death, had much ado to persuade myself\r\nthat he had gone out of his way to meet it. The matter passed,\r\nhowever, and my father entered into possession of the estate, and\r\nof some 14,000 pounds, which lay to his credit at the bank.\"\r\n\r\n\"One moment,\" Holmes interposed, \"your statement is, I foresee,\r\none of the most remarkable to which I have ever listened. Let me\r\nhave the date of the reception by your uncle of the letter, and\r\nthe date of his supposed suicide.\"\r\n\r\n\"The letter arrived on March 10, 1883. His death was seven weeks\r\nlater, upon the night of May 2nd.\"\r\n\r\n\"Thank you. Pray proceed.\"\r\n\r\n\"When my father took over the Horsham property, he, at my\r\nrequest, made a careful examination of the attic, which had been\r\nalways locked up. We found the brass box there, although its\r\ncontents had been destroyed. On the inside of the cover was a\r\npaper label, with the initials of K. K. K. repeated upon it, and\r\n'Letters, memoranda, receipts, and a register' written beneath.\r\nThese, we presume, indicated the nature of the papers which had\r\nbeen destroyed by Colonel Openshaw. For the rest, there was\r\nnothing of much importance in the attic save a great many\r\nscattered papers and note-books bearing upon my uncle's life in\r\nAmerica. Some of them were of the war time and showed that he had\r\ndone his duty well and had borne the repute of a brave soldier.\r\nOthers were of a date during the reconstruction of the Southern\r\nstates, and were mostly concerned with politics, for he had\r\nevidently taken a strong part in opposing the carpet-bag\r\npoliticians who had been sent down from the North.\r\n\r\n\"Well, it was the beginning of '84 when my father came to live at\r\nHorsham, and all went as well as possible with us until the\r\nJanuary of '85. On the fourth day after the new year I heard my\r\nfather give a sharp cry of surprise as we sat together at the\r\nbreakfast-table. There he was, sitting with a newly opened\r\nenvelope in one hand and five dried orange pips in the\r\noutstretched palm of the other one. He had always laughed at what\r\nhe called my cock-and-bull story about the colonel, but he looked\r\nvery scared and puzzled now that the same thing had come upon\r\nhimself.\r\n\r\n\"'Why, what on earth does this mean, John?' he stammered.\r\n\r\n\"My heart had turned to lead. 'It is K. K. K.,' said I.\r\n\r\n\"He looked inside the envelope. 'So it is,' he cried. 'Here are\r\nthe very letters. But what is this written above them?'\r\n\r\n\"'Put the papers on the sundial,' I read, peeping over his\r\nshoulder.\r\n\r\n\"'What papers? What sundial?' he asked.\r\n\r\n\"'The sundial in the garden. There is no other,' said I; 'but the\r\npapers must be those that are destroyed.'\r\n\r\n\"'Pooh!' said he, gripping hard at his courage. 'We are in a\r\ncivilised land here, and we can't have tomfoolery of this kind.\r\nWhere does the thing come from?'\r\n\r\n\"'From Dundee,' I answered, glancing at the postmark.\r\n\r\n\"'Some preposterous practical joke,' said he. 'What have I to do\r\nwith sundials and papers? I shall take no notice of such\r\nnonsense.'\r\n\r\n\"'I should certainly speak to the police,' I said.\r\n\r\n\"'And be laughed at for my pains. Nothing of the sort.'\r\n\r\n\"'Then let me do so?'\r\n\r\n\"'No, I forbid you. I won't have a fuss made about such\r\nnonsense.'\r\n\r\n\"It was in vain to argue with him, for he was a very obstinate\r\nman. I went about, however, with a heart which was full of\r\nforebodings.\r\n\r\n\"On the third day after the coming of the letter my father went\r\nfrom home to visit an old friend of his, Major Freebody, who is\r\nin command of one of the forts upon Portsdown Hill. I was glad\r\nthat he should go, for it seemed to me that he was farther from\r\ndanger when he was away from home. In that, however, I was in\r\nerror. Upon the second day of his absence I received a telegram\r\nfrom the major, imploring me to come at once. My father had\r\nfallen over one of the deep chalk-pits which abound in the\r\nneighbourhood, and was lying senseless, with a shattered skull. I\r\nhurried to him, but he passed away without having ever recovered\r\nhis consciousness. He had, as it appears, been returning from\r\nFareham in the twilight, and as the country was unknown to him,\r\nand the chalk-pit unfenced, the jury had no hesitation in\r\nbringing in a verdict of 'death from accidental causes.'\r\nCarefully as I examined every fact connected with his death, I\r\nwas unable to find anything which could suggest the idea of\r\nmurder. There were no signs of violence, no footmarks, no\r\nrobbery, no record of strangers having been seen upon the roads.\r\nAnd yet I need not tell you that my mind was far from at ease,\r\nand that I was well-nigh certain that some foul plot had been\r\nwoven round him.\r\n\r\n\"In this sinister way I came into my inheritance. You will ask me\r\nwhy I did not dispose of it? I answer, because I was well\r\nconvinced that our troubles were in some way dependent upon an\r\nincident in my uncle's life, and that the danger would be as\r\npressing in one house as in another.\r\n\r\n\"It was in January, '85, that my poor father met his end, and two\r\nyears and eight months have elapsed since then. During that time\r\nI have lived happily at Horsham, and I had begun to hope that\r\nthis curse had passed away from the family, and that it had ended\r\nwith the last generation. I had begun to take comfort too soon,\r\nhowever; yesterday morning the blow fell in the very shape in\r\nwhich it had come upon my father.\"\r\n\r\nThe young man took from his waistcoat a crumpled envelope, and\r\nturning to the table he shook out upon it five little dried\r\norange pips.\r\n\r\n\"This is the envelope,\" he continued. \"The postmark is\r\nLondon--eastern division. Within are the very words which were\r\nupon my father's last message: 'K. K. K.'; and then 'Put the\r\npapers on the sundial.'\"\r\n\r\n\"What have you done?\" asked Holmes.\r\n\r\n\"Nothing.\"\r\n\r\n\"Nothing?\"\r\n\r\n\"To tell the truth\"--he sank his face into his thin, white\r\nhands--\"I have felt helpless. I have felt like one of those poor\r\nrabbits when the snake is writhing towards it. I seem to be in\r\nthe grasp of some resistless, inexorable evil, which no foresight\r\nand no precautions can guard against.\"\r\n\r\n\"Tut! tut!\" cried Sherlock Holmes. \"You must act, man, or you are\r\nlost. Nothing but energy can save you. This is no time for\r\ndespair.\"\r\n\r\n\"I have seen the police.\"\r\n\r\n\"Ah!\"\r\n\r\n\"But they listened to my story with a smile. I am convinced that\r\nthe inspector has formed the opinion that the letters are all\r\npractical jokes, and that the deaths of my relations were really\r\naccidents, as the jury stated, and were not to be connected with\r\nthe warnings.\"\r\n\r\nHolmes shook his clenched hands in the air. \"Incredible\r\nimbecility!\" he cried.\r\n\r\n\"They have, however, allowed me a policeman, who may remain in\r\nthe house with me.\"\r\n\r\n\"Has he come with you to-night?\"\r\n\r\n\"No. His orders were to stay in the house.\"\r\n\r\nAgain Holmes raved in the air.\r\n\r\n\"Why did you come to me,\" he cried, \"and, above all, why did you\r\nnot come at once?\"\r\n\r\n\"I did not know. It was only to-day that I spoke to Major\r\nPrendergast about my troubles and was advised by him to come to\r\nyou.\"\r\n\r\n\"It is really two days since you had the letter. We should have\r\nacted before this. You have no further evidence, I suppose, than\r\nthat which you have placed before us--no suggestive detail which\r\nmight help us?\"\r\n\r\n\"There is one thing,\" said John Openshaw. He rummaged in his coat\r\npocket, and, drawing out a piece of discoloured, blue-tinted\r\npaper, he laid it out upon the table. \"I have some remembrance,\"\r\nsaid he, \"that on the day when my uncle burned the papers I\r\nobserved that the small, unburned margins which lay amid the\r\nashes were of this particular colour. I found this single sheet\r\nupon the floor of his room, and I am inclined to think that it\r\nmay be one of the papers which has, perhaps, fluttered out from\r\namong the others, and in that way has escaped destruction. Beyond\r\nthe mention of pips, I do not see that it helps us much. I think\r\nmyself that it is a page from some private diary. The writing is\r\nundoubtedly my uncle's.\"\r\n\r\nHolmes moved the lamp, and we both bent over the sheet of paper,\r\nwhich showed by its ragged edge that it had indeed been torn from\r\na book. It was headed, \"March, 1869,\" and beneath were the\r\nfollowing enigmatical notices:\r\n\r\n\"4th. Hudson came. Same old platform.\r\n\r\n\"7th. Set the pips on McCauley, Paramore, and\r\n      John Swain, of St. Augustine.\r\n\r\n\"9th. McCauley cleared.\r\n\r\n\"10th. John Swain cleared.\r\n\r\n\"12th. Visited Paramore. All well.\"\r\n\r\n\"Thank you!\" said Holmes, folding up the paper and returning it\r\nto our visitor. \"And now you must on no account lose another\r\ninstant. We cannot spare time even to discuss what you have told\r\nme. You must get home instantly and act.\"\r\n\r\n\"What shall I do?\"\r\n\r\n\"There is but one thing to do. It must be done at once. You must\r\nput this piece of paper which you have shown us into the brass\r\nbox which you have described. You must also put in a note to say\r\nthat all the other papers were burned by your uncle, and that\r\nthis is the only one which remains. You must assert that in such\r\nwords as will carry conviction with them. Having done this, you\r\nmust at once put the box out upon the sundial, as directed. Do\r\nyou understand?\"\r\n\r\n\"Entirely.\"\r\n\r\n\"Do not think of revenge, or anything of the sort, at present. I\r\nthink that we may gain that by means of the law; but we have our\r\nweb to weave, while theirs is already woven. The first\r\nconsideration is to remove the pressing danger which threatens\r\nyou. The second is to clear up the mystery and to punish the\r\nguilty parties.\"\r\n\r\n\"I thank you,\" said the young man, rising and pulling on his\r\novercoat. \"You have given me fresh life and hope. I shall\r\ncertainly do as you advise.\"\r\n\r\n\"Do not lose an instant. And, above all, take care of yourself in\r\nthe meanwhile, for I do not think that there can be a doubt that\r\nyou are threatened by a very real and imminent danger. How do you\r\ngo back?\"\r\n\r\n\"By train from Waterloo.\"\r\n\r\n\"It is not yet nine. The streets will be crowded, so I trust that\r\nyou may be in safety. And yet you cannot guard yourself too\r\nclosely.\"\r\n\r\n\"I am armed.\"\r\n\r\n\"That is well. To-morrow I shall set to work upon your case.\"\r\n\r\n\"I shall see you at Horsham, then?\"\r\n\r\n\"No, your secret lies in London. It is there that I shall seek\r\nit.\"\r\n\r\n\"Then I shall call upon you in a day, or in two days, with news\r\nas to the box and the papers. I shall take your advice in every\r\nparticular.\" He shook hands with us and took his leave. Outside\r\nthe wind still screamed and the rain splashed and pattered\r\nagainst the windows. This strange, wild story seemed to have come\r\nto us from amid the mad elements--blown in upon us like a sheet\r\nof sea-weed in a gale--and now to have been reabsorbed by them\r\nonce more.\r\n\r\nSherlock Holmes sat for some time in silence, with his head sunk\r\nforward and his eyes bent upon the red glow of the fire. Then he\r\nlit his pipe, and leaning back in his chair he watched the blue\r\nsmoke-rings as they chased each other up to the ceiling.\r\n\r\n\"I think, Watson,\" he remarked at last, \"that of all our cases we\r\nhave had none more fantastic than this.\"\r\n\r\n\"Save, perhaps, the Sign of Four.\"\r\n\r\n\"Well, yes. Save, perhaps, that. And yet this John Openshaw seems\r\nto me to be walking amid even greater perils than did the\r\nSholtos.\"\r\n\r\n\"But have you,\" I asked, \"formed any definite conception as to\r\nwhat these perils are?\"\r\n\r\n\"There can be no question as to their nature,\" he answered.\r\n\r\n\"Then what are they? Who is this K. K. K., and why does he pursue\r\nthis unhappy family?\"\r\n\r\nSherlock Holmes closed his eyes and placed his elbows upon the\r\narms of his chair, with his finger-tips together. \"The ideal\r\nreasoner,\" he remarked, \"would, when he had once been shown a\r\nsingle fact in all its bearings, deduce from it not only all the\r\nchain of events which led up to it but also all the results which\r\nwould follow from it. As Cuvier could correctly describe a whole\r\nanimal by the contemplation of a single bone, so the observer who\r\nhas thoroughly understood one link in a series of incidents\r\nshould be able to accurately state all the other ones, both\r\nbefore and after. We have not yet grasped the results which the\r\nreason alone can attain to. Problems may be solved in the study\r\nwhich have baffled all those who have sought a solution by the\r\naid of their senses. To carry the art, however, to its highest\r\npitch, it is necessary that the reasoner should be able to\r\nutilise all the facts which have come to his knowledge; and this\r\nin itself implies, as you will readily see, a possession of all\r\nknowledge, which, even in these days of free education and\r\nencyclopaedias, is a somewhat rare accomplishment. It is not so\r\nimpossible, however, that a man should possess all knowledge\r\nwhich is likely to be useful to him in his work, and this I have\r\nendeavoured in my case to do. If I remember rightly, you on one\r\noccasion, in the early days of our friendship, defined my limits\r\nin a very precise fashion.\"\r\n\r\n\"Yes,\" I answered, laughing. \"It was a singular document.\r\nPhilosophy, astronomy, and politics were marked at zero, I\r\nremember. Botany variable, geology profound as regards the\r\nmud-stains from any region within fifty miles of town, chemistry\r\neccentric, anatomy unsystematic, sensational literature and crime\r\nrecords unique, violin-player, boxer, swordsman, lawyer, and\r\nself-poisoner by cocaine and tobacco. Those, I think, were the\r\nmain points of my analysis.\"\r\n\r\nHolmes grinned at the last item. \"Well,\" he said, \"I say now, as\r\nI said then, that a man should keep his little brain-attic\r\nstocked with all the furniture that he is likely to use, and the\r\nrest he can put away in the lumber-room of his library, where he\r\ncan get it if he wants it. Now, for such a case as the one which\r\nhas been submitted to us to-night, we need certainly to muster\r\nall our resources. Kindly hand me down the letter K of the\r\n'American Encyclopaedia' which stands upon the shelf beside you.\r\nThank you. Now let us consider the situation and see what may be\r\ndeduced from it. In the first place, we may start with a strong\r\npresumption that Colonel Openshaw had some very strong reason for\r\nleaving America. Men at his time of life do not change all their\r\nhabits and exchange willingly the charming climate of Florida for\r\nthe lonely life of an English provincial town. His extreme love\r\nof solitude in England suggests the idea that he was in fear of\r\nsomeone or something, so we may assume as a working hypothesis\r\nthat it was fear of someone or something which drove him from\r\nAmerica. As to what it was he feared, we can only deduce that by\r\nconsidering the formidable letters which were received by himself\r\nand his successors. Did you remark the postmarks of those\r\nletters?\"\r\n\r\n\"The first was from Pondicherry, the second from Dundee, and the\r\nthird from London.\"\r\n\r\n\"From East London. What do you deduce from that?\"\r\n\r\n\"They are all seaports. That the writer was on board of a ship.\"\r\n\r\n\"Excellent. We have already a clue. There can be no doubt that\r\nthe probability--the strong probability--is that the writer was\r\non board of a ship. And now let us consider another point. In the\r\ncase of Pondicherry, seven weeks elapsed between the threat and\r\nits fulfilment, in Dundee it was only some three or four days.\r\nDoes that suggest anything?\"\r\n\r\n\"A greater distance to travel.\"\r\n\r\n\"But the letter had also a greater distance to come.\"\r\n\r\n\"Then I do not see the point.\"\r\n\r\n\"There is at least a presumption that the vessel in which the man\r\nor men are is a sailing-ship. It looks as if they always send\r\ntheir singular warning or token before them when starting upon\r\ntheir mission. You see how quickly the deed followed the sign\r\nwhen it came from Dundee. If they had come from Pondicherry in a\r\nsteamer they would have arrived almost as soon as their letter.\r\nBut, as a matter of fact, seven weeks elapsed. I think that those\r\nseven weeks represented the difference between the mail-boat which\r\nbrought the letter and the sailing vessel which brought the\r\nwriter.\"\r\n\r\n\"It is possible.\"\r\n\r\n\"More than that. It is probable. And now you see the deadly\r\nurgency of this new case, and why I urged young Openshaw to\r\ncaution. The blow has always fallen at the end of the time which\r\nit would take the senders to travel the distance. But this one\r\ncomes from London, and therefore we cannot count upon delay.\"\r\n\r\n\"Good God!\" I cried. \"What can it mean, this relentless\r\npersecution?\"\r\n\r\n\"The papers which Openshaw carried are obviously of vital\r\nimportance to the person or persons in the sailing-ship. I think\r\nthat it is quite clear that there must be more than one of them.\r\nA single man could not have carried out two deaths in such a way\r\nas to deceive a coroner's jury. There must have been several in\r\nit, and they must have been men of resource and determination.\r\nTheir papers they mean to have, be the holder of them who it may.\r\nIn this way you see K. K. K. ceases to be the initials of an\r\nindividual and becomes the badge of a society.\"\r\n\r\n\"But of what society?\"\r\n\r\n\"Have you never--\" said Sherlock Holmes, bending forward and\r\nsinking his voice--\"have you never heard of the Ku Klux Klan?\"\r\n\r\n\"I never have.\"\r\n\r\nHolmes turned over the leaves of the book upon his knee. \"Here it\r\nis,\" said he presently:\r\n\r\n\"'Ku Klux Klan. A name derived from the fanciful resemblance to\r\nthe sound produced by cocking a rifle. This terrible secret\r\nsociety was formed by some ex-Confederate soldiers in the\r\nSouthern states after the Civil War, and it rapidly formed local\r\nbranches in different parts of the country, notably in Tennessee,\r\nLouisiana, the Carolinas, Georgia, and Florida. Its power was\r\nused for political purposes, principally for the terrorising of\r\nthe negro voters and the murdering and driving from the country\r\nof those who were opposed to its views. Its outrages were usually\r\npreceded by a warning sent to the marked man in some fantastic\r\nbut generally recognised shape--a sprig of oak-leaves in some\r\nparts, melon seeds or orange pips in others. On receiving this\r\nthe victim might either openly abjure his former ways, or might\r\nfly from the country. If he braved the matter out, death would\r\nunfailingly come upon him, and usually in some strange and\r\nunforeseen manner. So perfect was the organisation of the\r\nsociety, and so systematic its methods, that there is hardly a\r\ncase upon record where any man succeeded in braving it with\r\nimpunity, or in which any of its outrages were traced home to the\r\nperpetrators. For some years the organisation flourished in spite\r\nof the efforts of the United States government and of the better\r\nclasses of the community in the South. Eventually, in the year\r\n1869, the movement rather suddenly collapsed, although there have\r\nbeen sporadic outbreaks of the same sort since that date.'\r\n\r\n\"You will observe,\" said Holmes, laying down the volume, \"that\r\nthe sudden breaking up of the society was coincident with the\r\ndisappearance of Openshaw from America with their papers. It may\r\nwell have been cause and effect. It is no wonder that he and his\r\nfamily have some of the more implacable spirits upon their track.\r\nYou can understand that this register and diary may implicate\r\nsome of the first men in the South, and that there may be many\r\nwho will not sleep easy at night until it is recovered.\"\r\n\r\n\"Then the page we have seen--\"\r\n\r\n\"Is such as we might expect. It ran, if I remember right, 'sent\r\nthe pips to A, B, and C'--that is, sent the society's warning to\r\nthem. Then there are successive entries that A and B cleared, or\r\nleft the country, and finally that C was visited, with, I fear, a\r\nsinister result for C. Well, I think, Doctor, that we may let\r\nsome light into this dark place, and I believe that the only\r\nchance young Openshaw has in the meantime is to do what I have\r\ntold him. There is nothing more to be said or to be done\r\nto-night, so hand me over my violin and let us try to forget for\r\nhalf an hour the miserable weather and the still more miserable\r\nways of our fellow-men.\"\r\n\r\n\r\nIt had cleared in the morning, and the sun was shining with a\r\nsubdued brightness through the dim veil which hangs over the\r\ngreat city. Sherlock Holmes was already at breakfast when I came\r\ndown.\r\n\r\n\"You will excuse me for not waiting for you,\" said he; \"I have, I\r\nforesee, a very busy day before me in looking into this case of\r\nyoung Openshaw's.\"\r\n\r\n\"What steps will you take?\" I asked.\r\n\r\n\"It will very much depend upon the results of my first inquiries.\r\nI may have to go down to Horsham, after all.\"\r\n\r\n\"You will not go there first?\"\r\n\r\n\"No, I shall commence with the City. Just ring the bell and the\r\nmaid will bring up your coffee.\"\r\n\r\nAs I waited, I lifted the unopened newspaper from the table and\r\nglanced my eye over it. It rested upon a heading which sent a\r\nchill to my heart.\r\n\r\n\"Holmes,\" I cried, \"you are too late.\"\r\n\r\n\"Ah!\" said he, laying down his cup, \"I feared as much. How was it\r\ndone?\" He spoke calmly, but I could see that he was deeply moved.\r\n\r\n\"My eye caught the name of Openshaw, and the heading 'Tragedy\r\nNear Waterloo Bridge.' Here is the account:\r\n\r\n\"Between nine and ten last night Police-Constable Cook, of the H\r\nDivision, on duty near Waterloo Bridge, heard a cry for help and\r\na splash in the water. The night, however, was extremely dark and\r\nstormy, so that, in spite of the help of several passers-by, it\r\nwas quite impossible to effect a rescue. The alarm, however, was\r\ngiven, and, by the aid of the water-police, the body was\r\neventually recovered. It proved to be that of a young gentleman\r\nwhose name, as it appears from an envelope which was found in his\r\npocket, was John Openshaw, and whose residence is near Horsham.\r\nIt is conjectured that he may have been hurrying down to catch\r\nthe last train from Waterloo Station, and that in his haste and\r\nthe extreme darkness he missed his path and walked over the edge\r\nof one of the small landing-places for river steamboats. The body\r\nexhibited no traces of violence, and there can be no doubt that\r\nthe deceased had been the victim of an unfortunate accident,\r\nwhich should have the effect of calling the attention of the\r\nauthorities to the condition of the riverside landing-stages.\"\r\n\r\nWe sat in silence for some minutes, Holmes more depressed and\r\nshaken than I had ever seen him.\r\n\r\n\"That hurts my pride, Watson,\" he said at last. \"It is a petty\r\nfeeling, no doubt, but it hurts my pride. It becomes a personal\r\nmatter with me now, and, if God sends me health, I shall set my\r\nhand upon this gang. That he should come to me for help, and that\r\nI should send him away to his death--!\" He sprang from his chair\r\nand paced about the room in uncontrollable agitation, with a\r\nflush upon his sallow cheeks and a nervous clasping and\r\nunclasping of his long thin hands.\r\n\r\n\"They must be cunning devils,\" he exclaimed at last. \"How could\r\nthey have decoyed him down there? The Embankment is not on the\r\ndirect line to the station. The bridge, no doubt, was too\r\ncrowded, even on such a night, for their purpose. Well, Watson,\r\nwe shall see who will win in the long run. I am going out now!\"\r\n\r\n\"To the police?\"\r\n\r\n\"No; I shall be my own police. When I have spun the web they may\r\ntake the flies, but not before.\"\r\n\r\nAll day I was engaged in my professional work, and it was late in\r\nthe evening before I returned to Baker Street. Sherlock Holmes\r\nhad not come back yet. It was nearly ten o'clock before he\r\nentered, looking pale and worn. He walked up to the sideboard,\r\nand tearing a piece from the loaf he devoured it voraciously,\r\nwashing it down with a long draught of water.\r\n\r\n\"You are hungry,\" I remarked.\r\n\r\n\"Starving. It had escaped my memory. I have had nothing since\r\nbreakfast.\"\r\n\r\n\"Nothing?\"\r\n\r\n\"Not a bite. I had no time to think of it.\"\r\n\r\n\"And how have you succeeded?\"\r\n\r\n\"Well.\"\r\n\r\n\"You have a clue?\"\r\n\r\n\"I have them in the hollow of my hand. Young Openshaw shall not\r\nlong remain unavenged. Why, Watson, let us put their own devilish\r\ntrade-mark upon them. It is well thought of!\"\r\n\r\n\"What do you mean?\"\r\n\r\nHe took an orange from the cupboard, and tearing it to pieces he\r\nsqueezed out the pips upon the table. Of these he took five and\r\nthrust them into an envelope. On the inside of the flap he wrote\r\n\"S. H. for J. O.\" Then he sealed it and addressed it to \"Captain\r\nJames Calhoun, Barque 'Lone Star,' Savannah, Georgia.\"\r\n\r\n\"That will await him when he enters port,\" said he, chuckling.\r\n\"It may give him a sleepless night. He will find it as sure a\r\nprecursor of his fate as Openshaw did before him.\"\r\n\r\n\"And who is this Captain Calhoun?\"\r\n\r\n\"The leader of the gang. I shall have the others, but he first.\"\r\n\r\n\"How did you trace it, then?\"\r\n\r\nHe took a large sheet of paper from his pocket, all covered with\r\ndates and names.\r\n\r\n\"I have spent the whole day,\" said he, \"over Lloyd's registers\r\nand files of the old papers, following the future career of every\r\nvessel which touched at Pondicherry in January and February in\r\n'83. There were thirty-six ships of fair tonnage which were\r\nreported there during those months. Of these, one, the 'Lone Star,'\r\ninstantly attracted my attention, since, although it was reported\r\nas having cleared from London, the name is that which is given to\r\none of the states of the Union.\"\r\n\r\n\"Texas, I think.\"\r\n\r\n\"I was not and am not sure which; but I knew that the ship must\r\nhave an American origin.\"\r\n\r\n\"What then?\"\r\n\r\n\"I searched the Dundee records, and when I found that the barque\r\n'Lone Star' was there in January, '85, my suspicion became a\r\ncertainty. I then inquired as to the vessels which lay at present\r\nin the port of London.\"\r\n\r\n\"Yes?\"\r\n\r\n\"The 'Lone Star' had arrived here last week. I went down to the\r\nAlbert Dock and found that she had been taken down the river by\r\nthe early tide this morning, homeward bound to Savannah. I wired\r\nto Gravesend and learned that she had passed some time ago, and\r\nas the wind is easterly I have no doubt that she is now past the\r\nGoodwins and not very far from the Isle of Wight.\"\r\n\r\n\"What will you do, then?\"\r\n\r\n\"Oh, I have my hand upon him. He and the two mates, are as I\r\nlearn, the only native-born Americans in the ship. The others are\r\nFinns and Germans. I know, also, that they were all three away\r\nfrom the ship last night. I had it from the stevedore who has\r\nbeen loading their cargo. By the time that their sailing-ship\r\nreaches Savannah the mail-boat will have carried this letter, and\r\nthe cable will have informed the police of Savannah that these\r\nthree gentlemen are badly wanted here upon a charge of murder.\"\r\n\r\nThere is ever a flaw, however, in the best laid of human plans,\r\nand the murderers of John Openshaw were never to receive the\r\norange pips which would show them that another, as cunning and as\r\nresolute as themselves, was upon their track. Very long and very\r\nsevere were the equinoctial gales that year. We waited long for\r\nnews of the \"Lone Star\" of Savannah, but none ever reached us. We\r\ndid at last hear that somewhere far out in the Atlantic a\r\nshattered stern-post of a boat was seen swinging in the trough\r\nof a wave, with the letters \"L. S.\" carved upon it, and that is\r\nall which we shall ever know of the fate of the \"Lone Star.\"\r\n\r\n\r\n\r\nADVENTURE VI. THE MAN WITH THE TWISTED LIP\r\n\r\nIsa Whitney, brother of the late Elias Whitney, D.D., Principal\r\nof the Theological College of St. George's, was much addicted to\r\nopium. The habit grew upon him, as I understand, from some\r\nfoolish freak when he was at college; for having read De\r\nQuincey's description of his dreams and sensations, he had\r\ndrenched his tobacco with laudanum in an attempt to produce the\r\nsame effects. He found, as so many more have done, that the\r\npractice is easier to attain than to get rid of, and for many\r\nyears he continued to be a slave to the drug, an object of\r\nmingled horror and pity to his friends and relatives. I can see\r\nhim now, with yellow, pasty face, drooping lids, and pin-point\r\npupils, all huddled in a chair, the wreck and ruin of a noble\r\nman.\r\n\r\nOne night--it was in June, '89--there came a ring to my bell,\r\nabout the hour when a man gives his first yawn and glances at the\r\nclock. I sat up in my chair, and my wife laid her needle-work\r\ndown in her lap and made a little face of disappointment.\r\n\r\n\"A patient!\" said she. \"You'll have to go out.\"\r\n\r\nI groaned, for I was newly come back from a weary day.\r\n\r\nWe heard the door open, a few hurried words, and then quick steps\r\nupon the linoleum. Our own door flew open, and a lady, clad in\r\nsome dark-coloured stuff, with a black veil, entered the room.\r\n\r\n\"You will excuse my calling so late,\" she began, and then,\r\nsuddenly losing her self-control, she ran forward, threw her arms\r\nabout my wife's neck, and sobbed upon her shoulder. \"Oh, I'm in\r\nsuch trouble!\" she cried; \"I do so want a little help.\"\r\n\r\n\"Why,\" said my wife, pulling up her veil, \"it is Kate Whitney.\r\nHow you startled me, Kate! I had not an idea who you were when\r\nyou came in.\"\r\n\r\n\"I didn't know what to do, so I came straight to you.\" That was\r\nalways the way. Folk who were in grief came to my wife like birds\r\nto a light-house.\r\n\r\n\"It was very sweet of you to come. Now, you must have some wine\r\nand water, and sit here comfortably and tell us all about it. Or\r\nshould you rather that I sent James off to bed?\"\r\n\r\n\"Oh, no, no! I want the doctor's advice and help, too. It's about\r\nIsa. He has not been home for two days. I am so frightened about\r\nhim!\"\r\n\r\nIt was not the first time that she had spoken to us of her\r\nhusband's trouble, to me as a doctor, to my wife as an old friend\r\nand school companion. We soothed and comforted her by such words\r\nas we could find. Did she know where her husband was? Was it\r\npossible that we could bring him back to her?\r\n\r\nIt seems that it was. She had the surest information that of late\r\nhe had, when the fit was on him, made use of an opium den in the\r\nfarthest east of the City. Hitherto his orgies had always been\r\nconfined to one day, and he had come back, twitching and\r\nshattered, in the evening. But now the spell had been upon him\r\neight-and-forty hours, and he lay there, doubtless among the\r\ndregs of the docks, breathing in the poison or sleeping off the\r\neffects. There he was to be found, she was sure of it, at the Bar\r\nof Gold, in Upper Swandam Lane. But what was she to do? How could\r\nshe, a young and timid woman, make her way into such a place and\r\npluck her husband out from among the ruffians who surrounded him?\r\n\r\nThere was the case, and of course there was but one way out of\r\nit. Might I not escort her to this place? And then, as a second\r\nthought, why should she come at all? I was Isa Whitney's medical\r\nadviser, and as such I had influence over him. I could manage it\r\nbetter if I were alone. I promised her on my word that I would\r\nsend him home in a cab within two hours if he were indeed at the\r\naddress which she had given me. And so in ten minutes I had left\r\nmy armchair and cheery sitting-room behind me, and was speeding\r\neastward in a hansom on a strange errand, as it seemed to me at\r\nthe time, though the future only could show how strange it was to\r\nbe.\r\n\r\nBut there was no great difficulty in the first stage of my\r\nadventure. Upper Swandam Lane is a vile alley lurking behind the\r\nhigh wharves which line the north side of the river to the east\r\nof London Bridge. Between a slop-shop and a gin-shop, approached\r\nby a steep flight of steps leading down to a black gap like the\r\nmouth of a cave, I found the den of which I was in search.\r\nOrdering my cab to wait, I passed down the steps, worn hollow in\r\nthe centre by the ceaseless tread of drunken feet; and by the\r\nlight of a flickering oil-lamp above the door I found the latch\r\nand made my way into a long, low room, thick and heavy with the\r\nbrown opium smoke, and terraced with wooden berths, like the\r\nforecastle of an emigrant ship.\r\n\r\nThrough the gloom one could dimly catch a glimpse of bodies lying\r\nin strange fantastic poses, bowed shoulders, bent knees, heads\r\nthrown back, and chins pointing upward, with here and there a\r\ndark, lack-lustre eye turned upon the newcomer. Out of the black\r\nshadows there glimmered little red circles of light, now bright,\r\nnow faint, as the burning poison waxed or waned in the bowls of\r\nthe metal pipes. The most lay silent, but some muttered to\r\nthemselves, and others talked together in a strange, low,\r\nmonotonous voice, their conversation coming in gushes, and then\r\nsuddenly tailing off into silence, each mumbling out his own\r\nthoughts and paying little heed to the words of his neighbour. At\r\nthe farther end was a small brazier of burning charcoal, beside\r\nwhich on a three-legged wooden stool there sat a tall, thin old\r\nman, with his jaw resting upon his two fists, and his elbows upon\r\nhis knees, staring into the fire.\r\n\r\nAs I entered, a sallow Malay attendant had hurried up with a pipe\r\nfor me and a supply of the drug, beckoning me to an empty berth.\r\n\r\n\"Thank you. I have not come to stay,\" said I. \"There is a friend\r\nof mine here, Mr. Isa Whitney, and I wish to speak with him.\"\r\n\r\nThere was a movement and an exclamation from my right, and\r\npeering through the gloom, I saw Whitney, pale, haggard, and\r\nunkempt, staring out at me.\r\n\r\n\"My God! It's Watson,\" said he. He was in a pitiable state of\r\nreaction, with every nerve in a twitter. \"I say, Watson, what\r\no'clock is it?\"\r\n\r\n\"Nearly eleven.\"\r\n\r\n\"Of what day?\"\r\n\r\n\"Of Friday, June 19th.\"\r\n\r\n\"Good heavens! I thought it was Wednesday. It is Wednesday. What\r\nd'you want to frighten a chap for?\" He sank his face onto his\r\narms and began to sob in a high treble key.\r\n\r\n\"I tell you that it is Friday, man. Your wife has been waiting\r\nthis two days for you. You should be ashamed of yourself!\"\r\n\r\n\"So I am. But you've got mixed, Watson, for I have only been here\r\na few hours, three pipes, four pipes--I forget how many. But I'll\r\ngo home with you. I wouldn't frighten Kate--poor little Kate.\r\nGive me your hand! Have you a cab?\"\r\n\r\n\"Yes, I have one waiting.\"\r\n\r\n\"Then I shall go in it. But I must owe something. Find what I\r\nowe, Watson. I am all off colour. I can do nothing for myself.\"\r\n\r\nI walked down the narrow passage between the double row of\r\nsleepers, holding my breath to keep out the vile, stupefying\r\nfumes of the drug, and looking about for the manager. As I passed\r\nthe tall man who sat by the brazier I felt a sudden pluck at my\r\nskirt, and a low voice whispered, \"Walk past me, and then look\r\nback at me.\" The words fell quite distinctly upon my ear. I\r\nglanced down. They could only have come from the old man at my\r\nside, and yet he sat now as absorbed as ever, very thin, very\r\nwrinkled, bent with age, an opium pipe dangling down from between\r\nhis knees, as though it had dropped in sheer lassitude from his\r\nfingers. I took two steps forward and looked back. It took all my\r\nself-control to prevent me from breaking out into a cry of\r\nastonishment. He had turned his back so that none could see him\r\nbut I. His form had filled out, his wrinkles were gone, the dull\r\neyes had regained their fire, and there, sitting by the fire and\r\ngrinning at my surprise, was none other than Sherlock Holmes. He\r\nmade a slight motion to me to approach him, and instantly, as he\r\nturned his face half round to the company once more, subsided\r\ninto a doddering, loose-lipped senility.\r\n\r\n\"Holmes!\" I whispered, \"what on earth are you doing in this den?\"\r\n\r\n\"As low as you can,\" he answered; \"I have excellent ears. If you\r\nwould have the great kindness to get rid of that sottish friend\r\nof yours I should be exceedingly glad to have a little talk with\r\nyou.\"\r\n\r\n\"I have a cab outside.\"\r\n\r\n\"Then pray send him home in it. You may safely trust him, for he\r\nappears to be too limp to get into any mischief. I should\r\nrecommend you also to send a note by the cabman to your wife to\r\nsay that you have thrown in your lot with me. If you will wait\r\noutside, I shall be with you in five minutes.\"\r\n\r\nIt was difficult to refuse any of Sherlock Holmes' requests, for\r\nthey were always so exceedingly definite, and put forward with\r\nsuch a quiet air of mastery. I felt, however, that when Whitney\r\nwas once confined in the cab my mission was practically\r\naccomplished; and for the rest, I could not wish anything better\r\nthan to be associated with my friend in one of those singular\r\nadventures which were the normal condition of his existence. In a\r\nfew minutes I had written my note, paid Whitney's bill, led him\r\nout to the cab, and seen him driven through the darkness. In a\r\nvery short time a decrepit figure had emerged from the opium den,\r\nand I was walking down the street with Sherlock Holmes. For two\r\nstreets he shuffled along with a bent back and an uncertain foot.\r\nThen, glancing quickly round, he straightened himself out and\r\nburst into a hearty fit of laughter.\r\n\r\n\"I suppose, Watson,\" said he, \"that you imagine that I have added\r\nopium-smoking to cocaine injections, and all the other little\r\nweaknesses on which you have favoured me with your medical\r\nviews.\"\r\n\r\n\"I was certainly surprised to find you there.\"\r\n\r\n\"But not more so than I to find you.\"\r\n\r\n\"I came to find a friend.\"\r\n\r\n\"And I to find an enemy.\"\r\n\r\n\"An enemy?\"\r\n\r\n\"Yes; one of my natural enemies, or, shall I say, my natural\r\nprey. Briefly, Watson, I am in the midst of a very remarkable\r\ninquiry, and I have hoped to find a clue in the incoherent\r\nramblings of these sots, as I have done before now. Had I been\r\nrecognised in that den my life would not have been worth an\r\nhour's purchase; for I have used it before now for my own\r\npurposes, and the rascally Lascar who runs it has sworn to have\r\nvengeance upon me. There is a trap-door at the back of that\r\nbuilding, near the corner of Paul's Wharf, which could tell some\r\nstrange tales of what has passed through it upon the moonless\r\nnights.\"\r\n\r\n\"What! You do not mean bodies?\"\r\n\r\n\"Ay, bodies, Watson. We should be rich men if we had 1000 pounds\r\nfor every poor devil who has been done to death in that den. It\r\nis the vilest murder-trap on the whole riverside, and I fear that\r\nNeville St. Clair has entered it never to leave it more. But our\r\ntrap should be here.\" He put his two forefingers between his\r\nteeth and whistled shrilly--a signal which was answered by a\r\nsimilar whistle from the distance, followed shortly by the rattle\r\nof wheels and the clink of horses' hoofs.\r\n\r\n\"Now, Watson,\" said Holmes, as a tall dog-cart dashed up through\r\nthe gloom, throwing out two golden tunnels of yellow light from\r\nits side lanterns. \"You'll come with me, won't you?\"\r\n\r\n\"If I can be of use.\"\r\n\r\n\"Oh, a trusty comrade is always of use; and a chronicler still\r\nmore so. My room at The Cedars is a double-bedded one.\"\r\n\r\n\"The Cedars?\"\r\n\r\n\"Yes; that is Mr. St. Clair's house. I am staying there while I\r\nconduct the inquiry.\"\r\n\r\n\"Where is it, then?\"\r\n\r\n\"Near Lee, in Kent. We have a seven-mile drive before us.\"\r\n\r\n\"But I am all in the dark.\"\r\n\r\n\"Of course you are. You'll know all about it presently. Jump up\r\nhere. All right, John; we shall not need you. Here's half a\r\ncrown. Look out for me to-morrow, about eleven. Give her her\r\nhead. So long, then!\"\r\n\r\nHe flicked the horse with his whip, and we dashed away through\r\nthe endless succession of sombre and deserted streets, which\r\nwidened gradually, until we were flying across a broad\r\nbalustraded bridge, with the murky river flowing sluggishly\r\nbeneath us. Beyond lay another dull wilderness of bricks and\r\nmortar, its silence broken only by the heavy, regular footfall of\r\nthe policeman, or the songs and shouts of some belated party of\r\nrevellers. A dull wrack was drifting slowly across the sky, and a\r\nstar or two twinkled dimly here and there through the rifts of\r\nthe clouds. Holmes drove in silence, with his head sunk upon his\r\nbreast, and the air of a man who is lost in thought, while I sat\r\nbeside him, curious to learn what this new quest might be which\r\nseemed to tax his powers so sorely, and yet afraid to break in\r\nupon the current of his thoughts. We had driven several miles,\r\nand were beginning to get to the fringe of the belt of suburban\r\nvillas, when he shook himself, shrugged his shoulders, and lit up\r\nhis pipe with the air of a man who has satisfied himself that he\r\nis acting for the best.\r\n\r\n\"You have a grand gift of silence, Watson,\" said he. \"It makes\r\nyou quite invaluable as a companion. 'Pon my word, it is a great\r\nthing for me to have someone to talk to, for my own thoughts are\r\nnot over-pleasant. I was wondering what I should say to this dear\r\nlittle woman to-night when she meets me at the door.\"\r\n\r\n\"You forget that I know nothing about it.\"\r\n\r\n\"I shall just have time to tell you the facts of the case before\r\nwe get to Lee. It seems absurdly simple, and yet, somehow I can\r\nget nothing to go upon. There's plenty of thread, no doubt, but I\r\ncan't get the end of it into my hand. Now, I'll state the case\r\nclearly and concisely to you, Watson, and maybe you can see a\r\nspark where all is dark to me.\"\r\n\r\n\"Proceed, then.\"\r\n\r\n\"Some years ago--to be definite, in May, 1884--there came to Lee\r\na gentleman, Neville St. Clair by name, who appeared to have\r\nplenty of money. He took a large villa, laid out the grounds very\r\nnicely, and lived generally in good style. By degrees he made\r\nfriends in the neighbourhood, and in 1887 he married the daughter\r\nof a local brewer, by whom he now has two children. He had no\r\noccupation, but was interested in several companies and went into\r\ntown as a rule in the morning, returning by the 5:14 from Cannon\r\nStreet every night. Mr. St. Clair is now thirty-seven years of\r\nage, is a man of temperate habits, a good husband, a very\r\naffectionate father, and a man who is popular with all who know\r\nhim. I may add that his whole debts at the present moment, as far\r\nas we have been able to ascertain, amount to 88 pounds 10s., while\r\nhe has 220 pounds standing to his credit in the Capital and\r\nCounties Bank. There is no reason, therefore, to think that money\r\ntroubles have been weighing upon his mind.\r\n\r\n\"Last Monday Mr. Neville St. Clair went into town rather earlier\r\nthan usual, remarking before he started that he had two important\r\ncommissions to perform, and that he would bring his little boy\r\nhome a box of bricks. Now, by the merest chance, his wife\r\nreceived a telegram upon this same Monday, very shortly after his\r\ndeparture, to the effect that a small parcel of considerable\r\nvalue which she had been expecting was waiting for her at the\r\noffices of the Aberdeen Shipping Company. Now, if you are well up\r\nin your London, you will know that the office of the company is\r\nin Fresno Street, which branches out of Upper Swandam Lane, where\r\nyou found me to-night. Mrs. St. Clair had her lunch, started for\r\nthe City, did some shopping, proceeded to the company's office,\r\ngot her packet, and found herself at exactly 4:35 walking through\r\nSwandam Lane on her way back to the station. Have you followed me\r\nso far?\"\r\n\r\n\"It is very clear.\"\r\n\r\n\"If you remember, Monday was an exceedingly hot day, and Mrs. St.\r\nClair walked slowly, glancing about in the hope of seeing a cab,\r\nas she did not like the neighbourhood in which she found herself.\r\nWhile she was walking in this way down Swandam Lane, she suddenly\r\nheard an ejaculation or cry, and was struck cold to see her\r\nhusband looking down at her and, as it seemed to her, beckoning\r\nto her from a second-floor window. The window was open, and she\r\ndistinctly saw his face, which she describes as being terribly\r\nagitated. He waved his hands frantically to her, and then\r\nvanished from the window so suddenly that it seemed to her that\r\nhe had been plucked back by some irresistible force from behind.\r\nOne singular point which struck her quick feminine eye was that\r\nalthough he wore some dark coat, such as he had started to town\r\nin, he had on neither collar nor necktie.\r\n\r\n\"Convinced that something was amiss with him, she rushed down the\r\nsteps--for the house was none other than the opium den in which\r\nyou found me to-night--and running through the front room she\r\nattempted to ascend the stairs which led to the first floor. At\r\nthe foot of the stairs, however, she met this Lascar scoundrel of\r\nwhom I have spoken, who thrust her back and, aided by a Dane, who\r\nacts as assistant there, pushed her out into the street. Filled\r\nwith the most maddening doubts and fears, she rushed down the\r\nlane and, by rare good-fortune, met in Fresno Street a number of\r\nconstables with an inspector, all on their way to their beat. The\r\ninspector and two men accompanied her back, and in spite of the\r\ncontinued resistance of the proprietor, they made their way to\r\nthe room in which Mr. St. Clair had last been seen. There was no\r\nsign of him there. In fact, in the whole of that floor there was\r\nno one to be found save a crippled wretch of hideous aspect, who,\r\nit seems, made his home there. Both he and the Lascar stoutly\r\nswore that no one else had been in the front room during the\r\nafternoon. So determined was their denial that the inspector was\r\nstaggered, and had almost come to believe that Mrs. St. Clair had\r\nbeen deluded when, with a cry, she sprang at a small deal box\r\nwhich lay upon the table and tore the lid from it. Out there fell\r\na cascade of children's bricks. It was the toy which he had\r\npromised to bring home.\r\n\r\n\"This discovery, and the evident confusion which the cripple\r\nshowed, made the inspector realise that the matter was serious.\r\nThe rooms were carefully examined, and results all pointed to an\r\nabominable crime. The front room was plainly furnished as a\r\nsitting-room and led into a small bedroom, which looked out upon\r\nthe back of one of the wharves. Between the wharf and the bedroom\r\nwindow is a narrow strip, which is dry at low tide but is covered\r\nat high tide with at least four and a half feet of water. The\r\nbedroom window was a broad one and opened from below. On\r\nexamination traces of blood were to be seen upon the windowsill,\r\nand several scattered drops were visible upon the wooden floor of\r\nthe bedroom. Thrust away behind a curtain in the front room were\r\nall the clothes of Mr. Neville St. Clair, with the exception of\r\nhis coat. His boots, his socks, his hat, and his watch--all were\r\nthere. There were no signs of violence upon any of these\r\ngarments, and there were no other traces of Mr. Neville St.\r\nClair. Out of the window he must apparently have gone for no\r\nother exit could be discovered, and the ominous bloodstains upon\r\nthe sill gave little promise that he could save himself by\r\nswimming, for the tide was at its very highest at the moment of\r\nthe tragedy.\r\n\r\n\"And now as to the villains who seemed to be immediately\r\nimplicated in the matter. The Lascar was known to be a man of the\r\nvilest antecedents, but as, by Mrs. St. Clair's story, he was\r\nknown to have been at the foot of the stair within a very few\r\nseconds of her husband's appearance at the window, he could\r\nhardly have been more than an accessory to the crime. His defence\r\nwas one of absolute ignorance, and he protested that he had no\r\nknowledge as to the doings of Hugh Boone, his lodger, and that he\r\ncould not account in any way for the presence of the missing\r\ngentleman's clothes.\r\n\r\n\"So much for the Lascar manager. Now for the sinister cripple who\r\nlives upon the second floor of the opium den, and who was\r\ncertainly the last human being whose eyes rested upon Neville St.\r\nClair. His name is Hugh Boone, and his hideous face is one which\r\nis familiar to every man who goes much to the City. He is a\r\nprofessional beggar, though in order to avoid the police\r\nregulations he pretends to a small trade in wax vestas. Some\r\nlittle distance down Threadneedle Street, upon the left-hand\r\nside, there is, as you may have remarked, a small angle in the\r\nwall. Here it is that this creature takes his daily seat,\r\ncross-legged with his tiny stock of matches on his lap, and as he\r\nis a piteous spectacle a small rain of charity descends into the\r\ngreasy leather cap which lies upon the pavement beside him. I\r\nhave watched the fellow more than once before ever I thought of\r\nmaking his professional acquaintance, and I have been surprised\r\nat the harvest which he has reaped in a short time. His\r\nappearance, you see, is so remarkable that no one can pass him\r\nwithout observing him. A shock of orange hair, a pale face\r\ndisfigured by a horrible scar, which, by its contraction, has\r\nturned up the outer edge of his upper lip, a bulldog chin, and a\r\npair of very penetrating dark eyes, which present a singular\r\ncontrast to the colour of his hair, all mark him out from amid\r\nthe common crowd of mendicants and so, too, does his wit, for he\r\nis ever ready with a reply to any piece of chaff which may be\r\nthrown at him by the passers-by. This is the man whom we now\r\nlearn to have been the lodger at the opium den, and to have been\r\nthe last man to see the gentleman of whom we are in quest.\"\r\n\r\n\"But a cripple!\" said I. \"What could he have done single-handed\r\nagainst a man in the prime of life?\"\r\n\r\n\"He is a cripple in the sense that he walks with a limp; but in\r\nother respects he appears to be a powerful and well-nurtured man.\r\nSurely your medical experience would tell you, Watson, that\r\nweakness in one limb is often compensated for by exceptional\r\nstrength in the others.\"\r\n\r\n\"Pray continue your narrative.\"\r\n\r\n\"Mrs. St. Clair had fainted at the sight of the blood upon the\r\nwindow, and she was escorted home in a cab by the police, as her\r\npresence could be of no help to them in their investigations.\r\nInspector Barton, who had charge of the case, made a very careful\r\nexamination of the premises, but without finding anything which\r\nthrew any light upon the matter. One mistake had been made in not\r\narresting Boone instantly, as he was allowed some few minutes\r\nduring which he might have communicated with his friend the\r\nLascar, but this fault was soon remedied, and he was seized and\r\nsearched, without anything being found which could incriminate\r\nhim. There were, it is true, some blood-stains upon his right\r\nshirt-sleeve, but he pointed to his ring-finger, which had been\r\ncut near the nail, and explained that the bleeding came from\r\nthere, adding that he had been to the window not long before, and\r\nthat the stains which had been observed there came doubtless from\r\nthe same source. He denied strenuously having ever seen Mr.\r\nNeville St. Clair and swore that the presence of the clothes in\r\nhis room was as much a mystery to him as to the police. As to\r\nMrs. St. Clair's assertion that she had actually seen her husband\r\nat the window, he declared that she must have been either mad or\r\ndreaming. He was removed, loudly protesting, to the\r\npolice-station, while the inspector remained upon the premises in\r\nthe hope that the ebbing tide might afford some fresh clue.\r\n\r\n\"And it did, though they hardly found upon the mud-bank what they\r\nhad feared to find. It was Neville St. Clair's coat, and not\r\nNeville St. Clair, which lay uncovered as the tide receded. And\r\nwhat do you think they found in the pockets?\"\r\n\r\n\"I cannot imagine.\"\r\n\r\n\"No, I don't think you would guess. Every pocket stuffed with\r\npennies and half-pennies--421 pennies and 270 half-pennies. It\r\nwas no wonder that it had not been swept away by the tide. But a\r\nhuman body is a different matter. There is a fierce eddy between\r\nthe wharf and the house. It seemed likely enough that the\r\nweighted coat had remained when the stripped body had been sucked\r\naway into the river.\"\r\n\r\n\"But I understand that all the other clothes were found in the\r\nroom. Would the body be dressed in a coat alone?\"\r\n\r\n\"No, sir, but the facts might be met speciously enough. Suppose\r\nthat this man Boone had thrust Neville St. Clair through the\r\nwindow, there is no human eye which could have seen the deed.\r\nWhat would he do then? It would of course instantly strike him\r\nthat he must get rid of the tell-tale garments. He would seize\r\nthe coat, then, and be in the act of throwing it out, when it\r\nwould occur to him that it would swim and not sink. He has little\r\ntime, for he has heard the scuffle downstairs when the wife tried\r\nto force her way up, and perhaps he has already heard from his\r\nLascar confederate that the police are hurrying up the street.\r\nThere is not an instant to be lost. He rushes to some secret\r\nhoard, where he has accumulated the fruits of his beggary, and he\r\nstuffs all the coins upon which he can lay his hands into the\r\npockets to make sure of the coat's sinking. He throws it out, and\r\nwould have done the same with the other garments had not he heard\r\nthe rush of steps below, and only just had time to close the\r\nwindow when the police appeared.\"\r\n\r\n\"It certainly sounds feasible.\"\r\n\r\n\"Well, we will take it as a working hypothesis for want of a\r\nbetter. Boone, as I have told you, was arrested and taken to the\r\nstation, but it could not be shown that there had ever before\r\nbeen anything against him. He had for years been known as a\r\nprofessional beggar, but his life appeared to have been a very\r\nquiet and innocent one. There the matter stands at present, and\r\nthe questions which have to be solved--what Neville St. Clair was\r\ndoing in the opium den, what happened to him when there, where is\r\nhe now, and what Hugh Boone had to do with his disappearance--are\r\nall as far from a solution as ever. I confess that I cannot\r\nrecall any case within my experience which looked at the first\r\nglance so simple and yet which presented such difficulties.\"\r\n\r\nWhile Sherlock Holmes had been detailing this singular series of\r\nevents, we had been whirling through the outskirts of the great\r\ntown until the last straggling houses had been left behind, and\r\nwe rattled along with a country hedge upon either side of us.\r\nJust as he finished, however, we drove through two scattered\r\nvillages, where a few lights still glimmered in the windows.\r\n\r\n\"We are on the outskirts of Lee,\" said my companion. \"We have\r\ntouched on three English counties in our short drive, starting in\r\nMiddlesex, passing over an angle of Surrey, and ending in Kent.\r\nSee that light among the trees? That is The Cedars, and beside\r\nthat lamp sits a woman whose anxious ears have already, I have\r\nlittle doubt, caught the clink of our horse's feet.\"\r\n\r\n\"But why are you not conducting the case from Baker Street?\" I\r\nasked.\r\n\r\n\"Because there are many inquiries which must be made out here.\r\nMrs. St. Clair has most kindly put two rooms at my disposal, and\r\nyou may rest assured that she will have nothing but a welcome for\r\nmy friend and colleague. I hate to meet her, Watson, when I have\r\nno news of her husband. Here we are. Whoa, there, whoa!\"\r\n\r\nWe had pulled up in front of a large villa which stood within its\r\nown grounds. A stable-boy had run out to the horse's head, and\r\nspringing down, I followed Holmes up the small, winding\r\ngravel-drive which led to the house. As we approached, the door\r\nflew open, and a little blonde woman stood in the opening, clad\r\nin some sort of light mousseline de soie, with a touch of fluffy\r\npink chiffon at her neck and wrists. She stood with her figure\r\noutlined against the flood of light, one hand upon the door, one\r\nhalf-raised in her eagerness, her body slightly bent, her head\r\nand face protruded, with eager eyes and parted lips, a standing\r\nquestion.\r\n\r\n\"Well?\" she cried, \"well?\" And then, seeing that there were two\r\nof us, she gave a cry of hope which sank into a groan as she saw\r\nthat my companion shook his head and shrugged his shoulders.\r\n\r\n\"No good news?\"\r\n\r\n\"None.\"\r\n\r\n\"No bad?\"\r\n\r\n\"No.\"\r\n\r\n\"Thank God for that. But come in. You must be weary, for you have\r\nhad a long day.\"\r\n\r\n\"This is my friend, Dr. Watson. He has been of most vital use to\r\nme in several of my cases, and a lucky chance has made it\r\npossible for me to bring him out and associate him with this\r\ninvestigation.\"\r\n\r\n\"I am delighted to see you,\" said she, pressing my hand warmly.\r\n\"You will, I am sure, forgive anything that may be wanting in our\r\narrangements, when you consider the blow which has come so\r\nsuddenly upon us.\"\r\n\r\n\"My dear madam,\" said I, \"I am an old campaigner, and if I were\r\nnot I can very well see that no apology is needed. If I can be of\r\nany assistance, either to you or to my friend here, I shall be\r\nindeed happy.\"\r\n\r\n\"Now, Mr. Sherlock Holmes,\" said the lady as we entered a\r\nwell-lit dining-room, upon the table of which a cold supper had\r\nbeen laid out, \"I should very much like to ask you one or two\r\nplain questions, to which I beg that you will give a plain\r\nanswer.\"\r\n\r\n\"Certainly, madam.\"\r\n\r\n\"Do not trouble about my feelings. I am not hysterical, nor given\r\nto fainting. I simply wish to hear your real, real opinion.\"\r\n\r\n\"Upon what point?\"\r\n\r\n\"In your heart of hearts, do you think that Neville is alive?\"\r\n\r\nSherlock Holmes seemed to be embarrassed by the question.\r\n\"Frankly, now!\" she repeated, standing upon the rug and looking\r\nkeenly down at him as he leaned back in a basket-chair.\r\n\r\n\"Frankly, then, madam, I do not.\"\r\n\r\n\"You think that he is dead?\"\r\n\r\n\"I do.\"\r\n\r\n\"Murdered?\"\r\n\r\n\"I don't say that. Perhaps.\"\r\n\r\n\"And on what day did he meet his death?\"\r\n\r\n\"On Monday.\"\r\n\r\n\"Then perhaps, Mr. Holmes, you will be good enough to explain how\r\nit is that I have received a letter from him to-day.\"\r\n\r\nSherlock Holmes sprang out of his chair as if he had been\r\ngalvanised.\r\n\r\n\"What!\" he roared.\r\n\r\n\"Yes, to-day.\" She stood smiling, holding up a little slip of\r\npaper in the air.\r\n\r\n\"May I see it?\"\r\n\r\n\"Certainly.\"\r\n\r\nHe snatched it from her in his eagerness, and smoothing it out\r\nupon the table he drew over the lamp and examined it intently. I\r\nhad left my chair and was gazing at it over his shoulder. The\r\nenvelope was a very coarse one and was stamped with the Gravesend\r\npostmark and with the date of that very day, or rather of the day\r\nbefore, for it was considerably after midnight.\r\n\r\n\"Coarse writing,\" murmured Holmes. \"Surely this is not your\r\nhusband's writing, madam.\"\r\n\r\n\"No, but the enclosure is.\"\r\n\r\n\"I perceive also that whoever addressed the envelope had to go\r\nand inquire as to the address.\"\r\n\r\n\"How can you tell that?\"\r\n\r\n\"The name, you see, is in perfectly black ink, which has dried\r\nitself. The rest is of the greyish colour, which shows that\r\nblotting-paper has been used. If it had been written straight\r\noff, and then blotted, none would be of a deep black shade. This\r\nman has written the name, and there has then been a pause before\r\nhe wrote the address, which can only mean that he was not\r\nfamiliar with it. It is, of course, a trifle, but there is\r\nnothing so important as trifles. Let us now see the letter. Ha!\r\nthere has been an enclosure here!\"\r\n\r\n\"Yes, there was a ring. His signet-ring.\"\r\n\r\n\"And you are sure that this is your husband's hand?\"\r\n\r\n\"One of his hands.\"\r\n\r\n\"One?\"\r\n\r\n\"His hand when he wrote hurriedly. It is very unlike his usual\r\nwriting, and yet I know it well.\"\r\n\r\n\"'Dearest do not be frightened. All will come well. There is a\r\nhuge error which it may take some little time to rectify.\r\nWait in patience.--NEVILLE.' Written in pencil upon the fly-leaf\r\nof a book, octavo size, no water-mark. Hum! Posted to-day in\r\nGravesend by a man with a dirty thumb. Ha! And the flap has been\r\ngummed, if I am not very much in error, by a person who had been\r\nchewing tobacco. And you have no doubt that it is your husband's\r\nhand, madam?\"\r\n\r\n\"None. Neville wrote those words.\"\r\n\r\n\"And they were posted to-day at Gravesend. Well, Mrs. St. Clair,\r\nthe clouds lighten, though I should not venture to say that the\r\ndanger is over.\"\r\n\r\n\"But he must be alive, Mr. Holmes.\"\r\n\r\n\"Unless this is a clever forgery to put us on the wrong scent.\r\nThe ring, after all, proves nothing. It may have been taken from\r\nhim.\"\r\n\r\n\"No, no; it is, it is his very own writing!\"\r\n\r\n\"Very well. It may, however, have been written on Monday and only\r\nposted to-day.\"\r\n\r\n\"That is possible.\"\r\n\r\n\"If so, much may have happened between.\"\r\n\r\n\"Oh, you must not discourage me, Mr. Holmes. I know that all is\r\nwell with him. There is so keen a sympathy between us that I\r\nshould know if evil came upon him. On the very day that I saw him\r\nlast he cut himself in the bedroom, and yet I in the dining-room\r\nrushed upstairs instantly with the utmost certainty that\r\nsomething had happened. Do you think that I would respond to such\r\na trifle and yet be ignorant of his death?\"\r\n\r\n\"I have seen too much not to know that the impression of a woman\r\nmay be more valuable than the conclusion of an analytical\r\nreasoner. And in this letter you certainly have a very strong\r\npiece of evidence to corroborate your view. But if your husband\r\nis alive and able to write letters, why should he remain away\r\nfrom you?\"\r\n\r\n\"I cannot imagine. It is unthinkable.\"\r\n\r\n\"And on Monday he made no remarks before leaving you?\"\r\n\r\n\"No.\"\r\n\r\n\"And you were surprised to see him in Swandam Lane?\"\r\n\r\n\"Very much so.\"\r\n\r\n\"Was the window open?\"\r\n\r\n\"Yes.\"\r\n\r\n\"Then he might have called to you?\"\r\n\r\n\"He might.\"\r\n\r\n\"He only, as I understand, gave an inarticulate cry?\"\r\n\r\n\"Yes.\"\r\n\r\n\"A call for help, you thought?\"\r\n\r\n\"Yes. He waved his hands.\"\r\n\r\n\"But it might have been a cry of surprise. Astonishment at the\r\nunexpected sight of you might cause him to throw up his hands?\"\r\n\r\n\"It is possible.\"\r\n\r\n\"And you thought he was pulled back?\"\r\n\r\n\"He disappeared so suddenly.\"\r\n\r\n\"He might have leaped back. You did not see anyone else in the\r\nroom?\"\r\n\r\n\"No, but this horrible man confessed to having been there, and\r\nthe Lascar was at the foot of the stairs.\"\r\n\r\n\"Quite so. Your husband, as far as you could see, had his\r\nordinary clothes on?\"\r\n\r\n\"But without his collar or tie. I distinctly saw his bare\r\nthroat.\"\r\n\r\n\"Had he ever spoken of Swandam Lane?\"\r\n\r\n\"Never.\"\r\n\r\n\"Had he ever showed any signs of having taken opium?\"\r\n\r\n\"Never.\"\r\n\r\n\"Thank you, Mrs. St. Clair. Those are the principal points about\r\nwhich I wished to be absolutely clear. We shall now have a little\r\nsupper and then retire, for we may have a very busy day\r\nto-morrow.\"\r\n\r\nA large and comfortable double-bedded room had been placed at our\r\ndisposal, and I was quickly between the sheets, for I was weary\r\nafter my night of adventure. Sherlock Holmes was a man, however,\r\nwho, when he had an unsolved problem upon his mind, would go for\r\ndays, and even for a week, without rest, turning it over,\r\nrearranging his facts, looking at it from every point of view\r\nuntil he had either fathomed it or convinced himself that his\r\ndata were insufficient. It was soon evident to me that he was now\r\npreparing for an all-night sitting. He took off his coat and\r\nwaistcoat, put on a large blue dressing-gown, and then wandered\r\nabout the room collecting pillows from his bed and cushions from\r\nthe sofa and armchairs. With these he constructed a sort of\r\nEastern divan, upon which he perched himself cross-legged, with\r\nan ounce of shag tobacco and a box of matches laid out in front\r\nof him. In the dim light of the lamp I saw him sitting there, an\r\nold briar pipe between his lips, his eyes fixed vacantly upon the\r\ncorner of the ceiling, the blue smoke curling up from him,\r\nsilent, motionless, with the light shining upon his strong-set\r\naquiline features. So he sat as I dropped off to sleep, and so he\r\nsat when a sudden ejaculation caused me to wake up, and I found\r\nthe summer sun shining into the apartment. The pipe was still\r\nbetween his lips, the smoke still curled upward, and the room was\r\nfull of a dense tobacco haze, but nothing remained of the heap of\r\nshag which I had seen upon the previous night.\r\n\r\n\"Awake, Watson?\" he asked.\r\n\r\n\"Yes.\"\r\n\r\n\"Game for a morning drive?\"\r\n\r\n\"Certainly.\"\r\n\r\n\"Then dress. No one is stirring yet, but I know where the\r\nstable-boy sleeps, and we shall soon have the trap out.\" He\r\nchuckled to himself as he spoke, his eyes twinkled, and he seemed\r\na different man to the sombre thinker of the previous night.\r\n\r\nAs I dressed I glanced at my watch. It was no wonder that no one\r\nwas stirring. It was twenty-five minutes past four. I had hardly\r\nfinished when Holmes returned with the news that the boy was\r\nputting in the horse.\r\n\r\n\"I want to test a little theory of mine,\" said he, pulling on his\r\nboots. \"I think, Watson, that you are now standing in the\r\npresence of one of the most absolute fools in Europe. I deserve\r\nto be kicked from here to Charing Cross. But I think I have the\r\nkey of the affair now.\"\r\n\r\n\"And where is it?\" I asked, smiling.\r\n\r\n\"In the bathroom,\" he answered. \"Oh, yes, I am not joking,\" he\r\ncontinued, seeing my look of incredulity. \"I have just been\r\nthere, and I have taken it out, and I have got it in this\r\nGladstone bag. Come on, my boy, and we shall see whether it will\r\nnot fit the lock.\"\r\n\r\nWe made our way downstairs as quietly as possible, and out into\r\nthe bright morning sunshine. In the road stood our horse and\r\ntrap, with the half-clad stable-boy waiting at the head. We both\r\nsprang in, and away we dashed down the London Road. A few country\r\ncarts were stirring, bearing in vegetables to the metropolis, but\r\nthe lines of villas on either side were as silent and lifeless as\r\nsome city in a dream.\r\n\r\n\"It has been in some points a singular case,\" said Holmes,\r\nflicking the horse on into a gallop. \"I confess that I have been\r\nas blind as a mole, but it is better to learn wisdom late than\r\nnever to learn it at all.\"\r\n\r\nIn town the earliest risers were just beginning to look sleepily\r\nfrom their windows as we drove through the streets of the Surrey\r\nside. Passing down the Waterloo Bridge Road we crossed over the\r\nriver, and dashing up Wellington Street wheeled sharply to the\r\nright and found ourselves in Bow Street. Sherlock Holmes was well\r\nknown to the force, and the two constables at the door saluted\r\nhim. One of them held the horse's head while the other led us in.\r\n\r\n\"Who is on duty?\" asked Holmes.\r\n\r\n\"Inspector Bradstreet, sir.\"\r\n\r\n\"Ah, Bradstreet, how are you?\" A tall, stout official had come\r\ndown the stone-flagged passage, in a peaked cap and frogged\r\njacket. \"I wish to have a quiet word with you, Bradstreet.\"\r\n\"Certainly, Mr. Holmes. Step into my room here.\" It was a small,\r\noffice-like room, with a huge ledger upon the table, and a\r\ntelephone projecting from the wall. The inspector sat down at his\r\ndesk.\r\n\r\n\"What can I do for you, Mr. Holmes?\"\r\n\r\n\"I called about that beggarman, Boone--the one who was charged\r\nwith being concerned in the disappearance of Mr. Neville St.\r\nClair, of Lee.\"\r\n\r\n\"Yes. He was brought up and remanded for further inquiries.\"\r\n\r\n\"So I heard. You have him here?\"\r\n\r\n\"In the cells.\"\r\n\r\n\"Is he quiet?\"\r\n\r\n\"Oh, he gives no trouble. But he is a dirty scoundrel.\"\r\n\r\n\"Dirty?\"\r\n\r\n\"Yes, it is all we can do to make him wash his hands, and his\r\nface is as black as a tinker's. Well, when once his case has been\r\nsettled, he will have a regular prison bath; and I think, if you\r\nsaw him, you would agree with me that he needed it.\"\r\n\r\n\"I should like to see him very much.\"\r\n\r\n\"Would you? That is easily done. Come this way. You can leave\r\nyour bag.\"\r\n\r\n\"No, I think that I'll take it.\"\r\n\r\n\"Very good. Come this way, if you please.\" He led us down a\r\npassage, opened a barred door, passed down a winding stair, and\r\nbrought us to a whitewashed corridor with a line of doors on each\r\nside.\r\n\r\n\"The third on the right is his,\" said the inspector. \"Here it\r\nis!\" He quietly shot back a panel in the upper part of the door\r\nand glanced through.\r\n\r\n\"He is asleep,\" said he. \"You can see him very well.\"\r\n\r\nWe both put our eyes to the grating. The prisoner lay with his\r\nface towards us, in a very deep sleep, breathing slowly and\r\nheavily. He was a middle-sized man, coarsely clad as became his\r\ncalling, with a coloured shirt protruding through the rent in his\r\ntattered coat. He was, as the inspector had said, extremely\r\ndirty, but the grime which covered his face could not conceal its\r\nrepulsive ugliness. A broad wheal from an old scar ran right\r\nacross it from eye to chin, and by its contraction had turned up\r\none side of the upper lip, so that three teeth were exposed in a\r\nperpetual snarl. A shock of very bright red hair grew low over\r\nhis eyes and forehead.\r\n\r\n\"He's a beauty, isn't he?\" said the inspector.\r\n\r\n\"He certainly needs a wash,\" remarked Holmes. \"I had an idea that\r\nhe might, and I took the liberty of bringing the tools with me.\"\r\nHe opened the Gladstone bag as he spoke, and took out, to my\r\nastonishment, a very large bath-sponge.\r\n\r\n\"He! he! You are a funny one,\" chuckled the inspector.\r\n\r\n\"Now, if you will have the great goodness to open that door very\r\nquietly, we will soon make him cut a much more respectable\r\nfigure.\"\r\n\r\n\"Well, I don't know why not,\" said the inspector. \"He doesn't\r\nlook a credit to the Bow Street cells, does he?\" He slipped his\r\nkey into the lock, and we all very quietly entered the cell. The\r\nsleeper half turned, and then settled down once more into a deep\r\nslumber. Holmes stooped to the water-jug, moistened his sponge,\r\nand then rubbed it twice vigorously across and down the\r\nprisoner's face.\r\n\r\n\"Let me introduce you,\" he shouted, \"to Mr. Neville St. Clair, of\r\nLee, in the county of Kent.\"\r\n\r\nNever in my life have I seen such a sight. The man's face peeled\r\noff under the sponge like the bark from a tree. Gone was the\r\ncoarse brown tint! Gone, too, was the horrid scar which had\r\nseamed it across, and the twisted lip which had given the\r\nrepulsive sneer to the face! A twitch brought away the tangled\r\nred hair, and there, sitting up in his bed, was a pale,\r\nsad-faced, refined-looking man, black-haired and smooth-skinned,\r\nrubbing his eyes and staring about him with sleepy bewilderment.\r\nThen suddenly realising the exposure, he broke into a scream and\r\nthrew himself down with his face to the pillow.\r\n\r\n\"Great heavens!\" cried the inspector, \"it is, indeed, the missing\r\nman. I know him from the photograph.\"\r\n\r\nThe prisoner turned with the reckless air of a man who abandons\r\nhimself to his destiny. \"Be it so,\" said he. \"And pray what am I\r\ncharged with?\"\r\n\r\n\"With making away with Mr. Neville St.-- Oh, come, you can't be\r\ncharged with that unless they make a case of attempted suicide of\r\nit,\" said the inspector with a grin. \"Well, I have been\r\ntwenty-seven years in the force, but this really takes the cake.\"\r\n\r\n\"If I am Mr. Neville St. Clair, then it is obvious that no crime\r\nhas been committed, and that, therefore, I am illegally\r\ndetained.\"\r\n\r\n\"No crime, but a very great error has been committed,\" said\r\nHolmes. \"You would have done better to have trusted your wife.\"\r\n\r\n\"It was not the wife; it was the children,\" groaned the prisoner.\r\n\"God help me, I would not have them ashamed of their father. My\r\nGod! What an exposure! What can I do?\"\r\n\r\nSherlock Holmes sat down beside him on the couch and patted him\r\nkindly on the shoulder.\r\n\r\n\"If you leave it to a court of law to clear the matter up,\" said\r\nhe, \"of course you can hardly avoid publicity. On the other hand,\r\nif you convince the police authorities that there is no possible\r\ncase against you, I do not know that there is any reason that the\r\ndetails should find their way into the papers. Inspector\r\nBradstreet would, I am sure, make notes upon anything which you\r\nmight tell us and submit it to the proper authorities. The case\r\nwould then never go into court at all.\"\r\n\r\n\"God bless you!\" cried the prisoner passionately. \"I would have\r\nendured imprisonment, ay, even execution, rather than have left\r\nmy miserable secret as a family blot to my children.\r\n\r\n\"You are the first who have ever heard my story. My father was a\r\nschoolmaster in Chesterfield, where I received an excellent\r\neducation. I travelled in my youth, took to the stage, and\r\nfinally became a reporter on an evening paper in London. One day\r\nmy editor wished to have a series of articles upon begging in the\r\nmetropolis, and I volunteered to supply them. There was the point\r\nfrom which all my adventures started. It was only by trying\r\nbegging as an amateur that I could get the facts upon which to\r\nbase my articles. When an actor I had, of course, learned all the\r\nsecrets of making up, and had been famous in the green-room for\r\nmy skill. I took advantage now of my attainments. I painted my\r\nface, and to make myself as pitiable as possible I made a good\r\nscar and fixed one side of my lip in a twist by the aid of a\r\nsmall slip of flesh-coloured plaster. Then with a red head of\r\nhair, and an appropriate dress, I took my station in the business\r\npart of the city, ostensibly as a match-seller but really as a\r\nbeggar. For seven hours I plied my trade, and when I returned\r\nhome in the evening I found to my surprise that I had received no\r\nless than 26s. 4d.\r\n\r\n\"I wrote my articles and thought little more of the matter until,\r\nsome time later, I backed a bill for a friend and had a writ\r\nserved upon me for 25 pounds. I was at my wit's end where to get\r\nthe money, but a sudden idea came to me. I begged a fortnight's\r\ngrace from the creditor, asked for a holiday from my employers,\r\nand spent the time in begging in the City under my disguise. In\r\nten days I had the money and had paid the debt.\r\n\r\n\"Well, you can imagine how hard it was to settle down to arduous\r\nwork at 2 pounds a week when I knew that I could earn as much in\r\na day by smearing my face with a little paint, laying my cap on\r\nthe ground, and sitting still. It was a long fight between my\r\npride and the money, but the dollars won at last, and I threw up\r\nreporting and sat day after day in the corner which I had first\r\nchosen, inspiring pity by my ghastly face and filling my pockets\r\nwith coppers. Only one man knew my secret. He was the keeper of a\r\nlow den in which I used to lodge in Swandam Lane, where I could\r\nevery morning emerge as a squalid beggar and in the evenings\r\ntransform myself into a well-dressed man about town. This fellow,\r\na Lascar, was well paid by me for his rooms, so that I knew that\r\nmy secret was safe in his possession.\r\n\r\n\"Well, very soon I found that I was saving considerable sums of\r\nmoney. I do not mean that any beggar in the streets of London\r\ncould earn 700 pounds a year--which is less than my average\r\ntakings--but I had exceptional advantages in my power of making\r\nup, and also in a facility of repartee, which improved by\r\npractice and made me quite a recognised character in the City.\r\nAll day a stream of pennies, varied by silver, poured in upon me,\r\nand it was a very bad day in which I failed to take 2 pounds.\r\n\r\n\"As I grew richer I grew more ambitious, took a house in the\r\ncountry, and eventually married, without anyone having a\r\nsuspicion as to my real occupation. My dear wife knew that I had\r\nbusiness in the City. She little knew what.\r\n\r\n\"Last Monday I had finished for the day and was dressing in my\r\nroom above the opium den when I looked out of my window and saw,\r\nto my horror and astonishment, that my wife was standing in the\r\nstreet, with her eyes fixed full upon me. I gave a cry of\r\nsurprise, threw up my arms to cover my face, and, rushing to my\r\nconfidant, the Lascar, entreated him to prevent anyone from\r\ncoming up to me. I heard her voice downstairs, but I knew that\r\nshe could not ascend. Swiftly I threw off my clothes, pulled on\r\nthose of a beggar, and put on my pigments and wig. Even a wife's\r\neyes could not pierce so complete a disguise. But then it\r\noccurred to me that there might be a search in the room, and that\r\nthe clothes might betray me. I threw open the window, reopening\r\nby my violence a small cut which I had inflicted upon myself in\r\nthe bedroom that morning. Then I seized my coat, which was\r\nweighted by the coppers which I had just transferred to it from\r\nthe leather bag in which I carried my takings. I hurled it out of\r\nthe window, and it disappeared into the Thames. The other clothes\r\nwould have followed, but at that moment there was a rush of\r\nconstables up the stair, and a few minutes after I found, rather,\r\nI confess, to my relief, that instead of being identified as Mr.\r\nNeville St. Clair, I was arrested as his murderer.\r\n\r\n\"I do not know that there is anything else for me to explain. I\r\nwas determined to preserve my disguise as long as possible, and\r\nhence my preference for a dirty face. Knowing that my wife would\r\nbe terribly anxious, I slipped off my ring and confided it to the\r\nLascar at a moment when no constable was watching me, together\r\nwith a hurried scrawl, telling her that she had no cause to\r\nfear.\"\r\n\r\n\"That note only reached her yesterday,\" said Holmes.\r\n\r\n\"Good God! What a week she must have spent!\"\r\n\r\n\"The police have watched this Lascar,\" said Inspector Bradstreet,\r\n\"and I can quite understand that he might find it difficult to\r\npost a letter unobserved. Probably he handed it to some sailor\r\ncustomer of his, who forgot all about it for some days.\"\r\n\r\n\"That was it,\" said Holmes, nodding approvingly; \"I have no doubt\r\nof it. But have you never been prosecuted for begging?\"\r\n\r\n\"Many times; but what was a fine to me?\"\r\n\r\n\"It must stop here, however,\" said Bradstreet. \"If the police are\r\nto hush this thing up, there must be no more of Hugh Boone.\"\r\n\r\n\"I have sworn it by the most solemn oaths which a man can take.\"\r\n\r\n\"In that case I think that it is probable that no further steps\r\nmay be taken. But if you are found again, then all must come out.\r\nI am sure, Mr. Holmes, that we are very much indebted to you for\r\nhaving cleared the matter up. I wish I knew how you reach your\r\nresults.\"\r\n\r\n\"I reached this one,\" said my friend, \"by sitting upon five\r\npillows and consuming an ounce of shag. I think, Watson, that if\r\nwe drive to Baker Street we shall just be in time for breakfast.\"\r\n\r\n\r\n\r\nVII. THE ADVENTURE OF THE BLUE CARBUNCLE\r\n\r\nI had called upon my friend Sherlock Holmes upon the second\r\nmorning after Christmas, with the intention of wishing him the\r\ncompliments of the season. He was lounging upon the sofa in a\r\npurple dressing-gown, a pipe-rack within his reach upon the\r\nright, and a pile of crumpled morning papers, evidently newly\r\nstudied, near at hand. Beside the couch was a wooden chair, and\r\non the angle of the back hung a very seedy and disreputable\r\nhard-felt hat, much the worse for wear, and cracked in several\r\nplaces. A lens and a forceps lying upon the seat of the chair\r\nsuggested that the hat had been suspended in this manner for the\r\npurpose of examination.\r\n\r\n\"You are engaged,\" said I; \"perhaps I interrupt you.\"\r\n\r\n\"Not at all. I am glad to have a friend with whom I can discuss\r\nmy results. The matter is a perfectly trivial one\"--he jerked his\r\nthumb in the direction of the old hat--\"but there are points in\r\nconnection with it which are not entirely devoid of interest and\r\neven of instruction.\"\r\n\r\nI seated myself in his armchair and warmed my hands before his\r\ncrackling fire, for a sharp frost had set in, and the windows\r\nwere thick with the ice crystals. \"I suppose,\" I remarked, \"that,\r\nhomely as it looks, this thing has some deadly story linked on to\r\nit--that it is the clue which will guide you in the solution of\r\nsome mystery and the punishment of some crime.\"\r\n\r\n\"No, no. No crime,\" said Sherlock Holmes, laughing. \"Only one of\r\nthose whimsical little incidents which will happen when you have\r\nfour million human beings all jostling each other within the\r\nspace of a few square miles. Amid the action and reaction of so\r\ndense a swarm of humanity, every possible combination of events\r\nmay be expected to take place, and many a little problem will be\r\npresented which may be striking and bizarre without being\r\ncriminal. We have already had experience of such.\"\r\n\r\n\"So much so,\" I remarked, \"that of the last six cases which I\r\nhave added to my notes, three have been entirely free of any\r\nlegal crime.\"\r\n\r\n\"Precisely. You allude to my attempt to recover the Irene Adler\r\npapers, to the singular case of Miss Mary Sutherland, and to the\r\nadventure of the man with the twisted lip. Well, I have no doubt\r\nthat this small matter will fall into the same innocent category.\r\nYou know Peterson, the commissionaire?\"\r\n\r\n\"Yes.\"\r\n\r\n\"It is to him that this trophy belongs.\"\r\n\r\n\"It is his hat.\"\r\n\r\n\"No, no, he found it. Its owner is unknown. I beg that you will\r\nlook upon it not as a battered billycock but as an intellectual\r\nproblem. And, first, as to how it came here. It arrived upon\r\nChristmas morning, in company with a good fat goose, which is, I\r\nhave no doubt, roasting at this moment in front of Peterson's\r\nfire. The facts are these: about four o'clock on Christmas\r\nmorning, Peterson, who, as you know, is a very honest fellow, was\r\nreturning from some small jollification and was making his way\r\nhomeward down Tottenham Court Road. In front of him he saw, in\r\nthe gaslight, a tallish man, walking with a slight stagger, and\r\ncarrying a white goose slung over his shoulder. As he reached the\r\ncorner of Goodge Street, a row broke out between this stranger\r\nand a little knot of roughs. One of the latter knocked off the\r\nman's hat, on which he raised his stick to defend himself and,\r\nswinging it over his head, smashed the shop window behind him.\r\nPeterson had rushed forward to protect the stranger from his\r\nassailants; but the man, shocked at having broken the window, and\r\nseeing an official-looking person in uniform rushing towards him,\r\ndropped his goose, took to his heels, and vanished amid the\r\nlabyrinth of small streets which lie at the back of Tottenham\r\nCourt Road. The roughs had also fled at the appearance of\r\nPeterson, so that he was left in possession of the field of\r\nbattle, and also of the spoils of victory in the shape of this\r\nbattered hat and a most unimpeachable Christmas goose.\"\r\n\r\n\"Which surely he restored to their owner?\"\r\n\r\n\"My dear fellow, there lies the problem. It is true that 'For\r\nMrs. Henry Baker' was printed upon a small card which was tied to\r\nthe bird's left leg, and it is also true that the initials 'H.\r\nB.' are legible upon the lining of this hat, but as there are\r\nsome thousands of Bakers, and some hundreds of Henry Bakers in\r\nthis city of ours, it is not easy to restore lost property to any\r\none of them.\"\r\n\r\n\"What, then, did Peterson do?\"\r\n\r\n\"He brought round both hat and goose to me on Christmas morning,\r\nknowing that even the smallest problems are of interest to me.\r\nThe goose we retained until this morning, when there were signs\r\nthat, in spite of the slight frost, it would be well that it\r\nshould be eaten without unnecessary delay. Its finder has carried\r\nit off, therefore, to fulfil the ultimate destiny of a goose,\r\nwhile I continue to retain the hat of the unknown gentleman who\r\nlost his Christmas dinner.\"\r\n\r\n\"Did he not advertise?\"\r\n\r\n\"No.\"\r\n\r\n\"Then, what clue could you have as to his identity?\"\r\n\r\n\"Only as much as we can deduce.\"\r\n\r\n\"From his hat?\"\r\n\r\n\"Precisely.\"\r\n\r\n\"But you are joking. What can you gather from this old battered\r\nfelt?\"\r\n\r\n\"Here is my lens. You know my methods. What can you gather\r\nyourself as to the individuality of the man who has worn this\r\narticle?\"\r\n\r\nI took the tattered object in my hands and turned it over rather\r\nruefully. It was a very ordinary black hat of the usual round\r\nshape, hard and much the worse for wear. The lining had been of\r\nred silk, but was a good deal discoloured. There was no maker's\r\nname; but, as Holmes had remarked, the initials \"H. B.\" were\r\nscrawled upon one side. It was pierced in the brim for a\r\nhat-securer, but the elastic was missing. For the rest, it was\r\ncracked, exceedingly dusty, and spotted in several places,\r\nalthough there seemed to have been some attempt to hide the\r\ndiscoloured patches by smearing them with ink.\r\n\r\n\"I can see nothing,\" said I, handing it back to my friend.\r\n\r\n\"On the contrary, Watson, you can see everything. You fail,\r\nhowever, to reason from what you see. You are too timid in\r\ndrawing your inferences.\"\r\n\r\n\"Then, pray tell me what it is that you can infer from this hat?\"\r\n\r\nHe picked it up and gazed at it in the peculiar introspective\r\nfashion which was characteristic of him. \"It is perhaps less\r\nsuggestive than it might have been,\" he remarked, \"and yet there\r\nare a few inferences which are very distinct, and a few others\r\nwhich represent at least a strong balance of probability. That\r\nthe man was highly intellectual is of course obvious upon the\r\nface of it, and also that he was fairly well-to-do within the\r\nlast three years, although he has now fallen upon evil days. He\r\nhad foresight, but has less now than formerly, pointing to a\r\nmoral retrogression, which, when taken with the decline of his\r\nfortunes, seems to indicate some evil influence, probably drink,\r\nat work upon him. This may account also for the obvious fact that\r\nhis wife has ceased to love him.\"\r\n\r\n\"My dear Holmes!\"\r\n\r\n\"He has, however, retained some degree of self-respect,\" he\r\ncontinued, disregarding my remonstrance. \"He is a man who leads a\r\nsedentary life, goes out little, is out of training entirely, is\r\nmiddle-aged, has grizzled hair which he has had cut within the\r\nlast few days, and which he anoints with lime-cream. These are\r\nthe more patent facts which are to be deduced from his hat. Also,\r\nby the way, that it is extremely improbable that he has gas laid\r\non in his house.\"\r\n\r\n\"You are certainly joking, Holmes.\"\r\n\r\n\"Not in the least. Is it possible that even now, when I give you\r\nthese results, you are unable to see how they are attained?\"\r\n\r\n\"I have no doubt that I am very stupid, but I must confess that I\r\nam unable to follow you. For example, how did you deduce that\r\nthis man was intellectual?\"\r\n\r\nFor answer Holmes clapped the hat upon his head. It came right\r\nover the forehead and settled upon the bridge of his nose. \"It is\r\na question of cubic capacity,\" said he; \"a man with so large a\r\nbrain must have something in it.\"\r\n\r\n\"The decline of his fortunes, then?\"\r\n\r\n\"This hat is three years old. These flat brims curled at the edge\r\ncame in then. It is a hat of the very best quality. Look at the\r\nband of ribbed silk and the excellent lining. If this man could\r\nafford to buy so expensive a hat three years ago, and has had no\r\nhat since, then he has assuredly gone down in the world.\"\r\n\r\n\"Well, that is clear enough, certainly. But how about the\r\nforesight and the moral retrogression?\"\r\n\r\nSherlock Holmes laughed. \"Here is the foresight,\" said he putting\r\nhis finger upon the little disc and loop of the hat-securer.\r\n\"They are never sold upon hats. If this man ordered one, it is a\r\nsign of a certain amount of foresight, since he went out of his\r\nway to take this precaution against the wind. But since we see\r\nthat he has broken the elastic and has not troubled to replace\r\nit, it is obvious that he has less foresight now than formerly,\r\nwhich is a distinct proof of a weakening nature. On the other\r\nhand, he has endeavoured to conceal some of these stains upon the\r\nfelt by daubing them with ink, which is a sign that he has not\r\nentirely lost his self-respect.\"\r\n\r\n\"Your reasoning is certainly plausible.\"\r\n\r\n\"The further points, that he is middle-aged, that his hair is\r\ngrizzled, that it has been recently cut, and that he uses\r\nlime-cream, are all to be gathered from a close examination of the\r\nlower part of the lining. The lens discloses a large number of\r\nhair-ends, clean cut by the scissors of the barber. They all\r\nappear to be adhesive, and there is a distinct odour of\r\nlime-cream. This dust, you will observe, is not the gritty, grey\r\ndust of the street but the fluffy brown dust of the house,\r\nshowing that it has been hung up indoors most of the time, while\r\nthe marks of moisture upon the inside are proof positive that the\r\nwearer perspired very freely, and could therefore, hardly be in\r\nthe best of training.\"\r\n\r\n\"But his wife--you said that she had ceased to love him.\"\r\n\r\n\"This hat has not been brushed for weeks. When I see you, my dear\r\nWatson, with a week's accumulation of dust upon your hat, and\r\nwhen your wife allows you to go out in such a state, I shall fear\r\nthat you also have been unfortunate enough to lose your wife's\r\naffection.\"\r\n\r\n\"But he might be a bachelor.\"\r\n\r\n\"Nay, he was bringing home the goose as a peace-offering to his\r\nwife. Remember the card upon the bird's leg.\"\r\n\r\n\"You have an answer to everything. But how on earth do you deduce\r\nthat the gas is not laid on in his house?\"\r\n\r\n\"One tallow stain, or even two, might come by chance; but when I\r\nsee no less than five, I think that there can be little doubt\r\nthat the individual must be brought into frequent contact with\r\nburning tallow--walks upstairs at night probably with his hat in\r\none hand and a guttering candle in the other. Anyhow, he never\r\ngot tallow-stains from a gas-jet. Are you satisfied?\"\r\n\r\n\"Well, it is very ingenious,\" said I, laughing; \"but since, as\r\nyou said just now, there has been no crime committed, and no harm\r\ndone save the loss of a goose, all this seems to be rather a\r\nwaste of energy.\"\r\n\r\nSherlock Holmes had opened his mouth to reply, when the door flew\r\nopen, and Peterson, the commissionaire, rushed into the apartment\r\nwith flushed cheeks and the face of a man who is dazed with\r\nastonishment.\r\n\r\n\"The goose, Mr. Holmes! The goose, sir!\" he gasped.\r\n\r\n\"Eh? What of it, then? Has it returned to life and flapped off\r\nthrough the kitchen window?\" Holmes twisted himself round upon\r\nthe sofa to get a fairer view of the man's excited face.\r\n\r\n\"See here, sir! See what my wife found in its crop!\" He held out\r\nhis hand and displayed upon the centre of the palm a brilliantly\r\nscintillating blue stone, rather smaller than a bean in size, but\r\nof such purity and radiance that it twinkled like an electric\r\npoint in the dark hollow of his hand.\r\n\r\nSherlock Holmes sat up with a whistle. \"By Jove, Peterson!\" said\r\nhe, \"this is treasure trove indeed. I suppose you know what you\r\nhave got?\"\r\n\r\n\"A diamond, sir? A precious stone. It cuts into glass as though\r\nit were putty.\"\r\n\r\n\"It's more than a precious stone. It is the precious stone.\"\r\n\r\n\"Not the Countess of Morcar's blue carbuncle!\" I ejaculated.\r\n\r\n\"Precisely so. I ought to know its size and shape, seeing that I\r\nhave read the advertisement about it in The Times every day\r\nlately. It is absolutely unique, and its value can only be\r\nconjectured, but the reward offered of 1000 pounds is certainly\r\nnot within a twentieth part of the market price.\"\r\n\r\n\"A thousand pounds! Great Lord of mercy!\" The commissionaire\r\nplumped down into a chair and stared from one to the other of us.\r\n\r\n\"That is the reward, and I have reason to know that there are\r\nsentimental considerations in the background which would induce\r\nthe Countess to part with half her fortune if she could but\r\nrecover the gem.\"\r\n\r\n\"It was lost, if I remember aright, at the Hotel Cosmopolitan,\" I\r\nremarked.\r\n\r\n\"Precisely so, on December 22nd, just five days ago. John Horner,\r\na plumber, was accused of having abstracted it from the lady's\r\njewel-case. The evidence against him was so strong that the case\r\nhas been referred to the Assizes. I have some account of the\r\nmatter here, I believe.\" He rummaged amid his newspapers,\r\nglancing over the dates, until at last he smoothed one out,\r\ndoubled it over, and read the following paragraph:\r\n\r\n\"Hotel Cosmopolitan Jewel Robbery. John Horner, 26, plumber, was\r\nbrought up upon the charge of having upon the 22nd inst.,\r\nabstracted from the jewel-case of the Countess of Morcar the\r\nvaluable gem known as the blue carbuncle. James Ryder,\r\nupper-attendant at the hotel, gave his evidence to the effect\r\nthat he had shown Horner up to the dressing-room of the Countess\r\nof Morcar upon the day of the robbery in order that he might\r\nsolder the second bar of the grate, which was loose. He had\r\nremained with Horner some little time, but had finally been\r\ncalled away. On returning, he found that Horner had disappeared,\r\nthat the bureau had been forced open, and that the small morocco\r\ncasket in which, as it afterwards transpired, the Countess was\r\naccustomed to keep her jewel, was lying empty upon the\r\ndressing-table. Ryder instantly gave the alarm, and Horner was\r\narrested the same evening; but the stone could not be found\r\neither upon his person or in his rooms. Catherine Cusack, maid to\r\nthe Countess, deposed to having heard Ryder's cry of dismay on\r\ndiscovering the robbery, and to having rushed into the room,\r\nwhere she found matters as described by the last witness.\r\nInspector Bradstreet, B division, gave evidence as to the arrest\r\nof Horner, who struggled frantically, and protested his innocence\r\nin the strongest terms. Evidence of a previous conviction for\r\nrobbery having been given against the prisoner, the magistrate\r\nrefused to deal summarily with the offence, but referred it to\r\nthe Assizes. Horner, who had shown signs of intense emotion\r\nduring the proceedings, fainted away at the conclusion and was\r\ncarried out of court.\"\r\n\r\n\"Hum! So much for the police-court,\" said Holmes thoughtfully,\r\ntossing aside the paper. \"The question for us now to solve is the\r\nsequence of events leading from a rifled jewel-case at one end to\r\nthe crop of a goose in Tottenham Court Road at the other. You\r\nsee, Watson, our little deductions have suddenly assumed a much\r\nmore important and less innocent aspect. Here is the stone; the\r\nstone came from the goose, and the goose came from Mr. Henry\r\nBaker, the gentleman with the bad hat and all the other\r\ncharacteristics with which I have bored you. So now we must set\r\nourselves very seriously to finding this gentleman and\r\nascertaining what part he has played in this little mystery. To\r\ndo this, we must try the simplest means first, and these lie\r\nundoubtedly in an advertisement in all the evening papers. If\r\nthis fail, I shall have recourse to other methods.\"\r\n\r\n\"What will you say?\"\r\n\r\n\"Give me a pencil and that slip of paper. Now, then: 'Found at\r\nthe corner of Goodge Street, a goose and a black felt hat. Mr.\r\nHenry Baker can have the same by applying at 6:30 this evening at\r\n221B, Baker Street.' That is clear and concise.\"\r\n\r\n\"Very. But will he see it?\"\r\n\r\n\"Well, he is sure to keep an eye on the papers, since, to a poor\r\nman, the loss was a heavy one. He was clearly so scared by his\r\nmischance in breaking the window and by the approach of Peterson\r\nthat he thought of nothing but flight, but since then he must\r\nhave bitterly regretted the impulse which caused him to drop his\r\nbird. Then, again, the introduction of his name will cause him to\r\nsee it, for everyone who knows him will direct his attention to\r\nit. Here you are, Peterson, run down to the advertising agency\r\nand have this put in the evening papers.\"\r\n\r\n\"In which, sir?\"\r\n\r\n\"Oh, in the Globe, Star, Pall Mall, St. James's, Evening News,\r\nStandard, Echo, and any others that occur to you.\"\r\n\r\n\"Very well, sir. And this stone?\"\r\n\r\n\"Ah, yes, I shall keep the stone. Thank you. And, I say,\r\nPeterson, just buy a goose on your way back and leave it here\r\nwith me, for we must have one to give to this gentleman in place\r\nof the one which your family is now devouring.\"\r\n\r\nWhen the commissionaire had gone, Holmes took up the stone and\r\nheld it against the light. \"It's a bonny thing,\" said he. \"Just\r\nsee how it glints and sparkles. Of course it is a nucleus and\r\nfocus of crime. Every good stone is. They are the devil's pet\r\nbaits. In the larger and older jewels every facet may stand for a\r\nbloody deed. This stone is not yet twenty years old. It was found\r\nin the banks of the Amoy River in southern China and is remarkable\r\nin having every characteristic of the carbuncle, save that it is\r\nblue in shade instead of ruby red. In spite of its youth, it has\r\nalready a sinister history. There have been two murders, a\r\nvitriol-throwing, a suicide, and several robberies brought about\r\nfor the sake of this forty-grain weight of crystallised charcoal.\r\nWho would think that so pretty a toy would be a purveyor to the\r\ngallows and the prison? I'll lock it up in my strong box now and\r\ndrop a line to the Countess to say that we have it.\"\r\n\r\n\"Do you think that this man Horner is innocent?\"\r\n\r\n\"I cannot tell.\"\r\n\r\n\"Well, then, do you imagine that this other one, Henry Baker, had\r\nanything to do with the matter?\"\r\n\r\n\"It is, I think, much more likely that Henry Baker is an\r\nabsolutely innocent man, who had no idea that the bird which he\r\nwas carrying was of considerably more value than if it were made\r\nof solid gold. That, however, I shall determine by a very simple\r\ntest if we have an answer to our advertisement.\"\r\n\r\n\"And you can do nothing until then?\"\r\n\r\n\"Nothing.\"\r\n\r\n\"In that case I shall continue my professional round. But I shall\r\ncome back in the evening at the hour you have mentioned, for I\r\nshould like to see the solution of so tangled a business.\"\r\n\r\n\"Very glad to see you. I dine at seven. There is a woodcock, I\r\nbelieve. By the way, in view of recent occurrences, perhaps I\r\nought to ask Mrs. Hudson to examine its crop.\"\r\n\r\nI had been delayed at a case, and it was a little after half-past\r\nsix when I found myself in Baker Street once more. As I\r\napproached the house I saw a tall man in a Scotch bonnet with a\r\ncoat which was buttoned up to his chin waiting outside in the\r\nbright semicircle which was thrown from the fanlight. Just as I\r\narrived the door was opened, and we were shown up together to\r\nHolmes' room.\r\n\r\n\"Mr. Henry Baker, I believe,\" said he, rising from his armchair\r\nand greeting his visitor with the easy air of geniality which he\r\ncould so readily assume. \"Pray take this chair by the fire, Mr.\r\nBaker. It is a cold night, and I observe that your circulation is\r\nmore adapted for summer than for winter. Ah, Watson, you have\r\njust come at the right time. Is that your hat, Mr. Baker?\"\r\n\r\n\"Yes, sir, that is undoubtedly my hat.\"\r\n\r\nHe was a large man with rounded shoulders, a massive head, and a\r\nbroad, intelligent face, sloping down to a pointed beard of\r\ngrizzled brown. A touch of red in nose and cheeks, with a slight\r\ntremor of his extended hand, recalled Holmes' surmise as to his\r\nhabits. His rusty black frock-coat was buttoned right up in\r\nfront, with the collar turned up, and his lank wrists protruded\r\nfrom his sleeves without a sign of cuff or shirt. He spoke in a\r\nslow staccato fashion, choosing his words with care, and gave the\r\nimpression generally of a man of learning and letters who had had\r\nill-usage at the hands of fortune.\r\n\r\n\"We have retained these things for some days,\" said Holmes,\r\n\"because we expected to see an advertisement from you giving your\r\naddress. I am at a loss to know now why you did not advertise.\"\r\n\r\nOur visitor gave a rather shamefaced laugh. \"Shillings have not\r\nbeen so plentiful with me as they once were,\" he remarked. \"I had\r\nno doubt that the gang of roughs who assaulted me had carried off\r\nboth my hat and the bird. I did not care to spend more money in a\r\nhopeless attempt at recovering them.\"\r\n\r\n\"Very naturally. By the way, about the bird, we were compelled to\r\neat it.\"\r\n\r\n\"To eat it!\" Our visitor half rose from his chair in his\r\nexcitement.\r\n\r\n\"Yes, it would have been of no use to anyone had we not done so.\r\nBut I presume that this other goose upon the sideboard, which is\r\nabout the same weight and perfectly fresh, will answer your\r\npurpose equally well?\"\r\n\r\n\"Oh, certainly, certainly,\" answered Mr. Baker with a sigh of\r\nrelief.\r\n\r\n\"Of course, we still have the feathers, legs, crop, and so on of\r\nyour own bird, so if you wish--\"\r\n\r\nThe man burst into a hearty laugh. \"They might be useful to me as\r\nrelics of my adventure,\" said he, \"but beyond that I can hardly\r\nsee what use the disjecta membra of my late acquaintance are\r\ngoing to be to me. No, sir, I think that, with your permission, I\r\nwill confine my attentions to the excellent bird which I perceive\r\nupon the sideboard.\"\r\n\r\nSherlock Holmes glanced sharply across at me with a slight shrug\r\nof his shoulders.\r\n\r\n\"There is your hat, then, and there your bird,\" said he. \"By the\r\nway, would it bore you to tell me where you got the other one\r\nfrom? I am somewhat of a fowl fancier, and I have seldom seen a\r\nbetter grown goose.\"\r\n\r\n\"Certainly, sir,\" said Baker, who had risen and tucked his newly\r\ngained property under his arm. \"There are a few of us who\r\nfrequent the Alpha Inn, near the Museum--we are to be found in\r\nthe Museum itself during the day, you understand. This year our\r\ngood host, Windigate by name, instituted a goose club, by which,\r\non consideration of some few pence every week, we were each to\r\nreceive a bird at Christmas. My pence were duly paid, and the\r\nrest is familiar to you. I am much indebted to you, sir, for a\r\nScotch bonnet is fitted neither to my years nor my gravity.\" With\r\na comical pomposity of manner he bowed solemnly to both of us and\r\nstrode off upon his way.\r\n\r\n\"So much for Mr. Henry Baker,\" said Holmes when he had closed the\r\ndoor behind him. \"It is quite certain that he knows nothing\r\nwhatever about the matter. Are you hungry, Watson?\"\r\n\r\n\"Not particularly.\"\r\n\r\n\"Then I suggest that we turn our dinner into a supper and follow\r\nup this clue while it is still hot.\"\r\n\r\n\"By all means.\"\r\n\r\nIt was a bitter night, so we drew on our ulsters and wrapped\r\ncravats about our throats. Outside, the stars were shining coldly\r\nin a cloudless sky, and the breath of the passers-by blew out\r\ninto smoke like so many pistol shots. Our footfalls rang out\r\ncrisply and loudly as we swung through the doctors' quarter,\r\nWimpole Street, Harley Street, and so through Wigmore Street into\r\nOxford Street. In a quarter of an hour we were in Bloomsbury at\r\nthe Alpha Inn, which is a small public-house at the corner of one\r\nof the streets which runs down into Holborn. Holmes pushed open\r\nthe door of the private bar and ordered two glasses of beer from\r\nthe ruddy-faced, white-aproned landlord.\r\n\r\n\"Your beer should be excellent if it is as good as your geese,\"\r\nsaid he.\r\n\r\n\"My geese!\" The man seemed surprised.\r\n\r\n\"Yes. I was speaking only half an hour ago to Mr. Henry Baker,\r\nwho was a member of your goose club.\"\r\n\r\n\"Ah! yes, I see. But you see, sir, them's not our geese.\"\r\n\r\n\"Indeed! Whose, then?\"\r\n\r\n\"Well, I got the two dozen from a salesman in Covent Garden.\"\r\n\r\n\"Indeed? I know some of them. Which was it?\"\r\n\r\n\"Breckinridge is his name.\"\r\n\r\n\"Ah! I don't know him. Well, here's your good health landlord,\r\nand prosperity to your house. Good-night.\"\r\n\r\n\"Now for Mr. Breckinridge,\" he continued, buttoning up his coat\r\nas we came out into the frosty air. \"Remember, Watson that though\r\nwe have so homely a thing as a goose at one end of this chain, we\r\nhave at the other a man who will certainly get seven years' penal\r\nservitude unless we can establish his innocence. It is possible\r\nthat our inquiry may but confirm his guilt; but, in any case, we\r\nhave a line of investigation which has been missed by the police,\r\nand which a singular chance has placed in our hands. Let us\r\nfollow it out to the bitter end. Faces to the south, then, and\r\nquick march!\"\r\n\r\nWe passed across Holborn, down Endell Street, and so through a\r\nzigzag of slums to Covent Garden Market. One of the largest\r\nstalls bore the name of Breckinridge upon it, and the proprietor\r\na horsey-looking man, with a sharp face and trim side-whiskers was\r\nhelping a boy to put up the shutters.\r\n\r\n\"Good-evening. It's a cold night,\" said Holmes.\r\n\r\nThe salesman nodded and shot a questioning glance at my\r\ncompanion.\r\n\r\n\"Sold out of geese, I see,\" continued Holmes, pointing at the\r\nbare slabs of marble.\r\n\r\n\"Let you have five hundred to-morrow morning.\"\r\n\r\n\"That's no good.\"\r\n\r\n\"Well, there are some on the stall with the gas-flare.\"\r\n\r\n\"Ah, but I was recommended to you.\"\r\n\r\n\"Who by?\"\r\n\r\n\"The landlord of the Alpha.\"\r\n\r\n\"Oh, yes; I sent him a couple of dozen.\"\r\n\r\n\"Fine birds they were, too. Now where did you get them from?\"\r\n\r\nTo my surprise the question provoked a burst of anger from the\r\nsalesman.\r\n\r\n\"Now, then, mister,\" said he, with his head cocked and his arms\r\nakimbo, \"what are you driving at? Let's have it straight, now.\"\r\n\r\n\"It is straight enough. I should like to know who sold you the\r\ngeese which you supplied to the Alpha.\"\r\n\r\n\"Well then, I shan't tell you. So now!\"\r\n\r\n\"Oh, it is a matter of no importance; but I don't know why you\r\nshould be so warm over such a trifle.\"\r\n\r\n\"Warm! You'd be as warm, maybe, if you were as pestered as I am.\r\nWhen I pay good money for a good article there should be an end\r\nof the business; but it's 'Where are the geese?' and 'Who did you\r\nsell the geese to?' and 'What will you take for the geese?' One\r\nwould think they were the only geese in the world, to hear the\r\nfuss that is made over them.\"\r\n\r\n\"Well, I have no connection with any other people who have been\r\nmaking inquiries,\" said Holmes carelessly. \"If you won't tell us\r\nthe bet is off, that is all. But I'm always ready to back my\r\nopinion on a matter of fowls, and I have a fiver on it that the\r\nbird I ate is country bred.\"\r\n\r\n\"Well, then, you've lost your fiver, for it's town bred,\" snapped\r\nthe salesman.\r\n\r\n\"It's nothing of the kind.\"\r\n\r\n\"I say it is.\"\r\n\r\n\"I don't believe it.\"\r\n\r\n\"D'you think you know more about fowls than I, who have handled\r\nthem ever since I was a nipper? I tell you, all those birds that\r\nwent to the Alpha were town bred.\"\r\n\r\n\"You'll never persuade me to believe that.\"\r\n\r\n\"Will you bet, then?\"\r\n\r\n\"It's merely taking your money, for I know that I am right. But\r\nI'll have a sovereign on with you, just to teach you not to be\r\nobstinate.\"\r\n\r\nThe salesman chuckled grimly. \"Bring me the books, Bill,\" said\r\nhe.\r\n\r\nThe small boy brought round a small thin volume and a great\r\ngreasy-backed one, laying them out together beneath the hanging\r\nlamp.\r\n\r\n\"Now then, Mr. Cocksure,\" said the salesman, \"I thought that I\r\nwas out of geese, but before I finish you'll find that there is\r\nstill one left in my shop. You see this little book?\"\r\n\r\n\"Well?\"\r\n\r\n\"That's the list of the folk from whom I buy. D'you see? Well,\r\nthen, here on this page are the country folk, and the numbers\r\nafter their names are where their accounts are in the big ledger.\r\nNow, then! You see this other page in red ink? Well, that is a\r\nlist of my town suppliers. Now, look at that third name. Just\r\nread it out to me.\"\r\n\r\n\"Mrs. Oakshott, 117, Brixton Road--249,\" read Holmes.\r\n\r\n\"Quite so. Now turn that up in the ledger.\"\r\n\r\nHolmes turned to the page indicated. \"Here you are, 'Mrs.\r\nOakshott, 117, Brixton Road, egg and poultry supplier.'\"\r\n\r\n\"Now, then, what's the last entry?\"\r\n\r\n\"'December 22nd. Twenty-four geese at 7s. 6d.'\"\r\n\r\n\"Quite so. There you are. And underneath?\"\r\n\r\n\"'Sold to Mr. Windigate of the Alpha, at 12s.'\"\r\n\r\n\"What have you to say now?\"\r\n\r\nSherlock Holmes looked deeply chagrined. He drew a sovereign from\r\nhis pocket and threw it down upon the slab, turning away with the\r\nair of a man whose disgust is too deep for words. A few yards off\r\nhe stopped under a lamp-post and laughed in the hearty, noiseless\r\nfashion which was peculiar to him.\r\n\r\n\"When you see a man with whiskers of that cut and the 'Pink 'un'\r\nprotruding out of his pocket, you can always draw him by a bet,\"\r\nsaid he. \"I daresay that if I had put 100 pounds down in front of\r\nhim, that man would not have given me such complete information\r\nas was drawn from him by the idea that he was doing me on a\r\nwager. Well, Watson, we are, I fancy, nearing the end of our\r\nquest, and the only point which remains to be determined is\r\nwhether we should go on to this Mrs. Oakshott to-night, or\r\nwhether we should reserve it for to-morrow. It is clear from what\r\nthat surly fellow said that there are others besides ourselves\r\nwho are anxious about the matter, and I should--\"\r\n\r\nHis remarks were suddenly cut short by a loud hubbub which broke\r\nout from the stall which we had just left. Turning round we saw a\r\nlittle rat-faced fellow standing in the centre of the circle of\r\nyellow light which was thrown by the swinging lamp, while\r\nBreckinridge, the salesman, framed in the door of his stall, was\r\nshaking his fists fiercely at the cringing figure.\r\n\r\n\"I've had enough of you and your geese,\" he shouted. \"I wish you\r\nwere all at the devil together. If you come pestering me any more\r\nwith your silly talk I'll set the dog at you. You bring Mrs.\r\nOakshott here and I'll answer her, but what have you to do with\r\nit? Did I buy the geese off you?\"\r\n\r\n\"No; but one of them was mine all the same,\" whined the little\r\nman.\r\n\r\n\"Well, then, ask Mrs. Oakshott for it.\"\r\n\r\n\"She told me to ask you.\"\r\n\r\n\"Well, you can ask the King of Proosia, for all I care. I've had\r\nenough of it. Get out of this!\" He rushed fiercely forward, and\r\nthe inquirer flitted away into the darkness.\r\n\r\n\"Ha! this may save us a visit to Brixton Road,\" whispered Holmes.\r\n\"Come with me, and we will see what is to be made of this\r\nfellow.\" Striding through the scattered knots of people who\r\nlounged round the flaring stalls, my companion speedily overtook\r\nthe little man and touched him upon the shoulder. He sprang\r\nround, and I could see in the gas-light that every vestige of\r\ncolour had been driven from his face.\r\n\r\n\"Who are you, then? What do you want?\" he asked in a quavering\r\nvoice.\r\n\r\n\"You will excuse me,\" said Holmes blandly, \"but I could not help\r\noverhearing the questions which you put to the salesman just now.\r\nI think that I could be of assistance to you.\"\r\n\r\n\"You? Who are you? How could you know anything of the matter?\"\r\n\r\n\"My name is Sherlock Holmes. It is my business to know what other\r\npeople don't know.\"\r\n\r\n\"But you can know nothing of this?\"\r\n\r\n\"Excuse me, I know everything of it. You are endeavouring to\r\ntrace some geese which were sold by Mrs. Oakshott, of Brixton\r\nRoad, to a salesman named Breckinridge, by him in turn to Mr.\r\nWindigate, of the Alpha, and by him to his club, of which Mr.\r\nHenry Baker is a member.\"\r\n\r\n\"Oh, sir, you are the very man whom I have longed to meet,\" cried\r\nthe little fellow with outstretched hands and quivering fingers.\r\n\"I can hardly explain to you how interested I am in this matter.\"\r\n\r\nSherlock Holmes hailed a four-wheeler which was passing. \"In that\r\ncase we had better discuss it in a cosy room rather than in this\r\nwind-swept market-place,\" said he. \"But pray tell me, before we\r\ngo farther, who it is that I have the pleasure of assisting.\"\r\n\r\nThe man hesitated for an instant. \"My name is John Robinson,\" he\r\nanswered with a sidelong glance.\r\n\r\n\"No, no; the real name,\" said Holmes sweetly. \"It is always\r\nawkward doing business with an alias.\"\r\n\r\nA flush sprang to the white cheeks of the stranger. \"Well then,\"\r\nsaid he, \"my real name is James Ryder.\"\r\n\r\n\"Precisely so. Head attendant at the Hotel Cosmopolitan. Pray\r\nstep into the cab, and I shall soon be able to tell you\r\neverything which you would wish to know.\"\r\n\r\nThe little man stood glancing from one to the other of us with\r\nhalf-frightened, half-hopeful eyes, as one who is not sure\r\nwhether he is on the verge of a windfall or of a catastrophe.\r\nThen he stepped into the cab, and in half an hour we were back in\r\nthe sitting-room at Baker Street. Nothing had been said during\r\nour drive, but the high, thin breathing of our new companion, and\r\nthe claspings and unclaspings of his hands, spoke of the nervous\r\ntension within him.\r\n\r\n\"Here we are!\" said Holmes cheerily as we filed into the room.\r\n\"The fire looks very seasonable in this weather. You look cold,\r\nMr. Ryder. Pray take the basket-chair. I will just put on my\r\nslippers before we settle this little matter of yours. Now, then!\r\nYou want to know what became of those geese?\"\r\n\r\n\"Yes, sir.\"\r\n\r\n\"Or rather, I fancy, of that goose. It was one bird, I imagine in\r\nwhich you were interested--white, with a black bar across the\r\ntail.\"\r\n\r\nRyder quivered with emotion. \"Oh, sir,\" he cried, \"can you tell\r\nme where it went to?\"\r\n\r\n\"It came here.\"\r\n\r\n\"Here?\"\r\n\r\n\"Yes, and a most remarkable bird it proved. I don't wonder that\r\nyou should take an interest in it. It laid an egg after it was\r\ndead--the bonniest, brightest little blue egg that ever was seen.\r\nI have it here in my museum.\"\r\n\r\nOur visitor staggered to his feet and clutched the mantelpiece\r\nwith his right hand. Holmes unlocked his strong-box and held up\r\nthe blue carbuncle, which shone out like a star, with a cold,\r\nbrilliant, many-pointed radiance. Ryder stood glaring with a\r\ndrawn face, uncertain whether to claim or to disown it.\r\n\r\n\"The game's up, Ryder,\" said Holmes quietly. \"Hold up, man, or\r\nyou'll be into the fire! Give him an arm back into his chair,\r\nWatson. He's not got blood enough to go in for felony with\r\nimpunity. Give him a dash of brandy. So! Now he looks a little\r\nmore human. What a shrimp it is, to be sure!\"\r\n\r\nFor a moment he had staggered and nearly fallen, but the brandy\r\nbrought a tinge of colour into his cheeks, and he sat staring\r\nwith frightened eyes at his accuser.\r\n\r\n\"I have almost every link in my hands, and all the proofs which I\r\ncould possibly need, so there is little which you need tell me.\r\nStill, that little may as well be cleared up to make the case\r\ncomplete. You had heard, Ryder, of this blue stone of the\r\nCountess of Morcar's?\"\r\n\r\n\"It was Catherine Cusack who told me of it,\" said he in a\r\ncrackling voice.\r\n\r\n\"I see--her ladyship's waiting-maid. Well, the temptation of\r\nsudden wealth so easily acquired was too much for you, as it has\r\nbeen for better men before you; but you were not very scrupulous\r\nin the means you used. It seems to me, Ryder, that there is the\r\nmaking of a very pretty villain in you. You knew that this man\r\nHorner, the plumber, had been concerned in some such matter\r\nbefore, and that suspicion would rest the more readily upon him.\r\nWhat did you do, then? You made some small job in my lady's\r\nroom--you and your confederate Cusack--and you managed that he\r\nshould be the man sent for. Then, when he had left, you rifled\r\nthe jewel-case, raised the alarm, and had this unfortunate man\r\narrested. You then--\"\r\n\r\nRyder threw himself down suddenly upon the rug and clutched at my\r\ncompanion's knees. \"For God's sake, have mercy!\" he shrieked.\r\n\"Think of my father! Of my mother! It would break their hearts. I\r\nnever went wrong before! I never will again. I swear it. I'll\r\nswear it on a Bible. Oh, don't bring it into court! For Christ's\r\nsake, don't!\"\r\n\r\n\"Get back into your chair!\" said Holmes sternly. \"It is very well\r\nto cringe and crawl now, but you thought little enough of this\r\npoor Horner in the dock for a crime of which he knew nothing.\"\r\n\r\n\"I will fly, Mr. Holmes. I will leave the country, sir. Then the\r\ncharge against him will break down.\"\r\n\r\n\"Hum! We will talk about that. And now let us hear a true account\r\nof the next act. How came the stone into the goose, and how came\r\nthe goose into the open market? Tell us the truth, for there lies\r\nyour only hope of safety.\"\r\n\r\nRyder passed his tongue over his parched lips. \"I will tell you\r\nit just as it happened, sir,\" said he. \"When Horner had been\r\narrested, it seemed to me that it would be best for me to get\r\naway with the stone at once, for I did not know at what moment\r\nthe police might not take it into their heads to search me and my\r\nroom. There was no place about the hotel where it would be safe.\r\nI went out, as if on some commission, and I made for my sister's\r\nhouse. She had married a man named Oakshott, and lived in Brixton\r\nRoad, where she fattened fowls for the market. All the way there\r\nevery man I met seemed to me to be a policeman or a detective;\r\nand, for all that it was a cold night, the sweat was pouring down\r\nmy face before I came to the Brixton Road. My sister asked me\r\nwhat was the matter, and why I was so pale; but I told her that I\r\nhad been upset by the jewel robbery at the hotel. Then I went\r\ninto the back yard and smoked a pipe and wondered what it would\r\nbe best to do.\r\n\r\n\"I had a friend once called Maudsley, who went to the bad, and\r\nhas just been serving his time in Pentonville. One day he had met\r\nme, and fell into talk about the ways of thieves, and how they\r\ncould get rid of what they stole. I knew that he would be true to\r\nme, for I knew one or two things about him; so I made up my mind\r\nto go right on to Kilburn, where he lived, and take him into my\r\nconfidence. He would show me how to turn the stone into money.\r\nBut how to get to him in safety? I thought of the agonies I had\r\ngone through in coming from the hotel. I might at any moment be\r\nseized and searched, and there would be the stone in my waistcoat\r\npocket. I was leaning against the wall at the time and looking at\r\nthe geese which were waddling about round my feet, and suddenly\r\nan idea came into my head which showed me how I could beat the\r\nbest detective that ever lived.\r\n\r\n\"My sister had told me some weeks before that I might have the\r\npick of her geese for a Christmas present, and I knew that she\r\nwas always as good as her word. I would take my goose now, and in\r\nit I would carry my stone to Kilburn. There was a little shed in\r\nthe yard, and behind this I drove one of the birds--a fine big\r\none, white, with a barred tail. I caught it, and prying its bill\r\nopen, I thrust the stone down its throat as far as my finger\r\ncould reach. The bird gave a gulp, and I felt the stone pass\r\nalong its gullet and down into its crop. But the creature flapped\r\nand struggled, and out came my sister to know what was the\r\nmatter. As I turned to speak to her the brute broke loose and\r\nfluttered off among the others.\r\n\r\n\"'Whatever were you doing with that bird, Jem?' says she.\r\n\r\n\"'Well,' said I, 'you said you'd give me one for Christmas, and I\r\nwas feeling which was the fattest.'\r\n\r\n\"'Oh,' says she, 'we've set yours aside for you--Jem's bird, we\r\ncall it. It's the big white one over yonder. There's twenty-six\r\nof them, which makes one for you, and one for us, and two dozen\r\nfor the market.'\r\n\r\n\"'Thank you, Maggie,' says I; 'but if it is all the same to you,\r\nI'd rather have that one I was handling just now.'\r\n\r\n\"'The other is a good three pound heavier,' said she, 'and we\r\nfattened it expressly for you.'\r\n\r\n\"'Never mind. I'll have the other, and I'll take it now,' said I.\r\n\r\n\"'Oh, just as you like,' said she, a little huffed. 'Which is it\r\nyou want, then?'\r\n\r\n\"'That white one with the barred tail, right in the middle of the\r\nflock.'\r\n\r\n\"'Oh, very well. Kill it and take it with you.'\r\n\r\n\"Well, I did what she said, Mr. Holmes, and I carried the bird\r\nall the way to Kilburn. I told my pal what I had done, for he was\r\na man that it was easy to tell a thing like that to. He laughed\r\nuntil he choked, and we got a knife and opened the goose. My\r\nheart turned to water, for there was no sign of the stone, and I\r\nknew that some terrible mistake had occurred. I left the bird,\r\nrushed back to my sister's, and hurried into the back yard. There\r\nwas not a bird to be seen there.\r\n\r\n\"'Where are they all, Maggie?' I cried.\r\n\r\n\"'Gone to the dealer's, Jem.'\r\n\r\n\"'Which dealer's?'\r\n\r\n\"'Breckinridge, of Covent Garden.'\r\n\r\n\"'But was there another with a barred tail?' I asked, 'the same\r\nas the one I chose?'\r\n\r\n\"'Yes, Jem; there were two barred-tailed ones, and I could never\r\ntell them apart.'\r\n\r\n\"Well, then, of course I saw it all, and I ran off as hard as my\r\nfeet would carry me to this man Breckinridge; but he had sold the\r\nlot at once, and not one word would he tell me as to where they\r\nhad gone. You heard him yourselves to-night. Well, he has always\r\nanswered me like that. My sister thinks that I am going mad.\r\nSometimes I think that I am myself. And now--and now I am myself\r\na branded thief, without ever having touched the wealth for which\r\nI sold my character. God help me! God help me!\" He burst into\r\nconvulsive sobbing, with his face buried in his hands.\r\n\r\nThere was a long silence, broken only by his heavy breathing and\r\nby the measured tapping of Sherlock Holmes' finger-tips upon the\r\nedge of the table. Then my friend rose and threw open the door.\r\n\r\n\"Get out!\" said he.\r\n\r\n\"What, sir! Oh, Heaven bless you!\"\r\n\r\n\"No more words. Get out!\"\r\n\r\nAnd no more words were needed. There was a rush, a clatter upon\r\nthe stairs, the bang of a door, and the crisp rattle of running\r\nfootfalls from the street.\r\n\r\n\"After all, Watson,\" said Holmes, reaching up his hand for his\r\nclay pipe, \"I am not retained by the police to supply their\r\ndeficiencies. If Horner were in danger it would be another thing;\r\nbut this fellow will not appear against him, and the case must\r\ncollapse. I suppose that I am commuting a felony, but it is just\r\npossible that I am saving a soul. This fellow will not go wrong\r\nagain; he is too terribly frightened. Send him to gaol now, and\r\nyou make him a gaol-bird for life. Besides, it is the season of\r\nforgiveness. Chance has put in our way a most singular and\r\nwhimsical problem, and its solution is its own reward. If you\r\nwill have the goodness to touch the bell, Doctor, we will begin\r\nanother investigation, in which, also a bird will be the chief\r\nfeature.\"\r\n\r\n\r\n\r\nVIII. THE ADVENTURE OF THE SPECKLED BAND\r\n\r\nOn glancing over my notes of the seventy odd cases in which I\r\nhave during the last eight years studied the methods of my friend\r\nSherlock Holmes, I find many tragic, some comic, a large number\r\nmerely strange, but none commonplace; for, working as he did\r\nrather for the love of his art than for the acquirement of\r\nwealth, he refused to associate himself with any investigation\r\nwhich did not tend towards the unusual, and even the fantastic.\r\nOf all these varied cases, however, I cannot recall any which\r\npresented more singular features than that which was associated\r\nwith the well-known Surrey family of the Roylotts of Stoke Moran.\r\nThe events in question occurred in the early days of my\r\nassociation with Holmes, when we were sharing rooms as bachelors\r\nin Baker Street. It is possible that I might have placed them\r\nupon record before, but a promise of secrecy was made at the\r\ntime, from which I have only been freed during the last month by\r\nthe untimely death of the lady to whom the pledge was given. It\r\nis perhaps as well that the facts should now come to light, for I\r\nhave reasons to know that there are widespread rumours as to the\r\ndeath of Dr. Grimesby Roylott which tend to make the matter even\r\nmore terrible than the truth.\r\n\r\nIt was early in April in the year '83 that I woke one morning to\r\nfind Sherlock Holmes standing, fully dressed, by the side of my\r\nbed. He was a late riser, as a rule, and as the clock on the\r\nmantelpiece showed me that it was only a quarter-past seven, I\r\nblinked up at him in some surprise, and perhaps just a little\r\nresentment, for I was myself regular in my habits.\r\n\r\n\"Very sorry to knock you up, Watson,\" said he, \"but it's the\r\ncommon lot this morning. Mrs. Hudson has been knocked up, she\r\nretorted upon me, and I on you.\"\r\n\r\n\"What is it, then--a fire?\"\r\n\r\n\"No; a client. It seems that a young lady has arrived in a\r\nconsiderable state of excitement, who insists upon seeing me. She\r\nis waiting now in the sitting-room. Now, when young ladies wander\r\nabout the metropolis at this hour of the morning, and knock\r\nsleepy people up out of their beds, I presume that it is\r\nsomething very pressing which they have to communicate. Should it\r\nprove to be an interesting case, you would, I am sure, wish to\r\nfollow it from the outset. I thought, at any rate, that I should\r\ncall you and give you the chance.\"\r\n\r\n\"My dear fellow, I would not miss it for anything.\"\r\n\r\nI had no keener pleasure than in following Holmes in his\r\nprofessional investigations, and in admiring the rapid\r\ndeductions, as swift as intuitions, and yet always founded on a\r\nlogical basis with which he unravelled the problems which were\r\nsubmitted to him. I rapidly threw on my clothes and was ready in\r\na few minutes to accompany my friend down to the sitting-room. A\r\nlady dressed in black and heavily veiled, who had been sitting in\r\nthe window, rose as we entered.\r\n\r\n\"Good-morning, madam,\" said Holmes cheerily. \"My name is Sherlock\r\nHolmes. This is my intimate friend and associate, Dr. Watson,\r\nbefore whom you can speak as freely as before myself. Ha! I am\r\nglad to see that Mrs. Hudson has had the good sense to light the\r\nfire. Pray draw up to it, and I shall order you a cup of hot\r\ncoffee, for I observe that you are shivering.\"\r\n\r\n\"It is not cold which makes me shiver,\" said the woman in a low\r\nvoice, changing her seat as requested.\r\n\r\n\"What, then?\"\r\n\r\n\"It is fear, Mr. Holmes. It is terror.\" She raised her veil as\r\nshe spoke, and we could see that she was indeed in a pitiable\r\nstate of agitation, her face all drawn and grey, with restless\r\nfrightened eyes, like those of some hunted animal. Her features\r\nand figure were those of a woman of thirty, but her hair was shot\r\nwith premature grey, and her expression was weary and haggard.\r\nSherlock Holmes ran her over with one of his quick,\r\nall-comprehensive glances.\r\n\r\n\"You must not fear,\" said he soothingly, bending forward and\r\npatting her forearm. \"We shall soon set matters right, I have no\r\ndoubt. You have come in by train this morning, I see.\"\r\n\r\n\"You know me, then?\"\r\n\r\n\"No, but I observe the second half of a return ticket in the palm\r\nof your left glove. You must have started early, and yet you had\r\na good drive in a dog-cart, along heavy roads, before you reached\r\nthe station.\"\r\n\r\nThe lady gave a violent start and stared in bewilderment at my\r\ncompanion.\r\n\r\n\"There is no mystery, my dear madam,\" said he, smiling. \"The left\r\narm of your jacket is spattered with mud in no less than seven\r\nplaces. The marks are perfectly fresh. There is no vehicle save a\r\ndog-cart which throws up mud in that way, and then only when you\r\nsit on the left-hand side of the driver.\"\r\n\r\n\"Whatever your reasons may be, you are perfectly correct,\" said\r\nshe. \"I started from home before six, reached Leatherhead at\r\ntwenty past, and came in by the first train to Waterloo. Sir, I\r\ncan stand this strain no longer; I shall go mad if it continues.\r\nI have no one to turn to--none, save only one, who cares for me,\r\nand he, poor fellow, can be of little aid. I have heard of you,\r\nMr. Holmes; I have heard of you from Mrs. Farintosh, whom you\r\nhelped in the hour of her sore need. It was from her that I had\r\nyour address. Oh, sir, do you not think that you could help me,\r\ntoo, and at least throw a little light through the dense darkness\r\nwhich surrounds me? At present it is out of my power to reward\r\nyou for your services, but in a month or six weeks I shall be\r\nmarried, with the control of my own income, and then at least you\r\nshall not find me ungrateful.\"\r\n\r\nHolmes turned to his desk and, unlocking it, drew out a small\r\ncase-book, which he consulted.\r\n\r\n\"Farintosh,\" said he. \"Ah yes, I recall the case; it was\r\nconcerned with an opal tiara. I think it was before your time,\r\nWatson. I can only say, madam, that I shall be happy to devote\r\nthe same care to your case as I did to that of your friend. As to\r\nreward, my profession is its own reward; but you are at liberty\r\nto defray whatever expenses I may be put to, at the time which\r\nsuits you best. And now I beg that you will lay before us\r\neverything that may help us in forming an opinion upon the\r\nmatter.\"\r\n\r\n\"Alas!\" replied our visitor, \"the very horror of my situation\r\nlies in the fact that my fears are so vague, and my suspicions\r\ndepend so entirely upon small points, which might seem trivial to\r\nanother, that even he to whom of all others I have a right to\r\nlook for help and advice looks upon all that I tell him about it\r\nas the fancies of a nervous woman. He does not say so, but I can\r\nread it from his soothing answers and averted eyes. But I have\r\nheard, Mr. Holmes, that you can see deeply into the manifold\r\nwickedness of the human heart. You may advise me how to walk amid\r\nthe dangers which encompass me.\"\r\n\r\n\"I am all attention, madam.\"\r\n\r\n\"My name is Helen Stoner, and I am living with my stepfather, who\r\nis the last survivor of one of the oldest Saxon families in\r\nEngland, the Roylotts of Stoke Moran, on the western border of\r\nSurrey.\"\r\n\r\nHolmes nodded his head. \"The name is familiar to me,\" said he.\r\n\r\n\"The family was at one time among the richest in England, and the\r\nestates extended over the borders into Berkshire in the north,\r\nand Hampshire in the west. In the last century, however, four\r\nsuccessive heirs were of a dissolute and wasteful disposition,\r\nand the family ruin was eventually completed by a gambler in the\r\ndays of the Regency. Nothing was left save a few acres of ground,\r\nand the two-hundred-year-old house, which is itself crushed under\r\na heavy mortgage. The last squire dragged out his existence\r\nthere, living the horrible life of an aristocratic pauper; but\r\nhis only son, my stepfather, seeing that he must adapt himself to\r\nthe new conditions, obtained an advance from a relative, which\r\nenabled him to take a medical degree and went out to Calcutta,\r\nwhere, by his professional skill and his force of character, he\r\nestablished a large practice. In a fit of anger, however, caused\r\nby some robberies which had been perpetrated in the house, he\r\nbeat his native butler to death and narrowly escaped a capital\r\nsentence. As it was, he suffered a long term of imprisonment and\r\nafterwards returned to England a morose and disappointed man.\r\n\r\n\"When Dr. Roylott was in India he married my mother, Mrs. Stoner,\r\nthe young widow of Major-General Stoner, of the Bengal Artillery.\r\nMy sister Julia and I were twins, and we were only two years old\r\nat the time of my mother's re-marriage. She had a considerable\r\nsum of money--not less than 1000 pounds a year--and this she\r\nbequeathed to Dr. Roylott entirely while we resided with him,\r\nwith a provision that a certain annual sum should be allowed to\r\neach of us in the event of our marriage. Shortly after our return\r\nto England my mother died--she was killed eight years ago in a\r\nrailway accident near Crewe. Dr. Roylott then abandoned his\r\nattempts to establish himself in practice in London and took us\r\nto live with him in the old ancestral house at Stoke Moran. The\r\nmoney which my mother had left was enough for all our wants, and\r\nthere seemed to be no obstacle to our happiness.\r\n\r\n\"But a terrible change came over our stepfather about this time.\r\nInstead of making friends and exchanging visits with our\r\nneighbours, who had at first been overjoyed to see a Roylott of\r\nStoke Moran back in the old family seat, he shut himself up in\r\nhis house and seldom came out save to indulge in ferocious\r\nquarrels with whoever might cross his path. Violence of temper\r\napproaching to mania has been hereditary in the men of the\r\nfamily, and in my stepfather's case it had, I believe, been\r\nintensified by his long residence in the tropics. A series of\r\ndisgraceful brawls took place, two of which ended in the\r\npolice-court, until at last he became the terror of the village,\r\nand the folks would fly at his approach, for he is a man of\r\nimmense strength, and absolutely uncontrollable in his anger.\r\n\r\n\"Last week he hurled the local blacksmith over a parapet into a\r\nstream, and it was only by paying over all the money which I\r\ncould gather together that I was able to avert another public\r\nexposure. He had no friends at all save the wandering gipsies,\r\nand he would give these vagabonds leave to encamp upon the few\r\nacres of bramble-covered land which represent the family estate,\r\nand would accept in return the hospitality of their tents,\r\nwandering away with them sometimes for weeks on end. He has a\r\npassion also for Indian animals, which are sent over to him by a\r\ncorrespondent, and he has at this moment a cheetah and a baboon,\r\nwhich wander freely over his grounds and are feared by the\r\nvillagers almost as much as their master.\r\n\r\n\"You can imagine from what I say that my poor sister Julia and I\r\nhad no great pleasure in our lives. No servant would stay with\r\nus, and for a long time we did all the work of the house. She was\r\nbut thirty at the time of her death, and yet her hair had already\r\nbegun to whiten, even as mine has.\"\r\n\r\n\"Your sister is dead, then?\"\r\n\r\n\"She died just two years ago, and it is of her death that I wish\r\nto speak to you. You can understand that, living the life which I\r\nhave described, we were little likely to see anyone of our own\r\nage and position. We had, however, an aunt, my mother's maiden\r\nsister, Miss Honoria Westphail, who lives near Harrow, and we\r\nwere occasionally allowed to pay short visits at this lady's\r\nhouse. Julia went there at Christmas two years ago, and met there\r\na half-pay major of marines, to whom she became engaged. My\r\nstepfather learned of the engagement when my sister returned and\r\noffered no objection to the marriage; but within a fortnight of\r\nthe day which had been fixed for the wedding, the terrible event\r\noccurred which has deprived me of my only companion.\"\r\n\r\nSherlock Holmes had been leaning back in his chair with his eyes\r\nclosed and his head sunk in a cushion, but he half opened his\r\nlids now and glanced across at his visitor.\r\n\r\n\"Pray be precise as to details,\" said he.\r\n\r\n\"It is easy for me to be so, for every event of that dreadful\r\ntime is seared into my memory. The manor-house is, as I have\r\nalready said, very old, and only one wing is now inhabited. The\r\nbedrooms in this wing are on the ground floor, the sitting-rooms\r\nbeing in the central block of the buildings. Of these bedrooms\r\nthe first is Dr. Roylott's, the second my sister's, and the third\r\nmy own. There is no communication between them, but they all open\r\nout into the same corridor. Do I make myself plain?\"\r\n\r\n\"Perfectly so.\"\r\n\r\n\"The windows of the three rooms open out upon the lawn. That\r\nfatal night Dr. Roylott had gone to his room early, though we\r\nknew that he had not retired to rest, for my sister was troubled\r\nby the smell of the strong Indian cigars which it was his custom\r\nto smoke. She left her room, therefore, and came into mine, where\r\nshe sat for some time, chatting about her approaching wedding. At\r\neleven o'clock she rose to leave me, but she paused at the door\r\nand looked back.\r\n\r\n\"'Tell me, Helen,' said she, 'have you ever heard anyone whistle\r\nin the dead of the night?'\r\n\r\n\"'Never,' said I.\r\n\r\n\"'I suppose that you could not possibly whistle, yourself, in\r\nyour sleep?'\r\n\r\n\"'Certainly not. But why?'\r\n\r\n\"'Because during the last few nights I have always, about three\r\nin the morning, heard a low, clear whistle. I am a light sleeper,\r\nand it has awakened me. I cannot tell where it came from--perhaps\r\nfrom the next room, perhaps from the lawn. I thought that I would\r\njust ask you whether you had heard it.'\r\n\r\n\"'No, I have not. It must be those wretched gipsies in the\r\nplantation.'\r\n\r\n\"'Very likely. And yet if it were on the lawn, I wonder that you\r\ndid not hear it also.'\r\n\r\n\"'Ah, but I sleep more heavily than you.'\r\n\r\n\"'Well, it is of no great consequence, at any rate.' She smiled\r\nback at me, closed my door, and a few moments later I heard her\r\nkey turn in the lock.\"\r\n\r\n\"Indeed,\" said Holmes. \"Was it your custom always to lock\r\nyourselves in at night?\"\r\n\r\n\"Always.\"\r\n\r\n\"And why?\"\r\n\r\n\"I think that I mentioned to you that the doctor kept a cheetah\r\nand a baboon. We had no feeling of security unless our doors were\r\nlocked.\"\r\n\r\n\"Quite so. Pray proceed with your statement.\"\r\n\r\n\"I could not sleep that night. A vague feeling of impending\r\nmisfortune impressed me. My sister and I, you will recollect,\r\nwere twins, and you know how subtle are the links which bind two\r\nsouls which are so closely allied. It was a wild night. The wind\r\nwas howling outside, and the rain was beating and splashing\r\nagainst the windows. Suddenly, amid all the hubbub of the gale,\r\nthere burst forth the wild scream of a terrified woman. I knew\r\nthat it was my sister's voice. I sprang from my bed, wrapped a\r\nshawl round me, and rushed into the corridor. As I opened my door\r\nI seemed to hear a low whistle, such as my sister described, and\r\na few moments later a clanging sound, as if a mass of metal had\r\nfallen. As I ran down the passage, my sister's door was unlocked,\r\nand revolved slowly upon its hinges. I stared at it\r\nhorror-stricken, not knowing what was about to issue from it. By\r\nthe light of the corridor-lamp I saw my sister appear at the\r\nopening, her face blanched with terror, her hands groping for\r\nhelp, her whole figure swaying to and fro like that of a\r\ndrunkard. I ran to her and threw my arms round her, but at that\r\nmoment her knees seemed to give way and she fell to the ground.\r\nShe writhed as one who is in terrible pain, and her limbs were\r\ndreadfully convulsed. At first I thought that she had not\r\nrecognised me, but as I bent over her she suddenly shrieked out\r\nin a voice which I shall never forget, 'Oh, my God! Helen! It was\r\nthe band! The speckled band!' There was something else which she\r\nwould fain have said, and she stabbed with her finger into the\r\nair in the direction of the doctor's room, but a fresh convulsion\r\nseized her and choked her words. I rushed out, calling loudly for\r\nmy stepfather, and I met him hastening from his room in his\r\ndressing-gown. When he reached my sister's side she was\r\nunconscious, and though he poured brandy down her throat and sent\r\nfor medical aid from the village, all efforts were in vain, for\r\nshe slowly sank and died without having recovered her\r\nconsciousness. Such was the dreadful end of my beloved sister.\"\r\n\r\n\"One moment,\" said Holmes, \"are you sure about this whistle and\r\nmetallic sound? Could you swear to it?\"\r\n\r\n\"That was what the county coroner asked me at the inquiry. It is\r\nmy strong impression that I heard it, and yet, among the crash of\r\nthe gale and the creaking of an old house, I may possibly have\r\nbeen deceived.\"\r\n\r\n\"Was your sister dressed?\"\r\n\r\n\"No, she was in her night-dress. In her right hand was found the\r\ncharred stump of a match, and in her left a match-box.\"\r\n\r\n\"Showing that she had struck a light and looked about her when\r\nthe alarm took place. That is important. And what conclusions did\r\nthe coroner come to?\"\r\n\r\n\"He investigated the case with great care, for Dr. Roylott's\r\nconduct had long been notorious in the county, but he was unable\r\nto find any satisfactory cause of death. My evidence showed that\r\nthe door had been fastened upon the inner side, and the windows\r\nwere blocked by old-fashioned shutters with broad iron bars,\r\nwhich were secured every night. The walls were carefully sounded,\r\nand were shown to be quite solid all round, and the flooring was\r\nalso thoroughly examined, with the same result. The chimney is\r\nwide, but is barred up by four large staples. It is certain,\r\ntherefore, that my sister was quite alone when she met her end.\r\nBesides, there were no marks of any violence upon her.\"\r\n\r\n\"How about poison?\"\r\n\r\n\"The doctors examined her for it, but without success.\"\r\n\r\n\"What do you think that this unfortunate lady died of, then?\"\r\n\r\n\"It is my belief that she died of pure fear and nervous shock,\r\nthough what it was that frightened her I cannot imagine.\"\r\n\r\n\"Were there gipsies in the plantation at the time?\"\r\n\r\n\"Yes, there are nearly always some there.\"\r\n\r\n\"Ah, and what did you gather from this allusion to a band--a\r\nspeckled band?\"\r\n\r\n\"Sometimes I have thought that it was merely the wild talk of\r\ndelirium, sometimes that it may have referred to some band of\r\npeople, perhaps to these very gipsies in the plantation. I do not\r\nknow whether the spotted handkerchiefs which so many of them wear\r\nover their heads might have suggested the strange adjective which\r\nshe used.\"\r\n\r\nHolmes shook his head like a man who is far from being satisfied.\r\n\r\n\"These are very deep waters,\" said he; \"pray go on with your\r\nnarrative.\"\r\n\r\n\"Two years have passed since then, and my life has been until\r\nlately lonelier than ever. A month ago, however, a dear friend,\r\nwhom I have known for many years, has done me the honour to ask\r\nmy hand in marriage. His name is Armitage--Percy Armitage--the\r\nsecond son of Mr. Armitage, of Crane Water, near Reading. My\r\nstepfather has offered no opposition to the match, and we are to\r\nbe married in the course of the spring. Two days ago some repairs\r\nwere started in the west wing of the building, and my bedroom\r\nwall has been pierced, so that I have had to move into the\r\nchamber in which my sister died, and to sleep in the very bed in\r\nwhich she slept. Imagine, then, my thrill of terror when last\r\nnight, as I lay awake, thinking over her terrible fate, I\r\nsuddenly heard in the silence of the night the low whistle which\r\nhad been the herald of her own death. I sprang up and lit the\r\nlamp, but nothing was to be seen in the room. I was too shaken to\r\ngo to bed again, however, so I dressed, and as soon as it was\r\ndaylight I slipped down, got a dog-cart at the Crown Inn, which\r\nis opposite, and drove to Leatherhead, from whence I have come on\r\nthis morning with the one object of seeing you and asking your\r\nadvice.\"\r\n\r\n\"You have done wisely,\" said my friend. \"But have you told me\r\nall?\"\r\n\r\n\"Yes, all.\"\r\n\r\n\"Miss Roylott, you have not. You are screening your stepfather.\"\r\n\r\n\"Why, what do you mean?\"\r\n\r\nFor answer Holmes pushed back the frill of black lace which\r\nfringed the hand that lay upon our visitor's knee. Five little\r\nlivid spots, the marks of four fingers and a thumb, were printed\r\nupon the white wrist.\r\n\r\n\"You have been cruelly used,\" said Holmes.\r\n\r\nThe lady coloured deeply and covered over her injured wrist. \"He\r\nis a hard man,\" she said, \"and perhaps he hardly knows his own\r\nstrength.\"\r\n\r\nThere was a long silence, during which Holmes leaned his chin\r\nupon his hands and stared into the crackling fire.\r\n\r\n\"This is a very deep business,\" he said at last. \"There are a\r\nthousand details which I should desire to know before I decide\r\nupon our course of action. Yet we have not a moment to lose. If\r\nwe were to come to Stoke Moran to-day, would it be possible for\r\nus to see over these rooms without the knowledge of your\r\nstepfather?\"\r\n\r\n\"As it happens, he spoke of coming into town to-day upon some\r\nmost important business. It is probable that he will be away all\r\nday, and that there would be nothing to disturb you. We have a\r\nhousekeeper now, but she is old and foolish, and I could easily\r\nget her out of the way.\"\r\n\r\n\"Excellent. You are not averse to this trip, Watson?\"\r\n\r\n\"By no means.\"\r\n\r\n\"Then we shall both come. What are you going to do yourself?\"\r\n\r\n\"I have one or two things which I would wish to do now that I am\r\nin town. But I shall return by the twelve o'clock train, so as to\r\nbe there in time for your coming.\"\r\n\r\n\"And you may expect us early in the afternoon. I have myself some\r\nsmall business matters to attend to. Will you not wait and\r\nbreakfast?\"\r\n\r\n\"No, I must go. My heart is lightened already since I have\r\nconfided my trouble to you. I shall look forward to seeing you\r\nagain this afternoon.\" She dropped her thick black veil over her\r\nface and glided from the room.\r\n\r\n\"And what do you think of it all, Watson?\" asked Sherlock Holmes,\r\nleaning back in his chair.\r\n\r\n\"It seems to me to be a most dark and sinister business.\"\r\n\r\n\"Dark enough and sinister enough.\"\r\n\r\n\"Yet if the lady is correct in saying that the flooring and walls\r\nare sound, and that the door, window, and chimney are impassable,\r\nthen her sister must have been undoubtedly alone when she met her\r\nmysterious end.\"\r\n\r\n\"What becomes, then, of these nocturnal whistles, and what of the\r\nvery peculiar words of the dying woman?\"\r\n\r\n\"I cannot think.\"\r\n\r\n\"When you combine the ideas of whistles at night, the presence of\r\na band of gipsies who are on intimate terms with this old doctor,\r\nthe fact that we have every reason to believe that the doctor has\r\nan interest in preventing his stepdaughter's marriage, the dying\r\nallusion to a band, and, finally, the fact that Miss Helen Stoner\r\nheard a metallic clang, which might have been caused by one of\r\nthose metal bars that secured the shutters falling back into its\r\nplace, I think that there is good ground to think that the\r\nmystery may be cleared along those lines.\"\r\n\r\n\"But what, then, did the gipsies do?\"\r\n\r\n\"I cannot imagine.\"\r\n\r\n\"I see many objections to any such theory.\"\r\n\r\n\"And so do I. It is precisely for that reason that we are going\r\nto Stoke Moran this day. I want to see whether the objections are\r\nfatal, or if they may be explained away. But what in the name of\r\nthe devil!\"\r\n\r\nThe ejaculation had been drawn from my companion by the fact that\r\nour door had been suddenly dashed open, and that a huge man had\r\nframed himself in the aperture. His costume was a peculiar\r\nmixture of the professional and of the agricultural, having a\r\nblack top-hat, a long frock-coat, and a pair of high gaiters,\r\nwith a hunting-crop swinging in his hand. So tall was he that his\r\nhat actually brushed the cross bar of the doorway, and his\r\nbreadth seemed to span it across from side to side. A large face,\r\nseared with a thousand wrinkles, burned yellow with the sun, and\r\nmarked with every evil passion, was turned from one to the other\r\nof us, while his deep-set, bile-shot eyes, and his high, thin,\r\nfleshless nose, gave him somewhat the resemblance to a fierce old\r\nbird of prey.\r\n\r\n\"Which of you is Holmes?\" asked this apparition.\r\n\r\n\"My name, sir; but you have the advantage of me,\" said my\r\ncompanion quietly.\r\n\r\n\"I am Dr. Grimesby Roylott, of Stoke Moran.\"\r\n\r\n\"Indeed, Doctor,\" said Holmes blandly. \"Pray take a seat.\"\r\n\r\n\"I will do nothing of the kind. My stepdaughter has been here. I\r\nhave traced her. What has she been saying to you?\"\r\n\r\n\"It is a little cold for the time of the year,\" said Holmes.\r\n\r\n\"What has she been saying to you?\" screamed the old man\r\nfuriously.\r\n\r\n\"But I have heard that the crocuses promise well,\" continued my\r\ncompanion imperturbably.\r\n\r\n\"Ha! You put me off, do you?\" said our new visitor, taking a step\r\nforward and shaking his hunting-crop. \"I know you, you scoundrel!\r\nI have heard of you before. You are Holmes, the meddler.\"\r\n\r\nMy friend smiled.\r\n\r\n\"Holmes, the busybody!\"\r\n\r\nHis smile broadened.\r\n\r\n\"Holmes, the Scotland Yard Jack-in-office!\"\r\n\r\nHolmes chuckled heartily. \"Your conversation is most\r\nentertaining,\" said he. \"When you go out close the door, for\r\nthere is a decided draught.\"\r\n\r\n\"I will go when I have said my say. Don't you dare to meddle with\r\nmy affairs. I know that Miss Stoner has been here. I traced her!\r\nI am a dangerous man to fall foul of! See here.\" He stepped\r\nswiftly forward, seized the poker, and bent it into a curve with\r\nhis huge brown hands.\r\n\r\n\"See that you keep yourself out of my grip,\" he snarled, and\r\nhurling the twisted poker into the fireplace he strode out of the\r\nroom.\r\n\r\n\"He seems a very amiable person,\" said Holmes, laughing. \"I am\r\nnot quite so bulky, but if he had remained I might have shown him\r\nthat my grip was not much more feeble than his own.\" As he spoke\r\nhe picked up the steel poker and, with a sudden effort,\r\nstraightened it out again.\r\n\r\n\"Fancy his having the insolence to confound me with the official\r\ndetective force! This incident gives zest to our investigation,\r\nhowever, and I only trust that our little friend will not suffer\r\nfrom her imprudence in allowing this brute to trace her. And now,\r\nWatson, we shall order breakfast, and afterwards I shall walk\r\ndown to Doctors' Commons, where I hope to get some data which may\r\nhelp us in this matter.\"\r\n\r\n\r\nIt was nearly one o'clock when Sherlock Holmes returned from his\r\nexcursion. He held in his hand a sheet of blue paper, scrawled\r\nover with notes and figures.\r\n\r\n\"I have seen the will of the deceased wife,\" said he. \"To\r\ndetermine its exact meaning I have been obliged to work out the\r\npresent prices of the investments with which it is concerned. The\r\ntotal income, which at the time of the wife's death was little\r\nshort of 1100 pounds, is now, through the fall in agricultural\r\nprices, not more than 750 pounds. Each daughter can claim an\r\nincome of 250 pounds, in case of marriage. It is evident,\r\ntherefore, that if both girls had married, this beauty would have\r\nhad a mere pittance, while even one of them would cripple him to\r\na very serious extent. My morning's work has not been wasted,\r\nsince it has proved that he has the very strongest motives for\r\nstanding in the way of anything of the sort. And now, Watson,\r\nthis is too serious for dawdling, especially as the old man is\r\naware that we are interesting ourselves in his affairs; so if you\r\nare ready, we shall call a cab and drive to Waterloo. I should be\r\nvery much obliged if you would slip your revolver into your\r\npocket. An Eley's No. 2 is an excellent argument with gentlemen\r\nwho can twist steel pokers into knots. That and a tooth-brush\r\nare, I think, all that we need.\"\r\n\r\nAt Waterloo we were fortunate in catching a train for\r\nLeatherhead, where we hired a trap at the station inn and drove\r\nfor four or five miles through the lovely Surrey lanes. It was a\r\nperfect day, with a bright sun and a few fleecy clouds in the\r\nheavens. The trees and wayside hedges were just throwing out\r\ntheir first green shoots, and the air was full of the pleasant\r\nsmell of the moist earth. To me at least there was a strange\r\ncontrast between the sweet promise of the spring and this\r\nsinister quest upon which we were engaged. My companion sat in\r\nthe front of the trap, his arms folded, his hat pulled down over\r\nhis eyes, and his chin sunk upon his breast, buried in the\r\ndeepest thought. Suddenly, however, he started, tapped me on the\r\nshoulder, and pointed over the meadows.\r\n\r\n\"Look there!\" said he.\r\n\r\nA heavily timbered park stretched up in a gentle slope,\r\nthickening into a grove at the highest point. From amid the\r\nbranches there jutted out the grey gables and high roof-tree of a\r\nvery old mansion.\r\n\r\n\"Stoke Moran?\" said he.\r\n\r\n\"Yes, sir, that be the house of Dr. Grimesby Roylott,\" remarked\r\nthe driver.\r\n\r\n\"There is some building going on there,\" said Holmes; \"that is\r\nwhere we are going.\"\r\n\r\n\"There's the village,\" said the driver, pointing to a cluster of\r\nroofs some distance to the left; \"but if you want to get to the\r\nhouse, you'll find it shorter to get over this stile, and so by\r\nthe foot-path over the fields. There it is, where the lady is\r\nwalking.\"\r\n\r\n\"And the lady, I fancy, is Miss Stoner,\" observed Holmes, shading\r\nhis eyes. \"Yes, I think we had better do as you suggest.\"\r\n\r\nWe got off, paid our fare, and the trap rattled back on its way\r\nto Leatherhead.\r\n\r\n\"I thought it as well,\" said Holmes as we climbed the stile,\r\n\"that this fellow should think we had come here as architects, or\r\non some definite business. It may stop his gossip.\r\nGood-afternoon, Miss Stoner. You see that we have been as good as\r\nour word.\"\r\n\r\nOur client of the morning had hurried forward to meet us with a\r\nface which spoke her joy. \"I have been waiting so eagerly for\r\nyou,\" she cried, shaking hands with us warmly. \"All has turned\r\nout splendidly. Dr. Roylott has gone to town, and it is unlikely\r\nthat he will be back before evening.\"\r\n\r\n\"We have had the pleasure of making the doctor's acquaintance,\"\r\nsaid Holmes, and in a few words he sketched out what had\r\noccurred. Miss Stoner turned white to the lips as she listened.\r\n\r\n\"Good heavens!\" she cried, \"he has followed me, then.\"\r\n\r\n\"So it appears.\"\r\n\r\n\"He is so cunning that I never know when I am safe from him. What\r\nwill he say when he returns?\"\r\n\r\n\"He must guard himself, for he may find that there is someone\r\nmore cunning than himself upon his track. You must lock yourself\r\nup from him to-night. If he is violent, we shall take you away to\r\nyour aunt's at Harrow. Now, we must make the best use of our\r\ntime, so kindly take us at once to the rooms which we are to\r\nexamine.\"\r\n\r\nThe building was of grey, lichen-blotched stone, with a high\r\ncentral portion and two curving wings, like the claws of a crab,\r\nthrown out on each side. In one of these wings the windows were\r\nbroken and blocked with wooden boards, while the roof was partly\r\ncaved in, a picture of ruin. The central portion was in little\r\nbetter repair, but the right-hand block was comparatively modern,\r\nand the blinds in the windows, with the blue smoke curling up\r\nfrom the chimneys, showed that this was where the family resided.\r\nSome scaffolding had been erected against the end wall, and the\r\nstone-work had been broken into, but there were no signs of any\r\nworkmen at the moment of our visit. Holmes walked slowly up and\r\ndown the ill-trimmed lawn and examined with deep attention the\r\noutsides of the windows.\r\n\r\n\"This, I take it, belongs to the room in which you used to sleep,\r\nthe centre one to your sister's, and the one next to the main\r\nbuilding to Dr. Roylott's chamber?\"\r\n\r\n\"Exactly so. But I am now sleeping in the middle one.\"\r\n\r\n\"Pending the alterations, as I understand. By the way, there does\r\nnot seem to be any very pressing need for repairs at that end\r\nwall.\"\r\n\r\n\"There were none. I believe that it was an excuse to move me from\r\nmy room.\"\r\n\r\n\"Ah! that is suggestive. Now, on the other side of this narrow\r\nwing runs the corridor from which these three rooms open. There\r\nare windows in it, of course?\"\r\n\r\n\"Yes, but very small ones. Too narrow for anyone to pass\r\nthrough.\"\r\n\r\n\"As you both locked your doors at night, your rooms were\r\nunapproachable from that side. Now, would you have the kindness\r\nto go into your room and bar your shutters?\"\r\n\r\nMiss Stoner did so, and Holmes, after a careful examination\r\nthrough the open window, endeavoured in every way to force the\r\nshutter open, but without success. There was no slit through\r\nwhich a knife could be passed to raise the bar. Then with his\r\nlens he tested the hinges, but they were of solid iron, built\r\nfirmly into the massive masonry. \"Hum!\" said he, scratching his\r\nchin in some perplexity, \"my theory certainly presents some\r\ndifficulties. No one could pass these shutters if they were\r\nbolted. Well, we shall see if the inside throws any light upon\r\nthe matter.\"\r\n\r\nA small side door led into the whitewashed corridor from which\r\nthe three bedrooms opened. Holmes refused to examine the third\r\nchamber, so we passed at once to the second, that in which Miss\r\nStoner was now sleeping, and in which her sister had met with her\r\nfate. It was a homely little room, with a low ceiling and a\r\ngaping fireplace, after the fashion of old country-houses. A\r\nbrown chest of drawers stood in one corner, a narrow\r\nwhite-counterpaned bed in another, and a dressing-table on the\r\nleft-hand side of the window. These articles, with two small\r\nwicker-work chairs, made up all the furniture in the room save\r\nfor a square of Wilton carpet in the centre. The boards round and\r\nthe panelling of the walls were of brown, worm-eaten oak, so old\r\nand discoloured that it may have dated from the original building\r\nof the house. Holmes drew one of the chairs into a corner and sat\r\nsilent, while his eyes travelled round and round and up and down,\r\ntaking in every detail of the apartment.\r\n\r\n\"Where does that bell communicate with?\" he asked at last\r\npointing to a thick bell-rope which hung down beside the bed, the\r\ntassel actually lying upon the pillow.\r\n\r\n\"It goes to the housekeeper's room.\"\r\n\r\n\"It looks newer than the other things?\"\r\n\r\n\"Yes, it was only put there a couple of years ago.\"\r\n\r\n\"Your sister asked for it, I suppose?\"\r\n\r\n\"No, I never heard of her using it. We used always to get what we\r\nwanted for ourselves.\"\r\n\r\n\"Indeed, it seemed unnecessary to put so nice a bell-pull there.\r\nYou will excuse me for a few minutes while I satisfy myself as to\r\nthis floor.\" He threw himself down upon his face with his lens in\r\nhis hand and crawled swiftly backward and forward, examining\r\nminutely the cracks between the boards. Then he did the same with\r\nthe wood-work with which the chamber was panelled. Finally he\r\nwalked over to the bed and spent some time in staring at it and\r\nin running his eye up and down the wall. Finally he took the\r\nbell-rope in his hand and gave it a brisk tug.\r\n\r\n\"Why, it's a dummy,\" said he.\r\n\r\n\"Won't it ring?\"\r\n\r\n\"No, it is not even attached to a wire. This is very interesting.\r\nYou can see now that it is fastened to a hook just above where\r\nthe little opening for the ventilator is.\"\r\n\r\n\"How very absurd! I never noticed that before.\"\r\n\r\n\"Very strange!\" muttered Holmes, pulling at the rope. \"There are\r\none or two very singular points about this room. For example,\r\nwhat a fool a builder must be to open a ventilator into another\r\nroom, when, with the same trouble, he might have communicated\r\nwith the outside air!\"\r\n\r\n\"That is also quite modern,\" said the lady.\r\n\r\n\"Done about the same time as the bell-rope?\" remarked Holmes.\r\n\r\n\"Yes, there were several little changes carried out about that\r\ntime.\"\r\n\r\n\"They seem to have been of a most interesting character--dummy\r\nbell-ropes, and ventilators which do not ventilate. With your\r\npermission, Miss Stoner, we shall now carry our researches into\r\nthe inner apartment.\"\r\n\r\nDr. Grimesby Roylott's chamber was larger than that of his\r\nstep-daughter, but was as plainly furnished. A camp-bed, a small\r\nwooden shelf full of books, mostly of a technical character, an\r\narmchair beside the bed, a plain wooden chair against the wall, a\r\nround table, and a large iron safe were the principal things\r\nwhich met the eye. Holmes walked slowly round and examined each\r\nand all of them with the keenest interest.\r\n\r\n\"What's in here?\" he asked, tapping the safe.\r\n\r\n\"My stepfather's business papers.\"\r\n\r\n\"Oh! you have seen inside, then?\"\r\n\r\n\"Only once, some years ago. I remember that it was full of\r\npapers.\"\r\n\r\n\"There isn't a cat in it, for example?\"\r\n\r\n\"No. What a strange idea!\"\r\n\r\n\"Well, look at this!\" He took up a small saucer of milk which\r\nstood on the top of it.\r\n\r\n\"No; we don't keep a cat. But there is a cheetah and a baboon.\"\r\n\r\n\"Ah, yes, of course! Well, a cheetah is just a big cat, and yet a\r\nsaucer of milk does not go very far in satisfying its wants, I\r\ndaresay. There is one point which I should wish to determine.\" He\r\nsquatted down in front of the wooden chair and examined the seat\r\nof it with the greatest attention.\r\n\r\n\"Thank you. That is quite settled,\" said he, rising and putting\r\nhis lens in his pocket. \"Hullo! Here is something interesting!\"\r\n\r\nThe object which had caught his eye was a small dog lash hung on\r\none corner of the bed. The lash, however, was curled upon itself\r\nand tied so as to make a loop of whipcord.\r\n\r\n\"What do you make of that, Watson?\"\r\n\r\n\"It's a common enough lash. But I don't know why it should be\r\ntied.\"\r\n\r\n\"That is not quite so common, is it? Ah, me! it's a wicked world,\r\nand when a clever man turns his brains to crime it is the worst\r\nof all. I think that I have seen enough now, Miss Stoner, and\r\nwith your permission we shall walk out upon the lawn.\"\r\n\r\nI had never seen my friend's face so grim or his brow so dark as\r\nit was when we turned from the scene of this investigation. We\r\nhad walked several times up and down the lawn, neither Miss\r\nStoner nor myself liking to break in upon his thoughts before he\r\nroused himself from his reverie.\r\n\r\n\"It is very essential, Miss Stoner,\" said he, \"that you should\r\nabsolutely follow my advice in every respect.\"\r\n\r\n\"I shall most certainly do so.\"\r\n\r\n\"The matter is too serious for any hesitation. Your life may\r\ndepend upon your compliance.\"\r\n\r\n\"I assure you that I am in your hands.\"\r\n\r\n\"In the first place, both my friend and I must spend the night in\r\nyour room.\"\r\n\r\nBoth Miss Stoner and I gazed at him in astonishment.\r\n\r\n\"Yes, it must be so. Let me explain. I believe that that is the\r\nvillage inn over there?\"\r\n\r\n\"Yes, that is the Crown.\"\r\n\r\n\"Very good. Your windows would be visible from there?\"\r\n\r\n\"Certainly.\"\r\n\r\n\"You must confine yourself to your room, on pretence of a\r\nheadache, when your stepfather comes back. Then when you hear him\r\nretire for the night, you must open the shutters of your window,\r\nundo the hasp, put your lamp there as a signal to us, and then\r\nwithdraw quietly with everything which you are likely to want\r\ninto the room which you used to occupy. I have no doubt that, in\r\nspite of the repairs, you could manage there for one night.\"\r\n\r\n\"Oh, yes, easily.\"\r\n\r\n\"The rest you will leave in our hands.\"\r\n\r\n\"But what will you do?\"\r\n\r\n\"We shall spend the night in your room, and we shall investigate\r\nthe cause of this noise which has disturbed you.\"\r\n\r\n\"I believe, Mr. Holmes, that you have already made up your mind,\"\r\nsaid Miss Stoner, laying her hand upon my companion's sleeve.\r\n\r\n\"Perhaps I have.\"\r\n\r\n\"Then, for pity's sake, tell me what was the cause of my sister's\r\ndeath.\"\r\n\r\n\"I should prefer to have clearer proofs before I speak.\"\r\n\r\n\"You can at least tell me whether my own thought is correct, and\r\nif she died from some sudden fright.\"\r\n\r\n\"No, I do not think so. I think that there was probably some more\r\ntangible cause. And now, Miss Stoner, we must leave you for if\r\nDr. Roylott returned and saw us our journey would be in vain.\r\nGood-bye, and be brave, for if you will do what I have told you,\r\nyou may rest assured that we shall soon drive away the dangers\r\nthat threaten you.\"\r\n\r\nSherlock Holmes and I had no difficulty in engaging a bedroom and\r\nsitting-room at the Crown Inn. They were on the upper floor, and\r\nfrom our window we could command a view of the avenue gate, and\r\nof the inhabited wing of Stoke Moran Manor House. At dusk we saw\r\nDr. Grimesby Roylott drive past, his huge form looming up beside\r\nthe little figure of the lad who drove him. The boy had some\r\nslight difficulty in undoing the heavy iron gates, and we heard\r\nthe hoarse roar of the doctor's voice and saw the fury with which\r\nhe shook his clinched fists at him. The trap drove on, and a few\r\nminutes later we saw a sudden light spring up among the trees as\r\nthe lamp was lit in one of the sitting-rooms.\r\n\r\n\"Do you know, Watson,\" said Holmes as we sat together in the\r\ngathering darkness, \"I have really some scruples as to taking you\r\nto-night. There is a distinct element of danger.\"\r\n\r\n\"Can I be of assistance?\"\r\n\r\n\"Your presence might be invaluable.\"\r\n\r\n\"Then I shall certainly come.\"\r\n\r\n\"It is very kind of you.\"\r\n\r\n\"You speak of danger. You have evidently seen more in these rooms\r\nthan was visible to me.\"\r\n\r\n\"No, but I fancy that I may have deduced a little more. I imagine\r\nthat you saw all that I did.\"\r\n\r\n\"I saw nothing remarkable save the bell-rope, and what purpose\r\nthat could answer I confess is more than I can imagine.\"\r\n\r\n\"You saw the ventilator, too?\"\r\n\r\n\"Yes, but I do not think that it is such a very unusual thing to\r\nhave a small opening between two rooms. It was so small that a\r\nrat could hardly pass through.\"\r\n\r\n\"I knew that we should find a ventilator before ever we came to\r\nStoke Moran.\"\r\n\r\n\"My dear Holmes!\"\r\n\r\n\"Oh, yes, I did. You remember in her statement she said that her\r\nsister could smell Dr. Roylott's cigar. Now, of course that\r\nsuggested at once that there must be a communication between the\r\ntwo rooms. It could only be a small one, or it would have been\r\nremarked upon at the coroner's inquiry. I deduced a ventilator.\"\r\n\r\n\"But what harm can there be in that?\"\r\n\r\n\"Well, there is at least a curious coincidence of dates. A\r\nventilator is made, a cord is hung, and a lady who sleeps in the\r\nbed dies. Does not that strike you?\"\r\n\r\n\"I cannot as yet see any connection.\"\r\n\r\n\"Did you observe anything very peculiar about that bed?\"\r\n\r\n\"No.\"\r\n\r\n\"It was clamped to the floor. Did you ever see a bed fastened\r\nlike that before?\"\r\n\r\n\"I cannot say that I have.\"\r\n\r\n\"The lady could not move her bed. It must always be in the same\r\nrelative position to the ventilator and to the rope--or so we may\r\ncall it, since it was clearly never meant for a bell-pull.\"\r\n\r\n\"Holmes,\" I cried, \"I seem to see dimly what you are hinting at.\r\nWe are only just in time to prevent some subtle and horrible\r\ncrime.\"\r\n\r\n\"Subtle enough and horrible enough. When a doctor does go wrong\r\nhe is the first of criminals. He has nerve and he has knowledge.\r\nPalmer and Pritchard were among the heads of their profession.\r\nThis man strikes even deeper, but I think, Watson, that we shall\r\nbe able to strike deeper still. But we shall have horrors enough\r\nbefore the night is over; for goodness' sake let us have a quiet\r\npipe and turn our minds for a few hours to something more\r\ncheerful.\"\r\n\r\n\r\nAbout nine o'clock the light among the trees was extinguished,\r\nand all was dark in the direction of the Manor House. Two hours\r\npassed slowly away, and then, suddenly, just at the stroke of\r\neleven, a single bright light shone out right in front of us.\r\n\r\n\"That is our signal,\" said Holmes, springing to his feet; \"it\r\ncomes from the middle window.\"\r\n\r\nAs we passed out he exchanged a few words with the landlord,\r\nexplaining that we were going on a late visit to an acquaintance,\r\nand that it was possible that we might spend the night there. A\r\nmoment later we were out on the dark road, a chill wind blowing\r\nin our faces, and one yellow light twinkling in front of us\r\nthrough the gloom to guide us on our sombre errand.\r\n\r\nThere was little difficulty in entering the grounds, for\r\nunrepaired breaches gaped in the old park wall. Making our way\r\namong the trees, we reached the lawn, crossed it, and were about\r\nto enter through the window when out from a clump of laurel\r\nbushes there darted what seemed to be a hideous and distorted\r\nchild, who threw itself upon the grass with writhing limbs and\r\nthen ran swiftly across the lawn into the darkness.\r\n\r\n\"My God!\" I whispered; \"did you see it?\"\r\n\r\nHolmes was for the moment as startled as I. His hand closed like\r\na vice upon my wrist in his agitation. Then he broke into a low\r\nlaugh and put his lips to my ear.\r\n\r\n\"It is a nice household,\" he murmured. \"That is the baboon.\"\r\n\r\nI had forgotten the strange pets which the doctor affected. There\r\nwas a cheetah, too; perhaps we might find it upon our shoulders\r\nat any moment. I confess that I felt easier in my mind when,\r\nafter following Holmes' example and slipping off my shoes, I\r\nfound myself inside the bedroom. My companion noiselessly closed\r\nthe shutters, moved the lamp onto the table, and cast his eyes\r\nround the room. All was as we had seen it in the daytime. Then\r\ncreeping up to me and making a trumpet of his hand, he whispered\r\ninto my ear again so gently that it was all that I could do to\r\ndistinguish the words:\r\n\r\n\"The least sound would be fatal to our plans.\"\r\n\r\nI nodded to show that I had heard.\r\n\r\n\"We must sit without light. He would see it through the\r\nventilator.\"\r\n\r\nI nodded again.\r\n\r\n\"Do not go asleep; your very life may depend upon it. Have your\r\npistol ready in case we should need it. I will sit on the side of\r\nthe bed, and you in that chair.\"\r\n\r\nI took out my revolver and laid it on the corner of the table.\r\n\r\nHolmes had brought up a long thin cane, and this he placed upon\r\nthe bed beside him. By it he laid the box of matches and the\r\nstump of a candle. Then he turned down the lamp, and we were left\r\nin darkness.\r\n\r\nHow shall I ever forget that dreadful vigil? I could not hear a\r\nsound, not even the drawing of a breath, and yet I knew that my\r\ncompanion sat open-eyed, within a few feet of me, in the same\r\nstate of nervous tension in which I was myself. The shutters cut\r\noff the least ray of light, and we waited in absolute darkness.\r\n\r\nFrom outside came the occasional cry of a night-bird, and once at\r\nour very window a long drawn catlike whine, which told us that\r\nthe cheetah was indeed at liberty. Far away we could hear the\r\ndeep tones of the parish clock, which boomed out every quarter of\r\nan hour. How long they seemed, those quarters! Twelve struck, and\r\none and two and three, and still we sat waiting silently for\r\nwhatever might befall.\r\n\r\nSuddenly there was the momentary gleam of a light up in the\r\ndirection of the ventilator, which vanished immediately, but was\r\nsucceeded by a strong smell of burning oil and heated metal.\r\nSomeone in the next room had lit a dark-lantern. I heard a gentle\r\nsound of movement, and then all was silent once more, though the\r\nsmell grew stronger. For half an hour I sat with straining ears.\r\nThen suddenly another sound became audible--a very gentle,\r\nsoothing sound, like that of a small jet of steam escaping\r\ncontinually from a kettle. The instant that we heard it, Holmes\r\nsprang from the bed, struck a match, and lashed furiously with\r\nhis cane at the bell-pull.\r\n\r\n\"You see it, Watson?\" he yelled. \"You see it?\"\r\n\r\nBut I saw nothing. At the moment when Holmes struck the light I\r\nheard a low, clear whistle, but the sudden glare flashing into my\r\nweary eyes made it impossible for me to tell what it was at which\r\nmy friend lashed so savagely. I could, however, see that his face\r\nwas deadly pale and filled with horror and loathing. He had\r\nceased to strike and was gazing up at the ventilator when\r\nsuddenly there broke from the silence of the night the most\r\nhorrible cry to which I have ever listened. It swelled up louder\r\nand louder, a hoarse yell of pain and fear and anger all mingled\r\nin the one dreadful shriek. They say that away down in the\r\nvillage, and even in the distant parsonage, that cry raised the\r\nsleepers from their beds. It struck cold to our hearts, and I\r\nstood gazing at Holmes, and he at me, until the last echoes of it\r\nhad died away into the silence from which it rose.\r\n\r\n\"What can it mean?\" I gasped.\r\n\r\n\"It means that it is all over,\" Holmes answered. \"And perhaps,\r\nafter all, it is for the best. Take your pistol, and we will\r\nenter Dr. Roylott's room.\"\r\n\r\nWith a grave face he lit the lamp and led the way down the\r\ncorridor. Twice he struck at the chamber door without any reply\r\nfrom within. Then he turned the handle and entered, I at his\r\nheels, with the cocked pistol in my hand.\r\n\r\nIt was a singular sight which met our eyes. On the table stood a\r\ndark-lantern with the shutter half open, throwing a brilliant\r\nbeam of light upon the iron safe, the door of which was ajar.\r\nBeside this table, on the wooden chair, sat Dr. Grimesby Roylott\r\nclad in a long grey dressing-gown, his bare ankles protruding\r\nbeneath, and his feet thrust into red heelless Turkish slippers.\r\nAcross his lap lay the short stock with the long lash which we\r\nhad noticed during the day. His chin was cocked upward and his\r\neyes were fixed in a dreadful, rigid stare at the corner of the\r\nceiling. Round his brow he had a peculiar yellow band, with\r\nbrownish speckles, which seemed to be bound tightly round his\r\nhead. As we entered he made neither sound nor motion.\r\n\r\n\"The band! the speckled band!\" whispered Holmes.\r\n\r\nI took a step forward. In an instant his strange headgear began\r\nto move, and there reared itself from among his hair the squat\r\ndiamond-shaped head and puffed neck of a loathsome serpent.\r\n\r\n\"It is a swamp adder!\" cried Holmes; \"the deadliest snake in\r\nIndia. He has died within ten seconds of being bitten. Violence\r\ndoes, in truth, recoil upon the violent, and the schemer falls\r\ninto the pit which he digs for another. Let us thrust this\r\ncreature back into its den, and we can then remove Miss Stoner to\r\nsome place of shelter and let the county police know what has\r\nhappened.\"\r\n\r\nAs he spoke he drew the dog-whip swiftly from the dead man's lap,\r\nand throwing the noose round the reptile's neck he drew it from\r\nits horrid perch and, carrying it at arm's length, threw it into\r\nthe iron safe, which he closed upon it.\r\n\r\nSuch are the true facts of the death of Dr. Grimesby Roylott, of\r\nStoke Moran. It is not necessary that I should prolong a\r\nnarrative which has already run to too great a length by telling\r\nhow we broke the sad news to the terrified girl, how we conveyed\r\nher by the morning train to the care of her good aunt at Harrow,\r\nof how the slow process of official inquiry came to the\r\nconclusion that the doctor met his fate while indiscreetly\r\nplaying with a dangerous pet. The little which I had yet to learn\r\nof the case was told me by Sherlock Holmes as we travelled back\r\nnext day.\r\n\r\n\"I had,\" said he, \"come to an entirely erroneous conclusion which\r\nshows, my dear Watson, how dangerous it always is to reason from\r\ninsufficient data. The presence of the gipsies, and the use of\r\nthe word 'band,' which was used by the poor girl, no doubt, to\r\nexplain the appearance which she had caught a hurried glimpse of\r\nby the light of her match, were sufficient to put me upon an\r\nentirely wrong scent. I can only claim the merit that I instantly\r\nreconsidered my position when, however, it became clear to me\r\nthat whatever danger threatened an occupant of the room could not\r\ncome either from the window or the door. My attention was\r\nspeedily drawn, as I have already remarked to you, to this\r\nventilator, and to the bell-rope which hung down to the bed. The\r\ndiscovery that this was a dummy, and that the bed was clamped to\r\nthe floor, instantly gave rise to the suspicion that the rope was\r\nthere as a bridge for something passing through the hole and\r\ncoming to the bed. The idea of a snake instantly occurred to me,\r\nand when I coupled it with my knowledge that the doctor was\r\nfurnished with a supply of creatures from India, I felt that I\r\nwas probably on the right track. The idea of using a form of\r\npoison which could not possibly be discovered by any chemical\r\ntest was just such a one as would occur to a clever and ruthless\r\nman who had had an Eastern training. The rapidity with which such\r\na poison would take effect would also, from his point of view, be\r\nan advantage. It would be a sharp-eyed coroner, indeed, who could\r\ndistinguish the two little dark punctures which would show where\r\nthe poison fangs had done their work. Then I thought of the\r\nwhistle. Of course he must recall the snake before the morning\r\nlight revealed it to the victim. He had trained it, probably by\r\nthe use of the milk which we saw, to return to him when summoned.\r\nHe would put it through this ventilator at the hour that he\r\nthought best, with the certainty that it would crawl down the\r\nrope and land on the bed. It might or might not bite the\r\noccupant, perhaps she might escape every night for a week, but\r\nsooner or later she must fall a victim.\r\n\r\n\"I had come to these conclusions before ever I had entered his\r\nroom. An inspection of his chair showed me that he had been in\r\nthe habit of standing on it, which of course would be necessary\r\nin order that he should reach the ventilator. The sight of the\r\nsafe, the saucer of milk, and the loop of whipcord were enough to\r\nfinally dispel any doubts which may have remained. The metallic\r\nclang heard by Miss Stoner was obviously caused by her stepfather\r\nhastily closing the door of his safe upon its terrible occupant.\r\nHaving once made up my mind, you know the steps which I took in\r\norder to put the matter to the proof. I heard the creature hiss\r\nas I have no doubt that you did also, and I instantly lit the\r\nlight and attacked it.\"\r\n\r\n\"With the result of driving it through the ventilator.\"\r\n\r\n\"And also with the result of causing it to turn upon its master\r\nat the other side. Some of the blows of my cane came home and\r\nroused its snakish temper, so that it flew upon the first person\r\nit saw. In this way I am no doubt indirectly responsible for Dr.\r\nGrimesby Roylott's death, and I cannot say that it is likely to\r\nweigh very heavily upon my conscience.\"\r\n\r\n\r\n\r\nIX. THE ADVENTURE OF THE ENGINEER'S THUMB\r\n\r\nOf all the problems which have been submitted to my friend, Mr.\r\nSherlock Holmes, for solution during the years of our intimacy,\r\nthere were only two which I was the means of introducing to his\r\nnotice--that of Mr. Hatherley's thumb, and that of Colonel\r\nWarburton's madness. Of these the latter may have afforded a\r\nfiner field for an acute and original observer, but the other was\r\nso strange in its inception and so dramatic in its details that\r\nit may be the more worthy of being placed upon record, even if it\r\ngave my friend fewer openings for those deductive methods of\r\nreasoning by which he achieved such remarkable results. The story\r\nhas, I believe, been told more than once in the newspapers, but,\r\nlike all such narratives, its effect is much less striking when\r\nset forth en bloc in a single half-column of print than when the\r\nfacts slowly evolve before your own eyes, and the mystery clears\r\ngradually away as each new discovery furnishes a step which leads\r\non to the complete truth. At the time the circumstances made a\r\ndeep impression upon me, and the lapse of two years has hardly\r\nserved to weaken the effect.\r\n\r\nIt was in the summer of '89, not long after my marriage, that the\r\nevents occurred which I am now about to summarise. I had returned\r\nto civil practice and had finally abandoned Holmes in his Baker\r\nStreet rooms, although I continually visited him and occasionally\r\neven persuaded him to forgo his Bohemian habits so far as to come\r\nand visit us. My practice had steadily increased, and as I\r\nhappened to live at no very great distance from Paddington\r\nStation, I got a few patients from among the officials. One of\r\nthese, whom I had cured of a painful and lingering disease, was\r\nnever weary of advertising my virtues and of endeavouring to send\r\nme on every sufferer over whom he might have any influence.\r\n\r\nOne morning, at a little before seven o'clock, I was awakened by\r\nthe maid tapping at the door to announce that two men had come\r\nfrom Paddington and were waiting in the consulting-room. I\r\ndressed hurriedly, for I knew by experience that railway cases\r\nwere seldom trivial, and hastened downstairs. As I descended, my\r\nold ally, the guard, came out of the room and closed the door\r\ntightly behind him.\r\n\r\n\"I've got him here,\" he whispered, jerking his thumb over his\r\nshoulder; \"he's all right.\"\r\n\r\n\"What is it, then?\" I asked, for his manner suggested that it was\r\nsome strange creature which he had caged up in my room.\r\n\r\n\"It's a new patient,\" he whispered. \"I thought I'd bring him\r\nround myself; then he couldn't slip away. There he is, all safe\r\nand sound. I must go now, Doctor; I have my dooties, just the\r\nsame as you.\" And off he went, this trusty tout, without even\r\ngiving me time to thank him.\r\n\r\nI entered my consulting-room and found a gentleman seated by the\r\ntable. He was quietly dressed in a suit of heather tweed with a\r\nsoft cloth cap which he had laid down upon my books. Round one of\r\nhis hands he had a handkerchief wrapped, which was mottled all\r\nover with bloodstains. He was young, not more than\r\nfive-and-twenty, I should say, with a strong, masculine face; but\r\nhe was exceedingly pale and gave me the impression of a man who\r\nwas suffering from some strong agitation, which it took all his\r\nstrength of mind to control.\r\n\r\n\"I am sorry to knock you up so early, Doctor,\" said he, \"but I\r\nhave had a very serious accident during the night. I came in by\r\ntrain this morning, and on inquiring at Paddington as to where I\r\nmight find a doctor, a worthy fellow very kindly escorted me\r\nhere. I gave the maid a card, but I see that she has left it upon\r\nthe side-table.\"\r\n\r\nI took it up and glanced at it. \"Mr. Victor Hatherley, hydraulic\r\nengineer, 16A, Victoria Street (3rd floor).\" That was the name,\r\nstyle, and abode of my morning visitor. \"I regret that I have\r\nkept you waiting,\" said I, sitting down in my library-chair. \"You\r\nare fresh from a night journey, I understand, which is in itself\r\na monotonous occupation.\"\r\n\r\n\"Oh, my night could not be called monotonous,\" said he, and\r\nlaughed. He laughed very heartily, with a high, ringing note,\r\nleaning back in his chair and shaking his sides. All my medical\r\ninstincts rose up against that laugh.\r\n\r\n\"Stop it!\" I cried; \"pull yourself together!\" and I poured out\r\nsome water from a caraffe.\r\n\r\nIt was useless, however. He was off in one of those hysterical\r\noutbursts which come upon a strong nature when some great crisis\r\nis over and gone. Presently he came to himself once more, very\r\nweary and pale-looking.\r\n\r\n\"I have been making a fool of myself,\" he gasped.\r\n\r\n\"Not at all. Drink this.\" I dashed some brandy into the water,\r\nand the colour began to come back to his bloodless cheeks.\r\n\r\n\"That's better!\" said he. \"And now, Doctor, perhaps you would\r\nkindly attend to my thumb, or rather to the place where my thumb\r\nused to be.\"\r\n\r\nHe unwound the handkerchief and held out his hand. It gave even\r\nmy hardened nerves a shudder to look at it. There were four\r\nprotruding fingers and a horrid red, spongy surface where the\r\nthumb should have been. It had been hacked or torn right out from\r\nthe roots.\r\n\r\n\"Good heavens!\" I cried, \"this is a terrible injury. It must have\r\nbled considerably.\"\r\n\r\n\"Yes, it did. I fainted when it was done, and I think that I must\r\nhave been senseless for a long time. When I came to I found that\r\nit was still bleeding, so I tied one end of my handkerchief very\r\ntightly round the wrist and braced it up with a twig.\"\r\n\r\n\"Excellent! You should have been a surgeon.\"\r\n\r\n\"It is a question of hydraulics, you see, and came within my own\r\nprovince.\"\r\n\r\n\"This has been done,\" said I, examining the wound, \"by a very\r\nheavy and sharp instrument.\"\r\n\r\n\"A thing like a cleaver,\" said he.\r\n\r\n\"An accident, I presume?\"\r\n\r\n\"By no means.\"\r\n\r\n\"What! a murderous attack?\"\r\n\r\n\"Very murderous indeed.\"\r\n\r\n\"You horrify me.\"\r\n\r\nI sponged the wound, cleaned it, dressed it, and finally covered\r\nit over with cotton wadding and carbolised bandages. He lay back\r\nwithout wincing, though he bit his lip from time to time.\r\n\r\n\"How is that?\" I asked when I had finished.\r\n\r\n\"Capital! Between your brandy and your bandage, I feel a new man.\r\nI was very weak, but I have had a good deal to go through.\"\r\n\r\n\"Perhaps you had better not speak of the matter. It is evidently\r\ntrying to your nerves.\"\r\n\r\n\"Oh, no, not now. I shall have to tell my tale to the police;\r\nbut, between ourselves, if it were not for the convincing\r\nevidence of this wound of mine, I should be surprised if they\r\nbelieved my statement, for it is a very extraordinary one, and I\r\nhave not much in the way of proof with which to back it up; and,\r\neven if they believe me, the clues which I can give them are so\r\nvague that it is a question whether justice will be done.\"\r\n\r\n\"Ha!\" cried I, \"if it is anything in the nature of a problem\r\nwhich you desire to see solved, I should strongly recommend you\r\nto come to my friend, Mr. Sherlock Holmes, before you go to the\r\nofficial police.\"\r\n\r\n\"Oh, I have heard of that fellow,\" answered my visitor, \"and I\r\nshould be very glad if he would take the matter up, though of\r\ncourse I must use the official police as well. Would you give me\r\nan introduction to him?\"\r\n\r\n\"I'll do better. I'll take you round to him myself.\"\r\n\r\n\"I should be immensely obliged to you.\"\r\n\r\n\"We'll call a cab and go together. We shall just be in time to\r\nhave a little breakfast with him. Do you feel equal to it?\"\r\n\r\n\"Yes; I shall not feel easy until I have told my story.\"\r\n\r\n\"Then my servant will call a cab, and I shall be with you in an\r\ninstant.\" I rushed upstairs, explained the matter shortly to my\r\nwife, and in five minutes was inside a hansom, driving with my\r\nnew acquaintance to Baker Street.\r\n\r\nSherlock Holmes was, as I expected, lounging about his\r\nsitting-room in his dressing-gown, reading the agony column of The\r\nTimes and smoking his before-breakfast pipe, which was composed\r\nof all the plugs and dottles left from his smokes of the day\r\nbefore, all carefully dried and collected on the corner of the\r\nmantelpiece. He received us in his quietly genial fashion,\r\nordered fresh rashers and eggs, and joined us in a hearty meal.\r\nWhen it was concluded he settled our new acquaintance upon the\r\nsofa, placed a pillow beneath his head, and laid a glass of\r\nbrandy and water within his reach.\r\n\r\n\"It is easy to see that your experience has been no common one,\r\nMr. Hatherley,\" said he. \"Pray, lie down there and make yourself\r\nabsolutely at home. Tell us what you can, but stop when you are\r\ntired and keep up your strength with a little stimulant.\"\r\n\r\n\"Thank you,\" said my patient, \"but I have felt another man since\r\nthe doctor bandaged me, and I think that your breakfast has\r\ncompleted the cure. I shall take up as little of your valuable\r\ntime as possible, so I shall start at once upon my peculiar\r\nexperiences.\"\r\n\r\nHolmes sat in his big armchair with the weary, heavy-lidded\r\nexpression which veiled his keen and eager nature, while I sat\r\nopposite to him, and we listened in silence to the strange story\r\nwhich our visitor detailed to us.\r\n\r\n\"You must know,\" said he, \"that I am an orphan and a bachelor,\r\nresiding alone in lodgings in London. By profession I am a\r\nhydraulic engineer, and I have had considerable experience of my\r\nwork during the seven years that I was apprenticed to Venner &\r\nMatheson, the well-known firm, of Greenwich. Two years ago,\r\nhaving served my time, and having also come into a fair sum of\r\nmoney through my poor father's death, I determined to start in\r\nbusiness for myself and took professional chambers in Victoria\r\nStreet.\r\n\r\n\"I suppose that everyone finds his first independent start in\r\nbusiness a dreary experience. To me it has been exceptionally so.\r\nDuring two years I have had three consultations and one small\r\njob, and that is absolutely all that my profession has brought\r\nme. My gross takings amount to 27 pounds 10s. Every day, from\r\nnine in the morning until four in the afternoon, I waited in my\r\nlittle den, until at last my heart began to sink, and I came to\r\nbelieve that I should never have any practice at all.\r\n\r\n\"Yesterday, however, just as I was thinking of leaving the\r\noffice, my clerk entered to say there was a gentleman waiting who\r\nwished to see me upon business. He brought up a card, too, with\r\nthe name of 'Colonel Lysander Stark' engraved upon it. Close at\r\nhis heels came the colonel himself, a man rather over the middle\r\nsize, but of an exceeding thinness. I do not think that I have\r\never seen so thin a man. His whole face sharpened away into nose\r\nand chin, and the skin of his cheeks was drawn quite tense over\r\nhis outstanding bones. Yet this emaciation seemed to be his\r\nnatural habit, and due to no disease, for his eye was bright, his\r\nstep brisk, and his bearing assured. He was plainly but neatly\r\ndressed, and his age, I should judge, would be nearer forty than\r\nthirty.\r\n\r\n\"'Mr. Hatherley?' said he, with something of a German accent.\r\n'You have been recommended to me, Mr. Hatherley, as being a man\r\nwho is not only proficient in his profession but is also discreet\r\nand capable of preserving a secret.'\r\n\r\n\"I bowed, feeling as flattered as any young man would at such an\r\naddress. 'May I ask who it was who gave me so good a character?'\r\n\r\n\"'Well, perhaps it is better that I should not tell you that just\r\nat this moment. I have it from the same source that you are both\r\nan orphan and a bachelor and are residing alone in London.'\r\n\r\n\"'That is quite correct,' I answered; 'but you will excuse me if\r\nI say that I cannot see how all this bears upon my professional\r\nqualifications. I understand that it was on a professional matter\r\nthat you wished to speak to me?'\r\n\r\n\"'Undoubtedly so. But you will find that all I say is really to\r\nthe point. I have a professional commission for you, but absolute\r\nsecrecy is quite essential--absolute secrecy, you understand, and\r\nof course we may expect that more from a man who is alone than\r\nfrom one who lives in the bosom of his family.'\r\n\r\n\"'If I promise to keep a secret,' said I, 'you may absolutely\r\ndepend upon my doing so.'\r\n\r\n\"He looked very hard at me as I spoke, and it seemed to me that I\r\nhad never seen so suspicious and questioning an eye.\r\n\r\n\"'Do you promise, then?' said he at last.\r\n\r\n\"'Yes, I promise.'\r\n\r\n\"'Absolute and complete silence before, during, and after? No\r\nreference to the matter at all, either in word or writing?'\r\n\r\n\"'I have already given you my word.'\r\n\r\n\"'Very good.' He suddenly sprang up, and darting like lightning\r\nacross the room he flung open the door. The passage outside was\r\nempty.\r\n\r\n\"'That's all right,' said he, coming back. 'I know that clerks are\r\nsometimes curious as to their master's affairs. Now we can talk\r\nin safety.' He drew up his chair very close to mine and began to\r\nstare at me again with the same questioning and thoughtful look.\r\n\r\n\"A feeling of repulsion, and of something akin to fear had begun\r\nto rise within me at the strange antics of this fleshless man.\r\nEven my dread of losing a client could not restrain me from\r\nshowing my impatience.\r\n\r\n\"'I beg that you will state your business, sir,' said I; 'my time\r\nis of value.' Heaven forgive me for that last sentence, but the\r\nwords came to my lips.\r\n\r\n\"'How would fifty guineas for a night's work suit you?' he asked.\r\n\r\n\"'Most admirably.'\r\n\r\n\"'I say a night's work, but an hour's would be nearer the mark. I\r\nsimply want your opinion about a hydraulic stamping machine which\r\nhas got out of gear. If you show us what is wrong we shall soon\r\nset it right ourselves. What do you think of such a commission as\r\nthat?'\r\n\r\n\"'The work appears to be light and the pay munificent.'\r\n\r\n\"'Precisely so. We shall want you to come to-night by the last\r\ntrain.'\r\n\r\n\"'Where to?'\r\n\r\n\"'To Eyford, in Berkshire. It is a little place near the borders\r\nof Oxfordshire, and within seven miles of Reading. There is a\r\ntrain from Paddington which would bring you there at about\r\n11:15.'\r\n\r\n\"'Very good.'\r\n\r\n\"'I shall come down in a carriage to meet you.'\r\n\r\n\"'There is a drive, then?'\r\n\r\n\"'Yes, our little place is quite out in the country. It is a good\r\nseven miles from Eyford Station.'\r\n\r\n\"'Then we can hardly get there before midnight. I suppose there\r\nwould be no chance of a train back. I should be compelled to stop\r\nthe night.'\r\n\r\n\"'Yes, we could easily give you a shake-down.'\r\n\r\n\"'That is very awkward. Could I not come at some more convenient\r\nhour?'\r\n\r\n\"'We have judged it best that you should come late. It is to\r\nrecompense you for any inconvenience that we are paying to you, a\r\nyoung and unknown man, a fee which would buy an opinion from the\r\nvery heads of your profession. Still, of course, if you would\r\nlike to draw out of the business, there is plenty of time to do\r\nso.'\r\n\r\n\"I thought of the fifty guineas, and of how very useful they\r\nwould be to me. 'Not at all,' said I, 'I shall be very happy to\r\naccommodate myself to your wishes. I should like, however, to\r\nunderstand a little more clearly what it is that you wish me to\r\ndo.'\r\n\r\n\"'Quite so. It is very natural that the pledge of secrecy which\r\nwe have exacted from you should have aroused your curiosity. I\r\nhave no wish to commit you to anything without your having it all\r\nlaid before you. I suppose that we are absolutely safe from\r\neavesdroppers?'\r\n\r\n\"'Entirely.'\r\n\r\n\"'Then the matter stands thus. You are probably aware that\r\nfuller's-earth is a valuable product, and that it is only found\r\nin one or two places in England?'\r\n\r\n\"'I have heard so.'\r\n\r\n\"'Some little time ago I bought a small place--a very small\r\nplace--within ten miles of Reading. I was fortunate enough to\r\ndiscover that there was a deposit of fuller's-earth in one of my\r\nfields. On examining it, however, I found that this deposit was a\r\ncomparatively small one, and that it formed a link between two\r\nvery much larger ones upon the right and left--both of them,\r\nhowever, in the grounds of my neighbours. These good people were\r\nabsolutely ignorant that their land contained that which was\r\nquite as valuable as a gold-mine. Naturally, it was to my\r\ninterest to buy their land before they discovered its true value,\r\nbut unfortunately I had no capital by which I could do this. I\r\ntook a few of my friends into the secret, however, and they\r\nsuggested that we should quietly and secretly work our own little\r\ndeposit and that in this way we should earn the money which would\r\nenable us to buy the neighbouring fields. This we have now been\r\ndoing for some time, and in order to help us in our operations we\r\nerected a hydraulic press. This press, as I have already\r\nexplained, has got out of order, and we wish your advice upon the\r\nsubject. We guard our secret very jealously, however, and if it\r\nonce became known that we had hydraulic engineers coming to our\r\nlittle house, it would soon rouse inquiry, and then, if the facts\r\ncame out, it would be good-bye to any chance of getting these\r\nfields and carrying out our plans. That is why I have made you\r\npromise me that you will not tell a human being that you are\r\ngoing to Eyford to-night. I hope that I make it all plain?'\r\n\r\n\"'I quite follow you,' said I. 'The only point which I could not\r\nquite understand was what use you could make of a hydraulic press\r\nin excavating fuller's-earth, which, as I understand, is dug out\r\nlike gravel from a pit.'\r\n\r\n\"'Ah!' said he carelessly, 'we have our own process. We compress\r\nthe earth into bricks, so as to remove them without revealing\r\nwhat they are. But that is a mere detail. I have taken you fully\r\ninto my confidence now, Mr. Hatherley, and I have shown you how I\r\ntrust you.' He rose as he spoke. 'I shall expect you, then, at\r\nEyford at 11:15.'\r\n\r\n\"'I shall certainly be there.'\r\n\r\n\"'And not a word to a soul.' He looked at me with a last long,\r\nquestioning gaze, and then, pressing my hand in a cold, dank\r\ngrasp, he hurried from the room.\r\n\r\n\"Well, when I came to think it all over in cool blood I was very\r\nmuch astonished, as you may both think, at this sudden commission\r\nwhich had been intrusted to me. On the one hand, of course, I was\r\nglad, for the fee was at least tenfold what I should have asked\r\nhad I set a price upon my own services, and it was possible that\r\nthis order might lead to other ones. On the other hand, the face\r\nand manner of my patron had made an unpleasant impression upon\r\nme, and I could not think that his explanation of the\r\nfuller's-earth was sufficient to explain the necessity for my\r\ncoming at midnight, and his extreme anxiety lest I should tell\r\nanyone of my errand. However, I threw all fears to the winds, ate\r\na hearty supper, drove to Paddington, and started off, having\r\nobeyed to the letter the injunction as to holding my tongue.\r\n\r\n\"At Reading I had to change not only my carriage but my station.\r\nHowever, I was in time for the last train to Eyford, and I\r\nreached the little dim-lit station after eleven o'clock. I was the\r\nonly passenger who got out there, and there was no one upon the\r\nplatform save a single sleepy porter with a lantern. As I passed\r\nout through the wicket gate, however, I found my acquaintance of\r\nthe morning waiting in the shadow upon the other side. Without a\r\nword he grasped my arm and hurried me into a carriage, the door\r\nof which was standing open. He drew up the windows on either\r\nside, tapped on the wood-work, and away we went as fast as the\r\nhorse could go.\"\r\n\r\n\"One horse?\" interjected Holmes.\r\n\r\n\"Yes, only one.\"\r\n\r\n\"Did you observe the colour?\"\r\n\r\n\"Yes, I saw it by the side-lights when I was stepping into the\r\ncarriage. It was a chestnut.\"\r\n\r\n\"Tired-looking or fresh?\"\r\n\r\n\"Oh, fresh and glossy.\"\r\n\r\n\"Thank you. I am sorry to have interrupted you. Pray continue\r\nyour most interesting statement.\"\r\n\r\n\"Away we went then, and we drove for at least an hour. Colonel\r\nLysander Stark had said that it was only seven miles, but I\r\nshould think, from the rate that we seemed to go, and from the\r\ntime that we took, that it must have been nearer twelve. He sat\r\nat my side in silence all the time, and I was aware, more than\r\nonce when I glanced in his direction, that he was looking at me\r\nwith great intensity. The country roads seem to be not very good\r\nin that part of the world, for we lurched and jolted terribly. I\r\ntried to look out of the windows to see something of where we\r\nwere, but they were made of frosted glass, and I could make out\r\nnothing save the occasional bright blur of a passing light. Now\r\nand then I hazarded some remark to break the monotony of the\r\njourney, but the colonel answered only in monosyllables, and the\r\nconversation soon flagged. At last, however, the bumping of the\r\nroad was exchanged for the crisp smoothness of a gravel-drive,\r\nand the carriage came to a stand. Colonel Lysander Stark sprang\r\nout, and, as I followed after him, pulled me swiftly into a porch\r\nwhich gaped in front of us. We stepped, as it were, right out of\r\nthe carriage and into the hall, so that I failed to catch the\r\nmost fleeting glance of the front of the house. The instant that\r\nI had crossed the threshold the door slammed heavily behind us,\r\nand I heard faintly the rattle of the wheels as the carriage\r\ndrove away.\r\n\r\n\"It was pitch dark inside the house, and the colonel fumbled\r\nabout looking for matches and muttering under his breath.\r\nSuddenly a door opened at the other end of the passage, and a\r\nlong, golden bar of light shot out in our direction. It grew\r\nbroader, and a woman appeared with a lamp in her hand, which she\r\nheld above her head, pushing her face forward and peering at us.\r\nI could see that she was pretty, and from the gloss with which\r\nthe light shone upon her dark dress I knew that it was a rich\r\nmaterial. She spoke a few words in a foreign tongue in a tone as\r\nthough asking a question, and when my companion answered in a\r\ngruff monosyllable she gave such a start that the lamp nearly\r\nfell from her hand. Colonel Stark went up to her, whispered\r\nsomething in her ear, and then, pushing her back into the room\r\nfrom whence she had come, he walked towards me again with the\r\nlamp in his hand.\r\n\r\n\"'Perhaps you will have the kindness to wait in this room for a\r\nfew minutes,' said he, throwing open another door. It was a\r\nquiet, little, plainly furnished room, with a round table in the\r\ncentre, on which several German books were scattered. Colonel\r\nStark laid down the lamp on the top of a harmonium beside the\r\ndoor. 'I shall not keep you waiting an instant,' said he, and\r\nvanished into the darkness.\r\n\r\n\"I glanced at the books upon the table, and in spite of my\r\nignorance of German I could see that two of them were treatises\r\non science, the others being volumes of poetry. Then I walked\r\nacross to the window, hoping that I might catch some glimpse of\r\nthe country-side, but an oak shutter, heavily barred, was folded\r\nacross it. It was a wonderfully silent house. There was an old\r\nclock ticking loudly somewhere in the passage, but otherwise\r\neverything was deadly still. A vague feeling of uneasiness began\r\nto steal over me. Who were these German people, and what were\r\nthey doing living in this strange, out-of-the-way place? And\r\nwhere was the place? I was ten miles or so from Eyford, that was\r\nall I knew, but whether north, south, east, or west I had no\r\nidea. For that matter, Reading, and possibly other large towns,\r\nwere within that radius, so the place might not be so secluded,\r\nafter all. Yet it was quite certain, from the absolute stillness,\r\nthat we were in the country. I paced up and down the room,\r\nhumming a tune under my breath to keep up my spirits and feeling\r\nthat I was thoroughly earning my fifty-guinea fee.\r\n\r\n\"Suddenly, without any preliminary sound in the midst of the\r\nutter stillness, the door of my room swung slowly open. The woman\r\nwas standing in the aperture, the darkness of the hall behind\r\nher, the yellow light from my lamp beating upon her eager and\r\nbeautiful face. I could see at a glance that she was sick with\r\nfear, and the sight sent a chill to my own heart. She held up one\r\nshaking finger to warn me to be silent, and she shot a few\r\nwhispered words of broken English at me, her eyes glancing back,\r\nlike those of a frightened horse, into the gloom behind her.\r\n\r\n\"'I would go,' said she, trying hard, as it seemed to me, to\r\nspeak calmly; 'I would go. I should not stay here. There is no\r\ngood for you to do.'\r\n\r\n\"'But, madam,' said I, 'I have not yet done what I came for. I\r\ncannot possibly leave until I have seen the machine.'\r\n\r\n\"'It is not worth your while to wait,' she went on. 'You can pass\r\nthrough the door; no one hinders.' And then, seeing that I smiled\r\nand shook my head, she suddenly threw aside her constraint and\r\nmade a step forward, with her hands wrung together. 'For the love\r\nof Heaven!' she whispered, 'get away from here before it is too\r\nlate!'\r\n\r\n\"But I am somewhat headstrong by nature, and the more ready to\r\nengage in an affair when there is some obstacle in the way. I\r\nthought of my fifty-guinea fee, of my wearisome journey, and of\r\nthe unpleasant night which seemed to be before me. Was it all to\r\ngo for nothing? Why should I slink away without having carried\r\nout my commission, and without the payment which was my due? This\r\nwoman might, for all I knew, be a monomaniac. With a stout\r\nbearing, therefore, though her manner had shaken me more than I\r\ncared to confess, I still shook my head and declared my intention\r\nof remaining where I was. She was about to renew her entreaties\r\nwhen a door slammed overhead, and the sound of several footsteps\r\nwas heard upon the stairs. She listened for an instant, threw up\r\nher hands with a despairing gesture, and vanished as suddenly and\r\nas noiselessly as she had come.\r\n\r\n\"The newcomers were Colonel Lysander Stark and a short thick man\r\nwith a chinchilla beard growing out of the creases of his double\r\nchin, who was introduced to me as Mr. Ferguson.\r\n\r\n\"'This is my secretary and manager,' said the colonel. 'By the\r\nway, I was under the impression that I left this door shut just\r\nnow. I fear that you have felt the draught.'\r\n\r\n\"'On the contrary,' said I, 'I opened the door myself because I\r\nfelt the room to be a little close.'\r\n\r\n\"He shot one of his suspicious looks at me. 'Perhaps we had\r\nbetter proceed to business, then,' said he. 'Mr. Ferguson and I\r\nwill take you up to see the machine.'\r\n\r\n\"'I had better put my hat on, I suppose.'\r\n\r\n\"'Oh, no, it is in the house.'\r\n\r\n\"'What, you dig fuller's-earth in the house?'\r\n\r\n\"'No, no. This is only where we compress it. But never mind that.\r\nAll we wish you to do is to examine the machine and to let us\r\nknow what is wrong with it.'\r\n\r\n\"We went upstairs together, the colonel first with the lamp, the\r\nfat manager and I behind him. It was a labyrinth of an old house,\r\nwith corridors, passages, narrow winding staircases, and little\r\nlow doors, the thresholds of which were hollowed out by the\r\ngenerations who had crossed them. There were no carpets and no\r\nsigns of any furniture above the ground floor, while the plaster\r\nwas peeling off the walls, and the damp was breaking through in\r\ngreen, unhealthy blotches. I tried to put on as unconcerned an\r\nair as possible, but I had not forgotten the warnings of the\r\nlady, even though I disregarded them, and I kept a keen eye upon\r\nmy two companions. Ferguson appeared to be a morose and silent\r\nman, but I could see from the little that he said that he was at\r\nleast a fellow-countryman.\r\n\r\n\"Colonel Lysander Stark stopped at last before a low door, which\r\nhe unlocked. Within was a small, square room, in which the three\r\nof us could hardly get at one time. Ferguson remained outside,\r\nand the colonel ushered me in.\r\n\r\n\"'We are now,' said he, 'actually within the hydraulic press, and\r\nit would be a particularly unpleasant thing for us if anyone were\r\nto turn it on. The ceiling of this small chamber is really the\r\nend of the descending piston, and it comes down with the force of\r\nmany tons upon this metal floor. There are small lateral columns\r\nof water outside which receive the force, and which transmit and\r\nmultiply it in the manner which is familiar to you. The machine\r\ngoes readily enough, but there is some stiffness in the working\r\nof it, and it has lost a little of its force. Perhaps you will\r\nhave the goodness to look it over and to show us how we can set\r\nit right.'\r\n\r\n\"I took the lamp from him, and I examined the machine very\r\nthoroughly. It was indeed a gigantic one, and capable of\r\nexercising enormous pressure. When I passed outside, however, and\r\npressed down the levers which controlled it, I knew at once by\r\nthe whishing sound that there was a slight leakage, which allowed\r\na regurgitation of water through one of the side cylinders. An\r\nexamination showed that one of the india-rubber bands which was\r\nround the head of a driving-rod had shrunk so as not quite to\r\nfill the socket along which it worked. This was clearly the cause\r\nof the loss of power, and I pointed it out to my companions, who\r\nfollowed my remarks very carefully and asked several practical\r\nquestions as to how they should proceed to set it right. When I\r\nhad made it clear to them, I returned to the main chamber of the\r\nmachine and took a good look at it to satisfy my own curiosity.\r\nIt was obvious at a glance that the story of the fuller's-earth\r\nwas the merest fabrication, for it would be absurd to suppose\r\nthat so powerful an engine could be designed for so inadequate a\r\npurpose. The walls were of wood, but the floor consisted of a\r\nlarge iron trough, and when I came to examine it I could see a\r\ncrust of metallic deposit all over it. I had stooped and was\r\nscraping at this to see exactly what it was when I heard a\r\nmuttered exclamation in German and saw the cadaverous face of the\r\ncolonel looking down at me.\r\n\r\n\"'What are you doing there?' he asked.\r\n\r\n\"I felt angry at having been tricked by so elaborate a story as\r\nthat which he had told me. 'I was admiring your fuller's-earth,'\r\nsaid I; 'I think that I should be better able to advise you as to\r\nyour machine if I knew what the exact purpose was for which it\r\nwas used.'\r\n\r\n\"The instant that I uttered the words I regretted the rashness of\r\nmy speech. His face set hard, and a baleful light sprang up in\r\nhis grey eyes.\r\n\r\n\"'Very well,' said he, 'you shall know all about the machine.' He\r\ntook a step backward, slammed the little door, and turned the key\r\nin the lock. I rushed towards it and pulled at the handle, but it\r\nwas quite secure, and did not give in the least to my kicks and\r\nshoves. 'Hullo!' I yelled. 'Hullo! Colonel! Let me out!'\r\n\r\n\"And then suddenly in the silence I heard a sound which sent my\r\nheart into my mouth. It was the clank of the levers and the swish\r\nof the leaking cylinder. He had set the engine at work. The lamp\r\nstill stood upon the floor where I had placed it when examining\r\nthe trough. By its light I saw that the black ceiling was coming\r\ndown upon me, slowly, jerkily, but, as none knew better than\r\nmyself, with a force which must within a minute grind me to a\r\nshapeless pulp. I threw myself, screaming, against the door, and\r\ndragged with my nails at the lock. I implored the colonel to let\r\nme out, but the remorseless clanking of the levers drowned my\r\ncries. The ceiling was only a foot or two above my head, and with\r\nmy hand upraised I could feel its hard, rough surface. Then it\r\nflashed through my mind that the pain of my death would depend\r\nvery much upon the position in which I met it. If I lay on my\r\nface the weight would come upon my spine, and I shuddered to\r\nthink of that dreadful snap. Easier the other way, perhaps; and\r\nyet, had I the nerve to lie and look up at that deadly black\r\nshadow wavering down upon me? Already I was unable to stand\r\nerect, when my eye caught something which brought a gush of hope\r\nback to my heart.\r\n\r\n\"I have said that though the floor and ceiling were of iron, the\r\nwalls were of wood. As I gave a last hurried glance around, I saw\r\na thin line of yellow light between two of the boards, which\r\nbroadened and broadened as a small panel was pushed backward. For\r\nan instant I could hardly believe that here was indeed a door\r\nwhich led away from death. The next instant I threw myself\r\nthrough, and lay half-fainting upon the other side. The panel had\r\nclosed again behind me, but the crash of the lamp, and a few\r\nmoments afterwards the clang of the two slabs of metal, told me\r\nhow narrow had been my escape.\r\n\r\n\"I was recalled to myself by a frantic plucking at my wrist, and\r\nI found myself lying upon the stone floor of a narrow corridor,\r\nwhile a woman bent over me and tugged at me with her left hand,\r\nwhile she held a candle in her right. It was the same good friend\r\nwhose warning I had so foolishly rejected.\r\n\r\n\"'Come! come!' she cried breathlessly. 'They will be here in a\r\nmoment. They will see that you are not there. Oh, do not waste\r\nthe so-precious time, but come!'\r\n\r\n\"This time, at least, I did not scorn her advice. I staggered to\r\nmy feet and ran with her along the corridor and down a winding\r\nstair. The latter led to another broad passage, and just as we\r\nreached it we heard the sound of running feet and the shouting of\r\ntwo voices, one answering the other from the floor on which  we\r\nwere and from the one beneath. My guide stopped and looked about\r\nher like one  who is at her wit's end. Then she threw open a door\r\nwhich led into a bedroom, through the window of which the moon\r\nwas shining brightly.\r\n\r\n\"'It is your only chance,' said she. 'It is high, but it may be\r\nthat you can jump it.'\r\n\r\n\"As she spoke a light sprang into view at the further end of the\r\npassage, and I saw the lean figure of Colonel Lysander Stark\r\nrushing forward with a lantern in one hand and a weapon like a\r\nbutcher's cleaver in the other. I rushed across the bedroom,\r\nflung open the window, and looked out. How quiet and sweet and\r\nwholesome the garden looked in the moonlight, and it could not be\r\nmore than thirty feet down. I clambered out upon the sill, but I\r\nhesitated to jump until I should have heard what passed between\r\nmy saviour and the ruffian who pursued me. If she were ill-used,\r\nthen at any risks I was determined to go back to her assistance.\r\nThe thought had hardly flashed through my mind before he was at\r\nthe door, pushing his way past her; but she threw her arms round\r\nhim and tried to hold him back.\r\n\r\n\"'Fritz! Fritz!' she cried in English, 'remember your promise\r\nafter the last time. You said it should not be again. He will be\r\nsilent! Oh, he will be silent!'\r\n\r\n\"'You are mad, Elise!' he shouted, struggling to break away from\r\nher. 'You will be the ruin of us. He has seen too much. Let me\r\npass, I say!' He dashed her to one side, and, rushing to the\r\nwindow, cut at me with his heavy weapon. I had let myself go, and\r\nwas hanging by the hands to the sill, when his blow fell. I was\r\nconscious of a dull pain, my grip loosened, and I fell into the\r\ngarden below.\r\n\r\n\"I was shaken but not hurt by the fall; so I picked myself up and\r\nrushed off among the bushes as hard as I could run, for I\r\nunderstood that I was far from being out of danger yet. Suddenly,\r\nhowever, as I ran, a deadly dizziness and sickness came over me.\r\nI glanced down at my hand, which was throbbing painfully, and\r\nthen, for the first time, saw that my thumb had been cut off and\r\nthat the blood was pouring from my wound. I endeavoured to tie my\r\nhandkerchief round it, but there came a sudden buzzing in my\r\nears, and next moment I fell in a dead faint among the\r\nrose-bushes.\r\n\r\n\"How long I remained unconscious I cannot tell. It must have been\r\na very long time, for the moon had sunk, and a bright morning was\r\nbreaking when I came to myself. My clothes were all sodden with\r\ndew, and my coat-sleeve was drenched with blood from my wounded\r\nthumb. The smarting of it recalled in an instant all the\r\nparticulars of my night's adventure, and I sprang to my feet with\r\nthe feeling that I might hardly yet be safe from my pursuers. But\r\nto my astonishment, when I came to look round me, neither house\r\nnor garden were to be seen. I had been lying in an angle of the\r\nhedge close by the highroad, and just a little lower down was a\r\nlong building, which proved, upon my approaching it, to be the\r\nvery station at which I had arrived upon the previous night. Were\r\nit not for the ugly wound upon my hand, all that had passed\r\nduring those dreadful hours might have been an evil dream.\r\n\r\n\"Half dazed, I went into the station and asked about the morning\r\ntrain. There would be one to Reading in less than an hour. The\r\nsame porter was on duty, I found, as had been there when I\r\narrived. I inquired of him whether he had ever heard of Colonel\r\nLysander Stark. The name was strange to him. Had he observed a\r\ncarriage the night before waiting for me? No, he had not. Was\r\nthere a police-station anywhere near? There was one about three\r\nmiles off.\r\n\r\n\"It was too far for me to go, weak and ill as I was. I determined\r\nto wait until I got back to town before telling my story to the\r\npolice. It was a little past six when I arrived, so I went first\r\nto have my wound dressed, and then the doctor was kind enough to\r\nbring me along here. I put the case into your hands and shall do\r\nexactly what you advise.\"\r\n\r\nWe both sat in silence for some little time after listening to\r\nthis extraordinary narrative. Then Sherlock Holmes pulled down\r\nfrom the shelf one of the ponderous commonplace books in which he\r\nplaced his cuttings.\r\n\r\n\"Here is an advertisement which will interest you,\" said he. \"It\r\nappeared in all the papers about a year ago. Listen to this:\r\n'Lost, on the 9th inst., Mr. Jeremiah Hayling, aged\r\ntwenty-six, a hydraulic engineer. Left his lodgings at ten\r\no'clock at night, and has not been heard of since. Was\r\ndressed in,' etc., etc. Ha! That represents the last time that\r\nthe colonel needed to have his machine overhauled, I fancy.\"\r\n\r\n\"Good heavens!\" cried my patient. \"Then that explains what the\r\ngirl said.\"\r\n\r\n\"Undoubtedly. It is quite clear that the colonel was a cool and\r\ndesperate man, who was absolutely determined that nothing should\r\nstand in the way of his little game, like those out-and-out\r\npirates who will leave no survivor from a captured ship. Well,\r\nevery moment now is precious, so if you feel equal to it we shall\r\ngo down to Scotland Yard at once as a preliminary to starting for\r\nEyford.\"\r\n\r\nSome three hours or so afterwards we were all in the train\r\ntogether, bound from Reading to the little Berkshire village.\r\nThere were Sherlock Holmes, the hydraulic engineer, Inspector\r\nBradstreet, of Scotland Yard, a plain-clothes man, and myself.\r\nBradstreet had spread an ordnance map of the county out upon the\r\nseat and was busy with his compasses drawing a circle with Eyford\r\nfor its centre.\r\n\r\n\"There you are,\" said he. \"That circle is drawn at a radius of\r\nten miles from the village. The place we want must be somewhere\r\nnear that line. You said ten miles, I think, sir.\"\r\n\r\n\"It was an hour's good drive.\"\r\n\r\n\"And you think that they brought you back all that way when you\r\nwere unconscious?\"\r\n\r\n\"They must have done so. I have a confused memory, too, of having\r\nbeen lifted and conveyed somewhere.\"\r\n\r\n\"What I cannot understand,\" said I, \"is why they should have\r\nspared you when they found you lying fainting in the garden.\r\nPerhaps the villain was softened by the woman's entreaties.\"\r\n\r\n\"I hardly think that likely. I never saw a more inexorable face\r\nin my life.\"\r\n\r\n\"Oh, we shall soon clear up all that,\" said Bradstreet. \"Well, I\r\nhave drawn my circle, and I only wish I knew at what point upon\r\nit the folk that we are in search of are to be found.\"\r\n\r\n\"I think I could lay my finger on it,\" said Holmes quietly.\r\n\r\n\"Really, now!\" cried the inspector, \"you have formed your\r\nopinion! Come, now, we shall see who agrees with you. I say it is\r\nsouth, for the country is more deserted there.\"\r\n\r\n\"And I say east,\" said my patient.\r\n\r\n\"I am for west,\" remarked the plain-clothes man. \"There are\r\nseveral quiet little villages up there.\"\r\n\r\n\"And I am for north,\" said I, \"because there are no hills there,\r\nand our friend says that he did not notice the carriage go up\r\nany.\"\r\n\r\n\"Come,\" cried the inspector, laughing; \"it's a very pretty\r\ndiversity of opinion. We have boxed the compass among us. Who do\r\nyou give your casting vote to?\"\r\n\r\n\"You are all wrong.\"\r\n\r\n\"But we can't all be.\"\r\n\r\n\"Oh, yes, you can. This is my point.\" He placed his finger in the\r\ncentre of the circle. \"This is where we shall find them.\"\r\n\r\n\"But the twelve-mile drive?\" gasped Hatherley.\r\n\r\n\"Six out and six back. Nothing simpler. You say yourself that the\r\nhorse was fresh and glossy when you got in. How could it be that\r\nif it had gone twelve miles over heavy roads?\"\r\n\r\n\"Indeed, it is a likely ruse enough,\" observed Bradstreet\r\nthoughtfully. \"Of course there can be no doubt as to the nature\r\nof this gang.\"\r\n\r\n\"None at all,\" said Holmes. \"They are coiners on a large scale,\r\nand have used the machine to form the amalgam which has taken the\r\nplace of silver.\"\r\n\r\n\"We have known for some time that a clever gang was at work,\"\r\nsaid the inspector. \"They have been turning out half-crowns by\r\nthe thousand. We even traced them as far as Reading, but could\r\nget no farther, for they had covered their traces in a way that\r\nshowed that they were very old hands. But now, thanks to this\r\nlucky chance, I think that we have got them right enough.\"\r\n\r\nBut the inspector was mistaken, for those criminals were not\r\ndestined to fall into the hands of justice. As we rolled into\r\nEyford Station we saw a gigantic column of smoke which streamed\r\nup from behind a small clump of trees in the neighbourhood and\r\nhung like an immense ostrich feather over the landscape.\r\n\r\n\"A house on fire?\" asked Bradstreet as the train steamed off\r\nagain on its way.\r\n\r\n\"Yes, sir!\" said the station-master.\r\n\r\n\"When did it break out?\"\r\n\r\n\"I hear that it was during the night, sir, but it has got worse,\r\nand the whole place is in a blaze.\"\r\n\r\n\"Whose house is it?\"\r\n\r\n\"Dr. Becher's.\"\r\n\r\n\"Tell me,\" broke in the engineer, \"is Dr. Becher a German, very\r\nthin, with a long, sharp nose?\"\r\n\r\nThe station-master laughed heartily. \"No, sir, Dr. Becher is an\r\nEnglishman, and there isn't a man in the parish who has a\r\nbetter-lined waistcoat. But he has a gentleman staying with him,\r\na patient, as I understand, who is a foreigner, and he looks as\r\nif a little good Berkshire beef would do him no harm.\"\r\n\r\nThe station-master had not finished his speech before we were all\r\nhastening in the direction of the fire. The road topped a low\r\nhill, and there was a great widespread whitewashed building in\r\nfront of us, spouting fire at every chink and window, while in\r\nthe garden in front three fire-engines were vainly striving to\r\nkeep the flames under.\r\n\r\n\"That's it!\" cried Hatherley, in intense excitement. \"There is\r\nthe gravel-drive, and there are the rose-bushes where I lay. That\r\nsecond window is the one that I jumped from.\"\r\n\r\n\"Well, at least,\" said Holmes, \"you have had your revenge upon\r\nthem. There can be no question that it was your oil-lamp which,\r\nwhen it was crushed in the press, set fire to the wooden walls,\r\nthough no doubt they were too excited in the chase after you to\r\nobserve it at the time. Now keep your eyes open in this crowd for\r\nyour friends of last night, though I very much fear that they are\r\na good hundred miles off by now.\"\r\n\r\nAnd Holmes' fears came to be realised, for from that day to this\r\nno word has ever been heard either of the beautiful woman, the\r\nsinister German, or the morose Englishman. Early that morning a\r\npeasant had met a cart containing several people and some very\r\nbulky boxes driving rapidly in the direction of Reading, but\r\nthere all traces of the fugitives disappeared, and even Holmes'\r\ningenuity failed ever to discover the least clue as to their\r\nwhereabouts.\r\n\r\nThe firemen had been much perturbed at the strange arrangements\r\nwhich they had found within, and still more so by discovering a\r\nnewly severed human thumb upon a window-sill of the second floor.\r\nAbout sunset, however, their efforts were at last successful, and\r\nthey subdued the flames, but not before the roof had fallen in,\r\nand the whole place been reduced to such absolute ruin that, save\r\nsome twisted cylinders and iron piping, not a trace remained of\r\nthe machinery which had cost our unfortunate acquaintance so\r\ndearly. Large masses of nickel and of tin were discovered stored\r\nin an out-house, but no coins were to be found, which may have\r\nexplained the presence of those bulky boxes which have been\r\nalready referred to.\r\n\r\nHow our hydraulic engineer had been conveyed from the garden to\r\nthe spot where he recovered his senses might have remained\r\nforever a mystery were it not for the soft mould, which told us a\r\nvery plain tale. He had evidently been carried down by two\r\npersons, one of whom had remarkably small feet and the other\r\nunusually large ones. On the whole, it was most probable that the\r\nsilent Englishman, being less bold or less murderous than his\r\ncompanion, had assisted the woman to bear the unconscious man out\r\nof the way of danger.\r\n\r\n\"Well,\" said our engineer ruefully as we took our seats to return\r\nonce more to London, \"it has been a pretty business for me! I\r\nhave lost my thumb and I have lost a fifty-guinea fee, and what\r\nhave I gained?\"\r\n\r\n\"Experience,\" said Holmes, laughing. \"Indirectly it may be of\r\nvalue, you know; you have only to put it into words to gain the\r\nreputation of being excellent company for the remainder of your\r\nexistence.\"\r\n\r\n\r\n\r\nX. THE ADVENTURE OF THE NOBLE BACHELOR\r\n\r\nThe Lord St. Simon marriage, and its curious termination, have\r\nlong ceased to be a subject of interest in those exalted circles\r\nin which the unfortunate bridegroom moves. Fresh scandals have\r\neclipsed it, and their more piquant details have drawn the\r\ngossips away from this four-year-old drama. As I have reason to\r\nbelieve, however, that the full facts have never been revealed to\r\nthe general public, and as my friend Sherlock Holmes had a\r\nconsiderable share in clearing the matter up, I feel that no\r\nmemoir of him would be complete without some little sketch of\r\nthis remarkable episode.\r\n\r\nIt was a few weeks before my own marriage, during the days when I\r\nwas still sharing rooms with Holmes in Baker Street, that he came\r\nhome from an afternoon stroll to find a letter on the table\r\nwaiting for him. I had remained indoors all day, for the weather\r\nhad taken a sudden turn to rain, with high autumnal winds, and\r\nthe Jezail bullet which I had brought back in one of my limbs as\r\na relic of my Afghan campaign throbbed with dull persistence.\r\nWith my body in one easy-chair and my legs upon another, I had\r\nsurrounded myself with a cloud of newspapers until at last,\r\nsaturated with the news of the day, I tossed them all aside and\r\nlay listless, watching the huge crest and monogram upon the\r\nenvelope upon the table and wondering lazily who my friend's\r\nnoble correspondent could be.\r\n\r\n\"Here is a very fashionable epistle,\" I remarked as he entered.\r\n\"Your morning letters, if I remember right, were from a\r\nfish-monger and a tide-waiter.\"\r\n\r\n\"Yes, my correspondence has certainly the charm of variety,\" he\r\nanswered, smiling, \"and the humbler are usually the more\r\ninteresting. This looks like one of those unwelcome social\r\nsummonses which call upon a man either to be bored or to lie.\"\r\n\r\nHe broke the seal and glanced over the contents.\r\n\r\n\"Oh, come, it may prove to be something of interest, after all.\"\r\n\r\n\"Not social, then?\"\r\n\r\n\"No, distinctly professional.\"\r\n\r\n\"And from a noble client?\"\r\n\r\n\"One of the highest in England.\"\r\n\r\n\"My dear fellow, I congratulate you.\"\r\n\r\n\"I assure you, Watson, without affectation, that the status of my\r\nclient is a matter of less moment to me than the interest of his\r\ncase. It is just possible, however, that that also may not be\r\nwanting in this new investigation. You have been reading the\r\npapers diligently of late, have you not?\"\r\n\r\n\"It looks like it,\" said I ruefully, pointing to a huge bundle in\r\nthe corner. \"I have had nothing else to do.\"\r\n\r\n\"It is fortunate, for you will perhaps be able to post me up. I\r\nread nothing except the criminal news and the agony column. The\r\nlatter is always instructive. But if you have followed recent\r\nevents so closely you must have read about Lord St. Simon and his\r\nwedding?\"\r\n\r\n\"Oh, yes, with the deepest interest.\"\r\n\r\n\"That is well. The letter which I hold in my hand is from Lord\r\nSt. Simon. I will read it to you, and in return you must turn\r\nover these papers and let me have whatever bears upon the matter.\r\nThis is what he says:\r\n\r\n\"'MY DEAR MR. SHERLOCK HOLMES:--Lord Backwater tells me that I\r\nmay place implicit reliance upon your judgment and discretion. I\r\nhave determined, therefore, to call upon you and to consult you\r\nin reference to the very painful event which has occurred in\r\nconnection with my wedding. Mr. Lestrade, of Scotland Yard, is\r\nacting already in the matter, but he assures me that he sees no\r\nobjection to your co-operation, and that he even thinks that\r\nit might be of some assistance. I will call at four o'clock in\r\nthe afternoon, and, should you have any other engagement at that\r\ntime, I hope that you will postpone it, as this matter is of\r\nparamount importance. Yours faithfully, ST. SIMON.'\r\n\r\n\"It is dated from Grosvenor Mansions, written with a quill pen,\r\nand the noble lord has had the misfortune to get a smear of ink\r\nupon the outer side of his right little finger,\" remarked Holmes\r\nas he folded up the epistle.\r\n\r\n\"He says four o'clock. It is three now. He will be here in an\r\nhour.\"\r\n\r\n\"Then I have just time, with your assistance, to get clear upon\r\nthe subject. Turn over those papers and arrange the extracts in\r\ntheir order of time, while I take a glance as to who our client\r\nis.\" He picked a red-covered volume from a line of books of\r\nreference beside the mantelpiece. \"Here he is,\" said he, sitting\r\ndown and flattening it out upon his knee. \"'Lord Robert Walsingham\r\nde Vere St. Simon, second son of the Duke of Balmoral.' Hum! 'Arms:\r\nAzure, three caltrops in chief over a fess sable. Born in 1846.'\r\nHe's forty-one years of age, which is mature for marriage. Was\r\nUnder-Secretary for the colonies in a late administration. The\r\nDuke, his father, was at one time Secretary for Foreign Affairs.\r\nThey inherit Plantagenet blood by direct descent, and Tudor on\r\nthe distaff side. Ha! Well, there is nothing very instructive in\r\nall this. I think that I must turn to you Watson, for something\r\nmore solid.\"\r\n\r\n\"I have very little difficulty in finding what I want,\" said I,\r\n\"for the facts are quite recent, and the matter struck me as\r\nremarkable. I feared to refer them to you, however, as I knew\r\nthat you had an inquiry on hand and that you disliked the\r\nintrusion of other matters.\"\r\n\r\n\"Oh, you mean the little problem of the Grosvenor Square\r\nfurniture van. That is quite cleared up now--though, indeed, it\r\nwas obvious from the first. Pray give me the results of your\r\nnewspaper selections.\"\r\n\r\n\"Here is the first notice which I can find. It is in the personal\r\ncolumn of the Morning Post, and dates, as you see, some weeks\r\nback: 'A marriage has been arranged,' it says, 'and will, if\r\nrumour is correct, very shortly take place, between Lord Robert\r\nSt. Simon, second son of the Duke of Balmoral, and Miss Hatty\r\nDoran, the only daughter of Aloysius Doran. Esq., of San\r\nFrancisco, Cal., U.S.A.' That is all.\"\r\n\r\n\"Terse and to the point,\" remarked Holmes, stretching his long,\r\nthin legs towards the fire.\r\n\r\n\"There was a paragraph amplifying this in one of the society\r\npapers of the same week. Ah, here it is: 'There will soon be a\r\ncall for protection in the marriage market, for the present\r\nfree-trade principle appears to tell heavily against our home\r\nproduct. One by one the management of the noble houses of Great\r\nBritain is passing into the hands of our fair cousins from across\r\nthe Atlantic. An important addition has been made during the last\r\nweek to the list of the prizes which have been borne away by\r\nthese charming invaders. Lord St. Simon, who has shown himself\r\nfor over twenty years proof against the little god's arrows, has\r\nnow definitely announced his approaching marriage with Miss Hatty\r\nDoran, the fascinating daughter of a California millionaire. Miss\r\nDoran, whose graceful figure and striking face attracted much\r\nattention at the Westbury House festivities, is an only child,\r\nand it is currently reported that her dowry will run to\r\nconsiderably over the six figures, with expectancies for the\r\nfuture. As it is an open secret that the Duke of Balmoral has\r\nbeen compelled to sell his pictures within the last few years,\r\nand as Lord St. Simon has no property of his own save the small\r\nestate of Birchmoor, it is obvious that the Californian heiress\r\nis not the only gainer by an alliance which will enable her to\r\nmake the easy and common transition from a Republican lady to a\r\nBritish peeress.'\"\r\n\r\n\"Anything else?\" asked Holmes, yawning.\r\n\r\n\"Oh, yes; plenty. Then there is another note in the Morning Post\r\nto say that the marriage would be an absolutely quiet one, that it\r\nwould be at St. George's, Hanover Square, that only half a dozen\r\nintimate friends would be invited, and that the party would\r\nreturn to the furnished house at Lancaster Gate which has been\r\ntaken by Mr. Aloysius Doran. Two days later--that is, on\r\nWednesday last--there is a curt announcement that the wedding had\r\ntaken place, and that the honeymoon would be passed at Lord\r\nBackwater's place, near Petersfield. Those are all the notices\r\nwhich appeared before the disappearance of the bride.\"\r\n\r\n\"Before the what?\" asked Holmes with a start.\r\n\r\n\"The vanishing of the lady.\"\r\n\r\n\"When did she vanish, then?\"\r\n\r\n\"At the wedding breakfast.\"\r\n\r\n\"Indeed. This is more interesting than it promised to be; quite\r\ndramatic, in fact.\"\r\n\r\n\"Yes; it struck me as being a little out of the common.\"\r\n\r\n\"They often vanish before the ceremony, and occasionally during\r\nthe honeymoon; but I cannot call to mind anything quite so prompt\r\nas this. Pray let me have the details.\"\r\n\r\n\"I warn you that they are very incomplete.\"\r\n\r\n\"Perhaps we may make them less so.\"\r\n\r\n\"Such as they are, they are set forth in a single article of a\r\nmorning paper of yesterday, which I will read to you. It is\r\nheaded, 'Singular Occurrence at a Fashionable Wedding':\r\n\r\n\"'The family of Lord Robert St. Simon has been thrown into the\r\ngreatest consternation by the strange and painful episodes which\r\nhave taken place in connection with his wedding. The ceremony, as\r\nshortly announced in the papers of yesterday, occurred on the\r\nprevious morning; but it is only now that it has been possible to\r\nconfirm the strange rumours which have been so persistently\r\nfloating about. In spite of the attempts of the friends to hush\r\nthe matter up, so much public attention has now been drawn to it\r\nthat no good purpose can be served by affecting to disregard what\r\nis a common subject for conversation.\r\n\r\n\"'The ceremony, which was performed at St. George's, Hanover\r\nSquare, was a very quiet one, no one being present save the\r\nfather of the bride, Mr. Aloysius Doran, the Duchess of Balmoral,\r\nLord Backwater, Lord Eustace and Lady Clara St. Simon (the\r\nyounger brother and sister of the bridegroom), and Lady Alicia\r\nWhittington. The whole party proceeded afterwards to the house of\r\nMr. Aloysius Doran, at Lancaster Gate, where breakfast had been\r\nprepared. It appears that some little trouble was caused by a\r\nwoman, whose name has not been ascertained, who endeavoured to\r\nforce her way into the house after the bridal party, alleging\r\nthat she had some claim upon Lord St. Simon. It was only after a\r\npainful and prolonged scene that she was ejected by the butler\r\nand the footman. The bride, who had fortunately entered the house\r\nbefore this unpleasant interruption, had sat down to breakfast\r\nwith the rest, when she complained of a sudden indisposition and\r\nretired to her room. Her prolonged absence having caused some\r\ncomment, her father followed her, but learned from her maid that\r\nshe had only come up to her chamber for an instant, caught up an\r\nulster and bonnet, and hurried down to the passage. One of the\r\nfootmen declared that he had seen a lady leave the house thus\r\napparelled, but had refused to credit that it was his mistress,\r\nbelieving her to be with the company. On ascertaining that his\r\ndaughter had disappeared, Mr. Aloysius Doran, in conjunction with\r\nthe bridegroom, instantly put themselves in communication with\r\nthe police, and very energetic inquiries are being made, which\r\nwill probably result in a speedy clearing up of this very\r\nsingular business. Up to a late hour last night, however, nothing\r\nhad transpired as to the whereabouts of the missing lady. There\r\nare rumours of foul play in the matter, and it is said that the\r\npolice have caused the arrest of the woman who had caused the\r\noriginal disturbance, in the belief that, from jealousy or some\r\nother motive, she may have been concerned in the strange\r\ndisappearance of the bride.'\"\r\n\r\n\"And is that all?\"\r\n\r\n\"Only one little item in another of the morning papers, but it is\r\na suggestive one.\"\r\n\r\n\"And it is--\"\r\n\r\n\"That Miss Flora Millar, the lady who had caused the disturbance,\r\nhas actually been arrested. It appears that she was formerly a\r\ndanseuse at the Allegro, and that she has known the bridegroom\r\nfor some years. There are no further particulars, and the whole\r\ncase is in your hands now--so far as it has been set forth in the\r\npublic press.\"\r\n\r\n\"And an exceedingly interesting case it appears to be. I would\r\nnot have missed it for worlds. But there is a ring at the bell,\r\nWatson, and as the clock makes it a few minutes after four, I\r\nhave no doubt that this will prove to be our noble client. Do not\r\ndream of going, Watson, for I very much prefer having a witness,\r\nif only as a check to my own memory.\"\r\n\r\n\"Lord Robert St. Simon,\" announced our page-boy, throwing open\r\nthe door. A gentleman entered, with a pleasant, cultured face,\r\nhigh-nosed and pale, with something perhaps of petulance about\r\nthe mouth, and with the steady, well-opened eye of a man whose\r\npleasant lot it had ever been to command and to be obeyed. His\r\nmanner was brisk, and yet his general appearance gave an undue\r\nimpression of age, for he had a slight forward stoop and a little\r\nbend of the knees as he walked. His hair, too, as he swept off\r\nhis very curly-brimmed hat, was grizzled round the edges and thin\r\nupon the top. As to his dress, it was careful to the verge of\r\nfoppishness, with high collar, black frock-coat, white waistcoat,\r\nyellow gloves, patent-leather shoes, and light-coloured gaiters.\r\nHe advanced slowly into the room, turning his head from left to\r\nright, and swinging in his right hand the cord which held his\r\ngolden eyeglasses.\r\n\r\n\"Good-day, Lord St. Simon,\" said Holmes, rising and bowing. \"Pray\r\ntake the basket-chair. This is my friend and colleague, Dr.\r\nWatson. Draw up a little to the fire, and we will talk this\r\nmatter over.\"\r\n\r\n\"A most painful matter to me, as you can most readily imagine,\r\nMr. Holmes. I have been cut to the quick. I understand that you\r\nhave already managed several delicate cases of this sort, sir,\r\nthough I presume that they were hardly from the same class of\r\nsociety.\"\r\n\r\n\"No, I am descending.\"\r\n\r\n\"I beg pardon.\"\r\n\r\n\"My last client of the sort was a king.\"\r\n\r\n\"Oh, really! I had no idea. And which king?\"\r\n\r\n\"The King of Scandinavia.\"\r\n\r\n\"What! Had he lost his wife?\"\r\n\r\n\"You can understand,\" said Holmes suavely, \"that I extend to the\r\naffairs of my other clients the same secrecy which I promise to\r\nyou in yours.\"\r\n\r\n\"Of course! Very right! very right! I'm sure I beg pardon. As to\r\nmy own case, I am ready to give you any information which may\r\nassist you in forming an opinion.\"\r\n\r\n\"Thank you. I have already learned all that is in the public\r\nprints, nothing more. I presume that I may take it as correct--this\r\narticle, for example, as to the disappearance of the bride.\"\r\n\r\nLord St. Simon glanced over it. \"Yes, it is correct, as far as it\r\ngoes.\"\r\n\r\n\"But it needs a great deal of supplementing before anyone could\r\noffer an opinion. I think that I may arrive at my facts most\r\ndirectly by questioning you.\"\r\n\r\n\"Pray do so.\"\r\n\r\n\"When did you first meet Miss Hatty Doran?\"\r\n\r\n\"In San Francisco, a year ago.\"\r\n\r\n\"You were travelling in the States?\"\r\n\r\n\"Yes.\"\r\n\r\n\"Did you become engaged then?\"\r\n\r\n\"No.\"\r\n\r\n\"But you were on a friendly footing?\"\r\n\r\n\"I was amused by her society, and she could see that I was\r\namused.\"\r\n\r\n\"Her father is very rich?\"\r\n\r\n\"He is said to be the richest man on the Pacific slope.\"\r\n\r\n\"And how did he make his money?\"\r\n\r\n\"In mining. He had nothing a few years ago. Then he struck gold,\r\ninvested it, and came up by leaps and bounds.\"\r\n\r\n\"Now, what is your own impression as to the young lady's--your\r\nwife's character?\"\r\n\r\nThe nobleman swung his glasses a little faster and stared down\r\ninto the fire. \"You see, Mr. Holmes,\" said he, \"my wife was\r\ntwenty before her father became a rich man. During that time she\r\nran free in a mining camp and wandered through woods or\r\nmountains, so that her education has come from Nature rather than\r\nfrom the schoolmaster. She is what we call in England a tomboy,\r\nwith a strong nature, wild and free, unfettered by any sort of\r\ntraditions. She is impetuous--volcanic, I was about to say. She\r\nis swift in making up her mind and fearless in carrying out her\r\nresolutions. On the other hand, I would not have given her the\r\nname which I have the honour to bear\"--he gave a little stately\r\ncough--\"had not I thought her to be at bottom a noble woman. I\r\nbelieve that she is capable of heroic self-sacrifice and that\r\nanything dishonourable would be repugnant to her.\"\r\n\r\n\"Have you her photograph?\"\r\n\r\n\"I brought this with me.\" He opened a locket and showed us the\r\nfull face of a very lovely woman. It was not a photograph but an\r\nivory miniature, and the artist had brought out the full effect\r\nof the lustrous black hair, the large dark eyes, and the\r\nexquisite mouth. Holmes gazed long and earnestly at it. Then he\r\nclosed the locket and handed it back to Lord St. Simon.\r\n\r\n\"The young lady came to London, then, and you renewed your\r\nacquaintance?\"\r\n\r\n\"Yes, her father brought her over for this last London season. I\r\nmet her several times, became engaged to her, and have now\r\nmarried her.\"\r\n\r\n\"She brought, I understand, a considerable dowry?\"\r\n\r\n\"A fair dowry. Not more than is usual in my family.\"\r\n\r\n\"And this, of course, remains to you, since the marriage is a\r\nfait accompli?\"\r\n\r\n\"I really have made no inquiries on the subject.\"\r\n\r\n\"Very naturally not. Did you see Miss Doran on the day before the\r\nwedding?\"\r\n\r\n\"Yes.\"\r\n\r\n\"Was she in good spirits?\"\r\n\r\n\"Never better. She kept talking of what we should do in our\r\nfuture lives.\"\r\n\r\n\"Indeed! That is very interesting. And on the morning of the\r\nwedding?\"\r\n\r\n\"She was as bright as possible--at least until after the\r\nceremony.\"\r\n\r\n\"And did you observe any change in her then?\"\r\n\r\n\"Well, to tell the truth, I saw then the first signs that I had\r\never seen that her temper was just a little sharp. The incident\r\nhowever, was too trivial to relate and can have no possible\r\nbearing upon the case.\"\r\n\r\n\"Pray let us have it, for all that.\"\r\n\r\n\"Oh, it is childish. She dropped her bouquet as we went towards\r\nthe vestry. She was passing the front pew at the time, and it\r\nfell over into the pew. There was a moment's delay, but the\r\ngentleman in the pew handed it up to her again, and it did not\r\nappear to be the worse for the fall. Yet when I spoke to her of\r\nthe matter, she answered me abruptly; and in the carriage, on our\r\nway home, she seemed absurdly agitated over this trifling cause.\"\r\n\r\n\"Indeed! You say that there was a gentleman in the pew. Some of\r\nthe general public were present, then?\"\r\n\r\n\"Oh, yes. It is impossible to exclude them when the church is\r\nopen.\"\r\n\r\n\"This gentleman was not one of your wife's friends?\"\r\n\r\n\"No, no; I call him a gentleman by courtesy, but he was quite a\r\ncommon-looking person. I hardly noticed his appearance. But\r\nreally I think that we are wandering rather far from the point.\"\r\n\r\n\"Lady St. Simon, then, returned from the wedding in a less\r\ncheerful frame of mind than she had gone to it. What did she do\r\non re-entering her father's house?\"\r\n\r\n\"I saw her in conversation with her maid.\"\r\n\r\n\"And who is her maid?\"\r\n\r\n\"Alice is her name. She is an American and came from California\r\nwith her.\"\r\n\r\n\"A confidential servant?\"\r\n\r\n\"A little too much so. It seemed to me that her mistress allowed\r\nher to take great liberties. Still, of course, in America they\r\nlook upon these things in a different way.\"\r\n\r\n\"How long did she speak to this Alice?\"\r\n\r\n\"Oh, a few minutes. I had something else to think of.\"\r\n\r\n\"You did not overhear what they said?\"\r\n\r\n\"Lady St. Simon said something about 'jumping a claim.' She was\r\naccustomed to use slang of the kind. I have no idea what she\r\nmeant.\"\r\n\r\n\"American slang is very expressive sometimes. And what did your\r\nwife do when she finished speaking to her maid?\"\r\n\r\n\"She walked into the breakfast-room.\"\r\n\r\n\"On your arm?\"\r\n\r\n\"No, alone. She was very independent in little matters like that.\r\nThen, after we had sat down for ten minutes or so, she rose\r\nhurriedly, muttered some words of apology, and left the room. She\r\nnever came back.\"\r\n\r\n\"But this maid, Alice, as I understand, deposes that she went to\r\nher room, covered her bride's dress with a long ulster, put on a\r\nbonnet, and went out.\"\r\n\r\n\"Quite so. And she was afterwards seen walking into Hyde Park in\r\ncompany with Flora Millar, a woman who is now in custody, and who\r\nhad already made a disturbance at Mr. Doran's house that\r\nmorning.\"\r\n\r\n\"Ah, yes. I should like a few particulars as to this young lady,\r\nand your relations to her.\"\r\n\r\nLord St. Simon shrugged his shoulders and raised his eyebrows.\r\n\"We have been on a friendly footing for some years--I may say on\r\na very friendly footing. She used to be at the Allegro. I have\r\nnot treated her ungenerously, and she had no just cause of\r\ncomplaint against me, but you know what women are, Mr. Holmes.\r\nFlora was a dear little thing, but exceedingly hot-headed and\r\ndevotedly attached to me. She wrote me dreadful letters when she\r\nheard that I was about to be married, and, to tell the truth, the\r\nreason why I had the marriage celebrated so quietly was that I\r\nfeared lest there might be a scandal in the church. She came to\r\nMr. Doran's door just after we returned, and she endeavoured to\r\npush her way in, uttering very abusive expressions towards my\r\nwife, and even threatening her, but I had foreseen the\r\npossibility of something of the sort, and I had two police\r\nfellows there in private clothes, who soon pushed her out again.\r\nShe was quiet when she saw that there was no good in making a\r\nrow.\"\r\n\r\n\"Did your wife hear all this?\"\r\n\r\n\"No, thank goodness, she did not.\"\r\n\r\n\"And she was seen walking with this very woman afterwards?\"\r\n\r\n\"Yes. That is what Mr. Lestrade, of Scotland Yard, looks upon as\r\nso serious. It is thought that Flora decoyed my wife out and laid\r\nsome terrible trap for her.\"\r\n\r\n\"Well, it is a possible supposition.\"\r\n\r\n\"You think so, too?\"\r\n\r\n\"I did not say a probable one. But you do not yourself look upon\r\nthis as likely?\"\r\n\r\n\"I do not think Flora would hurt a fly.\"\r\n\r\n\"Still, jealousy is a strange transformer of characters. Pray\r\nwhat is your own theory as to what took place?\"\r\n\r\n\"Well, really, I came to seek a theory, not to propound one. I\r\nhave given you all the facts. Since you ask me, however, I may\r\nsay that it has occurred to me as possible that the excitement of\r\nthis affair, the consciousness that she had made so immense a\r\nsocial stride, had the effect of causing some little nervous\r\ndisturbance in my wife.\"\r\n\r\n\"In short, that she had become suddenly deranged?\"\r\n\r\n\"Well, really, when I consider that she has turned her back--I\r\nwill not say upon me, but upon so much that many have aspired to\r\nwithout success--I can hardly explain it in any other fashion.\"\r\n\r\n\"Well, certainly that is also a conceivable hypothesis,\" said\r\nHolmes, smiling. \"And now, Lord St. Simon, I think that I have\r\nnearly all my data. May I ask whether you were seated at the\r\nbreakfast-table so that you could see out of the window?\"\r\n\r\n\"We could see the other side of the road and the Park.\"\r\n\r\n\"Quite so. Then I do not think that I need to detain you longer.\r\nI shall communicate with you.\"\r\n\r\n\"Should you be fortunate enough to solve this problem,\" said our\r\nclient, rising.\r\n\r\n\"I have solved it.\"\r\n\r\n\"Eh? What was that?\"\r\n\r\n\"I say that I have solved it.\"\r\n\r\n\"Where, then, is my wife?\"\r\n\r\n\"That is a detail which I shall speedily supply.\"\r\n\r\nLord St. Simon shook his head. \"I am afraid that it will take\r\nwiser heads than yours or mine,\" he remarked, and bowing in a\r\nstately, old-fashioned manner he departed.\r\n\r\n\"It is very good of Lord St. Simon to honour my head by putting\r\nit on a level with his own,\" said Sherlock Holmes, laughing. \"I\r\nthink that I shall have a whisky and soda and a cigar after all\r\nthis cross-questioning. I had formed my conclusions as to the\r\ncase before our client came into the room.\"\r\n\r\n\"My dear Holmes!\"\r\n\r\n\"I have notes of several similar cases, though none, as I\r\nremarked before, which were quite as prompt. My whole examination\r\nserved to turn my conjecture into a certainty. Circumstantial\r\nevidence is occasionally very convincing, as when you find a\r\ntrout in the milk, to quote Thoreau's example.\"\r\n\r\n\"But I have heard all that you have heard.\"\r\n\r\n\"Without, however, the knowledge of pre-existing cases which\r\nserves me so well. There was a parallel instance in Aberdeen some\r\nyears back, and something on very much the same lines at Munich\r\nthe year after the Franco-Prussian War. It is one of these\r\ncases--but, hullo, here is Lestrade! Good-afternoon, Lestrade!\r\nYou will find an extra tumbler upon the sideboard, and there are\r\ncigars in the box.\"\r\n\r\nThe official detective was attired in a pea-jacket and cravat,\r\nwhich gave him a decidedly nautical appearance, and he carried a\r\nblack canvas bag in his hand. With a short greeting he seated\r\nhimself and lit the cigar which had been offered to him.\r\n\r\n\"What's up, then?\" asked Holmes with a twinkle in his eye. \"You\r\nlook dissatisfied.\"\r\n\r\n\"And I feel dissatisfied. It is this infernal St. Simon marriage\r\ncase. I can make neither head nor tail of the business.\"\r\n\r\n\"Really! You surprise me.\"\r\n\r\n\"Who ever heard of such a mixed affair? Every clue seems to slip\r\nthrough my fingers. I have been at work upon it all day.\"\r\n\r\n\"And very wet it seems to have made you,\" said Holmes laying his\r\nhand upon the arm of the pea-jacket.\r\n\r\n\"Yes, I have been dragging the Serpentine.\"\r\n\r\n\"In heaven's name, what for?\"\r\n\r\n\"In search of the body of Lady St. Simon.\"\r\n\r\nSherlock Holmes leaned back in his chair and laughed heartily.\r\n\r\n\"Have you dragged the basin of Trafalgar Square fountain?\" he\r\nasked.\r\n\r\n\"Why? What do you mean?\"\r\n\r\n\"Because you have just as good a chance of finding this lady in\r\nthe one as in the other.\"\r\n\r\nLestrade shot an angry glance at my companion. \"I suppose you\r\nknow all about it,\" he snarled.\r\n\r\n\"Well, I have only just heard the facts, but my mind is made up.\"\r\n\r\n\"Oh, indeed! Then you think that the Serpentine plays no part in\r\nthe matter?\"\r\n\r\n\"I think it very unlikely.\"\r\n\r\n\"Then perhaps you will kindly explain how it is that we found\r\nthis in it?\" He opened his bag as he spoke, and tumbled onto the\r\nfloor a wedding-dress of watered silk, a pair of white satin\r\nshoes and a bride's wreath and veil, all discoloured and soaked\r\nin water. \"There,\" said he, putting a new wedding-ring upon the\r\ntop of the pile. \"There is a little nut for you to crack, Master\r\nHolmes.\"\r\n\r\n\"Oh, indeed!\" said my friend, blowing blue rings into the air.\r\n\"You dragged them from the Serpentine?\"\r\n\r\n\"No. They were found floating near the margin by a park-keeper.\r\nThey have been identified as her clothes, and it seemed to me\r\nthat if the clothes were there the body would not be far off.\"\r\n\r\n\"By the same brilliant reasoning, every man's body is to be found\r\nin the neighbourhood of his wardrobe. And pray what did you hope\r\nto arrive at through this?\"\r\n\r\n\"At some evidence implicating Flora Millar in the disappearance.\"\r\n\r\n\"I am afraid that you will find it difficult.\"\r\n\r\n\"Are you, indeed, now?\" cried Lestrade with some bitterness. \"I\r\nam afraid, Holmes, that you are not very practical with your\r\ndeductions and your inferences. You have made two blunders in as\r\nmany minutes. This dress does implicate Miss Flora Millar.\"\r\n\r\n\"And how?\"\r\n\r\n\"In the dress is a pocket. In the pocket is a card-case. In the\r\ncard-case is a note. And here is the very note.\" He slapped it\r\ndown upon the table in front of him. \"Listen to this: 'You will\r\nsee me when all is ready. Come at once. F.H.M.' Now my theory all\r\nalong has been that Lady St. Simon was decoyed away by Flora\r\nMillar, and that she, with confederates, no doubt, was\r\nresponsible for her disappearance. Here, signed with her\r\ninitials, is the very note which was no doubt quietly slipped\r\ninto her hand at the door and which lured her within their\r\nreach.\"\r\n\r\n\"Very good, Lestrade,\" said Holmes, laughing. \"You really are\r\nvery fine indeed. Let me see it.\" He took up the paper in a\r\nlistless way, but his attention instantly became riveted, and he\r\ngave a little cry of satisfaction. \"This is indeed important,\"\r\nsaid he.\r\n\r\n\"Ha! you find it so?\"\r\n\r\n\"Extremely so. I congratulate you warmly.\"\r\n\r\nLestrade rose in his triumph and bent his head to look. \"Why,\" he\r\nshrieked, \"you're looking at the wrong side!\"\r\n\r\n\"On the contrary, this is the right side.\"\r\n\r\n\"The right side? You're mad! Here is the note written in pencil\r\nover here.\"\r\n\r\n\"And over here is what appears to be the fragment of a hotel\r\nbill, which interests me deeply.\"\r\n\r\n\"There's nothing in it. I looked at it before,\" said Lestrade.\r\n\"'Oct. 4th, rooms 8s., breakfast 2s. 6d., cocktail 1s., lunch 2s.\r\n6d., glass sherry, 8d.' I see nothing in that.\"\r\n\r\n\"Very likely not. It is most important, all the same. As to the\r\nnote, it is important also, or at least the initials are, so I\r\ncongratulate you again.\"\r\n\r\n\"I've wasted time enough,\" said Lestrade, rising. \"I believe in\r\nhard work and not in sitting by the fire spinning fine theories.\r\nGood-day, Mr. Holmes, and we shall see which gets to the bottom\r\nof the matter first.\" He gathered up the garments, thrust them\r\ninto the bag, and made for the door.\r\n\r\n\"Just one hint to you, Lestrade,\" drawled Holmes before his rival\r\nvanished; \"I will tell you the true solution of the matter. Lady\r\nSt. Simon is a myth. There is not, and there never has been, any\r\nsuch person.\"\r\n\r\nLestrade looked sadly at my companion. Then he turned to me,\r\ntapped his forehead three times, shook his head solemnly, and\r\nhurried away.\r\n\r\nHe had hardly shut the door behind him when Holmes rose to put on\r\nhis overcoat. \"There is something in what the fellow says about\r\noutdoor work,\" he remarked, \"so I think, Watson, that I must\r\nleave you to your papers for a little.\"\r\n\r\nIt was after five o'clock when Sherlock Holmes left me, but I had\r\nno time to be lonely, for within an hour there arrived a\r\nconfectioner's man with a very large flat box. This he unpacked\r\nwith the help of a youth whom he had brought with him, and\r\npresently, to my very great astonishment, a quite epicurean\r\nlittle cold supper began to be laid out upon our humble\r\nlodging-house mahogany. There were a couple of brace of cold\r\nwoodcock, a pheasant, a pâté de foie gras pie with a group of\r\nancient and cobwebby bottles. Having laid out all these luxuries,\r\nmy two visitors vanished away, like the genii of the Arabian\r\nNights, with no explanation save that the things had been paid\r\nfor and were ordered to this address.\r\n\r\nJust before nine o'clock Sherlock Holmes stepped briskly into the\r\nroom. His features were gravely set, but there was a light in his\r\neye which made me think that he had not been disappointed in his\r\nconclusions.\r\n\r\n\"They have laid the supper, then,\" he said, rubbing his hands.\r\n\r\n\"You seem to expect company. They have laid for five.\"\r\n\r\n\"Yes, I fancy we may have some company dropping in,\" said he. \"I\r\nam surprised that Lord St. Simon has not already arrived. Ha! I\r\nfancy that I hear his step now upon the stairs.\"\r\n\r\nIt was indeed our visitor of the afternoon who came bustling in,\r\ndangling his glasses more vigorously than ever, and with a very\r\nperturbed expression upon his aristocratic features.\r\n\r\n\"My messenger reached you, then?\" asked Holmes.\r\n\r\n\"Yes, and I confess that the contents startled me beyond measure.\r\nHave you good authority for what you say?\"\r\n\r\n\"The best possible.\"\r\n\r\nLord St. Simon sank into a chair and passed his hand over his\r\nforehead.\r\n\r\n\"What will the Duke say,\" he murmured, \"when he hears that one of\r\nthe family has been subjected to such humiliation?\"\r\n\r\n\"It is the purest accident. I cannot allow that there is any\r\nhumiliation.\"\r\n\r\n\"Ah, you look on these things from another standpoint.\"\r\n\r\n\"I fail to see that anyone is to blame. I can hardly see how the\r\nlady could have acted otherwise, though her abrupt method of\r\ndoing it was undoubtedly to be regretted. Having no mother, she\r\nhad no one to advise her at such a crisis.\"\r\n\r\n\"It was a slight, sir, a public slight,\" said Lord St. Simon,\r\ntapping his fingers upon the table.\r\n\r\n\"You must make allowance for this poor girl, placed in so\r\nunprecedented a position.\"\r\n\r\n\"I will make no allowance. I am very angry indeed, and I have\r\nbeen shamefully used.\"\r\n\r\n\"I think that I heard a ring,\" said Holmes. \"Yes, there are steps\r\non the landing. If I cannot persuade you to take a lenient view\r\nof the matter, Lord St. Simon, I have brought an advocate here\r\nwho may be more successful.\" He opened the door and ushered in a\r\nlady and gentleman. \"Lord St. Simon,\" said he \"allow me to\r\nintroduce you to Mr. and Mrs. Francis Hay Moulton. The lady, I\r\nthink, you have already met.\"\r\n\r\nAt the sight of these newcomers our client had sprung from his\r\nseat and stood very erect, with his eyes cast down and his hand\r\nthrust into the breast of his frock-coat, a picture of offended\r\ndignity. The lady had taken a quick step forward and had held out\r\nher hand to him, but he still refused to raise his eyes. It was\r\nas well for his resolution, perhaps, for her pleading face was\r\none which it was hard to resist.\r\n\r\n\"You're angry, Robert,\" said she. \"Well, I guess you have every\r\ncause to be.\"\r\n\r\n\"Pray make no apology to me,\" said Lord St. Simon bitterly.\r\n\r\n\"Oh, yes, I know that I have treated you real bad and that I\r\nshould have spoken to you before I went; but I was kind of\r\nrattled, and from the time when I saw Frank here again I just\r\ndidn't know what I was doing or saying. I only wonder I didn't\r\nfall down and do a faint right there before the altar.\"\r\n\r\n\"Perhaps, Mrs. Moulton, you would like my friend and me to leave\r\nthe room while you explain this matter?\"\r\n\r\n\"If I may give an opinion,\" remarked the strange gentleman,\r\n\"we've had just a little too much secrecy over this business\r\nalready. For my part, I should like all Europe and America to\r\nhear the rights of it.\" He was a small, wiry, sunburnt man,\r\nclean-shaven, with a sharp face and alert manner.\r\n\r\n\"Then I'll tell our story right away,\" said the lady. \"Frank here\r\nand I met in '84, in McQuire's camp, near the Rockies, where pa\r\nwas working a claim. We were engaged to each other, Frank and I;\r\nbut then one day father struck a rich pocket and made a pile,\r\nwhile poor Frank here had a claim that petered out and came to\r\nnothing. The richer pa grew the poorer was Frank; so at last pa\r\nwouldn't hear of our engagement lasting any longer, and he took\r\nme away to 'Frisco. Frank wouldn't throw up his hand, though; so\r\nhe followed me there, and he saw me without pa knowing anything\r\nabout it. It would only have made him mad to know, so we just\r\nfixed it all up for ourselves. Frank said that he would go and\r\nmake his pile, too, and never come back to claim me until he had\r\nas much as pa. So then I promised to wait for him to the end of\r\ntime and pledged myself not to marry anyone else while he lived.\r\n'Why shouldn't we be married right away, then,' said he, 'and\r\nthen I will feel sure of you; and I won't claim to be your\r\nhusband until I come back?' Well, we talked it over, and he had\r\nfixed it all up so nicely, with a clergyman all ready in waiting,\r\nthat we just did it right there; and then Frank went off to seek\r\nhis fortune, and I went back to pa.\r\n\r\n\"The next I heard of Frank was that he was in Montana, and then\r\nhe went prospecting in Arizona, and then I heard of him from New\r\nMexico. After that came a long newspaper story about how a\r\nminers' camp had been attacked by Apache Indians, and there was\r\nmy Frank's name among the killed. I fainted dead away, and I was\r\nvery sick for months after. Pa thought I had a decline and took\r\nme to half the doctors in 'Frisco. Not a word of news came for a\r\nyear and more, so that I never doubted that Frank was really\r\ndead. Then Lord St. Simon came to 'Frisco, and we came to London,\r\nand a marriage was arranged, and pa was very pleased, but I felt\r\nall the time that no man on this earth would ever take the place\r\nin my heart that had been given to my poor Frank.\r\n\r\n\"Still, if I had married Lord St. Simon, of course I'd have done\r\nmy duty by him. We can't command our love, but we can our\r\nactions. I went to the altar with him with the intention to make\r\nhim just as good a wife as it was in me to be. But you may\r\nimagine what I felt when, just as I came to the altar rails, I\r\nglanced back and saw Frank standing and looking at me out of the\r\nfirst pew. I thought it was his ghost at first; but when I looked\r\nagain there he was still, with a kind of question in his eyes, as\r\nif to ask me whether I were glad or sorry to see him. I wonder I\r\ndidn't drop. I know that everything was turning round, and the\r\nwords of the clergyman were just like the buzz of a bee in my\r\near. I didn't know what to do. Should I stop the service and make\r\na scene in the church? I glanced at him again, and he seemed to\r\nknow what I was thinking, for he raised his finger to his lips to\r\ntell me to be still. Then I saw him scribble on a piece of paper,\r\nand I knew that he was writing me a note. As I passed his pew on\r\nthe way out I dropped my bouquet over to him, and he slipped the\r\nnote into my hand when he returned me the flowers. It was only a\r\nline asking me to join him when he made the sign to me to do so.\r\nOf course I never doubted for a moment that my first duty was now\r\nto him, and I determined to do just whatever he might direct.\r\n\r\n\"When I got back I told my maid, who had known him in California,\r\nand had always been his friend. I ordered her to say nothing, but\r\nto get a few things packed and my ulster ready. I know I ought to\r\nhave spoken to Lord St. Simon, but it was dreadful hard before\r\nhis mother and all those great people. I just made up my mind to\r\nrun away and explain afterwards. I hadn't been at the table ten\r\nminutes before I saw Frank out of the window at the other side of\r\nthe road. He beckoned to me and then began walking into the Park.\r\nI slipped out, put on my things, and followed him. Some woman\r\ncame talking something or other about Lord St. Simon to\r\nme--seemed to me from the little I heard as if he had a little\r\nsecret of his own before marriage also--but I managed to get away\r\nfrom her and soon overtook Frank. We got into a cab together, and\r\naway we drove to some lodgings he had taken in Gordon Square, and\r\nthat was my true wedding after all those years of waiting. Frank\r\nhad been a prisoner among the Apaches, had escaped, came on to\r\n'Frisco, found that I had given him up for dead and had gone to\r\nEngland, followed me there, and had come upon me at last on the\r\nvery morning of my second wedding.\"\r\n\r\n\"I saw it in a paper,\" explained the American. \"It gave the name\r\nand the church but not where the lady lived.\"\r\n\r\n\"Then we had a talk as to what we should do, and Frank was all\r\nfor openness, but I was so ashamed of it all that I felt as if I\r\nshould like to vanish away and never see any of them again--just\r\nsending a line to pa, perhaps, to show him that I was alive. It\r\nwas awful to me to think of all those lords and ladies sitting\r\nround that breakfast-table and waiting for me to come back. So\r\nFrank took my wedding-clothes and things and made a bundle of\r\nthem, so that I should not be traced, and dropped them away\r\nsomewhere where no one could find them. It is likely that we\r\nshould have gone on to Paris to-morrow, only that this good\r\ngentleman, Mr. Holmes, came round to us this evening, though how\r\nhe found us is more than I can think, and he showed us very\r\nclearly and kindly that I was wrong and that Frank was right, and\r\nthat we should be putting ourselves in the wrong if we were so\r\nsecret. Then he offered to give us a chance of talking to Lord\r\nSt. Simon alone, and so we came right away round to his rooms at\r\nonce. Now, Robert, you have heard it all, and I am very sorry if\r\nI have given you pain, and I hope that you do not think very\r\nmeanly of me.\"\r\n\r\nLord St. Simon had by no means relaxed his rigid attitude, but\r\nhad listened with a frowning brow and a compressed lip to this\r\nlong narrative.\r\n\r\n\"Excuse me,\" he said, \"but it is not my custom to discuss my most\r\nintimate personal affairs in this public manner.\"\r\n\r\n\"Then you won't forgive me? You won't shake hands before I go?\"\r\n\r\n\"Oh, certainly, if it would give you any pleasure.\" He put out\r\nhis hand and coldly grasped that which she extended to him.\r\n\r\n\"I had hoped,\" suggested Holmes, \"that you would have joined us\r\nin a friendly supper.\"\r\n\r\n\"I think that there you ask a little too much,\" responded his\r\nLordship. \"I may be forced to acquiesce in these recent\r\ndevelopments, but I can hardly be expected to make merry over\r\nthem. I think that with your permission I will now wish you all a\r\nvery good-night.\" He included us all in a sweeping bow and\r\nstalked out of the room.\r\n\r\n\"Then I trust that you at least will honour me with your\r\ncompany,\" said Sherlock Holmes. \"It is always a joy to meet an\r\nAmerican, Mr. Moulton, for I am one of those who believe that the\r\nfolly of a monarch and the blundering of a minister in far-gone\r\nyears will not prevent our children from being some day citizens\r\nof the same world-wide country under a flag which shall be a\r\nquartering of the Union Jack with the Stars and Stripes.\"\r\n\r\n\"The case has been an interesting one,\" remarked Holmes when our\r\nvisitors had left us, \"because it serves to show very clearly how\r\nsimple the explanation may be of an affair which at first sight\r\nseems to be almost inexplicable. Nothing could be more natural\r\nthan the sequence of events as narrated by this lady, and nothing\r\nstranger than the result when viewed, for instance, by Mr.\r\nLestrade of Scotland Yard.\"\r\n\r\n\"You were not yourself at fault at all, then?\"\r\n\r\n\"From the first, two facts were very obvious to me, the one that\r\nthe lady had been quite willing to undergo the wedding ceremony,\r\nthe other that she had repented of it within a few minutes of\r\nreturning home. Obviously something had occurred during the\r\nmorning, then, to cause her to change her mind. What could that\r\nsomething be? She could not have spoken to anyone when she was\r\nout, for she had been in the company of the bridegroom. Had she\r\nseen someone, then? If she had, it must be someone from America\r\nbecause she had spent so short a time in this country that she\r\ncould hardly have allowed anyone to acquire so deep an influence\r\nover her that the mere sight of him would induce her to change\r\nher plans so completely. You see we have already arrived, by a\r\nprocess of exclusion, at the idea that she might have seen an\r\nAmerican. Then who could this American be, and why should he\r\npossess so much influence over her? It might be a lover; it might\r\nbe a husband. Her young womanhood had, I knew, been spent in\r\nrough scenes and under strange conditions. So far I had got\r\nbefore I ever heard Lord St. Simon's narrative. When he told us\r\nof a man in a pew, of the change in the bride's manner, of so\r\ntransparent a device for obtaining a note as the dropping of a\r\nbouquet, of her resort to her confidential maid, and of her very\r\nsignificant allusion to claim-jumping--which in miners' parlance\r\nmeans taking possession of that which another person has a prior\r\nclaim to--the whole situation became absolutely clear. She had\r\ngone off with a man, and the man was either a lover or was a\r\nprevious husband--the chances being in favour of the latter.\"\r\n\r\n\"And how in the world did you find them?\"\r\n\r\n\"It might have been difficult, but friend Lestrade held\r\ninformation in his hands the value of which he did not himself\r\nknow. The initials were, of course, of the highest importance,\r\nbut more valuable still was it to know that within a week he had\r\nsettled his bill at one of the most select London hotels.\"\r\n\r\n\"How did you deduce the select?\"\r\n\r\n\"By the select prices. Eight shillings for a bed and eightpence\r\nfor a glass of sherry pointed to one of the most expensive\r\nhotels. There are not many in London which charge at that rate.\r\nIn the second one which I visited in Northumberland Avenue, I\r\nlearned by an inspection of the book that Francis H. Moulton, an\r\nAmerican gentleman, had left only the day before, and on looking\r\nover the entries against him, I came upon the very items which I\r\nhad seen in the duplicate bill. His letters were to be forwarded\r\nto 226 Gordon Square; so thither I travelled, and being fortunate\r\nenough to find the loving couple at home, I ventured to give them\r\nsome paternal advice and to point out to them that it would be\r\nbetter in every way that they should make their position a little\r\nclearer both to the general public and to Lord St. Simon in\r\nparticular. I invited them to meet him here, and, as you see, I\r\nmade him keep the appointment.\"\r\n\r\n\"But with no very good result,\" I remarked. \"His conduct was\r\ncertainly not very gracious.\"\r\n\r\n\"Ah, Watson,\" said Holmes, smiling, \"perhaps you would not be\r\nvery gracious either, if, after all the trouble of wooing and\r\nwedding, you found yourself deprived in an instant of wife and of\r\nfortune. I think that we may judge Lord St. Simon very mercifully\r\nand thank our stars that we are never likely to find ourselves in\r\nthe same position. Draw your chair up and hand me my violin, for\r\nthe only problem we have still to solve is how to while away\r\nthese bleak autumnal evenings.\"\r\n\r\n\r\n\r\nXI. THE ADVENTURE OF THE BERYL CORONET\r\n\r\n\"Holmes,\" said I as I stood one morning in our bow-window looking\r\ndown the street, \"here is a madman coming along. It seems rather\r\nsad that his relatives should allow him to come out alone.\"\r\n\r\nMy friend rose lazily from his armchair and stood with his hands\r\nin the pockets of his dressing-gown, looking over my shoulder. It\r\nwas a bright, crisp February morning, and the snow of the day\r\nbefore still lay deep upon the ground, shimmering brightly in the\r\nwintry sun. Down the centre of Baker Street it had been ploughed\r\ninto a brown crumbly band by the traffic, but at either side and\r\non the heaped-up edges of the foot-paths it still lay as white as\r\nwhen it fell. The grey pavement had been cleaned and scraped, but\r\nwas still dangerously slippery, so that there were fewer\r\npassengers than usual. Indeed, from the direction of the\r\nMetropolitan Station no one was coming save the single gentleman\r\nwhose eccentric conduct had drawn my attention.\r\n\r\nHe was a man of about fifty, tall, portly, and imposing, with a\r\nmassive, strongly marked face and a commanding figure. He was\r\ndressed in a sombre yet rich style, in black frock-coat, shining\r\nhat, neat brown gaiters, and well-cut pearl-grey trousers. Yet\r\nhis actions were in absurd contrast to the dignity of his dress\r\nand features, for he was running hard, with occasional little\r\nsprings, such as a weary man gives who is little accustomed to\r\nset any tax upon his legs. As he ran he jerked his hands up and\r\ndown, waggled his head, and writhed his face into the most\r\nextraordinary contortions.\r\n\r\n\"What on earth can be the matter with him?\" I asked. \"He is\r\nlooking up at the numbers of the houses.\"\r\n\r\n\"I believe that he is coming here,\" said Holmes, rubbing his\r\nhands.\r\n\r\n\"Here?\"\r\n\r\n\"Yes; I rather think he is coming to consult me professionally. I\r\nthink that I recognise the symptoms. Ha! did I not tell you?\" As\r\nhe spoke, the man, puffing and blowing, rushed at our door and\r\npulled at our bell until the whole house resounded with the\r\nclanging.\r\n\r\nA few moments later he was in our room, still puffing, still\r\ngesticulating, but with so fixed a look of grief and despair in\r\nhis eyes that our smiles were turned in an instant to horror and\r\npity. For a while he could not get his words out, but swayed his\r\nbody and plucked at his hair like one who has been driven to the\r\nextreme limits of his reason. Then, suddenly springing to his\r\nfeet, he beat his head against the wall with such force that we\r\nboth rushed upon him and tore him away to the centre of the room.\r\nSherlock Holmes pushed him down into the easy-chair and, sitting\r\nbeside him, patted his hand and chatted with him in the easy,\r\nsoothing tones which he knew so well how to employ.\r\n\r\n\"You have come to me to tell your story, have you not?\" said he.\r\n\"You are fatigued with your haste. Pray wait until you have\r\nrecovered yourself, and then I shall be most happy to look into\r\nany little problem which you may submit to me.\"\r\n\r\nThe man sat for a minute or more with a heaving chest, fighting\r\nagainst his emotion. Then he passed his handkerchief over his\r\nbrow, set his lips tight, and turned his face towards us.\r\n\r\n\"No doubt you think me mad?\" said he.\r\n\r\n\"I see that you have had some great trouble,\" responded Holmes.\r\n\r\n\"God knows I have!--a trouble which is enough to unseat my\r\nreason, so sudden and so terrible is it. Public disgrace I might\r\nhave faced, although I am a man whose character has never yet\r\nborne a stain. Private affliction also is the lot of every man;\r\nbut the two coming together, and in so frightful a form, have\r\nbeen enough to shake my very soul. Besides, it is not I alone.\r\nThe very noblest in the land may suffer unless some way be found\r\nout of this horrible affair.\"\r\n\r\n\"Pray compose yourself, sir,\" said Holmes, \"and let me have a\r\nclear account of who you are and what it is that has befallen\r\nyou.\"\r\n\r\n\"My name,\" answered our visitor, \"is probably familiar to your\r\nears. I am Alexander Holder, of the banking firm of Holder &\r\nStevenson, of Threadneedle Street.\"\r\n\r\nThe name was indeed well known to us as belonging to the senior\r\npartner in the second largest private banking concern in the City\r\nof London. What could have happened, then, to bring one of the\r\nforemost citizens of London to this most pitiable pass? We\r\nwaited, all curiosity, until with another effort he braced\r\nhimself to tell his story.\r\n\r\n\"I feel that time is of value,\" said he; \"that is why I hastened\r\nhere when the police inspector suggested that I should secure\r\nyour co-operation. I came to Baker Street by the Underground and\r\nhurried from there on foot, for the cabs go slowly through this\r\nsnow. That is why I was so out of breath, for I am a man who\r\ntakes very little exercise. I feel better now, and I will put the\r\nfacts before you as shortly and yet as clearly as I can.\r\n\r\n\"It is, of course, well known to you that in a successful banking\r\nbusiness as much depends upon our being able to find remunerative\r\ninvestments for our funds as upon our increasing our connection\r\nand the number of our depositors. One of our most lucrative means\r\nof laying out money is in the shape of loans, where the security\r\nis unimpeachable. We have done a good deal in this direction\r\nduring the last few years, and there are many noble families to\r\nwhom we have advanced large sums upon the security of their\r\npictures, libraries, or plate.\r\n\r\n\"Yesterday morning I was seated in my office at the bank when a\r\ncard was brought in to me by one of the clerks. I started when I\r\nsaw the name, for it was that of none other than--well, perhaps\r\neven to you I had better say no more than that it was a name\r\nwhich is a household word all over the earth--one of the highest,\r\nnoblest, most exalted names in England. I was overwhelmed by the\r\nhonour and attempted, when he entered, to say so, but he plunged\r\nat once into business with the air of a man who wishes to hurry\r\nquickly through a disagreeable task.\r\n\r\n\"'Mr. Holder,' said he, 'I have been informed that you are in the\r\nhabit of advancing money.'\r\n\r\n\"'The firm does so when the security is good.' I answered.\r\n\r\n\"'It is absolutely essential to me,' said he, 'that I should have\r\n50,000 pounds at once. I could, of course, borrow so trifling a\r\nsum ten times over from my friends, but I much prefer to make it\r\na matter of business and to carry out that business myself. In my\r\nposition you can readily understand that it is unwise to place\r\none's self under obligations.'\r\n\r\n\"'For how long, may I ask, do you want this sum?' I asked.\r\n\r\n\"'Next Monday I have a large sum due to me, and I shall then most\r\ncertainly repay what you advance, with whatever interest you\r\nthink it right to charge. But it is very essential to me that the\r\nmoney should be paid at once.'\r\n\r\n\"'I should be happy to advance it without further parley from my\r\nown private purse,' said I, 'were it not that the strain would be\r\nrather more than it could bear. If, on the other hand, I am to do\r\nit in the name of the firm, then in justice to my partner I must\r\ninsist that, even in your case, every businesslike precaution\r\nshould be taken.'\r\n\r\n\"'I should much prefer to have it so,' said he, raising up a\r\nsquare, black morocco case which he had laid beside his chair.\r\n'You have doubtless heard of the Beryl Coronet?'\r\n\r\n\"'One of the most precious public possessions of the empire,'\r\nsaid I.\r\n\r\n\"'Precisely.' He opened the case, and there, imbedded in soft,\r\nflesh-coloured velvet, lay the magnificent piece of jewellery\r\nwhich he had named. 'There are thirty-nine enormous beryls,' said\r\nhe, 'and the price of the gold chasing is incalculable. The\r\nlowest estimate would put the worth of the coronet at double the\r\nsum which I have asked. I am prepared to leave it with you as my\r\nsecurity.'\r\n\r\n\"I took the precious case into my hands and looked in some\r\nperplexity from it to my illustrious client.\r\n\r\n\"'You doubt its value?' he asked.\r\n\r\n\"'Not at all. I only doubt--'\r\n\r\n\"'The propriety of my leaving it. You may set your mind at rest\r\nabout that. I should not dream of doing so were it not absolutely\r\ncertain that I should be able in four days to reclaim it. It is a\r\npure matter of form. Is the security sufficient?'\r\n\r\n\"'Ample.'\r\n\r\n\"'You understand, Mr. Holder, that I am giving you a strong proof\r\nof the confidence which I have in you, founded upon all that I\r\nhave heard of you. I rely upon you not only to be discreet and to\r\nrefrain from all gossip upon the matter but, above all, to\r\npreserve this coronet with every possible precaution because I\r\nneed not say that a great public scandal would be caused if any\r\nharm were to befall it. Any injury to it would be almost as\r\nserious as its complete loss, for there are no beryls in the\r\nworld to match these, and it would be impossible to replace them.\r\nI leave it with you, however, with every confidence, and I shall\r\ncall for it in person on Monday morning.'\r\n\r\n\"Seeing that my client was anxious to leave, I said no more but,\r\ncalling for my cashier, I ordered him to pay over fifty 1000\r\npound notes. When I was alone once more, however, with the\r\nprecious case lying upon the table in front of me, I could not\r\nbut think with some misgivings of the immense responsibility\r\nwhich it entailed upon me. There could be no doubt that, as it\r\nwas a national possession, a horrible scandal would ensue if any\r\nmisfortune should occur to it. I already regretted having ever\r\nconsented to take charge of it. However, it was too late to alter\r\nthe matter now, so I locked it up in my private safe and turned\r\nonce more to my work.\r\n\r\n\"When evening came I felt that it would be an imprudence to leave\r\nso precious a thing in the office behind me. Bankers' safes had\r\nbeen forced before now, and why should not mine be? If so, how\r\nterrible would be the position in which I should find myself! I\r\ndetermined, therefore, that for the next few days I would always\r\ncarry the case backward and forward with me, so that it might\r\nnever be really out of my reach. With this intention, I called a\r\ncab and drove out to my house at Streatham, carrying the jewel\r\nwith me. I did not breathe freely until I had taken it upstairs\r\nand locked it in the bureau of my dressing-room.\r\n\r\n\"And now a word as to my household, Mr. Holmes, for I wish you to\r\nthoroughly understand the situation. My groom and my page sleep\r\nout of the house, and may be set aside altogether. I have three\r\nmaid-servants who have been with me a number of years and whose\r\nabsolute reliability is quite above suspicion. Another, Lucy\r\nParr, the second waiting-maid, has only been in my service a few\r\nmonths. She came with an excellent character, however, and has\r\nalways given me satisfaction. She is a very pretty girl and has\r\nattracted admirers who have occasionally hung about the place.\r\nThat is the only drawback which we have found to her, but we\r\nbelieve her to be a thoroughly good girl in every way.\r\n\r\n\"So much for the servants. My family itself is so small that it\r\nwill not take me long to describe it. I am a widower and have an\r\nonly son, Arthur. He has been a disappointment to me, Mr.\r\nHolmes--a grievous disappointment. I have no doubt that I am\r\nmyself to blame. People tell me that I have spoiled him. Very\r\nlikely I have. When my dear wife died I felt that he was all I\r\nhad to love. I could not bear to see the smile fade even for a\r\nmoment from his face. I have never denied him a wish. Perhaps it\r\nwould have been better for both of us had I been sterner, but I\r\nmeant it for the best.\r\n\r\n\"It was naturally my intention that he should succeed me in my\r\nbusiness, but he was not of a business turn. He was wild,\r\nwayward, and, to speak the truth, I could not trust him in the\r\nhandling of large sums of money. When he was young he became a\r\nmember of an aristocratic club, and there, having charming\r\nmanners, he was soon the intimate of a number of men with long\r\npurses and expensive habits. He learned to play heavily at cards\r\nand to squander money on the turf, until he had again and again\r\nto come to me and implore me to give him an advance upon his\r\nallowance, that he might settle his debts of honour. He tried\r\nmore than once to break away from the dangerous company which he\r\nwas keeping, but each time the influence of his friend, Sir\r\nGeorge Burnwell, was enough to draw him back again.\r\n\r\n\"And, indeed, I could not wonder that such a man as Sir George\r\nBurnwell should gain an influence over him, for he has frequently\r\nbrought him to my house, and I have found myself that I could\r\nhardly resist the fascination of his manner. He is older than\r\nArthur, a man of the world to his finger-tips, one who had been\r\neverywhere, seen everything, a brilliant talker, and a man of\r\ngreat personal beauty. Yet when I think of him in cold blood, far\r\naway from the glamour of his presence, I am convinced from his\r\ncynical speech and the look which I have caught in his eyes that\r\nhe is one who should be deeply distrusted. So I think, and so,\r\ntoo, thinks my little Mary, who has a woman's quick insight into\r\ncharacter.\r\n\r\n\"And now there is only she to be described. She is my niece; but\r\nwhen my brother died five years ago and left her alone in the\r\nworld I adopted her, and have looked upon her ever since as my\r\ndaughter. She is a sunbeam in my house--sweet, loving, beautiful,\r\na wonderful manager and housekeeper, yet as tender and quiet and\r\ngentle as a woman could be. She is my right hand. I do not know\r\nwhat I could do without her. In only one matter has she ever gone\r\nagainst my wishes. Twice my boy has asked her to marry him, for\r\nhe loves her devotedly, but each time she has refused him. I\r\nthink that if anyone could have drawn him into the right path it\r\nwould have been she, and that his marriage might have changed his\r\nwhole life; but now, alas! it is too late--forever too late!\r\n\r\n\"Now, Mr. Holmes, you know the people who live under my roof, and\r\nI shall continue with my miserable story.\r\n\r\n\"When we were taking coffee in the drawing-room that night after\r\ndinner, I told Arthur and Mary my experience, and of the precious\r\ntreasure which we had under our roof, suppressing only the name\r\nof my client. Lucy Parr, who had brought in the coffee, had, I am\r\nsure, left the room; but I cannot swear that the door was closed.\r\nMary and Arthur were much interested and wished to see the famous\r\ncoronet, but I thought it better not to disturb it.\r\n\r\n\"'Where have you put it?' asked Arthur.\r\n\r\n\"'In my own bureau.'\r\n\r\n\"'Well, I hope to goodness the house won't be burgled during the\r\nnight.' said he.\r\n\r\n\"'It is locked up,' I answered.\r\n\r\n\"'Oh, any old key will fit that bureau. When I was a youngster I\r\nhave opened it myself with the key of the box-room cupboard.'\r\n\r\n\"He often had a wild way of talking, so that I thought little of\r\nwhat he said. He followed me to my room, however, that night with\r\na very grave face.\r\n\r\n\"'Look here, dad,' said he with his eyes cast down, 'can you let\r\nme have 200 pounds?'\r\n\r\n\"'No, I cannot!' I answered sharply. 'I have been far too\r\ngenerous with you in money matters.'\r\n\r\n\"'You have been very kind,' said he, 'but I must have this money,\r\nor else I can never show my face inside the club again.'\r\n\r\n\"'And a very good thing, too!' I cried.\r\n\r\n\"'Yes, but you would not have me leave it a dishonoured man,'\r\nsaid he. 'I could not bear the disgrace. I must raise the money\r\nin some way, and if you will not let me have it, then I must try\r\nother means.'\r\n\r\n\"I was very angry, for this was the third demand during the\r\nmonth. 'You shall not have a farthing from me,' I cried, on which\r\nhe bowed and left the room without another word.\r\n\r\n\"When he was gone I unlocked my bureau, made sure that my\r\ntreasure was safe, and locked it again. Then I started to go\r\nround the house to see that all was secure--a duty which I\r\nusually leave to Mary but which I thought it well to perform\r\nmyself that night. As I came down the stairs I saw Mary herself\r\nat the side window of the hall, which she closed and fastened as\r\nI approached.\r\n\r\n\"'Tell me, dad,' said she, looking, I thought, a little\r\ndisturbed, 'did you give Lucy, the maid, leave to go out\r\nto-night?'\r\n\r\n\"'Certainly not.'\r\n\r\n\"'She came in just now by the back door. I have no doubt that she\r\nhas only been to the side gate to see someone, but I think that\r\nit is hardly safe and should be stopped.'\r\n\r\n\"'You must speak to her in the morning, or I will if you prefer\r\nit. Are you sure that everything is fastened?'\r\n\r\n\"'Quite sure, dad.'\r\n\r\n\"'Then, good-night.' I kissed her and went up to my bedroom\r\nagain, where I was soon asleep.\r\n\r\n\"I am endeavouring to tell you everything, Mr. Holmes, which may\r\nhave any bearing upon the case, but I beg that you will question\r\nme upon any point which I do not make clear.\"\r\n\r\n\"On the contrary, your statement is singularly lucid.\"\r\n\r\n\"I come to a part of my story now in which I should wish to be\r\nparticularly so. I am not a very heavy sleeper, and the anxiety\r\nin my mind tended, no doubt, to make me even less so than usual.\r\nAbout two in the morning, then, I was awakened by some sound in\r\nthe house. It had ceased ere I was wide awake, but it had left an\r\nimpression behind it as though a window had gently closed\r\nsomewhere. I lay listening with all my ears. Suddenly, to my\r\nhorror, there was a distinct sound of footsteps moving softly in\r\nthe next room. I slipped out of bed, all palpitating with fear,\r\nand peeped round the corner of my dressing-room door.\r\n\r\n\"'Arthur!' I screamed, 'you villain! you thief! How dare you\r\ntouch that coronet?'\r\n\r\n\"The gas was half up, as I had left it, and my unhappy boy,\r\ndressed only in his shirt and trousers, was standing beside the\r\nlight, holding the coronet in his hands. He appeared to be\r\nwrenching at it, or bending it with all his strength. At my cry\r\nhe dropped it from his grasp and turned as pale as death. I\r\nsnatched it up and examined it. One of the gold corners, with\r\nthree of the beryls in it, was missing.\r\n\r\n\"'You blackguard!' I shouted, beside myself with rage. 'You have\r\ndestroyed it! You have dishonoured me forever! Where are the\r\njewels which you have stolen?'\r\n\r\n\"'Stolen!' he cried.\r\n\r\n\"'Yes, thief!' I roared, shaking him by the shoulder.\r\n\r\n\"'There are none missing. There cannot be any missing,' said he.\r\n\r\n\"'There are three missing. And you know where they are. Must I\r\ncall you a liar as well as a thief? Did I not see you trying to\r\ntear off another piece?'\r\n\r\n\"'You have called me names enough,' said he, 'I will not stand it\r\nany longer. I shall not say another word about this business,\r\nsince you have chosen to insult me. I will leave your house in\r\nthe morning and make my own way in the world.'\r\n\r\n\"'You shall leave it in the hands of the police!' I cried\r\nhalf-mad with grief and rage. 'I shall have this matter probed to\r\nthe bottom.'\r\n\r\n\"'You shall learn nothing from me,' said he with a passion such\r\nas I should not have thought was in his nature. 'If you choose to\r\ncall the police, let the police find what they can.'\r\n\r\n\"By this time the whole house was astir, for I had raised my\r\nvoice in my anger. Mary was the first to rush into my room, and,\r\nat the sight of the coronet and of Arthur's face, she read the\r\nwhole story and, with a scream, fell down senseless on the\r\nground. I sent the house-maid for the police and put the\r\ninvestigation into their hands at once. When the inspector and a\r\nconstable entered the house, Arthur, who had stood sullenly with\r\nhis arms folded, asked me whether it was my intention to charge\r\nhim with theft. I answered that it had ceased to be a private\r\nmatter, but had become a public one, since the ruined coronet was\r\nnational property. I was determined that the law should have its\r\nway in everything.\r\n\r\n\"'At least,' said he, 'you will not have me arrested at once. It\r\nwould be to your advantage as well as mine if I might leave the\r\nhouse for five minutes.'\r\n\r\n\"'That you may get away, or perhaps that you may conceal what you\r\nhave stolen,' said I. And then, realising the dreadful position\r\nin which I was placed, I implored him to remember that not only\r\nmy honour but that of one who was far greater than I was at\r\nstake; and that he threatened to raise a scandal which would\r\nconvulse the nation. He might avert it all if he would but tell\r\nme what he had done with the three missing stones.\r\n\r\n\"'You may as well face the matter,' said I; 'you have been caught\r\nin the act, and no confession could make your guilt more heinous.\r\nIf you but make such reparation as is in your power, by telling\r\nus where the beryls are, all shall be forgiven and forgotten.'\r\n\r\n\"'Keep your forgiveness for those who ask for it,' he answered,\r\nturning away from me with a sneer. I saw that he was too hardened\r\nfor any words of mine to influence him. There was but one way for\r\nit. I called in the inspector and gave him into custody. A search\r\nwas made at once not only of his person but of his room and of\r\nevery portion of the house where he could possibly have concealed\r\nthe gems; but no trace of them could be found, nor would the\r\nwretched boy open his mouth for all our persuasions and our\r\nthreats. This morning he was removed to a cell, and I, after\r\ngoing through all the police formalities, have hurried round to\r\nyou to implore you to use your skill in unravelling the matter.\r\nThe police have openly confessed that they can at present make\r\nnothing of it. You may go to any expense which you think\r\nnecessary. I have already offered a reward of 1000 pounds. My\r\nGod, what shall I do! I have lost my honour, my gems, and my son\r\nin one night. Oh, what shall I do!\"\r\n\r\nHe put a hand on either side of his head and rocked himself to\r\nand fro, droning to himself like a child whose grief has got\r\nbeyond words.\r\n\r\nSherlock Holmes sat silent for some few minutes, with his brows\r\nknitted and his eyes fixed upon the fire.\r\n\r\n\"Do you receive much company?\" he asked.\r\n\r\n\"None save my partner with his family and an occasional friend of\r\nArthur's. Sir George Burnwell has been several times lately. No\r\none else, I think.\"\r\n\r\n\"Do you go out much in society?\"\r\n\r\n\"Arthur does. Mary and I stay at home. We neither of us care for\r\nit.\"\r\n\r\n\"That is unusual in a young girl.\"\r\n\r\n\"She is of a quiet nature. Besides, she is not so very young. She\r\nis four-and-twenty.\"\r\n\r\n\"This matter, from what you say, seems to have been a shock to\r\nher also.\"\r\n\r\n\"Terrible! She is even more affected than I.\"\r\n\r\n\"You have neither of you any doubt as to your son's guilt?\"\r\n\r\n\"How can we have when I saw him with my own eyes with the coronet\r\nin his hands.\"\r\n\r\n\"I hardly consider that a conclusive proof. Was the remainder of\r\nthe coronet at all injured?\"\r\n\r\n\"Yes, it was twisted.\"\r\n\r\n\"Do you not think, then, that he might have been trying to\r\nstraighten it?\"\r\n\r\n\"God bless you! You are doing what you can for him and for me.\r\nBut it is too heavy a task. What was he doing there at all? If\r\nhis purpose were innocent, why did he not say so?\"\r\n\r\n\"Precisely. And if it were guilty, why did he not invent a lie?\r\nHis silence appears to me to cut both ways. There are several\r\nsingular points about the case. What did the police think of the\r\nnoise which awoke you from your sleep?\"\r\n\r\n\"They considered that it might be caused by Arthur's closing his\r\nbedroom door.\"\r\n\r\n\"A likely story! As if a man bent on felony would slam his door\r\nso as to wake a household. What did they say, then, of the\r\ndisappearance of these gems?\"\r\n\r\n\"They are still sounding the planking and probing the furniture\r\nin the hope of finding them.\"\r\n\r\n\"Have they thought of looking outside the house?\"\r\n\r\n\"Yes, they have shown extraordinary energy. The whole garden has\r\nalready been minutely examined.\"\r\n\r\n\"Now, my dear sir,\" said Holmes, \"is it not obvious to you now\r\nthat this matter really strikes very much deeper than either you\r\nor the police were at first inclined to think? It appeared to you\r\nto be a simple case; to me it seems exceedingly complex. Consider\r\nwhat is involved by your theory. You suppose that your son came\r\ndown from his bed, went, at great risk, to your dressing-room,\r\nopened your bureau, took out your coronet, broke off by main\r\nforce a small portion of it, went off to some other place,\r\nconcealed three gems out of the thirty-nine, with such skill that\r\nnobody can find them, and then returned with the other thirty-six\r\ninto the room in which he exposed himself to the greatest danger\r\nof being discovered. I ask you now, is such a theory tenable?\"\r\n\r\n\"But what other is there?\" cried the banker with a gesture of\r\ndespair. \"If his motives were innocent, why does he not explain\r\nthem?\"\r\n\r\n\"It is our task to find that out,\" replied Holmes; \"so now, if\r\nyou please, Mr. Holder, we will set off for Streatham together,\r\nand devote an hour to glancing a little more closely into\r\ndetails.\"\r\n\r\nMy friend insisted upon my accompanying them in their expedition,\r\nwhich I was eager enough to do, for my curiosity and sympathy\r\nwere deeply stirred by the story to which we had listened. I\r\nconfess that the guilt of the banker's son appeared to me to be\r\nas obvious as it did to his unhappy father, but still I had such\r\nfaith in Holmes' judgment that I felt that there must be some\r\ngrounds for hope as long as he was dissatisfied with the accepted\r\nexplanation. He hardly spoke a word the whole way out to the\r\nsouthern suburb, but sat with his chin upon his breast and his\r\nhat drawn over his eyes, sunk in the deepest thought. Our client\r\nappeared to have taken fresh heart at the little glimpse of hope\r\nwhich had been presented to him, and he even broke into a\r\ndesultory chat with me over his business affairs. A short railway\r\njourney and a shorter walk brought us to Fairbank, the modest\r\nresidence of the great financier.\r\n\r\nFairbank was a good-sized square house of white stone, standing\r\nback a little from the road. A double carriage-sweep, with a\r\nsnow-clad lawn, stretched down in front to two large iron gates\r\nwhich closed the entrance. On the right side was a small wooden\r\nthicket, which led into a narrow path between two neat hedges\r\nstretching from the road to the kitchen door, and forming the\r\ntradesmen's entrance. On the left ran a lane which led to the\r\nstables, and was not itself within the grounds at all, being a\r\npublic, though little used, thoroughfare. Holmes left us standing\r\nat the door and walked slowly all round the house, across the\r\nfront, down the tradesmen's path, and so round by the garden\r\nbehind into the stable lane. So long was he that Mr. Holder and I\r\nwent into the dining-room and waited by the fire until he should\r\nreturn. We were sitting there in silence when the door opened and\r\na young lady came in. She was rather above the middle height,\r\nslim, with dark hair and eyes, which seemed the darker against\r\nthe absolute pallor of her skin. I do not think that I have ever\r\nseen such deadly paleness in a woman's face. Her lips, too, were\r\nbloodless, but her eyes were flushed with crying. As she swept\r\nsilently into the room she impressed me with a greater sense of\r\ngrief than the banker had done in the morning, and it was the\r\nmore striking in her as she was evidently a woman of strong\r\ncharacter, with immense capacity for self-restraint. Disregarding\r\nmy presence, she went straight to her uncle and passed her hand\r\nover his head with a sweet womanly caress.\r\n\r\n\"You have given orders that Arthur should be liberated, have you\r\nnot, dad?\" she asked.\r\n\r\n\"No, no, my girl, the matter must be probed to the bottom.\"\r\n\r\n\"But I am so sure that he is innocent. You know what woman's\r\ninstincts are. I know that he has done no harm and that you will\r\nbe sorry for having acted so harshly.\"\r\n\r\n\"Why is he silent, then, if he is innocent?\"\r\n\r\n\"Who knows? Perhaps because he was so angry that you should\r\nsuspect him.\"\r\n\r\n\"How could I help suspecting him, when I actually saw him with\r\nthe coronet in his hand?\"\r\n\r\n\"Oh, but he had only picked it up to look at it. Oh, do, do take\r\nmy word for it that he is innocent. Let the matter drop and say\r\nno more. It is so dreadful to think of our dear Arthur in\r\nprison!\"\r\n\r\n\"I shall never let it drop until the gems are found--never, Mary!\r\nYour affection for Arthur blinds you as to the awful consequences\r\nto me. Far from hushing the thing up, I have brought a gentleman\r\ndown from London to inquire more deeply into it.\"\r\n\r\n\"This gentleman?\" she asked, facing round to me.\r\n\r\n\"No, his friend. He wished us to leave him alone. He is round in\r\nthe stable lane now.\"\r\n\r\n\"The stable lane?\" She raised her dark eyebrows. \"What can he\r\nhope to find there? Ah! this, I suppose, is he. I trust, sir,\r\nthat you will succeed in proving, what I feel sure is the truth,\r\nthat my cousin Arthur is innocent of this crime.\"\r\n\r\n\"I fully share your opinion, and I trust, with you, that we may\r\nprove it,\" returned Holmes, going back to the mat to knock the\r\nsnow from his shoes. \"I believe I have the honour of addressing\r\nMiss Mary Holder. Might I ask you a question or two?\"\r\n\r\n\"Pray do, sir, if it may help to clear this horrible affair up.\"\r\n\r\n\"You heard nothing yourself last night?\"\r\n\r\n\"Nothing, until my uncle here began to speak loudly. I heard\r\nthat, and I came down.\"\r\n\r\n\"You shut up the windows and doors the night before. Did you\r\nfasten all the windows?\"\r\n\r\n\"Yes.\"\r\n\r\n\"Were they all fastened this morning?\"\r\n\r\n\"Yes.\"\r\n\r\n\"You have a maid who has a sweetheart? I think that you remarked\r\nto your uncle last night that she had been out to see him?\"\r\n\r\n\"Yes, and she was the girl who waited in the drawing-room, and\r\nwho may have heard uncle's remarks about the coronet.\"\r\n\r\n\"I see. You infer that she may have gone out to tell her\r\nsweetheart, and that the two may have planned the robbery.\"\r\n\r\n\"But what is the good of all these vague theories,\" cried the\r\nbanker impatiently, \"when I have told you that I saw Arthur with\r\nthe coronet in his hands?\"\r\n\r\n\"Wait a little, Mr. Holder. We must come back to that. About this\r\ngirl, Miss Holder. You saw her return by the kitchen door, I\r\npresume?\"\r\n\r\n\"Yes; when I went to see if the door was fastened for the night I\r\nmet her slipping in. I saw the man, too, in the gloom.\"\r\n\r\n\"Do you know him?\"\r\n\r\n\"Oh, yes! he is the green-grocer who brings our vegetables round.\r\nHis name is Francis Prosper.\"\r\n\r\n\"He stood,\" said Holmes, \"to the left of the door--that is to\r\nsay, farther up the path than is necessary to reach the door?\"\r\n\r\n\"Yes, he did.\"\r\n\r\n\"And he is a man with a wooden leg?\"\r\n\r\nSomething like fear sprang up in the young lady's expressive\r\nblack eyes. \"Why, you are like a magician,\" said she. \"How do you\r\nknow that?\" She smiled, but there was no answering smile in\r\nHolmes' thin, eager face.\r\n\r\n\"I should be very glad now to go upstairs,\" said he. \"I shall\r\nprobably wish to go over the outside of the house again. Perhaps\r\nI had better take a look at the lower windows before I go up.\"\r\n\r\nHe walked swiftly round from one to the other, pausing only at\r\nthe large one which looked from the hall onto the stable lane.\r\nThis he opened and made a very careful examination of the sill\r\nwith his powerful magnifying lens. \"Now we shall go upstairs,\"\r\nsaid he at last.\r\n\r\nThe banker's dressing-room was a plainly furnished little\r\nchamber, with a grey carpet, a large bureau, and a long mirror.\r\nHolmes went to the bureau first and looked hard at the lock.\r\n\r\n\"Which key was used to open it?\" he asked.\r\n\r\n\"That which my son himself indicated--that of the cupboard of the\r\nlumber-room.\"\r\n\r\n\"Have you it here?\"\r\n\r\n\"That is it on the dressing-table.\"\r\n\r\nSherlock Holmes took it up and opened the bureau.\r\n\r\n\"It is a noiseless lock,\" said he. \"It is no wonder that it did\r\nnot wake you. This case, I presume, contains the coronet. We must\r\nhave a look at it.\" He opened the case, and taking out the diadem\r\nhe laid it upon the table. It was a magnificent specimen of the\r\njeweller's art, and the thirty-six stones were the finest that I\r\nhave ever seen. At one side of the coronet was a cracked edge,\r\nwhere a corner holding three gems had been torn away.\r\n\r\n\"Now, Mr. Holder,\" said Holmes, \"here is the corner which\r\ncorresponds to that which has been so unfortunately lost. Might I\r\nbeg that you will break it off.\"\r\n\r\nThe banker recoiled in horror. \"I should not dream of trying,\"\r\nsaid he.\r\n\r\n\"Then I will.\" Holmes suddenly bent his strength upon it, but\r\nwithout result. \"I feel it give a little,\" said he; \"but, though\r\nI am exceptionally strong in the fingers, it would take me all my\r\ntime to break it. An ordinary man could not do it. Now, what do\r\nyou think would happen if I did break it, Mr. Holder? There would\r\nbe a noise like a pistol shot. Do you tell me that all this\r\nhappened within a few yards of your bed and that you heard\r\nnothing of it?\"\r\n\r\n\"I do not know what to think. It is all dark to me.\"\r\n\r\n\"But perhaps it may grow lighter as we go. What do you think,\r\nMiss Holder?\"\r\n\r\n\"I confess that I still share my uncle's perplexity.\"\r\n\r\n\"Your son had no shoes or slippers on when you saw him?\"\r\n\r\n\"He had nothing on save only his trousers and shirt.\"\r\n\r\n\"Thank you. We have certainly been favoured with extraordinary\r\nluck during this inquiry, and it will be entirely our own fault\r\nif we do not succeed in clearing the matter up. With your\r\npermission, Mr. Holder, I shall now continue my investigations\r\noutside.\"\r\n\r\nHe went alone, at his own request, for he explained that any\r\nunnecessary footmarks might make his task more difficult. For an\r\nhour or more he was at work, returning at last with his feet\r\nheavy with snow and his features as inscrutable as ever.\r\n\r\n\"I think that I have seen now all that there is to see, Mr.\r\nHolder,\" said he; \"I can serve you best by returning to my\r\nrooms.\"\r\n\r\n\"But the gems, Mr. Holmes. Where are they?\"\r\n\r\n\"I cannot tell.\"\r\n\r\nThe banker wrung his hands. \"I shall never see them again!\" he\r\ncried. \"And my son? You give me hopes?\"\r\n\r\n\"My opinion is in no way altered.\"\r\n\r\n\"Then, for God's sake, what was this dark business which was\r\nacted in my house last night?\"\r\n\r\n\"If you can call upon me at my Baker Street rooms to-morrow\r\nmorning between nine and ten I shall be happy to do what I can to\r\nmake it clearer. I understand that you give me carte blanche to\r\nact for you, provided only that I get back the gems, and that you\r\nplace no limit on the sum I may draw.\"\r\n\r\n\"I would give my fortune to have them back.\"\r\n\r\n\"Very good. I shall look into the matter between this and then.\r\nGood-bye; it is just possible that I may have to come over here\r\nagain before evening.\"\r\n\r\nIt was obvious to me that my companion's mind was now made up\r\nabout the case, although what his conclusions were was more than\r\nI could even dimly imagine. Several times during our homeward\r\njourney I endeavoured to sound him upon the point, but he always\r\nglided away to some other topic, until at last I gave it over in\r\ndespair. It was not yet three when we found ourselves in our\r\nrooms once more. He hurried to his chamber and was down again in\r\na few minutes dressed as a common loafer. With his collar turned\r\nup, his shiny, seedy coat, his red cravat, and his worn boots, he\r\nwas a perfect sample of the class.\r\n\r\n\"I think that this should do,\" said he, glancing into the glass\r\nabove the fireplace. \"I only wish that you could come with me,\r\nWatson, but I fear that it won't do. I may be on the trail in\r\nthis matter, or I may be following a will-o'-the-wisp, but I\r\nshall soon know which it is. I hope that I may be back in a few\r\nhours.\" He cut a slice of beef from the joint upon the sideboard,\r\nsandwiched it between two rounds of bread, and thrusting this\r\nrude meal into his pocket he started off upon his expedition.\r\n\r\nI had just finished my tea when he returned, evidently in\r\nexcellent spirits, swinging an old elastic-sided boot in his\r\nhand. He chucked it down into a corner and helped himself to a\r\ncup of tea.\r\n\r\n\"I only looked in as I passed,\" said he. \"I am going right on.\"\r\n\r\n\"Where to?\"\r\n\r\n\"Oh, to the other side of the West End. It may be some time\r\nbefore I get back. Don't wait up for me in case I should be\r\nlate.\"\r\n\r\n\"How are you getting on?\"\r\n\r\n\"Oh, so so. Nothing to complain of. I have been out to Streatham\r\nsince I saw you last, but I did not call at the house. It is a\r\nvery sweet little problem, and I would not have missed it for a\r\ngood deal. However, I must not sit gossiping here, but must get\r\nthese disreputable clothes off and return to my highly\r\nrespectable self.\"\r\n\r\nI could see by his manner that he had stronger reasons for\r\nsatisfaction than his words alone would imply. His eyes twinkled,\r\nand there was even a touch of colour upon his sallow cheeks. He\r\nhastened upstairs, and a few minutes later I heard the slam of\r\nthe hall door, which told me that he was off once more upon his\r\ncongenial hunt.\r\n\r\nI waited until midnight, but there was no sign of his return, so\r\nI retired to my room. It was no uncommon thing for him to be away\r\nfor days and nights on end when he was hot upon a scent, so that\r\nhis lateness caused me no surprise. I do not know at what hour he\r\ncame in, but when I came down to breakfast in the morning there\r\nhe was with a cup of coffee in one hand and the paper in the\r\nother, as fresh and trim as possible.\r\n\r\n\"You will excuse my beginning without you, Watson,\" said he, \"but\r\nyou remember that our client has rather an early appointment this\r\nmorning.\"\r\n\r\n\"Why, it is after nine now,\" I answered. \"I should not be\r\nsurprised if that were he. I thought I heard a ring.\"\r\n\r\nIt was, indeed, our friend the financier. I was shocked by the\r\nchange which had come over him, for his face which was naturally\r\nof a broad and massive mould, was now pinched and fallen in,\r\nwhile his hair seemed to me at least a shade whiter. He entered\r\nwith a weariness and lethargy which was even more painful than\r\nhis violence of the morning before, and he dropped heavily into\r\nthe armchair which I pushed forward for him.\r\n\r\n\"I do not know what I have done to be so severely tried,\" said\r\nhe. \"Only two days ago I was a happy and prosperous man, without\r\na care in the world. Now I am left to a lonely and dishonoured\r\nage. One sorrow comes close upon the heels of another. My niece,\r\nMary, has deserted me.\"\r\n\r\n\"Deserted you?\"\r\n\r\n\"Yes. Her bed this morning had not been slept in, her room was\r\nempty, and a note for me lay upon the hall table. I had said to\r\nher last night, in sorrow and not in anger, that if she had\r\nmarried my boy all might have been well with him. Perhaps it was\r\nthoughtless of me to say so. It is to that remark that she refers\r\nin this note:\r\n\r\n\"'MY DEAREST UNCLE:--I feel that I have brought trouble upon you,\r\nand that if I had acted differently this terrible misfortune\r\nmight never have occurred. I cannot, with this thought in my\r\nmind, ever again be happy under your roof, and I feel that I must\r\nleave you forever. Do not worry about my future, for that is\r\nprovided for; and, above all, do not search for me, for it will\r\nbe fruitless labour and an ill-service to me. In life or in\r\ndeath, I am ever your loving,--MARY.'\r\n\r\n\"What could she mean by that note, Mr. Holmes? Do you think it\r\npoints to suicide?\"\r\n\r\n\"No, no, nothing of the kind. It is perhaps the best possible\r\nsolution. I trust, Mr. Holder, that you are nearing the end of\r\nyour troubles.\"\r\n\r\n\"Ha! You say so! You have heard something, Mr. Holmes; you have\r\nlearned something! Where are the gems?\"\r\n\r\n\"You would not think 1000 pounds apiece an excessive sum for\r\nthem?\"\r\n\r\n\"I would pay ten.\"\r\n\r\n\"That would be unnecessary. Three thousand will cover the matter.\r\nAnd there is a little reward, I fancy. Have you your check-book?\r\nHere is a pen. Better make it out for 4000 pounds.\"\r\n\r\nWith a dazed face the banker made out the required check. Holmes\r\nwalked over to his desk, took out a little triangular piece of\r\ngold with three gems in it, and threw it down upon the table.\r\n\r\nWith a shriek of joy our client clutched it up.\r\n\r\n\"You have it!\" he gasped. \"I am saved! I am saved!\"\r\n\r\nThe reaction of joy was as passionate as his grief had been, and\r\nhe hugged his recovered gems to his bosom.\r\n\r\n\"There is one other thing you owe, Mr. Holder,\" said Sherlock\r\nHolmes rather sternly.\r\n\r\n\"Owe!\" He caught up a pen. \"Name the sum, and I will pay it.\"\r\n\r\n\"No, the debt is not to me. You owe a very humble apology to that\r\nnoble lad, your son, who has carried himself in this matter as I\r\nshould be proud to see my own son do, should I ever chance to\r\nhave one.\"\r\n\r\n\"Then it was not Arthur who took them?\"\r\n\r\n\"I told you yesterday, and I repeat to-day, that it was not.\"\r\n\r\n\"You are sure of it! Then let us hurry to him at once to let him\r\nknow that the truth is known.\"\r\n\r\n\"He knows it already. When I had cleared it all up I had an\r\ninterview with him, and finding that he would not tell me the\r\nstory, I told it to him, on which he had to confess that I was\r\nright and to add the very few details which were not yet quite\r\nclear to me. Your news of this morning, however, may open his\r\nlips.\"\r\n\r\n\"For heaven's sake, tell me, then, what is this extraordinary\r\nmystery!\"\r\n\r\n\"I will do so, and I will show you the steps by which I reached\r\nit. And let me say to you, first, that which it is hardest for me\r\nto say and for you to hear: there has been an understanding\r\nbetween Sir George Burnwell and your niece Mary. They have now\r\nfled together.\"\r\n\r\n\"My Mary? Impossible!\"\r\n\r\n\"It is unfortunately more than possible; it is certain. Neither\r\nyou nor your son knew the true character of this man when you\r\nadmitted him into your family circle. He is one of the most\r\ndangerous men in England--a ruined gambler, an absolutely\r\ndesperate villain, a man without heart or conscience. Your niece\r\nknew nothing of such men. When he breathed his vows to her, as he\r\nhad done to a hundred before her, she flattered herself that she\r\nalone had touched his heart. The devil knows best what he said,\r\nbut at least she became his tool and was in the habit of seeing\r\nhim nearly every evening.\"\r\n\r\n\"I cannot, and I will not, believe it!\" cried the banker with an\r\nashen face.\r\n\r\n\"I will tell you, then, what occurred in your house last night.\r\nYour niece, when you had, as she thought, gone to your room,\r\nslipped down and talked to her lover through the window which\r\nleads into the stable lane. His footmarks had pressed right\r\nthrough the snow, so long had he stood there. She told him of the\r\ncoronet. His wicked lust for gold kindled at the news, and he\r\nbent her to his will. I have no doubt that she loved you, but\r\nthere are women in whom the love of a lover extinguishes all\r\nother loves, and I think that she must have been one. She had\r\nhardly listened to his instructions when she saw you coming\r\ndownstairs, on which she closed the window rapidly and told you\r\nabout one of the servants' escapade with her wooden-legged lover,\r\nwhich was all perfectly true.\r\n\r\n\"Your boy, Arthur, went to bed after his interview with you but\r\nhe slept badly on account of his uneasiness about his club debts.\r\nIn the middle of the night he heard a soft tread pass his door,\r\nso he rose and, looking out, was surprised to see his cousin\r\nwalking very stealthily along the passage until she disappeared\r\ninto your dressing-room. Petrified with astonishment, the lad\r\nslipped on some clothes and waited there in the dark to see what\r\nwould come of this strange affair. Presently she emerged from the\r\nroom again, and in the light of the passage-lamp your son saw\r\nthat she carried the precious coronet in her hands. She passed\r\ndown the stairs, and he, thrilling with horror, ran along and\r\nslipped behind the curtain near your door, whence he could see\r\nwhat passed in the hall beneath. He saw her stealthily open the\r\nwindow, hand out the coronet to someone in the gloom, and then\r\nclosing it once more hurry back to her room, passing quite close\r\nto where he stood hid behind the curtain.\r\n\r\n\"As long as she was on the scene he could not take any action\r\nwithout a horrible exposure of the woman whom he loved. But the\r\ninstant that she was gone he realised how crushing a misfortune\r\nthis would be for you, and how all-important it was to set it\r\nright. He rushed down, just as he was, in his bare feet, opened\r\nthe window, sprang out into the snow, and ran down the lane,\r\nwhere he could see a dark figure in the moonlight. Sir George\r\nBurnwell tried to get away, but Arthur caught him, and there was\r\na struggle between them, your lad tugging at one side of the\r\ncoronet, and his opponent at the other. In the scuffle, your son\r\nstruck Sir George and cut him over the eye. Then something\r\nsuddenly snapped, and your son, finding that he had the coronet\r\nin his hands, rushed back, closed the window, ascended to your\r\nroom, and had just observed that the coronet had been twisted in\r\nthe struggle and was endeavouring to straighten it when you\r\nappeared upon the scene.\"\r\n\r\n\"Is it possible?\" gasped the banker.\r\n\r\n\"You then roused his anger by calling him names at a moment when\r\nhe felt that he had deserved your warmest thanks. He could not\r\nexplain the true state of affairs without betraying one who\r\ncertainly deserved little enough consideration at his hands. He\r\ntook the more chivalrous view, however, and preserved her\r\nsecret.\"\r\n\r\n\"And that was why she shrieked and fainted when she saw the\r\ncoronet,\" cried Mr. Holder. \"Oh, my God! what a blind fool I have\r\nbeen! And his asking to be allowed to go out for five minutes!\r\nThe dear fellow wanted to see if the missing piece were at the\r\nscene of the struggle. How cruelly I have misjudged him!\"\r\n\r\n\"When I arrived at the house,\" continued Holmes, \"I at once went\r\nvery carefully round it to observe if there were any traces in\r\nthe snow which might help me. I knew that none had fallen since\r\nthe evening before, and also that there had been a strong frost\r\nto preserve impressions. I passed along the tradesmen's path, but\r\nfound it all trampled down and indistinguishable. Just beyond it,\r\nhowever, at the far side of the kitchen door, a woman had stood\r\nand talked with a man, whose round impressions on one side showed\r\nthat he had a wooden leg. I could even tell that they had been\r\ndisturbed, for the woman had run back swiftly to the door, as was\r\nshown by the deep toe and light heel marks, while Wooden-leg had\r\nwaited a little, and then had gone away. I thought at the time\r\nthat this might be the maid and her sweetheart, of whom you had\r\nalready spoken to me, and inquiry showed it was so. I passed\r\nround the garden without seeing anything more than random tracks,\r\nwhich I took to be the police; but when I got into the stable\r\nlane a very long and complex story was written in the snow in\r\nfront of me.\r\n\r\n\"There was a double line of tracks of a booted man, and a second\r\ndouble line which I saw with delight belonged to a man with naked\r\nfeet. I was at once convinced from what you had told me that the\r\nlatter was your son. The first had walked both ways, but the\r\nother had run swiftly, and as his tread was marked in places over\r\nthe depression of the boot, it was obvious that he had passed\r\nafter the other. I followed them up and found they led to the\r\nhall window, where Boots had worn all the snow away while\r\nwaiting. Then I walked to the other end, which was a hundred\r\nyards or more down the lane. I saw where Boots had faced round,\r\nwhere the snow was cut up as though there had been a struggle,\r\nand, finally, where a few drops of blood had fallen, to show me\r\nthat I was not mistaken. Boots had then run down the lane, and\r\nanother little smudge of blood showed that it was he who had been\r\nhurt. When he came to the highroad at the other end, I found that\r\nthe pavement had been cleared, so there was an end to that clue.\r\n\r\n\"On entering the house, however, I examined, as you remember, the\r\nsill and framework of the hall window with my lens, and I could\r\nat once see that someone had passed out. I could distinguish the\r\noutline of an instep where the wet foot had been placed in coming\r\nin. I was then beginning to be able to form an opinion as to what\r\nhad occurred. A man had waited outside the window; someone had\r\nbrought the gems; the deed had been overseen by your son; he had\r\npursued the thief; had struggled with him; they had each tugged\r\nat the coronet, their united strength causing injuries which\r\nneither alone could have effected. He had returned with the\r\nprize, but had left a fragment in the grasp of his opponent. So\r\nfar I was clear. The question now was, who was the man and who\r\nwas it brought him the coronet?\r\n\r\n\"It is an old maxim of mine that when you have excluded the\r\nimpossible, whatever remains, however improbable, must be the\r\ntruth. Now, I knew that it was not you who had brought it down,\r\nso there only remained your niece and the maids. But if it were\r\nthe maids, why should your son allow himself to be accused in\r\ntheir place? There could be no possible reason. As he loved his\r\ncousin, however, there was an excellent explanation why he should\r\nretain her secret--the more so as the secret was a disgraceful\r\none. When I remembered that you had seen her at that window, and\r\nhow she had fainted on seeing the coronet again, my conjecture\r\nbecame a certainty.\r\n\r\n\"And who could it be who was her confederate? A lover evidently,\r\nfor who else could outweigh the love and gratitude which she must\r\nfeel to you? I knew that you went out little, and that your\r\ncircle of friends was a very limited one. But among them was Sir\r\nGeorge Burnwell. I had heard of him before as being a man of evil\r\nreputation among women. It must have been he who wore those boots\r\nand retained the missing gems. Even though he knew that Arthur\r\nhad discovered him, he might still flatter himself that he was\r\nsafe, for the lad could not say a word without compromising his\r\nown family.\r\n\r\n\"Well, your own good sense will suggest what measures I took\r\nnext. I went in the shape of a loafer to Sir George's house,\r\nmanaged to pick up an acquaintance with his valet, learned that\r\nhis master had cut his head the night before, and, finally, at\r\nthe expense of six shillings, made all sure by buying a pair of\r\nhis cast-off shoes. With these I journeyed down to Streatham and\r\nsaw that they exactly fitted the tracks.\"\r\n\r\n\"I saw an ill-dressed vagabond in the lane yesterday evening,\"\r\nsaid Mr. Holder.\r\n\r\n\"Precisely. It was I. I found that I had my man, so I came home\r\nand changed my clothes. It was a delicate part which I had to\r\nplay then, for I saw that a prosecution must be avoided to avert\r\nscandal, and I knew that so astute a villain would see that our\r\nhands were tied in the matter. I went and saw him. At first, of\r\ncourse, he denied everything. But when I gave him every\r\nparticular that had occurred, he tried to bluster and took down a\r\nlife-preserver from the wall. I knew my man, however, and I\r\nclapped a pistol to his head before he could strike. Then he\r\nbecame a little more reasonable. I told him that we would give\r\nhim a price for the stones he held--1000 pounds apiece. That\r\nbrought out the first signs of grief that he had shown. 'Why,\r\ndash it all!' said he, 'I've let them go at six hundred for the\r\nthree!' I soon managed to get the address of the receiver who had\r\nthem, on promising him that there would be no prosecution. Off I\r\nset to him, and after much chaffering I got our stones at 1000\r\npounds apiece. Then I looked in upon your son, told him that all\r\nwas right, and eventually got to my bed about two o'clock, after\r\nwhat I may call a really hard day's work.\"\r\n\r\n\"A day which has saved England from a great public scandal,\" said\r\nthe banker, rising. \"Sir, I cannot find words to thank you, but\r\nyou shall not find me ungrateful for what you have done. Your\r\nskill has indeed exceeded all that I have heard of it. And now I\r\nmust fly to my dear boy to apologise to him for the wrong which I\r\nhave done him. As to what you tell me of poor Mary, it goes to my\r\nvery heart. Not even your skill can inform me where she is now.\"\r\n\r\n\"I think that we may safely say,\" returned Holmes, \"that she is\r\nwherever Sir George Burnwell is. It is equally certain, too, that\r\nwhatever her sins are, they will soon receive a more than\r\nsufficient punishment.\"\r\n\r\n\r\n\r\nXII. THE ADVENTURE OF THE COPPER BEECHES\r\n\r\n\"To the man who loves art for its own sake,\" remarked Sherlock\r\nHolmes, tossing aside the advertisement sheet of the Daily\r\nTelegraph, \"it is frequently in its least important and lowliest\r\nmanifestations that the keenest pleasure is to be derived. It is\r\npleasant to me to observe, Watson, that you have so far grasped\r\nthis truth that in these little records of our cases which you\r\nhave been good enough to draw up, and, I am bound to say,\r\noccasionally to embellish, you have given prominence not so much\r\nto the many causes célèbres and sensational trials in which I\r\nhave figured but rather to those incidents which may have been\r\ntrivial in themselves, but which have given room for those\r\nfaculties of deduction and of logical synthesis which I have made\r\nmy special province.\"\r\n\r\n\"And yet,\" said I, smiling, \"I cannot quite hold myself absolved\r\nfrom the charge of sensationalism which has been urged against my\r\nrecords.\"\r\n\r\n\"You have erred, perhaps,\" he observed, taking up a glowing\r\ncinder with the tongs and lighting with it the long cherry-wood\r\npipe which was wont to replace his clay when he was in a\r\ndisputatious rather than a meditative mood--\"you have erred\r\nperhaps in attempting to put colour and life into each of your\r\nstatements instead of confining yourself to the task of placing\r\nupon record that severe reasoning from cause to effect which is\r\nreally the only notable feature about the thing.\"\r\n\r\n\"It seems to me that I have done you full justice in the matter,\"\r\nI remarked with some coldness, for I was repelled by the egotism\r\nwhich I had more than once observed to be a strong factor in my\r\nfriend's singular character.\r\n\r\n\"No, it is not selfishness or conceit,\" said he, answering, as\r\nwas his wont, my thoughts rather than my words. \"If I claim full\r\njustice for my art, it is because it is an impersonal thing--a\r\nthing beyond myself. Crime is common. Logic is rare. Therefore it\r\nis upon the logic rather than upon the crime that you should\r\ndwell. You have degraded what should have been a course of\r\nlectures into a series of tales.\"\r\n\r\nIt was a cold morning of the early spring, and we sat after\r\nbreakfast on either side of a cheery fire in the old room at\r\nBaker Street. A thick fog rolled down between the lines of\r\ndun-coloured houses, and the opposing windows loomed like dark,\r\nshapeless blurs through the heavy yellow wreaths. Our gas was lit\r\nand shone on the white cloth and glimmer of china and metal, for\r\nthe table had not been cleared yet. Sherlock Holmes had been\r\nsilent all the morning, dipping continuously into the\r\nadvertisement columns of a succession of papers until at last,\r\nhaving apparently given up his search, he had emerged in no very\r\nsweet temper to lecture me upon my literary shortcomings.\r\n\r\n\"At the same time,\" he remarked after a pause, during which he\r\nhad sat puffing at his long pipe and gazing down into the fire,\r\n\"you can hardly be open to a charge of sensationalism, for out of\r\nthese cases which you have been so kind as to interest yourself\r\nin, a fair proportion do not treat of crime, in its legal sense,\r\nat all. The small matter in which I endeavoured to help the King\r\nof Bohemia, the singular experience of Miss Mary Sutherland, the\r\nproblem connected with the man with the twisted lip, and the\r\nincident of the noble bachelor, were all matters which are\r\noutside the pale of the law. But in avoiding the sensational, I\r\nfear that you may have bordered on the trivial.\"\r\n\r\n\"The end may have been so,\" I answered, \"but the methods I hold\r\nto have been novel and of interest.\"\r\n\r\n\"Pshaw, my dear fellow, what do the public, the great unobservant\r\npublic, who could hardly tell a weaver by his tooth or a\r\ncompositor by his left thumb, care about the finer shades of\r\nanalysis and deduction! But, indeed, if you are trivial, I cannot\r\nblame you, for the days of the great cases are past. Man, or at\r\nleast criminal man, has lost all enterprise and originality. As\r\nto my own little practice, it seems to be degenerating into an\r\nagency for recovering lost lead pencils and giving advice to\r\nyoung ladies from boarding-schools. I think that I have touched\r\nbottom at last, however. This note I had this morning marks my\r\nzero-point, I fancy. Read it!\" He tossed a crumpled letter across\r\nto me.\r\n\r\nIt was dated from Montague Place upon the preceding evening, and\r\nran thus:\r\n\r\n\"DEAR MR. HOLMES:--I am very anxious to consult you as to whether\r\nI should or should not accept a situation which has been offered\r\nto me as governess. I shall call at half-past ten to-morrow if I\r\ndo not inconvenience you. Yours faithfully,\r\n                                               \"VIOLET HUNTER.\"\r\n\r\n\"Do you know the young lady?\" I asked.\r\n\r\n\"Not I.\"\r\n\r\n\"It is half-past ten now.\"\r\n\r\n\"Yes, and I have no doubt that is her ring.\"\r\n\r\n\"It may turn out to be of more interest than you think. You\r\nremember that the affair of the blue carbuncle, which appeared to\r\nbe a mere whim at first, developed into a serious investigation.\r\nIt may be so in this case, also.\"\r\n\r\n\"Well, let us hope so. But our doubts will very soon be solved,\r\nfor here, unless I am much mistaken, is the person in question.\"\r\n\r\nAs he spoke the door opened and a young lady entered the room.\r\nShe was plainly but neatly dressed, with a bright, quick face,\r\nfreckled like a plover's egg, and with the brisk manner of a\r\nwoman who has had her own way to make in the world.\r\n\r\n\"You will excuse my troubling you, I am sure,\" said she, as my\r\ncompanion rose to greet her, \"but I have had a very strange\r\nexperience, and as I have no parents or relations of any sort\r\nfrom whom I could ask advice, I thought that perhaps you would be\r\nkind enough to tell me what I should do.\"\r\n\r\n\"Pray take a seat, Miss Hunter. I shall be happy to do anything\r\nthat I can to serve you.\"\r\n\r\nI could see that Holmes was favourably impressed by the manner\r\nand speech of his new client. He looked her over in his searching\r\nfashion, and then composed himself, with his lids drooping and\r\nhis finger-tips together, to listen to her story.\r\n\r\n\"I have been a governess for five years,\" said she, \"in the\r\nfamily of Colonel Spence Munro, but two months ago the colonel\r\nreceived an appointment at Halifax, in Nova Scotia, and took his\r\nchildren over to America with him, so that I found myself without\r\na situation. I advertised, and I answered advertisements, but\r\nwithout success. At last the little money which I had saved began\r\nto run short, and I was at my wit's end as to what I should do.\r\n\r\n\"There is a well-known agency for governesses in the West End\r\ncalled Westaway's, and there I used to call about once a week in\r\norder to see whether anything had turned up which might suit me.\r\nWestaway was the name of the founder of the business, but it is\r\nreally managed by Miss Stoper. She sits in her own little office,\r\nand the ladies who are seeking employment wait in an anteroom,\r\nand are then shown in one by one, when she consults her ledgers\r\nand sees whether she has anything which would suit them.\r\n\r\n\"Well, when I called last week I was shown into the little office\r\nas usual, but I found that Miss Stoper was not alone. A\r\nprodigiously stout man with a very smiling face and a great heavy\r\nchin which rolled down in fold upon fold over his throat sat at\r\nher elbow with a pair of glasses on his nose, looking very\r\nearnestly at the ladies who entered. As I came in he gave quite a\r\njump in his chair and turned quickly to Miss Stoper.\r\n\r\n\"'That will do,' said he; 'I could not ask for anything better.\r\nCapital! capital!' He seemed quite enthusiastic and rubbed his\r\nhands together in the most genial fashion. He was such a\r\ncomfortable-looking man that it was quite a pleasure to look at\r\nhim.\r\n\r\n\"'You are looking for a situation, miss?' he asked.\r\n\r\n\"'Yes, sir.'\r\n\r\n\"'As governess?'\r\n\r\n\"'Yes, sir.'\r\n\r\n\"'And what salary do you ask?'\r\n\r\n\"'I had 4 pounds a month in my last place with Colonel Spence\r\nMunro.'\r\n\r\n\"'Oh, tut, tut! sweating--rank sweating!' he cried, throwing his\r\nfat hands out into the air like a man who is in a boiling\r\npassion. 'How could anyone offer so pitiful a sum to a lady with\r\nsuch attractions and accomplishments?'\r\n\r\n\"'My accomplishments, sir, may be less than you imagine,' said I.\r\n'A little French, a little German, music, and drawing--'\r\n\r\n\"'Tut, tut!' he cried. 'This is all quite beside the question.\r\nThe point is, have you or have you not the bearing and deportment\r\nof a lady? There it is in a nutshell. If you have not, you are\r\nnot fitted for the rearing of a child who may some day play a\r\nconsiderable part in the history of the country. But if you have\r\nwhy, then, how could any gentleman ask you to condescend to\r\naccept anything under the three figures? Your salary with me,\r\nmadam, would commence at 100 pounds a year.'\r\n\r\n\"You may imagine, Mr. Holmes, that to me, destitute as I was,\r\nsuch an offer seemed almost too good to be true. The gentleman,\r\nhowever, seeing perhaps the look of incredulity upon my face,\r\nopened a pocket-book and took out a note.\r\n\r\n\"'It is also my custom,' said he, smiling in the most pleasant\r\nfashion until his eyes were just two little shining slits amid\r\nthe white creases of his face, 'to advance to my young ladies\r\nhalf their salary beforehand, so that they may meet any little\r\nexpenses of their journey and their wardrobe.'\r\n\r\n\"It seemed to me that I had never met so fascinating and so\r\nthoughtful a man. As I was already in debt to my tradesmen, the\r\nadvance was a great convenience, and yet there was something\r\nunnatural about the whole transaction which made me wish to know\r\na little more before I quite committed myself.\r\n\r\n\"'May I ask where you live, sir?' said I.\r\n\r\n\"'Hampshire. Charming rural place. The Copper Beeches, five miles\r\non the far side of Winchester. It is the most lovely country, my\r\ndear young lady, and the dearest old country-house.'\r\n\r\n\"'And my duties, sir? I should be glad to know what they would\r\nbe.'\r\n\r\n\"'One child--one dear little romper just six years old. Oh, if\r\nyou could see him killing cockroaches with a slipper! Smack!\r\nsmack! smack! Three gone before you could wink!' He leaned back\r\nin his chair and laughed his eyes into his head again.\r\n\r\n\"I was a little startled at the nature of the child's amusement,\r\nbut the father's laughter made me think that perhaps he was\r\njoking.\r\n\r\n\"'My sole duties, then,' I asked, 'are to take charge of a single\r\nchild?'\r\n\r\n\"'No, no, not the sole, not the sole, my dear young lady,' he\r\ncried. 'Your duty would be, as I am sure your good sense would\r\nsuggest, to obey any little commands my wife might give, provided\r\nalways that they were such commands as a lady might with\r\npropriety obey. You see no difficulty, heh?'\r\n\r\n\"'I should be happy to make myself useful.'\r\n\r\n\"'Quite so. In dress now, for example. We are faddy people, you\r\nknow--faddy but kind-hearted. If you were asked to wear any dress\r\nwhich we might give you, you would not object to our little whim.\r\nHeh?'\r\n\r\n\"'No,' said I, considerably astonished at his words.\r\n\r\n\"'Or to sit here, or sit there, that would not be offensive to\r\nyou?'\r\n\r\n\"'Oh, no.'\r\n\r\n\"'Or to cut your hair quite short before you come to us?'\r\n\r\n\"I could hardly believe my ears. As you may observe, Mr. Holmes,\r\nmy hair is somewhat luxuriant, and of a rather peculiar tint of\r\nchestnut. It has been considered artistic. I could not dream of\r\nsacrificing it in this offhand fashion.\r\n\r\n\"'I am afraid that that is quite impossible,' said I. He had been\r\nwatching me eagerly out of his small eyes, and I could see a\r\nshadow pass over his face as I spoke.\r\n\r\n\"'I am afraid that it is quite essential,' said he. 'It is a\r\nlittle fancy of my wife's, and ladies' fancies, you know, madam,\r\nladies' fancies must be consulted. And so you won't cut your\r\nhair?'\r\n\r\n\"'No, sir, I really could not,' I answered firmly.\r\n\r\n\"'Ah, very well; then that quite settles the matter. It is a\r\npity, because in other respects you would really have done very\r\nnicely. In that case, Miss Stoper, I had best inspect a few more\r\nof your young ladies.'\r\n\r\n\"The manageress had sat all this while busy with her papers\r\nwithout a word to either of us, but she glanced at me now with so\r\nmuch annoyance upon her face that I could not help suspecting\r\nthat she had lost a handsome commission through my refusal.\r\n\r\n\"'Do you desire your name to be kept upon the books?' she asked.\r\n\r\n\"'If you please, Miss Stoper.'\r\n\r\n\"'Well, really, it seems rather useless, since you refuse the\r\nmost excellent offers in this fashion,' said she sharply. 'You\r\ncan hardly expect us to exert ourselves to find another such\r\nopening for you. Good-day to you, Miss Hunter.' She struck a gong\r\nupon the table, and I was shown out by the page.\r\n\r\n\"Well, Mr. Holmes, when I got back to my lodgings and found\r\nlittle enough in the cupboard, and two or three bills upon the\r\ntable, I began to ask myself whether I had not done a very\r\nfoolish thing. After all, if these people had strange fads and\r\nexpected obedience on the most extraordinary matters, they were\r\nat least ready to pay for their eccentricity. Very few\r\ngovernesses in England are getting 100 pounds a year. Besides,\r\nwhat use was my hair to me? Many people are improved by wearing\r\nit short and perhaps I should be among the number. Next day I was\r\ninclined to think that I had made a mistake, and by the day after\r\nI was sure of it. I had almost overcome my pride so far as to go\r\nback to the agency and inquire whether the place was still open\r\nwhen I received this letter from the gentleman himself. I have it\r\nhere and I will read it to you:\r\n\r\n                       \"'The Copper Beeches, near Winchester.\r\n\"'DEAR MISS HUNTER:--Miss Stoper has very kindly given me your\r\naddress, and I write from here to ask you whether you have\r\nreconsidered your decision. My wife is very anxious that you\r\nshould come, for she has been much attracted by my description of\r\nyou. We are willing to give 30 pounds a quarter, or 120 pounds a\r\nyear, so as to recompense you for any little inconvenience which\r\nour fads may cause you. They are not very exacting, after all. My\r\nwife is fond of a particular shade of electric blue and would\r\nlike you to wear such a dress indoors in the morning. You need\r\nnot, however, go to the expense of purchasing one, as we have one\r\nbelonging to my dear daughter Alice (now in Philadelphia), which\r\nwould, I should think, fit you very well. Then, as to sitting\r\nhere or there, or amusing yourself in any manner indicated, that\r\nneed cause you no inconvenience. As regards your hair, it is no\r\ndoubt a pity, especially as I could not help remarking its beauty\r\nduring our short interview, but I am afraid that I must remain\r\nfirm upon this point, and I only hope that the increased salary\r\nmay recompense you for the loss. Your duties, as far as the child\r\nis concerned, are very light. Now do try to come, and I shall\r\nmeet you with the dog-cart at Winchester. Let me know your train.\r\nYours faithfully, JEPHRO RUCASTLE.'\r\n\r\n\"That is the letter which I have just received, Mr. Holmes, and\r\nmy mind is made up that I will accept it. I thought, however,\r\nthat before taking the final step I should like to submit the\r\nwhole matter to your consideration.\"\r\n\r\n\"Well, Miss Hunter, if your mind is made up, that settles the\r\nquestion,\" said Holmes, smiling.\r\n\r\n\"But you would not advise me to refuse?\"\r\n\r\n\"I confess that it is not the situation which I should like to\r\nsee a sister of mine apply for.\"\r\n\r\n\"What is the meaning of it all, Mr. Holmes?\"\r\n\r\n\"Ah, I have no data. I cannot tell. Perhaps you have yourself\r\nformed some opinion?\"\r\n\r\n\"Well, there seems to me to be only one possible solution. Mr.\r\nRucastle seemed to be a very kind, good-natured man. Is it not\r\npossible that his wife is a lunatic, that he desires to keep the\r\nmatter quiet for fear she should be taken to an asylum, and that\r\nhe humours her fancies in every way in order to prevent an\r\noutbreak?\"\r\n\r\n\"That is a possible solution--in fact, as matters stand, it is\r\nthe most probable one. But in any case it does not seem to be a\r\nnice household for a young lady.\"\r\n\r\n\"But the money, Mr. Holmes, the money!\"\r\n\r\n\"Well, yes, of course the pay is good--too good. That is what\r\nmakes me uneasy. Why should they give you 120 pounds a year, when\r\nthey could have their pick for 40 pounds? There must be some\r\nstrong reason behind.\"\r\n\r\n\"I thought that if I told you the circumstances you would\r\nunderstand afterwards if I wanted your help. I should feel so\r\nmuch stronger if I felt that you were at the back of me.\"\r\n\r\n\"Oh, you may carry that feeling away with you. I assure you that\r\nyour little problem promises to be the most interesting which has\r\ncome my way for some months. There is something distinctly novel\r\nabout some of the features. If you should find yourself in doubt\r\nor in danger--\"\r\n\r\n\"Danger! What danger do you foresee?\"\r\n\r\nHolmes shook his head gravely. \"It would cease to be a danger if\r\nwe could define it,\" said he. \"But at any time, day or night, a\r\ntelegram would bring me down to your help.\"\r\n\r\n\"That is enough.\" She rose briskly from her chair with the\r\nanxiety all swept from her face. \"I shall go down to Hampshire\r\nquite easy in my mind now. I shall write to Mr. Rucastle at once,\r\nsacrifice my poor hair to-night, and start for Winchester\r\nto-morrow.\" With a few grateful words to Holmes she bade us both\r\ngood-night and bustled off upon her way.\r\n\r\n\"At least,\" said I as we heard her quick, firm steps descending\r\nthe stairs, \"she seems to be a young lady who is very well able\r\nto take care of herself.\"\r\n\r\n\"And she would need to be,\" said Holmes gravely. \"I am much\r\nmistaken if we do not hear from her before many days are past.\"\r\n\r\nIt was not very long before my friend's prediction was fulfilled.\r\nA fortnight went by, during which I frequently found my thoughts\r\nturning in her direction and wondering what strange side-alley of\r\nhuman experience this lonely woman had strayed into. The unusual\r\nsalary, the curious conditions, the light duties, all pointed to\r\nsomething abnormal, though whether a fad or a plot, or whether\r\nthe man were a philanthropist or a villain, it was quite beyond\r\nmy powers to determine. As to Holmes, I observed that he sat\r\nfrequently for half an hour on end, with knitted brows and an\r\nabstracted air, but he swept the matter away with a wave of his\r\nhand when I mentioned it. \"Data! data! data!\" he cried\r\nimpatiently. \"I can't make bricks without clay.\" And yet he would\r\nalways wind up by muttering that no sister of his should ever\r\nhave accepted such a situation.\r\n\r\nThe telegram which we eventually received came late one night\r\njust as I was thinking of turning in and Holmes was settling down\r\nto one of those all-night chemical researches which he frequently\r\nindulged in, when I would leave him stooping over a retort and a\r\ntest-tube at night and find him in the same position when I came\r\ndown to breakfast in the morning. He opened the yellow envelope,\r\nand then, glancing at the message, threw it across to me.\r\n\r\n\"Just look up the trains in Bradshaw,\" said he, and turned back\r\nto his chemical studies.\r\n\r\nThe summons was a brief and urgent one.\r\n\r\n\"Please be at the Black Swan Hotel at Winchester at midday\r\nto-morrow,\" it said. \"Do come! I am at my wit's end.  HUNTER.\"\r\n\r\n\"Will you come with me?\" asked Holmes, glancing up.\r\n\r\n\"I should wish to.\"\r\n\r\n\"Just look it up, then.\"\r\n\r\n\"There is a train at half-past nine,\" said I, glancing over my\r\nBradshaw. \"It is due at Winchester at 11:30.\"\r\n\r\n\"That will do very nicely. Then perhaps I had better postpone my\r\nanalysis of the acetones, as we may need to be at our best in the\r\nmorning.\"\r\n\r\nBy eleven o'clock the next day we were well upon our way to the\r\nold English capital. Holmes had been buried in the morning papers\r\nall the way down, but after we had passed the Hampshire border he\r\nthrew them down and began to admire the scenery. It was an ideal\r\nspring day, a light blue sky, flecked with little fleecy white\r\nclouds drifting across from west to east. The sun was shining\r\nvery brightly, and yet there was an exhilarating nip in the air,\r\nwhich set an edge to a man's energy. All over the countryside,\r\naway to the rolling hills around Aldershot, the little red and\r\ngrey roofs of the farm-steadings peeped out from amid the light\r\ngreen of the new foliage.\r\n\r\n\"Are they not fresh and beautiful?\" I cried with all the\r\nenthusiasm of a man fresh from the fogs of Baker Street.\r\n\r\nBut Holmes shook his head gravely.\r\n\r\n\"Do you know, Watson,\" said he, \"that it is one of the curses of\r\na mind with a turn like mine that I must look at everything with\r\nreference to my own special subject. You look at these scattered\r\nhouses, and you are impressed by their beauty. I look at them,\r\nand the only thought which comes to me is a feeling of their\r\nisolation and of the impunity with which crime may be committed\r\nthere.\"\r\n\r\n\"Good heavens!\" I cried. \"Who would associate crime with these\r\ndear old homesteads?\"\r\n\r\n\"They always fill me with a certain horror. It is my belief,\r\nWatson, founded upon my experience, that the lowest and vilest\r\nalleys in London do not present a more dreadful record of sin\r\nthan does the smiling and beautiful countryside.\"\r\n\r\n\"You horrify me!\"\r\n\r\n\"But the reason is very obvious. The pressure of public opinion\r\ncan do in the town what the law cannot accomplish. There is no\r\nlane so vile that the scream of a tortured child, or the thud of\r\na drunkard's blow, does not beget sympathy and indignation among\r\nthe neighbours, and then the whole machinery of justice is ever\r\nso close that a word of complaint can set it going, and there is\r\nbut a step between the crime and the dock. But look at these\r\nlonely houses, each in its own fields, filled for the most part\r\nwith poor ignorant folk who know little of the law. Think of the\r\ndeeds of hellish cruelty, the hidden wickedness which may go on,\r\nyear in, year out, in such places, and none the wiser. Had this\r\nlady who appeals to us for help gone to live in Winchester, I\r\nshould never have had a fear for her. It is the five miles of\r\ncountry which makes the danger. Still, it is clear that she is\r\nnot personally threatened.\"\r\n\r\n\"No. If she can come to Winchester to meet us she can get away.\"\r\n\r\n\"Quite so. She has her freedom.\"\r\n\r\n\"What CAN be the matter, then? Can you suggest no explanation?\"\r\n\r\n\"I have devised seven separate explanations, each of which would\r\ncover the facts as far as we know them. But which of these is\r\ncorrect can only be determined by the fresh information which we\r\nshall no doubt find waiting for us. Well, there is the tower of\r\nthe cathedral, and we shall soon learn all that Miss Hunter has\r\nto tell.\"\r\n\r\nThe Black Swan is an inn of repute in the High Street, at no\r\ndistance from the station, and there we found the young lady\r\nwaiting for us. She had engaged a sitting-room, and our lunch\r\nawaited us upon the table.\r\n\r\n\"I am so delighted that you have come,\" she said earnestly. \"It\r\nis so very kind of you both; but indeed I do not know what I\r\nshould do. Your advice will be altogether invaluable to me.\"\r\n\r\n\"Pray tell us what has happened to you.\"\r\n\r\n\"I will do so, and I must be quick, for I have promised Mr.\r\nRucastle to be back before three. I got his leave to come into\r\ntown this morning, though he little knew for what purpose.\"\r\n\r\n\"Let us have everything in its due order.\" Holmes thrust his long\r\nthin legs out towards the fire and composed himself to listen.\r\n\r\n\"In the first place, I may say that I have met, on the whole,\r\nwith no actual ill-treatment from Mr. and Mrs. Rucastle. It is\r\nonly fair to them to say that. But I cannot understand them, and\r\nI am not easy in my mind about them.\"\r\n\r\n\"What can you not understand?\"\r\n\r\n\"Their reasons for their conduct. But you shall have it all just\r\nas it occurred. When I came down, Mr. Rucastle met me here and\r\ndrove me in his dog-cart to the Copper Beeches. It is, as he\r\nsaid, beautifully situated, but it is not beautiful in itself,\r\nfor it is a large square block of a house, whitewashed, but all\r\nstained and streaked with damp and bad weather. There are grounds\r\nround it, woods on three sides, and on the fourth a field which\r\nslopes down to the Southampton highroad, which curves past about\r\na hundred yards from the front door. This ground in front belongs\r\nto the house, but the woods all round are part of Lord\r\nSoutherton's preserves. A clump of copper beeches immediately in\r\nfront of the hall door has given its name to the place.\r\n\r\n\"I was driven over by my employer, who was as amiable as ever,\r\nand was introduced by him that evening to his wife and the child.\r\nThere was no truth, Mr. Holmes, in the conjecture which seemed to\r\nus to be probable in your rooms at Baker Street. Mrs. Rucastle is\r\nnot mad. I found her to be a silent, pale-faced woman, much\r\nyounger than her husband, not more than thirty, I should think,\r\nwhile he can hardly be less than forty-five. From their\r\nconversation I have gathered that they have been married about\r\nseven years, that he was a widower, and that his only child by\r\nthe first wife was the daughter who has gone to Philadelphia. Mr.\r\nRucastle told me in private that the reason why she had left them\r\nwas that she had an unreasoning aversion to her stepmother. As\r\nthe daughter could not have been less than twenty, I can quite\r\nimagine that her position must have been uncomfortable with her\r\nfather's young wife.\r\n\r\n\"Mrs. Rucastle seemed to me to be colourless in mind as well as\r\nin feature. She impressed me neither favourably nor the reverse.\r\nShe was a nonentity. It was easy to see that she was passionately\r\ndevoted both to her husband and to her little son. Her light grey\r\neyes wandered continually from one to the other, noting every\r\nlittle want and forestalling it if possible. He was kind to her\r\nalso in his bluff, boisterous fashion, and on the whole they\r\nseemed to be a happy couple. And yet she had some secret sorrow,\r\nthis woman. She would often be lost in deep thought, with the\r\nsaddest look upon her face. More than once I have surprised her\r\nin tears. I have thought sometimes that it was the disposition of\r\nher child which weighed upon her mind, for I have never met so\r\nutterly spoiled and so ill-natured a little creature. He is small\r\nfor his age, with a head which is quite disproportionately large.\r\nHis whole life appears to be spent in an alternation between\r\nsavage fits of passion and gloomy intervals of sulking. Giving\r\npain to any creature weaker than himself seems to be his one idea\r\nof amusement, and he shows quite remarkable talent in planning\r\nthe capture of mice, little birds, and insects. But I would\r\nrather not talk about the creature, Mr. Holmes, and, indeed, he\r\nhas little to do with my story.\"\r\n\r\n\"I am glad of all details,\" remarked my friend, \"whether they\r\nseem to you to be relevant or not.\"\r\n\r\n\"I shall try not to miss anything of importance. The one\r\nunpleasant thing about the house, which struck me at once, was\r\nthe appearance and conduct of the servants. There are only two, a\r\nman and his wife. Toller, for that is his name, is a rough,\r\nuncouth man, with grizzled hair and whiskers, and a perpetual\r\nsmell of drink. Twice since I have been with them he has been\r\nquite drunk, and yet Mr. Rucastle seemed to take no notice of it.\r\nHis wife is a very tall and strong woman with a sour face, as\r\nsilent as Mrs. Rucastle and much less amiable. They are a most\r\nunpleasant couple, but fortunately I spend most of my time in the\r\nnursery and my own room, which are next to each other in one\r\ncorner of the building.\r\n\r\n\"For two days after my arrival at the Copper Beeches my life was\r\nvery quiet; on the third, Mrs. Rucastle came down just after\r\nbreakfast and whispered something to her husband.\r\n\r\n\"'Oh, yes,' said he, turning to me, 'we are very much obliged to\r\nyou, Miss Hunter, for falling in with our whims so far as to cut\r\nyour hair. I assure you that it has not detracted in the tiniest\r\niota from your appearance. We shall now see how the electric-blue\r\ndress will become you. You will find it laid out upon the bed in\r\nyour room, and if you would be so good as to put it on we should\r\nboth be extremely obliged.'\r\n\r\n\"The dress which I found waiting for me was of a peculiar shade\r\nof blue. It was of excellent material, a sort of beige, but it\r\nbore unmistakable signs of having been worn before. It could not\r\nhave been a better fit if I had been measured for it. Both Mr.\r\nand Mrs. Rucastle expressed a delight at the look of it, which\r\nseemed quite exaggerated in its vehemence. They were waiting for\r\nme in the drawing-room, which is a very large room, stretching\r\nalong the entire front of the house, with three long windows\r\nreaching down to the floor. A chair had been placed close to the\r\ncentral window, with its back turned towards it. In this I was\r\nasked to sit, and then Mr. Rucastle, walking up and down on the\r\nother side of the room, began to tell me a series of the funniest\r\nstories that I have ever listened to. You cannot imagine how\r\ncomical he was, and I laughed until I was quite weary. Mrs.\r\nRucastle, however, who has evidently no sense of humour, never so\r\nmuch as smiled, but sat with her hands in her lap, and a sad,\r\nanxious look upon her face. After an hour or so, Mr. Rucastle\r\nsuddenly remarked that it was time to commence the duties of the\r\nday, and that I might change my dress and go to little Edward in\r\nthe nursery.\r\n\r\n\"Two days later this same performance was gone through under\r\nexactly similar circumstances. Again I changed my dress, again I\r\nsat in the window, and again I laughed very heartily at the funny\r\nstories of which my employer had an immense répertoire, and which\r\nhe told inimitably. Then he handed me a yellow-backed novel, and\r\nmoving my chair a little sideways, that my own shadow might not\r\nfall upon the page, he begged me to read aloud to him. I read for\r\nabout ten minutes, beginning in the heart of a chapter, and then\r\nsuddenly, in the middle of a sentence, he ordered me to cease and\r\nto change my dress.\r\n\r\n\"You can easily imagine, Mr. Holmes, how curious I became as to\r\nwhat the meaning of this extraordinary performance could possibly\r\nbe. They were always very careful, I observed, to turn my face\r\naway from the window, so that I became consumed with the desire\r\nto see what was going on behind my back. At first it seemed to be\r\nimpossible, but I soon devised a means. My hand-mirror had been\r\nbroken, so a happy thought seized me, and I concealed a piece of\r\nthe glass in my handkerchief. On the next occasion, in the midst\r\nof my laughter, I put my handkerchief up to my eyes, and was able\r\nwith a little management to see all that there was behind me. I\r\nconfess that I was disappointed. There was nothing. At least that\r\nwas my first impression. At the second glance, however, I\r\nperceived that there was a man standing in the Southampton Road,\r\na small bearded man in a grey suit, who seemed to be looking in\r\nmy direction. The road is an important highway, and there are\r\nusually people there. This man, however, was leaning against the\r\nrailings which bordered our field and was looking earnestly up. I\r\nlowered my handkerchief and glanced at Mrs. Rucastle to find her\r\neyes fixed upon me with a most searching gaze. She said nothing,\r\nbut I am convinced that she had divined that I had a mirror in my\r\nhand and had seen what was behind me. She rose at once.\r\n\r\n\"'Jephro,' said she, 'there is an impertinent fellow upon the\r\nroad there who stares up at Miss Hunter.'\r\n\r\n\"'No friend of yours, Miss Hunter?' he asked.\r\n\r\n\"'No, I know no one in these parts.'\r\n\r\n\"'Dear me! How very impertinent! Kindly turn round and motion to\r\nhim to go away.'\r\n\r\n\"'Surely it would be better to take no notice.'\r\n\r\n\"'No, no, we should have him loitering here always. Kindly turn\r\nround and wave him away like that.'\r\n\r\n\"I did as I was told, and at the same instant Mrs. Rucastle drew\r\ndown the blind. That was a week ago, and from that time I have\r\nnot sat again in the window, nor have I worn the blue dress, nor\r\nseen the man in the road.\"\r\n\r\n\"Pray continue,\" said Holmes. \"Your narrative promises to be a\r\nmost interesting one.\"\r\n\r\n\"You will find it rather disconnected, I fear, and there may\r\nprove to be little relation between the different incidents of\r\nwhich I speak. On the very first day that I was at the Copper\r\nBeeches, Mr. Rucastle took me to a small outhouse which stands\r\nnear the kitchen door. As we approached it I heard the sharp\r\nrattling of a chain, and the sound as of a large animal moving\r\nabout.\r\n\r\n\"'Look in here!' said Mr. Rucastle, showing me a slit between two\r\nplanks. 'Is he not a beauty?'\r\n\r\n\"I looked through and was conscious of two glowing eyes, and of a\r\nvague figure huddled up in the darkness.\r\n\r\n\"'Don't be frightened,' said my employer, laughing at the start\r\nwhich I had given. 'It's only Carlo, my mastiff. I call him mine,\r\nbut really old Toller, my groom, is the only man who can do\r\nanything with him. We feed him once a day, and not too much then,\r\nso that he is always as keen as mustard. Toller lets him loose\r\nevery night, and God help the trespasser whom he lays his fangs\r\nupon. For goodness' sake don't you ever on any pretext set your\r\nfoot over the threshold at night, for it's as much as your life\r\nis worth.'\r\n\r\n\"The warning was no idle one, for two nights later I happened to\r\nlook out of my bedroom window about two o'clock in the morning.\r\nIt was a beautiful moonlight night, and the lawn in front of the\r\nhouse was silvered over and almost as bright as day. I was\r\nstanding, rapt in the peaceful beauty of the scene, when I was\r\naware that something was moving under the shadow of the copper\r\nbeeches. As it emerged into the moonshine I saw what it was. It\r\nwas a giant dog, as large as a calf, tawny tinted, with hanging\r\njowl, black muzzle, and huge projecting bones. It walked slowly\r\nacross the lawn and vanished into the shadow upon the other side.\r\nThat dreadful sentinel sent a chill to my heart which I do not\r\nthink that any burglar could have done.\r\n\r\n\"And now I have a very strange experience to tell you. I had, as\r\nyou know, cut off my hair in London, and I had placed it in a\r\ngreat coil at the bottom of my trunk. One evening, after the\r\nchild was in bed, I began to amuse myself by examining the\r\nfurniture of my room and by rearranging my own little things.\r\nThere was an old chest of drawers in the room, the two upper ones\r\nempty and open, the lower one locked. I had filled the first two\r\nwith my linen, and as I had still much to pack away I was\r\nnaturally annoyed at not having the use of the third drawer. It\r\nstruck me that it might have been fastened by a mere oversight,\r\nso I took out my bunch of keys and tried to open it. The very\r\nfirst key fitted to perfection, and I drew the drawer open. There\r\nwas only one thing in it, but I am sure that you would never\r\nguess what it was. It was my coil of hair.\r\n\r\n\"I took it up and examined it. It was of the same peculiar tint,\r\nand the same thickness. But then the impossibility of the thing\r\nobtruded itself upon me. How could my hair have been locked in\r\nthe drawer? With trembling hands I undid my trunk, turned out the\r\ncontents, and drew from the bottom my own hair. I laid the two\r\ntresses together, and I assure you that they were identical. Was\r\nit not extraordinary? Puzzle as I would, I could make nothing at\r\nall of what it meant. I returned the strange hair to the drawer,\r\nand I said nothing of the matter to the Rucastles as I felt that\r\nI had put myself in the wrong by opening a drawer which they had\r\nlocked.\r\n\r\n\"I am naturally observant, as you may have remarked, Mr. Holmes,\r\nand I soon had a pretty good plan of the whole house in my head.\r\nThere was one wing, however, which appeared not to be inhabited\r\nat all. A door which faced that which led into the quarters of\r\nthe Tollers opened into this suite, but it was invariably locked.\r\nOne day, however, as I ascended the stair, I met Mr. Rucastle\r\ncoming out through this door, his keys in his hand, and a look on\r\nhis face which made him a very different person to the round,\r\njovial man to whom I was accustomed. His cheeks were red, his\r\nbrow was all crinkled with anger, and the veins stood out at his\r\ntemples with passion. He locked the door and hurried past me\r\nwithout a word or a look.\r\n\r\n\"This aroused my curiosity, so when I went out for a walk in the\r\ngrounds with my charge, I strolled round to the side from which I\r\ncould see the windows of this part of the house. There were four\r\nof them in a row, three of which were simply dirty, while the\r\nfourth was shuttered up. They were evidently all deserted. As I\r\nstrolled up and down, glancing at them occasionally, Mr. Rucastle\r\ncame out to me, looking as merry and jovial as ever.\r\n\r\n\"'Ah!' said he, 'you must not think me rude if I passed you\r\nwithout a word, my dear young lady. I was preoccupied with\r\nbusiness matters.'\r\n\r\n\"I assured him that I was not offended. 'By the way,' said I,\r\n'you seem to have quite a suite of spare rooms up there, and one\r\nof them has the shutters up.'\r\n\r\n\"He looked surprised and, as it seemed to me, a little startled\r\nat my remark.\r\n\r\n\"'Photography is one of my hobbies,' said he. 'I have made my\r\ndark room up there. But, dear me! what an observant young lady we\r\nhave come upon. Who would have believed it? Who would have ever\r\nbelieved it?' He spoke in a jesting tone, but there was no jest\r\nin his eyes as he looked at me. I read suspicion there and\r\nannoyance, but no jest.\r\n\r\n\"Well, Mr. Holmes, from the moment that I understood that there\r\nwas something about that suite of rooms which I was not to know,\r\nI was all on fire to go over them. It was not mere curiosity,\r\nthough I have my share of that. It was more a feeling of duty--a\r\nfeeling that some good might come from my penetrating to this\r\nplace. They talk of woman's instinct; perhaps it was woman's\r\ninstinct which gave me that feeling. At any rate, it was there,\r\nand I was keenly on the lookout for any chance to pass the\r\nforbidden door.\r\n\r\n\"It was only yesterday that the chance came. I may tell you that,\r\nbesides Mr. Rucastle, both Toller and his wife find something to\r\ndo in these deserted rooms, and I once saw him carrying a large\r\nblack linen bag with him through the door. Recently he has been\r\ndrinking hard, and yesterday evening he was very drunk; and when\r\nI came upstairs there was the key in the door. I have no doubt at\r\nall that he had left it there. Mr. and Mrs. Rucastle were both\r\ndownstairs, and the child was with them, so that I had an\r\nadmirable opportunity. I turned the key gently in the lock,\r\nopened the door, and slipped through.\r\n\r\n\"There was a little passage in front of me, unpapered and\r\nuncarpeted, which turned at a right angle at the farther end.\r\nRound this corner were three doors in a line, the first and third\r\nof which were open. They each led into an empty room, dusty and\r\ncheerless, with two windows in the one and one in the other, so\r\nthick with dirt that the evening light glimmered dimly through\r\nthem. The centre door was closed, and across the outside of it\r\nhad been fastened one of the broad bars of an iron bed, padlocked\r\nat one end to a ring in the wall, and fastened at the other with\r\nstout cord. The door itself was locked as well, and the key was\r\nnot there. This barricaded door corresponded clearly with the\r\nshuttered window outside, and yet I could see by the glimmer from\r\nbeneath it that the room was not in darkness. Evidently there was\r\na skylight which let in light from above. As I stood in the\r\npassage gazing at the sinister door and wondering what secret it\r\nmight veil, I suddenly heard the sound of steps within the room\r\nand saw a shadow pass backward and forward against the little\r\nslit of dim light which shone out from under the door. A mad,\r\nunreasoning terror rose up in me at the sight, Mr. Holmes. My\r\noverstrung nerves failed me suddenly, and I turned and ran--ran\r\nas though some dreadful hand were behind me clutching at the\r\nskirt of my dress. I rushed down the passage, through the door,\r\nand straight into the arms of Mr. Rucastle, who was waiting\r\noutside.\r\n\r\n\"'So,' said he, smiling, 'it was you, then. I thought that it\r\nmust be when I saw the door open.'\r\n\r\n\"'Oh, I am so frightened!' I panted.\r\n\r\n\"'My dear young lady! my dear young lady!'--you cannot think how\r\ncaressing and soothing his manner was--'and what has frightened\r\nyou, my dear young lady?'\r\n\r\n\"But his voice was just a little too coaxing. He overdid it. I\r\nwas keenly on my guard against him.\r\n\r\n\"'I was foolish enough to go into the empty wing,' I answered.\r\n'But it is so lonely and eerie in this dim light that I was\r\nfrightened and ran out again. Oh, it is so dreadfully still in\r\nthere!'\r\n\r\n\"'Only that?' said he, looking at me keenly.\r\n\r\n\"'Why, what did you think?' I asked.\r\n\r\n\"'Why do you think that I lock this door?'\r\n\r\n\"'I am sure that I do not know.'\r\n\r\n\"'It is to keep people out who have no business there. Do you\r\nsee?' He was still smiling in the most amiable manner.\r\n\r\n\"'I am sure if I had known--'\r\n\r\n\"'Well, then, you know now. And if you ever put your foot over\r\nthat threshold again'--here in an instant the smile hardened into\r\na grin of rage, and he glared down at me with the face of a\r\ndemon--'I'll throw you to the mastiff.'\r\n\r\n\"I was so terrified that I do not know what I did. I suppose that\r\nI must have rushed past him into my room. I remember nothing\r\nuntil I found myself lying on my bed trembling all over. Then I\r\nthought of you, Mr. Holmes. I could not live there longer without\r\nsome advice. I was frightened of the house, of the man, of the\r\nwoman, of the servants, even of the child. They were all horrible\r\nto me. If I could only bring you down all would be well. Of\r\ncourse I might have fled from the house, but my curiosity was\r\nalmost as strong as my fears. My mind was soon made up. I would\r\nsend you a wire. I put on my hat and cloak, went down to the\r\noffice, which is about half a mile from the house, and then\r\nreturned, feeling very much easier. A horrible doubt came into my\r\nmind as I approached the door lest the dog might be loose, but I\r\nremembered that Toller had drunk himself into a state of\r\ninsensibility that evening, and I knew that he was the only one\r\nin the household who had any influence with the savage creature,\r\nor who would venture to set him free. I slipped in in safety and\r\nlay awake half the night in my joy at the thought of seeing you.\r\nI had no difficulty in getting leave to come into Winchester this\r\nmorning, but I must be back before three o'clock, for Mr. and\r\nMrs. Rucastle are going on a visit, and will be away all the\r\nevening, so that I must look after the child. Now I have told you\r\nall my adventures, Mr. Holmes, and I should be very glad if you\r\ncould tell me what it all means, and, above all, what I should\r\ndo.\"\r\n\r\nHolmes and I had listened spellbound to this extraordinary story.\r\nMy friend rose now and paced up and down the room, his hands in\r\nhis pockets, and an expression of the most profound gravity upon\r\nhis face.\r\n\r\n\"Is Toller still drunk?\" he asked.\r\n\r\n\"Yes. I heard his wife tell Mrs. Rucastle that she could do\r\nnothing with him.\"\r\n\r\n\"That is well. And the Rucastles go out to-night?\"\r\n\r\n\"Yes.\"\r\n\r\n\"Is there a cellar with a good strong lock?\"\r\n\r\n\"Yes, the wine-cellar.\"\r\n\r\n\"You seem to me to have acted all through this matter like a very\r\nbrave and sensible girl, Miss Hunter. Do you think that you could\r\nperform one more feat? I should not ask it of you if I did not\r\nthink you a quite exceptional woman.\"\r\n\r\n\"I will try. What is it?\"\r\n\r\n\"We shall be at the Copper Beeches by seven o'clock, my friend\r\nand I. The Rucastles will be gone by that time, and Toller will,\r\nwe hope, be incapable. There only remains Mrs. Toller, who might\r\ngive the alarm. If you could send her into the cellar on some\r\nerrand, and then turn the key upon her, you would facilitate\r\nmatters immensely.\"\r\n\r\n\"I will do it.\"\r\n\r\n\"Excellent! We shall then look thoroughly into the affair. Of\r\ncourse there is only one feasible explanation. You have been\r\nbrought there to personate someone, and the real person is\r\nimprisoned in this chamber. That is obvious. As to who this\r\nprisoner is, I have no doubt that it is the daughter, Miss Alice\r\nRucastle, if I remember right, who was said to have gone to\r\nAmerica. You were chosen, doubtless, as resembling her in height,\r\nfigure, and the colour of your hair. Hers had been cut off, very\r\npossibly in some illness through which she has passed, and so, of\r\ncourse, yours had to be sacrificed also. By a curious chance you\r\ncame upon her tresses. The man in the road was undoubtedly some\r\nfriend of hers--possibly her fiancé--and no doubt, as you wore\r\nthe girl's dress and were so like her, he was convinced from your\r\nlaughter, whenever he saw you, and afterwards from your gesture,\r\nthat Miss Rucastle was perfectly happy, and that she no longer\r\ndesired his attentions. The dog is let loose at night to prevent\r\nhim from endeavouring to communicate with her. So much is fairly\r\nclear. The most serious point in the case is the disposition of\r\nthe child.\"\r\n\r\n\"What on earth has that to do with it?\" I ejaculated.\r\n\r\n\"My dear Watson, you as a medical man are continually gaining\r\nlight as to the tendencies of a child by the study of the\r\nparents. Don't you see that the converse is equally valid. I have\r\nfrequently gained my first real insight into the character of\r\nparents by studying their children. This child's disposition is\r\nabnormally cruel, merely for cruelty's sake, and whether he\r\nderives this from his smiling father, as I should suspect, or\r\nfrom his mother, it bodes evil for the poor girl who is in their\r\npower.\"\r\n\r\n\"I am sure that you are right, Mr. Holmes,\" cried our client. \"A\r\nthousand things come back to me which make me certain that you\r\nhave hit it. Oh, let us lose not an instant in bringing help to\r\nthis poor creature.\"\r\n\r\n\"We must be circumspect, for we are dealing with a very cunning\r\nman. We can do nothing until seven o'clock. At that hour we shall\r\nbe with you, and it will not be long before we solve the\r\nmystery.\"\r\n\r\nWe were as good as our word, for it was just seven when we\r\nreached the Copper Beeches, having put up our trap at a wayside\r\npublic-house. The group of trees, with their dark leaves shining\r\nlike burnished metal in the light of the setting sun, were\r\nsufficient to mark the house even had Miss Hunter not been\r\nstanding smiling on the door-step.\r\n\r\n\"Have you managed it?\" asked Holmes.\r\n\r\nA loud thudding noise came from somewhere downstairs. \"That is\r\nMrs. Toller in the cellar,\" said she. \"Her husband lies snoring\r\non the kitchen rug. Here are his keys, which are the duplicates\r\nof Mr. Rucastle's.\"\r\n\r\n\"You have done well indeed!\" cried Holmes with enthusiasm. \"Now\r\nlead the way, and we shall soon see the end of this black\r\nbusiness.\"\r\n\r\nWe passed up the stair, unlocked the door, followed on down a\r\npassage, and found ourselves in front of the barricade which Miss\r\nHunter had described. Holmes cut the cord and removed the\r\ntransverse bar. Then he tried the various keys in the lock, but\r\nwithout success. No sound came from within, and at the silence\r\nHolmes' face clouded over.\r\n\r\n\"I trust that we are not too late,\" said he. \"I think, Miss\r\nHunter, that we had better go in without you. Now, Watson, put\r\nyour shoulder to it, and we shall see whether we cannot make our\r\nway in.\"\r\n\r\nIt was an old rickety door and gave at once before our united\r\nstrength. Together we rushed into the room. It was empty. There\r\nwas no furniture save a little pallet bed, a small table, and a\r\nbasketful of linen. The skylight above was open, and the prisoner\r\ngone.\r\n\r\n\"There has been some villainy here,\" said Holmes; \"this beauty\r\nhas guessed Miss Hunter's intentions and has carried his victim\r\noff.\"\r\n\r\n\"But how?\"\r\n\r\n\"Through the skylight. We shall soon see how he managed it.\" He\r\nswung himself up onto the roof. \"Ah, yes,\" he cried, \"here's the\r\nend of a long light ladder against the eaves. That is how he did\r\nit.\"\r\n\r\n\"But it is impossible,\" said Miss Hunter; \"the ladder was not\r\nthere when the Rucastles went away.\"\r\n\r\n\"He has come back and done it. I tell you that he is a clever and\r\ndangerous man. I should not be very much surprised if this were\r\nhe whose step I hear now upon the stair. I think, Watson, that it\r\nwould be as well for you to have your pistol ready.\"\r\n\r\nThe words were hardly out of his mouth before a man appeared at\r\nthe door of the room, a very fat and burly man, with a heavy\r\nstick in his hand. Miss Hunter screamed and shrunk against the\r\nwall at the sight of him, but Sherlock Holmes sprang forward and\r\nconfronted him.\r\n\r\n\"You villain!\" said he, \"where's your daughter?\"\r\n\r\nThe fat man cast his eyes round, and then up at the open\r\nskylight.\r\n\r\n\"It is for me to ask you that,\" he shrieked, \"you thieves! Spies\r\nand thieves! I have caught you, have I? You are in my power. I'll\r\nserve you!\" He turned and clattered down the stairs as hard as he\r\ncould go.\r\n\r\n\"He's gone for the dog!\" cried Miss Hunter.\r\n\r\n\"I have my revolver,\" said I.\r\n\r\n\"Better close the front door,\" cried Holmes, and we all rushed\r\ndown the stairs together. We had hardly reached the hall when we\r\nheard the baying of a hound, and then a scream of agony, with a\r\nhorrible worrying sound which it was dreadful to listen to. An\r\nelderly man with a red face and shaking limbs came staggering out\r\nat a side door.\r\n\r\n\"My God!\" he cried. \"Someone has loosed the dog. It's not been\r\nfed for two days. Quick, quick, or it'll be too late!\"\r\n\r\nHolmes and I rushed out and round the angle of the house, with\r\nToller hurrying behind us. There was the huge famished brute, its\r\nblack muzzle buried in Rucastle's throat, while he writhed and\r\nscreamed upon the ground. Running up, I blew its brains out, and\r\nit fell over with its keen white teeth still meeting in the great\r\ncreases of his neck. With much labour we separated them and\r\ncarried him, living but horribly mangled, into the house. We laid\r\nhim upon the drawing-room sofa, and having dispatched the sobered\r\nToller to bear the news to his wife, I did what I could to\r\nrelieve his pain. We were all assembled round him when the door\r\nopened, and a tall, gaunt woman entered the room.\r\n\r\n\"Mrs. Toller!\" cried Miss Hunter.\r\n\r\n\"Yes, miss. Mr. Rucastle let me out when he came back before he\r\nwent up to you. Ah, miss, it is a pity you didn't let me know\r\nwhat you were planning, for I would have told you that your pains\r\nwere wasted.\"\r\n\r\n\"Ha!\" said Holmes, looking keenly at her. \"It is clear that Mrs.\r\nToller knows more about this matter than anyone else.\"\r\n\r\n\"Yes, sir, I do, and I am ready enough to tell what I know.\"\r\n\r\n\"Then, pray, sit down, and let us hear it for there are several\r\npoints on which I must confess that I am still in the dark.\"\r\n\r\n\"I will soon make it clear to you,\" said she; \"and I'd have done\r\nso before now if I could ha' got out from the cellar. If there's\r\npolice-court business over this, you'll remember that I was the\r\none that stood your friend, and that I was Miss Alice's friend\r\ntoo.\r\n\r\n\"She was never happy at home, Miss Alice wasn't, from the time\r\nthat her father married again. She was slighted like and had no\r\nsay in anything, but it never really became bad for her until\r\nafter she met Mr. Fowler at a friend's house. As well as I could\r\nlearn, Miss Alice had rights of her own by will, but she was so\r\nquiet and patient, she was, that she never said a word about them\r\nbut just left everything in Mr. Rucastle's hands. He knew he was\r\nsafe with her; but when there was a chance of a husband coming\r\nforward, who would ask for all that the law would give him, then\r\nher father thought it time to put a stop on it. He wanted her to\r\nsign a paper, so that whether she married or not, he could use\r\nher money. When she wouldn't do it, he kept on worrying her until\r\nshe got brain-fever, and for six weeks was at death's door. Then\r\nshe got better at last, all worn to a shadow, and with her\r\nbeautiful hair cut off; but that didn't make no change in her\r\nyoung man, and he stuck to her as true as man could be.\"\r\n\r\n\"Ah,\" said Holmes, \"I think that what you have been good enough\r\nto tell us makes the matter fairly clear, and that I can deduce\r\nall that remains. Mr. Rucastle then, I presume, took to this\r\nsystem of imprisonment?\"\r\n\r\n\"Yes, sir.\"\r\n\r\n\"And brought Miss Hunter down from London in order to get rid of\r\nthe disagreeable persistence of Mr. Fowler.\"\r\n\r\n\"That was it, sir.\"\r\n\r\n\"But Mr. Fowler being a persevering man, as a good seaman should\r\nbe, blockaded the house, and having met you succeeded by certain\r\narguments, metallic or otherwise, in convincing you that your\r\ninterests were the same as his.\"\r\n\r\n\"Mr. Fowler was a very kind-spoken, free-handed gentleman,\" said\r\nMrs. Toller serenely.\r\n\r\n\"And in this way he managed that your good man should have no\r\nwant of drink, and that a ladder should be ready at the moment\r\nwhen your master had gone out.\"\r\n\r\n\"You have it, sir, just as it happened.\"\r\n\r\n\"I am sure we owe you an apology, Mrs. Toller,\" said Holmes, \"for\r\nyou have certainly cleared up everything which puzzled us. And\r\nhere comes the country surgeon and Mrs. Rucastle, so I think,\r\nWatson, that we had best escort Miss Hunter back to Winchester,\r\nas it seems to me that our locus standi now is rather a\r\nquestionable one.\"\r\n\r\nAnd thus was solved the mystery of the sinister house with the\r\ncopper beeches in front of the door. Mr. Rucastle survived, but\r\nwas always a broken man, kept alive solely through the care of\r\nhis devoted wife. They still live with their old servants, who\r\nprobably know so much of Rucastle's past life that he finds it\r\ndifficult to part from them. Mr. Fowler and Miss Rucastle were\r\nmarried, by special license, in Southampton the day after their\r\nflight, and he is now the holder of a government appointment in\r\nthe island of Mauritius. As to Miss Violet Hunter, my friend\r\nHolmes, rather to my disappointment, manifested no further\r\ninterest in her when once she had ceased to be the centre of one\r\nof his problems, and she is now the head of a private school at\r\nWalsall, where I believe that she has met with considerable success.\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nEnd of the Project Gutenberg EBook of The Adventures of Sherlock Holmes, by \r\nArthur Conan Doyle\r\n\r\n*** END OF THIS PROJECT GUTENBERG EBOOK THE ADVENTURES OF SHERLOCK HOLMES ***\r\n\r\n***** This file should be named 1661-8.txt or 1661-8.zip *****\r\nThis and all associated files of various formats will be found in:\r\n        http://www.gutenberg.org/1/6/6/1661/\r\n\r\nProduced by an anonymous Project Gutenberg volunteer and Jose Menendez\r\n\r\nUpdated editions will replace the previous one--the old editions\r\nwill be renamed.\r\n\r\nCreating the works from public domain print editions means that no\r\none owns a United States copyright in these works, so the Foundation\r\n(and you!) can copy and distribute it in the United States without\r\npermission and without paying copyright royalties.  Special rules,\r\nset forth in the General Terms of Use part of this license, apply to\r\ncopying and distributing Project Gutenberg-tm electronic works to\r\nprotect the PROJECT GUTENBERG-tm concept and trademark.  Project\r\nGutenberg is a registered trademark, and may not be used if you\r\ncharge for the eBooks, unless you receive specific permission.  If you\r\ndo not charge anything for copies of this eBook, complying with the\r\nrules is very easy.  You may use this eBook for nearly any purpose\r\nsuch as creation of derivative works, reports, performances and\r\nresearch.  They may be modified and printed and given away--you may do\r\npractically ANYTHING with public domain eBooks.  Redistribution is\r\nsubject to the trademark license, especially commercial\r\nredistribution.\r\n\r\n\r\n\r\n*** START: FULL LICENSE ***\r\n\r\nTHE FULL PROJECT GUTENBERG LICENSE\r\nPLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK\r\n\r\nTo protect the Project Gutenberg-tm mission of promoting the free\r\ndistribution of electronic works, by using or distributing this work\r\n(or any other work associated in any way with the phrase \"Project\r\nGutenberg\"), you agree to comply with all the terms of the Full Project\r\nGutenberg-tm License (available with this file or online at\r\nhttp://gutenberg.net/license).\r\n\r\n\r\nSection 1.  General Terms of Use and Redistributing Project Gutenberg-tm\r\nelectronic works\r\n\r\n1.A.  By reading or using any part of this Project Gutenberg-tm\r\nelectronic work, you indicate that you have read, understand, agree to\r\nand accept all the terms of this license and intellectual property\r\n(trademark/copyright) agreement.  If you do not agree to abide by all\r\nthe terms of this agreement, you must cease using and return or destroy\r\nall copies of Project Gutenberg-tm electronic works in your possession.\r\nIf you paid a fee for obtaining a copy of or access to a Project\r\nGutenberg-tm electronic work and you do not agree to be bound by the\r\nterms of this agreement, you may obtain a refund from the person or\r\nentity to whom you paid the fee as set forth in paragraph 1.E.8.\r\n\r\n1.B.  \"Project Gutenberg\" is a registered trademark.  It may only be\r\nused on or associated in any way with an electronic work by people who\r\nagree to be bound by the terms of this agreement.  There are a few\r\nthings that you can do with most Project Gutenberg-tm electronic works\r\neven without complying with the full terms of this agreement.  See\r\nparagraph 1.C below.  There are a lot of things you can do with Project\r\nGutenberg-tm electronic works if you follow the terms of this agreement\r\nand help preserve free future access to Project Gutenberg-tm electronic\r\nworks.  See paragraph 1.E below.\r\n\r\n1.C.  The Project Gutenberg Literary Archive Foundation (\"the Foundation\"\r\nor PGLAF), owns a compilation copyright in the collection of Project\r\nGutenberg-tm electronic works.  Nearly all the individual works in the\r\ncollection are in the public domain in the United States.  If an\r\nindividual work is in the public domain in the United States and you are\r\nlocated in the United States, we do not claim a right to prevent you from\r\ncopying, distributing, performing, displaying or creating derivative\r\nworks based on the work as long as all references to Project Gutenberg\r\nare removed.  Of course, we hope that you will support the Project\r\nGutenberg-tm mission of promoting free access to electronic works by\r\nfreely sharing Project Gutenberg-tm works in compliance with the terms of\r\nthis agreement for keeping the Project Gutenberg-tm name associated with\r\nthe work.  You can easily comply with the terms of this agreement by\r\nkeeping this work in the same format with its attached full Project\r\nGutenberg-tm License when you share it without charge with others.\r\n\r\n1.D.  The copyright laws of the place where you are located also govern\r\nwhat you can do with this work.  Copyright laws in most countries are in\r\na constant state of change.  If you are outside the United States, check\r\nthe laws of your country in addition to the terms of this agreement\r\nbefore downloading, copying, displaying, performing, distributing or\r\ncreating derivative works based on this work or any other Project\r\nGutenberg-tm work.  The Foundation makes no representations concerning\r\nthe copyright status of any work in any country outside the United\r\nStates.\r\n\r\n1.E.  Unless you have removed all references to Project Gutenberg:\r\n\r\n1.E.1.  The following sentence, with active links to, or other immediate\r\naccess to, the full Project Gutenberg-tm License must appear prominently\r\nwhenever any copy of a Project Gutenberg-tm work (any work on which the\r\nphrase \"Project Gutenberg\" appears, or with which the phrase \"Project\r\nGutenberg\" is associated) is accessed, displayed, performed, viewed,\r\ncopied or distributed:\r\n\r\nThis eBook is for the use of anyone anywhere at no cost and with\r\nalmost no restrictions whatsoever.  You may copy it, give it away or\r\nre-use it under the terms of the Project Gutenberg License included\r\nwith this eBook or online at www.gutenberg.net\r\n\r\n1.E.2.  If an individual Project Gutenberg-tm electronic work is derived\r\nfrom the public domain (does not contain a notice indicating that it is\r\nposted with permission of the copyright holder), the work can be copied\r\nand distributed to anyone in the United States without paying any fees\r\nor charges.  If you are redistributing or providing access to a work\r\nwith the phrase \"Project Gutenberg\" associated with or appearing on the\r\nwork, you must comply either with the requirements of paragraphs 1.E.1\r\nthrough 1.E.7 or obtain permission for the use of the work and the\r\nProject Gutenberg-tm trademark as set forth in paragraphs 1.E.8 or\r\n1.E.9.\r\n\r\n1.E.3.  If an individual Project Gutenberg-tm electronic work is posted\r\nwith the permission of the copyright holder, your use and distribution\r\nmust comply with both paragraphs 1.E.1 through 1.E.7 and any additional\r\nterms imposed by the copyright holder.  Additional terms will be linked\r\nto the Project Gutenberg-tm License for all works posted with the\r\npermission of the copyright holder found at the beginning of this work.\r\n\r\n1.E.4.  Do not unlink or detach or remove the full Project Gutenberg-tm\r\nLicense terms from this work, or any files containing a part of this\r\nwork or any other work associated with Project Gutenberg-tm.\r\n\r\n1.E.5.  Do not copy, display, perform, distribute or redistribute this\r\nelectronic work, or any part of this electronic work, without\r\nprominently displaying the sentence set forth in paragraph 1.E.1 with\r\nactive links or immediate access to the full terms of the Project\r\nGutenberg-tm License.\r\n\r\n1.E.6.  You may convert to and distribute this work in any binary,\r\ncompressed, marked up, nonproprietary or proprietary form, including any\r\nword processing or hypertext form.  However, if you provide access to or\r\ndistribute copies of a Project Gutenberg-tm work in a format other than\r\n\"Plain Vanilla ASCII\" or other format used in the official version\r\nposted on the official Project Gutenberg-tm web site (www.gutenberg.net),\r\nyou must, at no additional cost, fee or expense to the user, provide a\r\ncopy, a means of exporting a copy, or a means of obtaining a copy upon\r\nrequest, of the work in its original \"Plain Vanilla ASCII\" or other\r\nform.  Any alternate format must include the full Project Gutenberg-tm\r\nLicense as specified in paragraph 1.E.1.\r\n\r\n1.E.7.  Do not charge a fee for access to, viewing, displaying,\r\nperforming, copying or distributing any Project Gutenberg-tm works\r\nunless you comply with paragraph 1.E.8 or 1.E.9.\r\n\r\n1.E.8.  You may charge a reasonable fee for copies of or providing\r\naccess to or distributing Project Gutenberg-tm electronic works provided\r\nthat\r\n\r\n- You pay a royalty fee of 20% of the gross profits you derive from\r\n     the use of Project Gutenberg-tm works calculated using the method\r\n     you already use to calculate your applicable taxes.  The fee is\r\n     owed to the owner of the Project Gutenberg-tm trademark, but he\r\n     has agreed to donate royalties under this paragraph to the\r\n     Project Gutenberg Literary Archive Foundation.  Royalty payments\r\n     must be paid within 60 days following each date on which you\r\n     prepare (or are legally required to prepare) your periodic tax\r\n     returns.  Royalty payments should be clearly marked as such and\r\n     sent to the Project Gutenberg Literary Archive Foundation at the\r\n     address specified in Section 4, \"Information about donations to\r\n     the Project Gutenberg Literary Archive Foundation.\"\r\n\r\n- You provide a full refund of any money paid by a user who notifies\r\n     you in writing (or by e-mail) within 30 days of receipt that s/he\r\n     does not agree to the terms of the full Project Gutenberg-tm\r\n     License.  You must require such a user to return or\r\n     destroy all copies of the works possessed in a physical medium\r\n     and discontinue all use of and all access to other copies of\r\n     Project Gutenberg-tm works.\r\n\r\n- You provide, in accordance with paragraph 1.F.3, a full refund of any\r\n     money paid for a work or a replacement copy, if a defect in the\r\n     electronic work is discovered and reported to you within 90 days\r\n     of receipt of the work.\r\n\r\n- You comply with all other terms of this agreement for free\r\n     distribution of Project Gutenberg-tm works.\r\n\r\n1.E.9.  If you wish to charge a fee or distribute a Project Gutenberg-tm\r\nelectronic work or group of works on different terms than are set\r\nforth in this agreement, you must obtain permission in writing from\r\nboth the Project Gutenberg Literary Archive Foundation and Michael\r\nHart, the owner of the Project Gutenberg-tm trademark.  Contact the\r\nFoundation as set forth in Section 3 below.\r\n\r\n1.F.\r\n\r\n1.F.1.  Project Gutenberg volunteers and employees expend considerable\r\neffort to identify, do copyright research on, transcribe and proofread\r\npublic domain works in creating the Project Gutenberg-tm\r\ncollection.  Despite these efforts, Project Gutenberg-tm electronic\r\nworks, and the medium on which they may be stored, may contain\r\n\"Defects,\" such as, but not limited to, incomplete, inaccurate or\r\ncorrupt data, transcription errors, a copyright or other intellectual\r\nproperty infringement, a defective or damaged disk or other medium, a\r\ncomputer virus, or computer codes that damage or cannot be read by\r\nyour equipment.\r\n\r\n1.F.2.  LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the \"Right\r\nof Replacement or Refund\" described in paragraph 1.F.3, the Project\r\nGutenberg Literary Archive Foundation, the owner of the Project\r\nGutenberg-tm trademark, and any other party distributing a Project\r\nGutenberg-tm electronic work under this agreement, disclaim all\r\nliability to you for damages, costs and expenses, including legal\r\nfees.  YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE, STRICT\r\nLIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE\r\nPROVIDED IN PARAGRAPH 1.F.3.  YOU AGREE THAT THE FOUNDATION, THE\r\nTRADEMARK OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE\r\nLIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR\r\nINCIDENTAL DAMAGES EVEN IF YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH\r\nDAMAGE.\r\n\r\n1.F.3.  LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a\r\ndefect in this electronic work within 90 days of receiving it, you can\r\nreceive a refund of the money (if any) you paid for it by sending a\r\nwritten explanation to the person you received the work from.  If you\r\nreceived the work on a physical medium, you must return the medium with\r\nyour written explanation.  The person or entity that provided you with\r\nthe defective work may elect to provide a replacement copy in lieu of a\r\nrefund.  If you received the work electronically, the person or entity\r\nproviding it to you may choose to give you a second opportunity to\r\nreceive the work electronically in lieu of a refund.  If the second copy\r\nis also defective, you may demand a refund in writing without further\r\nopportunities to fix the problem.\r\n\r\n1.F.4.  Except for the limited right of replacement or refund set forth\r\nin paragraph 1.F.3, this work is provided to you 'AS-IS' WITH NO OTHER\r\nWARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\r\nWARRANTIES OF MERCHANTIBILITY OR FITNESS FOR ANY PURPOSE.\r\n\r\n1.F.5.  Some states do not allow disclaimers of certain implied\r\nwarranties or the exclusion or limitation of certain types of damages.\r\nIf any disclaimer or limitation set forth in this agreement violates the\r\nlaw of the state applicable to this agreement, the agreement shall be\r\ninterpreted to make the maximum disclaimer or limitation permitted by\r\nthe applicable state law.  The invalidity or unenforceability of any\r\nprovision of this agreement shall not void the remaining provisions.\r\n\r\n1.F.6.  INDEMNITY - You agree to indemnify and hold the Foundation, the\r\ntrademark owner, any agent or employee of the Foundation, anyone\r\nproviding copies of Project Gutenberg-tm electronic works in accordance\r\nwith this agreement, and any volunteers associated with the production,\r\npromotion and distribution of Project Gutenberg-tm electronic works,\r\nharmless from all liability, costs and expenses, including legal fees,\r\nthat arise directly or indirectly from any of the following which you do\r\nor cause to occur: (a) distribution of this or any Project Gutenberg-tm\r\nwork, (b) alteration, modification, or additions or deletions to any\r\nProject Gutenberg-tm work, and (c) any Defect you cause.\r\n\r\n\r\nSection  2.  Information about the Mission of Project Gutenberg-tm\r\n\r\nProject Gutenberg-tm is synonymous with the free distribution of\r\nelectronic works in formats readable by the widest variety of computers\r\nincluding obsolete, old, middle-aged and new computers.  It exists\r\nbecause of the efforts of hundreds of volunteers and donations from\r\npeople in all walks of life.\r\n\r\nVolunteers and financial support to provide volunteers with the\r\nassistance they need are critical to reaching Project Gutenberg-tm's\r\ngoals and ensuring that the Project Gutenberg-tm collection will\r\nremain freely available for generations to come.  In 2001, the Project\r\nGutenberg Literary Archive Foundation was created to provide a secure\r\nand permanent future for Project Gutenberg-tm and future generations.\r\nTo learn more about the Project Gutenberg Literary Archive Foundation\r\nand how your efforts and donations can help, see Sections 3 and 4\r\nand the Foundation web page at http://www.pglaf.org.\r\n\r\n\r\nSection 3.  Information about the Project Gutenberg Literary Archive\r\nFoundation\r\n\r\nThe Project Gutenberg Literary Archive Foundation is a non profit\r\n501(c)(3) educational corporation organized under the laws of the\r\nstate of Mississippi and granted tax exempt status by the Internal\r\nRevenue Service.  The Foundation's EIN or federal tax identification\r\nnumber is 64-6221541.  Its 501(c)(3) letter is posted at\r\nhttp://pglaf.org/fundraising.  Contributions to the Project Gutenberg\r\nLiterary Archive Foundation are tax deductible to the full extent\r\npermitted by U.S. federal laws and your state's laws.\r\n\r\nThe Foundation's principal office is located at 4557 Melan Dr. S.\r\nFairbanks, AK, 99712., but its volunteers and employees are scattered\r\nthroughout numerous locations.  Its business office is located at\r\n809 North 1500 West, Salt Lake City, UT 84116, (801) 596-1887, email\r\nbusiness@pglaf.org.  Email contact links and up to date contact\r\ninformation can be found at the Foundation's web site and official\r\npage at http://pglaf.org\r\n\r\nFor additional contact information:\r\n     Dr. Gregory B. Newby\r\n     Chief Executive and Director\r\n     gbnewby@pglaf.org\r\n\r\n\r\nSection 4.  Information about Donations to the Project Gutenberg\r\nLiterary Archive Foundation\r\n\r\nProject Gutenberg-tm depends upon and cannot survive without wide\r\nspread public support and donations to carry out its mission of\r\nincreasing the number of public domain and licensed works that can be\r\nfreely distributed in machine readable form accessible by the widest\r\narray of equipment including outdated equipment.  Many small donations\r\n($1 to $5,000) are particularly important to maintaining tax exempt\r\nstatus with the IRS.\r\n\r\nThe Foundation is committed to complying with the laws regulating\r\ncharities and charitable donations in all 50 states of the United\r\nStates.  Compliance requirements are not uniform and it takes a\r\nconsiderable effort, much paperwork and many fees to meet and keep up\r\nwith these requirements.  We do not solicit donations in locations\r\nwhere we have not received written confirmation of compliance.  To\r\nSEND DONATIONS or determine the status of compliance for any\r\nparticular state visit http://pglaf.org\r\n\r\nWhile we cannot and do not solicit contributions from states where we\r\nhave not met the solicitation requirements, we know of no prohibition\r\nagainst accepting unsolicited donations from donors in such states who\r\napproach us with offers to donate.\r\n\r\nInternational donations are gratefully accepted, but we cannot make\r\nany statements concerning tax treatment of donations received from\r\noutside the United States.  U.S. laws alone swamp our small staff.\r\n\r\nPlease check the Project Gutenberg Web pages for current donation\r\nmethods and addresses.  Donations are accepted in a number of other\r\nways including including checks, online payments and credit card\r\ndonations.  To donate, please visit: http://pglaf.org/donate\r\n\r\n\r\nSection 5.  General Information About Project Gutenberg-tm electronic\r\nworks.\r\n\r\nProfessor Michael S. Hart is the originator of the Project Gutenberg-tm\r\nconcept of a library of electronic works that could be freely shared\r\nwith anyone.  For thirty years, he produced and distributed Project\r\nGutenberg-tm eBooks with only a loose network of volunteer support.\r\n\r\n\r\nProject Gutenberg-tm eBooks are often created from several printed\r\neditions, all of which are confirmed as Public Domain in the U.S.\r\nunless a copyright notice is included.  Thus, we do not necessarily\r\nkeep eBooks in compliance with any particular paper edition.\r\n\r\n\r\nMost people start at our Web site which has the main PG search facility:\r\n\r\n     http://www.gutenberg.net\r\n\r\nThis Web site includes information about Project Gutenberg-tm,\r\nincluding how to make donations to the Project Gutenberg Literary\r\nArchive Foundation, how to help produce our new eBooks, and how to\r\nsubscribe to our email newsletter to hear about new eBooks.\r\n"
  },
  {
    "path": "benchmarks/haystacks/sherlock/small.txt",
    "content": "Mr. Sherlock Holmes, who was usually very late in the mornings, save\nupon those not infrequent occasions when he was up all night, was seated\nat the breakfast table. I stood upon the hearth-rug and picked up the\nstick which our visitor had left behind him the night before. It was a\nfine, thick piece of wood, bulbous-headed, of the sort which is known as\na \"Penang lawyer.\" Just under the head was a broad silver band nearly\nan inch across. \"To James Mortimer, M.R.C.S., from his friends of the\nC.C.H.,\" was engraved upon it, with the date \"1884.\" It was just such a\nstick as the old-fashioned family practitioner used to carry--dignified,\nsolid, and reassuring.\n"
  },
  {
    "path": "benchmarks/haystacks/sherlock/tiny.txt",
    "content": "Mr. Sherlock Holmes, who was usually very late in the mornings, save\n"
  },
  {
    "path": "benchmarks/haystacks/sliceslice/README.md",
    "content": "These benchmark inputs were taken from the sliceslice [project benchmarks][1].\n\nThese inputs drive two benchmarks, one on short haystacks and the other on long\nhaystacks, with a slightly unusual but interesting configuration. Neither of\nthese benchmarks include the time it takes to build a searcher. They only\nmeasure actual search time.\n\nThe short haystack benchmark starts by loading all of the words in `words.txt`\ninto memory and sorting them in ascending order by their length. Then, a\nsubstring searcher is created for each of these words in the same order. The\nactual benchmark consists of executing each searcher once on every needle that\nappears after it in the list. In essence, this benchmark tests how quickly the\nimplementation can deal with tiny haystacks. The results of this benchmark tend\nto come down to how much overhead the implementation has. In other words, this\nbenchmark tests latency.\n\nThe long haystack benchmark has a setup similar to the short haystack\nbenchmark, except it also loads the contents of `i386.txt` into memory. The\nactual benchmark itself executes each of the searchers built (from `words.txt`)\non the `i386.txt` haystack. This benchmark, executing on a much longer\nhaystack, tests throughput as opposed to latency across a wide variety of\nneedles.\n\n[1]: https://github.com/cloudflare/sliceslice-rs\n"
  },
  {
    "path": "benchmarks/haystacks/sliceslice/haystack.txt",
    "content": "I4BCeTWkpm1G1StV1WP8HKMX1IaRTslq88MOEg4nx7kWLaWYDRDYZrdTtsg26mz9S8DhYcd1ty35aPLyRZSeimOmPAroaqi861z44o35qP9GdrofuuHwdhSEeOg7E0L1KrTYgWZZrzyk7o0DVxw7vvmo6rVJ5T4lLMkesL1U6ObckS9oorPI5ZDm4Nk1ryh3AC8juZwJLcyWKveenfaVGaB42iYrOvrZGIMQG0OmA0k73ydw2mJawUzWE8O61MQpDm19JFaTgSJMkPs3yjY149knHg03uOBvb6d0hCmUbiHkRgFwH17cL7UJUlkggx55Gk1n07v7fGdkjvxmOmCHCvLrY9pCvewCAy1Lg1NTdE4N7AJfjPj1hiw9DqiDaJwTVc4JA229EubFHnMBlHkrSSnR1wh7RYOngmQUxjGOdctDkjVard24dO2mGkGCXAHrOjRGq9J54ml3HtCx3Ui3YN68Q8eywJnkS7CdiA2d2SmRako5VlGfRCDdoiNpZwq9FodDRcw4XsWLuH9XEAfXSGzx5X8PVUwnmTImOcc1az1x8dUWVdK5St7M5dVPsWZ5hrll7F0MjKdf2wBFYEp0gqZTswXUn2RwkDLCj4oikpBCE1fLSaiKL89rbo1RZ2phIVrXb7eQ8xJTBU1iSwWF97OJlIBcNjmE4TzrqgIl2m8ybVAURk3iC51cwO8wD5V1dcVzIuqAWJUwKh4PPyHhGdv4T439nRh3ukwAlHBtxj56izkIKWNm01Mfrc1boFApld1E597BDSrWEcXwn44KogPpJ058LGNB8IaAufcWEXfqbPwgNQUSqqarItOAFir3tr8nBGQar22nZifJzUiU35TzXUc46LYAxSEeDmbqMh3Zcmuw5YrFF5Ma0oaAuiiJb2IdpkPr5E6HuN5vDvvnjxDw0GbOX72xuSRFDxbOmt40hDLQLy3UrlaP92jS7DfBMUGefSo7mTfCpz5hvllPhbjYqJ31P9d8zJYPpQMW"
  },
  {
    "path": "benchmarks/haystacks/sliceslice/i386-notutf8.txt",
    "content": "INTEL 80386 PROGRAMMER'S REFERENCE MANUAL 1986\n\nIntel Corporation makes no warranty for the use of its products and\nassumes no responsibility for any errors which may appear in this document\nnor does it make a commitment to update the information contained herein.\n\nIntel retains the right to make changes to these specifications at any\ntime, without notice.\n\nContact your local sales office to obtain the latest specifications before\nplacing your order.\n\nThe following are trademarks of Intel Corporation and may only be used to\nidentify Intel Products:\n\nAbove, BITBUS, COMMputer, CREDIT, Data Pipeline, FASTPATH, Genius, i, ,\nICE, iCEL, iCS, iDBP, iDIS, IICE, iLBX, im, iMDDX, iMMX, Inboard,\nInsite, Intel, intel, intelBOS, Intel Certified, Intelevision,\ninteligent Identifier, inteligent Programming, Intellec, Intellink,\niOSP, iPDS, iPSC, iRMK, iRMX, iSBC, iSBX, iSDM, iSXM, KEPROM, Library\nManager, MAPNET, MCS, Megachassis, MICROMAINFRAME, MULTIBUS, MULTICHANNEL,\nMULTIMODULE, MultiSERVER, ONCE, OpenNET, OTP, PC BUBBLE, Plug-A-Bubble,\nPROMPT, Promware, QUEST, QueX, Quick-Pulse Programming, Ripplemode, RMX/80,\nRUPI, Seamless, SLD, SugarCube, SupportNET, UPI, and VLSiCEL, and the\ncombination of ICE, iCS, iRMX, iSBC, iSBX, iSXM, MCS, or UPI and a numerical\nsuffix, 4-SITE.\n\nMDS is an ordering code only and is not used as a product name or\ntrademark. MDS(R) is a registered trademark of Mohawk Data Sciences\nCorporation.\n\nAdditional copies of this manual or other Intel literature may be obtained\nfrom:\n\nIntel Corporation\nLiterature Distribution\nMail Stop SC6-59\n3065 Bowers Avenue\nSanta Clara, CA 95051\n\n(c)INTEL CORPORATION 1987    CG-5/26/87\n\n\nCustomer Support\n\n\n\nCustomer Support is Intel's complete support service that provides Intel\ncustomers with hardware support, software support, customer training, and\nconsulting services. For more information contact your local sales offices.\n\nAfter a customer purchases any system hardware or software product,\nservice and support become major factors in determining whether that\nproduct will continue to meet a customer's expectations. Such support\nrequires an international support organization and a breadth of programs\nto meet a variety of customer needs. As you might expect, Intel's customer\nsupport is quite extensive. It includes factory repair services and\nworldwide field service offices providing hardware repair services,\nsoftware support services, customer training classes, and consulting\nservices.\n\nHardware Support Services\n\nIntel is committed to providing an international service support package\nthrough a wide variety of service offerings available from Intel Hardware\nSupport.\n\nSoftware Support Services\n\nIntel's software support consists of two levels of contracts. Standard\nsupport includes TIPS (Technical Information Phone Service), updates and\nsubscription service (product-specific troubleshooting guides and COMMENTS\nMagazine). Basic support includes updates and the subscription service.\nContracts are sold in environments which represent product groupings\n(i.e., iRMX environment).\n\nConsulting Services\n\nIntel provides field systems engineering services for any phase of your\ndevelopment or support effort. You can use our systems engineers in a\nvariety of ways ranging from assistance in using a new product, developing\nan application, personalizing training, and customizing or tailoring an\nIntel product to providing technical and management consulting. Systems\nEngineers are well versed in technical areas such as microcommunications,\nreal-time applications, embedded microcontrollers, and network services.\nYou know your application needs; we know our products. Working together we\ncan help you get a successful product to market in the least possible time.\n\nCustomer Training\n\nIntel offers a wide range of instructional programs covering various\naspects of system design and implementation. In just three to ten days a\nlimited number of individuals learn more in a single workshop than in\nweeks of self-study. For optimum convenience, workshops are scheduled\nregularly at Training Centers woridwide or we can take our workshops to\nyou for on-site instruction. Covering a wide variety of topics, Intel's\nmajor course categories include: architecture and assembly language,\nprogramming and operating systems, bitbus and LAN applications.\n\nTraining Center Locations\n\nTo obtain a complete catalog of our workshops, call the nearest Training\nCenter in your area.\n\nBoston                    (617) 692-1000\nChicago                   (312) 310-5700\nSan Francisco             (415) 940-7800\nWashington D.C.           (301) 474-2878\nIsreal                    (972) 349-491-099\nTokyo                     03-437-6611\nOsaka (Call Tokyo)        03-437-6611\nToronto, Canada           (416) 675-2105\nLondon                    (0793) 696-000\nMunich                    (089) 5389-1\nParis                     (01) 687-22-21\nStockholm                 (468) 734-01-00\nMilan                     39-2-82-44-071\nBenelux (Rotterdam)       (10) 21-23-77\nCopenhagen                (1) 198-033\nHong Kong                 5-215311-7\n\n\nTable of Contents\n\nChapter 1  Introduction to the 80386\n\n1.1  Organization of This Manual\n      1.1.1  Part I  Applications Programming\n      1.1.2  Part II  Systems Programming\n      1.1.3  Part III  Compatibility\n      1.1.4  Part IV  Instruction Set\n      1.1.5  Appendices\n\n1.2  Related Literature\n1.3  Notational Conventions\n      1.3.1  Data-Structure Formats\n      1.3.2  Undefined Bits and Software Compatibility\n      1.3.3  Instruction Operands\n      1.3.4  Hexadecimal Numbers\n      1.3.5  Sub- and Super-Scripts\n\n                     PART I    APPLICATIONS PROGRAMMING                   \n\nChapter 2  Basic Programming Model\n\n2.1  Memory Organization and Segmentation\n      2.1.1  The\"Flat\" Model\n      2.1.2  The Segmented Model\n\n2.2  Data Types\n2.3  Registers\n      2.3.1  General Registers\n      2.3.2  Segment Registers\n      2.3.3  Stack Implementation\n      2.3.4  Flags Register\n              2.3.4.1  Status Flags\n              2.3.4.2  Control Flag\n              2.3.4.3  Instruction Pointer\n\n2.4  Instruction Format\n2.5  Operand Selection\n      2.5.1  Immediate Operands\n      2.5.2  Register Operands\n      2.5.3  Memory Operands\n              2.5.3.1  Segment Selection\n              2.5.3.2  Effective-Address Computation\n\n2.6  Interrupts and Exceptions\n\nChapter 3  Applications Instruction Set\n\n3.1  Data Movement Instructions\n      3.1.1  General-Purpose Data Movement Instructions\n      3.1.2  Stack Manipulation Instructions\n      3.1.3  Type Conversion Instructions\n\n3.2  Binary Arithmetic Instructions\n      3.2.1  Addition and Subtraction Instructions\n      3.2.2  Comparison and Sign Change Instruction\n      3.2.3  Multiplication Instructions\n      3.2.4  Division Instructions\n\n3.3  Decimal Arithmetic Instructions\n      3.3.1  Packed BCD Adjustment Instructions\n      3.3.2  Unpacked BCD Adjustment Instructions\n\n3.4  Logical Instructions\n      3.4.1  Boolean Operation Instructions\n      3.4.2  Bit Test and Modify Instructions\n      3.4.3  Bit Scan Instructions\n      3.4.4  Shift and Rotate Instructions\n              3.4.4.1  Shift Instructions\n              3.4.4.2  Double-Shift Instructions\n              3.4.4.3  Rotate Instructions\n              3.4.4.4  Fast\"bit-blt\" Using Double Shift\n                         Instructions\n              3.4.4.5  Fast Bit-String Insert and Extract\n\n      3.4.5  Byte-Set-On-Condition Instructions\n      3.4.6  Test Instruction\n\n3.5  Control Transfer Instructions\n      3.5.1  Unconditional Transfer Instructions\n              3.5.1.1  Jump Instruction\n              3.5.1.2  Call Instruction\n              3.5.1.3  Return and Return-From-Interrupt Instruction\n\n      3.5.2  Conditional Transfer Instructions\n              3.5.2.1  Conditional Jump Instructions\n              3.5.2.2  Loop Instructions\n              3.5.2.3  Executing a Loop or Repeat Zero Times\n\n      3.5.3  Software-Generated Interrupts\n\n3.6  String and Character Translation Instructions\n      3.6.1  Repeat Prefixes\n      3.6.2  Indexing and Direction Flag Control\n      3.6.3  String Instructions\n\n3.7  Instructions for Block-Structured Languages\n3.8  Flag Control Instructions\n      3.8.1  Carry and Direction Flag Control Instructions\n      3.8.2  Flag Transfer Instructions\n\n3.9  Coprocessor Interface Instructions\n3.10 Segment Register Instructions\n      3.10.1  Segment-Register Transfer Instructions\n      3.10.2  Far Control Transfer Instructions\n      3.10.3  Data Pointer Instructions\n\n3.11  Miscellaneous Instructions\n       3.11.1  Address Calculation Instruction\n       3.11.2  No-Operation Instruction\n       3.11.3  Translate Instruction\n\n                       PART II    SYSTEMS PROGRAMMING                     \n\nChapter 4  Systems Architecture\n\n4.1  Systems Registers\n      4.1.1  Systems Flags\n      4.1.2  Memory-Management Registers\n      4.1.3  Control Registers\n      4.1.4  Debug Register\n      4.1.5  Test Registers\n\n4.2  Systems Instructions\n\nChapter 5  Memory Management\n\n5.1  Segment Translation\n      5.1.1  Descriptors\n      5.1.2  Descriptor Tables\n      5.1.3  Selectors\n      5.1.4  Segment Registers\n\n5.2  Page Translation\n      5.2.1  Page Frame\n      5.2.2  Linear Address\n      5.2.3  Page Tables\n      5.2.4  Page-Table Entries\n              5.2.4.1  Page Frame Address\n              5.2.4.2  Present Bit\n              5.2.4.3  Accessed and Dirty Bits\n              5.2.4.4  Read/Write and User/Supervisor Bits\n\n      5.2.5  Page Translation Cache\n\n5.3  Combining Segment and Page Translation\n      5.3.1  \"Flat\" Architecture\n      5.3.2  Segments Spanning Several Pages\n      5.3.3  Pages Spanning Several Segments\n      5.3.4  Non-Aligned Page and Segment Boundaries\n      5.3.5  Aligned Page and Segment Boundaries\n      5.3.6  Page-Table per Segment\n\nChapter 6  Protection\n\n6.1  Why Protection?\n6.2  Overview of 80386 Protection Mechanisms\n6.3  Segment-Level Protection\n      6.3.1  Descriptors Store Protection Parameters\n              6.3.1.1  Type Checking\n              6.3.1.2  Limit Checking\n              6.3.1.3  Privilege Levels\n\n      6.3.2  Restricting Access to Data\n              6.3.2.1  Accessing Data in Code Segments\n\n      6.3.3  Restricting Control Transfers\n      6.3.4  Gate Descriptors Guard Procedure Entry Points\n              6.3.4.1  Stack Switching\n              6.3.4.2  Returning from a Procedure\n\n      6.3.5  Some Instructions are Reserved for Operating System\n              6.3.5.1  Privileged Instructions\n              6.3.5.2  Sensitive Instructions\n\n      6.3.6  Instructions for Pointer Validation\n              6.3.6.1  Descriptor Validation\n              6.3.6.2  Pointer Integrity and RPL\n\n6.4  Page-Level Protection\n      6.4.1  Page-Table Entries Hold Protection Parameters\n              6.4.1.1  Restricting Addressable Domain\n              6.4.1.2  Type Checking\n\n      6.4.2  Combining Protection of Both Levels of Page Tables\n      6.4.3  Overrides to Page Protection\n\n6.5  Combining Page and Segment Protection\n\nChapter 7  Multitasking\n\n7.1  Task State Segment\n7.2  TSS Descriptor\n7.3  Task Register\n7.4  Task Gate Descriptor\n7.5  Task Switching\n7.6  Task Linking\n      7.6.1  Busy Bit Prevents Loops\n      7.6.2  Modifying Task Linkages\n\n7.7  Task Address Space\n      7.7.1  Task Linear-to-Physical Space Mapping\n      7.7.2  Task Logical Address Space\n\nChapter 8    Input/Output\n\n8.1  I/O Addressing\n      8.1.1  I/O Address Space\n      8.1.2  Memory-Mapped I/O\n\n8.2  I/O Instructions\n      8.2.1  Register I/O Instructions\n      8.2.2  Block I/O Instructions\n\n8.3  Protection and I/O\n      8.3.1  I/O Privilege Level\n      8.3.2  I/O Permission Bit Map\n\nChapter 9  Exceptions and Interrupts\n\n9.1  Identifying Interrupts\n9.2  Enabling and Disabling Interrupts\n      9.2.1  NMI Masks Further NMls\n      9.2.2  IF Masks INTR\n      9.2.3  RF Masks Debug Faults\n      9.2.4  MOV or POP to SS Masks Some Interrupts and Exceptions\n\n9.3  Priority Among Simultaneous Interrupts and Exceptions\n9.4  Interrupt Descriptor Table\n9.5  IDT Descriptors\n9.6  Interrupt Tasks and Interrupt Procedures\n      9.6.1  Interrupt Procedures\n              9.6.1.1  Stack of Interrupt Procedure\n              9.6.1.2  Returning from an Interrupt Procedure\n              9.6.1.3  Flags Usage by Interrupt Procedure\n              9.6.1.4  Protection in Interrupt Procedures\n\n      9.6.2  Interrupt Tasks\n\n9.7  Error Code\n9.8  Exception Conditions\n      9.8.1  Interrupt 0  Divide Error\n      9.8.2  Interrupt 1  Debug Exceptions\n      9.8.3  Interrupt 3  Breakpoint\n      9.8.4  Interrupt 4  Overflow\n      9.8.5  Interrupt 5  Bounds Check\n      9.8.6  Interrupt 6  Invalid Opcode\n      9.8.7  Interrupt 7  Coprocessor Not Available\n      9.8.8  Interrupt 8  Double Fault\n      9.8.9  Interrupt 9  Coprocessor Segment Overrun\n      9.8.10 Interrupt 10  Invalid TSS\n      9.8.11 Interrupt 11  Segment Not Present\n      9.8.12 Interrupt 12  Stack Exception\n      9.8.13 Interrupt 13  General Protection Exception\n      9.8.14 Interrupt 14  Page Fault\n              9.8.14.1  Page Fault during Task Switch\n              9.8.14.2  Page Fault with Inconsistent Stack Pointer\n\n      9.8.15 Interrupt 16  Coprocessor Error\n\n9.9  Exception Summary\n\n9.10  Error Code Summary\n\nChapter 10  Initialization\n\n10.1  Processor State after Reset\n10.2  Software Initialization for Real-Address Mode\n       10.2.1  Stack\n       10.2.2  Interrupt Table\n       10.2.3  First Instructions\n\n10.3  Switching to Protected Mode\n10.4  Software Initialization for Protected Mode\n       10.4.1  Interrupt Descriptor Table\n       10.4.2  Stack\n       10.4.3  Global Descriptor Table\n       10.4.4  Page Tables\n       10.4.5  First Task\n\n10.5  Initialization Example\n10.6  TLB Testing\n       10.6.1  Structure of the TLB\n       10.6.2  Test Registers\n       10.6.3  Test Operations\n\nChapter 11  Coprocessing and Multiprocessing\n\n11.1  Coprocessing\n       11.1.1  Coprocessor Identification\n       11.1.2  ESC and WAIT Instructions\n       11.1.3  EM and MP Flags\n       11.1.4  The Task-Switched Flag\n       11.1.5  Coprocessor Exceptions\n                11.1.5.1  Interrupt 7  Coprocessor Not Available\n                11.1.5.2  Interrupt 9  Coprocessor Segment Overrun\n                11.1.5.3  Interrupt 16  Coprocessor Error\n\n11.2  General Multiprocessing\n       11.2.1  LOCK and the LOCK# Signal\n       11.2.2  Automatic Locking\n       11.2.3  Cache Considerations\n\nChapter 12  Debugging\n\n12.1  Debugging Features of the Architecture\n12.2  Debug Registers\n       12.2.1  Debug Address Registers (DRO-DR3)\n       12.2.2  Debug Control Register (DR7)\n       12.2.3  Debug Status Register (DR6)\n       12.2.4  Breakpoint Field Recognition\n\n12.3  Debug Exceptions\n       12.3.1  Interrupt 1  Debug Exceptions\n                12.3.1.1  Instruction Address Breakpoint\n                12.3.1.2  Data Address Breakpoint\n                12.3.1.3  General Detect Fault\n                12.3.1.4  Single-Step Trap\n                12.3.1.5  Task Switch Breakpoint\n\n       12.3.2  Interrupt 3  Breakpoint Exception\n\n                          PART III    COMPATIBILITY                       \n\nChapter 13  Executing 80286 Protected-Mode Code\n\n13.1  80286 Code Executes as a Subset of the 80386\n13.2  Two Ways to Execute 80286 Tasks\n13.3  Differences from 80286\n       13.3.1  Wraparound of 80286 24-Bit Physical Address Space\n       13.3.2  Reserved Word of Descriptor\n       13.3.3  New Descriptor Type Codes\n       13.3.4  Restricted Semantics of LOCK\n       13.3.5  Additional Exceptions\n\nChapter 14  80386 Real-Address Mode\n\n14.1  Physical Address Formation\n14.2  Registers and Instructions\n14.3  Interrupt and Exception Handling\n14.4  Entering and Leaving Real-Address Mode\n       14.4.1  Switching to Protected Mode\n\n14.5  Switching Back to Real-Address Mode\n14.6  Real-Address Mode Exceptions\n14.7  Differences from 8086\n14.8  Differences from 80286 Real-Address Mode\n       14.8.1  Bus Lock\n       14.8.2  Location of First Instruction\n       14.8.3  Initial Values of General Registers\n       14.8.4  MSW Initialization\n\nChapter 15  Virtual 8088 Mode\n\n15.1  Executing 8086 Code\n       15.1.1  Registers and Instructions\n       15.1.2  Linear Address Formation\n\n15.2  Structure of a V86 Task\n       15.2.1  Using Paging for V86 Tasks\n       15.2.2  Protection within a V86 Task\n\n15.3  Entering and Leaving V86 Mode\n       15.3.1  Transitions Through Task Switches\n       15.3.2  Transitions Through Trap Gates and Interrupt Gates\n\n15.4  Additional Sensitive Instructions\n       15.4.1  Emulating 8086 Operating System Calls\n       15.4.2  Virtualizing the Interrupt-Enable Flag\n\n15.5  Virtual I/O\n       15.5.1  I/O-Mapped I/O\n       15.5.2  Memory-Mapped I/O\n       15.5.3  Special I/O Buffers\n\n15.6  Differences from 8086\n15.7  Differences from 80286 Real-Address Mode\n\nChapter 16  Mixing 16-Bit and 32-Bit Code\n\n16.1  How the 80386 Implements 16-Bit and 32-Bit Features\n16.2  Mixing 32-Bit and 16-Bit Operations\n16.3  Sharing Data Segments among Mixed Code Segments\n16.4  Transferring Control among Mixed Code Segments\n       16.4.1  Size of Code-Segment Pointer\n       16.4.2  Stack Management for Control Transfers\n                16.4.2.1  Controlling the Operand-Size for a CALL\n                16.4.2.2  Changing Size of Call\n\n       16.4.3  Interrupt Control Transfers\n       16.4.4  Parameter Translation\n       16.4.5  The Interface Procedure\n\n                         PART IV    INSTRUCTION SET                       \n\nChapter 17  80386 Instruction Set\n\n17.1  Operand-Size and Address-Size Attributes\n       17.1.1  Default Segment Attribute\n       17.1.2  Operand-Size and Address-Size Instruction Prefixes\n       17.1.3  Address-Size Attribute for Stack\n\n17.2  Instruction Format\n       17.2.1  ModR/M and SIB Bytes\n       17.2.2  How to Read the Instruction Set Pages\n                17.2.2.1  Opcode\n                17.2.2.2  Instruction\n                17.2.2.3  Clocks\n                17.2.2.4  Description\n                17.2.2.5  Operation\n                17.2.2.6  Description\n                17.2.2.7  Flags Affected\n                17.2.2.8  Protected Mode Exceptions\n                17.2.2.9  Real Address Mode Exceptions\n                17.2.2.10 Virtual-8086 Mode Exceptions\n\nInstruction Sets\n\nAAA\nAAD\nAAM\nAAS\nADC\nADD\nAND\nARPL\nBOUND\nBSF\nBSR\nBT\nBTC\nBTR\nBTS\nCALL\nCBW/CWDE\nCLC\nCLD\nCLI\nCLTS\nCMC\nCMP\nCMPS/CMPSB/CMPSW/CMPSD\nCWD/CDQ\nDAA\nDAS\nDEC\nDIV\nENTER\nHLT\nIDIV\nIMUL\nIN\nINC\nINS/INSB/INSW/INSD\nINT/INTO\nIRET/IRETD\nJcc\nJMP\nLAHF\nLAR\nLEA\nLEAVE\nLGDT/LIDT\nLGS/LSS/LDS/LES/LFS\nLLDT\nLMSW\nLOCK\nLODS/LODSB/LODSW/LODSD\nLOOP/LOOPcond\nLSL\nLTR\nMOV\nMOV\nMOVS/MOVSB/MOVSW/MOVSD\nMOVSX\nMOVZX\nMUL\nNEG\nNOP\nNOT\nOR\nOUT\nOUTS/OUTSB/OUTSW/OUTSD\nPOP\nPOPA/POPAD\nPOPF/POPFD\nPUSH\nPUSHA/PUSHAD\nPUSHF/PUSHFD\nRCL/RCR/ROL/ROR\nREP/REPE/REPZ/REPNE/REPNZ\nRET\nSAHF\nSAL/SAR/SHL/SHR\nSBB\nSCAS/SCASB/SCASW/SCASD\nSETcc\nSGDT/SIDT\nSHLD\nSHRD\nSLDT\nSMSW\nSTC\nSTD\nSTI\nSTOS/STOSB/STOSW/STOSD\nSTR\nSUB\nTEST\nVERR,VERW\nWAIT\nXCHG\nXLAT/XLATB\nXOR\n\nAppendix A  Opcode Map\n\nAppendix B  Complete Flag Cross-Reference\n\nAppendix C  Status Flag Summary\n\nAppendix D  Condition Codes\n\n\nFigures\n\n1-1     Example Data Structure\n\n2-1     Two-Component Pointer\n2-2     Fundamental Data Types\n2-3     Bytes, Words, and Doublewords in Memory\n2-4     80386 Data Types\n2-5     80386 Applications Register Set\n2-6     Use of Memory Segmentation\n2-7     80386 Stack\n2-8     EFLAGS Register\n2-9     Instruction Pointer Register\n2-10    Effective Address Computation\n\n3-1     PUSH\n3-2     PUSHA\n3-3     POP\n3-4     POPA\n3-5     Sign Extension\n3-6     SAL and SHL\n3-7     SHR\n3-8     SAR\n3-9     Using SAR to Simulate IDIV\n3-10    Shift Left Double\n3-11    Shift Right Double\n3-12    ROL\n3-13    ROR\n3-14    RCL\n3-15    RCR\n3-16    Formal Definition of the ENTER Instruction\n3-17    Variable Access in Nested Procedures\n3-18    Stack Frame for MAIN at Level 1\n3-19    Stack Frame for Prooedure A\n3-20    Stack Frame for Procedure B at Level 3 Called from A\n3-21    Stack Frame for Procedure C at Level 3 Called from B\n3-22    LAHF and SAHF\n3-23    Flag Format for PUSHF and POPF\n\n4-1     Systems Flags of EFLAGS Register\n4-2     Control Registers\n\n5-1     Address Translation Overview\n5-2     Segment Translation\n5-3     General Segment-Descriptor Format\n5-4     Format of Not-Present Descriptor\n5-5     Descriptor Tables\n5-6     Format of a Selector\n5-7     Segment Registers\n5-8     Format of a Linear Address\n5-9     Page Translation\n5-10    Format of a Page Table Entry\n5-11    Invalid Page Table Entry\n5-12    80386 Addressing Mechanism\n5-13    Descriptor per Page Table\n\n6-1     Protection Fields of Segment Descriptors\n6-2     Levels of Privilege\n6-3     Privilege Check for Data Access\n6-4     Privilege Check for Control Transfer without Gate\n6-5     Format of 80386 Call Gate\n6-6     Indirect Transfer via Call Gate\n6-7     Privilege Check via Call Gate\n6-8     Initial Stack Pointers of TSS\n6-9     Stack Contents after an Interievel Call\n6-10    Protection Fields of Page Table Entries\n\n7-1     80386 32-Bit Task State Segment\n7-2     TSS Descriptor for 32-Bit TSS\n7-3     Task Register\n7-4     Task Gate Descriptor\n7-5     Task Gate Indirectly Identifies Task\n7-6     Partially-Overlapping Linear Spaces\n\n8-1     Memory-Mapped I/O\n8-2     I/O Address Bit Map\n\n9-1     IDT Register and Table\n9-2     Pseudo-Descriptor Format for LIDT and SIDT\n9-3     80386 IDT Gate Descriptors\n9-4     Interrupt Vectoring for Procedures\n9-5     Stack Layout after Exception of Interrupt\n9-6     Interrupt Vectoring for Tasks\n9-7     Error Code Format\n9-8     Page-Fault Error Code Format\n9-9     CR2 Format\n\n10-1    Contents of EDX after RESET\n10-2    Initial Contents of CRO\n10-3    TLB Structure\n10-4    Test Registers\n\n12-1    Debug Registers\n\n14-1    Real-Address Mode Address Formation\n\n15-1    V86 Mode Address Formation\n15-2    Entering and Leaving an 8086 Program\n15-3    PL 0 Stack after Interrupt in V86 Task\n\n16-1    Stack after Far 16-Bit and 32-Bit Calls\n\n17-1    80386 Instruction Format\n17-2    ModR/M and SIB Byte Formats\n17-3    Bit Offset for BIT[EAX, 21]\n17-4    Memory Bit Indexing\n\n\nTables\n\n2-1      Default Segment Register Selection Rules\n2-2      80386 Reserved Exceptions and Interrupts\n\n3-1      Bit Test and Modify Instructions\n3-2      Interpretation of Conditional Transfers\n\n6-1      System and Gate Descriptor Types\n6-2      Useful Combinations of E, G, and B Bits\n6-3      Interievel Return Checks\n6-4      Valid Descriptor Types for LSL\n6-5      Combining Directory and Page Protection\n\n7-1      Checks Made during a Task Switch\n7-2      Effect of Task Switch on BUSY, NT, and Back-Link\n\n9-1      Interrupt and Exception ID Assignments\n9-2      Priority Among Simultaneous Interrupts and Exceptions\n9-3      Double-Fault Detection Classes\n9-4      Double-Fault Definition\n9-5      Conditions That Invalidate the TSS\n9-6      Exception Summary\n9-7      Error-Code Summary\n\n10-1     Meaning of D, U, and W Bit Pairs\n\n12-1     Breakpeint Field Recognition Examples\n12-2     Debug Exception Conditions\n\n14-1     80386 Real-Address Mode Exceptions\n14-2     New 80386 Exceptions\n\n17-1     Effective Size Attributes\n17-2     16-Bit Addressing Forms with the ModR/M Byte\n17-3     32-Bit Addressing Forms with the ModR/M Byte\n17-4     32-Bit Addressing Forms with the SIB Byte\n17-5     Task Switch Times for Exceptions\n17-6     80386 Exceptions\n\n\nChapter 1  Introduction to the 80386\n\n\n\nThe 80386 is an advanced 32-bit microprocessor optimized for multitasking\noperating systems and designed for applications needing very high\nperformance. The 32-bit registers and data paths support 32-bit addresses\nand data types. The processor can address up to four gigabytes of physical\nmemory and 64 terabytes (2^(46) bytes) of virtual memory. The on-chip\nmemory-management facilities include address translation registers,\nadvanced multitasking hardware, a protection mechanism, and paged virtual\nmemory. Special debugging registers provide data and code breakpoints even\nin ROM-based software.\n\n\n1.1  Organization of This Manual\n\nThis book presents the architecture of the 80386 in five parts:\n\n   Part I       Applications Programming\n   Part II      Systems Programming\n   Part III     Compatibility\n   Part IV      Instruction Set\n   Appendices\n\nThese divisions are determined in part by the architecture itself and in\npart by the different ways the book will be used. As the following table\nindicates, the latter two parts are intended as reference material for\nprogrammers actually engaged in the process of developing software for the\n80386. The first three parts are explanatory, showing the purpose of\narchitectural features, developing terminology and concepts, and describing\ninstructions as they relate to specific purposes or to specific\narchitectural features.\n\nExplanation                Part I    Applications Programming\n                           Part II   Systems Programming\n                           Part III  Compatibility\n\nReference                  Part IV   Instruction Set\n                           Appendices\n\nThe first three parts follow the execution modes and protection features of\nthe 80386 CPU. The distinction between applications features and systems\nfeatures is determined by the protection mechanism of the 80386. One purpose\nof protection is to prevent applications from interfering with the operating\nsystem; therefore, the processor makes certain registers and instructions\ninaccessible to applications programs. The features discussed in Part I are\nthose that are accessible to applications; the features in Part II are\navailable only to systems software that has been given special privileges or\nin unprotected systems.\n\nThe processing mode of the 80386 also determines the features that are\naccessible. The 80386 has three processing modes:\n\n   1.  Protected Mode.\n   2.  Real-Address Mode.\n   3.  Virtual 8086 Mode.\n\nProtected mode is the natural 32-bit environment of the 80386 processor. In\nthis mode all instructions and features are available.\n\nReal-address mode (often called just \"real mode\") is the mode of the\nprocessor immediately after RESET. In real mode the 80386 appears to\nprogrammers as a fast 8086 with some new instructions. Most applications of\nthe 80386 will use real mode for initialization only.\n\nVirtual 8086 mode (also called V86 mode) is a dynamic mode in the sense\nthat the processor can switch repeatedly and rapidly between V86 mode and\nprotected mode. The CPU enters V86 mode from protected mode to execute an\n8086 program, then leaves V86 mode and enters protected mode to continue\nexecuting a native 80386 program.\n\nThe features that are available to applications programs in protected mode\nand to all programs in V86 mode are the same. These features form the\ncontent of Part I. The additional features that are available to systems\nsoftware in protected mode form Part II. Part III explains real-address\nmode and V86 mode, as well as how to execute a mix of 32-bit and 16-bit\nprograms.\n\nAvailable in All Modes             Part I  Applications Programming\n\nAvailable in Protected             Part II  Systems Programming\nMode Only\n\nCompatibility Modes                Part III  Compatibility\n\n\n1.1.1  Part I  Applications Programming\n\nThis part presents those aspects of the architecture that are customarily\nused by applications programmers.\n\nChapter 2  Basic Programming Model: Introduces the models of memory\norganization. Defines the data types. Presents the register set used by\napplications. Introduces the stack. Explains string operations. Defines the\nparts of an instruction. Explains addressing calculations. Introduces\ninterrupts and exceptions as they may apply to applications programming.\n\nChapter 3  Application Instruction Set: Surveys the instructions commonly\nused for applications programming. Considers instructions in functionally\nrelated groups; for example, string instructions are considered in one\nsection, while control-transfer instructions are considered in another.\nExplains the concepts behind the instructions. Details of individual\ninstructions are deferred until Part IV, the instruction-set reference.\n\n\n1.1.2  Part II  Systems Programming\n\nThis part presents those aspects of the architecture that are customarily\nused by programmers who write operating systems, device drivers, debuggers,\nand other software that supports applications programs in the protected mode\nof the 80386.\n\nChapter 4  Systems Architecture: Surveys the features of the 80386 that \nare used by systems programmers. Introduces the remaining registers and data\nstructures of the 80386 that were not discussed in Part I. Introduces the\nsystems-oriented instructions in the context of the registers and data\nstructures they support. Points to the chapter where each register, data\nstructure, and instruction is considered in more detail.\n\nChapter 5  Memory Management: Presents details of the data structures,\nregisters, and instructions that support virtual memory and the concepts of\nsegmentation and paging. Explains how systems designers can choose a model\nof memory organization ranging from completely linear (\"flat\") to fully\npaged and segmented.\n\nChapter 6  Protection: Expands on the memory management features of the\n80386 to include protection as it applies to both segments and pages.\nExplains the implementation of privilege rules, stack switching, pointer\nvalidation, user and supervisor modes. Protection aspects of multitasking\nare deferred until the following chapter.\n\nChapter 7  Multitasking: Explains how the hardware of the 80386 supports\nmultitasking with context-switching operations and intertask protection.\n\nChapter 8  Input/Output: Reveals the I/O features of the 80386, including\nI/O instructions, protection as it relates to I/O, and the I/O permission\nmap.\n\nChapter 9  Exceptions and Interrupts: Explains the basic interrupt\nmechanisms of the 80386. Shows how interrupts and exceptions relate to\nprotection. Discusses all possible exceptions, listing causes and including\ninformation needed to handle and recover from the exception.\n\nChapter 10  Initialization: Defines the condition of the processor after\nRESET or power-up. Explains how to set up registers, flags, and data\nstructures for either real-address mode or protected mode. Contains an\nexample of an initialization program.\n\nChapter 11  Coprocessing and Multiprocessing: Explains the instructions\nand flags that support a numerics coprocessor and multiple CPUs with shared\nmemory.\n\nChapter 12  Debugging: Tells how to use the debugging registers of the\n80386.\n\n\n1.1.3  Part III  Compatibility\n\nOther parts of the book treat the processor primarily as a 32-bit machine,\nomitting for simplicity its facilities for 16-bit operations. Indeed, the\n80386 is a 32-bit machine, but its design fully supports 16-bit operands and\naddressing, too. This part completes the picture of the 80386 by explaining\nthe features of the architecture that support 16-bit programs and 16-bit\noperations in 32-bit programs. All three processor modes are used to\nexecute 16-bit programs: protected mode can directly execute 16-bit 80286\nprotected mode programs, real mode executes 8086 programs and real-mode\n80286 programs, and virtual 8086 mode executes 8086 programs in a\nmultitasking environment with other 80386 protected-mode programs. In\naddition, 32-bit and 16-bit modules and individual 32-bit and 16-bit\noperations can be mixed in protected mode.\n\nChapter 13  Executing 80286 Protected-Mode Code: In its protected mode,\nthe 80386 can execute complete 80286 protected-mode systems, because 80286\ncapabilities are a subset of 80386 capabilities.\n\nChapter 14  80386 Real-Address Mode: Explains the real mode of the 80386\nCPU. In this mode the 80386 appears as a fast real-mode 80286 or fast 8086\nenhanced with additional instructions.\n\nChapter 15  Virtual 8086 Mode: The 80386 can switch rapidly between its\nprotected mode and V86 mode, giving it the ability to multiprogram 8086\nprograms along with \"native mode\" 32-bit programs.\n\nChapter 16  Mixing 16-Bit and 32-Bit Code: Even within a program or task,\nthe 80386 can mix 16-bit and 32-bit modules. Furthermore, any given module\ncan utilize both 16-bit and 32-bit operands and addresses.\n\n\n1.1.4  Part IV  Instruction Set\n\nParts I, II, and III present overviews of the instructions as they relate\nto specific aspects of the architecture, but this part presents the\ninstructions in alphabetical order, providing the detail needed by\nassembly-language programmers and programmers of debuggers, compilers,\noperating systems, etc. Instruction descriptions include algorithmic\ndescription of operation, effect of flag settings, effect on flag settings,\neffect of operand- or address-size attributes, effect of processor modes,\nand possible exceptions.\n\n\n1.1.5  Appendices\n\nThe appendices present tables of encodings and other details in a format\ndesigned for quick reference by assembly-language and systems programmers.\n\n\n1.2  Related Literature\n\nThe following books contain additional material concerning the 80386\nmicroprocessor:\n\n    Introduction to the 80386, order number 231252\n\n    80386 Hardware Reference Manual, order number 231732\n\n    80386 System Software Writer's Guide, order number 231499\n\n    80386 High Performance 32-bit Microprocessor with Integrated Memory\n     Management (Data Sheet), order number 231630\n\n\n1.3  Notational Conventions\n\nThis manual uses special notations for data-structure formats, for symbolic\nrepresentation of instructions, for hexadecimal numbers, and for super- and\nsub-scripts. Subscript characters are surrounded by {curly brackets}, for\nexample 10{2} = 10 base 2. Superscript characters are preceeded by a caret\nand enclosed within (parentheses), for example 10^(3) = 10 to the third\npower. A review of these notations will make it easier to read the\nmanual.\n\n1.3.1  Data-Structure Formats\n\nIn illustrations of data structures in memory, smaller addresses appear at\nthe lower-right part of the figure; addresses increase toward the left and\nupwards. Bit positions are numbered from right to left. Figure 1-1\nillustrates this convention.\n\n\n1.3.2  Undefined Bits and Software Compatibility\n\nIn many register and memory layout descriptions, certain bits are marked as\nundefined. When bits are marked as undefined (as illustrated in Figure\n1-1), it is essential for compatibility with future processors that\nsoftware treat these bits as undefined. Software should follow these\nguidelines in dealing with undefined bits:\n\n    Do not depend on the states of any undefined bits when testing the\n     values of registers that contain such bits. Mask out the undefined bits\n     before testing.\n\n    Do not depend on the states of any undefined bits when storing them in\n     memory or in another register.\n\n    Do not depend on the ability to retain information written into any\n     undefined bits.\n\n    When loading a register, always load the undefined bits as zeros or\n     reload them with values previously stored from the same register.\n\n\nNOTE\n  Depending upon the values of undefined register bits will make software\n  dependent upon the unspecified manner in which the 80386 handles these\n  bits. Depending upon undefined values risks making software incompatible\n  with future processors that define usages for these bits. AVOID ANY\n  SOFTWARE DEPENDENCE UPON THE STATE OF UNDEFINED 80386 REGISTER BITS.\n\n\n\nFigure 1-1.  Example Data Structure\n\n GREATEST                 DATA STRUCTURE\n ADDRESS\n  31              23              15              7             0 \u0011BIT\n ͻ   OFFSET\n                                                                28\n ͹\n                                                                24\n ͹\n                                                                20\n ͹\n                                                                16\n ͹\n                                                                12\n ͹\n                                                                8\n ͹\n                            UNDEFINED                           4\n ͹  SMALLEST\n     BYTE 3          BYTE 2          BYTE 1          BYTE 0     0 ADDRESS\n ͼ\u001e\n                                                    BYTE OFFSET\n\n\n1.3.3  Instruction Operands\n\nWhen instructions are represented symbolically, a subset of the 80386\nAssembly Language is used. In this subset, an instruction has the following\nformat:\n\nlabel: prefix mnemonic argument1, argument2, argument3\n\nwhere:\n\n    A label is an identifier that is followed by a colon.\n\n    A prefix is an optional reserved name for one of the instruction\n     prefixes.\n\n    A mnemonic is a reserved name for a class of instruction opcodes that\n     have the same function.\n\n    The operands argument1, argument2, and argument3 are optional. There\n     may be from zero to three operands, depending on the opcode.  When\n     present, they take the form of either literals or identifiers for data\n     items.  Operand identifiers are either reserved names of registers or\n     are assumed to be assigned to data items declared in another part of\n     the program (which may not be shown in the example). When two operands\n     are present in an instruction that modifies data, the right operand is\n     the source and the left operand is the destination.\n\nFor example:\n\nLOADREG: MOV EAX, SUBTOTAL\n\nIn this example LOADREG is a label, MOV is the mnemonic identifier of an\nopcode, EAX is the destination operand, and SUBTOTAL is the source operand.\n\n1.3.4  Hexadecimal Numbers\n\nBase 16 numbers are represented by a string of hexadecimal digits followed\nby the character H.  A hexadecimal digit is a character from the set (0, 1,\n2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F).  In some cases, especially in\nexamples of program syntax, a leading zero is added if the number would\notherwise begin with one of the digits A-F.  For example, 0FH is equivalent\nto the decimal number 15.\n\n1.3.5  Sub- and Super-Scripts\n\nThis manual uses special notation to represent sub- and super-script\ncharacters. Sub-script characters are surrounded by {curly brackets}, for\nexample 10{2} = 10 base 2. Super-script characters are preceeded by a\ncaret and enclosed within (parentheses), for example 10^(3) = 10 to the\nthird power.\n\n\n                     PART I    APPLICATIONS PROGRAMMING                    \n\n\nChapter 2  Basic Programming Model\n\n\n\nThis chapter describes the 80386 application programming environment as\nseen by assembly language programmers when the processor is executing in\nprotected mode. The chapter introduces programmers to those features of the\n80386 architecture that directly affect the design and implementation of\n80386 applications programs. Other chapters discuss 80386 features that\nrelate to systems programming or to compatibility with other processors of\nthe 8086 family.\n\nThe basic programming model consists of these aspects:\n\n    Memory organization and segmentation\n    Data types\n    Registers\n    Instruction format\n    Operand selection\n    Interrupts and exceptions\n\nNote that input/output is not included as part of the basic programming\nmodel. Systems designers may choose to make I/O instructions available to\napplications or may choose to reserve these functions for the operating\nsystem. For this reason, the I/O features of the 80386 are discussed in Part\nII.\n\nThis chapter contains a section for each aspect of the architecture that is\nnormally visible to applications.\n\n\n2.1  Memory Organization and Segmentation\n\nThe physical memory of an 80386 system is organized as a sequence of 8-bit\nbytes. Each byte is assigned a unique address that ranges from zero to a\nmaximum of 2^(32) -1 (4 gigabytes).\n\n80386 programs, however, are independent of the physical address space.\nThis means that programs can be written without knowledge of how much\nphysical memory is available and without knowledge of exactly where in\nphysical memory the instructions and data are located.\n\nThe model of memory organization seen by applications programmers is\ndetermined by systems-software designers. The architecture of the 80386\ngives designers the freedom to choose a model for each task. The model of\nmemory organization can range between the following extremes:\n\n    A \"flat\" address space consisting of a single array of up to 4\n     gigabytes.\n\n    A segmented address space consisting of a collection of up to 16,383\n     linear address spaces of up to 4 gigabytes each.\n\nBoth models can provide memory protection. Different tasks may employ\ndifferent models of memory organization. The criteria that designers use to\ndetermine a memory organization model and the means that systems programmers\nuse to implement that model are covered in Part IISystems Programming.\n\n\n2.1.1  The \"Flat\" Model\n\nIn a \"flat\" model of memory organization, the applications programmer sees\na single array of up to 2^(32) bytes (4 gigabytes). While the physical\nmemory can contain up to 4 gigabytes, it is usually much smaller; the\nprocessor maps the 4 gigabyte flat space onto the physical address space by\nthe address translation mechanisms described in Chapter 5. Applications\nprogrammers do not need to know the details of the mapping.\n\nA pointer into this flat address space is a 32-bit ordinal number that may\nrange from 0 to 2^(32) -1. Relocation of separately-compiled modules in this\nspace must be performed by systems software (e.g., linkers, locators,\nbinders, loaders).\n\n\n2.1.2  The Segmented Model\n\nIn a segmented model of memory organization, the address space as viewed by\nan applications program (called the logical address space) is a much larger\nspace of up to 2^(46) bytes (64 terabytes). The processor maps the 64\nterabyte logical address space onto the physical address space (up to 4\ngigabytes) by the address translation mechanisms described in Chapter 5.\nApplications programmers do not need to know the details of this mapping.\n\nApplications programmers view the logical address space of the 80386 as a\ncollection of up to 16,383 one-dimensional subspaces, each with a specified\nlength. Each of these linear subspaces is called a segment. A segment is a\nunit of contiguous address space. Segment sizes may range from one byte up\nto a maximum of 2^(32) bytes (4 gigabytes).\n\nA complete pointer in this address space consists of two parts (see Figure\n2-1):\n\n  1.  A segment selector, which is a 16-bit field that identifies a\n      segment.\n\n  2.  An offset, which is a 32-bit ordinal that addresses to the byte level\n      within a segment.\n\nDuring execution of a program, the processor associates with a segment\nselector the physical address of the beginning of the segment. Separately\ncompiled modules can be relocated at run time by changing the base address\nof their segments. The size of a segment is variable; therefore, a segment\ncan be exactly the size of the module it contains.\n\n\n2.2  Data Types\n\nBytes, words, and doublewords are the fundamental data types (refer to\nFigure 2-2). A byte is eight contiguous bits starting at any logical\naddress. The bits are numbered 0 through 7; bit zero is the least\nsignificant bit.\n\nA word is two contiguous bytes starting at any byte address. A word thus\ncontains 16 bits. The bits of a word are numbered from 0 through 15; bit 0\nis the least significant bit. The byte containing bit 0 of the word is\ncalled the low byte; the byte containing bit 15 is called the high byte.\n\nEach byte within a word has its own address, and the smaller of the\naddresses is the address of the word. The byte at this lower address\ncontains the eight least significant bits of the word, while the byte at the\nhigher address contains the eight most significant bits.\n\nA doubleword is two contiguous words starting at any byte address. A\ndoubleword thus contains 32 bits. The bits of a doubleword are numbered from\n0 through 31; bit 0 is the least significant bit. The word containing bit 0\nof the doubleword is called the low word; the word containing bit 31 is\ncalled the high word.\n\nEach byte within a doubleword has its own address, and the smallest of the\naddresses is the address of the doubleword. The byte at this lowest address\ncontains the eight least significant bits of the doubleword, while the byte\nat the highest address contains the eight most significant bits. Figure 2-3\nillustrates the arrangement of bytes within words anddoublewords.\n\nNote that words need not be aligned at even-numbered addresses and\ndoublewords need not be aligned at addresses evenly divisible by four. This\nallows maximum flexibility in data structures (e.g., records containing\nmixed byte, word, and doubleword items) and efficiency in memory\nutilization. When used in a configuration with a 32-bit bus, actual\ntransfers of data between processor and memory take place in units of\ndoublewords beginning at addresses evenly divisible by four; however, the\nprocessor converts requests for misaligned words or doublewords into the\nappropriate sequences of requests acceptable to the memory interface. Such\nmisaligned data transfers reduce performance by requiring extra memory\ncycles. For maximum performance, data structures (including stacks) should\nbe designed in such a way that, whenever possible, word operands are aligned\nat even addresses and doubleword operands are aligned at addresses evenly\ndivisible by four. Due to instruction prefetching and queuing within the\nCPU, there is no requirement for instructions to be aligned on word or\ndoubleword boundaries. (However, a slight increase in speed results if the\ntarget addresses of control transfers are evenly divisible by four.)\n\nAlthough bytes, words, and doublewords are the fundamental types of\noperands, the processor also supports additional interpretations of these\noperands. Depending on the instruction referring to the operand, the\nfollowing additional data types are recognized:\n\nInteger:\nA signed binary numeric value contained in a 32-bit doubleword,16-bit word,\nor 8-bit byte. All operations assume a 2's complement representation. The\nsign bit is located in bit 7 in a byte, bit 15 in a word, and bit 31 in a\ndoubleword. The sign bit has the value zero for positive integers and one\nfor negative. Since the high-order bit is used for a sign, the range of an\n8-bit integer is -128 through +127; 16-bit integers may range from -32,768\nthrough +32,767; 32-bit integers may range from -2^(31) through +2^(31) -1.\nThe value zero has a positive sign.\n\nOrdinal:\nAn unsigned binary numeric value contained in a 32-bit doubleword,\n16-bit word, or 8-bit byte. All bits are considered in determining\nmagnitude of the number. The value range of an 8-bit ordinal number\nis 0-255; 16 bits can represent values from 0 through 65,535; 32 bits\ncan represent values from 0 through 2^(32) -1.\n\nNear Pointer:\nA 32-bit logical address. A near pointer is an offset within a segment.\nNear pointers are used in either a flat or a segmented model of memory\norganization.\n\nFar Pointer:\nA 48-bit logical address of two components: a 16-bit segment selector\ncomponent and a 32-bit offset component. Far pointers are used by\napplications programmers only when systems designers choose a\nsegmented memory organization.\n\nString:\nA contiguous sequence of bytes, words, or doublewords. A string may\ncontain from zero bytes to 2^(32) -1 bytes (4 gigabytes).\n\nBit field:\nA contiguous sequence of bits. A bit field may begin at any bit position\nof any byte and may contain up to 32 bits.\n\nBit string:\nA contiguous sequence of bits. A bit string may begin at any bit position\nof any byte and may contain up to 2^(32) -1 bits.\n\nBCD:\nA byte (unpacked) representation of a decimal digit in the range0 through\n9. Unpacked decimal numbers are stored as unsigned byte quantities. One\ndigit is stored in each byte. The magnitude of the number is determined from\nthe low-order half-byte; hexadecimal values 0-9 are valid and are\ninterpreted as decimal numbers. The high-order half-byte must be zero for\nmultiplication and division; it may contain any value for addition and\nsubtraction.\n\nPacked BCD:\nA byte (packed) representation of two decimal digits, each in the range\n0 through 9. One digit is stored in each half-byte. The digit in the\nhigh-order half-byte is the most significant. Values 0-9 are valid in each\nhalf-byte. The range of a packed decimal byte is 0-99.\n\nFigure 2-4 graphically summarizes the data types supported by the 80386.\n\n\nFigure 2-1.  Two-Component Pointer\n\n                                   \u0007               \u0007\n                                                  \n                                   ͹Ŀ\n       32            0                             \n      ͻ   ͻ    ͹ \n          OFFSET     Ķ + \u0010    OPERAND     \n      ͼ   ͼ    ͹  SELECTED SEGMENT\n                            \u001e                      \n           16    0                                \n          ͻ                               \n          SEGMENT\u0010͹\n          ͼ                               \n                                                  \n                                                  \n                                   \u0007               \u0007\n\n\nFigure 2-2.  Fundamental Data Types\n\n  7              0\n ͻ\n      BYTE        BYTE\n ͼ\n\n  15              7              0\n ͻ\n    HIGH BYTE      LOW BYTE      WORD\n ͼ\n    address n+1      address n\n\n  31              23              15              7             0\n ͻ\n            HIGH WORD                       LOW WORD           DOUBLEWORD\n ͼ\n    address n+3     address n+2     address n+1      address n\n\n\nFigure 2-3.  Bytes, Words, and Doublewords in Memory\n\n                  MEMORY\n       BYTE       VALUES\nAll values in hexadecimal\n     ADDRESS   ͻ\n              E          \n               ͹Ŀ\n              D    7A       DOUBLE WORD AT ADDRESS A\n               ͹Ŀ  CONTAINS 7AFE0636\n              C    FE     \n               ͹  WORD AT ADDRESS B\n              B    06      CONTAINS FE06\n               ͹ٳ\n              A    36      \n               ͹͵\n              9    1F       WORD AT ADDRESS 9\n               ͹  CONTAINS IF\n              8          \n               ͹Ŀ\n              7    23      \n               ͹   WORD AT ADDRESS 6\n              6    OB        CONTAINS 23OB\n               ͹\n              5          \n               ͹\n              4          \n               ͹Ŀ\n              3    74      \n               ͹Ŀ WORD AT ADDRESS 2\n              2    CB       CONTAINS 74CB\n               ͹\n              1    31      WORD AT ADDRESS 1\n               ͹   CONTAINS CB31\n              0          \n               ͼ\n\n\nFigure 2-4.  80386 Data Types\n\n                                                           +1       0\n          7       0              7       0            15 14    8 7      0\n     BYTE ѻ         BYTE ѻ         WORD ѻ\n  INTEGER            ORDINAL             INTEGER            \n          ͼ              ͼ              ͼ\n  SIGN BIT                    SIGN BITMSB           \n           MAGNITUDE             MAGNITUDE              \n                                                            MAGNITUDE\n\n\n            +1       0                       +3     +2      +1       0\n         15              0               31            16 15             0\n    WORD ѻ    DOUBLEWORD ѻ\n ORDINAL                   INTEGER                        \n         ͼ               ͼ\n                               SIGN BITMSB                           \n                        \n             MAGNITUDE                              MAGNITUDE\n\n\n                           +3      +2      +1       0\n                        31                              0\n             DOUBLEWORD ѻ\n                ORDINAL                         \n                        ͼ\n                        \n                                    MAGNITUDE\n\n                           +N              +1       0\n                        7       0       7      0 7      0\n           BINARY CODED ѻ       ѻ\n          DECIMAL (BCD)         \u0007\u0007\u0007              \n                        ͼ       ͼ\n                           BCD             BCD     BCD\n                         DIGIT N         DIGIT 1  DIGIT 0\n\n                           +N              +1       0\n                        7       0       7      0 7      0\n                 PACKED ѻ       ѻ\n                    BCD         \u0007\u0007\u0007              \n                        ͼ       ͼ\n                                               \n                        MOST                        LEAST\n                        SIGNIFICANT           SIGNIFICANT\n                        DIGIT                       DIGIT\n\n                           +N              +1       0\n                        7       0       7      0 7      0\n                   BYTE ѻ       ѻ\n                 STRING         \u0007\u0007\u0007              \n                        ͼ       ͼ\n\n                                              -2 GIGABYTES\n                +2 GIGABYTES                           210\n     BIT   ѻ\n  STRING                                      \n           ϼ\n                         BIT 0\n\n               +3      +2      +1       0\n            31                              0\nNEAR 32-BIT ѻ\n    POINTER                         \n            ͼ\n            \n                             OFFSET\n\n              +5      +4      +3      +2      +1       0\n           48                                              0\nFAR 48-BIT ѻ\n   POINTER                                     \n           ͼ\n           \n                SELECTOR                 OFFSET\n\n                  +5      +4      +3      +2      +1       0\n    32-BIT ѻ\n BIT FIELD                                     \n           ͼ\n                   \u0011 BIT FIELD \u0010\n                             1 TO 32 BITS\n\n\n2.3  Registers\n\nThe 80386 contains a total of sixteen registers that are of interest to the\napplications programmer. As Figure 2-5 shows, these registers may be\ngrouped into these basic categories:\n\n  1.  General registers. These eight 32-bit general-purpose registers are\n      used primarily to contain operands for arithmetic and logical\n      operations.\n\n  2.  Segment registers. These special-purpose registers permit systems\n      software designers to choose either a flat or segmented model of\n      memory organization. These six registers determine, at any given time,\n      which segments of memory are currently addressable.\n\n  3.  Status and instruction registers. These special-purpose registers are\n      used to record and alter certain aspects of the 80386 processor state.\n\n\n2.3.1  General Registers\n\nThe general registers of the 80386 are the 32-bit registers EAX, EBX, ECX,\nEDX, EBP, ESP, ESI, and EDI. These registers are used interchangeably to\ncontain the operands of logical and arithmetic operations. They may also be\nused interchangeably for operands of address computations (except that ESP\ncannot be used as an index operand).\n\nAs Figure 2-5 shows, the low-order word of each of these eight registers\nhas a separate name and can be treated as a unit. This feature is useful for\nhandling 16-bit data items and for compatibility with the 8086 and 80286\nprocessors. The word registers are named AX, BX, CX, DX, BP, SP, SI, and DI.\n\nFigure 2-5 also illustrates that each byte of the 16-bit registers AX, BX,\nCX, and DX has a separate name and can be treated as a unit. This feature is\nuseful for handling characters and other 8-bit data items. The byte\nregisters are named AH, BH, CH, and DH (high bytes); and AL, BL, CL, and DL\n(low bytes).\n\nAll of the general-purpose registers are available for addressing\ncalculations and for the results of most arithmetic and logical\ncalculations; however, a few functions are dedicated to certain registers.\nBy implicitly choosing registers for these functions, the 80386 architecture\ncan encode instructions more compactly. The instructions that use specific\nregisters include: double-precision multiply and divide, I/O, string\ninstructions, translate, loop, variable shift and rotate, and stack\noperations.\n\n\n2.3.2  Segment Registers\n\nThe segment registers of the 80386 give systems software designers the\nflexibility to choose among various models of memory organization.\nImplementation of memory models is the subject of Part II  Systems\nProgramming. Designers may choose a model in which applications programs do\nnot need to modify segment registers, in which case applications programmers\nmay skip this section.\n\nComplete programs generally consist of many different modules, each\nconsisting of instructions and data. However, at any given time during\nprogram execution, only a small subset of a program's modules are actually\nin use. The 80386 architecture takes advantage of this by providing\nmechanisms to support direct access to the instructions and data of the\ncurrent module's environment, with access to additional segments on demand.\n\nAt any given instant, six segments of memory may be immediately accessible\nto an executing 80386 program. The segment registers CS, DS, SS, ES, FS, and\nGS are used to identify these six current segments. Each of these registers\nspecifies a particular kind of segment, as characterized by the associated\nmnemonics (\"code,\" \"data,\" or \"stack\") shown in Figure 2-6. Each register\nuniquely determines one particular segment, from among the segments that\nmake up the program, that is to be immediately accessible at highest speed.\n\nThe segment containing the currently executing sequence of instructions is\nknown as the current code segment; it is specified by means of the CS\nregister. The 80386 fetches all instructions from this code segment, using\nas an offset the contents of the instruction pointer. CS is changed\nimplicitly as the result of intersegment control-transfer instructions (for\nexample, CALL and JMP), interrupts, and exceptions.\n\nSubroutine calls, parameters, and procedure activation records usually\nrequire that a region of memory be allocated for a stack. All stack\noperations use the SS register to locate the stack. Unlike CS, the SS\nregister can be loaded explicitly, thereby permitting programmers to define\nstacks dynamically.\n\nThe DS, ES, FS, and GS registers allow the specification of four data\nsegments, each addressable by the currently executing program. Accessibility\nto four separate data areas helps programs efficiently access different\ntypes of data structures; for example, one data segment register can point\nto the data structures of the current module, another to the exported data\nof a higher-level module, another to a dynamically created data structure,\nand another to data shared with another task. An operand within a data\nsegment is addressed by specifying its offset either directly in an\ninstruction or indirectly via general registers.\n\nDepending on the structure of data (e.g., the way data is parceled into one\nor more segments), a program may require access to more than four data\nsegments. To access additional segments, the DS, ES, FS, and GS registers\ncan be changed under program control during the course of a program's\nexecution. This simply requires that the program execute an instruction to\nload the appropriate segment register prior to executing instructions that\naccess the data.\n\nThe processor associates a base address with each segment selected by a\nsegment register. To address an element within a segment, a 32-bit offset is\nadded to the segment's base address. Once a segment is selected (by loading\nthe segment selector into a segment register), a data manipulation\ninstruction only needs to specify the offset. Simple rules define which\nsegment register is used to form an address when only an offset is\nspecified.\n\n\nFigure 2-5.  80386 Applications Register Set\n\n                              GENERAL REGISTERS\n\n  31                23                15                7               0\n ͻ\n                                   EAX       AH       AX      AL        \n ͹\n                                   EDX       DH       DX      DL        \n ͹\n                                   ECX       CH       CX      CL        \n ͹\n                                   EBX       BH       BX      BL        \n ͹\n                                   EBP                BP                \n ͹\n                                   ESI                SI                \n ͹\n                                   EDI                DI                \n ͹\n                                   ESP                SP                \n ͼ\n\n\n                      15                7               0\n                     ͻ\n                              CS (CODE SEGMENT)         \n                     Ķ\n                              SS (STACK SEGMENT)        \n    SEGMENT          Ķ\n    REGISTERS                 DS (DATA SEGMENT)         \n                     Ķ\n                              ES (DATA SEGMENT)         \n                     Ķ\n                              FS (DATA SEGMENT)         \n                     Ķ\n                              GS (DATA SEGMENT)         \n                     ͼ\n\n\n                       STATUS AND INSTRUCTION REGISTERS\n\n     31               23                15                7              0\n   ͻ\n                                   EFLAGS                                 \n   Ķ\n                           EIP (INSTRUCTION POINTER)                      \n   ͼ\n\n\nFigure 2-6.  Use of Memory Segmentation\n\n     ͻ                                ͻ\n          MODULE                                          MODULE     \n            A        \u0011Ŀ                        \u0010       A        \n           CODE                                          DATA      \n     ͼ     ͻ     ͼ\n                          Ķ    CS (CODE)       \n                             ͹  \n     ͻ   Ķ    SS (STACK)         ͻ\n                          ͹           DATA      \n          STACK      \u0011      DS (DATA)     \u0010   STRUCTURE    \n                           ͹            1        \n     ͼ          ES (DATA)       ͼ\n                             ͹\n                          Ķ    FS (DATA)     \n     ͻ     ͹      ͻ\n           DATA               GS (DATA)     Ŀ         DATA      \n        STRUCTURE    \u0011  ͼ  \u0010   STRUCTURE    \n            2                                               3        \n     ͼ                                ͼ\n\n\n2.3.3  Stack Implementation\n\nStack operations are facilitated by three registers:\n\n  1.  The stack segment (SS) register. Stacks are implemented in memory. A\n      system may have a number of stacks that is limited only by the maximum\n      number of segments. A stack may be up to 4 gigabytes long, the maximum\n      length of a segment. One stack is directly addressable at a timethe\n      one located by SS. This is the current stack, often referred to simply\n      as \"the\" stack. SS is used automatically by the processor for all\n      stack operations.\n\n  2.  The stack pointer (ESP) register. ESP points to the top of the\n      push-down stack (TOS). It is referenced implicitly by PUSH and POP\n      operations, subroutine calls and returns, and interrupt operations.\n      When an item is pushed onto the stack (see Figure 2-7), the processor\n      decrements ESP, then writes the item at the new TOS. When an item is\n      popped off the stack, the processor copies it from TOS, then\n      increments ESP. In other words, the stack grows down in memory toward\n      lesser addresses.\n\n  3.  The stack-frame base pointer (EBP) register. The EBP is the best\n      choice of register for accessing data structures, variables and\n      dynamically allocated work space within the stack. EBP is often used\n      to access elements on the stack relative to a fixed point on the stack\n      rather than relative to the current TOS. It typically identifies the\n      base address of the current stack frame established for the current\n      procedure. When EBP is used as the base register in an offset\n      calculation, the offset is calculated automatically in the current\n      stack segment (i.e., the segment currently selected by SS). Because\n      SS does not have to be explicitly specified, instruction encoding in\n      such cases is more efficient. EBP can also be used to index into\n      segments addressable via other segment registers.\n\n\nFigure 2-7.  80386 Stack\n\n     31                         0\n     ͻ \u0011BOTTOM OF STACK\n                                       (INITIAL ESP VALUE)\n     ͹\n                                \n     ͹        \u001e\n                                        POP\n     ͹        \n                                        \n     ͹              TOP OF     ͻ\n                                 \u0011Ķ     ESP     \n     ͹              STACK      ͼ\n                                        \n                                        \n                                        PUSH\n                                        \u001f\n\n\n2.3.4  Flags Register\n\nThe flags register is a 32-bit register named EFLAGS. Figure 2-8 defines\nthe bits within this register. The flags control certain operations and\nindicate the status of the 80386.\n\nThe low-order 16 bits of EFLAGS is named FLAGS and can be treated as a\nunit. This feature is useful when executing 8086 and 80286 code, because\nthis part of EFLAGS is identical to the FLAGS register of the 8086 and the\n80286.\n\nThe flags may be considered in three groups: the status flags, the control\nflags, and the systems flags. Discussion of the systems flags is delayed\nuntil Part II.\n\n\nFigure 2-8.  EFLAGS Register  \n\n                                              16-BIT FLAGS REGISTER\n                                                         A\n                                     Ŀ\n  31                  23                  15               7            0\n ͻ\n                                    VR N IOODITSZ A P C\n  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0          0 0 1 \n                                    MF T PLFFFFFF F F F\n Ѽ\n                                                            \n       VIRTUAL 8086 MODEX                      \n             RESUME FLAGX                     \n        NESTED TASK FLAGX                  \n     I/O PRIVILEGE LEVELX                \n                OVERFLOWS              \n          DIRECTION FLAGC             \n        INTERRUPT ENABLEX            \n               TRAP FLAGS           \n               SIGN FLAGS          \n               ZERO FLAGS         \n         AUXILIARY CARRYS      \n             PARITY FLAGS   \n              CARRY FLAGS\n\n          S = STATUS FLAG, C = CONTROL FLAG, X = SYSTEM FLAG\n\n          NOTE: 0 OR 1 INDICATES INTEL RESERVED. DO NOT DEFINE\n\n\n2.3.4.1  Status Flags\n\nThe status flags of the EFLAGS register allow the results of one\ninstruction to influence later instructions. The arithmetic instructions use\nOF, SF, ZF, AF, PF, and CF. The SCAS (Scan String), CMPS (Compare String),\nand LOOP instructions use ZF to signal that their operations are complete.\nThere are instructions to set, clear, and complement CF before execution of\nan arithmetic instruction. Refer to Appendix C for definition of each\nstatus flag.\n\n\n2.3.4.2  Control Flag\n\nThe control flag DF of the EFLAGS register controls string instructions.\n\nDF (Direction Flag, bit 10)\n\n  Setting DF causes string instructions to auto-decrement; that is, to\n  process strings from high addresses to low addresses. Clearing DF causes\n  string instructions to auto-increment, or to process strings from low\n  addresses to high addresses.\n\n\n2.3.4.3  Instruction Pointer\n\nThe instruction pointer register (EIP) contains the offset address,\nrelative to the start of the current code segment, of the next sequential\ninstruction to be executed. The instruction pointer is not directly visible\nto the programmer; it is controlled implicitly by control-transfer\ninstructions, interrupts, and exceptions.\n\nAs Figure 2-9 shows, the low-order 16 bits of EIP is named IP and can be\nused by the processor as a unit. This feature is useful when executing\ninstructions designed for the 8086 and 80286 processors.\n\n\nFigure 2-9.  Instruction Pointer Register\n\n                                                 16-BIT IP REGISTER\n                                       Ŀ\n    31                23                15                7               0\n   ͻ\n                          EIP (INSTRUCTION POINTER)                       \n   ͼ\n\n\n2.4  Instruction Format\n\nThe information encoded in an 80386 instruction includes a specification of\nthe operation to be performed, the type of the operands to be manipulated,\nand the location of these operands. If an operand is located in memory, the\ninstruction must also select, explicitly or implicitly, which of the\ncurrently addressable segments contains the operand.\n\n80386 instructions are composed of various elements and have various\nformats. The exact format of instructions is shown in Appendix B; the\nelements of instructions are described below. Of these instruction elements,\nonly one, the opcode, is always present. The other elements may or may not\nbe present, depending on the particular operation involved and on the\nlocation and type of the operands. The elements of an instruction, in order\nof occurrence are as follows:\n\n    Prefixes  one or more bytes preceding an instruction that modify the\n     operation of the instruction. The following types of prefixes can be\n     used by applications programs:\n\n     1.  Segment override  explicitly specifies which segment register an\n         instruction should use, thereby overriding the default\n         segment-register selection used by the 80386 for that instruction.\n\n     2.  Address size  switches between 32-bit and 16-bit address \n         generation.\n\n     3.  Operand size  switches between 32-bit and 16-bit operands.\n\n     4.  Repeat  used with a string instruction to cause the instruction\n         to act on each element of the string.\n\n    Opcode  specifies the operation performed by the instruction. Some\n     operations have several different opcodes, each specifying a different\n     variant of the operation.\n\n    Register specifier  an instruction may specify one or two register\n     operands. Register specifiers may occur either in the same byte as the\n     opcode or in the same byte as the addressing-mode specifier.\n\n    Addressing-mode specifier  when present, specifies whether an operand\n     is a register or memory location; if in memory, specifies whether a\n     displacement, a base register, an index register, and scaling are to be\n     used.\n\n    SIB (scale, index, base) byte  when the addressing-mode specifier\n     indicates that an index register will be used to compute the address of\n     an operand, an SIB byte is included in the instruction to encode the\n     base register, the index register, and a scaling factor.\n\n    Displacement  when the addressing-mode specifier indicates that a\n     displacement will be used to compute the address of an operand, the\n     displacement is encoded in the instruction. A displacement is a signed\n     integer of 32, 16, or eight bits. The eight-bit form is used in the\n     common case when the displacement is sufficiently small. The processor\n     extends an eight-bit displacement to 16 or 32 bits, taking into\n     account the sign.\n\n    Immediate operand  when present, directly provides the value of an\n     operand of the instruction. Immediate operands may be 8, 16, or 32 bits\n     wide. In cases where an eight-bit immediate operand is combined in some\n     way with a 16- or 32-bit operand, the processor automatically extends\n     the size of the eight-bit operand, taking into account the sign.\n\n\n2.5  Operand Selection\n\nAn instruction can act on zero or more operands, which are the data\nmanipulated by the instruction. An example of a zero-operand instruction is\nNOP (no operation). An operand can be in any of these locations:\n\n    In the instruction itself (an immediate operand)\n\n    In a register (EAX, EBX, ECX, EDX, ESI, EDI, ESP, or EBP in the case\n     of 32-bit operands; AX, BX, CX, DX, SI, DI, SP, or BP in the case of\n     16-bit operands; AH, AL, BH, BL, CH, CL, DH, or DL in the case of 8-bit\n     operands; the segment registers; or the EFLAGS register for flag\n     operations)\n\n    In memory\n\n    At an I/O port\n\nImmediate operands and operands in registers can be accessed more rapidly\nthan operands in memory since memory operands must be fetched from memory.\nRegister operands are available in the CPU. Immediate operands are also\navailable in the CPU, because they are prefetched as part of the\ninstruction.\n\nOf the instructions that have operands, some specify operands implicitly;\nothers specify operands explicitly; still others use a combination of\nimplicit and explicit specification; for example:\n\nImplicit operand: AAM\n\n  By definition, AAM (ASCII adjust for multiplication) operates on the\n  contents of the AX register.\n\nExplicit operand: XCHG EAX, EBX\n\n  The operands to be exchanged are encoded in the instruction after the\n  opcode.\n\nImplicit and explicit operands: PUSH COUNTER\n\n  The memory variable COUNTER (the explicit operand) is copied to the top of\n  the stack (the implicit operand).\n\nNote that most instructions have implicit operands. All arithmetic\ninstructions, for example, update the EFLAGS register.\n\nAn 80386 instruction can explicitly reference one or two operands.\nTwo-operand instructions, such as MOV, ADD, XOR, etc., generally overwrite\none of the two participating operands with the result. A distinction can\nthus be made between the source operand (the one unaffected by the\noperation) and the destination operand (the one overwritten by the result).\n\nFor most instructions, one of the two explicitly specified operandseither\nthe source or the destinationcan be either in a register or in memory.\nThe other operand must be in a register or be an immediate source operand.\nThus, the explicit two-operand instructions of the 80386 permit operations\nof the following kinds:\n\n    Register-to-register\n    Register-to-memory\n    Memory-to-register\n    Immediate-to-register\n    Immediate-to-memory\n\nCertain string instructions and stack manipulation instructions, however,\ntransfer data from memory to memory. Both operands of some string\ninstructions are in memory and are implicitly specified. Push and pop stack\noperations allow transfer between memory operands and the memory-based\nstack.\n\n\n2.5.1  Immediate Operands\n\nCertain instructions use data from the instruction itself as one (and\nsometimes two) of the operands. Such an operand is called an immediate\noperand. The operand may be 32-, 16-, or 8-bits long. For example:\n\nSHR PATTERN, 2\n\nOne byte of the instruction holds the value 2, the number of bits by which\nto shift the variable PATTERN.\n\nTEST PATTERN, 0FFFF00FFH\n\nA doubleword of the instruction holds the mask that is used to test the\nvariable PATTERN.\n\n\n2.5.2  Register Operands\n\nOperands may be located in one of the 32-bit general registers (EAX, EBX,\nECX, EDX, ESI, EDI, ESP, or EBP), in one of the 16-bit general registers\n(AX, BX, CX, DX, SI, DI, SP, or BP), or in one of the 8-bit general\nregisters (AH, BH, CH, DH, AL, BL, CL,or DL).\n\nThe 80386 has instructions for referencing the segment registers (CS, DS,\nES, SS, FS, GS). These instructions are used by applications programs only\nif systems designers have chosen a segmented memory model.\n\nThe 80386 also has instructions for referring to the flag register. The\nflags may be stored on the stack and restored from the stack. Certain\ninstructions change the commonly modified flags directly in the EFLAGS\nregister. Other flags that are seldom modified can be modified indirectly\nvia the flags image in the stack.\n\n\n2.5.3  Memory Operands\n\nData-manipulation instructions that address operands in memory must specify\n(either directly or indirectly) the segment that contains the operand and\nthe offset of the operand within the segment. However, for speed and compact\ninstruction encoding, segment selectors are stored in the high speed segment\nregisters. Therefore, data-manipulation instructions need to specify only\nthe desired segment register and an offset in order to address a memory\noperand.\n\nAn 80386 data-manipulation instruction that accesses memory uses one of the\nfollowing methods for specifying the offset of a memory operand within its\nsegment:\n\n  1.  Most data-manipulation instructions that access memory contain a byte\n      that explicitly specifies the addressing method for the operand. A\n      byte, known as the modR/M byte, follows the opcode and specifies\n      whether the operand is in a register or in memory. If the operand is\n      in memory, the address is computed from a segment register and any of\n      the following values: a base register, an index register, a scaling\n      factor, a displacement. When an index register is used, the modR/M\n      byte is also followed by another byte that identifies the index\n      register and scaling factor. This addressing method is the\n      mostflexible.\n\n  2.  A few data-manipulation instructions implicitly use specialized\n      addressing methods:\n\n         For a few short forms of MOV that implicitly use the EAX register,\n          the offset of the operand is coded as a doubleword in the\n          instruction. No base register, index register, or scaling factor\n          are used.\n\n         String operations implicitly address memory via DS:ESI, (MOVS,\n          CMPS, OUTS, LODS, SCAS) or via ES:EDI (MOVS, CMPS, INS, STOS).\n\n         Stack operations implicitly address operands via SS:ESP\n          registers; e.g., PUSH, POP, PUSHA, PUSHAD, POPA, POPAD, PUSHF,\n          PUSHFD, POPF, POPFD, CALL, RET, IRET, IRETD, exceptions, and\n          interrupts.\n\n\n2.5.3.1  Segment Selection\n\nData-manipulation instructions need not explicitly specify which segment\nregister is used. For all of these instructions, specification of a segment\nregister is optional. For all memory accesses, if a segment is not\nexplicitly specified by the instruction, the processor automatically chooses\na segment register according to the rules of Table 2-1. (If systems\ndesigners have chosen a flat model of memory organization, the segment\nregisters and the rules that the processor uses in choosing them are not\napparent to applications programs.)\n\nThere is a close connection between the kind of memory reference and the\nsegment in which that operand resides. As a rule, a memory reference implies\nthe current data segment (i.e., the implicit segment selector is in DS).\nHowever, ESP and EBP are used to access items on the stack; therefore, when\nthe ESP or EBP register is used as a base register, the current stack\nsegment is implied (i.e., SS contains the selector).\n\nSpecial instruction prefix elements may be used to override the default\nsegment selection. Segment-override prefixes allow an explicit segment\nselection. The 80386 has a segment-override prefix for each of the segment\nregisters. Only in the following special cases is there an implied segment\nselection that a segment prefix cannot override:\n\n    The use of ES for destination strings in string instructions.\n    The use of SS in stack instructions.\n    The use of CS for instruction fetches.\n\n\nTable 2-1. Default Segment Register Selection Rules\n\nMemory Reference Needed  Segment     Implicit Segment Selection Rule\n                         Register\n                         Used\n\nInstructions             Code (CS)   Automatic with instruction prefetch\nStack                    Stack (SS)  All stack pushes and pops. Any\n                                     memory reference that uses ESP or\n                                     EBP as a base register.\nLocal Data               Data (DS)   All data references except when\n                                     relative to stack or string \n                                     destination.\nDestination Strings      Extra (ES)  Destination of string instructions.\n\n\n2.5.3.2  Effective-Address Computation\n\nThe modR/M byte provides the most flexible of the addressing methods, and\ninstructions that require a modR/M byte as the second byte of the\ninstruction are the most common in the 80386 instruction set. For memory\noperands defined by modR/M, the offset within the desired segment is\ncalculated by taking the sum of up to three components:\n\n    A displacement element in the instruction.\n\n    A base register.\n\n    An index register. The index register may be automatically multiplied\n     by a scaling factor of 2, 4, or 8.\n\nThe offset that results from adding these components is called an effective\naddress. Each of these components of an effective address may have either a\npositive or negative value. If the sum of all the components exceeds 2^(32),\nthe effective address is truncated to 32 bits.Figure 2-10 illustrates the\nfull set of possibilities for modR/M addressing.\n\nThe displacement component, because it is encoded in the instruction, is\nuseful for fixed aspects of addressing; for example:\n\n    Location of simple scalar operands.\n    Beginning of a statically allocated array.\n    Offset of an item within a record.\n\nThe base and index components have similar functions. Both utilize the same\nset of general registers. Both can be used for aspects of addressing that\nare determined dynamically; for example:\n\n    Location of procedure parameters and local variables in stack.\n\n    The beginning of one record among several occurrences of the same\n     record type or in an array of records.\n\n    The beginning of one dimension of multiple dimension array.\n\n    The beginning of a dynamically allocated array.\n\nThe uses of general registers as base or index components differ in the\nfollowing respects:\n\n    ESP cannot be used as an index register.\n\n    When ESP or EBP is used as the base register, the default segment is\n     the one selected by SS. In all other cases the default segment is DS.\n\nThe scaling factor permits efficient indexing into an array in the common\ncases when array elements are 2, 4, or 8 bytes wide. The shifting of the\nindex register is done by the processor at the time the address is evaluated\nwith no performance loss. This eliminates the need for a separate shift or\nmultiply instruction.\n\nThe base, index, and displacement components may be used in any\ncombination; any of these components may be null. A scale factor can be used\nonly when an index is also used. Each possible combination is useful for\ndata structures commonly used by programmers in high-level languages and\nassembly languages. Following are possible uses for some of the various\ncombinations of address components.\n\nDISPLACEMENT\n\n   The displacement alone indicates the offset of the operand. This\n   combination is used to directly address a statically allocated scalar\n   operand. An 8-bit, 16-bit, or 32-bit displacement can be used.\n\nBASE\n\n   The offset of the operand is specified indirectly in one of the general\n   registers, as for \"based\" variables.\n\nBASE + DISPLACEMENT\n\n   A register and a displacement can be used together for two distinct\n   purposes:\n\n   1.  Index into static array when element size is not 2, 4, or 8 bytes.\n       The displacement component encodes the offset of the beginning of\n       the array. The register holds the results of a calculation to\n       determine the offset of a specific element within the array.\n\n   2.  Access item of a record. The displacement component locates an\n       item within record. The base register selects one of several\n       occurrences of record, thereby providing a compact encoding for\n       this common function.\n\n   An important special case of this combination, is to access parameters\n   in the procedure activation record in the stack.  In this case, EBP is\n   the best choice for the base register, because when EBP is used as a\n   base register, the processor automatically uses the stack segment\n   register (SS) to locate the operand, thereby providing a compact\n   encoding for this common function.\n\n(INDEX * SCALE) + DISPLACEMENT\n\n   This combination provides efficient indexing into a static array when\n   the element size is 2, 4, or 8 bytes. The displacement addresses the\n   beginning of the array, the index register holds the subscript of the\n   desired array element, and the processor automatically converts the\n   subscript into an index by applying the scaling factor.\n\nBASE + INDEX + DISPLACEMENT\n\n   Two registers used together support either a two-dimensional array (the\n   displacement determining the beginning of the array) or one of several\n   instances of an array of records (the displacement indicating an item\n   in the record).\n\nBASE + (INDEX * SCALE) + DISPLACEMENT\n\n   This combination provides efficient indexing of a two-dimensional array\n   when the elements of the array are 2, 4, or 8 bytes wide.\n\n\nFigure 2-10.  Effective Address Computation\n\n      SEGMENT +    BASE   +    (INDEX * SCALE)  +     DISPLACEMENT\n\n                      \n                  ---                   \n                EAX       EAX       1 \n       CS       ECX       ECX                                   \n       SS       EDX       EDX       2           NO DISPLACEMENT \n     Ĵ DS  + Ĵ EBX  + Ĵ EBX  * Ĵ    + Ĵ  8-BIT DISPLACEMENT \n       ES       ESP       ---       4       32-BIT DISPLACEMENT \n       FS       EBP       EBP                                   \n       GS       ESI       ESI       6 \n                EDI       EDI         \n                                \n\n\n2.6  Interrupts and Exceptions\n\nThe 80386 has two mechanisms for interrupting program execution:\n\n  1.  Exceptions are synchronous events that are the responses of the CPU\n      to certain conditions detected during the execution of an instruction.\n\n  2.  Interrupts are asynchronous events typically triggered by external\n      devices needing attention.\n\nInterrupts and exceptions are alike in that both cause the processor to\ntemporarily suspend its present program execution in order to execute a\nprogram of higher priority. The major distinction between these two kinds of\ninterrupts is their origin. An exception is always reproducible by\nre-executing with the program and data that caused the exception, whereas an\ninterrupt is generally independent of the currently executing program.\n\nApplication programmers are not normally concerned with servicing\ninterrupts. More information on interrupts for systems programmers may be\nfound in Chapter 9. Certain exceptions, however, are of interest to\napplications programmers, and many operating systems give applications\nprograms the opportunity to service these exceptions. However, the operating\nsystem itself defines the interface between the applications programs and\nthe exception mechanism of the 80386.\n\nTable 2-2 highlights the exceptions that may be of interest to applications\nprogrammers.\n\n    A divide error exception results when the instruction DIV or IDIV is\n     executed with a zero denominator or when the quotient is too large for\n     the destination operand. (Refer to Chapter 3 for a discussion of DIV\n     and IDIV.)\n\n    The debug exception may be reflected back to an applications program\n     if it results from the trap flag (TF).\n\n    A breakpoint exception results when the instruction INT 3 is executed.\n     This instruction is used by some debuggers to stop program execution at\n     specific points.\n\n    An overflow exception results when the INTO instruction is executed\n     and the OF (overflow) flag is set (after an arithmetic operation that\n     set the OF flag). (Refer to Chapter 3 for a discussion of INTO).\n\n    A bounds check exception results when the BOUND instruction is\n     executed and the array index it checks falls outside the bounds of the\n     array. (Refer to Chapter 3 for a discussion of the BOUND instruction.)\n\n    Invalid opcodes may be used by some applications to extend the\n     instruction set. In such a case, the invalid opcode exception presents\n     an opportunity to emulate the opcode.\n\n    The \"coprocessor not available\" exception occurs if the program\n     contains instructions for a coprocessor, but no coprocessor is present\n     in the system.\n\n    A coprocessor error is generated when a coprocessor detects an illegal\n     operation.\n\nThe instruction INT generates an interrupt whenever it is executed; the\nprocessor treats this interrupt as an exception. The effects of this\ninterrupt (and the effects of all other exceptions) are determined by\nexception handler routines provided by the application program or as part of\nthe systems software (provided by systems programmers). The INT instruction\nitself is discussed in Chapter 3. Refer to Chapter 9 for a more complete\ndescription of exceptions.\n\n\nTable 2-2. 80386 Reserved Exceptions and Interrupts\n\nVector Number      Description\n\n0                  Divide Error\n1                  Debug Exceptions\n2                  NMI Interrupt\n3                  Breakpoint\n4                  INTO Detected Overflow\n5                  BOUND Range Exceeded\n6                  Invalid Opcode\n7                  Coprocessor Not Available\n8                  Double Exception\n9                  Coprocessor Segment Overrun\n10                 Invalid Task State Segment\n11                 Segment Not Present\n12                 Stack Fault\n13                 General Protection\n14                 Page Fault\n15                 (reserved)\n16                 Coprocessor Error\n17-32              (reserved)\n\n\nChapter 3  Applications Instruction Set\n\n\n\nThis chapter presents an overview of the instructions which programmers can\nuse to write application software for the 80386 executing in protected\nvirtual-address mode. The instructions are grouped by categories of related\nfunctions.\n\nThe instructions not discussed in this chapter are those that are normally\nused only by operating-system programmers. Part II describes the operation\nof these instructions.\n\nThe descriptions in this chapter assume that the 80386 is operating in\nprotected mode with 32-bit addressing in effect; however, all instructions\ndiscussed are also available when 16-bit addressing is in effect in\nprotected mode, real mode, or virtual 8086 mode. For any differences of\noperation that exist in the various modes, refer to Chapter 13,\nChapter 14, or Chapter 15.\n\nThe instruction dictionary in Chapter 17 contains more detailed\ndescriptions of all instructions, including encoding, operation, timing,\neffect on flags, and exceptions.\n\n\n3.1  Data Movement Instructions\n\nThese instructions provide convenient methods for moving bytes, words, or\ndoublewords of data between memory and the registers of the base\narchitecture. They fall into the following classes:\n\n  1.  General-purpose data movement instructions.\n  2.  Stack manipulation instructions.\n  3.  Type-conversion instructions.\n\n\n3.1.1  General-Purpose Data Movement Instructions\n\nMOV (Move) transfers a byte, word, or doubleword from the source operand to\nthe destination operand. The MOV instruction is useful for transferring data\nalong any of these paths\nThere are also variants of MOV that operate on segment registers.  These\nare covered in a later section of this chapter.:\n\n    To a register from memory\n    To memory from a register\n    Between general registers\n    Immediate data to a register\n    Immediate data to a memory\n\nThe MOV instruction cannot move from memory to memory or from segment\nregister to segment register are not allowed. Memory-to-memory moves can be\nperformed, however, by the string move instruction MOVS.\n\nXCHG (Exchange) swaps the contents of two operands. This instruction takes\nthe place of three MOV instructions. It does not require a temporary\nlocation to save the contents of one operand while load the other is being\nloaded. XCHG is especially useful for implementing semaphores or similar\ndata structures for process synchronization.\n\nThe XCHG instruction can swap two byte operands, two word operands, or two\ndoubleword operands. The operands for the XCHG instruction may be two\nregister operands, or a register operand with a memory operand. When used\nwith a memory operand, XCHG automatically activates the LOCK signal. (Refer\nto Chapter 11 for more information on the bus lock.)\n\n\n3.1.2  Stack Manipulation Instructions\n\nPUSH (Push) decrements the stack pointer (ESP), then transfers the source\noperand to the top of stack indicated by ESP (see Figure 3-1). PUSH is\noften used to place parameters on the stack before calling a procedure; it\nis also the basic means of storing temporary variables on the stack. The\nPUSH instruction operates on memory operands, immediate operands, and\nregister operands (including segment registers).\n\nPUSHA (Push All Registers) saves the contents of the eight general\nregisters on the stack (see Figure 3-2). This instruction simplifies\nprocedure calls by reducing the number of instructions required to retain\nthe contents of the general registers for use in a procedure. The processor\npushes the general registers on the stack in the following order: EAX, ECX,\nEDX, EBX, the initial value of ESP before EAX was pushed, EBP, ESI, and\nEDI. PUSHA is complemented by the POPA instruction.\n\nPOP (Pop) transfers the word or doubleword at the current top of stack\n(indicated by ESP) to the destination operand, and then increments ESP to\npoint to the new top of stack. See Figure 3-3. POP moves information from\nthe stack to a general register, or to memory\nThere are also a variant of POP that operates on segment registers. This\nis covered in a later section of this chapter..\n\nPOPA (Pop All Registers) restores the registers saved on the stack by\nPUSHA, except that it ignores the saved value of ESP. See Figure 3-4.\n\n\nFigure 3-1.  PUSH\n\n       D  O        BEFORE PUSH                  AFTER PUSH\n       I  F     \u0007 31          0 \u0007           \u0007 31          0 \u0007\n       R                                                 \n       E  E     ͹           ͹\n       C  X                \n       T  P     ͹           ͹\n       I  A                \n       O  N     ͹\u0011ESP     ͹\n       N  S                                   OPERAND    \n          I     ͹           ͹\u0011ESP\n         O                                              \n         N     ͹           ͹\n                                                        \n        \u001f       ͹           ͹\n                                                         \n                \u0007               \u0007           \u0007               \u0007\n\n\nFigure 3-2.  PUSHA\n\n                   BEFORE PUSHA                AFTER PUSHA\n                \u0007 31          0 \u0007           \u0007 31          0 \u0007\n         D  O                                            \n         I  F   ͹           ͹\n         R                 \n         E  E   ͹           ͹\n         C  X              \n         T  P   ͹\u0011ESP     ͹\n         I  A                                   EAX      \n         O  N   ͹           ͹\n         N  S                                   ECX      \n            I   ͹           ͹\n           O                                   EDX      \n           N   ͹           ͹\n                                               EBX      \n          \u001f     ͹           ͹\n                                              OLD ESP    \n                ͹           ͹\n                                                EBP      \n                ͹           ͹\n                                                ESI      \n                ͹           ͹\n                                                EDI      \n                ͹           ͹\u0011ESP\n                                                         \n                ͹           ͹\n                                                         \n                \u0007               \u0007           \u0007               \u0007\n\n\n3.1.3  Type Conversion Instructions\n\nThe type conversion instructions convert bytes into words, words into\ndoublewords, and doublewords into 64-bit items (quad-words). These\ninstructions are especially useful for converting signed integers, because\nthey automatically fill the extra bits of the larger item with the value of\nthe sign bit of the smaller item. This kind of conversion, illustrated by\nFigure 3-5, is called sign extension.\n\nThere are two classes of type conversion instructions:\n\n  1.  The forms CWD, CDQ, CBW, and CWDE which operate only on data in the\n      EAX register.\n\n  2.  The forms MOVSX and MOVZX, which permit one operand to be in any\n      general register while permitting the other operand to be in memory or\n      in a register.\n\nCWD (Convert Word to Doubleword) and CDQ (Convert Doubleword to Quad-Word)\ndouble the size of the source operand. CWD extends the sign of the\nword in register AX throughout register DX. CDQ extends the sign of the\ndoubleword in EAX throughout EDX. CWD can be used to produce a doubleword\ndividend from a word before a word division, and CDQ can be used to produce\na quad-word dividend from a doubleword before doubleword division.\n\nCBW (Convert Byte to Word) extends the sign of the byte in register AL\nthroughout AX.\n\nCWDE (Convert Word to Doubleword Extended) extends the sign of the word in\nregister AX throughout EAX.\n\nMOVSX (Move with Sign Extension) sign-extends an 8-bit value to a 16-bit\nvalue and a 8- or 16-bit value to 32-bit value.\n\nMOVZX (Move with Zero Extension) extends an 8-bit value to a 16-bit value\nand an 8- or 16-bit value to 32-bit value by inserting high-order zeros.\n\n\nFigure 3-3.  POP\n\n       D  O         BEFORE POP                  AFTER POP\n       I  F     \u0007 31          0 \u0007           \u0007 31          0 \u0007\n       R                                                 \n       E  E     ͹           ͹\n       C  X                \n       T  P     ͹           ͹\n       I  A                \n       O  N     ͹           ͹\u0011ESP\n       N  S         OPERAND                              \n          I     ͹\u0011ESP     ͹\n         O                                              \n         N     ͹           ͹\n                                                        \n        \u001f       ͹           ͹\n                                                         \n                \u0007               \u0007           \u0007               \u0007\n\n\nFigure 3-4.  POPA\n\n                   BEFORE POPA                  AFTER POPA\n                \u0007 31          0 \u0007           \u0007 31          0 \u0007\n         D  O                                            \n         I  F   ͹           ͹\n         R                 \n         E  E   ͹           ͹\n         C  X              \n         T  P   ͹           ͹\u0011ESP\n         I  A         EAX                                \n         O  N   ͹           ͹\n         N  S         ECX                                \n            I   ͹           ͹\n           O         EDX                                \n           N   ͹           ͹\n                     EBX                                \n          \u001f     ͹           ͹\n                      ESP                                \n                ͹           ͹\n                      EPB                                \n                ͹           ͹\n                      ESI                                \n                ͹           ͹\n                      EDI                                \n                ͹\u0011ESP     ͹\n                                                         \n                ͹           ͹\n                                                         \n                \u0007               \u0007           \u0007               \u0007\n\n\nFigure 3-5.  Sign Extension\n\n                                    15                7               0\n                                    ͻ\n     BEFORE SIGN EXTENSION\u0010S N N N N N N N N N N N N N N N \n                                    ͼ\n     AFTER SIGN EXTENSIONĿ\n                               \n    31               23        \u001f     15              7              0\n    ͻ\n    SS S S S S S S S S S S S S S S S N N N N N N N N N N N N N N N\n    ͼ\n\n\n3.2  Binary Arithmetic Instructions\n\nThe arithmetic instructions of the 80386 processor simplify the\nmanipulation of numeric data that is encoded in binary. Operations include\nthe standard add, subtract, multiply, and divide as well as increment,\ndecrement, compare, and change sign. Both signed and unsigned binary\nintegers are supported. The binary arithmetic instructions may also be used\nas one step in the process of performing arithmetic on decimal integers.\n\nMany of the arithmetic instructions operate on both signed and unsigned\nintegers. These instructions update the flags ZF, CF, SF, and OF in such a\nmanner that subsequent instructions can interpret the results of the\narithmetic as either signed or unsigned. CF contains information relevant to\nunsigned integers; SF and OF contain information relevant to signed\nintegers. ZF is relevant to both signed and unsigned integers; ZF is set\nwhen all bits of the result are zero.\n\nIf the integer is unsigned, CF may be tested after one of these arithmetic\noperations to determine whether the operation required a carry or borrow of\na one-bit in the high-order position of the destination operand. CF is set\nif a one-bit was carried out of the high-order position (addition\ninstructions ADD, ADC, AAA, and DAA) or if a one-bit was carried (i.e.\nborrowed) into the high-order bit (subtraction instructions SUB, SBB, AAS,\nDAS, CMP, and NEG).\n\nIf the integer is signed, both SF and OF should be tested. SF always has\nthe same value as the sign bit of the result. The most significant bit (MSB)\nof a signed integer is the bit next to the signbit 6 of a byte, bit 14 of\na word, or bit 30 of a doubleword. OF is set in either of these cases:\n\n    A one-bit was carried out of the MSB into the sign bit but no one bit\n     was carried out of the sign bit (addition instructions ADD, ADC, INC,\n     AAA, and DAA). In other words, the result was greater than the greatest\n     positive number that could be contained in the destination operand.\n\n    A one-bit was carried from the sign bit into the MSB but no one bit\n     was carried into the sign bit (subtraction instructions SUB, SBB, DEC,\n     AAS, DAS, CMP, and NEG). In other words, the result was smaller that\n     the smallest negative number that could be contained in the destination\n     operand.\n\nThese status flags are tested by executing one of the two families of\nconditional instructions: Jcc (jump on condition cc) or SETcc (byte set on\ncondition).\n\n\n3.2.1  Addition and Subtraction Instructions\n\nADD (Add Integers) replaces the destination operand with the sum of the\nsource and destination operands. Sets CF if overflow.\n\nADC (Add Integers with Carry) sums the operands, adds one if CF is set, and\nreplaces the destination operand with the result. If CF is cleared, ADC\nperforms the same operation as the ADD instruction. An ADD followed by\nmultiple ADC instructions can be used to add numbers longer than 32 bits.\n\nINC (Increment) adds one to the destination operand. INC does not affect\nCF. Use ADD with an immediate value of 1 if an increment that updates carry\n(CF) is needed.\n\nSUB (Subtract Integers) subtracts the source operand from the destination\noperand and replaces the destination operand with the result. If a borrow is\nrequired, the CF is set. The operands may be signed or unsigned bytes,\nwords, or doublewords.\n\nSBB (Subtract Integers with Borrow) subtracts the source operand from the\ndestination operand, subtracts 1 if CF is set, and returns the result to the\ndestination operand. If CF is cleared, SBB performs the same operation as\nSUB. SUB followed by multiple SBB instructions may be used to subtract\nnumbers longer than 32 bits. If CF is cleared, SBB performs the same\noperation as SUB.\n\nDEC (Decrement) subtracts 1 from the destination operand. DEC does not\nupdate CF. Use SUB with an immediate value of 1 to perform a decrement that\naffects carry.\n\n\n3.2.2  Comparison and Sign Change Instruction\n\nCMP (Compare) subtracts the source operand from the destination operand. It\nupdates OF, SF, ZF, AF, PF, and CF but does not alter the source and\ndestination operands. A subsequent Jcc or SETcc instruction can test the\nappropriate flags.\n\nNEG (Negate) subtracts a signed integer operand from zero. The effect of\nNEG is to reverse the sign of the operand from positive to negative or from\nnegative to positive.\n\n\n3.2.3  Multiplication Instructions\n\nThe 80386 has separate multiply instructions for unsigned and signed\noperands. MUL operates on unsigned numbers, while IMUL operates on signed\nintegers as well as unsigned.\n\nMUL (Unsigned Integer Multiply) performs an unsigned multiplication of the\nsource operand and the accumulator. If the source is a byte, the processor\nmultiplies it by the contents of AL and returns the double-length result to\nAH and AL. If the source operand is a word, the processor multiplies it by\nthe contents of AX and returns the double-length result to DX and AX. If the\nsource operand is a doubleword, the processor multiplies it by the contents\nof EAX and returns the 64-bit result in EDX and EAX. MUL sets CF and OF\nwhen the upper half of the result is nonzero; otherwise, they are cleared.\n\nIMUL (Signed Integer Multiply) performs a signed multiplication operation.\nIMUL has three variations:\n\n  1.  A one-operand form. The operand may be a byte, word, or doubleword\n      located in memory or in a general register. This instruction uses EAX\n      and EDX as implicit operands in the same way as the MUL instruction.\n\n  2.  A two-operand form. One of the source operands may be in any general\n      register while the other may be either in memory or in a general\n      register. The product replaces the general-register operand.\n\n  3.  A three-operand form; two are source and one is the destination\n      operand. One of the source operands is an immediate value stored in\n      the instruction; the second may be in memory or in any general\n      register. The product may be stored in any general register. The\n      immediate operand is treated as signed. If the immediate operand is a\n      byte, the processor automatically sign-extends it to the size of the\n      second operand before performing the multiplication.\n\nThe three forms are similar in most respects:\n\n    The length of the product is calculated to twice the length of the\n     operands.\n\n    The CF and OF flags are set when significant bits are carried into the\n     high-order half of the result. CF and OF are cleared when the\n     high-order half of the result is the sign-extension of the low-order\n     half.\n\nHowever, forms 2 and 3 differ in that the product is truncated to the\nlength of the operands before it is stored in the destination register.\nBecause of this truncation, OF should be tested to ensure that no\nsignificant bits are lost. (For ways to test OF, refer to the INTO and PUSHF\ninstructions.)\n\nForms 2 and 3 of IMUL may also be used with unsigned operands because,\nwhether the operands are signed or unsigned, the low-order half of the\nproduct is the same.\n\n\n3.2.4  Division Instructions\n\nThe 80386 has separate division instructions for unsigned and signed\noperands. DIV operates on unsigned numbers, while IDIV operates on signed\nintegers as well as unsigned. In either case, an exception (interrupt zero)\noccurs if the divisor is zero or if the quotient is too large for AL, AX, or\nEAX.\n\nDIV (Unsigned Integer Divide) performs an unsigned division of the\naccumulator by the source operand. The dividend (the accumulator) is twice\nthe size of the divisor (the source operand); the quotient and remainder\nhave the same size as the divisor, as the following table shows.\n\nSize of Source Operand\n      (divisor)             Dividend       Quotient      Remainder\n\nByte                        AX             AL            AH\nWord                        DX:AX          AX            DX\nDoubleword                  EDX:EAX        EAX           EDX\n\nNon-integral quotients are truncated to integers toward 0. The remainder is\nalways less than the divisor. For unsigned byte division, the largest\nquotient is 255. For unsigned word division, the largest quotient is 65,535.\nFor unsigned doubleword division the largest quotient is 2^(32) -1.\n\nIDIV (Signed Integer Divide) performs a signed division of the accumulator\nby the source operand. IDIV uses the same registers as the DIV instruction.\n\nFor signed byte division, the maximum positive quotient is +127, and the\nminimum negative quotient is -128. For signed word division, the maximum\npositive quotient is +32,767, and the minimum negative quotient is -32,768.\nFor signed doubleword division the maximum positive quotient is 2^(31) -1,\nthe minimum negative quotient is -2^(31). Non-integral results are truncated\ntowards 0. The remainder always has the same sign as the dividend and is\nless than the divisor in magnitude.\n\n\n3.3  Decimal Arithmetic Instructions\n\nDecimal arithmetic is performed by combining the binary arithmetic\ninstructions (already discussed in the prior section) with the decimal\narithmetic instructions. The decimal arithmetic instructions are used in one\nof the following ways:\n\n    To adjust the results of a previous binary arithmetic operation to\n     produce a valid packed or unpacked decimal result.\n\n    To adjust the inputs to a subsequent binary arithmetic operation so\n     that the operation will produce a valid packed or unpacked decimal\n     result.\n\nThese instructions operate only on the AL or AH registers. Most utilize the\nAF flag.\n\n\n3.3.1  Packed BCD Adjustment Instructions\n\nDAA (Decimal Adjust after Addition) adjusts the result of adding two valid\npacked decimal operands in AL. DAA must always follow the addition of two\npairs of packed decimal numbers (one digit in each half-byte) to obtain a\npair of valid packed decimal digits as results. The carry flag is set if\ncarry was needed.\n\nDAS (Decimal Adjust after Subtraction) adjusts the result of subtracting\ntwo valid packed decimal operands in AL. DAS must always follow the\nsubtraction of one pair of packed decimal numbers (one digit in each half-\nbyte) from another to obtain a pair of valid packed decimal digits as\nresults. The carry flag is set if a borrow was needed.\n\n\n3.3.2  Unpacked BCD Adjustment Instructions\n\nAAA (ASCII Adjust after Addition) changes the contents of register AL to a\nvalid unpacked decimal number, and zeros the top 4 bits. AAA must always\nfollow the addition of two unpacked decimal operands in AL. The carry flag\nis set and AH is incremented if a carry is necessary.\n\nAAS (ASCII Adjust after Subtraction) changes the contents of register AL to\na valid unpacked decimal number, and zeros the top 4 bits. AAS must always\nfollow the subtraction of one unpacked decimal operand from another in AL.\nThe carry flag is set and AH decremented if a borrow is necessary.\n\nAAM (ASCII Adjust after Multiplication) corrects the result of a\nmultiplication of two valid unpacked decimal numbers. AAM must always follow\nthe multiplication of two decimal numbers to produce a valid decimal result.\nThe high order digit is left in AH, the low order digit in AL.\n\nAAD (ASCII Adjust before Division) modifies the numerator in AH and AL to\nprepare for the division of two valid unpacked decimal operands so that the\nquotient produced by the division will be a valid unpacked decimal number.\nAH should contain the high-order digit and AL the low-order digit. This\ninstruction adjusts the value and places the result in AL. AH will contain\nzero.\n\n\n3.4  Logical Instructions\n\nThe group of logical instructions includes:\n\n    The Boolean operation instructions\n    Bit test and modify instructions\n    Bit scan instructions\n    Rotate and shift instructions\n    Byte set on condition\n\n\n3.4.1  Boolean Operation Instructions\n\nThe logical operations are AND, OR, XOR, and NOT.\n\nNOT (Not) inverts the bits in the specified operand to form a one's\ncomplement of the operand. The NOT instruction is a unary operation that\nuses a single operand in a register or memory. NOT has no effect on the\nflags.\n\nThe AND, OR, and XOR instructions perform the standard logical operations\n\"and\", \"(inclusive) or\", and \"exclusive or\". These instructions can use the\nfollowing combinations of operands:\n\n    Two register operands\n\n    A general register operand with a memory operand\n\n    An immediate operand with either a general register operand or a\n     memory operand.\n\nAND, OR, and XOR clear OF and CF, leave AF undefined, and update SF, ZF,\nand PF.\n\n\n3.4.2  Bit Test and Modify Instructions\n\nThis group of instructions operates on a single bit which can be in memory\nor in a general register. The location of the bit is specified as an offset\nfrom the low-order end of the operand. The value of the offset either may be\ngiven by an immediate byte in the instruction or may be contained in a\ngeneral register.\n\nThese instructions first assign the value of the selected bit to CF, the\ncarry flag. Then a new value is assigned to the selected bit, as determined\nby the operation. OF, SF, ZF, AF, PF are left in an undefined state. Table\n3-1 defines these instructions.\n\n\nTable 3-1. Bit Test and Modify Instructions\n\nInstruction                      Effect on CF            Effect on\n                                                         Selected Bit\n\nBit (Bit Test)                   CF \u001b BIT                (none)\nBTS (Bit Test and Set)           CF \u001b BIT                BIT \u001b 1\nBTR (Bit Test and Reset)         CF \u001b BIT                BIT \u001b 0\nBTC (Bit Test and Complement)    CF \u001b BIT                BIT \u001b NOT(BIT)\n\n\n3.4.3  Bit Scan Instructions\n\nThese instructions scan a word or doubleword for a one-bit and store the\nindex of the first set bit into a register.  The bit string being scanned\nmay be either in a register or in memory. The ZF flag is set if the entire\nword is zero (no set bits are found); ZF is cleared if a one-bit is found.\nIf no set bit is found, the value of the destination register is undefined.\n\nBSF (Bit Scan Forward) scans from low-order to high-order (starting from\nbit index zero).\n\nBSR (Bit Scan Reverse) scans from high-order to low-order (starting from\nbit index 15 of a word or index 31 of a doubleword).\n\n\n3.4.4  Shift and Rotate Instructions\n\nThe shift and rotate instructions reposition the bits within the specified\noperand.\n\nThese instructions fall into the following classes:\n\n    Shift instructions\n    Double shift instructions\n    Rotate instructions\n\n\n3.4.4.1  Shift Instructions\n\nThe bits in bytes, words, and doublewords may be shifted arithmetically or\nlogically. Depending on the value of a specified count, bits can be shifted\nup to 31 places.\n\nA shift instruction can specify the count in one of three ways. One form of\nshift instruction implicitly specifies the count as a single shift. The\nsecond form specifies the count as an immediate value. The third form\nspecifies the count as the value contained in CL. This last form allows the\nshift count to be a variable that the program supplies during execution.\nOnly the low order 5 bits of CL are used.\n\nCF always contains the value of the last bit shifted out of the destination\noperand. In a single-bit shift, OF is set if the value of the high-order\n(sign) bit was changed by the operation. Otherwise, OF is cleared. Following\na multibit shift, however, the content of OF is always undefined.\n\nThe shift instructions provide a convenient way to accomplish division or\nmultiplication by binary power. Note however that division of signed numbers\nby shifting right is not the same kind of division performed by the IDIV\ninstruction.\n\nSAL (Shift Arithmetic Left) shifts the destination byte, word, or\ndoubleword operand left by one or by the number of bits specified in the\ncount operand (an immediate value or the value contained in CL). The\nprocessor shifts zeros in from the right (low-order) side of the operand as\nbits exit from the left (high-order) side. See Figure 3-6.\n\nSHL (Shift Logical Left) is a synonym for SAL (refer to SAL).\n\nSHR (Shift Logical Right) shifts the destination byte, word, or doubleword\noperand right by one or by the number of bits specified in the count operand\n(an immediate value or the value contained in CL). The processor shifts\nzeros in from the left side of the operand as bits exit from the right side.\nSee Figure 3-7.\n\nSAR (Shift Arithmetic Right) shifts the destination byte, word, or\ndoubleword operand to the right by one or by the number of bits specified in\nthe count operand (an immediate value or the value contained in CL). The\nprocessor preserves the sign of the operand by shifting in zeros on the left\n(high-order) side if the value is positive or by shifting by ones if the\nvalue is negative. See Figure 3-8.\n\nEven though this instruction can be used to divide integers by a power of\ntwo, the type of division is not the same as that produced by the IDIV\ninstruction. The quotient of IDIV is rounded toward zero, whereas the\n\"quotient\" of SAR is rounded toward negative infinity. This difference is\napparent only for negative numbers. For example, when IDIV is used to divide\n-9 by 4, the result is -2 with a remainder of -1. If SAR is used to shift\n-9 right by two bits, the result is -3. The \"remainder\" of this kind of\ndivision is +3; however, the SAR instruction stores only the high-order bit\nof the remainder (in CF).\n\nThe code sequence in Figure 3-9 produces the same result as IDIV for any M\n= 2^(N), where 0 < N < 32. This sequence takes about 12 to 18 clocks,\ndepending on whether the jump is taken; if ECX contains M, the corresponding\nIDIV ECX instruction will take about 43 clocks.\n\n\nFigure 3-6.  SAL and SHL\n\n                     OF   CF                OPERAND\n\n       BEFORE SHL    X    X     10001000100010001000100010001111\n       OR SAL\n\n       AFTER SHL     1    1 \u0011 00010001000100010001000100011110 \u0011 0\n       OR SAL BY 1\n\n       AFTER SHL     X    0 \u0011 00100010001000100011110000000000 \u0011 0\n       OR SAL BY 10\n\nSHL (WHICH HAS THE SYNONYM SAL) SHIFTS THE BITS IN THE REGISTER OR MEMORY\nOPERAND TO THE LEFT BY THE SPECIFIED NUMBER OF BIT POSITIONS. CF RECEIVES\nTHE LAST BIT SHIFTED OUT OF THE LEFT OF THE OPERAND. SHL SHIFTS IN ZEROS\nTO FILL THE VACATED BIT LOCATIONS. THESE INSTRUCTIONS OPERATE ON BYTE,\nWORD, AND DOUBLEWORD OPERANDS.\n\n\nFigure 3-7.  SHR\n\n                                      OPERAND                  CF\n\n       BEFORE SHR         10001000100010001000100010001111     X\n\n       AFTER SHR    0\u001001000100010001000100010001000111\u00101\n       BY 1\n\n       AFTER SHR    0\u001000000000001000100010001000100010\u0010O\n       BY 10\n\nSHR SHIFTS THE BITS OF THE REGISTER OR MEMORY OPERAND TO THE RIGHT BY THE\nSPECIFIED NUMBER OF BIT POSITIONS. CF RECEIVES THE LAST BIT SHIFTED OUT OF\nTHE RIGHT OF THE OPERAND. SHR SHIFTS IN ZEROS TO FILL THE VACATED BIT\nLOCATIONS.\n\n\nFigure 3-8.  SAR\n\n                                  POSITIVE OPERAND             CF\n\n       BEFORE SAR         01000100010001000100010001000111     X\n\n       AFTER SAR    0\u001000100010001000100010001000100011\u00101\n       BY 1\n\n                                  NEGATIVE OPERAND             CF\n\n       BEFORE SAR         11000100010001000100010001000111     X\n\n       AFTER SAR    0\u001011100010001000100010001000100011\u00101\n       BY 1\n\nSAR PRESERVES THE SIGN OF THE REGISTER OR MEMORY OPERAND AS IT SHIFTS THE\nOPERAND TO THE RIGHT BY THE SPECIFIED NUMBER OF BIT POSITIONS. CF RECIEVES\nTHE LAST BIT SHIFTED OUT OF THE RIGHT OF THE OPERAND.\n\n\nFigure 3-9.  Using SAR to Simulate IDIV\n\n    ; assuming N is in ECX, and the dividend is in EAX\n    ;                                               CLOCKS\n    CMP     EAX, 0      ; to set sign flag          2\n    JGE     NoAdjust    ; jump if sign is zero      3 or 9\n    ADD     EAX, ECX    ;                           2\n    DEC     EAX         ; EAX := EAX + (N-1)        2\nNoAdjust:\n    SAR     EAX, CL     ;                           3\n    ;                       TOTAL CLOCKS           12 or 18]\n\n\n3.4.4.2  Double-Shift Instructions\n\nThese instructions provide the basic operations needed to implement\noperations on long unaligned bit strings. The double shifts operate either\non word or doubleword operands, as follows:\n\n  1.  Taking two word operands as input and producing a one-word output.\n\n  2.  Taking two doubleword operands as input and producing a doubleword\n      output.\n\nOf the two input operands, one may either be in a general register or in\nmemory, while the other may only be in a general register. The results\nreplace the memory or register operand. The number of bits to be shifted is\nspecified either in the CL register or in an immediate byte of the\ninstruction.\n\nBits are shifted from the register operand into the memory or register\noperand. CF is set to the value of the last bit shifted out of the\ndestination operand. SF, ZF, and PF are set according to the value of the\nresult. OF and AF are left undefined.\n\nSHLD (Shift Left Double) shifts bits of the R/M field to the left, while\nshifting high-order bits from the Reg field into the R/M field on the right\n(see Figure 3-10). The result is stored back into the R/M operand. The Reg\nfield is not modified.\n\nSHRD (Shift Right Double) shifts bits of the R/M field to the right, while\nshifting low-order bits from the Reg field into the R/M field on the left\n(see Figure 3-11). The result is stored back into the R/M operand. The Reg\nfield is not modified.\n\n\n3.4.4.3  Rotate Instructions\n\nRotate instructions allow bits in bytes, words, and doublewords to be\nrotated. Bits rotated out of an operand are not lost as in a shift, but are\n\"circled\" back into the other \"end\" of the operand.\n\nRotates affect only the carry and overflow flags. CF may act as an\nextension of the operand in two of the rotate instructions, allowing a bit\nto be isolated and then tested by a conditional jump instruction (JC or\nJNC). CF always contains the value of the last bit rotated out, even if the\ninstruction does not use this bit as an extension of the rotated operand.\n\nIn single-bit rotates, OF is set if the operation changes the high-order\n(sign) bit of the destination operand. If the sign bit retains its original\nvalue, OF is cleared. On multibit rotates, the value of OF is always\nundefined.\n\nROL (Rotate Left) rotates the byte, word, or doubleword destination operand\nleft by one or by the number of bits specified in the count operand (an\nimmediate value or the value contained in CL). For each rotation specified,\nthe high-order bit that exits from the left of the operand returns at the\nright to become the new low-order bit of the operand. See Figure 3-12.\n\nROR (Rotate Right) rotates the byte, word, or doubleword destination\noperand right by one or by the number of bits specified in the count operand\n(an immediate value or the value contained in CL). For each rotation\nspecified, the low-order bit that exits from the right of the operand\nreturns at the left to become the new high-order bit of the operand.\nSee Figure 3-13.\n\nRCL (Rotate Through Carry Left) rotates bits in the byte, word, or\ndoubleword destination operand left by one or by the number of bits\nspecified in the count operand (an immediate value or the value contained in\nCL).\n\nThis instruction differs from ROL in that it treats CF as a high-order\none-bit extension of the destination operand. Each high-order bit that exits\nfrom the left side of the operand moves to CF before it returns to the\noperand as the low-order bit on the next rotation cycle. See Figure 3-14.\n\nRCR (Rotate Through Carry Right) rotates bits in the byte, word, or\ndoubleword destination operand right by one or by the number of bits\nspecified in the count operand (an immediate value or the value contained in\nCL).\n\nThis instruction differs from ROR in that it treats CF as a low-order\none-bit extension of the destination operand. Each low-order bit that exits\nfrom the right side of the operand moves to CF before it returns to the\noperand as the high-order bit on the next rotation cycle. See Figure 3-15.\n\n\nFigure 3-10.  Shift Left Double\n\n                  31                   DESTINATION                 0\n    ͻ       ͻ\n     CF \u0011Ķ                 MEMORY OF REGISTER               \u0011Ŀ\n    ͼ       ͼ    \n             \n                 31                     SOURCE                    0\n                ͻ\n             Ķ                      REGISTER                    \n                 ͼ\n\n\nFigure 3-11.  Shift Right Double\n\n        31                     SOURCE                    0\n       ͻ\n                             REGISTER                    Ŀ\n       ͼ   \n   \n       31                   DESTINATION                 0\n      ͻ        ͻ\n   \u0010                 MEMORY OF REGISTER               \u0010 CF \n       ͼ        ͼ\n\n\nFigure 3-12.  ROL\n\n                  31                   DESTINATION                 0\n    ͻ       ͻ\n     CF \u0011Ķ                 MEMORY OF REGISTER               \u0011Ŀ\n    ͼ      ͼ   \n              \n\n\nFigure 3-13.  ROR\n\n     Ŀ\n         31                   DESTINATION                 0    \n        ͻ       ͻ\n     \u0010                 MEMORY OF REGISTER               \u0010 CF \n         ͼ        ͼ\n\n\nFigure 3-14.  RCL\n\n                  31                   DESTINATION                 0\n    ͻ       ͻ\n  Ķ CF \u0011Ķ                 MEMORY OF REGISTER               \u0011Ŀ\n   ͼ       ͼ   \n  \n\n\nFigure 3-15.  RCR\n\n   Ŀ\n       31                   DESTINATION                 0                \n      ͻ        ͻ \n   \u0010                 MEMORY OF REGISTER               \u0010 CF \n       ͼ        ͼ\n\n\n3.4.4.4  Fast \"BIT BLT\" Using Double Shift Instructions\n\nOne purpose of the double shifts is to implement a bit string move, with\narbitrary misalignment of the bit strings.  This is called a \"bit blt\" (BIT\nBLock Transfer.)  A simple example is to move a bit string from an arbitrary\noffset into a doubleword-aligned byte string.  A left-to-right string is\nmoved 32 bits at a time if a double shift is used inside the move loop.\n\n     MOV   ESI,ScrAddr\n     MOV   EDI,DestAddr\n     MOV   EBX,WordCnt\n     MOV   CL,RelOffset      ; relative offset Dest-Src\n     MOV   EDX,[ESI]         ; load first word of source\n     ADD   ESI,4             ; bump source address\nBltLoop:\n     LODS                    ; new low order part\n     SHLD  EDX,EAX,CL        ; EDX overwritten with aligned stuff\n     XCHG  EDX,EAS           ; Swap high/low order parts\n     STOS                    ; Write out next aligned chunk\n     DEC   EBX\n     JA    BltLoop\n\nThis loop is simple yet allows the data to be moved in 32-bit pieces for\nthe highest possible performance. Without a double shift, the best that can\nbe achieved is 16 bits per loop iteration by using a 32-bit shift and\nreplacing the XCHG with a ROR by 16 to swap high and low order parts of\nregisters. A more general loop than shown above would require some extra\nmasking on the first doubleword moved (before the main loop), and on the\nlast doubleword moved (after the main loop), but would have the same basic\n32-bits per loop iteration as the code above.\n\n\n3.4.4.5  Fast Bit-String Insert and Extract\n\nThe double shift instructions also enable:\n\n    Fast insertion of a bit string from a register into an arbitrary bit\n     location in a larger bit string in memory without disturbing the bits\n     on either side of the inserted bits.\n\n    Fast extraction of a bits string into a register from an arbitrary bit\n     location in a larger bit string in memory without disturbing the bits\n     on either side of the extracted bits.\n\nThe following coded examples illustrate bit insertion and extraction under\nvariousconditions:\n\n  1.  Bit String Insert into Memory (when bit string is 1-25 bits long,\n      i.e., spans four bytes or less):\n\n      ; Insert a right-justified bit string from register into\n      ; memory bit string.\n      ;\n      ; Assumptions:\n      ; 1) The base of the string array is dword aligned, and\n      ; 2) the length of the bit string is an immediate value\n      ;    but the bit offset is held in a register.\n      ;\n      ; Register ESI holds the right-justified bit string\n      ; to be inserted.\n      ; Register EDI holds the bit offset of the start of the\n      ; substring.\n      ; Registers EAX and ECX are also used by this\n      ; \"insert\" operation.\n      ;\n      MOV   ECX,EDI      ; preserve original offset for later use\n      SHR   EDI,3        ; signed divide offset by 8 (byte address)\n      AND   CL,7H        ; isolate low three bits of offset in CL\n      MOV   EAX,[EDI]strg_base      ; move string dword into EAX\n      ROR   EAX,CL       ; right justify old bit field\n      SHRD  EAX,ESI,length          ; bring in new bits\n      ROL   EAX,length   ; right justify new bit field\n      ROL   EAX,CL       ; bring to final position\n      MOV   [EDI]strg_base,EAX      ; replace dword in memory\n\n  2.  Bit String Insert into Memory (when bit string is 1-31 bits long, i.e.\n      spans five bytes or less):\n\n      ; Insert a right-justified bit string from register into\n      ; memory bit string.\n      ;\n      ; Assumptions:\n      ; 1) The base of the string array is dword aligned, and\n      ; 2) the length of the bit string is an immediate value\n      ;    but the bit offset is held in a register.\n      ;\n      ; Register ESI holds the right-justified bit string\n      ; to be inserted.\n      ; Register EDI holds the bit offset of the start of the\n      ; substring.\n      ; Registers EAX, EBX, ECX, and EDI are also used by\n      ; this \"insert\" operation.\n      ;\n      MOV   ECX,EDI     ; temp storage for offset\n      SHR   EDI,5       ; signed divide offset by 32 (dword address)\n      SHL   EDI,2       ; multiply by 4 (in byte address format)\n      AND   CL,1FH      ; isolate low five bits of offset in CL\n      MOV   EAX,[EDI]strg_base      ; move low string dword into EAX\n      MOV   EDX,[EDI]strg_base+4    ; other string dword into EDX\n      MOV   EBX,EAX     ; temp storage for part of string      rotate\n      SHRD  EAX,EDX,CL  ; double shift by offset within dword  EDX:EAX\n      SHRD  EAX,EBX,CL  ; double shift by offset within dword  right\n      SHRD  EAX,ESI,length          ; bring in new bits\n      ROL   EAX,length  ; right justify new bit field\n      MOV   EBX,EAX     ; temp storage for part of string          rotate\n      SHLD  EAX,EDX,CL  ; double shift back by offset within word  EDX:EAX\n      SHLD  EDX,EBX,CL  ; double shift back by offset within word  left\n      MOV   [EDI]strg_base,EAX      ; replace dword in memory\n      MOV   [EDI]strg_base+4,EDX    ; replace dword in memory\n\n  3.  Bit String Insert into Memory (when bit string is exactly 32 bits\n      long, i.e., spans five or four types of memory):\n\n      ; Insert right-justified bit string from register into\n      ; memory bit string.\n      ;\n      ; Assumptions:\n      ; 1) The base of the string array is dword aligned, and\n      ; 2) the length of the bit string is 32\n      ;    but the bit offset is held in a register.\n      ;\n      ; Register ESI holds the 32-bit string to be inserted.\n      ; Register EDI holds the bit offset of the start of the\n      ; substring.\n      ; Registers EAX, EBX, ECX, and EDI are also used by\n      ; this \"insert\" operation.\n      ;\n      MOV   EDX,EDI     ; preserve original offset for later use\n      SHR   EDI,5       ; signed divide offset by 32 (dword address)\n      SHL   EDI,2       ; multiply by 4 (in byte address format)\n      AND   CL,1FH      ; isolate low five bits of offset in CL\n      MOV   EAX,[EDI]strg_base      ; move low string dword into EAX\n      MOV   EDX,[EDI]strg_base+4    ; other string dword into EDX\n      MOV   EBX,EAX     ; temp storage for part of string      rotate\n      SHRD  EAX,EDX     ; double shift by offset within dword  EDX:EAX\n      SHRD  EDX,EBX     ; double shift by offset within dword  right\n      MOV   EAX,ESI     ; move 32-bit bit field into position\n      MOV   EBX,EAX     ; temp storage for part of string          rotate\n      SHLD  EAX,EDX     ; double shift back by offset within word  EDX:EAX\n      SHLD  EDX,EBX     ; double shift back by offset within word  left\n      MOV   [EDI]strg_base,EAX      ; replace dword in memory\n      MOV   [EDI]strg_base,+4,EDX   ; replace dword in memory\n\n  4.  Bit String Extract from Memory (when bit string is 1-25 bits long,\n      i.e., spans four bytes or less):\n\n      ; Extract a right-justified bit string from memory bit\n      ; string into register\n      ;\n      ; Assumptions:\n      ; 1) The base of the string array is dword aligned, and\n      ; 2) the length of the bit string is an immediate value\n      ;    but the bit offset is held in a register.\n      ;\n      ; Register EAX holds the right-justified, zero-padded\n      ; bit string that was extracted.\n      ; Register EDI holds the bit offset of the start of the\n      ; substring.\n      ; Registers EDI, and ECX are also used by this \"extract.\"\n      ;\n      MOV  ECX,EDI      ; temp storage for offset\n      SHR  EDI,3        ; signed divide offset by 8 (byte address)\n      AND  CL,7H        ; isolate low three bits of offset\n      MOV  EAX,[EDI]strg_base       ; move string dword into EAX\n      SHR  EAX,CL       ; shift by offset within dword\n      AND  EAX,mask     ; extracted bit field in EAX\n\n  5.  Bit String Extract from Memory (when bit string is 1-32 bits long, \n      i.e., spans five bytes or less):\n\n      ; Extract a right-justified bit string from memory bit\n      ; string into register.\n      ;\n      ; Assumptions:\n      ; 1) The base of the string array is dword aligned, and\n      ; 2) the length of the bit string is an immediate\n      ;    value but the bit offset is held in a register.\n      ;\n      ; Register EAX holds the right-justified, zero-padded\n      ; bit string that was extracted.\n      ; Register EDI holds the bit offset of the start of the\n      ; substring.\n      ; Registers EAX, EBX, and ECX are also used by this \"extract.\"\n      MOV   ECX,EDI     ; temp storage for offset\n      SHR   EDI,5       ; signed divide offset by 32 (dword address)\n      SHL   EDI,2       ; multiply by 4 (in byte address format)\n      AND   CL,1FH      ; isolate low five bits of offset in CL\n      MOV   EAX,[EDI]strg_base      ; move low string dword into EAX\n      MOV   EDX,[EDI]strg_base+4    ; other string dword into EDX\n      SHRD  EAX,EDX,CL  ; double shift right by offset within dword\n      AND   EAX,mask    ; extracted bit field in EAX\n\n\n3.4.5  Byte-Set-On-Condition Instructions\n\nThis group of instructions sets a byte to zero or one depending on any of\nthe 16 conditions defined by the status flags. The byte may be in memory or\nmay be a one-byte general register. These instructions are especially useful\nfor implementing Boolean expressions in high-level languages such as Pascal.\n\nSETcc (Set Byte on Condition cc) set a byte to one if condition cc is true;\nsets the byte to zero otherwise. Refer to Appendix D for a definition of\nthe possible conditions.\n\n\n3.4.6  Test Instruction\n\nTEST (Test) performs the logical \"and\" of the two operands, clears OF and\nCF, leaves AF undefined, and updates SF, ZF, and PF. The flags can be tested\nby conditional control transfer instructions or by the byte-set-on-condition\ninstructions. The operands may be doublewords, words, or bytes.\n\nThe difference between TEST and AND is that TEST does not alter the\ndestination operand. TEST differs from BT in that TEST is useful for testing\nthe value of multiple bits in one operations, whereas BT tests a single bit.\n\n\n3.5  Control Transfer Instructions\n\nThe 80386 provides both conditional and unconditional control transfer\ninstructions to direct the flow of execution. Conditional control transfers\ndepend on the results of operations that affect the flag register.\nUnconditional control transfers are always executed.\n\n\n3.5.1  Unconditional Transfer Instructions\n\nJMP, CALL, RET, INT and IRET instructions transfer control from one code\nsegment location to another. These locations can be within the same code\nsegment (near control transfers) or in different code segments (far control\ntransfers). The variants of these instructions that transfer control to\nother segments are discussed in a later section of this chapter. If the\nmodel of memory organization used in a particular 80386 application does\nnot make segments visible to applications programmers, intersegment control\ntransfers will not be used.\n\n\n3.5.1.1  Jump Instruction\n\nJMP (Jump) unconditionally transfers control to the target location. JMP is\na one-way transfer of execution; it does not save a return address on the\nstack.\n\nThe JMP instruction always performs the same basic function of transferring\ncontrol from the current location to a new location. Its implementation\nvaries depending on whether the address is specified directly within the\ninstruction or indirectly through a register or memory.\n\nA direct JMP instruction includes the destination address as part of the\ninstruction. An indirect JMP instruction obtains the destination address\nindirectly through a register or a pointer variable.\n\nDirect near JMP. A direct JMP uses a relative displacement value contained\nin the instruction. The displacement is signed and the size of the\ndisplacement may be a byte, word, or doubleword. The processor forms an\neffective address by adding this relative displacement to the address\ncontained in EIP. When the additions have been performed, EIP refers to the\nnext instruction to be executed.\n\nIndirect near JMP. Indirect JMP instructions specify an absolute address in\none of several ways:\n\n  1.  The program can JMP to a location specified by a general register\n      (any of EAX, EDX, ECX, EBX, EBP, ESI, or EDI). The processor moves\n      this 32-bit value into EIP and resumes execution.\n\n  2.  The processor can obtain the destination address from a memory\n      operand specified in the instruction.\n\n  3.  A register can modify the address of the memory pointer to select a\n      destination address.\n\n\n3.5.1.2  Call Instruction\n\nCALL (Call Procedure) activates an out-of-line procedure, saving on the\nstack the address of the instruction following the CALL for later use by a\nRET (Return) instruction. CALL places the current value of EIP on the stack.\nThe RET instruction in the called procedure uses this address to transfer\ncontrol back to the calling program.\n\nCALL instructions, like JMP instructions have relative, direct, and\nindirect versions.\n\nIndirect CALL instructions specify an absolute address in one of these\nways:\n\n  1.  The program can CALL a location specified by a general register (any\n      of EAX, EDX, ECX, EBX, EBP, ESI, or EDI). The processor moves this\n      32-bit value into EIP.\n\n  2.  The processor can obtain the destination address from a memory\n      operand specified in the instruction.\n\n\n3.5.1.3  Return and Return-From-Interrupt Instruction\n\nRET (Return From Procedure) terminates the execution of a procedure and\ntransfers control through a back-link on the stack to the program that\noriginally invoked the procedure. RET restores the value of EIP that was\nsaved on the stack by the previous CALL instruction.\n\nRET instructions may optionally specify an immediate operand. By adding\nthis constant to the new top-of-stack pointer, RET effectively removes any\narguments that the calling program pushed on the stack before the execution\nof the CALL instruction.\n\nIRET (Return From Interrupt) returns control to an interrupted procedure.\nIRET differs from RET in that it also pops the flags from the stack into the\nflags register. The flags are stored on the stack by the interrupt\nmechanism.\n\n\n3.5.2  Conditional Transfer Instructions\n\nThe conditional transfer instructions are jumps that may or may not\ntransfer control, depending on the state of the CPU flags when the\ninstruction executes.\n\n\n3.5.2.1  Conditional Jump Instructions\n\nTable 3-2 shows the conditional transfer mnemonics and their\ninterpretations. The conditional jumps that are listed as pairs are actually\nthe same instruction. The assembler provides the alternate mnemonics for\ngreater clarity within a program listing.\n\nConditional jump instructions contain a displacement which is added to the\nEIP register if the condition is true. The displacement may be a byte, a\nword, or a doubleword. The displacement is signed; therefore, it can be used\nto jump forward or backward.\n\n\nTable 3-2. Interpretation of Conditional Transfers\n\nUnsigned Conditional Transfers\n\nMnemonic         Condition Tested          \"Jump If...\"\n\nJA/JNBE           (CF or ZF) = 0           above/not below nor equal\nJAE/JNB           CF = 0                   above or equal/not below\nJB/JNAE           CF = 1                   below/not above nor equal\nJBE/JNA           (CF or ZF) = 1           below or equal/not above\nJC                CF = 1                   carry\nJE/JZ             ZF = 1                   equal/zero\nJNC               CF = 0                   not carry\nJNE/JNZ           ZF = 0                   not equal/not zero\nJNP/JPO           PF = 0                   not parity/parity odd\nJP/JPE            PF = 1                   parity/parity even\n\nSigned Conditional Transfers\n\nMnemonic         Condition Tested          \"Jump If...\"\nJG/JNLE          ((SF xor OF) or ZF) = 0   greater/not less nor equal\nJGE/JNL          (SF xor OF) = 0           greater or equal/not less\nJL/JNGE          (SF xor OF) = 1           less/not greater nor equal\nJLE/JNG          ((SF xor OF) or ZF) = 1   less or equal/not greater\nJNO              OF = 0                    not overflow\nJNS              SF = 0                    not sign (positive, including 0)\nJO               OF = 1                    overflow\nJS               SF = 1                    sign (negative)\n\n\n3.5.2.2  Loop Instructions\n\nThe loop instructions are conditional jumps that use a value placed in ECX\nto specify the number of repetitions of a software loop. All loop\ninstructions automatically decrement ECX and terminate the loop when ECX=0.\nFour of the five loop instructions specify a condition involving ZF that\nterminates the loop before ECX reaches zero.\n\nLOOP (Loop While ECX Not Zero) is a conditional transfer that automatically\ndecrements the ECX register before testing ECX for the branch condition. If\nECX is non-zero, the program branches to the target label specified in the\ninstruction. The LOOP instruction causes the repetition of a code section\nuntil the operation of the LOOP instruction decrements ECX to a value of\nzero. If LOOP finds ECX=0, control transfers to the instruction immediately\nfollowing the LOOP instruction. If the value of ECX is initially zero, then\nthe LOOP executes 2^(32) times.\n\nLOOPE (Loop While Equal) and LOOPZ (Loop While Zero) are synonyms for the\nsame instruction. These instructions automatically decrement the ECX\nregister before testing ECX and ZF for the branch conditions. If ECX is\nnon-zero and ZF=1, the program branches to the target label specified in the\ninstruction. If LOOPE or LOOPZ finds that ECX=0 or ZF=0, control transfers\nto the instruction immediately following the LOOPE or LOOPZ instruction.\n\nLOOPNE (Loop While Not Equal) and LOOPNZ (Loop While Not Zero) are synonyms\nfor the same instruction. These instructions automatically decrement the ECX\nregister before testing ECX and ZF for the branch conditions. If ECX is\nnon-zero and ZF=0, the program branches to the target label specified in the\ninstruction. If LOOPNE or LOOPNZ finds that ECX=0 or ZF=1, control transfers\nto the instruction immediately following the LOOPNE or LOOPNZ instruction.\n\n\n3.5.2.3  Executing a Loop or Repeat Zero Times\n\nJCXZ (Jump if ECX Zero) branches to the label specified in the instruction\nif it finds a value of zero in ECX. JCXZ is useful in combination with the\nLOOP instruction and with the string scan and compare instructions, all of\nwhich decrement ECX. Sometimes, it is desirable to design a loop that\nexecutes zero times if the count variable in ECX is initialized to zero.\nBecause the LOOP instructions (and repeat prefixes) decrement ECX before\nthey test it, a loop will execute 2^(32) times if the program enters the\nloop with a zero value in ECX. A programmer may conveniently overcome this\nproblem with JCXZ, which enables the program to branch around the code\nwithin the loop if ECX is zero when JCXZ executes. When used with repeated\nstring scan and compare instructions, JCXZ can determine whether the\nrepetitions terminated due to zero in ECX or due to satisfaction of the\nscan or compare conditions.\n\n\n3.5.3  Software-Generated Interrupts\n\nThe INT n, INTO, and BOUND instructions allow the programmer to specify a\ntransfer to an interrupt service routine from within a program.\n\nINT n (Software Interrupt) activates the interrupt service routine that\ncorresponds to the number coded within the instruction. The INT instruction\nmay specify any interrupt type. Programmers may use this flexibility to\nimplement multiple types of internal interrupts or to test the operation of\ninterrupt service routines. (Interrupts 0-31 are reserved by Intel.) The\ninterrupt service routine terminates with an IRET instruction that returns\ncontrol to the instruction that follows INT.\n\nINTO (Interrupt on Overflow) invokes interrupt 4 if OF is set. Interrupt 4\nis reserved for this purpose. OF is set by several arithmetic, logical, and\nstring instructions.\n\nBOUND (Detect Value Out of Range) verifies that the signed value contained\nin the specified register lies within specified limits. An interrupt (INT 5)\noccurs if the value contained in the register is less than the lower bound\nor greater than the upper bound.\n\nThe BOUND instruction includes two operands. The first operand specifies\nthe register being tested. The second operand contains the effective\nrelative address of the two signed BOUND limit values. The BOUND instruction\nassumes that the upper limit and lower limit are in adjacent memory\nlocations. These limit values cannot be register operands; if they are, an\ninvalid opcode exception occurs.\n\nBOUND is useful for checking array bounds before using a new index value to\naccess an element within the array. BOUND provides a simple way to check the\nvalue of an index register before the program overwrites information in a\nlocation beyond the limit of the array.\n\nThe block of memory that specifies the lower and upper limits of an array\nmight typically reside just before the array itself. This makes the array\nbounds accessible at a constant offset from the beginning of the array.\nBecause the address of the array will already be present in a register, this\npractice avoids extra calculations to obtain the effective address of the\narray bounds.\n\nThe upper and lower limit values may each be a word or a doubleword.\n\n\n3.6  String and Character Translation Instructions\n\nThe instructions in this category operate on strings rather than on logical\nor numeric values. Refer also to the section on I/O for information about\nthe string I/O instructions (also known as block I/O).\n\nThe power of 80386 string operations derives from the following features of\nthe architecture:\n\n1.  A set of primitive string operations\n\n   MOVS    Move String\n   CMPS    Compare string\n   SCAS    Scan string\n   LODS    Load string\n   STOS    Store string\n\n2.  Indirect, indexed addressing, with automatic incrementing or\n    decrementing of the indexes.\n\n   Indexes:\n\n      ESI     Source index register\n      EDI     Destination index register\n\n   Control flag:\n\n      DF      Direction flag\n\n   Control flag instructions:\n\n      CLD     Clear direction flag instruction\n      STD     Set direction flag instruction\n\n3.  Repeat prefixes\n\n   REP           Repeat while ECX not xero\n   REPE/REPZ     Repeat while equal or zero\n   REPNE/REPNZ   Repeat while not equal or not zero\n\nThe primitive string operations operate on one element of a string. A\nstring element may be a byte, a word, or a doubleword. The string elements\nare addressed by the registers ESI and EDI. After every primitive operation\nESI and/or EDI are automatically updated to point to the next element of the\nstring. If the direction flag is zero, the index registers are incremented;\nif one, they are decremented. The amount of the increment or decrement is\n1, 2, or 4 depending on the size of the string element.\n\n\n3.6.1  Repeat Prefixes\n\nThe repeat prefixes REP (Repeat While ECX Not Zero), REPE/REPZ (Repeat\nWhile Equal/Zero), and REPNE/REPNZ (Repeat While Not Equal/Not Zero) specify\nrepeated operation of a string primitive. This form of iteration allows the\nCPU to process strings much faster than would be possible with a regular\nsoftware loop.\n\nWhen a primitive string operation has a repeat prefix, the operation is\nexecuted repeatedly, each time using a different element of the string. The\nrepetition terminates when one of the conditions specified by the prefix is\nsatisfied.\n\nAt each repetition of the primitive instruction, the string operation may\nbe suspended temporarily in order to handle an exception or external\ninterrupt. After the interruption, the string operation can be restarted\nagain where it left off. This method of handling strings allows operations\non strings of arbitrary length, without affecting interrupt response.\n\nAll three prefixes causes the hardware to automatically repeat the\nassociated string primitive until ECX=0. The differences among the repeat\nprefixes have to do with the second termination condition. REPE/REPZ and\nREPNE/REPNZ are used exclusively with the SCAS (Scan String) and CMPS\n(Compare String) primitives. When these prefixes are used, repetition of the\nnext instruction depends on the zero flag (ZF) as well as the ECX register.\nZF does not require initialization before execution of a repeated string\ninstruction, because both SCAS and CMPS set ZF according to the results of\nthe comparisons they make. The differences are summarized in the\naccompanying table.\n\nPrefix                      Termination         Termination\n                            Condition 1         Condition 2\n\nREP                           ECX = 0             (none)\nREPE/REPZ                     ECX = 0             ZF = 0\nREPNE/REPNZ                   ECX = 0             ZF = 1\n\n\n3.6.2  Indexing and Direction Flag Control\n\nThe addresses of the operands of string primitives are determined by the\nESI and EDI registers. ESI points to source operands. By default, ESI refers\nto a location in the segment indicated by the DS segment register. A\nsegment-override prefix may be used, however, to cause ESI to refer to CS,\nSS, ES, FS, or GS. EDI points to destination operands in the segment\nindicated by ES; no segment override is possible. The use of two different\nsegment registers in one instruction allows movement of strings between\ndifferent segments.\n\nThis use of ESI and DSI has led to the descriptive names source index and\ndestination index for the ESI and EDI registers, respectively. In all\ncases other than string instructions, however, the ESI and EDI registers may\nbe used as general-purpose registers.\n\nWhen ESI and EDI are used in string primitives, they are automatically\nincremented or decremented after to operation. The direction flag determines\nwhether they are incremented or decremented. The instruction CLD puts zero\nin DF, causing the index registers to be incremented; the instruction STD\nputs one in DF, causing the index registers to be decremented. Programmers\nshould always put a known value in DF before using string instructions in a\nprocedure.\n\n\n3.6.3  String Instructions\n\nMOVS (Move String) moves the string element pointed to by ESI to the\nlocation pointed to by EDI. MOVSB operates on byte elements, MOVSW operates\non word elements, and MOVSD operates on doublewords. The destination segment\nregister cannot be overridden by a segment override prefix, but the source\nsegment register can be overridden.\n\nThe MOVS instruction, when accompanied by the REP prefix, operates as a\nmemory-to-memory block transfer. To set up for this operation, the program\nmust initialize ECX and the register pairs ESI and EDI. ECX specifies the\nnumber of bytes, words, or doublewords in the block.\n\nIf DF=0, the program must point ESI to the first element of the source\nstring and point EDI to the destination address for the first element. If\nDF=1, the program must point these two registers to the last element of the\nsource string and to the destination address for the last element,\nrespectively.\n\nCMPS (Compare Strings) subtracts the destination string element (at ES:EDI)\nfrom the source string element (at ESI) and updates the flags AF, SF, PF, CF\nand OF. If the string elements are equal, ZF=1; otherwise, ZF=0. If DF=0,\nthe processor increments the memory pointers (ESI and EDI) for the two\nstrings. CMPSB compares bytes, CMPSW compares words, and CMPSD compares\ndoublewords. The segment register used for the source address can be changed\nwith a segment override prefix while the destination segment register\ncannot be overridden.\n\nSCAS (Scan String) subtracts the destination string element at ES:EDI from\nEAX, AX, or AL and updates the flags AF, SF, ZF, PF, CF and OF. If the\nvalues are equal, ZF=1; otherwise, ZF=0. If DF=0, the processor increments\nthe memory pointer (EDI) for the string. SCASB scans bytes; SCASW scans\nwords; SCASD scans doublewords. The destination segment register (ES) cannot\nbe overridden.\n\nWhen either the REPE or REPNE prefix modifies either the SCAS or CMPS\nprimitives, the processor compares the value of the current string element\nwith the value in EAX for doubleword elements, in AX for word elements, or\nin AL for byte elements. Termination of the repeated operation depends on\nthe resulting state of ZF as well as on the value in ECX.\n\nLODS (Load String) places the source string element at ESI into EAX for\ndoubleword strings, into AX for word strings, or into AL for byte strings.\nLODS increments or decrements ESI according to DF.\n\nSTOS (Store String) places the source string element from EAX, AX, or AL\ninto the string at ES:DSI. STOS increments or decrements EDI according to\nDF.\n\n\n3.7  Instructions for Block-Structured Languages\n\nThe instructions in this section provide machine-language support for\nfunctions normally found in high-level languages. These instructions include\nENTER and LEAVE, which simplify the programming of procedures.\n\nENTER (Enter Procedure) creates a stack frame that may be used to implement\nthe scope rules of block-structured high-level languages. A LEAVE\ninstruction at the end of a procedure complements an ENTER at the beginning\nof the procedure to simplify stack management and to control access to\nvariables for nested procedures.\n\nThe ENTER instruction includes two parameters. The first parameter\nspecifies the number of bytes of dynamic storage to be allocated on the\nstack for the routine being entered. The second parameter corresponds to the\nlexical nesting level (0-31) of the routine. (Note that the lexical level\nhas no relationship to either the protection privilege levels or to the I/O\nprivilege level.)\n\nThe specified lexical level determines how many sets of stack frame\npointers the CPU copies into the new stack frame from the preceding frame.\nThis list of stack frame pointers is sometimes called the display. The first\nword of the display is a pointer to the last stack frame. This pointer\nenables a LEAVE instruction to reverse the action of the previous ENTER\ninstruction by effectively discarding the last stack frame.\n\n   Example: ENTER 2048,3\n\n   Allocates 2048 bytes of dynamic storage on the stack and sets up pointers\n   to two previous stack frames in the stack frame that ENTER creates for\n   this procedure.\n\nAfter ENTER creates the new display for a procedure, it allocates the\ndynamic storage space for that procedure by decrementing ESP by the number\nof bytes specified in the first parameter. This new value of ESP serves as a\nstarting point for all PUSH and POP operations within that procedure.\n\nTo enable a procedure to address its display, ENTER leaves EBP pointing to\nthe beginning of the new stack frame. Data manipulation instructions that\nspecify EBP as a base register implicitly address locations within the stack\nsegment instead of the data segment.\n\nThe ENTER instruction can be used in two ways: nested and non-nested. If\nthe lexical level is 0, the non-nested form is used. Since the second\noperand is 0, ENTER pushes EBP, copies ESP to EBP and then subtracts the\nfirst operand from ESP. The nested form of ENTER occurs when the second\nparameter (lexical level) is not 0.\n\nFigure 3-16 gives the formal definition of ENTER.\n\nThe main procedure (with other procedures nested within) operates at the\nhighest lexical level, level 1. The first procedure it calls operates at the\nnext deeper lexical level, level 2. A level 2 procedure can access the\nvariables of the main program which are at fixed locations specified by the\ncompiler. In the case of level 1, ENTER allocates only the requested\ndynamic storage on the stack because there is no previous display to copy.\n\nA program operating at a higher lexical level calling a program at a lower\nlexical level requires that the called procedure should have access to the\nvariables of the calling program. ENTER provides this access through a\ndisplay that provides addressability to the calling program's stack frame.\n\nA procedure calling another procedure at the same lexical level implies\nthat they are parallel procedures and that the called procedure should not\nhave access to the variables of the calling procedure. In this case, ENTER\ncopies only that portion of the display from the calling procedure which\nrefers to previously nested procedures operating at higher lexical levels.\nThe new stack frame does not include the pointer for addressing the calling\nprocedure's stack frame.\n\nENTER treats a reentrant procedure as a procedure calling another procedure\nat the same lexical level. In this case, each succeeding iteration of the\nreentrant procedure can address only its own variables and the variables of\nthe calling procedures at higher lexical levels. A reentrant procedure can\nalways address its own variables; it does not require pointers to the stack\nframes of previous iterations.\n\nBy copying only the stack frame pointers of procedures at higher lexical\nlevels, ENTER makes sure that procedures access only those variables of\nhigher lexical levels, not those at parallel lexical levels (see Figure\n3-17). Figures 3-18 through 3-21 demonstrate the actions of the ENTER\ninstruction if the modules shown in Figure 3-17 were to call one another in\nalphabetic order.\n\nBlock-structured high-level languages can use the lexical levels defined by\nENTER to control access to the variables of previously nested procedures.\nReferring to Figure 3-17 for example, if PROCEDURE A calls PROCEDURE B\nwhich, in turn, calls PROCEDURE C, then PROCEDURE C will have access to the\nvariables of MAIN and PROCEDURE A, but not PROCEDURE B because they operate\nat the same lexical level. Following is the complete definition of access to\nvariables for Figure 3-17.\n\n  1.  MAIN PROGRAM has variables at fixed locations.\n\n  2.  PROCEDURE A can access only the fixed variables of MAIN.\n\n  3.  PROCEDURE B can access only the variables of PROCEDURE A and MAIN.\n      PROCEDURE B cannot access the variables of PROCEDURE C or PROCEDURE D.\n\n  4.  PROCEDURE C can access only the variables of PROCEDURE A and MAIN.\n      PROCEDURE C cannot access the variables of PROCEDURE B or PROCEDURE D.\n\n  5.  PROCEDURE D can access the variables of PROCEDURE C, PROCEDURE A, and\n      MAIN. PROCEDURE D cannot access the variables of PROCEDURE B.\n\nENTER at the beginning of the MAIN PROGRAM creates dynamic storage space\nfor MAIN but copies no pointers. The first and only word in the display\npoints to itself because there is no previous value for LEAVE to return to\nEBP. See Figure 3-18.\n\nAfter MAIN calls PROCEDURE A, ENTER creates a new display for PROCEDURE A\nwith the first word pointing to the previous value of EBP (BPM for LEAVE to\nreturn to the MAIN stack frame) and the second word pointing to the current\nvalue of EBP. Procedure A can access variables in MAIN since MAIN is at\nlevel 1. Therefore the base for the dynamic storage for MAIN is at [EBP-2].\nAll dynamic variables for MAIN are at a fixed offset from this value. See\nFigure 3-19.\n\nAfter PROCEDURE A calls PROCEDURE B, ENTER creates a new display for\nPROCEDURE B with the first word pointing to the previous value of EBP, the\nsecond word pointing to the value of EBP for MAIN, and the third word\npointing to the value of EBP for A and the last word pointing to the current\nEBP. B can access variables in A and MAIN by fetching from the display the\nbase addresses of the respective dynamic storage areas. See Figure 3-20.\n\nAfter PROCEDURE B calls PROCEDURE C, ENTER creates a new display for\nPROCEDURE C with the first word pointing to the previous value of EBP, the\nsecond word pointing to the value of EBP for MAIN, and the third word\npointing to the EBP value for A and the third word pointing to the current\nvalue of EBP. Because PROCEDURE B and PROCEDURE C have the same lexical\nlevel, PROCEDURE C is not allowed access to variables in B and therefore\ndoes not receive a pointer to the beginning of PROCEDURE B's stack frame.\nSee Figure 3-21.\n\nLEAVE (Leave Procedure) reverses the action of the previous ENTER\ninstruction. The LEAVE instruction does not include any operands. LEAVE\ncopies EBP to ESP to release all stack space allocated to the procedure by\nthe most recent ENTER instruction. Then LEAVE pops the old value of EBP from\nthe stack. A subsequent RET instruction can then remove any arguments that\nwere pushed on the stack by the calling program for use by the called\nprocedure.\n\n\nFigure 3-16.  Formal Definition of the ENTER Instruction\n\nThe formal definition of the ENTER instruction for all cases is given by the\nfollowing listing. LEVEL denotes the value of the second operand.\n\nPush EBP\nSet a temporary value FRAME_PTR := ESP\nIf LEVEL > 0 then\n      Repeat (LEVEL-1) times:\n          EBP :=EBP - 4\n          Push the doubleword pointed to by EBP\n      End repeat\n      Push FRAME_PTR\nEnd if\nEBP := FRAME_PTR\nESP := ESP - first operand.\n\n\nFigure 3-17.  Variable Access in Nested Procedures\n\n      ͻ\n                      MAIN PROCEDURE (LEXICAL LEVEL 1)                \n         ͻ   \n                       PROCEDURE A (LEXICAL LEVEL 2)                \n           ͻ     \n                      PROCEDURE B (LEXICAL LEVEL 3)               \n           ͼ     \n                                                                    \n           ͻ     \n                      PROCEDURE C (LEXICAL LEVEL 3)               \n             ͻ       \n                     PROCEDURE D (LEXICAL LEVEL 4)              \n             ͼ       \n                                                                  \n           ͼ     \n                                                                    \n         ͼ   \n                                                                      \n      ͼ\n\n\nFigure 3-18.  Stack Frame for MAIN at Level 1\n\n                                     \u0007 31          0 \u0007\n                D  O                                \n                I  F               ͹\n                R                       OLD ESP    \n                E  E     DISPLAY Ĵ  ͹\u0011EBP FOR\n                C  X                      EBPM\nEBPM = EBP VALUE FOR MAIN        MAIN\n                T  P               ͹\n                I  A                               \n                O  N                ͹\n                N  S     DYNAMIC Ĵ                 \n                   I     STORAGE    ͹\n                  O                               \n                  N               ͹\u0011ESP\n                                                   \n                 \u001f                   \u0007               \u0007\n\n\nFigure 3-19.  Stack Frame for Procedure A\n\n                                     \u0007 31          0 \u0007\n                D  O                                \n                I  F                 ͹\n                R                        OLD ESP    \n                E  E                 ͹\n                C  X                       EBPM\nEBPM = EBP VALUE FOR MAIN    \n                T  P                 ͹\n                I  A                                \n                O  N                 ͹\n                N  S                                \n                   I                 ͹\n                  O                                \n                  N               ͹\n                                         EBPM     \n                 \u001f                  ͹\u0011EBP FOR A\n                         DISPLAY Ĵ        EBPM     \n                                    ͹\n                                          EBPA\nEBPA = EBP VALUE FOR PROCEDURE A    \n                                   ͹\n                                                   \n                                    ͹\n                         DYNAMIC Ĵ                 \n                         STORAGE    ͹\n                                                   \n                                   ͹\u0011ESP\n                                                    \n                                     \u0007               \u0007\n\n\nFigure 3-20.  Stack Frame for Procedure B at Level 3 Called from A\n\n                                     \u0007 31          0 \u0007\n                D  O                                \n                I  F                 ͹\n                R                        OLD ESP    \n                E  E                 ͹\n                C  X                       EBPM\nEBPM = EBP VALUE FOR MAIN    \n                T  P                 ͹\n                I  A                                \n                O  N                 ͹\n                N  S                                \n                   I                 ͹\n                  O                                \n                  N                 ͹\n                                          EBPM     \n                 \u001f                   ͹\n                                           EBPM     \n                                     ͹\n                                           EBPA     \n                                     ͹\n                                                    \n                                     ͹\n                                                    \n                                     ͹\n                                                    \n                                   ͹\n                                          EBPA     \n                                    ͹\u0011EBP\n                                          EBPM     \n                         DISPLAY Ĵ  ͹\n                                          EBPA     \n                                    ͹\n                                          EBPB\nEBPB = EBP VALUE FOR PROCEDURE B    \n                                   ͹\n                                                   \n                                    ͹\n                         DYNAMIC Ĵ                 \n                         STORAGE    ͹\n                                                   \n                                   ͹\u0011ESP\n                                                    \n                                     \u0007               \u0007\n\n\nFigure 3-21.  Stack Frame for Procedure C at Level 3 Called from B\n\n                                     \u0007 31          0 \u0007\n                D  O                                \n                I  F                 ͹\n                R                        OLD ESP    \n                E  E                 ͹\n                C  X                       EBPM\nEBPM = EBP VALUE FOR MAIN    \n                T  P                 ͹\n                I  A                                \n                O  N                 ͹\n                N  S                                \n                   I                 ͹\n                  O                                \n                  N                 ͹\n                                          EBPM     \n                 \u001f                   ͹\n                                           EBPM     \n                                     ͹\n                                           EBPA\nEBPA = EBP VALUE FOR PROCEDURE A    \n                                     ͹\n                                                    \n                                     ͹\n                                                    \n                                     ͹\n                                                    \n                                   ͹\n                                          EBPA     \n                                    ͹\u0011EBP\n                                          EBPM     \n                         DISPLAY Ĵ  ͹\n                                          EBPA     \n                                    ͹\n                                          EBPB\nEBPB = EBP VALUE FOR PROCEDURE B    \n                                   ͹\n                                                   \n                                    ͹\n                         DYNAMIC Ĵ                 \n                         STORAGE    ͹\n                                                   \n                                   ͹\u0011ESP\n                                                    \n                                     \u0007               \u0007\n\n\n3.8  Flag Control Instructions\n\nThe flag control instructions provide a method for directly changing the\nstate of bits in the flag register.\n\n\n3.8.1  Carry and Direction Flag Control Instructions\n\nThe carry flag instructions are useful in conjunction with\nrotate-with-carry instructions RCL and RCR. They can initialize the carry\nflag, CF, to a known state before execution of a rotate that moves the carry\nbit into one end of the rotated operand.\n\nThe direction flag control instructions are specifically included to set or\nclear the direction flag, DF, which controls the left-to-right or\nright-to-left direction of string processing. If DF=0, the processor\nautomatically increments the string index registers, ESI and EDI, after each\nexecution of a string primitive. If DF=1, the processor decrements these\nindex registers. Programmers should use one of these instructions before any\nprocedure that uses string instructions to insure that DF is set properly.\n\nFlag Control Instruction                  Effect\n\nSTC (Set Carry Flag)                      CF \u001b 1\nCLC (Clear Carry Flag)                    CF \u001b 0\nCMC (Complement Carry Flag)               CF \u001b NOT (CF)\nCLD (Clear Direction Flag)                DF \u001b 0\nSTD (Set Direction Flag)                  DF \u001b 1\n\n\n3.8.2  Flag Transfer Instructions\n\nThough specific instructions exist to alter CF and DF, there is no direct\nmethod of altering the other applications-oriented flags. The flag transfer\ninstructions allow a program to alter the other flag bits with the bit\nmanipulation instructions after transferring these flags to the stack or the\nAH register.\n\nThe instructions LAHF and SAHF deal with five of the status flags, which\nare used primarily by the arithmetic and logical instructions.\n\nLAHF (Load AH from Flags) copies SF, ZF, AF, PF, and CF to AH bits 7, 6, 4,\n2, and 0, respectively (see Figure 3-22). The contents of the remaining bits\n(5, 3, and 1) are undefined. The flags remain unaffected.\n\nSAHF (Store AH into Flags) transfers bits 7, 6, 4, 2, and 0 from AH into\nSF, ZF, AF, PF, and CF, respectively (see Figure 3-22).\n\nThe PUSHF and POPF instructions are not only useful for storing the flags\nin memory where they can be examined and modified but are also useful for\npreserving the state of the flags register while executing a procedure.\n\nPUSHF (Push Flags) decrements ESP by two and then transfers the low-order\nword of the flags register to the word at the top of stack pointed to by ESP\n(see Figure 3-23). The variant PUSHFD decrements ESP by four, then\ntransfers both words of the extended flags register to the top of the stack\npointed to by ESP (the VM and RF flags are not moved, however).\n\nPOPF (Pop Flags) transfers specific bits from the word at the top of stack\ninto the low-order byte of the flag register (see Figure 3-23), then\nincrements ESP by two. The variant POPFD transfers specific bits from the\ndoubleword at the top of the stack into the extended flags register (the RF\nand VM flags are not changed, however), then increments ESP by four.\n\n\nFigure 3-22.  LAHF and SAHF\n\n                     7    6    5    4    3    2    1    0\n                   ͻ\n                    SF  ZF  UU  AF  UU  PF  UU  CF \n                   ͼ\n\n     LAHF LOADS FIVE FLAGS FROM THE FLAG REGISTER INTO REGISTER AH. SAHF\n     STORES THESE SAME FIVE FLAGS FROM AH INTO THE FLAG REGISTER. THE BIT\n     POSITION OF EACH FLAG IS THE SAME IN AH AS IT IS IN THE FLAG REGISTER.\n     THE REMAINING BITS (MARKED UU) ARE RESERVED; DO NOT DEFINE.\n\n\n3.9  Coprocessor Interface Instructions\n\nA numerics coprocessor (e.g., the 80387 or 80287) provides an extension to\nthe instruction set of the base architecture. The coprocessor extends the\ninstruction set of the base architecture to support high-precision integer\nand floating-point calculations. This extended instruction set includes\narithmetic, comparison, transcendental, and data transfer instructions. The\ncoprocessor also contains a set of useful constants to enhance the speed of\nnumeric calculations.\n\nA program contains instructions for the coprocessor in line with the\ninstructions for the CPU. The system executes these instructions in the same\norder as they appear in the instruction stream. The coprocessor operates\nconcurrently with the CPU to provide maximum throughput for numeric\ncalculations.\n\nThe 80386 also has features to support emulation of the numerics\ncoprocessor when the coprocessor is absent. The software emulation of the\ncoprocessor is transparent to application software but requires more time\nfor execution. Refer to Chapter 11 for more information on coprocessor\nemulation.\n\nESC (Escape) is a 5-bit sequence that begins the opcodes that identify\nfloating point numeric instructions. The ESC pattern tells the 80386 to send\nthe opcode and addresses of operands to the numerics coprocessor. The\nnumerics coprocessor uses the escape instructions to perform\nhigh-performance, high-precision floating point arithmetic that conforms to\nthe IEEE floating point standard 754.\n\nWAIT (Wait) is an 80386 instruction that suspends program execution until\nthe 80386 CPU detects that the BUSY pin is inactive. This condition\nindicates that the coprocessor has completed its processing task and that\nthe CPU may obtain the results.\n\n\nFigure 3-23.  Flag Format for PUSHF and POPF\n\n                                PUSHFD/POPFD\n     Ŀ\n                                                  PUSHF/POPF\n                                     Ŀ\n      31              23               15                7           0\n     ͻ\n                                VR NID  ODITSZ A P C\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0  0           0 0 1 \n                                MF T  PLFFFFFF F F F\n     ͼ\n\n     BITS MARKED 0 AND 1 ARE RESERVED BY INTEL. DO NOT DEFINE.\n\n   SYSTEMS FLAGS (INCLUDING THE IOPL FIELD, AND THE VM, RF, AND IF FLAGS)\n   ARE PUSHED AND ARE VISIBLE TO APPLICATIONS PROGRAMS. HOWEVER, WHEN AN\n   APPLICATIONS PROGRAM POPS THE FLAGS, THESE ITEMS ARE NOT CHANGED,\n   REGARDLESS OF THE VALUES POPPED INTO THEM.\n\n\n3.10  Segment Register Instructions\n\nThis category actually includes several distinct types of instructions.\nThese various types are grouped together here because, if systems designers\nchoose an unsegmented model of memory organization, none of these\ninstructions is used by applications programmers. The instructions that deal\nwith segment registers are:\n\n1.  Segment-register transfer instructions.\n\n   MOV SegReg, ...\n   MOV ..., SegReg\n   PUSH SegReg\n   POP SegReg\n\n2.  Control transfers to another executable segment.\n\n   JMP far    ; direct and indirect\n   CALL far\n   RET far\n\n3.  Data pointer instructions.\n\n   LDS\n   LES\n   LFS\n   LGS\n   LSS\n\nNote that the following interrupt-related instructions are different; all\nare capable of transferring control to another segment, but the use of\nsegmentation is not apparent to the applications programmer.\n\nINT n\nINTO\nBOUND\nIRET\n\n\n3.10.1  Segment-Register Transfer Instructions\n\nThe MOV, POP, and PUSH instructions also serve to load and store segment\nregisters. These variants operate similarly to their general-register\ncounterparts except that one operand can be a segment register. MOV cannot\nmove segment register to a segment register. Neither POP nor MOV can place a\nvalue in the code-segment register CS; only the far control-transfer\ninstructions can change CS.\n\n\n3.10.2  Far Control Transfer Instructions\n\nThe far control-transfer instructions transfer control to a location in\nanother segment by changing the content of the CS register.\n\nDirect far JMP. Direct JMP instructions that specify a target location\noutside the current code segment contain a far pointer. This pointer\nconsists of a selector for the new code segment and an offset within the new\nsegment.\n\nIndirect far JMP. Indirect JMP instructions that specify a target location\noutside the current code segment use a 48-bit variable to specify the far\npointer.\n\nFar CALL. An intersegment CALL places both the value of EIP and CS on the\nstack.\n\nFar RET. An intersegment RET restores the values of both CS and EIP which\nwere saved on the stack by the previous intersegment CALL instruction.\n\n\n3.10.3  Data Pointer Instructions\n\nThe data pointer instructions load a pointer (consisting of a segment\nselector and an offset) to a segment register and a general register.\n\nLDS (Load Pointer Using DS) transfers a pointer variable from the source\noperand to DS and the destination register. The source operand must be a\nmemory operand, and the destination operand must be a general register. DS\nreceives the segment-selector of the pointer. The destination register\nreceives the offset part of the pointer, which points to a specific location\nwithin the segment.\n\nExample: LDS ESI, STRING_X\n\nLoads DS with the selector identifying the segment pointed to by a\nSTRING_X, and loads the offset of STRING_X into ESI.  Specifying ESI as the\ndestination operand is a convenient way to prepare for a string operation on\na source string that is not in the current data segment.\n\nLES (Load Pointer Using ES) operates identically to LDS except that ES\nreceives the segment selector rather than DS.\n\nExample: LES EDI, DESTINATION_X\n\nLoads ES with the selector identifying the segment pointed to by\nDESTINATION_X, and loads the offset of DESTINATION_X into EDI. This\ninstruction provides a convenient way to select a destination for a string\noperation if the desired location is not in the current extra segment.\n\nLFS (Load Pointer Using FS) operates identically to LDS except that FS\nreceives the segment selector rather than DS.\n\nLGS (Load Pointer Using GS) operates identically to LDS except that GS\nreceives the segment selector rather than DS.\n\nLSS (Load Pointer Using SS) operates identically to LDS except that SS\nreceives the segment selector rather than DS.  This instruction is\nespecially important, because it allows the two registers that identify the\nstack (SS:ESP) to be changed in one uninterruptible operation.  Unlike the\nother instructions which load SS, interrupts are not inhibited at the end\nof the LSS instruction.  The other instructions (e.g., POP SS) inhibit\ninterrupts to permit the following instruction to load ESP, thereby forming\nan indivisible load of SS:ESP.  Since both SS and ESP can be loaded by LSS,\nthere is no need to inhibit interrupts.\n\n\n3.11  Miscellaneous Instructions\n\nThe following instructions do not fit in any of the previous categories,\nbut are nonetheless useful.\n\n\n3.11.1  Address Calculation Instruction\n\nLEA (Load Effective Address) transfers the offset of the source operand\n(rather than its value) to the destination operand.  The source operand must\nbe a memory operand, and the destination operand must be a general register.\nThis instruction is especially useful for initializing registers before the\nexecution of the string primitives (ESI, EDI) or the XLAT instruction (EBX).\nThe LEA can perform any indexing or scaling that may be needed.\n\nExample: LEA EBX, EBCDIC_TABLE\n\nCauses the processor to place the address of the starting location of the\ntable labeled EBCDIC_TABLE into EBX.\n\n\n3.11.2  No-Operation Instruction\n\nNOP (No Operation) occupies a byte of storage but affects nothing but the\ninstruction pointer, EIP.\n\n\n3.11.3  Translate Instruction\n\nXLAT (Translate) replaced a byte in the AL register with a byte from a\nuser-coded translation table. When XLAT is executed, AL should have the\nunsigned index to the table addressed by EBX. XLAT changes the contents of\nAL from table index to table entry. EBX is unchanged. The XLAT instruction\nis useful for translating from one coding system to another such as from\nASCII to EBCDIC.  The translate table may be up to 256 bytes long.  The\nvalue placed in the AL register serves as an index to the location of the\ncorresponding translation value.\n\n\n                        PART II  SYSTEMS PROGRAMMING                       \n\n\nChapter 4  Systems Architecture\n\n\n\nMany of the architectural features of the 80386 are used only by systems\nprogrammers. This chapter presents an overview of these aspects of the\narchitecture.\n\nThe systems-level features of the 80386 architecture include:\n\n  Memory Management\n  Protection\n  Multitasking\n  Input/Output\n  Exceptions and Interrupts\n  Initialization\n  Coprocessing and Multiprocessing\n  Debugging\n\nThese features are implemented by registers and instructions, all of which\nare introduced in the following sections. The purpose of this chapter is not\nto explain each feature in detail, but rather to place the remaining\nchapters of Part II in perspective. Each mention in this chapter of a\nregister or instruction is either accompanied by an explanation or a\nreference to a following chapter where detailed information can be obtained.\n\n\n4.1  Systems Registers\n\nThe registers designed for use by systems programmers fall into these\nclasses:\n\n  EFLAGS\n  Memory-Management Registers\n  Control Registers\n  Debug Registers\n  Test Registers\n\n\n4.1.1  Systems Flags\n\nThe systems flags of the EFLAGS register control I/O, maskable interrupts,\ndebugging, task switching, and enabling of virtual 8086 execution in a\nprotected, multitasking environment. These flags are highlighted in Figure\n4-1.\n\nIF (Interrupt-Enable Flag, bit 9)\n\n   Setting IF allows the CPU to recognize external (maskable) interrupt\n   requests. Clearing IF disables these interrupts. IF has no effect on\n   either exceptions or nonmaskable external interrupts. Refer to Chapter\n   9 for more details about interrupts.\n\nNT (Nested Task, bit 14)\n\n   The processor uses the nested task flag to control chaining of\n   interrupted and called tasks. NT influences the operation of the IRET\n   instruction. Refer to Chapter 7 and Chapter 9 for more information on\n   nested tasks.\n\nRF (Resume Flag, bit 16)\n\n   The RF flag temporarily disables debug exceptions so that an instruction\n   can be restarted after a debug exception without immediately causing\n   another debug exception. Refer to Chapter 12 for details.\n\nTF (Trap Flag, bit 8)\n\n   Setting TF puts the processor into single-step mode for debugging. In\n   this mode, the CPU automatically generates an exception after each\n   instruction, allowing a program to be inspected as it executes each\n   instruction. Single-stepping is just one of several debugging features of\n   the 80386. Refer to Chapter 12 for additional information.\n\nVM (Virtual 8086 Mode, bit 17)\n\n   When set, the VM flag indicates that the task is executing an 8086\n   program. Refer to Chapter 14 for a detailed discussion of how the 80386\n   executes 8086 tasks in a protected, multitasking environment.\n\n\nFigure 4-1.  System Flags of EFLAGS Register\n\n      31              23               15                7           0\n     ͻ\n     VRNID  ODITSZAPC\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0  0      001\n     MFT  PLFFFFFFFFF\n     ͼ\n                                               \n             VIRTUAL 8086 MODE             \n                   RESUME FLAG            \n              NESTED TASK FLAG         \n           I/O PRIVILEGE LEVEL       \n              INTERRUPT ENABLE\n\n\nNOTE\n      0 OR 1 INDICATES INTEL RESERVED. DO NOT DEFINE.\n\n\n\n4.1.2  Memory-Management Registers\n\nFour registers of the 80386 locate the data structures that control\nsegmented memory management:\n\nGDTR    Global Descriptor Table Register\nLDTR    Local Descriptor Table Register\n\n   These registers point to the segment descriptor tables GDT and LDT.\n   Refer to Chapter 5 for an explanation of addressing via descriptor\n   tables.\n\nIDTR    Interrupt Descriptor Table Register\n\n   This register points to a table of entry points for interrupt handlers\n   (the IDT). Refer to Chapter 9 for details of the interrupt mechanism.\n\nTR      Task Register\n\n   This register points to the information needed by the processor to define\n   the current task. Refer to Chapter 7 for a description of the\n   multitasking features of the 80386.\n\n\n4.1.3  Control Registers\n\nFigure 4-2 shows the format of the 80386 control registers CR0, CR2, and\nCR3. These registers are accessible to systems programmers only via variants\nof the MOV instruction, which allow them to be loaded from or stored in\ngeneral registers; for example:\n\nMOV EAX, CR0\nMOV CR3, EBX\n\nCR0 contains system control flags, which control or indicate conditions\nthat apply to the system as a whole, not to an individual task.\n\nEM (Emulation, bit 2)\n\n   EM indicates whether coprocessor functions are to be emulated. Refer to\n   Chapter 11 for details.\n\nET (Extension Type, bit 4)\n\n   ET indicates the type of coprocessor present in the system (80287 or\n   80387). Refer to Chapter 11 and Chapter 10 for details.\n\nMP (Math Present, bit 1)\n\n   MP controls the function of the WAIT instruction, which is used to\n   coordinate a coprocessor. Refer to Chapter 11 for details.\n\nPE (Protection Enable, bit 0)\n\n   Setting PE causes the processor to begin executing in protected mode.\n   Resetting PE returns to real-address mode. Refer to Chapter 14 and\n   Chapter 10 for more information on changing processor modes.\n\nPG (Paging, bit 31)\n\n   PG indicates whether the processor uses page tables to translate linear\n   addresses into physical addresses. Refer to Chapter 5 for a description\n   of page translation; refer to Chapter 10 for a discussion of how to set\n   PG.\n\nTS (Task Switched, bit 3)\n\n   The processor sets TS with every task switch and tests TS when\n   interpreting coprocessor instructions. Refer to Chapter 11 for details.\n\nCR2 is used for handling page faults when PG is set. The processor stores\nin CR2 the linear address that triggers the fault. Refer to Chapter 9 for a\ndescription of page-fault handling.\n\nCR3 is used when PG is set. CR3 enables the processor to locate the page\ntable directory for the current task. Refer to Chapter 5 for a description\nof page tables and page translation.\n\n\nFigure 4-2.  Control Registers\n\n 31                23                15                7               0\nͻ\n                                                                      \n    PAGE DIRECTORY BASE REGISTER (PDBR)              RESERVED         CR3\nĶ\n                                                                       \n                       PAGE FAULT LINEAR ADDRESS                       CR2\nĶ\n                                                                       \n                                RESERVED                               CR1\nĶ\nP                                                           ETEMP\nG                              RESERVED                     TSMPECR0\nͼ\n\n\n4.1.4  Debug Register\n\nThe debug registers bring advanced debugging abilities to the 80386,\nincluding data breakpoints and the ability to set instruction breakpoints\nwithout modifying code segments. Refer to Chapter 12 for a complete\ndescription of formats and usage.\n\n\n4.1.5  Test Registers\n\nThe test registers are not a standard part of the 80386 architecture. They\nare provided solely to enable confidence testing of the translation\nlookaside buffer (TLB), the cache used for storing information from page\ntables. Chapter 12 explains how to use these registers.\n\n\n4.2  Systems Instructions\n\nSystems instructions deal with such functions as:\n\n  1.  Verification of pointer parameters (refer to Chapter 6):\n\n    ARPL              Adjust RPL\n    LAR               Load Access Rights\n    LSL               Load Segment Limit\n    VERR              Verify for Reading\n    VERW              Verify for Writing\n\n  2.  Addressing descriptor tables (refer to Chaper 5):\n\n    LLDT              Load LDT Register\n    SLDT              Store LDT Register\n    LGDT              Load GDT Register\n    SGDT              Store GDT Register\n\n  3.  Multitasking (refer to Chapter 7):\n\n    LTR               Load Task Register\n    STR               Store Task Register\n\n  4. Coprocessing and Multiprocessing (refer to Chapter 11):\n\n    CLTS              Clear Task-Switched Flag\n    ESC               Escape instructions\n    WAIT              Wait until Coprocessor not Busy\n    LOCK              Assert Bus-Lock Signal\n\n  5.  Input and Output (refer to Chapter 8):\n\n    IN                Input\n    OUT               Output\n    INS               Input String\n    OUTS              Output String\n\n  6.  Interrupt control (refer to Chapter 9):\n\n    CLI               Clear Interrupt-Enable Flag\n    STI               Set Interrupt-Enable Flag\n    LIDT              Load IDT Register\n    SIDT              Store IDT Register\n\n  7.  Debugging (refer to Chapter 12):\n\n    MOV               Move to and from debug registers\n\n  8.  TLB testing (refer to Chapter 10):\n\n    MOV               Move to and from test registers\n\n  9.  System Control:\n\n    SMSW              Set MSW\n    LMSW              Load MSW\n    HLT               Halt Processor\n    MOV               Move to and from control registers\n\nThe instructions SMSW and LMSW are provided for compatibility with the\n80286 processor.  80386 programs access the MSW in CR0 via variants of the\nMOV instruction.  HLT stops the processor until receipt of an INTR or RESET\nsignal.\n\nIn addition to the chapters cited above, detailed information about each of\nthese instructions can be found in the instruction reference chapter,\nChapter 17.\n\n\nChapter 5  Memory Management\n\n\n\nThe 80386 transforms logical addresses (i.e., addresses as viewed by\nprogrammers) into physical address (i.e., actual addresses in physical\nmemory) in two steps:\n\n    Segment translation, in which a logical address (consisting of a\n     segment selector and segment offset) are converted to a linear address.\n\n    Page translation, in which a linear address is converted to a physical\n     address. This step is optional, at the discretion of systems-software\n     designers.\n\nThese translations are performed in a way that is not visible to\napplications programmers. Figure 5-1 illustrates the two translations at a\nhigh level of abstraction.\n\nFigure 5-1 and the remainder of this chapter present a simplified view of\nthe 80386 addressing mechanism. In reality, the addressing mechanism also\nincludes memory protection features. For the sake of simplicity, however,\nthe subject of protection is taken up in another chapter, Chapter 6.\n\n\nFigure 5-1.  Address Translation Overview\n\n             15           0      31                           0\n    LOGICAL ͻ   ͻ\n    ADDRESS     SELECTOR                  OFFSET            \n            ͼ   ͼ\n                                    \u001f\n                     ͻ\n                          SEGMENT TRANSLATION      \n                     ͼ\n                                 ͻ       PAGING ENABLED\n                                 PG ?Ŀ\n                                 ͼ                    \n                   31        PAGING \u001f DISABLED       0     \n          LINEAR  ͻ    \n          ADDRESS     DIR       PAGE      OFFSET       \n                  ͼ    \n                                    \u001f                      \n                     ͻ      \n                            PAGE TRANSLATION             \n                     ͼ      \n                                    \u0011\n                      31            \u001f              0\n            PHYSICAL ͻ\n            ADDRESS                                \n                     ͼ\n\n\n5.1  Segment Translation\n\nFigure 5-2 shows in more detail how the processor converts a logical\naddress into a linear address.\n\nTo perform this translation, the processor uses the following data\nstructures:\n\n    Descriptors\n    Descriptor tables\n    Selectors\n    Segment Registers\n\n\n5.1.1  Descriptors\n\nThe segment descriptor provides the processor with the data it needs to map\na logical address into a linear address. Descriptors are created by\ncompilers, linkers, loaders, or the operating system, not by applications\nprogrammers. Figure 5-3 illustrates the two general descriptor formats. All\ntypes of segment descriptors take one of these formats. Segment-descriptor\nfields are:\n\nBASE: Defines the location of the segment within the 4 gigabyte linear\naddress space. The processor concatenates the three fragments of the base\naddress to form a single 32-bit value.\n\nLIMIT: Defines the size of the segment. When the processor concatenates the\ntwo parts of the limit field, a 20-bit value results. The processor\ninterprets the limit field in one of two ways, depending on the setting of\nthe granularity bit:\n\n  1.  In units of one byte, to define a limit of up to 1 megabyte.\n\n  2.  In units of 4 Kilobytes, to define a limit of up to 4 gigabytes. The\n      limit is shifted left by 12 bits when loaded, and low-order one-bits\n      are inserted.\n\nGranularity bit: Specifies the units with which the LIMIT field is\ninterpreted. When thebit is clear, the limit is interpreted in units of one\nbyte; when set, the limit is interpreted in units of 4 Kilobytes.\n\nTYPE: Distinguishes between various kinds of descriptors.\n\nDPL (Descriptor Privilege Level): Used by the protection mechanism (refer\nto Chapter 6).\n\nSegment-Present bit: If this bit is zero, the descriptor is not valid for\nuse in address transformation; the processor will signal an exception when a\nselector for the descriptor is loaded into a segment register. Figure 5-4\nshows the format of a descriptor when the present-bit is zero. The operating\nsystem is free to use the locations marked AVAILABLE. Operating systems that\nimplement segment-based virtual memory clear the present bit in either of\nthese cases:\n\n    When the linear space spanned by the segment is not mapped by the\n     paging mechanism.\n\n    When the segment is not present in memory.\n\nAccessed bit: The processor sets this bit when the segment is accessed;\ni.e., a selector for the descriptor is loaded into a segment register or\nused by a selector test instruction. Operating systems that implement\nvirtual memory at the segment level may, by periodically testing and\nclearing this bit, monitor frequency of segment usage.\n\nCreation and maintenance of descriptors is the responsibility of systems\nsoftware, usually requiring the cooperation of compilers, program loaders or\nsystem builders, and therating system.\n\n\nFigure 5-2.  Segment Translation\n\n           15              0    31                                   0\n  LOGICAL ͻ   ͻ\n  ADDRESS     SELECTOR                       OFFSET               \n          ͼ   ͼ\n                \u001f                          \n        DESCRIPTOR TABLE                          \n         ͻ                           \n                                                \n                                                \n                                                \n                                                \n         ͹                           \n           SEGMENT    BASE          ͻ       \n       \u0010 DESCRIPTOR \u0010 + \u0011\n          ͹ ADDRESS       ͼ\n                                       \n          ͼ                 \n                                         \u001f\n              LINEAR  ͻ\n              ADDRESS     DIR        PAGE        OFFSET    \n                      ͼ\n\n\nFigure 5-3.  General Segment-Descriptor Format\n\n         DESCRIPTORS USED FOR APPLICATIONS CODE AND DATA SEGMENTS\n\n  31                23                15                7               0\n ͻ\n                     A                                       \n    BASE 31..24   GXOV LIMIT   P DPL 1 TYPEA  BASE 23..16     4\n                     L 19..16                                \n Ķ\n                                                                       \n         SEGMENT BASE 15..0                SEGMENT LIMIT 15..0          0\n                                                                       \n ͼ\n\n                DESCRIPTORS USED FOR SPECIAL SYSTEM SEGMENTS\n\n  31                23                15                7               0\n ͻ\n                     A                                        \n    BASE 31..24   GXOV LIMIT   P DPL 0  TYPE   BASE 23..16     4\n                     L 19..16                                 \n Ķ\n                                                                       \n         SEGMENT BASE 15..0                SEGMENT LIMIT 15..0          0\n                                                                       \n ͼ\n\n           A      - ACCESSED\n           AVL    - AVAILABLE FOR USE BY SYSTEMS PROGRAMMERS\n           DPL    - DESCRIPTOR PRIVILEGE LEVEL\n           G      - GRANULARITY\n           P      - SEGMENT PRESENT\n\n\n5.1.2  Descriptor Tables\n\nSegment descriptors are stored in either of two kinds of descriptor table:\n\n    The global descriptor table (GDT)\n    A local descriptor table (LDT)\n\nA descriptor table is simply a memory array of 8-byte entries that contain\ndescriptors, as Figure 5-5 shows. A descriptor table is variable in length\nand may contain up to 8192 (2^(13)) descriptors. The first entry of the GDT\n(INDEX=0) is not used by the processor, however.\n\nThe processor locates the GDT and the current LDT in memory by means of the\nGDTR and LDTR registers. These registers store the base addresses of the\ntables in the linear address space and store the segment limits. The\ninstructions LGDT and SGDT give access to the GDTR; the instructions LLDT\nand SLDT give access to the LDTR.\n\n\nFigure 5-4.  Format of Not-Present Descriptor\n\n  31                23                15                7               0\n ͻ\n                                                                   \n             AVAILABLE              O DPL S TYPE     AVAILABLE      4\n                                                                   \n Ķ\n                                                                        \n                                AVAILABLE                                0\n                                                                        \n ͼ\n\n\nFigure 5-5.  Descriptor Tables\n\n      GLOBAL DESCRIPTOR TABLE                 LOCAL DESCRIPTOR TABLE\n    ͻ            ͻ\n                                                            \n    Ķ            Ķ\n                             M                                   M\n    ͼ            ͼ\n    |                         |            |                         |\n    |                         |            |                         |\n    ͻ            ͻ\n                                                            \n    Ķ            Ķ\n                             N + 3                               N + 3\n    ͹            ͹\n                                                            \n    Ķ            Ķ\n                             N + 2                               N + 2\n    ͹            ͹\n                                                            \n    Ķ            Ķ\n                             N + 1                               N + 1\n    ͹            ͹\n                                                            \n    Ķ            Ķ\n                             N                                   N\n    ͼ            ͼ\n    |                         |            |                         |\n    |                         |            |                         |\n    ͻ            ͻ\n                                                            \n    (UNUSED)Ķ            Ķ\n                                                                \n    ͼ            ͼ\n                              \u001e                                      \u001e\n     ͻ               ͻ  \n              GDTR                              LDTR        \n     ͼ                ͼ\n\n\n5.1.3  Selectors\n\nThe selector portion of a logical address identifies a descriptor by\nspecifying a descriptor table and indexing a descriptor within that table.\nSelectors may be visible to applications programs as a field within a\npointer variable, but the values of selectors are usually assigned (fixed\nup) by linkers or linking loaders. Figure 5-6 shows the format of a\nselector.\n\nIndex: Selects one of 8192 descriptors in a descriptor table. The processor\nsimply multiplies this index value by 8 (the length of a descriptor), and\nadds the result to the base address of the descriptor table in order to\naccess the appropriate segment descriptor in the table.\n\nTable Indicator: Specifies to which descriptor table the selector refers. A\nzero indicates the GDT; a one indicates the current LDT.\n\nRequested Privilege Level: Used by the protection mechanism. (Refer to\nChapter 6.)\n\nBecause the first entry of the GDT is not used by the processor, a selector\nthat has an index of zero and a table indicator of zero (i.e., a selector\nthat points to the first entry of the GDT), can be used as a null selector.\nThe processor does not cause an exception when a segment register (other\nthan CS or SS) is loaded with a null selector. It will, however, cause an\nexception when the segment register is used to access memory.  This feature\nis useful for initializing unused segment registers so as to trap accidental\nreferences.\n\n\nFigure 5-6.  Format of a Selector\n\n                         15                      4 3   0\n                        ͻ\n                                                 T   \n                                   INDEX          RPL\n                                                 I   \n                        ͼ\n\n                         TI  - TABLE INDICATOR\n                         RPL - REQUESTOR'S PRIVILEGE LEVEL\n\n\nFigure 5-7.  Segment Registers\n\n             16-BIT VISIBLE\n                SELECTOR                 HIDDEN DESCRIPTOR\n           ͻ\n        CS                                                         \n           Ķ\n        SS                                                         \n           Ķ\n        DS                                                         \n           Ķ\n        ES                                                         \n           Ķ\n        FS                                                         \n           Ķ\n        GS                                                         \n           ͼ\n\n\n5.1.4  Segment Registers\n\nThe 80386 stores information from descriptors in segment registers, thereby\navoiding the need to consult a descriptor table every time it accesses\nmemory.\n\nEvery segment register has a \"visible\" portion and an \"invisible\" portion,\nas Figure 5-7 illustrates. The visible portions of these segment address\nregisters are manipulated by programs as if they were simply 16-bit\nregisters. The invisible portions are manipulated by the processor.\n\nThe operations that load these registers are normal program instructions\n(previously described in Chapter 3). These instructions are of two classes:\n\n  1.  Direct load instructions; for example, MOV, POP, LDS, LSS, LGS, LFS.\n      These instructions explicitly reference the segment registers.\n\n  2.  Implied load instructions; for example, far CALL and JMP. These\n      instructions implicitly reference the CS register, and load it with a\n      new value.\n\nUsing these instructions, a program loads the visible part of the segment\nregister with a 16-bit selector. The processor automatically fetches the\nbase address, limit, type, and other information from a descriptor table and\nloads them into the invisible part of the segment register.\n\nBecause most instructions refer to data in segments whose selectors have\nalready been loaded into segment registers, the processor can add the\nsegment-relative offset supplied by the instruction to the segment base\naddress with no additional overhead.\n\n\n5.2  Page Translation\n\nIn the second phase of address transformation, the 80386 transforms a\nlinear address into a physical address. This phase of address transformation\nimplements the basic features needed for page-oriented virtual-memory\nsystems and page-level protection.\n\nThe page-translation step is optional. Page translation is in effect only\nwhen the PG bit of CR0 is set. This bit is typically set by the operating\nsystem during software initialization. The PG bit must be set if the\noperating system is to implement multiple virtual 8086 tasks, page-oriented\nprotection, or page-oriented virtual memory.\n\n\n5.2.1  Page Frame\n\nA page frame is a 4K-byte unit of contiguous addresses of physical memory.\nPages begin onbyte boundaries and are fixed in size.\n\n\n5.2.2  Linear Address\n\nA linear address refers indirectly to a physical address by specifying a\npage table, a page within that table, and an offset within that page. Figure\n5-8 shows the format of a linear address.\n\nFigure 5-9 shows how the processor converts the DIR, PAGE, and OFFSET\nfields of a linear address into the physical address by consulting two\nlevels of page tables. The addressing mechanism uses the DIR field as an\nindex into a page directory, uses the PAGE field as an index into the page\ntable determined by the page directory, and uses the OFFSET field to address\na byte within the page determined by the page table.\n\n\nFigure 5-8.  Format of a Linear Address\n\n      31                 22 21                 12 11                 0\n     ͻ\n                                                                   \n              DIR                 PAGE                OFFSET       \n                                                                   \n     ͼ\n\n\nFigure 5-9.  Page Translation\n\n                                                              PAGE FRAME\n              ͻ         ͻ\n                  DIR       PAGE      OFFSET                          \n              ͼ                        \n                                                                       \n                            \u0010    PHYSICAL   \n                                                             ADDRESS    \n         PAGE DIRECTORY              PAGE TABLE                         \n        ͻ         ͻ                     \n                                                     ͼ\n                                ͹              \u001e\n                             \u0010 PG TBL ENTRY  \n        ͹          ͹\n      \u0010   DIR ENTRY   Ŀ                      \n         ͹                        \n                                                \n         ͼ         ͼ\n                 \u001e                         \u001e\nͻ                  \n  CR3  \nͼ\n\n\n5.2.3  Page Tables\n\nA page table is simply an array of 32-bit page specifiers. A page table is\nitself a page, and therefore contains 4 Kilobytes of memory or at most 1K\n32-bit entries.\n\nTwo levels of tables are used to address a page of memory. At the higher\nlevel is a page directory. The page directory addresses up to 1K page tables\nof the second level. A page table of the second level addresses up to 1K\npages. All the tables addressed by one page directory, therefore, can\naddress 1M pages (2^(20)). Because each page contains 4K bytes 2^(12)\nbytes), the tables of one page directory can span the entire physical\naddress space of the 80386 (2^(20) times 2^(12) = 2^(32)).\n\nThe physical address of the current page directory is stored in the CPU\nregister CR3, also called the page directory base register (PDBR). Memory\nmanagement software has the option of using one page directory for all\ntasks, one page directory for each task, or some combination of the two.\nRefer to Chapter 10 for information on initialization of CR3. Refer to\nChapter 7 to see how CR3 can change for each task.\n\n\n5.2.4  Page-Table Entries\n\nEntries in either level of page tables have the same format. Figure 5-10\nillustrates this format.\n\n\n5.2.4.1  Page Frame Address\n\nThe page frame address specifies the physical starting address of a page.\nBecause pages are located on 4K boundaries, the low-order 12 bits are always\nzero. In a page directory, the page frame address is the address of a page\ntable. In a second-level page table, the page frame address is the address\nof the page frame that contains the desired memory operand.\n\n\n5.2.4.2  Present Bit\n\nThe Present bit indicates whether a page table entry can be used in address\ntranslation. P=1 indicates that the entry can be used.\n\nWhen P=0 in either level of page tables, the entry is not valid for address\ntranslation, and the rest of the entry is available for software use; none\nof the other bits in the entry is tested by the hardware. Figure 5-11\nillustrates the format of a page-table entry when P=0.\n\nIf P=0 in either level of page tables when an attempt is made to use a\npage-table entry for address translation, the processor signals a page\nexception. In software systems that support paged virtual memory, the\npage-not-present exception handler can bring the required page into physical\nmemory. The instruction that caused the exception can then be reexecuted.\nRefer to Chapter 9 for more information on exception handlers.\n\nNote that there is no present bit for the page directory itself. The page\ndirectory may be not-present while the associated task is suspended, but the\noperating system must ensure that the page directory indicated by the CR3\nimage in the TSS is present in physical memory before the task is\ndispatched. Refer to Chapter 7 for an explanation of the TSS and task\ndispatching.\n\n\nFigure 5-10.  Format of a Page Table Entry\n\n       31                                  12 11                      0\n      ͻ\n                                                           UR \n            PAGE FRAME ADDRESS 31..12        AVAIL 0 0DA0 0//P\n                                                           SW \n      ͼ\n\n                P      - PRESENT\n                R/W    - READ/WRITE\n                U/S    - USER/SUPERVISOR\n                D      - DIRTY\n                AVAIL  - AVAILABLE FOR SYSTEMS PROGRAMMER USE\n\n                NOTE: 0 INDICATES INTEL RESERVED. DO NOT DEFINE.\n\n\nFigure 5-11.  Invalid Page Table Entry\n\n       31                                                           1 0\n      ͻ\n                                                                     \n                                  AVAILABLE                         0\n                                                                     \n      ͼ\n\n\n5.2.4.3  Accessed and Dirty Bits\n\nThese bits provide data about page usage in both levels of the page tables.\nWith the exception of the dirty bit in a page directory entry, these bits\nare set by the hardware; however, the processor does not clear any of these\nbits.\n\nThe processor sets the corresponding accessed bits in both levels of page\ntables to one before a read or write operation to a page.\n\nThe processor sets the dirty bit in the second-level page table to one\nbefore a write to an address covered by that page table entry. The dirty bit\nin directory entries is undefined.\n\nAn operating system that supports paged virtual memory can use these bits\nto determine what pages to eliminate from physical memory when the demand\nfor memory exceeds the physical memory available. The operating system is\nresponsible for testing and clearing these bits.\n\nRefer to Chapter 11 for how the 80386 coordinates updates to the accessed\nand dirty bits in multiprocessor systems.\n\n\n5.2.4.4  Read/Write and User/Supervisor Bits\n\nThese bits are not used for address translation, but are used for\npage-level protection, which the processor performs at the same time as\naddress translation. Refer to Chapter 6 where protection is discussed in\ndetail.\n\n\n5.2.5  Page Translation Cache\n\nFor greatest efficiency in address translation, the processor stores the\nmost recently used page-table data in an on-chip cache. Only if the\nnecessary paging information is not in the cache must both levels of page\ntables be referenced.\n\nThe existence of the page-translation cache is invisible to applications\nprogrammers but not to systems programmers; operating-system programmers\nmust flush the cache whenever the page tables are changed. The\npage-translation cache can be flushed by either of two methods:\n\n  1.  By reloading CR3 with a MOV instruction; for example:\n\n      MOV CR3, EAX\n\n  2.  By performing a task switch to a TSS that has a different CR3 image\n      than the current TSS. (Refer to Chapter 7 for more information on\n      task switching.)\n\n\n5.3  Combining Segment and Page Translation\n\nFigure 5-12 combines Figure 5-2 and Figure 5-9 to summarize both phases\nof the transformation from a logical address to a physical address when\npaging is enabled. By appropriate choice of options and parameters to both\nphases, memory-management software can implement several different styles of\nmemory management.\n\n\n5.3.1  \"Flat\" Architecture\n\nWhen the 80386 is used to execute software designed for architectures that\ndon't have segments, it may be expedient to effectively \"turn off\" the\nsegmentation features of the 80386. The 80386 does not have a mode that\ndisables segmentation, but the same effect can be achieved by initially\nloading the segment registers with selectors for descriptors that encompass\nthe entire 32-bit linear address space. Once loaded, the segment registers\ndon't need to be changed. The 32-bit offsets used by 80386 instructions are\nadequate to address the entire linear-address space.\n\n\n5.3.2  Segments Spanning Several Pages\n\nThe architecture of the 80386 permits segments to be larger or smaller than\nthe size of a page (4 Kilobytes). For example, suppose a segment is used to\naddress and protect a large data structure that spans 132 Kilobytes. In a\nsoftware system that supports paged virtual memory, it is not necessary for\nthe entire structure to be in physical memory at once. The structure is\ndivided into 33 pages, any number of which may not be present. The\napplications programmer does not need to be aware that the virtual memory\nsubsystem is paging the structure in this manner.\n\n\nFigure 5-12.  80306 Addressing Machanism\n\n      16                0 32                                  0\n    ͻ LOGICAL\n          SELECTOR                       OFFSET               ADDRESS\n    ͼ\n           \u001f                         \n    DESCRIPTOR TABLE                         \n   ͻ                         \n                                           \n                                           \n                                           \n                                           \n   ͹                         \n      SEGMENT              ͻ           \n \u0010  DESCRIPTOR   \u0010 + \u0011\n    ͹         ͼ\n                              \n    ͼ           \n                                \u001f                              PAGE FRAME\n      LINEAR  ͻ         ͻ\n      ADDRESS     DIR       PAGE      OFFSET                          \n              ͼ                        \n                                                                       \n                            \u0010    PHYSICAL   \n                                                             ADDRESS    \n         PAGE DIRECTORY              PAGE TABLE                         \n        ͻ         ͻ                     \n                                                                    \n                                                     ͼ\n                                ͹              \u001e\n                             \u0010 PG TBL ENTRY  \n        ͹          ͹\n      \u0010   DIR ENTRY   Ŀ                      \n         ͹                        \n                                                \n         ͼ         ͼ\n                 \u001e                         \u001e\nͻ                  \n  CR3  \nͼ\n\n\n5.3.3  Pages Spanning Several Segments\n\nOn the other hand, segments may be smaller than the size of a page. For\nexample, consider a small data structure such as a semaphore. Because of the\nprotection and sharing provided by segments (refer to Chapter 6), it may be\nuseful to create a separate segment for each semaphore. But, because a\nsystem may need many semaphores, it is not efficient to allocate a page for\neach. Therefore, it may be useful to cluster many related segments within a\npage.\n\n\n5.3.4  Non-Aligned Page and Segment Boundaries\n\nThe architecture of the 80386 does not enforce any correspondence between\nthe boundaries of pages and segments. It is perfectly permissible for a page\nto contain the end of one segment and the beginning of another. Likewise, a\nsegment may contain the end of one page and the beginning of another.\n\n\n5.3.5  Aligned Page and Segment Boundaries\n\nMemory-management software may be simpler, however, if it enforces some\ncorrespondence between page and segment boundaries. For example, if segments\nare allocated only in units of one page, the logic for segment and page\nallocation can be combined. There is no need for logic to account for\npartially used pages.\n\n\n5.3.6  Page-Table per Segment\n\nAn approach to space management that provides even further simplification\nof space-management software is to maintain a one-to-one correspondence\nbetween segment descriptors and page-directory entries, as Figure 5-13\nillustrates. Each descriptor has a base address in which the low-order 22\nbits are zero; in other words, the base address is mapped by the first entry\nof a page table. A segment may have any limit from 1 to 4 megabytes.\nDepending on the limit, the segment is contained in from 1 to 1K page\nframes. A task is thus limited to 1K segments (a sufficient number for many\napplications), each containing up to 4 Mbytes. The descriptor, the\ncorresponding page-directory entry, and the corresponding page table can be\nallocated and deallocated simultaneously.\n\n\nFigure 5-13.  Descriptor per Page Table\n\n                                                              PAGE FRAMES\n                                                             ͻ\n         LDT          PAGE DIRECTORY       PAGE TABLES                  \n    ͻ       ͻ        ͻ                 \n                                                    \u0010ͼ\n    ͹       ͹        ͹   \n                                          PTE      ͻ\n    ͹       ͹        ͹                 \n                                          PTE    Ŀ             \n    ͹       ͹        ͹   \u0010ͼ\n                                          PTE    Ŀ\n    ͹       ͹   \u0010ͼ     ͻ\n    DESCRIPTOR\u0010   PDE                                    \n    ͹       ͹                                    \n    DESCRIPTOR\u0010   PDE    Ŀ                   \u0010ͼ\n    ͹       ͹       ͻ\n                                                      ͻ\n    ͹       ͹       ͹                 \n                                                                 \n    ͹       ͹       ͹   \u0010ͼ\n                                         PTE    \n    ͹       ͹       ͹      ͻ\n                                         PTE    Ŀ             \n    ͼ       ͼ   \u0010ͼ                \n        LDT           PAGE DIRECTORY       PAGE TABLES    \u0010ͼ\n                                                              PAGE FRAMES\n\n\nChapter 6  Protection\n\n\n\n6.1  Why Protection?\n\nThe purpose of the protection features of the 80386 is to help detect and\nidentify bugs. The 80386 supports sophisticated applications that may\nconsist of hundreds or thousands of program modules. In such applications,\nthe question is how bugs can be found and eliminated as quickly as possible\nand how their damage can be tightly confined. To help debug applications\nfaster and make them more robust in production, the 80386 contains\nmechanisms to verify memory accesses and instruction execution for\nconformance to protection criteria. These mechanisms may be used or ignored,\naccording to system design objectives.\n\n\n6.2  Overview of 80386 Protection Mechanisms\n\nProtection in the 80386 has five aspects:\n\n  1.  Type checking\n  2.  Limit checking\n  3.  Restriction of addressable domain\n  4.  Restriction of procedure entry points\n  5.  Restriction of instruction set\n\nThe protection hardware of the 80386 is an integral part of the memory\nmanagement hardware. Protection applies both to segment translation and to\npage translation.\n\nEach reference to memory is checked by the hardware to verify that it\nsatisfies the protection criteria. All these checks are made before the\nmemory cycle is started; any violation prevents that cycle from starting and\nresults in an exception. Since the checks are performed concurrently with\naddress formation, there is no performance penalty.\n\nInvalid attempts to access memory result in an exception. Refer to\nChapter 9 for an explanation of the exception mechanism. The present\nchapter defines the protection violations that lead to exceptions.\n\nThe concept of \"privilege\" is central to several aspects of protection\n(numbers 3, 4, and 5 in the preceeding list). Applied to procedures,\nprivilege is the degree to which the procedure can be trusted not to make a\nmistake that might affect other procedures or data. Applied to data,\nprivilege is the degree of protection that a data structure should have\nfrom less trusted procedures.\n\nThe concept of privilege applies both to segment protection and to page\nprotection.\n\n\n6.3  Segment-Level Protection\n\nAll five aspects of protection apply to segment translation:\n\n  1.  Type checking\n  2.  Limit checking\n  3.  Restriction of addressable domain\n  4.  Restriction of procedure entry points\n  5.  Restriction of instruction set\n\nThe segment is the unit of protection, and segment descriptors store\nprotection parameters. Protection checks are performed automatically by the\nCPU when the selector of a segment descriptor is loaded into a segment\nregister and with every segment access. Segment registers hold the\nprotection parameters of the currently addressable segments.\n\n\n6.3.1  Descriptors Store Protection Parameters\n\nFigure 6-1 highlights the protection-related fields of segment descriptors.\n\nThe protection parameters are placed in the descriptor by systems software\nat the time a descriptor is created. In general, applications programmers do\nnot need to be concerned about protection parameters.\n\nWhen a program loads a selector into a segment register, the processor\nloads not only the base address of the segment but also protection\ninformation. Each segment register has bits in the invisible portion for\nstoring base, limit, type, and privilege level; therefore, subsequent\nprotection checks on the same segment do not consume additional clock\ncycles.\n\n\nFigure 6-1.  Protection Fields of Segment Descriptors\n\n                           DATA SEGMENT DESCRIPTOR\n\n  31                23                15                7               0\n ͻ\n A LIMIT          TYPE   \n BASE 31..24GB0V 19..16  P DPL          BASE 23..16 4\n L              10EWA\n Ķ\n                                    \n SEGMENT BASE 15..0        SEGMENT LIMIT 15..0         0\n                                    \n ͼ\n\n                        EXECUTABLE SEGMENT DESCRIPTOR\n\n  31                23                15                7               0\n ͻ\n A LIMIT          TYPE   \n BASE 31..24GD0V 19..16  P DPL          BASE 23..16 4\n L              10CRA\n Ķ\n                                    \n SEGMENT BASE 15..0        SEGMENT LIMIT 15..0         0\n                                    \n ͼ\n\n                         SYSTEM SEGMENT DESCRIPTOR\n\n  31                23                15                7               0\n ͻ\n A LIMIT                \n BASE 31..24GX0V 19..16  P DPL 0 TYPE  BASE 23..16 4\n L                      \n Ķ\n                                    \n SEGMENT BASE 15..0       SEGMENT LIMIT 15..0          0\n                                    \n ͼ\n\n\n        A   - ACCESSED                              E   - EXPAND-DOWN\n        AVL - AVAILABLE FOR PROGRAMMERS USE         G   - GRANULARITY\n        B   - BIG                                   P   - SEGMENT PRESENT\n        C   - CONFORMING                            R   - READABLE\n        D   - DEFAULT                               W   - WRITABLE\n        DPL - DESCRIPTOR PRIVILEGE LEVEL\n\n\n6.3.1.1  Type Checking\n\nThe TYPE field of a descriptor has two functions:\n\n  1.  It distinguishes among different descriptor formats.\n  2.  It specifies the intended usage of a segment.\n\nBesides the descriptors for data and executable segments commonly used by\napplications programs, the 80386 has descriptors for special segments used\nby the operating system and for gates. Table 6-1 lists all the types defined\nfor system segments and gates. Note that not all descriptors define\nsegments; gate descriptors have a different purpose that is discussed later\nin this chapter.\n\nThe type fields of data and executable segment descriptors include bits\nwhich further define the purpose of the segment (refer to Figure 6-1):\n\n    The writable bit in a data-segment descriptor specifies whether\n     instructions can write into the segment.\n\n    The readable bit in an executable-segment descriptor specifies\n     whether instructions are allowed to read from the segment (for example,\n     to access constants that are stored with instructions). A readable,\n     executable segment may be read in two ways:\n\n  1.  Via the CS register, by using a CS override prefix.\n\n  2.  By loading a selector of the descriptor into a data-segment register\n      (DS, ES, FS,or GS).\n\nType checking can be used to detect programming errors that would attempt\nto use segments in ways not intended by the programmer. The processor\nexamines type information on two kinds of occasions:\n\n  1.  When a selector of a descriptor is loaded into a segment register.\n      Certain segment registers can contain only certain descriptor types;\n      for example:\n\n    The CS register can be loaded only with a selector of an executable\n     segment.\n\n    Selectors of executable segments that are not readable cannot be\n     loaded into data-segment registers.\n\n    Only selectors of writable data segments can be loaded into SS.\n\n  2.  When an instruction refers (implicitly or explicitly) to a segment\n      register. Certain segments can be used by instructions only in certain\n      predefined ways; for example:\n\n    No instruction may write into an executable segment.\n\n    No instruction may write into a data segment if the writable bit is\n     not set.\n\n    No instruction may read an executable segment unless the readable bit\n     is set.\n\n\nTable 6-1. System and Gate Descriptor Types\n\nCode      Type of Segment or Gate\n\n  0       -reserved\n  1       Available 286 TSS\n  2       LDT\n  3       Busy 286 TSS\n  4       Call Gate\n  5       Task Gate\n  6       286 Interrupt Gate\n  7       286 Trap Gate\n  8       -reserved\n  9       Available 386 TSS\n  A       -reserved\n  B       Busy 386 TSS\n  C       386 Call Gate\n  D       -reserved\n  E       386 Interrupt Gate\n  F       386 Trap Gate\n\n\n6.3.1.2  Limit Checking\n\nThe limit field of a segment descriptor is used by the processor to prevent\nprograms from addressing outside the segment. The processor's interpretation\nof the limit depends on the setting of the G (granularity) bit. For data\nsegments, the processor's interpretation of the limit depends also on the\nE-bit (expansion-direction bit) and the B-bit (big bit) (refer to Table\n6-2).\n\nWhen G=0, the actual limit is the value of the 20-bit limit field as it\nappears in the descriptor. In this case, the limit may range from 0 to\n0FFFFFH (2^(20) - 1 or 1 megabyte). When G=1, the processor appends 12\nlow-order one-bits to the value in the limit field. In this case the actual\nlimit may range from 0FFFH (2^(12) - 1 or 4 kilobytes) to 0FFFFFFFFH(2^(32)\n- 1 or 4 gigabytes).\n\nFor all types of segments except expand-down data segments, the value of\nthe limit is one less than the size (expressed in bytes) of the segment. The\nprocessor causes a general-protection exception in any of these cases:\n\n    Attempt to access a memory byte at an address > limit.\n    Attempt to access a memory word at an address limit.\n    Attempt to access a memory doubleword at an address (limit-2).\n\nFor expand-down data segments, the limit has the same function but is\ninterpreted differently. In these cases the range of valid addresses is from\nlimit + 1 to either 64K or 2^(32) - 1 (4 Gbytes) depending on the B-bit. An\nexpand-down segment has maximum size when the limit is zero.\n\nThe expand-down feature makes it possible to expand the size of a stack by\ncopying it to a larger segment without needing also to update intrastack\npointers.\n\nThe limit field of descriptors for descriptor tables is used by the\nprocessor to prevent programs from selecting a table entry outside the\ndescriptor table. The limit of a descriptor table identifies the last valid\nbyte of the last descriptor in the table. Since each descriptor is eight\nbytes long, the limit value is N * 8 - 1 for a table that can contain up to\nN descriptors.\n\nLimit checking catches programming errors such as runaway subscripts and\ninvalid pointer calculations. Such errors are detected when they occur, so\nthat identification of the cause is easier. Without limit checking, such\nerrors could corrupt other modules; the existence of such errors would not\nbe discovered until later, when the corrupted module behaves incorrectly,\nand when identification of the cause is difficult.\n\n\nTable 6-2. Useful Combinations of E, G, and B Bits\n\n\nCase:                    1         2         3         4\n\nExpansion Direction      U         U         D         D\nG-bit                    0         1         0         1\nB-bit                    X         X         0         1\n\nLower bound is:\n     0                   X         X\n     LIMIT+1                                 X\nshl(LIMIT,12,1)+1                                      X\n\nUpper bound is:\n     LIMIT               X\n     shl(LIMIT,12,1)               X\n     64K-1                                   X\n     4G-1                                              X\n\nMax seg size is:\n     64K                 X\n     64K-1                         X\n     4G-4K                                   X\n     4G                                                X\n\nMin seg size is:\n     0                   X         X\n     4K                                      X         X\n\nshl (X, 12, 1) = shift X left by 12 bits inserting one-bits on the right\n\n\n6.3.1.3  Privilege Levels\n\nThe concept of privilege is implemented by assigning a value from zero to\nthree to key objects recognized by the processor. This value is called the\nprivilege level. The value zero represents the greatest privilege, the\nvalue three represents the least privilege. The following\nprocessor-recognized objects contain privilege levels:\n\n    Descriptors contain a field called the descriptor privilege level\n     (DPL).\n\n    Selectors contain a field called the requestor's privilege level\n     (RPL). The RPL is intended to represent the privilege level of\n     the procedure that originates a selector.\n\n    An internal processor register records the current privilege level\n     (CPL). Normally the CPL is equal to the DPL of the segment that\n     the processor is currently executing. CPL changes as control is\n     transferred to segments with differing DPLs.\n\nThe processor automatically evaluates the right of a procedure to access\nanother segment by comparing the CPL to one or more other privilege levels.\nThe evaluation is performed at the time the selector of a descriptor is\nloaded into a segment register. The criteria used for evaluating access to\ndata differs from that for evaluating transfers of control to executable\nsegments; therefore, the two types of access are considered separately in\nthe following sections.\n\nFigure 6-2 shows how these levels of privilege can be interpreted as rings\nof protection. The center is for the segments containing the most critical\nsoftware, usually the kernel of the operating system. Outer rings are for\nthe segments of less critical software.\n\nIt is not necessary to use all four privilege levels. Existing software\nthat was designed to use only one or two levels of privilege can simply\nignore the other levels offered by the 80386. A one-level system should use\nprivilege level zero; a two-level system should use privilege levels zero\nand three.\n\n\nFigure 6-2.  Levels of Privilege\n\n                                     TASK C\n              Ŀ\n               ͻ \n                                APPLICATIONS                   \n                    ͻ      \n                            CUSTOM EXTENSIONS                \n                         ͻ           \n                             SYSTEM SERVICES               \n                              ͻ                \n                                KERNAL                   \n              Ķ͵\n                                   LEVELLEVELLEVELLEVEL \n                                     0    1    2    3   \n                              ͼ                \n                                                          \n                         ͼ           \n                                                            \n                    ͼ      \n                                                              \n        TASK B ͼ TASK A\n               \n\n\n6.3.2  Restricting Access to Data\n\nTo address operands in memory, an 80386 program must load the selector of a\ndata segment into a data-segment register (DS, ES, FS, GS, SS). The\nprocessor automatically evaluates access to a data segment by comparing\nprivilege levels. The evaluation is performed at the time a selector for the\ndescriptor of the target segment is loaded into the data-segment register.\nAs Figure 6-3 shows, three different privilege levels enter into this type\nof privilege check:\n\n  1.  The CPL (current privilege level).\n\n  2.  The RPL (requestor's privilege level) of the selector used to specify\n      the target segment.\n\n  3.  The DPL of the descriptor of the target segment.\n\nInstructions may load a data-segment register (and subsequently use the\ntarget segment) only if the DPL of the target segment is numerically greater\nthan or equal to the maximum of the CPL and the selector's RPL. In other\nwords, a procedure can only access data that is at the same or less\nprivileged level.\n\nThe addressable domain of a task varies as CPL changes. When CPL is zero,\ndata segments at all privilege levels are accessible; when CPL is one, only\ndata segments at privilege levels one through three are accessible; when CPL\nis three, only data segments at privilege level three are accessible. This\nproperty of the 80386 can be used, for example, to prevent applications\nprocedures from reading or changing tables of the operating system.\n\n\nFigure 6-3.  Privilege Check for Data Access\n\n          16-BIT VISIBLE\n             SELECTOR            INVISIBLE DESCRIPTOR\n        ͻ\n     CS                                   CPL           \n        ͼ\n                                              \n    TARGET SEGMENT SELECTOR                           ͻ\n ͻ              \u0010 PRIVILEGE \n          INDEX          RPL\u0010 CHECK     \n ͼ              \u0010 BY CPU    \n                                                      ͼ\n     DATA SEGMENT DESCRIPTOR              \n                                          \n  31                23                15               7               0\n ͻ\n                     A LIMIT           TYPE                    \n    BASE 31..24   GB0V         P DPL             BASE 23..16    4\n                     L  19..16       10EWA                 \n Ķ\n                                                                       \n         SEGMENT BASE 15..0                 SEGMENT LIMIT 15..0         0\n                                                                       \n ͼ\n\n\n    CPL - CURRENT PRIVILEGE LEVEL\n    RPL - REQUESTOR'S PRIVILEGE LEVEL\n    DPL - DESCRIPTOR PRIVILEGE LEVEL\n\n\n6.3.2.1  Accessing Data in Code Segments\n\nLess common than the use of data segments is the use of code segments to\nstore data. Code segments may legitimately hold constants; it is not\npossible to write to a segment described as a code segment. The following\nmethods of accessing data in code segments are possible:\n\n  1.  Load a data-segment register with a selector of a nonconforming,\n      readable, executable segment.\n\n  2.  Load a data-segment register with a selector of a conforming,\n      readable, executable segment.\n\n  3.  Use a CS override prefix to read a readable, executable segment whose\n      selector is already loaded in the CS register.\n\nThe same rules as for access to data segments apply to case 1. Case 2 is\nalways valid because the privilege level of a segment whose conforming bit\nis set is effectively the same as CPL regardless of its DPL. Case 3 always\nvalid because the DPL of the code segment in CS is, by definition, equal to\nCPL.\n\n\n6.3.3  Restricting Control Transfers\n\nWith the 80386, control transfers are accomplished by the instructions JMP,\nCALL, RET, INT, and IRET, as well as by the exception and interrupt\nmechanisms. Exceptions and interrupts are special cases that Chapter 9\ncovers. This chapter discusses only JMP, CALL, and RET instructions.\n\nThe \"near\" forms of JMP, CALL, and RET transfer within the current code\nsegment, and therefore are subject only to limit checking. The processor\nensures that the destination of the JMP, CALL, or RET instruction does not\nexceed the limit of the current executable segment. This limit is cached in\nthe CS register; therefore, protection checks for near transfers require no\nextra clock cycles.\n\nThe operands of the \"far\" forms of JMP and CALL refer to other segments;\ntherefore, the processor performs privilege checking. There are two ways a\nJMP or CALL can refer to another segment:\n\n  1.  The operand selects the descriptor of another executable segment.\n\n  2.  The operand selects a call gate descriptor. This gated form of\n      transfer is discussed in a later section on call gates.\n\nAs Figure 6-4 shows, two different privilege levels enter into a privilege\ncheck for a control transfer that does not use a call gate:\n\n  1.  The CPL (current privilege level).\n  2.  The DPL of the descriptor of the target segment.\n\nNormally the CPL is equal to the DPL of the segment that the processor is\ncurrently executing. CPL may, however, be greater than DPL if the conforming\nbit is set in the descriptor of the current executable segment. The\nprocessor keeps a record of the CPL cached in the CS register; this value\ncan be different from the DPL in the descriptor of the code segment.\n\nThe processor permits a JMP or CALL directly to another segment only if one\nof the following privilege rules is satisfied:\n\n    DPL of the target is equal to CPL.\n\n    The conforming bit of the target code-segment descriptor is set, and\n     the DPL of the target is less than or equal to CPL.\n\nAn executable segment whose descriptor has the conforming bit set is called\na conforming segment. The conforming-segment mechanism permits sharing of\nprocedures that may be called from various privilege levels but should\nexecute at the privilege level of the calling procedure. Examples of such\nprocedures include math libraries and some exception handlers. When control\nis transferred to a conforming segment, the CPL does not change. This is\nthe only case when CPL may be unequal to the DPL of the current executable\nsegment.\n\nMost code segments are not conforming. The basic rules of privilege above\nmean that, for nonconforming segments, control can be transferred without a\ngate only to executable segments at the same level of privilege. There is a\nneed, however, to transfer control to (numerically) smaller privilege\nlevels; this need is met by the CALL instruction when used with call-gate\ndescriptors, which are explained in the next section. The JMP instruction\nmay never transfer control to a nonconforming segment whose DPL does not\nequal CPL.\n\n\nFigure 6-4.  Privilege Check for Control Transfer without Gate\n\n          16-BIT VISIBLE\n             SELECTOR               INVISIBLE PART\n        ͻ\n                                          CPL            CS\n        ͼ\n                                              \n                                                      ͻ\n                                              \u0010 PRIVILEGE \n                                          \u0010 CHECK     \n                                                 \u0010 BY CPU    \n     CODE-SEGMENT DESCRIPTOR                         ͼ\n                                                 \n  31                23                15              7               0\n ͻ\n                     A LIMIT                                  \n    BASE 31..24   GD0V         P DPL            BASE 23..16    4\n                     L  19..16       11CRA                 \n Ķ\n                                                                       \n         SEGMENT BASE 15..0                 SEGMENT LIMIT 15..0         0\n                                                                       \n ͼ\n\n    CPL - CURRENT PRIVILEGE LEVEL\n    DPL - DESCRIPTOR PRIVILEGE LEVEL\n    C   - CONFORMING BIT\n\n\n6.3.4  Gate Descriptors Guard Procedure Entry Points\n\nTo provide protection for control transfers among executable segments\nat different privilege levels, the 80386 uses gate descriptors. There are\nfour kinds of gate descriptors:\n\n    Call gates\n    Trap gates\n    Interrupt gates\n    Task gates\n\nThis chapter is concerned only with call gates. Task gates are used for\ntask switching, and therefore are discussed in Chapter 7. Chapter 9\nexplains how trap gates and interrupt gates are used by exceptions and\ninterrupts. Figure 6-5 illustrates the format of a call gate. A call gate\ndescriptor may reside in the GDT or in an LDT, but not in the IDT.\n\nA call gate has two primary functions:\n\n  1.  To define an entry point of a procedure.\n  2.  To specify the privilege level of the entry point.\n\nCall gate descriptors are used by call and jump instructions in the same\nmanner as code segment descriptors. When the hardware recognizes that the\ndestination selector refers to a gate descriptor, the operation of the\ninstruction is expanded as determined by the contents of the call gate.\n\nThe selector and offset fields of a gate form a pointer to the entry point\nof a procedure. A call gate guarantees that all transitions to another\nsegment go to a valid entry point, rather than possibly into the middle of a\nprocedure (or worse, into the middle of an instruction). The far pointer\noperand of the control transfer instruction does not point to the segment\nand offset of the target instruction; rather, the selector part of the\npointer selects a gate, and the offset is not used. Figure 6-6 illustrates\nthis style of addressing.\n\nAs Figure 6-7 shows, four different privilege levels are used to check the\nvalidity of a control transfer via a call gate:\n\n  1.  The CPL (current privilege level).\n\n  2.  The RPL (requestor's privilege level) of the selector used to specify\n      the call gate.\n\n  3.  The DPL of the gate descriptor.\n\n  4.  The DPL of the descriptor of the target executable segment.\n\nThe DPL field of the gate descriptor determines what privilege levels can\nuse the gate. One code segment can have several procedures that are intended\nfor use by different privilege levels. For example, an operating system may\nhave some services that are intended to be used by applications, whereas\nothers may be intended only for use by other systems software.\n\nGates can be used for control transfers to numerically smaller privilege\nlevels or to the same privilege level (though they are not necessary for\ntransfers to the same level). Only CALL instructions can use gates to\ntransfer to smaller privilege levels. A gate may be used by a JMP\ninstruction only to transfer to an executable segment with the same\nprivilege level or to a conforming segment.\n\nFor a JMP instruction to a nonconforming segment, both of the following\nprivilege rules must be satisfied; otherwise, a general protection exception\nresults.\n\n   MAX (CPL,RPL)  gate DPL\n   target segment DPL = CPL\n\nFor a CALL instruction (or for a JMP instruction to a conforming segment),\nboth of the following privilege rules must be satisfied; otherwise, a\ngeneral protection exception results.\n\n   MAX (CPL,RPL)  gate DPL\n   target segment DPL  CPL\n\n\nFigure 6-5.  Format of 80386 Call Gate\n\n   31                23                15               7              0\n  ͻ\n                                             TYPE          DWORD  \n             OFFSET 31..16           P DPL          0 0 0          4\n                                           0 1 1 0 0       COUNT  \n  Ķ\n                                                                      \n                SELECTOR                        OFFSET 15..0           0\n                                                                      \n  ͼ\n\n\nFigure 6-6.  Indirect Transfer via Call Gate\n\n         OPCODE                 OFFSET                   SELECTOR\n       ͻ\n         CALL               (NOT USED)               INDEX  RPL\n       ͼ\n                                                          \n                      DESCRIPTOR TABLE                    \n                 ͻ              \n                                                     \n                 Ķ              \n                                                       \n                 ͼ              \n                 \u0007                         \u0007              \n                 \u0007                         \u0007              \n                 \u0007                         \u0007              \n                 ͻ              \n         GATE       OFFSET    DPL COUNT \u0011    EXECUTABLE\n      DESCRIPTOR Ķ                     SEGMENT\n          Ķ  SELECTOR     OFFSET   Ŀ          ͻ\n                ͹                             \n                                                                   \n                Ķ                             \n                                                                     \n                ͹                             \n                                           \u0010  PROCEDURE   \n                Ķ                              \n                                                                      \n          \u001f      ͹                              \n      EXECUTABLE  BASE       DPL  BASE                               \n       SEGMENT   Ķ     \u0010ͼ\n      DESCRIPTOR     BASE                \n                 ͼ\n                 \u0007                         \u0007\n                 \u0007                         \u0007\n                 \u0007                         \u0007\n                 ͻ\n                                       \n                 Ķ\n                                         \n                 ͼ\n\n\nFigure 6-7.  Privilege Check via Call Gate\n\n               16-BIT VISIBLE\n                  SELECTOR            INVISIBLE DESCRIPTOR\n             ͻ\n          CS                                   CPL           \n             ͼ\n                                                   \n              TARGET SELECTOR                              ͻ\n      ͻ              \u0010 PRIVILEGE \n               INDEX          RPL\u0010 CHECK     \n      ͼ   \u0010 BY        \n                                                       \u0010 CPU       \n                                                   ͼ\n                                                       \n         GATE DESCRIPTOR         \u001f                      \n    ͻ    \n            OFFSET            DPL       COUNT       \n    ͹    \n           SELECTOR                OFFSET            \n    ͼ    \n                                                        \n                                                        \n                          ͻ\n               EXECUTABLE    BASE       LIMIT       DPL      BASE    \n                SEGMENT   ͹\n               DESCRIPTOR           BASE                 LIMIT         \n                          ͼ\n\n            CPL     - CURRENT PRIVILEGE LEVEL\n            RPL     - REQUESTOR'S PRIVILEGE LEVEL\n            DPL     - DESCRIPTOR PRIVILEGE LEVEL\n\n\n6.3.4.1  Stack Switching\n\nIf the destination code segment of the call gate is at a different\nprivilege level than the CPL, an interlevel transfer is being requested.\n\nTo maintain system integrity, each privilege level has a separate stack.\nThese stacks assure sufficient stack space to process calls from less\nprivileged levels. Without them, a trusted procedure would not work\ncorrectly if the calling procedure did not provide sufficient space on the\ncaller's stack.\n\nThe processor locates these stacks via the task state segment (see Figure\n6-8). Each task has a separate TSS, thereby permitting tasks to have\nseparate stacks. Systems software is responsible for creating TSSs and\nplacing correct stack pointers in them. The initial stack pointers in the\nTSS are strictly read-only values. The processor never changes them during\nthe course of execution.\n\nWhen a call gate is used to change privilege levels, a new stack is\nselected by loading a pointer value from the Task State Segment (TSS). The\nprocessor uses the DPL of the target code segment (the new CPL) to index the\ninitial stack pointer for PL 0, PL 1, or PL 2.\n\nThe DPL of the new stack data segment must equal the new CPL; if it does\nnot, a stack exception occurs. It is the responsibility of systems software\nto create stacks and stack-segment descriptors for all privilege levels that\nare used. Each stack must contain enough space to hold the old SS:ESP, the\nreturn address, and all parameters and local variables that may be required\nto process a call.\n\nAs with intralevel calls, parameters for the subroutine are placed on the\nstack. To make privilege transitions transparent to the called procedure,\nthe processor copies the parameters to the new stack. The count field of a\ncall gate tells the processor how many doublewords (up to 31) to copy from\nthe caller's stack to the new stack. If the count is zero, no parameters are\ncopied.\n\nThe processor performs the following stack-related steps in executing an\ninterlevel CALL.\n\n  1.  The new stack is checked to assure that it is large enough to hold\n      the parameters and linkages; if it is not, a stack fault occurs with\n      an error code of 0.\n\n  2.  The old value of the stack registers SS:ESP is pushed onto the new\n      stack as two doublewords.\n\n  3.  The parameters are copied.\n\n  4.  A pointer to the instruction after the CALL instruction (the former\n      value of CS:EIP) is pushed onto the new stack. The final value of\n      SS:ESP points to this return pointer on the new stack.\n\nFigure 6-9 illustrates the stack contents after a successful interlevel\ncall.\n\nThe TSS does not have a stack pointer for a privilege level 3 stack,\nbecause privilege level 3 cannot be called by any procedure at any other\nprivilege level.\n\nProcedures that may be called from another privilege level and that require\nmore than the 31 doublewords for parameters must use the saved SS:ESP link\nto access all parameters beyond the last doubleword copied.\n\nA call via a call gate does not check the values of the words copied onto\nthe new stack. The called procedure should check each parameter for\nvalidity. A later section discusses how the ARPL, VERR, VERW, LSL, and LAR\ninstructions can be used to check pointer values.\n\n\nFigure 6-8.  Initial Stack Pointers of TSS\n\n                 31       23       15       7      0\n                ͻ64\n                \u0007                                   \u0007\n                \u0007                                   \u0007\n                \u0007                                   \u0007\n                                                   \n                ͹\n                              EFLAGS               24\n                ͹\n                     INSTRUCTION POINTER (EIP)     20\n                ͹\n                            CR3 (PDBR)             1C\n                ͹  Ŀ\n                00000000 00000000       SS2    1018 \n                ͹   \n                               ESP2                14 \n                ͹   \n                00000000 00000000       SS1    0110   INITIAL\n                ͹    STACK\n                               ESP1                0C   POINTERS\n                ͹   \n                00000000 00000000       SS0    008  \n                ͹   \n                               ESP0                4  \n                ͹  \n                00000000 00000000  TSS BACK LINK  0\n                ͼ\n\n\nFigure 6-9.  Stack Contents after an Interlevel Call\n\n                                            31            0     SS:ESP\n                                           ͻ\u0011FROM TSS\n                 31            0           OLD SS \n                ͻ          ͹\n       D  O                                  OLD ESP    \n       I  F                              ͹\n       R                                     PARM 3     \n       E  E                              ͹\n       C  X                                  PARM 2     \n       T  P     ͹          ͹\n       I  A         PARM 3                   PARM 1     \n       O  N     ͹          ͹\n       N  S         PARM 2               OLD CS      NEW\n          I     ͹  OLD     ͹    SS:ESP\n         O         PARM 1       SS:ESP      OLD EIP          \n         N     ͹\u0011     ͹\u0011\n                                                       \n        \u001f                                               \n                ͼ          ͼ\n                    OLD STACK                  NEW STACK\n\n\n6.3.4.2  Returning from a Procedure\n\nThe \"near\" forms of the RET instruction transfer control within the current\ncode segment and therefore are subject only to limit checking. The offset of\nthe instruction following the corresponding CALL, is popped from the stack.\nThe processor ensures that this offset does not exceed the limit of the\ncurrent executable segment.\n\nThe \"far\" form of the RET instruction pops the return pointer that was\npushed onto the stack by a prior far CALL instruction. Under normal\nconditions, the return pointer is valid, because of its relation to the\nprior CALL or INT. Nevertheless, the processor performs privilege checking\nbecause of the possibility that the current procedure altered the pointer or\nfailed to properly maintain the stack. The RPL of the CS selector popped\noff the stack by the return instruction identifies the privilege level of\nthe calling procedure.\n\nAn intersegment return instruction can change privilege levels, but only\ntoward procedures of lesser privilege. When the RET instruction encounters a\nsaved CS value whose RPL is numerically greater than the CPL, an interlevel\nreturn occurs. Such a return follows these steps:\n\n  1.  The checks shown in Table 6-3 are made, and CS:EIP and SS:ESP are\n      loaded with their former values that were saved on the stack.\n\n  2.  The old SS:ESP (from the top of the current stack) value is adjusted\n      by the number of bytes indicated in the RET instruction. The resulting\n      ESP value is not compared to the limit of the stack segment. If ESP is\n      beyond the limit, that fact is not recognized until the next stack\n      operation. (The SS:ESP value of the returning procedure is not\n      preserved; normally, this value is the same as that contained in the\n      TSS.)\n\n  3.  The contents of the DS, ES, FS, and GS segment registers are checked.\n      If any of these registers refer to segments whose DPL is greater than\n      the new CPL (excluding conforming code segments), the segment register\n      is loaded with the null selector (INDEX = 0, TI = 0). The RET\n      instruction itself does not signal exceptions in these cases;\n      however, any subsequent memory reference that attempts to use a\n      segment register that contains the null selector will cause a general\n      protection exception. This prevents less privileged code from\n      accessing more privileged segments using selectors left in the\n      segment registers by the more privileged procedure.\n\n\n6.3.5  Some Instructions are Reserved for Operating System\n\nInstructions that have the power to affect the protection mechanism or to\ninfluence general system performance can only be executed by trusted\nprocedures. The 80386 has two classes of such instructions:\n\n  1.  Privileged instructions  those used for system control.\n\n  2.  Sensitive instructions  those used for I/O and I/O related\n      activities.\n\n\nTable 6-3. Interlevel Return Checks\n\n\nType of Check                              Exception\nSF  Stack Fault\nGP  General Protection Exception\nNP  Segment-Not-Present Exception  Error Code\n\nESP is within current SS segment           SF          0\nESP + 7 is within current SS segment       SF          0\nRPL of return CS is greater than CPL       GP          Return CS\nReturn CS selector is not null             GP          Return CS\nReturn CS segment is within descriptor\ntable limit                                GP          Return CS\nReturn CS descriptor is a code segment     GP          Return CS\nReturn CS segment is present               NP          Return CS\nDPL of return nonconforming code\nsegment = RPL of return CS, or DPL of\nreturn conforming code segment  RPL\nof return CS                               GP          Return CS\nESP + N + 15 is within SS segment\nN   Immediate Operand of RET N Instruction         SF          Return SS\nSS selector at ESP + N + 12 is not null    GP          Return SS\nSS selector at ESP + N + 12 is within\ndescriptor table limit                     GP          Return SS\nSS descriptor is writable data segment     GP          Return SS\nSS segment is present                      SF          Return SS\nSaved SS segment DPL = RPL of saved\nCS                                         GP          Return SS\nSaved SS selector RPL = Saved SS\nsegment DPL                                GP          Return SS\n\n\n6.3.5.1  Privileged Instructions\n\nThe instructions that affect system data structures can only be executed\nwhen CPL is zero. If the CPU encounters one of these instructions when CPL\nis greater than zero, it signals a general protection exception. These\ninstructions include:\n\n   CLTS                  Clear TaskSwitched Flag\n   HLT                   Halt Processor\n   LGDT                  Load GDL Register\n   LIDT                  Load IDT Register\n   LLDT                  Load LDT Register\n   LMSW                  Load Machine Status Word\n   LTR                   Load Task Register\n   MOV to/from CRn       Move to Control Register n\n   MOV to /from DRn      Move to Debug Register n\n   MOV to/from TRn       Move to Test Register n\n\n\n6.3.5.2  Sensitive Instructions\n\nInstructions that deal with I/O need to be restricted but also need to be\nexecuted by procedures executing at privilege levels other than zero. The\nmechanisms for restriction of I/O operations are covered in detail in\nChapter 8, \"Input/Output\".\n\n\n6.3.6  Instructions for Pointer Validation\n\nPointer validation is an important part of locating programming errors.\nPointer validation is necessary for maintaining isolation between the\nprivilege levels. Pointer validation consists of the following steps:\n\n  1.  Check if the supplier of the pointer is entitled to access the\n      segment.\n\n  2.  Check if the segment type is appropriate to its intended use.\n\n  3.  Check if the pointer violates the segment limit.\n\nAlthough the 80386 processor automatically performs checks 2 and 3 during\ninstruction execution, software must assist in performing the first check.\nThe unprivileged instruction ARPL is provided for this purpose. Software can\nalso explicitly perform steps 2 and 3 to check for potential violations\n(rather than waiting for an exception). The unprivileged instructions LAR,\nLSL, VERR, and VERW are provided for this purpose.\n\nLAR (Load Access Rights) is used to verify that a pointer refers to a\nsegment of the proper privilege level and type. LAR has one operanda\nselector for a descriptor whose access rights are to be examined. The\ndescriptor must be visible at the privilege level which is the maximum of\nthe CPL and the selector's RPL. If the descriptor is visible, LAR obtains a\nmasked form of the second doubleword of the descriptor, masks this value\nwith 00FxFF00H, stores the result into the specified 32-bit destination\nregister, and sets the zero flag. (The x indicates that the corresponding\nfour bits of the stored value are undefined.) Once loaded, the access-rights\nbits can be tested. All valid descriptor types can be tested by the LAR\ninstruction. If the RPL or CPL is greater than DPL, or if the selector is\noutside the table limit, no access-rights value is returned, and the zero\nflag is cleared. Conforming code segments may be accessed from any privilege\nlevel.\n\nLSL (Load Segment Limit) allows software to test the limit of a descriptor.\nIf the descriptor denoted by the given selector (in memory or a register) is\nvisible at the CPL, LSL loads the specified 32-bit register with a 32-bit,\nbyte granular, unscrambled limit that is calculated from fragmented limit\nfields and the G-bit of that descriptor. This can only be done for segments\n(data, code, task state, and local descriptor tables); gate descriptors are\ninaccessible. (Table 6-4 lists in detail which types are valid and which\nare not.) Interpreting the limit is a function of the segment type. For\nexample, downward expandable data segments treat the limit differently than\ncode segments do. For both LAR and LSL, the zero flag (ZF) is set if the\nloading was performed; otherwise, the ZF is cleared.\n\n\nTable 6-4. Valid Descriptor Types for LSL\n\n    Type   Descriptor Type             Valid?\n    Code\n\n    0      (invalid)                   NO \n    1      Available 286 TSS           YES\n    2      LDT                         YES\n    3      Busy 286 TSS                YES\n    4      286 Call Gate               NO \n    5      Task Gate                   NO \n    6      286 Trap Gate               NO \n    7      286 Interrupt Gate          NO \n    8      (invalid)                   NO \n    9      Available 386 TSS           YES\n    A      (invalid)                   NO \n    B      Busy 386 TSS                YES\n    C      386 Call Gate               NO \n    D      (invalid)                   NO \n    E      386 Trap Gate               NO \n    F      386 Interrupt Gate          NO \n\n\n6.3.6.1  Descriptor Validation\n\nThe 80386 has two instructions, VERR and VERW, which determine whether a\nselector points to a segment that can be read or written at the current\nprivilege level. Neither instruction causes a protection fault if the result\nis negative.\n\nVERR (Verify for Reading) verifies a segment for reading and loads ZF with\n1 if that segment is readable from the current privilege level. VERR checks\nthat:\n\n    The selector points to a descriptor within the bounds of the GDT or\n     LDT.\n\n    It denotes a code or data segment descriptor.\n\n    The segment is readable and of appropriate privilege level.\n\nThe privilege check for data segments and nonconforming code segments is\nthat the DPL must be numerically greater than or equal to both the CPL and\nthe selector's RPL. Conforming segments are not checked for privilege level.\n\nVERW (Verify for Writing) provides the same capability as VERR for\nverifying writability. Like the VERR instruction, VERW loads ZF if the\nresult of the writability check is positive. The instruction checks that the\ndescriptor is within bounds, is a segment descriptor, is writable, and that\nits DPL is numerically greater or equal to both the CPL and the selector's\nRPL. Code segments are never writable, conforming or not.\n\n\n6.3.6.2  Pointer Integrity and RPL\n\nThe Requestor's Privilege Level (RPL) feature can prevent inappropriate use\nof pointers that could corrupt the operation of more privileged code or data\nfrom a less privileged level.\n\nA common example is a file system procedure, FREAD (file_id, n_bytes,\nbuffer_ptr). This hypothetical procedure reads data from a file into a\nbuffer, overwriting whatever is there. Normally, FREAD would be available at\nthe user level, supplying only pointers to the file system procedures and\ndata located and operating at a privileged level. Normally, such a procedure\nprevents user-level procedures from directly changing the file tables.\nHowever, in the absence of a standard protocol for checking pointer\nvalidity, a user-level procedure could supply a pointer into the file tables\nin place of its buffer pointer, causing the FREAD procedure to corrupt them\nunwittingly.\n\nUse of RPL can avoid such problems. The RPL field allows a privilege\nattribute to be assigned to a selector. This privilege attribute would\nnormally indicate the privilege level of the code which generated the\nselector. The 80386 processor automatically checks the RPL of any selector\nloaded into a segment register to determine whether the RPL allows access.\n\nTo take advantage of the processor's checking of RPL, the called procedure\nneed only ensure that all selectors passed to it have an RPL at least as\nhigh (numerically) as the original caller's CPL. This action guarantees that\nselectors are not more trusted than their supplier. If one of the selectors\nis used to access a segment that the caller would not be able to access\ndirectly, i.e., the RPL is numerically greater than the DPL, then a\nprotection fault will result when that selector is loaded into a segment\nregister.\n\nARPL (Adjust Requestor's Privilege Level) adjusts the RPL field of a\nselector to become the larger of its original value and the value of the RPL\nfield in a specified register. The latter is normally loaded from the image\nof the caller's CS register which is on the stack. If the adjustment changes\nthe selector's RPL, ZF (the zero flag) is set; otherwise, ZF is cleared.\n\n\n6.4  Page-Level Protection\n\nTwo kinds of protection are related to pages:\n\n  1.  Restriction of addressable domain.\n  2.  Type checking.\n\n\n6.4.1  Page-Table Entries Hold Protection Parameters\n\nFigure 6-10 highlights the fields of PDEs and PTEs that control access to\npages.\n\n\nFigure 6-10.  Protection Fields of Page Table Entries\n\n      31                                  12 11          7           0\n     ͻ\n     UR\n     PAGE FRAME ADDRESS 31..12AVAIL00DA00//P\n     SW\n     ͼ\n      R/W     - READ/WRITE\n      U/S     - USER/SUPERVISOR\n\n\n6.4.1.1  Restricting Addressable Domain\n\nThe concept of privilege for pages is implemented by assigning each page to\none of two levels:\n\n  1.  Supervisor level (U/S=0)  for the operating system and other systems\n      software and related data.\n\n  2.  User level (U/S=1)  for applications procedures and data.\n\nThe current level (U or S) is related to CPL.  If CPL is 0, 1, or 2, the\nprocessor is executing at supervisor level. If CPL is 3, the processor is\nexecuting at user level.\n\nWhen the processor is executing at supervisor level, all pages are\naddressable, but, when the processor is executing at user level, only pages\nthat belong to the user level are addressable.\n\n\n6.4.1.2  Type Checking\n\nAt the level of page addressing, two types are defined:\n\n  1.  Read-only access (R/W=0)\n  2.  Read/write access (R/W=1)\n\nWhen the processor is executing at supervisor level, all pages are both\nreadable and writable. When the processor is executing at user level, only\npages that belong to user level and are marked for read/write access are\nwritable; pages that belong to supervisor level are neither readable nor\nwritable from user level.\n\n\n6.4.2  Combining Protection of Both Levels of Page Tables\n\nFor any one page, the protection attributes of its page directory entry may\ndiffer from those of its page table entry. The 80386 computes the effective\nprotection attributes for a page by examining the protection attributes in\nboth the directory and the page table.  Table 6-5 shows the effective\nprotection provided by the possible combinations of protection attributes.\n\n\n6.4.3  Overrides to Page Protection\n\nCertain accesses are checked as if they are privilege-level 0 references,\neven if CPL = 3:\n\n    LDT, GDT, TSS, IDT references.\n    Access to inner stack during ring-crossing CALL/INT.\n\n\n6.5  Combining Page and Segment Protection\n\nWhen paging is enabled, the 80386 first evaluates segment protection, then\nevaluates page protection. If the processor detects a protection violation\nat either the segment or the page level, the requested operation cannot\nproceed; a protection exception occurs instead.\n\nFor example, it is possible to define a large data segment which has some\nsubunits that are read-only and other subunits that are read-write.  In this\ncase, the page directory (or page table) entries for the read-only subunits\nwould have the U/S and R/W bits set to x0, indicating no write rights for\nall the pages described by that directory entry (or for individual pages).\nThis technique might be used, for example, in a UNIX-like system to define\na large data segment, part of which is read only (for shared data or ROMmed\nconstants). This enables UNIX-like systems to define a \"flat\" data space as\none large segment, use \"flat\" pointers to address within this \"flat\" space,\nyet be able to protect shared data, shared files mapped into the virtual\nspace, and supervisor areas.\n\n\nTable 6-5. Combining Directory and Page Protection\n\nPage Directory Entry     Page Table Entry      Combined Protection\n  U/S          R/W         U/S      R/W          U/S         R/W\n\n  S-0          R-0         S-0      R-0           S           x\n  S-0          R-0         S-0      W-1           S           x\n  S-0          R-0         U-1      R-0           S           x\n  S-0          R-0         U-1      W-1           S           x\n  S-0          W-1         S-0      R-0           S           x\n  S-0          W-1         S-0      W-1           S           x\n  S-0          W-1         U-1      R-0           S           x\n  S-0          W-1         U-1      W-1           S           x\n  U-1          R-0         S-0      R-0           S           x\n  U-1          R-0         S-0      W-1           S           x\n  U-1          R-0         U-1      R-0           U           R\n  U-1          R-0         U-1      W-1           U           R\n  U-1          W-1         S-0      R-0           S           x\n  U-1          W-1         S-0      W-1           S           x\n  U-1          W-1         U-1      R-0           U           R\n  U-1          W-1         U-1      W-1           U           W\n\n\nNOTE\n  S  Supervisor\n  R  Read only\n  U  User\n  W  Read and Write\n  x indicates that when the combined U/S attribute is S, the R/W attribute\n  is not checked.\n\n\n\nChapter 7  Multitasking\n\n\n\nTo provide efficient, protected multitasking, the 80386 employs several\nspecial data structures. It does not, however, use special instructions to\ncontrol multitasking; instead, it interprets ordinary control-transfer\ninstructions differently when they refer to the special data structures. The\nregisters and data structures that support multitasking are:\n\n    Task state segment\n    Task state segment descriptor\n    Task register\n    Task gate descriptor\n\nWith these structures the 80386 can rapidly switch execution from one task\nto another, saving the context of the original task so that the task can be\nrestarted later. In addition to the simple task switch, the 80386 offers two\nother task-management features:\n\n  1.  Interrupts and exceptions can cause task switches (if needed in the\n      system design). The processor not only switches automatically to the\n      task that handles the interrupt or exception, but it automatically\n      switches back to the interrupted task when the interrupt or exception\n      has been serviced. Interrupt tasks may interrupt lower-priority\n      interrupt tasks to any depth.\n\n  2.  With each switch to another task, the 80386 can also switch to\n      another LDT and to another page directory. Thus each task can have a\n      different logical-to-linear mapping and a different linear-to-physical\n      mapping. This is yet another protection feature, because tasks can be\n      isolated and prevented from interfering with one another.\n\n\n7.1  Task State Segment\n\nAll the information the processor needs in order to manage a task is stored\nin a special type of segment, a task state segment (TSS). Figure 7-1 shows\nthe format of a TSS for executing 80386 tasks. (Another format is used for\nexecuting 80286 tasks; refer to Chapter 13.)\n\nThe fields of a TSS belong to two classes:\n\n  1.  A dynamic set that the processor updates with each switch from the\n      task. This set includes the fields that store:\n\n        The general registers (EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI).\n\n        The segment registers (ES, CS, SS, DS, FS, GS).\n\n        The flags register (EFLAGS).\n\n        The instruction pointer (EIP).\n\n        The selector of the TSS of the previously executing task (updated\n         only when a return is expected).\n\n  2.  A static set that the processor reads but does not change. This set\n      includes the fields that store:\n\n        The selector of the task's LDT.\n\n        The register (PDBR) that contains the base address of the task's\n         page directory (read only when paging is enabled).\n\n        Pointers to the stacks for privilege levels 0-2.\n\n        The T-bit (debug trap bit) which causes the processor to raise a\n         debug exception when a task switch occurs. (Refer to Chapter 12\n         for more information on debugging.)\n\n        The I/O map base (refer to Chapter 8 for more information on the\n         use of the I/O map).\n\nTask state segments may reside anywhere in the linear space. The only case\nthat requires caution is when the TSS spans a page boundary and the\nhigher-addressed page is not present. In this case, the processor raises an\nexception if it encounters the not-present page while reading the TSS during\na task switch. Such an exception can be avoided by either of two strategies:\n\n  1.  By allocating the TSS so that it does not cross a page boundary.\n\n  2.  By ensuring that both pages are either both present or both \n      not-present at the time of a task switch. If both pages are \n      not-present, then the page-fault handler must make both pages present \n      before restarting the instruction that caused the task switch.\n\n\nFigure 7-1.  80386 32-Bit Task State Segment\n\n      31              23              15              7             0\n     ͻ\n               I/O MAP BASE          0 0 0 0 0 0 0   0 0 0 0 0 0 T64\n     Ķ\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0              LDT              60\n     Ķ\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0              GS               5C\n     Ķ\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0              FS               58\n     Ķ\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0              DS               54\n     Ķ\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0              SS               50\n     Ķ\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0              CS               4C\n     Ķ\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0              ES               48\n     Ķ\n                                   EDI                              44\n     Ķ\n                                   ESI                              40\n     Ķ\n                                   EBP                              3C\n     Ķ\n                                   ESP                              38\n     Ķ\n                                   EBX                              34\n     Ķ\n                                   EDX                              30\n     ͹\n                                   ECX                              2C\n     Ķ\n                                   EAX                              28\n     Ķ\n                                 EFLAGS                             24\n     Ķ\n                         INSTRUCTION POINTER (EIP)                  20\n     Ķ\n                               CR3  (PDPR)                          1C\n     Ķ\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0              SS2              18\n     Ķ\n                                  ESP2                              14\n     Ķ\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0              SS1              10\n     Ķ\n                                  ESP1                              0C\n     Ķ\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0              SS0              8\n     Ķ\n                                  ESP0                              4\n     Ķ\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   BACK LINK TO PREVIOUS TSS   0\n     ͼ\n\n\nNOTE\n      0 MEANS INTEL RESERVED. DO NOT DEFINE.\n\n\n\n7.2  TSS Descriptor\n\nThe task state segment, like all other segments, is defined by a\ndescriptor. Figure 7-2 shows the format of a TSS descriptor.\n\nThe B-bit in the type field indicates whether the task is busy. A type code\nof 9 indicates a non-busy task; a type code of 11 indicates a busy task.\nTasks are not reentrant. The B-bit allows the processor to detect an attempt\nto switch to a task that is already busy.\n\nThe BASE, LIMIT, and DPL fields and the G-bit and P-bit have functions\nsimilar to their counterparts in data-segment descriptors. The LIMIT field,\nhowever, must have a value equal to or greater than 103. An attempt to\nswitch to a task whose TSS descriptor has a limit less that 103 causes an\nexception. A larger limit is permissible, and a larger limit is required if\nan I/O permission map is present. A larger limit may also be convenient for\nsystems software if additional data is stored in the same segment as the\nTSS.\n\nA procedure that has access to a TSS descriptor can cause a task switch. In\nmost systems the DPL fields of TSS descriptors should be set to zero, so\nthat only trusted software has the right to perform task switching.\n\nHaving access to a TSS-descriptor does not give a procedure the right to\nread or modify a TSS. Reading and modification can be accomplished only with\nanother descriptor that redefines the TSS as a data segment. An attempt to\nload a TSS descriptor into any of the segment registers (CS, SS, DS, ES, FS,\nGS) causes an exception.\n\nTSS descriptors may reside only in the GDT. An attempt to identify a TSS\nwith a selector that has TI=1 (indicating the current LDT) results in an\nexception.\n\n\nFigure 7-2.  TSS Descriptor for 32-bit TSS\n\n  31                23                15                7               0\n ͻ\n                     A LIMIT           TYPE                    \n    BASE 31..24   G00V         P DPL             BASE 23..16    4\n                     L  19..16       010B1                 \n Ķ\n                                                                       \n              BASE 15..0                         LIMIT 15..0            0\n                                                                       \n ͼ\n\n\n7.3  Task Register\n\nThe task register (TR) identifies the currently executing task by pointing\nto the TSS. Figure 7-3 shows the path by which the processor accesses the\ncurrent TSS.\n\nThe task register has both a \"visible\" portion (i.e., can be read and\nchanged by instructions) and an \"invisible\" portion (maintained by the\nprocessor to correspond to the visible portion; cannot be read by any\ninstruction). The selector in the visible portion selects a TSS descriptor\nin the GDT. The processor uses the invisible portion to cache the base and\nlimit values from the TSS descriptor. Holding the base and limit in a\nregister makes execution of the task more efficient, because the processor\ndoes not need to repeatedly fetch these values from memory when it\nreferences the TSS of the current task.\n\nThe instructions LTR and STR are used to modify and read the visible\nportion of the task register. Both instructions take one operand, a 16-bit\nselector located in memory or in a general register.\n\nLTR (Load task register) loads the visible portion of the task register\nwith the selector operand, which must select a TSS descriptor in the GDT.\nLTR also loads the invisible portion with information from the TSS\ndescriptor selected by the operand. LTR is a privileged instruction; it may\nbe executed only when CPL is zero. LTR is generally used during system\ninitialization to give an initial value to the task register; thereafter,\nthe contents of TR are changed by task switch operations.\n\nSTR (Store task register) stores the visible portion of the task register\nin a general register or memory word. STR is not privileged.\n\n\nFigure 7-3.  Task Register \n\n                          ͻ\n                                                   \n                                                   \n                                 TASK STATE        \n                                  SEGMENT          \u0011Ŀ\n                                                             \n                                                             \n                          ͼ          \n           16-BIT VISIBLE             \u001e                        \n              REGISTER                   HIDDEN REGISTER      \n       ͻ\n    TR       SELECTOR            (BASE)               (LIMT)       \n       ͼ\n                                     \u001e                     \u001e\n                                     Ŀ   \n                           GLOBAL DESCRIPTOR TABLE        \n                         ͸      \n                         |     TSS DESCRIPTOR      |      \n                         ͻ      \n                                                  \n                         ͹       \n                 \u0010                        \n                          ͼ\n                          |                         |\n                          ;\n\n\n7.4  Task Gate Descriptor\n\nA task gate descriptor provides an indirect, protected reference to a TSS.\nFigure 7-4 illustrates the format of a task gate.\n\nThe SELECTOR field of a task gate must refer to a TSS descriptor. The value\nof the RPL in this selector is not used by the processor.\n\nThe DPL field of a task gate controls the right to use the descriptor to\ncause a task switch. A procedure may not select a task gate descriptor\nunless the maximum of the selector's RPL and the CPL of the procedure is\nnumerically less than or equal to the DPL of the descriptor. This constraint\nprevents untrusted procedures from causing a task switch. (Note that when a\ntask gate is used, the DPL of the target TSS descriptor is not used for\nprivilege checking.)\n\nA procedure that has access to a task gate has the power to cause a task\nswitch, just as a procedure that has access to a TSS descriptor. The 80386\nhas task gates in addition to TSS descriptors to satisfy three needs:\n\n  1.  The need for a task to have a single busy bit. Because the busy-bit\n      is stored in the TSS descriptor, each task should have only one such\n      descriptor. There may, however, be several task gates that select the\n      single TSS descriptor.\n\n  2.  The need to provide selective access to tasks. Task gates fulfill\n      this need, because they can reside in LDTs and can have a DPL that is\n      different from the TSS descriptor's DPL. A procedure that does not\n      have sufficient privilege to use the TSS descriptor in the GDT (which\n      usually has a DPL of 0) can still switch to another task if it has\n      access to a task gate for that task in its LDT. With task gates,\n      systems software can limit the right to cause task switches to\n      specific tasks.\n\n  3.  The need for an interrupt or exception to cause a task switch. Task\n      gates may also reside in the IDT, making it possible for interrupts\n      and exceptions to cause task switching. When interrupt or exception\n      vectors to an IDT entry that contains a task gate, the 80386 switches\n      to the indicated task. Thus, all tasks in the system can benefit from\n      the protection afforded by isolation from interrupt tasks.\n\nFigure 7-5 illustrates how both a task gate in an LDT and a task gate in\nthe IDT can identify the same task.\n\n\nFigure 7-4.  Task Gate Descriptor\n\n   31                23               15                7             0\n  ͻ\n                 \n  (NOT USED)P DPL 0 0 1 0 1(NOT USED) 4\n                 \n  Ķ\n                                    \n                SELECTOR            (NOT USED) 0\n                                    \n  ͼ\n\n\nFigure 7-5.  Task Gate Indirectly Identifies Task\n\n         LOCAL DESCRIPTOR TABLE              INTERRUPT DESCRIPTOR TABLE\n       ͸           ͸\n       |                         |           |                         |\n       |        TASK GATE        |           |        TASK GATE        |\n       ͻ           ͻ\n                                                              \n       Ķ           Ķ\n    Ķ                                Ķ                        \n      ͼ          ͼ\n      |                         |          |                         |\n      |                         |          |                         |\n      ;          ;\n    Ŀ  \n                           GLOBAL DESCRIPTOR TABLE\n                         ͸\n                         |                         |\n                         |     TASK DESCRIPTOR     |\n                         ͻ\n                                               \n                       \u0010Ķ\n                     \u0010                        Ŀ\n                           ͼ  \n                           |                         |  \n                           |                         |  \n                           ;  \n                                                        \n                           ͻ  \n                                                      \n                                                      \n                                                      \n                                  TASK STATE          \n                                    SEGMENT           \n                                                      \n                                                      \n                                                      \n                           ͼ\u0011\n\n\n7.5  Task Switching\n\nThe 80386 switches execution to another task in any of four cases:\n\n  1.  The current task executes a JMP or CALL that refers to a TSS\n      descriptor.\n\n  2.  The current task executes a JMP or CALL that refers to a task gate.\n\n  3.  An interrupt or exception vectors to a task gate in the IDT.\n\n  4.  The current task executes an IRET when the NT flag is set.\n\nJMP, CALL, IRET, interrupts, and exceptions are all ordinary mechanisms of\nthe 80386 that can be used in circumstances that do not require a task\nswitch. Either the type of descriptor referenced or the NT (nested task) bit\nin the flag word distinguishes between the standard mechanism and the\nvariant that causes a task switch.\n\nTo cause a task switch, a JMP or CALL instruction can refer either to a TSS\ndescriptor or to a task gate. The effect is the same in either case: the\n80386 switches to the indicated task.\n\nAn exception or interrupt causes a task switch when it vectors to a task\ngate in the IDT. If it vectors to an interrupt or trap gate in the IDT, a\ntask switch does not occur. Refer to Chapter 9 for more information on the\ninterrupt mechanism.\n\nWhether invoked as a task or as a procedure of the interrupted task, an\ninterrupt handler always returns control to the interrupted procedure in the\ninterrupted task. If the NT flag is set, however, the handler is an\ninterrupt task, and the IRET switches back to the interrupted task.\n\nA task switching operation involves these steps:\n\n  1.  Checking that the current task is allowed to switch to the designated\n      task. Data-access privilege rules apply in the case of JMP or CALL\n      instructions. The DPL of the TSS descriptor or task gate must be less\n      than or equal to the maximum of CPL and the RPL of the gate selector.\n      Exceptions, interrupts, and IRETs are permitted to switch tasks\n      regardless of the DPL of the target task gate or TSS descriptor.\n\n  2.  Checking that the TSS descriptor of the new task is marked present\n      and has a valid limit. Any errors up to this point occur in the\n      context of the outgoing task. Errors are restartable and can be\n      handled in a way that is transparent to applications procedures.\n\n  3.  Saving the state of the current task. The processor finds the base\n      address of the current TSS cached in the task register. It copies the\n      registers into the current TSS (EAX, ECX, EDX, EBX, ESP, EBP, ESI,\n      EDI, ES, CS, SS, DS, FS, GS, and the flag register). The EIP field of\n      the TSS points to the instruction after the one that caused the task\n      switch.\n\n  4.  Loading the task register with the selector of the incoming task's\n      TSS descriptor, marking the incoming task's TSS descriptor as busy,\n      and setting the TS (task switched) bit of the MSW. The selector is\n      either the operand of a control transfer instruction or is taken from\n      a task gate.\n\n  5.  Loading the incoming task's state from its TSS and resuming\n      execution. The registers loaded are the LDT register; the flag\n      register; the general registers EIP, EAX, ECX, EDX, EBX, ESP, EBP,\n      ESI, EDI; the segment registers ES, CS, SS, DS, FS, and GS; and PDBR.\n      Any errors detected in this step occur in the context of the incoming\n      task. To an exception handler, it appears that the first instruction\n      of the new task has not yet executed.\n\nNote that the state of the outgoing task is always saved when a task switch\noccurs. If execution of that task is resumed, it starts after the\ninstruction that caused the task switch. The registers are restored to the\nvalues they held when the task stopped executing.\n\nEvery task switch sets the TS (task switched) bit in the MSW (machine\nstatus word). The TS flag is useful to systems software when a coprocessor\n(such as a numerics coprocessor) is present. The TS bit signals that the\ncontext of the coprocessor may not correspond to the current 80386 task.\nChapter 11 discusses the TS bit and coprocessors in more detail.\n\nException handlers that field task-switch exceptions in the incoming task\n(exceptions due to tests 4 thru 16 of Table 7-1) should be cautious about\ntaking any action that might load the selector that caused the exception.\nSuch an action will probably cause another exception, unless the exception\nhandler first examines the selector and fixes any potential problem.\n\nThe privilege level at which execution resumes in the incoming task is\nneither restricted nor affected by the privilege level at which the outgoing\ntask was executing. Because the tasks are isolated by their separate address\nspaces and TSSs and because privilege rules can be used to prevent improper\naccess to a TSS, no privilege rules are needed to constrain the relation\nbetween the CPLs of the tasks. The new task begins executing at the\nprivilege level indicated by the RPL of the CS selector value that is loaded\nfrom the TSS.\n\n\nTable 7-1. Checks Made during a Task Switch\n\n\nTest     Test Description                   Exception\nNP = Segment-not-present exception, GP = General protection fault, TS =\nInvalid TSS, SF = Stack fault   Error Code Selects\n\n  1      Incoming TSS descriptor is         NP           Incoming TSS\n         present\n  2      Incoming TSS descriptor is         GP           Incoming TSS\n         marked not-busy\n  3      Limit of incoming TSS is           TS           Incoming TSS\n         greater than or equal to 103\n\n              All register and selector values are loaded \n\n  4      LDT selector of incoming           TS           Incoming TSS\n         task is valid\n  5      LDT of incoming task is            TS           Incoming TSS\n         present\n  6      CS selector is valid\nValidity tests of a selector check that the selector is in the proper\ntable (eg., the LDT selector refers to the GDT), lies within the bounds of\nthe table, and refers to the proper type of descriptor (e.g., the LDT\nselector refers to an LDT descriptor).              TS           Code segment\n  7      Code segment is present            NP           Code segment\n  8      Code segment DPL matches           TS           Code segment\n         CS RPL\n  9      Stack segment is valid\nValidity tests of a selector check that the selector is in the proper\ntable (eg., the LDT selector refers to the GDT), lies within the bounds of\nthe table, and refers to the proper type of descriptor (e.g., the LDT\nselector refers to an LDT descriptor).            GP           Stack segment\n 10      Stack segment is present           SF           Stack segment\n 11      Stack segment DPL = CPL            SF           Stack segment\n 12      Stack-selector RPL = CPL           GP           Stack segment\n 13      DS, ES, FS, GS selectors are       GP           Segment\n         valid\nValidity tests of a selector check that the selector is in the proper\ntable (eg., the LDT selector refers to the GDT), lies within the bounds of\nthe table, and refers to the proper type of descriptor (e.g., the LDT\nselector refers to an LDT descriptor).\n\n\n 14      DS, ES, FS, GS segments            GP           Segment\n         are readable\n 15      DS, ES, FS, GS segments            NP           Segment\n         are present\n 16      DS, ES, FS, GS segment DPL         GP           Segment\n          CPL (unless these are\n         conforming segments)\n\n\n7.6  Task Linking\n\nThe back-link field of the TSS and the NT (nested task) bit of the flag\nword together allow the 80386 to automatically return to a task that CALLed\nanother task or was interrupted by another task. When a CALL instruction, an\ninterrupt instruction, an external interrupt, or an exception causes a\nswitch to a new task, the 80386 automatically fills the back-link of the new\nTSS with the selector of the outgoing task's TSS and, at the same time,\nsets the NT bit in the new task's flag register. The NT flag indicates\nwhether the back-link field is valid. The new task releases control by\nexecuting an IRET instruction. When interpreting an IRET, the 80386 examines\nthe NT flag. If NT is set, the 80386 switches back to the task selected by\nthe back-link field. Table 7-2 summarizes the uses of these fields.\n\n\nTable 7-2. Effect of Task Switch on BUSY, NT, and Back-Link\n\nAffected Field      Effect of JMP      Effect of            Effect of\n                    Instruction        CALL Instruction     IRET Instruction\n\nBusy bit of         Set, must be       Set, must be 0       Unchanged,\nincoming task       0 before           before               must be set\n\nBusy bit of         Cleared            Unchanged            Cleared\noutgoing task                          (already set)\n\nNT bit of           Cleared            Set                  Unchanged\nincoming task\n\nNT bit of           Unchanged          Unchanged            Cleared\noutgoing task\n\nBack-link of        Unchanged          Set to outgoing      Unchanged\nincoming task                          TSS selector\n\nBack-link of        Unchanged          Unchanged            Unchanged\noutgoing task\n\n\n7.6.1  Busy Bit Prevents Loops\n\nThe B-bit (busy bit) of the TSS descriptor ensures the integrity of the\nback-link. A chain of back-links may grow to any length as interrupt tasks\ninterrupt other interrupt tasks or as called tasks call other tasks. The\nbusy bit ensures that the CPU can detect any attempt to create a loop. A\nloop would indicate an attempt to reenter a task that is already busy;\nhowever, the TSS is not a reentrable resource.\n\nThe processor uses the busy bit as follows:\n\n  1.  When switching to a task, the processor automatically sets the busy\n      bit of the new task.\n\n  2.  When switching from a task, the processor automatically clears the\n      busy bit of the old task if that task is not to be placed on the\n      back-link chain (i.e., the instruction causing the task switch is JMP\n      or IRET). If the task is placed on the back-link chain, its busy bit\n      remains set.\n\n  3.  When switching to a task, the processor signals an exception if the\n      busy bit of the new task is already set.\n\nBy these actions, the processor prevents a task from switching to itself or\nto any task that is on a back-link chain, thereby preventing invalid reentry\ninto a task.\n\nThe busy bit is effective even in multiprocessor configurations, because\nthe processor automatically asserts a bus lock when it sets or clears the\nbusy bit. This action ensures that two processors do not invoke the same\ntask at the same time. (Refer to Chapter 11 for more on multiprocessing.)\n\n\n7.6.2  Modifying Task Linkages\n\nAny modification of the linkage order of tasks should be accomplished only\nby software that can be trusted to correctly update the back-link and the\nbusy-bit. Such changes may be needed to resume an interrupted task before\nthe task that interrupted it. Trusted software that removes a task from the\nback-link chain must follow one of the following policies:\n\n  1.  First change the back-link field in the TSS of the interrupting task,\n      then clear the busy-bit in the TSS descriptor of the task removed from\n      the list.\n\n  2.  Ensure that no interrupts occur between updating the back-link chain\n      and the busy bit.\n\n\n7.7  Task Address Space\n\nThe LDT selector and PDBR fields of the TSS give software systems designers\nflexibility in utilization of segment and page mapping features of the\n80386. By appropriate choice of the segment and page mappings for each task,\ntasks may share address spaces, may have address spaces that are largely\ndistinct from one another, or may have any degree of sharing between these\ntwo extremes.\n\nThe ability for tasks to have distinct address spaces is an important\naspect of 80386 protection. A module in one task cannot interfere with a\nmodule in another task if the modules do not have access to the same address\nspaces. The flexible memory management features of the 80386 allow systems\ndesigners to assign areas of shared address space to those modules of\ndifferent tasks that are designed to cooperate with each other.\n\n\n7.7.1  Task Linear-to-Physical Space Mapping\n\nThe choices for arranging the linear-to-physical mappings of tasks fall\ninto two general classes:\n\n  1.  One linear-to-physical mapping shared among all tasks.\n\n      When paging is not enabled, this is the only possibility. Without page\n      tables, all linear addresses map to the same physical addresses.\n\n      When paging is enabled, this style of linear-to-physical mapping \n      results from using one page directory for all tasks. The linear space\n      utilized may exceed the physical space available if the operating \n      system also implements page-level virtual memory.\n\n  2.  Several partially overlapping linear-to-physical mappings.\n\n      This style is implemented by using a different page directory for each\n      task. Because the PDBR (page directory base register) is loaded from \n      the TSS with each task switch, each task may have a different page \n      directory.\n\nIn theory, the linear address spaces of different tasks may map to\ncompletely distinct physical addresses. If the entries of different page\ndirectories point to different page tables and the page tables point to\ndifferent pages of physical memory, then the tasks do not share any physical\naddresses.\n\nIn practice, some portion of the linear address spaces of all tasks must\nmap to the same physical addresses. The task state segments must lie in a\ncommon space so that the mapping of TSS addresses does not change while the\nprocessor is reading and updating the TSSs during a task switch. The linear\nspace mapped by the GDT should also be mapped to a common physical space;\notherwise, the purpose of the GDT is defeated. Figure 7-6 shows how the\nlinear spaces of two tasks can overlap in the physical space by sharing\npage tables.\n\n\n7.7.2  Task Logical Address Space\n\nBy itself, a common linear-to-physical space mapping does not enable\nsharing of data among tasks. To share data, tasks must also have a common\nlogical-to-linear space mapping; i.e., they must also have access to\ndescriptors that point into a shared linear address space. There are three\nways to create common logical-to-physical address-space mappings:\n\n  1.  Via the GDT. All tasks have access to the descriptors in the GDT. If\n      those descriptors point into a linear-address space that is mapped to\n      a common physical-address space for all tasks, then the tasks can\n      share data and instructions.\n\n  2.  By sharing LDTs. Two or more tasks can use the same LDT if the LDT\n      selectors in their TSSs select the same LDT segment. Those\n      LDT-resident descriptors that point into a linear space that is mapped\n      to a common physical space permit the tasks to share physical memory.\n      This method of sharing is more selective than sharing by the GDT; the\n      sharing can be limited to specific tasks. Other tasks in the system\n      may have different LDTs that do not give them access to the shared\n      areas.\n\n  3.  By descriptor aliases in LDTs. It is possible for certain descriptors\n      of different LDTs to point to the same linear address space. If that\n      linear address space is mapped to the same physical space by the page\n      mapping of the tasks involved, these descriptors permit the tasks to\n      share the common space. Such descriptors are commonly called\n      \"aliases\". This method of sharing is even more selective than the\n      prior two; other descriptors in the LDTs may point to distinct linear\n      addresses or to linear addresses that are not shared.\n\n\nFigure 7-6. Partially-Overlapping Linear Spaces\n\n         TSSs                                              PAGE FRAMES\n                                                          ͻ\n      TASK A TSS    PAGE DIRECTORIES     PAGE TABLES        TASK A  \n     ͻ     ͻ     ͻ  \u0010   PAGE   \n                                                   ͼ\n                    ͹     ͹    ͻ\n                                        PTE        TASK A  \n                    ͹     ͹  \u0010   PAGE   \n                                        PTE      ͼ\n     ͹     ͹     ͹     ͻ\n        PDBR   \u0010    PDE    \u0010    PTE    Ŀ    TASK A  \n     ͹     ͹     ͼ  \u0010   PAGE   \n                        PDE    Ŀ    SHARED PT       ͼ\n     ͼ     ͼ    ͻ     ͻ\n                                                         SHARED  \n                                       ͹  \u0010   PAGE   \n                                                      ͼ\n                                       ͹    ͻ\n                                           PTE        SHARED  \n                                       ͹  \u0010   PAGE   \n                                     \u0010    PTE      ͼ\n      TASK B TSS                       ͼ     ͻ\n     ͻ     ͻ                        TASK B  \n                                                 \u0010   PAGE   \n                    ͹    ͻ    ͼ\n                                                  ͻ\n                    ͹    ͹      TASK B  \n                                                \u0010   PAGE   \n     ͹     ͹    ͹   ͼ\n        PDBR   \u0010    PDE          PTE       PAGE FRAMES\n     ͹     ͹     ͹   \n                        PDE    \u0010    PTE    \n     ͼ     ͼ     ͼ\n         TSSs       PAGE DIRECTORIES     PAGE TABLES\n\n\nChapter 8  Input/Output\n\n\n\nThis chapter presents the I/O features of the 80386 from the following\nperspectives:\n\n    Methods of addressing I/O ports\n\n    Instructions that cause I/O operations\n\n    Protection as it applies to the use of I/O instructions and I/O port\n     addresses.\n\n\n8.1  I/O Addressing\n\nThe 80386 allows input/output to be performed in either of two ways:\n\n    By means of a separate I/O address space (using specific I/O\n     instructions)\n\n    By means of memory-mapped I/O (using general-purpose operand\n     manipulationinstructions).\n\n\n8.1.1  I/O Address Space\n\nThe 80386 provides a separate I/O address space, distinct from physical\nmemory, that can be used to address the input/output ports that are used for\nexternal 16 devices. The I/O address space consists of 2^(16) (64K)\nindividually addressable 8-bit ports; any two consecutive 8-bit ports can be\ntreated as a 16-bit port; and four consecutive 8-bit ports can be treated\nas a 32-bit port. Thus, the I/O address space can accommodate up to 64K\n8-bit ports, up to 32K 16-bit ports, or up to 16K 32-bit ports.\n\nThe program can specify the address of the port in two ways. Using an\nimmediate byte constant, the program can specify:\n\n    256 8-bit ports numbered 0 through 255.\n    128 16-bit ports numbered 0, 2, 4, . . . , 252, 254.\n    64 32-bit ports numbered 0, 4, 8, . . . , 248, 252.\n\nUsing a value in DX, the program can specify:\n\n    8-bit ports numbered 0 through 65535\n    16-bit ports numbered 0, 2, 4, . . . , 65532, 65534\n    32-bit ports numbered 0, 4, 8, . . . , 65528, 65532\n\nThe 80386 can transfer 32, 16, or 8 bits at a time to a device located in\nthe I/O space. Like doublewords in memory, 32-bit ports should be aligned at\naddresses evenly divisible by four so that the 32 bits can be transferred in\na single bus access. Like words in memory, 16-bit ports should be aligned at\neven-numbered addresses so that the 16 bits can be transferred in a single\nbus access. An 8-bit port may be located at either an even or odd address.\n\nThe instructions IN and OUT move data between a register and a port in the\nI/O address space. The instructions INS and OUTS move strings of data\nbetween the memory address space and ports in the I/O address space.\n\n\n8.1.2  Memory-Mapped I/O\n\nI/O devices also may be placed in the 80386 memory address space. As long\nas the devices respond like memory components, they are indistinguishable to\nthe processor.\n\nMemory-mapped I/O provides additional programming flexibility. Any\ninstruction that references memory may be used to access an I/O port located\nin the memory space. For example, the MOV instruction can transfer data\nbetween any register and a port; and the AND, OR, and TEST instructions may\nbe used to manipulate bits in the internal registers of a device (see Figure\n8-1). Memory-mapped I/O performed via the full instruction set maintains\nthe full complement of addressing modes for selecting the desired I/O\ndevice (e.g., direct address, indirect address, base register, index\nregister, scaling).\n\nMemory-mapped I/O, like any other memory reference, is subject to access\nprotection and control when executing in protected mode. Refer to Chapter 6\nfor a discussion of memory protection.\n\n\n8.2  I/O Instructions\n\nThe I/O instructions of the 80386 provide access to the processor's I/O\nports for the transfer of data to and from peripheral devices. These\ninstructions have as one operand the address of a port in the I/O address\nspace. There are two classes of I/O instruction:\n\n  1.  Those that transfer a single item (byte, word, or doubleword) located\n      in a register.\n\n  2.  Those that transfer strings of items (strings of bytes, words, or\n      doublewords) located in memory. These are known as \"string I/O\n      instructions\" or \"block I/O instructions\".\n\n\n8.2.1  Register I/O Instructions\n\nThe I/O instructions IN and OUT are provided to move data between I/O ports\nand the EAX (32-bit I/O), the AX (16-bit I/O), or AL (8-bit I/O) general\nregisters. IN and OUT instructions address I/O ports either directly, with\nthe address of one of up to 256 port addresses coded in the instruction, or\nindirectly via the DX register to one of up to 64K port addresses.\n\nIN (Input from Port) transfers a byte, word, or doubleword from an input\nport to AL, AX, or EAX. If a program specifies AL with the IN instruction,\nthe processor transfers 8 bits from the selected port to AL. If a program\nspecifies AX with the IN instruction, the processor transfers 16 bits from\nthe port to AX. If a program specifies EAX with the IN instruction, the\nprocessor transfers 32 bits from the port to EAX.\n\nOUT (Output to Port) transfers a byte, word, or doubleword to an output\nport from AL, AX, or EAX. The program can specify the number of the port\nusing the same methods as the IN instruction.\n\n\nFigure 8-1.  Memory-Mapped I/O\n\n                MEMORY\n             ADDRESS SPACE                        I/O DEVICE 1\n           ͻ                  ͻ\n                                             INTERNAL REGISTER \n           Ķ         ĺͻ \n                                                             \n           Ķ         ĺͼ \n                                            ͼ\n                          \n                          \n                          \n                                                I/O DEVICE 2\n                                            ͻ\n                                             INTERNAL REGISTER \n           Ķ         ĺͻ \n                                                             \n           Ķ         ĺͼ \n                                            ͼ\n           ͼ\n\n\n8.2.2  Block I/O Instructions\n\nThe block (or string) I/O instructions INS and OUTS move blocks of data\nbetween I/O ports and memory space. Block I/O instructions use the DX\nregister to specify the address of a port in the I/O address space. INS and\nOUTS use DX to specify:\n\n    8-bit ports numbered 0 through 65535\n    16-bit ports numbered 0, 2, 4, . . . , 65532, 65534\n    32-bit ports numbered 0, 4, 8, . . . , 65528, 65532\n\nBlock I/O instructions use either SI or DI to designate the source or\ndestination memory address. For each transfer, SI or DI are automatically\neither incremented or decremented as specified by the direction bit in the\nflags register.\n\nINS and OUTS, when used with repeat prefixes, cause block input or output\noperations. REP, the repeat prefix, modifies INS and OUTS to provide a means\nof transferring blocks of data between an I/O port and memory. These block\nI/O instructions are string primitives (refer also to Chapter 3 for more on\nstring primitives). They simplify programming and increase the speed of data\ntransfer by eliminating the need to use a separate LOOP instruction or an\nintermediate register to hold the data.\n\nThe string I/O primitives can operate on byte strings, word strings, or\ndoubleword strings. After each transfer, the memory address in ESI or EDI is\nupdated by 1 for byte operands, by 2 for word operands, or by 4 for\ndoubleword operands. The value in the direction flag (DF) determines whether\nthe processor automatically increments ESI or EDI (DF=0) or whether it\nautomatically decrements these registers (DF=1).\n\nINS (Input String from Port) transfers a byte or a word string element from\nan input port to memory. The mnemonics INSB, INSW, and INSD are variants\nthat explicitly specify the size of the operand. If a program specifies\nINSB, the processor transfers 8 bits from the selected port to the memory\nlocation indicated by ES:EDI. If a program specifies INSW, the processor\ntransfers 16 bits from the port to the memory location indicated by ES:EDI.\nIf a program specifies INSD, the processor transfers 32 bits from the port\nto the memory location indicated by ES:EDI. The destination segment register\nchoice (ES) cannot be changed for the INS instruction. Combined with the REP\nprefix, INS moves a block of information from an input port to a series of\nconsecutive memory locations.\n\nOUTS (Output String to Port) transfers a byte, word, or doubleword string\nelement to an output port from memory. The mnemonics OUTSB, OUTSW, and OUTSD\nare variants that explicitly specify the size of the operand. If a program\nspecifies OUTSB, the processor transfers 8 bits from the memory location\nindicated by ES:EDI to the the selected port. If a program specifies OUTSW,\nthe processor transfers 16 bits from the memory location indicated by ES:EDI\nto the the selected port. If a program specifies OUTSD, the processor\ntransfers 32 bits from the memory location indicated by ES:EDI to the the\nselected port. Combined with the REP prefix, OUTS moves a block of\ninformation from a series of consecutive memory locations indicated by\nDS:ESI to an output port.\n\n\n8.3  Protection and I/O\n\nTwo mechanisms provide protection for I/O functions:\n\n  1.  The IOPL field in the EFLAGS register defines the right to use\n      I/O-related instructions.\n\n  2.  The I/O permission bit map of a 80386 TSS segment defines the right\n      to use ports in the I/O address space.\n\nThese mechanisms operate only in protected mode, including virtual 8086\nmode; they do not operate in real mode. In real mode, there is no protection\nof the I/O space; any procedure can execute I/O instructions, and any I/O\nport can be addressed by the I/O instructions.\n\n\n8.3.1  I/O Privilege Level\n\nInstructions that deal with I/O need to be restricted but also need to be\nexecuted by procedures executing at privilege levels other than zero. For\nthis reason, the processor uses two bits of the flags register to store the\nI/O privilege level (IOPL). The IOPL defines the privilege level\nneeded to execute I/O-related instructions.\n\nThe following instructions can be executed only if CPL  IOPL:\n\nIN       Input\nINS      Input String\nOUT      Output\nOUTS     Output String\nCLI      Clear Interrupt-Enable Flag\nSTI      Set Interrupt-Enable\n\nThese instructions are called \"sensitive\" instructions, because they are\nsensitive to IOPL.\n\nTo use sensitive instructions, a procedure must execute at a privilege\nlevel at least as privileged as that specified by the IOPL (CPL  IOPL). Any\nattempt by a less privileged procedure to use a sensitive instruction\nresults in a general protection exception.\n\nBecause each task has its own unique copy of the flags register, each task\ncan have a different IOPL. A task whose primary function is to perform I/O\n(a device driver) can benefit from having an IOPL of three, thereby\npermitting all procedures of the task to performI/O. Other tasks typically\nhave IOPL set to zero or one, reserving the right to perform I/O\ninstructions for the most privileged procedures.\n\nA task can change IOPL only with the POPF instruction; however, such\nchanges are privileged. No procedure may alter IOPL (the I/O privilege level\nin the flag register) unless the procedure is executing at privilege level\n0. An attempt by a less privileged procedure to alter IOPL does not result\nin an exception; IOPL simply remains unaltered.\n\nThe POPF instruction may be used in addition to CLI and STI to alter the\ninterrupt-enable flag (IF); however, changes to IF by POPF are\nIOPL-sensitive. A procedure may alter IF with a POPF instruction only when\nexecuting at a level that is at least as privileged as IOPL. An attempt by a\nless privileged procedure to alter IF in this manner does not result in an\nexception; IF simply remains unaltered.\n\n\n8.3.2  I/O Permission Bit Map\n\nThe I/O instructions that directly refer to addresses in the processor's\nI/O space are IN, INS, OUT, OUTS. The 80386 has the ability to selectively\ntrap references to specific I/O addresses. The structure that enables\nselective trapping is the I/O Permission Bit Map in the TSS segment (see\nFigure 8-2). The I/O permission map is a bit vector. The size of the map\nand its location in the TSS segment are variable. The processor locates the\nI/O permission map by means of the I/O map base field in the fixed portion\nof the TSS. The I/O map base field is 16 bits wide and contains the offset\nof the beginning of the I/O permission map. The upper limit of the I/O\npermission map is the same as the limit of the TSS segment.\n\nIn protected mode, when it encounters an I/O instruction (IN, INS, OUT, or\nOUTS), the processor first checks whether CPL  IOPL. If this condition is\ntrue, the I/O operation may proceed. If not true, the processor checks the\nI/O permission map. (In virtual 8086 mode, the processor consults the map\nwithout regard for IOPL. Refer to Chapter 15.)\n\nEach bit in the map corresponds to an I/O port byte address; for example,\nthe bit for port 41 is found at I/O map base + 5, bit offset 1. The\nprocessor tests all the bits that correspond to the I/O addresses spanned by\nan I/O operation; for example, a doubleword operation tests four bits\ncorresponding to four adjacent byte addresses. If any tested bit is set,\nthe processor signals a general protection exception. If all the tested bits\nare zero, the I/O operation may proceed.\n\nIt is not necessary for the I/O permission map to represent all the I/O\naddresses. I/O addresses not spanned by the map are treated as if they had\none bits in the map. For example, if TSS limit is equal to I/O map base +\n31, the first 256 I/O ports are mapped; I/O operations on any port greater\nthan 255 cause an exception.\n\nIf I/O map base is greater than or equal to TSS limit, the TSS segment has\nno I/O permission map, and all I/O instructions in the 80386 program cause\nexceptions when CPL > IOPL.\n\nBecause the I/O permission map is in the TSS segment, different tasks can\nhave different maps. Thus, the operating system can allocate ports to a task\nby changing the I/O permission map in the task's TSS.\n\n\nFigure 8-2.  I/O Address Bit Map\n\n                                    TSS SEGMEMT\n\n                        31       23       15       7      0\n                       ͻ\n              LIMIT\u0010                                   \n                                         \n                       \u0007                                   \u0007\n                       \u0007      I/O PERMISSION BIT MAP       \u0007\n                       \u0007                                   \u0007\n                                         \n                 \u0010                                   \n                      Ķ\n                      \u0007                                   \u0007\n                      \u0007                                   \u0007\n                      \u0007                                   \u0007\n                      Ķ\n                 Ķ  I/O MAP BASE   uuuuuuuu uuuuuuuT64\n                       Ķ\n                       00000000 00000000       LOT       60\n                       Ķ\n                       00000000 00000000       GS        5C\n                       Ķ\n                                                          58\n                       \u0007                                   \u0007\n                       \u0007                                   \u0007\n                       \u0007                                   \u0007\n                                                          4\n                       Ķ\n                       00000000 00000000  TSS BACK LINK  0\n                       ͼ\n\n\nChapter 9  Exceptions and Interrupts\n\n\n\nInterrupts and exceptions are special kinds of control transfer; they work\nsomewhat like unprogrammed CALLs. They alter the normal program flow to\nhandle external events or to report errors or exceptional conditions. The\ndifference between interrupts and exceptions is that interrupts are used to\nhandle asynchronous events external to the processor, but exceptions handle\nconditions detected by the processor itself in the course of executing\ninstructions.\n\nThere are two sources for external interrupts and two sources for\nexceptions:\n\n  1.  Interrupts\n\n        Maskable interrupts, which are signalled via the INTR pin.\n\n        Nonmaskable interrupts, which are signalled via the NMI\n         (Non-Maskable Interrupt) pin.\n\n  2.  Exceptions\n\n        Processor detected. These are further classified as faults, traps,\n         and aborts.\n\n        Programmed. The instructions INTO, INT 3, INT n, and BOUND can\n         trigger exceptions. These instructions are often called \"software\n         interrupts\", but the processor handles them as exceptions.\n\nThis chapter explains the features that the 80386 offers for controlling\nand responding to interrupts when it is executing in protected mode.\n\n\n9.1  Identifying Interrupts\n\nThe processor associates an identifying number with each different type of\ninterrupt or exception.\n\nThe NMI and the exceptions recognized by the processor are assigned\npredetermined identifiers in the range 0 through 31. Not all of these\nnumbers are currently used by the 80386; unassigned identifiers in this\nrange are reserved by Intel for possible future expansion.\n\nThe identifiers of the maskable interrupts are determined by external\ninterrupt controllers (such as Intel's 8259A Programmable Interrupt\nController) and communicated to the processor during the processor's\ninterrupt-acknowledge sequence. The numbers assigned by an 8259A PIC can be\nspecified by software. Any numbers in the range 32 through 255 can be used.\nTable 9-1 shows the assignment of interrupt and exception identifiers.\n\nExceptions are classified as faults, traps, or aborts depending on the way\nthey are reported and whether restart of the instruction that caused the\nexception is supported.\n\nFaults  Faults are exceptions that are reported \"before\" the\n        instruction causingthe exception. Faults are either detected before\n        the instruction begins to execute, or during execution of the\n        instruction. If detected during the instruction, the fault is\n        reported with the machine restored to a state that permits the\n        instruction to be restarted.\n\nTraps   A trap is an exception that is reported at the instruction\n        boundary immediately after the instruction in which the\n        exception was detected.\n\nAborts  An abort is an exception that permits neither precise location\n        of the instruction causing the exception nor restart of the program\n        that caused the exception. Aborts are used to report severe errors,\n        such as hardware errors and inconsistent or illegal values in system\n        tables.\n\n\nTable 9-1. Interrupt and Exception ID Assignments\n\nIdentifier   Description\n\n0            Divide error\n1            Debug exceptions\n2            Nonmaskable interrupt\n3            Breakpoint (one-byte INT 3 instruction)\n4            Overflow (INTO instruction)\n5            Bounds check (BOUND instruction)\n6            Invalid opcode\n7            Coprocessor not available\n8            Double fault\n9            (reserved)\n10           Invalid TSS\n11           Segment not present\n12           Stack exception\n13           General protection\n14           Page fault\n15           (reserved)\n16           Coprecessor error\n17-31        (reserved)\n32-255       Available for external interrupts via INTR pin\n\n\n9.2  Enabling and Disabling Interrupts\n\nThe processor services interrupts and exceptions only between the end of\none instruction and the beginning of the next. When the repeat prefix is\nused to repeat a string instruction, interrupts and exceptions may occur\nbetween repetitions. Thus, operations on long strings do not delay interrupt\nresponse.\n\nCertain conditions and flag settings cause the processor to inhibit certain\ninterrupts and exceptions at instruction boundaries.\n\n\n9.2.1  NMI Masks Further NMIs\n\nWhile an NMI handler is executing, the processor ignores further interrupt\nsignals at the NMI pin until the next IRET instruction is executed.\n\n\n9.2.2  IF Masks INTR\n\nThe IF (interrupt-enable flag) controls the acceptance of external\ninterrupts signalled via the INTR pin. When IF=0, INTR interrupts are\ninhibited; when IF=1, INTR interrupts are enabled. As with the other flag\nbits, the processor clears IF in response to a RESET signal. The\ninstructions CLI and STI alter the setting of IF.\n\nCLI (Clear Interrupt-Enable Flag) and STI (Set Interrupt-Enable Flag)\nexplicitly alter IF (bit 9 in the flag register). These instructions may be\nexecuted only if CPL  IOPL. A protection exception occurs if they are\nexecuted when CPL > IOPL.\n\nThe IF is also affected implicitly by the following operations:\n\n    The instruction PUSHF stores all flags, including IF, in the stack\n     where they can be examined.\n\n    Task switches and the instructions POPF and IRET load the flags\n     register; therefore, they can be used to modify IF.\n\n    Interrupts through interrupt gates automatically reset IF, disabling\n     interrupts. (Interrupt gates are explained later in this chapter.)\n\n\n9.2.3  RF Masks Debug Faults\n\nThe RF bit in EFLAGS controls the recognition of debug faults. This permits\ndebug faults to be raised for a given instruction at most once, no matter\nhow many times the instruction is restarted. (Refer to Chapter 12 for more\ninformation on debugging.)\n\n\n9.2.4  MOV or POP to SS Masks Some Interrupts and Exceptions\n\nSoftware that needs to change stack segments often uses a pair of\ninstructions; for example:\n\n  MOV SS, AX\n  MOV ESP, StackTop\n\nIf an interrupt or exception is processed after SS has been changed but\nbefore ESP has received the corresponding change, the two parts of the stack\npointer SS:ESP are inconsistent for the duration of the interrupt handler or\nexception handler.\n\nTo prevent this situation, the 80386, after both a MOV to SS and a POP to\nSS instruction, inhibits NMI, INTR, debug exceptions, and single-step traps\nat the instruction boundary following the instruction that changes SS. Some\nexceptions may still occur; namely, page fault and general protection fault.\nAlways use the 80386 LSS instruction, and the problem will not occur.\n\n\n9.3  Priority Among Simultaneous Interrupts and Exceptions\n\nIf more than one interrupt or exception is pending at an instruction\nboundary, the processor services one of them at a time. The priority among\nclasses of interrupt and exception sources is shown in Table 9-2. The\nprocessor first services a pending interrupt or exception from the class\nthat has the highest priority, transferring control to the first\ninstruction of the interrupt handler. Lower priority exceptions are\ndiscarded; lower priority interrupts are held pending. Discarded exceptions\nwill be rediscovered when the interrupt handler returns control to the point\nof interruption.\n\n\n9.4  Interrupt Descriptor Table\n\nThe interrupt descriptor table (IDT) associates each interrupt or exception\nidentifier with a descriptor for the instructions that service the\nassociated event. Like the GDT and LDTs, the IDT is an array of 8-byte\ndescriptors. Unlike the GDT and LDTs, the first entry of the IDT may contain\na descriptor. To form an index into the IDT, the processor multiplies the\ninterrupt or exception identifier by eight. Because there are only 256\nidentifiers, the IDT need not contain more than 256 descriptors. It can\ncontain fewer than 256 entries; entries are required only for interrupt\nidentifiers that are actually used.\n\nThe IDT may reside anywhere in physical memory. As Figure 9-1 shows, the\nprocessor locates the IDT by means of the IDT register (IDTR). The\ninstructions LIDT and SIDT operate on the IDTR. Both instructions have one\nexplicit operand: the address in memory of a 6-byte area. Figure 9-2 shows\nthe format of this area.\n\nLIDT (Load IDT register) loads the IDT register with the linear base\naddress and limit values contained in the memory operand.  This instruction\ncan be executed only when the CPL is zero. It is normally used by the\ninitialization logic of an operating system when creating an IDT.  An\noperating system may also use it to change from one IDT to another.\n\nSIDT (Store IDT register) copies the base and limit value stored in IDTR\nto a memory location. This instruction can be executed at any privilege\nlevel.\n\n\nTable 9-2. Priority Among Simultaneous Interrupts and Exceptions\n\nPriority   Class of Interrupt or Exception\n\nHIGHEST    Faults except debug faults\n           Trap instructions INTO, INT n, INT 3\n           Debug traps for this instruction\n           Debug faults for next instruction\n           NMI interrupt\nLOWEST     INTR interrupt\n\n\nFigure 9-1.  IDT Register and Table\n\n                                              INTERRUPT DESCRIPTOR TABLE\n                                              ͻ\n                                        \u0010                      \n                                              GATE FOR INTERRUPT #N Ķ\n                                                                   \n                                             ͼ\n                                             \u0007                         \u0007\n                                             \u0007                         \u0007\n                                             \u0007                         \u0007\n                                             ͻ\n                                                                   \n                                              GATE FOR INTERRUPT #2 Ķ\n                                                                   \n                                             ͹\n            IDT REGISTER                                           \n                                              GATE FOR INTERRUPT #1 Ķ\n                    15            0                                \n                   ͻ         ͹\n                      IDT LIMIT                              \n  ͹           GATE FOR INTERRUPT #0 Ķ\n              IDT BASE            \u0010                      \n  ͼ          ͼ\n   31                             0\n\n\nFigure 9-2.  Pseudo-Descriptor Format for LIDT and SIDT\n\n  31                23                15                7               0\n ͻ\n                                  BASE                                  2\n ͹\n                                                    LIMIT               0\n                                     ͼ\n\n\n9.5  IDT Descriptors\n\nThe IDT may contain any of three kinds of descriptor:\n\n     Task gates\n     Interrupt gates\n     Trap gates\n\nFigure 9-3 illustrates the format of task gates and 80386 interrupt gates\nand trap gates. (The task gate in an IDT is the same as the task gate\nalready discussed in Chapter 7.)\n\n\nFigure 9-3.  80306 IDT Gate Descriptors\n\n                                80386 TASK GATE\n   31                23                15                7                0\n  ͻ\n  (NOT USED) P DPL0 0 1 0 1(NOT USED)4\n  Ķ\n               SELECTOR              (NOT USED)0\n  ͼ\n\n                                80386 INTERRUPT GATE\n   31                23                15                7                0\n  ͻ\n             OFFSET 31..16            P DPL0 1 1 1 00 0 0(NOT USED) 4\n  Ķ\n               SELECTOR                         OFFSET 15..0            0\n  ͼ\n\n                                80386 TRAP GATE\n   31                23                15                7                0\n  ͻ\n            OFFSET 31..16             P DPL0 1 1 1 10 0 0(NOT USED) 4\n  Ķ\n               SELECTOR                         OFFSET 15..0            0\n  ͼ\n\n\n9.6  Interrupt Tasks and Interrupt Procedures\n\nJust as a CALL instruction can call either a procedure or a task, so an\ninterrupt or exception can \"call\" an interrupt handler that is either a\nprocedure or a task. When responding to an interrupt or exception, the\nprocessor uses the interrupt or exception identifier to index a descriptor\nin the IDT. If the processor indexes to an interrupt gate or trap gate, it\ninvokes the handler in a manner similar to a CALL to a call gate. If the\nprocessor finds a task gate, it causes a task switch in a manner similar to\na CALL to a task gate.\n\n\n9.6.1  Interrupt Procedures\n\nAn interrupt gate or trap gate points indirectly to a procedure which will\nexecute in the context of the currently executing task as illustrated by\nFigure 9-4. The selector of the gate points to an executable-segment\ndescriptor in either the GDT or the current LDT. The offset field of the\ngate points to the beginning of the interrupt or exception handling\nprocedure.\n\nThe 80386 invokes an interrupt or exception handling procedure in much the\nsame manner as it CALLs a procedure; the differences are explained in the\nfollowing sections.\n\n\nFigure 9-4.  Interrupt Vectoring for Procedures\n\n                  IDT                                    EXECUTABLE SEGMENT\n           ͻ                             ͻ\n                                                 OFFSET               \n           ͹  \u0010 ENTRY POINT   \n                                  LDT OR GDT                         \n           ͹     ͻ                     \n                                                                   \nINTERRUPT  ͹     ͹                     \n   ID\u0010 TRAP GATE OR                                         \n           INTERRUPT GATE Ŀ   ͹                     \n           ͹                                         \n                               ͹                     \n           ͹  \u0010   SEGMENT     Ŀ                   \n                                  DESCRIPTOR                       \n           ͹      ͹                    \n                                                                   \n           ͹      ͹                    \n                                                BASE               \n           ͼ      ͹ \u0010ͼ\n                                                 \n                                                 \n                                                 \n                                  ͼ\n\n\n9.6.1.1  Stack of Interrupt Procedure\n\nJust as with a control transfer due to a CALL instruction, a control\ntransfer to an interrupt or exception handling procedure uses the stack to\nstore the information needed for returning to the original procedure. As\nFigure 9-5 shows, an interrupt pushes the EFLAGS register onto the stack\nbefore the pointer to the interrupted instruction.\n\nCertain types of exceptions also cause an error code to be pushed on the\nstack. An exception handler can use the error code to help diagnose the\nexception.\n\n\n9.6.1.2  Returning from an Interrupt Procedure\n\nAn interrupt procedure also differs from a normal procedure in the method\nof leaving the procedure. The IRET instruction is used to exit from an\ninterrupt procedure. IRET is similar to RET except that IRET increments EIP\nby an extra four bytes (because of the flags on the stack) and moves the\nsaved flags into the EFLAGS register. The IOPL field of EFLAGS is changed\nonly if the CPL is zero. The IF flag is changed only if CPL  IOPL.\n\n\nFigure 9-5.  Stack Layout after Exception of Interrupt \n\n                           WITHOUT PRIVILEGE TRANSITION\n\n      D  O      31          0                     31          0\n      I  F    ͹                 ͹\n      R           OLD              OLD\n      E  E    ͹   SS:ESP        ͹   SS:ESP\n      C  X                         \n      T  P    ͹\u0011           ͹\u0011\n      I  A      OLD EFLAGS                      OLD EFLAGS   \n      O  N    ͹                 ͹\n      N  S    OLD CS     NEW          OLD CS \n         I    ͹   SS:ESP        ͹\n        O        OLD EIP                        OLD EIP        NEW\n        N    ͹\u0011           ͹   SS:ESP\n                                               ERROR CODE        \n       \u001f      \u0007               \u0007                 ͹\u0011\n              \u0007               \u0007                                \n              \u0007               \u0007\n              WITHOUT ERROR CODE                 WITH ERROR CODE\n\n                             WITH PRIVILEGE TRANSITION\n\n      D  O     31            0                     31          0\n      I  F    ͻ\u0011Ŀ           ͻ\u0011Ŀ\n      R       OLD SS                 OLD SS      \n      E  E    ͹   SS:ESP        ͹   SS:ESP\n      C  X        OLD ESP      FROM TSS           OLD ESP      FROM TSS\n      T  P    ͹                 ͹\n      I  A      OLD EFLAGS                      OLD EFLAGS   \n      O  N    ͹                 ͹\n      N  S    OLD CS     NEW          OLD CS \n         I    ͹   SS:EIP        ͹\n        O        OLD EIP                        OLD EIP        NEW\n        N    ͹\u0011           ͹   SS:ESP\n                                               ERROR CODE        \n       \u001f      \u0007               \u0007                 ͹\u0011\n              \u0007               \u0007                                \n              \u0007               \u0007\n              WITHOUT ERROR CODE                 WITH ERROR CODE\n\n\n9.6.1.3  Flags Usage by Interrupt Procedure\n\nInterrupts that vector through either interrupt gates or trap gates cause\nTF (the trap flag) to be reset after the current value of TF is saved on the\nstack as part of EFLAGS. By this action the processor prevents debugging\nactivity that uses single-stepping from affecting interrupt response. A\nsubsequent IRET instruction restores TF to the value in the EFLAGS image on\nthe stack.\n\nThe difference between an interrupt gate and a trap gate is in the effect\non IF (the interrupt-enable flag). An interrupt that vectors through an\ninterrupt gate resets IF, thereby preventing other interrupts from\ninterfering with the current interrupt handler. A subsequent IRET\ninstruction restores IF to the value in the EFLAGS image on the stack. An\ninterrupt through a trap gate does not change IF.\n\n\n9.6.1.4  Protection in Interrupt Procedures\n\nThe privilege rule that governs interrupt procedures is similar to that for\nprocedure calls: the CPU does not permit an interrupt to transfer control to\na procedure in a segment of lesser privilege (numerically greater privilege\nlevel) than the current privilege level. An attempt to violate this rule\nresults in a general protection exception.\n\nBecause occurrence of interrupts is not generally predictable, this\nprivilege rule effectively imposes restrictions on the privilege levels at\nwhich interrupt and exception handling procedures can execute. Either of the\nfollowing strategies can be employed to ensure that the privilege rule is\nnever violated.\n\n    Place the handler in a conforming segment. This strategy suits the\n     handlers for certain exceptions (divide error, for example). Such a\n     handler must use only the data available to it from the stack. If it\n     needed data from a data segment, the data segment would have to have\n     privilege level three, thereby making it unprotected.\n\n    Place the handler procedure in a privilege level zero segment.\n\n\n9.6.2  Interrupt Tasks\n\nA task gate in the IDT points indirectly to a task, as Figure 9-6\nillustrates. The selector of the gate points to a TSS descriptor in the GDT.\n\nWhen an interrupt or exception vectors to a task gate in the IDT, a task\nswitch results. Handling an interrupt with a separate task offers two\nadvantages:\n\n    The entire context is saved automatically.\n\n    The interrupt handler can be isolated from other tasks by giving it a\n     separate address space, either via its LDT or via its page directory.\n\nThe actions that the processor takes to perform a task switch are discussed\nin Chapter 7. The interrupt task returns to the interrupted task by\nexecuting an IRET instruction.\n\nIf the task switch is caused by an exception that has an error code, the\nprocessor automatically pushes the error code onto the stack that\ncorresponds to the privilege level of the first instruction to be executed\nin the interrupt task.\n\nWhen interrupt tasks are used in an operating system for the 80386, there\nare actually two schedulers: the software scheduler (part of the operating\nsystem) and the hardware scheduler (part of the processor's interrupt\nmechanism). The design of the software scheduler should account for the fact\nthat the hardware scheduler may dispatch an interrupt task whenever\ninterrupts are enabled.\n\n\nFigure 9-6.  Interrupt Vectoring for Tasks\n\n            IDT                       GDT\n     ͻ        ͻ\n                                                           TSS\n     Ķ        Ķ       ͻ\n                                                                    \n     Ķ        Ķ                       \n                                                                    \n     Ķ        Ķ                       \n \u0010   TASK GATE    Ŀ                                           \n    Ķ       Ķ                       \n                       \u0010 TSS DESCRIPTOR Ŀ                   \n    Ķ        Ķ                      \n                                                                  \n    Ķ        Ķ   \u0010ͼ\n                                            \n    Ķ        Ķ\n                                            \n    ͼ        ͼ\n \n INTERRUPT ID\n\n\n9.7  Error Code\n\nWith exceptions that relate to a specific segment, the processor pushes an\nerror code onto the stack of the exception handler (whether procedure or\ntask). The error code has the format shown in Figure 9-7. The format of the\nerror code resembles that of a selector; however, instead of an RPL field,\nthe error code contains two one-bit items:\n\n  1.  The processor sets the EXT bit if an event external to the program\n      caused the exception.\n\n  2.  The processor sets the I-bit (IDT-bit) if the index portion of the\n      error code refers to a gate descriptor in the IDT.\n\nIf the I-bit is not set, the TI bit indicates whether the error code refers\nto the GDT (value 0) or to the LDT (value 1). The remaining 14 bits are the\nupper 14 bits of the segment selector involved. In some cases the error code\non the stack is null, i.e., all bits in the low-order word are zero.\n\n\nFigure 9-7.  Error Code Format\n\n       31              15                                         2 1 0\n      ͻ\n                               T E\n      UNDEFINED     SELECTOR INDEX       I \n                               I X\n      ͼ\n\n\n9.8  Exception Conditions\n\nThe following sections describe each of the possible exception conditions\nin detail. Each description classifies the exception as a fault, trap, or\nabort. This classification provides information needed by systems\nprogrammers for restarting the procedure in which the exception occurred:\n\nFaults   The CS and EIP values saved when a fault is reported point to the\n         instruction causing the fault.\n\nTraps    The CS and EIP values stored when the trap is reported point to the\n         instruction dynamically after the instruction causing the trap. If\n         a trap is detected during an instruction that alters program flow,\n         the reported values of CS and EIP reflect the alteration of program\n         flow. For example, if a trap is detected in a JMP instruction, the\n         CS and EIP values pushed onto the stack point to the target of the\n         JMP, not to the instruction after the JMP.\n\nAborts   An abort is an exception that permits neither precise location of\n         the instruction causing the exception nor restart of the program\n         that caused the exception. Aborts are used to report severe errors,\n         such as hardware errors and inconsistent or illegal values in\n         system tables.\n\n\n9.8.1  Interrupt 0  Divide Error\n\nThe divide-error fault occurs during a DIV or an IDIV instruction when the\ndivisor is zero.\n\n\n9.8.2  Interrupt 1  Debug Exceptions\n\nThe processor triggers this interrupt for any of a number of conditions;\nwhether the exception is a fault or a trap depends on the condition:\n\n     Instruction address breakpoint fault.\n     Data address breakpoint trap.\n     General detect fault.\n     Single-step trap.\n     Task-switch breakpoint trap.\n\nThe processor does not push an error code for this exception. An exception\nhandler can examine the debug registers to determine which condition caused\nthe exception. Refer to Chapter 12 for more detailed information about\ndebugging and the debug registers.\n\n\n9.8.3  Interrupt 3  Breakpoint\n\nThe INT 3 instruction causes this trap. The INT 3 instruction is one byte\nlong, which makes it easy to replace an opcode in an executable segment with\nthe breakpoint opcode. The operating system or a debugging subsystem can use\na data-segment alias for an executable segment to place an INT 3 anywhere it\nis convenient to arrest normal execution so that some sort of special\nprocessing can be performed. Debuggers typically use breakpoints as a way of\ndisplaying registers, variables, etc., at crucial points in a task.\n\nThe saved CS:EIP value points to the byte following the breakpoint. If a\ndebugger replaces a planted breakpoint with a valid opcode, it must subtract\none from the saved EIP value before returning. Refer also to Chapter 12 for\nmore information on debugging.\n\n\n9.8.4  Interrupt 4  Overflow\n\nThis trap occurs when the processor encounters an INTO instruction and the\nOF (overflow) flag is set. Since signed arithmetic and unsigned arithmetic\nboth use the same arithmetic instructions, the processor cannot determine\nwhich is intended and therefore does not cause overflow exceptions\nautomatically. Instead it merely sets OF when the results, if interpreted as\nsigned numbers, would be out of range. When doing arithmetic on signed\noperands, careful programmers and compilers either test OF directly or use\nthe INTO instruction.\n\n\n9.8.5  Interrupt 5  Bounds Check\n\nThis fault occurs when the processor, while executing a BOUND instruction,\nfinds that the operand exceeds the specified limits. A program can use the\nBOUND instruction to check a signed array index against signed limits\ndefined in a block of memory.\n\n\n9.8.6  Interrupt 6  Invalid Opcode\n\nThis fault occurs when an invalid opcode is detected by the execution unit.\n(The exception is not detected until an attempt is made to execute the\ninvalid opcode; i.e., prefetching an invalid opcode does not cause this\nexception.) No error code is pushed on the stack. The exception can be\nhandled within the same task.\n\nThis exception also occurs when the type of operand is invalid for the\ngiven opcode. Examples include an intersegment JMP referencing a register\noperand, or an LES instruction with a register source operand.\n\n\n9.8.7  Interrupt 7  Coprocessor Not Available\n\nThis exception occurs in either of two conditions:\n\n    The processor encounters an ESC (escape) instruction, and the EM\n     (emulate) bit ofCR0 (control register zero) is set.\n\n    The processor encounters either the WAIT instruction or an ESC\n     instruction, and both the MP (monitor coprocessor) and TS (task\n     switched) bits of CR0 are set.\n\nRefer to Chapter 11 for information about the coprocessor interface.\n\n\n9.8.8  Interrupt 8  Double Fault\n\nNormally, when the processor detects an exception while trying to invoke\nthe handler for a prior exception, the two exceptions can be handled\nserially. If, however, the processor cannot handle them serially, it signals\nthe double-fault exception instead. To determine when two faults are to be\nsignalled as a double fault, the 80386 divides the exceptions into three\nclasses: benign exceptions, contributory exceptions, and page faults. Table\n9-3 shows this classification.\n\nTable 9-4 shows which combinations of exceptions cause a double fault and\nwhich do not.\n\nThe processor always pushes an error code onto the stack of the\ndouble-fault handler; however, the error code is always zero. The faulting\ninstruction may not be restarted. If any other exception occurs while\nattempting to invoke the double-fault handler, the processor shuts down.\n\n\nTable 9-3. Double-Fault Detection Classes\n\nClass           ID          Description\n\n                 1          Debug exceptions\n                 2          NMI\n                 3          Breakpoint\nBenign           4          Overflow\nExceptions       5          Bounds check\n                 6          Invalid opcode\n                 7          Coprocessor not available\n                16          Coprocessor error\n\n                 0          Divide error\n                 9          Coprocessor Segment Overrun\nContributory    10          Invalid TSS\nExceptions      11          Segment not present\n                12          Stack exception\n                13          General protection\n\nPage Faults     14          Page fault\n\n\nTable 9-4. Double-Fault Definition\n\n                                   SECOND EXCEPTION\n\n                           Benign       Contributory    Page\n                           Exception    Exception       Fault\n\n\n           Benign          OK           OK              OK\n           Exception\n\nFIRST      Contributory    OK           DOUBLE          OK\nEXCEPTION  Exception\n\n           Page\n           Fault           OK           DOUBLE          DOUBLE\n\n\n9.8.9  Interrupt 9  Coprocessor Segment Overrun\n\nThis exception is raised in protected mode if the 80386 detects a page or\nsegment violation while transferring the middle portion of a coprocessor\noperand to the NPX. This exception is avoidable. Refer to Chapter 11 for\nmore information about the coprocessor interface.\n\n\n9.8.10  Interrupt 10  Invalid TSS\n\nInterrupt 10 occurs if during a task switch the new TSS is invalid. A TSS\nis considered invalid in the cases shown in Table 9-5. An error code is\npushed onto the stack to help identify the cause of the fault. The EXT bit\nindicates whether the exception was caused by a condition outside the\ncontrol of the program; e.g., an external interrupt via a task gate\ntriggered a switch to an invalid TSS.\n\nThis fault can occur either in the context of the original task or in the\ncontext of the new task. Until the processor has completely verified the\npresence of the new TSS, the exception occurs in the context of the original\ntask. Once the existence of the new TSS is verified, the task switch is\nconsidered complete; i.e., TR is updated and, if the switch is due to a\nCALL or interrupt, the backlink of the new TSS is set to the old TSS. Any\nerrors discovered by the processor after this point are handled in the\ncontext of the new task.\n\nTo insure a proper TSS to process it, the handler for exception 10 must be\na task invoked via a task gate.\n\n\nTable 9-5. Conditions That Invalidate the TSS\n\nError Code              Condition\n\nTSS id + EXT            The limit in the TSS descriptor is less than 103\nLTD id + EXT            Invalid LDT selector or LDT not present\nSS id + EXT             Stack segment selector is outside table limit\nSS id + EXT             Stack segment is not a writable segment\nSS id + EXT             Stack segment DPL does not match new CPL\nSS id + EXT             Stack segment selector RPL < >  CPL\nCS id + EXT             Code segment selector is outside table limit\nCS id + EXT             Code segment selector does not refer to code\n                        segment\nCS id + EXT             DPL of non-conforming code segment < > new CPL\nCS id + EXT             DPL of conforming code segment > new CPL\nDS/ES/FS/GS id + EXT    DS, ES, FS, or GS segment selector is outside\n                        table limits\nDS/ES/FS/GS id + EXT    DS, ES, FS, or GS is not readable segment\n\n\n9.8.11  Interrupt 11  Segment Not Present\n\nException 11 occurs when the processor detects that the present bit of a\ndescriptor is zero. The processor can trigger this fault in any of these\ncases:\n\n    While attempting to load the CS, DS, ES, FS, or GS registers; loading\n     the SS register, however, causes a stack fault.\n\n    While attempting loading the LDT register with an LLDT instruction;\n     loading the LDT register during a task switch operation, however,\n     causes the \"invalid TSS\" exception.\n\n    While attempting to use a gate descriptor that is marked not-present.\n\nThis fault is restartable. If the exception handler makes the segment\npresent and returns, the interrupted program will resume execution.\n\nIf a not-present exception occurs during a task switch, not all the steps\nof the task switch are complete. During a task switch, the processor first\nloads all the segment registers, then checks their contents for validity. If\na not-present exception is discovered, the remaining segment registers have\nnot been checked and therefore may not be usable for referencing memory. The\nnot-present handler should not rely on being able to use the values found\nin CS, SS, DS, ES, FS, and GS without causing another exception. The\nexception handler should check all segment registers before trying to resume\nthe new task; otherwise, general protection faults may result later under\nconditions that make diagnosis more difficult. There are three ways to\nhandle this case:\n\n  1.  Handle the not-present fault with a task. The task switch back to the\n      interrupted task will cause the processor to check the registers as it\n      loads them from the TSS.\n\n  2.  PUSH and POP all segment registers. Each POP causes the processor to\n      check the new contents of the segment register.\n\n  3.  Scrutinize the contents of each segment-register image in the TSS,\n      simulating the test that the processor makes when it loads a segment\n      register.\n\nThis exception pushes an error code onto the stack. The EXT bit of the\nerror code is set if an event external to the program caused an interrupt\nthat subsequently referenced a not-present segment. The I-bit is set if the\nerror code refers to an IDT entry, e.g., an INT instruction referencing a\nnot-present gate.\n\nAn operating system typically uses the \"segment not present\" exception to\nimplement virtual memory at the segment level. A not-present indication in a\ngate descriptor, however, usually does not indicate that a segment is not\npresent (because gates do not necessarily correspond to segments).\nNot-present gates may be used by an operating system to trigger exceptions\nof special significance to the operating system.\n\n\n9.8.12  Interrupt 12  Stack Exception\n\nA stack fault occurs in either of two general conditions:\n\n    As a result of a limit violation in any operation that refers to the\n     SS register. This includes stack-oriented instructions such as POP,\n     PUSH, ENTER, and LEAVE, as well as other memory references that\n     implicitly use SS (for example, MOV AX, [BP+6]). ENTER causes this\n     exception when the stack is too small for the indicated local-variable\n     space.\n\n    When attempting to load the SS register with a descriptor that is\n     marked not-present but is otherwise valid. This can occur in a task\n     switch, an interlevel CALL, an interlevel return, an LSS instruction,\n     or a MOV or POP instruction to SS.\n\nWhen the processor detects a stack exception, it pushes an error code onto\nthe stack of the exception handler. If the exception is due to a not-present\nstack segment or to overflow of the new stack during an interlevel CALL, the\nerror code contains a selector to the segment in question (the exception\nhandler can test the present bit in the descriptor to determine which\nexception occurred); otherwise the error code is zero.\n\nAn instruction that causes this fault is restartable in all cases. The\nreturn pointer pushed onto the exception handler's stack points to the\ninstruction that needs to be restarted. This instruction is usually the one\nthat caused the exception; however, in the case of a stack exception due to\nloading of a not-present stack-segment descriptor during a task switch, the\nindicated instruction is the first instruction of the new task.\n\nWhen a stack fault occurs during a task switch, the segment registers may\nnot be usable for referencing memory. During a task switch, the selector\nvalues are loaded before the descriptors are checked. If a stack fault is\ndiscovered, the remaining segment registers have not been checked and\ntherefore may not be usable for referencing memory. The stack fault handler\nshould not rely on being able to use the values found in CS, SS, DS, ES,\nFS, and GS without causing another exception. The exception handler should\ncheck all segment registers before trying to resume the new task; otherwise,\ngeneral protection faults may result later under conditions that make\ndiagnosis more difficult.\n\n\n9.8.13  Interrupt 13  General Protection Exception\n\nAll protection violations that do not cause another exception cause a\ngeneral protection exception. This includes (but is not limited to):\n\n  1.  Exceeding segment limit when using CS, DS, ES, FS, or GS\n\n  2.  Exceeding segment limit when referencing a descriptor table\n\n  3.  Transferring control to a segment that is not executable\n\n  4.  Writing into a read-only data segment or into a code segment\n\n  5.  Reading from an execute-only segment\n\n  6.  Loading the SS register with a read-only descriptor (unless the \n      selector comes from the TSS during a task switch, in which case a TSS \n      exception occurs\n\n  7.  Loading SS, DS, ES, FS, or GS with the descriptor of a system segment\n\n  8.  Loading DS, ES, FS, or GS with the descriptor of an executable \n      segment that is not also readable\n\n  9.  Loading SS with the descriptor of an executable segment\n\n  10. Accessing memory via DS, ES, FS, or GS when the segment register\n      contains a null selector\n\n  11. Switching to a busy task\n\n  12. Violating privilege rules\n\n  13. Loading CR0 with PG=1 and PE=0.\n\n  14. Interrupt or exception via trap or interrupt gate from V86 mode to\n      privilege level other than zero.\n\n  15. Exceeding the instruction length limit of 15 bytes (this can occur\n      only if redundant prefixes are placed before an instruction)\n\nThe general protection exception is a fault. In response to a general\nprotection exception, the processor pushes an error code onto the exception\nhandler's stack. If loading a descriptor causes the exception, the error\ncode contains a selector to the descriptor; otherwise, the error code is\nnull. The source of the selector in an error code may be any of the\nfollowing:\n\n  1.  An operand of the instruction.\n  2.  A selector from a gate that is the operand of the instruction.\n  3.  A selector from a TSS involved in a task switch.\n\n\n9.8.14  Interrupt 14  Page Fault\n\nThis exception occurs when paging is enabled (PG=1) and the processor\ndetects one of the following conditions while translating a linear address\nto a physical address:\n\n    The page-directory or page-table entry needed for the address\n     translation has zero in its present bit.\n\n    The current procedure does not have sufficient privilege to access the\n     indicated page.\n\nThe processor makes available to the page fault handler two items of\ninformation that aid in diagnosing the exception and recovering from it:\n\n    An error code on the stack. The error code for a page fault has a\n     format different from that for other exceptions (see Figure 9-8). The\n     error code tells the exception handler three things:\n\n     1.  Whether the exception was due to a not present page or to an access\n         rights violation.\n\n     2.  Whether the processor was executing at user or supervisor level at\n         the time of the exception.\n\n     3.  Whether the memory access that caused the exception was a read or\n         write.\n\n    CR2 (control register two). The processor stores in CR2 the linear\n     address used in the access that caused the exception (see Figure 9-9).\n     The exception handler can use this address to locate the corresponding\n     page directory and page table entries. If another page fault can occur\n     during execution of the page fault handler, the handler should push CR2\n     onto the stack.\n\n\nFigure 9-8.  Page-Fault Error Code Format\n\n ͻ\n FieldValue                         Description                        \n Ķ\n  U/S   0   The access causing the fault originated when the processor \n            was executing in supervisor mode.                          \n                                                                       \n        1   The access causing the fault originated when the processor \n            was executing in user mode.                                \n                                                                       \n  W/R   0   The access causing the fault was a read.                   \n                                                                       \n        1   The access causing the fault was a write.                  \n                                                                       \n  P     0   The fault was caused by a not-present page.                \n                                                                       \n        1   The fault was caused by a page-level protection violation. \n ͼ\n\n       31                               15             7        3 2 1 0\n      ͻ\n      UW \n      UNDEFINED//P\n      SR \n      ͼ\n\n\n9.8.14.1  Page Fault During Task Switch\n\nThe processor may access any of four segments during a task switch:\n\n  1.  Writes the state of the original task in the TSS of that task.\n\n  2.  Reads the GDT to locate the TSS descriptor of the new task.\n\n  3.  Reads the TSS of the new task to check the types of segment\n      descriptors from the TSS.\n\n  4.  May read the LDT of the new task in order to verify the segment\n      registers stored in the new TSS.\n\nA page fault can result from accessing any of these segments. In the latter\ntwo cases the exception occurs in the context of the new task. The\ninstruction pointer refers to the next instruction of the new task, not to\nthe instruction that caused the task switch. If the design of the operating\nsystem permits page faults to occur during task-switches, the page-fault\nhandler should be invoked via a task gate.\n\n\nFigure 9-9.  CR2 Format\n\n      31               23               15               7              0\n     ͻ\n                                                                        \n                           PAGE FAULT LINEAR ADDRESS                    \n                                                                        \n     ͼ\n\n\n9.8.14.2  Page Fault with Inconsistent Stack Pointer\n\nSpecial care should be taken to ensure that a page fault does not cause the\nprocessor to use an invalid stack pointer (SS:ESP). Software written for\nearlier processors in the 8086 family often uses a pair of instructions to\nchange to a new stack; for example:\n\nMOV SS, AX\nMOV SP, StackTop\n\nWith the 80386, because the second instruction accesses memory, it is\npossible to get a page fault after SS has been changed but before SP has\nreceived the corresponding change. At this point, the two parts of the stack\npointer SS:SP (or, for 32-bit programs, SS:ESP) are inconsistent.\n\nThe processor does not use the inconsistent stack pointer if the handling\nof the page fault causes a stack switch to a well defined stack (i.e., the\nhandler is a task or a more privileged procedure). However, if the page\nfault handler is invoked by a trap or interrupt gate and the page fault\noccurs at the same privilege level as the page fault handler, the processor\nwill attempt to use the stack indicated by the current (invalid) stack\npointer.\n\nIn systems that implement paging and that handle page faults within the\nfaulting task (with trap or interrupt gates), software that executes at the\nsame privilege level as the page fault handler should initialize a new stack\nby using the new LSS instruction rather than an instruction pair shown\nabove. When the page fault handler executes at privilege level zero (the\nnormal case), the scope of the problem is limited to privilege-level zero\ncode, typically the kernel of the operating system.\n\n\n9.8.15  Interrupt 16  Coprocessor Error\n\nThe 80386 reports this exception when it detects a signal from the 80287 or\n80387 on the 80386's ERROR# input pin. The 80386 tests this pin only at the\nbeginning of certain ESC instructions and when it encounters a WAIT\ninstruction while the EM bit of the MSW is zero (no emulation). Refer to\nChapter 11 for more information on the coprocessor interface.\n\n\n9.9  Exception Summary\n\n\nTable 9-6 summarizes the exceptions recognized by the 386.\n\nTable 9-6. Exception Summary\n\n\nDescription               Interrupt   Return Address  Exception     Function That Can Generate\n                          Number      Points to       Type          the Exception\n                                      Faulting\n                                      Instruction\n\nDivide error               0          YES             FAULT         DIV, IDIV\nDebug exceptions           1          \nSome debug exceptions are traps and some are faults.  The exception\nhandler can determine which has occurred by examining DR6.  (Refer to\nChapter 12.)               \nSome debug exceptions are traps and some are faults.  The exception\nhandler can determine which has occurred by examining DR6.  (Refer to\nChapter 12.)             Any instruction\nBreakpoint                 3          NO              TRAP          One-byte INT 3\nOverflow                   4          NO              TRAP          INTO\nBounds check               5          YES             FAULT         BOUND\nInvalid opcode             6          YES             FAULT         Any illegal instruction\nCoprocessor not available  7          YES             FAULT         ESC, WAIT\nDouble fault               8          YES             ABORT         Any instruction that can\n                                                                    generate an exception\nCoprocessor Segment\nOverrun                    9          NO              ABORT         Any operand of an ESC\n                                                                    instruction that wraps around\n                                                                    the end of a segment.\nInvalid TSS               10          YES             FAULT\nAn invalid-TSS fault is not restartable if it occurs during the\nprocessing of an external interrupt.        JMP, CALL, IRET, any interrupt\nSegment not present       11          YES             FAULT         Any segment-register modifier\nStack exception           12          YES             FAULT         Any memory reference thru SS\nGeneral Protection        13          YES             FAULT/ABORT\nAll GP faults are restartable. If the fault occurs while attempting to\nvector to the handler for an external interrupt, the interrupted program is\nrestartable, but the interrupt may be lost.  Any memory reference or code\n                                                                    fetch\nPage fault                14          YES             FAULT         Any memory reference or code\n                                                                    fetch\nCoprocessor error         16          YES             FAULT\nCoprocessor errors are reported as a fault on the first ESC or WAIT\ninstruction executed after the ESC instruction that caused the error.        ESC, WAIT\nTwo-byte SW Interrupt     0-255       NO              TRAP          INT n\n\n\n9.10  Error Code Summary\n\nTable 9-7 summarizes the error information that is available with each\nexception.\n\n\nTable 9-7. Error-Code Summary\n\nDescription                       Interrupt     Error Code\n                                  Number\n\nDivide error                       0            No\nDebug exceptions                   1            No\nBreakpoint                         3            No\nOverflow                           4            No\nBounds check                       5            No\nInvalid opcode                     6            No\nCoprocessor not available          7            No\nSystem error                       8            Yes (always 0)\nCoprocessor Segment Overrun        9            No\nInvalid TSS                       10            Yes\nSegment not present               11            Yes\nStack exception                   12            Yes\nGeneral protection fault          13            Yes\nPage fault                        14            Yes\nCoprocessor error                 16            No\nTwo-byte SW interrupt             0-255         No\n\n\nChapter 10  Initialization\n\n\n\nAfter a signal on the RESET pin, certain registers of the 80386 are set to\npredefined values. These values are adequate to enable execution of a\nbootstrap program, but additional initialization must be performed by\nsoftware before all the features of the processor can be utilized.\n\n\n10.1  Processor State After Reset\n\nThe contents of EAX depend upon the results of the power-up self test. The\nself-test may be requested externally by assertion of BUSY# at the end of\nRESET. The EAX register holds zero if the 80386 passed the test. A nonzero\nvalue in EAX after self-test indicates that the particular 80386 unit is\nfaulty. If the self-test is not requested, the contents of EAX after RESET\nis undefined.\n\nDX holds a component identifier and revision number after RESET as Figure\n10-1 illustrates. DH contains 3, which indicates an 80386 component. DL\ncontains a unique identifier of the revision level.\n\nControl register zero (CR0) contains the values shown in Figure 10-2. The\nET bit of CR0 is set if an 80387 is present in the configuration (according\nto the state of the ERROR# pin after RESET). If ET is reset, the\nconfiguration either contains an 80287 or does not contain a coprocessor. A\nsoftware test is required to distinguish between these latter two\npossibilities.\n\nThe remaining registers and flags are set as follows:\n\n   EFLAGS             =00000002H\n   IP                 =0000FFF0H\n   CS selector        =000H\n   DS selector        =0000H\n   ES selector        =0000H\n   SS selector        =0000H\n   FS selector        =0000H\n   GS selector        =0000H\n   IDTR:\n              base    =0\n              limit   =03FFH\n\nAll registers not mentioned above are undefined.\n\nThese settings imply that the processor begins in real-address mode with\ninterrupts disabled.\n\n\nFigure 10-1.  Contents of EDX after RESET\n\n                                 EDX REGISTER\n\n      31               23               15               7              0\n     ͻ\n            DH             DL        \n     UNDEFINED   DEVICE ID      STEPPING ID   \n            3           (UNIQUE)     \n     ͼ\n\n\nFigure 10-2.  Initial Contents of CR0\n\n                               CONTROL REGISTER ZERO\n\n   31                23                15                  7     4 3   1  0\n  ͻ\n  P                                                           ETEMP\n                               UNDEFINED                           \n  G                                                           TSMPE\n  Ѽ\n                                                                    \n   0 - PAGING DISABLED                                 \n                 * - INDICATES PRESENCE OF 80387    \n                 0 - NO TASK SWITCH   \n                 0 - DO NOT MONITOR COPROCESSOR  \n                 0 - COPROCESSOR NOT PRESENT \n                 0 - PROTECTION NOT ENABLED (REAL ADDRESS MODE)\n\n\n10.2  Software Initialization for Real-Address Mode\n\nIn real-address mode a few structures must be initialized before a program\ncan take advantage of all the features available in this mode.\n\n\n10.2.1  Stack\n\nNo instructions that use the stack can be used until the stack-segment\nregister (SS) has been loaded. SS must point to an area in RAM.\n\n\n10.2.2  Interrupt Table\n\nThe initial state of the 80386 leaves interrupts disabled; however, the\nprocessor will still attempt to access the interrupt table if an exception\nor nonmaskable interrupt (NMI) occurs. Initialization software should take\none of the following actions:\n\n    Change the limit value in the IDTR to zero. This will cause a shutdown\n     if an exception or nonmaskable interrupt occurs. (Refer to the 80386\n     Hardware Reference Manual to see how shutdown is signalled externally.)\n\n    Put pointers to valid interrupt handlers in all positions of the\n     interrupt table that might be used by exceptions or interrupts.\n\n    Change the IDTR to point to a valid interrupt table.\n\n\n10.2.3  First Instructions\n\nAfter RESET, address lines A{31-20} are automatically asserted for\ninstruction fetches. This fact, together with the initial values of CS:IP,\ncauses instruction execution to begin at physical address FFFFFFF0H. Near\n(intrasegment) forms of control transfer instructions may be used to pass\ncontrol to other addresses in the upper 64K bytes of the address space. The\nfirst far (intersegment) JMP or CALL instruction causes A{31-20} to drop\nlow, and the 80386 continues executing instructions in the lower one\nmegabyte of physical memory. This automatic assertion of address lines\nA{31-20} allows systems designers to use a ROM at the high end of\nthe address space to initialize the system.\n\n\n10.3  Switching to Protected Mode\n\nSetting the PE bit of the MSW in CR0 causes the 80386 to begin executing in\nprotected mode. The current privilege level (CPL) starts at zero. The\nsegment registers continue to point to the same linear addresses as in real\naddress mode (in real address mode, linear addresses are the same physical\naddresses).\n\nImmediately after setting the PE flag, the initialization code must flush\nthe processor's instruction prefetch queue by executing a JMP instruction.\nThe 80386 fetches and decodes instructions and addresses before they are\nused; however, after a change into protected mode, the prefetched\ninstruction information (which pertains to real-address mode) is no longer\nvalid. A JMP forces the processor to discard the invalid information.\n\n\n10.4  Software Initialization for Protected Mode\n\nMost of the initialization needed for protected mode can be done either\nbefore or after switching to protected mode. If done in protected mode,\nhowever, the initialization procedures must not use protected-mode features\nthat are not yet initialized.\n\n\n10.4.1  Interrupt Descriptor Table\n\nThe IDTR may be loaded in either real-address or protected mode. However,\nthe format of the interrupt table for protected mode is different than that\nfor real-address mode. It is not possible to change to protected mode and\nchange interrupt table formats at the same time; therefore, it is inevitable\nthat, if IDTR selects an interrupt table, it will have the wrong format at\nsome time. An interrupt or exception that occurs at this time will have\nunpredictable results. To avoid this unpredictability, interrupts should\nremain disabled until interrupt handlers are in place and a valid IDT has\nbeen created in protected mode.\n\n\n10.4.2  Stack\n\nThe SS register may be loaded in either real-address mode or protected\nmode. If loaded in real-address mode, SS continues to point to the same\nlinear base-address after the switch to protected mode.\n\n\n10.4.3  Global Descriptor Table\n\nBefore any segment register is changed in protected mode, the GDT register\nmust point to a valid GDT. Initialization of the GDT and GDTR may be done in\nreal-address mode. The GDT (as well as LDTs) should reside in RAM, because\nthe processor modifies the accessed bit of descriptors.\n\n\n10.4.4  Page Tables\n\nPage tables and the PDBR in CR3 can be initialized in either real-address\nmode or in protected mode; however, the paging enabled (PG) bit of CR0\ncannot be set until the processor is in protected mode. PG may be set\nsimultaneously with PE, or later. When PG is set, the PDBR in CR3 should\nalready be initialized with a physical address that points to a valid page\ndirectory. The initialization procedure should adopt one of the following\nstrategies to ensure consistent addressing before and after paging is\nenabled:\n\n    The page that is currently being executed should map to the same\n     physical addresses both before and after PG is set.\n\n    A JMP instruction should immediately follow the setting of PG.\n\n\n10.4.5  First Task\n\nThe initialization procedure can run awhile in protected mode without\ninitializing the task register; however, before the first task switch, the\nfollowing conditions must prevail:\n\n    There must be a valid task state segment (TSS) for the new task. The\n     stack pointers in the TSS for privilege levels numerically less than or\n     equal to the initial CPL must point to valid stack segments.\n\n    The task register must point to an area in which to save the current\n     task state. After the first task switch, the information dumped in this\n     area is not needed, and the area can be used for other purposes.\n\n\n10.5  Initialization Example\n\n$TITLE ('Initial Task')\n\n    NAME    INIT\n\ninit_stack  SEGMENT RW\n            DW  20  DUP(?)\ntos         LABEL   WORD\ninit_stack  ENDS\n\ninit_data   SEGMENT RW PUBLIC\n            DW  20  DUP(?)\ninit_data   ENDS\n\ninit_code   SEGMENT ER PUBLIC\n\nASSUME      DS:init_data\n\n    nop\n    nop\n    nop\ninit_start:\n                                    ; set up stack\n    mov ax, init_stack\n    mov ss, ax\n    mov esp, offset tos\n\n    mov a1,1\nblink:\n    xor a1,1\n    out 0e4h,a1\n    mov cx,3FFFh\nhere:\n    dec cx\n    jnz here\n\n    jmp SHORT blink\n\n    hlt\ninit_code   ends\n\n    END init_start, SS:init_stack, DS:init_data\n\n$TITLE('Protected Mode Transition -- 386 initialization')\nNAME  RESET\n\n;*****************************************************************\n; Upon reset the 386 starts executing at address 0FFFFFFF0H.  The\n; upper 12 address bits remain high until a FAR call or jump is\n; executed.\n;\n; Assume the following:\n;\n;\n; -  a short jump at address 0FFFFFFF0H (placed there by the\n;    system builder) causes execution to begin at START in segment\n;    RESET_CODE.\n;\n;\n; -  segment RESET_CODE is based at physical address 0FFFF0000H,\n;    i.e.   at the start of the last  64K in the 4G address space.\n;    Note that  this is the base of the CS register at reset.  If\n;    you locate ROMcode above  this  address,  you  will  need  to\n;    figure out an adjustment factor to address things within this\n;    segment.\n;\n;*****************************************************************\n$EJECT ;\n\n; Define addresses to locate GDT and IDT in RAM.\n; These addresses are also used in the BLD386 file that defines\n; the GDT and IDT. If you change these addresses, make sure you\n; change the base addresses specified in the build file.\n\nGDTbase         EQU    00001000H   ; physical address for GDT base\nIDTbase         EQU    00000400H   ; physical address for IDT base\n\nPUBLIC     GDT_EPROM\nPUBLIC     IDT_EPROM\nPUBLIC     START\n\nDUMMY      segment rw      ; ONLY for ASM386 main module stack init\n           DW 0\nDUMMY   ends\n\n;*****************************************************************\n;\n; Note: RESET CODE must be USEl6 because the 386 initally executes\n;       in real mode.\n;\n\nRESET_CODE segment er PUBLIC    USE16\n\nASSUME DS:nothing, ES:nothing\n\n;\n; 386 Descriptor template\n\nDESC       STRUC\n    lim_0_15    DW  0              ; limit bits (0..15)\n    bas_0_15    DW  0              ; base bits (0..15)\n    bas_16_23   DB  0              ; base bits (16..23)\n    access      DB  0              ; access byte\n    gran        DB  0              ; granularity byte\n    bas_24_31   DB  0              ; base bits (24..31)\nDESC       ENDS\n\n; The following is the layout of the real GDT created by BLD386.\n; It is located in EPROM and will be copied to RAM.\n;\n; GDT[O]      ...  NULL\n; GDT[1]      ...  Alias for RAM GDT\n; GDT[2]      ...  Alias for RAM IDT\n; GDT[2]      ...  initial task TSS\n; GDT[3]      ...  initial task TSS alias\n; GDT[4]      ...  initial task LDT\n; GDT[5]      ...  initial task LDT alias\n\n;\n; define entries in GDT and IDT.\n\nGDT_ENTRIES    EQU    8\nIDT_ENTRIES    EQU    32\n\n; define some constants to index into the real GDT\n\nGDT_ALIAS      EQU    1*SIZE DESC\nIDT_ALIAS      EQU    2*SIZE DESC\nINIT_TSS       EQU    3*SIZE DESC\nINIT_TSS_A     EQU    4*SIZE DESC\nINIT_LDT       EQU    5*SIZE DESC\nINIT_LDT_A     EQU    6*SIZE DESC\n\n;\n; location of alias in INIT_LDT\n\nINIT_LDT_ALIAS    EQU    1*SIZE DESC\n\n;\n; access rights byte for DATA and TSS descriptors\n\nDS_ACCESS   EQU   010010010B\nTSS_ACCESS  EQU   010001001B\n\n\n;\n; This temporary GDT will be used to set up the real GDT in RAM.\n\nTemp_GDT    LABEL   BYTE        ; tag for begin of scratch GDT\n\nNULL_DES    DESC <>             ; NULL descriptor\n\n                                ; 32-Gigabyte data segment based at 0\nFLAT_DES    DESC <0FFFFH,0,0,92h,0CFh,0>\n\nGDT_eprom     DP    ?           ; Builder places GDT address and limit\n                                ; in this 6 byte area.\n\nIDT_eprom     DP    ?           ; Builder places IDT address and limit\n                                ; in this 6 byte area.\n\n;\n; Prepare operand for loadings GDTR and LDTR.\n\n\nTGDT_pword     LABEL  PWORD                 ; for temp GDT\n        DW     end_Temp_GDT_Temp_GDT -1\n        DD     0\n\nGDT_pword      LABEL  PWORD                 ; for GDT in RAM\n        DW     GDT_ENTRIES * SIZE DESC -1\n        DD     GDTbase\n\nIDT_pword      LABEL   PWORD                ; for IDT in RAM\n        DW     IDT_ENTRIES * SIZE DESC -1\n        DD     IDTbase\n\n\nend_Temp_GDT   LABEL   BYTE\n\n;\n; Define equates for addressing convenience.\n\nGDT_DES_FLAT        EQU DS:GDT_ALIAS +GDTbase\nIDT_DES_FLAT        EQU DS:IDT_ALIAS +GDTbase\n\nINIT_TSS_A_OFFSET   EQU DS:INIT_TSS_A\nINIT_TSS_OFFSET     EQU DS:INIT_TSS\n\nINIT_LDT_A_OFFSET   EQU DS:INIT_LDT_A\nINIT_LDT_OFFSET     EQU DS:INIT_LDT\n\n\n; define pointer for first task switch\n\nENTRY POINTER LABEL DWORD\n             DW 0, INIT_TSS\n\n;******************************************************************\n;\n;   Jump from reset vector to here.\n\nSTART:\n\n    CLI                ;disable interrupts\n    CLD                ;clear direction flag\n\n    LIDT    NULL_des   ;force shutdown on errors\n\n;\n;   move scratch GDT to RAM at physical 0\n\n    XOR DI,DI\n    MOV ES,DI           ;point ES:DI to physical location 0\n\n\n    MOV SI,OFFSET Temp_GDT\n    MOV CX,end_Temp_GDT-Temp_GDT        ;set byte count\n    INC CX\n;\n;   move table\n\n    REP MOVS BYTE PTR ES:[DI],BYTE PTR CS:[SI]\n\n    LGDT    tGDT_pword                ;load GDTR for Temp. GDT\n                                      ;(located at 0)\n\n;   switch to protected mode\n\n    MOV EAX,CR0                       ;get current CRO\n    MOV EAX,1                         ;set PE bit\n    MOV CRO,EAX                       ;begin protected mode\n;\n;   clear prefetch queue\n\n    JMP SHORT flush\nflush:\n\n; set DS,ES,SS to address flat linear space (0 ... 4GB)\n\n    MOV BX,FLAT_DES-Temp_GDT\n    MOV US,BX\n    MOV ES,BX\n    MOV SS,BX\n;\n; initialize stack pointer to some (arbitrary) RAM location\n\n    MOV ESP, OFFSET end_Temp_GDT\n\n;\n; copy eprom GDT to RAM\n\n    MOV ESI,DWORD PTR GDT_eprom +2 ; get base of eprom GDT\n                                   ; (put here by builder).\n\n    MOV EDI,GDTbase                ; point ES:EDI to GDT base in RAM.\n\n    MOV CX,WORD PTR gdt_eprom +0   ; limit of eprom GDT\n    INC CX\n    SHR CX,1                       ; easier to move words\n    CLD\n    REP MOVS   WORD PTR ES:[EDI],WORD PTR DS:[ESI]\n\n;\n; copy eprom IDT to RAM\n;\n    MOV ESI,DWORD PTR IDT_eprom +2 ; get base of eprom IDT\n                                   ; (put here by builder)\n\n    MOV EDI,IDTbase                ; point ES:EDI to IDT base in RAM.\n\n    MOV CX,WORD PTR idt_eprom +0   ; limit of eprom IDT\n    INC CX\n    SHR CX,1\n    CLD\n    REP MOVS   WORD PTR ES:[EDI],WORD PTR DS:[ESI]\n\n; switch to RAM GDT and IDT\n;\n    LIDT IDT_pword\n    LGDT GDT_pword\n\n;\n    MOV BX,GDT_ALIAS               ; point DS to GDT alias\n    MOV DS,BX\n;\n; copy eprom TSS to RAM\n;\n    MOV BX,INIT_TSS_A              ; INIT TSS A descriptor base\n                                   ; has RAM location of INIT TSS.\n\n    MOV ES,BX                      ; ES points to TSS in RAM\n\n    MOV BX,INIT_TSS                ; get inital task selector\n    LAR DX,BX                      ; save access byte\n    MOV [BX].access,DS_ACCESS      ; set access as data segment\n    MOV FS,BX                      ; FS points to eprom TSS\n\n    XOR si,si                      ; FS:si points to eprom TSS\n    XOR di,di                      ; ES:di points to RAM TSS\n\n    MOV CX,[BX].lim_0_15           ; get count to move\n    INC CX\n\n;\n; move INIT_TSS to RAM.\n\n    REP MOVS BYTE PTR ES:[di],BYTE PTR FS:[si]\n\n    MOV [BX].access,DH             ; restore access byte\n\n;\n; change base of INIT TSS descriptor to point to RAM.\n\n    MOV AX,INIT_TSS_A_OFFSET.bas_0_15\n    MOV INIT_TSS_OFFSET.bas_0_15,AX\n    MOV AL,INIT_TSS_A_OFFSET.bas_16_23\n    MOV INIT_TSS_OFFSET.bas_16_23,AL\n    MOV AL,INIT_TSS_A_OFFSET.bas_24_31\n    MOV INIT_TSS_OFFSET.bas_24_31,AL\n\n;\n; change INIT TSS A to form a save area for TSS on first task\n; switch. Use RAM at location 0.\n\n    MOV BX,INIT_TSS_A\n    MOV WORD PTR [BX].bas_0_15,0\n    MOV [BX].bas_16_23,0\n    MOV [BX].bas_24_31,0\n    MOV [BX].access,TSS_ACCESS\n    MOV [BX].gran,O\n    LTR BX                         ; defines save area for TSS\n\n;\n; copy eprom LDT to RAM\n\n    MOV BX,INIT_LDT_A              ; INIT_LDT_A descriptor has\n                                   ; base address in RAM for INIT_LDT.\n\n    MOV ES,BX                      ; ES points LDT location in RAM.\n\n    MOV AH,[BX].bas_24_31\n    MOV AL,[BX].bas_16_23\n    SHL EAX,16\n    MOV AX,[BX].bas_0_15           ; save INIT_LDT base (ram) in EAX\n\n    MOV BX,INIT_LDT                ; get inital LDT selector\n    LAR DX,BX                      ; save access rights\n    MOV [BX].access,DS_ACCESS      ; set access as data segment\n    MOV FS,BX                      ; FS points to eprom LDT\n\n    XOR si,si                      ; FS:SI points to eprom LDT\n    XOR di,di                      ; ES:DI points to RAM LDT\n\n    MOV CX,[BX].lim_0_15           ; get count to move\n    INC CX\n;\n; move initial LDT to RAM\n\n    REP MOVS BYTE PTR ES:[di],BYTE PTR FS:[si]\n\n    MOV [BX].access,DH             ; restore access rights in\n                                   ; INIT_LDT descriptor\n\n;\n; change base of alias (of INIT_LDT) to point to location in RAM.\n\n    MOV ES:[INIT_LDT_ALIAS].bas_0_15,AX\n    SHR EAX,16\n    MOV ES:[INIT_LDT_ALIAS].bas_16_23,AL\n    MOV ES:[INIT_LDT_ALIAS].bas_24_31,AH\n\n;\n; now set the base value in INIT_LDT descriptor\n\n    MOV AX,INIT_LDT_A_OFFSET.bas_0_15\n    MOV INIT_LDT_OFFSET.bas_0_15,AX\n    MOV AL,INIT_LDT_A_OFFSET.bas_16_23\n    MOV INIT_LDT_OFFSET.bas_16_23,AL\n    MOV AL,INIT_LDT_A_OFFSET.bas_24_31\n    MOV INIT_LDT_OFFSET.bas_24_31,AL\n\n;\n; Now GDT, IDT, initial TSS and initial LDT are all set up.\n;\n; Start the first task!\n'\n   JMP ENTRY_POINTER\n\nRESET_CODE ends\n   END START, SS:DUMMY,DS:DUMMY\n\n\n10.6  TLB Testing\n\nThe 80386 provides a mechanism for testing the Translation Lookaside Buffer\n(TLB), the cache used for translating linear addresses to physical\naddresses. Although failure of the TLB hardware is extremely unlikely, users\nmay wish to include TLB confidence tests among other power-up confidence\ntests for the 80386.\n\n\nNOTE\n  This TLB testing mechanism is unique to the 80386 and may not be\n  continued in the same way in future processors. Sortware that uses\n  this mechanism may be incompatible with future processors.\n\n\nWhen testing the TLB it is recommended that paging be turned off (PG=0 in\nCR0) to avoid interference with the test data being written to the TLB.\n\n\n10.6.1  Structure of the TLB\n\nThe TLB is a four-way set-associative memory. Figure 10-3 illustrates the\nstructure of the TLB. There are four sets of eight entries each. Each entry\nconsists of a tag and data. Tags are 24-bits wide. They contain the\nhigh-order 20 bits of the linear address, the valid bit, and three attribute\nbits. The data portion of each entry contains the high-order 20 bits of the\nphysical address.\n\n\n10.6.2  Test Registers\n\nTwo test registers, shown in Figure 10-4, are provided for the purpose of\ntesting. TR6 is the test command register, and TR7 is the test data\nregister. These registers are accessed by variants of the MOV\ninstruction. A test register may be either the source operand or destination\noperand. The MOV instructions are defined in both real-address mode and\nprotected mode. The test registers are privileged resources; in protected\nmode, the MOV instructions that access them can only be executed at\nprivilege level 0. An attempt to read or write the test registers when\nexecuting at any other privilege level causes a general\nprotection exception.\n\nThe test command register (TR6) contains a command and an address tag to\nuse in performing the command:\n\nC         This is the command bit. There are two TLB testing commands:\n          write entries into the TLB, and perform TLB lookups. To cause an\n          immediate write into the TLB entry, move a doubleword into TR6\n          that contains a 0 in this bit. To cause an immediate TLB lookup,\n          move a doubleword into TR6 that contains a 1 in this bit.\n\nLinear    On a TLB write, a TLB entry is allocated to this linear address;\nAddress   the rest of that TLB entry is set per the value of TR7 and the\n          value just written into TR6. On a TLB lookup, the TLB is\n          interrogated per this value; if one and only one TLB entry\n          matches, the rest of the fields of TR6 and TR7 are set from the\n          matching TLB entry.\n\nV         The valid bit for this TLB entry. The TLB uses the valid bit to\n          identify entries that contain valid data. Entries of the TLB\n          that have not been assigned values have zero in the valid bit.\n          All valid bits can be cleared by writing to CR3.\n\nD, D#     The dirty bit (and its complement) for/from the TLB entry.\n\nU, U#     The U/S bit (and its complement) for/from the TLB entry.\n\nW, W#     The R/W bit (and its complement) for/from the TLB entry.\n\n          The meaning of these pairs of bits is given by Table 10-1,\n          where X represents D, U, or W.\n\nThe test data register (TR7) holds data read from or data to be written to\nthe TLB.\n\nPhysical  This is the data field of the TLB. On a write to the TLB, the\nAddress   TLB entry allocated to the linear address in TR6 is set to this\n          value. On a TLB lookup, if HT is set, the data field (physical\n          address) from the TLB is read out to this field. If HT is not\n          set, this field is undefined.\n\nHT        For a TLB lookup, the HT bit indicates whether the lookup was a\n          hit (HT \u001b 1) or a miss (HT \u001b 0). For a TLB write, HT must be set\n          to 1.\n\nREP       For a TLB write, selects which of four associative blocks of the\n          TLB is to be written. For a TLB read, if HT is set, REP reports\n          in which of the four associative blocks the tag was found; if HT\n          is not set, REP is undefined.\n\n\nTable 10-1. Meaning of D, U, and W Bit Pairs\n\nX     X#      Effect during        Value of bit X\n              TLB Lookup           after TLB Write\n\n0     0       (undefined)          (undefined)\n0     1       Match if X=0         Bit X becomes 0\n1     0       Match if X=1         Bit X becomes 1\n1     1       (undefined)          (undefined)\n\n\nFigure 10-3.  TLB Structure\n\n                                   ͻ\n                                  7       TAG             DATA      \n                                   ͹\n                                   \u0007                 \u0007                \u0007\n                           \u0007                 \u0007                \u0007\n                        SET 11    \u0007                 \u0007                \u0007\n                               ͹\n                                1       TAG             DATA      \n                                 ͹\n                                0       TAG             DATA      \n                                 ͼ\n                     \n                                 ͻ\n                                7       TAG             DATA      \n                                 ͹\n                                 \u0007                 \u0007                \u0007\n                               \u0007                 \u0007                \u0007\n                        SET 10    \u0007                 \u0007                \u0007\n                               ͹\n                                1       TAG             DATA      \n       D                       ͹\n       A                      0       TAG             DATA      \n       T                 ͼ\n       A             \n         Ŀ                ͻ\n       B                      7       TAG             DATA      \n       U                       ͹\n       S                       \u0007                 \u0007                \u0007\n                               \u0007                 \u0007                \u0007\n                        SET 01    \u0007                 \u0007                \u0007\n                               ͹\n                                1       TAG             DATA      \n                                 ͹\n                                0       TAG             DATA      \n                                 ͼ\n                     \n                                 ͻ\n                                7       TAG             DATA      \n                                 ͹\n                                 \u0007                 \u0007                \u0007\n                               \u0007                 \u0007                \u0007\n                        SET 00    \u0007                 \u0007                \u0007\n                           ͹\n                                  1       TAG             DATA      \n                                   ͹\n                                  0       TAG             DATA      \n                                   ͼ\n\n\nFigure 10-4.  Test Registers\n\n      31                23              15   11      7             0\n     ͻ\n                                                        H      \n                PHYSICAL ADDRESS           0 0 0 0 0 0 0 REP0 0 TR7\n                                                        T      \n     Ķ\n                                             D U W        \n                 LINEAR ADDRESS            VD U   0 0 0 0C TR8\n                                             # # #        \n     ͼ\n\n     NOTE: 0 INDICATES INTEL RESERVED. NO NOT DEFINE\n\n\n10.6.3  Test Operations\n\nTo write a TLB entry:\n\n  1.  Move a doubleword to TR7 that contains the desired physical address,\n      HT, and REP values. HT must contain 1. REP must point to the\n      associative block in which to place the entry.\n\n  2.  Move a doubleword to TR6 that contains the appropriate linear\n      address, and values for V, D, U, and W. Be sure C=0 for \"write\"\n      command.\n\nBe careful not to write duplicate tags; the results of doing so are\nundefined.\n\nTo look up (read) a TLB entry:\n\n  1.  Move a doubleword to TR6 that contains the appropriate linear address\n      and attributes. Be sure C=1 for \"lookup\" command.\n\n  2.  Store TR7. If the HT bit in TR7 indicates a hit, then the other\n      values reveal the TLB contents. If HT indicates a miss, then the other\n      values in TR7 are indeterminate.\n\nFor the purposes of testing, the V bit functions as another bit of\naddresss.  The V bit for a lookup request should usually be set, so that\nuninitialized tags do not match. Lookups with V=0 are unpredictable if any\ntags are uninitialized.\n\n\nChapter 11  Coprocessing and Multiprocessing\n\n\n\nThe 80386 has two levels of support for multiple parallel processing units:\n\n    A highly specialized interface for very closely coupled processors of\n     a type known as coprocessors.\n\n    A more general interface for more loosely coupled processors of\n     unspecified type.\n\n\n11.1  Coprocessing\n\nThe components of the coprocessor interface include:\n\n    ET bit of control register zero (CR0)\n    The EM, and MP bits of CR0\n    The ESC instructions\n    The WAIT instruction\n    The TS bit of CR0\n    Exceptions\n\n\n11.1.1  Coprocessor Identification\n\nThe 80386 is designed to operate with either an 80287 or 80387 math\ncoprocessor. The ET bit of CR0 indicates which type of coprocessor is\npresent. ET is set automatically by the 80386 after RESET according to the\nlevel detected on the ERROR# input. If desired, ET may also be set or reset\nby loading CR0 with a MOV instruction. If ET is set, the 80386 uses the\n32-bit protocol of the 80387; if reset, the 80386 uses the 16-bit protocol\nof the 80287.\n\n\n11.1.2  ESC and WAIT Instructions\n\nThe 80386 interprets the pattern 11011B in the first five bits of an\ninstruction as an opcode intended for a coprocessor. Instructions thus\nmarked are called ESCAPE or ESC instructions. The CPU performs the following\nfunctions upon encountering an ESC instruction before sending the\ninstruction to the coprocessor:\n\n    Tests the emulation mode (EM) flag to determine whether coprocessor\n     functions are being emulated by software.\n\n    Tests the TS flag to determine whether there has been a context change\n     since the last ESC instruction.\n\n    For some ESC instructions, tests the ERROR# pin to determine whether\n     the coprocessor detected an error in the previous ESC instruction.\n\nThe WAIT instruction is not an ESC instruction, but WAIT causes the CPU to\nperform some of the same tests that it performs upon encountering an ESC\ninstruction. The processor performs the following actions for a WAIT\ninstruction:\n\n    Waits until the coprocessor no longer asserts the BUSY# pin.\n\n    Tests the ERROR# pin (after BUSY# goes inactive). If ERROR# is active,\n     the 80386 signals exception 16, which indicates that the coprocessor\n     encountered an error in the previous ESC instruction.\n\n    WAIT can therefore be used to cause exception 16 if an error is\n     pending from a previous ESC instruction. Note that, if no coprocessor\n     is present, the ERROR# and BUSY# pins should be tied inactive to\n     prevent WAIT from waiting forever or causing spurious exceptions.\n\n\n11.1.3  EM and MP Flags\n\nThe EM and MP flags of CR0 control how the processor reacts to coprocessor\ninstructions.\n\nThe EM bit indicates whether coprocessor functions are to be emulated. If\nthe processor finds EM set when executing an ESC instruction, it signals\nexception 7, giving the exception handler an opportunity to emulate the ESC\ninstruction.\n\nThe MP (monitor coprocessor) bit indicates whether a coprocessor is\nactually attached. The MP flag controls the function of the WAIT\ninstruction. If, when executing a WAIT instruction, the CPU finds MP set,\nthen it tests the TS flag; it does not otherwise test TS during a WAIT\ninstruction. If it finds TS set under these conditions, the CPU signals\nexception 7.\n\nThe EM and MP flags can be changed with the aid of a MOV instruction using\nCR0 as the destination operand and read with the aid of a MOV instruction\nwith CR0 as the source operand. These forms of the MOV instruction can be\nexecuted only at privilege level zero.\n\n\n11.1.4  The Task-Switched Flag\n\nThe TS bit of CR0 helps to determine when the context of the coprocessor\ndoes not match that of the task being executed by the 80386 CPU. The 80386\nsets TS each time it performs a task switch (whether triggered by software\nor by hardware interrupt). If, when interpreting one of the ESC\ninstructions, the CPU finds TS already set, it causes exception 7. The WAIT\ninstruction also causes exception 7 if both TS and MP are set. Operating\nsystems can use this exception to switch the context of the coprocessor to\ncorrespond to the current task. Refer to the 80386 System Software Writer's\nGuide for an example.\n\nThe CLTS instruction (legal only at privilege level zero) resets the TS\nflag.\n\n\n11.1.5  Coprocessor Exceptions\n\nThree exceptions aid in interfacing to a coprocessor: interrupt 7\n(coprocessor not available), interrupt 9 (coprocessor segment overrun), and\ninterrupt 16 (coprocessor error).\n\n\n11.1.5.1  Interrupt 7  Coprocessor Not Available\n\nThis exception occurs in either of two conditions:\n\n  1.  The CPU encounters an ESC instruction and EM is set. In this case,\n      the exception handler should emulate the instruction that caused the\n      exception. TS may also be set.\n\n  2.  The CPU encounters either the WAIT instruction or an ESC instruction\n      when both MP and TS are set. In this case, the exception handler\n      should update the state of the coprocessor, if necessary.\n\n\n11.1.5.2  Interrupt 9  Coprocessor Segment Overrun\n\nThis exception occurs in protected mode under the following conditions:\n\n    An operand of a coprocessor instruction wraps around an addressing\n     limit (0FFFFH for small segments, 0FFFFFFFFH for big segments, zero for\n     expand-down segments). An operand may wrap around an addressing limit\n     when the segment limit is near an addressing limit and the operand is\n     near the largest valid address in the segment. Because of the\n     wrap-around, the beginning and ending addresses of such an operand\n     will be near opposite ends of the segment.\n\n    Both the first byte and the last byte of the operand (considering\n     wrap-around) are at addresses located in the segment and in present and\n     accessible pages.\n\n    The operand spans inaccessible addresses. There are two ways that such\n     an operand may also span inaccessible addresses:\n\n     1.  The segment limit is not equal to the addressing limit (e.g.,\n         addressing limit is FFFFH and segment limit is FFFDH); therefore,\n         the operand will span addresses that are not within the segment\n         (e.g., an 8-byte operand that starts at valid offset FFFC will span\n         addresses FFFC-FFFF and 0000-0003; however, addresses FFFE and FFFF\n         are not valid, because they exceed the limit);\n\n     2.  The operand begins and ends in present and accessible pages but\n         intermediate bytes of the operand fall either in a not-present page\n         or in a page to which the current procedure does not have access\n         rights.\n\nThe address of the failing numerics instruction and data operand may be\nlost; an FSTENV does not return reliable addresses. As with the 80286/80287,\nthe segment overrun exception should be handled by executing an FNINIT\ninstruction (i.e., an FINIT without a preceding WAIT). The return address on\nthe stack does not necessarily point to the failing instruction nor to the\nfollowing instruction. The failing numerics instruction is not restartable.\n\nCase 2 can be avoided by either aligning all segments on page boundaries or\nby not starting them within 108 bytes of the start or end of a page. (The\nmaximum size of a coprocessor operand is 108 bytes.) Case 1 can be avoided\nby making sure that the gap between the last valid offset and the first\nvalid offset of a segment is either no less than 108 bytes or is zero (i.e.,\nthe segment is of full size). If neither software system design constraint\nis acceptable, the exception handler should execute FNINIT and should\nprobably terminate the task.\n\n\n11.1.5.3  Interrupt 16  Coprocessor Error\n\nThe numerics coprocessors can detect six different exception conditions\nduring instruction execution. If the detected exception is not masked by a\nbit in the control word, the coprocessor communicates the fact that an error\noccurred to the CPU by a signal at the ERROR# pin. The CPU causes interrupt\n16 the next time it checks the ERROR# pin, which is only at the beginning of\na subsequent WAIT or certain ESC instructions. If the exception is masked,\nthe numerics coprocessor handles the exception according to on-board logic;\nit does not assert the ERROR# pin in this case.\n\n\n11.2  General Multiprocessing\n\nThe components of the general multiprocessing interface include:\n\n    The LOCK# signal\n\n    The LOCK instruction prefix, which gives programmed control of the\n     LOCK# signal.\n\n    Automatic assertion of the LOCK# signal with implicit memory updates\n     by the processor\n\n\n11.2.1  LOCK and the LOCK# Signal\n\nThe LOCK instruction prefix and its corresponding output signal LOCK# can\nbe used to prevent other bus masters from interrupting a data movement\noperation. LOCK may only be used with the following 80386 instructions when\nthey modify memory. An undefined-opcode exception results from using LOCK\nbefore any instruction other than:\n\n    Bit test and change: BTS, BTR, BTC.\n    Exchange: XCHG.\n    Two-operand arithmetic and logical: ADD, ADC, SUB, SBB, AND, OR, XOR.\n    One-operand arithmetic and logical: INC, DEC, NOT, and NEG.\n\nA locked instruction is only guaranteed to lock the area of memory defined\nby the destination operand, but it may lock a larger memory area. For\nexample, typical 8086 and 80286 configurations lock the entire physical\nmemory space. The area of memory defined by the destination operand is\nguaranteed to be locked against access by a processor executing a locked\ninstruction on exactly the same memory area, i.e., an operand with\nidentical starting address and identical length.\n\nThe integrity of the lock is not affected by the alignment of the memory\nfield. The LOCK signal is asserted for as many bus cycles as necessary to\nupdate the entire operand.\n\n\n11.2.2  Automatic Locking\n\nIn several instances, the processor itself initiates activity on the data\nbus. To help ensure that such activities function correctly in\nmultiprocessor configurations, the processor automatically asserts the LOCK#\nsignal. These instances include:\n\n    Acknowledging interrupts.\n\n     After an interrupt request, the interrupt controller uses the data bus\n     to send the interrupt ID of the interrupt source to the CPU. The CPU\n     asserts LOCK# to ensure that no other data appears on the data bus\n     during this time.\n\n    Setting busy bit of TSS descriptor.\n\n     The processor tests and sets the busy-bit in the type field of the TSS\n     descriptor when switching to a task. To ensure that two different\n     processors cannot simultaneously switch to the same task, the processor\n     asserts LOCK# while testing and setting this bit.\n\n    Loading of descriptors.\n\n     While copying the contents of a descriptor from a descriptor table into\n     a segment register, the processor asserts LOCK# so that the descriptor\n     cannot be modified by another processor while it is being loaded. For\n     this action to be effective, operating-system procedures that update\n     descriptors should adhere to the following steps:\n\n       Use a locked update to the access-rights byte to mark the\n         descriptor not-present.\n\n       Update the fields of the descriptor.  (This may require several\n         memory accesses; therefore, LOCK cannot be used.)\n\n       Use a locked update to the access-rights byte to mark the\n         descriptor present again.\n\n    Updating page-table A and D bits.\n\n     The processor exerts LOCK# while updating the A (accessed) and D \n     (dirty) bits of page-table entries.  Also the processor bypasses the\n     page-table cache and directly updates these bits in memory.\n\n    Executing XCHG instruction.\n\n     The 80386 always asserts LOCK during an XCHG instruction that\n     references memory (even if the LOCK prefix is not used).\n\n\n11.2.3  Cache Considerations\n\nSystems programmers must take care when updating shared data that may also\nbe stored in on-chip registers and caches.  With the 80386, such  shared\ndata includes:\n\n    Descriptors, which may be held in segment registers.\n\n     A change to a descriptor that is shared among processors should be\n     broadcast to all processors.  Segment registers are effectively\n     \"descriptor caches\".  A change to a descriptor will not be utilized by\n     another processor if that processor already has a copy of the old\n     version of the descriptor in a segment register.\n\n    Page tables, which may be held in the page-table cache.\n\n     A change to a page table that is shared among processors should be\n     broadcast to all processors, so that others can flush their page-table\n     caches and reload them with up-to-date page tables from memory.\n\nSystems designers can employ an interprocessor interrupt to handle the\nabove cases. When one processor changes data that may be cached by other\nprocessors, it can send an interrupt signal to all other processors that may\nbe affected by the change. If the interrupt is serviced by an interrupt\ntask, the task switch automatically flushes the segment registers. The task\nswitch also flushes the page-table cache if the PDBR (the contents of CR3)\nof the interrupt task is different from the PDBR of every other task.\n\nIn multiprocessor systems that need a cacheability signal from the CPU, it\nis recommended that physical address pin A31 be used to indicate\ncacheability. Such a system can then possess up to 2 Gbytes of physical\nmemory. The virtual address range available to the programmer is not\naffected by this convention.\n\n\nChapter 12  Debugging\n\n\n\nThe 80386 brings to Intel's line of microprocessors significant advances in\ndebugging power. The single-step exception and breakpoint exception of\nprevious processors are still available in the 80386, but the principal\ndebugging support takes the form of debug registers. The debug registers\nsupport both instruction breakpoints and data breakpoints. Data breakpoints\nare an important innovation that can save hours of debugging time by\npinpointing, for example, exactly when a data structure is being\noverwritten. The breakpoint registers also eliminate the complexities\nassociated with writing a breakpoint instruction into a code segment\n(requires a data-segment alias for the code segment) or a code segment\nshared by multiple tasks (the breakpoint exception can occur in the context\nof any of the tasks). Breakpoints can even be set in code contained in ROM.\n\n\n12.1  Debugging Features of the Architecture\n\nThe features of the 80386 architecture that support debugging include:\n\nReserved debug interrupt vector\n\nPermits processor to automatically invoke a debugger task or procedure when\nan event occurs that is of interest to the debugger.\n\nFour debug address registers\n\nPermit programmers to specify up to four addresses that the CPU will\nautomatically monitor.\n\nDebug control register\n\nAllows programmers to selectively enable various debug conditions\nassociated with the four debug addresses.\n\nDebug status register\n\nHelps debugger identify condition that caused debug exception.\n\nTrap bit of TSS (T-bit)\n\nPermits monitoring of task switches.\n\nResume flag (RF) of flags register\n\nAllows an instruction to be restarted after a debug exception without\nimmediately causing another debug exception due to the same condition.\n\nSingle-step flag (TF)\n\nAllows complete monitoring of program flow by specifying whether the CPU\nshould cause a debug exception with the execution of every instruction.\n\nBreakpoint instruction\n\nPermits debugger intervention at any point in program execution and aids\ndebugging of debugger programs.\n\nReserved interrupt vector for breakpoint exception\n\nPermits processor to automatically invoke a handler task or procedure upon\nencountering a breakpoint instruction.\n\nThese features make it possible to invoke a debugger that is either a\nseparate task or a procedure in the context of the current task. The\ndebugger can be invoked under any of the following kinds of conditions:\n\n    Task switch to a specific task.\n    Execution of the breakpoint instruction.\n    Execution of every instruction.\n    Execution of any instruction at a given address.\n    Read or write of a byte, word, or doubleword at any specified address.\n    Write to a byte, word, or doubleword at any specified address.\n    Attempt to change a debug register.\n\n\n12.2  Debug Registers\n\nSix 80386 registers are used to control debug features. These registers are\naccessed by variants of the MOV instruction. A debug register may be either\nthe source operand or destination operand. The debug registers are\nprivileged resources; the MOV instructions that access them can only be\nexecuted at privilege level zero. An attempt to read or write the debug\nregisters when executing at any other privilege level causes a general\nprotection exception. Figure 12-1 shows the format of the debug registers.\n\n\nFigure 12-1.  Debug Registers\n\n      31              23              15              7             0\n     ͻ\n     LENR/WLENR/WLENR/WLENR/W         GLGLGLGLGL\n                             0 000 0 0           DR7\n      3  3  2  2  1  1  0  0          EE33221100\n     Ķ\n                                    BBB                 BBBB\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0     DR6\n                                    TSD                 3210\n     Ķ\n                                                                    \n                                 RESERVED                            DR5\n                                                                    \n     Ķ\n                                                                    \n                                 RESERVED                            DR4\n                                                                    \n     Ķ\n                                                                    \n                      BREAKPOINT 3 LINEAR ADDRESS                    DR3\n                                                                    \n     Ķ\n                                                                    \n                      BREAKPOINT 2 LINEAR ADDRESS                    DR2\n                                                                    \n     Ķ\n                                                                    \n                      BREAKPOINT 1 LINEAR ADDRESS                    DR1\n                                                                    \n     Ķ\n                                                                    \n                      BREAKPOINT 0 LINEAR ADDRESS                    DR0\n                                                                    \n     ͼ\n\n\nNOTE\n      0 MEANS INTEL RESERVED. DO NOT DEFINE.\n\n\n\n12.2.1  Debug Address Registers (DR0-DR3)\n\nEach of these registers contains the linear address associated with one of\nfour breakpoint conditions. Each breakpoint condition is further defined by\nbits in DR7.\n\nThe debug address registers are effective whether or not paging is enabled.\nThe addresses in these registers are linear addresses. If paging is enabled,\nthe linear addresses are translated into physical addresses by the\nprocessor's paging mechanism (as explained in Chapter 5). If paging is not\nenabled, these linear addresses are the same as physical addresses.\n\nNote that when paging is enabled, different tasks may have different\nlinear-to-physical address mappings. When this is the case, an address in a\ndebug address register may be relevant to one task but not to another. For\nthis reason the 80386  has both global and local enable bits in DR7. These\nbits indicate whether a given debug address has a global (all tasks) or\nlocal (current task only) relevance.\n\n\n12.2.2  Debug Control Register (DR7)\n\nThe debug control register shown in Figure 12-1 both helps to define the\ndebug conditions and selectively enables and disables those conditions.\n\nFor each address in registers DR0-DR3, the corresponding fields R/W0\nthrough R/W3 specify the type of action that should cause a breakpoint. The\nprocessor interprets these bits as follows:\n\n   00  Break on instruction execution only\n   01  Break on data writes only\n   10  undefined\n   11  Break on data reads or writes but not instruction fetches\n\nFields LEN0 through LEN3 specify the length of data item to be monitored. A\nlength of 1, 2, or 4 bytes may be specified. The values of the length fields\nare interpreted as follows:\n\n   00  one-byte length\n   01  two-byte length\n   10  undefined\n   11  four-byte length\n\nIf RWn is 00 (instruction execution), then LENn should also be 00. Any other\nlength is undefined.\n\nThe low-order eight bits of DR7 (L0 through L3 and G0 through G3)\nselectively enable the four address breakpoint conditions. There are two\nlevels of enabling: the local (L0 through L3) and global (G0 through G3)\nlevels. The local enable bits are automatically reset by the processor at\nevery task switch to avoid unwanted breakpoint conditions in the new task.\nThe global enable bits are not reset by a task switch; therefore, they can\nbe used for conditions that are global to all tasks.\n\nThe LE and GE bits control the \"exact data breakpoint match\" feature of the\nprocessor. If either LE or GE is set, the processor slows execution so that\ndata breakpoints are reported on the instruction that causes them. It is\nrecommended that one of these bits be set whenever data breakpoints are\narmed. The processor clears LE at a task switch but does not clear GE.\n\n\n12.2.3  Debug Status Register (DR6)\n\nThe debug status register shown in Figure 12-1 permits the debugger to\ndetermine which debug conditions have occurred.\n\nWhen the processor detects an enabled debug exception, it sets the\nlow-order bits of this register (B0 thru B3) before entering the debug\nexception handler. Bn is set if the condition described by DRn, LENn, and\nR/Wn occurs. (Note that the processor sets Bn regardless of whether Gn or\nLn is set. If more than one breakpoint condition occurs at one time and if\nthe breakpoint trap occurs due to an enabled condition other than n, Bn may\nbe set, even though neither Gn nor Ln is set.)\n\nThe BT bit is associated with the T-bit (debug trap bit) of the TSS (refer\nto 7 for the location of the T-bit). The processor sets the BT bit before\nentering the debug handler if a task switch has occurred and the T-bit of\nthe new TSS is set. There is no corresponding bit in DR7 that enables and\ndisables this trap; the T-bit of the TSS is the sole enabling bit.\n\nThe BS bit is associated with the TF (trap flag) bit of the EFLAGS\nregister. The BS bit is set if the debug handler is entered due to the\noccurrence of a single-step exception. The single-step trap is the\nhighest-priority debug exception; therefore, when BS is set, any of the\nother debug status bits may also be set.\n\nThe BD bit is set if the next instruction will read or write one of the\neight debug registers and ICE-386 is also using the debug registers at the\nsame time.\n\nNote that the bits of DR6 are never cleared by the processor. To avoid any\nconfusion in identifying the next debug exception, the debug handler should\nmove zeros to DR6 immediately before returning.\n\n\n12.2.4  Breakpoint Field Recognition\n\nThe linear address and LEN field for each of the four breakpoint conditions\ndefine a range of sequential byte addresses for a data breakpoint. The LEN\nfield permits specification of a one-, two-, or four-byte field. Two-byte\nfields must be aligned on word boundaries (addresses that are multiples of\ntwo) and four-byte fields must be aligned on doubleword boundaries\n(addresses that are multiples of four). These requirements are enforced by\nthe processor; it uses the LEN bits to mask the low-order bits of the\naddresses in the debug address registers. Improperly aligned code or data\nbreakpoint addresses will not yield the expected results.\n\nA data read or write breakpoint is triggered if any of the bytes\nparticipating in a memory access is within the field defined by a breakpoint\naddress register and the corresponding LEN field. Table 12-1 gives some\nexamples of breakpoint fields with memory references that both do and do not\ncause traps.\n\nTo set a data breakpoint for a misaligned field longer than one byte, it\nmay be desirable to put two sets of entries in the breakpoint register such\nthat each entry is properly aligned and the two entries together span the\nlength of the field.\n\nInstruction breakpoint addresses must have a length specification of one\nbyte (LEN = 00); other values are undefined. The processor recognizes an\ninstruction breakpoint address only when it points to the first byte of an\ninstruction. If the instruction has any prefixes, the breakpoint address\nmust point to the first prefix.\n\n\nTable 12-1. Breakpoint Field Recognition Examples\n\n                                    Address (hex)          Length\n\n                       DR0             0A0001          1 (LEN0 = 00)\nRegister Contents      DR1             0A0002          1 (LEN1 = 00)\n                       DR2             0B0002          2 (LEN2 = 01)\n                       DR3             0C0000          4 (LEN3 = 11)\n\nSome Examples of Memory                0A0001          1\nReferences That Cause Traps            0A0002          1\n                                       0A0001          2\n                                       0A0002          2\n                                       0B0002          2\n                                       0B0001          4\n                                       0C0000          4\n                                       0C0001          2\n                                       0C0003          1\n\nSome Examples of Memory                0A0000          1\nReferences That Don't Cause Traps      0A0003          4\n                                       0B0000          2\n                                       0C0004          4\n\n\n12.3  Debug Exceptions\n\nTwo of the interrupt vectors of the 80386 are reserved for exceptions that\nrelate to debugging. Interrupt 1 is the primary means of invoking debuggers\ndesigned expressly for the 80386; interrupt 3 is intended for debugging\ndebuggers and for compatibility with prior processors in Intel's 8086\nprocessor family.\n\n\n12.3.1  Interrupt 1  Debug Exceptions\n\nThe handler for this exception is usually a debugger or part of a debugging\nsystem. The processor causes interrupt 1 for any of several conditions. The\ndebugger can check flags in DR6 and DR7 to determine what condition caused\nthe exception and what other conditions might be in effect at the same time.\nTable 12-2 associates with each breakpoint condition the combination of\nbits that indicate when that condition has caused the debug exception.\n\nInstruction address breakpoint conditions are faults, while other debug\nconditions are traps. The debug exception may report either or both at one\ntime. The following paragraphs present details for each class of debug\nexception.\n\n\nTable 12-2. Debug Exception Conditions\n\nFlags to Test              Condition\n\nBS=1                       Single-step trap\nB0=1 AND (GE0=1 OR LE0=1)  Breakpoint DR0, LEN0, R/W0\nB1=1 AND (GE1=1 OR LE1=1)  Breakpoint DR1, LEN1, R/W1\nB2=1 AND (GE2=1 OR LE2=1)  Breakpoint DR2, LEN2, R/W2\nB3=1 AND (GE3=1 OR LE3=1)  Breakpoint DR3, LEN3, R/W3\nBD=1                       Debug registers not available; in use by ICE-386.\nBT=1                       Task switch\n\n\n12.3.1.1  Instruction Addrees Breakpoint\n\nThe processor reports an instruction-address breakpoint before it executes\nthe instruction that begins at the given address; i.e., an instruction-\naddress breakpoint exception is a fault.\n\nThe RF (restart flag) permits the debug handler to retry instructions that\ncause other kinds of faults in addition to debug faults. When it detects a\nfault, the processor automatically sets RF in the flags image that it pushes\nonto the stack. (It does not, however, set RF for traps and aborts.)\n\nWhen RF is set, it causes any debug fault to be ignored during the next\ninstruction. (Note, however, that RF does not cause breakpoint traps to be\nignored, nor other kinds of faults.)\n\nThe processor automatically clears RF at the successful completion of every\ninstruction except after the IRET instruction, after the POPF instruction,\nand after a JMP, CALL, or INT instruction that causes a task switch. These\ninstructions set RF to the value specified by the memory image of the EFLAGS\nregister.\n\nThe processor automatically sets RF in the EFLAGS image on the stack before\nentry into any fault handler. Upon entry into the fault handler for\ninstruction address breakpoints, for example, RF is set in the EFLAGS image\non the stack; therefore, the IRET instruction at the end of the handler will\nset RF in the EFLAGS register, and execution will resume at the breakpoint\naddress without generating another breakpoint fault at the same address.\n\nIf, after a debug fault, RF is set and the debug handler retries the\nfaulting instruction, it is possible that retrying the instruction will\nraise other faults. The retry of the instruction after these faults will\nalso be done with RF=1, with the result that debug faults continue to be\nignored. The processor clears RF only after successful completion of the\ninstruction.\n\nReal-mode debuggers can control the RF flag by using a 32-bit IRET. A\n16-bit IRET instruction does not affect the RF bit (which is in the\nhigh-order 16 bits of EFLAGS). To use a 32-bit IRET, the debugger must\nrearrange the stack so that it holds appropriate values for the 32-bit EIP,\nCS, and EFLAGS (with RF set in the EFLAGS image). Then executing an IRET\nwith an operand size prefix causes a 32-bit return, popping the RF flag\ninto EFLAGS.\n\n\n12.3.1.2  Data Address Breakpoint\n\nA data-address breakpoint exception is a trap; i.e., the processor reports\na data-address breakpoint after executing the instruction that accesses the\ngiven memory item.\n\nWhen using data breakpoints it is recommended that either the LE or GE bit\nof DR7 be set also. If either LE or GE is set, any data breakpoint trap is\nreported exactly after completion of the instruction that accessed the\nspecified memory item. This exact reporting is accomplished by forcing the\n80386 execution unit to wait for completion of data operand transfers before\nbeginning execution of the next instruction. If neither GE nor LE is set,\ndata breakpoints may not be reported until one instruction after the data is\naccessed or may not be reported at all. This is due to the fact that,\nnormally, instruction execution is overlapped with memory transfers to such\na degree that execution of the next instruction may begin before memory\ntransfers for the prior instruction are completed.\n\nIf a debugger needs to preserve the contents of a write breakpoint\nlocation, it should save the original contents before setting a write\nbreakpoint. Because data breakpoints are traps, a write into a breakpoint\nlocation will complete before the trap condition is reported. The handler\ncan report the saved value after the breakpoint is triggered. The data in\nthe debug registers can be used to address the new value stored by the\ninstruction that triggered the breakpoint.\n\n\n12.3.1.3  General Detect Fault\n\nThis exception occurs when an attempt is made to use the debug registers at\nthe same time that ICE-386 is using them. This additional protection feature\nis provided to guarantee that ICE-386 can have full control over the\ndebug-register resources when required. ICE-386 uses the debug-registers;\ntherefore, a software debugger that also uses these registers cannot run\nwhile ICE-386 is in use. The exception handler can detect this condition by\nexamining the BD bit of DR6.\n\n\n12.3.1.4  Single-Step Trap\n\nThis debug condition occurs at the end of an instruction if the trap flag\n(TF) of the flags register held the value one at the beginning of that\ninstruction.  Note that the exception does not occur at the end of an\ninstruction that sets TF. For example, if POPF is used to set TF, a\nsingle-step trap does not occur until after the instruction that follows\nPOPF.\n\nThe processor clears the TF bit before invoking the handler.  If TF=1 in\nthe flags image of a TSS at the time of a task switch, the exception occurs\nafter the first instruction is executed in the new task.\n\nThe single-step flag is normally not cleared by privilege changes inside a\ntask.  INT instructions, however, do clear TF.  Therefore, software\ndebuggers that single-step code must recognize and emulate INT n or INTO\nrather than executing them directly.\n\nTo maintain protection, system software should check the current execution\nprivilege level after any single step interrupt to see whether single\nstepping should continue at the current privilege level.\n\nThe interrupt priorities in hardware guarantee that if an external\ninterrupt occurs, single stepping stops. When both an external interrupt and\na single step interrupt occur together, the single step interrupt is\nprocessed first. This clears the TF bit. After saving the return address or\nswitching tasks, the external interrupt input is examined before the first\ninstruction of the single step handler executes.  If the external interrupt\nis still pending, it is then serviced. The external interrupt handler is not\nsingle-stepped. To single step an interrupt handler, just single step an INT\nn instruction that refers to the interrupt handler.\n\n\n12.3.1.5  Task Switch Breakpoint\n\nThe debug exception also occurs after a switch to an 80386 task if the\nT-bit of the new TSS is set.  The exception occurs after control has passed\nto the new task, but before the first instruction of that task is executed.\nThe exception handler can detect this condition by examining the BT bit of\nthe debug status register DR6.\n\nNote that if the debug exception handler is a task, the T-bit of its TSS\nshould not be set. Failure to observe this rule will cause the processor to\nenter an infinite loop.\n\n\n12.3.2  Interrupt 3  Breakpoint Exception\n\nThis exception is caused by execution of the breakpoint instruction INT 3.\nTypically, a debugger prepares a breakpoint by substituting the opcode of\nthe one-byte breakpoint instruction in place of the first opcode byte of the\ninstruction to be trapped. When execution of the INT 3 instruction causes\nthe exception handler to be invoked, the saved value of ES:EIP points to the\nbyte following the INT 3 instruction.\n\nWith prior generations of processors, this feature is used extensively for\ntrapping execution of specific instructions. With the 80386, the needs\nformerly filled by this feature are more conveniently solved via the debug\nregisters and interrupt 1.  However, the breakpoint exception is still\nuseful for debugging debuggers, because the breakpoint exception can vector\nto a different exception handler than that used by the debugger. The\nbreakpoint exception can also be useful when it is necessary to set a\ngreater number of breakpoints than permitted by the debug registers.\n\n\n                          PART III  COMPATIBILITY                          \n\n\nChapter 13  Executing 80286 Protected-Mode Code\n\n\n\n13.1  80286 Code Executes as a Subset of the 80386\n\nIn general, programs designed for execution in protected mode on an 80286\nexecute without modification on the 80386, because the features of the 80286\nare a subset of those of the 80386.\n\nAll the descriptors used by the 80286 are supported by the 80386 as long as\nthe Intel-reserved word (last word) of the 80286 descriptor is zero.\n\nThe descriptors for data segments, executable segments, local descriptor\ntables, and task gates are common to both the 80286 and the 80386. Other\n80286 descriptorsTSS segment, call gate, interrupt gate, and trap\ngateare supported by the 80386. The 80386 also has new versions of\ndescriptors for TSS segment, call gate, interrupt gate, and trap gate that\nsupport the 32-bit nature of the 80386. Both sets of descriptors can be\nused simultaneously in the same system.\n\nFor those descriptors that are common to both the 80286 and the 80386, the\npresence of zeros in the final word causes the 80386 to interpret these\ndescriptors exactly as 80286 does; for example:\n\nBase Address      The high-order eight bits of the 32-bit base address are\n                  zero, limiting base addresses to 24 bits.\n\nLimit             The high-order four bits of the limit field are zero,\n                  restricting the value of the limit field to 64K.\n\nGranularity bit   The granularity bit is zero, which implies that the value\n                  of the 16-bit limit is interpreted in units of one byte.\n\nB-bit             In a data-segment descriptor, the B-bit is zero, implying\n                  that the segment is no larger than 64 Kbytes.\n\nD-bit             In an executable-segment descriptor, the D-bit is zero,\n                  implying that 16-bit addressing and operands are the\n                  default.\n\nFor formats of these descriptors and documentation of their use refer to\nthe iAPX 286 Programmer's Reference Manual.\n\n\n13.2  Two ways to Execute 80286 Tasks\n\nWhen porting 80286 programs to the 80386, there are two cases to consider:\n\n  1.  Porting an entire 80286 system to the 80386, complete with 80286\n      operating system, loader, and system builder.\n\n      In this case, all tasks will have 80286 TSSs. The 80386 is being used\n      as a faster 286.\n\n  2.  Porting selected 80286 applications to run in an 80386 environment\n      with an 80386 operating system, loader, and system builder.\n\n      In this case, the TSSs used to represent 80286 tasks should be\n      changed to 80386 TSSs. It is theoretically possible to mix 80286 and\n      80386 TSSs, but the benefits are slight and the problems are great. It\n      is recommended that all tasks in a 80386 software system have 80386\n      TSSs. It is not necessary to change the 80286 object modules\n      themselves; TSSs are usually constructed by the operating system, by\n      the loader, or by the system builder. Refer to Chapter 16 for further\n      discussion of the interface between 16-bit and 32-bit code.\n\n\n13.3  Differences From 80286\n\nThe few differences that do exist primarily affect operating system code.\n\n\n13.3.1  Wraparound of 80286 24-Bit Physical Address Space\n\nWith the 80286, any base and offset combination that addresses beyond 16M\nbytes wraps around to the first megabyte of the 80286 address space. With\nthe 80386, since it has a greater physical address space, any such address\nfalls into the 17th megabyte. In the unlikely event that any software\ndepends on this anomaly, the same effect can be simulated on the 80386 by\nusing paging to map the first 64K bytes of the 17th megabyte of logical\naddresses to physical addresses in the first megabyte.\n\n\n13.3.2  Reserved Word of Descriptor\n\nBecause the 80386 uses the contents of the reserved word (last word) of\nevery descriptor, 80286 programs that place values in this word may not\nexecute correctly on the 80386.\n\n\n13.3.3  New Descriptor Type Codes\n\nOperating-system code that manages space in descriptor tables often uses an\ninvalid value in the access-rights field of descriptor-table entries to\nidentify unused entries. Access rights values of 80H and 00H remain invalid\nfor both the 80286 and 80386. Other values that were invalid on for the\n80286 may be valid for the 80386 because of the additional descriptor types\ndefined by the 80386.\n\n\n13.3.4  Restricted Semantics of LOCK\n\nThe 80286 processor implements the bus lock function differently than the\n80386. Programs that use forms of memory locking specific to the 80286 may\nnot execute properly when transported to a specific application of the\n80386.\n\nThe LOCK prefix and its corresponding output signal should only be used to\nprevent other bus masters from interrupting a data movement operation.  LOCK\nmay only be used with the following 80386 instructions when they modify\nmemory. An undefined-opcode exception results from using LOCK before any\nother instruction.\n\n    Bit test and change:  BTS, BTR, BTC.\n    Exchange: XCHG.\n    One-operand arithmetic and logical: INC, DEC, NOT, and NEG.\n    Two-operand arithmetic and logical:  ADD, ADC, SUB, SBB, AND, OR, XOR.\n\nA locked instruction is guaranteed to lock only the area of memory defined\nby the destination operand, but may lock a larger memory area.  For example,\ntypical 8086 and 80286 configurations lock the entire physical memory space.\nWith the 80386, the defined area of memory is guaranteed to be locked\nagainst access by a processor executing a locked instruction on exactly the\nsame memory area, i.e., an operand with identical starting address and\nidentical length.\n\n\n13.3.5  Additional Exceptions\n\nThe 80386 defines new exceptions that can occur even in systems designed\nfor the 80286.\n\n    Exception #6  invalid opcode\n\n     This exception can result from improper use of the LOCK instruction.\n\n    Exception #14  page fault\n\n     This exception may occur in an 80286 program if the operating system\n     enables paging. Paging can be used in a system with 80286 tasks as long\n     as all tasks use the same page directory. Because there is no place in\n     an 80286 TSS to store the PDBR, switching to an 80286 task does not\n     change the value of PDBR. Tasks ported from the 80286 should be given\n     80386 TSSs so they can take full advantage of paging.\n\n\nChapter 14  80386 Real-Address Mode\n\n\n\nThe real-address mode of the 80386 executes object code designed for\nexecution on 8086, 8088, 80186, or 80188 processors, or for execution in the\nreal-address mode of an 80286:\n\nIn effect, the architecture of the 80386 in this mode is almost identical\nto that of the 8086, 8088, 80186, and 80188. To a programmer, an 80386 in\nreal-address mode appears as a high-speed 8086 with extensions to the\ninstruction set and registers. The principal features of this architecture\nare defined in Chapters 2 and 3.\n\nThis chapter discusses certain additional topics that complete the system\nprogrammer's view of the 80386 in real-address mode:\n\n    Address formation.\n    Extensions to registers and instructions.\n    Interrupt and exception handling.\n    Entering and leaving real-address mode.\n    Real-address-mode exceptions.\n    Differences from 8086.\n    Differences from 80286 real-address mode.\n\n\n14.1  Physical Address Formation\n\nThe 80386 provides a one Mbyte + 64 Kbyte memory space for an 8086 program.\nSegment relocation is performed as in the 8086: the 16-bit value in a\nsegment selector is shifted left by four bits to form the base address of a\nsegment. The effective address is extended with four high order zeros and\nadded to the base to form a linear address as Figure 14-1 illustrates. (The\nlinear address is equivalent to the physical address, because paging is not\nused in real-address mode.) Unlike the 8086, the resulting linear address\nmay have up to 21 significant bits. There is a possibility of a carry when\nthe base address is added to the effective address. On the 8086, the carried\nbit is truncated, whereas on the 80386 the carried bit is stored in bit\nposition 20 of the linear address.\n\nUnlike the 8086 and 80286, 32-bit effective addresses can be generated (via\nthe address-size prefix); however, the value of a 32-bit address may not\nexceed 65535 without causing an exception. For full compatibility with 80286\nreal-address mode, pseudo-protection faults (interrupt 12 or 13 with no\nerror code) occur if an effective address is generated outside the range 0\nthrough 65535.\n\n\nFigure 14-1.  Real-Address Mode Address Formation\n\n                      19                                3       0\n                     ͻ\n         BASE             16-BIT SEGMENT SELECTOR      0 0 0 0 \n                     ͼ\n\n         +\n                      19        15                              0\n                     ͻ\n         OFFSET       0 0 0 0     16-BIT EFFECTIVE ADDRESS     \n                     ͼ\n\n         =\n                    20                                          0\n         LINEAR    ͻ\n         ADDRESS    X X X X X X X X X X X X X X X X X X X X X X \n                   ͼ\n\n\n14.2  Registers and Instructions\n\nThe register set available in real-address mode includes all the registers\ndefined for the 8086 plus the new registers introduced by the 80386: FS, GS,\ndebug registers, control registers, and test registers. New instructions\nthat explicitly operate on the segment registers FS and GS are available,\nand the new segment-override prefixes can be used to cause instructions to\nutilize FS and GS for address calculations. Instructions can utilize 32-bit\noperands through the use of the operand size prefix.\n\nThe instruction codes that cause undefined opcode traps (interrupt 6)\ninclude instructions of the protected mode that manipulate or interrogate\n80386 selectors and descriptors; namely, VERR, VERW, LAR, LSL, LTR, STR,\nLLDT, and SLDT. Programs executing in real-address mode are able to take\nadvantage of the new applications-oriented instructions added to the\narchitecture by the introduction of the 80186/80188, 80286 and 80386:\n\n New instructions introduced by 80186/80188 and 80286.\n\n    PUSH immediate data\n    Push all and pop all (PUSHA and POPA)\n    Multiply immediate data\n    Shift and rotate by immediate count\n    String I/O\n    ENTER and LEAVE\n    BOUND\n\n New instructions introduced by 80386.\n\n    LSS, LFS, LGS instructions\n    Long-displacement conditional jumps\n    Single-bit instructions\n    Bit scan\n    Double-shift instructions\n    Byte set on condition\n    Move with sign/zero extension\n    Generalized multiply\n    MOV to and from control registers\n    MOV to and from test registers\n    MOV to and from debug registers\n\n\n14.3  Interrupt and Exception Handling\n\nInterrupts and exceptions in 80386 real-address mode work as much as they\ndo on an 8086. Interrupts and exceptions vector to interrupt procedures via\nan interrupt table. The processor multiplies the interrupt or exception\nidentifier by four to obtain an index into the interrupt table. The entries\nof the interrupt table are far pointers to the entry points of interrupt or\nexception handler procedures. When an interrupt occurs, the processor\npushes the current values of CS:IP onto the stack, disables interrupts,\nclears TF (the single-step flag), then transfers control to the location\nspecified in the interrupt table. An IRET instruction at the end of the\nhandler procedure reverses these steps before returning control to the\ninterrupted procedure.\n\nThe primary difference in the interrupt handling of the 80386 compared to\nthe 8086 is that the location and size of the interrupt table depend on the\ncontents of the IDTR (IDT register). Ordinarily, this fact is not apparent\nto programmers, because, after RESET, the IDTR contains a base address of 0\nand a limit of 3FFH, which is compatible with the 8086. However, the LIDT\ninstruction can be used in real-address mode to change the base and limit\nvalues in the IDTR. Refer to Chapter 9 for details on the IDTR, and the\nLIDT and SIDT instructions. If an interrupt occurs and the corresponding\nentry of the interrupt table is beyond the limit stored in the IDTR, the\nprocessor raises exception 8.\n\n\n14.4  Entering and Leaving Real-Address Mode\n\nReal-address mode is in effect after a signal on the RESET pin. Even if the\nsystem is going to be used in protected mode, the start-up program will\nexecute in real-address mode temporarily while initializing for protected\nmode.\n\n\n14.4.1  Switching to Protected Mode\n\nThe only way to leave real-address mode is to switch to protected mode. The\nprocessor enters protected mode when a MOV to CR0 instruction sets the PE\n(protection enable) bit in CR0. (For compatibility with the 80286, the LMSW\ninstruction may also be used to set the PE bit.)\n\nRefer to Chapter 10 \"Initialization\" for other aspects of switching to\nprotected mode.\n\n\n14.5  Switching Back to Real-Address Mode\n\nThe processor reenters real-address mode if software clears the PE bit in\nCR0 with a MOV to CR0 instruction. A procedure that attempts to do this,\nhowever, should proceed as follows:\n\n  1.  If paging is enabled, perform the following sequence:\n\n        Transfer control to linear addresses that have an identity mapping;\n         i.e., linear addresses equal physical addresses.\n\n        Clear the PG bit in CR0.\n\n        Move zeros to CR3 to clear out the paging cache.\n\n  2.  Transfer control to a segment that has a limit of 64K (FFFFH). This\n      loads the CS register with the limit it needs to have in real mode.\n\n  3.  Load segment registers SS, DS, ES, FS, and GS with a selector that\n      points to a descriptor containing the following values, which are\n      appropriate to real mode:\n\n        Limit = 64K   (FFFFH)\n        Byte granular (G = 0)\n        Expand up     (E = 0)\n        Writable      (W = 1)\n        Present       (P = 1)\n        Base = any value\n\n  4.  Disable interrupts. A CLI instruction disables INTR interrupts. NMIs\n      can be disabled with external circuitry.\n\n  5.  Clear the PE bit.\n\n  6.  Jump to the real mode code to be executed using a far JMP. This\n      action flushes the instruction queue and puts appropriate values in\n      the access rights of the CS register.\n\n  7.  Use the LIDT instruction to load the base and limit of the real-mode\n      interrupt vector table.\n\n  8.  Enable interrupts.\n\n  9.  Load the segment registers as needed by the real-mode code.\n\n\n14.6  Real-Address Mode Exceptions\n\nThe 80386 reports some exceptions differently when executing in\nreal-address mode than when executing in protected mode. Table 14-1 details\nthe real-address-mode exceptions.\n\n\n14.7  Differences From 8086\n\nIn general, the 80386 in real-address mode will correctly execute ROM-based\nsoftware designed for the 8086, 8088, 80186, and 80188. Following is a list\nof the minor differences between 8086 execution on the 80386 and on an 8086.\n\n  1.  Instruction clock counts.\n\n      The 80386 takes fewer clocks for most instructions than the 8086/8088.\n      The areas most likely to be affected are:\n\n        Delays required by I/O devices between I/O operations.\n\n        Assumed delays with 8086/8088 operating in parallel with an 8087.\n\n  2.  Divide Exceptions Point to the DIV instruction.\n\n      Divide exceptions on the 80386 always leave the saved CS:IP value\n      pointing to the instruction that failed. On the 8086/8088, the CS:IP\n      value points to the next instruction.\n\n  3.  Undefined 8086/8088 opcodes.\n\n      Opcodes that were not defined for the 8086/8088 will cause exception\n      6 or will execute one of the new instructions defined for the 80386.\n\n  4.  Value written by PUSH SP.\n\n      The 80386 pushes a different value on the stack for PUSH SP than the\n      8086/8088. The 80386 pushes the value of SP before SP is incremented\n      as part of the push operation; the 8086/8088 pushes the value of SP\n      after it is incremented. If the value pushed is important, replace\n      PUSH SP instructions with the following three instructions:\n\n      PUSH  BP\n      MOV   BP, SP\n      XCHG  BP, [BP]\n\n      This code functions as the 8086/8088 PUSH SP instruction on the 80386.\n\n  5.  Shift or rotate by more than 31 bits.\n\n      The 80386 masks all shift and rotate counts to the low-order five\n      bits. This MOD 32 operation limits the count to a maximum of 31 bits,\n      thereby limiting the time that interrupt response is delayed while\n      the instruction is executing.\n\n  6.  Redundant prefixes.\n\n      The 80386 sets a limit of 15 bytes on instruction length. The only\n      way to violate this limit is by putting redundant prefixes before an\n      instruction. Exception 13 occurs if the limit on instruction length\n      is violated. The 8086/8088 has no instruction length limit.\n\n  7.  Operand crossing offset 0 or 65,535.\n\n      On the 8086, an attempt to access a memory operand that crosses\n      offset 65,535 (e.g., MOV a word to offset 65,535) or offset 0 (e.g.,\n      PUSH a word when SP = 1) causes the offset to wrap around modulo\n      65,536. The 80386 raises an exception in these casesexception 13 if\n      the segment is a data segment (i.e., if CS, DS, ES, FS, or GS is being\n      used to address the segment), exception 12 if the segment is a stack\n      segment (i.e., if SS is being used).\n\n  8.  Sequential execution across offset 65,535.\n\n      On the 8086, if sequential execution of instructions proceeds past\n      offset 65,535, the processor fetches the next instruction byte from\n      offset 0 of the same segment. On the 80386, the processor raises\n      exception 13 in such a case.\n\n  9.  LOCK is restricted to certain instructions.\n\n      The LOCK prefix and its corresponding output signal should only be\n      used to prevent other bus masters from interrupting a data movement\n      operation. The 80386 always asserts the LOCK signal during an XCHG\n      instruction with memory (even if the LOCK prefix is not used). LOCK\n      may only be used with the following 80386 instructions when they\n      update memory: BTS, BTR, BTC, XCHG, ADD, ADC, SUB, SBB, INC, DEC,\n      AND, OR, XOR, NOT, and NEG. An undefined-opcode exception\n      (interrupt 6) results from using LOCK before any other instruction.\n\n 10.  Single-stepping external interrupt handlers.\n\n      The priority of the 80386 single-step exception is different from that\n      of the 8086/8088. The change prevents an external interrupt handler\n      from being single-stepped if the interrupt occurs while a program is\n      being single-stepped. The 80386 single-step exception has higher\n      priority that any external interrupt. The 80386 will still single-step\n      through an interrupt handler invoked by the INT instructions or by an\n      exception.\n\n 11.  IDIV exceptions for quotients of 80H or 8000H.\n\n      The 80386 can generate the largest negative number as a quotient for\n      the IDIV instruction. The 8086/8088 causes exception zero instead.\n\n 12.  Flags in stack.\n\n      The setting of the flags stored by PUSHF, by interrupts, and by\n      exceptions is different from that stored by the 8086 in bit positions\n      12 through 15. On the 8086 these bits are stored as ones, but in\n      80386 real-address mode bit 15 is always zero, and bits 14 through 12\n      reflect the last value loaded into them.\n\n 13.  NMI interrupting NMI handlers.\n\n      After an NMI is recognized on the 80386, the NMI interrupt is masked\n      until an IRET instruction is executed.\n\n 14.  Coprocessor errors vector to interrupt 16.\n\n      Any 80386 system with a coprocessor must use interrupt vector 16 for\n      the coprocessor error exception. If an 8086/8088 system uses another\n      vector for the 8087 interrupt, both vectors should point to the\n      coprocessor-error exception handler.\n\n 15.  Numeric exception handlers should allow prefixes.\n\n      On the 80386, the value of CS:IP saved for coprocessor exceptions\n      points at any prefixes before an ESC instruction. On 8086/8088\n      systems, the saved CS:IP points to the ESC instruction.\n\n 16.  Coprocessor does not use interrupt controller.\n\n      The coprocessor error signal to the 80386 does not pass through an\n      interrupt controller (an 8087 INT signal does). Some instructions in\n      a coprocessor error handler may need to be deleted if they deal with\n      the interrupt controller.\n\n 17.  Six new interrupt vectors.\n\n      The 80386 adds six exceptions that arise only if the 8086 program has\n      a hidden bug. It is recommended that exception handlers be added that\n      treat these exceptions as invalid operations. This additional\n      software does not significantly affect the existing 8086 software\n      because the interrupts do not normally occur. These interrupt\n      identifiers should not already have been used by the 8086 software,\n      because they are in the range reserved by Intel. Table 14-2 describes\n      the new 80386 exceptions.\n\n 18.  One megabyte wraparound.\n\n      The 80386 does not wrap addresses at 1 megabyte in real-address mode.\n      On members of the 8086 family, it possible to specify addresses\n      greater than one megabyte.  For example, with a selector value 0FFFFH\n      and an offset of 0FFFFH, the effective address would be 10FFEFH (1\n      Mbyte + 65519).  The 8086, which can form adresses only up to 20 bits\n      long, truncates the high-order bit, thereby \"wrapping\" this address\n      to 0FFEFH.  However, the 80386, which can form addresses up to 32\n      bits long does not truncate such an address.\n\n\nTable 14-1. 80386 Real-Address Mode Exceptions\n\n\nDescription                      Interrupt  Function that Can                   Return Address\n                                 Number     Generate the Exception              Points to Faulting\n                                                                                Instruction\nDivide error                     0          DIV, IDIV                           YES\nDebug exceptions                 1          All                                 \nSome debug exceptions point to the faulting instruction, others to the\nnext instruction. The exception handler can determine which has occurred by\nexamining DR6.\n\n\n\n\n\nBreakpoint                       3          INT                                 NO\nOverflow                         4          INTO                                NO\nBounds check                     5          BOUND                               YES\nInvalid opcode                   6          Any undefined opcode or LOCK        YES\n                                            used with wrong instruction\nCoprocessor not available        7          ESC or WAIT                         YES\nInterrupt table limit too small  8          INT vector is not within IDTR       YES\n                                            limit\nReserved                         9-12\nStack fault                      12         Memory operand crosses offset       YES\n                                            0 or 0FFFFH\nPseudo-protection exception      13         Memory operand crosses offset       YES\n                                            0FFFFH or attempt to execute\n                                            past offset 0FFFFH or\n                                            instruction longer than 15\n                                            bytes\nReserved                         14,15\nCoprocessor error                16         ESC or WAIT                         YES\nCoprocessor errors are reported on the first ESC or WAIT instruction\nafter the ESC instruction that caused the error.\n\n\n\n\n\nTwo-byte SW interrupt            0-255      INT n                               NO\n\n\nTable 14-2. New 80386 Exceptions\n\nInterrupt   Function\nIdentifier\n\n    5       A BOUND instruction was executed with a register value outside\n            the limit values.\n\n    6       An undefined opcode was encountered or LOCK was used improperly\n            before an instruction to which it does not apply.\n\n    7       The EM bit in the MSW is set when an ESC instruction was\n            encountered. This exception also occurs on a WAIT instruction\n            if TS is set.\n\n    8       An exception or interrupt has vectored to an interrupt table\n            entry beyond the interrupt table limit in IDTR. This can occur\n            only if the LIDT instruction has changed the limit from the\n            default value of 3FFH, which is enough for all 256 interrupt\n            IDs.\n\n   12       Operand crosses extremes of stack segment, e.g., MOV operation\n            at offset 0FFFFH or push with SP=1 during PUSH, CALL, or INT.\n\n   13       Operand crosses extremes of a segment other than a stack\n            segment; or sequential instruction execution attempts to\n            proceed beyond offset 0FFFFH; or an instruction is longer than\n            15 bytes (including prefixes).\n\n\n14.8  Differences From 80286 Real-Address Mode\n\nThe few differences that exist between 80386 real-address mode and 80286\nreal-address mode are not likely to affect any existing 80286 programs\nexcept possibly the system initialization procedures.\n\n\n14.8.1  Bus Lock\n\nThe 80286 processor implements the bus lock function differently than the\n80386. Programs that use forms of memory locking specific to the 80286 may\nnot execute properly if transported to a specific application of the 80386.\n\nThe LOCK prefix and its corresponding output signal should only be used to\nprevent other bus masters from interrupting a data movement operation.  LOCK\nmay only be used with the following 80386 instructions when they modify\nmemory.  An undefined-opcode exception results from using LOCK before any\nother instruction.\n\n    Bit test and change:  BTS, BTR, BTC.\n    Exchange: XCHG.\n    One-operand arithmetic and logical: INC, DEC, NOT, and NEG.\n    Two-operand arithmetic and logical: ADD, ADC, SUB, SBB, AND, OR, XOR.\n\nA locked instruction is guaranteed to lock only the area of memory defined\nby the destination operand, but may lock a larger memory area.  For example,\ntypical 8086 and 80286 configurations lock the entire physical memory space.\nWith the 80386, the defined area of memory is guranteed to be locked against\naccess by a processor executing a locked instruction on exactly the same\nmemory area, i.e., an operand with identical starting address and identical\nlength.\n\n\n14.8.2  Location of First Instruction\n\nThe starting location is 0FFFFFFF0H (sixteen bytes from end of 32-bit\naddress space) on the 80386 rather than 0FFFFF0H (sixteen bytes from end of\n24-bit address space) as on the 80286.  Many 80286 ROM initialization\nprograms will work correctly in this new environment.  Others can be made to\nwork correctly with external hardware that redefines the signals on\nA{31-20}.\n\n\n14.8.3  Initial Values of General Registers\n\nOn the 80386, certain general registers may contain different values after\nRESET than on the 80286. This should not cause compatibility problems,\nbecause the content of 8086 registers after RESET is undefined.  If\nself-test is requested during the reset sequence and errors are detected in\nthe 80386 unit, EAX will contain a nonzero value. EDX contains the component\nand revision identifier. Refer to Chapter 10 for more information.\n\n\n14.8.4  MSW Initialization\n\nThe 80286 initializes the MSW register to FFF0H, but the 80386 initializes\nthis register to 0000H. This difference should have no effect, because the\nbits that are different are undefined on the 80286.  Programs that read the\nvalue of the MSW will behave differently on the 80386 only if they depend on\nthe setting of the undefined, high-order bits.\n\n\nChapter 15  Virtual 8086 Mode\n\n\n\nThe 80386 supports execution of one or more 8086, 8088, 80186, or 80188\nprograms in an 80386 protected-mode environment. An 8086 program runs in\nthis environment as part of a V86 (virtual 8086) task. V86 tasks take\nadvantage of the hardware support of multitasking offered by the protected\nmode. Not only can there be multiple V86 tasks, each one executing an 8086\nprogram, but V86 tasks can be multiprogrammed with other 80386 tasks.\n\nThe purpose of a V86 task is to form a \"virtual machine\" with which to\nexecute an 8086 program. A complete virtual machine consists not only of\n80386 hardware but also of systems software. Thus, the emulation of an 8086\nis the result of cooperation between hardware and software:\n\n    The hardware provides a virtual set of registers (via the TSS), a\n     virtual memory space (the first megabyte of the linear address space of\n     the task), and directly executes all instructions that deal with these\n     registers and with this address space.\n\n    The software controls the external interfaces of the virtual machine\n     (I/O, interrupts, and exceptions) in a manner consistent with the\n     larger environment in which it executes. In the case of I/O, software\n     can choose either to emulate I/O instructions or to let the hardware\n     execute them directly without software intervention.\n\nSoftware that helps implement virtual 8086 machines is called a V86\nmonitor.\n\n\n15.1  Executing 8086 Code\n\nThe processor executes in V86 mode when the VM (virtual machine) bit in the\nEFLAGS register is set. The processor tests this flag under two general\nconditions:\n\n  1.  When loading segment registers to know whether to use 8086-style\n      address formation.\n\n  2.  When decoding instructions to determine which instructions are\n      sensitive to IOPL.\n\nExcept for these two modifications to its normal operations, the 80386 in\nV86 mode operated much as in protected mode.\n\n\n15.1.1  Registers and Instructions\n\nThe register set available in V86 mode includes all the registers defined\nfor the 8086 plus the new registers introduced by the 80386: FS, GS, debug\nregisters, control registers, and test registers. New instructions that\nexplicitly operate on the segment registers FS and GS are available, and the\nnew segment-override prefixes can be used to cause instructions to utilize\nFS and GS for address calculations. Instructions can utilize 32-bit\noperands through the use of the operand size prefix.\n\n8086 programs running as V86 tasks are able to take advantage of the new\napplications-oriented instructions added to the architecture by the\nintroduction of the 80186/80188, 80286 and 80386:\n\n    New instructions introduced by 80186/80188 and 80286.\n      PUSH immediate data\n      Push all and pop all (PUSHA and POPA)\n      Multiply immediate data\n      Shift and rotate by immediate count\n      String I/O\n      ENTER and LEAVE\n      BOUND\n\n    New instructions introduced by 80386.\n      LSS, LFS, LGS instructions\n      Long-displacement conditional jumps\n      Single-bit instructions\n      Bit scan\n      Double-shift instructions\n      Byte set on condition\n      Move with sign/zero extension\n      Generalized multiply\n\n\n15.1.2  Linear Address Formation\n\nIn V86 mode, the 80386 processor does not interpret 8086 selectors by\nreferring to descriptors; instead, it forms linear addresses as an 8086\nwould. It shifts the selector left by four bits to form a 20-bit base\naddress. The effective address is extended with four high-order zeros and\nadded to the base address to create a linear address as Figure 15-1\nillustrates.\n\nBecause of the possibility of a carry, the resulting linear address may\ncontain up to 21 significant bits. An 8086 program may generate linear\naddresses anywhere in the range 0 to 10FFEFH (one megabyte plus\napproximately 64 Kbytes) of the task's linear address space.\n\nV86 tasks generate 32-bit linear addresses. While an 8086 program can only\nutilize the low-order 21 bits of a linear address, the linear address can be\nmapped via page tables to any 32-bit physical address.\n\nUnlike the 8086 and 80286, 32-bit effective addresses can be generated (via\nthe address-size prefix); however, the value of a 32-bit address may not\nexceed 65,535 without causing an exception. For full compatibility with\n80286 real-address mode, pseudo-protection faults (interrupt 12 or 13 with\nno error code) occur if an address is generated outside the range 0 through\n65,535.\n\n\nFigure 15-1.  V86 Mode Address Formation\n\n                      19                                3       0\n                     ͻ\n         BASE             16-BIT SEGMENT SELECTOR      0 0 0 0 \n                     ͼ\n\n         +\n                      19        15                              0\n                     ͻ\n         OFFSET       0 0 0 0     16-BIT EFFECTIVE ADDRESS     \n                     ͼ\n\n         =\n                    20                                          0\n         LINEAR    ͻ\n         ADDRESS    X X X X X X X X X X X X X X X X X X X X X X \n                   ͼ\n\n\n15.2  Structure of a V86 Task\n\nA V86 task consists partly of the 8086 program to be executed and partly of\n80386 \"native mode\" code that serves as the virtual-machine monitor. The\ntask must be represented by an 80386 TSS (not an 80286 TSS). The processor\nenters V86 mode to execute the 8086 program and returns to protected mode to\nexecute the monitor or other 80386 tasks.\n\nTo run successfully in V86 mode, an existing 8086 program needs the\nfollowing:\n\n    A V86 monitor.\n    Operating-system services.\n\nThe V86 monitor is 80386 protected-mode code that executes at\nprivilege-level zero. The monitor consists primarily of initialization and\nexception-handling procedures. As for any other 80386 program,\nexecutable-segment descriptors for the monitor must exist in the GDT or in\nthe task's LDT. The linear addresses above 10FFEFH are available for the\nV86 monitor, the operating system, and other systems software. The monitor\nmay also need data-segment descriptors so that it can examine the interrupt\nvector table or other parts of the 8086 program in the first megabyte of the\naddress space.\n\nIn general, there are two options for implementing the 8086 operating\nsystem:\n\n  1.  The 8086 operating system may run as part of the 8086 code. This\n      approach is desirable for any of the following reasons:\n\n        The 8086 applications code modifies the operating system.\n\n        There is not sufficient development time to reimplement the 8086\n         operating system as 80386 code.\n\n  2.  The 8086 operating system may be implemented or emulated in the V86\n      monitor. This approach is desirable for any of the following reasons:\n\n        Operating system functions can be more easily coordinated among\n         several V86 tasks.\n\n        The functions of the 8086 operating system can be easily emulated\n         by calls to the 80386 operating system.\n\nNote that, regardless of the approach chosen for implementing the 8086\noperating system, different V86 tasks may use different 8086 operating\nsystems.\n\n\n15.2.1  Using Paging for V86 Tasks\n\nPaging is not necessary for a single V86 task, but paging is useful or\nnecessary for any of the following reasons:\n\n    To create multiple V86 tasks. Each task must map the lower megabyte of\n     linear addresses to different physical locations.\n\n    To emulate the megabyte wrap. On members of the 8086 family, it is\n     possible to specify addresses larger than one megabyte. For example,\n     with a selector value of 0FFFFH and an offset of 0FFFFH, the effective\n     address would be 10FFEFH (one megabyte + 65519). The 8086, which can\n     form addresses only up to 20 bits long, truncates the high-order bit,\n     thereby \"wrapping\" this address to 0FFEFH. The 80386, however, which\n     can form addresses up to 32 bits long does not truncate such an\n     address. If any 8086 programs depend on this addressing anomaly, the\n     same effect can be achieved in a V86 task by mapping linear addresses\n     between 100000H and 110000H and linear addresses between 0 and 10000H\n     to the same physical addresses.\n\n    To create a virtual address space larger than the physical address\n     space.\n\n    To share 8086 OS code or ROM code that is common to several 8086\n     programs that are executing simultaneously.\n\n    To redirect or trap references to memory-mapped I/O devices.\n\n\n15.2.2  Protection within a V86 Task\n\nBecause it does not refer to descriptors while executing 8086 programs, the\nprocessor also does not utilize the protection mechanisms offered by\ndescriptors. To protect the systems software that runs in a V86 task from\nthe 8086 program, software designers may follow either of these approaches:\n\n    Reserve the first megabyte (plus 64 kilobytes) of each task's linear\n     address space for the 8086 program. An 8086 task cannot generate\n     addresses outside this range.\n\n    Use the U/S bit of page-table entries to protect the virtual-machine\n     monitor and other systems software in each virtual 8086 task's space.\n     When the processor is in V86 mode, CPL is 3. Therefore, an 8086 program\n     has only user privileges. If the pages of the virtual-machine monitor\n     have supervisor privilege, they cannot be accessed by the 8086 program.\n\n\n15.3  Entering and Leaving V86 Mode\n\nFigure 15-2 summarizes the ways that the processor can enter and leave an\n8086 program. The processor can enter V86 by either of two means:\n\n  1.  A task switch to an 80386 task loads the image of EFLAGS from the new\n      TSS. The TSS of the new task must be an 80386 TSS, not an 80286 TSS,\n      because the 80286 TSS does not store the high-order word of EFLAGS,\n      which contains the VM flag. A value of one in the VM bit of the new\n      EFLAGS indicates that the new task is executing 8086 instructions;\n      therefore, while loading the segment registers from the TSS, the\n      processor forms base addresses as the 8086 would.\n\n  2.  An IRET from a procedure of an 80386 task loads the image of EFLAGS\n      from the stack. A value of one in VM in this case indicates that the\n      procedure to which control is being returned is an 8086 procedure. The\n      CPL at the time the IRET is executed must be zero, else the processor\n      does not change VM.\n\nThe processor leaves V86 mode when an interrupt or exception occurs. There\nare two cases:\n\n  1.  The interrupt or exception causes a task switch. A task switch from a\n      V86 task to any other task loads EFLAGS from the TSS of the new task.\n      If the new TSS is an 80386 TSS and the VM bit in the EFLAGS image is\n      zero or if the new TSS is an 80286 TSS, then the processor clears the\n      VM bit of EFLAGS, loads the segment registers from the new TSS using\n      80386-style address formation, and begins executing the instructions\n      of the new task according to 80386 protected-mode semantics.\n\n  2.  The interrupt or exception vectors to a privilege-level zero\n      procedure. The processor stores the current setting of EFLAGS on the\n      stack, then clears the VM bit. The interrupt or exception handler,\n      therefore, executes as \"native\" 80386 protected-mode code. If an\n      interrupt or exception vectors to a conforming segment or to a\n      privilege level other than three, the processor causes a\n      general-protection exception; the error code is the selector of the\n      executable segment to which transfer was attempted.\n\nSystems software does not manipulate the VM flag directly, but rather\nmanipulates the image of the EFLAGS register that is stored on the stack or\nin the TSS. The V86 monitor sets the VM flag in the EFLAGS image on the\nstack or in the TSS when first creating a V86 task. Exception and interrupt\nhandlers can examine the VM flag on the stack. If the interrupted procedure\nwas executing in V86 mode, the handler may need to invoke the V86 monitor.\n\n\nFigure 15-2.  Entering and Leaving the 8086 Program\n\n                            MODE TRANSITION DIAGRAM\n\n                                 ͻ\n                  TASK SWITCH      INITIAL  \n                Ķ   ENTRY   \n                   OR IRET      ͼ\n                \n                \u001f\n        ͻ    INTERRUPT, EXCEPTION      ͻ\n         8086 PROGRAM \u0010 V86 MONITOR \n          (V86 MODE)  \u0011Ķ (PROTECTED  \n        ͼ            IRET                  MODE)    \n              \u001e                                      ͼ\n                                                            \u001e\n                                                            \n                                                            \n               TASK SWITCH ͻ TASK SWITCH \n               \u0010 OTHER 80386 TASKS \u0011  \n              Ķ (PROTECTED MODE)  \n                 TASK SWITCH ͼ TASK SWITCH\n\n\n15.3.1  Transitions Through Task Switches\n\nA task switch to or from a V86 task may be due to any of three causes:\n\n  1.  An interrupt that vectors to a task gate.\n  2.  An action of the scheduler of the 80386 operating system.\n  3.  An IRET when the NT flag is set.\n\nIn any of these cases, the processor changes the VM bit in EFLAGS according\nto the image of EFLAGS in the new TSS. If the new TSS is an 80286 TSS, the\nhigh-order word of EFLAGS is not in the TSS; the processor clears VM in this\ncase. The processor updates VM prior to loading the segment registers from\nthe images in the new TSS. The new setting of VM determines whether the\nprocessor interprets the new segment-register images as 8086 selectors or\n80386/80286 selectors.\n\n\n15.3.2  Transitions Through Trap Gates and Interrupt Gates\n\nThe processor leaves V86 mode as the result of an exception or interrupt\nthat vectors via a trap or interrupt gate to a privilege-level zero\nprocedure. The exception or interrupt handler returns to the 8086 code by\nexecuting an IRET.\n\nBecause it was designed for execution by an 8086 processor, an 8086 program\nin a V86 task will have an 8086-style interrupt table starting at linear\naddress zero. However, the 80386 does not use this table directly. For all\nexceptions and interrupts that occur in V86 mode, the processor vectors\nthrough the IDT. The IDT entry for an interrupt or exception that occurs in\na V86 task must contain either:\n\n    A task gate.\n\n    An 80386 trap gate (type 14) or an 80386 interrupt gate (type 15),\n     which must point to a nonconforming, privilege-level zero, code\n     segment.\n\nInterrupts and exceptions that have 80386 trap or interrupt gates in the\nIDT vector to the appropriate handler procedure at privilege-level zero. The\ncontents of all the 8086 segment registers are stored on the PL 0 stack.\nFigure 15-3 shows the format of the PL 0 stack after an exception or\ninterrupt that occurs while a V86 task is executing an 8086 program.\n\nAfter the processor stores all the 8086 segment registers on the PL 0\nstack, it loads all the segment registers with zeros before starting to\nexecute the handler procedure. This permits the interrupt handler to safely\nsave and restore the DS, ES, FS, and GS registers as 80386 selectors.\nInterrupt handlers that may be invoked in the context of either a regular\ntask or a V86 task, can use the same prolog and epilog code for register\nsaving regardless of the kind of task. Restoring zeros to these registers\nbefore execution of the IRET does not cause a trap in the interrupt handler.\nInterrupt procedures that expect values in the segment registers or that\nreturn values via segment registers have to use the register images stored\non the PL 0 stack. Interrupt handlers that need to know whether the\ninterrupt occurred in V86 mode can examine the VM bit in the stored EFLAGS\nimage.\n\nAn interrupt handler passes control to the V86 monitor if the VM bit is set\nin the EFLAGS image stored on the stack and the interrupt or exception is\none that the monitor needs to handle. The V86 monitor may either:\n\n    Handle the interrupt completely within the V86 monitor.\n    Invoke the 8086 program's interrupt handler.\n\nReflecting an interrupt or exception back to the 8086 code involves the\nfollowing steps:\n\n  1.  Refer to the 8086 interrupt vector to locate the appropriate handler\n      procedure.\n\n  2.  Store the state of the 8086 program on the privilege-level three\n      stack.\n\n  3.  Change the return link on the privilege-level zero stack to point to\n      the privilege-level three handler procedure.\n\n  4.  Execute an IRET so as to pass control to the handler.\n\n  5.  When the IRET by the privilege-level three handler again traps to the\n      V86 monitor, restore the return link on the privilege-level zero stack\n      to point to the originally interrupted, privilege-level three\n      procedure.\n\n  6.  Execute an IRET so as to pass control back to the interrupted\n      procedure.\n\n\nFigure 15-3. PL 0 Stack after Interrupt in V86 Task\n\n\n                WITHOUT ERROR CODE            WITH ERROR CODE\n                 31            0               31            0\n                ͻ\u0011Ŀ        ͻ\u0011Ŀ\n                OLD GS              OLD GS      \n                ͹   SS:ESP     ͹   SS:ESP\n      D  O      OLD FS   FROM TSS    OLD FS   FROM TSS\n      I  F      ͹              ͹\n      R         OLD DS               OLD DS \n      E  E      ͹              ͹\n      C  X      OLD ES               OLD ES \n      T  P      ͹              ͹\n      I  A      OLD SS               OLD SS \n      O  N      ͹              ͹\n      N  S          OLD ESP                     OLD ESP   \n         I      ͹              ͹\n        O        OLD EFLAGS                  OLD EFLAGS  \n        N      ͹              ͹\n               OLD CS    NEW        OLD CS \n       \u001f        ͹  SS:EIP      ͹\n                    OLD EIP                    OLD EIP      NEW\n                ͹\u0011         ͹  SS:EIP\n                                              ERROR CODE      \n                \u0007              \u0007              ͹\u0011\n                \u0007              \u0007                            \n                \u0007              \u0007              \u0007              \u0007\n\n\n15.4  Additional Sensitive Instructions\n\nWhen the 80386 is executing in V86 mode, the instructions PUSHF, POPF,\nINT n, and IRET are sensitive to IOPL. The instructions IN, INS, OUT, and\nOUTS, which are ordinarily sensitive in protected mode, are not sensitive\nin V86 mode. Following is a complete list of instructions that are sensitive\nin V86 mode:\n\n   CLI      Clear Interrupt-Enable Flag\n   STI      Set Interrupt-Enable Flag\n   LOCK     Assert Bus-Lock Signal\n   PUSHF    Push Flags\n   POPF     Pop Flags\n   INT n    Software Interrupt\n   RET      Interrupt Return\n\nCPL is always three in V86 mode; therefore, if IOPL < 3, these instructions\nwill trigger a general-protection exceptions. These instructions are made\nsensitive so that their functions can be simulated by the V86 monitor.\n\n\n15.4.1  Emulating 8086 Operating System Calls\n\nINT n is sensitive so that the V86 monitor can intercept calls to the\n8086 OS. Many 8086 operating systems are called by pushing parameters onto\nthe stack, then executing an INT n instruction. If IOPL < 3, INT n\ninstructions will be intercepted by the V86 monitor. The V86 monitor can\nthen emulate the function of the 8086 operating system or reflect the\ninterrupt back to the 8086 operating system in V86 mode.\n\n\n15.4.2  Virtualizing the Interrupt-Enable Flag\n\nWhen the processor is executing 8086 code in a V86 task, the instructions\nPUSHF, POPF, and IRET are sensitive to IOPL so that the V86 monitor can\ncontrol changes to the interrupt-enable flag (IF). Other instructions that\naffect IF (STI and CLI) are IOPL sensitive both in 8086 code and in\n80386/80386 code.\n\nMany 8086 programs that were designed to execute on single-task systems set\nand clear IF to control interrupts. However, when these same programs are\nexecuted in a multitasking environment, such control of IF can be\ndisruptive. If IOPL is less than three, all instructions that change or\ninterrogate IF will trap to the V86 monitor. The V86 monitor can then\ncontrol IF in a manner that both suits the needs of the larger environment\nand is transparent to the 8086 program.\n\n\n15.5  Virtual I/O\n\nMany 8086 programs that were designed to execute on single-task systems use\nI/O devices directly. However, when these same programs are executed in a\nmultitasking environment, such use of devices can be disruptive. The 80386\nprovides sufficient flexibility to control I/O in a manner that both suits\nthe needs of the new environment and is transparent to the 8086 program.\nDesigners may take any of several possible approaches to controlling I/O:\n\n    Implement or emulate the 8086 operating system as an 80386 program and\n     require the 8086 application to do I/O via software interrupts to the\n     operating system, trapping all attempts to do I/O directly.\n\n    Let the 8086 program take complete control of all I/O.\n\n    Selectively trap and emulate references that a task makes to specific\n     I/O ports.\n\n    Trap or redirect references to memory-mapped I/O addresses.\n\nThe method of controlling I/O depends upon whether I/O ports are I/O mapped\nor memory mapped.\n\n\n15.5.1  I/O-Mapped I/O\n\nI/O-mapped I/O in V86 mode differs from protected mode only in that the\nprotection mechanism does not consult IOPL when executing the I/O\ninstructions IN, INS, OUT, OUTS. Only the I/O permission bit map controls\nthe right for V86 tasks to execute these I/O instructions.\n\nThe I/O permission map traps I/O instructions selectively depending on the\nI/O addresses to which they refer. The I/O permission bit map of each V86\ntask determines which I/O addresses are trapped for that task. Because each\ntask may have a different I/O permission bit map, the addresses trapped for\none task may be different from those trapped for others. Refer to Chapter 8\nfor more information about the I/O permission map.\n\n\n15.5.2  Memory-Mapped I/O\n\nIn hardware designs that utilize memory-mapped I/O, the paging facilities\nof the 80386 can be used to trap or redirect I/O operations. Each task that\nexecutes memory-mapped I/O must have a page (or pages) for the memory-mapped\naddress space. The V86 monitor may control memory-mapped I/O by any of\nthese means:\n\n    Assign the memory-mapped page to appropriate physical addresses.\n     Different tasks may have different physical addresses, thereby\n     preventing the tasks from interfering with each other.\n\n    Cause a trap to the monitor by forcing a page fault on the\n     memory-mapped page. Read-only pages trap writes. Not-present pages trap\n     both reads and writes.\n\nIntervention for every I/O might be excessive for some kinds of I/O\ndevices. A page fault can still be used in this case to cause intervention\non the first I/O operation. The monitor can then at least make sure that the\ntask has exclusive access to the device. Then the monitor can change the\npage status to present and read/write, allowing subsequent I/O to proceed at\nfull speed.\n\n\n15.5.3  Special I/O Buffers\n\nBuffers of intelligent controllers (for example, a bit-mapped graphics\nbuffer) can also be virtualized via page mapping. The linear space for the\nbuffer can be mapped to a different physical space for each virtual 8086\ntask. The V86 monitor can then assume responsibility for spooling the data\nor assigning the virtual buffer to the real buffer at appropriate times.\n\n\n15.6  Differences From 8086\n\nIn general, V86 mode will correctly execute software designed for the 8086,\n8088, 80186, and 80188. Following is a list of the minor differences between\n8086 execution on the 80386 and on an 8086.\n\n  1.  Instruction clock counts.\n\n      The 80386 takes fewer clocks for most instructions than the \n      8086/8088. The areas most likely to be affected are:\n\n        Delays required by I/O devices between I/O operations.\n\n        Assumed delays with 8086/8088 operating in parallel with an 8087.\n\n  2.  Divide exceptions point to the DIV instruction.\n\n      Divide exceptions on the 80386 always leave the saved CS:IP value\n      pointing to the instruction that failed. On the 8086/8088, the CS:IP\n      value points to the next instruction.\n\n  3.  Undefined 8086/8088 opcodes.\n\n      Opcodes that were not defined for the 8086/8088 will cause exception\n      6 or will execute one of the new instructions defined for the 80386.\n\n  4.  Value written by PUSH SP.\n\n      The 80386 pushes a different value on the stack for PUSH SP than the\n      8086/8088. The 80386 pushes the value of SP before SP is incremented\n      as part of the push operation; the 8086/8088 pushes the value of SP\n      after it is incremented. If the value pushed is important, replace\n      PUSH SP instructions with the following three instructions:\n\n      PUSH  BP\n      MOV   BP, SP\n      XCHG  BP, [BP]\n\n      This code functions as the 8086/8088 PUSH SP instruction on the \n      80386.\n\n  5.  Shift or rotate by more than 31 bits.\n\n      The 80386 masks all shift and rotate counts to the low-order five\n      bits. This MOD 32 operation limits the count to a maximum of 31 bits,\n      thereby limiting the time that interrupt response is delayed while\n      the instruction is executing.\n\n  6.  Redundant prefixes.\n\n      The 80386 sets a limit of 15 bytes on instruction length. The only\n      way to violate this limit is by putting redundant prefixes before an\n      instruction. Exception 13 occurs if the limit on instruction length\n      is violated. The 8086/8088 has no instruction length limit.\n\n  7.  Operand crossing offset 0 or 65,535.\n\n      On the 8086, an attempt to access a memory operand that crosses\n      offset 65,535 (e.g., MOV a word to offset 65,535) or offset 0 (e.g.,\n      PUSH a word when SP = 1) causes the offset to wrap around modulo\n      65,536. The 80386 raises an exception in these casesexception 13 if\n      the segment is a data segment (i.e., if CS, DS, ES, FS, or GS is\n      being used to address the segment), exception 12 if the segment is a\n      stack segment (i.e., if SS is being used).\n\n  8.  Sequential execution across offset 65,535.\n\n      On the 8086, if sequential execution of instructions proceeds past\n      offset 65,535, the processor fetches the next instruction byte from\n      offset 0 of the same segment. On the 80386, the processor raises\n      exception 13 in such a case.\n\n  9.  LOCK is restricted to certain instructions.\n\n      The LOCK prefix and its corresponding output signal should only be\n      used to prevent other bus masters from interrupting a data movement\n      operation. The 80386 always asserts the LOCK signal during an XCHG\n      instruction with memory (even if the LOCK prefix is not used). LOCK\n      may only be used with the following 80386 instructions when they\n      update memory: BTS, BTR, BTC, XCHG, ADD, ADC, SUB, SBB, INC, DEC,\n      AND, OR, XOR, NOT, and NEG. An undefined-opcode exception (interrupt\n      6) results from using LOCK before any other instruction.\n\n 10.  Single-stepping external interrupt handlers.\n\n      The priority of the 80386 single-step exception is different from\n      that of the 8086/8088. The change prevents an external interrupt\n      handler from being single-stepped if the interrupt occurs while a\n      program is being single-stepped. The 80386 single-step exception has\n      higher priority that any external interrupt. The 80386 will still\n      single-step through an interrupt handler invoked by the INT\n      instructions or by an exception.\n\n  11.  IDIV exceptions for quotients of 80H or 8000H.\n\n      The 80386 can generate the largest negative number as a quotient for\n      the IDIV instruction. The 8086/8088 causes exception zero instead.\n\n 12.  Flags in stack.\n\n      The setting of the flags stored by PUSHF, by interrupts, and by\n      exceptions is different from that stored by the 8086 in bit positions\n      12 through 15. On the 8086 these bits are stored as ones, but in V86\n      mode bit 15 is always zero, and bits 14 through 12 reflect the last\n      value loaded into them.\n\n 13.  NMI interrupting NMI handlers.\n\n      After an NMI is recognized on the 80386, the NMI interrupt is masked\n      until an IRET instruction is executed.\n\n 14.  Coprocessor errors vector to interrupt 16.\n\n      Any 80386 system with a coprocessor must use interrupt vector 16 for\n      the coprocessor error exception. If an 8086/8088 system uses another\n      vector for the 8087 interrupt, both vectors should point to the\n      coprocessor-error exception handler.\n\n 15.  Numeric exception handlers should allow prefixes.\n\n      On the 80386, the value of CS:IP saved for coprocessor exceptions\n      points at any prefixes before an ESC instruction. On 8086/8088\n      systems, the saved CS:IP points to the ESC instruction itself.\n\n 16.  Coprocessor does not use interrupt controller.\n\n      The coprocessor error signal to the 80386 does not pass through an\n      interrupt controller (an 8087 INT signal does). Some instructions in\n      a coprocessor error handler may need to be deleted if they deal with\n      the interrupt controller.\n\n\n15.7  Differences From 80286 Real-Address Mode\n\nThe 80286 processor implements the bus lock function differently than the\n80386. This fact may or may not be apparent to 8086 programs, depending on\nhow the V86 monitor handles the LOCK prefix. LOCKed instructions are\nsensitive to IOPL; therefore, software designers can choose to emulate its\nfunction. If, however, 8086 programs are allowed to execute LOCK directly,\nprograms that use forms of memory locking specific to the 8086 may not\nexecute properly when transported to a specific application of the 80386.\n\nThe LOCK prefix and its corresponding output signal should only be used to\nprevent other bus masters from interrupting a data movement operation. LOCK\nmay only be used with the following 80386 instructions when they modify\nmemory. An undefined-opcode exception results from using LOCK before any\nother instruction.\n\n    Bit test and change: BTS, BTR, BTC.\n    Exchange: XCHG.\n    One-operand arithmetic and logical: INC, DEC, NOT, and NEG.\n    Two-operand arithmetic and logical: ADD, ADC, SUB, SBB, AND, OR, XOR.\n\nA locked instruction is guaranteed to lock only the area of memory defined\nby the destination operand, but may lock a larger memory area. For example,\ntypical 8086 and 80286 configurations lock the entire physical memory space.\nWith the 80386, the defined area of memory is guaranteed to be locked\nagainst access by a processor executing a locked instruction on exactly the\nsame memory area, i.e., an operand with identical starting address and\nidentical length.\n\n\nChapter 16  Mixing 16-Bit and 32 Bit Code\n\n\n\nThe 80386 running in protected mode is a 32-bit microprocessor, but it is\ndesigned to support 16-bit processing at three levels:\n\n  1.  Executing 8086/80286 16-bit programs efficiently with complete \n      compatibility.\n\n  2.  Mixing 16-bit modules with 32-bit modules.\n\n  3.  Mixing 16-bit and 32-bit addresses and operands within one module.\n\nThe first level of support for 16-bit programs has already been discussed\nin Chapter 13, Chapter 14, and Chapter 15. This chapter shows how 16-bit\nand 32-bit modules can cooperate with one another, and how one module can\nutilize both 16-bit and 32-bit operands and addressing.\n\nThe 80386 functions most efficiently when it is possible to distinguish\nbetween pure 16-bit modules and pure 32-bit modules. A pure 16-bit module\nhas these characteristics:\n\n    All segments occupy 64 Kilobytes or less.\n    Data items are either 8 bits or 16 bits wide.\n    Pointers to code and data have 16-bit offsets.\n    Control is transferred only among 16-bit segments.\n\nA pure 32-bit module has these characteristics:\n\n    Segments may occupy more than 64 Kilobytes (zero bytes to 4 \n     gigabytes).\n\n    Data items are either 8 bits or 32 bits wide.\n\n    Pointers to code and data have 32-bit offsets.\n\n    Control is transferred only among 32-bit segments.\n\nPure 16-bit modules do exist; they are the modules designed for 16-bit\nmicroprocessors. Pure 32-bit modules may exist in new programs designed\nexplicitly for the 80386. However, as systems designers move applications\nfrom 16-bit processors to the 32-bit 80386, it will not always be possible\nto maintain these ideals of pure 16-bit or 32-bit modules. It may be\nexpedient to execute old 16-bit modules in a new 32-bit environment without\nmaking source-code changes to the old modules if any of the following\nconditions is true:\n\n    Modules will be converted one-by-one from 16-bit environments to\n     32-bit environments.\n\n    Older, 16-bit compilers and software-development tools will be\n     utilized in the new32-bit operating environment until new 32-bit\n     versions can be created.\n\n    The source code of 16-bit modules is not available for modification.\n\n    The specific data structures used by a given module inherently utilize\n     16-bit words.\n\n    The native word size of the source language is 16 bits.\n\nOn the 80386, 16-bit modules can be mixed with 32-bit modules. To design a\nsystem that mixes 16- and 32-bit code requires an understanding of the\nmechanisms that the 80386 uses to invoke and control its 32-bit and 16-bit\nfeatures.\n\n\n16.1  How the 80386 Implements 16-Bit and 32-Bit Features\n\nThe features of the architecture that permit the 80386 to work equally well\nwith 32-bit and 16-bit address and operand sizes include:\n\n    The D-bit (default bit) of code-segment descriptors, which determines\n     the default choice of operand-size and address-size for the\n     instructions of a code segment. (In real-address mode and V86 mode,\n     which do not use descriptors, the default is 16 bits.) A code segment\n     whose D-bit is set is known as a USE32 segment; a code segment whose\n     D-bit is zero is a USE16 segment. The D-bit eliminates the need to\n     encode the operand size and address size in instructions when all\n     instructions use operands and effective addresses of the same size.\n\n    Instruction prefixes that explicitly override the default choice of\n     operand size and address size (available in protected mode as well as\n     in real-address mode and V86 mode).\n\n    Separate 32-bit and 16-bit gates for intersegment control transfers\n     (including call gates, interrupt gates, and trap gates). The operand\n     size for the control transfer is determined by the type of gate, not by\n     the D-bit or prefix of the transfer instruction.\n\n    Registers that can be used both for 32-bit and 16-bit operands and\n     effective-address calculations.\n\n    The B-bit (big bit) of data-segment descriptors, which determines the\n     size of stack pointer (32-bit ESP or 16-bit SP) used by the CPU for\n     implicit stack references.\n\n\n16.2  Mixing 32-Bit and 16-Bit Operations\n\nThe 80386 has two instruction prefixes that allow mixing of 32-bit and\n16-bit operations within one segment:\n\n    The operand-size prefix (66H)\n    The address-size prefix (67H)\n\nThese prefixes reverse the default size selected by the D-bit. For example,\nthe processor can interpret the word-move instruction MOV mem, reg in any of\nfour ways:\n\n    In a USE32 segment:\n\n     1.  Normally moves 32 bits from a 32-bit register to a 32-bit\n         effective address in memory.\n\n     2.  If preceded by an operand-size prefix, moves 16 bits from a 16-bit\n         register to 32-bit effective address in memory.\n\n     3.  If preceded by an address-size prefix, moves 32 bits from a 32-bit\n         register to a16-bit effective address in memory.\n\n     4.  If preceded by both an address-size prefix and an operand-size\n         prefix, moves 16 bits from a 16-bit register to a 16-bit effective\n         address in memory.\n\n    In a USE16 segment:\n\n     1.  Normally moves 16 bits from a 16-bit register to a 16-bit\n         effective address in memory.\n\n     2.  If preceded by an operand-size prefix, moves 32 bits from a 32-bit\n         register to 16-bit effective address in memory.\n\n     3.  If preceded by an address-size prefix, moves 16 bits from a 16-bit\n         register to a32-bit effective address in memory.\n\n     4.  If preceded by both an address-size prefix and an operand-size\n         prefix, moves 32 bits from a 32-bit register to a 32-bit effective\n         address in memory.\n\nThese examples illustrate that any instruction can generate any combination\nof operand size and address size regardless of whether the instruction is in\na USE16 or USE32 segment. The choice of the USE16 or USE32 attribute for a\ncode segment is based upon these criteria:\n\n  1.  The need to address instructions or data in segments that are larger\n      than 64 Kilobytes.\n\n  2.  The predominant size of operands.\n\n  3.  The addressing modes desired. (Refer to Chapter 17 for an explanation\n      of the additional addressing modes that are available when 32-bit\n      addressing is used.)\n\nChoosing a setting of the D-bit that is contrary to the predominant size of\noperands requires the generation of an excessive number of operand-size\nprefixes.\n\n\n16.3  Sharing Data Segments Among Mixed Code Segments\n\nBecause the choice of operand size and address size is defined in code\nsegments and their descriptors, data segments can be shared freely among\nboth USE16 and USE32 code segments. The only limitation is the one imposed\nby pointers with 16-bit offsets, which can only point to the first 64\nKilobytes of a segment. When a data segment that contains more than 64\nKilobytes is to be shared among USE32 and USE16 segments, the data that is\nto be accessed by the USE16 segments must be located within the first 64\nKilobytes.\n\nA stack that spans addresses less than 64K can be shared by both USE16 and\nUSE32 code segments. This class of stacks includes:\n\n    Stacks in expand-up segments with G=0 and B=0.\n\n    Stacks in expand-down segments with G=0 and B=0.\n\n    Stacks in expand-up segments with G=1 and B=0, in which the stack is\n     contained completely within the lower 64 Kilobytes. (Offsets greater\n     than 64K can be used for data, other than the stack, that is not\n     shared.)\n\nThe B-bit of a stack segment cannot, in general, be used to change the size\nof stack used by a USE16 code segment. The size of stack pointer used by the\nprocessor for implicit stack references is controlled by the B-bit of the\ndata-segment descriptor for the stack. Implicit references are those caused\nby interrupts, exceptions, and instructions such as PUSH, POP, CALL, and\nRET. One might be tempted, therefore, to try to increase beyond 64K the\nsize of the stack used by 16-bit code simply by supplying a larger stack\nsegment with the B-bit set. However, the B-bit does not control explicit\nstack references, such as accesses to parameters or local variables. A USE16\ncode segment can utilize a \"big\" stack only if the code is modified so that\nall explicit references to the stack are preceded by the address-size\nprefix, causing those references to use 32-bit addressing.\n\nIn big, expand-down segments (B=1, G=1, and E=1), all offsets are greater\nthan 64K, therefore USE16 code cannot utilize such a stack segment unless\nthe code segment is modified to employ 32-bit addressing. (Refer to Chapter\n6 for a review of the B, G, and E bits.)\n\n\n16.4  Transferring Control Among Mixed Code Segments\n\nWhen transferring control among procedures in USE16 and USE32 code\nsegments, programmers must be aware of three points:\n\n    Addressing limitations imposed by pointers with 16-bit offsets.\n\n    Matching of operand-size attribute in effect for the CALL/RET pair and\n     theInterrupt/IRET pair so as to manage the stack correctly.\n\n    Translation of parameters, especially pointer parameters.\n\nClearly, 16-bit effective addresses cannot be used to address data or code\nlocated beyond 64K in a 32-bit segment, nor can large 32-bit parameters be\nsqueezed into a 16-bit word; however, except for these obvious limits, most\ninterfacing problems between 16-bit and 32-bit modules can be solved. Some\nsolutions involve inserting interface procedures between the procedures in\nquestion.\n\n\n16.4.1  Size of Code-Segment Pointer\n\nFor control-transfer instructions that use a pointer to identify the next\ninstruction (i.e., those that do not use gates), the size of the offset\nportion of the pointer is determined by the operand-size attribute. The\nimplications of the use of two different sizes of code-segment pointer are:\n\n    JMP, CALL, or RET from 32-bit segment to 16-bit segment is always\n     possible using a 32-bit operand size.\n\n    JMP, CALL, or RET from 16-bit segment using a 16-bit operand size\n     cannot address the target in a 32-bit segment if the address of the\n     target is greater than 64K.\n\nAn interface procedure can enable transfers from USE16 segments to 32-bit\naddresses beyond 64K without requiring modifications any more extensive than\nrelinking or rebinding the old programs. The requirements for such an\ninterface procedure are discussed later in this chapter.\n\n\n16.4.2  Stack Management for Control Transfers\n\nBecause stack management is different for 16-bit CALL/RET than for 32-bit\nCALL/RET, the operand size of RET must match that of CALL. (Refer to Figure\n16-1.) A 16-bit CALL pushes the 16-bit IP and (for calls between privilege\nlevels) the 16-bit SP register. The corresponding RET must also use a 16-bit\noperand size to POP these 16-bit values from the stack into the 16-bit\nregisters. A 32-bit CALL pushes the 32-bit EIP and (for interlevel calls)\nthe 32-bit ESP register. The corresponding RET must also use a 32-bit\noperand size to POP these 32-bit values from the stack into the 32-bit\nregisters. If the two halves of a CALL/RET pair do not have matching operand\nsizes, the stack will not be managed correctly and the values of the\ninstruction pointer and stack pointer will not be restored to correct\nvalues.\n\nWhen the CALL and its corresponding RET are in segments that have D-bits\nwith the same values (i.e., both have 32-bit defaults or both have 16-bit\ndefaults), there is no problem. When the CALL and its corresponding RET are\nin segments that have different D-bit values, however, programmers (or\nprogram development software) must ensure that the CALL and RET match.\n\nThere are three ways to cause a 16-bit procedure to execute a 32-bit call:\n\n  1.  Use a 16-bit call to a 32-bit interface procedure that then uses a\n      32-bit call to invoke the intended target.\n\n  2.  Bind the 16-bit call to a 32-bit call gate.\n\n  3.  Modify the 16-bit procedure, inserting an operand-size prefix before\n      the call, thereby changing it to a 32-bit call.\n\nLikewise, there are three ways to cause a 32-bit procedure to execute a\n16-bit call:\n\n  1.  Use a 32-bit call to a 32-bit interface procedure that then uses a\n      16-bit call to invoke the intended target.\n\n  2.  Bind the 32-bit call to a 16-bit call gate.\n\n  3.  Modify the 32-bit procedure, inserting an operand-size prefix before\n      the call, thereby changing it to a 16-bit call. (Be certain that the\n      return offset does not exceed 64K.)\n\nProgrammers can utilize any of the preceding methods to make a CALL in a\nUSE16 segment match the corresponding RET in a USE32 segment, or to make a\nCALL in a USE32 segment match the corresponding RET in a USE16 segment.\n\n\nFigure 16-1.  Stack after Far 16-Bit and 32-Bit Calls\n\n                           WITHOUT PRIVILEGE TRANSITION\n\n               AFTER 16-BIT CALL                AFTER 32-BIT CALL\n\n               \u000731             \u00070               \u000731             \u00070\n       D  O                                                  \n       I  F    ͹                ͹\n       R                       \n       E  E    ͹                ͹\n       C  X     PARM2  PARM1                      PARM2     \n       T  P    ͹                ͹\n       I  A      CS     IP   \u0011SP                PARM1     \n       O  N    ͹                ͹\n       N  S                                     CS   \n          I    ͹                ͹\n         O                                         EIP      \u0011ESP\n         N    ͹                ͹\n                                                            \n        \u001f      \u0007               \u0007                \u0007               \u0007\n\n                           WITH PRIVILEGE TRANSITION\n\n               AFTER 16-BIT CALL                AFTER 32-BIT CALL\n\n       D  O     31            0                  31            0\n       I  F    ͻ                ͻ\n       R          SS    SP                     SS   \n       E  E    ͹                ͹\n       C  X     PARM2  PARM1                       ESP      \n       T  P    ͹                ͹\n       I  A      CS     IP   \u0011SP                PARM2     \n       O  N    ͹                ͹\n       N  S                                        PARM1     \n          I    ͹                ͹\n         O                                     CS   \n         N    ͹                ͹\n                                                   EIP      \u0011ESP\n        \u001f      ͹                ͹\n                                                             \n               \u0007               \u0007                \u0007               \u0007\n\n\n16.4.2.1  Controlling the Operand-Size for a Call\n\nWhen the selector of the pointer referenced by a CALL instruction selects a\nsegment descriptor, the operand-size attribute in effect for the CALL\ninstruction is determined by the D-bit in the segment descriptor and by any\noperand-size instruction prefix.\n\nWhen the selector of the pointer referenced by a CALL instruction selects a\ngate descriptor, the type of call is determined by the type of call gate. A\ncall via an 80286 call gate (descriptor type 4)  always has a 16-bit\noperand-size attribute; a call via an 80386 call gate (descriptor type 12)\nalways has a 32-bit operand-size attribute. The offset of the target\nprocedure is taken from the gate descriptor; therefore, even a 16-bit\nprocedure can call a procedure that is located more than 64 kilobytes from\nthe base of a 32-bit segment, because a 32-bit call gate contains a 32-bit\ntarget offset.\n\nAn unmodified 16-bit code segment that has run successfully on an 8086 or\nreal-mode 80286 will always have a D-bit of zero and will not use\noperand-size override prefixes; therefore, it will always execute 16-bit\nversions of CALL. The only modification needed to make a16-bit procedure\neffect a 32-bit call is to relink the call to an 80386 call gate.\n\n\n16.4.2.2  Changing Size of Call\n\nWhen adding 32-bit gates to 16-bit procedures, it is important to consider\nthe number of parameters. The count field of the gate descriptor specifies\nthe size of the parameter string to copy from the current stack to the stack\nof the more privileged procedure. The count field of a 16-bit gate specifies\nthe number of words to be copied, whereas the count field of a 32-bit gate\nspecifies the number of doublewords to be copied; therefore, the 16-bit\nprocedure must use an even number of words as parameters.\n\n\n16.4.3  Interrupt Control Transfers\n\nWith a control transfer due to an interrupt or exception, a gate is always\ninvolved. The operand-size attribute for the interrupt is determined by the\ntype of IDT gate.\n\nA 386 interrupt or trap gate (descriptor type 14 or 15) to a 32-bit\ninterrupt procedure can be used to interrupt either 32-bit or 16-bit\nprocedures. However, it is not generally feasible to permit an interrupt or\nexception to invoke a 16-bit handler procedure when 32-bit code is\nexecuting, because a 16-bit interrupt procedure has a return offset of only\n16-bits on its stack. If the 32-bit procedure is executing at an address\ngreater than 64K, the 16-bit interrupt procedure cannot return correctly.\n\n\n16.4.4  Parameter Translation\n\nWhen segment offsets or pointers (which contain segment offsets) are passed\nas parameters between 16-bit and 32-bit procedures, some translation is\nrequired. Clearly, if a 32-bit procedure passes a pointer to data located\nbeyond 64K to a 16-bit procedure, the 16-bit procedure cannot utilize it.\nBeyond this natural limitation, an interface procedure can perform any\nformat conversion between 32-bit and 16-bit pointers that may be needed.\n\nParameters passed by value between 32-bit and 16-bit code may also require\ntranslation between 32-bit and 16-bit formats. Such translation requirements\nare application dependent. Systems designers should take care to limit the\nrange of values passed so that such translations are possible.\n\n\n16.4.5  The Interface Procedure\n\nInterposing an interface procedure between 32-bit and 16-bit procedures can\nbe the solution to any of several interface requirements:\n\n    Allowing procedures in 16-bit segments to transfer control to\n     instructions located beyond 64K in 32-bit segments.\n\n    Matching of operand size for CALL/RET.\n\n    Parameter translation.\n\nInterface procedures between USE32 and USE16 segments can be constructed\nwith these properties:\n\n    The procedures reside in a code segment whose D-bit is set, indicating\n     a default operand size of 32-bits.\n\n    All entry points that may be called by 16-bit procedures have offsets\n     that are actually less than 64K.\n\n    All points to which called 16-bit procedures may return also lie\n     within 64K.\n\nThe interface procedures do little more than call corresponding procedures\nin other segments. There may be two kinds of procedures:\n\n    Those that are called by 16-bit procedures and call 32-bit procedures.\n     These interface procedures are called by 16-bit CALLs and use the\n     operand-size prefix before RET instructions to cause a 16-bit RET.\n     CALLs to 32-bit segments are 32-bit calls (by default, because the\n     D-bit is set), and the 32-bit code returns with 32-bit RET\n     instructions.\n\n    Those that are called by 32-bit procedures and call 16-bit procedures.\n     These interface procedures are called by 32-bit CALL instructions, and\n     return with 32-bit RET instructions (by default, because the D-bit is\n     set).  CALLs to 16-bit procedures use the operand-size prefix;\n     procedures in the 16-bit code return with 16-bit RET instructions.\n\n\n                         PART IV  INSTRUCTION SET                          \n\n\nChapter 17  80386 Instruction Set\n\n\n\nThis chapter presents instructions for the 80386 in alphabetical order. For\neach instruction, the forms are given for each operand combination,\nincluding object code produced, operands required, execution time, and a\ndescription. For each instruction, there is an operational description and a\nsummary of exceptions generated.\n\n\n17.1  Operand-Size and Address-Size Attributes\n\nWhen executing an instruction, the 80386 can address memory using either 16\nor 32-bit addresses. Consequently, each instruction that uses memory\naddresses has associated with it an address-size attribute of either 16 or\n32 bits. 16-bit addresses imply both the use of a 16-bit displacement in\nthe instruction and the generation of a 16-bit address offset (segment\nrelative address) as the result of the effective address calculation.\n32-bit addresses imply the use of a 32-bit displacement and the generation\nof a 32-bit address offset. Similarly, an instruction that accesses words\n(16 bits) or doublewords (32 bits) has an operand-size attribute of either\n16 or 32 bits.\n\nThe attributes are determined by a combination of defaults, instruction\nprefixes, and (for programs executing in protected mode) size-specification\nbits in segment descriptors.\n\n\n17.1.1  Default Segment Attribute\n\nFor programs executed in protected mode, the D-bit in executable-segment\ndescriptors determines the default attribute for both address size and\noperand size. These default attributes apply to the execution of all\ninstructions in the segment. A value of zero in the D-bit sets the default\naddress size and operand size to 16 bits; a value of one, to 32 bits.\n\nPrograms that execute in real mode or virtual-8086 mode have 16-bit\naddresses and operands by default.\n\n\n17.1.2  Operand-Size and Address-Size Instruction Prefixes\n\nThe internal encoding of an instruction can include two byte-long prefixes:\nthe address-size prefix, 67H, and the operand-size prefix, 66H. (A later\nsection, \"Instruction Format,\" shows the position of the prefixes in an\ninstruction's encoding.) These prefixes override the default segment\nattributes for the instruction that follows. Table 17-1 shows the effect of\neach possible combination of defaults and overrides.\n\n\n17.1.3  Address-Size Attribute for Stack\n\nInstructions that use the stack implicitly (for example: POP EAX also have\na stack address-size attribute of either 16 or 32 bits. Instructions with a\nstack address-size attribute of 16 use the 16-bit SP stack pointer register;\ninstructions with a stack address-size attribute of 32 bits use the 32-bit\nESP register to form the address of the top of the stack.\n\nThe stack address-size attribute is controlled by the B-bit of the\ndata-segment descriptor in the SS register. A value of zero in the B-bit\nselects a stack address-size attribute of 16; a value of one selects a stack\naddress-size attribute of 32.\n\n\nTable 17-1. Effective Size Attributes\n\nSegment Default D = ...      0    0    0    0    1    1    1    1\nOperand-Size Prefix 66H      N    N    Y    Y    N    N    Y    Y\nAddress-Size Prefix 67H      N    Y    N    Y    N    Y    N    Y\n\nEffective Operand Size      16   16   32   32   32   32   16   16\nEffective Address Size      16   32   16   32   32   16   32   16\n\nY = Yes, this instruction prefix is present\nN = No, this instruction prefix is not present\n\n\n17.2  Instruction Format\n\nAll instruction encodings are subsets of the general instruction format\nshown in Figure 17-1. Instructions consist of optional instruction\nprefixes, one or two primary opcode bytes, possibly an address specifier\nconsisting of the ModR/M byte and the SIB (Scale Index Base) byte, a\ndisplacement, if required, and an immediate data field, if required.\n\nSmaller encoding fields can be defined within the primary opcode or\nopcodes. These fields define the direction of the operation, the size of the\ndisplacements, the register encoding, or sign extension; encoding fields\nvary depending on the class of operation.\n\nMost instructions that can refer to an operand in memory have an addressing\nform byte following the primary opcode byte(s). This byte, called the ModR/M\nbyte, specifies the address form to be used. Certain encodings of the ModR/M\nbyte indicate a second addressing byte, the SIB (Scale Index Base) byte,\nwhich follows the ModR/M byte and is required to fully specify the\naddressing form.\n\nAddressing forms can include a displacement immediately following either\nthe ModR/M or SIB byte. If a displacement is present, it can be 8-, 16- or\n32-bits.\n\nIf the instruction specifies an immediate operand, the immediate operand\nalways follows any displacement bytes. The immediate operand, if specified,\nis always the last field of the instruction.\n\nThe following are the allowable instruction prefix codes:\n\n   F3H    REP prefix (used only with string instructions)\n   F3H    REPE/REPZ prefix (used only with string instructions\n   F2H    REPNE/REPNZ prefix (used only with string instructions)\n   F0H    LOCK prefix\n\nThe following are the segment override prefixes:\n\n   2EH    CS segment override prefix\n   36H    SS segment override prefix\n   3EH    DS segment override prefix\n   26H    ES segment override prefix\n   64H    FS segment override prefix\n   65H    GS segment override prefix\n   66H    Operand-size override\n   67H    Address-size override\n\n\nFigure 17-1.  80386 Instruction Format\n\n      ͻ\n        INSTRUCTION     ADDRESS-        OPERAND-      SEGMENT     \n          PREFIX       SIZE PREFIX    SIZE PREFIX     OVERRIDE    \n      ͹\n           0 OR 1         0 OR 1           0 OR 1         0 OR 1     \n                                     Ķ\n                              NUMBER OF BYTES                        \n      ͼ\n\n      ͻ\n        OPCODE    MODR/M     SIB     DISPLACEMENT     IMMEDIATE  \n                                                                 \n      ͹\n        1 OR 2     0 OR 1    0 OR 1      0,1,2 OR 4       0,1,2 OR 4 \n                                     Ķ\n                              NUMBER OF BYTES                        \n      ͼ\n\n\n17.2.1  ModR/M and SIB Bytes\n\nThe ModR/M and SIB bytes follow the opcode byte(s) in many of the 80386\ninstructions. They contain the following information:\n\n    The indexing type or register number to be used in the instruction\n    The register to be used, or more information to select the instruction\n    The base, index, and scale information\n\nThe ModR/M byte contains three fields of information:\n\n    The mod field, which occupies the two most significant bits of the \n     byte, combines with the r/m field to form 32 possible values: eight\n     registers and 24 indexing modes\n\n    The reg field, which occupies the next three bits following the mod\n     field, specifies either a register number or three more bits of opcode\n     information. The meaning of the reg field is determined by the first\n     (opcode) byte of the instruction.\n\n    The r/m field, which occupies the three least significant bits of the\n     byte, can specify a register as the location of an operand, or can form\n     part of the addressing-mode encoding in combination with the field as\n     described above\n\nThe based indexed and scaled indexed forms of 32-bit addressing require the\nSIB byte. The presence of the SIB byte is indicated by certain encodings of\nthe ModR/M byte. The SIB byte then includes the following fields:\n\n    The ss field, which occupies the two most significant bits of the\n     byte, specifies the scale factor\n\n    The index field, which occupies the next three bits following the ss\n     field and specifies the register number of the index register\n\n    The base field, which occupies the three least significant bits of the\n     byte, specifies the register number of the base register\n\nFigure 17-2 shows the formats of the ModR/M and SIB bytes.\n\nThe values and the corresponding addressing forms of the ModR/M and SIB\nbytes are shown in Tables 17-2, 17-3, and 17-4. The 16-bit addressing\nforms specified by the ModR/M byte are in Table 17-2. The 32-bit addressing\nforms specified by ModR/M are in Table 17-3. Table 17-4 shows the 32-bit\naddressing forms specified by the SIB byte\n\n\nFigure 17-2.  ModR/M and SIB Byte Formats\n\n                                 MODR/M BYTE\n\n                     7    6    5    4    3    2    1    0\n                    ͻ\n                      MOD    REG/OPCODE       R/M     \n                    ͼ\n\n                          SIB (SCALE INDEX BASE) BYTE\n\n                     7    6    5    4    3    2    1    0\n                    ͻ\n                       SS       INDEX        BASE     \n                    ͼ\n\n\nTable 17-2. 16-Bit Addressing Forms with the ModR/M Byte\n\n\nr8(/r)                     AL    CL    DL    BL    AH    CH    DH    BH\nr16(/r)                    AX    CX    DX    BX    SP    BP    SI    DI\nr32(/r)                    EAX   ECX   EDX   EBX   ESP   EBP   ESI   EDI\n/digit (Opcode)            0     1     2     3     4     5     6     7\nREG =                      000   001   010   011   100   101   110   111\n\n   Effective\nAddress\ndisp8 denotes an 8-bit displacement following the ModR/M byte, to be\nsign-extended and added to the index. disp16 denotes a 16-bit displacement\nfollowing the ModR/M byte, to be added to the index. Default segment\nregister is SS for the effective addresses containing a BP index, DS for\nother effective addresses.Ŀ Mod R/M ModR/M Values in HexadecimalĿ\n\n[BX + SI]            000   00    08    10    18    20    28    30    38\n[BX + DI]            001   01    09    11    19    21    29    31    39\n[BP + SI]            010   02    0A    12    1A    22    2A    32    3A\n[BP + DI]            011   03    0B    13    1B    23    2B    33    3B\n[SI]             00  100   04    0C    14    1C    24    2C    34    3C\n[DI]                 101   05    0D    15    1D    25    2D    35    3D\ndisp16               110   06    0E    16    1E    26    2E    36    3E\n[BX]                 111   07    0F    17    1F    27    2F    37    3F\n\n[BX+SI]+disp8        000   40    48    50    58    60    68    70    78\n[BX+DI]+disp8        001   41    49    51    59    61    69    71    79\n[BP+SI]+disp8        010   42    4A    52    5A    62    6A    72    7A\n[BP+DI]+disp8        011   43    4B    53    5B    63    6B    73    7B\n[SI]+disp8       01  100   44    4C    54    5C    64    6C    74    7C\n[DI]+disp8           101   45    4D    55    5D    65    6D    75    7D\n[BP]+disp8           110   46    4E    56    5E    66    6E    76    7E\n[BX]+disp8           111   47    4F    57    5F    67    6F    77    7F\n\n[BX+SI]+disp16       000   80    88    90    98    A0    A8    B0    B8\n[BX+DI]+disp16       001   81    89    91    99    A1    A9    B1    B9\n[BX+SI]+disp16       010   82    8A    92    9A    A2    AA    B2    BA\n[BX+DI]+disp16       011   83    8B    93    9B    A3    AB    B3    BB\n[SI]+disp16      10  100   84    8C    94    9C    A4    AC    B4    BC\n[DI]+disp16          101   85    8D    95    9D    A5    AD    B5    BD\n[BP]+disp16          110   86    8E    96    9E    A6    AE    B6    BE\n[BX]+disp16          111   87    8F    97    9F    A7    AF    B7    BF\n\nEAX/AX/AL            000   C0    C8    D0    D8    E0    E8    F0    F8\nECX/CX/CL            001   C1    C9    D1    D9    E1    E9    F1    F9\nEDX/DX/DL            010   C2    CA    D2    DA    E2    EA    F2    FA\nEBX/BX/BL            011   C3    CB    D3    DB    E3    EB    F3    FB\nESP/SP/AH        11  100   C4    CC    D4    DC    E4    EC    F4    FC\nEBP/BP/CH            101   C5    CD    D5    DD    E5    ED    F5    FD\nESI/SI/DH            110   C6    CE    D6    DE    E6    EE    F6    FE\nEDI/DI/BH            111   C7    CF    D7    DF    E7    EF    F7    FF\n\n\n\nNOTES:\n  disp8 denotes an 8-bit displacement following the ModR/M byte, to be\n  sign-extended and added to the index. disp16 denotes a 16-bit displacement\n  following the ModR/M byte, to be added to the index. Default segment\n  register is SS for the effective addresses containing a BP index, DS for\n  other effective addresses.\n\n\n\nTable 17-3. 32-Bit Addressing Forms with the ModR/M Byte\n\n\nr8(/r)                     AL    CL    DL    BL    AH    CH    DH    BH\nr16(/r)                    AX    CX    DX    BX    SP    BP    SI    DI\nr32(/r)                    EAX   ECX   EDX   EBX   ESP   EBP   ESI   EDI\n/digit (Opcode)            0     1     2     3     4     5     6     7\nREG =                      000   001   010   011   100   101   110   111\n\n   Effective\nAddress\n[--] [--] means a SIB follows the ModR/M byte. disp8 denotes an 8-bit\ndisplacement following the SIB byte, to be sign-extended and added to the\nindex. disp32 denotes a 32-bit displacement following the ModR/M byte, to\nbe added to the index.Ŀ Mod R/M ModR/M Values in HexadecimalĿ\n\n[EAX]                000   00    08    10    18    20    28    30    38\n[ECX]                001   01    09    11    19    21    29    31    39\n[EDX]                010   02    0A    12    1A    22    2A    32    3A\n[EBX]                011   03    0B    13    1B    23    2B    33    3B\n[--] [--]        00  100   04    0C    14    1C    24    2C    34    3C\ndisp32               101   05    0D    15    1D    25    2D    35    3D\n[ESI]                110   06    0E    16    1E    26    2E    36    3E\n[EDI]                111   07    0F    17    1F    27    2F    37    3F\n\ndisp8[EAX]           000   40    48    50    58    60    68    70    78\ndisp8[ECX]           001   41    49    51    59    61    69    71    79\ndisp8[EDX]           010   42    4A    52    5A    62    6A    72    7A\ndisp8[EPX];          011   43    4B    53    5B    63    6B    73    7B\ndisp8[--] [--]   01  100   44    4C    54    5C    64    6C    74    7C\ndisp8[ebp]           101   45    4D    55    5D    65    6D    75    7D\ndisp8[ESI]           110   46    4E    56    5E    66    6E    76    7E\ndisp8[EDI]           111   47    4F    57    5F    67    6F    77    7F\n\ndisp32[EAX]          000   80    88    90    98    A0    A8    B0    B8\ndisp32[ECX]          001   81    89    91    99    A1    A9    B1    B9\ndisp32[EDX]          010   82    8A    92    9A    A2    AA    B2    BA\ndisp32[EBX]          011   83    8B    93    9B    A3    AB    B3    BB\ndisp32[--] [--]  10  100   84    8C    94    9C    A4    AC    B4    BC\ndisp32[EBP]          101   85    8D    95    9D    A5    AD    B5    BD\ndisp32[ESI]          110   86    8E    96    9E    A6    AE    B6    BE\ndisp32[EDI]          111   87    8F    97    9F    A7    AF    B7    BF\n\nEAX/AX/AL            000   C0    C8    D0    D8    E0    E8    F0    F8\nECX/CX/CL            001   C1    C9    D1    D9    E1    E9    F1    F9\nEDX/DX/DL            010   C2    CA    D2    DA    E2    EA    F2    FA\nEBX/BX/BL            011   C3    CB    D3    DB    E3    EB    F3    FB\nESP/SP/AH        11  100   C4    CC    D4    DC    E4    EC    F4    FC\nEBP/BP/CH            101   C5    CD    D5    DD    E5    ED    F5    FD\nESI/SI/DH            110   C6    CE    D6    DE    E6    EE    F6    FE\nEDI/DI/BH            111   C7    CF    D7    DF    E7    EF    F7    FF\n\n\n\nNOTES:\n  [--] [--] means a SIB follows the ModR/M byte. disp8 denotes an 8-bit\n  displacement following the SIB byte, to be sign-extended and added to the\n  index. disp32 denotes a 32-bit displacement following the ModR/M byte, to\n  be added to the index.\n\n\n\nTable 17-4. 32-Bit Addressing Forms with the SIB Byte\n\n\n   r32                      EAX   ECX   EDX   EBX   ESP   [*]\n[*] means a disp32 with no base if MOD is 00, [ESP] otherwise. This provides\nthe following addressing modes:\n      disp32[index]        (MOD=00)\n      disp8[EBP][index]    (MOD=01)\n      disp32[EBP][index]   (MOD=10)  ESI   EDI\n   Base =                   0     1     2     3     4     5     6     7\n   Base =                   000   001   010   011   100   101   110   111\n\nScaled Index\n[*] means a disp32 with no base if MOD is 00, [ESP] otherwise. This provides\nthe following addressing modes:\n      disp32[index]        (MOD=00)\n      disp8[EBP][index]    (MOD=01)\n      disp32[EBP][index]   (MOD=10)SS Index  ModR/M Values in HexadecimalĿ\n\n[EAX]                000    00    01    02    03    04    05    06    07\n[ECX]                001    08    09    0A    0B    0C    0D    0E    0F\n[EDX]                010    10    11    12    13    14    15    16    17\n[EBX]                011    18    19    1A    1B    1C    1D    1E    1F\nnone             00  100    20    21    22    23    24    25    26    27\n[EBP]                101    28    29    2A    2B    2C    2D    2E    2F\n[ESI]                110    30    31    32    33    34    35    36    37\n[EDI]                111    38    39    3A    3B    3C    3D    3E    3F\n\n[EAX*2]              000    40    41    42    43    44    45    46    47\n[ECX*2]              001    48    49    4A    4B    4C    4D    4E    4F\n[ECX*2]              010    50    51    52    53    54    55    56    57\n[EBX*2]              011    58    59    5A    5B    5C    5D    5E    5F\nnone             01  100    60    61    62    63    64    65    66    67\n[EBP*2]              101    68    69    6A    6B    6C    6D    6E    6F\n[ESI*2]              110    70    71    72    73    74    75    76    77\n[EDI*2]              111    78    79    7A    7B    7C    7D    7E    7F\n\n[EAX*4]              000    80    81    82    83    84    85    86    87\n[ECX*4]              001    88    89    8A    8B    8C    8D    8E    8F\n[EDX*4]              010    90    91    92    93    94    95    96    97\n[EBX*4]              011    98    89    9A    9B    9C    9D    9E    9F\nnone             10  100    A0    A1    A2    A3    A4    A5    A6    A7\n[EBP*4]              101    A8    A9    AA    AB    AC    AD    AE    AF\n[ESI*4]              110    B0    B1    B2    B3    B4    B5    B6    B7\n[EDI*4]              111    B8    B9    BA    BB    BC    BD    BE    BF\n\n[EAX*8]              000    C0    C1    C2    C3    C4    C5    C6    C7\n[ECX*8]              001    C8    C9    CA    CB    CC    CD    CE    CF\n[EDX*8]              010    D0    D1    D2    D3    D4    D5    D6    D7\n[EBX*8]              011    D8    D9    DA    DB    DC    DD    DE    DF\nnone             11  100    E0    E1    E2    E3    E4    E5    E6    E7\n[EBP*8]              101    E8    E9    EA    EB    EC    ED    EE    EF\n[ESI*8]              110    F0    F1    F2    F3    F4    F5    F6    F7\n[EDI*8]              111    F8    F9    FA    FB    FC    FD    FE    FF\n\n\n\nNOTES:\n  [*] means a disp32 with no base if MOD is 00, [ESP] otherwise. This\n  provides the following addressing modes:\n      disp32[index]        (MOD=00)\n      disp8[EBP][index]    (MOD=01)\n      disp32[EBP][index]   (MOD=10)\n\n\n\n17.2.2  How to Read the Instruction Set Pages\n\nThe following is an example of the format used for each 80386 instruction\ndescription in this chapter:\n\nCMC  Complement Carry Flag\n\nOpcode   Instruction         Clocks      Description\n\nF5        CMC                  2            Complement carry flag\n\nThe above table is followed by paragraphs labelled \"Operation,\"\n\"Description,\" \"Flags Affected,\" \"Protected Mode Exceptions,\" \"Real\nAddress Mode Exceptions,\" and, optionally, \"Notes.\" The following sections\nexplain the notational conventions and abbreviations used in these\nparagraphs of the instruction descriptions.\n\n\n17.2.2.1  Opcode\n\nThe \"Opcode\" column gives the complete object code produced for each form\nof the instruction. When possible, the codes are given as hexadecimal bytes,\nin the same order in which they appear in memory. Definitions of entries\nother than hexadecimal bytes are as follows:\n\n/digit: (digit is between 0 and 7) indicates that the ModR/M byte of the\ninstruction uses only the r/m (register or memory) operand. The reg field\ncontains the digit that provides an extension to the instruction's opcode.\n\n/r: indicates that the ModR/M byte of the instruction contains both a\nregister operand and an r/m operand.\n\ncb, cw, cd, cp: a 1-byte (cb), 2-byte (cw), 4-byte (cd) or 6-byte (cp)\nvalue following the opcode that is used to specify a code offset and\npossibly a new value for the code segment register.\n\nib, iw, id: a 1-byte (ib), 2-byte (iw), or 4-byte (id) immediate operand to\nthe instruction that follows the opcode, ModR/M bytes or scale-indexing\nbytes. The opcode determines if the operand is a signed value. All words and\ndoublewords are given with the low-order byte first.\n\n+rb, +rw, +rd: a register code, from 0 through 7, added to the hexadecimal\nbyte given at the left of the plus sign to form a single opcode byte. The\ncodes are\n\n      rb         rw         rd\n    AL = 0     AX = 0     EAX = 0\n    CL = 1     CX = 1     ECX = 1\n    DL = 2     DX = 2     EDX = 2\n    BL = 3     BX = 3     EBX = 3\n    AH = 4     SP = 4     ESP = 4\n    CH = 5     BP = 5     EBP = 5\n    DH = 6     SI = 6     ESI = 6\n    BH = 7     DI = 7     EDI = 7\n\n\n17.2.2.2  Instruction\n\nThe \"Instruction\" column gives the syntax of the instruction statement as\nit would appear in an ASM386 program. The following is a list of the symbols\nused to represent operands in the instruction statements:\n\nrel8: a relative address in the range from 128 bytes before the end of the\ninstruction to 127 bytes after the end of the instruction.\n\nrel16, rel32: a relative address within the same code segment as the\ninstruction assembled. rel16 applies to instructions with an operand-size\nattribute of 16 bits; rel32 applies to instructions with an operand-size\nattribute of 32 bits.\n\nptr16:16, ptr16:32: a FAR pointer, typically in a code segment different\nfrom that of the instruction. The notation 16:16 indicates that the value of\nthe pointer has two parts. The value to the right of the colon is a 16-bit\nselector or value destined for the code segment register. The value to the\nleft corresponds to the offset within the destination segment. ptr16:16 is\nused when the instruction's operand-size attribute is 16 bits; ptr16:32 is\nused with the 32-bit attribute.\n\nr8: one of the byte registers AL, CL, DL, BL, AH, CH, DH, or BH.\n\nr16: one of the word registers AX, CX, DX, BX, SP, BP, SI, or DI.\n\nr32: one of the doubleword registers EAX, ECX, EDX, EBX, ESP, EBP, ESI, or\nEDI.\n\nimm8: an immediate byte value. imm8 is a signed number between -128 and\n+127 inclusive. For instructions in which imm8 is combined with a word or\ndoubleword operand, the immediate value is sign-extended to form a word or\ndoubleword. The upper byte of the word is filled with the topmost bit of the\nimmediate value.\n\nimm16: an immediate word value used for instructions whose operand-size\nattribute is 16 bits. This is a number between -32768 and +32767 inclusive.\n\nimm32: an immediate doubleword value used for instructions whose\noperand-size attribute is 32-bits. It allows the use of a number between\n+2147483647 and -2147483648.\n\nr/m8: a one-byte operand that is either the contents of a byte register\n(AL, BL, CL, DL, AH, BH, CH, DH), or a byte from memory.\n\nr/m16: a word register or memory operand used for instructions whose\noperand-size attribute is 16 bits. The word registers are: AX, BX, CX, DX,\nSP, BP, SI, DI. The contents of memory are found at the address provided by\nthe effective address computation.\n\nr/m32: a doubleword register or memory operand used for instructions whose\noperand-size attribute is 32-bits. The doubleword registers are: EAX, EBX,\nECX, EDX, ESP, EBP, ESI, EDI. The contents of memory are found at the\naddress provided by the effective address computation.\n\nm8: a memory byte addressed by DS:SI or ES:DI (used only by string\ninstructions).\n\nm16: a memory word addressed by DS:SI or ES:DI (used only by string\ninstructions).\n\nm32: a memory doubleword addressed by DS:SI or ES:DI (used only by string\ninstructions).\n\nm16:16, M16:32: a memory operand containing a far pointer composed of two\nnumbers. The number to the left of the colon corresponds to the pointer's\nsegment selector. The number to the right corresponds to its offset.\n\nm16 & 32, m16 & 16, m32 & 32: a memory operand consisting of data item pairs\nwhose sizes are indicated on the left and the right side of the ampersand.\nAll memory addressing modes are allowed. m16 & 16 and m32 & 32 operands are\nused by the BOUND instruction to provide an operand containing an upper and\nlower bounds for array indices. m16 & 32 is used by LIDT and LGDT to\nprovide a word with which to load the limit field, and a doubleword with\nwhich to load the base field of the corresponding Global and Interrupt\nDescriptor Table Registers.\n\nmoffs8, moffs16, moffs32: (memory offset) a simple memory variable of type\nBYTE, WORD, or DWORD used by some variants of the MOV instruction. The\nactual address is given by a simple offset relative to the segment base. No\nModR/M byte is used in the instruction. The number shown with moffs\nindicates its size, which is determined by the address-size attribute of the\ninstruction.\n\nSreg: a segment register. The segment register bit assignments are ES=0,\nCS=1, SS=2, DS=3, FS=4, and GS=5.\n\n\n17.2.2.3  Clocks\n\nThe \"Clocks\" column gives the number of clock cycles the instruction takes\nto execute. The clock count calculations makes the following assumptions:\n\n    The instruction has been prefetched and decoded and is ready for\n     execution.\n\n    Bus cycles do not require wait states.\n\n    There are no local bus HOLD requests delaying processor access to the\n     bus.\n\n    No exceptions are detected during instruction execution.\n\n    Memory operands are aligned.\n\nClock counts for instructions that have an r/m (register or memory) operand\nare separated by a slash. The count to the left is used for a register\noperand; the count to the right is used for a memory operand.\n\nThe following symbols are used in the clock count specifications:\n\n    n, which represents a number of repetitions.\n\n    m, which represents the number of components in the next instruction\n     executed, where the entire displacement (if any) counts as one\n     component, the entire immediate data (if any) counts as one component,\n     and every other byte of the instruction and prefix(es) each counts as\n     one component.\n\n    pm=, a clock count that applies when the instruction executes in\n     Protected Mode. pm= is not given when the clock counts are the same for\n     Protected and Real Address Modes.\n\nWhen an exception occurs during the execution of an instruction and the\nexception handler is in another task, the instruction execution time is\nincreased by the number of clocks to effect a task switch. This parameter\ndepends on several factors:\n\n    The type of TSS used to represent the current task (386 TSS or 286\n     TSS).\n\n    The type of TSS used to represent the new task.\n\n    Whether the current task is in V86 mode.\n\n    Whether the new task is in V86 mode.\n\nTable 17-5 summarizes the task switch times for exceptions.\n\n\nTable 17-5. Task Switch Times for Exceptions\n\n                       New Task\n\nOld              386 TSS     286 TSS\nTask             VM = 0\n\n386   VM = 0       309        282\nTSS\n\n386   VM = 1       314        231\nTSS\n\n286                307        282\nTSS\n\n\n17.2.2.4  Description\n\nThe \"Description\" column following the \"Clocks\" column briefly explains the\nvarious forms of the instruction. The \"Operation\" and \"Description\" sections\ncontain more details of the instruction's operation.\n\n\n17.2.2.5  Operation\n\nThe \"Operation\" section contains an algorithmic description of the\ninstruction which uses a notation similar to the Algol or Pascal language.\nThe algorithms are composed of the following elements:\n\nComments are enclosed within the symbol pairs \"(*\" and \"*)\".\n\nCompound statements are enclosed between the keywords of the \"if\" statement\n(IF, THEN, ELSE, FI) or of the \"do\" statement (DO, OD), or of the \"case\"\nstatement (CASE ... OF, ESAC).\n\nA register name implies the contents of the register. A register name\nenclosed in brackets implies the contents of the location whose address is\ncontained in that register. For example, ES:[DI] indicates the contents of\nthe location whose ES segment relative address is in register DI. [SI]\nindicates the contents of the address contained in register SI relative to\nSI's default segment (DS) or overridden segment.\n\nBrackets also used for memory operands, where they mean that the contents\nof the memory location is a segment-relative offset. For example, [SRC]\nindicates that the contents of the source operand is a segment-relative\noffset.\n\nA \u001b B; indicates that the value of B is assigned to A.\n\nThe symbols =, <>, , and  are relational operators used to compare two\nvalues, meaning equal, not equal, greater or equal, less or equal,\nrespectively. A relational expression such as A = B is TRUE if the value of\nA is equal to B; otherwise it is FALSE.\n\nThe following identifiers are used in the algorithmic descriptions:\n\n    OperandSize represents the operand-size attribute of the instruction,\n     which is either 16 or 32 bits. AddressSize represents the address-size\n     attribute, which is either 16 or 32 bits. For example,\n\n   IF instruction = CMPSW\n   THEN OperandSize \u001b 16;\n   ELSE\n      IF instruction = CMPSD\n      THEN OperandSize \u001b 32;\n      FI;\n   FI;\n\nindicates that the operand-size attribute depends on the form of the CMPS\ninstruction used. Refer to the explanation of address-size and operand-size\nattributes at the beginning of this chapter for general guidelines on how\nthese attributes are determined.\n\n    StackAddrSize represents the stack address-size attribute associated\n     with the instruction, which has a value of 16 or 32 bits, as explained\n     earlier in the chapter.\n\n    SRC represents the source operand. When there are two operands, SRC is\n     the one on the right.\n\n    DEST represents the destination operand. When there are two operands,\n     DEST is the one on the left.\n\n    LeftSRC, RightSRC distinguishes between two operands when both are\n     source operands.\n\n    eSP represents either the SP register or the ESP register depending on\n     the setting of the B-bit for the current stack segment.\n\nThe following functions are used in the algorithmic descriptions:\n\n    Truncate to 16 bits(value) reduces the size of the value to fit in 16\n     bits by discarding the uppermost bits as needed.\n\n    Addr(operand) returns the effective address of the operand (the result\n     of the effective address calculation prior to adding the segment base).\n\n    ZeroExtend(value) returns a value zero-extended to the operand-size\n     attribute of the instruction. For example, if OperandSize = 32,\n     ZeroExtend of a byte value of -10 converts the byte from F6H to\n     doubleword with hexadecimal value 000000F6H. If the value passed to\n     ZeroExtend and the operand-size attribute are the same size,\n     ZeroExtend returns the value unaltered.\n\n    SignExtend(value) returns a value sign-extended to the operand-size\n     attribute of the instruction. For example, if OperandSize = 32,\n     SignExtend of a byte containing the value -10 converts the byte from\n     F6H to a doubleword with hexadecimal value FFFFFFF6H. If the value\n     passed to SignExtend and the operand-size attribute are the same size,\n     SignExtend returns the value unaltered.\n\n    Push(value) pushes a value onto the stack. The number of bytes pushed\n     is determined by the operand-size attribute of the instruction. The\n     action of Push is as follows:\n\n   IF StackAddrSize = 16\n   THEN\n      IF OperandSize = 16\n      THEN\n         SP \u001b SP - 2;\n         SS:[SP] \u001b value; (* 2 bytes assigned starting at\n                             byte address in SP *)\n      ELSE (* OperandSize = 32 *)\n         SP \u001b SP - 4;\n         SS:[SP] \u001b value; (* 4 bytes assigned starting at\n                             byte address in SP *)\n      FI;\n   ELSE (* StackAddrSize = 32 *)\n      IF OperandSize = 16\n      THEN\n         ESP \u001b ESP - 2;\n         SS:[ESP] \u001b value; (* 2 bytes assigned starting at\n                              byte address in ESP*)\n      ELSE (* OperandSize = 32 *)\n         ESP \u001b ESP - 4;\n         SS:[ESP] \u001b value; (* 4 bytes assigned starting at\n                              byte address in ESP*)\n      FI;\n   FI;\n\n    Pop(value) removes the value from the top of the stack and returns it.\n     The statement EAX \u001b Pop( ); assigns to EAX the 32-bit value that Pop\n     took from the top of the stack. Pop will return either a word or a\n     doubleword depending on the operand-size attribute. The action of Pop\n     is as follows:\n\n   IF StackAddrSize = 16\n   THEN\n      IF OperandSize = 16\n      THEN\n         ret val \u001b SS:[SP]; (* 2-byte value *)\n         SP \u001b SP + 2;\n      ELSE (* OperandSize = 32 *)\n         ret val \u001b SS:[SP]; (* 4-byte value *)\n         SP \u001b SP + 4;\n      FI;\n   ELSE (* StackAddrSize = 32 *)\n      IF OperandSize = 16\n      THEN\n         ret val \u001b SS:[ESP]; (* 2 bytes value *)\n         ESP \u001b ESP + 2;\n      ELSE (* OperandSize = 32 *)\n         ret val \u001b SS:[ESP]; (* 4 bytes value *)\n         ESP \u001b ESP + 4;\n      FI;\n   FI;\n   RETURN(ret val); (*returns a word or doubleword*)\n\n    Bit[BitBase, BitOffset] returns the address of a bit within a bit\n     string, which is a sequence of bits in memory or a register. Bits are\n     numbered from low-order to high-order within registers and within\n     memory bytes. In memory, the two bytes of a word are stored with the\n     low-order byte at the lower address.\n\n   If the base operand is a register, the offset can be in the range 0..31.\n   This offset addresses a bit within the indicated register. An example,\n   \"BIT[EAX, 21],\" is illustrated in Figure 17-3.\n\n   If BitBase is a memory address, BitOffset can range from -2 gigabits to 2\n   gigabits. The addressed bit is numbered (Offset MOD 8) within the byte at\n   address (BitBase + (BitOffset DIV 8)), where DIV is signed division with\n   rounding towards negative infinity, and MOD returns a positive number.\n   This is illustrated in Figure 17-4.\n\n    I-O-Permission(I-O-Address, width) returns TRUE or FALSE depending on\n   the I/O permission bitmap and other factors. This function is defined as\n   follows:\n\n   IF TSS type is 286 THEN RETURN FALSE; FI;\n   Ptr \u001b [TSS + 66]; (* fetch bitmap pointer *)\n   BitStringAddr \u001b SHR (I-O-Address, 3) + Ptr;\n   MaskShift \u001b I-O-Address AND 7;\n   CASE width OF:\n         BYTE: nBitMask \u001b 1;\n         WORD: nBitMask \u001b 3;\n         DWORD: nBitMask \u001b 15;\n   ESAC;\n   mask \u001b SHL (nBitMask, MaskShift);\n   CheckString \u001b [BitStringAddr] AND mask;\n   IF CheckString = 0\n   THEN RETURN (TRUE);\n   ELSE RETURN (FALSE);\n   FI;\n\n    Switch-Tasks is the task switching function described in Chapter 7.\n\n\n17.2.2.6  Description\n\nThe \"Description\" section contains further explanation of the instruction's\noperation.\n\n\nFigure 17-3.  Bit Offset for BIT[EAX, 21]\n\n   31                    21                                               0\n  ͻ\n                                                                       \n  ͼ\n                         \u001e                                                \u001e\n                         BITOFFSET = 21\n\n\nFigure 17-4.  Memory Bit Indexing\n\n                         BIT INDEXING (POSITIVE OFFSET)\n\n               7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0\n             ͻ\n                                                          \n             ͼ\n               BITBASE + 1       BITBASE      BITBASE - 1   \n                   \u001e                          \n                   OFFSET = 13\n\n                         BIT INDEXING (NEGATIVE OFFSET)\n\n               7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0\n             ͻ\n                                                          \n             ͼ\n                 BITBASE       BITBASE - 1    BITBASE - 2   \n                                                  \u001e\n                              OFFSET = -11\n\n\n17.2.2.7  Flags Affected\n\nThe \"Flags Affected\" section lists the flags that are affected by the\ninstruction, as follows:\n\n    If a flag is always cleared or always set by the instruction, the\n     value is given (0 or 1) after the flag name. Arithmetic and logical\n     instructions usually assign values to the status flags in the uniform\n     manner described in Appendix C. Nonconventional assignments are\n     described in the \"Operation\" section.\n\n    The values of flags listed as \"undefined\" may be changed by the\n     instruction in an indeterminate manner.\n\nAll flags not listed are unchanged by the instruction.\n\n\n17.2.2.8  Protected Mode Exceptions\n\nThis section lists the exceptions that can occur when the instruction is\nexecuted in 80386 Protected Mode. The exception names are a pound sign (#)\nfollowed by two letters and an optional error code in parentheses. For\nexample, #GP(0) denotes a general protection exception with an error code of\n0. Table 17-6 associates each two-letter name with the corresponding\ninterrupt number.\n\nChapter 9 describes the exceptions and the 80386 state upon entry to the\nexception.\n\nApplication programmers should consult the documentation provided with\ntheir operating systems to determine the actions taken when exceptions\noccur.\n\n\nTable 17-6. 80386 Exceptions\n\nMnemonic     Interrupt    Description\n\n#UD           6           Invalid opcode\n#NM           7           Coprocessor not available\n#DF           8           Double fault\n#TS          10           Invalid TSS\n#NP          11           Segment or gate not present\n#SS          12           Stack fault\n#GP          13           General protection fault\n#PF          14           Page fault\n#MF          16           Math (coprocessor) fault\n\n\n17.2.2.9  Real Address Mode Exceptions\n\nBecause less error checking is performed by the 80386 in Real Address Mode,\nthis mode has fewer exception conditions. Refer to Chapter 14 for further\ninformation on these exceptions.\n\n\n17.2.2.10  Virtual-8086 Mode Exceptions\n\nVirtual 8086 tasks provide the ability to simulate Virtual 8086 machines.\nVirtual 8086 Mode exceptions are similar to those for the 8086 processor,\nbut there are some differences. Refer to Chapter 15 for details.\n\n\nAAA  ASCII Adjust after Addition\n\nOpcode    Instruction    Clocks    Description\n\n37        AAA            4         ASCII adjust AL after addition\n\n\nOperation\n\nIF ((AL AND 0FH) > 9) OR (AF = 1)\nTHEN\n   AL \u001b (AL + 6) AND 0FH;\n   AH \u001b AH + 1;\n   AF \u001b 1;\n   CF \u001b 1;\nELSE\n   CF \u001b 0;\n   AF \u001b 0;\nFI;\n\nDescription\n\nExecute AAA only following an ADD instruction that leaves a byte result\nin the AL register. The lower nibbles of the operands of the ADD instruction\nshould be in the range 0 through 9 (BCD digits). In this case, AAA adjusts\nAL to contain the correct decimal digit result. If the addition produced a\ndecimal carry, the AH register is incremented, and the carry and auxiliary\ncarry flags are set to 1. If there was no decimal carry, the carry and\nauxiliary flags are set to 0 and AH is unchanged. In either case, AL is left\nwith its top nibble set to 0. To convert AL to an ASCII result, follow the\nAAA instruction with OR AL, 30H.\n\nFlags Affected\n\nAF and CF as described above; OF, SF, ZF, and PF are undefined\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nAAD  ASCII Adjust AX before Division\n\nOpcode    Instruction    Clocks    Description\n\nD5 0A     AAD            19        ASCII adjust AX before division\n\n\nOperation\n\nAL \u001b AH * 10 + AL;\nAH \u001b 0;\n\nDescription\n\nAAD is used to prepare two unpacked BCD digits (the least-significant\ndigit in AL, the most-significant digit in AH) for a division operation that\nwill yield an unpacked result. This is accomplished by setting AL to\nAL + (10 * AH), and then setting AH to 0. AX is then equal to the binary\nequivalent of the original unpacked two-digit number.\n\nFlags Affected\n\nSF, ZF, and PF as described in Appendix C; OF, AF, and CF are undefined\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nAAM  ASCII Adjust AX after Multiply\n\nOpcode    Instruction    Clocks    Description\n\nD4 0A     AAM            17        ASCII adjust AX after multiply\n\n\nOperation\n\nAH \u001b AL / 10;\nAL \u001b AL MOD 10;\n\nDescription\n\nExecute AAM only after executing a MUL instruction between two unpacked\nBCD digits that leaves the result in the AX register. Because the result is\nless than 100, it is contained entirely in the AL register. AAM unpacks the\nAL result by dividing AL by 10, leaving the quotient (most-significant\ndigit) in AH and the remainder (least-significant digit) in AL.\n\nFlags Affected\n\nSF, ZF, and PF as described in Appendix C; OF, AF, and CF are undefined\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nAAS  ASCII Adjust AL after Subtraction\n\nOpcode    Instruction    Clocks    Description\n\n3F        AAS            4         ASCII adjust AL after subtraction\n\n\nOperation\n\nIF (AL AND 0FH) > 9 OR AF = 1\nTHEN\n   AL \u001b AL - 6;\n   AL \u001b AL AND 0FH;\n   AH \u001b AH - 1;\n   AF \u001b 1;\n   CF \u001b 1;\nELSE\n   CF \u001b 0;\n   AF \u001b 0;\nFI;\n\nDescription\n\nExecute AAS only after a SUB instruction that leaves the byte result in the\nAL register. The lower nibbles of the operands of the SUB instruction must\nhave been in the range 0 through 9 (BCD digits). In this case, AAS adjusts\nAL so it contains the correct decimal digit result. If the subtraction\nproduced a decimal carry, the AH register is decremented, and the carry and\nauxiliary carry flags are set to 1. If no decimal carry occurred, the carry\nand auxiliary carry flags are set to 0, and AH is unchanged. In either case,\nAL is left with its top nibble set to 0. To convert AL to an ASCII result,\nfollow the AAS with OR AL, 30H.\n\nFlags Affected\n\nAF and CF as described above; OF, SF, ZF, and PF are undefined\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nADC  Add with Carry\n\n\nOpcode    Instruction      Clocks    Description\n\n14 ib     ADC AL,imm8      2         Add with carry immediate byte to AL\n15 iw     ADC AX,imm16     2         Add with carry immediate word to AX\n15 id     ADC EAX,imm32    2         Add with carry immediate dword to EAX\n80 /2 ib  ADC r/m8,imm8    2/7       Add with carry immediate byte to r/m\n                                     byte\n81 /2 iw  ADC r/m16,imm16  2/7       Add with carry immediate word to r/m\n                                     word\n81 /2 id  ADC r/m32,imm32  2/7       Add with CF immediate dword to r/m\n                                     dword\n83 /2 ib  ADC r/m16,imm8   2/7       Add with CF sign-extended immediate\n                                     byte to r/m word\n83 /2 ib  ADC r/m32,imm8   2/7       Add with CF sign-extended immediate\n                                     byte into r/m dword\n10 /r     ADC r/m8,r8      2/7       Add with carry byte register to r/m\n                                     byte\n11 /r     ADC r/m16,r16    2/7       Add with carry word register to r/m\n                                     word\n11 /r     ADC r/m32,r32    2/7       Add with CF dword register to r/m dword\n12 /r     ADC r8,r/m8      2/6       Add with carry r/m byte to byte\n                                     register\n13 /r     ADC r16,r/m16    2/6       Add with carry r/m word to word\n                                     register\n13 /r     ADC r32,r/m32    2/6       Add with CF r/m dword to dword register\n\n\nOperation\n\nDEST \u001b DEST + SRC + CF;\n\nDescription\n\nADC performs an integer addition of the two operands DEST and SRC and the\ncarry flag, CF. The result of the addition is assigned to the first operand\n(DEST), and the flags are set accordingly. ADC is usually executed as part\nof a multi-byte or multi-word addition operation. When an immediate byte\nvalue is added to a word or doubleword operand, the immediate value is first\nsign-extended to the size of the word or doubleword operand.\n\nFlags Affected\n\nOF, SF, ZF, AF, CF, and PF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) if page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nADD  Add\n\nOpcode    Instruction         Clocks    Description\n\n04 ib     ADD AL,imm8          2        Add immediate byte to AL\n05 iw     ADD AX,imm16         2        Add immediate word to AX\n05 id     ADD EAX,imm32        2        Add immediate dword to EAX\n80 /0 ib  ADD r/m8,imm8        2/7      Add immediate byte to r/m byte\n81 /0 iw  ADD r/m16,imm16      2/7      Add immediate word to r/m word\n81 /0 id  ADD r/m32,imm32      2/7      Add immediate dword to r/m dword\n83 /0 ib  ADD r/m16,imm8       2/7      Add sign-extended immediate byte\n                                        to r/m word\n83 /0 ib  ADD r/m32,imm8       2/7      Add sign-extended immediate byte\n                                        to r/m dword\n00 /r     ADD r/m8,r8          2/7      Add byte register to r/m byte\n01 /r     ADD r/m16,r16        2/7      Add word register to r/m word\n01 /r     ADD r/m32,r32        2/7      Add dword register to r/m dword\n02 /r     ADD r8,r/m8          2/6      Add r/m byte to byte register\n03 /r     ADD r16,r/m16        2/6      Add r/m word to word register\n03 /r     ADD r32,r/m32        2/6      Add r/m dword to dword register\n\n\nOperation\n\nDEST \u001b DEST + SRC;\n\nDescription\n\nADD performs an integer addition of the two operands (DEST and SRC). The\nresult of the addition is assigned to the first operand (DEST), and the\nflags are set accordingly.\n\nWhen an immediate byte is added to a word or doubleword operand, the\nimmediate value is sign-extended to the size of the word or doubleword\noperand.\n\nFlags Affected\n\nOF, SF, ZF, AF, CF, and PF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nAND  Logical AND\n\nOpcode    Instruction          Clocks    Description\n\n24 ib     AND AL,imm8          2         AND immediate byte to AL\n25 iw     AND AX,imm16         2         AND immediate word to AX\n25 id     AND EAX,imm32        2         AND immediate dword to EAX\n80 /4 ib  AND r/m8,imm8        2/7       AND immediate byte to r/m byte\n81 /4 iw  AND r/m16,imm16      2/7       AND immediate word to r/m word\n81 /4 id  AND r/m32,imm32      2/7       AND immediate dword to r/m dword\n83 /4 ib  AND r/m16,imm8       2/7       AND sign-extended immediate byte\n                                         with r/m word\n83 /4 ib  AND r/m32,imm8       2/7       AND sign-extended immediate byte\n                                         with r/m dword\n20 /r     AND r/m8,r8          2/7       AND byte register to r/m byte\n21 /r     AND r/m16,r16        2/7       AND word register to r/m word\n21 /r     AND r/m32,r32        2/7       AND dword register to r/m dword\n22 /r     AND r8,r/m8          2/6       AND r/m byte to byte register\n23 /r     AND r16,r/m16        2/6       AND r/m word to word register\n23 /r     AND r32,r/m32        2/6       AND r/m dword to dword register\n\n\nOperation\n\nDEST \u001b DEST AND SRC;\nCF \u001b 0;\nOF \u001b 0;\n\nDescription\n\nEach bit of the result of the AND instruction is a 1 if both corresponding\nbits of the operands are 1; otherwise, it becomes a 0.\n\nFlags Affected\n\nCF = 0, OF = 0; PF, SF, and ZF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nARPL  Adjust RPL Field of Selector\n\nOpcode    Instruction          Clocks    Description\n\n63 /r     ARPL r/m16,r16       pm=20/21  Adjust RPL of r/m16 to not\n                                         less than RPL of r16\n\n\nOperation\n\nIF RPL bits(0,1) of DEST < RPL bits(0,1) of SRC\nTHEN\n   ZF \u001b 1;\n   RPL bits(0,1) of DEST \u001b RPL bits(0,1) of SRC;\nELSE\n   ZF \u001b 0;\nFI;\n\nDescription\n\nThe ARPL instruction has two operands. The first operand is a 16-bit\nmemory variable or word register that contains the value of a selector. The\nsecond operand is a word register. If the RPL field (\"requested privilege\nlevel\"bottom two bits) of the first operand is less than the RPL field of\nthe second operand, the zero flag is set to 1 and the RPL field of the\nfirst operand is increased to match the second operand. Otherwise, the zero\nflag is set to 0 and no change is made to the first operand.\n\nARPL appears in operating system software, not in application programs. It\nis used to guarantee that a selector parameter to a subroutine does not\nrequest more privilege than the caller is allowed. The second operand of\nARPL is normally a register that contains the CS selector value of the\ncaller.\n\nFlags Affected\n\nZF as described above\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 6; ARPL is not recognized in Real Address Mode\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nBOUND  Check Array Index Against Bounds\n\nOpcode    Instruction          Clocks    Description\n\n62 /r     BOUND r16,m16&16     10        Check if r16 is within bounds\n                                         (passes test)\n62 /r     BOUND r32,m32&32     10        Check if r32 is within bounds\n                                         (passes test)\n\n\nOperation\n\nIF (LeftSRC < [RightSRC] OR LeftSRC > [RightSRC + OperandSize/8])\n   (* Under lower bound or over upper bound *)\nTHEN Interrupt 5;\nFI;\n\nDescription\n\nBOUND ensures that a signed array index is within the limits specified by a\nblock of memory consisting of an upper and a lower bound. Each bound uses\none word for an operand-size attribute of 16 bits and a doubleword for an\noperand-size attribute of 32 bits. The first operand (a register) must be\ngreater than or equal to the first bound in memory (lower bound), and less\nthan or equal to the second bound in memory (upper bound). If the register\nis not within bounds, an Interrupt 5 occurs; the return EIP points to the\nBOUND instruction.\n\nThe bounds limit data structure is usually placed just before the array\nitself, making the limits addressable via a constant offset from the\nbeginning of the array.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\nInterrupt 5 if the bounds test fails, as described above; #GP(0) for an\nillegal memory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nThe second operand must be a memory operand, not a register. If BOUND is\nexecuted with a ModRM byte representing a register as the second operand,\n#UD occurs.\n\nReal Address Mode Exceptions\n\nInterrupt 5 if the bounds test fails; Interrupt 13 if any part of the\noperand would lie outside of the effective address space from 0 to 0FFFFH;\nInterrupt 6 if the second operand is a register\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nBSF  Bit Scan Forward\n\nOpcode    Instruction          Clocks    Description\n\n0F  BC    BSF r16,r/m16        10+3n     Bit scan forward on r/m word\n0F  BC    BSF r32,r/m32        10+3n     Bit scan forward on r/m dword\n\n\nNotes\n\n is the number of leading zero bits.\n\nOperation\n\nIF r/m = 0\nTHEN\n   ZF \u001b 1;\n   register \u001b UNDEFINED;\nELSE\n   temp \u001b 0;\n   ZF \u001b 0;\n   WHILE BIT[r/m, temp = 0]\n   DO\n      temp \u001b temp + 1;\n      register \u001b temp;\n   OD;\nFI;\n\nDescription\n\nBSF scans the bits in the second word or doubleword operand starting with\nbit 0. The ZF flag is cleared if the bits are all 0; otherwise, the ZF flag\nis set and the destination register is loaded with the bit index of the\nfirst set bit.\n\nFlags Affected\n\nZF as described above\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS, ES,\nFS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nBSR  Bit Scan Reverse\n\nOpcode    Instruction          Clocks    Description\n\n0F  BD    BSR r16,r/m16        10+3n     Bit scan reverse on r/m word\n0F  BD    BSR r32,r/m32        10+3n     Bit scan reverse on r/m dword\n\n\nOperation\n\nIF r/m = 0\nTHEN\n   ZF \u001b 1;\n   register \u001b UNDEFINED;\nELSE\n   temp \u001b OperandSize - 1;\n   ZF \u001b 0;\n   WHILE BIT[r/m, temp] = 0\n   DO\n      temp \u001b temp - 1;\n      register \u001b temp;\n   OD;\nFI;\n\nDescription\n\nBSR scans the bits in the second word or doubleword operand from the most\nsignificant bit to the least significant bit. The ZF flag is cleared if the\nbits are all 0; otherwise, ZF is set and the destination register is loaded\nwith the bit index of the first set bit found when scanning in the reverse\ndirection.\n\nFlags Affected\n\nZF as described above\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nBT  Bit Test\n\nOpcode         Instruction     Clocks    Description\n\n0F  A3         BT r/m16,r16    3/12      Save bit in carry flag\n0F  A3         BT r/m32,r32    3/12      Save bit in carry flag\n0F  BA /4 ib   BT r/m16,imm8   3/6       Save bit in carry flag\n0F  BA /4 ib   BT r/m32,imm8   3/6       Save bit in carry flag\n\n\nOperation\n\nCF \u001b BIT[LeftSRC, RightSRC];\n\nDescription\n\nBT saves the value of the bit indicated by the base (first operand) and the\nbit offset (second operand) into the carry flag.\n\nFlags Affected\n\nCF as described above\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS, ES,\nFS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\nNotes\n\nThe index of the selected bit can be given by the immediate constant in the\ninstruction or by a value in a general register. Only an 8-bit immediate\nvalue is used in the instruction. This operand is taken modulo 32, so the\nrange of immediate bit offsets is 0..31. This allows any bit within a\nregister to be selected. For memory bit strings, this immediate field gives\nonly the bit offset within a word or doubleword. Immediate bit offsets\nlarger than 31 are supported by using the immediate bit offset field in\ncombination with the displacement field of the memory operand. The low-order\n3 to 5 bits of the immediate bit offset are stored in the immediate bit\noffset field, and the high-order 27 to 29 bits are shifted and combined with\nthe byte displacement in the addressing mode.\n\nWhen accessing a bit in memory, the 80386 may access four bytes starting\nfrom the memory address given by:\n\n   Effective Address + (4 * (BitOffset DIV 32))\n\nfor a 32-bit operand size, or two bytes starting from the memory address\ngiven by:\n\n   Effective Address + (2 * (BitOffset DIV 16))\n\nfor a 16-bit operand size. It may do so even when only a single byte needs\nto be accessed in order to reach the given bit. You must therefore avoid\nreferencing areas of memory close to address space holes. In particular,\navoid references to memory-mapped I/O registers. Instead, use the MOV\ninstructions to load from or store to these addresses, and use the register\nform of these instructions to manipulate the data.\n\n\nBTC  Bit Test and Complement\n\nOpcode        Instruction     Clocks  Description\n\n0F  BB        BTC r/m16,r16   6/13    Save bit in carry flag and complement\n0F  BB        BTC r/m32,r32   6/13    Save bit in carry flag and complement\n0F  BA /7 ib  BTC r/m16,imm8  6/8     Save bit in carry flag and complement\n0F  BA /7 ib  BTC r/m32,imm8  6/8     Save bit in carry flag and complement\n\n\nOperation\n\nCF \u001b BIT[LeftSRC, RightSRC];\nBIT[LeftSRC, RightSRC] \u001b NOT BIT[LeftSRC, RightSRC];\n\nDescription\n\nBTC saves the value of the bit indicated by the base (first operand) and the\nbit offset (second operand) into the carry flag and then complements the\nbit.\n\nFlags Affected\n\nCF as described above\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\nNotes\n\nThe index of the selected bit can be given by the immediate constant in the\ninstruction or by a value in a general register. Only an 8-bit immediate\nvalue is used in the instruction. This operand is taken modulo 32, so the\nrange of immediate bit offsets is 0..31. This allows any bit within a\nregister to be selected. For memory bit strings, this immediate field gives\nonly the bit offset within a word or doubleword. Immediate bit offsets\nlarger than 31 are supported by using the immediate bit offset field in\ncombination with the displacement field of the memory operand. The low-order\n3 to 5 bits of the immediate bit offset are stored in the immediate bit\noffset field, and the high-order 27 to 29 bits are shifted and combined with\nthe byte displacement in the addressing mode.\n\nWhen accessing a bit in memory, the 80386 may access four bytes starting\nfrom the memory address given by:\n\n   Effective Address + (4 * (BitOffset DIV 32))\n\nfor a 32-bit operand size, or two bytes starting from the memory address\ngiven by:\n\n   Effective Address + (2 * (BitOffset DIV 16))\n\nfor a 16-bit operand size. It may do so even when only a single byte needs\nto be accessed in order to reach the given bit. You must therefore avoid\nreferencing areas of memory close to address space holes. In particular,\navoid references to memory-mapped I/O registers. Instead, use the MOV\ninstructions to load from or store to these addresses, and use the register\nform of these instructions to manipulate the data.\n\n\nBTR  Bit Test and Reset\n\nOpcode        Instruction     Clocks  Description\n\n0F  B3        BTR r/m16,r16   6/13    Save bit in carry flag and reset\n0F  B3        BTR r/m32,r32   6/13    Save bit in carry flag and reset\n0F  BA /6 ib  BTR r/m16,imm8  6/8     Save bit in carry flag and reset\n0F  BA /6 ib  BTR r/m32,imm8  6/8     Save bit in carry flag and reset\n\n\nOperation\n\nCF \u001b BIT[LeftSRC, RightSRC];\nBIT[LeftSRC, RightSRC] \u001b 0;\n\nDescription\n\nBTR saves the value of the bit indicated by the base (first operand) and the\nbit offset (second operand) into the carry flag and then stores 0 in the\nbit.\n\nFlags Affected\n\nCF as described above\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\nNotes\n\nThe index of the selected bit can be given by the immediate constant in the\ninstruction or by a value in a general register. Only an 8-bit immediate\nvalue is used in the instruction. This operand is taken modulo 32, so the\nrange of immediate bit offsets is 0..31. This allows any bit within a\nregister to be selected. For memory bit strings, this immediate field gives\nonly the bit offset within a word or doubleword. Immediate bit offsets\nlarger than 31 (or 15) are supported by using the immediate bit offset field\nin combination with the displacement field of the memory operand. The\nlow-order 3 to 5 bits of the immediate bit offset are stored in the\nimmediate bit offset field, and the high-order 27 to 29 bits are shifted and\ncombined with the byte displacement in the addressing mode.\n\nWhen accessing a bit in memory, the 80386 may access four bytes starting\nfrom the memory address given by:\n\n   Effective Address + 4 * (BitOffset DIV 32)\n\nfor a 32-bit operand size, or two bytes starting from the memory address\ngiven by:\n\n   Effective Address + 2 * (BitOffset DIV 16)\n\nfor a 16-bit operand size. It may do so even when only a single byte needs\nto be accessed in order to reach the given bit. You must therefore avoid\nreferencing areas of memory close to address space holes. In particular,\navoid references to memory-mapped I/O registers. Instead, use the MOV\ninstructions to load from or store to these addresses, and use the register\nform of these instructions to manipulate the data.\n\n\nBTS  Bit Test and Set\n\nOpcode        Instruction     Clocks  Description\n\n0F  AB        BTS r/m16,r16   6/13    Save bit in carry flag and set\n0F  AB        BTS r/m32,r32   6/13    Save bit in carry flag and set\n0F  BA /5 ib  BTS r/m16,imm8  6/8     Save bit in carry flag and set\n0F  BA /5 ib  BTS r/m32,imm8  6/8     Save bit in carry flag and set\n\n\nOperation\n\nCF \u001b BIT[LeftSRC, RightSRC];\nBIT[LeftSRC, RightSRC] \u001b 1;\n\nDescription\n\nBTS saves the value of the bit indicated by the base (first operand) and the\nbit offset (second operand) into the carry flag and then stores 1 in the\nbit.\n\nFlags Affected\n\nCF as described above\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\nNotes\n\nThe index of the selected bit can be given by the immediate constant in the\ninstruction or by a value in a general register. Only an 8-bit immediate\nvalue is used in the instruction. This operand is taken modulo 32, so the\nrange of immediate bit offsets is 0..31. This allows any bit within a\nregister to be selected. For memory bit strings, this immediate field gives\nonly the bit offset within a word or doubleword. Immediate bit offsets\nlarger than 31 are supported by using the immediate bit offset field in\ncombination with the displacement field of the memory operand. The\nlow-order 3 to 5 bits of the immediate bit offset are stored in the\nimmediate bit offset field, and the high order 27 to 29 bits are shifted and\ncombined with the byte displacement in the addressing mode.\n\nWhen accessing a bit in memory, the processor may access four bytes starting\nfrom the memory address given by:\n\n   Effective Address + (4 * (BitOffset DIV 32))\n\nfor a 32-bit operand size, or two bytes starting from the memory address\ngiven by:\n\n   Effective Address + (2 * (BitOffset DIV 16))\n\nfor a 16-bit operand size. It may do this even when only a single byte needs\nto be accessed in order to get at the given bit. Thus the programmer must be\ncareful to avoid referencing areas of memory close to address space holes.\nIn particular, avoid references to memory-mapped I/O registers. Instead, use\nthe MOV instructions to load from or store to these addresses, and use the\nregister form of these instructions to manipulate the data.\n\n\nCALL  Call Procedure\n\n\nOpcode    Instruction     Clocks\n  Values of ts are given by the following table:\n\n                             New Task\n              386 TSS         386 TSS         286 TSS\n  Old         VM = 0          VM = 1\n  Task                     Via Task Gate?\n\n              N     Y         N     Y         N     Y\n\n386          300   309       217   226       273   282\nTSS VM=0\n\n286          298   307       217   226       273   282\nTSS         Description\n\nE8  cw    CALL rel16       7+m            Call near, displacement relative\n                                          to next instruction\nFF  /2    CALL r/m16       7+m/10+m       Call near, register\n                                          indirect/memory indirect\n9A  cd    CALL ptr16:16    17+m,pm=34+m   Call intersegment, to full\n                                          pointer given\n9A  cd    CALL ptr16:16    pm=52+m        Call gate, same privilege\n9A  cd    CALL ptr16:16    pm=86+m        Call gate, more privilege, no\n                                          parameters\n9A  cd    CALL ptr16:16    pm=94+4x+m     Call gate, more privilege, x\n                                          parameters\n9A  cd    CALL ptr16:16    ts             Call to task\nFF  /3    CALL m16:16      22+m,pm=38+m   Call intersegment, address at\n                                          r/m dword\nFF  /3    CALL m16:16      pm=56+m        Call gate, same privilege\nFF  /3    CALL m16:16      pm=90+m        Call gate, more privilege, no\n                                          parameters\nFF  /3    CALL m16:16      pm=98+4x+m     Call gate, more privilege, x\n                                          parameters\nFF  /3    CALL m16:16      5 + ts         Call to task\nE8  cd    CALL rel32       7+m            Call near, displacement relative\n                                          to next instruction\nFF  /2    CALL r/m32       7+m/10+m       Call near, indirect\n9A  cp    CALL ptr16:32    17+m,pm=34+m   Call intersegment, to full\n                                          pointer given\n9A  cp    CALL ptr16:32    pm=52+m        Call gate, same privilege\n9A  cp    CALL ptr16:32    pm=86+m        Call gate, more privilege, no\n                                          parameters\n9A  cp    CALL ptr32:32    pm=94+4x+m     Call gate, more privilege, x\n                                          parameters\n9A  cp    CALL ptr16:32    ts             Call to task\nFF  /3    CALL m16:32      22+m,pm=38+m   Call intersegment, address at\n                                          r/m dword\nFF  /3    CALL m16:32      pm=56+m        Call gate, same privilege\nFF  /3    CALL m16:32      pm=90+m        Call gate, more privilege, no\n                                          parameters\nFF  /3    CALL m16:32      pm=98+4x+m     Call gate, more privilege, x\n                                          parameters\nFF  /3    CALL m16:32      5 + ts         Call to task\n\n\n\nNOTE:\n  Values of ts are given by the following table:\n\n                             New Task\n              386 TSS         386 TSS         286 TSS\n  Old         VM = 0          VM = 1\n  Task                     Via Task Gate?\n\n              N     Y         N     Y         N     Y\n\n386          300   309       217   226       273   282\nTSS VM=0\n\n286          298   307       217   226       273   282\nTSS\n\n\nOperation\n\nIF rel16 or rel32 type of call\nTHEN (* near relative call *)\n   IF OperandSize = 16\n   THEN\n      Push(IP);\n      EIP \u001b (EIP + rel16) AND 0000FFFFH;\n   ELSE (* OperandSize = 32 *)\n      Push(EIP);\n      EIP \u001b EIP + rel32;\n   FI;\nFI;\n\nIF r/m16 or r/m32 type of call\nTHEN (* near absolute call *)\n   IF OperandSize = 16\n   THEN\n      Push(IP);\n      EIP \u001b [r/m16] AND 0000FFFFH;\n   ELSE (* OperandSize = 32 *)\n      Push(EIP);\n      EIP \u001b [r/m32];\n   FI;\nFI;\n\nIF (PE = 0 OR (PE = 1 AND VM = 1))\n(* real mode or virtual 8086 mode *)\n   AND instruction = far CALL\n   (* i.e., operand type is m16:16, m16:32, ptr16:16, ptr16:32 *)\nTHEN\n   IF OperandSize = 16\n   THEN\n      Push(CS);\n      Push(IP); (* address of next instruction; 16 bits *)\n   ELSE\n      Push(CS); (* padded with 16 high-order bits *)\n      Push(EIP); (* address of next instruction; 32 bits *)\n   FI;\n   IF operand type is m16:16 or m16:32\n   THEN (* indirect far call *)\n      IF OperandSize = 16\n      THEN\n         CS:IP \u001b [m16:16];\n         EIP \u001b EIP AND 0000FFFFH; (* clear upper 16 bits *)\n      ELSE (* OperandSize = 32 *)\n         CS:EIP \u001b [m16:32];\n      FI;\n   FI;\n   IF operand type is ptr16:16 or ptr16:32\n   THEN (* direct far call *)\n      IF OperandSize = 16\n      THEN\n         CS:IP \u001b ptr16:16;\n         EIP \u001b EIP AND 0000FFFFH; (* clear upper 16 bits *)\n      ELSE (* OperandSize = 32 *)\n         CS:EIP \u001b ptr16:32;\n      FI;\n   FI;\nFI;\n\nIF (PE = 1 AND VM = 0) (* Protected mode, not V86 mode *)\n   AND instruction = far CALL\nTHEN\n   If indirect, then check access of EA doubleword;\n      #GP(0) if limit violation;\n   New CS selector must not be null else #GP(0);\n   Check that new CS selector index is within its\n      descriptor table limits; else #GP(new CS selector);\n   Examine AR byte of selected descriptor for various legal values;\n      depending on value:\n      go to CONFORMING-CODE-SEGMENT;\n      go to NONCONFORMING-CODE-SEGMENT;\n      go to CALL-GATE;\n      go to TASK-GATE;\n      go to TASK-STATE-SEGMENT;\n   ELSE #GP(code segment selector);\nFI;\n\nCONFORMING-CODE-SEGMENT:\n   DPL must be  CPL ELSE #GP(code segment selector);\n   Segment must be present ELSE #NP(code segment selector);\n   Stack must be big enough for return address ELSE #SS(0);\n   Instruction pointer must be in code segment limit ELSE #GP(0);\n   Load code segment descriptor into CS register;\n   Load CS with new code segment selector;\n   Load EIP with zero-extend(new offset);\n   IF OperandSize=16 THEN EIP \u001b EIP AND 0000FFFFH; FI;\n\nNONCONFORMING-CODE-SEGMENT:\n   RPL must be  CPL ELSE #GP(code segment selector)\n   DPL must be = CPL ELSE #GP(code segment selector)\n   Segment must be present ELSE #NP(code segment selector)\n   Stack must be big enough for return address ELSE #SS(0)\n   Instruction pointer must be in code segment limit ELSE #GP(0)\n   Load code segment descriptor into CS register\n   Load CS with new code segment selector\n   Set RPL of CS to CPL\n   Load EIP with zero-extend(new offset);\n   IF OperandSize=16 THEN EIP \u001b EIP AND 0000FFFFH; FI;\n\nCALL-GATE:\n   Call gate DPL must be  CPL ELSE #GP(call gate selector)\n   Call gate DPL must be  RPL ELSE #GP(call gate selector)\n   Call gate must be present ELSE #NP(call gate selector)\n   Examine code segment selector in call gate descriptor:\n      Selector must not be null ELSE #GP(0)\n      Selector must be within its descriptor table\n         limits ELSE #GP(code segment selector)\n   AR byte of selected descriptor must indicate code\n      segment ELSE #GP(code segment selector)\n   DPL of selected descriptor must be  CPL ELSE\n      #GP(code segment selector)\n   IF non-conforming code segment AND DPL < CPL\n   THEN go to MORE-PRIVILEGE\n   ELSE go to SAME-PRIVILEGE\n   FI;\n\nMORE-PRIVILEGE:\n   Get new SS selector for new privilege level from TSS\n      Check selector and descriptor for new SS:\n         Selector must not be null ELSE #TS(0)\n         Selector index must be within its descriptor\n            table limits ELSE #TS(SS selector)\n         Selector's RPL must equal DPL of code segment\n            ELSE #TS(SS selector)\n         Stack segment DPL must equal DPL of code\n            segment ELSE #TS(SS selector)\n         Descriptor must indicate writable data segment\n            ELSE #TS(SS selector)\n         Segment present ELSE #SS(SS selector)\n      IF OperandSize=32\n      THEN\n         New stack must have room for parameters plus 16 bytes\n            ELSE #SS(0)\n         EIP must be in code segment limit ELSE #GP(0)\n         Load new SS:eSP value from TSS\n         Load new CS:EIP value from gate\n      ELSE\n         New stack must have room for parameters plus 8 bytes ELSE #SS(0)\n         IP must be in code segment limit ELSE #GP(0)\n         Load new SS:eSP value from TSS\n         Load new CS:IP value from gate\n      FI;\n      Load CS descriptor\n      Load SS descriptor\n      Push long pointer of old stack onto new stack\n      Get word count from call gate, mask to 5 bits\n      Copy parameters from old stack onto new stack\n      Push return address onto new stack\n      Set CPL to stack segment DPL\n      Set RPL of CS to CPL\n\nSAME-PRIVILEGE:\n   IF OperandSize=32\n   THEN\n      Stack must have room for 6-byte return address (padded to 8 bytes)\n         ELSE #SS(0)\n      EIP must be within code segment limit ELSE #GP(0)\n      Load CS:EIP from gate\n   ELSE\n      Stack must have room for 4-byte return address ELSE #SS(0)\n      IP must be within code segment limit ELSE #GP(0)\n      Load CS:IP from gate\n   FI;\n   Push return address onto stack\n   Load code segment descriptor into CS register\n   Set RPL of CS to CPL\n\nTASK-GATE:\n   Task gate DPL must be  CPL ELSE #TS(gate selector)\n   Task gate DPL must be  RPL ELSE #TS(gate selector)\n   Task Gate must be present ELSE #NP(gate selector)\n   Examine selector to TSS, given in Task Gate descriptor:\n      Must specify global in the local/global bit ELSE #TS(TSS selector)\n      Index must be within GDT limits ELSE #TS(TSS selector)\n      TSS descriptor AR byte must specify nonbusy TSS\n         ELSE #TS(TSS selector)\n      Task State Segment must be present ELSE #NP(TSS selector)\n   SWITCH-TASKS (with nesting) to TSS\n   IP must be in code segment limit ELSE #TS(0)\n\nTASK-STATE-SEGMENT:\n   TSS DPL must be  CPL else #TS(TSS selector)\n   TSS DPL must be  RPL ELSE #TS(TSS selector)\n   TSS descriptor AR byte must specify available TSS\n      ELSE #TS(TSS selector)\n   Task State Segment must be present ELSE #NP(TSS selector)\n   SWITCH-TASKS (with nesting) to TSS\n   IP must be in code segment limit ELSE #TS(0)\n\nDescription\n\nThe CALL instruction causes the procedure named in the operand to be\nexecuted. When the procedure is complete (a return instruction is executed\nwithin the procedure), execution continues at the instruction that follows\nthe CALL instruction.\n\nThe action of the different forms of the instruction are described below.\n\nNear calls are those with destinations of type r/m16, r/m32, rel16, rel32;\nchanging or saving the segment register value is not necessary. The CALL\nrel16 and CALL rel32 forms add a signed offset to the address of the\ninstruction following CALL to determine the destination. The rel16 form is\nused when the instruction's operand-size attribute is 16 bits; rel32 is used\nwhen the operand-size attribute is 32 bits. The result is stored in the\n32-bit EIP register. With rel16, the upper 16 bits of EIP are cleared,\nresulting in an offset whose value does not exceed 16 bits. CALL r/m16 and\nCALL r/m32 specify a register or memory location from which the absolute\nsegment offset is fetched. The offset fetched from r/m is 32 bits for an\noperand-size attribute of 32 (r/m32), or 16 bits for an operand-size of 16\n(r/m16). The offset of the instruction following CALL is pushed onto the\nstack. It will be popped by a near RET instruction within the procedure. The\nCS register is not changed by this form of CALL.\n\nThe far calls, CALL ptr16:16 and CALL ptr16:32, use a four-byte or six-byte\noperand as a long pointer to the procedure called. The CALL m16:16 and\nm16:32 forms fetch the long pointer from the memory location\nspecified (indirection). In Real Address Mode or Virtual 8086 Mode, the long\npointer provides 16 bits for the CS register and 16 or 32 bits for the EIP\nregister (depending on the operand-size attribute). These forms of the\ninstruction push both CS and IP or EIP as a return address.\n\nIn Protected Mode, both long pointer forms consult the AR byte in the\ndescriptor indexed by the selector part of the long pointer. Depending on\nthe value of the AR byte, the call will perform one of the following types\nof control transfers:\n\n    A far call to the same protection level\n    An inter-protection level far call\n    A task switch\n\nFor more information on Protected Mode control transfers, refer to\nChapter 6 and Chapter 7.\n\nFlags Affected\n\nAll flags are affected if a task switch occurs; no flags are affected if a\ntask switch does not occur\n\nProtected Mode Exceptions\n\nFor far calls: #GP, #NP, #SS, and #TS, as indicated in the list above\n\nFor near direct calls: #GP(0) if procedure location is beyond the code\nsegment limits; #SS(0) if pushing the return address exceeds the bounds of\nthe stack segment; #PF (fault-code) for a page fault\n\nFor a near indirect call: #GP(0) for an illegal memory operand effective\naddress in the CS, DS, ES, FS, or GS segments; #SS(0) for an illegal address\nin the SS segment; #GP(0) if the indirect offset obtained is beyond the code\nsegment limits; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\nNotes\n\nAny far call from a 32-bit code segment to 16-bit code segments should be\nmade from the first 64K bytes of the 32-bit code segment, since the\noperand-size attribute of the instruction is set to 16, thus allowing only a\n16-bit return address offset to be saved.\n\n\nCBW/CWDE  Convert Byte to Word/Convert Word to Doubleword\n\nOpcode    Instruction     Clocks          Description\n\n98        CBW             3               AX \u001b sign-extend of AL\n98        CWDE            3               EAX \u001b sign-extend of AX\n\n\nOperation\n\nIF OperandSize = 16 (* instruction = CBW *)\nTHEN AX \u001b SignExtend(AL);\nELSE (* OperandSize = 32, instruction = CWDE *)\n   EAX \u001b SignExtend(AX);\nFI;\n\nDescription\n\nCBW converts the signed byte in AL to a signed word in AX by extending the\nmost significant bit of AL (the sign bit) into all of the bits of AH. CWDE\nconverts the signed word in AX to a doubleword in EAX by extending the most\nsignificant bit of AX into the two most significant bytes of EAX. Note that\nCWDE is different from CWD. CWD uses DX:AX rather than EAX as a destination.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nCLC  Clear Carry Flag\n\nOpcode    Instruction     Clocks          Description\n\nF8        CLC             2               Clear carry flag\n\n\nOperation\n\nCF \u001b 0;\n\nDescription\n\nCLC sets the carry flag to zero. It does not affect other flags or\nregisters.\n\nFlags Affected\n\nCF = 0\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nCLD  Clear Direction Flag\n\nOpcode    Instruction     Clocks   Description\n\nFC        CLD             2        Clear direction flag; SI and DI\n                                   will increment during string\n                                   instructions\n\n\nOperation\n\nDF \u001b 0;\n\nDescription\n\nCLD clears the direction flag. No other flags or registers are affected.\nAfter CLD is executed, string operations will increment the index registers\n(SI and/or DI) that they use.\n\nFlags Affected\n\nDF = 0\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nCLI  Clear Interrupt Flag\n\nOpcode    Instruction    Clocks   Description\n\nFA        CLI            3        Clear interrupt flag; interrupts disabled\n\n\nOperation\n\nIF \u001b 0;\n\nDescription\n\nCLI clears the interrupt flag if the current privilege level is at least as\nprivileged as IOPL. No other flags are affected. External interrupts are not\nrecognized at the end of the CLI instruction or from that point on until the\ninterrupt flag is set.\n\nFlags Affected\n\nIF = 0\n\nProtected Mode Exceptions\n\n#GP(0) if the current privilege level is greater (has less privilege) than\nthe IOPL in the flags register. IOPL specifies the least privileged level at\nwhich I/O can be performed.\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\n#GP(0) as for Protected Mode\n\n\nCLTS  Clear Task-Switched Flag in CR0\n\nOpcode    Instruction    Clocks   Description\n\nOF  06    CLTS           5        Clear task-switched flag\n\n\nOperation\n\nTS Flag in CR0 \u001b 0;\n\nDescription\n\nCLTS clears the task-switched (TS) flag in register CR0. This flag is set by\nthe 80386 every time a task switch occurs. The TS flag is used to manage\nprocessor extensions as follows:\n\n    Every execution of an ESC instruction is trapped if the TS flag is set.\n\n    Execution of a WAIT instruction is trapped if the MP flag and the TS\n     flag are both set.\n\nThus, if a task switch was made after an ESC instruction was begun, the\nprocessor extension's context may need to be saved before a new ESC\ninstruction can be issued. The fault handler saves the context and resets\nthe TS flag.\n\nCLTS appears in operating system software, not in application programs. It\nis a privileged instruction that can only be executed at privilege level 0.\n\nFlags Affected\n\nTS = 0 (TS is in CR0, not the flag register)\n\nProtected Mode Exceptions\n\n#GP(0) if CLTS is executed with a current privilege level other than 0\n\nReal Address Mode Exceptions\n\nNone (valid in Real Address Mode to allow initialization for Protected\nMode)\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode\n\n\nCMC  Complement Carry Flag\n\nOpcode    Instruction    Clocks   Description\n\nF5        CMC            2        Complement carry flag\n\n\nOperation\n\nCF \u001b NOT CF;\n\nDescription\n\nCMC reverses the setting of the carry flag. No other flags are affected.\n\nFlags Affected\n\nCF as described above\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nCMP  Compare Two Operands\n\n\nOpcode          Instruction        Clocks   Description\n\n3C  ib          CMP AL,imm8        2        Compare immediate byte to AL\n3D  iw          CMP AX,imm16       2        Compare immediate word to AX\n3D  id          CMP EAX,imm32      2        Compare immediate dword to EAX\n80  /7 ib       CMP r/m8,imm8      2/5      Compare immediate byte to r/m\n                                            byte\n81  /7 iw       CMP r/m16,imm16    2/5      Compare immediate word to r/m\n                                            word\n81  /7 id       CMP r/m32,imm32    2/5      Compare immediate dword to r/m\n                                            dword\n83  /7 ib       CMP r/m16,imm8     2/5      Compare sign extended immediate\n                                            byte to r/m word\n83  /7 ib       CMP r/m32,imm8     2/5      Compare sign extended immediate\n                                            byte to r/m dword\n38  /r          CMP r/m8,r8        2/5      Compare byte register to r/m\n                                            byte\n39  /r          CMP r/m16,r16      2/5      Compare word register to r/m\n                                            word\n39  /r          CMP r/m32,r32      2/5      Compare dword register to r/m\n                                            dword\n3A  /r          CMP r8,r/m8        2/6      Compare r/m byte to byte\n                                            register\n3B  /r          CMP r16,r/m16      2/6      Compare r/m word to word\n                                            register\n3B  /r          CMP r32,r/m32      2/6      Compare r/m dword to dword\n                                            register\n\n\nOperation\n\nLeftSRC - SignExtend(RightSRC);\n(* CMP does not store a result; its purpose is to set the flags *)\n\nDescription\n\nCMP subtracts the second operand from the first but, unlike the SUB\ninstruction, does not store the result; only the flags are changed. CMP is\ntypically used in conjunction with conditional jumps and the SETcc\ninstruction. (Refer to Appendix D for the list of signed and unsigned flag\ntests provided.) If an operand greater than one byte is compared to an\nimmediate byte, the byte value is first sign-extended.\n\nFlags Affected\n\nOF, SF, ZF, AF, PF, and CF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS, ES,\nFS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nCMPS/CMPSB/CMPSW/CMPSD  Compare String Operands\n\nOpcode    Instruction        Clocks   Description\n\nA6        CMPS m8,m8         10       Compare bytes ES:[(E)DI] (second\n                                      operand) with   [(E)SI] (first \n                                      operand)\nA7        CMPS m16,m16       10       Compare words ES:[(E)DI] (second\n                                      operand) with   [(E)SI] (first \n                                      operand)\nA7        CMPS m32,m32       10       Compare dwords ES:[(E)DI]\n                                      (second operand) with [(E)SI] \n                                      (first operand)\nA6        CMPSB              10       Compare bytes ES:[(E)DI] with\n                                      DS:[SI]\nA7        CMPSW              10       Compare words ES:[(E)DI] with\n                                      DS:[SI]\nA7        CMPSD              10       Compare dwords ES:[(E)DI] with\n                                      DS:[SI]\n\n\nOperation\n\nIF (instruction = CMPSD) OR\n   (instruction has operands of type DWORD)\nTHEN OperandSize \u001b 32;\nELSE OperandSize \u001b 16;\nFI;\nIF AddressSize = 16\nTHEN\n   use SI for source-index and DI for destination-index\nELSE (* AddressSize = 32 *)\n   use ESI for source-index and EDI for destination-index;\nFI;\nIF byte type of instruction\nTHEN\n   [source-index] - [destination-index]; (* byte comparison *)\n   IF DF = 0 THEN IncDec \u001b 1 ELSE IncDec \u001b -1; FI;\nELSE\n   IF OperandSize = 16\n   THEN\n      [source-index] - [destination-index]; (* word comparison *)\n      IF DF = 0 THEN IncDec \u001b 2 ELSE IncDec \u001b -2; FI;\n   ELSE (* OperandSize = 32 *)\n      [source-index] - [destination-index]; (* dword comparison *)\n      IF DF = 0 THEN IncDec \u001b 4 ELSE IncDec \u001b -4; FI;\n   FI;\nFI;\nsource-index = source-index + IncDec;\ndestination-index = destination-index + IncDec;\n\nDescription\n\nCMPS compares the byte, word, or doubleword pointed to by the source-index\nregister with the byte, word, or doubleword pointed to by the\ndestination-index register.\n\nIf the address-size attribute of this instruction is 16 bits, SI and DI\nwill be used for source- and destination-index registers; otherwise ESI and\nEDI will be used. Load the correct index values into SI and DI (or ESI and\nEDI) before executing CMPS.\n\nThe comparison is done by subtracting the operand indexed by\nthe destination-index register from the operand indexed by the source-index\nregister.\n\nNote that the direction of subtraction for CMPS is [SI] - [DI] or\n[ESI] - [EDI]. The left operand (SI or ESI) is the source and the right\noperand (DI or EDI) is the destination. This is the reverse of the usual\nIntel convention in which the left operand is the destination and the right\noperand is the source.\n\nThe result of the subtraction is not stored; only the flags reflect the\nchange. The types of the operands determine whether bytes, words, or\ndoublewords are compared. For the first operand (SI or ESI), the DS register\nis used, unless a segment override byte is present. The second operand (DI\nor EDI) must be addressable from the ES register; no segment override is\npossible.\n\nAfter the comparison is made, both the source-index register and\ndestination-index register are automatically advanced. If the direction flag\nis 0 (CLD was executed), the registers increment; if the direction flag is 1\n(STD was executed), the registers decrement. The registers increment or\ndecrement by 1 if a byte is compared, by 2 if a word is compared, or by 4 if\na doubleword is compared.\n\nCMPSB, CMPSW and CMPSD are synonyms for the byte, word, and\ndoubleword CMPS instructions, respectively.\n\nCMPS can be preceded by the REPE or REPNE prefix for block comparison of CX\nor ECX bytes, words, or doublewords. Refer to the description of the REP\ninstruction for more information on this operation.\n\nFlags Affected\n\nOF, SF, ZF, AF, PF, and CF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS, ES,\nFS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF (fault-code) for a page fault\n\n\nCWD/CDQ  Convert Word to Doubleword/Convert Doubleword to\n           Quadword\n\nOpcode    Instruction        Clocks   Description\n\n99        CWD                2        DX:AX \u001b sign-extend of AX\n99        CDQ                2        EDX:EAX \u001b sign-extend of EAX\n\n\nOperation\n\nIF OperandSize = 16 (* CWD instruction *)\nTHEN\n   IF AX < 0 THEN DX \u001b 0FFFFH; ELSE DX \u001b 0; FI;\nELSE (* OperandSize = 32, CDQ instruction *)\n   IF EAX < 0 THEN EDX \u001b 0FFFFFFFFH; ELSE EDX \u001b 0; FI;\nFI;\n\nDescription\n\nCWD converts the signed word in AX to a signed doubleword in DX:AX\nby extending the most significant bit of AX into all the bits of DX. CDQ\nconverts the signed doubleword in EAX to a signed 64-bit integer in the\nregister pair EDX:EAX by extending the most significant bit of EAX\n(the sign bit) into all the bits of EDX. Note that CWD is different from\nCWDE. CWDE uses EAX as a destination, instead of DX:AX.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nDAA  Decimal Adjust AL after Addition\n\nOpcode    Instruction        Clocks   Description\n\n27        DAA                4        Decimal adjust AL after addition\n\n\nOperation\n\nIF ((AL AND 0FH) > 9) OR (AF = 1)\nTHEN\n   AL \u001b AL + 6;\n   AF \u001b 1;\nELSE\n   AF \u001b 0;\nFI;\nIF (AL > 9FH) OR (CF = 1)\nTHEN\n   AL \u001b AL + 60H;\n   CF \u001b 1;\nELSE CF \u001b 0;\nFI;\n\nDescription\n\nExecute DAA only after executing an ADD instruction that leaves a\ntwo-BCD-digit byte result in the AL register. The ADD operands should\nconsist of two packed BCD digits. The DAA instruction adjusts AL to\ncontain the correct two-digit packed decimal result.\n\nFlags Affected\n\nAF and CF as described above; SF, ZF, PF, and CF as described in\nAppendix C.\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nDAS  Decimal Adjust AL after Subtraction\n\nOpcode    Instruction        Clocks   Description\n\n2F        DAS                4        Decimal adjust AL after subtraction\n\n\nOperation\n\nIF (AL AND 0FH) > 9 OR AF = 1\nTHEN\n   AL \u001b AL - 6;\n   AF \u001b 1;\nELSE\n   AF \u001b 0;\nFI;\nIF (AL > 9FH) OR (CF = 1)\nTHEN\n   AL \u001b AL - 60H;\n   CF \u001b 1;\nELSE CF \u001b 0;\nFI;\n\nDescription\n\nExecute DAS only after a subtraction instruction that leaves a\ntwo-BCD-digit byte result in the AL register. The operands should consist\nof two packed BCD digits. DAS adjusts AL to contain the correct packed\ntwo-digit decimal result.\n\nFlags Affected\n\nAF and CF as described above; SF, ZF, and PF as described in Appendix C.\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nDEC  Decrement by 1\n\nOpcode    Instruction        Clocks   Description\n\nFE /1     DEC r/m8           2/6      Decrement r/m byte by 1\nFF /1     DEC r/m16          2/6      Decrement r/m word by 1\n          DEC r/m32          2/6      Decrement r/m dword by 1\n48+rw     DEC r16            2        Decrement word register by 1\n48+rw     DEC r32            2        Decrement dword register by 1\n\n\nOperation\n\nDEST \u001b DEST - 1;\n\nDescription\n\nDEC subtracts 1 from the operand. DEC does not change the carry flag.\nTo affect the carry flag, use the SUB instruction with an immediate\noperand of 1.\n\nFlags Affected\n\nOF, SF, ZF, AF, and PF as described in Appendix C.\n\nProtected Mode Exceptions\n\n#GP(0) if the result is a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nDIV  Unsigned Divide\n\nOpcode    Instruction        Clocks   Description\n\nF6 /6     DIV AL,r/m8        14/17    Unsigned divide AX by r/m byte\n                                      (AL=Quo, AH=Rem)\nF7 /6     DIV AX,r/m16       22/25    Unsigned divide DX:AX by r/m\n                                      word (AX=Quo, DX=Rem)\nF7 /6     DIV EAX,r/m32      38/41    Unsigned divide EDX:EAX by r/m\n                                      dword (EAX=Quo, EDX=Rem)\n\n\nOperation\n\ntemp \u001b dividend / divisor;\nIF temp does not fit in quotient\nTHEN Interrupt 0;\nELSE\n   quotient \u001b temp;\n   remainder \u001b dividend MOD (r/m);\nFI;\n\n\nNote:\n  Divisions are unsigned. The divisor is given by the r/m operand.\n  The dividend, quotient, and remainder use implicit registers. Refer to\n  the table under \"Description.\"\n\n\nDescription\n\nDIV performs an unsigned division. The dividend is implicit; only the\ndivisor is given as an operand. The remainder is always less than the\ndivisor. The type of the divisor determines which registers to use as\nfollows:\n\n    Size    Dividend     Divisor   Quotient   Remainder\n    byte    AX           r/m8       AL          AH\n    word    DX:AX        r/m16      AX          DX\n    dword   EDX:EAX      r/m32      EAX         EDX\n\nFlags Affected\n\nOF, SF, ZF, AR, PF, CF are undefined.\n\nProtected Mode Exceptions\n\nInterrupt 0 if the quotient is too large to fit in the designated register\n(AL, AX, or EAX), or if the divisor is 0; #GP(0) for an illegal memory\noperand effective address in the CS, DS, ES, FS, or GS segments; #SS(0)\nfor an illegal address in the SS segment; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 0 if the quotient is too big to fit in the designated register\n(AL, AX, or EAX), or if the divisor is 0; Interrupt 13 if any part of the\noperand would lie outside of the effective address space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nENTER  Make Stack Frame for Procedure Parameters\n\nOpcode      Instruction        Clocks     Description\n\nC8 iw 00    ENTER imm16,0      10         Make procedure stack frame\nC8 iw 01    ENTER imm16,1      12         Make stack frame for procedure\n                                          parameters\nC8 iw ib    ENTER imm16,imm8   15+4(n-1)  Make stack frame for\n                                          procedure parameters\n\n\nOperation\n\nlevel \u001b level MOD 32\nIF OperandSize = 16 THEN Push(BP) ELSE Push (EBP) FI;\n   (* Save stack pointer *)\nframe-ptr \u001b eSP\nIF level > 0\nTHEN (* level is rightmost parameter *)\n   FOR i \u001b 1 TO level - 1\n   DO\n      IF OperandSize = 16\n      THEN\n         BP \u001b BP - 2;\n         Push[BP]\n      ELSE (* OperandSize = 32 *)\n         EBP \u001b EBP - 4;\n         Push[EBP];\n      FI;\n   OD;\n   Push(frame-ptr)\nFI;\nIF OperandSize = 16 THEN BP \u001b frame-ptr ELSE EBP \u001b frame-ptr; FI;\nIF StackAddrSize = 16\nTHEN SP \u001b SP - First operand;\nELSE ESP \u001b ESP - ZeroExtend(First operand);\nFI;\n\nDescription\n\nENTER creates the stack frame required by most block-structured\nhigh-level languages. The first operand specifies the number of bytes of\ndynamic storage allocated on the stack for the routine being entered.\nThe second operand gives the lexical nesting level (0 to 31) of the routine\nwithin the high-level language source code. It determines the number of\nstack frame pointers copied into the new stack frame from the preceding\nframe. BP (or EBP, if the operand-size attribute is 32 bits) is the current\nstack frame pointer.\n\nIf the operand-size attribute is 16 bits, the processor uses BP as the\nframe pointer and SP as the stack pointer. If the operand-size attribute is\n32 bits, the processor uses EBP for the frame pointer and ESP for the stack\npointer.\n\nIf the second operand is 0, ENTER pushes the frame pointer (BP or\nEBP) onto the stack; ENTER then subtracts the first operand from the\nstack pointer and sets the frame pointer to the current stack-pointer\nvalue.\n\nFor example, a procedure with 12 bytes of local variables would have an\nENTER 12,0 instruction at its entry point and a LEAVE instruction\nbefore every RET. The 12 local bytes would be addressed as negative\noffsets from the frame pointer.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#SS(0) if SP or ESP would exceed the stack limit at any point during\ninstruction execution; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nHLT  Halt\n\nOpcode      Instruction        Clocks     Description\n\nF4          HLT                5          Halt\n\n\nOperation\n\nEnter Halt state;\n\nDescription\n\nHALT stops instruction execution and places the 80386 in a HALT state.\nAn enabled interrupt, NMI, or a reset will resume execution. If an\ninterrupt (including NMI) is used to resume execution after HLT, the saved\nCS:IP (or CS:EIP) value points to the instruction following HLT.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\nHLT is a privileged instruction; #GP(0) if the current privilege level is\nnot 0\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\n#GP(0); HLT is a privileged instruction\n\n\nIDIV  Signed Divide\n\nOpcode      Instruction        Clocks   Description\n\nF6 /7       IDIV r/m8          19       Signed divide AX by r/m byte\n                                        (AL=Quo, AH=Rem)\nF7 /7       IDIV AX,r/m16      27       Signed divide DX:AX by EA word\n                                        (AX=Quo, DX=Rem)\nF7 /7       IDIV EAX,r/m32     43       Signed divide EDX:EAX by DWORD\n                                        byte (EAX=Quo, EDX=Rem)\n\n\nOperation\n\ntemp \u001b dividend / divisor;\nIF temp does not fit in quotient\nTHEN Interrupt 0;\nELSE\n   quotient \u001b temp;\n   remainder \u001b dividend MOD (r/m);\nFI;\n\n\nNotes:\n  Divisions are signed. The divisor is given by the r/m operand. The\n  dividend, quotient, and remainder use implicit registers. Refer to the\n  table under \"Description.\"\n\n\nDescription\n\nIDIV performs a signed division. The dividend, quotient, and remainder\nare implicitly allocated to fixed registers. Only the divisor is given as\nan explicit r/m operand. The type of the divisor determines which registers\nto use as follows:\n\nSize     Divisor    Quotient    Remainder  Dividend\nbyte     r/m8        AL           AH       AX\nword     r/m16       AX           DX       DX:AX\ndword    r/m32       EAX          EDX      EDX:EAX\n\nIf the resulting quotient is too large to fit in the destination, or if the\ndivision is 0, an Interrupt 0 is generated. Nonintegral quotients are\ntruncated toward 0. The remainder has the same sign as the dividend\nand the absolute value of the remainder is always less than the absolute\nvalue of the divisor.\n\nFlags Affected\n\nOF, SF, ZF, AR, PF, CF are undefined.\n\nProtected Mode Exceptions\n\nInterrupt 0 if the quotient is too large to fit in the designated register\n(AL or AX), or if the divisor is 0; #GP (0) for an illegal memory operand\neffective address in the CS, DS, ES, FS, or GS segments; #SS(0) for an\nillegal address in the SS segment; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 0 if the quotient is too large to fit in the designated register\n(AL or AX), or if the divisor is 0; Interrupt 13 if any part of the operand\nwould lie outside of the effective address space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nIMUL  Signed Multiply\n\n\nOpcode      Instruction            Clocks      Description\n\nF6  /5      IMUL r/m8              9-14/12-17  AX\u001b AL * r/m byte\nF7  /5      IMUL r/m16             9-22/12-25  DX:AX \u001b AX * r/m word\nF7  /5      IMUL r/m32             9-38/12-41  EDX:EAX \u001b EAX * r/m dword\n0F  AF /r   IMUL r16,r/m16         9-22/12-25  word register \u001b word\n                                               register * r/m word\n0F  AF /r   IMUL r32,r/m32         9-38/12-41  dword register \u001b dword\n                                               register * r/m dword\n6B  /r ib   IMUL r16,r/m16,imm8    9-14/12-17  word register \u001b r/m16 *\n                                               sign-extended immediate byte\n6B  /r ib   IMUL r32,r/m32,imm8    9-14/12-17  dword register \u001b r/m32 *\n                                               sign-extended immediate byte\n6B  /r ib   IMUL r16,imm8          9-14/12-17  word register \u001b word\n                                               register * sign-extended\n                                               immediate byte\n6B  /r ib   IMUL r32,imm8          9-14/12-17  dword register \u001b dword\n                                               register * sign-extended\n                                               immediate byte\n69  /r iw   IMUL r16,r/m16,imm16   9-22/12-25  word register \u001b r/m16 *\n                                               immediate word\n69  /r id   IMUL r32,r/m32,imm32   9-38/12-41  dword register \u001b r/m32 *\n                                               immediate dword\n69  /r iw   IMUL r16,imm16         9-22/12-25  word register \u001b r/m16 *\n                                               immediate word\n69  /r id   IMUL r32,imm32         9-38/12-41  dword register \u001b r/m32 *\n                                               immediate dword\n\n\n\nNOTES:\n  The 80386 uses an early-out multiply algorithm. The actual number of\n  clocks depends on the position of the most significant bit in the\n  optimizing multiplier, shown underlined above. The optimization occurs for\n  positive and negative values. Because of the early-out algorithm, clock\n  counts given are minimum to maximum. To calculate the actual clocks, use\n  the following formula:\n\n\n  Actual clock = if m <> 0 then max(ceiling(log{2} m), 3) + 6 clocks  \n  Actual clock = if m = 0 then 9 clocks   \n  (where m is the multiplier)\n\nAdd three clocks if the multiplier is a memory operand.\n\nOperation\n\nresult \u001b multiplicand * multiplier;\n\nDescription\n\nIMUL performs signed multiplication. Some forms of the instruction\nuse implicit register operands. The operand combinations for all forms\nof the instruction are shown in the \"Description\" column above.\n\nIMUL clears the overflow and carry flags under the following conditions:\n\n   Instruction Form    Condition for Clearing CF and OF\n   r/m8                AL = sign-extend of AL to 16 bits\n   r/m16               AX = sign-extend of AX to 32 bits\n   r/m32               EDX:EAX = sign-extend of EAX to 32 bits\n   r16,r/m16           Result exactly fits within r16\n   r/32,r/m32          Result exactly fits within r32\n   r16,r/m16,imm16     Result exactly fits within r16\n   r32,r/m32,imm32     Result exactly fits within r32\n\nFlags Affected\n\nOF and CF as described above; SF, ZF, AF, and PF are undefined\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exeptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\nNotes\n\nWhen using the accumulator forms (IMUL r/m8, IMUL r/m16, or IMUL\nr/m32), the result of the multiplication is available even if the overflow\nflag is set because the result is two times the size of the multiplicand\nand multiplier. This is large enough to handle any possible result.\n\n\nIN  Input from Port\n\nOpcode    Instruction   Clocks            Description\n\nE4  ib    IN AL,imm8    12,pm=6*/26**     Input byte from immediate port\n                                          into AL\nE5  ib    IN AX,imm8    12,pm=6*/26**     Input word from immediate port\n                                          into AX\nE5  ib    IN EAX,imm8   12,pm=6*/26**     Input dword from immediate port\n                                          into EAX\nEC        IN AL,DX      13,pm=7*/27**     Input byte from port DX into AL\nED        IN AX,DX      13,pm=7*/27**     Input word from port DX into AX\nED        IN EAX,DX     13,pm=7*/27**     Input dword from port DX into\n                                          EAX\n\n\n\nNOTES:\n   *If CPL  IOPL\n  **If CPL > IOPL or if in virtual 8086 mode\n\n\nOperation\n\nIF (PE = 1) AND ((VM = 1) OR (CPL > IOPL))\nTHEN (* Virtual 8086 mode, or protected mode with CPL > IOPL *)\n   IF NOT I-O-Permission (SRC, width(SRC))\n   THEN #GP(0);\n   FI;\nFI;\nDEST \u001b [SRC]; (* Reads from I/O address space *)\n\nDescription\n\nIN transfers a data byte or data word from the port numbered by the\nsecond operand into the register (AL, AX, or EAX) specified by the first\noperand. Access any port from 0 to 65535 by placing the port number\nin the DX register and using an IN instruction with DX as the second\nparameter. These I/O instructions can be shortened by using an 8-bit\nport I/O in the instruction. The upper eight bits of the port address will\nbe 0 when 8-bit port I/O is used.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the current privilege level is larger (has less privilege) than\nIOPL and any of the corresponding I/O permission bits in TSS equals 1\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\n#GP(0) fault if any of the corresponding I/O permission bits in TSS\nequals 1\n\n\nINC  Increment by 1\n\nOpcode      Instruction        Clocks      Description\n\nFE  /0      INC r/m8                       Increment r/m byte by 1\nFF  /0      INC r/m16                      Increment r/m word by 1\nFF  /6      INC r/m32                      Increment r/m dword by 1\n40 + rw     INC r16                        Increment word register by 1\n40 + rd     INC r32                        Increment dword register by 1\n\n\nOperation\n\nDEST \u001b DEST + 1;\n\nDescription\n\nINC adds 1 to the operand. It does not change the carry flag. To affect\nthe carry flag, use the ADD instruction with a second operand of 1.\n\nFlags Affected\n\nOF, SF, ZF, AF, and PF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) if the operand is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nINS/INSB/INSW/INSD  Input from Port to String\n\nOpcode  Instruction    Clocks         Description\n\n6C      INS r/m8,DX    15,pm=9*/29**  Input byte from port DX into ES:(E)DI\n6D      INS r/m16,DX   15,pm=9*/29**  Input word from port DX into ES:(E)DI\n6D      INS r/m32,DX   15,pm=9*/29**  Input dword from port DX into ES:(E)DI\n6C      INSB           15,pm=9*/29**  Input byte from port DX into ES:(E)DI\n6D      INSW           15,pm=9*/29**  Input word from port DX into ES:(E)DI\n6D      INSD           15,pm=9*/29**  Input dword from port DX into ES:(E)DI\n\n\n\nNOTES:\n   *If CPL  IOPL\n  **If CPL > IOPL or if in virtual 8086 mode\n\n\nOperation\n\nIF AddressSize = 16\nTHEN use DI for dest-index;\nELSE (* AddressSize = 32 *)\n   use EDI for dest-index;\nFI;\nIF (PE = 1) AND ((VM = 1) OR (CPL > IOPL))\nTHEN (* Virtual 8086 mode, or protected mode with CPL > IOPL *)\n   IF NOT I-O-Permission (SRC, width(SRC))\n   THEN #GP(0);\n   FI;\nFI;\nIF byte type of instruction\nTHEN\n   ES:[dest-index] \u001b [DX]; (* Reads byte at DX from I/O address space *)\n   IF DF = 0 THEN IncDec \u001b 1 ELSE IncDec \u001b -1; FI;\nFI;\nIF OperandSize = 16\nTHEN\n   ES:[dest-index] \u001b [DX]; (* Reads word at DX from I/O address space *)\n   IF DF = 0 THEN IncDec \u001b 2 ELSE IncDec \u001b -2; FI;\nFI;\nIF OperandSize = 32\nTHEN\n   ES:[dest-index] \u001b [DX]; (* Reads dword at DX from I/O address space *)\n   IF DF = 0 THEN IncDec \u001b 4 ELSE IncDec \u001b -4; FI;\nFI;\ndest-index \u001b dest-index + IncDec;\n\nDescription\n\nINS transfers data from the input port numbered by the DX register to\nthe memory byte or word at ES:dest-index. The memory operand must\nbe addressable from ES; no segment override is possible. The destination\nregister is DI if the address-size attribute of the instruction is 16 bits,\nor EDI if the address-size attribute is 32 bits.\n\nINS does not allow the specification of the port number as an immediate\nvalue. The port must be addressed through the DX register value. Load\nthe correct value into DX before executing the INS instruction.\n\nThe destination address is determined by the contents of the destination\nindex register. Load the correct index into the destination index register\nbefore executing INS.\n\nAfter the transfer is made, DI or EDI advances automatically. If the\ndirection flag is 0 (CLD was executed), DI or EDI increments; if the\ndirection flag is 1 (STD was executed), DI or EDI decrements. DI\nincrements or decrements by 1 if a byte is input, by 2 if a word is input,\nor by 4 if a doubleword is input.\n\nINSB, INSW and INSD are synonyms of the byte, word, and doubleword\nINS instructions. INS can be preceded by the REP prefix for block input of\nCX bytes or words. Refer to the REP instruction for details of this\noperation.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if CPL is numerically greater than IOPL and any of the\ncorresponding I/O permission bits in TSS equals 1; #GP(0) if the\ndestination is in a nonwritable segment; #GP(0) for an illegal memory\noperand effective address in the CS, DS, ES, FS, or GS segments; #SS(0) for\nan illegal address in the SS segment; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\n#GP(0) fault if any of the corresponding I/O permission bits in TSS\nequals 1; #PF(fault-code) for a page fault\n\n\nINT/INTO  Call to Interrupt Procedure\n\n\nOpcode    Instruction  Clocks          Description\n\nCC        INT 3        33              Interrupt 3--trap to debugger\nCC        INT 3        pm=59           Interrupt 3--Protected Mode, same\n                                       privilege\nCC        INT 3        pm=99           Interrupt 3--Protected Mode, more\n                                       privilege\nCC        INT 3        pm=119          Interrupt 3--from V86 mode to PL 0\nCC        INT 3        ts              Interrupt 3--Protected Mode, via\n                                       task gate\nCD ib     INT imm8     37              Interrupt numbered by immediate\n                                       byte\nCD ib     INT imm8     pm=59           Interrupt--Protected Mode, same\n                                       privilege\nCD ib     INT imm8     pm=99           Interrupt--Protected Mode, more\n                                       privilege\nCD ib     INT imm8     pm=119          Interrupt--from V86 mode to PL 0\nCD ib     INT imm8     ts              Interrupt--Protected Mode, via task\n                                       gate\nCE        INTO         Fail:3,pm=3;\n                       Pass:35         Interrupt 4--if overflow flag is 1\nCE        INTO         pm=59           Interrupt 4--Protected Mode, same\n                                       privilege\nCE        INTO         pm=99           Interrupt 4--Protected Mode, more\n                                       privilege\nCE        INTO         pm=119          Interrupt 4--from V86 mode to PL 0\nCE        INTO         ts              Interrupt 4--Protected Mode, via\n                                       task gate\n\n\n\nNOTE:\n  Approximate values of ts are given by the following table:\n\n                            New Task\n\nOld Task       386 TSS       386 TSS       286 TSS\n               VM = 0        VM = 1\n\n386\nTSS VM=0         309           226           282\n\n386\nTSS VM=1         314           231           287\n\n286\nTSS              307           224           280\n\n\nOperation\n\n\nNOTE:\n  The following operational description applies not only to the\n  above instructions but also to external interrupts and exceptions.\n\n\nIF PE = 0\nTHEN GOTO REAL-ADDRESS-MODE;\nELSE GOTO PROTECTED-MODE;\nFI;\n\nREAL-ADDRESS-MODE:\n   Push (FLAGS);\n   IF \u001b 0; (* Clear interrupt flag *)\n   TF \u001b 0; (* Clear trap flag *)\n   Push(CS);\n   Push(IP);\n   (* No error codes are pushed *)\n   CS \u001b IDT[Interrupt number * 4].selector;\n   IP \u001b IDT[Interrupt number * 4].offset;\n\nPROTECTED-MODE:\n   Interrupt vector must be within IDT table limits,\n      else #GP(vector number * 8+2+EXT);\n   Descriptor AR byte must indicate interrupt gate, trap gate, or task gate,\n      else #GP(vector number * 8+2+EXT);\n   IF software interrupt (* i.e. caused by INT n, INT 3, or INTO *)\n   THEN\n      IF gate descriptor DPL < CPL\n      THEN #GP(vector number * 8+2+EXT);\n      FI;\n   FI;\n   Gate must be present, else #NP(vector number * 8+2+EXT);\n   IF trap gate OR interrupt gate\n   THEN GOTO TRAP-GATE-OR-INTERRUPT-GATE;\n   ELSE GOTO TASK-GATE;\n   FI;\n\nTRAP-GATE-OR-INTERRUPT-GATE:\n   Examine CS selector and descriptor given in the gate descriptor;\n   Selector must be non-null, else #GP (EXT);\n   Selector must be within its descriptor table limits\n      ELSE #GP(selector+EXT);\n   Descriptor AR byte must indicate code segment\n      ELSE #GP(selector + EXT);\n   Segment must be present, else #NP(selector+EXT);\n   IF code segment is non-conforming AND DPL < CPL\n   THEN GOTO INTERRUPT-TO-INNER-PRIVILEGE;\n   ELSE\n      IF code segment is conforming OR code segment DPL = CPL\n      THEN GOTO INTERRUPT-TO-SAME-PRIVILEGE-LEVEL;\n      ELSE #GP(CS selector + EXT);\n      FI;\n   FI;\n\nINTERRUPT-TO-INNER-PRIVILEGE:\n   Check selector and descriptor for new stack in current TSS;\n      Selector must be non-null, else #GP(EXT);\n      Selector index must be within its descriptor table limits\n         ELSE #TS(SS selector+EXT);\n      Selector's RPL must equal DPL of code segment, else #TS(SS\n         selector+EXT);\n      Stack segment DPL must equal DPL of code segment, else #TS(SS\n         selector+EXT);\n      Descriptor must indicate writable data segment, else #TS(SS\n         selector+EXT);\n      Segment must be present, else #SS(SS selector+EXT);\n   IF 32-bit gate\n   THEN New stack must have room for 20 bytes else #SS(0)\n   ELSE New stack must have room for 10 bytes else #SS(0)\n   FI;\n   Instruction pointer must be within CS segment boundaries else #GP(0);\n   Load new SS and eSP value from TSS;\n   IF 32-bit gate\n   THEN CS:EIP \u001b selector:offset from gate;\n   ELSE CS:IP \u001b selector:offset from gate;\n   FI;\n   Load CS descriptor into invisible portion of CS register;\n   Load SS descriptor into invisible portion of SS register;\n   IF 32-bit gate\n   THEN\n      Push (long pointer to old stack) (* 3 words padded to 4 *);\n      Push (EFLAGS);\n      Push (long pointer to return location) (* 3 words padded to 4*);\n   ELSE\n      Push (long pointer to old stack) (* 2 words *);\n      Push (FLAGS);\n      Push (long pointer to return location) (* 2 words *);\n   FI;\n   Set CPL to new code segment DPL;\n   Set RPL of CS to CPL;\n   IF interrupt gate THEN IF \u001b 0 (* interrupt flag to 0 (disabled) *); FI;\n   TF \u001b 0;\n   NT \u001b 0;\n\nINTERRUPT-FROM-V86-MODE:\n   TempEFlags \u001b EFLAGS;\n   VM \u001b 0;\n   TF \u001b 0;\n   IF service through Interrupt Gate THEN IF \u001b 0;\n   TempSS \u001b SS;\n   TempESP \u001b ESP;\n   SS \u001b TSS.SS0; (* Change to level 0 stack segment *)\n   ESP \u001b TSS.ESP0; (* Change to level 0 stack pointer *)\n   Push(GS); (* padded to two words *)\n   Push(FS); (* padded to two words *)\n   Push(DS); (* padded to two words *)\n   Push(ES); (* padded to two words *)\n   GS \u001b 0;\n   FS \u001b 0;\n   DS \u001b 0;\n   ES \u001b 0;\n   Push(TempSS); (* padded to two words *)\n   Push(TempESP);\n   Push(TempEFlags);\n   Push(CS); (* padded to two words *)\n   Push(EIP);\n   CS:EIP \u001b selector:offset from interrupt gate;\n   (* Starts execution of new routine in 80386 Protected Mode *)\n\nINTERRUPT-TO-SAME-PRIVILEGE-LEVEL:\n   IF 32-bit gate\n   THEN Current stack limits must allow pushing 10 bytes, else #SS(0);\n   ELSE Current stack limits must allow pushing 6 bytes, else #SS(0);\n   FI;\n   IF interrupt was caused by exception with error code\n   THEN Stack limits must allow push of two more bytes;\n   ELSE #SS(0);\n   FI;\n   Instruction pointer must be in CS limit, else #GP(0);\n   IF 32-bit gate\n   THEN\n      Push (EFLAGS);\n      Push (long pointer to return location); (* 3 words padded to 4 *)\n      CS:EIP \u001b selector:offset from gate;\n   ELSE (* 16-bit gate *)\n      Push (FLAGS);\n      Push (long pointer to return location); (* 2 words *)\n      CS:IP \u001b selector:offset from gate;\n   FI;\n   Load CS descriptor into invisible portion of CS register;\n   Set the RPL field of CS to CPL;\n   Push (error code); (* if any *)\n   IF interrupt gate THEN IF \u001b 0; FI;\n   TF \u001b 0;\n   NT \u001b 0;\n\nTASK-GATE:\n   Examine selector to TSS, given in task gate descriptor;\n      Must specify global in the local/global bit, else #TS(TSS selector);\n      Index must be within GDT limits, else #TS(TSS selector);\n      AR byte must specify available TSS (bottom bits 00001),\n         else #TS(TSS selector;\n      TSS must be present, else #NP(TSS selector);\n   SWITCH-TASKS with nesting to TSS;\n   IF interrupt was caused by fault with error code\n   THEN\n      Stack limits must allow push of two more bytes, else #SS(0);\n      Push error code onto stack;\n   FI;\n   Instruction pointer must be in CS limit, else #GP(0);\n\nDescription\n\nThe INT  instruction generates via software a call to an interrupt\nhandler. The immediate operand, from 0 to 255, gives the index number\ninto the Interrupt Descriptor Table (IDT) of the interrupt routine to be\ncalled. In Protected Mode, the IDT consists of an array of eight-byte\ndescriptors; the descriptor for the interrupt invoked must indicate an\ninterrupt, trap, or task gate. In Real Address Mode, the IDT is an array\nof four byte-long pointers. In Protected and Real Address Modes, the\nbase linear address of the IDT is defined by the contents of the IDTR.\n\nThe INTO conditional software instruction is identical to the INT\ninterrupt instruction except that the interrupt number is implicitly 4,\nand the interrupt is made only if the 80386 overflow flag is set.\n\nThe first 32 interrupts are reserved by Intel for system use. Some of\nthese interrupts are use for internally generated exceptions.\n\nINT n generally behaves like a far call except that the flags register is\npushed onto the stack before the return address. Interrupt procedures\nreturn via the IRET instruction, which pops the flags and return address\nfrom the stack.\n\nIn Real Address Mode, INT n pushes the flags, CS, and the return IP\nonto the stack, in that order, then jumps to the long pointer indexed by\nthe interrupt number.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP, #NP, #SS, and #TS as indicated under \"Operation\" above\n\nReal Address Mode Exceptions\n\nNone; if the SP or ESP = 1, 3, or 5 before executing INT or INTO,\nthe 80386 will shut down due to insufficient stack space\n\nVirtual 8086 Mode Exceptions\n\n#GP(0) fault if IOPL is less than 3, for INT  only, to permit emulation;\nInterrupt 3 (0CCH) generates Interrupt 3; INTO generates Interrupt 4\nif the overflow flag equals 1\n\n\nIRET/IRETD  Interrupt Return\n\nOpcode  Instruction  Clocks       Description\n\nCF      IRET         22,pm=38     Interrupt return (far return and pop\n                                  flags)\nCF      IRET         pm=82        Interrupt return to lesser privilege\nCF      IRET         ts           Interrupt return, different task (NT = 1)\nCF      IRETD        22,pm=38     Interrupt return (far return and pop\n                                  flags)\nCF      IRETD        pm=82        Interrupt return to lesser privilege\nCF      IRETD        pm=60        Interrupt return to V86 mode\nCF      IRETD        ts           Interrupt return, different task (NT = 1)\n\n\n\nNOTE:\n  Values of ts are given by the following table:\n\n                            New Task\n\nOld Task       386 TSS       386 TSS       286 TSS\n               VM = 0        VM = 1\n\n386\nTSS VM=0         275           224           271\n\n286\nTSS              265           214           232\n\n\nOperation\n\nIF PE = 0\nTHEN (* Real-address mode *)\n   IF OperandSize = 32 (* Instruction = IRETD *)\n   THEN EIP \u001b Pop();\n   ELSE (* Instruction = IRET *)\n      IP \u001b Pop();\n   FI;\n   CS \u001b Pop();\n   IF OperandSize = 32 (* Instruction = IRETD *)\n   THEN EFLAGS \u001b Pop();\n   ELSE (* Instruction = IRET *)\n      FLAGS \u001b Pop();\n   FI;\nELSE (* Protected mode *)\n   IF VM = 1\n   THEN #GP(0);\n   ELSE\n      IF NT = 1\n      THEN GOTO TASK-RETURN;\n      ELSE\n         IF VM = 1 in flags image on stack\n         THEN GO TO STACK-RETURN-TO-V86;\n         ELSE GOTO STACK-RETURN;\n         FI;\n      FI;\n   FI;\nFI;STACK-RETURN-TO-V86: (* Interrupted procedure was in V86 mode *)\n   IF return CS selector RPL < > 3\n   THEN #GP(Return selector);\n   FI;\n   IF top 36 bytes of stack not within limits\n   THEN #SS(0);\n   FI;\n   Examine return CS selector and associated descriptor:\n      IF selector is null, THEN #GP(0); FI;\n      IF selector index not within its descriptor table limits;\n      THEN #GP(Return selector);\n      FI;\n      IF AR byte does not indicate code segment\n      THEN #GP(Return selector);\n      FI;\n      IF code segment DPL not = 3;\n      THEN #GP(Return selector);\n      FI;\n      IF code segment not present\n      THEN #NP(Return selector);\n      FI;\n\n   Examine return SS selector and associated descriptor:\n      IF selector is null THEN #GP(0); FI;\n      IF selector index not within its descriptor table limits\n      THEN #GP(SS selector);\n      FI;\n      IF selector RPL not = RPL of return CS selector\n      THEN #GP(SS selector);\n      FI;\n      IF AR byte does not indicate a writable data segment\n      THEN #GP(SS selector);\n      FI;\n      IF stack segment DPL not = RPL of return CS selector\n      THEN #GP(SS selector);\n      FI;\n      IF SS not present\n      THEN #NP(SS selector);\n      FI;\n\n   IF instruction pointer not within code segment limit  THEN #GP(0);\n   FI;\n   EFLAGS \u001b SS:[eSP + 8]; (* Sets VM in interrupted routine *)\n   EIP \u001b Pop();\n   CS \u001b Pop(); (* CS behaves as in 8086, due to VM = 1 *)\n   throwaway \u001b Pop(); (* pop away EFLAGS already read *)\n   ES \u001b Pop(); (* pop 2 words; throw away high-order word *)\n   DS \u001b Pop(); (* pop 2 words; throw away high-order word *)\n   FS \u001b Pop(); (* pop 2 words; throw away high-order word *)\n   GS \u001b Pop(); (* pop 2 words; throw away high-order word *)\n   IF CS.RPL > CPL\n   THEN\n      TempESP \u001b Pop();\n      TempSS \u001b Pop();\n      SS:ESP \u001b TempSS:TempESP;\n   FI;\n\n   (* Resume execution in Virtual 8086 mode *)\n\nTASK-RETURN:\n   Examine Back Link Selector in TSS addressed by the current task\n      register:\n      Must specify global in the local/global bit, else #TS(new TSS\n         selector);\n      Index must be within GDT limits, else #TS(new TSS selector);\n      AR byte must specify TSS, else #TS(new TSS selector);\n      New TSS must be busy, else #TS(new TSS selector);\n      TSS must be present, else #NP(new TSS selector);\n   SWITCH-TASKS without nesting to TSS specified by back link selector;\n   Mark the task just abandoned as NOT BUSY;\n   Instruction pointer must be within code segment limit ELSE #GP(0);\n\nSTACK-RETURN:\n   IF OperandSize=32\n   THEN Third word on stack must be within stack limits, else #SS(0);\n   ELSE Second word on stack must be within stack limits, else #SS(0);\n   FI;\n   Return CS selector RPL must be  CPL, else #GP(Return selector);\n   IF return selector RPL = CPL\n   THEN GOTO RETURN-SAME-LEVEL;\n   ELSE GOTO RETURN-OUTER-LEVEL;\n   FI;\n\nRETURN-SAME-LEVEL:\n   IF OperandSize=32\n   THEN\n      Top 12 bytes on stack must be within limits, else #SS(0);\n      Return CS selector (at eSP+4) must be non-null, else #GP(0);\n   ELSE\n      Top 6 bytes on stack must be within limits, else #SS(0);\n      Return CS selector (at eSP+2) must be non-null, else #GP(0);\n   FI;\n   Selector index must be within its descriptor table limits, else #GP\n      (Return selector);\n   AR byte must indicate code segment, else #GP(Return selector);\n   IF non-conforming\n   THEN code segment DPL must = CPL;\n   ELSE #GP(Return selector);\n   FI;\n   IF conforming\n   THEN code segment DPL must be  CPL, else #GP(Return selector);\n   Segment must be present, else #NP(Return selector);\n   Instruction pointer must be within code segment boundaries, else #GP(0);\n   FI;\n   IF OperandSize=32\n   THEN\n      Load CS:EIP from stack;\n      Load CS-register with new code segment descriptor;\n      Load EFLAGS with third doubleword from stack;\n      Increment eSP by 12;\n   ELSE\n      Load CS-register with new code segment descriptor;\n      Load FLAGS with third word on stack;\n      Increment eSP by 6;\n   FI;\n\nRETURN-OUTER-LEVEL:\n   IF OperandSize=32\n   THEN Top 20 bytes on stack must be within limits, else #SS(0);\n   ELSE Top 10 bytes on stack must be within limits, else #SS(0);\n   FI;\n   Examine return CS selector and associated descriptor:\n      Selector must be non-null, else #GP(0);\n      Selector index must be within its descriptor table limits;\n         ELSE #GP(Return selector);\n      AR byte must indicate code segment, else #GP(Return selector);\n      IF non-conforming\n      THEN code segment DPL must = CS selector RPL;\n      ELSE #GP(Return selector);\n      FI;\n      IF conforming\n      THEN code segment DPL must be > CPL;\n      ELSE #GP(Return selector);\n      FI;\n      Segment must be present, else #NP(Return selector);\n   Examine return SS selector and associated descriptor:\n      Selector must be non-null, else #GP(0);\n      Selector index must be within its descriptor table limits\n         ELSE #GP(SS selector);\n      Selector RPL must equal the RPL of the return CS selector\n         ELSE #GP(SS selector);\n      AR byte must indicate a writable data segment, else #GP(SS selector);\n      Stack segment DPL must equal the RPL of the return CS selector\n         ELSE #GP(SS selector);\n      SS must be present, else #NP(SS selector);\n\n   Instruction pointer must be within code segment limit ELSE #GP(0);\n   IF OperandSize=32\n   THEN\n      Load CS:EIP from stack;\n      Load EFLAGS with values at (eSP+8);\n   ELSE\n      Load CS:IP from stack;\n      Load FLAGS with values at (eSP+4);\n   FI;\n   Load SS:eSP from stack;\n   Set CPL to the RPL of the return CS selector;\n   Load the CS register with the CS descriptor;\n   Load the SS register with the SS descriptor;\n   FOR each of ES, FS, GS, and DS\n   DO;\n      IF the current value of the register is not valid for the outer level;\n      THEN zero the register and clear the valid flag;\n      FI;\n      To be valid, the register setting must satisfy the following\n         properties:\n         Selector index must be within descriptor table limits;\n         AR byte must indicate data or readable code segment;\n         IF segment is data or non-conforming code,\n         THEN DPL must be  CPL, or DPL must be  RPL;\n   OD;\n\nDescription\n\nIn Real Address Mode, IRET pops the instruction pointer, CS, and the\nflags register from the stack and resumes the interrupted routine.\n\nIn Protected Mode, the action of IRET depends on the setting of the\nnested task flag (NT) bit in the flag register. When popping the new\nflag image from the stack, the IOPL bits in the flag register are changed\nonly when CPL equals 0.\n\nIf NT equals 0, IRET returns from an interrupt procedure without a\ntask switch. The code returned to must be equally or less privileged than\nthe interrupt routine (as indicated by the RPL bits of the CS selector\npopped from the stack). If the destination code is less privileged, IRET\nalso pops the stack pointer and SS from the stack.\n\nIf NT equals 1, IRET reverses the operation of a CALL or INT that\ncaused a task switch. The updated state of the task executing IRET is\nsaved in its task state segment. If the task is reentered later, the code\nthat follows IRET is executed.\n\nFlags Affected\n\nAll; the flags register is popped from stack\n\nProtected Mode Exceptions\n\n#GP, #NP, or #SS, as indicated under \"Operation\" above\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand being popped lies beyond address\n0FFFFH\n\nVirtual 8086 Mode Exceptions\n\n#GP(0) fault if IOPL is less than 3, to permit emulation\n\n\nJcc  Jump if Condition is Met\n\n\nOpcode         Instruction       Clocks   Description\n\n77  cb         JA rel8           7+m,3    Jump short if above (CF=0 and\n                                          ZF=0)\n73  cb         JAE rel8          7+m,3    Jump short if above or equal\n                                          (CF=0)\n72  cb         JB rel8           7+m,3    Jump short if below (CF=1)\n76  cb         JBE rel8          7+m,3    Jump short if below or equal\n                                          (CF=1 or ZF=1)\n72  cb         JC rel8           7+m,3    Jump short if carry (CF=1)\nE3  cb         JCXZ rel8         9+m,5    Jump short if CX register is 0\nE3  cb         JECXZ rel8        9+m,5    Jump short if ECX register is 0\n74  cb         JE rel8           7+m,3    Jump short if equal (ZF=1)\n74  cb         JZ rel8           7+m,3    Jump short if 0 (ZF=1)\n7F  cb         JG rel8           7+m,3    Jump short if greater (ZF=0 and\n                                          SF=OF)\n7D  cb         JGE rel8          7+m,3    Jump short if greater or equal\n                                          (SF=OF)\n7C  cb         JL rel8           7+m,3    Jump short if less (SF<>OF)\n7E  cb         JLE rel8          7+m,3    Jump short if less or equal\n                                          (ZF=1 and SF<>OF)\n76  cb         JNA rel8          7+m,3    Jump short if not above (CF=1 or\n                                          ZF=1)\n72  cb         JNAE rel8         7+m,3    Jump short if not above or equal\n                                          (CF=1)\n73  cb         JNB rel8          7+m,3    Jump short if not below (CF=0)\n77  cb         JNBE rel8         7+m,3    Jump short if not below or equal\n                                          (CF=0 and ZF=0)\n73  cb         JNC rel8          7+m,3    Jump short if not carry (CF=0)\n75  cb         JNE rel8          7+m,3    Jump short if not equal (ZF=0)\n7E  cb         JNG rel8          7+m,3    Jump short if not greater (ZF=1\n                                          or SF<>OF)\n7C  cb         JNGE rel8         7+m,3    Jump short if not greater or\n                                          equal (SF<>OF)\n7D  cb         JNL rel8          7+m,3    Jump short if not less (SF=OF)\n7F  cb         JNLE rel8         7+m,3    Jump short if not less or equal\n                                          (ZF=0 and SF=OF)\n71  cb         JNO rel8          7+m,3    Jump short if not overflow\n                                          (OF=0)\n7B  cb         JNP rel8          7+m,3    Jump short if not parity (PF=0)\n79  cb         JNS rel8          7+m,3    Jump short if not sign (SF=0)\n75  cb         JNZ rel8          7+m,3    Jump short if not zero (ZF=0)\n70  cb         JO rel8           7+m,3    Jump short if overflow (OF=1)\n7A  cb         JP rel8           7+m,3    Jump short if parity (PF=1)\n7A  cb         JPE rel8          7+m,3    Jump short if parity even (PF=1)\n7B  cb         JPO rel8          7+m,3    Jump short if parity odd (PF=0)\n78  cb         JS rel8           7+m,3    Jump short if sign (SF=1)\n74  cb         JZ rel8           7+m,3    Jump short if zero (ZF = 1)\n0F  87 cw/cd   JA rel16/32       7+m,3    Jump near if above (CF=0 and\n                                          ZF=0)\n0F  83 cw/cd   JAE rel16/32      7+m,3    Jump near if above or equal\n                                          (CF=0)\n0F  82 cw/cd   JB rel16/32       7+m,3    Jump near if below (CF=1)\n0F  86 cw/cd   JBE rel16/32      7+m,3    Jump near if below or equal\n                                          (CF=1 or ZF=1)\n0F  82 cw/cd   JC rel16/32       7+m,3    Jump near if carry (CF=1)\n0F  84 cw/cd   JE rel16/32       7+m,3    Jump near if equal (ZF=1)\n0F  84 cw/cd   JZ rel16/32       7+m,3    Jump near if 0 (ZF=1)\n0F  8F cw/cd   JG rel16/32       7+m,3    Jump near if greater (ZF=0 and\n                                          SF=OF)\n0F  8D cw/cd   JGE rel16/32      7+m,3    Jump near if greater or equal\n                                          (SF=OF)\n0F  8C cw/cd   JL rel16/32       7+m,3    Jump near if less (SF<>OF)\n0F  8E cw/cd   JLE rel16/32      7+m,3    Jump near if less or equal (ZF=1\n                                          and SF<>OF)\n0F  86 cw/cd   JNA rel16/32      7+m,3    Jump near if not above (CF=1 or\n                                          ZF=1)\n0F  82 cw/cd   JNAE rel16/32     7+m,3    Jump near if not above or equal\n                                          (CF=1)\n0F  83 cw/cd   JNB rel16/32      7+m,3    Jump near if not below (CF=0)\n0F  87 cw/cd   JNBE rel16/32     7+m,3    Jump near if not below or equal\n                                          (CF=0 and ZF=0)\n0F  83 cw/cd   JNC rel16/32      7+m,3    Jump near if not carry (CF=0)\n0F  85 cw/cd   JNE rel16/32      7+m,3    Jump near if not equal (ZF=0)\n0F  8E cw/cd   JNG rel16/32      7+m,3    Jump near if not greater (ZF=1\n                                          or SF<>OF)\n0F  8C cw/cd   JNGE rel16/32     7+m,3    Jump near if not greater or\n                                          equal (SF<>OF)\n0F  8D cw/cd   JNL rel16/32      7+m,3    Jump near if not less (SF=OF)\n0F  8F cw/cd   JNLE rel16/32     7+m,3    Jump near if not less or equal\n                                          (ZF=0 and SF=OF)\n0F  81 cw/cd   JNO rel16/32      7+m,3    Jump near if not overflow (OF=0)\n0F  8B cw/cd   JNP rel16/32      7+m,3    Jump near if not parity (PF=0)\n0F  89 cw/cd   JNS rel16/32      7+m,3    Jump near if not sign (SF=0)\n0F  85 cw/cd   JNZ rel16/32      7+m,3    Jump near if not zero (ZF=0)\n0F  80 cw/cd   JO rel16/32       7+m,3    Jump near if overflow (OF=1)\n0F  8A cw/cd   JP rel16/32       7+m,3    Jump near if parity (PF=1)\n0F  8A cw/cd   JPE rel16/32      7+m,3    Jump near if parity even (PF=1)\n0F  8B cw/cd   JPO rel16/32      7+m,3    Jump near if parity odd (PF=0)\n0F  88 cw/cd   JS rel16/32       7+m,3    Jump near if sign (SF=1)\n0F  84 cw/cd   JZ rel16/32       7+m,3    Jump near if 0 (ZF=1)\n\n\n\nNOTES:\n  The first clock count is for the true condition (branch taken); the\n  second clock count is for the false condition (branch not taken). rel16/32\n  indicates that these instructions map to two; one with a 16-bit relative\n  displacement, the other with a 32-bit relative displacement, depending on\n  the operand-size attribute of the instruction.\n\n\nOperation\n\nIF condition\nTHEN\n   EIP \u001b EIP + SignExtend(rel8/16/32);\n   IF OperandSize = 16\n   THEN EIP \u001b EIP AND 0000FFFFH;\n   FI;\nFI;\n\nDescription\n\nConditional jumps (except JCXZ) test the flags which have been set by\na previous instruction. The conditions for each mnemonic are given in\nparentheses after each description above. The terms \"less\" and \"greater\"\nare used for comparisons of signed integers; \"above\" and \"below\" are\nused for unsigned integers.\n\nIf the given condition is true, a jump is made to the location provided as\nthe operand. Instruction coding is most efficient when the target for the\nconditional jump is in the current code segment and within -128 to\n+127 bytes of the next instruction's first byte. The jump can also target\n-32768 thru +32767 (segment size attribute 16) or -2^(31) thru +2^(31) -1\n(segment size attribute 32) relative to the next instruction's first byte.\nWhen the target for the conditional jump is in a different segment, use\nthe opposite case of the jump instruction (i.e., JE and JNE), and then\naccess the target with an unconditional far jump to the other segment.\nFor example, you cannot code\n\nJZ FARLABEL;\n\nYou must instead code\n\n   JNZ BEYOND;\n   JMP FARLABEL;\nBEYOND:\n\nBecause there can be several ways to interpret a particular state of the\nflags, ASM386 provides more than one mnemonic for most of the\nconditional jump opcodes. For example, if you compared two characters in\nAX and want to jump if they are equal, use JE; or, if you ANDed AX\nwith a bit field mask and only want to jump if the result is 0, use JZ, a\nsynonym for JE.\n\nJCXZ differs from other conditional jumps because it tests the contents of\nthe CX or ECX register for 0, not the flags. JCXZ is useful at the beginning\nof a conditional loop that terminates with a conditional loop instruction\n(such as LOOPNE TARGET LABEL. The JCXZ prevents entering the loop with CX or\nECX equal to zero, which would cause the loop to execute 64K or 32G times\ninstead of zero times.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the offset jumped to is beyond the limits of the code segment\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nJMP  Jump\n\n\nOpcode    Instruction     Clocks          Description\n\nEB  cb    JMP rel8        7+m             Jump short\nE9  cw    JMP rel16       7+m             Jump near, displacement relative\n                                          to next instruction\nFF  /4    JMP r/m16       7+m/10+m        Jump near indirect\nEA  cd    JMP ptr16:16    12+m,pm=27+m    Jump intersegment, 4-byte\n                                          immediate address\nEA  cd    JMP ptr16:16    pm=45+m         Jump to call gate, same\n                                          privilege\nEA  cd    JMP ptr16:16    ts              Jump via task state segment\nEA  cd    JMP ptr16:16    ts              Jump via task gate\nFF  /5    JMP m16:16      43+m,pm=31+m    Jump r/m16:16 indirect and\n                                          intersegment\nFF  /5    JMP m16:16      pm=49+m         Jump to call gate, same\n                                          privilege\nFF  /5    JMP m16:16      5 + ts          Jump via task state segment\nFF  /5    JMP m16:16      5 + ts          Jump via task gate\nE9  cd    JMP rel32       7+m             Jump near, displacement relative\n                                          to next instruction\nFF  /4    JMP r/m32       7+m,10+m        Jump near, indirect\nEA  cp    JMP ptr16:32    12+m,pm=27+m    Jump intersegment, 6-byte\n                                          immediate address\nEA  cp    JMP ptr16:32    pm=45+m         Jump to call gate, same\n                                          privilege\nEA  cp    JMP ptr16:32    ts              Jump via task state segment\nEA  cp    JMP ptr16:32    ts              Jump via task gate\nFF  /5    JMP m16:32      43+m,pm=31+m    Jump intersegment, address at\n                                          r/m dword\nFF  /5    JMP m16:32      pm=49+m         Jump to call gate, same\n                                          privilege\nFF  /5    JMP m16:32      5 + ts          Jump via task state segment\nFF  /5    JMP m16:32      5 + ts          Jump via task gate\n\n\n\nNOTE:\nValues of ts are given by the following table:\n\n                               New Task\n\n                386 TSS       386 TASK       286 TSS\n                VM = 0        VM = 1\n\nOld Task                   Via Task Gate?\n\n                N     Y       N      Y       N     Y\n386\nTSS VM=0       303   312     220    229     276   285\n\n286\nTSS            301   310     218    227     274   283\n\n\nOperation\n\nIF instruction = relative JMP\n   (* i.e. operand is rel8, rel16, or rel32 *)\nTHEN\n   EIP \u001b EIP + rel8/16/32;\n   IF OperandSize = 16\n   THEN EIP \u001b EIP AND 0000FFFFH;\n   FI;\nFI;\nIF instruction = near indirect JMP\n   (* i.e. operand is r/m16 or r/m32 *)\nTHEN\n   IF OperandSize = 16\n   THEN\n      EIP \u001b [r/m16] AND 0000FFFFH;\n   ELSE (* OperandSize = 32 *)\n      EIP \u001b [r/m32];\n   FI;\nFI;\n\nIF (PE = 0 OR (PE = 1 AND VM = 1)) (* real mode or V86 mode *)\n   AND instruction = far JMP\n   (* i.e., operand type is m16:16, m16:32, ptr16:16, ptr16:32 *)\nTHEN GOTO REAL-OR-V86-MODE;\n   IF operand type = m16:16 or m16:32\n   THEN (* indirect *)\n      IF OperandSize = 16\n      THEN\n         CS:IP \u001b [m16:16];\n         EIP \u001b EIP AND 0000FFFFH; (* clear upper 16 bits *)\n      ELSE (* OperandSize = 32 *)\n         CS:EIP \u001b [m16:32];\n      FI;\n   FI;\n   IF operand type = ptr16:16 or ptr16:32\n   THEN\n      IF OperandSize = 16\n      THEN\n         CS:IP \u001b ptr16:16;\n         EIP \u001b EIP AND 0000FFFFH; (* clear upper 16 bits *)\n      ELSE (* OperandSize = 32 *)\n         CS:EIP \u001b ptr16:32;\n      FI;\n   FI;\nFI;\n\nIF (PE = 1 AND VM = 0) (* Protected mode, not V86 mode *)\n   AND instruction = far JMP\nTHEN\n   IF operand type = m16:16 or m16:32\n   THEN (* indirect *)\n      check access of EA dword;\n      #GP(0) or #SS(0) IF limit violation;\n   FI;\n   Destination selector is not null ELSE #GP(0)\n   Destination selector index is within its descriptor table limits ELSE\n#GP(selector)\n   Depending on AR byte of destination descriptor:\n      GOTO CONFORMING-CODE-SEGMENT;\n      GOTO NONCONFORMING-CODE-SEGMENT;\n      GOTO CALL-GATE;\n      GOTO TASK-GATE;\n      GOTO TASK-STATE-SEGMENT;\n   ELSE #GP(selector); (* illegal AR byte in descriptor *)\nFI;\n\nCONFORMING-CODE-SEGMENT:\n   Descriptor DPL must be  CPL ELSE #GP(selector);\n   Segment must be present ELSE #NP(selector);\n   Instruction pointer must be within code-segment limit ELSE #GP(0);\n   IF OperandSize = 32\n   THEN Load CS:EIP from destination pointer;\n   ELSE Load CS:IP from destination pointer;\n   FI;\n   Load CS register with new segment descriptor;\n\nNONCONFORMING-CODE-SEGMENT:\n   RPL of destination selector must be  CPL ELSE #GP(selector);\n   Descriptor DPL must be = CPL ELSE #GP(selector);\n   Segment must be present ELSE # NP(selector);\n   Instruction pointer must be within code-segment limit ELSE #GP(0);\n   IF OperandSize = 32\n   THEN Load CS:EIP from destination pointer;\n   ELSE Load CS:IP from destination pointer;\n   FI;\n   Load CS register with new segment descriptor;\n   Set RPL field of CS register to CPL;\n\nCALL-GATE:\n   Descriptor DPL must be  CPL ELSE #GP(gate selector);\n   Descriptor DPL must be  gate selector RPL ELSE #GP(gate selector);\n   Gate must be present ELSE #NP(gate selector);\n   Examine selector to code segment given in call gate descriptor:\n      Selector must not be null ELSE #GP(0);\n      Selector must be within its descriptor table limits ELSE\n         #GP(CS selector);\n      Descriptor AR byte must indicate code segment\n         ELSE #GP(CS selector);\n      IF non-conforming\n      THEN code-segment descriptor, DPL must = CPL\n      ELSE #GP(CS selector);\n      FI;\n      IF conforming\n      THEN code-segment descriptor DPL must be  CPL;\n      ELSE #GP(CS selector);\n      Code segment must be present ELSE #NP(CS selector);\n      Instruction pointer must be within code-segment limit ELSE #GP(0);\n      IF OperandSize = 32\n      THEN Load CS:EIP from call gate;\n      ELSE Load CS:IP from call gate;\n      FI;\n   Load CS register with new code-segment descriptor;\n   Set RPL of CS to CPL\n\nTASK-GATE:\n   Gate descriptor DPL must be  CPL ELSE #GP(gate selector);\n   Gate descriptor DPL must be  gate selector RPL ELSE #GP(gate\n     selector);\n   Task Gate must be present ELSE #NP(gate selector);\n   Examine selector to TSS, given in Task Gate descriptor:\n   Must specify global in the local/global bit ELSE #GP(TSS selector);\n   Index must be within GDT limits ELSE #GP(TSS selector);\n   Descriptor AR byte must specify available TSS (bottom bits 00001);\n      ELSE #GP(TSS selector);\n   Task State Segment must be present ELSE #NP(TSS selector);\nSWITCH-TASKS (without nesting) to TSS;\nInstruction pointer must be within code-segment limit ELSE #GP(0);\n\nTASK-STATE-SEGMENT:\n   TSS DPL must be  CPL ELSE #GP(TSS selector);\n   TSS DPL must be  TSS selector RPL ELSE #GP(TSS selector);\n   Descriptor AR byte must specify available TSS (bottom bits 00001)\n      ELSE #GP(TSS selector);\n   Task State Segment must be present ELSE #NP(TSS selector);\n   SWITCH-TASKS (without nesting) to TSS;\n   Instruction pointer must be within code-segment limit ELSE #GP(0);\n\nDescription\n\nThe JMP instruction transfers control to a different point in the\ninstruction stream without recording return information.\n\nThe action of the various forms of the instruction are shown below.\n\nJumps with destinations of type r/m16, r/m32, rel16, and rel32 are near\njumps and do not involve changing the segment register value.\n\nThe JMP rel16 and JMP rel32 forms of the instruction add an offset to\nthe address of the instruction following the JMP to determine the\ndestination. The rel16 form is used when the instruction's operand-size\nattribute is 16 bits (segment size attribute 16 only); rel32 is used when\nthe operand-size attribute is 32 bits (segment size attribute 32 only). The\nresult is stored in the 32-bit EIP register. With rel16, the upper 16 bits\nof EIP are cleared, which results in an offset whose value does not exceed\n16 bits.\n\nJMP r/m16 and JMP r/m32 specifies a register or memory location from which\nthe absolute offset from the procedure is fetched. The offset fetched from\nr/m is 32 bits for an operand-size attribute of 32 bits (r/m32), or 16 bits\nfor an operand-size attribute of 16 bits (r/m16).\n\nThe JMP ptr16:16 and ptr16:32 forms of the instruction use a four-byte\nor six-byte operand as a long pointer to the destination. The JMP\nand  forms fetch the long pointer from the memory location\nspecified (indirection). In Real Address Mode or Virtual 8086 Mode,\nthe long pointer provides 16 bits for the CS register and 16 or 32 bits\nfor the EIP register (depending on the operand-size attribute). In\nProtected Mode, both long pointer forms consult the Access Rights (AR)\nbyte in the descriptor indexed by the selector part of the long pointer.\n\nDepending on the value of the AR byte, the jump will perform one of\nthe following types of control transfers:\n\n    A jump to a code segment at the same privilege level\n    A task switch\n\nFor more information on protected mode control transfers, refer to\nChapter 6 and Chapter 7.\n\nFlags Affected\n\nAll if a task switch takes place; none if no task switch occurs\n\nProtected Mode Exceptions\n\nFar jumps: #GP, #NP, #SS, and #TS, as indicated in the list above.\n\nNear direct jumps: #GP(0) if procedure location is beyond the code\nsegment limits.\n\nNear indirect jumps: #GP(0) for an illegal memory operand effective\naddress in the CS, DS, ES, FS, or GS segments: #SS(0) for an illegal\naddress in the SS segment; #GP if the indirect offset obtained is beyond\nthe code segment limits; #PF(fault-code) for a page fault.\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would be outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as under Real Address Mode; #PF(fault-code) for a\npage fault\n\n\nLAHF  Load Flags into AH Register\n\nOpcode  Instruction   Clocks   Description\n\n9F      LAHF          2        Load: AH = flags SF ZF xx AF xx PF xx CF\n\n\nOperation\n\nAH \u001b SF:ZF:xx:AF:xx:PF:xx:CF;\n\nDescription\n\nLAHF transfers the low byte of the flags word to AH. The bits, from\nMSB to LSB, are sign, zero, indeterminate, auxiliary, carry,\nindeterminate, parity, indeterminate, and carry.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nLAR  Load Access Rights Byte\n\nOpcode        Instruction      Clocks      Description\n\n0F  02 /r     LAR r16,r/m16    pm=15/16    r16 \u001b r/m16 masked by FF00\n0F  02 /r     LAR r32,r/m32    pm=15/16    r32 \u001b r/m32 masked by 00FxFF00\n\n\nDescription\n\nThe LAR instruction stores a marked form of the second doubleword of\nthe descriptor for the source selector if the selector is visible at the\nCPL (modified by the selector's RPL) and is a valid descriptor type. The\ndestination register is loaded with the high-order doubleword of the\ndescriptor masked by 00FxFF00, and ZF is set to 1. The x indicates that the\nfour bits corresponding to the upper four bits of the limit are undefined in\nthe value loaded by LAR. If the selector is invisible or of the wrong type,\nZF is cleared.\n\nIf the 32-bit operand size is specified, the entire 32-bit value is loaded\ninto the 32-bit destination register. If the 16-bit operand size is\nspecified, the lower 16-bits of this value are stored in the 16-bit\ndestination register.\n\nAll code and data segment descriptors are valid for LAR.\n\nThe valid special segment and gate descriptor types for LAR are given\nin the following table:\n\nType   Name                     Valid/Invalid\n\n  0    Invalid                  Invalid\n  1    Available 80286 TSS      Valid\n  2    LDT                      Valid\n  3    Busy 80286 TSS           Valid\n  4    80286 call gate          Valid\n  5    80286/80386 task gate    Valid\n  6    80286 trap gate          Valid\n  7    80286 interrupt gate     Valid\n  8    Invalid                  Invalid\n  9    Available 80386 TSS      Valid\n  A    Invalid                  Invalid\n  B    Busy 80386 TSS           Valid\n  C    80386 call gate          Valid\n  D    Invalid                  Invalid\n  E    80386 trap gate          Valid\n  F    80386 interrupt gate     Valid\n\nFlags Affected\n\nZF as described above\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 6; LAR is unrecognized in Real Address Mode\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode\n\n\nLEA  Load Effective Address\n\nOpcode  Instruction  Clocks  Description\n\n8D  /r  LEA r16,m    2       Store effective address for m in register r16\n8D  /r  LEA r32,m    2       Store effective address for m in register r32\n8D  /r  LEA r16,m    2       Store effective address for m in register r16\n8D  /r  LEA r32,m    2       Store effective address for m in register r32\n\n\nOperation\n\nIF OperandSize = 16 AND AddressSize = 16\nTHEN r16 \u001b Addr(m);\nELSE\n   IF OperandSize = 16 AND AddressSize = 32\n   THEN\n      r16 \u001b Truncate_to_16bits(Addr(m));   (* 32-bit address *)\n   ELSE\n      IF OperandSize = 32 AND AddressSize = 16\n      THEN\n         r32 \u001b Truncate_to_16bits(Addr(m));\n      ELSE\n         IF OperandSize = 32 AND AddressSize = 32\n         THEN  r32 \u001b Addr(m);\n         FI;\n      FI;\n   FI;\nFI;\n\nDescription\n\nLEA calculates the effective address (offset part) and stores it in the\nspecified register. The operand-size attribute of the instruction\n(represented by OperandSize in the algorithm under \"Operation\" above) is\ndetermined by the chosen register. The address-size attribute (represented\nby AddressSize) is determined by the USE attribute of the segment containing\nthe second operand. The address-size and operand-size attributes affect the\naction performed by LEA, as follows:\n\nOperand Size  Address Size  Action Performed\n\n    16            16        16-bit effective address is calculated and\n                            stored in requested 16-bit register\n                            destination.\n\n    16            32        32-bit effective address is calculated. The\n                            lower 16 bits of the address are stored in\n                            the requested 16-bit register destination.\n\n    32            16        16-bit effective address is calculated. The\n                            16-bit address is zero-extended and stored\n                            in the requested 32-bit register destination.\n\n    32            32        32-bit effective address is calculated and\n                            stored in the requested 32-bit register\n                            destination.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#UD if the second operand is a register\n\nReal Address Mode Exceptions\n\nInterrupt 6 if the second operand is a register\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode\n\n\nLEAVE  High Level Procedure Exit\n\nOpcode  Instruction  Clocks  Description\n\nC9      LEAVE        4       Set SP to BP, then pop BP\nC9      LEAVE        4       Set ESP to EBP, then pop EBP\n\n\nOperation\n\nIF StackAddrSize = 16\nTHEN\n   SP \u001b BP;\nELSE (* StackAddrSize = 32 *)\n   ESP \u001b EBP;\nFI;\nIF OperandSize = 16\nTHEN\n   BP \u001b Pop();\nELSE (* OperandSize = 32 *)\n   EBP \u001b Pop();\nFI;\n\nDescription\n\nLEAVE reverses the actions of the ENTER instruction. By copying the\nframe pointer to the stack pointer, LEAVE releases the stack space used\nby a procedure for its local variables. The old frame pointer is popped\ninto BP or EBP, restoring the caller's frame. A subsequent RET\ninstruction removes any arguments pushed onto the stack of the exiting\nprocedure.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#SS(0) if BP does not point to a location within the limits of the current\nstack segment\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode\n\n\nLGDT/LIDT  Load Global/Interrupt Descriptor Table Register\n\nOpcode       Instruction      Clocks        Description\n\n0F  01 /2    LGDT m16&32      11            Load m into GDTR\n0F  01 /3    LIDT m16&32      11            Load m into IDTR\n\n\nOperation\n\nIF instruction = LIDT\nTHEN\n   IF OperandSize = 16\n   THEN IDTR.Limit:Base \u001b m16:24 (* 24 bits of base loaded *)\n   ELSE IDTR.Limit:Base \u001b m16:32\n   FI;\nELSE (* instruction = LGDT *)\n   IF OperandSize = 16\n   THEN GDTR.Limit:Base \u001b m16:24 (* 24 bits of base loaded *)\n   ELSE GDTR.Limit:Base \u001b m16:32;\n   FI;\nFI;\n\nDescription\n\nThe LGDT and LIDT instructions load a linear base address and limit\nvalue from a six-byte data operand in memory into the GDTR or IDTR,\nrespectively. If a 16-bit operand is used with LGDT or LIDT, the\nregister is loaded with a 16-bit limit and a 24-bit base, and the\nhigh-order eight bits of the six-byte data operand are not used. If a 32-bit\noperand is used, a 16-bit limit and a 32-bit base is loaded; the high-order\neight bits of the six-byte operand are used as high-order base address bits.\n\nThe SGDT and SIDT instructions always store into all 48 bits of the\nsix-byte data operand. With the 80286, the upper eight bits are undefined\nafter SGDT or SIDT is executed. With the 80386, the upper eight bits\nare written with the high-order eight address bits, for both a 16-bit\noperand and a 32-bit operand. If LGDT or LIDT is used with a 16-bit\noperand to load the register stored by SGDT or SIDT, the upper eight\nbits are stored as zeros.\n\nLGDT and LIDT appear in operating system software; they are not used\nin application programs. They are the only instructions that directly load\na linear address (i.e., not a segment relative address) in 80386 Protected\nMode.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the current privilege level is not 0; #UD if the source operand\nis a register; #GP(0) for an illegal memory operand effective address in\nthe CS, DS, ES, FS, or GS segments; #SS(0) for an illegal address in\nthe SS segment; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH; Interrupt 6 if the source operand is a\nregister\n\n\nNote:\n  These instructions are valid in Real Address Mode to allow\n  power-up initialization for Protected Mode\n\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nLGS/LSS/LDS/LES/LFS  Load Full Pointer\n\nOpcode      Instruction      Clocks   Description\n\nC5  /r      LDS r16,m16:16   7,p=22   Load DS:r16 with pointer from memory\nC5  /r      LDS r32,m16:32   7,p=22   Load DS:r32 with pointer from memory\n0F  B2 /r   LSS r16,m16:16   7,p=22   Load SS:r16 with pointer from memory\n0F  B2 /r   LSS r32,m16:32   7,p=22   Load SS:r32 with pointer from memory\nC4  /r      LES r16,m16:16   7,p=22   Load ES:r16 with pointer from memory\nC4  /r      LES r32,m16:32   7,p=22   Load ES:r32 with pointer from memory\n0F  B4 /r   LFS r16,m16:16   7,p=25   Load FS:r16 with pointer from memory\n0F  B4 /r   LFS r32,m16:32   7,p=25   Load FS:r32 with pointer from memory\n0F  B5 /r   LGS r16,m16:16   7,p=25   Load GS:r16 with pointer from memory\n0F  B5 /r   LGS r32,m16:32   7,p=25   Load GS:r32 with pointer from memory\n\n\nOperation\n\nCASE instruction OF\n   LSS: Sreg is SS; (* Load SS register *)\n   LDS: Sreg is DS; (* Load DS register *)\n   LES: Sreg is ES; (* Load ES register *)\n   LFS: Sreg is FS; (* Load FS register *)\n   LGS: Sreg is DS; (* Load GS register *)\nESAC;\nIF (OperandSize = 16)\nTHEN\n   r16 \u001b [Effective Address]; (* 16-bit transfer *)\n   Sreg \u001b [Effective Address + 2]; (* 16-bit transfer *)\n   (* In Protected Mode, load the descriptor into the segment register *)\nELSE (* OperandSize = 32 *)\n   r32 \u001b [Effective Address]; (* 32-bit transfer *)\n   Sreg \u001b [Effective Address + 4]; (* 16-bit transfer *)\n   (* In Protected Mode, load the descriptor into the segment register *)\nFI;\n\nDescription\n\nThese instructions read a full pointer from memory and store it in the\nselected segment register:register pair. The full pointer loads 16 bits\ninto the segment register SS, DS, ES, FS, or GS. The other register loads 32\nbits if the operand-size attribute is 32 bits, or loads 16 bits if the\noperand-size attribute is 16 bits. The other 16- or 32-bit register to be\nloaded is determined by the r16 or r32 register operand specified.\n\nWhen an assignment is made to one of the segment registers, the\ndescriptor is also loaded into the segment register. The data for the\nregister is obtained from the descriptor table entry for the selector\ngiven.\n\nA null selector (values 0000-0003) can be loaded into DS, ES, FS, or\nGS registers without causing a protection exception. (Any subsequent\nreference to a segment whose corresponding segment register is loaded\nwith a null selector to address memory causes a #GP(0) exception. No\nmemory reference to the segment occurs.)\n\nThe following is a listing of the Protected Mode checks and actions taken in\nthe loading of a segment register:\n\nIF SS is loaded:\n   IF selector is null THEN #GP(0); FI;\n   Selector index must be within its descriptor table limits ELSE\n      #GP(selector);\n   Selector's RPL must equal CPL ELSE #GP(selector);\n   AR byte must indicate a writable data segment ELSE #GP(selector);\n   DPL in the AR byte must equal CPL ELSE #GP(selector);\n   Segment must be marked present ELSE #SS(selector);\n   Load SS with selector;\n   Load SS with descriptor;\nIF DS, ES, FS, or GS is loaded with non-null selector:\n   Selector index must be within its descriptor table limits ELSE\n      #GP(selector);\n   AR byte must indicate data or readable code segment ELSE\n      #GP(selector);\n   IF data or nonconforming code\n   THEN both the RPL and the CPL must be less than or equal to DPL in\n      AR byte;\n   ELSE #GP(selector);\n   Segment must be marked present ELSE #NP(selector);\nLoad segment register with selector and RPL bits;\nLoad segment register with descriptor;\nIF DS, ES, FS or GS is loaded with a null selector:\n   Clear descriptor valid bit;\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\nthe second operand must be a memory operand, not a register; #GP(0)\nif a null selector is loaded into SS; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nThe second operand must be a memory operand, not a register; Interrupt\n13 if any part of the operand would lie outside of the effective address\nspace from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nLLDT  Load Local Descriptor Table Register\n\nOpcode      Instruction      Clocks   Description\n\n0F  00 /2   LLDT r/m16       20       Load selector r/m16 into LDTR\n\n\nOperation\n\nLDTR \u001b SRC;\n\nDescription\n\nLLDT loads the Local Descriptor Table register (LDTR). The word\noperand (memory or register) to LLDT should contain a selector to the\nGlobal Descriptor Table (GDT). The GDT entry should be a Local Descriptor\nTable. If so, then the LDTR is loaded from the entry. The descriptor\nregisters DS, ES, SS, FS, GS, and CS are not affected. The LDT field in the\ntask state segment does not change.\n\nThe selector operand can be 0; if so, the LDTR is marked invalid. All\ndescriptor references (except by the LAR, VERR, VERW or LSL\ninstructions) cause a #GP fault.\n\nLLDT is used in operating system software; it is not used in application\nprograms.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the current privilege level is not 0; #GP(selector) if the\nselector operand does not point into the Global Descriptor Table, or if the\nentry in the GDT is not a Local Descriptor Table; #NP(selector) if the\nLDT descriptor is not present; #GP(0) for an illegal memory operand\neffective address in the CS, DS, ES, FS, or GS segments; #SS(0) for an\nillegal address in the SS segment; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 6; LLDT is not recognized in Real Address Mode\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode (because the instruction is\nnot recognized, it will not execute or perform a memory reference)\n\nNote\n\nThe operand-size attribute has no effect on this instruction.\n\n\nLMSW  Load Machine Status Word\n\nOpcode      Instruction      Clocks   Description\n\n0F  01 /6   LMSW r/m16       10/13    Load r/m16 in machine status word\n\n\nOperation\n\nMSW \u001b r/m16; (* 16 bits is stored in the machine status word *)\n\nDescription\n\nLMSW loads the machine status word (part of CR0) from the source\noperand. This instruction can be used to switch to Protected Mode; if so,\nit must be followed by an intrasegment jump to flush the instruction\nqueue. LMSW will not switch back to Real Address Mode.\n\nLMSW is used only in operating system software. It is not used in\napplication programs.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the current privilege level is not 0; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\nNotes\n\nThe operand-size attribute has no effect on this instruction. This\ninstruction is provided for compatibility with the 80286; 80386 programs\nshould use MOV CR0, ... instead.\n\n\nLOCK  Assert LOCK# Signal Prefix\n\nOpcode  Instruction  Clocks  Description\n\nF0      LOCK         0       Assert LOCK# signal for the next instruction\n\n\nDescription\n\nThe LOCK prefix causes the LOCK# signal of the 80386 to be asserted\nduring execution of the instruction that follows it. In a multiprocessor\nenvironment, this signal can be used to ensure that the 80386 has\nexclusive use of any shared memory while LOCK# is asserted. The\nread-modify-write sequence typically used to implement test-and-set on the\n80386 is the BTS instruction.\n\nThe LOCK prefix functions only with the following instructions:\n\nBT, BTS, BTR, BTC                   mem, reg/imm\nXCHG                                reg, mem\nXCHG                                mem, reg\nADD, OR, ADC, SBB, AND, SUB, XOR    mem, reg/imm\nNOT, NEG, INC, DEC                  mem\n\nAn undefined opcode trap will be generated if a LOCK prefix is used\nwith any instruction not listed above.\n\nXCHG always asserts LOCK# regardless of the presence or absence of\nthe LOCK prefix.\n\nThe integrity of the LOCK is not affected by the alignment of the\nmemory field. Memory locking is observed for arbitrarily misaligned\nfields.\n\nLocked access is not assured if another 80386 processor is executing an\ninstruction concurrently that has one of the following characteristics:\n\n    Is not preceded by a LOCK prefix\n\n    Is not one of the instructions in the preceding list\n\n    Specifies a memory operand that does not exactly overlap the\n     destination operand. Locking is not guaranteed for partial overlap,\n     even if one memory operand is wholly contained within another.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#UD if LOCK is used with an instruction not listed in the \"Description\"\nsection above; other exceptions can be generated by the subsequent\n(locked) instruction\n\nReal Address Mode Exceptions\n\nInterrupt 6 if LOCK is used with an instruction not listed in the\n\"Description\" section above; exceptions can still be generated by the\nsubsequent (locked) instruction\n\nVirtual 8086 Mode Exceptions\n\n#UD if LOCK is used with an instruction not listed in the \"Description\"\nsection above; exceptions can still be generated by the subsequent (locked)\ninstruction\n\n\nLODS/LODSB/LODSW/LODSD  Load String Operand\n\nOpcode  Instruction   Clocks   Description\n\nAC      LODS m8       5        Load byte [(E)SI] into AL\nAD      LODS m16      5        Load word [(E)SI] into AX\nAD      LODS m32      5        Load dword [(E)SI] into EAX\nAC      LODSB         5        Load byte DS:[(E)SI] into AL\nAD      LODSW         5        Load word DS:[(E)SI] into AX\nAD      LODSD         5        Load dword DS:[(E)SI] into EAX\n\n\nOperation\n\nIF AddressSize = 16\nTHEN use SI for source-index\nELSE (* AddressSize = 32 *)\n   use ESI for source-index;\nFI;\nIF byte type of instruction\nTHEN\n   AL \u001b [source-index]; (* byte load *)\n   IF DF = 0 THEN IncDec \u001b 1 ELSE IncDec \u001b -1; FI;\nELSE\n   IF OperandSize = 16\n   THEN\n      AX \u001b [source-index]; (* word load *)\n      IF DF = 0 THEN IncDec \u001b 2 ELSE IncDec \u001b -2; FI;\n   ELSE (* OperandSize = 32 *)\n      EAX \u001b [source-index]; (* dword load *)\n      IF DF = 0 THEN IncDec \u001b 4 ELSE IncDec \u001b -4; FI;\n   FI;\nFI;\nsource-index \u001b source-index + IncDec\n\nDescription\n\nLODS loads the AL, AX, or EAX register with the memory byte, word,\nor doubleword at the location pointed to by the source-index register.\nAfter the transfer is made, the source-index register is automatically\nadvanced. If the direction flag is 0 (CLD was executed), the source index\nincrements; if the direction flag is 1 (STD was executed), it decrements.\nThe increment or decrement is 1 if a byte is loaded, 2 if a word is loaded,\nor 4 if a doubleword is loaded.\n\nIf the address-size attribute for this instruction is 16 bits, SI is used\nfor the source-index register; otherwise the address-size attribute is 32\nbits, and the ESI register is used. The address of the source data is\ndetermined solely by the contents of ESI/SI. Load the correct index value\ninto SI before executing the LODS instruction. LODSB, LODSW, LODSD are\nsynonyms for the byte, word, and doubleword LODS instructions.\n\nLODS can be preceded by the REP prefix; however, LODS is used more typically\nwithin a LOOP construct, because further processing of the data moved into\nEAX, AX, or AL is usually necessary.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nLOOP/LOOPcond  Loop Control with CX Counter\n\nOpcode   Instruction  Clocks  Description\n\nE2  cb   LOOP rel8    11+m    DEC count; jump short if count <> 0\nE1  cb   LOOPE rel8   11+m    DEC count; jump short if count <> 0 and ZF=1\nE1  cb   LOOPZ rel8   11+m    DEC count; jump short if count <> 0 and ZF=1\nE0  cb   LOOPNE rel8  11+m    DEC count; jump short if count <> 0 and ZF=0\nE0  cb   LOOPNZ rel8  11+m    DEC count; jump short if count <> 0 and ZF=0\n\n\nOperation\n\nIF AddressSize = 16 THEN CountReg is CX ELSE CountReg is ECX; FI;\nCountReg \u001b CountReg - 1;\nIF instruction <> LOOP\nTHEN\n   IF (instruction = LOOPE) OR (instruction = LOOPZ)\n   THEN BranchCond \u001b (ZF = 1) AND (CountReg <> 0);\n   FI;\n   IF (instruction = LOOPNE) OR (instruction = LOOPNZ)\n   THEN BranchCond \u001b (ZF = 0) AND (CountReg <> 0);\n   FI;\nFI;\n\nIF BranchCond\nTHEN\n   IF OperandSize = 16\n   THEN\n      IP \u001b IP + SignExtend(rel8);\n   ELSE (* OperandSize = 32 *)\n      EIP \u001b EIP + SignExtend(rel8);\n   FI;\nFI;\n\nDescription\n\nLOOP decrements the count register without changing any of the flags.\nConditions are then checked for the form of LOOP being used. If the\nconditions are met, a short jump is made to the label given by the operand\nto LOOP. If the address-size attribute is 16 bits, the CX register is used\nas the count register; otherwise the ECX register is used. The operand\nof LOOP must be in the range from 128 (decimal) bytes before the\ninstruction to 127 bytes ahead of the instruction.\n\nThe LOOP instructions provide iteration control and combine loop index\nmanagement with conditional branching. Use the LOOP instruction by\nloading an unsigned iteration count into the count register, then code the\nLOOP at the end of a series of instructions to be iterated. The\ndestination of LOOP is a label that points to the beginning of the\niteration.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the offset jumped to is beyond the limits of the current code\nsegment\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nLSL  Load Segment Limit\n\nOpcode       Instruction      Clocks      Description\n\n0F  03 /r    LSL r16,r/m16    pm=20/21    Load: r16 \u001b segment limit,\n                                          selector r/m16 (byte granular)\n0F  03 /r    LSL r32,r/m32    pm=20/21    Load: r32 \u001b segment limit,\n                                          selector r/m32 (byte granular)\n0F  03 /r    LSL r16,r/m16    pm=25/26    Load: r16 \u001b segment limit,\n                                          selector r/m16 (page granular)\n0F  03 /r    LSL r32,r/m32    pm=25/26    Load: r32 \u001b segment limit,\n                                          selector r/m32 (page granular)\n\n\nDescription\n\nThe LSL instruction loads a register with an unscrambled segment limit,\nand sets ZF to 1, provided that the source selector is visible at the CPL\nweakened by RPL, and that the descriptor is a type accepted by LSL.\nOtherwise, ZF is cleared to 0, and the destination register is unchanged.\nThe segment limit is loaded as a byte granular value. If the descriptor\nhas a page granular segment limit, LSL will translate it to a byte limit\nbefore loading it in the destination register (shift left 12 the 20-bit\n\"raw\" limit from descriptor, then OR with 00000FFFH).\n\nThe 32-bit forms of this instruction store the 32-bit byte granular limit\nin the 16-bit destination register.\n\nCode and data segment descriptors are valid for LSL.\n\nThe valid special segment and gate descriptor types for LSL are given\nin the following table:\n\nType   Name                      Valid/Invalid\n\n  0    Invalid                   Invalid\n  1    Available 80286 TSS       Valid\n  2    LDT                       Valid\n  3    Busy 80286 TSS            Valid\n  4    80286 call gate           Invalid\n  5    80286/80386 task gate     Invalid\n  6    80286 trap gate           Invalid\n  7    80286 interrupt gate      Invalid\n  8    Invalid                   Valid\n  9    Available 80386 TSS       Valid\n  A    Invalid                   Invalid\n  B    Busy 80386 TSS            Valid\n  C    80386 call gate           Invalid\n  D    Invalid                   Invalid\n  E    80386 trap gate           Invalid\n  F    80386 interrupt gate      Invalid\n\nFlags Affected\n\nZF as described above\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 6; LSL is not recognized in Real Address Mode\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode\n\n\nLTR  Load Task Register\n\nOpcode       Instruction    Clocks    Description\n\n0F  00 /3    LTR r/m16      pm=23/27  Load EA word into task register\n\n\nDescription\n\nLTR loads the task register from the source register or memory location\nspecified by the operand. The loaded task state segment is marked busy.\nA task switch does not occur.\n\nLTR is used only in operating system software; it is not used in\napplication programs.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#GP(0) if the current privilege level is not 0; #GP(selector) if the object\nnamed by the source selector is not a TSS or is already busy;\n#NP(selector) if the TSS is marked \"not present\"; #PF(fault-code) for\na page fault\n\nReal Address Mode Exceptions\n\nInterrupt 6; LTR is not recognized in Real Address Mode\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode\n\nNotes\n\nThe operand-size attribute has no effect on this instruction.\n\n\nMOV  Move Data\n\n\nOpcode   Instruction       Clocks        Description\n\n88  /r   MOV r/m8,r8       2/2           Move byte register to r/m byte\n89  /r   MOV r/m16,r16     2/2           Move word register to r/m word\n89  /r   MOV r/m32,r32     2/2           Move dword register to r/m dword\n8A  /r   MOV r8,r/m8       2/4           Move r/m byte to byte register\n8B  /r   MOV r16,r/m16     2/4           Move r/m word to word register\n8B  /r   MOV r32,r/m32     2/4           Move r/m dword to dword register\n8C  /r   MOV r/m16,Sreg    2/2           Move segment register to r/m word\n8D  /r   MOV Sreg,r/m16    2/5,pm=18/19  Move r/m word to segment register\nA0       MOV AL,moffs8     4             Move byte at (seg:offset) to AL\nA1       MOV AX,moffs16    4             Move word at (seg:offset) to AX\nA1       MOV EAX,moffs32   4             Move dword at (seg:offset) to EAX\nA2       MOV moffs8,AL     2             Move AL to (seg:offset)\nA3       MOV moffs16,AX    2             Move AX to (seg:offset)\nA3       MOV moffs32,EAX   2             Move EAX to (seg:offset)\nB0 + rb  MOV reg8,imm8     2             Move immediate byte to register\nB8 + rw  MOV reg16,imm16   2             Move immediate word to register\nB8 + rd  MOV reg32,imm32   2             Move immediate dword to register\nC6       MOV r/m8,imm8     2/2           Move immediate byte to r/m byte\nC7       MOV r/m16,imm16   2/2           Move immediate word to r/m word\nC7       MOV r/m32,imm32   2/2           Move immediate dword to r/m dword\n\n\n\nNOTES:\n  moffs8, moffs16, and moffs32 all consist of a simple offset relative\n  to the segment base. The 8, 16, and 32 refer to the size of the data. The\n  address-size attribute of the instruction determines the size of the\n  offset, either 16 or 32 bits.\n\n\nOperation\n\nDEST \u001b SRC;\n\nDescription\n\nMOV copies the second operand to the first operand.\n\nIf the destination operand is a segment register (DS, ES, SS, etc.), then\ndata from a descriptor is also loaded into the register. The data for the\nregister is obtained from the descriptor table entry for the selector\ngiven. A null selector (values 0000-0003) can be loaded into DS and ES\nregisters without causing an exception; however, use of DS or ES causes a\n#GP(0), and no memory reference occurs.\n\nA MOV into SS inhibits all interrupts until after the execution of the\nnext instruction (which is presumably a MOV into eSP).\n\nLoading a segment register under 80386 Protected Mode results in special\nchecks and actions, as described in the following listing:\n\nIF SS is loaded;\nTHEN\n   IF selector is null THEN #GP(0);\nFI;\n   Selector index must be within its descriptor table limits else\n      #GP(selector);\n   Selector's RPL must equal CPL else #GP(selector);\nAR byte must indicate a writable data segment else #GP(selector);\n   DPL in the AR byte must equal CPL else #GP(selector);\n   Segment must be marked present else #SS(selector);\n   Load SS with selector;\n   Load SS with descriptor.\nFI;\nIF DS, ES, FS or GS is loaded with non-null selector;\nTHEN\n   Selector index must be within its descriptor table limits\n      else #GP(selector);\n   AR byte must indicate data or readable code segment else\n      #GP(selector);\n   IF data or nonconforming code segment\n   THEN both the RPL and the CPL must be less than or equal to DPL in\n      AR byte;\n   ELSE #GP(selector);\n   FI;\n   Segment must be marked present else #NP(selector);\n   Load segment register with selector;\n   Load segment register with descriptor;\nFI;\nIF DS, ES, FS or GS is loaded with a null selector;\nTHEN\n   Load segment register with selector;\n   Clear descriptor valid bit;\nFI;\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP, #SS, and #NP if a segment register is being loaded; otherwise,\n#GP(0) if the destination is in a nonwritable segment; #GP(0) for an\nillegal memory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nMOV  Move to/from Special Registers\n\nOpcode      Instruction           Clocks   Description\n\n0F  20 /r   MOV r32,CR0/CR2/CR3   6        Move (control register) to\n                                           (register)\n0F  22 /r   MOV CR0/CR2/CR3,r32   10/4/5   Move (register) to (control\n                                           register)\n0F  21 /r   MOV r32,DR0 -- 3      22       Move (debug register) to\n                                           (register)\n0F  21 /r   MOV r32,DR6/DR7       14       Move (debug register) to\n                                           (register)\n0F  23 /r   MOV DR0 -- 3,r32      22       Move (register) to (debug\n                                           register)\n0F  23 /r   MOV DR6/DR7,r32       16       Move (register) to (debug\n                                           register)\n0F  24 /r   MOV r32,TR6/TR7       12       Move (test register) to\n                                           (register)\n0F  26 /r   MOV TR6/TR7,r32       12       Move (register) to (test\n                                           register)\n\n\nOperation\n\nDEST \u001b SRC;\n\nDescription\n\nThe above forms of MOV store or load the following special registers in\nor from a general purpose register:\n\n    Control registers CR0, CR2, and CR3\n    Debug Registers DR0, DR1, DR2, DR3, DR6, and DR7\n    Test Registers TR6 and TR7\n\n32-bit operands are always used with these instructions, regardless of the\noperand-size attribute.\n\nFlags Affected\n\nOF, SF, ZF, AF, PF, and CF are undefined\n\nProtected Mode Exceptions\n\n#GP(0) if the current privilege level is not 0\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\n#GP(0) if instruction execution is attempted\n\nNotes\n\nThe instructions must be executed at privilege level 0 or in real-address\nmode; otherwise, a protection exception will be raised.\n\nThe reg field within the ModRM byte specifies which of the special\nregisters in each category is involved. The two bits in the  field are\nalways 11. The r/m field specifies the general register involved.\n\n\nMOVS/MOVSB/MOVSW/MOVSD  Move Data from String to String\n\nOpcode  Instruction      Clocks   Description\n\nA4      MOVS m8,m8       7        Move byte [(E)SI] to ES:[(E)DI]\nA5      MOVS m16,m16     7        Move word [(E)SI] to ES:[(E)DI]\nA5      MOVS m32,m32     7        Move dword [(E)SI] to ES:[(E)DI]\nA4      MOVSB            7        Move byte DS:[(E)SI] to ES:[(E)DI]\nA5      MOVSW            7        Move word DS:[(E)SI] to ES:[(E)DI]\nA5      MOVSD            7        Move dword DS:[(E)SI] to ES:[(E)DI]\n\n\nOperation\n\nIF (instruction = MOVSD) OR (instruction has doubleword operands)\nTHEN OperandSize \u001b 32;\nELSE OperandSize \u001b 16;\nIF AddressSize = 16\nTHEN use SI for source-index and DI for destination-index;\nELSE (* AddressSize = 32 *)\n   use ESI for source-index and EDI for destination-index;\nFI;\nIF byte type of instruction\nTHEN\n   [destination-index] \u001b [source-index]; (* byte assignment *)\n   IF DF = 0 THEN IncDec \u001b 1 ELSE IncDec \u001b -1; FI;\nELSE\n   IF OperandSize = 16\n   THEN\n      [destination-index] \u001b [source-index]; (* word assignment *)\n      IF DF = 0 THEN IncDec \u001b 2 ELSE IncDec \u001b -2; FI;\n   ELSE (* OperandSize = 32 *)\n      [destination-index] \u001b [source-index]; (* doubleword assignment *)\n      IF DF = 0 THEN IncDec \u001b 4 ELSE IncDec \u001b -4; FI;\n   FI;\nFI;\nsource-index \u001b source-index + IncDec;\ndestination-index \u001b destination-index + IncDec;\n\nDescription\n\nMOVS copies the byte or word at [(E)SI] to the byte or word at\nES:[(E)DI]. The destination operand must be addressable from the ES\nregister; no segment override is possible for the destination. A segment\noverride can be used for the source operand; the default is DS.\n\nThe addresses of the source and destination are determined solely by the\ncontents of (E)SI and (E)DI. Load the correct index values into (E)SI\nand (E)DI before executing the MOVS instruction. MOVSB, MOVSW,\nand MOVSD are synonyms for the byte, word, and doubleword MOVS\ninstructions.\n\nAfter the data is moved, both (E)SI and (E)DI are advanced\nautomatically. If the direction flag is 0 (CLD was executed), the registers\nare incremented; if the direction flag is 1 (STD was executed), the\nregisters are decremented. The registers are incremented or decremented by 1\nif a byte was moved, 2 if a word was moved, or 4 if a doubleword was moved.\n\nMOVS can be preceded by the REP prefix for block movement of CX\nbytes or words. Refer to the REP instruction for details of this operation.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nMOVSX  Move with Sign-Extend\n\nOpcode     Instruction        Clocks   Description\n\n0F  BE /r  MOVSX r16,r/m8     3/6      Move byte to word with sign-extend\n0F  BE /r  MOVSX r32,r/m8     3/6      Move byte to dword, sign-extend\n0F  BF /r  MOVSX r32,r/m16    3/6      Move word to dword, sign-extend\n\n\nOperation\n\nDEST \u001b SignExtend(SRC);\n\nDescription\n\nMOVSX reads the contents of the effective address or register as a byte\nor a word, sign-extends the value to the operand-size attribute of the\ninstruction (16 or 32 bits), and stores the result in the destination\nregister.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nMOVZX  Move with Zero-Extend\n\nOpcode      Instruction        Clocks   Description\n\n0F  B6 /r   MOVZX r16,r/m8     3/6      Move byte to word with zero-extend\n0F  B6 /r   MOVZX r32,r/m8     3/6      Move byte to dword, zero-extend\n0F  B7 /r   MOVZX r32,r/m16    3/6      Move word to dword, zero-extend\n\n\nOperation\n\nDEST \u001b ZeroExtend(SRC);\n\nDescription\n\nMOVZX reads the contents of the effective address or register as a byte\nor a word, zero extends the value to the operand-size attribute of the\ninstruction (16 or 32 bits), and stores the result in the destination\nregister.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nMUL  Unsigned Multiplication of AL or AX\n\nOpcode  Instruction     Clocks       Description\n\nF6  /4  MUL AL,r/m8     9-14/12-17   Unsigned multiply (AX \u001b AL * r/m byte)\nF7  /4  MUL AX,r/m16    9-22/12-25   Unsigned multiply (DX:AX \u001b AX * r/m\n                                     word)\nF7  /4  MUL EAX,r/m32   9-38/12-41   Unsigned multiply (EDX:EAX \u001b EAX * r/m\n                                     dword)\n\n\n\nNOTES:\n  The 80386 uses an early-out multiply algorithm. The actual number of\n  clocks depends on the position of the most significant bit in the \n  optimizing multiplier, shown underlined above. The optimization occurs\n  for positive and negative multiplier values. Because of the early-out\n  algorithm, clock counts given are minimum to maximum. To calculate the\n  actual clocks, use the following formula:\n\n    Actual clock = if  <> 0 then max(ceiling(log{2} m), 3) + 6 clocks;\n\n    Actual clock = if  = 0 then 9 clocks\n\n  where m is the multiplier.\n\n\nOperation\n\nIF byte-size operation\nTHEN AX \u001b AL * r/m8\nELSE (* word or doubleword operation *)\n   IF OperandSize = 16\n   THEN DX:AX \u001b AX * r/m16\n   ELSE (* OperandSize = 32 *)\n      EDX:EAX \u001b EAX * r/m32\n   FI;\nFI;\n\nDescription\n\nMUL performs unsigned multiplication. Its actions depend on the size\nof its operand, as follows:\n\n    A byte operand is multiplied by AL; the result is left in AX. The\n     carry and overflow flags are set to 0 if AH is 0; otherwise, they are\n     set to 1.\n\n    A word operand is multiplied by AX; the result is left in DX:AX.\n     DX contains the high-order 16 bits of the product. The carry and\n     overflow flags are set to 0 if DX is 0; otherwise, they are set to 1.\n\n    A doubleword operand is multiplied by EAX and the result is left in\n     EDX:EAX. EDX contains the high-order 32 bits of the product. The\n     carry and overflow flags are set to 0 if EDX is 0; otherwise, they are\n     set to 1.\n\nFlags Affected\n\nOF and CF as described above; SF, ZF, AF, PF, and CF are undefined\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nNEG  Two's Complement Negation\n\nOpcode  Instruction   Clocks    Description\n\nF6  /3  NEG r/m8      2/6       Two's complement negate r/m byte\nF7  /3  NEG r/m16     2/6       Two's complement negate r/m word\nF7  /3  NEG r/m32     2/6       Two's complement negate r/m dword\n\n\nOperation\n\nIF r/m = 0 THEN CF \u001b 0 ELSE CF \u001b 1; FI;\nr/m \u001b - r/m;\n\nDescription\n\nNEG replaces the value of a register or memory operand with its two's\ncomplement. The operand is subtracted from zero, and the result is placed\nin the operand.\n\nThe carry flag is set to 1, unless the operand is zero, in which case the\ncarry flag is cleared to 0.\n\nFlags Affected\n\nCF as described above; OF, SF, ZF, and PF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in real-address mode; #PF(fault-code) for a page\nfault\n\n\nNOP  No Operation\n\nOpcode  Instruction   Clocks    Description\n\n90      NOP           3         No operation\n\n\nDescription\n\nNOP performs no operation. NOP is a one-byte instruction that takes\nup space but affects none of the machine context except (E)IP.\n\nNOP is an alias mnemonic for the XCHG (E)AX, (E)AX instruction.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nNOT  One's Complement Negation\n\nOpcode    Instruction   Clocks    Description\n\nF6   /2   NOT r/m8       2/6      Reverse each bit of r/m byte\nF7   /2   NOT r/m16      2/6      Reverse each bit of r/m word\nF7   /2   NOT r/m32      2/6      Reverse each bit of r/m dword\n\n\nOperation\n\nr/m \u001b NOT r/m;\n\nDescription\n\nNOT inverts the operand; every 1 becomes a 0, and vice versa.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in real-address mode; #PF(fault-code) for a page\nfault\n\n\nOR  Logical Inclusive OR\n\nOpcode       Instruction       Clocks    Description\n\n0C  ib       OR AL,imm8        2         OR immediate byte to AL\n0D  iw       OR AX,imm16       2         OR immediate word to AX\n0D  id       OR EAX,imm32      2         OR immediate dword to EAX\n80  /1 ib    OR r/m8,imm8      2/7       OR immediate byte to r/m byte\n81  /1 iw    OR r/m16,imm16    2/7       OR immediate word to r/m word\n81  /1 id    OR r/m32,imm32    2/7       OR immediate dword to r/m dword\n83  /1 ib    OR r/m16,imm8     2/7       OR sign-extended immediate byte\n                                         with r/m word\n83  /1 ib    OR r/m32,imm8     2/7       OR sign-extended immediate byte\n                                         with r/m dword\n08  /r       OR r/m8,r8        2/6       OR byte register to r/m byte\n09  /r       OR r/m16,r16      2/6       OR word register to r/m word\n09  /r       OR r/m32,r32      2/6       OR dword register to r/m dword\n0A  /r       OR r8,r/m8        2/7       OR byte register to r/m byte\n0B  /r       OR r16,r/m16      2/7       OR word register to r/m word\n0B  /r       OR r32,r/m32      2/7       OR dword register to r/m dword\n\n\nOperation\n\nDEST \u001b DEST OR SRC;\nCF \u001b 0;\nOF \u001b 0\n\nDescription\n\nOR computes the inclusive OR of its two operands and places the result\nin the first operand. Each bit of the result is 0 if both corresponding\nbits of the operands are 0; otherwise, each bit is 1.\n\nFlags Affected\n\nOF \u001b 0, CF \u001b 0; SF, ZF, and PF as described in Appendix C; AF is\nundefined\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in real-address mode; #PF(fault-code) for a page\nfault\n\n\nOUT  Output to Port\n\nOpcode    Instruction     Clocks          Description\n\nE6  ib    OUT imm8,AL     10,pm=4*/24**   Output byte AL to immediate port\n                                          number\nE7  ib    OUT imm8,AX     10,pm=4*/24**   Output word AL to immediate port\n                                          number\nE7  ib    OUT imm8,EAX    10,pm=4*/24**   Output dword AL to immediate\n                                          port number\nEE        OUT DX,AL       11,pm=5*/25**   Output byte AL to port number in\nDX\nEF        OUT DX,AX       11,pm=5*/25**   Output word AL to port number in\nDX\nEF        OUT DX,EAX      11,pm=5*/25**   Output dword AL to port number\n                                          in DX\n\n\n\nNOTES:\n   *If CPL  IOPL\n  **If CPL > IOPL or if in virtual 8086 mode\n\n\nOperation\n\nIF (PE = 1) AND ((VM = 1) OR (CPL > IOPL))\nTHEN (* Virtual 8086 mode, or protected mode with CPL > IOPL *)\n   IF NOT I-O-Permission (DEST, width(DEST))\n   THEN #GP(0);\n   FI;\nFI;\n[DEST] \u001b SRC; (* I/O address space used *)\n\nDescription\n\nOUT transfers a data byte or data word from the register (AL, AX, or\nEAX) given as the second operand to the output port numbered by the\nfirst operand. Output to any port from 0 to 65535 is performed by placing\nthe port number in the DX register and then using an OUT instruction\nwith DX as the first operand. If the instruction contains an eight-bit port\nID, that value is zero-extended to 16 bits.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the current privilege level is higher (has less privilege) than\nIOPL and any of the corresponding I/O permission bits in TSS equals 1\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\n#GP(0) fault if any of the corresponding I/O permission bits in TSS\nequals 1\n\n\nOUTS/OUTSB/OUTSW/OUTSD  Output String to Port\n\nOpcode   Instruction     Clocks          Description\n\n6E       OUTS DX,r/m8    14,pm=8*/28**   Output byte [(E)SI] to port in DX\n6F       OUTS DX,r/m16   14,pm=8*/28**   Output word [(E)SI] to port in DX\n6F       OUTS DX,r/m32   14,pm=8*/28**   Output dword [(E)SI] to port in DX\n6E       OUTSB           14,pm=8*/28**   Output byte DS:[(E)SI] to port in\n                                         DX\n6F       OUTSW           14,pm=8*/28**   Output word DS:[(E)SI] to port in\n                                         DX\n6F       OUTSD           14,pm=8*/28**   Output dword DS:[(E)SI] to port in\n                                         DX\n\n\n\nNOTES:\n   *If CPL  IOPL\n  **If CPL > IOPL or if in virtual 8086 mode\n\n\nOperation\n\nIF AddressSize = 16\nTHEN use SI for source-index;\nELSE (* AddressSize = 32 *)\n   use ESI for source-index;\nFI;\n\nIF (PE = 1) AND ((VM = 1) OR (CPL > IOPL))\nTHEN (* Virtual 8086 mode, or protected mode with CPL > IOPL *)\n   IF NOT I-O-Permission (DEST, width(DEST))\n   THEN #GP(0);\n   FI;\nFI;\nIF byte type of instruction\nTHEN\n   [DX] \u001b [source-index]; (* Write byte at DX I/O address *)\n   IF DF = 0 THEN IncDec \u001b 1 ELSE IncDec \u001b -1; FI;\nFI;\nIF OperandSize = 16\nTHEN\n   [DX] \u001b [source-index]; (* Write word at DX I/O address *)\n   IF DF = 0 THEN IncDec \u001b 2 ELSE IncDec \u001b -2; FI;\nFI;\nIF OperandSize = 32\nTHEN\n   [DX] \u001b [source-index]; (* Write dword at DX I/O address *)\n   IF DF = 0 THEN IncDec \u001b 4 ELSE IncDec \u001b -4; FI;\n   FI;\nFI;\nsource-index \u001b source-index + IncDec;\n\nDescription\n\nOUTS transfers data from the memory byte, word, or doubleword at the\nsource-index register to the output port addressed by the DX register. If\nthe address-size attribute for this instruction is 16 bits, SI is used for\nthe source-index register; otherwise, the address-size attribute is 32 bits,\nand ESI is used for the source-index register.\n\nOUTS does not allow specification of the port number as an immediate value.\nThe port must be addressed through the DX register value. Load the correct\nvalue into DX before executing the OUTS instruction.\n\nThe address of the source data is determined by the contents of\nsource-index register. Load the correct index value into SI or ESI before\nexecuting the OUTS instruction.\n\nAfter the transfer, source-index register is advanced automatically. If\nthe direction flag is 0 (CLD was executed), the source-index register is\nincremented; if the direction flag is 1 (STD was executed), it is\ndecremented. The amount of the increment or decrement is 1 if a byte is\noutput, 2 if a word is output, or 4 if a doubleword is output.\n\nOUTSB, OUTSW, and OUTSD are synonyms for the byte, word, and\ndoubleword OUTS instructions. OUTS can be preceded by the REP\nprefix for block output of CX bytes or words. Refer to the REP\ninstruction for details on this operation.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if CPL is greater than IOPL and any of the corresponding I/O\npermission bits in TSS equals 1; #GP(0) for an illegal memory operand\neffective address in the CS, DS, or ES segments; #SS(0) for an illegal\naddress in the SS segment; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\n#GP(0) fault if any of the corresponding I/O permission bits in TSS\nequals 1; #PF(fault-code) for a page fault\n\n\nPOP  Pop a Word from the Stack\n\nOpcode      Instruction   Clocks     Description\n\n8F   /0     POP m16       5          Pop top of stack into memory word\n8F   /0     POP m32       5          Pop top of stack into memory dword\n58 + rw     POP r16       4          Pop top of stack into word register\n58 + rd     POP r32       4          Pop top of stack into dword register\n1F          POP DS        7,pm=21    Pop top of stack into DS\n07          POP ES        7,pm=21    Pop top of stack into ES\n17          POP SS        7,pm=21    Pop top of stack into SS\n0F   A1     POP FS        7,pm=21    Pop top of stack into FS\n0F   A9     POP GS        7,pm=21    Pop top of stack into GS\n\n\nOperation\n\nIF StackAddrSize = 16\nTHEN\n   IF OperandSize = 16\n   THEN\n      DEST \u001b (SS:SP); (* copy a word *)\n      SP \u001b SP + 2;\n   ELSE (* OperandSize = 32 *)\n      DEST \u001b (SS:SP); (* copy a dword *)\n      SP \u001b SP + 4;\n   FI;\nELSE (* StackAddrSize = 32 * )\n   IF OperandSize = 16\n   THEN\n      DEST \u001b (SS:ESP); (* copy a word *)\n      ESP \u001b ESP + 2;\n   ELSE (* OperandSize = 32 *)\n      DEST \u001b (SS:ESP); (* copy a dword *)\n      ESP \u001b ESP + 4;\n   FI;\nFI;\n\nDescription\n\nPOP replaces the previous contents of the memory, the register, or the\nsegment register operand with the word on the top of the 80386 stack,\naddressed by SS:SP (address-size attribute of 16 bits) or SS:ESP\n(addresssize attribute of 32 bits). The stack pointer SP is incremented\nby 2 for an operand-size of 16 bits or by 4 for an operand-size of 32 bits.\nIt then points to the new top of stack.\n\nPOP CS is not an 80386 instruction. Popping from the stack into the CS\nregister is accomplished with a RET instruction.\n\nIf the destination operand is a segment register (DS, ES, FS, GS, or\nSS), the value popped must be a selector. In protected mode, loading the\nselector initiates automatic loading of the descriptor information\nassociated with that selector into the hidden part of the segment register;\nloading also initiates validation of both the selector and the descriptor\ninformation.\n\nA null value (0000-0003) may be popped into the DS, ES, FS, or GS\nregister without causing a protection exception. An attempt to reference\na segment whose corresponding segment register is loaded with a null\nvalue causes a #GP(0) exception. No memory reference occurs. The saved\nvalue of the segment register is null.\n\nA POP SS instruction inhibits all interrupts, including NMI, until after\nexecution of the next instruction. This allows sequential execution of POP\nSS and POP eSP instructions without danger of having an invalid stack\nduring an interrupt. However, use of the LSS instruction is the preferred\nmethod of loading the SS and eSP registers.\n\nLoading a segment register while in protected mode results in special\nchecks and actions, as described in the following listing:\n\nIF SS is loaded:\n   IF selector is null THEN #GP(0);\n   Selector index must be within its descriptor table limits ELSE\n      #GP(selector);\n   Selector's RPL must equal CPL ELSE #GP(selector);\n   AR byte must indicate a writable data segment ELSE #GP(selector);\n   DPL in the AR byte must equal CPL ELSE #GP(selector);\n   Segment must be marked present ELSE #SS(selector);\n   Load SS register with selector;\n   Load SS register with descriptor;\n\nIF DS, ES, FS or GS is loaded with non-null selector:\n   AR byte must indicate data or readable code segment ELSE\n      #GP(selector);\n   IF data or nonconforming code\n   THEN both the RPL and the CPL must be less than or equal to DPL in\n      AR byte\n   ELSE #GP(selector);\n   FI;\n   Segment must be marked present ELSE #NP(selector);\n   Load segment register with selector;\n   Load segment register with descriptor;\n\nIF DS, ES, FS, or GS is loaded with a null selector:\n   Load segment register with selector\n   Clear valid bit in invisible portion of register\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP, #SS, and #NP if a segment register is being loaded; #SS(0) if the\ncurrent top of stack is not within the stack segment; #GP(0) if the result\nis in a nonwritable segment; #GP(0) for an illegal memory operand\neffective address in the CS, DS, ES, FS, or GS segments; #SS(0) for an\nillegal address in the SS segment; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in real-address mode; #PF(fault-code) for a page\nfault\n\n\nPOPA/POPAD  Pop all General Registers\n\nOpcode   Instruction   Clocks   Description\n\n61       POPA          24       Pop DI, SI, BP, SP, BX, DX, CX, and AX\n61       POPAD         24       Pop EDI, ESI, EBP, ESP, EDX, ECX, and EAX\n\n\nOperation\n\nIF OperandSize = 16 (* instruction = POPA *)\nTHEN\n   DI \u001b Pop();\n   SI \u001b Pop();\n   BP \u001b Pop();\n   throwaway \u001b Pop (); (* Skip SP *)\n   BX \u001b Pop();\n   DX \u001b Pop();\n   CX \u001b Pop();\n   AX \u001b Pop();\nELSE (* OperandSize = 32, instruction = POPAD *)\n   EDI \u001b Pop();\n   ESI \u001b Pop();\n   EBP \u001b Pop();\n   throwaway \u001b Pop (); (* Skip ESP *)\n   EBX \u001b Pop();\n   EDX \u001b Pop();\n   ECX \u001b Pop();\n   EAX \u001b Pop();\nFI;\n\nDescription\n\nPOPA pops the eight 16-bit general registers. However, the SP value is\ndiscarded instead of loaded into SP. POPA reverses a previous PUSHA,\nrestoring the general registers to their values before PUSHA was\nexecuted. The first register popped is DI.\n\nPOPAD pops the eight 32-bit general registers. The ESP value is\ndiscarded instead of loaded into ESP. POPAD reverses the previous\nPUSHAD, restoring the general registers to their values before PUSHAD\nwas executed. The first register popped is EDI.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#SS(0) if the starting or ending stack address is not within the stack\nsegment; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in real-address mode; #PF(fault-code) for a page\nfault\n\n\nPOPF/POPFD  Pop Stack into FLAGS or EFLAGS Register\n\nOpcode   Instruction   Clocks   Description\n\n9D       POPF          5        Pop top of stack FLAGS\n9D       POPFD         5        Pop top of stack into EFLAGS\n\n\nOperation\n\nFlags \u001b Pop();\n\nDescription\n\nPOPF/POPFD pops the word or doubleword on the top of the stack and\nstores the value in the flags register. If the operand-size attribute of\nthe instruction is 16 bits, then a word is popped and the value is stored in\nFLAGS. If the operand-size attribute is 32 bits, then a doubleword is popped\nand the value is stored in EFLAGS.\n\nRefer to Chapter 2 and Chapter 4 for information about the FLAGS\nand EFLAGS registers. Note that bits 16 and 17 of EFLAGS, called\nVM and RF, respectively, are not affected by POPF or POPFD.\n\nThe I/O privilege level is altered only when executing at privilege level\n0. The interrupt flag is altered only when executing at a level at least as\nprivileged as the I/O privilege level. (Real-address mode is equivalent to\nprivilege level 0.) If a POPF instruction is executed with insufficient\nprivilege, an exception does not occur, but the privileged bits do not\nchange.\n\nFlags Affected\n\nAll flags except VM and RF\n\nProtected Mode Exceptions\n\n#SS(0) if the top of stack is not within the stack segment\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\n#GP(0) fault if IOPL is less than 3, to permit emulation\n\n\nPUSH  Push Operand onto the Stack\n\nOpcode     Instruction   Clocks   Description\n\nFF   /6    PUSH m16      5        Push memory word\nFF   /6    PUSH m32      5        Push memory dword\n50 + /r    PUSH r16      2        Push register word\n50 + /r    PUSH r32      2        Push register dword\n6A         PUSH imm8     2        Push immediate byte\n68         PUSH imm16    2        Push immediate word\n68         PUSH imm32    2        Push immediate dword\n0E         PUSH CS       2        Push CS\n16         PUSH SS       2        Push SS\n1E         PUSH DS       2        Push DS\n06         PUSH ES       2        Push ES\n0F   A0    PUSH FS       2        Push FS\nOF   A8    PUSH GS       2        Push GS\n\n\nOperation\n\nIF StackAddrSize = 16\nTHEN\n   IF OperandSize = 16 THEN\n      SP \u001b SP - 2;\n      (SS:SP) \u001b (SOURCE); (* word assignment *)\n   ELSE\n      SP \u001b SP - 4;\n      (SS:SP) \u001b (SOURCE); (* dword assignment *)\n   FI;\nELSE (* StackAddrSize = 32 *)\n   IF OperandSize = 16\n   THEN\n      ESP \u001b ESP - 2;\n      (SS:ESP) \u001b (SOURCE); (* word assignment *)\n   ELSE\n      ESP \u001b ESP - 4;\n      (SS:ESP) \u001b (SOURCE); (* dword assignment *)\n   FI;\nFI;\n\nDescription\n\nPUSH decrements the stack pointer by 2 if the operand-size attribute of\nthe instruction is 16 bits; otherwise, it decrements the stack pointer by\n4. PUSH then places the operand on the new top of stack, which is\npointed to by the stack pointer.\n\nThe 80386 PUSH eSP instruction pushes the value of eSP as it existed\nbefore the instruction. This differs from the 8086, where PUSH SP\npushes the new value (decremented by 2).\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#SS(0) if the new value of SP or ESP is outside the stack segment limit;\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nNone; if SP or ESP is 1, the 80386 shuts down due to a lack of stack\nspace\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in real-address mode; #PF(fault-code) for a page\nfault\n\n\nPUSHA/PUSHAD  Push all General Registers\n\nOpcode  Instruction  Clocks   Description\n\n60      PUSHA        18       Push AX, CX, DX, BX, original SP, BP, SI, and\n                              DI\n60      PUSHAD       18       Push EAX, ECX, EDX, EBX, original ESP, EBP,\n                              ESI, and EDI\n\n\nOperation\n\nIF OperandSize = 16 (* PUSHA instruction *)\nTHEN\n   Temp \u001b (SP);\n   Push(AX);\n   Push(CX);\n   Push(DX);\n   Push(BX);\n   Push(Temp);\n   Push(BP);\n   Push(SI);\n   Push(DI);\nELSE (* OperandSize = 32, PUSHAD instruction *)\n   Temp \u001b (ESP);\n   Push(EAX);\n   Push(ECX);\n   Push(EDX);\n   Push(EBX);\n   Push(Temp);\n   Push(EBP);\n   Push(ESI);\n   Push(EDI);\nFI;\n\nDescription\n\nPUSHA and PUSHAD save the 16-bit or 32-bit general registers,\nrespectively, on the 80386 stack. PUSHA decrements the stack pointer\n(SP) by 16 to hold the eight word values. PUSHAD decrements the\nstack pointer (ESP) by 32 to hold the eight doubleword values. Because\nthe registers are pushed onto the stack in the order in which they were\ngiven, they appear in the 16 or 32 new stack bytes in reverse order. The\nlast register pushed is DI or EDI.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#SS(0) if the starting or ending stack address is outside the stack segment\nlimit; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nBefore executing PUSHA or PUSHAD, the 80386 shuts down if SP or\nESP equals 1, 3, or 5; if SP or ESP equals 7, 9, 11, 13, or 15, exception\n13 occurs\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in real-address mode; #PF(fault-code) for a page\nfault\n\n\nPUSHF/PUSHFD  Push Flags Register onto the Stack\n\nOpcode  Instruction  Clocks   Description\n\n9C      PUSHF        4        Push FLAGS\n9C      PUSHFD       4        Push EFLAGS\n\n\nOperation\n\nIF OperandSize = 32\nTHEN push(EFLAGS);\nELSE push(FLAGS);\nFI;\n\nDescription\n\nPUSHF decrements the stack pointer by 2 and copies the FLAGS\nregister to the new top of stack; PUSHFD decrements the stack pointer by\n4, and the 80386 EFLAGS register is copied to the new top of stack\nwhich is pointed to by SS:eSP. Refer to Chapter 2 and Chapter 4 for\ninformation on the EFLAGS register.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#SS(0) if the new value of eSP is outside the stack segment boundaries\n\nReal Address Mode Exceptions\n\nNone; the 80386 shuts down due to a lack of stack space\n\nVirtual 8086 Mode Exceptions\n\n#GP(0) fault if IOPL is less than 3, to permit emulation\n\n\nRCL/RCR/ROL/ROR  Rotate\n\n\nOpcode       Instruction       Clocks  Description\n\nD0  /2       RCL r/m8,1        9/10    Rotate 9 bits (CF,r/m byte) left\n                                       once\nD2  /2       RCL r/m8,CL       9/10    Rotate 9 bits (CF,r/m byte) left CL\n                                       times\nC0  /2 ib    RCL r/m8,imm8     9/10    Rotate 9 bits (CF,r/m byte) left\n                                       imm8 times\nD1  /2       RCL r/m16,1       9/10    Rotate 17 bits (CF,r/m word) left\n                                       once\nD3  /2       RCL r/m16,CL      9/10    Rotate 17 bits (CF,r/m word) left\n                                       CL times\nC1  /2 ib    RCL r/m16,imm8    9/10    Rotate 17 bits (CF,r/m word) left\n                                       imm8 times\nD1  /2       RCL r/m32,1       9/10    Rotate 33 bits (CF,r/m dword) left\n                                       once\nD3  /2       RCL r/m32,CL      9/10    Rotate 33 bits (CF,r/m dword) left\n                                       CL times\nC1  /2 ib    RCL r/m32,imm8    9/10    Rotate 33 bits (CF,r/m dword) left\n                                       imm8 times\nD0  /3       RCR r/m8,1        9/10    Rotate 9 bits (CF,r/m byte) right\n                                       once\nD2  /3       RCR r/m8,CL       9/10    Rotate 9 bits (CF,r/m byte) right\n                                       CL times\nC0  /3 ib    RCR r/m8,imm8     9/10    Rotate 9 bits (CF,r/m byte) right\n                                       imm8 times\nD1  /3       RCR r/m16,1       9/10    Rotate 17 bits (CF,r/m word) right\n                                       once\nD3  /3       RCR r/m16,CL      9/10    Rotate 17 bits (CF,r/m word) right\n                                       CL times\nC1  /3 ib    RCR r/m16,imm8    9/10    Rotate 17 bits (CF,r/m word) right\n                                       imm8 times\nD1  /3       RCR r/m32,1       9/10    Rotate 33 bits (CF,r/m dword) right\n                                       once\nD3  /3       RCR r/m32,CL      9/10    Rotate 33 bits (CF,r/m dword) right\n                                       CL times\nC1  /3 ib    RCR r/m32,imm8    9/10    Rotate 33 bits (CF,r/m dword) right\n                                       imm8 times\nD0  /0       ROL r/m8,1        3/7     Rotate 8 bits r/m byte left once\nD2  /0       ROL r/m8,CL       3/7     Rotate 8 bits r/m byte left CL\n                                       times\nC0  /0 ib    ROL r/m8,imm8     3/7     Rotate 8 bits r/m byte left imm8\n                                       times\nD1  /0       ROL r/m16,1       3/7     Rotate 16 bits r/m word left once\nD3  /0       ROL r/m16,CL      3/7     Rotate 16 bits r/m word left CL\n                                       times\nC1  /0 ib    ROL r/m16,imm8    3/7     Rotate 16 bits r/m word left imm8\n                                       times\nD1  /0       ROL r/m32,1       3/7     Rotate 32 bits r/m dword left once\nD3  /0       ROL r/m32,CL      3/7     Rotate 32 bits r/m dword left CL\n                                       times\nC1  /0 ib    ROL r/m32,imm8    3/7     Rotate 32 bits r/m dword left imm8\n                                       times\nD0  /1       ROR r/m8,1        3/7     Rotate 8 bits r/m byte right once\nD2  /1       ROR r/m8,CL       3/7     Rotate 8 bits r/m byte right CL\n                                       times\nC0  /1 ib    ROR r/m8,imm8     3/7     Rotate 8 bits r/m word right imm8\n                                       times\nD1  /1       ROR r/m16,1       3/7     Rotate 16 bits r/m word right once\nD3  /1       ROR r/m16,CL      3/7     Rotate 16 bits r/m word right CL\n                                       times\nC1  /1 ib    ROR r/m16,imm8    3/7     Rotate 16 bits r/m word right imm8\n                                       times\nD1  /1       ROR r/m32,1       3/7     Rotate 32 bits r/m dword right once\nD3  /1       ROR r/m32,CL      3/7     Rotate 32 bits r/m dword right CL\n                                       times\nC1  /1 ib    ROR r/m32,imm8    3/7     Rotate 32 bits r/m dword right imm8\n                                       times\n\n\nOperation\n\n(* ROL - Rotate Left *)\ntemp \u001b COUNT;\nWHILE (temp <> 0)\nDO\n   tmpcf \u001b high-order bit of (r/m);\n   r/m \u001b r/m * 2 + (tmpcf);\n   temp \u001b temp - 1;\nOD;\nIF COUNT = 1\nTHEN\n   IF high-order bit of r/m <> CF\n   THEN OF \u001b 1;\n   ELSE OF \u001b 0;\n   FI;\nELSE OF \u001b undefined;\nFI;\n(* ROR - Rotate Right *)\ntemp \u001b COUNT;\nWHILE (temp <> 0 )\nDO\n   tmpcf \u001b low-order bit of (r/m);\n   r/m \u001b r/m / 2 + (tmpcf * 2^(width(r/m)));\n   temp \u001b temp - 1;\nDO;\nIF COUNT = 1\nTHEN\n   IF (high-order bit of r/m) <> (bit next to high-order bit of r/m)\n   THEN OF \u001b 1;\n   ELSE OF \u001b 0;\n   FI;\nELSE OF \u001b undefined;\nFI;\n\nDescription\n\nEach rotate instruction shifts the bits of the register or memory operand\ngiven. The left rotate instructions shift all the bits upward, except for\nthe top bit, which is returned to the bottom. The right rotate instructions\ndo the reverse: the bits shift downward until the bottom bit arrives at\nthe top.\n\nFor the RCL and RCR instructions, the carry flag is part of the rotated\nquantity. RCL shifts the carry flag into the bottom bit and shifts the top\nbit into the carry flag; RCR shifts the carry flag into the top bit and\nshifts the bottom bit into the carry flag. For the ROL and ROR\ninstructions, the original value of the carry flag is not a part of the\nresult, but the carry flag receives a copy of the bit that was shifted from\none end to the other.\n\nThe rotate is repeated the number of times indicated by the second\noperand, which is either an immediate number or the contents of the CL\nregister. To reduce the maximum instruction execution time, the 80386\ndoes not allow rotation counts greater than 31. If a rotation count greater\nthan 31 is attempted, only the bottom five bits of the rotation are used.\nThe 8086 does not mask rotation counts. The 80386 in Virtual 8086 Mode does\nmask rotation counts.\n\nThe overflow flag is defined only for the single-rotate forms of the\ninstructions (second operand = 1). It is undefined in all other cases. For\nleft shifts/rotates, the CF bit after the shift is XORed with the\nhigh-order result bit. For right shifts/rotates, the high-order two bits of\nthe result are XORed to get OF.\n\nFlags Affected\n\nOF only for single rotates; OF is undefined for multi-bit rotates; CF as\ndescribed above\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nREP/REPE/REPZ/REPNE/REPNZ  Repeat Following String Operation\n\n\nOpcode    Instruction         Clocks           Description\n\nF3  6C    REP INS r/m8, DX    13+6*(E)CX,\n                              pm=7+6*(E)CX\nIf CPL  IOPL/\n                              27+6*(E)CX\nIf CPL > IOPL or if in virtual 8086 mode      Input (E)CX bytes from port\n                                               DX into ES:[(E)DI]\nF3  6D    REP INS r/m16,DX    13+6*(E)CX,\n                              pm=7+6*(E)CX\nIf CPL  IOPL/\n                              27+6*(E)CX\nIf CPL > IOPL or if in virtual 8086 mode      Input (E)CX words from port\n                                               DX into ES:[(E)DI]\nF3  6D    REP INS r/m32,DX    13+6*(E)CX,\n                              pm=7+6*(E)CX\nIf CPL  IOPL/\n                              27+6*(E)CX\nIf CPL > IOPL or if in virtual 8086 mode      Input (E)CX dwords from port\n                                               DX into ES:[(E)DI]\nF3  A4    REP MOVS m8,m8      5+4*(E)CX        Move (E)CX bytes from\n                                               [(E)SI] to ES:[(E)DI]\nF3  A5    REP MOVS m16,m16    5+4*(E)CX        Move (E)CX words from\n                                               [(E)SI] to ES:[(E)DI]\nF3  A5    REP MOVS m32,m32    5+4*(E)CX        Move (E)CX dwords from\n                                               [(E)SI] to ES:[(E)DI]\nF3  6E    REP OUTS DX,r/m8    5+12*(E)CX,\n                              pm=6+5*(E)CX\nIf CPL  IOPL/\n                              26+5*(E)CX\nIf CPL > IOPL or if in virtual 8086 mode      Output (E)CX bytes from\n                                               [(E)SI] to port DX\nF3  6F    REP OUTS DX,r/m16   5+12*(E)CX,\n                              pm=6+5*(E)CX\nIf CPL  IOPL/\n                              26+5*(E)CX\nIf CPL > IOPL or if in virtual 8086 mode      Output (E)CX words from\n                                               [(E)SI] to port DX\nF3  6F    REP OUTS DX,r/m32   5+12*(E)CX,\n                              pm=6+5*(E)CX\nIf CPL  IOPL/\n                              26+5*(E)CX\nIf CPL > IOPL or if in virtual 8086 mode      Output (E)CX dwords from\n                                               [(E)SI] to port DX\nF3  AA    REP STOS m8         5+5*(E)CX        Fill (E)CX bytes at\n                                               ES:[(E)DI] with AL\nF3  AB    REP STOS m16        5+5*(E)CX        Fill (E)CX words at\n                                               ES:[(E)DI] with AX\nF3  AB    REP STOS m32        5+5*(E)CX        Fill (E)CX dwords at\n                                               ES:[(E)DI] with EAX\nF3  A6    REPE CMPS m8,m8     5+9*N            Find nonmatching bytes in\n                                               ES:[(E)DI] and [(E)SI]\nF3  A7    REPE CMPS m16,m16   5+9*N            Find nonmatching words in\n                                               ES:[(E)DI] and [(E)SI]\nF3  A7    REPE CMPS m32,m32   5+9*N            Find nonmatching dwords in\n                                               ES:[(E)DI] and [(E)SI]\nF3  AE    REPE SCAS m8        5+8*N            Find non-AL byte starting\n                                               at ES:[(E)DI]\nF3  AF    REPE SCAS m16       5+8*N            Find non-AX word starting\n                                               at ES:[(E)DI]\nF3  AF    REPE SCAS m32       5+8*N            Find non-EAX dword starting\n                                               at ES:[(E)DI]\nF2  A6    REPNE CMPS m8,m8    5+9*N            Find matching bytes in\n                                               ES:[(E)DI] and [(E)SI]\nF2  A7    REPNE CMPS m16,m16  5+9*N            Find matching words in\n                                               ES:[(E)DI] and [(E)SI]\nF2  A7    REPNE CMPS m32,m32  5+9*N            Find matching dwords in\n                                               ES:[(E)DI] and [(E)SI]\nF2  AE    REPNE SCAS m8       5+8*N            Find AL, starting at\n                                               ES:[(E)DI]\nF2  AF    REPNE SCAS m16      5+8*N            Find AX, starting at\n                                               ES:[(E)DI]\nF2  AF    REPNE SCAS m32      5+8*N            Find EAX, starting at\n                                               ES:[(E)DI]\n\n\nOperation\n\nIF AddressSize = 16\nTHEN use CX for CountReg;\nELSE (* AddressSize = 32 *) use ECX for CountReg;\nFI;\nWHILE CountReg <> 0\nDO\n   service pending interrupts (if any);\n   perform primitive string instruction;\n   CountReg \u001b CountReg - 1;\n   IF primitive operation is CMPB, CMPW, SCAB, or SCAW\n   THEN\n      IF (instruction is REP/REPE/REPZ) AND (ZF=1)\n      THEN exit WHILE loop\n      ELSE\n         IF (instruction is REPNZ or REPNE) AND (ZF=0)\n         THEN exit WHILE loop;\n         FI;\n      FI;\n   FI;\nOD;\n\nDescription\n\nREP, REPE (repeat while equal), and REPNE (repeat while not equal)\nare prefix that are applied to string operation. Each prefix cause the\nstring instruction that follows to be repeated the number of times\nindicated in the count register or (for REPE and REPNE) until the\nindicated condition in the zero flag is no longer met.\n\nSynonymous forms of REPE and REPNE are REPZ and REPNZ,\nrespectively.\n\nThe REP prefixes apply only to one string instruction at a time. To repeat\na block of instructions, use the LOOP instruction or another looping\nconstruct.\n\nThe precise action for each iteration is as follows:\n\n  1.  If the address-size attribute is 16 bits, use CX for the count\n      register; if the address-size attribute is 32 bits, use ECX for the\n      count register.\n\n  2.  Check CX. If it is zero, exit the iteration, and move to the next\n      instruction.\n\n  3.  Acknowledge any pending interrupts.\n\n  4.  Perform the string operation once.\n\n  5.  Decrement CX or ECX by one; no flags are modified.\n\n  6.  Check the zero flag if the string operation is SCAS or CMPS. If\n      the repeat condition does not hold, exit the iteration and move to\n      the next instruction. Exit the iteration if the prefix is REPE and ZF\n      is 0 (the last comparison was not equal), or if the prefix is REPNE\n      and ZF is one (the last comparison was equal).\n\n  7.  Return to step 1 for the next iteration.\n\nRepeated CMPS and SCAS instructions can be exited if the count is\nexhausted or if the zero flag fails the repeat condition. These two cases\ncan be distinguished by using either the JCXZ instruction, or by using\nthe conditional jumps that test the zero flag (JZ, JNZ, and JNE).\n\nFlags Affected\n\nZF by REP CMPS and REP SCAS as described above\n\nProtected Mode Exceptions\n\n#UD if a repeat prefix is used before an instruction that is not in the\nlist above; further exceptions can be generated when the string operation is\nexecuted; refer to the descriptions of the string instructions themselves\n\nReal Address Mode Exceptions\n\nInterrupt 6 if a repeat prefix is used before an instruction that is not in\nthe list above; further exceptions can be generated when the string\noperation is executed; refer to the descriptions of the string instructions\nthemselves\n\nVirtual 8086 Mode Exceptions\n\n#UD if a repeat prefix is used before an instruction that is not in the\nlist above; further exceptions can be generated when the string operation is\nexecuted; refer to the descriptions of the string instructions themselves\n\nNotes\n\nNot all input/output ports can handle the rate at which the REP INS\nand REP OUTS instructions execute.\n\n\nRET  Return from Procedure\n\nOpcode     Instruction  Clocks         Description\n\nC3         RET          10+m           Return (near) to caller\nCB         RET          18+m,pm=32+m   Return (far) to caller, same\n                                       privilege\nCB         RET          pm=68          Return (far), lesser privilege,\n                                       switch stacks\nC2  iw     RET imm16    10+m           Return (near), pop imm16 bytes of\n                                       parameters\nCA  iw     RET imm16    18+m,pm=32+m   Return (far), same privilege, pop\n                                       imm16 bytes\nCA  iw     RET imm16    pm=68          Return (far), lesser privilege, pop\n                                       imm16 bytes\n\n\nOperation\n\nIF instruction = near RET\nTHEN;\n   IF OperandSize = 16\n   THEN\n      IP \u001b Pop();\n      EIP \u001b EIP AND 0000FFFFH;\n   ELSE (* OperandSize = 32 *)\n      EIP \u001b Pop();\n   FI;\n   IF instruction has immediate operand THEN eSP \u001b eSP + imm16; FI;\nFI;\n\nIF (PE = 0 OR (PE = 1 AND VM = 1))\n   (* real mode or virtual 8086 mode *)\n   AND instruction = far RET\nTHEN;\n   IF OperandSize = 16\n   THEN\n      IP \u001b Pop();\n      EIP \u001b EIP AND 0000FFFFH;\n      CS \u001b Pop(); (* 16-bit pop *)\n   ELSE (* OperandSize = 32 *)\n      EIP \u001b Pop();\n      CS \u001b Pop(); (* 32-bit pop, high-order 16-bits discarded *)\n   FI;\n   IF instruction has immediate operand THEN eSP \u001b eSP + imm16; FI;\nFI;\n\nIF (PE = 1 AND VM = 0) (* Protected mode, not V86 mode *)\n   AND instruction = far RET\nTHEN\n   IF OperandSize=32\n   THEN Third word on stack must be within stack limits else #SS(0);\n   ELSE Second word on stack must be within stack limits else #SS(0);\n   FI;\n   Return selector RPL must be  CPL ELSE #GP(return selector)\n   IF return selector RPL = CPL\n   THEN GOTO SAME-LEVEL;\n   ELSE GOTO OUTER-PRIVILEGE-LEVEL;\n   FI;\nFI;\n\nSAME-LEVEL:\n   Return selector must be non-null ELSE #GP(0)\n   Selector index must be within its descriptor table limits ELSE\n      #GP(selector)\n   Descriptor AR byte must indicate code segment ELSE #GP(selector)\n   IF non-conforming\n   THEN code segment DPL must equal CPL;\n   ELSE #GP(selector);\n   FI;\n   IF conforming\n   THEN code segment DPL must be  CPL;\n   ELSE #GP(selector);\n   FI;\n   Code segment must be present ELSE #NP(selector);\n   Top word on stack must be within stack limits ELSE #SS(0);\n   IP must be in code segment limit ELSE #GP(0);\n   IF OperandSize=32\n   THEN\n      Load CS:EIP from stack\n      Load CS register with descriptor\n      Increment eSP by 8 plus the immediate offset if it exists\n   ELSE (* OperandSize=16 *)\n      Load CS:IP from stack\n      Load CS register with descriptor\n      Increment eSP by 4 plus the immediate offset if it exists\n   FI;\n\nOUTER-PRIVILEGE-LEVEL:\n   IF OperandSize=32\n   THEN Top (16+immediate) bytes on stack must be within stack limits\n      ELSE #SS(0);\n   ELSE Top (8+immediate) bytes on stack must be within stack limits ELSE\n      #SS(0);\n   FI;\n   Examine return CS selector and associated descriptor:\n      Selector must be non-null ELSE #GP(0);\n      Selector index must be within its descriptor table limits ELSE\n         #GP(selector)\n      Descriptor AR byte must indicate code segment ELSE #GP(selector);\n      IF non-conforming\n      THEN code segment DPL must equal return selector RPL\n      ELSE #GP(selector);\n      FI;\n      IF conforming\n      THEN code segment DPL must be  return selector RPL;\n      ELSE #GP(selector);\n      FI;\n      Segment must be present ELSE #NP(selector)\n   Examine return SS selector and associated descriptor:\n      Selector must be non-null ELSE #GP(0);\n      Selector index must be within its descriptor table limits\n         ELSE #GP(selector);\n      Selector RPL must equal the RPL of the return CS selector ELSE\n         #GP(selector);\n      Descriptor AR byte must indicate a writable data segment ELSE\n         #GP(selector);\n      Descriptor DPL must equal the RPL of the return CS selector ELSE\n         #GP(selector);\n      Segment must be present ELSE #NP(selector);\n   IP must be in code segment limit ELSE #GP(0);\n   Set CPL to the RPL of the return CS selector;\n   IF OperandMode=32\n   THEN\n      Load CS:EIP from stack;\n      Set CS RPL to CPL;\n      Increment eSP by 8 plus the immediate offset if it exists;\n      Load SS:eSP from stack;\n   ELSE (* OperandMode=16 *)\n      Load CS:IP from stack;\n      Set CS RPL to CPL;\n      Increment eSP by 4 plus the immediate offset if it exists;\n      Load SS:eSP from stack;\n   FI;\n   Load the CS register with the return CS descriptor;\n   Load the SS register with the return SS descriptor;\n   For each of ES, FS, GS, and DS\n   DO\n      IF the current register setting is not valid for the outer level,\n         set the register to null (selector \u001b AR \u001b 0);\n      To be valid, the register setting must satisfy the following\n         properties:\n         Selector index must be within descriptor table limits;\n         Descriptor AR byte must indicate data or readable code segment;\n         IF segment is data or non-conforming code, THEN\n            DPL must be  CPL, or DPL must be  RPL;\n      FI;\n   OD;\n\nDescription\n\nRET transfers control to a return address located on the stack. The\naddress is usually placed on the stack by a CALL instruction, and the\nreturn is made to the instruction that follows the CALL.\n\nThe optional numeric parameter to RET gives the number of stack bytes\n(OperandMode=16) or words (OperandMode=32) to be released after the return\naddress is popped. These items are typically used as input parameters to the\nprocedure called.\n\nFor the intrasegment (near) return, the address on the stack is a segment\noffset, which is popped into the instruction pointer. The CS register is\nunchanged. For the intersegment (far) return, the address on the stack\nis a long pointer. The offset is popped first, followed by the selector.\n\nIn real mode, CS and IP are loaded directly. In Protected Mode, an\nintersegment return causes the processor to check the descriptor\naddressed by the return selector. The AR byte of the descriptor must\nindicate a code segment of equal or lesser privilege (or greater or equal\nnumeric value) than the current privilege level. Returns to a lesser\nprivilege level cause the stack to be reloaded from the value saved beyond\nthe parameter block.\n\nThe DS, ES, FS, and GS segment registers can be set to 0 by the RET\ninstruction during an interlevel transfer. If these registers refer to\nsegments that cannot be used by the new privilege level, they are set to\n0 to prevent unauthorized access from the new privilege level.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP, #NP, or #SS, as described under \"Operation\" above; #PF(fault-code) for\na page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would be outside the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nSAHF  Store AH into Flags\n\nOpcode  Instruction  Clocks   Description\n\n9E      SAHF         3        Store AH into flags SF ZF xx AF xx PF xx CF\n\n\nOperation\n\nSF:ZF:xx:AF:xx:PF:xx:CF \u001b AH;\n\nDescription\n\nSAHF loads the flags listed above with values from the AH register,\nfrom bits 7, 6, 4, 2, and 0, respectively.\n\nFlags Affected\n\nSF, ZF, AF, PF, and CF as described above\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nSAL/SAR/SHL/SHR  Shift Instructions\n\n\nOpcode          Instruction       Clocks  Description\n\nD0   /4         SAL r/m8,1        3/7     Multiply r/m byte by 2, once\nD2   /4         SAL r/m8,CL       3/7     Multiply r/m byte by 2, CL times\nC0   /4 ib      SAL r/m8,imm8     3/7     Multiply r/m byte by 2, imm8\n                                          times\nD1   /4         SAL r/m16,1       3/7     Multiply r/m word by 2, once\nD3   /4         SAL r/m16,CL      3/7     Multiply r/m word by 2, CL times\nC1   /4 ib      SAL r/m16,imm8    3/7     Multiply r/m word by 2, imm8\n                                          times\nD1   /4         SAL r/m32,1       3/7     Multiply r/m dword by 2, once\nD3   /4         SAL r/m32,CL      3/7     Multiply r/m dword by 2, CL\n                                          times\nC1   /4 ib      SAL r/m32,imm8    3/7     Multiply r/m dword by 2, imm8\n                                          times\nD0   /7         SAR r/m8,1        3/7     Signed divide^(1) r/m byte by 2,\n                                          once\nD2   /7         SAR r/m8,CL       3/7     Signed divide^(1) r/m byte by 2,\n                                          CL times\nC0   /7 ib      SAR r/m8,imm8     3/7     Signed divide^(1) r/m byte by 2,\n                                          imm8 times\nD1   /7         SAR r/m16,1       3/7     Signed divide^(1) r/m word by 2,\n                                          once\nD3   /7         SAR r/m16,CL      3/7     Signed divide^(1) r/m word by 2,\n                                          CL times\nC1   /7 ib      SAR r/m16,imm8    3/7     Signed divide^(1) r/m word by 2,\n                                          imm8 times\nD1   /7         SAR r/m32,1       3/7     Signed divide^(1) r/m dword by 2,\n                                          once\nD3   /7         SAR r/m32,CL      3/7     Signed divide^(1) r/m dword by 2,\n                                          CL times\nC1   /7 ib      SAR r/m32,imm8    3/7     Signed divide^(1) r/m dword by 2,\n                                          imm8 times\nD0   /4         SHL r/m8,1        3/7     Multiply r/m byte by 2, once\nD2   /4         SHL r/m8,CL       3/7     Multiply r/m byte by 2, CL times\nC0   /4 ib      SHL r/m8,imm8     3/7     Multiply r/m byte by 2, imm8\n                                          times\nD1   /4         SHL r/m16,1       3/7     Multiply r/m word by 2, once\nD3   /4         SHL r/m16,CL      3/7     Multiply r/m word by 2, CL times\nC1   /4 ib      SHL r/m16,imm8    3/7     Multiply r/m word by 2, imm8\n                                          times\nD1   /4         SHL r/m32,1       3/7     Multiply r/m dword by 2, once\nD3   /4         SHL r/m32,CL      3/7     Multiply r/m dword by 2, CL\n                                          times\nC1   /4 ib      SHL r/m32,imm8    3/7     Multiply r/m dword by 2, imm8\n                                          times\nD0   /5         SHR r/m8,1        3/7     Unsigned divide r/m byte by 2,\n                                          once\nD2   /5         SHR r/m8,CL       3/7     Unsigned divide r/m byte by 2,\n                                          CL times\nC0   /5 ib      SHR r/m8,imm8     3/7     Unsigned divide r/m byte by 2,\n                                          imm8 times\nD1   /5         SHR r/m16,1       3/7     Unsigned divide r/m word by 2,\n                                          once\nD3   /5         SHR r/m16,CL      3/7     Unsigned divide r/m word by 2,\n                                          CL times\nC1   /5 ib      SHR r/m16,imm8    3/7     Unsigned divide r/m word by 2,\n                                          imm8 times\nD1   /5         SHR r/m32,1       3/7     Unsigned divide r/m dword by 2,\n                                          once\nD3   /5         SHR r/m32,CL      3/7     Unsigned divide r/m dword by 2,\n                                          CL times\nC1   /5 ib      SHR r/m32,imm8    3/7     Unsigned divide r/m dword by 2,\n                                          imm8 times\n\n\nNot the same division as IDIV; rounding is toward negative infinity.\n\nOperation\n\n(* COUNT is the second parameter *)\n(temp) \u001b COUNT;\nWHILE (temp <> 0)\nDO\n   IF instruction is SAL or SHL\n   THEN CF \u001b high-order bit of r/m;\n   FI;\n   IF instruction is SAR or SHR\n   THEN CF \u001b low-order bit of r/m;\n   FI;\n   IF instruction = SAL or SHL\n   THEN r/m \u001b r/m * 2;\n   FI;\n   IF instruction = SAR\n   THEN r/m \u001b r/m /2 (*Signed divide, rounding toward negative infinity*);\n   FI;\n   IF instruction = SHR\n   THEN r/m \u001b r/m / 2; (* Unsigned divide *);\n   FI;\n   temp \u001b temp - 1;\nOD;\n(* Determine overflow for the various instructions *)\nIF COUNT = 1\nTHEN\n   IF instruction is SAL or SHL\n   THEN OF \u001b high-order bit of r/m <> (CF);\n   FI;\n   IF instruction is SAR\n   THEN OF \u001b 0;\n   FI;\n   IF instruction is SHR\n   THEN OF \u001b high-order bit of operand;\n   FI;\nELSE OF \u001b undefined;\nFI;\n\nDescription\n\nSAL (or its synonym, SHL) shifts the bits of the operand upward. The\nhigh-order bit is shifted into the carry flag, and the low-order bit is set\nto 0.\n\nSAR and SHR shift the bits of the operand downward. The low-order\nbit is shifted into the carry flag. The effect is to divide the operand by\n2. SAR performs a signed divide with rounding toward negative infinity (not\nthe same as IDIV); the high-order bit remains the same. SHR performs an\nunsigned divide; the high-order bit is set to 0.\n\nThe shift is repeated the number of times indicated by the second\noperand, which is either an immediate number or the contents of the CL\nregister. To reduce the maximum execution time, the 80386 does not\nallow shift counts greater than 31. If a shift count greater than 31 is\nattempted, only the bottom five bits of the shift count are used. (The\n8086 uses all eight bits of the shift count.)\n\nThe overflow flag is set only if the single-shift forms of the instructions\nare used. For left shifts, OF is set to 0 if the high bit of the answer is\nthe same as the result of the carry flag (i.e., the top two bits of the\noriginal operand were the same); OF is set to 1 if they are different. For\nSAR, OF is set to 0 for all single shifts. For SHR, OF is set to the\nhigh-order bit of the original operand.\n\nFlags Affected\n\nOF for single shifts; OF is undefined for multiple shifts; CF, ZF, PF,\nand SF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nSBB  Integer Subtraction with Borrow\n\n\nOpcode       Instruction       Clocks  Description\n\n1C  ib       SBB AL,imm8       2       Subtract with borrow immediate byte\n                                       from AL\n1D  iw       SBB AX,imm16      2       Subtract with borrow immediate word\n                                       from AX\n1D  id       SBB EAX,imm32     2       Subtract with borrow immediate\n                                       dword from EAX\n80  /3 ib    SBB r/m8,imm8     2/7     Subtract with borrow immediate byte\n                                       from r/m byte\n81  /3 iw    SBB r/m16,imm16   2/7     Subtract with borrow immediate word\n                                       from r/m word\n81  /3 id    SBB r/m32,imm32   2/7     Subtract with borrow immediate\n                                       dword from r/m dword\n83  /3 ib    SBB r/m16,imm8    2/7     Subtract with borrow sign-extended\n                                       immediate byte from r/m word\n83  /3 ib    SBB r/m32,imm8    2/7     Subtract with borrow sign-extended\n                                       immediate byte from r/m dword\n18  /r       SBB r/m8,r8       2/6     Subtract with borrow byte register\n                                       from r/m byte\n19  /r       SBB r/m16,r16     2/6     Subtract with borrow word register\n                                       from r/m word\n19  /r       SBB r/m32,r32     2/6     Subtract with borrow dword register\n                                       from r/m dword\n1A  /r       SBB r8,r/m8       2/7     Subtract with borrow byte register\n                                       from r/m byte\n1B  /r       SBB r16,r/m16     2/7     Subtract with borrow word register\n                                       from r/m word\n1B  /r       SBB r32,r/m32     2/7     Subtract with borrow dword register\n                                       from r/m dword\n\n\nOperation\n\nIF SRC is a byte and DEST is a word or dword\nTHEN DEST = DEST - (SignExtend(SRC) + CF)\nELSE DEST \u001b DEST - (SRC + CF);\n\nDescription\n\nSBB adds the second operand (DEST) to the carry flag (CF) and\nsubtracts the result from the first operand (SRC). The result of the\nsubtraction is assigned to the first operand (DEST), and the flags are\nset accordingly.\n\nWhen an immediate byte value is subtracted from a word operand, the\nimmediate value is first sign-extended.\n\nFlags Affected\n\nOF, SF, ZF, AF, PF, and CF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nSCAS/SCASB/SCASW/SCASD  Compare String Data\n\nOpcode  Instruction  Clocks  Description\n\nAE      SCAS m8      7       Compare bytes AL-ES:[DI], update (E)DI\nAF      SCAS m16     7       Compare words AX-ES:[DI], update (E)DI\nAF      SCAS m32     7       Compare dwords EAX-ES:[DI], update (E)DI\nAE      SCASB        7       Compare bytes AL-ES:[DI], update (E)DI\nAF      SCASW        7       Compare words AX-ES:[DI], update (E)DI\nAF      SCASD        7       Compare dwords EAX-ES:[DI], update (E)DI\n\n\nOperation\n\nIF AddressSize = 16\nTHEN use DI for dest-index;\nELSE (* AddressSize = 32 *) use EDI for dest-index;\nFI;\nIF byte type of instruction\nTHEN\n   AL - [dest-index]; (* Compare byte in AL and dest *)\n   IF DF = 0 THEN IndDec \u001b 1 ELSE IncDec \u001b -1; FI;\nELSE\n   IF OperandSize = 16\n   THEN\n      AX - [dest-index]; (* compare word in AL and dest *)\n      IF DF = 0 THEN IncDec \u001b 2 ELSE IncDec \u001b -2; FI;\n   ELSE (* OperandSize = 32 *)\n      EAX - [dest-index];(* compare dword in EAX & dest *)\n      IF DF = 0 THEN IncDec \u001b 4 ELSE IncDec \u001b -4; FI;\n   FI;\nFI;\ndest-index = dest-index + IncDec\n\nDescription\n\nSCAS subtracts the memory byte or word at the destination register from\nthe AL, AX or EAX register. The result is discarded; only the flags are set.\nThe operand must be addressable from the ES segment; no segment override is\npossible.\n\nIf the address-size attribute for this instruction is 16 bits, DI is used\nas the destination register; otherwise, the address-size attribute is 32\nbits and EDI is used.\n\nThe address of the memory data being compared is determined solely by the\ncontents of the destination register, not by the operand to SCAS. The\noperand validates ES segment addressability and determines the data type.\nLoad the correct index value into DI or EDI before executing SCAS.\n\nAfter the comparison is made, the destination register is automatically\nupdated. If the direction flag is 0 (CLD was executed), the destination\nregister is incremented; if the direction flag is 1 (STD was executed), it\nis decremented. The increments or decrements are by 1 if bytes are compared,\nby 2 if words are compared, or by 4 if doublewords are compared.\n\nSCASB, SCASW, and SCASD are synonyms for the byte, word and\ndoubleword SCAS instructions that don't require operands. They are\nsimpler to code, but provide no type or segment checking.\n\nSCAS can be preceded by the REPE or REPNE prefix for a block search\nof CX or ECX bytes or words. Refer to the REP instruction for further\ndetails.\n\nFlags Affected\n\nOF, SF, ZF, AF, PF, and CF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nSETcc  Byte Set on Condition\n\n\nOpcode   Instruction  Clocks  Description\n\n0F  97   SETA r/m8    4/5     Set byte if above (CF=0 and ZF=0)\n0F  93   SETAE r/m8   4/5     Set byte if above or equal (CF=0)\n0F  92   SETB r/m8    4/5     Set byte if below (CF=1)\n0F  96   SETBE r/m8   4/5     Set byte if below or equal (CF=1 or (ZF=1)\n0F  92   SETC r/m8    4/5     Set if carry (CF=1)\n0F  94   SETE r/m8    4/5     Set byte if equal (ZF=1)\n0F  9F   SETG r/m8    4/5     Set byte if greater (ZF=0 or SF=OF)\n0F  9D   SETGE r/m8   4/5     Set byte if greater or equal (SF=OF)\n0F  9C   SETL r/m8    4/5     Set byte if less (SF<>OF)\n0F  9E   SETLE r/m8   4/5     Set byte if less or equal (ZF=1 and\n                              SF<>OF)\n0F  96   SETNA r/m8   4/5     Set byte if not above (CF=1)\n0F  92   SETNAE r/m8  4/5     Set byte if not above or equal (CF=1)\n0F  93   SETNB r/m8   4/5     Set byte if not below (CF=0)\n0F  97   SETNBE r/m8  4/5     Set byte if not below or equal (CF=0 and\n                              ZF=0)\n0F  93   SETNC r/m8   4/5     Set byte if not carry (CF=0)\n0F  95   SETNE r/m8   4/5     Set byte if not equal (ZF=0)\n0F  9E   SETNG r/m8   4/5     Set byte if not greater (ZF=1 or SF<>OF)\n0F  9C   SETNGE r/m8  4/5     Set if not greater or equal (SF<>OF)\n0F  9D   SETNL r/m8   4/5     Set byte if not less (SF=OF)\n0F  9F   SETNLE r/m8  4/5     Set byte if not less or equal (ZF=1 and\n                              SF<>OF)\n0F  91   SETNO r/m8   4/5     Set byte if not overflow (OF=0)\n0F  9B   SETNP r/m8   4/5     Set byte if not parity (PF=0)\n0F  99   SETNS r/m8   4/5     Set byte if not sign (SF=0)\n0F  95   SETNZ r/m8   4/5     Set byte if not zero (ZF=0)\n0F  90   SETO r/m8    4/5     Set byte if overflow (OF=1)\n0F  9A   SETP r/m8    4/5     Set byte if parity (PF=1)\n0F  9A   SETPE r/m8   4/5     Set byte if parity even (PF=1)\n0F  9B   SETPO r/m8   4/5     Set byte if parity odd (PF=0)\n0F  98   SETS r/m8    4/5     Set byte if sign (SF=1)\n0F  94   SETZ r/m8    4/5     Set byte if zero (ZF=1)\n\n\nOperation\n\nIF condition THEN r/m8 \u001b 1 ELSE r/m8 \u001b 0; FI;\n\nDescription\n\nSETcc stores a byte at the destination specified by the effective address\nor register if the condition is met, or a 0 byte if the condition is not\nmet.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a non-writable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nSGDT/SIDT  Store Global/Interrupt Descriptor Table Register\n\nOpcode       Instruction   Clocks   Description\n\n0F  01 /0    SGDT m        9        Store GDTR to m\n0F  01 /1    SIDT m        9        Store IDTR to m\n\n\nOperation\n\nDEST \u001b 48-bit BASE/LIMIT register contents;\n\nDescription\n\nSGDT/SIDT copies the contents of the descriptor table register the six\nbytes of memory indicated by the operand. The LIMIT field of the\nregister is assigned to the first word at the effective address. If the\noperand-size attribute is 32 bits, the next three bytes are assigned the\nBASE field of the register, and the fourth byte is written with zero. The\nlast byte is undefined. Otherwise, if the operand-size attribute is 16\nbits, the next four bytes are assigned the 32-bit BASE field of the\nregister.\n\nSGDT and SIDT are used only in operating system software; they are\nnot used in application programs.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\nInterrupt 6 if the destination operand is a register; #GP(0) if the\ndestination is in a nonwritable segment; #GP(0) for an illegal memory\noperand effective address in the CS, DS, ES, FS, or GS segments; #SS(0) for\nan illegal address in the SS segment; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 6 if the destination operand is a register; Interrupt 13 if any\npart of the operand would lie outside of the effective address space from\n0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\nCompatability Note\n\nThe 16-bit forms of the SGDT/SIDT instructions are compatible with\nthe 80286, if the value in the upper eight bits is not referenced. The\n80286 stores 1's in these upper bits, whereas the 80386 stores 0's if the\noperand-size attribute is 16 bits. These bits were specified as undefined\nby the SGDT/SIDT instructions in the iAPX 286 Programmer's\nReference Manual.\n\n\nSHLD  Double Precision Shift Left\n\nOpcode   Instruction          Clocks   Description\n\n0F  A4   SHLD r/m16,r16,imm8  3/7      r/m16 gets SHL of r/m16 concatenated\n                                       with r16\n0F  A4   SHLD r/m32,r32,imm8  3/7      r/m32 gets SHL of r/m32 concatenated\n                                       with r32\n0F  A5   SHLD r/m16,r16,CL    3/7      r/m16 gets SHL of r/m16 concatenated\n                                       with r16\n0F  A5   SHLD r/m32,r32,CL    3/7      r/m32 gets SHL of r/m32 concatenated\n                                       with r32\n\n\nOperation\n\n(* count is an unsigned integer corresponding to the last operand of the\ninstruction, either an immediate byte or the byte in register CL *)\nShiftAmt \u001b count MOD 32;\ninBits \u001b register; (* Allow overlapped operands *)\nIF ShiftAmt = 0\nTHEN no operation\nELSE\n   IF ShiftAmt  OperandSize\n   THEN (* Bad parameters *)\n      r/m \u001b UNDEFINED;\n      CF, OF, SF, ZF, AF, PF \u001b UNDEFINED;\n   ELSE (* Perform the shift *)\n      CF \u001b BIT[Base, OperandSize - ShiftAmt];\n         (* Last bit shifted out on exit *)\n   FOR i \u001b OperandSize - 1 DOWNTO ShiftAmt\n   DO\n      BIT[Base, i] \u001b BIT[Base, i - ShiftAmt];\n   OF;\n   FOR i \u001b ShiftAmt - 1 DOWNTO 0\n   DO\n      BIT[Base, i] \u001b BIT[inBits, i - ShiftAmt + OperandSize];\n   OD;\n   Set SF, ZF, PF (r/m);\n      (* SF, ZF, PF are set according to the value of the result *)\n   AF \u001b UNDEFINED;\n   FI;\nFI;\n\nDescription\n\nSHLD shifts the first operand provided by the r/m field to the left as\nmany bits as specified by the count operand. The second operand (r16 or r32)\nprovides the bits to shift in from the right (starting with bit 0). The\nresult is stored back into the r/m operand. The register remains unaltered.\n\nThe count operand is provided by either an immediate byte or the contents\nof the CL register. These operands are taken MODULO 32 to provide a number\nbetween 0 and 31 by which to shift. Because the bits to shift are provided\nby the specified registers, the operation is useful for multiprecision\nshifts (64 bits or more). The SF, ZF and PF flags are set according to the\nvalue of the result. CS is set to the value of the last bit shifted out. OF\nand AF are left undefined.\n\nFlags Affected\n\nOF, SF, ZF, PF, and CF as described above; AF and OF are undefined\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nSHRD  Double Precision Shift Right\n\nOpcode   Instruction           Clocks  Description\n\n0F  AC   SHRD r/m16,r16,imm8   3/7     r/m16 gets SHR of r/m16 concatenated\n                                       with r16\n0F  AC   SHRD r/m32,r32,imm8   3/7     r/m32 gets SHR of r/m32 concatenated\n                                       with r32\n0F  AD   SHRD r/m16,r16,CL     3/7     r/m16 gets SHR of r/m16 concatenated\n                                       with r16\n0F  AD   SHRD r/m32,r32,CL     3/7     r/m32 gets SHR of r/m32 concatenated\n                                       with r32\n\n\nOperation\n\n(* count is an unsigned integer corresponding to the last operand of the\ninstruction, either an immediate byte or the byte in register CL *)\nShiftAmt \u001b count MOD 32;\ninBits \u001b register; (* Allow overlapped operands *)\nIF ShiftAmt = 0\nTHEN no operation\nELSE\n   IF ShiftAmt  OperandSize\n   THEN (* Bad parameters *)\n      r/m \u001b UNDEFINED;\n      CF, OF, SF, ZF, AF, PF \u001b UNDEFINED;\n   ELSE (* Perform the shift *)\n      CF \u001b BIT[r/m, ShiftAmt - 1]; (* last bit shifted out on exit *)\n      FOR i \u001b 0 TO OperandSize - 1 - ShiftAmt\n      DO\n         BIT[r/m, i] \u001b BIT[r/m, i - ShiftAmt];\n      OD;\n      FOR i \u001b OperandSize - ShiftAmt TO OperandSize - 1\n      DO\n         BIT[r/m,i] \u001b BIT[inBits,i+ShiftAmt - OperandSize];\n      OD;\n      Set SF, ZF, PF (r/m);\n         (* SF, ZF, PF are set according to the value of the result *)\n      Set SF, ZF, PF (r/m);\n      AF \u001b UNDEFINED;\n   FI;\nFI;\n\nDescription\n\nSHRD shifts the first operand provided by the r/m field to the right as many\nbits as specified by the count operand. The second operand (r16 or r32)\nprovides the bits to shift in from the left (starting with bit 31). The\nresult is stored back into the r/m operand. The register remains unaltered.\n\nThe count operand is provided by either an immediate byte or the contents\nof the CL register. These operands are taken MODULO 32 to provide a number\nbetween 0 and 31 by which to shift. Because the bits to shift are provided\nby the specified register, the operation is useful for multi-precision\nshifts (64 bits or more). The SF, ZF and PF flags are set according to the\nvalue of the result. CS is set to the value of the last bit shifted out. OF\nand AF are left undefined.\n\nFlags Affected\n\nOF, SF, ZF, PF, and CF as described above; AF and OF are undefined\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nSLDT  Store Local Descriptor Table Register\n\nOpcode      Instruction   Clocks      Description\n\n0F  00 /0   SLDT r/m16    pm=2/2      Store LDTR to EA word\n\n\nOperation\n\nr/m16 \u001b LDTR;\n\nDescription\n\nSLDT stores the Local Descriptor Table Register (LDTR) in the two-byte\nregister or memory location indicated by the effective address operand.\nThis register is a selector that points into the Global Descriptor Table.\n\nSLDT is used only in operating system software. It is not used in\napplication programs.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 6; SLDT is not recognized in Real Address Mode\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\nNotes\n\nThe operand-size attribute has no effect on the operation of the\ninstruction.\n\n\nSMSW  Store Machine Status Word\n\nOpcode      Instruction     Clocks          Description\n\n0F  01 /4   SMSW r/m16      2/3,pm=2/2      Store machine status word to EA\n                                            word\n\n\nOperation\n\nr/m16 \u001b MSW;\n\nDescription\n\nSMSW stores the machine status word (part of CR0) in the two-byte register\nor memory location indicated by the effective address operand.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\nNotes\n\nThis instruction is provided for compatibility with the 80286; 80386\nprograms should use MOV ..., CR0.\n\n\nSTC  Set Carry Flag\n\nOpcode      Instruction     Clocks      Description\n\nF9          STC             2           Set carry flag\n\n\nOperation\n\nCF \u001b 1;\n\nDescription\n\nSTC sets the carry flag to 1.\n\nFlags Affected\n\nCF = 1\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nSTD  Set Direction Flag\n\nOpcode  Instruction   Clocks    Description\n\nFD      STD           2         Set direction flag so (E)SI and/or (E)DI\n                                decrement\n\n\nOperation\n\nDF \u001b 1;\n\nDescription\n\nSTD sets the direction flag to 1, causing all subsequent string operations\nto decrement the index registers, (E)SI and/or (E)DI, on which they\noperate.\n\nFlags Affected\n\nDF = 1\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nSTI  Set Interrupt Flag\n\nOpcode  Instruction   Clocks   Description\n\nF13     STI           3        Set interrupt flag; interrupts enabled at the\n                               end of the next instruction\n\n\nOperation\n\nIF \u001b 1\n\nDescription\n\nSTI sets the interrupt flag to 1. The 80386 then responds to external\ninterrupts after executing the next instruction if the next instruction\nallows the interrupt flag to remain enabled. If external interrupts are\ndisabled and you code STI, RET (such as at the end of a subroutine),\nthe RET is allowed to execute before external interrupts are recognized.\nAlso, if external interrupts are disabled and you code STI, CLI, then\nexternal interrupts are not recognized because the CLI instruction clears\nthe interrupt flag during its execution.\n\nFlags Affected\n\nIF = 1\n\nProtected Mode Exceptions\n\n#GP(0) if the current privilege level is greater (has less privilege) than\nthe I/O privilege level\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nSTOS/STOSB/STOSW/STOSD  Store String Data\n\nOpcode  Instruction  Clocks   Description\n\nAA      STOS m8      4        Store AL in byte ES:[(E)DI], update (E)DI\nAB      STOS m16     4        Store AX in word ES:[(E)DI], update (E)DI\nAB      STOS m32     4        Store EAX in dword ES:[(E)DI], update (E)DI\nAA      STOSB        4        Store AL in byte ES:[(E)DI], update (E)DI\nAB      STOSW        4        Store AX in word ES:[(E)DI], update (E)DI\nAB      STOSD        4        Store EAX in dword ES:[(E)DI], update (E)DI\n\n\nOperation\n\nIF AddressSize = 16\nTHEN use ES:DI for DestReg\nELSE (* AddressSize = 32 *) use ES:EDI for DestReg;\nFI;\nIF byte type of instruction\nTHEN\n   (ES:DestReg) \u001b AL;\n   IF DF = 0\n   THEN DestReg \u001b DestReg + 1;\n   ELSE DestReg \u001b DestReg - 1;\n   FI;\nELSE IF OperandSize = 16\n   THEN\n      (ES:DestReg) \u001b AX;\n      IF DF = 0\n      THEN DestReg \u001b DestReg + 2;\n      ELSE DestReg \u001b DestReg - 2;\n      FI;\n   ELSE (* OperandSize = 32 *)\n      (ES:DestReg) \u001b EAX;\n      IF DF = 0\n      THEN DestReg \u001b DestReg + 4;\n      ELSE DestReg \u001b DestReg - 4;\n      FI;\n   FI;\nFI;\n\nDescription\n\nSTOS transfers the contents of all AL, AX, or EAX register to the memory\nbyte or word given by the destination register relative to the ES segment.\nThe destination register is DI for an address-size attribute of 16 bits or\nEDI for an address-size attribute of 32 bits.\n\nThe destination operand must be addressable from the ES register. A segment\noverride is not possible.\n\nThe address of the destination is determined by the contents of the\ndestination register, not by the explicit operand of STOS. This operand is\nused only to validate ES segment addressability and to determine the data\ntype. Load the correct index value into the destination register before\nexecuting STOS.\n\nAfter the transfer is made, DI is automatically updated. If the direction\nflag is 0 (CLD was executed), DI is incremented; if the direction flag is\n1 (STD was executed), DI is decremented. DI is incremented or decremented by\n1 if a byte is stored, by 2 if a word is stored, or by 4 if a doubleword is\nstored.\n\nSTOSB, STOSW, and STOSD are synonyms for the byte, word, and doubleword STOS\ninstructions, that do not require an operand. They are simpler to use, but\nprovide no type or segment checking.\n\nSTOS can be preceded by the REP prefix for a block fill of CX or ECX bytes,\nwords, or doublewords. Refer to the REP instruction for further details.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nSTR  Store Task Register\n\nOpcode        Instruction   Clocks       Description\n\n0F  00 /1     STR r/m16     pm=23/27     Load EA word into task register\n\n\nOperation\n\nr/m \u001b task register;\n\nDescription\n\nThe contents of the task register are copied to the two-byte register or\nmemory location indicated by the effective address operand.\n\nSTR is used only in operating system software. It is not used in application\nprograms.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 6; STR is not recognized in Real Address Mode\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode\n\nNotes\n\nThe operand-size attribute has no effect on this instruction.\n\n\nSUB  Integer Subtraction\n\nOpcode      Instruction      Clocks   Description\n\n2C  ib      SUB AL,imm8      2        Subtract immediate byte from AL\n2D  iw      SUB AX,imm16     2        Subtract immediate word from AX\n2D  id      SUB EAX,imm32    2        Subtract immediate dword from EAX\n80  /5 ib   SUB r/m8,imm8    2/7      Subtract immediate byte from r/m byte\n81  /5 iw   SUB r/m16,imm16  2/7      Subtract immediate word from r/m word\n81  /5 id   SUB r/m32,imm32  2/7      Subtract immediate dword from r/m\n                                      dword\n83  /5 ib   SUB r/m16,imm8   2/7      Subtract sign-extended immediate byte\n                                      from r/m word\n83  /5 ib   SUB r/m32,imm8   2/7      Subtract sign-extended immediate byte\n                                      from r/m dword\n28  /r      SUB r/m8,r8      2/6      Subtract byte register from r/m byte\n29  /r      SUB r/m16,r16    2/6      Subtract word register from r/m word\n29  /r      SUB r/m32,r32    2/6      Subtract dword register from r/m\n                                      dword\n2A  /r      SUB r8,r/m8      2/7      Subtract byte register from r/m byte\n2B  /r      SUB r16,r/m16    2/7      Subtract word register from r/m word\n2B  /r      SUB r32,r/m32    2/7      Subtract dword register from r/m\n                                      dword\n\n\nOperation\n\nIF SRC is a byte and DEST is a word or dword\nTHEN DEST = DEST - SignExtend(SRC);\nELSE DEST \u001b DEST - SRC;\nFI;\n\nDescription\n\nSUB subtracts the second operand (SRC) from the first operand (DEST). The\nfirst operand is assigned the result of the subtraction, and the flags are\nset accordingly.\n\nWhen an immediate byte value is subtracted from a word operand, the\nimmediate value is first sign-extended to the size of the destination\noperand.\n\nFlags Affected\n\nOF, SF, ZF, AF, PF, and CF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nTEST  Logical Compare\n\nOpcode       Instruction       Clocks   Description\n\nA8   ib      TEST AL,imm8      2        AND immediate byte with AL\nA9   iw      TEST AX,imm16     2        AND immediate word with AX\nA9   id      TEST EAX,imm32    2        AND immediate dword with EAX\nF6   /0 ib   TEST r/m8,imm8    2/5      AND immediate byte with r/m byte\nF7   /0 iw   TEST r/m16,imm16  2/5      AND immediate word with r/m word\nF7   /0 id   TEST r/m32,imm32  2/5      AND immediate dword with r/m dword\n84   /r      TEST r/m8,r8      2/5      AND byte register with r/m byte\n85   /r      TEST r/m16,r16    2/5      AND word register with r/m word\n85   /r      TEST r/m32,r32    2/5      AND dword register with r/m dword\n\n\nOperation\n\nDEST : = LeftSRC AND RightSRC;\nCF \u001b 0;\nOF \u001b 0;\n\nDescription\n\nTEST computes the bit-wise logical AND of its two operands. Each bit\nof the result is 1 if both of the corresponding bits of the operands are 1;\notherwise, each bit is 0. The result of the operation is discarded and only\nthe flags are modified.\n\nFlags Affected\n\nOF = 0, CF = 0; SF, ZF, and PF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nVERR, VERW  Verify a Segment for Reading or Writing\n\nOpcode       Instruction   Clocks      Description\n\n0F  00 /4    VERR r/m16    pm=10/11    Set ZF=1 if segment can be read,\n                                       selector in r/m16\n0F  00 /5    VERW r/m16    pm=15/16    Set ZF=1 if segment can be written,\n                                       selector in r/m16\n\n\nOperation\n\nIF segment with selector at (r/m) is accessible\n   with current protection level\n   AND ((segment is readable for VERR) OR\n      (segment is writable for VERW))\nTHEN ZF \u001b 0;\nELSE ZF \u001b 1;\nFI;\n\nDescription\n\nThe two-byte register or memory operand of VERR and VERW contains\nthe value of a selector. VERR and VERW determine whether the\nsegment denoted by the selector is reachable from the current privilege\nlevel and whether the segment is readable (VERR) or writable (VERW).\nIf the segment is accessible, the zero flag is set to 1; if the segment is\nnot accessible, the zero flag is set to 0. To set ZF, the following\nconditions must be met:\n\n    The selector must denote a descriptor within the bounds of the table\n     (GDT or LDT); the selector must be \"defined.\"\n\n    The selector must denote the descriptor of a code or data segment\n     (not that of a task state segment, LDT, or a gate).\n\n    For VERR, the segment must be readable. For VERW, the segment\n     must be a writable data segment.\n\n    If the code segment is readable and conforming, the descriptor\n     privilege level (DPL) can be any value for VERR. Otherwise, the\n     DPL must be greater than or equal to (have less or the same\n     privilege as) both the current privilege level and the selector's RPL.\n\nThe validation performed is the same as if the segment were loaded into\nDS, ES, FS, or GS, and the indicated access (read or write) were\nperformed. The zero flag receives the result of the validation. The\nselector's value cannot result in a protection exception, enabling the\nsoftware to anticipate possible segment access problems.\n\nFlags Affected\n\nZF as described above\n\nProtected Mode Exceptions\n\nFaults generated by illegal addressing of the memory operand that\ncontains the selector, the selector is not loaded into any segment\nregister, and no faults attributable to the selector operand are generated\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 6; VERR and VERW are not recognized in Real Address Mode\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nWAIT  Wait until BUSY# Pin is Inactive (HIGH)\n\nOpcode   Instruction   Clocks     Description\n\n9B       WAIT          6 min.     Wait until BUSY pin is inactive (HIGH)\n\n\nDescription\n\nWAIT suspends execution of 80386 instructions until the BUSY# pin is\ninactive (high). The BUSY# pin is driven by the 80287 numeric processor\nextension.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#NM if the task-switched flag in the machine status word (the lower 16 bits\nof register CR0) is set; #MF if the ERROR# input pin is asserted (i.e., the\n80287 has detected an unmasked numeric error)\n\nReal Address Mode Exceptions\n\nSame exceptions as in Protected Mode\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Protected Mode\n\n\nXCHG  Exchange Register/Memory with Register\n\nOpcode    Instruction      Clocks     Description\n\n90 + r    XCHG AX,r16      3          Exchange word register with AX\n90 + r    XCHG r16,AX      3          Exchange word register with AX\n90 + r    XCHG EAX,r32     3          Exchange dword register with EAX\n90 + r    XCHG r32,EAX     3          Exchange dword register with EAX\n86  /r    XCHG r/m8,r8     3          Exchange byte register with EA byte\n86  /r    XCHG r8,r/m8     3/5        Exchange byte register with EA byte\n87  /r    XCHG r/m16,r16   3          Exchange word register with EA word\n87  /r    XCHG r16,r/m16   3/5        Exchange word register with EA word\n87  /r    XCHG r/m32,r32   3          Exchange dword register with EA dword\n87  /r    XCHG r32,r/m32   3/5        Exchange dword register with EA dword\n\n\nOperation\n\ntemp \u001b DEST\nDEST \u001b SRC\nSRC \u001b temp\n\nDescription\n\nXCHG exchanges two operands. The operands can be in either order. If a\nmemory operand is involved, BUS LOCK is asserted for the duration of the\nexchange, regardless of the presence or absence of the LOCK prefix or of the\nvalue of the IOPL.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if either operand is in a nonwritable segment; #GP(0) for an\nillegal memory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nXLAT/XLATB  Table Look-up Translation\n\nD7    XLAT m8    5     Set AL to memory byte DS:[(E)BX + unsigned AL]\nD7    XLATB      5     Set AL to memory byte DS:[(E)BX + unsigned AL]\n\n\nOperation\n\nIF AddressSize = 16\nTHEN\n   AL \u001b (BX + ZeroExtend(AL))\nELSE (* AddressSize = 32 *)\n   AL \u001b (EBX + ZeroExtend(AL));\nFI;\n\nDescription\n\nXLAT changes the AL register from the table index to the table entry. AL\nshould be the unsigned index into a table addressed by DS:BX (for an\naddress-size attribute of 16 bits) or DS:EBX (for an address-size attribute\nof 32 bits).\n\nThe operand to XLAT allows for the possibility of a segment override. XLAT\nuses the contents of BX even if they differ from the offset of the operand.\nThe offset of the operand should have been moved intoBX/EBX with a previous\ninstruction.\n\nThe no-operand form, XLATB, can be used if the BX/EBX table will always\nreside in the DS segment.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS, ES,\nFS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nXOR  Logical Exclusive OR\n\n\nOpcode      Instruction      Clocks   Description\n\n34  ib      XOR AL,imm8      2        Exclusive-OR immediate byte to AL\n35  iw      XOR AX,imm16     2        Exclusive-OR immediate word to AX\n35  id      XOR EAX,imm32    2        Exclusive-OR immediate dword to EAX\n80  /6 ib   XOR r/m8,imm8    2/7      Exclusive-OR immediate byte to r/m\n                                      byte\n81  /6 iw   XOR r/m16,imm16  2/7      Exclusive-OR immediate word to r/m\n                                      word\n81  /6 id   XOR r/m32,imm32  2/7      Exclusive-OR immediate dword to r/m\n                                      dword\n83  /6 ib   XOR r/m16,imm8   2/7      XOR sign-extended immediate byte\n                                      with r/m word\n83  /6 ib   XOR r/m32,imm8   2/7      XOR sign-extended immediate byte\n                                      with r/m dword\n30  /r      XOR r/m8,r8      2/6      Exclusive-OR byte register to r/m\n                                      byte\n31  /r      XOR r/m16,r16    2/6      Exclusive-OR word register to r/m\n                                      word\n31  /r      XOR r/m32,r32    2/6      Exclusive-OR dword register to r/m\n                                      dword\n32  /r      XOR r8,r/m8      2/7      Exclusive-OR byte register to r/m\n                                      byte\n33  /r      XOR r16,r/m16    2/7      Exclusive-OR word register to r/m\n                                      word\n33  /r      XOR r32,r/m32    2/7      Exclusive-OR dword register to r/m\n                                      dword\n\n\nOperation\n\nDEST \u001b LeftSRC XOR RightSRC\nCF \u001b 0\nOF \u001b 0\n\nDescription\n\nXOR computes the exclusive OR of the two operands. Each bit of the result\nis 1 if the corresponding bits of the operands are different; each bit is 0\nif the corresponding bits are the same. The answer replaces the first\noperand.\n\nFlags Affected\n\nCF = 0, OF = 0; SF, ZF, and PF as described in Appendix C; AF is undefined\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nAppendix A  Opcode Map\n\n\n\nThe opcode tables that follow aid in interpreting 80386 object code. Use\nthe high-order four bits of the opcode as an index to a row of the opcode\ntable; use the low-order four bits as an index to a column of the table. If\nthe opcode is 0FH, refer to the two-byte opcode table and use the second\nbyte of the opcode to index the rows and columns of that table.\n\n\nKey to Abbreviations\n\nOperands are identified by a two-character code of the form Zz. The first\ncharacter, an uppercase letter, specifies the addressing method; the second\ncharacter, a lowercase letter, specifies the type of operand.\n\n\nCodes for Addressing Method\n\nA  Direct address; the instruction has no modR/M byte; the address of the\n   operand is encoded in the instruction; no base register, index register,\n   or scaling factor can be applied; e.g., far JMP (EA).\n\nC  The reg field of the modR/M byte selects a control register; e.g., MOV\n   (0F20, 0F22).\n\nD  The reg field of the modR/M byte selects a debug register; e.g., MOV\n   (0F21,0F23).\n\nE  A modR/M byte follows the opcode and specifies the operand. The operand\n   is either a general register or a memory address. If it is a memory\n   address, the address is computed from a segment register and any of the\n   following values: a base register, an index register, a scaling factor,\n   a displacement.\n\nF  Flags Register.\n\nG  The reg field of the modR/M byte selects a general register; e.g., ADD\n   (00).\n\nI  Immediate data. The value of the operand is encoded in subsequent bytes\n   of the instruction.\n\nJ  The instruction contains a relative offset to be added to the\n   instruction pointer register; e.g., JMP short, LOOP.\n\nM  The modR/M byte may refer only to memory; e.g., BOUND, LES, LDS, LSS,\n   LFS, LGS.\n\nO  The instruction has no modR/M byte; the offset of the operand is coded as\n   a word or double word (depending on address size attribute) in the\n   instruction. No base register, index register, or scaling factor can be\n   applied; e.g., MOV (A0-A3).\n\nR  The mod field of the modR/M byte may refer only to a general register;\n   e.g., MOV (0F20-0F24, 0F26).\n\nS  The reg field of the modR/M byte selects a segment register; e.g., MOV\n   (8C,8E).\n\nT  The reg field of the modR/M byte selects a test register; e.g., MOV\n   (0F24,0F26).\n\nX  Memory addressed by DS:SI; e.g., MOVS, COMPS, OUTS, LODS, SCAS.\n\nY  Memory addressed by ES:DI; e.g., MOVS, CMPS, INS, STOS.\n\n\nCodes for Operant Type\n\na  Two one-word operands in memory or two double-word operands in memory,\n   depending on operand size attribute (used only by BOUND).\n\nb  Byte (regardless of operand size attribute)\n\nc  Byte or word, depending on operand size attribute.\n\nd  Double word (regardless of operand size attribute)\n\np  32-bit or 48-bit pointer, depending on operand size attribute.\n\ns  Six-byte pseudo-descriptor\n\nv  Word or double word, depending on operand size attribute.\n\nw  Word (regardless of operand size attribute)\n\n\nRegister Codes\n\nWhen an operand is a specific register encoded in the opcode, the register\nis identified by its name; e.g., AX, CL, or ESI. The name of the register\nindicates whether the register is 32-, 16-, or 8-bits wide. A register\nidentifier of the form eXX is used when the width of the register depends on\nthe operand size attribute; for example, eAX indicates that the AX register\nis used when the operand size attribute is 16 and the EAX register is used\nwhen the operand size attribute is 32.\n\n\nOne-Byte Opcode Map\n\n\n       0         1         2         3         4         5         6        7        8         9         A         B         C         D         E        F\n ͻ\n                               ADD                            PUSH     POP                               OR                              PUSH   2-byte \n0Ĵ                Ĵ                \n   Eb,Gb    Ev,Gv    Gb,Eb    Gv,Ev    AL,Ib   eAX,Iv     ES      ES     Eb,Gb    Ev,Gv    Gb,Eb    Gv,Ev    AL,Ib   eAX,Iv     CS    escape \n ͹\n                               ADC                            PUSH     POP                              SBB                              PUSH    POP   \n1Ĵ                Ĵ                \n   Eb,Gb    Ev,Gv    Gb,Eb    Gv,Ev    AL,Ib   eAX,Iv     SS      SS     Eb,Gb    Ev,Gv    Gb,Eb    Gv,Ev    AL,Ib   eAX,Iv     DS      DS   \n ͹\n                               AND                            SEG                                       SUB                              SEG           \n2Ĵ           DAA  Ĵ          DAS   \n   Eb,Gb    Ev,Gv    Gb,Eb    Gv,Ev    AL,Ib   eAX,Iv    =ES             Eb,Gb    Ev,Gv    Gb,Eb    Gv,Ev    AL,Ib   eAX,Iv    =CS           \n ͹\n                               XOR                            SEG                                       CMP                              SEG           \n3Ĵ           AAA  Ĵ          AAS   \n   Eb,Gb    Ev,Gv    Gb,Eb    Gv,Ev    AL,Ib   eAX,Iv    =SS             Eb,Gb    Ev,Gv    Gb,Eb    Gv,Ev    AL,Ib   eAX,Iv    =CS           \n ͹\n                                INC general register                                                        DEC general register                           \n4Ķ\n    eAX      eCX      eDX      eBX      eSP      eBP     eSI     eDI      eAX      eCX      eDX      eBX      eSP      eBP      eSI    eDI   \n ͹\n                                PUSH general register                                                   POP into general register                          \n5Ķ\n    eAX      eCX      eDX      eBX      eSP      eBP     eSI     eDI      eAX      eCX      eDX      eBX      eSP      eBP     eSI     eDI   \n ͹\n                     BOUND    ARPL      SEG      SEG    Operand Address  PUSH     IMUL     PUSH     IMUL     INSB    INSW/D   OUTSB  OUTSW/D \n6  PUSHA    POPA                                                                                                                             \n                     Gv,Ma    Ew,Rw     =FS      =GS     Size    Size     Ib     GvEvIv     Ib     GvEvIv    Yb,DX    Yb,DX   Dx,Xb   DX,Xv  \n ͹\n                     Short displacement jump of condition (Jb)                                   Short-displacement jump on condition(Jb)                  \n7Ķ\n    JO       JNO      JB       JNB      JZ      JNZ       JBE    JNBE     JS       JNS      JP       JNP      JL      JNL      JLE     JNLE  \n ͹\n   Immediate Grpl              Grpl          TEST              XCNG                        MOV                      MOV      LEA     MOV     POP   \n8Ĵ                  Ĵ                                  \n   Eb,Ib    Ev,Iv             Ev,Iv    Eb,Gb    Ev,Gv    Eb,Gb   Ev,Gv   Eb,Gb    Ev,Gv    Gb,Eb    Gv,Ev    Ew,Sw    Gv,M     Sw,Ew    Ev   \n ͹\n                        XCHG word or double-word register with eAX                               CALL              PUSHF    POPF                   \n9   NOP   Ĵ   CBW      CWD              WAIT                       SAHF    LAHF  \n             eCX      eDX      eBX      eSP      eBP     eSI     eDI                        Ap                Fv       Fv                    \n ͹\n                   MOV                    MOVSB   MOVSW/D  CMPSB  CMPSW/D        TEST          STOSB   STOSW/D   LODSB   LODSW/D  SCASB  SCASW/D \nAĴ                                  Ĵ                                                    \n   AL,Ob    eAX,Ov   Ob,AL    Ov,eAX   Xb,Yb    Xv,Yv    Xb,Yb   Xv,Yv   AL,Ib   eAX,Iv    Yb,AL    Yv,eAX   AL,Xb   eAX,Xv    AL,Xb eAX,Xv  \n ͹\n                        MOV immediate byte into byte register                         MOV immediate word or double into word or double register            \nBĶ\n     AL      CL       DL       BL       AH       CH       DH      BH      eAX      eCX      eDX      eBX      eSP      eBP      eSI    eDI   \n ͹\n     Shift Grp2           RET near        LES      LDS          MOV         ENTER                 RET far        INT      INT                    \nCĴ                  Ĵ           LEAVE  Ĵ                    INTO    IRET  \n   Eb,Ib    Ev,Iv      Iw              Gv,Mp    Gv,Mp    Eb,Ib   Ev,Iv   Iw,Ib              Iw                3       Ib                     \n ͹\n                Shift Grp2                                                                                                                             \nDĴ   AAM      AAD             XLAT                    ESC(Escape to coprocessor instruction set)                 \n    Eb,1    Ev,1     Eb,CL    Ev,CL                                                                                                                 \n ͹\n  LOOPNE    LOOPE     LOOP    JCXZ           IN                OUT          CALL               JNP                     IN                OUT       \nE                                    Ĵ         Ķ\n    Jb       Jb        Jb      Jb      AL,Ib   eAX,Ib    Ib,AL  Ib,eAX     Av      Jv       Ap       Jb      AL,DX   eAX,DX   DX,AL   DX,eAX \n ͹\n                               REP                          Unary Grp3                                                        INC/DEC Indirct \nF  LOCK              REPNE              HLT      CMC   Ĵ   CLC      STC      CLI      STI      CLD      STD                   \n                              REPE                        Eb      Ev                                                           Grp4    Grp5  \n ͼ\n\n\nTwo-Byte Opcode Map (first byte is 0FH)\n\n\n      0         1         2         3         4         5         6        7        8         9         A         B         C         D         E        F\n ͻ\n                      LAR      LSL                                                                                                           \n0  Grp6     Grp7                                         CLTS                                                                                \n                     Gw,Ew    Gv,Ew                                                                                                          \n ͹\n                                                                                                                                             \n1                                                                                                                                            \n                                                                                                                                             \n ͹\n    MOV      MOV      MOV      MOV      MOV               MOV                                                                                \n2                                                                                                                                            \n   Cd,Rd    Dd,Rd    Rd,Cd    Rd,Dd    Td,Rd             Rd,Td                                                                               \n ͹\n                                                                                                                                             \n3                                                                                                                                            \n                                                                                                                                             \n ͹\n                                                                                                                                             \n4                                                                                                                                            \n                                                                                                                                             \n ͹\n                                                                                                                                             \n5                                                                                                                                            \n                                                                                                                                             \n ͹\n                                                                                                                                             \n6                                                                                                                                            \n                                                                                                                                             \n ͹\n                                                                                                                                             \n7                                                                                                                                            \n                                                                                                                                             \n ͹\n                       Long-displacement jump on condition (Jv)                                Long-displacement jump on condition (Jv)                    \n8Ķ\n    JO       JNO      JB       JNB      JZ       JNZ      JBE    JNBE     JS       JNS      JP       JNP      JL       JNL      JLE    JNLE  \n ͹\n                               Byte Set on condition (Eb)                                                                                           \n9Ĵ  SETS     SETNS    SETP     SETNP    SETL     SETNL    SETLE  SETNLE \n   SETO     SETNO    SETB     SETNB    SETZ     SETNZ    SETBE  SETNBE                                                                       \n ͹\n   PUSH      POP               BT      SHLD     SHLD                     PUSH      POP               BTS     SHRD     SHRD             IMUL  \nA                                                                                                                                            \n    FS       FS               Ev,Gv   EvGvIb   EvGvCL                     GS       GS               Ev,Gv   EvGvIb   EvGvCL           Gv,Ev  \n ͹\n                      LSS      BTR      LFS      LGS         MOVZX                          Grp-8     BTC      BSF      BSR         MOVSX      \nB                                                      Ĵ                                                      Ķ\n                      Mp      Ev,Gv     Mp       Mp     Gv,Eb   Gv,Ew                      Ev,Ib    Ev,Gv    Gv,Ev    Gv,Ev    Gv,Eb   Gv,Ew  \n ͹\n                                                                                                                                             \nC                                                                                                                                            \n                                                                                                                                             \n ͹\n                                                                                                                                             \nD                                                                                                                                            \n                                                                                                                                             \n ͹\n                                                                                                                                             \nE                                                                                                                                            \n                                                                                                                                             \n ͹\n                                                                                                                                             \nF                                                                                                                                            \n                                                                                                                                             \n ͼ\n\n\nOpcodes determined by bits 5,4,3 of modR/M byte:\n\n     G                       Ŀ\n     r                         mod    nnn    R/M  \n     o                       \n     u\n     p   000     001     010     011     100     101     110     111\n      Ŀ\n     1  ADD    OR     ADC    SBB    AND    SUB    XOR    CMP  \n                                                              \n      Ĵ\n     2  ROL    ROR    RCL    RCR    SHL    SHR           SAR  \n                                                              \n      Ĵ\n     3 TEST           NOT    NEG    MUL   IMUL    DIV   IDIV  \n       Ib/Iv                      AL/eAX AL/eAX AL/eAX AL/eAX \n      Ĵ\n     4  INC    DEC                                            \n        Eb     Eb                                             \n      Ĵ\n     5  INC    DEC   CALL   CALL    JMP    JMP   PUSH         \n        Ev     Ev     Ev     eP     Ev     Ep     Ev          \n      \n\n\nOpcodes determined by bits 5,4,3 of modR/M byte:\n\n     G                       Ŀ\n     r                         mod    nnn    R/M  \n     o                       \n     u\n     p   000     001     010     011     100     101     110     111\n      Ŀ\n     6 SLDT    STR   LLDT    LTR   VERR   VERW                \n        Ew     Ew     Ew     Ew     Ew     Ew                 \n      Ĵ\n     7 SGDT   SIDT   LGDT   LIDT   SMSW          LMSW         \n        Ms     Ms     Ms      Ms    Ew            Ew          \n      Ĵ\n     8                              BT     BTS    BTR    BTC  \n                                                              \n      \n\n\nAppendix B  Complete Flag Cross-Reference\n\n\n\nKey to Codes\n\nT     = instruction tests flag\n\nM     = instruction modifies flag\n        (either sets or resets depending on operands)\n\n0     = instruction resets flag\n\n1     = instruction sets flag\n\n    = instruction's effect on flag is undefined\n\nR     = instruction restores prior value of flag\n\nblank = instruction does not affect flag\n\n\nInstruction            OF   SF   ZF   AF   PF   CF   TF   IF   DF   NT   RF\n\nAAA                             TM      M\nAAD                       M    M       M    \nAAM                       M    M       M    \nAAS                             TM      M\nADC                    M    M    M    M    M    TM\nADD                    M    M    M    M    M    M\nAND                    0    M    M       M    0\nARPL                             M\nBOUND\nBSF/BSR                      M          \nBT/BTS/BTR/BTC                        M\nCALL\nCBW\nCLC                                             0\nCLD                                                            0\nCLI                                                       0\nCLTS\nCMC                                             M\nCMP                    M    M    M    M    M    M\nCMPS                   M    M    M    M    M    M              T\nCWD\nDAA                       M    M    TM   M    TM\nDAS                       M    M    TM   M    TM\nDEC                    M    M    M    M    M\nDIV                                   \nENTER\nESC\nHLT\nIDIV                                  \nIMUL                   M                M\nIN\nINC                    M    M    M    M    M\nINS                                                            T\nINT                                                  0              0\nINTO                   T                             0              0\nIRET                   R    R    R    R    R    R    R    R    R    T\nJcond                  T    T    T    T    T\nJCXZ\nJMP\nLAHF\nLAR                              M\nLDS/LES/LSS/LFS/LGS\nLEA\nLEAVE\nLGDT/LIDT/LLDT/LMSW\nLOCK\nLODS                                                           T\nLOOP\nLOOPE/LOOPNE                     T\nLSL                              M\nLTR\nMOV\nMOV control, debug                    \nMOVS                                                           T\nMOVSX/MOVZX\nMUL                    M                M\nNEG                    M    M    M    M    M    M\nNOP\nNOT\nOR                     0    M    M       M    0\nOUT\nOUTS                                                           T\nPOP/POPA\nPOPF                   R    R    R    R    R    R    R    R    R    R\nPUSH/PUSHA/PUSHF\nRCL/RCR 1              M                        TM\nRCL/RCR count                                 TM\nREP/REPE/REPNE\nRET\nROL/ROR 1              M                        M\nROL/ROR count                                 M\nSAHF                        R    R    R    R    R\nSAL/SAR/SHL/SHR 1      M    M    M       M    M\nSAL/SAR/SHL/SHR count     M    M       M    M\nSBB                    M    M    M    M    M    TM\nSCAS                   M    M    M    M    M    M              T\nSET cond               T    T    T         T    T\nSGDT/SIDT/SLDT/SMSW\nSHLD/SHRD                 M    M       M    M\nSTC                                             1\nSTD                                                            1\nSTI                                                       1\nSTOS                                                           T\nSTR\nSUB                    M    M    M    M    M    M\nTEST                   0    M    M       M    0\nVERR/VERRW                       M\nWAIT\nXCHG\nXLAT\nXOR                    0    M    M       M    0\n\n\nAppendix C  Status Flag Summary\n\n\n\nStatus Flags' Functions\n\nBit  Name   Function\n\n 0   CF     Carry Flag  Set on high-order bit carry or borrow; cleared\n            otherwise.\n 2   PF     Parity Flag  Set if low-order eight bits of result contain\n            an even number of 1 bits; cleared otherwise.\n 4   AF     Adjust flag  Set on carry from or borrow to the low order\n            four bits of   AL; cleared otherwise. Used for decimal\n            arithmetic.\n 6   ZF     Zero Flag  Set if result is zero; cleared otherwise.\n 7   SF     Sign Flag  Set equal to high-order bit of result (0 is\n            positive, 1 if negative).\n11   OF     Overflow Flag  Set if result is too large a positive number\n            or too small a negative number (excluding sign-bit) to fit in\n            destination operand; cleared otherwise.\n\nKey to Codes\n\nT     = instruction tests flag\nM     = instruction modifies flag\n        (either sets or resets depending on operands)\n0     = instruction resets flag\n    = instruction's effect on flag is undefined\nblank = instruction does not affect flag\n\n\n\nInstruction            OF   SF   ZF   AF   PF   CF\nAAA                             TM      M\nAAS                             TM      M\nAAD                       M    M       M    \nAAM                       M    M       M    \nDAA                       M    M    TM   M    TM\nDAS                       M    M    TM   M    TM\nADC                    M    M    M    M    M    TM\nADD                    M    M    M    M    M    M\nSBB                    M    M    M    M    M    TM\nSUB                    M    M    M    M    M    M\nCMP                    M    M    M    M    M    M\nCMPS                   M    M    M    M    M    M\nSCAS                   M    M    M    M    M    M\nNEG                    M    M    M    M    M    M\nDEC                    M    M    M    M    M\nINC                    M    M    M    M    M\nIMUL                   M                M\nMUL                    M                M\nRCL/RCR 1              M                        TM\nRCL/RCR count                                 TM\nROL/ROR 1              M                        M\nROL/ROR count                                 M\nSAL/SAR/SHL/SHR 1      M    M    M       M    M\nSAL/SAR/SHL/SHR count     M    M       M    M\nSHLD/SHRD                 M    M       M    M\nBSF/BSR                      M          \nBT/BTS/BTR/BTC                        M\nAND                    0    M    M       M    0\nOR                     0    M    M       M    0\nTEST                   0    M    M       M    0\nXOR                    0    M    M       M    0\n\n\nAppendix D  Condition Codes\n\n\n\n\nNote:\n  The terms \"above\" and \"below\" refer to the relation between two\n  unsigned values (neither SF nor OF is tested). The terms \"greater\" and\n  \"less\" refer to the relation between two signed values (SF and OF are\n  tested).\n\n\nDefinition of Conditions\n\n(For conditional instructions Jcond, and SETcond)\n\n\n                                       Instruction  Condition\nMnemonic  Meaning                      Subcode      Tested\n\nO         Overflow                     0000         OF = 1\n\nNO        No overflow                  0001         OF = 0\n\nB         Below\nNAE       Neither above nor equal      0010         CF = 1\n\nNB        Not below\nAE       Above or equal                0011         CF = 0\n\nE         Equal\nZ         Zero                         0100         ZF = 1\n\nNE        Not equal\nNZ        Not zero                     0101         ZF = 0\n\nBE        Below or equal\nNA        Not above                    0110         (CF or ZF) = 1\n\nNBE       Neither below nor equal\nNA        Above                        0111         (CF or ZF) = 0\n\nS         Sign                         1000         SF = 1\n\nNS        No sign                      1001         SF = 0\n\nP         Parity\nPE        Parity even                  1010         PF = 1\n\nNP        No parity\nPO        Parity odd                   1011         PF = 0\n\nL         Less\nNGE       Neither greater nor equal    1100         (SF xor OF) = 1\n\nNL        Not less\nGE        Greater or equal             1101         (SF xor OF) = 0\n\nLE        Less or equal\nNG        Not greater                  1110         ((SF xor OF) or ZF) = 1\n\nNLE       Neither less nor equal\nG         Greater                      1111         ((SF xor OF) or ZF) = 0\n"
  },
  {
    "path": "benchmarks/haystacks/sliceslice/i386.txt",
    "content": "INTEL 80386 PROGRAMMER'S REFERENCE MANUAL 1986\n\nIntel Corporation makes no warranty for the use of its products and\nassumes no responsibility for any errors which may appear in this document\nnor does it make a commitment to update the information contained herein.\n\nIntel retains the right to make changes to these specifications at any\ntime, without notice.\n\nContact your local sales office to obtain the latest specifications before\nplacing your order.\n\nThe following are trademarks of Intel Corporation and may only be used to\nidentify Intel Products:\n\nAbove, BITBUS, COMMputer, CREDIT, Data Pipeline, FASTPATH, Genius, i, ,\nICE, iCEL, iCS, iDBP, iDIS, IICE, iLBX, im, iMDDX, iMMX, Inboard,\nInsite, Intel, intel, intelBOS, Intel Certified, Intelevision,\ninteligent Identifier, inteligent Programming, Intellec, Intellink,\niOSP, iPDS, iPSC, iRMK, iRMX, iSBC, iSBX, iSDM, iSXM, KEPROM, Library\nManager, MAPNET, MCS, Megachassis, MICROMAINFRAME, MULTIBUS, MULTICHANNEL,\nMULTIMODULE, MultiSERVER, ONCE, OpenNET, OTP, PC BUBBLE, Plug-A-Bubble,\nPROMPT, Promware, QUEST, QueX, Quick-Pulse Programming, Ripplemode, RMX/80,\nRUPI, Seamless, SLD, SugarCube, SupportNET, UPI, and VLSiCEL, and the\ncombination of ICE, iCS, iRMX, iSBC, iSBX, iSXM, MCS, or UPI and a numerical\nsuffix, 4-SITE.\n\nMDS is an ordering code only and is not used as a product name or\ntrademark. MDS(R) is a registered trademark of Mohawk Data Sciences\nCorporation.\n\nAdditional copies of this manual or other Intel literature may be obtained\nfrom:\n\nIntel Corporation\nLiterature Distribution\nMail Stop SC6-59\n3065 Bowers Avenue\nSanta Clara, CA 95051\n\n(c)INTEL CORPORATION 1987    CG-5/26/87\n\n\nCustomer Support\n\n\n\nCustomer Support is Intel's complete support service that provides Intel\ncustomers with hardware support, software support, customer training, and\nconsulting services. For more information contact your local sales offices.\n\nAfter a customer purchases any system hardware or software product,\nservice and support become major factors in determining whether that\nproduct will continue to meet a customer's expectations. Such support\nrequires an international support organization and a breadth of programs\nto meet a variety of customer needs. As you might expect, Intel's customer\nsupport is quite extensive. It includes factory repair services and\nworldwide field service offices providing hardware repair services,\nsoftware support services, customer training classes, and consulting\nservices.\n\nHardware Support Services\n\nIntel is committed to providing an international service support package\nthrough a wide variety of service offerings available from Intel Hardware\nSupport.\n\nSoftware Support Services\n\nIntel's software support consists of two levels of contracts. Standard\nsupport includes TIPS (Technical Information Phone Service), updates and\nsubscription service (product-specific troubleshooting guides and COMMENTS\nMagazine). Basic support includes updates and the subscription service.\nContracts are sold in environments which represent product groupings\n(i.e., iRMX environment).\n\nConsulting Services\n\nIntel provides field systems engineering services for any phase of your\ndevelopment or support effort. You can use our systems engineers in a\nvariety of ways ranging from assistance in using a new product, developing\nan application, personalizing training, and customizing or tailoring an\nIntel product to providing technical and management consulting. Systems\nEngineers are well versed in technical areas such as microcommunications,\nreal-time applications, embedded microcontrollers, and network services.\nYou know your application needs; we know our products. Working together we\ncan help you get a successful product to market in the least possible time.\n\nCustomer Training\n\nIntel offers a wide range of instructional programs covering various\naspects of system design and implementation. In just three to ten days a\nlimited number of individuals learn more in a single workshop than in\nweeks of self-study. For optimum convenience, workshops are scheduled\nregularly at Training Centers woridwide or we can take our workshops to\nyou for on-site instruction. Covering a wide variety of topics, Intel's\nmajor course categories include: architecture and assembly language,\nprogramming and operating systems, bitbus and LAN applications.\n\nTraining Center Locations\n\nTo obtain a complete catalog of our workshops, call the nearest Training\nCenter in your area.\n\nBoston                    (617) 692-1000\nChicago                   (312) 310-5700\nSan Francisco             (415) 940-7800\nWashington D.C.           (301) 474-2878\nIsreal                    (972) 349-491-099\nTokyo                     03-437-6611\nOsaka (Call Tokyo)        03-437-6611\nToronto, Canada           (416) 675-2105\nLondon                    (0793) 696-000\nMunich                    (089) 5389-1\nParis                     (01) 687-22-21\nStockholm                 (468) 734-01-00\nMilan                     39-2-82-44-071\nBenelux (Rotterdam)       (10) 21-23-77\nCopenhagen                (1) 198-033\nHong Kong                 5-215311-7\n\n\nTable of Contents\n\nChapter 1  Introduction to the 80386\n\n1.1  Organization of This Manual\n      1.1.1  Part I  Applications Programming\n      1.1.2  Part II  Systems Programming\n      1.1.3  Part III  Compatibility\n      1.1.4  Part IV  Instruction Set\n      1.1.5  Appendices\n\n1.2  Related Literature\n1.3  Notational Conventions\n      1.3.1  Data-Structure Formats\n      1.3.2  Undefined Bits and Software Compatibility\n      1.3.3  Instruction Operands\n      1.3.4  Hexadecimal Numbers\n      1.3.5  Sub- and Super-Scripts\n\n                     PART I    APPLICATIONS PROGRAMMING                   \n\nChapter 2  Basic Programming Model\n\n2.1  Memory Organization and Segmentation\n      2.1.1  The\"Flat\" Model\n      2.1.2  The Segmented Model\n\n2.2  Data Types\n2.3  Registers\n      2.3.1  General Registers\n      2.3.2  Segment Registers\n      2.3.3  Stack Implementation\n      2.3.4  Flags Register\n              2.3.4.1  Status Flags\n              2.3.4.2  Control Flag\n              2.3.4.3  Instruction Pointer\n\n2.4  Instruction Format\n2.5  Operand Selection\n      2.5.1  Immediate Operands\n      2.5.2  Register Operands\n      2.5.3  Memory Operands\n              2.5.3.1  Segment Selection\n              2.5.3.2  Effective-Address Computation\n\n2.6  Interrupts and Exceptions\n\nChapter 3  Applications Instruction Set\n\n3.1  Data Movement Instructions\n      3.1.1  General-Purpose Data Movement Instructions\n      3.1.2  Stack Manipulation Instructions\n      3.1.3  Type Conversion Instructions\n\n3.2  Binary Arithmetic Instructions\n      3.2.1  Addition and Subtraction Instructions\n      3.2.2  Comparison and Sign Change Instruction\n      3.2.3  Multiplication Instructions\n      3.2.4  Division Instructions\n\n3.3  Decimal Arithmetic Instructions\n      3.3.1  Packed BCD Adjustment Instructions\n      3.3.2  Unpacked BCD Adjustment Instructions\n\n3.4  Logical Instructions\n      3.4.1  Boolean Operation Instructions\n      3.4.2  Bit Test and Modify Instructions\n      3.4.3  Bit Scan Instructions\n      3.4.4  Shift and Rotate Instructions\n              3.4.4.1  Shift Instructions\n              3.4.4.2  Double-Shift Instructions\n              3.4.4.3  Rotate Instructions\n              3.4.4.4  Fast\"bit-blt\" Using Double Shift\n                         Instructions\n              3.4.4.5  Fast Bit-String Insert and Extract\n\n      3.4.5  Byte-Set-On-Condition Instructions\n      3.4.6  Test Instruction\n\n3.5  Control Transfer Instructions\n      3.5.1  Unconditional Transfer Instructions\n              3.5.1.1  Jump Instruction\n              3.5.1.2  Call Instruction\n              3.5.1.3  Return and Return-From-Interrupt Instruction\n\n      3.5.2  Conditional Transfer Instructions\n              3.5.2.1  Conditional Jump Instructions\n              3.5.2.2  Loop Instructions\n              3.5.2.3  Executing a Loop or Repeat Zero Times\n\n      3.5.3  Software-Generated Interrupts\n\n3.6  String and Character Translation Instructions\n      3.6.1  Repeat Prefixes\n      3.6.2  Indexing and Direction Flag Control\n      3.6.3  String Instructions\n\n3.7  Instructions for Block-Structured Languages\n3.8  Flag Control Instructions\n      3.8.1  Carry and Direction Flag Control Instructions\n      3.8.2  Flag Transfer Instructions\n\n3.9  Coprocessor Interface Instructions\n3.10 Segment Register Instructions\n      3.10.1  Segment-Register Transfer Instructions\n      3.10.2  Far Control Transfer Instructions\n      3.10.3  Data Pointer Instructions\n\n3.11  Miscellaneous Instructions\n       3.11.1  Address Calculation Instruction\n       3.11.2  No-Operation Instruction\n       3.11.3  Translate Instruction\n\n                       PART II    SYSTEMS PROGRAMMING                     \n\nChapter 4  Systems Architecture\n\n4.1  Systems Registers\n      4.1.1  Systems Flags\n      4.1.2  Memory-Management Registers\n      4.1.3  Control Registers\n      4.1.4  Debug Register\n      4.1.5  Test Registers\n\n4.2  Systems Instructions\n\nChapter 5  Memory Management\n\n5.1  Segment Translation\n      5.1.1  Descriptors\n      5.1.2  Descriptor Tables\n      5.1.3  Selectors\n      5.1.4  Segment Registers\n\n5.2  Page Translation\n      5.2.1  Page Frame\n      5.2.2  Linear Address\n      5.2.3  Page Tables\n      5.2.4  Page-Table Entries\n              5.2.4.1  Page Frame Address\n              5.2.4.2  Present Bit\n              5.2.4.3  Accessed and Dirty Bits\n              5.2.4.4  Read/Write and User/Supervisor Bits\n\n      5.2.5  Page Translation Cache\n\n5.3  Combining Segment and Page Translation\n      5.3.1  \"Flat\" Architecture\n      5.3.2  Segments Spanning Several Pages\n      5.3.3  Pages Spanning Several Segments\n      5.3.4  Non-Aligned Page and Segment Boundaries\n      5.3.5  Aligned Page and Segment Boundaries\n      5.3.6  Page-Table per Segment\n\nChapter 6  Protection\n\n6.1  Why Protection?\n6.2  Overview of 80386 Protection Mechanisms\n6.3  Segment-Level Protection\n      6.3.1  Descriptors Store Protection Parameters\n              6.3.1.1  Type Checking\n              6.3.1.2  Limit Checking\n              6.3.1.3  Privilege Levels\n\n      6.3.2  Restricting Access to Data\n              6.3.2.1  Accessing Data in Code Segments\n\n      6.3.3  Restricting Control Transfers\n      6.3.4  Gate Descriptors Guard Procedure Entry Points\n              6.3.4.1  Stack Switching\n              6.3.4.2  Returning from a Procedure\n\n      6.3.5  Some Instructions are Reserved for Operating System\n              6.3.5.1  Privileged Instructions\n              6.3.5.2  Sensitive Instructions\n\n      6.3.6  Instructions for Pointer Validation\n              6.3.6.1  Descriptor Validation\n              6.3.6.2  Pointer Integrity and RPL\n\n6.4  Page-Level Protection\n      6.4.1  Page-Table Entries Hold Protection Parameters\n              6.4.1.1  Restricting Addressable Domain\n              6.4.1.2  Type Checking\n\n      6.4.2  Combining Protection of Both Levels of Page Tables\n      6.4.3  Overrides to Page Protection\n\n6.5  Combining Page and Segment Protection\n\nChapter 7  Multitasking\n\n7.1  Task State Segment\n7.2  TSS Descriptor\n7.3  Task Register\n7.4  Task Gate Descriptor\n7.5  Task Switching\n7.6  Task Linking\n      7.6.1  Busy Bit Prevents Loops\n      7.6.2  Modifying Task Linkages\n\n7.7  Task Address Space\n      7.7.1  Task Linear-to-Physical Space Mapping\n      7.7.2  Task Logical Address Space\n\nChapter 8    Input/Output\n\n8.1  I/O Addressing\n      8.1.1  I/O Address Space\n      8.1.2  Memory-Mapped I/O\n\n8.2  I/O Instructions\n      8.2.1  Register I/O Instructions\n      8.2.2  Block I/O Instructions\n\n8.3  Protection and I/O\n      8.3.1  I/O Privilege Level\n      8.3.2  I/O Permission Bit Map\n\nChapter 9  Exceptions and Interrupts\n\n9.1  Identifying Interrupts\n9.2  Enabling and Disabling Interrupts\n      9.2.1  NMI Masks Further NMls\n      9.2.2  IF Masks INTR\n      9.2.3  RF Masks Debug Faults\n      9.2.4  MOV or POP to SS Masks Some Interrupts and Exceptions\n\n9.3  Priority Among Simultaneous Interrupts and Exceptions\n9.4  Interrupt Descriptor Table\n9.5  IDT Descriptors\n9.6  Interrupt Tasks and Interrupt Procedures\n      9.6.1  Interrupt Procedures\n              9.6.1.1  Stack of Interrupt Procedure\n              9.6.1.2  Returning from an Interrupt Procedure\n              9.6.1.3  Flags Usage by Interrupt Procedure\n              9.6.1.4  Protection in Interrupt Procedures\n\n      9.6.2  Interrupt Tasks\n\n9.7  Error Code\n9.8  Exception Conditions\n      9.8.1  Interrupt 0  Divide Error\n      9.8.2  Interrupt 1  Debug Exceptions\n      9.8.3  Interrupt 3  Breakpoint\n      9.8.4  Interrupt 4  Overflow\n      9.8.5  Interrupt 5  Bounds Check\n      9.8.6  Interrupt 6  Invalid Opcode\n      9.8.7  Interrupt 7  Coprocessor Not Available\n      9.8.8  Interrupt 8  Double Fault\n      9.8.9  Interrupt 9  Coprocessor Segment Overrun\n      9.8.10 Interrupt 10  Invalid TSS\n      9.8.11 Interrupt 11  Segment Not Present\n      9.8.12 Interrupt 12  Stack Exception\n      9.8.13 Interrupt 13  General Protection Exception\n      9.8.14 Interrupt 14  Page Fault\n              9.8.14.1  Page Fault during Task Switch\n              9.8.14.2  Page Fault with Inconsistent Stack Pointer\n\n      9.8.15 Interrupt 16  Coprocessor Error\n\n9.9  Exception Summary\n\n9.10  Error Code Summary\n\nChapter 10  Initialization\n\n10.1  Processor State after Reset\n10.2  Software Initialization for Real-Address Mode\n       10.2.1  Stack\n       10.2.2  Interrupt Table\n       10.2.3  First Instructions\n\n10.3  Switching to Protected Mode\n10.4  Software Initialization for Protected Mode\n       10.4.1  Interrupt Descriptor Table\n       10.4.2  Stack\n       10.4.3  Global Descriptor Table\n       10.4.4  Page Tables\n       10.4.5  First Task\n\n10.5  Initialization Example\n10.6  TLB Testing\n       10.6.1  Structure of the TLB\n       10.6.2  Test Registers\n       10.6.3  Test Operations\n\nChapter 11  Coprocessing and Multiprocessing\n\n11.1  Coprocessing\n       11.1.1  Coprocessor Identification\n       11.1.2  ESC and WAIT Instructions\n       11.1.3  EM and MP Flags\n       11.1.4  The Task-Switched Flag\n       11.1.5  Coprocessor Exceptions\n                11.1.5.1  Interrupt 7  Coprocessor Not Available\n                11.1.5.2  Interrupt 9  Coprocessor Segment Overrun\n                11.1.5.3  Interrupt 16  Coprocessor Error\n\n11.2  General Multiprocessing\n       11.2.1  LOCK and the LOCK# Signal\n       11.2.2  Automatic Locking\n       11.2.3  Cache Considerations\n\nChapter 12  Debugging\n\n12.1  Debugging Features of the Architecture\n12.2  Debug Registers\n       12.2.1  Debug Address Registers (DRO-DR3)\n       12.2.2  Debug Control Register (DR7)\n       12.2.3  Debug Status Register (DR6)\n       12.2.4  Breakpoint Field Recognition\n\n12.3  Debug Exceptions\n       12.3.1  Interrupt 1  Debug Exceptions\n                12.3.1.1  Instruction Address Breakpoint\n                12.3.1.2  Data Address Breakpoint\n                12.3.1.3  General Detect Fault\n                12.3.1.4  Single-Step Trap\n                12.3.1.5  Task Switch Breakpoint\n\n       12.3.2  Interrupt 3  Breakpoint Exception\n\n                          PART III    COMPATIBILITY                       \n\nChapter 13  Executing 80286 Protected-Mode Code\n\n13.1  80286 Code Executes as a Subset of the 80386\n13.2  Two Ways to Execute 80286 Tasks\n13.3  Differences from 80286\n       13.3.1  Wraparound of 80286 24-Bit Physical Address Space\n       13.3.2  Reserved Word of Descriptor\n       13.3.3  New Descriptor Type Codes\n       13.3.4  Restricted Semantics of LOCK\n       13.3.5  Additional Exceptions\n\nChapter 14  80386 Real-Address Mode\n\n14.1  Physical Address Formation\n14.2  Registers and Instructions\n14.3  Interrupt and Exception Handling\n14.4  Entering and Leaving Real-Address Mode\n       14.4.1  Switching to Protected Mode\n\n14.5  Switching Back to Real-Address Mode\n14.6  Real-Address Mode Exceptions\n14.7  Differences from 8086\n14.8  Differences from 80286 Real-Address Mode\n       14.8.1  Bus Lock\n       14.8.2  Location of First Instruction\n       14.8.3  Initial Values of General Registers\n       14.8.4  MSW Initialization\n\nChapter 15  Virtual 8088 Mode\n\n15.1  Executing 8086 Code\n       15.1.1  Registers and Instructions\n       15.1.2  Linear Address Formation\n\n15.2  Structure of a V86 Task\n       15.2.1  Using Paging for V86 Tasks\n       15.2.2  Protection within a V86 Task\n\n15.3  Entering and Leaving V86 Mode\n       15.3.1  Transitions Through Task Switches\n       15.3.2  Transitions Through Trap Gates and Interrupt Gates\n\n15.4  Additional Sensitive Instructions\n       15.4.1  Emulating 8086 Operating System Calls\n       15.4.2  Virtualizing the Interrupt-Enable Flag\n\n15.5  Virtual I/O\n       15.5.1  I/O-Mapped I/O\n       15.5.2  Memory-Mapped I/O\n       15.5.3  Special I/O Buffers\n\n15.6  Differences from 8086\n15.7  Differences from 80286 Real-Address Mode\n\nChapter 16  Mixing 16-Bit and 32-Bit Code\n\n16.1  How the 80386 Implements 16-Bit and 32-Bit Features\n16.2  Mixing 32-Bit and 16-Bit Operations\n16.3  Sharing Data Segments among Mixed Code Segments\n16.4  Transferring Control among Mixed Code Segments\n       16.4.1  Size of Code-Segment Pointer\n       16.4.2  Stack Management for Control Transfers\n                16.4.2.1  Controlling the Operand-Size for a CALL\n                16.4.2.2  Changing Size of Call\n\n       16.4.3  Interrupt Control Transfers\n       16.4.4  Parameter Translation\n       16.4.5  The Interface Procedure\n\n                         PART IV    INSTRUCTION SET                       \n\nChapter 17  80386 Instruction Set\n\n17.1  Operand-Size and Address-Size Attributes\n       17.1.1  Default Segment Attribute\n       17.1.2  Operand-Size and Address-Size Instruction Prefixes\n       17.1.3  Address-Size Attribute for Stack\n\n17.2  Instruction Format\n       17.2.1  ModR/M and SIB Bytes\n       17.2.2  How to Read the Instruction Set Pages\n                17.2.2.1  Opcode\n                17.2.2.2  Instruction\n                17.2.2.3  Clocks\n                17.2.2.4  Description\n                17.2.2.5  Operation\n                17.2.2.6  Description\n                17.2.2.7  Flags Affected\n                17.2.2.8  Protected Mode Exceptions\n                17.2.2.9  Real Address Mode Exceptions\n                17.2.2.10 Virtual-8086 Mode Exceptions\n\nInstruction Sets\n\nAAA\nAAD\nAAM\nAAS\nADC\nADD\nAND\nARPL\nBOUND\nBSF\nBSR\nBT\nBTC\nBTR\nBTS\nCALL\nCBW/CWDE\nCLC\nCLD\nCLI\nCLTS\nCMC\nCMP\nCMPS/CMPSB/CMPSW/CMPSD\nCWD/CDQ\nDAA\nDAS\nDEC\nDIV\nENTER\nHLT\nIDIV\nIMUL\nIN\nINC\nINS/INSB/INSW/INSD\nINT/INTO\nIRET/IRETD\nJcc\nJMP\nLAHF\nLAR\nLEA\nLEAVE\nLGDT/LIDT\nLGS/LSS/LDS/LES/LFS\nLLDT\nLMSW\nLOCK\nLODS/LODSB/LODSW/LODSD\nLOOP/LOOPcond\nLSL\nLTR\nMOV\nMOV\nMOVS/MOVSB/MOVSW/MOVSD\nMOVSX\nMOVZX\nMUL\nNEG\nNOP\nNOT\nOR\nOUT\nOUTS/OUTSB/OUTSW/OUTSD\nPOP\nPOPA/POPAD\nPOPF/POPFD\nPUSH\nPUSHA/PUSHAD\nPUSHF/PUSHFD\nRCL/RCR/ROL/ROR\nREP/REPE/REPZ/REPNE/REPNZ\nRET\nSAHF\nSAL/SAR/SHL/SHR\nSBB\nSCAS/SCASB/SCASW/SCASD\nSETcc\nSGDT/SIDT\nSHLD\nSHRD\nSLDT\nSMSW\nSTC\nSTD\nSTI\nSTOS/STOSB/STOSW/STOSD\nSTR\nSUB\nTEST\nVERR,VERW\nWAIT\nXCHG\nXLAT/XLATB\nXOR\n\nAppendix A  Opcode Map\n\nAppendix B  Complete Flag Cross-Reference\n\nAppendix C  Status Flag Summary\n\nAppendix D  Condition Codes\n\n\nFigures\n\n1-1     Example Data Structure\n\n2-1     Two-Component Pointer\n2-2     Fundamental Data Types\n2-3     Bytes, Words, and Doublewords in Memory\n2-4     80386 Data Types\n2-5     80386 Applications Register Set\n2-6     Use of Memory Segmentation\n2-7     80386 Stack\n2-8     EFLAGS Register\n2-9     Instruction Pointer Register\n2-10    Effective Address Computation\n\n3-1     PUSH\n3-2     PUSHA\n3-3     POP\n3-4     POPA\n3-5     Sign Extension\n3-6     SAL and SHL\n3-7     SHR\n3-8     SAR\n3-9     Using SAR to Simulate IDIV\n3-10    Shift Left Double\n3-11    Shift Right Double\n3-12    ROL\n3-13    ROR\n3-14    RCL\n3-15    RCR\n3-16    Formal Definition of the ENTER Instruction\n3-17    Variable Access in Nested Procedures\n3-18    Stack Frame for MAIN at Level 1\n3-19    Stack Frame for Prooedure A\n3-20    Stack Frame for Procedure B at Level 3 Called from A\n3-21    Stack Frame for Procedure C at Level 3 Called from B\n3-22    LAHF and SAHF\n3-23    Flag Format for PUSHF and POPF\n\n4-1     Systems Flags of EFLAGS Register\n4-2     Control Registers\n\n5-1     Address Translation Overview\n5-2     Segment Translation\n5-3     General Segment-Descriptor Format\n5-4     Format of Not-Present Descriptor\n5-5     Descriptor Tables\n5-6     Format of a Selector\n5-7     Segment Registers\n5-8     Format of a Linear Address\n5-9     Page Translation\n5-10    Format of a Page Table Entry\n5-11    Invalid Page Table Entry\n5-12    80386 Addressing Mechanism\n5-13    Descriptor per Page Table\n\n6-1     Protection Fields of Segment Descriptors\n6-2     Levels of Privilege\n6-3     Privilege Check for Data Access\n6-4     Privilege Check for Control Transfer without Gate\n6-5     Format of 80386 Call Gate\n6-6     Indirect Transfer via Call Gate\n6-7     Privilege Check via Call Gate\n6-8     Initial Stack Pointers of TSS\n6-9     Stack Contents after an Interievel Call\n6-10    Protection Fields of Page Table Entries\n\n7-1     80386 32-Bit Task State Segment\n7-2     TSS Descriptor for 32-Bit TSS\n7-3     Task Register\n7-4     Task Gate Descriptor\n7-5     Task Gate Indirectly Identifies Task\n7-6     Partially-Overlapping Linear Spaces\n\n8-1     Memory-Mapped I/O\n8-2     I/O Address Bit Map\n\n9-1     IDT Register and Table\n9-2     Pseudo-Descriptor Format for LIDT and SIDT\n9-3     80386 IDT Gate Descriptors\n9-4     Interrupt Vectoring for Procedures\n9-5     Stack Layout after Exception of Interrupt\n9-6     Interrupt Vectoring for Tasks\n9-7     Error Code Format\n9-8     Page-Fault Error Code Format\n9-9     CR2 Format\n\n10-1    Contents of EDX after RESET\n10-2    Initial Contents of CRO\n10-3    TLB Structure\n10-4    Test Registers\n\n12-1    Debug Registers\n\n14-1    Real-Address Mode Address Formation\n\n15-1    V86 Mode Address Formation\n15-2    Entering and Leaving an 8086 Program\n15-3    PL 0 Stack after Interrupt in V86 Task\n\n16-1    Stack after Far 16-Bit and 32-Bit Calls\n\n17-1    80386 Instruction Format\n17-2    ModR/M and SIB Byte Formats\n17-3    Bit Offset for BIT[EAX, 21]\n17-4    Memory Bit Indexing\n\n\nTables\n\n2-1      Default Segment Register Selection Rules\n2-2      80386 Reserved Exceptions and Interrupts\n\n3-1      Bit Test and Modify Instructions\n3-2      Interpretation of Conditional Transfers\n\n6-1      System and Gate Descriptor Types\n6-2      Useful Combinations of E, G, and B Bits\n6-3      Interievel Return Checks\n6-4      Valid Descriptor Types for LSL\n6-5      Combining Directory and Page Protection\n\n7-1      Checks Made during a Task Switch\n7-2      Effect of Task Switch on BUSY, NT, and Back-Link\n\n9-1      Interrupt and Exception ID Assignments\n9-2      Priority Among Simultaneous Interrupts and Exceptions\n9-3      Double-Fault Detection Classes\n9-4      Double-Fault Definition\n9-5      Conditions That Invalidate the TSS\n9-6      Exception Summary\n9-7      Error-Code Summary\n\n10-1     Meaning of D, U, and W Bit Pairs\n\n12-1     Breakpeint Field Recognition Examples\n12-2     Debug Exception Conditions\n\n14-1     80386 Real-Address Mode Exceptions\n14-2     New 80386 Exceptions\n\n17-1     Effective Size Attributes\n17-2     16-Bit Addressing Forms with the ModR/M Byte\n17-3     32-Bit Addressing Forms with the ModR/M Byte\n17-4     32-Bit Addressing Forms with the SIB Byte\n17-5     Task Switch Times for Exceptions\n17-6     80386 Exceptions\n\n\nChapter 1  Introduction to the 80386\n\n\n\nThe 80386 is an advanced 32-bit microprocessor optimized for multitasking\noperating systems and designed for applications needing very high\nperformance. The 32-bit registers and data paths support 32-bit addresses\nand data types. The processor can address up to four gigabytes of physical\nmemory and 64 terabytes (2^(46) bytes) of virtual memory. The on-chip\nmemory-management facilities include address translation registers,\nadvanced multitasking hardware, a protection mechanism, and paged virtual\nmemory. Special debugging registers provide data and code breakpoints even\nin ROM-based software.\n\n\n1.1  Organization of This Manual\n\nThis book presents the architecture of the 80386 in five parts:\n\n   Part I       Applications Programming\n   Part II      Systems Programming\n   Part III     Compatibility\n   Part IV      Instruction Set\n   Appendices\n\nThese divisions are determined in part by the architecture itself and in\npart by the different ways the book will be used. As the following table\nindicates, the latter two parts are intended as reference material for\nprogrammers actually engaged in the process of developing software for the\n80386. The first three parts are explanatory, showing the purpose of\narchitectural features, developing terminology and concepts, and describing\ninstructions as they relate to specific purposes or to specific\narchitectural features.\n\nExplanation                Part I    Applications Programming\n                           Part II   Systems Programming\n                           Part III  Compatibility\n\nReference                  Part IV   Instruction Set\n                           Appendices\n\nThe first three parts follow the execution modes and protection features of\nthe 80386 CPU. The distinction between applications features and systems\nfeatures is determined by the protection mechanism of the 80386. One purpose\nof protection is to prevent applications from interfering with the operating\nsystem; therefore, the processor makes certain registers and instructions\ninaccessible to applications programs. The features discussed in Part I are\nthose that are accessible to applications; the features in Part II are\navailable only to systems software that has been given special privileges or\nin unprotected systems.\n\nThe processing mode of the 80386 also determines the features that are\naccessible. The 80386 has three processing modes:\n\n   1.  Protected Mode.\n   2.  Real-Address Mode.\n   3.  Virtual 8086 Mode.\n\nProtected mode is the natural 32-bit environment of the 80386 processor. In\nthis mode all instructions and features are available.\n\nReal-address mode (often called just \"real mode\") is the mode of the\nprocessor immediately after RESET. In real mode the 80386 appears to\nprogrammers as a fast 8086 with some new instructions. Most applications of\nthe 80386 will use real mode for initialization only.\n\nVirtual 8086 mode (also called V86 mode) is a dynamic mode in the sense\nthat the processor can switch repeatedly and rapidly between V86 mode and\nprotected mode. The CPU enters V86 mode from protected mode to execute an\n8086 program, then leaves V86 mode and enters protected mode to continue\nexecuting a native 80386 program.\n\nThe features that are available to applications programs in protected mode\nand to all programs in V86 mode are the same. These features form the\ncontent of Part I. The additional features that are available to systems\nsoftware in protected mode form Part II. Part III explains real-address\nmode and V86 mode, as well as how to execute a mix of 32-bit and 16-bit\nprograms.\n\nAvailable in All Modes             Part I  Applications Programming\n\nAvailable in Protected             Part II  Systems Programming\nMode Only\n\nCompatibility Modes                Part III  Compatibility\n\n\n1.1.1  Part I  Applications Programming\n\nThis part presents those aspects of the architecture that are customarily\nused by applications programmers.\n\nChapter 2  Basic Programming Model: Introduces the models of memory\norganization. Defines the data types. Presents the register set used by\napplications. Introduces the stack. Explains string operations. Defines the\nparts of an instruction. Explains addressing calculations. Introduces\ninterrupts and exceptions as they may apply to applications programming.\n\nChapter 3  Application Instruction Set: Surveys the instructions commonly\nused for applications programming. Considers instructions in functionally\nrelated groups; for example, string instructions are considered in one\nsection, while control-transfer instructions are considered in another.\nExplains the concepts behind the instructions. Details of individual\ninstructions are deferred until Part IV, the instruction-set reference.\n\n\n1.1.2  Part II  Systems Programming\n\nThis part presents those aspects of the architecture that are customarily\nused by programmers who write operating systems, device drivers, debuggers,\nand other software that supports applications programs in the protected mode\nof the 80386.\n\nChapter 4  Systems Architecture: Surveys the features of the 80386 that \nare used by systems programmers. Introduces the remaining registers and data\nstructures of the 80386 that were not discussed in Part I. Introduces the\nsystems-oriented instructions in the context of the registers and data\nstructures they support. Points to the chapter where each register, data\nstructure, and instruction is considered in more detail.\n\nChapter 5  Memory Management: Presents details of the data structures,\nregisters, and instructions that support virtual memory and the concepts of\nsegmentation and paging. Explains how systems designers can choose a model\nof memory organization ranging from completely linear (\"flat\") to fully\npaged and segmented.\n\nChapter 6  Protection: Expands on the memory management features of the\n80386 to include protection as it applies to both segments and pages.\nExplains the implementation of privilege rules, stack switching, pointer\nvalidation, user and supervisor modes. Protection aspects of multitasking\nare deferred until the following chapter.\n\nChapter 7  Multitasking: Explains how the hardware of the 80386 supports\nmultitasking with context-switching operations and intertask protection.\n\nChapter 8  Input/Output: Reveals the I/O features of the 80386, including\nI/O instructions, protection as it relates to I/O, and the I/O permission\nmap.\n\nChapter 9  Exceptions and Interrupts: Explains the basic interrupt\nmechanisms of the 80386. Shows how interrupts and exceptions relate to\nprotection. Discusses all possible exceptions, listing causes and including\ninformation needed to handle and recover from the exception.\n\nChapter 10  Initialization: Defines the condition of the processor after\nRESET or power-up. Explains how to set up registers, flags, and data\nstructures for either real-address mode or protected mode. Contains an\nexample of an initialization program.\n\nChapter 11  Coprocessing and Multiprocessing: Explains the instructions\nand flags that support a numerics coprocessor and multiple CPUs with shared\nmemory.\n\nChapter 12  Debugging: Tells how to use the debugging registers of the\n80386.\n\n\n1.1.3  Part III  Compatibility\n\nOther parts of the book treat the processor primarily as a 32-bit machine,\nomitting for simplicity its facilities for 16-bit operations. Indeed, the\n80386 is a 32-bit machine, but its design fully supports 16-bit operands and\naddressing, too. This part completes the picture of the 80386 by explaining\nthe features of the architecture that support 16-bit programs and 16-bit\noperations in 32-bit programs. All three processor modes are used to\nexecute 16-bit programs: protected mode can directly execute 16-bit 80286\nprotected mode programs, real mode executes 8086 programs and real-mode\n80286 programs, and virtual 8086 mode executes 8086 programs in a\nmultitasking environment with other 80386 protected-mode programs. In\naddition, 32-bit and 16-bit modules and individual 32-bit and 16-bit\noperations can be mixed in protected mode.\n\nChapter 13  Executing 80286 Protected-Mode Code: In its protected mode,\nthe 80386 can execute complete 80286 protected-mode systems, because 80286\ncapabilities are a subset of 80386 capabilities.\n\nChapter 14  80386 Real-Address Mode: Explains the real mode of the 80386\nCPU. In this mode the 80386 appears as a fast real-mode 80286 or fast 8086\nenhanced with additional instructions.\n\nChapter 15  Virtual 8086 Mode: The 80386 can switch rapidly between its\nprotected mode and V86 mode, giving it the ability to multiprogram 8086\nprograms along with \"native mode\" 32-bit programs.\n\nChapter 16  Mixing 16-Bit and 32-Bit Code: Even within a program or task,\nthe 80386 can mix 16-bit and 32-bit modules. Furthermore, any given module\ncan utilize both 16-bit and 32-bit operands and addresses.\n\n\n1.1.4  Part IV  Instruction Set\n\nParts I, II, and III present overviews of the instructions as they relate\nto specific aspects of the architecture, but this part presents the\ninstructions in alphabetical order, providing the detail needed by\nassembly-language programmers and programmers of debuggers, compilers,\noperating systems, etc. Instruction descriptions include algorithmic\ndescription of operation, effect of flag settings, effect on flag settings,\neffect of operand- or address-size attributes, effect of processor modes,\nand possible exceptions.\n\n\n1.1.5  Appendices\n\nThe appendices present tables of encodings and other details in a format\ndesigned for quick reference by assembly-language and systems programmers.\n\n\n1.2  Related Literature\n\nThe following books contain additional material concerning the 80386\nmicroprocessor:\n\n    Introduction to the 80386, order number 231252\n\n    80386 Hardware Reference Manual, order number 231732\n\n    80386 System Software Writer's Guide, order number 231499\n\n    80386 High Performance 32-bit Microprocessor with Integrated Memory\n     Management (Data Sheet), order number 231630\n\n\n1.3  Notational Conventions\n\nThis manual uses special notations for data-structure formats, for symbolic\nrepresentation of instructions, for hexadecimal numbers, and for super- and\nsub-scripts. Subscript characters are surrounded by {curly brackets}, for\nexample 10{2} = 10 base 2. Superscript characters are preceeded by a caret\nand enclosed within (parentheses), for example 10^(3) = 10 to the third\npower. A review of these notations will make it easier to read the\nmanual.\n\n1.3.1  Data-Structure Formats\n\nIn illustrations of data structures in memory, smaller addresses appear at\nthe lower-right part of the figure; addresses increase toward the left and\nupwards. Bit positions are numbered from right to left. Figure 1-1\nillustrates this convention.\n\n\n1.3.2  Undefined Bits and Software Compatibility\n\nIn many register and memory layout descriptions, certain bits are marked as\nundefined. When bits are marked as undefined (as illustrated in Figure\n1-1), it is essential for compatibility with future processors that\nsoftware treat these bits as undefined. Software should follow these\nguidelines in dealing with undefined bits:\n\n    Do not depend on the states of any undefined bits when testing the\n     values of registers that contain such bits. Mask out the undefined bits\n     before testing.\n\n    Do not depend on the states of any undefined bits when storing them in\n     memory or in another register.\n\n    Do not depend on the ability to retain information written into any\n     undefined bits.\n\n    When loading a register, always load the undefined bits as zeros or\n     reload them with values previously stored from the same register.\n\n\nNOTE\n  Depending upon the values of undefined register bits will make software\n  dependent upon the unspecified manner in which the 80386 handles these\n  bits. Depending upon undefined values risks making software incompatible\n  with future processors that define usages for these bits. AVOID ANY\n  SOFTWARE DEPENDENCE UPON THE STATE OF UNDEFINED 80386 REGISTER BITS.\n\n\n\nFigure 1-1.  Example Data Structure\n\n GREATEST                 DATA STRUCTURE\n ADDRESS\n  31              23              15              7             0 \u0011BIT\n ͻ   OFFSET\n                                                                28\n ͹\n                                                                24\n ͹\n                                                                20\n ͹\n                                                                16\n ͹\n                                                                12\n ͹\n                                                                8\n ͹\n                            UNDEFINED                           4\n ͹  SMALLEST\n     BYTE 3          BYTE 2          BYTE 1          BYTE 0     0 ADDRESS\n ͼ\u001e\n                                                    BYTE OFFSET\n\n\n1.3.3  Instruction Operands\n\nWhen instructions are represented symbolically, a subset of the 80386\nAssembly Language is used. In this subset, an instruction has the following\nformat:\n\nlabel: prefix mnemonic argument1, argument2, argument3\n\nwhere:\n\n    A label is an identifier that is followed by a colon.\n\n    A prefix is an optional reserved name for one of the instruction\n     prefixes.\n\n    A mnemonic is a reserved name for a class of instruction opcodes that\n     have the same function.\n\n    The operands argument1, argument2, and argument3 are optional. There\n     may be from zero to three operands, depending on the opcode.  When\n     present, they take the form of either literals or identifiers for data\n     items.  Operand identifiers are either reserved names of registers or\n     are assumed to be assigned to data items declared in another part of\n     the program (which may not be shown in the example). When two operands\n     are present in an instruction that modifies data, the right operand is\n     the source and the left operand is the destination.\n\nFor example:\n\nLOADREG: MOV EAX, SUBTOTAL\n\nIn this example LOADREG is a label, MOV is the mnemonic identifier of an\nopcode, EAX is the destination operand, and SUBTOTAL is the source operand.\n\n1.3.4  Hexadecimal Numbers\n\nBase 16 numbers are represented by a string of hexadecimal digits followed\nby the character H.  A hexadecimal digit is a character from the set (0, 1,\n2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F).  In some cases, especially in\nexamples of program syntax, a leading zero is added if the number would\notherwise begin with one of the digits A-F.  For example, 0FH is equivalent\nto the decimal number 15.\n\n1.3.5  Sub- and Super-Scripts\n\nThis manual uses special notation to represent sub- and super-script\ncharacters. Sub-script characters are surrounded by {curly brackets}, for\nexample 10{2} = 10 base 2. Super-script characters are preceeded by a\ncaret and enclosed within (parentheses), for example 10^(3) = 10 to the\nthird power.\n\n\n                     PART I    APPLICATIONS PROGRAMMING                    \n\n\nChapter 2  Basic Programming Model\n\n\n\nThis chapter describes the 80386 application programming environment as\nseen by assembly language programmers when the processor is executing in\nprotected mode. The chapter introduces programmers to those features of the\n80386 architecture that directly affect the design and implementation of\n80386 applications programs. Other chapters discuss 80386 features that\nrelate to systems programming or to compatibility with other processors of\nthe 8086 family.\n\nThe basic programming model consists of these aspects:\n\n    Memory organization and segmentation\n    Data types\n    Registers\n    Instruction format\n    Operand selection\n    Interrupts and exceptions\n\nNote that input/output is not included as part of the basic programming\nmodel. Systems designers may choose to make I/O instructions available to\napplications or may choose to reserve these functions for the operating\nsystem. For this reason, the I/O features of the 80386 are discussed in Part\nII.\n\nThis chapter contains a section for each aspect of the architecture that is\nnormally visible to applications.\n\n\n2.1  Memory Organization and Segmentation\n\nThe physical memory of an 80386 system is organized as a sequence of 8-bit\nbytes. Each byte is assigned a unique address that ranges from zero to a\nmaximum of 2^(32) -1 (4 gigabytes).\n\n80386 programs, however, are independent of the physical address space.\nThis means that programs can be written without knowledge of how much\nphysical memory is available and without knowledge of exactly where in\nphysical memory the instructions and data are located.\n\nThe model of memory organization seen by applications programmers is\ndetermined by systems-software designers. The architecture of the 80386\ngives designers the freedom to choose a model for each task. The model of\nmemory organization can range between the following extremes:\n\n    A \"flat\" address space consisting of a single array of up to 4\n     gigabytes.\n\n    A segmented address space consisting of a collection of up to 16,383\n     linear address spaces of up to 4 gigabytes each.\n\nBoth models can provide memory protection. Different tasks may employ\ndifferent models of memory organization. The criteria that designers use to\ndetermine a memory organization model and the means that systems programmers\nuse to implement that model are covered in Part IISystems Programming.\n\n\n2.1.1  The \"Flat\" Model\n\nIn a \"flat\" model of memory organization, the applications programmer sees\na single array of up to 2^(32) bytes (4 gigabytes). While the physical\nmemory can contain up to 4 gigabytes, it is usually much smaller; the\nprocessor maps the 4 gigabyte flat space onto the physical address space by\nthe address translation mechanisms described in Chapter 5. Applications\nprogrammers do not need to know the details of the mapping.\n\nA pointer into this flat address space is a 32-bit ordinal number that may\nrange from 0 to 2^(32) -1. Relocation of separately-compiled modules in this\nspace must be performed by systems software (e.g., linkers, locators,\nbinders, loaders).\n\n\n2.1.2  The Segmented Model\n\nIn a segmented model of memory organization, the address space as viewed by\nan applications program (called the logical address space) is a much larger\nspace of up to 2^(46) bytes (64 terabytes). The processor maps the 64\nterabyte logical address space onto the physical address space (up to 4\ngigabytes) by the address translation mechanisms described in Chapter 5.\nApplications programmers do not need to know the details of this mapping.\n\nApplications programmers view the logical address space of the 80386 as a\ncollection of up to 16,383 one-dimensional subspaces, each with a specified\nlength. Each of these linear subspaces is called a segment. A segment is a\nunit of contiguous address space. Segment sizes may range from one byte up\nto a maximum of 2^(32) bytes (4 gigabytes).\n\nA complete pointer in this address space consists of two parts (see Figure\n2-1):\n\n  1.  A segment selector, which is a 16-bit field that identifies a\n      segment.\n\n  2.  An offset, which is a 32-bit ordinal that addresses to the byte level\n      within a segment.\n\nDuring execution of a program, the processor associates with a segment\nselector the physical address of the beginning of the segment. Separately\ncompiled modules can be relocated at run time by changing the base address\nof their segments. The size of a segment is variable; therefore, a segment\ncan be exactly the size of the module it contains.\n\n\n2.2  Data Types\n\nBytes, words, and doublewords are the fundamental data types (refer to\nFigure 2-2). A byte is eight contiguous bits starting at any logical\naddress. The bits are numbered 0 through 7; bit zero is the least\nsignificant bit.\n\nA word is two contiguous bytes starting at any byte address. A word thus\ncontains 16 bits. The bits of a word are numbered from 0 through 15; bit 0\nis the least significant bit. The byte containing bit 0 of the word is\ncalled the low byte; the byte containing bit 15 is called the high byte.\n\nEach byte within a word has its own address, and the smaller of the\naddresses is the address of the word. The byte at this lower address\ncontains the eight least significant bits of the word, while the byte at the\nhigher address contains the eight most significant bits.\n\nA doubleword is two contiguous words starting at any byte address. A\ndoubleword thus contains 32 bits. The bits of a doubleword are numbered from\n0 through 31; bit 0 is the least significant bit. The word containing bit 0\nof the doubleword is called the low word; the word containing bit 31 is\ncalled the high word.\n\nEach byte within a doubleword has its own address, and the smallest of the\naddresses is the address of the doubleword. The byte at this lowest address\ncontains the eight least significant bits of the doubleword, while the byte\nat the highest address contains the eight most significant bits. Figure 2-3\nillustrates the arrangement of bytes within words anddoublewords.\n\nNote that words need not be aligned at even-numbered addresses and\ndoublewords need not be aligned at addresses evenly divisible by four. This\nallows maximum flexibility in data structures (e.g., records containing\nmixed byte, word, and doubleword items) and efficiency in memory\nutilization. When used in a configuration with a 32-bit bus, actual\ntransfers of data between processor and memory take place in units of\ndoublewords beginning at addresses evenly divisible by four; however, the\nprocessor converts requests for misaligned words or doublewords into the\nappropriate sequences of requests acceptable to the memory interface. Such\nmisaligned data transfers reduce performance by requiring extra memory\ncycles. For maximum performance, data structures (including stacks) should\nbe designed in such a way that, whenever possible, word operands are aligned\nat even addresses and doubleword operands are aligned at addresses evenly\ndivisible by four. Due to instruction prefetching and queuing within the\nCPU, there is no requirement for instructions to be aligned on word or\ndoubleword boundaries. (However, a slight increase in speed results if the\ntarget addresses of control transfers are evenly divisible by four.)\n\nAlthough bytes, words, and doublewords are the fundamental types of\noperands, the processor also supports additional interpretations of these\noperands. Depending on the instruction referring to the operand, the\nfollowing additional data types are recognized:\n\nInteger:\nA signed binary numeric value contained in a 32-bit doubleword,16-bit word,\nor 8-bit byte. All operations assume a 2's complement representation. The\nsign bit is located in bit 7 in a byte, bit 15 in a word, and bit 31 in a\ndoubleword. The sign bit has the value zero for positive integers and one\nfor negative. Since the high-order bit is used for a sign, the range of an\n8-bit integer is -128 through +127; 16-bit integers may range from -32,768\nthrough +32,767; 32-bit integers may range from -2^(31) through +2^(31) -1.\nThe value zero has a positive sign.\n\nOrdinal:\nAn unsigned binary numeric value contained in a 32-bit doubleword,\n16-bit word, or 8-bit byte. All bits are considered in determining\nmagnitude of the number. The value range of an 8-bit ordinal number\nis 0-255; 16 bits can represent values from 0 through 65,535; 32 bits\ncan represent values from 0 through 2^(32) -1.\n\nNear Pointer:\nA 32-bit logical address. A near pointer is an offset within a segment.\nNear pointers are used in either a flat or a segmented model of memory\norganization.\n\nFar Pointer:\nA 48-bit logical address of two components: a 16-bit segment selector\ncomponent and a 32-bit offset component. Far pointers are used by\napplications programmers only when systems designers choose a\nsegmented memory organization.\n\nString:\nA contiguous sequence of bytes, words, or doublewords. A string may\ncontain from zero bytes to 2^(32) -1 bytes (4 gigabytes).\n\nBit field:\nA contiguous sequence of bits. A bit field may begin at any bit position\nof any byte and may contain up to 32 bits.\n\nBit string:\nA contiguous sequence of bits. A bit string may begin at any bit position\nof any byte and may contain up to 2^(32) -1 bits.\n\nBCD:\nA byte (unpacked) representation of a decimal digit in the range0 through\n9. Unpacked decimal numbers are stored as unsigned byte quantities. One\ndigit is stored in each byte. The magnitude of the number is determined from\nthe low-order half-byte; hexadecimal values 0-9 are valid and are\ninterpreted as decimal numbers. The high-order half-byte must be zero for\nmultiplication and division; it may contain any value for addition and\nsubtraction.\n\nPacked BCD:\nA byte (packed) representation of two decimal digits, each in the range\n0 through 9. One digit is stored in each half-byte. The digit in the\nhigh-order half-byte is the most significant. Values 0-9 are valid in each\nhalf-byte. The range of a packed decimal byte is 0-99.\n\nFigure 2-4 graphically summarizes the data types supported by the 80386.\n\n\nFigure 2-1.  Two-Component Pointer\n\n                                   \u0007               \u0007\n                                                  \n                                   ͹Ŀ\n       32            0                             \n      ͻ   ͻ    ͹ \n          OFFSET     Ķ + \u0010    OPERAND     \n      ͼ   ͼ    ͹  SELECTED SEGMENT\n                            \u001e                      \n           16    0                                \n          ͻ                               \n          SEGMENT\u0010͹\n          ͼ                               \n                                                  \n                                                  \n                                   \u0007               \u0007\n\n\nFigure 2-2.  Fundamental Data Types\n\n  7              0\n ͻ\n      BYTE        BYTE\n ͼ\n\n  15              7              0\n ͻ\n    HIGH BYTE      LOW BYTE      WORD\n ͼ\n    address n+1      address n\n\n  31              23              15              7             0\n ͻ\n            HIGH WORD                       LOW WORD           DOUBLEWORD\n ͼ\n    address n+3     address n+2     address n+1      address n\n\n\nFigure 2-3.  Bytes, Words, and Doublewords in Memory\n\n                  MEMORY\n       BYTE       VALUES\nAll values in hexadecimal\n     ADDRESS   ͻ\n              E          \n               ͹Ŀ\n              D    7A       DOUBLE WORD AT ADDRESS A\n               ͹Ŀ  CONTAINS 7AFE0636\n              C    FE     \n               ͹  WORD AT ADDRESS B\n              B    06      CONTAINS FE06\n               ͹ٳ\n              A    36      \n               ͹͵\n              9    1F       WORD AT ADDRESS 9\n               ͹  CONTAINS IF\n              8          \n               ͹Ŀ\n              7    23      \n               ͹   WORD AT ADDRESS 6\n              6    OB        CONTAINS 23OB\n               ͹\n              5          \n               ͹\n              4          \n               ͹Ŀ\n              3    74      \n               ͹Ŀ WORD AT ADDRESS 2\n              2    CB       CONTAINS 74CB\n               ͹\n              1    31      WORD AT ADDRESS 1\n               ͹   CONTAINS CB31\n              0          \n               ͼ\n\n\nFigure 2-4.  80386 Data Types\n\n                                                           +1       0\n          7       0              7       0            15 14    8 7      0\n     BYTE ѻ         BYTE ѻ         WORD ѻ\n  INTEGER            ORDINAL             INTEGER            \n          ͼ              ͼ              ͼ\n  SIGN BIT                    SIGN BITMSB           \n           MAGNITUDE             MAGNITUDE              \n                                                            MAGNITUDE\n\n\n            +1       0                       +3     +2      +1       0\n         15              0               31            16 15             0\n    WORD ѻ    DOUBLEWORD ѻ\n ORDINAL                   INTEGER                        \n         ͼ               ͼ\n                               SIGN BITMSB                           \n                        \n             MAGNITUDE                              MAGNITUDE\n\n\n                           +3      +2      +1       0\n                        31                              0\n             DOUBLEWORD ѻ\n                ORDINAL                         \n                        ͼ\n                        \n                                    MAGNITUDE\n\n                           +N              +1       0\n                        7       0       7      0 7      0\n           BINARY CODED ѻ       ѻ\n          DECIMAL (BCD)         \u0007\u0007\u0007              \n                        ͼ       ͼ\n                           BCD             BCD     BCD\n                         DIGIT N         DIGIT 1  DIGIT 0\n\n                           +N              +1       0\n                        7       0       7      0 7      0\n                 PACKED ѻ       ѻ\n                    BCD         \u0007\u0007\u0007              \n                        ͼ       ͼ\n                                               \n                        MOST                        LEAST\n                        SIGNIFICANT           SIGNIFICANT\n                        DIGIT                       DIGIT\n\n                           +N              +1       0\n                        7       0       7      0 7      0\n                   BYTE ѻ       ѻ\n                 STRING         \u0007\u0007\u0007              \n                        ͼ       ͼ\n\n                                              -2 GIGABYTES\n                +2 GIGABYTES                           210\n     BIT   ѻ\n  STRING                                      \n           ϼ\n                         BIT 0\n\n               +3      +2      +1       0\n            31                              0\nNEAR 32-BIT ѻ\n    POINTER                         \n            ͼ\n            \n                             OFFSET\n\n              +5      +4      +3      +2      +1       0\n           48                                              0\nFAR 48-BIT ѻ\n   POINTER                                     \n           ͼ\n           \n                SELECTOR                 OFFSET\n\n                  +5      +4      +3      +2      +1       0\n    32-BIT ѻ\n BIT FIELD                                     \n           ͼ\n                   \u0011 BIT FIELD \u0010\n                             1 TO 32 BITS\n\n\n2.3  Registers\n\nThe 80386 contains a total of sixteen registers that are of interest to the\napplications programmer. As Figure 2-5 shows, these registers may be\ngrouped into these basic categories:\n\n  1.  General registers. These eight 32-bit general-purpose registers are\n      used primarily to contain operands for arithmetic and logical\n      operations.\n\n  2.  Segment registers. These special-purpose registers permit systems\n      software designers to choose either a flat or segmented model of\n      memory organization. These six registers determine, at any given time,\n      which segments of memory are currently addressable.\n\n  3.  Status and instruction registers. These special-purpose registers are\n      used to record and alter certain aspects of the 80386 processor state.\n\n\n2.3.1  General Registers\n\nThe general registers of the 80386 are the 32-bit registers EAX, EBX, ECX,\nEDX, EBP, ESP, ESI, and EDI. These registers are used interchangeably to\ncontain the operands of logical and arithmetic operations. They may also be\nused interchangeably for operands of address computations (except that ESP\ncannot be used as an index operand).\n\nAs Figure 2-5 shows, the low-order word of each of these eight registers\nhas a separate name and can be treated as a unit. This feature is useful for\nhandling 16-bit data items and for compatibility with the 8086 and 80286\nprocessors. The word registers are named AX, BX, CX, DX, BP, SP, SI, and DI.\n\nFigure 2-5 also illustrates that each byte of the 16-bit registers AX, BX,\nCX, and DX has a separate name and can be treated as a unit. This feature is\nuseful for handling characters and other 8-bit data items. The byte\nregisters are named AH, BH, CH, and DH (high bytes); and AL, BL, CL, and DL\n(low bytes).\n\nAll of the general-purpose registers are available for addressing\ncalculations and for the results of most arithmetic and logical\ncalculations; however, a few functions are dedicated to certain registers.\nBy implicitly choosing registers for these functions, the 80386 architecture\ncan encode instructions more compactly. The instructions that use specific\nregisters include: double-precision multiply and divide, I/O, string\ninstructions, translate, loop, variable shift and rotate, and stack\noperations.\n\n\n2.3.2  Segment Registers\n\nThe segment registers of the 80386 give systems software designers the\nflexibility to choose among various models of memory organization.\nImplementation of memory models is the subject of Part II  Systems\nProgramming. Designers may choose a model in which applications programs do\nnot need to modify segment registers, in which case applications programmers\nmay skip this section.\n\nComplete programs generally consist of many different modules, each\nconsisting of instructions and data. However, at any given time during\nprogram execution, only a small subset of a program's modules are actually\nin use. The 80386 architecture takes advantage of this by providing\nmechanisms to support direct access to the instructions and data of the\ncurrent module's environment, with access to additional segments on demand.\n\nAt any given instant, six segments of memory may be immediately accessible\nto an executing 80386 program. The segment registers CS, DS, SS, ES, FS, and\nGS are used to identify these six current segments. Each of these registers\nspecifies a particular kind of segment, as characterized by the associated\nmnemonics (\"code,\" \"data,\" or \"stack\") shown in Figure 2-6. Each register\nuniquely determines one particular segment, from among the segments that\nmake up the program, that is to be immediately accessible at highest speed.\n\nThe segment containing the currently executing sequence of instructions is\nknown as the current code segment; it is specified by means of the CS\nregister. The 80386 fetches all instructions from this code segment, using\nas an offset the contents of the instruction pointer. CS is changed\nimplicitly as the result of intersegment control-transfer instructions (for\nexample, CALL and JMP), interrupts, and exceptions.\n\nSubroutine calls, parameters, and procedure activation records usually\nrequire that a region of memory be allocated for a stack. All stack\noperations use the SS register to locate the stack. Unlike CS, the SS\nregister can be loaded explicitly, thereby permitting programmers to define\nstacks dynamically.\n\nThe DS, ES, FS, and GS registers allow the specification of four data\nsegments, each addressable by the currently executing program. Accessibility\nto four separate data areas helps programs efficiently access different\ntypes of data structures; for example, one data segment register can point\nto the data structures of the current module, another to the exported data\nof a higher-level module, another to a dynamically created data structure,\nand another to data shared with another task. An operand within a data\nsegment is addressed by specifying its offset either directly in an\ninstruction or indirectly via general registers.\n\nDepending on the structure of data (e.g., the way data is parceled into one\nor more segments), a program may require access to more than four data\nsegments. To access additional segments, the DS, ES, FS, and GS registers\ncan be changed under program control during the course of a program's\nexecution. This simply requires that the program execute an instruction to\nload the appropriate segment register prior to executing instructions that\naccess the data.\n\nThe processor associates a base address with each segment selected by a\nsegment register. To address an element within a segment, a 32-bit offset is\nadded to the segment's base address. Once a segment is selected (by loading\nthe segment selector into a segment register), a data manipulation\ninstruction only needs to specify the offset. Simple rules define which\nsegment register is used to form an address when only an offset is\nspecified.\n\n\nFigure 2-5.  80386 Applications Register Set\n\n                              GENERAL REGISTERS\n\n  31                23                15                7               0\n ͻ\n                                   EAX       AH       AX      AL        \n ͹\n                                   EDX       DH       DX      DL        \n ͹\n                                   ECX       CH       CX      CL        \n ͹\n                                   EBX       BH       BX      BL        \n ͹\n                                   EBP                BP                \n ͹\n                                   ESI                SI                \n ͹\n                                   EDI                DI                \n ͹\n                                   ESP                SP                \n ͼ\n\n\n                      15                7               0\n                     ͻ\n                              CS (CODE SEGMENT)         \n                     Ķ\n                              SS (STACK SEGMENT)        \n    SEGMENT          Ķ\n    REGISTERS                 DS (DATA SEGMENT)         \n                     Ķ\n                              ES (DATA SEGMENT)         \n                     Ķ\n                              FS (DATA SEGMENT)         \n                     Ķ\n                              GS (DATA SEGMENT)         \n                     ͼ\n\n\n                       STATUS AND INSTRUCTION REGISTERS\n\n     31               23                15                7              0\n   ͻ\n                                   EFLAGS                                 \n   Ķ\n                           EIP (INSTRUCTION POINTER)                      \n   ͼ\n\n\nFigure 2-6.  Use of Memory Segmentation\n\n     ͻ                                ͻ\n          MODULE                                          MODULE     \n            A        \u0011Ŀ                        \u0010       A        \n           CODE                                          DATA      \n     ͼ     ͻ     ͼ\n                          Ķ    CS (CODE)       \n                             ͹  \n     ͻ   Ķ    SS (STACK)         ͻ\n                          ͹           DATA      \n          STACK      \u0011      DS (DATA)     \u0010   STRUCTURE    \n                           ͹            1        \n     ͼ          ES (DATA)       ͼ\n                             ͹\n                          Ķ    FS (DATA)     \n     ͻ     ͹      ͻ\n           DATA               GS (DATA)     Ŀ         DATA      \n        STRUCTURE    \u0011  ͼ  \u0010   STRUCTURE    \n            2                                               3        \n     ͼ                                ͼ\n\n\n2.3.3  Stack Implementation\n\nStack operations are facilitated by three registers:\n\n  1.  The stack segment (SS) register. Stacks are implemented in memory. A\n      system may have a number of stacks that is limited only by the maximum\n      number of segments. A stack may be up to 4 gigabytes long, the maximum\n      length of a segment. One stack is directly addressable at a timethe\n      one located by SS. This is the current stack, often referred to simply\n      as \"the\" stack. SS is used automatically by the processor for all\n      stack operations.\n\n  2.  The stack pointer (ESP) register. ESP points to the top of the\n      push-down stack (TOS). It is referenced implicitly by PUSH and POP\n      operations, subroutine calls and returns, and interrupt operations.\n      When an item is pushed onto the stack (see Figure 2-7), the processor\n      decrements ESP, then writes the item at the new TOS. When an item is\n      popped off the stack, the processor copies it from TOS, then\n      increments ESP. In other words, the stack grows down in memory toward\n      lesser addresses.\n\n  3.  The stack-frame base pointer (EBP) register. The EBP is the best\n      choice of register for accessing data structures, variables and\n      dynamically allocated work space within the stack. EBP is often used\n      to access elements on the stack relative to a fixed point on the stack\n      rather than relative to the current TOS. It typically identifies the\n      base address of the current stack frame established for the current\n      procedure. When EBP is used as the base register in an offset\n      calculation, the offset is calculated automatically in the current\n      stack segment (i.e., the segment currently selected by SS). Because\n      SS does not have to be explicitly specified, instruction encoding in\n      such cases is more efficient. EBP can also be used to index into\n      segments addressable via other segment registers.\n\n\nFigure 2-7.  80386 Stack\n\n     31                         0\n     ͻ \u0011BOTTOM OF STACK\n                                       (INITIAL ESP VALUE)\n     ͹\n                                \n     ͹        \u001e\n                                        POP\n     ͹        \n                                        \n     ͹              TOP OF     ͻ\n                                 \u0011Ķ     ESP     \n     ͹              STACK      ͼ\n                                        \n                                        \n                                        PUSH\n                                        \u001f\n\n\n2.3.4  Flags Register\n\nThe flags register is a 32-bit register named EFLAGS. Figure 2-8 defines\nthe bits within this register. The flags control certain operations and\nindicate the status of the 80386.\n\nThe low-order 16 bits of EFLAGS is named FLAGS and can be treated as a\nunit. This feature is useful when executing 8086 and 80286 code, because\nthis part of EFLAGS is identical to the FLAGS register of the 8086 and the\n80286.\n\nThe flags may be considered in three groups: the status flags, the control\nflags, and the systems flags. Discussion of the systems flags is delayed\nuntil Part II.\n\n\nFigure 2-8.  EFLAGS Register  \n\n                                              16-BIT FLAGS REGISTER\n                                                         A\n                                     Ŀ\n  31                  23                  15               7            0\n ͻ\n                                    VR N IOODITSZ A P C\n  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0          0 0 1 \n                                    MF T PLFFFFFF F F F\n Ѽ\n                                                            \n       VIRTUAL 8086 MODEX                      \n             RESUME FLAGX                     \n        NESTED TASK FLAGX                  \n     I/O PRIVILEGE LEVELX                \n                OVERFLOWS              \n          DIRECTION FLAGC             \n        INTERRUPT ENABLEX            \n               TRAP FLAGS           \n               SIGN FLAGS          \n               ZERO FLAGS         \n         AUXILIARY CARRYS      \n             PARITY FLAGS   \n              CARRY FLAGS\n\n          S = STATUS FLAG, C = CONTROL FLAG, X = SYSTEM FLAG\n\n          NOTE: 0 OR 1 INDICATES INTEL RESERVED. DO NOT DEFINE\n\n\n2.3.4.1  Status Flags\n\nThe status flags of the EFLAGS register allow the results of one\ninstruction to influence later instructions. The arithmetic instructions use\nOF, SF, ZF, AF, PF, and CF. The SCAS (Scan String), CMPS (Compare String),\nand LOOP instructions use ZF to signal that their operations are complete.\nThere are instructions to set, clear, and complement CF before execution of\nan arithmetic instruction. Refer to Appendix C for definition of each\nstatus flag.\n\n\n2.3.4.2  Control Flag\n\nThe control flag DF of the EFLAGS register controls string instructions.\n\nDF (Direction Flag, bit 10)\n\n  Setting DF causes string instructions to auto-decrement; that is, to\n  process strings from high addresses to low addresses. Clearing DF causes\n  string instructions to auto-increment, or to process strings from low\n  addresses to high addresses.\n\n\n2.3.4.3  Instruction Pointer\n\nThe instruction pointer register (EIP) contains the offset address,\nrelative to the start of the current code segment, of the next sequential\ninstruction to be executed. The instruction pointer is not directly visible\nto the programmer; it is controlled implicitly by control-transfer\ninstructions, interrupts, and exceptions.\n\nAs Figure 2-9 shows, the low-order 16 bits of EIP is named IP and can be\nused by the processor as a unit. This feature is useful when executing\ninstructions designed for the 8086 and 80286 processors.\n\n\nFigure 2-9.  Instruction Pointer Register\n\n                                                 16-BIT IP REGISTER\n                                       Ŀ\n    31                23                15                7               0\n   ͻ\n                          EIP (INSTRUCTION POINTER)                       \n   ͼ\n\n\n2.4  Instruction Format\n\nThe information encoded in an 80386 instruction includes a specification of\nthe operation to be performed, the type of the operands to be manipulated,\nand the location of these operands. If an operand is located in memory, the\ninstruction must also select, explicitly or implicitly, which of the\ncurrently addressable segments contains the operand.\n\n80386 instructions are composed of various elements and have various\nformats. The exact format of instructions is shown in Appendix B; the\nelements of instructions are described below. Of these instruction elements,\nonly one, the opcode, is always present. The other elements may or may not\nbe present, depending on the particular operation involved and on the\nlocation and type of the operands. The elements of an instruction, in order\nof occurrence are as follows:\n\n    Prefixes  one or more bytes preceding an instruction that modify the\n     operation of the instruction. The following types of prefixes can be\n     used by applications programs:\n\n     1.  Segment override  explicitly specifies which segment register an\n         instruction should use, thereby overriding the default\n         segment-register selection used by the 80386 for that instruction.\n\n     2.  Address size  switches between 32-bit and 16-bit address \n         generation.\n\n     3.  Operand size  switches between 32-bit and 16-bit operands.\n\n     4.  Repeat  used with a string instruction to cause the instruction\n         to act on each element of the string.\n\n    Opcode  specifies the operation performed by the instruction. Some\n     operations have several different opcodes, each specifying a different\n     variant of the operation.\n\n    Register specifier  an instruction may specify one or two register\n     operands. Register specifiers may occur either in the same byte as the\n     opcode or in the same byte as the addressing-mode specifier.\n\n    Addressing-mode specifier  when present, specifies whether an operand\n     is a register or memory location; if in memory, specifies whether a\n     displacement, a base register, an index register, and scaling are to be\n     used.\n\n    SIB (scale, index, base) byte  when the addressing-mode specifier\n     indicates that an index register will be used to compute the address of\n     an operand, an SIB byte is included in the instruction to encode the\n     base register, the index register, and a scaling factor.\n\n    Displacement  when the addressing-mode specifier indicates that a\n     displacement will be used to compute the address of an operand, the\n     displacement is encoded in the instruction. A displacement is a signed\n     integer of 32, 16, or eight bits. The eight-bit form is used in the\n     common case when the displacement is sufficiently small. The processor\n     extends an eight-bit displacement to 16 or 32 bits, taking into\n     account the sign.\n\n    Immediate operand  when present, directly provides the value of an\n     operand of the instruction. Immediate operands may be 8, 16, or 32 bits\n     wide. In cases where an eight-bit immediate operand is combined in some\n     way with a 16- or 32-bit operand, the processor automatically extends\n     the size of the eight-bit operand, taking into account the sign.\n\n\n2.5  Operand Selection\n\nAn instruction can act on zero or more operands, which are the data\nmanipulated by the instruction. An example of a zero-operand instruction is\nNOP (no operation). An operand can be in any of these locations:\n\n    In the instruction itself (an immediate operand)\n\n    In a register (EAX, EBX, ECX, EDX, ESI, EDI, ESP, or EBP in the case\n     of 32-bit operands; AX, BX, CX, DX, SI, DI, SP, or BP in the case of\n     16-bit operands; AH, AL, BH, BL, CH, CL, DH, or DL in the case of 8-bit\n     operands; the segment registers; or the EFLAGS register for flag\n     operations)\n\n    In memory\n\n    At an I/O port\n\nImmediate operands and operands in registers can be accessed more rapidly\nthan operands in memory since memory operands must be fetched from memory.\nRegister operands are available in the CPU. Immediate operands are also\navailable in the CPU, because they are prefetched as part of the\ninstruction.\n\nOf the instructions that have operands, some specify operands implicitly;\nothers specify operands explicitly; still others use a combination of\nimplicit and explicit specification; for example:\n\nImplicit operand: AAM\n\n  By definition, AAM (ASCII adjust for multiplication) operates on the\n  contents of the AX register.\n\nExplicit operand: XCHG EAX, EBX\n\n  The operands to be exchanged are encoded in the instruction after the\n  opcode.\n\nImplicit and explicit operands: PUSH COUNTER\n\n  The memory variable COUNTER (the explicit operand) is copied to the top of\n  the stack (the implicit operand).\n\nNote that most instructions have implicit operands. All arithmetic\ninstructions, for example, update the EFLAGS register.\n\nAn 80386 instruction can explicitly reference one or two operands.\nTwo-operand instructions, such as MOV, ADD, XOR, etc., generally overwrite\none of the two participating operands with the result. A distinction can\nthus be made between the source operand (the one unaffected by the\noperation) and the destination operand (the one overwritten by the result).\n\nFor most instructions, one of the two explicitly specified operandseither\nthe source or the destinationcan be either in a register or in memory.\nThe other operand must be in a register or be an immediate source operand.\nThus, the explicit two-operand instructions of the 80386 permit operations\nof the following kinds:\n\n    Register-to-register\n    Register-to-memory\n    Memory-to-register\n    Immediate-to-register\n    Immediate-to-memory\n\nCertain string instructions and stack manipulation instructions, however,\ntransfer data from memory to memory. Both operands of some string\ninstructions are in memory and are implicitly specified. Push and pop stack\noperations allow transfer between memory operands and the memory-based\nstack.\n\n\n2.5.1  Immediate Operands\n\nCertain instructions use data from the instruction itself as one (and\nsometimes two) of the operands. Such an operand is called an immediate\noperand. The operand may be 32-, 16-, or 8-bits long. For example:\n\nSHR PATTERN, 2\n\nOne byte of the instruction holds the value 2, the number of bits by which\nto shift the variable PATTERN.\n\nTEST PATTERN, 0FFFF00FFH\n\nA doubleword of the instruction holds the mask that is used to test the\nvariable PATTERN.\n\n\n2.5.2  Register Operands\n\nOperands may be located in one of the 32-bit general registers (EAX, EBX,\nECX, EDX, ESI, EDI, ESP, or EBP), in one of the 16-bit general registers\n(AX, BX, CX, DX, SI, DI, SP, or BP), or in one of the 8-bit general\nregisters (AH, BH, CH, DH, AL, BL, CL,or DL).\n\nThe 80386 has instructions for referencing the segment registers (CS, DS,\nES, SS, FS, GS). These instructions are used by applications programs only\nif systems designers have chosen a segmented memory model.\n\nThe 80386 also has instructions for referring to the flag register. The\nflags may be stored on the stack and restored from the stack. Certain\ninstructions change the commonly modified flags directly in the EFLAGS\nregister. Other flags that are seldom modified can be modified indirectly\nvia the flags image in the stack.\n\n\n2.5.3  Memory Operands\n\nData-manipulation instructions that address operands in memory must specify\n(either directly or indirectly) the segment that contains the operand and\nthe offset of the operand within the segment. However, for speed and compact\ninstruction encoding, segment selectors are stored in the high speed segment\nregisters. Therefore, data-manipulation instructions need to specify only\nthe desired segment register and an offset in order to address a memory\noperand.\n\nAn 80386 data-manipulation instruction that accesses memory uses one of the\nfollowing methods for specifying the offset of a memory operand within its\nsegment:\n\n  1.  Most data-manipulation instructions that access memory contain a byte\n      that explicitly specifies the addressing method for the operand. A\n      byte, known as the modR/M byte, follows the opcode and specifies\n      whether the operand is in a register or in memory. If the operand is\n      in memory, the address is computed from a segment register and any of\n      the following values: a base register, an index register, a scaling\n      factor, a displacement. When an index register is used, the modR/M\n      byte is also followed by another byte that identifies the index\n      register and scaling factor. This addressing method is the\n      mostflexible.\n\n  2.  A few data-manipulation instructions implicitly use specialized\n      addressing methods:\n\n         For a few short forms of MOV that implicitly use the EAX register,\n          the offset of the operand is coded as a doubleword in the\n          instruction. No base register, index register, or scaling factor\n          are used.\n\n         String operations implicitly address memory via DS:ESI, (MOVS,\n          CMPS, OUTS, LODS, SCAS) or via ES:EDI (MOVS, CMPS, INS, STOS).\n\n         Stack operations implicitly address operands via SS:ESP\n          registers; e.g., PUSH, POP, PUSHA, PUSHAD, POPA, POPAD, PUSHF,\n          PUSHFD, POPF, POPFD, CALL, RET, IRET, IRETD, exceptions, and\n          interrupts.\n\n\n2.5.3.1  Segment Selection\n\nData-manipulation instructions need not explicitly specify which segment\nregister is used. For all of these instructions, specification of a segment\nregister is optional. For all memory accesses, if a segment is not\nexplicitly specified by the instruction, the processor automatically chooses\na segment register according to the rules of Table 2-1. (If systems\ndesigners have chosen a flat model of memory organization, the segment\nregisters and the rules that the processor uses in choosing them are not\napparent to applications programs.)\n\nThere is a close connection between the kind of memory reference and the\nsegment in which that operand resides. As a rule, a memory reference implies\nthe current data segment (i.e., the implicit segment selector is in DS).\nHowever, ESP and EBP are used to access items on the stack; therefore, when\nthe ESP or EBP register is used as a base register, the current stack\nsegment is implied (i.e., SS contains the selector).\n\nSpecial instruction prefix elements may be used to override the default\nsegment selection. Segment-override prefixes allow an explicit segment\nselection. The 80386 has a segment-override prefix for each of the segment\nregisters. Only in the following special cases is there an implied segment\nselection that a segment prefix cannot override:\n\n    The use of ES for destination strings in string instructions.\n    The use of SS in stack instructions.\n    The use of CS for instruction fetches.\n\n\nTable 2-1. Default Segment Register Selection Rules\n\nMemory Reference Needed  Segment     Implicit Segment Selection Rule\n                         Register\n                         Used\n\nInstructions             Code (CS)   Automatic with instruction prefetch\nStack                    Stack (SS)  All stack pushes and pops. Any\n                                     memory reference that uses ESP or\n                                     EBP as a base register.\nLocal Data               Data (DS)   All data references except when\n                                     relative to stack or string \n                                     destination.\nDestination Strings      Extra (ES)  Destination of string instructions.\n\n\n2.5.3.2  Effective-Address Computation\n\nThe modR/M byte provides the most flexible of the addressing methods, and\ninstructions that require a modR/M byte as the second byte of the\ninstruction are the most common in the 80386 instruction set. For memory\noperands defined by modR/M, the offset within the desired segment is\ncalculated by taking the sum of up to three components:\n\n    A displacement element in the instruction.\n\n    A base register.\n\n    An index register. The index register may be automatically multiplied\n     by a scaling factor of 2, 4, or 8.\n\nThe offset that results from adding these components is called an effective\naddress. Each of these components of an effective address may have either a\npositive or negative value. If the sum of all the components exceeds 2^(32),\nthe effective address is truncated to 32 bits.Figure 2-10 illustrates the\nfull set of possibilities for modR/M addressing.\n\nThe displacement component, because it is encoded in the instruction, is\nuseful for fixed aspects of addressing; for example:\n\n    Location of simple scalar operands.\n    Beginning of a statically allocated array.\n    Offset of an item within a record.\n\nThe base and index components have similar functions. Both utilize the same\nset of general registers. Both can be used for aspects of addressing that\nare determined dynamically; for example:\n\n    Location of procedure parameters and local variables in stack.\n\n    The beginning of one record among several occurrences of the same\n     record type or in an array of records.\n\n    The beginning of one dimension of multiple dimension array.\n\n    The beginning of a dynamically allocated array.\n\nThe uses of general registers as base or index components differ in the\nfollowing respects:\n\n    ESP cannot be used as an index register.\n\n    When ESP or EBP is used as the base register, the default segment is\n     the one selected by SS. In all other cases the default segment is DS.\n\nThe scaling factor permits efficient indexing into an array in the common\ncases when array elements are 2, 4, or 8 bytes wide. The shifting of the\nindex register is done by the processor at the time the address is evaluated\nwith no performance loss. This eliminates the need for a separate shift or\nmultiply instruction.\n\nThe base, index, and displacement components may be used in any\ncombination; any of these components may be null. A scale factor can be used\nonly when an index is also used. Each possible combination is useful for\ndata structures commonly used by programmers in high-level languages and\nassembly languages. Following are possible uses for some of the various\ncombinations of address components.\n\nDISPLACEMENT\n\n   The displacement alone indicates the offset of the operand. This\n   combination is used to directly address a statically allocated scalar\n   operand. An 8-bit, 16-bit, or 32-bit displacement can be used.\n\nBASE\n\n   The offset of the operand is specified indirectly in one of the general\n   registers, as for \"based\" variables.\n\nBASE + DISPLACEMENT\n\n   A register and a displacement can be used together for two distinct\n   purposes:\n\n   1.  Index into static array when element size is not 2, 4, or 8 bytes.\n       The displacement component encodes the offset of the beginning of\n       the array. The register holds the results of a calculation to\n       determine the offset of a specific element within the array.\n\n   2.  Access item of a record. The displacement component locates an\n       item within record. The base register selects one of several\n       occurrences of record, thereby providing a compact encoding for\n       this common function.\n\n   An important special case of this combination, is to access parameters\n   in the procedure activation record in the stack.  In this case, EBP is\n   the best choice for the base register, because when EBP is used as a\n   base register, the processor automatically uses the stack segment\n   register (SS) to locate the operand, thereby providing a compact\n   encoding for this common function.\n\n(INDEX * SCALE) + DISPLACEMENT\n\n   This combination provides efficient indexing into a static array when\n   the element size is 2, 4, or 8 bytes. The displacement addresses the\n   beginning of the array, the index register holds the subscript of the\n   desired array element, and the processor automatically converts the\n   subscript into an index by applying the scaling factor.\n\nBASE + INDEX + DISPLACEMENT\n\n   Two registers used together support either a two-dimensional array (the\n   displacement determining the beginning of the array) or one of several\n   instances of an array of records (the displacement indicating an item\n   in the record).\n\nBASE + (INDEX * SCALE) + DISPLACEMENT\n\n   This combination provides efficient indexing of a two-dimensional array\n   when the elements of the array are 2, 4, or 8 bytes wide.\n\n\nFigure 2-10.  Effective Address Computation\n\n      SEGMENT +    BASE   +    (INDEX * SCALE)  +     DISPLACEMENT\n\n                      \n                  ---                   \n                EAX       EAX       1 \n       CS       ECX       ECX                                   \n       SS       EDX       EDX       2           NO DISPLACEMENT \n     Ĵ DS  + Ĵ EBX  + Ĵ EBX  * Ĵ    + Ĵ  8-BIT DISPLACEMENT \n       ES       ESP       ---       4       32-BIT DISPLACEMENT \n       FS       EBP       EBP                                   \n       GS       ESI       ESI       6 \n                EDI       EDI         \n                                \n\n\n2.6  Interrupts and Exceptions\n\nThe 80386 has two mechanisms for interrupting program execution:\n\n  1.  Exceptions are synchronous events that are the responses of the CPU\n      to certain conditions detected during the execution of an instruction.\n\n  2.  Interrupts are asynchronous events typically triggered by external\n      devices needing attention.\n\nInterrupts and exceptions are alike in that both cause the processor to\ntemporarily suspend its present program execution in order to execute a\nprogram of higher priority. The major distinction between these two kinds of\ninterrupts is their origin. An exception is always reproducible by\nre-executing with the program and data that caused the exception, whereas an\ninterrupt is generally independent of the currently executing program.\n\nApplication programmers are not normally concerned with servicing\ninterrupts. More information on interrupts for systems programmers may be\nfound in Chapter 9. Certain exceptions, however, are of interest to\napplications programmers, and many operating systems give applications\nprograms the opportunity to service these exceptions. However, the operating\nsystem itself defines the interface between the applications programs and\nthe exception mechanism of the 80386.\n\nTable 2-2 highlights the exceptions that may be of interest to applications\nprogrammers.\n\n    A divide error exception results when the instruction DIV or IDIV is\n     executed with a zero denominator or when the quotient is too large for\n     the destination operand. (Refer to Chapter 3 for a discussion of DIV\n     and IDIV.)\n\n    The debug exception may be reflected back to an applications program\n     if it results from the trap flag (TF).\n\n    A breakpoint exception results when the instruction INT 3 is executed.\n     This instruction is used by some debuggers to stop program execution at\n     specific points.\n\n    An overflow exception results when the INTO instruction is executed\n     and the OF (overflow) flag is set (after an arithmetic operation that\n     set the OF flag). (Refer to Chapter 3 for a discussion of INTO).\n\n    A bounds check exception results when the BOUND instruction is\n     executed and the array index it checks falls outside the bounds of the\n     array. (Refer to Chapter 3 for a discussion of the BOUND instruction.)\n\n    Invalid opcodes may be used by some applications to extend the\n     instruction set. In such a case, the invalid opcode exception presents\n     an opportunity to emulate the opcode.\n\n    The \"coprocessor not available\" exception occurs if the program\n     contains instructions for a coprocessor, but no coprocessor is present\n     in the system.\n\n    A coprocessor error is generated when a coprocessor detects an illegal\n     operation.\n\nThe instruction INT generates an interrupt whenever it is executed; the\nprocessor treats this interrupt as an exception. The effects of this\ninterrupt (and the effects of all other exceptions) are determined by\nexception handler routines provided by the application program or as part of\nthe systems software (provided by systems programmers). The INT instruction\nitself is discussed in Chapter 3. Refer to Chapter 9 for a more complete\ndescription of exceptions.\n\n\nTable 2-2. 80386 Reserved Exceptions and Interrupts\n\nVector Number      Description\n\n0                  Divide Error\n1                  Debug Exceptions\n2                  NMI Interrupt\n3                  Breakpoint\n4                  INTO Detected Overflow\n5                  BOUND Range Exceeded\n6                  Invalid Opcode\n7                  Coprocessor Not Available\n8                  Double Exception\n9                  Coprocessor Segment Overrun\n10                 Invalid Task State Segment\n11                 Segment Not Present\n12                 Stack Fault\n13                 General Protection\n14                 Page Fault\n15                 (reserved)\n16                 Coprocessor Error\n17-32              (reserved)\n\n\nChapter 3  Applications Instruction Set\n\n\n\nThis chapter presents an overview of the instructions which programmers can\nuse to write application software for the 80386 executing in protected\nvirtual-address mode. The instructions are grouped by categories of related\nfunctions.\n\nThe instructions not discussed in this chapter are those that are normally\nused only by operating-system programmers. Part II describes the operation\nof these instructions.\n\nThe descriptions in this chapter assume that the 80386 is operating in\nprotected mode with 32-bit addressing in effect; however, all instructions\ndiscussed are also available when 16-bit addressing is in effect in\nprotected mode, real mode, or virtual 8086 mode. For any differences of\noperation that exist in the various modes, refer to Chapter 13,\nChapter 14, or Chapter 15.\n\nThe instruction dictionary in Chapter 17 contains more detailed\ndescriptions of all instructions, including encoding, operation, timing,\neffect on flags, and exceptions.\n\n\n3.1  Data Movement Instructions\n\nThese instructions provide convenient methods for moving bytes, words, or\ndoublewords of data between memory and the registers of the base\narchitecture. They fall into the following classes:\n\n  1.  General-purpose data movement instructions.\n  2.  Stack manipulation instructions.\n  3.  Type-conversion instructions.\n\n\n3.1.1  General-Purpose Data Movement Instructions\n\nMOV (Move) transfers a byte, word, or doubleword from the source operand to\nthe destination operand. The MOV instruction is useful for transferring data\nalong any of these paths\nThere are also variants of MOV that operate on segment registers.  These\nare covered in a later section of this chapter.:\n\n    To a register from memory\n    To memory from a register\n    Between general registers\n    Immediate data to a register\n    Immediate data to a memory\n\nThe MOV instruction cannot move from memory to memory or from segment\nregister to segment register are not allowed. Memory-to-memory moves can be\nperformed, however, by the string move instruction MOVS.\n\nXCHG (Exchange) swaps the contents of two operands. This instruction takes\nthe place of three MOV instructions. It does not require a temporary\nlocation to save the contents of one operand while load the other is being\nloaded. XCHG is especially useful for implementing semaphores or similar\ndata structures for process synchronization.\n\nThe XCHG instruction can swap two byte operands, two word operands, or two\ndoubleword operands. The operands for the XCHG instruction may be two\nregister operands, or a register operand with a memory operand. When used\nwith a memory operand, XCHG automatically activates the LOCK signal. (Refer\nto Chapter 11 for more information on the bus lock.)\n\n\n3.1.2  Stack Manipulation Instructions\n\nPUSH (Push) decrements the stack pointer (ESP), then transfers the source\noperand to the top of stack indicated by ESP (see Figure 3-1). PUSH is\noften used to place parameters on the stack before calling a procedure; it\nis also the basic means of storing temporary variables on the stack. The\nPUSH instruction operates on memory operands, immediate operands, and\nregister operands (including segment registers).\n\nPUSHA (Push All Registers) saves the contents of the eight general\nregisters on the stack (see Figure 3-2). This instruction simplifies\nprocedure calls by reducing the number of instructions required to retain\nthe contents of the general registers for use in a procedure. The processor\npushes the general registers on the stack in the following order: EAX, ECX,\nEDX, EBX, the initial value of ESP before EAX was pushed, EBP, ESI, and\nEDI. PUSHA is complemented by the POPA instruction.\n\nPOP (Pop) transfers the word or doubleword at the current top of stack\n(indicated by ESP) to the destination operand, and then increments ESP to\npoint to the new top of stack. See Figure 3-3. POP moves information from\nthe stack to a general register, or to memory\nThere are also a variant of POP that operates on segment registers. This\nis covered in a later section of this chapter..\n\nPOPA (Pop All Registers) restores the registers saved on the stack by\nPUSHA, except that it ignores the saved value of ESP. See Figure 3-4.\n\n\nFigure 3-1.  PUSH\n\n       D  O        BEFORE PUSH                  AFTER PUSH\n       I  F     \u0007 31          0 \u0007           \u0007 31          0 \u0007\n       R                                                 \n       E  E     ͹           ͹\n       C  X                \n       T  P     ͹           ͹\n       I  A                \n       O  N     ͹\u0011ESP     ͹\n       N  S                                   OPERAND    \n          I     ͹           ͹\u0011ESP\n         O                                              \n         N     ͹           ͹\n                                                        \n        \u001f       ͹           ͹\n                                                         \n                \u0007               \u0007           \u0007               \u0007\n\n\nFigure 3-2.  PUSHA\n\n                   BEFORE PUSHA                AFTER PUSHA\n                \u0007 31          0 \u0007           \u0007 31          0 \u0007\n         D  O                                            \n         I  F   ͹           ͹\n         R                 \n         E  E   ͹           ͹\n         C  X              \n         T  P   ͹\u0011ESP     ͹\n         I  A                                   EAX      \n         O  N   ͹           ͹\n         N  S                                   ECX      \n            I   ͹           ͹\n           O                                   EDX      \n           N   ͹           ͹\n                                               EBX      \n          \u001f     ͹           ͹\n                                              OLD ESP    \n                ͹           ͹\n                                                EBP      \n                ͹           ͹\n                                                ESI      \n                ͹           ͹\n                                                EDI      \n                ͹           ͹\u0011ESP\n                                                         \n                ͹           ͹\n                                                         \n                \u0007               \u0007           \u0007               \u0007\n\n\n3.1.3  Type Conversion Instructions\n\nThe type conversion instructions convert bytes into words, words into\ndoublewords, and doublewords into 64-bit items (quad-words). These\ninstructions are especially useful for converting signed integers, because\nthey automatically fill the extra bits of the larger item with the value of\nthe sign bit of the smaller item. This kind of conversion, illustrated by\nFigure 3-5, is called sign extension.\n\nThere are two classes of type conversion instructions:\n\n  1.  The forms CWD, CDQ, CBW, and CWDE which operate only on data in the\n      EAX register.\n\n  2.  The forms MOVSX and MOVZX, which permit one operand to be in any\n      general register while permitting the other operand to be in memory or\n      in a register.\n\nCWD (Convert Word to Doubleword) and CDQ (Convert Doubleword to Quad-Word)\ndouble the size of the source operand. CWD extends the sign of the\nword in register AX throughout register DX. CDQ extends the sign of the\ndoubleword in EAX throughout EDX. CWD can be used to produce a doubleword\ndividend from a word before a word division, and CDQ can be used to produce\na quad-word dividend from a doubleword before doubleword division.\n\nCBW (Convert Byte to Word) extends the sign of the byte in register AL\nthroughout AX.\n\nCWDE (Convert Word to Doubleword Extended) extends the sign of the word in\nregister AX throughout EAX.\n\nMOVSX (Move with Sign Extension) sign-extends an 8-bit value to a 16-bit\nvalue and a 8- or 16-bit value to 32-bit value.\n\nMOVZX (Move with Zero Extension) extends an 8-bit value to a 16-bit value\nand an 8- or 16-bit value to 32-bit value by inserting high-order zeros.\n\n\nFigure 3-3.  POP\n\n       D  O         BEFORE POP                  AFTER POP\n       I  F     \u0007 31          0 \u0007           \u0007 31          0 \u0007\n       R                                                 \n       E  E     ͹           ͹\n       C  X                \n       T  P     ͹           ͹\n       I  A                \n       O  N     ͹           ͹\u0011ESP\n       N  S         OPERAND                              \n          I     ͹\u0011ESP     ͹\n         O                                              \n         N     ͹           ͹\n                                                        \n        \u001f       ͹           ͹\n                                                         \n                \u0007               \u0007           \u0007               \u0007\n\n\nFigure 3-4.  POPA\n\n                   BEFORE POPA                  AFTER POPA\n                \u0007 31          0 \u0007           \u0007 31          0 \u0007\n         D  O                                            \n         I  F   ͹           ͹\n         R                 \n         E  E   ͹           ͹\n         C  X              \n         T  P   ͹           ͹\u0011ESP\n         I  A         EAX                                \n         O  N   ͹           ͹\n         N  S         ECX                                \n            I   ͹           ͹\n           O         EDX                                \n           N   ͹           ͹\n                     EBX                                \n          \u001f     ͹           ͹\n                      ESP                                \n                ͹           ͹\n                      EPB                                \n                ͹           ͹\n                      ESI                                \n                ͹           ͹\n                      EDI                                \n                ͹\u0011ESP     ͹\n                                                         \n                ͹           ͹\n                                                         \n                \u0007               \u0007           \u0007               \u0007\n\n\nFigure 3-5.  Sign Extension\n\n                                    15                7               0\n                                    ͻ\n     BEFORE SIGN EXTENSION\u0010S N N N N N N N N N N N N N N N \n                                    ͼ\n     AFTER SIGN EXTENSIONĿ\n                               \n    31               23        \u001f     15              7              0\n    ͻ\n    SS S S S S S S S S S S S S S S S N N N N N N N N N N N N N N N\n    ͼ\n\n\n3.2  Binary Arithmetic Instructions\n\nThe arithmetic instructions of the 80386 processor simplify the\nmanipulation of numeric data that is encoded in binary. Operations include\nthe standard add, subtract, multiply, and divide as well as increment,\ndecrement, compare, and change sign. Both signed and unsigned binary\nintegers are supported. The binary arithmetic instructions may also be used\nas one step in the process of performing arithmetic on decimal integers.\n\nMany of the arithmetic instructions operate on both signed and unsigned\nintegers. These instructions update the flags ZF, CF, SF, and OF in such a\nmanner that subsequent instructions can interpret the results of the\narithmetic as either signed or unsigned. CF contains information relevant to\nunsigned integers; SF and OF contain information relevant to signed\nintegers. ZF is relevant to both signed and unsigned integers; ZF is set\nwhen all bits of the result are zero.\n\nIf the integer is unsigned, CF may be tested after one of these arithmetic\noperations to determine whether the operation required a carry or borrow of\na one-bit in the high-order position of the destination operand. CF is set\nif a one-bit was carried out of the high-order position (addition\ninstructions ADD, ADC, AAA, and DAA) or if a one-bit was carried (i.e.\nborrowed) into the high-order bit (subtraction instructions SUB, SBB, AAS,\nDAS, CMP, and NEG).\n\nIf the integer is signed, both SF and OF should be tested. SF always has\nthe same value as the sign bit of the result. The most significant bit (MSB)\nof a signed integer is the bit next to the signbit 6 of a byte, bit 14 of\na word, or bit 30 of a doubleword. OF is set in either of these cases:\n\n    A one-bit was carried out of the MSB into the sign bit but no one bit\n     was carried out of the sign bit (addition instructions ADD, ADC, INC,\n     AAA, and DAA). In other words, the result was greater than the greatest\n     positive number that could be contained in the destination operand.\n\n    A one-bit was carried from the sign bit into the MSB but no one bit\n     was carried into the sign bit (subtraction instructions SUB, SBB, DEC,\n     AAS, DAS, CMP, and NEG). In other words, the result was smaller that\n     the smallest negative number that could be contained in the destination\n     operand.\n\nThese status flags are tested by executing one of the two families of\nconditional instructions: Jcc (jump on condition cc) or SETcc (byte set on\ncondition).\n\n\n3.2.1  Addition and Subtraction Instructions\n\nADD (Add Integers) replaces the destination operand with the sum of the\nsource and destination operands. Sets CF if overflow.\n\nADC (Add Integers with Carry) sums the operands, adds one if CF is set, and\nreplaces the destination operand with the result. If CF is cleared, ADC\nperforms the same operation as the ADD instruction. An ADD followed by\nmultiple ADC instructions can be used to add numbers longer than 32 bits.\n\nINC (Increment) adds one to the destination operand. INC does not affect\nCF. Use ADD with an immediate value of 1 if an increment that updates carry\n(CF) is needed.\n\nSUB (Subtract Integers) subtracts the source operand from the destination\noperand and replaces the destination operand with the result. If a borrow is\nrequired, the CF is set. The operands may be signed or unsigned bytes,\nwords, or doublewords.\n\nSBB (Subtract Integers with Borrow) subtracts the source operand from the\ndestination operand, subtracts 1 if CF is set, and returns the result to the\ndestination operand. If CF is cleared, SBB performs the same operation as\nSUB. SUB followed by multiple SBB instructions may be used to subtract\nnumbers longer than 32 bits. If CF is cleared, SBB performs the same\noperation as SUB.\n\nDEC (Decrement) subtracts 1 from the destination operand. DEC does not\nupdate CF. Use SUB with an immediate value of 1 to perform a decrement that\naffects carry.\n\n\n3.2.2  Comparison and Sign Change Instruction\n\nCMP (Compare) subtracts the source operand from the destination operand. It\nupdates OF, SF, ZF, AF, PF, and CF but does not alter the source and\ndestination operands. A subsequent Jcc or SETcc instruction can test the\nappropriate flags.\n\nNEG (Negate) subtracts a signed integer operand from zero. The effect of\nNEG is to reverse the sign of the operand from positive to negative or from\nnegative to positive.\n\n\n3.2.3  Multiplication Instructions\n\nThe 80386 has separate multiply instructions for unsigned and signed\noperands. MUL operates on unsigned numbers, while IMUL operates on signed\nintegers as well as unsigned.\n\nMUL (Unsigned Integer Multiply) performs an unsigned multiplication of the\nsource operand and the accumulator. If the source is a byte, the processor\nmultiplies it by the contents of AL and returns the double-length result to\nAH and AL. If the source operand is a word, the processor multiplies it by\nthe contents of AX and returns the double-length result to DX and AX. If the\nsource operand is a doubleword, the processor multiplies it by the contents\nof EAX and returns the 64-bit result in EDX and EAX. MUL sets CF and OF\nwhen the upper half of the result is nonzero; otherwise, they are cleared.\n\nIMUL (Signed Integer Multiply) performs a signed multiplication operation.\nIMUL has three variations:\n\n  1.  A one-operand form. The operand may be a byte, word, or doubleword\n      located in memory or in a general register. This instruction uses EAX\n      and EDX as implicit operands in the same way as the MUL instruction.\n\n  2.  A two-operand form. One of the source operands may be in any general\n      register while the other may be either in memory or in a general\n      register. The product replaces the general-register operand.\n\n  3.  A three-operand form; two are source and one is the destination\n      operand. One of the source operands is an immediate value stored in\n      the instruction; the second may be in memory or in any general\n      register. The product may be stored in any general register. The\n      immediate operand is treated as signed. If the immediate operand is a\n      byte, the processor automatically sign-extends it to the size of the\n      second operand before performing the multiplication.\n\nThe three forms are similar in most respects:\n\n    The length of the product is calculated to twice the length of the\n     operands.\n\n    The CF and OF flags are set when significant bits are carried into the\n     high-order half of the result. CF and OF are cleared when the\n     high-order half of the result is the sign-extension of the low-order\n     half.\n\nHowever, forms 2 and 3 differ in that the product is truncated to the\nlength of the operands before it is stored in the destination register.\nBecause of this truncation, OF should be tested to ensure that no\nsignificant bits are lost. (For ways to test OF, refer to the INTO and PUSHF\ninstructions.)\n\nForms 2 and 3 of IMUL may also be used with unsigned operands because,\nwhether the operands are signed or unsigned, the low-order half of the\nproduct is the same.\n\n\n3.2.4  Division Instructions\n\nThe 80386 has separate division instructions for unsigned and signed\noperands. DIV operates on unsigned numbers, while IDIV operates on signed\nintegers as well as unsigned. In either case, an exception (interrupt zero)\noccurs if the divisor is zero or if the quotient is too large for AL, AX, or\nEAX.\n\nDIV (Unsigned Integer Divide) performs an unsigned division of the\naccumulator by the source operand. The dividend (the accumulator) is twice\nthe size of the divisor (the source operand); the quotient and remainder\nhave the same size as the divisor, as the following table shows.\n\nSize of Source Operand\n      (divisor)             Dividend       Quotient      Remainder\n\nByte                        AX             AL            AH\nWord                        DX:AX          AX            DX\nDoubleword                  EDX:EAX        EAX           EDX\n\nNon-integral quotients are truncated to integers toward 0. The remainder is\nalways less than the divisor. For unsigned byte division, the largest\nquotient is 255. For unsigned word division, the largest quotient is 65,535.\nFor unsigned doubleword division the largest quotient is 2^(32) -1.\n\nIDIV (Signed Integer Divide) performs a signed division of the accumulator\nby the source operand. IDIV uses the same registers as the DIV instruction.\n\nFor signed byte division, the maximum positive quotient is +127, and the\nminimum negative quotient is -128. For signed word division, the maximum\npositive quotient is +32,767, and the minimum negative quotient is -32,768.\nFor signed doubleword division the maximum positive quotient is 2^(31) -1,\nthe minimum negative quotient is -2^(31). Non-integral results are truncated\ntowards 0. The remainder always has the same sign as the dividend and is\nless than the divisor in magnitude.\n\n\n3.3  Decimal Arithmetic Instructions\n\nDecimal arithmetic is performed by combining the binary arithmetic\ninstructions (already discussed in the prior section) with the decimal\narithmetic instructions. The decimal arithmetic instructions are used in one\nof the following ways:\n\n    To adjust the results of a previous binary arithmetic operation to\n     produce a valid packed or unpacked decimal result.\n\n    To adjust the inputs to a subsequent binary arithmetic operation so\n     that the operation will produce a valid packed or unpacked decimal\n     result.\n\nThese instructions operate only on the AL or AH registers. Most utilize the\nAF flag.\n\n\n3.3.1  Packed BCD Adjustment Instructions\n\nDAA (Decimal Adjust after Addition) adjusts the result of adding two valid\npacked decimal operands in AL. DAA must always follow the addition of two\npairs of packed decimal numbers (one digit in each half-byte) to obtain a\npair of valid packed decimal digits as results. The carry flag is set if\ncarry was needed.\n\nDAS (Decimal Adjust after Subtraction) adjusts the result of subtracting\ntwo valid packed decimal operands in AL. DAS must always follow the\nsubtraction of one pair of packed decimal numbers (one digit in each half-\nbyte) from another to obtain a pair of valid packed decimal digits as\nresults. The carry flag is set if a borrow was needed.\n\n\n3.3.2  Unpacked BCD Adjustment Instructions\n\nAAA (ASCII Adjust after Addition) changes the contents of register AL to a\nvalid unpacked decimal number, and zeros the top 4 bits. AAA must always\nfollow the addition of two unpacked decimal operands in AL. The carry flag\nis set and AH is incremented if a carry is necessary.\n\nAAS (ASCII Adjust after Subtraction) changes the contents of register AL to\na valid unpacked decimal number, and zeros the top 4 bits. AAS must always\nfollow the subtraction of one unpacked decimal operand from another in AL.\nThe carry flag is set and AH decremented if a borrow is necessary.\n\nAAM (ASCII Adjust after Multiplication) corrects the result of a\nmultiplication of two valid unpacked decimal numbers. AAM must always follow\nthe multiplication of two decimal numbers to produce a valid decimal result.\nThe high order digit is left in AH, the low order digit in AL.\n\nAAD (ASCII Adjust before Division) modifies the numerator in AH and AL to\nprepare for the division of two valid unpacked decimal operands so that the\nquotient produced by the division will be a valid unpacked decimal number.\nAH should contain the high-order digit and AL the low-order digit. This\ninstruction adjusts the value and places the result in AL. AH will contain\nzero.\n\n\n3.4  Logical Instructions\n\nThe group of logical instructions includes:\n\n    The Boolean operation instructions\n    Bit test and modify instructions\n    Bit scan instructions\n    Rotate and shift instructions\n    Byte set on condition\n\n\n3.4.1  Boolean Operation Instructions\n\nThe logical operations are AND, OR, XOR, and NOT.\n\nNOT (Not) inverts the bits in the specified operand to form a one's\ncomplement of the operand. The NOT instruction is a unary operation that\nuses a single operand in a register or memory. NOT has no effect on the\nflags.\n\nThe AND, OR, and XOR instructions perform the standard logical operations\n\"and\", \"(inclusive) or\", and \"exclusive or\". These instructions can use the\nfollowing combinations of operands:\n\n    Two register operands\n\n    A general register operand with a memory operand\n\n    An immediate operand with either a general register operand or a\n     memory operand.\n\nAND, OR, and XOR clear OF and CF, leave AF undefined, and update SF, ZF,\nand PF.\n\n\n3.4.2  Bit Test and Modify Instructions\n\nThis group of instructions operates on a single bit which can be in memory\nor in a general register. The location of the bit is specified as an offset\nfrom the low-order end of the operand. The value of the offset either may be\ngiven by an immediate byte in the instruction or may be contained in a\ngeneral register.\n\nThese instructions first assign the value of the selected bit to CF, the\ncarry flag. Then a new value is assigned to the selected bit, as determined\nby the operation. OF, SF, ZF, AF, PF are left in an undefined state. Table\n3-1 defines these instructions.\n\n\nTable 3-1. Bit Test and Modify Instructions\n\nInstruction                      Effect on CF            Effect on\n                                                         Selected Bit\n\nBit (Bit Test)                   CF \u001b BIT                (none)\nBTS (Bit Test and Set)           CF \u001b BIT                BIT \u001b 1\nBTR (Bit Test and Reset)         CF \u001b BIT                BIT \u001b 0\nBTC (Bit Test and Complement)    CF \u001b BIT                BIT \u001b NOT(BIT)\n\n\n3.4.3  Bit Scan Instructions\n\nThese instructions scan a word or doubleword for a one-bit and store the\nindex of the first set bit into a register.  The bit string being scanned\nmay be either in a register or in memory. The ZF flag is set if the entire\nword is zero (no set bits are found); ZF is cleared if a one-bit is found.\nIf no set bit is found, the value of the destination register is undefined.\n\nBSF (Bit Scan Forward) scans from low-order to high-order (starting from\nbit index zero).\n\nBSR (Bit Scan Reverse) scans from high-order to low-order (starting from\nbit index 15 of a word or index 31 of a doubleword).\n\n\n3.4.4  Shift and Rotate Instructions\n\nThe shift and rotate instructions reposition the bits within the specified\noperand.\n\nThese instructions fall into the following classes:\n\n    Shift instructions\n    Double shift instructions\n    Rotate instructions\n\n\n3.4.4.1  Shift Instructions\n\nThe bits in bytes, words, and doublewords may be shifted arithmetically or\nlogically. Depending on the value of a specified count, bits can be shifted\nup to 31 places.\n\nA shift instruction can specify the count in one of three ways. One form of\nshift instruction implicitly specifies the count as a single shift. The\nsecond form specifies the count as an immediate value. The third form\nspecifies the count as the value contained in CL. This last form allows the\nshift count to be a variable that the program supplies during execution.\nOnly the low order 5 bits of CL are used.\n\nCF always contains the value of the last bit shifted out of the destination\noperand. In a single-bit shift, OF is set if the value of the high-order\n(sign) bit was changed by the operation. Otherwise, OF is cleared. Following\na multibit shift, however, the content of OF is always undefined.\n\nThe shift instructions provide a convenient way to accomplish division or\nmultiplication by binary power. Note however that division of signed numbers\nby shifting right is not the same kind of division performed by the IDIV\ninstruction.\n\nSAL (Shift Arithmetic Left) shifts the destination byte, word, or\ndoubleword operand left by one or by the number of bits specified in the\ncount operand (an immediate value or the value contained in CL). The\nprocessor shifts zeros in from the right (low-order) side of the operand as\nbits exit from the left (high-order) side. See Figure 3-6.\n\nSHL (Shift Logical Left) is a synonym for SAL (refer to SAL).\n\nSHR (Shift Logical Right) shifts the destination byte, word, or doubleword\noperand right by one or by the number of bits specified in the count operand\n(an immediate value or the value contained in CL). The processor shifts\nzeros in from the left side of the operand as bits exit from the right side.\nSee Figure 3-7.\n\nSAR (Shift Arithmetic Right) shifts the destination byte, word, or\ndoubleword operand to the right by one or by the number of bits specified in\nthe count operand (an immediate value or the value contained in CL). The\nprocessor preserves the sign of the operand by shifting in zeros on the left\n(high-order) side if the value is positive or by shifting by ones if the\nvalue is negative. See Figure 3-8.\n\nEven though this instruction can be used to divide integers by a power of\ntwo, the type of division is not the same as that produced by the IDIV\ninstruction. The quotient of IDIV is rounded toward zero, whereas the\n\"quotient\" of SAR is rounded toward negative infinity. This difference is\napparent only for negative numbers. For example, when IDIV is used to divide\n-9 by 4, the result is -2 with a remainder of -1. If SAR is used to shift\n-9 right by two bits, the result is -3. The \"remainder\" of this kind of\ndivision is +3; however, the SAR instruction stores only the high-order bit\nof the remainder (in CF).\n\nThe code sequence in Figure 3-9 produces the same result as IDIV for any M\n= 2^(N), where 0 < N < 32. This sequence takes about 12 to 18 clocks,\ndepending on whether the jump is taken; if ECX contains M, the corresponding\nIDIV ECX instruction will take about 43 clocks.\n\n\nFigure 3-6.  SAL and SHL\n\n                     OF   CF                OPERAND\n\n       BEFORE SHL    X    X     10001000100010001000100010001111\n       OR SAL\n\n       AFTER SHL     1    1 \u0011 00010001000100010001000100011110 \u0011 0\n       OR SAL BY 1\n\n       AFTER SHL     X    0 \u0011 00100010001000100011110000000000 \u0011 0\n       OR SAL BY 10\n\nSHL (WHICH HAS THE SYNONYM SAL) SHIFTS THE BITS IN THE REGISTER OR MEMORY\nOPERAND TO THE LEFT BY THE SPECIFIED NUMBER OF BIT POSITIONS. CF RECEIVES\nTHE LAST BIT SHIFTED OUT OF THE LEFT OF THE OPERAND. SHL SHIFTS IN ZEROS\nTO FILL THE VACATED BIT LOCATIONS. THESE INSTRUCTIONS OPERATE ON BYTE,\nWORD, AND DOUBLEWORD OPERANDS.\n\n\nFigure 3-7.  SHR\n\n                                      OPERAND                  CF\n\n       BEFORE SHR         10001000100010001000100010001111     X\n\n       AFTER SHR    0\u001001000100010001000100010001000111\u00101\n       BY 1\n\n       AFTER SHR    0\u001000000000001000100010001000100010\u0010O\n       BY 10\n\nSHR SHIFTS THE BITS OF THE REGISTER OR MEMORY OPERAND TO THE RIGHT BY THE\nSPECIFIED NUMBER OF BIT POSITIONS. CF RECEIVES THE LAST BIT SHIFTED OUT OF\nTHE RIGHT OF THE OPERAND. SHR SHIFTS IN ZEROS TO FILL THE VACATED BIT\nLOCATIONS.\n\n\nFigure 3-8.  SAR\n\n                                  POSITIVE OPERAND             CF\n\n       BEFORE SAR         01000100010001000100010001000111     X\n\n       AFTER SAR    0\u001000100010001000100010001000100011\u00101\n       BY 1\n\n                                  NEGATIVE OPERAND             CF\n\n       BEFORE SAR         11000100010001000100010001000111     X\n\n       AFTER SAR    0\u001011100010001000100010001000100011\u00101\n       BY 1\n\nSAR PRESERVES THE SIGN OF THE REGISTER OR MEMORY OPERAND AS IT SHIFTS THE\nOPERAND TO THE RIGHT BY THE SPECIFIED NUMBER OF BIT POSITIONS. CF RECIEVES\nTHE LAST BIT SHIFTED OUT OF THE RIGHT OF THE OPERAND.\n\n\nFigure 3-9.  Using SAR to Simulate IDIV\n\n    ; assuming N is in ECX, and the dividend is in EAX\n    ;                                               CLOCKS\n    CMP     EAX, 0      ; to set sign flag          2\n    JGE     NoAdjust    ; jump if sign is zero      3 or 9\n    ADD     EAX, ECX    ;                           2\n    DEC     EAX         ; EAX := EAX + (N-1)        2\nNoAdjust:\n    SAR     EAX, CL     ;                           3\n    ;                       TOTAL CLOCKS           12 or 18]\n\n\n3.4.4.2  Double-Shift Instructions\n\nThese instructions provide the basic operations needed to implement\noperations on long unaligned bit strings. The double shifts operate either\non word or doubleword operands, as follows:\n\n  1.  Taking two word operands as input and producing a one-word output.\n\n  2.  Taking two doubleword operands as input and producing a doubleword\n      output.\n\nOf the two input operands, one may either be in a general register or in\nmemory, while the other may only be in a general register. The results\nreplace the memory or register operand. The number of bits to be shifted is\nspecified either in the CL register or in an immediate byte of the\ninstruction.\n\nBits are shifted from the register operand into the memory or register\noperand. CF is set to the value of the last bit shifted out of the\ndestination operand. SF, ZF, and PF are set according to the value of the\nresult. OF and AF are left undefined.\n\nSHLD (Shift Left Double) shifts bits of the R/M field to the left, while\nshifting high-order bits from the Reg field into the R/M field on the right\n(see Figure 3-10). The result is stored back into the R/M operand. The Reg\nfield is not modified.\n\nSHRD (Shift Right Double) shifts bits of the R/M field to the right, while\nshifting low-order bits from the Reg field into the R/M field on the left\n(see Figure 3-11). The result is stored back into the R/M operand. The Reg\nfield is not modified.\n\n\n3.4.4.3  Rotate Instructions\n\nRotate instructions allow bits in bytes, words, and doublewords to be\nrotated. Bits rotated out of an operand are not lost as in a shift, but are\n\"circled\" back into the other \"end\" of the operand.\n\nRotates affect only the carry and overflow flags. CF may act as an\nextension of the operand in two of the rotate instructions, allowing a bit\nto be isolated and then tested by a conditional jump instruction (JC or\nJNC). CF always contains the value of the last bit rotated out, even if the\ninstruction does not use this bit as an extension of the rotated operand.\n\nIn single-bit rotates, OF is set if the operation changes the high-order\n(sign) bit of the destination operand. If the sign bit retains its original\nvalue, OF is cleared. On multibit rotates, the value of OF is always\nundefined.\n\nROL (Rotate Left) rotates the byte, word, or doubleword destination operand\nleft by one or by the number of bits specified in the count operand (an\nimmediate value or the value contained in CL). For each rotation specified,\nthe high-order bit that exits from the left of the operand returns at the\nright to become the new low-order bit of the operand. See Figure 3-12.\n\nROR (Rotate Right) rotates the byte, word, or doubleword destination\noperand right by one or by the number of bits specified in the count operand\n(an immediate value or the value contained in CL). For each rotation\nspecified, the low-order bit that exits from the right of the operand\nreturns at the left to become the new high-order bit of the operand.\nSee Figure 3-13.\n\nRCL (Rotate Through Carry Left) rotates bits in the byte, word, or\ndoubleword destination operand left by one or by the number of bits\nspecified in the count operand (an immediate value or the value contained in\nCL).\n\nThis instruction differs from ROL in that it treats CF as a high-order\none-bit extension of the destination operand. Each high-order bit that exits\nfrom the left side of the operand moves to CF before it returns to the\noperand as the low-order bit on the next rotation cycle. See Figure 3-14.\n\nRCR (Rotate Through Carry Right) rotates bits in the byte, word, or\ndoubleword destination operand right by one or by the number of bits\nspecified in the count operand (an immediate value or the value contained in\nCL).\n\nThis instruction differs from ROR in that it treats CF as a low-order\none-bit extension of the destination operand. Each low-order bit that exits\nfrom the right side of the operand moves to CF before it returns to the\noperand as the high-order bit on the next rotation cycle. See Figure 3-15.\n\n\nFigure 3-10.  Shift Left Double\n\n                  31                   DESTINATION                 0\n    ͻ       ͻ\n     CF \u0011Ķ                 MEMORY OF REGISTER               \u0011Ŀ\n    ͼ       ͼ    \n             \n                 31                     SOURCE                    0\n                ͻ\n             Ķ                      REGISTER                    \n                 ͼ\n\n\nFigure 3-11.  Shift Right Double\n\n        31                     SOURCE                    0\n       ͻ\n                             REGISTER                    Ŀ\n       ͼ   \n   \n       31                   DESTINATION                 0\n      ͻ        ͻ\n   \u0010                 MEMORY OF REGISTER               \u0010 CF \n       ͼ        ͼ\n\n\nFigure 3-12.  ROL\n\n                  31                   DESTINATION                 0\n    ͻ       ͻ\n     CF \u0011Ķ                 MEMORY OF REGISTER               \u0011Ŀ\n    ͼ      ͼ   \n              \n\n\nFigure 3-13.  ROR\n\n     Ŀ\n         31                   DESTINATION                 0    \n        ͻ       ͻ\n     \u0010                 MEMORY OF REGISTER               \u0010 CF \n         ͼ        ͼ\n\n\nFigure 3-14.  RCL\n\n                  31                   DESTINATION                 0\n    ͻ       ͻ\n  Ķ CF \u0011Ķ                 MEMORY OF REGISTER               \u0011Ŀ\n   ͼ       ͼ   \n  \n\n\nFigure 3-15.  RCR\n\n   Ŀ\n       31                   DESTINATION                 0                \n      ͻ        ͻ \n   \u0010                 MEMORY OF REGISTER               \u0010 CF \n       ͼ        ͼ\n\n\n3.4.4.4  Fast \"BIT BLT\" Using Double Shift Instructions\n\nOne purpose of the double shifts is to implement a bit string move, with\narbitrary misalignment of the bit strings.  This is called a \"bit blt\" (BIT\nBLock Transfer.)  A simple example is to move a bit string from an arbitrary\noffset into a doubleword-aligned byte string.  A left-to-right string is\nmoved 32 bits at a time if a double shift is used inside the move loop.\n\n     MOV   ESI,ScrAddr\n     MOV   EDI,DestAddr\n     MOV   EBX,WordCnt\n     MOV   CL,RelOffset      ; relative offset Dest-Src\n     MOV   EDX,[ESI]         ; load first word of source\n     ADD   ESI,4             ; bump source address\nBltLoop:\n     LODS                    ; new low order part\n     SHLD  EDX,EAX,CL        ; EDX overwritten with aligned stuff\n     XCHG  EDX,EAS           ; Swap high/low order parts\n     STOS                    ; Write out next aligned chunk\n     DEC   EBX\n     JA    BltLoop\n\nThis loop is simple yet allows the data to be moved in 32-bit pieces for\nthe highest possible performance. Without a double shift, the best that can\nbe achieved is 16 bits per loop iteration by using a 32-bit shift and\nreplacing the XCHG with a ROR by 16 to swap high and low order parts of\nregisters. A more general loop than shown above would require some extra\nmasking on the first doubleword moved (before the main loop), and on the\nlast doubleword moved (after the main loop), but would have the same basic\n32-bits per loop iteration as the code above.\n\n\n3.4.4.5  Fast Bit-String Insert and Extract\n\nThe double shift instructions also enable:\n\n    Fast insertion of a bit string from a register into an arbitrary bit\n     location in a larger bit string in memory without disturbing the bits\n     on either side of the inserted bits.\n\n    Fast extraction of a bits string into a register from an arbitrary bit\n     location in a larger bit string in memory without disturbing the bits\n     on either side of the extracted bits.\n\nThe following coded examples illustrate bit insertion and extraction under\nvariousconditions:\n\n  1.  Bit String Insert into Memory (when bit string is 1-25 bits long,\n      i.e., spans four bytes or less):\n\n      ; Insert a right-justified bit string from register into\n      ; memory bit string.\n      ;\n      ; Assumptions:\n      ; 1) The base of the string array is dword aligned, and\n      ; 2) the length of the bit string is an immediate value\n      ;    but the bit offset is held in a register.\n      ;\n      ; Register ESI holds the right-justified bit string\n      ; to be inserted.\n      ; Register EDI holds the bit offset of the start of the\n      ; substring.\n      ; Registers EAX and ECX are also used by this\n      ; \"insert\" operation.\n      ;\n      MOV   ECX,EDI      ; preserve original offset for later use\n      SHR   EDI,3        ; signed divide offset by 8 (byte address)\n      AND   CL,7H        ; isolate low three bits of offset in CL\n      MOV   EAX,[EDI]strg_base      ; move string dword into EAX\n      ROR   EAX,CL       ; right justify old bit field\n      SHRD  EAX,ESI,length          ; bring in new bits\n      ROL   EAX,length   ; right justify new bit field\n      ROL   EAX,CL       ; bring to final position\n      MOV   [EDI]strg_base,EAX      ; replace dword in memory\n\n  2.  Bit String Insert into Memory (when bit string is 1-31 bits long, i.e.\n      spans five bytes or less):\n\n      ; Insert a right-justified bit string from register into\n      ; memory bit string.\n      ;\n      ; Assumptions:\n      ; 1) The base of the string array is dword aligned, and\n      ; 2) the length of the bit string is an immediate value\n      ;    but the bit offset is held in a register.\n      ;\n      ; Register ESI holds the right-justified bit string\n      ; to be inserted.\n      ; Register EDI holds the bit offset of the start of the\n      ; substring.\n      ; Registers EAX, EBX, ECX, and EDI are also used by\n      ; this \"insert\" operation.\n      ;\n      MOV   ECX,EDI     ; temp storage for offset\n      SHR   EDI,5       ; signed divide offset by 32 (dword address)\n      SHL   EDI,2       ; multiply by 4 (in byte address format)\n      AND   CL,1FH      ; isolate low five bits of offset in CL\n      MOV   EAX,[EDI]strg_base      ; move low string dword into EAX\n      MOV   EDX,[EDI]strg_base+4    ; other string dword into EDX\n      MOV   EBX,EAX     ; temp storage for part of string      rotate\n      SHRD  EAX,EDX,CL  ; double shift by offset within dword  EDX:EAX\n      SHRD  EAX,EBX,CL  ; double shift by offset within dword  right\n      SHRD  EAX,ESI,length          ; bring in new bits\n      ROL   EAX,length  ; right justify new bit field\n      MOV   EBX,EAX     ; temp storage for part of string          rotate\n      SHLD  EAX,EDX,CL  ; double shift back by offset within word  EDX:EAX\n      SHLD  EDX,EBX,CL  ; double shift back by offset within word  left\n      MOV   [EDI]strg_base,EAX      ; replace dword in memory\n      MOV   [EDI]strg_base+4,EDX    ; replace dword in memory\n\n  3.  Bit String Insert into Memory (when bit string is exactly 32 bits\n      long, i.e., spans five or four types of memory):\n\n      ; Insert right-justified bit string from register into\n      ; memory bit string.\n      ;\n      ; Assumptions:\n      ; 1) The base of the string array is dword aligned, and\n      ; 2) the length of the bit string is 32\n      ;    but the bit offset is held in a register.\n      ;\n      ; Register ESI holds the 32-bit string to be inserted.\n      ; Register EDI holds the bit offset of the start of the\n      ; substring.\n      ; Registers EAX, EBX, ECX, and EDI are also used by\n      ; this \"insert\" operation.\n      ;\n      MOV   EDX,EDI     ; preserve original offset for later use\n      SHR   EDI,5       ; signed divide offset by 32 (dword address)\n      SHL   EDI,2       ; multiply by 4 (in byte address format)\n      AND   CL,1FH      ; isolate low five bits of offset in CL\n      MOV   EAX,[EDI]strg_base      ; move low string dword into EAX\n      MOV   EDX,[EDI]strg_base+4    ; other string dword into EDX\n      MOV   EBX,EAX     ; temp storage for part of string      rotate\n      SHRD  EAX,EDX     ; double shift by offset within dword  EDX:EAX\n      SHRD  EDX,EBX     ; double shift by offset within dword  right\n      MOV   EAX,ESI     ; move 32-bit bit field into position\n      MOV   EBX,EAX     ; temp storage for part of string          rotate\n      SHLD  EAX,EDX     ; double shift back by offset within word  EDX:EAX\n      SHLD  EDX,EBX     ; double shift back by offset within word  left\n      MOV   [EDI]strg_base,EAX      ; replace dword in memory\n      MOV   [EDI]strg_base,+4,EDX   ; replace dword in memory\n\n  4.  Bit String Extract from Memory (when bit string is 1-25 bits long,\n      i.e., spans four bytes or less):\n\n      ; Extract a right-justified bit string from memory bit\n      ; string into register\n      ;\n      ; Assumptions:\n      ; 1) The base of the string array is dword aligned, and\n      ; 2) the length of the bit string is an immediate value\n      ;    but the bit offset is held in a register.\n      ;\n      ; Register EAX holds the right-justified, zero-padded\n      ; bit string that was extracted.\n      ; Register EDI holds the bit offset of the start of the\n      ; substring.\n      ; Registers EDI, and ECX are also used by this \"extract.\"\n      ;\n      MOV  ECX,EDI      ; temp storage for offset\n      SHR  EDI,3        ; signed divide offset by 8 (byte address)\n      AND  CL,7H        ; isolate low three bits of offset\n      MOV  EAX,[EDI]strg_base       ; move string dword into EAX\n      SHR  EAX,CL       ; shift by offset within dword\n      AND  EAX,mask     ; extracted bit field in EAX\n\n  5.  Bit String Extract from Memory (when bit string is 1-32 bits long, \n      i.e., spans five bytes or less):\n\n      ; Extract a right-justified bit string from memory bit\n      ; string into register.\n      ;\n      ; Assumptions:\n      ; 1) The base of the string array is dword aligned, and\n      ; 2) the length of the bit string is an immediate\n      ;    value but the bit offset is held in a register.\n      ;\n      ; Register EAX holds the right-justified, zero-padded\n      ; bit string that was extracted.\n      ; Register EDI holds the bit offset of the start of the\n      ; substring.\n      ; Registers EAX, EBX, and ECX are also used by this \"extract.\"\n      MOV   ECX,EDI     ; temp storage for offset\n      SHR   EDI,5       ; signed divide offset by 32 (dword address)\n      SHL   EDI,2       ; multiply by 4 (in byte address format)\n      AND   CL,1FH      ; isolate low five bits of offset in CL\n      MOV   EAX,[EDI]strg_base      ; move low string dword into EAX\n      MOV   EDX,[EDI]strg_base+4    ; other string dword into EDX\n      SHRD  EAX,EDX,CL  ; double shift right by offset within dword\n      AND   EAX,mask    ; extracted bit field in EAX\n\n\n3.4.5  Byte-Set-On-Condition Instructions\n\nThis group of instructions sets a byte to zero or one depending on any of\nthe 16 conditions defined by the status flags. The byte may be in memory or\nmay be a one-byte general register. These instructions are especially useful\nfor implementing Boolean expressions in high-level languages such as Pascal.\n\nSETcc (Set Byte on Condition cc) set a byte to one if condition cc is true;\nsets the byte to zero otherwise. Refer to Appendix D for a definition of\nthe possible conditions.\n\n\n3.4.6  Test Instruction\n\nTEST (Test) performs the logical \"and\" of the two operands, clears OF and\nCF, leaves AF undefined, and updates SF, ZF, and PF. The flags can be tested\nby conditional control transfer instructions or by the byte-set-on-condition\ninstructions. The operands may be doublewords, words, or bytes.\n\nThe difference between TEST and AND is that TEST does not alter the\ndestination operand. TEST differs from BT in that TEST is useful for testing\nthe value of multiple bits in one operations, whereas BT tests a single bit.\n\n\n3.5  Control Transfer Instructions\n\nThe 80386 provides both conditional and unconditional control transfer\ninstructions to direct the flow of execution. Conditional control transfers\ndepend on the results of operations that affect the flag register.\nUnconditional control transfers are always executed.\n\n\n3.5.1  Unconditional Transfer Instructions\n\nJMP, CALL, RET, INT and IRET instructions transfer control from one code\nsegment location to another. These locations can be within the same code\nsegment (near control transfers) or in different code segments (far control\ntransfers). The variants of these instructions that transfer control to\nother segments are discussed in a later section of this chapter. If the\nmodel of memory organization used in a particular 80386 application does\nnot make segments visible to applications programmers, intersegment control\ntransfers will not be used.\n\n\n3.5.1.1  Jump Instruction\n\nJMP (Jump) unconditionally transfers control to the target location. JMP is\na one-way transfer of execution; it does not save a return address on the\nstack.\n\nThe JMP instruction always performs the same basic function of transferring\ncontrol from the current location to a new location. Its implementation\nvaries depending on whether the address is specified directly within the\ninstruction or indirectly through a register or memory.\n\nA direct JMP instruction includes the destination address as part of the\ninstruction. An indirect JMP instruction obtains the destination address\nindirectly through a register or a pointer variable.\n\nDirect near JMP. A direct JMP uses a relative displacement value contained\nin the instruction. The displacement is signed and the size of the\ndisplacement may be a byte, word, or doubleword. The processor forms an\neffective address by adding this relative displacement to the address\ncontained in EIP. When the additions have been performed, EIP refers to the\nnext instruction to be executed.\n\nIndirect near JMP. Indirect JMP instructions specify an absolute address in\none of several ways:\n\n  1.  The program can JMP to a location specified by a general register\n      (any of EAX, EDX, ECX, EBX, EBP, ESI, or EDI). The processor moves\n      this 32-bit value into EIP and resumes execution.\n\n  2.  The processor can obtain the destination address from a memory\n      operand specified in the instruction.\n\n  3.  A register can modify the address of the memory pointer to select a\n      destination address.\n\n\n3.5.1.2  Call Instruction\n\nCALL (Call Procedure) activates an out-of-line procedure, saving on the\nstack the address of the instruction following the CALL for later use by a\nRET (Return) instruction. CALL places the current value of EIP on the stack.\nThe RET instruction in the called procedure uses this address to transfer\ncontrol back to the calling program.\n\nCALL instructions, like JMP instructions have relative, direct, and\nindirect versions.\n\nIndirect CALL instructions specify an absolute address in one of these\nways:\n\n  1.  The program can CALL a location specified by a general register (any\n      of EAX, EDX, ECX, EBX, EBP, ESI, or EDI). The processor moves this\n      32-bit value into EIP.\n\n  2.  The processor can obtain the destination address from a memory\n      operand specified in the instruction.\n\n\n3.5.1.3  Return and Return-From-Interrupt Instruction\n\nRET (Return From Procedure) terminates the execution of a procedure and\ntransfers control through a back-link on the stack to the program that\noriginally invoked the procedure. RET restores the value of EIP that was\nsaved on the stack by the previous CALL instruction.\n\nRET instructions may optionally specify an immediate operand. By adding\nthis constant to the new top-of-stack pointer, RET effectively removes any\narguments that the calling program pushed on the stack before the execution\nof the CALL instruction.\n\nIRET (Return From Interrupt) returns control to an interrupted procedure.\nIRET differs from RET in that it also pops the flags from the stack into the\nflags register. The flags are stored on the stack by the interrupt\nmechanism.\n\n\n3.5.2  Conditional Transfer Instructions\n\nThe conditional transfer instructions are jumps that may or may not\ntransfer control, depending on the state of the CPU flags when the\ninstruction executes.\n\n\n3.5.2.1  Conditional Jump Instructions\n\nTable 3-2 shows the conditional transfer mnemonics and their\ninterpretations. The conditional jumps that are listed as pairs are actually\nthe same instruction. The assembler provides the alternate mnemonics for\ngreater clarity within a program listing.\n\nConditional jump instructions contain a displacement which is added to the\nEIP register if the condition is true. The displacement may be a byte, a\nword, or a doubleword. The displacement is signed; therefore, it can be used\nto jump forward or backward.\n\n\nTable 3-2. Interpretation of Conditional Transfers\n\nUnsigned Conditional Transfers\n\nMnemonic         Condition Tested          \"Jump If...\"\n\nJA/JNBE           (CF or ZF) = 0           above/not below nor equal\nJAE/JNB           CF = 0                   above or equal/not below\nJB/JNAE           CF = 1                   below/not above nor equal\nJBE/JNA           (CF or ZF) = 1           below or equal/not above\nJC                CF = 1                   carry\nJE/JZ             ZF = 1                   equal/zero\nJNC               CF = 0                   not carry\nJNE/JNZ           ZF = 0                   not equal/not zero\nJNP/JPO           PF = 0                   not parity/parity odd\nJP/JPE            PF = 1                   parity/parity even\n\nSigned Conditional Transfers\n\nMnemonic         Condition Tested          \"Jump If...\"\nJG/JNLE          ((SF xor OF) or ZF) = 0   greater/not less nor equal\nJGE/JNL          (SF xor OF) = 0           greater or equal/not less\nJL/JNGE          (SF xor OF) = 1           less/not greater nor equal\nJLE/JNG          ((SF xor OF) or ZF) = 1   less or equal/not greater\nJNO              OF = 0                    not overflow\nJNS              SF = 0                    not sign (positive, including 0)\nJO               OF = 1                    overflow\nJS               SF = 1                    sign (negative)\n\n\n3.5.2.2  Loop Instructions\n\nThe loop instructions are conditional jumps that use a value placed in ECX\nto specify the number of repetitions of a software loop. All loop\ninstructions automatically decrement ECX and terminate the loop when ECX=0.\nFour of the five loop instructions specify a condition involving ZF that\nterminates the loop before ECX reaches zero.\n\nLOOP (Loop While ECX Not Zero) is a conditional transfer that automatically\ndecrements the ECX register before testing ECX for the branch condition. If\nECX is non-zero, the program branches to the target label specified in the\ninstruction. The LOOP instruction causes the repetition of a code section\nuntil the operation of the LOOP instruction decrements ECX to a value of\nzero. If LOOP finds ECX=0, control transfers to the instruction immediately\nfollowing the LOOP instruction. If the value of ECX is initially zero, then\nthe LOOP executes 2^(32) times.\n\nLOOPE (Loop While Equal) and LOOPZ (Loop While Zero) are synonyms for the\nsame instruction. These instructions automatically decrement the ECX\nregister before testing ECX and ZF for the branch conditions. If ECX is\nnon-zero and ZF=1, the program branches to the target label specified in the\ninstruction. If LOOPE or LOOPZ finds that ECX=0 or ZF=0, control transfers\nto the instruction immediately following the LOOPE or LOOPZ instruction.\n\nLOOPNE (Loop While Not Equal) and LOOPNZ (Loop While Not Zero) are synonyms\nfor the same instruction. These instructions automatically decrement the ECX\nregister before testing ECX and ZF for the branch conditions. If ECX is\nnon-zero and ZF=0, the program branches to the target label specified in the\ninstruction. If LOOPNE or LOOPNZ finds that ECX=0 or ZF=1, control transfers\nto the instruction immediately following the LOOPNE or LOOPNZ instruction.\n\n\n3.5.2.3  Executing a Loop or Repeat Zero Times\n\nJCXZ (Jump if ECX Zero) branches to the label specified in the instruction\nif it finds a value of zero in ECX. JCXZ is useful in combination with the\nLOOP instruction and with the string scan and compare instructions, all of\nwhich decrement ECX. Sometimes, it is desirable to design a loop that\nexecutes zero times if the count variable in ECX is initialized to zero.\nBecause the LOOP instructions (and repeat prefixes) decrement ECX before\nthey test it, a loop will execute 2^(32) times if the program enters the\nloop with a zero value in ECX. A programmer may conveniently overcome this\nproblem with JCXZ, which enables the program to branch around the code\nwithin the loop if ECX is zero when JCXZ executes. When used with repeated\nstring scan and compare instructions, JCXZ can determine whether the\nrepetitions terminated due to zero in ECX or due to satisfaction of the\nscan or compare conditions.\n\n\n3.5.3  Software-Generated Interrupts\n\nThe INT n, INTO, and BOUND instructions allow the programmer to specify a\ntransfer to an interrupt service routine from within a program.\n\nINT n (Software Interrupt) activates the interrupt service routine that\ncorresponds to the number coded within the instruction. The INT instruction\nmay specify any interrupt type. Programmers may use this flexibility to\nimplement multiple types of internal interrupts or to test the operation of\ninterrupt service routines. (Interrupts 0-31 are reserved by Intel.) The\ninterrupt service routine terminates with an IRET instruction that returns\ncontrol to the instruction that follows INT.\n\nINTO (Interrupt on Overflow) invokes interrupt 4 if OF is set. Interrupt 4\nis reserved for this purpose. OF is set by several arithmetic, logical, and\nstring instructions.\n\nBOUND (Detect Value Out of Range) verifies that the signed value contained\nin the specified register lies within specified limits. An interrupt (INT 5)\noccurs if the value contained in the register is less than the lower bound\nor greater than the upper bound.\n\nThe BOUND instruction includes two operands. The first operand specifies\nthe register being tested. The second operand contains the effective\nrelative address of the two signed BOUND limit values. The BOUND instruction\nassumes that the upper limit and lower limit are in adjacent memory\nlocations. These limit values cannot be register operands; if they are, an\ninvalid opcode exception occurs.\n\nBOUND is useful for checking array bounds before using a new index value to\naccess an element within the array. BOUND provides a simple way to check the\nvalue of an index register before the program overwrites information in a\nlocation beyond the limit of the array.\n\nThe block of memory that specifies the lower and upper limits of an array\nmight typically reside just before the array itself. This makes the array\nbounds accessible at a constant offset from the beginning of the array.\nBecause the address of the array will already be present in a register, this\npractice avoids extra calculations to obtain the effective address of the\narray bounds.\n\nThe upper and lower limit values may each be a word or a doubleword.\n\n\n3.6  String and Character Translation Instructions\n\nThe instructions in this category operate on strings rather than on logical\nor numeric values. Refer also to the section on I/O for information about\nthe string I/O instructions (also known as block I/O).\n\nThe power of 80386 string operations derives from the following features of\nthe architecture:\n\n1.  A set of primitive string operations\n\n   MOVS    Move String\n   CMPS    Compare string\n   SCAS    Scan string\n   LODS    Load string\n   STOS    Store string\n\n2.  Indirect, indexed addressing, with automatic incrementing or\n    decrementing of the indexes.\n\n   Indexes:\n\n      ESI     Source index register\n      EDI     Destination index register\n\n   Control flag:\n\n      DF      Direction flag\n\n   Control flag instructions:\n\n      CLD     Clear direction flag instruction\n      STD     Set direction flag instruction\n\n3.  Repeat prefixes\n\n   REP           Repeat while ECX not xero\n   REPE/REPZ     Repeat while equal or zero\n   REPNE/REPNZ   Repeat while not equal or not zero\n\nThe primitive string operations operate on one element of a string. A\nstring element may be a byte, a word, or a doubleword. The string elements\nare addressed by the registers ESI and EDI. After every primitive operation\nESI and/or EDI are automatically updated to point to the next element of the\nstring. If the direction flag is zero, the index registers are incremented;\nif one, they are decremented. The amount of the increment or decrement is\n1, 2, or 4 depending on the size of the string element.\n\n\n3.6.1  Repeat Prefixes\n\nThe repeat prefixes REP (Repeat While ECX Not Zero), REPE/REPZ (Repeat\nWhile Equal/Zero), and REPNE/REPNZ (Repeat While Not Equal/Not Zero) specify\nrepeated operation of a string primitive. This form of iteration allows the\nCPU to process strings much faster than would be possible with a regular\nsoftware loop.\n\nWhen a primitive string operation has a repeat prefix, the operation is\nexecuted repeatedly, each time using a different element of the string. The\nrepetition terminates when one of the conditions specified by the prefix is\nsatisfied.\n\nAt each repetition of the primitive instruction, the string operation may\nbe suspended temporarily in order to handle an exception or external\ninterrupt. After the interruption, the string operation can be restarted\nagain where it left off. This method of handling strings allows operations\non strings of arbitrary length, without affecting interrupt response.\n\nAll three prefixes causes the hardware to automatically repeat the\nassociated string primitive until ECX=0. The differences among the repeat\nprefixes have to do with the second termination condition. REPE/REPZ and\nREPNE/REPNZ are used exclusively with the SCAS (Scan String) and CMPS\n(Compare String) primitives. When these prefixes are used, repetition of the\nnext instruction depends on the zero flag (ZF) as well as the ECX register.\nZF does not require initialization before execution of a repeated string\ninstruction, because both SCAS and CMPS set ZF according to the results of\nthe comparisons they make. The differences are summarized in the\naccompanying table.\n\nPrefix                      Termination         Termination\n                            Condition 1         Condition 2\n\nREP                           ECX = 0             (none)\nREPE/REPZ                     ECX = 0             ZF = 0\nREPNE/REPNZ                   ECX = 0             ZF = 1\n\n\n3.6.2  Indexing and Direction Flag Control\n\nThe addresses of the operands of string primitives are determined by the\nESI and EDI registers. ESI points to source operands. By default, ESI refers\nto a location in the segment indicated by the DS segment register. A\nsegment-override prefix may be used, however, to cause ESI to refer to CS,\nSS, ES, FS, or GS. EDI points to destination operands in the segment\nindicated by ES; no segment override is possible. The use of two different\nsegment registers in one instruction allows movement of strings between\ndifferent segments.\n\nThis use of ESI and DSI has led to the descriptive names source index and\ndestination index for the ESI and EDI registers, respectively. In all\ncases other than string instructions, however, the ESI and EDI registers may\nbe used as general-purpose registers.\n\nWhen ESI and EDI are used in string primitives, they are automatically\nincremented or decremented after to operation. The direction flag determines\nwhether they are incremented or decremented. The instruction CLD puts zero\nin DF, causing the index registers to be incremented; the instruction STD\nputs one in DF, causing the index registers to be decremented. Programmers\nshould always put a known value in DF before using string instructions in a\nprocedure.\n\n\n3.6.3  String Instructions\n\nMOVS (Move String) moves the string element pointed to by ESI to the\nlocation pointed to by EDI. MOVSB operates on byte elements, MOVSW operates\non word elements, and MOVSD operates on doublewords. The destination segment\nregister cannot be overridden by a segment override prefix, but the source\nsegment register can be overridden.\n\nThe MOVS instruction, when accompanied by the REP prefix, operates as a\nmemory-to-memory block transfer. To set up for this operation, the program\nmust initialize ECX and the register pairs ESI and EDI. ECX specifies the\nnumber of bytes, words, or doublewords in the block.\n\nIf DF=0, the program must point ESI to the first element of the source\nstring and point EDI to the destination address for the first element. If\nDF=1, the program must point these two registers to the last element of the\nsource string and to the destination address for the last element,\nrespectively.\n\nCMPS (Compare Strings) subtracts the destination string element (at ES:EDI)\nfrom the source string element (at ESI) and updates the flags AF, SF, PF, CF\nand OF. If the string elements are equal, ZF=1; otherwise, ZF=0. If DF=0,\nthe processor increments the memory pointers (ESI and EDI) for the two\nstrings. CMPSB compares bytes, CMPSW compares words, and CMPSD compares\ndoublewords. The segment register used for the source address can be changed\nwith a segment override prefix while the destination segment register\ncannot be overridden.\n\nSCAS (Scan String) subtracts the destination string element at ES:EDI from\nEAX, AX, or AL and updates the flags AF, SF, ZF, PF, CF and OF. If the\nvalues are equal, ZF=1; otherwise, ZF=0. If DF=0, the processor increments\nthe memory pointer (EDI) for the string. SCASB scans bytes; SCASW scans\nwords; SCASD scans doublewords. The destination segment register (ES) cannot\nbe overridden.\n\nWhen either the REPE or REPNE prefix modifies either the SCAS or CMPS\nprimitives, the processor compares the value of the current string element\nwith the value in EAX for doubleword elements, in AX for word elements, or\nin AL for byte elements. Termination of the repeated operation depends on\nthe resulting state of ZF as well as on the value in ECX.\n\nLODS (Load String) places the source string element at ESI into EAX for\ndoubleword strings, into AX for word strings, or into AL for byte strings.\nLODS increments or decrements ESI according to DF.\n\nSTOS (Store String) places the source string element from EAX, AX, or AL\ninto the string at ES:DSI. STOS increments or decrements EDI according to\nDF.\n\n\n3.7  Instructions for Block-Structured Languages\n\nThe instructions in this section provide machine-language support for\nfunctions normally found in high-level languages. These instructions include\nENTER and LEAVE, which simplify the programming of procedures.\n\nENTER (Enter Procedure) creates a stack frame that may be used to implement\nthe scope rules of block-structured high-level languages. A LEAVE\ninstruction at the end of a procedure complements an ENTER at the beginning\nof the procedure to simplify stack management and to control access to\nvariables for nested procedures.\n\nThe ENTER instruction includes two parameters. The first parameter\nspecifies the number of bytes of dynamic storage to be allocated on the\nstack for the routine being entered. The second parameter corresponds to the\nlexical nesting level (0-31) of the routine. (Note that the lexical level\nhas no relationship to either the protection privilege levels or to the I/O\nprivilege level.)\n\nThe specified lexical level determines how many sets of stack frame\npointers the CPU copies into the new stack frame from the preceding frame.\nThis list of stack frame pointers is sometimes called the display. The first\nword of the display is a pointer to the last stack frame. This pointer\nenables a LEAVE instruction to reverse the action of the previous ENTER\ninstruction by effectively discarding the last stack frame.\n\n   Example: ENTER 2048,3\n\n   Allocates 2048 bytes of dynamic storage on the stack and sets up pointers\n   to two previous stack frames in the stack frame that ENTER creates for\n   this procedure.\n\nAfter ENTER creates the new display for a procedure, it allocates the\ndynamic storage space for that procedure by decrementing ESP by the number\nof bytes specified in the first parameter. This new value of ESP serves as a\nstarting point for all PUSH and POP operations within that procedure.\n\nTo enable a procedure to address its display, ENTER leaves EBP pointing to\nthe beginning of the new stack frame. Data manipulation instructions that\nspecify EBP as a base register implicitly address locations within the stack\nsegment instead of the data segment.\n\nThe ENTER instruction can be used in two ways: nested and non-nested. If\nthe lexical level is 0, the non-nested form is used. Since the second\noperand is 0, ENTER pushes EBP, copies ESP to EBP and then subtracts the\nfirst operand from ESP. The nested form of ENTER occurs when the second\nparameter (lexical level) is not 0.\n\nFigure 3-16 gives the formal definition of ENTER.\n\nThe main procedure (with other procedures nested within) operates at the\nhighest lexical level, level 1. The first procedure it calls operates at the\nnext deeper lexical level, level 2. A level 2 procedure can access the\nvariables of the main program which are at fixed locations specified by the\ncompiler. In the case of level 1, ENTER allocates only the requested\ndynamic storage on the stack because there is no previous display to copy.\n\nA program operating at a higher lexical level calling a program at a lower\nlexical level requires that the called procedure should have access to the\nvariables of the calling program. ENTER provides this access through a\ndisplay that provides addressability to the calling program's stack frame.\n\nA procedure calling another procedure at the same lexical level implies\nthat they are parallel procedures and that the called procedure should not\nhave access to the variables of the calling procedure. In this case, ENTER\ncopies only that portion of the display from the calling procedure which\nrefers to previously nested procedures operating at higher lexical levels.\nThe new stack frame does not include the pointer for addressing the calling\nprocedure's stack frame.\n\nENTER treats a reentrant procedure as a procedure calling another procedure\nat the same lexical level. In this case, each succeeding iteration of the\nreentrant procedure can address only its own variables and the variables of\nthe calling procedures at higher lexical levels. A reentrant procedure can\nalways address its own variables; it does not require pointers to the stack\nframes of previous iterations.\n\nBy copying only the stack frame pointers of procedures at higher lexical\nlevels, ENTER makes sure that procedures access only those variables of\nhigher lexical levels, not those at parallel lexical levels (see Figure\n3-17). Figures 3-18 through 3-21 demonstrate the actions of the ENTER\ninstruction if the modules shown in Figure 3-17 were to call one another in\nalphabetic order.\n\nBlock-structured high-level languages can use the lexical levels defined by\nENTER to control access to the variables of previously nested procedures.\nReferring to Figure 3-17 for example, if PROCEDURE A calls PROCEDURE B\nwhich, in turn, calls PROCEDURE C, then PROCEDURE C will have access to the\nvariables of MAIN and PROCEDURE A, but not PROCEDURE B because they operate\nat the same lexical level. Following is the complete definition of access to\nvariables for Figure 3-17.\n\n  1.  MAIN PROGRAM has variables at fixed locations.\n\n  2.  PROCEDURE A can access only the fixed variables of MAIN.\n\n  3.  PROCEDURE B can access only the variables of PROCEDURE A and MAIN.\n      PROCEDURE B cannot access the variables of PROCEDURE C or PROCEDURE D.\n\n  4.  PROCEDURE C can access only the variables of PROCEDURE A and MAIN.\n      PROCEDURE C cannot access the variables of PROCEDURE B or PROCEDURE D.\n\n  5.  PROCEDURE D can access the variables of PROCEDURE C, PROCEDURE A, and\n      MAIN. PROCEDURE D cannot access the variables of PROCEDURE B.\n\nENTER at the beginning of the MAIN PROGRAM creates dynamic storage space\nfor MAIN but copies no pointers. The first and only word in the display\npoints to itself because there is no previous value for LEAVE to return to\nEBP. See Figure 3-18.\n\nAfter MAIN calls PROCEDURE A, ENTER creates a new display for PROCEDURE A\nwith the first word pointing to the previous value of EBP (BPM for LEAVE to\nreturn to the MAIN stack frame) and the second word pointing to the current\nvalue of EBP. Procedure A can access variables in MAIN since MAIN is at\nlevel 1. Therefore the base for the dynamic storage for MAIN is at [EBP-2].\nAll dynamic variables for MAIN are at a fixed offset from this value. See\nFigure 3-19.\n\nAfter PROCEDURE A calls PROCEDURE B, ENTER creates a new display for\nPROCEDURE B with the first word pointing to the previous value of EBP, the\nsecond word pointing to the value of EBP for MAIN, and the third word\npointing to the value of EBP for A and the last word pointing to the current\nEBP. B can access variables in A and MAIN by fetching from the display the\nbase addresses of the respective dynamic storage areas. See Figure 3-20.\n\nAfter PROCEDURE B calls PROCEDURE C, ENTER creates a new display for\nPROCEDURE C with the first word pointing to the previous value of EBP, the\nsecond word pointing to the value of EBP for MAIN, and the third word\npointing to the EBP value for A and the third word pointing to the current\nvalue of EBP. Because PROCEDURE B and PROCEDURE C have the same lexical\nlevel, PROCEDURE C is not allowed access to variables in B and therefore\ndoes not receive a pointer to the beginning of PROCEDURE B's stack frame.\nSee Figure 3-21.\n\nLEAVE (Leave Procedure) reverses the action of the previous ENTER\ninstruction. The LEAVE instruction does not include any operands. LEAVE\ncopies EBP to ESP to release all stack space allocated to the procedure by\nthe most recent ENTER instruction. Then LEAVE pops the old value of EBP from\nthe stack. A subsequent RET instruction can then remove any arguments that\nwere pushed on the stack by the calling program for use by the called\nprocedure.\n\n\nFigure 3-16.  Formal Definition of the ENTER Instruction\n\nThe formal definition of the ENTER instruction for all cases is given by the\nfollowing listing. LEVEL denotes the value of the second operand.\n\nPush EBP\nSet a temporary value FRAME_PTR := ESP\nIf LEVEL > 0 then\n      Repeat (LEVEL-1) times:\n          EBP :=EBP - 4\n          Push the doubleword pointed to by EBP\n      End repeat\n      Push FRAME_PTR\nEnd if\nEBP := FRAME_PTR\nESP := ESP - first operand.\n\n\nFigure 3-17.  Variable Access in Nested Procedures\n\n      ͻ\n                      MAIN PROCEDURE (LEXICAL LEVEL 1)                \n         ͻ   \n                       PROCEDURE A (LEXICAL LEVEL 2)                \n           ͻ     \n                      PROCEDURE B (LEXICAL LEVEL 3)               \n           ͼ     \n                                                                    \n           ͻ     \n                      PROCEDURE C (LEXICAL LEVEL 3)               \n             ͻ       \n                     PROCEDURE D (LEXICAL LEVEL 4)              \n             ͼ       \n                                                                  \n           ͼ     \n                                                                    \n         ͼ   \n                                                                      \n      ͼ\n\n\nFigure 3-18.  Stack Frame for MAIN at Level 1\n\n                                     \u0007 31          0 \u0007\n                D  O                                \n                I  F               ͹\n                R                       OLD ESP    \n                E  E     DISPLAY Ĵ  ͹\u0011EBP FOR\n                C  X                      EBPM\nEBPM = EBP VALUE FOR MAIN        MAIN\n                T  P               ͹\n                I  A                               \n                O  N                ͹\n                N  S     DYNAMIC Ĵ                 \n                   I     STORAGE    ͹\n                  O                               \n                  N               ͹\u0011ESP\n                                                   \n                 \u001f                   \u0007               \u0007\n\n\nFigure 3-19.  Stack Frame for Procedure A\n\n                                     \u0007 31          0 \u0007\n                D  O                                \n                I  F                 ͹\n                R                        OLD ESP    \n                E  E                 ͹\n                C  X                       EBPM\nEBPM = EBP VALUE FOR MAIN    \n                T  P                 ͹\n                I  A                                \n                O  N                 ͹\n                N  S                                \n                   I                 ͹\n                  O                                \n                  N               ͹\n                                         EBPM     \n                 \u001f                  ͹\u0011EBP FOR A\n                         DISPLAY Ĵ        EBPM     \n                                    ͹\n                                          EBPA\nEBPA = EBP VALUE FOR PROCEDURE A    \n                                   ͹\n                                                   \n                                    ͹\n                         DYNAMIC Ĵ                 \n                         STORAGE    ͹\n                                                   \n                                   ͹\u0011ESP\n                                                    \n                                     \u0007               \u0007\n\n\nFigure 3-20.  Stack Frame for Procedure B at Level 3 Called from A\n\n                                     \u0007 31          0 \u0007\n                D  O                                \n                I  F                 ͹\n                R                        OLD ESP    \n                E  E                 ͹\n                C  X                       EBPM\nEBPM = EBP VALUE FOR MAIN    \n                T  P                 ͹\n                I  A                                \n                O  N                 ͹\n                N  S                                \n                   I                 ͹\n                  O                                \n                  N                 ͹\n                                          EBPM     \n                 \u001f                   ͹\n                                           EBPM     \n                                     ͹\n                                           EBPA     \n                                     ͹\n                                                    \n                                     ͹\n                                                    \n                                     ͹\n                                                    \n                                   ͹\n                                          EBPA     \n                                    ͹\u0011EBP\n                                          EBPM     \n                         DISPLAY Ĵ  ͹\n                                          EBPA     \n                                    ͹\n                                          EBPB\nEBPB = EBP VALUE FOR PROCEDURE B    \n                                   ͹\n                                                   \n                                    ͹\n                         DYNAMIC Ĵ                 \n                         STORAGE    ͹\n                                                   \n                                   ͹\u0011ESP\n                                                    \n                                     \u0007               \u0007\n\n\nFigure 3-21.  Stack Frame for Procedure C at Level 3 Called from B\n\n                                     \u0007 31          0 \u0007\n                D  O                                \n                I  F                 ͹\n                R                        OLD ESP    \n                E  E                 ͹\n                C  X                       EBPM\nEBPM = EBP VALUE FOR MAIN    \n                T  P                 ͹\n                I  A                                \n                O  N                 ͹\n                N  S                                \n                   I                 ͹\n                  O                                \n                  N                 ͹\n                                          EBPM     \n                 \u001f                   ͹\n                                           EBPM     \n                                     ͹\n                                           EBPA\nEBPA = EBP VALUE FOR PROCEDURE A    \n                                     ͹\n                                                    \n                                     ͹\n                                                    \n                                     ͹\n                                                    \n                                   ͹\n                                          EBPA     \n                                    ͹\u0011EBP\n                                          EBPM     \n                         DISPLAY Ĵ  ͹\n                                          EBPA     \n                                    ͹\n                                          EBPB\nEBPB = EBP VALUE FOR PROCEDURE B    \n                                   ͹\n                                                   \n                                    ͹\n                         DYNAMIC Ĵ                 \n                         STORAGE    ͹\n                                                   \n                                   ͹\u0011ESP\n                                                    \n                                     \u0007               \u0007\n\n\n3.8  Flag Control Instructions\n\nThe flag control instructions provide a method for directly changing the\nstate of bits in the flag register.\n\n\n3.8.1  Carry and Direction Flag Control Instructions\n\nThe carry flag instructions are useful in conjunction with\nrotate-with-carry instructions RCL and RCR. They can initialize the carry\nflag, CF, to a known state before execution of a rotate that moves the carry\nbit into one end of the rotated operand.\n\nThe direction flag control instructions are specifically included to set or\nclear the direction flag, DF, which controls the left-to-right or\nright-to-left direction of string processing. If DF=0, the processor\nautomatically increments the string index registers, ESI and EDI, after each\nexecution of a string primitive. If DF=1, the processor decrements these\nindex registers. Programmers should use one of these instructions before any\nprocedure that uses string instructions to insure that DF is set properly.\n\nFlag Control Instruction                  Effect\n\nSTC (Set Carry Flag)                      CF \u001b 1\nCLC (Clear Carry Flag)                    CF \u001b 0\nCMC (Complement Carry Flag)               CF \u001b NOT (CF)\nCLD (Clear Direction Flag)                DF \u001b 0\nSTD (Set Direction Flag)                  DF \u001b 1\n\n\n3.8.2  Flag Transfer Instructions\n\nThough specific instructions exist to alter CF and DF, there is no direct\nmethod of altering the other applications-oriented flags. The flag transfer\ninstructions allow a program to alter the other flag bits with the bit\nmanipulation instructions after transferring these flags to the stack or the\nAH register.\n\nThe instructions LAHF and SAHF deal with five of the status flags, which\nare used primarily by the arithmetic and logical instructions.\n\nLAHF (Load AH from Flags) copies SF, ZF, AF, PF, and CF to AH bits 7, 6, 4,\n2, and 0, respectively (see Figure 3-22). The contents of the remaining bits\n(5, 3, and 1) are undefined. The flags remain unaffected.\n\nSAHF (Store AH into Flags) transfers bits 7, 6, 4, 2, and 0 from AH into\nSF, ZF, AF, PF, and CF, respectively (see Figure 3-22).\n\nThe PUSHF and POPF instructions are not only useful for storing the flags\nin memory where they can be examined and modified but are also useful for\npreserving the state of the flags register while executing a procedure.\n\nPUSHF (Push Flags) decrements ESP by two and then transfers the low-order\nword of the flags register to the word at the top of stack pointed to by ESP\n(see Figure 3-23). The variant PUSHFD decrements ESP by four, then\ntransfers both words of the extended flags register to the top of the stack\npointed to by ESP (the VM and RF flags are not moved, however).\n\nPOPF (Pop Flags) transfers specific bits from the word at the top of stack\ninto the low-order byte of the flag register (see Figure 3-23), then\nincrements ESP by two. The variant POPFD transfers specific bits from the\ndoubleword at the top of the stack into the extended flags register (the RF\nand VM flags are not changed, however), then increments ESP by four.\n\n\nFigure 3-22.  LAHF and SAHF\n\n                     7    6    5    4    3    2    1    0\n                   ͻ\n                    SF  ZF  UU  AF  UU  PF  UU  CF \n                   ͼ\n\n     LAHF LOADS FIVE FLAGS FROM THE FLAG REGISTER INTO REGISTER AH. SAHF\n     STORES THESE SAME FIVE FLAGS FROM AH INTO THE FLAG REGISTER. THE BIT\n     POSITION OF EACH FLAG IS THE SAME IN AH AS IT IS IN THE FLAG REGISTER.\n     THE REMAINING BITS (MARKED UU) ARE RESERVED; DO NOT DEFINE.\n\n\n3.9  Coprocessor Interface Instructions\n\nA numerics coprocessor (e.g., the 80387 or 80287) provides an extension to\nthe instruction set of the base architecture. The coprocessor extends the\ninstruction set of the base architecture to support high-precision integer\nand floating-point calculations. This extended instruction set includes\narithmetic, comparison, transcendental, and data transfer instructions. The\ncoprocessor also contains a set of useful constants to enhance the speed of\nnumeric calculations.\n\nA program contains instructions for the coprocessor in line with the\ninstructions for the CPU. The system executes these instructions in the same\norder as they appear in the instruction stream. The coprocessor operates\nconcurrently with the CPU to provide maximum throughput for numeric\ncalculations.\n\nThe 80386 also has features to support emulation of the numerics\ncoprocessor when the coprocessor is absent. The software emulation of the\ncoprocessor is transparent to application software but requires more time\nfor execution. Refer to Chapter 11 for more information on coprocessor\nemulation.\n\nESC (Escape) is a 5-bit sequence that begins the opcodes that identify\nfloating point numeric instructions. The ESC pattern tells the 80386 to send\nthe opcode and addresses of operands to the numerics coprocessor. The\nnumerics coprocessor uses the escape instructions to perform\nhigh-performance, high-precision floating point arithmetic that conforms to\nthe IEEE floating point standard 754.\n\nWAIT (Wait) is an 80386 instruction that suspends program execution until\nthe 80386 CPU detects that the BUSY pin is inactive. This condition\nindicates that the coprocessor has completed its processing task and that\nthe CPU may obtain the results.\n\n\nFigure 3-23.  Flag Format for PUSHF and POPF\n\n                                PUSHFD/POPFD\n     Ŀ\n                                                  PUSHF/POPF\n                                     Ŀ\n      31              23               15                7           0\n     ͻ\n                                VR NID  ODITSZ A P C\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0  0           0 0 1 \n                                MF T  PLFFFFFF F F F\n     ͼ\n\n     BITS MARKED 0 AND 1 ARE RESERVED BY INTEL. DO NOT DEFINE.\n\n   SYSTEMS FLAGS (INCLUDING THE IOPL FIELD, AND THE VM, RF, AND IF FLAGS)\n   ARE PUSHED AND ARE VISIBLE TO APPLICATIONS PROGRAMS. HOWEVER, WHEN AN\n   APPLICATIONS PROGRAM POPS THE FLAGS, THESE ITEMS ARE NOT CHANGED,\n   REGARDLESS OF THE VALUES POPPED INTO THEM.\n\n\n3.10  Segment Register Instructions\n\nThis category actually includes several distinct types of instructions.\nThese various types are grouped together here because, if systems designers\nchoose an unsegmented model of memory organization, none of these\ninstructions is used by applications programmers. The instructions that deal\nwith segment registers are:\n\n1.  Segment-register transfer instructions.\n\n   MOV SegReg, ...\n   MOV ..., SegReg\n   PUSH SegReg\n   POP SegReg\n\n2.  Control transfers to another executable segment.\n\n   JMP far    ; direct and indirect\n   CALL far\n   RET far\n\n3.  Data pointer instructions.\n\n   LDS\n   LES\n   LFS\n   LGS\n   LSS\n\nNote that the following interrupt-related instructions are different; all\nare capable of transferring control to another segment, but the use of\nsegmentation is not apparent to the applications programmer.\n\nINT n\nINTO\nBOUND\nIRET\n\n\n3.10.1  Segment-Register Transfer Instructions\n\nThe MOV, POP, and PUSH instructions also serve to load and store segment\nregisters. These variants operate similarly to their general-register\ncounterparts except that one operand can be a segment register. MOV cannot\nmove segment register to a segment register. Neither POP nor MOV can place a\nvalue in the code-segment register CS; only the far control-transfer\ninstructions can change CS.\n\n\n3.10.2  Far Control Transfer Instructions\n\nThe far control-transfer instructions transfer control to a location in\nanother segment by changing the content of the CS register.\n\nDirect far JMP. Direct JMP instructions that specify a target location\noutside the current code segment contain a far pointer. This pointer\nconsists of a selector for the new code segment and an offset within the new\nsegment.\n\nIndirect far JMP. Indirect JMP instructions that specify a target location\noutside the current code segment use a 48-bit variable to specify the far\npointer.\n\nFar CALL. An intersegment CALL places both the value of EIP and CS on the\nstack.\n\nFar RET. An intersegment RET restores the values of both CS and EIP which\nwere saved on the stack by the previous intersegment CALL instruction.\n\n\n3.10.3  Data Pointer Instructions\n\nThe data pointer instructions load a pointer (consisting of a segment\nselector and an offset) to a segment register and a general register.\n\nLDS (Load Pointer Using DS) transfers a pointer variable from the source\noperand to DS and the destination register. The source operand must be a\nmemory operand, and the destination operand must be a general register. DS\nreceives the segment-selector of the pointer. The destination register\nreceives the offset part of the pointer, which points to a specific location\nwithin the segment.\n\nExample: LDS ESI, STRING_X\n\nLoads DS with the selector identifying the segment pointed to by a\nSTRING_X, and loads the offset of STRING_X into ESI.  Specifying ESI as the\ndestination operand is a convenient way to prepare for a string operation on\na source string that is not in the current data segment.\n\nLES (Load Pointer Using ES) operates identically to LDS except that ES\nreceives the segment selector rather than DS.\n\nExample: LES EDI, DESTINATION_X\n\nLoads ES with the selector identifying the segment pointed to by\nDESTINATION_X, and loads the offset of DESTINATION_X into EDI. This\ninstruction provides a convenient way to select a destination for a string\noperation if the desired location is not in the current extra segment.\n\nLFS (Load Pointer Using FS) operates identically to LDS except that FS\nreceives the segment selector rather than DS.\n\nLGS (Load Pointer Using GS) operates identically to LDS except that GS\nreceives the segment selector rather than DS.\n\nLSS (Load Pointer Using SS) operates identically to LDS except that SS\nreceives the segment selector rather than DS.  This instruction is\nespecially important, because it allows the two registers that identify the\nstack (SS:ESP) to be changed in one uninterruptible operation.  Unlike the\nother instructions which load SS, interrupts are not inhibited at the end\nof the LSS instruction.  The other instructions (e.g., POP SS) inhibit\ninterrupts to permit the following instruction to load ESP, thereby forming\nan indivisible load of SS:ESP.  Since both SS and ESP can be loaded by LSS,\nthere is no need to inhibit interrupts.\n\n\n3.11  Miscellaneous Instructions\n\nThe following instructions do not fit in any of the previous categories,\nbut are nonetheless useful.\n\n\n3.11.1  Address Calculation Instruction\n\nLEA (Load Effective Address) transfers the offset of the source operand\n(rather than its value) to the destination operand.  The source operand must\nbe a memory operand, and the destination operand must be a general register.\nThis instruction is especially useful for initializing registers before the\nexecution of the string primitives (ESI, EDI) or the XLAT instruction (EBX).\nThe LEA can perform any indexing or scaling that may be needed.\n\nExample: LEA EBX, EBCDIC_TABLE\n\nCauses the processor to place the address of the starting location of the\ntable labeled EBCDIC_TABLE into EBX.\n\n\n3.11.2  No-Operation Instruction\n\nNOP (No Operation) occupies a byte of storage but affects nothing but the\ninstruction pointer, EIP.\n\n\n3.11.3  Translate Instruction\n\nXLAT (Translate) replaced a byte in the AL register with a byte from a\nuser-coded translation table. When XLAT is executed, AL should have the\nunsigned index to the table addressed by EBX. XLAT changes the contents of\nAL from table index to table entry. EBX is unchanged. The XLAT instruction\nis useful for translating from one coding system to another such as from\nASCII to EBCDIC.  The translate table may be up to 256 bytes long.  The\nvalue placed in the AL register serves as an index to the location of the\ncorresponding translation value.\n\n\n                        PART II  SYSTEMS PROGRAMMING                       \n\n\nChapter 4  Systems Architecture\n\n\n\nMany of the architectural features of the 80386 are used only by systems\nprogrammers. This chapter presents an overview of these aspects of the\narchitecture.\n\nThe systems-level features of the 80386 architecture include:\n\n  Memory Management\n  Protection\n  Multitasking\n  Input/Output\n  Exceptions and Interrupts\n  Initialization\n  Coprocessing and Multiprocessing\n  Debugging\n\nThese features are implemented by registers and instructions, all of which\nare introduced in the following sections. The purpose of this chapter is not\nto explain each feature in detail, but rather to place the remaining\nchapters of Part II in perspective. Each mention in this chapter of a\nregister or instruction is either accompanied by an explanation or a\nreference to a following chapter where detailed information can be obtained.\n\n\n4.1  Systems Registers\n\nThe registers designed for use by systems programmers fall into these\nclasses:\n\n  EFLAGS\n  Memory-Management Registers\n  Control Registers\n  Debug Registers\n  Test Registers\n\n\n4.1.1  Systems Flags\n\nThe systems flags of the EFLAGS register control I/O, maskable interrupts,\ndebugging, task switching, and enabling of virtual 8086 execution in a\nprotected, multitasking environment. These flags are highlighted in Figure\n4-1.\n\nIF (Interrupt-Enable Flag, bit 9)\n\n   Setting IF allows the CPU to recognize external (maskable) interrupt\n   requests. Clearing IF disables these interrupts. IF has no effect on\n   either exceptions or nonmaskable external interrupts. Refer to Chapter\n   9 for more details about interrupts.\n\nNT (Nested Task, bit 14)\n\n   The processor uses the nested task flag to control chaining of\n   interrupted and called tasks. NT influences the operation of the IRET\n   instruction. Refer to Chapter 7 and Chapter 9 for more information on\n   nested tasks.\n\nRF (Resume Flag, bit 16)\n\n   The RF flag temporarily disables debug exceptions so that an instruction\n   can be restarted after a debug exception without immediately causing\n   another debug exception. Refer to Chapter 12 for details.\n\nTF (Trap Flag, bit 8)\n\n   Setting TF puts the processor into single-step mode for debugging. In\n   this mode, the CPU automatically generates an exception after each\n   instruction, allowing a program to be inspected as it executes each\n   instruction. Single-stepping is just one of several debugging features of\n   the 80386. Refer to Chapter 12 for additional information.\n\nVM (Virtual 8086 Mode, bit 17)\n\n   When set, the VM flag indicates that the task is executing an 8086\n   program. Refer to Chapter 14 for a detailed discussion of how the 80386\n   executes 8086 tasks in a protected, multitasking environment.\n\n\nFigure 4-1.  System Flags of EFLAGS Register\n\n      31              23               15                7           0\n     ͻ\n     VRNID  ODITSZAPC\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0  0      001\n     MFT  PLFFFFFFFFF\n     ͼ\n                                               \n             VIRTUAL 8086 MODE             \n                   RESUME FLAG            \n              NESTED TASK FLAG         \n           I/O PRIVILEGE LEVEL       \n              INTERRUPT ENABLE\n\n\nNOTE\n      0 OR 1 INDICATES INTEL RESERVED. DO NOT DEFINE.\n\n\n\n4.1.2  Memory-Management Registers\n\nFour registers of the 80386 locate the data structures that control\nsegmented memory management:\n\nGDTR    Global Descriptor Table Register\nLDTR    Local Descriptor Table Register\n\n   These registers point to the segment descriptor tables GDT and LDT.\n   Refer to Chapter 5 for an explanation of addressing via descriptor\n   tables.\n\nIDTR    Interrupt Descriptor Table Register\n\n   This register points to a table of entry points for interrupt handlers\n   (the IDT). Refer to Chapter 9 for details of the interrupt mechanism.\n\nTR      Task Register\n\n   This register points to the information needed by the processor to define\n   the current task. Refer to Chapter 7 for a description of the\n   multitasking features of the 80386.\n\n\n4.1.3  Control Registers\n\nFigure 4-2 shows the format of the 80386 control registers CR0, CR2, and\nCR3. These registers are accessible to systems programmers only via variants\nof the MOV instruction, which allow them to be loaded from or stored in\ngeneral registers; for example:\n\nMOV EAX, CR0\nMOV CR3, EBX\n\nCR0 contains system control flags, which control or indicate conditions\nthat apply to the system as a whole, not to an individual task.\n\nEM (Emulation, bit 2)\n\n   EM indicates whether coprocessor functions are to be emulated. Refer to\n   Chapter 11 for details.\n\nET (Extension Type, bit 4)\n\n   ET indicates the type of coprocessor present in the system (80287 or\n   80387). Refer to Chapter 11 and Chapter 10 for details.\n\nMP (Math Present, bit 1)\n\n   MP controls the function of the WAIT instruction, which is used to\n   coordinate a coprocessor. Refer to Chapter 11 for details.\n\nPE (Protection Enable, bit 0)\n\n   Setting PE causes the processor to begin executing in protected mode.\n   Resetting PE returns to real-address mode. Refer to Chapter 14 and\n   Chapter 10 for more information on changing processor modes.\n\nPG (Paging, bit 31)\n\n   PG indicates whether the processor uses page tables to translate linear\n   addresses into physical addresses. Refer to Chapter 5 for a description\n   of page translation; refer to Chapter 10 for a discussion of how to set\n   PG.\n\nTS (Task Switched, bit 3)\n\n   The processor sets TS with every task switch and tests TS when\n   interpreting coprocessor instructions. Refer to Chapter 11 for details.\n\nCR2 is used for handling page faults when PG is set. The processor stores\nin CR2 the linear address that triggers the fault. Refer to Chapter 9 for a\ndescription of page-fault handling.\n\nCR3 is used when PG is set. CR3 enables the processor to locate the page\ntable directory for the current task. Refer to Chapter 5 for a description\nof page tables and page translation.\n\n\nFigure 4-2.  Control Registers\n\n 31                23                15                7               0\nͻ\n                                                                      \n    PAGE DIRECTORY BASE REGISTER (PDBR)              RESERVED         CR3\nĶ\n                                                                       \n                       PAGE FAULT LINEAR ADDRESS                       CR2\nĶ\n                                                                       \n                                RESERVED                               CR1\nĶ\nP                                                           ETEMP\nG                              RESERVED                     TSMPECR0\nͼ\n\n\n4.1.4  Debug Register\n\nThe debug registers bring advanced debugging abilities to the 80386,\nincluding data breakpoints and the ability to set instruction breakpoints\nwithout modifying code segments. Refer to Chapter 12 for a complete\ndescription of formats and usage.\n\n\n4.1.5  Test Registers\n\nThe test registers are not a standard part of the 80386 architecture. They\nare provided solely to enable confidence testing of the translation\nlookaside buffer (TLB), the cache used for storing information from page\ntables. Chapter 12 explains how to use these registers.\n\n\n4.2  Systems Instructions\n\nSystems instructions deal with such functions as:\n\n  1.  Verification of pointer parameters (refer to Chapter 6):\n\n    ARPL              Adjust RPL\n    LAR               Load Access Rights\n    LSL               Load Segment Limit\n    VERR              Verify for Reading\n    VERW              Verify for Writing\n\n  2.  Addressing descriptor tables (refer to Chaper 5):\n\n    LLDT              Load LDT Register\n    SLDT              Store LDT Register\n    LGDT              Load GDT Register\n    SGDT              Store GDT Register\n\n  3.  Multitasking (refer to Chapter 7):\n\n    LTR               Load Task Register\n    STR               Store Task Register\n\n  4. Coprocessing and Multiprocessing (refer to Chapter 11):\n\n    CLTS              Clear Task-Switched Flag\n    ESC               Escape instructions\n    WAIT              Wait until Coprocessor not Busy\n    LOCK              Assert Bus-Lock Signal\n\n  5.  Input and Output (refer to Chapter 8):\n\n    IN                Input\n    OUT               Output\n    INS               Input String\n    OUTS              Output String\n\n  6.  Interrupt control (refer to Chapter 9):\n\n    CLI               Clear Interrupt-Enable Flag\n    STI               Set Interrupt-Enable Flag\n    LIDT              Load IDT Register\n    SIDT              Store IDT Register\n\n  7.  Debugging (refer to Chapter 12):\n\n    MOV               Move to and from debug registers\n\n  8.  TLB testing (refer to Chapter 10):\n\n    MOV               Move to and from test registers\n\n  9.  System Control:\n\n    SMSW              Set MSW\n    LMSW              Load MSW\n    HLT               Halt Processor\n    MOV               Move to and from control registers\n\nThe instructions SMSW and LMSW are provided for compatibility with the\n80286 processor.  80386 programs access the MSW in CR0 via variants of the\nMOV instruction.  HLT stops the processor until receipt of an INTR or RESET\nsignal.\n\nIn addition to the chapters cited above, detailed information about each of\nthese instructions can be found in the instruction reference chapter,\nChapter 17.\n\n\nChapter 5  Memory Management\n\n\n\nThe 80386 transforms logical addresses (i.e., addresses as viewed by\nprogrammers) into physical address (i.e., actual addresses in physical\nmemory) in two steps:\n\n    Segment translation, in which a logical address (consisting of a\n     segment selector and segment offset) are converted to a linear address.\n\n    Page translation, in which a linear address is converted to a physical\n     address. This step is optional, at the discretion of systems-software\n     designers.\n\nThese translations are performed in a way that is not visible to\napplications programmers. Figure 5-1 illustrates the two translations at a\nhigh level of abstraction.\n\nFigure 5-1 and the remainder of this chapter present a simplified view of\nthe 80386 addressing mechanism. In reality, the addressing mechanism also\nincludes memory protection features. For the sake of simplicity, however,\nthe subject of protection is taken up in another chapter, Chapter 6.\n\n\nFigure 5-1.  Address Translation Overview\n\n             15           0      31                           0\n    LOGICAL ͻ   ͻ\n    ADDRESS     SELECTOR                  OFFSET            \n            ͼ   ͼ\n                                    \u001f\n                     ͻ\n                          SEGMENT TRANSLATION      \n                     ͼ\n                                 ͻ       PAGING ENABLED\n                                 PG ?Ŀ\n                                 ͼ                    \n                   31        PAGING \u001f DISABLED       0     \n          LINEAR  ͻ    \n          ADDRESS     DIR       PAGE      OFFSET       \n                  ͼ    \n                                    \u001f                      \n                     ͻ      \n                            PAGE TRANSLATION             \n                     ͼ      \n                                    \u0011\n                      31            \u001f              0\n            PHYSICAL ͻ\n            ADDRESS                                \n                     ͼ\n\n\n5.1  Segment Translation\n\nFigure 5-2 shows in more detail how the processor converts a logical\naddress into a linear address.\n\nTo perform this translation, the processor uses the following data\nstructures:\n\n    Descriptors\n    Descriptor tables\n    Selectors\n    Segment Registers\n\n\n5.1.1  Descriptors\n\nThe segment descriptor provides the processor with the data it needs to map\na logical address into a linear address. Descriptors are created by\ncompilers, linkers, loaders, or the operating system, not by applications\nprogrammers. Figure 5-3 illustrates the two general descriptor formats. All\ntypes of segment descriptors take one of these formats. Segment-descriptor\nfields are:\n\nBASE: Defines the location of the segment within the 4 gigabyte linear\naddress space. The processor concatenates the three fragments of the base\naddress to form a single 32-bit value.\n\nLIMIT: Defines the size of the segment. When the processor concatenates the\ntwo parts of the limit field, a 20-bit value results. The processor\ninterprets the limit field in one of two ways, depending on the setting of\nthe granularity bit:\n\n  1.  In units of one byte, to define a limit of up to 1 megabyte.\n\n  2.  In units of 4 Kilobytes, to define a limit of up to 4 gigabytes. The\n      limit is shifted left by 12 bits when loaded, and low-order one-bits\n      are inserted.\n\nGranularity bit: Specifies the units with which the LIMIT field is\ninterpreted. When thebit is clear, the limit is interpreted in units of one\nbyte; when set, the limit is interpreted in units of 4 Kilobytes.\n\nTYPE: Distinguishes between various kinds of descriptors.\n\nDPL (Descriptor Privilege Level): Used by the protection mechanism (refer\nto Chapter 6).\n\nSegment-Present bit: If this bit is zero, the descriptor is not valid for\nuse in address transformation; the processor will signal an exception when a\nselector for the descriptor is loaded into a segment register. Figure 5-4\nshows the format of a descriptor when the present-bit is zero. The operating\nsystem is free to use the locations marked AVAILABLE. Operating systems that\nimplement segment-based virtual memory clear the present bit in either of\nthese cases:\n\n    When the linear space spanned by the segment is not mapped by the\n     paging mechanism.\n\n    When the segment is not present in memory.\n\nAccessed bit: The processor sets this bit when the segment is accessed;\ni.e., a selector for the descriptor is loaded into a segment register or\nused by a selector test instruction. Operating systems that implement\nvirtual memory at the segment level may, by periodically testing and\nclearing this bit, monitor frequency of segment usage.\n\nCreation and maintenance of descriptors is the responsibility of systems\nsoftware, usually requiring the cooperation of compilers, program loaders or\nsystem builders, and therating system.\n\n\nFigure 5-2.  Segment Translation\n\n           15              0    31                                   0\n  LOGICAL ͻ   ͻ\n  ADDRESS     SELECTOR                       OFFSET               \n          ͼ   ͼ\n                \u001f                          \n        DESCRIPTOR TABLE                          \n         ͻ                           \n                                                \n                                                \n                                                \n                                                \n         ͹                           \n           SEGMENT    BASE          ͻ       \n       \u0010 DESCRIPTOR \u0010 + \u0011\n          ͹ ADDRESS       ͼ\n                                       \n          ͼ                 \n                                         \u001f\n              LINEAR  ͻ\n              ADDRESS     DIR        PAGE        OFFSET    \n                      ͼ\n\n\nFigure 5-3.  General Segment-Descriptor Format\n\n         DESCRIPTORS USED FOR APPLICATIONS CODE AND DATA SEGMENTS\n\n  31                23                15                7               0\n ͻ\n                     A                                       \n    BASE 31..24   GXOV LIMIT   P DPL 1 TYPEA  BASE 23..16     4\n                     L 19..16                                \n Ķ\n                                                                       \n         SEGMENT BASE 15..0                SEGMENT LIMIT 15..0          0\n                                                                       \n ͼ\n\n                DESCRIPTORS USED FOR SPECIAL SYSTEM SEGMENTS\n\n  31                23                15                7               0\n ͻ\n                     A                                        \n    BASE 31..24   GXOV LIMIT   P DPL 0  TYPE   BASE 23..16     4\n                     L 19..16                                 \n Ķ\n                                                                       \n         SEGMENT BASE 15..0                SEGMENT LIMIT 15..0          0\n                                                                       \n ͼ\n\n           A      - ACCESSED\n           AVL    - AVAILABLE FOR USE BY SYSTEMS PROGRAMMERS\n           DPL    - DESCRIPTOR PRIVILEGE LEVEL\n           G      - GRANULARITY\n           P      - SEGMENT PRESENT\n\n\n5.1.2  Descriptor Tables\n\nSegment descriptors are stored in either of two kinds of descriptor table:\n\n    The global descriptor table (GDT)\n    A local descriptor table (LDT)\n\nA descriptor table is simply a memory array of 8-byte entries that contain\ndescriptors, as Figure 5-5 shows. A descriptor table is variable in length\nand may contain up to 8192 (2^(13)) descriptors. The first entry of the GDT\n(INDEX=0) is not used by the processor, however.\n\nThe processor locates the GDT and the current LDT in memory by means of the\nGDTR and LDTR registers. These registers store the base addresses of the\ntables in the linear address space and store the segment limits. The\ninstructions LGDT and SGDT give access to the GDTR; the instructions LLDT\nand SLDT give access to the LDTR.\n\n\nFigure 5-4.  Format of Not-Present Descriptor\n\n  31                23                15                7               0\n ͻ\n                                                                   \n             AVAILABLE              O DPL S TYPE     AVAILABLE      4\n                                                                   \n Ķ\n                                                                        \n                                AVAILABLE                                0\n                                                                        \n ͼ\n\n\nFigure 5-5.  Descriptor Tables\n\n      GLOBAL DESCRIPTOR TABLE                 LOCAL DESCRIPTOR TABLE\n    ͻ            ͻ\n                                                            \n    Ķ            Ķ\n                             M                                   M\n    ͼ            ͼ\n    |                         |            |                         |\n    |                         |            |                         |\n    ͻ            ͻ\n                                                            \n    Ķ            Ķ\n                             N + 3                               N + 3\n    ͹            ͹\n                                                            \n    Ķ            Ķ\n                             N + 2                               N + 2\n    ͹            ͹\n                                                            \n    Ķ            Ķ\n                             N + 1                               N + 1\n    ͹            ͹\n                                                            \n    Ķ            Ķ\n                             N                                   N\n    ͼ            ͼ\n    |                         |            |                         |\n    |                         |            |                         |\n    ͻ            ͻ\n                                                            \n    (UNUSED)Ķ            Ķ\n                                                                \n    ͼ            ͼ\n                              \u001e                                      \u001e\n     ͻ               ͻ  \n              GDTR                              LDTR        \n     ͼ                ͼ\n\n\n5.1.3  Selectors\n\nThe selector portion of a logical address identifies a descriptor by\nspecifying a descriptor table and indexing a descriptor within that table.\nSelectors may be visible to applications programs as a field within a\npointer variable, but the values of selectors are usually assigned (fixed\nup) by linkers or linking loaders. Figure 5-6 shows the format of a\nselector.\n\nIndex: Selects one of 8192 descriptors in a descriptor table. The processor\nsimply multiplies this index value by 8 (the length of a descriptor), and\nadds the result to the base address of the descriptor table in order to\naccess the appropriate segment descriptor in the table.\n\nTable Indicator: Specifies to which descriptor table the selector refers. A\nzero indicates the GDT; a one indicates the current LDT.\n\nRequested Privilege Level: Used by the protection mechanism. (Refer to\nChapter 6.)\n\nBecause the first entry of the GDT is not used by the processor, a selector\nthat has an index of zero and a table indicator of zero (i.e., a selector\nthat points to the first entry of the GDT), can be used as a null selector.\nThe processor does not cause an exception when a segment register (other\nthan CS or SS) is loaded with a null selector. It will, however, cause an\nexception when the segment register is used to access memory.  This feature\nis useful for initializing unused segment registers so as to trap accidental\nreferences.\n\n\nFigure 5-6.  Format of a Selector\n\n                         15                      4 3   0\n                        ͻ\n                                                 T   \n                                   INDEX          RPL\n                                                 I   \n                        ͼ\n\n                         TI  - TABLE INDICATOR\n                         RPL - REQUESTOR'S PRIVILEGE LEVEL\n\n\nFigure 5-7.  Segment Registers\n\n             16-BIT VISIBLE\n                SELECTOR                 HIDDEN DESCRIPTOR\n           ͻ\n        CS                                                         \n           Ķ\n        SS                                                         \n           Ķ\n        DS                                                         \n           Ķ\n        ES                                                         \n           Ķ\n        FS                                                         \n           Ķ\n        GS                                                         \n           ͼ\n\n\n5.1.4  Segment Registers\n\nThe 80386 stores information from descriptors in segment registers, thereby\navoiding the need to consult a descriptor table every time it accesses\nmemory.\n\nEvery segment register has a \"visible\" portion and an \"invisible\" portion,\nas Figure 5-7 illustrates. The visible portions of these segment address\nregisters are manipulated by programs as if they were simply 16-bit\nregisters. The invisible portions are manipulated by the processor.\n\nThe operations that load these registers are normal program instructions\n(previously described in Chapter 3). These instructions are of two classes:\n\n  1.  Direct load instructions; for example, MOV, POP, LDS, LSS, LGS, LFS.\n      These instructions explicitly reference the segment registers.\n\n  2.  Implied load instructions; for example, far CALL and JMP. These\n      instructions implicitly reference the CS register, and load it with a\n      new value.\n\nUsing these instructions, a program loads the visible part of the segment\nregister with a 16-bit selector. The processor automatically fetches the\nbase address, limit, type, and other information from a descriptor table and\nloads them into the invisible part of the segment register.\n\nBecause most instructions refer to data in segments whose selectors have\nalready been loaded into segment registers, the processor can add the\nsegment-relative offset supplied by the instruction to the segment base\naddress with no additional overhead.\n\n\n5.2  Page Translation\n\nIn the second phase of address transformation, the 80386 transforms a\nlinear address into a physical address. This phase of address transformation\nimplements the basic features needed for page-oriented virtual-memory\nsystems and page-level protection.\n\nThe page-translation step is optional. Page translation is in effect only\nwhen the PG bit of CR0 is set. This bit is typically set by the operating\nsystem during software initialization. The PG bit must be set if the\noperating system is to implement multiple virtual 8086 tasks, page-oriented\nprotection, or page-oriented virtual memory.\n\n\n5.2.1  Page Frame\n\nA page frame is a 4K-byte unit of contiguous addresses of physical memory.\nPages begin onbyte boundaries and are fixed in size.\n\n\n5.2.2  Linear Address\n\nA linear address refers indirectly to a physical address by specifying a\npage table, a page within that table, and an offset within that page. Figure\n5-8 shows the format of a linear address.\n\nFigure 5-9 shows how the processor converts the DIR, PAGE, and OFFSET\nfields of a linear address into the physical address by consulting two\nlevels of page tables. The addressing mechanism uses the DIR field as an\nindex into a page directory, uses the PAGE field as an index into the page\ntable determined by the page directory, and uses the OFFSET field to address\na byte within the page determined by the page table.\n\n\nFigure 5-8.  Format of a Linear Address\n\n      31                 22 21                 12 11                 0\n     ͻ\n                                                                   \n              DIR                 PAGE                OFFSET       \n                                                                   \n     ͼ\n\n\nFigure 5-9.  Page Translation\n\n                                                              PAGE FRAME\n              ͻ         ͻ\n                  DIR       PAGE      OFFSET                          \n              ͼ                        \n                                                                       \n                            \u0010    PHYSICAL   \n                                                             ADDRESS    \n         PAGE DIRECTORY              PAGE TABLE                         \n        ͻ         ͻ                     \n                                                     ͼ\n                                ͹              \u001e\n                             \u0010 PG TBL ENTRY  \n        ͹          ͹\n      \u0010   DIR ENTRY   Ŀ                      \n         ͹                        \n                                                \n         ͼ         ͼ\n                 \u001e                         \u001e\nͻ                  \n  CR3  \nͼ\n\n\n5.2.3  Page Tables\n\nA page table is simply an array of 32-bit page specifiers. A page table is\nitself a page, and therefore contains 4 Kilobytes of memory or at most 1K\n32-bit entries.\n\nTwo levels of tables are used to address a page of memory. At the higher\nlevel is a page directory. The page directory addresses up to 1K page tables\nof the second level. A page table of the second level addresses up to 1K\npages. All the tables addressed by one page directory, therefore, can\naddress 1M pages (2^(20)). Because each page contains 4K bytes 2^(12)\nbytes), the tables of one page directory can span the entire physical\naddress space of the 80386 (2^(20) times 2^(12) = 2^(32)).\n\nThe physical address of the current page directory is stored in the CPU\nregister CR3, also called the page directory base register (PDBR). Memory\nmanagement software has the option of using one page directory for all\ntasks, one page directory for each task, or some combination of the two.\nRefer to Chapter 10 for information on initialization of CR3. Refer to\nChapter 7 to see how CR3 can change for each task.\n\n\n5.2.4  Page-Table Entries\n\nEntries in either level of page tables have the same format. Figure 5-10\nillustrates this format.\n\n\n5.2.4.1  Page Frame Address\n\nThe page frame address specifies the physical starting address of a page.\nBecause pages are located on 4K boundaries, the low-order 12 bits are always\nzero. In a page directory, the page frame address is the address of a page\ntable. In a second-level page table, the page frame address is the address\nof the page frame that contains the desired memory operand.\n\n\n5.2.4.2  Present Bit\n\nThe Present bit indicates whether a page table entry can be used in address\ntranslation. P=1 indicates that the entry can be used.\n\nWhen P=0 in either level of page tables, the entry is not valid for address\ntranslation, and the rest of the entry is available for software use; none\nof the other bits in the entry is tested by the hardware. Figure 5-11\nillustrates the format of a page-table entry when P=0.\n\nIf P=0 in either level of page tables when an attempt is made to use a\npage-table entry for address translation, the processor signals a page\nexception. In software systems that support paged virtual memory, the\npage-not-present exception handler can bring the required page into physical\nmemory. The instruction that caused the exception can then be reexecuted.\nRefer to Chapter 9 for more information on exception handlers.\n\nNote that there is no present bit for the page directory itself. The page\ndirectory may be not-present while the associated task is suspended, but the\noperating system must ensure that the page directory indicated by the CR3\nimage in the TSS is present in physical memory before the task is\ndispatched. Refer to Chapter 7 for an explanation of the TSS and task\ndispatching.\n\n\nFigure 5-10.  Format of a Page Table Entry\n\n       31                                  12 11                      0\n      ͻ\n                                                           UR \n            PAGE FRAME ADDRESS 31..12        AVAIL 0 0DA0 0//P\n                                                           SW \n      ͼ\n\n                P      - PRESENT\n                R/W    - READ/WRITE\n                U/S    - USER/SUPERVISOR\n                D      - DIRTY\n                AVAIL  - AVAILABLE FOR SYSTEMS PROGRAMMER USE\n\n                NOTE: 0 INDICATES INTEL RESERVED. DO NOT DEFINE.\n\n\nFigure 5-11.  Invalid Page Table Entry\n\n       31                                                           1 0\n      ͻ\n                                                                     \n                                  AVAILABLE                         0\n                                                                     \n      ͼ\n\n\n5.2.4.3  Accessed and Dirty Bits\n\nThese bits provide data about page usage in both levels of the page tables.\nWith the exception of the dirty bit in a page directory entry, these bits\nare set by the hardware; however, the processor does not clear any of these\nbits.\n\nThe processor sets the corresponding accessed bits in both levels of page\ntables to one before a read or write operation to a page.\n\nThe processor sets the dirty bit in the second-level page table to one\nbefore a write to an address covered by that page table entry. The dirty bit\nin directory entries is undefined.\n\nAn operating system that supports paged virtual memory can use these bits\nto determine what pages to eliminate from physical memory when the demand\nfor memory exceeds the physical memory available. The operating system is\nresponsible for testing and clearing these bits.\n\nRefer to Chapter 11 for how the 80386 coordinates updates to the accessed\nand dirty bits in multiprocessor systems.\n\n\n5.2.4.4  Read/Write and User/Supervisor Bits\n\nThese bits are not used for address translation, but are used for\npage-level protection, which the processor performs at the same time as\naddress translation. Refer to Chapter 6 where protection is discussed in\ndetail.\n\n\n5.2.5  Page Translation Cache\n\nFor greatest efficiency in address translation, the processor stores the\nmost recently used page-table data in an on-chip cache. Only if the\nnecessary paging information is not in the cache must both levels of page\ntables be referenced.\n\nThe existence of the page-translation cache is invisible to applications\nprogrammers but not to systems programmers; operating-system programmers\nmust flush the cache whenever the page tables are changed. The\npage-translation cache can be flushed by either of two methods:\n\n  1.  By reloading CR3 with a MOV instruction; for example:\n\n      MOV CR3, EAX\n\n  2.  By performing a task switch to a TSS that has a different CR3 image\n      than the current TSS. (Refer to Chapter 7 for more information on\n      task switching.)\n\n\n5.3  Combining Segment and Page Translation\n\nFigure 5-12 combines Figure 5-2 and Figure 5-9 to summarize both phases\nof the transformation from a logical address to a physical address when\npaging is enabled. By appropriate choice of options and parameters to both\nphases, memory-management software can implement several different styles of\nmemory management.\n\n\n5.3.1  \"Flat\" Architecture\n\nWhen the 80386 is used to execute software designed for architectures that\ndon't have segments, it may be expedient to effectively \"turn off\" the\nsegmentation features of the 80386. The 80386 does not have a mode that\ndisables segmentation, but the same effect can be achieved by initially\nloading the segment registers with selectors for descriptors that encompass\nthe entire 32-bit linear address space. Once loaded, the segment registers\ndon't need to be changed. The 32-bit offsets used by 80386 instructions are\nadequate to address the entire linear-address space.\n\n\n5.3.2  Segments Spanning Several Pages\n\nThe architecture of the 80386 permits segments to be larger or smaller than\nthe size of a page (4 Kilobytes). For example, suppose a segment is used to\naddress and protect a large data structure that spans 132 Kilobytes. In a\nsoftware system that supports paged virtual memory, it is not necessary for\nthe entire structure to be in physical memory at once. The structure is\ndivided into 33 pages, any number of which may not be present. The\napplications programmer does not need to be aware that the virtual memory\nsubsystem is paging the structure in this manner.\n\n\nFigure 5-12.  80306 Addressing Machanism\n\n      16                0 32                                  0\n    ͻ LOGICAL\n          SELECTOR                       OFFSET               ADDRESS\n    ͼ\n           \u001f                         \n    DESCRIPTOR TABLE                         \n   ͻ                         \n                                           \n                                           \n                                           \n                                           \n   ͹                         \n      SEGMENT              ͻ           \n \u0010  DESCRIPTOR   \u0010 + \u0011\n    ͹         ͼ\n                              \n    ͼ           \n                                \u001f                              PAGE FRAME\n      LINEAR  ͻ         ͻ\n      ADDRESS     DIR       PAGE      OFFSET                          \n              ͼ                        \n                                                                       \n                            \u0010    PHYSICAL   \n                                                             ADDRESS    \n         PAGE DIRECTORY              PAGE TABLE                         \n        ͻ         ͻ                     \n                                                                    \n                                                     ͼ\n                                ͹              \u001e\n                             \u0010 PG TBL ENTRY  \n        ͹          ͹\n      \u0010   DIR ENTRY   Ŀ                      \n         ͹                        \n                                                \n         ͼ         ͼ\n                 \u001e                         \u001e\nͻ                  \n  CR3  \nͼ\n\n\n5.3.3  Pages Spanning Several Segments\n\nOn the other hand, segments may be smaller than the size of a page. For\nexample, consider a small data structure such as a semaphore. Because of the\nprotection and sharing provided by segments (refer to Chapter 6), it may be\nuseful to create a separate segment for each semaphore. But, because a\nsystem may need many semaphores, it is not efficient to allocate a page for\neach. Therefore, it may be useful to cluster many related segments within a\npage.\n\n\n5.3.4  Non-Aligned Page and Segment Boundaries\n\nThe architecture of the 80386 does not enforce any correspondence between\nthe boundaries of pages and segments. It is perfectly permissible for a page\nto contain the end of one segment and the beginning of another. Likewise, a\nsegment may contain the end of one page and the beginning of another.\n\n\n5.3.5  Aligned Page and Segment Boundaries\n\nMemory-management software may be simpler, however, if it enforces some\ncorrespondence between page and segment boundaries. For example, if segments\nare allocated only in units of one page, the logic for segment and page\nallocation can be combined. There is no need for logic to account for\npartially used pages.\n\n\n5.3.6  Page-Table per Segment\n\nAn approach to space management that provides even further simplification\nof space-management software is to maintain a one-to-one correspondence\nbetween segment descriptors and page-directory entries, as Figure 5-13\nillustrates. Each descriptor has a base address in which the low-order 22\nbits are zero; in other words, the base address is mapped by the first entry\nof a page table. A segment may have any limit from 1 to 4 megabytes.\nDepending on the limit, the segment is contained in from 1 to 1K page\nframes. A task is thus limited to 1K segments (a sufficient number for many\napplications), each containing up to 4 Mbytes. The descriptor, the\ncorresponding page-directory entry, and the corresponding page table can be\nallocated and deallocated simultaneously.\n\n\nFigure 5-13.  Descriptor per Page Table\n\n                                                              PAGE FRAMES\n                                                             ͻ\n         LDT          PAGE DIRECTORY       PAGE TABLES                  \n    ͻ       ͻ        ͻ                 \n                                                    \u0010ͼ\n    ͹       ͹        ͹   \n                                          PTE      ͻ\n    ͹       ͹        ͹                 \n                                          PTE    Ŀ             \n    ͹       ͹        ͹   \u0010ͼ\n                                          PTE    Ŀ\n    ͹       ͹   \u0010ͼ     ͻ\n    DESCRIPTOR\u0010   PDE                                    \n    ͹       ͹                                    \n    DESCRIPTOR\u0010   PDE    Ŀ                   \u0010ͼ\n    ͹       ͹       ͻ\n                                                      ͻ\n    ͹       ͹       ͹                 \n                                                                 \n    ͹       ͹       ͹   \u0010ͼ\n                                         PTE    \n    ͹       ͹       ͹      ͻ\n                                         PTE    Ŀ             \n    ͼ       ͼ   \u0010ͼ                \n        LDT           PAGE DIRECTORY       PAGE TABLES    \u0010ͼ\n                                                              PAGE FRAMES\n\n\nChapter 6  Protection\n\n\n\n6.1  Why Protection?\n\nThe purpose of the protection features of the 80386 is to help detect and\nidentify bugs. The 80386 supports sophisticated applications that may\nconsist of hundreds or thousands of program modules. In such applications,\nthe question is how bugs can be found and eliminated as quickly as possible\nand how their damage can be tightly confined. To help debug applications\nfaster and make them more robust in production, the 80386 contains\nmechanisms to verify memory accesses and instruction execution for\nconformance to protection criteria. These mechanisms may be used or ignored,\naccording to system design objectives.\n\n\n6.2  Overview of 80386 Protection Mechanisms\n\nProtection in the 80386 has five aspects:\n\n  1.  Type checking\n  2.  Limit checking\n  3.  Restriction of addressable domain\n  4.  Restriction of procedure entry points\n  5.  Restriction of instruction set\n\nThe protection hardware of the 80386 is an integral part of the memory\nmanagement hardware. Protection applies both to segment translation and to\npage translation.\n\nEach reference to memory is checked by the hardware to verify that it\nsatisfies the protection criteria. All these checks are made before the\nmemory cycle is started; any violation prevents that cycle from starting and\nresults in an exception. Since the checks are performed concurrently with\naddress formation, there is no performance penalty.\n\nInvalid attempts to access memory result in an exception. Refer to\nChapter 9 for an explanation of the exception mechanism. The present\nchapter defines the protection violations that lead to exceptions.\n\nThe concept of \"privilege\" is central to several aspects of protection\n(numbers 3, 4, and 5 in the preceeding list). Applied to procedures,\nprivilege is the degree to which the procedure can be trusted not to make a\nmistake that might affect other procedures or data. Applied to data,\nprivilege is the degree of protection that a data structure should have\nfrom less trusted procedures.\n\nThe concept of privilege applies both to segment protection and to page\nprotection.\n\n\n6.3  Segment-Level Protection\n\nAll five aspects of protection apply to segment translation:\n\n  1.  Type checking\n  2.  Limit checking\n  3.  Restriction of addressable domain\n  4.  Restriction of procedure entry points\n  5.  Restriction of instruction set\n\nThe segment is the unit of protection, and segment descriptors store\nprotection parameters. Protection checks are performed automatically by the\nCPU when the selector of a segment descriptor is loaded into a segment\nregister and with every segment access. Segment registers hold the\nprotection parameters of the currently addressable segments.\n\n\n6.3.1  Descriptors Store Protection Parameters\n\nFigure 6-1 highlights the protection-related fields of segment descriptors.\n\nThe protection parameters are placed in the descriptor by systems software\nat the time a descriptor is created. In general, applications programmers do\nnot need to be concerned about protection parameters.\n\nWhen a program loads a selector into a segment register, the processor\nloads not only the base address of the segment but also protection\ninformation. Each segment register has bits in the invisible portion for\nstoring base, limit, type, and privilege level; therefore, subsequent\nprotection checks on the same segment do not consume additional clock\ncycles.\n\n\nFigure 6-1.  Protection Fields of Segment Descriptors\n\n                           DATA SEGMENT DESCRIPTOR\n\n  31                23                15                7               0\n ͻ\n A LIMIT          TYPE   \n BASE 31..24GB0V 19..16  P DPL          BASE 23..16 4\n L              10EWA\n Ķ\n                                    \n SEGMENT BASE 15..0        SEGMENT LIMIT 15..0         0\n                                    \n ͼ\n\n                        EXECUTABLE SEGMENT DESCRIPTOR\n\n  31                23                15                7               0\n ͻ\n A LIMIT          TYPE   \n BASE 31..24GD0V 19..16  P DPL          BASE 23..16 4\n L              10CRA\n Ķ\n                                    \n SEGMENT BASE 15..0        SEGMENT LIMIT 15..0         0\n                                    \n ͼ\n\n                         SYSTEM SEGMENT DESCRIPTOR\n\n  31                23                15                7               0\n ͻ\n A LIMIT                \n BASE 31..24GX0V 19..16  P DPL 0 TYPE  BASE 23..16 4\n L                      \n Ķ\n                                    \n SEGMENT BASE 15..0       SEGMENT LIMIT 15..0          0\n                                    \n ͼ\n\n\n        A   - ACCESSED                              E   - EXPAND-DOWN\n        AVL - AVAILABLE FOR PROGRAMMERS USE         G   - GRANULARITY\n        B   - BIG                                   P   - SEGMENT PRESENT\n        C   - CONFORMING                            R   - READABLE\n        D   - DEFAULT                               W   - WRITABLE\n        DPL - DESCRIPTOR PRIVILEGE LEVEL\n\n\n6.3.1.1  Type Checking\n\nThe TYPE field of a descriptor has two functions:\n\n  1.  It distinguishes among different descriptor formats.\n  2.  It specifies the intended usage of a segment.\n\nBesides the descriptors for data and executable segments commonly used by\napplications programs, the 80386 has descriptors for special segments used\nby the operating system and for gates. Table 6-1 lists all the types defined\nfor system segments and gates. Note that not all descriptors define\nsegments; gate descriptors have a different purpose that is discussed later\nin this chapter.\n\nThe type fields of data and executable segment descriptors include bits\nwhich further define the purpose of the segment (refer to Figure 6-1):\n\n    The writable bit in a data-segment descriptor specifies whether\n     instructions can write into the segment.\n\n    The readable bit in an executable-segment descriptor specifies\n     whether instructions are allowed to read from the segment (for example,\n     to access constants that are stored with instructions). A readable,\n     executable segment may be read in two ways:\n\n  1.  Via the CS register, by using a CS override prefix.\n\n  2.  By loading a selector of the descriptor into a data-segment register\n      (DS, ES, FS,or GS).\n\nType checking can be used to detect programming errors that would attempt\nto use segments in ways not intended by the programmer. The processor\nexamines type information on two kinds of occasions:\n\n  1.  When a selector of a descriptor is loaded into a segment register.\n      Certain segment registers can contain only certain descriptor types;\n      for example:\n\n    The CS register can be loaded only with a selector of an executable\n     segment.\n\n    Selectors of executable segments that are not readable cannot be\n     loaded into data-segment registers.\n\n    Only selectors of writable data segments can be loaded into SS.\n\n  2.  When an instruction refers (implicitly or explicitly) to a segment\n      register. Certain segments can be used by instructions only in certain\n      predefined ways; for example:\n\n    No instruction may write into an executable segment.\n\n    No instruction may write into a data segment if the writable bit is\n     not set.\n\n    No instruction may read an executable segment unless the readable bit\n     is set.\n\n\nTable 6-1. System and Gate Descriptor Types\n\nCode      Type of Segment or Gate\n\n  0       -reserved\n  1       Available 286 TSS\n  2       LDT\n  3       Busy 286 TSS\n  4       Call Gate\n  5       Task Gate\n  6       286 Interrupt Gate\n  7       286 Trap Gate\n  8       -reserved\n  9       Available 386 TSS\n  A       -reserved\n  B       Busy 386 TSS\n  C       386 Call Gate\n  D       -reserved\n  E       386 Interrupt Gate\n  F       386 Trap Gate\n\n\n6.3.1.2  Limit Checking\n\nThe limit field of a segment descriptor is used by the processor to prevent\nprograms from addressing outside the segment. The processor's interpretation\nof the limit depends on the setting of the G (granularity) bit. For data\nsegments, the processor's interpretation of the limit depends also on the\nE-bit (expansion-direction bit) and the B-bit (big bit) (refer to Table\n6-2).\n\nWhen G=0, the actual limit is the value of the 20-bit limit field as it\nappears in the descriptor. In this case, the limit may range from 0 to\n0FFFFFH (2^(20) - 1 or 1 megabyte). When G=1, the processor appends 12\nlow-order one-bits to the value in the limit field. In this case the actual\nlimit may range from 0FFFH (2^(12) - 1 or 4 kilobytes) to 0FFFFFFFFH(2^(32)\n- 1 or 4 gigabytes).\n\nFor all types of segments except expand-down data segments, the value of\nthe limit is one less than the size (expressed in bytes) of the segment. The\nprocessor causes a general-protection exception in any of these cases:\n\n    Attempt to access a memory byte at an address > limit.\n    Attempt to access a memory word at an address limit.\n    Attempt to access a memory doubleword at an address (limit-2).\n\nFor expand-down data segments, the limit has the same function but is\ninterpreted differently. In these cases the range of valid addresses is from\nlimit + 1 to either 64K or 2^(32) - 1 (4 Gbytes) depending on the B-bit. An\nexpand-down segment has maximum size when the limit is zero.\n\nThe expand-down feature makes it possible to expand the size of a stack by\ncopying it to a larger segment without needing also to update intrastack\npointers.\n\nThe limit field of descriptors for descriptor tables is used by the\nprocessor to prevent programs from selecting a table entry outside the\ndescriptor table. The limit of a descriptor table identifies the last valid\nbyte of the last descriptor in the table. Since each descriptor is eight\nbytes long, the limit value is N * 8 - 1 for a table that can contain up to\nN descriptors.\n\nLimit checking catches programming errors such as runaway subscripts and\ninvalid pointer calculations. Such errors are detected when they occur, so\nthat identification of the cause is easier. Without limit checking, such\nerrors could corrupt other modules; the existence of such errors would not\nbe discovered until later, when the corrupted module behaves incorrectly,\nand when identification of the cause is difficult.\n\n\nTable 6-2. Useful Combinations of E, G, and B Bits\n\n\nCase:                    1         2         3         4\n\nExpansion Direction      U         U         D         D\nG-bit                    0         1         0         1\nB-bit                    X         X         0         1\n\nLower bound is:\n     0                   X         X\n     LIMIT+1                                 X\nshl(LIMIT,12,1)+1                                      X\n\nUpper bound is:\n     LIMIT               X\n     shl(LIMIT,12,1)               X\n     64K-1                                   X\n     4G-1                                              X\n\nMax seg size is:\n     64K                 X\n     64K-1                         X\n     4G-4K                                   X\n     4G                                                X\n\nMin seg size is:\n     0                   X         X\n     4K                                      X         X\n\nshl (X, 12, 1) = shift X left by 12 bits inserting one-bits on the right\n\n\n6.3.1.3  Privilege Levels\n\nThe concept of privilege is implemented by assigning a value from zero to\nthree to key objects recognized by the processor. This value is called the\nprivilege level. The value zero represents the greatest privilege, the\nvalue three represents the least privilege. The following\nprocessor-recognized objects contain privilege levels:\n\n    Descriptors contain a field called the descriptor privilege level\n     (DPL).\n\n    Selectors contain a field called the requestor's privilege level\n     (RPL). The RPL is intended to represent the privilege level of\n     the procedure that originates a selector.\n\n    An internal processor register records the current privilege level\n     (CPL). Normally the CPL is equal to the DPL of the segment that\n     the processor is currently executing. CPL changes as control is\n     transferred to segments with differing DPLs.\n\nThe processor automatically evaluates the right of a procedure to access\nanother segment by comparing the CPL to one or more other privilege levels.\nThe evaluation is performed at the time the selector of a descriptor is\nloaded into a segment register. The criteria used for evaluating access to\ndata differs from that for evaluating transfers of control to executable\nsegments; therefore, the two types of access are considered separately in\nthe following sections.\n\nFigure 6-2 shows how these levels of privilege can be interpreted as rings\nof protection. The center is for the segments containing the most critical\nsoftware, usually the kernel of the operating system. Outer rings are for\nthe segments of less critical software.\n\nIt is not necessary to use all four privilege levels. Existing software\nthat was designed to use only one or two levels of privilege can simply\nignore the other levels offered by the 80386. A one-level system should use\nprivilege level zero; a two-level system should use privilege levels zero\nand three.\n\n\nFigure 6-2.  Levels of Privilege\n\n                                     TASK C\n              Ŀ\n               ͻ \n                                APPLICATIONS                   \n                    ͻ      \n                            CUSTOM EXTENSIONS                \n                         ͻ           \n                             SYSTEM SERVICES               \n                              ͻ                \n                                KERNAL                   \n              Ķ͵\n                                   LEVELLEVELLEVELLEVEL \n                                     0    1    2    3   \n                              ͼ                \n                                                          \n                         ͼ           \n                                                            \n                    ͼ      \n                                                              \n        TASK B ͼ TASK A\n               \n\n\n6.3.2  Restricting Access to Data\n\nTo address operands in memory, an 80386 program must load the selector of a\ndata segment into a data-segment register (DS, ES, FS, GS, SS). The\nprocessor automatically evaluates access to a data segment by comparing\nprivilege levels. The evaluation is performed at the time a selector for the\ndescriptor of the target segment is loaded into the data-segment register.\nAs Figure 6-3 shows, three different privilege levels enter into this type\nof privilege check:\n\n  1.  The CPL (current privilege level).\n\n  2.  The RPL (requestor's privilege level) of the selector used to specify\n      the target segment.\n\n  3.  The DPL of the descriptor of the target segment.\n\nInstructions may load a data-segment register (and subsequently use the\ntarget segment) only if the DPL of the target segment is numerically greater\nthan or equal to the maximum of the CPL and the selector's RPL. In other\nwords, a procedure can only access data that is at the same or less\nprivileged level.\n\nThe addressable domain of a task varies as CPL changes. When CPL is zero,\ndata segments at all privilege levels are accessible; when CPL is one, only\ndata segments at privilege levels one through three are accessible; when CPL\nis three, only data segments at privilege level three are accessible. This\nproperty of the 80386 can be used, for example, to prevent applications\nprocedures from reading or changing tables of the operating system.\n\n\nFigure 6-3.  Privilege Check for Data Access\n\n          16-BIT VISIBLE\n             SELECTOR            INVISIBLE DESCRIPTOR\n        ͻ\n     CS                                   CPL           \n        ͼ\n                                              \n    TARGET SEGMENT SELECTOR                           ͻ\n ͻ              \u0010 PRIVILEGE \n          INDEX          RPL\u0010 CHECK     \n ͼ              \u0010 BY CPU    \n                                                      ͼ\n     DATA SEGMENT DESCRIPTOR              \n                                          \n  31                23                15               7               0\n ͻ\n                     A LIMIT           TYPE                    \n    BASE 31..24   GB0V         P DPL             BASE 23..16    4\n                     L  19..16       10EWA                 \n Ķ\n                                                                       \n         SEGMENT BASE 15..0                 SEGMENT LIMIT 15..0         0\n                                                                       \n ͼ\n\n\n    CPL - CURRENT PRIVILEGE LEVEL\n    RPL - REQUESTOR'S PRIVILEGE LEVEL\n    DPL - DESCRIPTOR PRIVILEGE LEVEL\n\n\n6.3.2.1  Accessing Data in Code Segments\n\nLess common than the use of data segments is the use of code segments to\nstore data. Code segments may legitimately hold constants; it is not\npossible to write to a segment described as a code segment. The following\nmethods of accessing data in code segments are possible:\n\n  1.  Load a data-segment register with a selector of a nonconforming,\n      readable, executable segment.\n\n  2.  Load a data-segment register with a selector of a conforming,\n      readable, executable segment.\n\n  3.  Use a CS override prefix to read a readable, executable segment whose\n      selector is already loaded in the CS register.\n\nThe same rules as for access to data segments apply to case 1. Case 2 is\nalways valid because the privilege level of a segment whose conforming bit\nis set is effectively the same as CPL regardless of its DPL. Case 3 always\nvalid because the DPL of the code segment in CS is, by definition, equal to\nCPL.\n\n\n6.3.3  Restricting Control Transfers\n\nWith the 80386, control transfers are accomplished by the instructions JMP,\nCALL, RET, INT, and IRET, as well as by the exception and interrupt\nmechanisms. Exceptions and interrupts are special cases that Chapter 9\ncovers. This chapter discusses only JMP, CALL, and RET instructions.\n\nThe \"near\" forms of JMP, CALL, and RET transfer within the current code\nsegment, and therefore are subject only to limit checking. The processor\nensures that the destination of the JMP, CALL, or RET instruction does not\nexceed the limit of the current executable segment. This limit is cached in\nthe CS register; therefore, protection checks for near transfers require no\nextra clock cycles.\n\nThe operands of the \"far\" forms of JMP and CALL refer to other segments;\ntherefore, the processor performs privilege checking. There are two ways a\nJMP or CALL can refer to another segment:\n\n  1.  The operand selects the descriptor of another executable segment.\n\n  2.  The operand selects a call gate descriptor. This gated form of\n      transfer is discussed in a later section on call gates.\n\nAs Figure 6-4 shows, two different privilege levels enter into a privilege\ncheck for a control transfer that does not use a call gate:\n\n  1.  The CPL (current privilege level).\n  2.  The DPL of the descriptor of the target segment.\n\nNormally the CPL is equal to the DPL of the segment that the processor is\ncurrently executing. CPL may, however, be greater than DPL if the conforming\nbit is set in the descriptor of the current executable segment. The\nprocessor keeps a record of the CPL cached in the CS register; this value\ncan be different from the DPL in the descriptor of the code segment.\n\nThe processor permits a JMP or CALL directly to another segment only if one\nof the following privilege rules is satisfied:\n\n    DPL of the target is equal to CPL.\n\n    The conforming bit of the target code-segment descriptor is set, and\n     the DPL of the target is less than or equal to CPL.\n\nAn executable segment whose descriptor has the conforming bit set is called\na conforming segment. The conforming-segment mechanism permits sharing of\nprocedures that may be called from various privilege levels but should\nexecute at the privilege level of the calling procedure. Examples of such\nprocedures include math libraries and some exception handlers. When control\nis transferred to a conforming segment, the CPL does not change. This is\nthe only case when CPL may be unequal to the DPL of the current executable\nsegment.\n\nMost code segments are not conforming. The basic rules of privilege above\nmean that, for nonconforming segments, control can be transferred without a\ngate only to executable segments at the same level of privilege. There is a\nneed, however, to transfer control to (numerically) smaller privilege\nlevels; this need is met by the CALL instruction when used with call-gate\ndescriptors, which are explained in the next section. The JMP instruction\nmay never transfer control to a nonconforming segment whose DPL does not\nequal CPL.\n\n\nFigure 6-4.  Privilege Check for Control Transfer without Gate\n\n          16-BIT VISIBLE\n             SELECTOR               INVISIBLE PART\n        ͻ\n                                          CPL            CS\n        ͼ\n                                              \n                                                      ͻ\n                                              \u0010 PRIVILEGE \n                                          \u0010 CHECK     \n                                                 \u0010 BY CPU    \n     CODE-SEGMENT DESCRIPTOR                         ͼ\n                                                 \n  31                23                15              7               0\n ͻ\n                     A LIMIT                                  \n    BASE 31..24   GD0V         P DPL            BASE 23..16    4\n                     L  19..16       11CRA                 \n Ķ\n                                                                       \n         SEGMENT BASE 15..0                 SEGMENT LIMIT 15..0         0\n                                                                       \n ͼ\n\n    CPL - CURRENT PRIVILEGE LEVEL\n    DPL - DESCRIPTOR PRIVILEGE LEVEL\n    C   - CONFORMING BIT\n\n\n6.3.4  Gate Descriptors Guard Procedure Entry Points\n\nTo provide protection for control transfers among executable segments\nat different privilege levels, the 80386 uses gate descriptors. There are\nfour kinds of gate descriptors:\n\n    Call gates\n    Trap gates\n    Interrupt gates\n    Task gates\n\nThis chapter is concerned only with call gates. Task gates are used for\ntask switching, and therefore are discussed in Chapter 7. Chapter 9\nexplains how trap gates and interrupt gates are used by exceptions and\ninterrupts. Figure 6-5 illustrates the format of a call gate. A call gate\ndescriptor may reside in the GDT or in an LDT, but not in the IDT.\n\nA call gate has two primary functions:\n\n  1.  To define an entry point of a procedure.\n  2.  To specify the privilege level of the entry point.\n\nCall gate descriptors are used by call and jump instructions in the same\nmanner as code segment descriptors. When the hardware recognizes that the\ndestination selector refers to a gate descriptor, the operation of the\ninstruction is expanded as determined by the contents of the call gate.\n\nThe selector and offset fields of a gate form a pointer to the entry point\nof a procedure. A call gate guarantees that all transitions to another\nsegment go to a valid entry point, rather than possibly into the middle of a\nprocedure (or worse, into the middle of an instruction). The far pointer\noperand of the control transfer instruction does not point to the segment\nand offset of the target instruction; rather, the selector part of the\npointer selects a gate, and the offset is not used. Figure 6-6 illustrates\nthis style of addressing.\n\nAs Figure 6-7 shows, four different privilege levels are used to check the\nvalidity of a control transfer via a call gate:\n\n  1.  The CPL (current privilege level).\n\n  2.  The RPL (requestor's privilege level) of the selector used to specify\n      the call gate.\n\n  3.  The DPL of the gate descriptor.\n\n  4.  The DPL of the descriptor of the target executable segment.\n\nThe DPL field of the gate descriptor determines what privilege levels can\nuse the gate. One code segment can have several procedures that are intended\nfor use by different privilege levels. For example, an operating system may\nhave some services that are intended to be used by applications, whereas\nothers may be intended only for use by other systems software.\n\nGates can be used for control transfers to numerically smaller privilege\nlevels or to the same privilege level (though they are not necessary for\ntransfers to the same level). Only CALL instructions can use gates to\ntransfer to smaller privilege levels. A gate may be used by a JMP\ninstruction only to transfer to an executable segment with the same\nprivilege level or to a conforming segment.\n\nFor a JMP instruction to a nonconforming segment, both of the following\nprivilege rules must be satisfied; otherwise, a general protection exception\nresults.\n\n   MAX (CPL,RPL)  gate DPL\n   target segment DPL = CPL\n\nFor a CALL instruction (or for a JMP instruction to a conforming segment),\nboth of the following privilege rules must be satisfied; otherwise, a\ngeneral protection exception results.\n\n   MAX (CPL,RPL)  gate DPL\n   target segment DPL  CPL\n\n\nFigure 6-5.  Format of 80386 Call Gate\n\n   31                23                15               7              0\n  ͻ\n                                             TYPE          DWORD  \n             OFFSET 31..16           P DPL          0 0 0          4\n                                           0 1 1 0 0       COUNT  \n  Ķ\n                                                                      \n                SELECTOR                        OFFSET 15..0           0\n                                                                      \n  ͼ\n\n\nFigure 6-6.  Indirect Transfer via Call Gate\n\n         OPCODE                 OFFSET                   SELECTOR\n       ͻ\n         CALL               (NOT USED)               INDEX  RPL\n       ͼ\n                                                          \n                      DESCRIPTOR TABLE                    \n                 ͻ              \n                                                     \n                 Ķ              \n                                                       \n                 ͼ              \n                 \u0007                         \u0007              \n                 \u0007                         \u0007              \n                 \u0007                         \u0007              \n                 ͻ              \n         GATE       OFFSET    DPL COUNT \u0011    EXECUTABLE\n      DESCRIPTOR Ķ                     SEGMENT\n          Ķ  SELECTOR     OFFSET   Ŀ          ͻ\n                ͹                             \n                                                                   \n                Ķ                             \n                                                                     \n                ͹                             \n                                           \u0010  PROCEDURE   \n                Ķ                              \n                                                                      \n          \u001f      ͹                              \n      EXECUTABLE  BASE       DPL  BASE                               \n       SEGMENT   Ķ     \u0010ͼ\n      DESCRIPTOR     BASE                \n                 ͼ\n                 \u0007                         \u0007\n                 \u0007                         \u0007\n                 \u0007                         \u0007\n                 ͻ\n                                       \n                 Ķ\n                                         \n                 ͼ\n\n\nFigure 6-7.  Privilege Check via Call Gate\n\n               16-BIT VISIBLE\n                  SELECTOR            INVISIBLE DESCRIPTOR\n             ͻ\n          CS                                   CPL           \n             ͼ\n                                                   \n              TARGET SELECTOR                              ͻ\n      ͻ              \u0010 PRIVILEGE \n               INDEX          RPL\u0010 CHECK     \n      ͼ   \u0010 BY        \n                                                       \u0010 CPU       \n                                                   ͼ\n                                                       \n         GATE DESCRIPTOR         \u001f                      \n    ͻ    \n            OFFSET            DPL       COUNT       \n    ͹    \n           SELECTOR                OFFSET            \n    ͼ    \n                                                        \n                                                        \n                          ͻ\n               EXECUTABLE    BASE       LIMIT       DPL      BASE    \n                SEGMENT   ͹\n               DESCRIPTOR           BASE                 LIMIT         \n                          ͼ\n\n            CPL     - CURRENT PRIVILEGE LEVEL\n            RPL     - REQUESTOR'S PRIVILEGE LEVEL\n            DPL     - DESCRIPTOR PRIVILEGE LEVEL\n\n\n6.3.4.1  Stack Switching\n\nIf the destination code segment of the call gate is at a different\nprivilege level than the CPL, an interlevel transfer is being requested.\n\nTo maintain system integrity, each privilege level has a separate stack.\nThese stacks assure sufficient stack space to process calls from less\nprivileged levels. Without them, a trusted procedure would not work\ncorrectly if the calling procedure did not provide sufficient space on the\ncaller's stack.\n\nThe processor locates these stacks via the task state segment (see Figure\n6-8). Each task has a separate TSS, thereby permitting tasks to have\nseparate stacks. Systems software is responsible for creating TSSs and\nplacing correct stack pointers in them. The initial stack pointers in the\nTSS are strictly read-only values. The processor never changes them during\nthe course of execution.\n\nWhen a call gate is used to change privilege levels, a new stack is\nselected by loading a pointer value from the Task State Segment (TSS). The\nprocessor uses the DPL of the target code segment (the new CPL) to index the\ninitial stack pointer for PL 0, PL 1, or PL 2.\n\nThe DPL of the new stack data segment must equal the new CPL; if it does\nnot, a stack exception occurs. It is the responsibility of systems software\nto create stacks and stack-segment descriptors for all privilege levels that\nare used. Each stack must contain enough space to hold the old SS:ESP, the\nreturn address, and all parameters and local variables that may be required\nto process a call.\n\nAs with intralevel calls, parameters for the subroutine are placed on the\nstack. To make privilege transitions transparent to the called procedure,\nthe processor copies the parameters to the new stack. The count field of a\ncall gate tells the processor how many doublewords (up to 31) to copy from\nthe caller's stack to the new stack. If the count is zero, no parameters are\ncopied.\n\nThe processor performs the following stack-related steps in executing an\ninterlevel CALL.\n\n  1.  The new stack is checked to assure that it is large enough to hold\n      the parameters and linkages; if it is not, a stack fault occurs with\n      an error code of 0.\n\n  2.  The old value of the stack registers SS:ESP is pushed onto the new\n      stack as two doublewords.\n\n  3.  The parameters are copied.\n\n  4.  A pointer to the instruction after the CALL instruction (the former\n      value of CS:EIP) is pushed onto the new stack. The final value of\n      SS:ESP points to this return pointer on the new stack.\n\nFigure 6-9 illustrates the stack contents after a successful interlevel\ncall.\n\nThe TSS does not have a stack pointer for a privilege level 3 stack,\nbecause privilege level 3 cannot be called by any procedure at any other\nprivilege level.\n\nProcedures that may be called from another privilege level and that require\nmore than the 31 doublewords for parameters must use the saved SS:ESP link\nto access all parameters beyond the last doubleword copied.\n\nA call via a call gate does not check the values of the words copied onto\nthe new stack. The called procedure should check each parameter for\nvalidity. A later section discusses how the ARPL, VERR, VERW, LSL, and LAR\ninstructions can be used to check pointer values.\n\n\nFigure 6-8.  Initial Stack Pointers of TSS\n\n                 31       23       15       7      0\n                ͻ64\n                \u0007                                   \u0007\n                \u0007                                   \u0007\n                \u0007                                   \u0007\n                                                   \n                ͹\n                              EFLAGS               24\n                ͹\n                     INSTRUCTION POINTER (EIP)     20\n                ͹\n                            CR3 (PDBR)             1C\n                ͹  Ŀ\n                00000000 00000000       SS2    1018 \n                ͹   \n                               ESP2                14 \n                ͹   \n                00000000 00000000       SS1    0110   INITIAL\n                ͹    STACK\n                               ESP1                0C   POINTERS\n                ͹   \n                00000000 00000000       SS0    008  \n                ͹   \n                               ESP0                4  \n                ͹  \n                00000000 00000000  TSS BACK LINK  0\n                ͼ\n\n\nFigure 6-9.  Stack Contents after an Interlevel Call\n\n                                            31            0     SS:ESP\n                                           ͻ\u0011FROM TSS\n                 31            0           OLD SS \n                ͻ          ͹\n       D  O                                  OLD ESP    \n       I  F                              ͹\n       R                                     PARM 3     \n       E  E                              ͹\n       C  X                                  PARM 2     \n       T  P     ͹          ͹\n       I  A         PARM 3                   PARM 1     \n       O  N     ͹          ͹\n       N  S         PARM 2               OLD CS      NEW\n          I     ͹  OLD     ͹    SS:ESP\n         O         PARM 1       SS:ESP      OLD EIP          \n         N     ͹\u0011     ͹\u0011\n                                                       \n        \u001f                                               \n                ͼ          ͼ\n                    OLD STACK                  NEW STACK\n\n\n6.3.4.2  Returning from a Procedure\n\nThe \"near\" forms of the RET instruction transfer control within the current\ncode segment and therefore are subject only to limit checking. The offset of\nthe instruction following the corresponding CALL, is popped from the stack.\nThe processor ensures that this offset does not exceed the limit of the\ncurrent executable segment.\n\nThe \"far\" form of the RET instruction pops the return pointer that was\npushed onto the stack by a prior far CALL instruction. Under normal\nconditions, the return pointer is valid, because of its relation to the\nprior CALL or INT. Nevertheless, the processor performs privilege checking\nbecause of the possibility that the current procedure altered the pointer or\nfailed to properly maintain the stack. The RPL of the CS selector popped\noff the stack by the return instruction identifies the privilege level of\nthe calling procedure.\n\nAn intersegment return instruction can change privilege levels, but only\ntoward procedures of lesser privilege. When the RET instruction encounters a\nsaved CS value whose RPL is numerically greater than the CPL, an interlevel\nreturn occurs. Such a return follows these steps:\n\n  1.  The checks shown in Table 6-3 are made, and CS:EIP and SS:ESP are\n      loaded with their former values that were saved on the stack.\n\n  2.  The old SS:ESP (from the top of the current stack) value is adjusted\n      by the number of bytes indicated in the RET instruction. The resulting\n      ESP value is not compared to the limit of the stack segment. If ESP is\n      beyond the limit, that fact is not recognized until the next stack\n      operation. (The SS:ESP value of the returning procedure is not\n      preserved; normally, this value is the same as that contained in the\n      TSS.)\n\n  3.  The contents of the DS, ES, FS, and GS segment registers are checked.\n      If any of these registers refer to segments whose DPL is greater than\n      the new CPL (excluding conforming code segments), the segment register\n      is loaded with the null selector (INDEX = 0, TI = 0). The RET\n      instruction itself does not signal exceptions in these cases;\n      however, any subsequent memory reference that attempts to use a\n      segment register that contains the null selector will cause a general\n      protection exception. This prevents less privileged code from\n      accessing more privileged segments using selectors left in the\n      segment registers by the more privileged procedure.\n\n\n6.3.5  Some Instructions are Reserved for Operating System\n\nInstructions that have the power to affect the protection mechanism or to\ninfluence general system performance can only be executed by trusted\nprocedures. The 80386 has two classes of such instructions:\n\n  1.  Privileged instructions  those used for system control.\n\n  2.  Sensitive instructions  those used for I/O and I/O related\n      activities.\n\n\nTable 6-3. Interlevel Return Checks\n\n\nType of Check                              Exception\nSF  Stack Fault\nGP  General Protection Exception\nNP  Segment-Not-Present Exception  Error Code\n\nESP is within current SS segment           SF          0\nESP + 7 is within current SS segment       SF          0\nRPL of return CS is greater than CPL       GP          Return CS\nReturn CS selector is not null             GP          Return CS\nReturn CS segment is within descriptor\ntable limit                                GP          Return CS\nReturn CS descriptor is a code segment     GP          Return CS\nReturn CS segment is present               NP          Return CS\nDPL of return nonconforming code\nsegment = RPL of return CS, or DPL of\nreturn conforming code segment  RPL\nof return CS                               GP          Return CS\nESP + N + 15 is within SS segment\nN   Immediate Operand of RET N Instruction         SF          Return SS\nSS selector at ESP + N + 12 is not null    GP          Return SS\nSS selector at ESP + N + 12 is within\ndescriptor table limit                     GP          Return SS\nSS descriptor is writable data segment     GP          Return SS\nSS segment is present                      SF          Return SS\nSaved SS segment DPL = RPL of saved\nCS                                         GP          Return SS\nSaved SS selector RPL = Saved SS\nsegment DPL                                GP          Return SS\n\n\n6.3.5.1  Privileged Instructions\n\nThe instructions that affect system data structures can only be executed\nwhen CPL is zero. If the CPU encounters one of these instructions when CPL\nis greater than zero, it signals a general protection exception. These\ninstructions include:\n\n   CLTS                  Clear TaskSwitched Flag\n   HLT                   Halt Processor\n   LGDT                  Load GDL Register\n   LIDT                  Load IDT Register\n   LLDT                  Load LDT Register\n   LMSW                  Load Machine Status Word\n   LTR                   Load Task Register\n   MOV to/from CRn       Move to Control Register n\n   MOV to /from DRn      Move to Debug Register n\n   MOV to/from TRn       Move to Test Register n\n\n\n6.3.5.2  Sensitive Instructions\n\nInstructions that deal with I/O need to be restricted but also need to be\nexecuted by procedures executing at privilege levels other than zero. The\nmechanisms for restriction of I/O operations are covered in detail in\nChapter 8, \"Input/Output\".\n\n\n6.3.6  Instructions for Pointer Validation\n\nPointer validation is an important part of locating programming errors.\nPointer validation is necessary for maintaining isolation between the\nprivilege levels. Pointer validation consists of the following steps:\n\n  1.  Check if the supplier of the pointer is entitled to access the\n      segment.\n\n  2.  Check if the segment type is appropriate to its intended use.\n\n  3.  Check if the pointer violates the segment limit.\n\nAlthough the 80386 processor automatically performs checks 2 and 3 during\ninstruction execution, software must assist in performing the first check.\nThe unprivileged instruction ARPL is provided for this purpose. Software can\nalso explicitly perform steps 2 and 3 to check for potential violations\n(rather than waiting for an exception). The unprivileged instructions LAR,\nLSL, VERR, and VERW are provided for this purpose.\n\nLAR (Load Access Rights) is used to verify that a pointer refers to a\nsegment of the proper privilege level and type. LAR has one operanda\nselector for a descriptor whose access rights are to be examined. The\ndescriptor must be visible at the privilege level which is the maximum of\nthe CPL and the selector's RPL. If the descriptor is visible, LAR obtains a\nmasked form of the second doubleword of the descriptor, masks this value\nwith 00FxFF00H, stores the result into the specified 32-bit destination\nregister, and sets the zero flag. (The x indicates that the corresponding\nfour bits of the stored value are undefined.) Once loaded, the access-rights\nbits can be tested. All valid descriptor types can be tested by the LAR\ninstruction. If the RPL or CPL is greater than DPL, or if the selector is\noutside the table limit, no access-rights value is returned, and the zero\nflag is cleared. Conforming code segments may be accessed from any privilege\nlevel.\n\nLSL (Load Segment Limit) allows software to test the limit of a descriptor.\nIf the descriptor denoted by the given selector (in memory or a register) is\nvisible at the CPL, LSL loads the specified 32-bit register with a 32-bit,\nbyte granular, unscrambled limit that is calculated from fragmented limit\nfields and the G-bit of that descriptor. This can only be done for segments\n(data, code, task state, and local descriptor tables); gate descriptors are\ninaccessible. (Table 6-4 lists in detail which types are valid and which\nare not.) Interpreting the limit is a function of the segment type. For\nexample, downward expandable data segments treat the limit differently than\ncode segments do. For both LAR and LSL, the zero flag (ZF) is set if the\nloading was performed; otherwise, the ZF is cleared.\n\n\nTable 6-4. Valid Descriptor Types for LSL\n\n    Type   Descriptor Type             Valid?\n    Code\n\n    0      (invalid)                   NO \n    1      Available 286 TSS           YES\n    2      LDT                         YES\n    3      Busy 286 TSS                YES\n    4      286 Call Gate               NO \n    5      Task Gate                   NO \n    6      286 Trap Gate               NO \n    7      286 Interrupt Gate          NO \n    8      (invalid)                   NO \n    9      Available 386 TSS           YES\n    A      (invalid)                   NO \n    B      Busy 386 TSS                YES\n    C      386 Call Gate               NO \n    D      (invalid)                   NO \n    E      386 Trap Gate               NO \n    F      386 Interrupt Gate          NO \n\n\n6.3.6.1  Descriptor Validation\n\nThe 80386 has two instructions, VERR and VERW, which determine whether a\nselector points to a segment that can be read or written at the current\nprivilege level. Neither instruction causes a protection fault if the result\nis negative.\n\nVERR (Verify for Reading) verifies a segment for reading and loads ZF with\n1 if that segment is readable from the current privilege level. VERR checks\nthat:\n\n    The selector points to a descriptor within the bounds of the GDT or\n     LDT.\n\n    It denotes a code or data segment descriptor.\n\n    The segment is readable and of appropriate privilege level.\n\nThe privilege check for data segments and nonconforming code segments is\nthat the DPL must be numerically greater than or equal to both the CPL and\nthe selector's RPL. Conforming segments are not checked for privilege level.\n\nVERW (Verify for Writing) provides the same capability as VERR for\nverifying writability. Like the VERR instruction, VERW loads ZF if the\nresult of the writability check is positive. The instruction checks that the\ndescriptor is within bounds, is a segment descriptor, is writable, and that\nits DPL is numerically greater or equal to both the CPL and the selector's\nRPL. Code segments are never writable, conforming or not.\n\n\n6.3.6.2  Pointer Integrity and RPL\n\nThe Requestor's Privilege Level (RPL) feature can prevent inappropriate use\nof pointers that could corrupt the operation of more privileged code or data\nfrom a less privileged level.\n\nA common example is a file system procedure, FREAD (file_id, n_bytes,\nbuffer_ptr). This hypothetical procedure reads data from a file into a\nbuffer, overwriting whatever is there. Normally, FREAD would be available at\nthe user level, supplying only pointers to the file system procedures and\ndata located and operating at a privileged level. Normally, such a procedure\nprevents user-level procedures from directly changing the file tables.\nHowever, in the absence of a standard protocol for checking pointer\nvalidity, a user-level procedure could supply a pointer into the file tables\nin place of its buffer pointer, causing the FREAD procedure to corrupt them\nunwittingly.\n\nUse of RPL can avoid such problems. The RPL field allows a privilege\nattribute to be assigned to a selector. This privilege attribute would\nnormally indicate the privilege level of the code which generated the\nselector. The 80386 processor automatically checks the RPL of any selector\nloaded into a segment register to determine whether the RPL allows access.\n\nTo take advantage of the processor's checking of RPL, the called procedure\nneed only ensure that all selectors passed to it have an RPL at least as\nhigh (numerically) as the original caller's CPL. This action guarantees that\nselectors are not more trusted than their supplier. If one of the selectors\nis used to access a segment that the caller would not be able to access\ndirectly, i.e., the RPL is numerically greater than the DPL, then a\nprotection fault will result when that selector is loaded into a segment\nregister.\n\nARPL (Adjust Requestor's Privilege Level) adjusts the RPL field of a\nselector to become the larger of its original value and the value of the RPL\nfield in a specified register. The latter is normally loaded from the image\nof the caller's CS register which is on the stack. If the adjustment changes\nthe selector's RPL, ZF (the zero flag) is set; otherwise, ZF is cleared.\n\n\n6.4  Page-Level Protection\n\nTwo kinds of protection are related to pages:\n\n  1.  Restriction of addressable domain.\n  2.  Type checking.\n\n\n6.4.1  Page-Table Entries Hold Protection Parameters\n\nFigure 6-10 highlights the fields of PDEs and PTEs that control access to\npages.\n\n\nFigure 6-10.  Protection Fields of Page Table Entries\n\n      31                                  12 11          7           0\n     ͻ\n     UR\n     PAGE FRAME ADDRESS 31..12AVAIL00DA00//P\n     SW\n     ͼ\n      R/W     - READ/WRITE\n      U/S     - USER/SUPERVISOR\n\n\n6.4.1.1  Restricting Addressable Domain\n\nThe concept of privilege for pages is implemented by assigning each page to\none of two levels:\n\n  1.  Supervisor level (U/S=0)  for the operating system and other systems\n      software and related data.\n\n  2.  User level (U/S=1)  for applications procedures and data.\n\nThe current level (U or S) is related to CPL.  If CPL is 0, 1, or 2, the\nprocessor is executing at supervisor level. If CPL is 3, the processor is\nexecuting at user level.\n\nWhen the processor is executing at supervisor level, all pages are\naddressable, but, when the processor is executing at user level, only pages\nthat belong to the user level are addressable.\n\n\n6.4.1.2  Type Checking\n\nAt the level of page addressing, two types are defined:\n\n  1.  Read-only access (R/W=0)\n  2.  Read/write access (R/W=1)\n\nWhen the processor is executing at supervisor level, all pages are both\nreadable and writable. When the processor is executing at user level, only\npages that belong to user level and are marked for read/write access are\nwritable; pages that belong to supervisor level are neither readable nor\nwritable from user level.\n\n\n6.4.2  Combining Protection of Both Levels of Page Tables\n\nFor any one page, the protection attributes of its page directory entry may\ndiffer from those of its page table entry. The 80386 computes the effective\nprotection attributes for a page by examining the protection attributes in\nboth the directory and the page table.  Table 6-5 shows the effective\nprotection provided by the possible combinations of protection attributes.\n\n\n6.4.3  Overrides to Page Protection\n\nCertain accesses are checked as if they are privilege-level 0 references,\neven if CPL = 3:\n\n    LDT, GDT, TSS, IDT references.\n    Access to inner stack during ring-crossing CALL/INT.\n\n\n6.5  Combining Page and Segment Protection\n\nWhen paging is enabled, the 80386 first evaluates segment protection, then\nevaluates page protection. If the processor detects a protection violation\nat either the segment or the page level, the requested operation cannot\nproceed; a protection exception occurs instead.\n\nFor example, it is possible to define a large data segment which has some\nsubunits that are read-only and other subunits that are read-write.  In this\ncase, the page directory (or page table) entries for the read-only subunits\nwould have the U/S and R/W bits set to x0, indicating no write rights for\nall the pages described by that directory entry (or for individual pages).\nThis technique might be used, for example, in a UNIX-like system to define\na large data segment, part of which is read only (for shared data or ROMmed\nconstants). This enables UNIX-like systems to define a \"flat\" data space as\none large segment, use \"flat\" pointers to address within this \"flat\" space,\nyet be able to protect shared data, shared files mapped into the virtual\nspace, and supervisor areas.\n\n\nTable 6-5. Combining Directory and Page Protection\n\nPage Directory Entry     Page Table Entry      Combined Protection\n  U/S          R/W         U/S      R/W          U/S         R/W\n\n  S-0          R-0         S-0      R-0           S           x\n  S-0          R-0         S-0      W-1           S           x\n  S-0          R-0         U-1      R-0           S           x\n  S-0          R-0         U-1      W-1           S           x\n  S-0          W-1         S-0      R-0           S           x\n  S-0          W-1         S-0      W-1           S           x\n  S-0          W-1         U-1      R-0           S           x\n  S-0          W-1         U-1      W-1           S           x\n  U-1          R-0         S-0      R-0           S           x\n  U-1          R-0         S-0      W-1           S           x\n  U-1          R-0         U-1      R-0           U           R\n  U-1          R-0         U-1      W-1           U           R\n  U-1          W-1         S-0      R-0           S           x\n  U-1          W-1         S-0      W-1           S           x\n  U-1          W-1         U-1      R-0           U           R\n  U-1          W-1         U-1      W-1           U           W\n\n\nNOTE\n  S  Supervisor\n  R  Read only\n  U  User\n  W  Read and Write\n  x indicates that when the combined U/S attribute is S, the R/W attribute\n  is not checked.\n\n\n\nChapter 7  Multitasking\n\n\n\nTo provide efficient, protected multitasking, the 80386 employs several\nspecial data structures. It does not, however, use special instructions to\ncontrol multitasking; instead, it interprets ordinary control-transfer\ninstructions differently when they refer to the special data structures. The\nregisters and data structures that support multitasking are:\n\n    Task state segment\n    Task state segment descriptor\n    Task register\n    Task gate descriptor\n\nWith these structures the 80386 can rapidly switch execution from one task\nto another, saving the context of the original task so that the task can be\nrestarted later. In addition to the simple task switch, the 80386 offers two\nother task-management features:\n\n  1.  Interrupts and exceptions can cause task switches (if needed in the\n      system design). The processor not only switches automatically to the\n      task that handles the interrupt or exception, but it automatically\n      switches back to the interrupted task when the interrupt or exception\n      has been serviced. Interrupt tasks may interrupt lower-priority\n      interrupt tasks to any depth.\n\n  2.  With each switch to another task, the 80386 can also switch to\n      another LDT and to another page directory. Thus each task can have a\n      different logical-to-linear mapping and a different linear-to-physical\n      mapping. This is yet another protection feature, because tasks can be\n      isolated and prevented from interfering with one another.\n\n\n7.1  Task State Segment\n\nAll the information the processor needs in order to manage a task is stored\nin a special type of segment, a task state segment (TSS). Figure 7-1 shows\nthe format of a TSS for executing 80386 tasks. (Another format is used for\nexecuting 80286 tasks; refer to Chapter 13.)\n\nThe fields of a TSS belong to two classes:\n\n  1.  A dynamic set that the processor updates with each switch from the\n      task. This set includes the fields that store:\n\n        The general registers (EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI).\n\n        The segment registers (ES, CS, SS, DS, FS, GS).\n\n        The flags register (EFLAGS).\n\n        The instruction pointer (EIP).\n\n        The selector of the TSS of the previously executing task (updated\n         only when a return is expected).\n\n  2.  A static set that the processor reads but does not change. This set\n      includes the fields that store:\n\n        The selector of the task's LDT.\n\n        The register (PDBR) that contains the base address of the task's\n         page directory (read only when paging is enabled).\n\n        Pointers to the stacks for privilege levels 0-2.\n\n        The T-bit (debug trap bit) which causes the processor to raise a\n         debug exception when a task switch occurs. (Refer to Chapter 12\n         for more information on debugging.)\n\n        The I/O map base (refer to Chapter 8 for more information on the\n         use of the I/O map).\n\nTask state segments may reside anywhere in the linear space. The only case\nthat requires caution is when the TSS spans a page boundary and the\nhigher-addressed page is not present. In this case, the processor raises an\nexception if it encounters the not-present page while reading the TSS during\na task switch. Such an exception can be avoided by either of two strategies:\n\n  1.  By allocating the TSS so that it does not cross a page boundary.\n\n  2.  By ensuring that both pages are either both present or both \n      not-present at the time of a task switch. If both pages are \n      not-present, then the page-fault handler must make both pages present \n      before restarting the instruction that caused the task switch.\n\n\nFigure 7-1.  80386 32-Bit Task State Segment\n\n      31              23              15              7             0\n     ͻ\n               I/O MAP BASE          0 0 0 0 0 0 0   0 0 0 0 0 0 T64\n     Ķ\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0              LDT              60\n     Ķ\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0              GS               5C\n     Ķ\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0              FS               58\n     Ķ\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0              DS               54\n     Ķ\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0              SS               50\n     Ķ\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0              CS               4C\n     Ķ\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0              ES               48\n     Ķ\n                                   EDI                              44\n     Ķ\n                                   ESI                              40\n     Ķ\n                                   EBP                              3C\n     Ķ\n                                   ESP                              38\n     Ķ\n                                   EBX                              34\n     Ķ\n                                   EDX                              30\n     ͹\n                                   ECX                              2C\n     Ķ\n                                   EAX                              28\n     Ķ\n                                 EFLAGS                             24\n     Ķ\n                         INSTRUCTION POINTER (EIP)                  20\n     Ķ\n                               CR3  (PDPR)                          1C\n     Ķ\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0              SS2              18\n     Ķ\n                                  ESP2                              14\n     Ķ\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0              SS1              10\n     Ķ\n                                  ESP1                              0C\n     Ķ\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0              SS0              8\n     Ķ\n                                  ESP0                              4\n     Ķ\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   BACK LINK TO PREVIOUS TSS   0\n     ͼ\n\n\nNOTE\n      0 MEANS INTEL RESERVED. DO NOT DEFINE.\n\n\n\n7.2  TSS Descriptor\n\nThe task state segment, like all other segments, is defined by a\ndescriptor. Figure 7-2 shows the format of a TSS descriptor.\n\nThe B-bit in the type field indicates whether the task is busy. A type code\nof 9 indicates a non-busy task; a type code of 11 indicates a busy task.\nTasks are not reentrant. The B-bit allows the processor to detect an attempt\nto switch to a task that is already busy.\n\nThe BASE, LIMIT, and DPL fields and the G-bit and P-bit have functions\nsimilar to their counterparts in data-segment descriptors. The LIMIT field,\nhowever, must have a value equal to or greater than 103. An attempt to\nswitch to a task whose TSS descriptor has a limit less that 103 causes an\nexception. A larger limit is permissible, and a larger limit is required if\nan I/O permission map is present. A larger limit may also be convenient for\nsystems software if additional data is stored in the same segment as the\nTSS.\n\nA procedure that has access to a TSS descriptor can cause a task switch. In\nmost systems the DPL fields of TSS descriptors should be set to zero, so\nthat only trusted software has the right to perform task switching.\n\nHaving access to a TSS-descriptor does not give a procedure the right to\nread or modify a TSS. Reading and modification can be accomplished only with\nanother descriptor that redefines the TSS as a data segment. An attempt to\nload a TSS descriptor into any of the segment registers (CS, SS, DS, ES, FS,\nGS) causes an exception.\n\nTSS descriptors may reside only in the GDT. An attempt to identify a TSS\nwith a selector that has TI=1 (indicating the current LDT) results in an\nexception.\n\n\nFigure 7-2.  TSS Descriptor for 32-bit TSS\n\n  31                23                15                7               0\n ͻ\n                     A LIMIT           TYPE                    \n    BASE 31..24   G00V         P DPL             BASE 23..16    4\n                     L  19..16       010B1                 \n Ķ\n                                                                       \n              BASE 15..0                         LIMIT 15..0            0\n                                                                       \n ͼ\n\n\n7.3  Task Register\n\nThe task register (TR) identifies the currently executing task by pointing\nto the TSS. Figure 7-3 shows the path by which the processor accesses the\ncurrent TSS.\n\nThe task register has both a \"visible\" portion (i.e., can be read and\nchanged by instructions) and an \"invisible\" portion (maintained by the\nprocessor to correspond to the visible portion; cannot be read by any\ninstruction). The selector in the visible portion selects a TSS descriptor\nin the GDT. The processor uses the invisible portion to cache the base and\nlimit values from the TSS descriptor. Holding the base and limit in a\nregister makes execution of the task more efficient, because the processor\ndoes not need to repeatedly fetch these values from memory when it\nreferences the TSS of the current task.\n\nThe instructions LTR and STR are used to modify and read the visible\nportion of the task register. Both instructions take one operand, a 16-bit\nselector located in memory or in a general register.\n\nLTR (Load task register) loads the visible portion of the task register\nwith the selector operand, which must select a TSS descriptor in the GDT.\nLTR also loads the invisible portion with information from the TSS\ndescriptor selected by the operand. LTR is a privileged instruction; it may\nbe executed only when CPL is zero. LTR is generally used during system\ninitialization to give an initial value to the task register; thereafter,\nthe contents of TR are changed by task switch operations.\n\nSTR (Store task register) stores the visible portion of the task register\nin a general register or memory word. STR is not privileged.\n\n\nFigure 7-3.  Task Register \n\n                          ͻ\n                                                   \n                                                   \n                                 TASK STATE        \n                                  SEGMENT          \u0011Ŀ\n                                                             \n                                                             \n                          ͼ          \n           16-BIT VISIBLE             \u001e                        \n              REGISTER                   HIDDEN REGISTER      \n       ͻ\n    TR       SELECTOR            (BASE)               (LIMT)       \n       ͼ\n                                     \u001e                     \u001e\n                                     Ŀ   \n                           GLOBAL DESCRIPTOR TABLE        \n                         ͸      \n                         |     TSS DESCRIPTOR      |      \n                         ͻ      \n                                                  \n                         ͹       \n                 \u0010                        \n                          ͼ\n                          |                         |\n                          ;\n\n\n7.4  Task Gate Descriptor\n\nA task gate descriptor provides an indirect, protected reference to a TSS.\nFigure 7-4 illustrates the format of a task gate.\n\nThe SELECTOR field of a task gate must refer to a TSS descriptor. The value\nof the RPL in this selector is not used by the processor.\n\nThe DPL field of a task gate controls the right to use the descriptor to\ncause a task switch. A procedure may not select a task gate descriptor\nunless the maximum of the selector's RPL and the CPL of the procedure is\nnumerically less than or equal to the DPL of the descriptor. This constraint\nprevents untrusted procedures from causing a task switch. (Note that when a\ntask gate is used, the DPL of the target TSS descriptor is not used for\nprivilege checking.)\n\nA procedure that has access to a task gate has the power to cause a task\nswitch, just as a procedure that has access to a TSS descriptor. The 80386\nhas task gates in addition to TSS descriptors to satisfy three needs:\n\n  1.  The need for a task to have a single busy bit. Because the busy-bit\n      is stored in the TSS descriptor, each task should have only one such\n      descriptor. There may, however, be several task gates that select the\n      single TSS descriptor.\n\n  2.  The need to provide selective access to tasks. Task gates fulfill\n      this need, because they can reside in LDTs and can have a DPL that is\n      different from the TSS descriptor's DPL. A procedure that does not\n      have sufficient privilege to use the TSS descriptor in the GDT (which\n      usually has a DPL of 0) can still switch to another task if it has\n      access to a task gate for that task in its LDT. With task gates,\n      systems software can limit the right to cause task switches to\n      specific tasks.\n\n  3.  The need for an interrupt or exception to cause a task switch. Task\n      gates may also reside in the IDT, making it possible for interrupts\n      and exceptions to cause task switching. When interrupt or exception\n      vectors to an IDT entry that contains a task gate, the 80386 switches\n      to the indicated task. Thus, all tasks in the system can benefit from\n      the protection afforded by isolation from interrupt tasks.\n\nFigure 7-5 illustrates how both a task gate in an LDT and a task gate in\nthe IDT can identify the same task.\n\n\nFigure 7-4.  Task Gate Descriptor\n\n   31                23               15                7             0\n  ͻ\n                 \n  (NOT USED)P DPL 0 0 1 0 1(NOT USED) 4\n                 \n  Ķ\n                                    \n                SELECTOR            (NOT USED) 0\n                                    \n  ͼ\n\n\nFigure 7-5.  Task Gate Indirectly Identifies Task\n\n         LOCAL DESCRIPTOR TABLE              INTERRUPT DESCRIPTOR TABLE\n       ͸           ͸\n       |                         |           |                         |\n       |        TASK GATE        |           |        TASK GATE        |\n       ͻ           ͻ\n                                                              \n       Ķ           Ķ\n    Ķ                                Ķ                        \n      ͼ          ͼ\n      |                         |          |                         |\n      |                         |          |                         |\n      ;          ;\n    Ŀ  \n                           GLOBAL DESCRIPTOR TABLE\n                         ͸\n                         |                         |\n                         |     TASK DESCRIPTOR     |\n                         ͻ\n                                               \n                       \u0010Ķ\n                     \u0010                        Ŀ\n                           ͼ  \n                           |                         |  \n                           |                         |  \n                           ;  \n                                                        \n                           ͻ  \n                                                      \n                                                      \n                                                      \n                                  TASK STATE          \n                                    SEGMENT           \n                                                      \n                                                      \n                                                      \n                           ͼ\u0011\n\n\n7.5  Task Switching\n\nThe 80386 switches execution to another task in any of four cases:\n\n  1.  The current task executes a JMP or CALL that refers to a TSS\n      descriptor.\n\n  2.  The current task executes a JMP or CALL that refers to a task gate.\n\n  3.  An interrupt or exception vectors to a task gate in the IDT.\n\n  4.  The current task executes an IRET when the NT flag is set.\n\nJMP, CALL, IRET, interrupts, and exceptions are all ordinary mechanisms of\nthe 80386 that can be used in circumstances that do not require a task\nswitch. Either the type of descriptor referenced or the NT (nested task) bit\nin the flag word distinguishes between the standard mechanism and the\nvariant that causes a task switch.\n\nTo cause a task switch, a JMP or CALL instruction can refer either to a TSS\ndescriptor or to a task gate. The effect is the same in either case: the\n80386 switches to the indicated task.\n\nAn exception or interrupt causes a task switch when it vectors to a task\ngate in the IDT. If it vectors to an interrupt or trap gate in the IDT, a\ntask switch does not occur. Refer to Chapter 9 for more information on the\ninterrupt mechanism.\n\nWhether invoked as a task or as a procedure of the interrupted task, an\ninterrupt handler always returns control to the interrupted procedure in the\ninterrupted task. If the NT flag is set, however, the handler is an\ninterrupt task, and the IRET switches back to the interrupted task.\n\nA task switching operation involves these steps:\n\n  1.  Checking that the current task is allowed to switch to the designated\n      task. Data-access privilege rules apply in the case of JMP or CALL\n      instructions. The DPL of the TSS descriptor or task gate must be less\n      than or equal to the maximum of CPL and the RPL of the gate selector.\n      Exceptions, interrupts, and IRETs are permitted to switch tasks\n      regardless of the DPL of the target task gate or TSS descriptor.\n\n  2.  Checking that the TSS descriptor of the new task is marked present\n      and has a valid limit. Any errors up to this point occur in the\n      context of the outgoing task. Errors are restartable and can be\n      handled in a way that is transparent to applications procedures.\n\n  3.  Saving the state of the current task. The processor finds the base\n      address of the current TSS cached in the task register. It copies the\n      registers into the current TSS (EAX, ECX, EDX, EBX, ESP, EBP, ESI,\n      EDI, ES, CS, SS, DS, FS, GS, and the flag register). The EIP field of\n      the TSS points to the instruction after the one that caused the task\n      switch.\n\n  4.  Loading the task register with the selector of the incoming task's\n      TSS descriptor, marking the incoming task's TSS descriptor as busy,\n      and setting the TS (task switched) bit of the MSW. The selector is\n      either the operand of a control transfer instruction or is taken from\n      a task gate.\n\n  5.  Loading the incoming task's state from its TSS and resuming\n      execution. The registers loaded are the LDT register; the flag\n      register; the general registers EIP, EAX, ECX, EDX, EBX, ESP, EBP,\n      ESI, EDI; the segment registers ES, CS, SS, DS, FS, and GS; and PDBR.\n      Any errors detected in this step occur in the context of the incoming\n      task. To an exception handler, it appears that the first instruction\n      of the new task has not yet executed.\n\nNote that the state of the outgoing task is always saved when a task switch\noccurs. If execution of that task is resumed, it starts after the\ninstruction that caused the task switch. The registers are restored to the\nvalues they held when the task stopped executing.\n\nEvery task switch sets the TS (task switched) bit in the MSW (machine\nstatus word). The TS flag is useful to systems software when a coprocessor\n(such as a numerics coprocessor) is present. The TS bit signals that the\ncontext of the coprocessor may not correspond to the current 80386 task.\nChapter 11 discusses the TS bit and coprocessors in more detail.\n\nException handlers that field task-switch exceptions in the incoming task\n(exceptions due to tests 4 thru 16 of Table 7-1) should be cautious about\ntaking any action that might load the selector that caused the exception.\nSuch an action will probably cause another exception, unless the exception\nhandler first examines the selector and fixes any potential problem.\n\nThe privilege level at which execution resumes in the incoming task is\nneither restricted nor affected by the privilege level at which the outgoing\ntask was executing. Because the tasks are isolated by their separate address\nspaces and TSSs and because privilege rules can be used to prevent improper\naccess to a TSS, no privilege rules are needed to constrain the relation\nbetween the CPLs of the tasks. The new task begins executing at the\nprivilege level indicated by the RPL of the CS selector value that is loaded\nfrom the TSS.\n\n\nTable 7-1. Checks Made during a Task Switch\n\n\nTest     Test Description                   Exception\nNP = Segment-not-present exception, GP = General protection fault, TS =\nInvalid TSS, SF = Stack fault   Error Code Selects\n\n  1      Incoming TSS descriptor is         NP           Incoming TSS\n         present\n  2      Incoming TSS descriptor is         GP           Incoming TSS\n         marked not-busy\n  3      Limit of incoming TSS is           TS           Incoming TSS\n         greater than or equal to 103\n\n              All register and selector values are loaded \n\n  4      LDT selector of incoming           TS           Incoming TSS\n         task is valid\n  5      LDT of incoming task is            TS           Incoming TSS\n         present\n  6      CS selector is valid\nValidity tests of a selector check that the selector is in the proper\ntable (eg., the LDT selector refers to the GDT), lies within the bounds of\nthe table, and refers to the proper type of descriptor (e.g., the LDT\nselector refers to an LDT descriptor).              TS           Code segment\n  7      Code segment is present            NP           Code segment\n  8      Code segment DPL matches           TS           Code segment\n         CS RPL\n  9      Stack segment is valid\nValidity tests of a selector check that the selector is in the proper\ntable (eg., the LDT selector refers to the GDT), lies within the bounds of\nthe table, and refers to the proper type of descriptor (e.g., the LDT\nselector refers to an LDT descriptor).            GP           Stack segment\n 10      Stack segment is present           SF           Stack segment\n 11      Stack segment DPL = CPL            SF           Stack segment\n 12      Stack-selector RPL = CPL           GP           Stack segment\n 13      DS, ES, FS, GS selectors are       GP           Segment\n         valid\nValidity tests of a selector check that the selector is in the proper\ntable (eg., the LDT selector refers to the GDT), lies within the bounds of\nthe table, and refers to the proper type of descriptor (e.g., the LDT\nselector refers to an LDT descriptor).\n\n\n 14      DS, ES, FS, GS segments            GP           Segment\n         are readable\n 15      DS, ES, FS, GS segments            NP           Segment\n         are present\n 16      DS, ES, FS, GS segment DPL         GP           Segment\n          CPL (unless these are\n         conforming segments)\n\n\n7.6  Task Linking\n\nThe back-link field of the TSS and the NT (nested task) bit of the flag\nword together allow the 80386 to automatically return to a task that CALLed\nanother task or was interrupted by another task. When a CALL instruction, an\ninterrupt instruction, an external interrupt, or an exception causes a\nswitch to a new task, the 80386 automatically fills the back-link of the new\nTSS with the selector of the outgoing task's TSS and, at the same time,\nsets the NT bit in the new task's flag register. The NT flag indicates\nwhether the back-link field is valid. The new task releases control by\nexecuting an IRET instruction. When interpreting an IRET, the 80386 examines\nthe NT flag. If NT is set, the 80386 switches back to the task selected by\nthe back-link field. Table 7-2 summarizes the uses of these fields.\n\n\nTable 7-2. Effect of Task Switch on BUSY, NT, and Back-Link\n\nAffected Field      Effect of JMP      Effect of            Effect of\n                    Instruction        CALL Instruction     IRET Instruction\n\nBusy bit of         Set, must be       Set, must be 0       Unchanged,\nincoming task       0 before           before               must be set\n\nBusy bit of         Cleared            Unchanged            Cleared\noutgoing task                          (already set)\n\nNT bit of           Cleared            Set                  Unchanged\nincoming task\n\nNT bit of           Unchanged          Unchanged            Cleared\noutgoing task\n\nBack-link of        Unchanged          Set to outgoing      Unchanged\nincoming task                          TSS selector\n\nBack-link of        Unchanged          Unchanged            Unchanged\noutgoing task\n\n\n7.6.1  Busy Bit Prevents Loops\n\nThe B-bit (busy bit) of the TSS descriptor ensures the integrity of the\nback-link. A chain of back-links may grow to any length as interrupt tasks\ninterrupt other interrupt tasks or as called tasks call other tasks. The\nbusy bit ensures that the CPU can detect any attempt to create a loop. A\nloop would indicate an attempt to reenter a task that is already busy;\nhowever, the TSS is not a reentrable resource.\n\nThe processor uses the busy bit as follows:\n\n  1.  When switching to a task, the processor automatically sets the busy\n      bit of the new task.\n\n  2.  When switching from a task, the processor automatically clears the\n      busy bit of the old task if that task is not to be placed on the\n      back-link chain (i.e., the instruction causing the task switch is JMP\n      or IRET). If the task is placed on the back-link chain, its busy bit\n      remains set.\n\n  3.  When switching to a task, the processor signals an exception if the\n      busy bit of the new task is already set.\n\nBy these actions, the processor prevents a task from switching to itself or\nto any task that is on a back-link chain, thereby preventing invalid reentry\ninto a task.\n\nThe busy bit is effective even in multiprocessor configurations, because\nthe processor automatically asserts a bus lock when it sets or clears the\nbusy bit. This action ensures that two processors do not invoke the same\ntask at the same time. (Refer to Chapter 11 for more on multiprocessing.)\n\n\n7.6.2  Modifying Task Linkages\n\nAny modification of the linkage order of tasks should be accomplished only\nby software that can be trusted to correctly update the back-link and the\nbusy-bit. Such changes may be needed to resume an interrupted task before\nthe task that interrupted it. Trusted software that removes a task from the\nback-link chain must follow one of the following policies:\n\n  1.  First change the back-link field in the TSS of the interrupting task,\n      then clear the busy-bit in the TSS descriptor of the task removed from\n      the list.\n\n  2.  Ensure that no interrupts occur between updating the back-link chain\n      and the busy bit.\n\n\n7.7  Task Address Space\n\nThe LDT selector and PDBR fields of the TSS give software systems designers\nflexibility in utilization of segment and page mapping features of the\n80386. By appropriate choice of the segment and page mappings for each task,\ntasks may share address spaces, may have address spaces that are largely\ndistinct from one another, or may have any degree of sharing between these\ntwo extremes.\n\nThe ability for tasks to have distinct address spaces is an important\naspect of 80386 protection. A module in one task cannot interfere with a\nmodule in another task if the modules do not have access to the same address\nspaces. The flexible memory management features of the 80386 allow systems\ndesigners to assign areas of shared address space to those modules of\ndifferent tasks that are designed to cooperate with each other.\n\n\n7.7.1  Task Linear-to-Physical Space Mapping\n\nThe choices for arranging the linear-to-physical mappings of tasks fall\ninto two general classes:\n\n  1.  One linear-to-physical mapping shared among all tasks.\n\n      When paging is not enabled, this is the only possibility. Without page\n      tables, all linear addresses map to the same physical addresses.\n\n      When paging is enabled, this style of linear-to-physical mapping \n      results from using one page directory for all tasks. The linear space\n      utilized may exceed the physical space available if the operating \n      system also implements page-level virtual memory.\n\n  2.  Several partially overlapping linear-to-physical mappings.\n\n      This style is implemented by using a different page directory for each\n      task. Because the PDBR (page directory base register) is loaded from \n      the TSS with each task switch, each task may have a different page \n      directory.\n\nIn theory, the linear address spaces of different tasks may map to\ncompletely distinct physical addresses. If the entries of different page\ndirectories point to different page tables and the page tables point to\ndifferent pages of physical memory, then the tasks do not share any physical\naddresses.\n\nIn practice, some portion of the linear address spaces of all tasks must\nmap to the same physical addresses. The task state segments must lie in a\ncommon space so that the mapping of TSS addresses does not change while the\nprocessor is reading and updating the TSSs during a task switch. The linear\nspace mapped by the GDT should also be mapped to a common physical space;\notherwise, the purpose of the GDT is defeated. Figure 7-6 shows how the\nlinear spaces of two tasks can overlap in the physical space by sharing\npage tables.\n\n\n7.7.2  Task Logical Address Space\n\nBy itself, a common linear-to-physical space mapping does not enable\nsharing of data among tasks. To share data, tasks must also have a common\nlogical-to-linear space mapping; i.e., they must also have access to\ndescriptors that point into a shared linear address space. There are three\nways to create common logical-to-physical address-space mappings:\n\n  1.  Via the GDT. All tasks have access to the descriptors in the GDT. If\n      those descriptors point into a linear-address space that is mapped to\n      a common physical-address space for all tasks, then the tasks can\n      share data and instructions.\n\n  2.  By sharing LDTs. Two or more tasks can use the same LDT if the LDT\n      selectors in their TSSs select the same LDT segment. Those\n      LDT-resident descriptors that point into a linear space that is mapped\n      to a common physical space permit the tasks to share physical memory.\n      This method of sharing is more selective than sharing by the GDT; the\n      sharing can be limited to specific tasks. Other tasks in the system\n      may have different LDTs that do not give them access to the shared\n      areas.\n\n  3.  By descriptor aliases in LDTs. It is possible for certain descriptors\n      of different LDTs to point to the same linear address space. If that\n      linear address space is mapped to the same physical space by the page\n      mapping of the tasks involved, these descriptors permit the tasks to\n      share the common space. Such descriptors are commonly called\n      \"aliases\". This method of sharing is even more selective than the\n      prior two; other descriptors in the LDTs may point to distinct linear\n      addresses or to linear addresses that are not shared.\n\n\nFigure 7-6. Partially-Overlapping Linear Spaces\n\n         TSSs                                              PAGE FRAMES\n                                                          ͻ\n      TASK A TSS    PAGE DIRECTORIES     PAGE TABLES        TASK A  \n     ͻ     ͻ     ͻ  \u0010   PAGE   \n                                                   ͼ\n                    ͹     ͹    ͻ\n                                        PTE        TASK A  \n                    ͹     ͹  \u0010   PAGE   \n                                        PTE      ͼ\n     ͹     ͹     ͹     ͻ\n        PDBR   \u0010    PDE    \u0010    PTE    Ŀ    TASK A  \n     ͹     ͹     ͼ  \u0010   PAGE   \n                        PDE    Ŀ    SHARED PT       ͼ\n     ͼ     ͼ    ͻ     ͻ\n                                                         SHARED  \n                                       ͹  \u0010   PAGE   \n                                                      ͼ\n                                       ͹    ͻ\n                                           PTE        SHARED  \n                                       ͹  \u0010   PAGE   \n                                     \u0010    PTE      ͼ\n      TASK B TSS                       ͼ     ͻ\n     ͻ     ͻ                        TASK B  \n                                                 \u0010   PAGE   \n                    ͹    ͻ    ͼ\n                                                  ͻ\n                    ͹    ͹      TASK B  \n                                                \u0010   PAGE   \n     ͹     ͹    ͹   ͼ\n        PDBR   \u0010    PDE          PTE       PAGE FRAMES\n     ͹     ͹     ͹   \n                        PDE    \u0010    PTE    \n     ͼ     ͼ     ͼ\n         TSSs       PAGE DIRECTORIES     PAGE TABLES\n\n\nChapter 8  Input/Output\n\n\n\nThis chapter presents the I/O features of the 80386 from the following\nperspectives:\n\n    Methods of addressing I/O ports\n\n    Instructions that cause I/O operations\n\n    Protection as it applies to the use of I/O instructions and I/O port\n     addresses.\n\n\n8.1  I/O Addressing\n\nThe 80386 allows input/output to be performed in either of two ways:\n\n    By means of a separate I/O address space (using specific I/O\n     instructions)\n\n    By means of memory-mapped I/O (using general-purpose operand\n     manipulationinstructions).\n\n\n8.1.1  I/O Address Space\n\nThe 80386 provides a separate I/O address space, distinct from physical\nmemory, that can be used to address the input/output ports that are used for\nexternal 16 devices. The I/O address space consists of 2^(16) (64K)\nindividually addressable 8-bit ports; any two consecutive 8-bit ports can be\ntreated as a 16-bit port; and four consecutive 8-bit ports can be treated\nas a 32-bit port. Thus, the I/O address space can accommodate up to 64K\n8-bit ports, up to 32K 16-bit ports, or up to 16K 32-bit ports.\n\nThe program can specify the address of the port in two ways. Using an\nimmediate byte constant, the program can specify:\n\n    256 8-bit ports numbered 0 through 255.\n    128 16-bit ports numbered 0, 2, 4, . . . , 252, 254.\n    64 32-bit ports numbered 0, 4, 8, . . . , 248, 252.\n\nUsing a value in DX, the program can specify:\n\n    8-bit ports numbered 0 through 65535\n    16-bit ports numbered 0, 2, 4, . . . , 65532, 65534\n    32-bit ports numbered 0, 4, 8, . . . , 65528, 65532\n\nThe 80386 can transfer 32, 16, or 8 bits at a time to a device located in\nthe I/O space. Like doublewords in memory, 32-bit ports should be aligned at\naddresses evenly divisible by four so that the 32 bits can be transferred in\na single bus access. Like words in memory, 16-bit ports should be aligned at\neven-numbered addresses so that the 16 bits can be transferred in a single\nbus access. An 8-bit port may be located at either an even or odd address.\n\nThe instructions IN and OUT move data between a register and a port in the\nI/O address space. The instructions INS and OUTS move strings of data\nbetween the memory address space and ports in the I/O address space.\n\n\n8.1.2  Memory-Mapped I/O\n\nI/O devices also may be placed in the 80386 memory address space. As long\nas the devices respond like memory components, they are indistinguishable to\nthe processor.\n\nMemory-mapped I/O provides additional programming flexibility. Any\ninstruction that references memory may be used to access an I/O port located\nin the memory space. For example, the MOV instruction can transfer data\nbetween any register and a port; and the AND, OR, and TEST instructions may\nbe used to manipulate bits in the internal registers of a device (see Figure\n8-1). Memory-mapped I/O performed via the full instruction set maintains\nthe full complement of addressing modes for selecting the desired I/O\ndevice (e.g., direct address, indirect address, base register, index\nregister, scaling).\n\nMemory-mapped I/O, like any other memory reference, is subject to access\nprotection and control when executing in protected mode. Refer to Chapter 6\nfor a discussion of memory protection.\n\n\n8.2  I/O Instructions\n\nThe I/O instructions of the 80386 provide access to the processor's I/O\nports for the transfer of data to and from peripheral devices. These\ninstructions have as one operand the address of a port in the I/O address\nspace. There are two classes of I/O instruction:\n\n  1.  Those that transfer a single item (byte, word, or doubleword) located\n      in a register.\n\n  2.  Those that transfer strings of items (strings of bytes, words, or\n      doublewords) located in memory. These are known as \"string I/O\n      instructions\" or \"block I/O instructions\".\n\n\n8.2.1  Register I/O Instructions\n\nThe I/O instructions IN and OUT are provided to move data between I/O ports\nand the EAX (32-bit I/O), the AX (16-bit I/O), or AL (8-bit I/O) general\nregisters. IN and OUT instructions address I/O ports either directly, with\nthe address of one of up to 256 port addresses coded in the instruction, or\nindirectly via the DX register to one of up to 64K port addresses.\n\nIN (Input from Port) transfers a byte, word, or doubleword from an input\nport to AL, AX, or EAX. If a program specifies AL with the IN instruction,\nthe processor transfers 8 bits from the selected port to AL. If a program\nspecifies AX with the IN instruction, the processor transfers 16 bits from\nthe port to AX. If a program specifies EAX with the IN instruction, the\nprocessor transfers 32 bits from the port to EAX.\n\nOUT (Output to Port) transfers a byte, word, or doubleword to an output\nport from AL, AX, or EAX. The program can specify the number of the port\nusing the same methods as the IN instruction.\n\n\nFigure 8-1.  Memory-Mapped I/O\n\n                MEMORY\n             ADDRESS SPACE                        I/O DEVICE 1\n           ͻ                  ͻ\n                                             INTERNAL REGISTER \n           Ķ         ĺͻ \n                                                             \n           Ķ         ĺͼ \n                                            ͼ\n                          \n                          \n                          \n                                                I/O DEVICE 2\n                                            ͻ\n                                             INTERNAL REGISTER \n           Ķ         ĺͻ \n                                                             \n           Ķ         ĺͼ \n                                            ͼ\n           ͼ\n\n\n8.2.2  Block I/O Instructions\n\nThe block (or string) I/O instructions INS and OUTS move blocks of data\nbetween I/O ports and memory space. Block I/O instructions use the DX\nregister to specify the address of a port in the I/O address space. INS and\nOUTS use DX to specify:\n\n    8-bit ports numbered 0 through 65535\n    16-bit ports numbered 0, 2, 4, . . . , 65532, 65534\n    32-bit ports numbered 0, 4, 8, . . . , 65528, 65532\n\nBlock I/O instructions use either SI or DI to designate the source or\ndestination memory address. For each transfer, SI or DI are automatically\neither incremented or decremented as specified by the direction bit in the\nflags register.\n\nINS and OUTS, when used with repeat prefixes, cause block input or output\noperations. REP, the repeat prefix, modifies INS and OUTS to provide a means\nof transferring blocks of data between an I/O port and memory. These block\nI/O instructions are string primitives (refer also to Chapter 3 for more on\nstring primitives). They simplify programming and increase the speed of data\ntransfer by eliminating the need to use a separate LOOP instruction or an\nintermediate register to hold the data.\n\nThe string I/O primitives can operate on byte strings, word strings, or\ndoubleword strings. After each transfer, the memory address in ESI or EDI is\nupdated by 1 for byte operands, by 2 for word operands, or by 4 for\ndoubleword operands. The value in the direction flag (DF) determines whether\nthe processor automatically increments ESI or EDI (DF=0) or whether it\nautomatically decrements these registers (DF=1).\n\nINS (Input String from Port) transfers a byte or a word string element from\nan input port to memory. The mnemonics INSB, INSW, and INSD are variants\nthat explicitly specify the size of the operand. If a program specifies\nINSB, the processor transfers 8 bits from the selected port to the memory\nlocation indicated by ES:EDI. If a program specifies INSW, the processor\ntransfers 16 bits from the port to the memory location indicated by ES:EDI.\nIf a program specifies INSD, the processor transfers 32 bits from the port\nto the memory location indicated by ES:EDI. The destination segment register\nchoice (ES) cannot be changed for the INS instruction. Combined with the REP\nprefix, INS moves a block of information from an input port to a series of\nconsecutive memory locations.\n\nOUTS (Output String to Port) transfers a byte, word, or doubleword string\nelement to an output port from memory. The mnemonics OUTSB, OUTSW, and OUTSD\nare variants that explicitly specify the size of the operand. If a program\nspecifies OUTSB, the processor transfers 8 bits from the memory location\nindicated by ES:EDI to the the selected port. If a program specifies OUTSW,\nthe processor transfers 16 bits from the memory location indicated by ES:EDI\nto the the selected port. If a program specifies OUTSD, the processor\ntransfers 32 bits from the memory location indicated by ES:EDI to the the\nselected port. Combined with the REP prefix, OUTS moves a block of\ninformation from a series of consecutive memory locations indicated by\nDS:ESI to an output port.\n\n\n8.3  Protection and I/O\n\nTwo mechanisms provide protection for I/O functions:\n\n  1.  The IOPL field in the EFLAGS register defines the right to use\n      I/O-related instructions.\n\n  2.  The I/O permission bit map of a 80386 TSS segment defines the right\n      to use ports in the I/O address space.\n\nThese mechanisms operate only in protected mode, including virtual 8086\nmode; they do not operate in real mode. In real mode, there is no protection\nof the I/O space; any procedure can execute I/O instructions, and any I/O\nport can be addressed by the I/O instructions.\n\n\n8.3.1  I/O Privilege Level\n\nInstructions that deal with I/O need to be restricted but also need to be\nexecuted by procedures executing at privilege levels other than zero. For\nthis reason, the processor uses two bits of the flags register to store the\nI/O privilege level (IOPL). The IOPL defines the privilege level\nneeded to execute I/O-related instructions.\n\nThe following instructions can be executed only if CPL  IOPL:\n\nIN       Input\nINS      Input String\nOUT      Output\nOUTS     Output String\nCLI      Clear Interrupt-Enable Flag\nSTI      Set Interrupt-Enable\n\nThese instructions are called \"sensitive\" instructions, because they are\nsensitive to IOPL.\n\nTo use sensitive instructions, a procedure must execute at a privilege\nlevel at least as privileged as that specified by the IOPL (CPL  IOPL). Any\nattempt by a less privileged procedure to use a sensitive instruction\nresults in a general protection exception.\n\nBecause each task has its own unique copy of the flags register, each task\ncan have a different IOPL. A task whose primary function is to perform I/O\n(a device driver) can benefit from having an IOPL of three, thereby\npermitting all procedures of the task to performI/O. Other tasks typically\nhave IOPL set to zero or one, reserving the right to perform I/O\ninstructions for the most privileged procedures.\n\nA task can change IOPL only with the POPF instruction; however, such\nchanges are privileged. No procedure may alter IOPL (the I/O privilege level\nin the flag register) unless the procedure is executing at privilege level\n0. An attempt by a less privileged procedure to alter IOPL does not result\nin an exception; IOPL simply remains unaltered.\n\nThe POPF instruction may be used in addition to CLI and STI to alter the\ninterrupt-enable flag (IF); however, changes to IF by POPF are\nIOPL-sensitive. A procedure may alter IF with a POPF instruction only when\nexecuting at a level that is at least as privileged as IOPL. An attempt by a\nless privileged procedure to alter IF in this manner does not result in an\nexception; IF simply remains unaltered.\n\n\n8.3.2  I/O Permission Bit Map\n\nThe I/O instructions that directly refer to addresses in the processor's\nI/O space are IN, INS, OUT, OUTS. The 80386 has the ability to selectively\ntrap references to specific I/O addresses. The structure that enables\nselective trapping is the I/O Permission Bit Map in the TSS segment (see\nFigure 8-2). The I/O permission map is a bit vector. The size of the map\nand its location in the TSS segment are variable. The processor locates the\nI/O permission map by means of the I/O map base field in the fixed portion\nof the TSS. The I/O map base field is 16 bits wide and contains the offset\nof the beginning of the I/O permission map. The upper limit of the I/O\npermission map is the same as the limit of the TSS segment.\n\nIn protected mode, when it encounters an I/O instruction (IN, INS, OUT, or\nOUTS), the processor first checks whether CPL  IOPL. If this condition is\ntrue, the I/O operation may proceed. If not true, the processor checks the\nI/O permission map. (In virtual 8086 mode, the processor consults the map\nwithout regard for IOPL. Refer to Chapter 15.)\n\nEach bit in the map corresponds to an I/O port byte address; for example,\nthe bit for port 41 is found at I/O map base + 5, bit offset 1. The\nprocessor tests all the bits that correspond to the I/O addresses spanned by\nan I/O operation; for example, a doubleword operation tests four bits\ncorresponding to four adjacent byte addresses. If any tested bit is set,\nthe processor signals a general protection exception. If all the tested bits\nare zero, the I/O operation may proceed.\n\nIt is not necessary for the I/O permission map to represent all the I/O\naddresses. I/O addresses not spanned by the map are treated as if they had\none bits in the map. For example, if TSS limit is equal to I/O map base +\n31, the first 256 I/O ports are mapped; I/O operations on any port greater\nthan 255 cause an exception.\n\nIf I/O map base is greater than or equal to TSS limit, the TSS segment has\nno I/O permission map, and all I/O instructions in the 80386 program cause\nexceptions when CPL > IOPL.\n\nBecause the I/O permission map is in the TSS segment, different tasks can\nhave different maps. Thus, the operating system can allocate ports to a task\nby changing the I/O permission map in the task's TSS.\n\n\nFigure 8-2.  I/O Address Bit Map\n\n                                    TSS SEGMEMT\n\n                        31       23       15       7      0\n                       ͻ\n              LIMIT\u0010                                   \n                                         \n                       \u0007                                   \u0007\n                       \u0007      I/O PERMISSION BIT MAP       \u0007\n                       \u0007                                   \u0007\n                                         \n                 \u0010                                   \n                      Ķ\n                      \u0007                                   \u0007\n                      \u0007                                   \u0007\n                      \u0007                                   \u0007\n                      Ķ\n                 Ķ  I/O MAP BASE   uuuuuuuu uuuuuuuT64\n                       Ķ\n                       00000000 00000000       LOT       60\n                       Ķ\n                       00000000 00000000       GS        5C\n                       Ķ\n                                                          58\n                       \u0007                                   \u0007\n                       \u0007                                   \u0007\n                       \u0007                                   \u0007\n                                                          4\n                       Ķ\n                       00000000 00000000  TSS BACK LINK  0\n                       ͼ\n\n\nChapter 9  Exceptions and Interrupts\n\n\n\nInterrupts and exceptions are special kinds of control transfer; they work\nsomewhat like unprogrammed CALLs. They alter the normal program flow to\nhandle external events or to report errors or exceptional conditions. The\ndifference between interrupts and exceptions is that interrupts are used to\nhandle asynchronous events external to the processor, but exceptions handle\nconditions detected by the processor itself in the course of executing\ninstructions.\n\nThere are two sources for external interrupts and two sources for\nexceptions:\n\n  1.  Interrupts\n\n        Maskable interrupts, which are signalled via the INTR pin.\n\n        Nonmaskable interrupts, which are signalled via the NMI\n         (Non-Maskable Interrupt) pin.\n\n  2.  Exceptions\n\n        Processor detected. These are further classified as faults, traps,\n         and aborts.\n\n        Programmed. The instructions INTO, INT 3, INT n, and BOUND can\n         trigger exceptions. These instructions are often called \"software\n         interrupts\", but the processor handles them as exceptions.\n\nThis chapter explains the features that the 80386 offers for controlling\nand responding to interrupts when it is executing in protected mode.\n\n\n9.1  Identifying Interrupts\n\nThe processor associates an identifying number with each different type of\ninterrupt or exception.\n\nThe NMI and the exceptions recognized by the processor are assigned\npredetermined identifiers in the range 0 through 31. Not all of these\nnumbers are currently used by the 80386; unassigned identifiers in this\nrange are reserved by Intel for possible future expansion.\n\nThe identifiers of the maskable interrupts are determined by external\ninterrupt controllers (such as Intel's 8259A Programmable Interrupt\nController) and communicated to the processor during the processor's\ninterrupt-acknowledge sequence. The numbers assigned by an 8259A PIC can be\nspecified by software. Any numbers in the range 32 through 255 can be used.\nTable 9-1 shows the assignment of interrupt and exception identifiers.\n\nExceptions are classified as faults, traps, or aborts depending on the way\nthey are reported and whether restart of the instruction that caused the\nexception is supported.\n\nFaults  Faults are exceptions that are reported \"before\" the\n        instruction causingthe exception. Faults are either detected before\n        the instruction begins to execute, or during execution of the\n        instruction. If detected during the instruction, the fault is\n        reported with the machine restored to a state that permits the\n        instruction to be restarted.\n\nTraps   A trap is an exception that is reported at the instruction\n        boundary immediately after the instruction in which the\n        exception was detected.\n\nAborts  An abort is an exception that permits neither precise location\n        of the instruction causing the exception nor restart of the program\n        that caused the exception. Aborts are used to report severe errors,\n        such as hardware errors and inconsistent or illegal values in system\n        tables.\n\n\nTable 9-1. Interrupt and Exception ID Assignments\n\nIdentifier   Description\n\n0            Divide error\n1            Debug exceptions\n2            Nonmaskable interrupt\n3            Breakpoint (one-byte INT 3 instruction)\n4            Overflow (INTO instruction)\n5            Bounds check (BOUND instruction)\n6            Invalid opcode\n7            Coprocessor not available\n8            Double fault\n9            (reserved)\n10           Invalid TSS\n11           Segment not present\n12           Stack exception\n13           General protection\n14           Page fault\n15           (reserved)\n16           Coprecessor error\n17-31        (reserved)\n32-255       Available for external interrupts via INTR pin\n\n\n9.2  Enabling and Disabling Interrupts\n\nThe processor services interrupts and exceptions only between the end of\none instruction and the beginning of the next. When the repeat prefix is\nused to repeat a string instruction, interrupts and exceptions may occur\nbetween repetitions. Thus, operations on long strings do not delay interrupt\nresponse.\n\nCertain conditions and flag settings cause the processor to inhibit certain\ninterrupts and exceptions at instruction boundaries.\n\n\n9.2.1  NMI Masks Further NMIs\n\nWhile an NMI handler is executing, the processor ignores further interrupt\nsignals at the NMI pin until the next IRET instruction is executed.\n\n\n9.2.2  IF Masks INTR\n\nThe IF (interrupt-enable flag) controls the acceptance of external\ninterrupts signalled via the INTR pin. When IF=0, INTR interrupts are\ninhibited; when IF=1, INTR interrupts are enabled. As with the other flag\nbits, the processor clears IF in response to a RESET signal. The\ninstructions CLI and STI alter the setting of IF.\n\nCLI (Clear Interrupt-Enable Flag) and STI (Set Interrupt-Enable Flag)\nexplicitly alter IF (bit 9 in the flag register). These instructions may be\nexecuted only if CPL  IOPL. A protection exception occurs if they are\nexecuted when CPL > IOPL.\n\nThe IF is also affected implicitly by the following operations:\n\n    The instruction PUSHF stores all flags, including IF, in the stack\n     where they can be examined.\n\n    Task switches and the instructions POPF and IRET load the flags\n     register; therefore, they can be used to modify IF.\n\n    Interrupts through interrupt gates automatically reset IF, disabling\n     interrupts. (Interrupt gates are explained later in this chapter.)\n\n\n9.2.3  RF Masks Debug Faults\n\nThe RF bit in EFLAGS controls the recognition of debug faults. This permits\ndebug faults to be raised for a given instruction at most once, no matter\nhow many times the instruction is restarted. (Refer to Chapter 12 for more\ninformation on debugging.)\n\n\n9.2.4  MOV or POP to SS Masks Some Interrupts and Exceptions\n\nSoftware that needs to change stack segments often uses a pair of\ninstructions; for example:\n\n  MOV SS, AX\n  MOV ESP, StackTop\n\nIf an interrupt or exception is processed after SS has been changed but\nbefore ESP has received the corresponding change, the two parts of the stack\npointer SS:ESP are inconsistent for the duration of the interrupt handler or\nexception handler.\n\nTo prevent this situation, the 80386, after both a MOV to SS and a POP to\nSS instruction, inhibits NMI, INTR, debug exceptions, and single-step traps\nat the instruction boundary following the instruction that changes SS. Some\nexceptions may still occur; namely, page fault and general protection fault.\nAlways use the 80386 LSS instruction, and the problem will not occur.\n\n\n9.3  Priority Among Simultaneous Interrupts and Exceptions\n\nIf more than one interrupt or exception is pending at an instruction\nboundary, the processor services one of them at a time. The priority among\nclasses of interrupt and exception sources is shown in Table 9-2. The\nprocessor first services a pending interrupt or exception from the class\nthat has the highest priority, transferring control to the first\ninstruction of the interrupt handler. Lower priority exceptions are\ndiscarded; lower priority interrupts are held pending. Discarded exceptions\nwill be rediscovered when the interrupt handler returns control to the point\nof interruption.\n\n\n9.4  Interrupt Descriptor Table\n\nThe interrupt descriptor table (IDT) associates each interrupt or exception\nidentifier with a descriptor for the instructions that service the\nassociated event. Like the GDT and LDTs, the IDT is an array of 8-byte\ndescriptors. Unlike the GDT and LDTs, the first entry of the IDT may contain\na descriptor. To form an index into the IDT, the processor multiplies the\ninterrupt or exception identifier by eight. Because there are only 256\nidentifiers, the IDT need not contain more than 256 descriptors. It can\ncontain fewer than 256 entries; entries are required only for interrupt\nidentifiers that are actually used.\n\nThe IDT may reside anywhere in physical memory. As Figure 9-1 shows, the\nprocessor locates the IDT by means of the IDT register (IDTR). The\ninstructions LIDT and SIDT operate on the IDTR. Both instructions have one\nexplicit operand: the address in memory of a 6-byte area. Figure 9-2 shows\nthe format of this area.\n\nLIDT (Load IDT register) loads the IDT register with the linear base\naddress and limit values contained in the memory operand.  This instruction\ncan be executed only when the CPL is zero. It is normally used by the\ninitialization logic of an operating system when creating an IDT.  An\noperating system may also use it to change from one IDT to another.\n\nSIDT (Store IDT register) copies the base and limit value stored in IDTR\nto a memory location. This instruction can be executed at any privilege\nlevel.\n\n\nTable 9-2. Priority Among Simultaneous Interrupts and Exceptions\n\nPriority   Class of Interrupt or Exception\n\nHIGHEST    Faults except debug faults\n           Trap instructions INTO, INT n, INT 3\n           Debug traps for this instruction\n           Debug faults for next instruction\n           NMI interrupt\nLOWEST     INTR interrupt\n\n\nFigure 9-1.  IDT Register and Table\n\n                                              INTERRUPT DESCRIPTOR TABLE\n                                              ͻ\n                                        \u0010                      \n                                              GATE FOR INTERRUPT #N Ķ\n                                                                   \n                                             ͼ\n                                             \u0007                         \u0007\n                                             \u0007                         \u0007\n                                             \u0007                         \u0007\n                                             ͻ\n                                                                   \n                                              GATE FOR INTERRUPT #2 Ķ\n                                                                   \n                                             ͹\n            IDT REGISTER                                           \n                                              GATE FOR INTERRUPT #1 Ķ\n                    15            0                                \n                   ͻ         ͹\n                      IDT LIMIT                              \n  ͹           GATE FOR INTERRUPT #0 Ķ\n              IDT BASE            \u0010                      \n  ͼ          ͼ\n   31                             0\n\n\nFigure 9-2.  Pseudo-Descriptor Format for LIDT and SIDT\n\n  31                23                15                7               0\n ͻ\n                                  BASE                                  2\n ͹\n                                                    LIMIT               0\n                                     ͼ\n\n\n9.5  IDT Descriptors\n\nThe IDT may contain any of three kinds of descriptor:\n\n     Task gates\n     Interrupt gates\n     Trap gates\n\nFigure 9-3 illustrates the format of task gates and 80386 interrupt gates\nand trap gates. (The task gate in an IDT is the same as the task gate\nalready discussed in Chapter 7.)\n\n\nFigure 9-3.  80306 IDT Gate Descriptors\n\n                                80386 TASK GATE\n   31                23                15                7                0\n  ͻ\n  (NOT USED) P DPL0 0 1 0 1(NOT USED)4\n  Ķ\n               SELECTOR              (NOT USED)0\n  ͼ\n\n                                80386 INTERRUPT GATE\n   31                23                15                7                0\n  ͻ\n             OFFSET 31..16            P DPL0 1 1 1 00 0 0(NOT USED) 4\n  Ķ\n               SELECTOR                         OFFSET 15..0            0\n  ͼ\n\n                                80386 TRAP GATE\n   31                23                15                7                0\n  ͻ\n            OFFSET 31..16             P DPL0 1 1 1 10 0 0(NOT USED) 4\n  Ķ\n               SELECTOR                         OFFSET 15..0            0\n  ͼ\n\n\n9.6  Interrupt Tasks and Interrupt Procedures\n\nJust as a CALL instruction can call either a procedure or a task, so an\ninterrupt or exception can \"call\" an interrupt handler that is either a\nprocedure or a task. When responding to an interrupt or exception, the\nprocessor uses the interrupt or exception identifier to index a descriptor\nin the IDT. If the processor indexes to an interrupt gate or trap gate, it\ninvokes the handler in a manner similar to a CALL to a call gate. If the\nprocessor finds a task gate, it causes a task switch in a manner similar to\na CALL to a task gate.\n\n\n9.6.1  Interrupt Procedures\n\nAn interrupt gate or trap gate points indirectly to a procedure which will\nexecute in the context of the currently executing task as illustrated by\nFigure 9-4. The selector of the gate points to an executable-segment\ndescriptor in either the GDT or the current LDT. The offset field of the\ngate points to the beginning of the interrupt or exception handling\nprocedure.\n\nThe 80386 invokes an interrupt or exception handling procedure in much the\nsame manner as it CALLs a procedure; the differences are explained in the\nfollowing sections.\n\n\nFigure 9-4.  Interrupt Vectoring for Procedures\n\n                  IDT                                    EXECUTABLE SEGMENT\n           ͻ                             ͻ\n                                                 OFFSET               \n           ͹  \u0010 ENTRY POINT   \n                                  LDT OR GDT                         \n           ͹     ͻ                     \n                                                                   \nINTERRUPT  ͹     ͹                     \n   ID\u0010 TRAP GATE OR                                         \n           INTERRUPT GATE Ŀ   ͹                     \n           ͹                                         \n                               ͹                     \n           ͹  \u0010   SEGMENT     Ŀ                   \n                                  DESCRIPTOR                       \n           ͹      ͹                    \n                                                                   \n           ͹      ͹                    \n                                                BASE               \n           ͼ      ͹ \u0010ͼ\n                                                 \n                                                 \n                                                 \n                                  ͼ\n\n\n9.6.1.1  Stack of Interrupt Procedure\n\nJust as with a control transfer due to a CALL instruction, a control\ntransfer to an interrupt or exception handling procedure uses the stack to\nstore the information needed for returning to the original procedure. As\nFigure 9-5 shows, an interrupt pushes the EFLAGS register onto the stack\nbefore the pointer to the interrupted instruction.\n\nCertain types of exceptions also cause an error code to be pushed on the\nstack. An exception handler can use the error code to help diagnose the\nexception.\n\n\n9.6.1.2  Returning from an Interrupt Procedure\n\nAn interrupt procedure also differs from a normal procedure in the method\nof leaving the procedure. The IRET instruction is used to exit from an\ninterrupt procedure. IRET is similar to RET except that IRET increments EIP\nby an extra four bytes (because of the flags on the stack) and moves the\nsaved flags into the EFLAGS register. The IOPL field of EFLAGS is changed\nonly if the CPL is zero. The IF flag is changed only if CPL  IOPL.\n\n\nFigure 9-5.  Stack Layout after Exception of Interrupt \n\n                           WITHOUT PRIVILEGE TRANSITION\n\n      D  O      31          0                     31          0\n      I  F    ͹                 ͹\n      R           OLD              OLD\n      E  E    ͹   SS:ESP        ͹   SS:ESP\n      C  X                         \n      T  P    ͹\u0011           ͹\u0011\n      I  A      OLD EFLAGS                      OLD EFLAGS   \n      O  N    ͹                 ͹\n      N  S    OLD CS     NEW          OLD CS \n         I    ͹   SS:ESP        ͹\n        O        OLD EIP                        OLD EIP        NEW\n        N    ͹\u0011           ͹   SS:ESP\n                                               ERROR CODE        \n       \u001f      \u0007               \u0007                 ͹\u0011\n              \u0007               \u0007                                \n              \u0007               \u0007\n              WITHOUT ERROR CODE                 WITH ERROR CODE\n\n                             WITH PRIVILEGE TRANSITION\n\n      D  O     31            0                     31          0\n      I  F    ͻ\u0011Ŀ           ͻ\u0011Ŀ\n      R       OLD SS                 OLD SS      \n      E  E    ͹   SS:ESP        ͹   SS:ESP\n      C  X        OLD ESP      FROM TSS           OLD ESP      FROM TSS\n      T  P    ͹                 ͹\n      I  A      OLD EFLAGS                      OLD EFLAGS   \n      O  N    ͹                 ͹\n      N  S    OLD CS     NEW          OLD CS \n         I    ͹   SS:EIP        ͹\n        O        OLD EIP                        OLD EIP        NEW\n        N    ͹\u0011           ͹   SS:ESP\n                                               ERROR CODE        \n       \u001f      \u0007               \u0007                 ͹\u0011\n              \u0007               \u0007                                \n              \u0007               \u0007\n              WITHOUT ERROR CODE                 WITH ERROR CODE\n\n\n9.6.1.3  Flags Usage by Interrupt Procedure\n\nInterrupts that vector through either interrupt gates or trap gates cause\nTF (the trap flag) to be reset after the current value of TF is saved on the\nstack as part of EFLAGS. By this action the processor prevents debugging\nactivity that uses single-stepping from affecting interrupt response. A\nsubsequent IRET instruction restores TF to the value in the EFLAGS image on\nthe stack.\n\nThe difference between an interrupt gate and a trap gate is in the effect\non IF (the interrupt-enable flag). An interrupt that vectors through an\ninterrupt gate resets IF, thereby preventing other interrupts from\ninterfering with the current interrupt handler. A subsequent IRET\ninstruction restores IF to the value in the EFLAGS image on the stack. An\ninterrupt through a trap gate does not change IF.\n\n\n9.6.1.4  Protection in Interrupt Procedures\n\nThe privilege rule that governs interrupt procedures is similar to that for\nprocedure calls: the CPU does not permit an interrupt to transfer control to\na procedure in a segment of lesser privilege (numerically greater privilege\nlevel) than the current privilege level. An attempt to violate this rule\nresults in a general protection exception.\n\nBecause occurrence of interrupts is not generally predictable, this\nprivilege rule effectively imposes restrictions on the privilege levels at\nwhich interrupt and exception handling procedures can execute. Either of the\nfollowing strategies can be employed to ensure that the privilege rule is\nnever violated.\n\n    Place the handler in a conforming segment. This strategy suits the\n     handlers for certain exceptions (divide error, for example). Such a\n     handler must use only the data available to it from the stack. If it\n     needed data from a data segment, the data segment would have to have\n     privilege level three, thereby making it unprotected.\n\n    Place the handler procedure in a privilege level zero segment.\n\n\n9.6.2  Interrupt Tasks\n\nA task gate in the IDT points indirectly to a task, as Figure 9-6\nillustrates. The selector of the gate points to a TSS descriptor in the GDT.\n\nWhen an interrupt or exception vectors to a task gate in the IDT, a task\nswitch results. Handling an interrupt with a separate task offers two\nadvantages:\n\n    The entire context is saved automatically.\n\n    The interrupt handler can be isolated from other tasks by giving it a\n     separate address space, either via its LDT or via its page directory.\n\nThe actions that the processor takes to perform a task switch are discussed\nin Chapter 7. The interrupt task returns to the interrupted task by\nexecuting an IRET instruction.\n\nIf the task switch is caused by an exception that has an error code, the\nprocessor automatically pushes the error code onto the stack that\ncorresponds to the privilege level of the first instruction to be executed\nin the interrupt task.\n\nWhen interrupt tasks are used in an operating system for the 80386, there\nare actually two schedulers: the software scheduler (part of the operating\nsystem) and the hardware scheduler (part of the processor's interrupt\nmechanism). The design of the software scheduler should account for the fact\nthat the hardware scheduler may dispatch an interrupt task whenever\ninterrupts are enabled.\n\n\nFigure 9-6.  Interrupt Vectoring for Tasks\n\n            IDT                       GDT\n     ͻ        ͻ\n                                                           TSS\n     Ķ        Ķ       ͻ\n                                                                    \n     Ķ        Ķ                       \n                                                                    \n     Ķ        Ķ                       \n \u0010   TASK GATE    Ŀ                                           \n    Ķ       Ķ                       \n                       \u0010 TSS DESCRIPTOR Ŀ                   \n    Ķ        Ķ                      \n                                                                  \n    Ķ        Ķ   \u0010ͼ\n                                            \n    Ķ        Ķ\n                                            \n    ͼ        ͼ\n \n INTERRUPT ID\n\n\n9.7  Error Code\n\nWith exceptions that relate to a specific segment, the processor pushes an\nerror code onto the stack of the exception handler (whether procedure or\ntask). The error code has the format shown in Figure 9-7. The format of the\nerror code resembles that of a selector; however, instead of an RPL field,\nthe error code contains two one-bit items:\n\n  1.  The processor sets the EXT bit if an event external to the program\n      caused the exception.\n\n  2.  The processor sets the I-bit (IDT-bit) if the index portion of the\n      error code refers to a gate descriptor in the IDT.\n\nIf the I-bit is not set, the TI bit indicates whether the error code refers\nto the GDT (value 0) or to the LDT (value 1). The remaining 14 bits are the\nupper 14 bits of the segment selector involved. In some cases the error code\non the stack is null, i.e., all bits in the low-order word are zero.\n\n\nFigure 9-7.  Error Code Format\n\n       31              15                                         2 1 0\n      ͻ\n                               T E\n      UNDEFINED     SELECTOR INDEX       I \n                               I X\n      ͼ\n\n\n9.8  Exception Conditions\n\nThe following sections describe each of the possible exception conditions\nin detail. Each description classifies the exception as a fault, trap, or\nabort. This classification provides information needed by systems\nprogrammers for restarting the procedure in which the exception occurred:\n\nFaults   The CS and EIP values saved when a fault is reported point to the\n         instruction causing the fault.\n\nTraps    The CS and EIP values stored when the trap is reported point to the\n         instruction dynamically after the instruction causing the trap. If\n         a trap is detected during an instruction that alters program flow,\n         the reported values of CS and EIP reflect the alteration of program\n         flow. For example, if a trap is detected in a JMP instruction, the\n         CS and EIP values pushed onto the stack point to the target of the\n         JMP, not to the instruction after the JMP.\n\nAborts   An abort is an exception that permits neither precise location of\n         the instruction causing the exception nor restart of the program\n         that caused the exception. Aborts are used to report severe errors,\n         such as hardware errors and inconsistent or illegal values in\n         system tables.\n\n\n9.8.1  Interrupt 0  Divide Error\n\nThe divide-error fault occurs during a DIV or an IDIV instruction when the\ndivisor is zero.\n\n\n9.8.2  Interrupt 1  Debug Exceptions\n\nThe processor triggers this interrupt for any of a number of conditions;\nwhether the exception is a fault or a trap depends on the condition:\n\n     Instruction address breakpoint fault.\n     Data address breakpoint trap.\n     General detect fault.\n     Single-step trap.\n     Task-switch breakpoint trap.\n\nThe processor does not push an error code for this exception. An exception\nhandler can examine the debug registers to determine which condition caused\nthe exception. Refer to Chapter 12 for more detailed information about\ndebugging and the debug registers.\n\n\n9.8.3  Interrupt 3  Breakpoint\n\nThe INT 3 instruction causes this trap. The INT 3 instruction is one byte\nlong, which makes it easy to replace an opcode in an executable segment with\nthe breakpoint opcode. The operating system or a debugging subsystem can use\na data-segment alias for an executable segment to place an INT 3 anywhere it\nis convenient to arrest normal execution so that some sort of special\nprocessing can be performed. Debuggers typically use breakpoints as a way of\ndisplaying registers, variables, etc., at crucial points in a task.\n\nThe saved CS:EIP value points to the byte following the breakpoint. If a\ndebugger replaces a planted breakpoint with a valid opcode, it must subtract\none from the saved EIP value before returning. Refer also to Chapter 12 for\nmore information on debugging.\n\n\n9.8.4  Interrupt 4  Overflow\n\nThis trap occurs when the processor encounters an INTO instruction and the\nOF (overflow) flag is set. Since signed arithmetic and unsigned arithmetic\nboth use the same arithmetic instructions, the processor cannot determine\nwhich is intended and therefore does not cause overflow exceptions\nautomatically. Instead it merely sets OF when the results, if interpreted as\nsigned numbers, would be out of range. When doing arithmetic on signed\noperands, careful programmers and compilers either test OF directly or use\nthe INTO instruction.\n\n\n9.8.5  Interrupt 5  Bounds Check\n\nThis fault occurs when the processor, while executing a BOUND instruction,\nfinds that the operand exceeds the specified limits. A program can use the\nBOUND instruction to check a signed array index against signed limits\ndefined in a block of memory.\n\n\n9.8.6  Interrupt 6  Invalid Opcode\n\nThis fault occurs when an invalid opcode is detected by the execution unit.\n(The exception is not detected until an attempt is made to execute the\ninvalid opcode; i.e., prefetching an invalid opcode does not cause this\nexception.) No error code is pushed on the stack. The exception can be\nhandled within the same task.\n\nThis exception also occurs when the type of operand is invalid for the\ngiven opcode. Examples include an intersegment JMP referencing a register\noperand, or an LES instruction with a register source operand.\n\n\n9.8.7  Interrupt 7  Coprocessor Not Available\n\nThis exception occurs in either of two conditions:\n\n    The processor encounters an ESC (escape) instruction, and the EM\n     (emulate) bit ofCR0 (control register zero) is set.\n\n    The processor encounters either the WAIT instruction or an ESC\n     instruction, and both the MP (monitor coprocessor) and TS (task\n     switched) bits of CR0 are set.\n\nRefer to Chapter 11 for information about the coprocessor interface.\n\n\n9.8.8  Interrupt 8  Double Fault\n\nNormally, when the processor detects an exception while trying to invoke\nthe handler for a prior exception, the two exceptions can be handled\nserially. If, however, the processor cannot handle them serially, it signals\nthe double-fault exception instead. To determine when two faults are to be\nsignalled as a double fault, the 80386 divides the exceptions into three\nclasses: benign exceptions, contributory exceptions, and page faults. Table\n9-3 shows this classification.\n\nTable 9-4 shows which combinations of exceptions cause a double fault and\nwhich do not.\n\nThe processor always pushes an error code onto the stack of the\ndouble-fault handler; however, the error code is always zero. The faulting\ninstruction may not be restarted. If any other exception occurs while\nattempting to invoke the double-fault handler, the processor shuts down.\n\n\nTable 9-3. Double-Fault Detection Classes\n\nClass           ID          Description\n\n                 1          Debug exceptions\n                 2          NMI\n                 3          Breakpoint\nBenign           4          Overflow\nExceptions       5          Bounds check\n                 6          Invalid opcode\n                 7          Coprocessor not available\n                16          Coprocessor error\n\n                 0          Divide error\n                 9          Coprocessor Segment Overrun\nContributory    10          Invalid TSS\nExceptions      11          Segment not present\n                12          Stack exception\n                13          General protection\n\nPage Faults     14          Page fault\n\n\nTable 9-4. Double-Fault Definition\n\n                                   SECOND EXCEPTION\n\n                           Benign       Contributory    Page\n                           Exception    Exception       Fault\n\n\n           Benign          OK           OK              OK\n           Exception\n\nFIRST      Contributory    OK           DOUBLE          OK\nEXCEPTION  Exception\n\n           Page\n           Fault           OK           DOUBLE          DOUBLE\n\n\n9.8.9  Interrupt 9  Coprocessor Segment Overrun\n\nThis exception is raised in protected mode if the 80386 detects a page or\nsegment violation while transferring the middle portion of a coprocessor\noperand to the NPX. This exception is avoidable. Refer to Chapter 11 for\nmore information about the coprocessor interface.\n\n\n9.8.10  Interrupt 10  Invalid TSS\n\nInterrupt 10 occurs if during a task switch the new TSS is invalid. A TSS\nis considered invalid in the cases shown in Table 9-5. An error code is\npushed onto the stack to help identify the cause of the fault. The EXT bit\nindicates whether the exception was caused by a condition outside the\ncontrol of the program; e.g., an external interrupt via a task gate\ntriggered a switch to an invalid TSS.\n\nThis fault can occur either in the context of the original task or in the\ncontext of the new task. Until the processor has completely verified the\npresence of the new TSS, the exception occurs in the context of the original\ntask. Once the existence of the new TSS is verified, the task switch is\nconsidered complete; i.e., TR is updated and, if the switch is due to a\nCALL or interrupt, the backlink of the new TSS is set to the old TSS. Any\nerrors discovered by the processor after this point are handled in the\ncontext of the new task.\n\nTo insure a proper TSS to process it, the handler for exception 10 must be\na task invoked via a task gate.\n\n\nTable 9-5. Conditions That Invalidate the TSS\n\nError Code              Condition\n\nTSS id + EXT            The limit in the TSS descriptor is less than 103\nLTD id + EXT            Invalid LDT selector or LDT not present\nSS id + EXT             Stack segment selector is outside table limit\nSS id + EXT             Stack segment is not a writable segment\nSS id + EXT             Stack segment DPL does not match new CPL\nSS id + EXT             Stack segment selector RPL < >  CPL\nCS id + EXT             Code segment selector is outside table limit\nCS id + EXT             Code segment selector does not refer to code\n                        segment\nCS id + EXT             DPL of non-conforming code segment < > new CPL\nCS id + EXT             DPL of conforming code segment > new CPL\nDS/ES/FS/GS id + EXT    DS, ES, FS, or GS segment selector is outside\n                        table limits\nDS/ES/FS/GS id + EXT    DS, ES, FS, or GS is not readable segment\n\n\n9.8.11  Interrupt 11  Segment Not Present\n\nException 11 occurs when the processor detects that the present bit of a\ndescriptor is zero. The processor can trigger this fault in any of these\ncases:\n\n    While attempting to load the CS, DS, ES, FS, or GS registers; loading\n     the SS register, however, causes a stack fault.\n\n    While attempting loading the LDT register with an LLDT instruction;\n     loading the LDT register during a task switch operation, however,\n     causes the \"invalid TSS\" exception.\n\n    While attempting to use a gate descriptor that is marked not-present.\n\nThis fault is restartable. If the exception handler makes the segment\npresent and returns, the interrupted program will resume execution.\n\nIf a not-present exception occurs during a task switch, not all the steps\nof the task switch are complete. During a task switch, the processor first\nloads all the segment registers, then checks their contents for validity. If\na not-present exception is discovered, the remaining segment registers have\nnot been checked and therefore may not be usable for referencing memory. The\nnot-present handler should not rely on being able to use the values found\nin CS, SS, DS, ES, FS, and GS without causing another exception. The\nexception handler should check all segment registers before trying to resume\nthe new task; otherwise, general protection faults may result later under\nconditions that make diagnosis more difficult. There are three ways to\nhandle this case:\n\n  1.  Handle the not-present fault with a task. The task switch back to the\n      interrupted task will cause the processor to check the registers as it\n      loads them from the TSS.\n\n  2.  PUSH and POP all segment registers. Each POP causes the processor to\n      check the new contents of the segment register.\n\n  3.  Scrutinize the contents of each segment-register image in the TSS,\n      simulating the test that the processor makes when it loads a segment\n      register.\n\nThis exception pushes an error code onto the stack. The EXT bit of the\nerror code is set if an event external to the program caused an interrupt\nthat subsequently referenced a not-present segment. The I-bit is set if the\nerror code refers to an IDT entry, e.g., an INT instruction referencing a\nnot-present gate.\n\nAn operating system typically uses the \"segment not present\" exception to\nimplement virtual memory at the segment level. A not-present indication in a\ngate descriptor, however, usually does not indicate that a segment is not\npresent (because gates do not necessarily correspond to segments).\nNot-present gates may be used by an operating system to trigger exceptions\nof special significance to the operating system.\n\n\n9.8.12  Interrupt 12  Stack Exception\n\nA stack fault occurs in either of two general conditions:\n\n    As a result of a limit violation in any operation that refers to the\n     SS register. This includes stack-oriented instructions such as POP,\n     PUSH, ENTER, and LEAVE, as well as other memory references that\n     implicitly use SS (for example, MOV AX, [BP+6]). ENTER causes this\n     exception when the stack is too small for the indicated local-variable\n     space.\n\n    When attempting to load the SS register with a descriptor that is\n     marked not-present but is otherwise valid. This can occur in a task\n     switch, an interlevel CALL, an interlevel return, an LSS instruction,\n     or a MOV or POP instruction to SS.\n\nWhen the processor detects a stack exception, it pushes an error code onto\nthe stack of the exception handler. If the exception is due to a not-present\nstack segment or to overflow of the new stack during an interlevel CALL, the\nerror code contains a selector to the segment in question (the exception\nhandler can test the present bit in the descriptor to determine which\nexception occurred); otherwise the error code is zero.\n\nAn instruction that causes this fault is restartable in all cases. The\nreturn pointer pushed onto the exception handler's stack points to the\ninstruction that needs to be restarted. This instruction is usually the one\nthat caused the exception; however, in the case of a stack exception due to\nloading of a not-present stack-segment descriptor during a task switch, the\nindicated instruction is the first instruction of the new task.\n\nWhen a stack fault occurs during a task switch, the segment registers may\nnot be usable for referencing memory. During a task switch, the selector\nvalues are loaded before the descriptors are checked. If a stack fault is\ndiscovered, the remaining segment registers have not been checked and\ntherefore may not be usable for referencing memory. The stack fault handler\nshould not rely on being able to use the values found in CS, SS, DS, ES,\nFS, and GS without causing another exception. The exception handler should\ncheck all segment registers before trying to resume the new task; otherwise,\ngeneral protection faults may result later under conditions that make\ndiagnosis more difficult.\n\n\n9.8.13  Interrupt 13  General Protection Exception\n\nAll protection violations that do not cause another exception cause a\ngeneral protection exception. This includes (but is not limited to):\n\n  1.  Exceeding segment limit when using CS, DS, ES, FS, or GS\n\n  2.  Exceeding segment limit when referencing a descriptor table\n\n  3.  Transferring control to a segment that is not executable\n\n  4.  Writing into a read-only data segment or into a code segment\n\n  5.  Reading from an execute-only segment\n\n  6.  Loading the SS register with a read-only descriptor (unless the \n      selector comes from the TSS during a task switch, in which case a TSS \n      exception occurs\n\n  7.  Loading SS, DS, ES, FS, or GS with the descriptor of a system segment\n\n  8.  Loading DS, ES, FS, or GS with the descriptor of an executable \n      segment that is not also readable\n\n  9.  Loading SS with the descriptor of an executable segment\n\n  10. Accessing memory via DS, ES, FS, or GS when the segment register\n      contains a null selector\n\n  11. Switching to a busy task\n\n  12. Violating privilege rules\n\n  13. Loading CR0 with PG=1 and PE=0.\n\n  14. Interrupt or exception via trap or interrupt gate from V86 mode to\n      privilege level other than zero.\n\n  15. Exceeding the instruction length limit of 15 bytes (this can occur\n      only if redundant prefixes are placed before an instruction)\n\nThe general protection exception is a fault. In response to a general\nprotection exception, the processor pushes an error code onto the exception\nhandler's stack. If loading a descriptor causes the exception, the error\ncode contains a selector to the descriptor; otherwise, the error code is\nnull. The source of the selector in an error code may be any of the\nfollowing:\n\n  1.  An operand of the instruction.\n  2.  A selector from a gate that is the operand of the instruction.\n  3.  A selector from a TSS involved in a task switch.\n\n\n9.8.14  Interrupt 14  Page Fault\n\nThis exception occurs when paging is enabled (PG=1) and the processor\ndetects one of the following conditions while translating a linear address\nto a physical address:\n\n    The page-directory or page-table entry needed for the address\n     translation has zero in its present bit.\n\n    The current procedure does not have sufficient privilege to access the\n     indicated page.\n\nThe processor makes available to the page fault handler two items of\ninformation that aid in diagnosing the exception and recovering from it:\n\n    An error code on the stack. The error code for a page fault has a\n     format different from that for other exceptions (see Figure 9-8). The\n     error code tells the exception handler three things:\n\n     1.  Whether the exception was due to a not present page or to an access\n         rights violation.\n\n     2.  Whether the processor was executing at user or supervisor level at\n         the time of the exception.\n\n     3.  Whether the memory access that caused the exception was a read or\n         write.\n\n    CR2 (control register two). The processor stores in CR2 the linear\n     address used in the access that caused the exception (see Figure 9-9).\n     The exception handler can use this address to locate the corresponding\n     page directory and page table entries. If another page fault can occur\n     during execution of the page fault handler, the handler should push CR2\n     onto the stack.\n\n\nFigure 9-8.  Page-Fault Error Code Format\n\n ͻ\n FieldValue                         Description                        \n Ķ\n  U/S   0   The access causing the fault originated when the processor \n            was executing in supervisor mode.                          \n                                                                       \n        1   The access causing the fault originated when the processor \n            was executing in user mode.                                \n                                                                       \n  W/R   0   The access causing the fault was a read.                   \n                                                                       \n        1   The access causing the fault was a write.                  \n                                                                       \n  P     0   The fault was caused by a not-present page.                \n                                                                       \n        1   The fault was caused by a page-level protection violation. \n ͼ\n\n       31                               15             7        3 2 1 0\n      ͻ\n      UW \n      UNDEFINED//P\n      SR \n      ͼ\n\n\n9.8.14.1  Page Fault During Task Switch\n\nThe processor may access any of four segments during a task switch:\n\n  1.  Writes the state of the original task in the TSS of that task.\n\n  2.  Reads the GDT to locate the TSS descriptor of the new task.\n\n  3.  Reads the TSS of the new task to check the types of segment\n      descriptors from the TSS.\n\n  4.  May read the LDT of the new task in order to verify the segment\n      registers stored in the new TSS.\n\nA page fault can result from accessing any of these segments. In the latter\ntwo cases the exception occurs in the context of the new task. The\ninstruction pointer refers to the next instruction of the new task, not to\nthe instruction that caused the task switch. If the design of the operating\nsystem permits page faults to occur during task-switches, the page-fault\nhandler should be invoked via a task gate.\n\n\nFigure 9-9.  CR2 Format\n\n      31               23               15               7              0\n     ͻ\n                                                                        \n                           PAGE FAULT LINEAR ADDRESS                    \n                                                                        \n     ͼ\n\n\n9.8.14.2  Page Fault with Inconsistent Stack Pointer\n\nSpecial care should be taken to ensure that a page fault does not cause the\nprocessor to use an invalid stack pointer (SS:ESP). Software written for\nearlier processors in the 8086 family often uses a pair of instructions to\nchange to a new stack; for example:\n\nMOV SS, AX\nMOV SP, StackTop\n\nWith the 80386, because the second instruction accesses memory, it is\npossible to get a page fault after SS has been changed but before SP has\nreceived the corresponding change. At this point, the two parts of the stack\npointer SS:SP (or, for 32-bit programs, SS:ESP) are inconsistent.\n\nThe processor does not use the inconsistent stack pointer if the handling\nof the page fault causes a stack switch to a well defined stack (i.e., the\nhandler is a task or a more privileged procedure). However, if the page\nfault handler is invoked by a trap or interrupt gate and the page fault\noccurs at the same privilege level as the page fault handler, the processor\nwill attempt to use the stack indicated by the current (invalid) stack\npointer.\n\nIn systems that implement paging and that handle page faults within the\nfaulting task (with trap or interrupt gates), software that executes at the\nsame privilege level as the page fault handler should initialize a new stack\nby using the new LSS instruction rather than an instruction pair shown\nabove. When the page fault handler executes at privilege level zero (the\nnormal case), the scope of the problem is limited to privilege-level zero\ncode, typically the kernel of the operating system.\n\n\n9.8.15  Interrupt 16  Coprocessor Error\n\nThe 80386 reports this exception when it detects a signal from the 80287 or\n80387 on the 80386's ERROR# input pin. The 80386 tests this pin only at the\nbeginning of certain ESC instructions and when it encounters a WAIT\ninstruction while the EM bit of the MSW is zero (no emulation). Refer to\nChapter 11 for more information on the coprocessor interface.\n\n\n9.9  Exception Summary\n\n\nTable 9-6 summarizes the exceptions recognized by the 386.\n\nTable 9-6. Exception Summary\n\n\nDescription               Interrupt   Return Address  Exception     Function That Can Generate\n                          Number      Points to       Type          the Exception\n                                      Faulting\n                                      Instruction\n\nDivide error               0          YES             FAULT         DIV, IDIV\nDebug exceptions           1          \nSome debug exceptions are traps and some are faults.  The exception\nhandler can determine which has occurred by examining DR6.  (Refer to\nChapter 12.)               \nSome debug exceptions are traps and some are faults.  The exception\nhandler can determine which has occurred by examining DR6.  (Refer to\nChapter 12.)             Any instruction\nBreakpoint                 3          NO              TRAP          One-byte INT 3\nOverflow                   4          NO              TRAP          INTO\nBounds check               5          YES             FAULT         BOUND\nInvalid opcode             6          YES             FAULT         Any illegal instruction\nCoprocessor not available  7          YES             FAULT         ESC, WAIT\nDouble fault               8          YES             ABORT         Any instruction that can\n                                                                    generate an exception\nCoprocessor Segment\nOverrun                    9          NO              ABORT         Any operand of an ESC\n                                                                    instruction that wraps around\n                                                                    the end of a segment.\nInvalid TSS               10          YES             FAULT\nAn invalid-TSS fault is not restartable if it occurs during the\nprocessing of an external interrupt.        JMP, CALL, IRET, any interrupt\nSegment not present       11          YES             FAULT         Any segment-register modifier\nStack exception           12          YES             FAULT         Any memory reference thru SS\nGeneral Protection        13          YES             FAULT/ABORT\nAll GP faults are restartable. If the fault occurs while attempting to\nvector to the handler for an external interrupt, the interrupted program is\nrestartable, but the interrupt may be lost.  Any memory reference or code\n                                                                    fetch\nPage fault                14          YES             FAULT         Any memory reference or code\n                                                                    fetch\nCoprocessor error         16          YES             FAULT\nCoprocessor errors are reported as a fault on the first ESC or WAIT\ninstruction executed after the ESC instruction that caused the error.        ESC, WAIT\nTwo-byte SW Interrupt     0-255       NO              TRAP          INT n\n\n\n9.10  Error Code Summary\n\nTable 9-7 summarizes the error information that is available with each\nexception.\n\n\nTable 9-7. Error-Code Summary\n\nDescription                       Interrupt     Error Code\n                                  Number\n\nDivide error                       0            No\nDebug exceptions                   1            No\nBreakpoint                         3            No\nOverflow                           4            No\nBounds check                       5            No\nInvalid opcode                     6            No\nCoprocessor not available          7            No\nSystem error                       8            Yes (always 0)\nCoprocessor Segment Overrun        9            No\nInvalid TSS                       10            Yes\nSegment not present               11            Yes\nStack exception                   12            Yes\nGeneral protection fault          13            Yes\nPage fault                        14            Yes\nCoprocessor error                 16            No\nTwo-byte SW interrupt             0-255         No\n\n\nChapter 10  Initialization\n\n\n\nAfter a signal on the RESET pin, certain registers of the 80386 are set to\npredefined values. These values are adequate to enable execution of a\nbootstrap program, but additional initialization must be performed by\nsoftware before all the features of the processor can be utilized.\n\n\n10.1  Processor State After Reset\n\nThe contents of EAX depend upon the results of the power-up self test. The\nself-test may be requested externally by assertion of BUSY# at the end of\nRESET. The EAX register holds zero if the 80386 passed the test. A nonzero\nvalue in EAX after self-test indicates that the particular 80386 unit is\nfaulty. If the self-test is not requested, the contents of EAX after RESET\nis undefined.\n\nDX holds a component identifier and revision number after RESET as Figure\n10-1 illustrates. DH contains 3, which indicates an 80386 component. DL\ncontains a unique identifier of the revision level.\n\nControl register zero (CR0) contains the values shown in Figure 10-2. The\nET bit of CR0 is set if an 80387 is present in the configuration (according\nto the state of the ERROR# pin after RESET). If ET is reset, the\nconfiguration either contains an 80287 or does not contain a coprocessor. A\nsoftware test is required to distinguish between these latter two\npossibilities.\n\nThe remaining registers and flags are set as follows:\n\n   EFLAGS             =00000002H\n   IP                 =0000FFF0H\n   CS selector        =000H\n   DS selector        =0000H\n   ES selector        =0000H\n   SS selector        =0000H\n   FS selector        =0000H\n   GS selector        =0000H\n   IDTR:\n              base    =0\n              limit   =03FFH\n\nAll registers not mentioned above are undefined.\n\nThese settings imply that the processor begins in real-address mode with\ninterrupts disabled.\n\n\nFigure 10-1.  Contents of EDX after RESET\n\n                                 EDX REGISTER\n\n      31               23               15               7              0\n     ͻ\n            DH             DL        \n     UNDEFINED   DEVICE ID      STEPPING ID   \n            3           (UNIQUE)     \n     ͼ\n\n\nFigure 10-2.  Initial Contents of CR0\n\n                               CONTROL REGISTER ZERO\n\n   31                23                15                  7     4 3   1  0\n  ͻ\n  P                                                           ETEMP\n                               UNDEFINED                           \n  G                                                           TSMPE\n  Ѽ\n                                                                    \n   0 - PAGING DISABLED                                 \n                 * - INDICATES PRESENCE OF 80387    \n                 0 - NO TASK SWITCH   \n                 0 - DO NOT MONITOR COPROCESSOR  \n                 0 - COPROCESSOR NOT PRESENT \n                 0 - PROTECTION NOT ENABLED (REAL ADDRESS MODE)\n\n\n10.2  Software Initialization for Real-Address Mode\n\nIn real-address mode a few structures must be initialized before a program\ncan take advantage of all the features available in this mode.\n\n\n10.2.1  Stack\n\nNo instructions that use the stack can be used until the stack-segment\nregister (SS) has been loaded. SS must point to an area in RAM.\n\n\n10.2.2  Interrupt Table\n\nThe initial state of the 80386 leaves interrupts disabled; however, the\nprocessor will still attempt to access the interrupt table if an exception\nor nonmaskable interrupt (NMI) occurs. Initialization software should take\none of the following actions:\n\n    Change the limit value in the IDTR to zero. This will cause a shutdown\n     if an exception or nonmaskable interrupt occurs. (Refer to the 80386\n     Hardware Reference Manual to see how shutdown is signalled externally.)\n\n    Put pointers to valid interrupt handlers in all positions of the\n     interrupt table that might be used by exceptions or interrupts.\n\n    Change the IDTR to point to a valid interrupt table.\n\n\n10.2.3  First Instructions\n\nAfter RESET, address lines A{31-20} are automatically asserted for\ninstruction fetches. This fact, together with the initial values of CS:IP,\ncauses instruction execution to begin at physical address FFFFFFF0H. Near\n(intrasegment) forms of control transfer instructions may be used to pass\ncontrol to other addresses in the upper 64K bytes of the address space. The\nfirst far (intersegment) JMP or CALL instruction causes A{31-20} to drop\nlow, and the 80386 continues executing instructions in the lower one\nmegabyte of physical memory. This automatic assertion of address lines\nA{31-20} allows systems designers to use a ROM at the high end of\nthe address space to initialize the system.\n\n\n10.3  Switching to Protected Mode\n\nSetting the PE bit of the MSW in CR0 causes the 80386 to begin executing in\nprotected mode. The current privilege level (CPL) starts at zero. The\nsegment registers continue to point to the same linear addresses as in real\naddress mode (in real address mode, linear addresses are the same physical\naddresses).\n\nImmediately after setting the PE flag, the initialization code must flush\nthe processor's instruction prefetch queue by executing a JMP instruction.\nThe 80386 fetches and decodes instructions and addresses before they are\nused; however, after a change into protected mode, the prefetched\ninstruction information (which pertains to real-address mode) is no longer\nvalid. A JMP forces the processor to discard the invalid information.\n\n\n10.4  Software Initialization for Protected Mode\n\nMost of the initialization needed for protected mode can be done either\nbefore or after switching to protected mode. If done in protected mode,\nhowever, the initialization procedures must not use protected-mode features\nthat are not yet initialized.\n\n\n10.4.1  Interrupt Descriptor Table\n\nThe IDTR may be loaded in either real-address or protected mode. However,\nthe format of the interrupt table for protected mode is different than that\nfor real-address mode. It is not possible to change to protected mode and\nchange interrupt table formats at the same time; therefore, it is inevitable\nthat, if IDTR selects an interrupt table, it will have the wrong format at\nsome time. An interrupt or exception that occurs at this time will have\nunpredictable results. To avoid this unpredictability, interrupts should\nremain disabled until interrupt handlers are in place and a valid IDT has\nbeen created in protected mode.\n\n\n10.4.2  Stack\n\nThe SS register may be loaded in either real-address mode or protected\nmode. If loaded in real-address mode, SS continues to point to the same\nlinear base-address after the switch to protected mode.\n\n\n10.4.3  Global Descriptor Table\n\nBefore any segment register is changed in protected mode, the GDT register\nmust point to a valid GDT. Initialization of the GDT and GDTR may be done in\nreal-address mode. The GDT (as well as LDTs) should reside in RAM, because\nthe processor modifies the accessed bit of descriptors.\n\n\n10.4.4  Page Tables\n\nPage tables and the PDBR in CR3 can be initialized in either real-address\nmode or in protected mode; however, the paging enabled (PG) bit of CR0\ncannot be set until the processor is in protected mode. PG may be set\nsimultaneously with PE, or later. When PG is set, the PDBR in CR3 should\nalready be initialized with a physical address that points to a valid page\ndirectory. The initialization procedure should adopt one of the following\nstrategies to ensure consistent addressing before and after paging is\nenabled:\n\n    The page that is currently being executed should map to the same\n     physical addresses both before and after PG is set.\n\n    A JMP instruction should immediately follow the setting of PG.\n\n\n10.4.5  First Task\n\nThe initialization procedure can run awhile in protected mode without\ninitializing the task register; however, before the first task switch, the\nfollowing conditions must prevail:\n\n    There must be a valid task state segment (TSS) for the new task. The\n     stack pointers in the TSS for privilege levels numerically less than or\n     equal to the initial CPL must point to valid stack segments.\n\n    The task register must point to an area in which to save the current\n     task state. After the first task switch, the information dumped in this\n     area is not needed, and the area can be used for other purposes.\n\n\n10.5  Initialization Example\n\n$TITLE ('Initial Task')\n\n    NAME    INIT\n\ninit_stack  SEGMENT RW\n            DW  20  DUP(?)\ntos         LABEL   WORD\ninit_stack  ENDS\n\ninit_data   SEGMENT RW PUBLIC\n            DW  20  DUP(?)\ninit_data   ENDS\n\ninit_code   SEGMENT ER PUBLIC\n\nASSUME      DS:init_data\n\n    nop\n    nop\n    nop\ninit_start:\n                                    ; set up stack\n    mov ax, init_stack\n    mov ss, ax\n    mov esp, offset tos\n\n    mov a1,1\nblink:\n    xor a1,1\n    out 0e4h,a1\n    mov cx,3FFFh\nhere:\n    dec cx\n    jnz here\n\n    jmp SHORT blink\n\n    hlt\ninit_code   ends\n\n    END init_start, SS:init_stack, DS:init_data\n\n$TITLE('Protected Mode Transition -- 386 initialization')\nNAME  RESET\n\n;*****************************************************************\n; Upon reset the 386 starts executing at address 0FFFFFFF0H.  The\n; upper 12 address bits remain high until a FAR call or jump is\n; executed.\n;\n; Assume the following:\n;\n;\n; -  a short jump at address 0FFFFFFF0H (placed there by the\n;    system builder) causes execution to begin at START in segment\n;    RESET_CODE.\n;\n;\n; -  segment RESET_CODE is based at physical address 0FFFF0000H,\n;    i.e.   at the start of the last  64K in the 4G address space.\n;    Note that  this is the base of the CS register at reset.  If\n;    you locate ROMcode above  this  address,  you  will  need  to\n;    figure out an adjustment factor to address things within this\n;    segment.\n;\n;*****************************************************************\n$EJECT ;\n\n; Define addresses to locate GDT and IDT in RAM.\n; These addresses are also used in the BLD386 file that defines\n; the GDT and IDT. If you change these addresses, make sure you\n; change the base addresses specified in the build file.\n\nGDTbase         EQU    00001000H   ; physical address for GDT base\nIDTbase         EQU    00000400H   ; physical address for IDT base\n\nPUBLIC     GDT_EPROM\nPUBLIC     IDT_EPROM\nPUBLIC     START\n\nDUMMY      segment rw      ; ONLY for ASM386 main module stack init\n           DW 0\nDUMMY   ends\n\n;*****************************************************************\n;\n; Note: RESET CODE must be USEl6 because the 386 initally executes\n;       in real mode.\n;\n\nRESET_CODE segment er PUBLIC    USE16\n\nASSUME DS:nothing, ES:nothing\n\n;\n; 386 Descriptor template\n\nDESC       STRUC\n    lim_0_15    DW  0              ; limit bits (0..15)\n    bas_0_15    DW  0              ; base bits (0..15)\n    bas_16_23   DB  0              ; base bits (16..23)\n    access      DB  0              ; access byte\n    gran        DB  0              ; granularity byte\n    bas_24_31   DB  0              ; base bits (24..31)\nDESC       ENDS\n\n; The following is the layout of the real GDT created by BLD386.\n; It is located in EPROM and will be copied to RAM.\n;\n; GDT[O]      ...  NULL\n; GDT[1]      ...  Alias for RAM GDT\n; GDT[2]      ...  Alias for RAM IDT\n; GDT[2]      ...  initial task TSS\n; GDT[3]      ...  initial task TSS alias\n; GDT[4]      ...  initial task LDT\n; GDT[5]      ...  initial task LDT alias\n\n;\n; define entries in GDT and IDT.\n\nGDT_ENTRIES    EQU    8\nIDT_ENTRIES    EQU    32\n\n; define some constants to index into the real GDT\n\nGDT_ALIAS      EQU    1*SIZE DESC\nIDT_ALIAS      EQU    2*SIZE DESC\nINIT_TSS       EQU    3*SIZE DESC\nINIT_TSS_A     EQU    4*SIZE DESC\nINIT_LDT       EQU    5*SIZE DESC\nINIT_LDT_A     EQU    6*SIZE DESC\n\n;\n; location of alias in INIT_LDT\n\nINIT_LDT_ALIAS    EQU    1*SIZE DESC\n\n;\n; access rights byte for DATA and TSS descriptors\n\nDS_ACCESS   EQU   010010010B\nTSS_ACCESS  EQU   010001001B\n\n\n;\n; This temporary GDT will be used to set up the real GDT in RAM.\n\nTemp_GDT    LABEL   BYTE        ; tag for begin of scratch GDT\n\nNULL_DES    DESC <>             ; NULL descriptor\n\n                                ; 32-Gigabyte data segment based at 0\nFLAT_DES    DESC <0FFFFH,0,0,92h,0CFh,0>\n\nGDT_eprom     DP    ?           ; Builder places GDT address and limit\n                                ; in this 6 byte area.\n\nIDT_eprom     DP    ?           ; Builder places IDT address and limit\n                                ; in this 6 byte area.\n\n;\n; Prepare operand for loadings GDTR and LDTR.\n\n\nTGDT_pword     LABEL  PWORD                 ; for temp GDT\n        DW     end_Temp_GDT_Temp_GDT -1\n        DD     0\n\nGDT_pword      LABEL  PWORD                 ; for GDT in RAM\n        DW     GDT_ENTRIES * SIZE DESC -1\n        DD     GDTbase\n\nIDT_pword      LABEL   PWORD                ; for IDT in RAM\n        DW     IDT_ENTRIES * SIZE DESC -1\n        DD     IDTbase\n\n\nend_Temp_GDT   LABEL   BYTE\n\n;\n; Define equates for addressing convenience.\n\nGDT_DES_FLAT        EQU DS:GDT_ALIAS +GDTbase\nIDT_DES_FLAT        EQU DS:IDT_ALIAS +GDTbase\n\nINIT_TSS_A_OFFSET   EQU DS:INIT_TSS_A\nINIT_TSS_OFFSET     EQU DS:INIT_TSS\n\nINIT_LDT_A_OFFSET   EQU DS:INIT_LDT_A\nINIT_LDT_OFFSET     EQU DS:INIT_LDT\n\n\n; define pointer for first task switch\n\nENTRY POINTER LABEL DWORD\n             DW 0, INIT_TSS\n\n;******************************************************************\n;\n;   Jump from reset vector to here.\n\nSTART:\n\n    CLI                ;disable interrupts\n    CLD                ;clear direction flag\n\n    LIDT    NULL_des   ;force shutdown on errors\n\n;\n;   move scratch GDT to RAM at physical 0\n\n    XOR DI,DI\n    MOV ES,DI           ;point ES:DI to physical location 0\n\n\n    MOV SI,OFFSET Temp_GDT\n    MOV CX,end_Temp_GDT-Temp_GDT        ;set byte count\n    INC CX\n;\n;   move table\n\n    REP MOVS BYTE PTR ES:[DI],BYTE PTR CS:[SI]\n\n    LGDT    tGDT_pword                ;load GDTR for Temp. GDT\n                                      ;(located at 0)\n\n;   switch to protected mode\n\n    MOV EAX,CR0                       ;get current CRO\n    MOV EAX,1                         ;set PE bit\n    MOV CRO,EAX                       ;begin protected mode\n;\n;   clear prefetch queue\n\n    JMP SHORT flush\nflush:\n\n; set DS,ES,SS to address flat linear space (0 ... 4GB)\n\n    MOV BX,FLAT_DES-Temp_GDT\n    MOV US,BX\n    MOV ES,BX\n    MOV SS,BX\n;\n; initialize stack pointer to some (arbitrary) RAM location\n\n    MOV ESP, OFFSET end_Temp_GDT\n\n;\n; copy eprom GDT to RAM\n\n    MOV ESI,DWORD PTR GDT_eprom +2 ; get base of eprom GDT\n                                   ; (put here by builder).\n\n    MOV EDI,GDTbase                ; point ES:EDI to GDT base in RAM.\n\n    MOV CX,WORD PTR gdt_eprom +0   ; limit of eprom GDT\n    INC CX\n    SHR CX,1                       ; easier to move words\n    CLD\n    REP MOVS   WORD PTR ES:[EDI],WORD PTR DS:[ESI]\n\n;\n; copy eprom IDT to RAM\n;\n    MOV ESI,DWORD PTR IDT_eprom +2 ; get base of eprom IDT\n                                   ; (put here by builder)\n\n    MOV EDI,IDTbase                ; point ES:EDI to IDT base in RAM.\n\n    MOV CX,WORD PTR idt_eprom +0   ; limit of eprom IDT\n    INC CX\n    SHR CX,1\n    CLD\n    REP MOVS   WORD PTR ES:[EDI],WORD PTR DS:[ESI]\n\n; switch to RAM GDT and IDT\n;\n    LIDT IDT_pword\n    LGDT GDT_pword\n\n;\n    MOV BX,GDT_ALIAS               ; point DS to GDT alias\n    MOV DS,BX\n;\n; copy eprom TSS to RAM\n;\n    MOV BX,INIT_TSS_A              ; INIT TSS A descriptor base\n                                   ; has RAM location of INIT TSS.\n\n    MOV ES,BX                      ; ES points to TSS in RAM\n\n    MOV BX,INIT_TSS                ; get inital task selector\n    LAR DX,BX                      ; save access byte\n    MOV [BX].access,DS_ACCESS      ; set access as data segment\n    MOV FS,BX                      ; FS points to eprom TSS\n\n    XOR si,si                      ; FS:si points to eprom TSS\n    XOR di,di                      ; ES:di points to RAM TSS\n\n    MOV CX,[BX].lim_0_15           ; get count to move\n    INC CX\n\n;\n; move INIT_TSS to RAM.\n\n    REP MOVS BYTE PTR ES:[di],BYTE PTR FS:[si]\n\n    MOV [BX].access,DH             ; restore access byte\n\n;\n; change base of INIT TSS descriptor to point to RAM.\n\n    MOV AX,INIT_TSS_A_OFFSET.bas_0_15\n    MOV INIT_TSS_OFFSET.bas_0_15,AX\n    MOV AL,INIT_TSS_A_OFFSET.bas_16_23\n    MOV INIT_TSS_OFFSET.bas_16_23,AL\n    MOV AL,INIT_TSS_A_OFFSET.bas_24_31\n    MOV INIT_TSS_OFFSET.bas_24_31,AL\n\n;\n; change INIT TSS A to form a save area for TSS on first task\n; switch. Use RAM at location 0.\n\n    MOV BX,INIT_TSS_A\n    MOV WORD PTR [BX].bas_0_15,0\n    MOV [BX].bas_16_23,0\n    MOV [BX].bas_24_31,0\n    MOV [BX].access,TSS_ACCESS\n    MOV [BX].gran,O\n    LTR BX                         ; defines save area for TSS\n\n;\n; copy eprom LDT to RAM\n\n    MOV BX,INIT_LDT_A              ; INIT_LDT_A descriptor has\n                                   ; base address in RAM for INIT_LDT.\n\n    MOV ES,BX                      ; ES points LDT location in RAM.\n\n    MOV AH,[BX].bas_24_31\n    MOV AL,[BX].bas_16_23\n    SHL EAX,16\n    MOV AX,[BX].bas_0_15           ; save INIT_LDT base (ram) in EAX\n\n    MOV BX,INIT_LDT                ; get inital LDT selector\n    LAR DX,BX                      ; save access rights\n    MOV [BX].access,DS_ACCESS      ; set access as data segment\n    MOV FS,BX                      ; FS points to eprom LDT\n\n    XOR si,si                      ; FS:SI points to eprom LDT\n    XOR di,di                      ; ES:DI points to RAM LDT\n\n    MOV CX,[BX].lim_0_15           ; get count to move\n    INC CX\n;\n; move initial LDT to RAM\n\n    REP MOVS BYTE PTR ES:[di],BYTE PTR FS:[si]\n\n    MOV [BX].access,DH             ; restore access rights in\n                                   ; INIT_LDT descriptor\n\n;\n; change base of alias (of INIT_LDT) to point to location in RAM.\n\n    MOV ES:[INIT_LDT_ALIAS].bas_0_15,AX\n    SHR EAX,16\n    MOV ES:[INIT_LDT_ALIAS].bas_16_23,AL\n    MOV ES:[INIT_LDT_ALIAS].bas_24_31,AH\n\n;\n; now set the base value in INIT_LDT descriptor\n\n    MOV AX,INIT_LDT_A_OFFSET.bas_0_15\n    MOV INIT_LDT_OFFSET.bas_0_15,AX\n    MOV AL,INIT_LDT_A_OFFSET.bas_16_23\n    MOV INIT_LDT_OFFSET.bas_16_23,AL\n    MOV AL,INIT_LDT_A_OFFSET.bas_24_31\n    MOV INIT_LDT_OFFSET.bas_24_31,AL\n\n;\n; Now GDT, IDT, initial TSS and initial LDT are all set up.\n;\n; Start the first task!\n'\n   JMP ENTRY_POINTER\n\nRESET_CODE ends\n   END START, SS:DUMMY,DS:DUMMY\n\n\n10.6  TLB Testing\n\nThe 80386 provides a mechanism for testing the Translation Lookaside Buffer\n(TLB), the cache used for translating linear addresses to physical\naddresses. Although failure of the TLB hardware is extremely unlikely, users\nmay wish to include TLB confidence tests among other power-up confidence\ntests for the 80386.\n\n\nNOTE\n  This TLB testing mechanism is unique to the 80386 and may not be\n  continued in the same way in future processors. Sortware that uses\n  this mechanism may be incompatible with future processors.\n\n\nWhen testing the TLB it is recommended that paging be turned off (PG=0 in\nCR0) to avoid interference with the test data being written to the TLB.\n\n\n10.6.1  Structure of the TLB\n\nThe TLB is a four-way set-associative memory. Figure 10-3 illustrates the\nstructure of the TLB. There are four sets of eight entries each. Each entry\nconsists of a tag and data. Tags are 24-bits wide. They contain the\nhigh-order 20 bits of the linear address, the valid bit, and three attribute\nbits. The data portion of each entry contains the high-order 20 bits of the\nphysical address.\n\n\n10.6.2  Test Registers\n\nTwo test registers, shown in Figure 10-4, are provided for the purpose of\ntesting. TR6 is the test command register, and TR7 is the test data\nregister. These registers are accessed by variants of the MOV\ninstruction. A test register may be either the source operand or destination\noperand. The MOV instructions are defined in both real-address mode and\nprotected mode. The test registers are privileged resources; in protected\nmode, the MOV instructions that access them can only be executed at\nprivilege level 0. An attempt to read or write the test registers when\nexecuting at any other privilege level causes a general\nprotection exception.\n\nThe test command register (TR6) contains a command and an address tag to\nuse in performing the command:\n\nC         This is the command bit. There are two TLB testing commands:\n          write entries into the TLB, and perform TLB lookups. To cause an\n          immediate write into the TLB entry, move a doubleword into TR6\n          that contains a 0 in this bit. To cause an immediate TLB lookup,\n          move a doubleword into TR6 that contains a 1 in this bit.\n\nLinear    On a TLB write, a TLB entry is allocated to this linear address;\nAddress   the rest of that TLB entry is set per the value of TR7 and the\n          value just written into TR6. On a TLB lookup, the TLB is\n          interrogated per this value; if one and only one TLB entry\n          matches, the rest of the fields of TR6 and TR7 are set from the\n          matching TLB entry.\n\nV         The valid bit for this TLB entry. The TLB uses the valid bit to\n          identify entries that contain valid data. Entries of the TLB\n          that have not been assigned values have zero in the valid bit.\n          All valid bits can be cleared by writing to CR3.\n\nD, D#     The dirty bit (and its complement) for/from the TLB entry.\n\nU, U#     The U/S bit (and its complement) for/from the TLB entry.\n\nW, W#     The R/W bit (and its complement) for/from the TLB entry.\n\n          The meaning of these pairs of bits is given by Table 10-1,\n          where X represents D, U, or W.\n\nThe test data register (TR7) holds data read from or data to be written to\nthe TLB.\n\nPhysical  This is the data field of the TLB. On a write to the TLB, the\nAddress   TLB entry allocated to the linear address in TR6 is set to this\n          value. On a TLB lookup, if HT is set, the data field (physical\n          address) from the TLB is read out to this field. If HT is not\n          set, this field is undefined.\n\nHT        For a TLB lookup, the HT bit indicates whether the lookup was a\n          hit (HT \u001b 1) or a miss (HT \u001b 0). For a TLB write, HT must be set\n          to 1.\n\nREP       For a TLB write, selects which of four associative blocks of the\n          TLB is to be written. For a TLB read, if HT is set, REP reports\n          in which of the four associative blocks the tag was found; if HT\n          is not set, REP is undefined.\n\n\nTable 10-1. Meaning of D, U, and W Bit Pairs\n\nX     X#      Effect during        Value of bit X\n              TLB Lookup           after TLB Write\n\n0     0       (undefined)          (undefined)\n0     1       Match if X=0         Bit X becomes 0\n1     0       Match if X=1         Bit X becomes 1\n1     1       (undefined)          (undefined)\n\n\nFigure 10-3.  TLB Structure\n\n                                   ͻ\n                                  7       TAG             DATA      \n                                   ͹\n                                   \u0007                 \u0007                \u0007\n                           \u0007                 \u0007                \u0007\n                        SET 11    \u0007                 \u0007                \u0007\n                               ͹\n                                1       TAG             DATA      \n                                 ͹\n                                0       TAG             DATA      \n                                 ͼ\n                     \n                                 ͻ\n                                7       TAG             DATA      \n                                 ͹\n                                 \u0007                 \u0007                \u0007\n                               \u0007                 \u0007                \u0007\n                        SET 10    \u0007                 \u0007                \u0007\n                               ͹\n                                1       TAG             DATA      \n       D                       ͹\n       A                      0       TAG             DATA      \n       T                 ͼ\n       A             \n         Ŀ                ͻ\n       B                      7       TAG             DATA      \n       U                       ͹\n       S                       \u0007                 \u0007                \u0007\n                               \u0007                 \u0007                \u0007\n                        SET 01    \u0007                 \u0007                \u0007\n                               ͹\n                                1       TAG             DATA      \n                                 ͹\n                                0       TAG             DATA      \n                                 ͼ\n                     \n                                 ͻ\n                                7       TAG             DATA      \n                                 ͹\n                                 \u0007                 \u0007                \u0007\n                               \u0007                 \u0007                \u0007\n                        SET 00    \u0007                 \u0007                \u0007\n                           ͹\n                                  1       TAG             DATA      \n                                   ͹\n                                  0       TAG             DATA      \n                                   ͼ\n\n\nFigure 10-4.  Test Registers\n\n      31                23              15   11      7             0\n     ͻ\n                                                        H      \n                PHYSICAL ADDRESS           0 0 0 0 0 0 0 REP0 0 TR7\n                                                        T      \n     Ķ\n                                             D U W        \n                 LINEAR ADDRESS            VD U   0 0 0 0C TR8\n                                             # # #        \n     ͼ\n\n     NOTE: 0 INDICATES INTEL RESERVED. NO NOT DEFINE\n\n\n10.6.3  Test Operations\n\nTo write a TLB entry:\n\n  1.  Move a doubleword to TR7 that contains the desired physical address,\n      HT, and REP values. HT must contain 1. REP must point to the\n      associative block in which to place the entry.\n\n  2.  Move a doubleword to TR6 that contains the appropriate linear\n      address, and values for V, D, U, and W. Be sure C=0 for \"write\"\n      command.\n\nBe careful not to write duplicate tags; the results of doing so are\nundefined.\n\nTo look up (read) a TLB entry:\n\n  1.  Move a doubleword to TR6 that contains the appropriate linear address\n      and attributes. Be sure C=1 for \"lookup\" command.\n\n  2.  Store TR7. If the HT bit in TR7 indicates a hit, then the other\n      values reveal the TLB contents. If HT indicates a miss, then the other\n      values in TR7 are indeterminate.\n\nFor the purposes of testing, the V bit functions as another bit of\naddresss.  The V bit for a lookup request should usually be set, so that\nuninitialized tags do not match. Lookups with V=0 are unpredictable if any\ntags are uninitialized.\n\n\nChapter 11  Coprocessing and Multiprocessing\n\n\n\nThe 80386 has two levels of support for multiple parallel processing units:\n\n    A highly specialized interface for very closely coupled processors of\n     a type known as coprocessors.\n\n    A more general interface for more loosely coupled processors of\n     unspecified type.\n\n\n11.1  Coprocessing\n\nThe components of the coprocessor interface include:\n\n    ET bit of control register zero (CR0)\n    The EM, and MP bits of CR0\n    The ESC instructions\n    The WAIT instruction\n    The TS bit of CR0\n    Exceptions\n\n\n11.1.1  Coprocessor Identification\n\nThe 80386 is designed to operate with either an 80287 or 80387 math\ncoprocessor. The ET bit of CR0 indicates which type of coprocessor is\npresent. ET is set automatically by the 80386 after RESET according to the\nlevel detected on the ERROR# input. If desired, ET may also be set or reset\nby loading CR0 with a MOV instruction. If ET is set, the 80386 uses the\n32-bit protocol of the 80387; if reset, the 80386 uses the 16-bit protocol\nof the 80287.\n\n\n11.1.2  ESC and WAIT Instructions\n\nThe 80386 interprets the pattern 11011B in the first five bits of an\ninstruction as an opcode intended for a coprocessor. Instructions thus\nmarked are called ESCAPE or ESC instructions. The CPU performs the following\nfunctions upon encountering an ESC instruction before sending the\ninstruction to the coprocessor:\n\n    Tests the emulation mode (EM) flag to determine whether coprocessor\n     functions are being emulated by software.\n\n    Tests the TS flag to determine whether there has been a context change\n     since the last ESC instruction.\n\n    For some ESC instructions, tests the ERROR# pin to determine whether\n     the coprocessor detected an error in the previous ESC instruction.\n\nThe WAIT instruction is not an ESC instruction, but WAIT causes the CPU to\nperform some of the same tests that it performs upon encountering an ESC\ninstruction. The processor performs the following actions for a WAIT\ninstruction:\n\n    Waits until the coprocessor no longer asserts the BUSY# pin.\n\n    Tests the ERROR# pin (after BUSY# goes inactive). If ERROR# is active,\n     the 80386 signals exception 16, which indicates that the coprocessor\n     encountered an error in the previous ESC instruction.\n\n    WAIT can therefore be used to cause exception 16 if an error is\n     pending from a previous ESC instruction. Note that, if no coprocessor\n     is present, the ERROR# and BUSY# pins should be tied inactive to\n     prevent WAIT from waiting forever or causing spurious exceptions.\n\n\n11.1.3  EM and MP Flags\n\nThe EM and MP flags of CR0 control how the processor reacts to coprocessor\ninstructions.\n\nThe EM bit indicates whether coprocessor functions are to be emulated. If\nthe processor finds EM set when executing an ESC instruction, it signals\nexception 7, giving the exception handler an opportunity to emulate the ESC\ninstruction.\n\nThe MP (monitor coprocessor) bit indicates whether a coprocessor is\nactually attached. The MP flag controls the function of the WAIT\ninstruction. If, when executing a WAIT instruction, the CPU finds MP set,\nthen it tests the TS flag; it does not otherwise test TS during a WAIT\ninstruction. If it finds TS set under these conditions, the CPU signals\nexception 7.\n\nThe EM and MP flags can be changed with the aid of a MOV instruction using\nCR0 as the destination operand and read with the aid of a MOV instruction\nwith CR0 as the source operand. These forms of the MOV instruction can be\nexecuted only at privilege level zero.\n\n\n11.1.4  The Task-Switched Flag\n\nThe TS bit of CR0 helps to determine when the context of the coprocessor\ndoes not match that of the task being executed by the 80386 CPU. The 80386\nsets TS each time it performs a task switch (whether triggered by software\nor by hardware interrupt). If, when interpreting one of the ESC\ninstructions, the CPU finds TS already set, it causes exception 7. The WAIT\ninstruction also causes exception 7 if both TS and MP are set. Operating\nsystems can use this exception to switch the context of the coprocessor to\ncorrespond to the current task. Refer to the 80386 System Software Writer's\nGuide for an example.\n\nThe CLTS instruction (legal only at privilege level zero) resets the TS\nflag.\n\n\n11.1.5  Coprocessor Exceptions\n\nThree exceptions aid in interfacing to a coprocessor: interrupt 7\n(coprocessor not available), interrupt 9 (coprocessor segment overrun), and\ninterrupt 16 (coprocessor error).\n\n\n11.1.5.1  Interrupt 7  Coprocessor Not Available\n\nThis exception occurs in either of two conditions:\n\n  1.  The CPU encounters an ESC instruction and EM is set. In this case,\n      the exception handler should emulate the instruction that caused the\n      exception. TS may also be set.\n\n  2.  The CPU encounters either the WAIT instruction or an ESC instruction\n      when both MP and TS are set. In this case, the exception handler\n      should update the state of the coprocessor, if necessary.\n\n\n11.1.5.2  Interrupt 9  Coprocessor Segment Overrun\n\nThis exception occurs in protected mode under the following conditions:\n\n    An operand of a coprocessor instruction wraps around an addressing\n     limit (0FFFFH for small segments, 0FFFFFFFFH for big segments, zero for\n     expand-down segments). An operand may wrap around an addressing limit\n     when the segment limit is near an addressing limit and the operand is\n     near the largest valid address in the segment. Because of the\n     wrap-around, the beginning and ending addresses of such an operand\n     will be near opposite ends of the segment.\n\n    Both the first byte and the last byte of the operand (considering\n     wrap-around) are at addresses located in the segment and in present and\n     accessible pages.\n\n    The operand spans inaccessible addresses. There are two ways that such\n     an operand may also span inaccessible addresses:\n\n     1.  The segment limit is not equal to the addressing limit (e.g.,\n         addressing limit is FFFFH and segment limit is FFFDH); therefore,\n         the operand will span addresses that are not within the segment\n         (e.g., an 8-byte operand that starts at valid offset FFFC will span\n         addresses FFFC-FFFF and 0000-0003; however, addresses FFFE and FFFF\n         are not valid, because they exceed the limit);\n\n     2.  The operand begins and ends in present and accessible pages but\n         intermediate bytes of the operand fall either in a not-present page\n         or in a page to which the current procedure does not have access\n         rights.\n\nThe address of the failing numerics instruction and data operand may be\nlost; an FSTENV does not return reliable addresses. As with the 80286/80287,\nthe segment overrun exception should be handled by executing an FNINIT\ninstruction (i.e., an FINIT without a preceding WAIT). The return address on\nthe stack does not necessarily point to the failing instruction nor to the\nfollowing instruction. The failing numerics instruction is not restartable.\n\nCase 2 can be avoided by either aligning all segments on page boundaries or\nby not starting them within 108 bytes of the start or end of a page. (The\nmaximum size of a coprocessor operand is 108 bytes.) Case 1 can be avoided\nby making sure that the gap between the last valid offset and the first\nvalid offset of a segment is either no less than 108 bytes or is zero (i.e.,\nthe segment is of full size). If neither software system design constraint\nis acceptable, the exception handler should execute FNINIT and should\nprobably terminate the task.\n\n\n11.1.5.3  Interrupt 16  Coprocessor Error\n\nThe numerics coprocessors can detect six different exception conditions\nduring instruction execution. If the detected exception is not masked by a\nbit in the control word, the coprocessor communicates the fact that an error\noccurred to the CPU by a signal at the ERROR# pin. The CPU causes interrupt\n16 the next time it checks the ERROR# pin, which is only at the beginning of\na subsequent WAIT or certain ESC instructions. If the exception is masked,\nthe numerics coprocessor handles the exception according to on-board logic;\nit does not assert the ERROR# pin in this case.\n\n\n11.2  General Multiprocessing\n\nThe components of the general multiprocessing interface include:\n\n    The LOCK# signal\n\n    The LOCK instruction prefix, which gives programmed control of the\n     LOCK# signal.\n\n    Automatic assertion of the LOCK# signal with implicit memory updates\n     by the processor\n\n\n11.2.1  LOCK and the LOCK# Signal\n\nThe LOCK instruction prefix and its corresponding output signal LOCK# can\nbe used to prevent other bus masters from interrupting a data movement\noperation. LOCK may only be used with the following 80386 instructions when\nthey modify memory. An undefined-opcode exception results from using LOCK\nbefore any instruction other than:\n\n    Bit test and change: BTS, BTR, BTC.\n    Exchange: XCHG.\n    Two-operand arithmetic and logical: ADD, ADC, SUB, SBB, AND, OR, XOR.\n    One-operand arithmetic and logical: INC, DEC, NOT, and NEG.\n\nA locked instruction is only guaranteed to lock the area of memory defined\nby the destination operand, but it may lock a larger memory area. For\nexample, typical 8086 and 80286 configurations lock the entire physical\nmemory space. The area of memory defined by the destination operand is\nguaranteed to be locked against access by a processor executing a locked\ninstruction on exactly the same memory area, i.e., an operand with\nidentical starting address and identical length.\n\nThe integrity of the lock is not affected by the alignment of the memory\nfield. The LOCK signal is asserted for as many bus cycles as necessary to\nupdate the entire operand.\n\n\n11.2.2  Automatic Locking\n\nIn several instances, the processor itself initiates activity on the data\nbus. To help ensure that such activities function correctly in\nmultiprocessor configurations, the processor automatically asserts the LOCK#\nsignal. These instances include:\n\n    Acknowledging interrupts.\n\n     After an interrupt request, the interrupt controller uses the data bus\n     to send the interrupt ID of the interrupt source to the CPU. The CPU\n     asserts LOCK# to ensure that no other data appears on the data bus\n     during this time.\n\n    Setting busy bit of TSS descriptor.\n\n     The processor tests and sets the busy-bit in the type field of the TSS\n     descriptor when switching to a task. To ensure that two different\n     processors cannot simultaneously switch to the same task, the processor\n     asserts LOCK# while testing and setting this bit.\n\n    Loading of descriptors.\n\n     While copying the contents of a descriptor from a descriptor table into\n     a segment register, the processor asserts LOCK# so that the descriptor\n     cannot be modified by another processor while it is being loaded. For\n     this action to be effective, operating-system procedures that update\n     descriptors should adhere to the following steps:\n\n       Use a locked update to the access-rights byte to mark the\n         descriptor not-present.\n\n       Update the fields of the descriptor.  (This may require several\n         memory accesses; therefore, LOCK cannot be used.)\n\n       Use a locked update to the access-rights byte to mark the\n         descriptor present again.\n\n    Updating page-table A and D bits.\n\n     The processor exerts LOCK# while updating the A (accessed) and D \n     (dirty) bits of page-table entries.  Also the processor bypasses the\n     page-table cache and directly updates these bits in memory.\n\n    Executing XCHG instruction.\n\n     The 80386 always asserts LOCK during an XCHG instruction that\n     references memory (even if the LOCK prefix is not used).\n\n\n11.2.3  Cache Considerations\n\nSystems programmers must take care when updating shared data that may also\nbe stored in on-chip registers and caches.  With the 80386, such  shared\ndata includes:\n\n    Descriptors, which may be held in segment registers.\n\n     A change to a descriptor that is shared among processors should be\n     broadcast to all processors.  Segment registers are effectively\n     \"descriptor caches\".  A change to a descriptor will not be utilized by\n     another processor if that processor already has a copy of the old\n     version of the descriptor in a segment register.\n\n    Page tables, which may be held in the page-table cache.\n\n     A change to a page table that is shared among processors should be\n     broadcast to all processors, so that others can flush their page-table\n     caches and reload them with up-to-date page tables from memory.\n\nSystems designers can employ an interprocessor interrupt to handle the\nabove cases. When one processor changes data that may be cached by other\nprocessors, it can send an interrupt signal to all other processors that may\nbe affected by the change. If the interrupt is serviced by an interrupt\ntask, the task switch automatically flushes the segment registers. The task\nswitch also flushes the page-table cache if the PDBR (the contents of CR3)\nof the interrupt task is different from the PDBR of every other task.\n\nIn multiprocessor systems that need a cacheability signal from the CPU, it\nis recommended that physical address pin A31 be used to indicate\ncacheability. Such a system can then possess up to 2 Gbytes of physical\nmemory. The virtual address range available to the programmer is not\naffected by this convention.\n\n\nChapter 12  Debugging\n\n\n\nThe 80386 brings to Intel's line of microprocessors significant advances in\ndebugging power. The single-step exception and breakpoint exception of\nprevious processors are still available in the 80386, but the principal\ndebugging support takes the form of debug registers. The debug registers\nsupport both instruction breakpoints and data breakpoints. Data breakpoints\nare an important innovation that can save hours of debugging time by\npinpointing, for example, exactly when a data structure is being\noverwritten. The breakpoint registers also eliminate the complexities\nassociated with writing a breakpoint instruction into a code segment\n(requires a data-segment alias for the code segment) or a code segment\nshared by multiple tasks (the breakpoint exception can occur in the context\nof any of the tasks). Breakpoints can even be set in code contained in ROM.\n\n\n12.1  Debugging Features of the Architecture\n\nThe features of the 80386 architecture that support debugging include:\n\nReserved debug interrupt vector\n\nPermits processor to automatically invoke a debugger task or procedure when\nan event occurs that is of interest to the debugger.\n\nFour debug address registers\n\nPermit programmers to specify up to four addresses that the CPU will\nautomatically monitor.\n\nDebug control register\n\nAllows programmers to selectively enable various debug conditions\nassociated with the four debug addresses.\n\nDebug status register\n\nHelps debugger identify condition that caused debug exception.\n\nTrap bit of TSS (T-bit)\n\nPermits monitoring of task switches.\n\nResume flag (RF) of flags register\n\nAllows an instruction to be restarted after a debug exception without\nimmediately causing another debug exception due to the same condition.\n\nSingle-step flag (TF)\n\nAllows complete monitoring of program flow by specifying whether the CPU\nshould cause a debug exception with the execution of every instruction.\n\nBreakpoint instruction\n\nPermits debugger intervention at any point in program execution and aids\ndebugging of debugger programs.\n\nReserved interrupt vector for breakpoint exception\n\nPermits processor to automatically invoke a handler task or procedure upon\nencountering a breakpoint instruction.\n\nThese features make it possible to invoke a debugger that is either a\nseparate task or a procedure in the context of the current task. The\ndebugger can be invoked under any of the following kinds of conditions:\n\n    Task switch to a specific task.\n    Execution of the breakpoint instruction.\n    Execution of every instruction.\n    Execution of any instruction at a given address.\n    Read or write of a byte, word, or doubleword at any specified address.\n    Write to a byte, word, or doubleword at any specified address.\n    Attempt to change a debug register.\n\n\n12.2  Debug Registers\n\nSix 80386 registers are used to control debug features. These registers are\naccessed by variants of the MOV instruction. A debug register may be either\nthe source operand or destination operand. The debug registers are\nprivileged resources; the MOV instructions that access them can only be\nexecuted at privilege level zero. An attempt to read or write the debug\nregisters when executing at any other privilege level causes a general\nprotection exception. Figure 12-1 shows the format of the debug registers.\n\n\nFigure 12-1.  Debug Registers\n\n      31              23              15              7             0\n     ͻ\n     LENR/WLENR/WLENR/WLENR/W         GLGLGLGLGL\n                             0 000 0 0           DR7\n      3  3  2  2  1  1  0  0          EE33221100\n     Ķ\n                                    BBB                 BBBB\n     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0     DR6\n                                    TSD                 3210\n     Ķ\n                                                                    \n                                 RESERVED                            DR5\n                                                                    \n     Ķ\n                                                                    \n                                 RESERVED                            DR4\n                                                                    \n     Ķ\n                                                                    \n                      BREAKPOINT 3 LINEAR ADDRESS                    DR3\n                                                                    \n     Ķ\n                                                                    \n                      BREAKPOINT 2 LINEAR ADDRESS                    DR2\n                                                                    \n     Ķ\n                                                                    \n                      BREAKPOINT 1 LINEAR ADDRESS                    DR1\n                                                                    \n     Ķ\n                                                                    \n                      BREAKPOINT 0 LINEAR ADDRESS                    DR0\n                                                                    \n     ͼ\n\n\nNOTE\n      0 MEANS INTEL RESERVED. DO NOT DEFINE.\n\n\n\n12.2.1  Debug Address Registers (DR0-DR3)\n\nEach of these registers contains the linear address associated with one of\nfour breakpoint conditions. Each breakpoint condition is further defined by\nbits in DR7.\n\nThe debug address registers are effective whether or not paging is enabled.\nThe addresses in these registers are linear addresses. If paging is enabled,\nthe linear addresses are translated into physical addresses by the\nprocessor's paging mechanism (as explained in Chapter 5). If paging is not\nenabled, these linear addresses are the same as physical addresses.\n\nNote that when paging is enabled, different tasks may have different\nlinear-to-physical address mappings. When this is the case, an address in a\ndebug address register may be relevant to one task but not to another. For\nthis reason the 80386  has both global and local enable bits in DR7. These\nbits indicate whether a given debug address has a global (all tasks) or\nlocal (current task only) relevance.\n\n\n12.2.2  Debug Control Register (DR7)\n\nThe debug control register shown in Figure 12-1 both helps to define the\ndebug conditions and selectively enables and disables those conditions.\n\nFor each address in registers DR0-DR3, the corresponding fields R/W0\nthrough R/W3 specify the type of action that should cause a breakpoint. The\nprocessor interprets these bits as follows:\n\n   00  Break on instruction execution only\n   01  Break on data writes only\n   10  undefined\n   11  Break on data reads or writes but not instruction fetches\n\nFields LEN0 through LEN3 specify the length of data item to be monitored. A\nlength of 1, 2, or 4 bytes may be specified. The values of the length fields\nare interpreted as follows:\n\n   00  one-byte length\n   01  two-byte length\n   10  undefined\n   11  four-byte length\n\nIf RWn is 00 (instruction execution), then LENn should also be 00. Any other\nlength is undefined.\n\nThe low-order eight bits of DR7 (L0 through L3 and G0 through G3)\nselectively enable the four address breakpoint conditions. There are two\nlevels of enabling: the local (L0 through L3) and global (G0 through G3)\nlevels. The local enable bits are automatically reset by the processor at\nevery task switch to avoid unwanted breakpoint conditions in the new task.\nThe global enable bits are not reset by a task switch; therefore, they can\nbe used for conditions that are global to all tasks.\n\nThe LE and GE bits control the \"exact data breakpoint match\" feature of the\nprocessor. If either LE or GE is set, the processor slows execution so that\ndata breakpoints are reported on the instruction that causes them. It is\nrecommended that one of these bits be set whenever data breakpoints are\narmed. The processor clears LE at a task switch but does not clear GE.\n\n\n12.2.3  Debug Status Register (DR6)\n\nThe debug status register shown in Figure 12-1 permits the debugger to\ndetermine which debug conditions have occurred.\n\nWhen the processor detects an enabled debug exception, it sets the\nlow-order bits of this register (B0 thru B3) before entering the debug\nexception handler. Bn is set if the condition described by DRn, LENn, and\nR/Wn occurs. (Note that the processor sets Bn regardless of whether Gn or\nLn is set. If more than one breakpoint condition occurs at one time and if\nthe breakpoint trap occurs due to an enabled condition other than n, Bn may\nbe set, even though neither Gn nor Ln is set.)\n\nThe BT bit is associated with the T-bit (debug trap bit) of the TSS (refer\nto 7 for the location of the T-bit). The processor sets the BT bit before\nentering the debug handler if a task switch has occurred and the T-bit of\nthe new TSS is set. There is no corresponding bit in DR7 that enables and\ndisables this trap; the T-bit of the TSS is the sole enabling bit.\n\nThe BS bit is associated with the TF (trap flag) bit of the EFLAGS\nregister. The BS bit is set if the debug handler is entered due to the\noccurrence of a single-step exception. The single-step trap is the\nhighest-priority debug exception; therefore, when BS is set, any of the\nother debug status bits may also be set.\n\nThe BD bit is set if the next instruction will read or write one of the\neight debug registers and ICE-386 is also using the debug registers at the\nsame time.\n\nNote that the bits of DR6 are never cleared by the processor. To avoid any\nconfusion in identifying the next debug exception, the debug handler should\nmove zeros to DR6 immediately before returning.\n\n\n12.2.4  Breakpoint Field Recognition\n\nThe linear address and LEN field for each of the four breakpoint conditions\ndefine a range of sequential byte addresses for a data breakpoint. The LEN\nfield permits specification of a one-, two-, or four-byte field. Two-byte\nfields must be aligned on word boundaries (addresses that are multiples of\ntwo) and four-byte fields must be aligned on doubleword boundaries\n(addresses that are multiples of four). These requirements are enforced by\nthe processor; it uses the LEN bits to mask the low-order bits of the\naddresses in the debug address registers. Improperly aligned code or data\nbreakpoint addresses will not yield the expected results.\n\nA data read or write breakpoint is triggered if any of the bytes\nparticipating in a memory access is within the field defined by a breakpoint\naddress register and the corresponding LEN field. Table 12-1 gives some\nexamples of breakpoint fields with memory references that both do and do not\ncause traps.\n\nTo set a data breakpoint for a misaligned field longer than one byte, it\nmay be desirable to put two sets of entries in the breakpoint register such\nthat each entry is properly aligned and the two entries together span the\nlength of the field.\n\nInstruction breakpoint addresses must have a length specification of one\nbyte (LEN = 00); other values are undefined. The processor recognizes an\ninstruction breakpoint address only when it points to the first byte of an\ninstruction. If the instruction has any prefixes, the breakpoint address\nmust point to the first prefix.\n\n\nTable 12-1. Breakpoint Field Recognition Examples\n\n                                    Address (hex)          Length\n\n                       DR0             0A0001          1 (LEN0 = 00)\nRegister Contents      DR1             0A0002          1 (LEN1 = 00)\n                       DR2             0B0002          2 (LEN2 = 01)\n                       DR3             0C0000          4 (LEN3 = 11)\n\nSome Examples of Memory                0A0001          1\nReferences That Cause Traps            0A0002          1\n                                       0A0001          2\n                                       0A0002          2\n                                       0B0002          2\n                                       0B0001          4\n                                       0C0000          4\n                                       0C0001          2\n                                       0C0003          1\n\nSome Examples of Memory                0A0000          1\nReferences That Don't Cause Traps      0A0003          4\n                                       0B0000          2\n                                       0C0004          4\n\n\n12.3  Debug Exceptions\n\nTwo of the interrupt vectors of the 80386 are reserved for exceptions that\nrelate to debugging. Interrupt 1 is the primary means of invoking debuggers\ndesigned expressly for the 80386; interrupt 3 is intended for debugging\ndebuggers and for compatibility with prior processors in Intel's 8086\nprocessor family.\n\n\n12.3.1  Interrupt 1  Debug Exceptions\n\nThe handler for this exception is usually a debugger or part of a debugging\nsystem. The processor causes interrupt 1 for any of several conditions. The\ndebugger can check flags in DR6 and DR7 to determine what condition caused\nthe exception and what other conditions might be in effect at the same time.\nTable 12-2 associates with each breakpoint condition the combination of\nbits that indicate when that condition has caused the debug exception.\n\nInstruction address breakpoint conditions are faults, while other debug\nconditions are traps. The debug exception may report either or both at one\ntime. The following paragraphs present details for each class of debug\nexception.\n\n\nTable 12-2. Debug Exception Conditions\n\nFlags to Test              Condition\n\nBS=1                       Single-step trap\nB0=1 AND (GE0=1 OR LE0=1)  Breakpoint DR0, LEN0, R/W0\nB1=1 AND (GE1=1 OR LE1=1)  Breakpoint DR1, LEN1, R/W1\nB2=1 AND (GE2=1 OR LE2=1)  Breakpoint DR2, LEN2, R/W2\nB3=1 AND (GE3=1 OR LE3=1)  Breakpoint DR3, LEN3, R/W3\nBD=1                       Debug registers not available; in use by ICE-386.\nBT=1                       Task switch\n\n\n12.3.1.1  Instruction Addrees Breakpoint\n\nThe processor reports an instruction-address breakpoint before it executes\nthe instruction that begins at the given address; i.e., an instruction-\naddress breakpoint exception is a fault.\n\nThe RF (restart flag) permits the debug handler to retry instructions that\ncause other kinds of faults in addition to debug faults. When it detects a\nfault, the processor automatically sets RF in the flags image that it pushes\nonto the stack. (It does not, however, set RF for traps and aborts.)\n\nWhen RF is set, it causes any debug fault to be ignored during the next\ninstruction. (Note, however, that RF does not cause breakpoint traps to be\nignored, nor other kinds of faults.)\n\nThe processor automatically clears RF at the successful completion of every\ninstruction except after the IRET instruction, after the POPF instruction,\nand after a JMP, CALL, or INT instruction that causes a task switch. These\ninstructions set RF to the value specified by the memory image of the EFLAGS\nregister.\n\nThe processor automatically sets RF in the EFLAGS image on the stack before\nentry into any fault handler. Upon entry into the fault handler for\ninstruction address breakpoints, for example, RF is set in the EFLAGS image\non the stack; therefore, the IRET instruction at the end of the handler will\nset RF in the EFLAGS register, and execution will resume at the breakpoint\naddress without generating another breakpoint fault at the same address.\n\nIf, after a debug fault, RF is set and the debug handler retries the\nfaulting instruction, it is possible that retrying the instruction will\nraise other faults. The retry of the instruction after these faults will\nalso be done with RF=1, with the result that debug faults continue to be\nignored. The processor clears RF only after successful completion of the\ninstruction.\n\nReal-mode debuggers can control the RF flag by using a 32-bit IRET. A\n16-bit IRET instruction does not affect the RF bit (which is in the\nhigh-order 16 bits of EFLAGS). To use a 32-bit IRET, the debugger must\nrearrange the stack so that it holds appropriate values for the 32-bit EIP,\nCS, and EFLAGS (with RF set in the EFLAGS image). Then executing an IRET\nwith an operand size prefix causes a 32-bit return, popping the RF flag\ninto EFLAGS.\n\n\n12.3.1.2  Data Address Breakpoint\n\nA data-address breakpoint exception is a trap; i.e., the processor reports\na data-address breakpoint after executing the instruction that accesses the\ngiven memory item.\n\nWhen using data breakpoints it is recommended that either the LE or GE bit\nof DR7 be set also. If either LE or GE is set, any data breakpoint trap is\nreported exactly after completion of the instruction that accessed the\nspecified memory item. This exact reporting is accomplished by forcing the\n80386 execution unit to wait for completion of data operand transfers before\nbeginning execution of the next instruction. If neither GE nor LE is set,\ndata breakpoints may not be reported until one instruction after the data is\naccessed or may not be reported at all. This is due to the fact that,\nnormally, instruction execution is overlapped with memory transfers to such\na degree that execution of the next instruction may begin before memory\ntransfers for the prior instruction are completed.\n\nIf a debugger needs to preserve the contents of a write breakpoint\nlocation, it should save the original contents before setting a write\nbreakpoint. Because data breakpoints are traps, a write into a breakpoint\nlocation will complete before the trap condition is reported. The handler\ncan report the saved value after the breakpoint is triggered. The data in\nthe debug registers can be used to address the new value stored by the\ninstruction that triggered the breakpoint.\n\n\n12.3.1.3  General Detect Fault\n\nThis exception occurs when an attempt is made to use the debug registers at\nthe same time that ICE-386 is using them. This additional protection feature\nis provided to guarantee that ICE-386 can have full control over the\ndebug-register resources when required. ICE-386 uses the debug-registers;\ntherefore, a software debugger that also uses these registers cannot run\nwhile ICE-386 is in use. The exception handler can detect this condition by\nexamining the BD bit of DR6.\n\n\n12.3.1.4  Single-Step Trap\n\nThis debug condition occurs at the end of an instruction if the trap flag\n(TF) of the flags register held the value one at the beginning of that\ninstruction.  Note that the exception does not occur at the end of an\ninstruction that sets TF. For example, if POPF is used to set TF, a\nsingle-step trap does not occur until after the instruction that follows\nPOPF.\n\nThe processor clears the TF bit before invoking the handler.  If TF=1 in\nthe flags image of a TSS at the time of a task switch, the exception occurs\nafter the first instruction is executed in the new task.\n\nThe single-step flag is normally not cleared by privilege changes inside a\ntask.  INT instructions, however, do clear TF.  Therefore, software\ndebuggers that single-step code must recognize and emulate INT n or INTO\nrather than executing them directly.\n\nTo maintain protection, system software should check the current execution\nprivilege level after any single step interrupt to see whether single\nstepping should continue at the current privilege level.\n\nThe interrupt priorities in hardware guarantee that if an external\ninterrupt occurs, single stepping stops. When both an external interrupt and\na single step interrupt occur together, the single step interrupt is\nprocessed first. This clears the TF bit. After saving the return address or\nswitching tasks, the external interrupt input is examined before the first\ninstruction of the single step handler executes.  If the external interrupt\nis still pending, it is then serviced. The external interrupt handler is not\nsingle-stepped. To single step an interrupt handler, just single step an INT\nn instruction that refers to the interrupt handler.\n\n\n12.3.1.5  Task Switch Breakpoint\n\nThe debug exception also occurs after a switch to an 80386 task if the\nT-bit of the new TSS is set.  The exception occurs after control has passed\nto the new task, but before the first instruction of that task is executed.\nThe exception handler can detect this condition by examining the BT bit of\nthe debug status register DR6.\n\nNote that if the debug exception handler is a task, the T-bit of its TSS\nshould not be set. Failure to observe this rule will cause the processor to\nenter an infinite loop.\n\n\n12.3.2  Interrupt 3  Breakpoint Exception\n\nThis exception is caused by execution of the breakpoint instruction INT 3.\nTypically, a debugger prepares a breakpoint by substituting the opcode of\nthe one-byte breakpoint instruction in place of the first opcode byte of the\ninstruction to be trapped. When execution of the INT 3 instruction causes\nthe exception handler to be invoked, the saved value of ES:EIP points to the\nbyte following the INT 3 instruction.\n\nWith prior generations of processors, this feature is used extensively for\ntrapping execution of specific instructions. With the 80386, the needs\nformerly filled by this feature are more conveniently solved via the debug\nregisters and interrupt 1.  However, the breakpoint exception is still\nuseful for debugging debuggers, because the breakpoint exception can vector\nto a different exception handler than that used by the debugger. The\nbreakpoint exception can also be useful when it is necessary to set a\ngreater number of breakpoints than permitted by the debug registers.\n\n\n                          PART III  COMPATIBILITY                          \n\n\nChapter 13  Executing 80286 Protected-Mode Code\n\n\n\n13.1  80286 Code Executes as a Subset of the 80386\n\nIn general, programs designed for execution in protected mode on an 80286\nexecute without modification on the 80386, because the features of the 80286\nare a subset of those of the 80386.\n\nAll the descriptors used by the 80286 are supported by the 80386 as long as\nthe Intel-reserved word (last word) of the 80286 descriptor is zero.\n\nThe descriptors for data segments, executable segments, local descriptor\ntables, and task gates are common to both the 80286 and the 80386. Other\n80286 descriptorsTSS segment, call gate, interrupt gate, and trap\ngateare supported by the 80386. The 80386 also has new versions of\ndescriptors for TSS segment, call gate, interrupt gate, and trap gate that\nsupport the 32-bit nature of the 80386. Both sets of descriptors can be\nused simultaneously in the same system.\n\nFor those descriptors that are common to both the 80286 and the 80386, the\npresence of zeros in the final word causes the 80386 to interpret these\ndescriptors exactly as 80286 does; for example:\n\nBase Address      The high-order eight bits of the 32-bit base address are\n                  zero, limiting base addresses to 24 bits.\n\nLimit             The high-order four bits of the limit field are zero,\n                  restricting the value of the limit field to 64K.\n\nGranularity bit   The granularity bit is zero, which implies that the value\n                  of the 16-bit limit is interpreted in units of one byte.\n\nB-bit             In a data-segment descriptor, the B-bit is zero, implying\n                  that the segment is no larger than 64 Kbytes.\n\nD-bit             In an executable-segment descriptor, the D-bit is zero,\n                  implying that 16-bit addressing and operands are the\n                  default.\n\nFor formats of these descriptors and documentation of their use refer to\nthe iAPX 286 Programmer's Reference Manual.\n\n\n13.2  Two ways to Execute 80286 Tasks\n\nWhen porting 80286 programs to the 80386, there are two cases to consider:\n\n  1.  Porting an entire 80286 system to the 80386, complete with 80286\n      operating system, loader, and system builder.\n\n      In this case, all tasks will have 80286 TSSs. The 80386 is being used\n      as a faster 286.\n\n  2.  Porting selected 80286 applications to run in an 80386 environment\n      with an 80386 operating system, loader, and system builder.\n\n      In this case, the TSSs used to represent 80286 tasks should be\n      changed to 80386 TSSs. It is theoretically possible to mix 80286 and\n      80386 TSSs, but the benefits are slight and the problems are great. It\n      is recommended that all tasks in a 80386 software system have 80386\n      TSSs. It is not necessary to change the 80286 object modules\n      themselves; TSSs are usually constructed by the operating system, by\n      the loader, or by the system builder. Refer to Chapter 16 for further\n      discussion of the interface between 16-bit and 32-bit code.\n\n\n13.3  Differences From 80286\n\nThe few differences that do exist primarily affect operating system code.\n\n\n13.3.1  Wraparound of 80286 24-Bit Physical Address Space\n\nWith the 80286, any base and offset combination that addresses beyond 16M\nbytes wraps around to the first megabyte of the 80286 address space. With\nthe 80386, since it has a greater physical address space, any such address\nfalls into the 17th megabyte. In the unlikely event that any software\ndepends on this anomaly, the same effect can be simulated on the 80386 by\nusing paging to map the first 64K bytes of the 17th megabyte of logical\naddresses to physical addresses in the first megabyte.\n\n\n13.3.2  Reserved Word of Descriptor\n\nBecause the 80386 uses the contents of the reserved word (last word) of\nevery descriptor, 80286 programs that place values in this word may not\nexecute correctly on the 80386.\n\n\n13.3.3  New Descriptor Type Codes\n\nOperating-system code that manages space in descriptor tables often uses an\ninvalid value in the access-rights field of descriptor-table entries to\nidentify unused entries. Access rights values of 80H and 00H remain invalid\nfor both the 80286 and 80386. Other values that were invalid on for the\n80286 may be valid for the 80386 because of the additional descriptor types\ndefined by the 80386.\n\n\n13.3.4  Restricted Semantics of LOCK\n\nThe 80286 processor implements the bus lock function differently than the\n80386. Programs that use forms of memory locking specific to the 80286 may\nnot execute properly when transported to a specific application of the\n80386.\n\nThe LOCK prefix and its corresponding output signal should only be used to\nprevent other bus masters from interrupting a data movement operation.  LOCK\nmay only be used with the following 80386 instructions when they modify\nmemory. An undefined-opcode exception results from using LOCK before any\nother instruction.\n\n    Bit test and change:  BTS, BTR, BTC.\n    Exchange: XCHG.\n    One-operand arithmetic and logical: INC, DEC, NOT, and NEG.\n    Two-operand arithmetic and logical:  ADD, ADC, SUB, SBB, AND, OR, XOR.\n\nA locked instruction is guaranteed to lock only the area of memory defined\nby the destination operand, but may lock a larger memory area.  For example,\ntypical 8086 and 80286 configurations lock the entire physical memory space.\nWith the 80386, the defined area of memory is guaranteed to be locked\nagainst access by a processor executing a locked instruction on exactly the\nsame memory area, i.e., an operand with identical starting address and\nidentical length.\n\n\n13.3.5  Additional Exceptions\n\nThe 80386 defines new exceptions that can occur even in systems designed\nfor the 80286.\n\n    Exception #6  invalid opcode\n\n     This exception can result from improper use of the LOCK instruction.\n\n    Exception #14  page fault\n\n     This exception may occur in an 80286 program if the operating system\n     enables paging. Paging can be used in a system with 80286 tasks as long\n     as all tasks use the same page directory. Because there is no place in\n     an 80286 TSS to store the PDBR, switching to an 80286 task does not\n     change the value of PDBR. Tasks ported from the 80286 should be given\n     80386 TSSs so they can take full advantage of paging.\n\n\nChapter 14  80386 Real-Address Mode\n\n\n\nThe real-address mode of the 80386 executes object code designed for\nexecution on 8086, 8088, 80186, or 80188 processors, or for execution in the\nreal-address mode of an 80286:\n\nIn effect, the architecture of the 80386 in this mode is almost identical\nto that of the 8086, 8088, 80186, and 80188. To a programmer, an 80386 in\nreal-address mode appears as a high-speed 8086 with extensions to the\ninstruction set and registers. The principal features of this architecture\nare defined in Chapters 2 and 3.\n\nThis chapter discusses certain additional topics that complete the system\nprogrammer's view of the 80386 in real-address mode:\n\n    Address formation.\n    Extensions to registers and instructions.\n    Interrupt and exception handling.\n    Entering and leaving real-address mode.\n    Real-address-mode exceptions.\n    Differences from 8086.\n    Differences from 80286 real-address mode.\n\n\n14.1  Physical Address Formation\n\nThe 80386 provides a one Mbyte + 64 Kbyte memory space for an 8086 program.\nSegment relocation is performed as in the 8086: the 16-bit value in a\nsegment selector is shifted left by four bits to form the base address of a\nsegment. The effective address is extended with four high order zeros and\nadded to the base to form a linear address as Figure 14-1 illustrates. (The\nlinear address is equivalent to the physical address, because paging is not\nused in real-address mode.) Unlike the 8086, the resulting linear address\nmay have up to 21 significant bits. There is a possibility of a carry when\nthe base address is added to the effective address. On the 8086, the carried\nbit is truncated, whereas on the 80386 the carried bit is stored in bit\nposition 20 of the linear address.\n\nUnlike the 8086 and 80286, 32-bit effective addresses can be generated (via\nthe address-size prefix); however, the value of a 32-bit address may not\nexceed 65535 without causing an exception. For full compatibility with 80286\nreal-address mode, pseudo-protection faults (interrupt 12 or 13 with no\nerror code) occur if an effective address is generated outside the range 0\nthrough 65535.\n\n\nFigure 14-1.  Real-Address Mode Address Formation\n\n                      19                                3       0\n                     ͻ\n         BASE             16-BIT SEGMENT SELECTOR      0 0 0 0 \n                     ͼ\n\n         +\n                      19        15                              0\n                     ͻ\n         OFFSET       0 0 0 0     16-BIT EFFECTIVE ADDRESS     \n                     ͼ\n\n         =\n                    20                                          0\n         LINEAR    ͻ\n         ADDRESS    X X X X X X X X X X X X X X X X X X X X X X \n                   ͼ\n\n\n14.2  Registers and Instructions\n\nThe register set available in real-address mode includes all the registers\ndefined for the 8086 plus the new registers introduced by the 80386: FS, GS,\ndebug registers, control registers, and test registers. New instructions\nthat explicitly operate on the segment registers FS and GS are available,\nand the new segment-override prefixes can be used to cause instructions to\nutilize FS and GS for address calculations. Instructions can utilize 32-bit\noperands through the use of the operand size prefix.\n\nThe instruction codes that cause undefined opcode traps (interrupt 6)\ninclude instructions of the protected mode that manipulate or interrogate\n80386 selectors and descriptors; namely, VERR, VERW, LAR, LSL, LTR, STR,\nLLDT, and SLDT. Programs executing in real-address mode are able to take\nadvantage of the new applications-oriented instructions added to the\narchitecture by the introduction of the 80186/80188, 80286 and 80386:\n\n New instructions introduced by 80186/80188 and 80286.\n\n    PUSH immediate data\n    Push all and pop all (PUSHA and POPA)\n    Multiply immediate data\n    Shift and rotate by immediate count\n    String I/O\n    ENTER and LEAVE\n    BOUND\n\n New instructions introduced by 80386.\n\n    LSS, LFS, LGS instructions\n    Long-displacement conditional jumps\n    Single-bit instructions\n    Bit scan\n    Double-shift instructions\n    Byte set on condition\n    Move with sign/zero extension\n    Generalized multiply\n    MOV to and from control registers\n    MOV to and from test registers\n    MOV to and from debug registers\n\n\n14.3  Interrupt and Exception Handling\n\nInterrupts and exceptions in 80386 real-address mode work as much as they\ndo on an 8086. Interrupts and exceptions vector to interrupt procedures via\nan interrupt table. The processor multiplies the interrupt or exception\nidentifier by four to obtain an index into the interrupt table. The entries\nof the interrupt table are far pointers to the entry points of interrupt or\nexception handler procedures. When an interrupt occurs, the processor\npushes the current values of CS:IP onto the stack, disables interrupts,\nclears TF (the single-step flag), then transfers control to the location\nspecified in the interrupt table. An IRET instruction at the end of the\nhandler procedure reverses these steps before returning control to the\ninterrupted procedure.\n\nThe primary difference in the interrupt handling of the 80386 compared to\nthe 8086 is that the location and size of the interrupt table depend on the\ncontents of the IDTR (IDT register). Ordinarily, this fact is not apparent\nto programmers, because, after RESET, the IDTR contains a base address of 0\nand a limit of 3FFH, which is compatible with the 8086. However, the LIDT\ninstruction can be used in real-address mode to change the base and limit\nvalues in the IDTR. Refer to Chapter 9 for details on the IDTR, and the\nLIDT and SIDT instructions. If an interrupt occurs and the corresponding\nentry of the interrupt table is beyond the limit stored in the IDTR, the\nprocessor raises exception 8.\n\n\n14.4  Entering and Leaving Real-Address Mode\n\nReal-address mode is in effect after a signal on the RESET pin. Even if the\nsystem is going to be used in protected mode, the start-up program will\nexecute in real-address mode temporarily while initializing for protected\nmode.\n\n\n14.4.1  Switching to Protected Mode\n\nThe only way to leave real-address mode is to switch to protected mode. The\nprocessor enters protected mode when a MOV to CR0 instruction sets the PE\n(protection enable) bit in CR0. (For compatibility with the 80286, the LMSW\ninstruction may also be used to set the PE bit.)\n\nRefer to Chapter 10 \"Initialization\" for other aspects of switching to\nprotected mode.\n\n\n14.5  Switching Back to Real-Address Mode\n\nThe processor reenters real-address mode if software clears the PE bit in\nCR0 with a MOV to CR0 instruction. A procedure that attempts to do this,\nhowever, should proceed as follows:\n\n  1.  If paging is enabled, perform the following sequence:\n\n        Transfer control to linear addresses that have an identity mapping;\n         i.e., linear addresses equal physical addresses.\n\n        Clear the PG bit in CR0.\n\n        Move zeros to CR3 to clear out the paging cache.\n\n  2.  Transfer control to a segment that has a limit of 64K (FFFFH). This\n      loads the CS register with the limit it needs to have in real mode.\n\n  3.  Load segment registers SS, DS, ES, FS, and GS with a selector that\n      points to a descriptor containing the following values, which are\n      appropriate to real mode:\n\n        Limit = 64K   (FFFFH)\n        Byte granular (G = 0)\n        Expand up     (E = 0)\n        Writable      (W = 1)\n        Present       (P = 1)\n        Base = any value\n\n  4.  Disable interrupts. A CLI instruction disables INTR interrupts. NMIs\n      can be disabled with external circuitry.\n\n  5.  Clear the PE bit.\n\n  6.  Jump to the real mode code to be executed using a far JMP. This\n      action flushes the instruction queue and puts appropriate values in\n      the access rights of the CS register.\n\n  7.  Use the LIDT instruction to load the base and limit of the real-mode\n      interrupt vector table.\n\n  8.  Enable interrupts.\n\n  9.  Load the segment registers as needed by the real-mode code.\n\n\n14.6  Real-Address Mode Exceptions\n\nThe 80386 reports some exceptions differently when executing in\nreal-address mode than when executing in protected mode. Table 14-1 details\nthe real-address-mode exceptions.\n\n\n14.7  Differences From 8086\n\nIn general, the 80386 in real-address mode will correctly execute ROM-based\nsoftware designed for the 8086, 8088, 80186, and 80188. Following is a list\nof the minor differences between 8086 execution on the 80386 and on an 8086.\n\n  1.  Instruction clock counts.\n\n      The 80386 takes fewer clocks for most instructions than the 8086/8088.\n      The areas most likely to be affected are:\n\n        Delays required by I/O devices between I/O operations.\n\n        Assumed delays with 8086/8088 operating in parallel with an 8087.\n\n  2.  Divide Exceptions Point to the DIV instruction.\n\n      Divide exceptions on the 80386 always leave the saved CS:IP value\n      pointing to the instruction that failed. On the 8086/8088, the CS:IP\n      value points to the next instruction.\n\n  3.  Undefined 8086/8088 opcodes.\n\n      Opcodes that were not defined for the 8086/8088 will cause exception\n      6 or will execute one of the new instructions defined for the 80386.\n\n  4.  Value written by PUSH SP.\n\n      The 80386 pushes a different value on the stack for PUSH SP than the\n      8086/8088. The 80386 pushes the value of SP before SP is incremented\n      as part of the push operation; the 8086/8088 pushes the value of SP\n      after it is incremented. If the value pushed is important, replace\n      PUSH SP instructions with the following three instructions:\n\n      PUSH  BP\n      MOV   BP, SP\n      XCHG  BP, [BP]\n\n      This code functions as the 8086/8088 PUSH SP instruction on the 80386.\n\n  5.  Shift or rotate by more than 31 bits.\n\n      The 80386 masks all shift and rotate counts to the low-order five\n      bits. This MOD 32 operation limits the count to a maximum of 31 bits,\n      thereby limiting the time that interrupt response is delayed while\n      the instruction is executing.\n\n  6.  Redundant prefixes.\n\n      The 80386 sets a limit of 15 bytes on instruction length. The only\n      way to violate this limit is by putting redundant prefixes before an\n      instruction. Exception 13 occurs if the limit on instruction length\n      is violated. The 8086/8088 has no instruction length limit.\n\n  7.  Operand crossing offset 0 or 65,535.\n\n      On the 8086, an attempt to access a memory operand that crosses\n      offset 65,535 (e.g., MOV a word to offset 65,535) or offset 0 (e.g.,\n      PUSH a word when SP = 1) causes the offset to wrap around modulo\n      65,536. The 80386 raises an exception in these casesexception 13 if\n      the segment is a data segment (i.e., if CS, DS, ES, FS, or GS is being\n      used to address the segment), exception 12 if the segment is a stack\n      segment (i.e., if SS is being used).\n\n  8.  Sequential execution across offset 65,535.\n\n      On the 8086, if sequential execution of instructions proceeds past\n      offset 65,535, the processor fetches the next instruction byte from\n      offset 0 of the same segment. On the 80386, the processor raises\n      exception 13 in such a case.\n\n  9.  LOCK is restricted to certain instructions.\n\n      The LOCK prefix and its corresponding output signal should only be\n      used to prevent other bus masters from interrupting a data movement\n      operation. The 80386 always asserts the LOCK signal during an XCHG\n      instruction with memory (even if the LOCK prefix is not used). LOCK\n      may only be used with the following 80386 instructions when they\n      update memory: BTS, BTR, BTC, XCHG, ADD, ADC, SUB, SBB, INC, DEC,\n      AND, OR, XOR, NOT, and NEG. An undefined-opcode exception\n      (interrupt 6) results from using LOCK before any other instruction.\n\n 10.  Single-stepping external interrupt handlers.\n\n      The priority of the 80386 single-step exception is different from that\n      of the 8086/8088. The change prevents an external interrupt handler\n      from being single-stepped if the interrupt occurs while a program is\n      being single-stepped. The 80386 single-step exception has higher\n      priority that any external interrupt. The 80386 will still single-step\n      through an interrupt handler invoked by the INT instructions or by an\n      exception.\n\n 11.  IDIV exceptions for quotients of 80H or 8000H.\n\n      The 80386 can generate the largest negative number as a quotient for\n      the IDIV instruction. The 8086/8088 causes exception zero instead.\n\n 12.  Flags in stack.\n\n      The setting of the flags stored by PUSHF, by interrupts, and by\n      exceptions is different from that stored by the 8086 in bit positions\n      12 through 15. On the 8086 these bits are stored as ones, but in\n      80386 real-address mode bit 15 is always zero, and bits 14 through 12\n      reflect the last value loaded into them.\n\n 13.  NMI interrupting NMI handlers.\n\n      After an NMI is recognized on the 80386, the NMI interrupt is masked\n      until an IRET instruction is executed.\n\n 14.  Coprocessor errors vector to interrupt 16.\n\n      Any 80386 system with a coprocessor must use interrupt vector 16 for\n      the coprocessor error exception. If an 8086/8088 system uses another\n      vector for the 8087 interrupt, both vectors should point to the\n      coprocessor-error exception handler.\n\n 15.  Numeric exception handlers should allow prefixes.\n\n      On the 80386, the value of CS:IP saved for coprocessor exceptions\n      points at any prefixes before an ESC instruction. On 8086/8088\n      systems, the saved CS:IP points to the ESC instruction.\n\n 16.  Coprocessor does not use interrupt controller.\n\n      The coprocessor error signal to the 80386 does not pass through an\n      interrupt controller (an 8087 INT signal does). Some instructions in\n      a coprocessor error handler may need to be deleted if they deal with\n      the interrupt controller.\n\n 17.  Six new interrupt vectors.\n\n      The 80386 adds six exceptions that arise only if the 8086 program has\n      a hidden bug. It is recommended that exception handlers be added that\n      treat these exceptions as invalid operations. This additional\n      software does not significantly affect the existing 8086 software\n      because the interrupts do not normally occur. These interrupt\n      identifiers should not already have been used by the 8086 software,\n      because they are in the range reserved by Intel. Table 14-2 describes\n      the new 80386 exceptions.\n\n 18.  One megabyte wraparound.\n\n      The 80386 does not wrap addresses at 1 megabyte in real-address mode.\n      On members of the 8086 family, it possible to specify addresses\n      greater than one megabyte.  For example, with a selector value 0FFFFH\n      and an offset of 0FFFFH, the effective address would be 10FFEFH (1\n      Mbyte + 65519).  The 8086, which can form adresses only up to 20 bits\n      long, truncates the high-order bit, thereby \"wrapping\" this address\n      to 0FFEFH.  However, the 80386, which can form addresses up to 32\n      bits long does not truncate such an address.\n\n\nTable 14-1. 80386 Real-Address Mode Exceptions\n\n\nDescription                      Interrupt  Function that Can                   Return Address\n                                 Number     Generate the Exception              Points to Faulting\n                                                                                Instruction\nDivide error                     0          DIV, IDIV                           YES\nDebug exceptions                 1          All                                 \nSome debug exceptions point to the faulting instruction, others to the\nnext instruction. The exception handler can determine which has occurred by\nexamining DR6.\n\n\n\n\n\nBreakpoint                       3          INT                                 NO\nOverflow                         4          INTO                                NO\nBounds check                     5          BOUND                               YES\nInvalid opcode                   6          Any undefined opcode or LOCK        YES\n                                            used with wrong instruction\nCoprocessor not available        7          ESC or WAIT                         YES\nInterrupt table limit too small  8          INT vector is not within IDTR       YES\n                                            limit\nReserved                         9-12\nStack fault                      12         Memory operand crosses offset       YES\n                                            0 or 0FFFFH\nPseudo-protection exception      13         Memory operand crosses offset       YES\n                                            0FFFFH or attempt to execute\n                                            past offset 0FFFFH or\n                                            instruction longer than 15\n                                            bytes\nReserved                         14,15\nCoprocessor error                16         ESC or WAIT                         YES\nCoprocessor errors are reported on the first ESC or WAIT instruction\nafter the ESC instruction that caused the error.\n\n\n\n\n\nTwo-byte SW interrupt            0-255      INT n                               NO\n\n\nTable 14-2. New 80386 Exceptions\n\nInterrupt   Function\nIdentifier\n\n    5       A BOUND instruction was executed with a register value outside\n            the limit values.\n\n    6       An undefined opcode was encountered or LOCK was used improperly\n            before an instruction to which it does not apply.\n\n    7       The EM bit in the MSW is set when an ESC instruction was\n            encountered. This exception also occurs on a WAIT instruction\n            if TS is set.\n\n    8       An exception or interrupt has vectored to an interrupt table\n            entry beyond the interrupt table limit in IDTR. This can occur\n            only if the LIDT instruction has changed the limit from the\n            default value of 3FFH, which is enough for all 256 interrupt\n            IDs.\n\n   12       Operand crosses extremes of stack segment, e.g., MOV operation\n            at offset 0FFFFH or push with SP=1 during PUSH, CALL, or INT.\n\n   13       Operand crosses extremes of a segment other than a stack\n            segment; or sequential instruction execution attempts to\n            proceed beyond offset 0FFFFH; or an instruction is longer than\n            15 bytes (including prefixes).\n\n\n14.8  Differences From 80286 Real-Address Mode\n\nThe few differences that exist between 80386 real-address mode and 80286\nreal-address mode are not likely to affect any existing 80286 programs\nexcept possibly the system initialization procedures.\n\n\n14.8.1  Bus Lock\n\nThe 80286 processor implements the bus lock function differently than the\n80386. Programs that use forms of memory locking specific to the 80286 may\nnot execute properly if transported to a specific application of the 80386.\n\nThe LOCK prefix and its corresponding output signal should only be used to\nprevent other bus masters from interrupting a data movement operation.  LOCK\nmay only be used with the following 80386 instructions when they modify\nmemory.  An undefined-opcode exception results from using LOCK before any\nother instruction.\n\n    Bit test and change:  BTS, BTR, BTC.\n    Exchange: XCHG.\n    One-operand arithmetic and logical: INC, DEC, NOT, and NEG.\n    Two-operand arithmetic and logical: ADD, ADC, SUB, SBB, AND, OR, XOR.\n\nA locked instruction is guaranteed to lock only the area of memory defined\nby the destination operand, but may lock a larger memory area.  For example,\ntypical 8086 and 80286 configurations lock the entire physical memory space.\nWith the 80386, the defined area of memory is guranteed to be locked against\naccess by a processor executing a locked instruction on exactly the same\nmemory area, i.e., an operand with identical starting address and identical\nlength.\n\n\n14.8.2  Location of First Instruction\n\nThe starting location is 0FFFFFFF0H (sixteen bytes from end of 32-bit\naddress space) on the 80386 rather than 0FFFFF0H (sixteen bytes from end of\n24-bit address space) as on the 80286.  Many 80286 ROM initialization\nprograms will work correctly in this new environment.  Others can be made to\nwork correctly with external hardware that redefines the signals on\nA{31-20}.\n\n\n14.8.3  Initial Values of General Registers\n\nOn the 80386, certain general registers may contain different values after\nRESET than on the 80286. This should not cause compatibility problems,\nbecause the content of 8086 registers after RESET is undefined.  If\nself-test is requested during the reset sequence and errors are detected in\nthe 80386 unit, EAX will contain a nonzero value. EDX contains the component\nand revision identifier. Refer to Chapter 10 for more information.\n\n\n14.8.4  MSW Initialization\n\nThe 80286 initializes the MSW register to FFF0H, but the 80386 initializes\nthis register to 0000H. This difference should have no effect, because the\nbits that are different are undefined on the 80286.  Programs that read the\nvalue of the MSW will behave differently on the 80386 only if they depend on\nthe setting of the undefined, high-order bits.\n\n\nChapter 15  Virtual 8086 Mode\n\n\n\nThe 80386 supports execution of one or more 8086, 8088, 80186, or 80188\nprograms in an 80386 protected-mode environment. An 8086 program runs in\nthis environment as part of a V86 (virtual 8086) task. V86 tasks take\nadvantage of the hardware support of multitasking offered by the protected\nmode. Not only can there be multiple V86 tasks, each one executing an 8086\nprogram, but V86 tasks can be multiprogrammed with other 80386 tasks.\n\nThe purpose of a V86 task is to form a \"virtual machine\" with which to\nexecute an 8086 program. A complete virtual machine consists not only of\n80386 hardware but also of systems software. Thus, the emulation of an 8086\nis the result of cooperation between hardware and software:\n\n    The hardware provides a virtual set of registers (via the TSS), a\n     virtual memory space (the first megabyte of the linear address space of\n     the task), and directly executes all instructions that deal with these\n     registers and with this address space.\n\n    The software controls the external interfaces of the virtual machine\n     (I/O, interrupts, and exceptions) in a manner consistent with the\n     larger environment in which it executes. In the case of I/O, software\n     can choose either to emulate I/O instructions or to let the hardware\n     execute them directly without software intervention.\n\nSoftware that helps implement virtual 8086 machines is called a V86\nmonitor.\n\n\n15.1  Executing 8086 Code\n\nThe processor executes in V86 mode when the VM (virtual machine) bit in the\nEFLAGS register is set. The processor tests this flag under two general\nconditions:\n\n  1.  When loading segment registers to know whether to use 8086-style\n      address formation.\n\n  2.  When decoding instructions to determine which instructions are\n      sensitive to IOPL.\n\nExcept for these two modifications to its normal operations, the 80386 in\nV86 mode operated much as in protected mode.\n\n\n15.1.1  Registers and Instructions\n\nThe register set available in V86 mode includes all the registers defined\nfor the 8086 plus the new registers introduced by the 80386: FS, GS, debug\nregisters, control registers, and test registers. New instructions that\nexplicitly operate on the segment registers FS and GS are available, and the\nnew segment-override prefixes can be used to cause instructions to utilize\nFS and GS for address calculations. Instructions can utilize 32-bit\noperands through the use of the operand size prefix.\n\n8086 programs running as V86 tasks are able to take advantage of the new\napplications-oriented instructions added to the architecture by the\nintroduction of the 80186/80188, 80286 and 80386:\n\n    New instructions introduced by 80186/80188 and 80286.\n      PUSH immediate data\n      Push all and pop all (PUSHA and POPA)\n      Multiply immediate data\n      Shift and rotate by immediate count\n      String I/O\n      ENTER and LEAVE\n      BOUND\n\n    New instructions introduced by 80386.\n      LSS, LFS, LGS instructions\n      Long-displacement conditional jumps\n      Single-bit instructions\n      Bit scan\n      Double-shift instructions\n      Byte set on condition\n      Move with sign/zero extension\n      Generalized multiply\n\n\n15.1.2  Linear Address Formation\n\nIn V86 mode, the 80386 processor does not interpret 8086 selectors by\nreferring to descriptors; instead, it forms linear addresses as an 8086\nwould. It shifts the selector left by four bits to form a 20-bit base\naddress. The effective address is extended with four high-order zeros and\nadded to the base address to create a linear address as Figure 15-1\nillustrates.\n\nBecause of the possibility of a carry, the resulting linear address may\ncontain up to 21 significant bits. An 8086 program may generate linear\naddresses anywhere in the range 0 to 10FFEFH (one megabyte plus\napproximately 64 Kbytes) of the task's linear address space.\n\nV86 tasks generate 32-bit linear addresses. While an 8086 program can only\nutilize the low-order 21 bits of a linear address, the linear address can be\nmapped via page tables to any 32-bit physical address.\n\nUnlike the 8086 and 80286, 32-bit effective addresses can be generated (via\nthe address-size prefix); however, the value of a 32-bit address may not\nexceed 65,535 without causing an exception. For full compatibility with\n80286 real-address mode, pseudo-protection faults (interrupt 12 or 13 with\nno error code) occur if an address is generated outside the range 0 through\n65,535.\n\n\nFigure 15-1.  V86 Mode Address Formation\n\n                      19                                3       0\n                     ͻ\n         BASE             16-BIT SEGMENT SELECTOR      0 0 0 0 \n                     ͼ\n\n         +\n                      19        15                              0\n                     ͻ\n         OFFSET       0 0 0 0     16-BIT EFFECTIVE ADDRESS     \n                     ͼ\n\n         =\n                    20                                          0\n         LINEAR    ͻ\n         ADDRESS    X X X X X X X X X X X X X X X X X X X X X X \n                   ͼ\n\n\n15.2  Structure of a V86 Task\n\nA V86 task consists partly of the 8086 program to be executed and partly of\n80386 \"native mode\" code that serves as the virtual-machine monitor. The\ntask must be represented by an 80386 TSS (not an 80286 TSS). The processor\nenters V86 mode to execute the 8086 program and returns to protected mode to\nexecute the monitor or other 80386 tasks.\n\nTo run successfully in V86 mode, an existing 8086 program needs the\nfollowing:\n\n    A V86 monitor.\n    Operating-system services.\n\nThe V86 monitor is 80386 protected-mode code that executes at\nprivilege-level zero. The monitor consists primarily of initialization and\nexception-handling procedures. As for any other 80386 program,\nexecutable-segment descriptors for the monitor must exist in the GDT or in\nthe task's LDT. The linear addresses above 10FFEFH are available for the\nV86 monitor, the operating system, and other systems software. The monitor\nmay also need data-segment descriptors so that it can examine the interrupt\nvector table or other parts of the 8086 program in the first megabyte of the\naddress space.\n\nIn general, there are two options for implementing the 8086 operating\nsystem:\n\n  1.  The 8086 operating system may run as part of the 8086 code. This\n      approach is desirable for any of the following reasons:\n\n        The 8086 applications code modifies the operating system.\n\n        There is not sufficient development time to reimplement the 8086\n         operating system as 80386 code.\n\n  2.  The 8086 operating system may be implemented or emulated in the V86\n      monitor. This approach is desirable for any of the following reasons:\n\n        Operating system functions can be more easily coordinated among\n         several V86 tasks.\n\n        The functions of the 8086 operating system can be easily emulated\n         by calls to the 80386 operating system.\n\nNote that, regardless of the approach chosen for implementing the 8086\noperating system, different V86 tasks may use different 8086 operating\nsystems.\n\n\n15.2.1  Using Paging for V86 Tasks\n\nPaging is not necessary for a single V86 task, but paging is useful or\nnecessary for any of the following reasons:\n\n    To create multiple V86 tasks. Each task must map the lower megabyte of\n     linear addresses to different physical locations.\n\n    To emulate the megabyte wrap. On members of the 8086 family, it is\n     possible to specify addresses larger than one megabyte. For example,\n     with a selector value of 0FFFFH and an offset of 0FFFFH, the effective\n     address would be 10FFEFH (one megabyte + 65519). The 8086, which can\n     form addresses only up to 20 bits long, truncates the high-order bit,\n     thereby \"wrapping\" this address to 0FFEFH. The 80386, however, which\n     can form addresses up to 32 bits long does not truncate such an\n     address. If any 8086 programs depend on this addressing anomaly, the\n     same effect can be achieved in a V86 task by mapping linear addresses\n     between 100000H and 110000H and linear addresses between 0 and 10000H\n     to the same physical addresses.\n\n    To create a virtual address space larger than the physical address\n     space.\n\n    To share 8086 OS code or ROM code that is common to several 8086\n     programs that are executing simultaneously.\n\n    To redirect or trap references to memory-mapped I/O devices.\n\n\n15.2.2  Protection within a V86 Task\n\nBecause it does not refer to descriptors while executing 8086 programs, the\nprocessor also does not utilize the protection mechanisms offered by\ndescriptors. To protect the systems software that runs in a V86 task from\nthe 8086 program, software designers may follow either of these approaches:\n\n    Reserve the first megabyte (plus 64 kilobytes) of each task's linear\n     address space for the 8086 program. An 8086 task cannot generate\n     addresses outside this range.\n\n    Use the U/S bit of page-table entries to protect the virtual-machine\n     monitor and other systems software in each virtual 8086 task's space.\n     When the processor is in V86 mode, CPL is 3. Therefore, an 8086 program\n     has only user privileges. If the pages of the virtual-machine monitor\n     have supervisor privilege, they cannot be accessed by the 8086 program.\n\n\n15.3  Entering and Leaving V86 Mode\n\nFigure 15-2 summarizes the ways that the processor can enter and leave an\n8086 program. The processor can enter V86 by either of two means:\n\n  1.  A task switch to an 80386 task loads the image of EFLAGS from the new\n      TSS. The TSS of the new task must be an 80386 TSS, not an 80286 TSS,\n      because the 80286 TSS does not store the high-order word of EFLAGS,\n      which contains the VM flag. A value of one in the VM bit of the new\n      EFLAGS indicates that the new task is executing 8086 instructions;\n      therefore, while loading the segment registers from the TSS, the\n      processor forms base addresses as the 8086 would.\n\n  2.  An IRET from a procedure of an 80386 task loads the image of EFLAGS\n      from the stack. A value of one in VM in this case indicates that the\n      procedure to which control is being returned is an 8086 procedure. The\n      CPL at the time the IRET is executed must be zero, else the processor\n      does not change VM.\n\nThe processor leaves V86 mode when an interrupt or exception occurs. There\nare two cases:\n\n  1.  The interrupt or exception causes a task switch. A task switch from a\n      V86 task to any other task loads EFLAGS from the TSS of the new task.\n      If the new TSS is an 80386 TSS and the VM bit in the EFLAGS image is\n      zero or if the new TSS is an 80286 TSS, then the processor clears the\n      VM bit of EFLAGS, loads the segment registers from the new TSS using\n      80386-style address formation, and begins executing the instructions\n      of the new task according to 80386 protected-mode semantics.\n\n  2.  The interrupt or exception vectors to a privilege-level zero\n      procedure. The processor stores the current setting of EFLAGS on the\n      stack, then clears the VM bit. The interrupt or exception handler,\n      therefore, executes as \"native\" 80386 protected-mode code. If an\n      interrupt or exception vectors to a conforming segment or to a\n      privilege level other than three, the processor causes a\n      general-protection exception; the error code is the selector of the\n      executable segment to which transfer was attempted.\n\nSystems software does not manipulate the VM flag directly, but rather\nmanipulates the image of the EFLAGS register that is stored on the stack or\nin the TSS. The V86 monitor sets the VM flag in the EFLAGS image on the\nstack or in the TSS when first creating a V86 task. Exception and interrupt\nhandlers can examine the VM flag on the stack. If the interrupted procedure\nwas executing in V86 mode, the handler may need to invoke the V86 monitor.\n\n\nFigure 15-2.  Entering and Leaving the 8086 Program\n\n                            MODE TRANSITION DIAGRAM\n\n                                 ͻ\n                  TASK SWITCH      INITIAL  \n                Ķ   ENTRY   \n                   OR IRET      ͼ\n                \n                \u001f\n        ͻ    INTERRUPT, EXCEPTION      ͻ\n         8086 PROGRAM \u0010 V86 MONITOR \n          (V86 MODE)  \u0011Ķ (PROTECTED  \n        ͼ            IRET                  MODE)    \n              \u001e                                      ͼ\n                                                            \u001e\n                                                            \n                                                            \n               TASK SWITCH ͻ TASK SWITCH \n               \u0010 OTHER 80386 TASKS \u0011  \n              Ķ (PROTECTED MODE)  \n                 TASK SWITCH ͼ TASK SWITCH\n\n\n15.3.1  Transitions Through Task Switches\n\nA task switch to or from a V86 task may be due to any of three causes:\n\n  1.  An interrupt that vectors to a task gate.\n  2.  An action of the scheduler of the 80386 operating system.\n  3.  An IRET when the NT flag is set.\n\nIn any of these cases, the processor changes the VM bit in EFLAGS according\nto the image of EFLAGS in the new TSS. If the new TSS is an 80286 TSS, the\nhigh-order word of EFLAGS is not in the TSS; the processor clears VM in this\ncase. The processor updates VM prior to loading the segment registers from\nthe images in the new TSS. The new setting of VM determines whether the\nprocessor interprets the new segment-register images as 8086 selectors or\n80386/80286 selectors.\n\n\n15.3.2  Transitions Through Trap Gates and Interrupt Gates\n\nThe processor leaves V86 mode as the result of an exception or interrupt\nthat vectors via a trap or interrupt gate to a privilege-level zero\nprocedure. The exception or interrupt handler returns to the 8086 code by\nexecuting an IRET.\n\nBecause it was designed for execution by an 8086 processor, an 8086 program\nin a V86 task will have an 8086-style interrupt table starting at linear\naddress zero. However, the 80386 does not use this table directly. For all\nexceptions and interrupts that occur in V86 mode, the processor vectors\nthrough the IDT. The IDT entry for an interrupt or exception that occurs in\na V86 task must contain either:\n\n    A task gate.\n\n    An 80386 trap gate (type 14) or an 80386 interrupt gate (type 15),\n     which must point to a nonconforming, privilege-level zero, code\n     segment.\n\nInterrupts and exceptions that have 80386 trap or interrupt gates in the\nIDT vector to the appropriate handler procedure at privilege-level zero. The\ncontents of all the 8086 segment registers are stored on the PL 0 stack.\nFigure 15-3 shows the format of the PL 0 stack after an exception or\ninterrupt that occurs while a V86 task is executing an 8086 program.\n\nAfter the processor stores all the 8086 segment registers on the PL 0\nstack, it loads all the segment registers with zeros before starting to\nexecute the handler procedure. This permits the interrupt handler to safely\nsave and restore the DS, ES, FS, and GS registers as 80386 selectors.\nInterrupt handlers that may be invoked in the context of either a regular\ntask or a V86 task, can use the same prolog and epilog code for register\nsaving regardless of the kind of task. Restoring zeros to these registers\nbefore execution of the IRET does not cause a trap in the interrupt handler.\nInterrupt procedures that expect values in the segment registers or that\nreturn values via segment registers have to use the register images stored\non the PL 0 stack. Interrupt handlers that need to know whether the\ninterrupt occurred in V86 mode can examine the VM bit in the stored EFLAGS\nimage.\n\nAn interrupt handler passes control to the V86 monitor if the VM bit is set\nin the EFLAGS image stored on the stack and the interrupt or exception is\none that the monitor needs to handle. The V86 monitor may either:\n\n    Handle the interrupt completely within the V86 monitor.\n    Invoke the 8086 program's interrupt handler.\n\nReflecting an interrupt or exception back to the 8086 code involves the\nfollowing steps:\n\n  1.  Refer to the 8086 interrupt vector to locate the appropriate handler\n      procedure.\n\n  2.  Store the state of the 8086 program on the privilege-level three\n      stack.\n\n  3.  Change the return link on the privilege-level zero stack to point to\n      the privilege-level three handler procedure.\n\n  4.  Execute an IRET so as to pass control to the handler.\n\n  5.  When the IRET by the privilege-level three handler again traps to the\n      V86 monitor, restore the return link on the privilege-level zero stack\n      to point to the originally interrupted, privilege-level three\n      procedure.\n\n  6.  Execute an IRET so as to pass control back to the interrupted\n      procedure.\n\n\nFigure 15-3. PL 0 Stack after Interrupt in V86 Task\n\n\n                WITHOUT ERROR CODE            WITH ERROR CODE\n                 31            0               31            0\n                ͻ\u0011Ŀ        ͻ\u0011Ŀ\n                OLD GS              OLD GS      \n                ͹   SS:ESP     ͹   SS:ESP\n      D  O      OLD FS   FROM TSS    OLD FS   FROM TSS\n      I  F      ͹              ͹\n      R         OLD DS               OLD DS \n      E  E      ͹              ͹\n      C  X      OLD ES               OLD ES \n      T  P      ͹              ͹\n      I  A      OLD SS               OLD SS \n      O  N      ͹              ͹\n      N  S          OLD ESP                     OLD ESP   \n         I      ͹              ͹\n        O        OLD EFLAGS                  OLD EFLAGS  \n        N      ͹              ͹\n               OLD CS    NEW        OLD CS \n       \u001f        ͹  SS:EIP      ͹\n                    OLD EIP                    OLD EIP      NEW\n                ͹\u0011         ͹  SS:EIP\n                                              ERROR CODE      \n                \u0007              \u0007              ͹\u0011\n                \u0007              \u0007                            \n                \u0007              \u0007              \u0007              \u0007\n\n\n15.4  Additional Sensitive Instructions\n\nWhen the 80386 is executing in V86 mode, the instructions PUSHF, POPF,\nINT n, and IRET are sensitive to IOPL. The instructions IN, INS, OUT, and\nOUTS, which are ordinarily sensitive in protected mode, are not sensitive\nin V86 mode. Following is a complete list of instructions that are sensitive\nin V86 mode:\n\n   CLI      Clear Interrupt-Enable Flag\n   STI      Set Interrupt-Enable Flag\n   LOCK     Assert Bus-Lock Signal\n   PUSHF    Push Flags\n   POPF     Pop Flags\n   INT n    Software Interrupt\n   RET      Interrupt Return\n\nCPL is always three in V86 mode; therefore, if IOPL < 3, these instructions\nwill trigger a general-protection exceptions. These instructions are made\nsensitive so that their functions can be simulated by the V86 monitor.\n\n\n15.4.1  Emulating 8086 Operating System Calls\n\nINT n is sensitive so that the V86 monitor can intercept calls to the\n8086 OS. Many 8086 operating systems are called by pushing parameters onto\nthe stack, then executing an INT n instruction. If IOPL < 3, INT n\ninstructions will be intercepted by the V86 monitor. The V86 monitor can\nthen emulate the function of the 8086 operating system or reflect the\ninterrupt back to the 8086 operating system in V86 mode.\n\n\n15.4.2  Virtualizing the Interrupt-Enable Flag\n\nWhen the processor is executing 8086 code in a V86 task, the instructions\nPUSHF, POPF, and IRET are sensitive to IOPL so that the V86 monitor can\ncontrol changes to the interrupt-enable flag (IF). Other instructions that\naffect IF (STI and CLI) are IOPL sensitive both in 8086 code and in\n80386/80386 code.\n\nMany 8086 programs that were designed to execute on single-task systems set\nand clear IF to control interrupts. However, when these same programs are\nexecuted in a multitasking environment, such control of IF can be\ndisruptive. If IOPL is less than three, all instructions that change or\ninterrogate IF will trap to the V86 monitor. The V86 monitor can then\ncontrol IF in a manner that both suits the needs of the larger environment\nand is transparent to the 8086 program.\n\n\n15.5  Virtual I/O\n\nMany 8086 programs that were designed to execute on single-task systems use\nI/O devices directly. However, when these same programs are executed in a\nmultitasking environment, such use of devices can be disruptive. The 80386\nprovides sufficient flexibility to control I/O in a manner that both suits\nthe needs of the new environment and is transparent to the 8086 program.\nDesigners may take any of several possible approaches to controlling I/O:\n\n    Implement or emulate the 8086 operating system as an 80386 program and\n     require the 8086 application to do I/O via software interrupts to the\n     operating system, trapping all attempts to do I/O directly.\n\n    Let the 8086 program take complete control of all I/O.\n\n    Selectively trap and emulate references that a task makes to specific\n     I/O ports.\n\n    Trap or redirect references to memory-mapped I/O addresses.\n\nThe method of controlling I/O depends upon whether I/O ports are I/O mapped\nor memory mapped.\n\n\n15.5.1  I/O-Mapped I/O\n\nI/O-mapped I/O in V86 mode differs from protected mode only in that the\nprotection mechanism does not consult IOPL when executing the I/O\ninstructions IN, INS, OUT, OUTS. Only the I/O permission bit map controls\nthe right for V86 tasks to execute these I/O instructions.\n\nThe I/O permission map traps I/O instructions selectively depending on the\nI/O addresses to which they refer. The I/O permission bit map of each V86\ntask determines which I/O addresses are trapped for that task. Because each\ntask may have a different I/O permission bit map, the addresses trapped for\none task may be different from those trapped for others. Refer to Chapter 8\nfor more information about the I/O permission map.\n\n\n15.5.2  Memory-Mapped I/O\n\nIn hardware designs that utilize memory-mapped I/O, the paging facilities\nof the 80386 can be used to trap or redirect I/O operations. Each task that\nexecutes memory-mapped I/O must have a page (or pages) for the memory-mapped\naddress space. The V86 monitor may control memory-mapped I/O by any of\nthese means:\n\n    Assign the memory-mapped page to appropriate physical addresses.\n     Different tasks may have different physical addresses, thereby\n     preventing the tasks from interfering with each other.\n\n    Cause a trap to the monitor by forcing a page fault on the\n     memory-mapped page. Read-only pages trap writes. Not-present pages trap\n     both reads and writes.\n\nIntervention for every I/O might be excessive for some kinds of I/O\ndevices. A page fault can still be used in this case to cause intervention\non the first I/O operation. The monitor can then at least make sure that the\ntask has exclusive access to the device. Then the monitor can change the\npage status to present and read/write, allowing subsequent I/O to proceed at\nfull speed.\n\n\n15.5.3  Special I/O Buffers\n\nBuffers of intelligent controllers (for example, a bit-mapped graphics\nbuffer) can also be virtualized via page mapping. The linear space for the\nbuffer can be mapped to a different physical space for each virtual 8086\ntask. The V86 monitor can then assume responsibility for spooling the data\nor assigning the virtual buffer to the real buffer at appropriate times.\n\n\n15.6  Differences From 8086\n\nIn general, V86 mode will correctly execute software designed for the 8086,\n8088, 80186, and 80188. Following is a list of the minor differences between\n8086 execution on the 80386 and on an 8086.\n\n  1.  Instruction clock counts.\n\n      The 80386 takes fewer clocks for most instructions than the \n      8086/8088. The areas most likely to be affected are:\n\n        Delays required by I/O devices between I/O operations.\n\n        Assumed delays with 8086/8088 operating in parallel with an 8087.\n\n  2.  Divide exceptions point to the DIV instruction.\n\n      Divide exceptions on the 80386 always leave the saved CS:IP value\n      pointing to the instruction that failed. On the 8086/8088, the CS:IP\n      value points to the next instruction.\n\n  3.  Undefined 8086/8088 opcodes.\n\n      Opcodes that were not defined for the 8086/8088 will cause exception\n      6 or will execute one of the new instructions defined for the 80386.\n\n  4.  Value written by PUSH SP.\n\n      The 80386 pushes a different value on the stack for PUSH SP than the\n      8086/8088. The 80386 pushes the value of SP before SP is incremented\n      as part of the push operation; the 8086/8088 pushes the value of SP\n      after it is incremented. If the value pushed is important, replace\n      PUSH SP instructions with the following three instructions:\n\n      PUSH  BP\n      MOV   BP, SP\n      XCHG  BP, [BP]\n\n      This code functions as the 8086/8088 PUSH SP instruction on the \n      80386.\n\n  5.  Shift or rotate by more than 31 bits.\n\n      The 80386 masks all shift and rotate counts to the low-order five\n      bits. This MOD 32 operation limits the count to a maximum of 31 bits,\n      thereby limiting the time that interrupt response is delayed while\n      the instruction is executing.\n\n  6.  Redundant prefixes.\n\n      The 80386 sets a limit of 15 bytes on instruction length. The only\n      way to violate this limit is by putting redundant prefixes before an\n      instruction. Exception 13 occurs if the limit on instruction length\n      is violated. The 8086/8088 has no instruction length limit.\n\n  7.  Operand crossing offset 0 or 65,535.\n\n      On the 8086, an attempt to access a memory operand that crosses\n      offset 65,535 (e.g., MOV a word to offset 65,535) or offset 0 (e.g.,\n      PUSH a word when SP = 1) causes the offset to wrap around modulo\n      65,536. The 80386 raises an exception in these casesexception 13 if\n      the segment is a data segment (i.e., if CS, DS, ES, FS, or GS is\n      being used to address the segment), exception 12 if the segment is a\n      stack segment (i.e., if SS is being used).\n\n  8.  Sequential execution across offset 65,535.\n\n      On the 8086, if sequential execution of instructions proceeds past\n      offset 65,535, the processor fetches the next instruction byte from\n      offset 0 of the same segment. On the 80386, the processor raises\n      exception 13 in such a case.\n\n  9.  LOCK is restricted to certain instructions.\n\n      The LOCK prefix and its corresponding output signal should only be\n      used to prevent other bus masters from interrupting a data movement\n      operation. The 80386 always asserts the LOCK signal during an XCHG\n      instruction with memory (even if the LOCK prefix is not used). LOCK\n      may only be used with the following 80386 instructions when they\n      update memory: BTS, BTR, BTC, XCHG, ADD, ADC, SUB, SBB, INC, DEC,\n      AND, OR, XOR, NOT, and NEG. An undefined-opcode exception (interrupt\n      6) results from using LOCK before any other instruction.\n\n 10.  Single-stepping external interrupt handlers.\n\n      The priority of the 80386 single-step exception is different from\n      that of the 8086/8088. The change prevents an external interrupt\n      handler from being single-stepped if the interrupt occurs while a\n      program is being single-stepped. The 80386 single-step exception has\n      higher priority that any external interrupt. The 80386 will still\n      single-step through an interrupt handler invoked by the INT\n      instructions or by an exception.\n\n  11.  IDIV exceptions for quotients of 80H or 8000H.\n\n      The 80386 can generate the largest negative number as a quotient for\n      the IDIV instruction. The 8086/8088 causes exception zero instead.\n\n 12.  Flags in stack.\n\n      The setting of the flags stored by PUSHF, by interrupts, and by\n      exceptions is different from that stored by the 8086 in bit positions\n      12 through 15. On the 8086 these bits are stored as ones, but in V86\n      mode bit 15 is always zero, and bits 14 through 12 reflect the last\n      value loaded into them.\n\n 13.  NMI interrupting NMI handlers.\n\n      After an NMI is recognized on the 80386, the NMI interrupt is masked\n      until an IRET instruction is executed.\n\n 14.  Coprocessor errors vector to interrupt 16.\n\n      Any 80386 system with a coprocessor must use interrupt vector 16 for\n      the coprocessor error exception. If an 8086/8088 system uses another\n      vector for the 8087 interrupt, both vectors should point to the\n      coprocessor-error exception handler.\n\n 15.  Numeric exception handlers should allow prefixes.\n\n      On the 80386, the value of CS:IP saved for coprocessor exceptions\n      points at any prefixes before an ESC instruction. On 8086/8088\n      systems, the saved CS:IP points to the ESC instruction itself.\n\n 16.  Coprocessor does not use interrupt controller.\n\n      The coprocessor error signal to the 80386 does not pass through an\n      interrupt controller (an 8087 INT signal does). Some instructions in\n      a coprocessor error handler may need to be deleted if they deal with\n      the interrupt controller.\n\n\n15.7  Differences From 80286 Real-Address Mode\n\nThe 80286 processor implements the bus lock function differently than the\n80386. This fact may or may not be apparent to 8086 programs, depending on\nhow the V86 monitor handles the LOCK prefix. LOCKed instructions are\nsensitive to IOPL; therefore, software designers can choose to emulate its\nfunction. If, however, 8086 programs are allowed to execute LOCK directly,\nprograms that use forms of memory locking specific to the 8086 may not\nexecute properly when transported to a specific application of the 80386.\n\nThe LOCK prefix and its corresponding output signal should only be used to\nprevent other bus masters from interrupting a data movement operation. LOCK\nmay only be used with the following 80386 instructions when they modify\nmemory. An undefined-opcode exception results from using LOCK before any\nother instruction.\n\n    Bit test and change: BTS, BTR, BTC.\n    Exchange: XCHG.\n    One-operand arithmetic and logical: INC, DEC, NOT, and NEG.\n    Two-operand arithmetic and logical: ADD, ADC, SUB, SBB, AND, OR, XOR.\n\nA locked instruction is guaranteed to lock only the area of memory defined\nby the destination operand, but may lock a larger memory area. For example,\ntypical 8086 and 80286 configurations lock the entire physical memory space.\nWith the 80386, the defined area of memory is guaranteed to be locked\nagainst access by a processor executing a locked instruction on exactly the\nsame memory area, i.e., an operand with identical starting address and\nidentical length.\n\n\nChapter 16  Mixing 16-Bit and 32 Bit Code\n\n\n\nThe 80386 running in protected mode is a 32-bit microprocessor, but it is\ndesigned to support 16-bit processing at three levels:\n\n  1.  Executing 8086/80286 16-bit programs efficiently with complete \n      compatibility.\n\n  2.  Mixing 16-bit modules with 32-bit modules.\n\n  3.  Mixing 16-bit and 32-bit addresses and operands within one module.\n\nThe first level of support for 16-bit programs has already been discussed\nin Chapter 13, Chapter 14, and Chapter 15. This chapter shows how 16-bit\nand 32-bit modules can cooperate with one another, and how one module can\nutilize both 16-bit and 32-bit operands and addressing.\n\nThe 80386 functions most efficiently when it is possible to distinguish\nbetween pure 16-bit modules and pure 32-bit modules. A pure 16-bit module\nhas these characteristics:\n\n    All segments occupy 64 Kilobytes or less.\n    Data items are either 8 bits or 16 bits wide.\n    Pointers to code and data have 16-bit offsets.\n    Control is transferred only among 16-bit segments.\n\nA pure 32-bit module has these characteristics:\n\n    Segments may occupy more than 64 Kilobytes (zero bytes to 4 \n     gigabytes).\n\n    Data items are either 8 bits or 32 bits wide.\n\n    Pointers to code and data have 32-bit offsets.\n\n    Control is transferred only among 32-bit segments.\n\nPure 16-bit modules do exist; they are the modules designed for 16-bit\nmicroprocessors. Pure 32-bit modules may exist in new programs designed\nexplicitly for the 80386. However, as systems designers move applications\nfrom 16-bit processors to the 32-bit 80386, it will not always be possible\nto maintain these ideals of pure 16-bit or 32-bit modules. It may be\nexpedient to execute old 16-bit modules in a new 32-bit environment without\nmaking source-code changes to the old modules if any of the following\nconditions is true:\n\n    Modules will be converted one-by-one from 16-bit environments to\n     32-bit environments.\n\n    Older, 16-bit compilers and software-development tools will be\n     utilized in the new32-bit operating environment until new 32-bit\n     versions can be created.\n\n    The source code of 16-bit modules is not available for modification.\n\n    The specific data structures used by a given module inherently utilize\n     16-bit words.\n\n    The native word size of the source language is 16 bits.\n\nOn the 80386, 16-bit modules can be mixed with 32-bit modules. To design a\nsystem that mixes 16- and 32-bit code requires an understanding of the\nmechanisms that the 80386 uses to invoke and control its 32-bit and 16-bit\nfeatures.\n\n\n16.1  How the 80386 Implements 16-Bit and 32-Bit Features\n\nThe features of the architecture that permit the 80386 to work equally well\nwith 32-bit and 16-bit address and operand sizes include:\n\n    The D-bit (default bit) of code-segment descriptors, which determines\n     the default choice of operand-size and address-size for the\n     instructions of a code segment. (In real-address mode and V86 mode,\n     which do not use descriptors, the default is 16 bits.) A code segment\n     whose D-bit is set is known as a USE32 segment; a code segment whose\n     D-bit is zero is a USE16 segment. The D-bit eliminates the need to\n     encode the operand size and address size in instructions when all\n     instructions use operands and effective addresses of the same size.\n\n    Instruction prefixes that explicitly override the default choice of\n     operand size and address size (available in protected mode as well as\n     in real-address mode and V86 mode).\n\n    Separate 32-bit and 16-bit gates for intersegment control transfers\n     (including call gates, interrupt gates, and trap gates). The operand\n     size for the control transfer is determined by the type of gate, not by\n     the D-bit or prefix of the transfer instruction.\n\n    Registers that can be used both for 32-bit and 16-bit operands and\n     effective-address calculations.\n\n    The B-bit (big bit) of data-segment descriptors, which determines the\n     size of stack pointer (32-bit ESP or 16-bit SP) used by the CPU for\n     implicit stack references.\n\n\n16.2  Mixing 32-Bit and 16-Bit Operations\n\nThe 80386 has two instruction prefixes that allow mixing of 32-bit and\n16-bit operations within one segment:\n\n    The operand-size prefix (66H)\n    The address-size prefix (67H)\n\nThese prefixes reverse the default size selected by the D-bit. For example,\nthe processor can interpret the word-move instruction MOV mem, reg in any of\nfour ways:\n\n    In a USE32 segment:\n\n     1.  Normally moves 32 bits from a 32-bit register to a 32-bit\n         effective address in memory.\n\n     2.  If preceded by an operand-size prefix, moves 16 bits from a 16-bit\n         register to 32-bit effective address in memory.\n\n     3.  If preceded by an address-size prefix, moves 32 bits from a 32-bit\n         register to a16-bit effective address in memory.\n\n     4.  If preceded by both an address-size prefix and an operand-size\n         prefix, moves 16 bits from a 16-bit register to a 16-bit effective\n         address in memory.\n\n    In a USE16 segment:\n\n     1.  Normally moves 16 bits from a 16-bit register to a 16-bit\n         effective address in memory.\n\n     2.  If preceded by an operand-size prefix, moves 32 bits from a 32-bit\n         register to 16-bit effective address in memory.\n\n     3.  If preceded by an address-size prefix, moves 16 bits from a 16-bit\n         register to a32-bit effective address in memory.\n\n     4.  If preceded by both an address-size prefix and an operand-size\n         prefix, moves 32 bits from a 32-bit register to a 32-bit effective\n         address in memory.\n\nThese examples illustrate that any instruction can generate any combination\nof operand size and address size regardless of whether the instruction is in\na USE16 or USE32 segment. The choice of the USE16 or USE32 attribute for a\ncode segment is based upon these criteria:\n\n  1.  The need to address instructions or data in segments that are larger\n      than 64 Kilobytes.\n\n  2.  The predominant size of operands.\n\n  3.  The addressing modes desired. (Refer to Chapter 17 for an explanation\n      of the additional addressing modes that are available when 32-bit\n      addressing is used.)\n\nChoosing a setting of the D-bit that is contrary to the predominant size of\noperands requires the generation of an excessive number of operand-size\nprefixes.\n\n\n16.3  Sharing Data Segments Among Mixed Code Segments\n\nBecause the choice of operand size and address size is defined in code\nsegments and their descriptors, data segments can be shared freely among\nboth USE16 and USE32 code segments. The only limitation is the one imposed\nby pointers with 16-bit offsets, which can only point to the first 64\nKilobytes of a segment. When a data segment that contains more than 64\nKilobytes is to be shared among USE32 and USE16 segments, the data that is\nto be accessed by the USE16 segments must be located within the first 64\nKilobytes.\n\nA stack that spans addresses less than 64K can be shared by both USE16 and\nUSE32 code segments. This class of stacks includes:\n\n    Stacks in expand-up segments with G=0 and B=0.\n\n    Stacks in expand-down segments with G=0 and B=0.\n\n    Stacks in expand-up segments with G=1 and B=0, in which the stack is\n     contained completely within the lower 64 Kilobytes. (Offsets greater\n     than 64K can be used for data, other than the stack, that is not\n     shared.)\n\nThe B-bit of a stack segment cannot, in general, be used to change the size\nof stack used by a USE16 code segment. The size of stack pointer used by the\nprocessor for implicit stack references is controlled by the B-bit of the\ndata-segment descriptor for the stack. Implicit references are those caused\nby interrupts, exceptions, and instructions such as PUSH, POP, CALL, and\nRET. One might be tempted, therefore, to try to increase beyond 64K the\nsize of the stack used by 16-bit code simply by supplying a larger stack\nsegment with the B-bit set. However, the B-bit does not control explicit\nstack references, such as accesses to parameters or local variables. A USE16\ncode segment can utilize a \"big\" stack only if the code is modified so that\nall explicit references to the stack are preceded by the address-size\nprefix, causing those references to use 32-bit addressing.\n\nIn big, expand-down segments (B=1, G=1, and E=1), all offsets are greater\nthan 64K, therefore USE16 code cannot utilize such a stack segment unless\nthe code segment is modified to employ 32-bit addressing. (Refer to Chapter\n6 for a review of the B, G, and E bits.)\n\n\n16.4  Transferring Control Among Mixed Code Segments\n\nWhen transferring control among procedures in USE16 and USE32 code\nsegments, programmers must be aware of three points:\n\n    Addressing limitations imposed by pointers with 16-bit offsets.\n\n    Matching of operand-size attribute in effect for the CALL/RET pair and\n     theInterrupt/IRET pair so as to manage the stack correctly.\n\n    Translation of parameters, especially pointer parameters.\n\nClearly, 16-bit effective addresses cannot be used to address data or code\nlocated beyond 64K in a 32-bit segment, nor can large 32-bit parameters be\nsqueezed into a 16-bit word; however, except for these obvious limits, most\ninterfacing problems between 16-bit and 32-bit modules can be solved. Some\nsolutions involve inserting interface procedures between the procedures in\nquestion.\n\n\n16.4.1  Size of Code-Segment Pointer\n\nFor control-transfer instructions that use a pointer to identify the next\ninstruction (i.e., those that do not use gates), the size of the offset\nportion of the pointer is determined by the operand-size attribute. The\nimplications of the use of two different sizes of code-segment pointer are:\n\n    JMP, CALL, or RET from 32-bit segment to 16-bit segment is always\n     possible using a 32-bit operand size.\n\n    JMP, CALL, or RET from 16-bit segment using a 16-bit operand size\n     cannot address the target in a 32-bit segment if the address of the\n     target is greater than 64K.\n\nAn interface procedure can enable transfers from USE16 segments to 32-bit\naddresses beyond 64K without requiring modifications any more extensive than\nrelinking or rebinding the old programs. The requirements for such an\ninterface procedure are discussed later in this chapter.\n\n\n16.4.2  Stack Management for Control Transfers\n\nBecause stack management is different for 16-bit CALL/RET than for 32-bit\nCALL/RET, the operand size of RET must match that of CALL. (Refer to Figure\n16-1.) A 16-bit CALL pushes the 16-bit IP and (for calls between privilege\nlevels) the 16-bit SP register. The corresponding RET must also use a 16-bit\noperand size to POP these 16-bit values from the stack into the 16-bit\nregisters. A 32-bit CALL pushes the 32-bit EIP and (for interlevel calls)\nthe 32-bit ESP register. The corresponding RET must also use a 32-bit\noperand size to POP these 32-bit values from the stack into the 32-bit\nregisters. If the two halves of a CALL/RET pair do not have matching operand\nsizes, the stack will not be managed correctly and the values of the\ninstruction pointer and stack pointer will not be restored to correct\nvalues.\n\nWhen the CALL and its corresponding RET are in segments that have D-bits\nwith the same values (i.e., both have 32-bit defaults or both have 16-bit\ndefaults), there is no problem. When the CALL and its corresponding RET are\nin segments that have different D-bit values, however, programmers (or\nprogram development software) must ensure that the CALL and RET match.\n\nThere are three ways to cause a 16-bit procedure to execute a 32-bit call:\n\n  1.  Use a 16-bit call to a 32-bit interface procedure that then uses a\n      32-bit call to invoke the intended target.\n\n  2.  Bind the 16-bit call to a 32-bit call gate.\n\n  3.  Modify the 16-bit procedure, inserting an operand-size prefix before\n      the call, thereby changing it to a 32-bit call.\n\nLikewise, there are three ways to cause a 32-bit procedure to execute a\n16-bit call:\n\n  1.  Use a 32-bit call to a 32-bit interface procedure that then uses a\n      16-bit call to invoke the intended target.\n\n  2.  Bind the 32-bit call to a 16-bit call gate.\n\n  3.  Modify the 32-bit procedure, inserting an operand-size prefix before\n      the call, thereby changing it to a 16-bit call. (Be certain that the\n      return offset does not exceed 64K.)\n\nProgrammers can utilize any of the preceding methods to make a CALL in a\nUSE16 segment match the corresponding RET in a USE32 segment, or to make a\nCALL in a USE32 segment match the corresponding RET in a USE16 segment.\n\n\nFigure 16-1.  Stack after Far 16-Bit and 32-Bit Calls\n\n                           WITHOUT PRIVILEGE TRANSITION\n\n               AFTER 16-BIT CALL                AFTER 32-BIT CALL\n\n               \u000731             \u00070               \u000731             \u00070\n       D  O                                                  \n       I  F    ͹                ͹\n       R                       \n       E  E    ͹                ͹\n       C  X     PARM2  PARM1                      PARM2     \n       T  P    ͹                ͹\n       I  A      CS     IP   \u0011SP                PARM1     \n       O  N    ͹                ͹\n       N  S                                     CS   \n          I    ͹                ͹\n         O                                         EIP      \u0011ESP\n         N    ͹                ͹\n                                                            \n        \u001f      \u0007               \u0007                \u0007               \u0007\n\n                           WITH PRIVILEGE TRANSITION\n\n               AFTER 16-BIT CALL                AFTER 32-BIT CALL\n\n       D  O     31            0                  31            0\n       I  F    ͻ                ͻ\n       R          SS    SP                     SS   \n       E  E    ͹                ͹\n       C  X     PARM2  PARM1                       ESP      \n       T  P    ͹                ͹\n       I  A      CS     IP   \u0011SP                PARM2     \n       O  N    ͹                ͹\n       N  S                                        PARM1     \n          I    ͹                ͹\n         O                                     CS   \n         N    ͹                ͹\n                                                   EIP      \u0011ESP\n        \u001f      ͹                ͹\n                                                             \n               \u0007               \u0007                \u0007               \u0007\n\n\n16.4.2.1  Controlling the Operand-Size for a Call\n\nWhen the selector of the pointer referenced by a CALL instruction selects a\nsegment descriptor, the operand-size attribute in effect for the CALL\ninstruction is determined by the D-bit in the segment descriptor and by any\noperand-size instruction prefix.\n\nWhen the selector of the pointer referenced by a CALL instruction selects a\ngate descriptor, the type of call is determined by the type of call gate. A\ncall via an 80286 call gate (descriptor type 4)  always has a 16-bit\noperand-size attribute; a call via an 80386 call gate (descriptor type 12)\nalways has a 32-bit operand-size attribute. The offset of the target\nprocedure is taken from the gate descriptor; therefore, even a 16-bit\nprocedure can call a procedure that is located more than 64 kilobytes from\nthe base of a 32-bit segment, because a 32-bit call gate contains a 32-bit\ntarget offset.\n\nAn unmodified 16-bit code segment that has run successfully on an 8086 or\nreal-mode 80286 will always have a D-bit of zero and will not use\noperand-size override prefixes; therefore, it will always execute 16-bit\nversions of CALL. The only modification needed to make a16-bit procedure\neffect a 32-bit call is to relink the call to an 80386 call gate.\n\n\n16.4.2.2  Changing Size of Call\n\nWhen adding 32-bit gates to 16-bit procedures, it is important to consider\nthe number of parameters. The count field of the gate descriptor specifies\nthe size of the parameter string to copy from the current stack to the stack\nof the more privileged procedure. The count field of a 16-bit gate specifies\nthe number of words to be copied, whereas the count field of a 32-bit gate\nspecifies the number of doublewords to be copied; therefore, the 16-bit\nprocedure must use an even number of words as parameters.\n\n\n16.4.3  Interrupt Control Transfers\n\nWith a control transfer due to an interrupt or exception, a gate is always\ninvolved. The operand-size attribute for the interrupt is determined by the\ntype of IDT gate.\n\nA 386 interrupt or trap gate (descriptor type 14 or 15) to a 32-bit\ninterrupt procedure can be used to interrupt either 32-bit or 16-bit\nprocedures. However, it is not generally feasible to permit an interrupt or\nexception to invoke a 16-bit handler procedure when 32-bit code is\nexecuting, because a 16-bit interrupt procedure has a return offset of only\n16-bits on its stack. If the 32-bit procedure is executing at an address\ngreater than 64K, the 16-bit interrupt procedure cannot return correctly.\n\n\n16.4.4  Parameter Translation\n\nWhen segment offsets or pointers (which contain segment offsets) are passed\nas parameters between 16-bit and 32-bit procedures, some translation is\nrequired. Clearly, if a 32-bit procedure passes a pointer to data located\nbeyond 64K to a 16-bit procedure, the 16-bit procedure cannot utilize it.\nBeyond this natural limitation, an interface procedure can perform any\nformat conversion between 32-bit and 16-bit pointers that may be needed.\n\nParameters passed by value between 32-bit and 16-bit code may also require\ntranslation between 32-bit and 16-bit formats. Such translation requirements\nare application dependent. Systems designers should take care to limit the\nrange of values passed so that such translations are possible.\n\n\n16.4.5  The Interface Procedure\n\nInterposing an interface procedure between 32-bit and 16-bit procedures can\nbe the solution to any of several interface requirements:\n\n    Allowing procedures in 16-bit segments to transfer control to\n     instructions located beyond 64K in 32-bit segments.\n\n    Matching of operand size for CALL/RET.\n\n    Parameter translation.\n\nInterface procedures between USE32 and USE16 segments can be constructed\nwith these properties:\n\n    The procedures reside in a code segment whose D-bit is set, indicating\n     a default operand size of 32-bits.\n\n    All entry points that may be called by 16-bit procedures have offsets\n     that are actually less than 64K.\n\n    All points to which called 16-bit procedures may return also lie\n     within 64K.\n\nThe interface procedures do little more than call corresponding procedures\nin other segments. There may be two kinds of procedures:\n\n    Those that are called by 16-bit procedures and call 32-bit procedures.\n     These interface procedures are called by 16-bit CALLs and use the\n     operand-size prefix before RET instructions to cause a 16-bit RET.\n     CALLs to 32-bit segments are 32-bit calls (by default, because the\n     D-bit is set), and the 32-bit code returns with 32-bit RET\n     instructions.\n\n    Those that are called by 32-bit procedures and call 16-bit procedures.\n     These interface procedures are called by 32-bit CALL instructions, and\n     return with 32-bit RET instructions (by default, because the D-bit is\n     set).  CALLs to 16-bit procedures use the operand-size prefix;\n     procedures in the 16-bit code return with 16-bit RET instructions.\n\n\n                         PART IV  INSTRUCTION SET                          \n\n\nChapter 17  80386 Instruction Set\n\n\n\nThis chapter presents instructions for the 80386 in alphabetical order. For\neach instruction, the forms are given for each operand combination,\nincluding object code produced, operands required, execution time, and a\ndescription. For each instruction, there is an operational description and a\nsummary of exceptions generated.\n\n\n17.1  Operand-Size and Address-Size Attributes\n\nWhen executing an instruction, the 80386 can address memory using either 16\nor 32-bit addresses. Consequently, each instruction that uses memory\naddresses has associated with it an address-size attribute of either 16 or\n32 bits. 16-bit addresses imply both the use of a 16-bit displacement in\nthe instruction and the generation of a 16-bit address offset (segment\nrelative address) as the result of the effective address calculation.\n32-bit addresses imply the use of a 32-bit displacement and the generation\nof a 32-bit address offset. Similarly, an instruction that accesses words\n(16 bits) or doublewords (32 bits) has an operand-size attribute of either\n16 or 32 bits.\n\nThe attributes are determined by a combination of defaults, instruction\nprefixes, and (for programs executing in protected mode) size-specification\nbits in segment descriptors.\n\n\n17.1.1  Default Segment Attribute\n\nFor programs executed in protected mode, the D-bit in executable-segment\ndescriptors determines the default attribute for both address size and\noperand size. These default attributes apply to the execution of all\ninstructions in the segment. A value of zero in the D-bit sets the default\naddress size and operand size to 16 bits; a value of one, to 32 bits.\n\nPrograms that execute in real mode or virtual-8086 mode have 16-bit\naddresses and operands by default.\n\n\n17.1.2  Operand-Size and Address-Size Instruction Prefixes\n\nThe internal encoding of an instruction can include two byte-long prefixes:\nthe address-size prefix, 67H, and the operand-size prefix, 66H. (A later\nsection, \"Instruction Format,\" shows the position of the prefixes in an\ninstruction's encoding.) These prefixes override the default segment\nattributes for the instruction that follows. Table 17-1 shows the effect of\neach possible combination of defaults and overrides.\n\n\n17.1.3  Address-Size Attribute for Stack\n\nInstructions that use the stack implicitly (for example: POP EAX also have\na stack address-size attribute of either 16 or 32 bits. Instructions with a\nstack address-size attribute of 16 use the 16-bit SP stack pointer register;\ninstructions with a stack address-size attribute of 32 bits use the 32-bit\nESP register to form the address of the top of the stack.\n\nThe stack address-size attribute is controlled by the B-bit of the\ndata-segment descriptor in the SS register. A value of zero in the B-bit\nselects a stack address-size attribute of 16; a value of one selects a stack\naddress-size attribute of 32.\n\n\nTable 17-1. Effective Size Attributes\n\nSegment Default D = ...      0    0    0    0    1    1    1    1\nOperand-Size Prefix 66H      N    N    Y    Y    N    N    Y    Y\nAddress-Size Prefix 67H      N    Y    N    Y    N    Y    N    Y\n\nEffective Operand Size      16   16   32   32   32   32   16   16\nEffective Address Size      16   32   16   32   32   16   32   16\n\nY = Yes, this instruction prefix is present\nN = No, this instruction prefix is not present\n\n\n17.2  Instruction Format\n\nAll instruction encodings are subsets of the general instruction format\nshown in Figure 17-1. Instructions consist of optional instruction\nprefixes, one or two primary opcode bytes, possibly an address specifier\nconsisting of the ModR/M byte and the SIB (Scale Index Base) byte, a\ndisplacement, if required, and an immediate data field, if required.\n\nSmaller encoding fields can be defined within the primary opcode or\nopcodes. These fields define the direction of the operation, the size of the\ndisplacements, the register encoding, or sign extension; encoding fields\nvary depending on the class of operation.\n\nMost instructions that can refer to an operand in memory have an addressing\nform byte following the primary opcode byte(s). This byte, called the ModR/M\nbyte, specifies the address form to be used. Certain encodings of the ModR/M\nbyte indicate a second addressing byte, the SIB (Scale Index Base) byte,\nwhich follows the ModR/M byte and is required to fully specify the\naddressing form.\n\nAddressing forms can include a displacement immediately following either\nthe ModR/M or SIB byte. If a displacement is present, it can be 8-, 16- or\n32-bits.\n\nIf the instruction specifies an immediate operand, the immediate operand\nalways follows any displacement bytes. The immediate operand, if specified,\nis always the last field of the instruction.\n\nThe following are the allowable instruction prefix codes:\n\n   F3H    REP prefix (used only with string instructions)\n   F3H    REPE/REPZ prefix (used only with string instructions\n   F2H    REPNE/REPNZ prefix (used only with string instructions)\n   F0H    LOCK prefix\n\nThe following are the segment override prefixes:\n\n   2EH    CS segment override prefix\n   36H    SS segment override prefix\n   3EH    DS segment override prefix\n   26H    ES segment override prefix\n   64H    FS segment override prefix\n   65H    GS segment override prefix\n   66H    Operand-size override\n   67H    Address-size override\n\n\nFigure 17-1.  80386 Instruction Format\n\n      ͻ\n        INSTRUCTION     ADDRESS-        OPERAND-      SEGMENT     \n          PREFIX       SIZE PREFIX    SIZE PREFIX     OVERRIDE    \n      ͹\n           0 OR 1         0 OR 1           0 OR 1         0 OR 1     \n                                     Ķ\n                              NUMBER OF BYTES                        \n      ͼ\n\n      ͻ\n        OPCODE    MODR/M     SIB     DISPLACEMENT     IMMEDIATE  \n                                                                 \n      ͹\n        1 OR 2     0 OR 1    0 OR 1      0,1,2 OR 4       0,1,2 OR 4 \n                                     Ķ\n                              NUMBER OF BYTES                        \n      ͼ\n\n\n17.2.1  ModR/M and SIB Bytes\n\nThe ModR/M and SIB bytes follow the opcode byte(s) in many of the 80386\ninstructions. They contain the following information:\n\n    The indexing type or register number to be used in the instruction\n    The register to be used, or more information to select the instruction\n    The base, index, and scale information\n\nThe ModR/M byte contains three fields of information:\n\n    The mod field, which occupies the two most significant bits of the \n     byte, combines with the r/m field to form 32 possible values: eight\n     registers and 24 indexing modes\n\n    The reg field, which occupies the next three bits following the mod\n     field, specifies either a register number or three more bits of opcode\n     information. The meaning of the reg field is determined by the first\n     (opcode) byte of the instruction.\n\n    The r/m field, which occupies the three least significant bits of the\n     byte, can specify a register as the location of an operand, or can form\n     part of the addressing-mode encoding in combination with the field as\n     described above\n\nThe based indexed and scaled indexed forms of 32-bit addressing require the\nSIB byte. The presence of the SIB byte is indicated by certain encodings of\nthe ModR/M byte. The SIB byte then includes the following fields:\n\n    The ss field, which occupies the two most significant bits of the\n     byte, specifies the scale factor\n\n    The index field, which occupies the next three bits following the ss\n     field and specifies the register number of the index register\n\n    The base field, which occupies the three least significant bits of the\n     byte, specifies the register number of the base register\n\nFigure 17-2 shows the formats of the ModR/M and SIB bytes.\n\nThe values and the corresponding addressing forms of the ModR/M and SIB\nbytes are shown in Tables 17-2, 17-3, and 17-4. The 16-bit addressing\nforms specified by the ModR/M byte are in Table 17-2. The 32-bit addressing\nforms specified by ModR/M are in Table 17-3. Table 17-4 shows the 32-bit\naddressing forms specified by the SIB byte\n\n\nFigure 17-2.  ModR/M and SIB Byte Formats\n\n                                 MODR/M BYTE\n\n                     7    6    5    4    3    2    1    0\n                    ͻ\n                      MOD    REG/OPCODE       R/M     \n                    ͼ\n\n                          SIB (SCALE INDEX BASE) BYTE\n\n                     7    6    5    4    3    2    1    0\n                    ͻ\n                       SS       INDEX        BASE     \n                    ͼ\n\n\nTable 17-2. 16-Bit Addressing Forms with the ModR/M Byte\n\n\nr8(/r)                     AL    CL    DL    BL    AH    CH    DH    BH\nr16(/r)                    AX    CX    DX    BX    SP    BP    SI    DI\nr32(/r)                    EAX   ECX   EDX   EBX   ESP   EBP   ESI   EDI\n/digit (Opcode)            0     1     2     3     4     5     6     7\nREG =                      000   001   010   011   100   101   110   111\n\n   Effective\nAddress\ndisp8 denotes an 8-bit displacement following the ModR/M byte, to be\nsign-extended and added to the index. disp16 denotes a 16-bit displacement\nfollowing the ModR/M byte, to be added to the index. Default segment\nregister is SS for the effective addresses containing a BP index, DS for\nother effective addresses.Ŀ Mod R/M ModR/M Values in HexadecimalĿ\n\n[BX + SI]            000   00    08    10    18    20    28    30    38\n[BX + DI]            001   01    09    11    19    21    29    31    39\n[BP + SI]            010   02    0A    12    1A    22    2A    32    3A\n[BP + DI]            011   03    0B    13    1B    23    2B    33    3B\n[SI]             00  100   04    0C    14    1C    24    2C    34    3C\n[DI]                 101   05    0D    15    1D    25    2D    35    3D\ndisp16               110   06    0E    16    1E    26    2E    36    3E\n[BX]                 111   07    0F    17    1F    27    2F    37    3F\n\n[BX+SI]+disp8        000   40    48    50    58    60    68    70    78\n[BX+DI]+disp8        001   41    49    51    59    61    69    71    79\n[BP+SI]+disp8        010   42    4A    52    5A    62    6A    72    7A\n[BP+DI]+disp8        011   43    4B    53    5B    63    6B    73    7B\n[SI]+disp8       01  100   44    4C    54    5C    64    6C    74    7C\n[DI]+disp8           101   45    4D    55    5D    65    6D    75    7D\n[BP]+disp8           110   46    4E    56    5E    66    6E    76    7E\n[BX]+disp8           111   47    4F    57    5F    67    6F    77    7F\n\n[BX+SI]+disp16       000   80    88    90    98    A0    A8    B0    B8\n[BX+DI]+disp16       001   81    89    91    99    A1    A9    B1    B9\n[BX+SI]+disp16       010   82    8A    92    9A    A2    AA    B2    BA\n[BX+DI]+disp16       011   83    8B    93    9B    A3    AB    B3    BB\n[SI]+disp16      10  100   84    8C    94    9C    A4    AC    B4    BC\n[DI]+disp16          101   85    8D    95    9D    A5    AD    B5    BD\n[BP]+disp16          110   86    8E    96    9E    A6    AE    B6    BE\n[BX]+disp16          111   87    8F    97    9F    A7    AF    B7    BF\n\nEAX/AX/AL            000   C0    C8    D0    D8    E0    E8    F0    F8\nECX/CX/CL            001   C1    C9    D1    D9    E1    E9    F1    F9\nEDX/DX/DL            010   C2    CA    D2    DA    E2    EA    F2    FA\nEBX/BX/BL            011   C3    CB    D3    DB    E3    EB    F3    FB\nESP/SP/AH        11  100   C4    CC    D4    DC    E4    EC    F4    FC\nEBP/BP/CH            101   C5    CD    D5    DD    E5    ED    F5    FD\nESI/SI/DH            110   C6    CE    D6    DE    E6    EE    F6    FE\nEDI/DI/BH            111   C7    CF    D7    DF    E7    EF    F7    FF\n\n\n\nNOTES:\n  disp8 denotes an 8-bit displacement following the ModR/M byte, to be\n  sign-extended and added to the index. disp16 denotes a 16-bit displacement\n  following the ModR/M byte, to be added to the index. Default segment\n  register is SS for the effective addresses containing a BP index, DS for\n  other effective addresses.\n\n\n\nTable 17-3. 32-Bit Addressing Forms with the ModR/M Byte\n\n\nr8(/r)                     AL    CL    DL    BL    AH    CH    DH    BH\nr16(/r)                    AX    CX    DX    BX    SP    BP    SI    DI\nr32(/r)                    EAX   ECX   EDX   EBX   ESP   EBP   ESI   EDI\n/digit (Opcode)            0     1     2     3     4     5     6     7\nREG =                      000   001   010   011   100   101   110   111\n\n   Effective\nAddress\n[--] [--] means a SIB follows the ModR/M byte. disp8 denotes an 8-bit\ndisplacement following the SIB byte, to be sign-extended and added to the\nindex. disp32 denotes a 32-bit displacement following the ModR/M byte, to\nbe added to the index.Ŀ Mod R/M ModR/M Values in HexadecimalĿ\n\n[EAX]                000   00    08    10    18    20    28    30    38\n[ECX]                001   01    09    11    19    21    29    31    39\n[EDX]                010   02    0A    12    1A    22    2A    32    3A\n[EBX]                011   03    0B    13    1B    23    2B    33    3B\n[--] [--]        00  100   04    0C    14    1C    24    2C    34    3C\ndisp32               101   05    0D    15    1D    25    2D    35    3D\n[ESI]                110   06    0E    16    1E    26    2E    36    3E\n[EDI]                111   07    0F    17    1F    27    2F    37    3F\n\ndisp8[EAX]           000   40    48    50    58    60    68    70    78\ndisp8[ECX]           001   41    49    51    59    61    69    71    79\ndisp8[EDX]           010   42    4A    52    5A    62    6A    72    7A\ndisp8[EPX];          011   43    4B    53    5B    63    6B    73    7B\ndisp8[--] [--]   01  100   44    4C    54    5C    64    6C    74    7C\ndisp8[ebp]           101   45    4D    55    5D    65    6D    75    7D\ndisp8[ESI]           110   46    4E    56    5E    66    6E    76    7E\ndisp8[EDI]           111   47    4F    57    5F    67    6F    77    7F\n\ndisp32[EAX]          000   80    88    90    98    A0    A8    B0    B8\ndisp32[ECX]          001   81    89    91    99    A1    A9    B1    B9\ndisp32[EDX]          010   82    8A    92    9A    A2    AA    B2    BA\ndisp32[EBX]          011   83    8B    93    9B    A3    AB    B3    BB\ndisp32[--] [--]  10  100   84    8C    94    9C    A4    AC    B4    BC\ndisp32[EBP]          101   85    8D    95    9D    A5    AD    B5    BD\ndisp32[ESI]          110   86    8E    96    9E    A6    AE    B6    BE\ndisp32[EDI]          111   87    8F    97    9F    A7    AF    B7    BF\n\nEAX/AX/AL            000   C0    C8    D0    D8    E0    E8    F0    F8\nECX/CX/CL            001   C1    C9    D1    D9    E1    E9    F1    F9\nEDX/DX/DL            010   C2    CA    D2    DA    E2    EA    F2    FA\nEBX/BX/BL            011   C3    CB    D3    DB    E3    EB    F3    FB\nESP/SP/AH        11  100   C4    CC    D4    DC    E4    EC    F4    FC\nEBP/BP/CH            101   C5    CD    D5    DD    E5    ED    F5    FD\nESI/SI/DH            110   C6    CE    D6    DE    E6    EE    F6    FE\nEDI/DI/BH            111   C7    CF    D7    DF    E7    EF    F7    FF\n\n\n\nNOTES:\n  [--] [--] means a SIB follows the ModR/M byte. disp8 denotes an 8-bit\n  displacement following the SIB byte, to be sign-extended and added to the\n  index. disp32 denotes a 32-bit displacement following the ModR/M byte, to\n  be added to the index.\n\n\n\nTable 17-4. 32-Bit Addressing Forms with the SIB Byte\n\n\n   r32                      EAX   ECX   EDX   EBX   ESP   [*]\n[*] means a disp32 with no base if MOD is 00, [ESP] otherwise. This provides\nthe following addressing modes:\n      disp32[index]        (MOD=00)\n      disp8[EBP][index]    (MOD=01)\n      disp32[EBP][index]   (MOD=10)  ESI   EDI\n   Base =                   0     1     2     3     4     5     6     7\n   Base =                   000   001   010   011   100   101   110   111\n\nScaled Index\n[*] means a disp32 with no base if MOD is 00, [ESP] otherwise. This provides\nthe following addressing modes:\n      disp32[index]        (MOD=00)\n      disp8[EBP][index]    (MOD=01)\n      disp32[EBP][index]   (MOD=10)SS Index  ModR/M Values in HexadecimalĿ\n\n[EAX]                000    00    01    02    03    04    05    06    07\n[ECX]                001    08    09    0A    0B    0C    0D    0E    0F\n[EDX]                010    10    11    12    13    14    15    16    17\n[EBX]                011    18    19    1A    1B    1C    1D    1E    1F\nnone             00  100    20    21    22    23    24    25    26    27\n[EBP]                101    28    29    2A    2B    2C    2D    2E    2F\n[ESI]                110    30    31    32    33    34    35    36    37\n[EDI]                111    38    39    3A    3B    3C    3D    3E    3F\n\n[EAX*2]              000    40    41    42    43    44    45    46    47\n[ECX*2]              001    48    49    4A    4B    4C    4D    4E    4F\n[ECX*2]              010    50    51    52    53    54    55    56    57\n[EBX*2]              011    58    59    5A    5B    5C    5D    5E    5F\nnone             01  100    60    61    62    63    64    65    66    67\n[EBP*2]              101    68    69    6A    6B    6C    6D    6E    6F\n[ESI*2]              110    70    71    72    73    74    75    76    77\n[EDI*2]              111    78    79    7A    7B    7C    7D    7E    7F\n\n[EAX*4]              000    80    81    82    83    84    85    86    87\n[ECX*4]              001    88    89    8A    8B    8C    8D    8E    8F\n[EDX*4]              010    90    91    92    93    94    95    96    97\n[EBX*4]              011    98    89    9A    9B    9C    9D    9E    9F\nnone             10  100    A0    A1    A2    A3    A4    A5    A6    A7\n[EBP*4]              101    A8    A9    AA    AB    AC    AD    AE    AF\n[ESI*4]              110    B0    B1    B2    B3    B4    B5    B6    B7\n[EDI*4]              111    B8    B9    BA    BB    BC    BD    BE    BF\n\n[EAX*8]              000    C0    C1    C2    C3    C4    C5    C6    C7\n[ECX*8]              001    C8    C9    CA    CB    CC    CD    CE    CF\n[EDX*8]              010    D0    D1    D2    D3    D4    D5    D6    D7\n[EBX*8]              011    D8    D9    DA    DB    DC    DD    DE    DF\nnone             11  100    E0    E1    E2    E3    E4    E5    E6    E7\n[EBP*8]              101    E8    E9    EA    EB    EC    ED    EE    EF\n[ESI*8]              110    F0    F1    F2    F3    F4    F5    F6    F7\n[EDI*8]              111    F8    F9    FA    FB    FC    FD    FE    FF\n\n\n\nNOTES:\n  [*] means a disp32 with no base if MOD is 00, [ESP] otherwise. This\n  provides the following addressing modes:\n      disp32[index]        (MOD=00)\n      disp8[EBP][index]    (MOD=01)\n      disp32[EBP][index]   (MOD=10)\n\n\n\n17.2.2  How to Read the Instruction Set Pages\n\nThe following is an example of the format used for each 80386 instruction\ndescription in this chapter:\n\nCMC  Complement Carry Flag\n\nOpcode   Instruction         Clocks      Description\n\nF5        CMC                  2            Complement carry flag\n\nThe above table is followed by paragraphs labelled \"Operation,\"\n\"Description,\" \"Flags Affected,\" \"Protected Mode Exceptions,\" \"Real\nAddress Mode Exceptions,\" and, optionally, \"Notes.\" The following sections\nexplain the notational conventions and abbreviations used in these\nparagraphs of the instruction descriptions.\n\n\n17.2.2.1  Opcode\n\nThe \"Opcode\" column gives the complete object code produced for each form\nof the instruction. When possible, the codes are given as hexadecimal bytes,\nin the same order in which they appear in memory. Definitions of entries\nother than hexadecimal bytes are as follows:\n\n/digit: (digit is between 0 and 7) indicates that the ModR/M byte of the\ninstruction uses only the r/m (register or memory) operand. The reg field\ncontains the digit that provides an extension to the instruction's opcode.\n\n/r: indicates that the ModR/M byte of the instruction contains both a\nregister operand and an r/m operand.\n\ncb, cw, cd, cp: a 1-byte (cb), 2-byte (cw), 4-byte (cd) or 6-byte (cp)\nvalue following the opcode that is used to specify a code offset and\npossibly a new value for the code segment register.\n\nib, iw, id: a 1-byte (ib), 2-byte (iw), or 4-byte (id) immediate operand to\nthe instruction that follows the opcode, ModR/M bytes or scale-indexing\nbytes. The opcode determines if the operand is a signed value. All words and\ndoublewords are given with the low-order byte first.\n\n+rb, +rw, +rd: a register code, from 0 through 7, added to the hexadecimal\nbyte given at the left of the plus sign to form a single opcode byte. The\ncodes are\n\n      rb         rw         rd\n    AL = 0     AX = 0     EAX = 0\n    CL = 1     CX = 1     ECX = 1\n    DL = 2     DX = 2     EDX = 2\n    BL = 3     BX = 3     EBX = 3\n    AH = 4     SP = 4     ESP = 4\n    CH = 5     BP = 5     EBP = 5\n    DH = 6     SI = 6     ESI = 6\n    BH = 7     DI = 7     EDI = 7\n\n\n17.2.2.2  Instruction\n\nThe \"Instruction\" column gives the syntax of the instruction statement as\nit would appear in an ASM386 program. The following is a list of the symbols\nused to represent operands in the instruction statements:\n\nrel8: a relative address in the range from 128 bytes before the end of the\ninstruction to 127 bytes after the end of the instruction.\n\nrel16, rel32: a relative address within the same code segment as the\ninstruction assembled. rel16 applies to instructions with an operand-size\nattribute of 16 bits; rel32 applies to instructions with an operand-size\nattribute of 32 bits.\n\nptr16:16, ptr16:32: a FAR pointer, typically in a code segment different\nfrom that of the instruction. The notation 16:16 indicates that the value of\nthe pointer has two parts. The value to the right of the colon is a 16-bit\nselector or value destined for the code segment register. The value to the\nleft corresponds to the offset within the destination segment. ptr16:16 is\nused when the instruction's operand-size attribute is 16 bits; ptr16:32 is\nused with the 32-bit attribute.\n\nr8: one of the byte registers AL, CL, DL, BL, AH, CH, DH, or BH.\n\nr16: one of the word registers AX, CX, DX, BX, SP, BP, SI, or DI.\n\nr32: one of the doubleword registers EAX, ECX, EDX, EBX, ESP, EBP, ESI, or\nEDI.\n\nimm8: an immediate byte value. imm8 is a signed number between -128 and\n+127 inclusive. For instructions in which imm8 is combined with a word or\ndoubleword operand, the immediate value is sign-extended to form a word or\ndoubleword. The upper byte of the word is filled with the topmost bit of the\nimmediate value.\n\nimm16: an immediate word value used for instructions whose operand-size\nattribute is 16 bits. This is a number between -32768 and +32767 inclusive.\n\nimm32: an immediate doubleword value used for instructions whose\noperand-size attribute is 32-bits. It allows the use of a number between\n+2147483647 and -2147483648.\n\nr/m8: a one-byte operand that is either the contents of a byte register\n(AL, BL, CL, DL, AH, BH, CH, DH), or a byte from memory.\n\nr/m16: a word register or memory operand used for instructions whose\noperand-size attribute is 16 bits. The word registers are: AX, BX, CX, DX,\nSP, BP, SI, DI. The contents of memory are found at the address provided by\nthe effective address computation.\n\nr/m32: a doubleword register or memory operand used for instructions whose\noperand-size attribute is 32-bits. The doubleword registers are: EAX, EBX,\nECX, EDX, ESP, EBP, ESI, EDI. The contents of memory are found at the\naddress provided by the effective address computation.\n\nm8: a memory byte addressed by DS:SI or ES:DI (used only by string\ninstructions).\n\nm16: a memory word addressed by DS:SI or ES:DI (used only by string\ninstructions).\n\nm32: a memory doubleword addressed by DS:SI or ES:DI (used only by string\ninstructions).\n\nm16:16, M16:32: a memory operand containing a far pointer composed of two\nnumbers. The number to the left of the colon corresponds to the pointer's\nsegment selector. The number to the right corresponds to its offset.\n\nm16 & 32, m16 & 16, m32 & 32: a memory operand consisting of data item pairs\nwhose sizes are indicated on the left and the right side of the ampersand.\nAll memory addressing modes are allowed. m16 & 16 and m32 & 32 operands are\nused by the BOUND instruction to provide an operand containing an upper and\nlower bounds for array indices. m16 & 32 is used by LIDT and LGDT to\nprovide a word with which to load the limit field, and a doubleword with\nwhich to load the base field of the corresponding Global and Interrupt\nDescriptor Table Registers.\n\nmoffs8, moffs16, moffs32: (memory offset) a simple memory variable of type\nBYTE, WORD, or DWORD used by some variants of the MOV instruction. The\nactual address is given by a simple offset relative to the segment base. No\nModR/M byte is used in the instruction. The number shown with moffs\nindicates its size, which is determined by the address-size attribute of the\ninstruction.\n\nSreg: a segment register. The segment register bit assignments are ES=0,\nCS=1, SS=2, DS=3, FS=4, and GS=5.\n\n\n17.2.2.3  Clocks\n\nThe \"Clocks\" column gives the number of clock cycles the instruction takes\nto execute. The clock count calculations makes the following assumptions:\n\n    The instruction has been prefetched and decoded and is ready for\n     execution.\n\n    Bus cycles do not require wait states.\n\n    There are no local bus HOLD requests delaying processor access to the\n     bus.\n\n    No exceptions are detected during instruction execution.\n\n    Memory operands are aligned.\n\nClock counts for instructions that have an r/m (register or memory) operand\nare separated by a slash. The count to the left is used for a register\noperand; the count to the right is used for a memory operand.\n\nThe following symbols are used in the clock count specifications:\n\n    n, which represents a number of repetitions.\n\n    m, which represents the number of components in the next instruction\n     executed, where the entire displacement (if any) counts as one\n     component, the entire immediate data (if any) counts as one component,\n     and every other byte of the instruction and prefix(es) each counts as\n     one component.\n\n    pm=, a clock count that applies when the instruction executes in\n     Protected Mode. pm= is not given when the clock counts are the same for\n     Protected and Real Address Modes.\n\nWhen an exception occurs during the execution of an instruction and the\nexception handler is in another task, the instruction execution time is\nincreased by the number of clocks to effect a task switch. This parameter\ndepends on several factors:\n\n    The type of TSS used to represent the current task (386 TSS or 286\n     TSS).\n\n    The type of TSS used to represent the new task.\n\n    Whether the current task is in V86 mode.\n\n    Whether the new task is in V86 mode.\n\nTable 17-5 summarizes the task switch times for exceptions.\n\n\nTable 17-5. Task Switch Times for Exceptions\n\n                       New Task\n\nOld              386 TSS     286 TSS\nTask             VM = 0\n\n386   VM = 0       309        282\nTSS\n\n386   VM = 1       314        231\nTSS\n\n286                307        282\nTSS\n\n\n17.2.2.4  Description\n\nThe \"Description\" column following the \"Clocks\" column briefly explains the\nvarious forms of the instruction. The \"Operation\" and \"Description\" sections\ncontain more details of the instruction's operation.\n\n\n17.2.2.5  Operation\n\nThe \"Operation\" section contains an algorithmic description of the\ninstruction which uses a notation similar to the Algol or Pascal language.\nThe algorithms are composed of the following elements:\n\nComments are enclosed within the symbol pairs \"(*\" and \"*)\".\n\nCompound statements are enclosed between the keywords of the \"if\" statement\n(IF, THEN, ELSE, FI) or of the \"do\" statement (DO, OD), or of the \"case\"\nstatement (CASE ... OF, ESAC).\n\nA register name implies the contents of the register. A register name\nenclosed in brackets implies the contents of the location whose address is\ncontained in that register. For example, ES:[DI] indicates the contents of\nthe location whose ES segment relative address is in register DI. [SI]\nindicates the contents of the address contained in register SI relative to\nSI's default segment (DS) or overridden segment.\n\nBrackets also used for memory operands, where they mean that the contents\nof the memory location is a segment-relative offset. For example, [SRC]\nindicates that the contents of the source operand is a segment-relative\noffset.\n\nA \u001b B; indicates that the value of B is assigned to A.\n\nThe symbols =, <>, , and  are relational operators used to compare two\nvalues, meaning equal, not equal, greater or equal, less or equal,\nrespectively. A relational expression such as A = B is TRUE if the value of\nA is equal to B; otherwise it is FALSE.\n\nThe following identifiers are used in the algorithmic descriptions:\n\n    OperandSize represents the operand-size attribute of the instruction,\n     which is either 16 or 32 bits. AddressSize represents the address-size\n     attribute, which is either 16 or 32 bits. For example,\n\n   IF instruction = CMPSW\n   THEN OperandSize \u001b 16;\n   ELSE\n      IF instruction = CMPSD\n      THEN OperandSize \u001b 32;\n      FI;\n   FI;\n\nindicates that the operand-size attribute depends on the form of the CMPS\ninstruction used. Refer to the explanation of address-size and operand-size\nattributes at the beginning of this chapter for general guidelines on how\nthese attributes are determined.\n\n    StackAddrSize represents the stack address-size attribute associated\n     with the instruction, which has a value of 16 or 32 bits, as explained\n     earlier in the chapter.\n\n    SRC represents the source operand. When there are two operands, SRC is\n     the one on the right.\n\n    DEST represents the destination operand. When there are two operands,\n     DEST is the one on the left.\n\n    LeftSRC, RightSRC distinguishes between two operands when both are\n     source operands.\n\n    eSP represents either the SP register or the ESP register depending on\n     the setting of the B-bit for the current stack segment.\n\nThe following functions are used in the algorithmic descriptions:\n\n    Truncate to 16 bits(value) reduces the size of the value to fit in 16\n     bits by discarding the uppermost bits as needed.\n\n    Addr(operand) returns the effective address of the operand (the result\n     of the effective address calculation prior to adding the segment base).\n\n    ZeroExtend(value) returns a value zero-extended to the operand-size\n     attribute of the instruction. For example, if OperandSize = 32,\n     ZeroExtend of a byte value of -10 converts the byte from F6H to\n     doubleword with hexadecimal value 000000F6H. If the value passed to\n     ZeroExtend and the operand-size attribute are the same size,\n     ZeroExtend returns the value unaltered.\n\n    SignExtend(value) returns a value sign-extended to the operand-size\n     attribute of the instruction. For example, if OperandSize = 32,\n     SignExtend of a byte containing the value -10 converts the byte from\n     F6H to a doubleword with hexadecimal value FFFFFFF6H. If the value\n     passed to SignExtend and the operand-size attribute are the same size,\n     SignExtend returns the value unaltered.\n\n    Push(value) pushes a value onto the stack. The number of bytes pushed\n     is determined by the operand-size attribute of the instruction. The\n     action of Push is as follows:\n\n   IF StackAddrSize = 16\n   THEN\n      IF OperandSize = 16\n      THEN\n         SP \u001b SP - 2;\n         SS:[SP] \u001b value; (* 2 bytes assigned starting at\n                             byte address in SP *)\n      ELSE (* OperandSize = 32 *)\n         SP \u001b SP - 4;\n         SS:[SP] \u001b value; (* 4 bytes assigned starting at\n                             byte address in SP *)\n      FI;\n   ELSE (* StackAddrSize = 32 *)\n      IF OperandSize = 16\n      THEN\n         ESP \u001b ESP - 2;\n         SS:[ESP] \u001b value; (* 2 bytes assigned starting at\n                              byte address in ESP*)\n      ELSE (* OperandSize = 32 *)\n         ESP \u001b ESP - 4;\n         SS:[ESP] \u001b value; (* 4 bytes assigned starting at\n                              byte address in ESP*)\n      FI;\n   FI;\n\n    Pop(value) removes the value from the top of the stack and returns it.\n     The statement EAX \u001b Pop( ); assigns to EAX the 32-bit value that Pop\n     took from the top of the stack. Pop will return either a word or a\n     doubleword depending on the operand-size attribute. The action of Pop\n     is as follows:\n\n   IF StackAddrSize = 16\n   THEN\n      IF OperandSize = 16\n      THEN\n         ret val \u001b SS:[SP]; (* 2-byte value *)\n         SP \u001b SP + 2;\n      ELSE (* OperandSize = 32 *)\n         ret val \u001b SS:[SP]; (* 4-byte value *)\n         SP \u001b SP + 4;\n      FI;\n   ELSE (* StackAddrSize = 32 *)\n      IF OperandSize = 16\n      THEN\n         ret val \u001b SS:[ESP]; (* 2 bytes value *)\n         ESP \u001b ESP + 2;\n      ELSE (* OperandSize = 32 *)\n         ret val \u001b SS:[ESP]; (* 4 bytes value *)\n         ESP \u001b ESP + 4;\n      FI;\n   FI;\n   RETURN(ret val); (*returns a word or doubleword*)\n\n    Bit[BitBase, BitOffset] returns the address of a bit within a bit\n     string, which is a sequence of bits in memory or a register. Bits are\n     numbered from low-order to high-order within registers and within\n     memory bytes. In memory, the two bytes of a word are stored with the\n     low-order byte at the lower address.\n\n   If the base operand is a register, the offset can be in the range 0..31.\n   This offset addresses a bit within the indicated register. An example,\n   \"BIT[EAX, 21],\" is illustrated in Figure 17-3.\n\n   If BitBase is a memory address, BitOffset can range from -2 gigabits to 2\n   gigabits. The addressed bit is numbered (Offset MOD 8) within the byte at\n   address (BitBase + (BitOffset DIV 8)), where DIV is signed division with\n   rounding towards negative infinity, and MOD returns a positive number.\n   This is illustrated in Figure 17-4.\n\n    I-O-Permission(I-O-Address, width) returns TRUE or FALSE depending on\n   the I/O permission bitmap and other factors. This function is defined as\n   follows:\n\n   IF TSS type is 286 THEN RETURN FALSE; FI;\n   Ptr \u001b [TSS + 66]; (* fetch bitmap pointer *)\n   BitStringAddr \u001b SHR (I-O-Address, 3) + Ptr;\n   MaskShift \u001b I-O-Address AND 7;\n   CASE width OF:\n         BYTE: nBitMask \u001b 1;\n         WORD: nBitMask \u001b 3;\n         DWORD: nBitMask \u001b 15;\n   ESAC;\n   mask \u001b SHL (nBitMask, MaskShift);\n   CheckString \u001b [BitStringAddr] AND mask;\n   IF CheckString = 0\n   THEN RETURN (TRUE);\n   ELSE RETURN (FALSE);\n   FI;\n\n    Switch-Tasks is the task switching function described in Chapter 7.\n\n\n17.2.2.6  Description\n\nThe \"Description\" section contains further explanation of the instruction's\noperation.\n\n\nFigure 17-3.  Bit Offset for BIT[EAX, 21]\n\n   31                    21                                               0\n  ͻ\n                                                                       \n  ͼ\n                         \u001e                                                \u001e\n                         BITOFFSET = 21\n\n\nFigure 17-4.  Memory Bit Indexing\n\n                         BIT INDEXING (POSITIVE OFFSET)\n\n               7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0\n             ͻ\n                                                          \n             ͼ\n               BITBASE + 1       BITBASE      BITBASE - 1   \n                   \u001e                          \n                   OFFSET = 13\n\n                         BIT INDEXING (NEGATIVE OFFSET)\n\n               7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0\n             ͻ\n                                                          \n             ͼ\n                 BITBASE       BITBASE - 1    BITBASE - 2   \n                                                  \u001e\n                              OFFSET = -11\n\n\n17.2.2.7  Flags Affected\n\nThe \"Flags Affected\" section lists the flags that are affected by the\ninstruction, as follows:\n\n    If a flag is always cleared or always set by the instruction, the\n     value is given (0 or 1) after the flag name. Arithmetic and logical\n     instructions usually assign values to the status flags in the uniform\n     manner described in Appendix C. Nonconventional assignments are\n     described in the \"Operation\" section.\n\n    The values of flags listed as \"undefined\" may be changed by the\n     instruction in an indeterminate manner.\n\nAll flags not listed are unchanged by the instruction.\n\n\n17.2.2.8  Protected Mode Exceptions\n\nThis section lists the exceptions that can occur when the instruction is\nexecuted in 80386 Protected Mode. The exception names are a pound sign (#)\nfollowed by two letters and an optional error code in parentheses. For\nexample, #GP(0) denotes a general protection exception with an error code of\n0. Table 17-6 associates each two-letter name with the corresponding\ninterrupt number.\n\nChapter 9 describes the exceptions and the 80386 state upon entry to the\nexception.\n\nApplication programmers should consult the documentation provided with\ntheir operating systems to determine the actions taken when exceptions\noccur.\n\n\nTable 17-6. 80386 Exceptions\n\nMnemonic     Interrupt    Description\n\n#UD           6           Invalid opcode\n#NM           7           Coprocessor not available\n#DF           8           Double fault\n#TS          10           Invalid TSS\n#NP          11           Segment or gate not present\n#SS          12           Stack fault\n#GP          13           General protection fault\n#PF          14           Page fault\n#MF          16           Math (coprocessor) fault\n\n\n17.2.2.9  Real Address Mode Exceptions\n\nBecause less error checking is performed by the 80386 in Real Address Mode,\nthis mode has fewer exception conditions. Refer to Chapter 14 for further\ninformation on these exceptions.\n\n\n17.2.2.10  Virtual-8086 Mode Exceptions\n\nVirtual 8086 tasks provide the ability to simulate Virtual 8086 machines.\nVirtual 8086 Mode exceptions are similar to those for the 8086 processor,\nbut there are some differences. Refer to Chapter 15 for details.\n\n\nAAA  ASCII Adjust after Addition\n\nOpcode    Instruction    Clocks    Description\n\n37        AAA            4         ASCII adjust AL after addition\n\n\nOperation\n\nIF ((AL AND 0FH) > 9) OR (AF = 1)\nTHEN\n   AL \u001b (AL + 6) AND 0FH;\n   AH \u001b AH + 1;\n   AF \u001b 1;\n   CF \u001b 1;\nELSE\n   CF \u001b 0;\n   AF \u001b 0;\nFI;\n\nDescription\n\nExecute AAA only following an ADD instruction that leaves a byte result\nin the AL register. The lower nibbles of the operands of the ADD instruction\nshould be in the range 0 through 9 (BCD digits). In this case, AAA adjusts\nAL to contain the correct decimal digit result. If the addition produced a\ndecimal carry, the AH register is incremented, and the carry and auxiliary\ncarry flags are set to 1. If there was no decimal carry, the carry and\nauxiliary flags are set to 0 and AH is unchanged. In either case, AL is left\nwith its top nibble set to 0. To convert AL to an ASCII result, follow the\nAAA instruction with OR AL, 30H.\n\nFlags Affected\n\nAF and CF as described above; OF, SF, ZF, and PF are undefined\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nAAD  ASCII Adjust AX before Division\n\nOpcode    Instruction    Clocks    Description\n\nD5 0A     AAD            19        ASCII adjust AX before division\n\n\nOperation\n\nAL \u001b AH * 10 + AL;\nAH \u001b 0;\n\nDescription\n\nAAD is used to prepare two unpacked BCD digits (the least-significant\ndigit in AL, the most-significant digit in AH) for a division operation that\nwill yield an unpacked result. This is accomplished by setting AL to\nAL + (10 * AH), and then setting AH to 0. AX is then equal to the binary\nequivalent of the original unpacked two-digit number.\n\nFlags Affected\n\nSF, ZF, and PF as described in Appendix C; OF, AF, and CF are undefined\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nAAM  ASCII Adjust AX after Multiply\n\nOpcode    Instruction    Clocks    Description\n\nD4 0A     AAM            17        ASCII adjust AX after multiply\n\n\nOperation\n\nAH \u001b AL / 10;\nAL \u001b AL MOD 10;\n\nDescription\n\nExecute AAM only after executing a MUL instruction between two unpacked\nBCD digits that leaves the result in the AX register. Because the result is\nless than 100, it is contained entirely in the AL register. AAM unpacks the\nAL result by dividing AL by 10, leaving the quotient (most-significant\ndigit) in AH and the remainder (least-significant digit) in AL.\n\nFlags Affected\n\nSF, ZF, and PF as described in Appendix C; OF, AF, and CF are undefined\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nAAS  ASCII Adjust AL after Subtraction\n\nOpcode    Instruction    Clocks    Description\n\n3F        AAS            4         ASCII adjust AL after subtraction\n\n\nOperation\n\nIF (AL AND 0FH) > 9 OR AF = 1\nTHEN\n   AL \u001b AL - 6;\n   AL \u001b AL AND 0FH;\n   AH \u001b AH - 1;\n   AF \u001b 1;\n   CF \u001b 1;\nELSE\n   CF \u001b 0;\n   AF \u001b 0;\nFI;\n\nDescription\n\nExecute AAS only after a SUB instruction that leaves the byte result in the\nAL register. The lower nibbles of the operands of the SUB instruction must\nhave been in the range 0 through 9 (BCD digits). In this case, AAS adjusts\nAL so it contains the correct decimal digit result. If the subtraction\nproduced a decimal carry, the AH register is decremented, and the carry and\nauxiliary carry flags are set to 1. If no decimal carry occurred, the carry\nand auxiliary carry flags are set to 0, and AH is unchanged. In either case,\nAL is left with its top nibble set to 0. To convert AL to an ASCII result,\nfollow the AAS with OR AL, 30H.\n\nFlags Affected\n\nAF and CF as described above; OF, SF, ZF, and PF are undefined\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nADC  Add with Carry\n\n\nOpcode    Instruction      Clocks    Description\n\n14 ib     ADC AL,imm8      2         Add with carry immediate byte to AL\n15 iw     ADC AX,imm16     2         Add with carry immediate word to AX\n15 id     ADC EAX,imm32    2         Add with carry immediate dword to EAX\n80 /2 ib  ADC r/m8,imm8    2/7       Add with carry immediate byte to r/m\n                                     byte\n81 /2 iw  ADC r/m16,imm16  2/7       Add with carry immediate word to r/m\n                                     word\n81 /2 id  ADC r/m32,imm32  2/7       Add with CF immediate dword to r/m\n                                     dword\n83 /2 ib  ADC r/m16,imm8   2/7       Add with CF sign-extended immediate\n                                     byte to r/m word\n83 /2 ib  ADC r/m32,imm8   2/7       Add with CF sign-extended immediate\n                                     byte into r/m dword\n10 /r     ADC r/m8,r8      2/7       Add with carry byte register to r/m\n                                     byte\n11 /r     ADC r/m16,r16    2/7       Add with carry word register to r/m\n                                     word\n11 /r     ADC r/m32,r32    2/7       Add with CF dword register to r/m dword\n12 /r     ADC r8,r/m8      2/6       Add with carry r/m byte to byte\n                                     register\n13 /r     ADC r16,r/m16    2/6       Add with carry r/m word to word\n                                     register\n13 /r     ADC r32,r/m32    2/6       Add with CF r/m dword to dword register\n\n\nOperation\n\nDEST \u001b DEST + SRC + CF;\n\nDescription\n\nADC performs an integer addition of the two operands DEST and SRC and the\ncarry flag, CF. The result of the addition is assigned to the first operand\n(DEST), and the flags are set accordingly. ADC is usually executed as part\nof a multi-byte or multi-word addition operation. When an immediate byte\nvalue is added to a word or doubleword operand, the immediate value is first\nsign-extended to the size of the word or doubleword operand.\n\nFlags Affected\n\nOF, SF, ZF, AF, CF, and PF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) if page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nADD  Add\n\nOpcode    Instruction         Clocks    Description\n\n04 ib     ADD AL,imm8          2        Add immediate byte to AL\n05 iw     ADD AX,imm16         2        Add immediate word to AX\n05 id     ADD EAX,imm32        2        Add immediate dword to EAX\n80 /0 ib  ADD r/m8,imm8        2/7      Add immediate byte to r/m byte\n81 /0 iw  ADD r/m16,imm16      2/7      Add immediate word to r/m word\n81 /0 id  ADD r/m32,imm32      2/7      Add immediate dword to r/m dword\n83 /0 ib  ADD r/m16,imm8       2/7      Add sign-extended immediate byte\n                                        to r/m word\n83 /0 ib  ADD r/m32,imm8       2/7      Add sign-extended immediate byte\n                                        to r/m dword\n00 /r     ADD r/m8,r8          2/7      Add byte register to r/m byte\n01 /r     ADD r/m16,r16        2/7      Add word register to r/m word\n01 /r     ADD r/m32,r32        2/7      Add dword register to r/m dword\n02 /r     ADD r8,r/m8          2/6      Add r/m byte to byte register\n03 /r     ADD r16,r/m16        2/6      Add r/m word to word register\n03 /r     ADD r32,r/m32        2/6      Add r/m dword to dword register\n\n\nOperation\n\nDEST \u001b DEST + SRC;\n\nDescription\n\nADD performs an integer addition of the two operands (DEST and SRC). The\nresult of the addition is assigned to the first operand (DEST), and the\nflags are set accordingly.\n\nWhen an immediate byte is added to a word or doubleword operand, the\nimmediate value is sign-extended to the size of the word or doubleword\noperand.\n\nFlags Affected\n\nOF, SF, ZF, AF, CF, and PF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nAND  Logical AND\n\nOpcode    Instruction          Clocks    Description\n\n24 ib     AND AL,imm8          2         AND immediate byte to AL\n25 iw     AND AX,imm16         2         AND immediate word to AX\n25 id     AND EAX,imm32        2         AND immediate dword to EAX\n80 /4 ib  AND r/m8,imm8        2/7       AND immediate byte to r/m byte\n81 /4 iw  AND r/m16,imm16      2/7       AND immediate word to r/m word\n81 /4 id  AND r/m32,imm32      2/7       AND immediate dword to r/m dword\n83 /4 ib  AND r/m16,imm8       2/7       AND sign-extended immediate byte\n                                         with r/m word\n83 /4 ib  AND r/m32,imm8       2/7       AND sign-extended immediate byte\n                                         with r/m dword\n20 /r     AND r/m8,r8          2/7       AND byte register to r/m byte\n21 /r     AND r/m16,r16        2/7       AND word register to r/m word\n21 /r     AND r/m32,r32        2/7       AND dword register to r/m dword\n22 /r     AND r8,r/m8          2/6       AND r/m byte to byte register\n23 /r     AND r16,r/m16        2/6       AND r/m word to word register\n23 /r     AND r32,r/m32        2/6       AND r/m dword to dword register\n\n\nOperation\n\nDEST \u001b DEST AND SRC;\nCF \u001b 0;\nOF \u001b 0;\n\nDescription\n\nEach bit of the result of the AND instruction is a 1 if both corresponding\nbits of the operands are 1; otherwise, it becomes a 0.\n\nFlags Affected\n\nCF = 0, OF = 0; PF, SF, and ZF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nARPL  Adjust RPL Field of Selector\n\nOpcode    Instruction          Clocks    Description\n\n63 /r     ARPL r/m16,r16       pm=20/21  Adjust RPL of r/m16 to not\n                                         less than RPL of r16\n\n\nOperation\n\nIF RPL bits(0,1) of DEST < RPL bits(0,1) of SRC\nTHEN\n   ZF \u001b 1;\n   RPL bits(0,1) of DEST \u001b RPL bits(0,1) of SRC;\nELSE\n   ZF \u001b 0;\nFI;\n\nDescription\n\nThe ARPL instruction has two operands. The first operand is a 16-bit\nmemory variable or word register that contains the value of a selector. The\nsecond operand is a word register. If the RPL field (\"requested privilege\nlevel\"bottom two bits) of the first operand is less than the RPL field of\nthe second operand, the zero flag is set to 1 and the RPL field of the\nfirst operand is increased to match the second operand. Otherwise, the zero\nflag is set to 0 and no change is made to the first operand.\n\nARPL appears in operating system software, not in application programs. It\nis used to guarantee that a selector parameter to a subroutine does not\nrequest more privilege than the caller is allowed. The second operand of\nARPL is normally a register that contains the CS selector value of the\ncaller.\n\nFlags Affected\n\nZF as described above\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 6; ARPL is not recognized in Real Address Mode\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nBOUND  Check Array Index Against Bounds\n\nOpcode    Instruction          Clocks    Description\n\n62 /r     BOUND r16,m16&16     10        Check if r16 is within bounds\n                                         (passes test)\n62 /r     BOUND r32,m32&32     10        Check if r32 is within bounds\n                                         (passes test)\n\n\nOperation\n\nIF (LeftSRC < [RightSRC] OR LeftSRC > [RightSRC + OperandSize/8])\n   (* Under lower bound or over upper bound *)\nTHEN Interrupt 5;\nFI;\n\nDescription\n\nBOUND ensures that a signed array index is within the limits specified by a\nblock of memory consisting of an upper and a lower bound. Each bound uses\none word for an operand-size attribute of 16 bits and a doubleword for an\noperand-size attribute of 32 bits. The first operand (a register) must be\ngreater than or equal to the first bound in memory (lower bound), and less\nthan or equal to the second bound in memory (upper bound). If the register\nis not within bounds, an Interrupt 5 occurs; the return EIP points to the\nBOUND instruction.\n\nThe bounds limit data structure is usually placed just before the array\nitself, making the limits addressable via a constant offset from the\nbeginning of the array.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\nInterrupt 5 if the bounds test fails, as described above; #GP(0) for an\nillegal memory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nThe second operand must be a memory operand, not a register. If BOUND is\nexecuted with a ModRM byte representing a register as the second operand,\n#UD occurs.\n\nReal Address Mode Exceptions\n\nInterrupt 5 if the bounds test fails; Interrupt 13 if any part of the\noperand would lie outside of the effective address space from 0 to 0FFFFH;\nInterrupt 6 if the second operand is a register\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nBSF  Bit Scan Forward\n\nOpcode    Instruction          Clocks    Description\n\n0F  BC    BSF r16,r/m16        10+3n     Bit scan forward on r/m word\n0F  BC    BSF r32,r/m32        10+3n     Bit scan forward on r/m dword\n\n\nNotes\n\n is the number of leading zero bits.\n\nOperation\n\nIF r/m = 0\nTHEN\n   ZF \u001b 1;\n   register \u001b UNDEFINED;\nELSE\n   temp \u001b 0;\n   ZF \u001b 0;\n   WHILE BIT[r/m, temp = 0]\n   DO\n      temp \u001b temp + 1;\n      register \u001b temp;\n   OD;\nFI;\n\nDescription\n\nBSF scans the bits in the second word or doubleword operand starting with\nbit 0. The ZF flag is cleared if the bits are all 0; otherwise, the ZF flag\nis set and the destination register is loaded with the bit index of the\nfirst set bit.\n\nFlags Affected\n\nZF as described above\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS, ES,\nFS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nBSR  Bit Scan Reverse\n\nOpcode    Instruction          Clocks    Description\n\n0F  BD    BSR r16,r/m16        10+3n     Bit scan reverse on r/m word\n0F  BD    BSR r32,r/m32        10+3n     Bit scan reverse on r/m dword\n\n\nOperation\n\nIF r/m = 0\nTHEN\n   ZF \u001b 1;\n   register \u001b UNDEFINED;\nELSE\n   temp \u001b OperandSize - 1;\n   ZF \u001b 0;\n   WHILE BIT[r/m, temp] = 0\n   DO\n      temp \u001b temp - 1;\n      register \u001b temp;\n   OD;\nFI;\n\nDescription\n\nBSR scans the bits in the second word or doubleword operand from the most\nsignificant bit to the least significant bit. The ZF flag is cleared if the\nbits are all 0; otherwise, ZF is set and the destination register is loaded\nwith the bit index of the first set bit found when scanning in the reverse\ndirection.\n\nFlags Affected\n\nZF as described above\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nBT  Bit Test\n\nOpcode         Instruction     Clocks    Description\n\n0F  A3         BT r/m16,r16    3/12      Save bit in carry flag\n0F  A3         BT r/m32,r32    3/12      Save bit in carry flag\n0F  BA /4 ib   BT r/m16,imm8   3/6       Save bit in carry flag\n0F  BA /4 ib   BT r/m32,imm8   3/6       Save bit in carry flag\n\n\nOperation\n\nCF \u001b BIT[LeftSRC, RightSRC];\n\nDescription\n\nBT saves the value of the bit indicated by the base (first operand) and the\nbit offset (second operand) into the carry flag.\n\nFlags Affected\n\nCF as described above\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS, ES,\nFS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\nNotes\n\nThe index of the selected bit can be given by the immediate constant in the\ninstruction or by a value in a general register. Only an 8-bit immediate\nvalue is used in the instruction. This operand is taken modulo 32, so the\nrange of immediate bit offsets is 0..31. This allows any bit within a\nregister to be selected. For memory bit strings, this immediate field gives\nonly the bit offset within a word or doubleword. Immediate bit offsets\nlarger than 31 are supported by using the immediate bit offset field in\ncombination with the displacement field of the memory operand. The low-order\n3 to 5 bits of the immediate bit offset are stored in the immediate bit\noffset field, and the high-order 27 to 29 bits are shifted and combined with\nthe byte displacement in the addressing mode.\n\nWhen accessing a bit in memory, the 80386 may access four bytes starting\nfrom the memory address given by:\n\n   Effective Address + (4 * (BitOffset DIV 32))\n\nfor a 32-bit operand size, or two bytes starting from the memory address\ngiven by:\n\n   Effective Address + (2 * (BitOffset DIV 16))\n\nfor a 16-bit operand size. It may do so even when only a single byte needs\nto be accessed in order to reach the given bit. You must therefore avoid\nreferencing areas of memory close to address space holes. In particular,\navoid references to memory-mapped I/O registers. Instead, use the MOV\ninstructions to load from or store to these addresses, and use the register\nform of these instructions to manipulate the data.\n\n\nBTC  Bit Test and Complement\n\nOpcode        Instruction     Clocks  Description\n\n0F  BB        BTC r/m16,r16   6/13    Save bit in carry flag and complement\n0F  BB        BTC r/m32,r32   6/13    Save bit in carry flag and complement\n0F  BA /7 ib  BTC r/m16,imm8  6/8     Save bit in carry flag and complement\n0F  BA /7 ib  BTC r/m32,imm8  6/8     Save bit in carry flag and complement\n\n\nOperation\n\nCF \u001b BIT[LeftSRC, RightSRC];\nBIT[LeftSRC, RightSRC] \u001b NOT BIT[LeftSRC, RightSRC];\n\nDescription\n\nBTC saves the value of the bit indicated by the base (first operand) and the\nbit offset (second operand) into the carry flag and then complements the\nbit.\n\nFlags Affected\n\nCF as described above\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\nNotes\n\nThe index of the selected bit can be given by the immediate constant in the\ninstruction or by a value in a general register. Only an 8-bit immediate\nvalue is used in the instruction. This operand is taken modulo 32, so the\nrange of immediate bit offsets is 0..31. This allows any bit within a\nregister to be selected. For memory bit strings, this immediate field gives\nonly the bit offset within a word or doubleword. Immediate bit offsets\nlarger than 31 are supported by using the immediate bit offset field in\ncombination with the displacement field of the memory operand. The low-order\n3 to 5 bits of the immediate bit offset are stored in the immediate bit\noffset field, and the high-order 27 to 29 bits are shifted and combined with\nthe byte displacement in the addressing mode.\n\nWhen accessing a bit in memory, the 80386 may access four bytes starting\nfrom the memory address given by:\n\n   Effective Address + (4 * (BitOffset DIV 32))\n\nfor a 32-bit operand size, or two bytes starting from the memory address\ngiven by:\n\n   Effective Address + (2 * (BitOffset DIV 16))\n\nfor a 16-bit operand size. It may do so even when only a single byte needs\nto be accessed in order to reach the given bit. You must therefore avoid\nreferencing areas of memory close to address space holes. In particular,\navoid references to memory-mapped I/O registers. Instead, use the MOV\ninstructions to load from or store to these addresses, and use the register\nform of these instructions to manipulate the data.\n\n\nBTR  Bit Test and Reset\n\nOpcode        Instruction     Clocks  Description\n\n0F  B3        BTR r/m16,r16   6/13    Save bit in carry flag and reset\n0F  B3        BTR r/m32,r32   6/13    Save bit in carry flag and reset\n0F  BA /6 ib  BTR r/m16,imm8  6/8     Save bit in carry flag and reset\n0F  BA /6 ib  BTR r/m32,imm8  6/8     Save bit in carry flag and reset\n\n\nOperation\n\nCF \u001b BIT[LeftSRC, RightSRC];\nBIT[LeftSRC, RightSRC] \u001b 0;\n\nDescription\n\nBTR saves the value of the bit indicated by the base (first operand) and the\nbit offset (second operand) into the carry flag and then stores 0 in the\nbit.\n\nFlags Affected\n\nCF as described above\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\nNotes\n\nThe index of the selected bit can be given by the immediate constant in the\ninstruction or by a value in a general register. Only an 8-bit immediate\nvalue is used in the instruction. This operand is taken modulo 32, so the\nrange of immediate bit offsets is 0..31. This allows any bit within a\nregister to be selected. For memory bit strings, this immediate field gives\nonly the bit offset within a word or doubleword. Immediate bit offsets\nlarger than 31 (or 15) are supported by using the immediate bit offset field\nin combination with the displacement field of the memory operand. The\nlow-order 3 to 5 bits of the immediate bit offset are stored in the\nimmediate bit offset field, and the high-order 27 to 29 bits are shifted and\ncombined with the byte displacement in the addressing mode.\n\nWhen accessing a bit in memory, the 80386 may access four bytes starting\nfrom the memory address given by:\n\n   Effective Address + 4 * (BitOffset DIV 32)\n\nfor a 32-bit operand size, or two bytes starting from the memory address\ngiven by:\n\n   Effective Address + 2 * (BitOffset DIV 16)\n\nfor a 16-bit operand size. It may do so even when only a single byte needs\nto be accessed in order to reach the given bit. You must therefore avoid\nreferencing areas of memory close to address space holes. In particular,\navoid references to memory-mapped I/O registers. Instead, use the MOV\ninstructions to load from or store to these addresses, and use the register\nform of these instructions to manipulate the data.\n\n\nBTS  Bit Test and Set\n\nOpcode        Instruction     Clocks  Description\n\n0F  AB        BTS r/m16,r16   6/13    Save bit in carry flag and set\n0F  AB        BTS r/m32,r32   6/13    Save bit in carry flag and set\n0F  BA /5 ib  BTS r/m16,imm8  6/8     Save bit in carry flag and set\n0F  BA /5 ib  BTS r/m32,imm8  6/8     Save bit in carry flag and set\n\n\nOperation\n\nCF \u001b BIT[LeftSRC, RightSRC];\nBIT[LeftSRC, RightSRC] \u001b 1;\n\nDescription\n\nBTS saves the value of the bit indicated by the base (first operand) and the\nbit offset (second operand) into the carry flag and then stores 1 in the\nbit.\n\nFlags Affected\n\nCF as described above\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\nNotes\n\nThe index of the selected bit can be given by the immediate constant in the\ninstruction or by a value in a general register. Only an 8-bit immediate\nvalue is used in the instruction. This operand is taken modulo 32, so the\nrange of immediate bit offsets is 0..31. This allows any bit within a\nregister to be selected. For memory bit strings, this immediate field gives\nonly the bit offset within a word or doubleword. Immediate bit offsets\nlarger than 31 are supported by using the immediate bit offset field in\ncombination with the displacement field of the memory operand. The\nlow-order 3 to 5 bits of the immediate bit offset are stored in the\nimmediate bit offset field, and the high order 27 to 29 bits are shifted and\ncombined with the byte displacement in the addressing mode.\n\nWhen accessing a bit in memory, the processor may access four bytes starting\nfrom the memory address given by:\n\n   Effective Address + (4 * (BitOffset DIV 32))\n\nfor a 32-bit operand size, or two bytes starting from the memory address\ngiven by:\n\n   Effective Address + (2 * (BitOffset DIV 16))\n\nfor a 16-bit operand size. It may do this even when only a single byte needs\nto be accessed in order to get at the given bit. Thus the programmer must be\ncareful to avoid referencing areas of memory close to address space holes.\nIn particular, avoid references to memory-mapped I/O registers. Instead, use\nthe MOV instructions to load from or store to these addresses, and use the\nregister form of these instructions to manipulate the data.\n\n\nCALL  Call Procedure\n\n\nOpcode    Instruction     Clocks\n  Values of ts are given by the following table:\n\n                             New Task\n              386 TSS         386 TSS         286 TSS\n  Old         VM = 0          VM = 1\n  Task                     Via Task Gate?\n\n              N     Y         N     Y         N     Y\n\n386          300   309       217   226       273   282\nTSS VM=0\n\n286          298   307       217   226       273   282\nTSS         Description\n\nE8  cw    CALL rel16       7+m            Call near, displacement relative\n                                          to next instruction\nFF  /2    CALL r/m16       7+m/10+m       Call near, register\n                                          indirect/memory indirect\n9A  cd    CALL ptr16:16    17+m,pm=34+m   Call intersegment, to full\n                                          pointer given\n9A  cd    CALL ptr16:16    pm=52+m        Call gate, same privilege\n9A  cd    CALL ptr16:16    pm=86+m        Call gate, more privilege, no\n                                          parameters\n9A  cd    CALL ptr16:16    pm=94+4x+m     Call gate, more privilege, x\n                                          parameters\n9A  cd    CALL ptr16:16    ts             Call to task\nFF  /3    CALL m16:16      22+m,pm=38+m   Call intersegment, address at\n                                          r/m dword\nFF  /3    CALL m16:16      pm=56+m        Call gate, same privilege\nFF  /3    CALL m16:16      pm=90+m        Call gate, more privilege, no\n                                          parameters\nFF  /3    CALL m16:16      pm=98+4x+m     Call gate, more privilege, x\n                                          parameters\nFF  /3    CALL m16:16      5 + ts         Call to task\nE8  cd    CALL rel32       7+m            Call near, displacement relative\n                                          to next instruction\nFF  /2    CALL r/m32       7+m/10+m       Call near, indirect\n9A  cp    CALL ptr16:32    17+m,pm=34+m   Call intersegment, to full\n                                          pointer given\n9A  cp    CALL ptr16:32    pm=52+m        Call gate, same privilege\n9A  cp    CALL ptr16:32    pm=86+m        Call gate, more privilege, no\n                                          parameters\n9A  cp    CALL ptr32:32    pm=94+4x+m     Call gate, more privilege, x\n                                          parameters\n9A  cp    CALL ptr16:32    ts             Call to task\nFF  /3    CALL m16:32      22+m,pm=38+m   Call intersegment, address at\n                                          r/m dword\nFF  /3    CALL m16:32      pm=56+m        Call gate, same privilege\nFF  /3    CALL m16:32      pm=90+m        Call gate, more privilege, no\n                                          parameters\nFF  /3    CALL m16:32      pm=98+4x+m     Call gate, more privilege, x\n                                          parameters\nFF  /3    CALL m16:32      5 + ts         Call to task\n\n\n\nNOTE:\n  Values of ts are given by the following table:\n\n                             New Task\n              386 TSS         386 TSS         286 TSS\n  Old         VM = 0          VM = 1\n  Task                     Via Task Gate?\n\n              N     Y         N     Y         N     Y\n\n386          300   309       217   226       273   282\nTSS VM=0\n\n286          298   307       217   226       273   282\nTSS\n\n\nOperation\n\nIF rel16 or rel32 type of call\nTHEN (* near relative call *)\n   IF OperandSize = 16\n   THEN\n      Push(IP);\n      EIP \u001b (EIP + rel16) AND 0000FFFFH;\n   ELSE (* OperandSize = 32 *)\n      Push(EIP);\n      EIP \u001b EIP + rel32;\n   FI;\nFI;\n\nIF r/m16 or r/m32 type of call\nTHEN (* near absolute call *)\n   IF OperandSize = 16\n   THEN\n      Push(IP);\n      EIP \u001b [r/m16] AND 0000FFFFH;\n   ELSE (* OperandSize = 32 *)\n      Push(EIP);\n      EIP \u001b [r/m32];\n   FI;\nFI;\n\nIF (PE = 0 OR (PE = 1 AND VM = 1))\n(* real mode or virtual 8086 mode *)\n   AND instruction = far CALL\n   (* i.e., operand type is m16:16, m16:32, ptr16:16, ptr16:32 *)\nTHEN\n   IF OperandSize = 16\n   THEN\n      Push(CS);\n      Push(IP); (* address of next instruction; 16 bits *)\n   ELSE\n      Push(CS); (* padded with 16 high-order bits *)\n      Push(EIP); (* address of next instruction; 32 bits *)\n   FI;\n   IF operand type is m16:16 or m16:32\n   THEN (* indirect far call *)\n      IF OperandSize = 16\n      THEN\n         CS:IP \u001b [m16:16];\n         EIP \u001b EIP AND 0000FFFFH; (* clear upper 16 bits *)\n      ELSE (* OperandSize = 32 *)\n         CS:EIP \u001b [m16:32];\n      FI;\n   FI;\n   IF operand type is ptr16:16 or ptr16:32\n   THEN (* direct far call *)\n      IF OperandSize = 16\n      THEN\n         CS:IP \u001b ptr16:16;\n         EIP \u001b EIP AND 0000FFFFH; (* clear upper 16 bits *)\n      ELSE (* OperandSize = 32 *)\n         CS:EIP \u001b ptr16:32;\n      FI;\n   FI;\nFI;\n\nIF (PE = 1 AND VM = 0) (* Protected mode, not V86 mode *)\n   AND instruction = far CALL\nTHEN\n   If indirect, then check access of EA doubleword;\n      #GP(0) if limit violation;\n   New CS selector must not be null else #GP(0);\n   Check that new CS selector index is within its\n      descriptor table limits; else #GP(new CS selector);\n   Examine AR byte of selected descriptor for various legal values;\n      depending on value:\n      go to CONFORMING-CODE-SEGMENT;\n      go to NONCONFORMING-CODE-SEGMENT;\n      go to CALL-GATE;\n      go to TASK-GATE;\n      go to TASK-STATE-SEGMENT;\n   ELSE #GP(code segment selector);\nFI;\n\nCONFORMING-CODE-SEGMENT:\n   DPL must be  CPL ELSE #GP(code segment selector);\n   Segment must be present ELSE #NP(code segment selector);\n   Stack must be big enough for return address ELSE #SS(0);\n   Instruction pointer must be in code segment limit ELSE #GP(0);\n   Load code segment descriptor into CS register;\n   Load CS with new code segment selector;\n   Load EIP with zero-extend(new offset);\n   IF OperandSize=16 THEN EIP \u001b EIP AND 0000FFFFH; FI;\n\nNONCONFORMING-CODE-SEGMENT:\n   RPL must be  CPL ELSE #GP(code segment selector)\n   DPL must be = CPL ELSE #GP(code segment selector)\n   Segment must be present ELSE #NP(code segment selector)\n   Stack must be big enough for return address ELSE #SS(0)\n   Instruction pointer must be in code segment limit ELSE #GP(0)\n   Load code segment descriptor into CS register\n   Load CS with new code segment selector\n   Set RPL of CS to CPL\n   Load EIP with zero-extend(new offset);\n   IF OperandSize=16 THEN EIP \u001b EIP AND 0000FFFFH; FI;\n\nCALL-GATE:\n   Call gate DPL must be  CPL ELSE #GP(call gate selector)\n   Call gate DPL must be  RPL ELSE #GP(call gate selector)\n   Call gate must be present ELSE #NP(call gate selector)\n   Examine code segment selector in call gate descriptor:\n      Selector must not be null ELSE #GP(0)\n      Selector must be within its descriptor table\n         limits ELSE #GP(code segment selector)\n   AR byte of selected descriptor must indicate code\n      segment ELSE #GP(code segment selector)\n   DPL of selected descriptor must be  CPL ELSE\n      #GP(code segment selector)\n   IF non-conforming code segment AND DPL < CPL\n   THEN go to MORE-PRIVILEGE\n   ELSE go to SAME-PRIVILEGE\n   FI;\n\nMORE-PRIVILEGE:\n   Get new SS selector for new privilege level from TSS\n      Check selector and descriptor for new SS:\n         Selector must not be null ELSE #TS(0)\n         Selector index must be within its descriptor\n            table limits ELSE #TS(SS selector)\n         Selector's RPL must equal DPL of code segment\n            ELSE #TS(SS selector)\n         Stack segment DPL must equal DPL of code\n            segment ELSE #TS(SS selector)\n         Descriptor must indicate writable data segment\n            ELSE #TS(SS selector)\n         Segment present ELSE #SS(SS selector)\n      IF OperandSize=32\n      THEN\n         New stack must have room for parameters plus 16 bytes\n            ELSE #SS(0)\n         EIP must be in code segment limit ELSE #GP(0)\n         Load new SS:eSP value from TSS\n         Load new CS:EIP value from gate\n      ELSE\n         New stack must have room for parameters plus 8 bytes ELSE #SS(0)\n         IP must be in code segment limit ELSE #GP(0)\n         Load new SS:eSP value from TSS\n         Load new CS:IP value from gate\n      FI;\n      Load CS descriptor\n      Load SS descriptor\n      Push long pointer of old stack onto new stack\n      Get word count from call gate, mask to 5 bits\n      Copy parameters from old stack onto new stack\n      Push return address onto new stack\n      Set CPL to stack segment DPL\n      Set RPL of CS to CPL\n\nSAME-PRIVILEGE:\n   IF OperandSize=32\n   THEN\n      Stack must have room for 6-byte return address (padded to 8 bytes)\n         ELSE #SS(0)\n      EIP must be within code segment limit ELSE #GP(0)\n      Load CS:EIP from gate\n   ELSE\n      Stack must have room for 4-byte return address ELSE #SS(0)\n      IP must be within code segment limit ELSE #GP(0)\n      Load CS:IP from gate\n   FI;\n   Push return address onto stack\n   Load code segment descriptor into CS register\n   Set RPL of CS to CPL\n\nTASK-GATE:\n   Task gate DPL must be  CPL ELSE #TS(gate selector)\n   Task gate DPL must be  RPL ELSE #TS(gate selector)\n   Task Gate must be present ELSE #NP(gate selector)\n   Examine selector to TSS, given in Task Gate descriptor:\n      Must specify global in the local/global bit ELSE #TS(TSS selector)\n      Index must be within GDT limits ELSE #TS(TSS selector)\n      TSS descriptor AR byte must specify nonbusy TSS\n         ELSE #TS(TSS selector)\n      Task State Segment must be present ELSE #NP(TSS selector)\n   SWITCH-TASKS (with nesting) to TSS\n   IP must be in code segment limit ELSE #TS(0)\n\nTASK-STATE-SEGMENT:\n   TSS DPL must be  CPL else #TS(TSS selector)\n   TSS DPL must be  RPL ELSE #TS(TSS selector)\n   TSS descriptor AR byte must specify available TSS\n      ELSE #TS(TSS selector)\n   Task State Segment must be present ELSE #NP(TSS selector)\n   SWITCH-TASKS (with nesting) to TSS\n   IP must be in code segment limit ELSE #TS(0)\n\nDescription\n\nThe CALL instruction causes the procedure named in the operand to be\nexecuted. When the procedure is complete (a return instruction is executed\nwithin the procedure), execution continues at the instruction that follows\nthe CALL instruction.\n\nThe action of the different forms of the instruction are described below.\n\nNear calls are those with destinations of type r/m16, r/m32, rel16, rel32;\nchanging or saving the segment register value is not necessary. The CALL\nrel16 and CALL rel32 forms add a signed offset to the address of the\ninstruction following CALL to determine the destination. The rel16 form is\nused when the instruction's operand-size attribute is 16 bits; rel32 is used\nwhen the operand-size attribute is 32 bits. The result is stored in the\n32-bit EIP register. With rel16, the upper 16 bits of EIP are cleared,\nresulting in an offset whose value does not exceed 16 bits. CALL r/m16 and\nCALL r/m32 specify a register or memory location from which the absolute\nsegment offset is fetched. The offset fetched from r/m is 32 bits for an\noperand-size attribute of 32 (r/m32), or 16 bits for an operand-size of 16\n(r/m16). The offset of the instruction following CALL is pushed onto the\nstack. It will be popped by a near RET instruction within the procedure. The\nCS register is not changed by this form of CALL.\n\nThe far calls, CALL ptr16:16 and CALL ptr16:32, use a four-byte or six-byte\noperand as a long pointer to the procedure called. The CALL m16:16 and\nm16:32 forms fetch the long pointer from the memory location\nspecified (indirection). In Real Address Mode or Virtual 8086 Mode, the long\npointer provides 16 bits for the CS register and 16 or 32 bits for the EIP\nregister (depending on the operand-size attribute). These forms of the\ninstruction push both CS and IP or EIP as a return address.\n\nIn Protected Mode, both long pointer forms consult the AR byte in the\ndescriptor indexed by the selector part of the long pointer. Depending on\nthe value of the AR byte, the call will perform one of the following types\nof control transfers:\n\n    A far call to the same protection level\n    An inter-protection level far call\n    A task switch\n\nFor more information on Protected Mode control transfers, refer to\nChapter 6 and Chapter 7.\n\nFlags Affected\n\nAll flags are affected if a task switch occurs; no flags are affected if a\ntask switch does not occur\n\nProtected Mode Exceptions\n\nFor far calls: #GP, #NP, #SS, and #TS, as indicated in the list above\n\nFor near direct calls: #GP(0) if procedure location is beyond the code\nsegment limits; #SS(0) if pushing the return address exceeds the bounds of\nthe stack segment; #PF (fault-code) for a page fault\n\nFor a near indirect call: #GP(0) for an illegal memory operand effective\naddress in the CS, DS, ES, FS, or GS segments; #SS(0) for an illegal address\nin the SS segment; #GP(0) if the indirect offset obtained is beyond the code\nsegment limits; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\nNotes\n\nAny far call from a 32-bit code segment to 16-bit code segments should be\nmade from the first 64K bytes of the 32-bit code segment, since the\noperand-size attribute of the instruction is set to 16, thus allowing only a\n16-bit return address offset to be saved.\n\n\nCBW/CWDE  Convert Byte to Word/Convert Word to Doubleword\n\nOpcode    Instruction     Clocks          Description\n\n98        CBW             3               AX \u001b sign-extend of AL\n98        CWDE            3               EAX \u001b sign-extend of AX\n\n\nOperation\n\nIF OperandSize = 16 (* instruction = CBW *)\nTHEN AX \u001b SignExtend(AL);\nELSE (* OperandSize = 32, instruction = CWDE *)\n   EAX \u001b SignExtend(AX);\nFI;\n\nDescription\n\nCBW converts the signed byte in AL to a signed word in AX by extending the\nmost significant bit of AL (the sign bit) into all of the bits of AH. CWDE\nconverts the signed word in AX to a doubleword in EAX by extending the most\nsignificant bit of AX into the two most significant bytes of EAX. Note that\nCWDE is different from CWD. CWD uses DX:AX rather than EAX as a destination.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nCLC  Clear Carry Flag\n\nOpcode    Instruction     Clocks          Description\n\nF8        CLC             2               Clear carry flag\n\n\nOperation\n\nCF \u001b 0;\n\nDescription\n\nCLC sets the carry flag to zero. It does not affect other flags or\nregisters.\n\nFlags Affected\n\nCF = 0\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nCLD  Clear Direction Flag\n\nOpcode    Instruction     Clocks   Description\n\nFC        CLD             2        Clear direction flag; SI and DI\n                                   will increment during string\n                                   instructions\n\n\nOperation\n\nDF \u001b 0;\n\nDescription\n\nCLD clears the direction flag. No other flags or registers are affected.\nAfter CLD is executed, string operations will increment the index registers\n(SI and/or DI) that they use.\n\nFlags Affected\n\nDF = 0\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nCLI  Clear Interrupt Flag\n\nOpcode    Instruction    Clocks   Description\n\nFA        CLI            3        Clear interrupt flag; interrupts disabled\n\n\nOperation\n\nIF \u001b 0;\n\nDescription\n\nCLI clears the interrupt flag if the current privilege level is at least as\nprivileged as IOPL. No other flags are affected. External interrupts are not\nrecognized at the end of the CLI instruction or from that point on until the\ninterrupt flag is set.\n\nFlags Affected\n\nIF = 0\n\nProtected Mode Exceptions\n\n#GP(0) if the current privilege level is greater (has less privilege) than\nthe IOPL in the flags register. IOPL specifies the least privileged level at\nwhich I/O can be performed.\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\n#GP(0) as for Protected Mode\n\n\nCLTS  Clear Task-Switched Flag in CR0\n\nOpcode    Instruction    Clocks   Description\n\nOF  06    CLTS           5        Clear task-switched flag\n\n\nOperation\n\nTS Flag in CR0 \u001b 0;\n\nDescription\n\nCLTS clears the task-switched (TS) flag in register CR0. This flag is set by\nthe 80386 every time a task switch occurs. The TS flag is used to manage\nprocessor extensions as follows:\n\n    Every execution of an ESC instruction is trapped if the TS flag is set.\n\n    Execution of a WAIT instruction is trapped if the MP flag and the TS\n     flag are both set.\n\nThus, if a task switch was made after an ESC instruction was begun, the\nprocessor extension's context may need to be saved before a new ESC\ninstruction can be issued. The fault handler saves the context and resets\nthe TS flag.\n\nCLTS appears in operating system software, not in application programs. It\nis a privileged instruction that can only be executed at privilege level 0.\n\nFlags Affected\n\nTS = 0 (TS is in CR0, not the flag register)\n\nProtected Mode Exceptions\n\n#GP(0) if CLTS is executed with a current privilege level other than 0\n\nReal Address Mode Exceptions\n\nNone (valid in Real Address Mode to allow initialization for Protected\nMode)\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode\n\n\nCMC  Complement Carry Flag\n\nOpcode    Instruction    Clocks   Description\n\nF5        CMC            2        Complement carry flag\n\n\nOperation\n\nCF \u001b NOT CF;\n\nDescription\n\nCMC reverses the setting of the carry flag. No other flags are affected.\n\nFlags Affected\n\nCF as described above\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nCMP  Compare Two Operands\n\n\nOpcode          Instruction        Clocks   Description\n\n3C  ib          CMP AL,imm8        2        Compare immediate byte to AL\n3D  iw          CMP AX,imm16       2        Compare immediate word to AX\n3D  id          CMP EAX,imm32      2        Compare immediate dword to EAX\n80  /7 ib       CMP r/m8,imm8      2/5      Compare immediate byte to r/m\n                                            byte\n81  /7 iw       CMP r/m16,imm16    2/5      Compare immediate word to r/m\n                                            word\n81  /7 id       CMP r/m32,imm32    2/5      Compare immediate dword to r/m\n                                            dword\n83  /7 ib       CMP r/m16,imm8     2/5      Compare sign extended immediate\n                                            byte to r/m word\n83  /7 ib       CMP r/m32,imm8     2/5      Compare sign extended immediate\n                                            byte to r/m dword\n38  /r          CMP r/m8,r8        2/5      Compare byte register to r/m\n                                            byte\n39  /r          CMP r/m16,r16      2/5      Compare word register to r/m\n                                            word\n39  /r          CMP r/m32,r32      2/5      Compare dword register to r/m\n                                            dword\n3A  /r          CMP r8,r/m8        2/6      Compare r/m byte to byte\n                                            register\n3B  /r          CMP r16,r/m16      2/6      Compare r/m word to word\n                                            register\n3B  /r          CMP r32,r/m32      2/6      Compare r/m dword to dword\n                                            register\n\n\nOperation\n\nLeftSRC - SignExtend(RightSRC);\n(* CMP does not store a result; its purpose is to set the flags *)\n\nDescription\n\nCMP subtracts the second operand from the first but, unlike the SUB\ninstruction, does not store the result; only the flags are changed. CMP is\ntypically used in conjunction with conditional jumps and the SETcc\ninstruction. (Refer to Appendix D for the list of signed and unsigned flag\ntests provided.) If an operand greater than one byte is compared to an\nimmediate byte, the byte value is first sign-extended.\n\nFlags Affected\n\nOF, SF, ZF, AF, PF, and CF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS, ES,\nFS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nCMPS/CMPSB/CMPSW/CMPSD  Compare String Operands\n\nOpcode    Instruction        Clocks   Description\n\nA6        CMPS m8,m8         10       Compare bytes ES:[(E)DI] (second\n                                      operand) with   [(E)SI] (first \n                                      operand)\nA7        CMPS m16,m16       10       Compare words ES:[(E)DI] (second\n                                      operand) with   [(E)SI] (first \n                                      operand)\nA7        CMPS m32,m32       10       Compare dwords ES:[(E)DI]\n                                      (second operand) with [(E)SI] \n                                      (first operand)\nA6        CMPSB              10       Compare bytes ES:[(E)DI] with\n                                      DS:[SI]\nA7        CMPSW              10       Compare words ES:[(E)DI] with\n                                      DS:[SI]\nA7        CMPSD              10       Compare dwords ES:[(E)DI] with\n                                      DS:[SI]\n\n\nOperation\n\nIF (instruction = CMPSD) OR\n   (instruction has operands of type DWORD)\nTHEN OperandSize \u001b 32;\nELSE OperandSize \u001b 16;\nFI;\nIF AddressSize = 16\nTHEN\n   use SI for source-index and DI for destination-index\nELSE (* AddressSize = 32 *)\n   use ESI for source-index and EDI for destination-index;\nFI;\nIF byte type of instruction\nTHEN\n   [source-index] - [destination-index]; (* byte comparison *)\n   IF DF = 0 THEN IncDec \u001b 1 ELSE IncDec \u001b -1; FI;\nELSE\n   IF OperandSize = 16\n   THEN\n      [source-index] - [destination-index]; (* word comparison *)\n      IF DF = 0 THEN IncDec \u001b 2 ELSE IncDec \u001b -2; FI;\n   ELSE (* OperandSize = 32 *)\n      [source-index] - [destination-index]; (* dword comparison *)\n      IF DF = 0 THEN IncDec \u001b 4 ELSE IncDec \u001b -4; FI;\n   FI;\nFI;\nsource-index = source-index + IncDec;\ndestination-index = destination-index + IncDec;\n\nDescription\n\nCMPS compares the byte, word, or doubleword pointed to by the source-index\nregister with the byte, word, or doubleword pointed to by the\ndestination-index register.\n\nIf the address-size attribute of this instruction is 16 bits, SI and DI\nwill be used for source- and destination-index registers; otherwise ESI and\nEDI will be used. Load the correct index values into SI and DI (or ESI and\nEDI) before executing CMPS.\n\nThe comparison is done by subtracting the operand indexed by\nthe destination-index register from the operand indexed by the source-index\nregister.\n\nNote that the direction of subtraction for CMPS is [SI] - [DI] or\n[ESI] - [EDI]. The left operand (SI or ESI) is the source and the right\noperand (DI or EDI) is the destination. This is the reverse of the usual\nIntel convention in which the left operand is the destination and the right\noperand is the source.\n\nThe result of the subtraction is not stored; only the flags reflect the\nchange. The types of the operands determine whether bytes, words, or\ndoublewords are compared. For the first operand (SI or ESI), the DS register\nis used, unless a segment override byte is present. The second operand (DI\nor EDI) must be addressable from the ES register; no segment override is\npossible.\n\nAfter the comparison is made, both the source-index register and\ndestination-index register are automatically advanced. If the direction flag\nis 0 (CLD was executed), the registers increment; if the direction flag is 1\n(STD was executed), the registers decrement. The registers increment or\ndecrement by 1 if a byte is compared, by 2 if a word is compared, or by 4 if\na doubleword is compared.\n\nCMPSB, CMPSW and CMPSD are synonyms for the byte, word, and\ndoubleword CMPS instructions, respectively.\n\nCMPS can be preceded by the REPE or REPNE prefix for block comparison of CX\nor ECX bytes, words, or doublewords. Refer to the description of the REP\ninstruction for more information on this operation.\n\nFlags Affected\n\nOF, SF, ZF, AF, PF, and CF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS, ES,\nFS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF (fault-code) for a page fault\n\n\nCWD/CDQ  Convert Word to Doubleword/Convert Doubleword to\n           Quadword\n\nOpcode    Instruction        Clocks   Description\n\n99        CWD                2        DX:AX \u001b sign-extend of AX\n99        CDQ                2        EDX:EAX \u001b sign-extend of EAX\n\n\nOperation\n\nIF OperandSize = 16 (* CWD instruction *)\nTHEN\n   IF AX < 0 THEN DX \u001b 0FFFFH; ELSE DX \u001b 0; FI;\nELSE (* OperandSize = 32, CDQ instruction *)\n   IF EAX < 0 THEN EDX \u001b 0FFFFFFFFH; ELSE EDX \u001b 0; FI;\nFI;\n\nDescription\n\nCWD converts the signed word in AX to a signed doubleword in DX:AX\nby extending the most significant bit of AX into all the bits of DX. CDQ\nconverts the signed doubleword in EAX to a signed 64-bit integer in the\nregister pair EDX:EAX by extending the most significant bit of EAX\n(the sign bit) into all the bits of EDX. Note that CWD is different from\nCWDE. CWDE uses EAX as a destination, instead of DX:AX.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nDAA  Decimal Adjust AL after Addition\n\nOpcode    Instruction        Clocks   Description\n\n27        DAA                4        Decimal adjust AL after addition\n\n\nOperation\n\nIF ((AL AND 0FH) > 9) OR (AF = 1)\nTHEN\n   AL \u001b AL + 6;\n   AF \u001b 1;\nELSE\n   AF \u001b 0;\nFI;\nIF (AL > 9FH) OR (CF = 1)\nTHEN\n   AL \u001b AL + 60H;\n   CF \u001b 1;\nELSE CF \u001b 0;\nFI;\n\nDescription\n\nExecute DAA only after executing an ADD instruction that leaves a\ntwo-BCD-digit byte result in the AL register. The ADD operands should\nconsist of two packed BCD digits. The DAA instruction adjusts AL to\ncontain the correct two-digit packed decimal result.\n\nFlags Affected\n\nAF and CF as described above; SF, ZF, PF, and CF as described in\nAppendix C.\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nDAS  Decimal Adjust AL after Subtraction\n\nOpcode    Instruction        Clocks   Description\n\n2F        DAS                4        Decimal adjust AL after subtraction\n\n\nOperation\n\nIF (AL AND 0FH) > 9 OR AF = 1\nTHEN\n   AL \u001b AL - 6;\n   AF \u001b 1;\nELSE\n   AF \u001b 0;\nFI;\nIF (AL > 9FH) OR (CF = 1)\nTHEN\n   AL \u001b AL - 60H;\n   CF \u001b 1;\nELSE CF \u001b 0;\nFI;\n\nDescription\n\nExecute DAS only after a subtraction instruction that leaves a\ntwo-BCD-digit byte result in the AL register. The operands should consist\nof two packed BCD digits. DAS adjusts AL to contain the correct packed\ntwo-digit decimal result.\n\nFlags Affected\n\nAF and CF as described above; SF, ZF, and PF as described in Appendix C.\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nDEC  Decrement by 1\n\nOpcode    Instruction        Clocks   Description\n\nFE /1     DEC r/m8           2/6      Decrement r/m byte by 1\nFF /1     DEC r/m16          2/6      Decrement r/m word by 1\n          DEC r/m32          2/6      Decrement r/m dword by 1\n48+rw     DEC r16            2        Decrement word register by 1\n48+rw     DEC r32            2        Decrement dword register by 1\n\n\nOperation\n\nDEST \u001b DEST - 1;\n\nDescription\n\nDEC subtracts 1 from the operand. DEC does not change the carry flag.\nTo affect the carry flag, use the SUB instruction with an immediate\noperand of 1.\n\nFlags Affected\n\nOF, SF, ZF, AF, and PF as described in Appendix C.\n\nProtected Mode Exceptions\n\n#GP(0) if the result is a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nDIV  Unsigned Divide\n\nOpcode    Instruction        Clocks   Description\n\nF6 /6     DIV AL,r/m8        14/17    Unsigned divide AX by r/m byte\n                                      (AL=Quo, AH=Rem)\nF7 /6     DIV AX,r/m16       22/25    Unsigned divide DX:AX by r/m\n                                      word (AX=Quo, DX=Rem)\nF7 /6     DIV EAX,r/m32      38/41    Unsigned divide EDX:EAX by r/m\n                                      dword (EAX=Quo, EDX=Rem)\n\n\nOperation\n\ntemp \u001b dividend / divisor;\nIF temp does not fit in quotient\nTHEN Interrupt 0;\nELSE\n   quotient \u001b temp;\n   remainder \u001b dividend MOD (r/m);\nFI;\n\n\nNote:\n  Divisions are unsigned. The divisor is given by the r/m operand.\n  The dividend, quotient, and remainder use implicit registers. Refer to\n  the table under \"Description.\"\n\n\nDescription\n\nDIV performs an unsigned division. The dividend is implicit; only the\ndivisor is given as an operand. The remainder is always less than the\ndivisor. The type of the divisor determines which registers to use as\nfollows:\n\n    Size    Dividend     Divisor   Quotient   Remainder\n    byte    AX           r/m8       AL          AH\n    word    DX:AX        r/m16      AX          DX\n    dword   EDX:EAX      r/m32      EAX         EDX\n\nFlags Affected\n\nOF, SF, ZF, AR, PF, CF are undefined.\n\nProtected Mode Exceptions\n\nInterrupt 0 if the quotient is too large to fit in the designated register\n(AL, AX, or EAX), or if the divisor is 0; #GP(0) for an illegal memory\noperand effective address in the CS, DS, ES, FS, or GS segments; #SS(0)\nfor an illegal address in the SS segment; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 0 if the quotient is too big to fit in the designated register\n(AL, AX, or EAX), or if the divisor is 0; Interrupt 13 if any part of the\noperand would lie outside of the effective address space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nENTER  Make Stack Frame for Procedure Parameters\n\nOpcode      Instruction        Clocks     Description\n\nC8 iw 00    ENTER imm16,0      10         Make procedure stack frame\nC8 iw 01    ENTER imm16,1      12         Make stack frame for procedure\n                                          parameters\nC8 iw ib    ENTER imm16,imm8   15+4(n-1)  Make stack frame for\n                                          procedure parameters\n\n\nOperation\n\nlevel \u001b level MOD 32\nIF OperandSize = 16 THEN Push(BP) ELSE Push (EBP) FI;\n   (* Save stack pointer *)\nframe-ptr \u001b eSP\nIF level > 0\nTHEN (* level is rightmost parameter *)\n   FOR i \u001b 1 TO level - 1\n   DO\n      IF OperandSize = 16\n      THEN\n         BP \u001b BP - 2;\n         Push[BP]\n      ELSE (* OperandSize = 32 *)\n         EBP \u001b EBP - 4;\n         Push[EBP];\n      FI;\n   OD;\n   Push(frame-ptr)\nFI;\nIF OperandSize = 16 THEN BP \u001b frame-ptr ELSE EBP \u001b frame-ptr; FI;\nIF StackAddrSize = 16\nTHEN SP \u001b SP - First operand;\nELSE ESP \u001b ESP - ZeroExtend(First operand);\nFI;\n\nDescription\n\nENTER creates the stack frame required by most block-structured\nhigh-level languages. The first operand specifies the number of bytes of\ndynamic storage allocated on the stack for the routine being entered.\nThe second operand gives the lexical nesting level (0 to 31) of the routine\nwithin the high-level language source code. It determines the number of\nstack frame pointers copied into the new stack frame from the preceding\nframe. BP (or EBP, if the operand-size attribute is 32 bits) is the current\nstack frame pointer.\n\nIf the operand-size attribute is 16 bits, the processor uses BP as the\nframe pointer and SP as the stack pointer. If the operand-size attribute is\n32 bits, the processor uses EBP for the frame pointer and ESP for the stack\npointer.\n\nIf the second operand is 0, ENTER pushes the frame pointer (BP or\nEBP) onto the stack; ENTER then subtracts the first operand from the\nstack pointer and sets the frame pointer to the current stack-pointer\nvalue.\n\nFor example, a procedure with 12 bytes of local variables would have an\nENTER 12,0 instruction at its entry point and a LEAVE instruction\nbefore every RET. The 12 local bytes would be addressed as negative\noffsets from the frame pointer.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#SS(0) if SP or ESP would exceed the stack limit at any point during\ninstruction execution; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nHLT  Halt\n\nOpcode      Instruction        Clocks     Description\n\nF4          HLT                5          Halt\n\n\nOperation\n\nEnter Halt state;\n\nDescription\n\nHALT stops instruction execution and places the 80386 in a HALT state.\nAn enabled interrupt, NMI, or a reset will resume execution. If an\ninterrupt (including NMI) is used to resume execution after HLT, the saved\nCS:IP (or CS:EIP) value points to the instruction following HLT.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\nHLT is a privileged instruction; #GP(0) if the current privilege level is\nnot 0\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\n#GP(0); HLT is a privileged instruction\n\n\nIDIV  Signed Divide\n\nOpcode      Instruction        Clocks   Description\n\nF6 /7       IDIV r/m8          19       Signed divide AX by r/m byte\n                                        (AL=Quo, AH=Rem)\nF7 /7       IDIV AX,r/m16      27       Signed divide DX:AX by EA word\n                                        (AX=Quo, DX=Rem)\nF7 /7       IDIV EAX,r/m32     43       Signed divide EDX:EAX by DWORD\n                                        byte (EAX=Quo, EDX=Rem)\n\n\nOperation\n\ntemp \u001b dividend / divisor;\nIF temp does not fit in quotient\nTHEN Interrupt 0;\nELSE\n   quotient \u001b temp;\n   remainder \u001b dividend MOD (r/m);\nFI;\n\n\nNotes:\n  Divisions are signed. The divisor is given by the r/m operand. The\n  dividend, quotient, and remainder use implicit registers. Refer to the\n  table under \"Description.\"\n\n\nDescription\n\nIDIV performs a signed division. The dividend, quotient, and remainder\nare implicitly allocated to fixed registers. Only the divisor is given as\nan explicit r/m operand. The type of the divisor determines which registers\nto use as follows:\n\nSize     Divisor    Quotient    Remainder  Dividend\nbyte     r/m8        AL           AH       AX\nword     r/m16       AX           DX       DX:AX\ndword    r/m32       EAX          EDX      EDX:EAX\n\nIf the resulting quotient is too large to fit in the destination, or if the\ndivision is 0, an Interrupt 0 is generated. Nonintegral quotients are\ntruncated toward 0. The remainder has the same sign as the dividend\nand the absolute value of the remainder is always less than the absolute\nvalue of the divisor.\n\nFlags Affected\n\nOF, SF, ZF, AR, PF, CF are undefined.\n\nProtected Mode Exceptions\n\nInterrupt 0 if the quotient is too large to fit in the designated register\n(AL or AX), or if the divisor is 0; #GP (0) for an illegal memory operand\neffective address in the CS, DS, ES, FS, or GS segments; #SS(0) for an\nillegal address in the SS segment; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 0 if the quotient is too large to fit in the designated register\n(AL or AX), or if the divisor is 0; Interrupt 13 if any part of the operand\nwould lie outside of the effective address space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nIMUL  Signed Multiply\n\n\nOpcode      Instruction            Clocks      Description\n\nF6  /5      IMUL r/m8              9-14/12-17  AX\u001b AL * r/m byte\nF7  /5      IMUL r/m16             9-22/12-25  DX:AX \u001b AX * r/m word\nF7  /5      IMUL r/m32             9-38/12-41  EDX:EAX \u001b EAX * r/m dword\n0F  AF /r   IMUL r16,r/m16         9-22/12-25  word register \u001b word\n                                               register * r/m word\n0F  AF /r   IMUL r32,r/m32         9-38/12-41  dword register \u001b dword\n                                               register * r/m dword\n6B  /r ib   IMUL r16,r/m16,imm8    9-14/12-17  word register \u001b r/m16 *\n                                               sign-extended immediate byte\n6B  /r ib   IMUL r32,r/m32,imm8    9-14/12-17  dword register \u001b r/m32 *\n                                               sign-extended immediate byte\n6B  /r ib   IMUL r16,imm8          9-14/12-17  word register \u001b word\n                                               register * sign-extended\n                                               immediate byte\n6B  /r ib   IMUL r32,imm8          9-14/12-17  dword register \u001b dword\n                                               register * sign-extended\n                                               immediate byte\n69  /r iw   IMUL r16,r/m16,imm16   9-22/12-25  word register \u001b r/m16 *\n                                               immediate word\n69  /r id   IMUL r32,r/m32,imm32   9-38/12-41  dword register \u001b r/m32 *\n                                               immediate dword\n69  /r iw   IMUL r16,imm16         9-22/12-25  word register \u001b r/m16 *\n                                               immediate word\n69  /r id   IMUL r32,imm32         9-38/12-41  dword register \u001b r/m32 *\n                                               immediate dword\n\n\n\nNOTES:\n  The 80386 uses an early-out multiply algorithm. The actual number of\n  clocks depends on the position of the most significant bit in the\n  optimizing multiplier, shown underlined above. The optimization occurs for\n  positive and negative values. Because of the early-out algorithm, clock\n  counts given are minimum to maximum. To calculate the actual clocks, use\n  the following formula:\n\n\n  Actual clock = if m <> 0 then max(ceiling(log{2} m), 3) + 6 clocks  \n  Actual clock = if m = 0 then 9 clocks   \n  (where m is the multiplier)\n\nAdd three clocks if the multiplier is a memory operand.\n\nOperation\n\nresult \u001b multiplicand * multiplier;\n\nDescription\n\nIMUL performs signed multiplication. Some forms of the instruction\nuse implicit register operands. The operand combinations for all forms\nof the instruction are shown in the \"Description\" column above.\n\nIMUL clears the overflow and carry flags under the following conditions:\n\n   Instruction Form    Condition for Clearing CF and OF\n   r/m8                AL = sign-extend of AL to 16 bits\n   r/m16               AX = sign-extend of AX to 32 bits\n   r/m32               EDX:EAX = sign-extend of EAX to 32 bits\n   r16,r/m16           Result exactly fits within r16\n   r/32,r/m32          Result exactly fits within r32\n   r16,r/m16,imm16     Result exactly fits within r16\n   r32,r/m32,imm32     Result exactly fits within r32\n\nFlags Affected\n\nOF and CF as described above; SF, ZF, AF, and PF are undefined\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exeptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\nNotes\n\nWhen using the accumulator forms (IMUL r/m8, IMUL r/m16, or IMUL\nr/m32), the result of the multiplication is available even if the overflow\nflag is set because the result is two times the size of the multiplicand\nand multiplier. This is large enough to handle any possible result.\n\n\nIN  Input from Port\n\nOpcode    Instruction   Clocks            Description\n\nE4  ib    IN AL,imm8    12,pm=6*/26**     Input byte from immediate port\n                                          into AL\nE5  ib    IN AX,imm8    12,pm=6*/26**     Input word from immediate port\n                                          into AX\nE5  ib    IN EAX,imm8   12,pm=6*/26**     Input dword from immediate port\n                                          into EAX\nEC        IN AL,DX      13,pm=7*/27**     Input byte from port DX into AL\nED        IN AX,DX      13,pm=7*/27**     Input word from port DX into AX\nED        IN EAX,DX     13,pm=7*/27**     Input dword from port DX into\n                                          EAX\n\n\n\nNOTES:\n   *If CPL  IOPL\n  **If CPL > IOPL or if in virtual 8086 mode\n\n\nOperation\n\nIF (PE = 1) AND ((VM = 1) OR (CPL > IOPL))\nTHEN (* Virtual 8086 mode, or protected mode with CPL > IOPL *)\n   IF NOT I-O-Permission (SRC, width(SRC))\n   THEN #GP(0);\n   FI;\nFI;\nDEST \u001b [SRC]; (* Reads from I/O address space *)\n\nDescription\n\nIN transfers a data byte or data word from the port numbered by the\nsecond operand into the register (AL, AX, or EAX) specified by the first\noperand. Access any port from 0 to 65535 by placing the port number\nin the DX register and using an IN instruction with DX as the second\nparameter. These I/O instructions can be shortened by using an 8-bit\nport I/O in the instruction. The upper eight bits of the port address will\nbe 0 when 8-bit port I/O is used.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the current privilege level is larger (has less privilege) than\nIOPL and any of the corresponding I/O permission bits in TSS equals 1\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\n#GP(0) fault if any of the corresponding I/O permission bits in TSS\nequals 1\n\n\nINC  Increment by 1\n\nOpcode      Instruction        Clocks      Description\n\nFE  /0      INC r/m8                       Increment r/m byte by 1\nFF  /0      INC r/m16                      Increment r/m word by 1\nFF  /6      INC r/m32                      Increment r/m dword by 1\n40 + rw     INC r16                        Increment word register by 1\n40 + rd     INC r32                        Increment dword register by 1\n\n\nOperation\n\nDEST \u001b DEST + 1;\n\nDescription\n\nINC adds 1 to the operand. It does not change the carry flag. To affect\nthe carry flag, use the ADD instruction with a second operand of 1.\n\nFlags Affected\n\nOF, SF, ZF, AF, and PF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) if the operand is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nINS/INSB/INSW/INSD  Input from Port to String\n\nOpcode  Instruction    Clocks         Description\n\n6C      INS r/m8,DX    15,pm=9*/29**  Input byte from port DX into ES:(E)DI\n6D      INS r/m16,DX   15,pm=9*/29**  Input word from port DX into ES:(E)DI\n6D      INS r/m32,DX   15,pm=9*/29**  Input dword from port DX into ES:(E)DI\n6C      INSB           15,pm=9*/29**  Input byte from port DX into ES:(E)DI\n6D      INSW           15,pm=9*/29**  Input word from port DX into ES:(E)DI\n6D      INSD           15,pm=9*/29**  Input dword from port DX into ES:(E)DI\n\n\n\nNOTES:\n   *If CPL  IOPL\n  **If CPL > IOPL or if in virtual 8086 mode\n\n\nOperation\n\nIF AddressSize = 16\nTHEN use DI for dest-index;\nELSE (* AddressSize = 32 *)\n   use EDI for dest-index;\nFI;\nIF (PE = 1) AND ((VM = 1) OR (CPL > IOPL))\nTHEN (* Virtual 8086 mode, or protected mode with CPL > IOPL *)\n   IF NOT I-O-Permission (SRC, width(SRC))\n   THEN #GP(0);\n   FI;\nFI;\nIF byte type of instruction\nTHEN\n   ES:[dest-index] \u001b [DX]; (* Reads byte at DX from I/O address space *)\n   IF DF = 0 THEN IncDec \u001b 1 ELSE IncDec \u001b -1; FI;\nFI;\nIF OperandSize = 16\nTHEN\n   ES:[dest-index] \u001b [DX]; (* Reads word at DX from I/O address space *)\n   IF DF = 0 THEN IncDec \u001b 2 ELSE IncDec \u001b -2; FI;\nFI;\nIF OperandSize = 32\nTHEN\n   ES:[dest-index] \u001b [DX]; (* Reads dword at DX from I/O address space *)\n   IF DF = 0 THEN IncDec \u001b 4 ELSE IncDec \u001b -4; FI;\nFI;\ndest-index \u001b dest-index + IncDec;\n\nDescription\n\nINS transfers data from the input port numbered by the DX register to\nthe memory byte or word at ES:dest-index. The memory operand must\nbe addressable from ES; no segment override is possible. The destination\nregister is DI if the address-size attribute of the instruction is 16 bits,\nor EDI if the address-size attribute is 32 bits.\n\nINS does not allow the specification of the port number as an immediate\nvalue. The port must be addressed through the DX register value. Load\nthe correct value into DX before executing the INS instruction.\n\nThe destination address is determined by the contents of the destination\nindex register. Load the correct index into the destination index register\nbefore executing INS.\n\nAfter the transfer is made, DI or EDI advances automatically. If the\ndirection flag is 0 (CLD was executed), DI or EDI increments; if the\ndirection flag is 1 (STD was executed), DI or EDI decrements. DI\nincrements or decrements by 1 if a byte is input, by 2 if a word is input,\nor by 4 if a doubleword is input.\n\nINSB, INSW and INSD are synonyms of the byte, word, and doubleword\nINS instructions. INS can be preceded by the REP prefix for block input of\nCX bytes or words. Refer to the REP instruction for details of this\noperation.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if CPL is numerically greater than IOPL and any of the\ncorresponding I/O permission bits in TSS equals 1; #GP(0) if the\ndestination is in a nonwritable segment; #GP(0) for an illegal memory\noperand effective address in the CS, DS, ES, FS, or GS segments; #SS(0) for\nan illegal address in the SS segment; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\n#GP(0) fault if any of the corresponding I/O permission bits in TSS\nequals 1; #PF(fault-code) for a page fault\n\n\nINT/INTO  Call to Interrupt Procedure\n\n\nOpcode    Instruction  Clocks          Description\n\nCC        INT 3        33              Interrupt 3--trap to debugger\nCC        INT 3        pm=59           Interrupt 3--Protected Mode, same\n                                       privilege\nCC        INT 3        pm=99           Interrupt 3--Protected Mode, more\n                                       privilege\nCC        INT 3        pm=119          Interrupt 3--from V86 mode to PL 0\nCC        INT 3        ts              Interrupt 3--Protected Mode, via\n                                       task gate\nCD ib     INT imm8     37              Interrupt numbered by immediate\n                                       byte\nCD ib     INT imm8     pm=59           Interrupt--Protected Mode, same\n                                       privilege\nCD ib     INT imm8     pm=99           Interrupt--Protected Mode, more\n                                       privilege\nCD ib     INT imm8     pm=119          Interrupt--from V86 mode to PL 0\nCD ib     INT imm8     ts              Interrupt--Protected Mode, via task\n                                       gate\nCE        INTO         Fail:3,pm=3;\n                       Pass:35         Interrupt 4--if overflow flag is 1\nCE        INTO         pm=59           Interrupt 4--Protected Mode, same\n                                       privilege\nCE        INTO         pm=99           Interrupt 4--Protected Mode, more\n                                       privilege\nCE        INTO         pm=119          Interrupt 4--from V86 mode to PL 0\nCE        INTO         ts              Interrupt 4--Protected Mode, via\n                                       task gate\n\n\n\nNOTE:\n  Approximate values of ts are given by the following table:\n\n                            New Task\n\nOld Task       386 TSS       386 TSS       286 TSS\n               VM = 0        VM = 1\n\n386\nTSS VM=0         309           226           282\n\n386\nTSS VM=1         314           231           287\n\n286\nTSS              307           224           280\n\n\nOperation\n\n\nNOTE:\n  The following operational description applies not only to the\n  above instructions but also to external interrupts and exceptions.\n\n\nIF PE = 0\nTHEN GOTO REAL-ADDRESS-MODE;\nELSE GOTO PROTECTED-MODE;\nFI;\n\nREAL-ADDRESS-MODE:\n   Push (FLAGS);\n   IF \u001b 0; (* Clear interrupt flag *)\n   TF \u001b 0; (* Clear trap flag *)\n   Push(CS);\n   Push(IP);\n   (* No error codes are pushed *)\n   CS \u001b IDT[Interrupt number * 4].selector;\n   IP \u001b IDT[Interrupt number * 4].offset;\n\nPROTECTED-MODE:\n   Interrupt vector must be within IDT table limits,\n      else #GP(vector number * 8+2+EXT);\n   Descriptor AR byte must indicate interrupt gate, trap gate, or task gate,\n      else #GP(vector number * 8+2+EXT);\n   IF software interrupt (* i.e. caused by INT n, INT 3, or INTO *)\n   THEN\n      IF gate descriptor DPL < CPL\n      THEN #GP(vector number * 8+2+EXT);\n      FI;\n   FI;\n   Gate must be present, else #NP(vector number * 8+2+EXT);\n   IF trap gate OR interrupt gate\n   THEN GOTO TRAP-GATE-OR-INTERRUPT-GATE;\n   ELSE GOTO TASK-GATE;\n   FI;\n\nTRAP-GATE-OR-INTERRUPT-GATE:\n   Examine CS selector and descriptor given in the gate descriptor;\n   Selector must be non-null, else #GP (EXT);\n   Selector must be within its descriptor table limits\n      ELSE #GP(selector+EXT);\n   Descriptor AR byte must indicate code segment\n      ELSE #GP(selector + EXT);\n   Segment must be present, else #NP(selector+EXT);\n   IF code segment is non-conforming AND DPL < CPL\n   THEN GOTO INTERRUPT-TO-INNER-PRIVILEGE;\n   ELSE\n      IF code segment is conforming OR code segment DPL = CPL\n      THEN GOTO INTERRUPT-TO-SAME-PRIVILEGE-LEVEL;\n      ELSE #GP(CS selector + EXT);\n      FI;\n   FI;\n\nINTERRUPT-TO-INNER-PRIVILEGE:\n   Check selector and descriptor for new stack in current TSS;\n      Selector must be non-null, else #GP(EXT);\n      Selector index must be within its descriptor table limits\n         ELSE #TS(SS selector+EXT);\n      Selector's RPL must equal DPL of code segment, else #TS(SS\n         selector+EXT);\n      Stack segment DPL must equal DPL of code segment, else #TS(SS\n         selector+EXT);\n      Descriptor must indicate writable data segment, else #TS(SS\n         selector+EXT);\n      Segment must be present, else #SS(SS selector+EXT);\n   IF 32-bit gate\n   THEN New stack must have room for 20 bytes else #SS(0)\n   ELSE New stack must have room for 10 bytes else #SS(0)\n   FI;\n   Instruction pointer must be within CS segment boundaries else #GP(0);\n   Load new SS and eSP value from TSS;\n   IF 32-bit gate\n   THEN CS:EIP \u001b selector:offset from gate;\n   ELSE CS:IP \u001b selector:offset from gate;\n   FI;\n   Load CS descriptor into invisible portion of CS register;\n   Load SS descriptor into invisible portion of SS register;\n   IF 32-bit gate\n   THEN\n      Push (long pointer to old stack) (* 3 words padded to 4 *);\n      Push (EFLAGS);\n      Push (long pointer to return location) (* 3 words padded to 4*);\n   ELSE\n      Push (long pointer to old stack) (* 2 words *);\n      Push (FLAGS);\n      Push (long pointer to return location) (* 2 words *);\n   FI;\n   Set CPL to new code segment DPL;\n   Set RPL of CS to CPL;\n   IF interrupt gate THEN IF \u001b 0 (* interrupt flag to 0 (disabled) *); FI;\n   TF \u001b 0;\n   NT \u001b 0;\n\nINTERRUPT-FROM-V86-MODE:\n   TempEFlags \u001b EFLAGS;\n   VM \u001b 0;\n   TF \u001b 0;\n   IF service through Interrupt Gate THEN IF \u001b 0;\n   TempSS \u001b SS;\n   TempESP \u001b ESP;\n   SS \u001b TSS.SS0; (* Change to level 0 stack segment *)\n   ESP \u001b TSS.ESP0; (* Change to level 0 stack pointer *)\n   Push(GS); (* padded to two words *)\n   Push(FS); (* padded to two words *)\n   Push(DS); (* padded to two words *)\n   Push(ES); (* padded to two words *)\n   GS \u001b 0;\n   FS \u001b 0;\n   DS \u001b 0;\n   ES \u001b 0;\n   Push(TempSS); (* padded to two words *)\n   Push(TempESP);\n   Push(TempEFlags);\n   Push(CS); (* padded to two words *)\n   Push(EIP);\n   CS:EIP \u001b selector:offset from interrupt gate;\n   (* Starts execution of new routine in 80386 Protected Mode *)\n\nINTERRUPT-TO-SAME-PRIVILEGE-LEVEL:\n   IF 32-bit gate\n   THEN Current stack limits must allow pushing 10 bytes, else #SS(0);\n   ELSE Current stack limits must allow pushing 6 bytes, else #SS(0);\n   FI;\n   IF interrupt was caused by exception with error code\n   THEN Stack limits must allow push of two more bytes;\n   ELSE #SS(0);\n   FI;\n   Instruction pointer must be in CS limit, else #GP(0);\n   IF 32-bit gate\n   THEN\n      Push (EFLAGS);\n      Push (long pointer to return location); (* 3 words padded to 4 *)\n      CS:EIP \u001b selector:offset from gate;\n   ELSE (* 16-bit gate *)\n      Push (FLAGS);\n      Push (long pointer to return location); (* 2 words *)\n      CS:IP \u001b selector:offset from gate;\n   FI;\n   Load CS descriptor into invisible portion of CS register;\n   Set the RPL field of CS to CPL;\n   Push (error code); (* if any *)\n   IF interrupt gate THEN IF \u001b 0; FI;\n   TF \u001b 0;\n   NT \u001b 0;\n\nTASK-GATE:\n   Examine selector to TSS, given in task gate descriptor;\n      Must specify global in the local/global bit, else #TS(TSS selector);\n      Index must be within GDT limits, else #TS(TSS selector);\n      AR byte must specify available TSS (bottom bits 00001),\n         else #TS(TSS selector;\n      TSS must be present, else #NP(TSS selector);\n   SWITCH-TASKS with nesting to TSS;\n   IF interrupt was caused by fault with error code\n   THEN\n      Stack limits must allow push of two more bytes, else #SS(0);\n      Push error code onto stack;\n   FI;\n   Instruction pointer must be in CS limit, else #GP(0);\n\nDescription\n\nThe INT  instruction generates via software a call to an interrupt\nhandler. The immediate operand, from 0 to 255, gives the index number\ninto the Interrupt Descriptor Table (IDT) of the interrupt routine to be\ncalled. In Protected Mode, the IDT consists of an array of eight-byte\ndescriptors; the descriptor for the interrupt invoked must indicate an\ninterrupt, trap, or task gate. In Real Address Mode, the IDT is an array\nof four byte-long pointers. In Protected and Real Address Modes, the\nbase linear address of the IDT is defined by the contents of the IDTR.\n\nThe INTO conditional software instruction is identical to the INT\ninterrupt instruction except that the interrupt number is implicitly 4,\nand the interrupt is made only if the 80386 overflow flag is set.\n\nThe first 32 interrupts are reserved by Intel for system use. Some of\nthese interrupts are use for internally generated exceptions.\n\nINT n generally behaves like a far call except that the flags register is\npushed onto the stack before the return address. Interrupt procedures\nreturn via the IRET instruction, which pops the flags and return address\nfrom the stack.\n\nIn Real Address Mode, INT n pushes the flags, CS, and the return IP\nonto the stack, in that order, then jumps to the long pointer indexed by\nthe interrupt number.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP, #NP, #SS, and #TS as indicated under \"Operation\" above\n\nReal Address Mode Exceptions\n\nNone; if the SP or ESP = 1, 3, or 5 before executing INT or INTO,\nthe 80386 will shut down due to insufficient stack space\n\nVirtual 8086 Mode Exceptions\n\n#GP(0) fault if IOPL is less than 3, for INT  only, to permit emulation;\nInterrupt 3 (0CCH) generates Interrupt 3; INTO generates Interrupt 4\nif the overflow flag equals 1\n\n\nIRET/IRETD  Interrupt Return\n\nOpcode  Instruction  Clocks       Description\n\nCF      IRET         22,pm=38     Interrupt return (far return and pop\n                                  flags)\nCF      IRET         pm=82        Interrupt return to lesser privilege\nCF      IRET         ts           Interrupt return, different task (NT = 1)\nCF      IRETD        22,pm=38     Interrupt return (far return and pop\n                                  flags)\nCF      IRETD        pm=82        Interrupt return to lesser privilege\nCF      IRETD        pm=60        Interrupt return to V86 mode\nCF      IRETD        ts           Interrupt return, different task (NT = 1)\n\n\n\nNOTE:\n  Values of ts are given by the following table:\n\n                            New Task\n\nOld Task       386 TSS       386 TSS       286 TSS\n               VM = 0        VM = 1\n\n386\nTSS VM=0         275           224           271\n\n286\nTSS              265           214           232\n\n\nOperation\n\nIF PE = 0\nTHEN (* Real-address mode *)\n   IF OperandSize = 32 (* Instruction = IRETD *)\n   THEN EIP \u001b Pop();\n   ELSE (* Instruction = IRET *)\n      IP \u001b Pop();\n   FI;\n   CS \u001b Pop();\n   IF OperandSize = 32 (* Instruction = IRETD *)\n   THEN EFLAGS \u001b Pop();\n   ELSE (* Instruction = IRET *)\n      FLAGS \u001b Pop();\n   FI;\nELSE (* Protected mode *)\n   IF VM = 1\n   THEN #GP(0);\n   ELSE\n      IF NT = 1\n      THEN GOTO TASK-RETURN;\n      ELSE\n         IF VM = 1 in flags image on stack\n         THEN GO TO STACK-RETURN-TO-V86;\n         ELSE GOTO STACK-RETURN;\n         FI;\n      FI;\n   FI;\nFI;STACK-RETURN-TO-V86: (* Interrupted procedure was in V86 mode *)\n   IF return CS selector RPL < > 3\n   THEN #GP(Return selector);\n   FI;\n   IF top 36 bytes of stack not within limits\n   THEN #SS(0);\n   FI;\n   Examine return CS selector and associated descriptor:\n      IF selector is null, THEN #GP(0); FI;\n      IF selector index not within its descriptor table limits;\n      THEN #GP(Return selector);\n      FI;\n      IF AR byte does not indicate code segment\n      THEN #GP(Return selector);\n      FI;\n      IF code segment DPL not = 3;\n      THEN #GP(Return selector);\n      FI;\n      IF code segment not present\n      THEN #NP(Return selector);\n      FI;\n\n   Examine return SS selector and associated descriptor:\n      IF selector is null THEN #GP(0); FI;\n      IF selector index not within its descriptor table limits\n      THEN #GP(SS selector);\n      FI;\n      IF selector RPL not = RPL of return CS selector\n      THEN #GP(SS selector);\n      FI;\n      IF AR byte does not indicate a writable data segment\n      THEN #GP(SS selector);\n      FI;\n      IF stack segment DPL not = RPL of return CS selector\n      THEN #GP(SS selector);\n      FI;\n      IF SS not present\n      THEN #NP(SS selector);\n      FI;\n\n   IF instruction pointer not within code segment limit  THEN #GP(0);\n   FI;\n   EFLAGS \u001b SS:[eSP + 8]; (* Sets VM in interrupted routine *)\n   EIP \u001b Pop();\n   CS \u001b Pop(); (* CS behaves as in 8086, due to VM = 1 *)\n   throwaway \u001b Pop(); (* pop away EFLAGS already read *)\n   ES \u001b Pop(); (* pop 2 words; throw away high-order word *)\n   DS \u001b Pop(); (* pop 2 words; throw away high-order word *)\n   FS \u001b Pop(); (* pop 2 words; throw away high-order word *)\n   GS \u001b Pop(); (* pop 2 words; throw away high-order word *)\n   IF CS.RPL > CPL\n   THEN\n      TempESP \u001b Pop();\n      TempSS \u001b Pop();\n      SS:ESP \u001b TempSS:TempESP;\n   FI;\n\n   (* Resume execution in Virtual 8086 mode *)\n\nTASK-RETURN:\n   Examine Back Link Selector in TSS addressed by the current task\n      register:\n      Must specify global in the local/global bit, else #TS(new TSS\n         selector);\n      Index must be within GDT limits, else #TS(new TSS selector);\n      AR byte must specify TSS, else #TS(new TSS selector);\n      New TSS must be busy, else #TS(new TSS selector);\n      TSS must be present, else #NP(new TSS selector);\n   SWITCH-TASKS without nesting to TSS specified by back link selector;\n   Mark the task just abandoned as NOT BUSY;\n   Instruction pointer must be within code segment limit ELSE #GP(0);\n\nSTACK-RETURN:\n   IF OperandSize=32\n   THEN Third word on stack must be within stack limits, else #SS(0);\n   ELSE Second word on stack must be within stack limits, else #SS(0);\n   FI;\n   Return CS selector RPL must be  CPL, else #GP(Return selector);\n   IF return selector RPL = CPL\n   THEN GOTO RETURN-SAME-LEVEL;\n   ELSE GOTO RETURN-OUTER-LEVEL;\n   FI;\n\nRETURN-SAME-LEVEL:\n   IF OperandSize=32\n   THEN\n      Top 12 bytes on stack must be within limits, else #SS(0);\n      Return CS selector (at eSP+4) must be non-null, else #GP(0);\n   ELSE\n      Top 6 bytes on stack must be within limits, else #SS(0);\n      Return CS selector (at eSP+2) must be non-null, else #GP(0);\n   FI;\n   Selector index must be within its descriptor table limits, else #GP\n      (Return selector);\n   AR byte must indicate code segment, else #GP(Return selector);\n   IF non-conforming\n   THEN code segment DPL must = CPL;\n   ELSE #GP(Return selector);\n   FI;\n   IF conforming\n   THEN code segment DPL must be  CPL, else #GP(Return selector);\n   Segment must be present, else #NP(Return selector);\n   Instruction pointer must be within code segment boundaries, else #GP(0);\n   FI;\n   IF OperandSize=32\n   THEN\n      Load CS:EIP from stack;\n      Load CS-register with new code segment descriptor;\n      Load EFLAGS with third doubleword from stack;\n      Increment eSP by 12;\n   ELSE\n      Load CS-register with new code segment descriptor;\n      Load FLAGS with third word on stack;\n      Increment eSP by 6;\n   FI;\n\nRETURN-OUTER-LEVEL:\n   IF OperandSize=32\n   THEN Top 20 bytes on stack must be within limits, else #SS(0);\n   ELSE Top 10 bytes on stack must be within limits, else #SS(0);\n   FI;\n   Examine return CS selector and associated descriptor:\n      Selector must be non-null, else #GP(0);\n      Selector index must be within its descriptor table limits;\n         ELSE #GP(Return selector);\n      AR byte must indicate code segment, else #GP(Return selector);\n      IF non-conforming\n      THEN code segment DPL must = CS selector RPL;\n      ELSE #GP(Return selector);\n      FI;\n      IF conforming\n      THEN code segment DPL must be > CPL;\n      ELSE #GP(Return selector);\n      FI;\n      Segment must be present, else #NP(Return selector);\n   Examine return SS selector and associated descriptor:\n      Selector must be non-null, else #GP(0);\n      Selector index must be within its descriptor table limits\n         ELSE #GP(SS selector);\n      Selector RPL must equal the RPL of the return CS selector\n         ELSE #GP(SS selector);\n      AR byte must indicate a writable data segment, else #GP(SS selector);\n      Stack segment DPL must equal the RPL of the return CS selector\n         ELSE #GP(SS selector);\n      SS must be present, else #NP(SS selector);\n\n   Instruction pointer must be within code segment limit ELSE #GP(0);\n   IF OperandSize=32\n   THEN\n      Load CS:EIP from stack;\n      Load EFLAGS with values at (eSP+8);\n   ELSE\n      Load CS:IP from stack;\n      Load FLAGS with values at (eSP+4);\n   FI;\n   Load SS:eSP from stack;\n   Set CPL to the RPL of the return CS selector;\n   Load the CS register with the CS descriptor;\n   Load the SS register with the SS descriptor;\n   FOR each of ES, FS, GS, and DS\n   DO;\n      IF the current value of the register is not valid for the outer level;\n      THEN zero the register and clear the valid flag;\n      FI;\n      To be valid, the register setting must satisfy the following\n         properties:\n         Selector index must be within descriptor table limits;\n         AR byte must indicate data or readable code segment;\n         IF segment is data or non-conforming code,\n         THEN DPL must be  CPL, or DPL must be  RPL;\n   OD;\n\nDescription\n\nIn Real Address Mode, IRET pops the instruction pointer, CS, and the\nflags register from the stack and resumes the interrupted routine.\n\nIn Protected Mode, the action of IRET depends on the setting of the\nnested task flag (NT) bit in the flag register. When popping the new\nflag image from the stack, the IOPL bits in the flag register are changed\nonly when CPL equals 0.\n\nIf NT equals 0, IRET returns from an interrupt procedure without a\ntask switch. The code returned to must be equally or less privileged than\nthe interrupt routine (as indicated by the RPL bits of the CS selector\npopped from the stack). If the destination code is less privileged, IRET\nalso pops the stack pointer and SS from the stack.\n\nIf NT equals 1, IRET reverses the operation of a CALL or INT that\ncaused a task switch. The updated state of the task executing IRET is\nsaved in its task state segment. If the task is reentered later, the code\nthat follows IRET is executed.\n\nFlags Affected\n\nAll; the flags register is popped from stack\n\nProtected Mode Exceptions\n\n#GP, #NP, or #SS, as indicated under \"Operation\" above\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand being popped lies beyond address\n0FFFFH\n\nVirtual 8086 Mode Exceptions\n\n#GP(0) fault if IOPL is less than 3, to permit emulation\n\n\nJcc  Jump if Condition is Met\n\n\nOpcode         Instruction       Clocks   Description\n\n77  cb         JA rel8           7+m,3    Jump short if above (CF=0 and\n                                          ZF=0)\n73  cb         JAE rel8          7+m,3    Jump short if above or equal\n                                          (CF=0)\n72  cb         JB rel8           7+m,3    Jump short if below (CF=1)\n76  cb         JBE rel8          7+m,3    Jump short if below or equal\n                                          (CF=1 or ZF=1)\n72  cb         JC rel8           7+m,3    Jump short if carry (CF=1)\nE3  cb         JCXZ rel8         9+m,5    Jump short if CX register is 0\nE3  cb         JECXZ rel8        9+m,5    Jump short if ECX register is 0\n74  cb         JE rel8           7+m,3    Jump short if equal (ZF=1)\n74  cb         JZ rel8           7+m,3    Jump short if 0 (ZF=1)\n7F  cb         JG rel8           7+m,3    Jump short if greater (ZF=0 and\n                                          SF=OF)\n7D  cb         JGE rel8          7+m,3    Jump short if greater or equal\n                                          (SF=OF)\n7C  cb         JL rel8           7+m,3    Jump short if less (SF<>OF)\n7E  cb         JLE rel8          7+m,3    Jump short if less or equal\n                                          (ZF=1 and SF<>OF)\n76  cb         JNA rel8          7+m,3    Jump short if not above (CF=1 or\n                                          ZF=1)\n72  cb         JNAE rel8         7+m,3    Jump short if not above or equal\n                                          (CF=1)\n73  cb         JNB rel8          7+m,3    Jump short if not below (CF=0)\n77  cb         JNBE rel8         7+m,3    Jump short if not below or equal\n                                          (CF=0 and ZF=0)\n73  cb         JNC rel8          7+m,3    Jump short if not carry (CF=0)\n75  cb         JNE rel8          7+m,3    Jump short if not equal (ZF=0)\n7E  cb         JNG rel8          7+m,3    Jump short if not greater (ZF=1\n                                          or SF<>OF)\n7C  cb         JNGE rel8         7+m,3    Jump short if not greater or\n                                          equal (SF<>OF)\n7D  cb         JNL rel8          7+m,3    Jump short if not less (SF=OF)\n7F  cb         JNLE rel8         7+m,3    Jump short if not less or equal\n                                          (ZF=0 and SF=OF)\n71  cb         JNO rel8          7+m,3    Jump short if not overflow\n                                          (OF=0)\n7B  cb         JNP rel8          7+m,3    Jump short if not parity (PF=0)\n79  cb         JNS rel8          7+m,3    Jump short if not sign (SF=0)\n75  cb         JNZ rel8          7+m,3    Jump short if not zero (ZF=0)\n70  cb         JO rel8           7+m,3    Jump short if overflow (OF=1)\n7A  cb         JP rel8           7+m,3    Jump short if parity (PF=1)\n7A  cb         JPE rel8          7+m,3    Jump short if parity even (PF=1)\n7B  cb         JPO rel8          7+m,3    Jump short if parity odd (PF=0)\n78  cb         JS rel8           7+m,3    Jump short if sign (SF=1)\n74  cb         JZ rel8           7+m,3    Jump short if zero (ZF = 1)\n0F  87 cw/cd   JA rel16/32       7+m,3    Jump near if above (CF=0 and\n                                          ZF=0)\n0F  83 cw/cd   JAE rel16/32      7+m,3    Jump near if above or equal\n                                          (CF=0)\n0F  82 cw/cd   JB rel16/32       7+m,3    Jump near if below (CF=1)\n0F  86 cw/cd   JBE rel16/32      7+m,3    Jump near if below or equal\n                                          (CF=1 or ZF=1)\n0F  82 cw/cd   JC rel16/32       7+m,3    Jump near if carry (CF=1)\n0F  84 cw/cd   JE rel16/32       7+m,3    Jump near if equal (ZF=1)\n0F  84 cw/cd   JZ rel16/32       7+m,3    Jump near if 0 (ZF=1)\n0F  8F cw/cd   JG rel16/32       7+m,3    Jump near if greater (ZF=0 and\n                                          SF=OF)\n0F  8D cw/cd   JGE rel16/32      7+m,3    Jump near if greater or equal\n                                          (SF=OF)\n0F  8C cw/cd   JL rel16/32       7+m,3    Jump near if less (SF<>OF)\n0F  8E cw/cd   JLE rel16/32      7+m,3    Jump near if less or equal (ZF=1\n                                          and SF<>OF)\n0F  86 cw/cd   JNA rel16/32      7+m,3    Jump near if not above (CF=1 or\n                                          ZF=1)\n0F  82 cw/cd   JNAE rel16/32     7+m,3    Jump near if not above or equal\n                                          (CF=1)\n0F  83 cw/cd   JNB rel16/32      7+m,3    Jump near if not below (CF=0)\n0F  87 cw/cd   JNBE rel16/32     7+m,3    Jump near if not below or equal\n                                          (CF=0 and ZF=0)\n0F  83 cw/cd   JNC rel16/32      7+m,3    Jump near if not carry (CF=0)\n0F  85 cw/cd   JNE rel16/32      7+m,3    Jump near if not equal (ZF=0)\n0F  8E cw/cd   JNG rel16/32      7+m,3    Jump near if not greater (ZF=1\n                                          or SF<>OF)\n0F  8C cw/cd   JNGE rel16/32     7+m,3    Jump near if not greater or\n                                          equal (SF<>OF)\n0F  8D cw/cd   JNL rel16/32      7+m,3    Jump near if not less (SF=OF)\n0F  8F cw/cd   JNLE rel16/32     7+m,3    Jump near if not less or equal\n                                          (ZF=0 and SF=OF)\n0F  81 cw/cd   JNO rel16/32      7+m,3    Jump near if not overflow (OF=0)\n0F  8B cw/cd   JNP rel16/32      7+m,3    Jump near if not parity (PF=0)\n0F  89 cw/cd   JNS rel16/32      7+m,3    Jump near if not sign (SF=0)\n0F  85 cw/cd   JNZ rel16/32      7+m,3    Jump near if not zero (ZF=0)\n0F  80 cw/cd   JO rel16/32       7+m,3    Jump near if overflow (OF=1)\n0F  8A cw/cd   JP rel16/32       7+m,3    Jump near if parity (PF=1)\n0F  8A cw/cd   JPE rel16/32      7+m,3    Jump near if parity even (PF=1)\n0F  8B cw/cd   JPO rel16/32      7+m,3    Jump near if parity odd (PF=0)\n0F  88 cw/cd   JS rel16/32       7+m,3    Jump near if sign (SF=1)\n0F  84 cw/cd   JZ rel16/32       7+m,3    Jump near if 0 (ZF=1)\n\n\n\nNOTES:\n  The first clock count is for the true condition (branch taken); the\n  second clock count is for the false condition (branch not taken). rel16/32\n  indicates that these instructions map to two; one with a 16-bit relative\n  displacement, the other with a 32-bit relative displacement, depending on\n  the operand-size attribute of the instruction.\n\n\nOperation\n\nIF condition\nTHEN\n   EIP \u001b EIP + SignExtend(rel8/16/32);\n   IF OperandSize = 16\n   THEN EIP \u001b EIP AND 0000FFFFH;\n   FI;\nFI;\n\nDescription\n\nConditional jumps (except JCXZ) test the flags which have been set by\na previous instruction. The conditions for each mnemonic are given in\nparentheses after each description above. The terms \"less\" and \"greater\"\nare used for comparisons of signed integers; \"above\" and \"below\" are\nused for unsigned integers.\n\nIf the given condition is true, a jump is made to the location provided as\nthe operand. Instruction coding is most efficient when the target for the\nconditional jump is in the current code segment and within -128 to\n+127 bytes of the next instruction's first byte. The jump can also target\n-32768 thru +32767 (segment size attribute 16) or -2^(31) thru +2^(31) -1\n(segment size attribute 32) relative to the next instruction's first byte.\nWhen the target for the conditional jump is in a different segment, use\nthe opposite case of the jump instruction (i.e., JE and JNE), and then\naccess the target with an unconditional far jump to the other segment.\nFor example, you cannot code\n\nJZ FARLABEL;\n\nYou must instead code\n\n   JNZ BEYOND;\n   JMP FARLABEL;\nBEYOND:\n\nBecause there can be several ways to interpret a particular state of the\nflags, ASM386 provides more than one mnemonic for most of the\nconditional jump opcodes. For example, if you compared two characters in\nAX and want to jump if they are equal, use JE; or, if you ANDed AX\nwith a bit field mask and only want to jump if the result is 0, use JZ, a\nsynonym for JE.\n\nJCXZ differs from other conditional jumps because it tests the contents of\nthe CX or ECX register for 0, not the flags. JCXZ is useful at the beginning\nof a conditional loop that terminates with a conditional loop instruction\n(such as LOOPNE TARGET LABEL. The JCXZ prevents entering the loop with CX or\nECX equal to zero, which would cause the loop to execute 64K or 32G times\ninstead of zero times.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the offset jumped to is beyond the limits of the code segment\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nJMP  Jump\n\n\nOpcode    Instruction     Clocks          Description\n\nEB  cb    JMP rel8        7+m             Jump short\nE9  cw    JMP rel16       7+m             Jump near, displacement relative\n                                          to next instruction\nFF  /4    JMP r/m16       7+m/10+m        Jump near indirect\nEA  cd    JMP ptr16:16    12+m,pm=27+m    Jump intersegment, 4-byte\n                                          immediate address\nEA  cd    JMP ptr16:16    pm=45+m         Jump to call gate, same\n                                          privilege\nEA  cd    JMP ptr16:16    ts              Jump via task state segment\nEA  cd    JMP ptr16:16    ts              Jump via task gate\nFF  /5    JMP m16:16      43+m,pm=31+m    Jump r/m16:16 indirect and\n                                          intersegment\nFF  /5    JMP m16:16      pm=49+m         Jump to call gate, same\n                                          privilege\nFF  /5    JMP m16:16      5 + ts          Jump via task state segment\nFF  /5    JMP m16:16      5 + ts          Jump via task gate\nE9  cd    JMP rel32       7+m             Jump near, displacement relative\n                                          to next instruction\nFF  /4    JMP r/m32       7+m,10+m        Jump near, indirect\nEA  cp    JMP ptr16:32    12+m,pm=27+m    Jump intersegment, 6-byte\n                                          immediate address\nEA  cp    JMP ptr16:32    pm=45+m         Jump to call gate, same\n                                          privilege\nEA  cp    JMP ptr16:32    ts              Jump via task state segment\nEA  cp    JMP ptr16:32    ts              Jump via task gate\nFF  /5    JMP m16:32      43+m,pm=31+m    Jump intersegment, address at\n                                          r/m dword\nFF  /5    JMP m16:32      pm=49+m         Jump to call gate, same\n                                          privilege\nFF  /5    JMP m16:32      5 + ts          Jump via task state segment\nFF  /5    JMP m16:32      5 + ts          Jump via task gate\n\n\n\nNOTE:\nValues of ts are given by the following table:\n\n                               New Task\n\n                386 TSS       386 TASK       286 TSS\n                VM = 0        VM = 1\n\nOld Task                   Via Task Gate?\n\n                N     Y       N      Y       N     Y\n386\nTSS VM=0       303   312     220    229     276   285\n\n286\nTSS            301   310     218    227     274   283\n\n\nOperation\n\nIF instruction = relative JMP\n   (* i.e. operand is rel8, rel16, or rel32 *)\nTHEN\n   EIP \u001b EIP + rel8/16/32;\n   IF OperandSize = 16\n   THEN EIP \u001b EIP AND 0000FFFFH;\n   FI;\nFI;\nIF instruction = near indirect JMP\n   (* i.e. operand is r/m16 or r/m32 *)\nTHEN\n   IF OperandSize = 16\n   THEN\n      EIP \u001b [r/m16] AND 0000FFFFH;\n   ELSE (* OperandSize = 32 *)\n      EIP \u001b [r/m32];\n   FI;\nFI;\n\nIF (PE = 0 OR (PE = 1 AND VM = 1)) (* real mode or V86 mode *)\n   AND instruction = far JMP\n   (* i.e., operand type is m16:16, m16:32, ptr16:16, ptr16:32 *)\nTHEN GOTO REAL-OR-V86-MODE;\n   IF operand type = m16:16 or m16:32\n   THEN (* indirect *)\n      IF OperandSize = 16\n      THEN\n         CS:IP \u001b [m16:16];\n         EIP \u001b EIP AND 0000FFFFH; (* clear upper 16 bits *)\n      ELSE (* OperandSize = 32 *)\n         CS:EIP \u001b [m16:32];\n      FI;\n   FI;\n   IF operand type = ptr16:16 or ptr16:32\n   THEN\n      IF OperandSize = 16\n      THEN\n         CS:IP \u001b ptr16:16;\n         EIP \u001b EIP AND 0000FFFFH; (* clear upper 16 bits *)\n      ELSE (* OperandSize = 32 *)\n         CS:EIP \u001b ptr16:32;\n      FI;\n   FI;\nFI;\n\nIF (PE = 1 AND VM = 0) (* Protected mode, not V86 mode *)\n   AND instruction = far JMP\nTHEN\n   IF operand type = m16:16 or m16:32\n   THEN (* indirect *)\n      check access of EA dword;\n      #GP(0) or #SS(0) IF limit violation;\n   FI;\n   Destination selector is not null ELSE #GP(0)\n   Destination selector index is within its descriptor table limits ELSE\n#GP(selector)\n   Depending on AR byte of destination descriptor:\n      GOTO CONFORMING-CODE-SEGMENT;\n      GOTO NONCONFORMING-CODE-SEGMENT;\n      GOTO CALL-GATE;\n      GOTO TASK-GATE;\n      GOTO TASK-STATE-SEGMENT;\n   ELSE #GP(selector); (* illegal AR byte in descriptor *)\nFI;\n\nCONFORMING-CODE-SEGMENT:\n   Descriptor DPL must be  CPL ELSE #GP(selector);\n   Segment must be present ELSE #NP(selector);\n   Instruction pointer must be within code-segment limit ELSE #GP(0);\n   IF OperandSize = 32\n   THEN Load CS:EIP from destination pointer;\n   ELSE Load CS:IP from destination pointer;\n   FI;\n   Load CS register with new segment descriptor;\n\nNONCONFORMING-CODE-SEGMENT:\n   RPL of destination selector must be  CPL ELSE #GP(selector);\n   Descriptor DPL must be = CPL ELSE #GP(selector);\n   Segment must be present ELSE # NP(selector);\n   Instruction pointer must be within code-segment limit ELSE #GP(0);\n   IF OperandSize = 32\n   THEN Load CS:EIP from destination pointer;\n   ELSE Load CS:IP from destination pointer;\n   FI;\n   Load CS register with new segment descriptor;\n   Set RPL field of CS register to CPL;\n\nCALL-GATE:\n   Descriptor DPL must be  CPL ELSE #GP(gate selector);\n   Descriptor DPL must be  gate selector RPL ELSE #GP(gate selector);\n   Gate must be present ELSE #NP(gate selector);\n   Examine selector to code segment given in call gate descriptor:\n      Selector must not be null ELSE #GP(0);\n      Selector must be within its descriptor table limits ELSE\n         #GP(CS selector);\n      Descriptor AR byte must indicate code segment\n         ELSE #GP(CS selector);\n      IF non-conforming\n      THEN code-segment descriptor, DPL must = CPL\n      ELSE #GP(CS selector);\n      FI;\n      IF conforming\n      THEN code-segment descriptor DPL must be  CPL;\n      ELSE #GP(CS selector);\n      Code segment must be present ELSE #NP(CS selector);\n      Instruction pointer must be within code-segment limit ELSE #GP(0);\n      IF OperandSize = 32\n      THEN Load CS:EIP from call gate;\n      ELSE Load CS:IP from call gate;\n      FI;\n   Load CS register with new code-segment descriptor;\n   Set RPL of CS to CPL\n\nTASK-GATE:\n   Gate descriptor DPL must be  CPL ELSE #GP(gate selector);\n   Gate descriptor DPL must be  gate selector RPL ELSE #GP(gate\n     selector);\n   Task Gate must be present ELSE #NP(gate selector);\n   Examine selector to TSS, given in Task Gate descriptor:\n   Must specify global in the local/global bit ELSE #GP(TSS selector);\n   Index must be within GDT limits ELSE #GP(TSS selector);\n   Descriptor AR byte must specify available TSS (bottom bits 00001);\n      ELSE #GP(TSS selector);\n   Task State Segment must be present ELSE #NP(TSS selector);\nSWITCH-TASKS (without nesting) to TSS;\nInstruction pointer must be within code-segment limit ELSE #GP(0);\n\nTASK-STATE-SEGMENT:\n   TSS DPL must be  CPL ELSE #GP(TSS selector);\n   TSS DPL must be  TSS selector RPL ELSE #GP(TSS selector);\n   Descriptor AR byte must specify available TSS (bottom bits 00001)\n      ELSE #GP(TSS selector);\n   Task State Segment must be present ELSE #NP(TSS selector);\n   SWITCH-TASKS (without nesting) to TSS;\n   Instruction pointer must be within code-segment limit ELSE #GP(0);\n\nDescription\n\nThe JMP instruction transfers control to a different point in the\ninstruction stream without recording return information.\n\nThe action of the various forms of the instruction are shown below.\n\nJumps with destinations of type r/m16, r/m32, rel16, and rel32 are near\njumps and do not involve changing the segment register value.\n\nThe JMP rel16 and JMP rel32 forms of the instruction add an offset to\nthe address of the instruction following the JMP to determine the\ndestination. The rel16 form is used when the instruction's operand-size\nattribute is 16 bits (segment size attribute 16 only); rel32 is used when\nthe operand-size attribute is 32 bits (segment size attribute 32 only). The\nresult is stored in the 32-bit EIP register. With rel16, the upper 16 bits\nof EIP are cleared, which results in an offset whose value does not exceed\n16 bits.\n\nJMP r/m16 and JMP r/m32 specifies a register or memory location from which\nthe absolute offset from the procedure is fetched. The offset fetched from\nr/m is 32 bits for an operand-size attribute of 32 bits (r/m32), or 16 bits\nfor an operand-size attribute of 16 bits (r/m16).\n\nThe JMP ptr16:16 and ptr16:32 forms of the instruction use a four-byte\nor six-byte operand as a long pointer to the destination. The JMP\nand  forms fetch the long pointer from the memory location\nspecified (indirection). In Real Address Mode or Virtual 8086 Mode,\nthe long pointer provides 16 bits for the CS register and 16 or 32 bits\nfor the EIP register (depending on the operand-size attribute). In\nProtected Mode, both long pointer forms consult the Access Rights (AR)\nbyte in the descriptor indexed by the selector part of the long pointer.\n\nDepending on the value of the AR byte, the jump will perform one of\nthe following types of control transfers:\n\n    A jump to a code segment at the same privilege level\n    A task switch\n\nFor more information on protected mode control transfers, refer to\nChapter 6 and Chapter 7.\n\nFlags Affected\n\nAll if a task switch takes place; none if no task switch occurs\n\nProtected Mode Exceptions\n\nFar jumps: #GP, #NP, #SS, and #TS, as indicated in the list above.\n\nNear direct jumps: #GP(0) if procedure location is beyond the code\nsegment limits.\n\nNear indirect jumps: #GP(0) for an illegal memory operand effective\naddress in the CS, DS, ES, FS, or GS segments: #SS(0) for an illegal\naddress in the SS segment; #GP if the indirect offset obtained is beyond\nthe code segment limits; #PF(fault-code) for a page fault.\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would be outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as under Real Address Mode; #PF(fault-code) for a\npage fault\n\n\nLAHF  Load Flags into AH Register\n\nOpcode  Instruction   Clocks   Description\n\n9F      LAHF          2        Load: AH = flags SF ZF xx AF xx PF xx CF\n\n\nOperation\n\nAH \u001b SF:ZF:xx:AF:xx:PF:xx:CF;\n\nDescription\n\nLAHF transfers the low byte of the flags word to AH. The bits, from\nMSB to LSB, are sign, zero, indeterminate, auxiliary, carry,\nindeterminate, parity, indeterminate, and carry.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nLAR  Load Access Rights Byte\n\nOpcode        Instruction      Clocks      Description\n\n0F  02 /r     LAR r16,r/m16    pm=15/16    r16 \u001b r/m16 masked by FF00\n0F  02 /r     LAR r32,r/m32    pm=15/16    r32 \u001b r/m32 masked by 00FxFF00\n\n\nDescription\n\nThe LAR instruction stores a marked form of the second doubleword of\nthe descriptor for the source selector if the selector is visible at the\nCPL (modified by the selector's RPL) and is a valid descriptor type. The\ndestination register is loaded with the high-order doubleword of the\ndescriptor masked by 00FxFF00, and ZF is set to 1. The x indicates that the\nfour bits corresponding to the upper four bits of the limit are undefined in\nthe value loaded by LAR. If the selector is invisible or of the wrong type,\nZF is cleared.\n\nIf the 32-bit operand size is specified, the entire 32-bit value is loaded\ninto the 32-bit destination register. If the 16-bit operand size is\nspecified, the lower 16-bits of this value are stored in the 16-bit\ndestination register.\n\nAll code and data segment descriptors are valid for LAR.\n\nThe valid special segment and gate descriptor types for LAR are given\nin the following table:\n\nType   Name                     Valid/Invalid\n\n  0    Invalid                  Invalid\n  1    Available 80286 TSS      Valid\n  2    LDT                      Valid\n  3    Busy 80286 TSS           Valid\n  4    80286 call gate          Valid\n  5    80286/80386 task gate    Valid\n  6    80286 trap gate          Valid\n  7    80286 interrupt gate     Valid\n  8    Invalid                  Invalid\n  9    Available 80386 TSS      Valid\n  A    Invalid                  Invalid\n  B    Busy 80386 TSS           Valid\n  C    80386 call gate          Valid\n  D    Invalid                  Invalid\n  E    80386 trap gate          Valid\n  F    80386 interrupt gate     Valid\n\nFlags Affected\n\nZF as described above\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 6; LAR is unrecognized in Real Address Mode\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode\n\n\nLEA  Load Effective Address\n\nOpcode  Instruction  Clocks  Description\n\n8D  /r  LEA r16,m    2       Store effective address for m in register r16\n8D  /r  LEA r32,m    2       Store effective address for m in register r32\n8D  /r  LEA r16,m    2       Store effective address for m in register r16\n8D  /r  LEA r32,m    2       Store effective address for m in register r32\n\n\nOperation\n\nIF OperandSize = 16 AND AddressSize = 16\nTHEN r16 \u001b Addr(m);\nELSE\n   IF OperandSize = 16 AND AddressSize = 32\n   THEN\n      r16 \u001b Truncate_to_16bits(Addr(m));   (* 32-bit address *)\n   ELSE\n      IF OperandSize = 32 AND AddressSize = 16\n      THEN\n         r32 \u001b Truncate_to_16bits(Addr(m));\n      ELSE\n         IF OperandSize = 32 AND AddressSize = 32\n         THEN  r32 \u001b Addr(m);\n         FI;\n      FI;\n   FI;\nFI;\n\nDescription\n\nLEA calculates the effective address (offset part) and stores it in the\nspecified register. The operand-size attribute of the instruction\n(represented by OperandSize in the algorithm under \"Operation\" above) is\ndetermined by the chosen register. The address-size attribute (represented\nby AddressSize) is determined by the USE attribute of the segment containing\nthe second operand. The address-size and operand-size attributes affect the\naction performed by LEA, as follows:\n\nOperand Size  Address Size  Action Performed\n\n    16            16        16-bit effective address is calculated and\n                            stored in requested 16-bit register\n                            destination.\n\n    16            32        32-bit effective address is calculated. The\n                            lower 16 bits of the address are stored in\n                            the requested 16-bit register destination.\n\n    32            16        16-bit effective address is calculated. The\n                            16-bit address is zero-extended and stored\n                            in the requested 32-bit register destination.\n\n    32            32        32-bit effective address is calculated and\n                            stored in the requested 32-bit register\n                            destination.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#UD if the second operand is a register\n\nReal Address Mode Exceptions\n\nInterrupt 6 if the second operand is a register\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode\n\n\nLEAVE  High Level Procedure Exit\n\nOpcode  Instruction  Clocks  Description\n\nC9      LEAVE        4       Set SP to BP, then pop BP\nC9      LEAVE        4       Set ESP to EBP, then pop EBP\n\n\nOperation\n\nIF StackAddrSize = 16\nTHEN\n   SP \u001b BP;\nELSE (* StackAddrSize = 32 *)\n   ESP \u001b EBP;\nFI;\nIF OperandSize = 16\nTHEN\n   BP \u001b Pop();\nELSE (* OperandSize = 32 *)\n   EBP \u001b Pop();\nFI;\n\nDescription\n\nLEAVE reverses the actions of the ENTER instruction. By copying the\nframe pointer to the stack pointer, LEAVE releases the stack space used\nby a procedure for its local variables. The old frame pointer is popped\ninto BP or EBP, restoring the caller's frame. A subsequent RET\ninstruction removes any arguments pushed onto the stack of the exiting\nprocedure.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#SS(0) if BP does not point to a location within the limits of the current\nstack segment\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode\n\n\nLGDT/LIDT  Load Global/Interrupt Descriptor Table Register\n\nOpcode       Instruction      Clocks        Description\n\n0F  01 /2    LGDT m16&32      11            Load m into GDTR\n0F  01 /3    LIDT m16&32      11            Load m into IDTR\n\n\nOperation\n\nIF instruction = LIDT\nTHEN\n   IF OperandSize = 16\n   THEN IDTR.Limit:Base \u001b m16:24 (* 24 bits of base loaded *)\n   ELSE IDTR.Limit:Base \u001b m16:32\n   FI;\nELSE (* instruction = LGDT *)\n   IF OperandSize = 16\n   THEN GDTR.Limit:Base \u001b m16:24 (* 24 bits of base loaded *)\n   ELSE GDTR.Limit:Base \u001b m16:32;\n   FI;\nFI;\n\nDescription\n\nThe LGDT and LIDT instructions load a linear base address and limit\nvalue from a six-byte data operand in memory into the GDTR or IDTR,\nrespectively. If a 16-bit operand is used with LGDT or LIDT, the\nregister is loaded with a 16-bit limit and a 24-bit base, and the\nhigh-order eight bits of the six-byte data operand are not used. If a 32-bit\noperand is used, a 16-bit limit and a 32-bit base is loaded; the high-order\neight bits of the six-byte operand are used as high-order base address bits.\n\nThe SGDT and SIDT instructions always store into all 48 bits of the\nsix-byte data operand. With the 80286, the upper eight bits are undefined\nafter SGDT or SIDT is executed. With the 80386, the upper eight bits\nare written with the high-order eight address bits, for both a 16-bit\noperand and a 32-bit operand. If LGDT or LIDT is used with a 16-bit\noperand to load the register stored by SGDT or SIDT, the upper eight\nbits are stored as zeros.\n\nLGDT and LIDT appear in operating system software; they are not used\nin application programs. They are the only instructions that directly load\na linear address (i.e., not a segment relative address) in 80386 Protected\nMode.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the current privilege level is not 0; #UD if the source operand\nis a register; #GP(0) for an illegal memory operand effective address in\nthe CS, DS, ES, FS, or GS segments; #SS(0) for an illegal address in\nthe SS segment; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH; Interrupt 6 if the source operand is a\nregister\n\n\nNote:\n  These instructions are valid in Real Address Mode to allow\n  power-up initialization for Protected Mode\n\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nLGS/LSS/LDS/LES/LFS  Load Full Pointer\n\nOpcode      Instruction      Clocks   Description\n\nC5  /r      LDS r16,m16:16   7,p=22   Load DS:r16 with pointer from memory\nC5  /r      LDS r32,m16:32   7,p=22   Load DS:r32 with pointer from memory\n0F  B2 /r   LSS r16,m16:16   7,p=22   Load SS:r16 with pointer from memory\n0F  B2 /r   LSS r32,m16:32   7,p=22   Load SS:r32 with pointer from memory\nC4  /r      LES r16,m16:16   7,p=22   Load ES:r16 with pointer from memory\nC4  /r      LES r32,m16:32   7,p=22   Load ES:r32 with pointer from memory\n0F  B4 /r   LFS r16,m16:16   7,p=25   Load FS:r16 with pointer from memory\n0F  B4 /r   LFS r32,m16:32   7,p=25   Load FS:r32 with pointer from memory\n0F  B5 /r   LGS r16,m16:16   7,p=25   Load GS:r16 with pointer from memory\n0F  B5 /r   LGS r32,m16:32   7,p=25   Load GS:r32 with pointer from memory\n\n\nOperation\n\nCASE instruction OF\n   LSS: Sreg is SS; (* Load SS register *)\n   LDS: Sreg is DS; (* Load DS register *)\n   LES: Sreg is ES; (* Load ES register *)\n   LFS: Sreg is FS; (* Load FS register *)\n   LGS: Sreg is DS; (* Load GS register *)\nESAC;\nIF (OperandSize = 16)\nTHEN\n   r16 \u001b [Effective Address]; (* 16-bit transfer *)\n   Sreg \u001b [Effective Address + 2]; (* 16-bit transfer *)\n   (* In Protected Mode, load the descriptor into the segment register *)\nELSE (* OperandSize = 32 *)\n   r32 \u001b [Effective Address]; (* 32-bit transfer *)\n   Sreg \u001b [Effective Address + 4]; (* 16-bit transfer *)\n   (* In Protected Mode, load the descriptor into the segment register *)\nFI;\n\nDescription\n\nThese instructions read a full pointer from memory and store it in the\nselected segment register:register pair. The full pointer loads 16 bits\ninto the segment register SS, DS, ES, FS, or GS. The other register loads 32\nbits if the operand-size attribute is 32 bits, or loads 16 bits if the\noperand-size attribute is 16 bits. The other 16- or 32-bit register to be\nloaded is determined by the r16 or r32 register operand specified.\n\nWhen an assignment is made to one of the segment registers, the\ndescriptor is also loaded into the segment register. The data for the\nregister is obtained from the descriptor table entry for the selector\ngiven.\n\nA null selector (values 0000-0003) can be loaded into DS, ES, FS, or\nGS registers without causing a protection exception. (Any subsequent\nreference to a segment whose corresponding segment register is loaded\nwith a null selector to address memory causes a #GP(0) exception. No\nmemory reference to the segment occurs.)\n\nThe following is a listing of the Protected Mode checks and actions taken in\nthe loading of a segment register:\n\nIF SS is loaded:\n   IF selector is null THEN #GP(0); FI;\n   Selector index must be within its descriptor table limits ELSE\n      #GP(selector);\n   Selector's RPL must equal CPL ELSE #GP(selector);\n   AR byte must indicate a writable data segment ELSE #GP(selector);\n   DPL in the AR byte must equal CPL ELSE #GP(selector);\n   Segment must be marked present ELSE #SS(selector);\n   Load SS with selector;\n   Load SS with descriptor;\nIF DS, ES, FS, or GS is loaded with non-null selector:\n   Selector index must be within its descriptor table limits ELSE\n      #GP(selector);\n   AR byte must indicate data or readable code segment ELSE\n      #GP(selector);\n   IF data or nonconforming code\n   THEN both the RPL and the CPL must be less than or equal to DPL in\n      AR byte;\n   ELSE #GP(selector);\n   Segment must be marked present ELSE #NP(selector);\nLoad segment register with selector and RPL bits;\nLoad segment register with descriptor;\nIF DS, ES, FS or GS is loaded with a null selector:\n   Clear descriptor valid bit;\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\nthe second operand must be a memory operand, not a register; #GP(0)\nif a null selector is loaded into SS; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nThe second operand must be a memory operand, not a register; Interrupt\n13 if any part of the operand would lie outside of the effective address\nspace from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nLLDT  Load Local Descriptor Table Register\n\nOpcode      Instruction      Clocks   Description\n\n0F  00 /2   LLDT r/m16       20       Load selector r/m16 into LDTR\n\n\nOperation\n\nLDTR \u001b SRC;\n\nDescription\n\nLLDT loads the Local Descriptor Table register (LDTR). The word\noperand (memory or register) to LLDT should contain a selector to the\nGlobal Descriptor Table (GDT). The GDT entry should be a Local Descriptor\nTable. If so, then the LDTR is loaded from the entry. The descriptor\nregisters DS, ES, SS, FS, GS, and CS are not affected. The LDT field in the\ntask state segment does not change.\n\nThe selector operand can be 0; if so, the LDTR is marked invalid. All\ndescriptor references (except by the LAR, VERR, VERW or LSL\ninstructions) cause a #GP fault.\n\nLLDT is used in operating system software; it is not used in application\nprograms.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the current privilege level is not 0; #GP(selector) if the\nselector operand does not point into the Global Descriptor Table, or if the\nentry in the GDT is not a Local Descriptor Table; #NP(selector) if the\nLDT descriptor is not present; #GP(0) for an illegal memory operand\neffective address in the CS, DS, ES, FS, or GS segments; #SS(0) for an\nillegal address in the SS segment; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 6; LLDT is not recognized in Real Address Mode\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode (because the instruction is\nnot recognized, it will not execute or perform a memory reference)\n\nNote\n\nThe operand-size attribute has no effect on this instruction.\n\n\nLMSW  Load Machine Status Word\n\nOpcode      Instruction      Clocks   Description\n\n0F  01 /6   LMSW r/m16       10/13    Load r/m16 in machine status word\n\n\nOperation\n\nMSW \u001b r/m16; (* 16 bits is stored in the machine status word *)\n\nDescription\n\nLMSW loads the machine status word (part of CR0) from the source\noperand. This instruction can be used to switch to Protected Mode; if so,\nit must be followed by an intrasegment jump to flush the instruction\nqueue. LMSW will not switch back to Real Address Mode.\n\nLMSW is used only in operating system software. It is not used in\napplication programs.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the current privilege level is not 0; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\nNotes\n\nThe operand-size attribute has no effect on this instruction. This\ninstruction is provided for compatibility with the 80286; 80386 programs\nshould use MOV CR0, ... instead.\n\n\nLOCK  Assert LOCK# Signal Prefix\n\nOpcode  Instruction  Clocks  Description\n\nF0      LOCK         0       Assert LOCK# signal for the next instruction\n\n\nDescription\n\nThe LOCK prefix causes the LOCK# signal of the 80386 to be asserted\nduring execution of the instruction that follows it. In a multiprocessor\nenvironment, this signal can be used to ensure that the 80386 has\nexclusive use of any shared memory while LOCK# is asserted. The\nread-modify-write sequence typically used to implement test-and-set on the\n80386 is the BTS instruction.\n\nThe LOCK prefix functions only with the following instructions:\n\nBT, BTS, BTR, BTC                   mem, reg/imm\nXCHG                                reg, mem\nXCHG                                mem, reg\nADD, OR, ADC, SBB, AND, SUB, XOR    mem, reg/imm\nNOT, NEG, INC, DEC                  mem\n\nAn undefined opcode trap will be generated if a LOCK prefix is used\nwith any instruction not listed above.\n\nXCHG always asserts LOCK# regardless of the presence or absence of\nthe LOCK prefix.\n\nThe integrity of the LOCK is not affected by the alignment of the\nmemory field. Memory locking is observed for arbitrarily misaligned\nfields.\n\nLocked access is not assured if another 80386 processor is executing an\ninstruction concurrently that has one of the following characteristics:\n\n    Is not preceded by a LOCK prefix\n\n    Is not one of the instructions in the preceding list\n\n    Specifies a memory operand that does not exactly overlap the\n     destination operand. Locking is not guaranteed for partial overlap,\n     even if one memory operand is wholly contained within another.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#UD if LOCK is used with an instruction not listed in the \"Description\"\nsection above; other exceptions can be generated by the subsequent\n(locked) instruction\n\nReal Address Mode Exceptions\n\nInterrupt 6 if LOCK is used with an instruction not listed in the\n\"Description\" section above; exceptions can still be generated by the\nsubsequent (locked) instruction\n\nVirtual 8086 Mode Exceptions\n\n#UD if LOCK is used with an instruction not listed in the \"Description\"\nsection above; exceptions can still be generated by the subsequent (locked)\ninstruction\n\n\nLODS/LODSB/LODSW/LODSD  Load String Operand\n\nOpcode  Instruction   Clocks   Description\n\nAC      LODS m8       5        Load byte [(E)SI] into AL\nAD      LODS m16      5        Load word [(E)SI] into AX\nAD      LODS m32      5        Load dword [(E)SI] into EAX\nAC      LODSB         5        Load byte DS:[(E)SI] into AL\nAD      LODSW         5        Load word DS:[(E)SI] into AX\nAD      LODSD         5        Load dword DS:[(E)SI] into EAX\n\n\nOperation\n\nIF AddressSize = 16\nTHEN use SI for source-index\nELSE (* AddressSize = 32 *)\n   use ESI for source-index;\nFI;\nIF byte type of instruction\nTHEN\n   AL \u001b [source-index]; (* byte load *)\n   IF DF = 0 THEN IncDec \u001b 1 ELSE IncDec \u001b -1; FI;\nELSE\n   IF OperandSize = 16\n   THEN\n      AX \u001b [source-index]; (* word load *)\n      IF DF = 0 THEN IncDec \u001b 2 ELSE IncDec \u001b -2; FI;\n   ELSE (* OperandSize = 32 *)\n      EAX \u001b [source-index]; (* dword load *)\n      IF DF = 0 THEN IncDec \u001b 4 ELSE IncDec \u001b -4; FI;\n   FI;\nFI;\nsource-index \u001b source-index + IncDec\n\nDescription\n\nLODS loads the AL, AX, or EAX register with the memory byte, word,\nor doubleword at the location pointed to by the source-index register.\nAfter the transfer is made, the source-index register is automatically\nadvanced. If the direction flag is 0 (CLD was executed), the source index\nincrements; if the direction flag is 1 (STD was executed), it decrements.\nThe increment or decrement is 1 if a byte is loaded, 2 if a word is loaded,\nor 4 if a doubleword is loaded.\n\nIf the address-size attribute for this instruction is 16 bits, SI is used\nfor the source-index register; otherwise the address-size attribute is 32\nbits, and the ESI register is used. The address of the source data is\ndetermined solely by the contents of ESI/SI. Load the correct index value\ninto SI before executing the LODS instruction. LODSB, LODSW, LODSD are\nsynonyms for the byte, word, and doubleword LODS instructions.\n\nLODS can be preceded by the REP prefix; however, LODS is used more typically\nwithin a LOOP construct, because further processing of the data moved into\nEAX, AX, or AL is usually necessary.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nLOOP/LOOPcond  Loop Control with CX Counter\n\nOpcode   Instruction  Clocks  Description\n\nE2  cb   LOOP rel8    11+m    DEC count; jump short if count <> 0\nE1  cb   LOOPE rel8   11+m    DEC count; jump short if count <> 0 and ZF=1\nE1  cb   LOOPZ rel8   11+m    DEC count; jump short if count <> 0 and ZF=1\nE0  cb   LOOPNE rel8  11+m    DEC count; jump short if count <> 0 and ZF=0\nE0  cb   LOOPNZ rel8  11+m    DEC count; jump short if count <> 0 and ZF=0\n\n\nOperation\n\nIF AddressSize = 16 THEN CountReg is CX ELSE CountReg is ECX; FI;\nCountReg \u001b CountReg - 1;\nIF instruction <> LOOP\nTHEN\n   IF (instruction = LOOPE) OR (instruction = LOOPZ)\n   THEN BranchCond \u001b (ZF = 1) AND (CountReg <> 0);\n   FI;\n   IF (instruction = LOOPNE) OR (instruction = LOOPNZ)\n   THEN BranchCond \u001b (ZF = 0) AND (CountReg <> 0);\n   FI;\nFI;\n\nIF BranchCond\nTHEN\n   IF OperandSize = 16\n   THEN\n      IP \u001b IP + SignExtend(rel8);\n   ELSE (* OperandSize = 32 *)\n      EIP \u001b EIP + SignExtend(rel8);\n   FI;\nFI;\n\nDescription\n\nLOOP decrements the count register without changing any of the flags.\nConditions are then checked for the form of LOOP being used. If the\nconditions are met, a short jump is made to the label given by the operand\nto LOOP. If the address-size attribute is 16 bits, the CX register is used\nas the count register; otherwise the ECX register is used. The operand\nof LOOP must be in the range from 128 (decimal) bytes before the\ninstruction to 127 bytes ahead of the instruction.\n\nThe LOOP instructions provide iteration control and combine loop index\nmanagement with conditional branching. Use the LOOP instruction by\nloading an unsigned iteration count into the count register, then code the\nLOOP at the end of a series of instructions to be iterated. The\ndestination of LOOP is a label that points to the beginning of the\niteration.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the offset jumped to is beyond the limits of the current code\nsegment\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nLSL  Load Segment Limit\n\nOpcode       Instruction      Clocks      Description\n\n0F  03 /r    LSL r16,r/m16    pm=20/21    Load: r16 \u001b segment limit,\n                                          selector r/m16 (byte granular)\n0F  03 /r    LSL r32,r/m32    pm=20/21    Load: r32 \u001b segment limit,\n                                          selector r/m32 (byte granular)\n0F  03 /r    LSL r16,r/m16    pm=25/26    Load: r16 \u001b segment limit,\n                                          selector r/m16 (page granular)\n0F  03 /r    LSL r32,r/m32    pm=25/26    Load: r32 \u001b segment limit,\n                                          selector r/m32 (page granular)\n\n\nDescription\n\nThe LSL instruction loads a register with an unscrambled segment limit,\nand sets ZF to 1, provided that the source selector is visible at the CPL\nweakened by RPL, and that the descriptor is a type accepted by LSL.\nOtherwise, ZF is cleared to 0, and the destination register is unchanged.\nThe segment limit is loaded as a byte granular value. If the descriptor\nhas a page granular segment limit, LSL will translate it to a byte limit\nbefore loading it in the destination register (shift left 12 the 20-bit\n\"raw\" limit from descriptor, then OR with 00000FFFH).\n\nThe 32-bit forms of this instruction store the 32-bit byte granular limit\nin the 16-bit destination register.\n\nCode and data segment descriptors are valid for LSL.\n\nThe valid special segment and gate descriptor types for LSL are given\nin the following table:\n\nType   Name                      Valid/Invalid\n\n  0    Invalid                   Invalid\n  1    Available 80286 TSS       Valid\n  2    LDT                       Valid\n  3    Busy 80286 TSS            Valid\n  4    80286 call gate           Invalid\n  5    80286/80386 task gate     Invalid\n  6    80286 trap gate           Invalid\n  7    80286 interrupt gate      Invalid\n  8    Invalid                   Valid\n  9    Available 80386 TSS       Valid\n  A    Invalid                   Invalid\n  B    Busy 80386 TSS            Valid\n  C    80386 call gate           Invalid\n  D    Invalid                   Invalid\n  E    80386 trap gate           Invalid\n  F    80386 interrupt gate      Invalid\n\nFlags Affected\n\nZF as described above\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 6; LSL is not recognized in Real Address Mode\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode\n\n\nLTR  Load Task Register\n\nOpcode       Instruction    Clocks    Description\n\n0F  00 /3    LTR r/m16      pm=23/27  Load EA word into task register\n\n\nDescription\n\nLTR loads the task register from the source register or memory location\nspecified by the operand. The loaded task state segment is marked busy.\nA task switch does not occur.\n\nLTR is used only in operating system software; it is not used in\napplication programs.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#GP(0) if the current privilege level is not 0; #GP(selector) if the object\nnamed by the source selector is not a TSS or is already busy;\n#NP(selector) if the TSS is marked \"not present\"; #PF(fault-code) for\na page fault\n\nReal Address Mode Exceptions\n\nInterrupt 6; LTR is not recognized in Real Address Mode\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode\n\nNotes\n\nThe operand-size attribute has no effect on this instruction.\n\n\nMOV  Move Data\n\n\nOpcode   Instruction       Clocks        Description\n\n88  /r   MOV r/m8,r8       2/2           Move byte register to r/m byte\n89  /r   MOV r/m16,r16     2/2           Move word register to r/m word\n89  /r   MOV r/m32,r32     2/2           Move dword register to r/m dword\n8A  /r   MOV r8,r/m8       2/4           Move r/m byte to byte register\n8B  /r   MOV r16,r/m16     2/4           Move r/m word to word register\n8B  /r   MOV r32,r/m32     2/4           Move r/m dword to dword register\n8C  /r   MOV r/m16,Sreg    2/2           Move segment register to r/m word\n8D  /r   MOV Sreg,r/m16    2/5,pm=18/19  Move r/m word to segment register\nA0       MOV AL,moffs8     4             Move byte at (seg:offset) to AL\nA1       MOV AX,moffs16    4             Move word at (seg:offset) to AX\nA1       MOV EAX,moffs32   4             Move dword at (seg:offset) to EAX\nA2       MOV moffs8,AL     2             Move AL to (seg:offset)\nA3       MOV moffs16,AX    2             Move AX to (seg:offset)\nA3       MOV moffs32,EAX   2             Move EAX to (seg:offset)\nB0 + rb  MOV reg8,imm8     2             Move immediate byte to register\nB8 + rw  MOV reg16,imm16   2             Move immediate word to register\nB8 + rd  MOV reg32,imm32   2             Move immediate dword to register\nC6       MOV r/m8,imm8     2/2           Move immediate byte to r/m byte\nC7       MOV r/m16,imm16   2/2           Move immediate word to r/m word\nC7       MOV r/m32,imm32   2/2           Move immediate dword to r/m dword\n\n\n\nNOTES:\n  moffs8, moffs16, and moffs32 all consist of a simple offset relative\n  to the segment base. The 8, 16, and 32 refer to the size of the data. The\n  address-size attribute of the instruction determines the size of the\n  offset, either 16 or 32 bits.\n\n\nOperation\n\nDEST \u001b SRC;\n\nDescription\n\nMOV copies the second operand to the first operand.\n\nIf the destination operand is a segment register (DS, ES, SS, etc.), then\ndata from a descriptor is also loaded into the register. The data for the\nregister is obtained from the descriptor table entry for the selector\ngiven. A null selector (values 0000-0003) can be loaded into DS and ES\nregisters without causing an exception; however, use of DS or ES causes a\n#GP(0), and no memory reference occurs.\n\nA MOV into SS inhibits all interrupts until after the execution of the\nnext instruction (which is presumably a MOV into eSP).\n\nLoading a segment register under 80386 Protected Mode results in special\nchecks and actions, as described in the following listing:\n\nIF SS is loaded;\nTHEN\n   IF selector is null THEN #GP(0);\nFI;\n   Selector index must be within its descriptor table limits else\n      #GP(selector);\n   Selector's RPL must equal CPL else #GP(selector);\nAR byte must indicate a writable data segment else #GP(selector);\n   DPL in the AR byte must equal CPL else #GP(selector);\n   Segment must be marked present else #SS(selector);\n   Load SS with selector;\n   Load SS with descriptor.\nFI;\nIF DS, ES, FS or GS is loaded with non-null selector;\nTHEN\n   Selector index must be within its descriptor table limits\n      else #GP(selector);\n   AR byte must indicate data or readable code segment else\n      #GP(selector);\n   IF data or nonconforming code segment\n   THEN both the RPL and the CPL must be less than or equal to DPL in\n      AR byte;\n   ELSE #GP(selector);\n   FI;\n   Segment must be marked present else #NP(selector);\n   Load segment register with selector;\n   Load segment register with descriptor;\nFI;\nIF DS, ES, FS or GS is loaded with a null selector;\nTHEN\n   Load segment register with selector;\n   Clear descriptor valid bit;\nFI;\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP, #SS, and #NP if a segment register is being loaded; otherwise,\n#GP(0) if the destination is in a nonwritable segment; #GP(0) for an\nillegal memory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nMOV  Move to/from Special Registers\n\nOpcode      Instruction           Clocks   Description\n\n0F  20 /r   MOV r32,CR0/CR2/CR3   6        Move (control register) to\n                                           (register)\n0F  22 /r   MOV CR0/CR2/CR3,r32   10/4/5   Move (register) to (control\n                                           register)\n0F  21 /r   MOV r32,DR0 -- 3      22       Move (debug register) to\n                                           (register)\n0F  21 /r   MOV r32,DR6/DR7       14       Move (debug register) to\n                                           (register)\n0F  23 /r   MOV DR0 -- 3,r32      22       Move (register) to (debug\n                                           register)\n0F  23 /r   MOV DR6/DR7,r32       16       Move (register) to (debug\n                                           register)\n0F  24 /r   MOV r32,TR6/TR7       12       Move (test register) to\n                                           (register)\n0F  26 /r   MOV TR6/TR7,r32       12       Move (register) to (test\n                                           register)\n\n\nOperation\n\nDEST \u001b SRC;\n\nDescription\n\nThe above forms of MOV store or load the following special registers in\nor from a general purpose register:\n\n    Control registers CR0, CR2, and CR3\n    Debug Registers DR0, DR1, DR2, DR3, DR6, and DR7\n    Test Registers TR6 and TR7\n\n32-bit operands are always used with these instructions, regardless of the\noperand-size attribute.\n\nFlags Affected\n\nOF, SF, ZF, AF, PF, and CF are undefined\n\nProtected Mode Exceptions\n\n#GP(0) if the current privilege level is not 0\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\n#GP(0) if instruction execution is attempted\n\nNotes\n\nThe instructions must be executed at privilege level 0 or in real-address\nmode; otherwise, a protection exception will be raised.\n\nThe reg field within the ModRM byte specifies which of the special\nregisters in each category is involved. The two bits in the  field are\nalways 11. The r/m field specifies the general register involved.\n\n\nMOVS/MOVSB/MOVSW/MOVSD  Move Data from String to String\n\nOpcode  Instruction      Clocks   Description\n\nA4      MOVS m8,m8       7        Move byte [(E)SI] to ES:[(E)DI]\nA5      MOVS m16,m16     7        Move word [(E)SI] to ES:[(E)DI]\nA5      MOVS m32,m32     7        Move dword [(E)SI] to ES:[(E)DI]\nA4      MOVSB            7        Move byte DS:[(E)SI] to ES:[(E)DI]\nA5      MOVSW            7        Move word DS:[(E)SI] to ES:[(E)DI]\nA5      MOVSD            7        Move dword DS:[(E)SI] to ES:[(E)DI]\n\n\nOperation\n\nIF (instruction = MOVSD) OR (instruction has doubleword operands)\nTHEN OperandSize \u001b 32;\nELSE OperandSize \u001b 16;\nIF AddressSize = 16\nTHEN use SI for source-index and DI for destination-index;\nELSE (* AddressSize = 32 *)\n   use ESI for source-index and EDI for destination-index;\nFI;\nIF byte type of instruction\nTHEN\n   [destination-index] \u001b [source-index]; (* byte assignment *)\n   IF DF = 0 THEN IncDec \u001b 1 ELSE IncDec \u001b -1; FI;\nELSE\n   IF OperandSize = 16\n   THEN\n      [destination-index] \u001b [source-index]; (* word assignment *)\n      IF DF = 0 THEN IncDec \u001b 2 ELSE IncDec \u001b -2; FI;\n   ELSE (* OperandSize = 32 *)\n      [destination-index] \u001b [source-index]; (* doubleword assignment *)\n      IF DF = 0 THEN IncDec \u001b 4 ELSE IncDec \u001b -4; FI;\n   FI;\nFI;\nsource-index \u001b source-index + IncDec;\ndestination-index \u001b destination-index + IncDec;\n\nDescription\n\nMOVS copies the byte or word at [(E)SI] to the byte or word at\nES:[(E)DI]. The destination operand must be addressable from the ES\nregister; no segment override is possible for the destination. A segment\noverride can be used for the source operand; the default is DS.\n\nThe addresses of the source and destination are determined solely by the\ncontents of (E)SI and (E)DI. Load the correct index values into (E)SI\nand (E)DI before executing the MOVS instruction. MOVSB, MOVSW,\nand MOVSD are synonyms for the byte, word, and doubleword MOVS\ninstructions.\n\nAfter the data is moved, both (E)SI and (E)DI are advanced\nautomatically. If the direction flag is 0 (CLD was executed), the registers\nare incremented; if the direction flag is 1 (STD was executed), the\nregisters are decremented. The registers are incremented or decremented by 1\nif a byte was moved, 2 if a word was moved, or 4 if a doubleword was moved.\n\nMOVS can be preceded by the REP prefix for block movement of CX\nbytes or words. Refer to the REP instruction for details of this operation.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nMOVSX  Move with Sign-Extend\n\nOpcode     Instruction        Clocks   Description\n\n0F  BE /r  MOVSX r16,r/m8     3/6      Move byte to word with sign-extend\n0F  BE /r  MOVSX r32,r/m8     3/6      Move byte to dword, sign-extend\n0F  BF /r  MOVSX r32,r/m16    3/6      Move word to dword, sign-extend\n\n\nOperation\n\nDEST \u001b SignExtend(SRC);\n\nDescription\n\nMOVSX reads the contents of the effective address or register as a byte\nor a word, sign-extends the value to the operand-size attribute of the\ninstruction (16 or 32 bits), and stores the result in the destination\nregister.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nMOVZX  Move with Zero-Extend\n\nOpcode      Instruction        Clocks   Description\n\n0F  B6 /r   MOVZX r16,r/m8     3/6      Move byte to word with zero-extend\n0F  B6 /r   MOVZX r32,r/m8     3/6      Move byte to dword, zero-extend\n0F  B7 /r   MOVZX r32,r/m16    3/6      Move word to dword, zero-extend\n\n\nOperation\n\nDEST \u001b ZeroExtend(SRC);\n\nDescription\n\nMOVZX reads the contents of the effective address or register as a byte\nor a word, zero extends the value to the operand-size attribute of the\ninstruction (16 or 32 bits), and stores the result in the destination\nregister.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nMUL  Unsigned Multiplication of AL or AX\n\nOpcode  Instruction     Clocks       Description\n\nF6  /4  MUL AL,r/m8     9-14/12-17   Unsigned multiply (AX \u001b AL * r/m byte)\nF7  /4  MUL AX,r/m16    9-22/12-25   Unsigned multiply (DX:AX \u001b AX * r/m\n                                     word)\nF7  /4  MUL EAX,r/m32   9-38/12-41   Unsigned multiply (EDX:EAX \u001b EAX * r/m\n                                     dword)\n\n\n\nNOTES:\n  The 80386 uses an early-out multiply algorithm. The actual number of\n  clocks depends on the position of the most significant bit in the \n  optimizing multiplier, shown underlined above. The optimization occurs\n  for positive and negative multiplier values. Because of the early-out\n  algorithm, clock counts given are minimum to maximum. To calculate the\n  actual clocks, use the following formula:\n\n    Actual clock = if  <> 0 then max(ceiling(log{2} m), 3) + 6 clocks;\n\n    Actual clock = if  = 0 then 9 clocks\n\n  where m is the multiplier.\n\n\nOperation\n\nIF byte-size operation\nTHEN AX \u001b AL * r/m8\nELSE (* word or doubleword operation *)\n   IF OperandSize = 16\n   THEN DX:AX \u001b AX * r/m16\n   ELSE (* OperandSize = 32 *)\n      EDX:EAX \u001b EAX * r/m32\n   FI;\nFI;\n\nDescription\n\nMUL performs unsigned multiplication. Its actions depend on the size\nof its operand, as follows:\n\n    A byte operand is multiplied by AL; the result is left in AX. The\n     carry and overflow flags are set to 0 if AH is 0; otherwise, they are\n     set to 1.\n\n    A word operand is multiplied by AX; the result is left in DX:AX.\n     DX contains the high-order 16 bits of the product. The carry and\n     overflow flags are set to 0 if DX is 0; otherwise, they are set to 1.\n\n    A doubleword operand is multiplied by EAX and the result is left in\n     EDX:EAX. EDX contains the high-order 32 bits of the product. The\n     carry and overflow flags are set to 0 if EDX is 0; otherwise, they are\n     set to 1.\n\nFlags Affected\n\nOF and CF as described above; SF, ZF, AF, PF, and CF are undefined\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nNEG  Two's Complement Negation\n\nOpcode  Instruction   Clocks    Description\n\nF6  /3  NEG r/m8      2/6       Two's complement negate r/m byte\nF7  /3  NEG r/m16     2/6       Two's complement negate r/m word\nF7  /3  NEG r/m32     2/6       Two's complement negate r/m dword\n\n\nOperation\n\nIF r/m = 0 THEN CF \u001b 0 ELSE CF \u001b 1; FI;\nr/m \u001b - r/m;\n\nDescription\n\nNEG replaces the value of a register or memory operand with its two's\ncomplement. The operand is subtracted from zero, and the result is placed\nin the operand.\n\nThe carry flag is set to 1, unless the operand is zero, in which case the\ncarry flag is cleared to 0.\n\nFlags Affected\n\nCF as described above; OF, SF, ZF, and PF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in real-address mode; #PF(fault-code) for a page\nfault\n\n\nNOP  No Operation\n\nOpcode  Instruction   Clocks    Description\n\n90      NOP           3         No operation\n\n\nDescription\n\nNOP performs no operation. NOP is a one-byte instruction that takes\nup space but affects none of the machine context except (E)IP.\n\nNOP is an alias mnemonic for the XCHG (E)AX, (E)AX instruction.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nNOT  One's Complement Negation\n\nOpcode    Instruction   Clocks    Description\n\nF6   /2   NOT r/m8       2/6      Reverse each bit of r/m byte\nF7   /2   NOT r/m16      2/6      Reverse each bit of r/m word\nF7   /2   NOT r/m32      2/6      Reverse each bit of r/m dword\n\n\nOperation\n\nr/m \u001b NOT r/m;\n\nDescription\n\nNOT inverts the operand; every 1 becomes a 0, and vice versa.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in real-address mode; #PF(fault-code) for a page\nfault\n\n\nOR  Logical Inclusive OR\n\nOpcode       Instruction       Clocks    Description\n\n0C  ib       OR AL,imm8        2         OR immediate byte to AL\n0D  iw       OR AX,imm16       2         OR immediate word to AX\n0D  id       OR EAX,imm32      2         OR immediate dword to EAX\n80  /1 ib    OR r/m8,imm8      2/7       OR immediate byte to r/m byte\n81  /1 iw    OR r/m16,imm16    2/7       OR immediate word to r/m word\n81  /1 id    OR r/m32,imm32    2/7       OR immediate dword to r/m dword\n83  /1 ib    OR r/m16,imm8     2/7       OR sign-extended immediate byte\n                                         with r/m word\n83  /1 ib    OR r/m32,imm8     2/7       OR sign-extended immediate byte\n                                         with r/m dword\n08  /r       OR r/m8,r8        2/6       OR byte register to r/m byte\n09  /r       OR r/m16,r16      2/6       OR word register to r/m word\n09  /r       OR r/m32,r32      2/6       OR dword register to r/m dword\n0A  /r       OR r8,r/m8        2/7       OR byte register to r/m byte\n0B  /r       OR r16,r/m16      2/7       OR word register to r/m word\n0B  /r       OR r32,r/m32      2/7       OR dword register to r/m dword\n\n\nOperation\n\nDEST \u001b DEST OR SRC;\nCF \u001b 0;\nOF \u001b 0\n\nDescription\n\nOR computes the inclusive OR of its two operands and places the result\nin the first operand. Each bit of the result is 0 if both corresponding\nbits of the operands are 0; otherwise, each bit is 1.\n\nFlags Affected\n\nOF \u001b 0, CF \u001b 0; SF, ZF, and PF as described in Appendix C; AF is\nundefined\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in real-address mode; #PF(fault-code) for a page\nfault\n\n\nOUT  Output to Port\n\nOpcode    Instruction     Clocks          Description\n\nE6  ib    OUT imm8,AL     10,pm=4*/24**   Output byte AL to immediate port\n                                          number\nE7  ib    OUT imm8,AX     10,pm=4*/24**   Output word AL to immediate port\n                                          number\nE7  ib    OUT imm8,EAX    10,pm=4*/24**   Output dword AL to immediate\n                                          port number\nEE        OUT DX,AL       11,pm=5*/25**   Output byte AL to port number in\nDX\nEF        OUT DX,AX       11,pm=5*/25**   Output word AL to port number in\nDX\nEF        OUT DX,EAX      11,pm=5*/25**   Output dword AL to port number\n                                          in DX\n\n\n\nNOTES:\n   *If CPL  IOPL\n  **If CPL > IOPL or if in virtual 8086 mode\n\n\nOperation\n\nIF (PE = 1) AND ((VM = 1) OR (CPL > IOPL))\nTHEN (* Virtual 8086 mode, or protected mode with CPL > IOPL *)\n   IF NOT I-O-Permission (DEST, width(DEST))\n   THEN #GP(0);\n   FI;\nFI;\n[DEST] \u001b SRC; (* I/O address space used *)\n\nDescription\n\nOUT transfers a data byte or data word from the register (AL, AX, or\nEAX) given as the second operand to the output port numbered by the\nfirst operand. Output to any port from 0 to 65535 is performed by placing\nthe port number in the DX register and then using an OUT instruction\nwith DX as the first operand. If the instruction contains an eight-bit port\nID, that value is zero-extended to 16 bits.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the current privilege level is higher (has less privilege) than\nIOPL and any of the corresponding I/O permission bits in TSS equals 1\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\n#GP(0) fault if any of the corresponding I/O permission bits in TSS\nequals 1\n\n\nOUTS/OUTSB/OUTSW/OUTSD  Output String to Port\n\nOpcode   Instruction     Clocks          Description\n\n6E       OUTS DX,r/m8    14,pm=8*/28**   Output byte [(E)SI] to port in DX\n6F       OUTS DX,r/m16   14,pm=8*/28**   Output word [(E)SI] to port in DX\n6F       OUTS DX,r/m32   14,pm=8*/28**   Output dword [(E)SI] to port in DX\n6E       OUTSB           14,pm=8*/28**   Output byte DS:[(E)SI] to port in\n                                         DX\n6F       OUTSW           14,pm=8*/28**   Output word DS:[(E)SI] to port in\n                                         DX\n6F       OUTSD           14,pm=8*/28**   Output dword DS:[(E)SI] to port in\n                                         DX\n\n\n\nNOTES:\n   *If CPL  IOPL\n  **If CPL > IOPL or if in virtual 8086 mode\n\n\nOperation\n\nIF AddressSize = 16\nTHEN use SI for source-index;\nELSE (* AddressSize = 32 *)\n   use ESI for source-index;\nFI;\n\nIF (PE = 1) AND ((VM = 1) OR (CPL > IOPL))\nTHEN (* Virtual 8086 mode, or protected mode with CPL > IOPL *)\n   IF NOT I-O-Permission (DEST, width(DEST))\n   THEN #GP(0);\n   FI;\nFI;\nIF byte type of instruction\nTHEN\n   [DX] \u001b [source-index]; (* Write byte at DX I/O address *)\n   IF DF = 0 THEN IncDec \u001b 1 ELSE IncDec \u001b -1; FI;\nFI;\nIF OperandSize = 16\nTHEN\n   [DX] \u001b [source-index]; (* Write word at DX I/O address *)\n   IF DF = 0 THEN IncDec \u001b 2 ELSE IncDec \u001b -2; FI;\nFI;\nIF OperandSize = 32\nTHEN\n   [DX] \u001b [source-index]; (* Write dword at DX I/O address *)\n   IF DF = 0 THEN IncDec \u001b 4 ELSE IncDec \u001b -4; FI;\n   FI;\nFI;\nsource-index \u001b source-index + IncDec;\n\nDescription\n\nOUTS transfers data from the memory byte, word, or doubleword at the\nsource-index register to the output port addressed by the DX register. If\nthe address-size attribute for this instruction is 16 bits, SI is used for\nthe source-index register; otherwise, the address-size attribute is 32 bits,\nand ESI is used for the source-index register.\n\nOUTS does not allow specification of the port number as an immediate value.\nThe port must be addressed through the DX register value. Load the correct\nvalue into DX before executing the OUTS instruction.\n\nThe address of the source data is determined by the contents of\nsource-index register. Load the correct index value into SI or ESI before\nexecuting the OUTS instruction.\n\nAfter the transfer, source-index register is advanced automatically. If\nthe direction flag is 0 (CLD was executed), the source-index register is\nincremented; if the direction flag is 1 (STD was executed), it is\ndecremented. The amount of the increment or decrement is 1 if a byte is\noutput, 2 if a word is output, or 4 if a doubleword is output.\n\nOUTSB, OUTSW, and OUTSD are synonyms for the byte, word, and\ndoubleword OUTS instructions. OUTS can be preceded by the REP\nprefix for block output of CX bytes or words. Refer to the REP\ninstruction for details on this operation.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if CPL is greater than IOPL and any of the corresponding I/O\npermission bits in TSS equals 1; #GP(0) for an illegal memory operand\neffective address in the CS, DS, or ES segments; #SS(0) for an illegal\naddress in the SS segment; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\n#GP(0) fault if any of the corresponding I/O permission bits in TSS\nequals 1; #PF(fault-code) for a page fault\n\n\nPOP  Pop a Word from the Stack\n\nOpcode      Instruction   Clocks     Description\n\n8F   /0     POP m16       5          Pop top of stack into memory word\n8F   /0     POP m32       5          Pop top of stack into memory dword\n58 + rw     POP r16       4          Pop top of stack into word register\n58 + rd     POP r32       4          Pop top of stack into dword register\n1F          POP DS        7,pm=21    Pop top of stack into DS\n07          POP ES        7,pm=21    Pop top of stack into ES\n17          POP SS        7,pm=21    Pop top of stack into SS\n0F   A1     POP FS        7,pm=21    Pop top of stack into FS\n0F   A9     POP GS        7,pm=21    Pop top of stack into GS\n\n\nOperation\n\nIF StackAddrSize = 16\nTHEN\n   IF OperandSize = 16\n   THEN\n      DEST \u001b (SS:SP); (* copy a word *)\n      SP \u001b SP + 2;\n   ELSE (* OperandSize = 32 *)\n      DEST \u001b (SS:SP); (* copy a dword *)\n      SP \u001b SP + 4;\n   FI;\nELSE (* StackAddrSize = 32 * )\n   IF OperandSize = 16\n   THEN\n      DEST \u001b (SS:ESP); (* copy a word *)\n      ESP \u001b ESP + 2;\n   ELSE (* OperandSize = 32 *)\n      DEST \u001b (SS:ESP); (* copy a dword *)\n      ESP \u001b ESP + 4;\n   FI;\nFI;\n\nDescription\n\nPOP replaces the previous contents of the memory, the register, or the\nsegment register operand with the word on the top of the 80386 stack,\naddressed by SS:SP (address-size attribute of 16 bits) or SS:ESP\n(addresssize attribute of 32 bits). The stack pointer SP is incremented\nby 2 for an operand-size of 16 bits or by 4 for an operand-size of 32 bits.\nIt then points to the new top of stack.\n\nPOP CS is not an 80386 instruction. Popping from the stack into the CS\nregister is accomplished with a RET instruction.\n\nIf the destination operand is a segment register (DS, ES, FS, GS, or\nSS), the value popped must be a selector. In protected mode, loading the\nselector initiates automatic loading of the descriptor information\nassociated with that selector into the hidden part of the segment register;\nloading also initiates validation of both the selector and the descriptor\ninformation.\n\nA null value (0000-0003) may be popped into the DS, ES, FS, or GS\nregister without causing a protection exception. An attempt to reference\na segment whose corresponding segment register is loaded with a null\nvalue causes a #GP(0) exception. No memory reference occurs. The saved\nvalue of the segment register is null.\n\nA POP SS instruction inhibits all interrupts, including NMI, until after\nexecution of the next instruction. This allows sequential execution of POP\nSS and POP eSP instructions without danger of having an invalid stack\nduring an interrupt. However, use of the LSS instruction is the preferred\nmethod of loading the SS and eSP registers.\n\nLoading a segment register while in protected mode results in special\nchecks and actions, as described in the following listing:\n\nIF SS is loaded:\n   IF selector is null THEN #GP(0);\n   Selector index must be within its descriptor table limits ELSE\n      #GP(selector);\n   Selector's RPL must equal CPL ELSE #GP(selector);\n   AR byte must indicate a writable data segment ELSE #GP(selector);\n   DPL in the AR byte must equal CPL ELSE #GP(selector);\n   Segment must be marked present ELSE #SS(selector);\n   Load SS register with selector;\n   Load SS register with descriptor;\n\nIF DS, ES, FS or GS is loaded with non-null selector:\n   AR byte must indicate data or readable code segment ELSE\n      #GP(selector);\n   IF data or nonconforming code\n   THEN both the RPL and the CPL must be less than or equal to DPL in\n      AR byte\n   ELSE #GP(selector);\n   FI;\n   Segment must be marked present ELSE #NP(selector);\n   Load segment register with selector;\n   Load segment register with descriptor;\n\nIF DS, ES, FS, or GS is loaded with a null selector:\n   Load segment register with selector\n   Clear valid bit in invisible portion of register\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP, #SS, and #NP if a segment register is being loaded; #SS(0) if the\ncurrent top of stack is not within the stack segment; #GP(0) if the result\nis in a nonwritable segment; #GP(0) for an illegal memory operand\neffective address in the CS, DS, ES, FS, or GS segments; #SS(0) for an\nillegal address in the SS segment; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in real-address mode; #PF(fault-code) for a page\nfault\n\n\nPOPA/POPAD  Pop all General Registers\n\nOpcode   Instruction   Clocks   Description\n\n61       POPA          24       Pop DI, SI, BP, SP, BX, DX, CX, and AX\n61       POPAD         24       Pop EDI, ESI, EBP, ESP, EDX, ECX, and EAX\n\n\nOperation\n\nIF OperandSize = 16 (* instruction = POPA *)\nTHEN\n   DI \u001b Pop();\n   SI \u001b Pop();\n   BP \u001b Pop();\n   throwaway \u001b Pop (); (* Skip SP *)\n   BX \u001b Pop();\n   DX \u001b Pop();\n   CX \u001b Pop();\n   AX \u001b Pop();\nELSE (* OperandSize = 32, instruction = POPAD *)\n   EDI \u001b Pop();\n   ESI \u001b Pop();\n   EBP \u001b Pop();\n   throwaway \u001b Pop (); (* Skip ESP *)\n   EBX \u001b Pop();\n   EDX \u001b Pop();\n   ECX \u001b Pop();\n   EAX \u001b Pop();\nFI;\n\nDescription\n\nPOPA pops the eight 16-bit general registers. However, the SP value is\ndiscarded instead of loaded into SP. POPA reverses a previous PUSHA,\nrestoring the general registers to their values before PUSHA was\nexecuted. The first register popped is DI.\n\nPOPAD pops the eight 32-bit general registers. The ESP value is\ndiscarded instead of loaded into ESP. POPAD reverses the previous\nPUSHAD, restoring the general registers to their values before PUSHAD\nwas executed. The first register popped is EDI.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#SS(0) if the starting or ending stack address is not within the stack\nsegment; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in real-address mode; #PF(fault-code) for a page\nfault\n\n\nPOPF/POPFD  Pop Stack into FLAGS or EFLAGS Register\n\nOpcode   Instruction   Clocks   Description\n\n9D       POPF          5        Pop top of stack FLAGS\n9D       POPFD         5        Pop top of stack into EFLAGS\n\n\nOperation\n\nFlags \u001b Pop();\n\nDescription\n\nPOPF/POPFD pops the word or doubleword on the top of the stack and\nstores the value in the flags register. If the operand-size attribute of\nthe instruction is 16 bits, then a word is popped and the value is stored in\nFLAGS. If the operand-size attribute is 32 bits, then a doubleword is popped\nand the value is stored in EFLAGS.\n\nRefer to Chapter 2 and Chapter 4 for information about the FLAGS\nand EFLAGS registers. Note that bits 16 and 17 of EFLAGS, called\nVM and RF, respectively, are not affected by POPF or POPFD.\n\nThe I/O privilege level is altered only when executing at privilege level\n0. The interrupt flag is altered only when executing at a level at least as\nprivileged as the I/O privilege level. (Real-address mode is equivalent to\nprivilege level 0.) If a POPF instruction is executed with insufficient\nprivilege, an exception does not occur, but the privileged bits do not\nchange.\n\nFlags Affected\n\nAll flags except VM and RF\n\nProtected Mode Exceptions\n\n#SS(0) if the top of stack is not within the stack segment\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\n#GP(0) fault if IOPL is less than 3, to permit emulation\n\n\nPUSH  Push Operand onto the Stack\n\nOpcode     Instruction   Clocks   Description\n\nFF   /6    PUSH m16      5        Push memory word\nFF   /6    PUSH m32      5        Push memory dword\n50 + /r    PUSH r16      2        Push register word\n50 + /r    PUSH r32      2        Push register dword\n6A         PUSH imm8     2        Push immediate byte\n68         PUSH imm16    2        Push immediate word\n68         PUSH imm32    2        Push immediate dword\n0E         PUSH CS       2        Push CS\n16         PUSH SS       2        Push SS\n1E         PUSH DS       2        Push DS\n06         PUSH ES       2        Push ES\n0F   A0    PUSH FS       2        Push FS\nOF   A8    PUSH GS       2        Push GS\n\n\nOperation\n\nIF StackAddrSize = 16\nTHEN\n   IF OperandSize = 16 THEN\n      SP \u001b SP - 2;\n      (SS:SP) \u001b (SOURCE); (* word assignment *)\n   ELSE\n      SP \u001b SP - 4;\n      (SS:SP) \u001b (SOURCE); (* dword assignment *)\n   FI;\nELSE (* StackAddrSize = 32 *)\n   IF OperandSize = 16\n   THEN\n      ESP \u001b ESP - 2;\n      (SS:ESP) \u001b (SOURCE); (* word assignment *)\n   ELSE\n      ESP \u001b ESP - 4;\n      (SS:ESP) \u001b (SOURCE); (* dword assignment *)\n   FI;\nFI;\n\nDescription\n\nPUSH decrements the stack pointer by 2 if the operand-size attribute of\nthe instruction is 16 bits; otherwise, it decrements the stack pointer by\n4. PUSH then places the operand on the new top of stack, which is\npointed to by the stack pointer.\n\nThe 80386 PUSH eSP instruction pushes the value of eSP as it existed\nbefore the instruction. This differs from the 8086, where PUSH SP\npushes the new value (decremented by 2).\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#SS(0) if the new value of SP or ESP is outside the stack segment limit;\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nNone; if SP or ESP is 1, the 80386 shuts down due to a lack of stack\nspace\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in real-address mode; #PF(fault-code) for a page\nfault\n\n\nPUSHA/PUSHAD  Push all General Registers\n\nOpcode  Instruction  Clocks   Description\n\n60      PUSHA        18       Push AX, CX, DX, BX, original SP, BP, SI, and\n                              DI\n60      PUSHAD       18       Push EAX, ECX, EDX, EBX, original ESP, EBP,\n                              ESI, and EDI\n\n\nOperation\n\nIF OperandSize = 16 (* PUSHA instruction *)\nTHEN\n   Temp \u001b (SP);\n   Push(AX);\n   Push(CX);\n   Push(DX);\n   Push(BX);\n   Push(Temp);\n   Push(BP);\n   Push(SI);\n   Push(DI);\nELSE (* OperandSize = 32, PUSHAD instruction *)\n   Temp \u001b (ESP);\n   Push(EAX);\n   Push(ECX);\n   Push(EDX);\n   Push(EBX);\n   Push(Temp);\n   Push(EBP);\n   Push(ESI);\n   Push(EDI);\nFI;\n\nDescription\n\nPUSHA and PUSHAD save the 16-bit or 32-bit general registers,\nrespectively, on the 80386 stack. PUSHA decrements the stack pointer\n(SP) by 16 to hold the eight word values. PUSHAD decrements the\nstack pointer (ESP) by 32 to hold the eight doubleword values. Because\nthe registers are pushed onto the stack in the order in which they were\ngiven, they appear in the 16 or 32 new stack bytes in reverse order. The\nlast register pushed is DI or EDI.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#SS(0) if the starting or ending stack address is outside the stack segment\nlimit; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nBefore executing PUSHA or PUSHAD, the 80386 shuts down if SP or\nESP equals 1, 3, or 5; if SP or ESP equals 7, 9, 11, 13, or 15, exception\n13 occurs\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in real-address mode; #PF(fault-code) for a page\nfault\n\n\nPUSHF/PUSHFD  Push Flags Register onto the Stack\n\nOpcode  Instruction  Clocks   Description\n\n9C      PUSHF        4        Push FLAGS\n9C      PUSHFD       4        Push EFLAGS\n\n\nOperation\n\nIF OperandSize = 32\nTHEN push(EFLAGS);\nELSE push(FLAGS);\nFI;\n\nDescription\n\nPUSHF decrements the stack pointer by 2 and copies the FLAGS\nregister to the new top of stack; PUSHFD decrements the stack pointer by\n4, and the 80386 EFLAGS register is copied to the new top of stack\nwhich is pointed to by SS:eSP. Refer to Chapter 2 and Chapter 4 for\ninformation on the EFLAGS register.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#SS(0) if the new value of eSP is outside the stack segment boundaries\n\nReal Address Mode Exceptions\n\nNone; the 80386 shuts down due to a lack of stack space\n\nVirtual 8086 Mode Exceptions\n\n#GP(0) fault if IOPL is less than 3, to permit emulation\n\n\nRCL/RCR/ROL/ROR  Rotate\n\n\nOpcode       Instruction       Clocks  Description\n\nD0  /2       RCL r/m8,1        9/10    Rotate 9 bits (CF,r/m byte) left\n                                       once\nD2  /2       RCL r/m8,CL       9/10    Rotate 9 bits (CF,r/m byte) left CL\n                                       times\nC0  /2 ib    RCL r/m8,imm8     9/10    Rotate 9 bits (CF,r/m byte) left\n                                       imm8 times\nD1  /2       RCL r/m16,1       9/10    Rotate 17 bits (CF,r/m word) left\n                                       once\nD3  /2       RCL r/m16,CL      9/10    Rotate 17 bits (CF,r/m word) left\n                                       CL times\nC1  /2 ib    RCL r/m16,imm8    9/10    Rotate 17 bits (CF,r/m word) left\n                                       imm8 times\nD1  /2       RCL r/m32,1       9/10    Rotate 33 bits (CF,r/m dword) left\n                                       once\nD3  /2       RCL r/m32,CL      9/10    Rotate 33 bits (CF,r/m dword) left\n                                       CL times\nC1  /2 ib    RCL r/m32,imm8    9/10    Rotate 33 bits (CF,r/m dword) left\n                                       imm8 times\nD0  /3       RCR r/m8,1        9/10    Rotate 9 bits (CF,r/m byte) right\n                                       once\nD2  /3       RCR r/m8,CL       9/10    Rotate 9 bits (CF,r/m byte) right\n                                       CL times\nC0  /3 ib    RCR r/m8,imm8     9/10    Rotate 9 bits (CF,r/m byte) right\n                                       imm8 times\nD1  /3       RCR r/m16,1       9/10    Rotate 17 bits (CF,r/m word) right\n                                       once\nD3  /3       RCR r/m16,CL      9/10    Rotate 17 bits (CF,r/m word) right\n                                       CL times\nC1  /3 ib    RCR r/m16,imm8    9/10    Rotate 17 bits (CF,r/m word) right\n                                       imm8 times\nD1  /3       RCR r/m32,1       9/10    Rotate 33 bits (CF,r/m dword) right\n                                       once\nD3  /3       RCR r/m32,CL      9/10    Rotate 33 bits (CF,r/m dword) right\n                                       CL times\nC1  /3 ib    RCR r/m32,imm8    9/10    Rotate 33 bits (CF,r/m dword) right\n                                       imm8 times\nD0  /0       ROL r/m8,1        3/7     Rotate 8 bits r/m byte left once\nD2  /0       ROL r/m8,CL       3/7     Rotate 8 bits r/m byte left CL\n                                       times\nC0  /0 ib    ROL r/m8,imm8     3/7     Rotate 8 bits r/m byte left imm8\n                                       times\nD1  /0       ROL r/m16,1       3/7     Rotate 16 bits r/m word left once\nD3  /0       ROL r/m16,CL      3/7     Rotate 16 bits r/m word left CL\n                                       times\nC1  /0 ib    ROL r/m16,imm8    3/7     Rotate 16 bits r/m word left imm8\n                                       times\nD1  /0       ROL r/m32,1       3/7     Rotate 32 bits r/m dword left once\nD3  /0       ROL r/m32,CL      3/7     Rotate 32 bits r/m dword left CL\n                                       times\nC1  /0 ib    ROL r/m32,imm8    3/7     Rotate 32 bits r/m dword left imm8\n                                       times\nD0  /1       ROR r/m8,1        3/7     Rotate 8 bits r/m byte right once\nD2  /1       ROR r/m8,CL       3/7     Rotate 8 bits r/m byte right CL\n                                       times\nC0  /1 ib    ROR r/m8,imm8     3/7     Rotate 8 bits r/m word right imm8\n                                       times\nD1  /1       ROR r/m16,1       3/7     Rotate 16 bits r/m word right once\nD3  /1       ROR r/m16,CL      3/7     Rotate 16 bits r/m word right CL\n                                       times\nC1  /1 ib    ROR r/m16,imm8    3/7     Rotate 16 bits r/m word right imm8\n                                       times\nD1  /1       ROR r/m32,1       3/7     Rotate 32 bits r/m dword right once\nD3  /1       ROR r/m32,CL      3/7     Rotate 32 bits r/m dword right CL\n                                       times\nC1  /1 ib    ROR r/m32,imm8    3/7     Rotate 32 bits r/m dword right imm8\n                                       times\n\n\nOperation\n\n(* ROL - Rotate Left *)\ntemp \u001b COUNT;\nWHILE (temp <> 0)\nDO\n   tmpcf \u001b high-order bit of (r/m);\n   r/m \u001b r/m * 2 + (tmpcf);\n   temp \u001b temp - 1;\nOD;\nIF COUNT = 1\nTHEN\n   IF high-order bit of r/m <> CF\n   THEN OF \u001b 1;\n   ELSE OF \u001b 0;\n   FI;\nELSE OF \u001b undefined;\nFI;\n(* ROR - Rotate Right *)\ntemp \u001b COUNT;\nWHILE (temp <> 0 )\nDO\n   tmpcf \u001b low-order bit of (r/m);\n   r/m \u001b r/m / 2 + (tmpcf * 2^(width(r/m)));\n   temp \u001b temp - 1;\nDO;\nIF COUNT = 1\nTHEN\n   IF (high-order bit of r/m) <> (bit next to high-order bit of r/m)\n   THEN OF \u001b 1;\n   ELSE OF \u001b 0;\n   FI;\nELSE OF \u001b undefined;\nFI;\n\nDescription\n\nEach rotate instruction shifts the bits of the register or memory operand\ngiven. The left rotate instructions shift all the bits upward, except for\nthe top bit, which is returned to the bottom. The right rotate instructions\ndo the reverse: the bits shift downward until the bottom bit arrives at\nthe top.\n\nFor the RCL and RCR instructions, the carry flag is part of the rotated\nquantity. RCL shifts the carry flag into the bottom bit and shifts the top\nbit into the carry flag; RCR shifts the carry flag into the top bit and\nshifts the bottom bit into the carry flag. For the ROL and ROR\ninstructions, the original value of the carry flag is not a part of the\nresult, but the carry flag receives a copy of the bit that was shifted from\none end to the other.\n\nThe rotate is repeated the number of times indicated by the second\noperand, which is either an immediate number or the contents of the CL\nregister. To reduce the maximum instruction execution time, the 80386\ndoes not allow rotation counts greater than 31. If a rotation count greater\nthan 31 is attempted, only the bottom five bits of the rotation are used.\nThe 8086 does not mask rotation counts. The 80386 in Virtual 8086 Mode does\nmask rotation counts.\n\nThe overflow flag is defined only for the single-rotate forms of the\ninstructions (second operand = 1). It is undefined in all other cases. For\nleft shifts/rotates, the CF bit after the shift is XORed with the\nhigh-order result bit. For right shifts/rotates, the high-order two bits of\nthe result are XORed to get OF.\n\nFlags Affected\n\nOF only for single rotates; OF is undefined for multi-bit rotates; CF as\ndescribed above\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nREP/REPE/REPZ/REPNE/REPNZ  Repeat Following String Operation\n\n\nOpcode    Instruction         Clocks           Description\n\nF3  6C    REP INS r/m8, DX    13+6*(E)CX,\n                              pm=7+6*(E)CX\nIf CPL  IOPL/\n                              27+6*(E)CX\nIf CPL > IOPL or if in virtual 8086 mode      Input (E)CX bytes from port\n                                               DX into ES:[(E)DI]\nF3  6D    REP INS r/m16,DX    13+6*(E)CX,\n                              pm=7+6*(E)CX\nIf CPL  IOPL/\n                              27+6*(E)CX\nIf CPL > IOPL or if in virtual 8086 mode      Input (E)CX words from port\n                                               DX into ES:[(E)DI]\nF3  6D    REP INS r/m32,DX    13+6*(E)CX,\n                              pm=7+6*(E)CX\nIf CPL  IOPL/\n                              27+6*(E)CX\nIf CPL > IOPL or if in virtual 8086 mode      Input (E)CX dwords from port\n                                               DX into ES:[(E)DI]\nF3  A4    REP MOVS m8,m8      5+4*(E)CX        Move (E)CX bytes from\n                                               [(E)SI] to ES:[(E)DI]\nF3  A5    REP MOVS m16,m16    5+4*(E)CX        Move (E)CX words from\n                                               [(E)SI] to ES:[(E)DI]\nF3  A5    REP MOVS m32,m32    5+4*(E)CX        Move (E)CX dwords from\n                                               [(E)SI] to ES:[(E)DI]\nF3  6E    REP OUTS DX,r/m8    5+12*(E)CX,\n                              pm=6+5*(E)CX\nIf CPL  IOPL/\n                              26+5*(E)CX\nIf CPL > IOPL or if in virtual 8086 mode      Output (E)CX bytes from\n                                               [(E)SI] to port DX\nF3  6F    REP OUTS DX,r/m16   5+12*(E)CX,\n                              pm=6+5*(E)CX\nIf CPL  IOPL/\n                              26+5*(E)CX\nIf CPL > IOPL or if in virtual 8086 mode      Output (E)CX words from\n                                               [(E)SI] to port DX\nF3  6F    REP OUTS DX,r/m32   5+12*(E)CX,\n                              pm=6+5*(E)CX\nIf CPL  IOPL/\n                              26+5*(E)CX\nIf CPL > IOPL or if in virtual 8086 mode      Output (E)CX dwords from\n                                               [(E)SI] to port DX\nF3  AA    REP STOS m8         5+5*(E)CX        Fill (E)CX bytes at\n                                               ES:[(E)DI] with AL\nF3  AB    REP STOS m16        5+5*(E)CX        Fill (E)CX words at\n                                               ES:[(E)DI] with AX\nF3  AB    REP STOS m32        5+5*(E)CX        Fill (E)CX dwords at\n                                               ES:[(E)DI] with EAX\nF3  A6    REPE CMPS m8,m8     5+9*N            Find nonmatching bytes in\n                                               ES:[(E)DI] and [(E)SI]\nF3  A7    REPE CMPS m16,m16   5+9*N            Find nonmatching words in\n                                               ES:[(E)DI] and [(E)SI]\nF3  A7    REPE CMPS m32,m32   5+9*N            Find nonmatching dwords in\n                                               ES:[(E)DI] and [(E)SI]\nF3  AE    REPE SCAS m8        5+8*N            Find non-AL byte starting\n                                               at ES:[(E)DI]\nF3  AF    REPE SCAS m16       5+8*N            Find non-AX word starting\n                                               at ES:[(E)DI]\nF3  AF    REPE SCAS m32       5+8*N            Find non-EAX dword starting\n                                               at ES:[(E)DI]\nF2  A6    REPNE CMPS m8,m8    5+9*N            Find matching bytes in\n                                               ES:[(E)DI] and [(E)SI]\nF2  A7    REPNE CMPS m16,m16  5+9*N            Find matching words in\n                                               ES:[(E)DI] and [(E)SI]\nF2  A7    REPNE CMPS m32,m32  5+9*N            Find matching dwords in\n                                               ES:[(E)DI] and [(E)SI]\nF2  AE    REPNE SCAS m8       5+8*N            Find AL, starting at\n                                               ES:[(E)DI]\nF2  AF    REPNE SCAS m16      5+8*N            Find AX, starting at\n                                               ES:[(E)DI]\nF2  AF    REPNE SCAS m32      5+8*N            Find EAX, starting at\n                                               ES:[(E)DI]\n\n\nOperation\n\nIF AddressSize = 16\nTHEN use CX for CountReg;\nELSE (* AddressSize = 32 *) use ECX for CountReg;\nFI;\nWHILE CountReg <> 0\nDO\n   service pending interrupts (if any);\n   perform primitive string instruction;\n   CountReg \u001b CountReg - 1;\n   IF primitive operation is CMPB, CMPW, SCAB, or SCAW\n   THEN\n      IF (instruction is REP/REPE/REPZ) AND (ZF=1)\n      THEN exit WHILE loop\n      ELSE\n         IF (instruction is REPNZ or REPNE) AND (ZF=0)\n         THEN exit WHILE loop;\n         FI;\n      FI;\n   FI;\nOD;\n\nDescription\n\nREP, REPE (repeat while equal), and REPNE (repeat while not equal)\nare prefix that are applied to string operation. Each prefix cause the\nstring instruction that follows to be repeated the number of times\nindicated in the count register or (for REPE and REPNE) until the\nindicated condition in the zero flag is no longer met.\n\nSynonymous forms of REPE and REPNE are REPZ and REPNZ,\nrespectively.\n\nThe REP prefixes apply only to one string instruction at a time. To repeat\na block of instructions, use the LOOP instruction or another looping\nconstruct.\n\nThe precise action for each iteration is as follows:\n\n  1.  If the address-size attribute is 16 bits, use CX for the count\n      register; if the address-size attribute is 32 bits, use ECX for the\n      count register.\n\n  2.  Check CX. If it is zero, exit the iteration, and move to the next\n      instruction.\n\n  3.  Acknowledge any pending interrupts.\n\n  4.  Perform the string operation once.\n\n  5.  Decrement CX or ECX by one; no flags are modified.\n\n  6.  Check the zero flag if the string operation is SCAS or CMPS. If\n      the repeat condition does not hold, exit the iteration and move to\n      the next instruction. Exit the iteration if the prefix is REPE and ZF\n      is 0 (the last comparison was not equal), or if the prefix is REPNE\n      and ZF is one (the last comparison was equal).\n\n  7.  Return to step 1 for the next iteration.\n\nRepeated CMPS and SCAS instructions can be exited if the count is\nexhausted or if the zero flag fails the repeat condition. These two cases\ncan be distinguished by using either the JCXZ instruction, or by using\nthe conditional jumps that test the zero flag (JZ, JNZ, and JNE).\n\nFlags Affected\n\nZF by REP CMPS and REP SCAS as described above\n\nProtected Mode Exceptions\n\n#UD if a repeat prefix is used before an instruction that is not in the\nlist above; further exceptions can be generated when the string operation is\nexecuted; refer to the descriptions of the string instructions themselves\n\nReal Address Mode Exceptions\n\nInterrupt 6 if a repeat prefix is used before an instruction that is not in\nthe list above; further exceptions can be generated when the string\noperation is executed; refer to the descriptions of the string instructions\nthemselves\n\nVirtual 8086 Mode Exceptions\n\n#UD if a repeat prefix is used before an instruction that is not in the\nlist above; further exceptions can be generated when the string operation is\nexecuted; refer to the descriptions of the string instructions themselves\n\nNotes\n\nNot all input/output ports can handle the rate at which the REP INS\nand REP OUTS instructions execute.\n\n\nRET  Return from Procedure\n\nOpcode     Instruction  Clocks         Description\n\nC3         RET          10+m           Return (near) to caller\nCB         RET          18+m,pm=32+m   Return (far) to caller, same\n                                       privilege\nCB         RET          pm=68          Return (far), lesser privilege,\n                                       switch stacks\nC2  iw     RET imm16    10+m           Return (near), pop imm16 bytes of\n                                       parameters\nCA  iw     RET imm16    18+m,pm=32+m   Return (far), same privilege, pop\n                                       imm16 bytes\nCA  iw     RET imm16    pm=68          Return (far), lesser privilege, pop\n                                       imm16 bytes\n\n\nOperation\n\nIF instruction = near RET\nTHEN;\n   IF OperandSize = 16\n   THEN\n      IP \u001b Pop();\n      EIP \u001b EIP AND 0000FFFFH;\n   ELSE (* OperandSize = 32 *)\n      EIP \u001b Pop();\n   FI;\n   IF instruction has immediate operand THEN eSP \u001b eSP + imm16; FI;\nFI;\n\nIF (PE = 0 OR (PE = 1 AND VM = 1))\n   (* real mode or virtual 8086 mode *)\n   AND instruction = far RET\nTHEN;\n   IF OperandSize = 16\n   THEN\n      IP \u001b Pop();\n      EIP \u001b EIP AND 0000FFFFH;\n      CS \u001b Pop(); (* 16-bit pop *)\n   ELSE (* OperandSize = 32 *)\n      EIP \u001b Pop();\n      CS \u001b Pop(); (* 32-bit pop, high-order 16-bits discarded *)\n   FI;\n   IF instruction has immediate operand THEN eSP \u001b eSP + imm16; FI;\nFI;\n\nIF (PE = 1 AND VM = 0) (* Protected mode, not V86 mode *)\n   AND instruction = far RET\nTHEN\n   IF OperandSize=32\n   THEN Third word on stack must be within stack limits else #SS(0);\n   ELSE Second word on stack must be within stack limits else #SS(0);\n   FI;\n   Return selector RPL must be  CPL ELSE #GP(return selector)\n   IF return selector RPL = CPL\n   THEN GOTO SAME-LEVEL;\n   ELSE GOTO OUTER-PRIVILEGE-LEVEL;\n   FI;\nFI;\n\nSAME-LEVEL:\n   Return selector must be non-null ELSE #GP(0)\n   Selector index must be within its descriptor table limits ELSE\n      #GP(selector)\n   Descriptor AR byte must indicate code segment ELSE #GP(selector)\n   IF non-conforming\n   THEN code segment DPL must equal CPL;\n   ELSE #GP(selector);\n   FI;\n   IF conforming\n   THEN code segment DPL must be  CPL;\n   ELSE #GP(selector);\n   FI;\n   Code segment must be present ELSE #NP(selector);\n   Top word on stack must be within stack limits ELSE #SS(0);\n   IP must be in code segment limit ELSE #GP(0);\n   IF OperandSize=32\n   THEN\n      Load CS:EIP from stack\n      Load CS register with descriptor\n      Increment eSP by 8 plus the immediate offset if it exists\n   ELSE (* OperandSize=16 *)\n      Load CS:IP from stack\n      Load CS register with descriptor\n      Increment eSP by 4 plus the immediate offset if it exists\n   FI;\n\nOUTER-PRIVILEGE-LEVEL:\n   IF OperandSize=32\n   THEN Top (16+immediate) bytes on stack must be within stack limits\n      ELSE #SS(0);\n   ELSE Top (8+immediate) bytes on stack must be within stack limits ELSE\n      #SS(0);\n   FI;\n   Examine return CS selector and associated descriptor:\n      Selector must be non-null ELSE #GP(0);\n      Selector index must be within its descriptor table limits ELSE\n         #GP(selector)\n      Descriptor AR byte must indicate code segment ELSE #GP(selector);\n      IF non-conforming\n      THEN code segment DPL must equal return selector RPL\n      ELSE #GP(selector);\n      FI;\n      IF conforming\n      THEN code segment DPL must be  return selector RPL;\n      ELSE #GP(selector);\n      FI;\n      Segment must be present ELSE #NP(selector)\n   Examine return SS selector and associated descriptor:\n      Selector must be non-null ELSE #GP(0);\n      Selector index must be within its descriptor table limits\n         ELSE #GP(selector);\n      Selector RPL must equal the RPL of the return CS selector ELSE\n         #GP(selector);\n      Descriptor AR byte must indicate a writable data segment ELSE\n         #GP(selector);\n      Descriptor DPL must equal the RPL of the return CS selector ELSE\n         #GP(selector);\n      Segment must be present ELSE #NP(selector);\n   IP must be in code segment limit ELSE #GP(0);\n   Set CPL to the RPL of the return CS selector;\n   IF OperandMode=32\n   THEN\n      Load CS:EIP from stack;\n      Set CS RPL to CPL;\n      Increment eSP by 8 plus the immediate offset if it exists;\n      Load SS:eSP from stack;\n   ELSE (* OperandMode=16 *)\n      Load CS:IP from stack;\n      Set CS RPL to CPL;\n      Increment eSP by 4 plus the immediate offset if it exists;\n      Load SS:eSP from stack;\n   FI;\n   Load the CS register with the return CS descriptor;\n   Load the SS register with the return SS descriptor;\n   For each of ES, FS, GS, and DS\n   DO\n      IF the current register setting is not valid for the outer level,\n         set the register to null (selector \u001b AR \u001b 0);\n      To be valid, the register setting must satisfy the following\n         properties:\n         Selector index must be within descriptor table limits;\n         Descriptor AR byte must indicate data or readable code segment;\n         IF segment is data or non-conforming code, THEN\n            DPL must be  CPL, or DPL must be  RPL;\n      FI;\n   OD;\n\nDescription\n\nRET transfers control to a return address located on the stack. The\naddress is usually placed on the stack by a CALL instruction, and the\nreturn is made to the instruction that follows the CALL.\n\nThe optional numeric parameter to RET gives the number of stack bytes\n(OperandMode=16) or words (OperandMode=32) to be released after the return\naddress is popped. These items are typically used as input parameters to the\nprocedure called.\n\nFor the intrasegment (near) return, the address on the stack is a segment\noffset, which is popped into the instruction pointer. The CS register is\nunchanged. For the intersegment (far) return, the address on the stack\nis a long pointer. The offset is popped first, followed by the selector.\n\nIn real mode, CS and IP are loaded directly. In Protected Mode, an\nintersegment return causes the processor to check the descriptor\naddressed by the return selector. The AR byte of the descriptor must\nindicate a code segment of equal or lesser privilege (or greater or equal\nnumeric value) than the current privilege level. Returns to a lesser\nprivilege level cause the stack to be reloaded from the value saved beyond\nthe parameter block.\n\nThe DS, ES, FS, and GS segment registers can be set to 0 by the RET\ninstruction during an interlevel transfer. If these registers refer to\nsegments that cannot be used by the new privilege level, they are set to\n0 to prevent unauthorized access from the new privilege level.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP, #NP, or #SS, as described under \"Operation\" above; #PF(fault-code) for\na page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would be outside the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nSAHF  Store AH into Flags\n\nOpcode  Instruction  Clocks   Description\n\n9E      SAHF         3        Store AH into flags SF ZF xx AF xx PF xx CF\n\n\nOperation\n\nSF:ZF:xx:AF:xx:PF:xx:CF \u001b AH;\n\nDescription\n\nSAHF loads the flags listed above with values from the AH register,\nfrom bits 7, 6, 4, 2, and 0, respectively.\n\nFlags Affected\n\nSF, ZF, AF, PF, and CF as described above\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nSAL/SAR/SHL/SHR  Shift Instructions\n\n\nOpcode          Instruction       Clocks  Description\n\nD0   /4         SAL r/m8,1        3/7     Multiply r/m byte by 2, once\nD2   /4         SAL r/m8,CL       3/7     Multiply r/m byte by 2, CL times\nC0   /4 ib      SAL r/m8,imm8     3/7     Multiply r/m byte by 2, imm8\n                                          times\nD1   /4         SAL r/m16,1       3/7     Multiply r/m word by 2, once\nD3   /4         SAL r/m16,CL      3/7     Multiply r/m word by 2, CL times\nC1   /4 ib      SAL r/m16,imm8    3/7     Multiply r/m word by 2, imm8\n                                          times\nD1   /4         SAL r/m32,1       3/7     Multiply r/m dword by 2, once\nD3   /4         SAL r/m32,CL      3/7     Multiply r/m dword by 2, CL\n                                          times\nC1   /4 ib      SAL r/m32,imm8    3/7     Multiply r/m dword by 2, imm8\n                                          times\nD0   /7         SAR r/m8,1        3/7     Signed divide^(1) r/m byte by 2,\n                                          once\nD2   /7         SAR r/m8,CL       3/7     Signed divide^(1) r/m byte by 2,\n                                          CL times\nC0   /7 ib      SAR r/m8,imm8     3/7     Signed divide^(1) r/m byte by 2,\n                                          imm8 times\nD1   /7         SAR r/m16,1       3/7     Signed divide^(1) r/m word by 2,\n                                          once\nD3   /7         SAR r/m16,CL      3/7     Signed divide^(1) r/m word by 2,\n                                          CL times\nC1   /7 ib      SAR r/m16,imm8    3/7     Signed divide^(1) r/m word by 2,\n                                          imm8 times\nD1   /7         SAR r/m32,1       3/7     Signed divide^(1) r/m dword by 2,\n                                          once\nD3   /7         SAR r/m32,CL      3/7     Signed divide^(1) r/m dword by 2,\n                                          CL times\nC1   /7 ib      SAR r/m32,imm8    3/7     Signed divide^(1) r/m dword by 2,\n                                          imm8 times\nD0   /4         SHL r/m8,1        3/7     Multiply r/m byte by 2, once\nD2   /4         SHL r/m8,CL       3/7     Multiply r/m byte by 2, CL times\nC0   /4 ib      SHL r/m8,imm8     3/7     Multiply r/m byte by 2, imm8\n                                          times\nD1   /4         SHL r/m16,1       3/7     Multiply r/m word by 2, once\nD3   /4         SHL r/m16,CL      3/7     Multiply r/m word by 2, CL times\nC1   /4 ib      SHL r/m16,imm8    3/7     Multiply r/m word by 2, imm8\n                                          times\nD1   /4         SHL r/m32,1       3/7     Multiply r/m dword by 2, once\nD3   /4         SHL r/m32,CL      3/7     Multiply r/m dword by 2, CL\n                                          times\nC1   /4 ib      SHL r/m32,imm8    3/7     Multiply r/m dword by 2, imm8\n                                          times\nD0   /5         SHR r/m8,1        3/7     Unsigned divide r/m byte by 2,\n                                          once\nD2   /5         SHR r/m8,CL       3/7     Unsigned divide r/m byte by 2,\n                                          CL times\nC0   /5 ib      SHR r/m8,imm8     3/7     Unsigned divide r/m byte by 2,\n                                          imm8 times\nD1   /5         SHR r/m16,1       3/7     Unsigned divide r/m word by 2,\n                                          once\nD3   /5         SHR r/m16,CL      3/7     Unsigned divide r/m word by 2,\n                                          CL times\nC1   /5 ib      SHR r/m16,imm8    3/7     Unsigned divide r/m word by 2,\n                                          imm8 times\nD1   /5         SHR r/m32,1       3/7     Unsigned divide r/m dword by 2,\n                                          once\nD3   /5         SHR r/m32,CL      3/7     Unsigned divide r/m dword by 2,\n                                          CL times\nC1   /5 ib      SHR r/m32,imm8    3/7     Unsigned divide r/m dword by 2,\n                                          imm8 times\n\n\nNot the same division as IDIV; rounding is toward negative infinity.\n\nOperation\n\n(* COUNT is the second parameter *)\n(temp) \u001b COUNT;\nWHILE (temp <> 0)\nDO\n   IF instruction is SAL or SHL\n   THEN CF \u001b high-order bit of r/m;\n   FI;\n   IF instruction is SAR or SHR\n   THEN CF \u001b low-order bit of r/m;\n   FI;\n   IF instruction = SAL or SHL\n   THEN r/m \u001b r/m * 2;\n   FI;\n   IF instruction = SAR\n   THEN r/m \u001b r/m /2 (*Signed divide, rounding toward negative infinity*);\n   FI;\n   IF instruction = SHR\n   THEN r/m \u001b r/m / 2; (* Unsigned divide *);\n   FI;\n   temp \u001b temp - 1;\nOD;\n(* Determine overflow for the various instructions *)\nIF COUNT = 1\nTHEN\n   IF instruction is SAL or SHL\n   THEN OF \u001b high-order bit of r/m <> (CF);\n   FI;\n   IF instruction is SAR\n   THEN OF \u001b 0;\n   FI;\n   IF instruction is SHR\n   THEN OF \u001b high-order bit of operand;\n   FI;\nELSE OF \u001b undefined;\nFI;\n\nDescription\n\nSAL (or its synonym, SHL) shifts the bits of the operand upward. The\nhigh-order bit is shifted into the carry flag, and the low-order bit is set\nto 0.\n\nSAR and SHR shift the bits of the operand downward. The low-order\nbit is shifted into the carry flag. The effect is to divide the operand by\n2. SAR performs a signed divide with rounding toward negative infinity (not\nthe same as IDIV); the high-order bit remains the same. SHR performs an\nunsigned divide; the high-order bit is set to 0.\n\nThe shift is repeated the number of times indicated by the second\noperand, which is either an immediate number or the contents of the CL\nregister. To reduce the maximum execution time, the 80386 does not\nallow shift counts greater than 31. If a shift count greater than 31 is\nattempted, only the bottom five bits of the shift count are used. (The\n8086 uses all eight bits of the shift count.)\n\nThe overflow flag is set only if the single-shift forms of the instructions\nare used. For left shifts, OF is set to 0 if the high bit of the answer is\nthe same as the result of the carry flag (i.e., the top two bits of the\noriginal operand were the same); OF is set to 1 if they are different. For\nSAR, OF is set to 0 for all single shifts. For SHR, OF is set to the\nhigh-order bit of the original operand.\n\nFlags Affected\n\nOF for single shifts; OF is undefined for multiple shifts; CF, ZF, PF,\nand SF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nSBB  Integer Subtraction with Borrow\n\n\nOpcode       Instruction       Clocks  Description\n\n1C  ib       SBB AL,imm8       2       Subtract with borrow immediate byte\n                                       from AL\n1D  iw       SBB AX,imm16      2       Subtract with borrow immediate word\n                                       from AX\n1D  id       SBB EAX,imm32     2       Subtract with borrow immediate\n                                       dword from EAX\n80  /3 ib    SBB r/m8,imm8     2/7     Subtract with borrow immediate byte\n                                       from r/m byte\n81  /3 iw    SBB r/m16,imm16   2/7     Subtract with borrow immediate word\n                                       from r/m word\n81  /3 id    SBB r/m32,imm32   2/7     Subtract with borrow immediate\n                                       dword from r/m dword\n83  /3 ib    SBB r/m16,imm8    2/7     Subtract with borrow sign-extended\n                                       immediate byte from r/m word\n83  /3 ib    SBB r/m32,imm8    2/7     Subtract with borrow sign-extended\n                                       immediate byte from r/m dword\n18  /r       SBB r/m8,r8       2/6     Subtract with borrow byte register\n                                       from r/m byte\n19  /r       SBB r/m16,r16     2/6     Subtract with borrow word register\n                                       from r/m word\n19  /r       SBB r/m32,r32     2/6     Subtract with borrow dword register\n                                       from r/m dword\n1A  /r       SBB r8,r/m8       2/7     Subtract with borrow byte register\n                                       from r/m byte\n1B  /r       SBB r16,r/m16     2/7     Subtract with borrow word register\n                                       from r/m word\n1B  /r       SBB r32,r/m32     2/7     Subtract with borrow dword register\n                                       from r/m dword\n\n\nOperation\n\nIF SRC is a byte and DEST is a word or dword\nTHEN DEST = DEST - (SignExtend(SRC) + CF)\nELSE DEST \u001b DEST - (SRC + CF);\n\nDescription\n\nSBB adds the second operand (DEST) to the carry flag (CF) and\nsubtracts the result from the first operand (SRC). The result of the\nsubtraction is assigned to the first operand (DEST), and the flags are\nset accordingly.\n\nWhen an immediate byte value is subtracted from a word operand, the\nimmediate value is first sign-extended.\n\nFlags Affected\n\nOF, SF, ZF, AF, PF, and CF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nSCAS/SCASB/SCASW/SCASD  Compare String Data\n\nOpcode  Instruction  Clocks  Description\n\nAE      SCAS m8      7       Compare bytes AL-ES:[DI], update (E)DI\nAF      SCAS m16     7       Compare words AX-ES:[DI], update (E)DI\nAF      SCAS m32     7       Compare dwords EAX-ES:[DI], update (E)DI\nAE      SCASB        7       Compare bytes AL-ES:[DI], update (E)DI\nAF      SCASW        7       Compare words AX-ES:[DI], update (E)DI\nAF      SCASD        7       Compare dwords EAX-ES:[DI], update (E)DI\n\n\nOperation\n\nIF AddressSize = 16\nTHEN use DI for dest-index;\nELSE (* AddressSize = 32 *) use EDI for dest-index;\nFI;\nIF byte type of instruction\nTHEN\n   AL - [dest-index]; (* Compare byte in AL and dest *)\n   IF DF = 0 THEN IndDec \u001b 1 ELSE IncDec \u001b -1; FI;\nELSE\n   IF OperandSize = 16\n   THEN\n      AX - [dest-index]; (* compare word in AL and dest *)\n      IF DF = 0 THEN IncDec \u001b 2 ELSE IncDec \u001b -2; FI;\n   ELSE (* OperandSize = 32 *)\n      EAX - [dest-index];(* compare dword in EAX & dest *)\n      IF DF = 0 THEN IncDec \u001b 4 ELSE IncDec \u001b -4; FI;\n   FI;\nFI;\ndest-index = dest-index + IncDec\n\nDescription\n\nSCAS subtracts the memory byte or word at the destination register from\nthe AL, AX or EAX register. The result is discarded; only the flags are set.\nThe operand must be addressable from the ES segment; no segment override is\npossible.\n\nIf the address-size attribute for this instruction is 16 bits, DI is used\nas the destination register; otherwise, the address-size attribute is 32\nbits and EDI is used.\n\nThe address of the memory data being compared is determined solely by the\ncontents of the destination register, not by the operand to SCAS. The\noperand validates ES segment addressability and determines the data type.\nLoad the correct index value into DI or EDI before executing SCAS.\n\nAfter the comparison is made, the destination register is automatically\nupdated. If the direction flag is 0 (CLD was executed), the destination\nregister is incremented; if the direction flag is 1 (STD was executed), it\nis decremented. The increments or decrements are by 1 if bytes are compared,\nby 2 if words are compared, or by 4 if doublewords are compared.\n\nSCASB, SCASW, and SCASD are synonyms for the byte, word and\ndoubleword SCAS instructions that don't require operands. They are\nsimpler to code, but provide no type or segment checking.\n\nSCAS can be preceded by the REPE or REPNE prefix for a block search\nof CX or ECX bytes or words. Refer to the REP instruction for further\ndetails.\n\nFlags Affected\n\nOF, SF, ZF, AF, PF, and CF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nSETcc  Byte Set on Condition\n\n\nOpcode   Instruction  Clocks  Description\n\n0F  97   SETA r/m8    4/5     Set byte if above (CF=0 and ZF=0)\n0F  93   SETAE r/m8   4/5     Set byte if above or equal (CF=0)\n0F  92   SETB r/m8    4/5     Set byte if below (CF=1)\n0F  96   SETBE r/m8   4/5     Set byte if below or equal (CF=1 or (ZF=1)\n0F  92   SETC r/m8    4/5     Set if carry (CF=1)\n0F  94   SETE r/m8    4/5     Set byte if equal (ZF=1)\n0F  9F   SETG r/m8    4/5     Set byte if greater (ZF=0 or SF=OF)\n0F  9D   SETGE r/m8   4/5     Set byte if greater or equal (SF=OF)\n0F  9C   SETL r/m8    4/5     Set byte if less (SF<>OF)\n0F  9E   SETLE r/m8   4/5     Set byte if less or equal (ZF=1 and\n                              SF<>OF)\n0F  96   SETNA r/m8   4/5     Set byte if not above (CF=1)\n0F  92   SETNAE r/m8  4/5     Set byte if not above or equal (CF=1)\n0F  93   SETNB r/m8   4/5     Set byte if not below (CF=0)\n0F  97   SETNBE r/m8  4/5     Set byte if not below or equal (CF=0 and\n                              ZF=0)\n0F  93   SETNC r/m8   4/5     Set byte if not carry (CF=0)\n0F  95   SETNE r/m8   4/5     Set byte if not equal (ZF=0)\n0F  9E   SETNG r/m8   4/5     Set byte if not greater (ZF=1 or SF<>OF)\n0F  9C   SETNGE r/m8  4/5     Set if not greater or equal (SF<>OF)\n0F  9D   SETNL r/m8   4/5     Set byte if not less (SF=OF)\n0F  9F   SETNLE r/m8  4/5     Set byte if not less or equal (ZF=1 and\n                              SF<>OF)\n0F  91   SETNO r/m8   4/5     Set byte if not overflow (OF=0)\n0F  9B   SETNP r/m8   4/5     Set byte if not parity (PF=0)\n0F  99   SETNS r/m8   4/5     Set byte if not sign (SF=0)\n0F  95   SETNZ r/m8   4/5     Set byte if not zero (ZF=0)\n0F  90   SETO r/m8    4/5     Set byte if overflow (OF=1)\n0F  9A   SETP r/m8    4/5     Set byte if parity (PF=1)\n0F  9A   SETPE r/m8   4/5     Set byte if parity even (PF=1)\n0F  9B   SETPO r/m8   4/5     Set byte if parity odd (PF=0)\n0F  98   SETS r/m8    4/5     Set byte if sign (SF=1)\n0F  94   SETZ r/m8    4/5     Set byte if zero (ZF=1)\n\n\nOperation\n\nIF condition THEN r/m8 \u001b 1 ELSE r/m8 \u001b 0; FI;\n\nDescription\n\nSETcc stores a byte at the destination specified by the effective address\nor register if the condition is met, or a 0 byte if the condition is not\nmet.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a non-writable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nSGDT/SIDT  Store Global/Interrupt Descriptor Table Register\n\nOpcode       Instruction   Clocks   Description\n\n0F  01 /0    SGDT m        9        Store GDTR to m\n0F  01 /1    SIDT m        9        Store IDTR to m\n\n\nOperation\n\nDEST \u001b 48-bit BASE/LIMIT register contents;\n\nDescription\n\nSGDT/SIDT copies the contents of the descriptor table register the six\nbytes of memory indicated by the operand. The LIMIT field of the\nregister is assigned to the first word at the effective address. If the\noperand-size attribute is 32 bits, the next three bytes are assigned the\nBASE field of the register, and the fourth byte is written with zero. The\nlast byte is undefined. Otherwise, if the operand-size attribute is 16\nbits, the next four bytes are assigned the 32-bit BASE field of the\nregister.\n\nSGDT and SIDT are used only in operating system software; they are\nnot used in application programs.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\nInterrupt 6 if the destination operand is a register; #GP(0) if the\ndestination is in a nonwritable segment; #GP(0) for an illegal memory\noperand effective address in the CS, DS, ES, FS, or GS segments; #SS(0) for\nan illegal address in the SS segment; #PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 6 if the destination operand is a register; Interrupt 13 if any\npart of the operand would lie outside of the effective address space from\n0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\nCompatability Note\n\nThe 16-bit forms of the SGDT/SIDT instructions are compatible with\nthe 80286, if the value in the upper eight bits is not referenced. The\n80286 stores 1's in these upper bits, whereas the 80386 stores 0's if the\noperand-size attribute is 16 bits. These bits were specified as undefined\nby the SGDT/SIDT instructions in the iAPX 286 Programmer's\nReference Manual.\n\n\nSHLD  Double Precision Shift Left\n\nOpcode   Instruction          Clocks   Description\n\n0F  A4   SHLD r/m16,r16,imm8  3/7      r/m16 gets SHL of r/m16 concatenated\n                                       with r16\n0F  A4   SHLD r/m32,r32,imm8  3/7      r/m32 gets SHL of r/m32 concatenated\n                                       with r32\n0F  A5   SHLD r/m16,r16,CL    3/7      r/m16 gets SHL of r/m16 concatenated\n                                       with r16\n0F  A5   SHLD r/m32,r32,CL    3/7      r/m32 gets SHL of r/m32 concatenated\n                                       with r32\n\n\nOperation\n\n(* count is an unsigned integer corresponding to the last operand of the\ninstruction, either an immediate byte or the byte in register CL *)\nShiftAmt \u001b count MOD 32;\ninBits \u001b register; (* Allow overlapped operands *)\nIF ShiftAmt = 0\nTHEN no operation\nELSE\n   IF ShiftAmt  OperandSize\n   THEN (* Bad parameters *)\n      r/m \u001b UNDEFINED;\n      CF, OF, SF, ZF, AF, PF \u001b UNDEFINED;\n   ELSE (* Perform the shift *)\n      CF \u001b BIT[Base, OperandSize - ShiftAmt];\n         (* Last bit shifted out on exit *)\n   FOR i \u001b OperandSize - 1 DOWNTO ShiftAmt\n   DO\n      BIT[Base, i] \u001b BIT[Base, i - ShiftAmt];\n   OF;\n   FOR i \u001b ShiftAmt - 1 DOWNTO 0\n   DO\n      BIT[Base, i] \u001b BIT[inBits, i - ShiftAmt + OperandSize];\n   OD;\n   Set SF, ZF, PF (r/m);\n      (* SF, ZF, PF are set according to the value of the result *)\n   AF \u001b UNDEFINED;\n   FI;\nFI;\n\nDescription\n\nSHLD shifts the first operand provided by the r/m field to the left as\nmany bits as specified by the count operand. The second operand (r16 or r32)\nprovides the bits to shift in from the right (starting with bit 0). The\nresult is stored back into the r/m operand. The register remains unaltered.\n\nThe count operand is provided by either an immediate byte or the contents\nof the CL register. These operands are taken MODULO 32 to provide a number\nbetween 0 and 31 by which to shift. Because the bits to shift are provided\nby the specified registers, the operation is useful for multiprecision\nshifts (64 bits or more). The SF, ZF and PF flags are set according to the\nvalue of the result. CS is set to the value of the last bit shifted out. OF\nand AF are left undefined.\n\nFlags Affected\n\nOF, SF, ZF, PF, and CF as described above; AF and OF are undefined\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nSHRD  Double Precision Shift Right\n\nOpcode   Instruction           Clocks  Description\n\n0F  AC   SHRD r/m16,r16,imm8   3/7     r/m16 gets SHR of r/m16 concatenated\n                                       with r16\n0F  AC   SHRD r/m32,r32,imm8   3/7     r/m32 gets SHR of r/m32 concatenated\n                                       with r32\n0F  AD   SHRD r/m16,r16,CL     3/7     r/m16 gets SHR of r/m16 concatenated\n                                       with r16\n0F  AD   SHRD r/m32,r32,CL     3/7     r/m32 gets SHR of r/m32 concatenated\n                                       with r32\n\n\nOperation\n\n(* count is an unsigned integer corresponding to the last operand of the\ninstruction, either an immediate byte or the byte in register CL *)\nShiftAmt \u001b count MOD 32;\ninBits \u001b register; (* Allow overlapped operands *)\nIF ShiftAmt = 0\nTHEN no operation\nELSE\n   IF ShiftAmt  OperandSize\n   THEN (* Bad parameters *)\n      r/m \u001b UNDEFINED;\n      CF, OF, SF, ZF, AF, PF \u001b UNDEFINED;\n   ELSE (* Perform the shift *)\n      CF \u001b BIT[r/m, ShiftAmt - 1]; (* last bit shifted out on exit *)\n      FOR i \u001b 0 TO OperandSize - 1 - ShiftAmt\n      DO\n         BIT[r/m, i] \u001b BIT[r/m, i - ShiftAmt];\n      OD;\n      FOR i \u001b OperandSize - ShiftAmt TO OperandSize - 1\n      DO\n         BIT[r/m,i] \u001b BIT[inBits,i+ShiftAmt - OperandSize];\n      OD;\n      Set SF, ZF, PF (r/m);\n         (* SF, ZF, PF are set according to the value of the result *)\n      Set SF, ZF, PF (r/m);\n      AF \u001b UNDEFINED;\n   FI;\nFI;\n\nDescription\n\nSHRD shifts the first operand provided by the r/m field to the right as many\nbits as specified by the count operand. The second operand (r16 or r32)\nprovides the bits to shift in from the left (starting with bit 31). The\nresult is stored back into the r/m operand. The register remains unaltered.\n\nThe count operand is provided by either an immediate byte or the contents\nof the CL register. These operands are taken MODULO 32 to provide a number\nbetween 0 and 31 by which to shift. Because the bits to shift are provided\nby the specified register, the operation is useful for multi-precision\nshifts (64 bits or more). The SF, ZF and PF flags are set according to the\nvalue of the result. CS is set to the value of the last bit shifted out. OF\nand AF are left undefined.\n\nFlags Affected\n\nOF, SF, ZF, PF, and CF as described above; AF and OF are undefined\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nSLDT  Store Local Descriptor Table Register\n\nOpcode      Instruction   Clocks      Description\n\n0F  00 /0   SLDT r/m16    pm=2/2      Store LDTR to EA word\n\n\nOperation\n\nr/m16 \u001b LDTR;\n\nDescription\n\nSLDT stores the Local Descriptor Table Register (LDTR) in the two-byte\nregister or memory location indicated by the effective address operand.\nThis register is a selector that points into the Global Descriptor Table.\n\nSLDT is used only in operating system software. It is not used in\napplication programs.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 6; SLDT is not recognized in Real Address Mode\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\nNotes\n\nThe operand-size attribute has no effect on the operation of the\ninstruction.\n\n\nSMSW  Store Machine Status Word\n\nOpcode      Instruction     Clocks          Description\n\n0F  01 /4   SMSW r/m16      2/3,pm=2/2      Store machine status word to EA\n                                            word\n\n\nOperation\n\nr/m16 \u001b MSW;\n\nDescription\n\nSMSW stores the machine status word (part of CR0) in the two-byte register\nor memory location indicated by the effective address operand.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\nNotes\n\nThis instruction is provided for compatibility with the 80286; 80386\nprograms should use MOV ..., CR0.\n\n\nSTC  Set Carry Flag\n\nOpcode      Instruction     Clocks      Description\n\nF9          STC             2           Set carry flag\n\n\nOperation\n\nCF \u001b 1;\n\nDescription\n\nSTC sets the carry flag to 1.\n\nFlags Affected\n\nCF = 1\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nSTD  Set Direction Flag\n\nOpcode  Instruction   Clocks    Description\n\nFD      STD           2         Set direction flag so (E)SI and/or (E)DI\n                                decrement\n\n\nOperation\n\nDF \u001b 1;\n\nDescription\n\nSTD sets the direction flag to 1, causing all subsequent string operations\nto decrement the index registers, (E)SI and/or (E)DI, on which they\noperate.\n\nFlags Affected\n\nDF = 1\n\nProtected Mode Exceptions\n\nNone\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nSTI  Set Interrupt Flag\n\nOpcode  Instruction   Clocks   Description\n\nF13     STI           3        Set interrupt flag; interrupts enabled at the\n                               end of the next instruction\n\n\nOperation\n\nIF \u001b 1\n\nDescription\n\nSTI sets the interrupt flag to 1. The 80386 then responds to external\ninterrupts after executing the next instruction if the next instruction\nallows the interrupt flag to remain enabled. If external interrupts are\ndisabled and you code STI, RET (such as at the end of a subroutine),\nthe RET is allowed to execute before external interrupts are recognized.\nAlso, if external interrupts are disabled and you code STI, CLI, then\nexternal interrupts are not recognized because the CLI instruction clears\nthe interrupt flag during its execution.\n\nFlags Affected\n\nIF = 1\n\nProtected Mode Exceptions\n\n#GP(0) if the current privilege level is greater (has less privilege) than\nthe I/O privilege level\n\nReal Address Mode Exceptions\n\nNone\n\nVirtual 8086 Mode Exceptions\n\nNone\n\n\nSTOS/STOSB/STOSW/STOSD  Store String Data\n\nOpcode  Instruction  Clocks   Description\n\nAA      STOS m8      4        Store AL in byte ES:[(E)DI], update (E)DI\nAB      STOS m16     4        Store AX in word ES:[(E)DI], update (E)DI\nAB      STOS m32     4        Store EAX in dword ES:[(E)DI], update (E)DI\nAA      STOSB        4        Store AL in byte ES:[(E)DI], update (E)DI\nAB      STOSW        4        Store AX in word ES:[(E)DI], update (E)DI\nAB      STOSD        4        Store EAX in dword ES:[(E)DI], update (E)DI\n\n\nOperation\n\nIF AddressSize = 16\nTHEN use ES:DI for DestReg\nELSE (* AddressSize = 32 *) use ES:EDI for DestReg;\nFI;\nIF byte type of instruction\nTHEN\n   (ES:DestReg) \u001b AL;\n   IF DF = 0\n   THEN DestReg \u001b DestReg + 1;\n   ELSE DestReg \u001b DestReg - 1;\n   FI;\nELSE IF OperandSize = 16\n   THEN\n      (ES:DestReg) \u001b AX;\n      IF DF = 0\n      THEN DestReg \u001b DestReg + 2;\n      ELSE DestReg \u001b DestReg - 2;\n      FI;\n   ELSE (* OperandSize = 32 *)\n      (ES:DestReg) \u001b EAX;\n      IF DF = 0\n      THEN DestReg \u001b DestReg + 4;\n      ELSE DestReg \u001b DestReg - 4;\n      FI;\n   FI;\nFI;\n\nDescription\n\nSTOS transfers the contents of all AL, AX, or EAX register to the memory\nbyte or word given by the destination register relative to the ES segment.\nThe destination register is DI for an address-size attribute of 16 bits or\nEDI for an address-size attribute of 32 bits.\n\nThe destination operand must be addressable from the ES register. A segment\noverride is not possible.\n\nThe address of the destination is determined by the contents of the\ndestination register, not by the explicit operand of STOS. This operand is\nused only to validate ES segment addressability and to determine the data\ntype. Load the correct index value into the destination register before\nexecuting STOS.\n\nAfter the transfer is made, DI is automatically updated. If the direction\nflag is 0 (CLD was executed), DI is incremented; if the direction flag is\n1 (STD was executed), DI is decremented. DI is incremented or decremented by\n1 if a byte is stored, by 2 if a word is stored, or by 4 if a doubleword is\nstored.\n\nSTOSB, STOSW, and STOSD are synonyms for the byte, word, and doubleword STOS\ninstructions, that do not require an operand. They are simpler to use, but\nprovide no type or segment checking.\n\nSTOS can be preceded by the REP prefix for a block fill of CX or ECX bytes,\nwords, or doublewords. Refer to the REP instruction for further details.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nSTR  Store Task Register\n\nOpcode        Instruction   Clocks       Description\n\n0F  00 /1     STR r/m16     pm=23/27     Load EA word into task register\n\n\nOperation\n\nr/m \u001b task register;\n\nDescription\n\nThe contents of the task register are copied to the two-byte register or\nmemory location indicated by the effective address operand.\n\nSTR is used only in operating system software. It is not used in application\nprograms.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 6; STR is not recognized in Real Address Mode\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode\n\nNotes\n\nThe operand-size attribute has no effect on this instruction.\n\n\nSUB  Integer Subtraction\n\nOpcode      Instruction      Clocks   Description\n\n2C  ib      SUB AL,imm8      2        Subtract immediate byte from AL\n2D  iw      SUB AX,imm16     2        Subtract immediate word from AX\n2D  id      SUB EAX,imm32    2        Subtract immediate dword from EAX\n80  /5 ib   SUB r/m8,imm8    2/7      Subtract immediate byte from r/m byte\n81  /5 iw   SUB r/m16,imm16  2/7      Subtract immediate word from r/m word\n81  /5 id   SUB r/m32,imm32  2/7      Subtract immediate dword from r/m\n                                      dword\n83  /5 ib   SUB r/m16,imm8   2/7      Subtract sign-extended immediate byte\n                                      from r/m word\n83  /5 ib   SUB r/m32,imm8   2/7      Subtract sign-extended immediate byte\n                                      from r/m dword\n28  /r      SUB r/m8,r8      2/6      Subtract byte register from r/m byte\n29  /r      SUB r/m16,r16    2/6      Subtract word register from r/m word\n29  /r      SUB r/m32,r32    2/6      Subtract dword register from r/m\n                                      dword\n2A  /r      SUB r8,r/m8      2/7      Subtract byte register from r/m byte\n2B  /r      SUB r16,r/m16    2/7      Subtract word register from r/m word\n2B  /r      SUB r32,r/m32    2/7      Subtract dword register from r/m\n                                      dword\n\n\nOperation\n\nIF SRC is a byte and DEST is a word or dword\nTHEN DEST = DEST - SignExtend(SRC);\nELSE DEST \u001b DEST - SRC;\nFI;\n\nDescription\n\nSUB subtracts the second operand (SRC) from the first operand (DEST). The\nfirst operand is assigned the result of the subtraction, and the flags are\nset accordingly.\n\nWhen an immediate byte value is subtracted from a word operand, the\nimmediate value is first sign-extended to the size of the destination\noperand.\n\nFlags Affected\n\nOF, SF, ZF, AF, PF, and CF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nTEST  Logical Compare\n\nOpcode       Instruction       Clocks   Description\n\nA8   ib      TEST AL,imm8      2        AND immediate byte with AL\nA9   iw      TEST AX,imm16     2        AND immediate word with AX\nA9   id      TEST EAX,imm32    2        AND immediate dword with EAX\nF6   /0 ib   TEST r/m8,imm8    2/5      AND immediate byte with r/m byte\nF7   /0 iw   TEST r/m16,imm16  2/5      AND immediate word with r/m word\nF7   /0 id   TEST r/m32,imm32  2/5      AND immediate dword with r/m dword\n84   /r      TEST r/m8,r8      2/5      AND byte register with r/m byte\n85   /r      TEST r/m16,r16    2/5      AND word register with r/m word\n85   /r      TEST r/m32,r32    2/5      AND dword register with r/m dword\n\n\nOperation\n\nDEST : = LeftSRC AND RightSRC;\nCF \u001b 0;\nOF \u001b 0;\n\nDescription\n\nTEST computes the bit-wise logical AND of its two operands. Each bit\nof the result is 1 if both of the corresponding bits of the operands are 1;\notherwise, each bit is 0. The result of the operation is discarded and only\nthe flags are modified.\n\nFlags Affected\n\nOF = 0, CF = 0; SF, ZF, and PF as described in Appendix C\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nVERR, VERW  Verify a Segment for Reading or Writing\n\nOpcode       Instruction   Clocks      Description\n\n0F  00 /4    VERR r/m16    pm=10/11    Set ZF=1 if segment can be read,\n                                       selector in r/m16\n0F  00 /5    VERW r/m16    pm=15/16    Set ZF=1 if segment can be written,\n                                       selector in r/m16\n\n\nOperation\n\nIF segment with selector at (r/m) is accessible\n   with current protection level\n   AND ((segment is readable for VERR) OR\n      (segment is writable for VERW))\nTHEN ZF \u001b 0;\nELSE ZF \u001b 1;\nFI;\n\nDescription\n\nThe two-byte register or memory operand of VERR and VERW contains\nthe value of a selector. VERR and VERW determine whether the\nsegment denoted by the selector is reachable from the current privilege\nlevel and whether the segment is readable (VERR) or writable (VERW).\nIf the segment is accessible, the zero flag is set to 1; if the segment is\nnot accessible, the zero flag is set to 0. To set ZF, the following\nconditions must be met:\n\n    The selector must denote a descriptor within the bounds of the table\n     (GDT or LDT); the selector must be \"defined.\"\n\n    The selector must denote the descriptor of a code or data segment\n     (not that of a task state segment, LDT, or a gate).\n\n    For VERR, the segment must be readable. For VERW, the segment\n     must be a writable data segment.\n\n    If the code segment is readable and conforming, the descriptor\n     privilege level (DPL) can be any value for VERR. Otherwise, the\n     DPL must be greater than or equal to (have less or the same\n     privilege as) both the current privilege level and the selector's RPL.\n\nThe validation performed is the same as if the segment were loaded into\nDS, ES, FS, or GS, and the indicated access (read or write) were\nperformed. The zero flag receives the result of the validation. The\nselector's value cannot result in a protection exception, enabling the\nsoftware to anticipate possible segment access problems.\n\nFlags Affected\n\nZF as described above\n\nProtected Mode Exceptions\n\nFaults generated by illegal addressing of the memory operand that\ncontains the selector, the selector is not loaded into any segment\nregister, and no faults attributable to the selector operand are generated\n\n#GP(0) for an illegal memory operand effective address in the CS, DS,\nES, FS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 6; VERR and VERW are not recognized in Real Address Mode\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nWAIT  Wait until BUSY# Pin is Inactive (HIGH)\n\nOpcode   Instruction   Clocks     Description\n\n9B       WAIT          6 min.     Wait until BUSY pin is inactive (HIGH)\n\n\nDescription\n\nWAIT suspends execution of 80386 instructions until the BUSY# pin is\ninactive (high). The BUSY# pin is driven by the 80287 numeric processor\nextension.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#NM if the task-switched flag in the machine status word (the lower 16 bits\nof register CR0) is set; #MF if the ERROR# input pin is asserted (i.e., the\n80287 has detected an unmasked numeric error)\n\nReal Address Mode Exceptions\n\nSame exceptions as in Protected Mode\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Protected Mode\n\n\nXCHG  Exchange Register/Memory with Register\n\nOpcode    Instruction      Clocks     Description\n\n90 + r    XCHG AX,r16      3          Exchange word register with AX\n90 + r    XCHG r16,AX      3          Exchange word register with AX\n90 + r    XCHG EAX,r32     3          Exchange dword register with EAX\n90 + r    XCHG r32,EAX     3          Exchange dword register with EAX\n86  /r    XCHG r/m8,r8     3          Exchange byte register with EA byte\n86  /r    XCHG r8,r/m8     3/5        Exchange byte register with EA byte\n87  /r    XCHG r/m16,r16   3          Exchange word register with EA word\n87  /r    XCHG r16,r/m16   3/5        Exchange word register with EA word\n87  /r    XCHG r/m32,r32   3          Exchange dword register with EA dword\n87  /r    XCHG r32,r/m32   3/5        Exchange dword register with EA dword\n\n\nOperation\n\ntemp \u001b DEST\nDEST \u001b SRC\nSRC \u001b temp\n\nDescription\n\nXCHG exchanges two operands. The operands can be in either order. If a\nmemory operand is involved, BUS LOCK is asserted for the duration of the\nexchange, regardless of the presence or absence of the LOCK prefix or of the\nvalue of the IOPL.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) if either operand is in a nonwritable segment; #GP(0) for an\nillegal memory operand effective address in the CS, DS, ES, FS, or GS\nsegments; #SS(0) for an illegal address in the SS segment; #PF(fault-code)\nfor a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nXLAT/XLATB  Table Look-up Translation\n\nD7    XLAT m8    5     Set AL to memory byte DS:[(E)BX + unsigned AL]\nD7    XLATB      5     Set AL to memory byte DS:[(E)BX + unsigned AL]\n\n\nOperation\n\nIF AddressSize = 16\nTHEN\n   AL \u001b (BX + ZeroExtend(AL))\nELSE (* AddressSize = 32 *)\n   AL \u001b (EBX + ZeroExtend(AL));\nFI;\n\nDescription\n\nXLAT changes the AL register from the table index to the table entry. AL\nshould be the unsigned index into a table addressed by DS:BX (for an\naddress-size attribute of 16 bits) or DS:EBX (for an address-size attribute\nof 32 bits).\n\nThe operand to XLAT allows for the possibility of a segment override. XLAT\nuses the contents of BX even if they differ from the offset of the operand.\nThe offset of the operand should have been moved intoBX/EBX with a previous\ninstruction.\n\nThe no-operand form, XLATB, can be used if the BX/EBX table will always\nreside in the DS segment.\n\nFlags Affected\n\nNone\n\nProtected Mode Exceptions\n\n#GP(0) for an illegal memory operand effective address in the CS, DS, ES,\nFS, or GS segments; #SS(0) for an illegal address in the SS segment;\n#PF(fault-code) for a page fault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page fault\n\n\nXOR  Logical Exclusive OR\n\n\nOpcode      Instruction      Clocks   Description\n\n34  ib      XOR AL,imm8      2        Exclusive-OR immediate byte to AL\n35  iw      XOR AX,imm16     2        Exclusive-OR immediate word to AX\n35  id      XOR EAX,imm32    2        Exclusive-OR immediate dword to EAX\n80  /6 ib   XOR r/m8,imm8    2/7      Exclusive-OR immediate byte to r/m\n                                      byte\n81  /6 iw   XOR r/m16,imm16  2/7      Exclusive-OR immediate word to r/m\n                                      word\n81  /6 id   XOR r/m32,imm32  2/7      Exclusive-OR immediate dword to r/m\n                                      dword\n83  /6 ib   XOR r/m16,imm8   2/7      XOR sign-extended immediate byte\n                                      with r/m word\n83  /6 ib   XOR r/m32,imm8   2/7      XOR sign-extended immediate byte\n                                      with r/m dword\n30  /r      XOR r/m8,r8      2/6      Exclusive-OR byte register to r/m\n                                      byte\n31  /r      XOR r/m16,r16    2/6      Exclusive-OR word register to r/m\n                                      word\n31  /r      XOR r/m32,r32    2/6      Exclusive-OR dword register to r/m\n                                      dword\n32  /r      XOR r8,r/m8      2/7      Exclusive-OR byte register to r/m\n                                      byte\n33  /r      XOR r16,r/m16    2/7      Exclusive-OR word register to r/m\n                                      word\n33  /r      XOR r32,r/m32    2/7      Exclusive-OR dword register to r/m\n                                      dword\n\n\nOperation\n\nDEST \u001b LeftSRC XOR RightSRC\nCF \u001b 0\nOF \u001b 0\n\nDescription\n\nXOR computes the exclusive OR of the two operands. Each bit of the result\nis 1 if the corresponding bits of the operands are different; each bit is 0\nif the corresponding bits are the same. The answer replaces the first\noperand.\n\nFlags Affected\n\nCF = 0, OF = 0; SF, ZF, and PF as described in Appendix C; AF is undefined\n\nProtected Mode Exceptions\n\n#GP(0) if the result is in a nonwritable segment; #GP(0) for an illegal\nmemory operand effective address in the CS, DS, ES, FS, or GS segments;\n#SS(0) for an illegal address in the SS segment; #PF(fault-code) for a page\nfault\n\nReal Address Mode Exceptions\n\nInterrupt 13 if any part of the operand would lie outside of the effective\naddress space from 0 to 0FFFFH\n\nVirtual 8086 Mode Exceptions\n\nSame exceptions as in Real Address Mode; #PF(fault-code) for a page\nfault\n\n\nAppendix A  Opcode Map\n\n\n\nThe opcode tables that follow aid in interpreting 80386 object code. Use\nthe high-order four bits of the opcode as an index to a row of the opcode\ntable; use the low-order four bits as an index to a column of the table. If\nthe opcode is 0FH, refer to the two-byte opcode table and use the second\nbyte of the opcode to index the rows and columns of that table.\n\n\nKey to Abbreviations\n\nOperands are identified by a two-character code of the form Zz. The first\ncharacter, an uppercase letter, specifies the addressing method; the second\ncharacter, a lowercase letter, specifies the type of operand.\n\n\nCodes for Addressing Method\n\nA  Direct address; the instruction has no modR/M byte; the address of the\n   operand is encoded in the instruction; no base register, index register,\n   or scaling factor can be applied; e.g., far JMP (EA).\n\nC  The reg field of the modR/M byte selects a control register; e.g., MOV\n   (0F20, 0F22).\n\nD  The reg field of the modR/M byte selects a debug register; e.g., MOV\n   (0F21,0F23).\n\nE  A modR/M byte follows the opcode and specifies the operand. The operand\n   is either a general register or a memory address. If it is a memory\n   address, the address is computed from a segment register and any of the\n   following values: a base register, an index register, a scaling factor,\n   a displacement.\n\nF  Flags Register.\n\nG  The reg field of the modR/M byte selects a general register; e.g., ADD\n   (00).\n\nI  Immediate data. The value of the operand is encoded in subsequent bytes\n   of the instruction.\n\nJ  The instruction contains a relative offset to be added to the\n   instruction pointer register; e.g., JMP short, LOOP.\n\nM  The modR/M byte may refer only to memory; e.g., BOUND, LES, LDS, LSS,\n   LFS, LGS.\n\nO  The instruction has no modR/M byte; the offset of the operand is coded as\n   a word or double word (depending on address size attribute) in the\n   instruction. No base register, index register, or scaling factor can be\n   applied; e.g., MOV (A0-A3).\n\nR  The mod field of the modR/M byte may refer only to a general register;\n   e.g., MOV (0F20-0F24, 0F26).\n\nS  The reg field of the modR/M byte selects a segment register; e.g., MOV\n   (8C,8E).\n\nT  The reg field of the modR/M byte selects a test register; e.g., MOV\n   (0F24,0F26).\n\nX  Memory addressed by DS:SI; e.g., MOVS, COMPS, OUTS, LODS, SCAS.\n\nY  Memory addressed by ES:DI; e.g., MOVS, CMPS, INS, STOS.\n\n\nCodes for Operant Type\n\na  Two one-word operands in memory or two double-word operands in memory,\n   depending on operand size attribute (used only by BOUND).\n\nb  Byte (regardless of operand size attribute)\n\nc  Byte or word, depending on operand size attribute.\n\nd  Double word (regardless of operand size attribute)\n\np  32-bit or 48-bit pointer, depending on operand size attribute.\n\ns  Six-byte pseudo-descriptor\n\nv  Word or double word, depending on operand size attribute.\n\nw  Word (regardless of operand size attribute)\n\n\nRegister Codes\n\nWhen an operand is a specific register encoded in the opcode, the register\nis identified by its name; e.g., AX, CL, or ESI. The name of the register\nindicates whether the register is 32-, 16-, or 8-bits wide. A register\nidentifier of the form eXX is used when the width of the register depends on\nthe operand size attribute; for example, eAX indicates that the AX register\nis used when the operand size attribute is 16 and the EAX register is used\nwhen the operand size attribute is 32.\n\n\nOne-Byte Opcode Map\n\n\n       0         1         2         3         4         5         6        7        8         9         A         B         C         D         E        F\n ͻ\n                               ADD                            PUSH     POP                               OR                              PUSH   2-byte \n0Ĵ                Ĵ                \n   Eb,Gb    Ev,Gv    Gb,Eb    Gv,Ev    AL,Ib   eAX,Iv     ES      ES     Eb,Gb    Ev,Gv    Gb,Eb    Gv,Ev    AL,Ib   eAX,Iv     CS    escape \n ͹\n                               ADC                            PUSH     POP                              SBB                              PUSH    POP   \n1Ĵ                Ĵ                \n   Eb,Gb    Ev,Gv    Gb,Eb    Gv,Ev    AL,Ib   eAX,Iv     SS      SS     Eb,Gb    Ev,Gv    Gb,Eb    Gv,Ev    AL,Ib   eAX,Iv     DS      DS   \n ͹\n                               AND                            SEG                                       SUB                              SEG           \n2Ĵ           DAA  Ĵ          DAS   \n   Eb,Gb    Ev,Gv    Gb,Eb    Gv,Ev    AL,Ib   eAX,Iv    =ES             Eb,Gb    Ev,Gv    Gb,Eb    Gv,Ev    AL,Ib   eAX,Iv    =CS           \n ͹\n                               XOR                            SEG                                       CMP                              SEG           \n3Ĵ           AAA  Ĵ          AAS   \n   Eb,Gb    Ev,Gv    Gb,Eb    Gv,Ev    AL,Ib   eAX,Iv    =SS             Eb,Gb    Ev,Gv    Gb,Eb    Gv,Ev    AL,Ib   eAX,Iv    =CS           \n ͹\n                                INC general register                                                        DEC general register                           \n4Ķ\n    eAX      eCX      eDX      eBX      eSP      eBP     eSI     eDI      eAX      eCX      eDX      eBX      eSP      eBP      eSI    eDI   \n ͹\n                                PUSH general register                                                   POP into general register                          \n5Ķ\n    eAX      eCX      eDX      eBX      eSP      eBP     eSI     eDI      eAX      eCX      eDX      eBX      eSP      eBP     eSI     eDI   \n ͹\n                     BOUND    ARPL      SEG      SEG    Operand Address  PUSH     IMUL     PUSH     IMUL     INSB    INSW/D   OUTSB  OUTSW/D \n6  PUSHA    POPA                                                                                                                             \n                     Gv,Ma    Ew,Rw     =FS      =GS     Size    Size     Ib     GvEvIv     Ib     GvEvIv    Yb,DX    Yb,DX   Dx,Xb   DX,Xv  \n ͹\n                     Short displacement jump of condition (Jb)                                   Short-displacement jump on condition(Jb)                  \n7Ķ\n    JO       JNO      JB       JNB      JZ      JNZ       JBE    JNBE     JS       JNS      JP       JNP      JL      JNL      JLE     JNLE  \n ͹\n   Immediate Grpl              Grpl          TEST              XCNG                        MOV                      MOV      LEA     MOV     POP   \n8Ĵ                  Ĵ                                  \n   Eb,Ib    Ev,Iv             Ev,Iv    Eb,Gb    Ev,Gv    Eb,Gb   Ev,Gv   Eb,Gb    Ev,Gv    Gb,Eb    Gv,Ev    Ew,Sw    Gv,M     Sw,Ew    Ev   \n ͹\n                        XCHG word or double-word register with eAX                               CALL              PUSHF    POPF                   \n9   NOP   Ĵ   CBW      CWD              WAIT                       SAHF    LAHF  \n             eCX      eDX      eBX      eSP      eBP     eSI     eDI                        Ap                Fv       Fv                    \n ͹\n                   MOV                    MOVSB   MOVSW/D  CMPSB  CMPSW/D        TEST          STOSB   STOSW/D   LODSB   LODSW/D  SCASB  SCASW/D \nAĴ                                  Ĵ                                                    \n   AL,Ob    eAX,Ov   Ob,AL    Ov,eAX   Xb,Yb    Xv,Yv    Xb,Yb   Xv,Yv   AL,Ib   eAX,Iv    Yb,AL    Yv,eAX   AL,Xb   eAX,Xv    AL,Xb eAX,Xv  \n ͹\n                        MOV immediate byte into byte register                         MOV immediate word or double into word or double register            \nBĶ\n     AL      CL       DL       BL       AH       CH       DH      BH      eAX      eCX      eDX      eBX      eSP      eBP      eSI    eDI   \n ͹\n     Shift Grp2           RET near        LES      LDS          MOV         ENTER                 RET far        INT      INT                    \nCĴ                  Ĵ           LEAVE  Ĵ                    INTO    IRET  \n   Eb,Ib    Ev,Iv      Iw              Gv,Mp    Gv,Mp    Eb,Ib   Ev,Iv   Iw,Ib              Iw                3       Ib                     \n ͹\n                Shift Grp2                                                                                                                             \nDĴ   AAM      AAD             XLAT                    ESC(Escape to coprocessor instruction set)                 \n    Eb,1    Ev,1     Eb,CL    Ev,CL                                                                                                                 \n ͹\n  LOOPNE    LOOPE     LOOP    JCXZ           IN                OUT          CALL               JNP                     IN                OUT       \nE                                    Ĵ         Ķ\n    Jb       Jb        Jb      Jb      AL,Ib   eAX,Ib    Ib,AL  Ib,eAX     Av      Jv       Ap       Jb      AL,DX   eAX,DX   DX,AL   DX,eAX \n ͹\n                               REP                          Unary Grp3                                                        INC/DEC Indirct \nF  LOCK              REPNE              HLT      CMC   Ĵ   CLC      STC      CLI      STI      CLD      STD                   \n                              REPE                        Eb      Ev                                                           Grp4    Grp5  \n ͼ\n\n\nTwo-Byte Opcode Map (first byte is 0FH)\n\n\n      0         1         2         3         4         5         6        7        8         9         A         B         C         D         E        F\n ͻ\n                      LAR      LSL                                                                                                           \n0  Grp6     Grp7                                         CLTS                                                                                \n                     Gw,Ew    Gv,Ew                                                                                                          \n ͹\n                                                                                                                                             \n1                                                                                                                                            \n                                                                                                                                             \n ͹\n    MOV      MOV      MOV      MOV      MOV               MOV                                                                                \n2                                                                                                                                            \n   Cd,Rd    Dd,Rd    Rd,Cd    Rd,Dd    Td,Rd             Rd,Td                                                                               \n ͹\n                                                                                                                                             \n3                                                                                                                                            \n                                                                                                                                             \n ͹\n                                                                                                                                             \n4                                                                                                                                            \n                                                                                                                                             \n ͹\n                                                                                                                                             \n5                                                                                                                                            \n                                                                                                                                             \n ͹\n                                                                                                                                             \n6                                                                                                                                            \n                                                                                                                                             \n ͹\n                                                                                                                                             \n7                                                                                                                                            \n                                                                                                                                             \n ͹\n                       Long-displacement jump on condition (Jv)                                Long-displacement jump on condition (Jv)                    \n8Ķ\n    JO       JNO      JB       JNB      JZ       JNZ      JBE    JNBE     JS       JNS      JP       JNP      JL       JNL      JLE    JNLE  \n ͹\n                               Byte Set on condition (Eb)                                                                                           \n9Ĵ  SETS     SETNS    SETP     SETNP    SETL     SETNL    SETLE  SETNLE \n   SETO     SETNO    SETB     SETNB    SETZ     SETNZ    SETBE  SETNBE                                                                       \n ͹\n   PUSH      POP               BT      SHLD     SHLD                     PUSH      POP               BTS     SHRD     SHRD             IMUL  \nA                                                                                                                                            \n    FS       FS               Ev,Gv   EvGvIb   EvGvCL                     GS       GS               Ev,Gv   EvGvIb   EvGvCL           Gv,Ev  \n ͹\n                      LSS      BTR      LFS      LGS         MOVZX                          Grp-8     BTC      BSF      BSR         MOVSX      \nB                                                      Ĵ                                                      Ķ\n                      Mp      Ev,Gv     Mp       Mp     Gv,Eb   Gv,Ew                      Ev,Ib    Ev,Gv    Gv,Ev    Gv,Ev    Gv,Eb   Gv,Ew  \n ͹\n                                                                                                                                             \nC                                                                                                                                            \n                                                                                                                                             \n ͹\n                                                                                                                                             \nD                                                                                                                                            \n                                                                                                                                             \n ͹\n                                                                                                                                             \nE                                                                                                                                            \n                                                                                                                                             \n ͹\n                                                                                                                                             \nF                                                                                                                                            \n                                                                                                                                             \n ͼ\n\n\nOpcodes determined by bits 5,4,3 of modR/M byte:\n\n     G                       Ŀ\n     r                         mod    nnn    R/M  \n     o                       \n     u\n     p   000     001     010     011     100     101     110     111\n      Ŀ\n     1  ADD    OR     ADC    SBB    AND    SUB    XOR    CMP  \n                                                              \n      Ĵ\n     2  ROL    ROR    RCL    RCR    SHL    SHR           SAR  \n                                                              \n      Ĵ\n     3 TEST           NOT    NEG    MUL   IMUL    DIV   IDIV  \n       Ib/Iv                      AL/eAX AL/eAX AL/eAX AL/eAX \n      Ĵ\n     4  INC    DEC                                            \n        Eb     Eb                                             \n      Ĵ\n     5  INC    DEC   CALL   CALL    JMP    JMP   PUSH         \n        Ev     Ev     Ev     eP     Ev     Ep     Ev          \n      \n\n\nOpcodes determined by bits 5,4,3 of modR/M byte:\n\n     G                       Ŀ\n     r                         mod    nnn    R/M  \n     o                       \n     u\n     p   000     001     010     011     100     101     110     111\n      Ŀ\n     6 SLDT    STR   LLDT    LTR   VERR   VERW                \n        Ew     Ew     Ew     Ew     Ew     Ew                 \n      Ĵ\n     7 SGDT   SIDT   LGDT   LIDT   SMSW          LMSW         \n        Ms     Ms     Ms      Ms    Ew            Ew          \n      Ĵ\n     8                              BT     BTS    BTR    BTC  \n                                                              \n      \n\n\nAppendix B  Complete Flag Cross-Reference\n\n\n\nKey to Codes\n\nT     = instruction tests flag\n\nM     = instruction modifies flag\n        (either sets or resets depending on operands)\n\n0     = instruction resets flag\n\n1     = instruction sets flag\n\n    = instruction's effect on flag is undefined\n\nR     = instruction restores prior value of flag\n\nblank = instruction does not affect flag\n\n\nInstruction            OF   SF   ZF   AF   PF   CF   TF   IF   DF   NT   RF\n\nAAA                             TM      M\nAAD                       M    M       M    \nAAM                       M    M       M    \nAAS                             TM      M\nADC                    M    M    M    M    M    TM\nADD                    M    M    M    M    M    M\nAND                    0    M    M       M    0\nARPL                             M\nBOUND\nBSF/BSR                      M          \nBT/BTS/BTR/BTC                        M\nCALL\nCBW\nCLC                                             0\nCLD                                                            0\nCLI                                                       0\nCLTS\nCMC                                             M\nCMP                    M    M    M    M    M    M\nCMPS                   M    M    M    M    M    M              T\nCWD\nDAA                       M    M    TM   M    TM\nDAS                       M    M    TM   M    TM\nDEC                    M    M    M    M    M\nDIV                                   \nENTER\nESC\nHLT\nIDIV                                  \nIMUL                   M                M\nIN\nINC                    M    M    M    M    M\nINS                                                            T\nINT                                                  0              0\nINTO                   T                             0              0\nIRET                   R    R    R    R    R    R    R    R    R    T\nJcond                  T    T    T    T    T\nJCXZ\nJMP\nLAHF\nLAR                              M\nLDS/LES/LSS/LFS/LGS\nLEA\nLEAVE\nLGDT/LIDT/LLDT/LMSW\nLOCK\nLODS                                                           T\nLOOP\nLOOPE/LOOPNE                     T\nLSL                              M\nLTR\nMOV\nMOV control, debug                    \nMOVS                                                           T\nMOVSX/MOVZX\nMUL                    M                M\nNEG                    M    M    M    M    M    M\nNOP\nNOT\nOR                     0    M    M       M    0\nOUT\nOUTS                                                           T\nPOP/POPA\nPOPF                   R    R    R    R    R    R    R    R    R    R\nPUSH/PUSHA/PUSHF\nRCL/RCR 1              M                        TM\nRCL/RCR count                                 TM\nREP/REPE/REPNE\nRET\nROL/ROR 1              M                        M\nROL/ROR count                                 M\nSAHF                        R    R    R    R    R\nSAL/SAR/SHL/SHR 1      M    M    M       M    M\nSAL/SAR/SHL/SHR count     M    M       M    M\nSBB                    M    M    M    M    M    TM\nSCAS                   M    M    M    M    M    M              T\nSET cond               T    T    T         T    T\nSGDT/SIDT/SLDT/SMSW\nSHLD/SHRD                 M    M       M    M\nSTC                                             1\nSTD                                                            1\nSTI                                                       1\nSTOS                                                           T\nSTR\nSUB                    M    M    M    M    M    M\nTEST                   0    M    M       M    0\nVERR/VERRW                       M\nWAIT\nXCHG\nXLAT\nXOR                    0    M    M       M    0\n\n\nAppendix C  Status Flag Summary\n\n\n\nStatus Flags' Functions\n\nBit  Name   Function\n\n 0   CF     Carry Flag  Set on high-order bit carry or borrow; cleared\n            otherwise.\n 2   PF     Parity Flag  Set if low-order eight bits of result contain\n            an even number of 1 bits; cleared otherwise.\n 4   AF     Adjust flag  Set on carry from or borrow to the low order\n            four bits of   AL; cleared otherwise. Used for decimal\n            arithmetic.\n 6   ZF     Zero Flag  Set if result is zero; cleared otherwise.\n 7   SF     Sign Flag  Set equal to high-order bit of result (0 is\n            positive, 1 if negative).\n11   OF     Overflow Flag  Set if result is too large a positive number\n            or too small a negative number (excluding sign-bit) to fit in\n            destination operand; cleared otherwise.\n\nKey to Codes\n\nT     = instruction tests flag\nM     = instruction modifies flag\n        (either sets or resets depending on operands)\n0     = instruction resets flag\n    = instruction's effect on flag is undefined\nblank = instruction does not affect flag\n\n\n\nInstruction            OF   SF   ZF   AF   PF   CF\nAAA                             TM      M\nAAS                             TM      M\nAAD                       M    M       M    \nAAM                       M    M       M    \nDAA                       M    M    TM   M    TM\nDAS                       M    M    TM   M    TM\nADC                    M    M    M    M    M    TM\nADD                    M    M    M    M    M    M\nSBB                    M    M    M    M    M    TM\nSUB                    M    M    M    M    M    M\nCMP                    M    M    M    M    M    M\nCMPS                   M    M    M    M    M    M\nSCAS                   M    M    M    M    M    M\nNEG                    M    M    M    M    M    M\nDEC                    M    M    M    M    M\nINC                    M    M    M    M    M\nIMUL                   M                M\nMUL                    M                M\nRCL/RCR 1              M                        TM\nRCL/RCR count                                 TM\nROL/ROR 1              M                        M\nROL/ROR count                                 M\nSAL/SAR/SHL/SHR 1      M    M    M       M    M\nSAL/SAR/SHL/SHR count     M    M       M    M\nSHLD/SHRD                 M    M       M    M\nBSF/BSR                      M          \nBT/BTS/BTR/BTC                        M\nAND                    0    M    M       M    0\nOR                     0    M    M       M    0\nTEST                   0    M    M       M    0\nXOR                    0    M    M       M    0\n\n\nAppendix D  Condition Codes\n\n\n\n\nNote:\n  The terms \"above\" and \"below\" refer to the relation between two\n  unsigned values (neither SF nor OF is tested). The terms \"greater\" and\n  \"less\" refer to the relation between two signed values (SF and OF are\n  tested).\n\n\nDefinition of Conditions\n\n(For conditional instructions Jcond, and SETcond)\n\n\n                                       Instruction  Condition\nMnemonic  Meaning                      Subcode      Tested\n\nO         Overflow                     0000         OF = 1\n\nNO        No overflow                  0001         OF = 0\n\nB         Below\nNAE       Neither above nor equal      0010         CF = 1\n\nNB        Not below\nAE       Above or equal                0011         CF = 0\n\nE         Equal\nZ         Zero                         0100         ZF = 1\n\nNE        Not equal\nNZ        Not zero                     0101         ZF = 0\n\nBE        Below or equal\nNA        Not above                    0110         (CF or ZF) = 1\n\nNBE       Neither below nor equal\nNA        Above                        0111         (CF or ZF) = 0\n\nS         Sign                         1000         SF = 1\n\nNS        No sign                      1001         SF = 0\n\nP         Parity\nPE        Parity even                  1010         PF = 1\n\nNP        No parity\nPO        Parity odd                   1011         PF = 0\n\nL         Less\nNGE       Neither greater nor equal    1100         (SF xor OF) = 1\n\nNL        Not less\nGE        Greater or equal             1101         (SF xor OF) = 0\n\nLE        Less or equal\nNG        Not greater                  1110         ((SF xor OF) or ZF) = 1\n\nNLE       Neither less nor equal\nG         Greater                      1111         ((SF xor OF) or ZF) = 0\n"
  },
  {
    "path": "benchmarks/record/aarch64/2023-08-17.csv",
    "content": "name,model,rebar_version,engine,engine_version,err,haystack_len,iters,total,median,mad,mean,stddev,min,max\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,6322,4.56s,473.17us,1.00ns,474.49us,3.97us,472.50us,515.33us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,5955,4.56s,502.33us,1.00ns,503.76us,3.99us,501.62us,538.58us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,6144,4.56s,487.04us,1.00ns,488.25us,4.32us,484.04us,528.88us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,6196,4.56s,482.96us,1.00ns,484.18us,4.04us,481.62us,534.50us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,7710,4.56s,387.67us,1.00ns,389.05us,4.04us,384.38us,426.04us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,5001,4.51s,471.38us,1.00ns,599.83us,7.88ms,467.83us,557.84ms\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,5891,4.56s,507.67us,1.00ns,509.28us,4.21us,507.04us,547.75us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,5921,4.56s,505.17us,1.00ns,506.61us,4.27us,503.75us,543.50us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,7806,4.56s,381.92us,1.00ns,384.29us,7.81us,377.25us,480.29us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,5813,4.56s,514.71us,1.00ns,516.12us,4.29us,513.38us,572.12us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,3430,4.56s,872.88us,1.00ns,874.74us,5.70us,866.79us,913.42us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,3038,4.56s,0.99ms,1.00ns,0.99ms,6.48us,0.98ms,1.04ms\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,4498,4.56s,664.58us,1.00ns,666.93us,5.14us,664.25us,718.58us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,3377,4.56s,887.17us,1.00ns,888.37us,5.96us,882.33us,933.75us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,3208,4.56s,933.46us,1.00ns,935.26us,5.81us,929.46us,0.97ms\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,2940,4.56s,1.02ms,1.00ns,1.02ms,109.72us,1.01ms,6.95ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,2504,4.90s,1.16ms,1.00ns,1.20ms,365.08us,1.15ms,15.85ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,2068,4.56s,1.45ms,1.00ns,1.45ms,8.63us,1.44ms,1.51ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,3186,4.56s,939.77us,20.01ns,941.70us,5.77us,935.67us,0.99ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,2615,4.56s,1.14ms,1.00ns,1.15ms,6.54us,1.14ms,1.21ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,2408,4.56s,1.24ms,21.00ns,1.25ms,7.12us,1.24ms,1.29ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,2281,4.56s,1.31ms,1.00ns,1.32ms,7.25us,1.31ms,1.38ms\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,1.23s,292.00ns,1.00ns,296.00ns,69.00ns,208.00ns,18.50us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,1.04s,167.00ns,1.00ns,175.00ns,55.00ns,83.00ns,18.79us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.05s,167.00ns,1.00ns,176.00ns,46.00ns,83.00ns,17.54us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,1.05s,167.00ns,1.00ns,179.00ns,66.00ns,83.00ns,25.21us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.22s,291.00ns,1.00ns,274.00ns,78.00ns,166.00ns,24.62us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,1.11s,208.00ns,1.00ns,193.00ns,59.00ns,83.00ns,24.46us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.11s,208.00ns,1.00ns,204.00ns,61.00ns,83.00ns,24.12us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.10s,208.00ns,1.00ns,204.00ns,58.00ns,83.00ns,23.17us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.17s,250.01ns,1.00ns,232.00ns,72.00ns,125.00ns,24.83us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,1.17s,209.00ns,1.00ns,222.00ns,51.00ns,125.00ns,18.88us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,1.22s,291.00ns,1.00ns,274.00ns,74.00ns,166.00ns,24.88us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,1.17s,291.00ns,1.00ns,277.00ns,76.00ns,166.00ns,22.88us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.23s,292.00ns,1.00ns,292.00ns,71.00ns,167.00ns,24.88us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,1.22s,250.01ns,1.00ns,264.00ns,70.01ns,166.00ns,24.79us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,1.35s,333.00ns,1.00ns,324.00ns,85.00ns,208.00ns,20.67us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,1.41s,333.00ns,1.00ns,343.00ns,79.00ns,250.01ns,25.54us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,1.65s,459.00ns,1.00ns,484.00ns,2.72us,375.00ns,2.72ms\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,2.15s,417.00ns,1.00ns,477.00ns,15.98us,291.00ns,15.67ms\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.41s,333.00ns,1.00ns,338.00ns,75.00ns,250.01ns,24.62us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,1.40s,375.00ns,1.00ns,360.01ns,93.00ns,250.01ns,25.42us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,1.64s,500.01ns,1.00ns,483.00ns,101.00ns,375.00ns,25.50us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.66s,500.01ns,1.00ns,482.00ns,95.00ns,375.00ns,31.42us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,811.99ms,42.00ns,1.00ns,52.00ns,26.00ns,1.00ns,9.29us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,752.47ms,42.00ns,1.00ns,33.00ns,33.00ns,1.00ns,20.29us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,743.99ms,41.00ns,1.00ns,30.01ns,30.01ns,1.00ns,16.79us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,747.87ms,41.00ns,1.00ns,31.00ns,30.01ns,1.00ns,15.58us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,750.49ms,41.00ns,1.00ns,28.00ns,20.01ns,1.00ns,209.00ns\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,677.45ms,42.00ns,1.00ns,32.00ns,21.00ns,1.00ns,7.42us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,687.14ms,42.00ns,1.00ns,43.00ns,27.00ns,1.00ns,13.92us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,746.84ms,42.00ns,1.00ns,44.00ns,10.01ns,1.00ns,1.38us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,752.65ms,41.00ns,1.00ns,28.00ns,27.00ns,1.00ns,13.67us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,744.48ms,42.00ns,1.00ns,44.00ns,31.00ns,1.00ns,14.25us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,238275,4.69s,12.50us,1.00ns,12.54us,484.00ns,12.38us,42.46us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,130179,4.62s,22.29us,1.00ns,23.00us,1.57us,21.04us,56.54us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,127337,4.63s,23.38us,1.00ns,23.51us,0.95us,22.54us,54.58us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,126113,4.61s,23.50us,1.00ns,23.74us,1.28us,21.54us,50.88us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,15638,4.56s,181.21us,1.00ns,191.78us,18.70us,169.71us,274.38us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,114092,4.62s,25.54us,1.00ns,26.24us,1.58us,23.88us,60.58us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,131591,4.62s,22.00us,1.00ns,22.75us,1.52us,21.04us,54.96us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,130813,4.63s,22.17us,1.00ns,22.88us,1.56us,21.04us,54.58us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,15269,4.56s,193.79us,1.00ns,196.42us,16.87us,169.75us,280.17us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,126900,4.63s,23.42us,1.00ns,23.59us,1.45us,21.08us,57.50us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,58542,4.56s,51.04us,1.00ns,51.20us,1.33us,50.38us,90.17us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,58518,4.56s,51.04us,1.00ns,51.22us,1.36us,50.33us,103.12us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,10259,4.53s,226.46us,1.00ns,292.38us,5.64ms,226.29us,571.56ms\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,56705,4.55s,52.71us,1.00ns,52.86us,1.32us,52.00us,90.75us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,58084,4.56s,51.17us,1.00ns,51.60us,1.71us,50.33us,88.46us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,62290,4.56s,47.83us,1.00ns,48.11us,1.53us,47.67us,96.75us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,43238,4.56s,69.04us,1.00ns,69.33us,1.57us,68.54us,111.38us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,41904,4.56s,71.33us,1.00ns,71.54us,1.56us,69.12us,103.50us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,10303,4.56s,290.21us,1.00ns,291.15us,3.20us,289.96us,325.00us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,42836,4.56s,69.58us,1.00ns,69.98us,1.76us,69.21us,112.00us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,44954,4.56s,66.38us,1.00ns,66.69us,1.65us,65.29us,98.25us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,50190,4.56s,59.58us,1.00ns,59.72us,1.42us,58.79us,91.42us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,686.67ms,41.00ns,1.00ns,21.00ns,25.00ns,1.00ns,9.58us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,688.86ms,41.00ns,1.00ns,30.01ns,31.00ns,1.00ns,14.17us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,688.06ms,42.00ns,1.00ns,33.00ns,31.00ns,1.00ns,21.21us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,688.48ms,42.00ns,1.00ns,34.00ns,40.01ns,1.00ns,24.29us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.11s,209.00ns,1.00ns,230.01ns,74.00ns,125.00ns,31.92us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,1.31s,42.00ns,1.00ns,34.00ns,23.00ns,1.00ns,12.04us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,758.46ms,42.00ns,1.00ns,32.00ns,68.00ns,1.00ns,57.75us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,688.24ms,42.00ns,1.00ns,32.00ns,29.00ns,1.00ns,14.12us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.17s,209.00ns,1.00ns,227.00ns,70.01ns,125.00ns,23.96us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,745.53ms,42.00ns,1.00ns,32.00ns,33.00ns,1.00ns,24.08us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,752.88ms,83.00ns,1.00ns,64.00ns,36.00ns,1.00ns,16.50us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,752.77ms,83.00ns,1.00ns,65.00ns,40.01ns,1.00ns,22.62us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.23s,250.01ns,1.00ns,269.00ns,72.00ns,166.00ns,20.67us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,801.15ms,83.00ns,1.00ns,73.00ns,37.00ns,1.00ns,16.67us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,744.58ms,83.00ns,1.00ns,65.00ns,34.00ns,1.00ns,17.29us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,812.92ms,83.00ns,1.00ns,65.00ns,35.00ns,1.00ns,16.54us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,874.20ms,83.00ns,1.00ns,88.00ns,42.00ns,1.00ns,23.88us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,867.94ms,83.00ns,1.00ns,88.00ns,39.00ns,1.00ns,22.50us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.34s,333.00ns,1.00ns,341.00ns,84.00ns,250.01ns,25.71us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,812.73ms,83.00ns,1.00ns,92.00ns,37.00ns,1.00ns,17.21us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,809.42ms,83.00ns,1.00ns,85.00ns,33.00ns,1.00ns,16.42us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,807.25ms,83.00ns,1.00ns,85.00ns,38.00ns,1.00ns,23.12us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,682.20ms,1.00ns,0.01ns,15.00ns,20.01ns,1.00ns,167.00ns\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,679.63ms,1.00ns,0.01ns,17.00ns,22.00ns,1.00ns,6.75us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,688.27ms,1.00ns,0.01ns,16.00ns,22.00ns,1.00ns,4.88us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,680.98ms,1.00ns,0.01ns,17.00ns,31.00ns,1.00ns,21.17us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,688.87ms,41.00ns,1.00ns,28.00ns,29.00ns,1.00ns,14.17us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,689.67ms,1.00ns,0.01ns,16.00ns,22.00ns,1.00ns,7.12us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,688.76ms,1.00ns,0.01ns,16.00ns,26.00ns,1.00ns,12.04us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,686.04ms,1.00ns,0.01ns,16.00ns,24.00ns,1.00ns,9.75us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,745.44ms,41.00ns,1.00ns,27.00ns,31.00ns,1.00ns,15.75us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,680.02ms,1.00ns,0.01ns,15.00ns,27.00ns,1.00ns,15.25us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,69,1000000,688.37ms,1.00ns,0.01ns,16.00ns,24.00ns,1.00ns,10.21us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,680.97ms,1.00ns,0.01ns,17.00ns,23.00ns,1.00ns,6.83us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,69,1000000,750.88ms,42.00ns,1.00ns,36.00ns,28.00ns,1.00ns,14.17us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,69,1000000,683.42ms,1.00ns,0.01ns,16.00ns,23.00ns,1.00ns,7.54us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,69,1000000,688.14ms,1.00ns,0.01ns,16.00ns,28.00ns,1.00ns,16.62us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,69,1000000,686.85ms,1.00ns,0.01ns,16.00ns,25.00ns,1.00ns,11.75us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,69,1000000,687.25ms,1.00ns,0.01ns,17.00ns,26.00ns,1.00ns,9.46us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,686.42ms,1.00ns,0.01ns,16.00ns,28.00ns,1.00ns,19.54us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,69,1000000,743.08ms,42.00ns,1.00ns,45.00ns,24.00ns,1.00ns,14.25us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,69,1000000,687.88ms,1.00ns,0.01ns,17.00ns,22.00ns,1.00ns,6.79us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,69,1000000,683.91ms,1.00ns,0.01ns,17.00ns,28.00ns,1.00ns,16.38us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,69,1000000,677.86ms,1.00ns,0.01ns,17.00ns,22.00ns,1.00ns,7.12us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,,1000000,685.87ms,1.00ns,0.01ns,15.00ns,22.00ns,1.00ns,7.12us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,,1000000,689.35ms,1.00ns,0.01ns,15.00ns,20.01ns,1.00ns,125.00ns\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,,1000000,680.91ms,1.00ns,0.01ns,15.00ns,29.00ns,1.00ns,15.67us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,,1000000,678.48ms,1.00ns,0.01ns,15.00ns,30.01ns,1.00ns,21.17us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,,1000000,688.75ms,1.00ns,0.01ns,15.00ns,29.00ns,1.00ns,19.58us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,,1000000,689.30ms,1.00ns,0.01ns,15.00ns,23.00ns,1.00ns,9.92us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,,1000000,628.70ms,1.00ns,0.01ns,15.00ns,21.00ns,1.00ns,6.92us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,,1000000,688.06ms,1.00ns,0.01ns,15.00ns,24.00ns,1.00ns,9.29us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,,1000000,679.01ms,1.00ns,0.01ns,15.00ns,22.00ns,1.00ns,6.79us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,,1000000,684.55ms,1.00ns,0.01ns,15.00ns,23.00ns,1.00ns,6.96us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,,1000000,687.15ms,1.00ns,0.01ns,15.00ns,24.00ns,1.00ns,9.58us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,,1000000,677.28ms,1.00ns,0.01ns,15.00ns,20.01ns,1.00ns,167.00ns\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,,1000000,687.71ms,1.00ns,0.01ns,15.00ns,21.00ns,1.00ns,7.92us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,,1000000,686.67ms,1.00ns,0.01ns,15.00ns,21.00ns,1.00ns,6.88us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,,1000000,619.78ms,1.00ns,0.01ns,15.00ns,24.00ns,1.00ns,9.83us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,,1000000,626.59ms,1.00ns,0.01ns,15.00ns,20.01ns,1.00ns,1.42us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,,1000000,687.16ms,1.00ns,0.01ns,15.00ns,22.00ns,1.00ns,7.04us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,,1000000,691.74ms,1.00ns,0.01ns,15.00ns,21.00ns,1.00ns,4.75us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,,1000000,688.35ms,1.00ns,0.01ns,15.00ns,28.00ns,1.00ns,16.96us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,,1000000,680.96ms,1.00ns,0.01ns,15.00ns,28.00ns,1.00ns,15.29us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,,1000000,678.48ms,1.00ns,0.01ns,15.00ns,25.00ns,1.00ns,9.83us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,,1000000,688.19ms,1.00ns,0.01ns,15.00ns,22.00ns,1.00ns,9.38us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,159236,4.64s,14.58us,1.00ns,18.79us,1.42ms,14.42us,564.72ms\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,111720,4.62s,26.12us,1.00ns,26.80us,1.20us,25.29us,61.62us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,114800,4.63s,25.96us,1.00ns,26.08us,876.00ns,25.67us,60.25us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,114360,4.63s,25.58us,1.00ns,26.18us,1.34us,25.12us,63.75us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,14440,4.56s,206.42us,1.00ns,207.71us,10.28us,180.08us,258.62us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,99403,4.63s,30.04us,1.00ns,30.13us,1.02us,26.88us,60.33us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,110971,4.62s,26.92us,1.00ns,26.98us,801.00ns,26.17us,57.54us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,111376,4.62s,26.83us,1.00ns,26.88us,810.01ns,25.96us,75.04us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,108230,4.63s,27.58us,1.00ns,27.67us,863.00ns,26.83us,58.54us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,49994,4.56s,59.96us,1.00ns,59.96us,1.55us,56.17us,91.46us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,42527,4.66s,59.67us,1.00ns,73.04us,2.74ms,56.46us,566.06ms\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,11182,4.55s,267.62us,1.00ns,268.25us,3.16us,256.62us,300.58us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,46672,4.56s,64.17us,1.00ns,64.23us,3.67us,57.58us,99.75us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,49229,4.55s,60.75us,1.00ns,60.89us,2.00us,58.17us,136.79us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,49838,4.55s,60.00us,1.00ns,60.15us,3.83us,53.08us,127.42us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,37103,4.56s,80.62us,1.00ns,80.80us,1.74us,78.75us,118.33us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,36946,4.56s,80.96us,1.00ns,81.15us,1.75us,78.83us,120.92us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,10165,4.56s,294.21us,1.00ns,295.10us,3.26us,294.04us,331.38us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,34919,4.56s,85.75us,1.00ns,85.86us,2.22us,82.04us,140.00us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,37812,4.56s,79.12us,1.00ns,79.29us,1.66us,77.21us,115.88us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,38178,4.56s,78.42us,1.00ns,78.53us,2.04us,73.33us,122.79us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,742.97ms,41.00ns,1.00ns,21.00ns,24.00ns,1.00ns,10.67us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,751.24ms,42.00ns,1.00ns,33.00ns,32.00ns,1.00ns,16.38us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.39s,42.00ns,1.00ns,65.00ns,5.58us,1.00ns,4.15ms\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,688.73ms,42.00ns,1.00ns,43.00ns,866.00ns,1.00ns,647.62us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.17s,250.01ns,1.00ns,244.00ns,72.00ns,125.00ns,25.33us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,752.84ms,42.00ns,1.00ns,35.00ns,20.01ns,1.00ns,6.96us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,746.68ms,42.00ns,1.00ns,33.00ns,30.01ns,1.00ns,16.58us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,747.18ms,42.00ns,1.00ns,33.00ns,22.00ns,1.00ns,9.88us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.17s,250.01ns,1.00ns,236.00ns,59.00ns,125.00ns,24.21us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,742.44ms,42.00ns,1.00ns,33.00ns,22.00ns,1.00ns,9.42us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,813.08ms,83.00ns,1.00ns,69.00ns,40.01ns,1.00ns,16.38us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,806.96ms,83.00ns,1.00ns,69.00ns,34.00ns,1.00ns,16.33us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.17s,292.00ns,1.00ns,286.00ns,73.00ns,166.00ns,24.75us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,745.62ms,83.00ns,1.00ns,76.00ns,30.01ns,1.00ns,16.46us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,811.77ms,83.00ns,1.00ns,72.00ns,33.00ns,1.00ns,16.21us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,812.16ms,83.00ns,1.00ns,70.01ns,39.00ns,1.00ns,16.46us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,864.97ms,84.00ns,1.00ns,95.00ns,46.00ns,1.00ns,23.54us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,866.94ms,84.00ns,1.00ns,95.00ns,52.00ns,1.00ns,29.29us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.41s,375.00ns,1.00ns,378.00ns,89.00ns,250.01ns,24.54us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,867.38ms,84.00ns,1.00ns,103.00ns,37.00ns,1.00ns,14.12us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,867.10ms,84.00ns,1.00ns,97.00ns,46.00ns,1.00ns,17.12us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,864.11ms,84.00ns,1.00ns,99.00ns,40.01ns,1.00ns,17.04us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,689.19ms,1.00ns,0.01ns,17.00ns,30.01ns,1.00ns,21.38us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,687.11ms,1.00ns,0.01ns,17.00ns,38.00ns,1.00ns,23.42us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,687.72ms,1.00ns,0.01ns,17.00ns,31.00ns,1.00ns,17.00us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,694.02ms,1.00ns,0.01ns,17.00ns,32.00ns,1.00ns,21.12us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,679.85ms,41.00ns,1.00ns,27.00ns,27.00ns,1.00ns,9.83us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,742.34ms,1.00ns,0.01ns,17.00ns,26.00ns,1.00ns,12.00us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,688.14ms,1.00ns,0.01ns,17.00ns,26.00ns,1.00ns,16.12us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,681.18ms,1.00ns,0.01ns,17.00ns,24.00ns,1.00ns,9.83us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,743.13ms,41.00ns,1.00ns,28.00ns,37.00ns,1.00ns,22.12us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,689.84ms,1.00ns,0.01ns,17.00ns,21.00ns,1.00ns,4.83us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,69,1000000,741.66ms,1.00ns,0.01ns,17.00ns,24.00ns,1.00ns,10.29us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,686.95ms,1.00ns,0.01ns,18.00ns,29.00ns,1.00ns,16.96us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,69,1000000,751.25ms,42.00ns,1.00ns,37.00ns,25.00ns,1.00ns,16.58us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,69,1000000,687.35ms,1.00ns,0.01ns,17.00ns,25.00ns,1.00ns,9.29us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,69,1000000,685.48ms,1.00ns,0.01ns,18.00ns,22.00ns,1.00ns,7.00us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,69,1000000,682.42ms,1.00ns,0.01ns,18.00ns,28.00ns,1.00ns,16.46us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,69,1000000,749.65ms,1.00ns,0.01ns,18.00ns,34.00ns,1.00ns,22.58us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,740.28ms,1.00ns,0.01ns,18.00ns,25.00ns,1.00ns,9.33us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,69,1000000,753.65ms,42.00ns,1.00ns,44.00ns,33.00ns,1.00ns,15.71us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,69,1000000,690.37ms,1.00ns,0.01ns,18.00ns,24.00ns,1.00ns,10.04us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,69,1000000,682.36ms,1.00ns,0.01ns,19.00ns,24.00ns,1.00ns,9.38us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,69,1000000,685.44ms,1.00ns,0.01ns,18.00ns,29.00ns,1.00ns,16.50us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,29255,4.55s,102.17us,1.00ns,102.50us,1.80us,101.88us,141.04us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,28733,4.56s,103.33us,1.00ns,104.36us,2.10us,102.92us,148.04us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,29053,5.11s,100.42us,1.00ns,103.21us,40.55us,98.67us,6.98ms\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,32322,4.54s,92.17us,1.00ns,92.77us,1.99us,91.62us,141.08us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,12403,4.56s,240.75us,1.00ns,241.84us,4.54us,232.00us,289.04us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,28490,4.56s,104.83us,1.00ns,105.25us,1.93us,104.46us,136.92us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,30548,4.56s,97.83us,1.00ns,98.16us,1.82us,96.96us,132.29us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,27255,4.56s,109.71us,1.00ns,110.02us,1.89us,109.21us,143.96us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,12714,4.56s,234.79us,1.00ns,235.90us,4.15us,226.54us,273.25us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,26607,4.56s,112.42us,1.00ns,112.70us,1.80us,111.62us,151.29us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,12832,4.55s,233.04us,1.00ns,233.75us,2.97us,232.33us,270.79us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,12964,4.56s,230.54us,1.00ns,231.37us,2.88us,230.00us,271.83us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,9201,4.56s,325.04us,1.00ns,326.02us,3.42us,324.25us,371.25us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,9882,4.53s,237.62us,1.00ns,303.53us,5.59ms,223.96us,555.77ms\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,12121,4.56s,247.29us,1.00ns,247.47us,3.02us,245.38us,284.17us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,12261,4.56s,244.58us,1.00ns,244.64us,3.22us,240.25us,293.25us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,8113,4.56s,368.50us,1.00ns,369.73us,4.41us,366.83us,451.67us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,8718,4.54s,343.33us,1.00ns,344.07us,3.96us,340.17us,381.88us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,7277,4.56s,410.96us,1.00ns,412.22us,3.90us,410.54us,452.17us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,8095,4.56s,369.96us,1.00ns,370.56us,3.84us,367.08us,405.58us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,7792,4.56s,383.83us,1.00ns,385.00us,3.75us,383.12us,433.12us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,7866,4.56s,380.25us,1.00ns,381.36us,3.64us,379.29us,415.04us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,749.00ms,42.00ns,1.00ns,42.00ns,16.00ns,1.00ns,9.75us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,744.73ms,42.00ns,1.00ns,62.00ns,41.00ns,1.00ns,16.67us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,812.25ms,83.00ns,1.00ns,67.00ns,36.00ns,1.00ns,16.58us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,744.90ms,83.00ns,1.00ns,63.00ns,26.00ns,1.00ns,9.50us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.22s,292.00ns,1.00ns,317.00ns,73.00ns,166.00ns,22.42us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,741.17ms,42.00ns,1.00ns,58.00ns,38.00ns,1.00ns,23.46us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,747.83ms,83.00ns,1.00ns,65.00ns,33.00ns,1.00ns,15.71us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,802.95ms,83.00ns,1.00ns,66.00ns,42.00ns,1.00ns,17.50us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.17s,250.01ns,1.00ns,245.00ns,66.00ns,125.00ns,26.67us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,1.35s,42.00ns,1.00ns,62.00ns,46.00ns,1.00ns,20.92us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,929.67ms,125.00ns,1.00ns,106.00ns,62.00ns,1.00ns,26.46us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,868.26ms,84.00ns,1.00ns,103.00ns,47.00ns,1.00ns,24.25us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.35s,333.00ns,1.00ns,327.00ns,80.01ns,208.00ns,26.17us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,923.86ms,84.00ns,1.00ns,102.00ns,40.01ns,1.00ns,21.04us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,933.77ms,125.00ns,1.00ns,119.00ns,52.00ns,1.00ns,23.75us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,907.35ms,125.00ns,1.00ns,119.00ns,41.00ns,1.00ns,16.67us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,1.06s,167.00ns,1.00ns,170.01ns,57.00ns,83.00ns,24.50us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,0.99s,167.00ns,1.00ns,161.00ns,50.01ns,41.00ns,20.29us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.35s,334.00ns,1.00ns,353.00ns,86.00ns,250.01ns,24.92us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,0.99s,167.00ns,1.00ns,157.00ns,43.00ns,41.00ns,18.54us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,1.05s,167.00ns,1.00ns,184.00ns,40.01ns,83.00ns,18.67us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.05s,167.00ns,1.00ns,162.00ns,51.00ns,41.00ns,24.00us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,680.14ms,1.00ns,0.01ns,19.00ns,24.00ns,1.00ns,9.29us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,686.59ms,1.00ns,0.01ns,19.00ns,30.01ns,1.00ns,15.96us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,751.58ms,1.00ns,0.01ns,18.00ns,24.00ns,1.00ns,10.04us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,747.26ms,1.00ns,0.01ns,19.00ns,23.00ns,1.00ns,6.96us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,751.21ms,41.00ns,1.00ns,28.00ns,31.00ns,1.00ns,16.29us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,744.85ms,1.00ns,0.01ns,18.00ns,24.00ns,1.00ns,9.92us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,677.10ms,41.00ns,1.00ns,23.00ns,30.01ns,1.00ns,16.75us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,679.61ms,41.00ns,1.00ns,24.00ns,29.00ns,1.00ns,9.88us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,628.67ms,41.00ns,1.00ns,27.00ns,30.01ns,1.00ns,16.21us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,746.71ms,41.00ns,1.00ns,25.00ns,24.00ns,1.00ns,9.83us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,69,1000000,741.59ms,42.00ns,1.00ns,34.00ns,19.00ns,1.00ns,7.12us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,752.32ms,42.00ns,1.00ns,32.00ns,18.00ns,1.00ns,5.00us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,69,1000000,750.83ms,42.00ns,1.00ns,37.00ns,28.00ns,1.00ns,16.62us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,69,1000000,750.87ms,42.00ns,1.00ns,35.00ns,36.00ns,1.00ns,21.17us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,69,1000000,749.07ms,42.00ns,1.00ns,39.00ns,32.00ns,1.00ns,23.58us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,69,1000000,740.30ms,42.00ns,1.00ns,41.00ns,25.00ns,1.00ns,12.50us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,69,1000000,746.71ms,42.00ns,1.00ns,60.01ns,35.00ns,1.00ns,16.62us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,748.08ms,42.00ns,1.00ns,53.00ns,34.00ns,1.00ns,19.46us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,69,1000000,742.92ms,42.00ns,1.00ns,45.00ns,31.00ns,1.00ns,23.08us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,69,1000000,805.41ms,42.00ns,1.00ns,55.00ns,38.00ns,1.00ns,17.29us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,69,1000000,808.21ms,83.00ns,1.00ns,63.00ns,40.01ns,1.00ns,16.50us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,69,1000000,810.16ms,83.00ns,1.00ns,64.00ns,37.00ns,1.00ns,16.54us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,2846,4.55s,1.06ms,1.00ns,1.05ms,8.64us,1.04ms,1.11ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,3567,4.56s,838.46us,1.00ns,841.08us,14.75us,835.38us,1.09ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,3640,4.56s,821.50us,1.00ns,824.28us,5.81us,820.00us,868.17us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,3656,4.56s,818.62us,1.00ns,820.63us,6.32us,816.38us,0.95ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,4286,4.56s,697.79us,1.00ns,700.01us,5.12us,696.50us,743.88us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,3687,4.56s,812.12us,1.00ns,813.78us,5.24us,810.21us,857.46us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,3261,4.56s,917.12us,1.00ns,919.91us,6.03us,915.58us,0.97ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,2573,4.51s,917.54us,1.00ns,1.17ms,11.14ms,909.96us,566.12ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,4292,4.56s,696.79us,1.00ns,698.92us,5.29us,695.12us,747.21us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,3118,4.56s,0.96ms,1.00ns,0.96ms,5.91us,0.96ms,1.00ms\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,2.25s,750.01ns,1.00ns,768.00ns,122.00ns,666.00ns,29.50us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,1.35s,333.00ns,1.00ns,320.01ns,75.00ns,208.00ns,31.63us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.36s,333.00ns,1.00ns,316.00ns,79.00ns,208.00ns,32.08us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,1.35s,333.00ns,1.00ns,318.00ns,88.00ns,208.00ns,28.83us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.29s,291.00ns,1.00ns,282.00ns,97.00ns,166.00ns,36.83us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,1.36s,292.00ns,1.00ns,311.00ns,79.00ns,208.00ns,24.58us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.53s,417.00ns,1.00ns,419.00ns,81.00ns,333.00ns,31.00us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.54s,417.00ns,1.00ns,422.00ns,82.00ns,333.00ns,25.08us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.30s,291.00ns,1.00ns,278.00ns,85.00ns,166.00ns,26.58us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,1.54s,417.00ns,1.00ns,414.00ns,83.00ns,291.00ns,22.38us\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,33335253,59,4.56s,50.80ms,1.00ns,50.89ms,297.27us,50.65ms,51.95ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,33335253,32,4.62s,94.88ms,1.27us,94.90ms,57.32us,94.85ms,95.18ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,33335253,32,4.62s,94.86ms,875.00ns,94.87ms,23.15us,94.83ms,94.92ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,33335253,218,4.56s,13.69ms,500.01ns,13.77ms,165.52us,13.61ms,14.24ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,33335253,217,4.56s,13.73ms,1.00ns,13.85ms,471.94us,13.61ms,20.06ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/binary,2.5.0,,33335253,1829,4.57s,1.62ms,1.00ns,1.64ms,210.50us,1.56ms,7.65ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,33335253,255,4.56s,11.63ms,1.00ns,11.78ms,350.30us,11.44ms,13.08ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,33335253,63,4.62s,47.85ms,1.00ns,47.84ms,23.47us,47.79ms,47.89ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,33335253,152,4.62s,19.85ms,480.01ns,19.87ms,203.69us,19.61ms,21.51ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,33335253,150,4.56s,20.09ms,562.00ns,20.09ms,37.97us,20.02ms,20.17ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,33335253,150,4.56s,20.04ms,271.00ns,20.04ms,20.25us,19.99ms,20.10ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2523,4.56s,1.19ms,1.00ns,1.19ms,6.77us,1.19ms,1.26ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,1.00ns,3.93ms,10.39us,3.91ms,3.99ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.56s,3.92ms,1.00ns,3.93ms,10.07us,3.91ms,3.98ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,14055,4.56s,212.75us,1.00ns,213.40us,3.06us,210.42us,263.00us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,10874,4.52s,214.50us,1.00ns,275.84us,5.35ms,208.17us,558.43ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2860,4.55s,1.04ms,1.00ns,1.05ms,11.83us,1.03ms,1.12ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1271,4.56s,2.36ms,1.00ns,2.36ms,9.68us,2.35ms,2.41ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,3056,4.56s,0.98ms,1.00ns,0.98ms,7.21us,0.97ms,1.04ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,31352,4.55s,95.38us,1.00ns,95.63us,1.62us,95.17us,129.33us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,31387,4.56s,95.29us,1.00ns,95.53us,1.63us,95.08us,125.83us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,1648109,2653,4.56s,1.13ms,1.00ns,1.13ms,7.40us,1.12ms,1.17ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,1648109,2649,4.56s,1.13ms,1.00ns,1.13ms,7.72us,1.12ms,1.18ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2522,4.56s,1.19ms,1.00ns,1.19ms,6.34us,1.19ms,1.24ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,764,4.56s,3.92ms,21.00ns,3.93ms,10.79us,3.91ms,4.01ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,764,4.56s,3.92ms,21.00ns,3.93ms,53.24us,3.92ms,5.24ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,14064,4.56s,210.38us,1.00ns,213.26us,76.86us,207.33us,7.30ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,14230,4.55s,210.17us,1.00ns,210.77us,2.82us,207.29us,242.92us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3072,4.56s,0.97ms,1.00ns,0.98ms,13.33us,0.96ms,1.10ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1272,4.56s,2.36ms,1.00ns,2.36ms,9.14us,2.35ms,2.40ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,3056,4.56s,0.98ms,1.00ns,0.98ms,7.02us,0.97ms,1.03ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,30354,4.56s,98.50us,1.00ns,98.78us,1.65us,98.33us,135.17us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,30388,4.56s,98.38us,1.00ns,98.67us,1.72us,98.21us,134.96us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,1648109,2856,4.56s,1.05ms,1.00ns,1.05ms,6.56us,1.04ms,1.10ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,1648109,2854,4.56s,1.05ms,21.00ns,1.05ms,7.00us,1.04ms,1.09ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2527,4.56s,1.18ms,1.00ns,1.19ms,6.42us,1.18ms,1.24ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,597,4.53s,3.92ms,1.00ns,5.03ms,23.09ms,3.91ms,568.06ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.56s,3.92ms,1.00ns,3.92ms,9.63us,3.91ms,3.98ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,23855,4.56s,125.04us,1.00ns,125.71us,2.98us,121.29us,157.08us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,23479,4.56s,127.67us,1.00ns,127.72us,5.10us,121.08us,176.38us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3148,4.56s,939.25us,1.00ns,0.95ms,23.22us,930.08us,1.09ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1271,4.56s,2.36ms,1.00ns,2.36ms,9.33us,2.35ms,2.41ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,3057,4.56s,0.98ms,1.00ns,0.98ms,6.80us,0.97ms,1.04ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,29499,4.56s,101.33us,1.00ns,101.64us,1.83us,101.12us,200.00us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,29508,4.56s,101.33us,1.00ns,101.61us,1.67us,101.17us,137.96us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,1648109,2967,4.56s,1.01ms,1.00ns,1.01ms,7.92us,1.00ms,1.06ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,1648109,2966,4.56s,1.01ms,1.00ns,1.01ms,67.56us,1.00ms,4.18ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2721,4.55s,1.09ms,1.00ns,1.10ms,227.13us,1.09ms,12.42ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,1243,4.56s,2.41ms,1.00ns,2.41ms,8.43us,2.40ms,2.47ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,1243,4.56s,2.41ms,1.00ns,2.41ms,8.84us,2.40ms,2.47ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,12575,4.56s,239.04us,1.00ns,238.52us,4.70us,231.25us,386.00us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,12596,4.56s,237.54us,1.00ns,238.13us,2.92us,234.58us,275.17us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3191,4.56s,938.08us,1.00ns,940.13us,8.44us,926.46us,0.99ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1269,4.56s,2.36ms,1.00ns,2.36ms,9.06us,2.36ms,2.45ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,107740,4.63s,27.71us,1.00ns,27.80us,860.01ns,27.58us,58.33us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,107923,4.62s,27.67us,1.00ns,27.75us,806.00ns,27.54us,66.25us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,1648109,3027,4.55s,0.99ms,1.00ns,0.99ms,6.51us,0.98ms,1.05ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,1648109,2348,4.56s,0.99ms,1.00ns,1.28ms,11.65ms,0.98ms,565.24ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2522,4.56s,1.19ms,1.00ns,1.19ms,6.18us,1.19ms,1.23ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,1.00ns,3.93ms,9.49us,3.91ms,3.98ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,764,4.56s,3.92ms,21.00ns,3.93ms,9.78us,3.91ms,3.97ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,14936,4.56s,200.29us,1.00ns,200.80us,3.01us,196.92us,239.33us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,15147,4.56s,197.42us,1.00ns,198.01us,2.76us,195.29us,233.79us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2926,4.56s,1.02ms,1.00ns,1.03ms,9.17us,1.01ms,1.08ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1269,4.56s,2.36ms,1.00ns,2.37ms,9.50us,2.36ms,2.45ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,3019,4.56s,0.99ms,1.00ns,0.99ms,7.24us,0.98ms,1.05ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,1648109,2679,4.56s,1.12ms,1.00ns,1.12ms,6.58us,1.11ms,1.16ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,1648109,2578,5.01s,1.11ms,1.00ns,1.34ms,11.07ms,1.11ms,563.31ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2520,4.55s,1.19ms,1.00ns,1.19ms,6.12us,1.19ms,1.24ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,1.00ns,3.92ms,9.31us,3.91ms,3.98ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,764,4.56s,3.92ms,104.00ns,3.93ms,41.84us,3.91ms,4.41ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,5975,4.56s,501.17us,1.00ns,502.05us,4.29us,497.25us,546.42us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,6423,4.56s,465.79us,1.00ns,467.06us,4.21us,463.88us,527.25us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3392,4.56s,875.71us,1.00ns,884.46us,20.56us,872.42us,1.04ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1233,4.56s,2.43ms,1.00ns,2.43ms,8.81us,2.42ms,2.49ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,2921,4.56s,1.03ms,1.00ns,1.03ms,7.77us,1.01ms,1.08ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,1648109,2968,4.56s,1.01ms,20.01ns,1.01ms,6.54us,1.00ms,1.04ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,1648109,3021,4.56s,0.99ms,1.00ns,0.99ms,6.88us,0.99ms,1.12ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,5315,4.53s,439.08us,1.00ns,564.43us,7.81ms,436.33us,569.88ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,747,4.56s,4.01ms,1.00ns,4.02ms,9.54us,4.01ms,4.08ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,751,4.56s,4.00ms,1.00ns,4.00ms,14.84us,3.99ms,4.31ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,4207,4.56s,710.88us,1.00ns,713.09us,5.65us,708.75us,816.25us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,5208,4.56s,570.88us,1.00ns,575.98us,7.91us,562.92us,617.29us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2265,4.56s,1.32ms,1.00ns,1.33ms,7.29us,1.32ms,1.37ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1179,4.56s,2.54ms,1.00ns,2.55ms,9.04us,2.53ms,2.60ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,2461,4.55s,1.22ms,1.00ns,1.22ms,8.58us,1.21ms,1.26ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,1648109,1948,4.56s,1.54ms,1.00ns,1.54ms,6.84us,1.53ms,1.59ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,1648109,2137,4.56s,1.40ms,1.00ns,1.40ms,6.60us,1.40ms,1.44ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2119,4.56s,1.41ms,1.00ns,1.42ms,170.06us,1.41ms,9.19ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,726,4.55s,4.08ms,21.00ns,4.13ms,545.16us,4.07ms,17.40ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,737,4.56s,4.07ms,1.00ns,4.07ms,10.45us,4.06ms,4.19ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,3527,4.56s,849.71us,1.00ns,850.64us,6.27us,833.83us,896.62us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,4015,4.56s,745.54us,1.00ns,747.15us,5.28us,742.25us,803.42us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2841,4.56s,1.05ms,1.00ns,1.06ms,15.59us,1.05ms,1.22ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1220,4.56s,2.46ms,1.00ns,2.46ms,9.16us,2.45ms,2.51ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,2869,4.56s,1.05ms,1.00ns,1.05ms,8.06us,1.03ms,1.09ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,1648109,2531,4.56s,1.18ms,1.00ns,1.19ms,6.07us,1.18ms,1.23ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,1648109,2638,4.56s,1.14ms,1.00ns,1.14ms,6.41us,1.13ms,1.18ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,151305,20582,4.56s,145.29us,1.00ns,145.71us,2.09us,144.96us,178.29us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,151305,10725,4.55s,217.96us,1.00ns,279.68us,5.40ms,217.58us,559.31ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,151305,13722,4.56s,217.96us,1.00ns,218.58us,2.64us,217.62us,256.17us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,151305,23679,4.55s,126.62us,1.00ns,126.64us,2.25us,123.71us,164.42us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,151305,24864,4.55s,119.33us,1.00ns,120.61us,4.29us,115.92us,194.62us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,151305,207212,4.69s,14.33us,1.00ns,14.43us,624.00ns,13.83us,40.42us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,151305,13814,4.56s,216.50us,1.00ns,217.12us,2.71us,215.75us,257.08us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,151305,284042,4.69s,10.50us,1.00ns,10.51us,450.01ns,10.17us,36.25us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,286330,4.69s,10.42us,1.00ns,10.43us,451.00ns,10.08us,41.96us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,151305,186331,4.63s,15.96us,1.00ns,16.05us,603.00ns,15.46us,46.08us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,151305,186781,4.62s,15.92us,1.00ns,16.01us,609.00ns,15.42us,45.50us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,151305,20613,4.56s,145.08us,1.00ns,145.49us,2.12us,144.83us,181.67us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,151305,13718,4.56s,217.92us,1.00ns,218.65us,3.34us,217.62us,349.58us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,151305,13723,4.56s,217.92us,1.00ns,218.56us,2.76us,217.67us,259.38us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,151305,23136,4.56s,129.21us,1.00ns,129.62us,2.13us,128.54us,179.46us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,151305,24666,4.56s,121.83us,1.00ns,121.57us,2.29us,119.58us,159.33us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,151305,263406,4.69s,11.21us,1.00ns,11.34us,561.00ns,10.96us,40.38us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,151305,10771,4.55s,216.54us,1.00ns,278.48us,5.39ms,215.79us,559.94ms\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,151305,292827,4.75s,10.12us,1.00ns,10.20us,463.00ns,9.83us,51.46us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,287168,4.69s,10.38us,1.00ns,10.40us,453.00ns,10.12us,42.71us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,151305,246798,4.69s,12.04us,1.00ns,12.10us,531.00ns,11.67us,45.42us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,151305,245886,4.69s,12.08us,1.00ns,12.15us,616.00ns,11.50us,45.42us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,500100,10477,4.56s,285.46us,1.00ns,286.31us,3.10us,285.33us,330.04us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,500100,2621,4.55s,1.14ms,1.00ns,1.14ms,5.71us,1.14ms,1.19ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,500100,2620,4.55s,1.14ms,1.00ns,1.15ms,6.23us,1.14ms,1.20ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,500100,8379,4.56s,357.04us,1.00ns,358.01us,3.46us,356.83us,403.96us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,500100,8378,4.56s,356.96us,1.00ns,358.06us,3.57us,356.79us,397.08us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,500100,8684,4.71s,296.83us,1.00ns,363.50us,6.06ms,285.38us,564.70ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,500100,4185,4.55s,715.58us,1.00ns,716.87us,5.17us,713.50us,764.33us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,500100,10067,4.56s,297.08us,1.00ns,297.98us,3.49us,293.46us,333.83us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,500100,106585,4.63s,28.04us,1.00ns,28.10us,818.00ns,27.88us,59.08us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,500100,105990,4.62s,28.08us,1.00ns,28.25us,1.21us,27.88us,61.17us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,500100,6904,4.56s,431.71us,1.00ns,434.52us,7.29us,429.62us,497.38us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,500100,6618,4.56s,455.04us,1.00ns,453.31us,9.15us,430.08us,495.12us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,500100,8723,4.56s,342.83us,1.00ns,343.89us,3.64us,342.46us,407.42us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,500100,8252,4.56s,364.42us,1.00ns,363.49us,4.59us,356.88us,404.42us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,500100,8935,4.56s,335.79us,1.00ns,335.75us,5.27us,328.79us,373.00us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,500100,838,4.56s,3.57ms,1.00ns,3.58ms,105.92us,3.55ms,6.62ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,500100,6421,5.09s,451.62us,1.00ns,467.16us,180.13us,450.46us,11.88ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,500100,10170,4.56s,294.08us,1.00ns,294.94us,3.13us,293.67us,337.79us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,500100,12266,4.56s,242.67us,1.00ns,244.55us,4.85us,242.50us,290.62us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,500100,15664,4.56s,190.92us,1.00ns,191.48us,2.51us,190.79us,227.33us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,500100,1163,4.56s,2.58ms,1.00ns,2.58ms,8.11us,2.57ms,2.62ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,500100,8630,4.56s,346.92us,1.00ns,347.60us,3.39us,345.21us,382.79us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1001,1000000,1.89s,583.00ns,1.00ns,580.01ns,102.00ns,458.00ns,25.38us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,4.47s,2.29us,1.00ns,2.29us,310.01ns,2.17us,26.46us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,4.47s,2.29us,1.00ns,2.28us,140.01ns,2.17us,19.67us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1001,1000000,2.31s,833.00ns,1.00ns,824.00ns,58.00ns,708.00ns,17.17us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,2.18s,792.00ns,1.00ns,786.00ns,58.00ns,666.00ns,17.29us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.89s,583.00ns,1.00ns,597.00ns,84.00ns,500.01ns,24.08us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,3.45s,1.38us,1.00ns,1.39us,94.00ns,1.29us,25.04us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.83s,583.00ns,1.00ns,590.01ns,61.00ns,458.00ns,22.92us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1001,1000000,805.44ms,83.00ns,1.00ns,65.00ns,21.00ns,1.00ns,1.46us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1001,1000000,807.02ms,83.00ns,1.00ns,64.00ns,46.00ns,1.00ns,10.33us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,1001,1000000,2.48s,875.00ns,1.00ns,891.00ns,65.00ns,791.00ns,35.08us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,1001,1000000,2.49s,875.00ns,1.00ns,890.01ns,39.00ns,791.00ns,16.25us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1001,1000000,2.07s,708.00ns,1.00ns,693.00ns,34.00ns,583.00ns,15.50us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,2.19s,709.00ns,1.00ns,722.00ns,55.00ns,625.00ns,23.08us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,2.02s,667.00ns,1.00ns,663.00ns,30.01ns,541.00ns,16.62us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1001,439908,4.81s,6.75us,1.00ns,6.77us,124.00ns,6.62us,18.17us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,2.98s,1.12us,1.00ns,1.11us,34.00ns,1.00us,11.21us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.89s,584.00ns,1.00ns,603.00ns,28.00ns,500.01ns,10.50us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.71s,500.01ns,1.00ns,492.00ns,32.00ns,375.00ns,16.83us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.47s,416.00ns,1.00ns,402.00ns,70.01ns,291.00ns,16.08us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,1001,571922,4.88s,5.17us,1.00ns,5.20us,305.00ns,5.04us,36.42us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,1001,1000000,2.19s,750.01ns,1.00ns,737.00ns,93.00ns,625.00ns,23.42us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,550004,3244,4.56s,923.33us,1.00ns,924.97us,5.03us,922.33us,0.99ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,550004,2054,4.56s,1.46ms,1.00ns,1.46ms,70.11us,1.46ms,4.62ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,550004,1998,5.02s,1.46ms,1.00ns,1.50ms,474.68us,1.46ms,16.47ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,550004,23639,4.56s,120.25us,1.00ns,126.86us,12.96us,120.04us,179.00us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,550004,23614,4.56s,120.25us,1.00ns,127.00us,13.04us,120.04us,178.29us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,550004,23907,4.56s,118.08us,1.00ns,125.44us,12.04us,117.21us,166.50us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,550004,3818,4.56s,785.04us,1.00ns,785.90us,2.82us,784.71us,810.58us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,550004,9155,4.56s,327.25us,1.00ns,327.65us,2.27us,322.92us,362.33us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,550004,6364,4.56s,470.92us,1.00ns,471.42us,3.50us,470.54us,552.75us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,550004,6354,4.56s,470.83us,1.00ns,472.14us,3.91us,470.71us,520.50us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,550004,26175,4.56s,114.21us,1.00ns,114.56us,1.89us,114.12us,152.08us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,550004,26103,4.56s,114.21us,1.00ns,114.88us,2.06us,114.08us,149.29us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,720057,3488,4.56s,668.54us,1.00ns,860.07us,9.88ms,668.33us,584.26ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,720057,2889,4.56s,1.04ms,1.00ns,1.04ms,6.00us,1.04ms,1.09ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,720057,2888,4.55s,1.04ms,1.00ns,1.04ms,6.20us,1.04ms,1.13ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,720057,64510,4.58s,44.21us,1.00ns,46.45us,4.02us,44.04us,81.46us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,720057,68153,4.56s,43.71us,1.00ns,43.97us,1.47us,43.58us,77.83us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,720057,78400,4.56s,38.29us,1.00ns,38.21us,2.12us,35.50us,77.12us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,720057,2903,4.56s,1.03ms,1.00ns,1.03ms,9.44us,1.03ms,1.23ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,720057,10071,4.56s,297.21us,1.00ns,297.85us,2.84us,297.08us,366.54us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,9788,4.56s,305.54us,1.00ns,306.46us,3.24us,305.42us,350.92us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,720057,78879,4.56s,37.88us,1.00ns,37.98us,0.99us,37.75us,75.92us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,720057,79332,4.56s,37.62us,1.00ns,37.76us,12.70us,37.46us,3.60ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,720057,749,4.53s,3.94ms,1.00ns,4.01ms,595.28us,3.94ms,18.48ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,720057,760,4.56s,3.94ms,20.01ns,3.95ms,10.91us,3.94ms,4.02ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,720057,760,4.56s,3.94ms,21.00ns,3.95ms,10.63us,3.94ms,4.02ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,720057,3629,4.56s,823.12us,1.00ns,826.76us,9.75us,822.88us,0.96ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,720057,3646,4.56s,822.17us,1.00ns,822.97us,3.81us,822.00us,903.83us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,720057,4805,4.56s,616.54us,1.00ns,624.37us,19.80us,616.38us,771.04us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,720057,2907,4.56s,1.03ms,1.00ns,1.03ms,8.42us,1.03ms,1.15ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,720057,761,4.56s,3.94ms,1.00ns,3.95ms,17.36us,3.93ms,4.11ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,759,4.56s,3.95ms,1.00ns,3.95ms,10.74us,3.94ms,4.00ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,720057,3121,4.56s,0.96ms,1.00ns,0.96ms,5.45us,0.95ms,1.00ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,720057,3122,4.56s,0.96ms,1.00ns,0.96ms,5.86us,0.95ms,1.00ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,,157,4.56s,19.22ms,1.00ns,19.22ms,40.80us,19.09ms,19.31ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,,82,4.56s,36.58ms,167.00ns,36.59ms,23.98us,36.55ms,36.67ms\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1000,4497,4.56s,666.12us,1.00ns,667.19us,5.35us,655.83us,773.88us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1000,11218,4.56s,266.58us,1.00ns,267.38us,3.08us,265.04us,319.75us\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,806771,24,4.62s,127.56ms,1.56us,127.55ms,45.17us,127.44ms,127.62ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,806771,59,4.56s,50.99ms,1.00ns,50.99ms,20.57us,50.94ms,51.02ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,4315,4.56s,694.04us,1.00ns,695.33us,5.06us,689.79us,743.92us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1823,4.56s,1.64ms,1.00ns,1.65ms,7.32us,1.64ms,1.70ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1823,4.56s,1.64ms,1.00ns,1.65ms,7.28us,1.64ms,1.69ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,7061,4.56s,423.58us,1.00ns,424.83us,3.96us,422.12us,468.96us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,7512,4.56s,398.21us,1.00ns,399.32us,3.87us,397.17us,460.88us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,13227,4.56s,223.54us,1.00ns,226.76us,9.47us,212.46us,279.46us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3378,4.56s,885.58us,1.00ns,888.11us,5.45us,884.92us,931.25us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,7887,4.56s,379.25us,1.00ns,380.35us,4.19us,375.04us,419.29us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613345,11617,4.55s,257.08us,1.00ns,258.19us,6.90us,245.75us,303.04us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613345,12190,4.56s,244.67us,1.00ns,246.05us,6.77us,234.12us,291.46us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,5954,4.56s,502.29us,1.00ns,503.85us,4.13us,501.71us,547.71us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2002,4.55s,1.50ms,1.00ns,1.50ms,7.23us,1.49ms,1.55ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2002,4.56s,1.50ms,1.00ns,1.50ms,7.06us,1.49ms,1.55ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,8330,4.56s,359.12us,1.00ns,360.13us,3.62us,356.33us,397.96us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,11391,4.56s,262.62us,1.00ns,263.33us,2.98us,261.42us,297.58us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,10819,4.56s,274.08us,1.00ns,277.24us,10.94us,260.29us,342.25us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3307,4.56s,904.62us,1.00ns,907.23us,5.57us,903.50us,0.95ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,7234,4.56s,413.54us,1.00ns,414.66us,4.61us,409.83us,515.67us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613345,8306,4.55s,360.25us,1.00ns,361.17us,6.69us,349.96us,425.50us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613345,9808,4.56s,305.81us,20.01ns,305.86us,6.44us,295.21us,348.38us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,2814,4.56s,1.06ms,1.00ns,1.07ms,6.22us,1.06ms,1.11ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1366,4.56s,2.19ms,1.00ns,2.20ms,8.15us,2.19ms,2.25ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1399,4.56s,2.14ms,1.00ns,2.14ms,75.65us,2.13ms,4.15ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,1812,4.78s,1.60ms,1.00ns,1.66ms,558.06us,1.59ms,20.03ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,2582,4.56s,1.16ms,1.00ns,1.16ms,10.25us,1.13ms,1.39ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,3189,4.56s,939.00us,1.00ns,940.77us,9.83us,923.58us,1.08ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,2145,4.56s,1.40ms,1.00ns,1.40ms,10.06us,1.37ms,1.48ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,3290,4.56s,914.04us,1.00ns,911.91us,10.96us,897.54us,1.06ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613345,1803,4.56s,1.66ms,1.00ns,1.66ms,8.93us,1.65ms,1.72ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613345,2638,4.56s,1.13ms,1.00ns,1.14ms,6.66us,1.12ms,1.18ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,3016,4.56s,0.99ms,1.00ns,0.99ms,7.10us,0.99ms,1.11ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1628,4.56s,1.84ms,1.00ns,1.84ms,15.47us,1.83ms,2.11ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1628,4.56s,1.84ms,1.00ns,1.84ms,8.04us,1.83ms,1.89ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,6561,4.56s,455.88us,1.00ns,457.23us,4.32us,454.46us,511.54us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,7186,4.56s,416.21us,1.00ns,417.45us,4.26us,414.96us,450.54us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,6314,4.56s,472.71us,1.00ns,475.13us,7.35us,471.79us,656.83us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3389,4.56s,882.38us,1.00ns,885.34us,6.65us,881.75us,1.02ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,7867,4.56s,380.33us,1.00ns,381.34us,4.40us,376.33us,433.25us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613402,5798,4.56s,515.08us,1.00ns,517.39us,83.46us,509.37us,6.85ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613402,6026,4.52s,488.46us,1.00ns,497.85us,188.19us,485.75us,13.12ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,1710,4.56s,1.75ms,1.00ns,1.76ms,7.79us,1.74ms,1.87ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1259,4.56s,2.38ms,1.00ns,2.38ms,8.25us,2.37ms,2.43ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1260,4.54s,2.38ms,1.00ns,2.38ms,24.77us,2.37ms,2.60ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,6677,4.56s,448.25us,1.00ns,449.32us,5.78us,444.04us,605.00us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,7731,4.56s,386.79us,1.00ns,388.03us,3.74us,386.21us,427.12us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,5723,4.56s,521.46us,1.00ns,524.21us,7.89us,517.62us,698.12us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3319,4.56s,901.17us,1.00ns,903.83us,5.77us,900.33us,0.96ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,7487,4.56s,400.25us,1.00ns,400.69us,4.34us,394.67us,452.71us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613402,5256,4.56s,569.17us,1.00ns,570.83us,4.53us,567.79us,604.88us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613402,5651,4.56s,529.21us,1.00ns,530.88us,4.57us,526.62us,574.33us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,5317,4.56s,562.92us,1.00ns,564.18us,4.63us,558.71us,612.88us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1682,4.56s,1.78ms,1.00ns,1.78ms,7.46us,1.78ms,1.83ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1707,4.56s,1.76ms,1.00ns,1.76ms,8.98us,1.75ms,1.94ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,3107,4.56s,0.96ms,1.00ns,0.97ms,6.71us,0.96ms,1.01ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,3951,4.56s,757.50us,1.00ns,759.29us,5.35us,751.21us,812.92us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,4623,4.56s,646.96us,1.00ns,648.94us,4.86us,646.46us,684.54us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,2544,4.56s,1.18ms,1.00ns,1.18ms,21.46us,1.17ms,1.54ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,4444,4.56s,672.62us,1.00ns,675.04us,5.37us,671.96us,719.25us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613402,3124,4.55s,0.96ms,1.00ns,0.96ms,5.64us,0.96ms,1.01ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613402,4042,4.56s,740.58us,1.00ns,742.30us,5.10us,737.33us,790.58us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,6851,4.56s,436.62us,1.00ns,437.85us,3.95us,436.42us,491.12us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,2061,4.56s,1.45ms,1.00ns,1.46ms,6.68us,1.45ms,1.51ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,2062,4.56s,1.45ms,1.00ns,1.46ms,6.56us,1.45ms,1.50ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,36206,4.55s,82.54us,1.00ns,82.81us,1.62us,81.79us,117.33us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,46300,4.56s,65.58us,1.00ns,64.74us,2.42us,60.46us,103.62us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,20092,4.56s,146.96us,1.00ns,149.26us,6.45us,144.33us,198.75us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3322,4.56s,900.92us,1.00ns,903.06us,5.24us,899.92us,943.54us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,7836,4.56s,382.21us,1.00ns,382.83us,4.05us,376.96us,436.92us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613427,16118,4.56s,185.12us,1.00ns,186.09us,44.35us,184.79us,5.80ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613427,16813,4.54s,175.29us,1.00ns,178.38us,51.20us,174.83us,5.01ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,4389,4.56s,681.50us,1.00ns,683.50us,4.84us,680.71us,727.92us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1838,4.56s,1.63ms,1.00ns,1.63ms,6.82us,1.63ms,1.67ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1837,4.56s,1.63ms,1.00ns,1.63ms,19.23us,1.62ms,1.91ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,18305,4.56s,162.42us,1.00ns,163.85us,3.10us,161.21us,207.96us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,23882,4.56s,125.21us,1.00ns,125.57us,2.03us,124.46us,159.58us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,13361,4.56s,224.42us,1.00ns,224.50us,7.72us,214.58us,276.58us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3326,4.56s,899.58us,1.00ns,902.19us,5.58us,898.67us,0.96ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,7580,4.56s,394.42us,1.00ns,395.75us,4.31us,390.25us,430.62us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613427,10715,4.56s,279.12us,1.00ns,279.93us,3.11us,278.17us,311.67us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613427,9192,4.56s,251.54us,1.00ns,326.32us,5.90ms,249.62us,565.35ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,12777,4.55s,234.04us,1.00ns,234.75us,2.84us,232.75us,275.21us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1943,4.56s,1.54ms,1.00ns,1.54ms,6.40us,1.54ms,1.59ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1944,4.53s,1.53ms,20.01ns,1.54ms,33.96us,1.53ms,1.84ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,8638,4.56s,346.08us,1.00ns,347.28us,3.54us,345.08us,388.04us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,11007,4.56s,270.75us,1.00ns,272.52us,4.08us,269.17us,311.04us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,5654,4.56s,528.92us,1.00ns,530.60us,4.54us,527.33us,575.58us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3060,4.56s,0.98ms,1.00ns,0.98ms,6.18us,0.98ms,1.06ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,6180,4.56s,484.08us,1.00ns,485.41us,4.63us,481.00us,529.71us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613427,4577,4.56s,653.50us,1.00ns,655.40us,4.64us,652.83us,697.08us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613427,5244,4.56s,569.88us,1.00ns,572.09us,35.80us,565.75us,3.02ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8329,4.54s,354.92us,1.00ns,360.14us,79.78us,354.75us,4.81ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2133,4.56s,1.40ms,1.00ns,1.41ms,5.96us,1.40ms,1.44ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2137,4.56s,1.40ms,1.00ns,1.40ms,3.57us,1.40ms,1.43ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,102302,4.63s,28.92us,1.00ns,29.27us,1.19us,28.29us,62.21us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,102204,4.62s,28.83us,1.00ns,29.30us,1.32us,28.00us,66.38us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,10182,4.56s,294.21us,1.00ns,294.59us,12.04us,268.54us,345.04us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3415,4.56s,875.38us,1.00ns,878.50us,5.72us,875.12us,920.96us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8204,4.56s,364.50us,1.00ns,365.64us,4.07us,360.00us,413.25us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,86447,4.56s,34.58us,1.00ns,34.65us,914.00ns,34.42us,65.38us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,86597,4.56s,34.50us,1.00ns,34.59us,899.00ns,34.38us,67.67us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613345,8261,4.56s,278.50us,1.00ns,363.09us,6.27ms,259.96us,569.67ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613345,10610,4.55s,278.12us,1.00ns,282.71us,12.16us,261.38us,334.38us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,5499,4.56s,543.92us,1.00ns,545.58us,4.37us,543.62us,592.54us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1954,4.56s,1.53ms,1.00ns,1.54ms,6.96us,1.53ms,1.58ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1954,4.56s,1.53ms,1.00ns,1.54ms,7.01us,1.53ms,1.58ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,9485,4.56s,315.46us,1.00ns,316.25us,3.45us,310.75us,350.38us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,9569,4.56s,312.83us,1.00ns,313.49us,3.45us,310.54us,373.00us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,19016,4.55s,156.50us,1.00ns,157.72us,8.20us,144.79us,217.29us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3415,4.56s,875.67us,1.00ns,878.67us,5.70us,875.17us,912.71us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8205,4.56s,364.46us,1.00ns,365.61us,4.31us,359.96us,438.42us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,72571,4.56s,41.17us,1.00ns,41.29us,1.04us,40.96us,78.42us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,57456,4.55s,40.17us,1.00ns,52.16us,2.34ms,39.88us,561.24ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613345,18836,4.56s,158.00us,1.00ns,159.22us,6.61us,147.88us,198.75us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613345,18902,4.56s,157.46us,1.00ns,158.67us,6.52us,147.62us,201.96us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8464,4.56s,353.25us,1.00ns,354.39us,3.62us,353.04us,393.00us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2134,4.55s,1.40ms,1.00ns,1.41ms,6.36us,1.40ms,1.46ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2134,4.56s,1.40ms,1.00ns,1.41ms,6.62us,1.40ms,1.46ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,103393,4.63s,28.50us,1.00ns,28.97us,1.30us,28.04us,62.08us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,103792,4.63s,28.46us,1.00ns,28.85us,1.26us,28.08us,78.21us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,20410,4.56s,142.83us,1.00ns,146.94us,9.44us,134.71us,197.12us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3415,4.56s,875.46us,1.00ns,878.44us,5.70us,875.33us,920.46us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,6933,4.66s,364.58us,1.00ns,448.68us,6.80ms,359.96us,566.95ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,87992,4.60s,34.29us,1.00ns,34.04us,1.02us,33.25us,63.54us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,87027,4.56s,34.33us,1.00ns,34.42us,882.00ns,34.21us,65.29us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613345,17813,4.55s,167.67us,1.00ns,168.37us,5.86us,158.88us,213.04us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613345,17829,4.56s,167.58us,1.00ns,168.21us,5.59us,158.96us,216.96us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,2791,4.56s,1.07ms,1.00ns,1.07ms,6.78us,1.07ms,1.13ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1559,4.56s,1.92ms,1.00ns,1.92ms,7.29us,1.91ms,1.97ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1565,4.56s,1.92ms,1.00ns,1.92ms,7.78us,1.91ms,1.97ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,6672,4.56s,451.58us,1.00ns,449.62us,12.46us,428.79us,533.79us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,6649,4.56s,452.04us,1.00ns,451.18us,14.11us,428.54us,530.50us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,6863,4.56s,438.38us,1.00ns,437.11us,8.32us,418.92us,491.92us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3397,4.56s,880.83us,1.00ns,883.16us,10.61us,878.12us,1.19ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8200,4.56s,364.50us,1.00ns,365.83us,4.77us,359.96us,434.12us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,86931,4.56s,34.38us,1.00ns,34.46us,905.00ns,34.21us,65.08us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,86990,4.56s,34.33us,1.00ns,34.43us,0.97us,34.21us,87.12us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613345,6351,4.56s,472.42us,1.00ns,472.36us,6.06us,459.79us,507.87us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613345,5065,4.57s,473.00us,1.00ns,592.42us,7.92ms,460.33us,564.37ms\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,763.87ms,1.00ns,0.01ns,20.01ns,32.00ns,1.00ns,18.67us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,802.23ms,42.00ns,1.00ns,53.00ns,25.00ns,1.00ns,14.62us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,750.43ms,42.00ns,1.00ns,48.00ns,21.00ns,1.00ns,9.83us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,749.61ms,1.00ns,0.01ns,19.00ns,28.00ns,1.00ns,12.04us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,749.85ms,1.00ns,0.01ns,20.01ns,28.00ns,1.00ns,14.04us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,627.23ms,1.00ns,0.01ns,16.00ns,22.00ns,1.00ns,9.75us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,677.95ms,1.00ns,0.01ns,18.00ns,24.00ns,1.00ns,9.54us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,750.12ms,1.00ns,0.01ns,18.00ns,24.00ns,1.00ns,9.96us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,679.54ms,1.00ns,0.01ns,17.00ns,25.00ns,1.00ns,9.79us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,685.54ms,1.00ns,0.01ns,17.00ns,33.00ns,1.00ns,23.25us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,28,1000000,751.08ms,42.00ns,1.00ns,40.01ns,27.00ns,1.00ns,16.46us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,28,1000000,744.12ms,42.00ns,1.00ns,40.01ns,23.00ns,1.00ns,14.08us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,677.64ms,1.00ns,0.01ns,17.00ns,22.00ns,1.00ns,7.04us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,749.02ms,42.00ns,1.00ns,53.00ns,36.00ns,1.00ns,17.92us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,740.95ms,42.00ns,1.00ns,53.00ns,31.00ns,1.00ns,13.62us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,683.05ms,41.00ns,1.00ns,22.00ns,36.00ns,1.00ns,19.67us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,746.72ms,1.00ns,0.01ns,20.01ns,28.00ns,1.00ns,14.21us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,677.12ms,1.00ns,0.01ns,16.00ns,26.00ns,1.00ns,13.33us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,745.26ms,1.00ns,0.01ns,18.00ns,22.00ns,1.00ns,6.62us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,680.15ms,1.00ns,0.01ns,18.00ns,24.00ns,1.00ns,9.92us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,628.14ms,1.00ns,0.01ns,17.00ns,20.01ns,1.00ns,167.00ns\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,690.85ms,1.00ns,0.01ns,17.00ns,22.00ns,1.00ns,6.83us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,28,1000000,740.85ms,42.00ns,1.00ns,34.00ns,21.00ns,1.00ns,10.62us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,28,1000000,740.25ms,42.00ns,1.00ns,35.00ns,29.00ns,1.00ns,15.12us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,684.99ms,1.00ns,0.01ns,17.00ns,28.00ns,1.00ns,14.12us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,810.71ms,42.00ns,1.00ns,61.00ns,31.00ns,1.00ns,10.54us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,803.94ms,42.00ns,1.00ns,60.01ns,35.00ns,1.00ns,16.42us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,686.28ms,1.00ns,0.01ns,19.00ns,30.01ns,1.00ns,19.04us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,743.78ms,1.00ns,0.01ns,20.01ns,28.00ns,1.00ns,16.79us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,679.03ms,1.00ns,0.01ns,16.00ns,22.00ns,1.00ns,7.12us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,752.76ms,1.00ns,0.01ns,19.00ns,26.00ns,1.00ns,9.46us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,682.36ms,1.00ns,0.01ns,18.00ns,31.00ns,1.00ns,16.67us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,677.96ms,1.00ns,0.01ns,17.00ns,28.00ns,1.00ns,16.17us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,689.41ms,1.00ns,0.01ns,17.00ns,24.00ns,1.00ns,9.96us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,28,1000000,750.31ms,1.00ns,0.01ns,20.01ns,26.00ns,1.00ns,9.33us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,28,1000000,687.28ms,41.00ns,1.00ns,21.00ns,21.00ns,1.00ns,209.00ns\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,687.58ms,41.00ns,1.00ns,26.00ns,25.00ns,1.00ns,11.83us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,811.45ms,83.00ns,1.00ns,71.00ns,28.00ns,1.00ns,10.04us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,804.81ms,83.00ns,1.00ns,72.00ns,19.00ns,1.00ns,1.50us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,740.63ms,1.00ns,0.01ns,19.00ns,27.00ns,1.00ns,12.04us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,747.18ms,41.00ns,1.00ns,26.00ns,27.00ns,1.00ns,15.29us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,682.75ms,1.00ns,0.01ns,18.00ns,32.00ns,1.00ns,21.04us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,742.38ms,1.00ns,0.01ns,19.00ns,24.00ns,1.00ns,6.83us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,748.96ms,1.00ns,0.01ns,18.00ns,27.00ns,1.00ns,9.71us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,684.71ms,1.00ns,0.01ns,17.00ns,26.00ns,1.00ns,13.83us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,680.13ms,1.00ns,0.01ns,17.00ns,24.00ns,1.00ns,11.71us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,28,1000000,685.38ms,41.00ns,1.00ns,24.00ns,32.00ns,1.00ns,16.71us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,28,1000000,688.04ms,41.00ns,1.00ns,24.00ns,24.00ns,1.00ns,9.29us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,2181,4.55s,1.37ms,1.00ns,1.38ms,6.98us,1.36ms,1.41ms\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,3391,4.56s,882.25us,1.00ns,884.82us,5.27us,882.08us,928.17us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,2648,4.55s,882.42us,1.00ns,1.13ms,10.96ms,882.08us,564.96ms\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,100292,4.62s,29.71us,1.00ns,29.86us,1.01us,29.29us,68.17us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,100125,4.56s,29.50us,1.00ns,29.91us,1.24us,29.08us,56.92us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,12774,4.55s,233.46us,1.00ns,234.82us,6.09us,229.25us,429.33us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3417,4.56s,875.29us,1.00ns,878.11us,5.51us,875.17us,915.79us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613402,40072,4.56s,74.54us,1.00ns,74.81us,1.54us,74.12us,104.67us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,37159,4.56s,80.88us,1.00ns,80.68us,2.08us,75.88us,117.54us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613402,12342,4.56s,245.38us,1.00ns,243.02us,6.80us,230.88us,278.92us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613402,12866,4.56s,232.50us,1.00ns,233.14us,2.97us,230.50us,270.08us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,42,1000000,751.39ms,41.00ns,1.00ns,22.00ns,29.00ns,1.00ns,14.17us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,742.50ms,42.00ns,1.00ns,40.01ns,25.00ns,1.00ns,16.67us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,745.94ms,42.00ns,1.00ns,40.01ns,35.00ns,1.00ns,23.46us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,746.73ms,41.00ns,1.00ns,27.00ns,23.00ns,1.00ns,7.50us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,679.50ms,1.00ns,0.01ns,20.01ns,24.00ns,1.00ns,10.00us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,42,1000000,625.18ms,1.00ns,0.01ns,16.00ns,30.01ns,1.00ns,21.62us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,741.28ms,1.00ns,0.01ns,20.01ns,24.00ns,1.00ns,9.33us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,691.21ms,1.00ns,0.01ns,17.00ns,30.01ns,1.00ns,17.08us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,683.09ms,1.00ns,0.01ns,17.00ns,23.00ns,1.00ns,9.25us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,42,1000000,863.80ms,84.00ns,1.00ns,99.00ns,43.00ns,1.00ns,16.12us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,42,1000000,864.32ms,84.00ns,1.00ns,99.00ns,36.00ns,1.00ns,17.33us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,5720,5.09s,506.42us,1.00ns,524.44us,160.06us,506.04us,6.94ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1992,4.56s,1.50ms,1.00ns,1.51ms,6.26us,1.50ms,1.55ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1992,4.56s,1.50ms,1.00ns,1.51ms,7.06us,1.50ms,1.56ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,43706,4.56s,68.33us,1.00ns,68.59us,1.65us,67.08us,119.88us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,43771,4.56s,68.33us,1.00ns,68.49us,2.00us,63.67us,110.46us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,35555,4.56s,82.00us,1.00ns,84.33us,4.05us,80.96us,123.75us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3414,4.56s,876.25us,1.00ns,878.73us,5.88us,875.17us,915.12us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,8205,4.56s,364.54us,1.00ns,365.62us,3.97us,360.08us,408.96us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613427,83450,4.56s,35.79us,1.00ns,35.90us,935.00ns,35.67us,65.88us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,83561,4.56s,35.75us,1.00ns,35.85us,909.00ns,35.62us,65.04us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613427,27482,4.53s,85.21us,1.00ns,109.11us,3.41ms,83.75us,564.46ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613427,35273,4.56s,84.58us,1.00ns,85.00us,1.72us,83.29us,125.96us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,31,1000000,688.10ms,1.00ns,0.01ns,17.00ns,21.00ns,1.00ns,209.00ns\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,741.21ms,42.00ns,1.00ns,49.00ns,33.00ns,1.00ns,17.79us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,749.99ms,42.00ns,1.00ns,49.00ns,25.00ns,1.00ns,14.46us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,740.01ms,1.00ns,0.01ns,19.00ns,21.00ns,1.00ns,5.00us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,743.08ms,1.00ns,0.01ns,20.01ns,24.00ns,1.00ns,9.75us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,31,1000000,682.49ms,1.00ns,0.01ns,16.00ns,23.00ns,1.00ns,9.88us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,683.26ms,1.00ns,0.01ns,18.00ns,21.00ns,1.00ns,1.29us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,687.23ms,1.00ns,0.01ns,18.00ns,23.00ns,1.00ns,7.00us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,690.27ms,1.00ns,0.01ns,17.00ns,21.00ns,1.00ns,1.46us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,751.35ms,1.00ns,0.01ns,17.00ns,21.00ns,1.00ns,1.33us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,31,1000000,812.91ms,42.00ns,1.00ns,55.00ns,20.01ns,1.00ns,1.67us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,31,1000000,806.29ms,42.00ns,1.00ns,55.00ns,38.00ns,1.00ns,16.21us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8066,4.56s,370.83us,1.00ns,371.89us,3.40us,370.71us,407.00us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2120,4.56s,1.41ms,1.00ns,1.42ms,6.47us,1.41ms,1.46ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2119,4.56s,1.41ms,1.00ns,1.42ms,8.59us,1.41ms,1.65ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,75626,4.56s,39.17us,1.00ns,39.62us,1.39us,38.67us,92.38us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,75378,4.56s,39.29us,1.00ns,39.75us,1.36us,38.83us,73.00us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,17234,4.56s,172.00us,1.00ns,174.03us,7.68us,161.00us,219.71us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3411,4.55s,877.42us,1.00ns,879.53us,5.81us,875.08us,923.71us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8201,4.56s,364.58us,1.00ns,365.76us,4.02us,360.00us,408.29us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,85201,4.56s,35.08us,1.00ns,35.16us,933.00ns,34.92us,69.83us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,85340,4.56s,35.00us,1.00ns,35.10us,909.00ns,34.88us,66.00us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613345,16638,4.56s,178.88us,1.00ns,180.27us,8.67us,165.58us,226.04us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613345,16592,4.55s,179.33us,1.00ns,180.77us,8.60us,165.62us,219.79us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,6356,4.54s,370.83us,1.00ns,472.27us,7.09ms,370.71us,564.87ms\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2119,4.56s,1.41ms,1.00ns,1.42ms,6.30us,1.41ms,1.47ms\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2119,4.56s,1.41ms,1.00ns,1.42ms,6.48us,1.41ms,1.46ms\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,36853,4.56s,81.00us,1.00ns,81.35us,2.24us,79.58us,120.17us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,38442,4.56s,77.75us,1.00ns,77.99us,1.63us,76.21us,110.83us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,16786,4.56s,178.92us,1.00ns,178.68us,9.60us,162.42us,224.50us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3407,4.56s,878.58us,1.00ns,880.73us,5.66us,875.42us,934.08us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8211,4.56s,364.38us,1.00ns,365.32us,3.83us,359.92us,408.42us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,86521,4.56s,34.54us,1.00ns,34.62us,924.00ns,34.38us,72.50us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,86610,4.56s,34.50us,1.00ns,34.59us,910.01ns,34.33us,64.71us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613345,16360,4.56s,180.83us,1.00ns,183.33us,28.32us,171.50us,2.95ms\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613345,15993,4.57s,183.54us,1.00ns,187.54us,58.71us,172.17us,6.13ms\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,5910,4.56s,506.08us,1.00ns,507.60us,4.13us,505.67us,551.42us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,3349,4.56s,892.46us,1.00ns,895.95us,14.16us,890.75us,1.08ms\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3353,4.56s,892.29us,1.00ns,894.72us,5.57us,890.46us,937.75us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,34826,4.56s,85.58us,1.00ns,86.09us,1.79us,84.75us,122.92us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,32414,4.56s,92.21us,1.00ns,92.50us,1.81us,91.21us,132.83us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,26543,4.56s,112.58us,1.00ns,112.97us,1.96us,111.12us,157.62us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3408,4.56s,878.17us,1.00ns,880.41us,5.47us,875.08us,925.00us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,64714,4.56s,46.17us,1.00ns,46.30us,1.12us,45.83us,77.21us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,65411,4.56s,45.58us,1.00ns,45.81us,1.10us,45.25us,77.46us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613345,28232,4.56s,105.42us,1.00ns,106.22us,26.17us,103.83us,4.48ms\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613345,28216,4.57s,104.62us,1.00ns,106.27us,65.32us,102.83us,9.59ms\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,7611,4.56s,392.96us,1.00ns,394.16us,3.68us,392.79us,434.54us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,3334,4.56s,897.62us,1.00ns,899.83us,5.51us,894.79us,0.95ms\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3329,4.55s,897.67us,1.00ns,901.34us,10.90us,894.25us,1.02ms\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,40724,4.56s,72.71us,1.00ns,73.62us,2.00us,71.92us,108.00us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,41224,4.56s,72.21us,1.00ns,72.72us,1.75us,71.54us,108.54us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,42701,4.56s,69.92us,1.00ns,70.20us,1.45us,69.12us,103.33us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3408,4.56s,878.12us,1.00ns,880.42us,5.33us,875.12us,921.75us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,82307,4.56s,36.29us,1.00ns,36.40us,901.00ns,36.17us,66.88us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,82368,4.56s,36.29us,1.00ns,36.37us,920.01ns,36.12us,67.00us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613345,27787,4.56s,83.58us,1.00ns,107.91us,3.38ms,80.96us,562.90ms\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613345,36399,4.56s,82.12us,1.00ns,82.37us,1.55us,80.88us,113.83us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8230,4.56s,363.42us,1.00ns,364.49us,3.46us,363.29us,401.46us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,3342,4.55s,894.50us,1.00ns,897.77us,10.66us,892.79us,1.05ms\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3345,4.56s,894.50us,1.00ns,896.93us,5.61us,892.75us,945.75us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,64737,4.56s,46.08us,1.00ns,46.29us,1.17us,45.58us,88.88us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,69530,4.56s,43.00us,1.00ns,43.10us,1.07us,42.38us,73.62us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,43595,4.56s,68.54us,1.00ns,68.77us,1.39us,68.04us,101.58us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3411,4.56s,877.38us,1.00ns,879.66us,9.64us,874.71us,1.08ms\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,83897,4.56s,35.62us,1.00ns,35.71us,929.00ns,35.46us,66.29us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,84012,4.56s,35.58us,1.00ns,35.66us,922.00ns,35.42us,68.46us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613345,32259,4.56s,92.62us,1.00ns,92.95us,1.78us,91.46us,128.88us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613345,33323,4.56s,89.71us,1.00ns,89.98us,1.70us,88.42us,122.75us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,680.40ms,1.00ns,0.01ns,19.00ns,29.00ns,1.00ns,17.33us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,741.78ms,42.00ns,1.00ns,40.01ns,17.00ns,1.00ns,9.71us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,740.62ms,42.00ns,1.00ns,39.00ns,29.00ns,1.00ns,16.71us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,683.03ms,41.00ns,1.00ns,22.00ns,24.00ns,1.00ns,7.12us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,688.50ms,41.00ns,1.00ns,26.00ns,31.00ns,1.00ns,15.67us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,680.30ms,41.00ns,1.00ns,22.00ns,22.00ns,1.00ns,7.04us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,684.77ms,1.00ns,0.01ns,18.00ns,25.00ns,1.00ns,9.38us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,687.03ms,1.00ns,0.01ns,18.00ns,48.00ns,1.00ns,30.21us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,688.75ms,1.00ns,0.01ns,18.00ns,28.00ns,1.00ns,19.42us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,688.50ms,1.00ns,0.01ns,18.00ns,31.00ns,1.00ns,21.08us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,28,1000000,1.06s,166.00ns,1.00ns,154.00ns,48.00ns,41.00ns,17.88us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,28,1000000,809.51ms,83.00ns,1.00ns,83.00ns,37.00ns,1.00ns,16.75us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,688.48ms,1.00ns,0.01ns,19.00ns,29.00ns,1.00ns,15.71us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,741.76ms,42.00ns,1.00ns,44.00ns,24.00ns,1.00ns,14.04us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,752.72ms,42.00ns,1.00ns,43.00ns,17.00ns,1.00ns,9.83us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,685.53ms,1.00ns,0.01ns,20.01ns,30.01ns,1.00ns,10.21us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,692.87ms,41.00ns,1.00ns,23.00ns,34.00ns,1.00ns,21.04us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,686.96ms,1.00ns,0.01ns,17.00ns,26.00ns,1.00ns,16.17us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,686.87ms,1.00ns,0.01ns,18.00ns,27.00ns,1.00ns,12.12us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,687.92ms,1.00ns,0.01ns,18.00ns,26.00ns,1.00ns,13.96us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,683.22ms,1.00ns,0.01ns,18.00ns,22.00ns,1.00ns,6.58us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,689.87ms,1.00ns,0.01ns,18.00ns,25.00ns,1.00ns,9.62us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,28,1000000,1.39s,83.00ns,1.00ns,76.00ns,378.00ns,1.00ns,342.33us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,28,1000000,745.28ms,42.00ns,1.00ns,37.00ns,14.00ns,1.00ns,1.29us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,2192,4.56s,1.37ms,1.00ns,1.37ms,7.09us,1.36ms,1.42ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,3391,4.56s,882.25us,1.00ns,884.81us,5.33us,882.08us,928.58us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,3390,4.56s,882.25us,1.00ns,884.98us,5.62us,882.08us,932.75us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,114544,4.63s,25.71us,1.00ns,26.14us,1.23us,25.08us,59.54us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,114977,4.63s,25.50us,1.00ns,26.04us,1.31us,24.75us,57.12us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,15064,4.55s,198.50us,1.00ns,199.11us,2.89us,196.08us,235.71us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3410,4.56s,878.17us,1.00ns,879.75us,5.54us,875.17us,939.42us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613402,45605,4.56s,65.58us,1.00ns,65.73us,1.36us,65.08us,98.71us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,43662,4.56s,68.46us,1.00ns,68.66us,1.40us,67.92us,103.17us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613402,15207,4.56s,196.38us,1.00ns,197.25us,51.56us,193.21us,6.54ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613402,15205,4.55s,195.00us,1.00ns,197.25us,51.46us,190.83us,5.93ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,1787,4.56s,1.68ms,1.00ns,1.68ms,7.07us,1.67ms,1.72ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1301,4.56s,2.30ms,1.00ns,2.31ms,7.99us,2.30ms,2.35ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1301,4.56s,2.30ms,1.00ns,2.31ms,8.84us,2.29ms,2.39ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,113978,4.63s,25.79us,1.00ns,26.27us,1.03us,25.00us,62.63us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,114220,4.63s,25.79us,1.00ns,26.21us,1.06us,24.96us,60.42us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,9887,4.56s,301.50us,1.00ns,303.39us,4.70us,297.79us,339.58us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3414,4.56s,877.67us,1.00ns,878.91us,6.14us,875.17us,1.02ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,8189,4.56s,365.08us,1.00ns,366.30us,4.09us,360.08us,406.46us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613402,50730,4.56s,59.08us,1.00ns,59.09us,1.37us,57.71us,99.00us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,43383,4.55s,52.88us,1.00ns,69.10us,2.70ms,51.21us,561.90ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613402,9614,4.55s,311.33us,1.00ns,312.02us,3.91us,306.58us,355.00us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613402,9406,4.56s,319.67us,1.00ns,318.92us,5.39us,307.83us,353.75us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,42,1000000,681.08ms,41.00ns,1.00ns,23.00ns,30.01ns,1.00ns,12.00us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,752.43ms,42.00ns,1.00ns,35.00ns,22.00ns,1.00ns,9.46us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,688.90ms,42.00ns,1.00ns,34.00ns,19.00ns,1.00ns,6.83us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,752.46ms,42.00ns,1.00ns,35.00ns,21.00ns,1.00ns,9.92us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,689.97ms,41.00ns,1.00ns,31.00ns,29.00ns,1.00ns,16.71us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,42,1000000,682.93ms,41.00ns,1.00ns,31.00ns,31.00ns,1.00ns,15.46us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,748.78ms,1.00ns,0.01ns,20.01ns,27.00ns,1.00ns,9.62us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,680.89ms,1.00ns,0.01ns,18.00ns,27.00ns,1.00ns,16.54us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,628.30ms,1.00ns,0.01ns,18.00ns,26.00ns,1.00ns,12.21us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,42,1000000,1.23s,250.01ns,1.00ns,262.00ns,67.00ns,166.00ns,23.75us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,42,1000000,932.94ms,125.00ns,1.00ns,140.01ns,52.00ns,41.00ns,22.08us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,42,1000000,745.68ms,42.00ns,1.00ns,35.00ns,23.00ns,1.00ns,9.50us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,805.40ms,42.00ns,1.00ns,62.00ns,42.00ns,1.00ns,16.62us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,810.85ms,42.00ns,1.00ns,61.00ns,32.00ns,1.00ns,16.75us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,752.00ms,41.00ns,1.00ns,26.00ns,27.00ns,1.00ns,12.21us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,681.66ms,41.00ns,1.00ns,27.00ns,29.00ns,1.00ns,14.00us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,42,1000000,687.43ms,1.00ns,0.01ns,19.00ns,30.01ns,1.00ns,14.17us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,742.21ms,1.00ns,0.01ns,19.00ns,23.00ns,1.00ns,6.83us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,42,1000000,750.69ms,1.00ns,0.01ns,20.01ns,34.00ns,1.00ns,24.12us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,679.77ms,1.00ns,0.01ns,19.00ns,28.00ns,1.00ns,16.88us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,681.20ms,1.00ns,0.01ns,19.00ns,27.00ns,1.00ns,14.21us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,42,1000000,0.99s,125.00ns,1.00ns,118.00ns,41.00ns,1.00ns,18.12us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,42,1000000,811.60ms,42.00ns,1.00ns,60.01ns,33.00ns,1.00ns,22.12us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,4888,4.56s,612.04us,1.00ns,613.81us,4.71us,610.67us,668.29us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,3370,4.56s,888.00us,1.00ns,890.39us,5.56us,886.17us,0.95ms\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,3370,4.56s,888.00us,1.00ns,890.37us,5.56us,886.17us,933.88us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,21584,4.56s,140.25us,1.00ns,138.95us,46.38us,133.58us,6.92ms\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,22565,4.52s,131.00us,1.00ns,132.90us,58.98us,128.83us,8.58ms\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,31839,4.56s,93.08us,1.00ns,94.17us,2.65us,91.17us,133.12us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3410,4.56s,878.29us,1.00ns,879.86us,5.84us,875.25us,0.95ms\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613427,77056,4.56s,38.79us,1.00ns,38.88us,923.00ns,38.58us,78.92us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,77115,4.56s,38.75us,1.00ns,38.85us,0.96us,38.54us,79.54us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613427,29714,4.56s,100.29us,1.00ns,100.91us,2.09us,99.00us,139.54us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613427,29188,4.56s,102.04us,1.00ns,102.73us,2.19us,100.46us,141.79us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,4366,4.56s,685.50us,1.00ns,687.12us,4.50us,684.83us,726.00us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1838,4.56s,1.63ms,21.00ns,1.63ms,6.88us,1.62ms,1.68ms\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1838,4.56s,1.63ms,1.00ns,1.63ms,6.91us,1.63ms,1.67ms\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,27082,4.55s,86.04us,1.00ns,110.72us,3.44ms,83.00us,565.64ms\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,32010,4.55s,94.62us,1.00ns,93.67us,3.47us,85.79us,134.54us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,22169,4.55s,132.00us,1.00ns,135.28us,5.75us,130.46us,175.83us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3414,4.56s,875.94us,21.00ns,878.90us,5.91us,875.25us,914.92us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,8207,4.55s,364.54us,1.00ns,365.51us,3.69us,360.04us,408.33us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613427,72896,4.55s,41.00us,1.00ns,41.10us,1.06us,40.75us,71.71us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,72798,4.56s,41.04us,1.00ns,41.16us,1.00us,40.88us,76.75us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,613427,20910,4.56s,142.46us,1.00ns,143.43us,2.81us,140.71us,195.75us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,613427,20792,4.56s,143.12us,1.00ns,144.24us,2.95us,140.83us,181.58us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,31,1000000,680.03ms,1.00ns,0.01ns,18.00ns,24.00ns,1.00ns,9.25us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,743.30ms,41.00ns,1.00ns,21.00ns,25.00ns,1.00ns,10.92us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,682.88ms,41.00ns,1.00ns,21.00ns,30.01ns,1.00ns,14.29us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,686.80ms,41.00ns,1.00ns,28.00ns,22.00ns,1.00ns,10.29us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,681.93ms,41.00ns,1.00ns,29.00ns,22.00ns,1.00ns,9.17us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,31,1000000,693.72ms,41.00ns,1.00ns,23.00ns,29.00ns,1.00ns,12.12us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,681.10ms,1.00ns,0.01ns,18.00ns,23.00ns,1.00ns,6.62us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,681.34ms,1.00ns,0.01ns,17.00ns,21.00ns,1.00ns,4.79us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,687.76ms,1.00ns,0.01ns,17.00ns,30.01ns,1.00ns,19.88us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,31,1000000,1.17s,250.01ns,1.00ns,240.01ns,70.01ns,125.00ns,25.00us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,31,1000000,927.76ms,125.00ns,1.00ns,122.00ns,45.00ns,1.00ns,17.29us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,31,1000000,679.56ms,41.00ns,1.00ns,23.00ns,26.00ns,1.00ns,9.46us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,1.36s,42.00ns,1.00ns,45.00ns,27.00ns,1.00ns,16.33us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,752.63ms,42.00ns,1.00ns,42.00ns,14.00ns,1.00ns,7.42us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,746.01ms,1.00ns,0.01ns,19.00ns,22.00ns,1.00ns,8.33us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,688.61ms,41.00ns,1.00ns,26.00ns,33.00ns,1.00ns,16.75us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,31,1000000,739.61ms,1.00ns,0.01ns,19.00ns,24.00ns,1.00ns,12.08us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,742.15ms,1.00ns,0.01ns,19.00ns,23.00ns,1.00ns,9.58us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,746.03ms,1.00ns,0.01ns,18.00ns,27.00ns,1.00ns,16.62us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,682.77ms,1.00ns,0.01ns,18.00ns,27.00ns,1.00ns,16.75us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,679.93ms,1.00ns,0.01ns,18.00ns,26.00ns,1.00ns,16.12us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,unknown,,31,1000000,874.10ms,83.00ns,1.00ns,88.00ns,41.00ns,1.00ns,19.33us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,unknown,,31,1000000,745.12ms,42.00ns,1.00ns,50.01ns,26.00ns,1.00ns,9.67us\n"
  },
  {
    "path": "benchmarks/record/aarch64/2023-08-20.csv",
    "content": "name,model,rebar_version,engine,engine_version,err,haystack_len,iters,total,median,mad,mean,stddev,min,max\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,6331,4.56s,472.42us,0.00ns,473.86us,4.56us,471.83us,568.38us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,7654,4.55s,394.46us,0.00ns,391.91us,7.92us,381.08us,528.21us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,8276,4.51s,354.88us,0.00ns,362.46us,12.06us,351.21us,455.08us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,6180,4.55s,484.17us,0.00ns,485.38us,5.90us,482.29us,616.88us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,7846,4.55s,379.92us,0.00ns,382.31us,7.39us,377.25us,484.29us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,8213,4.57s,364.08us,0.00ns,365.23us,3.79us,363.46us,406.67us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,5887,4.56s,508.04us,0.00ns,509.61us,4.48us,507.21us,556.96us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,5883,4.56s,508.38us,0.00ns,509.95us,4.24us,507.46us,546.38us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,7622,4.56s,392.00us,0.00ns,393.55us,4.10us,389.50us,428.08us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,5824,4.56s,513.62us,0.00ns,515.14us,4.27us,512.54us,548.00us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,5342,4.56s,560.04us,0.00ns,561.64us,4.44us,559.71us,610.96us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,3034,4.56s,0.99ms,0.00ns,0.99ms,6.36us,0.98ms,1.04ms\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,4496,4.56s,665.38us,0.00ns,667.24us,4.93us,663.04us,712.42us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,5448,4.56s,549.50us,0.00ns,550.69us,4.62us,548.62us,668.92us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,3205,4.56s,933.83us,0.00ns,935.98us,6.08us,928.83us,0.98ms\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,2925,4.56s,1.02ms,0.00ns,1.03ms,6.62us,1.02ms,1.07ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,3801,4.56s,786.67us,0.00ns,789.23us,5.99us,786.46us,892.96us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,2096,4.56s,1.43ms,0.00ns,1.43ms,8.38us,1.42ms,1.49ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,3155,4.56s,949.08us,0.00ns,0.95ms,6.07us,943.04us,1.00ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,3967,4.56s,753.79us,0.00ns,756.22us,5.49us,753.54us,801.08us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,2445,4.56s,1.22ms,0.00ns,1.23ms,7.42us,1.22ms,1.28ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,2233,4.56s,1.34ms,0.00ns,1.34ms,7.61us,1.34ms,1.40ms\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,1.23s,292.00ns,0.00ns,297.00ns,75.00ns,208.00ns,25.00us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,1.16s,291.00ns,0.00ns,273.00ns,76.00ns,166.00ns,25.54us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.23s,250.00ns,0.00ns,246.00ns,62.00ns,125.00ns,19.21us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,1.11s,167.00ns,0.00ns,185.00ns,60.00ns,83.00ns,25.00us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.23s,250.00ns,0.00ns,241.00ns,77.00ns,125.00ns,25.08us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,1.23s,250.00ns,0.00ns,241.00ns,88.00ns,125.00ns,30.04us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.17s,208.00ns,0.00ns,207.00ns,60.00ns,83.00ns,20.79us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.11s,208.00ns,0.00ns,207.00ns,52.00ns,83.00ns,18.42us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.23s,250.00ns,0.00ns,268.00ns,67.00ns,166.00ns,18.83us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,1.17s,209.00ns,0.00ns,222.00ns,74.00ns,125.00ns,25.08us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,1.71s,459.00ns,0.00ns,477.00ns,98.00ns,333.00ns,25.33us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,1.29s,291.00ns,0.00ns,277.00ns,72.00ns,166.00ns,24.17us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.29s,292.00ns,0.00ns,292.00ns,84.00ns,166.00ns,31.88us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,1.65s,458.00ns,0.00ns,460.00ns,95.00ns,333.00ns,25.29us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,1.41s,333.00ns,0.00ns,324.00ns,82.00ns,208.00ns,24.92us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,1.41s,333.00ns,0.00ns,335.00ns,68.00ns,250.00ns,19.04us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,2.31s,791.00ns,0.00ns,777.00ns,143.00ns,625.00ns,25.88us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,1.60s,417.00ns,0.00ns,414.00ns,89.00ns,291.00ns,25.17us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.40s,333.00ns,0.00ns,339.00ns,82.00ns,250.00ns,25.58us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,2.19s,709.00ns,0.00ns,720.00ns,120.00ns,583.00ns,25.88us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,1.77s,500.00ns,0.00ns,506.00ns,100.00ns,375.00ns,27.62us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.71s,458.00ns,0.00ns,468.00ns,101.00ns,375.00ns,27.67us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,809.14ms,42.00ns,0.00ns,49.00ns,24.00ns,1.00ns,9.96us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,806.97ms,42.00ns,0.00ns,44.00ns,27.00ns,1.00ns,16.29us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,806.95ms,42.00ns,0.00ns,37.00ns,29.00ns,1.00ns,16.96us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,750.95ms,41.00ns,0.00ns,31.00ns,26.00ns,1.00ns,16.46us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,750.98ms,41.00ns,0.00ns,28.00ns,27.00ns,1.00ns,14.17us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,750.56ms,42.00ns,0.00ns,32.00ns,23.00ns,1.00ns,13.17us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,811.85ms,42.00ns,0.00ns,43.00ns,16.00ns,1.00ns,9.38us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,801.71ms,42.00ns,0.00ns,44.00ns,27.00ns,1.00ns,16.33us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,744.93ms,41.00ns,0.00ns,28.00ns,34.00ns,1.00ns,23.29us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,810.43ms,42.00ns,0.00ns,44.00ns,31.00ns,1.00ns,15.25us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,238329,4.68s,12.50us,0.00ns,12.54us,520.00ns,12.38us,43.42us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,396461,4.81s,7.50us,0.00ns,7.51us,383.00ns,7.38us,40.58us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,396019,4.82s,7.50us,0.00ns,7.52us,403.00ns,7.38us,39.42us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,132434,4.63s,21.83us,0.00ns,22.60us,1.49us,21.29us,57.00us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,15863,4.56s,181.25us,0.00ns,189.07us,19.83us,169.71us,267.25us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,396424,4.81s,7.50us,0.00ns,7.51us,340.00ns,7.38us,49.50us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,130698,4.63s,22.17us,0.00ns,22.90us,1.60us,21.00us,59.79us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,130888,4.63s,22.12us,0.00ns,22.87us,1.60us,21.00us,58.96us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,15964,4.55s,177.96us,0.00ns,187.87us,18.09us,170.04us,289.75us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,126228,4.62s,23.62us,0.00ns,23.72us,1.46us,21.12us,60.29us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,249362,4.69s,11.96us,0.00ns,11.98us,496.00ns,11.83us,41.29us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,58814,4.56s,50.75us,0.00ns,50.96us,1.31us,50.33us,85.29us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,13210,4.56s,226.42us,0.00ns,227.05us,2.67us,226.25us,258.96us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,249278,4.69s,11.96us,0.00ns,11.98us,509.00ns,11.83us,72.12us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,57994,4.56s,51.29us,0.00ns,51.68us,1.54us,50.38us,92.62us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,62446,4.56s,47.83us,0.00ns,47.99us,1.30us,47.67us,88.75us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,172973,4.63s,17.25us,0.00ns,17.29us,599.00ns,17.17us,44.83us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,42106,4.56s,70.79us,0.00ns,71.20us,1.54us,68.79us,108.38us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,10301,4.56s,290.38us,0.00ns,291.18us,3.31us,290.00us,359.83us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,172969,4.63s,17.25us,0.00ns,17.29us,604.00ns,17.17us,48.29us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,44608,4.56s,66.83us,0.00ns,67.20us,1.76us,65.25us,125.79us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,48002,4.56s,62.21us,0.00ns,62.45us,1.54us,59.54us,100.54us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,749.31ms,41.00ns,0.00ns,22.00ns,24.00ns,1.00ns,10.96us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,754.70ms,1.00ns,0.00ns,19.00ns,26.00ns,1.00ns,14.08us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,751.64ms,1.00ns,0.00ns,19.00ns,29.00ns,1.00ns,16.83us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,747.86ms,42.00ns,0.00ns,34.00ns,20.00ns,1.00ns,8.21us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.18s,209.00ns,0.00ns,228.00ns,63.00ns,125.00ns,23.04us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,690.37ms,1.00ns,0.00ns,19.00ns,33.00ns,1.00ns,20.58us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,754.12ms,41.00ns,0.00ns,30.00ns,32.00ns,1.00ns,14.96us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,745.75ms,41.00ns,0.00ns,30.00ns,21.00ns,1.00ns,9.42us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.18s,209.00ns,0.00ns,228.00ns,71.00ns,125.00ns,22.67us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,751.11ms,42.00ns,0.00ns,32.00ns,28.00ns,1.00ns,16.96us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,682.43ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,9.21us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,809.01ms,83.00ns,0.00ns,65.00ns,39.00ns,1.00ns,19.08us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.17s,250.00ns,0.00ns,269.00ns,69.00ns,166.00ns,21.62us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,694.66ms,1.00ns,0.00ns,19.00ns,29.00ns,1.00ns,20.25us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,812.78ms,83.00ns,0.00ns,65.00ns,33.00ns,1.00ns,10.33us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,807.45ms,83.00ns,0.00ns,64.00ns,31.00ns,1.00ns,14.08us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,754.93ms,1.00ns,0.00ns,20.00ns,25.00ns,1.00ns,11.75us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,873.65ms,83.00ns,0.00ns,89.00ns,38.00ns,1.00ns,16.88us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.42s,333.00ns,0.00ns,342.00ns,77.00ns,250.00ns,25.04us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,746.71ms,1.00ns,0.00ns,20.00ns,26.00ns,1.00ns,10.33us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,864.22ms,83.00ns,0.00ns,85.00ns,34.00ns,1.00ns,16.25us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,864.22ms,83.00ns,0.00ns,87.00ns,37.00ns,1.00ns,16.62us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,688.81ms,1.00ns,0.00ns,16.00ns,29.00ns,1.00ns,16.71us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,680.10ms,1.00ns,0.00ns,16.00ns,24.00ns,1.00ns,9.33us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,680.65ms,1.00ns,0.00ns,16.00ns,29.00ns,1.00ns,20.75us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,684.65ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,9.46us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,754.08ms,41.00ns,0.00ns,28.00ns,23.00ns,1.00ns,6.67us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,690.74ms,1.00ns,0.00ns,16.00ns,28.00ns,1.00ns,16.92us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,681.83ms,1.00ns,0.00ns,17.00ns,20.00ns,1.00ns,167.00ns\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,688.25ms,1.00ns,0.00ns,17.00ns,27.00ns,1.00ns,16.33us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,747.69ms,41.00ns,0.00ns,28.00ns,34.00ns,1.00ns,21.21us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,690.19ms,1.00ns,0.00ns,16.00ns,33.00ns,1.00ns,19.67us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,69,1000000,690.16ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,125.00ns\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,684.01ms,1.00ns,0.00ns,17.00ns,21.00ns,1.00ns,6.29us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,69,1000000,746.50ms,42.00ns,0.00ns,37.00ns,24.00ns,1.00ns,16.62us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,69,1000000,691.47ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,4.92us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,69,1000000,690.72ms,1.00ns,0.00ns,17.00ns,28.00ns,1.00ns,16.62us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,69,1000000,681.36ms,1.00ns,0.00ns,17.00ns,22.00ns,1.00ns,9.17us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,69,1000000,683.74ms,1.00ns,0.00ns,16.00ns,22.00ns,1.00ns,9.62us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,751.06ms,1.00ns,0.00ns,17.00ns,25.00ns,1.00ns,9.88us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,69,1000000,742.84ms,42.00ns,0.00ns,44.00ns,38.00ns,1.00ns,16.71us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,69,1000000,683.77ms,1.00ns,0.00ns,16.00ns,22.00ns,1.00ns,6.75us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,69,1000000,742.97ms,1.00ns,0.00ns,17.00ns,25.00ns,1.00ns,10.58us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,69,1000000,682.94ms,1.00ns,0.00ns,18.00ns,30.00ns,1.00ns,20.50us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,,1000000,689.91ms,1.00ns,0.00ns,16.00ns,22.00ns,1.00ns,6.54us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,,1000000,679.74ms,1.00ns,0.00ns,15.00ns,21.00ns,1.00ns,6.50us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,,1000000,690.37ms,1.00ns,0.00ns,15.00ns,21.00ns,1.00ns,6.58us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,,1000000,690.48ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,4.83us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,,1000000,680.80ms,1.00ns,0.00ns,15.00ns,21.00ns,1.00ns,6.79us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,,1000000,690.18ms,1.00ns,0.00ns,15.00ns,24.00ns,1.00ns,9.46us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,,1000000,689.86ms,1.00ns,0.00ns,15.00ns,20.00ns,1.00ns,4.75us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,,1000000,688.14ms,1.00ns,0.00ns,15.00ns,23.00ns,1.00ns,9.25us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,,1000000,685.52ms,1.00ns,0.00ns,15.00ns,23.00ns,1.00ns,9.54us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,,1000000,685.67ms,1.00ns,0.00ns,15.00ns,21.00ns,1.00ns,6.83us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,,1000000,685.37ms,1.00ns,0.00ns,15.00ns,24.00ns,1.00ns,6.96us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,,1000000,690.28ms,1.00ns,0.00ns,16.00ns,32.00ns,1.00ns,21.00us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,,1000000,690.06ms,1.00ns,0.00ns,15.00ns,27.00ns,1.00ns,16.42us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,,1000000,684.76ms,1.00ns,0.00ns,15.00ns,30.00ns,1.00ns,21.25us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,,1000000,690.03ms,1.00ns,0.00ns,15.00ns,27.00ns,1.00ns,16.67us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,,1000000,690.10ms,1.00ns,0.00ns,15.00ns,22.00ns,1.00ns,6.79us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,,1000000,680.92ms,1.00ns,0.00ns,15.00ns,23.00ns,1.00ns,10.12us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,,1000000,690.01ms,1.00ns,0.00ns,16.00ns,22.00ns,1.00ns,9.29us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,,1000000,682.40ms,1.00ns,0.00ns,15.00ns,20.00ns,1.00ns,1.33us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,,1000000,686.48ms,1.00ns,0.00ns,15.00ns,20.00ns,1.00ns,4.75us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,,1000000,690.33ms,1.00ns,0.00ns,15.00ns,22.00ns,1.00ns,9.54us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,,1000000,690.07ms,1.00ns,0.00ns,15.00ns,19.00ns,1.00ns,167.00ns\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,205205,4.68s,14.54us,0.00ns,14.57us,567.00ns,14.38us,55.62us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,319916,4.75s,9.29us,0.00ns,9.32us,431.00ns,9.17us,40.38us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,325302,4.75s,9.17us,0.00ns,9.17us,432.00ns,9.00us,65.62us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,114131,4.63s,25.58us,0.00ns,26.24us,1.37us,25.04us,56.46us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,14596,4.56s,204.04us,0.00ns,205.48us,9.06us,182.04us,256.08us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,326632,4.75s,9.12us,0.00ns,9.13us,383.00ns,8.75us,40.58us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,111516,4.63s,26.79us,0.00ns,26.85us,820.00ns,26.04us,57.62us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,111618,4.63s,26.75us,0.00ns,26.83us,794.00ns,26.17us,57.62us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,108650,4.63s,27.50us,0.00ns,27.56us,821.00ns,26.62us,61.17us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,181451,4.63s,16.46us,0.00ns,16.48us,599.00ns,16.29us,69.92us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,50487,4.56s,59.46us,0.00ns,59.37us,1.84us,56.42us,97.08us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,11167,4.56s,267.92us,0.00ns,268.61us,3.29us,265.04us,321.83us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,181159,4.63s,16.46us,0.00ns,16.51us,574.00ns,16.33us,53.83us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,49456,4.56s,60.50us,0.00ns,60.61us,1.67us,58.17us,93.92us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,49719,4.56s,60.17us,0.00ns,60.29us,3.76us,53.58us,100.00us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,130040,4.63s,22.96us,0.00ns,23.02us,696.00ns,22.83us,48.50us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,37345,4.56s,80.08us,0.00ns,80.28us,1.65us,78.75us,111.21us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,10172,4.55s,294.04us,0.00ns,294.90us,3.14us,293.88us,333.29us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,128642,4.62s,23.21us,0.00ns,23.27us,695.00ns,23.08us,54.50us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,37854,4.56s,79.04us,0.00ns,79.20us,1.63us,77.00us,107.58us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,38223,4.56s,78.33us,0.00ns,78.44us,2.02us,74.38us,109.62us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,745.24ms,41.00ns,0.00ns,22.00ns,31.00ns,1.00ns,18.54us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,752.71ms,1.00ns,0.00ns,20.00ns,25.00ns,1.00ns,9.71us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,689.82ms,1.00ns,0.00ns,20.00ns,23.00ns,1.00ns,9.46us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,742.70ms,42.00ns,0.00ns,38.00ns,28.00ns,1.00ns,16.33us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.23s,250.00ns,0.00ns,244.00ns,69.00ns,125.00ns,19.08us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,689.90ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,7.38us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,752.77ms,42.00ns,0.00ns,33.00ns,33.00ns,1.00ns,21.08us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,748.41ms,42.00ns,0.00ns,33.00ns,23.00ns,1.00ns,9.33us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.24s,250.00ns,0.00ns,244.00ns,65.00ns,125.00ns,22.29us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,752.23ms,42.00ns,0.00ns,33.00ns,26.00ns,1.00ns,16.46us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,755.69ms,1.00ns,0.00ns,20.00ns,29.00ns,1.00ns,12.75us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,800.76ms,83.00ns,0.00ns,69.00ns,32.00ns,1.00ns,14.08us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.30s,292.00ns,0.00ns,286.00ns,73.00ns,166.00ns,24.00us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,743.20ms,1.00ns,0.00ns,21.00ns,24.00ns,1.00ns,7.88us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,811.35ms,83.00ns,0.00ns,72.00ns,35.00ns,1.00ns,11.33us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,804.50ms,83.00ns,0.00ns,70.00ns,38.00ns,1.00ns,16.62us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,746.29ms,41.00ns,0.00ns,24.00ns,28.00ns,1.00ns,16.42us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,866.99ms,84.00ns,0.00ns,96.00ns,36.00ns,1.00ns,16.62us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.48s,375.00ns,0.00ns,361.00ns,79.00ns,250.00ns,24.88us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,745.96ms,41.00ns,0.00ns,25.00ns,23.00ns,1.00ns,6.96us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,864.86ms,84.00ns,0.00ns,97.00ns,50.00ns,1.00ns,22.58us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,867.12ms,84.00ns,0.00ns,99.00ns,41.00ns,1.00ns,17.08us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,754.91ms,1.00ns,0.00ns,17.00ns,26.00ns,1.00ns,16.83us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,684.53ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,1.21us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,684.95ms,1.00ns,0.00ns,16.00ns,23.00ns,1.00ns,9.08us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,685.80ms,1.00ns,0.00ns,18.00ns,24.00ns,1.00ns,9.50us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,750.61ms,41.00ns,0.00ns,28.00ns,27.00ns,1.00ns,9.42us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,681.31ms,1.00ns,0.00ns,16.00ns,24.00ns,1.00ns,9.58us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,691.56ms,1.00ns,0.00ns,18.00ns,37.00ns,1.00ns,24.83us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,690.79ms,1.00ns,0.00ns,18.00ns,24.00ns,1.00ns,9.50us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,751.12ms,41.00ns,0.00ns,28.00ns,24.00ns,1.00ns,9.96us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,682.84ms,1.00ns,0.00ns,17.00ns,24.00ns,1.00ns,9.46us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,69,1000000,690.20ms,1.00ns,0.00ns,17.00ns,24.00ns,1.00ns,9.58us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,690.67ms,1.00ns,0.00ns,18.00ns,23.00ns,1.00ns,10.79us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,69,1000000,742.98ms,42.00ns,0.00ns,37.00ns,18.00ns,1.00ns,6.88us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,69,1000000,754.14ms,1.00ns,0.00ns,18.00ns,25.00ns,1.00ns,11.88us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,69,1000000,754.00ms,1.00ns,0.00ns,19.00ns,27.00ns,1.00ns,14.12us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,69,1000000,751.46ms,1.00ns,0.00ns,18.00ns,32.00ns,1.00ns,16.88us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,69,1000000,683.87ms,1.00ns,0.00ns,17.00ns,21.00ns,1.00ns,6.88us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,744.92ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,4.96us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,69,1000000,740.36ms,42.00ns,0.00ns,45.00ns,22.00ns,1.00ns,12.38us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,69,1000000,745.11ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,5.00us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,69,1000000,755.18ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,4.83us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,69,1000000,687.74ms,1.00ns,0.00ns,19.00ns,28.00ns,1.00ns,14.21us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,29350,4.56s,101.83us,0.00ns,102.16us,1.83us,101.50us,140.12us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,26218,4.56s,113.96us,0.00ns,114.37us,2.02us,113.08us,152.29us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,37762,4.56s,79.04us,0.00ns,79.39us,1.76us,78.12us,119.54us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,30995,4.56s,96.12us,0.00ns,96.74us,1.95us,95.67us,131.62us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,12546,4.56s,237.71us,0.00ns,239.07us,4.13us,230.38us,284.62us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,28225,4.56s,105.83us,0.00ns,106.24us,1.86us,105.29us,149.96us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,27157,4.56s,110.08us,0.00ns,110.42us,1.82us,109.58us,138.21us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,26805,4.56s,111.54us,0.00ns,111.87us,1.86us,111.08us,147.88us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,12615,4.56s,236.58us,0.00ns,237.75us,3.87us,231.67us,277.58us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,28279,4.56s,101.00us,0.00ns,106.03us,6.67us,99.96us,141.92us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,14416,4.56s,207.71us,0.00ns,208.06us,2.64us,205.88us,243.92us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,12720,4.56s,235.04us,0.00ns,235.81us,2.95us,234.67us,294.46us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,9199,4.56s,325.12us,0.00ns,326.09us,3.62us,324.42us,398.58us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,15542,4.56s,192.46us,0.00ns,192.98us,2.43us,190.96us,230.62us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,11792,4.56s,253.62us,0.00ns,254.37us,3.03us,252.88us,296.38us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,12076,4.56s,247.29us,0.00ns,248.39us,3.12us,245.88us,285.00us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,10612,4.56s,281.79us,0.00ns,282.66us,3.10us,281.25us,316.92us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,8479,4.56s,352.54us,0.00ns,353.80us,3.63us,352.04us,409.46us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,7280,4.56s,410.79us,0.00ns,412.04us,3.94us,410.21us,452.96us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,10446,4.56s,286.58us,0.00ns,287.14us,2.79us,285.38us,326.17us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,7667,4.56s,390.08us,0.00ns,391.24us,3.74us,389.08us,436.62us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,7855,4.56s,380.75us,0.00ns,381.87us,3.78us,379.71us,417.88us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,815.62ms,42.00ns,0.00ns,43.00ns,24.00ns,1.00ns,16.50us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,749.17ms,42.00ns,0.00ns,43.00ns,26.00ns,1.00ns,16.21us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,743.22ms,42.00ns,0.00ns,38.00ns,26.00ns,1.00ns,16.54us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,746.36ms,83.00ns,0.00ns,69.00ns,37.00ns,1.00ns,16.50us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.17s,250.00ns,0.00ns,237.00ns,66.00ns,125.00ns,24.79us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,744.20ms,42.00ns,0.00ns,39.00ns,20.00ns,1.00ns,10.04us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,812.46ms,83.00ns,0.00ns,65.00ns,33.00ns,1.00ns,16.33us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,805.48ms,83.00ns,0.00ns,66.00ns,37.00ns,1.00ns,20.88us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.29s,333.00ns,0.00ns,339.00ns,80.00ns,166.00ns,30.33us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,806.06ms,42.00ns,0.00ns,62.00ns,40.00ns,1.00ns,20.67us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,868.32ms,83.00ns,0.00ns,92.00ns,64.00ns,1.00ns,41.67us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,923.90ms,84.00ns,0.00ns,104.00ns,40.00ns,1.00ns,14.25us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.29s,292.00ns,0.00ns,293.00ns,67.00ns,167.00ns,19.25us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,916.27ms,84.00ns,0.00ns,104.00ns,35.00ns,1.00ns,10.04us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,1.00s,125.00ns,0.00ns,119.00ns,39.00ns,1.00ns,17.42us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,922.71ms,125.00ns,0.00ns,118.00ns,39.00ns,1.00ns,16.92us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,1.05s,166.00ns,0.00ns,154.00ns,57.00ns,41.00ns,18.29us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,1.04s,167.00ns,0.00ns,161.00ns,56.00ns,41.00ns,21.96us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.40s,333.00ns,0.00ns,341.00ns,109.00ns,250.00ns,24.62us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,1.05s,167.00ns,0.00ns,158.00ns,49.00ns,41.00ns,17.33us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,1.11s,167.00ns,0.00ns,187.00ns,66.00ns,83.00ns,24.75us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.05s,167.00ns,0.00ns,161.00ns,56.00ns,41.00ns,23.12us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,751.28ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,4.71us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,686.61ms,1.00ns,0.00ns,17.00ns,27.00ns,1.00ns,12.08us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,686.25ms,1.00ns,0.00ns,17.00ns,28.00ns,1.00ns,16.67us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,754.91ms,1.00ns,0.00ns,19.00ns,27.00ns,1.00ns,14.08us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,750.85ms,41.00ns,0.00ns,28.00ns,22.00ns,1.00ns,6.88us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,690.91ms,1.00ns,0.00ns,18.00ns,24.00ns,1.00ns,9.46us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,753.83ms,41.00ns,0.00ns,24.00ns,21.00ns,1.00ns,4.92us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,752.20ms,41.00ns,0.00ns,25.00ns,33.00ns,1.00ns,16.25us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,743.43ms,41.00ns,0.00ns,28.00ns,24.00ns,1.00ns,9.42us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,748.01ms,41.00ns,0.00ns,26.00ns,29.00ns,1.00ns,16.79us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,69,1000000,743.80ms,42.00ns,0.00ns,33.00ns,27.00ns,1.00ns,16.71us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,739.77ms,42.00ns,0.00ns,33.00ns,25.00ns,1.00ns,11.46us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,69,1000000,745.10ms,42.00ns,0.00ns,37.00ns,27.00ns,1.00ns,16.42us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,69,1000000,802.32ms,42.00ns,0.00ns,48.00ns,28.00ns,1.00ns,16.54us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,69,1000000,745.06ms,42.00ns,0.00ns,40.00ns,23.00ns,1.00ns,12.17us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,69,1000000,813.81ms,42.00ns,0.00ns,41.00ns,27.00ns,1.00ns,15.50us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,69,1000000,803.64ms,83.00ns,0.00ns,71.00ns,41.00ns,1.00ns,17.46us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,748.97ms,42.00ns,0.00ns,50.00ns,34.00ns,1.00ns,23.79us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,69,1000000,809.40ms,42.00ns,0.00ns,45.00ns,26.00ns,1.00ns,16.17us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,69,1000000,860.87ms,83.00ns,0.00ns,82.00ns,43.00ns,1.00ns,23.62us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,69,1000000,800.68ms,83.00ns,0.00ns,65.00ns,36.00ns,1.00ns,14.38us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,69,1000000,810.20ms,83.00ns,0.00ns,63.00ns,36.00ns,1.00ns,16.08us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,2831,4.56s,1.06ms,0.00ns,1.06ms,5.80us,1.05ms,1.10ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,4620,4.56s,647.42us,0.00ns,649.44us,4.88us,647.21us,694.08us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,5154,4.56s,580.25us,0.00ns,582.04us,4.59us,580.00us,632.46us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,3665,4.56s,815.92us,0.00ns,818.69us,5.66us,815.21us,860.17us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,4296,4.56s,696.12us,0.00ns,698.35us,4.94us,695.67us,733.08us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,5402,4.56s,553.83us,0.00ns,555.36us,4.31us,553.54us,600.46us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,3278,4.56s,912.29us,0.00ns,915.16us,5.77us,911.00us,0.96ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,3273,4.56s,914.50us,0.00ns,916.78us,5.63us,913.04us,0.95ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,4222,4.56s,708.79us,0.00ns,710.65us,5.82us,706.50us,850.08us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,3110,4.55s,0.96ms,0.00ns,0.96ms,5.85us,0.96ms,1.01ms\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,2.32s,750.00ns,0.00ns,772.00ns,118.00ns,666.00ns,25.75us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,2.07s,667.00ns,0.00ns,666.00ns,104.00ns,541.00ns,24.88us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.95s,584.00ns,0.00ns,598.00ns,105.00ns,458.00ns,25.29us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,1.40s,333.00ns,0.00ns,318.00ns,86.00ns,208.00ns,25.08us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.29s,291.00ns,0.00ns,281.00ns,78.00ns,166.00ns,25.42us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,1.89s,542.00ns,0.00ns,560.00ns,105.00ns,417.00ns,25.46us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.58s,417.00ns,0.00ns,419.00ns,90.00ns,333.00ns,30.83us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.59s,417.00ns,0.00ns,421.00ns,83.00ns,333.00ns,25.25us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.28s,291.00ns,0.00ns,278.00ns,71.00ns,166.00ns,25.38us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,1.60s,417.00ns,0.00ns,414.00ns,88.00ns,291.00ns,25.54us\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,33335253,59,4.55s,50.81ms,0.00ns,50.95ms,332.97us,50.67ms,52.05ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,33335253,32,4.62s,94.86ms,126.00ns,94.87ms,21.23us,94.83ms,94.93ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,33335253,32,4.61s,94.86ms,438.00ns,94.86ms,21.36us,94.82ms,94.91ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,33335253,218,4.56s,13.80ms,125.00ns,13.80ms,60.00us,13.70ms,14.09ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,33335253,218,4.56s,13.79ms,1.00us,13.82ms,206.11us,13.70ms,15.96ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/binary,2.5.0,,33335253,4260,4.56s,703.33us,0.00ns,704.21us,5.29us,698.88us,745.29us\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,33335253,254,4.56s,11.72ms,854.00ns,11.82ms,342.81us,11.45ms,13.04ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,33335253,63,4.62s,47.84ms,0.00ns,47.85ms,46.74us,47.77ms,48.16ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,33335253,151,4.56s,19.89ms,0.00ns,19.88ms,104.92us,19.61ms,20.07ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,33335253,150,4.56s,20.03ms,41.00ns,20.04ms,33.90us,19.99ms,20.28ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,33335253,150,4.56s,20.05ms,42.00ns,20.06ms,36.09us,19.99ms,20.14ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2524,4.56s,1.19ms,0.00ns,1.19ms,6.29us,1.19ms,1.24ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.93ms,10.08us,3.91ms,3.99ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.55s,3.92ms,0.00ns,3.93ms,9.46us,3.91ms,3.98ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,15839,4.56s,188.79us,0.00ns,189.36us,2.52us,187.96us,223.67us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,15042,4.56s,198.67us,0.00ns,199.39us,2.66us,198.12us,233.71us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2868,4.55s,1.05ms,42.00ns,1.05ms,13.10us,1.02ms,1.10ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1269,4.55s,2.36ms,0.00ns,2.37ms,8.09us,2.35ms,2.42ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,3037,4.56s,0.99ms,0.00ns,0.99ms,6.16us,0.98ms,1.05ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,31349,4.56s,95.38us,0.00ns,95.64us,1.69us,95.21us,131.88us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,31382,4.56s,95.25us,0.00ns,95.55us,1.72us,95.08us,133.71us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3084,4.56s,0.97ms,0.00ns,0.97ms,6.03us,0.96ms,1.01ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3082,4.56s,0.97ms,0.00ns,0.97ms,5.93us,0.97ms,1.01ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2523,4.56s,1.19ms,0.00ns,1.19ms,6.24us,1.19ms,1.23ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.93ms,10.09us,3.91ms,3.98ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.93ms,10.30us,3.91ms,3.98ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,15644,4.56s,191.21us,0.00ns,191.72us,2.62us,190.29us,234.21us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,14889,4.56s,200.83us,0.00ns,201.44us,2.68us,200.17us,252.21us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3093,4.56s,0.97ms,0.00ns,0.97ms,12.10us,949.71us,1.03ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1269,4.56s,2.36ms,0.00ns,2.37ms,8.12us,2.35ms,2.41ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,3037,4.55s,0.99ms,0.00ns,0.99ms,5.90us,0.98ms,1.05ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,30361,4.56s,98.50us,0.00ns,98.75us,1.71us,98.29us,132.92us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,30392,4.56s,98.38us,0.00ns,98.67us,1.78us,98.21us,157.75us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3313,4.56s,903.88us,0.00ns,905.47us,5.73us,897.67us,0.96ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3315,4.56s,903.29us,0.00ns,905.13us,5.71us,897.92us,946.50us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2527,4.56s,1.18ms,0.00ns,1.19ms,6.49us,1.18ms,1.23ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,9.73us,3.91ms,3.97ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.93ms,12.00us,3.91ms,4.11ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,31476,4.56s,95.00us,0.00ns,95.27us,1.78us,94.38us,130.75us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,33594,4.56s,89.00us,0.00ns,89.25us,1.67us,88.54us,123.00us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3161,4.56s,938.25us,0.00ns,949.13us,22.97us,928.08us,1.04ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1268,4.56s,2.36ms,0.00ns,2.37ms,7.87us,2.35ms,2.41ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,3037,4.56s,0.99ms,0.00ns,0.99ms,5.58us,0.98ms,1.02ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,29489,4.56s,101.38us,0.00ns,101.68us,1.74us,101.17us,136.38us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,29576,4.56s,101.12us,0.00ns,101.38us,1.63us,100.92us,133.62us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3405,4.56s,881.00us,0.00ns,881.10us,8.23us,870.08us,932.29us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3399,4.56s,882.25us,0.00ns,882.71us,8.65us,869.25us,925.42us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2738,4.56s,1.09ms,0.00ns,1.10ms,150.58us,1.09ms,8.93ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,1198,5.03s,2.41ms,0.00ns,2.51ms,877.27us,2.40ms,26.10ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,1243,4.55s,2.41ms,0.00ns,2.41ms,8.42us,2.40ms,2.47ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,13587,4.56s,220.04us,0.00ns,220.76us,2.76us,219.04us,263.25us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,13464,4.56s,222.17us,0.00ns,222.77us,2.76us,221.38us,265.58us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3214,4.56s,930.29us,0.00ns,933.52us,9.51us,916.92us,0.99ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1269,4.56s,2.36ms,0.00ns,2.37ms,8.14us,2.36ms,2.41ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,107758,4.62s,27.71us,0.00ns,27.79us,796.00ns,27.58us,64.75us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,107896,4.63s,27.67us,0.00ns,27.75us,809.00ns,27.54us,72.04us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3388,4.56s,883.58us,0.00ns,885.65us,6.60us,875.83us,0.97ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3390,4.56s,883.00us,0.00ns,885.07us,5.97us,877.00us,931.38us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,1973,4.53s,1.19ms,0.00ns,1.52ms,12.50ms,1.19ms,556.15ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.93ms,10.23us,3.91ms,4.02ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.93ms,11.52us,3.91ms,4.03ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,16701,4.56s,179.12us,0.00ns,179.59us,2.54us,178.00us,212.38us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,17561,4.56s,170.25us,0.00ns,170.78us,2.46us,169.38us,206.67us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2942,4.56s,1.02ms,0.00ns,1.02ms,10.04us,1.01ms,1.08ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1268,4.56s,2.36ms,0.00ns,2.37ms,8.38us,2.36ms,2.41ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,2996,4.56s,1.00ms,0.00ns,1.00ms,5.69us,0.99ms,1.04ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3156,4.56s,948.83us,1.00ns,0.95ms,5.93us,942.83us,1.01ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3164,4.56s,946.50us,0.00ns,948.16us,5.65us,939.46us,1.01ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2513,4.55s,1.19ms,0.00ns,1.19ms,154.12us,1.19ms,8.84ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,755,4.56s,3.92ms,0.00ns,3.98ms,481.72us,3.91ms,12.03ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.55s,3.92ms,0.00ns,3.92ms,9.83us,3.91ms,4.01ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,6660,4.56s,448.96us,0.00ns,450.45us,4.17us,448.04us,502.21us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,7084,4.56s,422.17us,0.00ns,423.44us,4.07us,420.42us,469.92us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3361,4.56s,871.46us,0.00ns,892.57us,29.45us,865.29us,1.02ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1234,4.56s,2.43ms,0.00ns,2.43ms,8.04us,2.42ms,2.48ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,2896,4.56s,1.03ms,0.00ns,1.04ms,5.75us,1.02ms,1.09ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3543,4.56s,845.25us,0.00ns,846.86us,6.65us,833.79us,892.38us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3650,4.56s,820.38us,0.00ns,821.99us,5.51us,813.71us,863.33us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,6820,4.56s,438.29us,0.00ns,439.86us,4.18us,434.83us,473.67us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,582,4.53s,4.02ms,21.00ns,5.16ms,23.07ms,4.01ms,560.44ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,751,4.56s,4.00ms,0.00ns,4.00ms,9.16us,3.99ms,4.04ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,5353,4.56s,558.83us,0.00ns,560.43us,4.53us,555.92us,612.00us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,5859,4.55s,510.79us,0.00ns,512.01us,4.48us,500.71us,561.12us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2295,4.56s,1.30ms,0.00ns,1.31ms,7.41us,1.30ms,1.35ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1180,4.56s,2.54ms,0.00ns,2.54ms,9.28us,2.53ms,2.60ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,2438,4.56s,1.23ms,0.00ns,1.23ms,8.54us,1.21ms,1.27ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,2082,4.56s,1.44ms,20.00ns,1.44ms,10.01us,1.42ms,1.70ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,2345,4.56s,1.28ms,0.00ns,1.28ms,7.14us,1.27ms,1.33ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2126,4.56s,1.41ms,0.00ns,1.41ms,7.24us,1.41ms,1.48ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,734,4.55s,4.08ms,0.00ns,4.09ms,323.75us,4.07ms,12.80ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,728,4.54s,4.07ms,125.00ns,4.13ms,498.22us,4.06ms,12.43ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,4179,4.56s,716.00us,0.00ns,717.91us,5.36us,710.33us,758.21us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,4713,4.55s,634.54us,0.00ns,636.49us,4.87us,633.17us,685.00us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2852,4.56s,1.04ms,0.00ns,1.05ms,20.66us,1.03ms,1.20ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1221,4.55s,2.46ms,0.00ns,2.46ms,8.02us,2.45ms,2.50ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,2852,4.56s,1.05ms,0.00ns,1.05ms,6.03us,1.03ms,1.10ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,2819,4.56s,1.06ms,0.00ns,1.06ms,7.13us,1.06ms,1.20ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,2970,4.56s,1.01ms,0.00ns,1.01ms,6.13us,1.00ms,1.06ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,151305,20583,4.56s,145.25us,0.00ns,145.71us,2.19us,144.96us,204.58us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,151305,13348,4.55s,224.06us,20.00ns,224.71us,2.80us,223.75us,274.33us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,151305,10543,4.54s,224.00us,0.00ns,284.51us,5.42ms,217.67us,555.87ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,151305,32162,4.56s,93.04us,0.00ns,93.23us,1.67us,91.96us,131.58us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,151305,29689,4.56s,100.79us,0.00ns,101.00us,1.76us,99.71us,140.25us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,151305,221915,4.69s,13.42us,0.00ns,13.47us,540.00ns,13.08us,44.58us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,151305,13813,4.56s,216.54us,0.00ns,217.14us,2.75us,215.71us,250.71us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,151305,285880,4.75s,10.42us,0.00ns,10.44us,464.00ns,10.12us,40.67us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,291219,4.75s,10.21us,0.00ns,10.25us,454.00ns,9.96us,40.46us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,151305,240055,4.69s,12.83us,0.00ns,12.45us,775.00ns,11.46us,40.62us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,151305,256863,4.68s,11.50us,0.00ns,11.63us,562.00ns,11.17us,37.21us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,151305,20602,4.56s,145.12us,0.00ns,145.57us,2.15us,144.92us,193.88us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,151305,12267,4.87s,224.04us,0.00ns,270.52us,5.00ms,217.71us,553.80ms\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,151305,13377,4.54s,224.04us,0.00ns,224.21us,3.25us,217.71us,287.33us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,151305,29998,4.55s,99.83us,0.00ns,99.96us,3.18us,87.75us,143.50us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,151305,30394,4.56s,98.29us,0.00ns,98.65us,1.81us,97.75us,135.38us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,151305,261446,4.69s,10.96us,0.00ns,11.43us,1.07us,10.62us,43.25us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,151305,13814,4.56s,216.58us,0.00ns,217.13us,2.76us,215.79us,262.92us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,151305,283150,4.75s,10.54us,0.00ns,10.54us,458.00ns,10.25us,48.50us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,284064,4.69s,10.50us,0.00ns,10.51us,468.00ns,10.21us,41.25us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,151305,243845,4.69s,12.21us,0.00ns,12.25us,525.00ns,11.92us,46.04us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,151305,266747,4.69s,11.42us,0.00ns,11.20us,878.00ns,9.50us,41.58us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,500100,10427,4.55s,285.46us,0.00ns,287.68us,95.06us,285.33us,9.85ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,500100,2560,4.56s,1.14ms,0.00ns,1.17ms,261.88us,1.14ms,8.78ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,500100,2621,4.55s,1.14ms,0.00ns,1.14ms,5.98us,1.14ms,1.20ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,500100,8370,4.56s,357.29us,0.00ns,358.38us,3.58us,357.08us,417.08us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,500100,8368,4.56s,357.38us,0.00ns,358.49us,3.60us,357.00us,399.62us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,500100,10339,4.56s,286.58us,0.00ns,290.15us,7.32us,285.33us,362.50us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,500100,4178,4.56s,716.04us,0.00ns,718.01us,4.94us,713.50us,762.96us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,500100,10004,4.56s,299.12us,0.00ns,299.82us,3.26us,296.25us,341.42us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,500100,106131,4.63s,28.17us,0.00ns,28.22us,804.00ns,27.92us,58.83us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,500100,106338,4.63s,28.08us,0.00ns,28.16us,769.00ns,27.92us,58.62us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,500100,10475,4.56s,285.50us,0.00ns,286.37us,3.21us,285.33us,325.58us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,500100,6800,4.56s,293.50us,0.00ns,441.16us,11.64ms,285.33us,0.96s\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,500100,8719,4.55s,343.08us,0.00ns,344.03us,3.68us,342.42us,383.00us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,500100,8257,4.56s,364.21us,0.00ns,363.29us,4.46us,357.29us,408.25us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,500100,8965,4.56s,332.83us,0.00ns,334.60us,4.97us,328.21us,369.54us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,500100,818,4.56s,3.66ms,21.00ns,3.67ms,51.72us,3.65ms,4.33ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,500100,6015,4.56s,495.92us,0.00ns,498.78us,10.25us,483.42us,545.08us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,500100,10221,4.56s,292.62us,0.00ns,293.47us,3.18us,292.33us,333.21us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,500100,12098,4.56s,242.67us,0.00ns,247.94us,7.36us,242.54us,296.04us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,500100,15662,4.56s,190.92us,0.00ns,191.49us,2.60us,190.79us,242.88us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,500100,1174,4.56s,2.55ms,0.00ns,2.56ms,8.79us,2.55ms,2.61ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,500100,9417,4.56s,316.50us,0.00ns,318.52us,70.41us,309.04us,7.10ms\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1001,1000000,2.53s,583.00ns,0.00ns,1.19us,556.76us,458.00ns,556.71ms\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,4.47s,2.29us,0.00ns,2.29us,206.00ns,2.17us,32.75us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,4.47s,2.29us,0.00ns,2.28us,206.00ns,2.17us,55.58us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1001,1000000,2.49s,875.00ns,0.00ns,892.00ns,141.00ns,750.00ns,25.96us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,2.37s,833.00ns,0.00ns,831.00ns,123.00ns,708.00ns,30.38us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.89s,583.00ns,0.00ns,589.00ns,100.00ns,500.00ns,29.92us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,3.51s,1.38us,0.00ns,1.40us,160.00ns,1.29us,32.25us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.89s,583.00ns,0.00ns,589.00ns,111.00ns,500.00ns,31.21us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1001,1000000,807.39ms,83.00ns,0.00ns,66.00ns,46.00ns,1.00ns,23.33us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1001,1000000,752.57ms,83.00ns,0.00ns,66.00ns,34.00ns,1.00ns,11.92us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1001,1000000,1.89s,584.00ns,0.00ns,600.00ns,108.00ns,500.00ns,30.58us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1001,1000000,1.89s,584.00ns,0.00ns,600.00ns,108.00ns,500.00ns,25.54us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1001,1000000,2.13s,708.00ns,0.00ns,693.00ns,126.00ns,583.00ns,25.46us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,2.13s,709.00ns,0.00ns,722.00ns,128.00ns,625.00ns,26.25us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,2.07s,667.00ns,0.00ns,664.00ns,118.00ns,541.00ns,25.88us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1001,427688,4.82s,6.96us,0.00ns,6.96us,368.00ns,6.83us,37.25us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,3.02s,1.17us,0.00ns,1.16us,152.00ns,1.04us,32.21us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.89s,584.00ns,0.00ns,601.00ns,107.00ns,500.00ns,25.12us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.64s,500.00ns,0.00ns,491.00ns,135.00ns,375.00ns,24.88us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.53s,416.00ns,0.00ns,402.00ns,81.00ns,291.00ns,25.38us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1001,571453,4.91s,5.12us,0.00ns,5.20us,13.47us,5.00us,7.37ms\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1001,1000000,2.13s,708.00ns,0.00ns,705.00ns,125.00ns,583.00ns,40.25us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,550004,3241,4.56s,923.29us,0.00ns,925.84us,5.43us,921.88us,0.98ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,550004,2055,4.56s,1.46ms,0.00ns,1.46ms,6.52us,1.46ms,1.51ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,550004,2054,4.56s,1.46ms,0.00ns,1.46ms,12.54us,1.46ms,1.69ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,550004,17709,4.56s,168.88us,0.00ns,169.35us,2.33us,168.75us,227.12us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,550004,17711,4.56s,168.83us,0.00ns,169.34us,2.35us,168.71us,208.92us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,550004,23509,4.56s,119.29us,0.00ns,127.56us,12.90us,117.17us,179.75us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,550004,3808,4.56s,784.83us,0.00ns,787.77us,8.91us,784.67us,0.99ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,550004,9103,4.56s,328.75us,0.00ns,329.54us,3.51us,326.17us,388.21us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,550004,6141,4.56s,498.83us,0.00ns,488.51us,93.05us,470.58us,6.19ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,550004,6291,4.53s,470.88us,0.00ns,476.85us,175.41us,470.58us,14.15ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,550004,32448,4.56s,91.00us,0.00ns,92.41us,4.01us,86.96us,149.83us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,550004,32421,4.56s,90.92us,0.00ns,92.48us,4.24us,87.08us,136.96us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,720057,4474,4.56s,668.50us,0.00ns,670.53us,4.75us,668.38us,713.08us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,720057,2810,4.56s,1.06ms,0.00ns,1.07ms,6.08us,1.06ms,1.11ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,720057,2811,4.56s,1.06ms,0.00ns,1.07ms,5.81us,1.06ms,1.12ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,720057,65587,4.56s,45.58us,0.00ns,45.69us,1.09us,45.42us,76.42us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,720057,66266,4.56s,45.08us,0.00ns,45.22us,1.07us,44.92us,85.62us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,720057,73446,4.56s,40.71us,0.00ns,40.80us,1.01us,40.58us,71.54us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,720057,2902,4.56s,1.03ms,0.00ns,1.03ms,5.84us,1.03ms,1.08ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,720057,7633,4.52s,305.58us,0.00ns,392.97us,6.36ms,297.21us,555.51ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,9787,4.56s,305.58us,0.00ns,306.50us,3.26us,305.46us,376.33us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,720057,116180,4.62s,25.58us,0.00ns,25.77us,794.00ns,25.38us,68.83us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,720057,117935,4.63s,25.25us,0.00ns,25.39us,793.00ns,25.08us,60.67us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,720057,760,4.56s,3.95ms,21.00ns,3.95ms,10.38us,3.94ms,4.01ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,720057,760,4.56s,3.95ms,0.00ns,3.95ms,9.29us,3.94ms,4.00ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,720057,760,4.56s,3.95ms,0.00ns,3.95ms,10.00us,3.94ms,4.00ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,720057,4037,4.56s,740.96us,0.00ns,743.21us,4.99us,740.71us,784.25us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,720057,4043,4.56s,740.00us,0.00ns,742.09us,4.85us,739.75us,796.12us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,720057,4838,4.55s,616.50us,0.00ns,620.13us,10.34us,616.38us,745.62us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,720057,2888,5.11s,1.03ms,21.00ns,1.23ms,10.30ms,1.03ms,554.50ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,720057,759,4.53s,3.95ms,0.00ns,3.96ms,42.72us,3.94ms,4.31ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,759,4.55s,3.95ms,0.00ns,3.95ms,10.58us,3.94ms,4.01ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,720057,5770,4.56s,520.17us,0.00ns,519.95us,10.79us,476.62us,599.50us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,720057,5614,4.56s,526.58us,0.00ns,534.42us,15.15us,481.58us,583.83us\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,,155,4.56s,19.48ms,0.00ns,19.47ms,48.54us,19.38ms,19.58ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,,83,4.62s,36.54ms,0.00ns,36.55ms,22.33us,36.51ms,36.63ms\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1000,4697,4.56s,637.46us,0.00ns,638.73us,4.80us,631.46us,701.46us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1000,11238,4.56s,266.12us,0.00ns,266.92us,2.98us,263.00us,325.67us\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,806771,28,4.67s,110.61ms,6.88us,110.62ms,76.27us,110.50ms,110.78ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,806771,59,4.62s,50.99ms,0.00ns,51.16ms,1.23ms,50.95ms,60.53ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,4172,4.98s,694.58us,0.00ns,719.10us,391.60us,690.17us,23.23ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1823,4.55s,1.64ms,0.00ns,1.65ms,6.57us,1.64ms,1.70ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1823,4.56s,1.64ms,0.00ns,1.65ms,7.28us,1.64ms,1.70ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,9471,4.56s,315.79us,0.00ns,316.73us,3.37us,314.29us,353.62us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,9894,4.56s,302.21us,0.00ns,303.18us,3.41us,300.88us,345.17us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,13774,4.56s,216.42us,0.00ns,217.76us,9.06us,202.96us,270.17us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3377,4.56s,885.96us,0.00ns,888.43us,5.49us,885.25us,0.96ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,7830,4.56s,382.33us,0.00ns,383.12us,3.50us,378.00us,419.79us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,14127,4.56s,209.71us,0.00ns,212.31us,8.22us,198.62us,269.62us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,14974,4.56s,197.62us,0.00ns,200.31us,8.05us,186.21us,247.12us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,4664,4.55s,502.92us,0.00ns,643.25us,8.31ms,502.04us,567.72ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2001,4.56s,1.50ms,0.00ns,1.50ms,6.69us,1.49ms,1.54ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2008,4.56s,1.49ms,0.00ns,1.49ms,6.62us,1.49ms,1.55ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,10120,4.56s,295.62us,0.00ns,296.40us,3.87us,291.58us,340.88us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,14607,4.56s,204.71us,0.00ns,205.33us,3.09us,200.54us,246.71us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,11858,4.56s,251.50us,0.00ns,252.95us,10.58us,234.58us,313.33us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3304,4.56s,906.38us,0.00ns,908.11us,5.75us,904.17us,0.95ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,7178,4.56s,416.75us,0.00ns,417.92us,3.96us,412.88us,471.54us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,9992,4.55s,301.83us,0.00ns,300.19us,9.26us,285.71us,338.92us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,12127,4.56s,244.92us,0.00ns,247.34us,8.46us,233.58us,285.58us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,2805,4.56s,1.06ms,0.00ns,1.07ms,106.37us,1.06ms,6.67ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1336,4.52s,2.19ms,0.00ns,2.25ms,650.38us,2.19ms,22.24ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1404,4.56s,2.14ms,0.00ns,2.14ms,8.05us,2.13ms,2.19ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,3645,4.55s,820.79us,0.00ns,822.99us,5.68us,819.46us,0.96ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,3625,4.56s,825.54us,0.00ns,827.73us,5.30us,823.83us,869.75us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,3198,4.56s,936.46us,0.00ns,938.11us,6.42us,925.42us,0.98ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,2138,4.56s,1.40ms,0.00ns,1.40ms,7.20us,1.40ms,1.46ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,3292,4.56s,910.42us,0.00ns,911.25us,6.34us,904.04us,0.96ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,1856,4.56s,1.61ms,0.00ns,1.62ms,8.15us,1.58ms,1.66ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,2804,4.56s,1.07ms,0.00ns,1.07ms,6.51us,1.06ms,1.12ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,3016,4.56s,0.99ms,0.00ns,0.99ms,5.76us,0.99ms,1.04ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1286,4.53s,1.84ms,21.00ns,2.33ms,15.53ms,1.83ms,558.79ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1629,4.56s,1.84ms,0.00ns,1.84ms,7.32us,1.83ms,1.88ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,8193,4.56s,365.17us,0.00ns,366.16us,3.46us,364.50us,406.12us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,8820,4.56s,339.17us,0.00ns,340.10us,3.54us,337.83us,374.04us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,6291,4.56s,475.67us,0.00ns,476.88us,5.37us,472.21us,517.79us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3390,4.56s,882.33us,0.00ns,885.00us,6.44us,881.75us,1.05ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,7799,4.56s,383.79us,0.00ns,384.62us,3.60us,379.17us,419.21us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,6293,4.56s,475.42us,0.00ns,476.70us,4.47us,473.75us,538.50us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,6597,4.56s,453.50us,0.00ns,454.74us,3.93us,451.92us,503.17us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,1711,4.56s,1.75ms,0.00ns,1.75ms,6.90us,1.74ms,1.79ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1257,4.56s,2.38ms,0.00ns,2.39ms,170.84us,2.37ms,8.42ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1240,4.53s,2.38ms,0.00ns,2.42ms,420.79us,2.37ms,13.34ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,7861,4.55s,379.83us,0.00ns,381.60us,4.53us,377.00us,436.00us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,9475,4.56s,319.42us,0.00ns,316.57us,5.95us,309.58us,370.42us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,5852,4.56s,509.37us,0.00ns,512.65us,6.25us,507.71us,558.54us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3315,4.56s,902.75us,0.00ns,905.16us,5.68us,901.79us,1.00ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,7445,4.56s,401.96us,0.00ns,402.94us,3.72us,398.42us,438.38us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,5674,4.56s,527.00us,0.00ns,528.76us,4.59us,524.92us,580.62us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,6150,4.56s,486.00us,0.00ns,487.77us,9.59us,483.00us,648.96us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,5330,4.56s,561.67us,0.00ns,562.84us,4.66us,556.62us,604.83us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1682,4.56s,1.78ms,0.00ns,1.78ms,7.24us,1.78ms,1.83ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1332,4.52s,1.76ms,0.00ns,2.25ms,15.27ms,1.75ms,558.70ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,5142,4.55s,581.75us,0.00ns,583.40us,4.31us,580.04us,649.25us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,4775,4.56s,627.79us,0.00ns,628.23us,4.99us,623.08us,670.21us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,4662,4.56s,641.21us,0.00ns,643.48us,5.47us,639.79us,692.67us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,2548,4.55s,1.17ms,0.00ns,1.18ms,12.06us,1.17ms,1.30ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,4422,4.55s,676.04us,0.00ns,678.39us,6.78us,672.08us,768.79us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,3183,4.56s,940.46us,0.00ns,942.64us,6.28us,922.21us,0.99ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,4425,4.56s,676.62us,0.00ns,677.92us,5.44us,669.58us,735.29us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,6852,4.56s,436.46us,0.00ns,437.81us,3.97us,436.25us,472.12us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,2061,4.56s,1.45ms,0.00ns,1.46ms,6.63us,1.45ms,1.50ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,2056,4.56s,1.45ms,42.00ns,1.46ms,175.47us,1.45ms,9.40ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,50919,4.57s,57.83us,0.00ns,58.87us,47.85us,56.79us,9.37ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,80864,4.56s,36.71us,0.00ns,37.05us,1.20us,35.96us,81.96us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,19885,4.56s,145.79us,0.00ns,150.82us,8.42us,142.83us,201.62us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3322,4.56s,900.67us,0.00ns,903.02us,5.41us,899.88us,0.95ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,7798,4.56s,383.88us,0.00ns,384.70us,3.56us,377.00us,425.71us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,21323,4.56s,140.17us,0.00ns,140.65us,2.32us,137.67us,176.04us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,22957,4.56s,130.29us,0.00ns,130.63us,2.27us,127.50us,175.71us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,4388,4.55s,681.71us,0.00ns,683.68us,4.83us,681.00us,717.04us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1838,4.56s,1.63ms,21.00ns,1.63ms,6.94us,1.63ms,1.68ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1838,4.56s,1.63ms,0.00ns,1.63ms,23.93us,1.62ms,1.95ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,16170,4.55s,144.21us,0.00ns,185.48us,4.35ms,142.29us,553.05ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,32157,4.56s,93.04us,0.00ns,93.24us,1.83us,90.75us,144.21us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,13946,4.56s,213.38us,0.00ns,215.08us,7.92us,205.50us,274.79us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3323,4.56s,900.21us,0.00ns,902.80us,5.69us,899.21us,0.96ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,7522,4.56s,397.88us,0.00ns,398.81us,3.67us,393.83us,448.67us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,12919,4.56s,231.96us,0.00ns,232.17us,4.44us,224.54us,281.54us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,15065,4.56s,199.71us,0.00ns,199.10us,4.77us,192.33us,233.92us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,12751,4.56s,234.29us,0.00ns,235.22us,2.98us,233.08us,272.21us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1943,4.56s,1.54ms,0.00ns,1.54ms,6.69us,1.54ms,1.59ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1956,4.56s,1.53ms,0.00ns,1.53ms,6.90us,1.53ms,1.58ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,12685,4.56s,235.83us,0.00ns,236.46us,28.35us,227.46us,3.09ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,12308,4.57s,239.08us,0.00ns,243.70us,135.59us,236.83us,12.15ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,5758,4.56s,519.67us,0.00ns,520.98us,4.70us,516.29us,606.08us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3041,4.56s,0.98ms,0.00ns,0.99ms,5.60us,0.98ms,1.03ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,6126,4.56s,488.00us,0.00ns,489.69us,4.62us,483.96us,531.83us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,4902,4.56s,610.54us,0.00ns,611.99us,4.88us,604.58us,662.92us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,5721,4.56s,523.25us,0.00ns,524.37us,4.39us,514.54us,571.96us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8427,4.56s,354.88us,0.00ns,355.97us,3.62us,354.71us,405.62us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2133,4.56s,1.40ms,0.00ns,1.41ms,6.71us,1.40ms,1.45ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2133,4.56s,1.40ms,0.00ns,1.41ms,6.74us,1.40ms,1.46ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,290444,4.74s,10.25us,0.00ns,10.28us,446.00ns,10.12us,41.33us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,229033,4.68s,10.21us,0.00ns,13.05us,1.16ms,9.79us,555.41ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,11149,4.56s,270.08us,0.00ns,269.05us,11.95us,247.46us,321.71us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3408,4.56s,878.25us,0.00ns,880.48us,5.37us,875.17us,930.29us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8159,4.56s,366.83us,0.00ns,367.67us,3.49us,360.79us,404.21us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,86357,4.56s,34.54us,0.00ns,34.69us,1.02us,33.50us,66.04us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,86602,4.56s,34.50us,0.00ns,34.59us,879.00ns,34.38us,65.21us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,11920,4.56s,254.31us,20.00ns,251.64us,11.68us,233.21us,348.96us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,11912,4.56s,254.25us,0.00ns,251.81us,11.61us,232.79us,310.54us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,5499,4.55s,543.79us,0.00ns,545.51us,4.96us,543.42us,669.33us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1954,4.56s,1.53ms,0.00ns,1.54ms,6.99us,1.53ms,1.58ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1954,4.56s,1.53ms,0.00ns,1.54ms,6.61us,1.53ms,1.58ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,9605,4.52s,242.96us,0.00ns,312.25us,5.68ms,241.62us,556.46ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,12084,4.56s,243.83us,0.00ns,248.22us,6.80us,241.79us,292.38us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,21226,4.56s,137.79us,0.00ns,141.29us,7.37us,131.50us,188.62us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3407,4.56s,878.29us,0.00ns,880.68us,5.54us,875.21us,929.29us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8158,4.56s,366.88us,0.00ns,367.69us,3.59us,361.38us,413.92us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,72396,4.56s,41.29us,0.00ns,41.39us,1.02us,41.08us,74.79us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,72529,4.56s,41.21us,0.00ns,41.31us,1.01us,41.00us,70.96us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,22984,4.56s,129.00us,0.00ns,130.48us,4.60us,124.08us,170.38us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,23022,4.56s,128.83us,0.00ns,130.27us,4.54us,123.92us,167.29us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8466,4.56s,353.25us,0.00ns,354.32us,3.49us,353.00us,404.62us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1781,4.63s,1.40ms,0.00ns,1.72ms,13.09ms,1.40ms,554.08ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2134,4.57s,1.41ms,0.00ns,1.41ms,6.96us,1.40ms,1.45ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,303635,4.75s,9.79us,0.00ns,9.83us,432.00ns,9.67us,34.88us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,304188,4.75s,9.79us,0.00ns,9.81us,448.00ns,9.62us,40.58us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,19862,4.55s,147.21us,0.00ns,150.99us,10.81us,135.62us,196.00us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3407,4.56s,878.38us,0.00ns,880.71us,5.56us,875.38us,927.04us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8157,4.56s,366.88us,0.00ns,367.73us,3.66us,363.29us,412.21us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,86923,4.56s,34.38us,0.00ns,34.46us,936.00ns,34.21us,72.04us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,87027,4.62s,34.33us,0.00ns,34.42us,906.00ns,34.21us,67.38us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,22902,4.56s,129.58us,0.00ns,130.95us,4.92us,123.17us,171.25us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,22841,4.56s,129.54us,0.00ns,131.29us,61.63us,122.71us,9.41ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,2690,4.75s,1.08ms,0.00ns,1.12ms,314.76us,1.07ms,11.67ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1563,4.55s,1.92ms,0.00ns,1.92ms,7.70us,1.91ms,1.97ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1565,4.56s,1.92ms,0.00ns,1.92ms,10.93us,1.91ms,2.22ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,7145,4.56s,420.00us,0.00ns,419.85us,6.85us,412.42us,472.79us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,7158,4.56s,417.92us,0.00ns,419.07us,6.77us,411.88us,470.42us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,7018,4.56s,427.88us,0.00ns,427.44us,13.37us,402.67us,661.46us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3401,4.56s,880.79us,0.00ns,882.26us,5.73us,878.12us,923.62us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8158,4.56s,366.88us,0.00ns,367.70us,3.53us,360.42us,414.38us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,86927,4.56s,34.38us,0.00ns,34.46us,916.00ns,34.21us,65.04us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,87024,4.62s,34.33us,0.00ns,34.42us,904.00ns,34.21us,71.88us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,5657,4.54s,418.46us,0.00ns,530.29us,7.32ms,392.75us,551.00ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,7170,4.56s,419.17us,0.00ns,418.40us,9.39us,394.29us,467.58us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,682.43ms,1.00ns,0.00ns,17.00ns,28.00ns,1.00ns,16.08us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,747.66ms,42.00ns,0.00ns,49.00ns,31.00ns,1.00ns,16.42us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,743.54ms,42.00ns,0.00ns,49.00ns,35.00ns,1.00ns,16.17us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,691.47ms,1.00ns,0.00ns,19.00ns,32.00ns,1.00ns,21.54us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,684.92ms,1.00ns,0.00ns,20.00ns,27.00ns,1.00ns,9.54us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,695.17ms,1.00ns,0.00ns,16.00ns,24.00ns,1.00ns,12.50us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,684.62ms,1.00ns,0.00ns,19.00ns,30.00ns,1.00ns,20.96us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,692.21ms,1.00ns,0.00ns,19.00ns,25.00ns,1.00ns,12.00us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,682.55ms,1.00ns,0.00ns,18.00ns,25.00ns,1.00ns,9.42us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,624.38ms,1.00ns,0.00ns,17.00ns,20.00ns,1.00ns,1.58us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,746.83ms,42.00ns,0.00ns,39.00ns,34.00ns,1.00ns,21.42us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,746.47ms,42.00ns,0.00ns,39.00ns,34.00ns,1.00ns,19.50us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,686.47ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,6.92us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,746.41ms,42.00ns,0.00ns,54.00ns,32.00ns,1.00ns,16.33us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,750.51ms,42.00ns,0.00ns,53.00ns,45.00ns,1.00ns,28.46us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,747.83ms,1.00ns,0.00ns,19.00ns,25.00ns,1.00ns,9.42us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,688.60ms,1.00ns,0.00ns,20.00ns,35.00ns,1.00ns,22.42us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,690.83ms,1.00ns,0.00ns,16.00ns,24.00ns,1.00ns,7.21us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,691.80ms,1.00ns,0.00ns,19.00ns,34.00ns,1.00ns,17.92us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,691.20ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,6.83us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,692.58ms,1.00ns,0.00ns,18.00ns,29.00ns,1.00ns,19.88us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,690.69ms,1.00ns,0.00ns,17.00ns,20.00ns,1.00ns,167.00ns\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,754.70ms,42.00ns,0.00ns,34.00ns,21.00ns,1.00ns,9.50us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,749.87ms,42.00ns,0.00ns,34.00ns,67.00ns,1.00ns,23.21us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,684.35ms,1.00ns,0.00ns,18.00ns,25.00ns,1.00ns,9.25us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,808.20ms,42.00ns,0.00ns,61.00ns,29.00ns,1.00ns,10.17us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,750.55ms,42.00ns,0.00ns,60.00ns,26.00ns,1.00ns,9.79us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,687.03ms,1.00ns,0.00ns,19.00ns,25.00ns,1.00ns,11.88us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,684.61ms,1.00ns,0.00ns,20.00ns,35.00ns,1.00ns,24.58us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,687.00ms,1.00ns,0.00ns,16.00ns,31.00ns,1.00ns,16.38us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,683.37ms,1.00ns,0.00ns,19.00ns,28.00ns,1.00ns,16.42us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,685.50ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,6.67us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,690.79ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,9.29us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,687.68ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,9.29us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,747.09ms,1.00ns,0.00ns,21.00ns,23.00ns,1.00ns,9.96us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,686.34ms,41.00ns,0.00ns,22.00ns,24.00ns,1.00ns,9.33us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,750.84ms,41.00ns,0.00ns,26.00ns,24.00ns,1.00ns,7.04us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,801.35ms,83.00ns,0.00ns,72.00ns,32.00ns,1.00ns,15.88us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,809.48ms,83.00ns,0.00ns,70.00ns,37.00ns,1.00ns,14.04us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,631.47ms,1.00ns,0.00ns,20.00ns,20.00ns,1.00ns,167.00ns\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,745.83ms,41.00ns,0.00ns,27.00ns,28.00ns,1.00ns,17.17us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,688.85ms,1.00ns,0.00ns,18.00ns,25.00ns,1.00ns,13.04us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,690.22ms,1.00ns,0.00ns,20.00ns,25.00ns,1.00ns,9.96us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,689.87ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,6.71us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,693.21ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,6.75us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,691.11ms,1.00ns,0.00ns,17.00ns,28.00ns,1.00ns,16.79us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,684.41ms,1.00ns,0.00ns,21.00ns,24.00ns,1.00ns,6.96us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,684.16ms,41.00ns,0.00ns,22.00ns,37.00ns,1.00ns,28.25us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,2181,4.56s,1.37ms,0.00ns,1.38ms,6.88us,1.36ms,1.43ms\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,2582,4.51s,907.17us,0.00ns,1.16ms,10.82ms,882.08us,550.48ms\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,3298,4.55s,907.08us,0.00ns,909.72us,5.43us,906.88us,0.99ms\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,285622,4.69s,10.42us,0.00ns,10.45us,465.00ns,10.29us,42.29us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,291031,4.75s,10.25us,0.00ns,10.26us,461.00ns,10.08us,42.62us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,13264,4.56s,225.21us,0.00ns,226.13us,3.73us,219.08us,261.96us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3412,4.56s,877.75us,0.00ns,879.38us,5.54us,875.12us,919.00us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613402,37437,4.56s,80.67us,0.00ns,80.08us,2.43us,75.25us,111.21us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,38848,4.56s,76.42us,0.00ns,77.17us,2.00us,75.62us,129.42us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,14137,4.55s,211.58us,0.00ns,212.17us,2.80us,209.83us,261.92us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,14169,4.56s,211.00us,0.00ns,211.70us,2.80us,209.79us,250.67us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,42,1000000,750.94ms,41.00ns,0.00ns,23.00ns,23.00ns,1.00ns,7.04us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,749.63ms,42.00ns,0.00ns,41.00ns,22.00ns,1.00ns,13.96us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,746.85ms,42.00ns,0.00ns,40.00ns,18.00ns,1.00ns,9.92us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,747.84ms,42.00ns,0.00ns,34.00ns,31.00ns,1.00ns,15.92us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,691.13ms,1.00ns,0.00ns,20.00ns,21.00ns,1.00ns,1.25us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,42,1000000,692.51ms,1.00ns,0.00ns,16.00ns,25.00ns,1.00ns,9.25us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,1.33s,1.00ns,0.00ns,21.00ns,25.00ns,1.00ns,9.08us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,692.11ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,5.50us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,691.94ms,1.00ns,0.00ns,17.00ns,22.00ns,1.00ns,9.96us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,42,1000000,872.30ms,84.00ns,0.00ns,100.00ns,40.00ns,1.00ns,16.46us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,42,1000000,874.16ms,84.00ns,0.00ns,99.00ns,38.00ns,1.00ns,17.79us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,5907,4.56s,506.38us,0.00ns,507.86us,4.22us,506.08us,555.00us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1992,4.56s,1.50ms,0.00ns,1.51ms,6.83us,1.50ms,1.56ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1992,4.56s,1.50ms,0.00ns,1.51ms,7.13us,1.50ms,1.56ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,58348,4.56s,51.21us,0.00ns,51.37us,1.22us,50.46us,89.25us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,57694,4.56s,51.83us,0.00ns,51.95us,1.31us,50.92us,89.62us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,37403,4.56s,78.75us,0.00ns,80.16us,4.46us,75.83us,124.67us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3409,4.56s,878.17us,0.00ns,880.15us,5.33us,875.21us,933.08us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,8158,4.56s,366.92us,0.00ns,367.72us,3.47us,363.38us,408.17us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613427,83459,4.56s,35.79us,0.00ns,35.90us,913.00ns,35.62us,64.71us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,65686,4.55s,35.75us,0.00ns,45.62us,2.17ms,34.71us,555.29ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,41638,4.54s,72.25us,0.00ns,72.00us,1.97us,70.12us,112.83us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,40374,4.56s,73.79us,0.00ns,74.25us,2.11us,71.58us,108.46us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,31,1000000,691.35ms,1.00ns,0.00ns,17.00ns,20.00ns,1.00ns,167.00ns\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,745.65ms,42.00ns,0.00ns,49.00ns,28.00ns,1.00ns,12.67us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,753.44ms,42.00ns,0.00ns,49.00ns,22.00ns,1.00ns,9.54us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,683.76ms,1.00ns,0.00ns,20.00ns,24.00ns,1.00ns,9.42us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,691.25ms,1.00ns,0.00ns,20.00ns,29.00ns,1.00ns,14.08us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,31,1000000,687.61ms,1.00ns,0.00ns,16.00ns,25.00ns,1.00ns,9.79us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,692.31ms,1.00ns,0.00ns,19.00ns,31.00ns,1.00ns,20.96us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,692.18ms,1.00ns,0.00ns,19.00ns,20.00ns,1.00ns,1.38us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,686.32ms,1.00ns,0.00ns,18.00ns,25.00ns,1.00ns,9.92us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,691.77ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,9.38us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,31,1000000,812.32ms,42.00ns,0.00ns,54.00ns,39.00ns,1.00ns,16.29us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,31,1000000,815.51ms,42.00ns,0.00ns,54.00ns,32.00ns,1.00ns,16.83us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8065,4.56s,370.83us,0.00ns,371.94us,3.54us,370.67us,415.04us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2119,4.56s,1.41ms,0.00ns,1.42ms,6.63us,1.41ms,1.46ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2119,4.56s,1.41ms,0.00ns,1.42ms,6.92us,1.41ms,1.47ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,143455,4.63s,20.83us,0.00ns,20.86us,681.00ns,20.58us,51.29us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,144262,4.63s,20.71us,0.00ns,20.75us,682.00ns,20.46us,62.79us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,18899,4.56s,156.08us,0.00ns,158.69us,55.42us,148.12us,7.71ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3297,4.73s,878.29us,0.00ns,910.09us,279.01us,875.08us,10.47ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8145,4.56s,366.88us,0.00ns,368.28us,5.40us,360.12us,438.67us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,85149,4.56s,35.04us,0.00ns,35.18us,1.14us,34.92us,72.17us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,85331,4.56s,35.00us,0.00ns,35.11us,937.00ns,34.88us,71.46us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,20145,4.55s,146.96us,0.00ns,148.87us,5.46us,140.00us,189.83us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,20137,4.55s,147.04us,0.00ns,148.94us,5.46us,139.75us,190.21us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8065,4.55s,370.83us,0.00ns,371.94us,3.60us,370.67us,413.75us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2120,4.56s,1.41ms,0.00ns,1.42ms,6.25us,1.41ms,1.45ms\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2120,4.56s,1.41ms,0.00ns,1.42ms,6.23us,1.41ms,1.45ms\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,42127,4.56s,71.08us,0.00ns,71.17us,1.47us,70.08us,111.38us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,37442,4.55s,62.54us,0.00ns,80.08us,2.87ms,59.04us,554.22ms\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,17556,4.55s,170.21us,0.00ns,170.84us,9.43us,155.54us,214.75us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3407,4.56s,878.67us,0.00ns,880.70us,5.29us,875.46us,930.38us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8157,4.56s,366.92us,0.00ns,367.74us,3.54us,363.75us,409.12us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,86520,4.56s,34.54us,0.00ns,34.62us,933.00ns,34.38us,65.33us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,86603,4.56s,34.50us,0.00ns,34.59us,0.96us,34.33us,65.04us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,18902,4.56s,158.12us,0.00ns,158.66us,7.27us,146.58us,197.92us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,18739,4.56s,159.46us,0.00ns,160.04us,7.43us,147.08us,200.75us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,5911,4.56s,506.00us,0.00ns,507.54us,4.29us,505.54us,555.08us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,3263,4.56s,917.38us,0.00ns,919.55us,5.43us,915.54us,1.00ms\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3253,4.56s,917.46us,0.00ns,922.18us,122.76us,915.58us,7.90ms\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,43220,4.56s,67.04us,0.00ns,69.36us,47.43us,65.83us,7.53ms\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,43050,4.56s,69.17us,0.00ns,69.63us,1.61us,68.38us,122.17us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,30180,4.56s,99.00us,0.00ns,99.35us,1.79us,97.96us,128.50us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3407,4.56s,878.17us,0.00ns,880.61us,5.43us,875.12us,931.42us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,65465,4.56s,45.58us,0.00ns,45.78us,1.27us,45.33us,82.67us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,65278,4.56s,45.75us,0.00ns,45.91us,1.08us,45.50us,78.62us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,35736,4.56s,83.62us,0.00ns,83.90us,1.75us,82.96us,137.62us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,35602,4.55s,83.92us,0.00ns,84.22us,1.70us,83.17us,121.62us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,7612,4.56s,392.92us,0.00ns,394.11us,3.75us,392.75us,436.71us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,3243,4.56s,923.00us,0.00ns,925.16us,5.45us,919.92us,0.97ms\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2542,4.56s,922.92us,0.00ns,1.18ms,10.99ms,895.67us,554.73ms\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,51513,4.56s,58.04us,0.00ns,58.19us,1.30us,56.62us,90.08us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,46987,4.56s,64.00us,0.00ns,63.80us,1.99us,58.04us,98.42us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,45968,4.56s,64.96us,0.00ns,65.22us,1.43us,64.29us,95.42us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3406,4.55s,878.04us,0.00ns,881.00us,8.35us,875.96us,0.98ms\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,82337,4.56s,36.29us,0.00ns,36.38us,926.00ns,36.12us,67.62us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,82385,4.56s,36.29us,0.00ns,36.36us,890.00ns,36.12us,67.00us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,57098,4.56s,52.33us,0.00ns,52.49us,1.26us,51.50us,83.88us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,58295,4.56s,51.21us,0.00ns,51.41us,1.34us,50.33us,101.33us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8231,4.56s,363.42us,0.00ns,364.46us,3.46us,363.29us,414.92us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,3245,4.56s,919.71us,0.00ns,924.64us,156.14us,894.83us,9.81ms\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3219,4.51s,919.75us,0.00ns,931.99us,205.56us,893.17us,11.68ms\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,106894,4.63s,27.92us,0.00ns,28.02us,827.00ns,27.58us,72.38us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,121273,4.63s,24.58us,0.00ns,24.69us,775.00ns,24.33us,55.54us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,46355,4.56s,64.46us,0.00ns,64.67us,1.36us,64.04us,101.12us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3410,4.56s,877.58us,0.00ns,879.84us,5.45us,874.75us,921.17us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,83880,4.56s,35.62us,0.00ns,35.71us,937.00ns,35.46us,78.00us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,83969,4.56s,35.58us,0.00ns,35.68us,932.00ns,35.42us,74.83us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,50134,4.56s,59.62us,0.00ns,59.79us,1.26us,58.96us,91.62us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,53077,4.56s,56.21us,0.00ns,56.47us,1.24us,55.83us,85.92us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,690.39ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,9.96us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,754.71ms,42.00ns,0.00ns,40.00ns,17.00ns,1.00ns,9.71us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,745.53ms,42.00ns,0.00ns,39.00ns,25.00ns,1.00ns,16.62us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,689.88ms,41.00ns,0.00ns,22.00ns,27.00ns,1.00ns,16.62us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,630.54ms,41.00ns,0.00ns,25.00ns,25.00ns,1.00ns,10.21us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,684.76ms,41.00ns,0.00ns,23.00ns,29.00ns,1.00ns,14.12us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,682.23ms,1.00ns,0.00ns,19.00ns,27.00ns,1.00ns,17.12us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,687.14ms,1.00ns,0.00ns,19.00ns,30.00ns,1.00ns,16.08us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,694.11ms,1.00ns,0.00ns,19.00ns,76.00ns,1.00ns,56.58us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,689.76ms,1.00ns,0.00ns,19.00ns,32.00ns,1.00ns,16.42us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,1.64s,167.00ns,0.00ns,751.00ns,556.22us,41.00ns,556.16ms\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,853.06ms,83.00ns,0.00ns,79.00ns,22.00ns,1.00ns,7.42us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,690.72ms,1.00ns,0.00ns,19.00ns,20.00ns,1.00ns,208.00ns\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,753.77ms,42.00ns,0.00ns,44.00ns,23.00ns,1.00ns,12.38us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,753.20ms,42.00ns,0.00ns,43.00ns,27.00ns,1.00ns,15.96us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,685.06ms,1.00ns,0.00ns,21.00ns,22.00ns,1.00ns,7.04us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,689.77ms,41.00ns,0.00ns,25.00ns,23.00ns,1.00ns,7.21us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,692.10ms,1.00ns,0.00ns,18.00ns,20.00ns,1.00ns,1.58us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,692.80ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,9.33us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,691.85ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,6.67us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,687.10ms,1.00ns,0.00ns,18.00ns,23.00ns,1.00ns,9.46us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,687.08ms,1.00ns,0.00ns,18.00ns,31.00ns,1.00ns,21.38us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,815.76ms,83.00ns,0.00ns,66.00ns,45.00ns,1.00ns,23.29us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,754.34ms,42.00ns,0.00ns,34.00ns,30.00ns,1.00ns,16.58us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,2186,4.56s,1.37ms,21.00ns,1.37ms,7.41us,1.36ms,1.43ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,3298,4.56s,907.08us,0.00ns,909.71us,5.33us,906.92us,0.95ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,3298,4.56s,907.08us,0.00ns,909.72us,5.38us,906.92us,0.95ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,379364,4.75s,7.83us,0.00ns,7.86us,361.00ns,7.71us,38.54us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,389457,4.81s,7.62us,0.00ns,7.65us,385.00ns,7.50us,38.29us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,16012,4.56s,186.04us,0.00ns,187.31us,3.19us,184.17us,224.67us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3413,4.56s,877.79us,0.00ns,879.17us,5.76us,875.17us,932.12us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613402,44281,5.09s,64.67us,0.00ns,79.75us,2.64ms,64.04us,555.19ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,47777,4.54s,62.54us,0.00ns,62.74us,1.29us,62.17us,92.42us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,18299,4.56s,163.58us,0.00ns,163.89us,2.40us,161.79us,196.17us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,18493,4.56s,161.54us,0.00ns,162.18us,3.08us,158.50us,196.25us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,1787,4.56s,1.68ms,0.00ns,1.68ms,7.33us,1.67ms,1.74ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1302,4.56s,2.30ms,21.00ns,2.31ms,8.11us,2.29ms,2.37ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1302,4.56s,2.30ms,0.00ns,2.31ms,8.07us,2.29ms,2.35ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,381534,4.75s,7.79us,0.00ns,7.81us,384.00ns,7.67us,37.67us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,386403,4.75s,7.71us,0.00ns,7.71us,380.00ns,7.58us,38.33us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,10043,4.56s,297.46us,0.00ns,298.67us,5.00us,291.92us,333.83us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3407,4.56s,875.54us,0.00ns,880.51us,90.15us,875.17us,6.11ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,7888,4.83s,366.92us,0.00ns,380.28us,157.20us,363.29us,9.68ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613402,52983,4.56s,55.08us,0.00ns,56.57us,2.87us,54.54us,98.46us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,53919,4.56s,54.96us,0.00ns,55.59us,1.65us,54.25us,93.92us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,10705,4.54s,279.12us,0.00ns,280.20us,3.36us,276.62us,328.50us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,10794,4.56s,277.42us,0.00ns,277.89us,3.65us,274.46us,320.96us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,42,1000000,687.46ms,41.00ns,0.00ns,24.00ns,32.00ns,1.00ns,16.75us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,685.98ms,42.00ns,0.00ns,36.00ns,26.00ns,1.00ns,10.17us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,743.44ms,42.00ns,0.00ns,35.00ns,34.00ns,1.00ns,21.17us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,751.69ms,42.00ns,0.00ns,34.00ns,25.00ns,1.00ns,14.21us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,749.03ms,41.00ns,0.00ns,30.00ns,30.00ns,1.00ns,17.00us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,42,1000000,746.89ms,42.00ns,0.00ns,32.00ns,21.00ns,1.00ns,10.12us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,685.63ms,1.00ns,0.00ns,20.00ns,35.00ns,1.00ns,21.38us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,693.29ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,6.96us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,691.73ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,6.92us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,42,1000000,1.24s,250.00ns,0.00ns,255.00ns,53.00ns,166.00ns,16.67us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,42,1000000,0.99s,125.00ns,0.00ns,132.00ns,42.00ns,41.00ns,20.25us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,42,1000000,751.72ms,42.00ns,0.00ns,43.00ns,32.00ns,1.00ns,19.50us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,816.45ms,42.00ns,0.00ns,62.00ns,44.00ns,1.00ns,23.29us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,813.56ms,42.00ns,0.00ns,61.00ns,33.00ns,1.00ns,14.42us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,689.57ms,41.00ns,0.00ns,26.00ns,24.00ns,1.00ns,7.08us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,691.62ms,41.00ns,0.00ns,25.00ns,34.00ns,1.00ns,16.79us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,42,1000000,688.17ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,9.25us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,686.99ms,1.00ns,0.00ns,20.00ns,29.00ns,1.00ns,16.62us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,42,1000000,691.01ms,1.00ns,0.00ns,21.00ns,36.00ns,1.00ns,23.17us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,691.56ms,1.00ns,0.00ns,20.00ns,27.00ns,1.00ns,16.88us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,689.12ms,1.00ns,0.00ns,20.00ns,28.00ns,1.00ns,16.46us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,42,1000000,931.92ms,125.00ns,0.00ns,115.00ns,46.00ns,1.00ns,16.67us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,42,1000000,804.57ms,42.00ns,0.00ns,57.00ns,35.00ns,1.00ns,16.67us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,4887,4.56s,612.12us,0.00ns,613.89us,4.81us,610.67us,660.58us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,2992,4.89s,913.08us,0.00ns,1.11ms,10.55ms,887.46us,578.28ms\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,3278,4.55s,913.04us,0.00ns,915.23us,5.24us,911.17us,0.98ms\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,25419,4.56s,117.62us,0.00ns,117.97us,1.97us,116.88us,153.08us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,24748,4.56s,120.83us,0.00ns,121.17us,2.00us,120.00us,155.42us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,31172,4.56s,94.88us,0.00ns,96.19us,2.83us,93.25us,147.38us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3412,4.56s,877.88us,0.00ns,879.39us,5.89us,875.17us,926.67us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613427,76968,4.56s,38.83us,0.00ns,38.92us,0.97us,38.67us,76.17us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,77009,4.56s,38.79us,0.00ns,38.91us,0.97us,38.62us,70.62us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,31223,4.56s,95.50us,0.00ns,96.04us,1.85us,94.83us,136.42us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,31897,4.56s,93.54us,0.00ns,94.01us,1.86us,92.62us,126.25us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,4361,4.56s,685.92us,0.00ns,687.92us,5.02us,685.12us,739.96us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1436,4.54s,1.63ms,20.00ns,2.09ms,14.63ms,1.63ms,556.08ms\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1838,4.55s,1.63ms,0.00ns,1.63ms,6.71us,1.63ms,1.68ms\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,39645,4.56s,75.75us,0.00ns,75.62us,1.69us,74.25us,122.25us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,35642,4.56s,83.83us,0.00ns,84.12us,1.64us,83.29us,119.79us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,22205,4.55s,131.00us,0.00ns,135.05us,6.66us,128.67us,176.08us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3416,4.56s,875.42us,0.00ns,878.36us,5.84us,875.25us,924.88us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,8162,4.56s,366.71us,0.00ns,367.54us,3.52us,360.04us,415.58us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613427,72867,4.56s,41.00us,0.00ns,41.12us,0.98us,40.79us,71.96us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,72785,4.56s,41.04us,0.00ns,41.17us,0.99us,40.83us,72.08us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,23885,4.56s,125.67us,0.00ns,125.55us,2.64us,123.08us,159.21us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,18760,4.54s,124.96us,0.00ns,159.87us,4.04ms,121.46us,552.81ms\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,31,1000000,756.14ms,1.00ns,0.00ns,19.00ns,20.00ns,1.00ns,1.92us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,688.67ms,41.00ns,0.00ns,22.00ns,21.00ns,1.00ns,1.29us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,680.76ms,41.00ns,0.00ns,21.00ns,29.00ns,1.00ns,20.83us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,690.65ms,41.00ns,0.00ns,28.00ns,27.00ns,1.00ns,9.71us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,682.31ms,41.00ns,0.00ns,27.00ns,21.00ns,1.00ns,6.71us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,31,1000000,688.82ms,41.00ns,0.00ns,24.00ns,27.00ns,1.00ns,16.42us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,691.46ms,1.00ns,0.00ns,18.00ns,29.00ns,1.00ns,19.71us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,685.85ms,1.00ns,0.00ns,18.00ns,28.00ns,1.00ns,19.33us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,685.10ms,1.00ns,0.00ns,18.00ns,27.00ns,1.00ns,16.33us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,31,1000000,1.24s,250.00ns,0.00ns,236.00ns,72.00ns,125.00ns,24.71us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,31,1000000,928.58ms,125.00ns,0.00ns,119.00ns,41.00ns,1.00ns,23.58us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,31,1000000,689.51ms,41.00ns,0.00ns,22.00ns,35.00ns,1.00ns,16.92us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,754.68ms,42.00ns,0.00ns,44.00ns,24.00ns,1.00ns,16.58us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,742.84ms,42.00ns,0.00ns,42.00ns,19.00ns,1.00ns,13.29us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,690.95ms,1.00ns,0.00ns,20.00ns,27.00ns,1.00ns,16.00us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,690.17ms,41.00ns,0.00ns,25.00ns,29.00ns,1.00ns,14.08us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,31,1000000,688.52ms,1.00ns,0.00ns,19.00ns,30.00ns,1.00ns,16.75us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,686.17ms,1.00ns,0.00ns,19.00ns,26.00ns,1.00ns,9.17us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,690.64ms,1.00ns,0.00ns,19.00ns,27.00ns,1.00ns,15.62us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,692.28ms,1.00ns,0.00ns,19.00ns,28.00ns,1.00ns,15.79us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,691.13ms,1.00ns,0.00ns,18.00ns,32.00ns,1.00ns,21.12us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,31,1000000,873.09ms,83.00ns,0.00ns,83.00ns,29.00ns,1.00ns,16.75us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,31,1000000,754.50ms,42.00ns,0.00ns,44.00ns,24.00ns,1.00ns,16.17us\n"
  },
  {
    "path": "benchmarks/record/aarch64/2023-08-24.csv",
    "content": "name,model,rebar_version,engine,engine_version,err,haystack_len,iters,total,median,mad,mean,stddev,min,max\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,6327,4.55s,472.71us,0.00ns,474.12us,4.09us,472.12us,522.71us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,7830,4.56s,382.62us,0.00ns,383.09us,4.06us,379.83us,444.38us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,8502,4.56s,351.88us,0.00ns,352.85us,3.69us,349.92us,386.58us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,6165,4.56s,485.17us,0.00ns,486.61us,4.40us,484.50us,532.92us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,7853,4.56s,380.46us,0.00ns,381.99us,3.94us,378.17us,413.92us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,8213,4.56s,364.46us,0.00ns,365.26us,3.50us,363.38us,406.12us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,5900,4.56s,506.87us,0.00ns,508.42us,4.27us,506.21us,556.88us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,5883,4.56s,508.33us,0.00ns,509.94us,4.79us,507.21us,602.04us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,7626,4.56s,391.88us,0.00ns,393.35us,4.08us,389.92us,442.92us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,5841,4.56s,511.96us,0.00ns,513.57us,4.37us,510.88us,571.62us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,5343,4.56s,559.75us,0.00ns,561.52us,4.90us,559.21us,654.92us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,3020,4.56s,0.99ms,0.00ns,0.99ms,6.39us,0.99ms,1.04ms\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,4495,4.56s,665.71us,0.00ns,667.48us,4.75us,662.83us,699.08us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,5584,4.56s,535.54us,0.00ns,537.23us,4.46us,534.75us,586.42us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,3199,4.56s,936.25us,0.00ns,937.86us,5.99us,931.17us,0.99ms\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,2923,4.56s,1.02ms,0.00ns,1.03ms,6.44us,1.02ms,1.12ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,3800,4.56s,787.21us,0.00ns,789.58us,5.27us,787.00us,830.04us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,2085,4.56s,1.44ms,0.00ns,1.44ms,8.22us,1.43ms,1.49ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,3162,4.56s,946.96us,0.00ns,948.72us,5.81us,940.71us,0.99ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,3965,4.56s,754.33us,0.00ns,756.61us,5.11us,754.04us,795.08us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,2446,4.56s,1.22ms,0.00ns,1.23ms,8.23us,1.22ms,1.42ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,2233,4.56s,1.34ms,0.00ns,1.34ms,7.00us,1.34ms,1.39ms\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,1.23s,292.00ns,0.00ns,297.00ns,73.00ns,208.00ns,25.17us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,1.23s,291.00ns,0.00ns,273.00ns,73.00ns,166.00ns,23.75us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.17s,250.00ns,0.00ns,246.00ns,66.00ns,125.00ns,24.54us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,1.10s,167.00ns,0.00ns,185.00ns,50.00ns,83.00ns,25.08us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.23s,250.00ns,0.00ns,233.00ns,74.00ns,125.00ns,25.21us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,1.23s,250.00ns,0.00ns,240.00ns,70.00ns,125.00ns,22.79us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.04s,208.00ns,0.00ns,206.00ns,71.00ns,83.00ns,29.88us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.17s,208.00ns,0.00ns,207.00ns,60.00ns,83.00ns,24.92us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.29s,291.00ns,0.00ns,275.00ns,80.00ns,166.00ns,24.92us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,1.16s,209.00ns,0.00ns,223.00ns,67.00ns,125.00ns,24.04us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,1.71s,459.00ns,0.00ns,478.00ns,93.00ns,333.00ns,24.58us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,1.29s,291.00ns,0.00ns,278.00ns,77.00ns,166.00ns,29.79us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.29s,292.00ns,0.00ns,291.00ns,78.00ns,166.00ns,24.92us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,1.65s,458.00ns,0.00ns,460.00ns,105.00ns,333.00ns,52.00us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,1.41s,333.00ns,0.00ns,324.00ns,81.00ns,208.00ns,25.42us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,1.41s,333.00ns,0.00ns,334.00ns,78.00ns,250.00ns,25.08us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,2.31s,791.00ns,0.00ns,775.00ns,124.00ns,625.00ns,29.71us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,1.59s,417.00ns,0.00ns,415.00ns,105.00ns,291.00ns,25.54us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.47s,333.00ns,0.00ns,339.00ns,80.00ns,250.00ns,25.71us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,2.19s,708.00ns,0.00ns,720.00ns,119.00ns,583.00ns,25.92us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,1.77s,500.00ns,0.00ns,507.00ns,108.00ns,416.00ns,32.62us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.72s,458.00ns,0.00ns,467.00ns,85.00ns,375.00ns,30.33us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,810.12ms,42.00ns,0.00ns,49.00ns,32.00ns,1.00ns,14.12us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,812.37ms,42.00ns,0.00ns,44.00ns,15.00ns,1.00ns,6.79us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,810.25ms,42.00ns,0.00ns,38.00ns,35.00ns,1.00ns,21.00us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,745.94ms,41.00ns,0.00ns,31.00ns,28.00ns,1.00ns,16.88us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,747.23ms,41.00ns,0.00ns,28.00ns,33.00ns,1.00ns,16.75us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,749.99ms,42.00ns,0.00ns,32.00ns,26.00ns,1.00ns,14.12us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,803.52ms,42.00ns,0.00ns,43.00ns,17.00ns,1.00ns,9.33us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,804.60ms,42.00ns,0.00ns,43.00ns,28.00ns,1.00ns,15.38us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,746.98ms,41.00ns,0.00ns,30.00ns,35.00ns,1.00ns,21.25us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,801.40ms,42.00ns,0.00ns,44.00ns,20.00ns,1.00ns,9.83us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,238385,4.69s,12.50us,0.00ns,12.53us,502.00ns,12.38us,55.21us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,396005,4.81s,7.50us,0.00ns,7.52us,366.00ns,7.38us,39.25us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,396211,4.82s,7.50us,0.00ns,7.52us,369.00ns,7.38us,38.92us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,132790,4.63s,21.79us,0.00ns,22.54us,1.49us,21.29us,53.58us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,15494,4.56s,193.75us,0.00ns,193.56us,17.21us,169.75us,275.62us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,396325,4.82s,7.50us,0.00ns,7.52us,359.00ns,7.38us,38.83us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,130340,4.62s,22.29us,0.00ns,22.97us,1.63us,21.00us,56.58us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,131843,4.63s,21.96us,0.00ns,22.70us,1.51us,21.00us,52.79us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,15482,4.56s,193.75us,0.00ns,193.73us,17.87us,169.71us,267.58us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,126235,4.63s,23.88us,0.00ns,23.71us,1.42us,21.17us,59.29us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,249316,4.68s,11.96us,0.00ns,11.98us,494.00ns,11.83us,42.67us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,58803,4.56s,50.75us,0.00ns,50.97us,1.34us,50.33us,91.54us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,13208,4.56s,226.42us,0.00ns,227.10us,2.77us,226.29us,260.29us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,249366,4.68s,11.96us,0.00ns,11.98us,480.00ns,11.83us,42.33us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,58176,4.56s,51.17us,0.00ns,51.52us,1.47us,50.38us,87.25us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,62456,4.56s,47.83us,0.00ns,47.98us,1.28us,47.71us,82.79us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,172958,4.68s,17.25us,0.00ns,17.30us,597.00ns,17.17us,45.46us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,42086,4.56s,70.79us,0.00ns,71.23us,1.53us,68.79us,102.00us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,10306,4.56s,290.17us,0.00ns,291.04us,3.10us,289.96us,324.21us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,173008,4.63s,17.25us,0.00ns,17.29us,587.00ns,17.17us,48.96us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,44691,4.56s,66.67us,0.00ns,67.08us,1.71us,65.29us,105.71us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,47890,4.56s,62.29us,0.00ns,62.59us,1.64us,59.62us,102.79us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,740.32ms,41.00ns,0.00ns,22.00ns,27.00ns,1.00ns,12.21us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,749.36ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,6.62us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,751.20ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,9.92us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,750.78ms,42.00ns,0.00ns,34.00ns,21.00ns,1.00ns,6.96us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.16s,209.00ns,0.00ns,226.00ns,70.00ns,125.00ns,25.42us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,750.52ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,9.67us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,741.32ms,41.00ns,0.00ns,30.00ns,29.00ns,1.00ns,16.21us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,747.82ms,41.00ns,0.00ns,30.00ns,19.00ns,1.00ns,3.42us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.17s,209.00ns,0.00ns,226.00ns,69.00ns,125.00ns,22.67us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,745.13ms,42.00ns,0.00ns,32.00ns,22.00ns,1.00ns,9.29us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,749.43ms,1.00ns,0.00ns,20.00ns,26.00ns,1.00ns,9.88us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,804.08ms,83.00ns,0.00ns,65.00ns,35.00ns,1.00ns,15.33us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.30s,250.00ns,0.00ns,269.00ns,78.00ns,166.00ns,25.29us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,754.19ms,1.00ns,0.00ns,20.00ns,24.00ns,1.00ns,9.46us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,811.30ms,83.00ns,0.00ns,65.00ns,40.00ns,1.00ns,23.46us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,803.09ms,83.00ns,0.00ns,64.00ns,43.00ns,1.00ns,22.67us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,754.48ms,1.00ns,0.00ns,20.00ns,27.00ns,1.00ns,13.92us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,862.20ms,83.00ns,0.00ns,89.00ns,35.00ns,1.00ns,16.46us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.42s,333.00ns,0.00ns,342.00ns,88.00ns,250.00ns,25.33us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,752.80ms,1.00ns,0.00ns,20.00ns,26.00ns,1.00ns,9.50us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,874.82ms,83.00ns,0.00ns,85.00ns,33.00ns,1.00ns,23.25us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,870.60ms,83.00ns,0.00ns,87.00ns,31.00ns,1.00ns,16.42us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,754.49ms,1.00ns,0.00ns,16.00ns,23.00ns,1.00ns,9.21us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,695.17ms,1.00ns,0.00ns,16.00ns,21.00ns,1.00ns,7.17us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,748.37ms,1.00ns,0.00ns,16.00ns,23.00ns,1.00ns,9.50us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,755.25ms,1.00ns,0.00ns,17.00ns,20.00ns,1.00ns,167.00ns\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,752.63ms,41.00ns,0.00ns,28.00ns,29.00ns,1.00ns,21.21us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,690.60ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,541.00ns\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,691.58ms,1.00ns,0.00ns,17.00ns,35.00ns,1.00ns,21.04us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,685.34ms,1.00ns,0.00ns,17.00ns,37.00ns,1.00ns,23.00us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,741.63ms,41.00ns,0.00ns,28.00ns,23.00ns,1.00ns,8.00us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,688.92ms,1.00ns,0.00ns,16.00ns,24.00ns,1.00ns,9.79us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,69,1000000,743.09ms,1.00ns,0.00ns,16.00ns,30.00ns,1.00ns,21.42us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,752.10ms,1.00ns,0.00ns,17.00ns,27.00ns,1.00ns,16.83us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,69,1000000,751.64ms,42.00ns,0.00ns,37.00ns,31.00ns,1.00ns,14.38us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,69,1000000,689.41ms,1.00ns,0.00ns,16.00ns,29.00ns,1.00ns,20.83us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,69,1000000,753.12ms,1.00ns,0.00ns,17.00ns,26.00ns,1.00ns,9.71us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,69,1000000,744.25ms,1.00ns,0.00ns,17.00ns,25.00ns,1.00ns,14.21us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,69,1000000,746.18ms,1.00ns,0.00ns,16.00ns,29.00ns,1.00ns,16.79us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,754.35ms,1.00ns,0.00ns,17.00ns,32.00ns,1.00ns,23.75us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,69,1000000,753.20ms,42.00ns,0.00ns,44.00ns,25.00ns,1.00ns,16.46us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,69,1000000,744.90ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,4.62us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,69,1000000,690.71ms,1.00ns,0.00ns,17.00ns,21.00ns,1.00ns,7.00us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,69,1000000,690.89ms,1.00ns,0.00ns,18.00ns,32.00ns,1.00ns,23.50us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,,1000000,684.84ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,4.92us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,,1000000,684.58ms,1.00ns,0.00ns,15.00ns,19.00ns,1.00ns,1.46us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,,1000000,756.61ms,1.00ns,0.00ns,15.00ns,25.00ns,1.00ns,9.42us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,,1000000,688.65ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,167.00ns\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,,1000000,687.21ms,1.00ns,0.00ns,15.00ns,32.00ns,1.00ns,21.29us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,,1000000,754.45ms,1.00ns,0.00ns,15.00ns,37.00ns,1.00ns,21.42us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,,1000000,689.20ms,1.00ns,0.00ns,15.00ns,22.00ns,1.00ns,7.12us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,,1000000,686.32ms,1.00ns,0.00ns,15.00ns,19.00ns,1.00ns,125.00ns\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,,1000000,687.21ms,1.00ns,0.00ns,15.00ns,23.00ns,1.00ns,9.25us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,,1000000,686.91ms,1.00ns,0.00ns,15.00ns,25.00ns,1.00ns,9.75us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,,1000000,745.84ms,1.00ns,0.00ns,15.00ns,28.00ns,1.00ns,16.75us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,,1000000,679.14ms,1.00ns,0.00ns,16.00ns,22.00ns,1.00ns,7.54us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,,1000000,689.26ms,1.00ns,0.00ns,15.00ns,24.00ns,1.00ns,9.12us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,,1000000,684.86ms,1.00ns,0.00ns,15.00ns,22.00ns,1.00ns,6.75us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,,1000000,685.12ms,1.00ns,0.00ns,15.00ns,25.00ns,1.00ns,13.67us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,,1000000,689.70ms,1.00ns,0.00ns,15.00ns,19.00ns,1.00ns,125.00ns\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,,1000000,689.50ms,1.00ns,0.00ns,15.00ns,21.00ns,1.00ns,6.54us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,,1000000,686.00ms,1.00ns,0.00ns,16.00ns,26.00ns,1.00ns,17.17us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,,1000000,681.29ms,1.00ns,0.00ns,15.00ns,21.00ns,1.00ns,6.92us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,,1000000,686.07ms,1.00ns,0.00ns,15.00ns,24.00ns,1.00ns,9.33us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,,1000000,687.16ms,1.00ns,0.00ns,15.00ns,30.00ns,1.00ns,20.75us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,,1000000,753.70ms,1.00ns,0.00ns,15.00ns,19.00ns,1.00ns,125.00ns\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,205262,4.69s,14.54us,0.00ns,14.56us,555.00ns,14.38us,44.71us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,320383,4.75s,9.29us,0.00ns,9.31us,429.00ns,9.00us,40.67us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,326777,4.75s,9.12us,0.00ns,9.13us,417.00ns,8.96us,40.04us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,114292,4.63s,25.54us,0.00ns,26.20us,1.39us,25.17us,61.33us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,14835,4.56s,200.75us,0.00ns,202.18us,8.12us,180.92us,264.71us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,326275,4.74s,9.12us,0.00ns,9.14us,392.00ns,9.00us,39.71us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,111686,4.63s,26.75us,0.00ns,26.81us,807.00ns,26.12us,71.75us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,111803,4.62s,26.71us,0.00ns,26.78us,810.00ns,25.83us,58.25us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,108732,4.63s,27.46us,0.00ns,27.54us,875.00ns,26.75us,64.08us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,180341,4.63s,16.54us,0.00ns,16.58us,586.00ns,16.38us,56.08us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,50472,4.56s,59.46us,0.00ns,59.39us,1.84us,56.46us,94.25us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,11168,4.55s,267.88us,0.00ns,268.58us,3.24us,264.67us,304.46us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,180119,4.68s,16.58us,0.00ns,16.60us,542.00ns,16.42us,46.04us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,49497,4.56s,60.46us,0.00ns,60.56us,1.75us,58.04us,92.42us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,49665,4.56s,60.25us,0.00ns,60.35us,3.75us,53.58us,91.75us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,129834,4.62s,23.00us,0.00ns,23.06us,753.00ns,22.88us,76.58us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,37384,4.55s,80.00us,0.00ns,80.20us,1.70us,78.54us,116.58us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,10169,4.55s,294.08us,0.00ns,294.98us,3.24us,293.92us,340.04us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,127139,4.63s,23.50us,0.00ns,23.54us,739.00ns,23.33us,70.88us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,37761,4.56s,79.21us,0.00ns,79.40us,1.60us,77.83us,120.58us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,38189,4.56s,78.38us,0.00ns,78.51us,2.05us,73.08us,116.00us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,743.49ms,41.00ns,0.00ns,22.00ns,26.00ns,1.00ns,10.54us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,749.82ms,1.00ns,0.00ns,20.00ns,23.00ns,1.00ns,6.96us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,754.84ms,1.00ns,0.00ns,20.00ns,21.00ns,1.00ns,4.79us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,750.66ms,42.00ns,0.00ns,38.00ns,22.00ns,1.00ns,9.62us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.24s,250.00ns,0.00ns,245.00ns,71.00ns,125.00ns,25.00us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,746.40ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,10.08us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,750.88ms,42.00ns,0.00ns,33.00ns,29.00ns,1.00ns,16.54us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,745.44ms,42.00ns,0.00ns,33.00ns,17.00ns,1.00ns,208.00ns\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.10s,250.00ns,0.00ns,244.00ns,64.00ns,125.00ns,20.71us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,751.47ms,42.00ns,0.00ns,33.00ns,26.00ns,1.00ns,15.38us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,755.01ms,1.00ns,0.00ns,20.00ns,23.00ns,1.00ns,6.92us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,806.94ms,83.00ns,0.00ns,69.00ns,42.00ns,1.00ns,23.29us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.29s,292.00ns,0.00ns,286.00ns,71.00ns,166.00ns,25.00us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,745.49ms,1.00ns,0.00ns,21.00ns,32.00ns,1.00ns,21.50us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,812.06ms,83.00ns,0.00ns,72.00ns,39.00ns,1.00ns,23.62us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,801.86ms,83.00ns,0.00ns,70.00ns,31.00ns,1.00ns,11.79us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,753.41ms,41.00ns,0.00ns,24.00ns,31.00ns,1.00ns,20.46us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,869.34ms,84.00ns,0.00ns,96.00ns,36.00ns,1.00ns,19.71us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.47s,375.00ns,0.00ns,362.00ns,82.00ns,250.00ns,23.83us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,750.88ms,41.00ns,0.00ns,25.00ns,25.00ns,1.00ns,10.12us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,863.29ms,84.00ns,0.00ns,97.00ns,41.00ns,1.00ns,16.79us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,931.15ms,84.00ns,0.00ns,100.00ns,48.00ns,1.00ns,23.62us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,745.21ms,1.00ns,0.00ns,17.00ns,20.00ns,1.00ns,4.38us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,690.03ms,1.00ns,0.00ns,16.00ns,31.00ns,1.00ns,23.96us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,752.45ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,4.67us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,681.71ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,6.75us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,741.29ms,41.00ns,0.00ns,28.00ns,22.00ns,1.00ns,9.58us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,753.87ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,167.00ns\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,751.38ms,1.00ns,0.00ns,18.00ns,24.00ns,1.00ns,9.33us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,690.40ms,1.00ns,0.00ns,18.00ns,20.00ns,1.00ns,4.54us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,740.67ms,41.00ns,0.00ns,28.00ns,23.00ns,1.00ns,9.62us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,755.48ms,1.00ns,0.00ns,17.00ns,24.00ns,1.00ns,9.33us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,69,1000000,746.18ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,9.88us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,745.09ms,1.00ns,0.00ns,18.00ns,25.00ns,1.00ns,9.71us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,69,1000000,743.65ms,42.00ns,0.00ns,37.00ns,25.00ns,1.00ns,19.46us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,69,1000000,690.85ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,6.96us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,69,1000000,752.60ms,1.00ns,0.00ns,18.00ns,20.00ns,1.00ns,1.54us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,69,1000000,753.01ms,1.00ns,0.00ns,18.00ns,20.00ns,1.00ns,167.00ns\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,69,1000000,744.31ms,1.00ns,0.00ns,17.00ns,20.00ns,1.00ns,4.71us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,746.64ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,7.33us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,69,1000000,741.99ms,42.00ns,0.00ns,45.00ns,28.00ns,1.00ns,16.46us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,69,1000000,689.92ms,1.00ns,0.00ns,18.00ns,31.00ns,1.00ns,21.38us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,69,1000000,755.07ms,1.00ns,0.00ns,19.00ns,28.00ns,1.00ns,15.96us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,69,1000000,747.90ms,1.00ns,0.00ns,19.00ns,25.00ns,1.00ns,9.92us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,29571,4.56s,101.08us,0.00ns,101.40us,1.83us,100.71us,159.62us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,31802,4.56s,93.79us,0.00ns,94.28us,1.85us,93.29us,134.00us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,30429,4.56s,105.33us,0.00ns,98.54us,11.93us,78.88us,136.58us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,31466,4.56s,94.67us,0.00ns,95.29us,1.83us,94.25us,130.88us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,12805,4.56s,233.04us,0.00ns,234.23us,3.72us,228.50us,268.21us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,29529,4.56s,101.17us,0.00ns,101.55us,1.85us,100.29us,134.00us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,26967,4.56s,110.88us,0.00ns,111.20us,1.91us,110.38us,146.42us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,26802,4.56s,111.54us,0.00ns,111.88us,1.90us,111.08us,146.12us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,12608,4.55s,236.71us,0.00ns,237.89us,4.04us,231.25us,286.79us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,26420,4.55s,113.17us,0.00ns,113.50us,1.91us,112.38us,150.92us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,14255,4.56s,209.71us,0.00ns,210.40us,2.73us,208.75us,243.00us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,12843,4.56s,232.79us,0.00ns,233.55us,2.89us,232.46us,272.79us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,9207,4.56s,324.83us,0.00ns,325.81us,3.49us,324.08us,367.38us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,15741,4.56s,189.92us,0.00ns,190.54us,2.44us,189.04us,225.08us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,11920,4.56s,250.92us,0.00ns,251.63us,3.00us,250.08us,300.12us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,12714,4.56s,235.25us,0.00ns,235.91us,3.01us,232.75us,296.29us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,10215,4.56s,292.79us,0.00ns,293.66us,3.20us,291.96us,330.38us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,8450,4.56s,354.04us,0.00ns,355.01us,3.60us,353.33us,388.21us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,7285,4.56s,410.54us,0.00ns,411.78us,3.83us,409.92us,444.54us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,10995,4.56s,272.12us,0.00ns,272.82us,3.11us,270.88us,342.33us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,7657,4.56s,390.62us,0.00ns,391.77us,3.73us,389.71us,428.46us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,7871,4.56s,379.96us,0.00ns,381.10us,3.73us,379.08us,427.58us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,809.26ms,42.00ns,0.00ns,43.00ns,28.00ns,1.00ns,15.92us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,813.97ms,42.00ns,0.00ns,43.00ns,36.00ns,1.00ns,23.79us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,749.60ms,42.00ns,0.00ns,38.00ns,21.00ns,1.00ns,9.58us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,812.57ms,83.00ns,0.00ns,69.00ns,36.00ns,1.00ns,16.38us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.24s,250.00ns,0.00ns,238.00ns,92.00ns,125.00ns,24.50us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,744.07ms,42.00ns,0.00ns,40.00ns,20.00ns,1.00ns,16.33us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,813.34ms,83.00ns,0.00ns,65.00ns,40.00ns,1.00ns,16.62us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,813.46ms,83.00ns,0.00ns,66.00ns,37.00ns,1.00ns,20.54us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.30s,333.00ns,0.00ns,339.00ns,85.00ns,166.00ns,31.46us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,811.54ms,42.00ns,0.00ns,62.00ns,36.00ns,1.00ns,16.46us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,923.92ms,83.00ns,0.00ns,92.00ns,39.00ns,1.00ns,16.83us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,930.26ms,84.00ns,0.00ns,104.00ns,74.00ns,1.00ns,58.33us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.35s,333.00ns,0.00ns,314.00ns,86.00ns,166.00ns,25.25us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,932.72ms,84.00ns,0.00ns,104.00ns,54.00ns,1.00ns,23.58us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,930.04ms,125.00ns,0.00ns,119.00ns,52.00ns,1.00ns,23.67us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,0.99s,125.00ns,0.00ns,118.00ns,53.00ns,1.00ns,22.04us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,1.05s,166.00ns,0.00ns,153.00ns,56.00ns,41.00ns,25.71us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,1.05s,167.00ns,0.00ns,161.00ns,53.00ns,41.00ns,23.42us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.41s,333.00ns,0.00ns,338.00ns,77.00ns,250.00ns,25.54us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,1.05s,167.00ns,0.00ns,159.00ns,57.00ns,41.00ns,25.00us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,1.11s,167.00ns,0.00ns,187.00ns,58.00ns,83.00ns,23.04us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.04s,167.00ns,0.00ns,161.00ns,52.00ns,41.00ns,23.79us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,743.67ms,1.00ns,0.00ns,19.00ns,28.00ns,1.00ns,16.54us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,690.36ms,1.00ns,0.00ns,17.00ns,24.00ns,1.00ns,9.75us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,755.36ms,1.00ns,0.00ns,17.00ns,24.00ns,1.00ns,9.33us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,747.04ms,1.00ns,0.00ns,19.00ns,20.00ns,1.00ns,167.00ns\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,744.58ms,41.00ns,0.00ns,28.00ns,25.00ns,1.00ns,9.54us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,742.98ms,1.00ns,0.00ns,18.00ns,24.00ns,1.00ns,10.29us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,744.07ms,41.00ns,0.00ns,24.00ns,26.00ns,1.00ns,10.25us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,746.07ms,41.00ns,0.00ns,25.00ns,24.00ns,1.00ns,9.54us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,752.90ms,41.00ns,0.00ns,28.00ns,31.00ns,1.00ns,21.08us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,752.71ms,41.00ns,0.00ns,26.00ns,26.00ns,1.00ns,13.42us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,69,1000000,749.34ms,42.00ns,0.00ns,33.00ns,34.00ns,1.00ns,22.79us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,750.71ms,42.00ns,0.00ns,33.00ns,28.00ns,1.00ns,16.58us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,69,1000000,806.88ms,42.00ns,0.00ns,37.00ns,39.00ns,1.00ns,29.83us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,69,1000000,809.54ms,42.00ns,0.00ns,47.00ns,30.00ns,1.00ns,19.50us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,69,1000000,748.18ms,42.00ns,0.00ns,40.00ns,32.00ns,1.00ns,15.92us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,69,1000000,748.05ms,42.00ns,0.00ns,41.00ns,46.00ns,1.00ns,29.71us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,69,1000000,863.94ms,83.00ns,0.00ns,71.00ns,35.00ns,1.00ns,15.96us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,811.86ms,42.00ns,0.00ns,50.00ns,32.00ns,1.00ns,23.71us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,69,1000000,808.42ms,42.00ns,0.00ns,45.00ns,21.00ns,1.00ns,9.38us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,69,1000000,868.86ms,83.00ns,0.00ns,82.00ns,37.00ns,1.00ns,16.38us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,69,1000000,807.90ms,83.00ns,0.00ns,65.00ns,29.00ns,1.00ns,9.79us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,69,1000000,802.29ms,83.00ns,0.00ns,63.00ns,44.00ns,1.00ns,23.42us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,2833,4.56s,1.06ms,0.00ns,1.06ms,5.70us,1.04ms,1.11ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,4618,4.56s,647.62us,0.00ns,649.57us,4.75us,647.46us,697.29us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,5153,4.56s,580.38us,0.00ns,582.13us,4.48us,580.08us,624.25us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,3672,4.56s,814.38us,0.00ns,817.14us,5.62us,813.83us,859.96us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,4293,4.56s,696.62us,0.00ns,698.77us,5.04us,695.88us,741.38us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,5393,4.56s,554.92us,0.00ns,556.25us,4.35us,554.62us,653.79us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,3280,4.56s,911.12us,0.00ns,914.73us,8.70us,909.25us,1.06ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,3266,4.56s,915.62us,0.00ns,918.51us,6.14us,914.46us,0.97ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,4222,4.56s,708.83us,0.00ns,710.64us,5.05us,706.58us,756.08us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,3112,4.56s,0.96ms,0.00ns,0.96ms,16.06us,0.96ms,1.17ms\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,2.31s,750.00ns,0.00ns,772.00ns,122.00ns,666.00ns,26.04us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,2.07s,667.00ns,0.00ns,665.00ns,119.00ns,541.00ns,31.46us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.94s,584.00ns,0.00ns,595.00ns,107.00ns,417.00ns,26.08us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,1.41s,333.00ns,0.00ns,318.00ns,93.00ns,208.00ns,25.25us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.29s,291.00ns,0.00ns,278.00ns,73.00ns,166.00ns,24.92us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,1.89s,542.00ns,0.00ns,563.00ns,108.00ns,417.00ns,30.96us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.58s,417.00ns,0.00ns,420.00ns,94.00ns,333.00ns,24.21us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.59s,417.00ns,0.00ns,422.00ns,87.00ns,333.00ns,26.62us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.29s,291.00ns,0.00ns,278.00ns,75.00ns,166.00ns,24.58us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,1.59s,417.00ns,0.00ns,414.00ns,86.00ns,291.00ns,26.00us\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,33335253,59,4.56s,50.84ms,0.00ns,51.00ms,316.45us,50.72ms,51.99ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,33335253,32,4.62s,94.91ms,105.00ns,94.92ms,60.48us,94.87ms,95.23ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,33335253,32,4.62s,94.85ms,709.00ns,94.86ms,26.57us,94.81ms,94.93ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,33335253,302,4.56s,9.94ms,104.00ns,9.94ms,38.92us,9.86ms,10.07ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,33335253,302,4.56s,9.93ms,63.00ns,9.94ms,42.35us,9.86ms,10.10ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/binary,2.5.0,,33335253,2904,4.56s,1.03ms,0.00ns,1.03ms,8.68us,1.03ms,1.09ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,33335253,254,4.56s,11.66ms,5.31us,11.84ms,615.82us,11.44ms,19.63ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,33335253,62,4.57s,47.86ms,708.00ns,48.63ms,3.45ms,47.79ms,72.86ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,33335253,151,4.56s,19.89ms,0.00ns,19.88ms,97.85us,19.64ms,20.06ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,33335253,211,4.56s,14.21ms,0.00ns,14.22ms,54.68us,14.13ms,14.42ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,33335253,211,4.56s,14.21ms,0.00ns,14.22ms,50.39us,14.14ms,14.37ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,33335253,150,4.56s,20.04ms,229.00ns,20.04ms,22.22us,19.99ms,20.12ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,33335253,150,4.56s,20.03ms,396.00ns,20.03ms,22.79us,19.99ms,20.11ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2523,4.56s,1.19ms,0.00ns,1.19ms,6.34us,1.19ms,1.26ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.55s,3.92ms,0.00ns,3.93ms,15.29us,3.91ms,4.27ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.55s,3.92ms,0.00ns,3.93ms,8.76us,3.91ms,3.96ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,59045,4.56s,50.62us,0.00ns,50.76us,1.17us,50.46us,81.50us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,46030,4.59s,50.54us,0.00ns,65.12us,2.58ms,50.38us,553.56ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2882,4.56s,1.04ms,41.00ns,1.04ms,11.92us,1.02ms,1.10ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1269,4.56s,2.36ms,0.00ns,2.37ms,8.70us,2.35ms,2.43ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,3037,4.56s,0.99ms,0.00ns,0.99ms,6.00us,0.98ms,1.03ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,13491,4.56s,221.67us,0.00ns,222.33us,2.81us,220.46us,254.79us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,13606,4.56s,219.75us,0.00ns,220.44us,2.92us,219.08us,290.00us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,31363,4.56s,95.33us,0.00ns,95.60us,1.67us,95.17us,129.29us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,31385,4.56s,95.29us,0.00ns,95.54us,1.64us,95.12us,129.96us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3084,4.56s,0.97ms,0.00ns,0.97ms,6.08us,0.96ms,1.03ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3086,4.56s,0.97ms,0.00ns,0.97ms,6.24us,0.96ms,1.03ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2515,4.56s,1.19ms,0.00ns,1.19ms,174.14us,1.19ms,9.92ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,753,4.56s,3.92ms,0.00ns,3.99ms,730.60us,3.92ms,20.12ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.93ms,9.41us,3.91ms,3.99ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,57887,4.56s,51.62us,0.00ns,51.77us,1.20us,51.46us,103.33us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,57923,4.56s,51.62us,0.00ns,51.75us,1.11us,51.46us,81.83us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3100,4.56s,0.96ms,21.00ns,0.97ms,11.75us,0.95ms,1.02ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1269,4.56s,2.36ms,0.00ns,2.37ms,8.10us,2.35ms,2.41ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,3037,4.56s,0.99ms,0.00ns,0.99ms,5.79us,0.98ms,1.03ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,13429,4.56s,222.67us,0.00ns,223.36us,2.90us,222.12us,273.42us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,13416,4.56s,222.92us,0.00ns,223.56us,2.75us,222.25us,257.21us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,30374,4.56s,98.42us,0.00ns,98.71us,1.70us,98.25us,132.42us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,23711,4.57s,98.38us,0.00ns,126.47us,3.60ms,95.50us,554.85ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3316,4.55s,903.21us,0.00ns,904.92us,5.88us,897.96us,0.95ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3316,4.56s,902.83us,0.00ns,904.69us,6.68us,897.58us,1.05ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2526,4.56s,1.18ms,0.00ns,1.19ms,6.19us,1.18ms,1.24ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.93ms,9.28us,3.91ms,3.97ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.93ms,9.53us,3.91ms,3.98ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,60551,4.56s,49.38us,0.00ns,49.50us,1.12us,49.21us,80.83us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,60550,4.56s,49.33us,0.00ns,49.49us,1.16us,49.21us,78.29us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3169,4.56s,936.33us,0.00ns,946.78us,22.77us,926.46us,1.03ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1266,4.54s,2.36ms,0.00ns,2.37ms,26.08us,2.35ms,2.68ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,3027,4.55s,0.99ms,0.00ns,0.99ms,156.26us,0.97ms,9.52ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,23132,4.53s,127.50us,0.00ns,129.64us,95.75us,125.08us,10.15ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,23254,4.56s,128.50us,0.00ns,128.96us,2.05us,127.62us,161.75us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,29558,4.56s,101.17us,0.00ns,101.45us,1.76us,100.96us,145.42us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,29478,4.56s,101.42us,0.00ns,101.72us,1.86us,101.21us,135.42us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3404,4.56s,881.33us,0.00ns,881.28us,8.56us,869.46us,924.17us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3398,4.56s,882.67us,0.00ns,882.86us,8.66us,869.25us,929.79us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2747,4.56s,1.09ms,0.00ns,1.09ms,6.02us,1.09ms,1.14ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,1243,4.55s,2.41ms,0.00ns,2.41ms,8.05us,2.40ms,2.47ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,1244,4.56s,2.41ms,0.00ns,2.41ms,8.69us,2.40ms,2.49ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,56943,4.56s,52.50us,0.00ns,52.63us,1.20us,51.96us,85.96us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,44338,4.54s,52.58us,0.00ns,67.61us,2.61ms,51.92us,548.36ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3229,4.55s,926.04us,0.00ns,929.14us,9.99us,914.50us,1.10ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1269,4.56s,2.36ms,0.00ns,2.37ms,8.07us,2.36ms,2.42ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,12629,4.56s,236.79us,0.00ns,237.50us,2.89us,236.00us,270.62us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,12563,4.56s,238.12us,0.00ns,238.76us,2.86us,236.50us,272.25us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,107742,4.63s,27.71us,0.00ns,27.79us,810.00ns,27.58us,81.96us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,107915,4.62s,27.67us,0.00ns,27.75us,799.00ns,27.54us,58.92us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3376,4.56s,886.83us,0.00ns,888.81us,6.59us,878.50us,0.96ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3391,4.56s,882.67us,0.00ns,884.65us,6.19us,876.00us,929.00us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2522,4.56s,1.19ms,0.00ns,1.19ms,6.54us,1.19ms,1.27ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,763,4.56s,3.92ms,0.00ns,3.93ms,208.60us,3.91ms,9.67ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,757,4.51s,3.92ms,0.00ns,3.97ms,713.81us,3.91ms,22.90ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,56786,4.56s,52.62us,0.00ns,52.78us,1.20us,52.46us,88.04us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,57397,4.56s,52.00us,0.00ns,52.21us,1.40us,51.83us,132.96us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2946,4.56s,1.01ms,0.00ns,1.02ms,10.02us,1.01ms,1.06ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1268,4.56s,2.36ms,0.00ns,2.37ms,8.64us,2.36ms,2.42ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,2996,4.56s,1.00ms,0.00ns,1.00ms,5.76us,0.98ms,1.04ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,14285,4.56s,209.33us,0.00ns,209.97us,2.71us,208.75us,246.92us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,14427,4.56s,207.33us,0.00ns,207.90us,2.60us,206.75us,246.54us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3155,4.56s,949.33us,0.00ns,0.95ms,5.88us,943.17us,1.00ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3164,4.56s,946.50us,0.00ns,948.28us,5.99us,940.46us,0.99ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,1959,4.54s,1.19ms,0.00ns,1.53ms,12.57ms,1.19ms,557.31ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,9.58us,3.91ms,4.00ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,11.00us,3.91ms,3.98ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,29000,4.56s,103.08us,0.00ns,103.40us,1.81us,102.67us,145.33us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,34249,4.56s,87.29us,0.00ns,87.54us,1.60us,86.88us,120.54us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3375,4.56s,872.54us,0.00ns,888.90us,32.53us,864.71us,1.05ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1233,4.56s,2.43ms,0.00ns,2.43ms,8.48us,2.42ms,2.48ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,2895,4.55s,1.03ms,0.00ns,1.04ms,5.91us,1.02ms,1.08ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,5889,4.56s,507.96us,0.00ns,509.42us,4.30us,506.33us,548.92us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,6225,4.56s,480.46us,0.00ns,481.89us,4.13us,479.75us,529.33us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3528,4.56s,845.04us,0.00ns,850.43us,163.35us,835.75us,10.18ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3594,4.51s,826.12us,0.00ns,834.67us,102.96us,813.88us,3.91ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,6835,4.55s,437.42us,0.00ns,438.88us,4.14us,434.67us,481.75us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,747,4.56s,4.01ms,0.00ns,4.02ms,12.62us,4.01ms,4.18ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,750,4.55s,4.00ms,21.00ns,4.00ms,33.96us,3.99ms,4.29ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,5752,4.55s,520.21us,0.00ns,521.55us,4.37us,517.29us,562.50us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,6132,4.56s,489.00us,0.00ns,489.21us,4.49us,485.33us,527.62us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2298,4.56s,1.30ms,0.00ns,1.31ms,7.57us,1.30ms,1.37ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1171,4.56s,2.56ms,0.00ns,2.56ms,8.99us,2.55ms,2.61ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,2436,4.56s,1.23ms,20.00ns,1.23ms,9.39us,1.22ms,1.29ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,4310,4.56s,694.38us,0.00ns,696.13us,4.93us,691.83us,741.79us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,4072,4.51s,574.62us,0.00ns,736.75us,8.61ms,557.79us,549.78ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,2085,4.56s,1.44ms,0.00ns,1.44ms,8.69us,1.42ms,1.63ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,2342,4.56s,1.28ms,0.00ns,1.28ms,7.03us,1.27ms,1.33ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2127,4.56s,1.41ms,0.00ns,1.41ms,6.62us,1.41ms,1.45ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,736,4.56s,4.08ms,0.00ns,4.08ms,9.68us,4.07ms,4.12ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,737,4.55s,4.07ms,0.00ns,4.07ms,15.26us,4.06ms,4.39ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,18262,4.56s,163.88us,0.00ns,164.22us,2.60us,159.21us,198.83us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,25000,4.56s,119.58us,0.00ns,119.95us,1.97us,119.25us,155.25us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2837,4.56s,1.06ms,0.00ns,1.06ms,17.73us,1.03ms,1.13ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1221,4.56s,2.46ms,0.00ns,2.46ms,8.24us,2.45ms,2.51ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,2844,4.56s,1.05ms,0.00ns,1.05ms,155.80us,1.04ms,9.30ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,3465,4.57s,853.25us,0.00ns,865.76us,270.44us,850.71us,15.63ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,3839,4.55s,780.67us,0.00ns,781.48us,5.61us,774.21us,819.04us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,2819,4.56s,1.06ms,0.00ns,1.06ms,6.76us,1.05ms,1.15ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,2955,4.56s,1.01ms,0.00ns,1.02ms,6.68us,1.00ms,1.08ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,151305,20601,4.56s,145.17us,0.00ns,145.58us,2.11us,144.88us,176.08us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,151305,13722,4.56s,217.92us,0.00ns,218.58us,2.88us,217.62us,265.42us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,151305,13723,4.56s,217.92us,0.00ns,218.57us,2.75us,217.62us,274.17us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,151305,520511,4.88s,5.71us,0.00ns,5.71us,362.00ns,5.50us,35.08us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,151305,507520,4.81s,5.88us,0.00ns,5.86us,363.00ns,5.54us,37.12us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,151305,201970,4.69s,15.12us,0.00ns,14.80us,842.00ns,13.75us,47.92us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,151305,10744,4.52s,216.54us,0.00ns,279.18us,5.42ms,215.75us,561.50ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,151305,22771,4.56s,131.83us,0.00ns,131.70us,2.10us,130.17us,174.00us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,151305,22361,4.56s,135.96us,0.00ns,134.11us,3.83us,128.67us,186.79us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,151305,285335,4.75s,10.46us,0.00ns,10.46us,463.00ns,10.21us,49.00us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,286342,4.75s,10.42us,0.00ns,10.43us,467.00ns,10.12us,47.00us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,151305,255422,4.69s,11.54us,0.00ns,11.70us,826.00ns,11.29us,45.12us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,151305,247772,4.68s,11.54us,0.00ns,12.06us,792.00ns,11.29us,42.42us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,151305,20594,4.55s,145.21us,0.00ns,145.63us,2.04us,144.96us,184.33us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,151305,13356,4.56s,224.04us,0.00ns,224.57us,2.76us,217.71us,257.25us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,151305,13349,4.56s,224.04us,0.00ns,224.69us,2.65us,223.79us,259.67us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,151305,405915,4.82s,5.75us,0.00ns,7.34us,872.82us,5.54us,555.83ms\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,151305,534234,4.81s,5.54us,0.00ns,5.57us,350.00ns,5.33us,58.67us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,151305,248878,4.69s,11.12us,0.00ns,12.00us,1.39us,10.67us,63.37us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,151305,13813,4.56s,216.54us,0.00ns,217.14us,2.93us,215.79us,254.12us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,151305,22348,4.56s,133.79us,0.00ns,134.20us,2.07us,133.12us,168.00us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,151305,22575,4.56s,129.00us,0.00ns,132.84us,5.63us,127.04us,171.83us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,151305,285761,4.74s,10.42us,0.00ns,10.45us,460.00ns,10.17us,41.96us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,284545,4.75s,10.46us,0.00ns,10.49us,470.00ns,10.21us,35.75us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,151305,260822,4.69s,11.42us,0.00ns,11.45us,507.00ns,11.17us,41.46us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,151305,308224,4.75s,9.62us,0.00ns,9.68us,457.00ns,9.46us,39.54us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,500100,10437,4.55s,285.46us,0.00ns,287.39us,97.11us,285.38us,10.17ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,500100,2616,4.53s,1.14ms,0.00ns,1.15ms,19.92us,1.14ms,1.40ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,500100,2620,4.55s,1.14ms,0.00ns,1.15ms,6.04us,1.14ms,1.21ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,500100,193645,4.69s,15.42us,0.00ns,15.44us,588.00ns,15.29us,46.58us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,500100,193862,4.69s,15.38us,0.00ns,15.42us,577.00ns,15.25us,55.04us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,500100,10342,4.56s,286.67us,0.00ns,290.03us,7.11us,285.38us,343.33us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,500100,4178,4.56s,716.04us,0.00ns,718.00us,4.89us,713.50us,762.88us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,500100,10005,4.56s,299.12us,0.00ns,299.81us,3.24us,296.25us,336.71us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,500100,8376,4.56s,357.04us,0.00ns,358.15us,3.69us,356.92us,398.29us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,500100,8147,4.56s,367.08us,0.00ns,368.18us,3.52us,366.92us,403.58us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,500100,106232,4.63s,28.12us,0.00ns,28.19us,813.00ns,27.92us,61.00us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,500100,83070,4.56s,28.00us,0.00ns,36.06us,1.94ms,27.08us,557.96ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,500100,10473,4.56s,285.50us,0.00ns,286.41us,3.33us,285.38us,328.29us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,500100,10477,4.56s,285.50us,0.00ns,286.31us,3.08us,285.33us,336.08us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,500100,8725,4.56s,342.79us,0.00ns,343.81us,3.38us,342.46us,381.21us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,500100,8273,4.56s,364.29us,0.00ns,362.61us,4.85us,357.04us,404.83us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,500100,8891,4.56s,338.25us,0.00ns,337.38us,4.84us,328.21us,399.92us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,500100,2328,4.55s,1.29ms,20.00ns,1.29ms,6.26us,1.28ms,1.33ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,500100,11929,4.56s,250.54us,0.00ns,251.45us,3.35us,250.38us,296.12us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,500100,10222,4.56s,292.58us,0.00ns,293.47us,3.25us,292.33us,355.00us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,500100,11265,4.56s,264.17us,0.00ns,266.26us,5.51us,256.79us,312.79us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,500100,13531,4.80s,196.29us,0.00ns,238.88us,4.78ms,191.00us,556.36ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,500100,973,4.55s,3.08ms,0.00ns,3.09ms,8.86us,3.07ms,3.13ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,500100,6638,4.56s,450.54us,0.00ns,451.96us,4.11us,450.12us,499.92us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,500100,1174,4.56s,2.55ms,0.00ns,2.56ms,9.34us,2.55ms,2.68ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,500100,9429,4.56s,317.17us,0.00ns,318.14us,3.26us,316.58us,363.38us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1001,1000000,1.89s,583.00ns,0.00ns,580.00ns,102.00ns,458.00ns,31.50us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,4.47s,2.29us,0.00ns,2.29us,202.00ns,2.17us,33.04us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,4.47s,2.29us,0.00ns,2.28us,206.00ns,2.17us,33.04us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1001,1000000,814.50ms,42.00ns,0.00ns,57.00ns,32.00ns,1.00ns,16.58us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,751.44ms,42.00ns,0.00ns,39.00ns,14.00ns,1.00ns,7.17us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.89s,584.00ns,0.00ns,605.00ns,103.00ns,500.00ns,25.46us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,3.52s,1.38us,0.00ns,1.40us,175.00ns,1.29us,33.79us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.89s,583.00ns,0.00ns,589.00ns,114.00ns,500.00ns,31.12us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1001,1000000,2.37s,833.00ns,0.00ns,837.00ns,122.00ns,750.00ns,25.71us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,2.31s,792.00ns,0.00ns,813.00ns,123.00ns,708.00ns,26.00us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1001,1000000,818.17ms,83.00ns,0.00ns,66.00ns,39.00ns,1.00ns,18.96us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1001,1000000,806.35ms,83.00ns,0.00ns,66.00ns,39.00ns,1.00ns,16.79us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1001,1000000,1.94s,625.00ns,0.00ns,623.00ns,3.55us,500.00ns,2.79ms\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1001,1000000,2.56s,625.00ns,0.00ns,1.23us,555.42us,500.00ns,555.35ms\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1001,1000000,2.13s,708.00ns,0.00ns,694.00ns,116.00ns,583.00ns,32.04us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,2.12s,709.00ns,0.00ns,722.00ns,122.00ns,625.00ns,32.00us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,2.01s,667.00ns,0.00ns,664.00ns,109.00ns,541.00ns,25.67us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1001,1000000,4.71s,2.50us,0.00ns,2.49us,215.00ns,2.38us,42.17us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,1.76s,500.00ns,0.00ns,521.00ns,115.00ns,416.00ns,25.75us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.95s,584.00ns,0.00ns,601.00ns,118.00ns,500.00ns,32.75us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.76s,541.00ns,0.00ns,529.00ns,106.00ns,416.00ns,24.83us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.53s,416.00ns,0.00ns,402.00ns,89.00ns,291.00ns,32.12us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1001,506890,4.88s,5.88us,0.00ns,5.87us,346.00ns,5.71us,36.83us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,3.09s,1.17us,0.00ns,1.16us,145.00ns,1.04us,30.00us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1001,578266,4.88s,5.12us,0.00ns,5.14us,326.00ns,5.00us,37.21us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1001,1000000,2.07s,667.00ns,0.00ns,677.00ns,118.00ns,583.00ns,25.67us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,550004,3240,4.56s,923.29us,0.00ns,925.95us,5.75us,921.83us,0.97ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,550004,2054,4.56s,1.46ms,0.00ns,1.46ms,7.27us,1.46ms,1.52ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,550004,2048,4.56s,1.46ms,21.00ns,1.47ms,217.78us,1.46ms,11.31ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,550004,17362,4.56s,170.00us,0.00ns,172.73us,89.20us,165.17us,10.09ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,550004,17587,4.56s,169.96us,0.00ns,170.53us,2.56us,169.62us,212.58us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,550004,23907,4.56s,119.08us,0.00ns,125.44us,11.62us,117.17us,174.71us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,550004,3811,4.56s,784.83us,0.00ns,787.24us,5.52us,784.67us,839.75us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,550004,9102,4.56s,328.75us,0.00ns,329.55us,3.36us,325.08us,365.33us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,550004,17722,4.56s,168.71us,0.00ns,169.23us,2.38us,168.58us,203.17us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,550004,17724,4.56s,168.71us,0.00ns,169.21us,2.33us,168.58us,204.83us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,550004,6351,4.56s,470.88us,0.00ns,472.32us,4.31us,470.62us,545.79us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,550004,6353,4.56s,470.79us,0.00ns,472.23us,4.10us,470.62us,520.08us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,550004,32603,4.56s,90.96us,0.00ns,91.97us,3.64us,87.12us,125.21us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,550004,25235,4.54s,91.21us,0.00ns,118.83us,3.48ms,86.96us,552.16ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,720057,4475,4.55s,668.54us,0.00ns,670.42us,4.70us,668.38us,732.96us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,720057,2889,4.56s,1.04ms,0.00ns,1.04ms,5.82us,1.04ms,1.08ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,720057,2809,4.56s,1.06ms,0.00ns,1.07ms,6.63us,1.06ms,1.13ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,720057,66587,4.56s,44.67us,0.00ns,45.00us,1.19us,44.50us,78.04us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,720057,67235,4.56s,44.25us,0.00ns,44.57us,1.21us,43.92us,74.17us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,720057,82687,4.55s,35.79us,0.00ns,36.23us,1.21us,35.50us,68.96us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,720057,2902,4.56s,1.03ms,0.00ns,1.03ms,5.77us,1.03ms,1.09ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,720057,65934,4.56s,45.33us,0.00ns,45.45us,1.07us,45.17us,95.88us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,720057,66429,4.56s,45.00us,0.00ns,45.11us,1.07us,44.83us,84.62us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,720057,9758,4.56s,305.54us,0.00ns,307.39us,81.34us,299.04us,8.29ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,9652,4.54s,305.54us,0.00ns,310.79us,167.73us,297.08us,12.55ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,720057,116201,4.63s,25.58us,0.00ns,25.77us,815.00ns,25.38us,57.00us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,720057,117983,4.63s,25.25us,0.00ns,25.38us,745.00ns,25.08us,59.00us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,720057,760,4.56s,3.95ms,0.00ns,3.95ms,9.97us,3.94ms,4.01ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,720057,760,4.56s,3.95ms,0.00ns,3.95ms,9.68us,3.94ms,4.00ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,720057,760,4.56s,3.95ms,21.00ns,3.95ms,9.83us,3.94ms,4.01ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,720057,3634,4.56s,823.17us,0.00ns,825.55us,5.30us,822.96us,871.75us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,720057,3638,4.56s,822.29us,0.00ns,824.75us,5.28us,822.12us,884.54us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,720057,4835,4.56s,616.50us,0.00ns,620.44us,10.35us,616.33us,753.62us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,720057,2903,4.55s,1.03ms,0.00ns,1.03ms,5.86us,1.03ms,1.07ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,720057,3186,4.56s,740.58us,0.00ns,941.70us,9.88ms,720.08us,558.15ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,720057,4157,4.55s,719.58us,0.00ns,721.74us,4.82us,719.46us,764.38us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,720057,760,4.56s,3.95ms,21.00ns,3.95ms,10.42us,3.94ms,4.00ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,759,4.56s,3.95ms,0.00ns,3.95ms,11.21us,3.94ms,4.03ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,720057,5653,4.56s,523.71us,0.00ns,530.64us,15.34us,478.96us,611.08us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,720057,5619,4.56s,526.33us,0.00ns,533.86us,14.77us,487.58us,588.71us\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,,421,4.56s,7.15ms,0.00ns,7.13ms,40.24us,7.05ms,7.20ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,,162,4.56s,18.52ms,271.00ns,18.53ms,78.57us,18.41ms,19.04ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,,80,4.56s,37.57ms,0.00ns,37.57ms,44.86us,37.51ms,37.91ms\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1000,18720,4.56s,159.75us,0.00ns,160.21us,2.14us,159.50us,193.83us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1000,4549,4.56s,656.67us,0.00ns,659.57us,59.21us,646.75us,3.94ms\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1000,11097,4.54s,266.92us,0.00ns,270.30us,91.74us,258.88us,8.40ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,806771,122,4.56s,24.78ms,188.00ns,24.78ms,19.69us,24.73ms,24.82ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,806771,24,4.68s,128.88ms,729.00ns,128.88ms,42.94us,128.80ms,129.03ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,806771,59,4.56s,51.00ms,0.00ns,51.05ms,211.94us,50.83ms,52.13ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,4309,4.56s,695.00us,0.00ns,696.20us,5.05us,690.04us,744.75us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1822,4.56s,1.64ms,0.00ns,1.65ms,7.20us,1.64ms,1.69ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1824,4.56s,1.64ms,0.00ns,1.65ms,7.38us,1.64ms,1.69ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,60974,4.56s,48.96us,0.00ns,49.15us,1.15us,48.38us,84.29us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,86229,4.56s,34.62us,0.00ns,34.74us,0.97us,34.08us,87.25us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,13882,4.56s,214.92us,0.00ns,216.06us,9.46us,199.79us,268.62us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,2645,4.54s,886.00us,0.00ns,1.13ms,10.76ms,885.33us,554.26ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,7830,4.56s,382.25us,0.00ns,383.09us,3.56us,378.33us,424.04us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,6907,4.56s,432.83us,0.00ns,434.31us,4.36us,431.50us,480.79us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,7275,4.56s,412.62us,0.00ns,412.33us,4.33us,409.04us,451.92us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,14146,4.56s,209.62us,0.00ns,212.04us,8.03us,198.46us,250.62us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,14987,4.56s,197.50us,0.00ns,200.14us,8.06us,186.75us,259.75us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,5941,4.56s,503.50us,0.00ns,504.92us,4.22us,502.50us,543.04us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1998,4.56s,1.50ms,0.00ns,1.50ms,6.75us,1.49ms,1.55ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2007,4.56s,1.49ms,0.00ns,1.49ms,7.10us,1.49ms,1.61ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,23538,4.56s,126.96us,0.00ns,127.40us,2.05us,125.75us,166.04us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,40721,4.56s,73.54us,0.00ns,73.62us,52.73us,72.00us,10.71ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,11943,4.57s,249.00us,0.00ns,251.15us,18.27us,232.75us,867.04us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3305,4.55s,903.54us,0.00ns,907.90us,11.96us,902.50us,1.09ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,7168,4.56s,417.38us,0.00ns,418.48us,4.20us,411.54us,512.08us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,8613,4.56s,347.88us,0.00ns,348.30us,3.70us,344.21us,391.75us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,11076,4.56s,270.04us,0.00ns,270.81us,3.08us,268.83us,313.12us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,9999,4.56s,301.17us,0.00ns,300.00us,8.92us,285.96us,346.62us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,12125,4.56s,245.04us,0.00ns,247.37us,8.48us,234.00us,297.12us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,2817,4.56s,1.06ms,0.00ns,1.07ms,6.08us,1.06ms,1.12ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1367,4.56s,2.19ms,0.00ns,2.20ms,7.74us,2.19ms,2.25ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1404,4.56s,2.14ms,0.00ns,2.14ms,7.73us,2.13ms,2.18ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,3544,4.56s,654.29us,1.00ns,846.54us,9.42ms,645.12us,560.77ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,3671,4.56s,815.08us,0.00ns,817.32us,5.36us,814.33us,858.62us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,3210,4.56s,933.54us,0.00ns,934.67us,6.63us,920.67us,0.97ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,2015,4.56s,1.49ms,0.00ns,1.49ms,10.76us,1.47ms,1.54ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,3295,4.56s,908.88us,0.00ns,910.66us,6.02us,902.83us,0.97ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,1952,4.56s,1.53ms,0.00ns,1.54ms,9.16us,1.53ms,1.78ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,2580,4.56s,1.16ms,0.00ns,1.16ms,7.96us,1.14ms,1.23ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,1848,4.56s,1.62ms,0.00ns,1.62ms,8.56us,1.58ms,1.69ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,2804,4.56s,1.07ms,0.00ns,1.07ms,5.99us,1.06ms,1.12ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,3018,4.56s,0.99ms,1.00ns,0.99ms,5.59us,0.99ms,1.04ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1615,5.09s,1.84ms,0.00ns,2.19ms,13.79ms,1.83ms,556.10ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1630,4.52s,1.84ms,0.00ns,1.84ms,6.92us,1.83ms,1.89ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,58178,4.56s,51.38us,0.00ns,51.52us,1.19us,51.08us,86.79us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,94322,4.63s,31.67us,0.00ns,31.75us,872.00ns,31.46us,64.00us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,6404,4.55s,466.04us,0.00ns,468.42us,9.24us,458.21us,556.79us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3389,4.56s,882.88us,0.00ns,885.38us,5.40us,882.33us,936.00us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,7799,4.56s,383.83us,0.00ns,384.66us,3.52us,376.83us,430.75us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,6645,4.56s,450.29us,0.00ns,451.46us,4.02us,446.00us,512.92us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,7161,4.56s,417.62us,0.00ns,418.94us,4.44us,414.62us,467.21us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,6390,4.56s,468.96us,0.00ns,469.45us,3.49us,464.62us,500.50us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,6725,4.56s,445.79us,0.00ns,446.11us,3.23us,441.08us,474.67us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,1713,4.56s,1.75ms,0.00ns,1.75ms,6.56us,1.74ms,1.81ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1264,4.56s,2.37ms,0.00ns,2.37ms,8.30us,2.37ms,2.43ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1265,4.56s,2.37ms,0.00ns,2.37ms,4.90us,2.37ms,2.42ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,32408,4.56s,92.33us,0.00ns,92.52us,0.95us,91.92us,146.83us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,51735,4.56s,57.88us,0.00ns,57.94us,544.00ns,57.29us,83.21us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,5852,4.56s,510.54us,0.00ns,512.66us,4.85us,506.54us,546.62us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3318,4.56s,903.46us,0.00ns,904.16us,3.30us,902.29us,0.97ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,7445,4.55s,401.83us,0.00ns,402.95us,3.96us,397.00us,444.00us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,6715,4.56s,442.17us,0.00ns,446.75us,9.90us,438.25us,489.29us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,7724,4.56s,388.12us,0.00ns,388.40us,4.05us,383.38us,451.29us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,5792,4.56s,516.50us,0.00ns,517.98us,4.78us,513.21us,562.71us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,6168,4.56s,485.12us,0.00ns,486.34us,4.23us,482.38us,530.79us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,5175,4.55s,578.50us,0.00ns,579.69us,4.37us,573.33us,614.33us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1682,4.56s,1.78ms,1.00ns,1.78ms,7.17us,1.78ms,1.84ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1335,4.53s,1.76ms,0.00ns,2.25ms,15.43ms,1.75ms,565.52ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,5797,4.56s,518.54us,0.00ns,517.47us,7.13us,499.92us,561.96us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,5026,4.56s,595.08us,0.00ns,596.87us,4.57us,593.33us,646.17us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,4667,4.56s,640.71us,0.00ns,642.86us,5.61us,639.17us,696.00us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,2488,4.56s,1.20ms,1.00ns,1.21ms,7.66us,1.20ms,1.25ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,4428,4.56s,675.58us,0.00ns,677.55us,5.67us,671.96us,723.54us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,3205,4.56s,935.12us,0.00ns,936.03us,7.30us,921.58us,0.99ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,4001,4.56s,748.21us,0.00ns,749.80us,5.19us,738.12us,794.29us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,3181,4.56s,946.42us,0.00ns,943.29us,10.50us,919.54us,1.00ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,4414,4.56s,678.21us,0.00ns,679.66us,4.94us,673.04us,716.88us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,6091,4.80s,436.50us,0.00ns,531.19us,7.15ms,436.17us,558.83ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,2064,4.55s,1.45ms,0.00ns,1.45ms,6.78us,1.45ms,1.64ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,2066,4.56s,1.45ms,0.00ns,1.45ms,3.48us,1.45ms,1.47ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,77576,4.56s,38.62us,0.00ns,38.62us,477.00ns,37.38us,62.79us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,100253,4.63s,29.83us,0.00ns,29.88us,350.00ns,29.54us,47.83us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,19852,4.56s,145.62us,0.00ns,151.07us,8.28us,142.54us,189.12us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3330,4.56s,900.46us,0.00ns,901.02us,2.87us,899.62us,921.92us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,7812,4.56s,383.83us,0.00ns,384.00us,2.12us,377.50us,419.17us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,37373,4.56s,80.12us,0.00ns,80.22us,1.71us,78.50us,118.17us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,46856,4.56s,63.75us,0.00ns,63.98us,1.40us,62.96us,105.50us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,21261,4.56s,140.00us,0.00ns,141.06us,66.04us,137.42us,9.73ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,17984,4.53s,130.00us,0.00ns,166.77us,4.13ms,126.75us,553.49ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,4394,4.56s,681.83us,0.00ns,682.77us,3.35us,681.12us,715.75us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1839,4.56s,1.63ms,0.00ns,1.63ms,25.69us,1.63ms,2.08ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1841,4.56s,1.63ms,0.00ns,1.63ms,6.93us,1.62ms,1.67ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,40288,4.56s,74.33us,0.00ns,74.42us,838.00ns,73.67us,96.38us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,59205,4.56s,50.58us,0.00ns,50.62us,606.00ns,50.21us,75.88us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,13907,4.56s,214.29us,0.00ns,215.68us,7.90us,203.67us,259.12us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3328,4.56s,900.92us,0.00ns,901.45us,3.35us,899.62us,942.04us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,7522,4.56s,397.88us,0.00ns,398.82us,3.70us,391.58us,446.54us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,18213,4.56s,164.17us,0.00ns,164.67us,2.43us,163.04us,214.96us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,19515,4.52s,120.54us,0.00ns,153.68us,3.98ms,119.83us,555.35ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,12860,4.54s,234.25us,0.00ns,233.24us,5.54us,225.08us,316.88us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,15038,4.56s,200.12us,0.00ns,199.45us,4.83us,192.79us,233.75us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,12800,4.56s,233.58us,0.00ns,234.34us,2.85us,232.25us,270.71us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1943,4.55s,1.54ms,0.00ns,1.54ms,6.51us,1.54ms,1.58ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1955,4.56s,1.53ms,0.00ns,1.53ms,8.69us,1.53ms,1.76ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,14508,4.56s,206.00us,0.00ns,206.75us,2.72us,204.29us,254.46us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,13401,4.56s,223.17us,0.00ns,223.82us,2.84us,222.38us,258.54us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,5764,4.56s,518.92us,0.00ns,520.45us,4.65us,514.83us,560.42us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3018,4.56s,0.99ms,0.00ns,0.99ms,6.01us,0.99ms,1.03ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,6121,4.56s,486.79us,0.00ns,490.14us,146.76us,481.58us,11.96ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,8580,5.04s,335.96us,0.00ns,349.60us,254.28us,332.96us,19.35ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,11160,4.55s,267.83us,0.00ns,268.79us,3.26us,264.88us,305.29us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,4919,4.56s,608.79us,0.00ns,609.93us,5.54us,602.21us,666.88us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,5723,4.56s,523.12us,0.00ns,524.24us,4.41us,515.25us,567.67us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8430,4.56s,354.88us,0.00ns,355.87us,3.40us,354.75us,395.50us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2133,4.56s,1.40ms,0.00ns,1.41ms,6.62us,1.40ms,1.45ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2133,4.56s,1.40ms,0.00ns,1.41ms,6.61us,1.40ms,1.45ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,160981,4.62s,18.54us,0.00ns,18.58us,679.00ns,18.42us,78.08us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,161289,4.63s,18.50us,0.00ns,18.55us,608.00ns,18.38us,48.92us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,11097,4.56s,270.83us,0.00ns,270.30us,11.59us,247.63us,318.21us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,2641,4.53s,878.29us,0.00ns,1.14ms,11.41ms,875.17us,587.06ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8158,4.55s,366.88us,0.00ns,367.69us,3.55us,363.08us,408.71us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,100697,4.63s,29.67us,0.00ns,29.74us,839.00ns,28.62us,66.96us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,101187,4.62s,29.54us,0.00ns,29.60us,857.00ns,28.58us,60.33us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,86505,4.56s,34.54us,0.00ns,34.63us,907.00ns,34.38us,65.25us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,86617,4.56s,34.50us,0.00ns,34.58us,907.00ns,34.33us,65.17us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,11913,4.56s,254.42us,0.00ns,251.79us,11.65us,232.46us,299.42us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,11907,4.56s,254.33us,0.00ns,251.91us,11.55us,233.38us,303.58us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,5500,4.56s,543.83us,0.00ns,545.44us,4.38us,543.54us,594.67us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1954,4.56s,1.53ms,0.00ns,1.54ms,6.82us,1.53ms,1.59ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1947,4.55s,1.53ms,0.00ns,1.54ms,201.72us,1.53ms,10.39ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,115980,4.59s,25.21us,0.00ns,25.81us,33.69us,24.67us,7.32ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,119027,4.63s,25.08us,0.00ns,25.15us,765.00ns,24.79us,67.67us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,21241,4.56s,137.58us,0.00ns,141.19us,7.40us,131.88us,188.96us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3408,4.56s,878.21us,0.00ns,880.36us,5.35us,875.21us,943.67us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8158,4.56s,366.88us,0.00ns,367.69us,3.58us,363.29us,400.21us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,9249,4.56s,323.38us,0.00ns,324.34us,3.40us,322.79us,368.12us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,9255,4.56s,321.21us,0.00ns,324.12us,4.90us,320.62us,376.08us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,72698,4.56s,41.08us,0.00ns,41.21us,1.03us,40.92us,74.46us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,72404,4.56s,41.29us,0.00ns,41.38us,1.00us,41.08us,72.38us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,23017,4.56s,128.88us,0.00ns,130.29us,4.52us,124.25us,169.12us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,17899,4.53s,129.25us,0.00ns,167.56us,4.09ms,123.92us,547.35ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8466,4.56s,353.25us,0.00ns,354.33us,3.50us,353.04us,392.71us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2133,4.56s,1.41ms,0.00ns,1.41ms,8.48us,1.40ms,1.65ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2134,4.56s,1.40ms,0.00ns,1.41ms,6.63us,1.40ms,1.44ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,165860,4.63s,18.00us,0.00ns,18.04us,611.00ns,17.88us,51.83us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,161290,4.63s,18.50us,0.00ns,18.55us,621.00ns,18.38us,49.79us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,20194,4.56s,144.46us,0.00ns,148.51us,10.63us,134.04us,197.67us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3407,4.56s,878.33us,0.00ns,880.49us,5.32us,875.33us,934.96us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8159,4.56s,366.83us,0.00ns,367.66us,3.51us,363.25us,401.38us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,101958,4.63s,29.29us,0.00ns,29.38us,836.00ns,28.75us,60.25us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,101962,4.62s,29.21us,0.00ns,29.37us,17.44us,28.67us,5.50ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,85752,4.56s,34.38us,0.00ns,34.93us,34.14us,33.33us,8.38ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,87036,4.56s,34.33us,0.00ns,34.42us,883.00ns,34.17us,65.12us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,22886,4.56s,129.71us,0.00ns,131.03us,5.05us,123.04us,217.38us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,22861,4.55s,129.79us,0.00ns,131.18us,5.15us,122.92us,194.08us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,2783,4.56s,1.08ms,0.00ns,1.08ms,7.41us,1.07ms,1.26ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1560,4.55s,1.92ms,21.00ns,1.92ms,7.83us,1.91ms,1.98ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1565,4.56s,1.92ms,0.00ns,1.92ms,8.16us,1.91ms,1.98ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,176289,4.63s,16.92us,0.00ns,16.96us,600.00ns,16.79us,49.79us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,176369,4.63s,16.92us,0.00ns,16.96us,588.00ns,16.79us,76.12us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,6926,4.55s,435.75us,0.00ns,433.16us,11.57us,401.62us,477.96us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,2660,4.54s,881.33us,0.00ns,1.13ms,10.64ms,878.38us,549.17ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8156,4.55s,366.96us,0.00ns,367.80us,3.46us,360.17us,415.62us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,7022,4.56s,424.50us,0.00ns,427.22us,12.43us,402.25us,540.21us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,6961,4.56s,427.92us,0.00ns,430.96us,13.26us,402.88us,499.00us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,86949,4.56s,34.38us,0.00ns,34.45us,895.00ns,34.21us,64.42us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,87056,4.56s,34.33us,0.00ns,34.41us,894.00ns,34.17us,66.21us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,7203,4.56s,417.96us,0.00ns,416.47us,8.79us,394.08us,465.42us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,7189,4.56s,418.00us,0.00ns,417.30us,8.89us,392.42us,462.17us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,690.91ms,1.00ns,0.00ns,17.00ns,24.00ns,1.00ns,9.50us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,744.23ms,42.00ns,0.00ns,49.00ns,31.00ns,1.00ns,16.50us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,748.47ms,42.00ns,0.00ns,49.00ns,32.00ns,1.00ns,18.04us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,746.52ms,1.00ns,0.00ns,19.00ns,34.00ns,1.00ns,20.79us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,680.78ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,4.75us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,690.30ms,1.00ns,0.00ns,16.00ns,28.00ns,1.00ns,16.67us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,690.63ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,9.58us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,687.49ms,1.00ns,0.00ns,19.00ns,25.00ns,1.00ns,9.96us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,684.05ms,1.00ns,0.00ns,20.00ns,22.00ns,1.00ns,5.75us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,684.77ms,1.00ns,0.00ns,21.00ns,30.00ns,1.00ns,16.58us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,691.67ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,6.79us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,691.80ms,1.00ns,0.00ns,17.00ns,27.00ns,1.00ns,9.33us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,748.32ms,42.00ns,0.00ns,39.00ns,17.00ns,1.00ns,9.58us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,752.48ms,42.00ns,0.00ns,39.00ns,30.00ns,1.00ns,16.50us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,689.61ms,1.00ns,0.00ns,17.00ns,24.00ns,1.00ns,9.25us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,746.12ms,42.00ns,0.00ns,54.00ns,34.00ns,1.00ns,23.75us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,746.64ms,42.00ns,0.00ns,53.00ns,36.00ns,1.00ns,16.83us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,748.12ms,1.00ns,0.00ns,19.00ns,31.00ns,1.00ns,21.00us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,631.47ms,1.00ns,0.00ns,18.00ns,25.00ns,1.00ns,13.62us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,1.32s,1.00ns,0.00ns,20.00ns,1.79us,1.00ns,1.79ms\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,690.67ms,1.00ns,0.00ns,19.00ns,28.00ns,1.00ns,15.54us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,681.50ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,6.96us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,684.73ms,1.00ns,0.00ns,20.00ns,23.00ns,1.00ns,7.17us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,685.86ms,1.00ns,0.00ns,21.00ns,28.00ns,1.00ns,8.58us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,694.29ms,1.00ns,0.00ns,18.00ns,25.00ns,1.00ns,10.29us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,696.15ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,6.75us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,753.80ms,42.00ns,0.00ns,34.00ns,27.00ns,1.00ns,13.21us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,748.80ms,42.00ns,0.00ns,34.00ns,46.00ns,1.00ns,31.88us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,682.87ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,7.67us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,753.57ms,42.00ns,0.00ns,61.00ns,30.00ns,1.00ns,9.79us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,745.94ms,42.00ns,0.00ns,60.00ns,40.00ns,1.00ns,19.12us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,682.85ms,1.00ns,0.00ns,20.00ns,26.00ns,1.00ns,13.83us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,691.40ms,1.00ns,0.00ns,18.00ns,23.00ns,1.00ns,9.58us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,686.44ms,1.00ns,0.00ns,16.00ns,34.00ns,1.00ns,23.12us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,683.44ms,1.00ns,0.00ns,19.00ns,27.00ns,1.00ns,9.25us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,680.18ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,6.88us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,691.18ms,1.00ns,0.00ns,21.00ns,36.00ns,1.00ns,21.50us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,690.54ms,1.00ns,0.00ns,21.00ns,27.00ns,1.00ns,12.17us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,692.97ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,6.96us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,692.90ms,1.00ns,0.00ns,17.00ns,28.00ns,1.00ns,16.88us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,691.18ms,1.00ns,0.00ns,21.00ns,32.00ns,1.00ns,13.75us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,684.81ms,41.00ns,0.00ns,22.00ns,31.00ns,1.00ns,12.29us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,749.59ms,41.00ns,0.00ns,25.00ns,23.00ns,1.00ns,9.88us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,809.43ms,83.00ns,0.00ns,71.00ns,36.00ns,1.00ns,20.67us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,815.23ms,83.00ns,0.00ns,72.00ns,37.00ns,1.00ns,14.92us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,691.52ms,1.00ns,0.00ns,20.00ns,29.00ns,1.00ns,15.58us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,692.70ms,1.00ns,0.00ns,18.00ns,28.00ns,1.00ns,17.00us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,684.77ms,1.00ns,0.00ns,18.00ns,27.00ns,1.00ns,12.00us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,682.07ms,1.00ns,0.00ns,20.00ns,36.00ns,1.00ns,16.58us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,692.22ms,1.00ns,0.00ns,19.00ns,27.00ns,1.00ns,14.96us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,691.01ms,1.00ns,0.00ns,21.00ns,25.00ns,1.00ns,9.50us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,689.80ms,41.00ns,0.00ns,29.00ns,25.00ns,1.00ns,9.96us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,687.88ms,1.00ns,0.00ns,18.00ns,29.00ns,1.00ns,16.75us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,692.68ms,1.00ns,0.00ns,17.00ns,35.00ns,1.00ns,24.12us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,681.71ms,1.00ns,0.00ns,21.00ns,25.00ns,1.00ns,9.83us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,687.07ms,1.00ns,0.00ns,21.00ns,25.00ns,1.00ns,9.42us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,2183,4.55s,1.37ms,0.00ns,1.37ms,7.36us,1.36ms,1.45ms\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,3298,4.56s,907.08us,0.00ns,909.59us,5.58us,906.92us,0.97ms\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,3298,4.56s,907.08us,0.00ns,909.72us,5.67us,906.92us,0.96ms\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,157856,4.63s,18.92us,0.00ns,18.95us,636.00ns,18.75us,44.04us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,124937,4.61s,18.83us,0.00ns,23.96us,1.57ms,18.17us,553.51ms\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,13266,4.56s,225.25us,0.00ns,226.10us,3.84us,219.67us,269.88us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3411,4.56s,877.79us,0.00ns,879.52us,5.69us,875.12us,931.12us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,99066,4.63s,30.17us,0.00ns,30.23us,871.00ns,29.67us,76.62us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,99564,4.63s,30.00us,0.00ns,30.08us,863.00ns,29.54us,60.67us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613402,36833,4.56s,81.17us,0.00ns,81.40us,1.57us,80.62us,115.21us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,39138,4.56s,76.75us,0.00ns,76.60us,1.70us,74.88us,108.54us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,14037,4.56s,218.54us,0.00ns,213.67us,7.24us,204.79us,256.50us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,14096,4.56s,212.00us,0.00ns,212.78us,2.86us,210.67us,267.25us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,42,1000000,689.89ms,41.00ns,0.00ns,23.00ns,40.00ns,1.00ns,30.96us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,744.87ms,42.00ns,0.00ns,40.00ns,31.00ns,1.00ns,19.29us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,752.87ms,42.00ns,0.00ns,40.00ns,31.00ns,1.00ns,16.54us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,748.27ms,41.00ns,0.00ns,28.00ns,22.00ns,1.00ns,6.71us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,684.64ms,1.00ns,0.00ns,17.00ns,24.00ns,1.00ns,9.92us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,42,1000000,692.45ms,1.00ns,0.00ns,16.00ns,30.00ns,1.00ns,19.58us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,691.62ms,1.00ns,0.00ns,21.00ns,24.00ns,1.00ns,9.75us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,752.07ms,41.00ns,0.00ns,28.00ns,32.00ns,1.00ns,16.12us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,684.98ms,1.00ns,0.00ns,20.00ns,24.00ns,1.00ns,8.62us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,625.76ms,1.00ns,0.00ns,18.00ns,25.00ns,1.00ns,12.17us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,694.61ms,1.00ns,0.00ns,17.00ns,28.00ns,1.00ns,16.21us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,42,1000000,869.32ms,84.00ns,0.00ns,100.00ns,51.00ns,1.00ns,23.50us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,42,1000000,1.48s,84.00ns,0.00ns,99.00ns,46.00ns,1.00ns,19.58us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,5907,4.55s,506.33us,0.00ns,507.89us,4.26us,506.04us,549.71us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1992,4.56s,1.50ms,0.00ns,1.51ms,6.54us,1.50ms,1.55ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1992,4.55s,1.50ms,0.00ns,1.51ms,6.79us,1.50ms,1.56ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,156295,4.63s,19.08us,0.00ns,19.14us,647.00ns,18.96us,52.08us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,152300,4.63s,19.62us,0.00ns,19.65us,656.00ns,19.46us,50.67us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,35855,4.56s,80.75us,0.00ns,83.62us,4.33us,79.79us,117.79us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3408,4.56s,878.21us,0.00ns,880.45us,5.47us,875.21us,928.12us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,8155,4.56s,367.00us,0.00ns,367.84us,3.48us,363.04us,406.75us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,42942,4.55s,69.96us,0.00ns,69.81us,2.19us,67.71us,118.79us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,43386,4.56s,68.83us,0.00ns,69.10us,1.46us,68.25us,105.92us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613427,64420,4.58s,35.83us,0.00ns,46.52us,2.19ms,34.67us,555.90ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,83515,4.56s,35.75us,0.00ns,35.87us,1.02us,35.62us,76.92us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,40085,4.56s,74.54us,0.00ns,74.79us,2.42us,70.79us,117.12us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,40800,4.55s,73.21us,0.00ns,73.48us,2.01us,70.12us,111.04us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,31,1000000,684.10ms,1.00ns,0.00ns,17.00ns,24.00ns,1.00ns,12.42us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,742.84ms,42.00ns,0.00ns,49.00ns,16.00ns,1.00ns,1.38us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,751.23ms,42.00ns,0.00ns,49.00ns,29.00ns,1.00ns,16.50us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,684.00ms,1.00ns,0.00ns,20.00ns,24.00ns,1.00ns,9.88us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,686.39ms,1.00ns,0.00ns,18.00ns,23.00ns,1.00ns,10.04us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,31,1000000,687.53ms,1.00ns,0.00ns,16.00ns,24.00ns,1.00ns,9.96us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,687.01ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,4.83us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,684.35ms,1.00ns,0.00ns,19.00ns,28.00ns,1.00ns,15.79us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,691.27ms,1.00ns,0.00ns,20.00ns,29.00ns,1.00ns,16.83us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,685.30ms,1.00ns,0.00ns,20.00ns,28.00ns,1.00ns,16.79us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,686.02ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,6.88us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,685.53ms,1.00ns,0.00ns,17.00ns,27.00ns,1.00ns,14.33us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,31,1000000,809.29ms,42.00ns,0.00ns,54.00ns,33.00ns,1.00ns,16.12us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,31,1000000,752.94ms,42.00ns,0.00ns,54.00ns,38.00ns,1.00ns,16.58us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8065,4.56s,370.83us,0.00ns,371.93us,3.54us,370.71us,410.21us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2119,4.56s,1.41ms,0.00ns,1.42ms,6.60us,1.41ms,1.47ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2120,4.56s,1.41ms,0.00ns,1.42ms,6.62us,1.41ms,1.46ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,157841,4.63s,18.92us,0.00ns,18.96us,628.00ns,18.79us,50.04us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,124631,4.63s,18.83us,0.00ns,24.02us,1.59ms,18.17us,560.23ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,18748,4.56s,157.79us,0.00ns,159.97us,7.01us,148.12us,204.17us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3411,4.56s,878.08us,0.00ns,879.66us,5.99us,875.08us,0.98ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8158,4.56s,366.96us,0.00ns,367.71us,3.55us,362.04us,419.42us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,74410,4.56s,40.12us,0.00ns,40.27us,1.00us,39.71us,71.75us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,73063,4.56s,40.88us,0.00ns,41.01us,1.01us,40.38us,71.62us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,85263,4.56s,35.04us,0.00ns,35.13us,931.00ns,34.88us,68.25us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,85358,4.56s,35.00us,0.00ns,35.10us,920.00ns,34.88us,64.71us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,20178,4.56s,146.71us,0.00ns,148.63us,5.58us,139.75us,193.71us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,20144,4.56s,146.92us,0.00ns,148.88us,5.53us,139.75us,198.33us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8044,4.56s,370.83us,0.00ns,372.90us,38.90us,370.71us,3.36ms\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2093,4.52s,1.41ms,0.00ns,1.43ms,464.21us,1.41ms,20.19ms\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2119,4.56s,1.41ms,0.00ns,1.42ms,6.64us,1.41ms,1.47ms\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,163825,4.63s,18.21us,0.00ns,18.26us,593.00ns,18.08us,48.42us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,159779,4.63s,18.67us,0.00ns,18.72us,650.00ns,18.54us,71.25us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,17382,4.56s,172.42us,0.00ns,172.54us,9.82us,156.04us,218.38us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3406,4.56s,878.62us,0.00ns,880.81us,5.25us,875.42us,926.33us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8161,4.56s,366.79us,0.00ns,367.56us,3.51us,363.17us,419.71us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,36102,4.56s,82.83us,0.00ns,83.05us,1.51us,82.33us,119.00us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,36313,4.56s,82.33us,0.00ns,82.56us,1.54us,81.79us,118.04us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,86550,4.56s,34.54us,0.00ns,34.61us,909.00ns,34.38us,65.50us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,67573,4.57s,34.46us,0.00ns,44.34us,2.12ms,33.42us,549.93ms\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,18927,4.56s,158.00us,0.00ns,158.46us,7.27us,146.04us,232.79us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,18702,4.56s,159.83us,0.00ns,160.36us,7.45us,146.54us,202.54us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,5910,4.56s,506.04us,0.00ns,507.65us,4.35us,505.54us,557.00us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,3262,4.55s,917.50us,0.00ns,919.76us,5.13us,915.79us,0.97ms\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3262,4.55s,917.29us,0.00ns,919.71us,5.42us,915.33us,0.96ms\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,147046,4.63s,20.29us,0.00ns,20.35us,667.00ns,20.17us,55.33us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,147839,4.63s,20.21us,0.00ns,20.24us,673.00ns,20.04us,51.00us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,29923,4.56s,99.83us,0.00ns,100.21us,1.84us,98.79us,139.50us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3409,4.56s,878.04us,0.00ns,880.08us,5.55us,875.08us,928.92us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,33348,4.56s,89.92us,0.00ns,89.91us,40.37us,88.21us,7.45ms\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,33815,4.54s,87.33us,0.00ns,88.67us,106.16us,85.88us,19.53ms\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,64750,4.55s,46.12us,0.00ns,46.28us,1.05us,45.83us,81.38us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,65127,4.56s,45.88us,0.00ns,46.01us,1.05us,45.58us,75.42us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,35686,4.56s,83.75us,0.00ns,84.02us,1.59us,83.08us,121.29us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,35518,4.56s,84.12us,0.00ns,84.41us,1.63us,83.42us,131.96us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,7610,4.56s,392.96us,0.00ns,394.18us,3.89us,392.79us,431.67us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,3243,4.56s,922.96us,0.00ns,925.13us,5.54us,919.83us,0.98ms\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3243,4.56s,922.96us,0.00ns,925.15us,5.53us,919.88us,0.97ms\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,158117,4.63s,18.88us,0.00ns,18.92us,639.00ns,18.75us,52.79us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,169150,4.63s,17.42us,0.00ns,17.68us,783.00ns,17.25us,48.38us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,33885,4.55s,68.83us,0.00ns,88.48us,3.01ms,67.79us,554.21ms\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3408,4.56s,878.04us,0.00ns,880.40us,5.56us,875.17us,919.04us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,38890,4.56s,77.00us,0.00ns,77.09us,1.59us,75.54us,123.67us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,39061,4.56s,76.46us,0.00ns,76.75us,1.57us,75.79us,119.42us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,82323,4.56s,36.29us,0.00ns,36.39us,926.00ns,36.12us,65.50us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,82321,4.56s,36.29us,0.00ns,36.39us,0.96us,36.17us,77.54us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,58813,4.55s,50.75us,0.00ns,50.96us,1.22us,50.08us,85.08us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,59574,4.56s,50.08us,0.00ns,50.31us,1.32us,49.21us,81.04us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8230,4.56s,363.42us,0.00ns,364.50us,3.54us,363.29us,398.21us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,3254,4.56s,919.67us,0.00ns,921.94us,5.38us,917.79us,0.97ms\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3197,5.08s,919.88us,0.00ns,1.10ms,9.88ms,894.96us,559.62ms\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,139929,4.62s,21.29us,0.00ns,21.39us,767.00ns,20.83us,52.25us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,168933,4.63s,17.46us,0.00ns,17.71us,688.00ns,17.29us,48.46us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,44897,4.56s,66.58us,0.00ns,66.77us,1.35us,65.96us,98.62us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3410,4.56s,877.67us,0.00ns,879.93us,5.25us,874.71us,919.62us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,62359,4.56s,47.92us,0.00ns,48.06us,1.10us,47.42us,79.67us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,66427,4.56s,45.00us,0.00ns,45.11us,1.11us,44.42us,78.38us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,83943,4.56s,35.58us,0.00ns,35.69us,0.98us,35.46us,87.92us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,83961,4.56s,35.58us,0.00ns,35.68us,0.98us,35.42us,71.79us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,49952,4.56s,59.75us,0.00ns,60.01us,1.31us,59.08us,100.25us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,52660,4.56s,56.62us,0.00ns,56.92us,28.43us,54.29us,6.08ms\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,687.07ms,1.00ns,0.00ns,19.00ns,30.00ns,1.00ns,21.33us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,755.58ms,42.00ns,0.00ns,40.00ns,28.00ns,1.00ns,16.71us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,804.57ms,42.00ns,0.00ns,40.00ns,12.00ns,1.00ns,1.54us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,748.61ms,41.00ns,0.00ns,31.00ns,837.00ns,1.00ns,479.92us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,691.81ms,1.00ns,0.00ns,18.00ns,23.00ns,1.00ns,9.79us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,680.23ms,41.00ns,0.00ns,22.00ns,22.00ns,1.00ns,6.96us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,750.66ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,5.12us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,682.48ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,7.46us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,747.86ms,41.00ns,0.00ns,26.00ns,22.00ns,1.00ns,10.08us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,690.08ms,41.00ns,0.00ns,28.00ns,26.00ns,1.00ns,9.79us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,755.43ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,9.00us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,685.63ms,1.00ns,0.00ns,19.00ns,32.00ns,1.00ns,20.17us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,1.00s,166.00ns,0.00ns,147.00ns,53.00ns,41.00ns,23.58us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,813.11ms,83.00ns,0.00ns,76.00ns,31.00ns,1.00ns,10.46us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,691.74ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,9.46us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,756.19ms,42.00ns,0.00ns,44.00ns,27.00ns,1.00ns,13.54us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,747.89ms,42.00ns,0.00ns,43.00ns,14.00ns,1.00ns,9.33us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,745.47ms,1.00ns,0.00ns,21.00ns,28.00ns,1.00ns,16.42us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,690.83ms,1.00ns,0.00ns,20.00ns,25.00ns,1.00ns,9.42us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,690.89ms,1.00ns,0.00ns,18.00ns,25.00ns,1.00ns,12.25us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,691.90ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,4.96us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,690.66ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,9.29us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,744.48ms,1.00ns,0.00ns,21.00ns,28.00ns,1.00ns,16.50us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,687.96ms,41.00ns,0.00ns,26.00ns,25.00ns,1.00ns,9.04us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,684.76ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,6.75us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,692.08ms,1.00ns,0.00ns,18.00ns,32.00ns,1.00ns,21.25us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,812.98ms,83.00ns,0.00ns,66.00ns,41.00ns,1.00ns,22.42us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,746.59ms,42.00ns,0.00ns,34.00ns,24.00ns,1.00ns,9.62us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,2186,4.55s,1.37ms,0.00ns,1.37ms,7.57us,1.36ms,1.49ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,3298,4.56s,907.08us,0.00ns,909.75us,5.37us,906.92us,0.95ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,3298,4.56s,907.08us,0.00ns,909.73us,5.56us,906.96us,0.97ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,157518,4.63s,18.96us,0.00ns,18.99us,646.00ns,18.83us,45.88us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,158316,4.63s,18.88us,0.00ns,18.90us,643.00ns,18.75us,77.75us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,16012,4.56s,186.08us,0.00ns,187.31us,3.42us,182.25us,235.04us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3412,4.56s,877.92us,0.00ns,879.38us,5.77us,875.12us,934.46us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,109430,4.63s,27.29us,0.00ns,27.36us,822.00ns,26.29us,58.54us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,113474,4.62s,26.33us,0.00ns,26.39us,841.00ns,25.33us,74.71us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613402,46715,4.56s,64.08us,0.00ns,64.17us,1.34us,63.04us,97.62us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,44691,4.56s,66.92us,0.00ns,67.08us,1.36us,66.38us,94.88us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,13959,4.57s,169.62us,0.00ns,214.87us,4.67ms,157.88us,551.45ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,17375,4.55s,173.00us,0.00ns,172.62us,3.76us,164.46us,217.08us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,1784,4.56s,1.68ms,1.00ns,1.68ms,25.98us,1.67ms,2.01ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1299,4.56s,2.31ms,0.00ns,2.31ms,7.90us,2.30ms,2.35ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1301,4.56s,2.30ms,0.00ns,2.31ms,10.91us,2.30ms,2.47ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,157619,4.63s,18.96us,0.00ns,18.98us,643.00ns,18.83us,52.08us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,157855,4.62s,18.92us,0.00ns,18.95us,631.00ns,18.79us,49.62us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,10010,4.56s,298.46us,0.00ns,299.67us,4.97us,293.29us,334.67us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3412,4.56s,877.83us,0.00ns,879.19us,5.85us,875.12us,934.33us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,8161,4.56s,366.75us,0.00ns,367.59us,3.57us,362.92us,405.96us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,110838,4.62s,26.92us,0.00ns,27.02us,10.18us,25.42us,2.83ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,109922,4.58s,26.42us,0.00ns,27.24us,46.59us,25.58us,11.60ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613402,55974,4.55s,53.38us,0.00ns,53.54us,1.21us,53.04us,93.58us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,54409,4.56s,54.88us,0.00ns,55.09us,1.39us,53.92us,93.04us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,10696,4.56s,279.62us,0.00ns,280.43us,4.21us,274.42us,409.83us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,10765,4.56s,278.25us,0.00ns,278.63us,3.64us,275.29us,327.79us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,42,1000000,690.81ms,41.00ns,0.00ns,24.00ns,24.00ns,1.00ns,11.00us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,690.55ms,42.00ns,0.00ns,35.00ns,21.00ns,1.00ns,9.46us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,684.95ms,42.00ns,0.00ns,34.00ns,21.00ns,1.00ns,9.79us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,749.67ms,42.00ns,0.00ns,35.00ns,25.00ns,1.00ns,9.42us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,691.26ms,1.00ns,0.00ns,19.00ns,26.00ns,1.00ns,9.50us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,42,1000000,688.08ms,41.00ns,0.00ns,32.00ns,32.00ns,1.00ns,16.46us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,690.93ms,1.00ns,0.00ns,20.00ns,23.00ns,1.00ns,6.92us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,749.13ms,42.00ns,0.00ns,38.00ns,18.00ns,1.00ns,9.50us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,753.66ms,42.00ns,0.00ns,33.00ns,28.00ns,1.00ns,16.42us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,684.07ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,9.75us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,693.59ms,1.00ns,0.00ns,19.00ns,25.00ns,1.00ns,7.42us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,42,1000000,1.23s,250.00ns,0.00ns,256.00ns,77.00ns,125.00ns,25.04us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,42,1000000,0.99s,125.00ns,0.00ns,132.00ns,59.00ns,41.00ns,17.17us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,42,1000000,755.38ms,42.00ns,0.00ns,43.00ns,25.00ns,1.00ns,13.71us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,755.62ms,42.00ns,0.00ns,62.00ns,42.00ns,1.00ns,21.12us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,809.92ms,42.00ns,0.00ns,61.00ns,44.00ns,1.00ns,23.38us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,691.63ms,41.00ns,0.00ns,27.00ns,34.00ns,1.00ns,22.62us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,684.02ms,1.00ns,0.00ns,20.00ns,37.00ns,1.00ns,29.04us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,42,1000000,683.19ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,7.00us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,691.95ms,1.00ns,0.00ns,20.00ns,24.00ns,1.00ns,9.58us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,42,1000000,693.04ms,1.00ns,0.00ns,20.00ns,21.00ns,1.00ns,6.75us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,686.12ms,41.00ns,0.00ns,30.00ns,30.00ns,1.00ns,16.62us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,686.04ms,41.00ns,0.00ns,29.00ns,19.00ns,1.00ns,375.00ns\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,689.29ms,1.00ns,0.00ns,19.00ns,37.00ns,1.00ns,22.96us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,693.31ms,1.00ns,0.00ns,19.00ns,20.00ns,1.00ns,1.46us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,42,1000000,930.59ms,125.00ns,0.00ns,115.00ns,40.00ns,1.00ns,16.62us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,42,1000000,816.77ms,42.00ns,0.00ns,57.00ns,36.00ns,1.00ns,15.96us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,4873,4.54s,612.08us,0.00ns,615.65us,93.00us,610.83us,6.98ms\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,3237,4.53s,913.08us,0.00ns,926.95us,338.52us,886.46us,17.25ms\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,3278,4.56s,913.00us,0.00ns,915.33us,5.57us,911.17us,0.97ms\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,149593,4.63s,19.96us,0.00ns,20.00us,652.00ns,19.83us,70.50us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,149677,4.63s,19.96us,0.00ns,19.99us,624.00ns,19.79us,50.17us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,32454,4.56s,91.12us,0.00ns,92.39us,2.69us,89.75us,128.88us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3411,4.56s,877.96us,0.00ns,879.48us,5.80us,875.21us,921.96us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,21494,4.56s,137.83us,0.00ns,139.52us,3.86us,137.12us,175.50us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,21373,4.56s,140.46us,0.00ns,140.31us,2.65us,137.38us,211.71us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613427,77073,4.56s,38.79us,0.00ns,38.87us,0.98us,38.58us,100.25us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,77248,4.56s,38.71us,0.00ns,38.79us,0.96us,38.54us,69.42us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,26273,4.55s,88.42us,0.00ns,114.13us,3.43ms,86.25us,555.25ms\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,33733,4.56s,88.62us,0.00ns,88.89us,1.80us,87.17us,135.04us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,4363,4.56s,685.50us,0.00ns,687.54us,5.54us,684.96us,809.46us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1840,4.56s,1.63ms,0.00ns,1.63ms,6.76us,1.62ms,1.67ms\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1838,4.56s,1.63ms,0.00ns,1.63ms,6.71us,1.62ms,1.68ms\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,154252,4.62s,19.38us,0.00ns,19.40us,641.00ns,19.21us,44.38us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,154424,4.62s,19.33us,0.00ns,19.38us,602.00ns,19.21us,50.54us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,22368,4.55s,130.04us,0.00ns,134.07us,6.15us,128.92us,172.71us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3416,4.56s,875.38us,0.00ns,878.38us,5.83us,875.25us,919.42us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,8014,4.56s,373.58us,0.00ns,374.32us,3.18us,367.00us,407.42us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,32866,4.55s,90.83us,0.00ns,91.23us,54.73us,89.33us,9.94ms\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,32705,4.55s,87.96us,0.00ns,91.68us,75.18us,86.71us,10.18ms\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613427,72750,4.56s,41.08us,0.00ns,41.19us,1.00us,40.88us,80.71us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,72832,4.56s,41.04us,0.00ns,41.14us,0.99us,40.83us,78.58us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,24077,4.56s,123.33us,0.00ns,124.55us,2.98us,121.67us,178.42us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,24016,4.56s,124.21us,0.00ns,124.87us,2.91us,121.08us,165.33us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,31,1000000,693.18ms,1.00ns,0.00ns,19.00ns,25.00ns,1.00ns,14.17us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,692.07ms,41.00ns,0.00ns,22.00ns,25.00ns,1.00ns,9.79us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,686.54ms,41.00ns,0.00ns,22.00ns,27.00ns,1.00ns,9.88us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,684.56ms,41.00ns,0.00ns,29.00ns,25.00ns,1.00ns,9.71us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,692.84ms,1.00ns,0.00ns,20.00ns,37.00ns,1.00ns,16.54us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,31,1000000,691.71ms,41.00ns,0.00ns,24.00ns,25.00ns,1.00ns,9.33us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,692.75ms,1.00ns,0.00ns,18.00ns,27.00ns,1.00ns,16.71us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,683.67ms,42.00ns,0.00ns,32.00ns,22.00ns,1.00ns,9.25us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,684.30ms,41.00ns,0.00ns,30.00ns,33.00ns,1.00ns,21.58us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,693.46ms,1.00ns,0.00ns,18.00ns,26.00ns,1.00ns,16.83us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,685.92ms,1.00ns,0.00ns,18.00ns,26.00ns,1.00ns,16.00us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,31,1000000,1.16s,250.00ns,0.00ns,236.00ns,72.00ns,125.00ns,25.25us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,31,1000000,929.74ms,125.00ns,0.00ns,119.00ns,43.00ns,1.00ns,22.75us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,31,1000000,754.26ms,41.00ns,0.00ns,22.00ns,25.00ns,1.00ns,9.92us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,746.87ms,42.00ns,0.00ns,44.00ns,26.00ns,1.00ns,16.58us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,745.82ms,42.00ns,0.00ns,42.00ns,20.00ns,1.00ns,16.33us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,684.75ms,1.00ns,0.00ns,20.00ns,28.00ns,1.00ns,16.50us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,691.96ms,1.00ns,0.00ns,20.00ns,31.00ns,1.00ns,18.54us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,31,1000000,693.54ms,1.00ns,0.00ns,19.00ns,26.00ns,1.00ns,12.04us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,686.71ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,13.21us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,686.42ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,6.92us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,684.25ms,41.00ns,0.00ns,23.00ns,28.00ns,1.00ns,16.50us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,685.00ms,41.00ns,0.00ns,27.00ns,26.00ns,1.00ns,16.58us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,694.62ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,8.46us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,685.84ms,1.00ns,0.00ns,18.00ns,30.00ns,1.00ns,19.46us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,31,1000000,877.87ms,83.00ns,0.00ns,83.00ns,34.00ns,1.00ns,16.33us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,31,1000000,750.93ms,42.00ns,0.00ns,44.00ns,29.00ns,1.00ns,19.58us\n"
  },
  {
    "path": "benchmarks/record/aarch64/2023-08-24_2.csv",
    "content": "name,model,rebar_version,engine,engine_version,err,haystack_len,iters,total,median,mad,mean,stddev,min,max\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,6327,4.55s,472.62us,0.00ns,474.12us,4.10us,472.17us,509.88us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,7655,4.55s,390.67us,0.00ns,391.85us,3.85us,389.96us,429.79us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,8378,4.56s,357.25us,0.00ns,358.06us,3.54us,355.88us,408.08us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,6176,4.56s,484.25us,0.00ns,485.74us,4.19us,483.58us,559.04us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,7865,4.56s,379.83us,0.00ns,381.39us,4.60us,377.29us,572.17us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,8130,4.56s,368.12us,0.00ns,368.97us,3.27us,367.38us,419.08us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,5900,4.56s,507.08us,0.00ns,508.44us,4.19us,505.96us,545.62us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,5878,4.56s,508.67us,0.00ns,510.34us,4.32us,507.63us,569.38us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,7627,4.56s,391.79us,0.00ns,393.28us,4.12us,389.54us,430.29us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,5822,4.56s,513.71us,0.00ns,515.29us,4.31us,512.88us,562.38us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,5263,4.56s,568.21us,0.00ns,569.99us,4.49us,567.88us,614.42us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,3063,4.56s,0.98ms,0.00ns,0.98ms,18.05us,0.97ms,1.27ms\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,4499,4.56s,664.92us,0.00ns,666.76us,4.90us,662.92us,714.83us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,5428,4.56s,550.96us,0.00ns,552.65us,4.43us,550.25us,599.92us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,3199,4.56s,936.33us,0.00ns,938.00us,5.65us,930.83us,0.99ms\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,2930,4.55s,1.02ms,0.00ns,1.02ms,5.97us,1.02ms,1.06ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,3801,4.56s,787.00us,0.00ns,789.35us,5.13us,786.79us,835.25us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,2105,4.56s,1.42ms,0.00ns,1.43ms,7.41us,1.42ms,1.47ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,3164,4.56s,946.58us,0.00ns,948.34us,5.65us,940.71us,0.98ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,3979,4.56s,751.71us,0.00ns,754.00us,5.16us,751.38us,794.96us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,2450,4.56s,1.22ms,0.00ns,1.22ms,6.84us,1.22ms,1.28ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,2226,4.56s,1.34ms,0.00ns,1.35ms,6.94us,1.34ms,1.40ms\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,1.23s,292.00ns,0.00ns,297.00ns,81.00ns,208.00ns,28.79us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,1.29s,291.00ns,0.00ns,273.00ns,78.00ns,166.00ns,25.46us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.23s,250.00ns,0.00ns,246.00ns,76.00ns,125.00ns,31.79us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,1.05s,167.00ns,0.00ns,178.00ns,61.00ns,83.00ns,24.62us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.17s,250.00ns,0.00ns,231.00ns,66.00ns,125.00ns,18.83us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,1.17s,250.00ns,0.00ns,240.00ns,68.00ns,125.00ns,24.92us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.10s,208.00ns,0.00ns,209.00ns,69.00ns,83.00ns,25.12us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.11s,208.00ns,0.00ns,209.00ns,53.00ns,83.00ns,20.88us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.16s,250.00ns,0.00ns,249.00ns,68.00ns,125.00ns,22.17us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,1.23s,209.00ns,0.00ns,223.00ns,84.00ns,125.00ns,24.46us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,1.71s,459.00ns,0.00ns,478.00ns,96.00ns,333.00ns,25.29us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,1.23s,250.00ns,0.00ns,271.00ns,99.00ns,166.00ns,25.62us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.29s,292.00ns,0.00ns,291.00ns,62.00ns,166.00ns,20.58us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,1.59s,458.00ns,0.00ns,460.00ns,94.00ns,333.00ns,30.29us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,1.35s,333.00ns,0.00ns,324.00ns,78.00ns,208.00ns,25.29us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,1.40s,333.00ns,0.00ns,336.00ns,83.00ns,250.00ns,24.92us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,2.32s,791.00ns,0.00ns,775.00ns,124.00ns,625.00ns,26.33us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,1.52s,417.00ns,0.00ns,416.00ns,85.00ns,291.00ns,31.75us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.42s,333.00ns,0.00ns,339.00ns,83.00ns,250.00ns,29.92us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,2.19s,709.00ns,0.00ns,720.00ns,118.00ns,583.00ns,32.33us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,1.71s,500.00ns,0.00ns,506.00ns,102.00ns,375.00ns,25.54us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.65s,459.00ns,0.00ns,470.00ns,84.00ns,375.00ns,24.54us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,748.28ms,42.00ns,0.00ns,49.00ns,26.00ns,1.00ns,9.96us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,749.06ms,42.00ns,0.00ns,44.00ns,17.00ns,1.00ns,9.88us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,740.49ms,42.00ns,0.00ns,37.00ns,23.00ns,1.00ns,15.38us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,751.63ms,41.00ns,0.00ns,31.00ns,25.00ns,1.00ns,9.62us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,743.21ms,41.00ns,0.00ns,28.00ns,34.00ns,1.00ns,23.29us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,751.55ms,42.00ns,0.00ns,32.00ns,27.00ns,1.00ns,14.29us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,749.53ms,42.00ns,0.00ns,42.00ns,22.00ns,1.00ns,16.46us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,750.03ms,42.00ns,0.00ns,43.00ns,22.00ns,1.00ns,13.17us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,745.94ms,41.00ns,0.00ns,28.00ns,31.00ns,1.00ns,16.46us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,748.68ms,42.00ns,0.00ns,44.00ns,19.00ns,1.00ns,9.38us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,238382,4.69s,12.50us,0.00ns,12.53us,507.00ns,12.38us,45.62us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,395983,4.81s,7.50us,0.00ns,7.52us,379.00ns,7.38us,45.21us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,396217,4.81s,7.50us,0.00ns,7.52us,391.00ns,7.38us,39.67us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,132232,4.63s,21.88us,0.00ns,22.64us,1.48us,21.29us,56.08us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,15533,4.56s,193.75us,0.00ns,193.09us,17.09us,169.71us,291.04us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,396283,4.82s,7.50us,0.00ns,7.52us,350.00ns,7.38us,32.54us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,132114,4.63s,21.96us,0.00ns,22.66us,1.50us,21.00us,57.21us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,130061,4.63s,22.38us,0.00ns,23.02us,1.68us,21.00us,74.88us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,15578,4.55s,193.75us,0.00ns,192.53us,17.33us,169.71us,270.83us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,126538,4.63s,23.62us,0.00ns,23.66us,1.41us,21.12us,57.62us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,249292,4.69s,11.96us,0.00ns,11.98us,484.00ns,11.83us,42.83us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,58809,4.55s,50.75us,0.00ns,50.96us,1.32us,50.33us,84.54us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,13207,4.56s,226.42us,0.00ns,227.10us,2.82us,226.29us,282.75us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,249258,4.69s,11.96us,0.00ns,11.98us,492.00ns,11.83us,42.29us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,58212,4.56s,51.12us,0.00ns,51.48us,1.47us,50.38us,84.58us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,62445,4.55s,47.83us,0.00ns,47.99us,1.28us,47.67us,83.12us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,172944,4.62s,17.25us,0.00ns,17.30us,602.00ns,17.17us,47.83us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,42104,4.55s,70.79us,0.00ns,71.20us,1.51us,69.00us,113.00us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,10302,4.56s,290.42us,0.00ns,291.17us,3.17us,289.96us,324.62us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,172968,4.63s,17.25us,0.00ns,17.29us,634.00ns,17.17us,79.29us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,44697,4.56s,66.62us,0.00ns,67.07us,1.80us,65.29us,113.88us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,47920,4.56s,62.25us,0.00ns,62.55us,1.60us,60.17us,96.54us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,751.81ms,41.00ns,0.00ns,22.00ns,27.00ns,1.00ns,16.46us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,754.21ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,4.79us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,687.91ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,6.88us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,747.39ms,42.00ns,0.00ns,34.00ns,26.00ns,1.00ns,11.62us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.17s,209.00ns,0.00ns,225.00ns,61.00ns,125.00ns,19.79us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,688.95ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,9.42us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,746.35ms,41.00ns,0.00ns,30.00ns,27.00ns,1.00ns,9.92us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,752.25ms,41.00ns,0.00ns,30.00ns,31.00ns,1.00ns,20.54us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.17s,209.00ns,0.00ns,227.00ns,70.00ns,125.00ns,32.12us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,749.14ms,42.00ns,0.00ns,32.00ns,28.00ns,1.00ns,15.12us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,750.99ms,1.00ns,0.00ns,20.00ns,30.00ns,1.00ns,16.71us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,805.00ms,83.00ns,0.00ns,65.00ns,34.00ns,1.00ns,15.54us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.30s,250.00ns,0.00ns,269.00ns,57.00ns,166.00ns,24.96us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,756.60ms,1.00ns,0.00ns,19.00ns,25.00ns,1.00ns,13.17us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,816.03ms,83.00ns,0.00ns,65.00ns,41.00ns,1.00ns,23.54us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,802.44ms,83.00ns,0.00ns,64.00ns,40.00ns,1.00ns,16.62us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,748.23ms,1.00ns,0.00ns,20.00ns,23.00ns,1.00ns,9.12us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,869.02ms,83.00ns,0.00ns,89.00ns,44.00ns,1.00ns,23.25us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.42s,333.00ns,0.00ns,342.00ns,74.00ns,250.00ns,23.46us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,754.70ms,1.00ns,0.00ns,20.00ns,23.00ns,1.00ns,7.96us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,867.66ms,83.00ns,0.00ns,85.00ns,32.00ns,1.00ns,16.71us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,871.50ms,83.00ns,0.00ns,87.00ns,32.00ns,1.00ns,17.67us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,690.20ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,167.00ns\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,752.36ms,1.00ns,0.00ns,16.00ns,25.00ns,1.00ns,9.42us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,683.53ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,583.00ns\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,755.51ms,1.00ns,0.00ns,18.00ns,25.00ns,1.00ns,9.33us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,753.15ms,41.00ns,0.00ns,28.00ns,33.00ns,1.00ns,20.79us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,690.59ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,542.00ns\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,756.94ms,1.00ns,0.00ns,17.00ns,29.00ns,1.00ns,11.75us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,746.93ms,1.00ns,0.00ns,17.00ns,31.00ns,1.00ns,21.08us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,743.18ms,41.00ns,0.00ns,28.00ns,29.00ns,1.00ns,16.75us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,684.99ms,1.00ns,0.00ns,16.00ns,28.00ns,1.00ns,16.67us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,69,1000000,749.61ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,4.83us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,690.13ms,1.00ns,0.00ns,17.00ns,20.00ns,1.00ns,1.58us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,69,1000000,751.62ms,42.00ns,0.00ns,37.00ns,24.00ns,1.00ns,14.21us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,69,1000000,747.09ms,1.00ns,0.00ns,16.00ns,22.00ns,1.00ns,9.58us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,69,1000000,688.51ms,1.00ns,0.00ns,17.00ns,26.00ns,1.00ns,16.62us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,69,1000000,753.52ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,10.04us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,69,1000000,684.52ms,1.00ns,0.00ns,16.00ns,21.00ns,1.00ns,6.83us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,686.89ms,1.00ns,0.00ns,17.00ns,27.00ns,1.00ns,16.04us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,69,1000000,747.51ms,42.00ns,0.00ns,44.00ns,23.00ns,1.00ns,15.79us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,69,1000000,683.60ms,1.00ns,0.00ns,16.00ns,22.00ns,1.00ns,6.88us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,69,1000000,749.48ms,1.00ns,0.00ns,17.00ns,21.00ns,1.00ns,4.96us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,69,1000000,690.74ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,6.92us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,,1000000,753.94ms,1.00ns,0.00ns,16.00ns,25.00ns,1.00ns,11.71us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,,1000000,680.69ms,1.00ns,0.00ns,15.00ns,21.00ns,1.00ns,7.00us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,,1000000,688.79ms,1.00ns,0.00ns,15.00ns,23.00ns,1.00ns,9.08us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,,1000000,746.53ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,4.67us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,,1000000,682.49ms,1.00ns,0.00ns,15.00ns,24.00ns,1.00ns,9.25us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,,1000000,690.53ms,1.00ns,0.00ns,15.00ns,35.00ns,1.00ns,20.29us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,,1000000,750.88ms,1.00ns,0.00ns,15.00ns,22.00ns,1.00ns,9.62us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,,1000000,744.32ms,1.00ns,0.00ns,15.00ns,31.00ns,1.00ns,20.08us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,,1000000,751.88ms,1.00ns,0.00ns,15.00ns,20.00ns,1.00ns,5.04us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,,1000000,745.82ms,1.00ns,0.00ns,15.00ns,23.00ns,1.00ns,9.33us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,,1000000,691.14ms,1.00ns,0.00ns,15.00ns,21.00ns,1.00ns,7.00us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,,1000000,753.61ms,1.00ns,0.00ns,16.00ns,21.00ns,1.00ns,6.92us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,,1000000,690.69ms,1.00ns,0.00ns,15.00ns,21.00ns,1.00ns,6.96us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,,1000000,755.41ms,1.00ns,0.00ns,15.00ns,30.00ns,1.00ns,13.83us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,,1000000,742.94ms,1.00ns,0.00ns,15.00ns,25.00ns,1.00ns,13.50us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,,1000000,744.37ms,1.00ns,0.00ns,15.00ns,29.00ns,1.00ns,21.04us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,,1000000,753.81ms,1.00ns,0.00ns,15.00ns,21.00ns,1.00ns,5.17us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,,1000000,690.01ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,4.79us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,,1000000,754.25ms,1.00ns,0.00ns,15.00ns,32.00ns,1.00ns,17.08us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,,1000000,747.95ms,1.00ns,0.00ns,15.00ns,23.00ns,1.00ns,9.79us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,,1000000,752.95ms,1.00ns,0.00ns,15.00ns,25.00ns,1.00ns,9.75us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,,1000000,746.47ms,1.00ns,0.00ns,15.00ns,19.00ns,1.00ns,125.00ns\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,205266,4.69s,14.54us,0.00ns,14.56us,552.00ns,14.38us,50.54us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,318221,4.73s,9.33us,0.00ns,9.37us,433.00ns,9.21us,43.50us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,325088,4.75s,9.17us,0.00ns,9.18us,439.00ns,9.00us,42.58us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,112526,4.63s,26.00us,0.00ns,26.61us,1.35us,25.08us,68.67us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,14870,4.56s,200.21us,0.00ns,201.70us,8.28us,179.29us,250.50us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,326608,4.75s,9.12us,0.00ns,9.13us,398.00ns,9.00us,40.12us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,111393,4.63s,26.83us,0.00ns,26.88us,811.00ns,26.12us,57.88us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,111688,4.63s,26.75us,0.00ns,26.81us,806.00ns,26.17us,57.33us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,108726,4.63s,27.46us,0.00ns,27.54us,816.00ns,26.75us,58.54us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,181655,4.63s,16.42us,0.00ns,16.46us,593.00ns,16.29us,47.12us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,50591,4.56s,59.38us,0.00ns,59.25us,1.81us,56.33us,97.12us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,11172,4.55s,267.67us,0.00ns,268.48us,3.20us,264.92us,317.21us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,177360,4.63s,16.83us,0.00ns,16.86us,621.00ns,16.67us,52.62us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,48871,4.56s,61.29us,0.00ns,61.33us,1.52us,59.00us,92.96us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,49739,4.56s,60.12us,0.00ns,60.26us,3.78us,53.33us,98.67us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,129450,4.62s,23.08us,0.00ns,23.12us,730.00ns,22.92us,54.46us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,37263,4.56s,80.29us,0.00ns,80.46us,1.63us,78.79us,114.88us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,10170,4.56s,294.04us,0.00ns,294.94us,3.26us,293.88us,330.33us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,130510,4.63s,22.88us,0.00ns,22.94us,721.00ns,22.75us,53.46us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,37730,4.56s,79.25us,0.00ns,79.46us,1.61us,77.62us,113.67us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,38208,4.56s,78.38us,0.00ns,78.47us,2.01us,72.58us,110.79us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,746.98ms,41.00ns,0.00ns,22.00ns,39.00ns,1.00ns,29.00us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,750.10ms,1.00ns,0.00ns,20.00ns,21.00ns,1.00ns,4.79us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,752.78ms,1.00ns,0.00ns,20.00ns,22.00ns,1.00ns,6.88us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,750.29ms,42.00ns,0.00ns,37.00ns,27.00ns,1.00ns,16.54us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.23s,250.00ns,0.00ns,244.00ns,68.00ns,125.00ns,23.42us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,753.00ms,1.00ns,0.00ns,19.00ns,29.00ns,1.00ns,20.96us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,746.11ms,42.00ns,0.00ns,33.00ns,23.00ns,1.00ns,9.67us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,751.58ms,42.00ns,0.00ns,33.00ns,29.00ns,1.00ns,16.29us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.24s,250.00ns,0.00ns,244.00ns,71.00ns,125.00ns,24.79us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,752.00ms,42.00ns,0.00ns,33.00ns,27.00ns,1.00ns,16.71us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,753.98ms,1.00ns,0.00ns,20.00ns,23.00ns,1.00ns,6.92us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,813.34ms,83.00ns,0.00ns,69.00ns,37.00ns,1.00ns,16.42us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.29s,292.00ns,0.00ns,286.00ns,72.00ns,166.00ns,24.96us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,752.46ms,1.00ns,0.00ns,21.00ns,22.00ns,1.00ns,8.21us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,876.95ms,83.00ns,0.00ns,72.00ns,37.00ns,1.00ns,16.50us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,810.57ms,83.00ns,0.00ns,70.00ns,30.00ns,1.00ns,9.54us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,750.83ms,41.00ns,0.00ns,24.00ns,29.00ns,1.00ns,11.96us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,928.20ms,84.00ns,0.00ns,96.00ns,42.00ns,1.00ns,18.83us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.48s,375.00ns,0.00ns,362.00ns,88.00ns,250.00ns,35.54us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,814.50ms,41.00ns,0.00ns,25.00ns,34.00ns,1.00ns,23.46us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,929.74ms,84.00ns,0.00ns,97.00ns,44.00ns,1.00ns,17.50us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,935.61ms,84.00ns,0.00ns,99.00ns,37.00ns,1.00ns,17.00us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,741.56ms,1.00ns,0.00ns,17.00ns,21.00ns,1.00ns,6.50us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,747.96ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,1.58us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,745.66ms,1.00ns,0.00ns,16.00ns,23.00ns,1.00ns,7.00us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,690.30ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,7.08us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,750.83ms,41.00ns,0.00ns,28.00ns,29.00ns,1.00ns,16.71us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,690.19ms,1.00ns,0.00ns,16.00ns,23.00ns,1.00ns,7.00us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,744.34ms,1.00ns,0.00ns,18.00ns,31.00ns,1.00ns,21.21us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,745.57ms,1.00ns,0.00ns,18.00ns,28.00ns,1.00ns,17.54us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,743.75ms,41.00ns,0.00ns,28.00ns,25.00ns,1.00ns,9.79us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,686.04ms,1.00ns,0.00ns,18.00ns,33.00ns,1.00ns,21.17us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,69,1000000,691.24ms,1.00ns,0.00ns,17.00ns,21.00ns,1.00ns,6.71us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,690.33ms,1.00ns,0.00ns,18.00ns,24.00ns,1.00ns,9.17us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,69,1000000,746.76ms,42.00ns,0.00ns,37.00ns,22.00ns,1.00ns,9.79us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,69,1000000,743.10ms,1.00ns,0.00ns,18.00ns,28.00ns,1.00ns,9.79us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,69,1000000,747.44ms,1.00ns,0.00ns,19.00ns,32.00ns,1.00ns,23.58us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,69,1000000,744.00ms,1.00ns,0.00ns,18.00ns,33.00ns,1.00ns,16.38us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,69,1000000,747.31ms,1.00ns,0.00ns,17.00ns,22.00ns,1.00ns,7.08us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,743.29ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,6.67us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,69,1000000,818.00ms,42.00ns,0.00ns,45.00ns,27.00ns,1.00ns,15.42us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,69,1000000,691.11ms,1.00ns,0.00ns,18.00ns,23.00ns,1.00ns,7.42us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,69,1000000,747.53ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,9.38us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,69,1000000,746.65ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,9.88us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,29387,4.56s,101.71us,0.00ns,102.04us,1.79us,101.33us,134.42us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,26021,4.56s,114.92us,0.00ns,115.24us,1.90us,114.12us,146.42us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,29802,4.56s,100.17us,0.00ns,100.61us,1.76us,99.50us,131.17us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,32061,4.56s,92.75us,0.00ns,93.52us,2.10us,92.12us,130.50us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,12607,4.56s,236.46us,0.00ns,237.91us,4.06us,231.88us,275.17us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,27869,4.56s,107.29us,0.00ns,107.60us,1.86us,106.62us,139.25us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,27111,4.56s,110.29us,0.00ns,110.61us,1.86us,109.75us,153.75us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,29732,4.56s,100.54us,0.00ns,100.85us,1.74us,100.00us,137.04us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,12602,4.56s,236.42us,0.00ns,238.00us,4.39us,230.88us,275.58us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,26641,4.56s,112.21us,0.00ns,112.56us,1.96us,111.42us,171.08us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,14482,4.56s,206.67us,0.00ns,207.12us,2.81us,205.21us,254.42us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,13496,4.56s,221.58us,0.00ns,222.25us,2.83us,220.75us,256.75us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,9199,4.55s,325.17us,0.00ns,326.08us,3.32us,324.46us,360.42us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,15264,4.56s,195.67us,0.00ns,196.49us,2.70us,194.58us,235.83us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,11808,4.56s,253.29us,0.00ns,254.01us,2.88us,252.75us,285.67us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,12127,4.56s,247.12us,0.00ns,247.34us,3.13us,244.67us,286.92us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,10717,4.56s,279.17us,0.00ns,279.90us,3.14us,278.21us,323.38us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,8454,4.56s,353.75us,0.00ns,354.83us,3.62us,353.25us,391.62us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,7274,4.56s,411.17us,0.00ns,412.43us,3.99us,410.67us,463.75us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,11140,4.56s,268.62us,0.00ns,269.27us,2.99us,267.25us,306.12us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,7656,4.56s,390.71us,0.00ns,391.84us,3.66us,389.67us,433.29us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,7862,4.56s,380.46us,0.00ns,381.57us,3.73us,379.50us,422.54us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,813.78ms,42.00ns,0.00ns,43.00ns,23.00ns,1.00ns,9.92us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,740.12ms,42.00ns,0.00ns,43.00ns,25.00ns,1.00ns,16.46us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,743.54ms,42.00ns,0.00ns,39.00ns,23.00ns,1.00ns,9.62us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,814.73ms,42.00ns,0.00ns,62.00ns,40.00ns,1.00ns,23.71us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.29s,250.00ns,0.00ns,244.00ns,64.00ns,125.00ns,24.50us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,751.48ms,42.00ns,0.00ns,38.00ns,26.00ns,1.00ns,13.75us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,812.07ms,83.00ns,0.00ns,65.00ns,44.00ns,1.00ns,21.21us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,806.38ms,83.00ns,0.00ns,66.00ns,29.00ns,1.00ns,9.88us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.29s,333.00ns,0.00ns,339.00ns,87.00ns,167.00ns,26.29us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,805.63ms,42.00ns,0.00ns,62.00ns,35.00ns,1.00ns,16.17us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,926.48ms,84.00ns,0.00ns,94.00ns,45.00ns,1.00ns,20.00us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,924.12ms,84.00ns,0.00ns,103.00ns,38.00ns,1.00ns,17.08us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.36s,292.00ns,0.00ns,296.00ns,75.00ns,166.00ns,25.12us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,930.21ms,84.00ns,0.00ns,104.00ns,44.00ns,1.00ns,16.50us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,0.99s,125.00ns,0.00ns,119.00ns,45.00ns,1.00ns,20.12us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,0.99s,125.00ns,0.00ns,118.00ns,49.00ns,1.00ns,16.58us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,1.05s,166.00ns,0.00ns,153.00ns,57.00ns,41.00ns,24.75us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,1.04s,167.00ns,0.00ns,161.00ns,52.00ns,41.00ns,18.62us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.41s,334.00ns,0.00ns,345.00ns,77.00ns,250.00ns,19.29us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,1.04s,167.00ns,0.00ns,159.00ns,57.00ns,41.00ns,20.79us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,1.11s,167.00ns,0.00ns,187.00ns,59.00ns,83.00ns,21.79us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.05s,167.00ns,0.00ns,161.00ns,57.00ns,41.00ns,25.21us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,749.27ms,1.00ns,0.00ns,19.00ns,25.00ns,1.00ns,12.38us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,683.18ms,1.00ns,0.00ns,17.00ns,22.00ns,1.00ns,9.88us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,690.72ms,1.00ns,0.00ns,17.00ns,24.00ns,1.00ns,9.58us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,754.63ms,1.00ns,0.00ns,19.00ns,27.00ns,1.00ns,16.75us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,751.91ms,41.00ns,0.00ns,28.00ns,24.00ns,1.00ns,13.29us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,753.84ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,4.79us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,750.83ms,41.00ns,0.00ns,24.00ns,30.00ns,1.00ns,16.75us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,745.87ms,41.00ns,0.00ns,25.00ns,25.00ns,1.00ns,9.50us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,752.08ms,41.00ns,0.00ns,28.00ns,28.00ns,1.00ns,13.29us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,752.45ms,41.00ns,0.00ns,26.00ns,26.00ns,1.00ns,12.08us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,69,1000000,807.58ms,42.00ns,0.00ns,34.00ns,37.00ns,1.00ns,23.46us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,748.14ms,42.00ns,0.00ns,33.00ns,23.00ns,1.00ns,9.83us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,69,1000000,745.35ms,42.00ns,0.00ns,37.00ns,20.00ns,1.00ns,10.08us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,69,1000000,808.10ms,42.00ns,0.00ns,47.00ns,26.00ns,1.00ns,13.88us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,69,1000000,748.35ms,42.00ns,0.00ns,40.00ns,23.00ns,1.00ns,16.17us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,69,1000000,811.26ms,42.00ns,0.00ns,41.00ns,31.00ns,1.00ns,23.21us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,69,1000000,873.58ms,83.00ns,0.00ns,71.00ns,40.00ns,1.00ns,21.46us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,805.02ms,42.00ns,0.00ns,51.00ns,28.00ns,1.00ns,13.92us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,69,1000000,806.08ms,42.00ns,0.00ns,45.00ns,27.00ns,1.00ns,15.75us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,69,1000000,867.84ms,83.00ns,0.00ns,82.00ns,24.00ns,1.00ns,10.04us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,69,1000000,866.11ms,83.00ns,0.00ns,65.00ns,33.00ns,1.00ns,11.25us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,69,1000000,808.13ms,83.00ns,0.00ns,63.00ns,40.00ns,1.00ns,20.79us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,2837,4.56s,1.06ms,0.00ns,1.06ms,5.51us,1.04ms,1.09ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,4620,4.56s,647.50us,0.00ns,649.43us,4.74us,647.33us,698.33us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,5159,4.56s,579.79us,0.00ns,581.52us,4.60us,579.50us,628.83us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,3654,4.55s,818.46us,0.00ns,821.16us,5.70us,817.62us,861.25us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,4282,4.56s,698.38us,0.00ns,700.61us,4.96us,697.92us,749.38us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,5394,4.56s,554.50us,0.00ns,556.15us,4.62us,554.17us,653.00us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,3281,4.56s,911.67us,0.00ns,914.49us,6.04us,910.62us,0.96ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,3269,4.56s,914.96us,0.00ns,917.71us,5.76us,914.08us,0.96ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,4221,4.56s,708.79us,0.00ns,710.67us,5.12us,706.54us,758.54us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,3110,4.56s,0.96ms,0.00ns,0.96ms,5.91us,0.96ms,1.01ms\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,2.32s,750.00ns,0.00ns,771.00ns,119.00ns,666.00ns,25.75us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,2.07s,667.00ns,0.00ns,665.00ns,120.00ns,541.00ns,25.62us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.95s,584.00ns,0.00ns,597.00ns,106.00ns,458.00ns,30.08us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,1.41s,333.00ns,0.00ns,317.00ns,71.00ns,208.00ns,18.96us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.35s,291.00ns,0.00ns,278.00ns,71.00ns,166.00ns,24.71us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,1.89s,542.00ns,0.00ns,560.00ns,111.00ns,416.00ns,33.21us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.59s,417.00ns,0.00ns,419.00ns,96.00ns,292.00ns,25.21us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.59s,417.00ns,0.00ns,421.00ns,93.00ns,292.00ns,24.96us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.34s,292.00ns,0.00ns,284.00ns,72.00ns,166.00ns,26.12us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,1.59s,417.00ns,0.00ns,414.00ns,94.00ns,291.00ns,25.38us\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,33335253,59,4.56s,50.79ms,0.00ns,50.88ms,264.80us,50.66ms,52.05ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,33335253,32,4.62s,94.86ms,458.00ns,94.85ms,18.90us,94.81ms,94.89ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,33335253,32,4.62s,94.87ms,0.98us,94.88ms,115.57us,94.78ms,95.48ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,33335253,302,4.56s,9.94ms,146.00ns,9.95ms,40.76us,9.88ms,10.10ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,33335253,301,4.54s,9.93ms,0.00ns,9.97ms,126.89us,9.89ms,11.17ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/binary,2.5.0,,33335253,2862,4.56s,1.04ms,0.00ns,1.05ms,22.80us,1.03ms,1.32ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,33335253,256,4.55s,11.58ms,2.92us,11.75ms,699.36us,11.28ms,20.99ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,33335253,61,4.66s,47.87ms,0.00ns,49.41ms,7.04ms,47.79ms,96.11ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,33335253,151,4.55s,19.91ms,0.00ns,19.89ms,93.27us,19.63ms,20.06ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,33335253,212,4.56s,14.21ms,229.00ns,14.22ms,49.15us,14.13ms,14.40ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,33335253,211,4.56s,14.22ms,0.00ns,14.22ms,48.32us,14.14ms,14.37ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,33335253,150,4.56s,20.02ms,313.00ns,20.03ms,19.52us,19.98ms,20.10ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,33335253,150,4.56s,20.03ms,84.00ns,20.04ms,19.94us,20.00ms,20.09ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2523,4.56s,1.19ms,0.00ns,1.19ms,6.02us,1.19ms,1.23ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.93ms,10.02us,3.91ms,3.99ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.93ms,10.15us,3.91ms,3.97ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,59123,4.56s,50.54us,0.00ns,50.70us,1.19us,50.38us,83.46us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,46367,4.59s,50.50us,0.00ns,64.65us,2.57ms,50.29us,553.99ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2944,4.56s,1.02ms,20.00ns,1.02ms,14.34us,1.00ms,1.18ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1269,4.56s,2.36ms,0.00ns,2.37ms,7.89us,2.35ms,2.41ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,3037,4.56s,0.99ms,0.00ns,0.99ms,5.86us,0.98ms,1.04ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,13797,4.55s,216.67us,0.00ns,217.40us,2.73us,215.33us,257.62us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,13715,4.56s,218.54us,0.00ns,218.68us,2.92us,213.58us,260.83us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,31372,4.56s,95.33us,0.00ns,95.58us,1.53us,95.12us,134.75us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,31384,4.56s,95.25us,0.00ns,95.54us,1.71us,95.08us,153.12us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3088,4.56s,0.97ms,0.00ns,0.97ms,5.99us,0.96ms,1.01ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3085,4.56s,0.97ms,0.00ns,0.97ms,6.05us,0.96ms,1.03ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2514,4.56s,1.19ms,0.00ns,1.19ms,147.63us,1.19ms,7.73ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,753,4.55s,3.92ms,0.00ns,3.99ms,645.61us,3.91ms,16.86ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.93ms,9.45us,3.91ms,3.98ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,57859,4.56s,51.67us,0.00ns,51.80us,1.20us,51.50us,115.00us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,57884,4.56s,51.62us,0.00ns,51.78us,1.24us,51.46us,84.83us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3170,4.56s,942.79us,0.00ns,946.55us,13.33us,928.58us,1.00ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1269,4.56s,2.36ms,0.00ns,2.37ms,8.61us,2.35ms,2.41ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,3037,4.56s,0.99ms,0.00ns,0.99ms,6.04us,0.98ms,1.03ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,13494,4.56s,221.67us,0.00ns,222.27us,2.67us,220.92us,261.17us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,13680,4.55s,218.58us,0.00ns,219.24us,2.78us,217.96us,252.50us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,30365,4.56s,98.46us,0.00ns,98.74us,1.70us,98.25us,132.38us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,23654,4.54s,98.38us,0.00ns,126.77us,3.60ms,95.54us,553.65ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3317,4.55s,903.00us,0.00ns,904.64us,5.65us,897.75us,945.67us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3315,4.55s,903.46us,0.00ns,905.15us,5.66us,898.25us,0.95ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2526,4.56s,1.18ms,0.00ns,1.19ms,6.26us,1.18ms,1.24ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,9.54us,3.91ms,3.97ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.93ms,10.25us,3.91ms,3.98ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,58882,4.56s,50.75us,0.00ns,50.90us,1.16us,50.58us,85.29us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,58901,4.56s,50.75us,0.00ns,50.88us,1.17us,50.58us,87.75us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3218,4.55s,920.92us,0.00ns,932.49us,23.22us,910.33us,1.05ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1268,4.56s,2.36ms,0.00ns,2.37ms,8.30us,2.35ms,2.40ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,3029,4.55s,0.99ms,0.00ns,0.99ms,134.03us,0.98ms,8.35ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,22998,4.57s,128.25us,0.00ns,130.40us,81.51us,124.96us,8.78ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,23309,4.56s,128.21us,0.00ns,128.66us,2.09us,127.33us,172.38us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,29474,4.56s,101.46us,0.00ns,101.73us,1.72us,101.21us,134.04us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,29481,4.56s,101.42us,0.00ns,101.71us,1.78us,101.21us,135.46us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3402,4.56s,882.25us,0.00ns,881.95us,8.48us,870.38us,919.04us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3399,4.56s,882.42us,0.00ns,882.74us,8.78us,868.96us,925.04us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2747,4.56s,1.09ms,0.00ns,1.09ms,5.71us,1.09ms,1.13ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,1241,4.55s,2.41ms,0.00ns,2.42ms,26.42us,2.40ms,2.71ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,1209,4.55s,2.48ms,0.00ns,2.48ms,7.83us,2.47ms,2.52ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,57195,4.56s,52.21us,0.00ns,52.41us,1.24us,52.04us,82.96us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,44100,4.56s,53.38us,0.00ns,67.97us,2.64ms,51.79us,554.40ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3262,4.56s,916.85us,21.00ns,919.76us,10.07us,904.46us,0.97ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1269,4.56s,2.36ms,0.00ns,2.37ms,8.43us,2.36ms,2.42ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,12598,4.56s,237.33us,0.00ns,238.09us,2.99us,236.50us,285.25us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,12648,4.56s,236.58us,0.00ns,237.16us,3.67us,234.92us,347.88us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,107843,4.62s,27.71us,0.00ns,27.77us,808.00ns,27.54us,58.62us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,107920,4.63s,27.67us,0.00ns,27.75us,815.00ns,27.54us,58.00us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3391,4.55s,881.92us,0.00ns,884.68us,10.14us,875.38us,1.07ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3387,4.56s,883.67us,0.00ns,885.72us,6.53us,876.62us,936.29us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2522,4.56s,1.19ms,0.00ns,1.19ms,6.58us,1.19ms,1.25ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,762,4.56s,3.92ms,42.00ns,3.94ms,360.60us,3.91ms,13.87ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,753,4.51s,3.92ms,0.00ns,3.99ms,709.44us,3.91ms,17.12ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,56822,4.56s,52.58us,0.00ns,52.74us,1.23us,52.42us,84.25us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,57504,4.56s,51.96us,0.00ns,52.12us,1.16us,51.83us,95.29us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3018,4.56s,0.99ms,0.00ns,0.99ms,11.01us,0.98ms,1.06ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1269,4.56s,2.36ms,0.00ns,2.37ms,8.24us,2.36ms,2.41ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,2995,4.56s,1.00ms,0.00ns,1.00ms,5.70us,0.99ms,1.05ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,14480,4.56s,205.29us,0.00ns,207.13us,3.73us,204.54us,253.29us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,14602,4.56s,206.92us,0.00ns,205.41us,4.23us,200.79us,312.29us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3155,4.56s,949.17us,0.00ns,0.95ms,5.97us,943.46us,1.01ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3164,4.56s,946.71us,0.00ns,948.34us,5.77us,940.83us,1.01ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,1971,4.54s,1.19ms,0.00ns,1.52ms,12.46ms,1.19ms,554.03ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,9.67us,3.91ms,3.97ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,9.99us,3.91ms,3.97ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,28615,4.56s,104.46us,0.00ns,104.79us,1.88us,103.83us,141.33us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,35157,4.56s,85.04us,0.00ns,85.28us,1.61us,84.58us,121.58us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3362,4.55s,882.11us,63.00ns,892.42us,28.72us,861.67us,1.00ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1234,4.56s,2.43ms,0.00ns,2.43ms,8.57us,2.42ms,2.48ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,2898,4.56s,1.03ms,0.00ns,1.04ms,5.99us,1.02ms,1.07ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,5902,4.56s,506.79us,0.00ns,508.28us,4.42us,505.58us,553.79us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,6247,4.56s,478.12us,0.00ns,480.19us,8.51us,477.17us,585.00us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3552,4.56s,840.46us,0.00ns,844.67us,126.18us,832.29us,8.35ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3576,4.52s,824.29us,1.00ns,839.00us,300.18us,814.17us,13.45ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,6831,4.56s,437.88us,0.00ns,439.13us,4.09us,434.92us,470.50us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,747,4.56s,4.01ms,0.00ns,4.02ms,9.77us,4.01ms,4.06ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,751,4.56s,4.00ms,0.00ns,4.00ms,10.02us,3.99ms,4.06ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,5772,4.56s,518.67us,0.00ns,519.77us,4.69us,513.08us,564.42us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,6127,4.56s,489.21us,0.00ns,489.66us,4.58us,485.12us,538.38us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2296,4.56s,1.30ms,20.00ns,1.31ms,8.96us,1.30ms,1.44ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1171,4.56s,2.56ms,0.00ns,2.56ms,8.91us,2.55ms,2.62ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,2440,4.55s,1.23ms,0.00ns,1.23ms,9.62us,1.21ms,1.28ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,4308,4.56s,694.67us,0.00ns,696.43us,5.20us,692.00us,760.54us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,4062,4.51s,575.25us,0.00ns,738.49us,8.74ms,558.50us,557.40ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,2088,4.55s,1.44ms,21.00ns,1.44ms,9.24us,1.42ms,1.68ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,2339,4.56s,1.28ms,0.00ns,1.28ms,6.52us,1.27ms,1.32ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2126,4.56s,1.41ms,21.00ns,1.41ms,6.85us,1.41ms,1.48ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,736,4.56s,4.07ms,21.00ns,4.08ms,9.57us,4.07ms,4.13ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,737,4.56s,4.07ms,0.00ns,4.07ms,9.52us,4.06ms,4.14ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,17833,4.56s,167.58us,0.00ns,168.18us,2.47us,166.83us,204.38us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,24516,4.56s,122.08us,0.00ns,122.32us,2.02us,121.29us,155.67us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2874,4.56s,1.05ms,0.00ns,1.04ms,16.55us,1.02ms,1.12ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1220,4.56s,2.46ms,0.00ns,2.46ms,11.37us,2.45ms,2.73ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,2850,4.56s,1.05ms,0.00ns,1.05ms,80.70us,1.03ms,5.06ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,3433,4.55s,861.46us,0.00ns,873.86us,255.67us,851.71us,11.19ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,3837,4.55s,780.83us,0.00ns,781.87us,5.55us,774.50us,835.17us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,2820,4.56s,1.06ms,0.00ns,1.06ms,6.40us,1.05ms,1.12ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,2956,4.56s,1.01ms,0.00ns,1.01ms,6.88us,1.00ms,1.12ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,151305,20592,4.56s,145.21us,0.00ns,145.64us,2.17us,144.92us,182.08us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,151305,13348,4.56s,224.08us,0.00ns,224.71us,2.70us,223.71us,262.38us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,151305,13362,4.56s,224.04us,0.00ns,224.47us,2.89us,217.67us,270.21us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,151305,500895,4.88s,5.92us,0.00ns,5.94us,349.00ns,5.71us,36.54us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,151305,503843,4.87s,5.88us,0.00ns,5.90us,357.00ns,5.67us,35.79us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,151305,209973,4.69s,14.42us,0.00ns,14.24us,734.00ns,13.29us,44.21us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,151305,10764,4.54s,216.54us,0.00ns,278.66us,5.35ms,215.75us,554.58ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,151305,21948,4.56s,136.62us,0.00ns,136.64us,2.26us,134.96us,176.58us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,151305,22185,4.56s,137.50us,0.00ns,135.18us,4.55us,128.54us,175.92us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,151305,286026,4.75s,10.42us,0.00ns,10.44us,485.00ns,10.12us,64.25us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,288368,4.75s,10.33us,0.00ns,10.35us,467.00ns,10.04us,42.96us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,151305,252704,4.69s,11.54us,0.00ns,11.82us,803.00ns,11.17us,41.83us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,151305,246855,4.68s,11.38us,0.00ns,12.11us,1.11us,11.17us,48.92us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,151305,20608,4.56s,145.12us,0.00ns,145.53us,2.07us,144.88us,177.67us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,151305,13349,4.56s,224.04us,0.00ns,224.69us,2.63us,223.79us,260.04us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,151305,13349,4.56s,224.04us,0.00ns,224.69us,2.56us,223.75us,258.08us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,151305,405378,4.78s,5.88us,0.00ns,7.35us,872.66us,5.54us,555.59ms\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,151305,539225,4.89s,5.50us,0.00ns,5.51us,329.00ns,5.29us,37.04us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,151305,279289,4.75s,10.67us,0.00ns,10.69us,474.00ns,10.46us,70.38us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,151305,13817,4.56s,216.54us,0.00ns,217.08us,2.71us,215.79us,258.50us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,151305,22112,4.55s,135.17us,0.00ns,135.63us,3.29us,133.50us,185.54us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,151305,22480,4.56s,133.04us,0.00ns,133.40us,2.09us,132.42us,167.83us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,151305,285991,4.75s,10.42us,0.00ns,10.44us,461.00ns,10.04us,40.83us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,278077,4.75s,10.67us,0.00ns,10.74us,489.00ns,10.33us,42.46us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,151305,291281,4.75s,9.83us,0.00ns,10.25us,844.00ns,9.58us,63.83us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,151305,270043,4.68s,11.92us,0.00ns,11.06us,1.26us,9.46us,45.54us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,500100,10438,4.55s,285.46us,0.00ns,287.36us,99.91us,285.33us,10.49ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,500100,2596,4.53s,1.14ms,0.00ns,1.16ms,203.24us,1.14ms,10.50ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,500100,2620,4.55s,1.14ms,0.00ns,1.15ms,5.84us,1.14ms,1.20ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,500100,193561,4.69s,15.42us,0.00ns,15.45us,570.00ns,15.29us,45.58us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,500100,193896,4.68s,15.38us,0.00ns,15.42us,560.00ns,15.25us,56.50us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,500100,9981,4.56s,296.38us,0.00ns,300.53us,8.97us,293.42us,397.17us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,500100,4178,4.56s,716.04us,0.00ns,718.04us,4.97us,713.46us,778.46us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,500100,10003,4.56s,299.08us,0.00ns,299.85us,3.57us,296.67us,377.50us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,500100,8376,4.56s,357.04us,0.00ns,358.14us,3.60us,356.92us,411.83us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,500100,8148,4.56s,367.08us,0.00ns,368.17us,3.49us,366.96us,405.67us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,500100,106234,4.63s,28.12us,0.00ns,28.19us,802.00ns,27.92us,66.21us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,500100,82830,4.60s,28.08us,0.00ns,36.16us,1.91ms,27.12us,548.18ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,500100,10478,4.56s,285.50us,0.00ns,286.29us,3.05us,285.33us,343.75us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,500100,10474,4.56s,285.50us,0.00ns,286.39us,3.45us,285.33us,419.88us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,500100,8727,4.56s,342.67us,0.00ns,343.71us,3.56us,342.46us,387.38us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,500100,8290,4.56s,360.25us,0.00ns,361.88us,4.46us,356.88us,402.83us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,500100,9083,4.56s,328.83us,0.00ns,330.26us,3.77us,328.17us,371.25us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,500100,2326,4.56s,1.29ms,0.00ns,1.29ms,6.40us,1.29ms,1.33ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,500100,10598,4.56s,281.42us,0.00ns,283.04us,14.22us,250.79us,356.50us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,500100,10221,4.56s,292.58us,0.00ns,293.47us,3.20us,292.33us,329.54us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,500100,11597,4.56s,256.92us,0.00ns,258.66us,4.79us,256.79us,309.79us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,500100,14748,5.00s,191.12us,0.00ns,233.31us,4.70ms,190.79us,570.50ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,500100,973,4.54s,3.08ms,0.00ns,3.09ms,8.58us,3.08ms,3.13ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,500100,6570,4.56s,451.12us,0.00ns,456.58us,7.29us,450.12us,508.04us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,500100,1174,4.56s,2.55ms,0.00ns,2.56ms,9.00us,2.55ms,2.62ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,500100,9433,4.56s,316.92us,0.00ns,317.98us,3.42us,316.50us,367.21us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1001,1000000,1.83s,583.00ns,0.00ns,580.00ns,101.00ns,458.00ns,25.46us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,4.47s,2.29us,0.00ns,2.29us,211.00ns,2.17us,33.38us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,4.41s,2.29us,0.00ns,2.29us,207.00ns,2.17us,32.58us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1001,1000000,754.18ms,42.00ns,0.00ns,57.00ns,31.00ns,1.00ns,16.54us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,752.05ms,42.00ns,0.00ns,39.00ns,32.00ns,1.00ns,26.33us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.95s,625.00ns,0.00ns,623.00ns,114.00ns,500.00ns,25.71us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,3.51s,1.38us,0.00ns,1.40us,166.00ns,1.29us,32.75us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.95s,583.00ns,0.00ns,589.00ns,119.00ns,500.00ns,26.12us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1001,1000000,2.37s,833.00ns,0.00ns,837.00ns,128.00ns,750.00ns,25.62us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,2.31s,792.00ns,0.00ns,811.00ns,104.00ns,708.00ns,27.62us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1001,1000000,815.37ms,83.00ns,0.00ns,66.00ns,38.00ns,1.00ns,16.46us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1001,1000000,811.18ms,83.00ns,0.00ns,66.00ns,35.00ns,1.00ns,13.67us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1001,1000000,1.95s,625.00ns,0.00ns,617.00ns,136.00ns,500.00ns,52.71us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1001,1000000,2.51s,584.00ns,0.00ns,1.23us,555.34us,500.00ns,554.97ms\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1001,1000000,2.12s,708.00ns,0.00ns,696.00ns,116.00ns,583.00ns,25.58us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,2.19s,709.00ns,0.00ns,722.00ns,121.00ns,625.00ns,26.33us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,2.06s,667.00ns,0.00ns,664.00ns,146.00ns,541.00ns,30.04us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1001,1000000,4.72s,2.50us,0.00ns,2.49us,218.00ns,2.38us,50.54us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,1.77s,500.00ns,0.00ns,526.00ns,120.00ns,416.00ns,25.42us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.89s,584.00ns,0.00ns,601.00ns,115.00ns,500.00ns,31.37us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.77s,541.00ns,0.00ns,524.00ns,105.00ns,416.00ns,25.17us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.53s,416.00ns,0.00ns,402.00ns,84.00ns,291.00ns,25.25us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1001,507283,4.88s,5.83us,0.00ns,5.86us,325.00ns,5.71us,36.33us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,3.16s,1.21us,0.00ns,1.19us,153.00ns,1.08us,26.17us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1001,578151,4.95s,5.12us,0.00ns,5.14us,339.00ns,5.00us,43.12us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1001,1000000,2.07s,667.00ns,0.00ns,677.00ns,111.00ns,583.00ns,25.83us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,550004,3241,4.55s,923.29us,0.00ns,925.76us,5.19us,921.79us,0.96ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,550004,2055,4.56s,1.46ms,0.00ns,1.46ms,6.55us,1.46ms,1.52ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,550004,1652,4.51s,1.46ms,20.00ns,1.82ms,13.62ms,1.46ms,555.08ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,550004,17586,4.55s,170.00us,0.00ns,170.54us,2.49us,169.50us,213.42us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,550004,17588,4.56s,169.96us,0.00ns,170.52us,2.57us,169.62us,211.79us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,550004,23673,4.56s,119.25us,0.00ns,126.68us,12.43us,117.17us,183.75us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,550004,3798,4.55s,784.88us,0.00ns,789.86us,12.93us,784.71us,930.96us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,550004,9102,4.56s,328.75us,0.00ns,329.57us,3.46us,323.33us,364.92us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,550004,17722,4.56s,168.71us,0.00ns,169.23us,2.40us,168.58us,213.75us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,550004,17725,4.55s,168.71us,0.00ns,169.21us,2.35us,168.58us,218.75us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,550004,6355,4.56s,470.79us,0.00ns,472.06us,3.74us,470.58us,516.00us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,550004,6351,4.56s,471.00us,0.00ns,472.38us,3.91us,470.71us,511.58us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,550004,32570,4.56s,90.96us,0.00ns,92.06us,3.69us,87.08us,132.25us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,550004,25214,4.53s,91.38us,0.00ns,118.93us,3.51ms,86.88us,556.66ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,720057,4474,4.55s,668.50us,0.00ns,670.54us,5.12us,668.38us,726.21us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,720057,2810,4.56s,1.06ms,0.00ns,1.07ms,5.70us,1.06ms,1.13ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,720057,2810,4.56s,1.06ms,0.00ns,1.07ms,6.00us,1.06ms,1.12ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,720057,66490,4.56s,44.71us,0.00ns,45.07us,1.17us,44.50us,77.00us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,720057,67314,4.56s,44.25us,0.00ns,44.52us,1.18us,43.92us,76.54us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,720057,82617,4.56s,35.79us,0.00ns,36.26us,1.25us,35.50us,63.67us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,720057,2902,4.56s,1.03ms,0.00ns,1.03ms,5.80us,1.03ms,1.08ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,720057,65955,4.56s,45.29us,0.00ns,45.43us,1.07us,45.17us,96.04us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,720057,66444,4.56s,45.00us,0.00ns,45.10us,1.04us,44.83us,75.83us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,720057,7848,4.55s,305.54us,0.00ns,382.24us,6.25ms,297.46us,554.12ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,9785,4.56s,305.58us,0.00ns,306.54us,3.32us,305.42us,352.79us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,720057,116160,4.62s,25.58us,0.00ns,25.77us,832.00ns,25.38us,79.12us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,720057,117991,4.62s,25.25us,0.00ns,25.38us,788.00ns,25.08us,56.00us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,720057,760,4.56s,3.95ms,21.00ns,3.95ms,10.37us,3.94ms,4.00ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,720057,760,4.56s,3.95ms,21.00ns,3.95ms,10.89us,3.94ms,4.03ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,720057,760,4.56s,3.95ms,0.00ns,3.95ms,10.14us,3.94ms,4.00ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,720057,3634,4.56s,823.17us,0.00ns,825.50us,5.21us,822.96us,871.75us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,720057,3638,4.56s,822.29us,0.00ns,824.77us,5.34us,822.08us,881.83us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,720057,4838,4.56s,616.50us,0.00ns,620.12us,10.50us,616.33us,768.58us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,720057,2894,4.56s,1.03ms,0.00ns,1.04ms,157.99us,1.03ms,9.52ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,720057,4003,5.02s,720.38us,0.00ns,749.50us,388.32us,720.17us,19.74ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,720057,4043,4.55s,739.88us,0.00ns,742.03us,4.98us,739.71us,815.08us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,720057,760,4.56s,3.95ms,21.00ns,3.95ms,10.21us,3.94ms,4.00ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,758,4.55s,3.95ms,0.00ns,3.96ms,38.42us,3.93ms,4.27ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,720057,5768,4.56s,519.83us,0.00ns,520.09us,15.21us,476.62us,743.71us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,720057,5621,4.56s,526.00us,0.00ns,533.67us,14.46us,501.88us,587.88us\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,,425,4.56s,7.06ms,0.00ns,7.07ms,12.14us,7.05ms,7.15ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,,162,4.56s,18.52ms,21.00ns,18.52ms,25.52us,18.40ms,18.58ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,,83,4.62s,36.55ms,0.00ns,36.55ms,16.93us,36.51ms,36.59ms\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1000,18721,4.56s,159.79us,0.00ns,160.20us,2.13us,159.46us,191.62us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1000,4560,4.56s,656.67us,0.00ns,657.88us,4.78us,646.75us,690.46us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1000,11229,4.56s,266.33us,0.00ns,267.11us,3.02us,264.92us,302.67us\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,806771,118,4.56s,25.48ms,20.00ns,25.48ms,20.13us,25.43ms,25.53ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,806771,24,4.68s,128.80ms,83.00ns,128.83ms,97.54us,128.72ms,129.16ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,806771,59,4.56s,50.99ms,0.00ns,50.99ms,21.41us,50.93ms,51.03ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,4297,4.56s,693.92us,0.00ns,698.13us,192.44us,689.62us,13.31ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1806,4.56s,1.64ms,0.00ns,1.66ms,187.93us,1.64ms,7.09ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1824,4.56s,1.64ms,0.00ns,1.65ms,7.34us,1.64ms,1.76ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,56811,4.56s,52.50us,0.00ns,52.75us,1.24us,51.75us,92.58us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,83188,4.56s,35.88us,0.00ns,36.01us,1.04us,35.04us,74.29us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,13932,4.56s,214.17us,0.00ns,215.29us,9.05us,200.12us,264.79us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3377,4.56s,885.79us,0.00ns,888.41us,5.60us,885.21us,945.04us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,7833,4.56s,382.17us,0.00ns,382.96us,3.53us,376.67us,429.12us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,6791,4.55s,441.38us,0.00ns,441.77us,4.04us,432.38us,493.33us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,7252,4.56s,412.46us,0.00ns,413.67us,3.82us,411.79us,453.00us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,14126,4.56s,209.88us,0.00ns,212.33us,8.20us,198.54us,275.83us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,11677,4.53s,200.00us,0.00ns,256.87us,5.10ms,186.83us,550.69ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,5943,4.55s,503.17us,0.00ns,504.79us,4.31us,502.50us,552.54us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2001,4.56s,1.50ms,0.00ns,1.50ms,6.99us,1.49ms,1.55ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2007,4.56s,1.49ms,0.00ns,1.49ms,6.76us,1.49ms,1.54ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,22101,4.56s,135.38us,0.00ns,135.69us,2.27us,133.25us,167.83us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,40053,4.56s,74.75us,0.00ns,74.85us,1.52us,72.38us,109.04us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,11942,4.56s,249.62us,0.00ns,251.17us,10.17us,232.83us,302.67us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3308,4.56s,905.25us,0.00ns,907.04us,5.62us,902.96us,0.95ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,7195,4.56s,415.83us,0.00ns,416.95us,3.86us,410.58us,449.12us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,8626,4.56s,347.42us,0.00ns,347.73us,3.58us,344.42us,386.04us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,11023,4.55s,270.54us,0.00ns,272.13us,73.99us,268.54us,7.22ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,9858,4.53s,302.21us,0.00ns,304.27us,89.03us,286.33us,5.86ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,12110,4.56s,245.42us,0.00ns,247.69us,8.59us,233.92us,308.71us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,2812,4.56s,1.06ms,0.00ns,1.07ms,6.18us,1.06ms,1.11ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1367,4.56s,2.19ms,0.00ns,2.20ms,8.65us,2.19ms,2.27ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1404,4.56s,2.14ms,0.00ns,2.14ms,8.11us,2.13ms,2.19ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,4496,4.56s,665.71us,0.00ns,667.31us,4.68us,662.79us,715.58us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,3671,4.56s,815.08us,0.00ns,817.38us,5.61us,814.38us,911.38us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,3205,4.56s,934.71us,0.00ns,936.00us,6.28us,920.12us,0.99ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,2008,4.56s,1.49ms,0.00ns,1.49ms,8.98us,1.47ms,1.55ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,3303,4.56s,906.38us,0.00ns,908.23us,5.82us,902.17us,0.96ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,1514,4.54s,1.54ms,20.00ns,1.98ms,14.26ms,1.53ms,555.92ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,2576,4.56s,1.16ms,0.00ns,1.16ms,7.66us,1.14ms,1.24ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,1854,4.56s,1.62ms,0.00ns,1.62ms,8.37us,1.58ms,1.67ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,2802,4.56s,1.07ms,0.00ns,1.07ms,5.83us,1.06ms,1.11ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,3013,4.56s,0.99ms,0.00ns,1.00ms,17.91us,0.99ms,1.30ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1628,4.56s,1.84ms,0.00ns,1.84ms,7.73us,1.83ms,1.91ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1629,4.56s,1.84ms,0.00ns,1.84ms,7.15us,1.83ms,1.89ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,56614,4.56s,53.04us,0.00ns,52.94us,1.47us,51.17us,92.12us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,92959,4.62s,32.12us,0.00ns,32.22us,838.00ns,31.92us,62.83us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,6403,4.56s,467.33us,0.00ns,468.52us,5.37us,463.96us,566.67us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3372,5.10s,883.75us,0.00ns,889.82us,145.79us,882.29us,8.73ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,7803,4.57s,383.62us,0.00ns,384.44us,3.42us,375.67us,421.67us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,6555,4.56s,456.38us,0.00ns,457.68us,3.95us,455.33us,501.92us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,7126,4.56s,419.71us,0.00ns,420.98us,3.91us,419.38us,454.67us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,6269,4.56s,477.25us,0.00ns,478.54us,4.16us,475.50us,527.50us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,6604,4.56s,452.88us,0.00ns,454.26us,4.12us,451.33us,495.88us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,1710,4.56s,1.75ms,0.00ns,1.75ms,7.48us,1.75ms,1.81ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1261,4.56s,2.38ms,0.00ns,2.38ms,11.68us,2.37ms,2.65ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1264,4.56s,2.37ms,0.00ns,2.37ms,8.22us,2.36ms,2.42ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,31187,4.56s,95.92us,0.00ns,96.14us,1.68us,94.96us,129.83us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,49926,4.56s,59.83us,0.00ns,60.03us,1.31us,58.71us,101.83us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,4620,4.51s,505.67us,1.00ns,649.32us,8.19ms,492.92us,556.95ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3312,4.56s,903.38us,0.00ns,905.78us,5.60us,902.12us,949.08us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,7457,4.56s,401.29us,0.00ns,402.26us,3.73us,398.08us,444.50us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,6572,4.56s,448.33us,0.00ns,456.46us,12.34us,444.17us,550.58us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,7721,4.56s,387.75us,0.00ns,388.53us,3.84us,385.92us,440.00us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,5629,4.56s,531.67us,0.00ns,532.94us,4.27us,529.88us,580.58us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,6123,4.56s,489.33us,0.00ns,489.97us,4.49us,485.25us,547.04us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,5312,4.56s,563.38us,0.00ns,564.72us,4.58us,559.67us,624.17us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1682,4.56s,1.78ms,0.00ns,1.78ms,6.58us,1.78ms,1.82ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1708,4.56s,1.76ms,0.00ns,1.76ms,7.43us,1.75ms,1.81ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,4673,4.54s,512.54us,0.00ns,642.12us,8.45ms,498.96us,577.78ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,5018,4.54s,596.50us,0.00ns,597.81us,4.60us,593.88us,656.25us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,4666,4.56s,640.58us,0.00ns,642.96us,5.31us,639.54us,687.42us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,2487,4.56s,1.20ms,0.00ns,1.21ms,7.01us,1.20ms,1.26ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,4422,4.55s,676.50us,0.00ns,678.43us,5.51us,673.21us,731.83us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,3204,4.56s,934.92us,0.00ns,936.43us,7.19us,920.96us,0.98ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,4003,4.56s,747.92us,0.00ns,749.53us,5.29us,737.54us,787.79us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,3169,4.55s,947.58us,0.00ns,946.82us,9.71us,915.50us,1.00ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,4401,4.56s,680.21us,0.00ns,681.66us,4.73us,675.33us,731.58us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,6852,4.55s,436.46us,0.00ns,437.81us,3.90us,436.25us,471.00us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,2061,4.56s,1.45ms,0.00ns,1.46ms,6.57us,1.45ms,1.50ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1600,4.52s,1.45ms,0.00ns,1.88ms,13.95ms,1.45ms,559.24ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,78568,4.56s,38.04us,0.00ns,38.13us,0.97us,37.75us,71.38us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,99011,4.62s,30.17us,0.00ns,30.25us,841.00ns,29.79us,58.29us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,19905,4.55s,146.33us,0.00ns,150.67us,8.63us,141.67us,204.62us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3323,4.56s,900.38us,0.00ns,902.84us,5.61us,899.50us,0.96ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,7799,4.56s,383.83us,0.00ns,384.62us,3.54us,379.96us,421.67us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,36121,4.56s,82.83us,0.00ns,83.00us,1.61us,81.88us,116.54us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,43603,4.56s,68.50us,0.00ns,68.75us,1.41us,67.92us,97.33us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,21351,4.56s,139.92us,0.00ns,140.46us,2.35us,137.29us,169.83us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,22976,4.56s,130.12us,0.00ns,130.52us,2.29us,127.00us,178.21us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,3476,4.56s,682.50us,0.00ns,863.04us,9.36ms,681.17us,552.33ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1838,4.55s,1.63ms,0.00ns,1.63ms,6.87us,1.63ms,1.68ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1840,4.56s,1.63ms,0.00ns,1.63ms,6.88us,1.62ms,1.68ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,40109,4.56s,74.50us,0.00ns,74.75us,1.53us,73.92us,126.75us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,57477,4.56s,52.00us,0.00ns,52.14us,1.19us,51.67us,85.33us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,13920,4.56s,213.96us,0.00ns,215.47us,7.97us,203.33us,273.54us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3321,4.56s,901.04us,0.00ns,903.36us,5.67us,899.88us,0.95ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,7535,4.56s,397.12us,0.00ns,398.08us,3.74us,393.46us,435.38us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,18155,4.56s,164.71us,0.00ns,165.19us,2.33us,163.38us,199.50us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,23165,4.56s,129.12us,0.00ns,129.45us,2.08us,128.17us,167.54us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,12860,4.56s,233.29us,0.00ns,233.25us,41.85us,224.46us,4.13ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,14528,5.01s,200.46us,0.00ns,206.45us,149.72us,192.17us,10.74ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,12779,4.56s,234.00us,0.00ns,234.72us,2.87us,232.75us,283.88us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1943,4.56s,1.54ms,0.00ns,1.54ms,6.45us,1.54ms,1.59ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1956,4.56s,1.53ms,0.00ns,1.53ms,6.74us,1.53ms,1.58ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,14137,4.56s,211.58us,0.00ns,212.15us,2.54us,209.54us,246.46us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,13358,4.56s,223.92us,0.00ns,224.55us,2.69us,223.17us,264.00us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,5765,4.56s,519.00us,0.00ns,520.39us,4.50us,516.21us,566.17us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3019,4.56s,0.99ms,0.00ns,0.99ms,6.79us,0.99ms,1.16ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,6127,4.56s,488.25us,0.00ns,489.63us,4.35us,482.75us,544.33us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,8902,4.56s,335.83us,0.00ns,336.97us,3.47us,335.12us,376.08us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,8795,4.56s,267.04us,0.00ns,341.06us,5.91ms,264.25us,554.40ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,4898,4.56s,611.96us,1.00ns,612.48us,5.43us,601.12us,653.38us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,5735,4.56s,522.21us,0.00ns,523.11us,4.70us,513.46us,571.08us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8427,4.55s,354.88us,0.00ns,355.99us,3.61us,354.75us,391.92us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2130,4.55s,1.40ms,21.00ns,1.41ms,14.86us,1.40ms,1.57ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2133,4.56s,1.40ms,0.00ns,1.41ms,6.28us,1.40ms,1.44ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,161026,4.63s,18.54us,0.00ns,18.58us,618.00ns,18.42us,48.79us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,161245,4.62s,18.50us,0.00ns,18.55us,649.00ns,18.38us,79.88us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,11382,4.56s,264.38us,0.00ns,263.54us,11.68us,241.29us,325.33us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3407,4.56s,878.21us,0.00ns,880.56us,5.40us,875.17us,924.17us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8125,4.51s,366.83us,0.00ns,369.17us,123.77us,360.67us,11.52ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,99376,4.60s,29.58us,0.00ns,30.14us,48.18us,28.58us,9.79ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,101129,4.56s,29.54us,0.00ns,29.61us,855.00ns,28.50us,65.25us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,86506,4.56s,34.54us,0.00ns,34.63us,924.00ns,34.38us,66.33us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,86605,4.56s,34.50us,0.00ns,34.59us,924.00ns,34.38us,71.17us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,11908,4.56s,254.46us,0.00ns,251.89us,12.16us,233.29us,348.04us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,11912,4.56s,254.46us,0.00ns,251.81us,11.73us,232.04us,305.12us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,5501,4.56s,543.75us,0.00ns,545.41us,4.37us,543.46us,588.38us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1954,4.56s,1.53ms,0.00ns,1.54ms,6.79us,1.53ms,1.58ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1954,4.56s,1.53ms,0.00ns,1.54ms,6.64us,1.53ms,1.58ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,115149,4.63s,25.96us,0.00ns,26.00us,737.00ns,25.67us,57.00us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,90347,4.61s,25.79us,0.00ns,33.15us,1.84ms,24.62us,553.90ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,21668,4.56s,135.04us,0.00ns,138.41us,7.14us,129.17us,180.08us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3407,4.56s,878.25us,0.00ns,880.50us,5.47us,875.21us,937.46us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8158,4.56s,366.88us,0.00ns,367.71us,3.53us,360.38us,401.21us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,9263,4.56s,322.25us,0.00ns,323.83us,4.08us,321.17us,364.58us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,9219,4.56s,324.42us,0.00ns,325.37us,3.42us,323.50us,359.58us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,72562,4.56s,41.21us,0.00ns,41.29us,0.97us,41.00us,74.25us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,71798,4.56s,41.62us,0.00ns,41.73us,1.03us,41.42us,72.25us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,22996,4.56s,128.96us,0.00ns,130.41us,4.58us,123.75us,190.08us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,22958,4.56s,129.08us,0.00ns,130.63us,4.68us,124.29us,178.38us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8439,4.56s,353.25us,0.00ns,355.46us,89.87us,353.04us,8.59ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2105,4.54s,1.40ms,0.00ns,1.43ms,392.16us,1.40ms,17.13ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2134,4.55s,1.40ms,0.00ns,1.41ms,6.41us,1.40ms,1.45ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,161311,4.63s,18.50us,0.00ns,18.54us,618.00ns,18.38us,52.54us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,161269,4.62s,18.50us,0.00ns,18.55us,635.00ns,18.38us,71.71us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,20212,4.55s,144.79us,0.00ns,148.38us,10.29us,134.42us,196.08us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3407,4.56s,878.38us,0.00ns,880.67us,5.34us,875.33us,931.29us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8159,4.56s,366.88us,0.00ns,367.65us,3.47us,360.00us,404.92us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,101886,4.63s,29.33us,0.00ns,29.40us,844.00ns,28.67us,64.50us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,102449,4.61s,29.17us,0.00ns,29.23us,833.00ns,28.67us,85.33us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,86945,4.56s,34.38us,0.00ns,34.45us,932.00ns,34.21us,68.29us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,67891,4.55s,34.33us,0.00ns,44.13us,2.12ms,33.25us,552.93ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,22953,4.56s,129.38us,0.00ns,130.66us,4.77us,122.92us,175.08us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,22859,4.55s,129.83us,0.00ns,131.20us,5.06us,122.67us,177.96us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,2783,4.56s,1.08ms,0.00ns,1.08ms,6.34us,1.07ms,1.12ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1564,4.56s,1.92ms,0.00ns,1.92ms,7.62us,1.91ms,1.96ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1564,4.56s,1.92ms,0.00ns,1.92ms,7.65us,1.91ms,1.96ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,176302,4.63s,16.92us,0.00ns,16.96us,585.00ns,16.83us,48.67us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,176327,4.63s,16.92us,0.00ns,16.96us,637.00ns,16.79us,47.50us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,6968,4.56s,433.65us,20.00ns,430.54us,12.42us,401.04us,484.96us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3400,4.56s,881.17us,0.00ns,882.50us,5.71us,878.38us,921.83us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8073,5.09s,366.88us,0.00ns,437.76us,6.18ms,363.38us,555.41ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,7028,4.54s,424.58us,0.00ns,426.81us,10.17us,403.21us,493.96us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,7009,4.56s,425.54us,0.00ns,427.96us,11.51us,403.50us,499.62us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,86878,4.56s,34.38us,0.00ns,34.48us,0.96us,33.25us,70.71us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,87054,4.56s,34.33us,0.00ns,34.41us,891.00ns,34.17us,64.92us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,7207,4.56s,417.46us,0.00ns,416.22us,8.88us,393.71us,463.25us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,7180,4.56s,418.25us,0.00ns,417.80us,9.16us,395.21us,467.71us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,682.38ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,9.50us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,750.35ms,42.00ns,0.00ns,49.00ns,22.00ns,1.00ns,9.75us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,749.45ms,42.00ns,0.00ns,49.00ns,32.00ns,1.00ns,16.12us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,691.35ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,4.33us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,692.38ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,7.21us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,685.69ms,1.00ns,0.00ns,16.00ns,24.00ns,1.00ns,9.83us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,692.13ms,1.00ns,0.00ns,19.00ns,26.00ns,1.00ns,16.58us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,691.68ms,1.00ns,0.00ns,19.00ns,20.00ns,1.00ns,1.21us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,684.59ms,1.00ns,0.00ns,20.00ns,22.00ns,1.00ns,7.83us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,690.27ms,1.00ns,0.00ns,21.00ns,23.00ns,1.00ns,6.83us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,693.34ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,9.79us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,683.12ms,1.00ns,0.00ns,17.00ns,27.00ns,1.00ns,17.17us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,750.80ms,42.00ns,0.00ns,39.00ns,24.00ns,1.00ns,16.62us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,741.63ms,42.00ns,0.00ns,39.00ns,23.00ns,1.00ns,14.17us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,680.84ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,9.21us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,808.78ms,42.00ns,0.00ns,54.00ns,35.00ns,1.00ns,16.46us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,742.84ms,42.00ns,0.00ns,53.00ns,31.00ns,1.00ns,16.38us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,690.77ms,1.00ns,0.00ns,20.00ns,26.00ns,1.00ns,9.79us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,682.28ms,1.00ns,0.00ns,18.00ns,23.00ns,1.00ns,6.88us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,686.42ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,125.00ns\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,691.11ms,1.00ns,0.00ns,19.00ns,27.00ns,1.00ns,16.50us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,690.60ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,6.79us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,690.29ms,1.00ns,0.00ns,20.00ns,26.00ns,1.00ns,16.75us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,683.29ms,41.00ns,0.00ns,22.00ns,29.00ns,1.00ns,15.08us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,691.74ms,1.00ns,0.00ns,18.00ns,27.00ns,1.00ns,12.58us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,692.27ms,1.00ns,0.00ns,17.00ns,22.00ns,1.00ns,6.88us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,749.97ms,42.00ns,0.00ns,34.00ns,29.00ns,1.00ns,20.92us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,1.33s,42.00ns,0.00ns,34.00ns,22.00ns,1.00ns,11.58us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,747.13ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,209.00ns\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,805.05ms,42.00ns,0.00ns,61.00ns,33.00ns,1.00ns,16.50us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,810.85ms,42.00ns,0.00ns,60.00ns,27.00ns,1.00ns,9.79us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,690.70ms,1.00ns,0.00ns,20.00ns,26.00ns,1.00ns,9.92us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,691.82ms,1.00ns,0.00ns,18.00ns,20.00ns,1.00ns,1.62us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,686.35ms,1.00ns,0.00ns,16.00ns,31.00ns,1.00ns,16.58us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,691.73ms,1.00ns,0.00ns,19.00ns,30.00ns,1.00ns,17.17us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,691.79ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,9.50us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,750.20ms,1.00ns,0.00ns,21.00ns,23.00ns,1.00ns,9.96us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,680.70ms,1.00ns,0.00ns,21.00ns,26.00ns,1.00ns,9.29us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,754.91ms,1.00ns,0.00ns,18.00ns,23.00ns,1.00ns,7.62us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,691.68ms,1.00ns,0.00ns,17.00ns,27.00ns,1.00ns,11.21us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,684.50ms,1.00ns,0.00ns,21.00ns,25.00ns,1.00ns,10.00us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,684.30ms,41.00ns,0.00ns,22.00ns,21.00ns,1.00ns,1.21us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,691.22ms,41.00ns,0.00ns,26.00ns,24.00ns,1.00ns,7.17us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,803.69ms,83.00ns,0.00ns,72.00ns,40.00ns,1.00ns,19.92us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,814.74ms,83.00ns,0.00ns,72.00ns,32.00ns,1.00ns,16.46us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,690.12ms,1.00ns,0.00ns,20.00ns,29.00ns,1.00ns,16.46us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,687.22ms,1.00ns,0.00ns,18.00ns,30.00ns,1.00ns,14.04us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,692.79ms,1.00ns,0.00ns,18.00ns,31.00ns,1.00ns,13.17us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,691.42ms,1.00ns,0.00ns,20.00ns,22.00ns,1.00ns,6.42us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,691.16ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,9.50us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,750.58ms,1.00ns,0.00ns,21.00ns,23.00ns,1.00ns,6.21us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,690.24ms,41.00ns,0.00ns,27.00ns,25.00ns,1.00ns,9.88us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,692.66ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,6.75us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,683.95ms,1.00ns,0.00ns,17.00ns,28.00ns,1.00ns,16.71us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,691.51ms,1.00ns,0.00ns,21.00ns,27.00ns,1.00ns,13.88us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,687.18ms,1.00ns,0.00ns,21.00ns,36.00ns,1.00ns,23.83us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,2183,4.56s,1.37ms,0.00ns,1.37ms,6.79us,1.36ms,1.44ms\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,3298,4.56s,907.08us,0.00ns,909.65us,5.35us,906.92us,0.98ms\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,3298,4.56s,907.08us,0.00ns,909.68us,5.21us,906.92us,949.67us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,157989,4.63s,18.92us,0.00ns,18.94us,622.00ns,18.75us,50.12us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,158389,4.63s,18.83us,0.00ns,18.89us,624.00ns,18.71us,51.88us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,10770,4.54s,218.71us,0.00ns,278.51us,5.34ms,211.96us,554.18ms\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3411,4.55s,877.79us,0.00ns,879.51us,5.60us,875.12us,927.00us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,97189,4.61s,31.00us,0.00ns,30.82us,0.99us,29.75us,72.46us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,96489,4.62s,30.96us,0.00ns,31.04us,874.00ns,30.50us,62.04us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613402,37209,4.56s,80.33us,0.00ns,80.57us,1.57us,79.75us,111.79us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,39607,4.56s,75.46us,0.00ns,75.69us,1.49us,75.04us,109.25us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,14304,4.56s,207.71us,0.00ns,209.70us,4.70us,205.79us,254.83us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,14386,4.56s,207.83us,0.00ns,208.50us,2.78us,206.54us,243.29us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,42,1000000,743.09ms,41.00ns,0.00ns,23.00ns,32.00ns,1.00ns,22.67us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,749.42ms,42.00ns,0.00ns,41.00ns,24.00ns,1.00ns,16.58us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,746.74ms,42.00ns,0.00ns,40.00ns,27.00ns,1.00ns,20.83us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,747.29ms,41.00ns,0.00ns,28.00ns,21.00ns,1.00ns,6.62us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,692.03ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,6.92us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,42,1000000,682.36ms,1.00ns,0.00ns,16.00ns,26.00ns,1.00ns,13.17us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,748.78ms,41.00ns,0.00ns,22.00ns,23.00ns,1.00ns,6.96us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,745.38ms,41.00ns,0.00ns,28.00ns,34.00ns,1.00ns,18.71us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,685.18ms,1.00ns,0.00ns,21.00ns,34.00ns,1.00ns,21.25us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,688.66ms,1.00ns,0.00ns,18.00ns,34.00ns,1.00ns,14.79us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,685.14ms,1.00ns,0.00ns,18.00ns,23.00ns,1.00ns,9.42us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,42,1000000,930.11ms,84.00ns,0.00ns,100.00ns,35.00ns,1.00ns,14.17us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,42,1000000,872.54ms,84.00ns,0.00ns,99.00ns,46.00ns,1.00ns,23.50us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,5888,4.51s,506.38us,0.00ns,509.53us,107.29us,506.08us,8.72ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1962,4.51s,1.50ms,21.00ns,1.53ms,447.60us,1.50ms,16.61ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1993,4.56s,1.50ms,0.00ns,1.51ms,6.65us,1.50ms,1.56ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,152207,4.63s,19.62us,0.00ns,19.66us,665.00ns,19.46us,70.25us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,152480,4.62s,19.58us,0.00ns,19.62us,650.00ns,19.46us,55.71us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,37719,4.56s,78.17us,0.00ns,79.48us,4.14us,75.38us,118.75us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3408,4.56s,878.21us,0.00ns,880.48us,5.55us,875.21us,925.42us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,8158,4.56s,366.92us,0.00ns,367.70us,3.53us,363.33us,416.62us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,39957,4.56s,74.83us,0.00ns,75.03us,1.50us,74.33us,109.00us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,40652,4.56s,73.54us,0.00ns,73.75us,1.41us,73.04us,102.79us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613427,83530,4.56s,35.75us,0.00ns,35.86us,948.00ns,35.62us,95.17us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,64961,4.58s,35.75us,0.00ns,46.13us,2.18ms,34.67us,554.72ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,39891,4.56s,75.00us,0.00ns,75.16us,3.60us,70.12us,114.88us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,39616,4.56s,75.29us,0.00ns,75.68us,2.56us,70.33us,112.58us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,31,1000000,686.34ms,1.00ns,0.00ns,17.00ns,25.00ns,1.00ns,14.08us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,745.08ms,42.00ns,0.00ns,49.00ns,22.00ns,1.00ns,10.00us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,744.62ms,42.00ns,0.00ns,49.00ns,27.00ns,1.00ns,12.00us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,685.25ms,1.00ns,0.00ns,20.00ns,24.00ns,1.00ns,9.54us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,691.22ms,1.00ns,0.00ns,18.00ns,23.00ns,1.00ns,7.46us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,31,1000000,690.93ms,1.00ns,0.00ns,16.00ns,22.00ns,1.00ns,6.88us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,688.89ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,7.00us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,685.34ms,1.00ns,0.00ns,19.00ns,28.00ns,1.00ns,16.62us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,684.75ms,1.00ns,0.00ns,20.00ns,22.00ns,1.00ns,7.21us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,691.68ms,1.00ns,0.00ns,20.00ns,26.00ns,1.00ns,14.21us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,692.62ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,6.71us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,688.59ms,1.00ns,0.00ns,17.00ns,28.00ns,1.00ns,13.92us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,31,1000000,807.39ms,42.00ns,0.00ns,54.00ns,30.00ns,1.00ns,16.58us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,31,1000000,811.26ms,42.00ns,0.00ns,54.00ns,35.00ns,1.00ns,23.29us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8065,4.56s,370.83us,0.00ns,371.96us,3.65us,370.71us,419.62us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2119,4.56s,1.41ms,0.00ns,1.42ms,6.71us,1.41ms,1.46ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2119,4.55s,1.41ms,0.00ns,1.42ms,8.36us,1.41ms,1.65ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,157598,4.63s,18.96us,0.00ns,18.99us,640.00ns,18.79us,79.04us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,158337,4.62s,18.88us,0.00ns,18.89us,620.00ns,18.75us,49.79us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,15181,4.56s,154.17us,0.00ns,197.58us,4.55ms,144.08us,560.14ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3412,4.55s,878.12us,0.00ns,879.38us,5.31us,875.08us,921.67us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8159,4.56s,366.83us,0.00ns,367.68us,3.53us,363.50us,400.21us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,73852,4.56s,40.46us,0.00ns,40.57us,1.05us,40.04us,78.92us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,73156,4.56s,40.83us,0.00ns,40.96us,1.04us,40.42us,72.25us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,85218,4.56s,35.04us,0.00ns,35.15us,943.00ns,34.92us,65.79us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,85311,4.56s,35.04us,0.00ns,35.11us,0.95us,34.88us,71.33us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,20162,4.56s,146.79us,0.00ns,148.75us,5.51us,139.29us,198.08us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,20136,4.56s,147.00us,0.00ns,148.95us,5.57us,139.92us,197.25us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8064,4.56s,370.88us,0.00ns,372.00us,3.59us,370.75us,407.92us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2115,4.56s,1.41ms,0.00ns,1.42ms,98.58us,1.41ms,5.80ms\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2038,5.03s,1.41ms,0.00ns,1.47ms,621.29us,1.41ms,23.18ms\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,159356,4.62s,18.75us,0.00ns,18.77us,622.00ns,18.58us,51.08us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,159781,4.62s,18.67us,0.00ns,18.72us,651.00ns,18.54us,63.96us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,17836,4.56s,168.42us,0.00ns,168.15us,9.24us,151.92us,227.21us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3406,4.56s,878.71us,0.00ns,880.89us,5.30us,875.42us,915.54us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8160,4.56s,366.79us,0.00ns,367.63us,3.51us,363.29us,402.17us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,36585,4.56s,81.54us,0.00ns,81.95us,1.63us,81.04us,119.38us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,34154,4.56s,87.50us,0.00ns,87.79us,1.69us,86.92us,121.04us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,86551,4.56s,34.54us,0.00ns,34.61us,910.00ns,34.38us,65.33us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,86648,4.56s,34.50us,0.00ns,34.57us,912.00ns,34.33us,65.21us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,14766,4.56s,159.00us,0.00ns,203.14us,4.58ms,146.04us,555.83ms\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,18721,4.56s,159.62us,0.00ns,160.20us,7.43us,146.71us,208.75us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,5911,4.55s,505.96us,0.00ns,507.55us,4.26us,505.58us,548.71us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,3261,4.56s,917.54us,0.00ns,919.94us,5.50us,915.71us,0.96ms\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3262,4.56s,917.46us,0.00ns,919.86us,5.45us,915.58us,0.97ms\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,146996,4.63s,20.29us,0.00ns,20.36us,666.00ns,20.17us,51.21us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,147873,4.62s,20.21us,0.00ns,20.24us,637.00ns,20.04us,45.17us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,31185,4.55s,95.79us,0.00ns,96.15us,1.86us,94.58us,152.71us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3409,4.56s,878.08us,0.00ns,880.12us,5.42us,875.08us,916.71us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,31241,4.56s,95.71us,0.00ns,95.98us,1.73us,95.25us,133.62us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,33679,4.56s,88.75us,0.00ns,89.03us,1.68us,87.46us,128.83us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,64968,4.56s,46.00us,0.00ns,46.12us,1.08us,45.71us,84.75us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,65260,4.56s,45.79us,0.00ns,45.92us,1.08us,45.50us,86.83us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,34634,4.56s,86.33us,0.00ns,86.57us,1.53us,85.58us,121.42us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,35618,4.56s,83.92us,0.00ns,84.18us,1.60us,83.12us,114.71us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,7612,4.56s,392.92us,0.00ns,394.08us,3.79us,392.75us,444.54us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,3243,4.56s,923.08us,0.00ns,925.14us,5.35us,919.67us,0.97ms\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3243,4.56s,922.92us,0.00ns,925.03us,5.52us,919.83us,0.98ms\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,158381,4.63s,18.88us,0.00ns,18.89us,620.00ns,18.75us,50.00us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,168851,4.62s,17.42us,0.00ns,17.71us,10.93us,17.29us,4.20ms\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,45425,4.56s,64.71us,0.00ns,65.99us,57.39us,64.04us,9.46ms\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3403,4.56s,878.04us,0.00ns,881.52us,14.14us,875.58us,1.05ms\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,38740,4.56s,76.17us,0.00ns,77.39us,2.68us,75.58us,115.58us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,39343,4.54s,76.17us,0.00ns,76.20us,1.88us,74.54us,123.12us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,82333,4.56s,36.29us,0.00ns,36.39us,931.00ns,36.17us,77.00us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,82349,4.56s,36.29us,0.00ns,36.38us,925.00ns,36.12us,66.79us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,57433,4.56s,52.00us,0.00ns,52.19us,1.21us,51.25us,89.17us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,57805,4.56s,51.67us,0.00ns,51.85us,1.33us,50.79us,88.21us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8230,4.56s,363.42us,0.00ns,364.51us,3.48us,363.29us,397.29us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,3254,4.55s,919.58us,0.00ns,922.01us,6.50us,917.71us,1.08ms\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2538,4.51s,919.75us,0.00ns,1.18ms,11.06ms,893.25us,557.34ms\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,136071,4.62s,21.88us,0.00ns,22.00us,763.00ns,21.46us,54.79us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,168530,4.63s,17.62us,0.00ns,17.75us,698.00ns,17.29us,59.04us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,45108,4.56s,66.25us,0.00ns,66.46us,1.40us,65.79us,100.38us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3410,4.56s,877.71us,0.00ns,879.96us,5.48us,874.71us,931.46us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,59917,4.56s,49.88us,0.00ns,50.02us,1.15us,49.25us,80.71us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,64537,4.56s,46.33us,0.00ns,46.43us,1.10us,45.50us,79.50us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,83946,4.56s,35.58us,0.00ns,35.69us,0.97us,35.46us,93.75us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,83979,4.62s,35.58us,0.00ns,35.67us,916.00ns,35.42us,74.96us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,50118,4.56s,59.67us,0.00ns,59.81us,1.22us,59.08us,93.33us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,52887,4.56s,56.29us,0.00ns,56.68us,25.63us,55.75us,5.22ms\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,1.30s,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,6.25us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,741.57ms,42.00ns,0.00ns,41.00ns,24.00ns,1.00ns,13.12us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,743.75ms,42.00ns,0.00ns,39.00ns,22.00ns,1.00ns,11.17us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,689.94ms,41.00ns,0.00ns,23.00ns,31.00ns,1.00ns,21.21us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,691.05ms,1.00ns,0.00ns,18.00ns,28.00ns,1.00ns,19.79us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,681.79ms,41.00ns,0.00ns,22.00ns,24.00ns,1.00ns,9.58us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,692.58ms,1.00ns,0.00ns,19.00ns,25.00ns,1.00ns,13.96us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,684.13ms,1.00ns,0.00ns,19.00ns,28.00ns,1.00ns,16.83us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,685.14ms,41.00ns,0.00ns,26.00ns,24.00ns,1.00ns,6.79us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,749.29ms,41.00ns,0.00ns,28.00ns,36.00ns,1.00ns,29.17us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,693.01ms,1.00ns,0.00ns,19.00ns,33.00ns,1.00ns,23.04us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,690.30ms,1.00ns,0.00ns,18.00ns,25.00ns,1.00ns,9.21us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,0.99s,166.00ns,0.00ns,149.00ns,58.00ns,41.00ns,23.08us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,867.66ms,83.00ns,0.00ns,76.00ns,27.00ns,1.00ns,9.88us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,744.54ms,1.00ns,0.00ns,19.00ns,33.00ns,1.00ns,19.50us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,742.55ms,42.00ns,0.00ns,44.00ns,29.00ns,1.00ns,23.29us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,748.32ms,42.00ns,0.00ns,43.00ns,30.00ns,1.00ns,23.58us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,691.41ms,1.00ns,0.00ns,20.00ns,29.00ns,1.00ns,16.75us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,691.04ms,1.00ns,0.00ns,21.00ns,23.00ns,1.00ns,7.21us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,693.50ms,1.00ns,0.00ns,18.00ns,23.00ns,1.00ns,9.25us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,690.32ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,9.42us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,689.89ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,7.04us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,690.38ms,1.00ns,0.00ns,21.00ns,20.00ns,1.00ns,209.00ns\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,689.90ms,41.00ns,0.00ns,26.00ns,25.00ns,1.00ns,10.08us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,686.05ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,3.46us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,687.11ms,1.00ns,0.00ns,18.00ns,23.00ns,1.00ns,9.83us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,813.50ms,83.00ns,0.00ns,66.00ns,38.00ns,1.00ns,14.33us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,755.40ms,42.00ns,0.00ns,34.00ns,22.00ns,1.00ns,10.08us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,2190,4.56s,1.37ms,0.00ns,1.37ms,6.93us,1.36ms,1.42ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,3298,4.56s,907.08us,0.00ns,909.75us,5.77us,906.92us,1.02ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,3298,4.56s,907.08us,0.00ns,909.75us,5.37us,906.96us,0.96ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,157544,4.63s,18.96us,0.00ns,18.99us,639.00ns,18.83us,49.83us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,158315,4.63s,18.88us,0.00ns,18.90us,629.00ns,18.75us,49.42us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,13721,4.63s,181.00us,0.00ns,223.29us,4.74ms,178.54us,555.37ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3412,4.53s,878.00us,0.00ns,879.43us,5.51us,875.17us,919.50us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,112511,4.62s,26.54us,0.00ns,26.61us,830.00ns,25.25us,63.21us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,113483,4.63s,26.29us,0.00ns,26.38us,806.00ns,25.46us,57.25us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613402,43132,4.56s,69.25us,0.00ns,69.51us,1.52us,68.75us,131.92us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,45823,4.56s,65.21us,0.00ns,65.42us,1.37us,64.75us,99.21us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,17877,4.56s,167.29us,0.00ns,167.77us,2.37us,166.38us,209.75us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,18003,4.56s,166.08us,0.00ns,166.59us,2.47us,164.54us,204.50us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,1787,4.56s,1.68ms,0.00ns,1.68ms,7.23us,1.67ms,1.74ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1300,4.56s,2.31ms,0.00ns,2.31ms,8.09us,2.30ms,2.36ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1295,4.56s,2.31ms,0.00ns,2.32ms,296.32us,2.30ms,12.97ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,152268,5.16s,18.92us,0.00ns,19.65us,40.47us,18.29us,10.53ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,157856,4.62s,18.92us,0.00ns,18.95us,628.00ns,18.79us,51.54us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,10289,4.56s,290.21us,0.00ns,291.54us,5.63us,283.67us,333.96us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3413,4.55s,877.67us,0.00ns,878.95us,5.87us,875.17us,920.92us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,8163,4.56s,366.67us,0.00ns,367.49us,3.56us,360.08us,404.67us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,111376,4.63s,26.79us,0.00ns,26.89us,904.00ns,25.71us,57.38us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,113123,4.63s,26.38us,0.00ns,26.47us,0.98us,25.42us,57.00us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613402,51560,4.55s,58.71us,0.00ns,58.13us,2.08us,54.88us,96.29us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,50992,4.56s,58.62us,0.00ns,58.78us,1.27us,58.00us,92.29us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,10496,4.56s,284.58us,0.00ns,285.78us,3.21us,283.75us,321.58us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,8367,4.55s,279.50us,0.00ns,358.50us,6.06ms,272.96us,554.78ms\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,42,1000000,690.21ms,41.00ns,0.00ns,24.00ns,28.00ns,1.00ns,19.58us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,748.22ms,42.00ns,0.00ns,36.00ns,21.00ns,1.00ns,9.67us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,754.06ms,42.00ns,0.00ns,35.00ns,25.00ns,1.00ns,9.79us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,752.57ms,42.00ns,0.00ns,35.00ns,22.00ns,1.00ns,9.75us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,684.06ms,1.00ns,0.00ns,19.00ns,27.00ns,1.00ns,13.83us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,42,1000000,755.10ms,41.00ns,0.00ns,31.00ns,27.00ns,1.00ns,13.62us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,691.04ms,1.00ns,0.00ns,20.00ns,23.00ns,1.00ns,6.92us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,751.89ms,42.00ns,0.00ns,38.00ns,29.00ns,1.00ns,21.04us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,754.49ms,42.00ns,0.00ns,32.00ns,27.00ns,1.00ns,10.79us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,692.05ms,1.00ns,0.00ns,19.00ns,31.00ns,1.00ns,21.12us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,690.94ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,6.88us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,42,1000000,1.24s,250.00ns,0.00ns,255.00ns,56.00ns,166.00ns,18.04us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,42,1000000,0.99s,125.00ns,0.00ns,132.00ns,48.00ns,41.00ns,23.62us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,42,1000000,741.49ms,42.00ns,0.00ns,43.00ns,19.00ns,1.00ns,9.50us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,812.26ms,42.00ns,0.00ns,62.00ns,36.00ns,1.00ns,21.00us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,806.29ms,42.00ns,0.00ns,61.00ns,42.00ns,1.00ns,22.58us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,751.10ms,41.00ns,0.00ns,27.00ns,34.00ns,1.00ns,16.50us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,683.72ms,1.00ns,0.00ns,20.00ns,24.00ns,1.00ns,9.83us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,42,1000000,691.54ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,7.08us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,691.30ms,1.00ns,0.00ns,20.00ns,23.00ns,1.00ns,10.25us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,42,1000000,681.87ms,1.00ns,0.00ns,20.00ns,26.00ns,1.00ns,14.33us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,755.15ms,41.00ns,0.00ns,30.00ns,27.00ns,1.00ns,15.38us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,690.45ms,41.00ns,0.00ns,30.00ns,30.00ns,1.00ns,16.62us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,685.93ms,1.00ns,0.00ns,20.00ns,28.00ns,1.00ns,15.79us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,686.78ms,1.00ns,0.00ns,19.00ns,20.00ns,1.00ns,167.00ns\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,42,1000000,935.69ms,125.00ns,0.00ns,115.00ns,43.00ns,1.00ns,20.08us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,42,1000000,804.34ms,42.00ns,0.00ns,57.00ns,36.00ns,1.00ns,16.88us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,4887,4.56s,612.08us,0.00ns,613.87us,4.73us,610.75us,661.00us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,3278,4.56s,913.00us,0.00ns,915.25us,5.42us,911.25us,0.97ms\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,3275,4.56s,913.08us,0.00ns,916.22us,8.83us,886.79us,1.04ms\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,149983,4.63s,19.92us,0.00ns,19.95us,677.00ns,19.79us,64.08us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,150300,4.63s,19.88us,0.00ns,19.91us,695.00ns,19.71us,51.00us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,25197,4.56s,91.58us,0.00ns,119.01us,3.50ms,88.25us,555.24ms\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3412,4.55s,878.00us,0.00ns,879.39us,5.44us,875.21us,930.83us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,21028,4.56s,142.38us,0.00ns,142.62us,2.35us,140.67us,189.08us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,21449,4.55s,139.42us,0.00ns,139.82us,2.14us,138.75us,173.50us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613427,77051,4.56s,38.79us,0.00ns,38.88us,0.97us,38.58us,69.54us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,77063,4.56s,38.79us,0.00ns,38.88us,0.97us,38.62us,65.54us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,32286,4.56s,93.00us,0.00ns,92.87us,2.19us,89.58us,128.25us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,32122,4.56s,92.83us,0.00ns,93.35us,1.86us,92.00us,129.46us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,4364,4.56s,685.58us,0.00ns,687.55us,4.80us,685.00us,724.25us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1840,4.56s,1.63ms,42.00ns,1.63ms,6.91us,1.63ms,1.69ms\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1833,4.55s,1.63ms,0.00ns,1.64ms,195.85us,1.62ms,9.99ms\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,154294,5.21s,19.33us,0.00ns,19.39us,645.00ns,19.21us,71.46us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,154430,4.63s,19.33us,0.00ns,19.38us,666.00ns,19.21us,49.92us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,22772,4.56s,127.88us,0.00ns,131.70us,6.02us,126.33us,168.83us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3416,4.56s,875.38us,0.00ns,878.32us,5.60us,875.25us,919.67us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,8161,4.56s,366.75us,0.00ns,367.56us,3.56us,363.25us,402.04us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,31060,4.56s,96.25us,0.00ns,96.54us,1.75us,95.83us,134.50us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,33165,4.55s,90.12us,0.00ns,90.41us,1.75us,89.71us,124.25us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613427,72685,4.55s,41.12us,0.00ns,41.22us,1.06us,40.88us,100.83us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,72887,4.56s,41.00us,0.00ns,41.11us,1.01us,40.79us,79.54us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,24069,4.56s,123.12us,0.00ns,124.60us,52.64us,121.67us,8.25ms\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,22984,5.06s,125.38us,0.00ns,130.48us,106.11us,121.33us,10.22ms\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,31,1000000,683.63ms,1.00ns,0.00ns,19.00ns,25.00ns,1.00ns,14.17us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,747.56ms,41.00ns,0.00ns,22.00ns,26.00ns,1.00ns,14.33us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,681.03ms,41.00ns,0.00ns,21.00ns,25.00ns,1.00ns,10.08us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,743.41ms,41.00ns,0.00ns,29.00ns,26.00ns,1.00ns,10.00us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,691.26ms,1.00ns,0.00ns,20.00ns,32.00ns,1.00ns,21.08us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,31,1000000,690.29ms,41.00ns,0.00ns,24.00ns,35.00ns,1.00ns,20.92us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,686.73ms,1.00ns,0.00ns,19.00ns,31.00ns,1.00ns,21.46us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,754.43ms,42.00ns,0.00ns,32.00ns,24.00ns,1.00ns,10.71us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,745.02ms,41.00ns,0.00ns,30.00ns,39.00ns,1.00ns,21.38us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,691.72ms,1.00ns,0.00ns,18.00ns,30.00ns,1.00ns,16.58us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,692.29ms,1.00ns,0.00ns,18.00ns,20.00ns,1.00ns,3.04us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,31,1000000,1.17s,250.00ns,0.00ns,236.00ns,66.00ns,125.00ns,35.29us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,31,1000000,927.07ms,125.00ns,0.00ns,119.00ns,43.00ns,1.00ns,17.29us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,31,1000000,741.31ms,41.00ns,0.00ns,22.00ns,24.00ns,1.00ns,8.92us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,751.44ms,42.00ns,0.00ns,43.00ns,27.00ns,1.00ns,15.83us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,745.22ms,42.00ns,0.00ns,42.00ns,21.00ns,1.00ns,10.04us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,746.27ms,1.00ns,0.00ns,20.00ns,23.00ns,1.00ns,9.67us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,749.12ms,1.00ns,0.00ns,20.00ns,32.00ns,1.00ns,16.46us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,31,1000000,681.36ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,6.88us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,691.11ms,1.00ns,0.00ns,19.00ns,31.00ns,1.00ns,21.25us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,687.83ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,6.75us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,748.48ms,41.00ns,0.00ns,23.00ns,22.00ns,1.00ns,9.25us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,689.64ms,41.00ns,0.00ns,28.00ns,36.00ns,1.00ns,20.88us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,691.54ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,9.54us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,687.02ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,6.75us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,31,1000000,868.22ms,83.00ns,0.00ns,83.00ns,43.00ns,1.00ns,21.21us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,31,1000000,750.28ms,42.00ns,0.00ns,44.00ns,34.00ns,1.00ns,22.71us\n"
  },
  {
    "path": "benchmarks/record/aarch64/2023-08-26.csv",
    "content": "name,model,rebar_version,engine,engine_version,err,haystack_len,iters,total,median,mad,mean,stddev,min,max\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,6326,4.56s,473.00us,0.00ns,474.19us,3.80us,472.21us,512.79us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,594933,158896,4.63s,18.79us,0.00ns,18.83us,573.00ns,18.71us,44.42us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,594933,122819,4.80s,23.79us,0.00ns,23.85us,691.00ns,23.67us,57.04us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,594933,223292,4.69s,13.38us,0.00ns,13.38us,463.00ns,13.21us,44.54us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,97075,4.75s,30.29us,0.00ns,30.35us,845.00ns,30.12us,61.17us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,7940,4.56s,376.62us,0.00ns,377.78us,3.76us,375.96us,451.58us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,8298,4.56s,360.67us,0.00ns,361.50us,3.27us,359.88us,399.17us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,6176,4.56s,484.83us,0.00ns,485.77us,3.57us,483.67us,532.88us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,7769,4.56s,384.71us,0.00ns,386.11us,3.77us,382.38us,432.67us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,594933,5616,4.56s,532.38us,0.00ns,533.66us,3.88us,531.25us,569.46us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,8295,4.56s,360.96us,0.00ns,361.63us,3.04us,360.12us,399.79us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,5886,4.56s,508.42us,0.00ns,509.67us,3.81us,507.04us,551.25us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,5884,4.56s,508.62us,0.00ns,509.87us,3.97us,507.00us,547.12us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,7638,4.56s,391.38us,0.00ns,392.73us,3.58us,389.25us,428.00us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,5831,4.56s,513.17us,0.00ns,514.45us,3.79us,512.04us,550.38us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,5314,4.56s,563.04us,0.00ns,564.57us,4.03us,562.62us,599.75us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,3012,4.56s,0.99ms,0.00ns,1.00ms,5.61us,0.99ms,1.05ms\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,4451,4.56s,672.42us,0.00ns,674.05us,4.41us,669.54us,713.17us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,594933,3935,4.56s,760.00us,0.00ns,761.95us,5.12us,759.04us,895.08us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,5508,4.56s,543.79us,0.00ns,544.68us,3.32us,543.25us,590.12us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,3200,4.56s,936.29us,0.00ns,937.67us,5.18us,930.25us,0.98ms\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,2927,4.56s,1.02ms,0.00ns,1.03ms,5.40us,1.02ms,1.06ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,3794,4.56s,788.71us,0.00ns,790.85us,4.75us,788.50us,830.50us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,2108,4.56s,1.42ms,0.00ns,1.42ms,7.81us,1.41ms,1.47ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,3164,4.56s,946.67us,0.00ns,948.14us,5.04us,939.17us,0.98ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,594933,2996,4.56s,1.00ms,0.00ns,1.00ms,5.21us,1.00ms,1.04ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,3960,4.56s,755.58us,0.00ns,757.62us,4.65us,755.29us,799.42us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,2447,4.56s,1.22ms,0.00ns,1.23ms,5.88us,1.22ms,1.26ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,2229,4.56s,1.34ms,0.00ns,1.35ms,5.96us,1.34ms,1.40ms\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,1.29s,292.00ns,0.00ns,297.00ns,79.00ns,208.00ns,31.54us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,664,1000000,692.78ms,1.00ns,0.00ns,19.00ns,30.00ns,1.00ns,11.83us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,664,1000000,2.97s,292.00ns,0.00ns,287.00ns,66.00ns,166.00ns,24.38us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,692.49ms,1.00ns,0.00ns,19.00ns,20.00ns,1.00ns,417.00ns\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,2.97s,292.00ns,0.00ns,297.00ns,87.00ns,166.00ns,25.00us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,1.30s,250.00ns,0.00ns,270.00ns,67.00ns,166.00ns,25.08us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.17s,250.00ns,0.00ns,243.00ns,73.00ns,125.00ns,25.21us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,1.05s,167.00ns,0.00ns,176.00ns,61.00ns,83.00ns,23.71us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.17s,250.00ns,0.00ns,253.00ns,90.00ns,166.00ns,25.08us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,3.63s,584.00ns,0.00ns,599.00ns,101.00ns,458.00ns,31.00us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,1.17s,250.00ns,0.00ns,233.00ns,71.00ns,125.00ns,25.38us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.11s,208.00ns,0.00ns,212.00ns,64.00ns,83.00ns,24.62us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.11s,208.00ns,0.00ns,208.00ns,52.00ns,83.00ns,19.25us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.17s,292.00ns,0.00ns,286.00ns,82.00ns,166.00ns,24.33us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,1.18s,209.00ns,0.00ns,222.00ns,67.00ns,125.00ns,24.75us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,1.65s,459.00ns,0.00ns,477.00ns,86.00ns,333.00ns,23.29us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,1.23s,250.00ns,0.00ns,271.00ns,84.00ns,166.00ns,25.08us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.23s,292.00ns,0.00ns,297.00ns,76.00ns,166.00ns,25.33us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,4.23s,916.00ns,0.00ns,898.00ns,136.00ns,791.00ns,25.88us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,1.66s,458.00ns,0.00ns,450.00ns,100.00ns,333.00ns,31.46us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,1.35s,333.00ns,0.00ns,324.00ns,76.00ns,208.00ns,21.96us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,1.41s,333.00ns,0.00ns,335.00ns,86.00ns,250.00ns,25.38us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,2.31s,792.00ns,0.00ns,812.00ns,129.00ns,625.00ns,32.54us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,1.53s,417.00ns,0.00ns,416.00ns,87.00ns,291.00ns,25.42us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.42s,333.00ns,0.00ns,339.00ns,84.00ns,250.00ns,25.29us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,4.89s,1.21us,0.00ns,1.23us,151.00ns,1.12us,32.12us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,2.20s,708.00ns,0.00ns,720.00ns,119.00ns,583.00ns,29.88us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,1.66s,500.00ns,0.00ns,506.00ns,102.00ns,416.00ns,31.54us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.65s,458.00ns,0.00ns,468.00ns,95.00ns,375.00ns,25.29us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,748.16ms,42.00ns,0.00ns,49.00ns,34.00ns,1.00ns,20.00us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,69,1000000,631.69ms,1.00ns,0.00ns,16.00ns,23.00ns,1.00ns,9.88us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,69,1000000,2.90s,250.00ns,0.00ns,261.00ns,75.00ns,166.00ns,24.21us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,69,1000000,693.90ms,1.00ns,0.00ns,17.00ns,29.00ns,1.00ns,14.00us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,69,1000000,2.91s,250.00ns,0.00ns,261.00ns,78.00ns,125.00ns,23.79us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,748.53ms,42.00ns,0.00ns,43.00ns,22.00ns,1.00ns,11.12us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,751.91ms,42.00ns,0.00ns,34.00ns,27.00ns,1.00ns,14.25us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,756.30ms,41.00ns,0.00ns,31.00ns,26.00ns,1.00ns,16.67us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,755.38ms,41.00ns,0.00ns,28.00ns,24.00ns,1.00ns,8.58us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,3.03s,333.00ns,0.00ns,324.00ns,81.00ns,208.00ns,25.29us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,748.56ms,83.00ns,0.00ns,66.00ns,40.00ns,1.00ns,15.92us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,749.48ms,42.00ns,0.00ns,42.00ns,31.00ns,1.00ns,23.17us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,749.27ms,42.00ns,0.00ns,44.00ns,21.00ns,1.00ns,13.29us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,754.13ms,41.00ns,0.00ns,28.00ns,23.00ns,1.00ns,10.04us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,748.49ms,42.00ns,0.00ns,44.00ns,29.00ns,1.00ns,15.96us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,238415,4.69s,12.50us,0.00ns,12.53us,515.00ns,12.38us,47.29us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,594933,158847,4.63s,18.79us,0.00ns,18.84us,625.00ns,18.71us,52.17us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,594933,122939,4.81s,23.79us,0.00ns,23.84us,701.00ns,23.67us,57.79us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,594933,223276,4.69s,13.38us,0.00ns,13.38us,479.00ns,13.21us,46.83us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,96704,4.75s,30.29us,0.00ns,30.50us,883.00ns,30.12us,73.38us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,451082,4.82s,6.58us,0.00ns,6.60us,341.00ns,6.46us,32.21us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,450954,4.82s,6.58us,0.00ns,6.60us,338.00ns,6.46us,37.67us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,126287,4.63s,23.38us,0.00ns,23.71us,1.28us,21.54us,68.21us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,15435,4.56s,193.75us,0.00ns,194.31us,17.73us,169.71us,281.38us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,594933,232750,4.99s,12.33us,0.00ns,12.33us,474.00ns,11.88us,45.46us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,451410,4.82s,6.58us,0.00ns,6.59us,310.00ns,6.46us,32.50us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,128220,4.63s,22.62us,0.00ns,23.35us,1.54us,21.04us,55.38us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,131323,4.63s,22.08us,0.00ns,22.79us,1.55us,21.00us,77.58us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,15550,4.56s,193.75us,0.00ns,192.88us,16.97us,169.71us,273.71us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,126439,4.63s,23.71us,0.00ns,23.68us,1.39us,21.12us,58.58us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,249510,4.69s,11.96us,0.00ns,11.97us,440.00ns,11.83us,43.79us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,58836,4.56s,50.67us,0.00ns,50.94us,1.26us,50.33us,93.83us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,13211,4.56s,226.42us,0.00ns,227.03us,2.50us,226.29us,263.54us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,594933,139965,4.81s,20.83us,0.00ns,20.88us,659.00ns,20.71us,60.54us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,242538,4.69s,12.29us,0.00ns,12.32us,492.00ns,12.21us,68.00us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,58197,4.56s,51.12us,0.00ns,51.50us,1.47us,50.33us,96.88us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,62452,4.56s,47.83us,0.00ns,47.99us,1.24us,47.71us,94.17us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,172988,4.63s,17.25us,0.00ns,17.29us,591.00ns,17.17us,48.08us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,43214,4.56s,69.08us,0.00ns,69.37us,1.49us,68.50us,99.75us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,10307,4.56s,290.17us,0.00ns,291.02us,3.15us,289.96us,335.04us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,594933,120566,4.81s,24.29us,0.00ns,24.36us,729.00ns,24.17us,49.88us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,173017,4.63s,17.25us,0.00ns,17.29us,597.00ns,17.17us,46.75us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,44680,4.56s,66.75us,0.00ns,67.09us,1.65us,65.29us,100.75us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,48031,4.56s,62.21us,0.00ns,62.41us,1.45us,59.12us,97.50us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,689.85ms,41.00ns,0.00ns,22.00ns,27.00ns,1.00ns,17.00us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,664,1000000,691.03ms,1.00ns,0.00ns,19.00ns,31.00ns,1.00ns,21.67us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,664,1000000,2.97s,292.00ns,0.00ns,290.00ns,73.00ns,166.00ns,23.46us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,693.42ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,7.38us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,2.98s,292.00ns,0.00ns,293.00ns,81.00ns,166.00ns,30.33us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,691.57ms,1.00ns,0.00ns,19.00ns,29.00ns,1.00ns,17.17us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,691.48ms,1.00ns,0.00ns,20.00ns,31.00ns,1.00ns,21.12us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,690.31ms,42.00ns,0.00ns,34.00ns,34.00ns,1.00ns,19.38us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.18s,209.00ns,0.00ns,226.00ns,64.00ns,125.00ns,24.83us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,2.97s,291.00ns,0.00ns,273.00ns,64.00ns,166.00ns,25.21us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,693.79ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,6.88us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,691.96ms,41.00ns,0.00ns,30.00ns,35.00ns,1.00ns,24.04us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,692.82ms,41.00ns,0.00ns,30.00ns,25.00ns,1.00ns,15.92us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.18s,209.00ns,0.00ns,226.00ns,58.00ns,125.00ns,18.38us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,691.11ms,42.00ns,0.00ns,32.00ns,27.00ns,1.00ns,16.54us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,692.13ms,1.00ns,0.00ns,20.00ns,22.00ns,1.00ns,6.96us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,818.03ms,83.00ns,0.00ns,65.00ns,29.00ns,1.00ns,10.00us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.23s,250.00ns,0.00ns,269.00ns,78.00ns,166.00ns,28.46us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,2.97s,292.00ns,0.00ns,284.00ns,69.00ns,166.00ns,24.92us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,692.60ms,1.00ns,0.00ns,20.00ns,23.00ns,1.00ns,10.04us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,816.82ms,83.00ns,0.00ns,65.00ns,39.00ns,1.00ns,16.67us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,814.46ms,83.00ns,0.00ns,64.00ns,36.00ns,1.00ns,16.17us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,692.12ms,1.00ns,0.00ns,20.00ns,23.00ns,1.00ns,9.17us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,812.35ms,83.00ns,0.00ns,88.00ns,44.00ns,1.00ns,27.50us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.35s,333.00ns,0.00ns,342.00ns,81.00ns,250.00ns,31.83us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,2.91s,292.00ns,0.00ns,286.00ns,77.00ns,166.00ns,24.46us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,692.05ms,1.00ns,0.00ns,20.00ns,23.00ns,1.00ns,10.00us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,752.45ms,83.00ns,0.00ns,85.00ns,40.00ns,1.00ns,16.75us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,811.81ms,83.00ns,0.00ns,87.00ns,36.00ns,1.00ns,16.83us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,692.83ms,1.00ns,0.00ns,16.00ns,30.00ns,1.00ns,19.54us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,69,1000000,691.96ms,1.00ns,0.00ns,16.00ns,23.00ns,1.00ns,9.92us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,69,1000000,2.92s,250.00ns,0.00ns,260.00ns,72.00ns,166.00ns,23.88us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,69,1000000,691.60ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,9.96us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,69,1000000,2.91s,250.00ns,0.00ns,266.00ns,67.00ns,166.00ns,23.75us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,694.86ms,1.00ns,0.00ns,16.00ns,25.00ns,1.00ns,9.67us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,692.45ms,1.00ns,0.00ns,16.00ns,21.00ns,1.00ns,6.92us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,694.44ms,1.00ns,0.00ns,17.00ns,22.00ns,1.00ns,6.67us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,691.17ms,41.00ns,0.00ns,28.00ns,31.00ns,1.00ns,16.50us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,2.91s,250.00ns,0.00ns,258.00ns,60.00ns,125.00ns,24.21us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,692.62ms,1.00ns,0.00ns,16.00ns,29.00ns,1.00ns,16.17us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,691.77ms,1.00ns,0.00ns,17.00ns,25.00ns,1.00ns,9.96us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,692.61ms,1.00ns,0.00ns,17.00ns,22.00ns,1.00ns,7.25us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,753.47ms,41.00ns,0.00ns,28.00ns,30.00ns,1.00ns,15.75us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,692.99ms,1.00ns,0.00ns,16.00ns,28.00ns,1.00ns,16.83us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,69,1000000,692.14ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,7.12us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,693.16ms,1.00ns,0.00ns,17.00ns,22.00ns,1.00ns,6.50us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,69,1000000,754.85ms,42.00ns,0.00ns,37.00ns,33.00ns,1.00ns,21.17us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,3.03s,250.00ns,0.00ns,270.00ns,77.00ns,166.00ns,29.42us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,69,1000000,692.70ms,1.00ns,0.00ns,16.00ns,28.00ns,1.00ns,16.79us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,69,1000000,692.27ms,1.00ns,0.00ns,17.00ns,28.00ns,1.00ns,16.83us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,69,1000000,694.09ms,1.00ns,0.00ns,17.00ns,21.00ns,1.00ns,6.79us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,69,1000000,692.52ms,1.00ns,0.00ns,17.00ns,21.00ns,1.00ns,7.62us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,694.41ms,1.00ns,0.00ns,17.00ns,26.00ns,1.00ns,16.33us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,69,1000000,753.16ms,42.00ns,0.00ns,44.00ns,21.00ns,1.00ns,10.25us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,2.98s,250.00ns,0.00ns,267.00ns,75.00ns,125.00ns,24.54us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,69,1000000,694.24ms,1.00ns,0.00ns,17.00ns,26.00ns,1.00ns,16.12us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,69,1000000,693.26ms,1.00ns,0.00ns,17.00ns,24.00ns,1.00ns,9.38us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,69,1000000,692.23ms,1.00ns,0.00ns,18.00ns,31.00ns,1.00ns,21.00us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,,1000000,692.55ms,1.00ns,0.00ns,16.00ns,21.00ns,1.00ns,7.04us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,,1000000,691.13ms,1.00ns,0.00ns,15.00ns,28.00ns,1.00ns,16.62us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,,1000000,2.92s,250.00ns,0.00ns,254.00ns,74.00ns,125.00ns,31.96us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,,1000000,694.70ms,1.00ns,0.00ns,15.00ns,28.00ns,1.00ns,12.58us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,,1000000,2.92s,250.00ns,0.00ns,254.00ns,74.00ns,125.00ns,24.12us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,,1000000,692.82ms,1.00ns,0.00ns,16.00ns,23.00ns,1.00ns,7.00us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,,1000000,691.31ms,1.00ns,0.00ns,16.00ns,22.00ns,1.00ns,9.67us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,,1000000,693.30ms,1.00ns,0.00ns,16.00ns,21.00ns,1.00ns,6.71us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,,1000000,694.07ms,1.00ns,0.00ns,15.00ns,34.00ns,1.00ns,21.50us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,,1000000,2.91s,250.00ns,0.00ns,255.00ns,82.00ns,125.00ns,40.08us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,,1000000,689.71ms,1.00ns,0.00ns,16.00ns,24.00ns,1.00ns,9.50us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,,1000000,690.24ms,1.00ns,0.00ns,15.00ns,21.00ns,1.00ns,6.83us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,,1000000,693.53ms,1.00ns,0.00ns,15.00ns,25.00ns,1.00ns,9.46us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,,1000000,630.48ms,1.00ns,0.00ns,15.00ns,29.00ns,1.00ns,14.04us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,,1000000,691.79ms,1.00ns,0.00ns,15.00ns,24.00ns,1.00ns,9.79us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,,1000000,693.03ms,1.00ns,0.00ns,16.00ns,22.00ns,1.00ns,6.92us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,,1000000,692.62ms,1.00ns,0.00ns,16.00ns,23.00ns,1.00ns,12.83us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,,1000000,693.05ms,1.00ns,0.00ns,15.00ns,29.00ns,1.00ns,21.08us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,,1000000,2.91s,250.00ns,0.00ns,256.00ns,67.00ns,125.00ns,25.12us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,,1000000,694.24ms,1.00ns,0.00ns,16.00ns,29.00ns,1.00ns,16.83us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,,1000000,692.18ms,1.00ns,0.00ns,15.00ns,21.00ns,1.00ns,6.92us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,,1000000,692.36ms,1.00ns,0.00ns,15.00ns,25.00ns,1.00ns,13.33us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,,1000000,754.22ms,1.00ns,0.00ns,16.00ns,22.00ns,1.00ns,9.67us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,,1000000,693.35ms,1.00ns,0.00ns,16.00ns,31.00ns,1.00ns,20.50us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,,1000000,691.93ms,1.00ns,0.00ns,15.00ns,30.00ns,1.00ns,21.17us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,,1000000,2.92s,250.00ns,0.00ns,254.00ns,66.00ns,125.00ns,24.42us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,,1000000,689.25ms,1.00ns,0.00ns,16.00ns,23.00ns,1.00ns,9.71us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,,1000000,691.07ms,1.00ns,0.00ns,15.00ns,22.00ns,1.00ns,6.83us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,,1000000,692.69ms,1.00ns,0.00ns,15.00ns,28.00ns,1.00ns,16.21us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,205259,4.69s,14.54us,0.00ns,14.56us,602.00ns,14.38us,47.71us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,594933,158852,4.63s,18.79us,0.00ns,18.84us,614.00ns,18.71us,49.62us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,594933,122871,4.81s,23.79us,0.00ns,23.84us,739.00ns,23.67us,55.12us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,594933,223260,4.69s,13.38us,0.00ns,13.38us,477.00ns,13.21us,38.58us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,97084,4.74s,30.29us,0.00ns,30.34us,769.00ns,30.12us,61.42us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,350282,4.75s,8.50us,0.00ns,8.51us,388.00ns,8.38us,33.67us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,354337,4.75s,8.42us,0.00ns,8.41us,390.00ns,8.25us,38.83us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,113414,4.63s,25.83us,0.00ns,26.40us,1.32us,25.00us,55.33us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,14668,4.56s,203.29us,0.00ns,204.46us,8.05us,182.96us,253.04us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,594933,198317,4.92s,14.54us,0.00ns,14.56us,562.00ns,14.00us,65.33us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,354805,4.75s,8.38us,0.00ns,8.40us,365.00ns,8.25us,39.12us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,111493,4.63s,26.79us,0.00ns,26.86us,764.00ns,26.04us,61.46us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,111608,4.63s,26.75us,0.00ns,26.83us,801.00ns,26.00us,57.17us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,108756,4.63s,27.46us,0.00ns,27.53us,836.00ns,26.71us,57.79us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,180789,4.63s,16.50us,0.00ns,16.54us,598.00ns,16.38us,47.83us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,50715,4.56s,59.08us,0.00ns,59.11us,1.94us,56.08us,99.50us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,11167,4.56s,267.79us,0.00ns,268.60us,3.20us,264.92us,302.83us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,594933,110045,4.75s,26.62us,0.00ns,26.69us,761.00ns,26.46us,57.42us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,173139,4.63s,17.25us,0.00ns,17.28us,593.00ns,17.08us,47.83us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,49176,4.56s,60.92us,0.00ns,60.95us,1.85us,58.04us,116.29us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,49703,4.56s,60.21us,0.00ns,60.31us,3.69us,53.62us,94.21us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,129552,4.63s,23.04us,0.00ns,23.11us,693.00ns,22.92us,56.29us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,37247,4.56s,80.29us,0.00ns,80.49us,1.61us,78.79us,115.83us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,10171,4.56s,294.17us,0.00ns,294.93us,2.87us,294.00us,331.29us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,594933,88980,4.75s,33.08us,0.00ns,33.15us,856.00ns,32.88us,71.21us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,126891,4.63s,23.54us,0.00ns,23.59us,710.00ns,23.42us,54.46us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,37714,4.56s,79.29us,0.00ns,79.49us,1.59us,77.58us,116.12us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,38225,4.56s,78.33us,0.00ns,78.43us,1.97us,72.25us,121.58us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,751.87ms,41.00ns,0.00ns,22.00ns,25.00ns,1.00ns,9.83us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,664,1000000,753.97ms,1.00ns,0.00ns,19.00ns,33.00ns,1.00ns,24.42us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,664,1000000,3.03s,291.00ns,0.00ns,282.00ns,74.00ns,166.00ns,24.83us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,755.03ms,1.00ns,0.00ns,19.00ns,26.00ns,1.00ns,8.88us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,2.97s,292.00ns,0.00ns,292.00ns,66.00ns,166.00ns,25.67us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,691.83ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,9.29us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,694.37ms,1.00ns,0.00ns,19.00ns,20.00ns,1.00ns,167.00ns\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,750.81ms,42.00ns,0.00ns,38.00ns,35.00ns,1.00ns,20.71us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.24s,250.00ns,0.00ns,261.00ns,46.00ns,125.00ns,16.71us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,2.97s,291.00ns,0.00ns,279.00ns,74.00ns,166.00ns,24.58us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,754.35ms,1.00ns,0.00ns,19.00ns,28.00ns,1.00ns,16.83us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,754.49ms,42.00ns,0.00ns,33.00ns,37.00ns,1.00ns,16.00us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,751.17ms,42.00ns,0.00ns,33.00ns,27.00ns,1.00ns,14.00us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.17s,250.00ns,0.00ns,243.00ns,76.00ns,125.00ns,25.04us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,751.85ms,42.00ns,0.00ns,33.00ns,30.00ns,1.00ns,16.42us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,753.65ms,1.00ns,0.00ns,21.00ns,31.00ns,1.00ns,16.75us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,811.44ms,83.00ns,0.00ns,68.00ns,39.00ns,1.00ns,19.54us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.29s,292.00ns,0.00ns,304.00ns,76.00ns,208.00ns,25.58us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,3.03s,292.00ns,0.00ns,292.00ns,75.00ns,166.00ns,24.71us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,753.32ms,1.00ns,0.00ns,21.00ns,26.00ns,1.00ns,11.88us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,810.53ms,83.00ns,0.00ns,72.00ns,33.00ns,1.00ns,16.75us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,812.16ms,83.00ns,0.00ns,70.00ns,36.00ns,1.00ns,16.42us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,753.10ms,41.00ns,0.00ns,24.00ns,21.00ns,1.00ns,4.83us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,814.41ms,84.00ns,0.00ns,95.00ns,44.00ns,1.00ns,17.00us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.48s,375.00ns,0.00ns,381.00ns,88.00ns,250.00ns,25.08us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,3.10s,292.00ns,0.00ns,307.00ns,87.00ns,208.00ns,24.83us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,751.82ms,41.00ns,0.00ns,26.00ns,27.00ns,1.00ns,14.04us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,935.43ms,84.00ns,0.00ns,97.00ns,42.00ns,1.00ns,21.62us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,872.15ms,84.00ns,0.00ns,99.00ns,45.00ns,1.00ns,21.42us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,754.78ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,9.71us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,69,1000000,752.76ms,1.00ns,0.00ns,16.00ns,22.00ns,1.00ns,6.96us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,69,1000000,2.97s,250.00ns,0.00ns,263.00ns,64.00ns,166.00ns,24.96us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,69,1000000,692.34ms,1.00ns,0.00ns,17.00ns,28.00ns,1.00ns,16.79us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,69,1000000,2.98s,250.00ns,0.00ns,264.00ns,68.00ns,166.00ns,24.75us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,753.30ms,1.00ns,0.00ns,16.00ns,26.00ns,1.00ns,11.21us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,691.42ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,167.00ns\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,754.97ms,1.00ns,0.00ns,18.00ns,34.00ns,1.00ns,20.79us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,752.99ms,41.00ns,0.00ns,28.00ns,28.00ns,1.00ns,14.12us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,2.97s,250.00ns,0.00ns,257.00ns,62.00ns,125.00ns,22.54us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,754.58ms,1.00ns,0.00ns,17.00ns,21.00ns,1.00ns,6.75us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,755.41ms,1.00ns,0.00ns,18.00ns,34.00ns,1.00ns,16.50us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,752.90ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,9.67us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,750.39ms,41.00ns,0.00ns,28.00ns,21.00ns,1.00ns,6.96us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,754.85ms,1.00ns,0.00ns,17.00ns,21.00ns,1.00ns,6.71us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,69,1000000,753.61ms,1.00ns,0.00ns,17.00ns,24.00ns,1.00ns,9.71us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,754.29ms,1.00ns,0.00ns,18.00ns,28.00ns,1.00ns,16.75us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,69,1000000,754.84ms,42.00ns,0.00ns,37.00ns,30.00ns,1.00ns,16.17us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,2.97s,250.00ns,0.00ns,271.00ns,72.00ns,166.00ns,26.00us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,69,1000000,754.84ms,1.00ns,0.00ns,18.00ns,30.00ns,1.00ns,16.00us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,69,1000000,754.10ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,7.04us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,69,1000000,754.21ms,1.00ns,0.00ns,18.00ns,23.00ns,1.00ns,9.88us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,69,1000000,755.00ms,1.00ns,0.00ns,17.00ns,21.00ns,1.00ns,4.75us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,694.24ms,1.00ns,0.00ns,19.00ns,26.00ns,1.00ns,13.79us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,69,1000000,750.49ms,42.00ns,0.00ns,45.00ns,38.00ns,1.00ns,20.50us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,3.03s,292.00ns,0.00ns,284.00ns,60.00ns,166.00ns,25.12us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,69,1000000,690.54ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,4.75us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,69,1000000,692.24ms,1.00ns,0.00ns,19.00ns,20.00ns,1.00ns,167.00ns\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,69,1000000,753.90ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,9.83us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,29424,4.56s,101.62us,0.00ns,101.91us,1.70us,101.29us,133.50us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,594933,158826,4.63s,18.79us,0.00ns,18.84us,621.00ns,18.71us,49.21us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,594933,119645,4.75s,24.46us,0.00ns,24.53us,739.00ns,24.33us,54.46us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,594933,223280,4.69s,13.38us,0.00ns,13.38us,469.00ns,13.21us,46.50us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,96996,4.75s,30.29us,0.00ns,30.36us,861.00ns,30.17us,60.96us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,25406,4.52s,88.42us,0.00ns,118.03us,3.45ms,83.42us,549.93ms\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,33968,4.56s,88.21us,0.00ns,88.27us,1.70us,86.88us,131.71us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,32926,4.56s,90.71us,0.00ns,91.06us,2.24us,88.38us,131.25us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,12748,4.56s,234.04us,0.00ns,235.28us,3.92us,228.79us,272.50us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,594933,20780,4.62s,143.42us,0.00ns,143.77us,2.14us,142.21us,179.04us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,33799,4.56s,88.54us,0.00ns,88.70us,1.46us,88.00us,121.33us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,27722,4.56s,110.88us,0.00ns,108.17us,5.30us,99.25us,145.12us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,27048,4.56s,110.54us,0.00ns,110.87us,1.77us,109.96us,145.50us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,12636,4.56s,236.21us,0.00ns,237.38us,3.57us,230.79us,269.71us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,29616,4.56s,100.96us,0.00ns,101.25us,1.70us,100.12us,139.67us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,15603,5.09s,187.12us,0.00ns,192.22us,78.32us,183.46us,9.25ms\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,13073,4.56s,229.17us,0.00ns,229.43us,3.36us,224.96us,274.79us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,9216,4.56s,324.54us,0.00ns,325.48us,3.38us,323.50us,361.50us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,594933,8615,4.56s,347.25us,0.00ns,347.62us,6.26us,336.29us,398.88us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,16379,4.56s,182.75us,0.00ns,183.12us,2.22us,180.88us,230.17us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,11821,4.56s,253.12us,0.00ns,253.75us,2.82us,252.17us,296.54us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,12089,4.56s,247.54us,0.00ns,248.12us,2.71us,245.42us,289.62us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,10041,4.56s,298.29us,0.00ns,298.72us,3.04us,297.04us,367.00us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,8614,4.56s,347.33us,0.00ns,348.23us,3.22us,346.58us,384.67us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,7274,4.56s,411.25us,0.00ns,412.39us,3.51us,410.67us,449.92us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,594933,7136,4.56s,418.92us,0.00ns,419.91us,3.62us,417.58us,461.42us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,8203,4.57s,284.50us,0.00ns,365.67us,6.12ms,278.17us,554.52ms\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,7674,4.56s,390.21us,0.00ns,390.87us,3.37us,388.46us,434.88us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,7898,4.56s,379.62us,0.00ns,379.82us,3.49us,376.83us,415.92us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,751.27ms,42.00ns,0.00ns,43.00ns,31.00ns,1.00ns,23.46us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,664,1000000,689.95ms,1.00ns,0.00ns,19.00ns,28.00ns,1.00ns,13.62us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,664,1000000,2.97s,292.00ns,0.00ns,289.00ns,80.00ns,166.00ns,25.04us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,690.58ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,6.71us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,2.98s,292.00ns,0.00ns,292.00ns,70.00ns,166.00ns,24.54us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,693.79ms,42.00ns,0.00ns,35.00ns,23.00ns,1.00ns,9.46us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,753.91ms,42.00ns,0.00ns,33.00ns,26.00ns,1.00ns,16.38us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,752.14ms,83.00ns,0.00ns,63.00ns,33.00ns,1.00ns,14.04us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.23s,292.00ns,0.00ns,293.00ns,72.00ns,166.00ns,24.12us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,3.09s,333.00ns,0.00ns,324.00ns,80.00ns,208.00ns,24.25us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,742.69ms,42.00ns,0.00ns,40.00ns,33.00ns,1.00ns,14.71us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,813.05ms,83.00ns,0.00ns,65.00ns,36.00ns,1.00ns,16.54us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,815.69ms,83.00ns,0.00ns,66.00ns,40.00ns,1.00ns,16.50us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.23s,291.00ns,0.00ns,278.00ns,76.00ns,166.00ns,25.04us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,753.48ms,42.00ns,0.00ns,62.00ns,42.00ns,1.00ns,20.62us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,870.83ms,83.00ns,0.00ns,87.00ns,46.00ns,1.00ns,16.67us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,810.11ms,84.00ns,0.00ns,104.00ns,45.00ns,1.00ns,16.38us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.35s,333.00ns,0.00ns,334.00ns,86.00ns,208.00ns,24.88us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,3.21s,416.00ns,0.00ns,400.00ns,84.00ns,291.00ns,31.25us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,870.79ms,83.00ns,0.00ns,91.00ns,42.00ns,1.00ns,17.21us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,930.48ms,125.00ns,0.00ns,119.00ns,57.00ns,1.00ns,23.08us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,871.37ms,125.00ns,0.00ns,118.00ns,53.00ns,1.00ns,28.29us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,1.05s,166.00ns,0.00ns,155.00ns,58.00ns,41.00ns,28.42us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,1.05s,167.00ns,0.00ns,160.00ns,66.00ns,41.00ns,27.75us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.41s,375.00ns,0.00ns,371.00ns,102.00ns,250.00ns,25.04us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,3.39s,500.00ns,0.00ns,484.00ns,92.00ns,375.00ns,24.04us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,1.65s,167.00ns,0.00ns,158.00ns,55.00ns,41.00ns,21.00us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,1.10s,167.00ns,0.00ns,200.00ns,10.72us,83.00ns,10.62ms\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,0.99s,167.00ns,0.00ns,161.00ns,41.00ns,41.00ns,14.46us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,693.04ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,9.12us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,69,1000000,691.39ms,1.00ns,0.00ns,16.00ns,22.00ns,1.00ns,7.62us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,69,1000000,2.98s,250.00ns,0.00ns,261.00ns,59.00ns,125.00ns,23.75us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,69,1000000,693.00ms,1.00ns,0.00ns,17.00ns,29.00ns,1.00ns,16.75us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,69,1000000,2.96s,250.00ns,0.00ns,270.00ns,65.00ns,166.00ns,24.62us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,755.08ms,1.00ns,0.00ns,17.00ns,21.00ns,1.00ns,6.88us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,693.84ms,1.00ns,0.00ns,17.00ns,24.00ns,1.00ns,10.04us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,693.09ms,1.00ns,0.00ns,19.00ns,34.00ns,1.00ns,20.12us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,690.61ms,41.00ns,0.00ns,28.00ns,33.00ns,1.00ns,23.08us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,3.04s,292.00ns,0.00ns,301.00ns,75.00ns,166.00ns,29.50us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,691.69ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,6.83us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,690.12ms,41.00ns,0.00ns,24.00ns,23.00ns,1.00ns,9.46us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,690.30ms,41.00ns,0.00ns,25.00ns,35.00ns,1.00ns,21.17us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,690.27ms,41.00ns,0.00ns,28.00ns,31.00ns,1.00ns,16.42us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,754.99ms,41.00ns,0.00ns,26.00ns,23.00ns,1.00ns,9.21us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,69,1000000,752.60ms,41.00ns,0.00ns,27.00ns,26.00ns,1.00ns,16.54us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,752.24ms,42.00ns,0.00ns,33.00ns,28.00ns,1.00ns,17.33us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,69,1000000,751.72ms,42.00ns,0.00ns,37.00ns,33.00ns,1.00ns,22.92us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,2.97s,333.00ns,0.00ns,320.00ns,72.00ns,208.00ns,24.33us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,69,1000000,812.91ms,42.00ns,0.00ns,44.00ns,25.00ns,1.00ns,16.42us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,69,1000000,691.15ms,42.00ns,0.00ns,40.00ns,15.00ns,1.00ns,6.92us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,69,1000000,749.25ms,42.00ns,0.00ns,41.00ns,16.00ns,1.00ns,9.12us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,69,1000000,932.03ms,125.00ns,0.00ns,118.00ns,40.00ns,1.00ns,17.12us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,748.99ms,42.00ns,0.00ns,51.00ns,30.00ns,1.00ns,9.38us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,69,1000000,748.83ms,42.00ns,0.00ns,45.00ns,33.00ns,1.00ns,16.04us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,3.15s,375.00ns,0.00ns,382.00ns,103.00ns,250.00ns,30.96us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,69,1000000,871.17ms,83.00ns,0.00ns,83.00ns,35.00ns,1.00ns,23.79us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,69,1000000,811.70ms,83.00ns,0.00ns,65.00ns,33.00ns,1.00ns,16.33us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,69,1000000,810.56ms,83.00ns,0.00ns,63.00ns,39.00ns,1.00ns,20.42us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,2827,4.56s,1.06ms,0.00ns,1.06ms,5.38us,1.04ms,1.10ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,594933,154526,4.63s,19.33us,0.00ns,19.36us,602.00ns,19.21us,49.88us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,594933,94411,4.72s,23.88us,0.00ns,25.41us,76.25us,23.67us,15.77ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,594933,223286,4.69s,13.38us,0.00ns,13.38us,465.00ns,13.21us,47.21us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,94586,4.74s,31.12us,0.00ns,31.13us,839.00ns,30.17us,70.67us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,4667,4.56s,641.12us,0.00ns,642.85us,4.21us,640.92us,688.50us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,5151,4.56s,580.88us,0.00ns,582.42us,4.15us,580.58us,621.96us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,3653,4.56s,819.17us,0.00ns,821.38us,5.11us,818.33us,879.67us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,4296,4.56s,696.42us,0.00ns,698.38us,4.51us,695.71us,743.50us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,594933,3894,4.56s,767.83us,0.00ns,769.91us,4.74us,767.62us,805.42us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,5380,4.56s,556.08us,0.00ns,557.58us,3.99us,555.75us,619.67us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,3286,4.56s,910.83us,0.00ns,913.07us,5.19us,908.96us,0.96ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,2749,4.65s,916.08us,0.00ns,1.13ms,10.63ms,913.71us,558.16ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,4222,4.54s,708.83us,0.00ns,710.54us,4.88us,706.67us,751.29us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,3120,4.56s,0.96ms,0.00ns,0.96ms,5.67us,0.96ms,1.03ms\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,2.32s,750.00ns,0.00ns,772.00ns,125.00ns,666.00ns,25.62us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,664,1000000,757.36ms,1.00ns,0.00ns,19.00ns,26.00ns,1.00ns,11.33us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,664,1000000,3.03s,292.00ns,0.00ns,290.00ns,71.00ns,166.00ns,24.83us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,694.05ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,6.62us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,2.97s,292.00ns,0.00ns,297.00ns,87.00ns,166.00ns,25.04us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,2.07s,667.00ns,0.00ns,658.00ns,111.00ns,500.00ns,30.71us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.89s,584.00ns,0.00ns,596.00ns,109.00ns,416.00ns,30.33us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,1.35s,333.00ns,0.00ns,318.00ns,81.00ns,208.00ns,25.33us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.29s,291.00ns,0.00ns,278.00ns,84.00ns,166.00ns,32.62us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,4.54s,1.04us,0.00ns,1.06us,138.00ns,916.00ns,34.21us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,1.83s,542.00ns,0.00ns,563.00ns,111.00ns,416.00ns,29.92us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.53s,417.00ns,0.00ns,420.00ns,92.00ns,333.00ns,24.25us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.60s,417.00ns,0.00ns,422.00ns,93.00ns,333.00ns,32.04us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.30s,291.00ns,0.00ns,278.00ns,81.00ns,166.00ns,25.58us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,1.53s,417.00ns,0.00ns,415.00ns,95.00ns,291.00ns,25.04us\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,33335253,59,4.62s,50.78ms,0.00ns,51.07ms,484.39us,50.66ms,51.92ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,33335253,32,5.18s,94.85ms,104.00ns,95.29ms,2.37ms,94.81ms,108.46ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,33335253,32,4.61s,94.85ms,1.12us,94.85ms,22.01us,94.82ms,94.90ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,33335253,302,4.56s,9.94ms,271.00ns,9.96ms,48.28us,9.88ms,10.13ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,33335253,302,4.56s,9.95ms,1.12us,9.96ms,43.01us,9.88ms,10.08ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/binary,2.5.0,,33335253,2821,4.56s,1.06ms,0.00ns,1.06ms,7.33us,1.06ms,1.12ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,33335253,254,4.56s,11.67ms,687.00ns,11.82ms,371.13us,11.46ms,13.13ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,33335253,63,4.62s,47.82ms,0.00ns,47.82ms,29.44us,47.74ms,47.90ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,33335253,151,4.56s,19.93ms,0.00ns,19.94ms,225.99us,19.60ms,21.93ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,33335253,223,4.56s,13.51ms,0.00ns,13.51ms,16.46us,13.45ms,13.58ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,33335253,212,4.56s,14.21ms,479.00ns,14.21ms,46.18us,14.13ms,14.38ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,33335253,211,4.56s,14.21ms,0.00ns,14.27ms,748.73us,14.14ms,25.09ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,33335253,117,4.54s,20.03ms,0.00ns,25.77ms,51.28ms,19.97ms,576.15ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,33335253,150,4.56s,20.04ms,63.00ns,20.04ms,18.22us,20.00ms,20.12ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2524,4.56s,1.19ms,0.00ns,1.19ms,5.99us,1.19ms,1.23ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,8.30us,3.91ms,3.98ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.93ms,8.31us,3.91ms,3.97ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,57714,4.56s,51.79us,0.00ns,51.93us,1.09us,51.62us,89.71us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,57707,4.56s,51.79us,0.00ns,51.94us,1.10us,51.62us,80.08us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2851,4.56s,1.05ms,0.00ns,1.05ms,13.53us,1.03ms,1.13ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1269,4.56s,2.36ms,0.00ns,2.37ms,8.08us,2.35ms,2.41ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,3037,4.56s,0.99ms,0.00ns,0.99ms,5.88us,0.98ms,1.04ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,1648109,23162,4.61s,101.71us,0.00ns,128.91us,3.60ms,98.75us,546.80ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,13872,4.56s,215.58us,0.00ns,216.21us,2.71us,214.92us,255.75us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,13842,4.56s,216.08us,0.00ns,216.69us,2.73us,215.25us,260.12us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,31364,4.56s,95.33us,0.00ns,95.60us,1.61us,95.17us,129.83us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,31387,4.56s,95.25us,0.00ns,95.53us,1.69us,95.08us,129.62us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3084,4.56s,0.97ms,0.00ns,0.97ms,5.96us,0.96ms,1.03ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3087,4.56s,0.97ms,0.00ns,0.97ms,6.06us,0.96ms,1.03ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2523,4.56s,1.19ms,0.00ns,1.19ms,6.42us,1.19ms,1.24ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.93ms,9.85us,3.92ms,3.98ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.93ms,9.91us,3.91ms,3.97ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,56312,4.56s,52.92us,0.00ns,53.23us,35.40us,51.29us,8.44ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,54224,4.96s,52.88us,0.00ns,55.27us,144.50us,51.21us,23.94ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3065,4.56s,0.97ms,0.00ns,0.98ms,12.50us,0.96ms,1.03ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1269,4.56s,2.36ms,0.00ns,2.36ms,7.21us,2.35ms,2.42ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,3038,4.56s,0.99ms,0.00ns,0.99ms,5.35us,0.98ms,1.04ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,1648109,28858,4.62s,103.08us,0.00ns,103.34us,1.63us,102.92us,142.71us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,13374,4.56s,223.71us,0.00ns,224.27us,2.48us,223.04us,261.17us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,13496,4.56s,221.50us,0.00ns,222.25us,2.62us,220.83us,261.33us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,30393,4.56s,98.38us,0.00ns,98.65us,1.60us,98.21us,139.75us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,30395,4.56s,98.42us,0.00ns,98.65us,1.58us,98.25us,129.33us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3309,4.56s,905.25us,0.00ns,906.65us,5.08us,899.50us,948.75us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,2590,4.56s,904.04us,0.00ns,1.16ms,11.22ms,898.88us,571.58ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2527,4.56s,1.18ms,0.00ns,1.19ms,5.58us,1.18ms,1.23ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,8.17us,3.91ms,3.97ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,8.53us,3.91ms,3.97ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,58896,4.56s,50.75us,0.00ns,50.89us,1.10us,50.58us,81.50us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,58920,4.56s,50.75us,0.00ns,50.86us,1.10us,50.58us,81.33us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3143,4.56s,943.12us,0.00ns,0.95ms,23.47us,931.96us,1.04ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1269,4.56s,2.36ms,0.00ns,2.37ms,7.99us,2.35ms,2.43ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,3038,4.56s,0.99ms,0.00ns,0.99ms,5.20us,0.98ms,1.04ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,1648109,29751,4.62s,99.96us,0.00ns,100.20us,1.63us,99.79us,143.79us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,22455,4.56s,134.21us,0.00ns,133.55us,75.97us,128.04us,11.51ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,22459,4.71s,127.96us,0.00ns,133.52us,178.07us,126.12us,18.87ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,29457,4.56s,101.50us,0.00ns,101.79us,1.75us,101.29us,144.29us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,29512,4.56s,101.33us,0.00ns,101.60us,1.84us,101.04us,158.00us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3402,4.56s,881.92us,0.00ns,882.00us,8.78us,869.75us,925.96us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3397,4.56s,883.17us,0.00ns,883.33us,8.54us,870.21us,922.17us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2747,4.56s,1.09ms,0.00ns,1.09ms,5.89us,1.09ms,1.14ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,1210,4.56s,2.48ms,0.00ns,2.48ms,8.11us,2.47ms,2.53ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,1209,4.56s,2.48ms,0.00ns,2.48ms,8.32us,2.47ms,2.55ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,55881,4.56s,53.50us,0.00ns,53.63us,1.20us,53.33us,84.75us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,55888,4.56s,53.50us,0.00ns,53.63us,1.18us,53.33us,84.17us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2480,4.51s,944.38us,0.00ns,1.21ms,11.29ms,931.67us,562.84ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1269,4.56s,2.36ms,0.00ns,2.37ms,8.31us,2.36ms,2.41ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,1648109,28689,4.62s,103.67us,0.00ns,103.94us,1.64us,103.50us,140.50us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,12621,4.56s,237.04us,0.00ns,237.66us,2.63us,236.21us,271.75us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,12644,4.56s,236.38us,0.00ns,237.21us,2.80us,234.33us,277.42us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,107864,4.63s,27.71us,0.00ns,27.76us,774.00ns,27.54us,58.67us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,107975,4.63s,27.67us,0.00ns,27.73us,812.00ns,27.50us,60.79us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3378,4.56s,886.29us,0.00ns,888.20us,6.02us,878.67us,939.33us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3388,4.56s,883.73us,20.00ns,885.55us,5.90us,876.58us,929.38us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2523,4.56s,1.19ms,0.00ns,1.19ms,5.66us,1.19ms,1.24ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,762,4.56s,3.92ms,104.00ns,3.94ms,392.25us,3.91ms,14.74ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,754,4.56s,3.92ms,41.00ns,3.98ms,624.18us,3.91ms,15.98ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,55328,4.56s,54.04us,0.00ns,54.17us,1.12us,53.88us,94.33us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,55999,4.56s,53.38us,0.00ns,53.52us,1.12us,53.21us,95.50us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2929,4.56s,1.02ms,0.00ns,1.02ms,9.69us,1.01ms,1.07ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1269,4.56s,2.36ms,0.00ns,2.37ms,7.48us,2.36ms,2.40ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,2997,4.56s,1.00ms,0.00ns,1.00ms,4.98us,0.98ms,1.04ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,1648109,28620,4.62s,103.92us,0.00ns,104.20us,1.65us,103.79us,142.42us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,14222,4.56s,210.33us,0.00ns,210.90us,2.54us,209.62us,261.83us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,14432,4.56s,207.33us,0.00ns,207.82us,2.44us,206.50us,241.79us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3156,4.56s,949.38us,0.00ns,0.95ms,5.13us,943.29us,0.98ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,2451,4.52s,946.54us,0.00ns,1.22ms,11.24ms,940.25us,557.50ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2520,4.56s,1.19ms,0.00ns,1.19ms,6.14us,1.19ms,1.26ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,12.17us,3.91ms,4.05ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,10.08us,3.91ms,3.97ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,28745,4.56s,104.00us,0.00ns,104.32us,1.75us,103.33us,147.96us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,35047,4.56s,85.29us,0.00ns,85.55us,1.62us,84.92us,124.25us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3354,4.56s,873.62us,0.00ns,894.57us,28.56us,867.79us,1.03ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1234,4.56s,2.43ms,0.00ns,2.43ms,7.96us,2.42ms,2.52ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,2897,4.56s,1.03ms,0.00ns,1.04ms,5.37us,1.02ms,1.08ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,1648109,13485,4.56s,221.29us,0.00ns,221.83us,2.48us,220.25us,261.88us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,5882,4.56s,506.92us,0.00ns,510.03us,129.41us,504.46us,10.41ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,6178,4.54s,476.29us,0.00ns,485.60us,354.08us,475.12us,26.22ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3532,4.56s,848.08us,0.00ns,849.50us,5.20us,841.54us,906.83us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3646,4.56s,821.17us,0.00ns,822.78us,5.66us,813.79us,876.25us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,6839,4.56s,437.58us,0.00ns,438.66us,4.03us,434.42us,484.92us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,748,4.56s,4.01ms,21.00ns,4.02ms,15.63us,4.01ms,4.35ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,751,4.56s,3.99ms,0.00ns,4.00ms,8.81us,3.99ms,4.05ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,5499,4.56s,544.17us,0.00ns,545.55us,4.82us,537.88us,587.96us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,5999,4.56s,498.67us,0.00ns,500.04us,3.79us,497.54us,534.50us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2284,4.56s,1.31ms,0.00ns,1.31ms,7.03us,1.31ms,1.37ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1171,4.56s,2.56ms,0.00ns,2.56ms,8.63us,2.55ms,2.63ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,1907,4.55s,1.23ms,0.00ns,1.57ms,12.72ms,1.21ms,556.36ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,1648109,2885,4.56s,1.04ms,0.00ns,1.04ms,10.31us,1.01ms,1.09ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,4305,4.56s,695.21us,0.00ns,696.96us,4.76us,691.88us,741.25us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,5223,4.56s,574.17us,0.00ns,574.39us,6.57us,563.17us,628.46us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,2083,4.55s,1.44ms,0.00ns,1.44ms,8.08us,1.42ms,1.49ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,2335,4.56s,1.28ms,0.00ns,1.29ms,6.05us,1.27ms,1.33ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2127,4.56s,1.41ms,0.00ns,1.41ms,6.22us,1.41ms,1.47ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,736,4.56s,4.07ms,21.00ns,4.08ms,13.87us,4.07ms,4.34ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,737,4.56s,4.07ms,0.00ns,4.07ms,8.54us,4.06ms,4.11ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,18229,4.56s,164.08us,0.00ns,164.53us,2.12us,163.46us,199.33us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,24629,4.56s,121.08us,0.00ns,121.75us,47.05us,120.04us,7.45ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2832,4.51s,1.03ms,0.00ns,1.06ms,472.34us,1.03ms,21.60ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1221,4.56s,2.45ms,0.00ns,2.46ms,7.27us,2.45ms,2.50ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,2853,4.56s,1.05ms,0.00ns,1.05ms,5.37us,1.03ms,1.10ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,1648109,9501,4.56s,314.33us,0.00ns,315.11us,3.18us,311.17us,358.79us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,3475,4.56s,862.92us,0.00ns,863.27us,5.10us,851.00us,897.96us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,3838,4.56s,780.83us,0.00ns,781.63us,5.31us,774.33us,859.92us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,2819,4.56s,1.06ms,0.00ns,1.06ms,5.88us,1.05ms,1.11ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,2954,4.56s,1.01ms,0.00ns,1.02ms,5.88us,1.01ms,1.08ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,151305,20602,4.56s,145.17us,0.00ns,145.57us,1.94us,144.92us,201.79us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,151305,13353,4.56s,224.04us,0.00ns,224.62us,2.42us,223.75us,253.62us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,151305,10366,4.53s,224.12us,0.00ns,289.36us,5.45ms,217.71us,554.35ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,151305,539599,4.88s,5.50us,0.00ns,5.51us,330.00ns,5.25us,37.54us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,151305,544361,4.88s,5.46us,0.00ns,5.46us,332.00ns,5.25us,59.33us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,151305,184347,4.63s,15.33us,0.00ns,16.23us,1.71us,14.71us,48.08us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,151305,13816,4.56s,216.50us,0.00ns,217.09us,2.69us,215.75us,263.00us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,151305,202388,4.93s,14.17us,0.00ns,14.26us,574.00ns,13.92us,45.62us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,151305,22709,4.56s,132.08us,0.00ns,132.06us,2.02us,130.58us,170.67us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,151305,22182,4.56s,134.83us,0.00ns,135.20us,1.92us,134.17us,166.79us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,151305,285897,4.69s,10.42us,0.00ns,10.44us,442.00ns,10.21us,35.83us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,288576,4.69s,10.33us,0.00ns,10.35us,459.00ns,10.04us,42.12us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,151305,202259,4.64s,11.62us,0.00ns,14.78us,1.23ms,11.08us,553.47ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,151305,266732,4.69s,11.17us,0.00ns,11.20us,456.00ns,11.00us,60.54us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,151305,20564,4.56s,145.12us,0.00ns,145.84us,3.74us,144.92us,193.62us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,151305,13350,4.56s,224.04us,0.00ns,224.68us,2.49us,223.75us,257.88us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,151305,13351,4.56s,224.04us,0.00ns,224.65us,2.49us,223.79us,257.92us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,151305,537851,4.88s,5.50us,0.00ns,5.53us,327.00ns,5.29us,36.29us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,151305,538732,4.88s,5.50us,0.00ns,5.52us,328.00ns,5.21us,36.17us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,151305,233769,4.69s,13.25us,0.00ns,12.78us,901.00ns,11.67us,66.33us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,151305,13820,4.56s,216.54us,0.00ns,217.03us,2.48us,215.75us,249.50us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,151305,191339,4.92s,15.12us,0.00ns,15.13us,545.00ns,14.88us,45.88us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,151305,23273,4.56s,128.17us,0.00ns,128.86us,66.82us,126.79us,10.27ms\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,151305,23248,4.53s,125.67us,0.00ns,128.99us,130.56us,124.88us,14.72ms\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,151305,287896,4.69s,10.33us,0.00ns,10.37us,436.00ns,10.08us,42.58us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,284772,4.69s,10.46us,0.00ns,10.48us,450.00ns,10.12us,44.17us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,151305,303222,4.69s,9.79us,0.00ns,9.84us,468.00ns,9.62us,65.79us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,151305,305040,4.69s,9.54us,0.00ns,9.79us,0.99us,9.38us,48.12us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,500100,10479,4.56s,285.46us,0.00ns,286.26us,2.85us,285.38us,329.54us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,500100,2621,4.56s,1.14ms,0.00ns,1.14ms,5.24us,1.14ms,1.18ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,500100,2621,4.56s,1.14ms,0.00ns,1.14ms,5.20us,1.14ms,1.18ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,500100,194143,4.69s,15.38us,0.00ns,15.40us,516.00ns,15.25us,46.12us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,500100,194302,4.69s,15.38us,0.00ns,15.39us,560.00ns,15.25us,45.88us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,500100,8010,4.53s,288.71us,0.00ns,374.49us,6.19ms,285.38us,553.65ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,500100,4180,4.56s,716.04us,0.00ns,717.76us,4.28us,713.50us,762.83us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,500100,10007,4.56s,299.17us,0.00ns,299.75us,2.80us,296.46us,340.79us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,500100,96102,4.75s,30.58us,0.00ns,30.65us,827.00ns,30.46us,73.46us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,500100,8152,4.56s,367.12us,0.00ns,367.99us,2.91us,366.96us,405.67us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,500100,8150,4.56s,367.08us,0.00ns,368.07us,3.23us,366.96us,421.08us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,500100,106656,4.63s,28.00us,0.00ns,28.08us,755.00ns,27.88us,62.54us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,500100,106370,4.63s,28.08us,0.00ns,28.15us,836.00ns,27.88us,58.38us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,500100,10192,4.56s,293.54us,0.00ns,294.33us,2.85us,293.42us,327.50us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,500100,10191,4.56s,293.54us,0.00ns,294.32us,2.85us,293.38us,329.54us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,500100,6947,4.55s,352.50us,0.00ns,431.82us,6.68ms,342.54us,556.95ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,500100,8364,4.56s,357.62us,0.00ns,358.62us,3.52us,356.79us,395.12us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,500100,9096,4.56s,328.79us,0.00ns,329.78us,3.05us,328.25us,361.21us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,500100,2381,4.56s,1.26ms,0.00ns,1.26ms,5.63us,1.26ms,1.30ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,500100,11612,4.56s,255.46us,0.00ns,258.32us,15.88us,235.79us,351.04us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,500100,10223,4.56s,292.62us,0.00ns,293.42us,2.84us,292.38us,327.29us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,500100,11260,4.56s,264.17us,0.00ns,266.38us,5.20us,264.00us,314.00us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,500100,15237,4.56s,196.29us,0.00ns,196.84us,2.29us,196.17us,227.54us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,500100,2071,4.56s,1.55ms,0.00ns,1.45ms,176.01us,1.15ms,1.72ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,500100,971,4.56s,3.08ms,0.00ns,3.09ms,32.84us,3.08ms,3.46ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,500100,6456,4.56s,463.29us,0.00ns,464.69us,4.32us,462.79us,558.62us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,500100,906,4.52s,2.55ms,0.00ns,3.31ms,19.08ms,2.55ms,576.37ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,500100,9435,4.56s,316.92us,0.00ns,317.93us,3.10us,316.46us,358.50us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1001,1000000,1.90s,583.00ns,0.00ns,580.00ns,109.00ns,458.00ns,32.29us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,4.48s,2.29us,0.00ns,2.29us,204.00ns,2.17us,32.79us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,4.35s,2.29us,0.00ns,2.28us,209.00ns,2.17us,35.33us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1001,1000000,815.79ms,42.00ns,0.00ns,58.00ns,36.00ns,1.00ns,16.62us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,752.29ms,42.00ns,0.00ns,40.00ns,30.00ns,1.00ns,16.71us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.89s,583.00ns,0.00ns,589.00ns,108.00ns,500.00ns,33.00us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,3.51s,1.38us,0.00ns,1.40us,167.00ns,1.29us,32.12us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.90s,583.00ns,0.00ns,589.00ns,104.00ns,500.00ns,25.25us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,1001,1000000,3.09s,375.00ns,0.00ns,358.00ns,87.00ns,250.00ns,25.25us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1001,1000000,2.37s,833.00ns,0.00ns,837.00ns,139.00ns,750.00ns,25.71us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,2.25s,833.00ns,0.00ns,834.00ns,127.00ns,708.00ns,32.38us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1001,1000000,754.12ms,83.00ns,0.00ns,66.00ns,39.00ns,1.00ns,16.54us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1001,1000000,818.31ms,83.00ns,0.00ns,66.00ns,40.00ns,1.00ns,15.54us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1001,1000000,1.96s,625.00ns,0.00ns,617.00ns,120.00ns,500.00ns,25.67us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1001,1000000,1.96s,625.00ns,0.00ns,617.00ns,124.00ns,500.00ns,32.38us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1001,1000000,2.07s,708.00ns,0.00ns,693.00ns,120.00ns,583.00ns,32.42us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,2.20s,709.00ns,0.00ns,722.00ns,119.00ns,625.00ns,25.83us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,2.01s,667.00ns,0.00ns,664.00ns,110.00ns,541.00ns,25.42us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1001,1000000,4.94s,2.42us,0.00ns,2.56us,27.33us,2.33us,22.20ms\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,1.71s,500.00ns,0.00ns,492.00ns,109.00ns,375.00ns,31.29us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.89s,584.00ns,0.00ns,601.00ns,111.00ns,500.00ns,33.71us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.77s,500.00ns,0.00ns,520.00ns,106.00ns,416.00ns,25.29us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.53s,416.00ns,0.00ns,402.00ns,134.00ns,291.00ns,25.17us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,1001,912394,6.21s,2.75us,0.00ns,2.75us,241.00ns,2.58us,34.17us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1001,507282,4.88s,5.83us,0.00ns,5.86us,337.00ns,5.75us,38.88us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,3.16s,1.21us,0.00ns,1.19us,152.00ns,1.08us,26.17us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1001,578443,4.95s,5.12us,0.00ns,5.14us,306.00ns,5.00us,35.17us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1001,1000000,1.95s,667.00ns,0.00ns,677.00ns,122.00ns,583.00ns,47.92us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,550004,3242,4.56s,923.29us,0.00ns,925.55us,4.68us,921.79us,0.96ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,550004,2055,4.56s,1.46ms,0.00ns,1.46ms,5.71us,1.46ms,1.50ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,550004,2052,4.55s,1.46ms,20.00ns,1.46ms,15.63us,1.46ms,1.64ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,550004,13687,4.54s,170.08us,0.00ns,219.13us,4.72ms,165.12us,551.84ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,550004,17584,4.56s,170.04us,0.00ns,170.55us,2.42us,169.67us,212.79us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,550004,23816,4.56s,119.17us,0.00ns,125.92us,11.95us,117.17us,178.17us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,550004,3811,4.56s,784.83us,0.00ns,787.20us,4.95us,784.71us,828.38us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,550004,9105,4.56s,328.75us,0.00ns,329.44us,3.10us,322.96us,367.58us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,550004,4221,4.56s,709.21us,0.00ns,710.23us,5.65us,701.46us,759.33us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,550004,17728,4.56s,168.71us,0.00ns,169.18us,2.19us,168.58us,205.17us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,550004,17728,4.56s,168.71us,0.00ns,169.18us,2.21us,168.58us,212.08us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,550004,5996,4.56s,498.92us,0.00ns,500.33us,3.78us,498.63us,533.79us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,550004,6354,4.56s,470.79us,0.00ns,472.12us,3.68us,470.62us,508.83us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,550004,31013,4.99s,91.00us,0.00ns,110.61us,3.15ms,86.79us,555.15ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,550004,32686,4.54s,89.92us,0.00ns,91.73us,3.64us,86.88us,124.67us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,720057,4475,4.56s,668.50us,0.00ns,670.39us,4.35us,668.38us,703.50us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,720057,2811,4.56s,1.06ms,0.00ns,1.07ms,5.26us,1.06ms,1.11ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,720057,2811,4.56s,1.06ms,0.00ns,1.07ms,5.28us,1.06ms,1.11ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,720057,64761,4.56s,45.96us,0.00ns,46.27us,1.14us,45.67us,82.17us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,720057,65468,4.56s,45.46us,0.00ns,45.77us,1.16us,45.12us,90.58us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,720057,80794,4.56s,36.75us,0.00ns,37.08us,1.31us,35.50us,82.62us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,720057,2902,4.56s,1.03ms,0.00ns,1.03ms,6.57us,1.03ms,1.22ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,720057,34204,4.62s,86.88us,0.00ns,87.08us,1.47us,86.71us,120.83us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,720057,65732,4.56s,45.33us,0.00ns,45.59us,16.80us,45.17us,3.81ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,720057,51764,4.57s,45.00us,0.00ns,57.90us,2.43ms,43.62us,553.04ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,720057,9790,4.56s,305.58us,0.00ns,306.40us,2.95us,305.42us,345.21us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,9792,4.56s,305.54us,0.00ns,306.35us,2.95us,305.42us,345.88us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,720057,116213,4.63s,25.58us,0.00ns,25.77us,810.00ns,25.33us,78.33us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,720057,118037,4.63s,25.25us,0.00ns,25.36us,757.00ns,25.08us,63.58us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,720057,760,4.56s,3.95ms,0.00ns,3.95ms,8.60us,3.94ms,3.99ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,720057,757,4.56s,3.95ms,0.00ns,3.97ms,39.92us,3.94ms,4.11ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,720057,760,4.56s,3.95ms,0.00ns,3.95ms,8.56us,3.94ms,4.00ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,720057,3635,4.56s,823.17us,0.00ns,825.39us,4.83us,822.96us,868.75us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,720057,3639,4.56s,822.29us,0.00ns,824.47us,4.81us,822.04us,874.33us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,720057,3740,4.51s,633.83us,0.00ns,802.14us,9.08ms,616.38us,555.60ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,720057,2903,4.56s,1.03ms,0.00ns,1.03ms,5.58us,1.03ms,1.09ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,720057,2308,4.56s,1.30ms,21.00ns,1.30ms,6.10us,1.30ms,1.36ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,720057,4040,4.56s,740.62us,0.00ns,742.59us,4.44us,740.46us,782.21us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,720057,4040,4.56s,739.88us,0.00ns,742.58us,7.53us,739.71us,848.62us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,720057,760,4.56s,3.95ms,21.00ns,3.95ms,9.80us,3.94ms,4.02ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,760,4.56s,3.95ms,63.00ns,3.95ms,10.13us,3.94ms,4.02ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,720057,5622,4.56s,524.88us,0.00ns,533.60us,14.09us,483.12us,585.00us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,720057,5626,4.56s,525.31us,20.00ns,533.25us,14.41us,479.62us,582.25us\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,,409,4.56s,7.33ms,0.00ns,7.34ms,26.31us,7.32ms,7.46ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,,162,4.56s,18.52ms,208.00ns,18.60ms,0.99ms,18.39ms,31.21ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,,79,4.93s,36.55ms,0.00ns,38.08ms,6.88ms,36.49ms,87.24ms\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1000,18796,4.56s,159.12us,0.00ns,159.56us,2.08us,158.88us,204.92us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1000,4557,4.56s,657.33us,0.00ns,658.33us,4.43us,647.50us,720.88us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1000,11232,4.56s,266.33us,0.00ns,267.06us,2.81us,262.92us,306.25us\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,806771,118,4.56s,25.43ms,125.00ns,25.43ms,16.11us,25.40ms,25.50ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,806771,24,4.68s,128.81ms,1.85us,128.81ms,30.68us,128.76ms,128.88ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,806771,59,4.56s,50.96ms,0.00ns,50.96ms,23.15us,50.91ms,51.02ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,4310,4.56s,695.00us,0.00ns,696.02us,4.51us,690.33us,741.00us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1824,4.56s,1.64ms,0.00ns,1.65ms,6.03us,1.64ms,1.69ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1824,4.56s,1.64ms,20.00ns,1.64ms,5.92us,1.64ms,1.68ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,44391,4.54s,52.71us,0.00ns,67.53us,2.65ms,50.04us,558.29ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,83154,4.56s,35.88us,0.00ns,36.03us,941.00ns,35.12us,67.04us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,13459,4.56s,222.12us,0.00ns,222.85us,9.52us,206.00us,271.12us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3378,4.56s,885.79us,0.00ns,888.20us,5.19us,885.17us,942.92us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,7830,4.56s,382.38us,0.00ns,383.12us,3.22us,377.67us,416.17us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,42503,4.62s,69.79us,0.00ns,70.00us,1.45us,69.04us,102.83us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,6910,4.56s,432.92us,0.00ns,434.17us,3.64us,432.04us,472.79us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,7257,4.56s,412.46us,0.00ns,413.38us,3.71us,409.42us,474.29us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,14109,4.56s,210.38us,0.00ns,212.59us,7.98us,198.67us,259.25us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,14984,4.56s,197.62us,0.00ns,200.18us,7.91us,186.21us,246.17us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,5914,4.56s,503.50us,0.00ns,507.27us,121.16us,502.58us,8.53ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1971,4.51s,1.50ms,0.00ns,1.52ms,356.85us,1.49ms,13.90ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2008,4.56s,1.49ms,20.00ns,1.49ms,5.64us,1.49ms,1.54ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,23810,4.56s,125.88us,0.00ns,125.95us,1.91us,123.71us,164.88us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,42335,4.56s,70.62us,0.00ns,70.81us,1.42us,69.96us,123.87us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,11140,4.56s,268.10us,21.00ns,269.25us,11.59us,247.92us,326.50us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3307,4.56s,905.83us,0.00ns,907.20us,4.89us,903.42us,945.33us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,7182,4.56s,416.71us,0.00ns,417.70us,3.61us,413.17us,455.12us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,13220,4.56s,225.38us,0.00ns,226.38us,5.71us,222.75us,307.04us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,8649,4.56s,345.92us,0.00ns,346.85us,3.23us,344.42us,391.04us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,11020,4.56s,271.08us,0.00ns,272.19us,4.21us,268.29us,336.21us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,7751,4.51s,302.25us,0.00ns,387.02us,6.33ms,287.21us,557.02ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,12114,4.56s,245.54us,0.00ns,247.62us,8.35us,233.75us,287.54us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,2824,4.56s,1.06ms,0.00ns,1.06ms,5.57us,1.06ms,1.13ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1367,4.56s,2.19ms,0.00ns,2.20ms,6.86us,2.19ms,2.24ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1404,4.56s,2.14ms,0.00ns,2.14ms,7.10us,2.13ms,2.21ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,4469,4.56s,668.71us,0.00ns,671.31us,5.99us,666.08us,712.12us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,3673,4.56s,814.62us,0.00ns,816.85us,4.79us,814.29us,853.96us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,3200,4.56s,936.21us,0.00ns,937.60us,5.71us,927.62us,0.99ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,2018,4.56s,1.49ms,0.00ns,1.49ms,7.85us,1.47ms,1.54ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,3194,4.56s,937.17us,0.00ns,939.36us,6.07us,934.00us,0.99ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,1325,4.56s,2.27ms,0.00ns,2.26ms,6.75us,2.24ms,2.32ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,1519,4.53s,1.53ms,0.00ns,1.98ms,14.27ms,1.52ms,557.34ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,2581,4.56s,1.16ms,0.00ns,1.16ms,7.09us,1.14ms,1.22ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,1853,4.56s,1.62ms,0.00ns,1.62ms,19.81us,1.57ms,1.89ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,2802,4.56s,1.07ms,0.00ns,1.07ms,5.48us,1.06ms,1.11ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,3018,4.56s,0.99ms,0.00ns,0.99ms,5.05us,0.99ms,1.04ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1628,4.56s,1.84ms,0.00ns,1.84ms,6.59us,1.83ms,1.88ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1629,4.56s,1.84ms,0.00ns,1.84ms,6.85us,1.83ms,1.91ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,58534,4.56s,50.83us,0.00ns,51.20us,1.21us,50.62us,81.67us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,95328,4.56s,31.33us,0.00ns,31.42us,814.00ns,31.08us,62.17us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,6230,4.56s,480.42us,0.00ns,481.49us,5.35us,476.79us,532.33us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,2858,4.66s,883.62us,0.00ns,1.09ms,10.39ms,882.04us,556.08ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,7797,4.54s,383.92us,0.00ns,384.73us,3.53us,379.54us,428.88us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613402,42822,4.62s,69.17us,0.00ns,69.44us,1.37us,68.62us,102.88us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,6592,4.56s,453.67us,1.00ns,455.07us,3.70us,452.96us,509.96us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,7085,4.56s,421.12us,0.00ns,423.42us,6.23us,418.12us,505.92us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,6274,4.56s,476.96us,0.00ns,478.19us,3.79us,475.54us,524.17us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,6566,4.56s,455.88us,0.00ns,456.91us,3.50us,454.46us,492.75us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,1711,4.56s,1.75ms,0.00ns,1.75ms,6.89us,1.74ms,1.82ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1263,4.56s,2.37ms,0.00ns,2.38ms,20.35us,2.37ms,2.75ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1263,4.56s,2.38ms,0.00ns,2.38ms,7.11us,2.37ms,2.43ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,31804,4.56s,94.00us,0.00ns,94.27us,1.64us,93.54us,156.17us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,41809,4.58s,55.88us,0.00ns,71.27us,2.72ms,54.17us,555.98ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,5799,4.56s,515.08us,0.00ns,517.32us,6.20us,511.33us,575.00us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3316,4.56s,903.00us,0.00ns,904.73us,4.84us,901.88us,0.96ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,7449,4.56s,401.83us,0.00ns,402.72us,3.39us,398.38us,439.04us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613402,22861,4.62s,130.21us,0.00ns,130.64us,2.33us,128.46us,168.04us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,6770,4.56s,441.33us,0.00ns,443.13us,6.37us,439.00us,568.00us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,7649,4.56s,394.54us,0.00ns,392.18us,4.86us,387.08us,435.62us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,5730,4.56s,522.29us,0.00ns,523.55us,3.99us,520.42us,570.79us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,6106,4.56s,491.46us,0.00ns,491.30us,5.25us,479.50us,528.46us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,5307,4.56s,564.04us,0.00ns,565.25us,4.09us,559.67us,601.58us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1325,4.55s,1.78ms,0.00ns,2.26ms,15.34ms,1.78ms,560.12ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1708,4.54s,1.76ms,0.00ns,1.76ms,6.31us,1.75ms,1.80ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,5741,4.56s,521.17us,0.00ns,522.53us,4.08us,519.12us,589.92us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,5021,4.56s,596.29us,0.00ns,597.50us,4.22us,594.00us,634.54us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,4650,4.54s,641.81us,20.00ns,645.20us,9.08us,640.67us,772.38us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,2489,4.56s,1.20ms,0.00ns,1.21ms,6.87us,1.20ms,1.27ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,4425,4.56s,676.29us,0.00ns,678.05us,5.19us,672.62us,719.00us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613402,2305,4.56s,1.30ms,0.00ns,1.30ms,7.27us,1.29ms,1.39ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,3203,4.56s,934.71us,0.00ns,936.84us,8.09us,923.17us,1.08ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,3999,4.56s,748.83us,0.00ns,750.29us,4.74us,743.17us,794.38us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,3094,4.56s,0.97ms,21.00ns,0.97ms,183.23us,916.67us,10.57ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,4235,4.99s,678.79us,0.00ns,708.37us,504.95us,671.21us,21.81ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,6853,4.56s,436.54us,0.00ns,437.71us,3.55us,436.33us,481.21us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,2061,4.56s,1.45ms,0.00ns,1.46ms,5.92us,1.45ms,1.50ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,2062,4.56s,1.45ms,0.00ns,1.46ms,5.95us,1.45ms,1.50ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,78628,4.56s,38.00us,0.00ns,38.10us,911.00ns,37.75us,68.12us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,101228,4.57s,29.50us,0.00ns,29.58us,801.00ns,29.29us,63.29us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,19663,4.56s,146.83us,0.00ns,152.52us,8.31us,144.50us,203.29us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3325,4.56s,900.12us,0.00ns,902.26us,4.87us,899.25us,942.83us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,7798,4.56s,383.96us,0.00ns,384.69us,3.16us,380.25us,419.42us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613427,36910,4.62s,80.46us,0.00ns,80.69us,1.48us,80.12us,113.75us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,29607,4.59s,79.42us,0.00ns,101.28us,3.21ms,78.67us,552.84ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,46991,4.56s,63.62us,0.00ns,63.79us,1.29us,62.46us,103.79us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,21352,4.56s,140.04us,0.00ns,140.45us,2.19us,137.42us,177.79us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,22968,4.56s,130.25us,0.00ns,130.57us,2.10us,127.08us,165.04us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,4383,4.56s,681.46us,0.00ns,684.43us,8.70us,680.29us,806.96us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1839,4.56s,1.63ms,0.00ns,1.63ms,5.84us,1.62ms,1.67ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1841,4.56s,1.63ms,0.00ns,1.63ms,6.06us,1.62ms,1.67ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,40089,4.56s,74.50us,0.00ns,74.78us,1.41us,73.88us,108.83us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,58171,4.56s,51.38us,0.00ns,51.52us,1.15us,50.83us,86.88us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,13374,4.56s,222.83us,0.00ns,224.27us,7.73us,212.38us,280.17us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3315,4.56s,900.71us,0.00ns,905.19us,115.18us,899.38us,7.51ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,7404,4.54s,398.00us,0.00ns,405.15us,203.69us,394.17us,12.65ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613427,20532,4.56s,145.08us,0.00ns,145.54us,1.95us,144.12us,194.42us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,18691,4.56s,159.88us,0.00ns,160.46us,2.24us,159.29us,204.88us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,23196,4.56s,128.92us,0.00ns,129.28us,1.89us,128.17us,166.46us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,12901,4.56s,233.62us,0.00ns,232.50us,4.52us,224.67us,270.08us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,15062,4.56s,199.71us,0.00ns,199.13us,4.72us,192.75us,242.04us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,12793,4.56s,233.88us,0.00ns,234.45us,2.58us,232.08us,270.62us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1944,4.56s,1.54ms,0.00ns,1.54ms,5.78us,1.54ms,1.58ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1956,4.56s,1.53ms,0.00ns,1.53ms,5.80us,1.53ms,1.57ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,13967,4.56s,214.29us,0.00ns,214.76us,2.30us,211.88us,247.29us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,10550,4.52s,221.62us,0.00ns,284.30us,5.41ms,218.79us,556.17ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,5719,4.56s,523.08us,0.00ns,524.56us,4.34us,520.67us,572.08us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3017,4.56s,0.99ms,0.00ns,0.99ms,5.32us,0.99ms,1.05ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,6138,4.56s,487.52us,21.00ns,488.75us,3.91us,484.33us,527.83us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613427,5998,4.56s,498.79us,0.00ns,499.60us,4.18us,491.42us,533.04us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,8913,4.56s,335.58us,0.00ns,336.56us,3.57us,334.58us,412.50us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,11115,4.56s,269.04us,0.00ns,269.87us,2.89us,267.54us,306.96us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,4916,4.56s,609.25us,0.00ns,610.22us,4.88us,601.71us,678.08us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,5725,4.56s,523.00us,0.00ns,523.99us,3.92us,516.71us,562.17us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8432,4.56s,354.88us,0.00ns,355.76us,3.08us,354.75us,390.12us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2125,4.56s,1.40ms,0.00ns,1.41ms,234.03us,1.40ms,12.18ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2099,4.51s,1.40ms,0.00ns,1.43ms,434.45us,1.40ms,16.15ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,161049,4.63s,18.54us,0.00ns,18.58us,594.00ns,18.42us,51.75us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,161279,4.63s,18.50us,0.00ns,18.55us,623.00ns,18.38us,49.54us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,10095,4.56s,295.54us,0.00ns,297.14us,12.00us,270.83us,349.92us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3407,4.56s,878.21us,0.00ns,880.51us,5.33us,875.12us,926.67us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8159,4.56s,366.88us,0.00ns,367.68us,3.53us,360.00us,399.17us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,79485,4.69s,37.04us,0.00ns,37.15us,949.00ns,36.92us,81.17us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,100849,4.63s,29.62us,0.00ns,29.70us,877.00ns,28.50us,63.33us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,101187,4.63s,29.54us,0.00ns,29.60us,817.00ns,28.46us,72.96us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,86524,4.56s,34.54us,0.00ns,34.62us,894.00ns,34.38us,64.79us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,67454,4.59s,34.50us,0.00ns,44.42us,2.10ms,33.50us,546.03ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,11913,4.56s,254.38us,0.00ns,251.79us,11.51us,232.88us,295.12us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,11899,4.56s,254.46us,0.00ns,252.08us,11.69us,232.75us,296.08us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,5499,4.56s,543.92us,0.00ns,545.50us,4.16us,543.58us,586.62us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1955,4.56s,1.53ms,0.00ns,1.54ms,6.99us,1.53ms,1.58ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1954,4.56s,1.53ms,0.00ns,1.54ms,6.69us,1.53ms,1.59ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,118920,4.63s,25.12us,0.00ns,25.18us,758.00ns,24.92us,55.42us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,118692,4.63s,25.17us,0.00ns,25.22us,765.00ns,24.96us,56.54us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,19028,4.56s,155.12us,0.00ns,157.62us,8.40us,144.96us,202.79us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3407,4.56s,878.21us,0.00ns,880.50us,5.51us,875.17us,923.79us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8127,4.56s,366.88us,0.00ns,369.13us,122.24us,363.04us,11.38ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,58564,4.66s,49.88us,0.00ns,50.59us,44.64us,49.58us,7.17ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,9285,4.56s,322.12us,0.00ns,323.07us,3.05us,321.54us,358.38us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,9265,4.56s,322.50us,0.00ns,323.75us,5.40us,320.71us,413.54us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,72649,4.56s,41.17us,0.00ns,41.24us,0.96us,40.96us,79.96us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,72281,4.56s,41.33us,0.00ns,41.45us,0.98us,41.12us,74.38us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,22979,4.56s,129.04us,0.00ns,130.51us,4.54us,123.92us,174.21us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,23036,4.56s,128.75us,0.00ns,130.18us,4.46us,124.04us,175.88us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8468,4.56s,353.29us,0.00ns,354.24us,3.20us,353.12us,395.46us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2134,4.56s,1.40ms,0.00ns,1.41ms,5.88us,1.40ms,1.44ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2134,4.56s,1.40ms,0.00ns,1.41ms,5.70us,1.40ms,1.44ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,125720,4.60s,18.50us,0.00ns,23.81us,1.56ms,17.88us,552.86ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,161298,4.63s,18.50us,0.00ns,18.55us,624.00ns,18.38us,50.00us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,20181,4.56s,145.00us,0.00ns,148.61us,10.32us,134.21us,193.88us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3407,4.56s,878.38us,0.00ns,880.67us,5.57us,875.38us,928.54us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8160,4.56s,366.83us,0.00ns,367.63us,3.50us,363.54us,403.71us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,79556,4.69s,37.04us,0.00ns,37.14us,0.95us,36.92us,67.33us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,101998,4.63s,29.29us,0.00ns,29.36us,798.00ns,28.83us,83.88us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,102463,4.63s,29.17us,0.00ns,29.23us,855.00ns,28.62us,59.83us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,86956,4.56s,34.38us,0.00ns,34.45us,905.00ns,34.21us,64.96us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,87062,4.56s,34.33us,0.00ns,34.41us,909.00ns,34.17us,65.21us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,20457,4.81s,129.50us,0.00ns,158.39us,3.88ms,122.79us,555.27ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,22908,4.54s,129.62us,0.00ns,130.91us,4.87us,123.04us,170.12us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,2781,4.56s,1.08ms,0.00ns,1.08ms,5.32us,1.07ms,1.12ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1560,4.56s,1.92ms,0.00ns,1.92ms,6.60us,1.91ms,1.96ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1562,4.56s,1.92ms,0.00ns,1.92ms,20.82us,1.91ms,2.12ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,176425,4.63s,16.92us,0.00ns,16.95us,600.00ns,16.79us,59.38us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,176500,4.63s,16.92us,0.00ns,16.95us,584.00ns,16.79us,61.88us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,7015,4.56s,426.25us,0.00ns,427.63us,12.76us,402.79us,488.38us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3401,4.56s,881.17us,0.00ns,882.19us,5.17us,878.38us,918.88us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8163,4.56s,366.83us,0.00ns,367.50us,3.13us,360.00us,408.38us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,71270,4.69s,41.25us,0.00ns,41.49us,34.38us,40.00us,9.20ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,6707,4.95s,427.67us,0.00ns,447.25us,410.04us,404.08us,28.80ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,6984,4.56s,426.88us,0.00ns,429.54us,12.44us,403.00us,498.21us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,86972,4.56s,34.38us,0.00ns,34.44us,874.00ns,34.21us,85.92us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,86991,4.56s,34.33us,0.00ns,34.43us,881.00ns,34.21us,69.33us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,7209,4.56s,417.54us,0.00ns,416.12us,8.42us,393.54us,458.58us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,7188,4.56s,418.04us,0.00ns,417.34us,8.74us,394.67us,463.46us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,691.87ms,1.00ns,0.00ns,17.00ns,22.00ns,1.00ns,9.29us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,753.33ms,42.00ns,0.00ns,49.00ns,23.00ns,1.00ns,9.33us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,751.46ms,42.00ns,0.00ns,49.00ns,28.00ns,1.00ns,16.08us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,691.64ms,1.00ns,0.00ns,19.00ns,29.00ns,1.00ns,14.08us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,695.46ms,1.00ns,0.00ns,18.00ns,20.00ns,1.00ns,1.79us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,690.73ms,1.00ns,0.00ns,16.00ns,23.00ns,1.00ns,9.25us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,692.63ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,7.04us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,693.14ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,9.62us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,3.03s,292.00ns,0.00ns,299.00ns,61.00ns,166.00ns,24.96us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,692.47ms,1.00ns,0.00ns,20.00ns,22.00ns,1.00ns,6.83us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,690.81ms,1.00ns,0.00ns,21.00ns,24.00ns,1.00ns,9.00us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,693.60ms,1.00ns,0.00ns,18.00ns,27.00ns,1.00ns,10.04us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,694.33ms,1.00ns,0.00ns,17.00ns,34.00ns,1.00ns,16.71us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,752.79ms,42.00ns,0.00ns,39.00ns,23.00ns,1.00ns,16.29us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,753.23ms,42.00ns,0.00ns,39.00ns,18.00ns,1.00ns,7.12us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,692.65ms,1.00ns,0.00ns,17.00ns,22.00ns,1.00ns,8.00us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,753.26ms,42.00ns,0.00ns,54.00ns,31.00ns,1.00ns,14.17us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,750.35ms,42.00ns,0.00ns,53.00ns,33.00ns,1.00ns,13.29us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,692.16ms,1.00ns,0.00ns,20.00ns,26.00ns,1.00ns,10.25us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,691.12ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,6.58us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,690.80ms,1.00ns,0.00ns,16.00ns,22.00ns,1.00ns,8.33us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,694.39ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,6.96us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,692.85ms,1.00ns,0.00ns,19.00ns,31.00ns,1.00ns,21.08us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,3.61s,292.00ns,0.00ns,300.00ns,6.47us,166.00ns,6.46ms\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,704.71ms,1.00ns,0.00ns,21.00ns,28.00ns,1.00ns,18.83us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,691.75ms,1.00ns,0.00ns,21.00ns,23.00ns,1.00ns,7.38us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,694.53ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,4.83us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,694.26ms,1.00ns,0.00ns,17.00ns,22.00ns,1.00ns,9.33us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,756.37ms,42.00ns,0.00ns,34.00ns,19.00ns,1.00ns,6.92us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,755.59ms,42.00ns,0.00ns,34.00ns,23.00ns,1.00ns,7.46us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,693.43ms,1.00ns,0.00ns,18.00ns,24.00ns,1.00ns,12.54us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,750.80ms,42.00ns,0.00ns,61.00ns,26.00ns,1.00ns,9.58us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,751.32ms,42.00ns,0.00ns,60.00ns,34.00ns,1.00ns,18.08us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,692.93ms,1.00ns,0.00ns,20.00ns,23.00ns,1.00ns,9.12us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,693.02ms,1.00ns,0.00ns,18.00ns,23.00ns,1.00ns,6.83us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,692.70ms,1.00ns,0.00ns,16.00ns,21.00ns,1.00ns,6.67us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,692.31ms,1.00ns,0.00ns,19.00ns,30.00ns,1.00ns,21.29us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,691.44ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,7.00us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,3.04s,292.00ns,0.00ns,302.00ns,76.00ns,167.00ns,24.71us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,690.67ms,1.00ns,0.00ns,20.00ns,24.00ns,1.00ns,9.71us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,692.16ms,1.00ns,0.00ns,21.00ns,25.00ns,1.00ns,12.21us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,695.63ms,1.00ns,0.00ns,18.00ns,32.00ns,1.00ns,22.75us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,693.87ms,1.00ns,0.00ns,17.00ns,26.00ns,1.00ns,9.96us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,690.97ms,1.00ns,0.00ns,21.00ns,25.00ns,1.00ns,9.79us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,691.06ms,41.00ns,0.00ns,22.00ns,25.00ns,1.00ns,12.17us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,692.59ms,41.00ns,0.00ns,25.00ns,22.00ns,1.00ns,6.96us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,691.58ms,83.00ns,0.00ns,71.00ns,39.00ns,1.00ns,23.58us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,812.53ms,83.00ns,0.00ns,72.00ns,31.00ns,1.00ns,14.42us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,691.74ms,1.00ns,0.00ns,20.00ns,21.00ns,1.00ns,6.92us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,694.69ms,1.00ns,0.00ns,18.00ns,37.00ns,1.00ns,20.79us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,693.81ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,10.04us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,691.79ms,1.00ns,0.00ns,20.00ns,21.00ns,1.00ns,6.67us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,693.85ms,1.00ns,0.00ns,19.00ns,26.00ns,1.00ns,14.25us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,3.04s,292.00ns,0.00ns,298.00ns,78.00ns,166.00ns,24.83us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,691.09ms,1.00ns,0.00ns,21.00ns,26.00ns,1.00ns,9.92us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,690.66ms,41.00ns,0.00ns,31.00ns,20.00ns,1.00ns,7.00us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,694.30ms,1.00ns,0.00ns,18.00ns,23.00ns,1.00ns,6.75us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,694.54ms,1.00ns,0.00ns,17.00ns,20.00ns,1.00ns,1.96us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,691.65ms,1.00ns,0.00ns,21.00ns,25.00ns,1.00ns,10.12us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,691.32ms,1.00ns,0.00ns,21.00ns,20.00ns,1.00ns,1.88us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,2183,4.56s,1.37ms,0.00ns,1.37ms,7.12us,1.36ms,1.42ms\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,3298,4.56s,907.08us,0.00ns,909.66us,5.29us,906.92us,0.95ms\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,3298,4.56s,907.08us,0.00ns,909.69us,5.31us,906.92us,943.75us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,122587,4.60s,18.88us,0.00ns,24.42us,1.63ms,18.25us,569.86ms\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,158540,4.63s,18.83us,0.00ns,18.87us,604.00ns,18.71us,56.83us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,12647,4.56s,236.25us,0.00ns,237.16us,3.53us,230.33us,275.92us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3412,4.56s,877.71us,0.00ns,879.22us,5.17us,875.17us,924.00us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613402,78691,4.69s,37.42us,0.00ns,37.49us,867.00ns,37.29us,62.92us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,98996,4.63s,30.21us,0.00ns,30.26us,793.00ns,29.75us,59.79us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,99622,4.63s,30.00us,0.00ns,30.06us,810.00ns,29.54us,60.88us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613402,36221,4.56s,82.54us,0.00ns,82.77us,1.56us,81.88us,116.92us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,37398,4.56s,79.96us,0.00ns,80.17us,1.50us,79.54us,111.50us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,14175,4.56s,210.96us,0.00ns,211.60us,2.73us,209.46us,247.04us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,14235,4.56s,210.04us,0.00ns,210.71us,100.73us,205.42us,12.16ms\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,42,1000000,1.29s,41.00ns,0.00ns,24.00ns,31.00ns,1.00ns,21.46us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,750.01ms,42.00ns,0.00ns,40.00ns,10.00ns,1.00ns,1.46us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,746.19ms,42.00ns,0.00ns,39.00ns,34.00ns,1.00ns,15.54us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,689.84ms,41.00ns,0.00ns,28.00ns,27.00ns,1.00ns,11.62us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,694.49ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,9.83us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,42,1000000,695.06ms,1.00ns,0.00ns,16.00ns,23.00ns,1.00ns,9.29us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,757.00ms,1.00ns,0.00ns,21.00ns,23.00ns,1.00ns,7.08us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,3.04s,292.00ns,0.00ns,304.00ns,65.00ns,166.00ns,24.38us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,690.54ms,41.00ns,0.00ns,28.00ns,27.00ns,1.00ns,9.21us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,691.92ms,1.00ns,0.00ns,20.00ns,31.00ns,1.00ns,16.46us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,693.86ms,1.00ns,0.00ns,18.00ns,25.00ns,1.00ns,9.46us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,689.95ms,1.00ns,0.00ns,17.00ns,29.00ns,1.00ns,14.17us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,42,1000000,936.06ms,84.00ns,0.00ns,100.00ns,44.00ns,1.00ns,16.58us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,42,1000000,874.55ms,84.00ns,0.00ns,100.00ns,90.00ns,1.00ns,29.83us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,5908,4.56s,506.33us,0.00ns,507.78us,3.93us,506.00us,552.42us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1993,4.56s,1.50ms,0.00ns,1.51ms,6.27us,1.50ms,1.56ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1993,4.56s,1.50ms,0.00ns,1.51ms,6.00us,1.50ms,1.55ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,152260,4.63s,19.62us,0.00ns,19.65us,607.00ns,19.50us,51.54us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,152461,4.63s,19.58us,0.00ns,19.62us,637.00ns,19.46us,52.21us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,35716,4.56s,81.12us,0.00ns,83.95us,4.29us,80.21us,124.04us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3408,4.56s,878.21us,0.00ns,880.39us,5.44us,875.21us,927.08us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,6328,4.53s,367.12us,0.00ns,474.06us,6.93ms,360.58us,551.02ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613427,76941,4.69s,38.29us,0.00ns,38.40us,930.00ns,38.17us,79.42us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,40753,4.56s,74.71us,0.00ns,73.57us,3.10us,67.79us,111.62us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,41407,4.56s,72.17us,0.00ns,72.40us,1.42us,71.62us,109.71us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613427,83451,4.56s,35.83us,0.00ns,35.90us,899.00ns,35.67us,66.75us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,83538,4.56s,35.75us,0.00ns,35.86us,0.96us,35.62us,66.83us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,38621,4.56s,77.62us,0.00ns,77.63us,2.71us,72.42us,111.38us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,38685,4.56s,77.29us,0.00ns,77.50us,2.10us,75.00us,111.12us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,31,1000000,691.16ms,1.00ns,0.00ns,17.00ns,30.00ns,1.00ns,21.21us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,752.17ms,42.00ns,0.00ns,49.00ns,25.00ns,1.00ns,9.92us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,754.32ms,42.00ns,0.00ns,49.00ns,33.00ns,1.00ns,15.79us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,691.64ms,1.00ns,0.00ns,20.00ns,21.00ns,1.00ns,4.75us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,693.25ms,1.00ns,0.00ns,18.00ns,25.00ns,1.00ns,10.04us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,31,1000000,694.73ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,1.71us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,693.42ms,1.00ns,0.00ns,19.00ns,26.00ns,1.00ns,16.79us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,692.61ms,1.00ns,0.00ns,19.00ns,27.00ns,1.00ns,14.12us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,3.03s,292.00ns,0.00ns,298.00ns,77.00ns,166.00ns,25.79us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,691.55ms,1.00ns,0.00ns,20.00ns,27.00ns,1.00ns,17.08us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,691.63ms,1.00ns,0.00ns,20.00ns,26.00ns,1.00ns,9.33us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,692.96ms,1.00ns,0.00ns,18.00ns,25.00ns,1.00ns,14.25us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,693.99ms,1.00ns,0.00ns,17.00ns,22.00ns,1.00ns,9.12us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,31,1000000,816.07ms,42.00ns,0.00ns,54.00ns,30.00ns,1.00ns,11.92us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,31,1000000,750.88ms,42.00ns,0.00ns,54.00ns,32.00ns,1.00ns,16.33us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,7931,4.51s,370.83us,0.00ns,378.22us,181.82us,370.71us,10.99ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2120,4.56s,1.41ms,0.00ns,1.42ms,5.83us,1.41ms,1.46ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2120,4.56s,1.41ms,0.00ns,1.42ms,5.93us,1.41ms,1.46ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,157817,4.63s,18.92us,0.00ns,18.96us,622.00ns,18.79us,49.25us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,158481,4.63s,18.83us,0.00ns,18.88us,596.00ns,18.71us,48.21us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,17452,4.56s,169.75us,0.00ns,171.85us,7.72us,158.04us,217.25us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3412,4.56s,878.12us,0.00ns,879.25us,5.22us,875.08us,940.33us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8159,4.56s,366.92us,0.00ns,367.66us,3.36us,363.79us,424.42us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,78754,4.69s,37.46us,0.00ns,37.53us,889.00ns,37.33us,74.00us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,73175,4.56s,40.83us,0.00ns,40.95us,1.01us,40.38us,74.04us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,58271,4.59s,39.96us,0.00ns,51.43us,2.28ms,39.12us,550.49ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,85308,4.56s,35.04us,0.00ns,35.12us,808.00ns,34.88us,68.83us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,85369,4.56s,35.00us,0.00ns,35.09us,885.00ns,34.88us,97.12us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,20172,4.56s,146.75us,0.00ns,148.67us,5.43us,139.29us,191.92us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,20168,4.56s,146.79us,0.00ns,148.70us,5.39us,139.79us,190.00us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8066,4.56s,370.83us,0.00ns,371.90us,3.35us,370.71us,415.58us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2120,4.56s,1.41ms,0.00ns,1.42ms,5.86us,1.41ms,1.45ms\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2120,4.56s,1.41ms,1.00ns,1.42ms,6.01us,1.41ms,1.47ms\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,159239,4.63s,18.75us,0.00ns,18.79us,578.00ns,18.62us,44.33us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,159854,4.63s,18.67us,0.00ns,18.71us,604.00ns,18.54us,49.46us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,16708,4.56s,179.71us,0.00ns,179.52us,10.05us,161.62us,232.67us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3407,4.56s,878.67us,0.00ns,880.58us,4.80us,875.42us,918.42us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8161,4.56s,366.79us,0.00ns,367.55us,3.28us,363.42us,401.42us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,79095,4.69s,37.29us,0.00ns,37.39us,936.00ns,37.17us,80.33us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,35629,4.56s,84.96us,0.00ns,84.15us,2.21us,81.38us,120.75us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,36409,4.56s,82.17us,0.00ns,82.35us,1.47us,81.58us,118.42us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,86570,4.56s,34.54us,0.00ns,34.60us,867.00ns,34.38us,65.08us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,86669,4.56s,34.50us,0.00ns,34.56us,861.00ns,34.33us,65.25us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,18924,4.56s,158.00us,0.00ns,158.49us,7.17us,146.50us,196.42us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,18700,4.56s,159.79us,0.00ns,160.38us,7.42us,147.25us,201.75us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,5910,4.56s,506.17us,0.00ns,507.59us,3.95us,505.67us,549.67us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,3264,4.56s,917.38us,0.00ns,919.30us,4.80us,915.75us,0.96ms\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3263,4.56s,917.54us,0.00ns,919.60us,5.03us,915.75us,0.96ms\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,147076,4.63s,20.29us,0.00ns,20.35us,631.00ns,20.17us,50.96us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,147899,4.63s,20.21us,0.00ns,20.23us,692.00ns,20.04us,52.00us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,26267,4.56s,113.75us,0.00ns,114.17us,1.89us,112.12us,159.17us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3410,4.56s,878.06us,20.00ns,879.86us,5.02us,875.08us,916.29us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,75811,4.69s,38.92us,0.00ns,39.00us,0.95us,38.75us,84.04us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,31414,4.56s,95.21us,0.00ns,95.45us,1.63us,94.58us,129.17us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,33422,4.56s,89.46us,0.00ns,89.71us,1.57us,89.00us,123.79us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,64812,4.56s,46.12us,0.00ns,46.23us,1.05us,45.75us,80.38us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,64965,4.56s,46.00us,0.00ns,46.13us,1.02us,45.75us,76.79us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,35642,4.56s,83.88us,0.00ns,84.12us,1.49us,83.33us,121.92us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,35622,4.56s,83.92us,0.00ns,84.17us,1.47us,83.29us,121.50us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,7617,4.56s,392.88us,0.00ns,393.85us,3.15us,392.71us,426.75us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,3244,4.56s,922.92us,0.00ns,924.88us,5.05us,919.83us,0.96ms\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3244,4.56s,922.83us,0.00ns,924.81us,5.21us,919.83us,0.98ms\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,157880,4.63s,18.92us,0.00ns,18.95us,666.00ns,18.79us,49.62us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,171212,4.63s,17.42us,0.00ns,17.47us,608.00ns,17.29us,49.83us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,42554,4.56s,70.25us,0.00ns,70.45us,1.45us,69.12us,108.38us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3408,4.56s,878.00us,0.00ns,880.25us,5.57us,875.62us,924.50us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,78108,4.68s,37.71us,0.00ns,37.79us,0.97us,37.54us,92.62us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,38862,4.56s,76.96us,0.00ns,77.15us,1.50us,76.42us,109.29us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,37007,4.56s,80.79us,0.00ns,81.02us,1.52us,80.21us,109.33us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,82327,4.56s,36.29us,0.00ns,36.39us,939.00ns,36.17us,67.12us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,82340,4.56s,36.29us,0.00ns,36.38us,942.00ns,36.12us,66.12us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,58787,4.56s,50.83us,0.00ns,50.98us,1.24us,50.00us,85.67us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,58057,4.56s,51.46us,0.00ns,51.62us,1.29us,50.58us,86.96us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8231,4.56s,363.42us,0.00ns,364.47us,3.58us,363.29us,418.46us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,3254,4.56s,919.58us,0.00ns,921.96us,5.59us,917.96us,0.96ms\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3255,4.56s,919.50us,0.00ns,921.88us,21.05us,892.92us,1.20ms\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,141910,4.63s,21.04us,0.00ns,21.09us,682.00ns,20.88us,50.67us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,171630,4.63s,17.38us,0.00ns,17.43us,598.00ns,17.29us,47.00us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,43214,4.56s,69.12us,0.00ns,69.37us,1.40us,68.67us,98.92us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3411,4.56s,877.54us,0.00ns,879.66us,5.45us,874.71us,933.88us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,77999,4.69s,37.79us,0.00ns,37.89us,0.96us,37.67us,67.04us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,61648,4.56s,48.42us,0.00ns,48.61us,1.32us,47.67us,83.08us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,66384,4.56s,45.04us,0.00ns,45.14us,1.11us,44.50us,83.33us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,83945,4.56s,35.58us,0.00ns,35.69us,932.00ns,35.46us,66.00us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,84002,4.56s,35.58us,0.00ns,35.66us,936.00ns,35.42us,71.67us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,51378,4.56s,58.17us,0.00ns,58.34us,1.26us,57.46us,96.62us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,54351,4.56s,54.88us,0.00ns,55.15us,1.25us,54.42us,91.12us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,691.30ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,7.17us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,752.71ms,42.00ns,0.00ns,40.00ns,18.00ns,1.00ns,9.38us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,754.19ms,42.00ns,0.00ns,39.00ns,32.00ns,1.00ns,16.83us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,690.42ms,41.00ns,0.00ns,23.00ns,24.00ns,1.00ns,9.58us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,694.01ms,1.00ns,0.00ns,18.00ns,29.00ns,1.00ns,17.25us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,690.16ms,41.00ns,0.00ns,22.00ns,24.00ns,1.00ns,9.83us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,693.11ms,1.00ns,0.00ns,19.00ns,29.00ns,1.00ns,19.79us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,691.68ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,9.33us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,2.97s,292.00ns,0.00ns,307.00ns,75.00ns,208.00ns,25.12us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,690.65ms,41.00ns,0.00ns,26.00ns,22.00ns,1.00ns,6.88us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,690.95ms,41.00ns,0.00ns,28.00ns,32.00ns,1.00ns,21.04us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,693.66ms,1.00ns,0.00ns,19.00ns,31.00ns,1.00ns,15.96us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,692.42ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,9.17us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,0.99s,166.00ns,0.00ns,147.00ns,55.00ns,41.00ns,24.04us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,813.99ms,83.00ns,0.00ns,76.00ns,44.00ns,1.00ns,23.29us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,691.59ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,9.38us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,752.72ms,42.00ns,0.00ns,44.00ns,44.00ns,1.00ns,27.83us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,751.85ms,42.00ns,0.00ns,43.00ns,24.00ns,1.00ns,16.71us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,692.64ms,1.00ns,0.00ns,21.00ns,26.00ns,1.00ns,14.25us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,690.86ms,1.00ns,0.00ns,20.00ns,23.00ns,1.00ns,9.33us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,692.05ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,7.12us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,693.23ms,1.00ns,0.00ns,19.00ns,25.00ns,1.00ns,13.92us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,693.79ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,6.96us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,3.03s,333.00ns,0.00ns,315.00ns,80.00ns,208.00ns,23.96us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,691.19ms,1.00ns,0.00ns,21.00ns,24.00ns,1.00ns,12.25us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,691.64ms,41.00ns,0.00ns,26.00ns,26.00ns,1.00ns,16.38us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,694.93ms,1.00ns,0.00ns,18.00ns,24.00ns,1.00ns,10.04us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,694.11ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,7.08us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,814.77ms,83.00ns,0.00ns,66.00ns,46.00ns,1.00ns,21.79us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,755.10ms,42.00ns,0.00ns,34.00ns,26.00ns,1.00ns,16.04us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,2188,4.56s,1.37ms,21.00ns,1.37ms,7.61us,1.36ms,1.43ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,3298,4.56s,907.08us,0.00ns,909.73us,5.68us,906.96us,0.97ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,3299,4.56s,907.08us,0.00ns,909.46us,4.92us,906.92us,0.96ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,157831,4.63s,18.92us,0.00ns,18.96us,610.00ns,18.79us,49.71us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,158478,4.63s,18.83us,0.00ns,18.88us,621.00ns,18.71us,52.17us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,14991,4.56s,198.79us,0.00ns,200.07us,3.38us,196.50us,237.42us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3412,4.56s,877.92us,0.00ns,879.45us,5.89us,875.17us,934.62us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613402,78710,4.69s,37.42us,0.00ns,37.52us,946.00ns,37.29us,68.00us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,112652,4.63s,26.50us,0.00ns,26.58us,797.00ns,25.67us,60.21us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,113569,4.63s,26.29us,0.00ns,26.37us,776.00ns,25.38us,56.58us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613402,43317,4.56s,69.04us,0.00ns,69.21us,1.41us,68.50us,99.50us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,41762,4.56s,71.54us,0.00ns,71.79us,1.50us,70.96us,108.25us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,18028,4.56s,165.92us,0.00ns,166.36us,2.29us,164.96us,201.04us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,17060,4.56s,175.21us,0.00ns,175.81us,2.66us,165.58us,208.62us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,1787,4.56s,1.68ms,0.00ns,1.68ms,7.54us,1.67ms,1.72ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1300,4.56s,2.31ms,21.00ns,2.31ms,8.23us,2.30ms,2.36ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1300,4.56s,2.31ms,0.00ns,2.31ms,8.51us,2.30ms,2.37ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,162029,4.63s,18.42us,0.00ns,18.46us,618.00ns,18.29us,49.04us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,157902,4.63s,18.92us,0.00ns,18.95us,625.00ns,18.79us,49.79us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,9933,4.56s,300.04us,0.00ns,302.00us,4.86us,295.54us,337.08us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3414,4.56s,877.50us,0.00ns,878.68us,5.46us,875.12us,941.54us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,8164,4.56s,366.67us,0.00ns,367.41us,3.23us,362.67us,408.08us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613402,80110,4.68s,36.50us,0.00ns,36.89us,1.02us,36.33us,70.71us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,112864,4.63s,26.46us,0.00ns,26.53us,776.00ns,25.46us,60.21us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,113199,4.63s,26.38us,0.00ns,26.45us,814.00ns,25.58us,57.29us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613402,51773,4.56s,58.04us,0.00ns,57.89us,1.26us,56.62us,94.62us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,52576,4.56s,56.83us,0.00ns,57.01us,1.20us,56.42us,93.83us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,10405,4.56s,287.17us,0.00ns,288.29us,3.05us,286.21us,324.12us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,10705,4.56s,279.17us,0.00ns,280.20us,3.08us,277.42us,324.04us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,42,1000000,755.08ms,41.00ns,0.00ns,24.00ns,24.00ns,1.00ns,9.58us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,691.14ms,42.00ns,0.00ns,35.00ns,28.00ns,1.00ns,16.38us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,753.29ms,42.00ns,0.00ns,34.00ns,22.00ns,1.00ns,9.46us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,755.30ms,42.00ns,0.00ns,35.00ns,23.00ns,1.00ns,16.33us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,692.79ms,1.00ns,0.00ns,19.00ns,30.00ns,1.00ns,16.79us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,42,1000000,692.05ms,41.00ns,0.00ns,31.00ns,34.00ns,1.00ns,16.62us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,691.53ms,1.00ns,0.00ns,20.00ns,27.00ns,1.00ns,16.21us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,3.04s,292.00ns,0.00ns,301.00ns,71.00ns,167.00ns,24.96us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,752.08ms,42.00ns,0.00ns,38.00ns,26.00ns,1.00ns,16.21us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,754.25ms,42.00ns,0.00ns,32.00ns,33.00ns,1.00ns,23.12us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,691.98ms,1.00ns,0.00ns,19.00ns,26.00ns,1.00ns,9.54us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,693.24ms,1.00ns,0.00ns,19.00ns,27.00ns,1.00ns,9.58us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,42,1000000,1.24s,250.00ns,0.00ns,255.00ns,73.00ns,166.00ns,24.92us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,42,1000000,0.99s,125.00ns,0.00ns,132.00ns,58.00ns,41.00ns,24.25us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,42,1000000,751.65ms,42.00ns,0.00ns,43.00ns,29.00ns,1.00ns,16.71us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,813.67ms,42.00ns,0.00ns,62.00ns,31.00ns,1.00ns,16.71us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,753.67ms,42.00ns,0.00ns,61.00ns,38.00ns,1.00ns,16.50us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,690.68ms,41.00ns,0.00ns,27.00ns,34.00ns,1.00ns,22.79us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,691.95ms,1.00ns,0.00ns,20.00ns,34.00ns,1.00ns,14.92us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,42,1000000,691.56ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,6.92us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,630.44ms,1.00ns,0.00ns,20.00ns,25.00ns,1.00ns,10.00us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,42,1000000,693.01ms,1.00ns,0.00ns,20.00ns,30.00ns,1.00ns,20.38us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,3.09s,333.00ns,0.00ns,341.00ns,80.00ns,208.00ns,28.25us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,690.04ms,41.00ns,0.00ns,30.00ns,25.00ns,1.00ns,9.75us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,690.65ms,41.00ns,0.00ns,30.00ns,21.00ns,1.00ns,6.75us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,693.16ms,1.00ns,0.00ns,19.00ns,29.00ns,1.00ns,19.83us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,692.80ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,6.75us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,42,1000000,937.06ms,125.00ns,0.00ns,115.00ns,40.00ns,1.00ns,14.75us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,42,1000000,753.21ms,42.00ns,0.00ns,57.00ns,32.00ns,1.00ns,16.67us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,4887,4.56s,612.08us,0.00ns,613.85us,4.74us,610.83us,675.79us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,3278,4.56s,913.00us,0.00ns,915.37us,5.42us,911.21us,0.98ms\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,3278,4.56s,913.00us,0.00ns,915.38us,6.24us,911.29us,1.07ms\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,154337,4.63s,19.33us,0.00ns,19.39us,649.00ns,19.21us,56.62us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,150707,4.63s,19.83us,0.00ns,19.85us,654.00ns,19.67us,51.71us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,29753,4.56s,99.46us,0.00ns,100.78us,2.91us,97.25us,139.46us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3411,4.56s,878.00us,0.00ns,879.46us,5.81us,875.21us,931.08us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613427,77001,4.69s,38.50us,0.00ns,38.42us,1.05us,37.33us,97.96us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,21671,4.56s,138.00us,0.00ns,138.38us,2.11us,137.54us,172.50us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,21361,4.56s,140.00us,0.00ns,140.40us,2.17us,139.46us,181.04us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613427,77030,4.56s,38.79us,0.00ns,38.89us,925.00ns,38.62us,71.58us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,77118,4.56s,38.75us,0.00ns,38.85us,0.98us,38.54us,69.75us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,32677,4.56s,90.62us,0.00ns,91.76us,2.80us,89.38us,134.62us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,31899,4.56s,93.54us,0.00ns,94.00us,1.96us,92.50us,131.04us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,4364,4.56s,685.50us,0.00ns,687.45us,4.89us,685.00us,736.88us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1838,4.56s,1.63ms,0.00ns,1.63ms,7.13us,1.62ms,1.72ms\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1838,4.56s,1.63ms,0.00ns,1.63ms,7.00us,1.62ms,1.69ms\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,154294,4.63s,19.33us,0.00ns,19.39us,631.00ns,19.21us,49.46us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,154419,4.63s,19.33us,0.00ns,19.38us,657.00ns,19.21us,70.04us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,22005,4.56s,132.04us,0.00ns,136.29us,6.35us,130.88us,193.00us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3415,4.56s,875.58us,0.00ns,878.53us,5.86us,875.25us,935.29us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,8147,4.56s,366.79us,0.00ns,368.18us,5.44us,363.04us,441.00us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613427,79794,4.68s,36.96us,0.00ns,37.04us,918.00ns,36.83us,74.88us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,32901,4.56s,90.92us,0.00ns,91.14us,1.52us,90.46us,130.17us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,32142,4.56s,93.00us,0.00ns,93.29us,1.59us,92.46us,132.71us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613427,72872,4.56s,41.00us,0.00ns,41.12us,0.98us,40.83us,93.33us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,73081,4.56s,40.92us,0.00ns,41.00us,1.03us,40.71us,73.96us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,24195,4.56s,122.83us,0.00ns,123.95us,2.31us,122.46us,160.62us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,23734,4.56s,125.42us,0.00ns,126.35us,2.98us,122.21us,162.08us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,31,1000000,754.54ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,7.00us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,752.16ms,41.00ns,0.00ns,22.00ns,32.00ns,1.00ns,23.04us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,689.31ms,41.00ns,0.00ns,21.00ns,24.00ns,1.00ns,7.21us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,750.99ms,41.00ns,0.00ns,29.00ns,26.00ns,1.00ns,16.21us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,751.44ms,1.00ns,0.00ns,20.00ns,26.00ns,1.00ns,9.83us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,31,1000000,752.82ms,41.00ns,0.00ns,24.00ns,26.00ns,1.00ns,10.21us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,754.46ms,1.00ns,0.00ns,19.00ns,28.00ns,1.00ns,16.54us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,3.03s,292.00ns,0.00ns,310.00ns,71.00ns,208.00ns,29.46us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,750.31ms,42.00ns,0.00ns,34.00ns,24.00ns,1.00ns,16.62us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,753.07ms,41.00ns,0.00ns,30.00ns,27.00ns,1.00ns,9.46us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,754.72ms,1.00ns,0.00ns,18.00ns,33.00ns,1.00ns,22.96us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,754.31ms,1.00ns,0.00ns,18.00ns,29.00ns,1.00ns,16.58us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,31,1000000,1.24s,250.00ns,0.00ns,236.00ns,60.00ns,125.00ns,24.00us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,31,1000000,1.00s,125.00ns,0.00ns,120.00ns,42.00ns,1.00ns,23.83us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,31,1000000,750.73ms,41.00ns,0.00ns,22.00ns,26.00ns,1.00ns,14.04us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,751.80ms,42.00ns,0.00ns,44.00ns,35.00ns,1.00ns,21.04us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,751.04ms,42.00ns,0.00ns,42.00ns,22.00ns,1.00ns,11.67us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,753.31ms,1.00ns,0.00ns,21.00ns,23.00ns,1.00ns,9.04us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,752.95ms,1.00ns,0.00ns,20.00ns,29.00ns,1.00ns,16.75us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,31,1000000,756.04ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,9.38us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,755.82ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,9.58us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,753.39ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,6.88us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,3.15s,333.00ns,0.00ns,329.00ns,77.00ns,208.00ns,25.17us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,751.17ms,41.00ns,0.00ns,23.00ns,27.00ns,1.00ns,14.17us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,750.52ms,41.00ns,0.00ns,27.00ns,21.00ns,1.00ns,7.25us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,691.03ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,4.88us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,755.83ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,7.00us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,31,1000000,874.03ms,83.00ns,0.00ns,83.00ns,31.00ns,1.00ns,17.21us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,31,1000000,752.05ms,42.00ns,0.00ns,44.00ns,22.00ns,1.00ns,9.96us\n"
  },
  {
    "path": "benchmarks/record/aarch64/2023-08-27.csv",
    "content": "name,model,rebar_version,engine,engine_version,err,haystack_len,iters,total,median,mad,mean,stddev,min,max\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,6318,4.56s,472.85us,20.00ns,474.81us,4.49us,472.38us,514.04us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,594933,158870,4.63s,18.79us,0.00ns,18.83us,623.00ns,18.71us,57.33us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,594933,122961,4.80s,23.79us,0.00ns,23.86us,764.00ns,23.71us,55.21us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,594933,223278,4.69s,13.38us,0.00ns,13.38us,474.00ns,13.21us,44.67us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,97169,4.75s,30.29us,0.00ns,30.35us,846.00ns,30.17us,82.88us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,7814,4.56s,383.12us,0.00ns,383.90us,3.12us,382.50us,418.21us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,8397,4.56s,354.96us,0.00ns,357.26us,5.31us,353.75us,429.71us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,6247,4.56s,478.96us,0.00ns,480.21us,3.75us,478.04us,513.50us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,7766,4.56s,384.88us,0.00ns,386.26us,3.75us,382.71us,419.96us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,594933,5746,4.56s,520.29us,0.00ns,521.58us,3.85us,519.21us,557.46us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,8394,4.56s,356.71us,0.00ns,357.37us,2.77us,356.17us,391.29us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,5896,4.56s,507.42us,0.00ns,508.81us,3.91us,506.71us,549.92us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,5890,4.56s,507.83us,0.00ns,509.30us,3.80us,507.00us,555.58us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,7629,4.56s,391.83us,0.00ns,393.22us,3.73us,389.58us,431.38us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,5828,4.56s,513.38us,0.00ns,514.73us,3.94us,512.17us,550.33us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,5332,4.56s,561.04us,0.00ns,562.61us,4.58us,560.62us,668.50us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,3016,4.56s,0.99ms,0.00ns,0.99ms,5.44us,0.99ms,1.03ms\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,4450,4.56s,672.54us,0.00ns,674.12us,4.34us,669.46us,708.46us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,594933,3937,4.56s,759.71us,0.00ns,761.61us,4.53us,758.92us,796.46us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,5517,4.56s,542.83us,0.00ns,543.77us,3.49us,542.17us,588.75us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,3199,4.56s,936.46us,0.00ns,937.89us,5.10us,930.38us,0.98ms\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,2927,4.56s,1.02ms,0.00ns,1.02ms,5.49us,1.02ms,1.07ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,3794,4.56s,788.67us,0.00ns,790.83us,5.24us,788.46us,912.00us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,2110,4.56s,1.42ms,0.00ns,1.42ms,7.33us,1.41ms,1.48ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,3165,4.56s,946.50us,0.00ns,948.08us,5.19us,939.58us,0.99ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,594933,2996,4.56s,1.00ms,0.00ns,1.00ms,5.33us,1.00ms,1.04ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,3960,4.56s,755.58us,0.00ns,757.69us,4.68us,755.29us,807.42us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,2445,4.56s,1.22ms,0.00ns,1.23ms,5.89us,1.22ms,1.27ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,2226,4.56s,1.35ms,0.00ns,1.35ms,6.06us,1.34ms,1.39ms\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,1.29s,292.00ns,0.00ns,297.00ns,118.00ns,208.00ns,31.88us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,664,1000000,695.24ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,9.33us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,664,1000000,3.03s,292.00ns,0.00ns,287.00ns,67.00ns,166.00ns,23.54us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,692.18ms,1.00ns,0.00ns,19.00ns,30.00ns,1.00ns,22.04us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,2.97s,292.00ns,0.00ns,293.00ns,77.00ns,166.00ns,25.08us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,1.29s,250.00ns,0.00ns,270.00ns,81.00ns,166.00ns,32.00us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.24s,250.00ns,0.00ns,243.00ns,70.00ns,125.00ns,25.58us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,1.05s,167.00ns,0.00ns,173.00ns,51.00ns,83.00ns,18.29us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.24s,250.00ns,0.00ns,249.00ns,65.00ns,125.00ns,25.92us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,3.56s,583.00ns,0.00ns,592.00ns,109.00ns,458.00ns,25.42us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,1.17s,250.00ns,0.00ns,233.00ns,61.00ns,125.00ns,22.83us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.11s,208.00ns,0.00ns,207.00ns,63.00ns,83.00ns,24.79us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.11s,208.00ns,0.00ns,209.00ns,55.00ns,83.00ns,19.38us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.23s,292.00ns,0.00ns,283.00ns,70.00ns,166.00ns,21.58us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,1.17s,209.00ns,0.00ns,222.00ns,70.00ns,125.00ns,24.08us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,1.72s,459.00ns,0.00ns,477.00ns,98.00ns,333.00ns,26.67us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,1.23s,291.00ns,0.00ns,272.00ns,75.00ns,166.00ns,24.83us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.29s,292.00ns,0.00ns,302.00ns,86.00ns,208.00ns,26.67us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,4.23s,875.00ns,0.00ns,897.00ns,129.00ns,791.00ns,25.71us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,1.65s,458.00ns,0.00ns,450.00ns,103.00ns,333.00ns,31.25us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,1.35s,333.00ns,0.00ns,324.00ns,86.00ns,208.00ns,31.92us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,1.42s,333.00ns,0.00ns,334.00ns,75.00ns,250.00ns,25.17us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,2.38s,792.00ns,0.00ns,813.00ns,127.00ns,666.00ns,26.12us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,1.53s,417.00ns,0.00ns,416.00ns,91.00ns,291.00ns,26.00us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.41s,333.00ns,0.00ns,339.00ns,92.00ns,250.00ns,25.29us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,4.89s,1.21us,0.00ns,1.23us,147.00ns,1.12us,26.04us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,2.14s,750.00ns,0.00ns,764.00ns,104.00ns,625.00ns,30.29us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,1.77s,500.00ns,0.00ns,506.00ns,105.00ns,416.00ns,31.12us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.65s,459.00ns,0.00ns,470.00ns,94.00ns,375.00ns,25.54us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,748.45ms,42.00ns,0.00ns,50.00ns,38.00ns,1.00ns,22.04us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,69,1000000,691.64ms,1.00ns,0.00ns,16.00ns,23.00ns,1.00ns,9.88us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,69,1000000,2.97s,250.00ns,0.00ns,264.00ns,83.00ns,166.00ns,26.21us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,69,1000000,693.60ms,1.00ns,0.00ns,17.00ns,20.00ns,1.00ns,4.79us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,69,1000000,2.98s,250.00ns,0.00ns,263.00ns,65.00ns,166.00ns,24.79us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,748.62ms,42.00ns,0.00ns,43.00ns,22.00ns,1.00ns,11.04us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,752.09ms,42.00ns,0.00ns,34.00ns,29.00ns,1.00ns,15.92us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,751.35ms,41.00ns,0.00ns,31.00ns,25.00ns,1.00ns,10.04us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,754.04ms,41.00ns,0.00ns,28.00ns,28.00ns,1.00ns,13.96us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,3.03s,333.00ns,0.00ns,327.00ns,72.00ns,208.00ns,23.88us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,812.48ms,83.00ns,0.00ns,73.00ns,37.00ns,1.00ns,16.67us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,749.35ms,42.00ns,0.00ns,42.00ns,26.00ns,1.00ns,14.08us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,748.32ms,42.00ns,0.00ns,43.00ns,43.00ns,1.00ns,23.58us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,752.40ms,41.00ns,0.00ns,28.00ns,29.00ns,1.00ns,16.58us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,748.74ms,42.00ns,0.00ns,44.00ns,24.00ns,1.00ns,13.71us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,238425,4.69s,12.50us,0.00ns,12.53us,491.00ns,12.38us,42.83us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,594933,158908,4.63s,18.79us,0.00ns,18.83us,573.00ns,18.71us,49.50us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,594933,122986,4.81s,23.79us,0.00ns,23.85us,730.00ns,23.67us,83.04us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,594933,223283,4.69s,13.38us,0.00ns,13.38us,474.00ns,13.21us,39.17us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,97098,4.75s,30.29us,0.00ns,30.36us,816.00ns,30.17us,63.37us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,451090,4.82s,6.58us,0.00ns,6.60us,348.00ns,6.46us,38.17us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,450905,4.82s,6.58us,0.00ns,6.60us,356.00ns,6.46us,37.67us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,126100,4.63s,23.50us,0.00ns,23.74us,1.25us,21.50us,55.83us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,15462,4.56s,193.75us,0.00ns,193.98us,17.57us,169.75us,285.71us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,594933,239118,4.99s,12.00us,0.00ns,12.01us,520.00ns,11.88us,67.58us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,451299,4.82s,6.58us,0.00ns,6.60us,346.00ns,6.46us,39.71us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,131649,4.63s,22.00us,0.00ns,22.74us,1.52us,21.00us,53.67us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,130694,4.63s,22.17us,0.00ns,22.90us,1.61us,20.96us,64.33us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,15566,4.56s,193.75us,0.00ns,192.68us,17.18us,169.71us,271.38us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,126510,4.63s,23.67us,0.00ns,23.66us,1.40us,21.21us,56.04us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,249459,4.69s,11.96us,0.00ns,11.98us,462.00ns,11.83us,41.71us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,58830,4.56s,50.67us,0.00ns,50.94us,1.30us,50.33us,83.17us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,13211,4.56s,226.42us,0.00ns,227.03us,2.52us,226.29us,260.33us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,594933,143730,4.86s,20.29us,0.00ns,20.32us,639.00ns,20.12us,45.58us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,249391,4.69s,11.96us,0.00ns,11.98us,465.00ns,11.83us,41.88us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,58161,4.56s,51.17us,0.00ns,51.53us,1.46us,50.33us,85.21us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,62437,4.56s,47.83us,0.00ns,48.00us,1.33us,47.71us,86.83us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,172961,4.63s,17.25us,0.00ns,17.29us,622.00ns,17.17us,60.04us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,43174,4.56s,69.08us,0.00ns,69.44us,1.97us,68.54us,116.88us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,10308,4.56s,290.17us,0.00ns,291.00us,3.01us,290.00us,336.92us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,594933,120588,4.81s,24.29us,0.00ns,24.35us,725.00ns,24.17us,57.46us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,173013,4.63s,17.25us,0.00ns,17.29us,587.00ns,17.17us,50.38us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,44736,4.56s,66.58us,0.00ns,67.01us,1.64us,65.29us,106.50us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,47907,4.56s,62.25us,0.00ns,62.57us,1.68us,59.79us,117.67us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,690.16ms,41.00ns,0.00ns,22.00ns,28.00ns,1.00ns,16.75us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,664,1000000,691.70ms,1.00ns,0.00ns,19.00ns,33.00ns,1.00ns,20.88us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,664,1000000,3.04s,292.00ns,0.00ns,286.00ns,64.00ns,166.00ns,23.50us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,691.22ms,1.00ns,0.00ns,19.00ns,30.00ns,1.00ns,21.33us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,2.97s,292.00ns,0.00ns,298.00ns,70.00ns,166.00ns,23.83us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,692.03ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,7.04us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,693.23ms,1.00ns,0.00ns,20.00ns,35.00ns,1.00ns,20.75us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,690.88ms,42.00ns,0.00ns,34.00ns,20.00ns,1.00ns,6.88us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.18s,209.00ns,0.00ns,226.00ns,63.00ns,125.00ns,25.38us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,3.03s,291.00ns,0.00ns,273.00ns,69.00ns,166.00ns,23.62us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,692.05ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,6.58us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,753.47ms,41.00ns,0.00ns,30.00ns,29.00ns,1.00ns,16.58us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,691.68ms,41.00ns,0.00ns,30.00ns,39.00ns,1.00ns,23.29us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.18s,209.00ns,0.00ns,225.00ns,61.00ns,125.00ns,19.00us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,754.33ms,42.00ns,0.00ns,32.00ns,22.00ns,1.00ns,9.38us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,691.32ms,1.00ns,0.00ns,20.00ns,23.00ns,1.00ns,9.38us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,815.48ms,83.00ns,0.00ns,65.00ns,43.00ns,1.00ns,21.42us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.24s,250.00ns,0.00ns,269.00ns,79.00ns,166.00ns,24.96us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,2.97s,292.00ns,0.00ns,287.00ns,70.00ns,166.00ns,24.21us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,693.39ms,1.00ns,0.00ns,20.00ns,24.00ns,1.00ns,9.29us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,812.81ms,83.00ns,0.00ns,65.00ns,51.00ns,1.00ns,27.25us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,815.54ms,83.00ns,0.00ns,64.00ns,36.00ns,1.00ns,16.50us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,690.86ms,1.00ns,0.00ns,20.00ns,28.00ns,1.00ns,15.29us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,875.19ms,83.00ns,0.00ns,87.00ns,33.00ns,1.00ns,17.54us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.42s,333.00ns,0.00ns,342.00ns,78.00ns,250.00ns,21.83us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,3.03s,292.00ns,0.00ns,287.00ns,68.00ns,166.00ns,31.25us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,690.77ms,1.00ns,0.00ns,20.00ns,25.00ns,1.00ns,11.96us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,812.42ms,83.00ns,0.00ns,85.00ns,43.00ns,1.00ns,23.38us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,875.16ms,83.00ns,0.00ns,87.00ns,42.00ns,1.00ns,21.00us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,692.17ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,167.00ns\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,69,1000000,692.86ms,1.00ns,0.00ns,16.00ns,24.00ns,1.00ns,7.92us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,69,1000000,2.98s,250.00ns,0.00ns,262.00ns,69.00ns,166.00ns,24.67us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,69,1000000,690.09ms,1.00ns,0.00ns,17.00ns,24.00ns,1.00ns,9.92us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,69,1000000,2.91s,250.00ns,0.00ns,264.00ns,55.00ns,166.00ns,24.96us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,693.75ms,1.00ns,0.00ns,16.00ns,24.00ns,1.00ns,9.33us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,693.24ms,1.00ns,0.00ns,16.00ns,21.00ns,1.00ns,6.79us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,692.97ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,7.17us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,754.61ms,41.00ns,0.00ns,28.00ns,29.00ns,1.00ns,15.38us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,2.92s,250.00ns,0.00ns,258.00ns,65.00ns,125.00ns,23.83us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,690.49ms,1.00ns,0.00ns,16.00ns,24.00ns,1.00ns,9.92us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,690.46ms,1.00ns,0.00ns,17.00ns,30.00ns,1.00ns,17.12us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,692.08ms,1.00ns,0.00ns,17.00ns,20.00ns,1.00ns,125.00ns\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,754.07ms,41.00ns,0.00ns,28.00ns,21.00ns,1.00ns,6.58us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,694.91ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,1.21us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,69,1000000,694.48ms,1.00ns,0.00ns,17.00ns,26.00ns,1.00ns,11.04us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,690.88ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,9.29us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,69,1000000,753.59ms,42.00ns,0.00ns,37.00ns,23.00ns,1.00ns,11.12us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,2.91s,250.00ns,0.00ns,261.00ns,58.00ns,125.00ns,20.00us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,69,1000000,695.71ms,1.00ns,0.00ns,16.00ns,23.00ns,1.00ns,7.38us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,69,1000000,694.00ms,1.00ns,0.00ns,17.00ns,28.00ns,1.00ns,16.71us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,69,1000000,690.97ms,1.00ns,0.00ns,17.00ns,31.00ns,1.00ns,17.17us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,69,1000000,695.23ms,1.00ns,0.00ns,17.00ns,21.00ns,1.00ns,6.42us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,690.81ms,1.00ns,0.00ns,17.00ns,20.00ns,1.00ns,4.58us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,69,1000000,751.26ms,42.00ns,0.00ns,44.00ns,29.00ns,1.00ns,16.29us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,2.97s,250.00ns,0.00ns,262.00ns,73.00ns,166.00ns,25.08us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,69,1000000,692.66ms,1.00ns,0.00ns,17.00ns,22.00ns,1.00ns,6.92us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,69,1000000,690.19ms,1.00ns,0.00ns,17.00ns,22.00ns,1.00ns,6.83us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,69,1000000,692.25ms,1.00ns,0.00ns,18.00ns,24.00ns,1.00ns,9.58us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,,1000000,692.75ms,1.00ns,0.00ns,16.00ns,33.00ns,1.00ns,21.12us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,,1000000,689.43ms,1.00ns,0.00ns,15.00ns,19.00ns,1.00ns,125.00ns\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,,1000000,2.91s,250.00ns,0.00ns,256.00ns,76.00ns,125.00ns,24.67us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,,1000000,690.02ms,1.00ns,0.00ns,15.00ns,30.00ns,1.00ns,16.25us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,,1000000,2.97s,250.00ns,0.00ns,260.00ns,66.00ns,125.00ns,24.92us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,,1000000,690.42ms,1.00ns,0.00ns,16.00ns,21.00ns,1.00ns,6.96us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,,1000000,693.19ms,1.00ns,0.00ns,16.00ns,23.00ns,1.00ns,9.33us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,,1000000,691.87ms,1.00ns,0.00ns,16.00ns,29.00ns,1.00ns,17.33us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,,1000000,694.18ms,1.00ns,0.00ns,15.00ns,22.00ns,1.00ns,9.25us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,,1000000,2.91s,250.00ns,0.00ns,254.00ns,66.00ns,125.00ns,22.12us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,,1000000,693.20ms,1.00ns,0.00ns,16.00ns,24.00ns,1.00ns,9.62us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,,1000000,693.77ms,1.00ns,0.00ns,15.00ns,19.00ns,1.00ns,167.00ns\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,,1000000,695.03ms,1.00ns,0.00ns,15.00ns,23.00ns,1.00ns,9.21us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,,1000000,693.06ms,1.00ns,0.00ns,15.00ns,25.00ns,1.00ns,15.00us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,,1000000,692.59ms,1.00ns,0.00ns,15.00ns,30.00ns,1.00ns,16.92us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,,1000000,690.78ms,1.00ns,0.00ns,16.00ns,24.00ns,1.00ns,9.79us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,,1000000,689.86ms,1.00ns,0.00ns,16.00ns,22.00ns,1.00ns,9.71us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,,1000000,690.74ms,1.00ns,0.00ns,15.00ns,25.00ns,1.00ns,14.00us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,,1000000,2.98s,250.00ns,0.00ns,266.00ns,80.00ns,125.00ns,24.42us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,,1000000,692.61ms,1.00ns,0.00ns,16.00ns,22.00ns,1.00ns,6.83us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,,1000000,691.96ms,1.00ns,0.00ns,15.00ns,25.00ns,1.00ns,12.08us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,,1000000,689.70ms,1.00ns,0.00ns,15.00ns,23.00ns,1.00ns,9.75us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,,1000000,690.47ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,4.75us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,,1000000,690.53ms,1.00ns,0.00ns,16.00ns,24.00ns,1.00ns,9.92us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,,1000000,693.11ms,1.00ns,0.00ns,15.00ns,23.00ns,1.00ns,10.08us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,,1000000,2.91s,250.00ns,0.00ns,260.00ns,70.00ns,125.00ns,24.50us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,,1000000,692.82ms,1.00ns,0.00ns,16.00ns,21.00ns,1.00ns,6.67us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,,1000000,691.60ms,1.00ns,0.00ns,15.00ns,33.00ns,1.00ns,23.58us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,,1000000,691.68ms,1.00ns,0.00ns,15.00ns,19.00ns,1.00ns,292.00ns\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,205314,4.69s,14.54us,0.00ns,14.56us,553.00ns,14.38us,50.33us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,594933,158873,4.63s,18.79us,0.00ns,18.83us,608.00ns,18.71us,56.12us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,594933,122891,4.81s,23.83us,0.00ns,23.86us,676.00ns,23.67us,66.67us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,594933,223270,4.69s,13.38us,0.00ns,13.38us,487.00ns,13.21us,45.04us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,97047,4.75s,30.29us,0.00ns,30.36us,842.00ns,30.17us,87.33us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,357640,4.75s,8.33us,0.00ns,8.34us,625.00ns,8.17us,45.04us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,355661,4.75s,8.38us,0.00ns,8.38us,404.00ns,8.21us,45.04us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,113424,4.63s,25.83us,0.00ns,26.40us,1.32us,25.00us,58.96us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,14647,4.56s,203.75us,0.00ns,204.77us,7.85us,182.92us,246.25us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,594933,204835,4.92s,14.04us,0.00ns,14.08us,534.00ns,13.92us,51.46us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,354748,4.75s,8.38us,0.00ns,8.40us,367.00ns,8.25us,46.62us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,111501,4.63s,26.79us,0.00ns,26.86us,851.00ns,26.04us,57.50us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,111588,4.63s,26.75us,0.00ns,26.83us,801.00ns,26.17us,57.71us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,108894,4.63s,27.46us,0.00ns,27.50us,781.00ns,26.71us,58.25us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,180867,4.63s,16.50us,0.00ns,16.54us,577.00ns,16.33us,47.25us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,50723,4.56s,59.08us,0.00ns,59.10us,1.91us,56.08us,89.04us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,11159,4.56s,267.96us,0.00ns,268.80us,3.03us,265.25us,306.75us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,594933,109874,4.75s,26.71us,0.00ns,26.77us,751.00ns,26.54us,57.38us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,178008,4.63s,16.79us,0.00ns,16.80us,570.00ns,16.62us,47.96us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,49498,4.56s,60.46us,0.00ns,60.56us,1.69us,58.08us,95.46us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,49728,4.56s,60.17us,0.00ns,60.28us,3.75us,53.62us,99.46us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,129441,4.63s,23.08us,0.00ns,23.13us,692.00ns,22.96us,53.75us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,37257,4.56s,80.29us,0.00ns,80.47us,1.62us,78.75us,119.75us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,10169,4.56s,294.17us,0.00ns,294.98us,2.98us,294.00us,335.92us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,594933,88787,4.75s,33.17us,0.00ns,33.23us,905.00ns,33.00us,67.88us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,127294,4.63s,23.46us,0.00ns,23.52us,699.00ns,23.33us,54.17us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,37745,4.56s,79.25us,0.00ns,79.43us,1.50us,77.79us,112.33us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,38233,4.56s,78.33us,0.00ns,78.42us,1.91us,72.33us,108.17us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,751.09ms,41.00ns,0.00ns,22.00ns,23.00ns,1.00ns,9.29us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,664,1000000,752.22ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,7.04us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,664,1000000,2.97s,292.00ns,0.00ns,282.00ns,79.00ns,166.00ns,22.38us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,753.42ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,6.79us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,3.04s,292.00ns,0.00ns,293.00ns,67.00ns,166.00ns,23.33us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,754.23ms,1.00ns,0.00ns,19.00ns,25.00ns,1.00ns,9.83us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,754.29ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,4.88us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,752.42ms,42.00ns,0.00ns,38.00ns,26.00ns,1.00ns,16.42us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.17s,250.00ns,0.00ns,245.00ns,64.00ns,125.00ns,25.62us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,2.97s,291.00ns,0.00ns,276.00ns,73.00ns,166.00ns,25.67us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,753.26ms,1.00ns,0.00ns,19.00ns,20.00ns,1.00ns,167.00ns\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,753.60ms,42.00ns,0.00ns,33.00ns,31.00ns,1.00ns,21.17us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,750.58ms,42.00ns,0.00ns,34.00ns,29.00ns,1.00ns,21.00us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.24s,250.00ns,0.00ns,243.00ns,71.00ns,125.00ns,25.33us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,751.96ms,42.00ns,0.00ns,33.00ns,21.00ns,1.00ns,9.29us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,754.04ms,1.00ns,0.00ns,21.00ns,23.00ns,1.00ns,9.67us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,811.40ms,83.00ns,0.00ns,69.00ns,40.00ns,1.00ns,16.29us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.29s,292.00ns,0.00ns,286.00ns,86.00ns,166.00ns,33.79us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,2.97s,292.00ns,0.00ns,287.00ns,63.00ns,166.00ns,16.25us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,752.64ms,1.00ns,0.00ns,21.00ns,22.00ns,1.00ns,7.08us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,875.30ms,83.00ns,0.00ns,72.00ns,38.00ns,1.00ns,23.46us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,813.76ms,83.00ns,0.00ns,70.00ns,41.00ns,1.00ns,17.17us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,753.29ms,41.00ns,0.00ns,24.00ns,29.00ns,1.00ns,16.88us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,873.24ms,84.00ns,0.00ns,95.00ns,41.00ns,1.00ns,17.04us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.48s,375.00ns,0.00ns,362.00ns,93.00ns,250.00ns,26.83us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,3.10s,333.00ns,0.00ns,313.00ns,73.00ns,208.00ns,30.33us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,753.01ms,41.00ns,0.00ns,26.00ns,33.00ns,1.00ns,22.96us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,934.72ms,84.00ns,0.00ns,97.00ns,36.00ns,1.00ns,16.96us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,934.53ms,84.00ns,0.00ns,99.00ns,41.00ns,1.00ns,17.17us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,753.44ms,1.00ns,0.00ns,17.00ns,25.00ns,1.00ns,14.25us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,69,1000000,753.34ms,1.00ns,0.00ns,16.00ns,35.00ns,1.00ns,22.58us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,69,1000000,2.97s,250.00ns,0.00ns,261.00ns,74.00ns,166.00ns,25.17us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,69,1000000,691.63ms,1.00ns,0.00ns,17.00ns,26.00ns,1.00ns,9.33us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,69,1000000,2.97s,250.00ns,0.00ns,269.00ns,68.00ns,166.00ns,23.67us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,689.33ms,1.00ns,0.00ns,16.00ns,25.00ns,1.00ns,14.04us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,754.00ms,1.00ns,0.00ns,16.00ns,23.00ns,1.00ns,9.83us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,754.55ms,1.00ns,0.00ns,18.00ns,30.00ns,1.00ns,20.96us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,753.18ms,41.00ns,0.00ns,28.00ns,31.00ns,1.00ns,16.54us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,2.98s,250.00ns,0.00ns,261.00ns,69.00ns,125.00ns,25.17us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,753.89ms,1.00ns,0.00ns,17.00ns,21.00ns,1.00ns,6.92us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,757.31ms,1.00ns,0.00ns,18.00ns,26.00ns,1.00ns,16.29us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,754.45ms,1.00ns,0.00ns,18.00ns,20.00ns,1.00ns,167.00ns\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,751.26ms,41.00ns,0.00ns,28.00ns,24.00ns,1.00ns,14.08us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,690.21ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,9.21us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,69,1000000,689.10ms,1.00ns,0.00ns,17.00ns,20.00ns,1.00ns,167.00ns\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,753.97ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,7.04us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,69,1000000,750.59ms,42.00ns,0.00ns,37.00ns,25.00ns,1.00ns,10.12us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,2.97s,291.00ns,0.00ns,274.00ns,69.00ns,166.00ns,29.58us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,69,1000000,754.91ms,1.00ns,0.00ns,18.00ns,33.00ns,1.00ns,21.12us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,69,1000000,753.59ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,9.08us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,69,1000000,752.44ms,1.00ns,0.00ns,18.00ns,25.00ns,1.00ns,12.38us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,69,1000000,752.55ms,1.00ns,0.00ns,17.00ns,26.00ns,1.00ns,9.79us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,690.48ms,1.00ns,0.00ns,19.00ns,30.00ns,1.00ns,14.33us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,69,1000000,750.11ms,42.00ns,0.00ns,45.00ns,33.00ns,1.00ns,23.42us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,3.03s,292.00ns,0.00ns,284.00ns,77.00ns,166.00ns,29.50us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,69,1000000,690.08ms,1.00ns,0.00ns,18.00ns,36.00ns,1.00ns,21.42us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,69,1000000,753.23ms,1.00ns,0.00ns,19.00ns,27.00ns,1.00ns,9.46us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,69,1000000,753.71ms,1.00ns,0.00ns,19.00ns,33.00ns,1.00ns,21.38us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,29410,4.56s,101.62us,0.00ns,101.96us,1.65us,101.38us,145.54us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,594933,158867,4.63s,18.79us,0.00ns,18.83us,622.00ns,18.71us,78.46us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,594933,122871,4.80s,23.83us,0.00ns,23.86us,720.00ns,23.67us,55.42us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,594933,222833,4.69s,13.38us,0.00ns,13.41us,547.00ns,13.21us,49.67us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,97008,4.74s,30.29us,0.00ns,30.35us,818.00ns,30.17us,65.42us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,32449,4.56s,92.17us,0.00ns,92.40us,1.72us,91.50us,126.96us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,35065,4.56s,85.21us,0.00ns,85.50us,1.56us,84.62us,122.46us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,32267,4.56s,92.17us,0.00ns,92.92us,2.04us,91.58us,129.17us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,12769,4.56s,233.58us,0.00ns,234.88us,3.91us,228.33us,270.79us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,594933,20238,4.62s,147.33us,0.00ns,147.70us,2.07us,146.54us,181.04us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,36747,4.56s,81.29us,0.00ns,81.59us,1.49us,81.00us,114.12us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,27014,4.56s,110.75us,0.00ns,111.00us,1.62us,110.29us,144.75us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,26916,4.56s,111.12us,0.00ns,111.41us,1.74us,110.50us,148.58us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,12639,4.56s,236.25us,0.00ns,237.30us,3.64us,230.42us,274.29us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,26612,4.56s,112.42us,0.00ns,112.68us,1.77us,111.58us,149.71us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,594933,15700,4.56s,186.00us,0.00ns,191.05us,7.64us,183.88us,234.58us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,594933,12805,4.56s,233.54us,0.00ns,234.24us,2.71us,233.04us,272.08us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,594933,9219,4.56s,324.50us,0.00ns,325.35us,3.07us,323.42us,362.58us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,594933,8503,4.56s,351.29us,0.00ns,352.21us,3.28us,350.25us,393.38us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,594933,15652,4.56s,191.08us,0.00ns,191.63us,2.40us,190.50us,241.17us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,594933,11852,4.56s,252.42us,0.00ns,253.07us,2.66us,251.75us,286.25us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,594933,12135,4.56s,247.04us,0.00ns,247.18us,2.85us,244.79us,279.54us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,594933,10310,4.56s,290.58us,0.00ns,290.94us,2.43us,289.75us,336.21us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,594933,8477,4.56s,352.83us,0.00ns,353.86us,3.27us,352.38us,389.29us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,594933,7278,4.56s,411.17us,0.00ns,412.15us,3.28us,410.58us,448.54us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,594933,6813,4.56s,438.88us,0.00ns,439.82us,5.15us,436.50us,723.46us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,594933,11102,4.56s,269.88us,0.00ns,270.17us,2.50us,267.75us,307.50us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,594933,7677,4.56s,389.88us,0.00ns,390.73us,3.59us,388.29us,459.54us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,594933,8138,4.56s,367.54us,0.00ns,368.61us,3.44us,366.42us,421.62us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,811.59ms,42.00ns,0.00ns,43.00ns,26.00ns,1.00ns,16.29us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,664,1000000,753.00ms,1.00ns,0.00ns,19.00ns,26.00ns,1.00ns,7.00us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,664,1000000,3.03s,292.00ns,0.00ns,282.00ns,73.00ns,166.00ns,23.96us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,753.49ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,8.17us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,2.97s,292.00ns,0.00ns,293.00ns,65.00ns,166.00ns,23.21us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,749.83ms,42.00ns,0.00ns,35.00ns,26.00ns,1.00ns,13.96us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,750.56ms,42.00ns,0.00ns,33.00ns,29.00ns,1.00ns,15.08us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,811.74ms,83.00ns,0.00ns,63.00ns,41.00ns,1.00ns,23.46us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.23s,292.00ns,0.00ns,292.00ns,72.00ns,166.00ns,23.96us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,3.09s,333.00ns,0.00ns,328.00ns,79.00ns,208.00ns,23.92us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,750.27ms,42.00ns,0.00ns,40.00ns,31.00ns,1.00ns,10.00us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,813.55ms,83.00ns,0.00ns,65.00ns,40.00ns,1.00ns,21.04us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,810.94ms,83.00ns,0.00ns,66.00ns,30.00ns,1.00ns,16.54us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.29s,333.00ns,0.00ns,339.00ns,74.00ns,166.00ns,21.42us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,812.12ms,42.00ns,0.00ns,62.00ns,31.00ns,1.00ns,9.38us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,664,1000000,869.47ms,83.00ns,0.00ns,87.00ns,35.00ns,1.00ns,17.58us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,930.95ms,125.00ns,0.00ns,105.00ns,48.00ns,1.00ns,21.50us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.35s,333.00ns,0.00ns,315.00ns,83.00ns,208.00ns,25.42us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,3.33s,416.00ns,0.00ns,402.00ns,113.00ns,291.00ns,31.79us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,664,1000000,932.09ms,83.00ns,0.00ns,91.00ns,43.00ns,1.00ns,17.29us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,664,1000000,1.00s,125.00ns,0.00ns,119.00ns,47.00ns,1.00ns,22.62us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,664,1000000,0.99s,125.00ns,0.00ns,118.00ns,44.00ns,1.00ns,23.17us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,664,1000000,1.05s,166.00ns,0.00ns,155.00ns,52.00ns,41.00ns,18.92us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,1.64s,167.00ns,0.00ns,160.00ns,54.00ns,41.00ns,23.58us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.48s,334.00ns,0.00ns,380.00ns,13.08us,250.00ns,11.23ms\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,3.38s,500.00ns,0.00ns,487.00ns,97.00ns,375.00ns,25.08us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,664,1000000,1.05s,167.00ns,0.00ns,158.00ns,45.00ns,41.00ns,17.25us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,664,1000000,1.11s,167.00ns,0.00ns,187.00ns,51.00ns,83.00ns,24.88us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.05s,167.00ns,0.00ns,161.00ns,56.00ns,41.00ns,29.00us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,69,1000000,755.60ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,7.04us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,69,1000000,753.84ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,1.08us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,69,1000000,2.98s,250.00ns,0.00ns,261.00ns,57.00ns,125.00ns,24.58us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,69,1000000,754.52ms,1.00ns,0.00ns,17.00ns,20.00ns,1.00ns,4.79us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,69,1000000,3.03s,250.00ns,0.00ns,262.00ns,61.00ns,125.00ns,18.46us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,693.02ms,1.00ns,0.00ns,17.00ns,29.00ns,1.00ns,16.46us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,692.95ms,1.00ns,0.00ns,17.00ns,28.00ns,1.00ns,16.50us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,69,1000000,691.55ms,1.00ns,0.00ns,19.00ns,38.00ns,1.00ns,21.08us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,69,1000000,689.66ms,41.00ns,0.00ns,28.00ns,25.00ns,1.00ns,9.50us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,3.03s,292.00ns,0.00ns,294.00ns,89.00ns,166.00ns,31.12us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,69,1000000,691.34ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,7.04us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,690.00ms,41.00ns,0.00ns,24.00ns,24.00ns,1.00ns,7.17us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,690.02ms,41.00ns,0.00ns,25.00ns,34.00ns,1.00ns,16.58us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,69,1000000,754.90ms,41.00ns,0.00ns,28.00ns,21.00ns,1.00ns,7.17us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,69,1000000,691.02ms,41.00ns,0.00ns,26.00ns,29.00ns,1.00ns,14.33us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2,2.5.0,,69,1000000,752.73ms,41.00ns,0.00ns,27.00ns,34.00ns,1.00ns,20.58us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,752.26ms,42.00ns,0.00ns,33.00ns,24.00ns,1.00ns,14.08us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/naive,2.5.0,,69,1000000,749.81ms,42.00ns,0.00ns,37.00ns,33.00ns,1.00ns,15.04us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,3.09s,333.00ns,0.00ns,317.00ns,84.00ns,208.00ns,31.79us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr2,2.5.0,,69,1000000,813.30ms,42.00ns,0.00ns,44.00ns,28.00ns,1.00ns,17.38us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr2,2.5.0,,69,1000000,748.63ms,42.00ns,0.00ns,40.00ns,33.00ns,1.00ns,23.00us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr2,2.5.0,,69,1000000,748.36ms,42.00ns,0.00ns,41.00ns,31.00ns,1.00ns,16.92us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3,2.5.0,,69,1000000,933.43ms,125.00ns,0.00ns,117.00ns,44.00ns,1.00ns,17.04us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,748.19ms,42.00ns,0.00ns,51.00ns,37.00ns,1.00ns,17.50us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/naive,2.5.0,,69,1000000,749.06ms,42.00ns,0.00ns,45.00ns,27.00ns,1.00ns,16.50us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,3.21s,375.00ns,0.00ns,373.00ns,90.00ns,250.00ns,30.92us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr3,2.5.0,,69,1000000,869.51ms,83.00ns,0.00ns,85.00ns,38.00ns,1.00ns,18.71us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr3,2.5.0,,69,1000000,810.05ms,83.00ns,0.00ns,65.00ns,38.00ns,1.00ns,16.54us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr3,2.5.0,,69,1000000,810.49ms,83.00ns,0.00ns,63.00ns,33.00ns,1.00ns,22.58us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,594933,2822,4.51s,1.06ms,0.00ns,1.06ms,251.82us,1.04ms,14.41ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,594933,154242,4.63s,18.79us,0.00ns,19.40us,65.26us,18.71us,15.10ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,594933,122835,4.81s,23.83us,0.00ns,23.87us,709.00ns,23.67us,55.17us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,594933,223242,4.69s,13.38us,0.00ns,13.39us,505.00ns,13.21us,61.79us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,97027,4.74s,30.29us,0.00ns,30.35us,823.00ns,30.12us,66.08us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,594933,4668,4.56s,641.08us,0.00ns,642.65us,4.13us,640.88us,684.08us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,594933,5150,4.56s,580.92us,0.00ns,582.50us,4.14us,580.71us,618.08us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,594933,3646,4.56s,820.50us,0.00ns,822.81us,5.42us,819.29us,886.75us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,594933,4299,4.56s,695.88us,0.00ns,697.90us,4.83us,695.25us,788.17us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,594933,3895,4.56s,767.75us,0.00ns,769.76us,4.58us,767.58us,818.79us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,594933,5379,4.56s,556.17us,0.00ns,557.70us,3.99us,555.92us,593.46us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,594933,2555,4.54s,911.75us,0.00ns,1.17ms,10.88ms,907.08us,550.30ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,594933,3273,4.56s,914.96us,0.00ns,916.55us,5.01us,912.33us,0.96ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,594933,4223,4.56s,708.83us,0.00ns,710.41us,4.57us,706.42us,755.08us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,594933,3112,4.56s,0.96ms,20.00ns,0.96ms,5.68us,0.96ms,1.02ms\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),libc/memchr/oneshot,unknown,,664,1000000,2.25s,750.00ns,0.00ns,774.00ns,150.00ns,666.00ns,30.08us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot,0.5.3,,664,1000000,755.92ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,9.71us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,664,1000000,2.97s,292.00ns,0.00ns,284.00ns,59.00ns,166.00ns,23.25us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,693.06ms,1.00ns,0.00ns,19.00ns,26.00ns,1.00ns,9.75us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,3.03s,292.00ns,0.00ns,294.00ns,62.00ns,166.00ns,23.08us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,2.08s,667.00ns,0.00ns,658.00ns,112.00ns,541.00ns,27.96us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.96s,584.00ns,0.00ns,597.00ns,104.00ns,416.00ns,25.92us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/fallback,2.5.0,,664,1000000,1.35s,333.00ns,0.00ns,319.00ns,90.00ns,208.00ns,25.46us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/naive,2.5.0,,664,1000000,1.29s,291.00ns,0.00ns,278.00ns,89.00ns,166.00ns,24.92us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,4.48s,1.04us,0.00ns,1.05us,137.00ns,916.00ns,25.79us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchr/memrchr,2.5.0,,664,1000000,1.90s,542.00ns,0.00ns,563.00ns,111.00ns,375.00ns,25.58us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.48s,417.00ns,0.00ns,420.00ns,93.00ns,333.00ns,26.21us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.60s,417.00ns,0.00ns,421.00ns,93.00ns,291.00ns,29.00us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.29s,291.00ns,0.00ns,278.00ns,69.00ns,166.00ns,24.75us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 45afe89f43),rust/memchrold/memrchr,2.5.0,,664,1000000,1.60s,417.00ns,0.00ns,414.00ns,78.00ns,291.00ns,25.38us\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,33335253,47,4.65s,50.94ms,0.00ns,65.33ms,89.62ms,50.66ms,672.19ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,33335253,32,4.62s,94.82ms,2.96us,94.83ms,26.37us,94.78ms,94.89ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,33335253,32,4.62s,94.83ms,375.00ns,94.84ms,23.76us,94.81ms,94.93ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,33335253,302,4.56s,9.95ms,166.00ns,9.95ms,32.83us,9.89ms,10.09ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,33335253,302,4.56s,9.93ms,250.00ns,9.95ms,50.74us,9.88ms,10.10ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/binary,2.5.0,,33335253,2906,4.56s,1.03ms,0.00ns,1.03ms,8.07us,1.03ms,1.08ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,33335253,255,4.56s,11.67ms,0.00ns,11.80ms,341.74us,11.45ms,12.80ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,33335253,63,4.62s,47.82ms,0.00ns,47.83ms,32.32us,47.73ms,47.93ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,33335253,151,4.56s,19.88ms,0.00ns,19.87ms,88.65us,19.66ms,20.04ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,33335253,222,4.56s,13.51ms,62.00ns,13.51ms,16.37us,13.47ms,13.57ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,33335253,210,4.57s,14.21ms,0.00ns,14.29ms,1.09ms,14.13ms,30.01ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,33335253,208,4.54s,14.22ms,917.00ns,14.46ms,2.53ms,14.13ms,48.44ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,33335253,150,4.56s,20.03ms,250.00ns,20.03ms,14.90us,19.99ms,20.08ms\nmemmem/byterank/binary,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,33335253,150,4.56s,20.03ms,41.00ns,20.03ms,20.40us,19.96ms,20.14ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2523,4.56s,1.19ms,0.00ns,1.19ms,5.72us,1.19ms,1.24ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,8.16us,3.91ms,3.97ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.93ms,8.20us,3.92ms,3.97ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,59309,4.56s,50.42us,0.00ns,50.53us,1.08us,50.25us,86.12us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,59311,4.56s,50.42us,0.00ns,50.53us,1.10us,50.25us,90.29us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2851,4.56s,1.05ms,0.00ns,1.05ms,13.41us,1.03ms,1.11ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1269,4.56s,2.36ms,0.00ns,2.36ms,6.93us,2.35ms,2.41ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,2368,4.56s,0.99ms,0.00ns,1.27ms,11.35ms,0.97ms,553.06ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,1648109,30075,4.62s,98.88us,0.00ns,99.14us,1.62us,98.71us,140.21us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,13671,4.56s,218.96us,0.00ns,219.40us,2.60us,217.42us,320.42us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,13816,4.56s,216.50us,0.00ns,217.09us,2.57us,215.54us,250.54us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,31405,4.56s,95.21us,0.00ns,95.47us,1.56us,95.08us,130.42us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,31348,4.56s,95.25us,0.00ns,95.65us,2.39us,95.04us,130.29us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3088,4.56s,0.97ms,0.00ns,0.97ms,5.45us,0.96ms,1.02ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3083,4.56s,0.97ms,0.00ns,0.97ms,5.78us,0.97ms,1.03ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2524,4.56s,1.19ms,0.00ns,1.19ms,5.67us,1.19ms,1.25ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.93ms,8.84us,3.92ms,3.98ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,763,4.56s,3.92ms,0.00ns,3.94ms,226.34us,3.91ms,9.78ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,57403,4.56s,51.38us,0.00ns,52.21us,104.22us,51.21us,24.82ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,58162,4.56s,51.42us,0.00ns,51.53us,1.05us,51.25us,82.62us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3060,4.56s,0.98ms,20.00ns,0.98ms,15.98us,0.96ms,1.14ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1269,4.56s,2.36ms,0.00ns,2.36ms,7.12us,2.35ms,2.41ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,3038,4.56s,0.99ms,0.00ns,0.99ms,5.34us,0.97ms,1.03ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,1648109,29664,4.62s,100.25us,0.00ns,100.52us,1.77us,100.08us,135.12us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,13748,4.56s,217.58us,0.00ns,218.17us,2.55us,216.83us,255.83us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,13698,4.56s,218.33us,0.00ns,218.97us,2.67us,217.71us,265.75us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,30368,4.56s,98.46us,0.00ns,98.73us,1.61us,98.29us,140.12us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,30395,4.56s,98.38us,0.00ns,98.65us,1.60us,98.21us,133.83us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,2561,4.55s,904.92us,0.00ns,1.17ms,10.99ms,898.29us,556.84ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3316,4.56s,903.54us,0.00ns,904.89us,5.03us,898.29us,0.97ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2527,4.56s,1.18ms,0.00ns,1.19ms,5.51us,1.18ms,1.24ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,8.46us,3.91ms,3.98ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,11.11us,3.91ms,4.09ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,59735,4.56s,49.50us,0.00ns,50.17us,1.26us,49.21us,82.62us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,58922,4.56s,50.75us,0.00ns,50.86us,1.10us,50.58us,82.71us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3135,4.56s,944.79us,0.00ns,0.96ms,24.11us,932.58us,1.06ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1269,4.56s,2.36ms,0.00ns,2.37ms,7.59us,2.35ms,2.42ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,3038,4.56s,0.99ms,0.00ns,0.99ms,5.17us,0.98ms,1.03ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,1648109,30160,4.62s,97.25us,0.00ns,98.90us,45.60us,97.00us,7.29ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,23716,4.54s,126.00us,0.00ns,126.45us,2.73us,125.04us,229.88us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,22887,4.56s,130.67us,0.00ns,131.03us,1.90us,129.88us,165.79us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,29578,4.56s,101.12us,0.00ns,101.38us,1.61us,100.92us,136.38us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,29552,4.56s,101.21us,0.00ns,101.46us,1.55us,101.04us,137.33us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3402,4.56s,882.02us,20.00ns,881.94us,8.40us,869.75us,924.50us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3397,4.56s,882.71us,0.00ns,883.12us,8.52us,869.83us,922.17us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2747,4.56s,1.09ms,0.00ns,1.09ms,7.28us,1.09ms,1.28ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,1244,4.56s,2.41ms,0.00ns,2.41ms,7.22us,2.40ms,2.46ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,1210,4.56s,2.48ms,0.00ns,2.48ms,7.30us,2.47ms,2.52ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,55771,4.56s,53.58us,0.00ns,53.74us,1.15us,53.46us,92.17us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,44344,4.58s,52.04us,0.00ns,67.60us,2.64ms,51.75us,554.94ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3171,4.56s,943.38us,0.00ns,946.08us,8.57us,930.62us,0.99ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1269,4.56s,2.36ms,0.00ns,2.36ms,7.53us,2.36ms,2.42ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,1648109,29507,4.62s,100.79us,0.00ns,101.07us,1.66us,100.67us,134.29us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,12368,4.56s,242.04us,0.00ns,242.51us,2.78us,240.46us,290.62us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,12491,4.56s,239.46us,0.00ns,240.12us,2.68us,238.83us,272.75us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,107764,4.63s,27.71us,0.00ns,27.79us,781.00ns,27.54us,58.54us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,107948,4.63s,27.67us,0.00ns,27.74us,776.00ns,27.54us,57.96us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3391,4.56s,883.08us,0.00ns,884.87us,5.99us,875.83us,933.12us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3393,4.56s,882.29us,0.00ns,884.35us,6.79us,876.12us,1.05ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2331,4.90s,1.19ms,0.00ns,1.43ms,11.44ms,1.19ms,553.36ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.53s,3.92ms,0.00ns,3.92ms,7.79us,3.91ms,3.97ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,8.10us,3.91ms,3.96ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,56917,4.56s,52.54us,0.00ns,52.66us,1.07us,52.38us,83.29us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,57560,4.56s,51.92us,0.00ns,52.07us,1.12us,51.79us,82.46us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2931,4.56s,1.02ms,0.00ns,1.02ms,9.16us,1.01ms,1.07ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1269,4.56s,2.36ms,0.00ns,2.37ms,7.20us,2.36ms,2.41ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,2996,4.56s,1.00ms,0.00ns,1.00ms,5.25us,0.99ms,1.06ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,1648109,29428,4.62s,101.12us,0.00ns,101.39us,1.67us,100.96us,144.38us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,14309,4.56s,209.12us,0.00ns,209.62us,2.38us,208.50us,248.54us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,14777,4.56s,202.42us,0.00ns,202.98us,2.58us,201.75us,285.75us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,2444,4.52s,948.33us,0.00ns,1.23ms,11.28ms,942.29us,558.21ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3165,4.56s,946.38us,0.00ns,947.90us,6.58us,940.21us,1.11ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2521,4.56s,1.19ms,0.00ns,1.19ms,5.88us,1.19ms,1.24ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,8.61us,3.91ms,3.97ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,766,4.56s,3.92ms,21.00ns,3.92ms,8.36us,3.91ms,3.96ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,28945,4.56s,104.12us,0.00ns,103.59us,2.06us,100.62us,137.88us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,36089,4.56s,82.83us,0.00ns,83.08us,1.49us,82.46us,118.08us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,3352,4.56s,876.50us,0.00ns,895.06us,28.76us,868.04us,1.05ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1233,4.56s,2.43ms,0.00ns,2.43ms,7.61us,2.43ms,2.48ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,2897,4.56s,1.03ms,0.00ns,1.04ms,5.34us,1.01ms,1.08ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,1648109,10663,4.56s,221.33us,0.00ns,280.20us,5.29ms,220.46us,546.59ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,5922,4.56s,505.25us,0.00ns,506.57us,3.73us,504.04us,538.83us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,6237,4.56s,480.00us,0.00ns,481.02us,3.80us,477.58us,516.42us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,3540,4.56s,845.96us,0.00ns,847.57us,5.72us,839.38us,886.75us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,3648,4.56s,821.12us,0.00ns,822.51us,6.04us,814.75us,0.96ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,6830,4.56s,437.96us,0.00ns,439.23us,3.90us,434.96us,486.92us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,748,4.56s,4.01ms,1.00ns,4.02ms,8.51us,4.01ms,4.06ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,751,4.56s,3.99ms,0.00ns,4.00ms,8.28us,3.99ms,4.05ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,5655,4.56s,529.00us,0.00ns,530.46us,4.31us,523.75us,571.83us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,6139,4.56s,488.00us,0.00ns,488.68us,4.05us,484.50us,522.88us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2271,4.56s,1.31ms,0.00ns,1.32ms,311.77us,1.31ms,16.13ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1127,5.07s,2.56ms,0.00ns,2.66ms,808.88us,2.55ms,17.27ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,2438,4.56s,1.23ms,0.00ns,1.23ms,8.65us,1.22ms,1.29ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,1648109,2888,4.56s,1.04ms,0.00ns,1.04ms,9.34us,1.01ms,1.10ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,4305,4.56s,695.17us,0.00ns,696.89us,4.79us,692.38us,743.00us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,5225,4.56s,574.12us,0.00ns,574.21us,6.58us,558.00us,615.92us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,2081,4.56s,1.44ms,0.00ns,1.44ms,7.22us,1.42ms,1.49ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,2346,4.56s,1.28ms,0.00ns,1.28ms,7.78us,1.26ms,1.45ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1648109,2128,4.56s,1.41ms,1.00ns,1.41ms,5.95us,1.41ms,1.45ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1648109,736,4.56s,4.07ms,41.00ns,4.08ms,8.36us,4.07ms,4.12ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,737,4.56s,4.07ms,0.00ns,4.07ms,9.03us,4.06ms,4.15ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1648109,14387,4.56s,164.54us,0.00ns,208.47us,4.59ms,159.62us,550.43ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1648109,25411,4.57s,117.54us,0.00ns,118.01us,1.90us,117.08us,170.50us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1648109,2872,4.56s,1.04ms,0.00ns,1.04ms,17.16us,1.03ms,1.15ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,1221,4.56s,2.45ms,0.00ns,2.46ms,8.83us,2.45ms,2.57ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1648109,2852,4.56s,1.05ms,0.00ns,1.05ms,5.85us,1.03ms,1.09ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,1648109,9567,4.56s,312.21us,0.00ns,312.97us,3.26us,310.08us,344.92us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1648109,3508,4.56s,853.08us,0.00ns,855.33us,5.37us,850.96us,898.54us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,3837,4.56s,780.92us,0.00ns,781.92us,5.78us,773.96us,824.92us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,2819,4.56s,1.06ms,0.00ns,1.06ms,6.30us,1.05ms,1.11ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,2970,4.56s,1.01ms,0.00ns,1.01ms,5.93us,1.00ms,1.06ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,151305,20499,4.56s,145.12us,0.00ns,146.30us,86.35us,144.83us,12.49ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,151305,13160,4.74s,218.00us,0.00ns,227.92us,212.59us,217.62us,14.88ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,151305,13727,4.56s,217.92us,0.00ns,218.50us,2.47us,217.62us,261.50us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,151305,548093,4.88s,5.42us,0.00ns,5.42us,298.00ns,5.17us,39.42us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,151305,540742,4.88s,5.50us,0.00ns,5.50us,352.00ns,5.21us,38.42us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,151305,201180,4.69s,14.71us,0.00ns,14.86us,812.00ns,14.12us,48.17us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,151305,13815,4.56s,216.50us,0.00ns,217.11us,2.73us,215.75us,251.46us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,151305,203578,4.93s,14.17us,0.00ns,14.20us,554.00ns,13.92us,44.46us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,151305,21984,4.56s,136.25us,0.00ns,136.42us,2.01us,134.96us,177.25us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,151305,22651,4.56s,132.04us,0.00ns,132.39us,1.91us,131.46us,173.29us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,151305,290897,4.75s,10.25us,0.00ns,10.26us,459.00ns,10.00us,41.21us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,222331,4.67s,10.29us,0.00ns,13.44us,1.20ms,9.75us,565.90ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,151305,258435,4.69s,11.58us,0.00ns,11.56us,531.00ns,11.17us,41.33us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,151305,260718,4.69s,11.46us,0.00ns,11.46us,462.00ns,11.12us,41.00us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,151305,20601,4.56s,145.17us,0.00ns,145.58us,2.06us,144.96us,182.12us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,151305,13349,4.56s,224.04us,0.00ns,224.69us,2.66us,223.75us,264.62us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,151305,13352,4.56s,224.04us,0.00ns,224.64us,2.53us,223.75us,259.46us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,151305,539424,4.88s,5.50us,0.00ns,5.51us,339.00ns,5.25us,37.08us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,151305,537577,4.88s,5.50us,0.00ns,5.53us,328.00ns,5.29us,34.88us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,151305,228746,4.69s,13.12us,0.00ns,13.06us,694.00ns,11.71us,44.12us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,151305,13818,4.56s,216.54us,0.00ns,217.07us,2.67us,215.79us,250.38us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,151305,152010,4.86s,14.54us,0.00ns,19.19us,1.43ms,14.25us,557.18ms\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,151305,22436,4.56s,133.71us,0.00ns,133.66us,1.98us,131.58us,177.00us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,151305,23454,4.56s,127.62us,0.00ns,127.86us,2.12us,126.00us,218.75us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,151305,281983,4.69s,10.58us,0.00ns,10.59us,473.00ns,10.33us,40.75us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,286030,4.69s,10.42us,0.00ns,10.44us,482.00ns,10.17us,43.75us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,151305,291594,4.69s,9.88us,0.00ns,10.24us,802.00ns,9.71us,41.96us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,151305,310430,4.69s,9.58us,0.00ns,9.61us,441.00ns,9.33us,43.50us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,500100,10477,4.56s,285.46us,0.00ns,286.30us,3.13us,285.33us,336.54us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,500100,2621,4.56s,1.14ms,0.00ns,1.14ms,6.01us,1.14ms,1.20ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,500100,2621,4.56s,1.14ms,0.00ns,1.14ms,5.90us,1.14ms,1.19ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,500100,173877,4.94s,15.42us,0.00ns,18.73us,1.33ms,14.88us,554.53ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,500100,199514,4.64s,14.96us,0.00ns,14.98us,556.00ns,14.83us,46.54us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,500100,10344,4.56s,286.71us,0.00ns,289.97us,6.98us,285.38us,342.29us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,500100,4179,4.56s,716.08us,0.00ns,717.84us,4.45us,713.54us,766.12us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,500100,10010,4.56s,299.12us,0.00ns,299.65us,2.71us,294.08us,336.50us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,500100,96066,4.75s,30.58us,0.00ns,30.65us,815.00ns,30.46us,60.21us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,500100,8378,4.56s,357.04us,0.00ns,358.06us,3.32us,356.92us,399.71us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,500100,8377,4.56s,357.00us,0.00ns,358.10us,3.73us,356.88us,431.29us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,500100,106656,4.63s,28.00us,0.00ns,28.08us,767.00ns,27.88us,67.62us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,500100,106390,4.56s,28.08us,0.00ns,28.15us,764.00ns,27.88us,59.00us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,500100,10396,4.52s,285.50us,0.00ns,288.52us,139.63us,285.33us,14.52ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,500100,10004,4.82s,285.50us,0.00ns,299.85us,290.60us,285.38us,18.05ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,500100,8728,4.56s,342.79us,0.00ns,343.69us,3.03us,342.50us,409.17us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,500100,8348,4.56s,358.42us,0.00ns,359.34us,3.42us,356.88us,409.88us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,500100,9094,4.56s,328.83us,0.00ns,329.87us,3.31us,328.17us,367.04us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,500100,2382,4.56s,1.26ms,0.00ns,1.26ms,5.47us,1.26ms,1.30ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,500100,12361,4.56s,240.79us,0.00ns,242.65us,5.97us,236.08us,289.21us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,500100,10222,4.56s,292.65us,20.00ns,293.45us,3.12us,292.33us,330.88us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,500100,11621,4.56s,256.92us,0.00ns,258.13us,3.95us,256.79us,313.79us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,500100,15663,4.56s,190.92us,0.00ns,191.48us,2.54us,190.79us,225.29us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,500100,1856,4.56s,1.66ms,0.00ns,1.62ms,117.88us,1.15ms,1.73ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,500100,760,4.56s,3.08ms,21.00ns,3.95ms,20.15ms,3.07ms,558.26ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,500100,6453,4.56s,463.46us,0.00ns,464.89us,3.90us,462.83us,506.96us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,500100,1174,4.56s,2.55ms,0.00ns,2.56ms,8.77us,2.55ms,2.60ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,500100,9432,4.56s,317.17us,0.00ns,318.02us,3.12us,315.79us,354.00us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1001,1000000,1.90s,583.00ns,0.00ns,580.00ns,117.00ns,458.00ns,40.25us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,4.47s,2.29us,0.00ns,2.29us,202.00ns,2.17us,31.92us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,4.48s,2.29us,0.00ns,2.28us,219.00ns,2.17us,27.25us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1001,1000000,751.78ms,42.00ns,0.00ns,57.00ns,27.00ns,1.00ns,9.71us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,754.57ms,42.00ns,0.00ns,39.00ns,29.00ns,1.00ns,15.12us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.90s,583.00ns,0.00ns,592.00ns,111.00ns,500.00ns,25.54us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,3.51s,1.38us,0.00ns,1.40us,170.00ns,1.29us,34.71us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.89s,583.00ns,0.00ns,589.00ns,114.00ns,458.00ns,25.62us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,1001,1000000,3.09s,334.00ns,0.00ns,353.00ns,83.00ns,250.00ns,25.00us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1001,1000000,2.44s,833.00ns,0.00ns,837.00ns,131.00ns,750.00ns,30.92us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,2.31s,792.00ns,0.00ns,811.00ns,125.00ns,708.00ns,32.38us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,1001,1000000,750.82ms,83.00ns,0.00ns,66.00ns,42.00ns,1.00ns,23.38us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1001,1000000,813.89ms,83.00ns,0.00ns,66.00ns,35.00ns,1.00ns,15.92us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1001,1000000,1.96s,625.00ns,0.00ns,617.00ns,119.00ns,500.00ns,32.67us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1001,1000000,2.50s,625.00ns,0.00ns,617.00ns,113.00ns,500.00ns,30.58us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,1001,1000000,2.19s,708.00ns,0.00ns,693.00ns,116.00ns,583.00ns,33.12us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,2.13s,709.00ns,0.00ns,722.00ns,121.00ns,625.00ns,25.88us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,2.01s,667.00ns,0.00ns,664.00ns,113.00ns,541.00ns,32.29us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,1001,1000000,4.66s,2.42us,0.00ns,2.44us,232.00ns,2.33us,61.79us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,1.71s,500.00ns,0.00ns,492.00ns,109.00ns,375.00ns,25.33us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.89s,584.00ns,0.00ns,600.00ns,111.00ns,500.00ns,29.92us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.77s,541.00ns,0.00ns,523.00ns,106.00ns,416.00ns,29.67us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.53s,416.00ns,0.00ns,402.00ns,82.00ns,291.00ns,24.96us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,1001,911306,6.21s,2.75us,0.00ns,2.75us,230.00ns,2.54us,28.12us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,1001,506819,4.88s,5.88us,0.00ns,5.87us,339.00ns,5.71us,35.21us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,3.16s,1.21us,0.00ns,1.19us,159.00ns,1.08us,26.04us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1001,578267,4.88s,5.12us,0.00ns,5.14us,336.00ns,5.00us,48.42us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1001,1000000,1.95s,667.00ns,0.00ns,677.00ns,119.00ns,583.00ns,31.33us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,550004,3241,4.56s,923.25us,0.00ns,925.69us,5.25us,921.79us,0.97ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,550004,1623,4.56s,1.46ms,0.00ns,1.85ms,13.78ms,1.46ms,556.53ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,550004,2055,4.55s,1.46ms,0.00ns,1.46ms,6.44us,1.46ms,1.50ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,550004,17573,4.56s,170.08us,0.00ns,170.67us,2.70us,169.71us,212.79us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,550004,17581,4.56s,170.04us,0.00ns,170.59us,2.51us,169.58us,204.75us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,550004,24091,4.56s,119.00us,0.00ns,124.48us,10.87us,117.21us,181.42us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,550004,3811,4.56s,784.83us,0.00ns,787.26us,5.30us,784.71us,827.29us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,550004,9103,4.56s,328.75us,0.00ns,329.51us,3.35us,325.62us,365.79us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,550004,4215,4.56s,709.54us,0.00ns,711.14us,6.00us,703.29us,752.96us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,550004,17729,4.56s,168.71us,0.00ns,169.17us,2.32us,168.58us,210.71us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,550004,17725,4.56s,168.71us,0.00ns,169.21us,2.42us,168.58us,208.25us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,550004,6325,4.56s,470.83us,0.00ns,474.32us,83.88us,470.54us,5.22ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,550004,6089,4.69s,470.96us,0.00ns,492.64us,313.75us,470.58us,19.89ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,550004,32564,4.56s,90.96us,0.00ns,92.08us,3.81us,87.00us,137.42us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,550004,32622,4.56s,90.00us,0.00ns,91.91us,3.61us,86.54us,143.46us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,720057,4475,4.56s,668.50us,0.00ns,670.39us,4.45us,668.38us,720.33us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,720057,2890,4.56s,1.04ms,0.00ns,1.04ms,5.17us,1.04ms,1.10ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,720057,2889,4.56s,1.04ms,0.00ns,1.04ms,5.97us,1.04ms,1.08ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,720057,66684,4.56s,44.67us,0.00ns,44.94us,1.12us,44.46us,83.58us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,720057,67270,4.56s,44.21us,0.00ns,44.54us,1.15us,43.92us,84.04us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,720057,80722,4.56s,36.75us,0.00ns,37.11us,1.28us,35.54us,70.17us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,720057,2903,4.56s,1.03ms,0.00ns,1.03ms,5.12us,1.03ms,1.07ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,720057,26878,4.62s,86.88us,0.00ns,110.99us,3.39ms,84.38us,554.60ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,720057,67750,4.57s,44.12us,0.00ns,44.23us,1.02us,43.92us,85.29us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,720057,66447,4.56s,45.00us,0.00ns,45.09us,1.02us,44.83us,80.96us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,720057,9790,4.56s,305.54us,0.00ns,306.39us,3.02us,305.42us,377.08us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,9790,4.56s,305.54us,0.00ns,306.39us,2.96us,305.42us,339.42us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,720057,116239,4.63s,25.67us,0.00ns,25.76us,751.00ns,25.38us,57.29us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,720057,118013,4.63s,25.25us,0.00ns,25.37us,755.00ns,25.08us,56.25us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,720057,760,4.56s,3.95ms,0.00ns,3.95ms,10.03us,3.94ms,4.01ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,720057,760,4.56s,3.95ms,0.00ns,3.95ms,9.14us,3.94ms,4.01ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,720057,760,4.56s,3.95ms,63.00ns,3.95ms,8.81us,3.94ms,3.99ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,720057,3619,4.56s,823.17us,0.00ns,828.96us,141.11us,822.92us,8.42ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,720057,3567,4.54s,822.33us,0.00ns,841.01us,320.17us,822.08us,13.90ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,720057,4825,4.56s,616.54us,0.00ns,621.77us,12.38us,616.38us,755.88us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,720057,2904,4.56s,1.03ms,0.00ns,1.03ms,5.12us,1.03ms,1.07ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,720057,2307,4.56s,1.30ms,0.00ns,1.30ms,6.58us,1.30ms,1.34ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,720057,4040,4.56s,740.67us,0.00ns,742.61us,4.47us,740.50us,790.96us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,720057,4044,4.56s,739.88us,0.00ns,741.87us,4.77us,739.71us,860.04us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,720057,760,4.56s,3.95ms,0.00ns,3.95ms,8.81us,3.94ms,3.99ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,760,4.56s,3.95ms,83.00ns,3.95ms,8.48us,3.94ms,3.99ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,720057,5617,4.56s,525.38us,0.00ns,534.08us,14.69us,502.79us,581.92us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,720057,5618,4.56s,526.88us,0.00ns,533.99us,14.96us,476.38us,577.25us\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,,317,4.54s,7.36ms,0.00ns,9.47ms,31.41ms,7.12ms,565.90ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,,163,4.56s,18.52ms,0.00ns,18.52ms,29.31us,18.40ms,18.63ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,,83,4.62s,36.53ms,0.00ns,36.54ms,33.84us,36.50ms,36.79ms\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,1000,19338,4.56s,154.67us,0.00ns,155.09us,2.03us,154.42us,192.75us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,1000,4557,4.56s,657.29us,0.00ns,658.31us,4.25us,650.33us,691.42us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,1000,11234,4.56s,266.29us,0.00ns,267.00us,2.87us,262.96us,304.29us\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,806771,118,4.56s,25.43ms,20.00ns,25.43ms,16.63us,25.39ms,25.48ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,806771,24,4.68s,128.82ms,250.00ns,128.83ms,39.12us,128.76ms,128.95ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,806771,59,4.56s,50.97ms,0.00ns,50.97ms,26.77us,50.94ms,51.10ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,4312,4.56s,694.71us,0.00ns,695.70us,4.71us,690.46us,742.38us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1816,4.56s,1.64ms,0.00ns,1.65ms,255.90us,1.64ms,12.51ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1799,4.52s,1.64ms,0.00ns,1.67ms,238.96us,1.64ms,6.50ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,57997,4.56s,51.50us,0.00ns,51.68us,1.12us,50.58us,87.29us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,82817,4.56s,36.00us,0.00ns,36.17us,0.99us,35.25us,87.88us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,13457,4.56s,222.08us,0.00ns,222.89us,9.53us,205.58us,270.83us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3375,4.56s,885.75us,0.00ns,889.00us,16.25us,885.21us,1.17ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,7829,4.56s,382.42us,0.00ns,383.13us,3.21us,378.25us,417.38us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,42606,4.62s,69.67us,0.00ns,69.83us,1.42us,68.79us,123.08us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,6783,4.56s,443.04us,0.00ns,442.29us,5.47us,432.67us,477.25us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,7248,4.56s,412.92us,0.00ns,413.87us,3.41us,411.96us,449.92us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,14148,4.56s,209.75us,0.00ns,212.00us,8.04us,198.12us,251.79us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,11590,4.52s,199.17us,1.00ns,258.80us,5.15ms,186.83us,554.18ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,5935,4.56s,504.25us,0.00ns,505.47us,3.73us,503.04us,548.54us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2004,4.56s,1.50ms,0.00ns,1.50ms,6.04us,1.49ms,1.54ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2006,4.56s,1.49ms,0.00ns,1.50ms,6.30us,1.49ms,1.54ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,24023,4.56s,124.42us,0.00ns,124.82us,1.77us,123.21us,157.67us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,42118,4.56s,71.00us,0.00ns,71.17us,1.36us,70.25us,100.04us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,11137,4.56s,268.50us,0.00ns,269.34us,11.76us,248.08us,346.88us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3304,4.56s,905.71us,0.00ns,907.93us,6.39us,903.38us,1.02ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,7165,4.56s,417.33us,0.00ns,418.67us,4.02us,409.33us,451.62us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,13266,4.56s,225.08us,0.00ns,225.59us,3.01us,222.21us,272.33us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,8601,4.56s,346.38us,0.00ns,348.78us,141.22us,343.92us,13.43ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,10953,4.55s,269.38us,0.00ns,273.86us,134.61us,268.29us,13.57ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,9964,4.56s,301.29us,0.00ns,301.04us,8.30us,287.12us,354.17us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,12127,4.56s,245.04us,0.00ns,247.34us,8.47us,233.75us,289.12us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,2821,4.56s,1.06ms,0.00ns,1.06ms,5.55us,1.06ms,1.10ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1367,4.56s,2.19ms,0.00ns,2.20ms,7.05us,2.19ms,2.25ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1404,4.56s,2.14ms,0.00ns,2.14ms,6.87us,2.13ms,2.19ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,4477,4.56s,668.42us,0.00ns,670.17us,4.96us,665.79us,732.25us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,3671,4.56s,815.12us,0.00ns,817.24us,5.02us,814.33us,865.96us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,3213,4.56s,932.25us,0.00ns,933.65us,5.99us,922.62us,0.97ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,2020,4.56s,1.48ms,21.00ns,1.49ms,9.10us,1.47ms,1.53ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,2538,4.55s,911.75us,0.00ns,1.18ms,11.00ms,887.79us,554.24ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,1322,4.56s,2.27ms,0.00ns,2.27ms,11.78us,2.23ms,2.35ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,1954,4.56s,1.53ms,0.00ns,1.54ms,6.17us,1.52ms,1.59ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,2579,4.56s,1.16ms,0.00ns,1.16ms,6.77us,1.15ms,1.20ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,1857,4.56s,1.62ms,0.00ns,1.62ms,8.56us,1.58ms,1.66ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,2804,4.56s,1.07ms,20.00ns,1.07ms,5.40us,1.06ms,1.11ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,3013,4.56s,0.99ms,0.00ns,1.00ms,15.65us,0.99ms,1.19ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1629,4.56s,1.84ms,0.00ns,1.84ms,6.54us,1.83ms,1.89ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1629,4.56s,1.84ms,0.00ns,1.84ms,6.67us,1.83ms,1.88ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,58807,4.56s,50.83us,0.00ns,50.96us,1.09us,50.58us,88.75us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,97775,4.63s,30.38us,0.00ns,30.63us,50.52us,30.12us,15.83ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,6279,4.55s,475.33us,0.00ns,477.77us,12.46us,471.00us,663.29us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3387,4.56s,883.79us,0.00ns,885.73us,4.93us,882.04us,947.38us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,7800,4.56s,383.88us,0.00ns,384.57us,3.21us,379.96us,432.38us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613402,43012,4.62s,69.00us,0.00ns,69.18us,1.34us,68.54us,107.88us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,6595,4.56s,453.62us,0.00ns,454.85us,3.60us,453.08us,491.29us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,7110,4.56s,420.88us,0.00ns,421.93us,3.37us,419.92us,458.25us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,6308,4.56s,474.38us,0.00ns,475.57us,3.78us,473.12us,510.92us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,6597,4.56s,453.58us,0.00ns,454.74us,3.62us,451.96us,488.42us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,1710,4.56s,1.75ms,0.00ns,1.76ms,7.19us,1.75ms,1.88ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1261,4.56s,2.38ms,0.00ns,2.38ms,7.12us,2.37ms,2.42ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,979,4.54s,2.38ms,0.00ns,3.06ms,17.76ms,2.37ms,557.45ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,32739,4.56s,91.33us,0.00ns,91.58us,1.51us,91.04us,147.54us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,52620,4.56s,57.50us,0.00ns,56.96us,1.59us,54.79us,93.58us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,5787,4.56s,515.67us,0.00ns,518.39us,5.91us,513.29us,568.12us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3316,4.56s,902.75us,0.00ns,904.85us,4.93us,901.71us,0.96ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,7448,4.56s,401.92us,0.00ns,402.75us,3.39us,396.29us,436.29us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613402,22761,4.62s,130.29us,0.00ns,131.21us,2.39us,128.58us,164.17us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,6573,4.56s,447.92us,0.00ns,456.41us,12.11us,444.88us,503.54us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,7565,4.56s,395.54us,0.00ns,396.51us,3.24us,394.96us,433.88us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,5727,4.56s,522.62us,0.00ns,523.80us,4.03us,520.83us,563.54us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,5847,4.97s,485.29us,0.00ns,582.16us,7.28ms,477.00us,557.00ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,5310,4.55s,563.71us,0.00ns,564.92us,4.53us,558.75us,661.54us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1682,4.56s,1.78ms,1.00ns,1.78ms,6.41us,1.78ms,1.83ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1708,4.56s,1.76ms,0.00ns,1.76ms,6.42us,1.75ms,1.80ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,5904,4.56s,506.83us,0.00ns,508.10us,3.95us,504.67us,550.75us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,5035,4.56s,594.29us,0.00ns,595.84us,4.06us,593.50us,639.29us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,4659,4.56s,641.58us,0.00ns,643.88us,4.99us,640.75us,684.08us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,2485,4.56s,1.21ms,0.00ns,1.21ms,6.63us,1.20ms,1.25ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,4425,4.56s,676.29us,0.00ns,677.93us,5.13us,672.58us,720.17us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613402,2307,4.56s,1.30ms,0.00ns,1.30ms,4.83us,1.29ms,1.34ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,3202,4.57s,935.17us,0.00ns,937.08us,5.46us,923.50us,0.98ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,3087,4.53s,745.83us,0.00ns,0.97ms,9.98ms,736.00us,553.92ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,3184,4.56s,946.65us,20.00ns,942.40us,11.13us,914.00us,1.00ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,4407,4.56s,679.54us,0.00ns,680.75us,4.59us,672.71us,729.08us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,6852,4.56s,436.54us,0.00ns,437.79us,3.81us,436.29us,505.42us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,2061,4.56s,1.45ms,0.00ns,1.46ms,5.78us,1.45ms,1.51ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,2062,4.56s,1.45ms,20.00ns,1.46ms,5.86us,1.45ms,1.49ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,79621,4.56s,37.21us,0.00ns,37.63us,1.02us,36.83us,68.08us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,101111,4.57s,29.54us,0.00ns,29.62us,766.00ns,29.29us,59.96us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,19732,4.56s,146.75us,0.00ns,151.99us,8.24us,144.42us,205.42us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3325,4.56s,900.12us,0.00ns,902.40us,4.96us,899.29us,942.79us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,7798,4.56s,383.92us,0.00ns,384.70us,3.51us,380.08us,459.21us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613427,36830,4.62s,80.67us,0.00ns,80.87us,1.44us,80.25us,120.58us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,36682,4.56s,81.54us,0.00ns,81.73us,1.43us,80.83us,115.21us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,46801,4.56s,64.00us,0.00ns,64.05us,1.46us,62.42us,101.08us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,21296,4.56s,140.38us,0.00ns,140.82us,2.21us,137.71us,188.71us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,18109,4.52s,130.29us,0.00ns,165.62us,4.12ms,127.29us,554.23ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,4382,4.55s,683.12us,0.00ns,684.70us,4.73us,680.75us,781.17us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1838,4.56s,1.63ms,20.00ns,1.63ms,6.00us,1.63ms,1.68ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1841,4.56s,1.63ms,0.00ns,1.63ms,5.96us,1.62ms,1.67ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,41265,4.56s,72.42us,0.00ns,72.65us,1.39us,71.92us,124.83us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,58259,4.56s,51.29us,0.00ns,51.44us,1.07us,50.83us,82.17us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,13386,4.56s,222.62us,0.00ns,224.08us,7.73us,212.08us,269.71us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3324,4.56s,900.25us,0.00ns,902.72us,5.28us,899.62us,0.96ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,7511,4.56s,398.00us,0.00ns,399.38us,6.27us,392.83us,572.54us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613427,20582,4.56s,144.62us,0.00ns,145.15us,2.06us,143.67us,183.42us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,18027,4.57s,164.92us,0.00ns,166.37us,115.25us,162.00us,15.63ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,23824,5.06s,119.38us,0.00ns,125.76us,115.42us,118.71us,9.00ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,12888,4.56s,233.75us,0.00ns,232.74us,4.61us,225.04us,276.96us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,15064,4.56s,199.94us,20.00ns,199.11us,4.68us,192.50us,236.71us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,12806,4.56s,233.58us,0.00ns,234.23us,2.74us,232.25us,280.25us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1944,4.56s,1.54ms,0.00ns,1.54ms,5.94us,1.54ms,1.58ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1956,4.56s,1.53ms,0.00ns,1.53ms,5.96us,1.53ms,1.57ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,14053,4.56s,212.92us,0.00ns,213.44us,2.33us,211.00us,242.92us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,13504,4.56s,221.67us,0.00ns,222.11us,2.45us,219.83us,257.12us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,5714,4.56s,523.88us,0.00ns,525.02us,4.33us,520.71us,562.62us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3020,4.56s,0.99ms,0.00ns,0.99ms,5.16us,0.99ms,1.03ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,4797,4.54s,487.79us,0.00ns,625.41us,7.94ms,484.38us,549.28ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613427,5999,4.56s,498.29us,0.00ns,499.45us,4.73us,491.88us,539.83us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,8895,4.56s,336.33us,0.00ns,337.23us,3.53us,335.08us,377.46us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,11110,4.56s,269.21us,0.00ns,269.99us,3.08us,267.83us,303.04us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,4906,4.56s,609.83us,0.00ns,611.49us,7.29us,601.25us,775.83us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,5732,4.56s,522.35us,21.00ns,523.40us,4.32us,517.50us,572.67us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8428,4.56s,354.88us,0.00ns,355.93us,3.44us,354.79us,389.92us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2133,4.56s,1.40ms,0.00ns,1.41ms,9.57us,1.40ms,1.58ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2133,4.56s,1.40ms,0.00ns,1.41ms,6.77us,1.40ms,1.46ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,161005,4.63s,18.54us,0.00ns,18.58us,629.00ns,18.42us,49.62us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,160504,4.63s,18.50us,0.00ns,18.64us,32.51us,17.92us,12.99ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,9686,4.73s,296.33us,0.00ns,309.69us,231.42us,270.42us,13.61ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3408,4.56s,878.17us,0.00ns,880.24us,4.83us,875.12us,937.21us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8143,4.56s,366.96us,0.00ns,368.40us,5.74us,363.46us,445.46us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,81655,4.74s,36.04us,0.00ns,36.12us,940.00ns,35.88us,91.46us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,100910,4.63s,29.62us,0.00ns,29.68us,812.00ns,28.46us,60.67us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,101041,4.63s,29.58us,0.00ns,29.64us,869.00ns,28.62us,60.67us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,86529,4.56s,34.54us,0.00ns,34.62us,883.00ns,34.38us,68.21us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,86590,4.56s,34.50us,0.00ns,34.60us,899.00ns,34.38us,78.67us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,11910,4.56s,254.33us,0.00ns,251.86us,11.68us,233.04us,298.88us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,11897,4.56s,254.71us,0.00ns,252.13us,11.63us,233.04us,300.67us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,4267,4.55s,543.79us,0.00ns,703.12us,8.51ms,543.17us,555.72ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1954,4.56s,1.53ms,0.00ns,1.54ms,6.51us,1.53ms,1.58ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1954,4.56s,1.53ms,20.00ns,1.54ms,6.83us,1.53ms,1.59ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,120357,4.63s,24.96us,0.00ns,24.88us,822.00ns,24.17us,55.54us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,119340,4.63s,25.04us,0.00ns,25.09us,743.00ns,24.79us,50.71us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,18953,4.56s,156.04us,0.00ns,158.25us,8.97us,144.92us,234.42us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3408,4.56s,878.25us,0.00ns,880.48us,5.63us,875.17us,935.00us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8160,4.56s,366.83us,0.00ns,367.61us,3.50us,363.54us,399.71us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,59267,4.68s,49.92us,0.00ns,50.07us,1.17us,49.71us,91.29us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,9241,4.56s,322.46us,0.00ns,324.62us,4.54us,321.75us,360.92us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,9224,4.56s,322.58us,0.00ns,325.18us,104.14us,321.67us,9.67ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,71536,4.59s,41.12us,0.00ns,41.88us,44.44us,39.75us,11.28ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,72418,4.56s,41.29us,0.00ns,41.38us,940.00ns,41.08us,76.62us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,23000,4.56s,128.88us,0.00ns,130.39us,4.51us,124.21us,170.21us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,23047,4.56s,128.75us,0.00ns,130.12us,4.39us,123.83us,167.21us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8453,4.56s,353.29us,0.00ns,354.87us,5.32us,353.04us,462.17us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2134,4.56s,1.40ms,0.00ns,1.41ms,5.72us,1.40ms,1.44ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2134,4.56s,1.40ms,0.00ns,1.41ms,5.97us,1.40ms,1.47ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,161073,4.63s,18.54us,0.00ns,18.57us,651.00ns,18.42us,52.83us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,161329,4.63s,18.50us,0.00ns,18.54us,603.00ns,18.38us,51.00us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,20197,4.56s,144.71us,0.00ns,148.49us,10.35us,134.38us,203.67us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,2637,4.53s,878.42us,0.00ns,1.14ms,10.81ms,875.33us,555.33ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8162,4.56s,366.88us,0.00ns,367.50us,3.02us,363.29us,410.92us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,80450,4.69s,37.04us,0.00ns,36.71us,1.06us,35.92us,88.62us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,101938,4.56s,29.33us,0.00ns,29.38us,802.00ns,28.79us,59.00us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,102448,4.63s,29.17us,0.00ns,29.23us,799.00ns,28.67us,61.00us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,86954,4.56s,34.38us,0.00ns,34.45us,907.00ns,34.21us,65.17us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,87082,4.56s,34.33us,0.00ns,34.40us,841.00ns,34.17us,65.17us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,22953,4.56s,129.38us,0.00ns,130.66us,4.78us,122.87us,175.46us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,22887,4.56s,129.75us,0.00ns,131.03us,4.87us,123.00us,164.83us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,2782,4.56s,1.08ms,0.00ns,1.08ms,5.52us,1.07ms,1.11ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,1470,4.97s,1.92ms,0.00ns,2.32ms,14.95ms,1.91ms,575.30ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1564,4.56s,1.92ms,0.00ns,1.92ms,6.24us,1.91ms,1.96ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,179983,4.63s,16.46us,0.00ns,16.62us,601.00ns,16.33us,47.96us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,176493,4.63s,16.92us,0.00ns,16.95us,579.00ns,16.79us,47.58us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,7017,4.56s,427.00us,0.00ns,427.54us,12.79us,402.75us,479.62us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3400,4.56s,881.12us,0.00ns,882.38us,5.83us,878.38us,927.04us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8159,4.56s,366.83us,0.00ns,367.67us,3.59us,361.71us,414.71us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,71521,4.68s,41.21us,0.00ns,41.33us,1.02us,41.08us,79.50us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,7008,4.56s,425.83us,1.00ns,428.06us,11.16us,402.83us,500.17us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,6967,4.56s,427.54us,0.00ns,430.58us,13.13us,402.62us,498.96us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,86603,4.56s,34.38us,0.00ns,34.59us,32.66us,34.21us,9.59ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,83448,4.99s,34.33us,0.00ns,35.90us,83.05us,33.29us,16.89ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,7205,4.56s,417.67us,0.00ns,416.35us,8.65us,393.62us,468.83us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,7184,4.56s,418.21us,0.00ns,417.55us,9.16us,395.00us,515.88us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,691.03ms,1.00ns,0.00ns,17.00ns,28.00ns,1.00ns,16.62us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,753.95ms,42.00ns,0.00ns,49.00ns,33.00ns,1.00ns,18.71us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,751.00ms,42.00ns,0.00ns,49.00ns,35.00ns,1.00ns,23.46us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,690.92ms,1.00ns,0.00ns,19.00ns,28.00ns,1.00ns,16.62us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,691.98ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,6.79us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,689.85ms,1.00ns,0.00ns,16.00ns,30.00ns,1.00ns,15.67us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,692.76ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,7.21us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,690.66ms,1.00ns,0.00ns,19.00ns,30.00ns,1.00ns,21.42us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,2.98s,292.00ns,0.00ns,288.00ns,64.00ns,166.00ns,23.46us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,691.77ms,1.00ns,0.00ns,20.00ns,22.00ns,1.00ns,9.33us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,690.69ms,1.00ns,0.00ns,21.00ns,24.00ns,1.00ns,7.38us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,690.61ms,1.00ns,0.00ns,18.00ns,23.00ns,1.00ns,11.42us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,691.24ms,1.00ns,0.00ns,17.00ns,27.00ns,1.00ns,16.12us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,752.32ms,42.00ns,0.00ns,39.00ns,20.00ns,1.00ns,10.12us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,751.12ms,42.00ns,0.00ns,39.00ns,23.00ns,1.00ns,9.50us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,691.15ms,1.00ns,0.00ns,17.00ns,24.00ns,1.00ns,9.42us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,751.13ms,42.00ns,0.00ns,54.00ns,29.00ns,1.00ns,9.92us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,816.26ms,42.00ns,0.00ns,53.00ns,37.00ns,1.00ns,16.71us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,692.32ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,6.83us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,694.57ms,1.00ns,0.00ns,18.00ns,20.00ns,1.00ns,1.67us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,691.78ms,1.00ns,0.00ns,16.00ns,25.00ns,1.00ns,9.71us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,692.12ms,1.00ns,0.00ns,19.00ns,26.00ns,1.00ns,10.17us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,691.14ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,6.79us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,3.09s,292.00ns,0.00ns,295.00ns,76.00ns,166.00ns,25.04us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,691.27ms,1.00ns,0.00ns,20.00ns,29.00ns,1.00ns,15.96us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,755.56ms,1.00ns,0.00ns,21.00ns,23.00ns,1.00ns,6.83us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,692.73ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,6.71us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,692.18ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,9.46us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,752.11ms,42.00ns,0.00ns,34.00ns,18.00ns,1.00ns,7.21us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,690.60ms,42.00ns,0.00ns,34.00ns,27.00ns,1.00ns,16.38us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,692.89ms,1.00ns,0.00ns,18.00ns,24.00ns,1.00ns,8.50us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,750.81ms,42.00ns,0.00ns,61.00ns,35.00ns,1.00ns,16.50us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,815.40ms,42.00ns,0.00ns,60.00ns,22.00ns,1.00ns,7.04us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,691.38ms,1.00ns,0.00ns,20.00ns,27.00ns,1.00ns,16.42us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,692.88ms,1.00ns,0.00ns,18.00ns,27.00ns,1.00ns,11.17us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,694.76ms,1.00ns,0.00ns,16.00ns,29.00ns,1.00ns,20.29us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,690.87ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,9.83us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,693.08ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,4.79us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,3.67s,292.00ns,0.00ns,301.00ns,74.00ns,166.00ns,26.83us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,753.06ms,1.00ns,0.00ns,21.00ns,21.00ns,1.00ns,2.25us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,690.14ms,1.00ns,0.00ns,21.00ns,21.00ns,1.00ns,1.21us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,693.20ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,6.96us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,693.43ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,9.38us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,691.23ms,1.00ns,0.00ns,21.00ns,24.00ns,1.00ns,9.33us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,689.47ms,41.00ns,0.00ns,22.00ns,25.00ns,1.00ns,10.12us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,692.65ms,41.00ns,0.00ns,26.00ns,23.00ns,1.00ns,7.75us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,811.05ms,83.00ns,0.00ns,71.00ns,37.00ns,1.00ns,23.33us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,812.74ms,83.00ns,0.00ns,71.00ns,32.00ns,1.00ns,16.54us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,690.94ms,1.00ns,0.00ns,20.00ns,24.00ns,1.00ns,11.79us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,691.14ms,1.00ns,0.00ns,18.00ns,23.00ns,1.00ns,9.33us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,693.31ms,1.00ns,0.00ns,18.00ns,31.00ns,1.00ns,19.92us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,692.94ms,1.00ns,0.00ns,20.00ns,23.00ns,1.00ns,9.21us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,692.72ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,9.83us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,2.98s,292.00ns,0.00ns,287.00ns,68.00ns,166.00ns,24.92us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,690.79ms,1.00ns,0.00ns,21.00ns,27.00ns,1.00ns,16.58us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,755.32ms,42.00ns,0.00ns,32.00ns,20.00ns,1.00ns,6.92us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,692.43ms,1.00ns,0.00ns,18.00ns,33.00ns,1.00ns,16.92us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,691.75ms,1.00ns,0.00ns,17.00ns,22.00ns,1.00ns,6.67us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,691.97ms,1.00ns,0.00ns,21.00ns,24.00ns,1.00ns,9.54us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,690.38ms,1.00ns,0.00ns,21.00ns,31.00ns,1.00ns,20.75us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,2179,4.56s,1.38ms,0.00ns,1.38ms,7.43us,1.36ms,1.43ms\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,3297,4.56s,907.08us,0.00ns,909.89us,6.42us,906.96us,1.02ms\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,3298,4.56s,907.08us,0.00ns,909.70us,5.59us,906.92us,0.96ms\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,157871,4.63s,18.92us,0.00ns,18.95us,631.00ns,18.79us,48.04us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,158540,4.63s,18.83us,0.00ns,18.87us,614.00ns,18.71us,53.29us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,12592,4.56s,237.08us,0.00ns,238.21us,3.58us,233.62us,277.92us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,2636,4.51s,877.88us,0.00ns,1.14ms,10.80ms,875.12us,554.74ms\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613402,78706,4.69s,37.42us,0.00ns,37.51us,923.00ns,37.29us,76.25us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,99074,4.56s,30.17us,0.00ns,30.23us,839.00ns,29.75us,89.58us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,99480,4.63s,30.04us,0.00ns,30.11us,825.00ns,29.58us,67.50us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613402,37726,4.55s,81.42us,0.00ns,79.47us,3.45us,74.54us,113.88us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,38913,4.56s,76.88us,0.00ns,77.04us,1.45us,76.29us,109.21us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,14597,4.56s,205.46us,0.00ns,205.47us,3.12us,201.33us,240.25us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,14257,4.56s,207.25us,0.00ns,210.39us,5.34us,205.17us,248.54us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,42,1000000,690.52ms,41.00ns,0.00ns,23.00ns,25.00ns,1.00ns,9.25us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,754.01ms,42.00ns,0.00ns,40.00ns,32.00ns,1.00ns,23.00us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,753.91ms,42.00ns,0.00ns,39.00ns,23.00ns,1.00ns,15.71us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,689.36ms,41.00ns,0.00ns,28.00ns,22.00ns,1.00ns,10.21us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,691.52ms,1.00ns,0.00ns,17.00ns,30.00ns,1.00ns,21.17us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,42,1000000,691.94ms,1.00ns,0.00ns,16.00ns,22.00ns,1.00ns,8.42us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,690.98ms,1.00ns,0.00ns,21.00ns,34.00ns,1.00ns,21.75us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,2.97s,292.00ns,0.00ns,297.00ns,78.00ns,166.00ns,34.71us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,689.70ms,41.00ns,0.00ns,28.00ns,23.00ns,1.00ns,6.96us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,691.53ms,1.00ns,0.00ns,21.00ns,31.00ns,1.00ns,21.29us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,693.57ms,1.00ns,0.00ns,18.00ns,23.00ns,1.00ns,9.54us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,692.94ms,1.00ns,0.00ns,17.00ns,28.00ns,1.00ns,17.17us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,42,1000000,935.56ms,84.00ns,0.00ns,100.00ns,39.00ns,1.00ns,16.62us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,42,1000000,871.87ms,84.00ns,0.00ns,99.00ns,36.00ns,1.00ns,13.96us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,5678,4.80s,506.29us,0.00ns,528.34us,429.31us,505.96us,23.49ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1993,4.56s,1.50ms,0.00ns,1.51ms,6.02us,1.50ms,1.58ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1993,4.56s,1.50ms,0.00ns,1.51ms,5.93us,1.50ms,1.56ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,152268,4.63s,19.62us,0.00ns,19.65us,643.00ns,19.46us,53.54us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,152366,4.63s,19.58us,0.00ns,19.64us,622.00ns,19.46us,58.75us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,35335,4.56s,81.79us,0.00ns,84.85us,4.48us,80.67us,118.67us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3409,4.56s,878.21us,0.00ns,880.18us,5.00us,875.21us,917.42us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,8161,4.56s,366.92us,0.00ns,367.56us,3.13us,363.33us,418.25us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613427,76988,4.68s,38.29us,0.00ns,38.39us,944.00ns,38.17us,90.50us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,41744,4.56s,71.50us,0.00ns,71.82us,1.38us,71.00us,106.29us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,34498,4.57s,67.75us,0.00ns,86.91us,2.99ms,64.33us,554.05ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613427,83500,4.56s,35.79us,0.00ns,35.88us,878.00ns,35.67us,73.12us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,83601,4.56s,35.75us,0.00ns,35.83us,892.00ns,35.62us,98.08us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,39203,4.56s,75.83us,0.00ns,76.48us,1.99us,74.50us,110.83us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,39222,4.56s,76.38us,0.00ns,76.44us,2.06us,72.42us,107.83us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,31,1000000,691.24ms,1.00ns,0.00ns,17.00ns,22.00ns,1.00ns,7.08us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,750.55ms,42.00ns,0.00ns,49.00ns,22.00ns,1.00ns,9.38us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,754.88ms,42.00ns,0.00ns,48.00ns,31.00ns,1.00ns,17.46us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,690.94ms,1.00ns,0.00ns,20.00ns,25.00ns,1.00ns,14.29us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,693.69ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,6.71us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,31,1000000,690.07ms,1.00ns,0.00ns,16.00ns,26.00ns,1.00ns,10.08us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,691.22ms,1.00ns,0.00ns,19.00ns,35.00ns,1.00ns,23.33us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,692.97ms,1.00ns,0.00ns,19.00ns,20.00ns,1.00ns,1.62us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,3.03s,292.00ns,0.00ns,293.00ns,70.00ns,166.00ns,25.21us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,691.81ms,1.00ns,0.00ns,20.00ns,29.00ns,1.00ns,13.21us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,693.45ms,1.00ns,0.00ns,20.00ns,24.00ns,1.00ns,9.88us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,690.72ms,1.00ns,0.00ns,18.00ns,32.00ns,1.00ns,21.08us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,693.53ms,1.00ns,0.00ns,17.00ns,24.00ns,1.00ns,10.29us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,31,1000000,815.48ms,42.00ns,0.00ns,54.00ns,39.00ns,1.00ns,16.67us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,31,1000000,813.18ms,42.00ns,0.00ns,54.00ns,30.00ns,1.00ns,9.75us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8065,4.56s,370.83us,0.00ns,371.95us,3.63us,370.71us,414.75us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2120,4.56s,1.41ms,0.00ns,1.42ms,6.49us,1.41ms,1.45ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2110,4.51s,1.41ms,1.00ns,1.42ms,283.24us,1.41ms,14.42ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,155227,4.71s,18.42us,0.00ns,19.28us,50.76us,18.25us,13.31ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,158457,4.63s,18.83us,0.00ns,18.88us,626.00ns,18.71us,52.96us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,17459,4.56s,169.71us,0.00ns,171.78us,7.76us,158.29us,223.96us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3412,4.56s,878.04us,0.00ns,879.41us,5.74us,875.08us,936.50us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8160,4.56s,366.83us,0.00ns,367.62us,3.55us,362.88us,404.04us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,78767,4.69s,37.46us,0.00ns,37.54us,949.00ns,37.29us,77.67us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,73465,4.56s,40.62us,0.00ns,40.79us,930.00ns,40.21us,73.00us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,73059,4.56s,40.92us,0.00ns,41.01us,0.98us,40.46us,76.62us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,85294,4.56s,35.04us,0.00ns,35.12us,859.00ns,34.88us,65.96us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,85375,4.56s,35.00us,0.00ns,35.09us,867.00ns,34.88us,65.62us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,15728,4.55s,146.96us,0.00ns,190.70us,4.54ms,139.54us,568.55ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,20134,4.56s,146.88us,0.00ns,148.95us,5.74us,140.04us,229.92us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8066,4.56s,370.83us,0.00ns,371.88us,3.27us,370.71us,403.46us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,2120,4.56s,1.41ms,0.00ns,1.42ms,5.67us,1.41ms,1.45ms\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2120,4.56s,1.41ms,0.00ns,1.42ms,5.76us,1.41ms,1.45ms\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,159231,4.63s,18.75us,0.00ns,18.79us,602.00ns,18.62us,49.46us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,159847,4.63s,18.67us,0.00ns,18.71us,609.00ns,18.54us,45.50us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,16707,4.56s,179.67us,0.00ns,179.53us,10.08us,161.46us,224.21us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3406,4.56s,878.67us,0.00ns,880.84us,5.42us,875.42us,932.96us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613345,8162,4.56s,366.79us,0.00ns,367.54us,3.40us,363.71us,406.58us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,78652,4.68s,37.33us,0.00ns,37.58us,49.05us,36.17us,13.79ms\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,35387,4.53s,81.62us,0.00ns,84.73us,189.78us,78.79us,26.10ms\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,37261,4.56s,80.21us,0.00ns,80.46us,1.48us,79.58us,124.38us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,86531,4.56s,34.54us,0.00ns,34.62us,809.00ns,34.38us,61.92us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,86673,4.56s,34.50us,0.00ns,34.56us,850.00ns,34.33us,67.96us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,18921,4.56s,158.04us,0.00ns,158.51us,7.19us,146.67us,204.08us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,18741,4.56s,159.46us,0.00ns,160.03us,7.39us,146.75us,197.75us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,5909,4.56s,506.25us,0.00ns,507.68us,3.80us,505.79us,544.33us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,3263,4.56s,917.50us,0.00ns,919.58us,5.03us,915.67us,0.98ms\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3263,4.56s,917.50us,0.00ns,919.62us,5.00us,915.50us,0.95ms\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,147079,4.63s,20.29us,0.00ns,20.34us,635.00ns,20.17us,54.88us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,116945,4.64s,20.17us,0.00ns,25.59us,1.63ms,19.50us,555.90ms\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,26468,4.56s,112.92us,0.00ns,113.30us,1.77us,111.25us,146.96us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3410,4.56s,878.08us,0.00ns,879.84us,4.89us,875.12us,921.79us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,77895,4.68s,37.83us,0.00ns,37.92us,0.98us,37.67us,68.75us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,33646,4.56s,88.75us,0.00ns,89.12us,1.68us,88.17us,122.71us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,33507,4.56s,89.21us,0.00ns,89.49us,1.67us,88.79us,136.00us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,64980,4.56s,46.00us,0.00ns,46.12us,1.08us,45.71us,76.83us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,65049,4.56s,45.96us,0.00ns,46.07us,1.08us,45.67us,78.96us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,35676,4.56s,83.79us,0.00ns,84.04us,1.54us,83.21us,117.92us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,35690,4.56s,83.75us,0.00ns,84.01us,1.60us,83.08us,130.17us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,7591,4.56s,392.88us,0.00ns,395.19us,79.51us,392.71us,7.30ms\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,3262,4.55s,898.08us,0.00ns,919.84us,423.90us,895.00us,18.10ms\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3336,4.56s,897.58us,0.00ns,899.46us,4.84us,894.58us,932.88us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,157885,4.63s,18.92us,0.00ns,18.95us,638.00ns,18.75us,65.25us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,171396,4.63s,17.42us,0.00ns,17.45us,651.00ns,16.79us,46.42us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,42753,4.56s,69.96us,0.00ns,70.12us,1.35us,68.92us,104.79us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3409,4.56s,878.00us,0.00ns,880.15us,4.86us,875.79us,936.54us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,78175,4.68s,37.67us,0.00ns,37.77us,944.00ns,37.54us,76.50us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,37354,4.56s,80.04us,0.00ns,80.27us,1.46us,79.42us,113.88us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,38266,4.56s,78.12us,0.00ns,78.35us,1.46us,77.62us,114.88us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,82350,4.56s,36.29us,0.00ns,36.38us,895.00ns,36.17us,67.62us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,63097,4.55s,36.33us,0.00ns,47.49us,2.29ms,35.21us,574.00ms\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,58744,4.56s,50.92us,0.00ns,51.02us,1.19us,50.00us,95.25us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,59562,4.56s,50.08us,0.00ns,50.32us,1.30us,49.21us,84.00us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613345,8231,4.56s,363.42us,0.00ns,364.42us,3.27us,363.25us,400.67us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613345,3255,4.56s,919.71us,0.00ns,921.86us,4.89us,917.88us,0.96ms\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3255,4.56s,919.62us,0.00ns,921.80us,5.13us,918.00us,0.98ms\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613345,141953,4.63s,21.04us,0.00ns,21.08us,632.00ns,20.88us,51.71us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613345,171639,4.63s,17.38us,0.00ns,17.43us,609.00ns,17.29us,47.33us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613345,43224,4.56s,69.12us,0.00ns,69.36us,1.37us,68.62us,109.88us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613345,3411,4.56s,877.54us,0.00ns,879.67us,6.07us,874.71us,1.02ms\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613345,77728,5.30s,37.79us,0.00ns,38.02us,33.26us,36.67us,9.30ms\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613345,64164,4.55s,46.54us,0.00ns,46.70us,1.10us,46.12us,77.67us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613345,67402,4.56s,44.33us,0.00ns,44.46us,1.10us,43.79us,97.50us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613345,83961,4.56s,35.58us,0.00ns,35.68us,889.00ns,35.46us,66.50us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,83954,4.56s,35.58us,0.00ns,35.68us,902.00ns,35.46us,66.29us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,51467,4.56s,58.04us,0.00ns,58.24us,1.26us,57.42us,93.79us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,52984,4.56s,56.29us,0.00ns,56.57us,1.26us,55.83us,97.71us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,691.25ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,9.71us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,753.37ms,42.00ns,0.00ns,40.00ns,34.00ns,1.00ns,23.38us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,691.03ms,42.00ns,0.00ns,39.00ns,23.00ns,1.00ns,14.29us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,690.05ms,41.00ns,0.00ns,26.00ns,29.00ns,1.00ns,16.79us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,695.75ms,1.00ns,0.00ns,18.00ns,27.00ns,1.00ns,17.50us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,629.87ms,41.00ns,0.00ns,22.00ns,25.00ns,1.00ns,9.62us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,691.31ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,6.92us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,694.94ms,1.00ns,0.00ns,19.00ns,28.00ns,1.00ns,16.96us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,3.03s,292.00ns,0.00ns,314.00ns,88.00ns,208.00ns,23.71us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,755.93ms,41.00ns,0.00ns,26.00ns,23.00ns,1.00ns,12.12us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,690.02ms,41.00ns,0.00ns,28.00ns,31.00ns,1.00ns,16.00us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,692.36ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,4.71us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,693.08ms,1.00ns,0.00ns,18.00ns,23.00ns,1.00ns,9.54us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,0.99s,166.00ns,0.00ns,147.00ns,51.00ns,41.00ns,23.08us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,812.53ms,83.00ns,0.00ns,76.00ns,39.00ns,1.00ns,18.92us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,28,1000000,691.13ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,9.75us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,751.28ms,42.00ns,0.00ns,44.00ns,22.00ns,1.00ns,9.92us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,752.09ms,42.00ns,0.00ns,43.00ns,24.00ns,1.00ns,16.38us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,691.27ms,1.00ns,0.00ns,21.00ns,25.00ns,1.00ns,13.92us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,693.32ms,1.00ns,0.00ns,20.00ns,27.00ns,1.00ns,16.67us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,28,1000000,694.36ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,10.00us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,693.89ms,1.00ns,0.00ns,19.00ns,25.00ns,1.00ns,9.54us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,691.95ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,4.79us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,3.64s,333.00ns,0.00ns,334.00ns,1.49us,208.00ns,1.35ms\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,691.58ms,1.00ns,0.00ns,21.00ns,27.00ns,1.00ns,14.12us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,755.18ms,41.00ns,0.00ns,26.00ns,22.00ns,1.00ns,6.88us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,692.82ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,10.00us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,692.41ms,1.00ns,0.00ns,18.00ns,28.00ns,1.00ns,16.46us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,812.27ms,83.00ns,0.00ns,66.00ns,44.00ns,1.00ns,7.88us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,691.02ms,42.00ns,0.00ns,34.00ns,16.00ns,1.00ns,2.46us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,2190,4.56s,1.37ms,0.00ns,1.37ms,7.44us,1.36ms,1.42ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,3298,4.56s,907.08us,0.00ns,909.64us,5.18us,906.92us,0.95ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,3298,4.56s,907.08us,0.00ns,909.70us,5.43us,906.92us,0.96ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,157807,4.63s,18.92us,0.00ns,18.96us,613.00ns,18.79us,49.71us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,158455,4.63s,18.83us,0.00ns,18.88us,633.00ns,18.71us,49.58us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,14946,4.56s,199.42us,0.00ns,200.68us,3.42us,197.25us,238.25us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3411,4.56s,877.92us,0.00ns,879.50us,6.89us,875.12us,1.06ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613402,78705,4.69s,37.42us,0.00ns,37.52us,933.00ns,37.29us,62.33us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,88162,4.62s,26.58us,0.00ns,33.98us,1.87ms,25.17us,556.06ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,113496,4.63s,26.33us,0.00ns,26.38us,800.00ns,25.25us,76.54us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613402,46147,4.56s,64.83us,0.00ns,64.96us,1.32us,64.08us,109.79us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,46447,4.56s,64.38us,0.00ns,64.54us,1.27us,63.92us,98.62us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,17276,4.56s,173.12us,0.00ns,173.60us,2.30us,172.17us,213.21us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,18098,4.56s,165.25us,0.00ns,165.72us,2.24us,163.79us,200.62us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613402,1786,4.56s,1.68ms,21.00ns,1.68ms,6.66us,1.67ms,1.74ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613402,1301,4.56s,2.31ms,0.00ns,2.31ms,7.61us,2.30ms,2.36ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1304,4.56s,2.30ms,0.00ns,2.30ms,6.98us,2.29ms,2.34ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613402,157595,4.63s,18.96us,0.00ns,18.99us,613.00ns,18.83us,53.83us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613402,157328,4.62s,18.92us,0.00ns,19.02us,28.92us,18.25us,11.49ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613402,9697,4.71s,296.46us,0.00ns,309.33us,364.84us,285.75us,25.49ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613402,3418,4.56s,875.54us,0.00ns,877.71us,4.42us,875.17us,904.29us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613402,8176,4.56s,366.75us,0.00ns,366.89us,1.58us,362.92us,391.42us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613402,78692,4.68s,37.50us,0.00ns,37.55us,619.00ns,37.33us,62.29us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613402,112805,4.63s,26.50us,0.00ns,26.55us,577.00ns,25.21us,48.67us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613402,113316,4.63s,26.38us,0.00ns,26.43us,496.00ns,25.38us,42.71us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613402,55926,4.56s,53.54us,0.00ns,53.59us,360.00ns,53.08us,74.83us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,56198,4.56s,53.25us,0.00ns,53.33us,461.00ns,52.92us,76.58us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,10723,4.56s,279.21us,0.00ns,279.75us,1.40us,278.25us,298.00us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,10713,4.56s,279.71us,0.00ns,280.01us,1.46us,277.96us,295.38us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,42,1000000,690.80ms,41.00ns,0.00ns,24.00ns,20.00ns,1.00ns,1.50us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,755.25ms,42.00ns,0.00ns,36.00ns,15.00ns,1.00ns,2.58us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,690.52ms,42.00ns,0.00ns,35.00ns,27.00ns,1.00ns,12.46us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,756.75ms,42.00ns,0.00ns,35.00ns,22.00ns,1.00ns,8.00us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,694.12ms,1.00ns,0.00ns,19.00ns,20.00ns,1.00ns,1.08us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,42,1000000,692.36ms,41.00ns,0.00ns,31.00ns,27.00ns,1.00ns,14.92us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,692.62ms,1.00ns,0.00ns,20.00ns,24.00ns,1.00ns,8.08us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,2.97s,292.00ns,0.00ns,308.00ns,121.00ns,208.00ns,13.88us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,755.26ms,42.00ns,0.00ns,38.00ns,24.00ns,1.00ns,9.33us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,690.73ms,42.00ns,0.00ns,33.00ns,26.00ns,1.00ns,7.88us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,691.73ms,1.00ns,0.00ns,19.00ns,27.00ns,1.00ns,11.79us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,693.93ms,1.00ns,0.00ns,19.00ns,25.00ns,1.00ns,11.00us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,42,1000000,1.24s,250.00ns,0.00ns,255.00ns,53.00ns,166.00ns,15.12us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,42,1000000,1.00s,125.00ns,0.00ns,132.00ns,40.00ns,41.00ns,21.58us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,42,1000000,753.70ms,42.00ns,0.00ns,43.00ns,25.00ns,1.00ns,12.38us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,818.40ms,42.00ns,0.00ns,62.00ns,24.00ns,1.00ns,11.58us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,752.53ms,42.00ns,0.00ns,61.00ns,27.00ns,1.00ns,8.42us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,690.43ms,41.00ns,0.00ns,27.00ns,27.00ns,1.00ns,11.46us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,693.13ms,1.00ns,0.00ns,20.00ns,27.00ns,1.00ns,11.12us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,42,1000000,693.92ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,7.54us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,692.59ms,1.00ns,0.00ns,20.00ns,24.00ns,1.00ns,7.50us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,42,1000000,693.36ms,1.00ns,0.00ns,20.00ns,26.00ns,1.00ns,12.58us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,3.74s,334.00ns,0.00ns,352.00ns,77.00ns,250.00ns,24.29us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,754.83ms,41.00ns,0.00ns,30.00ns,26.00ns,1.00ns,9.50us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,690.24ms,41.00ns,0.00ns,29.00ns,23.00ns,1.00ns,8.00us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,692.93ms,1.00ns,0.00ns,19.00ns,29.00ns,1.00ns,16.92us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,693.52ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,8.67us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,42,1000000,939.06ms,125.00ns,0.00ns,115.00ns,45.00ns,1.00ns,23.46us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,42,1000000,815.52ms,42.00ns,0.00ns,57.00ns,36.00ns,1.00ns,19.92us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,4887,4.56s,612.17us,0.00ns,613.92us,4.74us,610.79us,662.71us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,3278,4.56s,913.04us,0.00ns,915.29us,5.36us,911.17us,0.96ms\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,3278,4.56s,913.00us,0.00ns,915.32us,5.37us,911.08us,0.96ms\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,150245,4.63s,19.88us,0.00ns,19.92us,646.00ns,19.75us,50.58us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,150835,4.63s,19.79us,0.00ns,19.84us,652.00ns,19.67us,50.50us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,29784,4.56s,99.38us,0.00ns,100.68us,2.83us,97.83us,137.71us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3412,4.56s,878.00us,0.00ns,879.36us,5.61us,875.17us,938.50us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613427,76476,4.69s,38.54us,0.00ns,38.65us,924.00ns,38.42us,74.54us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,19895,4.94s,138.62us,0.00ns,169.76us,3.91ms,137.04us,550.96ms\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,22304,4.56s,134.29us,0.00ns,134.46us,1.47us,132.25us,162.25us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613427,77227,4.56s,38.75us,0.00ns,38.80us,408.00ns,38.54us,64.62us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,77124,4.56s,38.79us,0.00ns,38.85us,561.00ns,38.54us,54.54us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,33904,4.56s,88.29us,0.00ns,88.44us,1.83us,85.75us,117.88us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,34155,4.56s,87.67us,0.00ns,87.79us,1.34us,85.50us,110.33us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,613427,4369,4.56s,685.88us,0.00ns,686.73us,2.82us,685.08us,752.54us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,613427,1844,4.56s,1.63ms,0.00ns,1.63ms,2.40us,1.62ms,1.66ms\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1840,4.56s,1.63ms,0.00ns,1.63ms,6.04us,1.62ms,1.67ms\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,613427,154319,4.63s,19.33us,0.00ns,19.39us,623.00ns,19.21us,53.88us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,613427,154630,4.63s,19.33us,0.00ns,19.35us,309.00ns,19.21us,37.08us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,613427,22153,4.56s,131.79us,0.00ns,135.38us,6.06us,129.75us,157.96us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,613427,3422,4.56s,875.54us,0.00ns,876.86us,3.33us,875.21us,903.54us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,613427,8175,4.56s,366.83us,0.00ns,366.93us,1.36us,363.67us,385.33us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,613427,77728,4.68s,37.96us,0.00ns,37.99us,321.00ns,37.83us,60.29us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,613427,32173,4.56s,93.17us,0.00ns,93.20us,585.00ns,92.71us,114.21us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,613427,32658,4.56s,90.00us,0.00ns,91.82us,3.63us,88.08us,117.38us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,613427,73132,4.56s,40.88us,0.00ns,40.97us,892.00ns,40.62us,65.50us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,72867,4.56s,41.00us,0.00ns,41.12us,0.98us,40.83us,83.71us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,19094,4.56s,122.67us,0.00ns,157.07us,4.02ms,121.17us,555.89ms\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,23991,4.55s,124.54us,0.00ns,125.00us,2.76us,121.42us,201.96us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,31,1000000,692.00ms,1.00ns,0.00ns,19.00ns,31.00ns,1.00ns,21.58us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,690.61ms,41.00ns,0.00ns,22.00ns,22.00ns,1.00ns,7.00us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,691.51ms,41.00ns,0.00ns,22.00ns,33.00ns,1.00ns,21.42us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,754.70ms,41.00ns,0.00ns,29.00ns,24.00ns,1.00ns,11.54us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,692.09ms,1.00ns,0.00ns,20.00ns,24.00ns,1.00ns,9.75us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,31,1000000,690.63ms,41.00ns,0.00ns,24.00ns,26.00ns,1.00ns,13.71us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,691.67ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,7.04us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,3.03s,292.00ns,0.00ns,310.00ns,88.00ns,208.00ns,32.00us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,755.79ms,42.00ns,0.00ns,32.00ns,23.00ns,1.00ns,9.46us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,753.64ms,41.00ns,0.00ns,30.00ns,21.00ns,1.00ns,7.25us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,693.27ms,1.00ns,0.00ns,18.00ns,30.00ns,1.00ns,13.17us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,694.01ms,1.00ns,0.00ns,18.00ns,27.00ns,1.00ns,16.38us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,31,1000000,1.17s,250.00ns,0.00ns,236.00ns,60.00ns,125.00ns,24.12us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,31,1000000,937.25ms,125.00ns,0.00ns,119.00ns,41.00ns,1.00ns,16.75us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),libc/memmem/oneshot,unknown,,31,1000000,689.67ms,41.00ns,0.00ns,22.00ns,25.00ns,1.00ns,9.08us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,755.90ms,42.00ns,0.00ns,44.00ns,34.00ns,1.00ns,17.33us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,753.93ms,42.00ns,0.00ns,42.00ns,25.00ns,1.00ns,16.67us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,691.83ms,1.00ns,0.00ns,20.00ns,21.00ns,1.00ns,6.67us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,691.02ms,1.00ns,0.00ns,20.00ns,36.00ns,1.00ns,23.00us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/twoway,2.5.0,,31,1000000,692.46ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,9.50us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,694.05ms,1.00ns,0.00ns,19.00ns,31.00ns,1.00ns,17.29us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,691.05ms,1.00ns,0.00ns,19.00ns,29.00ns,1.00ns,16.67us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,3.10s,333.00ns,0.00ns,323.00ns,76.00ns,208.00ns,23.83us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,690.07ms,41.00ns,0.00ns,23.00ns,23.00ns,1.00ns,9.88us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,753.89ms,41.00ns,0.00ns,28.00ns,19.00ns,1.00ns,1.25us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,692.85ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,4.92us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,693.47ms,1.00ns,0.00ns,18.00ns,27.00ns,1.00ns,15.83us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,31,1000000,812.55ms,83.00ns,0.00ns,83.00ns,30.00ns,1.00ns,16.46us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 45afe89f43),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,31,1000000,750.91ms,42.00ns,0.00ns,44.00ns,26.00ns,1.00ns,12.25us\n"
  },
  {
    "path": "benchmarks/record/aarch64/2023-12-29.csv",
    "content": "name,model,rebar_version,engine,engine_version,err,haystack_len,iters,total,median,mad,mean,stddev,min,max\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev f4d84cfc42),libc/memchr/oneshot,unknown,,594933,6330,4.55s,472.54us,0.00ns,473.96us,3.91us,471.62us,529.17us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot,0.6.4,,594933,468249,4.76s,6.33us,0.00ns,6.36us,242.00ns,6.21us,38.38us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,594933,122974,4.75s,23.79us,0.00ns,23.85us,758.00ns,23.67us,56.75us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount,2.7.1,,594933,223313,4.69s,13.38us,0.00ns,13.38us,472.00ns,13.21us,39.88us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount/wasm32,2.7.1,,594933,97172,4.75s,30.25us,0.00ns,30.35us,867.00ns,30.12us,70.46us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/oneshot,2.7.1,,594933,7864,4.56s,380.62us,0.00ns,381.47us,2.94us,380.08us,417.88us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/prebuilt,2.7.1,,594933,8410,4.56s,355.92us,0.00ns,356.71us,3.04us,354.92us,396.71us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/fallback,2.7.1,,594933,6024,4.56s,496.37us,0.00ns,497.97us,4.19us,495.79us,550.46us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/naive,2.7.1,,594933,7687,4.56s,389.17us,0.00ns,390.22us,3.79us,384.79us,435.50us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/wasm32,2.7.1,,594933,5636,4.56s,530.38us,0.00ns,531.81us,4.19us,529.04us,573.92us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr,2.7.1,,594933,8002,4.56s,373.88us,0.00ns,374.88us,3.29us,373.33us,411.29us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/oneshot,2.5.0,,594933,5878,4.56s,509.04us,0.00ns,510.34us,3.83us,507.92us,545.29us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/prebuilt,2.5.0,,594933,5932,4.56s,504.42us,0.00ns,505.69us,3.92us,502.96us,542.00us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/naive,2.5.0,,594933,7753,4.56s,385.92us,0.00ns,386.91us,3.57us,381.75us,425.62us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr,2.5.0,,594933,6325,4.56s,472.92us,0.00ns,474.33us,3.93us,472.00us,529.88us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2,2.7.1,,594933,5222,4.56s,572.96us,0.00ns,574.49us,4.18us,570.25us,610.75us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/fallback,2.7.1,,594933,3014,4.56s,0.99ms,0.00ns,1.00ms,5.11us,0.99ms,1.03ms\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/naive,2.7.1,,594933,4547,4.56s,658.62us,0.00ns,659.78us,4.68us,655.08us,696.38us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/wasm32,2.7.1,,594933,3936,4.56s,759.62us,0.00ns,761.77us,4.52us,759.08us,804.96us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr2,2.7.1,,594933,5447,4.56s,549.29us,0.00ns,550.73us,4.12us,547.67us,584.96us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr2,2.5.0,,594933,3399,4.56s,881.17us,0.00ns,882.56us,5.80us,875.12us,924.46us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr2,2.5.0,,594933,3266,4.56s,917.12us,0.00ns,918.56us,5.11us,912.75us,0.97ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3,2.7.1,,594933,3800,4.56s,787.08us,0.00ns,789.50us,4.92us,786.88us,871.67us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/fallback,2.7.1,,594933,2107,4.56s,1.42ms,0.00ns,1.42ms,6.61us,1.41ms,1.46ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/naive,2.7.1,,594933,3266,4.56s,916.96us,0.00ns,918.59us,4.86us,910.83us,0.95ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/wasm32,2.7.1,,594933,3019,4.53s,0.99ms,0.00ns,0.99ms,5.09us,0.99ms,1.04ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr3,2.7.1,,594933,3984,4.56s,750.83us,0.00ns,753.14us,4.66us,750.50us,792.25us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr3,2.5.0,,594933,2619,4.56s,1.14ms,0.00ns,1.15ms,5.77us,1.14ms,1.19ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr3,2.5.0,,594933,2596,4.55s,1.15ms,0.00ns,1.16ms,6.40us,1.15ms,1.20ms\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev f4d84cfc42),libc/memchr/oneshot,unknown,,664,1000000,1.30s,292.00ns,0.00ns,294.00ns,81.00ns,166.00ns,24.62us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot,0.6.4,,664,1000000,630.70ms,1.00ns,0.00ns,18.00ns,24.00ns,1.00ns,7.75us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,664,1000000,2.86s,250.00ns,0.00ns,269.00ns,66.00ns,166.00ns,25.04us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount,2.7.1,,664,1000000,691.36ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,9.67us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount/wasm32,2.7.1,,664,1000000,2.92s,291.00ns,0.00ns,280.00ns,73.00ns,166.00ns,24.67us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/oneshot,2.7.1,,664,1000000,1.30s,250.00ns,0.00ns,266.00ns,82.00ns,166.00ns,37.00us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/prebuilt,2.7.1,,664,1000000,1.24s,250.00ns,0.00ns,239.00ns,65.00ns,125.00ns,25.62us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/fallback,2.7.1,,664,1000000,1.06s,167.00ns,0.00ns,175.00ns,58.00ns,83.00ns,24.83us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/naive,2.7.1,,664,1000000,1.23s,291.00ns,0.00ns,278.00ns,65.00ns,166.00ns,25.46us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/wasm32,2.7.1,,664,1000000,3.46s,583.00ns,0.00ns,581.00ns,101.00ns,458.00ns,30.21us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr,2.7.1,,664,1000000,1.18s,208.00ns,0.00ns,216.00ns,64.00ns,125.00ns,25.04us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.12s,208.00ns,0.00ns,201.00ns,54.00ns,83.00ns,18.42us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.12s,208.00ns,0.00ns,205.00ns,68.00ns,83.00ns,24.71us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.18s,250.00ns,0.00ns,231.00ns,64.00ns,125.00ns,21.42us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr,2.5.0,,664,1000000,1.05s,167.00ns,0.00ns,185.00ns,63.00ns,83.00ns,24.54us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2,2.7.1,,664,1000000,1.65s,459.00ns,0.00ns,472.00ns,97.00ns,375.00ns,25.08us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/fallback,2.7.1,,664,1000000,1.30s,291.00ns,0.00ns,277.00ns,76.00ns,166.00ns,25.00us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/naive,2.7.1,,664,1000000,1.23s,291.00ns,0.00ns,279.00ns,81.00ns,166.00ns,24.96us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/wasm32,2.7.1,,664,1000000,4.18s,875.00ns,0.00ns,887.00ns,131.00ns,791.00ns,31.79us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr2,2.7.1,,664,1000000,1.60s,458.00ns,0.00ns,445.00ns,97.00ns,333.00ns,30.33us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr2,2.5.0,,664,1000000,1.23s,291.00ns,0.00ns,274.00ns,78.00ns,166.00ns,31.58us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr2,2.5.0,,664,1000000,1.30s,250.00ns,0.00ns,265.00ns,65.00ns,166.00ns,24.75us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3,2.7.1,,664,1000000,2.32s,791.00ns,0.00ns,774.00ns,132.00ns,625.00ns,31.46us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/fallback,2.7.1,,664,1000000,1.54s,417.00ns,0.00ns,415.00ns,90.00ns,291.00ns,30.29us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/naive,2.7.1,,664,1000000,1.42s,333.00ns,0.00ns,339.00ns,79.00ns,250.00ns,25.12us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/wasm32,2.7.1,,664,1000000,4.78s,1.21us,0.00ns,1.22us,153.00ns,1.08us,26.00us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr3,2.7.1,,664,1000000,2.08s,708.00ns,0.00ns,718.00ns,121.00ns,583.00ns,31.67us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr3,2.5.0,,664,1000000,1.48s,375.00ns,0.00ns,382.00ns,89.00ns,250.00ns,32.04us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.48s,375.00ns,0.00ns,367.00ns,82.00ns,250.00ns,24.71us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),libc/memchr/oneshot,unknown,,69,1000000,747.39ms,42.00ns,0.00ns,47.00ns,24.00ns,1.00ns,8.88us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot,0.6.4,,69,1000000,689.48ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,4.96us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,69,1000000,2.86s,250.00ns,0.00ns,247.00ns,63.00ns,125.00ns,23.46us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount,2.7.1,,69,1000000,690.34ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,7.21us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount/wasm32,2.7.1,,69,1000000,2.86s,250.00ns,0.00ns,252.00ns,74.00ns,125.00ns,24.46us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/oneshot,2.7.1,,69,1000000,747.55ms,42.00ns,0.00ns,39.00ns,16.00ns,1.00ns,9.00us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/prebuilt,2.7.1,,69,1000000,748.81ms,41.00ns,0.00ns,31.00ns,35.00ns,1.00ns,24.12us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/fallback,2.7.1,,69,1000000,750.57ms,41.00ns,0.00ns,31.00ns,27.00ns,1.00ns,13.71us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/naive,2.7.1,,69,1000000,753.10ms,41.00ns,0.00ns,28.00ns,34.00ns,1.00ns,21.54us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/wasm32,2.7.1,,69,1000000,2.98s,333.00ns,0.00ns,317.00ns,80.00ns,208.00ns,24.92us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr,2.7.1,,69,1000000,755.01ms,41.00ns,0.00ns,25.00ns,30.00ns,1.00ns,16.62us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,750.32ms,42.00ns,0.00ns,42.00ns,33.00ns,1.00ns,15.17us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,748.59ms,42.00ns,0.00ns,42.00ns,20.00ns,1.00ns,10.04us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/naive,2.5.0,,69,1000000,688.64ms,41.00ns,0.00ns,28.00ns,29.00ns,1.00ns,12.83us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr,2.5.0,,69,1000000,750.07ms,42.00ns,0.00ns,34.00ns,42.00ns,1.00ns,32.25us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev f4d84cfc42),libc/memchr/oneshot,unknown,,594933,238412,4.69s,12.50us,0.00ns,12.53us,503.00ns,12.38us,43.33us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot,0.6.4,,594933,468266,4.82s,6.33us,0.00ns,6.36us,260.00ns,6.21us,31.58us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,594933,123132,4.75s,23.79us,0.00ns,23.85us,714.00ns,23.67us,66.17us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount,2.7.1,,594933,223328,4.69s,13.38us,0.00ns,13.38us,456.00ns,13.21us,43.58us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount/wasm32,2.7.1,,594933,97207,4.69s,30.25us,0.00ns,30.34us,857.00ns,30.12us,68.29us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/oneshot,2.7.1,,594933,396033,4.81s,7.50us,0.00ns,7.52us,381.00ns,7.38us,37.42us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/prebuilt,2.7.1,,594933,396399,4.75s,7.50us,0.00ns,7.52us,367.00ns,7.17us,37.58us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/fallback,2.7.1,,594933,130823,4.63s,22.00us,0.00ns,22.88us,1.64us,21.29us,61.21us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/naive,2.7.1,,594933,16926,4.56s,176.92us,0.00ns,177.20us,10.22us,169.71us,276.62us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/wasm32,2.7.1,,594933,240340,4.99s,11.96us,0.00ns,11.97us,468.00ns,11.79us,41.12us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr,2.7.1,,594933,396595,4.76s,7.50us,0.00ns,7.51us,348.00ns,7.38us,38.25us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/oneshot,2.5.0,,594933,131146,4.63s,22.08us,0.00ns,22.83us,1.57us,21.00us,55.50us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/prebuilt,2.5.0,,594933,131450,4.63s,22.04us,0.00ns,22.77us,1.53us,21.00us,53.83us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/naive,2.5.0,,594933,16942,4.56s,176.92us,0.00ns,177.04us,10.96us,169.71us,279.17us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr,2.5.0,,594933,122842,4.63s,24.04us,0.00ns,24.37us,1.10us,21.88us,56.62us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2,2.7.1,,594933,242547,4.69s,12.29us,0.00ns,12.32us,428.00ns,11.88us,43.50us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/fallback,2.7.1,,594933,57763,4.56s,51.50us,0.00ns,51.89us,1.63us,50.33us,92.42us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/naive,2.7.1,,594933,13203,4.56s,226.42us,0.00ns,227.18us,2.92us,226.29us,277.62us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/wasm32,2.7.1,,594933,143981,4.75s,20.25us,0.00ns,20.30us,673.00ns,20.12us,52.29us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr2,2.7.1,,594933,249399,4.69s,11.96us,0.00ns,11.98us,425.00ns,11.83us,42.62us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr2,2.5.0,,594933,55493,4.56s,53.83us,0.00ns,54.01us,1.35us,53.42us,86.92us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr2,2.5.0,,594933,53536,4.56s,55.83us,0.00ns,55.99us,1.24us,55.67us,87.17us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3,2.7.1,,594933,173006,4.63s,17.25us,0.00ns,17.29us,581.00ns,17.17us,48.08us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/fallback,2.7.1,,594933,42529,4.56s,69.96us,0.00ns,70.49us,1.87us,68.58us,112.71us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/naive,2.7.1,,594933,10307,4.56s,290.08us,0.00ns,291.03us,3.03us,289.96us,327.79us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/wasm32,2.7.1,,594933,120448,4.75s,24.33us,0.00ns,24.37us,706.00ns,24.17us,65.17us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr3,2.7.1,,594933,173030,4.63s,17.25us,0.00ns,17.29us,571.00ns,17.17us,47.54us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr3,2.5.0,,594933,44859,4.56s,66.62us,0.00ns,66.83us,1.44us,65.46us,101.08us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr3,2.5.0,,594933,43740,4.56s,68.88us,0.00ns,68.54us,1.87us,66.67us,103.25us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev f4d84cfc42),libc/memchr/oneshot,unknown,,664,1000000,752.21ms,41.00ns,0.00ns,21.00ns,27.00ns,1.00ns,14.83us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot,0.6.4,,664,1000000,690.53ms,1.00ns,0.00ns,18.00ns,26.00ns,1.00ns,14.00us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,664,1000000,2.68s,250.00ns,0.00ns,269.00ns,70.00ns,166.00ns,24.83us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount,2.7.1,,664,1000000,688.82ms,1.00ns,0.00ns,19.00ns,36.00ns,1.00ns,21.08us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount/wasm32,2.7.1,,664,1000000,2.68s,291.00ns,0.00ns,278.00ns,68.00ns,166.00ns,23.75us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/oneshot,2.7.1,,664,1000000,688.42ms,1.00ns,0.00ns,19.00ns,25.00ns,1.00ns,9.67us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/prebuilt,2.7.1,,664,1000000,689.90ms,1.00ns,0.00ns,19.00ns,35.00ns,1.00ns,20.33us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/fallback,2.7.1,,664,1000000,690.44ms,42.00ns,0.00ns,34.00ns,29.00ns,1.00ns,14.29us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/naive,2.7.1,,664,1000000,1.18s,209.00ns,0.00ns,226.00ns,70.00ns,125.00ns,24.62us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/wasm32,2.7.1,,664,1000000,2.86s,250.00ns,0.00ns,263.00ns,75.00ns,125.00ns,24.79us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr,2.7.1,,664,1000000,688.37ms,1.00ns,0.00ns,18.00ns,23.00ns,1.00ns,7.79us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,690.20ms,41.00ns,0.00ns,29.00ns,30.00ns,1.00ns,20.50us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,688.97ms,41.00ns,0.00ns,29.00ns,34.00ns,1.00ns,20.71us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.12s,209.00ns,0.00ns,227.00ns,69.00ns,125.00ns,26.21us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr,2.5.0,,664,1000000,690.06ms,42.00ns,0.00ns,34.00ns,27.00ns,1.00ns,16.42us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2,2.7.1,,664,1000000,690.03ms,1.00ns,0.00ns,20.00ns,25.00ns,1.00ns,13.67us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/fallback,2.7.1,,664,1000000,811.10ms,83.00ns,0.00ns,65.00ns,33.00ns,1.00ns,16.58us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/naive,2.7.1,,664,1000000,1.24s,250.00ns,0.00ns,269.00ns,76.00ns,166.00ns,26.12us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/wasm32,2.7.1,,664,1000000,2.86s,250.00ns,0.00ns,267.00ns,67.00ns,166.00ns,23.50us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr2,2.7.1,,664,1000000,688.51ms,1.00ns,0.00ns,20.00ns,24.00ns,1.00ns,8.96us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr2,2.5.0,,664,1000000,810.30ms,83.00ns,0.00ns,69.00ns,34.00ns,1.00ns,19.46us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr2,2.5.0,,664,1000000,808.52ms,83.00ns,0.00ns,78.00ns,31.00ns,1.00ns,16.42us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3,2.7.1,,664,1000000,754.60ms,1.00ns,0.00ns,20.00ns,25.00ns,1.00ns,8.96us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/fallback,2.7.1,,664,1000000,873.77ms,83.00ns,0.00ns,88.00ns,39.00ns,1.00ns,29.38us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/naive,2.7.1,,664,1000000,1.42s,333.00ns,0.00ns,341.00ns,83.00ns,250.00ns,24.96us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/wasm32,2.7.1,,664,1000000,2.98s,291.00ns,0.00ns,273.00ns,60.00ns,166.00ns,18.21us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr3,2.7.1,,664,1000000,688.38ms,1.00ns,0.00ns,20.00ns,27.00ns,1.00ns,9.75us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr3,2.5.0,,664,1000000,873.50ms,83.00ns,0.00ns,87.00ns,33.00ns,1.00ns,17.00us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr3,2.5.0,,664,1000000,931.89ms,83.00ns,0.00ns,94.00ns,48.00ns,1.00ns,31.00us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),libc/memchr/oneshot,unknown,,69,1000000,752.63ms,1.00ns,0.00ns,16.00ns,35.00ns,1.00ns,16.75us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot,0.6.4,,69,1000000,688.63ms,1.00ns,0.00ns,16.00ns,26.00ns,1.00ns,15.50us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,69,1000000,2.86s,250.00ns,0.00ns,243.00ns,68.00ns,125.00ns,24.50us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount,2.7.1,,69,1000000,751.72ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,9.21us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount/wasm32,2.7.1,,69,1000000,2.92s,250.00ns,0.00ns,252.00ns,96.00ns,125.00ns,54.21us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/oneshot,2.7.1,,69,1000000,688.85ms,1.00ns,0.00ns,16.00ns,29.00ns,1.00ns,16.17us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/prebuilt,2.7.1,,69,1000000,754.85ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,4.71us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/fallback,2.7.1,,69,1000000,753.41ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,9.12us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/naive,2.7.1,,69,1000000,754.70ms,41.00ns,0.00ns,28.00ns,34.00ns,1.00ns,23.58us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/wasm32,2.7.1,,69,1000000,2.92s,250.00ns,0.00ns,252.00ns,64.00ns,125.00ns,23.96us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr,2.7.1,,69,1000000,689.14ms,1.00ns,0.00ns,16.00ns,25.00ns,1.00ns,14.38us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,688.74ms,1.00ns,0.00ns,17.00ns,35.00ns,1.00ns,21.38us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,690.02ms,1.00ns,0.00ns,17.00ns,20.00ns,1.00ns,1.75us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/naive,2.5.0,,69,1000000,754.55ms,41.00ns,0.00ns,28.00ns,32.00ns,1.00ns,20.92us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr,2.5.0,,69,1000000,688.93ms,1.00ns,0.00ns,16.00ns,24.00ns,1.00ns,9.21us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2,2.7.1,,69,1000000,688.21ms,1.00ns,0.00ns,16.00ns,26.00ns,1.00ns,16.67us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/fallback,2.7.1,,69,1000000,753.21ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,7.21us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/naive,2.7.1,,69,1000000,751.72ms,42.00ns,0.00ns,36.00ns,25.00ns,1.00ns,12.00us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/wasm32,2.7.1,,69,1000000,2.86s,250.00ns,0.00ns,256.00ns,80.00ns,166.00ns,25.17us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr2,2.7.1,,69,1000000,689.62ms,1.00ns,0.00ns,16.00ns,26.00ns,1.00ns,13.79us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr2,2.5.0,,69,1000000,689.34ms,1.00ns,0.00ns,16.00ns,23.00ns,1.00ns,9.96us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr2,2.5.0,,69,1000000,689.26ms,1.00ns,0.00ns,17.00ns,34.00ns,1.00ns,21.17us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3,2.7.1,,69,1000000,688.67ms,1.00ns,0.00ns,16.00ns,27.00ns,1.00ns,16.92us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/fallback,2.7.1,,69,1000000,689.24ms,1.00ns,0.00ns,17.00ns,21.00ns,1.00ns,6.96us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/naive,2.7.1,,69,1000000,748.51ms,42.00ns,0.00ns,45.00ns,17.00ns,1.00ns,8.88us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/wasm32,2.7.1,,69,1000000,2.86s,250.00ns,0.00ns,250.00ns,78.00ns,125.00ns,25.00us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr3,2.7.1,,69,1000000,689.55ms,1.00ns,0.00ns,16.00ns,28.00ns,1.00ns,17.33us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr3,2.5.0,,69,1000000,688.54ms,1.00ns,0.00ns,17.00ns,22.00ns,1.00ns,6.79us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr3,2.5.0,,69,1000000,752.18ms,1.00ns,0.00ns,18.00ns,20.00ns,1.00ns,167.00ns\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev f4d84cfc42),libc/memchr/oneshot,unknown,,,1000000,689.87ms,1.00ns,0.00ns,15.00ns,19.00ns,1.00ns,125.00ns\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot,0.6.4,,,1000000,688.81ms,1.00ns,0.00ns,15.00ns,24.00ns,1.00ns,9.17us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,,1000000,2.80s,250.00ns,0.00ns,242.00ns,66.00ns,125.00ns,23.79us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount,2.7.1,,,1000000,752.18ms,1.00ns,0.00ns,15.00ns,26.00ns,1.00ns,12.29us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount/wasm32,2.7.1,,,1000000,2.92s,250.00ns,0.00ns,244.00ns,77.00ns,125.00ns,24.00us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/oneshot,2.7.1,,,1000000,687.78ms,1.00ns,0.00ns,15.00ns,19.00ns,1.00ns,125.00ns\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/prebuilt,2.7.1,,,1000000,754.83ms,1.00ns,0.00ns,15.00ns,22.00ns,1.00ns,9.21us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/fallback,2.7.1,,,1000000,689.17ms,1.00ns,0.00ns,15.00ns,21.00ns,1.00ns,4.88us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/naive,2.7.1,,,1000000,688.26ms,1.00ns,0.00ns,15.00ns,22.00ns,1.00ns,9.92us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/wasm32,2.7.1,,,1000000,2.92s,250.00ns,0.00ns,245.00ns,76.00ns,125.00ns,24.67us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr,2.7.1,,,1000000,689.38ms,1.00ns,0.00ns,15.00ns,23.00ns,1.00ns,9.83us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/oneshot,2.5.0,,,1000000,681.19ms,1.00ns,0.00ns,15.00ns,24.00ns,1.00ns,9.50us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/prebuilt,2.5.0,,,1000000,689.21ms,1.00ns,0.00ns,15.00ns,23.00ns,1.00ns,9.38us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/naive,2.5.0,,,1000000,689.01ms,1.00ns,0.00ns,15.00ns,26.00ns,1.00ns,13.08us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr,2.5.0,,,1000000,689.75ms,1.00ns,0.00ns,15.00ns,19.00ns,1.00ns,125.00ns\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2,2.7.1,,,1000000,751.01ms,1.00ns,0.00ns,15.00ns,23.00ns,1.00ns,13.00us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/fallback,2.7.1,,,1000000,688.45ms,1.00ns,0.00ns,15.00ns,21.00ns,1.00ns,7.08us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/naive,2.7.1,,,1000000,752.19ms,1.00ns,0.00ns,15.00ns,29.00ns,1.00ns,16.79us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/wasm32,2.7.1,,,1000000,2.80s,250.00ns,0.00ns,248.00ns,69.00ns,125.00ns,23.83us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr2,2.7.1,,,1000000,685.82ms,1.00ns,0.00ns,15.00ns,29.00ns,1.00ns,14.96us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr2,2.5.0,,,1000000,687.96ms,1.00ns,0.00ns,15.00ns,25.00ns,1.00ns,14.08us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr2,2.5.0,,,1000000,689.23ms,1.00ns,0.00ns,15.00ns,21.00ns,1.00ns,7.25us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3,2.7.1,,,1000000,753.21ms,1.00ns,0.00ns,15.00ns,20.00ns,1.00ns,4.62us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/fallback,2.7.1,,,1000000,688.30ms,1.00ns,0.00ns,15.00ns,22.00ns,1.00ns,7.00us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/naive,2.7.1,,,1000000,688.85ms,1.00ns,0.00ns,15.00ns,23.00ns,1.00ns,9.33us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/wasm32,2.7.1,,,1000000,2.86s,250.00ns,0.00ns,248.00ns,59.00ns,125.00ns,24.79us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr3,2.7.1,,,1000000,688.96ms,1.00ns,0.00ns,15.00ns,26.00ns,1.00ns,16.12us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr3,2.5.0,,,1000000,686.83ms,1.00ns,0.00ns,15.00ns,21.00ns,1.00ns,6.96us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr3,2.5.0,,,1000000,750.57ms,1.00ns,0.00ns,15.00ns,28.00ns,1.00ns,14.25us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev f4d84cfc42),libc/memchr/oneshot,unknown,,594933,204580,4.69s,14.58us,0.00ns,14.62us,539.00ns,14.42us,46.21us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot,0.6.4,,594933,468242,4.87s,6.33us,0.00ns,6.36us,246.00ns,6.21us,31.79us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,594933,123173,4.75s,23.79us,0.00ns,23.83us,714.00ns,23.67us,63.67us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount,2.7.1,,594933,223265,4.68s,13.38us,0.00ns,13.39us,490.00ns,13.21us,45.17us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount/wasm32,2.7.1,,594933,97262,4.75s,30.25us,0.00ns,30.33us,836.00ns,30.12us,64.75us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/oneshot,2.7.1,,594933,331448,4.76s,9.00us,0.00ns,9.00us,414.00ns,8.83us,40.21us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/prebuilt,2.7.1,,594933,330341,4.75s,8.96us,0.00ns,9.03us,429.00ns,8.83us,39.75us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/fallback,2.7.1,,594933,113139,4.63s,25.75us,0.00ns,26.47us,1.38us,25.17us,58.33us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/naive,2.7.1,,594933,14758,4.56s,202.67us,0.00ns,203.24us,7.33us,182.21us,367.42us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/wasm32,2.7.1,,594933,197113,4.93s,14.67us,0.00ns,14.70us,539.00ns,14.54us,45.46us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr,2.7.1,,594933,337788,4.75s,8.83us,0.00ns,8.83us,382.00ns,8.67us,39.75us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/oneshot,2.5.0,,594933,111288,4.63s,26.83us,0.00ns,26.91us,810.00ns,25.92us,57.17us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/prebuilt,2.5.0,,594933,111742,4.62s,26.75us,0.00ns,26.80us,818.00ns,25.75us,62.04us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr,2.5.0,,594933,113748,4.63s,26.25us,0.00ns,26.32us,827.00ns,25.25us,60.21us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2,2.7.1,,594933,178345,4.63s,16.75us,0.00ns,16.77us,542.00ns,16.58us,67.96us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/fallback,2.7.1,,594933,50470,4.56s,59.50us,0.00ns,59.39us,1.83us,56.46us,102.67us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/naive,2.7.1,,594933,11152,4.56s,268.25us,0.00ns,268.96us,3.69us,264.29us,305.58us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/wasm32,2.7.1,,594933,111951,4.75s,26.25us,0.00ns,26.29us,740.00ns,26.08us,66.58us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr2,2.7.1,,594933,179150,4.63s,16.67us,0.00ns,16.70us,539.00ns,16.50us,47.33us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr2,2.5.0,,594933,48602,4.56s,61.54us,0.00ns,61.68us,1.83us,59.12us,99.38us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr2,2.5.0,,594933,47593,4.56s,62.88us,0.00ns,62.98us,1.59us,61.17us,96.71us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3,2.7.1,,594933,129575,4.63s,23.04us,0.00ns,23.10us,714.00ns,22.92us,53.75us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/fallback,2.7.1,,594933,37282,4.56s,80.21us,0.00ns,80.42us,1.71us,78.58us,114.75us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/naive,2.7.1,,594933,10170,4.56s,294.00us,0.00ns,294.96us,3.14us,293.83us,327.04us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/wasm32,2.7.1,,594933,89784,4.69s,32.83us,0.00ns,32.89us,852.00ns,32.67us,64.29us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr3,2.7.1,,594933,125973,4.63s,23.71us,0.00ns,23.77us,720.00ns,23.58us,57.67us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr3,2.5.0,,594933,39667,4.55s,75.38us,0.00ns,75.58us,1.79us,72.96us,105.75us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr3,2.5.0,,594933,38669,4.56s,77.54us,0.00ns,77.53us,1.94us,73.62us,120.08us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev f4d84cfc42),libc/memchr/oneshot,unknown,,664,1000000,751.65ms,41.00ns,0.00ns,22.00ns,23.00ns,1.00ns,9.12us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot,0.6.4,,664,1000000,752.78ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,7.12us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,664,1000000,2.92s,250.00ns,0.00ns,271.00ns,78.00ns,166.00ns,25.04us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount,2.7.1,,664,1000000,688.92ms,1.00ns,0.00ns,19.00ns,34.00ns,1.00ns,23.38us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount/wasm32,2.7.1,,664,1000000,2.98s,292.00ns,0.00ns,288.00ns,68.00ns,166.00ns,25.00us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/oneshot,2.7.1,,664,1000000,686.31ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,13.71us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/prebuilt,2.7.1,,664,1000000,753.11ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,9.33us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/fallback,2.7.1,,664,1000000,751.77ms,42.00ns,0.00ns,37.00ns,24.00ns,1.00ns,15.75us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/naive,2.7.1,,664,1000000,1.24s,250.00ns,0.00ns,246.00ns,66.00ns,125.00ns,24.67us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/wasm32,2.7.1,,664,1000000,2.92s,250.00ns,0.00ns,268.00ns,70.00ns,166.00ns,23.12us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr,2.7.1,,664,1000000,689.11ms,1.00ns,0.00ns,19.00ns,26.00ns,1.00ns,13.75us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,752.65ms,42.00ns,0.00ns,33.00ns,28.00ns,1.00ns,20.88us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,753.24ms,42.00ns,0.00ns,33.00ns,19.00ns,1.00ns,9.29us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.24s,250.00ns,0.00ns,234.00ns,71.00ns,125.00ns,31.17us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr,2.5.0,,664,1000000,753.92ms,42.00ns,0.00ns,34.00ns,30.00ns,1.00ns,21.42us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2,2.7.1,,664,1000000,688.64ms,1.00ns,0.00ns,21.00ns,22.00ns,1.00ns,6.71us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/fallback,2.7.1,,664,1000000,808.96ms,83.00ns,0.00ns,69.00ns,36.00ns,1.00ns,16.17us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/naive,2.7.1,,664,1000000,1.30s,292.00ns,0.00ns,290.00ns,69.00ns,166.00ns,25.00us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/wasm32,2.7.1,,664,1000000,2.92s,291.00ns,0.00ns,279.00ns,77.00ns,166.00ns,25.12us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr2,2.7.1,,664,1000000,752.65ms,41.00ns,0.00ns,22.00ns,28.00ns,1.00ns,14.21us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr2,2.5.0,,664,1000000,808.69ms,83.00ns,0.00ns,74.00ns,35.00ns,1.00ns,19.29us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr2,2.5.0,,664,1000000,872.12ms,83.00ns,0.00ns,83.00ns,43.00ns,1.00ns,23.29us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3,2.7.1,,664,1000000,751.84ms,41.00ns,0.00ns,22.00ns,25.00ns,1.00ns,9.67us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/fallback,2.7.1,,664,1000000,871.61ms,84.00ns,0.00ns,95.00ns,35.00ns,1.00ns,16.50us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/naive,2.7.1,,664,1000000,1.48s,375.00ns,0.00ns,361.00ns,93.00ns,250.00ns,25.67us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/wasm32,2.7.1,,664,1000000,3.04s,292.00ns,0.00ns,304.00ns,74.00ns,208.00ns,23.58us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr3,2.7.1,,664,1000000,750.90ms,41.00ns,0.00ns,24.00ns,28.00ns,1.00ns,16.67us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr3,2.5.0,,664,1000000,870.86ms,84.00ns,0.00ns,96.00ns,46.00ns,1.00ns,24.46us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr3,2.5.0,,664,1000000,935.10ms,84.00ns,0.00ns,104.00ns,42.00ns,1.00ns,16.21us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),libc/memchr/oneshot,unknown,,69,1000000,754.52ms,1.00ns,0.00ns,17.00ns,21.00ns,1.00ns,7.29us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot,0.6.4,,69,1000000,689.14ms,1.00ns,0.00ns,16.00ns,28.00ns,1.00ns,16.88us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,69,1000000,2.98s,250.00ns,0.00ns,258.00ns,72.00ns,166.00ns,28.75us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount,2.7.1,,69,1000000,689.36ms,1.00ns,0.00ns,17.00ns,27.00ns,1.00ns,16.67us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount/wasm32,2.7.1,,69,1000000,2.86s,250.00ns,0.00ns,252.00ns,63.00ns,125.00ns,22.79us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/oneshot,2.7.1,,69,1000000,688.83ms,1.00ns,0.00ns,16.00ns,21.00ns,1.00ns,6.92us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/prebuilt,2.7.1,,69,1000000,681.92ms,1.00ns,0.00ns,16.00ns,26.00ns,1.00ns,14.12us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/fallback,2.7.1,,69,1000000,752.90ms,1.00ns,0.00ns,17.00ns,24.00ns,1.00ns,9.88us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/naive,2.7.1,,69,1000000,753.24ms,41.00ns,0.00ns,28.00ns,30.00ns,1.00ns,12.42us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/wasm32,2.7.1,,69,1000000,2.92s,250.00ns,0.00ns,251.00ns,59.00ns,125.00ns,19.79us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr,2.7.1,,69,1000000,688.65ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,625.00ns\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,688.79ms,1.00ns,0.00ns,17.00ns,20.00ns,1.00ns,167.00ns\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,688.89ms,1.00ns,0.00ns,17.00ns,26.00ns,1.00ns,13.79us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/naive,2.5.0,,69,1000000,753.85ms,41.00ns,0.00ns,28.00ns,23.00ns,1.00ns,9.75us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr,2.5.0,,69,1000000,753.30ms,1.00ns,0.00ns,17.00ns,24.00ns,1.00ns,8.00us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2,2.7.1,,69,1000000,689.19ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,9.71us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/fallback,2.7.1,,69,1000000,753.64ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,4.92us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/naive,2.7.1,,69,1000000,752.55ms,42.00ns,0.00ns,37.00ns,23.00ns,1.00ns,9.83us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/wasm32,2.7.1,,69,1000000,2.86s,250.00ns,0.00ns,258.00ns,60.00ns,125.00ns,24.29us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr2,2.7.1,,69,1000000,689.48ms,1.00ns,0.00ns,17.00ns,29.00ns,1.00ns,19.88us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr2,2.5.0,,69,1000000,689.58ms,1.00ns,0.00ns,17.00ns,28.00ns,1.00ns,16.33us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr2,2.5.0,,69,1000000,688.66ms,1.00ns,0.00ns,18.00ns,25.00ns,1.00ns,9.46us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3,2.7.1,,69,1000000,688.46ms,1.00ns,0.00ns,17.00ns,28.00ns,1.00ns,16.33us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/fallback,2.7.1,,69,1000000,689.05ms,1.00ns,0.00ns,18.00ns,39.00ns,1.00ns,23.46us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/naive,2.7.1,,69,1000000,749.32ms,42.00ns,0.00ns,45.00ns,32.00ns,1.00ns,20.92us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/wasm32,2.7.1,,69,1000000,2.98s,291.00ns,0.00ns,280.00ns,68.00ns,166.00ns,24.96us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr3,2.7.1,,69,1000000,689.16ms,1.00ns,0.00ns,18.00ns,24.00ns,1.00ns,9.96us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr3,2.5.0,,69,1000000,688.78ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,9.29us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr3,2.5.0,,69,1000000,689.63ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,9.38us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),libc/memchr/oneshot,unknown,,594933,29455,4.56s,101.50us,0.00ns,101.81us,1.67us,101.17us,135.17us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot,0.6.4,,594933,455584,4.82s,6.54us,0.00ns,6.53us,228.00ns,6.42us,32.75us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,594933,122971,4.75s,23.79us,0.00ns,23.85us,719.00ns,23.67us,55.33us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount,2.7.1,,594933,223312,4.69s,13.38us,0.00ns,13.38us,483.00ns,13.21us,44.38us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount/wasm32,2.7.1,,594933,97214,4.75s,30.25us,0.00ns,30.34us,816.00ns,30.12us,61.00us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/oneshot,2.7.1,,594933,26217,4.56s,114.04us,0.00ns,114.38us,1.83us,113.38us,164.17us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/prebuilt,2.7.1,,594933,30657,4.56s,83.83us,0.00ns,97.81us,3.17ms,62.92us,554.88ms\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/fallback,2.7.1,,594933,28574,4.56s,104.96us,0.00ns,104.95us,2.15us,102.71us,155.25us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/naive,2.7.1,,594933,12734,4.55s,234.58us,0.00ns,235.55us,3.83us,228.71us,271.17us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/wasm32,2.7.1,,594933,19781,4.56s,150.42us,0.00ns,151.09us,2.20us,149.33us,192.79us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr,2.7.1,,594933,28116,4.56s,106.08us,0.00ns,106.65us,1.70us,105.46us,137.00us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/oneshot,2.5.0,,594933,27883,4.56s,107.21us,0.00ns,107.55us,1.77us,106.29us,145.00us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/prebuilt,2.5.0,,594933,29130,4.56s,97.88us,0.00ns,102.94us,6.48us,96.96us,140.29us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/naive,2.5.0,,594933,12771,4.56s,233.71us,0.00ns,234.88us,3.90us,228.79us,273.71us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr,2.5.0,,594933,28336,4.56s,105.50us,0.00ns,105.82us,1.74us,104.79us,137.25us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2,2.7.1,,594933,14534,4.56s,206.12us,0.00ns,206.37us,2.12us,205.00us,237.58us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/fallback,2.7.1,,594933,10357,4.54s,230.58us,0.00ns,289.62us,5.43ms,229.71us,552.59ms\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/naive,2.7.1,,594933,9189,4.56s,326.25us,0.00ns,326.44us,3.43us,322.88us,401.62us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/wasm32,2.7.1,,594933,8799,4.56s,339.46us,0.00ns,340.42us,3.20us,338.42us,376.92us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr2,2.7.1,,594933,14811,4.56s,202.12us,0.00ns,202.50us,2.12us,200.67us,233.17us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr2,2.5.0,,594933,12621,4.56s,236.96us,0.00ns,237.66us,2.75us,236.33us,297.54us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr2,2.5.0,,594933,12059,4.56s,247.75us,0.00ns,248.73us,3.06us,246.67us,287.62us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3,2.7.1,,594933,10743,4.56s,278.42us,0.00ns,279.22us,2.84us,277.54us,314.29us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/fallback,2.7.1,,594933,8560,4.56s,349.42us,0.00ns,350.43us,3.34us,348.50us,403.62us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/naive,2.7.1,,594933,7358,4.56s,406.71us,0.00ns,407.70us,3.50us,405.04us,449.88us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/wasm32,2.7.1,,594933,6411,4.56s,466.29us,0.00ns,467.42us,3.67us,465.04us,508.75us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr3,2.7.1,,594933,10859,4.56s,275.46us,0.00ns,276.23us,3.27us,274.25us,355.12us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr3,2.5.0,,594933,8140,4.96s,358.67us,0.00ns,368.30us,60.48us,354.50us,1.68ms\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr3,2.5.0,,594933,8395,4.56s,355.67us,0.00ns,357.31us,3.55us,354.42us,398.21us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),libc/memchr/oneshot,unknown,,664,1000000,750.66ms,42.00ns,0.00ns,43.00ns,31.00ns,1.00ns,19.21us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot,0.6.4,,664,1000000,691.78ms,1.00ns,0.00ns,18.00ns,22.00ns,1.00ns,9.25us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,664,1000000,2.92s,250.00ns,0.00ns,270.00ns,80.00ns,166.00ns,25.08us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount,2.7.1,,664,1000000,690.55ms,1.00ns,0.00ns,19.00ns,30.00ns,1.00ns,16.88us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount/wasm32,2.7.1,,664,1000000,2.84s,291.00ns,0.00ns,282.00ns,76.00ns,166.00ns,24.67us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/oneshot,2.7.1,,664,1000000,754.89ms,42.00ns,0.00ns,34.00ns,28.00ns,1.00ns,16.21us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/prebuilt,2.7.1,,664,1000000,690.14ms,41.00ns,0.00ns,30.00ns,31.00ns,1.00ns,13.29us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/fallback,2.7.1,,664,1000000,809.60ms,83.00ns,0.00ns,68.00ns,36.00ns,1.00ns,16.75us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/naive,2.7.1,,664,1000000,1.30s,292.00ns,0.00ns,289.00ns,73.00ns,166.00ns,24.71us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/wasm32,2.7.1,,664,1000000,2.98s,333.00ns,0.00ns,317.00ns,72.00ns,208.00ns,23.38us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr,2.7.1,,664,1000000,753.82ms,41.00ns,0.00ns,29.00ns,24.00ns,1.00ns,9.33us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,811.99ms,83.00ns,0.00ns,65.00ns,34.00ns,1.00ns,16.62us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,810.83ms,83.00ns,0.00ns,65.00ns,40.00ns,1.00ns,23.58us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.18s,250.00ns,0.00ns,239.00ns,80.00ns,125.00ns,31.04us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr,2.5.0,,664,1000000,750.38ms,42.00ns,0.00ns,56.00ns,40.00ns,1.00ns,22.71us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2,2.7.1,,664,1000000,807.65ms,83.00ns,0.00ns,79.00ns,28.00ns,1.00ns,13.75us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/fallback,2.7.1,,664,1000000,935.09ms,84.00ns,0.00ns,103.00ns,42.00ns,1.00ns,23.17us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/naive,2.7.1,,664,1000000,1.30s,292.00ns,0.00ns,300.00ns,75.00ns,208.00ns,24.71us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/wasm32,2.7.1,,664,1000000,3.10s,375.00ns,0.00ns,389.00ns,87.00ns,250.00ns,25.50us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr2,2.7.1,,664,1000000,807.10ms,83.00ns,0.00ns,82.00ns,33.00ns,1.00ns,16.38us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr2,2.5.0,,664,1000000,932.83ms,125.00ns,0.00ns,113.00ns,44.00ns,1.00ns,17.08us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr2,2.5.0,,664,1000000,933.63ms,125.00ns,0.00ns,114.00ns,41.00ns,1.00ns,21.88us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3,2.7.1,,664,1000000,0.99s,166.00ns,0.00ns,149.00ns,58.00ns,41.00ns,21.33us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/fallback,2.7.1,,664,1000000,1.06s,167.00ns,0.00ns,160.00ns,47.00ns,41.00ns,25.79us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/naive,2.7.1,,664,1000000,1.42s,334.00ns,0.00ns,345.00ns,79.00ns,250.00ns,25.00us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/wasm32,2.7.1,,664,1000000,3.34s,459.00ns,0.00ns,479.00ns,105.00ns,375.00ns,28.12us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr3,2.7.1,,664,1000000,1.06s,166.00ns,0.00ns,149.00ns,59.00ns,41.00ns,24.96us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr3,2.5.0,,664,1000000,1.06s,167.00ns,0.00ns,167.00ns,51.00ns,42.00ns,18.04us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.06s,166.00ns,0.00ns,156.00ns,58.00ns,41.00ns,24.62us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),libc/memchr/oneshot,unknown,,69,1000000,690.95ms,1.00ns,0.00ns,19.00ns,20.00ns,1.00ns,167.00ns\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot,0.6.4,,69,1000000,690.35ms,1.00ns,0.00ns,16.00ns,24.00ns,1.00ns,7.33us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,69,1000000,3.32s,250.00ns,0.00ns,261.00ns,3.96us,125.00ns,3.87ms\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount,2.7.1,,69,1000000,693.04ms,1.00ns,0.00ns,17.00ns,21.00ns,1.00ns,6.58us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount/wasm32,2.7.1,,69,1000000,2.86s,250.00ns,0.00ns,249.00ns,51.00ns,125.00ns,17.21us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/oneshot,2.7.1,,69,1000000,690.90ms,1.00ns,0.00ns,17.00ns,21.00ns,1.00ns,6.88us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/prebuilt,2.7.1,,69,1000000,691.72ms,1.00ns,0.00ns,17.00ns,24.00ns,1.00ns,9.88us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/fallback,2.7.1,,69,1000000,690.49ms,1.00ns,0.00ns,19.00ns,30.00ns,1.00ns,17.54us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/naive,2.7.1,,69,1000000,690.20ms,41.00ns,0.00ns,29.00ns,21.00ns,1.00ns,7.12us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/wasm32,2.7.1,,69,1000000,2.92s,292.00ns,0.00ns,284.00ns,61.00ns,166.00ns,23.92us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr,2.7.1,,69,1000000,693.21ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,6.38us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,690.63ms,41.00ns,0.00ns,24.00ns,31.00ns,1.00ns,21.08us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,690.31ms,41.00ns,0.00ns,24.00ns,21.00ns,1.00ns,6.83us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/naive,2.5.0,,69,1000000,690.52ms,41.00ns,0.00ns,28.00ns,33.00ns,1.00ns,21.04us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr,2.5.0,,69,1000000,689.36ms,1.00ns,0.00ns,20.00ns,22.00ns,1.00ns,7.00us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2,2.7.1,,69,1000000,689.82ms,41.00ns,0.00ns,24.00ns,22.00ns,1.00ns,8.17us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/fallback,2.7.1,,69,1000000,753.76ms,42.00ns,0.00ns,33.00ns,36.00ns,1.00ns,23.29us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/naive,2.7.1,,69,1000000,749.46ms,42.00ns,0.00ns,37.00ns,26.00ns,1.00ns,16.21us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr2/wasm32,2.7.1,,69,1000000,2.98s,333.00ns,0.00ns,318.00ns,76.00ns,208.00ns,30.92us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr2,2.7.1,,69,1000000,747.09ms,42.00ns,0.00ns,40.00ns,23.00ns,1.00ns,16.50us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr2,2.5.0,,69,1000000,750.97ms,42.00ns,0.00ns,36.00ns,21.00ns,1.00ns,7.92us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr2,2.5.0,,69,1000000,750.25ms,42.00ns,0.00ns,36.00ns,23.00ns,1.00ns,16.38us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3,2.7.1,,69,1000000,868.04ms,83.00ns,0.00ns,74.00ns,49.00ns,1.00ns,23.00us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/fallback,2.7.1,,69,1000000,747.52ms,42.00ns,0.00ns,52.00ns,45.00ns,1.00ns,21.54us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/naive,2.7.1,,69,1000000,747.80ms,42.00ns,0.00ns,45.00ns,21.00ns,1.00ns,9.75us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr3/wasm32,2.7.1,,69,1000000,3.04s,375.00ns,0.00ns,361.00ns,85.00ns,250.00ns,24.75us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr3,2.7.1,,69,1000000,868.28ms,83.00ns,0.00ns,81.00ns,33.00ns,1.00ns,17.17us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr3,2.5.0,,69,1000000,810.84ms,42.00ns,0.00ns,53.00ns,31.00ns,1.00ns,15.79us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr3,2.5.0,,69,1000000,746.53ms,42.00ns,0.00ns,54.00ns,28.00ns,1.00ns,9.92us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),libc/memchr/oneshot,unknown,,594933,2825,4.56s,1.06ms,0.00ns,1.06ms,17.13us,1.05ms,1.27ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot,0.6.4,,594933,455548,4.82s,6.54us,0.00ns,6.54us,245.00ns,6.42us,31.50us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,594933,123137,4.81s,23.79us,0.00ns,23.85us,728.00ns,23.67us,54.71us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount,2.7.1,,594933,176425,4.64s,13.38us,0.00ns,16.95us,1.34ms,13.21us,564.72ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount/wasm32,2.7.1,,594933,97131,4.75s,30.25us,0.00ns,30.33us,811.00ns,30.12us,62.63us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/oneshot,2.7.1,,594933,4646,4.56s,643.71us,0.00ns,645.74us,4.52us,643.50us,705.42us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/prebuilt,2.7.1,,594933,5116,4.56s,584.50us,0.00ns,586.35us,4.75us,584.29us,701.08us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/fallback,2.7.1,,594933,3609,4.56s,829.29us,0.00ns,831.28us,5.05us,827.33us,873.46us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/naive,2.7.1,,594933,4281,4.56s,698.50us,0.00ns,700.81us,5.09us,697.42us,743.25us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/wasm32,2.7.1,,594933,3904,4.56s,765.71us,0.00ns,767.89us,4.51us,765.42us,812.79us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr,2.7.1,,594933,5387,4.56s,555.17us,0.00ns,556.87us,4.07us,554.83us,589.92us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/oneshot,2.5.0,,594933,3314,4.56s,902.67us,0.00ns,905.28us,5.07us,901.38us,0.96ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/prebuilt,2.5.0,,594933,3314,4.56s,903.33us,0.00ns,905.43us,4.90us,901.58us,936.58us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/naive,2.5.0,,594933,3866,4.82s,698.67us,0.00ns,844.15us,8.90ms,697.33us,554.37ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr,2.5.0,,594933,3658,4.56s,818.17us,0.00ns,820.19us,4.77us,816.58us,855.54us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),libc/memchr/oneshot,unknown,,664,1000000,2.26s,750.00ns,0.00ns,771.00ns,115.00ns,666.00ns,25.71us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot,0.6.4,,664,1000000,692.96ms,1.00ns,0.00ns,18.00ns,26.00ns,1.00ns,9.88us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,664,1000000,2.92s,291.00ns,0.00ns,272.00ns,83.00ns,166.00ns,24.71us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount,2.7.1,,664,1000000,752.92ms,1.00ns,0.00ns,19.00ns,28.00ns,1.00ns,14.25us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/onlycount/wasm32,2.7.1,,664,1000000,2.86s,292.00ns,0.00ns,282.00ns,67.00ns,166.00ns,24.12us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/oneshot,2.7.1,,664,1000000,2.08s,666.00ns,0.00ns,657.00ns,120.00ns,541.00ns,32.25us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/prebuilt,2.7.1,,664,1000000,1.90s,583.00ns,0.00ns,592.00ns,112.00ns,458.00ns,33.25us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/fallback,2.7.1,,664,1000000,1.36s,333.00ns,0.00ns,317.00ns,86.00ns,208.00ns,31.04us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/naive,2.7.1,,664,1000000,1.29s,291.00ns,0.00ns,278.00ns,80.00ns,166.00ns,25.71us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memchr/wasm32,2.7.1,,664,1000000,4.42s,1.04us,0.00ns,1.04us,135.00ns,916.00ns,25.92us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchr/memrchr,2.7.1,,664,1000000,1.84s,542.00ns,0.00ns,560.00ns,105.00ns,375.00ns,25.50us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.36s,417.00ns,0.00ns,420.00ns,91.00ns,333.00ns,25.38us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.48s,417.00ns,0.00ns,419.00ns,92.00ns,333.00ns,25.17us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memchr/naive,2.5.0,,664,1000000,1.30s,291.00ns,0.00ns,278.00ns,84.00ns,166.00ns,49.04us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev f4d84cfc42),rust/memchrold/memrchr,2.5.0,,664,1000000,1.36s,292.00ns,0.00ns,309.00ns,80.00ns,208.00ns,24.79us\nmemmem/byterank/binary,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,33335253,59,4.56s,50.73ms,0.00ns,50.99ms,442.14us,50.65ms,51.92ms\nmemmem/byterank/binary,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,33335253,32,4.61s,94.83ms,250.00ns,94.82ms,21.07us,94.78ms,94.86ms\nmemmem/byterank/binary,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,33335253,32,4.62s,94.84ms,666.00ns,94.85ms,55.36us,94.80ms,95.14ms\nmemmem/byterank/binary,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,33335253,292,4.59s,10.22ms,104.00ns,10.30ms,347.68us,10.13ms,13.01ms\nmemmem/byterank/binary,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,33335253,294,4.56s,10.21ms,104.00ns,10.23ms,42.88us,10.16ms,10.36ms\nmemmem/byterank/binary,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/binary,2.7.1,,33335253,2906,4.56s,1.03ms,0.00ns,1.03ms,7.95us,1.02ms,1.09ms\nmemmem/byterank/binary,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,33335253,250,4.56s,11.93ms,792.00ns,12.01ms,391.11us,11.52ms,13.41ms\nmemmem/byterank/binary,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,33335253,63,4.62s,47.85ms,0.00ns,47.85ms,31.80us,47.77ms,47.91ms\nmemmem/byterank/binary,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,33335253,152,4.56s,19.80ms,416.00ns,19.80ms,55.42us,19.68ms,20.06ms\nmemmem/byterank/binary,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,33335253,216,4.56s,13.91ms,21.00ns,13.91ms,21.21us,13.87ms,14.00ms\nmemmem/byterank/binary,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,33335253,202,4.56s,14.90ms,395.00ns,14.92ms,120.25us,14.72ms,15.45ms\nmemmem/byterank/binary,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,33335253,202,4.56s,14.87ms,500.00ns,14.91ms,138.91us,14.72ms,15.71ms\nmemmem/byterank/binary,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,33335253,151,4.56s,20.00ms,0.00ns,20.00ms,18.16us,19.96ms,20.05ms\nmemmem/byterank/binary,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,33335253,119,4.54s,20.02ms,0.00ns,25.22ms,51.83ms,19.97ms,587.65ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,1648109,2522,4.56s,1.19ms,0.00ns,1.19ms,5.19us,1.19ms,1.24ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,8.61us,3.91ms,3.97ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,8.08us,3.91ms,3.97ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,1648109,59269,4.56s,50.42us,0.00ns,50.57us,1.10us,50.29us,81.12us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,1648109,59286,4.56s,50.42us,0.00ns,50.56us,1.14us,50.25us,83.88us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,1648109,2796,4.56s,1.07ms,21.00ns,1.07ms,15.62us,1.05ms,1.18ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,1648109,1269,4.56s,2.36ms,0.00ns,2.37ms,7.44us,2.35ms,2.42ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,1648109,3061,4.56s,0.98ms,0.00ns,0.98ms,6.00us,0.96ms,1.02ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,1648109,27162,4.62s,109.54us,0.00ns,109.89us,1.77us,109.42us,152.08us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,1648109,14073,4.56s,213.00us,0.00ns,213.12us,2.91us,210.46us,273.83us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,13943,4.55s,213.33us,0.00ns,215.11us,12.20us,209.42us,829.46us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,1648109,31343,4.56s,95.38us,0.00ns,95.66us,1.55us,95.21us,126.25us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,1648109,31363,4.56s,95.33us,0.00ns,95.61us,1.63us,95.12us,135.33us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,2625,4.56s,1.13ms,0.00ns,1.14ms,29.19us,1.11ms,1.24ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,2622,4.56s,1.13ms,20.00ns,1.14ms,29.77us,1.11ms,1.25ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,1648109,2523,4.56s,1.19ms,0.00ns,1.19ms,5.47us,1.19ms,1.23ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,8.61us,3.91ms,3.98ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,8.53us,3.91ms,3.99ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,1648109,58091,4.56s,51.46us,0.00ns,51.60us,1.19us,51.29us,82.83us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,1648109,58110,4.56s,51.42us,0.00ns,51.58us,1.19us,51.29us,85.17us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,1648109,2381,4.51s,1.00ms,0.00ns,1.26ms,11.30ms,0.98ms,552.69ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,1648109,1269,4.56s,2.36ms,0.00ns,2.37ms,8.32us,2.35ms,2.42ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,1648109,3060,4.56s,0.98ms,0.00ns,0.98ms,6.76us,0.96ms,1.05ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,1648109,26868,4.62s,110.71us,0.00ns,111.09us,1.95us,110.54us,157.25us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,1648109,13525,4.56s,221.25us,0.00ns,221.77us,2.88us,219.46us,259.38us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,13405,4.56s,223.04us,0.00ns,223.75us,2.77us,222.08us,269.17us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,1648109,30370,4.56s,98.42us,0.00ns,98.73us,1.71us,98.25us,127.62us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,1648109,30369,4.56s,98.42us,0.00ns,98.73us,1.79us,98.25us,153.46us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,2801,4.56s,1.06ms,0.00ns,1.07ms,31.12us,1.03ms,1.17ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,2823,4.56s,1.05ms,0.00ns,1.06ms,28.05us,1.03ms,1.16ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,1648109,2508,5.11s,1.19ms,0.00ns,1.42ms,11.36ms,1.18ms,570.09ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,8.05us,3.91ms,3.96ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,8.48us,3.91ms,3.97ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,1648109,60613,4.56s,49.29us,0.00ns,49.44us,1.17us,49.17us,88.38us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,1648109,60549,4.56s,49.38us,0.00ns,49.50us,1.10us,49.21us,80.21us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,1648109,3098,4.56s,0.96ms,20.00ns,0.97ms,23.78us,941.17us,1.05ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,1648109,1269,4.56s,2.36ms,0.00ns,2.37ms,7.50us,2.35ms,2.41ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,1648109,3060,4.56s,0.98ms,0.00ns,0.98ms,6.55us,0.96ms,1.04ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,1648109,27530,4.62s,108.08us,0.00ns,108.43us,1.77us,107.96us,148.42us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,1648109,22694,4.56s,131.75us,0.00ns,132.15us,1.93us,130.50us,166.04us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,23534,4.56s,127.08us,0.00ns,127.43us,2.04us,125.29us,178.08us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,1648109,28833,5.06s,101.42us,0.00ns,103.99us,20.84us,98.38us,1.90ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,1648109,29489,4.56s,101.42us,0.00ns,101.69us,1.63us,101.17us,140.21us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,2889,4.56s,1.04ms,0.00ns,1.04ms,20.28us,1.01ms,1.11ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,2890,4.56s,1.04ms,0.00ns,1.04ms,20.28us,1.01ms,1.11ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,1648109,2746,4.56s,1.09ms,0.00ns,1.09ms,5.33us,1.09ms,1.14ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,1648109,1211,4.56s,2.48ms,0.00ns,2.48ms,15.96us,2.40ms,2.53ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,1210,4.56s,2.48ms,0.00ns,2.48ms,7.66us,2.47ms,2.55ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,1648109,57100,4.56s,52.00us,0.00ns,52.49us,1.31us,51.83us,95.54us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,1648109,57515,4.56s,51.96us,0.00ns,52.11us,1.11us,51.79us,81.79us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,1648109,3151,4.56s,948.38us,0.00ns,0.95ms,10.06us,938.38us,1.01ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,1648109,1012,4.52s,2.36ms,0.00ns,2.97ms,17.44ms,2.35ms,557.41ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,1648109,26710,4.62s,111.42us,0.00ns,111.75us,1.72us,111.25us,148.88us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,1648109,12552,4.56s,238.38us,0.00ns,238.95us,2.78us,234.29us,284.38us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,12485,4.56s,239.54us,0.00ns,240.25us,2.73us,238.38us,274.42us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,1648109,107842,4.63s,27.71us,0.00ns,27.77us,767.00ns,27.54us,58.54us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,1648109,107881,4.56s,27.71us,0.00ns,27.76us,780.00ns,27.54us,58.67us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,2970,4.56s,1.01ms,0.00ns,1.01ms,20.00us,0.98ms,1.08ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,2990,4.56s,1.00ms,0.00ns,1.00ms,17.04us,0.98ms,1.08ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,1648109,2523,4.56s,1.19ms,0.00ns,1.19ms,5.40us,1.19ms,1.23ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,7.97us,3.91ms,3.97ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,765,4.56s,3.92ms,0.00ns,3.92ms,12.02us,3.91ms,4.10ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,1648109,57099,4.58s,52.08us,0.00ns,52.49us,3.13us,51.92us,349.21us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,1648109,57580,4.56s,51.92us,0.00ns,52.05us,1.17us,51.75us,86.12us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,1648109,2860,4.56s,1.04ms,0.00ns,1.05ms,13.26us,1.03ms,1.17ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,1648109,1268,4.56s,2.36ms,0.00ns,2.37ms,8.50us,2.36ms,2.42ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,1648109,3061,4.56s,0.98ms,0.00ns,0.98ms,6.63us,0.96ms,1.03ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,1648109,26641,4.62s,111.67us,0.00ns,112.03us,1.90us,111.54us,153.17us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,1648109,14626,4.56s,204.33us,0.00ns,205.06us,2.70us,203.29us,244.62us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,14683,4.56s,203.67us,0.00ns,204.27us,2.67us,202.50us,244.58us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,2640,4.56s,1.13ms,0.00ns,1.14ms,13.71us,1.11ms,1.24ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,2646,4.56s,1.13ms,20.00ns,1.13ms,13.29us,1.10ms,1.20ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,1648109,2002,4.54s,1.19ms,21.00ns,1.50ms,12.37ms,1.19ms,554.69ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,1648109,766,4.56s,3.92ms,42.00ns,3.92ms,7.93us,3.91ms,3.97ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,766,4.56s,3.91ms,42.00ns,3.92ms,7.98us,3.91ms,3.95ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,1648109,30868,4.56s,95.38us,0.00ns,97.14us,3.13us,93.12us,145.96us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,1648109,38461,4.56s,77.71us,0.00ns,77.95us,1.50us,77.33us,108.50us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,1648109,3355,4.56s,876.38us,0.00ns,894.36us,28.19us,868.04us,1.07ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,1648109,1235,4.56s,2.43ms,0.00ns,2.43ms,7.12us,2.42ms,2.47ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,1648109,2984,4.56s,1.00ms,0.00ns,1.01ms,6.83us,0.99ms,1.05ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,1648109,15900,4.56s,188.21us,0.00ns,188.13us,3.11us,180.33us,234.54us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,1648109,6086,4.56s,491.46us,0.00ns,492.92us,3.76us,490.79us,535.21us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,6352,4.56s,471.50us,0.00ns,472.26us,4.74us,468.42us,534.92us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,2865,4.55s,1.04ms,0.00ns,1.05ms,34.18us,1.03ms,1.44ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,2924,4.56s,1.02ms,0.00ns,1.03ms,5.13us,1.02ms,1.08ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,1648109,6836,4.56s,437.54us,0.00ns,438.85us,3.67us,436.29us,490.00us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,1648109,757,4.56s,3.96ms,0.00ns,3.96ms,8.99us,3.95ms,4.03ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,757,4.56s,3.96ms,0.00ns,3.96ms,8.33us,3.95ms,4.00ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,1648109,6152,4.56s,486.17us,0.00ns,487.65us,4.14us,485.04us,533.54us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,1648109,7213,4.56s,415.04us,0.00ns,415.88us,4.15us,411.50us,470.50us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,1648109,2287,4.56s,1.31ms,0.00ns,1.31ms,7.18us,1.31ms,1.36ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,1648109,1181,4.56s,2.54ms,0.00ns,2.54ms,8.85us,2.53ms,2.60ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,1648109,2498,4.56s,1.20ms,20.00ns,1.20ms,12.67us,1.19ms,1.26ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,1648109,2506,4.57s,948.96us,0.00ns,1.20ms,11.08ms,934.58us,555.74ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,1648109,5071,4.56s,590.88us,0.00ns,591.63us,4.84us,585.21us,641.92us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,5775,4.56s,518.04us,0.00ns,519.49us,4.21us,516.25us,580.62us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,2127,4.56s,1.41ms,0.00ns,1.41ms,20.62us,1.39ms,1.68ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,2246,4.56s,1.33ms,0.00ns,1.34ms,6.16us,1.32ms,1.38ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,1648109,2128,4.56s,1.41ms,0.00ns,1.41ms,5.99us,1.40ms,1.45ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,1648109,738,4.56s,4.06ms,146.00ns,4.07ms,9.10us,4.06ms,4.12ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,738,4.56s,4.06ms,20.00ns,4.07ms,8.55us,4.06ms,4.12ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,1648109,21072,4.56s,141.83us,0.00ns,142.33us,2.02us,141.17us,187.33us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,1648109,27817,4.56s,107.46us,0.00ns,107.80us,1.76us,107.04us,142.42us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,1648109,2789,5.06s,1.05ms,0.00ns,1.25ms,10.40ms,1.04ms,550.21ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,1648109,1224,4.56s,2.45ms,0.00ns,2.45ms,7.22us,2.44ms,2.49ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,1648109,2943,4.56s,1.02ms,0.00ns,1.02ms,6.83us,1.00ms,1.07ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,1648109,12183,4.56s,245.21us,0.00ns,245.64us,3.48us,241.46us,279.25us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,1648109,3628,4.56s,826.17us,0.00ns,826.95us,5.36us,819.33us,873.58us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,3901,4.56s,768.58us,0.00ns,769.12us,6.86us,752.17us,819.92us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1648109,2512,4.56s,1.19ms,0.00ns,1.19ms,6.57us,1.18ms,1.24ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1648109,2612,4.56s,1.15ms,0.00ns,1.15ms,6.00us,1.14ms,1.22ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,151305,20545,4.56s,145.54us,0.00ns,145.97us,1.97us,145.21us,185.71us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,151305,13723,4.56s,217.92us,0.00ns,218.56us,2.52us,217.58us,255.62us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,151305,13721,4.56s,217.92us,0.00ns,218.60us,2.68us,217.58us,289.42us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,151305,543056,5.36s,5.33us,0.00ns,5.48us,7.86us,5.12us,5.75ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,151305,558847,4.82s,5.29us,0.00ns,5.32us,348.00ns,5.12us,38.29us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,151305,197095,4.69s,15.04us,0.00ns,15.17us,732.00ns,14.38us,76.21us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,151305,13832,4.56s,216.08us,0.00ns,216.84us,2.56us,215.75us,262.79us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,151305,196684,4.92s,14.71us,0.00ns,14.72us,552.00ns,14.46us,45.42us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,151305,22434,4.56s,133.25us,0.00ns,133.67us,1.95us,132.58us,171.25us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,151305,22895,4.56s,130.58us,0.00ns,130.98us,1.93us,130.00us,168.17us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,151305,293069,4.69s,10.17us,0.00ns,10.19us,441.00ns,9.92us,41.25us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,151305,287949,4.74s,10.33us,0.00ns,10.37us,468.00ns,10.08us,41.54us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,151305,120597,4.63s,24.21us,0.00ns,24.83us,1.34us,22.46us,60.04us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,151305,107794,4.60s,21.58us,0.00ns,27.78us,1.68ms,20.67us,551.73ms\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,151305,20596,4.56s,145.19us,20.00ns,145.61us,1.95us,144.88us,178.46us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,151305,13652,4.56s,217.96us,0.00ns,219.69us,3.47us,217.62us,281.92us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,151305,13347,4.56s,224.04us,0.00ns,224.72us,2.48us,223.71us,260.62us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,151305,543860,4.88s,5.46us,0.00ns,5.47us,340.00ns,5.21us,35.96us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,151305,538478,4.88s,5.50us,0.00ns,5.52us,329.00ns,5.29us,36.46us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,151305,246524,4.69s,11.54us,0.00ns,12.12us,1.48us,10.83us,45.12us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,151305,13822,4.56s,216.29us,0.00ns,216.99us,2.75us,215.75us,254.21us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,151305,193744,4.93s,14.92us,0.00ns,14.95us,558.00ns,14.71us,48.29us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,151305,23089,4.56s,129.54us,0.00ns,129.88us,1.90us,128.71us,162.17us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,151305,18380,4.53s,129.00us,0.00ns,163.17us,4.07ms,123.83us,551.28ms\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,151305,289344,4.69s,10.29us,0.00ns,10.32us,459.00ns,10.04us,44.00us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,151305,281956,4.69s,10.50us,0.00ns,10.59us,547.00ns,10.04us,56.96us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,151305,128805,4.63s,22.92us,0.00ns,23.24us,1.04us,22.04us,54.92us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,151305,135381,4.63s,23.04us,0.00ns,22.11us,2.49us,18.25us,57.08us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,500100,10474,4.56s,285.46us,0.00ns,286.40us,3.14us,285.33us,321.79us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,500100,2620,4.56s,1.14ms,21.00ns,1.15ms,5.88us,1.14ms,1.19ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,500100,2619,4.56s,1.14ms,0.00ns,1.15ms,7.24us,1.14ms,1.32ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,500100,193804,4.69s,15.42us,0.00ns,15.43us,554.00ns,15.29us,46.08us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,500100,193974,4.63s,15.38us,0.00ns,15.42us,550.00ns,15.25us,45.75us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,500100,9002,4.74s,285.67us,0.00ns,352.65us,5.96ms,285.38us,565.85ms\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,500100,4176,4.56s,716.92us,0.00ns,718.43us,4.25us,713.54us,748.96us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,500100,10078,4.56s,297.21us,0.00ns,297.63us,3.12us,292.17us,329.92us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,500100,89204,4.69s,33.00us,0.00ns,33.09us,848.00ns,32.88us,63.46us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,500100,8122,4.56s,362.42us,0.00ns,369.35us,14.84us,356.96us,436.79us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,500100,8060,4.56s,365.61us,20.00ns,372.20us,15.61us,356.92us,454.00us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,500100,106253,4.63s,28.12us,0.00ns,28.18us,823.00ns,27.92us,65.12us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,500100,106289,4.56s,28.12us,0.00ns,28.17us,786.00ns,27.92us,58.92us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,500100,6984,4.56s,428.21us,0.00ns,429.54us,3.57us,428.08us,483.33us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,500100,6983,4.55s,428.21us,0.00ns,429.56us,3.53us,428.04us,466.00us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,500100,8723,4.56s,342.75us,0.00ns,343.90us,4.04us,342.46us,437.92us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,500100,10307,4.92s,285.83us,0.00ns,291.02us,49.72us,271.08us,2.62ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,500100,10496,4.56s,285.79us,0.00ns,285.79us,5.17us,271.08us,320.42us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,500100,3834,4.56s,780.62us,0.00ns,782.42us,4.93us,778.62us,841.71us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,500100,13823,4.56s,215.67us,0.00ns,217.00us,3.69us,215.42us,257.50us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,500100,10232,4.56s,291.88us,0.00ns,293.16us,4.34us,291.67us,347.42us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,500100,10978,4.56s,271.21us,0.00ns,273.22us,4.95us,271.04us,317.46us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,500100,15807,4.56s,189.12us,0.00ns,189.75us,2.59us,189.00us,236.17us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,500100,2028,4.56s,1.51ms,0.00ns,1.48ms,94.81us,1.12ms,1.56ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,500100,1039,4.56s,2.88ms,0.00ns,2.89ms,9.32us,2.88ms,2.94ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,500100,6804,4.56s,441.98us,20.00ns,440.86us,5.36us,432.00us,486.83us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,500100,938,4.52s,2.55ms,0.00ns,3.20ms,17.94ms,2.55ms,552.33ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,500100,9734,4.55s,307.25us,0.00ns,308.14us,2.98us,306.54us,365.00us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,1001,1000000,1.83s,583.00ns,0.00ns,580.00ns,112.00ns,458.00ns,32.29us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,4.47s,2.29us,0.00ns,2.28us,218.00ns,2.17us,56.83us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,4.47s,2.29us,0.00ns,2.28us,216.00ns,2.17us,33.17us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,1001,1000000,751.26ms,42.00ns,0.00ns,44.00ns,32.00ns,1.00ns,21.12us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,1001,1000000,753.24ms,42.00ns,0.00ns,38.00ns,23.00ns,1.00ns,16.12us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,1001,1000000,1.90s,583.00ns,0.00ns,589.00ns,100.00ns,500.00ns,25.08us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,1001,1000000,3.52s,1.38us,0.00ns,1.40us,160.00ns,1.29us,26.50us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,1001,1000000,1.90s,583.00ns,0.00ns,583.00ns,105.00ns,458.00ns,25.25us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,1001,1000000,2.98s,334.00ns,0.00ns,352.00ns,77.00ns,250.00ns,24.25us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,1001,1000000,2.44s,834.00ns,0.00ns,854.00ns,130.00ns,750.00ns,25.62us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,2.38s,833.00ns,0.00ns,833.00ns,127.00ns,708.00ns,27.00us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,1001,1000000,810.49ms,83.00ns,0.00ns,66.00ns,34.00ns,1.00ns,14.21us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,1001,1000000,810.65ms,83.00ns,0.00ns,66.00ns,38.00ns,1.00ns,22.79us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1001,1000000,2.50s,875.00ns,0.00ns,880.00ns,128.00ns,791.00ns,30.58us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1001,1000000,2.50s,875.00ns,0.00ns,880.00ns,128.00ns,791.00ns,26.58us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,1001,1000000,2.08s,708.00ns,0.00ns,693.00ns,118.00ns,583.00ns,30.58us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,1.84s,583.00ns,0.00ns,579.00ns,113.00ns,458.00ns,29.96us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,1.84s,583.00ns,0.00ns,580.00ns,106.00ns,458.00ns,25.62us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,1001,1000000,4.35s,1.50us,0.00ns,2.12us,551.31us,1.38us,551.31ms\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,1001,1000000,1.60s,458.00ns,0.00ns,520.00ns,162.00ns,333.00ns,27.83us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,1001,1000000,1.90s,584.00ns,0.00ns,599.00ns,110.00ns,500.00ns,25.67us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,1001,1000000,1.84s,542.00ns,0.00ns,559.00ns,106.00ns,458.00ns,30.88us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,1001,1000000,1.48s,375.00ns,0.00ns,390.00ns,91.00ns,291.00ns,25.25us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,1001,762789,5.90s,3.42us,0.00ns,3.42us,244.00ns,3.00us,28.67us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,1001,542094,4.88s,5.46us,0.00ns,5.48us,330.00ns,5.33us,35.42us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,2.86s,1.08us,0.00ns,1.07us,141.00ns,916.00ns,26.00us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,1001,578318,4.88s,5.12us,0.00ns,5.14us,314.00ns,5.00us,39.12us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,1001,1000000,1.96s,666.00ns,0.00ns,656.00ns,109.00ns,541.00ns,25.42us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,550004,3243,4.56s,922.21us,0.00ns,925.01us,5.57us,921.75us,0.96ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,550004,2055,4.56s,1.46ms,0.00ns,1.46ms,5.76us,1.46ms,1.50ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,550004,2054,4.56s,1.46ms,0.00ns,1.46ms,6.51us,1.46ms,1.51ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,550004,18926,4.70s,136.04us,0.00ns,165.85us,4.01ms,135.04us,552.39ms\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,550004,21979,4.56s,136.00us,0.00ns,136.45us,2.18us,134.92us,168.42us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,550004,23849,4.56s,120.12us,0.00ns,125.74us,10.97us,118.29us,182.79us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,550004,3800,4.56s,788.00us,0.00ns,789.51us,4.65us,784.83us,834.42us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,550004,9167,4.56s,326.58us,0.00ns,327.22us,3.34us,320.83us,379.42us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,550004,15958,4.56s,186.83us,0.00ns,187.43us,2.65us,184.79us,231.17us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,550004,17720,4.56s,168.71us,0.00ns,169.25us,2.39us,168.54us,202.62us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,550004,17719,4.56s,168.71us,0.00ns,169.25us,2.41us,168.54us,206.29us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,550004,6349,4.56s,471.04us,0.00ns,472.51us,4.05us,470.67us,521.21us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,550004,6348,4.56s,471.04us,0.00ns,472.55us,4.14us,470.71us,519.75us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,550004,24923,4.56s,119.92us,0.00ns,120.31us,1.97us,117.00us,157.83us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,550004,20039,4.55s,117.08us,0.00ns,149.65us,4.02ms,116.92us,568.86ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,720057,4474,4.56s,668.54us,0.00ns,670.53us,4.42us,668.38us,715.54us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,720057,2889,4.56s,1.04ms,0.00ns,1.04ms,5.27us,1.04ms,1.08ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,720057,2810,4.56s,1.06ms,0.00ns,1.07ms,5.34us,1.06ms,1.12ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,720057,67525,4.56s,44.17us,0.00ns,44.38us,1.09us,44.00us,75.04us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,720057,67860,4.56s,43.83us,0.00ns,44.16us,1.15us,43.67us,81.58us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,720057,79222,4.56s,37.62us,0.00ns,37.82us,1.40us,35.96us,69.88us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,720057,2911,4.56s,1.03ms,0.00ns,1.03ms,5.68us,1.03ms,1.07ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,720057,38156,4.62s,77.88us,0.00ns,78.06us,1.53us,75.58us,140.00us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,720057,66526,4.56s,44.50us,0.00ns,45.04us,1.47us,44.08us,75.38us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,720057,53139,4.59s,44.25us,0.00ns,56.39us,2.47ms,43.79us,569.53ms\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,720057,10016,4.56s,297.25us,0.00ns,299.49us,4.32us,297.08us,348.46us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,720057,9786,4.56s,305.58us,0.00ns,306.52us,2.99us,305.46us,344.25us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,720057,104508,4.63s,28.46us,0.00ns,28.66us,830.00ns,28.21us,59.00us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,720057,105441,4.63s,28.21us,0.00ns,28.40us,847.00ns,27.92us,59.00us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,720057,760,4.55s,3.95ms,21.00ns,3.95ms,8.93us,3.94ms,3.99ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,720057,760,4.56s,3.95ms,0.00ns,3.95ms,9.09us,3.94ms,4.01ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,720057,760,4.56s,3.95ms,0.00ns,3.95ms,9.10us,3.94ms,4.02ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,720057,3533,4.56s,832.54us,0.00ns,849.17us,36.76us,822.88us,1.06ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,720057,3609,4.56s,824.21us,0.00ns,831.31us,20.77us,822.12us,0.99ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,720057,3666,4.56s,812.52us,20.00ns,818.38us,24.03us,787.96us,1.01ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,720057,2840,4.63s,1.03ms,0.00ns,1.06ms,162.49us,1.03ms,3.85ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,720057,2133,4.56s,1.40ms,0.00ns,1.41ms,6.31us,1.40ms,1.46ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,720057,2725,4.56s,1.09ms,0.00ns,1.10ms,44.20us,1.06ms,1.36ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,720057,2722,4.56s,1.09ms,0.00ns,1.10ms,45.45us,1.06ms,1.32ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,720057,760,4.56s,3.95ms,0.00ns,3.95ms,8.75us,3.94ms,3.99ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,720057,760,4.56s,3.95ms,21.00ns,3.95ms,9.29us,3.94ms,4.01ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,720057,3058,4.56s,0.98ms,21.00ns,0.98ms,13.18us,0.96ms,1.07ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,720057,3030,4.56s,0.99ms,0.00ns,0.99ms,19.86us,0.96ms,1.07ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,,407,4.56s,7.39ms,0.00ns,7.38ms,34.99us,7.29ms,7.44ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,,322,4.56s,9.29ms,458.00ns,9.32ms,108.59us,9.03ms,10.40ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,,66,4.63s,36.56ms,146.00ns,45.93ms,71.87ms,36.53ms,625.16ms\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,1000,19151,4.56s,156.12us,0.00ns,156.59us,2.07us,155.88us,199.83us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,1000,4617,4.56s,648.75us,0.00ns,649.79us,4.44us,638.58us,753.29us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,1000,11273,4.56s,265.25us,0.00ns,266.07us,2.89us,263.79us,328.04us\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,806771,118,4.56s,25.60ms,63.00ns,25.60ms,13.97us,25.58ms,25.65ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,806771,24,4.68s,128.24ms,375.00ns,128.26ms,71.73us,128.18ms,128.55ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,806771,59,4.56s,50.98ms,0.00ns,50.98ms,17.39us,50.94ms,51.02ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613345,4315,4.56s,694.12us,0.00ns,695.28us,4.66us,690.08us,730.38us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613345,1826,4.56s,1.64ms,0.00ns,1.64ms,5.97us,1.64ms,1.69ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1826,4.56s,1.64ms,0.00ns,1.64ms,5.90us,1.64ms,1.69ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613345,89033,4.56s,33.58us,0.00ns,33.64us,925.00ns,33.08us,90.71us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613345,113758,4.60s,26.25us,0.00ns,26.32us,2.87us,25.46us,365.92us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613345,13295,4.56s,225.42us,0.00ns,225.61us,9.87us,209.54us,288.33us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613345,3375,4.56s,886.21us,0.00ns,888.82us,5.26us,885.21us,932.38us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,613345,8059,4.56s,371.62us,0.00ns,372.22us,3.63us,365.62us,422.71us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613345,38631,4.62s,76.83us,0.00ns,77.08us,1.50us,75.71us,107.71us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613345,7046,4.56s,424.42us,0.00ns,425.77us,3.60us,423.50us,473.62us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613345,7416,4.56s,403.25us,0.00ns,404.49us,3.56us,402.38us,445.17us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,10537,4.56s,285.79us,0.00ns,284.66us,5.10us,272.71us,341.75us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,11001,4.56s,273.67us,0.00ns,272.67us,5.19us,261.96us,306.96us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613345,5961,4.56s,501.79us,0.00ns,503.30us,3.82us,501.33us,539.42us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613345,1605,4.52s,1.49ms,0.00ns,1.87ms,13.61ms,1.48ms,546.98ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2012,4.56s,1.49ms,0.00ns,1.49ms,5.83us,1.48ms,1.53ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613345,34650,4.56s,86.21us,0.00ns,86.53us,1.63us,83.42us,141.92us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613345,53379,4.56s,55.96us,0.00ns,56.15us,1.20us,55.50us,89.83us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613345,11035,4.56s,271.21us,0.00ns,271.83us,11.53us,251.58us,337.54us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613345,3317,4.56s,902.08us,0.00ns,904.57us,5.00us,900.67us,0.96ms\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,613345,7397,4.56s,404.54us,0.00ns,405.56us,4.14us,400.29us,447.21us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613345,18287,4.56s,162.92us,0.00ns,163.50us,2.80us,158.92us,226.58us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613345,9517,4.56s,314.25us,0.00ns,315.17us,3.21us,312.92us,357.88us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613345,11541,4.56s,259.08us,0.00ns,259.89us,3.09us,258.12us,293.79us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,7489,4.56s,399.79us,0.00ns,400.54us,6.89us,388.62us,477.62us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,8617,4.52s,346.25us,0.00ns,348.10us,11.68us,335.92us,494.42us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613345,2788,4.56s,1.08ms,0.00ns,1.08ms,5.51us,1.06ms,1.12ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613345,1482,4.56s,2.02ms,0.00ns,2.03ms,7.03us,2.01ms,2.08ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1483,4.56s,2.02ms,0.00ns,2.02ms,6.75us,2.01ms,2.07ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613345,4660,4.56s,642.17us,0.00ns,643.81us,4.58us,635.83us,690.58us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613345,4721,4.56s,633.54us,0.00ns,635.47us,4.30us,633.21us,676.50us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613345,3211,4.56s,933.21us,0.00ns,934.35us,5.73us,922.38us,1.06ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613345,2074,4.56s,1.44ms,0.00ns,1.45ms,18.14us,1.42ms,1.52ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,613345,3280,4.56s,913.25us,0.00ns,914.76us,5.36us,908.25us,0.96ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613345,1395,4.56s,2.15ms,0.00ns,2.15ms,23.79us,2.10ms,2.22ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613345,1992,4.56s,1.19ms,0.00ns,1.51ms,12.37ms,1.19ms,553.58ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613345,2996,4.56s,1.00ms,0.00ns,1.00ms,4.78us,0.99ms,1.04ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,1893,4.56s,1.58ms,0.00ns,1.59ms,6.80us,1.57ms,1.64ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,2628,4.56s,1.14ms,0.00ns,1.14ms,5.74us,1.13ms,1.19ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613402,3017,4.56s,0.99ms,0.00ns,0.99ms,5.04us,0.99ms,1.03ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613402,1634,4.56s,1.84ms,0.00ns,1.84ms,6.05us,1.83ms,1.88ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1634,4.56s,1.83ms,0.00ns,1.84ms,6.10us,1.83ms,1.88ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613402,75424,4.56s,39.62us,0.00ns,39.73us,0.95us,39.38us,65.42us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613402,104027,4.56s,28.71us,0.00ns,28.79us,790.00ns,28.50us,59.67us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613402,6206,4.56s,482.50us,0.00ns,483.42us,5.25us,478.33us,531.96us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613402,3203,4.95s,882.29us,0.00ns,1.06ms,9.81ms,881.46us,556.20ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,613402,8033,4.56s,372.92us,0.00ns,373.42us,3.70us,367.54us,427.04us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613402,41596,4.61s,70.71us,0.00ns,71.58us,1.75us,69.96us,124.88us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613402,6675,4.56s,448.00us,0.00ns,449.41us,4.06us,446.71us,490.33us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613402,7086,4.56s,422.04us,0.00ns,423.35us,3.93us,421.17us,459.46us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,5680,4.56s,526.75us,0.00ns,528.15us,4.55us,524.00us,577.92us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,5946,4.56s,503.50us,0.00ns,504.55us,4.42us,500.96us,555.75us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613402,1710,4.56s,1.75ms,0.00ns,1.75ms,7.21us,1.74ms,1.83ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613402,1264,4.56s,2.37ms,0.00ns,2.37ms,7.83us,2.36ms,2.42ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1263,4.56s,2.37ms,0.00ns,2.38ms,8.34us,2.37ms,2.43ms\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613402,38259,4.56s,78.12us,0.00ns,78.37us,1.63us,76.33us,116.08us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613402,58433,5.10s,49.42us,0.00ns,51.29us,9.21us,49.12us,501.46us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613402,5704,4.56s,523.50us,0.00ns,525.92us,6.53us,519.79us,616.75us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613402,3321,4.56s,901.04us,0.00ns,903.43us,4.86us,899.62us,939.58us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,613402,7683,4.56s,389.38us,0.00ns,390.46us,4.05us,384.50us,449.92us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613402,22907,4.62s,128.92us,0.00ns,130.41us,2.80us,124.38us,172.25us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613402,6944,4.55s,431.50us,0.00ns,432.02us,4.00us,426.75us,475.96us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613402,7678,4.56s,389.21us,0.00ns,390.71us,3.69us,388.71us,438.38us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,5178,4.56s,577.58us,0.00ns,579.37us,4.46us,576.42us,614.62us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,5578,4.56s,536.08us,0.00ns,537.79us,4.37us,534.58us,585.75us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613402,5319,4.56s,563.00us,0.00ns,564.07us,5.15us,555.04us,602.33us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613402,1405,4.56s,1.70ms,0.00ns,2.14ms,14.57ms,1.70ms,548.04ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1761,4.56s,1.70ms,0.00ns,1.70ms,6.18us,1.70ms,1.78ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613402,6181,4.56s,484.25us,0.00ns,485.36us,3.92us,481.25us,520.25us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613402,6204,4.56s,482.21us,0.00ns,483.54us,3.79us,480.79us,537.17us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613402,4657,4.56s,642.29us,0.00ns,644.26us,4.75us,640.67us,697.12us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613402,2547,4.56s,1.17ms,0.00ns,1.18ms,10.12us,1.16ms,1.24ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,613402,4422,4.56s,673.62us,0.00ns,678.44us,10.56us,669.33us,727.08us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613402,2459,4.56s,1.22ms,0.00ns,1.22ms,5.68us,1.22ms,1.27ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613402,3854,4.56s,776.96us,0.00ns,778.50us,4.72us,771.17us,812.50us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613402,4482,4.55s,667.42us,0.00ns,669.43us,4.67us,666.00us,720.96us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,3274,4.56s,915.73us,20.00ns,916.29us,8.78us,901.38us,1.10ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,4143,4.52s,719.25us,0.00ns,724.07us,31.18us,696.54us,1.79ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613427,6853,4.56s,436.38us,0.00ns,437.73us,3.52us,436.08us,473.21us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613427,2064,4.56s,1.45ms,0.00ns,1.45ms,5.81us,1.45ms,1.50ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613427,2064,4.56s,1.45ms,0.00ns,1.45ms,5.89us,1.45ms,1.49ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613427,90494,4.56s,33.04us,0.00ns,33.10us,843.00ns,32.58us,65.21us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613427,110253,4.63s,27.08us,0.00ns,27.16us,777.00ns,26.83us,58.08us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613427,19324,4.56s,149.04us,0.00ns,155.20us,10.33us,146.71us,222.96us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613427,3327,4.56s,899.38us,0.00ns,901.89us,5.07us,898.46us,942.29us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,613427,8028,4.56s,373.00us,0.00ns,373.66us,3.66us,367.88us,411.67us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613427,44436,4.62s,66.67us,0.00ns,67.00us,1.52us,65.04us,99.33us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613427,33581,4.57s,71.21us,0.00ns,89.28us,3.01ms,68.58us,551.82ms\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613427,47082,4.56s,64.71us,0.00ns,63.67us,2.94us,58.08us,108.71us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,15388,4.56s,194.33us,0.00ns,194.92us,2.38us,193.42us,243.88us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,16129,4.56s,185.38us,0.00ns,185.95us,2.33us,184.71us,221.21us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613427,4389,4.56s,681.83us,0.00ns,683.57us,4.27us,680.38us,718.75us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613427,1845,4.56s,1.62ms,0.00ns,1.63ms,5.96us,1.62ms,1.69ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1845,4.56s,1.62ms,0.00ns,1.63ms,5.96us,1.62ms,1.67ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613427,49384,4.56s,60.54us,0.00ns,60.70us,1.28us,59.33us,88.79us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613427,69725,4.56s,42.83us,0.00ns,42.98us,0.99us,42.42us,82.58us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613427,13121,4.56s,223.92us,0.00ns,228.60us,8.39us,215.92us,297.00us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613427,3324,4.56s,900.04us,0.00ns,902.73us,6.55us,898.67us,1.02ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,613427,7723,4.54s,386.25us,0.00ns,388.39us,16.90us,381.92us,1.46ms\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613427,26107,4.56s,113.71us,0.00ns,114.35us,2.60us,109.42us,147.75us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613427,20795,4.56s,143.75us,0.00ns,144.21us,2.03us,143.00us,194.96us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613427,23594,4.56s,126.71us,0.00ns,127.09us,1.90us,126.12us,165.12us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,10028,4.56s,298.29us,0.00ns,299.12us,3.03us,296.79us,334.88us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,11024,4.56s,271.38us,0.00ns,272.10us,3.07us,269.58us,334.50us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613427,12804,4.56s,233.50us,0.00ns,234.25us,2.72us,232.33us,274.79us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613427,1981,4.56s,1.51ms,0.00ns,1.51ms,5.84us,1.51ms,1.55ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1981,4.56s,1.51ms,0.00ns,1.51ms,5.75us,1.51ms,1.57ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613427,15438,4.56s,193.88us,0.00ns,194.29us,2.37us,191.25us,247.04us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613427,13441,4.52s,176.04us,0.00ns,223.15us,4.72ms,173.83us,547.79ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613427,5745,4.56s,520.88us,0.00ns,522.22us,4.23us,518.46us,570.88us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613427,3039,4.56s,0.99ms,0.00ns,0.99ms,5.73us,0.98ms,1.03ms\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,613427,6269,4.56s,477.42us,0.00ns,478.57us,4.97us,472.04us,517.88us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613427,6528,4.56s,457.96us,0.00ns,459.02us,3.90us,452.42us,498.58us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613427,10683,4.56s,280.04us,0.00ns,280.77us,2.97us,278.50us,318.71us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613427,12380,4.56s,241.92us,0.00ns,242.28us,2.84us,239.21us,278.04us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,4977,4.56s,601.33us,0.00ns,602.73us,4.35us,596.88us,637.04us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,5524,4.56s,542.38us,0.00ns,543.12us,5.11us,534.46us,637.75us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613345,8427,4.56s,354.88us,0.00ns,355.98us,3.21us,354.75us,391.83us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613345,2049,4.99s,1.41ms,0.00ns,1.68ms,12.14ms,1.40ms,551.13ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2133,4.55s,1.41ms,0.00ns,1.41ms,6.31us,1.40ms,1.48ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613345,165560,4.63s,18.04us,0.00ns,18.07us,614.00ns,17.88us,48.71us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613345,165554,4.63s,18.04us,0.00ns,18.07us,611.00ns,17.92us,74.58us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613345,10120,4.56s,291.29us,0.00ns,296.42us,14.62us,273.38us,348.46us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613345,3404,4.56s,878.62us,0.00ns,881.37us,14.83us,875.21us,1.07ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,613345,8217,4.56s,364.54us,0.00ns,365.09us,3.52us,358.21us,403.46us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613345,73623,4.68s,40.08us,0.00ns,40.19us,0.97us,39.96us,76.67us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613345,101545,4.56s,29.42us,0.00ns,29.49us,825.00ns,28.46us,62.67us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613345,101377,4.63s,29.46us,0.00ns,29.54us,826.00ns,28.58us,61.88us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,613345,86533,4.56s,34.54us,0.00ns,34.62us,910.00ns,34.38us,70.50us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,613345,84800,4.86s,34.50us,0.00ns,35.32us,8.61us,33.46us,1.95ms\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,8635,4.56s,349.58us,0.00ns,347.36us,8.89us,321.88us,389.21us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,8623,4.56s,349.83us,0.00ns,347.87us,8.78us,322.08us,383.25us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613345,5496,4.56s,544.12us,0.00ns,545.86us,4.15us,543.83us,609.96us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613345,1955,4.56s,1.53ms,0.00ns,1.53ms,5.88us,1.53ms,1.58ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1955,4.56s,1.53ms,0.00ns,1.53ms,5.71us,1.53ms,1.57ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613345,122831,4.63s,24.29us,0.00ns,24.38us,719.00ns,24.12us,55.08us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613345,122620,4.63s,24.33us,0.00ns,24.42us,777.00ns,24.17us,63.25us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613345,18460,4.56s,161.44us,21.00ns,162.46us,8.68us,147.88us,208.04us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613345,3406,4.56s,878.75us,0.00ns,880.86us,5.38us,875.25us,935.83us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,613345,6529,4.55s,364.58us,0.00ns,459.43us,6.86ms,358.96us,554.45ms\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613345,55781,4.63s,53.04us,0.00ns,53.18us,1.16us,52.88us,94.96us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613345,9338,4.56s,320.29us,0.00ns,321.22us,3.11us,319.42us,377.79us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613345,9316,4.56s,321.00us,0.00ns,321.99us,3.43us,320.17us,398.92us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,613345,71927,4.56s,41.54us,0.00ns,41.66us,0.98us,41.33us,66.71us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,613345,72526,4.56s,41.21us,0.00ns,41.31us,0.98us,41.00us,71.67us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,15741,4.56s,189.00us,0.00ns,190.54us,6.80us,178.29us,245.00us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,15744,4.56s,189.00us,0.00ns,190.51us,6.78us,178.54us,251.08us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613345,8466,4.56s,353.25us,0.00ns,354.32us,3.32us,353.04us,401.33us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613345,2134,4.56s,1.41ms,0.00ns,1.41ms,5.87us,1.40ms,1.45ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2133,4.56s,1.41ms,0.00ns,1.41ms,8.66us,1.40ms,1.60ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613345,165377,4.67s,17.96us,0.00ns,18.09us,1.73us,17.83us,311.67us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613345,165538,4.62s,18.04us,0.00ns,18.07us,613.00ns,17.92us,63.42us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613345,19841,4.56s,147.67us,0.00ns,151.16us,9.73us,138.29us,213.79us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613345,3404,4.56s,878.75us,0.00ns,881.30us,5.32us,876.54us,924.00us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,613345,8217,4.56s,364.38us,0.00ns,365.05us,3.89us,357.50us,415.54us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613345,73633,4.69s,40.08us,0.00ns,40.21us,1.07us,39.96us,79.25us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613345,102555,4.63s,29.12us,0.00ns,29.20us,845.00ns,28.58us,59.67us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613345,102703,4.63s,29.08us,0.00ns,29.16us,850.00ns,28.58us,62.25us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,613345,87000,4.56s,34.33us,0.00ns,34.43us,866.00ns,34.21us,67.21us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,613345,87001,4.56s,34.33us,0.00ns,34.43us,882.00ns,34.21us,72.62us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,13226,4.54s,180.25us,0.00ns,226.77us,4.82ms,173.17us,554.40ms\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,16665,4.56s,180.04us,0.00ns,179.98us,3.61us,172.75us,218.67us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613345,2789,4.56s,1.07ms,0.00ns,1.08ms,5.50us,1.07ms,1.13ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613345,1567,4.56s,1.91ms,0.00ns,1.91ms,6.34us,1.91ms,1.96ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613345,1567,4.56s,1.91ms,0.00ns,1.91ms,6.27us,1.91ms,1.96ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613345,176379,4.63s,16.92us,0.00ns,16.96us,584.00ns,16.79us,52.33us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613345,172689,4.62s,16.92us,0.00ns,17.32us,807.00ns,16.79us,47.29us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613345,6998,4.56s,429.29us,0.00ns,428.69us,11.79us,406.17us,479.38us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613345,3393,4.56s,881.62us,0.00ns,884.20us,6.52us,878.04us,1.04ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,613345,8220,4.55s,364.33us,0.00ns,364.95us,3.61us,357.71us,400.62us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613345,68302,4.82s,37.04us,0.00ns,45.20us,2.11ms,36.88us,550.58ms\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613345,6924,4.56s,428.58us,0.00ns,433.27us,11.75us,409.29us,503.88us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613345,6927,4.56s,428.67us,0.00ns,433.04us,10.44us,408.75us,496.83us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,613345,86994,4.56s,34.33us,0.00ns,34.43us,873.00ns,34.21us,59.58us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,613345,86994,4.56s,34.33us,0.00ns,34.43us,890.00ns,34.21us,65.08us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,7008,4.56s,429.71us,0.00ns,428.04us,9.67us,405.46us,482.83us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,7010,4.56s,429.96us,0.00ns,427.94us,9.71us,406.62us,479.46us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,28,1000000,690.36ms,1.00ns,0.00ns,17.00ns,30.00ns,1.00ns,21.33us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,748.75ms,42.00ns,0.00ns,48.00ns,30.00ns,1.00ns,17.29us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,749.11ms,42.00ns,0.00ns,48.00ns,30.00ns,1.00ns,14.29us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,28,1000000,690.43ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,7.04us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,28,1000000,691.67ms,1.00ns,0.00ns,17.00ns,28.00ns,1.00ns,11.75us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,28,1000000,690.68ms,1.00ns,0.00ns,16.00ns,21.00ns,1.00ns,6.92us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,28,1000000,691.97ms,1.00ns,0.00ns,18.00ns,32.00ns,1.00ns,21.08us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,28,1000000,691.83ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,9.33us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,28,1000000,2.92s,292.00ns,0.00ns,290.00ns,69.00ns,166.00ns,25.12us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,690.89ms,1.00ns,0.00ns,19.00ns,26.00ns,1.00ns,14.00us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,691.30ms,1.00ns,0.00ns,20.00ns,20.00ns,1.00ns,1.71us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,28,1000000,691.07ms,1.00ns,0.00ns,17.00ns,24.00ns,1.00ns,9.79us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,28,1000000,691.36ms,1.00ns,0.00ns,17.00ns,60.00ns,1.00ns,48.54us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,753.36ms,42.00ns,0.00ns,39.00ns,26.00ns,1.00ns,16.46us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,750.64ms,42.00ns,0.00ns,39.00ns,19.00ns,1.00ns,7.58us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,28,1000000,691.89ms,1.00ns,0.00ns,17.00ns,34.00ns,1.00ns,21.58us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,748.04ms,42.00ns,0.00ns,52.00ns,43.00ns,1.00ns,19.42us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,749.85ms,42.00ns,0.00ns,52.00ns,33.00ns,1.00ns,19.54us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,28,1000000,690.95ms,1.00ns,0.00ns,19.00ns,29.00ns,1.00ns,16.58us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,28,1000000,689.81ms,1.00ns,0.00ns,17.00ns,25.00ns,1.00ns,9.33us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,28,1000000,692.47ms,1.00ns,0.00ns,16.00ns,24.00ns,1.00ns,9.79us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,28,1000000,690.41ms,1.00ns,0.00ns,18.00ns,20.00ns,1.00ns,1.79us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,28,1000000,690.04ms,1.00ns,0.00ns,19.00ns,65.00ns,1.00ns,47.50us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,28,1000000,3.52s,292.00ns,0.00ns,857.00ns,551.06us,166.00ns,551.06ms\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,690.13ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,9.54us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,691.05ms,1.00ns,0.00ns,21.00ns,34.00ns,1.00ns,20.83us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,28,1000000,691.66ms,1.00ns,0.00ns,17.00ns,21.00ns,1.00ns,7.08us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,28,1000000,691.51ms,1.00ns,0.00ns,17.00ns,22.00ns,1.00ns,4.92us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,756.01ms,42.00ns,0.00ns,35.00ns,32.00ns,1.00ns,16.83us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,691.51ms,42.00ns,0.00ns,35.00ns,19.00ns,1.00ns,8.00us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,28,1000000,693.30ms,1.00ns,0.00ns,17.00ns,20.00ns,1.00ns,1.54us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,813.22ms,42.00ns,0.00ns,59.00ns,30.00ns,1.00ns,16.29us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,814.11ms,42.00ns,0.00ns,59.00ns,32.00ns,1.00ns,10.46us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,28,1000000,690.02ms,1.00ns,0.00ns,19.00ns,25.00ns,1.00ns,11.04us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,28,1000000,691.25ms,1.00ns,0.00ns,17.00ns,21.00ns,1.00ns,4.83us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,28,1000000,689.95ms,1.00ns,0.00ns,16.00ns,20.00ns,1.00ns,4.79us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,28,1000000,690.23ms,1.00ns,0.00ns,18.00ns,24.00ns,1.00ns,12.58us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,28,1000000,691.03ms,1.00ns,0.00ns,19.00ns,29.00ns,1.00ns,19.79us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,28,1000000,2.97s,292.00ns,0.00ns,297.00ns,79.00ns,166.00ns,24.38us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,689.44ms,1.00ns,0.00ns,19.00ns,26.00ns,1.00ns,14.04us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,689.41ms,1.00ns,0.00ns,20.00ns,33.00ns,1.00ns,16.92us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,28,1000000,691.55ms,1.00ns,0.00ns,17.00ns,26.00ns,1.00ns,14.17us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,28,1000000,695.00ms,1.00ns,0.00ns,17.00ns,26.00ns,1.00ns,14.17us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,689.03ms,1.00ns,0.00ns,20.00ns,21.00ns,1.00ns,4.83us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,691.22ms,1.00ns,0.00ns,20.00ns,30.00ns,1.00ns,19.29us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,28,1000000,690.14ms,41.00ns,0.00ns,26.00ns,33.00ns,1.00ns,16.17us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,809.94ms,83.00ns,0.00ns,69.00ns,32.00ns,1.00ns,13.75us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,812.60ms,83.00ns,0.00ns,69.00ns,45.00ns,1.00ns,20.83us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,28,1000000,689.42ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,6.92us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,28,1000000,692.74ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,7.08us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,28,1000000,693.09ms,1.00ns,0.00ns,18.00ns,25.00ns,1.00ns,13.67us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,28,1000000,690.45ms,1.00ns,0.00ns,18.00ns,32.00ns,1.00ns,23.21us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,28,1000000,691.68ms,1.00ns,0.00ns,19.00ns,25.00ns,1.00ns,13.79us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,28,1000000,2.80s,292.00ns,0.00ns,283.00ns,60.00ns,166.00ns,24.21us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,690.52ms,1.00ns,0.00ns,19.00ns,20.00ns,1.00ns,1.42us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,689.78ms,1.00ns,0.00ns,20.00ns,23.00ns,1.00ns,9.46us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,28,1000000,690.68ms,1.00ns,0.00ns,17.00ns,26.00ns,1.00ns,9.88us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,28,1000000,695.55ms,1.00ns,0.00ns,17.00ns,31.00ns,1.00ns,23.25us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,690.81ms,1.00ns,0.00ns,21.00ns,30.00ns,1.00ns,16.62us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,689.60ms,1.00ns,0.00ns,21.00ns,24.00ns,1.00ns,9.50us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613402,2180,4.56s,1.37ms,0.00ns,1.38ms,7.08us,1.36ms,1.52ms\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613402,3297,4.56s,907.12us,0.00ns,909.99us,5.28us,906.92us,943.21us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613402,3297,4.56s,907.12us,0.00ns,910.00us,6.07us,906.92us,1.02ms\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613402,158940,4.91s,18.33us,0.00ns,18.82us,3.79us,18.21us,544.54us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613402,158668,4.63s,18.88us,0.00ns,18.86us,652.00ns,18.21us,49.71us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613402,12413,4.56s,240.38us,0.00ns,241.63us,3.85us,237.96us,288.71us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613402,3411,4.56s,877.33us,0.00ns,879.68us,6.71us,875.17us,1.03ms\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613402,73003,4.69s,40.42us,0.00ns,40.54us,1.02us,40.29us,73.83us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613402,99816,4.63s,29.92us,0.00ns,30.01us,870.00ns,29.46us,63.00us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613402,100249,4.63s,29.79us,0.00ns,29.88us,864.00ns,29.33us,65.21us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,613402,35361,4.56s,84.54us,0.00ns,84.79us,1.64us,84.04us,119.83us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,613402,38811,4.56s,76.96us,0.00ns,77.24us,1.54us,76.46us,109.67us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,11821,4.56s,252.67us,0.00ns,253.75us,5.49us,246.38us,284.38us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,9530,4.55s,249.25us,0.00ns,314.76us,5.62ms,242.04us,549.25ms\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,42,1000000,689.78ms,41.00ns,0.00ns,23.00ns,36.00ns,1.00ns,25.00us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,754.26ms,42.00ns,0.00ns,39.00ns,21.00ns,1.00ns,14.21us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,754.83ms,42.00ns,0.00ns,39.00ns,30.00ns,1.00ns,16.42us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,42,1000000,689.63ms,41.00ns,0.00ns,26.00ns,37.00ns,1.00ns,28.54us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,42,1000000,692.09ms,1.00ns,0.00ns,17.00ns,24.00ns,1.00ns,9.79us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,42,1000000,693.99ms,1.00ns,0.00ns,16.00ns,30.00ns,1.00ns,22.54us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,42,1000000,690.20ms,41.00ns,0.00ns,22.00ns,29.00ns,1.00ns,14.12us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,42,1000000,2.86s,291.00ns,0.00ns,282.00ns,64.00ns,166.00ns,24.62us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,689.50ms,41.00ns,0.00ns,25.00ns,21.00ns,1.00ns,6.88us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,689.15ms,1.00ns,0.00ns,20.00ns,36.00ns,1.00ns,19.96us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,42,1000000,689.94ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,7.12us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,42,1000000,693.23ms,1.00ns,0.00ns,17.00ns,32.00ns,1.00ns,23.46us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,42,1000000,870.78ms,84.00ns,0.00ns,98.00ns,58.00ns,1.00ns,23.62us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,42,1000000,871.94ms,84.00ns,0.00ns,98.00ns,40.00ns,1.00ns,16.29us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613427,5912,4.56s,505.88us,0.00ns,507.46us,3.81us,505.62us,550.96us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613427,1993,4.56s,1.50ms,0.00ns,1.51ms,5.79us,1.50ms,1.55ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1993,4.56s,1.50ms,0.00ns,1.51ms,7.84us,1.50ms,1.72ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613427,156504,4.63s,19.08us,0.00ns,19.12us,632.00ns,18.96us,49.88us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613427,156307,4.63s,19.08us,0.00ns,19.14us,638.00ns,18.96us,51.67us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613427,35218,4.56s,82.54us,0.00ns,85.14us,4.00us,81.67us,127.62us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613427,3408,4.56s,878.92us,0.00ns,880.44us,6.43us,875.25us,0.99ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,613427,8039,4.95s,364.67us,0.00ns,373.15us,60.96us,358.33us,2.71ms\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613427,71640,4.69s,41.25us,0.00ns,41.34us,0.97us,41.08us,76.17us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613427,42404,4.56s,70.33us,0.00ns,70.70us,1.50us,69.67us,114.71us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613427,39545,4.56s,75.58us,0.00ns,75.81us,1.48us,74.83us,109.50us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,613427,83506,4.56s,35.79us,0.00ns,35.87us,894.00ns,35.62us,67.38us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,613427,83460,4.56s,35.79us,0.00ns,35.89us,947.00ns,35.67us,68.62us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,32546,4.56s,91.25us,0.00ns,92.13us,2.36us,90.08us,136.46us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,32827,4.56s,90.58us,0.00ns,91.34us,2.08us,90.12us,132.92us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,31,1000000,693.09ms,1.00ns,0.00ns,17.00ns,32.00ns,1.00ns,19.92us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,748.59ms,42.00ns,0.00ns,48.00ns,36.00ns,1.00ns,20.79us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,749.71ms,42.00ns,0.00ns,48.00ns,23.00ns,1.00ns,16.12us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,31,1000000,690.22ms,1.00ns,0.00ns,19.00ns,29.00ns,1.00ns,14.04us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,31,1000000,682.66ms,1.00ns,0.00ns,17.00ns,22.00ns,1.00ns,6.71us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,31,1000000,692.52ms,1.00ns,0.00ns,16.00ns,34.00ns,1.00ns,24.46us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,31,1000000,690.40ms,1.00ns,0.00ns,18.00ns,28.00ns,1.00ns,19.58us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,31,1000000,690.86ms,1.00ns,0.00ns,19.00ns,29.00ns,1.00ns,16.33us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,31,1000000,2.92s,292.00ns,0.00ns,295.00ns,63.00ns,166.00ns,18.62us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,689.32ms,1.00ns,0.00ns,20.00ns,22.00ns,1.00ns,9.38us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,690.65ms,1.00ns,0.00ns,20.00ns,29.00ns,1.00ns,16.79us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,31,1000000,691.88ms,1.00ns,0.00ns,17.00ns,23.00ns,1.00ns,9.50us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,31,1000000,682.04ms,1.00ns,0.00ns,17.00ns,24.00ns,1.00ns,9.71us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,31,1000000,1.34s,42.00ns,0.00ns,54.00ns,39.00ns,1.00ns,23.50us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,31,1000000,805.73ms,42.00ns,0.00ns,54.00ns,36.00ns,1.00ns,19.04us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613345,7955,5.00s,370.88us,0.00ns,377.10us,58.67us,370.71us,1.44ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613345,2124,4.56s,1.41ms,0.00ns,1.41ms,2.29us,1.41ms,1.46ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2125,4.56s,1.41ms,0.00ns,1.41ms,2.08us,1.41ms,1.44ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613345,158247,4.63s,18.92us,0.00ns,18.91us,205.00ns,18.79us,37.12us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613345,158266,4.63s,18.88us,0.00ns,18.91us,1.44us,18.29us,501.08us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613345,17009,4.56s,174.58us,0.00ns,176.33us,8.67us,160.71us,222.00us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613345,3408,4.55s,878.71us,0.00ns,880.26us,5.51us,875.17us,931.08us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,613345,8217,4.56s,364.38us,0.00ns,365.07us,3.77us,358.12us,410.42us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613345,72922,4.69s,40.46us,0.00ns,40.59us,1.03us,40.33us,82.04us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613345,71359,5.06s,40.17us,0.00ns,48.21us,2.05ms,39.50us,548.53ms\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613345,74656,4.61s,40.00us,0.00ns,40.13us,1.03us,39.46us,72.12us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,613345,85287,4.56s,35.04us,0.00ns,35.12us,897.00ns,34.88us,83.83us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,613345,85297,4.56s,35.04us,0.00ns,35.12us,881.00ns,34.88us,66.00us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,14060,4.56s,210.69us,20.00ns,213.32us,8.34us,198.96us,255.54us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,14022,4.56s,211.36us,20.00ns,213.90us,8.35us,198.96us,255.42us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613345,8064,4.56s,370.83us,0.00ns,372.01us,3.36us,370.71us,405.12us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613345,2120,4.56s,1.41ms,0.00ns,1.42ms,5.80us,1.41ms,1.46ms\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2119,4.56s,1.41ms,0.00ns,1.42ms,6.47us,1.41ms,1.55ms\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613345,159446,4.63s,18.75us,0.00ns,18.76us,620.00ns,18.58us,51.62us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613345,159757,4.63s,18.67us,0.00ns,18.73us,662.00ns,18.54us,78.08us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613345,16067,4.87s,183.38us,0.00ns,186.67us,39.02us,165.33us,3.18ms\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613345,3407,4.56s,878.54us,0.00ns,880.67us,5.43us,875.46us,923.88us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,613345,8218,4.56s,364.29us,0.00ns,365.03us,3.76us,358.12us,409.17us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613345,73225,4.69s,40.29us,0.00ns,40.41us,1.12us,40.17us,93.96us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613345,36665,4.56s,80.54us,0.00ns,81.77us,2.87us,79.75us,116.67us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613345,36958,4.56s,80.92us,0.00ns,81.12us,1.59us,80.00us,117.00us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,613345,86537,4.56s,34.54us,0.00ns,34.62us,912.00ns,34.38us,65.92us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,613345,86579,4.56s,34.50us,0.00ns,34.60us,924.00ns,34.38us,74.96us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,14340,4.56s,207.75us,0.00ns,209.15us,6.76us,197.00us,250.79us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,14328,4.56s,207.96us,0.00ns,209.34us,6.77us,197.21us,245.96us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613345,4699,4.56s,506.17us,0.00ns,638.39us,8.01ms,505.17us,549.65ms\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613345,3262,4.56s,917.75us,0.00ns,919.88us,4.99us,913.71us,0.97ms\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3262,4.56s,917.67us,0.00ns,919.85us,4.87us,915.21us,0.98ms\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613345,146655,4.62s,20.38us,0.00ns,20.41us,673.00ns,20.21us,51.42us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613345,147794,4.63s,20.21us,0.00ns,20.25us,652.00ns,20.04us,49.67us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613345,26767,4.56s,111.29us,0.00ns,112.03us,2.61us,108.79us,148.21us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613345,3410,4.56s,878.38us,0.00ns,879.89us,6.52us,875.08us,1.03ms\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613345,68827,4.69s,42.92us,0.00ns,43.03us,1.01us,42.75us,73.58us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613345,32318,4.56s,92.54us,0.00ns,92.78us,1.58us,91.67us,125.75us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613345,34121,4.56s,87.58us,0.00ns,87.87us,1.54us,87.04us,121.62us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,613345,65564,4.56s,45.58us,0.00ns,45.70us,1.26us,45.17us,101.54us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,613345,66779,4.57s,44.50us,0.00ns,44.87us,3.20us,43.08us,280.21us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,19640,4.56s,152.12us,0.00ns,152.69us,8.51us,138.58us,198.54us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,19328,4.56s,153.46us,0.00ns,155.17us,10.03us,138.25us,224.58us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613345,7610,4.56s,392.92us,0.00ns,394.20us,3.71us,392.71us,438.29us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613345,3242,4.56s,923.38us,0.00ns,925.43us,5.44us,920.04us,0.97ms\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3242,4.56s,923.38us,0.00ns,925.47us,5.54us,919.96us,0.97ms\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613345,160997,4.63s,18.54us,0.00ns,18.58us,637.00ns,18.42us,48.67us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613345,170942,4.63s,17.46us,0.00ns,17.50us,612.00ns,17.33us,50.42us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613345,37709,4.56s,79.21us,0.00ns,79.51us,2.19us,76.50us,122.17us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613345,3409,4.56s,878.42us,0.00ns,880.16us,5.60us,875.00us,918.17us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613345,62571,4.67s,37.62us,0.00ns,47.35us,2.21ms,36.50us,554.09ms\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613345,38353,4.56s,79.42us,0.00ns,78.17us,2.82us,74.08us,121.71us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613345,40512,4.56s,74.04us,0.00ns,74.00us,1.66us,72.29us,126.46us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,613345,82393,4.56s,36.25us,0.00ns,36.36us,910.00ns,36.12us,76.88us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,613345,82385,4.56s,36.29us,0.00ns,36.36us,895.00ns,36.12us,71.00us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,25547,4.56s,118.83us,0.00ns,117.38us,4.07us,110.04us,151.88us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,26266,4.56s,112.21us,0.00ns,114.17us,4.25us,109.12us,154.46us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613345,8227,4.56s,363.42us,0.00ns,364.62us,3.58us,363.29us,413.62us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613345,3253,4.56s,919.83us,0.00ns,922.21us,5.31us,917.71us,0.96ms\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3253,4.56s,919.96us,0.00ns,922.33us,5.42us,917.96us,0.97ms\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613345,126604,4.87s,21.08us,0.00ns,25.65us,1.54ms,20.83us,549.65ms\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613345,169850,4.63s,17.42us,0.00ns,17.61us,657.00ns,16.83us,48.46us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613345,37999,4.56s,78.75us,0.00ns,78.90us,2.36us,75.00us,118.54us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613345,3411,4.56s,878.04us,0.00ns,879.48us,5.52us,874.67us,915.12us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613345,80236,4.69s,36.75us,0.00ns,36.86us,0.96us,36.62us,62.04us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613345,62689,4.56s,47.67us,0.00ns,47.80us,1.13us,47.12us,79.08us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613345,67233,4.56s,44.46us,0.00ns,44.57us,1.08us,43.96us,75.46us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,613345,83946,4.56s,35.58us,0.00ns,35.68us,946.00ns,35.42us,67.29us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,613345,83947,4.56s,35.58us,0.00ns,35.69us,0.95us,35.46us,86.00us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613345,25371,4.56s,118.67us,0.00ns,118.20us,3.93us,111.75us,154.33us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613345,26170,4.56s,112.38us,0.00ns,114.59us,4.33us,108.29us,159.04us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,28,1000000,689.55ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,9.33us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,1.33s,42.00ns,0.00ns,36.00ns,24.00ns,1.00ns,16.21us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,753.90ms,42.00ns,0.00ns,36.00ns,33.00ns,1.00ns,26.75us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,28,1000000,690.11ms,1.00ns,0.00ns,21.00ns,28.00ns,1.00ns,10.04us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,28,1000000,689.31ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,5.08us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,28,1000000,691.20ms,41.00ns,0.00ns,22.00ns,26.00ns,1.00ns,14.17us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,28,1000000,690.19ms,1.00ns,0.00ns,18.00ns,28.00ns,1.00ns,15.83us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,28,1000000,689.87ms,1.00ns,0.00ns,19.00ns,27.00ns,1.00ns,13.79us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,28,1000000,2.98s,292.00ns,0.00ns,299.00ns,70.00ns,166.00ns,25.17us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,689.85ms,1.00ns,0.00ns,20.00ns,33.00ns,1.00ns,22.75us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,690.07ms,41.00ns,0.00ns,25.00ns,25.00ns,1.00ns,8.92us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,28,1000000,691.68ms,1.00ns,0.00ns,19.00ns,32.00ns,1.00ns,16.50us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,28,1000000,691.88ms,1.00ns,0.00ns,18.00ns,27.00ns,1.00ns,13.88us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,1.06s,166.00ns,0.00ns,153.00ns,50.00ns,41.00ns,22.50us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,809.25ms,83.00ns,0.00ns,81.00ns,31.00ns,1.00ns,16.08us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,28,1000000,691.98ms,1.00ns,0.00ns,19.00ns,20.00ns,1.00ns,1.83us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,751.94ms,42.00ns,0.00ns,40.00ns,17.00ns,1.00ns,9.25us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,750.44ms,42.00ns,0.00ns,40.00ns,31.00ns,1.00ns,16.21us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,28,1000000,688.97ms,1.00ns,0.00ns,21.00ns,30.00ns,1.00ns,13.92us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,28,1000000,691.33ms,1.00ns,0.00ns,19.00ns,25.00ns,1.00ns,10.00us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,28,1000000,692.64ms,1.00ns,0.00ns,18.00ns,26.00ns,1.00ns,9.75us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,28,1000000,691.65ms,1.00ns,0.00ns,18.00ns,23.00ns,1.00ns,9.42us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,28,1000000,690.40ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,9.33us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,28,1000000,2.97s,292.00ns,0.00ns,307.00ns,73.00ns,208.00ns,25.17us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,690.39ms,1.00ns,0.00ns,19.00ns,22.00ns,1.00ns,7.00us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,689.27ms,41.00ns,0.00ns,22.00ns,28.00ns,1.00ns,16.67us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,28,1000000,691.28ms,1.00ns,0.00ns,18.00ns,24.00ns,1.00ns,13.92us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,28,1000000,691.41ms,1.00ns,0.00ns,18.00ns,20.00ns,1.00ns,209.00ns\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,28,1000000,813.22ms,83.00ns,0.00ns,66.00ns,32.00ns,1.00ns,12.17us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,28,1000000,756.93ms,42.00ns,0.00ns,34.00ns,22.00ns,1.00ns,9.54us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613402,2186,4.56s,1.37ms,0.00ns,1.37ms,6.69us,1.36ms,1.41ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613402,3298,4.56s,907.12us,0.00ns,909.78us,4.86us,906.92us,0.96ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613402,3298,4.56s,907.08us,0.00ns,909.76us,4.74us,906.92us,941.54us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613402,158239,4.63s,18.88us,0.00ns,18.91us,598.00ns,18.75us,43.71us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613402,127035,4.64s,18.88us,0.00ns,23.56us,1.53ms,18.21us,546.37ms\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613402,15066,4.55s,197.75us,0.00ns,199.08us,3.28us,196.12us,239.33us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613402,3414,4.55s,876.42us,1.00ns,878.87us,5.69us,875.17us,914.21us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613402,72982,4.69s,40.46us,0.00ns,40.54us,940.00ns,40.33us,65.58us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613402,112385,4.63s,26.58us,0.00ns,26.64us,782.00ns,25.62us,58.21us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613402,113089,4.63s,26.42us,0.00ns,26.48us,811.00ns,25.50us,56.88us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,613402,45107,4.56s,66.33us,0.00ns,66.46us,1.41us,62.75us,100.50us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,613402,45250,4.56s,66.00us,0.00ns,66.25us,1.40us,65.46us,101.67us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,14289,4.56s,208.83us,0.00ns,209.90us,3.98us,206.25us,253.04us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,14053,4.56s,211.21us,0.00ns,213.43us,5.17us,207.67us,252.71us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613402,1787,4.56s,1.68ms,0.00ns,1.68ms,8.63us,1.67ms,1.84ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613402,1295,4.54s,2.30ms,0.00ns,2.32ms,99.20us,2.29ms,4.19ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613402,1301,4.56s,2.30ms,0.00ns,2.31ms,7.95us,2.30ms,2.35ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613402,162227,4.63s,18.42us,0.00ns,18.44us,629.00ns,18.29us,49.71us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613402,162285,4.63s,18.38us,0.00ns,18.44us,668.00ns,18.25us,68.88us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613402,9889,4.55s,302.25us,0.00ns,303.33us,5.03us,297.79us,344.88us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613402,3411,4.56s,878.17us,0.00ns,879.64us,5.24us,875.21us,925.88us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,613402,8216,4.56s,364.67us,0.00ns,365.12us,3.56us,358.71us,402.58us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613402,72897,4.67s,40.50us,0.00ns,40.62us,0.97us,40.38us,79.29us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613402,112701,4.63s,26.50us,0.00ns,26.57us,787.00ns,25.54us,57.79us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613402,112898,4.63s,26.46us,0.00ns,26.52us,778.00ns,25.58us,62.21us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,613402,43449,4.57s,54.17us,0.00ns,69.00us,2.65ms,52.67us,552.07ms\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,613402,53049,4.56s,56.58us,0.00ns,56.50us,1.50us,54.42us,91.17us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613402,9574,4.56s,312.79us,0.00ns,313.30us,4.09us,309.12us,368.04us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613402,9500,4.56s,315.12us,0.00ns,315.75us,3.87us,311.17us,359.12us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,42,1000000,688.73ms,41.00ns,0.00ns,23.00ns,28.00ns,1.00ns,13.17us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,691.33ms,42.00ns,0.00ns,32.00ns,34.00ns,1.00ns,19.58us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,757.48ms,42.00ns,0.00ns,32.00ns,29.00ns,1.00ns,20.83us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,42,1000000,748.43ms,42.00ns,0.00ns,33.00ns,33.00ns,1.00ns,16.38us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,42,1000000,691.38ms,1.00ns,0.00ns,19.00ns,26.00ns,1.00ns,9.46us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,42,1000000,689.99ms,41.00ns,0.00ns,31.00ns,26.00ns,1.00ns,9.21us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,42,1000000,688.71ms,41.00ns,0.00ns,22.00ns,24.00ns,1.00ns,9.83us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,42,1000000,2.92s,292.00ns,0.00ns,291.00ns,50.00ns,166.00ns,15.25us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,755.24ms,42.00ns,0.00ns,35.00ns,33.00ns,1.00ns,16.25us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,689.93ms,41.00ns,0.00ns,28.00ns,24.00ns,1.00ns,10.17us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,42,1000000,691.91ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,10.00us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,42,1000000,691.73ms,1.00ns,0.00ns,18.00ns,23.00ns,1.00ns,9.38us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,42,1000000,1.24s,250.00ns,0.00ns,261.00ns,84.00ns,166.00ns,24.50us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,42,1000000,1.00s,125.00ns,0.00ns,138.00ns,62.00ns,41.00ns,23.08us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,42,1000000,754.61ms,42.00ns,0.00ns,41.00ns,39.00ns,1.00ns,23.50us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,748.69ms,42.00ns,0.00ns,58.00ns,37.00ns,1.00ns,15.83us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,749.38ms,42.00ns,0.00ns,58.00ns,34.00ns,1.00ns,15.75us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,42,1000000,690.38ms,41.00ns,0.00ns,25.00ns,31.00ns,1.00ns,19.54us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,42,1000000,692.49ms,1.00ns,0.00ns,19.00ns,26.00ns,1.00ns,13.25us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,42,1000000,692.04ms,1.00ns,0.00ns,19.00ns,20.00ns,1.00ns,167.00ns\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,42,1000000,690.55ms,41.00ns,0.00ns,22.00ns,21.00ns,1.00ns,6.21us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,42,1000000,690.20ms,1.00ns,0.00ns,21.00ns,32.00ns,1.00ns,19.67us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,42,1000000,2.97s,333.00ns,0.00ns,328.00ns,80.00ns,208.00ns,31.75us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,690.51ms,41.00ns,0.00ns,26.00ns,29.00ns,1.00ns,14.29us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,690.63ms,41.00ns,0.00ns,26.00ns,21.00ns,1.00ns,7.12us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,42,1000000,691.20ms,1.00ns,0.00ns,19.00ns,26.00ns,1.00ns,10.38us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,42,1000000,691.68ms,1.00ns,0.00ns,19.00ns,30.00ns,1.00ns,16.92us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,42,1000000,936.14ms,125.00ns,0.00ns,117.00ns,52.00ns,1.00ns,28.00us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,42,1000000,811.92ms,42.00ns,0.00ns,59.00ns,39.00ns,1.00ns,16.33us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613427,4885,4.56s,612.25us,0.00ns,614.13us,5.27us,611.12us,696.67us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613427,3221,4.75s,913.17us,0.00ns,931.55us,144.95us,886.21us,4.11ms\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613427,3277,4.56s,913.21us,0.00ns,915.58us,5.96us,911.33us,1.07ms\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613427,150308,4.63s,19.88us,0.00ns,19.91us,676.00ns,19.71us,70.04us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613427,150528,4.63s,19.83us,0.00ns,19.88us,661.00ns,19.71us,54.75us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613427,30160,4.56s,97.83us,0.00ns,99.42us,3.08us,96.42us,143.62us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613427,3414,4.56s,876.33us,0.00ns,878.86us,5.67us,875.21us,923.96us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613427,69238,4.69s,42.62us,0.00ns,42.73us,1.04us,42.46us,74.67us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613427,20500,4.56s,145.88us,0.00ns,146.29us,2.00us,145.00us,184.08us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613427,21879,4.55s,136.50us,0.00ns,137.06us,2.78us,135.62us,189.96us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,613427,76940,4.56s,38.79us,0.00ns,38.94us,1.12us,38.62us,72.29us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,613427,77140,4.56s,38.75us,0.00ns,38.84us,0.95us,38.58us,69.50us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,27678,4.56s,108.04us,0.00ns,108.34us,1.91us,107.04us,143.58us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,27601,4.56s,108.33us,0.00ns,108.64us,1.91us,107.00us,140.92us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,613427,4361,4.56s,685.71us,0.00ns,687.99us,5.77us,684.75us,800.83us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,613427,1839,4.56s,1.63ms,0.00ns,1.63ms,8.43us,1.62ms,1.82ms\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,613427,1840,4.56s,1.63ms,0.00ns,1.63ms,6.70us,1.62ms,1.68ms\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,613427,154179,4.63s,19.38us,0.00ns,19.41us,640.00ns,19.25us,49.58us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,613427,154331,4.63s,19.33us,0.00ns,19.39us,634.00ns,19.21us,65.79us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,613427,21954,4.56s,132.96us,0.00ns,136.60us,5.75us,131.54us,183.46us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,613427,3411,4.56s,877.38us,0.00ns,879.59us,5.54us,875.29us,919.79us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,613427,8214,4.56s,364.71us,1.00ns,365.19us,3.81us,358.46us,405.25us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,613427,72178,4.69s,40.92us,0.00ns,41.05us,1.04us,40.79us,76.71us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,613427,33988,4.56s,87.96us,0.00ns,88.21us,1.51us,87.25us,116.12us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,613427,32338,4.56s,92.46us,0.00ns,92.72us,1.61us,91.75us,126.79us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,613427,72839,4.56s,41.04us,0.00ns,41.13us,1.00us,40.83us,72.58us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,613427,72768,4.56s,41.08us,0.00ns,41.17us,1.00us,40.88us,77.08us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,613427,18564,4.56s,161.04us,0.00ns,161.55us,2.44us,157.17us,208.38us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,613427,18586,4.56s,160.88us,0.00ns,161.37us,2.44us,159.67us,208.58us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,31,1000000,689.19ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,10.21us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,690.42ms,1.00ns,0.00ns,20.00ns,21.00ns,1.00ns,6.79us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,691.75ms,1.00ns,0.00ns,20.00ns,31.00ns,1.00ns,21.38us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,31,1000000,689.75ms,41.00ns,0.00ns,28.00ns,30.00ns,1.00ns,16.33us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,31,1000000,691.13ms,1.00ns,0.00ns,19.00ns,21.00ns,1.00ns,6.67us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,31,1000000,688.59ms,41.00ns,0.00ns,23.00ns,27.00ns,1.00ns,16.62us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,31,1000000,689.72ms,1.00ns,0.00ns,18.00ns,24.00ns,1.00ns,9.42us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,31,1000000,2.92s,292.00ns,0.00ns,292.00ns,62.00ns,166.00ns,20.38us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,754.84ms,41.00ns,0.00ns,29.00ns,27.00ns,1.00ns,16.04us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,690.95ms,41.00ns,0.00ns,27.00ns,32.00ns,1.00ns,21.08us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,31,1000000,690.67ms,1.00ns,0.00ns,18.00ns,21.00ns,1.00ns,6.96us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,31,1000000,692.09ms,1.00ns,0.00ns,17.00ns,27.00ns,1.00ns,16.71us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,31,1000000,1.18s,250.00ns,0.00ns,238.00ns,74.00ns,125.00ns,24.46us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,31,1000000,934.18ms,125.00ns,0.00ns,121.00ns,46.00ns,1.00ns,21.67us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev f4d84cfc42),libc/memmem/oneshot,unknown,,31,1000000,689.66ms,41.00ns,0.00ns,22.00ns,27.00ns,1.00ns,12.25us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,751.81ms,42.00ns,0.00ns,39.00ns,26.00ns,1.00ns,16.67us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,753.41ms,42.00ns,0.00ns,39.00ns,31.00ns,1.00ns,16.46us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/oneshot,2.7.1,,31,1000000,689.06ms,1.00ns,0.00ns,20.00ns,22.00ns,1.00ns,6.67us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/prebuilt,2.7.1,,31,1000000,691.12ms,1.00ns,0.00ns,19.00ns,26.00ns,1.00ns,13.92us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/twoway,2.7.1,,31,1000000,691.15ms,1.00ns,0.00ns,19.00ns,24.00ns,1.00ns,11.88us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/rabinkarp,2.7.1,,31,1000000,691.11ms,1.00ns,0.00ns,18.00ns,35.00ns,1.00ns,23.33us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/shiftor,2.7.1,,31,1000000,690.42ms,1.00ns,0.00ns,19.00ns,30.00ns,1.00ns,21.29us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchr/memmem/wasm32,2.7.1,,31,1000000,3.04s,333.00ns,0.00ns,323.00ns,70.00ns,208.00ns,23.96us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,689.91ms,1.00ns,0.00ns,19.00ns,23.00ns,1.00ns,8.79us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,688.88ms,41.00ns,0.00ns,25.00ns,30.00ns,1.00ns,14.21us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/oneshot,0.4.1,,31,1000000,684.25ms,1.00ns,0.00ns,18.00ns,31.00ns,1.00ns,21.17us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/sliceslice/memmem/prebuilt,0.4.1,,31,1000000,690.29ms,1.00ns,0.00ns,18.00ns,26.00ns,1.00ns,16.33us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/oneshot,1.73.0-nightly 07438b092,,31,1000000,873.77ms,83.00ns,0.00ns,86.00ns,47.00ns,1.00ns,23.17us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev f4d84cfc42),rust/std/memmem/prebuilt,1.73.0-nightly 07438b092,,31,1000000,750.35ms,42.00ns,0.00ns,47.00ns,29.00ns,1.00ns,19.67us\n"
  },
  {
    "path": "benchmarks/record/x86_64/2023-07-31_baseline.csv",
    "content": "name,model,rebar_version,engine,engine_version,err,haystack_len,iters,total,median,mad,mean,stddev,min,max\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,15704,4.51s,199.27us,0.00ns,191.01us,12.97us,171.36us,209.17us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,17820,4.51s,172.52us,0.00ns,168.32us,6.15us,161.37us,183.42us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,17915,4.51s,163.43us,0.00ns,167.43us,5.42us,162.64us,186.39us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,7262,4.51s,413.68us,1.00ns,413.12us,7.58us,397.95us,509.83us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,16339,4.51s,183.20us,0.00ns,183.58us,1.80us,182.07us,201.67us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,9780,4.51s,306.57us,0.00ns,306.74us,0.98us,304.89us,318.88us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,8684,4.51s,345.25us,0.00ns,345.43us,751.00ns,343.97us,355.81us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,5965,4.51s,505.80us,0.00ns,502.94us,7.52us,482.16us,528.45us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,5507,4.51s,557.06us,0.00ns,544.77us,17.12us,520.42us,565.82us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,832.54ms,186.00ns,0.00ns,186.00ns,18.00ns,182.00ns,13.67us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,830.19ms,170.00ns,0.00ns,170.00ns,11.00ns,166.00ns,2.13us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,829.86ms,173.00ns,0.00ns,173.00ns,12.00ns,167.00ns,7.44us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,781.83ms,157.00ns,0.00ns,158.00ns,11.00ns,153.00ns,2.20us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,930.14ms,205.00ns,0.00ns,205.00ns,13.00ns,201.00ns,2.31us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,1.14s,332.00ns,0.00ns,332.00ns,17.00ns,325.00ns,6.15us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,1.23s,377.00ns,0.00ns,378.00ns,11.00ns,372.00ns,2.34us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,1.58s,515.00ns,0.00ns,516.00ns,20.00ns,505.00ns,5.18us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,1.58s,555.00ns,0.00ns,555.00ns,18.00ns,546.00ns,6.04us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,579.32ms,50.00ns,0.00ns,50.00ns,7.00ns,47.00ns,2.12us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,579.27ms,43.00ns,0.00ns,43.00ns,8.00ns,40.00ns,2.66us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,528.55ms,44.00ns,0.00ns,44.00ns,6.00ns,41.00ns,2.05us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,529.20ms,24.00ns,0.00ns,24.00ns,11.00ns,22.00ns,9.50us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,578.79ms,44.00ns,0.00ns,44.00ns,18.00ns,41.00ns,16.85us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,717868,4.83s,4.14us,0.00ns,4.15us,68.00ns,4.07us,28.36us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,718449,4.88s,4.14us,0.00ns,4.14us,60.00ns,4.10us,26.93us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,717200,4.83s,4.14us,0.00ns,4.15us,70.00ns,4.10us,16.18us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,26180,4.51s,114.38us,0.00ns,114.56us,1.08us,114.36us,159.18us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,676261,4.83s,4.39us,0.00ns,4.41us,118.00ns,4.32us,28.95us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,551844,4.78s,5.18us,0.00ns,5.41us,386.00ns,5.11us,17.12us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,565372,4.78s,5.17us,0.00ns,5.28us,249.00ns,5.13us,18.08us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,389614,4.67s,7.67us,0.00ns,7.67us,67.00ns,7.62us,19.91us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,384744,4.72s,7.72us,0.00ns,7.76us,136.00ns,7.63us,29.82us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,527.69ms,14.00ns,0.00ns,14.00ns,7.00ns,12.00ns,5.90us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,528.85ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,3.07us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,477.74ms,15.00ns,0.00ns,15.00ns,15.00ns,12.00ns,13.45us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,779.07ms,145.00ns,0.00ns,145.00ns,16.00ns,141.00ns,9.52us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,527.75ms,15.00ns,0.00ns,15.00ns,21.00ns,13.00ns,21.04us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,527.63ms,20.00ns,0.00ns,20.00ns,5.00ns,17.00ns,2.10us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,527.42ms,20.00ns,0.00ns,20.00ns,14.00ns,18.00ns,12.24us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,527.45ms,22.00ns,0.00ns,22.00ns,26.00ns,20.00ns,20.12us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,477.04ms,22.00ns,0.00ns,22.00ns,4.00ns,20.00ns,1.84us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,477.47ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,2.95us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,477.03ms,12.00ns,0.00ns,12.00ns,42.00ns,10.00ns,22.09us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,527.30ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,2.34us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,527.40ms,24.00ns,0.00ns,24.00ns,5.00ns,22.00ns,2.73us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,476.66ms,12.00ns,0.00ns,12.00ns,2.00ns,10.00ns,1.60us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,527.23ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.12us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,477.94ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.51us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,527.75ms,14.00ns,0.00ns,15.00ns,4.00ns,13.00ns,2.21us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,477.60ms,15.00ns,0.00ns,15.00ns,20.00ns,14.00ns,13.51us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,,1000000,527.20ms,11.00ns,0.00ns,11.00ns,24.00ns,9.00ns,17.51us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,,1000000,477.46ms,10.00ns,0.00ns,10.00ns,14.00ns,8.00ns,13.70us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,,1000000,477.05ms,11.00ns,0.00ns,11.00ns,8.00ns,9.00ns,6.27us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,,1000000,477.57ms,10.00ns,0.00ns,10.00ns,4.00ns,8.00ns,2.31us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,,1000000,476.90ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.18us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,,1000000,529.61ms,11.00ns,0.00ns,11.00ns,3.00ns,9.00ns,2.17us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,,1000000,477.64ms,11.00ns,0.00ns,11.00ns,3.00ns,9.00ns,1.72us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,,1000000,477.37ms,11.00ns,0.00ns,11.00ns,2.00ns,9.00ns,1.87us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,,1000000,476.91ms,11.00ns,0.00ns,11.00ns,18.00ns,9.00ns,12.66us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,594909,4.83s,5.01us,0.00ns,5.01us,64.00ns,4.94us,13.90us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,602155,4.78s,4.95us,0.00ns,4.95us,64.00ns,4.88us,10.55us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,582914,4.83s,5.15us,0.00ns,5.12us,114.00ns,4.89us,10.43us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,25475,4.51s,117.56us,0.00ns,117.73us,3.90us,115.26us,147.09us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,586024,4.83s,5.01us,0.00ns,5.09us,135.00ns,4.93us,10.18us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,376179,4.72s,7.92us,0.00ns,7.94us,145.00ns,7.77us,14.73us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,391580,4.73s,7.60us,0.00ns,7.63us,110.00ns,7.50us,28.54us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,275846,4.67s,10.81us,0.00ns,10.84us,210.00ns,10.71us,19.49us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,266521,4.62s,11.47us,0.00ns,11.22us,399.00ns,10.65us,15.86us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,527.55ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,2.50us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,527.14ms,18.00ns,0.00ns,18.00ns,4.00ns,16.00ns,2.39us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,527.83ms,19.00ns,0.00ns,19.00ns,5.00ns,16.00ns,2.36us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,778.67ms,152.00ns,0.00ns,152.00ns,12.00ns,146.00ns,5.90us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,527.69ms,20.00ns,0.00ns,20.00ns,24.00ns,17.00ns,13.83us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,527.43ms,29.00ns,0.00ns,29.00ns,6.00ns,27.00ns,2.10us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,527.56ms,29.00ns,0.00ns,29.00ns,18.00ns,26.00ns,16.88us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,577.11ms,38.00ns,0.00ns,38.00ns,7.00ns,34.00ns,2.12us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,577.30ms,37.00ns,0.00ns,37.00ns,24.00ns,34.00ns,18.39us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,527.58ms,15.00ns,0.00ns,15.00ns,19.00ns,13.00ns,18.85us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,578.05ms,15.00ns,0.00ns,15.00ns,20.00ns,13.00ns,14.07us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,527.66ms,15.00ns,0.00ns,15.00ns,1.00ns,13.00ns,313.00ns\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,527.01ms,23.00ns,0.00ns,23.00ns,22.00ns,21.00ns,13.96us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,476.72ms,14.00ns,0.00ns,14.00ns,5.00ns,11.00ns,2.79us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,527.58ms,22.00ns,0.00ns,22.00ns,5.00ns,20.00ns,2.43us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,527.87ms,20.00ns,0.00ns,20.00ns,4.00ns,17.00ns,2.28us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,527.44ms,26.00ns,0.00ns,26.00ns,5.00ns,23.00ns,2.36us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,527.54ms,25.00ns,0.00ns,25.00ns,16.00ns,21.00ns,15.48us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,87362,4.57s,34.21us,0.00ns,34.30us,464.00ns,33.28us,59.80us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,55727,4.56s,53.64us,0.00ns,53.80us,510.00ns,52.40us,68.68us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,53248,4.56s,56.74us,0.00ns,56.31us,1.41us,53.35us,71.41us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,18334,4.51s,158.28us,0.00ns,163.59us,8.02us,154.42us,223.39us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,61274,4.56s,48.29us,0.00ns,48.92us,1.51us,46.81us,70.55us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,25955,4.56s,114.20us,0.00ns,115.56us,4.44us,110.82us,144.83us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,26772,4.56s,111.75us,0.00ns,112.03us,1.36us,109.45us,136.07us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,20076,4.51s,149.28us,0.00ns,149.40us,0.97us,147.78us,168.87us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,19491,4.51s,153.56us,0.00ns,153.89us,1.56us,151.47us,177.27us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,577.70ms,46.00ns,0.00ns,46.00ns,7.00ns,44.00ns,2.67us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,578.03ms,45.00ns,0.00ns,45.00ns,7.00ns,41.00ns,2.27us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,577.88ms,45.00ns,0.00ns,45.00ns,6.00ns,42.00ns,2.51us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,778.96ms,157.00ns,0.00ns,158.00ns,11.00ns,145.00ns,2.27us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,577.57ms,48.00ns,0.00ns,49.00ns,24.00ns,45.00ns,15.24us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,680.85ms,100.00ns,0.00ns,100.00ns,8.00ns,92.00ns,2.04us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,729.89ms,91.00ns,0.00ns,91.00ns,9.00ns,86.00ns,1.95us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,730.04ms,139.00ns,0.00ns,139.00ns,8.00ns,129.00ns,1.98us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,729.81ms,141.00ns,0.00ns,142.00ns,11.00ns,135.00ns,2.68us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,527.55ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.35us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,527.19ms,29.00ns,0.00ns,29.00ns,6.00ns,27.00ns,2.59us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,543.42ms,29.00ns,0.00ns,29.00ns,6.00ns,27.00ns,2.25us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,539.81ms,25.00ns,0.00ns,27.00ns,20.00ns,22.00ns,18.20us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,527.76ms,28.00ns,0.00ns,28.00ns,23.00ns,26.00ns,18.32us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,579.44ms,59.00ns,0.00ns,59.00ns,7.00ns,54.00ns,2.50us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,579.24ms,53.00ns,0.00ns,53.00ns,7.00ns,49.00ns,2.48us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,628.89ms,69.00ns,0.00ns,69.00ns,8.00ns,63.00ns,2.84us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,629.87ms,75.00ns,0.00ns,75.00ns,7.00ns,70.00ns,2.57us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,7555,4.51s,396.88us,0.00ns,397.06us,1.46us,393.64us,423.13us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,8484,4.51s,352.32us,0.00ns,353.61us,4.99us,349.15us,380.19us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,8004,4.51s,381.33us,0.00ns,374.79us,11.26us,354.32us,393.57us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,3795,4.51s,790.01us,0.00ns,790.68us,6.37us,771.27us,841.21us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,7258,4.51s,403.41us,1.00ns,413.32us,12.83us,403.01us,445.74us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,1.33s,439.00ns,0.00ns,439.00ns,27.00ns,433.00ns,22.53us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,1.34s,397.00ns,0.00ns,397.00ns,14.00ns,393.00ns,4.78us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.28s,403.00ns,0.00ns,403.00ns,14.00ns,397.00ns,2.62us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,932.04ms,213.00ns,0.00ns,213.00ns,15.00ns,207.00ns,5.79us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,1.38s,447.00ns,0.00ns,448.00ns,14.00ns,442.00ns,2.11us\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,33335253,273,4.56s,11.00ms,0.00ns,11.01ms,43.78us,10.90ms,11.18ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,33335253,287,4.57s,10.48ms,0.00ns,10.48ms,102.58us,10.31ms,10.79ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,33335253,283,4.57s,10.61ms,0.00ns,10.60ms,140.78us,10.36ms,11.08ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,33335253,443,4.57s,6.69ms,0.00ns,6.78ms,194.62us,6.63ms,7.25ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,33335253,450,4.57s,6.67ms,141.00ns,6.67ms,37.05us,6.61ms,7.15ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/binary,2.5.0,,33335253,3191,4.57s,937.62us,0.00ns,940.31us,10.92us,922.27us,1.01ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,33335253,525,4.57s,5.72ms,0.00ns,5.72ms,82.54us,5.28ms,5.92ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,33335253,531,4.57s,5.71ms,0.00ns,5.65ms,143.86us,5.29ms,5.86ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,20949,4.52s,148.33us,0.00ns,143.17us,7.48us,132.96us,168.42us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13546,4.52s,225.39us,0.00ns,221.44us,10.90us,206.01us,253.85us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13632,4.51s,225.05us,0.00ns,220.04us,10.51us,205.94us,250.60us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,82979,4.56s,35.91us,0.00ns,36.11us,642.00ns,35.73us,52.18us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,78392,4.56s,38.17us,0.00ns,38.23us,313.00ns,37.97us,46.11us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,78416,4.56s,38.17us,0.00ns,38.22us,285.00ns,37.94us,54.20us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,75021,4.56s,40.20us,0.00ns,39.95us,787.00ns,38.04us,65.52us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,3005,4.51s,1.00ms,0.00ns,1.00ms,20.85us,0.96ms,1.05ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,3068,4.51s,0.98ms,6.00ns,0.98ms,12.25us,0.96ms,1.01ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,23462,4.56s,123.95us,0.00ns,127.83us,6.25us,122.53us,154.02us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13666,4.51s,225.07us,0.00ns,219.50us,11.12us,205.98us,250.97us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13567,4.51s,225.25us,0.00ns,221.10us,11.13us,206.00us,263.99us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,68317,4.56s,43.81us,0.00ns,43.87us,328.00ns,43.53us,52.65us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,79609,4.56s,37.60us,0.00ns,37.64us,254.00ns,37.41us,47.35us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,74132,4.56s,40.87us,0.00ns,40.42us,909.00ns,38.64us,64.25us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,75361,4.56s,39.30us,0.00ns,39.77us,1.07us,38.59us,138.07us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,3263,4.51s,914.52us,0.00ns,919.56us,18.08us,893.76us,0.97ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,3308,4.51s,905.94us,11.00ns,906.86us,9.79us,892.52us,936.38us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,16988,4.51s,175.82us,0.00ns,176.56us,3.11us,174.32us,209.31us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13541,4.51s,225.44us,0.00ns,221.51us,11.31us,205.94us,254.07us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13568,4.51s,225.25us,0.00ns,221.06us,10.72us,206.27us,254.89us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,75972,4.56s,39.67us,0.00ns,39.45us,758.00ns,37.66us,48.46us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,76952,4.56s,39.55us,0.00ns,38.95us,0.98us,37.46us,45.71us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,75078,4.56s,39.05us,0.00ns,39.92us,1.11us,38.58us,65.39us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,75281,4.56s,39.24us,0.00ns,39.81us,0.97us,38.87us,56.48us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,3343,4.51s,897.94us,0.00ns,897.40us,7.83us,882.58us,935.78us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,3370,4.51s,891.73us,1.00ns,890.30us,6.48us,877.49us,913.86us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,33020,4.56s,90.69us,0.00ns,90.82us,784.00ns,89.80us,105.54us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13940,4.51s,219.57us,0.00ns,215.17us,11.34us,200.11us,258.75us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13883,4.51s,219.70us,0.00ns,216.06us,11.02us,200.28us,246.42us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,76916,4.56s,39.84us,0.00ns,38.96us,1.11us,37.54us,44.75us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,78094,4.56s,37.60us,0.00ns,38.37us,1.08us,37.36us,58.28us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,276838,4.67s,10.75us,0.00ns,10.80us,183.00ns,10.39us,18.01us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,278442,4.68s,10.75us,0.00ns,10.74us,116.00ns,10.29us,34.65us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,3463,4.51s,865.66us,0.00ns,866.47us,4.12us,856.95us,889.61us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,3464,4.51s,865.63us,0.00ns,866.12us,3.95us,857.54us,919.85us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,22563,4.51s,135.78us,0.00ns,132.93us,6.66us,122.04us,153.85us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13585,4.51s,225.43us,0.00ns,220.80us,11.22us,206.39us,257.41us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13540,4.51s,225.48us,0.00ns,221.53us,10.77us,206.11us,277.41us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,76281,4.57s,38.84us,0.00ns,39.29us,901.00ns,38.56us,46.14us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,78845,4.57s,37.93us,0.00ns,38.01us,393.00ns,37.70us,64.06us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,3159,4.51s,949.11us,0.00ns,949.85us,4.58us,939.50us,0.98ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,3165,4.51s,947.29us,0.00ns,948.08us,4.41us,938.12us,0.98ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,4325,4.51s,692.74us,0.00ns,693.66us,5.01us,687.35us,718.04us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,10884,4.51s,279.58us,1.00ns,275.59us,10.78us,261.56us,323.73us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,11114,4.51s,273.41us,5.00ns,269.90us,11.16us,254.56us,316.28us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,27114,4.57s,110.08us,0.00ns,110.61us,1.01us,109.21us,128.47us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,46469,4.57s,63.37us,0.00ns,64.53us,2.62us,62.22us,90.75us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,3307,4.51s,907.79us,0.00ns,907.27us,4.32us,891.42us,929.44us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,3363,4.51s,892.44us,0.00ns,892.20us,5.07us,873.84us,936.87us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,11601,4.51s,258.40us,0.00ns,258.58us,3.84us,249.87us,281.06us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,3869,4.51s,776.06us,0.00ns,775.45us,13.53us,736.09us,833.12us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,4371,4.51s,684.50us,0.00ns,686.42us,13.55us,656.55us,748.46us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,4957,4.51s,604.88us,0.00ns,605.22us,3.15us,598.89us,632.76us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,10244,4.51s,288.99us,1.00ns,292.81us,8.84us,281.05us,327.78us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,2533,4.51s,1.18ms,0.00ns,1.18ms,11.09us,1.17ms,1.26ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,2788,4.51s,1.07ms,3.00ns,1.08ms,14.92us,1.06ms,1.26ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,6376,4.51s,469.82us,0.00ns,470.54us,2.47us,464.08us,492.65us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,8659,4.51s,349.49us,0.00ns,346.43us,9.82us,331.71us,379.77us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,8901,4.52s,339.27us,0.00ns,337.03us,10.40us,319.17us,372.00us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,16323,4.52s,183.72us,0.00ns,183.76us,2.75us,178.45us,212.20us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,33015,4.57s,88.09us,0.00ns,90.84us,3.96us,86.93us,112.75us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,2552,4.51s,1.17ms,0.00ns,1.18ms,5.53us,1.16ms,1.20ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,2631,4.51s,1.14ms,0.00ns,1.14ms,3.44us,1.12ms,1.17ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,151305,801130,4.94s,3.68us,0.00ns,3.71us,146.00ns,3.48us,9.74us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,151305,125064,4.57s,24.26us,0.00ns,23.96us,0.97us,22.68us,34.40us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,151305,124810,4.57s,24.35us,0.00ns,24.01us,882.00ns,22.76us,28.59us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,850083,5.00s,3.48us,0.00ns,3.50us,69.00ns,3.38us,9.14us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,886775,4.84s,3.34us,0.00ns,3.35us,63.00ns,3.27us,18.84us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,151305,613798,4.78s,4.79us,0.00ns,4.86us,274.00ns,4.56us,10.31us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,583686,4.78s,5.05us,0.00ns,5.11us,218.00ns,4.88us,10.13us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,151305,369458,4.67s,8.25us,0.00ns,8.09us,482.00ns,7.30us,14.64us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,151305,369385,4.67s,8.30us,0.00ns,8.09us,537.00ns,7.30us,13.35us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,151305,696981,4.89s,4.01us,0.00ns,4.27us,610.00ns,3.89us,11.13us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,151305,125822,4.57s,24.18us,0.00ns,23.81us,876.00ns,22.50us,33.08us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,151305,124890,4.57s,24.29us,0.00ns,23.99us,945.00ns,22.63us,33.55us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,850344,4.89s,3.50us,0.00ns,3.50us,59.00ns,3.35us,8.11us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,887255,4.89s,3.36us,0.00ns,3.35us,69.00ns,3.22us,7.68us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,151305,609143,4.73s,4.76us,0.00ns,4.89us,317.00ns,4.53us,11.25us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,581888,4.83s,5.08us,0.00ns,5.13us,199.00ns,4.86us,11.45us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,151305,479600,4.78s,5.98us,0.00ns,6.22us,555.00ns,5.75us,26.06us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,151305,462629,4.78s,6.56us,0.00ns,6.45us,314.00ns,5.71us,15.24us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,500100,103424,4.57s,26.57us,0.00ns,28.97us,2.91us,25.65us,40.72us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,500100,52106,4.56s,60.11us,0.00ns,57.54us,3.28us,54.08us,72.15us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,500100,51817,4.56s,60.11us,0.00ns,57.86us,3.43us,54.08us,72.14us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,261125,4.67s,11.42us,0.00ns,11.46us,117.00ns,11.30us,16.59us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,262660,4.67s,11.38us,0.00ns,11.39us,94.00ns,11.27us,19.02us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,500100,270159,4.67s,11.10us,0.00ns,11.07us,166.00ns,10.64us,15.37us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,500100,266670,4.62s,11.31us,0.00ns,11.22us,201.00ns,10.75us,16.68us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,500100,13853,4.51s,216.32us,0.00ns,216.54us,942.00ns,216.30us,242.63us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,500100,13851,4.51s,216.31us,0.00ns,216.58us,1.16us,216.29us,264.45us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,500100,4518,4.51s,664.07us,0.00ns,663.98us,6.39us,650.65us,690.30us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,500100,3776,4.51s,792.94us,1.00ns,794.52us,4.13us,789.36us,849.41us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,500100,8243,4.51s,350.77us,0.00ns,363.93us,23.75us,347.61us,415.51us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,1916,4.51s,1.53ms,5.00ns,1.57ms,65.57us,1.51ms,1.75ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,9876,4.51s,288.77us,0.00ns,303.76us,32.51us,272.34us,389.86us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,500100,2804,4.51s,1.07ms,0.00ns,1.07ms,21.74us,1.04ms,1.24ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,500100,10375,4.51s,278.81us,0.00ns,289.14us,18.48us,269.16us,375.86us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1001,1000000,627.55ms,81.00ns,0.00ns,82.00ns,8.00ns,77.00ns,2.03us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,728.41ms,142.00ns,0.00ns,139.00ns,12.00ns,128.00ns,4.83us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,728.23ms,141.00ns,0.00ns,138.00ns,13.00ns,126.00ns,4.65us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,1000000,577.48ms,60.00ns,0.00ns,60.00ns,16.00ns,55.00ns,11.20us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,577.91ms,40.00ns,0.00ns,40.00ns,6.00ns,37.00ns,2.17us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1001,1000000,527.56ms,30.00ns,0.00ns,30.00ns,6.00ns,27.00ns,2.19us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1001,1000000,527.69ms,29.00ns,0.00ns,29.00ns,14.00ns,26.00ns,13.40us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1001,1000000,1.38s,458.00ns,0.00ns,459.00ns,17.00ns,454.00ns,9.52us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1001,1000000,1.28s,458.00ns,0.00ns,459.00ns,19.00ns,454.00ns,2.40us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1001,1000000,3.19s,1.35us,0.00ns,1.35us,33.00ns,1.33us,6.05us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,3.49s,1.54us,0.00ns,1.55us,28.00ns,1.53us,6.45us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,1.98s,728.00ns,0.00ns,752.00ns,51.00ns,711.00ns,5.84us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,982833,5.04s,2.93us,0.00ns,3.02us,159.00ns,2.87us,8.53us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,1.63s,563.00ns,0.00ns,585.00ns,52.00ns,541.00ns,8.06us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1001,1000000,4.19s,2.17us,0.00ns,2.19us,97.00ns,2.10us,8.24us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1001,1000000,1.73s,590.00ns,0.00ns,619.00ns,49.00ns,566.00ns,2.58us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,550004,34532,4.56s,86.38us,0.00ns,86.84us,1.80us,84.04us,105.33us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,550004,29146,4.56s,102.33us,0.00ns,102.90us,2.34us,98.91us,114.88us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,550004,28992,4.56s,102.98us,0.00ns,103.44us,2.23us,99.65us,115.84us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,550004,23981,4.56s,124.33us,0.00ns,125.06us,3.45us,122.83us,157.03us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,550004,23463,4.51s,128.28us,0.00ns,127.82us,4.08us,122.75us,158.72us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,550004,37507,4.56s,77.86us,0.00ns,79.95us,3.68us,73.43us,89.67us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,550004,38156,4.56s,77.18us,0.00ns,78.59us,3.16us,73.32us,89.60us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,550004,49112,4.56s,60.27us,0.00ns,61.05us,2.13us,59.91us,71.86us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,550004,49695,4.56s,60.26us,0.00ns,60.33us,355.00ns,59.92us,83.88us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,720057,69626,4.56s,43.02us,0.00ns,43.05us,228.00ns,42.99us,49.08us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,720057,36246,4.56s,86.52us,0.00ns,82.73us,4.97us,77.86us,99.71us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,720057,36236,4.56s,86.52us,0.00ns,82.75us,4.91us,77.86us,103.85us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,77338,4.56s,39.41us,1.00ns,38.76us,890.00ns,37.78us,44.13us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,79714,4.57s,37.49us,0.00ns,37.60us,272.00ns,37.45us,44.73us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,720057,13090,4.51s,229.37us,0.00ns,229.15us,1.30us,225.32us,248.77us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,13126,4.51s,229.28us,0.00ns,228.54us,1.91us,224.94us,239.45us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,720057,139080,4.62s,21.51us,0.00ns,21.54us,206.00ns,21.48us,29.84us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,720057,139402,4.62s,21.45us,0.00ns,21.49us,280.00ns,21.42us,44.91us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,720057,2831,4.51s,1.07ms,0.00ns,1.06ms,13.84us,1.04ms,1.09ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,720057,618,4.51s,4.85ms,9.00ns,4.86ms,4.68us,4.84ms,4.89ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,720057,614,4.51s,4.89ms,19.00ns,4.89ms,4.72us,4.88ms,4.93ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,4842,4.51s,623.59us,0.00ns,619.60us,9.42us,600.44us,635.67us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,4839,4.51s,624.33us,0.00ns,620.00us,9.32us,600.14us,634.95us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,720057,2209,4.51s,1.36ms,0.00ns,1.36ms,10.58us,1.33ms,1.41ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,2234,4.51s,1.35ms,38.00ns,1.34ms,14.96us,1.31ms,1.41ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,720057,6477,4.51s,461.89us,0.00ns,463.22us,13.44us,439.22us,557.03us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,720057,6460,4.51s,461.61us,0.00ns,464.37us,17.51us,438.97us,564.77us\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,,203,4.56s,14.70ms,0.00ns,14.81ms,318.43us,14.52ms,17.62ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,,196,4.56s,15.31ms,902.00ns,15.33ms,66.69us,15.21ms,15.55ms\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1000,35083,4.56s,85.02us,0.00ns,85.48us,1.17us,84.50us,105.09us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1000,38377,4.56s,78.10us,0.00ns,78.13us,624.00ns,75.30us,83.92us\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,806771,171,4.56s,17.59ms,0.00ns,17.59ms,13.13us,17.57ms,17.72ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,806771,155,4.56s,19.39ms,0.00ns,19.39ms,31.82us,19.33ms,19.47ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,19333,4.51s,153.83us,0.00ns,155.15us,4.49us,147.11us,175.40us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,22597,4.51s,133.31us,0.00ns,132.73us,4.26us,125.62us,150.61us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,23237,4.56s,129.80us,0.00ns,129.07us,3.52us,123.64us,143.35us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,73017,4.56s,40.76us,0.00ns,41.05us,926.00ns,39.35us,47.19us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,170333,4.62s,17.35us,0.00ns,17.58us,496.00ns,17.09us,35.45us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,10879,4.51s,276.74us,0.00ns,275.75us,7.99us,256.71us,296.81us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,11242,4.51s,268.01us,1.00ns,266.84us,8.18us,248.95us,287.33us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,11307,4.51s,264.66us,0.00ns,265.30us,2.39us,260.47us,290.75us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,16711,4.51s,179.45us,0.00ns,179.50us,3.43us,173.34us,197.25us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,17641,4.51s,169.72us,0.00ns,170.03us,3.91us,159.45us,188.45us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,19013,4.51s,157.72us,0.00ns,157.76us,2.80us,153.33us,193.47us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,60920,4.56s,47.36us,0.00ns,49.21us,3.65us,45.14us,73.81us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,8873,4.51s,338.41us,0.00ns,338.08us,8.29us,311.91us,361.55us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,9760,4.51s,307.56us,1.00ns,307.35us,7.66us,279.20us,373.69us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,7886,4.51s,380.05us,0.00ns,380.39us,1.81us,376.08us,404.32us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,1951,4.51s,1.54ms,0.00ns,1.54ms,9.40us,1.52ms,1.64ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2950,4.51s,0.99ms,9.00ns,1.02ms,46.20us,0.97ms,1.12ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,2211,4.51s,1.36ms,0.00ns,1.36ms,1.70us,1.36ms,1.37ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,6886,4.51s,417.42us,0.00ns,435.66us,31.81us,414.12us,544.36us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,2074,4.51s,1.43ms,5.00ns,1.45ms,47.03us,1.38ms,1.62ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,2922,4.51s,1.02ms,2.00ns,1.03ms,26.16us,0.99ms,1.15ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,14438,4.51s,207.60us,0.00ns,207.76us,1.84us,203.06us,223.67us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,18293,4.51s,163.58us,0.00ns,163.97us,3.89us,156.98us,181.72us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,18681,4.51s,160.24us,0.00ns,160.56us,3.98us,154.50us,178.15us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,58417,4.56s,51.14us,0.00ns,51.32us,561.00ns,50.36us,56.54us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,150984,4.57s,19.26us,0.00ns,19.84us,0.99us,18.59us,28.03us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613402,6158,4.51s,486.77us,1.00ns,487.20us,2.87us,481.39us,514.23us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613402,6394,4.51s,469.00us,1.00ns,469.18us,2.40us,464.07us,485.10us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,10623,4.51s,282.17us,0.00ns,282.38us,1.26us,278.11us,296.83us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,9009,4.51s,333.17us,0.00ns,333.00us,4.11us,321.81us,354.91us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,9300,4.51s,322.82us,1.00ns,322.55us,4.09us,311.51us,339.61us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,26340,4.56s,115.08us,0.00ns,113.87us,2.76us,108.71us,137.67us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,69926,4.56s,42.38us,1.00ns,42.87us,1.97us,40.27us,57.08us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613402,5127,4.51s,584.47us,0.00ns,585.16us,3.98us,576.84us,604.35us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613402,5530,4.51s,541.67us,2.00ns,542.49us,3.30us,536.96us,563.73us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,15231,4.51s,196.83us,0.00ns,196.95us,0.99us,194.25us,206.98us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,3470,4.51s,864.08us,2.00ns,864.62us,8.68us,840.32us,911.10us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,4765,4.51s,621.72us,0.00ns,629.64us,19.83us,600.75us,695.46us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,4458,4.51s,671.64us,0.00ns,672.92us,4.03us,669.15us,701.13us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,12833,4.51s,236.45us,0.00ns,233.75us,19.77us,210.89us,286.86us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613402,3584,4.51s,826.05us,15.00ns,837.14us,28.05us,799.69us,0.97ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613402,4757,4.51s,627.99us,0.00ns,630.63us,11.26us,617.66us,710.21us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,21846,4.51s,136.75us,0.00ns,137.30us,1.64us,135.12us,152.76us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29998,4.56s,101.48us,0.00ns,99.98us,4.11us,94.41us,113.74us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,30771,4.56s,98.94us,0.00ns,97.47us,3.92us,91.68us,111.76us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,73776,4.56s,40.50us,0.00ns,40.63us,428.00ns,40.04us,46.35us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,143490,4.62s,21.28us,0.00ns,20.87us,0.99us,19.12us,32.60us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613427,21730,4.56s,138.07us,0.00ns,138.03us,3.25us,131.93us,164.62us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613427,23071,4.56s,129.04us,0.00ns,130.01us,2.87us,125.17us,169.94us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,13728,4.51s,217.16us,0.00ns,218.50us,3.50us,213.35us,242.38us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,17570,4.51s,170.99us,1.00ns,170.72us,3.48us,164.70us,184.99us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,18274,4.51s,164.17us,0.00ns,164.14us,3.82us,157.95us,183.93us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,33868,4.56s,88.39us,0.00ns,88.55us,1.00us,87.44us,108.96us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,77507,4.56s,38.92us,0.00ns,38.67us,1.92us,34.84us,49.35us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613427,11260,4.51s,266.06us,0.00ns,266.40us,5.64us,252.61us,290.83us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613427,12226,4.51s,244.99us,0.00ns,245.36us,5.70us,231.22us,266.53us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,31231,4.56s,94.50us,0.00ns,96.03us,3.51us,92.86us,124.58us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,7744,4.51s,387.38us,0.00ns,387.38us,4.05us,375.78us,411.53us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,9417,4.51s,319.55us,0.00ns,318.57us,6.59us,299.82us,339.06us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,10181,4.51s,293.08us,0.00ns,294.66us,5.23us,291.49us,327.27us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,25032,4.56s,117.30us,0.00ns,119.81us,5.83us,113.38us,152.94us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613427,5755,4.51s,517.38us,0.00ns,521.29us,11.38us,506.23us,585.28us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613427,6768,4.51s,442.34us,1.00ns,443.25us,4.73us,434.71us,495.58us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,77305,4.56s,38.13us,0.00ns,38.77us,2.99us,34.12us,50.83us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41512,4.56s,74.16us,0.00ns,72.23us,4.11us,66.79us,85.10us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41398,4.56s,74.16us,0.00ns,72.43us,4.15us,66.78us,87.21us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,221242,4.62s,13.52us,0.00ns,13.53us,120.00ns,13.24us,20.78us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,224691,4.62s,13.30us,0.00ns,13.32us,137.00ns,13.18us,36.75us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,219782,4.62s,13.75us,0.00ns,13.62us,268.00ns,13.17us,19.43us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,221628,4.62s,13.32us,0.00ns,13.51us,264.00ns,13.16us,17.79us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,10476,4.51s,285.89us,0.00ns,286.34us,5.51us,271.65us,312.56us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,10517,4.51s,284.96us,0.00ns,285.23us,4.82us,271.30us,311.46us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,70848,4.56s,42.18us,0.00ns,42.31us,707.00ns,40.55us,48.83us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,32948,4.56s,92.37us,0.00ns,91.02us,4.00us,85.48us,104.59us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,32988,4.56s,92.15us,0.00ns,90.91us,4.13us,85.18us,109.35us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,210558,4.62s,14.34us,0.00ns,14.21us,409.00ns,13.51us,21.75us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,215580,4.62s,13.66us,0.00ns,13.88us,313.00ns,13.48us,18.45us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,223299,4.62s,13.29us,0.00ns,13.40us,239.00ns,13.08us,25.49us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,224881,4.62s,13.28us,0.00ns,13.31us,149.00ns,13.08us,17.85us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,17756,4.51s,167.65us,2.00ns,168.92us,6.66us,153.30us,189.92us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,17565,4.51s,169.55us,0.00ns,170.76us,6.63us,154.50us,193.47us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,53874,4.56s,56.46us,0.00ns,55.65us,1.94us,51.24us,65.85us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41505,4.56s,74.31us,0.00ns,72.25us,4.11us,66.93us,97.47us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41557,4.56s,74.31us,0.00ns,72.16us,4.13us,66.93us,91.26us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,219786,4.62s,13.51us,0.00ns,13.61us,227.00ns,13.22us,18.01us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,224300,4.62s,13.30us,0.00ns,13.34us,165.00ns,13.18us,19.24us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,226764,4.62s,13.18us,0.00ns,13.20us,119.00ns,13.03us,25.23us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,225638,4.62s,13.19us,0.00ns,13.26us,169.00ns,13.06us,27.97us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,16475,4.51s,181.30us,0.00ns,182.06us,7.38us,164.01us,297.89us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,16544,4.51s,179.94us,2.00ns,181.30us,7.85us,164.95us,210.20us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,11906,4.51s,249.81us,1.00ns,251.95us,2.92us,235.82us,323.35us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,21013,4.51s,142.38us,0.00ns,142.74us,3.80us,136.50us,158.80us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,21006,4.51s,142.44us,0.00ns,142.79us,3.65us,137.46us,158.84us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,223629,4.62s,13.33us,0.00ns,13.38us,150.00ns,13.19us,36.25us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,224649,4.62s,13.30us,0.00ns,13.32us,130.00ns,13.19us,26.70us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,220043,4.62s,13.66us,0.00ns,13.60us,229.00ns,13.06us,18.04us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,219885,4.62s,13.65us,0.00ns,13.61us,300.00ns,13.07us,22.02us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,7259,4.51s,413.41us,0.00ns,413.25us,8.04us,391.74us,469.85us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,7275,4.51s,412.55us,0.00ns,412.39us,7.69us,390.89us,457.21us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,577.12ms,23.00ns,0.00ns,23.00ns,6.00ns,21.00ns,4.65us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,534.14ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,2.28us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,577.75ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,1.96us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.08ms,26.00ns,0.00ns,27.00ns,180.00ns,23.00ns,179.56us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,476.83ms,23.00ns,0.00ns,23.00ns,7.00ns,21.00ns,2.97us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.03ms,17.00ns,0.00ns,17.00ns,4.00ns,15.00ns,2.09us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,527.12ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,1.93us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,28,1000000,527.61ms,29.00ns,0.00ns,29.00ns,6.00ns,27.00ns,2.92us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,28,1000000,577.78ms,30.00ns,0.00ns,30.00ns,13.00ns,27.00ns,11.93us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.92ms,22.00ns,0.00ns,22.00ns,6.00ns,20.00ns,2.73us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.78ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.67us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,535.36ms,24.00ns,0.00ns,24.00ns,21.00ns,21.00ns,19.81us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.28ms,27.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.15us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.81ms,23.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.44us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,533.57ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,2.00us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,477.15ms,12.00ns,0.00ns,12.00ns,32.00ns,10.00ns,19.46us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,28,1000000,527.56ms,28.00ns,0.00ns,28.00ns,10.00ns,25.00ns,8.15us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,28,1000000,527.25ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.65us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.38ms,22.00ns,0.00ns,22.00ns,18.00ns,19.00ns,17.30us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.54ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.28us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.16ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.69us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.25ms,26.00ns,0.00ns,26.00ns,4.00ns,24.00ns,2.08us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.16ms,23.00ns,0.00ns,23.00ns,6.00ns,21.00ns,2.49us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,477.43ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.10us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,477.22ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,1.97us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,28,1000000,527.54ms,24.00ns,0.00ns,24.00ns,5.00ns,22.00ns,2.38us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,28,1000000,527.47ms,24.00ns,0.00ns,24.00ns,5.00ns,22.00ns,1.98us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.44ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.42us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.31ms,28.00ns,0.00ns,28.00ns,7.00ns,26.00ns,2.60us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.30ms,24.00ns,0.00ns,24.00ns,6.00ns,21.00ns,2.68us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.15ms,27.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.01us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.20ms,23.00ns,0.00ns,23.00ns,15.00ns,21.00ns,14.09us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,477.33ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.17us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,477.63ms,12.00ns,0.00ns,12.00ns,30.00ns,10.00ns,20.43us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,28,1000000,528.49ms,25.00ns,0.00ns,25.00ns,6.00ns,22.00ns,2.85us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,28,1000000,527.59ms,25.00ns,0.00ns,25.00ns,5.00ns,23.00ns,2.16us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,26909,4.56s,109.90us,0.00ns,111.45us,2.46us,108.11us,148.80us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13647,4.51s,221.00us,0.00ns,219.81us,4.61us,209.07us,237.68us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13610,4.51s,221.27us,0.00ns,220.39us,4.43us,208.59us,239.96us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,181214,4.62s,16.51us,0.00ns,16.52us,130.00ns,16.14us,24.03us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,219288,4.62s,13.62us,0.00ns,13.65us,133.00ns,13.50us,33.81us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,70439,4.56s,42.83us,0.00ns,42.56us,1.99us,39.02us,64.48us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,68237,4.56s,44.27us,0.00ns,43.93us,2.55us,40.84us,69.32us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613402,14326,4.51s,207.53us,1.00ns,209.38us,4.05us,203.73us,224.50us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613402,14430,4.51s,206.51us,0.00ns,207.87us,3.55us,203.18us,241.82us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,477.68ms,26.00ns,0.00ns,27.00ns,17.00ns,24.00ns,15.51us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,527.61ms,27.00ns,0.00ns,27.00ns,8.00ns,24.00ns,5.74us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,527.84ms,25.00ns,0.00ns,25.00ns,6.00ns,22.00ns,2.72us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,527.37ms,34.00ns,0.00ns,34.00ns,11.00ns,31.00ns,9.53us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,527.13ms,23.00ns,0.00ns,23.00ns,25.00ns,21.00ns,19.71us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,527.25ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.57us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,476.90ms,12.00ns,0.00ns,12.00ns,4.00ns,11.00ns,2.16us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,42,1000000,577.30ms,45.00ns,0.00ns,46.00ns,6.00ns,42.00ns,2.11us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,42,1000000,577.18ms,45.00ns,0.00ns,45.00ns,7.00ns,42.00ns,2.19us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,107913,4.57s,27.59us,0.00ns,27.77us,689.00ns,26.91us,36.85us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,34961,4.56s,87.23us,0.00ns,85.77us,3.99us,80.40us,103.57us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,34978,4.56s,87.26us,0.00ns,85.73us,3.75us,80.41us,99.40us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,217404,4.62s,13.95us,0.00ns,13.77us,294.00ns,13.36us,24.65us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,219829,4.62s,13.46us,0.00ns,13.61us,270.00ns,13.31us,18.53us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,214051,4.62s,13.89us,0.00ns,13.98us,265.00ns,13.59us,20.54us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,217562,4.62s,13.73us,0.00ns,13.75us,137.00ns,13.55us,21.45us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613427,32605,4.56s,91.50us,0.00ns,91.98us,1.96us,88.11us,109.96us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613427,32466,4.56s,91.74us,0.00ns,92.37us,2.67us,77.02us,123.62us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,628.07ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.07us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,527.67ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.10us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,527.35ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.85us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,577.32ms,27.00ns,0.00ns,27.00ns,5.00ns,25.00ns,2.17us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,527.74ms,23.00ns,0.00ns,23.00ns,13.00ns,21.00ns,11.81us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,477.22ms,17.00ns,0.00ns,17.00ns,5.00ns,15.00ns,2.76us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,477.38ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,2.44us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,31,1000000,577.46ms,35.00ns,0.00ns,35.00ns,6.00ns,31.00ns,2.48us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,31,1000000,577.78ms,34.00ns,0.00ns,34.00ns,6.00ns,31.00ns,1.94us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,82629,4.56s,34.15us,0.00ns,36.27us,4.01us,30.22us,63.31us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,40366,4.56s,75.86us,0.00ns,74.28us,4.24us,68.50us,96.92us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,40650,4.56s,75.80us,0.00ns,73.76us,4.24us,68.43us,93.13us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,213950,4.62s,13.95us,0.00ns,13.99us,137.00ns,13.71us,22.38us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,219208,4.62s,13.63us,0.00ns,13.65us,127.00ns,13.51us,21.09us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,216282,4.62s,14.02us,0.00ns,13.84us,331.00ns,13.26us,21.86us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,216422,4.62s,13.46us,0.00ns,13.83us,475.00ns,13.25us,18.49us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,16453,4.51s,181.69us,0.00ns,182.31us,5.62us,166.78us,200.30us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,16727,4.51s,178.00us,0.00ns,179.32us,4.68us,166.26us,197.56us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,61910,4.56s,48.21us,0.00ns,48.42us,909.00ns,46.54us,56.16us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,40389,4.56s,75.88us,0.00ns,74.24us,4.25us,68.52us,92.36us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,40479,4.56s,75.94us,0.00ns,74.08us,4.16us,68.58us,87.28us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,218177,4.62s,13.84us,0.00ns,13.72us,256.00ns,13.27us,21.37us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,220361,4.62s,13.40us,0.00ns,13.58us,264.00ns,13.24us,19.51us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,220545,4.62s,13.44us,0.00ns,13.57us,251.00ns,13.26us,17.13us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,225247,4.62s,13.25us,0.00ns,13.29us,151.00ns,13.12us,18.64us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,14854,4.51s,201.51us,2.00ns,201.94us,7.51us,179.24us,222.78us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,14734,4.51s,203.21us,0.00ns,203.58us,7.88us,182.40us,225.02us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,180695,4.62s,16.52us,0.00ns,16.57us,331.00ns,15.84us,27.67us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,32680,4.56s,93.26us,0.00ns,91.77us,3.76us,86.38us,111.28us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,32828,4.56s,92.85us,0.00ns,91.35us,3.66us,86.18us,104.76us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,209647,4.62s,14.09us,0.00ns,14.28us,347.00ns,13.92us,18.69us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,213696,4.62s,13.96us,0.00ns,14.01us,204.00ns,13.80us,29.09us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,149194,4.62s,19.61us,0.00ns,20.07us,1.30us,19.16us,28.86us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,142503,4.62s,20.69us,0.00ns,21.02us,912.00ns,20.26us,32.02us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,29221,4.52s,102.12us,0.00ns,102.63us,4.39us,91.51us,122.16us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,28911,4.56s,103.96us,0.00ns,103.73us,4.17us,89.34us,117.44us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,156047,4.62s,18.57us,0.00ns,19.19us,797.00ns,18.47us,24.74us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,37224,4.57s,82.26us,0.00ns,80.56us,4.31us,75.06us,99.13us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,37177,4.57s,82.36us,0.00ns,80.66us,4.27us,75.05us,99.34us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,213891,4.62s,13.97us,0.00ns,13.99us,118.00ns,13.70us,21.15us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,229542,4.68s,13.08us,0.00ns,13.04us,172.00ns,12.81us,37.76us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,145310,4.57s,20.22us,0.00ns,20.61us,1.60us,18.80us,33.11us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,139307,4.62s,21.59us,0.00ns,21.50us,867.00ns,20.49us,32.50us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,55603,4.57s,52.71us,0.00ns,53.92us,3.37us,47.97us,69.64us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,57434,4.57s,50.61us,0.00ns,52.20us,3.14us,47.71us,67.25us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,100677,4.57s,29.73us,0.00ns,29.77us,207.00ns,29.60us,34.80us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,40730,4.57s,75.36us,0.00ns,73.62us,4.21us,68.01us,92.15us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,40934,4.57s,75.34us,0.00ns,73.25us,4.07us,68.00us,86.65us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,133666,4.57s,22.68us,0.00ns,22.41us,551.00ns,21.40us,31.44us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,139718,4.62s,21.86us,0.00ns,21.44us,600.00ns,20.46us,32.06us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,165945,4.62s,17.77us,0.00ns,18.05us,1.13us,17.30us,31.32us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,155742,4.62s,19.09us,0.00ns,19.23us,835.00ns,18.64us,27.18us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,57557,4.57s,50.64us,0.00ns,52.09us,2.74us,48.59us,64.76us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,57941,4.57s,50.07us,0.00ns,51.74us,2.89us,47.79us,64.80us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,537.95ms,30.00ns,0.00ns,30.00ns,7.00ns,28.00ns,4.18us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,579.39ms,38.00ns,0.00ns,38.00ns,11.00ns,36.00ns,8.50us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.61ms,28.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.52us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.84ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.23us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.69ms,26.00ns,0.00ns,26.00ns,10.00ns,24.00ns,6.70us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.47ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,2.44us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,476.89ms,15.00ns,0.00ns,15.00ns,22.00ns,12.00ns,20.43us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,28,1000000,627.77ms,67.00ns,0.00ns,68.00ns,9.00ns,64.00ns,2.10us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,28,1000000,577.36ms,45.00ns,0.00ns,45.00ns,8.00ns,42.00ns,2.87us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.74ms,35.00ns,0.00ns,35.00ns,5.00ns,32.00ns,2.00us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.37ms,38.00ns,0.00ns,39.00ns,7.00ns,36.00ns,2.35us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.53ms,29.00ns,0.00ns,29.00ns,19.00ns,26.00ns,13.48us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.44ms,26.00ns,0.00ns,26.00ns,6.00ns,23.00ns,2.08us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.14ms,30.00ns,0.00ns,30.00ns,10.00ns,28.00ns,7.75us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.57ms,17.00ns,0.00ns,17.00ns,5.00ns,15.00ns,3.14us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,527.77ms,16.00ns,0.00ns,16.00ns,6.00ns,14.00ns,2.44us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,28,1000000,527.14ms,44.00ns,0.00ns,45.00ns,29.00ns,42.00ns,19.20us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,28,1000000,527.29ms,32.00ns,0.00ns,33.00ns,6.00ns,29.00ns,2.12us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,34850,4.56s,85.39us,0.00ns,86.04us,1.57us,81.91us,108.12us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13699,4.51s,219.53us,0.00ns,218.97us,5.49us,206.83us,241.86us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13678,4.51s,220.25us,2.00ns,219.31us,4.94us,206.91us,238.13us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,215352,4.62s,13.89us,0.00ns,13.90us,111.00ns,13.62us,24.28us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,212897,4.62s,14.07us,0.00ns,14.06us,224.00ns,13.53us,22.66us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,90106,4.56s,33.62us,1.00ns,33.26us,1.94us,30.09us,47.44us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,88670,4.56s,33.33us,0.00ns,33.80us,1.87us,31.13us,50.06us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613402,16923,4.51s,174.97us,0.00ns,177.25us,4.41us,172.54us,295.87us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613402,17220,4.51s,173.15us,0.00ns,174.18us,2.56us,171.62us,189.45us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,19750,4.51s,151.67us,0.00ns,151.87us,1.18us,144.91us,171.07us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13628,4.51s,221.25us,0.00ns,220.10us,5.03us,209.27us,237.48us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13601,4.51s,221.51us,0.00ns,220.54us,4.67us,207.57us,237.76us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,209130,4.62s,14.40us,0.00ns,14.31us,245.00ns,13.81us,24.95us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,215563,4.62s,14.04us,0.00ns,13.88us,246.00ns,13.52us,17.90us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,210093,4.62s,14.08us,0.00ns,14.24us,309.00ns,13.81us,20.55us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,207021,4.62s,14.41us,0.00ns,14.46us,182.00ns,14.09us,19.15us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613402,10681,4.51s,280.68us,0.00ns,280.84us,1.80us,276.18us,299.06us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613402,10677,4.51s,280.78us,0.00ns,280.96us,1.51us,277.70us,295.54us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,527.39ms,39.00ns,0.00ns,39.00ns,124.00ns,37.00ns,123.77us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,527.25ms,32.00ns,0.00ns,33.00ns,20.00ns,29.00ns,18.85us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,527.47ms,29.00ns,0.00ns,30.00ns,6.00ns,26.00ns,2.58us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,527.58ms,36.00ns,0.00ns,36.00ns,7.00ns,33.00ns,2.90us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,527.62ms,26.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.01us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,477.28ms,18.00ns,0.00ns,18.00ns,4.00ns,15.00ns,2.17us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,527.47ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,2.39us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,42,1000000,627.64ms,94.00ns,0.00ns,96.00ns,21.00ns,91.00ns,16.20us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,42,1000000,627.46ms,62.00ns,0.00ns,63.00ns,20.00ns,58.00ns,18.73us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,527.74ms,37.00ns,0.00ns,37.00ns,6.00ns,35.00ns,2.24us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,527.08ms,38.00ns,0.00ns,38.00ns,6.00ns,36.00ns,1.99us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,527.60ms,29.00ns,0.00ns,29.00ns,5.00ns,26.00ns,2.46us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,527.63ms,32.00ns,0.00ns,32.00ns,6.00ns,29.00ns,2.42us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,527.26ms,33.00ns,0.00ns,33.00ns,6.00ns,30.00ns,2.06us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,527.17ms,19.00ns,0.00ns,19.00ns,18.00ns,17.00ns,13.17us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,477.31ms,15.00ns,0.00ns,15.00ns,12.00ns,13.00ns,10.86us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,42,1000000,678.19ms,59.00ns,0.00ns,59.00ns,7.00ns,55.00ns,2.56us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,42,1000000,577.65ms,41.00ns,0.00ns,42.00ns,5.00ns,36.00ns,1.94us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,134536,4.57s,21.74us,0.00ns,22.27us,1.81us,18.24us,31.77us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29197,4.56s,103.76us,0.00ns,102.72us,3.86us,96.96us,116.14us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,29153,4.51s,103.89us,0.00ns,102.87us,3.52us,97.51us,120.39us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,220485,4.62s,13.56us,0.00ns,13.57us,112.00ns,13.40us,22.27us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,213765,4.62s,14.08us,0.00ns,14.00us,275.00ns,13.35us,22.09us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,147452,4.62s,19.89us,0.00ns,20.31us,1.61us,18.62us,42.10us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,141492,4.62s,21.08us,0.00ns,21.17us,815.00ns,20.00us,29.26us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613427,29229,4.56s,101.99us,0.00ns,102.60us,3.10us,96.80us,158.64us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613427,29800,4.56s,99.96us,1.00ns,100.63us,2.39us,95.62us,118.56us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,62398,4.56s,47.86us,0.00ns,48.04us,811.00ns,46.36us,77.95us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29055,4.56s,104.11us,0.00ns,103.22us,3.75us,97.49us,128.18us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,29147,4.56s,103.95us,0.00ns,102.89us,3.91us,97.46us,129.45us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,218445,4.62s,13.83us,0.00ns,13.70us,306.00ns,13.19us,39.50us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,221592,4.62s,13.31us,0.00ns,13.51us,296.00ns,13.13us,26.28us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,218672,4.62s,13.59us,0.00ns,13.69us,255.00ns,13.29us,36.83us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,221548,4.62s,13.48us,0.00ns,13.51us,174.00ns,13.25us,32.91us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613427,18817,4.51s,158.17us,0.00ns,159.40us,3.84us,153.79us,276.18us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613427,19293,4.51s,154.23us,0.00ns,155.47us,3.65us,150.43us,174.10us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,527.46ms,34.00ns,0.00ns,34.00ns,6.00ns,31.00ns,3.60us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,527.68ms,33.00ns,0.00ns,33.00ns,19.00ns,30.00ns,13.24us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,527.82ms,28.00ns,0.00ns,28.00ns,7.00ns,25.00ns,2.56us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.87ms,30.00ns,0.00ns,30.00ns,5.00ns,27.00ns,1.91us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,527.62ms,30.00ns,0.00ns,30.00ns,6.00ns,27.00ns,2.22us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,477.08ms,17.00ns,0.00ns,17.00ns,13.00ns,14.00ns,10.40us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,477.04ms,15.00ns,0.00ns,15.00ns,15.00ns,13.00ns,14.57us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,31,1000000,627.65ms,85.00ns,0.00ns,87.00ns,29.00ns,81.00ns,22.10us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,31,1000000,577.53ms,56.00ns,0.00ns,56.00ns,7.00ns,51.00ns,2.34us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,577.23ms,36.00ns,0.00ns,36.00ns,20.00ns,32.00ns,18.48us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,627.39ms,38.00ns,0.00ns,38.00ns,6.00ns,36.00ns,2.55us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,527.49ms,28.00ns,0.00ns,28.00ns,5.00ns,25.00ns,2.65us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.71ms,27.00ns,0.00ns,27.00ns,7.00ns,24.00ns,3.56us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,527.51ms,35.00ns,0.00ns,35.00ns,7.00ns,31.00ns,2.99us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,527.57ms,18.00ns,0.00ns,18.00ns,14.00ns,16.00ns,13.32us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,527.78ms,14.00ns,0.00ns,14.00ns,29.00ns,12.00ns,19.44us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,31,1000000,577.70ms,52.00ns,0.00ns,52.00ns,6.00ns,48.00ns,2.34us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,31,1000000,527.80ms,35.00ns,0.00ns,35.00ns,7.00ns,33.00ns,3.35us\n"
  },
  {
    "path": "benchmarks/record/x86_64/2023-08-07.csv",
    "content": "name,model,rebar_version,engine,engine_version,err,haystack_len,iters,total,median,mad,mean,stddev,min,max\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,17199,4.51s,174.22us,0.00ns,174.41us,799.00ns,173.09us,184.64us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,16877,4.51s,177.13us,0.00ns,177.73us,1.96us,176.26us,204.78us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,17579,4.51s,175.07us,0.00ns,170.63us,5.64us,163.22us,183.67us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,6365,4.51s,470.38us,0.00ns,471.36us,5.16us,462.59us,516.29us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,7255,4.51s,412.40us,0.00ns,413.49us,8.08us,407.43us,587.91us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,5642,4.51s,530.06us,2.00ns,531.73us,6.87us,519.91us,586.06us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,18510,4.51s,161.76us,0.00ns,162.05us,879.00ns,161.10us,173.20us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,18291,4.51s,163.74us,0.00ns,163.98us,913.00ns,163.14us,175.96us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,7144,4.51s,415.01us,1.00ns,419.94us,17.24us,398.59us,544.06us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,15063,4.51s,203.55us,0.00ns,199.14us,7.51us,186.73us,211.12us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,9803,4.51s,305.59us,0.00ns,306.00us,1.82us,303.73us,342.09us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,3399,4.51s,882.25us,0.00ns,882.67us,5.20us,875.10us,928.98us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,4720,4.51s,631.31us,0.00ns,635.69us,20.34us,621.40us,855.95us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,8649,4.51s,344.95us,0.00ns,346.83us,6.32us,344.31us,381.42us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,9422,4.51s,317.33us,2.00ns,318.40us,12.30us,303.92us,347.55us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,8677,4.51s,345.19us,0.00ns,345.71us,1.32us,343.99us,357.42us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,6188,4.51s,484.19us,0.00ns,484.83us,2.93us,480.75us,525.14us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,2241,4.51s,1.34ms,0.00ns,1.34ms,6.33us,1.33ms,1.39ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,3357,4.51s,895.08us,0.00ns,893.75us,15.95us,840.37us,0.96ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,5747,4.51s,521.27us,0.00ns,522.04us,2.50us,520.50us,555.63us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,6138,4.51s,484.51us,1.00ns,488.74us,8.76us,481.56us,519.52us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,5745,4.51s,521.31us,0.00ns,522.20us,3.22us,520.51us,562.57us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,832.58ms,186.00ns,0.00ns,186.00ns,11.00ns,182.00ns,1.72us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,929.79ms,187.00ns,0.00ns,188.00ns,16.00ns,183.00ns,8.14us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,879.71ms,175.00ns,0.00ns,175.00ns,10.00ns,169.00ns,5.70us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,729.29ms,139.00ns,0.00ns,140.00ns,16.00ns,135.00ns,10.94us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,829.80ms,166.00ns,0.00ns,167.00ns,13.00ns,156.00ns,6.33us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,929.88ms,223.00ns,0.00ns,224.00ns,13.00ns,218.00ns,9.75us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,829.71ms,168.00ns,0.00ns,169.00ns,15.00ns,164.00ns,10.17us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,829.49ms,176.00ns,0.00ns,177.00ns,9.00ns,171.00ns,1.99us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,880.26ms,159.00ns,0.00ns,161.00ns,15.00ns,153.00ns,7.06us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,879.91ms,209.00ns,0.00ns,209.00ns,13.00ns,204.00ns,5.20us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,1.23s,333.00ns,0.00ns,334.00ns,17.00ns,327.00ns,3.60us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,0.98s,262.00ns,0.00ns,263.00ns,17.00ns,256.00ns,7.31us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,929.96ms,210.00ns,0.00ns,213.00ns,15.00ns,202.00ns,1.88us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,1.23s,371.00ns,0.00ns,371.00ns,17.00ns,366.00ns,3.46us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,1.13s,331.00ns,0.00ns,331.00ns,16.00ns,325.00ns,2.42us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,1.23s,371.00ns,0.00ns,371.00ns,17.00ns,365.00ns,5.56us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,1.43s,502.00ns,0.00ns,503.00ns,24.00ns,490.00ns,13.79us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,1.08s,308.00ns,0.00ns,310.00ns,17.00ns,289.00ns,2.33us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.03s,269.00ns,0.00ns,268.00ns,15.00ns,253.00ns,2.01us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,1.58s,565.00ns,0.00ns,566.00ns,21.00ns,554.00ns,4.72us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,1.48s,503.00ns,0.00ns,503.00ns,17.00ns,491.00ns,2.51us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.58s,561.00ns,0.00ns,561.00ns,16.00ns,552.00ns,7.25us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,579.22ms,50.00ns,0.00ns,50.00ns,7.00ns,47.00ns,2.21us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,578.72ms,48.00ns,0.00ns,48.00ns,13.00ns,46.00ns,10.75us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,528.72ms,44.00ns,0.00ns,44.00ns,15.00ns,42.00ns,8.70us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,578.04ms,37.00ns,0.00ns,37.00ns,9.00ns,31.00ns,6.95us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,528.54ms,27.00ns,0.00ns,27.00ns,14.00ns,24.00ns,13.84us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,579.00ms,48.00ns,0.00ns,49.00ns,7.00ns,45.00ns,2.27us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,679.10ms,45.00ns,0.00ns,45.00ns,7.00ns,42.00ns,2.44us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,578.70ms,45.00ns,0.00ns,45.00ns,6.00ns,42.00ns,2.45us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,528.81ms,25.00ns,0.00ns,25.00ns,6.00ns,22.00ns,2.47us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,628.73ms,47.00ns,0.00ns,47.00ns,24.00ns,44.00ns,16.22us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,706446,4.78s,4.24us,0.00ns,4.22us,77.00ns,4.07us,11.58us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,705864,4.83s,4.22us,0.00ns,4.22us,87.00ns,4.10us,25.61us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,693834,4.88s,4.27us,0.00ns,4.29us,82.00ns,4.21us,13.51us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,136635,4.57s,21.92us,0.00ns,21.92us,300.00ns,21.68us,109.59us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,26201,4.51s,114.38us,0.00ns,114.47us,479.00ns,114.35us,137.12us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,138741,4.57s,21.50us,0.00ns,21.59us,231.00ns,21.47us,44.38us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,689427,4.83s,4.36us,0.00ns,4.32us,110.00ns,4.17us,10.27us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,709422,4.83s,4.15us,0.00ns,4.20us,97.00ns,4.10us,10.70us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,26177,4.51s,114.38us,0.00ns,114.57us,899.00ns,114.35us,141.42us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,685264,4.88s,4.34us,0.00ns,4.35us,75.00ns,4.28us,15.05us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,569883,4.83s,5.21us,0.00ns,5.23us,106.00ns,5.11us,13.97us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,75230,4.56s,39.39us,0.00ns,39.84us,917.00ns,38.16us,58.95us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,17452,4.51s,171.56us,0.00ns,171.88us,1.11us,171.52us,209.74us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,538398,4.78s,5.22us,0.00ns,5.54us,597.00ns,5.14us,10.17us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,573375,4.83s,5.19us,0.00ns,5.20us,110.00ns,5.15us,16.64us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,576853,4.78s,5.16us,0.00ns,5.17us,71.00ns,5.14us,14.87us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,388173,4.72s,7.67us,0.00ns,7.69us,102.00ns,7.62us,22.13us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,50501,4.56s,61.00us,0.00ns,59.37us,3.17us,55.09us,80.37us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,13094,4.51s,228.75us,0.00ns,229.10us,1.30us,228.71us,274.80us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,386848,4.72s,7.70us,0.00ns,7.72us,113.00ns,7.60us,15.94us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,386868,4.72s,7.69us,0.00ns,7.72us,111.00ns,7.62us,28.87us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,388345,4.72s,7.69us,0.00ns,7.69us,89.00ns,7.60us,12.46us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,476.41ms,14.00ns,0.00ns,15.00ns,30.00ns,12.00ns,21.08us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,476.70ms,15.00ns,0.00ns,15.00ns,43.00ns,13.00ns,22.13us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,477.05ms,15.00ns,0.00ns,15.00ns,30.00ns,13.00ns,19.09us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,526.42ms,38.00ns,0.00ns,38.00ns,22.00ns,31.00ns,11.43us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,777.98ms,144.00ns,0.00ns,145.00ns,10.00ns,141.00ns,1.89us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,577.11ms,42.00ns,0.00ns,42.00ns,27.00ns,33.00ns,22.12us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,476.68ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.13us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,476.42ms,15.00ns,0.00ns,15.00ns,33.00ns,13.00ns,24.57us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,777.93ms,144.00ns,0.00ns,145.00ns,11.00ns,141.00ns,2.10us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,476.98ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.32us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,476.96ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,2.52us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,577.26ms,60.00ns,0.00ns,60.00ns,8.00ns,57.00ns,3.22us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,878.53ms,210.00ns,0.00ns,210.00ns,18.00ns,206.00ns,11.83us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,526.62ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,2.88us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,526.07ms,19.00ns,0.00ns,19.00ns,6.00ns,17.00ns,2.79us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,526.54ms,19.00ns,0.00ns,19.00ns,4.00ns,17.00ns,3.08us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,526.52ms,22.00ns,0.00ns,22.00ns,22.00ns,19.00ns,20.65us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,627.28ms,79.00ns,0.00ns,80.00ns,21.00ns,70.00ns,17.84us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.03s,272.00ns,0.00ns,273.00ns,19.00ns,269.00ns,8.37us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,526.99ms,22.00ns,0.00ns,22.00ns,5.00ns,20.00ns,2.75us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,576.82ms,21.00ns,0.00ns,22.00ns,23.00ns,19.00ns,17.56us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,476.95ms,22.00ns,0.00ns,22.00ns,20.00ns,20.00ns,16.08us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,527.01ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,2.20us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,476.47ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.15us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,477.07ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,2.11us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,476.86ms,15.00ns,0.00ns,15.00ns,36.00ns,13.00ns,18.93us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,527.13ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.22us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,476.86ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.74us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,476.75ms,12.00ns,0.00ns,12.00ns,18.00ns,10.00ns,17.51us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,476.99ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,1.95us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,527.27ms,29.00ns,0.00ns,28.00ns,21.00ns,21.00ns,12.96us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,476.67ms,12.00ns,0.00ns,12.00ns,40.00ns,10.00ns,19.91us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,526.86ms,15.00ns,0.00ns,15.00ns,33.00ns,13.00ns,21.80us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,526.71ms,16.00ns,0.00ns,16.00ns,15.00ns,14.00ns,12.52us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,576.67ms,38.00ns,0.00ns,38.00ns,9.00ns,29.00ns,6.60us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,476.54ms,15.00ns,0.00ns,15.00ns,4.00ns,12.00ns,2.04us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,527.08ms,14.00ns,0.00ns,14.00ns,13.00ns,12.00ns,13.03us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,526.46ms,15.00ns,0.00ns,15.00ns,20.00ns,12.00ns,18.64us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,526.85ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,1.87us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,526.42ms,18.00ns,0.00ns,18.00ns,5.00ns,16.00ns,2.20us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,577.36ms,44.00ns,0.00ns,43.00ns,7.00ns,35.00ns,3.75us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,476.68ms,14.00ns,0.00ns,14.00ns,15.00ns,12.00ns,8.37us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,476.50ms,15.00ns,0.00ns,15.00ns,27.00ns,13.00ns,21.03us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,476.57ms,14.00ns,0.00ns,14.00ns,30.00ns,12.00ns,17.81us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,,1000000,476.75ms,11.00ns,0.00ns,11.00ns,25.00ns,9.00ns,19.54us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,,1000000,476.87ms,11.00ns,0.00ns,11.00ns,6.00ns,9.00ns,4.73us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,,1000000,476.76ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.49us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,,1000000,477.10ms,11.00ns,0.00ns,11.00ns,30.00ns,9.00ns,22.70us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,,1000000,476.66ms,10.00ns,0.00ns,10.00ns,6.00ns,8.00ns,4.22us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,,1000000,476.43ms,11.00ns,0.00ns,11.00ns,23.00ns,9.00ns,20.74us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,,1000000,476.72ms,10.00ns,0.00ns,10.00ns,4.00ns,8.00ns,2.34us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,,1000000,477.04ms,11.00ns,0.00ns,11.00ns,3.00ns,9.00ns,2.35us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,,1000000,476.69ms,10.00ns,0.00ns,10.00ns,23.00ns,8.00ns,19.79us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,,1000000,476.78ms,11.00ns,0.00ns,11.00ns,20.00ns,9.00ns,19.39us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,,1000000,527.57ms,11.00ns,0.00ns,11.00ns,5.00ns,9.00ns,3.02us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,,1000000,476.79ms,11.00ns,0.00ns,11.00ns,3.00ns,9.00ns,1.82us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,,1000000,476.82ms,10.00ns,0.00ns,10.00ns,5.00ns,8.00ns,2.97us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,,1000000,476.55ms,11.00ns,0.00ns,11.00ns,3.00ns,9.00ns,1.63us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,,1000000,526.81ms,11.00ns,0.00ns,11.00ns,16.00ns,9.00ns,15.94us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,,1000000,476.71ms,11.00ns,0.00ns,11.00ns,2.00ns,9.00ns,1.52us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,,1000000,526.69ms,11.00ns,0.00ns,11.00ns,15.00ns,9.00ns,14.29us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,,1000000,527.10ms,11.00ns,0.00ns,11.00ns,3.00ns,9.00ns,2.17us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,,1000000,476.81ms,10.00ns,0.00ns,10.00ns,3.00ns,9.00ns,2.16us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,,1000000,476.58ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.02us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,,1000000,527.07ms,11.00ns,0.00ns,11.00ns,10.00ns,9.00ns,9.77us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,,1000000,576.68ms,11.00ns,0.00ns,11.00ns,2.00ns,9.00ns,1.57us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,596269,4.78s,4.99us,0.00ns,5.00us,79.00ns,4.93us,29.27us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,576552,4.73s,5.21us,0.00ns,5.17us,108.00ns,4.92us,11.03us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,575353,4.78s,5.23us,0.00ns,5.18us,130.00ns,4.98us,15.63us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,131355,4.62s,22.69us,0.00ns,22.80us,248.00ns,22.59us,33.15us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,25967,4.56s,115.36us,0.00ns,115.49us,1.07us,115.28us,140.42us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,129243,4.57s,23.15us,0.00ns,23.18us,164.00ns,22.85us,27.71us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,602121,4.78s,4.95us,0.00ns,4.95us,71.00ns,4.88us,27.35us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,582111,4.83s,5.16us,0.00ns,5.12us,118.00ns,4.90us,27.60us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,589775,4.78s,5.04us,0.00ns,5.05us,77.00ns,4.97us,14.02us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,373048,4.72s,7.78us,0.00ns,8.01us,504.00ns,7.64us,12.94us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,71638,4.56s,41.72us,0.00ns,41.84us,448.00ns,41.51us,71.30us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,17228,4.51s,173.86us,0.00ns,174.10us,919.00ns,173.77us,211.49us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,389138,4.67s,7.65us,0.00ns,7.68us,124.00ns,7.52us,31.52us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,350018,4.67s,8.90us,0.00ns,8.54us,605.00ns,7.57us,15.03us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,395842,4.73s,7.54us,0.00ns,7.54us,91.00ns,7.46us,22.49us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,274935,4.67s,10.71us,0.00ns,10.88us,356.00ns,10.65us,18.26us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,49617,4.56s,60.14us,0.00ns,60.43us,691.00ns,59.56us,77.93us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,12924,4.51s,231.66us,0.00ns,232.10us,1.96us,231.55us,278.95us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,279235,4.67s,10.68us,0.00ns,10.71us,207.00ns,10.62us,15.96us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,275724,4.62s,10.81us,0.00ns,10.84us,217.00ns,10.70us,15.99us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,268462,4.67s,11.44us,0.00ns,11.14us,435.00ns,10.61us,29.42us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,526.54ms,19.00ns,0.00ns,19.00ns,25.00ns,17.00ns,16.22us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,527.00ms,19.00ns,0.00ns,19.00ns,6.00ns,16.00ns,2.76us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,477.03ms,19.00ns,0.00ns,19.00ns,31.00ns,16.00ns,19.39us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,527.08ms,36.00ns,0.00ns,36.00ns,6.00ns,33.00ns,2.14us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,778.06ms,151.00ns,0.00ns,151.00ns,12.00ns,146.00ns,2.03us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,576.75ms,44.00ns,0.00ns,43.00ns,8.00ns,36.00ns,2.47us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,527.06ms,19.00ns,0.00ns,19.00ns,27.00ns,16.00ns,18.95us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,527.09ms,18.00ns,0.00ns,18.00ns,25.00ns,16.00ns,19.76us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,778.70ms,153.00ns,0.00ns,154.00ns,18.00ns,146.00ns,14.06us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,526.88ms,20.00ns,0.00ns,20.00ns,14.00ns,17.00ns,13.90us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,527.23ms,30.00ns,0.00ns,30.00ns,8.00ns,27.00ns,6.43us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,676.89ms,61.00ns,0.00ns,60.00ns,21.00ns,53.00ns,12.42us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,928.61ms,222.00ns,0.00ns,223.00ns,17.00ns,217.00ns,9.09us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,526.43ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.41us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,527.00ms,30.00ns,0.00ns,30.00ns,5.00ns,27.00ns,2.31us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,527.23ms,29.00ns,0.00ns,29.00ns,12.00ns,26.00ns,10.41us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,576.82ms,37.00ns,0.00ns,37.00ns,10.00ns,34.00ns,5.14us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,627.25ms,92.00ns,0.00ns,92.00ns,10.00ns,75.00ns,2.36us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.13s,286.00ns,0.00ns,288.00ns,20.00ns,280.00ns,8.18us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,527.04ms,38.00ns,0.00ns,38.00ns,13.00ns,35.00ns,11.57us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,577.24ms,38.00ns,0.00ns,38.00ns,7.00ns,34.00ns,2.42us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,526.91ms,38.00ns,0.00ns,38.00ns,5.00ns,35.00ns,2.18us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,527.12ms,15.00ns,0.00ns,15.00ns,19.00ns,12.00ns,13.48us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,526.45ms,16.00ns,0.00ns,16.00ns,24.00ns,14.00ns,19.27us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,477.05ms,16.00ns,0.00ns,16.00ns,19.00ns,14.00ns,18.43us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,527.16ms,16.00ns,0.00ns,16.00ns,4.00ns,13.00ns,2.21us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,527.14ms,29.00ns,0.00ns,29.00ns,15.00ns,21.00ns,10.60us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,476.50ms,17.00ns,0.00ns,17.00ns,4.00ns,15.00ns,2.60us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,476.34ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,1.93us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,476.60ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,2.31us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,542.52ms,31.00ns,0.00ns,30.00ns,5.00ns,21.00ns,2.07us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,476.26ms,14.00ns,0.00ns,14.00ns,12.00ns,12.00ns,10.14us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,577.16ms,21.00ns,0.00ns,21.00ns,13.00ns,19.00ns,12.20us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,526.65ms,20.00ns,0.00ns,20.00ns,16.00ns,17.00ns,15.68us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,526.45ms,37.00ns,0.00ns,38.00ns,6.00ns,29.00ns,2.14us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,526.45ms,21.00ns,0.00ns,21.00ns,29.00ns,18.00ns,18.89us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,527.34ms,21.00ns,0.00ns,21.00ns,4.00ns,19.00ns,1.95us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,476.24ms,20.00ns,0.00ns,20.00ns,5.00ns,17.00ns,2.12us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,527.29ms,30.00ns,0.00ns,30.00ns,8.00ns,27.00ns,5.67us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,577.00ms,23.00ns,0.00ns,23.00ns,7.00ns,21.00ns,3.59us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,577.04ms,43.00ns,0.00ns,43.00ns,6.00ns,35.00ns,1.90us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,476.21ms,22.00ns,0.00ns,22.00ns,22.00ns,19.00ns,13.76us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,526.32ms,30.00ns,0.00ns,30.00ns,6.00ns,27.00ns,2.57us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,527.04ms,22.00ns,0.00ns,22.00ns,14.00ns,19.00ns,12.85us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,89743,4.56s,33.29us,0.00ns,33.39us,499.00ns,32.83us,58.55us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,61433,4.56s,48.64us,0.00ns,48.80us,903.00ns,47.58us,74.03us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,63886,4.56s,46.74us,0.00ns,46.92us,837.00ns,45.97us,72.23us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,34924,4.56s,84.89us,0.00ns,85.86us,1.74us,83.58us,115.58us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,18954,4.51s,159.07us,0.00ns,158.24us,1.78us,154.76us,193.63us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,29223,4.56s,101.77us,0.00ns,102.63us,2.42us,98.08us,123.46us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,58445,4.56s,50.74us,0.00ns,51.30us,1.31us,49.97us,70.92us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,57084,4.56s,52.52us,0.00ns,52.52us,617.00ns,51.06us,74.02us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,18926,4.51s,155.85us,0.00ns,158.48us,6.14us,154.75us,205.98us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,57887,4.56s,51.81us,0.00ns,51.79us,440.00ns,50.66us,68.38us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,26437,4.56s,113.26us,0.00ns,113.45us,784.00ns,112.42us,131.67us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,16040,4.51s,188.62us,0.00ns,187.00us,3.37us,181.72us,230.80us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,11730,4.51s,254.47us,1.00ns,255.72us,2.02us,253.43us,296.65us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,26232,4.56s,111.94us,0.00ns,114.33us,5.04us,109.74us,144.35us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,26486,4.56s,113.00us,0.00ns,113.23us,770.00ns,112.12us,131.33us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,26279,4.56s,113.91us,0.00ns,114.13us,1.23us,112.07us,133.12us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,19854,4.51s,150.93us,0.00ns,151.07us,861.00ns,148.36us,169.46us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,9831,4.51s,305.69us,0.00ns,305.14us,2.77us,296.44us,343.90us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,8421,4.51s,353.67us,0.00ns,356.24us,11.49us,348.46us,417.25us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,18593,4.51s,156.52us,0.00ns,161.32us,7.85us,151.79us,192.53us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,18360,4.51s,159.08us,0.00ns,163.37us,7.44us,156.43us,184.84us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,19030,4.51s,157.25us,0.00ns,157.61us,1.22us,154.15us,186.49us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,526.56ms,46.00ns,0.00ns,46.00ns,8.00ns,43.00ns,3.36us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,576.61ms,46.00ns,0.00ns,46.00ns,27.00ns,43.00ns,19.18us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,526.64ms,44.00ns,0.00ns,44.00ns,10.00ns,40.00ns,7.50us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,576.66ms,53.00ns,0.00ns,53.00ns,8.00ns,49.00ns,2.73us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,777.74ms,156.00ns,0.00ns,158.00ns,13.00ns,151.00ns,2.14us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,627.13ms,69.00ns,0.00ns,70.00ns,10.00ns,64.00ns,7.24us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,577.46ms,44.00ns,0.00ns,44.00ns,7.00ns,41.00ns,2.42us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,577.18ms,45.00ns,0.00ns,45.00ns,5.00ns,42.00ns,2.18us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,777.66ms,155.00ns,0.00ns,157.00ns,15.00ns,147.00ns,7.57us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,577.18ms,50.00ns,0.00ns,50.00ns,7.00ns,47.00ns,2.24us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,629.85ms,99.00ns,0.00ns,99.00ns,10.00ns,90.00ns,2.93us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,678.87ms,93.00ns,0.00ns,94.00ns,9.00ns,80.00ns,2.62us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,929.42ms,206.00ns,0.00ns,207.00ns,15.00ns,203.00ns,2.24us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,628.83ms,88.00ns,0.00ns,88.00ns,8.00ns,83.00ns,2.40us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,629.77ms,99.00ns,0.00ns,99.00ns,9.00ns,92.00ns,4.73us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,629.31ms,88.00ns,0.00ns,88.00ns,8.00ns,82.00ns,1.87us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,729.44ms,140.00ns,0.00ns,140.00ns,11.00ns,133.00ns,2.67us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,779.58ms,133.00ns,0.00ns,134.00ns,11.00ns,126.00ns,2.32us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,0.98s,264.00ns,0.00ns,265.00ns,17.00ns,261.00ns,6.33us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,729.62ms,136.00ns,0.00ns,136.00ns,10.00ns,130.00ns,1.98us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,779.68ms,140.00ns,0.00ns,140.00ns,10.00ns,133.00ns,2.25us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,730.13ms,136.00ns,0.00ns,136.00ns,12.00ns,129.00ns,6.08us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,527.01ms,29.00ns,0.00ns,29.00ns,10.00ns,26.00ns,7.85us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,526.83ms,29.00ns,0.00ns,29.00ns,5.00ns,27.00ns,2.45us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,526.64ms,27.00ns,0.00ns,27.00ns,6.00ns,25.00ns,2.43us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,527.18ms,21.00ns,0.00ns,21.00ns,11.00ns,18.00ns,10.29us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,627.04ms,24.00ns,0.00ns,24.00ns,30.00ns,22.00ns,21.35us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,526.91ms,30.00ns,0.00ns,31.00ns,7.00ns,27.00ns,2.52us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,526.48ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.33us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,529.05ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.52us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,526.83ms,23.00ns,0.00ns,24.00ns,20.00ns,21.00ns,18.91us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,527.05ms,31.00ns,0.00ns,32.00ns,14.00ns,29.00ns,12.93us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,578.82ms,57.00ns,0.00ns,58.00ns,8.00ns,54.00ns,2.46us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,527.91ms,35.00ns,0.00ns,35.00ns,10.00ns,31.00ns,7.41us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,528.81ms,31.00ns,0.00ns,31.00ns,9.00ns,29.00ns,7.25us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,528.59ms,52.00ns,0.00ns,52.00ns,23.00ns,48.00ns,18.16us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,578.68ms,57.00ns,0.00ns,57.00ns,7.00ns,53.00ns,1.88us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,578.90ms,52.00ns,0.00ns,52.00ns,7.00ns,48.00ns,2.39us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,579.23ms,71.00ns,0.00ns,71.00ns,8.00ns,65.00ns,2.35us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,578.98ms,46.00ns,0.00ns,46.00ns,11.00ns,40.00ns,7.14us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,528.62ms,35.00ns,0.00ns,36.00ns,7.00ns,33.00ns,2.53us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,628.92ms,79.00ns,0.00ns,79.00ns,8.00ns,74.00ns,2.30us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,578.89ms,71.00ns,0.00ns,71.00ns,8.00ns,65.00ns,2.55us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,628.98ms,80.00ns,0.00ns,80.00ns,8.00ns,74.00ns,2.74us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,7514,4.51s,396.96us,0.00ns,399.23us,6.78us,393.81us,433.26us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,7646,4.51s,391.98us,0.00ns,392.36us,1.63us,390.32us,434.59us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,8469,4.51s,353.93us,0.00ns,354.20us,1.07us,351.07us,367.32us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,3665,4.51s,817.77us,0.00ns,818.62us,5.08us,790.27us,867.93us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,3810,4.51s,786.98us,1.00ns,787.51us,6.05us,761.02us,832.18us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,3013,4.51s,0.99ms,0.00ns,1.00ms,8.91us,0.96ms,1.05ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,8442,4.51s,352.59us,0.00ns,355.34us,7.61us,349.13us,396.24us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,8306,4.51s,355.55us,0.00ns,361.18us,10.62us,353.38us,391.31us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,3808,4.51s,787.84us,2.00ns,787.89us,6.12us,745.14us,840.30us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,7286,4.51s,411.41us,0.00ns,411.72us,0.97us,411.01us,425.05us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,1.43s,439.00ns,0.00ns,440.00ns,16.00ns,434.00ns,3.91us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,1.33s,433.00ns,0.00ns,434.00ns,24.00ns,430.00ns,14.78us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.28s,392.00ns,0.00ns,393.00ns,17.00ns,389.00ns,2.30us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,1.13s,290.00ns,0.00ns,291.00ns,20.00ns,283.00ns,7.50us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,881.82ms,219.00ns,0.00ns,220.00ns,16.00ns,198.00ns,7.87us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,1.23s,366.00ns,0.00ns,366.00ns,20.00ns,361.00ns,6.80us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.28s,393.00ns,0.00ns,394.00ns,17.00ns,390.00ns,6.31us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.38s,399.00ns,0.00ns,400.00ns,17.00ns,393.00ns,2.43us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,931.17ms,217.00ns,0.00ns,217.00ns,11.00ns,208.00ns,3.95us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,1.48s,462.00ns,0.00ns,462.00ns,19.00ns,455.00ns,6.76us\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,33335253,272,4.56s,11.00ms,352.00ns,11.03ms,78.87us,10.92ms,11.31ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,33335253,283,4.56s,10.61ms,0.00ns,10.61ms,162.74us,10.35ms,11.07ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,33335253,284,4.56s,10.57ms,1.52us,10.59ms,140.64us,10.37ms,11.01ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,33335253,438,4.56s,6.70ms,134.00ns,6.85ms,239.91us,6.63ms,7.51ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,33335253,444,4.56s,6.69ms,80.00ns,6.77ms,175.83us,6.63ms,7.31ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/binary,2.5.0,,33335253,3397,4.56s,878.58us,0.00ns,883.20us,16.46us,855.60us,1.02ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,33335253,555,4.56s,5.41ms,0.00ns,5.41ms,43.80us,5.25ms,5.61ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,33335253,558,4.56s,5.38ms,53.00ns,5.38ms,48.81us,5.23ms,5.57ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,20714,4.51s,148.38us,0.00ns,144.79us,6.71us,133.81us,168.60us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13638,4.51s,225.20us,0.00ns,219.93us,10.91us,206.09us,259.02us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13594,4.51s,225.20us,0.00ns,220.65us,11.03us,205.72us,253.98us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,98842,4.57s,28.32us,0.00ns,30.31us,4.55us,28.03us,46.07us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,104016,4.57s,28.56us,0.00ns,28.80us,1.56us,28.30us,44.66us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,78422,4.56s,38.17us,0.00ns,38.21us,270.00ns,37.88us,47.15us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,67797,4.56s,44.15us,0.00ns,44.21us,337.00ns,43.69us,51.91us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,3042,4.51s,0.99ms,5.00ns,0.99ms,11.04us,0.96ms,1.02ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,3061,4.51s,0.98ms,0.00ns,0.98ms,12.66us,0.96ms,1.01ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,23141,4.56s,124.06us,0.00ns,129.60us,6.94us,121.36us,156.02us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13412,4.51s,228.77us,2.00ns,223.65us,11.41us,206.42us,343.57us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13652,4.51s,225.11us,0.00ns,219.72us,11.07us,205.99us,254.07us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,104776,4.57s,28.56us,0.00ns,28.60us,258.00ns,28.26us,45.28us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,106362,4.57s,28.12us,0.00ns,28.17us,286.00ns,27.86us,50.35us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,73340,4.56s,41.06us,0.00ns,40.86us,766.00ns,38.78us,48.29us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,74359,4.56s,40.59us,0.00ns,40.30us,659.00ns,39.09us,49.66us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,3282,4.51s,915.72us,9.00ns,914.30us,13.22us,889.75us,949.00us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,3284,4.51s,913.53us,2.00ns,913.50us,11.66us,890.24us,944.43us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,17087,4.51s,175.09us,0.00ns,175.54us,2.08us,174.06us,201.91us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13579,4.51s,225.40us,0.00ns,220.90us,10.83us,206.10us,251.09us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13557,4.51s,225.40us,0.00ns,221.26us,10.91us,206.27us,255.30us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,97476,4.57s,30.70us,0.00ns,30.74us,287.00ns,30.34us,40.97us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,81516,4.56s,40.06us,0.00ns,36.77us,5.70us,27.36us,47.25us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,73900,4.56s,41.28us,0.00ns,40.55us,1.14us,38.92us,68.94us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,74709,4.56s,39.39us,0.00ns,40.11us,1.16us,38.93us,155.88us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,3347,4.51s,896.65us,0.00ns,896.31us,8.95us,879.40us,931.19us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,3291,4.51s,912.46us,0.00ns,911.73us,7.27us,894.21us,935.12us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,32848,4.56s,90.63us,0.00ns,91.30us,2.27us,89.09us,106.52us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13973,4.51s,219.52us,0.00ns,214.67us,11.46us,200.32us,250.49us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13917,4.51s,219.77us,0.00ns,215.53us,11.35us,200.21us,261.43us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,83208,4.56s,40.98us,0.00ns,36.02us,6.21us,28.13us,65.00us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,100762,4.57s,28.79us,0.00ns,29.74us,3.26us,28.50us,57.69us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,275511,4.67s,10.76us,0.00ns,10.86us,235.00ns,10.34us,17.37us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,277582,4.67s,10.75us,0.00ns,10.77us,157.00ns,10.38us,20.28us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,3466,4.51s,865.23us,4.00ns,865.62us,3.32us,855.28us,886.03us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,3397,4.51s,882.90us,0.00ns,883.16us,3.27us,872.18us,908.09us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,24361,4.56s,122.91us,0.00ns,123.12us,1.07us,122.03us,139.77us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13570,4.51s,225.56us,0.00ns,221.04us,11.15us,206.43us,252.90us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13663,4.51s,225.25us,0.00ns,219.54us,10.89us,206.23us,264.93us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,89815,4.57s,30.28us,0.00ns,33.36us,5.26us,29.94us,48.56us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,100018,4.57s,28.72us,0.00ns,29.96us,3.68us,28.43us,46.00us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,3107,4.51s,0.96ms,0.00ns,0.97ms,3.89us,0.96ms,0.99ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,3098,4.51s,0.97ms,2.00ns,0.97ms,4.13us,0.96ms,0.99ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,4327,4.51s,690.72us,0.00ns,693.35us,6.80us,687.22us,747.79us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,10908,4.51s,279.27us,1.00ns,275.01us,10.37us,261.30us,311.58us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,11143,4.51s,273.05us,0.00ns,269.18us,10.70us,255.18us,303.86us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,27894,4.56s,103.52us,0.00ns,107.52us,6.10us,101.37us,130.58us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,46980,4.56s,61.28us,0.00ns,63.82us,4.67us,59.85us,81.12us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,3295,4.51s,909.84us,0.00ns,910.46us,5.93us,893.37us,945.87us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,3364,4.51s,892.12us,3.00ns,891.88us,5.22us,867.32us,915.86us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,11605,4.51s,258.25us,0.00ns,258.48us,3.86us,249.72us,276.87us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,3899,4.51s,768.48us,0.00ns,769.41us,14.18us,736.99us,838.33us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,4355,4.51s,687.49us,0.00ns,688.88us,13.97us,662.42us,748.04us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,5523,4.51s,543.07us,0.00ns,543.22us,3.58us,537.10us,564.06us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,9688,4.51s,310.48us,1.00ns,309.64us,7.23us,299.42us,334.34us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,2489,4.51s,1.20ms,0.00ns,1.21ms,18.21us,1.18ms,1.39ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,2793,4.51s,1.07ms,0.00ns,1.07ms,16.49us,1.05ms,1.25ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,6374,4.51s,469.75us,0.00ns,470.66us,2.09us,467.50us,486.19us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,8636,4.51s,349.94us,5.00ns,347.36us,10.80us,332.24us,387.53us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,8909,4.51s,338.93us,0.00ns,336.70us,9.88us,320.43us,372.08us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,16101,4.51s,187.94us,0.00ns,186.30us,4.98us,176.01us,223.49us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,30820,4.56s,97.70us,0.00ns,97.30us,5.82us,89.92us,131.95us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,2511,4.51s,1.19ms,0.00ns,1.19ms,11.25us,1.18ms,1.29ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,2626,4.51s,1.14ms,4.00ns,1.14ms,6.10us,1.12ms,1.17ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,151305,802508,4.93s,3.68us,0.00ns,3.71us,135.00ns,3.49us,12.37us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,151305,125462,4.57s,24.18us,0.00ns,23.88us,946.00ns,22.70us,28.14us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,151305,126508,4.62s,24.12us,0.00ns,23.68us,788.00ns,22.60us,35.73us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,922948,4.94s,3.48us,0.00ns,3.22us,307.00ns,2.71us,8.31us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,1000000,4.94s,2.81us,0.00ns,2.93us,254.00ns,2.59us,11.07us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,151305,620307,4.83s,4.74us,0.00ns,4.80us,252.00ns,4.58us,18.29us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,585643,4.83s,5.03us,0.00ns,5.09us,210.00ns,4.88us,15.55us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,151305,386449,4.72s,7.44us,0.00ns,7.73us,509.00ns,7.29us,13.19us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,151305,375391,4.72s,8.22us,0.00ns,7.96us,520.00ns,7.29us,12.98us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,151305,684381,4.88s,4.04us,0.00ns,4.35us,654.00ns,3.90us,12.44us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,151305,124799,4.57s,24.29us,0.00ns,24.01us,943.00ns,22.55us,32.55us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,151305,124926,4.57s,24.27us,0.00ns,23.98us,911.00ns,22.61us,33.55us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,989210,5.04s,3.00us,0.00ns,3.00us,65.00ns,2.79us,8.21us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,1000000,4.99s,2.94us,0.00ns,2.94us,63.00ns,2.71us,9.49us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,151305,614837,4.83s,4.72us,0.00ns,4.85us,282.00ns,4.52us,13.24us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,585992,4.83s,5.06us,0.00ns,5.09us,173.00ns,4.86us,14.52us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,151305,493447,4.78s,5.87us,0.00ns,6.05us,297.00ns,5.74us,15.97us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,151305,469506,4.78s,6.49us,0.00ns,6.36us,302.00ns,5.71us,11.54us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,500100,105005,4.57s,26.23us,0.00ns,28.54us,2.84us,25.98us,39.57us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,500100,51835,4.56s,60.11us,0.00ns,57.84us,3.33us,54.08us,68.95us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,500100,52061,4.56s,60.10us,0.00ns,57.59us,3.31us,54.08us,73.55us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,385606,4.72s,7.76us,0.00ns,7.74us,119.00ns,7.31us,15.01us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,392876,4.72s,7.66us,0.00ns,7.60us,181.00ns,7.26us,16.24us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,500100,271286,4.63s,11.09us,0.00ns,11.03us,199.00ns,10.64us,15.61us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,500100,273341,4.68s,11.06us,0.00ns,10.94us,203.00ns,10.64us,15.26us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,500100,13845,4.52s,216.30us,0.00ns,216.66us,3.60us,216.28us,336.50us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,500100,13851,4.52s,216.31us,0.00ns,216.56us,0.97us,216.29us,243.91us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,500100,4491,4.51s,667.41us,0.00ns,667.97us,7.89us,657.14us,707.61us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,500100,3795,4.51s,790.10us,0.00ns,790.61us,2.83us,785.27us,834.85us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,500100,8293,4.51s,349.11us,0.00ns,361.74us,23.33us,345.91us,429.20us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,1975,4.51s,1.52ms,0.00ns,1.52ms,24.50us,1.48ms,1.71ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,9800,4.51s,283.75us,0.00ns,306.12us,40.15us,266.96us,395.45us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,500100,2799,4.51s,1.07ms,0.00ns,1.07ms,24.07us,1.04ms,1.21ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,500100,10098,4.51s,288.41us,0.00ns,297.06us,22.61us,269.16us,382.02us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1001,1000000,643.09ms,81.00ns,0.00ns,82.00ns,9.00ns,77.00ns,2.40us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,777.81ms,142.00ns,0.00ns,138.00ns,12.00ns,127.00ns,2.33us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,728.05ms,132.00ns,0.00ns,136.00ns,16.00ns,126.00ns,10.57us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,1000000,627.04ms,60.00ns,0.00ns,60.00ns,7.00ns,55.00ns,1.79us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,527.05ms,40.00ns,0.00ns,41.00ns,6.00ns,37.00ns,2.08us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1001,1000000,528.00ms,31.00ns,0.00ns,31.00ns,6.00ns,27.00ns,2.22us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1001,1000000,527.18ms,28.00ns,0.00ns,29.00ns,12.00ns,26.00ns,10.17us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1001,1000000,1.38s,459.00ns,0.00ns,459.00ns,18.00ns,454.00ns,2.97us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1001,1000000,1.38s,458.00ns,0.00ns,459.00ns,18.00ns,454.00ns,5.96us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1001,1000000,3.19s,1.35us,0.00ns,1.36us,30.00ns,1.33us,5.57us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,3.54s,1.55us,0.00ns,1.55us,34.00ns,1.53us,5.65us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,1.93s,728.00ns,0.00ns,750.00ns,48.00ns,711.00ns,5.75us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,1000000,4.94s,2.89us,0.00ns,2.91us,65.00ns,2.83us,23.68us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,1.73s,563.00ns,0.00ns,600.00ns,71.00ns,538.00ns,9.19us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1001,1000000,4.29s,2.15us,0.00ns,2.19us,104.00ns,2.10us,7.45us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1001,1000000,1.68s,590.00ns,0.00ns,613.00ns,47.00ns,566.00ns,7.06us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,550004,34702,4.56s,86.38us,0.00ns,86.41us,564.00ns,84.16us,102.77us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,550004,29161,4.51s,102.26us,0.00ns,102.85us,1.99us,98.93us,122.88us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,550004,29014,4.56s,102.83us,0.00ns,103.37us,2.29us,99.50us,124.74us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,550004,16690,4.51s,190.55us,0.00ns,179.72us,17.76us,153.93us,203.18us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,550004,19339,4.51s,155.18us,0.00ns,155.10us,2.55us,153.88us,221.50us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,550004,38997,4.56s,76.72us,0.00ns,76.89us,1.73us,73.32us,89.48us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,550004,38587,4.56s,77.03us,0.00ns,77.71us,2.47us,73.39us,91.47us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,550004,49728,4.56s,60.24us,0.00ns,60.29us,285.00ns,59.91us,67.15us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,550004,49693,4.56s,60.26us,0.00ns,60.34us,344.00ns,59.89us,68.89us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,720057,69604,4.56s,43.01us,0.00ns,43.07us,270.00ns,42.98us,56.34us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,720057,36104,4.56s,86.53us,0.00ns,83.06us,4.86us,77.86us,109.37us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,720057,36511,4.56s,77.97us,0.00ns,82.12us,4.71us,77.88us,106.23us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,78687,4.56s,37.86us,0.00ns,38.09us,624.00ns,37.76us,45.85us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,79527,4.56s,37.52us,0.00ns,37.69us,379.00ns,37.47us,44.83us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,720057,13095,4.51s,229.76us,0.00ns,229.07us,1.52us,225.29us,240.51us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,13090,4.51s,229.43us,0.00ns,229.16us,1.14us,225.30us,240.72us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,720057,138898,4.62s,21.54us,0.00ns,21.57us,161.00ns,21.49us,29.99us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,720057,139415,4.62s,21.46us,0.00ns,21.48us,158.00ns,21.42us,26.46us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,720057,2865,4.51s,1.04ms,0.00ns,1.05ms,13.83us,1.04ms,1.09ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,720057,619,4.51s,4.85ms,0.00ns,4.85ms,5.99us,4.84ms,4.93ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,720057,618,4.51s,4.86ms,7.00ns,4.86ms,4.42us,4.86ms,4.93ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,4804,4.51s,624.33us,0.00ns,624.56us,2.35us,602.30us,639.23us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,4813,4.51s,623.01us,0.00ns,623.36us,1.46us,601.78us,637.23us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,720057,2238,4.51s,1.34ms,1.00ns,1.34ms,15.71us,1.31ms,1.41ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,2237,4.51s,1.34ms,0.00ns,1.34ms,15.01us,1.31ms,1.42ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,720057,6463,4.51s,462.94us,0.00ns,464.16us,13.14us,439.32us,557.19us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,720057,6479,4.51s,461.64us,0.00ns,463.05us,16.48us,439.00us,556.93us\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,,189,4.56s,15.83ms,0.00ns,15.88ms,548.95us,15.21ms,18.21ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,,196,4.56s,15.31ms,64.00ns,15.33ms,76.02us,15.23ms,15.59ms\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1000,33456,4.56s,89.20us,0.00ns,89.64us,1.07us,88.48us,98.33us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1000,38559,4.56s,77.70us,0.00ns,77.77us,812.00ns,74.54us,89.24us\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,806771,225,4.56s,13.37ms,0.00ns,13.37ms,12.12us,13.34ms,13.48ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,806771,150,4.56s,20.30ms,69.00ns,20.07ms,388.75us,19.37ms,20.34ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,19460,4.51s,153.32us,0.00ns,154.13us,5.54us,142.94us,177.75us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,22958,4.56s,131.42us,0.00ns,130.64us,3.55us,125.24us,143.93us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,23232,4.51s,129.84us,0.00ns,129.10us,3.53us,123.47us,144.47us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,78357,4.56s,38.18us,0.00ns,38.25us,551.00ns,37.05us,46.66us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,184475,4.62s,15.81us,0.00ns,16.23us,687.00ns,15.44us,40.39us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,10881,4.51s,276.57us,0.00ns,275.69us,7.86us,255.50us,298.76us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,11066,4.51s,272.12us,2.00ns,271.07us,8.34us,248.49us,295.40us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,11205,4.51s,268.62us,0.00ns,267.72us,3.46us,260.80us,290.30us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,16694,4.51s,179.64us,1.00ns,179.68us,3.47us,173.35us,194.59us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,17747,4.51s,168.81us,0.00ns,169.01us,3.54us,159.72us,185.04us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,19124,4.51s,155.80us,0.00ns,156.84us,3.66us,152.47us,191.82us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,59977,4.56s,48.24us,0.00ns,49.98us,3.44us,46.02us,70.32us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,8865,4.51s,338.79us,0.00ns,338.41us,8.22us,313.60us,361.95us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,9744,4.51s,308.40us,1.00ns,307.87us,9.23us,283.37us,379.80us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,7557,4.51s,402.41us,0.00ns,396.95us,9.46us,378.76us,413.60us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,1958,4.51s,1.53ms,1.00ns,1.53ms,7.65us,1.51ms,1.56ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2979,4.51s,0.99ms,0.00ns,1.01ms,42.55us,0.97ms,1.13ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,2496,4.51s,1.20ms,2.00ns,1.20ms,5.26us,1.19ms,1.23ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,6248,4.51s,460.86us,0.00ns,480.13us,37.70us,458.47us,577.41us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,2067,4.51s,1.43ms,0.00ns,1.45ms,50.96us,1.39ms,1.63ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,2943,4.51s,1.01ms,0.00ns,1.02ms,22.20us,0.99ms,1.16ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,14419,4.52s,207.22us,0.00ns,208.04us,2.24us,202.70us,225.88us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,18222,4.51s,164.32us,0.00ns,164.61us,4.13us,157.21us,181.79us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,18749,4.51s,159.83us,0.00ns,159.98us,3.67us,154.21us,178.12us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,57407,4.57s,51.35us,0.00ns,52.22us,1.75us,49.26us,60.91us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,166155,4.62s,17.28us,0.00ns,18.02us,1.99us,16.29us,28.77us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613402,6172,4.51s,485.53us,2.00ns,486.04us,2.97us,480.11us,506.73us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613402,6380,4.51s,470.41us,1.00ns,470.22us,1.96us,464.98us,488.12us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,10638,4.51s,281.69us,0.00ns,281.99us,1.49us,277.72us,296.17us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,9012,4.51s,332.98us,0.00ns,332.88us,4.21us,320.55us,351.35us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,9316,4.51s,322.16us,0.00ns,322.00us,4.10us,313.61us,338.87us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,26425,4.56s,113.88us,0.00ns,113.50us,2.88us,108.06us,137.48us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,69436,4.56s,42.52us,0.00ns,43.17us,2.25us,40.61us,56.43us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613402,5151,4.51s,581.52us,0.00ns,582.43us,4.34us,573.09us,605.73us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613402,5533,4.51s,541.47us,0.00ns,542.17us,3.25us,536.40us,567.35us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,15165,4.51s,197.67us,0.00ns,197.80us,1.11us,194.05us,206.71us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,3479,4.51s,862.08us,0.00ns,862.44us,8.14us,840.15us,923.03us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,4758,4.51s,622.90us,6.00ns,630.49us,19.91us,600.29us,696.16us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,4992,4.51s,600.54us,1.00ns,601.02us,2.42us,596.82us,626.23us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,12354,4.51s,233.92us,0.00ns,242.83us,17.73us,232.57us,288.02us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613402,3599,4.51s,824.41us,0.00ns,833.67us,25.44us,800.93us,936.62us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613402,4749,4.51s,628.56us,0.00ns,631.72us,12.07us,617.56us,690.13us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,21872,4.56s,136.89us,0.00ns,137.13us,892.00ns,135.41us,147.32us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29857,4.56s,101.67us,0.00ns,100.45us,4.12us,94.49us,113.05us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,30790,4.56s,98.68us,0.00ns,97.41us,4.15us,91.56us,112.96us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,76631,4.56s,40.50us,0.00ns,39.11us,2.25us,35.69us,46.75us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,149298,4.57s,18.62us,0.00ns,20.06us,2.43us,17.37us,28.22us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613427,21782,4.56s,137.05us,1.00ns,137.70us,2.85us,132.35us,164.08us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613427,22957,4.56s,130.04us,0.00ns,130.65us,2.54us,125.51us,171.42us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,13744,4.51s,217.40us,0.00ns,218.26us,2.79us,213.66us,238.20us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,17505,4.51s,171.56us,0.00ns,171.35us,3.73us,165.23us,187.04us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,18301,4.51s,163.86us,0.00ns,163.90us,3.65us,157.57us,177.38us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,34920,4.56s,85.20us,0.00ns,85.88us,1.68us,83.77us,104.25us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,74724,4.56s,41.18us,0.00ns,40.11us,2.49us,36.36us,56.10us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613427,11261,4.51s,265.94us,0.00ns,266.38us,5.20us,252.77us,284.78us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613427,12315,4.51s,242.84us,0.00ns,243.58us,5.51us,230.66us,263.99us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,31712,4.56s,94.26us,0.00ns,94.57us,1.67us,93.29us,115.77us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,7745,4.51s,387.29us,0.00ns,387.36us,3.95us,376.91us,409.44us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,9414,4.51s,319.53us,0.00ns,318.67us,6.69us,299.67us,337.62us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,11234,4.51s,266.10us,0.00ns,267.02us,3.74us,264.48us,299.16us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,23999,4.56s,122.68us,0.00ns,124.98us,6.52us,118.10us,158.39us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613427,5782,4.51s,515.95us,1.00ns,518.87us,10.58us,505.62us,575.54us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613427,6790,4.51s,440.85us,0.00ns,441.85us,4.43us,434.86us,506.75us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,79825,4.56s,37.44us,0.00ns,37.55us,2.30us,34.27us,49.86us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41402,4.56s,74.22us,0.00ns,72.43us,4.28us,66.84us,90.67us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41587,4.56s,74.22us,0.00ns,72.10us,4.12us,66.84us,88.98us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,319911,4.72s,9.38us,0.00ns,9.34us,134.00ns,8.88us,17.70us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,227492,4.62s,14.97us,0.00ns,13.15us,2.30us,10.39us,27.75us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,221940,4.62s,13.31us,0.00ns,13.49us,260.00ns,13.16us,19.25us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,223564,4.62s,13.29us,0.00ns,13.39us,217.00ns,13.16us,27.01us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,10535,4.51s,284.41us,0.00ns,284.73us,4.80us,271.78us,310.10us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,10561,4.51s,283.81us,0.00ns,284.05us,4.86us,270.30us,310.19us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,70925,4.56s,42.13us,0.00ns,42.26us,721.00ns,40.55us,51.21us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,33256,4.56s,92.04us,0.00ns,90.17us,3.62us,85.21us,104.50us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,33072,4.56s,92.30us,0.00ns,90.68us,3.68us,85.51us,122.47us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,249036,4.67s,10.88us,0.00ns,12.01us,1.59us,10.59us,22.30us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,257771,4.67s,11.10us,0.00ns,11.61us,1.17us,10.80us,18.91us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,225717,4.62s,13.25us,0.00ns,13.26us,105.00ns,13.07us,19.13us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,225288,4.62s,13.26us,0.00ns,13.28us,135.00ns,13.08us,19.88us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,17152,4.51s,173.66us,1.00ns,174.88us,6.82us,152.81us,197.50us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,17265,4.51s,172.63us,0.00ns,173.73us,6.63us,157.25us,197.51us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,55189,4.56s,56.28us,0.00ns,54.32us,2.45us,51.27us,61.26us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41499,4.56s,74.23us,0.00ns,72.25us,4.36us,66.85us,85.43us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41658,4.56s,74.23us,0.00ns,71.98us,4.10us,66.85us,88.97us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,274859,4.62s,10.93us,0.00ns,10.87us,165.00ns,10.43us,19.65us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,317829,4.67s,9.42us,0.00ns,9.41us,168.00ns,9.10us,15.83us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,226582,4.67s,13.18us,0.00ns,13.21us,132.00ns,13.05us,20.73us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,214895,4.62s,13.98us,0.00ns,13.93us,257.00ns,13.23us,17.46us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,16645,4.51s,179.49us,0.00ns,180.21us,7.26us,163.93us,204.25us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,16698,4.51s,179.24us,0.00ns,179.63us,7.25us,163.60us,205.48us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,11998,4.51s,249.69us,0.00ns,250.01us,1.15us,249.30us,287.80us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,20514,4.51s,145.62us,0.00ns,146.21us,3.99us,138.96us,206.45us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,20952,4.51s,143.05us,0.00ns,143.16us,3.70us,137.35us,254.95us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,262471,4.67s,9.75us,0.00ns,11.39us,2.39us,9.13us,117.60us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,243290,4.67s,14.01us,0.00ns,12.30us,2.56us,8.81us,24.90us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,220182,4.62s,13.60us,0.00ns,13.59us,279.00ns,13.16us,19.92us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,223190,4.62s,13.43us,0.00ns,13.41us,252.00ns,13.06us,34.45us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,7278,4.51s,412.29us,3.00ns,412.21us,7.78us,389.32us,464.60us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,7307,4.51s,410.50us,0.00ns,410.55us,7.12us,391.49us,450.32us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,526.83ms,23.00ns,0.00ns,23.00ns,4.00ns,21.00ns,1.97us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.04ms,29.00ns,0.00ns,29.00ns,6.00ns,27.00ns,2.66us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,476.88ms,24.00ns,0.00ns,24.00ns,4.00ns,21.00ns,2.02us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.06ms,27.00ns,0.00ns,28.00ns,5.00ns,24.00ns,2.40us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,526.44ms,23.00ns,0.00ns,23.00ns,4.00ns,21.00ns,1.89us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,477.03ms,17.00ns,0.00ns,17.00ns,7.00ns,15.00ns,5.12us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,477.09ms,12.00ns,0.00ns,12.00ns,4.00ns,11.00ns,2.22us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,28,1000000,526.99ms,30.00ns,0.00ns,32.00ns,63.00ns,27.00ns,62.03us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,28,1000000,527.08ms,30.00ns,0.00ns,30.00ns,6.00ns,27.00ns,2.49us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,626.87ms,22.00ns,0.00ns,22.00ns,18.00ns,20.00ns,13.93us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,526.41ms,28.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.38us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,526.49ms,24.00ns,0.00ns,24.00ns,16.00ns,21.00ns,12.72us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,526.59ms,26.00ns,0.00ns,26.00ns,6.00ns,24.00ns,2.10us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,526.50ms,24.00ns,0.00ns,24.00ns,6.00ns,21.00ns,2.82us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,476.48ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,2.54us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,476.38ms,12.00ns,0.00ns,12.00ns,2.00ns,10.00ns,1.54us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,28,1000000,526.77ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,1.86us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,28,1000000,527.02ms,28.00ns,0.00ns,28.00ns,7.00ns,26.00ns,3.29us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.16ms,22.00ns,0.00ns,22.00ns,20.00ns,19.00ns,19.06us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,526.81ms,28.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.08us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.04ms,23.00ns,0.00ns,24.00ns,12.00ns,21.00ns,10.25us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,526.56ms,27.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.51us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.19ms,23.00ns,0.00ns,24.00ns,29.00ns,21.00ns,20.59us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,476.40ms,14.00ns,0.00ns,14.00ns,105.00ns,12.00ns,104.30us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,527.01ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,2.32us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,28,1000000,527.01ms,24.00ns,0.00ns,24.00ns,6.00ns,22.00ns,2.35us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,28,1000000,526.93ms,24.00ns,0.00ns,24.00ns,6.00ns,22.00ns,2.91us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.15ms,24.00ns,0.00ns,24.00ns,22.00ns,20.00ns,17.89us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.00ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,3.10us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,526.93ms,24.00ns,0.00ns,24.00ns,6.00ns,21.00ns,2.88us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.48ms,27.00ns,0.00ns,28.00ns,5.00ns,24.00ns,2.04us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,476.46ms,23.00ns,0.00ns,23.00ns,6.00ns,21.00ns,2.85us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,476.42ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.20us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,526.60ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,2.15us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,28,1000000,527.07ms,25.00ns,0.00ns,25.00ns,6.00ns,22.00ns,2.22us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,28,1000000,526.69ms,25.00ns,0.00ns,25.00ns,21.00ns,22.00ns,20.26us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,27212,4.56s,109.91us,0.00ns,110.21us,1.32us,108.31us,136.36us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13611,4.51s,221.20us,0.00ns,220.39us,4.48us,208.59us,242.32us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13602,4.51s,221.14us,0.00ns,220.53us,5.11us,208.98us,241.20us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,314862,4.67s,9.54us,0.00ns,9.49us,152.00ns,9.00us,19.89us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,240170,4.67s,14.33us,0.00ns,12.46us,2.48us,9.42us,20.81us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,71507,4.57s,41.14us,0.00ns,41.92us,1.83us,39.75us,64.49us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,69512,4.57s,42.22us,0.00ns,43.12us,2.21us,41.15us,64.91us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613402,14507,4.52s,206.24us,0.00ns,206.76us,2.11us,203.25us,225.35us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613402,14496,4.52s,206.62us,0.00ns,206.92us,1.47us,204.43us,224.48us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,543.67ms,26.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.28us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,643.93ms,27.00ns,0.00ns,28.00ns,20.00ns,24.00ns,13.44us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,528.67ms,25.00ns,0.00ns,26.00ns,8.00ns,22.00ns,4.76us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,527.09ms,35.00ns,0.00ns,35.00ns,7.00ns,32.00ns,2.65us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,526.90ms,24.00ns,0.00ns,24.00ns,6.00ns,22.00ns,2.31us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,476.50ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,1.98us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,527.24ms,12.00ns,0.00ns,13.00ns,4.00ns,11.00ns,2.10us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,42,1000000,577.04ms,46.00ns,0.00ns,47.00ns,5.00ns,43.00ns,1.89us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,42,1000000,527.21ms,45.00ns,0.00ns,45.00ns,8.00ns,42.00ns,2.48us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,96941,4.56s,32.43us,0.00ns,30.91us,2.43us,26.62us,41.63us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,34970,4.56s,87.13us,0.00ns,85.75us,3.88us,80.32us,98.92us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,34805,4.56s,87.62us,0.00ns,86.15us,3.90us,80.45us,103.31us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,296614,4.67s,9.59us,0.00ns,10.08us,1.52us,9.29us,18.12us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,315446,4.67s,9.50us,0.00ns,9.48us,118.00ns,9.24us,14.49us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,215647,4.62s,13.86us,0.00ns,13.88us,126.00ns,13.58us,34.66us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,207808,4.62s,14.51us,0.00ns,14.40us,334.00ns,13.59us,23.16us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613427,32340,4.51s,92.32us,0.00ns,92.73us,1.85us,89.84us,110.57us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613427,32482,4.56s,91.69us,0.00ns,92.33us,2.34us,89.36us,110.87us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,526.96ms,24.00ns,0.00ns,24.00ns,99.00ns,21.00ns,99.08us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,527.32ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,2.02us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,527.04ms,24.00ns,0.00ns,24.00ns,10.00ns,21.00ns,8.64us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.15ms,28.00ns,0.00ns,29.00ns,5.00ns,26.00ns,2.36us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,526.98ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.00us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,526.58ms,17.00ns,0.00ns,17.00ns,4.00ns,15.00ns,2.28us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,526.57ms,12.00ns,0.00ns,13.00ns,42.00ns,10.00ns,23.52us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,31,1000000,527.07ms,34.00ns,0.00ns,34.00ns,5.00ns,31.00ns,1.81us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,31,1000000,527.00ms,34.00ns,0.00ns,34.00ns,6.00ns,31.00ns,2.78us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,88063,4.56s,33.55us,0.00ns,34.03us,1.48us,30.03us,43.61us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,40749,4.56s,75.79us,0.00ns,73.58us,4.17us,68.45us,88.01us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,40785,4.56s,75.79us,0.00ns,73.52us,4.17us,68.44us,87.33us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,227259,4.62s,14.60us,0.00ns,13.17us,2.33us,9.50us,22.24us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,250141,4.67s,9.91us,0.00ns,11.96us,2.44us,9.46us,19.35us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,217366,4.62s,13.57us,0.00ns,13.77us,325.00ns,13.36us,18.37us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,222021,4.62s,13.40us,0.00ns,13.48us,226.00ns,13.25us,18.29us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,16587,4.51s,179.60us,0.00ns,180.83us,4.79us,166.85us,195.90us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,16594,4.51s,179.54us,0.00ns,180.76us,4.77us,166.82us,198.24us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,61422,4.56s,48.64us,0.00ns,48.80us,791.00ns,46.97us,59.77us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,40345,4.56s,75.93us,0.00ns,74.32us,4.33us,68.57us,90.87us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,40462,4.56s,75.89us,0.00ns,74.11us,4.17us,68.52us,92.62us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,244569,4.62s,11.05us,0.00ns,12.23us,1.98us,10.84us,19.84us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,267552,4.67s,10.76us,0.00ns,11.18us,1.31us,10.66us,18.52us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,225623,4.62s,13.25us,0.00ns,13.26us,120.00ns,13.12us,18.22us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,225731,4.62s,13.24us,0.00ns,13.26us,114.00ns,13.11us,18.62us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,14602,4.51s,204.79us,1.00ns,205.42us,7.92us,180.42us,227.79us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,14627,4.51s,204.72us,0.00ns,205.06us,7.87us,182.01us,226.57us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,154316,4.57s,16.74us,0.00ns,19.41us,3.68us,15.77us,29.94us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,32694,4.56s,92.90us,0.00ns,91.73us,3.85us,86.30us,119.93us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,32847,4.56s,92.86us,0.00ns,91.30us,3.77us,86.17us,106.10us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,289234,4.67s,10.33us,0.00ns,10.34us,108.00ns,10.13us,17.94us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,292426,4.67s,10.21us,0.00ns,10.22us,106.00ns,10.02us,16.18us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,142209,4.57s,20.87us,0.00ns,21.06us,1.10us,19.49us,30.30us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,137193,4.62s,21.87us,0.00ns,21.83us,917.00ns,20.60us,30.55us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,28460,4.56s,105.38us,0.00ns,105.38us,4.22us,93.02us,120.57us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,28700,4.56s,103.50us,1.00ns,104.49us,4.31us,92.58us,122.73us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,161141,4.62s,18.54us,0.00ns,18.58us,252.00ns,18.46us,26.79us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,37234,4.56s,82.37us,0.00ns,80.53us,4.24us,75.02us,99.82us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,37092,4.56s,82.36us,0.00ns,80.84us,3.98us,75.02us,98.74us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,208362,4.62s,14.43us,0.00ns,14.36us,212.00ns,13.72us,23.02us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,224293,4.67s,13.32us,0.00ns,13.34us,249.00ns,12.84us,18.60us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,149729,4.62s,19.60us,0.00ns,20.00us,1.12us,18.94us,33.24us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,143800,4.62s,20.44us,0.00ns,20.83us,1.02us,20.12us,29.42us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,58180,4.56s,50.60us,1.00ns,51.53us,3.32us,46.03us,66.48us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,59812,4.56s,48.56us,0.00ns,50.12us,3.05us,45.86us,65.04us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,100870,4.57s,29.68us,0.00ns,29.71us,173.00ns,29.62us,36.42us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,40721,4.56s,75.30us,0.00ns,73.63us,4.33us,67.96us,86.53us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,40827,4.56s,75.33us,0.00ns,73.44us,4.16us,68.00us,87.14us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,135125,4.57s,21.82us,0.00ns,22.17us,566.00ns,21.56us,33.85us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,145877,4.62s,20.39us,0.00ns,20.53us,387.00ns,20.19us,31.29us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,164856,4.62s,17.95us,0.00ns,18.16us,1.15us,17.50us,32.69us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,154389,4.57s,19.23us,0.00ns,19.40us,0.96us,18.75us,28.71us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,57297,4.56s,50.81us,0.00ns,52.32us,2.79us,48.48us,65.86us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,58504,4.56s,49.84us,0.00ns,51.24us,2.70us,47.92us,64.17us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,526.91ms,30.00ns,0.00ns,30.00ns,6.00ns,27.00ns,3.08us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,526.85ms,38.00ns,0.00ns,38.00ns,7.00ns,36.00ns,2.27us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,526.81ms,29.00ns,0.00ns,29.00ns,75.00ns,26.00ns,73.66us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.00ms,28.00ns,0.00ns,29.00ns,6.00ns,26.00ns,1.94us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,526.99ms,27.00ns,0.00ns,27.00ns,5.00ns,24.00ns,2.93us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.08ms,19.00ns,0.00ns,19.00ns,4.00ns,17.00ns,1.73us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,476.57ms,15.00ns,0.00ns,15.00ns,4.00ns,12.00ns,2.42us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,28,1000000,627.28ms,67.00ns,0.00ns,67.00ns,8.00ns,64.00ns,2.74us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,28,1000000,577.08ms,45.00ns,0.00ns,45.00ns,7.00ns,42.00ns,2.41us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.02ms,35.00ns,0.00ns,35.00ns,7.00ns,32.00ns,2.33us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,526.83ms,39.00ns,0.00ns,39.00ns,10.00ns,36.00ns,7.68us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,526.73ms,30.00ns,0.00ns,30.00ns,22.00ns,27.00ns,14.56us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.19ms,23.00ns,0.00ns,24.00ns,5.00ns,21.00ns,3.29us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.02ms,29.00ns,0.00ns,29.00ns,7.00ns,26.00ns,2.76us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,476.56ms,17.00ns,0.00ns,17.00ns,17.00ns,14.00ns,15.93us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,526.49ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,1.89us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,28,1000000,577.11ms,44.00ns,0.00ns,44.00ns,18.00ns,42.00ns,17.07us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,28,1000000,527.16ms,32.00ns,0.00ns,32.00ns,5.00ns,29.00ns,2.21us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,34978,4.56s,85.65us,0.00ns,85.73us,799.00ns,81.80us,95.72us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13708,4.51s,219.54us,0.00ns,218.83us,5.04us,207.74us,241.22us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13680,4.51s,220.21us,0.00ns,219.28us,5.01us,206.79us,235.07us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,237606,4.62s,14.28us,0.00ns,12.59us,2.51us,8.90us,23.91us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,256029,4.67s,9.77us,0.00ns,11.68us,2.45us,9.00us,32.49us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,91859,4.56s,31.93us,0.00ns,32.62us,1.96us,30.16us,48.61us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,90286,4.56s,32.76us,0.00ns,33.20us,1.52us,31.49us,47.78us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613402,17132,4.51s,174.79us,0.00ns,175.08us,0.96us,173.09us,186.35us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613402,17290,4.51s,173.47us,0.00ns,173.48us,887.00ns,171.80us,180.60us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,19872,4.51s,151.17us,0.00ns,150.93us,1.89us,143.11us,166.16us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13560,4.51s,222.05us,0.00ns,221.22us,4.88us,210.44us,239.68us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13605,4.51s,221.59us,0.00ns,220.49us,4.88us,210.67us,241.13us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,270812,4.67s,9.65us,0.00ns,11.05us,2.27us,9.45us,18.89us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,278407,4.67s,10.21us,0.00ns,10.74us,1.49us,9.77us,28.59us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,211958,4.62s,14.09us,0.00ns,14.12us,150.00ns,13.83us,19.99us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,212638,4.62s,14.06us,0.00ns,14.07us,124.00ns,13.81us,19.30us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613402,10687,4.51s,280.40us,0.00ns,280.68us,1.47us,277.86us,299.36us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613402,10559,4.51s,284.13us,0.00ns,284.09us,3.04us,277.55us,304.97us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,526.60ms,39.00ns,0.00ns,39.00ns,6.00ns,36.00ns,2.83us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,527.42ms,32.00ns,0.00ns,33.00ns,7.00ns,29.00ns,2.07us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,527.10ms,30.00ns,0.00ns,30.00ns,15.00ns,27.00ns,9.83us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,577.16ms,38.00ns,0.00ns,39.00ns,6.00ns,35.00ns,3.19us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,526.99ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.81us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,476.44ms,18.00ns,0.00ns,18.00ns,14.00ns,15.00ns,13.34us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,526.52ms,16.00ns,0.00ns,16.00ns,19.00ns,14.00ns,18.65us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,42,1000000,677.52ms,94.00ns,0.00ns,95.00ns,12.00ns,91.00ns,7.47us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,42,1000000,626.84ms,62.00ns,0.00ns,62.00ns,8.00ns,59.00ns,2.18us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,576.70ms,37.00ns,0.00ns,37.00ns,13.00ns,35.00ns,9.60us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,527.10ms,37.00ns,0.00ns,38.00ns,7.00ns,35.00ns,2.17us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,527.04ms,29.00ns,0.00ns,29.00ns,8.00ns,26.00ns,6.15us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,526.40ms,32.00ns,0.00ns,32.00ns,5.00ns,29.00ns,2.10us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,576.71ms,37.00ns,0.00ns,37.00ns,6.00ns,34.00ns,2.27us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,526.81ms,19.00ns,0.00ns,19.00ns,8.00ns,17.00ns,3.05us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,476.38ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,2.20us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,42,1000000,577.11ms,59.00ns,0.00ns,59.00ns,7.00ns,55.00ns,2.51us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,42,1000000,576.59ms,41.00ns,0.00ns,41.00ns,5.00ns,36.00ns,1.93us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,140358,4.62s,21.44us,0.00ns,21.34us,1.26us,18.20us,36.90us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29236,4.56s,103.64us,0.00ns,102.58us,3.71us,96.90us,116.56us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,29206,4.56s,103.64us,0.00ns,102.69us,3.53us,97.50us,118.66us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,241394,4.62s,9.87us,0.00ns,12.39us,2.76us,9.68us,20.26us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,256812,4.67s,10.14us,0.00ns,11.65us,2.41us,9.84us,19.29us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,154860,4.62s,19.05us,0.00ns,19.34us,874.00ns,18.54us,29.84us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,144379,4.62s,20.59us,0.00ns,20.75us,665.00ns,19.96us,27.52us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613427,29893,4.56s,99.74us,0.00ns,100.32us,2.17us,96.13us,116.99us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613427,29837,4.56s,99.86us,0.00ns,100.51us,2.58us,95.06us,124.53us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,62677,4.56s,47.68us,0.00ns,47.83us,675.00ns,46.26us,57.62us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29288,4.56s,103.61us,0.00ns,102.40us,3.60us,97.41us,116.81us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,29223,4.56s,103.81us,0.00ns,102.63us,3.69us,97.13us,116.88us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,289744,4.62s,9.88us,0.00ns,10.32us,1.41us,9.72us,19.98us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,315820,4.67s,9.46us,0.00ns,9.47us,91.00ns,9.32us,25.99us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,221643,4.62s,13.48us,0.00ns,13.50us,133.00ns,13.24us,18.70us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,217611,4.62s,13.82us,0.00ns,13.75us,249.00ns,13.11us,19.42us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613427,19029,4.51s,157.37us,0.00ns,157.62us,4.02us,150.57us,178.62us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613427,19357,4.51s,153.87us,0.00ns,154.95us,3.32us,150.70us,173.12us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,527.13ms,34.00ns,0.00ns,34.00ns,8.00ns,31.00ns,4.66us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,577.37ms,32.00ns,0.00ns,32.00ns,8.00ns,29.00ns,3.15us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,526.63ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,1.83us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,526.88ms,32.00ns,0.00ns,32.00ns,7.00ns,29.00ns,2.30us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,526.98ms,30.00ns,0.00ns,30.00ns,11.00ns,27.00ns,8.03us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,527.00ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,2.64us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,476.65ms,15.00ns,0.00ns,15.00ns,11.00ns,13.00ns,6.41us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,31,1000000,677.51ms,84.00ns,0.00ns,85.00ns,9.00ns,81.00ns,2.42us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,31,1000000,592.48ms,56.00ns,0.00ns,56.00ns,11.00ns,51.00ns,7.76us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,526.50ms,35.00ns,0.00ns,35.00ns,9.00ns,32.00ns,8.08us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,577.28ms,38.00ns,0.00ns,38.00ns,7.00ns,35.00ns,1.98us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,527.05ms,28.00ns,0.00ns,28.00ns,8.00ns,25.00ns,5.91us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.12ms,26.00ns,0.00ns,26.00ns,6.00ns,23.00ns,2.33us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,576.80ms,34.00ns,0.00ns,34.00ns,22.00ns,31.00ns,18.29us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,526.95ms,18.00ns,0.00ns,18.00ns,3.00ns,16.00ns,1.92us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,476.33ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.02us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,31,1000000,577.05ms,51.00ns,0.00ns,51.00ns,7.00ns,48.00ns,2.21us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,31,1000000,526.56ms,35.00ns,0.00ns,35.00ns,6.00ns,33.00ns,2.19us\n"
  },
  {
    "path": "benchmarks/record/x86_64/2023-08-09.csv",
    "content": "name,model,rebar_version,engine,engine_version,err,haystack_len,iters,total,median,mad,mean,stddev,min,max\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,17115,4.51s,172.96us,0.00ns,175.26us,7.72us,171.40us,207.21us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,16474,4.51s,181.89us,0.00ns,182.08us,812.00ns,181.12us,200.03us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,17947,4.51s,166.68us,0.00ns,167.13us,1.16us,165.48us,174.81us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,6476,4.51s,462.80us,1.00ns,463.21us,2.63us,458.23us,514.25us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,7225,4.51s,416.38us,0.00ns,415.24us,7.77us,397.17us,477.03us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,15917,4.51s,189.86us,0.00ns,188.45us,2.88us,182.56us,199.09us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,18013,4.51s,161.37us,0.00ns,166.52us,6.39us,160.45us,184.49us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,18460,4.51s,162.25us,0.00ns,162.48us,781.00ns,161.90us,173.53us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,7157,4.51s,418.95us,0.00ns,419.15us,5.13us,397.61us,528.09us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,16200,4.51s,184.96us,0.00ns,185.15us,1.10us,183.21us,196.55us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,9641,4.51s,310.84us,0.00ns,311.14us,1.39us,308.71us,339.26us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,3362,4.51s,891.63us,1.00ns,892.41us,2.27us,887.74us,928.28us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,4748,4.51s,630.47us,1.00ns,631.89us,11.23us,624.13us,841.71us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,8682,4.51s,345.14us,0.00ns,345.52us,1.16us,344.11us,358.80us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,9508,4.51s,306.38us,0.00ns,315.51us,11.75us,304.32us,341.48us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,8562,4.51s,344.92us,0.00ns,350.37us,10.83us,343.89us,385.21us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,6183,4.51s,484.29us,0.00ns,485.19us,4.16us,480.44us,519.33us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,2214,4.51s,1.35ms,9.00ns,1.36ms,6.79us,1.34ms,1.40ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,3344,4.51s,897.06us,4.00ns,897.22us,8.85us,868.88us,0.96ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,5747,4.51s,521.60us,0.00ns,522.02us,1.26us,520.75us,537.66us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,6151,4.51s,495.33us,0.00ns,487.76us,12.04us,467.19us,511.32us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,5750,4.51s,521.09us,0.00ns,521.76us,1.67us,520.39us,536.21us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,882.32ms,186.00ns,0.00ns,186.00ns,12.00ns,182.00ns,4.28us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,830.50ms,187.00ns,0.00ns,188.00ns,12.00ns,184.00ns,2.25us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,829.94ms,172.00ns,0.00ns,172.00ns,12.00ns,168.00ns,2.15us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,780.02ms,153.00ns,0.00ns,153.00ns,12.00ns,148.00ns,2.39us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,780.42ms,158.00ns,0.00ns,159.00ns,13.00ns,153.00ns,2.17us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,830.70ms,189.00ns,0.00ns,189.00ns,14.00ns,185.00ns,7.86us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,829.98ms,168.00ns,0.00ns,169.00ns,11.00ns,164.00ns,2.08us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,830.64ms,173.00ns,0.00ns,173.00ns,11.00ns,168.00ns,2.15us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,830.07ms,160.00ns,0.00ns,161.00ns,24.00ns,153.00ns,13.42us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,880.57ms,207.00ns,0.00ns,208.00ns,13.00ns,202.00ns,2.34us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,1.18s,338.00ns,0.00ns,338.00ns,13.00ns,331.00ns,2.73us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,880.62ms,208.00ns,0.00ns,209.00ns,27.00ns,201.00ns,20.69us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,880.27ms,211.00ns,0.00ns,213.00ns,17.00ns,204.00ns,8.79us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,1.23s,371.00ns,0.00ns,371.00ns,18.00ns,366.00ns,5.74us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,1.13s,331.00ns,0.00ns,332.00ns,19.00ns,325.00ns,10.47us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,1.28s,371.00ns,0.00ns,372.00ns,20.00ns,366.00ns,8.30us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,1.48s,503.00ns,0.00ns,504.00ns,17.00ns,492.00ns,2.57us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,1.23s,373.00ns,0.00ns,374.00ns,18.00ns,366.00ns,2.52us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,0.98s,284.00ns,0.00ns,279.00ns,20.00ns,260.00ns,9.07us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,1.63s,561.00ns,0.00ns,562.00ns,23.00ns,551.00ns,7.71us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,1.48s,493.00ns,0.00ns,494.00ns,29.00ns,485.00ns,21.11us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.58s,564.00ns,0.00ns,564.00ns,21.00ns,554.00ns,3.60us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,579.13ms,50.00ns,0.00ns,50.00ns,7.00ns,47.00ns,2.57us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,578.95ms,49.00ns,0.00ns,49.00ns,20.00ns,47.00ns,16.94us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,579.10ms,45.00ns,0.00ns,45.00ns,7.00ns,42.00ns,2.95us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,529.68ms,35.00ns,0.00ns,35.00ns,10.00ns,31.00ns,7.74us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,529.28ms,24.00ns,0.00ns,24.00ns,19.00ns,21.00ns,14.67us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,579.45ms,54.00ns,0.00ns,54.00ns,7.00ns,52.00ns,2.50us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,579.74ms,45.00ns,0.00ns,45.00ns,6.00ns,42.00ns,1.92us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,578.96ms,45.00ns,0.00ns,45.00ns,6.00ns,42.00ns,2.23us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,528.36ms,26.00ns,0.00ns,26.00ns,16.00ns,22.00ns,14.22us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,591.32ms,47.00ns,0.00ns,47.00ns,20.00ns,44.00ns,18.79us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,717710,4.83s,4.15us,0.00ns,4.15us,58.00ns,4.07us,12.76us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,706487,4.88s,4.23us,0.00ns,4.21us,84.00ns,4.10us,14.87us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,691114,4.83s,4.30us,0.00ns,4.31us,103.00ns,4.10us,16.91us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,138806,4.62s,21.49us,0.00ns,21.57us,538.00ns,21.46us,35.20us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,26188,4.56s,114.38us,0.00ns,114.53us,794.00ns,114.35us,138.12us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,688367,4.88s,4.34us,0.00ns,4.33us,80.00ns,4.17us,10.37us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,706779,4.83s,4.24us,0.00ns,4.21us,83.00ns,4.10us,12.13us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,689835,4.88s,4.32us,0.00ns,4.32us,116.00ns,4.10us,10.90us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,26136,4.52s,114.41us,0.00ns,114.75us,749.00ns,114.35us,138.37us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,677623,4.88s,4.35us,0.00ns,4.40us,105.00ns,4.28us,10.12us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,570646,4.83s,5.21us,0.00ns,5.22us,90.00ns,5.11us,17.59us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,75685,4.56s,39.39us,0.00ns,39.60us,528.00ns,38.16us,80.77us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,17463,4.51s,171.56us,0.00ns,171.76us,853.00ns,171.52us,207.53us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,492246,4.78s,6.47us,0.00ns,6.06us,679.00ns,5.14us,14.16us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,528943,4.78s,5.22us,0.00ns,5.64us,551.00ns,5.12us,22.01us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,555539,4.78s,5.17us,0.00ns,5.37us,470.00ns,5.14us,25.07us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,389444,4.67s,7.66us,0.00ns,7.67us,93.00ns,7.62us,21.84us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,52330,4.56s,57.25us,0.00ns,57.29us,293.00ns,57.22us,71.53us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,13093,4.51s,228.75us,0.00ns,229.10us,1.15us,228.71us,263.23us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,378934,4.67s,7.81us,0.00ns,7.88us,240.00ns,7.60us,16.45us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,388133,4.72s,7.69us,0.00ns,7.70us,92.00ns,7.62us,12.44us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,386768,4.72s,7.70us,0.00ns,7.72us,101.00ns,7.67us,14.95us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,527.64ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,1.82us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,527.90ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.37us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,477.51ms,15.00ns,0.00ns,15.00ns,3.00ns,13.00ns,2.00us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,527.50ms,39.00ns,0.00ns,40.00ns,7.00ns,33.00ns,2.32us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,728.72ms,145.00ns,0.00ns,145.00ns,11.00ns,141.00ns,3.32us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,527.53ms,15.00ns,0.00ns,15.00ns,2.00ns,12.00ns,1.62us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,477.46ms,14.00ns,0.00ns,14.00ns,8.00ns,12.00ns,7.24us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,477.47ms,15.00ns,0.00ns,15.00ns,22.00ns,13.00ns,15.09us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,778.85ms,145.00ns,0.00ns,145.00ns,18.00ns,141.00ns,13.81us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,477.68ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.51us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,529.41ms,19.00ns,0.00ns,19.00ns,11.00ns,17.00ns,10.81us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,577.95ms,59.00ns,0.00ns,59.00ns,23.00ns,56.00ns,20.85us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,879.17ms,210.00ns,0.00ns,210.00ns,13.00ns,206.00ns,4.75us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,527.66ms,19.00ns,0.00ns,19.00ns,24.00ns,17.00ns,20.36us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,477.05ms,19.00ns,0.00ns,19.00ns,33.00ns,17.00ns,21.59us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,527.39ms,19.00ns,0.00ns,19.00ns,21.00ns,17.00ns,20.38us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,477.68ms,22.00ns,0.00ns,22.00ns,5.00ns,19.00ns,2.85us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,627.70ms,79.00ns,0.00ns,80.00ns,13.00ns,76.00ns,10.03us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,0.98s,272.00ns,0.00ns,273.00ns,15.00ns,269.00ns,2.17us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,527.89ms,22.00ns,0.00ns,22.00ns,5.00ns,20.00ns,1.99us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,527.29ms,22.00ns,0.00ns,22.00ns,5.00ns,19.00ns,2.14us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,477.15ms,22.00ns,0.00ns,22.00ns,5.00ns,20.00ns,2.07us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,477.53ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.89us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,527.40ms,13.00ns,0.00ns,13.00ns,4.00ns,10.00ns,2.17us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,477.17ms,12.00ns,0.00ns,12.00ns,4.00ns,11.00ns,2.19us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,527.49ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.63us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,527.23ms,23.00ns,0.00ns,23.00ns,18.00ns,21.00ns,11.68us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,477.71ms,12.00ns,0.00ns,12.00ns,2.00ns,10.00ns,1.84us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,477.25ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,1.71us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,527.75ms,12.00ns,0.00ns,12.00ns,2.00ns,10.00ns,1.76us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,527.62ms,29.00ns,0.00ns,29.00ns,6.00ns,21.00ns,2.39us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,477.73ms,12.00ns,0.00ns,12.00ns,4.00ns,11.00ns,2.81us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,527.63ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.54us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,527.14ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,2.37us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,527.76ms,38.00ns,0.00ns,38.00ns,26.00ns,29.00ns,20.17us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,477.71ms,15.00ns,0.00ns,15.00ns,21.00ns,12.00ns,20.43us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,477.57ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,2.04us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,478.16ms,15.00ns,0.00ns,15.00ns,5.00ns,12.00ns,2.21us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,477.88ms,14.00ns,0.00ns,14.00ns,19.00ns,12.00ns,18.43us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,477.26ms,18.00ns,0.00ns,18.00ns,5.00ns,16.00ns,2.42us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,527.11ms,44.00ns,0.00ns,44.00ns,13.00ns,35.00ns,8.03us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,476.99ms,14.00ns,0.00ns,14.00ns,7.00ns,12.00ns,5.83us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,527.53ms,14.00ns,0.00ns,15.00ns,7.00ns,12.00ns,5.53us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,527.20ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.06us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,,1000000,477.54ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.97us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,,1000000,477.52ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.72us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,,1000000,527.64ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.89us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,,1000000,477.86ms,11.00ns,0.00ns,11.00ns,13.00ns,9.00ns,9.63us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,,1000000,477.07ms,10.00ns,0.00ns,10.00ns,3.00ns,9.00ns,1.74us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,,1000000,477.60ms,11.00ns,0.00ns,11.00ns,1.00ns,9.00ns,261.00ns\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,,1000000,476.92ms,10.00ns,0.00ns,10.00ns,16.00ns,8.00ns,15.16us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,,1000000,491.83ms,11.00ns,0.00ns,11.00ns,27.00ns,9.00ns,16.42us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,,1000000,477.44ms,10.00ns,0.00ns,10.00ns,5.00ns,8.00ns,3.27us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,,1000000,477.20ms,11.00ns,0.00ns,11.00ns,3.00ns,9.00ns,2.16us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,,1000000,493.16ms,11.00ns,0.00ns,11.00ns,14.00ns,9.00ns,14.04us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,,1000000,477.21ms,11.00ns,0.00ns,11.00ns,18.00ns,9.00ns,17.44us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,,1000000,477.41ms,10.00ns,0.00ns,10.00ns,3.00ns,8.00ns,2.10us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,,1000000,477.26ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.17us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,,1000000,476.91ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.50us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,,1000000,477.25ms,11.00ns,0.00ns,11.00ns,3.00ns,9.00ns,1.90us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,,1000000,527.06ms,11.00ns,0.00ns,11.00ns,3.00ns,9.00ns,2.17us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,,1000000,477.25ms,11.00ns,0.00ns,11.00ns,25.00ns,9.00ns,15.42us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,,1000000,476.99ms,10.00ns,0.00ns,10.00ns,4.00ns,9.00ns,2.43us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,,1000000,477.29ms,11.00ns,0.00ns,11.00ns,17.00ns,9.00ns,16.08us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,,1000000,477.49ms,11.00ns,0.00ns,11.00ns,16.00ns,9.00ns,15.46us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,,1000000,477.63ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.12us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,586752,4.83s,5.00us,0.00ns,5.08us,146.00ns,4.93us,11.70us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,596078,4.83s,4.99us,0.00ns,5.00us,82.00ns,4.91us,14.49us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,596881,4.78s,4.99us,0.00ns,4.99us,65.00ns,4.92us,12.41us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,129092,4.57s,23.22us,0.00ns,23.21us,243.00ns,22.74us,52.25us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,25700,4.56s,116.48us,0.00ns,116.70us,3.64us,115.26us,149.86us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,582414,4.78s,5.06us,0.00ns,5.12us,109.00ns,4.95us,10.92us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,599771,4.83s,4.94us,0.00ns,4.97us,96.00ns,4.86us,10.57us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,603526,4.83s,4.93us,0.00ns,4.94us,64.00ns,4.86us,11.29us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,591938,4.83s,5.03us,0.00ns,5.04us,59.00ns,4.94us,12.41us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,350285,4.72s,8.94us,0.00ns,8.53us,592.00ns,7.66us,18.16us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,70494,4.56s,42.12us,0.00ns,42.52us,772.00ns,41.25us,54.55us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,17236,4.51s,173.89us,0.00ns,174.02us,680.00ns,173.79us,212.07us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,389919,4.72s,7.57us,0.00ns,7.66us,338.00ns,7.48us,14.06us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,389835,4.72s,7.65us,0.00ns,7.66us,110.00ns,7.56us,16.93us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,389394,4.68s,7.66us,0.00ns,7.67us,99.00ns,7.53us,22.46us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,277659,4.67s,10.74us,0.00ns,10.77us,209.00ns,10.66us,20.02us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,48488,4.56s,60.68us,0.00ns,61.83us,1.64us,60.01us,78.56us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,12914,4.52s,231.78us,0.00ns,232.27us,1.72us,231.70us,276.13us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,276778,4.67s,10.68us,0.00ns,10.81us,360.00ns,10.62us,17.15us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,275316,4.67s,10.81us,0.00ns,10.86us,242.00ns,10.71us,39.75us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,276317,4.67s,10.78us,0.00ns,10.82us,219.00ns,10.71us,18.42us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,527.68ms,19.00ns,0.00ns,19.00ns,6.00ns,17.00ns,2.14us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,529.25ms,19.00ns,0.00ns,19.00ns,6.00ns,16.00ns,3.68us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,542.94ms,19.00ns,0.00ns,19.00ns,4.00ns,16.00ns,3.12us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,593.19ms,36.00ns,0.00ns,36.00ns,15.00ns,33.00ns,13.59us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,781.02ms,152.00ns,0.00ns,152.00ns,19.00ns,146.00ns,15.84us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,527.69ms,20.00ns,0.00ns,20.00ns,13.00ns,17.00ns,12.75us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,477.44ms,19.00ns,0.00ns,19.00ns,21.00ns,16.00ns,20.60us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,527.15ms,19.00ns,0.00ns,19.00ns,20.00ns,16.00ns,18.65us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,781.95ms,150.00ns,0.00ns,151.00ns,11.00ns,146.00ns,1.95us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,527.19ms,20.00ns,0.00ns,20.00ns,18.00ns,17.00ns,17.21us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,527.65ms,30.00ns,0.00ns,30.00ns,6.00ns,28.00ns,2.60us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,577.28ms,55.00ns,0.00ns,56.00ns,8.00ns,53.00ns,3.89us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,929.08ms,222.00ns,0.00ns,223.00ns,14.00ns,216.00ns,2.29us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,539.90ms,29.00ns,0.00ns,29.00ns,18.00ns,26.00ns,12.28us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,527.08ms,30.00ns,0.00ns,30.00ns,6.00ns,27.00ns,2.06us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,527.50ms,29.00ns,0.00ns,29.00ns,10.00ns,26.00ns,7.62us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,527.63ms,37.00ns,0.00ns,38.00ns,26.00ns,34.00ns,19.13us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,628.05ms,80.00ns,0.00ns,79.00ns,9.00ns,75.00ns,3.48us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.03s,285.00ns,0.00ns,286.00ns,16.00ns,281.00ns,2.50us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,577.86ms,38.00ns,0.00ns,38.00ns,27.00ns,35.00ns,17.50us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,577.84ms,38.00ns,0.00ns,38.00ns,6.00ns,34.00ns,2.36us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,627.88ms,38.00ns,0.00ns,38.00ns,8.00ns,35.00ns,4.30us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,477.65ms,15.00ns,0.00ns,15.00ns,13.00ns,12.00ns,11.79us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,527.75ms,17.00ns,0.00ns,17.00ns,5.00ns,15.00ns,2.14us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,477.27ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,2.71us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,527.55ms,16.00ns,0.00ns,16.00ns,27.00ns,13.00ns,14.31us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,527.48ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.00us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,527.62ms,14.00ns,0.00ns,14.00ns,3.00ns,12.00ns,2.13us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,477.25ms,16.00ns,0.00ns,16.00ns,33.00ns,14.00ns,19.42us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,527.56ms,16.00ns,0.00ns,16.00ns,28.00ns,14.00ns,19.45us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,527.86ms,31.00ns,0.00ns,31.00ns,5.00ns,21.00ns,2.41us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,477.43ms,14.00ns,0.00ns,14.00ns,21.00ns,12.00ns,21.00us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,527.68ms,22.00ns,0.00ns,22.00ns,13.00ns,19.00ns,12.32us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,477.47ms,19.00ns,0.00ns,19.00ns,7.00ns,17.00ns,4.77us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,528.16ms,38.00ns,0.00ns,38.00ns,96.00ns,29.00ns,94.80us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,527.61ms,20.00ns,0.00ns,20.00ns,34.00ns,17.00ns,19.72us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,477.69ms,21.00ns,0.00ns,22.00ns,15.00ns,19.00ns,14.02us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,527.60ms,20.00ns,0.00ns,20.00ns,32.00ns,17.00ns,16.12us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,527.47ms,30.00ns,0.00ns,30.00ns,26.00ns,27.00ns,18.16us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,527.30ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.16us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,627.75ms,44.00ns,0.00ns,44.00ns,24.00ns,35.00ns,22.30us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,527.03ms,22.00ns,0.00ns,22.00ns,5.00ns,19.00ns,2.18us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,527.53ms,29.00ns,0.00ns,29.00ns,21.00ns,26.00ns,17.11us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,527.78ms,21.00ns,0.00ns,22.00ns,9.00ns,19.00ns,8.34us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,85666,4.56s,33.68us,0.00ns,34.98us,1.92us,33.00us,66.92us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,52039,4.56s,57.14us,0.00ns,57.61us,1.16us,56.14us,91.75us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,53172,4.56s,56.27us,0.00ns,56.39us,496.00ns,55.48us,75.62us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,34584,4.56s,86.65us,0.00ns,86.71us,588.00ns,85.49us,120.14us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,18341,4.51s,168.62us,0.00ns,163.53us,8.24us,154.44us,235.23us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,50128,4.56s,59.86us,0.00ns,59.81us,1.21us,57.03us,79.17us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,65830,4.56s,45.26us,0.00ns,45.54us,0.98us,44.22us,68.73us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,62483,4.56s,47.80us,0.00ns,47.98us,833.00ns,46.88us,68.53us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,19010,4.51s,155.87us,0.00ns,157.78us,6.08us,154.66us,203.31us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,61692,4.56s,48.31us,0.00ns,48.59us,1.39us,46.37us,72.53us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,26222,4.56s,114.08us,0.00ns,114.38us,1.14us,113.17us,156.84us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,15750,4.51s,189.98us,0.00ns,190.45us,1.94us,184.37us,309.92us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,11651,4.51s,258.72us,0.00ns,257.46us,2.54us,253.52us,305.95us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,24643,4.56s,125.60us,0.00ns,121.71us,6.40us,111.88us,149.56us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,25495,4.56s,113.33us,0.00ns,117.64us,5.28us,111.64us,152.90us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,26332,4.56s,110.56us,0.00ns,113.90us,5.98us,108.82us,146.13us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,19416,4.51s,153.03us,0.00ns,154.48us,4.63us,149.33us,185.38us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,9976,4.51s,300.47us,0.00ns,300.71us,1.25us,298.76us,338.91us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,8450,4.51s,354.45us,0.00ns,355.00us,1.54us,353.06us,401.68us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,18908,4.51s,158.28us,0.00ns,158.63us,1.34us,155.45us,190.39us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,18456,4.51s,166.75us,0.00ns,162.52us,7.40us,149.49us,188.37us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,18637,4.51s,156.26us,0.00ns,160.94us,7.42us,153.19us,273.92us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,527.39ms,46.00ns,0.00ns,46.00ns,7.00ns,43.00ns,1.95us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,577.69ms,47.00ns,0.00ns,47.00ns,9.00ns,44.00ns,5.18us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,577.85ms,45.00ns,0.00ns,45.00ns,13.00ns,42.00ns,11.72us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,578.24ms,59.00ns,0.00ns,59.00ns,10.00ns,54.00ns,5.96us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,778.73ms,157.00ns,0.00ns,159.00ns,15.00ns,145.00ns,7.94us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,577.75ms,48.00ns,0.00ns,48.00ns,24.00ns,45.00ns,18.49us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,577.74ms,45.00ns,0.00ns,45.00ns,5.00ns,42.00ns,2.57us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,577.79ms,45.00ns,0.00ns,45.00ns,7.00ns,41.00ns,2.34us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,778.75ms,158.00ns,0.00ns,160.00ns,11.00ns,154.00ns,2.44us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,577.89ms,50.00ns,0.00ns,50.00ns,7.00ns,47.00ns,2.59us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,630.01ms,101.00ns,0.00ns,101.00ns,7.00ns,92.00ns,2.33us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,628.50ms,80.00ns,0.00ns,80.00ns,7.00ns,77.00ns,2.10us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,880.32ms,202.00ns,0.00ns,203.00ns,14.00ns,199.00ns,2.44us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,629.59ms,88.00ns,0.00ns,88.00ns,11.00ns,83.00ns,7.56us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,680.32ms,99.00ns,0.00ns,99.00ns,9.00ns,91.00ns,2.17us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,629.28ms,88.00ns,0.00ns,88.00ns,8.00ns,82.00ns,2.19us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,780.34ms,140.00ns,0.00ns,141.00ns,12.00ns,133.00ns,6.75us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,729.82ms,127.00ns,0.00ns,130.00ns,25.00ns,123.00ns,17.47us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.03s,267.00ns,0.00ns,267.00ns,16.00ns,261.00ns,2.04us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,729.33ms,136.00ns,0.00ns,136.00ns,12.00ns,130.00ns,6.10us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,779.57ms,138.00ns,0.00ns,138.00ns,10.00ns,131.00ns,1.92us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,830.25ms,136.00ns,0.00ns,136.00ns,12.00ns,130.00ns,4.14us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,527.57ms,29.00ns,0.00ns,29.00ns,7.00ns,26.00ns,3.09us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,527.60ms,30.00ns,0.00ns,30.00ns,6.00ns,28.00ns,2.55us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,543.48ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,2.45us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,534.38ms,23.00ns,0.00ns,23.00ns,23.00ns,19.00ns,19.21us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,543.12ms,30.00ns,0.00ns,28.00ns,7.00ns,21.00ns,1.99us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,528.62ms,31.00ns,0.00ns,31.00ns,11.00ns,29.00ns,9.25us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,527.47ms,27.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.62us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,527.73ms,28.00ns,0.00ns,28.00ns,7.00ns,26.00ns,2.89us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,527.65ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.05us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,527.27ms,32.00ns,0.00ns,32.00ns,31.00ns,29.00ns,22.13us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,578.79ms,59.00ns,0.00ns,59.00ns,6.00ns,55.00ns,1.98us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,528.82ms,30.00ns,0.00ns,30.00ns,5.00ns,26.00ns,2.63us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,529.56ms,31.00ns,0.00ns,31.00ns,6.00ns,29.00ns,2.66us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,528.93ms,53.00ns,0.00ns,53.00ns,7.00ns,49.00ns,3.80us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,579.41ms,57.00ns,0.00ns,57.00ns,7.00ns,52.00ns,2.72us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,579.03ms,52.00ns,0.00ns,52.00ns,7.00ns,48.00ns,2.29us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,628.65ms,71.00ns,0.00ns,71.00ns,8.00ns,65.00ns,3.16us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,579.45ms,54.00ns,0.00ns,54.00ns,8.00ns,48.00ns,2.63us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,578.70ms,37.00ns,0.00ns,37.00ns,7.00ns,33.00ns,2.45us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,629.73ms,80.00ns,0.00ns,80.00ns,8.00ns,74.00ns,2.33us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,628.91ms,71.00ns,0.00ns,71.00ns,9.00ns,65.00ns,3.62us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,629.49ms,80.00ns,0.00ns,80.00ns,8.00ns,74.00ns,2.52us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,7536,4.51s,397.56us,0.00ns,398.06us,2.73us,394.56us,427.37us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,7564,4.51s,391.90us,0.00ns,396.63us,8.51us,390.97us,421.12us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,8439,4.51s,354.86us,0.00ns,355.47us,2.55us,353.49us,396.95us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,3721,4.51s,805.19us,0.00ns,806.41us,4.81us,798.13us,847.67us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,3800,4.51s,788.68us,4.00ns,789.56us,6.77us,770.76us,844.24us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,7769,4.51s,385.91us,0.00ns,386.13us,805.00ns,385.83us,399.34us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,8145,4.51s,375.44us,0.00ns,368.31us,10.83us,349.34us,389.50us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,8087,4.51s,381.29us,0.00ns,370.96us,12.94us,353.43us,394.68us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,3722,4.51s,805.89us,1.00ns,806.09us,3.79us,793.66us,859.71us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,7304,4.51s,403.39us,1.00ns,410.70us,11.98us,403.03us,461.99us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,1.33s,439.00ns,0.00ns,440.00ns,18.00ns,434.00ns,3.39us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,1.43s,433.00ns,0.00ns,434.00ns,19.00ns,429.00ns,6.43us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.28s,392.00ns,0.00ns,392.00ns,14.00ns,388.00ns,2.16us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,1.03s,271.00ns,0.00ns,272.00ns,16.00ns,266.00ns,6.77us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,932.26ms,213.00ns,0.00ns,213.00ns,14.00ns,206.00ns,2.75us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,1.33s,427.00ns,0.00ns,428.00ns,18.00ns,424.00ns,4.65us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.29s,394.00ns,0.00ns,394.00ns,19.00ns,390.00ns,7.39us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.28s,400.00ns,0.00ns,400.00ns,18.00ns,394.00ns,2.18us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,882.02ms,200.00ns,0.00ns,201.00ns,14.00ns,193.00ns,2.42us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,1.38s,449.00ns,0.00ns,449.00ns,20.00ns,444.00ns,7.34us\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,33335253,269,4.56s,11.16ms,0.00ns,11.16ms,222.42us,10.91ms,12.18ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,33335253,285,4.56s,10.55ms,0.00ns,10.56ms,118.24us,10.32ms,11.02ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,33335253,284,4.57s,10.57ms,477.00ns,10.58ms,125.32us,10.38ms,11.08ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,33335253,412,4.57s,7.37ms,32.00ns,7.29ms,185.66us,6.92ms,7.56ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,33335253,416,4.57s,7.40ms,516.00ns,7.22ms,231.66us,6.92ms,7.54ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/binary,2.5.0,,33335253,3179,4.57s,941.55us,0.00ns,943.74us,12.32us,919.45us,1.02ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,33335253,310,4.56s,9.61ms,850.00ns,9.70ms,212.20us,9.44ms,10.33ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,33335253,146,4.56s,20.63ms,180.00ns,20.66ms,117.77us,20.60ms,21.82ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,33335253,222,4.56s,13.56ms,82.00ns,13.57ms,51.35us,13.47ms,13.75ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,33335253,558,4.57s,5.38ms,28.00ns,5.38ms,54.61us,5.23ms,5.88ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,33335253,528,4.57s,5.75ms,77.00ns,5.69ms,155.44us,5.29ms,5.91ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,20916,4.52s,148.17us,0.00ns,143.40us,8.36us,132.74us,180.53us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13561,4.51s,225.08us,0.00ns,221.19us,11.04us,205.89us,263.60us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13533,4.51s,225.50us,0.00ns,221.65us,10.83us,206.00us,268.20us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,101217,4.57s,28.90us,0.00ns,29.60us,2.73us,28.63us,48.23us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,104595,4.57s,28.59us,0.00ns,28.64us,360.00ns,28.29us,56.67us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,2865,4.51s,1.05ms,0.00ns,1.05ms,24.89us,910.77us,1.09ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2954,4.51s,1.01ms,0.00ns,1.02ms,2.37us,1.01ms,1.04ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4536,4.51s,660.25us,1.00ns,661.47us,6.68us,651.45us,726.97us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,75968,4.57s,39.88us,0.00ns,39.45us,1.00us,37.41us,46.95us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,77000,4.56s,38.48us,0.00ns,38.92us,1.13us,37.33us,62.30us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,2994,4.51s,0.99ms,14.00ns,1.00ms,36.45us,0.96ms,1.13ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,2923,4.51s,1.04ms,0.00ns,1.03ms,35.38us,0.96ms,1.11ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,21803,4.56s,137.20us,0.00ns,137.56us,1.70us,136.25us,157.33us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13538,4.51s,225.25us,0.00ns,221.56us,11.80us,206.04us,268.87us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13473,4.51s,225.95us,0.00ns,222.62us,11.04us,206.54us,268.18us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,85859,4.56s,40.83us,0.00ns,34.90us,6.33us,28.13us,47.95us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,104733,4.57s,28.53us,0.00ns,28.61us,336.00ns,28.28us,57.05us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3166,4.51s,0.98ms,8.00ns,947.70us,65.56us,849.50us,1.05ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2952,4.51s,1.02ms,0.00ns,1.02ms,4.69us,1.01ms,1.08ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4539,4.51s,658.62us,0.00ns,660.95us,6.27us,651.46us,713.81us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,78585,4.56s,38.03us,0.00ns,38.13us,431.00ns,37.72us,64.02us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,78464,4.56s,38.14us,0.00ns,38.19us,300.00ns,37.83us,48.66us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,3043,4.51s,0.99ms,0.00ns,0.99ms,24.11us,897.48us,1.03ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,3041,4.51s,0.99ms,0.00ns,0.99ms,20.51us,895.76us,1.03ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,16414,4.51s,175.83us,0.00ns,182.74us,8.78us,174.47us,214.11us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13480,4.51s,225.96us,0.00ns,222.52us,11.36us,206.62us,267.55us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13469,4.51s,225.65us,0.00ns,222.71us,11.13us,206.04us,268.12us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,97443,4.57s,30.69us,0.00ns,30.75us,316.00ns,30.44us,55.87us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,108438,4.57s,27.61us,0.00ns,27.63us,284.00ns,27.22us,36.13us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3490,4.51s,848.18us,2.00ns,859.77us,24.67us,836.91us,0.97ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2943,4.51s,1.02ms,0.00ns,1.02ms,10.18us,1.01ms,1.07ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4522,4.51s,660.47us,0.00ns,663.53us,9.90us,651.53us,730.98us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,76005,4.56s,38.59us,0.00ns,39.43us,1.33us,38.15us,48.13us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,76572,4.56s,38.68us,0.00ns,39.14us,896.00ns,38.14us,65.14us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,3315,4.51s,900.85us,0.00ns,905.01us,11.74us,892.48us,0.98ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,3327,4.51s,900.22us,0.00ns,901.72us,6.21us,888.95us,0.96ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,32946,4.56s,90.75us,0.00ns,91.02us,1.24us,89.14us,108.56us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13745,4.51s,220.01us,0.00ns,218.23us,10.93us,200.51us,262.84us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13894,4.51s,219.75us,0.00ns,215.89us,12.00us,200.44us,265.00us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,92212,4.57s,29.26us,0.00ns,32.50us,5.34us,28.95us,47.48us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,97466,4.57s,29.27us,0.00ns,30.74us,3.88us,29.03us,57.00us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3332,4.51s,897.34us,1.00ns,900.44us,29.22us,830.52us,1.06ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2955,4.51s,1.01ms,0.00ns,1.02ms,4.89us,1.01ms,1.09ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,282285,4.67s,10.59us,0.00ns,10.59us,84.00ns,10.46us,19.42us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,275108,4.62s,10.94us,0.00ns,10.87us,194.00ns,10.45us,19.59us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,3282,4.51s,912.85us,9.00ns,914.12us,34.25us,862.26us,1.03ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,3266,4.51s,915.34us,3.00ns,918.75us,18.05us,862.67us,1.02ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,24184,4.51s,122.91us,0.00ns,124.02us,3.18us,121.22us,163.46us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13468,4.51s,226.02us,0.00ns,222.73us,11.33us,206.49us,267.20us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13545,4.51s,225.69us,0.00ns,221.45us,11.12us,206.44us,264.74us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,99461,4.57s,30.08us,0.00ns,30.13us,283.00ns,29.75us,40.09us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,94478,4.56s,28.63us,0.00ns,31.71us,5.29us,28.28us,56.13us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3297,4.51s,904.12us,0.00ns,909.98us,13.96us,887.03us,0.99ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2952,4.51s,1.02ms,1.00ns,1.02ms,4.52us,1.01ms,1.09ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4547,4.51s,658.86us,0.00ns,659.82us,4.36us,654.01us,703.83us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,3150,4.51s,0.95ms,2.00ns,0.95ms,7.67us,940.71us,1.04ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,3161,4.51s,948.46us,0.00ns,949.15us,4.04us,940.21us,0.97ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,4327,4.51s,691.53us,0.00ns,693.41us,5.46us,686.85us,737.24us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,10778,4.51s,280.30us,0.00ns,278.32us,11.32us,260.97us,316.82us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,10912,4.51s,275.22us,1.00ns,274.88us,12.31us,255.96us,319.75us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,29418,4.56s,100.33us,0.00ns,101.95us,3.64us,99.20us,135.84us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,48140,4.56s,58.17us,0.00ns,62.29us,5.85us,56.57us,77.88us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3553,4.51s,844.17us,0.00ns,844.51us,8.45us,824.81us,887.51us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2771,4.51s,1.08ms,0.00ns,1.08ms,2.71us,1.08ms,1.13ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4430,4.51s,680.97us,4.00ns,677.28us,11.52us,656.38us,712.64us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,3260,4.51s,920.15us,4.00ns,920.49us,9.66us,850.20us,0.96ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,3317,4.51s,903.50us,0.00ns,904.45us,8.04us,832.97us,943.80us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,11139,4.51s,270.46us,0.00ns,269.30us,7.32us,251.45us,291.03us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,3877,4.51s,774.45us,0.00ns,773.92us,12.34us,739.90us,833.62us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,4371,4.51s,685.04us,0.00ns,686.43us,12.47us,660.01us,735.07us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,5455,4.51s,548.14us,0.00ns,549.97us,5.65us,542.03us,578.02us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,9399,4.51s,316.10us,0.00ns,319.16us,5.81us,313.23us,344.28us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,2481,4.51s,1.19ms,0.00ns,1.21ms,47.29us,1.18ms,1.36ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2400,4.51s,1.25ms,1.00ns,1.25ms,10.13us,1.23ms,1.33ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,3415,4.51s,871.66us,0.00ns,878.51us,24.53us,838.27us,0.97ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,2501,4.51s,1.20ms,0.00ns,1.20ms,17.30us,1.17ms,1.28ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,2789,4.51s,1.08ms,0.00ns,1.08ms,7.39us,1.06ms,1.13ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,6264,4.51s,470.91us,0.00ns,478.90us,12.61us,466.04us,512.28us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,8590,4.51s,350.59us,1.00ns,349.21us,10.75us,331.57us,400.20us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,8859,4.51s,340.70us,0.00ns,338.60us,11.08us,321.06us,381.00us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,16494,4.51s,181.40us,0.00ns,181.85us,3.06us,176.42us,216.44us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,33032,4.56s,89.83us,0.00ns,90.79us,2.41us,88.50us,124.92us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,2777,4.51s,1.08ms,0.00ns,1.08ms,16.94us,1.03ms,1.13ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2691,4.51s,1.11ms,0.00ns,1.12ms,5.92us,1.11ms,1.17ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4313,4.51s,698.38us,0.00ns,695.58us,11.95us,669.04us,748.16us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1648109,2465,4.51s,1.22ms,0.00ns,1.22ms,8.82us,1.20ms,1.25ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1648109,2532,4.51s,1.18ms,4.00ns,1.19ms,8.47us,1.16ms,1.23ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,151305,801646,4.89s,3.68us,0.00ns,3.71us,143.00ns,3.49us,9.90us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,151305,124069,4.57s,24.37us,0.00ns,24.15us,0.95us,22.61us,31.30us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,151305,124712,4.57s,24.23us,0.00ns,24.02us,0.95us,22.49us,32.41us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,912460,5.01s,3.49us,0.00ns,3.26us,301.00ns,2.74us,14.03us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,1000000,5.00s,2.83us,0.00ns,2.94us,243.00ns,2.61us,9.73us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,151305,199165,4.62s,14.94us,0.00ns,15.03us,3.77us,9.44us,32.56us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,151305,32113,4.56s,93.31us,0.00ns,93.39us,452.00ns,92.65us,110.28us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,151305,603310,4.78s,4.81us,0.00ns,4.94us,367.00ns,4.61us,15.12us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,560941,4.83s,5.38us,0.00ns,5.32us,216.00ns,5.01us,10.31us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,151305,235985,4.62s,12.33us,0.00ns,12.68us,1.73us,9.10us,23.40us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,151305,219743,4.62s,12.41us,0.00ns,13.62us,3.00us,8.76us,26.19us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,151305,736321,4.88s,4.02us,0.00ns,4.04us,107.00ns,3.89us,9.70us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,151305,122681,4.57s,24.60us,0.00ns,24.42us,0.98us,22.78us,33.95us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,151305,126028,4.62s,24.10us,0.00ns,23.77us,923.00ns,22.54us,32.60us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,897455,4.99s,3.13us,0.00ns,3.31us,271.00ns,2.74us,9.17us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,998597,5.04s,2.90us,0.00ns,2.97us,213.00ns,2.62us,8.40us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,151305,189554,4.62s,15.96us,0.00ns,15.79us,3.62us,8.87us,26.44us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,151305,32113,4.56s,93.33us,0.00ns,93.39us,419.00ns,92.67us,117.44us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,151305,587571,4.78s,5.05us,0.00ns,5.07us,293.00ns,4.60us,13.45us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,552914,4.78s,5.45us,0.00ns,5.40us,263.00ns,5.04us,23.19us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,151305,200881,4.62s,14.16us,0.00ns,14.90us,3.41us,8.04us,28.40us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,151305,224958,4.62s,12.49us,0.00ns,13.30us,3.26us,7.70us,26.30us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,500100,114477,4.57s,26.17us,0.00ns,26.17us,196.00ns,25.97us,33.27us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,500100,50927,4.56s,60.12us,0.00ns,58.87us,3.47us,54.08us,73.96us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,500100,50942,4.56s,60.10us,0.00ns,58.85us,3.62us,54.08us,73.95us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,404955,4.72s,7.41us,0.00ns,7.38us,160.00ns,7.09us,15.04us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,352234,4.72s,7.41us,0.00ns,8.49us,1.82us,7.07us,20.01us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,500100,13847,4.51s,216.29us,0.00ns,216.63us,3.94us,208.34us,367.47us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,500100,9712,4.51s,308.56us,0.00ns,308.88us,1.15us,306.63us,336.49us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,500100,14972,4.51s,199.39us,0.00ns,200.35us,2.02us,197.61us,242.09us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,500100,278157,4.62s,10.74us,0.00ns,10.75us,100.00ns,10.63us,20.71us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,500100,271603,4.62s,11.09us,0.00ns,11.01us,185.00ns,10.63us,20.37us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,500100,14124,4.51s,209.12us,0.00ns,212.38us,5.93us,208.30us,336.48us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,500100,13855,4.51s,216.32us,0.00ns,216.50us,4.62us,208.29us,336.51us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,500100,4502,4.51s,665.30us,2.00ns,666.47us,6.66us,653.76us,688.64us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,500100,3815,4.51s,785.29us,0.00ns,786.35us,4.09us,780.69us,839.34us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,500100,8238,4.51s,349.42us,0.00ns,364.14us,24.62us,346.02us,414.38us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,1922,4.51s,1.56ms,0.00ns,1.56ms,28.90us,1.50ms,1.80ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,9535,4.51s,298.14us,0.00ns,314.63us,34.01us,271.75us,401.77us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,500100,13952,4.51s,198.41us,0.00ns,215.00us,21.58us,198.26us,294.43us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,500100,18527,4.51s,163.43us,0.00ns,161.89us,4.00us,149.01us,191.99us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,500100,14007,4.51s,206.90us,0.00ns,214.15us,23.32us,206.66us,347.67us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,500100,2781,4.51s,1.08ms,0.00ns,1.08ms,22.65us,1.05ms,1.20ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,500100,10999,4.51s,269.20us,0.00ns,272.74us,6.75us,259.54us,335.57us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1001,1000000,628.04ms,81.00ns,0.00ns,81.00ns,10.00ns,77.00ns,2.40us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,878.84ms,142.00ns,0.00ns,141.00ns,17.00ns,128.00ns,7.46us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,778.82ms,141.00ns,0.00ns,140.00ns,15.00ns,125.00ns,8.38us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,1000000,677.80ms,60.00ns,0.00ns,61.00ns,46.00ns,55.00ns,42.71us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,527.63ms,42.00ns,0.00ns,42.00ns,18.00ns,39.00ns,14.56us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.38s,447.00ns,0.00ns,448.00ns,20.00ns,443.00ns,2.47us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.73s,627.00ns,0.00ns,628.00ns,21.00ns,610.00ns,8.14us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.33s,412.00ns,0.00ns,414.00ns,18.00ns,395.00ns,2.42us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1001,1000000,527.61ms,30.00ns,0.00ns,30.00ns,6.00ns,27.00ns,2.21us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1001,1000000,527.66ms,28.00ns,0.00ns,29.00ns,12.00ns,26.00ns,8.50us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1001,1000000,1.38s,459.00ns,0.00ns,459.00ns,20.00ns,439.00ns,5.68us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1001,1000000,1.38s,458.00ns,0.00ns,459.00ns,19.00ns,453.00ns,2.50us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1001,1000000,3.29s,1.35us,0.00ns,1.35us,28.00ns,1.33us,6.64us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,3.64s,1.54us,0.00ns,1.55us,38.00ns,1.53us,7.72us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,1.98s,728.00ns,0.00ns,750.00ns,52.00ns,711.00ns,12.94us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,991658,5.04s,2.99us,0.00ns,3.00us,73.00ns,2.81us,12.46us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,1.73s,607.00ns,0.00ns,623.00ns,59.00ns,557.00ns,5.29us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.33s,416.00ns,0.00ns,419.00ns,25.00ns,409.00ns,7.29us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.13s,331.00ns,0.00ns,333.00ns,20.00ns,308.00ns,4.98us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.33s,426.00ns,0.00ns,428.00ns,21.00ns,420.00ns,3.82us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,1001,1000000,4.24s,2.17us,0.00ns,2.18us,60.00ns,2.11us,8.66us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,1001,1000000,1.63s,571.00ns,0.00ns,579.00ns,29.00ns,548.00ns,7.39us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,550004,32408,4.56s,95.34us,0.00ns,92.54us,4.27us,84.30us,109.75us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,550004,28798,4.56s,103.83us,0.00ns,104.14us,2.40us,99.28us,115.61us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,550004,28915,4.56s,103.19us,0.00ns,103.72us,2.42us,100.07us,116.96us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,550004,21287,4.51s,139.10us,0.00ns,140.90us,10.02us,127.82us,222.98us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,550004,21101,4.51s,147.86us,0.00ns,142.14us,12.64us,127.87us,257.59us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,550004,37695,4.56s,81.16us,0.00ns,79.55us,2.83us,73.08us,97.99us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,550004,8828,4.51s,339.43us,0.00ns,339.80us,1.33us,337.53us,381.87us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,550004,13592,4.51s,220.31us,0.00ns,220.69us,2.89us,217.30us,268.17us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,550004,36893,4.56s,79.58us,0.00ns,81.28us,4.65us,73.38us,95.58us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,550004,37784,4.56s,76.56us,0.00ns,79.36us,3.63us,75.50us,90.60us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,550004,48677,4.56s,60.32us,0.00ns,61.60us,2.59us,59.96us,74.35us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,550004,49584,4.57s,60.29us,0.00ns,60.47us,912.00ns,59.94us,71.33us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,720057,69574,4.57s,43.03us,0.00ns,43.08us,273.00ns,42.99us,48.84us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,720057,35303,4.56s,86.54us,0.00ns,84.94us,5.13us,77.86us,106.50us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,720057,35217,4.56s,86.54us,0.00ns,85.15us,5.21us,77.86us,105.59us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,79064,4.57s,37.86us,0.00ns,37.91us,259.00ns,37.76us,47.46us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,79785,4.56s,37.49us,0.00ns,37.57us,275.00ns,37.45us,44.30us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,720057,100796,4.56s,29.35us,0.00ns,29.73us,926.00ns,29.31us,41.27us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,720057,6749,4.51s,444.28us,0.00ns,444.53us,1.79us,441.10us,482.93us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,720057,11741,4.51s,255.23us,0.00ns,255.49us,898.00ns,250.89us,265.89us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,11888,4.51s,250.93us,0.00ns,252.34us,2.06us,227.93us,262.36us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,720057,138756,4.61s,21.54us,0.00ns,21.59us,292.00ns,21.51us,49.13us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,720057,139457,4.61s,21.45us,0.00ns,21.48us,174.00ns,21.42us,29.32us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,720057,2849,4.51s,1.04ms,0.00ns,1.05ms,15.71us,1.04ms,1.10ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,720057,618,4.51s,4.86ms,1.00ns,4.86ms,22.34us,4.84ms,5.10ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,720057,618,4.51s,4.86ms,2.00ns,4.86ms,4.11us,4.85ms,4.89ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,4789,4.51s,623.55us,0.00ns,626.53us,19.57us,600.45us,834.82us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,4770,4.51s,626.37us,0.00ns,628.93us,19.07us,600.10us,834.72us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,720057,6305,4.51s,467.22us,0.00ns,475.83us,13.63us,462.69us,537.50us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,720057,6753,4.51s,443.89us,0.00ns,444.28us,1.91us,440.83us,491.07us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,720057,2220,4.51s,1.36ms,2.00ns,1.35ms,13.45us,1.32ms,1.40ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,2224,4.51s,1.35ms,1.00ns,1.35ms,14.54us,1.31ms,1.38ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,720057,6498,4.51s,462.67us,0.00ns,461.71us,5.64us,439.47us,485.44us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,720057,6567,4.51s,462.79us,0.00ns,456.82us,10.33us,439.12us,476.41us\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,,198,4.56s,14.93ms,0.00ns,15.19ms,573.46us,14.66ms,17.39ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,,189,4.56s,15.87ms,0.00ns,15.88ms,99.25us,15.71ms,16.19ms\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1000,27455,4.56s,110.13us,0.00ns,109.24us,3.27us,99.63us,122.27us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1000,36755,4.56s,81.53us,0.00ns,81.58us,1.12us,77.87us,97.47us\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,806771,191,4.56s,13.58ms,0.00ns,15.74ms,2.68ms,13.54ms,19.11ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,806771,154,4.56s,19.29ms,393.00ns,19.56ms,467.64us,19.19ms,20.36ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,19877,4.51s,149.90us,0.00ns,150.90us,4.86us,142.89us,175.33us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,22656,4.51s,133.07us,0.00ns,132.38us,3.70us,125.53us,146.70us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,23059,4.51s,130.58us,0.00ns,130.07us,3.72us,123.74us,146.45us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,78747,4.56s,37.97us,0.00ns,38.06us,514.00ns,36.83us,46.24us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,142255,4.62s,21.81us,0.00ns,21.05us,1.70us,17.95us,40.13us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,12206,4.51s,245.35us,2.00ns,245.76us,7.04us,224.18us,303.06us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7748,4.51s,386.89us,0.00ns,387.19us,1.59us,385.06us,434.54us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,11956,4.51s,252.04us,0.00ns,250.90us,3.57us,242.22us,301.25us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,9383,4.51s,319.41us,0.00ns,319.70us,8.39us,294.33us,351.93us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,9660,4.51s,310.50us,2.00ns,310.53us,9.01us,287.05us,334.05us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,11306,4.51s,264.47us,0.00ns,265.32us,2.74us,258.69us,288.02us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,16556,4.51s,181.12us,0.00ns,181.17us,3.46us,173.63us,199.80us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,17605,4.51s,170.13us,0.00ns,170.38us,4.16us,160.22us,199.45us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,19112,4.51s,156.25us,0.00ns,156.94us,3.55us,152.57us,193.78us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,54731,4.56s,52.97us,0.00ns,54.78us,4.13us,49.03us,79.97us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,9923,4.51s,302.78us,0.00ns,302.30us,7.81us,284.35us,358.89us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7189,4.51s,416.53us,0.00ns,417.28us,2.10us,413.17us,456.98us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,10650,4.51s,281.34us,1.00ns,281.66us,8.21us,268.51us,323.96us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,7752,4.51s,387.51us,2.00ns,386.99us,6.96us,364.09us,406.52us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,7961,4.51s,377.03us,0.00ns,376.83us,7.27us,349.32us,430.60us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,7596,4.51s,402.40us,0.00ns,394.93us,10.28us,379.85us,413.49us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,1957,4.51s,1.53ms,0.00ns,1.53ms,9.24us,1.51ms,1.63ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2969,4.51s,0.99ms,0.00ns,1.01ms,44.61us,0.97ms,1.12ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,2506,4.51s,1.20ms,3.00ns,1.20ms,5.73us,1.18ms,1.26ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,6329,4.51s,462.82us,0.00ns,473.99us,29.84us,460.59us,575.34us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,3155,4.51s,947.44us,0.00ns,0.95ms,16.28us,924.84us,1.04ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,2823,4.51s,1.06ms,0.00ns,1.06ms,17.40us,1.04ms,1.20ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,3532,4.51s,849.39us,2.00ns,849.47us,18.66us,787.33us,1.00ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,2000,4.51s,1.48ms,8.00ns,1.50ms,50.34us,1.44ms,1.71ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,2833,4.51s,1.05ms,0.00ns,1.06ms,22.98us,1.02ms,1.16ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,14193,4.52s,211.23us,0.00ns,211.35us,3.47us,203.61us,232.00us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,18076,4.52s,165.69us,0.00ns,165.94us,3.87us,158.82us,178.22us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,18630,4.52s,160.47us,0.00ns,161.00us,3.90us,154.32us,177.24us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,57472,4.57s,52.33us,0.00ns,52.16us,0.97us,50.17us,64.04us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,171221,4.62s,17.39us,0.00ns,17.49us,386.00ns,16.71us,25.81us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,6387,4.51s,469.35us,0.00ns,469.73us,9.20us,456.26us,520.70us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7780,4.51s,385.13us,0.00ns,385.60us,1.73us,383.37us,413.35us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,11920,4.51s,251.99us,0.00ns,251.66us,4.19us,243.27us,300.55us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613402,5835,4.51s,514.14us,0.00ns,514.11us,4.29us,501.81us,534.18us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613402,6070,4.51s,496.05us,1.00ns,494.27us,5.25us,482.55us,518.28us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,10648,4.51s,281.50us,0.00ns,281.71us,1.43us,278.37us,296.16us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,9020,4.51s,332.67us,0.00ns,332.57us,4.27us,321.46us,351.12us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,9282,4.51s,323.19us,1.00ns,323.19us,4.49us,310.65us,344.22us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,25520,4.51s,118.38us,1.00ns,117.53us,2.84us,110.07us,128.39us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,69636,4.56s,42.80us,0.00ns,43.05us,1.85us,40.28us,56.31us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,5587,4.51s,533.61us,0.00ns,536.96us,13.20us,521.79us,604.05us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7348,4.51s,407.56us,0.00ns,408.27us,2.08us,405.21us,438.83us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,11294,4.51s,264.73us,0.00ns,265.60us,4.53us,256.38us,300.51us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613402,4977,4.51s,601.02us,0.00ns,602.79us,7.62us,592.34us,640.36us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613402,5344,4.51s,560.21us,1.00ns,561.38us,5.07us,552.80us,589.49us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,13825,4.51s,224.00us,0.00ns,216.97us,12.14us,194.63us,238.22us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,3470,4.51s,864.44us,10.00ns,864.62us,9.60us,839.48us,944.33us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,4709,4.51s,628.26us,0.00ns,637.06us,21.89us,602.08us,705.63us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,5052,4.51s,592.30us,0.00ns,593.80us,4.08us,589.26us,611.10us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,12430,4.51s,233.82us,0.00ns,241.33us,16.11us,232.16us,305.60us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,4791,4.51s,621.46us,0.00ns,626.18us,15.17us,610.95us,695.77us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,4032,4.51s,742.70us,1.00ns,744.10us,7.56us,728.88us,845.73us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,5177,4.51s,559.90us,0.00ns,579.53us,36.57us,539.75us,691.17us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613402,3499,4.51s,847.07us,0.00ns,857.37us,28.13us,818.66us,0.95ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613402,4645,4.51s,644.70us,0.00ns,645.94us,9.18us,632.22us,707.43us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,21567,4.51s,137.10us,0.00ns,139.07us,3.05us,135.70us,153.91us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29470,4.56s,102.00us,0.00ns,101.77us,4.37us,94.39us,118.72us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,30584,4.56s,98.95us,1.00ns,98.05us,3.99us,91.79us,114.35us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,75017,4.56s,39.82us,0.00ns,39.96us,420.00ns,39.12us,45.70us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,168646,4.57s,17.67us,0.00ns,17.76us,401.00ns,17.01us,23.98us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,20791,4.56s,144.53us,0.00ns,144.27us,6.77us,131.25us,185.24us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7511,4.51s,399.09us,0.00ns,399.38us,1.31us,397.34us,449.47us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,11906,4.51s,252.58us,0.00ns,251.94us,3.93us,243.49us,288.79us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613427,20820,4.56s,143.90us,0.00ns,144.06us,2.58us,138.13us,155.45us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613427,21653,4.56s,138.32us,0.00ns,138.52us,2.49us,132.54us,166.97us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,13710,4.51s,217.77us,1.00ns,218.80us,3.30us,213.11us,238.66us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,17442,4.51s,172.36us,0.00ns,171.97us,3.83us,164.46us,186.78us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,18245,4.51s,164.48us,0.00ns,164.40us,3.75us,157.63us,187.72us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,33550,4.56s,89.15us,0.00ns,89.38us,2.24us,85.42us,111.28us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,76877,4.56s,40.19us,0.00ns,38.99us,2.22us,35.49us,60.46us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,13033,4.51s,228.82us,0.00ns,230.16us,7.38us,216.25us,280.35us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7402,4.51s,404.58us,0.00ns,405.29us,2.02us,402.54us,454.11us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,11123,4.51s,269.59us,0.00ns,269.68us,5.66us,259.20us,346.96us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613427,10915,4.51s,275.47us,0.00ns,274.84us,5.07us,241.47us,291.15us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613427,11379,4.51s,263.65us,0.00ns,263.61us,4.56us,221.64us,283.12us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,29323,4.56s,103.53us,0.00ns,102.28us,3.80us,94.15us,124.79us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,7679,4.51s,390.66us,0.00ns,390.69us,3.99us,378.59us,416.60us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,9297,4.51s,323.41us,0.00ns,322.66us,5.83us,302.53us,342.12us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,11379,4.51s,261.97us,0.00ns,263.61us,4.93us,260.43us,299.11us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,23256,4.51s,126.73us,0.00ns,128.97us,4.87us,125.65us,161.17us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,6078,4.51s,484.04us,1.00ns,493.62us,20.98us,476.10us,602.16us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,5925,4.51s,505.44us,0.00ns,506.34us,3.62us,499.47us,556.18us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,8406,4.51s,356.63us,1.00ns,356.90us,6.03us,346.94us,432.40us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613427,5654,4.51s,529.03us,1.00ns,530.62us,9.01us,512.25us,566.82us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613427,6679,4.51s,448.50us,0.00ns,449.18us,4.54us,441.05us,487.61us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,76898,4.56s,38.04us,0.00ns,38.98us,3.30us,33.95us,52.59us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41008,4.56s,74.17us,0.00ns,73.12us,4.05us,66.79us,90.88us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,40988,4.56s,74.22us,0.00ns,73.16us,3.99us,66.84us,90.58us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,330440,4.67s,9.09us,0.00ns,9.05us,161.00ns,8.72us,15.12us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,330922,4.67s,9.02us,0.00ns,9.04us,162.00ns,8.66us,15.56us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,9514,4.51s,313.22us,0.00ns,315.31us,12.01us,289.41us,377.52us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7944,4.51s,377.53us,0.00ns,377.65us,0.98us,376.14us,411.29us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12195,4.51s,244.57us,0.00ns,245.98us,3.53us,242.35us,296.43us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,219494,4.62s,13.57us,0.00ns,13.64us,244.00ns,13.13us,17.54us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,221036,4.62s,13.54us,0.00ns,13.54us,167.00ns,13.12us,22.45us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,9255,4.51s,323.66us,0.00ns,324.14us,8.36us,297.53us,349.94us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,9346,4.51s,321.00us,2.00ns,320.97us,8.60us,293.90us,345.71us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,61825,4.56s,50.08us,0.00ns,48.49us,3.40us,40.69us,59.68us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,32561,4.56s,92.53us,0.00ns,92.10us,3.91us,85.41us,108.78us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,32300,4.56s,92.99us,0.00ns,92.85us,3.85us,85.80us,108.28us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,248728,4.62s,11.33us,0.00ns,12.03us,1.46us,10.85us,19.06us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,235089,4.62s,12.65us,0.00ns,12.73us,440.00ns,12.16us,33.48us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,15796,4.51s,189.66us,1.00ns,189.89us,6.23us,163.48us,240.19us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7936,4.51s,377.60us,0.00ns,378.02us,1.53us,377.02us,421.92us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12138,4.51s,246.00us,0.00ns,247.14us,3.41us,242.40us,297.48us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,204683,4.62s,14.74us,0.00ns,14.62us,319.00ns,13.79us,21.07us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,206564,4.62s,14.35us,0.00ns,14.49us,338.00ns,13.82us,22.15us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,13855,4.51s,216.28us,0.00ns,216.50us,8.95us,179.83us,245.13us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,14024,4.51s,213.25us,1.00ns,213.88us,8.70us,179.42us,242.90us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,57837,4.56s,51.72us,0.00ns,51.83us,447.00ns,51.21us,58.65us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41156,4.56s,74.24us,0.00ns,72.86us,4.25us,66.86us,91.54us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,40928,4.56s,74.33us,0.00ns,73.26us,3.92us,66.94us,89.18us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,256910,4.67s,13.76us,0.00ns,11.65us,2.53us,8.68us,19.39us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,280644,4.67s,9.10us,0.00ns,10.66us,2.38us,8.67us,22.07us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,20106,4.52s,148.73us,1.00ns,149.18us,5.22us,132.05us,193.68us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7924,4.51s,378.11us,0.00ns,378.57us,1.44us,377.38us,413.96us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12198,4.51s,244.54us,0.00ns,245.93us,2.72us,242.33us,294.63us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,226804,4.63s,13.18us,0.00ns,13.20us,108.00ns,13.04us,24.37us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,220520,4.62s,13.64us,0.00ns,13.57us,229.00ns,13.06us,19.78us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,16053,4.51s,185.10us,0.00ns,186.85us,8.13us,168.06us,208.93us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,16302,4.52s,183.09us,1.00ns,184.00us,7.91us,142.26us,209.12us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,12001,4.51s,249.68us,0.00ns,249.96us,1.05us,249.28us,283.50us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,20854,4.52s,143.10us,0.00ns,143.82us,4.03us,137.12us,158.40us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,20961,4.52s,142.43us,0.00ns,143.09us,3.98us,136.36us,161.17us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,315936,4.67s,9.46us,0.00ns,9.46us,222.00ns,8.88us,14.77us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,331538,4.68s,9.00us,0.00ns,9.02us,187.00ns,8.67us,27.62us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,6560,4.51s,457.26us,2.00ns,457.28us,7.37us,433.70us,490.14us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7849,4.51s,381.59us,0.00ns,382.21us,3.10us,380.13us,431.65us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12201,4.51s,244.51us,0.00ns,245.85us,3.00us,242.30us,294.68us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,225940,4.63s,13.19us,0.00ns,13.25us,191.00ns,13.05us,34.82us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,226497,4.63s,13.18us,0.00ns,13.21us,142.00ns,13.04us,18.77us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,6979,4.51s,429.95us,0.00ns,429.83us,7.63us,391.73us,474.32us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,6962,4.51s,430.95us,1.00ns,430.93us,7.94us,401.74us,484.89us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.23ms,23.00ns,0.00ns,23.00ns,6.00ns,20.00ns,2.41us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.72ms,29.00ns,0.00ns,29.00ns,6.00ns,27.00ns,2.33us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.69ms,23.00ns,0.00ns,24.00ns,7.00ns,21.00ns,2.70us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.67ms,27.00ns,0.00ns,27.00ns,6.00ns,23.00ns,2.52us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.54ms,23.00ns,0.00ns,23.00ns,6.00ns,21.00ns,2.82us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,477.44ms,13.00ns,0.00ns,13.00ns,6.00ns,10.00ns,3.19us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.67ms,26.00ns,0.00ns,26.00ns,23.00ns,23.00ns,19.14us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.62ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.04us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.34ms,17.00ns,0.00ns,17.00ns,5.00ns,16.00ns,2.28us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,477.14ms,12.00ns,0.00ns,12.00ns,20.00ns,10.00ns,19.44us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,28,1000000,527.63ms,29.00ns,0.00ns,29.00ns,11.00ns,27.00ns,9.46us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,28,1000000,527.49ms,29.00ns,0.00ns,29.00ns,6.00ns,27.00ns,2.28us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,577.40ms,22.00ns,0.00ns,23.00ns,7.00ns,21.00ns,3.10us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.93ms,28.00ns,0.00ns,28.00ns,19.00ns,26.00ns,17.96us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.51ms,24.00ns,0.00ns,24.00ns,17.00ns,21.00ns,16.74us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.58ms,26.00ns,0.00ns,26.00ns,6.00ns,23.00ns,2.32us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.30ms,24.00ns,0.00ns,24.00ns,12.00ns,21.00ns,10.21us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,527.68ms,13.00ns,0.00ns,13.00ns,5.00ns,11.00ns,2.50us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.55ms,26.00ns,0.00ns,26.00ns,6.00ns,23.00ns,2.90us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.46ms,23.00ns,0.00ns,24.00ns,6.00ns,21.00ns,2.87us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.10ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,1.84us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,477.12ms,12.00ns,0.00ns,13.00ns,3.00ns,10.00ns,1.94us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,28,1000000,527.80ms,28.00ns,0.00ns,28.00ns,6.00ns,25.00ns,2.65us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,28,1000000,527.82ms,28.00ns,0.00ns,28.00ns,7.00ns,26.00ns,3.47us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.62ms,22.00ns,0.00ns,22.00ns,5.00ns,19.00ns,2.67us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.62ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,1.99us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.74ms,23.00ns,0.00ns,23.00ns,6.00ns,21.00ns,3.01us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.18ms,26.00ns,0.00ns,26.00ns,6.00ns,24.00ns,2.50us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.62ms,23.00ns,0.00ns,23.00ns,6.00ns,21.00ns,2.24us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,477.56ms,13.00ns,0.00ns,13.00ns,3.00ns,10.00ns,1.77us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.25ms,27.00ns,0.00ns,27.00ns,5.00ns,24.00ns,2.72us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.09ms,24.00ns,0.00ns,24.00ns,26.00ns,21.00ns,18.32us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.61ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.64us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,527.30ms,12.00ns,0.00ns,12.00ns,4.00ns,11.00ns,2.53us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,28,1000000,527.67ms,24.00ns,0.00ns,24.00ns,6.00ns,21.00ns,2.70us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,28,1000000,577.06ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.30us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,533.10ms,24.00ns,0.00ns,24.00ns,6.00ns,20.00ns,2.67us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.59ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.49us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.58ms,23.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.59us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.49ms,27.00ns,0.00ns,27.00ns,5.00ns,24.00ns,2.19us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.77ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.66us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,527.60ms,20.00ns,0.00ns,20.00ns,4.00ns,17.00ns,2.77us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.05ms,28.00ns,0.00ns,28.00ns,19.00ns,25.00ns,15.23us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,538.41ms,24.00ns,0.00ns,24.00ns,15.00ns,21.00ns,13.66us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,577.08ms,14.00ns,0.00ns,14.00ns,47.00ns,12.00ns,46.82us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,477.73ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.61us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,28,1000000,527.57ms,25.00ns,0.00ns,25.00ns,7.00ns,22.00ns,2.78us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,28,1000000,577.41ms,25.00ns,0.00ns,25.00ns,5.00ns,22.00ns,2.23us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,27184,4.56s,109.62us,0.00ns,110.33us,2.01us,108.36us,136.11us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13545,4.51s,221.78us,0.00ns,221.47us,5.15us,209.59us,242.02us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13290,4.51s,225.35us,0.00ns,225.71us,4.35us,209.70us,243.20us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,331336,4.67s,8.93us,0.00ns,9.02us,218.00ns,8.74us,15.90us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,248929,4.67s,13.85us,0.00ns,12.02us,2.52us,8.67us,20.36us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,13129,4.51s,226.02us,0.00ns,228.48us,6.01us,208.38us,263.62us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7920,4.51s,378.45us,0.00ns,378.80us,1.54us,375.80us,411.67us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,69810,4.56s,42.45us,0.00ns,42.94us,1.50us,41.60us,62.25us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,67609,4.56s,44.17us,0.00ns,44.34us,789.00ns,43.48us,55.28us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613402,13153,4.51s,227.22us,0.00ns,228.06us,2.77us,217.43us,247.94us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613402,13167,4.51s,228.66us,0.00ns,227.81us,3.55us,217.07us,241.56us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,527.61ms,26.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.96us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,527.64ms,27.00ns,0.00ns,27.00ns,25.00ns,24.00ns,18.62us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,527.49ms,25.00ns,0.00ns,25.00ns,5.00ns,22.00ns,2.09us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,577.26ms,35.00ns,0.00ns,35.00ns,6.00ns,31.00ns,2.21us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,527.34ms,24.00ns,0.00ns,24.00ns,4.00ns,22.00ns,2.22us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,477.80ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.74us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,527.18ms,32.00ns,0.00ns,32.00ns,6.00ns,29.00ns,2.06us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,477.59ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.71us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,477.70ms,13.00ns,0.00ns,13.00ns,20.00ns,11.00ns,16.11us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,42,1000000,527.22ms,45.00ns,0.00ns,46.00ns,7.00ns,43.00ns,2.68us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,42,1000000,577.66ms,45.00ns,0.00ns,45.00ns,7.00ns,42.00ns,2.62us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,105498,4.57s,27.64us,0.00ns,28.40us,1.87us,26.89us,58.77us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,34617,4.56s,87.71us,0.00ns,86.63us,4.05us,80.53us,104.14us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,34664,4.56s,87.65us,0.00ns,86.51us,3.81us,80.42us,101.99us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,311050,4.67s,9.61us,0.00ns,9.61us,115.00ns,9.42us,15.69us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,240232,4.62s,14.39us,0.00ns,12.46us,2.41us,9.47us,19.83us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,39065,4.56s,76.37us,0.00ns,76.76us,2.29us,73.22us,104.71us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7919,4.51s,378.45us,0.00ns,378.81us,1.61us,375.79us,408.79us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,12202,4.51s,244.97us,0.00ns,245.84us,1.84us,242.41us,277.75us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,217235,4.62s,13.76us,0.00ns,13.77us,121.00ns,13.57us,17.87us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,219881,4.62s,13.59us,0.00ns,13.61us,140.00ns,13.43us,25.36us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613427,29851,4.56s,100.72us,0.00ns,100.47us,4.68us,90.23us,124.23us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613427,31619,4.51s,94.69us,0.00ns,94.85us,3.14us,89.65us,117.68us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,527.46ms,24.00ns,0.00ns,24.00ns,6.00ns,21.00ns,2.60us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,527.66ms,28.00ns,0.00ns,28.00ns,30.00ns,26.00ns,20.32us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,527.56ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,3.28us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.89ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,2.67us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,527.77ms,23.00ns,0.00ns,24.00ns,6.00ns,21.00ns,3.16us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,477.36ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,2.51us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,527.57ms,27.00ns,0.00ns,27.00ns,5.00ns,24.00ns,2.17us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,477.47ms,25.00ns,0.00ns,25.00ns,6.00ns,22.00ns,3.35us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,527.42ms,17.00ns,0.00ns,17.00ns,5.00ns,15.00ns,2.60us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,527.09ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.39us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,31,1000000,527.28ms,34.00ns,0.00ns,34.00ns,7.00ns,31.00ns,2.78us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,31,1000000,527.91ms,34.00ns,0.00ns,34.00ns,11.00ns,32.00ns,8.86us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,88218,4.57s,33.48us,0.00ns,33.97us,1.47us,30.47us,54.61us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,40132,4.56s,75.82us,0.00ns,74.72us,4.32us,68.45us,92.06us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,40225,4.57s,75.89us,0.00ns,74.54us,4.09us,68.55us,89.97us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,272017,4.63s,9.15us,0.00ns,11.00us,2.45us,8.75us,20.57us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,297758,4.63s,9.07us,0.00ns,10.04us,2.02us,8.68us,22.70us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,15450,4.51s,193.64us,1.00ns,194.14us,5.19us,179.81us,233.20us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7909,4.51s,379.38us,0.00ns,379.31us,1.83us,375.61us,425.31us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12179,4.51s,244.54us,0.00ns,246.31us,4.97us,242.38us,294.78us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,217223,4.62s,13.86us,0.00ns,13.78us,192.00ns,13.41us,20.40us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,213468,4.62s,14.06us,0.00ns,14.02us,312.00ns,13.26us,18.35us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,14853,4.52s,202.12us,0.00ns,201.95us,6.49us,184.80us,225.25us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,14923,4.52s,200.39us,0.00ns,201.01us,6.16us,183.76us,227.52us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,60910,4.57s,48.33us,0.00ns,49.22us,2.27us,46.76us,62.52us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,39927,4.52s,75.91us,0.00ns,75.10us,4.12us,68.52us,92.74us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,40080,4.56s,75.90us,0.00ns,74.82us,4.15us,68.54us,93.26us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,309923,4.67s,9.63us,0.00ns,9.65us,115.00ns,9.44us,14.76us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,243233,4.62s,14.29us,0.00ns,12.30us,2.40us,9.33us,18.68us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,14819,4.51s,203.80us,0.00ns,202.42us,8.04us,172.53us,236.76us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7931,4.51s,377.81us,0.00ns,378.25us,1.44us,376.33us,405.86us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12178,4.51s,244.80us,1.00ns,246.32us,4.85us,242.43us,295.20us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,223615,4.62s,13.27us,0.00ns,13.38us,208.00ns,13.11us,37.70us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,223285,4.62s,13.47us,0.00ns,13.40us,200.00ns,13.10us,17.93us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,13160,4.51s,228.63us,4.00ns,227.94us,8.10us,199.31us,255.64us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,13270,4.51s,226.24us,0.00ns,226.05us,11.45us,198.36us,258.18us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,160381,4.62s,16.19us,0.00ns,18.67us,3.38us,15.50us,26.70us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,32373,4.56s,93.19us,0.00ns,92.64us,3.75us,86.23us,110.71us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,32447,4.56s,93.39us,0.00ns,92.43us,3.92us,86.41us,109.68us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,287778,4.67s,10.38us,0.00ns,10.39us,118.00ns,10.23us,15.54us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,287421,4.62s,10.39us,0.00ns,10.40us,105.00ns,10.17us,15.92us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,20464,4.51s,147.77us,0.00ns,146.57us,10.60us,106.86us,174.43us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7922,4.51s,378.36us,0.00ns,378.67us,1.52us,375.75us,413.92us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,145649,4.62s,20.53us,0.00ns,20.57us,1.26us,19.40us,28.64us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,140579,4.62s,20.85us,0.00ns,21.31us,906.00ns,20.57us,30.06us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,21601,4.51s,137.40us,0.00ns,138.85us,13.35us,106.97us,173.26us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,21581,4.51s,134.80us,0.00ns,138.98us,12.72us,108.58us,174.80us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,161246,4.62s,18.55us,0.00ns,18.57us,147.00ns,18.47us,24.02us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,36577,4.56s,82.54us,0.00ns,81.98us,4.07us,75.05us,99.94us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,36879,4.56s,82.44us,0.00ns,81.31us,3.90us,75.09us,98.63us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,211480,4.62s,14.15us,0.00ns,14.15us,137.00ns,13.36us,20.51us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,224705,4.67s,13.16us,0.00ns,13.32us,338.00ns,12.27us,21.11us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,41062,4.56s,74.31us,1.00ns,73.02us,8.92us,53.84us,103.90us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7944,4.51s,377.48us,0.00ns,377.66us,1.63us,375.70us,412.69us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,132699,4.57s,20.18us,0.00ns,22.57us,3.38us,19.12us,33.26us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,142782,4.62s,20.62us,0.00ns,20.98us,1.13us,20.36us,29.48us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,52108,4.56s,57.22us,0.00ns,57.54us,1.41us,54.27us,77.04us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,50985,4.56s,57.02us,0.00ns,58.80us,5.23us,54.91us,82.84us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,100864,4.57s,29.66us,0.00ns,29.71us,223.00ns,29.61us,36.25us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,40286,4.57s,75.30us,0.00ns,74.43us,4.01us,67.95us,99.85us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,40576,4.57s,75.29us,0.00ns,73.90us,4.29us,67.95us,92.83us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,139402,4.62s,21.46us,0.00ns,21.48us,173.00ns,21.28us,39.89us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,141599,4.57s,21.12us,0.00ns,21.15us,196.00ns,20.46us,27.80us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,51049,4.57s,58.86us,0.00ns,58.73us,2.29us,51.28us,72.63us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7915,4.51s,377.38us,0.00ns,379.03us,7.23us,375.46us,425.79us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,163895,4.62s,17.94us,0.00ns,18.27us,1.49us,17.49us,37.63us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,155329,4.61s,18.89us,0.00ns,19.28us,1.24us,18.70us,38.67us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613345,56218,4.56s,53.26us,0.00ns,53.33us,611.00ns,51.54us,61.97us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613345,56959,4.56s,52.58us,0.00ns,52.63us,506.00ns,50.86us,59.97us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.17ms,31.00ns,0.00ns,31.00ns,5.00ns,29.00ns,1.80us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,577.74ms,38.00ns,0.00ns,39.00ns,6.00ns,36.00ns,1.90us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.63ms,29.00ns,0.00ns,29.00ns,107.00ns,26.00ns,103.94us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,577.80ms,28.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.14us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.69ms,26.00ns,0.00ns,26.00ns,6.00ns,24.00ns,3.54us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,528.14ms,23.00ns,0.00ns,23.00ns,6.00ns,20.00ns,2.25us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.60ms,25.00ns,0.00ns,25.00ns,6.00ns,22.00ns,2.90us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.51ms,24.00ns,0.00ns,24.00ns,8.00ns,21.00ns,5.29us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.61ms,19.00ns,0.00ns,19.00ns,14.00ns,17.00ns,13.40us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,476.90ms,15.00ns,0.00ns,15.00ns,4.00ns,12.00ns,1.98us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,28,1000000,627.92ms,68.00ns,0.00ns,68.00ns,7.00ns,64.00ns,1.77us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,28,1000000,527.58ms,44.00ns,0.00ns,45.00ns,25.00ns,42.00ns,12.82us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.52ms,34.00ns,0.00ns,35.00ns,7.00ns,32.00ns,2.47us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.89ms,38.00ns,0.00ns,39.00ns,6.00ns,36.00ns,1.98us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.55ms,30.00ns,0.00ns,30.00ns,5.00ns,27.00ns,2.10us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.58ms,23.00ns,0.00ns,24.00ns,3.00ns,21.00ns,1.81us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.35ms,29.00ns,0.00ns,29.00ns,7.00ns,27.00ns,3.15us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,527.16ms,16.00ns,0.00ns,17.00ns,6.00ns,14.00ns,2.35us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.51ms,23.00ns,0.00ns,24.00ns,8.00ns,20.00ns,6.58us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.23ms,24.00ns,0.00ns,24.00ns,6.00ns,21.00ns,2.57us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,477.31ms,17.00ns,0.00ns,17.00ns,4.00ns,15.00ns,2.05us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,477.19ms,16.00ns,0.00ns,16.00ns,12.00ns,14.00ns,10.90us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,28,1000000,577.80ms,44.00ns,0.00ns,45.00ns,16.00ns,42.00ns,13.77us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,28,1000000,527.66ms,31.00ns,0.00ns,31.00ns,14.00ns,29.00ns,12.47us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,34412,4.56s,87.18us,1.00ns,87.14us,1.86us,82.34us,105.27us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13625,4.51s,220.47us,0.00ns,220.16us,4.84us,208.30us,236.91us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13659,4.51s,219.96us,0.00ns,219.61us,5.13us,207.17us,238.85us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,321894,4.67s,9.32us,0.00ns,9.29us,182.00ns,8.90us,17.60us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,324605,4.67s,9.22us,0.00ns,9.21us,185.00ns,8.84us,14.97us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,16755,4.51s,178.78us,0.00ns,179.02us,1.15us,177.06us,217.51us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7923,4.51s,378.42us,0.00ns,378.64us,1.32us,375.82us,414.34us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,83932,4.56s,35.95us,0.00ns,35.71us,1.60us,33.02us,58.59us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,82431,4.56s,35.72us,0.00ns,36.36us,1.61us,34.80us,52.11us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613402,16014,4.51s,185.67us,1.00ns,187.31us,3.64us,183.53us,219.45us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613402,16194,4.51s,184.92us,0.00ns,185.22us,1.02us,183.30us,198.78us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,20292,4.51s,147.81us,0.00ns,147.81us,4.30us,141.22us,164.63us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13536,4.51s,221.94us,2.00ns,221.61us,4.85us,207.74us,243.52us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13507,4.51s,222.49us,0.00ns,222.08us,5.27us,210.10us,247.49us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,248377,4.62s,14.25us,0.00ns,12.05us,2.42us,9.38us,34.33us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,271565,4.62s,9.48us,0.00ns,11.02us,2.25us,9.32us,35.48us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,10949,4.51s,272.71us,0.00ns,273.97us,2.97us,269.92us,324.78us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7917,4.51s,378.55us,0.00ns,378.92us,1.64us,375.76us,425.05us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,12196,4.51s,244.62us,0.00ns,245.95us,3.08us,242.38us,295.09us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,177624,4.62s,16.53us,0.00ns,16.86us,1.37us,14.19us,23.55us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,161007,4.57s,18.35us,0.00ns,18.60us,2.07us,14.12us,46.86us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613402,10103,4.51s,295.24us,0.00ns,296.92us,6.04us,288.39us,316.74us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613402,10270,4.51s,291.62us,1.00ns,292.09us,2.77us,287.58us,311.45us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,577.72ms,39.00ns,0.00ns,39.00ns,21.00ns,36.00ns,17.46us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,527.58ms,32.00ns,0.00ns,32.00ns,24.00ns,29.00ns,16.65us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,577.48ms,29.00ns,0.00ns,30.00ns,24.00ns,26.00ns,19.96us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,542.80ms,38.00ns,0.00ns,38.00ns,6.00ns,34.00ns,2.15us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,627.41ms,29.00ns,0.00ns,29.00ns,8.00ns,26.00ns,3.98us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,527.75ms,29.00ns,0.00ns,29.00ns,20.00ns,26.00ns,18.74us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,527.54ms,32.00ns,0.00ns,32.00ns,6.00ns,29.00ns,2.17us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,477.47ms,17.00ns,0.00ns,18.00ns,5.00ns,16.00ns,2.28us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,476.84ms,16.00ns,0.00ns,16.00ns,24.00ns,14.00ns,20.14us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,42,1000000,678.17ms,97.00ns,0.00ns,97.00ns,16.00ns,93.00ns,13.41us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,42,1000000,577.37ms,61.00ns,0.00ns,61.00ns,7.00ns,58.00ns,2.22us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,577.93ms,37.00ns,0.00ns,37.00ns,7.00ns,35.00ns,2.05us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,577.66ms,38.00ns,0.00ns,38.00ns,8.00ns,36.00ns,3.13us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,527.49ms,29.00ns,0.00ns,30.00ns,7.00ns,26.00ns,2.63us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,527.62ms,31.00ns,0.00ns,32.00ns,7.00ns,29.00ns,2.70us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,577.68ms,35.00ns,0.00ns,35.00ns,6.00ns,32.00ns,2.31us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,527.32ms,19.00ns,0.00ns,19.00ns,6.00ns,16.00ns,3.69us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,527.10ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.08us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,42,1000000,526.96ms,30.00ns,0.00ns,30.00ns,6.00ns,27.00ns,2.01us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,543.49ms,19.00ns,0.00ns,19.00ns,4.00ns,17.00ns,2.44us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,527.67ms,15.00ns,0.00ns,15.00ns,16.00ns,13.00ns,15.20us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,42,1000000,577.35ms,58.00ns,0.00ns,58.00ns,8.00ns,55.00ns,3.41us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,42,1000000,527.39ms,41.00ns,0.00ns,41.00ns,7.00ns,37.00ns,2.48us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,140166,4.57s,21.44us,0.00ns,21.37us,1.25us,18.27us,44.18us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29166,4.56s,103.61us,0.00ns,102.82us,4.21us,97.09us,120.24us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,29099,4.56s,103.91us,0.00ns,103.07us,3.80us,97.07us,127.48us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,210059,4.62s,15.66us,0.00ns,14.24us,2.20us,10.66us,35.32us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,234155,4.67s,10.63us,0.00ns,12.78us,2.44us,10.28us,34.78us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,28534,4.56s,104.67us,0.00ns,105.11us,3.59us,98.26us,143.85us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7922,4.51s,378.46us,0.00ns,378.69us,1.39us,375.81us,416.03us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,125439,4.57s,24.98us,0.00ns,23.88us,3.28us,18.69us,34.12us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,135351,4.57s,21.08us,0.00ns,22.13us,2.37us,19.91us,30.57us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613427,27756,4.56s,107.39us,0.00ns,108.05us,4.63us,101.06us,129.22us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613427,26370,4.56s,113.75us,0.00ns,113.73us,4.22us,101.36us,132.95us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,58747,4.56s,53.09us,0.00ns,51.03us,2.91us,46.63us,61.07us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,28985,4.56s,104.29us,0.00ns,103.47us,3.50us,97.51us,122.04us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,29084,4.56s,104.26us,0.00ns,103.12us,3.73us,97.67us,138.48us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,294980,4.67s,10.14us,0.00ns,10.14us,78.00ns,9.98us,14.94us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,243929,4.62s,12.26us,0.00ns,12.27us,91.00ns,12.08us,17.46us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,20355,4.51s,147.12us,0.00ns,147.36us,5.34us,132.82us,182.13us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7935,4.51s,377.63us,0.00ns,378.04us,1.46us,376.29us,411.01us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,12165,4.51s,245.75us,0.00ns,246.59us,4.51us,242.42us,296.79us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,209614,4.62s,14.11us,0.00ns,14.28us,329.00ns,13.71us,18.32us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,209527,4.62s,14.19us,0.00ns,14.28us,267.00ns,13.84us,20.80us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,613427,18324,4.51s,162.31us,0.00ns,163.69us,5.29us,154.76us,190.35us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,613427,18177,4.51s,163.53us,0.00ns,165.01us,4.90us,145.97us,185.96us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,527.80ms,34.00ns,0.00ns,34.00ns,10.00ns,31.00ns,5.41us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,577.30ms,33.00ns,0.00ns,33.00ns,6.00ns,30.00ns,2.40us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,527.52ms,28.00ns,0.00ns,28.00ns,23.00ns,25.00ns,18.79us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.56ms,32.00ns,0.00ns,32.00ns,6.00ns,29.00ns,2.47us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,527.75ms,30.00ns,0.00ns,30.00ns,7.00ns,27.00ns,2.61us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,527.17ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.67us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,527.60ms,26.00ns,0.00ns,26.00ns,6.00ns,24.00ns,2.11us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,477.48ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,2.47us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,476.94ms,15.00ns,0.00ns,15.00ns,19.00ns,13.00ns,13.58us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,31,1000000,627.89ms,88.00ns,0.00ns,88.00ns,8.00ns,84.00ns,2.26us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,31,1000000,577.87ms,54.00ns,0.00ns,55.00ns,7.00ns,51.00ns,2.30us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,527.58ms,35.00ns,0.00ns,35.00ns,12.00ns,32.00ns,6.55us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,527.49ms,37.00ns,0.00ns,38.00ns,10.00ns,35.00ns,6.98us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,527.15ms,28.00ns,0.00ns,28.00ns,5.00ns,25.00ns,2.03us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.10ms,26.00ns,0.00ns,26.00ns,6.00ns,23.00ns,2.40us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,527.64ms,34.00ns,0.00ns,34.00ns,13.00ns,31.00ns,8.73us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,527.67ms,19.00ns,0.00ns,19.00ns,4.00ns,17.00ns,1.85us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,477.45ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.58us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,527.96ms,25.00ns,0.00ns,25.00ns,29.00ns,22.00ns,20.30us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,527.58ms,18.00ns,0.00ns,18.00ns,17.00ns,16.00ns,13.79us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,477.67ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.47us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.72.0-nightly 0ab38e95b,,31,1000000,577.24ms,50.00ns,0.00ns,51.00ns,13.00ns,48.00ns,7.42us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.72.0-nightly 0ab38e95b,,31,1000000,527.18ms,35.00ns,0.00ns,35.00ns,22.00ns,33.00ns,17.22us\n"
  },
  {
    "path": "benchmarks/record/x86_64/2023-08-15.csv",
    "content": "name,model,rebar_version,engine,engine_version,err,haystack_len,iters,total,median,mad,mean,stddev,min,max\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,17474,4.51s,172.14us,0.00ns,171.65us,2.19us,166.97us,183.93us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,16724,4.51s,179.02us,0.00ns,179.35us,1.31us,178.10us,192.83us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,16928,4.51s,178.85us,0.00ns,177.19us,4.19us,167.67us,209.07us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,6336,4.51s,473.04us,0.00ns,473.51us,3.48us,465.80us,513.35us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,7197,4.51s,415.96us,0.00ns,416.82us,10.10us,399.13us,515.29us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,15987,4.51s,186.04us,0.00ns,187.63us,2.65us,183.02us,201.66us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,18216,4.51s,163.06us,0.00ns,164.66us,3.96us,161.65us,184.19us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,18389,4.51s,162.86us,0.00ns,163.12us,884.00ns,161.75us,170.91us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,7153,4.51s,414.77us,0.00ns,419.42us,16.16us,405.33us,480.89us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,15993,4.51s,187.59us,0.00ns,187.55us,1.06us,185.14us,198.72us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,9458,4.51s,321.38us,0.00ns,317.19us,8.90us,297.60us,337.57us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,3396,4.51s,884.05us,1.00ns,883.49us,3.95us,873.90us,908.85us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,4709,4.51s,620.69us,0.00ns,637.17us,29.48us,606.21us,825.42us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,9209,4.51s,322.13us,0.00ns,325.75us,5.42us,321.70us,345.09us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,10005,4.51s,296.98us,0.00ns,299.82us,8.70us,295.12us,335.49us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,8494,4.51s,352.76us,0.00ns,353.17us,1.29us,351.25us,366.71us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,6196,4.51s,483.73us,0.00ns,484.20us,1.60us,478.78us,501.28us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,2254,4.51s,1.33ms,6.00ns,1.33ms,9.59us,1.32ms,1.39ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,3626,4.51s,822.91us,1.00ns,827.33us,24.97us,810.47us,1.01ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,5538,4.51s,541.62us,3.00ns,541.70us,3.66us,532.42us,566.97us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,6130,4.51s,481.83us,1.00ns,489.42us,11.01us,477.02us,515.03us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,5610,4.51s,528.60us,0.00ns,534.78us,10.72us,527.72us,571.59us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,882.67ms,186.00ns,0.00ns,186.00ns,11.00ns,181.00ns,1.88us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,829.94ms,187.00ns,0.00ns,188.00ns,23.00ns,183.00ns,13.00us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,729.38ms,171.00ns,0.00ns,172.00ns,16.00ns,167.00ns,10.52us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,779.52ms,142.00ns,0.00ns,143.00ns,11.00ns,137.00ns,2.20us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,779.65ms,160.00ns,0.00ns,160.00ns,20.00ns,153.00ns,13.53us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,829.68ms,194.00ns,0.00ns,192.00ns,13.00ns,185.00ns,2.55us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,830.26ms,168.00ns,0.00ns,169.00ns,12.00ns,165.00ns,2.63us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,829.17ms,170.00ns,0.00ns,170.00ns,12.00ns,165.00ns,2.72us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,829.56ms,159.00ns,0.00ns,159.00ns,12.00ns,154.00ns,1.91us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,880.00ms,207.00ns,0.00ns,207.00ns,12.00ns,203.00ns,1.96us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,1.13s,320.00ns,0.00ns,320.00ns,16.00ns,314.00ns,2.39us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,0.98s,264.00ns,0.00ns,264.00ns,16.00ns,256.00ns,6.03us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,880.09ms,205.00ns,0.00ns,224.00ns,32.00ns,198.00ns,6.06us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,1.13s,339.00ns,0.00ns,340.00ns,17.00ns,334.00ns,6.56us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,1.13s,321.00ns,0.00ns,322.00ns,16.00ns,313.00ns,2.26us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,1.18s,375.00ns,0.00ns,376.00ns,17.00ns,367.00ns,2.30us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,1.48s,496.00ns,0.00ns,497.00ns,21.00ns,486.00ns,5.60us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,1.08s,306.00ns,0.00ns,307.00ns,24.00ns,291.00ns,16.14us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.13s,269.00ns,0.00ns,271.00ns,19.00ns,260.00ns,6.28us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,1.58s,556.00ns,0.00ns,558.00ns,26.00ns,547.00ns,14.89us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,1.48s,512.00ns,0.00ns,512.00ns,16.00ns,502.00ns,10.86us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.68s,570.00ns,0.00ns,571.00ns,21.00ns,556.00ns,6.18us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,578.11ms,50.00ns,0.00ns,50.00ns,7.00ns,47.00ns,2.72us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,578.12ms,49.00ns,0.00ns,49.00ns,18.00ns,47.00ns,16.61us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,578.78ms,45.00ns,0.00ns,45.00ns,21.00ns,43.00ns,13.97us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,528.28ms,37.00ns,0.00ns,37.00ns,8.00ns,32.00ns,3.08us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,477.92ms,26.00ns,0.00ns,26.00ns,6.00ns,22.00ns,2.82us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,578.97ms,54.00ns,0.00ns,54.00ns,6.00ns,52.00ns,2.48us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,528.71ms,45.00ns,0.00ns,45.00ns,7.00ns,42.00ns,2.68us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,578.47ms,45.00ns,0.00ns,45.00ns,6.00ns,42.00ns,1.99us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,578.62ms,24.00ns,0.00ns,25.00ns,14.00ns,21.00ns,13.41us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,678.76ms,48.00ns,0.00ns,48.00ns,6.00ns,45.00ns,2.35us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,716435,4.83s,4.15us,0.00ns,4.16us,74.00ns,4.06us,23.15us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,690256,4.78s,4.31us,0.00ns,4.31us,93.00ns,4.16us,14.04us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,690830,4.88s,4.28us,0.00ns,4.31us,102.00ns,4.11us,25.52us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,136497,4.62s,21.51us,0.00ns,21.95us,892.00ns,21.48us,28.61us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,26176,4.56s,114.38us,0.00ns,114.58us,739.00ns,114.34us,137.12us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,673732,4.83s,4.43us,0.00ns,4.42us,92.00ns,4.26us,15.09us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,717884,4.83s,4.14us,0.00ns,4.15us,62.00ns,4.09us,10.91us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,709027,4.88s,4.19us,0.00ns,4.20us,80.00ns,4.15us,22.16us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,26166,4.56s,114.37us,0.00ns,114.62us,1.47us,114.34us,143.86us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,681814,4.83s,4.34us,0.00ns,4.37us,92.00ns,4.28us,10.54us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,544196,4.78s,5.48us,0.00ns,5.48us,89.00ns,5.34us,14.61us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,77237,4.56s,38.28us,0.00ns,38.81us,716.00ns,38.16us,53.54us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,17448,4.51s,171.57us,0.00ns,171.91us,1.10us,171.53us,211.67us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,516479,4.78s,5.23us,0.00ns,5.78us,585.00ns,5.18us,14.04us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,528957,4.78s,5.41us,0.00ns,5.64us,418.00ns,5.28us,10.04us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,576876,4.83s,5.16us,0.00ns,5.17us,76.00ns,5.14us,25.96us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,389924,4.72s,7.66us,0.00ns,7.66us,64.00ns,7.64us,14.39us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,51436,4.56s,57.87us,0.00ns,58.28us,1.66us,55.09us,76.29us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,13101,4.51s,228.75us,0.00ns,228.96us,898.00ns,228.71us,270.28us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,388284,4.72s,7.68us,0.00ns,7.70us,99.00ns,7.65us,11.95us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,389034,4.72s,7.67us,0.00ns,7.68us,89.00ns,7.62us,12.23us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,382026,4.72s,7.82us,0.00ns,7.82us,60.00ns,7.76us,15.01us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,476.83ms,14.00ns,0.00ns,15.00ns,18.00ns,12.00ns,15.21us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,527.07ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.05us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,476.97ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.99us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,526.58ms,34.00ns,0.00ns,36.00ns,23.00ns,31.00ns,18.62us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,777.78ms,145.00ns,0.00ns,145.00ns,13.00ns,141.00ns,5.69us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,476.40ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,1.95us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,476.20ms,14.00ns,0.00ns,14.00ns,4.00ns,13.00ns,2.39us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,476.99ms,14.00ns,0.00ns,14.00ns,16.00ns,12.00ns,16.00us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,727.97ms,144.00ns,0.00ns,145.00ns,13.00ns,141.00ns,7.40us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,477.07ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,1.91us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,526.91ms,19.00ns,0.00ns,19.00ns,4.00ns,17.00ns,2.39us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,577.50ms,60.00ns,0.00ns,60.00ns,7.00ns,56.00ns,2.10us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,928.64ms,209.00ns,0.00ns,209.00ns,13.00ns,205.00ns,2.17us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,526.75ms,19.00ns,0.00ns,19.00ns,6.00ns,17.00ns,2.44us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,476.60ms,18.00ns,0.00ns,18.00ns,4.00ns,16.00ns,2.20us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,477.27ms,19.00ns,0.00ns,19.00ns,5.00ns,16.00ns,1.71us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,527.21ms,22.00ns,0.00ns,22.00ns,10.00ns,20.00ns,8.94us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,627.09ms,80.00ns,0.00ns,80.00ns,7.00ns,71.00ns,2.16us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.08s,272.00ns,0.00ns,273.00ns,18.00ns,269.00ns,7.30us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,527.88ms,22.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.39us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,526.61ms,21.00ns,0.00ns,21.00ns,15.00ns,19.00ns,14.38us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,476.81ms,21.00ns,0.00ns,21.00ns,4.00ns,19.00ns,2.01us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,476.43ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.06us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,477.08ms,12.00ns,0.00ns,12.00ns,8.00ns,11.00ns,6.38us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,476.63ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.15us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,476.74ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.12us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,526.60ms,30.00ns,0.00ns,29.00ns,13.00ns,21.00ns,11.26us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,477.33ms,12.00ns,0.00ns,12.00ns,16.00ns,10.00ns,15.45us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,476.52ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.28us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,477.05ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.43us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,526.65ms,23.00ns,0.00ns,24.00ns,5.00ns,21.00ns,1.89us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,476.30ms,12.00ns,0.00ns,12.00ns,16.00ns,11.00ns,15.16us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,476.41ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.10us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,476.58ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,2.63us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,526.80ms,38.00ns,0.00ns,38.00ns,17.00ns,28.00ns,10.92us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,527.05ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.35us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,477.17ms,13.00ns,0.00ns,13.00ns,4.00ns,11.00ns,2.10us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,476.98ms,15.00ns,0.00ns,15.00ns,11.00ns,12.00ns,10.03us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,477.14ms,15.00ns,0.00ns,15.00ns,21.00ns,13.00ns,20.08us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,476.86ms,18.00ns,0.00ns,18.00ns,6.00ns,16.00ns,2.38us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,527.11ms,43.00ns,0.00ns,43.00ns,13.00ns,34.00ns,7.08us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,476.99ms,15.00ns,0.00ns,15.00ns,3.00ns,13.00ns,1.79us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,526.62ms,13.00ns,0.00ns,13.00ns,3.00ns,12.00ns,2.29us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,526.45ms,14.00ns,0.00ns,14.00ns,22.00ns,12.00ns,16.64us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,,1000000,476.88ms,11.00ns,0.00ns,11.00ns,3.00ns,9.00ns,1.91us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,,1000000,477.00ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.17us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,,1000000,476.81ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.15us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,,1000000,476.93ms,11.00ns,0.00ns,11.00ns,5.00ns,9.00ns,2.48us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,,1000000,476.50ms,10.00ns,0.00ns,10.00ns,3.00ns,8.00ns,1.91us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,,1000000,526.56ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,1.98us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,,1000000,476.87ms,10.00ns,0.00ns,10.00ns,19.00ns,8.00ns,13.99us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,,1000000,476.91ms,10.00ns,0.00ns,10.00ns,16.00ns,9.00ns,15.21us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,,1000000,477.08ms,10.00ns,0.00ns,10.00ns,1.00ns,8.00ns,261.00ns\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,,1000000,476.38ms,10.00ns,0.00ns,10.00ns,3.00ns,8.00ns,2.04us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,,1000000,576.77ms,11.00ns,0.00ns,11.00ns,3.00ns,10.00ns,2.48us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,,1000000,476.78ms,11.00ns,0.00ns,11.00ns,3.00ns,9.00ns,1.99us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,,1000000,477.03ms,10.00ns,0.00ns,10.00ns,11.00ns,9.00ns,10.98us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,,1000000,476.95ms,11.00ns,0.00ns,12.00ns,3.00ns,9.00ns,2.20us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,,1000000,476.57ms,10.00ns,0.00ns,10.00ns,4.00ns,9.00ns,1.88us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,,1000000,476.88ms,10.00ns,0.00ns,10.00ns,4.00ns,9.00ns,2.16us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,,1000000,527.02ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,1.61us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,,1000000,476.49ms,11.00ns,0.00ns,11.00ns,5.00ns,9.00ns,2.27us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,,1000000,476.68ms,10.00ns,0.00ns,10.00ns,15.00ns,9.00ns,14.80us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,,1000000,476.87ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.20us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,,1000000,476.49ms,10.00ns,0.00ns,10.00ns,4.00ns,9.00ns,2.69us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,,1000000,477.12ms,10.00ns,0.00ns,10.00ns,3.00ns,9.00ns,1.97us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,591946,4.78s,5.00us,0.00ns,5.04us,101.00ns,4.93us,10.44us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,583993,4.83s,5.10us,0.00ns,5.10us,131.00ns,5.03us,52.74us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,594931,4.83s,5.00us,0.00ns,5.01us,71.00ns,4.93us,10.27us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,128177,4.57s,23.48us,0.00ns,23.37us,218.00ns,23.04us,33.29us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,25855,4.51s,115.40us,0.00ns,116.00us,2.31us,115.26us,143.96us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,578822,4.83s,5.10us,0.00ns,5.15us,130.00ns,4.99us,25.66us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,600259,4.83s,4.96us,0.00ns,4.97us,77.00ns,4.89us,14.51us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,592918,4.83s,5.02us,0.00ns,5.03us,75.00ns,4.94us,10.95us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,566490,4.83s,5.31us,0.00ns,5.26us,132.00ns,4.96us,12.89us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,362355,4.72s,7.83us,0.00ns,8.25us,482.00ns,7.69us,17.35us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,71085,4.56s,41.77us,0.00ns,42.17us,696.00ns,41.58us,52.67us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,17107,4.51s,175.66us,0.00ns,175.34us,2.14us,173.78us,215.19us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,379098,4.67s,7.87us,0.00ns,7.88us,98.00ns,7.72us,13.97us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,381989,4.67s,7.81us,0.00ns,7.82us,118.00ns,7.70us,14.32us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,346050,4.72s,8.94us,0.00ns,8.64us,571.00ns,7.55us,15.22us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,272419,4.67s,11.20us,0.00ns,10.98us,321.00ns,10.55us,17.01us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,48890,4.56s,61.02us,0.00ns,61.33us,1.53us,59.47us,76.49us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,12918,4.51s,231.71us,0.00ns,232.21us,1.04us,231.52us,258.91us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,273696,4.62s,10.92us,0.00ns,10.93us,103.00ns,10.80us,16.52us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,274982,4.67s,10.84us,0.00ns,10.88us,214.00ns,10.71us,16.07us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,248341,4.67s,12.03us,0.00ns,12.05us,96.00ns,11.95us,17.99us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,529.05ms,19.00ns,0.00ns,19.00ns,6.00ns,17.00ns,3.44us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,476.82ms,19.00ns,0.00ns,19.00ns,6.00ns,16.00ns,2.43us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,527.17ms,19.00ns,0.00ns,19.00ns,5.00ns,16.00ns,2.19us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,526.96ms,36.00ns,0.00ns,36.00ns,7.00ns,33.00ns,2.78us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,778.19ms,153.00ns,0.00ns,153.00ns,11.00ns,146.00ns,4.08us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,527.19ms,20.00ns,0.00ns,20.00ns,4.00ns,17.00ns,2.03us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,476.83ms,19.00ns,0.00ns,19.00ns,30.00ns,17.00ns,22.15us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,476.80ms,19.00ns,0.00ns,19.00ns,20.00ns,16.00ns,15.58us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,778.38ms,153.00ns,0.00ns,153.00ns,12.00ns,146.00ns,2.67us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,527.05ms,20.00ns,0.00ns,20.00ns,4.00ns,17.00ns,2.25us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,526.54ms,28.00ns,0.00ns,28.00ns,3.00ns,25.00ns,2.07us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,577.17ms,61.00ns,0.00ns,61.00ns,7.00ns,53.00ns,2.49us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,928.74ms,229.00ns,0.00ns,229.00ns,16.00ns,216.00ns,7.58us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,526.89ms,29.00ns,0.00ns,29.00ns,5.00ns,26.00ns,2.07us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,526.89ms,29.00ns,0.00ns,29.00ns,5.00ns,26.00ns,2.03us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,526.94ms,29.00ns,0.00ns,29.00ns,129.00ns,25.00ns,129.02us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,526.52ms,38.00ns,0.00ns,38.00ns,4.00ns,34.00ns,1.69us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,677.60ms,92.00ns,0.00ns,93.00ns,10.00ns,75.00ns,2.10us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.03s,285.00ns,0.00ns,286.00ns,16.00ns,280.00ns,2.64us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,526.98ms,38.00ns,0.00ns,38.00ns,17.00ns,34.00ns,15.77us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,526.92ms,37.00ns,0.00ns,37.00ns,6.00ns,33.00ns,2.87us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,576.81ms,37.00ns,0.00ns,37.00ns,19.00ns,33.00ns,18.32us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,527.06ms,15.00ns,0.00ns,15.00ns,76.00ns,12.00ns,75.47us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,526.96ms,17.00ns,0.00ns,17.00ns,6.00ns,15.00ns,2.69us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,527.01ms,16.00ns,0.00ns,16.00ns,7.00ns,14.00ns,4.98us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,526.91ms,16.00ns,0.00ns,16.00ns,17.00ns,13.00ns,16.98us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,527.14ms,31.00ns,0.00ns,31.00ns,23.00ns,21.00ns,17.75us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,527.06ms,15.00ns,0.00ns,15.00ns,7.00ns,13.00ns,5.75us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,477.01ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,2.30us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,476.96ms,16.00ns,0.00ns,16.00ns,13.00ns,14.00ns,11.73us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,527.16ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.48us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,477.02ms,14.00ns,0.00ns,14.00ns,16.00ns,12.00ns,15.07us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,526.54ms,20.00ns,0.00ns,20.00ns,5.00ns,19.00ns,2.63us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,526.61ms,20.00ns,0.00ns,20.00ns,6.00ns,17.00ns,2.88us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,576.73ms,38.00ns,0.00ns,37.00ns,7.00ns,28.00ns,2.97us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,526.76ms,20.00ns,0.00ns,20.00ns,4.00ns,18.00ns,1.87us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,526.62ms,20.00ns,0.00ns,20.00ns,30.00ns,18.00ns,19.32us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,527.22ms,18.00ns,0.00ns,18.00ns,6.00ns,16.00ns,4.20us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,527.06ms,29.00ns,0.00ns,29.00ns,6.00ns,27.00ns,3.00us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,526.82ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.11us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,577.03ms,44.00ns,0.00ns,43.00ns,16.00ns,34.00ns,11.96us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,527.04ms,25.00ns,0.00ns,25.00ns,21.00ns,22.00ns,20.13us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,527.28ms,28.00ns,0.00ns,28.00ns,7.00ns,26.00ns,2.60us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,527.02ms,22.00ns,0.00ns,22.00ns,5.00ns,19.00ns,2.81us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,81793,4.56s,35.40us,0.00ns,36.64us,2.11us,34.03us,67.78us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,56887,4.56s,52.28us,0.00ns,52.70us,1.32us,50.84us,77.88us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,57424,4.56s,52.11us,0.00ns,52.21us,655.00ns,50.72us,75.43us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,35491,4.56s,84.40us,0.00ns,84.49us,683.00ns,83.31us,94.92us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,18963,4.51s,155.77us,0.00ns,158.17us,5.76us,154.83us,197.44us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,50453,4.56s,59.79us,0.00ns,59.42us,1.23us,56.64us,77.80us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,64560,4.56s,46.89us,0.00ns,46.43us,1.41us,44.32us,70.52us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,64819,4.56s,45.52us,0.00ns,46.25us,1.46us,44.44us,71.53us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,18923,4.51s,156.15us,0.00ns,158.50us,5.81us,154.58us,228.40us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,57929,4.56s,51.66us,0.00ns,51.75us,408.00ns,51.00us,69.36us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,25473,4.56s,117.31us,0.00ns,117.74us,1.42us,115.24us,136.94us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,16363,4.51s,183.33us,0.00ns,183.31us,1.20us,181.08us,213.21us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,10891,4.51s,278.70us,0.00ns,275.43us,19.26us,252.52us,399.74us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,21756,4.51s,140.36us,0.00ns,137.86us,4.31us,130.93us,151.73us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,25813,4.56s,111.95us,0.00ns,116.19us,5.40us,110.86us,144.85us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,25745,4.56s,113.94us,0.00ns,116.50us,5.07us,112.46us,145.76us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,19121,4.51s,156.16us,0.00ns,156.86us,3.11us,150.60us,185.28us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,9990,4.51s,299.94us,0.00ns,300.29us,1.50us,297.03us,344.03us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,8744,4.51s,341.81us,0.00ns,343.10us,5.58us,340.23us,417.41us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,18222,4.51s,164.28us,0.00ns,164.61us,1.10us,162.29us,181.49us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,19158,4.51s,160.53us,0.00ns,156.56us,7.60us,143.54us,184.20us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,19063,4.51s,151.58us,0.00ns,157.34us,8.49us,147.77us,191.44us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,577.07ms,46.00ns,0.00ns,46.00ns,7.00ns,43.00ns,2.39us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,577.10ms,47.00ns,0.00ns,47.00ns,7.00ns,43.00ns,2.61us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,577.00ms,45.00ns,0.00ns,45.00ns,6.00ns,42.00ns,2.45us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,577.10ms,53.00ns,0.00ns,53.00ns,24.00ns,49.00ns,19.34us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,878.24ms,154.00ns,0.00ns,157.00ns,13.00ns,147.00ns,3.37us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,577.14ms,48.00ns,0.00ns,48.00ns,11.00ns,45.00ns,7.28us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,576.67ms,44.00ns,0.00ns,44.00ns,7.00ns,40.00ns,2.42us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,577.32ms,44.00ns,0.00ns,44.00ns,6.00ns,41.00ns,2.25us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,778.70ms,157.00ns,0.00ns,160.00ns,18.00ns,143.00ns,9.78us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,577.09ms,50.00ns,0.00ns,50.00ns,14.00ns,46.00ns,10.87us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,728.35ms,76.00ns,0.00ns,77.00ns,11.00ns,71.00ns,7.26us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,678.62ms,95.00ns,0.00ns,95.00ns,20.00ns,83.00ns,18.09us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,930.02ms,262.00ns,0.00ns,254.00ns,26.00ns,198.00ns,2.74us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,678.83ms,87.00ns,0.00ns,87.00ns,26.00ns,82.00ns,17.31us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,680.20ms,100.00ns,0.00ns,100.00ns,6.00ns,92.00ns,1.80us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,628.93ms,89.00ns,0.00ns,89.00ns,18.00ns,83.00ns,15.58us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,729.55ms,122.00ns,0.00ns,123.00ns,10.00ns,116.00ns,2.64us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,729.72ms,132.00ns,0.00ns,134.00ns,12.00ns,127.00ns,2.11us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.03s,265.00ns,0.00ns,265.00ns,16.00ns,261.00ns,2.56us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,729.90ms,134.00ns,0.00ns,135.00ns,10.00ns,129.00ns,2.09us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,729.99ms,138.00ns,0.00ns,138.00ns,11.00ns,130.00ns,2.36us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,729.59ms,136.00ns,0.00ns,137.00ns,10.00ns,129.00ns,2.13us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,526.93ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.30us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,527.10ms,30.00ns,0.00ns,30.00ns,6.00ns,28.00ns,3.41us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,527.10ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.21us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,526.73ms,20.00ns,0.00ns,20.00ns,17.00ns,18.00ns,11.65us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,526.37ms,24.00ns,0.00ns,25.00ns,28.00ns,21.00ns,18.03us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,576.66ms,32.00ns,0.00ns,32.00ns,5.00ns,30.00ns,1.84us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,527.01ms,28.00ns,0.00ns,28.00ns,11.00ns,26.00ns,8.76us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,526.61ms,28.00ns,0.00ns,28.00ns,4.00ns,26.00ns,2.06us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,526.61ms,24.00ns,0.00ns,27.00ns,7.00ns,22.00ns,2.41us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,527.12ms,32.00ns,0.00ns,32.00ns,22.00ns,29.00ns,18.44us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,578.95ms,51.00ns,0.00ns,51.00ns,71.00ns,48.00ns,70.60us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,528.40ms,34.00ns,0.00ns,34.00ns,7.00ns,30.00ns,2.98us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,528.49ms,33.00ns,0.00ns,32.00ns,7.00ns,27.00ns,2.40us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,628.99ms,50.00ns,0.00ns,51.00ns,12.00ns,47.00ns,8.39us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,578.96ms,56.00ns,0.00ns,56.00ns,10.00ns,52.00ns,7.18us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,578.49ms,52.00ns,0.00ns,52.00ns,8.00ns,48.00ns,2.49us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,628.59ms,70.00ns,0.00ns,70.00ns,9.00ns,65.00ns,5.68us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,578.80ms,46.00ns,0.00ns,46.00ns,7.00ns,42.00ns,2.27us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,528.96ms,36.00ns,0.00ns,36.00ns,24.00ns,33.00ns,17.80us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,628.41ms,90.00ns,0.00ns,90.00ns,9.00ns,86.00ns,2.01us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,629.22ms,69.00ns,0.00ns,69.00ns,8.00ns,64.00ns,3.27us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,629.23ms,80.00ns,0.00ns,80.00ns,8.00ns,73.00ns,2.09us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,7415,4.51s,397.32us,0.00ns,404.57us,10.72us,393.03us,430.81us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,7538,4.51s,392.31us,0.00ns,398.00us,8.66us,391.17us,425.69us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,8372,4.51s,355.35us,0.00ns,358.32us,6.44us,354.66us,386.79us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,3654,4.51s,816.85us,1.00ns,821.06us,10.73us,786.34us,867.93us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,3807,4.51s,787.03us,0.00ns,788.04us,7.62us,749.47us,849.62us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,7581,4.51s,397.43us,0.00ns,395.73us,4.75us,385.76us,412.64us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,8165,4.51s,375.45us,0.00ns,367.43us,11.19us,349.15us,387.24us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,8289,4.51s,353.33us,0.00ns,361.90us,12.67us,346.85us,391.90us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,3801,4.51s,788.77us,0.00ns,789.42us,5.08us,773.30us,835.50us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,7339,4.51s,404.88us,0.00ns,408.79us,8.83us,404.56us,440.50us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,1.38s,448.00ns,0.00ns,449.00ns,18.00ns,442.00ns,2.49us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,1.33s,434.00ns,0.00ns,435.00ns,20.00ns,431.00ns,5.71us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.28s,393.00ns,0.00ns,394.00ns,19.00ns,390.00ns,7.74us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,1.08s,294.00ns,0.00ns,295.00ns,18.00ns,286.00ns,10.83us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,0.98s,213.00ns,0.00ns,213.00ns,14.00ns,204.00ns,2.11us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,1.33s,428.00ns,0.00ns,429.00ns,19.00ns,424.00ns,6.54us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.28s,394.00ns,0.00ns,395.00ns,20.00ns,390.00ns,7.10us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.38s,394.00ns,0.00ns,394.00ns,22.00ns,390.00ns,9.30us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,881.76ms,212.00ns,0.00ns,212.00ns,16.00ns,205.00ns,6.68us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,1.38s,450.00ns,0.00ns,451.00ns,18.00ns,444.00ns,2.11us\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,33335253,273,4.56s,10.98ms,0.00ns,10.99ms,40.66us,10.87ms,11.18ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,33335253,286,4.56s,10.50ms,1.46us,10.51ms,107.78us,10.33ms,10.86ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,33335253,280,4.56s,10.76ms,2.04us,10.75ms,134.95us,10.36ms,11.00ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,33335253,447,4.56s,6.71ms,0.00ns,6.71ms,26.29us,6.66ms,6.82ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,33335253,435,4.56s,6.74ms,0.00ns,6.90ms,231.60us,6.67ms,7.32ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/binary,2.5.0,,33335253,3047,4.56s,0.97ms,0.00ns,0.98ms,32.66us,0.95ms,1.09ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,33335253,293,4.56s,10.27ms,0.00ns,10.25ms,140.26us,9.92ms,10.91ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,33335253,146,4.56s,20.65ms,132.00ns,20.65ms,40.78us,20.60ms,20.84ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,33335253,223,4.56s,13.46ms,0.00ns,13.47ms,43.42us,13.42ms,13.74ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,33335253,537,4.56s,5.64ms,0.00ns,5.59ms,132.30us,5.23ms,5.80ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,33335253,540,4.56s,5.64ms,222.00ns,5.56ms,154.27us,5.22ms,5.81ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,21299,4.56s,135.37us,0.00ns,140.82us,7.20us,133.00us,167.18us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13830,4.51s,223.58us,0.00ns,216.89us,9.17us,205.69us,238.94us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13726,4.51s,224.22us,0.00ns,218.53us,8.94us,205.62us,245.74us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,82217,4.56s,36.38us,0.00ns,36.44us,318.00ns,36.16us,43.31us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,82751,4.56s,36.15us,0.00ns,36.21us,330.00ns,35.93us,60.77us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3114,4.51s,0.97ms,4.00ns,0.96ms,10.95us,935.20us,1.03ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2957,4.51s,1.01ms,0.00ns,1.01ms,2.67us,1.01ms,1.05ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4550,4.51s,659.99us,0.00ns,659.40us,3.77us,651.99us,707.04us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,76789,4.56s,38.50us,0.00ns,39.03us,1.01us,37.42us,45.75us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,77784,4.56s,38.34us,0.00ns,38.53us,901.00ns,37.27us,66.48us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2988,4.51s,1.01ms,1.00ns,1.00ms,28.74us,0.96ms,1.08ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2977,4.51s,1.02ms,0.00ns,1.01ms,29.03us,0.96ms,1.10ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,24144,4.56s,124.07us,0.00ns,124.22us,1.14us,121.82us,143.16us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13703,4.51s,224.15us,0.00ns,218.90us,9.01us,205.55us,251.49us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13738,4.51s,223.99us,0.00ns,218.35us,9.08us,205.62us,246.90us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,77994,4.56s,37.48us,0.00ns,38.43us,1.19us,37.21us,45.81us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,78404,4.56s,37.68us,0.00ns,38.23us,1.03us,37.45us,63.86us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3428,4.51s,874.00us,1.00ns,875.23us,5.99us,865.80us,944.62us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2958,4.51s,1.01ms,0.00ns,1.01ms,4.34us,1.01ms,1.06ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4546,4.51s,659.93us,0.00ns,660.01us,5.91us,651.94us,713.61us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,74411,4.56s,40.50us,0.00ns,40.28us,0.99us,37.70us,47.86us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,75185,4.56s,40.53us,0.00ns,39.86us,1.22us,37.74us,48.84us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3115,4.51s,0.97ms,0.00ns,0.96ms,28.49us,893.85us,1.06ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3164,4.51s,0.95ms,4.00ns,948.26us,30.46us,893.53us,1.04ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,16652,4.51s,175.69us,0.00ns,180.12us,7.62us,174.26us,212.29us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13702,4.51s,223.84us,0.00ns,218.92us,8.97us,205.48us,237.66us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13788,4.51s,223.66us,0.00ns,217.55us,9.29us,205.50us,245.70us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,78718,4.56s,38.00us,0.00ns,38.07us,332.00ns,37.78us,43.44us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,76119,4.56s,39.75us,0.00ns,39.37us,820.00ns,37.72us,46.38us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3475,4.51s,866.68us,0.00ns,863.51us,7.62us,850.05us,904.52us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2951,4.51s,1.01ms,0.00ns,1.02ms,7.88us,1.01ms,1.08ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4543,4.51s,660.01us,0.00ns,660.45us,6.75us,652.02us,710.11us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,64208,4.56s,46.32us,0.00ns,46.68us,0.97us,45.68us,68.53us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,76430,4.56s,39.11us,0.00ns,39.21us,421.00ns,38.59us,48.66us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3297,4.51s,904.86us,0.00ns,909.95us,14.85us,892.22us,0.99ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3306,4.51s,903.05us,6.00ns,907.61us,13.56us,892.89us,0.99ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,30329,4.56s,102.45us,0.00ns,98.88us,5.92us,89.76us,120.33us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,14164,4.51s,218.44us,0.00ns,211.77us,9.50us,200.16us,241.75us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,14183,4.51s,218.43us,0.00ns,211.49us,9.44us,199.91us,244.90us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,78478,4.56s,37.80us,0.00ns,38.19us,866.00ns,37.56us,62.20us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,79426,4.56s,37.66us,0.00ns,37.73us,346.00ns,37.42us,43.66us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3507,4.51s,856.15us,0.00ns,855.52us,4.30us,844.71us,890.10us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2959,4.51s,1.01ms,0.00ns,1.01ms,3.43us,1.01ms,1.06ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,274313,4.67s,10.95us,0.00ns,10.90us,182.00ns,10.46us,21.17us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,277085,4.67s,10.91us,0.00ns,10.79us,213.00ns,10.46us,17.38us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3234,4.51s,916.17us,143.00ns,927.78us,46.39us,861.36us,1.05ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3265,4.51s,903.46us,0.00ns,918.80us,45.81us,861.64us,1.03ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,24334,4.56s,123.03us,0.00ns,123.25us,1.06us,122.09us,139.75us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13803,4.51s,223.92us,0.00ns,217.31us,9.32us,206.02us,247.22us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13702,4.51s,224.70us,0.00ns,218.91us,9.22us,206.10us,247.35us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,73663,4.56s,41.12us,0.00ns,40.68us,1.03us,38.54us,47.54us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,76232,4.56s,40.11us,0.00ns,39.32us,1.15us,37.71us,46.77us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3296,4.51s,903.88us,2.00ns,910.23us,13.20us,891.93us,0.96ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2959,4.51s,1.01ms,0.00ns,1.01ms,3.05us,1.01ms,1.05ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4554,4.51s,657.25us,0.00ns,658.76us,4.64us,655.39us,708.33us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3161,4.51s,948.12us,0.00ns,949.14us,5.88us,938.06us,1.00ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3163,4.51s,946.84us,0.00ns,948.72us,7.31us,937.96us,0.99ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,4304,4.51s,696.18us,1.00ns,697.13us,8.83us,688.01us,749.63us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,11004,4.51s,276.57us,1.00ns,272.59us,8.64us,260.14us,301.68us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,11288,4.51s,270.05us,0.00ns,265.75us,8.85us,253.39us,291.67us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,26622,4.56s,112.15us,0.00ns,112.65us,1.32us,110.07us,140.71us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,45146,4.56s,64.87us,0.00ns,66.41us,3.07us,62.75us,85.94us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3647,4.51s,823.91us,0.00ns,822.66us,5.03us,811.64us,848.75us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2774,4.51s,1.08ms,4.00ns,1.08ms,3.21us,1.08ms,1.12ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4407,4.51s,680.79us,0.00ns,680.81us,3.21us,675.24us,724.99us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3174,4.51s,945.64us,1.00ns,945.21us,9.76us,846.53us,0.99ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3234,4.51s,928.89us,4.00ns,927.79us,9.87us,842.42us,0.97ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,11357,4.51s,263.72us,0.00ns,264.11us,7.64us,249.35us,288.88us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,3920,4.51s,765.24us,4.00ns,765.38us,12.48us,733.15us,818.85us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,4420,4.51s,677.57us,5.00ns,678.72us,13.29us,651.72us,783.19us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,5405,4.51s,553.80us,0.00ns,555.01us,3.90us,550.52us,577.85us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,9426,4.51s,315.23us,1.00ns,318.25us,5.86us,311.32us,342.01us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,2506,4.51s,1.19ms,1.00ns,1.20ms,27.41us,1.17ms,1.31ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2423,4.51s,1.24ms,0.00ns,1.24ms,10.80us,1.22ms,1.31ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,3442,4.51s,869.44us,1.00ns,871.58us,11.53us,847.54us,0.96ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2494,4.51s,1.20ms,1.00ns,1.20ms,15.25us,1.18ms,1.28ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2796,4.51s,1.07ms,1.00ns,1.07ms,6.61us,1.06ms,1.11ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,6225,4.51s,479.23us,0.00ns,481.94us,6.42us,473.18us,591.97us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,8789,4.51s,344.01us,0.00ns,341.30us,8.64us,326.80us,373.14us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,9051,4.51s,333.14us,0.00ns,331.42us,8.59us,317.64us,356.54us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,15766,4.51s,190.34us,0.00ns,190.25us,2.86us,183.23us,266.83us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,29708,4.56s,102.62us,1.00ns,100.95us,3.91us,92.74us,121.84us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3013,4.51s,1.00ms,0.00ns,1.00ms,7.16us,0.98ms,1.03ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2694,4.51s,1.11ms,0.00ns,1.11ms,12.01us,1.10ms,1.16ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4324,4.51s,689.52us,20.00ns,693.92us,10.62us,687.18us,750.10us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2434,4.51s,1.23ms,1.00ns,1.23ms,11.85us,1.10ms,1.27ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2492,4.51s,1.20ms,6.00ns,1.20ms,11.81us,1.16ms,1.27ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,151305,805760,4.89s,3.66us,0.00ns,3.69us,136.00ns,3.48us,8.05us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,151305,126688,4.57s,24.00us,0.00ns,23.65us,794.00ns,22.60us,34.33us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,151305,127123,4.57s,23.90us,0.00ns,23.57us,829.00ns,22.50us,31.66us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,834207,4.89s,3.54us,0.00ns,3.56us,79.00ns,3.42us,6.97us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,869901,4.94s,3.41us,0.00ns,3.42us,58.00ns,3.31us,10.35us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,151305,299958,4.67s,9.95us,0.00ns,9.97us,151.00ns,9.78us,14.76us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,151305,32205,4.56s,93.04us,0.00ns,93.12us,566.00ns,92.38us,112.52us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,151305,578605,4.73s,5.11us,0.00ns,5.15us,391.00ns,4.65us,11.63us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,570164,4.83s,5.09us,0.00ns,5.23us,285.00ns,4.89us,23.00us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,151305,204576,4.62s,14.17us,0.00ns,14.63us,2.00us,10.88us,25.19us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,151305,210195,4.62s,13.92us,0.00ns,14.24us,1.75us,10.82us,23.70us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,151305,741558,4.83s,3.99us,0.00ns,4.02us,103.00ns,3.88us,10.97us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,151305,126331,4.62s,23.98us,0.00ns,23.71us,819.00ns,22.67us,32.34us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,151305,125882,4.57s,24.01us,0.00ns,23.80us,807.00ns,22.52us,32.10us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,835748,4.89s,3.53us,0.00ns,3.56us,81.00ns,3.38us,11.15us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,872350,4.99s,3.40us,0.00ns,3.41us,67.00ns,3.27us,8.28us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,151305,326951,4.67s,9.08us,0.00ns,9.14us,451.00ns,8.33us,17.11us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,151305,32204,4.56s,93.06us,0.00ns,93.12us,513.00ns,92.44us,112.58us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,151305,589649,4.83s,5.10us,0.00ns,5.06us,313.00ns,4.52us,12.98us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,571822,4.73s,5.09us,0.00ns,5.22us,305.00ns,4.85us,11.98us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,151305,192527,4.62s,14.77us,0.00ns,15.55us,3.13us,9.52us,27.34us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,151305,192285,4.62s,14.81us,0.00ns,15.57us,3.13us,9.32us,26.08us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,500100,114261,4.57s,26.21us,0.00ns,26.22us,230.00ns,26.00us,50.22us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,500100,51959,4.56s,60.10us,0.00ns,57.70us,2.77us,54.08us,78.98us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,500100,52235,4.56s,60.11us,0.00ns,57.40us,3.03us,54.08us,80.15us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,257564,4.67s,11.66us,0.00ns,11.62us,214.00ns,11.31us,30.48us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,259911,4.62s,11.42us,0.00ns,11.51us,196.00ns,11.28us,20.77us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,500100,12975,4.51s,216.30us,0.00ns,231.20us,39.22us,216.27us,387.07us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,500100,9764,4.51s,306.87us,0.00ns,307.22us,1.55us,305.33us,353.54us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,500100,14991,4.51s,200.20us,0.00ns,200.10us,3.44us,197.73us,247.33us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,500100,276335,4.62s,10.77us,0.00ns,10.82us,132.00ns,10.64us,17.02us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,500100,271636,4.68s,11.09us,0.00ns,11.01us,212.00ns,10.64us,18.34us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,500100,13934,4.51s,216.30us,0.00ns,215.27us,14.62us,208.26us,343.09us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,500100,13786,4.51s,216.32us,0.00ns,217.58us,11.11us,208.30us,340.25us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,500100,4508,4.51s,664.95us,0.00ns,665.58us,7.36us,653.10us,693.49us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,500100,3789,4.51s,791.27us,0.00ns,791.78us,3.44us,786.42us,859.03us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,500100,8406,4.51s,350.87us,0.00ns,356.88us,14.65us,349.07us,407.23us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,1855,4.51s,1.62ms,0.00ns,1.62ms,20.79us,1.55ms,1.75ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,10570,4.51s,269.45us,0.00ns,283.81us,23.88us,269.28us,364.97us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,500100,14983,4.51s,198.94us,0.00ns,200.21us,6.91us,198.19us,306.49us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,500100,14511,4.51s,204.59us,0.00ns,206.72us,5.00us,192.28us,262.50us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,500100,14479,4.51s,206.77us,0.00ns,207.17us,1.61us,206.65us,237.01us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,500100,2728,4.51s,1.09ms,0.00ns,1.10ms,35.95us,1.06ms,1.26ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,500100,11073,4.51s,269.20us,0.00ns,270.90us,5.76us,259.55us,310.67us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1001,1000000,637.74ms,81.00ns,0.00ns,82.00ns,12.00ns,78.00ns,9.11us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,827.88ms,142.00ns,0.00ns,138.00ns,14.00ns,127.00ns,6.27us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,778.18ms,130.00ns,0.00ns,133.00ns,11.00ns,125.00ns,2.04us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,1000000,576.72ms,60.00ns,0.00ns,60.00ns,9.00ns,55.00ns,5.27us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,577.21ms,40.00ns,0.00ns,40.00ns,6.00ns,37.00ns,1.96us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.38s,448.00ns,0.00ns,449.00ns,20.00ns,443.00ns,2.61us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.73s,620.00ns,0.00ns,621.00ns,25.00ns,605.00ns,7.84us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.28s,411.00ns,0.00ns,411.00ns,20.00ns,401.00ns,6.00us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1001,1000000,526.59ms,31.00ns,0.00ns,31.00ns,6.00ns,27.00ns,2.04us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1001,1000000,527.05ms,28.00ns,0.00ns,29.00ns,5.00ns,26.00ns,2.35us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1001,1000000,1.38s,457.00ns,0.00ns,455.00ns,23.00ns,438.00ns,7.89us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1001,1000000,1.38s,458.00ns,0.00ns,459.00ns,24.00ns,453.00ns,2.39us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1001,1000000,3.24s,1.35us,0.00ns,1.35us,35.00ns,1.33us,5.00us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,3.54s,1.55us,0.00ns,1.55us,38.00ns,1.53us,10.12us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,1.94s,731.00ns,0.00ns,741.00ns,39.00ns,716.00ns,7.29us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,958026,5.04s,3.09us,0.00ns,3.10us,70.00ns,2.97us,11.29us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,1.63s,565.00ns,0.00ns,583.00ns,40.00ns,557.00ns,4.85us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.33s,417.00ns,0.00ns,418.00ns,20.00ns,412.00ns,6.24us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.38s,415.00ns,0.00ns,418.00ns,20.00ns,391.00ns,2.33us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.33s,425.00ns,0.00ns,426.00ns,21.00ns,419.00ns,7.45us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1001,1000000,4.39s,2.28us,0.00ns,2.32us,87.00ns,2.18us,8.52us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1001,1000000,1.68s,571.00ns,0.00ns,574.00ns,27.00ns,546.00ns,4.93us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,550004,33378,4.56s,92.05us,0.00ns,89.84us,3.06us,84.06us,104.16us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,550004,28696,4.56s,104.69us,0.00ns,104.52us,2.10us,99.67us,117.58us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,550004,28754,4.56s,104.61us,1.00ns,104.30us,2.66us,99.02us,114.32us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,550004,21089,4.51s,147.34us,0.00ns,142.22us,6.87us,131.10us,219.92us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,550004,21140,4.51s,147.14us,0.00ns,141.88us,8.13us,131.01us,219.91us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,550004,37234,4.56s,81.19us,0.00ns,80.53us,2.98us,74.86us,103.28us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,550004,8866,4.51s,337.91us,0.00ns,338.36us,1.71us,336.12us,367.63us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,550004,13702,4.51s,219.20us,0.00ns,218.93us,1.35us,217.45us,249.00us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,550004,37391,4.56s,79.11us,0.00ns,80.19us,3.58us,73.54us,93.62us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,550004,38061,4.56s,77.22us,0.00ns,78.78us,3.26us,73.20us,95.15us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,550004,49022,4.56s,60.28us,0.00ns,61.16us,2.22us,59.94us,77.25us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,550004,49667,4.56s,60.29us,0.00ns,60.37us,373.00ns,59.92us,66.96us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,720057,69614,4.56s,43.02us,0.00ns,43.06us,228.00ns,42.99us,48.52us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,720057,36156,4.56s,86.53us,0.00ns,82.94us,4.30us,77.86us,115.38us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,720057,36126,4.56s,86.52us,0.00ns,83.01us,4.30us,77.86us,115.38us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,77767,4.56s,38.50us,0.00ns,38.54us,238.00ns,38.42us,46.94us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,78433,4.56s,38.16us,0.00ns,38.22us,239.00ns,38.12us,46.08us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,720057,101242,4.57s,29.34us,0.00ns,29.60us,772.00ns,29.32us,41.33us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,720057,6755,4.51s,443.78us,0.00ns,444.14us,1.27us,441.26us,473.20us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,720057,11844,4.51s,252.75us,4.00ns,253.27us,2.51us,228.82us,265.85us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,11835,4.51s,253.65us,0.00ns,253.47us,2.26us,250.89us,267.02us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,720057,139097,4.62s,21.51us,0.00ns,21.54us,154.00ns,21.47us,28.57us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,720057,138552,4.57s,21.68us,0.00ns,21.62us,201.00ns,21.40us,30.20us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,720057,2857,4.51s,1.04ms,0.00ns,1.05ms,14.46us,1.04ms,1.09ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,720057,612,4.51s,4.90ms,2.00ns,4.90ms,9.46us,4.89ms,5.00ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,720057,613,4.51s,4.90ms,0.00ns,4.90ms,13.27us,4.89ms,5.03ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,4773,4.51s,625.32us,0.00ns,628.58us,18.36us,601.15us,829.93us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,4782,4.51s,624.81us,0.00ns,627.43us,17.23us,600.75us,702.00us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,720057,6446,4.51s,463.15us,0.00ns,465.41us,5.93us,462.42us,501.94us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,720057,6676,4.51s,451.51us,0.00ns,449.40us,4.48us,441.24us,496.74us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,720057,2181,4.51s,1.38ms,0.00ns,1.38ms,11.63us,1.35ms,1.41ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,2212,4.51s,1.36ms,7.00ns,1.36ms,13.33us,1.33ms,1.40ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,720057,6480,4.51s,462.30us,0.00ns,462.93us,2.17us,439.49us,481.11us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,720057,6436,4.51s,470.66us,0.00ns,466.13us,9.26us,447.54us,486.15us\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,,191,4.56s,15.62ms,0.00ns,15.72ms,294.64us,15.45ms,17.87ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,,217,4.56s,13.82ms,0.00ns,13.83ms,26.49us,13.78ms,13.93ms\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1000,28600,4.56s,103.60us,1.00ns,104.86us,3.38us,98.09us,121.27us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1000,31433,4.56s,96.34us,0.00ns,95.40us,2.29us,89.94us,108.25us\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,806771,167,4.56s,17.64ms,0.00ns,18.02ms,485.98us,17.58ms,18.66ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,806771,154,4.56s,19.33ms,594.00ns,19.56ms,438.53us,19.25ms,20.40ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,19673,4.51s,152.21us,0.00ns,152.46us,4.86us,143.80us,176.01us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,23721,4.56s,126.54us,0.00ns,126.44us,2.88us,121.64us,145.96us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,23966,4.56s,124.87us,1.00ns,125.15us,3.46us,119.76us,136.90us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,76994,4.56s,38.80us,0.00ns,38.93us,545.00ns,37.79us,46.76us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,175048,4.62s,16.84us,0.00ns,17.10us,533.00ns,16.27us,34.38us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,13640,4.51s,220.04us,1.00ns,219.91us,5.62us,200.27us,257.60us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7777,4.51s,385.23us,0.00ns,385.72us,1.60us,384.02us,415.12us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,11961,4.51s,249.96us,0.00ns,250.79us,1.34us,249.72us,296.60us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,9474,4.51s,316.79us,0.00ns,316.62us,7.57us,287.18us,339.17us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,9663,4.51s,310.22us,0.00ns,310.46us,8.71us,285.42us,336.92us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,11290,4.51s,264.97us,0.00ns,265.69us,2.35us,262.36us,290.02us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,16858,4.51s,177.42us,1.00ns,177.93us,3.16us,170.99us,192.12us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,18075,4.51s,165.32us,0.00ns,165.95us,4.00us,159.07us,180.67us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,18693,4.51s,160.26us,0.00ns,160.46us,3.35us,155.01us,196.99us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,52037,4.56s,56.71us,0.00ns,57.62us,2.91us,52.24us,81.12us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,11599,4.51s,258.96us,0.00ns,258.62us,6.23us,236.58us,293.03us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7326,4.51s,408.99us,0.00ns,409.50us,1.76us,407.40us,436.81us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,10672,4.51s,281.21us,8.00ns,281.08us,5.30us,273.06us,312.75us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,7598,4.51s,395.02us,1.00ns,394.85us,6.65us,370.71us,413.38us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,7988,4.51s,376.09us,1.00ns,375.54us,9.55us,298.73us,417.39us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,7633,4.51s,404.22us,0.00ns,393.01us,12.52us,377.92us,417.66us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,1948,4.51s,1.54ms,2.00ns,1.54ms,7.58us,1.52ms,1.60ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3005,4.51s,0.99ms,0.00ns,1.00ms,27.56us,0.97ms,1.10ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,2506,4.51s,1.20ms,0.00ns,1.20ms,3.63us,1.19ms,1.22ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,6274,4.51s,454.46us,8.00ns,478.16us,50.98us,431.48us,565.66us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,3263,4.51s,908.72us,0.00ns,919.43us,23.46us,877.98us,0.98ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,2980,4.51s,1.00ms,5.00ns,1.01ms,13.18us,0.98ms,1.06ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,3384,4.51s,884.03us,4.00ns,886.66us,18.18us,794.39us,0.96ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,2015,4.51s,1.48ms,0.00ns,1.49ms,44.94us,1.41ms,1.74ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,2865,4.51s,1.04ms,0.00ns,1.05ms,16.42us,0.99ms,1.15ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,14297,4.51s,207.91us,0.00ns,209.81us,4.56us,204.37us,234.74us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,18894,4.51s,157.53us,0.00ns,158.75us,3.93us,152.86us,172.41us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,19240,4.51s,155.02us,0.00ns,155.90us,3.84us,150.49us,170.46us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,57209,4.56s,52.53us,0.00ns,52.40us,750.00ns,50.87us,60.74us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,140739,4.62s,21.55us,0.00ns,21.28us,0.99us,18.77us,28.87us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,6832,4.51s,439.75us,0.00ns,439.12us,2.98us,433.64us,474.88us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7814,4.51s,383.65us,0.00ns,383.90us,1.48us,382.25us,417.23us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,11874,4.51s,252.62us,0.00ns,252.62us,922.00ns,250.66us,272.06us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,5834,4.51s,513.65us,1.00ns,514.22us,2.81us,502.48us,541.69us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,6027,4.51s,497.52us,0.00ns,497.80us,2.43us,485.55us,518.57us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,10628,4.51s,282.04us,0.00ns,282.26us,1.15us,280.16us,297.04us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,9180,4.51s,325.24us,0.00ns,326.78us,5.28us,315.09us,345.21us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,9474,4.51s,316.03us,0.00ns,316.64us,4.96us,306.49us,335.92us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,25673,4.51s,117.29us,0.00ns,116.82us,2.41us,111.52us,141.02us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,66157,4.56s,44.31us,0.00ns,45.31us,2.02us,42.48us,54.89us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,6286,4.51s,476.21us,1.00ns,477.27us,2.28us,474.53us,519.67us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7429,4.51s,403.45us,0.00ns,403.81us,1.35us,402.06us,437.89us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,11302,4.51s,264.46us,0.00ns,265.42us,2.66us,263.88us,314.54us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,4990,4.51s,599.34us,1.00ns,601.26us,9.89us,585.21us,637.37us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,5269,4.51s,567.29us,0.00ns,569.36us,8.38us,554.21us,601.32us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,14140,4.51s,220.51us,0.00ns,212.13us,11.62us,194.15us,243.91us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,3506,4.51s,855.76us,7.00ns,855.85us,8.58us,831.60us,925.89us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,4843,4.51s,613.96us,0.00ns,619.45us,16.85us,596.94us,675.57us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,4894,4.51s,612.27us,0.00ns,613.03us,1.98us,610.32us,631.38us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,12754,4.51s,220.25us,0.00ns,235.20us,21.46us,218.98us,292.23us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,4801,4.51s,620.48us,0.00ns,624.88us,18.09us,601.79us,683.01us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,4252,4.51s,704.29us,0.00ns,705.55us,6.81us,690.29us,773.51us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,4873,4.51s,616.62us,0.00ns,615.68us,15.32us,538.33us,686.42us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,3470,4.51s,854.32us,32.00ns,864.68us,28.76us,824.34us,1.03ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,4729,4.51s,632.77us,0.00ns,634.39us,7.86us,618.27us,685.03us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,21594,4.51s,136.73us,0.00ns,138.90us,3.54us,135.13us,152.41us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,30591,4.56s,99.82us,0.00ns,98.04us,3.32us,93.17us,110.29us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,31297,4.56s,97.31us,0.00ns,95.82us,3.26us,90.55us,104.44us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,72931,4.56s,40.95us,0.00ns,41.10us,497.00ns,40.29us,47.07us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,143970,4.62s,20.68us,0.00ns,20.80us,506.00ns,19.96us,27.46us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,22487,4.56s,132.94us,0.00ns,133.38us,3.07us,127.10us,161.18us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7494,4.51s,398.60us,0.00ns,400.30us,3.31us,397.07us,444.41us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,11882,4.51s,252.04us,0.00ns,252.46us,1.79us,251.04us,299.06us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,20503,4.51s,146.26us,0.00ns,146.29us,2.46us,138.86us,156.49us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,21538,4.51s,139.01us,0.00ns,139.26us,2.69us,132.49us,175.49us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,13838,4.51s,216.14us,0.00ns,216.77us,2.31us,212.14us,237.11us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,18092,4.51s,165.74us,0.00ns,165.79us,3.16us,159.13us,178.70us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,19092,4.51s,156.79us,0.00ns,157.11us,3.80us,149.83us,170.11us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,33161,4.56s,90.22us,0.00ns,90.43us,1.38us,87.71us,108.58us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,73428,4.56s,40.24us,0.00ns,40.82us,1.82us,37.55us,50.70us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,14197,4.51s,210.63us,0.00ns,211.29us,4.54us,200.20us,254.57us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7467,4.51s,401.27us,0.00ns,401.78us,1.56us,399.95us,427.05us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,11352,4.51s,262.89us,3.00ns,264.24us,2.60us,261.04us,294.28us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,10772,4.51s,278.78us,0.00ns,278.47us,3.06us,268.88us,292.60us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,11453,4.51s,262.04us,0.00ns,261.91us,3.37us,241.94us,284.10us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,30006,4.56s,101.54us,0.00ns,99.95us,4.12us,92.84us,127.49us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,7781,4.51s,385.46us,0.00ns,385.55us,3.79us,374.35us,402.52us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,9690,4.51s,308.18us,2.00ns,309.57us,6.24us,298.72us,334.99us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,11169,4.51s,267.27us,0.00ns,268.58us,4.49us,265.84us,301.70us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,23814,4.56s,122.24us,0.00ns,125.95us,5.88us,121.31us,156.56us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,6241,4.51s,475.41us,0.00ns,480.70us,12.25us,466.74us,522.91us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,6047,4.51s,496.01us,0.00ns,496.12us,2.82us,487.40us,540.40us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,8128,4.51s,368.12us,0.00ns,369.09us,4.36us,350.19us,423.35us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,5719,4.51s,522.27us,0.00ns,524.54us,8.25us,513.22us,580.34us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,6738,4.51s,444.27us,0.00ns,445.25us,4.16us,437.38us,486.70us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,77828,4.56s,38.00us,0.00ns,38.51us,2.95us,34.16us,53.83us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41970,4.56s,74.20us,0.00ns,71.45us,3.60us,66.84us,84.23us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,42699,4.56s,66.88us,0.00ns,70.22us,3.67us,66.83us,79.84us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,223629,4.62s,13.37us,0.00ns,13.38us,123.00ns,13.23us,18.24us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,224173,4.62s,13.33us,0.00ns,13.35us,130.00ns,13.19us,18.31us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,10499,4.51s,285.05us,0.00ns,285.72us,7.45us,264.15us,332.15us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7948,4.51s,377.15us,0.00ns,377.45us,1.44us,375.98us,415.59us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12235,4.51s,245.55us,0.00ns,245.17us,3.15us,242.53us,292.86us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,219752,4.62s,13.56us,0.00ns,13.62us,225.00ns,13.14us,21.64us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,214415,4.62s,13.96us,0.00ns,13.96us,171.00ns,13.33us,21.35us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,9394,4.51s,318.49us,0.00ns,319.33us,10.46us,293.20us,351.71us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,9362,4.51s,319.56us,1.00ns,320.41us,10.11us,295.49us,348.36us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,63181,4.57s,49.30us,0.00ns,47.44us,3.34us,40.59us,55.71us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,33602,4.57s,86.96us,0.00ns,89.24us,3.37us,85.38us,100.24us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,33294,4.57s,91.27us,0.00ns,90.07us,3.20us,85.11us,100.77us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,210029,4.62s,14.09us,0.00ns,14.25us,389.00ns,13.83us,22.22us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,214957,4.62s,13.91us,0.00ns,13.92us,122.00ns,13.65us,18.78us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,20205,4.56s,147.81us,0.00ns,148.45us,4.29us,135.07us,172.64us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7830,4.51s,383.73us,0.00ns,383.11us,3.33us,376.04us,416.60us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12247,4.51s,245.48us,0.00ns,244.94us,3.78us,242.52us,293.39us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,217740,4.62s,13.87us,0.00ns,13.74us,307.00ns,13.28us,19.26us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,222203,4.62s,13.33us,0.00ns,13.47us,253.00ns,13.12us,22.13us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,14276,4.51s,209.63us,0.00ns,210.11us,8.62us,184.13us,242.58us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,14311,4.51s,209.12us,0.00ns,209.60us,7.93us,183.62us,239.58us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,57928,4.57s,51.66us,0.00ns,51.75us,415.00ns,51.19us,57.30us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,42138,4.57s,74.30us,0.00ns,71.16us,3.66us,66.93us,81.71us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,42118,4.57s,74.29us,0.00ns,71.19us,3.64us,66.92us,79.99us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,219900,4.62s,13.75us,0.00ns,13.61us,249.00ns,13.22us,21.76us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,221854,4.62s,13.35us,0.00ns,13.49us,238.00ns,13.19us,21.55us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,20674,4.52s,144.72us,1.00ns,145.08us,3.53us,132.30us,175.11us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7952,4.51s,376.90us,0.00ns,377.23us,1.63us,376.32us,424.03us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12227,4.51s,245.55us,0.00ns,245.34us,3.83us,242.52us,293.81us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,226650,4.62s,13.18us,0.00ns,13.20us,118.00ns,12.76us,17.09us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,220632,4.62s,13.64us,0.00ns,13.57us,242.00ns,12.06us,19.43us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,15900,4.51s,189.25us,0.00ns,188.65us,8.60us,137.32us,231.02us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,15813,4.51s,189.65us,0.00ns,189.69us,8.49us,143.59us,232.21us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,11997,4.51s,249.71us,0.00ns,250.05us,1.24us,249.35us,303.00us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,21036,4.51s,142.03us,0.00ns,142.58us,3.76us,137.36us,159.89us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,20910,4.51s,142.50us,0.00ns,143.44us,4.15us,137.54us,158.78us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,224233,4.62s,13.33us,0.00ns,13.35us,125.00ns,13.20us,17.59us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,218208,4.62s,13.76us,0.00ns,13.72us,221.00ns,13.20us,18.09us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,6605,4.51s,453.02us,0.00ns,454.22us,8.81us,430.48us,509.13us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7865,4.51s,380.96us,0.00ns,381.41us,1.46us,379.76us,420.95us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12244,4.51s,245.55us,0.00ns,244.99us,1.65us,242.53us,290.60us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,223025,4.62s,13.34us,0.00ns,13.42us,200.00ns,13.14us,21.22us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,226502,4.62s,13.18us,0.00ns,13.21us,134.00ns,13.05us,19.78us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,6991,4.51s,430.19us,0.00ns,429.12us,8.08us,394.83us,467.23us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,6934,4.51s,433.25us,1.00ns,432.67us,7.38us,401.30us,474.24us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,526.82ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.76us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,526.87ms,28.00ns,0.00ns,28.00ns,7.00ns,26.00ns,2.77us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,526.95ms,23.00ns,0.00ns,23.00ns,6.00ns,20.00ns,3.00us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,526.85ms,26.00ns,0.00ns,26.00ns,8.00ns,24.00ns,5.21us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,526.94ms,24.00ns,0.00ns,24.00ns,18.00ns,21.00ns,17.82us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,476.76ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,2.27us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.70ms,25.00ns,0.00ns,25.00ns,5.00ns,22.00ns,2.12us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,526.60ms,22.00ns,0.00ns,22.00ns,5.00ns,20.00ns,2.51us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,476.57ms,17.00ns,0.00ns,17.00ns,13.00ns,15.00ns,12.25us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,476.25ms,12.00ns,0.00ns,12.00ns,19.00ns,10.00ns,18.90us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,526.56ms,27.00ns,0.00ns,27.00ns,6.00ns,25.00ns,2.65us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,526.85ms,27.00ns,0.00ns,28.00ns,6.00ns,25.00ns,2.17us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.17ms,22.00ns,0.00ns,22.00ns,19.00ns,20.00ns,12.02us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,526.85ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,2.14us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,536.92ms,23.00ns,0.00ns,23.00ns,5.00ns,20.00ns,2.28us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,526.79ms,26.00ns,0.00ns,26.00ns,6.00ns,23.00ns,3.01us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.25ms,24.00ns,0.00ns,25.00ns,5.00ns,22.00ns,2.40us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,476.91ms,13.00ns,0.00ns,13.00ns,33.00ns,11.00ns,21.99us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.96ms,25.00ns,0.00ns,26.00ns,9.00ns,23.00ns,3.74us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.16ms,22.00ns,0.00ns,22.00ns,5.00ns,20.00ns,2.08us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,476.74ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,2.23us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,476.94ms,13.00ns,0.00ns,13.00ns,4.00ns,10.00ns,1.94us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,526.89ms,27.00ns,0.00ns,27.00ns,106.00ns,24.00ns,105.67us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,526.90ms,26.00ns,0.00ns,27.00ns,3.00ns,24.00ns,1.72us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.08ms,22.00ns,0.00ns,22.00ns,5.00ns,20.00ns,2.38us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.02ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.15us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,526.73ms,23.00ns,0.00ns,23.00ns,7.00ns,20.00ns,3.71us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,526.82ms,26.00ns,0.00ns,26.00ns,5.00ns,24.00ns,2.12us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.14ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.33us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,476.90ms,13.00ns,0.00ns,13.00ns,18.00ns,10.00ns,17.47us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.92ms,26.00ns,0.00ns,26.00ns,5.00ns,23.00ns,2.39us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,526.92ms,22.00ns,0.00ns,22.00ns,20.00ns,20.00ns,19.25us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.17ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.03us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,476.91ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,1.70us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,526.87ms,24.00ns,0.00ns,24.00ns,3.00ns,21.00ns,1.90us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,526.98ms,24.00ns,0.00ns,24.00ns,11.00ns,21.00ns,9.68us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,526.86ms,23.00ns,0.00ns,23.00ns,5.00ns,19.00ns,2.29us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,477.00ms,28.00ns,0.00ns,28.00ns,13.00ns,26.00ns,7.36us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.00ms,23.00ns,0.00ns,23.00ns,5.00ns,20.00ns,2.79us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,526.83ms,28.00ns,0.00ns,28.00ns,97.00ns,25.00ns,96.36us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,526.99ms,24.00ns,0.00ns,24.00ns,6.00ns,22.00ns,2.03us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,527.16ms,19.00ns,0.00ns,19.00ns,19.00ns,16.00ns,17.86us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.87ms,27.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.06us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.07ms,22.00ns,0.00ns,22.00ns,4.00ns,20.00ns,2.67us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,476.86ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.25us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,476.85ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,2.30us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,526.85ms,25.00ns,0.00ns,25.00ns,12.00ns,22.00ns,9.92us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,527.12ms,25.00ns,0.00ns,25.00ns,6.00ns,22.00ns,2.42us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,26898,4.56s,109.99us,0.00ns,111.50us,2.63us,108.03us,142.23us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13575,4.51s,220.01us,0.00ns,220.96us,7.10us,207.72us,242.75us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13600,4.51s,219.45us,1.00ns,220.56us,5.88us,207.53us,238.63us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,217659,4.62s,13.73us,0.00ns,13.75us,128.00ns,13.59us,17.71us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,218933,4.62s,13.66us,0.00ns,13.67us,129.00ns,13.50us,23.35us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,14447,4.51s,207.52us,0.00ns,207.63us,645.00ns,206.29us,239.97us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7961,4.51s,376.80us,0.00ns,376.85us,1.77us,374.48us,411.59us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,68039,4.56s,42.57us,0.00ns,44.06us,2.97us,40.75us,65.88us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,65135,4.56s,44.76us,0.00ns,46.02us,2.77us,42.61us,66.30us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,13326,4.51s,225.66us,0.00ns,225.09us,2.91us,215.99us,241.02us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,13659,4.51s,217.34us,0.00ns,219.61us,4.49us,215.59us,255.00us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,527.18ms,26.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.60us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,526.94ms,26.00ns,0.00ns,26.00ns,5.00ns,24.00ns,2.51us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,526.92ms,25.00ns,0.00ns,25.00ns,5.00ns,22.00ns,2.25us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,577.22ms,35.00ns,0.00ns,35.00ns,5.00ns,32.00ns,2.07us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,527.24ms,24.00ns,0.00ns,24.00ns,18.00ns,22.00ns,13.35us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,527.20ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,2.84us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,527.24ms,31.00ns,0.00ns,31.00ns,6.00ns,28.00ns,2.38us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,528.76ms,15.00ns,0.00ns,15.00ns,6.00ns,13.00ns,3.44us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,527.05ms,13.00ns,0.00ns,13.00ns,3.00ns,10.00ns,2.32us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,577.05ms,39.00ns,0.00ns,39.00ns,6.00ns,36.00ns,2.08us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,577.10ms,39.00ns,0.00ns,39.00ns,6.00ns,36.00ns,1.88us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,104182,4.57s,27.47us,0.00ns,28.76us,2.24us,26.48us,52.13us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,35732,4.56s,86.12us,0.00ns,83.92us,3.41us,79.98us,104.99us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,35438,4.56s,86.25us,0.00ns,84.62us,3.54us,80.05us,110.08us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,220817,4.62s,13.54us,0.00ns,13.55us,126.00ns,13.41us,18.88us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,213823,4.62s,14.07us,0.00ns,14.00us,249.00ns,13.38us,19.27us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,39938,4.56s,75.70us,0.00ns,75.08us,1.51us,72.40us,94.58us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7959,4.51s,376.51us,0.00ns,376.93us,2.14us,374.61us,424.26us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,12235,4.51s,245.58us,0.00ns,245.17us,2.78us,242.57us,294.34us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,215313,4.62s,13.91us,0.00ns,13.90us,284.00ns,13.42us,22.30us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,212665,4.62s,14.17us,0.00ns,14.07us,199.00ns,13.67us,36.14us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,32564,4.56s,91.17us,0.00ns,92.09us,2.96us,88.29us,109.88us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,31781,4.56s,93.75us,0.00ns,94.36us,3.10us,88.47us,113.43us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,527.00ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.35us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,526.90ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.73us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,526.74ms,23.00ns,0.00ns,23.00ns,10.00ns,20.00ns,8.27us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.11ms,28.00ns,0.00ns,28.00ns,22.00ns,25.00ns,21.08us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,527.00ms,23.00ns,0.00ns,23.00ns,4.00ns,21.00ns,1.99us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,476.71ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.31us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,527.16ms,26.00ns,0.00ns,26.00ns,14.00ns,24.00ns,10.23us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,526.87ms,23.00ns,0.00ns,24.00ns,15.00ns,21.00ns,12.87us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,526.58ms,17.00ns,0.00ns,17.00ns,6.00ns,16.00ns,3.57us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,477.09ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,2.24us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,576.80ms,31.00ns,0.00ns,32.00ns,8.00ns,29.00ns,5.54us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,526.99ms,31.00ns,0.00ns,31.00ns,6.00ns,28.00ns,2.24us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,87379,4.56s,33.80us,0.00ns,34.30us,1.50us,31.10us,47.01us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41050,4.56s,75.73us,0.00ns,73.05us,3.60us,68.47us,85.72us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,40858,4.56s,75.73us,0.00ns,73.39us,3.49us,68.47us,90.66us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,213306,4.62s,14.16us,0.00ns,14.03us,257.00ns,13.60us,18.64us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,215676,4.62s,13.71us,0.00ns,13.88us,259.00ns,13.54us,19.25us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,16395,4.51s,182.03us,0.00ns,182.95us,5.71us,170.37us,233.32us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7939,4.51s,377.13us,0.00ns,377.86us,4.56us,374.54us,424.37us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12269,4.51s,244.48us,0.00ns,244.50us,1.27us,242.55us,278.73us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,220968,4.62s,13.52us,0.00ns,13.54us,130.00ns,13.38us,18.66us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,214571,4.62s,14.01us,0.00ns,13.95us,237.00ns,13.39us,20.45us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,14542,4.51s,206.39us,1.00ns,206.27us,6.12us,187.81us,231.17us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,14636,4.51s,205.18us,1.00ns,204.95us,6.00us,187.37us,230.34us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,59996,4.56s,48.36us,0.00ns,49.97us,3.05us,46.37us,61.46us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41205,4.56s,75.81us,0.00ns,72.77us,3.68us,68.55us,85.24us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,40952,4.56s,75.94us,0.00ns,73.22us,3.58us,68.52us,83.12us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,222570,4.62s,13.43us,0.00ns,13.45us,128.00ns,13.29us,18.94us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,216825,4.62s,13.86us,0.00ns,13.80us,227.00ns,13.26us,18.43us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,17578,4.51s,170.44us,0.00ns,170.64us,4.25us,154.08us,208.24us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7927,4.51s,377.43us,0.00ns,378.44us,5.08us,376.26us,427.16us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12269,4.51s,244.48us,0.00ns,244.49us,1.37us,242.55us,287.90us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,182696,4.57s,16.34us,0.00ns,16.39us,273.00ns,15.92us,25.08us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,219193,4.62s,13.66us,0.00ns,13.65us,148.00ns,13.40us,19.83us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,13866,4.51s,216.48us,1.00ns,216.33us,9.88us,192.19us,246.71us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,13908,4.51s,215.97us,0.00ns,215.67us,9.80us,192.70us,255.64us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,146383,4.62s,22.90us,0.00ns,20.46us,3.27us,15.61us,28.07us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,33262,4.56s,91.44us,0.00ns,90.16us,3.18us,85.47us,99.70us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,33253,4.56s,91.60us,0.00ns,90.18us,3.29us,85.21us,102.83us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,210311,4.62s,14.13us,0.00ns,14.23us,276.00ns,13.96us,22.80us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,211354,4.62s,14.14us,0.00ns,14.16us,138.00ns,13.97us,19.36us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,28698,4.56s,104.41us,0.00ns,104.51us,2.17us,97.42us,122.50us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7949,4.51s,377.17us,0.00ns,377.41us,1.57us,374.54us,420.96us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,134965,4.62s,21.38us,0.00ns,22.19us,2.17us,19.28us,29.74us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,138906,4.62s,21.54us,0.00ns,21.57us,1.18us,20.42us,37.69us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,23474,4.56s,125.00us,0.00ns,127.77us,11.20us,105.88us,174.31us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,23913,4.56s,123.88us,0.00ns,125.42us,10.02us,106.13us,172.32us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,159913,4.62s,18.57us,0.00ns,18.73us,235.00ns,18.46us,23.23us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,37577,4.56s,81.79us,0.00ns,79.80us,3.52us,74.82us,99.10us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,37710,4.56s,81.82us,0.00ns,79.52us,3.50us,74.83us,87.33us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,13258,4.51s,225.77us,0.00ns,226.25us,1.25us,225.58us,237.00us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,13190,4.51s,228.09us,0.00ns,227.42us,2.44us,224.78us,237.42us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,50756,4.56s,58.62us,0.00ns,59.07us,1.39us,56.28us,77.03us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7930,4.51s,377.19us,0.00ns,378.31us,2.84us,375.78us,420.55us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,142625,4.62s,19.84us,0.00ns,21.00us,2.01us,19.26us,33.64us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,123108,4.62s,24.22us,0.00ns,24.33us,2.26us,20.24us,29.58us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,50222,4.56s,59.40us,0.00ns,59.70us,2.03us,55.25us,83.17us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,49628,4.56s,60.26us,0.00ns,60.41us,2.23us,54.63us,80.91us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,91070,4.56s,29.64us,0.00ns,32.91us,3.66us,29.56us,42.88us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41449,4.56s,75.21us,0.00ns,72.34us,3.76us,67.97us,82.67us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41294,4.56s,75.23us,0.00ns,72.61us,3.77us,67.98us,86.87us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,11835,4.51s,252.74us,0.00ns,253.47us,1.80us,252.30us,284.68us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,11887,4.51s,251.94us,0.00ns,252.36us,1.38us,251.63us,282.23us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,51262,4.56s,58.46us,0.00ns,58.49us,502.00ns,56.61us,70.68us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7945,4.51s,377.18us,0.00ns,377.59us,1.54us,375.75us,417.96us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,165916,4.62s,18.02us,0.00ns,18.05us,1.35us,17.30us,31.08us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,155799,4.62s,18.81us,0.00ns,19.22us,1.06us,18.64us,31.44us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,55098,4.56s,54.28us,0.00ns,54.41us,860.00ns,52.36us,63.26us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,56501,4.56s,52.82us,0.00ns,53.06us,1.09us,51.19us,77.71us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.03ms,31.00ns,0.00ns,31.00ns,5.00ns,28.00ns,2.16us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.15ms,38.00ns,0.00ns,38.00ns,6.00ns,36.00ns,2.15us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.05ms,28.00ns,0.00ns,28.00ns,16.00ns,25.00ns,14.78us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,526.92ms,28.00ns,0.00ns,28.00ns,6.00ns,25.00ns,2.79us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,526.83ms,27.00ns,0.00ns,27.00ns,12.00ns,24.00ns,11.46us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,527.02ms,23.00ns,0.00ns,23.00ns,14.00ns,20.00ns,13.18us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.48ms,24.00ns,0.00ns,24.00ns,28.00ns,21.00ns,19.88us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,526.81ms,22.00ns,0.00ns,22.00ns,6.00ns,20.00ns,2.48us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,526.79ms,19.00ns,0.00ns,19.00ns,6.00ns,17.00ns,2.67us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,526.82ms,15.00ns,0.00ns,15.00ns,19.00ns,12.00ns,18.78us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,626.85ms,62.00ns,0.00ns,63.00ns,8.00ns,58.00ns,2.72us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,576.55ms,42.00ns,0.00ns,42.00ns,7.00ns,39.00ns,2.26us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,542.56ms,35.00ns,0.00ns,35.00ns,10.00ns,32.00ns,7.74us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,577.13ms,38.00ns,0.00ns,38.00ns,7.00ns,36.00ns,2.99us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.13ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.80us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.04ms,24.00ns,0.00ns,24.00ns,5.00ns,22.00ns,2.31us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,576.89ms,29.00ns,0.00ns,29.00ns,26.00ns,26.00ns,16.54us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,527.29ms,16.00ns,0.00ns,16.00ns,6.00ns,14.00ns,2.28us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.99ms,23.00ns,0.00ns,23.00ns,3.00ns,21.00ns,1.65us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,526.81ms,22.00ns,0.00ns,22.00ns,5.00ns,20.00ns,1.99us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,526.62ms,17.00ns,0.00ns,17.00ns,5.00ns,15.00ns,2.71us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,526.90ms,16.00ns,0.00ns,16.00ns,2.00ns,14.00ns,1.50us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,576.69ms,41.00ns,0.00ns,41.00ns,7.00ns,38.00ns,2.59us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,526.95ms,29.00ns,0.00ns,29.00ns,6.00ns,27.00ns,2.30us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,34031,4.56s,88.99us,0.00ns,88.12us,1.86us,83.19us,100.21us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13760,4.51s,216.68us,1.00ns,218.01us,5.83us,205.27us,237.07us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13719,4.51s,217.75us,0.00ns,218.65us,6.62us,204.42us,237.42us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,216209,4.62s,13.76us,0.00ns,13.84us,206.00ns,13.61us,20.24us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,219042,4.62s,13.65us,0.00ns,13.67us,107.00ns,13.50us,22.77us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,18155,4.51s,165.03us,0.00ns,165.21us,697.00ns,164.23us,198.24us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7958,4.51s,377.12us,0.00ns,376.98us,1.22us,374.50us,414.25us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,82055,4.56s,35.80us,0.00ns,36.53us,3.11us,31.77us,57.76us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,82423,4.56s,36.29us,0.00ns,36.36us,2.21us,32.99us,56.65us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,15753,4.51s,188.98us,0.00ns,190.41us,4.88us,180.45us,222.93us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,16255,4.51s,182.48us,0.00ns,184.53us,3.66us,181.00us,207.16us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,20103,4.51s,150.16us,0.00ns,149.20us,3.35us,142.28us,175.13us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13540,4.51s,221.00us,0.00ns,221.55us,6.04us,208.76us,239.68us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13553,4.51s,220.18us,0.00ns,221.33us,5.90us,208.22us,241.30us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,218137,4.62s,13.71us,0.00ns,13.72us,103.00ns,13.57us,17.43us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,214103,4.62s,14.10us,0.00ns,13.98us,254.00ns,13.53us,18.59us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,10931,4.51s,270.94us,0.00ns,274.42us,5.09us,266.45us,314.08us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7973,4.51s,376.31us,0.00ns,376.26us,1.52us,374.54us,421.29us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,12282,4.51s,244.48us,0.00ns,244.23us,1.06us,242.53us,261.74us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,215133,4.62s,13.88us,0.00ns,13.91us,152.00ns,13.70us,22.21us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,214499,4.62s,13.94us,0.00ns,13.95us,178.00ns,13.72us,30.73us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,10393,4.51s,288.39us,0.00ns,288.64us,1.24us,286.08us,304.55us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,10215,4.51s,294.11us,0.00ns,293.67us,2.64us,287.70us,324.37us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,526.95ms,39.00ns,0.00ns,39.00ns,7.00ns,37.00ns,5.11us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,527.16ms,32.00ns,0.00ns,33.00ns,6.00ns,29.00ns,2.37us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,526.97ms,29.00ns,0.00ns,29.00ns,80.00ns,26.00ns,72.48us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,527.06ms,37.00ns,0.00ns,37.00ns,6.00ns,35.00ns,2.69us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,526.76ms,28.00ns,0.00ns,28.00ns,11.00ns,26.00ns,9.83us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,526.99ms,36.00ns,0.00ns,36.00ns,13.00ns,26.00ns,11.28us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,526.97ms,31.00ns,0.00ns,31.00ns,7.00ns,28.00ns,2.84us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,526.63ms,18.00ns,0.00ns,18.00ns,5.00ns,15.00ns,2.10us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,527.07ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,2.10us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,627.54ms,84.00ns,0.00ns,86.00ns,11.00ns,81.00ns,5.68us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,577.06ms,57.00ns,0.00ns,57.00ns,8.00ns,54.00ns,2.41us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,527.07ms,37.00ns,0.00ns,37.00ns,6.00ns,35.00ns,2.03us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,526.76ms,38.00ns,0.00ns,39.00ns,13.00ns,36.00ns,10.84us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,526.92ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.29us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,527.21ms,31.00ns,0.00ns,31.00ns,14.00ns,28.00ns,13.29us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,526.88ms,32.00ns,0.00ns,33.00ns,6.00ns,29.00ns,2.52us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,527.11ms,19.00ns,0.00ns,19.00ns,4.00ns,16.00ns,1.92us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,526.90ms,28.00ns,0.00ns,28.00ns,7.00ns,26.00ns,2.66us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,42,1000000,526.77ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.50us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,526.96ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,2.62us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,477.01ms,15.00ns,0.00ns,15.00ns,23.00ns,13.00ns,19.43us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,577.01ms,53.00ns,0.00ns,53.00ns,10.00ns,49.00ns,6.56us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,526.45ms,35.00ns,0.00ns,35.00ns,6.00ns,33.00ns,2.39us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,131826,4.57s,21.93us,0.00ns,22.72us,2.16us,18.28us,33.02us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29360,4.51s,101.92us,12.00ns,102.15us,3.18us,98.22us,111.52us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,29580,4.56s,102.03us,0.00ns,101.39us,3.18us,97.22us,113.86us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,219916,4.62s,13.59us,0.00ns,13.61us,126.00ns,13.44us,21.63us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,221193,4.62s,13.51us,0.00ns,13.53us,130.00ns,13.35us,29.77us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,30936,4.56s,97.19us,0.00ns,96.94us,2.02us,93.59us,127.49us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7952,4.51s,377.21us,0.00ns,377.27us,1.57us,374.56us,409.26us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,137874,4.57s,20.75us,0.00ns,21.72us,2.68us,18.73us,32.43us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,138590,4.62s,20.53us,0.00ns,21.61us,1.92us,19.96us,28.88us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,27497,4.56s,109.11us,0.00ns,109.07us,4.32us,101.10us,129.74us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,28483,4.56s,104.10us,0.00ns,105.29us,3.36us,100.75us,125.77us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,61527,4.56s,48.73us,0.00ns,48.72us,805.00ns,46.75us,56.99us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29265,4.56s,103.42us,0.00ns,102.48us,3.17us,98.06us,117.38us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,29136,4.56s,103.22us,0.00ns,102.93us,3.33us,97.81us,113.19us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,219213,4.62s,13.38us,0.00ns,13.65us,403.00ns,13.22us,19.46us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,222336,4.67s,13.34us,0.00ns,13.46us,237.00ns,13.19us,18.28us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,21692,4.51s,137.64us,1.00ns,138.27us,3.71us,130.37us,239.43us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7951,4.51s,377.14us,0.00ns,377.31us,1.39us,376.10us,404.76us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,12273,4.51s,244.52us,0.00ns,244.43us,1.28us,242.58us,261.00us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,217274,4.62s,13.86us,0.00ns,13.77us,258.00ns,13.17us,18.31us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,208839,4.62s,14.47us,0.00ns,14.33us,281.00ns,13.43us,18.59us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,18340,4.51s,162.23us,0.00ns,163.55us,6.25us,142.32us,195.30us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,18440,4.51s,161.36us,1.00ns,162.65us,6.37us,140.56us,191.77us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,542.98ms,34.00ns,0.00ns,34.00ns,6.00ns,31.00ns,3.68us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,532.75ms,32.00ns,0.00ns,32.00ns,17.00ns,28.00ns,12.46us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,526.92ms,28.00ns,0.00ns,29.00ns,7.00ns,25.00ns,2.33us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,526.96ms,33.00ns,0.00ns,33.00ns,21.00ns,29.00ns,20.40us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,526.92ms,30.00ns,0.00ns,30.00ns,15.00ns,27.00ns,11.45us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,526.93ms,23.00ns,0.00ns,23.00ns,17.00ns,20.00ns,16.07us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,527.19ms,25.00ns,0.00ns,25.00ns,23.00ns,22.00ns,18.67us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,526.83ms,17.00ns,0.00ns,17.00ns,6.00ns,14.00ns,2.38us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,527.16ms,15.00ns,0.00ns,15.00ns,6.00ns,13.00ns,2.47us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,627.28ms,76.00ns,0.00ns,78.00ns,9.00ns,71.00ns,2.48us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,576.67ms,49.00ns,0.00ns,50.00ns,12.00ns,46.00ns,8.77us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,527.26ms,35.00ns,0.00ns,35.00ns,5.00ns,32.00ns,2.03us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,526.87ms,38.00ns,0.00ns,38.00ns,6.00ns,36.00ns,3.29us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,526.55ms,28.00ns,0.00ns,28.00ns,11.00ns,24.00ns,9.85us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,526.69ms,25.00ns,0.00ns,25.00ns,6.00ns,23.00ns,2.55us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,577.13ms,34.00ns,0.00ns,34.00ns,24.00ns,31.00ns,15.06us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,526.58ms,19.00ns,0.00ns,19.00ns,24.00ns,17.00ns,19.26us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,476.48ms,22.00ns,0.00ns,22.00ns,12.00ns,20.00ns,11.62us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,526.43ms,24.00ns,0.00ns,24.00ns,23.00ns,21.00ns,18.02us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,476.42ms,18.00ns,0.00ns,18.00ns,6.00ns,16.00ns,4.76us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,476.43ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.19us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,576.56ms,47.00ns,0.00ns,47.00ns,25.00ns,44.00ns,14.69us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,526.69ms,33.00ns,0.00ns,33.00ns,11.00ns,31.00ns,9.28us\n"
  },
  {
    "path": "benchmarks/record/x86_64/2023-08-17.csv",
    "content": "name,model,rebar_version,engine,engine_version,err,haystack_len,iters,total,median,mad,mean,stddev,min,max\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,16523,4.51s,174.49us,0.00ns,181.53us,11.88us,173.07us,209.68us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,16596,4.51s,179.17us,0.00ns,180.74us,3.79us,178.27us,201.57us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,17833,4.51s,167.95us,0.00ns,168.20us,1.17us,166.82us,182.67us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,6358,4.51s,471.39us,1.00ns,471.86us,3.77us,463.93us,510.69us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,7191,4.51s,414.99us,0.00ns,417.15us,11.17us,408.43us,487.44us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,13609,4.56s,220.85us,0.00ns,220.13us,2.68us,214.88us,244.05us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,15909,4.51s,190.69us,0.00ns,188.55us,2.94us,182.59us,202.25us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,17878,4.51s,162.88us,0.00ns,167.78us,6.37us,161.42us,184.65us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,18079,4.51s,163.05us,0.00ns,165.90us,5.19us,161.94us,187.16us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,7168,4.51s,414.03us,1.00ns,418.52us,15.88us,399.00us,483.04us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,15983,4.51s,187.68us,0.00ns,187.67us,1.22us,184.99us,197.95us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,9986,4.51s,299.86us,0.00ns,300.41us,2.21us,297.17us,317.85us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,3394,4.51s,880.89us,1.00ns,883.97us,10.71us,871.38us,934.08us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,4654,4.51s,653.72us,6.00ns,644.61us,29.23us,602.02us,811.07us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,8909,4.56s,345.57us,0.00ns,336.41us,11.03us,323.36us,366.42us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,9191,4.51s,322.15us,0.00ns,326.37us,5.83us,321.54us,342.31us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,10102,4.51s,296.65us,0.00ns,296.95us,1.15us,295.22us,324.00us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,8488,4.51s,352.76us,0.00ns,353.41us,2.95us,351.67us,382.78us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,6209,4.51s,482.87us,0.00ns,483.16us,1.22us,477.93us,498.22us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,2251,4.51s,1.33ms,0.00ns,1.33ms,6.53us,1.32ms,1.41ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,3619,4.51s,823.41us,0.00ns,829.04us,25.55us,810.41us,1.04ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,6565,4.56s,464.96us,0.00ns,456.65us,12.56us,437.47us,476.36us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,5511,4.51s,544.00us,0.00ns,544.39us,1.24us,541.25us,557.23us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,6231,4.51s,480.78us,0.00ns,481.44us,3.29us,477.44us,524.12us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,5670,4.51s,528.84us,1.00ns,529.09us,0.99us,527.77us,540.57us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,882.39ms,186.00ns,0.00ns,186.00ns,12.00ns,182.00ns,2.17us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,829.34ms,187.00ns,0.00ns,188.00ns,13.00ns,183.00ns,8.10us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,829.29ms,171.00ns,0.00ns,172.00ns,15.00ns,167.00ns,8.85us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,779.50ms,144.00ns,0.00ns,144.00ns,13.00ns,138.00ns,7.07us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,779.75ms,159.00ns,0.00ns,160.00ns,13.00ns,153.00ns,4.28us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.73s,294.00ns,0.00ns,296.00ns,15.00ns,285.00ns,2.63us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,879.96ms,190.00ns,0.00ns,191.00ns,14.00ns,185.00ns,6.94us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,830.00ms,168.00ns,0.00ns,169.00ns,12.00ns,165.00ns,7.48us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,829.50ms,170.00ns,0.00ns,170.00ns,12.00ns,165.00ns,5.03us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,830.29ms,159.00ns,0.00ns,160.00ns,12.00ns,153.00ns,2.81us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,880.06ms,207.00ns,0.00ns,207.00ns,12.00ns,203.00ns,2.26us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,1.13s,320.00ns,0.00ns,320.00ns,21.00ns,314.00ns,13.24us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,1.03s,260.00ns,0.00ns,261.00ns,17.00ns,252.00ns,4.73us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.03s,262.00ns,0.00ns,240.00ns,30.00ns,199.00ns,2.92us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,2.03s,436.00ns,0.00ns,438.00ns,19.00ns,428.00ns,5.85us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,1.13s,339.00ns,0.00ns,340.00ns,16.00ns,334.00ns,5.00us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,1.13s,321.00ns,0.00ns,321.00ns,16.00ns,313.00ns,8.15us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,1.18s,375.00ns,0.00ns,375.00ns,17.00ns,367.00ns,8.02us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,1.43s,496.00ns,0.00ns,497.00ns,22.00ns,486.00ns,7.95us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,1.08s,302.00ns,0.00ns,304.00ns,17.00ns,292.00ns,3.46us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.13s,268.00ns,0.00ns,271.00ns,17.00ns,260.00ns,2.23us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,2.33s,591.00ns,0.00ns,594.00ns,23.00ns,581.00ns,8.25us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,1.63s,556.00ns,0.00ns,557.00ns,19.00ns,547.00ns,2.22us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,1.48s,502.00ns,0.00ns,502.00ns,17.00ns,491.00ns,6.59us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.63s,569.00ns,0.00ns,569.00ns,15.00ns,557.00ns,2.41us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,579.00ms,50.00ns,0.00ns,50.00ns,7.00ns,47.00ns,3.58us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,578.71ms,49.00ns,0.00ns,49.00ns,22.00ns,47.00ns,15.23us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,578.31ms,45.00ns,0.00ns,45.00ns,7.00ns,42.00ns,2.01us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,528.29ms,35.00ns,0.00ns,36.00ns,6.00ns,31.00ns,2.56us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,528.18ms,24.00ns,0.00ns,25.00ns,16.00ns,21.00ns,14.77us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.53s,179.00ns,0.00ns,180.00ns,12.00ns,174.00ns,2.07us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,579.07ms,54.00ns,0.00ns,54.00ns,11.00ns,52.00ns,8.47us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,678.56ms,45.00ns,0.00ns,45.00ns,6.00ns,42.00ns,2.19us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,578.63ms,45.00ns,0.00ns,45.00ns,7.00ns,42.00ns,2.22us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,528.65ms,24.00ns,0.00ns,25.00ns,4.00ns,22.00ns,1.95us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,578.96ms,47.00ns,0.00ns,48.00ns,6.00ns,44.00ns,2.05us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,718485,4.88s,4.14us,0.00ns,4.14us,52.00ns,4.06us,12.98us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,681174,4.88s,4.42us,0.00ns,4.37us,111.00ns,4.15us,23.55us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,694260,4.78s,4.25us,0.00ns,4.29us,90.00ns,4.11us,11.32us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,139238,4.57s,21.50us,0.00ns,21.51us,163.00ns,21.47us,41.51us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,26133,4.56s,114.38us,0.00ns,114.77us,2.55us,114.35us,144.41us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,389860,4.82s,7.36us,0.00ns,7.37us,78.00ns,7.20us,15.41us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,678555,4.88s,4.40us,0.00ns,4.39us,81.00ns,4.17us,14.25us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,706284,4.88s,4.16us,0.00ns,4.22us,98.00ns,4.10us,19.36us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,704902,4.88s,4.22us,0.00ns,4.22us,105.00ns,4.18us,48.15us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,26143,4.56s,114.40us,0.00ns,114.72us,2.06us,114.36us,147.84us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,682991,4.83s,4.34us,0.00ns,4.36us,88.00ns,4.28us,10.88us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,499737,4.78s,6.40us,0.00ns,5.97us,576.00ns,5.18us,98.77us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,76504,4.56s,39.25us,0.00ns,39.18us,873.00ns,38.16us,50.41us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,17460,4.51s,171.55us,0.00ns,171.79us,0.95us,171.52us,207.91us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,264908,4.72s,10.94us,0.00ns,10.99us,151.00ns,10.91us,18.09us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,571458,4.83s,5.21us,0.00ns,5.22us,66.00ns,5.18us,12.69us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,575831,4.73s,5.17us,0.00ns,5.18us,75.00ns,5.11us,13.28us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,498054,4.78s,6.46us,0.00ns,5.99us,641.00ns,5.14us,12.26us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,389355,4.72s,7.66us,0.00ns,7.67us,90.00ns,7.64us,15.44us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,52408,4.56s,57.23us,0.00ns,57.20us,1.99us,55.09us,77.13us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,12873,4.51s,233.23us,0.00ns,233.03us,1.50us,228.69us,289.70us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,188178,4.72s,15.60us,0.00ns,15.62us,154.00ns,15.43us,23.68us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,388927,4.67s,7.66us,0.00ns,7.68us,100.00ns,7.64us,16.96us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,381882,4.72s,7.82us,0.00ns,7.82us,125.00ns,7.77us,52.14us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,377655,4.72s,7.82us,0.00ns,7.91us,227.00ns,7.76us,63.37us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,477.36ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.13us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,477.12ms,15.00ns,0.00ns,15.00ns,13.00ns,13.00ns,11.72us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,527.24ms,15.00ns,0.00ns,16.00ns,6.00ns,14.00ns,2.38us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,526.98ms,38.00ns,0.00ns,37.00ns,20.00ns,31.00ns,18.65us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,878.68ms,147.00ns,0.00ns,147.00ns,9.00ns,144.00ns,2.54us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.48s,162.00ns,0.00ns,163.00ns,175.00ns,157.00ns,160.00us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,476.93ms,15.00ns,0.00ns,15.00ns,13.00ns,13.00ns,12.79us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,476.63ms,14.00ns,0.00ns,15.00ns,4.00ns,12.00ns,2.08us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,476.78ms,15.00ns,0.00ns,15.00ns,3.00ns,12.00ns,1.79us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,728.38ms,144.00ns,0.00ns,145.00ns,21.00ns,141.00ns,17.20us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,526.86ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.57us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,577.06ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,2.47us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,626.82ms,61.00ns,0.00ns,61.00ns,8.00ns,58.00ns,2.47us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,928.56ms,209.00ns,0.00ns,209.00ns,23.00ns,205.00ns,13.84us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.48s,169.00ns,0.00ns,170.00ns,9.00ns,164.00ns,2.56us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,526.74ms,19.00ns,0.00ns,19.00ns,6.00ns,17.00ns,3.02us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,477.16ms,19.00ns,0.00ns,19.00ns,4.00ns,16.00ns,2.33us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,527.03ms,19.00ns,0.00ns,19.00ns,5.00ns,16.00ns,1.73us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,527.10ms,23.00ns,0.00ns,23.00ns,4.00ns,20.00ns,1.81us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,627.26ms,80.00ns,0.00ns,80.00ns,9.00ns,72.00ns,6.44us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,0.98s,277.00ns,0.00ns,278.00ns,15.00ns,274.00ns,7.23us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.53s,170.00ns,0.00ns,171.00ns,14.00ns,163.00ns,7.83us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,527.06ms,22.00ns,0.00ns,23.00ns,6.00ns,20.00ns,2.65us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,526.87ms,21.00ns,0.00ns,21.00ns,4.00ns,18.00ns,1.99us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,526.83ms,21.00ns,0.00ns,21.00ns,5.00ns,19.00ns,2.51us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,476.73ms,12.00ns,0.00ns,12.00ns,3.00ns,9.00ns,1.81us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,527.05ms,13.00ns,0.00ns,13.00ns,24.00ns,11.00ns,15.29us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,476.88ms,12.00ns,0.00ns,12.00ns,4.00ns,11.00ns,2.15us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,527.08ms,15.00ns,0.00ns,15.00ns,20.00ns,13.00ns,19.36us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,527.06ms,30.00ns,0.00ns,29.00ns,6.00ns,21.00ns,2.16us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.48s,158.00ns,0.00ns,158.00ns,8.00ns,153.00ns,2.02us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,527.02ms,12.00ns,0.00ns,12.00ns,39.00ns,10.00ns,20.98us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,476.96ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,2.13us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,477.04ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.04us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,526.95ms,23.00ns,0.00ns,24.00ns,6.00ns,21.00ns,2.09us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,577.65ms,12.00ns,0.00ns,12.00ns,25.00ns,11.00ns,24.58us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,476.91ms,14.00ns,0.00ns,14.00ns,3.00ns,13.00ns,2.18us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,527.37ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,2.33us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,627.25ms,37.00ns,0.00ns,37.00ns,21.00ns,28.00ns,14.11us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.48s,157.00ns,0.00ns,159.00ns,86.00ns,153.00ns,84.99us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,478.97ms,14.00ns,0.00ns,14.00ns,6.00ns,12.00ns,3.33us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,476.99ms,13.00ns,0.00ns,13.00ns,6.00ns,11.00ns,2.39us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,577.02ms,15.00ns,0.00ns,15.00ns,4.00ns,12.00ns,3.24us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,526.81ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.25us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,526.55ms,18.00ns,0.00ns,18.00ns,6.00ns,16.00ns,3.21us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,527.03ms,37.00ns,0.00ns,40.00ns,18.00ns,34.00ns,16.62us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.48s,158.00ns,0.00ns,159.00ns,10.00ns,154.00ns,2.53us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,526.88ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,1.83us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,528.60ms,13.00ns,0.00ns,13.00ns,5.00ns,12.00ns,2.67us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,476.91ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.47us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,,1000000,476.86ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.16us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,,1000000,476.97ms,11.00ns,0.00ns,11.00ns,15.00ns,9.00ns,14.48us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,,1000000,477.06ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.72us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,,1000000,476.37ms,11.00ns,0.00ns,11.00ns,31.00ns,9.00ns,21.02us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,,1000000,476.64ms,10.00ns,0.00ns,10.00ns,2.00ns,8.00ns,1.84us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,,1000000,1.50s,154.00ns,0.00ns,155.00ns,11.00ns,150.00ns,2.05us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,,1000000,476.79ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,1.97us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,,1000000,476.76ms,10.00ns,0.00ns,10.00ns,3.00ns,9.00ns,2.24us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,,1000000,476.79ms,10.00ns,0.00ns,10.00ns,13.00ns,8.00ns,12.37us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,,1000000,476.44ms,10.00ns,0.00ns,10.00ns,14.00ns,8.00ns,14.01us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,,1000000,526.70ms,10.00ns,0.00ns,10.00ns,15.00ns,8.00ns,14.58us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,,1000000,526.57ms,12.00ns,0.00ns,12.00ns,2.00ns,10.00ns,1.62us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,,1000000,476.59ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,3.02us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,,1000000,477.04ms,10.00ns,0.00ns,10.00ns,6.00ns,9.00ns,4.99us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,,1000000,1.48s,156.00ns,0.00ns,157.00ns,12.00ns,151.00ns,2.16us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,,1000000,477.07ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,1.98us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,,1000000,576.61ms,11.00ns,0.00ns,11.00ns,8.00ns,9.00ns,6.18us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,,1000000,476.78ms,10.00ns,0.00ns,10.00ns,4.00ns,9.00ns,2.26us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,,1000000,476.55ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,1.76us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,,1000000,477.04ms,11.00ns,0.00ns,11.00ns,29.00ns,9.00ns,20.11us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,,1000000,476.77ms,10.00ns,0.00ns,10.00ns,2.00ns,9.00ns,1.85us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,,1000000,1.48s,157.00ns,0.00ns,158.00ns,9.00ns,153.00ns,2.05us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,,1000000,476.53ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.48us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,,1000000,476.61ms,10.00ns,0.00ns,10.00ns,19.00ns,9.00ns,18.64us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,,1000000,477.18ms,10.00ns,0.00ns,10.00ns,4.00ns,9.00ns,2.33us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,594698,4.83s,5.01us,0.00ns,5.01us,64.00ns,4.94us,16.07us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,597765,4.78s,4.98us,0.00ns,4.99us,72.00ns,4.92us,13.85us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,594757,4.83s,5.01us,0.00ns,5.01us,62.00ns,4.93us,15.15us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,132013,4.62s,22.66us,0.00ns,22.69us,193.00ns,22.57us,34.40us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,25953,4.56s,115.36us,0.00ns,115.56us,733.00ns,115.26us,146.17us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,344240,4.82s,8.37us,0.00ns,8.38us,102.00ns,8.26us,15.67us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,592600,4.83s,5.02us,0.00ns,5.03us,74.00ns,4.95us,14.14us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,581006,4.83s,5.17us,0.00ns,5.13us,118.00ns,4.90us,17.79us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,576263,4.83s,5.10us,0.00ns,5.17us,117.00ns,5.00us,17.36us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,590333,4.83s,5.04us,0.00ns,5.05us,77.00ns,4.96us,11.47us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,375993,4.72s,7.93us,0.00ns,7.94us,109.00ns,7.80us,27.46us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,71677,4.56s,41.74us,0.00ns,41.82us,311.00ns,41.54us,64.85us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,17135,4.51s,174.52us,0.00ns,175.05us,2.38us,173.76us,214.46us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,220180,4.72s,13.21us,0.00ns,13.30us,255.00ns,13.04us,18.01us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,365703,4.67s,7.83us,0.00ns,8.17us,475.00ns,7.64us,13.76us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,376809,4.72s,7.74us,0.00ns,7.93us,445.00ns,7.62us,13.81us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,390801,4.72s,7.63us,0.00ns,7.64us,97.00ns,7.53us,13.07us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,280264,4.62s,10.66us,0.00ns,10.67us,119.00ns,10.54us,20.37us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,49591,4.56s,60.17us,0.00ns,60.46us,657.00ns,59.52us,90.76us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,12915,4.51s,231.64us,0.00ns,232.26us,1.34us,231.52us,274.98us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,153303,4.67s,18.65us,0.00ns,19.24us,720.00ns,18.48us,24.79us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,267428,4.67s,11.14us,0.00ns,11.18us,116.00ns,11.06us,17.02us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,276308,4.67s,10.79us,0.00ns,10.82us,207.00ns,10.69us,16.19us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,275324,4.62s,10.82us,0.00ns,10.86us,238.00ns,10.74us,33.45us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,476.79ms,19.00ns,0.00ns,19.00ns,14.00ns,17.00ns,13.34us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,476.30ms,19.00ns,0.00ns,19.00ns,3.00ns,17.00ns,1.98us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,526.73ms,19.00ns,0.00ns,19.00ns,4.00ns,16.00ns,2.14us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,576.66ms,36.00ns,0.00ns,36.00ns,6.00ns,33.00ns,2.08us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,777.70ms,151.00ns,0.00ns,151.00ns,12.00ns,146.00ns,2.05us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.48s,164.00ns,0.00ns,165.00ns,12.00ns,158.00ns,2.62us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,476.43ms,20.00ns,0.00ns,20.00ns,6.00ns,17.00ns,2.50us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,526.43ms,18.00ns,0.00ns,18.00ns,5.00ns,16.00ns,2.58us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,526.66ms,19.00ns,0.00ns,19.00ns,5.00ns,16.00ns,2.09us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,727.63ms,156.00ns,0.00ns,156.00ns,9.00ns,149.00ns,1.95us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,526.72ms,20.00ns,0.00ns,20.00ns,6.00ns,17.00ns,3.03us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,526.49ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.38us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,576.63ms,61.00ns,0.00ns,60.00ns,8.00ns,53.00ns,1.99us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,878.17ms,228.00ns,0.00ns,228.00ns,14.00ns,217.00ns,2.12us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.53s,174.00ns,0.00ns,175.00ns,13.00ns,166.00ns,6.21us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,526.81ms,29.00ns,0.00ns,29.00ns,7.00ns,26.00ns,2.70us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,526.95ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.36us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,577.09ms,28.00ns,0.00ns,28.00ns,6.00ns,25.00ns,2.27us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,527.19ms,37.00ns,0.00ns,38.00ns,11.00ns,33.00ns,8.98us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,777.78ms,92.00ns,0.00ns,91.00ns,20.00ns,75.00ns,13.96us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.03s,285.00ns,0.00ns,286.00ns,16.00ns,280.00ns,3.15us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.53s,188.00ns,0.00ns,189.00ns,13.00ns,181.00ns,8.91us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,526.64ms,38.00ns,0.00ns,38.00ns,6.00ns,34.00ns,2.01us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,576.83ms,37.00ns,0.00ns,37.00ns,13.00ns,33.00ns,10.26us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,526.96ms,37.00ns,0.00ns,37.00ns,6.00ns,33.00ns,1.82us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,526.48ms,15.00ns,0.00ns,15.00ns,5.00ns,12.00ns,2.55us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,476.58ms,17.00ns,0.00ns,17.00ns,4.00ns,16.00ns,2.42us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,526.62ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,3.06us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,527.32ms,16.00ns,0.00ns,16.00ns,21.00ns,14.00ns,14.38us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,477.11ms,27.00ns,0.00ns,28.00ns,7.00ns,22.00ns,2.52us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.48s,157.00ns,0.00ns,158.00ns,11.00ns,153.00ns,2.78us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,476.97ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.39us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,476.31ms,16.00ns,0.00ns,16.00ns,3.00ns,14.00ns,1.73us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,477.16ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,2.39us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,526.72ms,23.00ns,0.00ns,23.00ns,6.00ns,21.00ns,3.01us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,476.43ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,1.97us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,526.61ms,21.00ns,0.00ns,21.00ns,70.00ns,19.00ns,70.00us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,526.58ms,20.00ns,0.00ns,20.00ns,4.00ns,17.00ns,2.23us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,526.97ms,37.00ns,0.00ns,36.00ns,17.00ns,28.00ns,15.58us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.48s,161.00ns,0.00ns,162.00ns,11.00ns,156.00ns,1.76us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,526.94ms,20.00ns,0.00ns,20.00ns,6.00ns,18.00ns,2.42us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,477.01ms,21.00ns,0.00ns,21.00ns,5.00ns,18.00ns,1.92us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,527.21ms,18.00ns,0.00ns,18.00ns,5.00ns,16.00ns,2.32us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,527.14ms,30.00ns,0.00ns,30.00ns,5.00ns,27.00ns,2.04us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,526.93ms,24.00ns,0.00ns,24.00ns,14.00ns,21.00ns,10.36us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,577.14ms,44.00ns,0.00ns,43.00ns,6.00ns,35.00ns,2.67us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.48s,165.00ns,0.00ns,166.00ns,12.00ns,159.00ns,3.65us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,526.95ms,25.00ns,0.00ns,25.00ns,5.00ns,22.00ns,2.13us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,527.24ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,2.63us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,526.66ms,21.00ns,0.00ns,21.00ns,20.00ns,19.00ns,19.08us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,85458,4.57s,34.05us,0.00ns,35.07us,1.80us,33.51us,62.35us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,57150,4.56s,52.15us,0.00ns,52.46us,1.10us,50.96us,77.69us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,57169,4.56s,52.30us,0.00ns,52.44us,756.00ns,51.12us,75.57us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,35327,4.56s,84.69us,0.00ns,84.88us,836.00ns,83.80us,103.38us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,19081,4.51s,155.77us,0.00ns,157.19us,4.37us,154.48us,196.16us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,49860,4.56s,60.34us,0.00ns,59.83us,1.78us,56.43us,86.06us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,50805,4.56s,58.79us,0.00ns,59.01us,1.42us,56.61us,77.73us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,65502,4.56s,45.13us,0.00ns,45.77us,1.30us,44.13us,70.35us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,65030,4.56s,45.61us,0.00ns,46.10us,1.42us,44.73us,71.68us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,18797,4.51s,156.38us,0.00ns,159.56us,5.81us,154.82us,208.33us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,57830,4.56s,51.73us,0.00ns,51.84us,392.00ns,51.31us,70.97us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,25510,4.51s,117.34us,0.00ns,117.57us,1.04us,115.36us,137.12us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,16004,4.51s,188.55us,0.00ns,187.42us,3.39us,181.59us,229.05us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,11021,4.51s,276.52us,0.00ns,272.18us,17.00us,252.00us,372.63us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,21383,4.56s,138.12us,0.00ns,139.97us,3.04us,135.83us,167.58us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,22171,4.51s,133.64us,0.00ns,135.28us,3.60us,130.95us,150.79us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,26758,4.56s,111.64us,0.00ns,112.08us,1.89us,110.30us,143.63us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,23292,4.51s,128.41us,0.00ns,128.77us,1.11us,125.17us,148.67us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,19114,4.51s,156.53us,0.00ns,156.92us,1.32us,152.00us,176.54us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,9833,4.51s,305.52us,0.00ns,305.09us,2.73us,297.08us,350.40us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,8687,4.51s,344.96us,0.00ns,345.34us,5.42us,340.57us,388.52us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,15479,4.56s,192.66us,0.00ns,193.47us,1.91us,189.33us,201.70us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,17557,4.51s,167.12us,0.00ns,170.84us,6.40us,164.46us,193.99us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,19884,4.51s,148.46us,0.00ns,150.84us,6.25us,145.96us,190.31us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,20017,4.51s,149.50us,0.00ns,149.84us,1.28us,148.06us,174.44us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,577.34ms,46.00ns,0.00ns,46.00ns,7.00ns,43.00ns,2.69us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,527.11ms,47.00ns,0.00ns,47.00ns,7.00ns,44.00ns,2.26us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,577.25ms,45.00ns,0.00ns,46.00ns,37.00ns,42.00ns,25.66us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,577.35ms,52.00ns,0.00ns,53.00ns,8.00ns,49.00ns,2.50us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,828.50ms,156.00ns,0.00ns,158.00ns,15.00ns,149.00ns,8.02us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.53s,184.00ns,0.00ns,185.00ns,21.00ns,176.00ns,15.24us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,577.11ms,48.00ns,0.00ns,48.00ns,8.00ns,45.00ns,3.60us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,526.47ms,44.00ns,0.00ns,44.00ns,6.00ns,41.00ns,2.04us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,577.09ms,44.00ns,0.00ns,44.00ns,7.00ns,41.00ns,2.24us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,778.22ms,157.00ns,0.00ns,160.00ns,15.00ns,144.00ns,7.46us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,577.25ms,50.00ns,0.00ns,50.00ns,34.00ns,47.00ns,19.29us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,628.47ms,76.00ns,0.00ns,77.00ns,17.00ns,71.00ns,15.26us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,679.26ms,93.00ns,0.00ns,94.00ns,9.00ns,84.00ns,2.27us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,930.18ms,261.00ns,0.00ns,241.00ns,33.00ns,198.00ns,2.27us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.63s,226.00ns,0.00ns,227.00ns,15.00ns,217.00ns,4.55us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,629.43ms,87.00ns,0.00ns,87.00ns,9.00ns,82.00ns,3.80us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,678.90ms,97.00ns,0.00ns,97.00ns,8.00ns,90.00ns,1.97us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,678.79ms,89.00ns,0.00ns,89.00ns,19.00ns,83.00ns,16.71us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,779.24ms,125.00ns,0.00ns,126.00ns,17.00ns,118.00ns,15.08us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,729.62ms,131.00ns,0.00ns,132.00ns,16.00ns,125.00ns,10.32us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.03s,264.00ns,0.00ns,265.00ns,19.00ns,260.00ns,7.27us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.68s,266.00ns,0.00ns,267.00ns,15.00ns,256.00ns,2.31us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,729.07ms,137.00ns,0.00ns,137.00ns,12.00ns,131.00ns,8.35us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,729.99ms,138.00ns,0.00ns,138.00ns,10.00ns,131.00ns,2.09us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,779.24ms,137.00ns,0.00ns,137.00ns,12.00ns,129.00ns,7.53us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,527.08ms,29.00ns,0.00ns,29.00ns,13.00ns,26.00ns,11.36us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,477.07ms,30.00ns,0.00ns,30.00ns,4.00ns,27.00ns,1.87us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,526.96ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,1.84us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,527.12ms,20.00ns,0.00ns,20.00ns,13.00ns,18.00ns,11.46us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,527.00ms,24.00ns,0.00ns,25.00ns,7.00ns,22.00ns,2.31us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.48s,161.00ns,0.00ns,162.00ns,11.00ns,156.00ns,1.83us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,526.84ms,31.00ns,0.00ns,31.00ns,6.00ns,29.00ns,2.50us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,576.98ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,2.21us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,526.71ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.08us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,527.06ms,24.00ns,0.00ns,25.00ns,7.00ns,21.00ns,2.76us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,526.53ms,31.00ns,0.00ns,32.00ns,6.00ns,29.00ns,2.21us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,580.60ms,51.00ns,0.00ns,51.00ns,8.00ns,48.00ns,2.31us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,528.84ms,34.00ns,0.00ns,35.00ns,7.00ns,30.00ns,2.67us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,529.23ms,33.00ns,0.00ns,33.00ns,21.00ns,28.00ns,12.09us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.53s,185.00ns,0.00ns,186.00ns,12.00ns,179.00ns,2.13us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,578.64ms,50.00ns,0.00ns,51.00ns,8.00ns,47.00ns,2.09us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,628.57ms,56.00ns,0.00ns,56.00ns,8.00ns,52.00ns,2.50us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,577.95ms,52.00ns,0.00ns,52.00ns,6.00ns,48.00ns,2.29us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,578.36ms,70.00ns,0.00ns,70.00ns,7.00ns,65.00ns,2.05us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,528.87ms,46.00ns,0.00ns,46.00ns,8.00ns,41.00ns,2.29us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,528.05ms,36.00ns,0.00ns,36.00ns,7.00ns,33.00ns,3.36us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.58s,209.00ns,0.00ns,210.00ns,15.00ns,202.00ns,8.00us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,679.19ms,90.00ns,0.00ns,90.00ns,9.00ns,86.00ns,4.07us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,628.25ms,69.00ns,0.00ns,69.00ns,8.00ns,64.00ns,2.10us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,628.69ms,80.00ns,0.00ns,80.00ns,9.00ns,73.00ns,5.07us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,7275,4.51s,419.19us,0.00ns,412.36us,10.76us,392.50us,451.01us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,7422,4.51s,411.95us,0.00ns,404.17us,9.87us,391.28us,427.48us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,8243,4.51s,355.94us,0.00ns,363.93us,9.32us,354.93us,385.39us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,3655,4.51s,816.74us,0.00ns,820.97us,10.63us,787.47us,863.70us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,3807,4.51s,787.83us,0.00ns,788.00us,5.28us,744.44us,824.46us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,9457,4.56s,316.84us,0.00ns,316.92us,1.24us,315.16us,374.86us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,7768,4.51s,385.81us,0.00ns,386.20us,1.25us,385.46us,413.07us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,8081,4.51s,375.42us,0.00ns,371.24us,9.45us,349.46us,392.53us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,8200,4.51s,374.96us,0.00ns,365.86us,12.28us,347.32us,386.27us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,3803,4.51s,788.38us,0.00ns,788.97us,4.65us,773.64us,818.44us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,7266,4.51s,404.95us,0.00ns,412.89us,12.01us,404.56us,444.23us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,1.33s,439.00ns,0.00ns,440.00ns,20.00ns,434.00ns,6.66us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,1.43s,434.00ns,0.00ns,435.00ns,19.00ns,431.00ns,3.74us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.28s,394.00ns,0.00ns,394.00ns,23.00ns,390.00ns,14.08us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,1.08s,294.00ns,0.00ns,296.00ns,17.00ns,286.00ns,6.01us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,880.96ms,216.00ns,0.00ns,216.00ns,11.00ns,208.00ns,2.38us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,2.13s,479.00ns,0.00ns,481.00ns,21.00ns,473.00ns,8.07us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,1.38s,428.00ns,0.00ns,429.00ns,19.00ns,425.00ns,6.49us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.33s,394.00ns,0.00ns,395.00ns,17.00ns,390.00ns,2.46us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.28s,394.00ns,0.00ns,394.00ns,18.00ns,390.00ns,5.85us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,0.98s,211.00ns,0.00ns,212.00ns,17.00ns,205.00ns,6.92us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,1.43s,451.00ns,0.00ns,452.00ns,20.00ns,445.00ns,4.12us\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,33335253,270,4.56s,11.17ms,0.00ns,11.12ms,116.14us,10.93ms,11.38ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,33335253,284,4.56s,10.60ms,387.00ns,10.58ms,115.26us,10.35ms,10.96ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,33335253,284,4.56s,10.59ms,93.00ns,10.58ms,124.54us,10.33ms,11.04ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,33335253,439,4.56s,6.83ms,0.00ns,6.83ms,36.27us,6.79ms,7.20ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,33335253,442,4.56s,6.79ms,45.00ns,6.80ms,34.33us,6.75ms,7.07ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/binary,2.5.0,,33335253,3100,4.56s,0.97ms,16.00ns,0.97ms,11.37us,948.03us,1.05ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,33335253,283,4.56s,10.72ms,0.00ns,10.62ms,228.41us,9.99ms,11.09ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,33335253,146,4.56s,20.64ms,23.00ns,20.66ms,49.56us,20.59ms,20.92ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,33335253,221,4.56s,13.56ms,0.00ns,13.63ms,140.65us,13.46ms,13.94ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,33335253,313,4.56s,9.52ms,0.00ns,9.60ms,205.28us,9.44ms,10.28ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,33335253,554,4.56s,5.42ms,124.00ns,5.42ms,44.11us,5.28ms,5.65ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,33335253,557,4.56s,5.38ms,0.00ns,5.39ms,49.90us,5.23ms,5.57ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,20159,4.56s,148.63us,0.00ns,148.78us,2.76us,134.03us,183.80us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13749,4.51s,224.02us,0.00ns,218.17us,9.04us,205.66us,234.70us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13741,4.51s,224.14us,0.00ns,218.29us,9.35us,205.76us,248.26us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,81182,4.56s,35.95us,0.00ns,36.90us,1.13us,35.66us,44.98us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,82543,4.56s,36.27us,0.00ns,36.31us,254.00ns,36.06us,43.38us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3171,4.51s,944.88us,0.00ns,946.26us,6.63us,930.97us,0.98ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2959,4.51s,1.01ms,0.00ns,1.01ms,2.58us,1.01ms,1.05ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4547,4.51s,659.98us,0.00ns,659.78us,4.04us,652.03us,708.87us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,43794,4.56s,61.38us,0.00ns,68.16us,10.17us,61.25us,105.77us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,75209,4.56s,40.44us,0.00ns,39.84us,1.09us,37.39us,45.98us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,75887,4.56s,39.99us,0.00ns,39.49us,1.15us,37.55us,48.34us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2928,4.51s,1.03ms,4.00ns,1.02ms,25.92us,0.96ms,1.11ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2963,4.51s,1.02ms,0.00ns,1.01ms,30.20us,0.96ms,1.10ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,24227,4.51s,123.63us,0.00ns,123.79us,1.23us,121.68us,140.63us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13801,4.51s,223.52us,0.00ns,217.34us,9.43us,205.28us,247.97us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13745,4.51s,224.19us,0.00ns,218.24us,9.16us,205.54us,235.81us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,79331,4.56s,37.71us,0.00ns,37.77us,309.00ns,37.49us,43.03us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,76472,4.56s,40.01us,0.00ns,39.19us,1.15us,37.56us,45.06us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3369,4.51s,890.23us,0.00ns,890.51us,3.49us,881.31us,0.96ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2959,4.51s,1.01ms,0.00ns,1.01ms,2.69us,1.01ms,1.04ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4549,4.51s,659.95us,0.00ns,659.54us,2.70us,652.03us,695.66us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,47860,4.56s,61.59us,0.00ns,62.34us,1.77us,61.39us,86.19us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,77898,4.56s,38.42us,0.00ns,38.47us,294.00ns,38.08us,46.92us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,74158,4.56s,40.54us,0.00ns,40.41us,679.00ns,38.36us,61.72us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3116,4.51s,0.97ms,1.00ns,0.96ms,28.39us,893.84us,1.14ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3116,4.51s,0.97ms,2.00ns,0.96ms,26.97us,894.82us,1.05ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,16350,4.51s,179.51us,0.00ns,183.45us,5.90us,174.97us,211.24us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13983,4.51s,207.11us,0.00ns,214.52us,9.27us,205.82us,245.96us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13773,4.51s,223.71us,0.00ns,217.78us,9.11us,205.81us,237.75us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,78721,4.56s,38.00us,0.00ns,38.06us,318.00ns,37.80us,44.98us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,79035,4.56s,37.85us,0.00ns,37.91us,317.00ns,37.63us,45.32us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3484,4.51s,856.09us,2.00ns,861.16us,11.39us,849.81us,921.24us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2914,4.51s,1.03ms,0.00ns,1.03ms,12.95us,1.01ms,1.09ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4546,4.51s,660.03us,1.00ns,659.97us,3.07us,652.00us,702.75us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,46962,4.56s,60.32us,0.00ns,63.54us,7.90us,59.89us,120.20us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,75097,4.56s,39.68us,0.00ns,39.91us,672.00ns,39.24us,46.79us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,75586,4.56s,39.59us,0.00ns,39.65us,351.00ns,39.17us,62.18us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3301,4.51s,903.02us,0.00ns,908.93us,14.80us,889.98us,0.99ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3299,4.51s,904.11us,0.00ns,909.58us,15.14us,892.28us,0.99ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,30304,4.56s,102.34us,0.00ns,98.96us,5.58us,89.84us,119.93us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,14103,4.51s,219.72us,0.00ns,212.68us,9.62us,200.22us,242.26us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,14065,4.51s,219.09us,0.00ns,213.26us,9.07us,200.20us,229.58us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,78286,4.56s,37.86us,0.00ns,38.28us,894.00ns,37.61us,45.07us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,79568,4.56s,37.61us,0.00ns,37.66us,290.00ns,37.40us,44.12us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3528,4.51s,850.16us,1.00ns,850.54us,2.80us,843.92us,891.54us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2962,4.51s,1.01ms,1.00ns,1.01ms,2.76us,1.01ms,1.06ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,42301,4.56s,71.66us,0.00ns,70.57us,7.15us,61.72us,103.86us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,272169,4.67s,11.11us,0.00ns,10.99us,250.00ns,10.40us,24.96us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,231787,4.67s,12.71us,0.00ns,12.91us,334.00ns,12.37us,17.35us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3263,4.51s,903.69us,0.00ns,919.55us,45.37us,861.77us,1.04ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3298,4.51s,897.59us,22.00ns,909.79us,45.60us,860.54us,1.03ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,24354,4.56s,122.97us,1.00ns,123.15us,907.00ns,122.03us,148.09us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13737,4.51s,223.92us,0.00ns,218.37us,9.12us,205.91us,248.41us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13765,4.51s,224.20us,0.00ns,217.90us,9.37us,205.94us,252.12us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,63873,4.56s,47.81us,0.00ns,46.93us,1.33us,44.97us,59.57us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,77049,4.56s,37.99us,0.00ns,38.90us,1.13us,37.70us,53.65us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3319,4.51s,900.68us,0.00ns,903.89us,8.63us,892.70us,0.99ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2960,4.51s,1.01ms,0.00ns,1.01ms,2.48us,1.01ms,1.05ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4547,4.51s,657.34us,0.00ns,659.80us,6.96us,655.52us,707.86us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,43887,4.56s,62.56us,0.00ns,68.02us,8.78us,61.98us,106.03us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3163,4.51s,947.37us,0.00ns,948.56us,5.83us,938.21us,0.99ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3159,4.51s,946.69us,0.00ns,949.72us,9.55us,937.29us,0.99ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,4323,4.51s,693.66us,0.00ns,694.03us,2.77us,688.52us,755.93us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,11074,4.51s,275.33us,0.00ns,270.87us,8.85us,259.54us,293.94us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,11264,4.51s,270.00us,1.00ns,266.30us,9.50us,253.90us,297.55us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,26506,4.51s,112.82us,0.00ns,113.15us,903.00ns,111.81us,122.60us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,46538,4.56s,63.97us,0.00ns,64.43us,1.39us,62.93us,86.19us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3646,4.51s,824.09us,0.00ns,822.94us,5.14us,811.83us,855.77us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2722,4.51s,1.10ms,1.00ns,1.10ms,13.80us,1.08ms,1.35ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4325,4.51s,694.22us,0.00ns,693.73us,2.67us,688.32us,750.35us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,28341,4.56s,105.45us,0.00ns,105.50us,1.18us,102.32us,163.67us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3211,4.51s,933.01us,0.00ns,934.28us,7.01us,917.97us,0.99ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3251,4.51s,919.21us,0.00ns,923.03us,13.14us,825.44us,0.99ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,11665,4.51s,256.85us,0.00ns,257.14us,4.15us,248.64us,292.38us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,3932,4.51s,763.02us,5.00ns,763.06us,12.97us,728.93us,811.22us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,4464,4.51s,670.68us,1.00ns,672.12us,12.42us,647.75us,710.77us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,5414,4.51s,553.53us,1.00ns,554.10us,4.24us,545.93us,581.09us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,9214,4.51s,324.94us,1.00ns,325.55us,7.64us,313.13us,345.92us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,2504,4.51s,1.19ms,4.00ns,1.20ms,21.80us,1.18ms,1.30ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2424,4.51s,1.23ms,0.00ns,1.24ms,14.03us,1.22ms,1.30ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,3446,4.51s,868.86us,2.00ns,870.61us,9.65us,846.97us,939.58us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,7376,4.56s,402.69us,1.00ns,406.38us,9.58us,394.55us,450.43us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2506,4.51s,1.19ms,1.00ns,1.20ms,15.45us,1.18ms,1.32ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2796,4.51s,1.07ms,1.00ns,1.07ms,6.55us,1.06ms,1.20ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,6212,4.51s,486.22us,0.00ns,482.95us,8.08us,468.58us,512.89us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,8799,4.51s,343.32us,0.00ns,340.90us,8.36us,327.29us,365.82us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,9025,4.51s,333.91us,0.00ns,332.39us,8.58us,316.63us,357.23us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,15725,4.51s,190.90us,0.00ns,190.74us,3.23us,183.25us,219.47us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,32330,4.56s,91.86us,0.00ns,92.76us,2.27us,90.48us,114.20us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3031,4.51s,0.99ms,0.00ns,0.99ms,4.39us,0.98ms,1.02ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2704,4.51s,1.11ms,0.00ns,1.11ms,7.17us,1.10ms,1.15ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4331,4.51s,691.63us,0.00ns,692.71us,5.02us,687.05us,728.11us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,19483,4.56s,156.09us,0.00ns,153.64us,5.80us,142.83us,173.24us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2422,4.51s,1.24ms,5.00ns,1.24ms,11.41us,1.20ms,1.28ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2487,4.51s,1.21ms,0.00ns,1.21ms,16.07us,1.05ms,1.25ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,151305,767091,4.83s,3.73us,0.00ns,3.88us,445.00ns,3.49us,15.58us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,151305,127294,4.57s,23.92us,0.00ns,23.54us,822.00ns,22.44us,28.55us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,151305,127323,4.57s,22.95us,0.00ns,23.53us,830.00ns,22.58us,31.83us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,824761,4.99s,3.61us,0.00ns,3.60us,142.00ns,3.42us,105.45us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,860736,4.94s,3.42us,0.00ns,3.45us,81.00ns,3.28us,9.20us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,151305,300679,4.67s,9.92us,0.00ns,9.95us,185.00ns,9.77us,31.87us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,151305,32200,4.56s,93.05us,0.00ns,93.13us,532.00ns,92.42us,112.53us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,151305,331952,4.82s,8.57us,0.00ns,8.71us,487.00ns,7.69us,15.13us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,151305,580026,4.78s,5.07us,0.00ns,5.14us,330.00ns,4.59us,10.32us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,560982,4.78s,5.32us,0.00ns,5.32us,306.00ns,4.88us,14.75us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,151305,203900,4.62s,14.26us,0.00ns,14.68us,1.94us,10.81us,24.16us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,151305,209515,4.62s,13.98us,0.00ns,14.28us,1.72us,10.63us,24.68us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,151305,731209,4.83s,4.03us,0.00ns,4.07us,134.00ns,3.89us,12.71us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,151305,126130,4.57s,23.97us,0.00ns,23.75us,838.00ns,22.57us,28.15us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,151305,125750,4.57s,24.07us,0.00ns,23.82us,844.00ns,22.71us,29.57us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,833796,4.89s,3.59us,0.00ns,3.57us,71.00ns,3.38us,10.16us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,872546,4.89s,3.38us,0.00ns,3.41us,74.00ns,3.23us,9.20us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,151305,325090,4.67s,9.11us,0.00ns,9.20us,451.00ns,8.44us,17.50us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,151305,32213,4.51s,93.05us,0.00ns,93.10us,523.00ns,92.36us,117.54us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,151305,326068,4.77s,8.76us,0.00ns,8.87us,451.00ns,7.42us,13.57us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,151305,590393,4.78s,5.04us,0.00ns,5.05us,284.00ns,4.60us,13.98us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,566505,4.83s,5.13us,0.00ns,5.27us,292.00ns,4.88us,12.47us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,151305,191259,4.62s,14.87us,0.00ns,15.65us,3.15us,9.61us,33.03us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,151305,188954,4.62s,15.04us,0.00ns,15.84us,3.23us,9.30us,27.03us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,500100,114557,4.57s,26.15us,0.00ns,26.16us,209.00ns,25.39us,33.30us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,500100,51474,4.56s,60.11us,0.00ns,58.25us,2.64us,54.08us,74.48us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,500100,52120,4.56s,60.09us,0.00ns,57.53us,2.99us,54.07us,80.11us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,258678,4.67s,11.44us,0.00ns,11.57us,206.00ns,11.30us,22.08us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,260706,4.67s,11.40us,0.00ns,11.47us,179.00ns,11.28us,29.91us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,500100,13747,4.51s,216.31us,0.00ns,218.21us,13.75us,216.29us,377.59us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,500100,9772,4.51s,306.83us,0.00ns,306.99us,1.08us,305.32us,349.38us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,500100,14982,4.51s,200.21us,0.00ns,200.22us,2.37us,197.75us,243.66us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,500100,155959,4.67s,18.27us,0.00ns,18.90us,2.15us,18.21us,37.53us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,500100,272668,4.67s,10.96us,0.00ns,10.97us,181.00ns,10.44us,65.09us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,500100,273206,4.67s,10.95us,0.00ns,10.95us,228.00ns,10.63us,14.32us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,500100,13942,4.51s,216.30us,0.00ns,215.16us,12.13us,208.26us,340.85us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,500100,13803,4.51s,216.30us,0.00ns,217.31us,9.85us,208.28us,339.38us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,500100,4504,4.51s,665.44us,4.00ns,666.17us,7.40us,653.49us,696.42us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,500100,3790,4.51s,791.27us,0.00ns,791.73us,4.17us,785.72us,866.62us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,500100,8342,4.51s,352.62us,0.00ns,359.61us,16.04us,349.00us,413.61us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,1774,4.51s,1.68ms,31.00ns,1.69ms,55.23us,1.60ms,1.95ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,10316,4.51s,270.31us,0.00ns,290.79us,29.53us,269.15us,368.76us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,500100,14944,4.51s,198.95us,0.00ns,200.73us,8.53us,198.56us,296.95us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,500100,14439,4.51s,211.50us,0.00ns,207.75us,6.08us,192.28us,255.82us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,500100,14488,4.51s,206.84us,0.00ns,207.04us,854.00ns,206.72us,249.73us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,500100,6733,4.56s,443.54us,0.00ns,445.28us,6.50us,436.60us,536.85us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,500100,2680,4.51s,1.10ms,3.00ns,1.12ms,43.88us,1.05ms,1.25ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,500100,10930,4.51s,274.49us,0.00ns,274.45us,6.10us,264.65us,335.12us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1001,1000000,627.39ms,82.00ns,0.00ns,82.00ns,9.00ns,78.00ns,2.25us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,777.77ms,132.00ns,0.00ns,135.00ns,12.00ns,127.00ns,2.73us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,727.70ms,133.00ns,0.00ns,137.00ns,10.00ns,128.00ns,2.79us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,1000000,577.32ms,60.00ns,0.00ns,62.00ns,13.00ns,55.00ns,9.61us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,577.10ms,41.00ns,0.00ns,43.00ns,7.00ns,37.00ns,2.18us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.38s,448.00ns,0.00ns,449.00ns,21.00ns,443.00ns,5.43us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.73s,632.00ns,0.00ns,633.00ns,18.00ns,618.00ns,6.13us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.28s,411.00ns,0.00ns,411.00ns,20.00ns,401.00ns,5.25us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1001,1000000,1.58s,214.00ns,0.00ns,214.00ns,15.00ns,204.00ns,6.40us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1001,1000000,527.87ms,31.00ns,0.00ns,32.00ns,6.00ns,27.00ns,2.03us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1001,1000000,527.16ms,29.00ns,0.00ns,29.00ns,5.00ns,26.00ns,2.11us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1001,1000000,1.38s,458.00ns,0.00ns,458.00ns,20.00ns,438.00ns,4.45us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1001,1000000,1.38s,458.00ns,0.00ns,459.00ns,19.00ns,453.00ns,2.21us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1001,1000000,3.29s,1.35us,0.00ns,1.35us,38.00ns,1.33us,8.64us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,3.54s,1.58us,0.00ns,1.57us,37.00ns,1.53us,21.84us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,1.93s,731.00ns,0.00ns,741.00ns,38.00ns,717.00ns,7.73us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,903777,4.89s,3.27us,0.00ns,3.29us,97.00ns,3.09us,8.70us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,1.68s,569.00ns,0.00ns,591.00ns,46.00ns,558.00ns,5.24us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.33s,425.00ns,0.00ns,426.00ns,16.00ns,420.00ns,6.61us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.33s,415.00ns,0.00ns,419.00ns,21.00ns,391.00ns,2.32us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.43s,433.00ns,0.00ns,434.00ns,14.00ns,426.00ns,2.33us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1001,1000000,3.29s,1.07us,0.00ns,1.08us,41.00ns,1.04us,6.43us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1001,1000000,4.34s,2.23us,0.00ns,2.27us,95.00ns,2.14us,6.60us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1001,1000000,1.63s,571.00ns,0.00ns,575.00ns,27.00ns,547.00ns,8.18us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,550004,34734,4.56s,86.40us,0.00ns,86.33us,762.00ns,84.01us,93.85us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,550004,29067,4.56s,103.16us,0.00ns,103.18us,2.31us,99.12us,113.20us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,550004,28966,4.56s,103.52us,0.00ns,103.54us,2.39us,99.32us,115.04us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,550004,19217,4.51s,155.83us,0.00ns,156.08us,3.11us,153.87us,222.83us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,550004,17961,4.51s,165.10us,0.00ns,167.00us,3.90us,163.72us,235.51us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,550004,36868,4.56s,81.22us,0.00ns,81.33us,3.71us,73.11us,103.88us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,550004,8872,4.51s,337.82us,0.00ns,338.12us,1.62us,336.05us,370.75us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,550004,13695,4.51s,219.21us,0.00ns,219.03us,1.89us,217.47us,265.02us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,550004,13648,4.56s,208.65us,1.00ns,219.48us,19.07us,200.46us,309.61us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,550004,39180,4.56s,76.27us,0.00ns,76.53us,1.06us,75.56us,87.89us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,550004,36666,4.56s,83.66us,0.00ns,81.79us,3.46us,75.59us,91.75us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,550004,46986,4.56s,66.61us,0.00ns,63.81us,3.31us,59.95us,72.02us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,550004,47977,4.56s,60.31us,0.00ns,62.49us,3.10us,60.01us,71.24us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,720057,69592,4.56s,43.01us,0.00ns,43.07us,313.00ns,42.97us,67.17us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,720057,35307,4.56s,88.24us,0.00ns,84.93us,4.31us,79.40us,144.91us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,720057,36464,4.56s,79.99us,0.00ns,82.24us,4.34us,77.86us,115.36us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,77801,4.56s,38.47us,0.00ns,38.53us,251.00ns,38.42us,43.15us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,78363,4.56s,38.20us,0.00ns,38.25us,276.00ns,38.13us,50.63us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,720057,100047,4.57s,30.04us,0.00ns,29.95us,757.00ns,29.33us,41.62us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,720057,6751,4.51s,443.83us,0.00ns,444.37us,1.39us,441.53us,472.17us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,720057,51740,4.56s,56.82us,0.00ns,57.66us,1.81us,56.60us,81.17us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,720057,11737,4.51s,255.28us,0.00ns,255.58us,945.00ns,255.25us,273.03us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,11740,4.51s,255.18us,0.00ns,255.52us,1.00us,255.15us,265.67us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,720057,139010,4.62s,21.52us,0.00ns,21.55us,172.00ns,21.47us,28.69us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,720057,139200,4.57s,21.49us,0.00ns,21.51us,177.00ns,21.40us,27.48us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,720057,2886,4.51s,1.04ms,0.00ns,1.04ms,2.19us,1.04ms,1.06ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,720057,613,4.51s,4.90ms,0.00ns,4.90ms,5.84us,4.88ms,4.95ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,720057,612,4.51s,4.90ms,3.00ns,4.90ms,3.51us,4.90ms,4.93ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,4782,4.51s,624.95us,0.00ns,627.41us,16.82us,601.15us,831.77us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,4780,4.51s,626.06us,0.00ns,627.69us,15.48us,600.69us,700.45us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,720057,6417,4.51s,464.02us,0.00ns,467.48us,7.35us,462.53us,532.44us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,720057,6771,4.51s,442.80us,0.00ns,443.04us,1.54us,441.24us,478.30us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,720057,2837,4.51s,1.05ms,0.00ns,1.06ms,25.44us,1.04ms,1.12ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,720057,2232,4.51s,1.35ms,1.00ns,1.34ms,10.72us,1.31ms,1.38ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,2237,4.51s,1.35ms,0.00ns,1.34ms,12.94us,1.31ms,1.38ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,720057,6489,4.51s,461.86us,0.00ns,462.33us,1.66us,439.30us,474.28us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,720057,6537,4.51s,461.60us,0.00ns,458.95us,10.22us,438.96us,558.23us\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,,192,4.56s,15.58ms,369.00ns,15.67ms,282.77us,15.43ms,17.21ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,,217,4.56s,13.83ms,0.00ns,13.86ms,64.77us,13.79ms,14.31ms\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1000,29963,4.56s,99.38us,0.00ns,100.09us,2.53us,97.85us,402.34us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1000,36429,4.56s,82.82us,0.00ns,82.32us,1.72us,76.12us,92.49us\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,806771,165,4.56s,17.86ms,0.00ns,18.25ms,440.64us,17.80ms,18.78ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,806771,153,4.56s,19.47ms,0.00ns,19.72ms,438.20us,19.38ms,20.48ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,19685,4.51s,152.23us,0.00ns,152.37us,5.16us,142.82us,175.23us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,23640,4.51s,127.21us,0.00ns,126.87us,3.37us,121.40us,138.77us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,24048,4.51s,124.89us,0.00ns,124.72us,2.99us,119.83us,135.85us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,73011,4.56s,40.94us,0.00ns,41.05us,697.00ns,39.40us,59.86us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,161991,4.62s,18.73us,0.00ns,18.48us,924.00ns,16.50us,38.52us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,13606,4.51s,220.63us,0.00ns,220.47us,5.68us,201.20us,247.68us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7776,4.51s,385.26us,0.00ns,385.77us,1.78us,384.12us,432.77us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,11935,4.51s,251.45us,0.00ns,251.35us,1.28us,249.66us,284.33us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,67540,4.56s,43.69us,0.00ns,44.07us,1.62us,40.73us,63.87us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,9477,4.51s,316.54us,0.00ns,316.53us,7.38us,287.19us,340.63us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,9667,4.51s,310.39us,0.00ns,310.30us,8.65us,280.93us,334.05us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,11169,4.51s,268.88us,0.00ns,268.58us,2.86us,261.08us,292.15us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,16918,4.51s,176.74us,0.00ns,177.30us,3.34us,171.99us,190.98us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,18062,4.51s,165.54us,0.00ns,166.07us,3.71us,158.75us,183.07us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,18302,4.51s,163.66us,0.00ns,163.89us,3.46us,158.55us,199.52us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,52185,4.56s,57.24us,0.00ns,57.45us,2.31us,53.00us,77.97us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,11618,4.51s,258.52us,1.00ns,258.19us,6.03us,236.12us,299.54us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7213,4.51s,416.75us,0.00ns,415.89us,3.25us,408.94us,534.42us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,10681,4.51s,284.14us,0.00ns,280.85us,4.44us,272.93us,332.00us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,30046,4.56s,99.36us,0.00ns,99.52us,2.19us,93.08us,121.65us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,7675,4.51s,391.21us,0.00ns,390.87us,6.35us,367.10us,410.24us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,8054,4.51s,372.29us,1.00ns,372.45us,7.13us,350.54us,427.08us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,7791,4.51s,379.79us,0.00ns,385.03us,9.51us,376.55us,414.75us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,1951,4.51s,1.54ms,0.00ns,1.54ms,8.88us,1.52ms,1.64ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3010,4.51s,0.99ms,4.00ns,1.00ms,25.99us,0.97ms,1.10ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,2478,4.51s,1.21ms,1.00ns,1.21ms,2.60us,1.21ms,1.25ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,6399,4.51s,450.09us,0.00ns,468.78us,46.23us,431.21us,555.66us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,3265,4.51s,913.81us,0.00ns,919.01us,20.63us,878.65us,1.00ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,2977,4.51s,1.00ms,0.00ns,1.01ms,15.84us,0.98ms,1.08ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,3385,4.51s,884.23us,0.00ns,886.32us,12.62us,858.36us,1.03ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,6024,4.56s,485.95us,0.00ns,497.73us,29.83us,479.80us,666.34us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,1977,4.51s,1.50ms,0.00ns,1.52ms,45.17us,1.45ms,1.77ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,2870,4.51s,1.04ms,1.00ns,1.05ms,17.94us,0.98ms,1.13ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,14438,4.51s,207.61us,0.00ns,207.75us,1.43us,203.40us,223.39us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,18839,4.51s,158.36us,0.00ns,159.22us,3.74us,153.43us,173.60us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,19288,4.51s,153.84us,0.00ns,155.51us,4.10us,149.64us,169.96us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,55839,4.56s,53.67us,0.00ns,53.69us,933.00ns,51.46us,63.26us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,148082,4.62s,19.87us,0.00ns,20.23us,1.04us,18.74us,28.90us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,6896,4.51s,434.53us,1.00ns,435.01us,1.84us,432.17us,486.37us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7821,4.51s,383.23us,0.00ns,383.59us,1.42us,382.16us,429.93us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,11876,4.51s,252.63us,0.00ns,252.59us,1.94us,250.68us,300.25us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,72821,4.61s,39.46us,0.00ns,40.87us,2.44us,38.35us,64.95us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,5795,4.51s,517.62us,0.00ns,517.67us,4.00us,508.89us,538.34us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,5975,4.51s,503.15us,0.00ns,502.07us,4.65us,493.26us,519.73us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,10564,4.51s,282.11us,0.00ns,283.95us,3.40us,278.76us,304.75us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,9190,4.51s,325.34us,0.00ns,326.42us,4.73us,316.03us,346.72us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,9509,4.51s,314.42us,0.00ns,315.49us,4.91us,305.41us,331.20us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,25858,4.51s,115.81us,0.00ns,115.99us,2.07us,111.75us,144.39us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,67414,4.56s,44.40us,0.00ns,44.47us,1.23us,42.51us,65.69us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,6305,4.51s,475.28us,0.00ns,475.84us,1.88us,473.47us,517.25us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7424,4.51s,403.71us,0.00ns,404.09us,1.56us,402.10us,462.73us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,11155,4.51s,269.94us,0.00ns,268.92us,2.75us,264.15us,312.65us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,41495,4.56s,71.09us,0.00ns,71.97us,2.07us,68.50us,80.40us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,4982,4.51s,600.62us,1.00ns,602.20us,9.79us,584.67us,641.68us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,5306,4.51s,561.84us,2.00ns,565.39us,8.78us,554.01us,603.52us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,13798,4.51s,220.48us,0.00ns,217.40us,7.73us,197.94us,296.91us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,3497,4.51s,857.09us,0.00ns,858.02us,9.10us,835.98us,944.30us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,4757,4.51s,626.59us,0.00ns,630.73us,17.93us,598.66us,687.68us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,5013,4.51s,597.96us,0.00ns,598.48us,2.28us,594.92us,622.51us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,12264,4.51s,242.66us,0.00ns,244.60us,22.36us,219.78us,296.72us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,4786,4.51s,620.43us,2.00ns,626.82us,19.43us,601.27us,685.49us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,4231,4.51s,707.61us,0.00ns,709.17us,6.56us,693.55us,788.78us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,4869,4.51s,616.79us,0.00ns,616.13us,10.82us,537.65us,687.07us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,7958,4.56s,370.73us,1.00ns,376.65us,15.11us,363.98us,434.38us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,3484,4.51s,848.73us,9.00ns,861.12us,29.12us,822.23us,1.01ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,4746,4.51s,630.61us,1.00ns,632.15us,8.10us,616.68us,692.46us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,21191,4.51s,143.80us,0.00ns,141.54us,4.58us,135.17us,157.24us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,30804,4.56s,99.24us,0.00ns,97.36us,3.31us,92.79us,109.87us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,31206,4.56s,97.43us,0.00ns,96.10us,3.17us,90.48us,107.77us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,73409,4.56s,40.70us,0.00ns,40.83us,477.00ns,39.99us,45.65us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,147930,4.57s,20.02us,0.00ns,20.24us,564.00ns,19.46us,26.66us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,23015,4.52s,130.31us,0.00ns,130.32us,2.04us,127.25us,159.44us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7526,4.51s,398.34us,0.00ns,398.63us,1.31us,397.07us,444.18us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,11877,4.51s,252.95us,0.00ns,252.55us,2.36us,251.07us,305.24us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,81068,4.61s,36.59us,0.00ns,36.68us,582.00ns,35.06us,44.53us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,20537,4.51s,145.61us,0.00ns,146.05us,2.58us,140.15us,175.74us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,21125,4.56s,141.84us,0.00ns,141.98us,2.51us,134.63us,178.24us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,13766,4.51s,217.05us,0.00ns,217.89us,2.75us,213.00us,237.84us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,18020,4.51s,166.31us,0.00ns,166.46us,3.40us,160.15us,199.90us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,18813,4.51s,159.37us,0.00ns,159.44us,3.18us,152.89us,172.41us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,32709,4.56s,91.38us,0.00ns,91.69us,1.39us,89.54us,112.06us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,72336,4.56s,42.18us,0.00ns,41.44us,1.61us,38.71us,52.12us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,14236,4.51s,210.46us,1.00ns,210.71us,3.99us,200.51us,255.20us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7457,4.51s,401.69us,0.00ns,402.30us,1.69us,400.27us,428.97us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,11302,4.51s,266.51us,0.00ns,265.42us,2.41us,261.46us,308.64us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,44513,4.56s,66.81us,0.00ns,67.06us,1.41us,64.00us,94.70us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,10799,4.51s,278.10us,0.00ns,277.77us,3.01us,268.37us,293.70us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,11243,4.51s,267.25us,0.00ns,266.81us,4.45us,229.52us,286.16us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,30311,4.56s,101.60us,0.00ns,98.94us,4.28us,92.94us,124.55us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,7761,4.51s,386.47us,0.00ns,386.56us,3.85us,377.17us,413.23us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,9690,4.51s,308.74us,1.00ns,309.59us,6.21us,298.61us,333.86us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,11398,4.51s,261.69us,0.00ns,263.19us,4.77us,259.79us,295.95us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,23863,4.56s,121.67us,0.00ns,125.69us,6.09us,120.74us,155.78us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,6256,4.51s,474.81us,0.00ns,479.51us,11.48us,466.83us,517.40us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,6053,4.51s,495.52us,0.00ns,495.64us,2.98us,487.66us,538.20us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,8144,4.51s,367.78us,0.00ns,368.37us,3.71us,349.73us,422.88us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,18724,4.56s,158.51us,0.00ns,159.90us,5.69us,152.21us,183.76us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,5708,4.51s,523.47us,1.00ns,525.56us,7.70us,513.14us,573.27us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,6765,4.51s,442.57us,0.00ns,443.44us,3.57us,436.55us,480.08us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,81402,4.56s,36.67us,0.00ns,36.82us,1.74us,33.85us,49.32us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,42378,4.56s,74.17us,0.00ns,70.76us,3.69us,66.83us,78.58us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,42160,4.56s,74.18us,0.00ns,71.12us,3.64us,66.83us,80.25us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,218620,4.62s,13.76us,0.00ns,13.69us,209.00ns,13.23us,21.84us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,216873,4.62s,13.94us,0.00ns,13.80us,238.00ns,13.32us,17.53us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,10587,4.51s,283.06us,0.00ns,283.35us,7.47us,264.99us,312.25us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7958,4.51s,377.06us,0.00ns,376.95us,920.00ns,375.94us,409.19us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12229,4.51s,245.54us,0.00ns,245.30us,1.30us,242.53us,261.57us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,124448,4.62s,22.41us,0.00ns,23.77us,3.12us,22.30us,45.33us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,221691,4.62s,13.55us,0.00ns,13.50us,176.00ns,13.13us,23.76us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,215144,4.62s,14.02us,0.00ns,13.91us,275.00ns,13.14us,23.11us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,9306,4.51s,322.19us,4.00ns,322.36us,10.76us,295.72us,352.57us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,9470,4.51s,314.58us,4.00ns,316.78us,10.29us,295.00us,355.88us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,68615,4.56s,42.40us,0.00ns,43.69us,2.65us,40.70us,57.20us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,33568,4.56s,91.14us,0.00ns,89.33us,3.37us,85.05us,120.50us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,33139,4.56s,92.00us,0.00ns,90.49us,3.26us,85.90us,104.47us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,217142,4.62s,13.77us,0.00ns,13.78us,119.00ns,13.59us,19.24us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,207095,4.62s,14.56us,0.00ns,14.45us,345.00ns,13.62us,24.69us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,20204,4.51s,147.78us,0.00ns,148.46us,4.34us,134.63us,172.61us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7944,4.51s,377.18us,0.00ns,377.63us,2.71us,376.12us,421.84us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12221,4.51s,245.56us,0.00ns,245.46us,2.16us,242.55us,294.58us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,93143,4.62s,31.30us,0.00ns,31.89us,1.41us,28.89us,56.55us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,222819,4.63s,13.41us,0.00ns,13.43us,134.00ns,13.13us,18.67us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,218494,4.62s,13.67us,0.00ns,13.70us,171.00ns,13.34us,21.32us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,14047,4.51s,213.11us,0.00ns,213.54us,8.54us,181.76us,245.89us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,14100,4.52s,212.30us,1.00ns,212.73us,9.28us,171.58us,245.03us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,55712,4.57s,51.87us,0.00ns,53.81us,2.43us,51.21us,66.57us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,42257,4.57s,74.29us,0.00ns,70.96us,3.73us,66.93us,85.56us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41930,4.57s,74.30us,0.00ns,71.51us,3.62us,66.92us,79.13us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,220561,4.62s,13.55us,0.00ns,13.57us,122.00ns,13.30us,17.94us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,222250,4.62s,13.45us,0.00ns,13.47us,127.00ns,13.28us,36.30us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,20280,4.51s,147.92us,1.00ns,147.90us,3.67us,134.08us,163.60us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7948,4.51s,376.94us,0.00ns,377.43us,1.55us,376.09us,418.14us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12223,4.51s,245.54us,0.00ns,245.42us,1.32us,242.54us,289.40us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,128490,4.62s,22.34us,0.00ns,23.02us,2.50us,22.30us,46.91us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,226171,4.62s,13.19us,0.00ns,13.23us,172.00ns,13.06us,18.74us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,224395,4.62s,13.33us,0.00ns,13.34us,107.00ns,13.15us,17.21us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,16054,4.51s,187.19us,0.00ns,186.84us,8.00us,146.38us,224.70us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,15774,4.51s,190.61us,0.00ns,190.16us,7.88us,167.94us,235.20us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,11990,4.51s,249.80us,0.00ns,250.18us,2.28us,235.83us,319.48us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,21029,4.51s,141.65us,0.00ns,142.63us,3.91us,137.23us,160.92us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,21015,4.51s,141.71us,0.00ns,142.73us,4.28us,137.53us,163.70us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,223542,4.62s,13.31us,0.00ns,13.39us,197.00ns,13.19us,17.59us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,224563,4.62s,13.31us,0.00ns,13.33us,128.00ns,13.20us,29.03us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,6658,4.51s,448.75us,3.00ns,450.57us,8.23us,430.34us,506.30us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7863,4.51s,380.92us,0.00ns,381.51us,3.39us,379.93us,430.92us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12213,4.51s,245.56us,0.00ns,245.62us,3.31us,242.55us,294.12us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,133580,4.67s,19.97us,0.00ns,22.13us,2.91us,18.65us,33.02us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,223758,4.62s,13.21us,0.00ns,13.37us,274.00ns,13.06us,17.72us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,225739,4.62s,13.18us,0.00ns,13.26us,203.00ns,13.03us,16.98us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,6971,4.51s,430.91us,0.00ns,430.37us,7.93us,396.86us,485.27us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,6970,4.51s,430.86us,1.00ns,430.43us,7.46us,400.70us,482.52us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,526.89ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.66us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,526.98ms,28.00ns,0.00ns,28.00ns,26.00ns,26.00ns,19.10us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,476.59ms,23.00ns,0.00ns,23.00ns,6.00ns,21.00ns,3.40us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,536.77ms,26.00ns,0.00ns,26.00ns,20.00ns,23.00ns,18.72us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,526.49ms,23.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.42us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,476.55ms,12.00ns,0.00ns,12.00ns,22.00ns,10.00ns,20.49us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.40ms,25.00ns,0.00ns,25.00ns,5.00ns,22.00ns,2.19us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,526.67ms,22.00ns,0.00ns,22.00ns,20.00ns,20.00ns,19.10us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.48s,171.00ns,0.00ns,172.00ns,12.00ns,167.00ns,2.18us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.08ms,17.00ns,0.00ns,17.00ns,5.00ns,15.00ns,2.24us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,527.07ms,12.00ns,0.00ns,12.00ns,3.00ns,11.00ns,2.23us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,527.15ms,28.00ns,0.00ns,28.00ns,7.00ns,25.00ns,2.29us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,526.39ms,27.00ns,0.00ns,27.00ns,7.00ns,25.00ns,2.27us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.14ms,22.00ns,0.00ns,22.00ns,5.00ns,20.00ns,2.29us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.23ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.96us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,526.71ms,23.00ns,0.00ns,23.00ns,5.00ns,20.00ns,2.76us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,526.57ms,26.00ns,0.00ns,26.00ns,6.00ns,23.00ns,2.51us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.00ms,23.00ns,0.00ns,24.00ns,20.00ns,21.00ns,18.95us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,476.99ms,13.00ns,0.00ns,13.00ns,4.00ns,11.00ns,2.11us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.55ms,25.00ns,0.00ns,25.00ns,4.00ns,23.00ns,1.92us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,476.81ms,22.00ns,0.00ns,22.00ns,5.00ns,20.00ns,2.32us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.48s,171.00ns,0.00ns,172.00ns,12.00ns,166.00ns,2.22us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.01ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,2.92us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,476.82ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.41us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,527.18ms,27.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.61us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,526.98ms,26.00ns,0.00ns,27.00ns,7.00ns,24.00ns,3.65us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,476.88ms,22.00ns,0.00ns,22.00ns,3.00ns,20.00ns,2.29us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,526.39ms,28.00ns,0.00ns,28.00ns,7.00ns,26.00ns,2.47us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,477.18ms,23.00ns,0.00ns,23.00ns,5.00ns,20.00ns,2.26us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,526.88ms,26.00ns,0.00ns,26.00ns,5.00ns,24.00ns,2.18us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,526.41ms,23.00ns,0.00ns,23.00ns,6.00ns,21.00ns,2.48us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,526.79ms,12.00ns,0.00ns,13.00ns,4.00ns,11.00ns,2.15us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.99ms,26.00ns,0.00ns,26.00ns,5.00ns,23.00ns,1.86us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,526.60ms,22.00ns,0.00ns,22.00ns,5.00ns,20.00ns,2.19us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.48s,173.00ns,0.00ns,174.00ns,15.00ns,167.00ns,6.76us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,542.67ms,14.00ns,0.00ns,14.00ns,6.00ns,12.00ns,2.80us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,477.11ms,12.00ns,0.00ns,12.00ns,19.00ns,10.00ns,13.12us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,527.06ms,24.00ns,0.00ns,24.00ns,4.00ns,21.00ns,2.27us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,526.56ms,24.00ns,0.00ns,24.00ns,6.00ns,21.00ns,2.17us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,540.01ms,23.00ns,0.00ns,23.00ns,5.00ns,19.00ns,2.85us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.07ms,28.00ns,0.00ns,28.00ns,20.00ns,26.00ns,18.69us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.03ms,23.00ns,0.00ns,23.00ns,5.00ns,20.00ns,2.17us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.09ms,28.00ns,0.00ns,28.00ns,6.00ns,25.00ns,2.85us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,526.63ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.48us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,526.81ms,19.00ns,0.00ns,19.00ns,5.00ns,16.00ns,2.81us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.04ms,27.00ns,0.00ns,27.00ns,8.00ns,24.00ns,6.26us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,526.87ms,22.00ns,0.00ns,22.00ns,5.00ns,20.00ns,2.30us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,173.00ns,0.00ns,174.00ns,12.00ns,168.00ns,2.45us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,531.96ms,14.00ns,0.00ns,14.00ns,3.00ns,12.00ns,2.19us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,476.25ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,1.75us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,526.52ms,25.00ns,0.00ns,25.00ns,6.00ns,22.00ns,2.22us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,536.97ms,25.00ns,0.00ns,25.00ns,15.00ns,22.00ns,14.28us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,27235,4.52s,110.08us,0.00ns,110.11us,556.00ns,108.74us,133.75us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13536,4.51s,220.59us,0.00ns,221.60us,5.83us,210.07us,240.22us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13567,4.52s,219.91us,0.00ns,221.11us,6.63us,207.37us,240.33us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,213982,4.62s,14.12us,0.00ns,13.99us,250.00ns,13.58us,22.70us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,216437,4.62s,13.67us,0.00ns,13.83us,249.00ns,13.51us,21.21us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,14564,4.51s,204.00us,0.00ns,205.96us,3.80us,202.87us,222.87us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7944,4.51s,377.05us,0.00ns,377.61us,4.14us,374.57us,471.51us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,128038,4.61s,22.34us,0.00ns,23.11us,2.83us,22.30us,44.46us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,69196,4.56s,42.94us,0.00ns,43.32us,1.72us,41.78us,73.12us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,62702,4.56s,47.71us,0.00ns,47.81us,2.88us,43.45us,68.98us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,12976,4.51s,231.59us,4.00ns,231.16us,4.79us,216.44us,247.27us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,13118,4.51s,227.49us,1.00ns,228.66us,5.16us,216.51us,243.92us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,526.64ms,26.00ns,0.00ns,27.00ns,23.00ns,24.00ns,19.16us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,530.22ms,26.00ns,0.00ns,27.00ns,15.00ns,23.00ns,13.79us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,526.51ms,25.00ns,0.00ns,25.00ns,6.00ns,22.00ns,2.14us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,526.54ms,34.00ns,0.00ns,34.00ns,6.00ns,31.00ns,2.32us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,489.10ms,23.00ns,0.00ns,24.00ns,22.00ns,21.00ns,20.92us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,526.93ms,12.00ns,0.00ns,12.00ns,21.00ns,10.00ns,20.05us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,527.08ms,31.00ns,0.00ns,31.00ns,6.00ns,29.00ns,2.40us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.48s,171.00ns,0.00ns,173.00ns,11.00ns,167.00ns,2.38us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,531.60ms,15.00ns,0.00ns,15.00ns,4.00ns,12.00ns,2.36us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,476.65ms,12.00ns,0.00ns,13.00ns,3.00ns,11.00ns,2.14us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,577.09ms,39.00ns,0.00ns,39.00ns,7.00ns,36.00ns,1.93us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,526.92ms,39.00ns,0.00ns,39.00ns,6.00ns,36.00ns,2.09us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,99412,4.57s,28.94us,1.00ns,30.14us,2.82us,26.63us,41.20us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,35883,4.56s,81.42us,0.00ns,83.57us,3.41us,80.01us,95.91us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,35432,4.56s,86.47us,0.00ns,84.63us,3.21us,80.05us,94.22us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,221262,4.62s,13.51us,0.00ns,13.53us,117.00ns,13.38us,17.66us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,221872,4.62s,13.47us,0.00ns,13.49us,124.00ns,13.35us,18.52us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,39705,4.56s,75.75us,0.00ns,75.52us,1.24us,72.37us,90.50us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7952,4.51s,376.38us,0.00ns,377.25us,4.77us,374.59us,426.24us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,12189,4.51s,245.69us,0.00ns,246.10us,3.23us,242.62us,294.86us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,114980,4.62s,23.16us,0.00ns,25.77us,3.60us,22.76us,45.47us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,214296,4.62s,13.95us,0.00ns,13.96us,262.00ns,13.45us,22.11us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,216242,4.62s,13.91us,0.00ns,13.84us,216.00ns,13.43us,19.51us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,32644,4.56s,91.00us,0.00ns,91.87us,2.86us,87.81us,110.92us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,32636,4.51s,91.02us,0.00ns,91.89us,2.86us,88.14us,110.52us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,476.10ms,23.00ns,0.00ns,24.00ns,5.00ns,21.00ns,1.89us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,526.94ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.91us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,526.83ms,23.00ns,0.00ns,23.00ns,5.00ns,20.00ns,2.38us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,526.66ms,29.00ns,0.00ns,29.00ns,7.00ns,26.00ns,2.60us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,526.56ms,24.00ns,0.00ns,24.00ns,13.00ns,22.00ns,12.22us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,476.38ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,2.17us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,476.54ms,26.00ns,0.00ns,26.00ns,7.00ns,24.00ns,2.90us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,527.35ms,24.00ns,0.00ns,24.00ns,16.00ns,21.00ns,15.77us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.53s,171.00ns,0.00ns,173.00ns,15.00ns,167.00ns,8.54us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,533.90ms,17.00ns,0.00ns,17.00ns,20.00ns,15.00ns,15.30us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,526.78ms,12.00ns,0.00ns,12.00ns,26.00ns,10.00ns,19.03us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,536.49ms,31.00ns,0.00ns,31.00ns,6.00ns,28.00ns,2.46us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,533.02ms,31.00ns,0.00ns,31.00ns,6.00ns,28.00ns,2.06us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,74592,4.56s,41.87us,0.00ns,40.18us,4.17us,31.83us,50.08us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41624,4.56s,68.78us,1.00ns,72.04us,3.63us,68.47us,81.84us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41114,4.56s,75.73us,0.00ns,72.93us,3.59us,68.47us,104.92us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,217167,4.62s,13.71us,0.00ns,13.78us,197.00ns,13.58us,33.32us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,219094,4.62s,13.65us,0.00ns,13.66us,122.00ns,13.52us,29.05us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,16523,4.51s,180.52us,0.00ns,181.54us,4.98us,169.38us,227.26us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7950,4.51s,377.11us,0.00ns,377.37us,2.74us,374.58us,429.36us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12251,4.51s,244.92us,0.00ns,244.85us,0.99us,242.59us,279.31us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,118648,4.62s,22.68us,0.00ns,24.93us,4.24us,22.35us,55.24us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,215140,4.62s,13.78us,0.00ns,13.91us,315.00ns,13.30us,22.11us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,219531,4.62s,13.44us,0.00ns,13.63us,325.00ns,13.26us,19.97us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,14407,4.51s,207.92us,0.00ns,208.21us,5.37us,193.13us,243.09us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,14826,4.51s,202.00us,1.00ns,202.31us,5.30us,187.55us,226.29us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,61616,4.56s,48.52us,0.00ns,48.65us,719.00ns,46.87us,55.47us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,40991,4.56s,75.83us,0.00ns,73.15us,3.56us,68.56us,80.43us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41220,4.56s,75.81us,0.00ns,72.74us,3.63us,68.57us,81.44us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,220100,4.62s,13.43us,0.00ns,13.60us,257.00ns,13.29us,17.47us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,216932,4.62s,13.71us,0.00ns,13.80us,217.00ns,13.35us,23.71us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,17460,4.51s,170.88us,0.00ns,171.79us,3.81us,157.62us,268.48us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7945,4.51s,376.73us,0.00ns,377.59us,3.77us,376.22us,426.68us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12270,4.51s,244.48us,0.00ns,244.48us,1.27us,242.52us,291.15us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,126464,4.62s,22.50us,0.00ns,23.40us,2.04us,22.42us,44.59us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,221145,4.62s,13.70us,0.00ns,13.53us,265.00ns,13.12us,20.78us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,222764,4.62s,13.27us,0.00ns,13.44us,266.00ns,13.12us,22.82us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,13480,4.51s,222.23us,0.00ns,222.53us,11.03us,191.96us,265.28us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,14157,4.51s,211.80us,0.00ns,211.89us,7.59us,192.37us,239.07us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,186852,4.62s,15.98us,0.00ns,16.02us,262.00ns,15.51us,21.40us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,33353,4.56s,91.34us,0.00ns,89.91us,3.40us,85.45us,110.47us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,33428,4.56s,91.46us,0.00ns,89.71us,3.23us,85.55us,97.91us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,204854,4.62s,14.87us,0.00ns,14.61us,385.00ns,14.04us,22.42us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,211684,4.62s,14.07us,0.00ns,14.14us,229.00ns,13.91us,22.94us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,28711,4.56s,104.36us,0.00ns,104.46us,2.18us,96.69us,127.02us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7947,4.51s,377.17us,0.00ns,377.51us,2.17us,375.84us,432.92us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,118739,4.62s,23.36us,0.00ns,24.94us,3.23us,23.21us,39.89us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,149444,4.57s,19.60us,0.00ns,20.04us,1.22us,19.27us,29.21us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,129632,4.57s,22.72us,0.00ns,23.11us,1.46us,20.84us,33.30us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,23446,4.51s,124.68us,0.00ns,127.93us,10.34us,106.92us,169.25us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,23587,4.51s,124.37us,0.00ns,127.16us,11.38us,106.41us,174.41us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,158664,4.62s,18.56us,0.00ns,18.88us,647.00ns,18.47us,26.88us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,37705,4.56s,81.84us,0.00ns,79.53us,3.49us,74.85us,99.54us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,38221,4.56s,75.85us,0.00ns,78.46us,3.58us,74.78us,92.91us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,13258,4.51s,225.77us,0.00ns,226.25us,1.02us,225.64us,238.38us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,13316,4.51s,224.79us,0.00ns,225.26us,1.16us,224.76us,244.64us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,50173,4.56s,59.90us,0.00ns,59.76us,1.43us,56.46us,73.19us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7947,4.51s,377.20us,0.00ns,377.51us,1.36us,375.78us,415.48us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,131017,4.62s,22.46us,0.00ns,22.57us,498.00ns,22.41us,45.16us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,140087,4.57s,20.68us,0.00ns,21.38us,2.03us,19.30us,34.26us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,136858,4.62s,21.26us,0.00ns,21.89us,1.83us,20.22us,29.60us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,50642,4.57s,58.64us,0.00ns,59.20us,2.67us,54.49us,82.63us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,49721,4.57s,59.94us,0.00ns,60.30us,2.61us,55.06us,82.48us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,100952,4.57s,29.65us,0.00ns,29.68us,189.00ns,29.57us,37.30us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41620,4.57s,75.22us,0.00ns,72.05us,3.64us,67.97us,85.76us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41842,4.57s,69.39us,0.00ns,71.66us,3.64us,67.96us,90.21us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,11815,4.51s,252.99us,0.00ns,253.90us,3.60us,252.37us,288.72us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,11867,4.51s,251.66us,0.00ns,252.77us,3.84us,251.10us,284.67us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,52333,4.56s,57.26us,0.00ns,57.29us,498.00ns,55.50us,70.78us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7951,4.51s,377.18us,0.00ns,377.31us,1.04us,375.75us,409.67us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,64483,4.56s,45.59us,0.00ns,46.20us,2.91us,41.96us,63.06us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,156630,4.62s,18.43us,0.00ns,19.12us,1.72us,17.56us,32.60us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,149276,4.62s,19.53us,0.00ns,20.06us,1.39us,18.81us,32.92us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,56051,4.56s,53.32us,0.00ns,53.49us,894.00ns,51.67us,61.73us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,56575,4.56s,52.73us,0.00ns,52.99us,1.10us,50.96us,62.37us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,526.96ms,30.00ns,0.00ns,31.00ns,6.00ns,28.00ns,2.06us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,627.23ms,38.00ns,0.00ns,39.00ns,14.00ns,36.00ns,9.65us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.10ms,28.00ns,0.00ns,29.00ns,6.00ns,25.00ns,2.40us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,526.93ms,28.00ns,0.00ns,28.00ns,6.00ns,25.00ns,2.35us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.01ms,26.00ns,0.00ns,26.00ns,5.00ns,24.00ns,2.35us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,526.74ms,23.00ns,0.00ns,23.00ns,6.00ns,21.00ns,2.27us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.63ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,1.98us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,526.63ms,23.00ns,0.00ns,23.00ns,4.00ns,21.00ns,2.32us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,179.00ns,0.00ns,180.00ns,12.00ns,174.00ns,3.68us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.12ms,20.00ns,0.00ns,20.00ns,26.00ns,18.00ns,21.19us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,476.69ms,15.00ns,0.00ns,15.00ns,21.00ns,12.00ns,19.99us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,577.15ms,62.00ns,0.00ns,63.00ns,7.00ns,59.00ns,2.03us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,577.12ms,42.00ns,0.00ns,42.00ns,7.00ns,39.00ns,3.10us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,526.94ms,34.00ns,0.00ns,35.00ns,7.00ns,32.00ns,2.35us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.07ms,39.00ns,0.00ns,39.00ns,5.00ns,37.00ns,2.23us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,526.98ms,29.00ns,0.00ns,30.00ns,15.00ns,26.00ns,13.53us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,526.86ms,24.00ns,0.00ns,24.00ns,6.00ns,22.00ns,2.40us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.06ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.74us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,476.88ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,2.72us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.94ms,22.00ns,0.00ns,23.00ns,5.00ns,20.00ns,2.21us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,627.04ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.68us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.48s,180.00ns,0.00ns,182.00ns,13.00ns,175.00ns,2.68us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,526.63ms,17.00ns,0.00ns,17.00ns,4.00ns,15.00ns,2.23us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,526.47ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,2.29us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,576.77ms,41.00ns,0.00ns,41.00ns,20.00ns,38.00ns,18.96us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,526.35ms,29.00ns,0.00ns,29.00ns,5.00ns,27.00ns,2.17us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,34704,4.56s,86.40us,0.00ns,86.40us,605.00ns,83.34us,96.98us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13750,4.51s,217.64us,0.00ns,218.15us,5.36us,204.94us,235.98us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13760,4.51s,217.17us,4.00ns,217.99us,6.42us,204.62us,239.30us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,214659,4.62s,13.77us,0.00ns,13.94us,257.00ns,13.61us,22.23us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,213798,4.62s,13.89us,0.00ns,14.00us,233.00ns,13.67us,21.49us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,18004,4.51s,165.98us,0.00ns,166.60us,2.13us,164.70us,210.75us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7963,4.51s,376.77us,0.00ns,376.75us,1.54us,374.56us,423.18us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,129407,4.62s,22.35us,0.00ns,22.86us,2.02us,22.31us,44.48us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,81288,4.56s,36.93us,0.00ns,36.87us,2.11us,33.20us,55.08us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,79741,4.56s,37.90us,0.00ns,37.59us,2.12us,34.41us,50.98us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,15999,4.51s,186.40us,0.00ns,187.48us,3.99us,182.01us,205.41us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,16198,4.51s,183.85us,0.00ns,185.18us,3.36us,180.94us,201.88us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,19681,4.51s,152.01us,0.00ns,152.40us,1.31us,145.81us,168.47us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13515,4.51s,220.58us,0.00ns,221.95us,5.93us,208.35us,241.00us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13603,4.51s,219.26us,0.00ns,220.52us,5.69us,210.18us,239.90us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,218426,4.62s,13.69us,0.00ns,13.70us,122.00ns,13.57us,18.26us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,210193,4.62s,14.35us,0.00ns,14.24us,219.00ns,13.80us,19.30us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,10880,4.51s,275.62us,6.00ns,275.71us,4.37us,269.81us,321.81us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7967,4.51s,376.32us,0.00ns,376.53us,1.83us,374.55us,406.69us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,12259,4.51s,244.49us,0.00ns,244.69us,1.25us,242.55us,279.62us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,128222,4.62s,22.42us,0.00ns,23.07us,2.11us,22.35us,44.20us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,207935,4.62s,14.38us,0.00ns,14.39us,104.00ns,14.18us,18.29us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,210942,4.62s,14.16us,0.00ns,14.19us,155.00ns,13.91us,21.93us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,10249,4.51s,293.42us,0.00ns,292.70us,2.58us,287.30us,306.12us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,10215,4.51s,293.55us,0.00ns,293.65us,3.13us,286.96us,304.84us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,526.56ms,40.00ns,0.00ns,40.00ns,6.00ns,37.00ns,1.73us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,526.80ms,33.00ns,0.00ns,33.00ns,6.00ns,30.00ns,2.44us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,527.09ms,29.00ns,0.00ns,29.00ns,5.00ns,26.00ns,2.17us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,576.95ms,37.00ns,0.00ns,37.00ns,6.00ns,34.00ns,2.09us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,526.93ms,28.00ns,0.00ns,29.00ns,27.00ns,26.00ns,18.68us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,527.11ms,36.00ns,0.00ns,36.00ns,7.00ns,26.00ns,2.04us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,527.10ms,31.00ns,0.00ns,31.00ns,5.00ns,28.00ns,2.25us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.53s,177.00ns,0.00ns,179.00ns,12.00ns,173.00ns,2.29us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,526.82ms,18.00ns,0.00ns,18.00ns,6.00ns,16.00ns,2.77us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,476.85ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,2.04us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,627.18ms,86.00ns,0.00ns,87.00ns,8.00ns,82.00ns,2.39us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,577.20ms,57.00ns,0.00ns,57.00ns,8.00ns,54.00ns,2.34us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,577.09ms,38.00ns,0.00ns,38.00ns,6.00ns,36.00ns,2.56us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,526.38ms,38.00ns,0.00ns,38.00ns,7.00ns,36.00ns,2.12us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,526.51ms,30.00ns,0.00ns,30.00ns,5.00ns,27.00ns,1.83us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,526.46ms,31.00ns,0.00ns,31.00ns,5.00ns,28.00ns,1.74us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,526.98ms,33.00ns,0.00ns,34.00ns,24.00ns,30.00ns,13.26us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,476.42ms,19.00ns,0.00ns,19.00ns,11.00ns,16.00ns,9.82us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,526.52ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.37us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,42,1000000,526.59ms,28.00ns,0.00ns,28.00ns,6.00ns,25.00ns,1.94us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.53s,184.00ns,0.00ns,185.00ns,12.00ns,178.00ns,1.98us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,527.14ms,19.00ns,0.00ns,19.00ns,3.00ns,17.00ns,1.74us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,526.54ms,15.00ns,0.00ns,15.00ns,2.00ns,13.00ns,1.94us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,577.29ms,52.00ns,0.00ns,53.00ns,9.00ns,49.00ns,4.71us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,527.12ms,36.00ns,0.00ns,36.00ns,7.00ns,32.00ns,2.31us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,128274,4.57s,23.04us,0.00ns,23.35us,2.55us,18.39us,48.74us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29485,4.56s,101.01us,0.00ns,101.72us,3.62us,97.23us,207.12us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,29607,4.56s,101.90us,0.00ns,101.29us,3.07us,96.93us,112.93us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,219931,4.62s,13.59us,0.00ns,13.61us,125.00ns,13.45us,17.88us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,221246,4.62s,13.51us,0.00ns,13.53us,125.00ns,13.36us,19.47us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,31530,4.56s,94.93us,0.00ns,95.12us,1.04us,93.62us,115.36us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7963,4.51s,376.37us,0.00ns,376.72us,1.85us,374.53us,419.69us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,119383,4.62s,23.44us,0.00ns,24.80us,2.86us,22.87us,44.75us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,141149,4.62s,19.71us,0.00ns,21.22us,3.03us,18.42us,33.87us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,134787,4.57s,21.39us,0.00ns,22.22us,2.14us,20.03us,29.32us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,27902,4.56s,107.98us,1.00ns,107.49us,4.32us,100.49us,127.72us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,27768,4.56s,108.49us,0.00ns,108.00us,4.11us,100.92us,127.73us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,62283,4.56s,47.98us,0.00ns,48.13us,689.00ns,46.72us,55.36us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29227,4.56s,103.51us,0.00ns,102.61us,3.15us,98.33us,114.96us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,29082,4.56s,104.00us,0.00ns,103.13us,3.00us,98.75us,114.72us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,221666,4.62s,13.35us,0.00ns,13.50us,275.00ns,13.21us,22.42us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,223982,4.62s,13.31us,0.00ns,13.36us,191.00ns,13.17us,17.37us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,22214,4.51s,134.48us,0.00ns,135.02us,3.59us,127.32us,152.76us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7951,4.51s,377.12us,0.00ns,377.31us,1.42us,375.92us,407.09us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,12264,4.51s,244.52us,0.00ns,244.60us,1.26us,242.59us,287.02us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,122272,4.62s,22.79us,0.00ns,24.21us,2.64us,22.65us,45.05us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,214794,4.62s,13.64us,0.00ns,13.93us,524.00ns,13.14us,19.79us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,217824,4.62s,13.51us,0.00ns,13.74us,456.00ns,13.13us,22.27us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,18486,4.51s,160.78us,1.00ns,162.25us,5.83us,141.44us,189.09us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,18531,4.51s,160.39us,0.00ns,161.86us,6.16us,140.59us,187.90us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,627.20ms,34.00ns,0.00ns,34.00ns,15.00ns,32.00ns,11.83us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,627.31ms,32.00ns,0.00ns,32.00ns,26.00ns,28.00ns,19.32us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,526.61ms,28.00ns,0.00ns,29.00ns,27.00ns,26.00ns,21.95us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,526.84ms,33.00ns,0.00ns,33.00ns,7.00ns,28.00ns,2.55us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,526.72ms,30.00ns,0.00ns,30.00ns,6.00ns,26.00ns,2.45us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,476.90ms,23.00ns,0.00ns,23.00ns,24.00ns,20.00ns,23.37us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,526.95ms,25.00ns,0.00ns,25.00ns,6.00ns,22.00ns,2.25us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.53s,190.00ns,0.00ns,191.00ns,12.00ns,177.00ns,2.47us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,476.73ms,17.00ns,0.00ns,17.00ns,5.00ns,15.00ns,2.07us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,476.82ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,1.99us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,627.22ms,76.00ns,0.00ns,78.00ns,19.00ns,71.00ns,16.75us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,577.09ms,49.00ns,0.00ns,50.00ns,7.00ns,46.00ns,2.55us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,527.06ms,35.00ns,0.00ns,35.00ns,6.00ns,32.00ns,2.56us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,577.27ms,37.00ns,0.00ns,38.00ns,31.00ns,35.00ns,19.94us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,526.89ms,28.00ns,0.00ns,28.00ns,13.00ns,25.00ns,11.42us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.18ms,25.00ns,0.00ns,26.00ns,6.00ns,23.00ns,3.38us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,526.88ms,33.00ns,0.00ns,33.00ns,20.00ns,30.00ns,16.70us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,526.80ms,19.00ns,0.00ns,19.00ns,21.00ns,17.00ns,20.79us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,527.01ms,22.00ns,0.00ns,22.00ns,6.00ns,19.00ns,2.51us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,526.97ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.51us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.53s,191.00ns,0.00ns,192.00ns,11.00ns,184.00ns,2.08us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,526.48ms,18.00ns,0.00ns,18.00ns,7.00ns,17.00ns,5.61us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,476.70ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.52us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,593.09ms,47.00ns,0.00ns,48.00ns,11.00ns,44.00ns,7.79us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,532.77ms,33.00ns,0.00ns,33.00ns,5.00ns,31.00ns,2.31us\n"
  },
  {
    "path": "benchmarks/record/x86_64/2023-08-20.csv",
    "content": "name,model,rebar_version,engine,engine_version,err,haystack_len,iters,total,median,mad,mean,stddev,min,max\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,17139,4.51s,174.80us,0.00ns,175.01us,947.00ns,173.46us,186.09us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,16156,4.51s,189.83us,0.00ns,185.67us,5.68us,177.94us,198.58us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,17875,4.51s,167.52us,0.00ns,167.80us,1.22us,166.23us,179.32us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,6342,4.51s,472.36us,1.00ns,473.01us,4.45us,464.38us,512.90us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,7154,4.51s,415.48us,0.00ns,419.32us,15.26us,408.16us,492.20us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,13872,4.56s,215.46us,0.00ns,215.93us,1.48us,214.03us,236.79us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,16146,4.51s,185.61us,0.00ns,185.78us,0.95us,182.53us,197.55us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,18409,4.51s,162.72us,0.00ns,162.94us,933.00ns,161.47us,174.48us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,17492,4.51s,174.70us,0.00ns,171.47us,5.69us,161.68us,189.45us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,7113,4.51s,416.71us,0.00ns,421.77us,16.79us,400.02us,483.99us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,16038,4.51s,187.06us,0.00ns,187.03us,1.09us,184.62us,195.81us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,9840,4.51s,300.10us,0.00ns,304.85us,9.23us,297.64us,338.84us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,3408,4.51s,879.99us,1.00ns,880.47us,3.73us,871.03us,941.58us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,4689,4.51s,632.76us,0.00ns,639.88us,28.19us,602.09us,835.75us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,9221,4.56s,324.43us,0.00ns,325.02us,1.25us,323.48us,338.56us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,9295,4.51s,322.05us,0.00ns,322.72us,1.82us,321.69us,342.13us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,9597,4.51s,320.87us,0.00ns,312.59us,11.79us,295.01us,334.63us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,8257,4.51s,353.58us,0.00ns,363.31us,12.38us,351.82us,388.05us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,6166,4.51s,482.95us,0.00ns,486.52us,5.38us,479.20us,512.96us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,2244,4.51s,1.33ms,11.00ns,1.34ms,11.25us,1.32ms,1.41ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,3619,4.51s,821.33us,0.00ns,829.14us,33.64us,810.90us,1.01ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,6808,4.56s,439.92us,0.00ns,440.35us,1.43us,437.85us,456.56us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,5512,4.51s,543.70us,0.00ns,544.26us,1.56us,539.87us,564.34us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,6203,4.51s,480.76us,0.00ns,483.64us,7.34us,476.21us,509.96us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,5669,4.51s,528.61us,0.00ns,529.22us,1.48us,527.72us,547.11us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,832.38ms,186.00ns,0.00ns,186.00ns,13.00ns,182.00ns,3.66us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,879.78ms,187.00ns,0.00ns,188.00ns,12.00ns,184.00ns,1.92us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,830.05ms,171.00ns,0.00ns,172.00ns,12.00ns,167.00ns,2.62us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,829.37ms,143.00ns,0.00ns,144.00ns,19.00ns,138.00ns,12.78us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,780.13ms,160.00ns,0.00ns,160.00ns,20.00ns,153.00ns,14.70us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.78s,297.00ns,0.00ns,299.00ns,18.00ns,288.00ns,7.97us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,882.05ms,190.00ns,0.00ns,191.00ns,18.00ns,185.00ns,12.07us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,780.10ms,168.00ns,0.00ns,169.00ns,11.00ns,164.00ns,2.19us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,829.93ms,170.00ns,0.00ns,170.00ns,12.00ns,166.00ns,6.36us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,829.56ms,159.00ns,0.00ns,160.00ns,12.00ns,153.00ns,3.28us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,880.14ms,207.00ns,0.00ns,207.00ns,16.00ns,203.00ns,7.80us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,1.18s,320.00ns,0.00ns,320.00ns,17.00ns,314.00ns,5.93us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,1.13s,269.00ns,0.00ns,269.00ns,11.00ns,260.00ns,2.41us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,929.87ms,262.00ns,0.00ns,250.00ns,30.00ns,200.00ns,9.20us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,2.03s,434.00ns,0.00ns,435.00ns,19.00ns,426.00ns,4.85us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,1.13s,339.00ns,0.00ns,340.00ns,21.00ns,334.00ns,14.61us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,1.13s,321.00ns,0.00ns,321.00ns,17.00ns,313.00ns,7.23us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,1.23s,375.00ns,0.00ns,376.00ns,23.00ns,367.00ns,15.21us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,1.48s,496.00ns,0.00ns,497.00ns,21.00ns,486.00ns,7.46us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,1.08s,301.00ns,0.00ns,303.00ns,16.00ns,290.00ns,2.20us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.08s,270.00ns,0.00ns,272.00ns,17.00ns,260.00ns,2.70us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,2.34s,586.00ns,0.00ns,589.00ns,25.00ns,576.00ns,12.47us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,1.58s,556.00ns,0.00ns,557.00ns,21.00ns,547.00ns,5.86us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,1.53s,502.00ns,0.00ns,502.00ns,30.00ns,492.00ns,22.70us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.63s,569.00ns,0.00ns,570.00ns,22.00ns,557.00ns,8.00us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,578.68ms,50.00ns,0.00ns,50.00ns,6.00ns,47.00ns,2.28us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,579.18ms,49.00ns,0.00ns,49.00ns,7.00ns,47.00ns,2.49us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,628.88ms,45.00ns,0.00ns,45.00ns,7.00ns,42.00ns,2.39us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,528.12ms,37.00ns,0.00ns,37.00ns,11.00ns,31.00ns,8.04us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,528.35ms,26.00ns,0.00ns,26.00ns,4.00ns,22.00ns,1.75us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.53s,182.00ns,0.00ns,184.00ns,12.00ns,177.00ns,2.10us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,580.76ms,54.00ns,0.00ns,54.00ns,18.00ns,52.00ns,9.03us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,528.12ms,45.00ns,0.00ns,45.00ns,7.00ns,42.00ns,2.29us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,578.31ms,45.00ns,0.00ns,45.00ns,15.00ns,42.00ns,13.22us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,528.65ms,24.00ns,0.00ns,24.00ns,6.00ns,21.00ns,2.37us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,528.79ms,47.00ns,0.00ns,48.00ns,13.00ns,44.00ns,10.01us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,717397,4.88s,4.15us,0.00ns,4.15us,65.00ns,4.07us,11.04us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,703727,4.83s,4.24us,0.00ns,4.23us,65.00ns,4.10us,11.38us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,684346,4.83s,4.38us,0.00ns,4.35us,89.00ns,4.11us,10.85us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,137778,4.62s,21.73us,0.00ns,21.74us,664.00ns,21.47us,43.44us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,26188,4.56s,114.37us,0.00ns,114.53us,619.00ns,114.34us,137.33us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,389086,4.82s,7.36us,0.00ns,7.38us,203.00ns,7.12us,29.15us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,688541,4.83s,4.34us,0.00ns,4.32us,83.00ns,4.17us,11.72us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,597419,4.78s,4.98us,0.00ns,4.99us,69.00ns,4.93us,12.83us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,700156,4.88s,4.29us,0.00ns,4.25us,97.00ns,4.10us,11.08us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,26152,4.56s,114.38us,0.00ns,114.69us,1.89us,114.36us,141.80us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,684422,4.88s,4.34us,0.00ns,4.35us,76.00ns,4.28us,13.69us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,571945,4.83s,5.20us,0.00ns,5.21us,86.00ns,5.14us,25.38us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,75459,4.56s,40.13us,0.00ns,39.72us,837.00ns,38.16us,70.08us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,17460,4.51s,171.55us,0.00ns,171.79us,936.00ns,171.52us,212.53us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,261477,4.72s,11.23us,0.00ns,11.14us,200.00ns,10.91us,18.24us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,536469,4.73s,5.22us,0.00ns,5.56us,535.00ns,5.18us,11.04us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,567920,4.83s,5.18us,0.00ns,5.25us,246.00ns,5.11us,11.16us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,487188,4.73s,6.47us,0.00ns,6.13us,562.00ns,5.24us,28.55us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,389676,4.72s,7.66us,0.00ns,7.67us,87.00ns,7.64us,12.75us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,50441,4.56s,59.76us,0.00ns,59.44us,2.54us,55.09us,82.26us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,13096,4.51s,228.75us,0.00ns,229.06us,1.09us,228.71us,270.55us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,187644,4.67s,15.61us,0.00ns,15.64us,164.00ns,15.44us,26.30us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,389200,4.72s,7.66us,0.00ns,7.68us,95.00ns,7.63us,11.79us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,389407,4.67s,7.66us,0.00ns,7.67us,92.00ns,7.62us,16.93us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,388175,4.72s,7.69us,0.00ns,7.70us,105.00ns,7.62us,16.36us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,476.90ms,14.00ns,0.00ns,14.00ns,6.00ns,12.00ns,3.95us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,526.71ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,1.96us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,476.85ms,15.00ns,0.00ns,15.00ns,16.00ns,13.00ns,11.96us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,576.90ms,35.00ns,0.00ns,37.00ns,7.00ns,31.00ns,2.38us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,728.20ms,144.00ns,0.00ns,145.00ns,20.00ns,141.00ns,14.08us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.48s,160.00ns,0.00ns,161.00ns,12.00ns,156.00ns,2.04us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,476.81ms,15.00ns,0.00ns,15.00ns,3.00ns,12.00ns,1.79us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,526.72ms,15.00ns,0.00ns,15.00ns,16.00ns,12.00ns,15.74us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,527.07ms,14.00ns,0.00ns,14.00ns,15.00ns,12.00ns,13.80us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,778.61ms,144.00ns,0.00ns,145.00ns,15.00ns,141.00ns,9.75us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,476.53ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.00us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,527.25ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,3.33us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,627.06ms,60.00ns,0.00ns,60.00ns,8.00ns,57.00ns,2.97us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,878.53ms,209.00ns,0.00ns,210.00ns,19.00ns,205.00ns,9.23us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.48s,164.00ns,0.00ns,165.00ns,12.00ns,160.00ns,3.82us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,527.05ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,2.11us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,527.15ms,18.00ns,0.00ns,19.00ns,5.00ns,16.00ns,2.41us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,526.81ms,19.00ns,0.00ns,19.00ns,5.00ns,16.00ns,3.06us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,526.82ms,22.00ns,0.00ns,22.00ns,4.00ns,20.00ns,2.14us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,727.27ms,80.00ns,0.00ns,80.00ns,25.00ns,70.00ns,17.67us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.13s,272.00ns,0.00ns,273.00ns,16.00ns,269.00ns,2.38us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.48s,171.00ns,0.00ns,172.00ns,12.00ns,165.00ns,2.40us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,526.99ms,22.00ns,0.00ns,23.00ns,21.00ns,20.00ns,20.64us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,477.11ms,21.00ns,0.00ns,21.00ns,5.00ns,19.00ns,2.68us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,527.06ms,21.00ns,0.00ns,21.00ns,5.00ns,19.00ns,2.83us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,477.01ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,1.89us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,527.07ms,12.00ns,0.00ns,12.00ns,4.00ns,11.00ns,2.33us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,476.90ms,12.00ns,0.00ns,12.00ns,29.00ns,11.00ns,18.23us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,477.19ms,15.00ns,0.00ns,15.00ns,14.00ns,13.00ns,13.86us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,527.26ms,30.00ns,0.00ns,29.00ns,6.00ns,21.00ns,2.42us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.48s,157.00ns,0.00ns,157.00ns,15.00ns,153.00ns,10.45us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,526.58ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.15us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,526.91ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,2.14us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,526.70ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.15us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,526.81ms,23.00ns,0.00ns,24.00ns,6.00ns,21.00ns,2.34us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,527.08ms,13.00ns,0.00ns,13.00ns,6.00ns,11.00ns,6.39us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,476.63ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.90us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,476.92ms,17.00ns,0.00ns,17.00ns,14.00ns,14.00ns,13.26us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,527.13ms,38.00ns,0.00ns,38.00ns,9.00ns,28.00ns,6.86us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.48s,156.00ns,0.00ns,157.00ns,16.00ns,153.00ns,10.08us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,476.50ms,14.00ns,0.00ns,14.00ns,3.00ns,12.00ns,1.64us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,526.70ms,13.00ns,0.00ns,13.00ns,24.00ns,11.00ns,20.05us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,575.99ms,15.00ns,0.00ns,14.00ns,6.00ns,12.00ns,2.52us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,527.00ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,1.96us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,476.65ms,18.00ns,0.00ns,18.00ns,5.00ns,16.00ns,2.33us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,577.09ms,43.00ns,0.00ns,42.00ns,7.00ns,34.00ns,1.82us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.48s,157.00ns,0.00ns,158.00ns,11.00ns,153.00ns,2.09us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,576.88ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,2.17us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,476.95ms,13.00ns,0.00ns,13.00ns,4.00ns,11.00ns,1.98us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,576.90ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,3.15us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,,1000000,477.01ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.86us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,,1000000,476.64ms,11.00ns,0.00ns,11.00ns,15.00ns,9.00ns,14.94us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,,1000000,476.86ms,11.00ns,0.00ns,11.00ns,3.00ns,9.00ns,2.58us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,,1000000,476.32ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,1.93us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,,1000000,426.67ms,10.00ns,0.00ns,10.00ns,1.00ns,9.00ns,608.00ns\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,,1000000,1.48s,154.00ns,0.00ns,155.00ns,18.00ns,151.00ns,13.07us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,,1000000,476.80ms,11.00ns,0.00ns,11.00ns,14.00ns,9.00ns,9.75us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,,1000000,476.90ms,10.00ns,0.00ns,10.00ns,19.00ns,9.00ns,18.71us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,,1000000,477.01ms,10.00ns,0.00ns,10.00ns,4.00ns,9.00ns,2.85us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,,1000000,526.99ms,10.00ns,0.00ns,10.00ns,4.00ns,8.00ns,2.35us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,,1000000,476.39ms,10.00ns,0.00ns,10.00ns,15.00ns,8.00ns,14.55us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,,1000000,526.55ms,11.00ns,0.00ns,12.00ns,2.00ns,9.00ns,1.73us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,,1000000,577.17ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,1.88us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,,1000000,526.60ms,10.00ns,0.00ns,10.00ns,5.00ns,9.00ns,2.95us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,,1000000,1.48s,164.00ns,0.00ns,165.00ns,17.00ns,160.00ns,12.30us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,,1000000,477.16ms,11.00ns,0.00ns,12.00ns,16.00ns,9.00ns,13.39us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,,1000000,477.10ms,10.00ns,0.00ns,10.00ns,4.00ns,9.00ns,2.24us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,,1000000,477.08ms,10.00ns,0.00ns,10.00ns,21.00ns,9.00ns,14.26us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,,1000000,476.93ms,12.00ns,0.00ns,12.00ns,2.00ns,10.00ns,1.91us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,,1000000,526.69ms,11.00ns,0.00ns,11.00ns,30.00ns,9.00ns,19.52us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,,1000000,476.86ms,10.00ns,0.00ns,10.00ns,2.00ns,9.00ns,1.75us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,,1000000,1.48s,155.00ns,0.00ns,156.00ns,11.00ns,151.00ns,1.92us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,,1000000,477.49ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,2.68us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,,1000000,477.00ms,10.00ns,0.00ns,10.00ns,4.00ns,9.00ns,2.68us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,,1000000,476.61ms,10.00ns,0.00ns,10.00ns,13.00ns,9.00ns,12.56us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,595563,4.78s,5.00us,0.00ns,5.01us,70.00ns,4.94us,14.85us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,594742,4.78s,5.00us,0.00ns,5.01us,78.00ns,4.92us,11.90us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,595804,4.83s,5.00us,0.00ns,5.00us,64.00ns,4.92us,10.84us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,132090,4.57s,22.66us,0.00ns,22.68us,144.00ns,22.59us,51.20us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,25841,4.56s,115.42us,0.00ns,116.06us,1.92us,115.25us,144.43us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,348133,4.82s,8.26us,0.00ns,8.28us,147.00ns,8.07us,39.45us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,588932,4.78s,5.03us,0.00ns,5.06us,102.00ns,4.94us,13.89us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,599388,4.78s,4.97us,0.00ns,4.97us,70.00ns,4.90us,13.11us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,598014,4.83s,4.97us,0.00ns,4.98us,78.00ns,4.90us,11.11us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,591353,4.78s,5.04us,0.00ns,5.04us,72.00ns,4.95us,13.30us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,387836,4.67s,7.69us,0.00ns,7.70us,97.00ns,7.59us,13.84us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,71713,4.56s,41.73us,0.00ns,41.80us,294.00ns,41.58us,53.04us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,17126,4.51s,174.54us,0.00ns,175.15us,2.35us,173.76us,217.71us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,220787,4.72s,13.19us,0.00ns,13.26us,273.00ns,13.01us,27.48us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,381843,4.72s,7.81us,0.00ns,7.82us,104.00ns,7.66us,12.60us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,334379,4.67s,8.93us,0.00ns,8.94us,97.00ns,8.82us,14.19us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,390619,4.67s,7.64us,0.00ns,7.65us,97.00ns,7.54us,13.89us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,276096,4.67s,10.68us,0.00ns,10.83us,285.00ns,10.57us,17.64us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,49452,4.56s,60.34us,1.00ns,60.63us,700.00ns,59.50us,72.58us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,12917,4.51s,231.67us,0.00ns,232.22us,1.77us,231.55us,280.18us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,158286,4.67s,18.60us,0.00ns,18.62us,142.00ns,18.50us,34.83us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,272879,4.67s,10.94us,0.00ns,10.96us,110.00ns,10.81us,17.59us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,276297,4.67s,10.79us,0.00ns,10.82us,210.00ns,10.70us,15.84us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,277013,4.67s,10.76us,0.00ns,10.80us,209.00ns,10.69us,23.95us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,476.84ms,19.00ns,0.00ns,19.00ns,8.00ns,17.00ns,6.46us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,527.09ms,19.00ns,0.00ns,19.00ns,5.00ns,16.00ns,2.64us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,526.70ms,19.00ns,0.00ns,19.00ns,7.00ns,16.00ns,3.22us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,527.10ms,36.00ns,0.00ns,36.00ns,25.00ns,33.00ns,22.12us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,778.33ms,153.00ns,0.00ns,153.00ns,12.00ns,146.00ns,2.30us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.48s,162.00ns,0.00ns,163.00ns,14.00ns,157.00ns,9.65us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,526.73ms,20.00ns,0.00ns,20.00ns,5.00ns,17.00ns,2.05us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,526.42ms,19.00ns,0.00ns,19.00ns,5.00ns,16.00ns,2.48us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,526.67ms,19.00ns,0.00ns,19.00ns,5.00ns,16.00ns,2.60us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,778.08ms,153.00ns,0.00ns,153.00ns,9.00ns,146.00ns,2.61us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,527.02ms,20.00ns,0.00ns,20.00ns,6.00ns,18.00ns,2.26us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,527.24ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,2.08us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,577.10ms,61.00ns,0.00ns,60.00ns,7.00ns,53.00ns,1.86us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,928.69ms,229.00ns,0.00ns,229.00ns,15.00ns,217.00ns,5.85us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.48s,174.00ns,0.00ns,175.00ns,12.00ns,168.00ns,2.30us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,527.13ms,29.00ns,0.00ns,29.00ns,5.00ns,26.00ns,2.33us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,527.06ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.08us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,526.48ms,28.00ns,0.00ns,28.00ns,6.00ns,25.00ns,2.37us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,526.70ms,38.00ns,0.00ns,38.00ns,28.00ns,34.00ns,18.18us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,627.17ms,92.00ns,0.00ns,92.00ns,20.00ns,75.00ns,17.46us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.08s,285.00ns,0.00ns,286.00ns,16.00ns,280.00ns,2.41us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.53s,188.00ns,0.00ns,189.00ns,12.00ns,181.00ns,2.26us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,576.59ms,38.00ns,0.00ns,38.00ns,20.00ns,34.00ns,19.26us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,576.67ms,37.00ns,0.00ns,37.00ns,5.00ns,33.00ns,2.05us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,576.68ms,37.00ns,0.00ns,37.00ns,28.00ns,33.00ns,19.54us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,526.64ms,15.00ns,0.00ns,15.00ns,4.00ns,12.00ns,1.90us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,526.60ms,17.00ns,0.00ns,17.00ns,6.00ns,15.00ns,2.70us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,526.90ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,2.08us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,527.03ms,16.00ns,0.00ns,16.00ns,26.00ns,14.00ns,24.89us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,527.05ms,31.00ns,0.00ns,31.00ns,6.00ns,21.00ns,2.49us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.48s,157.00ns,0.00ns,158.00ns,11.00ns,153.00ns,2.44us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,478.06ms,14.00ns,0.00ns,14.00ns,5.00ns,13.00ns,2.10us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,476.93ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,2.96us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,526.80ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,2.65us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,526.54ms,23.00ns,0.00ns,23.00ns,8.00ns,21.00ns,5.87us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,526.49ms,14.00ns,0.00ns,14.00ns,3.00ns,12.00ns,1.74us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,526.58ms,21.00ns,0.00ns,21.00ns,4.00ns,19.00ns,2.70us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,527.06ms,20.00ns,0.00ns,20.00ns,14.00ns,17.00ns,13.46us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,627.54ms,38.00ns,0.00ns,38.00ns,19.00ns,28.00ns,15.45us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.53s,163.00ns,0.00ns,164.00ns,9.00ns,158.00ns,1.95us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,476.45ms,20.00ns,0.00ns,21.00ns,6.00ns,18.00ns,2.91us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,527.11ms,20.00ns,0.00ns,20.00ns,22.00ns,18.00ns,20.97us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,476.80ms,19.00ns,0.00ns,19.00ns,12.00ns,17.00ns,10.76us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,527.22ms,29.00ns,0.00ns,29.00ns,13.00ns,27.00ns,11.03us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,527.05ms,23.00ns,0.00ns,23.00ns,39.00ns,21.00ns,19.47us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,576.95ms,43.00ns,0.00ns,43.00ns,12.00ns,34.00ns,9.60us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.53s,165.00ns,0.00ns,166.00ns,12.00ns,159.00ns,2.24us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,527.48ms,25.00ns,0.00ns,25.00ns,6.00ns,22.00ns,2.56us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,527.07ms,28.00ns,0.00ns,28.00ns,7.00ns,26.00ns,3.04us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,476.96ms,21.00ns,0.00ns,21.00ns,5.00ns,19.00ns,2.13us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,81616,4.57s,37.79us,0.00ns,36.72us,1.94us,33.52us,61.41us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,56176,4.56s,52.27us,0.00ns,53.37us,1.94us,51.02us,78.81us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,56653,4.56s,52.40us,0.00ns,52.92us,1.28us,51.06us,78.55us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,35158,4.56s,84.63us,0.00ns,85.29us,1.65us,83.40us,98.52us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,18880,4.51s,155.81us,1.00ns,158.87us,7.01us,154.29us,226.56us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,52432,4.56s,56.70us,0.00ns,56.89us,1.00us,55.12us,84.02us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,52019,4.56s,57.49us,0.00ns,57.63us,649.00ns,56.32us,73.82us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,64068,4.56s,47.08us,0.00ns,46.79us,1.26us,44.31us,70.31us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,65637,4.56s,45.45us,0.00ns,45.67us,826.00ns,44.48us,68.80us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,18751,4.51s,156.43us,0.00ns,159.96us,6.11us,154.51us,202.70us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,57068,4.56s,52.41us,0.00ns,52.53us,732.00ns,51.36us,72.33us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,25471,4.56s,117.70us,0.00ns,117.75us,669.00ns,115.92us,137.63us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,16178,4.51s,185.22us,0.00ns,185.41us,927.00ns,183.62us,222.40us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,11023,4.51s,276.56us,0.00ns,272.13us,14.78us,251.91us,368.09us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,21764,4.56s,137.53us,0.00ns,137.52us,943.00ns,134.62us,145.20us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,21567,4.51s,142.05us,0.00ns,139.07us,4.83us,130.73us,154.91us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,26695,4.56s,112.20us,0.00ns,112.35us,633.00ns,110.77us,134.16us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,25594,4.56s,114.06us,0.00ns,117.18us,5.73us,112.83us,146.94us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,19099,4.51s,156.14us,0.00ns,157.04us,3.40us,153.01us,185.84us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,9977,4.51s,300.34us,0.00ns,300.68us,1.44us,297.45us,314.11us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,8760,4.51s,341.42us,0.00ns,342.43us,4.80us,340.01us,433.04us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,15865,4.56s,188.09us,0.00ns,188.77us,2.16us,184.18us,201.01us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,17553,4.51s,173.30us,0.00ns,170.88us,4.50us,163.22us,191.14us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,19598,4.51s,147.03us,0.00ns,153.05us,8.90us,142.52us,184.43us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,19956,4.51s,149.76us,0.00ns,150.30us,1.40us,148.58us,175.16us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,577.18ms,46.00ns,0.00ns,46.00ns,6.00ns,43.00ns,2.13us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,526.87ms,47.00ns,0.00ns,48.00ns,12.00ns,43.00ns,9.78us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,576.96ms,45.00ns,0.00ns,45.00ns,7.00ns,42.00ns,1.98us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,577.34ms,53.00ns,0.00ns,53.00ns,12.00ns,50.00ns,7.35us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,778.45ms,154.00ns,0.00ns,157.00ns,13.00ns,149.00ns,4.52us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.53s,184.00ns,0.00ns,185.00ns,12.00ns,176.00ns,2.08us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,527.13ms,49.00ns,0.00ns,49.00ns,22.00ns,46.00ns,19.06us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,577.09ms,44.00ns,0.00ns,44.00ns,7.00ns,41.00ns,2.14us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,576.62ms,44.00ns,0.00ns,44.00ns,7.00ns,41.00ns,1.98us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,778.16ms,157.00ns,0.00ns,160.00ns,15.00ns,144.00ns,5.60us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,577.31ms,50.00ns,0.00ns,50.00ns,7.00ns,46.00ns,2.25us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,679.17ms,76.00ns,0.00ns,77.00ns,8.00ns,71.00ns,2.12us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,679.31ms,94.00ns,0.00ns,95.00ns,9.00ns,87.00ns,2.35us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,930.20ms,262.00ns,0.00ns,248.00ns,32.00ns,198.00ns,11.60us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.63s,226.00ns,0.00ns,227.00ns,13.00ns,218.00ns,2.34us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,628.87ms,87.00ns,0.00ns,87.00ns,26.00ns,82.00ns,14.80us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,679.27ms,98.00ns,0.00ns,98.00ns,8.00ns,90.00ns,2.08us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,628.63ms,89.00ns,0.00ns,89.00ns,8.00ns,83.00ns,1.86us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,729.98ms,123.00ns,0.00ns,123.00ns,10.00ns,116.00ns,2.23us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,779.62ms,132.00ns,0.00ns,134.00ns,23.00ns,126.00ns,20.38us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.08s,265.00ns,0.00ns,266.00ns,18.00ns,261.00ns,9.39us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.68s,268.00ns,0.00ns,269.00ns,16.00ns,258.00ns,7.83us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,830.65ms,134.00ns,0.00ns,135.00ns,16.00ns,129.00ns,12.27us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,780.08ms,138.00ns,0.00ns,138.00ns,10.00ns,131.00ns,2.17us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,779.67ms,136.00ns,0.00ns,137.00ns,13.00ns,129.00ns,7.02us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,526.44ms,29.00ns,0.00ns,29.00ns,7.00ns,26.00ns,2.47us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,577.08ms,30.00ns,0.00ns,30.00ns,8.00ns,27.00ns,5.24us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,576.82ms,28.00ns,0.00ns,28.00ns,4.00ns,26.00ns,1.88us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,576.65ms,20.00ns,0.00ns,20.00ns,11.00ns,18.00ns,9.62us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,527.12ms,24.00ns,0.00ns,24.00ns,6.00ns,22.00ns,2.33us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.48s,170.00ns,0.00ns,171.00ns,12.00ns,164.00ns,5.87us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,527.02ms,32.00ns,0.00ns,32.00ns,6.00ns,30.00ns,2.21us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,526.68ms,28.00ns,0.00ns,28.00ns,7.00ns,26.00ns,2.30us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,526.93ms,28.00ns,0.00ns,28.00ns,17.00ns,26.00ns,9.80us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,527.17ms,24.00ns,0.00ns,25.00ns,6.00ns,21.00ns,2.18us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,526.48ms,31.00ns,0.00ns,32.00ns,7.00ns,29.00ns,2.08us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,628.14ms,51.00ns,0.00ns,51.00ns,6.00ns,48.00ns,2.17us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,528.75ms,35.00ns,0.00ns,35.00ns,6.00ns,31.00ns,2.25us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,578.24ms,33.00ns,0.00ns,32.00ns,6.00ns,27.00ns,2.06us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.53s,186.00ns,0.00ns,186.00ns,93.00ns,177.00ns,92.91us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,578.53ms,51.00ns,0.00ns,52.00ns,8.00ns,48.00ns,2.76us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,579.38ms,56.00ns,0.00ns,56.00ns,14.00ns,52.00ns,12.03us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,578.78ms,53.00ns,0.00ns,53.00ns,17.00ns,49.00ns,15.24us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,628.30ms,69.00ns,0.00ns,69.00ns,19.00ns,66.00ns,17.10us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,578.79ms,46.00ns,0.00ns,46.00ns,19.00ns,43.00ns,14.05us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,528.12ms,36.00ns,0.00ns,36.00ns,16.00ns,33.00ns,14.50us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.58s,206.00ns,0.00ns,207.00ns,11.00ns,200.00ns,2.34us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,678.97ms,90.00ns,0.00ns,90.00ns,13.00ns,86.00ns,8.44us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,629.08ms,69.00ns,0.00ns,69.00ns,7.00ns,64.00ns,2.02us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,678.91ms,80.00ns,0.00ns,80.00ns,8.00ns,73.00ns,2.58us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,7555,4.51s,396.92us,0.00ns,397.08us,1.26us,392.82us,417.82us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,7583,4.51s,392.16us,0.00ns,395.61us,6.98us,390.94us,424.94us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,8163,4.51s,374.13us,0.00ns,367.50us,9.00us,354.61us,385.77us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,3659,4.51s,816.22us,0.00ns,820.01us,10.00us,790.45us,874.69us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,3807,4.51s,786.73us,0.00ns,788.00us,9.75us,746.49us,842.12us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,9608,4.56s,311.68us,0.00ns,311.93us,1.11us,310.06us,328.06us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,7766,4.51s,385.99us,0.00ns,386.29us,0.97us,385.75us,397.41us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,8502,4.51s,352.71us,0.00ns,352.83us,1.18us,349.84us,367.67us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,8554,4.51s,350.40us,1.00ns,350.70us,1.45us,347.61us,372.66us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,3796,4.51s,790.06us,0.00ns,790.45us,4.36us,776.00us,819.68us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,7400,4.51s,404.88us,0.00ns,405.39us,1.27us,404.55us,414.55us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,1.43s,439.00ns,0.00ns,440.00ns,18.00ns,434.00ns,5.24us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,1.33s,434.00ns,0.00ns,435.00ns,18.00ns,431.00ns,6.30us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.28s,393.00ns,0.00ns,394.00ns,17.00ns,390.00ns,5.51us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,1.08s,292.00ns,0.00ns,293.00ns,18.00ns,283.00ns,6.82us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,882.03ms,211.00ns,0.00ns,212.00ns,18.00ns,204.00ns,11.03us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,2.13s,482.00ns,0.00ns,485.00ns,23.00ns,476.00ns,10.37us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,1.33s,428.00ns,0.00ns,429.00ns,18.00ns,424.00ns,3.90us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.23s,394.00ns,0.00ns,395.00ns,20.00ns,390.00ns,10.35us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.23s,394.00ns,0.00ns,394.00ns,18.00ns,390.00ns,7.53us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,931.30ms,211.00ns,0.00ns,212.00ns,14.00ns,204.00ns,6.69us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,1.38s,458.00ns,0.00ns,458.00ns,21.00ns,447.00ns,16.27us\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,33335253,274,4.56s,10.96ms,263.00ns,10.98ms,50.78us,10.88ms,11.20ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,33335253,284,4.56s,10.59ms,1.04us,10.58ms,116.47us,10.37ms,10.95ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,33335253,285,4.56s,10.57ms,0.00ns,10.54ms,117.99us,10.34ms,10.87ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,33335253,439,4.56s,6.83ms,0.00ns,6.84ms,23.80us,6.79ms,6.95ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,33335253,438,4.56s,6.85ms,17.00ns,6.85ms,26.36us,6.80ms,7.01ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/binary,2.5.0,,33335253,2869,4.56s,1.04ms,0.00ns,1.05ms,15.15us,1.03ms,1.55ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,33335253,293,4.56s,10.28ms,0.00ns,10.26ms,106.59us,9.87ms,10.47ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,33335253,146,4.56s,20.66ms,411.00ns,20.67ms,53.25us,20.61ms,21.07ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,33335253,223,4.56s,13.46ms,0.00ns,13.47ms,37.93us,13.41ms,13.62ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,33335253,312,4.56s,9.54ms,687.00ns,9.63ms,197.62us,9.42ms,10.33ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,33335253,558,4.56s,5.38ms,105.00ns,5.38ms,48.73us,5.24ms,5.59ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,33335253,549,4.56s,5.47ms,0.00ns,5.47ms,48.35us,5.31ms,5.70ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,22240,4.56s,134.64us,0.00ns,134.86us,1.12us,132.81us,154.91us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13827,4.51s,223.42us,0.00ns,216.94us,9.44us,205.48us,259.71us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13720,4.51s,224.03us,2.00ns,218.63us,9.01us,205.71us,246.30us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,78782,4.56s,38.38us,0.00ns,38.03us,937.00ns,36.09us,67.18us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,79466,4.56s,38.45us,0.00ns,37.71us,1.11us,36.15us,44.05us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3176,4.51s,944.67us,5.00ns,944.74us,6.44us,926.77us,0.98ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2955,4.51s,1.01ms,0.00ns,1.02ms,6.58us,1.01ms,1.09ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4458,4.51s,671.71us,0.00ns,673.00us,7.05us,659.98us,738.95us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,30838,4.56s,96.20us,0.00ns,96.58us,2.48us,91.46us,135.96us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,40139,4.56s,74.49us,0.00ns,74.70us,1.80us,71.20us,105.90us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,40089,4.56s,74.71us,0.00ns,74.78us,1.71us,70.51us,114.34us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2908,4.51s,1.04ms,2.00ns,1.03ms,27.43us,0.98ms,1.12ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2919,4.51s,1.03ms,0.00ns,1.03ms,29.50us,0.98ms,1.13ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,23795,4.56s,125.89us,0.00ns,126.04us,1.20us,124.21us,195.40us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13498,4.51s,228.25us,1.00ns,222.22us,9.93us,208.45us,283.96us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13562,4.51s,226.19us,0.00ns,221.19us,9.15us,207.07us,263.22us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,79479,4.56s,37.64us,0.00ns,37.70us,310.00ns,37.45us,45.41us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,37005,4.56s,80.81us,0.00ns,81.00us,1.79us,76.60us,113.59us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3356,4.51s,897.92us,1.00ns,893.95us,9.81us,866.06us,930.84us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2934,4.51s,1.02ms,1.00ns,1.02ms,9.39us,1.01ms,1.14ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4388,4.51s,674.43us,1.00ns,683.76us,16.77us,658.18us,764.98us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,48169,4.56s,61.47us,0.00ns,61.94us,1.07us,61.28us,93.18us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,48455,4.56s,61.52us,0.00ns,61.82us,2.06us,57.75us,93.97us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,77313,4.56s,38.69us,0.00ns,38.76us,346.00ns,38.36us,47.74us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3132,4.51s,0.96ms,2.00ns,0.96ms,21.04us,895.23us,1.03ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3146,4.51s,0.96ms,2.00ns,0.95ms,23.55us,894.03us,1.02ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,17011,4.51s,175.64us,0.00ns,176.32us,3.04us,174.32us,200.61us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13697,4.51s,224.50us,0.00ns,219.00us,9.18us,207.17us,261.84us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13789,4.51s,223.68us,0.00ns,217.53us,9.17us,205.75us,238.88us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,78945,4.56s,37.88us,0.00ns,37.96us,341.00ns,37.69us,59.07us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,78830,4.56s,37.94us,0.00ns,38.02us,471.00ns,37.74us,63.68us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3508,4.51s,854.85us,4.00ns,855.30us,3.08us,849.47us,919.10us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2956,4.51s,1.01ms,0.00ns,1.01ms,4.83us,1.01ms,1.07ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4457,4.51s,672.99us,0.00ns,673.06us,7.12us,664.92us,734.63us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,48759,4.56s,61.07us,0.00ns,61.19us,1.11us,59.78us,119.20us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,74471,4.56s,39.47us,0.00ns,40.24us,1.08us,38.92us,65.13us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,64887,4.56s,45.63us,0.00ns,46.20us,1.14us,45.11us,69.51us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3307,4.51s,902.62us,0.00ns,907.36us,14.36us,892.85us,0.99ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3301,4.51s,904.42us,0.00ns,908.89us,14.93us,891.25us,0.99ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,33089,4.56s,90.50us,0.00ns,90.63us,836.00ns,88.69us,116.00us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,14088,4.51s,218.57us,1.00ns,212.90us,9.01us,199.90us,244.13us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13891,4.51s,222.43us,0.00ns,215.93us,9.31us,203.79us,250.23us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,77346,4.56s,38.99us,1.00ns,38.75us,1.18us,37.36us,68.15us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,76341,4.56s,39.68us,0.00ns,39.25us,863.00ns,37.92us,75.48us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3499,4.51s,856.66us,0.00ns,857.49us,7.29us,845.65us,907.56us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2963,4.51s,1.01ms,0.00ns,1.01ms,3.07us,1.01ms,1.06ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,47230,4.56s,61.98us,0.00ns,63.16us,2.82us,61.50us,87.72us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,265355,4.67s,11.30us,0.00ns,11.27us,135.00ns,10.59us,22.35us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,269947,4.67s,11.10us,0.00ns,11.07us,141.00ns,10.52us,17.22us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3269,4.51s,902.51us,0.00ns,917.67us,42.65us,862.09us,1.02ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3251,4.51s,904.75us,0.00ns,922.83us,44.94us,861.24us,1.04ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,23969,4.56s,122.86us,0.00ns,125.13us,4.88us,121.90us,149.57us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13722,4.51s,224.27us,1.00ns,218.60us,9.27us,205.88us,253.93us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13842,4.51s,223.86us,0.00ns,216.71us,9.35us,205.99us,257.05us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,73457,4.56s,40.71us,0.00ns,40.80us,1.00us,39.35us,68.50us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,75965,4.56s,39.87us,0.00ns,39.45us,0.96us,37.63us,64.26us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3274,4.51s,915.84us,1.00ns,916.52us,3.66us,909.63us,0.97ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2960,4.51s,1.01ms,1.00ns,1.01ms,2.92us,1.01ms,1.08ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4548,4.51s,657.74us,0.00ns,659.66us,6.42us,655.52us,710.84us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,47408,4.56s,62.13us,0.00ns,62.94us,1.70us,61.76us,94.32us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3163,4.51s,947.64us,0.00ns,948.69us,5.65us,937.85us,0.99ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3156,4.51s,946.47us,6.00ns,0.95ms,10.75us,936.92us,1.00ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,4320,4.51s,693.88us,0.00ns,694.51us,3.50us,688.31us,728.58us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,11012,4.51s,277.50us,1.00ns,272.42us,8.86us,260.11us,308.78us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,11170,4.51s,275.30us,0.00ns,268.55us,10.10us,253.83us,298.26us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,26981,4.57s,111.05us,0.00ns,111.15us,1.32us,108.99us,138.56us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,46315,4.56s,64.09us,0.00ns,64.74us,1.68us,63.12us,82.23us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3654,4.51s,819.08us,12.00ns,821.14us,5.45us,813.03us,860.12us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2773,4.51s,1.08ms,0.00ns,1.08ms,4.10us,1.08ms,1.14ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4392,4.51s,680.84us,0.00ns,683.11us,8.50us,675.27us,737.75us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,26682,4.56s,112.50us,0.00ns,112.09us,5.31us,98.66us,140.58us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3183,4.51s,943.63us,0.00ns,942.71us,9.95us,906.89us,1.02ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3267,4.51s,917.04us,0.00ns,918.50us,7.11us,897.70us,0.96ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,11429,4.51s,261.20us,0.00ns,262.45us,6.82us,250.23us,286.29us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,3929,4.51s,763.57us,0.00ns,763.53us,12.62us,727.22us,805.29us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,4438,4.51s,674.25us,2.00ns,675.95us,12.66us,650.59us,717.84us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,5471,4.51s,547.45us,0.00ns,548.36us,3.77us,542.01us,573.13us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,9396,4.51s,316.07us,1.00ns,319.28us,6.07us,311.28us,352.23us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,2493,4.51s,1.19ms,0.00ns,1.20ms,32.16us,1.17ms,1.32ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2416,4.51s,1.24ms,0.00ns,1.24ms,14.58us,1.22ms,1.31ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,3446,4.51s,868.76us,1.00ns,870.79us,10.90us,846.54us,921.69us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,7371,4.57s,402.75us,0.00ns,406.65us,9.76us,394.39us,445.28us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2493,4.51s,1.20ms,0.00ns,1.20ms,17.14us,1.18ms,1.33ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2798,4.51s,1.07ms,1.00ns,1.07ms,5.36us,1.06ms,1.11ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,6382,4.51s,469.50us,0.00ns,470.11us,1.86us,465.78us,493.89us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,8785,4.51s,343.57us,0.00ns,341.46us,8.54us,328.25us,379.71us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,9036,4.51s,334.54us,1.00ns,331.96us,8.66us,316.59us,361.55us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,15790,4.52s,189.90us,0.00ns,189.97us,3.73us,180.63us,222.64us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,32378,4.57s,92.42us,0.00ns,92.62us,1.41us,90.70us,110.52us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3023,4.51s,0.99ms,0.00ns,0.99ms,6.24us,0.98ms,1.03ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2702,4.51s,1.11ms,1.00ns,1.11ms,9.97us,1.10ms,1.17ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4329,4.51s,691.36us,0.00ns,693.12us,7.12us,687.11us,752.71us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,20676,4.57s,144.30us,0.00ns,144.75us,1.90us,140.89us,162.80us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2432,4.51s,1.23ms,15.00ns,1.23ms,10.14us,1.13ms,1.28ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2474,4.51s,1.21ms,14.00ns,1.21ms,14.50us,1.07ms,1.27ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,151305,797292,4.84s,3.71us,0.00ns,3.73us,148.00ns,3.48us,10.30us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,151305,127684,4.57s,22.94us,0.00ns,23.46us,807.00ns,22.54us,37.61us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,151305,127394,4.57s,23.91us,0.00ns,23.52us,788.00ns,22.55us,34.47us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,843636,4.94s,3.52us,0.00ns,3.52us,48.00ns,3.41us,7.54us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,874223,4.99s,3.40us,0.00ns,3.40us,44.00ns,3.29us,10.09us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,151305,301694,4.62s,9.90us,0.00ns,9.91us,125.00ns,9.75us,31.65us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,151305,32214,4.56s,93.05us,0.00ns,93.09us,428.00ns,92.40us,110.78us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,151305,318820,4.77s,8.91us,0.00ns,9.07us,516.00ns,7.81us,17.98us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,151305,532268,4.74s,5.46us,0.00ns,5.61us,347.00ns,4.75us,22.06us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,579473,4.83s,5.07us,0.00ns,5.15us,257.00ns,4.89us,10.43us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,151305,205490,4.62s,14.09us,0.00ns,14.56us,2.00us,10.77us,26.94us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,151305,210082,4.62s,13.92us,0.00ns,14.24us,1.77us,10.69us,24.38us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,151305,737869,4.88s,4.00us,0.00ns,4.03us,117.00ns,3.88us,26.35us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,151305,126034,4.57s,24.00us,0.00ns,23.77us,784.00ns,22.63us,37.79us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,151305,126851,4.57s,23.88us,0.00ns,23.62us,796.00ns,22.45us,28.24us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,697824,4.83s,4.26us,0.00ns,4.27us,70.00ns,3.57us,8.73us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,698939,4.88s,4.31us,0.00ns,4.26us,110.00ns,3.44us,12.70us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,151305,308091,4.67s,9.17us,0.00ns,9.71us,1.32us,8.47us,17.46us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,151305,32192,4.56s,93.06us,0.00ns,93.16us,552.00ns,92.39us,112.45us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,151305,299564,4.77s,9.50us,0.00ns,9.67us,533.00ns,8.37us,15.59us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,151305,603309,4.78s,4.85us,0.00ns,4.94us,307.00ns,4.71us,27.70us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,498814,4.73s,5.98us,0.00ns,5.98us,238.00ns,5.10us,28.30us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,151305,190870,4.62s,14.92us,0.00ns,15.69us,3.17us,8.88us,27.41us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,151305,190253,4.62s,14.92us,0.00ns,15.73us,3.21us,9.25us,34.22us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,500100,113988,4.57s,26.20us,0.00ns,26.29us,725.00ns,26.00us,51.87us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,500100,52510,4.56s,55.22us,0.00ns,57.09us,3.02us,54.09us,76.91us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,500100,51962,4.56s,60.12us,0.00ns,57.70us,2.98us,54.09us,80.14us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,236488,4.62s,12.63us,0.00ns,12.65us,128.00ns,11.54us,30.06us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,222322,4.62s,13.56us,0.00ns,13.46us,236.00ns,11.57us,37.50us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,500100,13231,4.51s,216.32us,0.00ns,226.72us,33.39us,216.29us,386.27us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,500100,9765,4.51s,306.83us,0.00ns,307.20us,1.52us,305.31us,348.28us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,500100,14974,4.51s,200.51us,0.00ns,200.32us,3.15us,197.87us,248.76us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,500100,157523,4.67s,18.33us,0.00ns,18.70us,1.47us,18.27us,36.35us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,500100,272844,4.67s,10.96us,0.00ns,10.96us,456.00ns,10.48us,243.71us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,500100,277655,4.67s,10.75us,0.00ns,10.77us,118.00ns,10.61us,15.24us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,500100,13876,4.51s,217.14us,0.00ns,216.18us,15.29us,208.34us,340.50us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,500100,13628,4.51s,216.33us,0.00ns,220.12us,16.03us,208.32us,343.12us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,500100,4516,4.51s,664.47us,1.00ns,664.29us,7.24us,653.04us,696.35us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,500100,3719,4.51s,806.70us,0.00ns,806.82us,4.93us,800.69us,880.62us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,500100,8404,4.51s,350.84us,0.00ns,356.94us,14.87us,348.69us,407.58us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,1859,4.51s,1.61ms,0.00ns,1.61ms,18.72us,1.56ms,1.76ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,10321,4.51s,274.57us,0.00ns,290.66us,27.66us,269.82us,361.42us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,500100,14975,4.51s,199.01us,0.00ns,200.31us,7.08us,198.26us,302.50us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,500100,14597,4.51s,201.92us,0.00ns,205.50us,4.88us,192.28us,248.54us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,500100,14327,4.51s,207.45us,0.00ns,209.37us,2.71us,206.86us,232.38us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,500100,6677,4.56s,447.45us,0.00ns,448.98us,7.42us,437.33us,538.34us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,500100,2704,4.51s,1.09ms,42.00ns,1.11ms,37.69us,1.06ms,1.26ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,500100,11071,4.51s,269.58us,0.00ns,270.95us,5.58us,259.57us,301.95us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1001,1000000,627.32ms,81.00ns,0.00ns,82.00ns,11.00ns,78.00ns,7.01us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,728.13ms,142.00ns,0.00ns,138.00ns,20.00ns,128.00ns,12.81us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,777.75ms,140.00ns,0.00ns,136.00ns,12.00ns,125.00ns,2.54us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,1000000,577.34ms,61.00ns,0.00ns,62.00ns,24.00ns,55.00ns,22.06us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,526.85ms,41.00ns,0.00ns,43.00ns,26.00ns,37.00ns,17.75us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.40s,448.00ns,0.00ns,448.00ns,26.00ns,443.00ns,20.35us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.73s,620.00ns,0.00ns,621.00ns,23.00ns,606.00ns,2.46us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.28s,411.00ns,0.00ns,411.00ns,22.00ns,401.00ns,8.70us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1001,1000000,1.59s,210.00ns,0.00ns,211.00ns,13.00ns,198.00ns,4.62us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1001,1000000,526.69ms,31.00ns,0.00ns,31.00ns,6.00ns,27.00ns,2.40us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1001,1000000,526.70ms,29.00ns,0.00ns,29.00ns,76.00ns,25.00ns,75.48us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1001,1000000,1.48s,458.00ns,0.00ns,458.00ns,17.00ns,438.00ns,2.56us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1001,1000000,1.48s,458.00ns,0.00ns,458.00ns,24.00ns,453.00ns,19.03us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1001,1000000,3.19s,1.35us,0.00ns,1.35us,36.00ns,1.33us,9.41us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,3.54s,1.54us,0.00ns,1.55us,30.00ns,1.53us,10.60us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,1.93s,730.00ns,0.00ns,738.00ns,34.00ns,717.00ns,11.41us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,950535,5.04s,3.11us,0.00ns,3.13us,75.00ns,3.00us,14.99us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,1.63s,565.00ns,0.00ns,585.00ns,39.00ns,557.00ns,5.41us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.33s,417.00ns,0.00ns,418.00ns,21.00ns,412.00ns,6.09us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.33s,415.00ns,0.00ns,420.00ns,22.00ns,391.00ns,8.12us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.33s,425.00ns,0.00ns,426.00ns,21.00ns,418.00ns,8.37us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1001,1000000,3.34s,1.08us,0.00ns,1.08us,38.00ns,1.04us,5.55us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1001,1000000,4.29s,2.23us,0.00ns,2.27us,95.00ns,2.14us,7.00us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1001,1000000,1.63s,571.00ns,0.00ns,576.00ns,22.00ns,547.00ns,5.59us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,550004,32904,4.56s,87.09us,0.00ns,91.13us,7.81us,84.56us,125.72us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,550004,28660,4.56s,103.78us,0.00ns,104.65us,4.50us,99.67us,128.82us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,550004,28785,4.56s,104.12us,0.00ns,104.18us,2.42us,99.87us,112.93us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,550004,18680,4.51s,157.07us,0.00ns,160.57us,5.65us,154.15us,190.21us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,550004,17609,4.51s,169.71us,0.00ns,170.33us,10.71us,154.10us,202.31us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,550004,36393,4.56s,81.23us,0.00ns,82.40us,3.75us,74.99us,93.18us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,550004,8803,4.51s,341.24us,0.00ns,340.79us,2.54us,336.23us,387.96us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,550004,13522,4.51s,219.69us,0.00ns,221.83us,3.97us,217.73us,239.19us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,550004,12704,4.56s,232.06us,0.00ns,235.81us,12.25us,220.47us,311.04us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,550004,38949,4.56s,76.62us,0.00ns,76.99us,882.00ns,75.88us,86.50us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,550004,38742,4.56s,76.50us,0.00ns,77.40us,1.69us,73.33us,96.81us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,550004,49597,4.56s,60.35us,0.00ns,60.45us,421.00ns,60.02us,79.96us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,550004,49513,4.56s,60.46us,0.00ns,60.54us,376.00ns,60.04us,68.28us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,720057,69551,4.56s,43.03us,0.00ns,43.10us,308.00ns,42.99us,63.11us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,720057,35946,4.56s,86.55us,0.00ns,83.42us,4.24us,77.88us,115.39us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,720057,36295,4.56s,86.56us,0.00ns,82.61us,4.32us,77.89us,110.58us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,77335,4.56s,38.71us,0.00ns,38.76us,272.00ns,38.42us,60.62us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,78132,4.56s,38.31us,0.00ns,38.36us,257.00ns,38.17us,43.23us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,720057,100858,4.57s,29.45us,0.00ns,29.71us,790.00ns,29.34us,39.35us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,720057,6754,4.51s,443.75us,0.00ns,444.21us,1.31us,441.21us,464.40us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,720057,49422,4.56s,62.95us,0.00ns,60.37us,3.17us,56.74us,89.69us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,720057,11691,4.51s,256.13us,0.00ns,256.59us,1.28us,255.17us,267.81us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,11718,4.51s,255.58us,0.00ns,256.00us,1.06us,255.20us,270.72us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,720057,138555,4.57s,21.58us,0.00ns,21.61us,190.00ns,21.48us,32.60us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,720057,139277,4.57s,21.48us,0.00ns,21.51us,178.00ns,21.41us,33.10us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,720057,2887,4.51s,1.04ms,0.00ns,1.04ms,2.36us,1.04ms,1.06ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,720057,612,4.51s,4.90ms,11.00ns,4.90ms,4.05us,4.90ms,4.94ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,720057,611,4.51s,4.91ms,0.00ns,4.91ms,3.58us,4.91ms,4.93ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,4703,4.51s,633.30us,0.00ns,637.90us,17.77us,601.21us,816.63us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,4714,4.51s,632.96us,1.00ns,636.40us,16.42us,600.73us,831.72us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,720057,6368,4.51s,468.81us,0.00ns,471.08us,5.55us,462.81us,509.52us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,720057,6769,4.51s,442.83us,0.00ns,443.21us,1.79us,441.22us,483.87us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,720057,2845,4.51s,1.04ms,0.00ns,1.05ms,25.28us,1.04ms,1.25ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,720057,2197,4.51s,1.37ms,0.00ns,1.37ms,9.20us,1.33ms,1.41ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,2211,4.51s,1.36ms,0.00ns,1.36ms,9.90us,1.33ms,1.39ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,720057,6423,4.51s,467.87us,0.00ns,467.11us,2.62us,439.66us,481.50us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,720057,6489,4.51s,464.66us,0.00ns,462.29us,8.34us,439.34us,477.21us\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,,191,4.56s,15.57ms,0.00ns,15.73ms,394.76us,15.38ms,17.67ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,,215,4.56s,13.95ms,0.00ns,13.98ms,64.62us,13.91ms,14.35ms\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1000,30221,4.56s,98.50us,0.00ns,99.24us,1.92us,96.95us,114.31us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1000,37389,4.56s,80.14us,0.00ns,80.20us,811.00ns,76.55us,96.56us\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,806771,156,4.56s,19.35ms,190.00ns,19.34ms,32.82us,19.28ms,19.40ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,806771,144,4.56s,21.30ms,193.00ns,20.96ms,483.23us,20.26ms,21.38ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,18830,4.51s,158.80us,4.00ns,159.29us,8.67us,145.35us,192.71us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,23530,4.56s,127.47us,0.00ns,127.47us,2.99us,121.57us,138.57us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,24125,4.51s,124.41us,0.00ns,124.31us,3.15us,119.32us,135.44us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,72582,4.56s,41.18us,0.00ns,41.30us,649.00ns,39.66us,51.26us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,151649,4.62s,19.50us,0.00ns,19.75us,557.00ns,16.87us,37.93us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,13286,4.51s,226.29us,0.00ns,225.77us,5.91us,203.59us,248.33us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7708,4.51s,390.01us,0.00ns,389.21us,1.78us,384.60us,406.99us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,11866,4.51s,252.83us,0.00ns,252.80us,3.52us,249.80us,301.56us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,61127,4.56s,48.41us,0.00ns,48.75us,1.30us,46.09us,61.13us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,9390,4.51s,318.82us,0.00ns,319.45us,8.82us,286.78us,352.00us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,9653,4.51s,310.72us,0.00ns,310.78us,8.62us,283.08us,346.28us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,11321,4.51s,264.38us,0.00ns,264.97us,2.25us,261.14us,287.18us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,16870,4.51s,177.35us,0.00ns,177.80us,3.19us,171.58us,189.80us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,17948,4.51s,167.00us,1.00ns,167.12us,3.93us,158.44us,180.52us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,17982,4.51s,166.38us,0.00ns,166.80us,3.43us,160.23us,201.96us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,47969,4.56s,61.69us,0.00ns,62.50us,5.88us,54.19us,99.45us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,11452,4.51s,260.92us,1.00ns,261.95us,9.32us,236.97us,306.01us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7270,4.51s,411.80us,0.00ns,412.63us,2.49us,408.66us,449.11us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,10663,4.51s,284.51us,0.00ns,281.32us,4.73us,273.50us,332.21us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,31276,4.56s,95.11us,0.00ns,95.59us,1.83us,91.90us,111.42us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,7689,4.51s,390.66us,0.00ns,390.14us,6.17us,367.77us,413.26us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,7880,4.51s,381.29us,1.00ns,380.68us,7.78us,352.81us,416.04us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,7413,4.51s,413.62us,0.00ns,404.71us,19.77us,376.66us,434.44us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,1943,4.51s,1.54ms,0.00ns,1.54ms,7.99us,1.52ms,1.61ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2926,4.51s,1.02ms,1.00ns,1.03ms,30.46us,0.98ms,1.12ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,2450,4.51s,1.23ms,1.00ns,1.22ms,6.40us,1.21ms,1.25ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,6217,4.51s,452.88us,0.00ns,482.60us,54.88us,430.51us,587.19us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,3246,4.51s,916.06us,2.00ns,924.33us,24.02us,879.16us,0.99ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,2958,4.51s,1.01ms,6.00ns,1.01ms,15.05us,0.98ms,1.10ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,3322,4.51s,901.88us,0.00ns,903.20us,19.21us,790.23us,0.99ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,5792,4.56s,513.62us,3.00ns,517.70us,35.04us,482.41us,684.35us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,1984,4.51s,1.50ms,10.00ns,1.51ms,41.78us,1.45ms,1.78ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,2846,4.51s,1.05ms,3.00ns,1.05ms,15.36us,0.99ms,1.13ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,14193,4.51s,211.62us,0.00ns,211.34us,2.99us,205.22us,232.04us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,18867,4.51s,157.77us,0.00ns,158.98us,4.04us,153.66us,174.12us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,19168,4.51s,155.59us,0.00ns,156.48us,3.94us,150.83us,173.07us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,55203,4.56s,54.45us,0.00ns,54.31us,749.00ns,51.96us,63.89us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,143026,4.57s,20.75us,0.00ns,20.94us,547.00ns,19.13us,40.28us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,6809,4.51s,439.54us,0.00ns,440.57us,4.55us,434.29us,470.72us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7748,4.51s,386.27us,0.00ns,387.18us,2.40us,382.53us,428.94us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,11826,4.51s,252.99us,0.00ns,253.66us,2.32us,250.74us,290.22us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,75490,4.61s,38.83us,0.00ns,39.39us,1.47us,37.77us,56.00us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,5709,4.51s,525.71us,0.00ns,525.52us,3.14us,515.41us,539.92us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,6007,4.51s,499.12us,0.00ns,499.43us,2.25us,494.34us,522.12us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,10235,4.51s,296.84us,0.00ns,293.10us,6.50us,278.91us,312.55us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,9091,4.51s,329.65us,0.00ns,329.99us,5.15us,318.47us,348.24us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,9473,4.51s,315.94us,0.00ns,316.66us,4.86us,305.56us,337.25us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,25665,4.51s,117.75us,0.00ns,116.86us,2.90us,109.48us,142.02us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,66391,4.56s,44.82us,0.00ns,45.15us,1.89us,42.66us,60.12us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,6303,4.51s,475.52us,0.00ns,475.97us,1.66us,473.50us,516.18us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7403,4.51s,405.06us,0.00ns,405.23us,1.40us,402.25us,453.36us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,11255,4.51s,265.36us,0.00ns,266.53us,2.38us,264.27us,315.20us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,42494,4.56s,70.30us,0.00ns,70.26us,1.68us,66.93us,85.41us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,4958,4.51s,603.55us,0.00ns,605.14us,9.57us,585.89us,643.01us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,5262,4.51s,568.84us,2.00ns,570.17us,9.64us,555.15us,610.36us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,14813,4.51s,197.19us,0.00ns,202.50us,13.43us,193.15us,241.22us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,3503,4.51s,856.11us,0.00ns,856.43us,9.18us,830.93us,928.74us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,4823,4.51s,616.96us,0.00ns,621.99us,15.45us,596.78us,677.51us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,4916,4.51s,610.85us,1.00ns,610.28us,5.15us,595.32us,631.08us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,11462,4.51s,257.61us,0.00ns,261.70us,22.44us,220.24us,309.31us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,4704,4.51s,634.68us,6.00ns,637.82us,19.98us,602.12us,716.23us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,4205,4.51s,712.95us,0.00ns,713.49us,7.45us,694.02us,770.59us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,4843,4.51s,619.31us,0.00ns,619.46us,8.38us,543.84us,690.66us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,7993,4.56s,368.59us,0.00ns,375.00us,15.34us,361.69us,431.46us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,3468,4.51s,854.95us,1.00ns,865.02us,27.92us,816.91us,1.03ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,4711,4.51s,635.58us,0.00ns,636.84us,7.75us,611.89us,700.26us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,21764,4.51s,137.63us,0.00ns,137.81us,925.00ns,135.50us,149.17us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,30263,4.56s,99.22us,0.00ns,99.10us,3.54us,93.02us,113.82us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,31430,4.56s,97.25us,0.00ns,95.42us,3.32us,90.92us,106.00us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,68134,4.56s,43.87us,0.00ns,44.00us,616.00ns,42.62us,49.69us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,135658,4.62s,21.60us,0.00ns,22.07us,1.21us,20.04us,30.91us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,23036,4.56s,129.62us,0.00ns,130.20us,2.02us,126.86us,152.31us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7492,4.51s,400.12us,0.00ns,400.44us,1.49us,397.52us,446.09us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,11903,4.51s,251.47us,0.00ns,252.02us,1.80us,251.06us,300.10us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,73630,4.61s,41.43us,0.00ns,40.41us,2.39us,34.76us,51.39us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,20612,4.51s,145.46us,0.00ns,145.51us,1.63us,140.61us,154.23us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,20754,4.51s,141.67us,0.00ns,144.52us,5.90us,134.29us,177.42us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,13695,4.51s,217.00us,0.00ns,219.03us,5.59us,212.99us,251.07us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,18049,4.51s,166.10us,0.00ns,166.18us,3.50us,160.33us,185.03us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,18865,4.51s,158.82us,0.00ns,159.00us,3.54us,152.64us,172.70us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,31261,4.56s,95.72us,0.00ns,95.93us,930.00ns,93.89us,104.19us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,72268,4.57s,41.15us,0.00ns,41.48us,1.30us,39.43us,53.72us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,13904,4.51s,216.83us,0.00ns,215.74us,5.11us,200.66us,262.13us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7408,4.51s,405.68us,0.00ns,404.95us,2.37us,400.39us,432.19us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,11322,4.51s,266.58us,0.00ns,264.94us,2.65us,261.24us,288.85us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,45938,4.57s,64.47us,1.00ns,64.98us,1.94us,61.58us,91.22us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,10716,4.51s,280.12us,1.00ns,279.93us,3.00us,269.99us,292.03us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,11447,4.51s,262.21us,0.00ns,262.04us,3.50us,250.72us,278.25us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,30615,4.56s,97.57us,0.00ns,97.94us,2.04us,93.88us,121.35us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,7774,4.51s,385.67us,3.00ns,385.87us,4.22us,374.09us,409.23us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,9691,4.51s,308.74us,0.00ns,309.55us,6.11us,297.93us,330.59us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,10963,4.51s,273.45us,0.00ns,273.61us,5.13us,266.80us,307.47us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,23561,4.56s,123.58us,0.00ns,127.29us,6.04us,121.31us,156.44us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,6196,4.51s,477.63us,2.00ns,484.18us,13.72us,467.55us,537.62us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,6032,4.51s,497.00us,1.00ns,497.39us,2.91us,488.07us,540.24us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,8123,4.51s,368.66us,0.00ns,369.31us,3.25us,348.86us,419.98us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,18723,4.56s,157.76us,0.00ns,159.89us,5.83us,153.00us,182.34us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,5618,4.51s,532.44us,1.00ns,533.97us,9.18us,513.66us,587.19us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,6583,4.51s,457.38us,0.00ns,455.71us,8.20us,439.66us,504.70us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,73083,4.56s,38.76us,0.00ns,41.01us,5.24us,34.59us,56.09us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,42224,4.56s,74.19us,0.00ns,71.02us,3.67us,66.84us,80.66us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41760,4.56s,74.20us,0.00ns,71.80us,3.48us,66.83us,84.18us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,203862,4.62s,14.67us,0.00ns,14.68us,138.00ns,13.44us,22.49us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,203316,4.62s,14.71us,0.00ns,14.72us,148.00ns,13.48us,26.02us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,10229,4.51s,292.90us,0.00ns,293.25us,7.78us,270.18us,325.98us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7925,4.51s,378.65us,0.00ns,378.54us,1.46us,376.19us,420.17us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12139,4.51s,245.92us,0.00ns,247.11us,2.85us,242.63us,275.55us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,130225,4.62s,22.41us,0.00ns,22.71us,1.38us,22.33us,45.39us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,205202,4.62s,14.62us,0.00ns,14.59us,187.00ns,13.32us,22.55us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,204652,4.62s,14.68us,0.00ns,14.63us,195.00ns,13.37us,22.55us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,9337,4.51s,320.46us,0.00ns,321.28us,9.86us,297.31us,353.64us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,9182,4.51s,326.31us,1.00ns,326.71us,11.43us,297.22us,359.49us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,59095,4.56s,57.60us,0.00ns,50.73us,7.91us,40.60us,80.34us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,33509,4.56s,91.29us,0.00ns,89.48us,3.29us,85.34us,102.94us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,33189,4.56s,91.38us,0.00ns,90.36us,3.42us,85.31us,101.87us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,202399,4.62s,14.75us,0.00ns,14.79us,195.00ns,13.92us,24.26us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,200016,4.62s,14.95us,0.00ns,14.96us,126.00ns,13.86us,23.44us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,20188,4.51s,147.89us,0.00ns,148.57us,4.37us,135.06us,173.63us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7908,4.51s,379.44us,0.00ns,379.36us,1.40us,376.12us,406.97us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12129,4.51s,246.53us,0.00ns,247.31us,2.14us,242.67us,291.63us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,93651,4.62s,31.12us,0.00ns,31.69us,1.24us,30.00us,38.48us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,203346,4.62s,14.51us,0.00ns,14.71us,416.00ns,13.43us,22.92us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,201819,4.62s,14.79us,0.00ns,14.83us,235.00ns,13.52us,23.83us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,14263,4.51s,209.75us,0.00ns,210.31us,8.38us,185.65us,239.31us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,13777,4.51s,217.39us,0.00ns,217.73us,8.33us,188.50us,248.67us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,48046,4.56s,65.29us,0.00ns,62.40us,5.56us,51.38us,72.74us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,42228,4.56s,74.20us,0.00ns,71.00us,3.65us,66.84us,81.63us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,42039,4.56s,74.31us,0.00ns,71.33us,3.64us,66.93us,81.36us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,199757,4.62s,14.88us,0.00ns,14.98us,243.00ns,13.44us,19.98us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,207939,4.62s,14.36us,0.00ns,14.39us,160.00ns,13.36us,38.62us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,20771,4.51s,144.15us,0.00ns,144.40us,3.23us,131.81us,171.54us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7922,4.51s,378.28us,0.00ns,378.69us,1.55us,376.48us,422.29us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12014,4.51s,250.96us,0.00ns,249.68us,2.75us,242.70us,288.51us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,122471,4.62s,24.19us,0.00ns,24.16us,2.22us,22.39us,53.05us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,206756,4.62s,14.30us,0.00ns,14.48us,262.00ns,13.32us,19.62us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,207689,4.62s,14.31us,0.00ns,14.41us,231.00ns,13.29us,19.59us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,15961,4.51s,187.94us,0.00ns,187.92us,8.12us,146.11us,226.64us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,16018,4.51s,187.68us,1.00ns,187.25us,7.38us,143.31us,225.50us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,12005,4.51s,249.68us,0.00ns,249.88us,903.00ns,249.25us,295.61us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,21110,4.51s,140.91us,1.00ns,142.07us,3.63us,137.61us,158.66us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,20976,4.51s,142.02us,0.00ns,142.99us,4.15us,138.02us,158.07us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,211983,4.62s,14.11us,0.00ns,14.12us,100.00ns,13.48us,18.42us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,207695,4.62s,14.39us,0.00ns,14.40us,118.00ns,13.41us,19.98us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,6644,4.51s,449.19us,1.00ns,451.56us,8.92us,430.23us,501.97us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7840,4.51s,382.26us,0.00ns,382.62us,1.83us,379.92us,416.96us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12238,4.51s,245.77us,0.00ns,245.11us,2.61us,242.62us,292.90us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,146831,4.67s,19.97us,0.00ns,20.09us,1.06us,18.67us,31.43us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,206027,4.62s,14.59us,0.00ns,14.52us,254.00ns,13.32us,34.60us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,213958,4.62s,14.05us,0.00ns,13.99us,268.00ns,13.21us,18.53us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,6925,4.51s,433.24us,0.00ns,433.22us,8.98us,393.61us,462.81us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,6923,4.51s,433.43us,0.00ns,433.36us,8.44us,399.14us,482.99us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,476.44ms,23.00ns,0.00ns,23.00ns,20.00ns,21.00ns,18.95us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.04ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.55us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,477.00ms,23.00ns,0.00ns,23.00ns,9.00ns,21.00ns,7.81us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,576.69ms,26.00ns,0.00ns,26.00ns,7.00ns,23.00ns,2.50us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.18ms,23.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.25us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,526.84ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,1.93us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.97ms,25.00ns,0.00ns,25.00ns,6.00ns,22.00ns,2.52us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,526.94ms,22.00ns,0.00ns,22.00ns,6.00ns,20.00ns,2.43us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,171.00ns,0.00ns,172.00ns,12.00ns,167.00ns,2.39us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.03ms,17.00ns,0.00ns,17.00ns,5.00ns,15.00ns,2.82us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,527.06ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.86us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,527.09ms,27.00ns,0.00ns,27.00ns,6.00ns,25.00ns,2.66us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,576.90ms,28.00ns,0.00ns,28.00ns,8.00ns,25.00ns,3.19us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,526.88ms,22.00ns,0.00ns,22.00ns,14.00ns,20.00ns,12.71us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,526.84ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,1.93us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,476.48ms,23.00ns,0.00ns,23.00ns,21.00ns,20.00ns,16.18us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,476.87ms,26.00ns,0.00ns,26.00ns,6.00ns,24.00ns,2.36us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.19ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.49us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,476.56ms,13.00ns,0.00ns,13.00ns,20.00ns,11.00ns,19.59us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.53ms,25.00ns,0.00ns,25.00ns,11.00ns,23.00ns,8.79us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.01ms,23.00ns,0.00ns,23.00ns,28.00ns,21.00ns,18.80us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,178.00ns,0.00ns,179.00ns,9.00ns,173.00ns,2.32us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,526.63ms,16.00ns,0.00ns,16.00ns,5.00ns,15.00ns,4.72us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,476.66ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,2.16us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,526.77ms,27.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.21us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,526.89ms,27.00ns,0.00ns,27.00ns,7.00ns,24.00ns,2.92us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,526.91ms,22.00ns,0.00ns,22.00ns,9.00ns,19.00ns,6.72us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.11ms,29.00ns,0.00ns,29.00ns,5.00ns,27.00ns,2.14us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.31ms,23.00ns,0.00ns,23.00ns,12.00ns,20.00ns,10.89us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,577.16ms,27.00ns,0.00ns,27.00ns,12.00ns,24.00ns,10.81us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,526.97ms,24.00ns,0.00ns,24.00ns,8.00ns,22.00ns,4.27us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,476.83ms,13.00ns,0.00ns,13.00ns,3.00ns,11.00ns,1.83us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.70ms,26.00ns,0.00ns,26.00ns,5.00ns,23.00ns,2.00us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,526.79ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,1.78us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,171.00ns,0.00ns,172.00ns,10.00ns,167.00ns,2.69us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,526.75ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.29us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,476.96ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,1.77us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,526.93ms,24.00ns,0.00ns,24.00ns,6.00ns,21.00ns,2.70us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,476.36ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.57us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.01ms,23.00ns,0.00ns,23.00ns,6.00ns,19.00ns,2.90us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,526.93ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,2.28us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,526.99ms,23.00ns,0.00ns,23.00ns,4.00ns,20.00ns,1.88us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.01ms,28.00ns,0.00ns,28.00ns,7.00ns,25.00ns,2.37us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.14ms,25.00ns,0.00ns,25.00ns,14.00ns,22.00ns,12.91us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,526.85ms,19.00ns,0.00ns,19.00ns,101.00ns,16.00ns,101.14us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.75ms,27.00ns,0.00ns,27.00ns,7.00ns,24.00ns,2.77us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,526.94ms,22.00ns,0.00ns,22.00ns,6.00ns,20.00ns,2.25us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,179.00ns,0.00ns,180.00ns,12.00ns,174.00ns,2.30us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,476.53ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,1.98us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,576.81ms,12.00ns,0.00ns,12.00ns,16.00ns,10.00ns,15.91us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,526.96ms,25.00ns,0.00ns,25.00ns,6.00ns,23.00ns,2.43us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,526.40ms,25.00ns,0.00ns,25.00ns,10.00ns,22.00ns,8.31us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,26983,4.56s,109.87us,0.00ns,111.15us,3.23us,108.12us,144.63us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,12946,4.51s,230.44us,1.00ns,231.69us,4.26us,220.75us,251.07us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13674,4.51s,218.26us,0.00ns,219.37us,5.99us,207.20us,238.34us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,194290,4.62s,15.43us,0.00ns,15.40us,284.00ns,13.84us,103.45us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,194712,4.62s,15.57us,0.00ns,15.38us,357.00ns,13.75us,25.07us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,14885,4.51s,201.36us,0.00ns,201.52us,851.00ns,200.23us,242.31us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7946,4.51s,377.16us,0.00ns,377.55us,4.17us,374.58us,427.27us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,128074,4.62s,22.40us,0.00ns,23.09us,1.87us,22.35us,45.11us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,68061,4.56s,43.34us,0.00ns,44.04us,2.41us,41.76us,62.34us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,65535,4.56s,45.50us,0.00ns,45.74us,1.37us,43.98us,63.48us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,13711,4.51s,218.38us,0.00ns,218.78us,1.39us,216.10us,227.07us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,12571,4.51s,244.00us,0.00ns,238.62us,8.36us,216.57us,284.78us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,527.08ms,26.00ns,0.00ns,27.00ns,15.00ns,24.00ns,14.90us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,527.11ms,27.00ns,0.00ns,27.00ns,6.00ns,23.00ns,1.82us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,526.64ms,25.00ns,0.00ns,25.00ns,6.00ns,22.00ns,2.37us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,527.27ms,34.00ns,0.00ns,34.00ns,19.00ns,32.00ns,18.55us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,537.11ms,24.00ns,0.00ns,24.00ns,5.00ns,22.00ns,2.27us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,527.21ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,1.82us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,527.27ms,31.00ns,0.00ns,31.00ns,6.00ns,29.00ns,2.27us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.53s,174.00ns,0.00ns,175.00ns,12.00ns,169.00ns,3.03us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,526.59ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,1.96us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,476.37ms,13.00ns,0.00ns,13.00ns,16.00ns,11.00ns,14.16us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,527.02ms,39.00ns,0.00ns,39.00ns,6.00ns,36.00ns,2.04us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,527.12ms,39.00ns,0.00ns,39.00ns,7.00ns,36.00ns,1.96us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,87399,4.56s,36.92us,0.00ns,34.28us,4.28us,26.70us,46.40us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,35168,4.56s,86.84us,0.00ns,85.27us,3.41us,80.09us,102.69us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,35407,4.56s,86.69us,0.00ns,84.69us,3.41us,80.04us,95.24us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,199752,4.62s,14.88us,0.00ns,14.98us,257.00ns,13.65us,19.50us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,205140,4.62s,14.58us,0.00ns,14.59us,104.00ns,13.55us,19.17us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,40921,4.56s,73.11us,0.00ns,73.27us,702.00ns,72.40us,88.65us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7954,4.51s,377.12us,1.00ns,377.18us,1.48us,374.61us,413.34us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,12083,4.51s,248.99us,0.00ns,248.26us,2.92us,242.77us,296.65us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,119990,4.62s,25.76us,0.00ns,24.67us,1.53us,22.85us,39.85us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,199077,4.62s,14.91us,0.00ns,15.02us,375.00ns,13.77us,30.19us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,200184,4.62s,14.93us,0.00ns,14.95us,329.00ns,13.69us,19.38us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,32616,4.56s,91.10us,0.00ns,91.94us,2.86us,88.09us,121.21us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,32560,4.56s,91.22us,1.00ns,92.11us,2.91us,88.03us,111.09us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,526.45ms,23.00ns,0.00ns,24.00ns,5.00ns,21.00ns,1.93us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,576.67ms,28.00ns,0.00ns,28.00ns,29.00ns,26.00ns,19.98us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,526.89ms,24.00ns,0.00ns,24.00ns,35.00ns,21.00ns,19.19us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.38ms,28.00ns,0.00ns,28.00ns,6.00ns,25.00ns,2.06us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,527.22ms,24.00ns,0.00ns,24.00ns,5.00ns,22.00ns,2.26us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,527.00ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.77us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,526.52ms,26.00ns,0.00ns,26.00ns,6.00ns,24.00ns,2.05us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,526.97ms,23.00ns,0.00ns,24.00ns,6.00ns,21.00ns,2.48us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.48s,171.00ns,0.00ns,172.00ns,12.00ns,167.00ns,1.91us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,476.97ms,17.00ns,0.00ns,17.00ns,3.00ns,15.00ns,2.35us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,476.96ms,12.00ns,0.00ns,12.00ns,26.00ns,10.00ns,18.88us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,526.97ms,31.00ns,0.00ns,31.00ns,6.00ns,28.00ns,2.41us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,576.92ms,31.00ns,0.00ns,31.00ns,5.00ns,29.00ns,1.74us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,84781,4.56s,34.86us,0.00ns,35.35us,1.51us,31.61us,46.10us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,40571,4.56s,75.89us,0.00ns,73.91us,3.64us,68.50us,103.57us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41246,4.56s,75.77us,0.00ns,72.69us,3.64us,68.51us,84.06us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,194410,4.62s,15.35us,0.00ns,15.39us,148.00ns,14.05us,19.80us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,200807,4.62s,14.83us,0.00ns,14.91us,206.00ns,13.74us,18.81us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,16503,4.51s,180.71us,0.00ns,181.75us,4.98us,170.59us,216.62us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7928,4.51s,377.31us,0.00ns,378.38us,5.91us,374.86us,426.34us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12260,4.51s,244.78us,0.00ns,244.69us,1.35us,242.63us,289.83us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,130109,4.62s,22.76us,0.00ns,22.73us,358.00ns,22.39us,46.48us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,200792,4.62s,15.03us,0.00ns,14.90us,296.00ns,13.50us,23.18us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,200301,4.62s,14.81us,0.00ns,14.94us,298.00ns,13.53us,18.93us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,14646,4.51s,204.70us,1.00ns,204.80us,6.45us,188.08us,232.75us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,14785,4.51s,202.59us,0.00ns,202.89us,5.40us,188.42us,229.70us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,61258,4.56s,48.77us,0.00ns,48.94us,859.00ns,46.86us,61.31us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41054,4.56s,75.80us,0.00ns,73.04us,3.58us,68.55us,86.73us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,40791,4.56s,76.03us,0.00ns,73.51us,3.52us,68.58us,83.43us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,201580,4.62s,15.00us,0.00ns,14.85us,258.00ns,13.48us,19.71us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,204610,4.62s,14.46us,0.00ns,14.63us,259.00ns,13.50us,18.72us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,17730,4.51s,168.26us,0.00ns,169.18us,4.51us,154.14us,212.21us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7917,4.51s,378.55us,0.00ns,378.94us,2.79us,376.44us,427.63us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12274,4.51s,244.62us,0.00ns,244.40us,1.19us,242.63us,271.24us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,131090,4.62s,22.52us,0.00ns,22.55us,248.00ns,22.45us,44.59us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,219111,4.62s,13.73us,0.00ns,13.66us,242.00ns,13.12us,26.60us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,209490,4.62s,14.43us,0.00ns,14.29us,267.00ns,13.36us,19.09us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,13836,4.51s,216.72us,2.00ns,216.79us,9.54us,192.91us,268.60us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,13739,4.51s,218.32us,0.00ns,218.33us,10.55us,193.08us,262.46us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,173297,4.62s,17.21us,0.00ns,17.27us,499.00ns,15.76us,40.66us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,33454,4.56s,91.36us,0.00ns,89.64us,3.27us,85.30us,112.15us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,33332,4.56s,91.50us,0.00ns,89.95us,3.33us,85.49us,102.56us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,195909,4.62s,15.26us,0.00ns,15.28us,150.00ns,14.30us,20.41us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,195056,4.62s,15.61us,0.00ns,15.35us,398.00ns,14.13us,19.98us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,27386,4.56s,106.43us,0.00ns,109.51us,6.86us,97.90us,138.09us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7951,4.51s,377.20us,0.00ns,377.32us,1.37us,374.73us,416.80us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,124467,4.62s,23.52us,0.00ns,23.77us,1.05us,23.32us,39.62us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,140476,4.62s,20.54us,0.00ns,21.32us,1.64us,19.41us,30.30us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,133425,4.57s,22.18us,0.00ns,22.45us,714.00ns,20.72us,29.04us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,22295,4.56s,136.51us,0.00ns,134.52us,11.92us,106.11us,179.32us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,22538,4.51s,131.51us,0.00ns,133.08us,10.62us,108.48us,177.02us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,117476,4.57s,24.54us,0.00ns,25.50us,1.36us,19.03us,47.20us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,37905,4.56s,81.85us,0.00ns,79.11us,3.57us,74.94us,91.61us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,37978,4.56s,81.78us,0.00ns,78.95us,3.57us,74.85us,88.64us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,13247,4.51s,226.06us,0.00ns,226.44us,0.98us,225.86us,236.35us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,13301,4.51s,225.14us,0.00ns,225.52us,1.00us,224.93us,237.01us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,48399,4.56s,62.32us,0.00ns,61.94us,1.99us,56.44us,86.07us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7949,4.51s,377.25us,0.00ns,377.41us,1.26us,375.80us,419.44us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,119035,4.62s,22.75us,0.00ns,24.87us,2.75us,22.47us,40.24us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,141916,4.62s,20.79us,0.00ns,21.11us,1.26us,19.48us,33.43us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,133066,4.57s,22.02us,0.00ns,22.50us,1.09us,20.54us,31.14us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,50798,4.56s,58.73us,0.00ns,59.02us,1.92us,55.01us,83.73us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,50455,4.56s,58.76us,0.00ns,59.42us,3.33us,54.66us,82.54us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,64365,4.56s,52.33us,0.00ns,46.57us,8.48us,29.97us,141.98us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41596,4.56s,75.23us,0.00ns,72.08us,3.66us,68.00us,82.77us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41238,4.56s,75.26us,0.00ns,72.71us,3.53us,67.99us,81.53us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,11769,4.51s,254.67us,0.00ns,254.88us,1.44us,252.87us,266.83us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,11798,4.51s,253.02us,0.00ns,254.25us,3.50us,251.74us,285.20us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,52033,4.56s,57.56us,0.00ns,57.62us,578.00ns,55.66us,70.00us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7949,4.51s,377.12us,0.00ns,377.38us,1.44us,375.72us,430.88us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,62538,4.56s,45.63us,0.00ns,47.63us,3.79us,43.40us,76.97us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,153144,4.62s,18.97us,0.00ns,19.55us,1.37us,17.61us,32.62us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,140089,4.62s,20.89us,0.00ns,21.37us,1.30us,19.02us,28.37us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,54864,4.56s,54.14us,0.00ns,54.64us,1.30us,52.24us,65.18us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,56382,4.56s,53.00us,0.00ns,53.16us,830.00ns,51.44us,62.38us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,576.96ms,31.00ns,0.00ns,31.00ns,6.00ns,28.00ns,2.19us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,526.54ms,38.00ns,0.00ns,38.00ns,23.00ns,36.00ns,21.11us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.13ms,28.00ns,0.00ns,28.00ns,7.00ns,25.00ns,2.65us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,526.91ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.32us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.04ms,26.00ns,0.00ns,27.00ns,5.00ns,25.00ns,2.60us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,526.49ms,23.00ns,0.00ns,23.00ns,28.00ns,20.00ns,19.38us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.75ms,24.00ns,0.00ns,24.00ns,6.00ns,21.00ns,2.06us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.01ms,22.00ns,0.00ns,23.00ns,6.00ns,20.00ns,2.63us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,176.00ns,0.00ns,177.00ns,12.00ns,171.00ns,2.03us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.11ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,2.45us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,477.01ms,15.00ns,0.00ns,15.00ns,5.00ns,12.00ns,2.64us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,577.17ms,63.00ns,0.00ns,64.00ns,21.00ns,60.00ns,16.20us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,577.13ms,42.00ns,0.00ns,42.00ns,7.00ns,39.00ns,2.51us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,526.85ms,34.00ns,0.00ns,35.00ns,6.00ns,32.00ns,2.10us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.06ms,38.00ns,0.00ns,39.00ns,7.00ns,36.00ns,2.90us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,627.31ms,29.00ns,0.00ns,30.00ns,7.00ns,26.00ns,2.58us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.46ms,24.00ns,0.00ns,24.00ns,6.00ns,22.00ns,2.28us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,536.53ms,29.00ns,0.00ns,29.00ns,6.00ns,27.00ns,2.48us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,526.88ms,16.00ns,0.00ns,17.00ns,5.00ns,14.00ns,2.85us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.44ms,23.00ns,0.00ns,23.00ns,19.00ns,20.00ns,18.52us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,526.75ms,22.00ns,0.00ns,23.00ns,19.00ns,20.00ns,14.80us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.48s,180.00ns,0.00ns,181.00ns,12.00ns,175.00ns,2.62us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,476.33ms,17.00ns,0.00ns,17.00ns,4.00ns,15.00ns,1.80us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,486.37ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,2.26us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,576.61ms,41.00ns,0.00ns,41.00ns,31.00ns,38.00ns,21.29us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,526.62ms,30.00ns,0.00ns,30.00ns,4.00ns,27.00ns,2.58us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,34747,4.56s,86.21us,0.00ns,86.30us,697.00ns,82.45us,95.23us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13732,4.51s,217.33us,1.00ns,218.44us,6.13us,205.77us,237.75us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13740,4.51s,217.71us,0.00ns,218.31us,6.30us,205.43us,237.69us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,198895,4.62s,15.14us,0.00ns,15.05us,247.00ns,13.82us,19.71us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,198396,4.62s,15.11us,0.00ns,15.08us,266.00ns,13.77us,18.88us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,17590,4.51s,165.01us,0.00ns,170.52us,9.18us,163.99us,221.83us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7950,4.51s,377.21us,0.00ns,377.37us,1.80us,374.53us,426.70us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,130311,4.62s,22.39us,0.00ns,22.69us,1.47us,22.34us,44.48us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,85599,4.56s,34.49us,0.00ns,35.01us,2.06us,32.55us,52.95us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,82015,4.56s,36.35us,0.00ns,36.55us,1.14us,35.04us,51.14us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,15683,4.51s,194.04us,0.00ns,191.26us,5.42us,181.86us,208.01us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,15604,4.51s,193.43us,14.00ns,192.23us,7.00us,182.69us,236.48us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,20065,4.51s,150.24us,0.00ns,149.48us,4.03us,141.06us,164.94us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13525,4.51s,221.42us,0.00ns,221.79us,6.17us,208.44us,239.92us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13509,4.51s,221.26us,0.00ns,222.05us,6.06us,210.01us,240.61us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,199627,4.62s,14.98us,0.00ns,15.00us,148.00ns,13.80us,19.75us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,200186,4.62s,14.94us,0.00ns,14.95us,151.00ns,13.75us,22.58us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,10796,4.51s,280.23us,0.00ns,277.86us,5.17us,267.47us,328.38us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7946,4.51s,377.16us,4.00ns,377.55us,1.77us,374.80us,408.50us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,12198,4.51s,245.09us,0.00ns,245.93us,1.80us,242.69us,271.37us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,127138,4.62s,22.43us,0.00ns,23.26us,1.52us,22.39us,45.85us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,193343,4.62s,15.43us,0.00ns,15.48us,208.00ns,14.09us,21.19us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,200758,4.62s,14.89us,0.00ns,14.91us,158.00ns,14.01us,26.30us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,10021,4.51s,299.01us,0.00ns,299.35us,2.73us,288.06us,311.61us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,10073,4.51s,298.20us,0.00ns,297.81us,4.45us,286.77us,311.11us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,526.99ms,39.00ns,0.00ns,39.00ns,7.00ns,37.00ns,2.56us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,526.94ms,33.00ns,0.00ns,33.00ns,7.00ns,29.00ns,2.20us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,527.02ms,29.00ns,0.00ns,29.00ns,7.00ns,26.00ns,4.06us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,527.34ms,37.00ns,0.00ns,37.00ns,6.00ns,34.00ns,1.90us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,527.10ms,28.00ns,0.00ns,28.00ns,10.00ns,26.00ns,7.86us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,527.31ms,36.00ns,0.00ns,36.00ns,6.00ns,26.00ns,1.93us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,476.41ms,31.00ns,0.00ns,31.00ns,6.00ns,28.00ns,2.50us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.48s,176.00ns,0.00ns,178.00ns,12.00ns,173.00ns,3.00us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,526.61ms,18.00ns,0.00ns,18.00ns,4.00ns,16.00ns,2.08us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,527.04ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,3.38us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,626.72ms,85.00ns,0.00ns,86.00ns,22.00ns,81.00ns,15.19us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,576.95ms,57.00ns,0.00ns,57.00ns,10.00ns,54.00ns,3.20us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,526.77ms,37.00ns,0.00ns,37.00ns,22.00ns,35.00ns,20.72us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,576.58ms,38.00ns,0.00ns,38.00ns,6.00ns,36.00ns,2.54us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,527.24ms,29.00ns,0.00ns,29.00ns,8.00ns,26.00ns,4.85us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,526.71ms,31.00ns,0.00ns,31.00ns,8.00ns,28.00ns,5.03us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,527.02ms,32.00ns,0.00ns,33.00ns,9.00ns,29.00ns,6.70us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,526.92ms,19.00ns,0.00ns,19.00ns,5.00ns,16.00ns,1.99us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,577.19ms,28.00ns,0.00ns,28.00ns,25.00ns,26.00ns,19.72us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,42,1000000,476.51ms,28.00ns,0.00ns,28.00ns,65.00ns,25.00ns,64.06us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.53s,184.00ns,0.00ns,186.00ns,14.00ns,179.00ns,7.58us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,527.10ms,19.00ns,0.00ns,19.00ns,6.00ns,17.00ns,2.61us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,527.21ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,2.02us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,577.43ms,53.00ns,0.00ns,53.00ns,8.00ns,49.00ns,2.46us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,526.84ms,35.00ns,0.00ns,35.00ns,7.00ns,33.00ns,2.19us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,108872,4.57s,29.48us,0.00ns,27.52us,3.79us,18.88us,50.93us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29146,4.56s,103.60us,0.00ns,102.90us,3.52us,97.66us,116.85us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,29397,4.56s,101.50us,0.00ns,102.01us,3.47us,97.20us,116.79us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,201512,4.62s,14.73us,0.00ns,14.85us,297.00ns,13.79us,22.82us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,204923,4.62s,14.59us,0.00ns,14.61us,145.00ns,13.61us,32.89us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,31367,4.56s,95.38us,0.00ns,95.61us,1.05us,94.20us,115.33us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7954,4.51s,377.20us,0.00ns,377.14us,1.75us,374.59us,429.48us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,119867,4.62s,25.00us,0.00ns,24.69us,1.24us,22.96us,44.78us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,134670,4.62s,21.54us,0.00ns,22.23us,2.11us,19.10us,33.32us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,127024,4.57s,22.92us,0.00ns,23.58us,1.81us,20.30us,30.68us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,28088,4.56s,105.42us,1.00ns,106.77us,4.05us,100.82us,129.41us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,28068,4.51s,105.57us,1.00ns,106.85us,3.96us,100.80us,127.39us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,61935,4.56s,48.25us,0.00ns,48.39us,638.00ns,47.05us,55.75us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29163,4.56s,103.22us,0.00ns,102.84us,3.34us,98.33us,114.81us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,28905,4.56s,104.77us,0.00ns,103.76us,3.31us,97.70us,113.22us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,203545,4.62s,14.89us,0.00ns,14.71us,309.00ns,13.44us,23.24us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,208415,4.62s,14.17us,0.00ns,14.36us,304.00ns,13.37us,34.70us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,22049,4.56s,135.13us,0.00ns,136.02us,4.19us,127.52us,164.03us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7940,4.51s,377.71us,0.00ns,377.85us,1.38us,376.21us,404.91us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,12261,4.51s,244.75us,0.00ns,244.66us,1.35us,242.65us,287.22us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,129523,4.62s,22.77us,0.00ns,22.83us,227.00ns,22.71us,35.46us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,193727,4.62s,15.61us,0.00ns,15.45us,488.00ns,13.57us,23.02us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,197870,4.62s,15.34us,0.00ns,15.13us,538.00ns,13.49us,19.21us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,18238,4.51s,163.64us,0.00ns,164.47us,6.32us,141.65us,190.65us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,18387,4.51s,161.71us,0.00ns,163.13us,6.11us,141.22us,193.48us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,527.24ms,34.00ns,0.00ns,34.00ns,104.00ns,31.00ns,103.14us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,576.69ms,31.00ns,0.00ns,31.00ns,5.00ns,28.00ns,1.85us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,526.53ms,28.00ns,0.00ns,28.00ns,6.00ns,25.00ns,2.56us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,526.73ms,33.00ns,0.00ns,33.00ns,7.00ns,29.00ns,2.25us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,527.12ms,30.00ns,0.00ns,30.00ns,13.00ns,27.00ns,11.52us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,526.68ms,23.00ns,0.00ns,23.00ns,6.00ns,21.00ns,2.23us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,526.56ms,25.00ns,0.00ns,25.00ns,27.00ns,22.00ns,18.48us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.54s,190.00ns,0.00ns,191.00ns,13.00ns,176.00ns,1.98us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,526.87ms,16.00ns,0.00ns,17.00ns,5.00ns,15.00ns,2.36us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,526.50ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,2.10us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,627.26ms,76.00ns,0.00ns,77.00ns,23.00ns,71.00ns,15.88us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,627.14ms,51.00ns,0.00ns,51.00ns,8.00ns,47.00ns,3.14us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,577.15ms,36.00ns,0.00ns,36.00ns,5.00ns,33.00ns,2.29us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,527.41ms,38.00ns,0.00ns,38.00ns,8.00ns,36.00ns,2.57us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,527.16ms,28.00ns,0.00ns,28.00ns,24.00ns,24.00ns,17.64us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,477.12ms,26.00ns,0.00ns,26.00ns,5.00ns,24.00ns,2.65us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,527.28ms,34.00ns,0.00ns,35.00ns,24.00ns,32.00ns,18.50us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,526.85ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,2.09us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,526.70ms,22.00ns,0.00ns,23.00ns,21.00ns,20.00ns,15.96us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,526.64ms,24.00ns,0.00ns,24.00ns,4.00ns,21.00ns,1.96us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.53s,185.00ns,0.00ns,187.00ns,10.00ns,179.00ns,2.37us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,476.82ms,18.00ns,0.00ns,18.00ns,5.00ns,16.00ns,2.53us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,526.49ms,14.00ns,0.00ns,14.00ns,3.00ns,12.00ns,2.21us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,576.65ms,47.00ns,0.00ns,47.00ns,8.00ns,44.00ns,2.13us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,527.19ms,33.00ns,0.00ns,33.00ns,27.00ns,31.00ns,19.75us\n"
  },
  {
    "path": "benchmarks/record/x86_64/2023-08-23.csv",
    "content": "name,model,rebar_version,engine,engine_version,err,haystack_len,iters,total,median,mad,mean,stddev,min,max\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,17124,4.51s,174.90us,0.00ns,175.16us,1.00us,173.64us,184.09us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,16361,4.51s,180.50us,0.00ns,183.34us,4.94us,179.66us,198.53us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,17873,4.51s,167.50us,0.00ns,167.82us,1.14us,166.66us,180.07us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,6335,4.51s,473.07us,0.00ns,473.60us,2.92us,461.08us,490.93us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,7172,4.51s,404.02us,0.00ns,418.27us,25.05us,388.14us,485.22us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,13780,4.56s,217.03us,0.00ns,217.37us,1.44us,215.52us,237.03us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,15883,4.51s,190.20us,0.00ns,188.85us,2.64us,182.71us,201.52us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,17782,4.51s,173.60us,1.00ns,168.68us,6.01us,161.32us,190.75us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,17925,4.51s,163.12us,0.00ns,167.34us,5.75us,161.93us,190.48us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,7094,4.51s,415.50us,1.00ns,422.91us,19.30us,405.96us,491.33us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,15981,4.51s,187.53us,0.00ns,187.70us,2.00us,185.06us,208.21us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,9766,4.51s,309.61us,0.00ns,307.16us,4.67us,294.02us,321.69us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,3358,4.51s,891.74us,1.00ns,893.52us,7.31us,886.27us,0.96ms\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,4759,4.51s,628.97us,0.00ns,630.43us,6.78us,598.93us,667.59us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,8818,4.56s,346.54us,0.00ns,339.91us,10.72us,322.54us,361.75us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,9150,4.51s,326.08us,0.00ns,327.87us,6.13us,321.14us,345.15us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,9859,4.51s,297.14us,0.00ns,304.27us,11.09us,295.15us,330.41us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,8418,4.51s,352.86us,0.00ns,356.35us,8.56us,351.62us,384.93us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,6203,4.51s,483.18us,0.00ns,483.66us,1.77us,478.44us,498.12us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,2204,4.51s,1.36ms,1.00ns,1.36ms,5.68us,1.35ms,1.43ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,3417,4.51s,881.61us,0.00ns,878.02us,14.78us,835.22us,931.64us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,6461,4.56s,470.44us,0.00ns,463.99us,13.25us,437.18us,484.76us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,5529,4.51s,541.78us,0.00ns,542.62us,2.26us,534.99us,558.70us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,6088,4.51s,482.10us,1.00ns,492.80us,15.08us,476.39us,612.51us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,5655,4.51s,528.66us,0.00ns,530.48us,5.84us,527.82us,574.46us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,832.95ms,186.00ns,0.00ns,186.00ns,11.00ns,181.00ns,1.97us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,880.20ms,187.00ns,0.00ns,188.00ns,24.00ns,183.00ns,20.79us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,779.84ms,171.00ns,0.00ns,172.00ns,13.00ns,168.00ns,6.40us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,779.75ms,144.00ns,0.00ns,145.00ns,16.00ns,139.00ns,10.90us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,780.18ms,166.00ns,0.00ns,167.00ns,13.00ns,156.00ns,5.31us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.73s,294.00ns,0.00ns,296.00ns,17.00ns,286.00ns,2.38us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,880.02ms,188.00ns,0.00ns,189.00ns,12.00ns,185.00ns,2.46us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,880.38ms,172.00ns,0.00ns,172.00ns,11.00ns,167.00ns,5.73us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,830.34ms,173.00ns,0.00ns,173.00ns,8.00ns,169.00ns,2.02us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,780.01ms,159.00ns,0.00ns,159.00ns,13.00ns,153.00ns,4.75us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,879.85ms,207.00ns,0.00ns,207.00ns,14.00ns,203.00ns,5.69us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,1.13s,332.00ns,0.00ns,331.00ns,19.00ns,314.00ns,6.35us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,879.75ms,216.00ns,0.00ns,217.00ns,19.00ns,208.00ns,10.47us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,1.08s,283.00ns,0.00ns,282.00ns,21.00ns,229.00ns,2.49us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,2.03s,443.00ns,0.00ns,444.00ns,17.00ns,435.00ns,10.93us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,1.13s,343.00ns,0.00ns,343.00ns,11.00ns,339.00ns,2.31us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,1.13s,321.00ns,0.00ns,321.00ns,15.00ns,313.00ns,2.32us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,1.28s,375.00ns,0.00ns,376.00ns,18.00ns,367.00ns,6.64us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,1.48s,497.00ns,0.00ns,498.00ns,16.00ns,486.00ns,5.40us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,1.13s,297.00ns,0.00ns,298.00ns,17.00ns,290.00ns,2.30us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.08s,265.00ns,0.00ns,267.00ns,16.00ns,254.00ns,2.37us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,2.34s,589.00ns,0.00ns,591.00ns,22.00ns,579.00ns,6.95us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,1.68s,556.00ns,0.00ns,557.00ns,26.00ns,542.00ns,14.49us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,1.58s,502.00ns,0.00ns,503.00ns,24.00ns,492.00ns,9.59us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.63s,569.00ns,0.00ns,569.00ns,19.00ns,555.00ns,12.06us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,579.73ms,50.00ns,0.00ns,50.00ns,29.00ns,47.00ns,19.09us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,578.63ms,49.00ns,0.00ns,49.00ns,32.00ns,47.00ns,19.03us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,528.56ms,45.00ns,0.00ns,45.00ns,6.00ns,42.00ns,2.27us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,528.35ms,34.00ns,0.00ns,34.00ns,7.00ns,27.00ns,2.03us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,528.20ms,26.00ns,0.00ns,26.00ns,6.00ns,22.00ns,2.10us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.53s,185.00ns,0.00ns,186.00ns,10.00ns,179.00ns,3.66us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,578.19ms,54.00ns,0.00ns,54.00ns,8.00ns,52.00ns,2.24us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,580.36ms,45.00ns,0.00ns,45.00ns,6.00ns,42.00ns,2.19us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,578.28ms,45.00ns,0.00ns,45.00ns,7.00ns,42.00ns,1.77us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,528.18ms,24.00ns,0.00ns,24.00ns,5.00ns,22.00ns,2.15us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,528.03ms,47.00ns,0.00ns,47.00ns,11.00ns,44.00ns,6.03us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,717215,4.78s,4.15us,0.00ns,4.15us,67.00ns,4.07us,14.01us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,698119,4.88s,4.28us,0.00ns,4.27us,87.00ns,4.10us,10.82us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,717456,4.83s,4.14us,0.00ns,4.15us,69.00ns,4.09us,23.38us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,136926,4.62s,21.50us,0.00ns,21.88us,896.00ns,21.46us,45.33us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,26167,4.56s,114.38us,0.00ns,114.62us,1.52us,114.35us,141.93us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,389384,4.82s,7.36us,0.00ns,7.38us,141.00ns,7.13us,23.75us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,682552,4.83s,4.34us,0.00ns,4.36us,66.00ns,4.18us,13.38us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,692713,4.88s,4.34us,0.00ns,4.30us,117.00ns,4.15us,27.10us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,713975,4.93s,4.14us,0.00ns,4.17us,87.00ns,4.10us,11.77us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,26179,4.56s,114.38us,0.00ns,114.56us,1.02us,114.35us,140.97us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,682596,4.78s,4.34us,0.00ns,4.36us,90.00ns,4.28us,13.84us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,576322,4.73s,5.17us,0.00ns,5.17us,75.00ns,5.14us,26.11us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,72018,4.56s,42.92us,0.00ns,41.62us,1.97us,38.16us,72.40us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,17215,4.51s,171.57us,0.00ns,174.23us,11.12us,171.53us,344.64us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,263436,4.78s,10.96us,0.00ns,11.05us,178.00ns,10.91us,18.11us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,528322,4.78s,5.59us,0.00ns,5.65us,237.00ns,5.48us,12.44us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,575837,4.83s,5.18us,0.00ns,5.18us,74.00ns,5.11us,14.46us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,477304,4.78s,6.53us,0.00ns,6.25us,560.00ns,5.17us,11.93us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,388310,4.67s,7.68us,0.00ns,7.69us,101.00ns,7.64us,25.39us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,50254,4.56s,57.27us,0.00ns,59.66us,3.71us,55.10us,84.30us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,13095,4.51s,228.72us,0.00ns,229.08us,1.10us,228.69us,256.93us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,187949,4.67s,15.62us,0.00ns,15.63us,145.00ns,15.44us,38.58us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,389398,4.72s,7.66us,0.00ns,7.67us,89.00ns,7.63us,14.17us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,381898,4.72s,7.81us,0.00ns,7.82us,104.00ns,7.66us,11.89us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,389394,4.67s,7.66us,0.00ns,7.67us,101.00ns,7.61us,28.30us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,476.42ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.63us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,527.09ms,15.00ns,0.00ns,15.00ns,14.00ns,13.00ns,13.10us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,526.64ms,15.00ns,0.00ns,15.00ns,6.00ns,13.00ns,3.73us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,576.91ms,39.00ns,0.00ns,38.00ns,13.00ns,32.00ns,10.33us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,778.06ms,144.00ns,0.00ns,145.00ns,19.00ns,141.00ns,13.90us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.53s,162.00ns,0.00ns,163.00ns,12.00ns,157.00ns,2.31us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,476.84ms,15.00ns,0.00ns,15.00ns,5.00ns,12.00ns,2.08us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,477.05ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,1.87us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,477.52ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,2.12us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,778.19ms,144.00ns,0.00ns,144.00ns,17.00ns,141.00ns,12.25us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,526.58ms,15.00ns,0.00ns,15.00ns,6.00ns,13.00ns,4.43us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,527.17ms,19.00ns,0.00ns,19.00ns,16.00ns,17.00ns,15.32us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,577.25ms,62.00ns,0.00ns,62.00ns,8.00ns,56.00ns,2.72us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,878.40ms,208.00ns,0.00ns,211.00ns,18.00ns,205.00ns,1.83us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.48s,168.00ns,0.00ns,169.00ns,16.00ns,161.00ns,6.71us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,527.11ms,19.00ns,0.00ns,19.00ns,34.00ns,17.00ns,21.54us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,526.75ms,19.00ns,0.00ns,19.00ns,6.00ns,16.00ns,4.55us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,526.91ms,19.00ns,0.00ns,19.00ns,5.00ns,16.00ns,2.51us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,527.03ms,22.00ns,0.00ns,22.00ns,6.00ns,20.00ns,2.14us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,627.27ms,80.00ns,0.00ns,80.00ns,9.00ns,74.00ns,2.30us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.03s,272.00ns,0.00ns,273.00ns,16.00ns,268.00ns,2.05us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.48s,168.00ns,0.00ns,169.00ns,12.00ns,162.00ns,2.33us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,526.77ms,22.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.47us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,526.71ms,21.00ns,0.00ns,21.00ns,5.00ns,19.00ns,2.35us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,529.26ms,21.00ns,0.00ns,21.00ns,23.00ns,19.00ns,19.15us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,476.60ms,12.00ns,0.00ns,12.00ns,3.00ns,9.00ns,1.91us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,476.52ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,3.55us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,526.57ms,12.00ns,0.00ns,12.00ns,18.00ns,11.00ns,16.86us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,526.57ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.09us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,527.08ms,23.00ns,0.00ns,23.00ns,13.00ns,21.00ns,12.50us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.48s,155.00ns,0.00ns,156.00ns,12.00ns,151.00ns,2.76us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,476.76ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.17us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,476.41ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.09us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,476.42ms,12.00ns,0.00ns,12.00ns,2.00ns,10.00ns,1.86us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,527.60ms,23.00ns,0.00ns,25.00ns,82.00ns,21.00ns,80.37us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,476.91ms,12.00ns,0.00ns,12.00ns,104.00ns,10.00ns,104.01us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,476.87ms,14.00ns,0.00ns,14.00ns,6.00ns,12.00ns,3.23us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,526.98ms,16.00ns,0.00ns,16.00ns,31.00ns,14.00ns,16.41us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,527.00ms,30.00ns,0.00ns,30.00ns,6.00ns,27.00ns,2.23us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.48s,156.00ns,0.00ns,157.00ns,12.00ns,152.00ns,2.48us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,476.51ms,14.00ns,0.00ns,14.00ns,19.00ns,12.00ns,18.88us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,476.59ms,13.00ns,0.00ns,13.00ns,24.00ns,11.00ns,21.15us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,526.71ms,15.00ns,0.00ns,15.00ns,5.00ns,12.00ns,2.31us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,477.05ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.32us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,527.04ms,18.00ns,0.00ns,18.00ns,5.00ns,16.00ns,2.82us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,576.80ms,43.00ns,0.00ns,42.00ns,16.00ns,34.00ns,11.86us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.43s,157.00ns,0.00ns,158.00ns,27.00ns,152.00ns,24.30us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,526.53ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,2.59us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,526.87ms,13.00ns,0.00ns,13.00ns,5.00ns,11.00ns,2.24us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,526.45ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,1.78us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,,1000000,526.68ms,11.00ns,0.00ns,11.00ns,6.00ns,9.00ns,5.28us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,,1000000,526.96ms,11.00ns,0.00ns,11.00ns,3.00ns,9.00ns,2.06us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,,1000000,476.99ms,11.00ns,0.00ns,11.00ns,12.00ns,9.00ns,10.95us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,,1000000,477.30ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.60us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,,1000000,476.93ms,10.00ns,0.00ns,10.00ns,4.00ns,8.00ns,2.21us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,,1000000,1.48s,161.00ns,0.00ns,161.00ns,14.00ns,157.00ns,8.68us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,,1000000,476.59ms,11.00ns,0.00ns,12.00ns,70.00ns,9.00ns,69.91us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,,1000000,488.44ms,10.00ns,0.00ns,10.00ns,9.00ns,9.00ns,6.45us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,,1000000,476.70ms,10.00ns,0.00ns,10.00ns,2.00ns,9.00ns,1.54us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,,1000000,476.89ms,10.00ns,0.00ns,10.00ns,4.00ns,8.00ns,2.30us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,,1000000,476.94ms,10.00ns,0.00ns,10.00ns,29.00ns,8.00ns,17.36us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,,1000000,526.62ms,11.00ns,0.00ns,12.00ns,5.00ns,9.00ns,2.36us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,,1000000,477.08ms,11.00ns,0.00ns,11.00ns,17.00ns,9.00ns,16.23us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,,1000000,476.82ms,10.00ns,0.00ns,10.00ns,16.00ns,9.00ns,15.51us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,,1000000,1.48s,155.00ns,0.00ns,156.00ns,12.00ns,151.00ns,4.24us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,,1000000,476.45ms,11.00ns,0.00ns,12.00ns,23.00ns,9.00ns,19.02us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,,1000000,526.65ms,10.00ns,0.00ns,10.00ns,3.00ns,9.00ns,1.96us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,,1000000,526.59ms,10.00ns,0.00ns,10.00ns,3.00ns,9.00ns,2.23us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,,1000000,476.84ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.13us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,,1000000,476.80ms,11.00ns,0.00ns,11.00ns,19.00ns,9.00ns,18.77us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,,1000000,526.95ms,10.00ns,0.00ns,10.00ns,2.00ns,9.00ns,1.49us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,,1000000,1.48s,154.00ns,0.00ns,156.00ns,12.00ns,150.00ns,2.59us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,,1000000,476.92ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,1.99us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,,1000000,476.87ms,10.00ns,0.00ns,11.00ns,227.00ns,9.00ns,226.28us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,,1000000,476.82ms,10.00ns,0.00ns,10.00ns,4.00ns,9.00ns,2.56us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,594099,4.83s,5.00us,0.00ns,5.02us,90.00ns,4.93us,11.72us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,563279,4.78s,5.29us,0.00ns,5.29us,96.00ns,5.19us,29.85us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,505278,4.78s,5.90us,0.00ns,5.90us,83.00ns,5.79us,26.90us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,125936,4.57s,24.23us,0.00ns,23.79us,716.00ns,22.81us,48.34us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,25765,4.56s,115.60us,0.00ns,116.40us,3.41us,115.25us,146.65us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,347198,4.82s,8.09us,0.00ns,8.30us,403.00ns,7.96us,15.42us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,588347,4.83s,5.06us,0.00ns,5.07us,65.00ns,4.96us,12.07us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,600786,4.78s,4.95us,0.00ns,4.96us,82.00ns,4.88us,27.68us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,581080,4.83s,5.17us,0.00ns,5.13us,105.00ns,4.91us,15.17us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,576502,4.83s,5.07us,0.00ns,5.17us,150.00ns,4.96us,13.25us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,376168,4.72s,7.77us,0.00ns,7.94us,373.00ns,7.67us,17.61us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,66755,4.56s,45.26us,0.00ns,44.91us,1.24us,41.30us,60.59us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,17132,4.51s,173.84us,0.00ns,175.07us,4.50us,173.69us,235.63us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,220242,4.72s,13.24us,0.00ns,13.28us,143.00ns,13.09us,22.11us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,353570,4.72s,8.78us,0.00ns,8.45us,509.00ns,7.60us,14.34us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,355933,4.67s,7.88us,0.00ns,8.39us,667.00ns,7.71us,16.43us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,370953,4.67s,7.78us,0.00ns,8.05us,578.00ns,7.64us,31.40us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,280278,4.62s,10.65us,0.00ns,10.67us,117.00ns,10.53us,16.26us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,49523,4.56s,60.39us,0.00ns,60.53us,652.00ns,59.99us,81.88us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,12929,4.51s,231.64us,0.00ns,232.00us,1.03us,231.53us,274.59us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,154122,4.67s,19.25us,0.00ns,19.13us,336.00ns,18.50us,24.82us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,264466,4.67s,11.67us,0.00ns,11.31us,450.00ns,10.78us,17.93us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,271651,4.67s,10.79us,0.00ns,11.01us,369.00ns,10.69us,18.77us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,274609,4.67s,10.79us,0.00ns,10.89us,320.00ns,10.72us,16.52us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,526.53ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,2.64us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,526.72ms,19.00ns,0.00ns,19.00ns,5.00ns,16.00ns,2.84us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,576.61ms,19.00ns,0.00ns,19.00ns,4.00ns,16.00ns,2.30us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,526.83ms,36.00ns,0.00ns,36.00ns,7.00ns,33.00ns,2.05us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,778.10ms,153.00ns,0.00ns,154.00ns,16.00ns,147.00ns,9.46us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.48s,165.00ns,0.00ns,166.00ns,9.00ns,160.00ns,2.27us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,526.41ms,20.00ns,0.00ns,20.00ns,4.00ns,17.00ns,2.30us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,526.59ms,18.00ns,0.00ns,19.00ns,29.00ns,16.00ns,19.27us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,526.85ms,19.00ns,0.00ns,19.00ns,4.00ns,17.00ns,1.90us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,777.79ms,153.00ns,0.00ns,153.00ns,14.00ns,146.00ns,7.78us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,526.60ms,20.00ns,0.00ns,20.00ns,4.00ns,17.00ns,1.99us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,526.99ms,28.00ns,0.00ns,28.00ns,6.00ns,25.00ns,2.57us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,626.86ms,67.00ns,0.00ns,66.00ns,9.00ns,54.00ns,2.79us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,928.65ms,222.00ns,0.00ns,224.00ns,18.00ns,215.00ns,7.42us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.53s,175.00ns,0.00ns,176.00ns,12.00ns,167.00ns,2.90us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,527.20ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.31us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,526.76ms,29.00ns,0.00ns,29.00ns,5.00ns,26.00ns,2.07us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,526.95ms,28.00ns,0.00ns,28.00ns,17.00ns,25.00ns,15.76us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,527.33ms,37.00ns,0.00ns,38.00ns,11.00ns,33.00ns,9.14us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,627.21ms,80.00ns,0.00ns,83.00ns,10.00ns,75.00ns,2.37us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.03s,285.00ns,0.00ns,286.00ns,16.00ns,280.00ns,2.35us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.53s,185.00ns,0.00ns,186.00ns,13.00ns,178.00ns,2.74us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,527.01ms,38.00ns,0.00ns,38.00ns,19.00ns,34.00ns,12.83us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,527.17ms,37.00ns,0.00ns,37.00ns,18.00ns,33.00ns,11.68us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,526.93ms,37.00ns,0.00ns,37.00ns,7.00ns,33.00ns,2.19us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,477.01ms,15.00ns,0.00ns,15.00ns,5.00ns,12.00ns,2.95us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,476.43ms,17.00ns,0.00ns,17.00ns,5.00ns,15.00ns,2.24us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,476.63ms,17.00ns,0.00ns,17.00ns,4.00ns,15.00ns,1.81us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,476.86ms,16.00ns,0.00ns,16.00ns,4.00ns,13.00ns,2.23us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,526.56ms,29.00ns,0.00ns,28.00ns,7.00ns,21.00ns,2.61us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.43s,156.00ns,0.00ns,157.00ns,12.00ns,152.00ns,4.62us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,526.70ms,14.00ns,0.00ns,14.00ns,43.00ns,13.00ns,42.70us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,526.99ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,1.94us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,476.94ms,16.00ns,0.00ns,16.00ns,25.00ns,14.00ns,19.60us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,526.68ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.14us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,476.93ms,14.00ns,0.00ns,14.00ns,22.00ns,12.00ns,20.71us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,526.98ms,20.00ns,0.00ns,20.00ns,5.00ns,19.00ns,2.24us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,576.94ms,20.00ns,0.00ns,20.00ns,5.00ns,17.00ns,2.44us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,526.96ms,37.00ns,0.00ns,37.00ns,6.00ns,29.00ns,1.99us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.48s,159.00ns,0.00ns,160.00ns,13.00ns,154.00ns,7.17us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,526.86ms,20.00ns,0.00ns,20.00ns,7.00ns,18.00ns,4.16us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,527.24ms,20.00ns,0.00ns,20.00ns,24.00ns,18.00ns,19.09us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,477.74ms,18.00ns,0.00ns,18.00ns,3.00ns,16.00ns,1.98us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,527.04ms,29.00ns,0.00ns,29.00ns,12.00ns,27.00ns,9.93us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,526.95ms,23.00ns,0.00ns,23.00ns,15.00ns,21.00ns,13.52us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,577.19ms,43.00ns,0.00ns,43.00ns,7.00ns,34.00ns,2.48us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.48s,164.00ns,0.00ns,165.00ns,12.00ns,158.00ns,3.07us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,527.05ms,25.00ns,0.00ns,25.00ns,13.00ns,22.00ns,11.93us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,526.55ms,28.00ns,0.00ns,28.00ns,8.00ns,26.00ns,5.40us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,477.11ms,21.00ns,0.00ns,22.00ns,5.00ns,18.00ns,2.62us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,80603,4.56s,38.89us,0.00ns,37.18us,2.29us,33.58us,62.93us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,56146,4.56s,52.43us,0.00ns,53.39us,1.70us,51.45us,80.10us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,57971,4.56s,51.22us,0.00ns,51.71us,1.29us,49.77us,77.62us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,33642,4.56s,89.04us,0.00ns,89.14us,772.00ns,86.73us,101.88us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,18545,4.51s,156.32us,0.00ns,161.74us,8.22us,154.44us,217.99us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,56109,4.56s,52.72us,0.00ns,53.14us,1.70us,50.33us,88.93us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,49055,4.56s,61.43us,0.00ns,61.12us,1.10us,58.09us,79.65us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,62698,4.56s,48.68us,0.00ns,47.81us,1.94us,44.46us,72.33us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,64195,4.56s,45.96us,0.00ns,46.70us,1.52us,44.70us,71.80us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,18766,4.51s,156.22us,0.00ns,159.83us,6.21us,154.31us,237.69us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,57540,4.56s,51.93us,0.00ns,52.10us,560.00ns,51.52us,71.21us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,25379,4.56s,117.94us,0.00ns,118.18us,1.06us,115.63us,139.45us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,15990,4.51s,187.19us,0.00ns,187.58us,1.67us,184.84us,224.70us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,11385,4.51s,259.63us,0.00ns,263.48us,6.52us,254.81us,321.54us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,23700,4.56s,128.02us,0.00ns,126.26us,3.48us,119.20us,136.19us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,22209,4.51s,132.90us,0.00ns,135.05us,4.23us,129.60us,150.05us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,26083,4.56s,111.55us,0.00ns,114.98us,5.44us,110.51us,144.67us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,25867,4.56s,114.43us,0.00ns,115.95us,4.12us,112.96us,146.31us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,18985,4.51s,157.94us,0.00ns,157.99us,1.32us,151.87us,174.57us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,9848,4.51s,304.49us,1.00ns,304.61us,1.94us,299.58us,343.78us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,8515,4.51s,349.12us,0.00ns,352.30us,11.05us,347.83us,430.96us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,15312,4.56s,196.97us,0.00ns,195.60us,4.98us,183.78us,210.59us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,17676,4.51s,173.23us,0.00ns,169.69us,4.96us,162.76us,189.27us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,19793,4.51s,146.54us,0.00ns,151.54us,7.86us,142.56us,183.55us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,19565,4.51s,149.33us,0.00ns,153.31us,7.94us,147.80us,191.25us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,576.80ms,47.00ns,0.00ns,47.00ns,5.00ns,44.00ns,1.69us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,577.28ms,47.00ns,0.00ns,47.00ns,10.00ns,43.00ns,8.05us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,577.12ms,45.00ns,0.00ns,45.00ns,12.00ns,42.00ns,10.29us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,577.20ms,59.00ns,0.00ns,59.00ns,8.00ns,56.00ns,2.71us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,777.86ms,159.00ns,0.00ns,161.00ns,15.00ns,145.00ns,7.94us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.53s,185.00ns,0.00ns,187.00ns,13.00ns,178.00ns,2.34us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,577.23ms,48.00ns,0.00ns,48.00ns,7.00ns,44.00ns,2.56us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,576.60ms,44.00ns,0.00ns,44.00ns,7.00ns,41.00ns,2.40us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,576.61ms,44.00ns,0.00ns,44.00ns,6.00ns,41.00ns,2.41us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,778.56ms,157.00ns,0.00ns,160.00ns,15.00ns,144.00ns,7.11us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,577.13ms,50.00ns,0.00ns,50.00ns,6.00ns,46.00ns,2.24us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,628.37ms,76.00ns,0.00ns,77.00ns,8.00ns,71.00ns,1.87us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,678.66ms,91.00ns,0.00ns,91.00ns,9.00ns,81.00ns,2.04us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,930.14ms,266.00ns,0.00ns,267.00ns,21.00ns,206.00ns,5.47us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.63s,227.00ns,0.00ns,229.00ns,18.00ns,218.00ns,8.33us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,628.85ms,86.00ns,0.00ns,87.00ns,26.00ns,81.00ns,18.53us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,679.50ms,98.00ns,0.00ns,98.00ns,10.00ns,90.00ns,5.00us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,679.87ms,89.00ns,0.00ns,89.00ns,18.00ns,83.00ns,14.18us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,729.68ms,122.00ns,0.00ns,123.00ns,23.00ns,115.00ns,21.20us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,729.56ms,128.00ns,0.00ns,131.00ns,12.00ns,122.00ns,2.24us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.03s,264.00ns,0.00ns,265.00ns,15.00ns,260.00ns,2.60us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.68s,267.00ns,0.00ns,268.00ns,16.00ns,257.00ns,2.83us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,729.40ms,134.00ns,0.00ns,135.00ns,10.00ns,128.00ns,1.98us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,729.86ms,138.00ns,0.00ns,138.00ns,11.00ns,131.00ns,2.22us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,729.90ms,136.00ns,0.00ns,137.00ns,10.00ns,129.00ns,2.19us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,526.43ms,29.00ns,0.00ns,29.00ns,20.00ns,26.00ns,16.09us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,526.61ms,30.00ns,0.00ns,30.00ns,6.00ns,28.00ns,2.94us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,527.09ms,28.00ns,0.00ns,28.00ns,7.00ns,26.00ns,2.79us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,526.92ms,20.00ns,0.00ns,20.00ns,18.00ns,17.00ns,13.65us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,527.11ms,24.00ns,0.00ns,26.00ns,13.00ns,21.00ns,11.55us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.48s,161.00ns,0.00ns,162.00ns,13.00ns,155.00ns,3.89us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,526.44ms,31.00ns,0.00ns,31.00ns,6.00ns,29.00ns,2.57us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,527.01ms,28.00ns,0.00ns,28.00ns,12.00ns,26.00ns,10.54us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,527.02ms,28.00ns,0.00ns,28.00ns,23.00ns,26.00ns,22.23us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,527.00ms,24.00ns,0.00ns,26.00ns,18.00ns,21.00ns,16.22us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,526.98ms,32.00ns,0.00ns,32.00ns,21.00ns,29.00ns,16.37us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,579.24ms,51.00ns,0.00ns,51.00ns,19.00ns,47.00ns,17.79us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,528.76ms,33.00ns,0.00ns,33.00ns,21.00ns,29.00ns,17.72us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,528.62ms,34.00ns,0.00ns,34.00ns,22.00ns,27.00ns,17.42us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.58s,193.00ns,0.00ns,194.00ns,14.00ns,187.00ns,6.03us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,578.65ms,49.00ns,0.00ns,50.00ns,19.00ns,47.00ns,17.74us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,578.65ms,56.00ns,0.00ns,56.00ns,7.00ns,52.00ns,2.15us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,628.37ms,52.00ns,0.00ns,52.00ns,8.00ns,47.00ns,2.58us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,628.93ms,68.00ns,0.00ns,69.00ns,14.00ns,64.00ns,11.44us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,578.91ms,47.00ns,0.00ns,48.00ns,16.00ns,43.00ns,10.15us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,578.33ms,35.00ns,0.00ns,36.00ns,10.00ns,33.00ns,7.55us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.58s,208.00ns,0.00ns,209.00ns,13.00ns,201.00ns,2.37us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,678.58ms,90.00ns,0.00ns,91.00ns,9.00ns,85.00ns,2.50us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,628.96ms,70.00ns,0.00ns,69.00ns,7.00ns,62.00ns,2.57us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,628.72ms,80.00ns,0.00ns,80.00ns,8.00ns,73.00ns,1.80us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,7549,4.51s,397.10us,0.00ns,397.39us,1.39us,394.02us,417.34us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,7361,4.51s,412.23us,0.00ns,407.54us,8.65us,391.50us,427.59us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,8157,4.51s,376.07us,0.00ns,367.75us,9.87us,355.38us,390.86us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,3604,4.51s,830.68us,1.00ns,832.46us,10.16us,815.93us,888.35us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,3800,4.51s,781.23us,1.00ns,789.49us,33.29us,764.39us,0.95ms\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,9591,4.56s,311.13us,0.00ns,312.49us,4.70us,310.07us,342.06us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,7768,4.51s,385.67us,0.00ns,386.17us,1.27us,385.57us,399.86us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,8500,4.51s,352.62us,0.00ns,352.94us,1.61us,349.72us,368.98us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,8567,4.51s,349.87us,0.00ns,350.17us,1.44us,347.18us,363.06us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,3798,4.51s,789.42us,1.00ns,790.06us,5.37us,771.17us,843.14us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,7170,4.51s,408.83us,1.00ns,418.42us,13.35us,404.60us,445.35us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,1.33s,439.00ns,0.00ns,440.00ns,17.00ns,434.00ns,2.19us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,1.33s,433.00ns,0.00ns,434.00ns,21.00ns,430.00ns,7.70us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.28s,392.00ns,0.00ns,392.00ns,18.00ns,389.00ns,5.74us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,932.18ms,232.00ns,0.00ns,233.00ns,15.00ns,225.00ns,2.19us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,932.54ms,235.00ns,0.00ns,236.00ns,18.00ns,210.00ns,8.00us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,2.14s,478.00ns,0.00ns,479.00ns,20.00ns,470.00ns,2.48us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,1.33s,428.00ns,0.00ns,429.00ns,18.00ns,424.00ns,2.54us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.28s,394.00ns,0.00ns,394.00ns,17.00ns,390.00ns,2.52us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.28s,394.00ns,0.00ns,394.00ns,18.00ns,390.00ns,2.86us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,932.02ms,210.00ns,0.00ns,211.00ns,15.00ns,204.00ns,5.35us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,1.38s,450.00ns,0.00ns,451.00ns,18.00ns,445.00ns,2.30us\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,33335253,273,4.56s,11.00ms,0.00ns,11.01ms,52.51us,10.87ms,11.27ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,33335253,280,4.56s,10.73ms,626.00ns,10.72ms,154.47us,10.37ms,11.12ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,33335253,281,4.56s,10.70ms,0.00ns,10.71ms,151.21us,10.37ms,11.10ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,33335253,438,4.56s,6.70ms,128.00ns,6.85ms,231.66us,6.62ms,7.57ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,33335253,442,4.56s,6.70ms,535.00ns,6.79ms,182.95us,6.63ms,7.46ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/binary,2.5.0,,33335253,3176,4.57s,942.63us,4.00ns,944.71us,12.26us,921.25us,1.02ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,33335253,311,4.57s,9.64ms,0.00ns,9.65ms,110.68us,9.45ms,9.98ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,33335253,145,4.56s,20.70ms,0.00ns,20.72ms,58.97us,20.65ms,21.07ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,33335253,219,4.57s,13.78ms,0.00ns,13.73ms,123.59us,13.48ms,13.95ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,33335253,135,4.62s,22.29ms,0.00ns,22.35ms,305.63us,21.88ms,23.41ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,33335253,434,4.57s,6.77ms,316.00ns,6.93ms,242.88us,6.70ms,7.37ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,33335253,440,4.57s,6.74ms,66.00ns,6.82ms,185.20us,6.69ms,7.35ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,33335253,552,4.57s,5.44ms,125.00ns,5.44ms,44.80us,5.28ms,5.64ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,33335253,557,4.57s,5.39ms,0.00ns,5.40ms,46.78us,5.25ms,5.55ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,22137,4.52s,135.05us,0.00ns,135.48us,1.91us,133.05us,154.53us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13870,4.52s,223.48us,0.00ns,216.25us,9.41us,205.60us,248.22us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13768,4.52s,224.08us,0.00ns,217.86us,9.19us,205.83us,250.49us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,81035,4.56s,36.74us,0.00ns,36.98us,714.00ns,36.50us,156.01us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,82833,4.56s,36.09us,0.00ns,36.17us,477.00ns,35.88us,62.68us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3174,4.51s,940.53us,2.00ns,945.40us,15.37us,929.93us,1.05ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2954,4.51s,1.01ms,1.00ns,1.02ms,2.59us,1.01ms,1.05ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4553,4.51s,657.15us,0.00ns,658.93us,3.48us,651.95us,718.20us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,timeout: exceeded 10s,,0,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,81774,4.56s,36.23us,0.00ns,36.64us,861.00ns,36.00us,43.18us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,82722,4.56s,36.16us,0.00ns,36.22us,320.00ns,35.96us,61.80us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,66877,4.56s,44.76us,0.00ns,44.82us,553.00ns,43.83us,51.78us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,77809,4.56s,38.69us,0.00ns,38.51us,537.00ns,37.53us,49.36us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2897,4.51s,1.04ms,0.00ns,1.04ms,27.15us,0.96ms,1.12ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2937,4.51s,1.02ms,0.00ns,1.02ms,33.70us,0.96ms,1.15ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,23180,4.56s,124.07us,0.00ns,129.39us,6.86us,122.91us,156.45us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13736,4.51s,223.73us,0.00ns,218.37us,9.11us,205.80us,245.93us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13786,4.51s,223.73us,0.00ns,217.59us,9.39us,205.85us,246.88us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,79831,4.57s,37.48us,0.00ns,37.54us,320.00ns,37.26us,45.57us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,78137,4.56s,38.31us,0.00ns,38.35us,384.00ns,38.07us,62.38us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3373,4.51s,877.32us,0.00ns,889.48us,23.23us,868.15us,0.99ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2952,4.51s,1.02ms,2.00ns,1.02ms,2.85us,1.01ms,1.06ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4551,4.51s,657.97us,0.00ns,659.20us,3.03us,652.01us,688.94us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,timeout: exceeded 10s,,0,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,79374,4.56s,37.69us,0.00ns,37.75us,385.00ns,37.48us,66.19us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,75957,4.56s,39.78us,0.00ns,39.45us,898.00ns,37.52us,46.02us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,77699,4.56s,38.50us,0.00ns,38.57us,366.00ns,38.19us,65.95us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,75908,4.56s,38.68us,0.00ns,39.48us,1.10us,38.20us,62.92us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3152,4.51s,0.96ms,8.00ns,0.95ms,26.47us,893.92us,1.03ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3129,4.51s,0.96ms,0.00ns,0.96ms,19.58us,894.28us,1.03ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,16935,4.51s,175.64us,0.00ns,177.11us,4.13us,174.24us,208.33us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13763,4.51s,223.89us,0.00ns,217.95us,9.25us,205.92us,249.92us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13738,4.51s,223.70us,0.00ns,218.34us,9.04us,205.79us,239.12us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,75968,4.57s,39.90us,0.00ns,39.45us,936.00ns,37.83us,62.87us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,76868,4.57s,39.71us,0.00ns,38.99us,1.00us,37.75us,62.28us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3526,4.51s,849.35us,4.00ns,850.96us,12.02us,830.76us,912.85us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2939,4.51s,1.02ms,0.00ns,1.02ms,11.72us,1.01ms,1.07ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4551,4.51s,657.24us,0.00ns,659.22us,4.28us,651.99us,726.70us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,timeout: exceeded 10s,,0,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,77007,4.56s,38.66us,0.00ns,38.91us,1.00us,37.75us,45.05us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,77983,4.56s,37.85us,0.00ns,38.43us,913.00ns,37.63us,61.58us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,75415,4.57s,39.43us,0.00ns,39.74us,762.00ns,39.03us,49.60us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,75677,4.57s,39.54us,0.00ns,39.60us,356.00ns,39.15us,59.20us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3247,4.51s,918.92us,0.00ns,924.14us,13.33us,910.01us,1.01ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3293,4.51s,904.96us,0.00ns,911.03us,16.30us,890.49us,0.99ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,30284,4.56s,102.23us,0.00ns,99.03us,5.63us,89.52us,118.68us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,14200,4.51s,218.35us,0.00ns,211.23us,9.39us,199.97us,231.72us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,14108,4.51s,218.67us,0.00ns,212.61us,9.31us,200.31us,244.27us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,78780,4.57s,37.59us,0.00ns,38.04us,931.00ns,37.31us,44.81us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,79610,4.57s,37.56us,0.00ns,37.64us,390.00ns,37.33us,57.87us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3436,4.51s,870.19us,1.00ns,873.17us,8.12us,862.74us,935.73us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2943,4.51s,1.02ms,0.00ns,1.02ms,9.35us,1.01ms,1.16ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,timeout: exceeded 10s,,0,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,78935,4.56s,37.64us,0.00ns,37.96us,818.00ns,37.39us,45.97us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,79618,4.56s,37.58us,0.00ns,37.63us,296.00ns,37.35us,45.72us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,278430,4.67s,10.75us,0.00ns,10.74us,137.00ns,10.39us,16.12us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,278492,4.67s,10.75us,0.00ns,10.74us,132.00ns,10.38us,18.92us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3241,4.51s,918.05us,0.00ns,925.61us,42.49us,861.53us,1.04ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3232,4.51s,914.71us,6.00ns,928.20us,44.18us,862.09us,1.06ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,23607,4.56s,123.32us,0.00ns,127.05us,6.01us,122.22us,153.00us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13764,4.51s,223.89us,0.00ns,217.92us,9.25us,205.97us,248.55us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13831,4.51s,223.68us,0.00ns,216.86us,9.36us,205.75us,246.57us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,77147,4.56s,38.81us,0.00ns,38.85us,269.00ns,38.57us,45.89us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,79210,4.56s,37.76us,0.00ns,37.83us,404.00ns,37.51us,63.75us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3147,4.51s,0.96ms,0.00ns,0.95ms,12.58us,929.56us,1.01ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2958,4.51s,1.01ms,1.00ns,1.01ms,2.86us,1.01ms,1.06ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4550,4.51s,657.28us,0.00ns,659.31us,5.85us,655.48us,708.76us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,timeout: exceeded 10s,,0,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,78250,4.57s,38.23us,0.00ns,38.30us,355.00ns,37.98us,60.55us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,75936,4.57s,40.07us,0.00ns,39.46us,1.09us,37.76us,61.94us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3131,4.51s,0.96ms,0.00ns,0.96ms,11.33us,937.56us,1.00ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3143,4.51s,0.95ms,0.00ns,0.95ms,11.14us,938.27us,1.00ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,4303,4.51s,697.89us,0.00ns,697.17us,5.93us,688.23us,746.43us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,10995,4.51s,275.15us,0.00ns,272.84us,9.39us,258.37us,319.16us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,11266,4.51s,269.65us,0.00ns,266.27us,8.70us,253.50us,285.15us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,21083,4.56s,142.04us,0.00ns,142.26us,1.25us,139.43us,155.08us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,41794,4.57s,71.68us,0.00ns,71.74us,2.02us,67.65us,81.25us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3467,4.51s,865.27us,0.00ns,865.27us,8.31us,835.38us,907.96us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2755,4.51s,1.09ms,0.00ns,1.09ms,4.18us,1.08ms,1.14ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4405,4.51s,681.04us,0.00ns,681.10us,3.98us,674.82us,727.19us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,8987,4.56s,332.40us,0.00ns,333.48us,5.42us,325.17us,361.34us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,32307,4.57s,92.81us,0.00ns,92.83us,610.00ns,90.95us,101.29us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,46568,4.57s,64.09us,0.00ns,64.39us,1.47us,62.17us,89.53us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3213,4.51s,932.64us,0.00ns,933.92us,6.35us,915.53us,0.96ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3270,4.51s,916.19us,4.00ns,917.41us,8.17us,829.08us,0.97ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,11341,4.51s,264.36us,0.00ns,264.50us,7.89us,248.94us,288.44us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,3928,4.51s,763.20us,8.00ns,763.77us,11.93us,731.45us,825.84us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,4451,4.51s,671.90us,0.00ns,674.05us,12.98us,649.19us,724.48us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,5205,4.51s,576.09us,0.00ns,576.34us,2.76us,570.23us,617.55us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,9608,4.51s,310.16us,0.00ns,312.23us,5.03us,307.02us,347.71us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,2420,4.51s,1.20ms,1.00ns,1.24ms,66.51us,1.19ms,1.37ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2425,4.51s,1.24ms,0.00ns,1.24ms,6.71us,1.22ms,1.29ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,3357,4.51s,895.95us,0.00ns,893.87us,14.43us,845.06us,0.97ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,7457,4.56s,400.11us,0.00ns,401.97us,9.54us,382.67us,478.07us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,6146,4.51s,486.78us,0.00ns,488.11us,3.43us,479.38us,512.95us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,10433,4.51s,285.17us,0.00ns,287.51us,5.41us,280.34us,318.66us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2504,4.51s,1.19ms,5.00ns,1.20ms,16.31us,1.18ms,1.33ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2799,4.51s,1.07ms,0.00ns,1.07ms,4.93us,1.06ms,1.11ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,6367,4.51s,470.40us,0.00ns,471.20us,2.78us,465.20us,489.42us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,8647,4.51s,349.86us,0.00ns,346.94us,8.72us,333.53us,392.45us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,9039,4.51s,333.77us,0.00ns,331.86us,8.71us,318.44us,367.86us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,12688,4.51s,236.24us,0.00ns,236.42us,2.64us,229.27us,270.03us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,29613,4.56s,100.35us,0.00ns,101.27us,2.62us,98.73us,129.29us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,2780,4.51s,1.08ms,1.00ns,1.08ms,10.86us,1.01ms,1.14ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2672,4.51s,1.12ms,9.00ns,1.12ms,7.08us,1.11ms,1.17ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4332,4.51s,691.37us,5.00ns,692.55us,5.01us,687.38us,735.58us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,6019,4.56s,497.09us,0.00ns,498.05us,5.51us,487.41us,525.32us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,20586,4.51s,145.96us,0.00ns,145.69us,1.32us,142.99us,165.60us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,30800,4.56s,99.59us,2.00ns,97.37us,3.98us,90.42us,118.42us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2424,4.51s,1.24ms,0.00ns,1.24ms,12.28us,1.13ms,1.28ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2488,4.51s,1.21ms,19.00ns,1.21ms,13.41us,1.06ms,1.25ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,151305,798700,4.93s,3.70us,0.00ns,3.72us,151.00ns,3.48us,7.80us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,151305,128742,4.57s,22.94us,0.00ns,23.27us,775.00ns,22.33us,29.86us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,151305,127608,4.57s,23.83us,0.00ns,23.48us,811.00ns,22.43us,28.44us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,830083,4.89s,3.61us,0.00ns,3.58us,79.00ns,3.43us,9.30us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,875980,4.89s,3.39us,0.00ns,3.39us,58.00ns,3.32us,12.94us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,151305,241687,4.67s,12.29us,0.00ns,12.38us,1.22us,9.35us,21.07us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,151305,32201,4.56s,93.04us,0.00ns,93.13us,565.00ns,92.35us,112.55us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,timeout: exceeded 10s,,0,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,151305,876290,4.99s,3.37us,0.00ns,3.39us,68.00ns,3.29us,8.65us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,151305,886596,4.90s,3.35us,0.00ns,3.35us,56.00ns,3.27us,12.47us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,151305,605020,4.83s,4.82us,0.00ns,4.93us,328.00ns,4.64us,13.58us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,551868,4.73s,5.39us,0.00ns,5.41us,294.00ns,4.93us,15.03us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,151305,203556,4.62s,14.36us,0.00ns,14.70us,1.84us,10.64us,25.35us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,151305,208793,4.62s,14.05us,0.00ns,14.33us,1.69us,10.61us,24.25us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,151305,724806,4.84s,4.03us,0.00ns,4.11us,297.00ns,3.90us,8.69us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,151305,126180,4.57s,23.99us,0.00ns,23.74us,798.00ns,22.66us,32.81us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,151305,123893,4.57s,24.43us,0.00ns,24.18us,820.00ns,23.06us,29.22us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,830572,4.94s,3.60us,0.00ns,3.58us,76.00ns,3.42us,9.98us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,869067,4.99s,3.39us,0.00ns,3.42us,76.00ns,3.28us,10.38us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,151305,240420,4.63s,12.36us,0.00ns,12.45us,1.46us,9.11us,35.09us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,151305,32176,4.57s,93.05us,0.00ns,93.21us,1.24us,92.66us,115.92us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,timeout: exceeded 10s,,0,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,151305,746809,4.89s,3.98us,0.00ns,3.98us,59.00ns,3.91us,7.99us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,151305,750753,4.78s,3.96us,0.00ns,3.96us,61.00ns,3.87us,10.20us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,151305,617107,4.83s,4.74us,0.00ns,4.83us,333.00ns,4.51us,10.48us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,582268,4.83s,5.07us,0.00ns,5.12us,223.00ns,4.85us,13.21us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,151305,186084,4.62s,15.33us,0.00ns,16.09us,3.18us,9.64us,35.26us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,151305,187274,4.62s,15.17us,0.00ns,15.98us,3.27us,9.30us,34.69us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,500100,112153,4.56s,26.18us,0.00ns,26.72us,1.70us,25.41us,39.09us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,500100,51242,4.56s,60.12us,0.00ns,58.51us,1.89us,54.09us,79.88us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,500100,52461,4.56s,56.17us,0.00ns,57.15us,3.00us,54.09us,69.91us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,259302,4.67s,11.53us,0.00ns,11.54us,107.00ns,11.31us,15.73us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,262639,4.67s,11.38us,0.00ns,11.39us,113.00ns,11.25us,18.17us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,500100,13844,4.51s,216.29us,0.00ns,216.68us,2.20us,216.27us,329.25us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,500100,9741,4.51s,307.62us,0.00ns,307.97us,1.87us,305.36us,339.82us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,500100,15010,4.51s,199.36us,0.00ns,199.84us,2.48us,197.72us,246.48us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,timeout: exceeded 10s,,0,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,500100,262267,4.62s,11.39us,0.00ns,11.41us,114.00ns,11.28us,18.26us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,500100,259594,4.62s,11.40us,0.00ns,11.53us,206.00ns,11.28us,17.14us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,500100,273996,4.67s,10.90us,0.00ns,10.92us,126.00ns,10.75us,22.69us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,500100,277565,4.67s,10.75us,0.00ns,10.78us,126.00ns,10.63us,18.31us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,500100,13999,4.51s,216.29us,0.00ns,214.28us,11.92us,208.26us,344.92us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,500100,13795,4.52s,216.30us,0.00ns,217.45us,10.31us,208.28us,340.60us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,500100,4517,4.51s,664.28us,0.00ns,664.19us,7.47us,651.75us,720.94us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,500100,3778,4.51s,793.36us,2.00ns,794.20us,6.25us,786.05us,871.36us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,500100,8404,4.51s,352.26us,1.00ns,356.97us,13.88us,349.35us,406.16us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,1329,4.51s,2.26ms,0.00ns,2.26ms,6.60us,2.24ms,2.32ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,10268,4.51s,269.38us,0.00ns,292.14us,38.95us,269.25us,387.12us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,500100,14765,4.51s,202.84us,0.00ns,203.16us,2.95us,202.09us,271.03us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,500100,13308,4.51s,221.11us,0.00ns,225.40us,5.93us,221.09us,273.05us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,500100,14486,4.51s,206.77us,0.00ns,207.07us,1.45us,206.65us,253.70us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,500100,4683,4.56s,626.62us,0.00ns,640.34us,61.48us,583.82us,813.22us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,500100,3285,4.51s,910.81us,0.00ns,913.28us,6.47us,902.65us,0.95ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,500100,9767,4.51s,302.85us,0.00ns,307.15us,14.16us,284.35us,363.53us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,500100,2699,4.51s,1.10ms,0.00ns,1.11ms,38.92us,1.06ms,1.20ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,500100,11113,4.51s,269.20us,0.00ns,269.94us,5.74us,259.55us,410.17us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1001,1000000,627.11ms,81.00ns,0.00ns,82.00ns,8.00ns,78.00ns,1.83us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,827.97ms,132.00ns,0.00ns,136.00ns,12.00ns,127.00ns,1.91us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,839.46ms,130.00ns,0.00ns,133.00ns,11.00ns,126.00ns,2.19us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,1000000,576.59ms,66.00ns,0.00ns,67.00ns,8.00ns,62.00ns,2.19us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,532.44ms,35.00ns,0.00ns,36.00ns,24.00ns,31.00ns,13.17us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.38s,448.00ns,0.00ns,449.00ns,24.00ns,443.00ns,9.51us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.74s,624.00ns,0.00ns,625.00ns,26.00ns,609.00ns,10.68us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.28s,410.00ns,0.00ns,411.00ns,19.00ns,400.00ns,2.43us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,timeout: exceeded 10s,,0,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1001,1000000,577.03ms,44.00ns,0.00ns,45.00ns,27.00ns,41.00ns,19.10us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,526.52ms,41.00ns,0.00ns,42.00ns,7.00ns,37.00ns,2.34us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1001,1000000,526.47ms,31.00ns,0.00ns,31.00ns,6.00ns,27.00ns,2.16us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1001,1000000,577.30ms,28.00ns,0.00ns,29.00ns,7.00ns,25.00ns,3.20us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1001,1000000,1.38s,458.00ns,0.00ns,458.00ns,16.00ns,438.00ns,4.08us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1001,1000000,1.38s,458.00ns,0.00ns,458.00ns,16.00ns,454.00ns,2.34us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1001,1000000,3.24s,1.35us,0.00ns,1.35us,37.00ns,1.33us,9.96us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,3.64s,1.55us,0.00ns,1.55us,30.00ns,1.53us,8.01us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,1.94s,731.00ns,0.00ns,741.00ns,38.00ns,718.00ns,5.46us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,720032,4.84s,4.12us,0.00ns,4.14us,88.00ns,4.00us,11.81us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,1.73s,564.00ns,0.00ns,587.00ns,47.00ns,557.00ns,2.77us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.28s,417.00ns,0.00ns,418.00ns,20.00ns,412.00ns,2.35us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.38s,469.00ns,0.00ns,466.00ns,25.00ns,447.00ns,8.80us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.33s,425.00ns,0.00ns,426.00ns,19.00ns,418.00ns,2.48us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1001,1000000,4.44s,1.72us,0.00ns,1.78us,124.00ns,1.60us,6.93us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1001,1000000,3.84s,1.75us,0.00ns,1.76us,40.00ns,1.73us,10.15us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,1.73s,639.00ns,0.00ns,645.00ns,25.00ns,615.00ns,6.36us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1001,1000000,4.24s,2.23us,0.00ns,2.27us,95.00ns,2.13us,7.43us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1001,1000000,1.68s,571.00ns,0.00ns,575.00ns,22.00ns,546.00ns,5.07us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,550004,33381,4.56s,86.78us,0.00ns,89.83us,4.78us,84.32us,104.64us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,550004,28943,4.56s,103.57us,0.00ns,103.62us,2.53us,99.34us,121.19us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,550004,28998,4.56s,103.36us,0.00ns,103.42us,2.37us,99.36us,114.24us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,550004,19428,4.51s,154.19us,0.00ns,154.38us,769.00ns,154.00us,189.27us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,550004,16986,4.51s,174.32us,0.00ns,176.59us,4.65us,172.76us,194.40us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,550004,36127,4.56s,84.62us,0.00ns,83.00us,2.54us,75.00us,103.86us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,550004,8857,4.51s,338.69us,0.00ns,338.69us,1.47us,336.12us,386.22us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,550004,13675,4.51s,219.24us,0.00ns,219.35us,1.98us,217.51us,267.07us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,550004,8723,4.56s,348.64us,0.00ns,343.61us,20.36us,261.41us,407.60us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,550004,23556,4.51s,123.92us,0.00ns,127.32us,8.70us,122.82us,163.35us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,550004,23597,4.56s,123.78us,0.00ns,127.10us,8.81us,122.86us,159.28us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,550004,39190,4.56s,76.24us,0.00ns,76.51us,930.00ns,75.44us,87.63us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,550004,36343,4.56s,83.68us,0.00ns,82.51us,2.96us,75.69us,90.61us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,550004,46622,4.57s,66.40us,0.00ns,64.31us,3.14us,60.00us,77.45us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,550004,47490,4.57s,60.37us,0.00ns,63.13us,3.26us,60.01us,73.98us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,720057,61834,4.57s,43.02us,0.00ns,48.48us,11.90us,42.98us,84.58us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,720057,36058,4.57s,86.53us,0.00ns,83.16us,4.24us,77.86us,96.87us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,720057,36032,4.57s,86.54us,0.00ns,83.22us,4.22us,77.87us,92.41us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,84801,4.57s,35.20us,0.00ns,35.34us,374.00ns,35.13us,57.78us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,84168,4.56s,35.66us,0.00ns,35.61us,483.00ns,34.81us,42.88us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,720057,102006,4.57s,29.33us,0.00ns,29.38us,253.00ns,29.32us,39.36us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,720057,6749,4.51s,443.86us,0.00ns,444.52us,1.70us,441.26us,480.33us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,720057,42539,4.57s,69.84us,0.00ns,70.19us,2.84us,67.07us,90.88us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,720057,78031,4.57s,38.35us,0.00ns,38.41us,349.00ns,38.26us,53.89us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,720057,78431,4.57s,38.17us,0.00ns,38.22us,251.00ns,38.14us,48.28us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,720057,11732,4.51s,255.30us,0.00ns,255.69us,1.07us,255.15us,268.37us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,11728,4.51s,255.39us,0.00ns,255.78us,1.04us,255.25us,271.90us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,720057,136893,4.57s,21.94us,0.00ns,21.88us,286.00ns,21.47us,28.94us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,720057,137240,4.62s,21.99us,0.00ns,21.82us,392.00ns,21.40us,30.46us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,720057,2858,4.51s,1.04ms,1.00ns,1.05ms,15.42us,1.04ms,1.09ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,720057,613,4.51s,4.90ms,0.00ns,4.90ms,3.58us,4.89ms,4.92ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,720057,613,4.51s,4.90ms,0.00ns,4.90ms,4.04us,4.89ms,4.95ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,5400,4.51s,556.16us,0.00ns,555.52us,5.75us,509.65us,570.79us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,4833,4.51s,623.70us,0.00ns,620.81us,19.04us,577.67us,702.27us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,720057,6202,4.51s,488.34us,1.00ns,483.72us,11.78us,462.64us,556.96us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,720057,6767,4.51s,442.92us,0.00ns,443.30us,1.55us,441.18us,487.01us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,720057,2200,4.56s,1.39ms,4.00ns,1.36ms,31.90us,1.29ms,1.42ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,720057,4797,4.51s,624.92us,0.00ns,625.38us,1.45us,602.93us,641.01us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,720057,4805,4.51s,623.66us,0.00ns,624.43us,2.09us,604.41us,638.21us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,720057,2217,4.51s,1.36ms,0.00ns,1.35ms,10.84us,1.33ms,1.38ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,2228,4.51s,1.35ms,0.00ns,1.35ms,11.84us,1.32ms,1.37ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,720057,6486,4.51s,462.07us,0.00ns,462.51us,1.86us,439.28us,477.79us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,720057,6533,4.51s,462.46us,0.00ns,459.22us,9.23us,439.15us,556.62us\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,,201,4.56s,14.99ms,0.00ns,14.99ms,49.59us,14.88ms,15.30ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,,202,4.56s,14.67ms,539.00ns,14.87ms,524.04us,14.57ms,17.69ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,,217,4.56s,13.83ms,0.00ns,13.86ms,58.01us,13.79ms,14.07ms\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1000,32931,4.56s,90.62us,0.00ns,91.06us,1.42us,90.09us,101.60us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1000,28501,4.56s,105.10us,0.00ns,105.23us,0.95us,100.07us,114.83us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1000,37495,4.56s,79.92us,0.00ns,79.98us,813.00ns,76.37us,93.16us\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,806771,171,4.56s,17.64ms,0.00ns,17.65ms,8.55us,17.63ms,17.68ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,806771,170,4.56s,17.65ms,6.00ns,17.65ms,7.46us,17.64ms,17.68ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,806771,155,4.56s,19.42ms,0.00ns,19.42ms,27.98us,19.35ms,19.49ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,19756,4.51s,151.74us,1.00ns,151.82us,5.14us,142.73us,176.03us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,23689,4.51s,126.58us,0.00ns,126.60us,3.08us,121.91us,139.03us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,24059,4.56s,124.52us,0.00ns,124.66us,3.17us,119.79us,135.18us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,64833,4.56s,46.12us,0.00ns,46.24us,502.00ns,45.25us,55.51us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,170786,4.62s,17.24us,0.00ns,17.53us,574.00ns,16.93us,38.30us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,11713,4.51s,256.43us,0.00ns,256.11us,5.91us,228.53us,281.56us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7758,4.51s,386.09us,0.00ns,386.69us,1.70us,385.00us,422.67us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,11933,4.51s,251.58us,0.00ns,251.37us,1.36us,249.71us,272.08us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,timeout: exceeded 10s,,0,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,109288,4.56s,27.37us,0.00ns,27.42us,247.00ns,26.89us,46.22us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,171248,4.62s,17.38us,0.00ns,17.49us,432.00ns,16.79us,34.88us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,9321,4.51s,322.42us,0.00ns,321.84us,9.62us,238.51us,346.14us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,9641,4.51s,311.03us,0.00ns,311.13us,8.91us,280.43us,341.01us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,11367,4.51s,263.22us,0.00ns,263.90us,2.30us,258.85us,294.26us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,16815,4.51s,177.84us,0.00ns,178.38us,3.42us,172.18us,189.88us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,18037,4.51s,165.63us,0.00ns,166.30us,3.84us,158.22us,192.00us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,13724,4.51s,218.20us,0.00ns,218.57us,3.02us,211.78us,254.87us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,53079,4.56s,55.29us,0.00ns,56.48us,2.90us,53.32us,77.54us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,9993,4.51s,299.90us,0.00ns,300.20us,6.62us,277.44us,353.90us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7267,4.51s,412.37us,0.00ns,412.85us,1.72us,410.30us,445.79us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,10684,4.51s,278.30us,1.00ns,280.77us,4.13us,276.59us,326.35us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,15055,4.56s,198.74us,0.00ns,198.93us,3.89us,185.83us,213.91us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,26653,4.56s,112.02us,0.00ns,112.53us,1.83us,110.41us,135.02us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,55962,4.56s,53.11us,0.00ns,53.57us,2.04us,49.29us,70.18us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,7743,4.51s,387.77us,0.00ns,387.43us,6.20us,368.83us,420.32us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,8063,4.51s,372.04us,0.00ns,372.06us,6.81us,348.81us,402.00us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,7896,4.51s,379.43us,0.00ns,379.93us,1.93us,375.95us,404.74us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,1950,4.51s,1.54ms,1.00ns,1.54ms,7.85us,1.52ms,1.62ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3000,4.51s,0.99ms,5.00ns,1.00ms,27.43us,0.97ms,1.11ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,2538,4.51s,1.18ms,1.00ns,1.18ms,2.39us,1.18ms,1.21ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,6791,4.51s,434.73us,0.00ns,441.75us,24.88us,432.28us,562.87us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,3242,4.51s,917.52us,0.00ns,925.40us,20.38us,896.78us,1.01ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,2917,4.51s,1.03ms,0.00ns,1.03ms,6.22us,1.01ms,1.11ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,3033,4.51s,0.99ms,0.00ns,0.99ms,30.20us,827.79us,1.08ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,5856,4.56s,504.60us,4.00ns,511.96us,22.93us,495.31us,793.28us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,3066,4.51s,0.98ms,0.00ns,0.98ms,4.09us,0.97ms,1.00ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,7610,4.51s,390.60us,0.00ns,394.19us,18.27us,385.43us,497.50us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,2024,4.51s,1.47ms,6.00ns,1.48ms,40.79us,1.42ms,1.73ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,2872,4.51s,1.04ms,0.00ns,1.04ms,17.88us,0.99ms,1.13ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,14272,4.51s,210.05us,2.00ns,210.18us,2.18us,205.49us,239.22us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,18937,4.56s,157.11us,0.00ns,158.39us,3.82us,153.12us,173.02us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,19131,4.51s,155.95us,0.00ns,156.78us,3.74us,151.18us,179.84us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,48083,4.56s,62.24us,0.00ns,62.36us,624.00ns,60.90us,74.18us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,151025,4.56s,19.62us,0.00ns,19.83us,599.00ns,18.94us,31.68us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,6407,4.51s,467.73us,0.00ns,468.27us,10.53us,455.92us,563.95us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7777,4.51s,385.32us,0.00ns,385.76us,2.61us,382.96us,433.80us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,11903,4.51s,252.64us,0.00ns,252.01us,1.40us,250.55us,296.48us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,timeout: exceeded 10s,,0,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,90647,4.56s,32.94us,0.00ns,33.06us,359.00ns,32.53us,42.20us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,134571,4.56s,22.10us,0.00ns,22.26us,548.00ns,21.50us,29.04us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,5828,4.51s,514.16us,1.00ns,514.80us,2.89us,508.86us,537.11us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,6089,4.51s,493.14us,0.00ns,492.71us,5.02us,483.73us,512.00us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,10442,4.51s,287.05us,0.00ns,287.30us,2.41us,284.00us,311.68us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,9198,4.51s,324.69us,1.00ns,326.13us,5.18us,316.05us,346.97us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,9470,4.51s,315.90us,0.00ns,316.76us,4.40us,307.91us,337.84us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,19846,4.51s,150.87us,0.00ns,151.14us,1.62us,147.58us,173.78us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,62404,4.56s,47.20us,0.00ns,48.04us,1.99us,45.93us,63.56us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,5560,4.51s,538.45us,1.00ns,539.61us,6.75us,502.27us,590.19us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7377,4.51s,406.08us,0.00ns,406.64us,1.88us,404.23us,445.68us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,11198,4.51s,265.87us,0.00ns,267.87us,3.15us,263.84us,293.07us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,timeout: exceeded 10s,,0,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,38693,4.56s,77.48us,0.00ns,77.50us,876.00ns,75.88us,92.91us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,71534,4.56s,41.49us,0.00ns,41.90us,1.19us,40.25us,51.07us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,4909,4.51s,608.39us,0.00ns,611.10us,9.48us,596.19us,650.99us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,5269,4.51s,566.80us,0.00ns,569.35us,9.17us,554.59us,610.71us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,15118,4.51s,199.23us,0.00ns,198.41us,2.27us,193.54us,234.62us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,3500,4.51s,857.10us,7.00ns,857.25us,8.26us,831.19us,921.37us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,4799,4.51s,618.97us,0.00ns,625.13us,16.27us,601.41us,679.35us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,4953,4.51s,608.57us,0.00ns,605.68us,5.22us,593.85us,721.95us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,13428,4.51s,220.00us,0.00ns,223.39us,11.11us,218.96us,273.36us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,4826,4.51s,603.88us,0.00ns,621.62us,27.24us,595.13us,708.84us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,4201,4.51s,712.71us,0.00ns,714.17us,4.51us,703.05us,757.64us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,4400,4.51s,684.15us,1.00ns,681.90us,19.40us,536.28us,745.62us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,7895,4.56s,375.37us,0.00ns,379.67us,15.24us,362.37us,488.04us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,6002,4.51s,499.62us,0.00ns,499.84us,2.01us,495.87us,514.28us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,14646,4.51s,199.43us,0.00ns,204.81us,11.45us,198.60us,269.53us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,3474,4.51s,850.34us,7.00ns,863.54us,30.37us,824.00us,1.02ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,4731,4.51s,632.25us,0.00ns,634.10us,8.94us,610.84us,689.80us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,20969,4.51s,142.77us,0.00ns,143.04us,0.95us,141.46us,151.82us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,30871,4.56s,96.03us,0.00ns,97.15us,3.40us,93.12us,109.22us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,31392,4.56s,97.12us,0.00ns,95.53us,3.34us,90.69us,107.33us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,57164,4.56s,52.43us,0.00ns,52.45us,465.00ns,50.82us,62.39us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,140062,4.62s,21.09us,0.00ns,21.38us,728.00ns,20.28us,29.93us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,21632,4.51s,138.30us,0.00ns,138.65us,3.31us,131.44us,175.77us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7488,4.51s,399.82us,0.00ns,400.64us,1.97us,398.31us,451.68us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,11903,4.51s,251.40us,0.00ns,252.01us,1.37us,251.09us,293.86us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,timeout: exceeded 10s,,0,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,90595,4.57s,32.94us,0.00ns,33.08us,472.00ns,32.19us,56.99us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,149041,4.62s,19.94us,0.00ns,20.09us,571.00ns,19.36us,33.09us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,20723,4.52s,144.69us,0.00ns,144.73us,1.58us,139.24us,154.29us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,21511,4.52s,139.04us,0.00ns,139.43us,3.41us,132.40us,176.26us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,13527,4.52s,221.34us,0.00ns,221.75us,3.25us,214.27us,240.95us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,18086,4.51s,165.64us,1.00ns,165.85us,3.25us,160.40us,179.50us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,18802,4.51s,159.37us,0.00ns,159.53us,3.49us,152.89us,185.59us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,24467,4.51s,122.71us,0.00ns,122.58us,1.41us,117.76us,147.24us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,69236,4.56s,42.63us,0.00ns,43.29us,1.62us,41.50us,51.20us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,12825,4.51s,233.62us,0.00ns,233.89us,5.38us,220.80us,295.79us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7416,4.51s,403.79us,0.00ns,404.52us,1.86us,401.23us,431.92us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,11376,4.51s,262.89us,0.00ns,263.69us,1.92us,261.00us,303.43us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,32979,4.56s,90.37us,0.00ns,90.63us,1.67us,87.40us,114.02us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,42916,4.56s,69.86us,0.00ns,69.87us,0.99us,66.93us,87.19us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,77517,4.56s,37.68us,0.00ns,38.67us,1.62us,35.34us,50.58us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,10752,4.51s,279.03us,0.00ns,279.00us,3.59us,254.91us,294.25us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,11465,4.51s,261.85us,0.00ns,261.65us,3.85us,223.14us,279.64us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,31514,4.56s,94.77us,0.00ns,95.16us,1.84us,93.68us,118.47us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,7751,4.51s,386.78us,0.00ns,387.02us,4.12us,376.65us,414.02us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,9639,4.51s,310.45us,0.00ns,311.21us,6.20us,298.02us,334.87us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,10838,4.51s,275.77us,0.00ns,276.78us,4.39us,273.52us,308.02us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,24690,4.56s,120.53us,1.00ns,121.47us,4.61us,117.33us,208.85us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,6237,4.51s,467.63us,0.00ns,481.00us,24.12us,462.70us,535.71us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,6001,4.51s,498.93us,0.00ns,499.89us,2.91us,496.06us,545.63us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,7710,4.51s,389.87us,1.00ns,389.10us,7.64us,349.15us,437.04us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,19818,4.56s,149.85us,0.00ns,151.05us,5.04us,143.23us,179.88us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,13106,4.51s,227.72us,0.00ns,228.87us,4.10us,225.14us,256.43us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,26917,4.51s,111.32us,0.00ns,111.43us,3.46us,107.07us,145.48us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,5669,4.51s,527.85us,0.00ns,529.17us,7.03us,515.46us,580.56us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,6748,4.51s,443.84us,1.00ns,444.55us,3.98us,436.22us,501.14us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,76135,4.56s,38.96us,0.00ns,39.36us,2.85us,34.89us,52.31us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,42180,4.56s,70.59us,0.00ns,71.09us,3.30us,66.83us,85.43us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,42288,4.56s,74.18us,0.00ns,70.91us,3.67us,66.83us,81.07us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,221775,4.62s,13.52us,0.00ns,13.49us,146.00ns,13.24us,18.18us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,214463,4.62s,14.01us,0.00ns,13.96us,225.00ns,13.34us,18.81us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,9702,4.51s,308.60us,1.00ns,309.19us,7.50us,290.11us,364.01us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7937,4.51s,377.55us,0.00ns,377.96us,1.50us,376.15us,409.39us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12245,4.51s,244.51us,0.00ns,244.99us,2.73us,242.53us,291.13us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,304432,4.77s,9.43us,0.00ns,9.52us,322.00ns,9.29us,25.56us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,224598,4.62s,13.31us,0.00ns,13.33us,124.00ns,13.20us,20.43us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,224877,4.62s,13.29us,0.00ns,13.31us,126.00ns,13.17us,21.32us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,216079,4.62s,14.00us,0.00ns,13.85us,284.00ns,13.13us,18.28us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,217420,4.62s,13.76us,0.00ns,13.76us,304.00ns,13.12us,22.77us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,9276,4.51s,322.24us,2.00ns,323.40us,8.63us,301.83us,357.71us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,9460,4.51s,315.79us,4.00ns,317.10us,9.84us,295.44us,364.67us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,70794,4.56s,42.26us,0.00ns,42.34us,586.00ns,40.58us,51.98us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,33580,4.56s,90.98us,0.00ns,89.30us,3.18us,85.06us,101.72us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,33540,4.56s,91.07us,0.00ns,89.41us,3.24us,85.18us,99.44us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,209199,4.62s,14.44us,0.00ns,14.31us,333.00ns,13.63us,18.71us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,210288,4.62s,14.45us,0.00ns,14.23us,335.00ns,13.73us,21.61us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,17184,4.51s,174.90us,0.00ns,174.55us,6.92us,153.00us,221.73us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7931,4.51s,377.94us,0.00ns,378.25us,2.15us,376.21us,420.70us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12254,4.51s,244.49us,0.00ns,244.80us,2.80us,242.55us,294.51us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,15916,4.56s,187.47us,0.00ns,188.16us,5.87us,173.07us,205.32us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,219221,4.62s,13.64us,0.00ns,13.65us,105.00ns,13.49us,18.05us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,211833,4.62s,14.26us,0.00ns,14.13us,299.00ns,13.50us,36.68us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,181010,4.62s,16.67us,0.00ns,16.54us,456.00ns,15.68us,22.90us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,218057,4.62s,13.51us,0.00ns,13.72us,426.00ns,13.14us,27.18us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,14278,4.51s,209.61us,0.00ns,210.08us,8.42us,179.26us,246.98us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,14333,4.51s,208.84us,0.00ns,209.28us,8.19us,183.11us,240.44us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,57892,4.56s,51.68us,0.00ns,51.78us,429.00ns,51.19us,57.56us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,42137,4.56s,74.30us,0.00ns,71.16us,3.66us,66.87us,78.82us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,40712,4.56s,75.76us,0.00ns,73.66us,3.43us,68.23us,84.90us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,218699,4.62s,13.74us,0.00ns,13.68us,265.00ns,13.21us,18.05us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,222196,4.62s,13.31us,0.00ns,13.47us,256.00ns,13.18us,34.61us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,19314,4.51s,153.88us,1.00ns,155.29us,8.43us,136.03us,193.69us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7929,4.51s,377.61us,0.00ns,378.36us,3.75us,376.48us,426.89us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12243,4.51s,244.50us,0.00ns,245.03us,2.53us,242.54us,292.76us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,280355,4.77s,10.36us,0.00ns,10.36us,289.00ns,8.99us,21.29us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,217176,4.62s,13.87us,0.00ns,13.78us,245.00ns,13.33us,19.44us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,221149,4.62s,13.69us,0.00ns,13.54us,259.00ns,13.18us,19.95us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,187939,4.62s,15.73us,0.00ns,15.93us,334.00ns,15.58us,24.43us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,226080,4.62s,13.18us,0.00ns,13.24us,189.00ns,13.05us,21.13us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,16161,4.51s,186.31us,0.00ns,185.60us,7.01us,138.26us,222.13us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,16075,4.51s,187.06us,0.00ns,186.60us,7.92us,140.22us,229.67us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,12002,4.51s,249.66us,0.00ns,249.93us,1.33us,249.26us,303.16us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,20983,4.51s,141.46us,0.00ns,142.94us,4.09us,137.95us,163.46us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,20954,4.51s,142.19us,0.00ns,143.14us,3.95us,137.90us,166.49us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,217371,4.62s,13.65us,0.00ns,13.76us,256.00ns,13.31us,18.69us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,223681,4.62s,13.30us,0.00ns,13.38us,204.00ns,13.18us,22.26us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,6581,4.51s,453.74us,0.00ns,455.88us,8.97us,432.18us,494.13us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7843,4.51s,382.03us,0.00ns,382.47us,1.46us,380.89us,424.50us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12247,4.51s,244.56us,0.00ns,244.93us,2.43us,242.58us,292.81us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,3647,4.51s,794.93us,0.00ns,822.44us,45.53us,770.37us,929.70us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,220369,4.62s,13.71us,0.00ns,13.58us,246.00ns,13.18us,18.60us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,221965,4.62s,13.32us,0.00ns,13.48us,254.00ns,13.18us,22.19us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,224669,4.62s,13.20us,0.00ns,13.32us,242.00ns,13.06us,18.65us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,221274,4.62s,13.50us,0.00ns,13.53us,146.00ns,13.22us,22.17us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,6945,4.51s,432.20us,0.00ns,431.98us,7.62us,399.88us,479.87us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,6960,4.51s,431.25us,1.00ns,431.01us,7.85us,395.51us,468.77us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,526.99ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.07us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.05ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,1.92us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,526.94ms,23.00ns,0.00ns,23.00ns,5.00ns,20.00ns,2.14us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,526.80ms,27.00ns,0.00ns,27.00ns,5.00ns,24.00ns,2.31us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,526.48ms,17.00ns,0.00ns,18.00ns,3.00ns,15.00ns,1.58us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,476.45ms,13.00ns,0.00ns,13.00ns,4.00ns,11.00ns,2.08us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.94ms,25.00ns,0.00ns,25.00ns,6.00ns,22.00ns,2.48us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.20ms,22.00ns,0.00ns,22.00ns,6.00ns,20.00ns,2.35us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,165.00ns,0.00ns,167.00ns,14.00ns,161.00ns,7.18us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,526.35ms,26.00ns,0.00ns,26.00ns,5.00ns,23.00ns,2.31us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,527.04ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.00us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,526.88ms,17.00ns,0.00ns,17.00ns,27.00ns,15.00ns,18.19us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,526.50ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,3.02us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,526.81ms,27.00ns,0.00ns,27.00ns,6.00ns,25.00ns,3.53us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,526.73ms,27.00ns,0.00ns,27.00ns,5.00ns,25.00ns,1.83us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,526.66ms,22.00ns,0.00ns,23.00ns,4.00ns,21.00ns,1.97us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,526.90ms,29.00ns,0.00ns,29.00ns,6.00ns,27.00ns,1.91us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,526.91ms,23.00ns,0.00ns,23.00ns,6.00ns,20.00ns,2.25us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,526.98ms,26.00ns,0.00ns,26.00ns,7.00ns,23.00ns,2.95us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,526.69ms,17.00ns,0.00ns,18.00ns,5.00ns,15.00ns,2.26us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,476.46ms,13.00ns,0.00ns,13.00ns,20.00ns,11.00ns,19.58us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.53ms,25.00ns,0.00ns,25.00ns,5.00ns,23.00ns,2.09us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,526.60ms,22.00ns,0.00ns,22.00ns,5.00ns,20.00ns,1.97us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.48s,165.00ns,0.00ns,166.00ns,13.00ns,160.00ns,2.84us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,526.64ms,26.00ns,0.00ns,26.00ns,5.00ns,24.00ns,2.05us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,526.71ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.43us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,577.13ms,16.00ns,0.00ns,16.00ns,47.00ns,14.00ns,20.72us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,476.31ms,12.00ns,0.00ns,12.00ns,4.00ns,11.00ns,2.33us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,527.02ms,27.00ns,0.00ns,27.00ns,8.00ns,24.00ns,6.48us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,526.95ms,27.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.07us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,526.89ms,22.00ns,0.00ns,22.00ns,25.00ns,19.00ns,19.32us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,526.38ms,28.00ns,0.00ns,28.00ns,21.00ns,26.00ns,18.75us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,526.57ms,23.00ns,0.00ns,23.00ns,5.00ns,20.00ns,2.66us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.06ms,26.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.52us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,526.73ms,17.00ns,0.00ns,18.00ns,5.00ns,15.00ns,2.13us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,526.61ms,13.00ns,0.00ns,13.00ns,7.00ns,11.00ns,6.03us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.76ms,26.00ns,0.00ns,26.00ns,4.00ns,23.00ns,1.88us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,526.38ms,22.00ns,0.00ns,22.00ns,19.00ns,20.00ns,19.04us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.48s,162.00ns,0.00ns,163.00ns,14.00ns,158.00ns,8.37us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,476.47ms,26.00ns,0.00ns,26.00ns,6.00ns,24.00ns,2.51us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,527.08ms,23.00ns,0.00ns,23.00ns,31.00ns,21.00ns,20.17us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,476.39ms,14.00ns,0.00ns,14.00ns,11.00ns,12.00ns,10.03us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,527.18ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,2.61us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,526.77ms,24.00ns,0.00ns,24.00ns,6.00ns,21.00ns,2.41us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,526.97ms,24.00ns,0.00ns,24.00ns,4.00ns,21.00ns,2.45us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.04ms,23.00ns,0.00ns,23.00ns,13.00ns,19.00ns,11.74us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,526.53ms,28.00ns,0.00ns,28.00ns,4.00ns,26.00ns,1.85us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,526.56ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,1.82us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,578.03ms,28.00ns,0.00ns,28.00ns,7.00ns,25.00ns,2.36us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,526.77ms,17.00ns,0.00ns,18.00ns,6.00ns,16.00ns,2.42us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,476.60ms,19.00ns,0.00ns,19.00ns,4.00ns,16.00ns,2.17us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,537.61ms,27.00ns,0.00ns,27.00ns,14.00ns,24.00ns,11.15us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,537.58ms,22.00ns,0.00ns,22.00ns,6.00ns,20.00ns,2.46us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,186.00ns,0.00ns,192.00ns,18.00ns,175.00ns,7.83us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,526.64ms,27.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.18us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,532.22ms,23.00ns,0.00ns,23.00ns,12.00ns,21.00ns,11.08us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,532.08ms,14.00ns,0.00ns,14.00ns,3.00ns,12.00ns,2.38us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,537.41ms,12.00ns,0.00ns,12.00ns,45.00ns,10.00ns,20.87us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,526.79ms,25.00ns,0.00ns,25.00ns,16.00ns,22.00ns,15.21us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,527.06ms,25.00ns,0.00ns,25.00ns,5.00ns,22.00ns,2.53us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,26332,4.52s,114.62us,0.00ns,113.90us,2.12us,108.94us,146.00us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13616,4.51s,219.20us,0.00ns,220.31us,6.14us,207.64us,237.66us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13598,4.51s,219.40us,0.00ns,220.59us,6.77us,209.68us,240.98us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,214616,4.62s,13.88us,0.00ns,13.94us,247.00ns,13.59us,23.56us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,218884,4.62s,13.61us,0.00ns,13.67us,181.00ns,13.49us,22.44us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,13450,4.51s,223.23us,0.00ns,223.02us,1.80us,216.30us,273.51us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7947,4.51s,377.19us,0.00ns,377.49us,1.90us,374.56us,421.62us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,311686,4.77s,9.29us,0.00ns,9.30us,108.00ns,9.12us,16.46us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,203922,4.62s,14.79us,0.00ns,14.68us,252.00ns,13.84us,20.48us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,219539,4.62s,13.61us,0.00ns,13.63us,126.00ns,13.49us,21.25us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,68639,4.56s,42.73us,0.00ns,43.67us,2.51us,41.73us,62.28us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,66514,4.56s,44.71us,0.00ns,45.07us,1.56us,43.72us,63.67us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,13268,4.51s,225.85us,0.00ns,226.07us,1.45us,221.31us,242.21us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,13386,4.51s,224.75us,1.00ns,224.09us,2.47us,215.47us,260.67us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,526.90ms,26.00ns,0.00ns,26.00ns,6.00ns,24.00ns,2.81us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,526.92ms,26.00ns,0.00ns,26.00ns,7.00ns,23.00ns,3.22us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,527.10ms,25.00ns,0.00ns,25.00ns,6.00ns,22.00ns,2.35us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,579.06ms,34.00ns,0.00ns,34.00ns,6.00ns,31.00ns,2.15us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,526.53ms,19.00ns,0.00ns,19.00ns,6.00ns,16.00ns,3.29us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,476.25ms,12.00ns,0.00ns,12.00ns,40.00ns,10.00ns,24.41us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,526.92ms,31.00ns,0.00ns,31.00ns,13.00ns,28.00ns,11.99us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.48s,163.00ns,0.00ns,165.00ns,13.00ns,159.00ns,2.73us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,526.48ms,33.00ns,0.00ns,33.00ns,5.00ns,29.00ns,2.27us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,537.60ms,24.00ns,0.00ns,24.00ns,13.00ns,22.00ns,11.67us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,476.36ms,14.00ns,0.00ns,14.00ns,13.00ns,12.00ns,12.33us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,476.68ms,13.00ns,0.00ns,13.00ns,36.00ns,11.00ns,19.45us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,526.68ms,39.00ns,0.00ns,39.00ns,6.00ns,36.00ns,2.77us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,476.43ms,39.00ns,0.00ns,39.00ns,6.00ns,36.00ns,2.16us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,96645,4.57s,32.42us,0.00ns,31.00us,2.36us,26.67us,38.45us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,35602,4.56s,86.17us,0.00ns,84.23us,3.31us,79.98us,96.71us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,35479,4.56s,86.23us,0.00ns,84.52us,3.30us,80.10us,95.69us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,219739,4.62s,13.54us,0.00ns,13.62us,226.00ns,13.36us,22.12us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,220081,4.62s,13.58us,0.00ns,13.60us,135.00ns,13.44us,21.59us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,36281,4.56s,83.02us,0.00ns,82.65us,3.99us,73.40us,114.24us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7952,4.51s,377.12us,0.00ns,377.24us,1.92us,374.60us,426.75us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,12209,4.51s,245.59us,0.00ns,245.69us,3.69us,242.58us,295.82us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,timeout: exceeded 10s,,0,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,221995,4.62s,13.46us,0.00ns,13.48us,120.00ns,13.34us,18.09us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,222036,4.62s,13.46us,0.00ns,13.48us,144.00ns,13.33us,37.30us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,208390,4.62s,14.45us,0.00ns,14.36us,376.00ns,13.47us,104.63us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,207912,4.62s,14.54us,0.00ns,14.39us,356.00ns,13.59us,19.41us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,32148,4.56s,92.51us,0.00ns,93.28us,3.50us,87.97us,115.54us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,32457,4.56s,91.41us,0.00ns,92.39us,3.17us,87.77us,112.77us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,526.66ms,23.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.03us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,527.17ms,28.00ns,0.00ns,28.00ns,8.00ns,26.00ns,4.63us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,526.64ms,23.00ns,0.00ns,23.00ns,24.00ns,21.00ns,23.37us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.03ms,28.00ns,0.00ns,28.00ns,13.00ns,25.00ns,11.32us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,477.09ms,18.00ns,0.00ns,18.00ns,4.00ns,16.00ns,1.86us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,476.93ms,13.00ns,0.00ns,13.00ns,21.00ns,11.00ns,14.20us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,527.23ms,26.00ns,0.00ns,26.00ns,28.00ns,24.00ns,18.88us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,526.88ms,24.00ns,0.00ns,24.00ns,6.00ns,22.00ns,2.07us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.53s,167.00ns,0.00ns,169.00ns,10.00ns,163.00ns,2.46us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,527.00ms,27.00ns,0.00ns,28.00ns,6.00ns,24.00ns,2.51us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,526.82ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.48us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,526.45ms,17.00ns,0.00ns,17.00ns,22.00ns,15.00ns,19.24us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,477.15ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,1.98us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,526.69ms,31.00ns,0.00ns,31.00ns,7.00ns,28.00ns,2.14us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,526.98ms,31.00ns,0.00ns,31.00ns,5.00ns,28.00ns,2.16us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,87568,4.57s,33.73us,0.00ns,34.22us,1.49us,30.62us,48.01us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41196,4.56s,75.74us,0.00ns,72.79us,3.62us,68.47us,83.18us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41232,4.56s,75.67us,0.00ns,72.72us,3.61us,68.42us,82.11us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,212612,4.62s,13.95us,0.00ns,14.08us,271.00ns,13.63us,19.39us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,217635,4.62s,13.63us,0.00ns,13.75us,235.00ns,13.50us,24.50us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,15369,4.51s,194.31us,0.00ns,195.17us,5.13us,182.00us,239.41us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7950,4.51s,377.19us,0.00ns,377.37us,1.42us,374.63us,409.39us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12047,4.51s,249.28us,0.00ns,249.00us,0.99us,247.31us,291.90us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,168925,4.67s,17.40us,0.00ns,17.43us,165.00ns,17.12us,22.51us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,208703,4.62s,14.44us,0.00ns,14.34us,258.00ns,13.76us,21.76us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,216214,4.62s,13.67us,0.00ns,13.84us,257.00ns,13.51us,18.80us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,216122,4.62s,13.75us,0.00ns,13.85us,272.00ns,13.28us,23.99us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,218427,4.62s,13.72us,0.00ns,13.70us,189.00ns,13.28us,21.87us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,14845,4.51s,201.78us,0.00ns,202.06us,5.18us,187.80us,225.02us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,14788,4.51s,202.59us,1.00ns,202.84us,5.44us,187.73us,226.21us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,55757,4.56s,54.83us,0.00ns,53.77us,2.80us,46.67us,62.50us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41109,4.56s,75.84us,0.00ns,72.94us,3.65us,68.57us,85.89us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41265,4.56s,75.78us,0.00ns,72.66us,3.59us,68.54us,85.72us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,220892,4.62s,13.43us,0.00ns,13.55us,239.00ns,13.29us,21.40us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,223994,4.67s,13.33us,0.00ns,13.36us,149.00ns,13.21us,23.30us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,16286,4.51s,184.07us,1.00ns,184.18us,7.25us,161.46us,238.10us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7898,4.51s,377.84us,0.00ns,379.85us,7.58us,376.51us,430.38us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12269,4.51s,244.48us,0.00ns,244.50us,1.84us,242.56us,294.80us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,timeout: exceeded 10s,,0,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,222936,4.67s,13.40us,0.00ns,13.42us,134.00ns,13.27us,28.86us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,223744,4.62s,13.36us,0.00ns,13.38us,125.00ns,13.24us,26.16us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,225614,4.62s,13.25us,0.00ns,13.26us,128.00ns,13.12us,24.59us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,220446,4.62s,13.71us,0.00ns,13.58us,266.00ns,13.13us,18.09us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,13997,4.51s,214.37us,0.00ns,214.30us,8.09us,192.30us,239.81us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,13546,4.51s,221.49us,1.00ns,221.45us,9.47us,192.67us,257.73us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,178739,4.57s,16.24us,0.00ns,16.75us,1.78us,15.56us,27.69us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,33863,4.56s,86.27us,0.00ns,88.55us,3.19us,85.17us,105.03us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,33300,4.56s,91.40us,0.00ns,90.05us,3.42us,85.50us,104.97us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,203094,4.62s,14.82us,0.00ns,14.74us,296.00ns,13.92us,20.16us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,206985,4.62s,14.68us,0.00ns,14.46us,384.00ns,13.81us,22.14us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,24754,4.56s,120.79us,1.00ns,121.16us,6.23us,106.30us,149.60us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7951,4.51s,377.21us,0.00ns,377.32us,1.44us,374.59us,417.40us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,timeout: exceeded 10s,,0,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,204857,4.62s,14.76us,0.00ns,14.61us,330.00ns,13.93us,18.95us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,207432,4.62s,14.68us,0.00ns,14.43us,374.00ns,13.90us,19.29us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,136841,4.57s,21.18us,0.00ns,21.89us,2.11us,19.48us,30.48us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,133429,4.57s,21.71us,0.00ns,22.45us,1.91us,20.35us,31.43us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,23978,4.51s,123.49us,0.00ns,125.08us,9.07us,106.00us,167.90us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,24430,4.56s,121.78us,1.00ns,122.77us,8.78us,106.21us,169.96us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,161135,4.62s,18.56us,0.00ns,18.58us,153.00ns,18.48us,23.98us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,37413,4.56s,81.85us,0.00ns,80.15us,3.67us,74.88us,101.77us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,37837,4.56s,81.87us,0.00ns,79.25us,3.55us,74.81us,91.57us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,215582,4.62s,13.74us,0.00ns,13.88us,252.00ns,13.42us,18.24us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,231712,4.62s,12.86us,0.00ns,12.91us,208.00ns,12.54us,20.87us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,51167,4.56s,58.31us,0.00ns,58.59us,1.76us,54.77us,70.88us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7948,4.51s,377.12us,0.00ns,377.42us,1.45us,375.72us,424.40us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,timeout: exceeded 10s,,0,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,13290,4.51s,225.35us,0.00ns,225.70us,0.98us,225.13us,236.96us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,13321,4.51s,224.85us,0.00ns,225.19us,1.02us,224.79us,237.85us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,140097,4.62s,20.80us,0.00ns,21.38us,1.88us,19.42us,34.41us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,130740,4.57s,22.43us,0.00ns,22.91us,1.72us,20.50us,30.86us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,49693,4.56s,60.06us,0.00ns,60.34us,2.10us,54.46us,82.59us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,50197,4.56s,59.55us,0.00ns,59.73us,2.00us,54.98us,81.46us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,91921,4.56s,29.65us,0.00ns,32.60us,3.61us,29.55us,42.89us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41530,4.56s,75.24us,0.00ns,72.20us,3.63us,67.99us,82.63us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41875,4.56s,69.29us,0.00ns,71.61us,3.66us,67.92us,82.68us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,209225,4.62s,14.27us,0.00ns,14.31us,142.00ns,13.46us,22.31us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,240083,4.62s,12.44us,0.00ns,12.46us,146.00ns,11.67us,17.11us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,52990,4.57s,55.54us,0.00ns,56.57us,3.43us,53.68us,85.59us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7953,4.51s,377.14us,0.00ns,377.19us,1.02us,375.71us,419.77us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,timeout: exceeded 10s,,0,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,11793,4.51s,253.84us,0.00ns,254.37us,3.02us,252.86us,284.93us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,11883,4.51s,251.47us,0.00ns,252.44us,3.33us,250.95us,283.55us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,155186,4.62s,18.72us,0.00ns,19.30us,1.48us,17.73us,32.82us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,147387,4.57s,19.80us,0.00ns,20.32us,1.41us,18.87us,28.67us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,55774,4.56s,53.50us,0.00ns,53.75us,1.14us,51.60us,65.69us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,56339,4.56s,52.89us,0.00ns,53.21us,1.23us,50.93us,63.93us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,532.78ms,31.00ns,0.00ns,31.00ns,5.00ns,28.00ns,1.99us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,576.92ms,38.00ns,0.00ns,38.00ns,28.00ns,36.00ns,19.48us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,526.41ms,28.00ns,0.00ns,28.00ns,18.00ns,25.00ns,17.86us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.03ms,28.00ns,0.00ns,28.00ns,6.00ns,25.00ns,2.52us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,526.46ms,20.00ns,0.00ns,21.00ns,9.00ns,18.00ns,7.79us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,526.96ms,23.00ns,0.00ns,23.00ns,25.00ns,20.00ns,20.10us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.97ms,24.00ns,0.00ns,24.00ns,6.00ns,22.00ns,3.31us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,526.83ms,22.00ns,0.00ns,23.00ns,5.00ns,20.00ns,2.32us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,184.00ns,0.00ns,185.00ns,12.00ns,176.00ns,2.32us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,527.03ms,28.00ns,0.00ns,28.00ns,6.00ns,25.00ns,2.10us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,526.85ms,26.00ns,0.00ns,26.00ns,6.00ns,23.00ns,2.30us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.27ms,19.00ns,0.00ns,19.00ns,28.00ns,17.00ns,20.59us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,477.17ms,15.00ns,0.00ns,15.00ns,4.00ns,12.00ns,2.80us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,576.70ms,63.00ns,0.00ns,63.00ns,7.00ns,59.00ns,3.05us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,526.44ms,43.00ns,0.00ns,43.00ns,6.00ns,40.00ns,1.99us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,526.72ms,35.00ns,0.00ns,35.00ns,10.00ns,32.00ns,7.83us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.00ms,38.00ns,0.00ns,39.00ns,6.00ns,36.00ns,3.39us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,526.82ms,29.00ns,0.00ns,30.00ns,6.00ns,26.00ns,2.18us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.06ms,24.00ns,0.00ns,24.00ns,6.00ns,22.00ns,2.53us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.00ms,23.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.30us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,476.91ms,17.00ns,0.00ns,17.00ns,6.00ns,14.00ns,2.38us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.66ms,23.00ns,0.00ns,23.00ns,5.00ns,20.00ns,2.40us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,526.97ms,22.00ns,0.00ns,23.00ns,20.00ns,20.00ns,19.31us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,186.00ns,0.00ns,187.00ns,16.00ns,178.00ns,10.41us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,526.88ms,25.00ns,0.00ns,26.00ns,5.00ns,22.00ns,2.36us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,526.65ms,29.00ns,0.00ns,29.00ns,13.00ns,26.00ns,9.38us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,526.88ms,17.00ns,0.00ns,17.00ns,20.00ns,15.00ns,19.39us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,527.14ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,2.03us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,526.48ms,41.00ns,0.00ns,41.00ns,6.00ns,38.00ns,2.10us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,526.46ms,29.00ns,0.00ns,29.00ns,6.00ns,27.00ns,2.27us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,34275,4.56s,88.06us,0.00ns,87.49us,1.66us,82.67us,112.13us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13736,4.51s,217.36us,0.00ns,218.37us,5.69us,206.23us,235.84us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13746,4.51s,217.82us,0.00ns,218.23us,5.79us,204.85us,236.35us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,210747,4.62s,14.16us,0.00ns,14.20us,176.00ns,13.75us,21.22us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,219193,4.62s,13.63us,0.00ns,13.65us,138.00ns,13.51us,33.19us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,16209,4.51s,184.89us,0.00ns,185.05us,947.00ns,182.52us,214.58us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7949,4.51s,377.33us,0.00ns,377.42us,1.02us,374.65us,412.87us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,333848,4.77s,8.97us,0.00ns,8.65us,528.00ns,7.83us,14.96us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,181813,4.62s,16.23us,0.00ns,16.47us,329.00ns,16.06us,20.83us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,218126,4.62s,13.63us,0.00ns,13.72us,214.00ns,13.51us,35.83us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,87298,4.56s,33.85us,0.00ns,34.33us,2.05us,32.38us,55.59us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,83850,4.56s,35.50us,0.00ns,35.74us,1.29us,34.33us,50.95us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,15527,4.51s,189.32us,0.00ns,193.18us,9.72us,181.95us,226.79us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,15528,4.51s,193.30us,1.00ns,193.18us,5.38us,181.46us,209.57us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,19902,4.51s,150.90us,0.00ns,150.71us,1.52us,142.63us,167.34us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13632,4.51s,219.81us,1.00ns,220.04us,5.98us,208.10us,238.00us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13593,4.51s,220.15us,0.00ns,220.67us,5.78us,209.05us,237.45us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,217339,4.62s,13.73us,0.00ns,13.77us,174.00ns,13.56us,21.82us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,216857,4.62s,13.79us,0.00ns,13.80us,109.00ns,13.63us,21.87us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,10739,4.51s,279.13us,0.00ns,279.32us,1.46us,275.41us,321.59us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7948,4.51s,377.29us,0.00ns,377.47us,1.47us,374.53us,422.55us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,12191,4.51s,244.53us,0.00ns,246.07us,2.96us,242.55us,350.68us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,338654,4.82s,8.16us,0.00ns,8.53us,521.00ns,7.90us,28.21us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,217411,4.62s,13.66us,0.00ns,13.77us,228.00ns,13.53us,32.17us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,218971,4.62s,13.64us,0.00ns,13.67us,163.00ns,13.52us,32.52us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,214453,4.62s,13.93us,0.00ns,13.96us,141.00ns,13.77us,18.46us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,211968,4.62s,14.09us,0.00ns,14.12us,167.00ns,13.93us,35.90us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,10175,4.51s,295.12us,0.00ns,294.82us,3.33us,287.21us,310.57us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,10255,4.51s,293.26us,0.00ns,292.53us,2.98us,286.71us,314.47us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,526.52ms,39.00ns,0.00ns,39.00ns,6.00ns,37.00ns,2.98us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,526.63ms,33.00ns,0.00ns,33.00ns,14.00ns,30.00ns,12.33us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,526.54ms,29.00ns,0.00ns,29.00ns,6.00ns,27.00ns,2.25us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,526.53ms,38.00ns,0.00ns,38.00ns,4.00ns,35.00ns,1.70us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,526.90ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.39us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,577.13ms,29.00ns,0.00ns,30.00ns,6.00ns,26.00ns,2.70us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,526.77ms,31.00ns,0.00ns,31.00ns,6.00ns,28.00ns,2.44us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.53s,189.00ns,0.00ns,191.00ns,14.00ns,181.00ns,5.52us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,526.39ms,36.00ns,0.00ns,36.00ns,6.00ns,33.00ns,2.05us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,526.82ms,28.00ns,0.00ns,28.00ns,13.00ns,26.00ns,11.88us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,476.97ms,18.00ns,0.00ns,18.00ns,4.00ns,16.00ns,1.88us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,476.86ms,16.00ns,0.00ns,16.00ns,36.00ns,14.00ns,20.56us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,627.42ms,84.00ns,0.00ns,86.00ns,8.00ns,80.00ns,2.01us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,577.19ms,58.00ns,0.00ns,58.00ns,7.00ns,54.00ns,1.77us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,526.90ms,37.00ns,0.00ns,37.00ns,11.00ns,35.00ns,9.46us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,527.02ms,38.00ns,0.00ns,38.00ns,6.00ns,36.00ns,2.30us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,577.11ms,29.00ns,0.00ns,29.00ns,6.00ns,27.00ns,2.51us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,526.55ms,31.00ns,0.00ns,31.00ns,6.00ns,28.00ns,2.05us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,526.53ms,28.00ns,0.00ns,28.00ns,5.00ns,25.00ns,2.40us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,527.03ms,19.00ns,0.00ns,19.00ns,10.00ns,17.00ns,7.97us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,527.18ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,1.93us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,42,1000000,577.11ms,28.00ns,0.00ns,29.00ns,5.00ns,26.00ns,2.27us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.53s,193.00ns,0.00ns,195.00ns,10.00ns,185.00ns,2.00us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,476.68ms,32.00ns,0.00ns,32.00ns,6.00ns,29.00ns,2.55us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,526.58ms,32.00ns,0.00ns,33.00ns,5.00ns,30.00ns,1.92us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,526.72ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,2.29us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,476.35ms,15.00ns,0.00ns,15.00ns,13.00ns,13.00ns,12.74us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,577.07ms,53.00ns,0.00ns,53.00ns,7.00ns,49.00ns,1.97us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,526.26ms,36.00ns,0.00ns,36.00ns,6.00ns,32.00ns,1.99us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,139015,4.62s,21.56us,0.00ns,21.55us,1.24us,18.44us,44.65us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29634,4.56s,102.03us,0.00ns,101.20us,3.08us,97.00us,113.46us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,29473,4.56s,102.35us,0.00ns,101.76us,3.26us,96.66us,111.82us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,214009,4.62s,14.20us,0.00ns,13.98us,336.00ns,13.29us,18.14us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,223189,4.62s,13.20us,0.00ns,13.41us,324.00ns,12.96us,32.95us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,30774,4.56s,96.95us,0.00ns,97.45us,3.09us,92.06us,120.20us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7967,4.51s,376.34us,0.00ns,376.53us,1.43us,374.51us,424.17us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,timeout: exceeded 10s,,0,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,211710,4.62s,13.89us,0.00ns,14.14us,336.00ns,13.54us,19.63us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,218997,4.62s,13.52us,0.00ns,13.67us,292.00ns,13.37us,19.93us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,145277,4.62s,19.78us,0.00ns,20.62us,2.26us,18.43us,33.76us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,125615,4.57s,24.85us,0.00ns,23.85us,2.79us,19.98us,29.61us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,28266,4.56s,104.60us,0.00ns,106.10us,3.87us,100.78us,126.82us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,27363,4.56s,108.48us,0.00ns,109.60us,4.49us,101.10us,131.86us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,58351,4.56s,53.32us,0.00ns,51.38us,2.85us,46.89us,60.63us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29368,4.56s,102.84us,0.00ns,102.12us,2.97us,97.79us,112.74us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,29260,4.56s,103.07us,0.00ns,102.50us,2.96us,97.84us,114.25us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,224758,4.67s,13.28us,0.00ns,13.31us,153.00ns,13.14us,20.00us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,225770,4.62s,13.24us,0.00ns,13.26us,107.00ns,13.12us,26.94us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,20917,4.51s,144.09us,0.00ns,143.40us,6.01us,127.88us,177.74us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7945,4.51s,377.38us,0.00ns,377.59us,1.12us,375.96us,412.41us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,12258,4.51s,244.50us,0.00ns,244.72us,4.04us,242.56us,292.28us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,timeout: exceeded 10s,,0,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns,0.00ns\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,224771,4.62s,13.30us,0.00ns,13.32us,115.00ns,13.18us,17.06us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,218591,4.62s,13.68us,0.00ns,13.69us,129.00ns,13.31us,35.37us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,211755,4.62s,14.34us,0.00ns,14.13us,499.00ns,13.17us,18.43us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,214336,4.62s,13.67us,0.00ns,13.96us,519.00ns,13.19us,21.65us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,18394,4.51s,161.88us,1.00ns,163.07us,6.30us,140.76us,191.99us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,18516,4.51s,160.48us,1.00ns,161.99us,5.97us,140.94us,188.16us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,526.74ms,34.00ns,0.00ns,34.00ns,6.00ns,31.00ns,2.29us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,526.74ms,31.00ns,0.00ns,32.00ns,26.00ns,28.00ns,17.75us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,527.11ms,29.00ns,0.00ns,29.00ns,5.00ns,26.00ns,1.90us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.08ms,33.00ns,0.00ns,33.00ns,7.00ns,30.00ns,2.46us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,527.26ms,30.00ns,0.00ns,30.00ns,6.00ns,28.00ns,2.29us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,526.54ms,23.00ns,0.00ns,23.00ns,5.00ns,20.00ns,2.43us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,527.07ms,25.00ns,0.00ns,25.00ns,5.00ns,22.00ns,2.33us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.53s,191.00ns,0.00ns,192.00ns,14.00ns,181.00ns,4.42us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,526.53ms,30.00ns,0.00ns,30.00ns,6.00ns,26.00ns,2.28us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,526.68ms,28.00ns,0.00ns,29.00ns,12.00ns,26.00ns,10.93us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,476.72ms,16.00ns,0.00ns,17.00ns,5.00ns,15.00ns,2.35us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,527.19ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,3.28us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,627.02ms,76.00ns,0.00ns,78.00ns,76.00ns,72.00ns,74.95us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,576.98ms,49.00ns,0.00ns,50.00ns,11.00ns,46.00ns,7.90us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,526.79ms,35.00ns,0.00ns,35.00ns,7.00ns,32.00ns,2.20us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,527.10ms,37.00ns,0.00ns,38.00ns,7.00ns,35.00ns,1.93us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,527.06ms,28.00ns,0.00ns,28.00ns,5.00ns,24.00ns,2.27us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.05ms,26.00ns,0.00ns,26.00ns,7.00ns,24.00ns,2.47us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,526.61ms,27.00ns,0.00ns,28.00ns,5.00ns,25.00ns,2.83us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,529.22ms,20.00ns,0.00ns,20.00ns,15.00ns,17.00ns,13.92us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,527.17ms,22.00ns,0.00ns,22.00ns,24.00ns,20.00ns,20.19us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,476.76ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.52us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.53s,188.00ns,0.00ns,190.00ns,14.00ns,181.00ns,4.11us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,527.14ms,27.00ns,0.00ns,27.00ns,7.00ns,24.00ns,2.90us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,526.98ms,32.00ns,0.00ns,33.00ns,11.00ns,30.00ns,9.04us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,526.54ms,18.00ns,0.00ns,18.00ns,5.00ns,16.00ns,2.51us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,476.52ms,14.00ns,0.00ns,14.00ns,10.00ns,12.00ns,9.12us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,577.35ms,47.00ns,0.00ns,47.00ns,12.00ns,44.00ns,9.19us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,526.75ms,33.00ns,0.00ns,33.00ns,6.00ns,31.00ns,2.38us\n"
  },
  {
    "path": "benchmarks/record/x86_64/2023-08-24.csv",
    "content": "name,model,rebar_version,engine,engine_version,err,haystack_len,iters,total,median,mad,mean,stddev,min,max\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,15704,4.51s,201.24us,0.00ns,191.00us,13.09us,173.92us,210.58us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,16111,4.51s,181.46us,0.00ns,186.18us,6.07us,179.83us,202.82us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,17683,4.51s,166.51us,0.00ns,169.62us,5.07us,165.75us,188.30us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,6365,4.51s,470.73us,0.00ns,471.35us,3.86us,464.38us,510.99us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,7250,4.51s,414.63us,0.00ns,413.78us,10.87us,397.89us,486.24us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,13901,4.56s,215.01us,0.00ns,215.48us,1.24us,213.92us,236.18us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,16250,4.51s,184.67us,0.00ns,184.58us,1.11us,182.50us,197.15us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,17562,4.51s,173.53us,0.00ns,170.80us,5.39us,160.76us,185.18us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,17691,4.51s,174.43us,0.00ns,169.55us,6.19us,161.40us,182.90us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,7097,4.51s,417.62us,0.00ns,422.69us,15.30us,402.61us,488.52us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,15832,4.51s,187.03us,0.00ns,189.47us,4.91us,184.62us,205.56us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,9695,4.51s,309.55us,0.00ns,309.41us,6.93us,294.86us,341.54us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,3394,4.51s,882.21us,2.00ns,883.89us,7.46us,874.68us,934.82us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,4871,4.51s,609.93us,0.00ns,615.92us,24.52us,592.60us,718.07us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,9203,4.56s,325.31us,0.00ns,325.66us,1.19us,324.19us,341.88us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,9132,4.51s,331.51us,0.00ns,328.50us,5.64us,319.19us,345.99us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,9705,4.51s,320.79us,0.00ns,309.12us,12.16us,294.91us,331.47us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,8287,4.51s,353.45us,0.00ns,362.00us,11.99us,351.90us,390.79us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,6150,4.51s,485.53us,0.00ns,487.83us,4.63us,479.64us,516.75us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,2228,4.51s,1.34ms,3.00ns,1.35ms,11.06us,1.33ms,1.40ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,3607,4.51s,829.99us,0.00ns,831.73us,4.84us,824.07us,876.17us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,6818,4.56s,439.17us,0.00ns,439.70us,1.50us,437.28us,451.92us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,5600,4.51s,533.86us,0.00ns,535.74us,3.55us,527.54us,552.55us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,6068,4.51s,501.70us,0.00ns,494.39us,10.74us,477.28us,518.32us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,5547,4.51s,532.15us,0.00ns,540.85us,12.57us,527.67us,566.91us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,832.50ms,186.00ns,0.00ns,186.00ns,14.00ns,182.00ns,6.57us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,829.88ms,187.00ns,0.00ns,188.00ns,13.00ns,184.00ns,5.39us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,830.41ms,172.00ns,0.00ns,172.00ns,11.00ns,168.00ns,2.53us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,779.63ms,143.00ns,0.00ns,144.00ns,11.00ns,138.00ns,2.76us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,829.89ms,160.00ns,0.00ns,161.00ns,18.00ns,153.00ns,12.76us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.78s,293.00ns,0.00ns,295.00ns,16.00ns,285.00ns,2.36us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,830.55ms,189.00ns,0.00ns,190.00ns,20.00ns,185.00ns,11.96us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,829.90ms,168.00ns,0.00ns,169.00ns,11.00ns,165.00ns,1.94us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,830.22ms,170.00ns,0.00ns,170.00ns,11.00ns,166.00ns,1.96us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,779.67ms,158.00ns,0.00ns,159.00ns,13.00ns,153.00ns,2.43us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,880.61ms,207.00ns,0.00ns,207.00ns,13.00ns,203.00ns,2.24us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,1.13s,333.00ns,0.00ns,332.00ns,26.00ns,315.00ns,19.07us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,0.98s,263.00ns,0.00ns,264.00ns,19.00ns,257.00ns,10.01us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,0.98s,212.00ns,0.00ns,216.00ns,20.00ns,204.00ns,1.99us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,2.03s,436.00ns,0.00ns,437.00ns,24.00ns,428.00ns,9.46us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,1.13s,337.00ns,0.00ns,337.00ns,23.00ns,332.00ns,17.48us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,1.13s,324.00ns,0.00ns,324.00ns,17.00ns,314.00ns,4.71us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,1.23s,375.00ns,0.00ns,376.00ns,22.00ns,367.00ns,12.05us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,1.48s,497.00ns,0.00ns,498.00ns,20.00ns,485.00ns,2.31us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,1.08s,303.00ns,0.00ns,304.00ns,17.00ns,289.00ns,2.15us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.03s,322.00ns,0.00ns,322.00ns,17.00ns,316.00ns,2.11us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,2.33s,584.00ns,0.00ns,586.00ns,23.00ns,574.00ns,2.62us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,1.58s,556.00ns,0.00ns,556.00ns,21.00ns,543.00ns,3.41us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,1.58s,512.00ns,0.00ns,512.00ns,15.00ns,502.00ns,7.00us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.63s,569.00ns,0.00ns,570.00ns,21.00ns,556.00ns,4.58us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,579.15ms,50.00ns,0.00ns,50.00ns,7.00ns,47.00ns,2.52us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,529.31ms,49.00ns,0.00ns,49.00ns,27.00ns,47.00ns,18.75us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,528.49ms,45.00ns,0.00ns,45.00ns,14.00ns,43.00ns,12.37us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,528.64ms,36.00ns,0.00ns,37.00ns,28.00ns,31.00ns,21.15us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,528.99ms,25.00ns,0.00ns,25.00ns,11.00ns,21.00ns,10.60us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.58s,181.00ns,0.00ns,182.00ns,12.00ns,175.00ns,2.16us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,579.43ms,55.00ns,0.00ns,55.00ns,7.00ns,53.00ns,2.28us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,578.95ms,45.00ns,0.00ns,45.00ns,7.00ns,42.00ns,2.53us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,578.78ms,46.00ns,0.00ns,46.00ns,6.00ns,43.00ns,2.35us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,528.57ms,24.00ns,0.00ns,25.00ns,6.00ns,21.00ns,2.24us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,529.23ms,47.00ns,0.00ns,48.00ns,9.00ns,44.00ns,5.95us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,708502,4.88s,4.20us,0.00ns,4.20us,75.00ns,4.12us,13.70us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,717713,4.83s,4.14us,0.00ns,4.15us,63.00ns,4.09us,10.55us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,698671,4.83s,4.28us,0.00ns,4.26us,89.00ns,4.10us,13.76us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,138382,4.57s,21.71us,0.00ns,21.64us,193.00ns,21.48us,28.42us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,26178,4.56s,114.37us,0.00ns,114.57us,1.08us,114.34us,139.51us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,388649,4.87s,7.36us,0.00ns,7.39us,181.00ns,7.12us,17.64us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,684530,4.88s,4.34us,0.00ns,4.35us,69.00ns,4.17us,11.27us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,718110,4.88s,4.14us,0.00ns,4.15us,63.00ns,4.10us,10.18us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,710298,4.88s,4.15us,0.00ns,4.19us,87.00ns,4.10us,15.17us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,26065,4.56s,114.38us,0.00ns,115.07us,3.41us,114.35us,142.54us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,683762,4.88s,4.34us,0.00ns,4.36us,80.00ns,4.28us,10.70us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,569739,4.78s,5.26us,0.00ns,5.23us,75.00ns,5.14us,15.72us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,77512,4.56s,38.19us,0.00ns,38.67us,667.00ns,38.16us,48.51us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,17462,4.51s,171.57us,0.00ns,171.78us,798.00ns,171.53us,206.43us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,258082,4.77s,11.48us,0.00ns,11.29us,274.00ns,10.91us,19.22us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,539745,4.73s,5.23us,0.00ns,5.53us,518.00ns,5.18us,11.70us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,574724,4.78s,5.17us,0.00ns,5.19us,118.00ns,5.11us,14.52us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,577070,4.83s,5.16us,0.00ns,5.17us,69.00ns,5.13us,14.29us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,388571,4.72s,7.68us,0.00ns,7.69us,96.00ns,7.64us,18.44us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,53038,4.56s,57.22us,0.00ns,56.52us,1.90us,55.09us,73.78us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,13096,4.51s,228.75us,0.00ns,229.06us,1.01us,228.71us,258.69us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,187471,4.67s,15.60us,0.00ns,15.67us,187.00ns,15.43us,21.64us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,389252,4.67s,7.66us,0.00ns,7.67us,95.00ns,7.64us,24.29us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,389391,4.67s,7.66us,0.00ns,7.67us,87.00ns,7.62us,13.61us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,389344,4.72s,7.66us,0.00ns,7.67us,91.00ns,7.61us,12.52us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,527.39ms,14.00ns,0.00ns,15.00ns,17.00ns,12.00ns,16.26us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,527.52ms,15.00ns,0.00ns,15.00ns,25.00ns,13.00ns,14.44us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,527.58ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.41us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,527.57ms,35.00ns,0.00ns,36.00ns,26.00ns,31.00ns,17.59us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,778.85ms,144.00ns,0.00ns,145.00ns,11.00ns,141.00ns,2.54us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.48s,160.00ns,0.00ns,161.00ns,17.00ns,156.00ns,10.11us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,532.36ms,15.00ns,0.00ns,15.00ns,14.00ns,12.00ns,13.25us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,477.13ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.26us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,527.22ms,14.00ns,0.00ns,15.00ns,15.00ns,12.00ns,13.75us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,778.36ms,144.00ns,0.00ns,145.00ns,12.00ns,141.00ns,5.45us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,527.53ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.26us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,627.86ms,19.00ns,0.00ns,19.00ns,20.00ns,17.00ns,19.05us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,627.47ms,60.00ns,0.00ns,61.00ns,73.00ns,56.00ns,72.95us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,928.67ms,208.00ns,0.00ns,209.00ns,13.00ns,205.00ns,2.13us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.53s,169.00ns,0.00ns,170.00ns,14.00ns,159.00ns,7.59us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,527.54ms,19.00ns,0.00ns,20.00ns,86.00ns,17.00ns,85.91us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,477.22ms,18.00ns,0.00ns,18.00ns,3.00ns,16.00ns,2.14us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,527.30ms,19.00ns,0.00ns,19.00ns,3.00ns,16.00ns,2.06us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,476.98ms,22.00ns,0.00ns,22.00ns,6.00ns,20.00ns,2.80us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,628.01ms,79.00ns,0.00ns,79.00ns,8.00ns,70.00ns,2.52us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,0.98s,272.00ns,0.00ns,273.00ns,13.00ns,269.00ns,2.63us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.48s,169.00ns,0.00ns,170.00ns,16.00ns,163.00ns,10.75us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,527.15ms,22.00ns,0.00ns,23.00ns,5.00ns,20.00ns,2.40us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,477.36ms,21.00ns,0.00ns,21.00ns,5.00ns,19.00ns,2.12us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,527.69ms,21.00ns,0.00ns,21.00ns,4.00ns,19.00ns,1.91us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,477.59ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.12us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,477.29ms,13.00ns,0.00ns,13.00ns,19.00ns,11.00ns,19.10us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,477.55ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.40us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,476.76ms,15.00ns,0.00ns,15.00ns,6.00ns,13.00ns,2.55us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,527.13ms,26.00ns,0.00ns,27.00ns,6.00ns,21.00ns,1.96us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.53s,156.00ns,0.00ns,157.00ns,17.00ns,152.00ns,13.41us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,477.11ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.28us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,477.21ms,12.00ns,0.00ns,12.00ns,2.00ns,10.00ns,1.73us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,477.33ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,1.73us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,527.23ms,23.00ns,0.00ns,23.00ns,17.00ns,21.00ns,11.19us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,477.06ms,12.00ns,0.00ns,12.00ns,32.00ns,10.00ns,20.05us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,477.80ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.30us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,527.21ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,2.18us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,527.09ms,36.00ns,0.00ns,35.00ns,6.00ns,28.00ns,1.92us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.48s,156.00ns,0.00ns,157.00ns,11.00ns,152.00ns,2.22us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,476.92ms,14.00ns,0.00ns,14.00ns,15.00ns,12.00ns,13.96us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,527.56ms,13.00ns,0.00ns,13.00ns,5.00ns,11.00ns,2.18us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,476.98ms,15.00ns,0.00ns,14.00ns,4.00ns,11.00ns,2.35us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,477.53ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,1.90us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,527.66ms,18.00ns,0.00ns,18.00ns,5.00ns,16.00ns,3.31us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,577.47ms,44.00ns,0.00ns,44.00ns,7.00ns,41.00ns,2.24us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.53s,158.00ns,0.00ns,159.00ns,13.00ns,154.00ns,7.64us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,477.54ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,2.08us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,527.34ms,13.00ns,0.00ns,14.00ns,31.00ns,11.00ns,20.66us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,527.05ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.34us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,,1000000,477.27ms,11.00ns,0.00ns,11.00ns,3.00ns,9.00ns,2.71us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,,1000000,477.47ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,1.96us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,,1000000,477.48ms,11.00ns,0.00ns,11.00ns,3.00ns,9.00ns,1.90us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,,1000000,477.75ms,11.00ns,0.00ns,11.00ns,2.00ns,9.00ns,1.71us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,,1000000,477.42ms,10.00ns,0.00ns,10.00ns,5.00ns,9.00ns,4.05us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,,1000000,1.53s,155.00ns,0.00ns,156.00ns,11.00ns,151.00ns,2.17us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,,1000000,476.82ms,11.00ns,0.00ns,11.00ns,3.00ns,9.00ns,2.05us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,,1000000,477.46ms,10.00ns,0.00ns,10.00ns,15.00ns,8.00ns,14.12us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,,1000000,477.46ms,10.00ns,0.00ns,10.00ns,21.00ns,8.00ns,20.69us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,,1000000,477.54ms,10.00ns,0.00ns,10.00ns,4.00ns,8.00ns,2.60us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,,1000000,477.60ms,10.00ns,0.00ns,10.00ns,15.00ns,9.00ns,15.17us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,,1000000,477.50ms,11.00ns,0.00ns,12.00ns,4.00ns,9.00ns,2.20us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,,1000000,477.54ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.42us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,,1000000,477.61ms,11.00ns,0.00ns,11.00ns,3.00ns,9.00ns,1.89us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,,1000000,1.48s,156.00ns,0.00ns,158.00ns,12.00ns,152.00ns,4.44us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,,1000000,477.60ms,11.00ns,0.00ns,12.00ns,5.00ns,9.00ns,2.21us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,,1000000,527.71ms,10.00ns,0.00ns,11.00ns,39.00ns,9.00ns,20.92us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,,1000000,477.49ms,10.00ns,0.00ns,10.00ns,5.00ns,9.00ns,2.14us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,,1000000,477.04ms,12.00ns,0.00ns,12.00ns,18.00ns,10.00ns,16.90us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,,1000000,477.56ms,11.00ns,0.00ns,11.00ns,5.00ns,9.00ns,2.42us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,,1000000,477.46ms,10.00ns,0.00ns,10.00ns,13.00ns,9.00ns,12.18us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,,1000000,1.48s,156.00ns,0.00ns,157.00ns,11.00ns,152.00ns,2.23us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,,1000000,577.70ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.20us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,,1000000,527.52ms,10.00ns,0.00ns,10.00ns,18.00ns,9.00ns,15.04us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,,1000000,477.19ms,10.00ns,0.00ns,10.00ns,4.00ns,9.00ns,2.29us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,587800,4.78s,5.02us,0.00ns,5.07us,111.00ns,4.95us,11.12us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,591971,4.83s,5.01us,0.00ns,5.04us,96.00ns,4.93us,12.29us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,597181,4.83s,4.98us,0.00ns,4.99us,73.00ns,4.92us,12.22us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,131924,4.57s,22.65us,0.00ns,22.71us,334.00ns,22.58us,44.16us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,25831,4.51s,115.69us,0.00ns,116.11us,1.30us,115.25us,144.11us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,340816,4.82s,8.14us,0.00ns,8.46us,455.00ns,7.95us,14.86us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,581964,4.78s,5.09us,0.00ns,5.12us,112.00ns,4.96us,11.58us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,601490,4.83s,4.95us,0.00ns,4.96us,71.00ns,4.88us,13.54us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,600588,4.78s,4.96us,0.00ns,4.96us,78.00ns,4.89us,25.73us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,569299,4.83s,5.30us,0.00ns,5.24us,148.00ns,4.96us,27.89us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,363104,4.67s,7.85us,0.00ns,8.23us,492.00ns,7.70us,23.10us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,70205,4.56s,42.59us,0.00ns,42.70us,467.00ns,42.40us,125.27us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,17163,4.51s,174.42us,0.00ns,174.76us,1.12us,173.71us,204.25us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,220884,4.72s,13.21us,0.00ns,13.25us,236.00ns,13.03us,24.08us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,383148,4.72s,7.79us,0.00ns,7.80us,104.00ns,7.62us,16.05us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,365025,4.72s,7.69us,0.00ns,8.19us,615.00ns,7.58us,31.04us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,364396,4.72s,7.66us,0.00ns,8.20us,659.00ns,7.55us,13.04us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,278230,4.67s,10.60us,0.00ns,10.75us,306.00ns,10.50us,32.54us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,49491,4.56s,60.24us,0.00ns,60.58us,711.00ns,59.56us,75.34us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,12923,4.51s,231.56us,0.00ns,232.13us,2.73us,231.49us,284.27us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,158192,4.67s,18.59us,0.00ns,18.63us,194.00ns,18.50us,42.29us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,264793,4.62s,11.43us,0.00ns,11.29us,299.00ns,10.75us,17.46us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,267302,4.67s,11.48us,0.00ns,11.19us,392.00ns,10.67us,16.72us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,270109,4.62s,10.80us,0.00ns,11.07us,432.00ns,10.72us,17.17us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,527.57ms,19.00ns,0.00ns,19.00ns,4.00ns,17.00ns,1.90us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,527.60ms,19.00ns,0.00ns,19.00ns,4.00ns,17.00ns,1.72us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,577.90ms,19.00ns,0.00ns,19.00ns,5.00ns,16.00ns,2.38us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,527.54ms,36.00ns,0.00ns,36.00ns,19.00ns,33.00ns,18.30us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,778.90ms,152.00ns,0.00ns,153.00ns,14.00ns,146.00ns,7.06us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.54s,161.00ns,0.00ns,163.00ns,15.00ns,157.00ns,8.16us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,527.45ms,20.00ns,0.00ns,20.00ns,5.00ns,17.00ns,2.68us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,527.66ms,18.00ns,0.00ns,19.00ns,6.00ns,16.00ns,2.61us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,529.32ms,19.00ns,0.00ns,19.00ns,5.00ns,16.00ns,2.56us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,778.65ms,153.00ns,0.00ns,154.00ns,17.00ns,146.00ns,11.56us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,530.87ms,20.00ns,0.00ns,20.00ns,20.00ns,17.00ns,19.03us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,527.64ms,28.00ns,0.00ns,28.00ns,5.00ns,25.00ns,2.48us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,587.90ms,60.00ns,0.00ns,59.00ns,8.00ns,53.00ns,2.53us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,929.40ms,223.00ns,0.00ns,223.00ns,16.00ns,216.00ns,6.73us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.53s,173.00ns,0.00ns,174.00ns,12.00ns,167.00ns,1.84us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,527.57ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.53us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,539.33ms,29.00ns,0.00ns,29.00ns,14.00ns,26.00ns,12.14us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,527.60ms,28.00ns,0.00ns,28.00ns,6.00ns,25.00ns,2.88us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,577.34ms,37.00ns,0.00ns,38.00ns,10.00ns,33.00ns,8.01us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,627.63ms,92.00ns,0.00ns,92.00ns,10.00ns,75.00ns,3.56us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.03s,285.00ns,0.00ns,286.00ns,16.00ns,281.00ns,2.96us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.58s,185.00ns,0.00ns,186.00ns,12.00ns,177.00ns,3.01us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,577.49ms,38.00ns,0.00ns,38.00ns,20.00ns,34.00ns,18.30us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,527.57ms,37.00ns,0.00ns,37.00ns,6.00ns,33.00ns,2.38us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,527.18ms,37.00ns,0.00ns,37.00ns,7.00ns,33.00ns,2.11us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,478.17ms,15.00ns,0.00ns,15.00ns,27.00ns,13.00ns,20.71us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,527.37ms,17.00ns,0.00ns,17.00ns,6.00ns,15.00ns,2.20us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,476.93ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,2.20us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,527.47ms,16.00ns,0.00ns,16.00ns,5.00ns,13.00ns,2.78us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,527.46ms,30.00ns,0.00ns,27.00ns,8.00ns,21.00ns,2.82us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.48s,158.00ns,0.00ns,159.00ns,12.00ns,153.00ns,2.39us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,477.16ms,14.00ns,0.00ns,14.00ns,1.00ns,12.00ns,313.00ns\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,477.48ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,2.12us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,477.12ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,2.48us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,527.36ms,23.00ns,0.00ns,23.00ns,6.00ns,21.00ns,2.18us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,477.66ms,14.00ns,0.00ns,14.00ns,27.00ns,12.00ns,15.86us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,527.45ms,20.00ns,0.00ns,20.00ns,5.00ns,18.00ns,3.05us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,527.40ms,19.00ns,0.00ns,20.00ns,18.00ns,17.00ns,14.50us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,527.62ms,36.00ns,0.00ns,35.00ns,6.00ns,28.00ns,1.81us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.53s,160.00ns,0.00ns,161.00ns,10.00ns,156.00ns,1.96us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,527.90ms,20.00ns,0.00ns,20.00ns,5.00ns,18.00ns,2.47us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,477.97ms,20.00ns,0.00ns,20.00ns,6.00ns,18.00ns,3.52us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,527.77ms,19.00ns,0.00ns,19.00ns,6.00ns,17.00ns,3.07us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,527.51ms,29.00ns,0.00ns,29.00ns,15.00ns,27.00ns,13.41us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,527.25ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.61us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,577.51ms,43.00ns,0.00ns,44.00ns,11.00ns,41.00ns,8.29us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.53s,165.00ns,0.00ns,166.00ns,12.00ns,158.00ns,2.02us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,527.47ms,25.00ns,0.00ns,25.00ns,6.00ns,21.00ns,2.79us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,527.62ms,28.00ns,0.00ns,28.00ns,4.00ns,26.00ns,1.83us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,477.53ms,22.00ns,0.00ns,22.00ns,6.00ns,19.00ns,3.28us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,81612,4.57s,38.02us,0.00ns,36.72us,2.24us,33.13us,63.04us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,56820,4.56s,52.00us,0.00ns,52.76us,1.41us,51.10us,78.12us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,58482,4.56s,50.66us,0.00ns,51.26us,1.31us,49.46us,77.12us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,35319,4.56s,84.20us,0.00ns,84.90us,2.02us,82.97us,112.83us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,18282,4.51s,156.03us,0.00ns,164.06us,12.33us,154.14us,207.78us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,51462,4.56s,57.89us,0.00ns,57.97us,754.00ns,56.49us,83.65us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,50737,4.56s,59.02us,0.00ns,59.09us,568.00ns,57.27us,75.65us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,63728,4.56s,47.30us,0.00ns,47.04us,1.36us,44.38us,71.37us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,64662,4.56s,46.22us,0.00ns,46.36us,794.00ns,45.11us,74.91us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,18655,4.51s,158.78us,0.00ns,160.78us,7.74us,154.61us,220.03us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,58220,4.56s,51.39us,0.00ns,51.49us,502.00ns,50.51us,77.29us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,25270,4.56s,118.56us,0.00ns,118.69us,821.00ns,116.20us,141.09us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,15860,4.51s,189.63us,1.00ns,189.13us,1.99us,184.57us,228.86us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,11322,4.51s,256.91us,0.00ns,264.95us,11.27us,250.55us,327.81us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,20948,4.56s,144.20us,0.00ns,142.89us,2.67us,137.82us,164.84us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,21972,4.51s,139.02us,0.00ns,136.51us,4.16us,129.43us,153.14us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,25267,4.56s,114.14us,0.00ns,118.70us,5.54us,112.77us,147.20us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,25544,4.56s,114.59us,0.00ns,117.41us,5.21us,112.76us,146.52us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,18866,4.51s,158.08us,0.00ns,158.99us,3.77us,151.79us,186.94us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,9963,4.51s,300.79us,0.00ns,301.09us,2.08us,297.98us,346.10us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,8608,4.51s,346.94us,0.00ns,348.51us,4.33us,345.92us,403.77us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,15936,4.56s,187.16us,0.00ns,187.93us,2.03us,183.14us,224.58us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,17579,4.51s,173.12us,0.00ns,170.63us,4.55us,162.40us,189.01us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,19684,4.51s,146.76us,0.00ns,152.38us,8.16us,142.67us,182.54us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,19114,4.51s,149.94us,0.00ns,156.92us,10.83us,148.59us,189.36us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,577.54ms,46.00ns,0.00ns,46.00ns,99.00ns,43.00ns,99.29us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,527.69ms,47.00ns,0.00ns,47.00ns,12.00ns,43.00ns,9.82us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,577.59ms,45.00ns,0.00ns,45.00ns,22.00ns,42.00ns,20.29us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,578.86ms,52.00ns,0.00ns,53.00ns,15.00ns,48.00ns,10.16us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,828.86ms,159.00ns,0.00ns,161.00ns,11.00ns,150.00ns,4.96us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.58s,185.00ns,0.00ns,187.00ns,13.00ns,177.00ns,1.96us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,527.55ms,48.00ns,0.00ns,48.00ns,18.00ns,45.00ns,12.44us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,577.58ms,44.00ns,0.00ns,44.00ns,6.00ns,41.00ns,1.89us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,577.73ms,44.00ns,0.00ns,44.00ns,6.00ns,41.00ns,1.89us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,828.70ms,158.00ns,0.00ns,160.00ns,15.00ns,144.00ns,6.79us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,577.76ms,50.00ns,0.00ns,50.00ns,35.00ns,47.00ns,21.94us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,629.18ms,76.00ns,0.00ns,77.00ns,18.00ns,71.00ns,14.57us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,679.97ms,95.00ns,0.00ns,95.00ns,9.00ns,90.00ns,2.24us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,930.82ms,201.00ns,0.00ns,203.00ns,17.00ns,198.00ns,9.81us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.63s,226.00ns,0.00ns,227.00ns,13.00ns,217.00ns,6.28us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,680.88ms,86.00ns,0.00ns,87.00ns,8.00ns,81.00ns,2.39us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,679.39ms,98.00ns,0.00ns,98.00ns,8.00ns,90.00ns,2.27us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,679.22ms,89.00ns,0.00ns,89.00ns,8.00ns,83.00ns,2.08us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,790.40ms,122.00ns,0.00ns,123.00ns,24.00ns,114.00ns,14.94us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,729.25ms,133.00ns,0.00ns,134.00ns,15.00ns,126.00ns,7.72us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.04s,273.00ns,0.00ns,275.00ns,19.00ns,269.00ns,7.90us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.73s,269.00ns,0.00ns,271.00ns,13.00ns,259.00ns,2.62us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,745.43ms,134.00ns,0.00ns,135.00ns,14.00ns,128.00ns,10.06us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,780.37ms,138.00ns,0.00ns,138.00ns,11.00ns,130.00ns,2.58us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,730.03ms,136.00ns,0.00ns,136.00ns,10.00ns,129.00ns,2.03us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,527.97ms,29.00ns,0.00ns,29.00ns,22.00ns,26.00ns,20.48us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,527.51ms,30.00ns,0.00ns,30.00ns,8.00ns,28.00ns,5.01us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,527.65ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.04us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,528.00ms,20.00ns,0.00ns,20.00ns,6.00ns,18.00ns,2.49us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,577.81ms,30.00ns,0.00ns,28.00ns,21.00ns,22.00ns,19.18us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.53s,161.00ns,0.00ns,162.00ns,12.00ns,155.00ns,2.12us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,577.92ms,32.00ns,0.00ns,32.00ns,18.00ns,30.00ns,17.07us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,527.50ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.84us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,527.86ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.08us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,527.32ms,24.00ns,0.00ns,26.00ns,17.00ns,22.00ns,15.80us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,527.14ms,32.00ns,0.00ns,32.00ns,5.00ns,29.00ns,2.33us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,579.13ms,51.00ns,0.00ns,51.00ns,7.00ns,48.00ns,2.07us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,578.99ms,34.00ns,0.00ns,34.00ns,20.00ns,30.00ns,19.15us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,529.51ms,30.00ns,0.00ns,30.00ns,6.00ns,28.00ns,2.34us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.53s,186.00ns,0.00ns,187.00ns,15.00ns,179.00ns,8.47us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,578.75ms,49.00ns,0.00ns,50.00ns,10.00ns,47.00ns,7.46us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,628.71ms,56.00ns,0.00ns,56.00ns,7.00ns,52.00ns,2.22us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,579.36ms,53.00ns,0.00ns,53.00ns,7.00ns,47.00ns,2.29us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,629.44ms,68.00ns,0.00ns,69.00ns,29.00ns,64.00ns,18.22us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,579.48ms,45.00ns,0.00ns,45.00ns,8.00ns,41.00ns,4.89us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,528.62ms,39.00ns,0.00ns,39.00ns,7.00ns,36.00ns,2.97us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.63s,210.00ns,0.00ns,211.00ns,17.00ns,202.00ns,10.11us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,629.04ms,90.00ns,0.00ns,91.00ns,13.00ns,86.00ns,10.35us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,629.14ms,69.00ns,0.00ns,69.00ns,8.00ns,64.00ns,2.07us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,628.48ms,80.00ns,0.00ns,80.00ns,8.00ns,73.00ns,2.95us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,7559,4.51s,396.54us,0.00ns,396.87us,1.45us,393.28us,418.50us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,7636,4.51s,391.96us,0.00ns,392.86us,3.15us,390.87us,430.19us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,8163,4.51s,376.13us,0.00ns,367.48us,10.32us,354.31us,391.61us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,3609,4.51s,829.99us,0.00ns,831.24us,6.81us,794.44us,890.02us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,3817,4.51s,786.05us,0.00ns,786.07us,5.93us,743.45us,828.42us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,9576,4.56s,311.65us,0.00ns,312.94us,4.77us,309.81us,343.00us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,7764,4.51s,385.90us,0.00ns,386.39us,1.24us,385.69us,395.27us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,8504,4.51s,352.60us,0.00ns,352.78us,1.34us,349.03us,363.76us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,8560,4.51s,350.13us,0.00ns,350.44us,1.42us,347.50us,362.62us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,3797,4.51s,789.33us,0.00ns,790.15us,6.34us,774.51us,841.47us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,7167,4.51s,431.18us,0.00ns,418.58us,13.29us,404.58us,444.12us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,1.33s,439.00ns,0.00ns,440.00ns,18.00ns,434.00ns,2.07us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,1.33s,433.00ns,0.00ns,434.00ns,18.00ns,430.00ns,2.19us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.28s,392.00ns,0.00ns,393.00ns,17.00ns,389.00ns,8.21us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,1.08s,294.00ns,0.00ns,295.00ns,79.00ns,287.00ns,77.28us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,932.41ms,211.00ns,0.00ns,211.00ns,13.00ns,204.00ns,6.23us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,2.14s,475.00ns,0.00ns,476.00ns,22.00ns,467.00ns,7.32us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,1.33s,427.00ns,0.00ns,428.00ns,24.00ns,424.00ns,14.66us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.23s,394.00ns,0.00ns,394.00ns,16.00ns,390.00ns,8.91us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.23s,394.00ns,0.00ns,394.00ns,17.00ns,390.00ns,8.79us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,881.91ms,211.00ns,0.00ns,212.00ns,15.00ns,204.00ns,7.78us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,1.38s,451.00ns,0.00ns,452.00ns,18.00ns,446.00ns,5.74us\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,33335253,273,4.56s,10.98ms,0.00ns,11.00ms,55.11us,10.89ms,11.33ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,33335253,277,4.56s,10.87ms,0.00ns,10.83ms,232.40us,10.34ms,11.30ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,33335253,281,4.56s,10.67ms,0.00ns,10.69ms,149.27us,10.37ms,11.03ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,33335253,442,4.56s,6.64ms,224.00ns,6.79ms,231.11us,6.57ms,7.22ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,33335253,448,4.56s,6.64ms,18.00ns,6.71ms,158.12us,6.58ms,7.14ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/binary,2.5.0,,33335253,3088,4.56s,0.97ms,1.00ns,0.97ms,10.16us,946.71us,1.06ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,33335253,312,4.56s,9.59ms,137.00ns,9.64ms,159.95us,9.39ms,10.44ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,33335253,146,4.56s,20.63ms,136.00ns,20.64ms,48.28us,20.57ms,20.82ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,33335253,219,4.56s,13.77ms,0.00ns,13.73ms,125.11us,13.46ms,13.96ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,33335253,320,4.56s,9.41ms,64.00ns,9.38ms,124.17us,9.18ms,9.92ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,33335253,434,4.56s,6.85ms,15.00ns,6.92ms,213.00us,6.68ms,7.30ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,33335253,439,4.56s,6.75ms,0.00ns,6.84ms,193.67us,6.70ms,7.40ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,33335253,555,4.56s,5.41ms,0.00ns,5.41ms,46.38us,5.25ms,5.61ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,33335253,557,4.56s,5.39ms,0.00ns,5.39ms,46.55us,5.25ms,5.61ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,22275,4.56s,134.29us,0.00ns,134.63us,1.73us,132.32us,153.72us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13769,4.51s,224.08us,0.00ns,217.84us,9.17us,205.92us,248.04us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13595,4.51s,224.53us,0.00ns,220.62us,9.27us,205.45us,239.87us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,91850,4.56s,28.21us,0.00ns,32.62us,6.31us,27.66us,47.57us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,97693,4.57s,28.27us,0.00ns,30.67us,4.99us,27.91us,51.80us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3256,4.51s,919.01us,1.00ns,921.42us,7.42us,909.04us,0.96ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2961,4.51s,1.01ms,0.00ns,1.01ms,2.57us,1.01ms,1.06ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4539,4.51s,657.09us,0.00ns,661.02us,9.91us,651.40us,721.72us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,52822,4.56s,56.60us,0.00ns,56.45us,865.00ns,55.25us,67.48us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,79414,4.56s,38.34us,0.00ns,37.73us,1.02us,36.08us,44.02us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,80678,4.56s,36.82us,0.00ns,37.14us,1.06us,35.90us,44.02us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,76950,4.56s,38.52us,0.00ns,38.94us,1.11us,37.35us,62.81us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,77799,4.56s,38.46us,0.00ns,38.52us,826.00ns,37.30us,45.55us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2932,4.51s,1.02ms,2.00ns,1.02ms,19.98us,0.96ms,1.10ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2964,4.51s,1.02ms,18.00ns,1.01ms,26.36us,0.96ms,1.09ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,23719,4.56s,126.48us,0.00ns,126.45us,1.42us,123.00us,145.33us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13692,4.51s,223.97us,1.00ns,219.06us,9.34us,205.62us,238.72us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13863,4.51s,223.53us,0.00ns,216.36us,9.16us,205.68us,237.63us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,83090,4.56s,32.39us,0.00ns,36.07us,5.55us,31.51us,48.83us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,88873,4.56s,31.74us,0.00ns,33.72us,4.40us,30.98us,59.84us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3529,4.51s,848.61us,0.00ns,850.19us,7.48us,842.05us,933.79us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2960,4.51s,1.01ms,0.00ns,1.01ms,3.93us,1.01ms,1.09ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4538,4.51s,657.18us,0.00ns,661.16us,9.39us,651.43us,715.10us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,49688,4.56s,59.68us,1.00ns,60.03us,1.78us,55.89us,77.72us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,76257,4.56s,40.28us,0.00ns,39.29us,1.49us,37.17us,73.08us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,77625,4.56s,37.64us,0.00ns,38.60us,1.15us,37.37us,55.54us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,76421,4.56s,38.67us,0.00ns,39.21us,930.00ns,38.31us,46.52us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,77103,4.56s,38.65us,0.00ns,38.87us,627.00ns,38.34us,55.27us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3132,4.51s,0.96ms,4.00ns,0.96ms,20.14us,894.40us,1.03ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3200,4.51s,943.64us,137.00ns,937.57us,29.19us,894.00us,1.01ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,16925,4.51s,175.94us,0.00ns,177.22us,2.48us,174.42us,219.37us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13835,4.51s,223.64us,0.00ns,216.80us,9.39us,205.74us,240.81us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13697,4.51s,224.60us,0.00ns,218.98us,9.09us,206.04us,267.33us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,89387,4.56s,29.97us,0.00ns,33.52us,5.64us,29.06us,50.02us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,103817,4.57s,27.13us,0.00ns,28.86us,4.50us,26.59us,45.80us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3608,4.51s,831.19us,0.00ns,831.47us,3.65us,822.64us,873.97us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2958,4.51s,1.01ms,0.00ns,1.01ms,5.22us,1.01ms,1.07ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4555,4.51s,657.10us,0.00ns,658.63us,5.61us,651.40us,711.74us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,51141,4.56s,59.40us,0.00ns,58.28us,1.79us,53.95us,88.95us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,78174,4.56s,37.95us,0.00ns,38.33us,785.00ns,37.73us,48.55us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,77661,4.56s,37.76us,0.00ns,38.59us,1.02us,37.52us,53.01us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,74778,4.56s,39.54us,0.00ns,40.08us,1.00us,39.10us,63.97us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,75778,4.56s,39.40us,0.00ns,39.55us,585.00ns,39.01us,59.61us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3296,4.51s,904.02us,2.00ns,910.21us,14.90us,892.66us,0.99ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3309,4.51s,901.89us,0.00ns,906.71us,13.18us,892.21us,0.98ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,33015,4.56s,90.63us,0.00ns,90.83us,1.22us,89.46us,105.08us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,14105,4.51s,218.54us,0.00ns,212.67us,9.15us,200.18us,263.49us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,14130,4.51s,218.43us,0.00ns,212.28us,9.28us,199.81us,229.67us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,104400,4.57s,28.60us,0.00ns,28.70us,298.00ns,28.36us,36.74us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,92625,4.56s,31.04us,0.00ns,32.35us,3.86us,30.30us,49.20us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3584,4.51s,835.67us,1.00ns,837.12us,6.88us,823.61us,883.69us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2963,4.51s,1.01ms,0.00ns,1.01ms,3.62us,1.01ms,1.06ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,51847,4.56s,57.83us,0.00ns,57.52us,949.00ns,56.06us,81.37us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,80033,4.56s,37.40us,0.00ns,37.45us,271.00ns,37.19us,43.33us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,77286,4.56s,39.61us,0.00ns,38.77us,1.10us,37.30us,45.72us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,274687,4.67s,10.78us,0.00ns,10.89us,229.00ns,10.40us,17.32us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,277128,4.67s,10.76us,0.00ns,10.79us,198.00ns,10.38us,30.79us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3280,4.51s,901.47us,24.00ns,914.77us,45.76us,861.47us,1.02ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3253,4.51s,904.47us,0.00ns,922.35us,45.25us,861.73us,1.04ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,24316,4.56s,122.72us,0.00ns,123.35us,2.32us,121.92us,140.15us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13689,4.56s,224.82us,0.00ns,219.13us,8.99us,205.91us,244.57us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13696,4.51s,224.31us,0.00ns,219.00us,8.97us,205.76us,248.75us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,82683,4.56s,32.69us,0.00ns,36.25us,5.54us,31.99us,53.83us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,97356,4.57s,29.01us,0.00ns,30.78us,4.48us,28.47us,47.07us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3395,4.51s,882.72us,0.00ns,883.62us,5.19us,874.19us,937.11us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2963,4.51s,1.01ms,0.00ns,1.01ms,2.41us,1.01ms,1.08ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4550,4.51s,657.68us,5.00ns,659.40us,6.07us,651.63us,711.33us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,49800,4.56s,60.24us,1.00ns,59.90us,1.54us,56.17us,69.52us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,75873,4.56s,40.25us,0.00ns,39.50us,1.14us,37.82us,49.69us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,77261,4.56s,37.84us,0.00ns,38.79us,1.15us,37.55us,64.98us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3148,4.51s,949.62us,2.00ns,0.95ms,10.41us,937.29us,1.00ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3146,4.51s,948.41us,1.00ns,0.95ms,12.31us,937.92us,1.00ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,4320,4.51s,693.38us,0.00ns,694.50us,6.46us,688.42us,744.66us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,11075,4.51s,275.12us,0.00ns,270.86us,8.62us,258.68us,291.46us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,11237,4.51s,270.45us,0.00ns,266.93us,8.96us,253.67us,288.74us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,31018,4.56s,96.52us,0.00ns,96.68us,1.04us,94.26us,119.88us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,47437,4.56s,67.85us,0.00ns,63.20us,5.74us,56.24us,78.05us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3615,4.51s,827.52us,0.00ns,829.98us,9.85us,813.03us,0.96ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2776,4.51s,1.08ms,0.00ns,1.08ms,3.73us,1.08ms,1.13ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4420,4.51s,681.97us,0.00ns,678.76us,8.79us,656.10us,723.06us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,26415,4.56s,111.97us,0.00ns,113.22us,3.88us,108.36us,162.11us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,32332,4.56s,92.78us,0.00ns,92.75us,700.00ns,90.94us,101.29us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,42785,4.56s,71.19us,0.00ns,70.08us,2.97us,62.50us,96.35us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3183,4.51s,943.48us,0.00ns,942.71us,10.22us,860.20us,0.99ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3248,4.51s,924.27us,12.00ns,923.86us,11.36us,840.27us,0.97ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,11441,4.51s,260.73us,0.00ns,262.19us,7.19us,249.07us,288.66us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,3919,4.51s,765.25us,0.00ns,765.53us,11.34us,729.68us,803.52us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,4442,4.51s,673.38us,2.00ns,675.36us,12.09us,649.62us,714.44us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,5955,4.51s,503.67us,0.00ns,503.74us,2.33us,495.07us,531.41us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,9535,4.51s,314.01us,0.00ns,314.59us,2.37us,309.21us,336.46us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,2511,4.51s,1.19ms,0.00ns,1.19ms,13.72us,1.17ms,1.30ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2416,4.51s,1.24ms,2.00ns,1.24ms,8.54us,1.22ms,1.29ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,3412,4.51s,874.06us,9.00ns,879.40us,23.71us,839.17us,1.03ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,6048,4.56s,495.07us,1.00ns,495.70us,6.39us,482.69us,519.13us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,6109,4.51s,490.45us,0.00ns,491.08us,3.27us,482.63us,513.04us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,10475,4.51s,284.99us,0.00ns,286.35us,4.20us,281.15us,312.85us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2506,4.51s,1.19ms,6.00ns,1.20ms,16.14us,1.18ms,1.33ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2753,4.51s,1.09ms,0.00ns,1.09ms,8.60us,1.06ms,1.14ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,6211,4.51s,486.87us,0.00ns,483.04us,8.24us,468.15us,511.60us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,8853,4.51s,341.60us,0.00ns,338.86us,8.53us,326.46us,359.61us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,9002,4.51s,335.30us,0.00ns,333.23us,8.46us,316.64us,361.32us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,18347,4.51s,161.69us,0.00ns,163.48us,4.00us,158.74us,194.95us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,35987,4.56s,82.15us,0.00ns,83.32us,2.98us,80.06us,108.23us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,2974,4.51s,1.01ms,1.00ns,1.01ms,7.47us,0.98ms,1.07ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2701,4.51s,1.11ms,0.00ns,1.11ms,2.27us,1.11ms,1.15ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4299,4.51s,698.17us,0.00ns,697.85us,12.07us,669.30us,758.73us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,19515,4.56s,153.67us,0.00ns,153.37us,5.52us,145.26us,223.68us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,20138,4.51s,148.70us,0.00ns,148.94us,1.02us,146.85us,159.47us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,31389,4.56s,93.48us,0.00ns,95.54us,3.66us,90.22us,128.68us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2426,4.51s,1.23ms,1.00ns,1.24ms,14.91us,1.20ms,1.30ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2444,4.51s,1.23ms,2.00ns,1.23ms,11.99us,1.19ms,1.28ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,151305,803321,4.88s,3.67us,0.00ns,3.70us,132.00ns,3.49us,9.00us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,151305,127616,4.57s,23.84us,0.00ns,23.48us,787.00ns,22.41us,49.73us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,151305,126426,4.57s,24.01us,0.00ns,23.70us,855.00ns,22.58us,29.39us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,923468,4.94s,3.03us,0.00ns,3.22us,290.00ns,2.81us,9.63us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,1000000,4.94s,2.88us,0.00ns,2.88us,69.00ns,2.69us,10.24us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,151305,346517,4.67s,8.31us,0.00ns,8.62us,512.00ns,8.12us,14.65us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,151305,32194,4.56s,93.04us,0.00ns,93.15us,1.13us,92.70us,115.37us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,151305,335893,4.82s,8.62us,0.00ns,8.60us,383.00ns,7.31us,14.70us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,151305,872272,4.89s,3.38us,0.00ns,3.41us,70.00ns,3.30us,8.03us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,151305,884434,4.89s,3.35us,0.00ns,3.36us,63.00ns,3.27us,10.61us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,151305,589683,4.83s,4.88us,0.00ns,5.06us,431.00ns,4.62us,13.48us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,578696,4.73s,5.09us,0.00ns,5.15us,244.00ns,4.92us,11.88us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,151305,200868,4.62s,14.60us,0.00ns,14.90us,1.79us,10.80us,25.00us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,151305,205747,4.62s,14.27us,0.00ns,14.55us,1.69us,10.96us,24.82us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,151305,735645,4.88s,3.99us,0.00ns,4.05us,254.00ns,3.89us,10.70us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,151305,126734,4.57s,23.89us,0.00ns,23.64us,823.00ns,22.51us,28.27us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,151305,125609,4.57s,24.02us,0.00ns,23.85us,858.00ns,22.56us,31.65us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,914020,4.99s,3.25us,0.00ns,3.25us,60.00ns,3.09us,11.47us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,941656,4.89s,3.40us,0.00ns,3.15us,300.00ns,2.66us,7.30us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,151305,320342,4.67s,9.02us,0.00ns,9.33us,0.99us,7.74us,18.11us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,151305,32185,4.56s,93.06us,0.00ns,93.18us,573.00ns,92.39us,112.59us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,151305,337510,4.82s,8.55us,0.00ns,8.56us,257.00ns,7.58us,13.29us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,151305,746553,4.93s,3.98us,0.00ns,3.99us,50.00ns,3.91us,8.99us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,151305,883103,4.99s,3.37us,0.00ns,3.36us,77.00ns,3.23us,32.22us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,151305,599266,4.78s,4.80us,0.00ns,4.98us,474.00ns,4.56us,110.22us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,541390,4.78s,5.29us,0.00ns,5.51us,456.00ns,5.00us,12.65us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,151305,191466,4.62s,14.82us,0.00ns,15.64us,3.21us,9.15us,27.45us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,151305,190657,4.62s,14.88us,0.00ns,15.70us,3.22us,9.06us,26.99us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,500100,101174,4.57s,31.91us,0.00ns,29.62us,2.84us,26.00us,40.38us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,500100,51810,4.56s,60.11us,0.00ns,57.87us,2.79us,54.09us,65.69us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,500100,52288,4.56s,60.10us,0.00ns,57.34us,3.01us,54.08us,80.12us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,382197,4.72s,7.83us,0.00ns,7.82us,190.00ns,7.34us,63.29us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,386831,4.72s,7.77us,0.00ns,7.72us,178.00ns,7.28us,12.08us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,500100,13811,4.51s,216.31us,0.00ns,217.19us,4.33us,216.29us,290.83us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,500100,9762,4.51s,306.79us,0.00ns,307.29us,3.33us,305.32us,355.51us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,500100,14908,4.51s,199.33us,0.00ns,201.21us,7.51us,197.60us,246.27us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,500100,172662,4.67s,17.15us,0.00ns,17.04us,504.00ns,16.27us,24.62us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,500100,260967,4.67s,11.40us,0.00ns,11.46us,171.00ns,11.28us,19.15us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,500100,262601,4.67s,11.38us,0.00ns,11.39us,109.00ns,11.27us,17.40us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,500100,269016,4.62s,11.11us,0.00ns,11.12us,133.00ns,10.86us,37.92us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,500100,276374,4.62s,10.76us,0.00ns,10.82us,136.00ns,10.36us,16.16us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,500100,14002,4.51s,216.29us,0.00ns,214.24us,12.46us,208.26us,341.62us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,500100,13743,4.51s,216.30us,0.00ns,218.27us,14.82us,208.28us,345.16us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,500100,4438,4.51s,676.84us,2.00ns,676.08us,7.88us,659.38us,704.69us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,500100,3785,4.51s,791.82us,0.00ns,792.64us,5.03us,786.56us,860.30us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,500100,8431,4.51s,350.80us,0.00ns,355.82us,13.53us,349.01us,408.94us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,1807,4.51s,1.65ms,0.00ns,1.66ms,28.45us,1.61ms,1.91ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,11640,4.51s,253.32us,0.00ns,257.70us,17.73us,247.35us,354.91us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,500100,15057,4.51s,198.96us,0.00ns,199.22us,1.00us,198.25us,238.95us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,500100,13594,4.51s,221.10us,0.00ns,220.66us,2.82us,211.46us,252.93us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,500100,13882,4.51s,206.91us,0.00ns,216.08us,25.80us,206.65us,345.46us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,500100,7049,4.56s,420.08us,0.00ns,425.30us,14.09us,409.65us,514.49us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,500100,3290,4.51s,910.16us,1.00ns,912.09us,5.72us,902.14us,937.99us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,500100,9757,4.51s,302.89us,0.00ns,307.44us,15.86us,283.76us,355.18us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,500100,2696,4.51s,1.10ms,0.00ns,1.11ms,39.71us,1.06ms,1.34ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,500100,11113,4.51s,269.22us,0.00ns,269.92us,5.48us,259.57us,318.87us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1001,1000000,627.39ms,81.00ns,0.00ns,82.00ns,8.00ns,77.00ns,2.07us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,728.38ms,141.00ns,0.00ns,137.00ns,11.00ns,127.00ns,2.26us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,728.77ms,130.00ns,0.00ns,135.00ns,25.00ns,126.00ns,22.43us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,1000000,577.27ms,60.00ns,0.00ns,60.00ns,9.00ns,53.00ns,2.61us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,527.00ms,35.00ns,0.00ns,36.00ns,6.00ns,30.00ns,2.58us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.48s,448.00ns,0.00ns,449.00ns,21.00ns,443.00ns,5.33us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.78s,621.00ns,0.00ns,622.00ns,25.00ns,605.00ns,5.93us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.28s,411.00ns,0.00ns,412.00ns,19.00ns,396.00ns,2.72us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1001,1000000,1.63s,217.00ns,0.00ns,218.00ns,14.00ns,200.00ns,2.18us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1001,1000000,577.66ms,44.00ns,0.00ns,45.00ns,7.00ns,40.00ns,1.88us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,577.77ms,42.00ns,0.00ns,44.00ns,7.00ns,37.00ns,2.05us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1001,1000000,528.23ms,31.00ns,0.00ns,31.00ns,7.00ns,27.00ns,2.44us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1001,1000000,528.06ms,28.00ns,0.00ns,29.00ns,14.00ns,25.00ns,12.45us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1001,1000000,1.43s,458.00ns,0.00ns,458.00ns,20.00ns,438.00ns,6.26us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1001,1000000,1.38s,457.00ns,0.00ns,458.00ns,22.00ns,453.00ns,9.00us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1001,1000000,3.29s,1.35us,0.00ns,1.35us,31.00ns,1.33us,7.92us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,3.64s,1.55us,0.00ns,1.55us,34.00ns,1.53us,9.29us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,1.93s,731.00ns,0.00ns,744.00ns,40.00ns,716.00ns,6.50us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,927758,4.99s,3.20us,0.00ns,3.20us,69.00ns,3.10us,22.39us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,1.53s,527.00ns,0.00ns,538.00ns,44.00ns,487.00ns,7.76us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.28s,415.00ns,0.00ns,416.00ns,19.00ns,410.00ns,4.63us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.33s,454.00ns,0.00ns,456.00ns,21.00ns,429.00ns,2.47us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.33s,425.00ns,0.00ns,427.00ns,24.00ns,418.00ns,8.87us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1001,1000000,3.29s,1.04us,0.00ns,1.05us,33.00ns,0.99us,8.29us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1001,1000000,3.79s,1.70us,0.00ns,1.70us,40.00ns,1.68us,10.34us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,1.73s,639.00ns,0.00ns,644.00ns,32.00ns,605.00ns,9.39us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1001,1000000,4.29s,2.24us,0.00ns,2.27us,93.00ns,2.14us,10.55us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1001,1000000,1.73s,571.00ns,0.00ns,571.00ns,27.00ns,546.00ns,6.67us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,550004,33796,4.56s,86.34us,0.00ns,88.73us,3.14us,83.57us,98.24us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,550004,28868,4.56s,103.75us,0.00ns,103.89us,2.28us,99.18us,119.56us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,550004,29065,4.56s,103.08us,0.00ns,103.19us,2.44us,98.97us,114.48us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,550004,23974,4.51s,125.29us,0.00ns,125.11us,1.20us,122.06us,135.52us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,550004,24000,4.51s,125.00us,0.00ns,124.97us,1.03us,121.79us,133.92us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,550004,37945,4.56s,78.86us,0.00ns,79.03us,1.07us,73.11us,98.95us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,550004,8866,4.51s,338.02us,0.00ns,338.37us,1.89us,336.12us,382.80us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,550004,13530,4.51s,219.27us,0.00ns,221.70us,7.22us,217.37us,271.79us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,550004,12965,4.56s,229.34us,0.00ns,231.08us,7.83us,171.15us,250.86us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,550004,23673,4.56s,123.85us,0.00ns,126.70us,6.30us,122.78us,157.22us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,550004,23933,4.56s,123.76us,0.00ns,125.32us,5.94us,122.85us,158.16us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,550004,39215,4.56s,76.29us,0.00ns,76.46us,677.00ns,75.64us,84.92us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,550004,37681,4.56s,79.44us,0.00ns,79.58us,615.00ns,76.47us,88.04us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,550004,46055,4.56s,66.81us,0.00ns,65.10us,3.01us,60.00us,74.06us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,550004,46980,4.56s,66.62us,0.00ns,63.82us,3.31us,59.97us,76.09us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,720057,57805,4.56s,43.07us,0.00ns,51.86us,15.77us,42.99us,88.47us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,720057,36231,4.56s,86.53us,0.00ns,82.76us,4.32us,77.87us,107.87us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,720057,36299,4.56s,86.52us,0.00ns,82.61us,4.40us,77.86us,115.59us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,80026,4.56s,37.83us,0.00ns,37.45us,1.01us,35.14us,49.76us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,79823,4.56s,37.50us,0.00ns,37.55us,307.00ns,34.85us,62.99us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,720057,98443,4.57s,29.87us,0.00ns,30.44us,1.18us,29.32us,52.30us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,720057,6750,4.51s,443.88us,0.00ns,444.45us,1.43us,441.33us,485.04us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,720057,44116,4.56s,66.79us,0.00ns,67.66us,4.55us,61.77us,85.43us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,720057,78180,4.56s,38.28us,0.00ns,38.34us,377.00ns,38.22us,60.57us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,720057,78512,4.56s,38.14us,0.00ns,38.18us,202.00ns,38.12us,43.01us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,720057,11743,4.51s,255.19us,0.00ns,255.45us,868.00ns,255.16us,268.40us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,11730,4.51s,255.40us,0.00ns,255.73us,0.97us,255.25us,265.06us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,720057,137950,4.62s,21.72us,0.00ns,21.71us,173.00ns,21.47us,29.47us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,720057,139666,4.57s,21.43us,0.00ns,21.45us,140.00ns,21.40us,31.15us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,720057,2854,4.51s,1.04ms,1.00ns,1.05ms,14.75us,1.04ms,1.08ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,720057,613,4.51s,4.90ms,0.00ns,4.90ms,4.85us,4.88ms,4.93ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,720057,613,4.51s,4.90ms,0.00ns,4.90ms,3.67us,4.89ms,4.93ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,5405,4.51s,554.46us,0.00ns,555.11us,4.72us,554.40us,692.95us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,5391,4.51s,555.03us,0.00ns,556.47us,11.09us,553.87us,0.97ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,720057,6154,4.51s,487.55us,1.00ns,487.50us,6.52us,463.52us,553.75us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,720057,6770,4.51s,442.88us,1.00ns,443.11us,1.30us,441.30us,484.70us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,720057,2487,4.51s,1.19ms,0.00ns,1.21ms,40.24us,1.13ms,1.38ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,720057,4783,4.51s,626.61us,0.00ns,627.20us,2.12us,607.05us,644.36us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,720057,4804,4.51s,623.72us,0.00ns,624.46us,1.86us,605.00us,641.15us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,720057,2235,4.51s,1.35ms,0.00ns,1.34ms,12.43us,1.31ms,1.38ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,2228,4.51s,1.35ms,5.00ns,1.35ms,11.82us,1.32ms,1.37ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,720057,6481,4.51s,462.47us,0.00ns,462.93us,1.86us,439.63us,478.31us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,720057,6532,4.51s,461.88us,0.00ns,459.26us,10.06us,439.20us,557.54us\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,,442,4.56s,6.89ms,146.00ns,6.80ms,270.22us,6.27ms,7.36ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,,199,4.56s,14.85ms,0.00ns,15.09ms,596.22us,14.58ms,17.86ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,,217,4.56s,13.83ms,0.00ns,13.85ms,58.55us,13.79ms,14.13ms\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1000,26892,4.56s,111.35us,0.00ns,111.51us,2.48us,103.91us,140.68us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1000,27986,4.56s,107.08us,0.00ns,107.16us,1.02us,105.41us,183.13us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1000,37438,4.56s,80.07us,0.00ns,80.10us,822.00ns,75.97us,89.88us\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,806771,220,4.56s,13.69ms,87.00ns,13.69ms,34.19us,13.62ms,13.80ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,806771,164,4.56s,18.63ms,40.00ns,18.31ms,412.56us,17.72ms,18.77ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,806771,151,4.56s,20.38ms,0.00ns,19.94ms,484.72us,19.37ms,20.45ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,19605,4.51s,152.40us,0.00ns,152.99us,5.57us,143.28us,180.07us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,23588,4.51s,127.57us,0.00ns,127.15us,3.19us,121.77us,140.72us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,24102,4.56s,124.37us,0.00ns,124.44us,3.27us,119.39us,136.33us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,90354,4.57s,33.10us,0.00ns,33.17us,304.00ns,32.61us,41.24us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,182549,4.62s,16.32us,0.00ns,16.40us,327.00ns,16.04us,34.00us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,13813,4.51s,217.13us,0.00ns,217.16us,5.83us,198.22us,272.28us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7764,4.51s,385.73us,0.00ns,386.39us,2.69us,384.69us,440.92us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,11938,4.51s,251.63us,0.00ns,251.27us,4.05us,242.39us,301.00us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,57501,4.56s,51.54us,0.00ns,51.85us,2.70us,46.50us,73.04us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,107035,4.57s,27.87us,0.00ns,27.99us,378.00ns,27.55us,33.15us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,173668,4.62s,17.16us,0.00ns,17.24us,365.00ns,16.80us,33.56us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,9484,4.51s,316.34us,0.00ns,316.30us,7.58us,292.95us,343.22us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,9527,4.51s,314.93us,0.00ns,314.86us,8.75us,287.12us,340.16us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,11300,4.51s,263.99us,0.00ns,265.46us,3.45us,258.43us,306.81us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,17031,4.51s,175.72us,0.00ns,176.12us,3.22us,170.34us,198.10us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,18080,4.51s,165.27us,1.00ns,165.91us,3.74us,158.70us,195.40us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,21214,4.51s,140.66us,0.00ns,141.39us,2.66us,137.66us,172.58us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,70954,4.56s,41.28us,0.00ns,42.24us,2.35us,39.59us,62.40us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,12158,4.51s,246.89us,0.00ns,246.73us,5.38us,225.76us,306.84us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7312,4.51s,409.80us,0.00ns,410.29us,1.65us,408.37us,442.98us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,10725,4.51s,280.63us,0.00ns,279.70us,5.36us,267.06us,330.04us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,31723,4.56s,93.30us,0.00ns,94.23us,3.80us,88.68us,135.18us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,27426,4.56s,109.27us,0.00ns,109.35us,1.90us,106.30us,132.54us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,55891,4.56s,52.73us,0.00ns,53.64us,2.56us,48.50us,73.32us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,7733,4.51s,388.38us,0.00ns,387.95us,6.24us,367.28us,436.87us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,7934,4.51s,377.88us,2.00ns,378.10us,7.22us,354.12us,480.08us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,7854,4.51s,380.18us,0.00ns,381.97us,3.52us,378.12us,419.79us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,1952,4.51s,1.54ms,7.00ns,1.54ms,8.32us,1.52ms,1.65ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,2991,4.51s,0.99ms,0.00ns,1.00ms,28.15us,0.98ms,1.10ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,2796,4.51s,1.08ms,3.00ns,1.07ms,10.56us,1.06ms,1.10ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,6788,4.51s,431.83us,4.00ns,441.95us,20.13us,427.55us,557.24us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,3221,4.51s,930.82us,0.00ns,931.44us,7.94us,909.07us,0.98ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,2922,4.51s,1.03ms,0.00ns,1.03ms,5.50us,1.01ms,1.09ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,3520,4.51s,851.52us,5.00ns,852.35us,17.92us,792.39us,934.44us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,4720,4.51s,637.44us,1.00ns,635.30us,7.54us,617.27us,859.15us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,3017,4.51s,0.99ms,0.00ns,0.99ms,6.91us,0.98ms,1.02ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,7418,4.51s,408.88us,0.00ns,404.42us,17.09us,385.64us,508.50us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,2018,4.51s,1.48ms,1.00ns,1.49ms,38.93us,1.43ms,1.75ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,2867,4.51s,1.04ms,0.00ns,1.05ms,15.72us,0.98ms,1.13ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,14313,4.51s,208.52us,0.00ns,209.57us,3.38us,202.40us,227.21us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,18861,4.51s,158.28us,0.00ns,159.03us,3.66us,153.49us,172.03us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,19184,4.51s,155.35us,1.00ns,156.35us,4.18us,150.66us,174.97us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,64912,4.56s,46.15us,0.00ns,46.18us,509.00ns,44.99us,71.74us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,146952,4.62s,21.45us,0.00ns,20.38us,2.17us,16.23us,30.31us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,6883,4.51s,436.95us,0.00ns,435.83us,3.60us,427.96us,483.23us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7800,4.51s,384.39us,0.00ns,384.62us,1.54us,382.97us,428.30us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,11905,4.51s,252.08us,0.00ns,251.97us,3.49us,243.38us,302.15us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,81253,4.62s,36.39us,0.00ns,36.59us,1.08us,34.84us,55.01us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,91584,4.56s,32.66us,0.00ns,32.72us,269.00ns,32.21us,39.52us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,155693,4.57s,19.06us,0.00ns,19.24us,536.00ns,18.56us,29.29us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,5796,4.51s,518.25us,0.00ns,517.62us,5.39us,504.10us,537.89us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,5979,4.51s,502.85us,0.00ns,501.73us,3.74us,494.11us,520.71us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,10558,4.51s,283.75us,3.00ns,284.13us,2.85us,279.16us,302.90us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,9161,4.51s,326.32us,0.00ns,327.46us,4.94us,316.32us,372.40us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,9440,4.51s,316.89us,0.00ns,317.79us,4.67us,308.26us,338.11us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,28741,4.56s,104.09us,0.00ns,104.35us,1.52us,101.25us,125.68us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,73410,4.56s,40.20us,0.00ns,40.83us,1.59us,39.43us,54.90us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,6227,4.51s,481.48us,0.00ns,481.75us,2.69us,470.14us,526.64us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7251,4.51s,413.54us,0.00ns,413.73us,2.11us,411.64us,457.15us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,11175,4.51s,269.45us,0.00ns,268.42us,4.65us,257.46us,316.53us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,42759,4.56s,70.14us,0.00ns,69.82us,1.51us,66.16us,84.75us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,38921,4.56s,76.95us,0.00ns,77.04us,755.00ns,75.53us,91.74us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,71142,4.56s,41.71us,0.00ns,42.14us,1.20us,40.63us,62.33us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,4896,4.51s,610.07us,1.00ns,612.81us,10.03us,596.58us,651.65us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,5306,4.51s,561.91us,2.00ns,565.46us,8.93us,553.15us,605.62us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,13936,4.51s,220.61us,0.00ns,215.25us,11.43us,193.63us,299.91us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,3499,4.51s,857.43us,0.00ns,857.59us,8.40us,830.06us,927.66us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,4794,4.51s,618.44us,2.00ns,625.76us,18.10us,598.35us,680.58us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,5619,4.51s,533.21us,0.00ns,533.88us,1.92us,531.42us,551.01us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,13354,4.51s,223.46us,0.00ns,224.63us,6.64us,222.83us,322.73us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,4871,4.51s,615.70us,0.00ns,615.94us,4.82us,600.24us,743.51us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,4168,4.51s,719.53us,0.00ns,719.85us,2.09us,711.08us,753.00us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,5248,4.51s,557.73us,3.00ns,571.61us,30.61us,540.67us,684.75us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,6448,4.56s,464.46us,1.00ns,464.99us,3.36us,455.66us,500.44us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,5960,4.51s,502.68us,1.00ns,503.34us,1.82us,499.43us,532.36us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,14299,4.51s,199.92us,0.00ns,209.78us,13.58us,198.52us,271.03us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,3524,4.51s,844.19us,5.00ns,851.50us,23.14us,821.38us,1.01ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,4744,4.51s,631.14us,1.00ns,632.47us,7.46us,607.31us,685.49us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,21516,4.51s,139.17us,0.00ns,139.40us,811.00ns,137.75us,148.60us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,30558,4.56s,99.76us,0.00ns,98.14us,3.21us,93.08us,120.27us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,31423,4.56s,97.27us,0.00ns,95.44us,3.45us,91.18us,107.93us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,81210,4.56s,38.11us,0.00ns,36.91us,2.08us,33.47us,45.29us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,136033,4.57s,19.46us,0.00ns,22.02us,3.28us,18.67us,33.72us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,23396,4.51s,127.19us,1.00ns,128.20us,3.51us,126.17us,167.32us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7499,4.51s,399.54us,0.00ns,400.06us,2.16us,398.15us,445.55us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,11867,4.51s,252.59us,0.00ns,252.79us,5.08us,243.83us,305.54us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,75290,4.62s,38.71us,0.00ns,39.50us,1.75us,37.98us,62.56us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,91294,4.57s,32.75us,0.00ns,32.83us,296.00ns,32.38us,42.66us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,138713,4.57s,21.95us,0.00ns,21.59us,917.00ns,19.68us,31.18us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,20367,4.51s,147.28us,0.00ns,147.27us,2.63us,139.73us,164.50us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,21297,4.51s,140.67us,0.00ns,140.83us,2.69us,133.70us,173.91us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,13799,4.51s,216.42us,0.00ns,217.38us,2.96us,212.85us,243.78us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,18187,4.51s,164.54us,0.00ns,164.93us,3.17us,159.54us,176.60us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,18833,4.51s,158.76us,0.00ns,159.27us,3.19us,153.71us,172.25us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,37593,4.56s,79.49us,0.00ns,79.77us,1.11us,77.86us,98.31us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,93356,4.57s,31.67us,0.00ns,32.10us,1.11us,30.78us,50.58us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,14232,4.51s,210.79us,1.00ns,210.76us,4.37us,198.53us,258.73us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7456,4.51s,402.10us,0.00ns,402.36us,1.57us,400.20us,448.94us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,11386,4.51s,263.95us,1.00ns,263.46us,4.03us,254.18us,288.08us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,44413,4.56s,66.87us,0.00ns,67.22us,2.46us,63.08us,105.07us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,44204,4.56s,67.83us,0.00ns,67.83us,714.00ns,66.07us,80.35us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,78645,4.56s,37.90us,0.00ns,38.11us,1.13us,35.93us,54.62us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,10790,4.51s,278.47us,1.00ns,278.03us,3.42us,246.34us,288.89us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,11304,4.51s,265.56us,1.00ns,265.36us,4.15us,252.15us,285.24us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,31970,4.56s,93.37us,0.00ns,93.81us,2.04us,92.36us,115.74us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,7778,4.51s,385.61us,1.00ns,385.69us,4.16us,374.78us,407.60us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,9750,4.51s,306.98us,1.00ns,307.69us,5.55us,296.87us,330.18us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,12548,4.51s,237.98us,0.00ns,239.06us,4.09us,235.68us,264.58us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,25260,4.51s,118.32us,0.00ns,118.73us,2.39us,116.72us,151.37us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,6376,4.51s,469.52us,0.00ns,470.54us,3.03us,465.49us,518.29us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,5993,4.51s,500.01us,0.00ns,500.58us,2.48us,495.99us,552.45us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,8378,4.51s,357.14us,3.00ns,358.09us,6.78us,346.84us,415.75us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,15890,4.56s,188.27us,0.00ns,188.46us,2.61us,183.42us,226.38us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,12927,4.51s,229.77us,0.00ns,232.04us,4.70us,226.96us,259.71us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,27481,4.56s,107.57us,0.00ns,109.14us,3.96us,106.13us,142.87us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,5725,4.51s,521.74us,0.00ns,524.04us,7.77us,513.46us,574.75us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,6756,4.51s,442.92us,0.00ns,444.05us,4.02us,435.98us,498.12us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,80699,4.56s,36.60us,0.00ns,37.14us,1.46us,34.53us,46.94us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,42095,4.56s,74.20us,0.00ns,71.22us,3.66us,66.84us,85.06us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,42216,4.56s,74.19us,0.00ns,71.03us,3.73us,66.84us,84.81us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,273425,4.67s,9.47us,0.00ns,10.93us,2.38us,8.93us,23.51us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,297927,4.67s,9.46us,0.00ns,10.03us,1.68us,8.94us,18.37us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,10955,4.51s,271.99us,0.00ns,273.82us,6.69us,257.15us,315.99us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7954,4.51s,376.52us,0.00ns,377.17us,2.72us,376.05us,423.39us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12157,4.51s,244.52us,0.00ns,246.75us,8.05us,242.40us,297.72us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,142925,4.67s,20.91us,0.00ns,20.66us,566.00ns,19.89us,30.37us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,221956,4.62s,13.46us,0.00ns,13.49us,149.00ns,13.30us,23.32us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,222546,4.62s,13.31us,0.00ns,13.45us,241.00ns,13.17us,26.26us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,220711,4.62s,13.55us,0.00ns,13.56us,233.00ns,13.14us,17.55us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,219116,4.62s,13.70us,0.00ns,13.66us,165.00ns,13.24us,24.80us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,9377,4.51s,319.40us,0.00ns,319.92us,9.43us,294.85us,351.89us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,9240,4.51s,324.02us,6.00ns,324.65us,10.29us,296.95us,410.55us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,63743,4.56s,48.71us,0.00ns,47.03us,3.02us,41.32us,57.13us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,33188,4.56s,92.04us,0.00ns,90.36us,3.35us,86.05us,103.25us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,33375,4.56s,91.49us,0.00ns,89.85us,3.27us,85.45us,105.04us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,262253,4.62s,11.02us,0.00ns,11.41us,1.07us,10.69us,19.69us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,225110,4.62s,13.27us,0.00ns,13.29us,157.00ns,12.92us,18.16us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,20841,4.51s,143.07us,0.00ns,143.91us,3.92us,130.06us,173.38us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7958,4.51s,376.35us,0.00ns,376.97us,1.69us,376.07us,421.87us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12182,4.51s,244.48us,0.00ns,246.25us,6.63us,242.38us,297.83us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,95897,4.62s,31.15us,0.00ns,30.95us,1.11us,28.71us,40.89us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,213237,4.62s,13.92us,0.00ns,14.03us,330.00ns,13.50us,22.06us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,214973,4.62s,13.79us,0.00ns,13.92us,334.00ns,13.62us,19.21us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,220123,4.62s,13.56us,0.00ns,13.59us,178.00ns,13.27us,35.48us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,222565,4.62s,13.42us,0.00ns,13.45us,154.00ns,13.16us,18.49us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,14324,4.51s,208.96us,1.00ns,209.40us,8.01us,175.57us,238.68us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,14117,4.51s,211.85us,0.00ns,212.48us,8.53us,184.62us,331.05us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,54903,4.56s,52.14us,0.00ns,54.61us,3.02us,51.22us,65.12us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41754,4.56s,74.30us,0.00ns,71.81us,3.69us,66.93us,154.30us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,42199,4.56s,74.29us,0.00ns,71.05us,3.72us,66.93us,96.19us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,282838,4.62s,10.57us,0.00ns,10.57us,206.00ns,10.03us,15.90us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,323193,4.67s,9.27us,0.00ns,9.25us,183.00ns,8.79us,15.23us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,20329,4.51s,147.37us,0.00ns,147.54us,4.43us,133.00us,175.03us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7949,4.51s,377.12us,0.00ns,377.39us,1.26us,376.01us,422.17us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12187,4.51s,244.48us,0.00ns,246.14us,6.96us,242.40us,301.18us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,142039,4.67s,20.91us,0.00ns,20.79us,703.00ns,19.89us,31.37us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,223901,4.62s,13.31us,0.00ns,13.37us,184.00ns,13.17us,18.99us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,221248,4.62s,13.52us,0.00ns,13.53us,161.00ns,13.28us,38.12us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,224123,4.62s,13.34us,0.00ns,13.36us,116.00ns,13.19us,18.89us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,220620,4.62s,13.63us,0.00ns,13.57us,216.00ns,13.05us,20.49us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,15913,4.51s,189.42us,0.00ns,188.50us,8.56us,140.94us,229.99us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,15841,4.51s,189.44us,0.00ns,189.35us,7.79us,168.92us,229.91us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,11997,4.51s,249.70us,0.00ns,250.05us,1.26us,249.29us,285.50us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,20974,4.51s,142.10us,0.00ns,143.01us,3.97us,137.54us,164.17us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,20972,4.51s,142.46us,0.00ns,143.02us,3.87us,137.90us,166.13us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,287771,4.67s,10.36us,0.00ns,10.39us,194.00ns,9.88us,30.84us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,325704,4.67s,9.23us,0.00ns,9.18us,192.00ns,8.78us,14.26us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,6759,4.51s,442.96us,0.00ns,443.88us,5.81us,427.30us,469.79us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7853,4.51s,381.75us,0.00ns,382.00us,1.35us,380.32us,417.87us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12179,4.51s,244.47us,0.00ns,246.30us,7.20us,242.38us,301.52us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,118877,4.62s,24.81us,0.00ns,24.90us,306.00ns,24.77us,38.87us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,216682,4.62s,13.81us,0.00ns,13.81us,79.00ns,13.59us,18.73us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,224808,4.62s,13.30us,0.00ns,13.31us,125.00ns,13.17us,17.92us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,219270,4.62s,13.66us,0.00ns,13.65us,234.00ns,13.06us,18.72us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,221905,4.62s,13.62us,0.00ns,13.49us,260.00ns,13.05us,23.06us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,6949,4.51s,431.98us,0.00ns,431.72us,7.75us,399.23us,463.06us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,6949,4.51s,431.93us,0.00ns,431.75us,7.96us,399.37us,476.26us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,528.80ms,23.00ns,0.00ns,23.00ns,4.00ns,21.00ns,2.56us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,528.07ms,28.00ns,0.00ns,28.00ns,27.00ns,26.00ns,20.00us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,627.88ms,23.00ns,0.00ns,23.00ns,6.00ns,20.00ns,2.31us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,478.13ms,26.00ns,0.00ns,26.00ns,17.00ns,24.00ns,15.51us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,477.56ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.25us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,478.28ms,12.00ns,0.00ns,12.00ns,31.00ns,10.00ns,20.82us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.71ms,25.00ns,0.00ns,25.00ns,5.00ns,22.00ns,1.92us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.97ms,22.00ns,0.00ns,22.00ns,4.00ns,20.00ns,2.24us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,172.00ns,0.00ns,174.00ns,13.00ns,163.00ns,2.38us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,527.53ms,26.00ns,0.00ns,26.00ns,6.00ns,23.00ns,2.11us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,527.61ms,23.00ns,0.00ns,23.00ns,19.00ns,21.00ns,12.91us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.73ms,17.00ns,0.00ns,17.00ns,4.00ns,15.00ns,2.12us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,477.99ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,1.79us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,528.29ms,28.00ns,0.00ns,28.00ns,5.00ns,25.00ns,2.35us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,528.10ms,28.00ns,0.00ns,28.00ns,6.00ns,25.00ns,2.44us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,528.07ms,22.00ns,0.00ns,22.00ns,20.00ns,20.00ns,19.20us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,528.26ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.21us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.98ms,23.00ns,0.00ns,23.00ns,6.00ns,20.00ns,3.11us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,528.18ms,26.00ns,0.00ns,26.00ns,9.00ns,24.00ns,7.59us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,477.79ms,15.00ns,0.00ns,16.00ns,5.00ns,13.00ns,2.68us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,477.76ms,13.00ns,0.00ns,13.00ns,27.00ns,11.00ns,19.10us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,528.15ms,25.00ns,0.00ns,25.00ns,21.00ns,23.00ns,13.66us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,528.23ms,22.00ns,0.00ns,22.00ns,5.00ns,20.00ns,2.34us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,174.00ns,0.00ns,176.00ns,13.00ns,166.00ns,2.48us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,528.20ms,26.00ns,0.00ns,26.00ns,6.00ns,23.00ns,2.17us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,527.78ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.52us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.73ms,16.00ns,0.00ns,16.00ns,12.00ns,15.00ns,10.44us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,477.87ms,12.00ns,0.00ns,12.00ns,20.00ns,10.00ns,19.50us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,527.78ms,26.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.84us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,528.16ms,27.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.41us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.81ms,22.00ns,0.00ns,22.00ns,6.00ns,19.00ns,2.63us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,528.06ms,28.00ns,0.00ns,28.00ns,23.00ns,26.00ns,19.01us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,528.19ms,23.00ns,0.00ns,23.00ns,3.00ns,20.00ns,1.63us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.53ms,26.00ns,0.00ns,27.00ns,18.00ns,24.00ns,16.96us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,528.16ms,15.00ns,0.00ns,16.00ns,19.00ns,13.00ns,17.97us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,527.84ms,13.00ns,0.00ns,13.00ns,4.00ns,10.00ns,2.61us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.90ms,26.00ns,0.00ns,26.00ns,20.00ns,24.00ns,18.92us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,528.06ms,22.00ns,0.00ns,23.00ns,5.00ns,20.00ns,2.81us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,175.00ns,0.00ns,176.00ns,13.00ns,167.00ns,2.51us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,477.84ms,27.00ns,0.00ns,27.00ns,8.00ns,24.00ns,4.80us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,528.27ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.31us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,477.65ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.10us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,477.71ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,2.27us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,577.61ms,24.00ns,0.00ns,24.00ns,6.00ns,21.00ns,3.92us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,527.56ms,24.00ns,0.00ns,24.00ns,7.00ns,21.00ns,2.42us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.78ms,23.00ns,0.00ns,23.00ns,38.00ns,19.00ns,20.59us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.77ms,28.00ns,0.00ns,28.00ns,14.00ns,26.00ns,10.81us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,528.19ms,23.00ns,0.00ns,23.00ns,37.00ns,20.00ns,20.59us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,528.35ms,28.00ns,0.00ns,28.00ns,21.00ns,24.00ns,18.34us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.89ms,15.00ns,0.00ns,16.00ns,4.00ns,13.00ns,2.17us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,527.98ms,19.00ns,0.00ns,19.00ns,6.00ns,16.00ns,2.83us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,528.25ms,27.00ns,0.00ns,27.00ns,11.00ns,24.00ns,9.73us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,528.23ms,22.00ns,0.00ns,22.00ns,6.00ns,20.00ns,2.54us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,173.00ns,0.00ns,174.00ns,15.00ns,165.00ns,7.55us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,527.91ms,27.00ns,0.00ns,27.00ns,7.00ns,24.00ns,2.62us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,527.67ms,23.00ns,0.00ns,23.00ns,6.00ns,21.00ns,2.82us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,578.25ms,14.00ns,0.00ns,14.00ns,7.00ns,12.00ns,4.66us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,478.04ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.05us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,528.18ms,25.00ns,0.00ns,25.00ns,6.00ns,22.00ns,2.83us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,527.58ms,25.00ns,0.00ns,25.00ns,6.00ns,22.00ns,2.99us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,26801,4.56s,110.77us,0.00ns,111.90us,2.93us,108.83us,233.71us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13692,4.51s,218.21us,0.00ns,219.08us,6.40us,206.62us,238.00us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13598,4.51s,219.61us,1.00ns,220.59us,6.45us,206.78us,238.97us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,311832,4.67s,9.60us,0.00ns,9.59us,195.00ns,9.15us,32.56us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,237707,4.62s,14.35us,0.00ns,12.59us,2.52us,9.08us,37.60us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,14921,4.51s,200.58us,0.00ns,201.03us,4.33us,194.72us,220.34us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7948,4.51s,377.16us,0.00ns,377.43us,2.49us,374.52us,422.52us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,141920,4.67s,21.00us,0.00ns,20.80us,603.00ns,19.93us,32.73us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,219031,4.62s,13.66us,0.00ns,13.67us,101.00ns,13.54us,18.16us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,219529,4.62s,13.62us,0.00ns,13.63us,120.00ns,13.51us,19.16us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,69228,4.56s,43.01us,0.00ns,43.30us,1.60us,41.79us,62.33us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,63351,4.56s,47.28us,0.00ns,47.32us,2.16us,44.06us,68.12us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,12964,4.51s,229.40us,0.00ns,231.39us,5.08us,221.42us,247.07us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,13631,4.51s,218.78us,0.00ns,220.06us,3.81us,215.52us,241.97us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,528.10ms,26.00ns,0.00ns,27.00ns,6.00ns,24.00ns,3.02us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,527.80ms,26.00ns,0.00ns,27.00ns,5.00ns,24.00ns,2.10us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,528.19ms,25.00ns,0.00ns,25.00ns,13.00ns,22.00ns,8.52us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,527.73ms,34.00ns,0.00ns,34.00ns,10.00ns,32.00ns,7.50us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,527.62ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,1.95us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,477.59ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,1.98us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,528.09ms,31.00ns,0.00ns,31.00ns,14.00ns,28.00ns,12.35us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.53s,172.00ns,0.00ns,174.00ns,13.00ns,165.00ns,2.65us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,528.39ms,33.00ns,0.00ns,33.00ns,5.00ns,30.00ns,2.19us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,478.04ms,23.00ns,0.00ns,24.00ns,16.00ns,21.00ns,14.58us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,527.91ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.34us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,477.96ms,12.00ns,0.00ns,13.00ns,5.00ns,11.00ns,2.59us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,528.06ms,39.00ns,0.00ns,39.00ns,6.00ns,36.00ns,2.27us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,528.34ms,39.00ns,0.00ns,39.00ns,6.00ns,36.00ns,2.20us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,107662,4.57s,27.39us,0.00ns,27.83us,1.18us,26.52us,36.09us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,35584,4.56s,86.13us,0.00ns,84.27us,3.35us,79.97us,99.59us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,35619,4.56s,86.17us,0.00ns,84.19us,3.40us,80.02us,104.96us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,203791,4.62s,15.86us,0.00ns,14.69us,2.01us,11.21us,20.34us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,216096,4.62s,11.97us,0.00ns,13.85us,2.20us,11.33us,24.00us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,40384,4.56s,73.59us,0.00ns,74.25us,1.64us,71.41us,92.16us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7959,4.51s,376.79us,0.00ns,376.92us,2.62us,374.54us,423.41us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,12216,4.51s,244.51us,0.00ns,245.55us,4.61us,242.41us,294.80us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,138695,4.67s,21.45us,0.00ns,21.29us,367.00ns,20.62us,27.12us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,220167,4.62s,13.50us,0.00ns,13.59us,179.00ns,13.33us,18.07us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,215547,4.62s,13.99us,0.00ns,13.88us,278.00ns,13.34us,19.68us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,210500,4.62s,14.36us,0.00ns,14.22us,385.00ns,13.44us,35.65us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,212069,4.62s,13.98us,0.00ns,14.11us,337.00ns,13.45us,23.66us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,32612,4.56s,91.11us,0.00ns,91.96us,2.91us,88.09us,111.19us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,32603,4.56s,91.10us,0.00ns,91.98us,2.92us,87.80us,110.79us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,528.29ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,1.99us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,527.71ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,3.11us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,477.68ms,23.00ns,0.00ns,23.00ns,14.00ns,20.00ns,13.00us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,528.29ms,28.00ns,0.00ns,28.00ns,6.00ns,25.00ns,2.53us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,478.41ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,1.95us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,478.06ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,1.85us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,528.09ms,26.00ns,0.00ns,26.00ns,5.00ns,24.00ns,2.23us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,528.12ms,23.00ns,0.00ns,24.00ns,15.00ns,21.00ns,14.07us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.53s,172.00ns,0.00ns,173.00ns,12.00ns,164.00ns,2.74us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,528.11ms,27.00ns,0.00ns,27.00ns,5.00ns,24.00ns,2.26us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,528.14ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,1.81us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,528.06ms,17.00ns,0.00ns,17.00ns,5.00ns,15.00ns,2.35us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,477.88ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.30us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,528.24ms,31.00ns,0.00ns,31.00ns,7.00ns,28.00ns,2.85us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,528.13ms,31.00ns,0.00ns,31.00ns,5.00ns,28.00ns,2.21us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,72857,4.56s,42.54us,0.00ns,41.14us,4.17us,30.31us,66.85us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41246,4.56s,75.75us,0.00ns,72.70us,3.64us,68.47us,92.85us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,40733,4.56s,75.69us,0.00ns,73.61us,3.32us,68.42us,98.73us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,254458,4.62s,10.99us,0.00ns,11.76us,1.76us,10.48us,22.63us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,272933,4.62s,10.90us,0.00ns,10.96us,670.00ns,10.42us,20.27us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,16900,4.51s,176.50us,0.00ns,177.49us,5.18us,165.07us,205.65us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7936,4.51s,376.83us,0.00ns,378.02us,5.47us,374.55us,425.58us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12181,4.51s,244.48us,0.00ns,246.25us,6.54us,242.38us,297.29us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,142515,4.67s,20.78us,0.00ns,20.72us,462.00ns,19.95us,32.31us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,216263,4.62s,13.69us,0.00ns,13.84us,248.00ns,13.55us,22.58us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,215539,4.62s,13.79us,0.00ns,13.89us,225.00ns,13.64us,21.73us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,216667,4.62s,13.87us,0.00ns,13.81us,175.00ns,13.43us,19.39us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,218125,4.63s,13.74us,0.00ns,13.72us,149.00ns,13.28us,27.77us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,14825,4.51s,202.08us,0.00ns,202.34us,5.25us,187.60us,226.32us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,14496,4.51s,206.88us,0.00ns,206.93us,5.96us,189.24us,230.07us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,57737,4.57s,54.36us,0.00ns,51.93us,3.44us,46.70us,77.41us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41273,4.57s,75.79us,0.00ns,72.65us,3.68us,68.54us,84.05us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41554,4.57s,68.78us,0.00ns,72.16us,3.64us,68.57us,82.21us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,315584,4.68s,9.45us,0.00ns,9.47us,115.00ns,9.24us,21.05us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,321070,4.67s,9.29us,0.00ns,9.31us,107.00ns,9.15us,15.52us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,18289,4.51s,162.84us,0.00ns,164.00us,4.94us,150.23us,207.13us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7931,4.51s,377.51us,0.00ns,378.27us,3.61us,376.44us,426.49us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12155,4.51s,245.98us,0.00ns,246.78us,5.53us,242.56us,294.82us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,143944,4.67s,20.34us,0.00ns,20.51us,486.00ns,20.05us,31.72us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,222123,4.62s,13.40us,0.00ns,13.47us,196.00ns,13.26us,18.39us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,223791,4.67s,13.36us,0.00ns,13.37us,122.00ns,13.25us,23.94us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,223001,4.62s,13.40us,0.00ns,13.42us,131.00ns,13.26us,19.06us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,221156,4.62s,13.51us,0.00ns,13.53us,201.00ns,13.12us,32.69us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,13858,4.51s,216.23us,1.00ns,216.45us,9.03us,191.96us,250.47us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,13538,4.51s,221.22us,0.00ns,221.57us,12.76us,191.82us,265.37us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,169524,4.62s,16.24us,0.00ns,17.66us,2.81us,15.58us,39.14us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,33407,4.56s,91.27us,0.00ns,89.77us,3.31us,85.42us,109.50us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,33350,4.56s,91.38us,0.00ns,89.92us,3.24us,85.43us,101.77us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,248183,4.67s,12.00us,0.00ns,12.05us,153.00ns,11.83us,16.59us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,160746,4.62s,19.91us,0.00ns,18.63us,2.43us,14.13us,25.55us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,29199,4.56s,103.24us,0.00ns,102.71us,4.39us,90.80us,123.64us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7945,4.51s,377.19us,0.00ns,377.60us,1.74us,374.69us,422.55us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,134394,4.67s,22.09us,0.00ns,21.98us,602.00ns,21.10us,39.26us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,212301,4.62s,14.07us,0.00ns,14.10us,164.00ns,13.90us,18.76us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,213045,4.62s,14.03us,0.00ns,14.05us,117.00ns,13.89us,33.11us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,136871,4.57s,21.15us,0.00ns,21.88us,2.07us,19.61us,30.58us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,129204,4.57s,22.55us,0.00ns,23.18us,1.68us,20.67us,30.90us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,22647,4.56s,129.65us,0.00ns,132.44us,12.61us,106.36us,175.45us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,23802,4.51s,123.98us,0.00ns,126.01us,8.75us,106.80us,172.23us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,158589,4.62s,18.55us,0.00ns,18.88us,657.00ns,18.47us,28.17us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,37969,4.56s,81.83us,0.00ns,78.98us,3.55us,74.84us,87.83us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,38005,4.56s,81.76us,0.00ns,78.90us,3.56us,74.82us,87.75us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,217035,4.62s,13.77us,0.00ns,13.79us,134.00ns,13.47us,18.10us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,229356,4.63s,13.03us,0.00ns,13.05us,236.00ns,12.54us,32.42us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,57344,4.57s,51.76us,0.00ns,52.28us,2.55us,47.62us,69.66us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7948,4.51s,377.12us,0.00ns,377.43us,1.46us,375.76us,408.81us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,127953,4.62s,22.34us,0.00ns,23.12us,1.45us,21.55us,33.52us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,13296,4.51s,225.21us,0.00ns,225.61us,931.00ns,225.11us,236.31us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,13322,4.51s,224.84us,0.00ns,225.17us,0.98us,224.79us,236.45us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,139174,4.62s,20.81us,0.00ns,21.52us,2.05us,19.33us,33.88us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,125793,4.57s,23.89us,0.00ns,23.81us,1.20us,20.55us,30.44us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,50106,4.56s,59.62us,0.00ns,59.84us,2.02us,55.11us,80.69us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,50689,4.56s,58.97us,0.00ns,59.14us,1.93us,53.90us,77.64us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,97291,4.56s,29.65us,0.00ns,30.80us,2.65us,29.57us,43.97us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41449,4.56s,75.24us,0.00ns,72.34us,3.61us,67.99us,80.85us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41368,4.56s,75.23us,0.00ns,72.48us,3.57us,67.95us,83.59us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,205324,4.62s,14.58us,0.00ns,14.58us,175.00ns,13.81us,22.51us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,236945,4.62s,12.68us,0.00ns,12.63us,213.00ns,11.67us,18.21us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,56676,4.56s,51.93us,0.00ns,52.90us,2.20us,48.95us,73.41us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7952,4.51s,377.07us,1.00ns,377.27us,1.40us,375.72us,418.77us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,129658,4.66s,21.78us,0.00ns,22.81us,1.75us,21.50us,33.00us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,11829,4.51s,252.77us,0.00ns,253.59us,3.19us,251.94us,284.86us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,11881,4.51s,251.52us,0.00ns,252.49us,3.28us,251.00us,281.82us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,159128,4.62s,18.10us,0.00ns,18.81us,1.71us,17.33us,32.90us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,148496,4.57s,19.68us,0.00ns,20.17us,1.29us,18.65us,31.42us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,55766,4.56s,53.62us,0.00ns,53.76us,880.00ns,51.70us,81.92us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,56319,4.56s,52.94us,0.00ns,53.23us,1.23us,50.89us,62.88us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,578.39ms,31.00ns,0.00ns,31.00ns,6.00ns,28.00ns,2.10us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,528.30ms,38.00ns,0.00ns,38.00ns,7.00ns,36.00ns,3.29us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,528.17ms,28.00ns,0.00ns,28.00ns,7.00ns,25.00ns,3.70us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,528.13ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.88us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,528.53ms,17.00ns,0.00ns,18.00ns,3.00ns,15.00ns,1.65us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,528.20ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.53us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.94ms,24.00ns,0.00ns,24.00ns,22.00ns,22.00ns,20.57us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,528.21ms,23.00ns,0.00ns,23.00ns,6.00ns,20.00ns,2.82us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,179.00ns,0.00ns,181.00ns,13.00ns,171.00ns,5.15us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,537.57ms,28.00ns,0.00ns,28.00ns,5.00ns,25.00ns,1.94us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,527.65ms,26.00ns,0.00ns,26.00ns,6.00ns,24.00ns,2.65us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,477.56ms,20.00ns,0.00ns,20.00ns,15.00ns,18.00ns,10.38us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,478.07ms,15.00ns,0.00ns,15.00ns,18.00ns,12.00ns,14.61us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,627.98ms,62.00ns,0.00ns,63.00ns,11.00ns,58.00ns,7.66us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,578.09ms,42.00ns,0.00ns,42.00ns,7.00ns,39.00ns,2.46us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.81ms,34.00ns,0.00ns,34.00ns,6.00ns,31.00ns,2.04us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.80ms,38.00ns,0.00ns,38.00ns,7.00ns,36.00ns,2.54us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,528.10ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.20us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.88ms,24.00ns,0.00ns,24.00ns,5.00ns,22.00ns,2.48us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,528.16ms,21.00ns,0.00ns,22.00ns,5.00ns,19.00ns,2.60us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,477.98ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,2.83us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.95ms,22.00ns,0.00ns,23.00ns,3.00ns,20.00ns,1.78us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.70ms,22.00ns,0.00ns,23.00ns,6.00ns,20.00ns,2.66us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,182.00ns,0.00ns,184.00ns,14.00ns,173.00ns,3.11us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,527.75ms,25.00ns,0.00ns,26.00ns,12.00ns,22.00ns,10.39us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,528.12ms,28.00ns,0.00ns,28.00ns,18.00ns,26.00ns,16.05us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.60ms,17.00ns,0.00ns,17.00ns,5.00ns,15.00ns,2.83us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,527.71ms,16.00ns,0.00ns,16.00ns,35.00ns,14.00ns,20.09us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,528.17ms,42.00ns,0.00ns,42.00ns,17.00ns,39.00ns,15.74us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,528.10ms,29.00ns,0.00ns,29.00ns,6.00ns,27.00ns,2.10us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,33756,4.56s,89.34us,0.00ns,88.83us,1.55us,82.60us,106.08us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13755,4.51s,217.60us,0.00ns,218.07us,5.96us,205.06us,239.36us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13709,4.51s,218.17us,0.00ns,218.81us,6.24us,205.56us,239.23us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,248557,4.62s,11.16us,0.00ns,12.04us,1.83us,10.60us,18.92us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,308210,4.67s,9.51us,0.00ns,9.70us,1.00us,9.09us,17.92us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,18213,4.51s,164.42us,0.00ns,164.69us,1.10us,162.37us,197.15us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7951,4.51s,377.12us,0.00ns,377.28us,1.62us,374.62us,411.79us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,140175,4.67s,21.09us,0.00ns,21.07us,630.00ns,19.92us,30.69us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,212675,4.62s,14.21us,0.00ns,14.07us,260.00ns,13.67us,34.23us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,214574,4.62s,13.79us,0.00ns,13.95us,270.00ns,13.63us,36.10us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,84427,4.56s,34.33us,0.00ns,35.50us,2.77us,32.54us,53.67us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,77853,4.56s,38.00us,0.00ns,38.50us,1.72us,36.58us,53.11us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,16259,4.51s,183.81us,0.00ns,184.48us,1.85us,181.73us,218.98us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,16300,4.51s,184.03us,1.00ns,184.02us,1.84us,181.40us,217.65us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,19591,4.51s,153.39us,0.00ns,153.11us,1.79us,144.67us,173.09us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13644,4.51s,219.63us,0.00ns,219.84us,6.26us,207.46us,240.89us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13492,4.51s,221.11us,0.00ns,222.34us,6.73us,208.29us,242.64us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,280721,4.67s,9.62us,0.00ns,10.65us,2.06us,9.37us,18.81us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,305821,4.67s,9.57us,0.00ns,9.78us,0.98us,9.32us,18.30us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,11312,4.51s,264.20us,0.00ns,265.19us,6.05us,260.48us,316.72us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7962,4.51s,376.51us,0.00ns,376.78us,1.63us,374.59us,401.36us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,12221,4.51s,244.52us,0.00ns,245.46us,3.79us,242.45us,293.05us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,143469,4.67s,20.52us,0.00ns,20.58us,409.00ns,20.00us,32.63us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,213728,4.62s,13.83us,0.00ns,14.01us,261.00ns,13.64us,34.64us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,217588,4.62s,13.65us,0.00ns,13.76us,229.00ns,13.51us,26.97us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,214586,4.62s,13.91us,0.00ns,13.95us,166.00ns,13.72us,18.03us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,212476,4.62s,14.06us,0.00ns,14.08us,156.00ns,13.84us,25.06us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,10381,4.51s,288.45us,0.00ns,288.97us,1.74us,285.84us,301.51us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,10191,4.51s,294.47us,0.00ns,294.37us,2.38us,287.84us,308.83us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,535.82ms,39.00ns,0.00ns,39.00ns,19.00ns,37.00ns,17.65us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,528.19ms,33.00ns,0.00ns,33.00ns,29.00ns,29.00ns,19.55us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,527.63ms,29.00ns,0.00ns,29.00ns,7.00ns,26.00ns,2.35us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,528.09ms,38.00ns,0.00ns,38.00ns,6.00ns,35.00ns,1.98us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,537.93ms,20.00ns,0.00ns,20.00ns,7.00ns,18.00ns,3.07us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,528.09ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.29us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,627.76ms,31.00ns,0.00ns,31.00ns,12.00ns,28.00ns,10.20us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.53s,179.00ns,0.00ns,180.00ns,15.00ns,170.00ns,6.56us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,528.56ms,36.00ns,0.00ns,36.00ns,7.00ns,33.00ns,2.54us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,528.57ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,2.74us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,528.12ms,18.00ns,0.00ns,18.00ns,5.00ns,16.00ns,3.29us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,477.80ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,2.17us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,628.36ms,84.00ns,0.00ns,86.00ns,23.00ns,81.00ns,21.06us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,578.35ms,57.00ns,0.00ns,58.00ns,14.00ns,54.00ns,11.79us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,528.24ms,37.00ns,0.00ns,37.00ns,6.00ns,35.00ns,2.09us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,528.26ms,38.00ns,0.00ns,38.00ns,6.00ns,36.00ns,2.08us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,527.63ms,29.00ns,0.00ns,29.00ns,7.00ns,26.00ns,2.35us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,528.28ms,31.00ns,0.00ns,31.00ns,5.00ns,29.00ns,2.39us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,527.90ms,25.00ns,0.00ns,26.00ns,4.00ns,22.00ns,1.85us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,528.07ms,19.00ns,0.00ns,19.00ns,5.00ns,16.00ns,2.22us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,528.14ms,28.00ns,0.00ns,28.00ns,23.00ns,25.00ns,13.94us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,42,1000000,527.96ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,2.06us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.58s,185.00ns,0.00ns,187.00ns,14.00ns,178.00ns,2.04us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,527.88ms,32.00ns,0.00ns,32.00ns,7.00ns,28.00ns,2.56us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,477.88ms,32.00ns,0.00ns,32.00ns,6.00ns,29.00ns,2.23us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,527.90ms,19.00ns,0.00ns,19.00ns,6.00ns,17.00ns,3.02us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,527.18ms,15.00ns,0.00ns,15.00ns,12.00ns,13.00ns,10.51us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,578.31ms,53.00ns,0.00ns,53.00ns,7.00ns,49.00ns,2.70us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,528.42ms,35.00ns,0.00ns,35.00ns,6.00ns,33.00ns,2.48us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,138582,4.62s,21.59us,0.00ns,21.61us,1.20us,18.33us,43.11us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29383,4.56s,103.06us,0.00ns,102.07us,3.07us,97.00us,114.63us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,29404,4.56s,102.33us,0.00ns,101.99us,3.16us,97.36us,123.12us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,219951,4.62s,15.49us,0.00ns,13.61us,2.63us,9.90us,19.83us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,229035,4.62s,10.99us,0.00ns,13.06us,2.56us,10.64us,21.68us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,31584,4.56s,93.53us,0.00ns,94.95us,3.26us,91.51us,125.41us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7949,4.51s,377.15us,0.00ns,377.38us,1.90us,374.59us,416.97us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,136882,4.67s,21.73us,0.00ns,21.58us,464.00ns,20.73us,26.29us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,220992,4.62s,13.53us,0.00ns,13.54us,124.00ns,13.39us,21.63us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,219113,4.62s,13.64us,0.00ns,13.66us,121.00ns,13.47us,20.79us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,141130,4.62s,20.19us,0.00ns,21.22us,2.32us,18.48us,33.18us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,126808,4.57s,23.31us,0.00ns,23.62us,1.26us,21.72us,37.71us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,26946,4.56s,110.27us,0.00ns,111.30us,3.69us,103.75us,132.04us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,28207,4.56s,105.11us,0.00ns,106.33us,3.84us,100.80us,125.87us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,62630,4.56s,47.71us,0.00ns,47.87us,675.00ns,46.45us,55.93us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29476,4.56s,101.41us,5.00ns,101.74us,3.43us,97.82us,123.63us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,29212,4.56s,103.17us,0.00ns,102.67us,3.17us,97.76us,112.61us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,235695,4.62s,14.81us,0.00ns,12.70us,2.53us,9.56us,19.07us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,257059,4.67s,9.88us,0.00ns,11.64us,2.53us,9.48us,20.57us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,22182,4.51s,134.41us,1.00ns,135.21us,4.69us,125.06us,177.30us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7948,4.51s,377.14us,0.00ns,377.43us,1.97us,375.98us,427.16us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,12213,4.51s,244.53us,0.00ns,245.62us,4.07us,242.45us,294.78us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,140969,4.67s,20.83us,0.00ns,20.95us,421.00ns,20.40us,28.24us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,217616,4.62s,13.83us,0.00ns,13.75us,250.00ns,13.18us,18.83us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,219519,4.62s,13.81us,0.00ns,13.63us,293.00ns,13.17us,18.63us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,213562,4.62s,13.72us,0.00ns,14.01us,504.00ns,13.32us,18.98us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,218930,4.63s,13.50us,0.00ns,13.67us,422.00ns,13.13us,21.68us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,18445,4.52s,160.95us,0.00ns,162.62us,5.81us,143.44us,188.17us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,18526,4.51s,160.28us,0.00ns,161.90us,5.73us,142.13us,185.83us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,528.10ms,34.00ns,0.00ns,34.00ns,6.00ns,31.00ns,2.01us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,527.72ms,31.00ns,0.00ns,31.00ns,5.00ns,28.00ns,2.18us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,528.22ms,28.00ns,0.00ns,29.00ns,5.00ns,25.00ns,2.44us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.70ms,33.00ns,0.00ns,33.00ns,6.00ns,29.00ns,2.47us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,528.17ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,2.33us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,528.14ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,1.97us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,528.14ms,25.00ns,0.00ns,25.00ns,6.00ns,22.00ns,2.06us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.58s,193.00ns,0.00ns,195.00ns,16.00ns,182.00ns,7.71us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,527.82ms,30.00ns,0.00ns,30.00ns,7.00ns,27.00ns,2.20us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,527.76ms,31.00ns,0.00ns,32.00ns,7.00ns,29.00ns,2.38us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,527.78ms,16.00ns,0.00ns,17.00ns,4.00ns,14.00ns,2.69us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,527.63ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.39us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,728.32ms,76.00ns,0.00ns,78.00ns,9.00ns,71.00ns,2.34us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,578.20ms,49.00ns,0.00ns,50.00ns,7.00ns,46.00ns,2.14us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,528.46ms,35.00ns,0.00ns,35.00ns,7.00ns,32.00ns,2.54us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,528.18ms,38.00ns,0.00ns,38.00ns,6.00ns,35.00ns,2.59us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,528.06ms,28.00ns,0.00ns,28.00ns,19.00ns,25.00ns,15.63us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.68ms,26.00ns,0.00ns,26.00ns,6.00ns,23.00ns,2.25us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,528.09ms,26.00ns,0.00ns,26.00ns,6.00ns,23.00ns,2.11us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,527.58ms,19.00ns,0.00ns,19.00ns,6.00ns,17.00ns,3.45us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,527.69ms,22.00ns,0.00ns,22.00ns,4.00ns,20.00ns,1.97us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,527.61ms,24.00ns,0.00ns,24.00ns,6.00ns,21.00ns,2.36us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.58s,189.00ns,0.00ns,191.00ns,15.00ns,180.00ns,2.38us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,527.88ms,27.00ns,0.00ns,27.00ns,5.00ns,24.00ns,2.32us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,528.09ms,33.00ns,0.00ns,33.00ns,6.00ns,30.00ns,2.88us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,527.56ms,18.00ns,0.00ns,18.00ns,4.00ns,16.00ns,2.20us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,477.98ms,14.00ns,0.00ns,14.00ns,14.00ns,12.00ns,13.75us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,578.23ms,47.00ns,0.00ns,47.00ns,20.00ns,44.00ns,18.58us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,528.17ms,33.00ns,0.00ns,33.00ns,5.00ns,31.00ns,2.38us\n"
  },
  {
    "path": "benchmarks/record/x86_64/2023-08-24_2.csv",
    "content": "name,model,rebar_version,engine,engine_version,err,haystack_len,iters,total,median,mad,mean,stddev,min,max\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,17646,4.51s,168.70us,0.00ns,169.98us,2.70us,167.66us,181.22us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,16086,4.51s,182.12us,0.00ns,186.47us,5.33us,180.92us,203.43us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,17769,4.51s,168.67us,0.00ns,168.81us,665.00ns,167.39us,177.07us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,6366,4.51s,470.71us,0.00ns,471.26us,3.90us,463.53us,510.92us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,7061,4.51s,415.44us,0.00ns,424.86us,23.10us,400.42us,552.45us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,13907,4.56s,215.01us,0.00ns,215.39us,1.22us,213.60us,240.20us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,16288,4.51s,184.32us,0.00ns,184.16us,1.02us,182.09us,193.62us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,17501,4.51s,174.38us,0.00ns,171.39us,5.39us,161.90us,184.02us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,18412,4.51s,162.69us,0.00ns,162.91us,875.00ns,161.20us,181.26us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,7144,4.51s,414.73us,2.00ns,419.92us,17.52us,398.24us,494.54us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,16006,4.51s,187.46us,0.00ns,187.40us,1.12us,184.84us,196.02us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,9724,4.51s,309.27us,0.00ns,308.49us,3.87us,293.42us,320.67us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,3388,4.51s,882.60us,0.00ns,885.58us,9.72us,874.59us,946.86us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,4869,4.51s,610.11us,0.00ns,616.16us,24.47us,593.17us,755.72us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,9199,4.56s,325.52us,0.00ns,325.80us,1.22us,323.79us,342.24us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,9148,4.51s,331.24us,0.00ns,327.94us,5.85us,318.89us,344.28us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,10096,4.51s,296.81us,0.00ns,297.14us,1.24us,294.88us,308.09us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,8303,4.51s,353.35us,0.00ns,361.29us,11.76us,351.68us,388.66us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,6140,4.51s,485.69us,0.00ns,488.64us,6.18us,481.90us,511.84us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,2228,4.51s,1.35ms,1.00ns,1.35ms,8.65us,1.33ms,1.42ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,3603,4.51s,830.94us,0.00ns,832.65us,5.64us,827.01us,0.98ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,6813,4.56s,439.53us,0.00ns,440.00us,1.53us,437.36us,456.14us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,5561,4.51s,539.02us,0.00ns,539.47us,1.88us,532.11us,564.36us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,6071,4.51s,502.11us,0.00ns,494.17us,11.06us,476.87us,519.15us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,5669,4.51s,528.58us,0.00ns,529.21us,1.55us,527.52us,543.19us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,882.56ms,186.00ns,0.00ns,186.00ns,12.00ns,182.00ns,1.89us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,829.96ms,187.00ns,0.00ns,188.00ns,13.00ns,184.00ns,3.14us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,830.35ms,172.00ns,0.00ns,172.00ns,14.00ns,168.00ns,7.38us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,779.73ms,142.00ns,0.00ns,143.00ns,12.00ns,138.00ns,3.96us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,880.40ms,160.00ns,0.00ns,161.00ns,16.00ns,153.00ns,10.51us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.73s,293.00ns,0.00ns,295.00ns,18.00ns,285.00ns,8.18us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,880.35ms,188.00ns,0.00ns,189.00ns,14.00ns,184.00ns,5.95us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,830.42ms,169.00ns,0.00ns,169.00ns,12.00ns,164.00ns,5.05us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,829.91ms,170.00ns,0.00ns,170.00ns,12.00ns,165.00ns,3.94us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,880.26ms,159.00ns,0.00ns,159.00ns,12.00ns,153.00ns,2.48us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,880.21ms,207.00ns,0.00ns,207.00ns,13.00ns,203.00ns,2.56us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,1.23s,331.00ns,0.00ns,331.00ns,16.00ns,312.00ns,2.34us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,0.98s,263.00ns,0.00ns,263.00ns,17.00ns,255.00ns,7.14us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,0.98s,212.00ns,0.00ns,219.00ns,23.00ns,205.00ns,7.19us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,2.03s,438.00ns,0.00ns,439.00ns,19.00ns,430.00ns,4.65us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,1.23s,336.00ns,0.00ns,337.00ns,17.00ns,332.00ns,7.70us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,1.13s,321.00ns,0.00ns,321.00ns,13.00ns,313.00ns,2.58us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,1.33s,375.00ns,0.00ns,375.00ns,17.00ns,367.00ns,2.69us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,1.48s,496.00ns,0.00ns,497.00ns,26.00ns,484.00ns,13.53us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,1.08s,305.00ns,0.00ns,306.00ns,18.00ns,290.00ns,5.29us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.08s,322.00ns,0.00ns,323.00ns,20.00ns,313.00ns,8.24us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,2.33s,585.00ns,0.00ns,587.00ns,22.00ns,575.00ns,5.27us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,1.58s,556.00ns,0.00ns,557.00ns,23.00ns,543.00ns,6.75us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,1.48s,502.00ns,0.00ns,503.00ns,24.00ns,492.00ns,13.11us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.68s,569.00ns,0.00ns,569.00ns,24.00ns,555.00ns,12.34us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,579.18ms,50.00ns,0.00ns,50.00ns,7.00ns,47.00ns,2.37us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,579.50ms,49.00ns,0.00ns,49.00ns,6.00ns,47.00ns,2.21us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,579.20ms,45.00ns,0.00ns,45.00ns,7.00ns,43.00ns,2.58us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,579.37ms,36.00ns,0.00ns,37.00ns,8.00ns,31.00ns,5.61us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,530.30ms,25.00ns,0.00ns,25.00ns,7.00ns,22.00ns,2.51us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.53s,179.00ns,0.00ns,180.00ns,14.00ns,173.00ns,7.72us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,579.56ms,54.00ns,0.00ns,54.00ns,20.00ns,52.00ns,16.99us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,579.21ms,45.00ns,0.00ns,45.00ns,7.00ns,42.00ns,2.45us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,629.32ms,45.00ns,0.00ns,45.00ns,7.00ns,42.00ns,2.18us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,629.38ms,24.00ns,0.00ns,25.00ns,11.00ns,21.00ns,9.12us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,578.85ms,47.00ns,0.00ns,48.00ns,7.00ns,44.00ns,2.32us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,673211,4.78s,4.42us,0.00ns,4.42us,82.00ns,4.33us,28.20us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,707854,4.78s,4.23us,0.00ns,4.21us,82.00ns,4.10us,11.34us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,707238,4.83s,4.23us,0.00ns,4.21us,82.00ns,4.10us,10.66us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,138695,4.57s,21.51us,0.00ns,21.60us,220.00ns,21.48us,30.75us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,26168,4.56s,114.38us,0.00ns,114.61us,1.43us,114.35us,148.99us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,391377,4.87s,7.36us,0.00ns,7.34us,115.00ns,7.12us,17.67us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,667161,4.83s,4.46us,0.00ns,4.46us,150.00ns,4.39us,68.83us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,718271,4.88s,4.14us,0.00ns,4.15us,65.00ns,4.10us,12.31us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,718079,4.78s,4.14us,0.00ns,4.15us,65.00ns,4.10us,12.24us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,26137,4.51s,114.38us,0.00ns,114.75us,2.18us,114.35us,144.53us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,682190,4.88s,4.34us,0.00ns,4.37us,93.00ns,4.28us,12.18us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,572662,4.78s,5.20us,0.00ns,5.21us,93.00ns,5.14us,28.05us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,77830,4.56s,38.19us,0.00ns,38.51us,748.00ns,38.16us,64.45us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,17446,4.51s,171.59us,0.00ns,171.93us,1.71us,171.54us,210.80us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,265719,4.72s,10.94us,0.00ns,10.96us,111.00ns,10.91us,17.56us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,554640,4.73s,5.24us,0.00ns,5.38us,385.00ns,5.19us,25.63us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,550611,4.83s,5.41us,0.00ns,5.41us,97.00ns,5.29us,30.06us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,577052,4.83s,5.16us,0.00ns,5.17us,81.00ns,5.13us,30.09us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,388484,4.72s,7.68us,0.00ns,7.69us,91.00ns,7.64us,20.37us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,52881,4.56s,57.22us,0.00ns,56.69us,2.17us,55.09us,73.59us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,13090,4.51s,228.78us,0.00ns,229.15us,1.00us,228.74us,259.65us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,188169,4.67s,15.59us,0.00ns,15.61us,156.00ns,15.43us,23.61us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,382259,4.72s,7.80us,0.00ns,7.81us,104.00ns,7.70us,11.79us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,389145,4.67s,7.66us,0.00ns,7.67us,90.00ns,7.62us,17.82us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,378395,4.72s,7.81us,0.00ns,7.90us,238.00ns,7.61us,12.95us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,577.45ms,14.00ns,0.00ns,14.00ns,38.00ns,13.00ns,21.71us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,527.46ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,2.45us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,527.82ms,15.00ns,0.00ns,15.00ns,11.00ns,13.00ns,10.23us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,678.12ms,34.00ns,0.00ns,34.00ns,6.00ns,31.00ns,3.31us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,778.54ms,145.00ns,0.00ns,145.00ns,11.00ns,141.00ns,2.10us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.48s,159.00ns,0.00ns,160.00ns,14.00ns,155.00ns,7.20us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,477.45ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.31us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,577.94ms,14.00ns,0.00ns,14.00ns,18.00ns,12.00ns,14.00us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,477.76ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.46us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,778.72ms,144.00ns,0.00ns,145.00ns,18.00ns,141.00ns,13.38us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,628.20ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.27us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,477.59ms,19.00ns,0.00ns,19.00ns,7.00ns,17.00ns,2.83us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,677.62ms,60.00ns,0.00ns,60.00ns,10.00ns,56.00ns,5.16us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,929.74ms,208.00ns,0.00ns,209.00ns,14.00ns,205.00ns,2.51us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.48s,168.00ns,0.00ns,169.00ns,12.00ns,160.00ns,2.32us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,477.08ms,19.00ns,0.00ns,20.00ns,5.00ns,17.00ns,2.18us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,589.62ms,18.00ns,0.00ns,18.00ns,4.00ns,16.00ns,2.08us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,527.35ms,19.00ns,0.00ns,19.00ns,14.00ns,16.00ns,13.61us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,476.94ms,22.00ns,0.00ns,22.00ns,5.00ns,20.00ns,2.39us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,677.98ms,79.00ns,0.00ns,79.00ns,16.00ns,70.00ns,13.07us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.03s,272.00ns,0.00ns,273.00ns,18.00ns,269.00ns,6.41us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.48s,171.00ns,0.00ns,172.00ns,12.00ns,165.00ns,2.22us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,477.26ms,22.00ns,0.00ns,23.00ns,6.00ns,20.00ns,2.06us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,627.78ms,21.00ns,0.00ns,21.00ns,21.00ns,19.00ns,20.74us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,577.53ms,21.00ns,0.00ns,21.00ns,4.00ns,19.00ns,2.67us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,577.85ms,12.00ns,0.00ns,12.00ns,4.00ns,9.00ns,2.24us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,477.40ms,13.00ns,0.00ns,13.00ns,25.00ns,11.00ns,21.98us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,477.47ms,13.00ns,0.00ns,13.00ns,19.00ns,11.00ns,18.53us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,577.85ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,2.09us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,628.04ms,28.00ns,0.00ns,27.00ns,6.00ns,21.00ns,2.33us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.48s,157.00ns,0.00ns,158.00ns,12.00ns,153.00ns,7.77us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,477.53ms,12.00ns,0.00ns,12.00ns,3.00ns,11.00ns,2.66us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,577.97ms,12.00ns,0.00ns,12.00ns,3.00ns,11.00ns,1.90us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,477.62ms,12.00ns,0.00ns,12.00ns,2.00ns,10.00ns,1.60us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,477.42ms,23.00ns,0.00ns,25.00ns,12.00ns,21.00ns,10.58us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,527.73ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.89us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,477.15ms,14.00ns,0.00ns,14.00ns,30.00ns,12.00ns,20.60us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,577.42ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,2.80us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,527.59ms,36.00ns,0.00ns,35.00ns,7.00ns,28.00ns,2.14us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.48s,156.00ns,0.00ns,157.00ns,14.00ns,152.00ns,7.49us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,527.78ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.25us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,477.44ms,13.00ns,0.00ns,13.00ns,3.00ns,11.00ns,1.62us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,527.18ms,15.00ns,0.00ns,15.00ns,32.00ns,12.00ns,20.23us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,578.01ms,15.00ns,0.00ns,15.00ns,6.00ns,13.00ns,4.48us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,527.31ms,18.00ns,0.00ns,18.00ns,6.00ns,16.00ns,2.88us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,627.84ms,44.00ns,0.00ns,44.00ns,18.00ns,35.00ns,17.13us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.48s,157.00ns,0.00ns,158.00ns,11.00ns,153.00ns,2.20us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,476.98ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.46us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,577.64ms,13.00ns,0.00ns,13.00ns,4.00ns,11.00ns,2.08us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,476.93ms,14.00ns,0.00ns,14.00ns,17.00ns,12.00ns,13.89us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,,1000000,477.00ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,3.24us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,,1000000,477.23ms,11.00ns,0.00ns,11.00ns,23.00ns,9.00ns,17.76us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,,1000000,477.49ms,11.00ns,0.00ns,11.00ns,18.00ns,9.00ns,17.89us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,,1000000,577.94ms,11.00ns,0.00ns,11.00ns,1.00ns,9.00ns,414.00ns\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,,1000000,577.72ms,10.00ns,0.00ns,10.00ns,4.00ns,9.00ns,2.42us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,,1000000,1.48s,156.00ns,0.00ns,157.00ns,10.00ns,152.00ns,2.31us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,,1000000,477.34ms,11.00ns,0.00ns,11.00ns,13.00ns,10.00ns,11.59us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,,1000000,477.30ms,10.00ns,0.00ns,10.00ns,4.00ns,8.00ns,3.62us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,,1000000,477.71ms,10.00ns,0.00ns,10.00ns,5.00ns,8.00ns,2.78us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,,1000000,527.70ms,10.00ns,0.00ns,10.00ns,22.00ns,8.00ns,21.97us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,,1000000,478.59ms,10.00ns,0.00ns,10.00ns,5.00ns,9.00ns,2.53us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,,1000000,527.58ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,3.22us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,,1000000,477.30ms,11.00ns,0.00ns,11.00ns,5.00ns,9.00ns,3.36us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,,1000000,527.40ms,10.00ns,0.00ns,10.00ns,4.00ns,9.00ns,2.69us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,,1000000,1.48s,154.00ns,0.00ns,155.00ns,12.00ns,150.00ns,2.25us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,,1000000,477.29ms,11.00ns,0.00ns,12.00ns,28.00ns,9.00ns,22.21us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,,1000000,477.31ms,10.00ns,0.00ns,10.00ns,3.00ns,9.00ns,3.04us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,,1000000,477.59ms,10.00ns,0.00ns,10.00ns,2.00ns,9.00ns,1.03us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,,1000000,577.72ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,1.89us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,,1000000,477.07ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.44us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,,1000000,527.74ms,10.00ns,0.00ns,11.00ns,2.00ns,9.00ns,2.06us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,,1000000,1.48s,160.00ns,0.00ns,161.00ns,19.00ns,156.00ns,12.35us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,,1000000,527.58ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,1.76us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,,1000000,477.29ms,11.00ns,0.00ns,11.00ns,3.00ns,9.00ns,1.55us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,,1000000,477.69ms,10.00ns,0.00ns,10.00ns,5.00ns,9.00ns,3.23us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,504760,4.73s,5.90us,0.00ns,5.91us,96.00ns,5.81us,28.73us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,578627,4.78s,5.18us,0.00ns,5.15us,112.00ns,4.93us,10.95us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,584928,4.83s,5.14us,0.00ns,5.10us,125.00ns,4.92us,11.86us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,131482,4.57s,22.67us,0.00ns,22.78us,249.00ns,22.59us,47.38us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,25884,4.56s,115.41us,0.00ns,115.87us,1.25us,115.26us,140.61us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,352387,4.82s,8.17us,0.00ns,8.18us,109.00ns,8.03us,17.39us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,594123,4.78s,5.01us,0.00ns,5.02us,73.00ns,4.94us,13.80us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,594864,4.78s,5.00us,0.00ns,5.01us,86.00ns,4.93us,25.36us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,593471,4.83s,5.02us,0.00ns,5.02us,81.00ns,4.94us,12.66us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,586237,4.78s,5.05us,0.00ns,5.08us,110.00ns,4.96us,14.68us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,386467,4.72s,7.71us,0.00ns,7.73us,98.00ns,7.59us,31.80us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,71635,4.56s,41.76us,0.00ns,41.84us,332.00ns,41.58us,71.17us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,17147,4.51s,174.63us,0.00ns,174.93us,1.13us,173.73us,196.63us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,221187,4.72s,13.17us,0.00ns,13.22us,276.00ns,12.99us,19.76us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,387341,4.72s,7.70us,0.00ns,7.71us,96.00ns,7.57us,13.52us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,387940,4.72s,7.69us,0.00ns,7.70us,120.00ns,7.56us,22.09us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,391324,4.72s,7.62us,0.00ns,7.63us,100.00ns,7.53us,19.38us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,281819,4.67s,10.59us,0.00ns,10.61us,109.00ns,10.50us,19.29us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,49478,4.56s,60.29us,0.00ns,60.60us,682.00ns,59.55us,66.85us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,12922,4.51s,231.66us,0.00ns,232.14us,1.53us,231.51us,279.35us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,158111,4.67s,18.61us,0.00ns,18.64us,151.00ns,18.50us,26.58us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,272615,4.67s,10.87us,0.00ns,10.97us,267.00ns,10.79us,16.70us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,276725,4.67s,10.77us,0.00ns,10.81us,215.00ns,10.68us,31.18us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,276785,4.62s,10.77us,0.00ns,10.81us,205.00ns,10.71us,15.08us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,476.99ms,19.00ns,0.00ns,19.00ns,20.00ns,17.00ns,19.72us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,477.39ms,19.00ns,0.00ns,19.00ns,6.00ns,17.00ns,2.60us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,527.74ms,19.00ns,0.00ns,19.00ns,4.00ns,16.00ns,2.70us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,677.82ms,36.00ns,0.00ns,36.00ns,38.00ns,33.00ns,20.16us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,878.58ms,152.00ns,0.00ns,152.00ns,15.00ns,146.00ns,10.06us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.48s,161.00ns,0.00ns,162.00ns,9.00ns,157.00ns,1.80us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,476.93ms,20.00ns,0.00ns,20.00ns,9.00ns,17.00ns,7.81us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,627.53ms,19.00ns,0.00ns,19.00ns,4.00ns,17.00ns,1.89us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,627.42ms,19.00ns,0.00ns,19.00ns,7.00ns,17.00ns,5.75us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,878.62ms,153.00ns,0.00ns,153.00ns,15.00ns,146.00ns,7.24us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,627.40ms,20.00ns,0.00ns,20.00ns,6.00ns,17.00ns,3.69us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,476.96ms,28.00ns,0.00ns,28.00ns,8.00ns,25.00ns,4.64us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,577.48ms,61.00ns,0.00ns,60.00ns,8.00ns,53.00ns,2.34us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,0.98s,223.00ns,0.00ns,224.00ns,14.00ns,215.00ns,2.24us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.53s,175.00ns,0.00ns,176.00ns,12.00ns,167.00ns,1.98us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,577.19ms,29.00ns,0.00ns,29.00ns,7.00ns,26.00ns,2.55us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,527.28ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.40us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,527.41ms,28.00ns,0.00ns,28.00ns,6.00ns,24.00ns,2.54us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,627.58ms,37.00ns,0.00ns,38.00ns,14.00ns,33.00ns,11.44us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,677.54ms,92.00ns,0.00ns,92.00ns,10.00ns,75.00ns,2.23us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.08s,285.00ns,0.00ns,286.00ns,29.00ns,280.00ns,24.29us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.53s,184.00ns,0.00ns,185.00ns,13.00ns,177.00ns,2.20us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,527.53ms,38.00ns,0.00ns,38.00ns,38.00ns,34.00ns,21.80us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,578.08ms,37.00ns,0.00ns,37.00ns,6.00ns,33.00ns,2.83us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,627.60ms,37.00ns,0.00ns,37.00ns,11.00ns,33.00ns,8.89us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,477.13ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.05us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,628.01ms,17.00ns,0.00ns,17.00ns,6.00ns,15.00ns,2.22us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,527.11ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,2.87us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,577.76ms,16.00ns,0.00ns,16.00ns,11.00ns,13.00ns,10.44us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,627.36ms,30.00ns,0.00ns,28.00ns,7.00ns,21.00ns,2.65us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.48s,157.00ns,0.00ns,158.00ns,16.00ns,152.00ns,11.72us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,527.28ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,1.99us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,527.09ms,16.00ns,0.00ns,16.00ns,11.00ns,14.00ns,9.99us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,577.35ms,16.00ns,0.00ns,16.00ns,15.00ns,14.00ns,14.20us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,527.20ms,23.00ns,0.00ns,24.00ns,13.00ns,21.00ns,12.06us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,577.39ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.20us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,628.04ms,20.00ns,0.00ns,20.00ns,4.00ns,18.00ns,2.04us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,527.15ms,20.00ns,0.00ns,20.00ns,4.00ns,17.00ns,3.07us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,527.15ms,36.00ns,0.00ns,36.00ns,25.00ns,27.00ns,18.83us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.48s,160.00ns,0.00ns,161.00ns,11.00ns,155.00ns,2.44us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,527.28ms,20.00ns,0.00ns,20.00ns,5.00ns,18.00ns,2.44us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,527.39ms,20.00ns,0.00ns,20.00ns,18.00ns,18.00ns,17.77us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,527.91ms,18.00ns,0.00ns,18.00ns,12.00ns,16.00ns,8.25us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,527.21ms,29.00ns,0.00ns,29.00ns,15.00ns,27.00ns,11.57us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,627.84ms,23.00ns,0.00ns,23.00ns,6.00ns,21.00ns,3.21us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,577.25ms,44.00ns,0.00ns,44.00ns,71.00ns,41.00ns,70.57us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.48s,165.00ns,0.00ns,166.00ns,11.00ns,158.00ns,2.15us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,627.43ms,25.00ns,0.00ns,25.00ns,76.00ns,21.00ns,75.67us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,527.25ms,28.00ns,0.00ns,28.00ns,32.00ns,26.00ns,20.11us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,477.32ms,22.00ns,0.00ns,22.00ns,5.00ns,19.00ns,2.24us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,89249,4.57s,33.46us,0.00ns,33.58us,530.00ns,32.87us,59.04us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,52389,4.56s,57.16us,0.00ns,57.23us,584.00ns,55.88us,75.14us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,53168,4.56s,56.24us,0.00ns,56.39us,548.00ns,55.49us,75.27us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,35471,4.56s,84.33us,0.00ns,84.54us,934.00ns,83.25us,98.18us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,18438,4.51s,156.11us,0.00ns,162.68us,8.30us,154.30us,207.38us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,51290,4.56s,58.03us,0.00ns,58.16us,838.00ns,56.73us,92.42us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,53499,4.56s,55.86us,0.00ns,56.04us,794.00ns,54.48us,76.27us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,64988,4.57s,45.97us,0.00ns,46.13us,709.00ns,44.67us,68.62us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,62362,4.57s,48.23us,0.00ns,48.07us,1.54us,45.16us,72.70us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,18787,4.52s,157.97us,0.00ns,159.65us,5.52us,154.47us,238.26us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,57596,4.57s,51.31us,0.00ns,52.05us,1.14us,50.81us,71.28us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,24905,4.52s,118.63us,0.00ns,120.43us,3.83us,116.03us,149.15us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,15807,4.52s,189.30us,0.00ns,189.76us,1.86us,182.91us,234.62us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,11548,4.52s,252.04us,0.00ns,259.77us,10.50us,250.17us,316.30us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,21597,4.56s,138.41us,0.00ns,138.59us,894.00ns,136.51us,149.62us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,24370,4.56s,122.99us,0.00ns,123.07us,1.34us,120.83us,140.45us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,26718,4.52s,112.07us,0.00ns,112.25us,653.00ns,110.86us,133.09us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,26298,4.52s,113.72us,0.00ns,114.04us,1.14us,112.14us,136.71us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,18237,4.52s,160.66us,0.00ns,164.47us,6.85us,155.14us,189.53us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,9987,4.51s,300.00us,0.00ns,300.37us,1.39us,298.30us,312.24us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,8599,4.51s,347.14us,0.00ns,348.87us,4.90us,345.48us,394.73us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,15829,4.56s,188.58us,0.00ns,189.21us,2.14us,184.29us,203.57us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,17993,4.51s,165.90us,0.00ns,166.70us,2.20us,164.02us,180.71us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,20201,4.51s,148.27us,0.00ns,148.48us,2.40us,143.79us,172.60us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,18844,4.51s,165.37us,0.00ns,159.18us,8.54us,148.55us,189.06us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,693.74ms,46.00ns,0.00ns,46.00ns,7.00ns,42.00ns,2.59us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,584.30ms,47.00ns,0.00ns,47.00ns,8.00ns,44.00ns,2.96us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,577.61ms,45.00ns,0.00ns,45.00ns,7.00ns,42.00ns,2.11us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,577.79ms,53.00ns,0.00ns,53.00ns,7.00ns,48.00ns,2.09us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,778.76ms,157.00ns,0.00ns,158.00ns,13.00ns,144.00ns,4.28us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.53s,186.00ns,0.00ns,188.00ns,13.00ns,179.00ns,2.13us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,577.73ms,49.00ns,0.00ns,49.00ns,6.00ns,45.00ns,2.15us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,577.59ms,44.00ns,0.00ns,44.00ns,11.00ns,41.00ns,8.01us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,577.42ms,44.00ns,0.00ns,44.00ns,7.00ns,41.00ns,2.49us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,828.83ms,157.00ns,0.00ns,160.00ns,22.00ns,145.00ns,13.34us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,577.72ms,51.00ns,0.00ns,51.00ns,20.00ns,47.00ns,19.38us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,629.43ms,76.00ns,0.00ns,76.00ns,8.00ns,71.00ns,2.08us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,629.12ms,96.00ns,0.00ns,96.00ns,16.00ns,91.00ns,13.10us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,0.98s,205.00ns,0.00ns,207.00ns,21.00ns,202.00ns,10.57us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.63s,224.00ns,0.00ns,225.00ns,17.00ns,215.00ns,7.88us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,629.61ms,86.00ns,0.00ns,87.00ns,9.00ns,81.00ns,2.50us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,679.21ms,98.00ns,0.00ns,98.00ns,9.00ns,90.00ns,2.39us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,629.23ms,88.00ns,0.00ns,89.00ns,9.00ns,83.00ns,2.12us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,729.82ms,122.00ns,0.00ns,123.00ns,14.00ns,115.00ns,9.93us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,829.67ms,134.00ns,0.00ns,135.00ns,12.00ns,127.00ns,2.11us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.03s,273.00ns,0.00ns,276.00ns,19.00ns,269.00ns,1.88us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.73s,269.00ns,0.00ns,271.00ns,15.00ns,257.00ns,2.49us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,730.19ms,134.00ns,0.00ns,135.00ns,10.00ns,129.00ns,2.24us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,729.57ms,138.00ns,0.00ns,138.00ns,11.00ns,130.00ns,2.41us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,730.45ms,136.00ns,0.00ns,137.00ns,11.00ns,129.00ns,2.11us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,527.63ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,3.19us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,527.58ms,30.00ns,0.00ns,30.00ns,5.00ns,28.00ns,2.39us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,527.58ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,2.32us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,527.74ms,20.00ns,0.00ns,20.00ns,5.00ns,18.00ns,2.49us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,527.65ms,24.00ns,0.00ns,26.00ns,8.00ns,22.00ns,4.40us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.48s,162.00ns,0.00ns,163.00ns,11.00ns,156.00ns,2.30us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,527.61ms,31.00ns,0.00ns,31.00ns,3.00ns,29.00ns,1.95us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,527.35ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,3.46us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,527.73ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.29us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,527.58ms,24.00ns,0.00ns,26.00ns,7.00ns,21.00ns,2.66us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,527.82ms,32.00ns,0.00ns,32.00ns,21.00ns,30.00ns,20.23us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,579.35ms,52.00ns,0.00ns,52.00ns,6.00ns,48.00ns,2.02us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,529.15ms,34.00ns,0.00ns,34.00ns,25.00ns,31.00ns,18.48us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,530.06ms,31.00ns,0.00ns,31.00ns,19.00ns,28.00ns,18.50us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.53s,185.00ns,0.00ns,186.00ns,14.00ns,179.00ns,5.17us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,578.75ms,50.00ns,0.00ns,51.00ns,20.00ns,47.00ns,17.45us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,579.47ms,56.00ns,0.00ns,56.00ns,7.00ns,52.00ns,2.39us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,579.11ms,52.00ns,0.00ns,52.00ns,24.00ns,47.00ns,17.72us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,578.83ms,69.00ns,0.00ns,69.00ns,28.00ns,64.00ns,19.25us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,579.02ms,45.00ns,0.00ns,45.00ns,18.00ns,41.00ns,16.51us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,528.92ms,39.00ns,0.00ns,39.00ns,7.00ns,35.00ns,2.86us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.58s,208.00ns,0.00ns,209.00ns,15.00ns,202.00ns,7.69us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,629.21ms,90.00ns,0.00ns,91.00ns,16.00ns,87.00ns,13.57us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,629.05ms,69.00ns,0.00ns,69.00ns,8.00ns,63.00ns,2.31us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,628.82ms,80.00ns,0.00ns,80.00ns,8.00ns,73.00ns,2.01us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,7550,4.51s,396.95us,0.00ns,397.32us,1.74us,393.61us,421.16us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,7624,4.51s,392.97us,0.00ns,393.47us,1.49us,391.19us,405.46us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,8444,4.51s,354.81us,0.00ns,355.28us,1.45us,350.04us,366.67us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,3624,4.51s,827.47us,2.00ns,827.84us,6.94us,808.00us,872.14us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,3797,4.51s,789.67us,0.00ns,790.16us,10.04us,744.39us,846.64us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,9610,4.56s,311.43us,1.00ns,311.84us,1.39us,309.93us,329.56us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,7683,4.51s,387.53us,0.00ns,390.44us,5.19us,385.70us,411.16us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,8479,4.51s,352.47us,0.00ns,353.81us,5.03us,349.58us,391.57us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,8555,4.51s,350.50us,0.00ns,350.67us,1.10us,347.99us,360.31us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,3804,4.51s,787.90us,1.00ns,788.62us,5.76us,771.99us,846.56us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,7400,4.51s,404.96us,0.00ns,405.41us,1.22us,404.53us,417.79us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,1.33s,439.00ns,0.00ns,440.00ns,18.00ns,434.00ns,8.10us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,1.33s,433.00ns,0.00ns,434.00ns,18.00ns,429.00ns,3.97us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.28s,392.00ns,0.00ns,393.00ns,18.00ns,389.00ns,8.21us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,1.03s,295.00ns,0.00ns,295.00ns,18.00ns,288.00ns,10.70us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,881.51ms,211.00ns,0.00ns,211.00ns,14.00ns,204.00ns,2.29us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,2.13s,483.00ns,0.00ns,485.00ns,17.00ns,477.00ns,6.02us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,1.33s,427.00ns,0.00ns,428.00ns,16.00ns,424.00ns,5.89us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.23s,394.00ns,0.00ns,394.00ns,16.00ns,390.00ns,3.53us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.23s,394.00ns,0.00ns,394.00ns,18.00ns,390.00ns,5.02us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,930.75ms,211.00ns,0.00ns,211.00ns,19.00ns,203.00ns,12.32us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,1.38s,451.00ns,0.00ns,451.00ns,19.00ns,445.00ns,11.14us\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,33335253,274,4.56s,10.97ms,15.00ns,10.98ms,40.44us,10.88ms,11.12ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,33335253,285,4.56s,10.58ms,0.00ns,10.56ms,115.11us,10.37ms,10.91ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,33335253,285,4.56s,10.56ms,0.00ns,10.55ms,117.78us,10.34ms,11.01ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,33335253,424,4.56s,7.21ms,693.00ns,7.09ms,227.42us,6.66ms,7.49ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,33335253,437,4.56s,6.86ms,0.00ns,6.87ms,31.51us,6.77ms,7.07ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/binary,2.5.0,,33335253,3276,4.56s,914.42us,3.00ns,915.95us,11.30us,888.26us,0.99ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,33335253,308,4.56s,9.68ms,116.00ns,9.75ms,227.97us,9.47ms,10.62ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,33335253,146,4.56s,20.61ms,296.00ns,20.62ms,35.44us,20.57ms,20.76ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,33335253,218,4.56s,13.76ms,143.00ns,13.77ms,48.06us,13.68ms,14.05ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,33335253,317,4.56s,9.46ms,0.00ns,9.47ms,52.55us,9.38ms,9.86ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,33335253,414,4.56s,7.41ms,498.00ns,7.25ms,291.39us,6.72ms,7.56ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,33335253,429,4.56s,7.18ms,0.00ns,6.99ms,242.20us,6.69ms,7.31ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,33335253,542,4.56s,5.45ms,326.00ns,5.54ms,164.86us,5.28ms,5.90ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,33335253,554,4.56s,5.41ms,57.00ns,5.42ms,40.81us,5.28ms,5.59ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,22247,4.56s,134.52us,0.00ns,134.81us,1.27us,133.63us,156.45us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13710,4.51s,224.36us,0.00ns,218.80us,9.13us,205.69us,257.27us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13741,4.51s,223.93us,0.00ns,218.29us,9.05us,205.73us,236.86us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,91373,4.56s,28.83us,0.00ns,32.79us,5.96us,28.29us,54.37us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,80217,4.56s,42.79us,0.00ns,37.36us,6.11us,30.33us,48.40us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3150,4.51s,945.64us,2.00ns,0.95ms,18.25us,932.72us,1.04ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2905,4.51s,1.03ms,0.00ns,1.03ms,2.70us,1.03ms,1.11ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4445,4.51s,669.99us,0.00ns,674.88us,11.58us,664.14us,749.78us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,52741,4.56s,55.65us,0.00ns,56.52us,1.16us,55.24us,75.69us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,82599,4.56s,36.21us,0.00ns,36.27us,317.00ns,36.01us,43.36us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,78786,4.56s,38.26us,0.00ns,38.03us,838.00ns,35.92us,47.01us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,74249,4.56s,40.98us,0.00ns,40.36us,1.47us,37.52us,59.01us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,76089,4.56s,38.65us,0.00ns,39.39us,1.45us,37.37us,145.06us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2931,4.51s,1.03ms,0.00ns,1.02ms,26.22us,0.96ms,1.09ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2958,4.51s,1.02ms,1.00ns,1.01ms,29.85us,0.96ms,1.11ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,24148,4.56s,123.96us,0.00ns,124.20us,1.49us,121.70us,144.12us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13768,4.51s,223.68us,0.00ns,217.87us,9.12us,205.67us,235.97us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13847,4.51s,223.67us,0.00ns,216.62us,9.46us,205.57us,251.74us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,73985,4.56s,43.94us,0.00ns,40.51us,5.57us,31.33us,52.04us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,84379,4.57s,29.75us,0.00ns,35.51us,6.45us,28.82us,49.44us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3229,4.51s,931.29us,0.00ns,929.18us,25.97us,867.53us,1.01ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2958,4.51s,1.01ms,1.00ns,1.01ms,3.48us,1.01ms,1.06ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4528,4.51s,657.18us,0.00ns,662.58us,11.07us,651.50us,712.36us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,52307,4.56s,56.29us,0.00ns,57.02us,1.06us,55.80us,78.95us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,79423,4.56s,37.67us,0.00ns,37.73us,320.00ns,37.45us,48.32us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,75955,4.56s,39.77us,0.00ns,39.45us,915.00ns,37.41us,47.12us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,74661,4.56s,40.76us,0.00ns,40.14us,1.04us,38.47us,51.80us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,75530,4.56s,38.86us,0.00ns,39.68us,1.05us,38.45us,53.71us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3146,4.51s,0.96ms,1.00ns,0.95ms,28.05us,893.80us,1.06ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3137,4.51s,0.96ms,0.00ns,0.96ms,23.75us,893.89us,1.05ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,17078,4.51s,175.24us,0.00ns,175.63us,2.06us,172.94us,203.38us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13852,4.51s,223.62us,0.00ns,216.55us,9.31us,205.52us,246.91us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13736,4.51s,223.77us,0.00ns,218.38us,9.12us,205.79us,248.05us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,83460,4.56s,40.24us,0.00ns,35.91us,6.45us,26.63us,47.67us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,84338,4.56s,30.14us,0.00ns,35.53us,6.24us,28.89us,51.26us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3560,4.51s,840.90us,2.00ns,842.77us,8.21us,829.87us,887.53us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2951,4.51s,1.01ms,0.00ns,1.02ms,8.08us,1.01ms,1.06ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4531,4.51s,657.13us,0.00ns,662.10us,11.05us,651.41us,718.44us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,53973,4.56s,54.29us,0.00ns,55.23us,1.57us,53.78us,77.95us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,78951,4.56s,37.89us,0.00ns,37.95us,343.00ns,37.69us,64.51us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,75919,4.56s,39.76us,0.00ns,39.47us,806.00ns,37.74us,44.91us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,73210,4.56s,41.58us,0.00ns,40.94us,1.08us,39.25us,64.63us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,73715,4.56s,39.83us,0.00ns,40.66us,1.13us,39.34us,63.70us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3281,4.51s,909.38us,0.00ns,914.59us,17.81us,892.83us,1.00ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3295,4.51s,904.53us,0.00ns,910.61us,15.80us,890.17us,0.99ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,33066,4.56s,90.53us,0.00ns,90.69us,840.00ns,88.70us,108.78us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,14111,4.51s,218.37us,0.00ns,212.57us,9.09us,200.10us,253.66us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,14104,4.51s,218.71us,0.00ns,212.66us,9.22us,199.91us,241.14us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,80815,4.56s,41.77us,0.00ns,37.08us,6.29us,28.53us,50.36us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,88262,4.56s,28.49us,0.00ns,33.95us,6.63us,27.82us,47.88us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3354,4.51s,888.99us,6.00ns,894.62us,12.07us,872.03us,0.96ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2963,4.51s,1.01ms,0.00ns,1.01ms,2.68us,1.01ms,1.06ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,52040,4.56s,56.64us,0.00ns,57.30us,1.02us,56.09us,80.69us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,79433,4.56s,37.68us,0.00ns,37.72us,272.00ns,37.47us,44.90us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,79515,4.56s,37.64us,0.00ns,37.69us,270.00ns,37.44us,46.56us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,270792,4.67s,11.13us,0.00ns,11.04us,227.00ns,10.39us,15.08us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,273771,4.67s,10.99us,0.00ns,10.92us,240.00ns,10.39us,15.11us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3245,4.51s,913.57us,0.00ns,924.55us,45.44us,861.16us,1.03ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3268,4.51s,904.90us,2.00ns,918.01us,44.75us,861.93us,1.03ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,24266,4.56s,122.93us,0.00ns,123.60us,2.44us,122.00us,143.11us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13861,4.51s,223.90us,0.00ns,216.40us,9.31us,206.07us,242.32us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13774,4.51s,224.14us,0.00ns,217.76us,9.28us,206.15us,249.27us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,77503,4.56s,42.31us,0.00ns,38.67us,5.91us,29.18us,51.60us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,85326,4.57s,29.25us,0.00ns,35.12us,6.47us,28.48us,51.41us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3176,4.51s,938.90us,7.00ns,944.76us,11.90us,928.92us,1.01ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2961,4.51s,1.01ms,0.00ns,1.01ms,2.76us,1.01ms,1.05ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4550,4.51s,657.99us,0.00ns,659.44us,5.56us,654.19us,717.86us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,51956,4.56s,56.97us,0.00ns,57.40us,875.00ns,56.34us,68.65us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,78634,4.57s,38.07us,0.00ns,38.11us,276.00ns,37.80us,45.12us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,75219,4.56s,40.16us,0.00ns,39.84us,877.00ns,37.77us,50.48us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3120,4.51s,0.96ms,1.00ns,0.96ms,10.68us,936.62us,1.00ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3136,4.51s,0.96ms,14.00ns,0.96ms,12.12us,937.95us,1.00ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,4305,4.51s,697.51us,0.00ns,696.89us,5.19us,688.13us,746.43us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,11051,4.52s,275.42us,0.00ns,271.45us,8.75us,259.37us,297.67us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,11286,4.51s,270.02us,1.00ns,265.80us,9.05us,253.66us,284.84us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,25589,4.52s,117.11us,0.00ns,117.21us,892.00ns,114.34us,136.39us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,50866,4.56s,58.17us,0.00ns,58.93us,1.73us,56.87us,88.15us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3457,4.51s,866.90us,0.00ns,868.01us,9.43us,840.16us,929.37us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2772,4.51s,1.08ms,1.00ns,1.08ms,4.69us,1.08ms,1.13ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4418,4.51s,681.99us,0.00ns,679.00us,9.10us,656.12us,718.24us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,25964,4.56s,112.12us,2.00ns,115.19us,8.77us,108.16us,186.39us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,31593,4.56s,94.75us,0.00ns,94.92us,828.00ns,93.43us,102.78us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,46573,4.57s,63.89us,0.00ns,64.38us,1.43us,62.05us,74.76us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3213,4.51s,932.59us,0.00ns,933.76us,7.53us,849.13us,0.98ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3215,4.51s,931.21us,0.00ns,933.21us,12.78us,905.38us,0.99ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,11277,4.51s,267.05us,0.00ns,266.00us,7.51us,249.18us,286.32us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,3928,4.51s,763.12us,1.00ns,763.80us,12.28us,729.75us,814.15us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,4446,4.51s,673.07us,8.00ns,674.78us,12.87us,651.22us,717.84us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,5890,4.51s,508.39us,0.00ns,509.33us,2.62us,505.12us,526.44us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,9450,4.51s,315.91us,0.00ns,317.44us,4.38us,312.22us,355.31us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,2440,4.51s,1.18ms,4.00ns,1.23ms,70.61us,1.17ms,1.37ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2422,4.51s,1.24ms,1.00ns,1.24ms,7.06us,1.23ms,1.31ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,3438,4.51s,868.08us,1.00ns,872.63us,18.52us,840.62us,0.96ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,6062,4.56s,494.37us,0.00ns,494.61us,5.50us,481.30us,511.77us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,6070,4.51s,494.54us,3.00ns,494.23us,3.55us,484.04us,520.32us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,10376,4.51s,285.94us,0.00ns,289.08us,6.05us,280.64us,320.30us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2502,4.51s,1.19ms,6.00ns,1.20ms,15.12us,1.18ms,1.28ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2799,4.51s,1.07ms,0.00ns,1.07ms,4.96us,1.06ms,1.11ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,6370,4.51s,469.81us,0.00ns,470.94us,2.89us,464.90us,494.72us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,8805,4.51s,343.59us,0.00ns,340.68us,8.16us,327.63us,361.47us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,9033,4.51s,334.03us,0.00ns,332.07us,8.94us,317.35us,361.80us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,15334,4.51s,198.16us,0.00ns,195.61us,4.52us,186.90us,231.34us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,33251,4.56s,88.92us,0.00ns,90.18us,3.26us,85.96us,110.17us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,2776,4.51s,1.08ms,3.00ns,1.08ms,13.21us,1.01ms,1.15ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2699,4.51s,1.11ms,0.00ns,1.11ms,3.11us,1.11ms,1.17ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4331,4.51s,696.28us,0.00ns,692.73us,11.53us,668.45us,752.34us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,20032,4.56s,147.58us,1.00ns,149.41us,6.81us,144.80us,227.76us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,21284,4.56s,140.64us,0.00ns,140.91us,1.10us,138.56us,162.01us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,30588,4.56s,99.95us,0.00ns,98.04us,3.82us,90.22us,111.80us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2421,4.51s,1.24ms,0.00ns,1.24ms,13.34us,1.11ms,1.28ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2486,4.51s,1.21ms,4.00ns,1.21ms,15.03us,1.16ms,1.26ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,151305,769393,4.88s,3.71us,0.00ns,3.87us,451.00ns,3.49us,11.50us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,151305,126397,4.57s,24.03us,0.00ns,23.70us,780.00ns,22.63us,31.78us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,151305,127077,4.57s,23.86us,0.00ns,23.58us,813.00ns,22.40us,32.24us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,815547,4.89s,3.74us,0.00ns,3.65us,206.00ns,3.15us,9.71us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,944736,5.04s,2.94us,0.00ns,3.14us,289.00ns,2.69us,10.22us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,151305,243862,4.67s,12.21us,0.00ns,12.27us,1.12us,9.30us,21.25us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,151305,32160,4.56s,93.04us,0.00ns,93.25us,1.31us,92.42us,117.72us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,151305,325796,4.82s,8.86us,0.00ns,8.88us,187.00ns,8.29us,17.21us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,151305,865055,4.94s,3.44us,0.00ns,3.44us,68.00ns,3.30us,17.60us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,151305,877442,4.99s,3.37us,0.00ns,3.39us,59.00ns,3.29us,8.49us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,151305,587507,4.83s,4.87us,0.00ns,5.08us,477.00ns,4.56us,11.16us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,551859,4.79s,5.17us,0.00ns,5.41us,427.00ns,4.96us,13.08us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,151305,207959,4.62s,14.00us,0.00ns,14.39us,1.88us,10.82us,23.93us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,151305,203326,4.62s,14.45us,0.00ns,14.72us,1.70us,10.92us,24.18us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,151305,624294,4.78s,4.15us,0.00ns,4.77us,860.00ns,3.88us,27.73us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,151305,126550,4.57s,23.90us,0.00ns,23.67us,854.00ns,22.57us,28.97us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,151305,125764,4.57s,23.99us,0.00ns,23.82us,812.00ns,22.58us,31.29us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,990110,4.94s,3.00us,0.00ns,3.00us,65.00ns,2.78us,9.40us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,1000000,4.94s,2.86us,0.00ns,2.87us,68.00ns,2.65us,22.90us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,151305,226701,4.62s,13.11us,0.00ns,13.20us,1.59us,9.31us,22.02us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,151305,32163,4.56s,93.07us,0.00ns,93.24us,607.00ns,92.70us,112.55us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,151305,313914,4.77s,9.14us,0.00ns,9.22us,320.00ns,7.94us,14.35us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,151305,889345,4.94s,3.33us,0.00ns,3.34us,49.00ns,3.25us,9.82us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,151305,896477,4.94s,3.30us,0.00ns,3.31us,56.00ns,3.20us,20.16us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,151305,586637,4.73s,5.01us,0.00ns,5.08us,378.00ns,4.59us,12.64us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,547146,4.83s,5.31us,0.00ns,5.45us,446.00ns,4.90us,11.47us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,151305,191097,4.62s,14.87us,0.00ns,15.67us,3.20us,9.53us,27.69us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,151305,191078,4.62s,14.92us,0.00ns,15.66us,3.10us,9.45us,29.49us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,500100,114292,4.57s,26.20us,0.00ns,26.22us,209.00ns,26.01us,33.15us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,500100,52008,4.57s,60.12us,0.00ns,57.65us,2.96us,54.09us,74.45us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,500100,51418,4.57s,60.11us,0.00ns,58.31us,3.10us,54.08us,81.72us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,304898,4.68s,8.59us,0.00ns,9.80us,1.85us,8.05us,16.99us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,367836,4.72s,7.57us,0.00ns,8.12us,1.51us,7.16us,16.39us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,500100,13837,4.51s,216.29us,0.00ns,216.79us,3.55us,216.27us,336.03us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,500100,9753,4.51s,306.90us,0.00ns,307.59us,3.35us,305.32us,356.32us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,500100,14909,4.52s,199.34us,0.00ns,201.19us,7.34us,197.60us,249.90us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,500100,173165,4.67s,17.02us,0.00ns,17.00us,363.00ns,16.26us,30.32us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,500100,258100,4.68s,11.71us,0.00ns,11.59us,199.00ns,11.28us,19.98us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,500100,260046,4.62s,11.39us,0.00ns,11.51us,196.00ns,11.26us,15.44us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,500100,276691,4.67s,10.75us,0.00ns,10.81us,166.00ns,10.29us,16.05us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,500100,277608,4.67s,10.75us,0.00ns,10.77us,109.00ns,10.31us,17.60us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,500100,13859,4.51s,216.32us,0.00ns,216.45us,14.21us,208.28us,339.77us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,500100,13820,4.51s,216.32us,0.00ns,217.05us,8.12us,208.30us,339.54us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,500100,4515,4.51s,664.17us,0.00ns,664.43us,7.35us,653.01us,694.28us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,500100,3779,4.51s,793.21us,0.00ns,793.84us,5.78us,786.07us,864.85us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,500100,8415,4.51s,352.07us,0.00ns,356.50us,13.76us,349.00us,404.33us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,1816,4.51s,1.65ms,8.00ns,1.65ms,8.08us,1.64ms,1.77ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,10690,4.51s,278.80us,0.00ns,280.63us,18.30us,259.56us,355.63us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,500100,15021,4.51s,198.93us,0.00ns,199.70us,4.68us,198.22us,289.61us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,500100,13566,4.51s,221.13us,0.00ns,221.11us,2.64us,204.06us,265.49us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,500100,13834,4.51s,206.88us,0.00ns,216.83us,27.46us,206.65us,345.83us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,500100,7039,4.56s,426.42us,0.00ns,425.86us,7.24us,410.06us,476.39us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,500100,3323,4.51s,901.33us,0.00ns,902.84us,4.19us,897.63us,933.38us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,500100,9800,4.51s,299.57us,0.00ns,306.10us,16.48us,284.42us,363.06us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,500100,2707,4.51s,1.09ms,0.00ns,1.11ms,39.67us,1.06ms,1.33ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,500100,11119,4.51s,269.22us,0.00ns,269.77us,5.51us,259.56us,309.39us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1001,1000000,628.10ms,81.00ns,0.00ns,82.00ns,9.00ns,78.00ns,3.14us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,728.22ms,132.00ns,0.00ns,135.00ns,12.00ns,127.00ns,2.56us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,747.46ms,131.00ns,0.00ns,135.00ns,12.00ns,126.00ns,5.64us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,1000000,577.55ms,63.00ns,0.00ns,64.00ns,11.00ns,57.00ns,8.12us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,527.14ms,37.00ns,0.00ns,37.00ns,7.00ns,31.00ns,2.43us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.38s,448.00ns,0.00ns,449.00ns,20.00ns,443.00ns,2.33us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.73s,620.00ns,0.00ns,622.00ns,21.00ns,607.00ns,5.00us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.28s,411.00ns,0.00ns,412.00ns,23.00ns,395.00ns,9.24us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1001,1000000,1.58s,212.00ns,0.00ns,214.00ns,14.00ns,200.00ns,2.07us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1001,1000000,577.63ms,44.00ns,0.00ns,45.00ns,18.00ns,40.00ns,13.23us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,527.31ms,41.00ns,0.00ns,43.00ns,8.00ns,37.00ns,4.75us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1001,1000000,527.56ms,30.00ns,0.00ns,31.00ns,5.00ns,27.00ns,2.47us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1001,1000000,527.52ms,31.00ns,0.00ns,31.00ns,14.00ns,28.00ns,9.92us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1001,1000000,1.38s,458.00ns,0.00ns,458.00ns,19.00ns,438.00ns,2.61us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1001,1000000,1.38s,457.00ns,0.00ns,458.00ns,16.00ns,453.00ns,5.05us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1001,1000000,3.29s,1.35us,0.00ns,1.35us,30.00ns,1.33us,6.29us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,3.54s,1.55us,0.00ns,1.55us,35.00ns,1.53us,7.46us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,1.93s,731.00ns,0.00ns,742.00ns,37.00ns,716.00ns,9.39us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,917026,4.89s,3.24us,0.00ns,3.24us,49.00ns,3.10us,9.46us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,1.63s,555.00ns,0.00ns,562.00ns,41.00ns,514.00ns,5.14us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.28s,417.00ns,0.00ns,418.00ns,25.00ns,412.00ns,15.18us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.38s,453.00ns,0.00ns,453.00ns,20.00ns,428.00ns,3.77us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.38s,425.00ns,0.00ns,428.00ns,26.00ns,418.00ns,4.04us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1001,1000000,3.19s,1.02us,0.00ns,1.02us,38.00ns,0.98us,5.95us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1001,1000000,3.69s,1.70us,0.00ns,1.71us,34.00ns,1.68us,11.28us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,1.83s,649.00ns,0.00ns,648.00ns,30.00ns,603.00ns,5.09us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1001,1000000,4.24s,2.25us,0.00ns,2.28us,90.00ns,2.14us,8.39us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1001,1000000,1.63s,582.00ns,0.00ns,583.00ns,19.00ns,557.00ns,2.56us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,550004,34731,4.56s,86.38us,0.00ns,86.34us,723.00ns,83.98us,107.66us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,550004,28498,4.56s,105.38us,1.00ns,105.24us,1.97us,99.94us,114.00us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,550004,26605,4.56s,112.57us,0.00ns,112.73us,2.27us,106.80us,125.71us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,550004,23215,4.56s,125.50us,0.00ns,129.19us,5.38us,121.44us,143.23us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,550004,23611,4.56s,124.90us,0.00ns,127.03us,4.67us,121.31us,142.18us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,550004,37141,4.56s,80.17us,0.00ns,80.74us,1.28us,74.99us,103.74us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,550004,8865,4.51s,337.96us,0.00ns,338.40us,1.71us,336.11us,381.49us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,550004,13547,4.51s,219.25us,0.00ns,221.43us,7.00us,217.38us,272.70us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,550004,12974,4.56s,231.41us,0.00ns,230.91us,6.28us,171.88us,246.71us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,550004,22704,4.56s,134.20us,0.00ns,132.10us,7.06us,122.84us,163.49us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,550004,23011,4.51s,125.71us,0.00ns,130.34us,7.11us,122.82us,161.78us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,550004,37925,4.56s,76.37us,0.00ns,79.07us,4.20us,75.59us,91.67us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,550004,38775,4.56s,76.28us,0.00ns,77.33us,2.54us,75.53us,89.50us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,550004,49694,4.56s,60.26us,0.00ns,60.33us,355.00ns,59.95us,68.31us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,550004,49706,4.56s,60.28us,0.00ns,60.32us,262.00ns,59.94us,78.58us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,720057,42883,4.56s,75.66us,0.00ns,69.92us,12.58us,42.98us,81.78us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,720057,36252,4.56s,86.53us,0.00ns,82.72us,4.36us,77.86us,105.45us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,720057,36205,4.56s,86.54us,0.00ns,82.82us,4.31us,77.87us,97.81us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,85041,4.56s,35.15us,0.00ns,35.24us,483.00ns,35.11us,53.14us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,85579,4.57s,34.86us,0.00ns,35.02us,476.00ns,34.81us,48.55us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,720057,101923,4.57s,29.35us,0.00ns,29.40us,249.00ns,29.32us,38.67us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,720057,6751,4.51s,443.78us,0.00ns,444.38us,2.24us,441.53us,491.29us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,720057,45637,4.56s,64.56us,0.00ns,65.41us,3.51us,61.73us,85.79us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,720057,78081,4.56s,38.34us,0.00ns,38.39us,336.00ns,38.22us,61.25us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,720057,78399,4.56s,38.18us,0.00ns,38.23us,283.00ns,38.12us,53.33us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,720057,11736,4.51s,255.20us,0.00ns,255.59us,1.15us,255.17us,266.11us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,11737,4.52s,255.24us,0.00ns,255.57us,1.03us,255.21us,272.21us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,720057,139078,4.61s,21.51us,0.00ns,21.54us,171.00ns,21.46us,26.23us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,720057,139662,4.61s,21.43us,0.00ns,21.45us,141.00ns,21.39us,27.29us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,720057,2871,4.51s,1.04ms,0.00ns,1.05ms,10.68us,1.04ms,1.10ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,720057,612,4.51s,4.90ms,5.00ns,4.90ms,3.76us,4.89ms,4.93ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,720057,612,4.51s,4.90ms,2.00ns,4.90ms,4.55us,4.89ms,4.94ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,5402,4.51s,554.39us,0.00ns,555.41us,5.52us,554.33us,699.17us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,5375,4.51s,555.87us,0.00ns,558.21us,14.17us,553.87us,795.86us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,720057,6192,4.51s,487.04us,0.00ns,484.46us,10.52us,462.67us,556.32us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,720057,6648,4.51s,451.43us,1.00ns,451.27us,1.08us,449.87us,495.75us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,720057,2465,4.56s,1.25ms,0.00ns,1.22ms,35.07us,1.13ms,1.26ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,720057,4801,4.51s,623.97us,0.00ns,624.87us,2.01us,605.03us,641.33us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,720057,4796,4.51s,625.06us,0.00ns,625.53us,1.94us,603.16us,643.26us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,720057,2212,4.51s,1.36ms,0.00ns,1.36ms,10.91us,1.33ms,1.39ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,2237,4.51s,1.35ms,0.00ns,1.34ms,12.85us,1.31ms,1.37ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,720057,6488,4.51s,461.83us,0.00ns,462.36us,1.91us,439.43us,475.19us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,720057,6543,4.51s,462.12us,0.00ns,458.53us,8.85us,439.13us,475.99us\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,,471,4.56s,6.38ms,0.00ns,6.38ms,14.92us,6.34ms,6.46ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,,201,4.56s,14.69ms,0.00ns,14.99ms,652.79us,14.57ms,17.66ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,,217,4.56s,13.86ms,0.00ns,13.87ms,52.94us,13.79ms,14.09ms\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1000,27316,4.56s,109.66us,0.00ns,109.78us,2.10us,102.84us,125.12us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1000,28343,4.56s,105.26us,0.00ns,105.81us,1.49us,103.07us,117.26us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1000,37096,4.56s,80.37us,0.00ns,80.84us,1.51us,76.52us,95.18us\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,806771,198,4.56s,14.92ms,557.00ns,15.20ms,1.18ms,14.80ms,20.33ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,806771,170,4.56s,17.65ms,7.00ns,17.66ms,8.83us,17.64ms,17.72ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,806771,155,4.56s,19.45ms,0.00ns,19.45ms,27.15us,19.39ms,19.52ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,19870,4.51s,149.93us,0.00ns,150.95us,4.57us,143.50us,182.55us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,23627,4.52s,127.42us,0.00ns,126.95us,3.17us,121.90us,146.37us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,23838,4.56s,125.74us,1.00ns,125.82us,3.64us,119.16us,138.95us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,79767,4.56s,36.87us,0.00ns,37.58us,1.14us,36.29us,42.89us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,179960,4.62s,16.27us,0.00ns,16.64us,932.00ns,15.93us,35.75us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,11653,4.51s,257.15us,0.00ns,257.41us,6.47us,230.41us,317.46us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7767,4.51s,385.76us,0.00ns,386.23us,1.68us,384.85us,424.03us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,11942,4.51s,251.17us,0.00ns,251.19us,5.64us,242.43us,304.57us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,58062,4.56s,51.14us,0.00ns,51.35us,2.61us,44.58us,71.12us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,108304,4.56s,27.52us,0.00ns,27.67us,688.00ns,26.77us,74.04us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,171017,4.62s,16.94us,0.00ns,17.51us,816.00ns,16.56us,37.53us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,9450,4.51s,317.50us,1.00ns,317.43us,8.03us,239.20us,340.91us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,9675,4.51s,309.98us,0.00ns,310.04us,8.43us,286.99us,335.64us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,11148,4.51s,268.50us,1.00ns,269.10us,2.17us,265.76us,311.06us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,16631,4.51s,179.89us,0.00ns,180.36us,3.64us,174.02us,193.02us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,18060,4.51s,165.71us,0.00ns,166.08us,3.85us,158.93us,185.93us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,18283,4.51s,164.12us,0.00ns,164.06us,3.01us,159.26us,195.50us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,65415,4.56s,44.37us,0.00ns,45.83us,4.19us,40.45us,65.10us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,9960,4.51s,301.00us,0.00ns,301.18us,7.07us,279.56us,353.75us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7308,4.51s,410.01us,0.00ns,410.51us,1.65us,408.03us,457.27us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,10773,4.51s,280.04us,0.00ns,278.44us,5.35us,267.20us,303.64us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,31571,4.56s,94.16us,0.00ns,94.70us,4.28us,88.55us,131.66us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,27231,4.56s,109.89us,0.00ns,110.14us,1.61us,106.13us,135.89us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,54619,4.56s,54.94us,0.00ns,54.89us,2.52us,48.37us,74.14us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,7739,4.51s,387.96us,0.00ns,387.63us,6.10us,366.98us,411.36us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,8029,4.51s,373.51us,0.00ns,373.63us,6.95us,350.61us,408.32us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,7758,4.51s,386.49us,0.00ns,386.67us,1.85us,383.66us,441.79us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,1953,4.51s,1.54ms,0.00ns,1.54ms,7.31us,1.51ms,1.61ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3003,4.51s,0.99ms,0.00ns,1.00ms,27.72us,0.97ms,1.10ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,2733,4.51s,1.09ms,0.00ns,1.10ms,9.43us,1.08ms,1.13ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,6901,4.51s,429.54us,0.00ns,434.70us,20.49us,427.45us,543.37us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,3228,4.51s,920.00us,1.00ns,929.58us,19.08us,898.83us,1.01ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,2931,4.51s,1.02ms,0.00ns,1.02ms,6.43us,1.00ms,1.09ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,3509,4.51s,853.49us,0.00ns,855.06us,21.54us,793.01us,943.14us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,4687,4.51s,639.16us,0.00ns,639.77us,4.33us,616.65us,659.76us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,3065,4.51s,0.98ms,0.00ns,0.98ms,4.46us,0.97ms,1.02ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,7662,4.51s,388.37us,0.00ns,391.56us,15.82us,385.46us,491.83us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,2044,4.51s,1.46ms,7.00ns,1.47ms,38.00us,1.40ms,1.73ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,2863,4.51s,1.04ms,0.00ns,1.05ms,15.99us,1.00ms,1.13ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,14147,4.51s,212.26us,0.00ns,212.02us,4.11us,203.30us,230.53us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,18811,4.51s,158.35us,0.00ns,159.46us,4.02us,153.47us,178.19us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,19246,4.51s,154.41us,0.00ns,155.84us,4.01us,150.02us,170.29us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,57049,4.56s,52.16us,0.00ns,52.55us,1.18us,50.65us,62.72us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,176748,4.62s,16.79us,0.00ns,16.94us,620.00ns,15.73us,25.14us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,6546,4.51s,456.65us,1.00ns,458.29us,8.15us,447.36us,516.30us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7811,4.51s,383.80us,0.00ns,384.06us,1.77us,382.85us,430.13us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,11928,4.51s,252.77us,0.00ns,251.48us,3.63us,243.40us,296.48us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,79309,4.62s,38.03us,0.00ns,37.50us,1.62us,34.74us,48.19us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,90596,4.57s,32.87us,0.00ns,33.08us,515.00ns,32.14us,57.11us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,152499,4.57s,19.12us,0.00ns,19.64us,1.06us,18.57us,28.55us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,5829,4.51s,514.06us,0.00ns,514.67us,2.93us,509.50us,556.41us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,6030,4.51s,497.22us,0.00ns,497.54us,2.66us,488.13us,514.57us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,10673,4.51s,280.79us,0.00ns,281.06us,1.33us,276.87us,299.13us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,9111,4.51s,328.24us,0.00ns,329.26us,4.79us,317.49us,353.68us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,9434,4.51s,316.84us,1.00ns,317.97us,4.94us,308.11us,335.15us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,25295,4.51s,118.27us,0.00ns,118.57us,1.92us,115.02us,142.45us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,70844,4.56s,41.12us,0.00ns,42.31us,2.29us,39.17us,58.90us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,5644,4.51s,531.01us,3.00ns,531.55us,8.28us,492.88us,591.20us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7389,4.51s,405.61us,0.00ns,406.02us,1.62us,403.60us,450.25us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,11207,4.51s,269.37us,0.00ns,267.66us,5.26us,257.20us,322.95us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,44555,4.56s,66.51us,0.00ns,67.01us,1.34us,65.14us,76.38us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,38028,4.56s,78.68us,0.00ns,78.85us,916.00ns,76.83us,94.42us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,69082,4.56s,44.30us,0.00ns,43.39us,1.67us,40.87us,53.57us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,4982,4.51s,600.83us,5.00ns,602.23us,8.93us,584.46us,640.56us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,5280,4.51s,565.72us,0.00ns,568.16us,8.96us,554.78us,599.18us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,15183,4.51s,197.06us,0.00ns,197.56us,3.27us,193.98us,229.68us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,3503,4.51s,856.07us,0.00ns,856.55us,8.50us,832.66us,884.82us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,4850,4.51s,613.30us,2.00ns,618.57us,15.26us,597.00us,672.61us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,5449,4.51s,548.63us,0.00ns,550.62us,4.52us,541.29us,573.29us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,12678,4.51s,243.65us,0.00ns,236.60us,13.51us,218.23us,293.00us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,4816,4.51s,607.33us,5.00ns,622.92us,27.37us,595.84us,704.19us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,4178,4.51s,717.89us,1.00ns,718.10us,3.81us,705.59us,759.04us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,5185,4.51s,561.20us,0.00ns,578.57us,32.97us,541.55us,717.82us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,6567,4.56s,455.98us,0.00ns,456.52us,1.99us,452.77us,469.91us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,6017,4.51s,498.05us,0.00ns,498.60us,1.86us,495.14us,514.23us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,14879,4.51s,200.10us,0.00ns,201.60us,7.35us,199.26us,249.92us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,3454,4.51s,858.88us,4.00ns,868.69us,27.86us,830.29us,1.01ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,4716,4.51s,634.44us,1.00ns,636.15us,8.50us,607.40us,697.93us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,21313,4.51s,137.53us,0.00ns,140.73us,4.46us,134.85us,155.14us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,30792,4.57s,98.99us,16.00ns,97.40us,3.42us,93.23us,111.00us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,31459,4.56s,97.11us,0.00ns,95.33us,3.46us,90.85us,110.80us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,71957,4.56s,41.59us,0.00ns,41.66us,318.00ns,41.04us,46.29us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,193816,4.62s,15.29us,0.00ns,15.44us,465.00ns,14.90us,29.18us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,21190,4.51s,141.26us,0.00ns,141.55us,3.53us,131.51us,176.90us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7405,4.51s,407.56us,0.00ns,405.11us,4.49us,398.01us,451.76us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,11868,4.51s,253.38us,0.00ns,252.77us,3.54us,243.41us,299.91us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,74990,4.62s,38.86us,0.00ns,39.67us,2.05us,38.15us,64.76us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,91286,4.57s,32.66us,0.00ns,32.83us,408.00ns,32.15us,38.05us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,147264,4.62s,20.25us,0.00ns,20.34us,457.00ns,19.61us,33.87us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,20748,4.56s,144.52us,0.00ns,144.57us,1.71us,138.56us,154.34us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,21562,4.52s,139.01us,0.00ns,139.10us,1.74us,132.94us,171.70us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,13581,4.52s,220.98us,0.00ns,220.88us,3.70us,212.05us,242.80us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,18012,4.51s,166.19us,0.00ns,166.53us,3.40us,160.65us,179.39us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,18913,4.51s,158.27us,0.00ns,158.59us,3.49us,152.78us,172.64us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,32647,4.56s,91.36us,0.00ns,91.86us,1.58us,89.92us,114.69us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,90057,4.56s,32.86us,0.00ns,33.28us,1.23us,31.58us,51.91us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,12882,4.51s,233.02us,0.00ns,232.85us,3.56us,220.35us,273.44us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7466,4.51s,401.57us,0.00ns,401.84us,1.27us,400.09us,422.47us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,11368,4.51s,265.41us,0.00ns,263.88us,3.78us,253.77us,305.27us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,43595,4.56s,68.50us,0.00ns,68.49us,2.56us,63.69us,97.73us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,43875,4.56s,68.43us,0.00ns,68.34us,732.00ns,66.12us,81.67us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,78405,4.56s,37.56us,0.00ns,38.23us,1.72us,35.33us,59.24us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,10773,4.51s,278.65us,0.00ns,278.44us,3.25us,267.77us,294.29us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,11475,4.51s,261.75us,0.00ns,261.42us,4.14us,222.94us,303.97us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,31813,4.56s,93.90us,0.00ns,94.27us,1.71us,92.90us,121.52us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,7807,4.51s,383.87us,0.00ns,384.27us,4.06us,373.97us,407.67us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,9609,4.51s,312.15us,0.00ns,312.18us,6.38us,297.63us,333.51us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,12306,4.51s,242.71us,0.00ns,243.76us,4.07us,241.45us,270.31us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,24196,4.56s,122.50us,0.00ns,123.96us,3.89us,120.54us,159.20us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,6234,4.51s,466.87us,2.00ns,481.20us,24.70us,462.55us,569.37us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,5998,4.51s,499.83us,1.00ns,500.14us,2.81us,495.86us,550.47us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,8410,4.51s,355.97us,1.00ns,356.71us,7.54us,345.94us,413.75us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,16284,4.56s,183.49us,0.00ns,183.91us,1.48us,181.73us,215.24us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,13127,4.51s,227.40us,0.00ns,228.51us,4.14us,224.22us,257.73us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,27248,4.51s,110.25us,0.00ns,110.07us,3.66us,106.41us,146.30us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,5707,4.51s,523.70us,0.00ns,525.69us,7.73us,511.37us,569.51us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,6742,4.51s,443.91us,2.00ns,444.96us,4.27us,435.47us,484.05us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,78718,4.56s,38.14us,0.00ns,38.07us,2.39us,34.46us,49.87us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41817,4.56s,74.20us,0.00ns,71.71us,3.53us,66.83us,81.13us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,42182,4.56s,74.19us,0.00ns,71.09us,3.59us,66.83us,81.64us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,320915,4.67s,9.35us,0.00ns,9.32us,182.00ns,8.84us,17.11us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,287704,4.62s,9.28us,0.00ns,10.39us,2.21us,8.80us,18.50us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,9745,4.51s,307.09us,0.00ns,307.83us,6.68us,289.12us,356.85us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7950,4.51s,377.12us,0.00ns,377.36us,1.41us,375.90us,406.64us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12162,4.51s,244.46us,0.00ns,246.65us,7.88us,242.38us,299.67us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,144598,4.67s,20.05us,0.00ns,20.42us,505.00ns,19.88us,29.66us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,224570,4.62s,13.31us,0.00ns,13.33us,124.00ns,13.20us,18.06us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,218789,4.62s,13.73us,0.00ns,13.68us,212.00ns,13.19us,23.57us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,221646,4.62s,13.55us,0.00ns,13.50us,188.00ns,13.12us,21.27us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,218374,4.62s,13.59us,0.00ns,13.71us,308.00ns,13.13us,18.46us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,9459,4.51s,315.57us,0.00ns,317.13us,10.25us,295.06us,351.05us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,9342,4.51s,320.14us,7.00ns,321.09us,9.72us,296.35us,351.29us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,70807,4.56s,42.20us,0.00ns,42.33us,713.00ns,40.60us,51.00us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,33293,4.56s,91.80us,0.00ns,90.07us,3.31us,85.20us,110.39us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,33429,4.56s,91.08us,0.00ns,89.70us,3.24us,84.91us,102.93us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,218995,4.62s,14.75us,0.00ns,13.67us,1.42us,11.68us,23.42us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,229841,4.62s,12.00us,0.00ns,13.02us,1.38us,11.58us,24.50us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,17137,4.51s,175.44us,0.00ns,175.03us,6.43us,154.14us,204.63us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7953,4.51s,376.42us,0.00ns,377.20us,1.45us,376.10us,406.50us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12156,4.51s,244.48us,0.00ns,246.77us,8.11us,242.38us,297.07us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,99077,4.62s,29.89us,0.00ns,29.95us,349.00ns,28.80us,37.25us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,211267,4.62s,14.24us,0.00ns,14.16us,270.00ns,13.48us,19.12us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,213548,4.62s,14.19us,0.00ns,14.01us,323.00ns,13.47us,22.12us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,216712,4.62s,13.55us,0.00ns,13.81us,474.00ns,13.15us,23.47us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,219194,4.62s,13.49us,0.00ns,13.65us,393.00ns,13.15us,23.19us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,14315,4.51s,209.05us,0.00ns,209.54us,8.47us,172.77us,244.79us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,14316,4.51s,208.95us,1.00ns,209.53us,8.33us,182.15us,241.01us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,57860,4.56s,51.68us,0.00ns,51.81us,485.00ns,51.10us,58.18us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41840,4.56s,74.30us,0.00ns,71.67us,3.57us,66.93us,79.59us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,42092,4.56s,74.23us,0.00ns,71.24us,3.71us,66.84us,91.60us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,270776,4.62s,9.38us,0.00ns,11.05us,2.48us,8.83us,22.07us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,268643,4.67s,10.41us,0.00ns,11.13us,1.75us,10.00us,38.15us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,19845,4.51s,149.73us,0.00ns,151.14us,6.48us,134.84us,188.38us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7945,4.51s,376.85us,0.00ns,377.56us,2.79us,376.20us,424.85us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12156,4.51s,244.52us,0.00ns,246.78us,7.88us,242.39us,304.18us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,142920,4.67s,20.08us,0.00ns,20.66us,764.00ns,19.87us,31.46us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,218762,4.62s,13.82us,0.00ns,13.68us,259.00ns,13.29us,21.81us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,222004,4.62s,13.32us,0.00ns,13.48us,254.00ns,13.19us,22.93us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,225312,4.62s,13.19us,0.00ns,13.28us,224.00ns,13.06us,20.71us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,226854,4.62s,13.17us,0.00ns,13.19us,117.00ns,13.05us,16.44us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,16129,4.51s,186.44us,0.00ns,185.97us,7.39us,144.95us,231.82us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,16102,4.51s,186.87us,0.00ns,186.28us,7.50us,138.69us,225.69us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,11998,4.51s,249.68us,0.00ns,250.01us,1.11us,249.32us,285.44us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,21057,4.51s,140.56us,0.00ns,142.44us,4.01us,138.03us,157.24us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,20931,4.51s,142.40us,0.00ns,143.30us,3.97us,137.83us,157.65us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,269408,4.67s,10.29us,0.00ns,11.10us,1.85us,9.90us,30.30us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,292194,4.62s,10.21us,0.00ns,10.23us,508.00ns,9.88us,18.47us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,6561,4.51s,454.55us,0.00ns,457.27us,9.69us,433.29us,490.49us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7863,4.51s,381.08us,0.00ns,381.52us,1.44us,380.15us,427.08us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12144,4.51s,244.94us,0.00ns,247.02us,7.72us,242.44us,296.20us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,117532,4.62s,24.97us,0.00ns,25.18us,1.50us,24.78us,41.79us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,221562,4.62s,13.34us,0.00ns,13.51us,248.00ns,13.19us,24.01us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,220807,4.62s,13.45us,0.00ns,13.55us,238.00ns,13.30us,36.58us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,223820,4.62s,13.34us,0.00ns,13.37us,142.00ns,13.18us,18.59us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,224101,4.67s,13.33us,0.00ns,13.36us,149.00ns,13.17us,35.90us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,6966,4.51s,431.19us,1.00ns,430.68us,7.71us,398.23us,461.38us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,6984,4.51s,429.91us,3.00ns,429.54us,7.36us,400.12us,475.67us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.78ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.83us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.44ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,2.30us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.54ms,23.00ns,0.00ns,23.00ns,20.00ns,20.00ns,19.72us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.55ms,26.00ns,0.00ns,26.00ns,5.00ns,24.00ns,1.98us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.82ms,16.00ns,0.00ns,16.00ns,5.00ns,13.00ns,2.50us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,477.42ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.13us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.20ms,25.00ns,0.00ns,25.00ns,35.00ns,22.00ns,18.74us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.19ms,22.00ns,0.00ns,22.00ns,5.00ns,20.00ns,2.43us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,170.00ns,0.00ns,172.00ns,13.00ns,162.00ns,2.11us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,527.34ms,26.00ns,0.00ns,26.00ns,6.00ns,22.00ns,2.39us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,527.20ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.50us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,476.93ms,17.00ns,0.00ns,17.00ns,26.00ns,15.00ns,20.82us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,527.10ms,12.00ns,0.00ns,12.00ns,19.00ns,10.00ns,11.75us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,527.56ms,27.00ns,0.00ns,27.00ns,6.00ns,25.00ns,2.80us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,527.83ms,27.00ns,0.00ns,27.00ns,7.00ns,25.00ns,2.64us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.57ms,22.00ns,0.00ns,22.00ns,6.00ns,20.00ns,2.48us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.07ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,1.99us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.62ms,23.00ns,0.00ns,23.00ns,6.00ns,20.00ns,2.38us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,477.54ms,26.00ns,0.00ns,26.00ns,4.00ns,24.00ns,1.86us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,477.88ms,16.00ns,0.00ns,16.00ns,5.00ns,13.00ns,3.83us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,477.47ms,13.00ns,0.00ns,13.00ns,22.00ns,11.00ns,17.62us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.73ms,25.00ns,0.00ns,25.00ns,6.00ns,23.00ns,2.51us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.52ms,22.00ns,0.00ns,22.00ns,5.00ns,20.00ns,2.14us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,170.00ns,0.00ns,172.00ns,15.00ns,164.00ns,7.44us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,527.65ms,26.00ns,0.00ns,26.00ns,6.00ns,24.00ns,2.37us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,577.79ms,23.00ns,0.00ns,23.00ns,19.00ns,21.00ns,12.30us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.60ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,2.10us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,527.61ms,12.00ns,0.00ns,12.00ns,7.00ns,10.00ns,4.98us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,528.21ms,27.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.93us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,527.50ms,27.00ns,0.00ns,27.00ns,5.00ns,24.00ns,2.60us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.36ms,22.00ns,0.00ns,22.00ns,4.00ns,19.00ns,1.93us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.59ms,28.00ns,0.00ns,28.00ns,34.00ns,26.00ns,21.28us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.16ms,23.00ns,0.00ns,23.00ns,6.00ns,21.00ns,3.04us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.61ms,26.00ns,0.00ns,26.00ns,8.00ns,24.00ns,6.65us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.29ms,16.00ns,0.00ns,16.00ns,4.00ns,13.00ns,2.28us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,527.24ms,12.00ns,0.00ns,13.00ns,4.00ns,11.00ns,2.51us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.73ms,26.00ns,0.00ns,26.00ns,5.00ns,24.00ns,2.53us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.90ms,22.00ns,0.00ns,22.00ns,4.00ns,20.00ns,2.10us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.48s,169.00ns,0.00ns,172.00ns,13.00ns,163.00ns,2.36us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,527.32ms,26.00ns,0.00ns,26.00ns,6.00ns,24.00ns,2.78us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,527.82ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.04us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.40ms,14.00ns,0.00ns,14.00ns,3.00ns,12.00ns,1.85us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,477.26ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.20us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,527.56ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.16us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,527.62ms,24.00ns,0.00ns,24.00ns,4.00ns,21.00ns,1.86us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.10ms,23.00ns,0.00ns,23.00ns,11.00ns,19.00ns,8.85us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.19ms,28.00ns,0.00ns,28.00ns,7.00ns,26.00ns,2.15us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.02ms,23.00ns,0.00ns,23.00ns,17.00ns,20.00ns,15.78us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.70ms,27.00ns,0.00ns,28.00ns,15.00ns,25.00ns,13.58us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.62ms,16.00ns,0.00ns,16.00ns,6.00ns,14.00ns,2.40us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,477.38ms,19.00ns,0.00ns,19.00ns,4.00ns,16.00ns,1.91us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,528.42ms,27.00ns,0.00ns,27.00ns,5.00ns,24.00ns,2.10us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.38ms,22.00ns,0.00ns,22.00ns,4.00ns,20.00ns,2.12us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.48s,171.00ns,0.00ns,174.00ns,15.00ns,165.00ns,6.72us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,527.47ms,27.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.60us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,527.03ms,23.00ns,0.00ns,23.00ns,26.00ns,21.00ns,19.26us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,477.25ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,1.93us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,477.37ms,12.00ns,0.00ns,12.00ns,2.00ns,11.00ns,1.69us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,527.91ms,25.00ns,0.00ns,25.00ns,5.00ns,22.00ns,1.86us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,477.15ms,25.00ns,0.00ns,25.00ns,5.00ns,22.00ns,2.10us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,26540,4.56s,114.35us,0.00ns,113.00us,2.67us,108.13us,137.26us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13416,4.51s,223.30us,0.00ns,223.59us,6.74us,208.14us,325.54us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13543,4.51s,220.28us,0.00ns,221.50us,6.16us,207.99us,238.45us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,261034,4.62s,10.92us,0.00ns,11.46us,1.52us,10.48us,34.45us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,318810,4.67s,9.43us,0.00ns,9.38us,190.00ns,9.03us,31.87us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,13584,4.51s,222.02us,0.00ns,220.82us,3.35us,211.09us,258.52us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7946,4.51s,377.08us,0.00ns,377.54us,3.47us,374.54us,426.39us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,139040,4.67s,21.35us,0.00ns,21.24us,568.00ns,19.94us,31.53us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,215492,4.62s,14.02us,0.00ns,13.89us,252.00ns,13.54us,21.96us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,217507,4.62s,13.63us,0.00ns,13.76us,231.00ns,13.49us,18.81us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,68037,4.56s,43.05us,0.00ns,44.06us,2.86us,41.98us,67.02us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,67185,4.56s,44.35us,0.00ns,44.62us,1.38us,43.40us,63.74us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,13592,4.51s,217.56us,8.00ns,220.69us,5.11us,214.79us,255.17us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,13667,4.51s,218.48us,0.00ns,219.48us,2.81us,215.91us,232.36us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,527.64ms,26.00ns,0.00ns,26.00ns,10.00ns,24.00ns,9.05us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,527.43ms,26.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.58us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,527.17ms,25.00ns,0.00ns,25.00ns,8.00ns,22.00ns,4.68us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,577.71ms,34.00ns,0.00ns,34.00ns,13.00ns,31.00ns,12.16us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,527.18ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,1.69us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,527.29ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,2.63us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,527.52ms,31.00ns,0.00ns,31.00ns,7.00ns,29.00ns,2.29us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.53s,172.00ns,0.00ns,174.00ns,11.00ns,166.00ns,2.57us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,527.54ms,32.00ns,0.00ns,33.00ns,5.00ns,29.00ns,1.82us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,527.85ms,23.00ns,0.00ns,23.00ns,11.00ns,21.00ns,9.57us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,527.53ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,3.51us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,527.74ms,13.00ns,0.00ns,13.00ns,5.00ns,11.00ns,2.61us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,527.33ms,39.00ns,0.00ns,39.00ns,6.00ns,36.00ns,1.85us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,577.91ms,39.00ns,0.00ns,39.00ns,7.00ns,36.00ns,2.13us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,100163,4.57s,30.09us,0.00ns,29.91us,2.54us,26.56us,44.37us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,35649,4.56s,86.24us,0.00ns,84.12us,3.48us,79.92us,96.44us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,35002,4.56s,87.83us,0.00ns,85.67us,3.48us,80.31us,94.50us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,252099,4.67s,11.86us,0.00ns,11.87us,141.00ns,11.34us,15.97us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,293477,4.67s,10.18us,0.00ns,10.19us,134.00ns,9.91us,15.36us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,35842,4.56s,85.31us,0.00ns,83.66us,5.21us,72.63us,119.30us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7956,4.51s,376.80us,1.00ns,377.07us,3.26us,374.54us,425.67us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,12175,4.51s,244.49us,0.00ns,246.38us,7.27us,242.38us,304.33us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,139988,4.67s,20.98us,0.00ns,21.10us,420.00ns,20.60us,27.33us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,221336,4.62s,13.47us,0.00ns,13.52us,178.00ns,13.34us,19.44us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,222127,4.62s,13.46us,0.00ns,13.47us,119.00ns,13.33us,18.89us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,213982,4.62s,14.06us,0.00ns,13.99us,205.00ns,13.58us,19.75us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,208101,4.62s,14.50us,0.00ns,14.38us,383.00ns,13.46us,22.50us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,32037,4.56s,93.22us,0.00ns,93.61us,3.29us,79.41us,112.97us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,32217,4.56s,92.58us,0.00ns,93.08us,3.38us,88.16us,113.11us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,527.67ms,23.00ns,0.00ns,24.00ns,3.00ns,21.00ns,1.57us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,527.19ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,2.17us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,527.82ms,23.00ns,0.00ns,23.00ns,6.00ns,20.00ns,2.62us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.18ms,28.00ns,0.00ns,28.00ns,6.00ns,25.00ns,2.51us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,477.37ms,16.00ns,0.00ns,16.00ns,5.00ns,13.00ns,2.64us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,577.35ms,13.00ns,0.00ns,13.00ns,33.00ns,11.00ns,20.67us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,527.97ms,26.00ns,0.00ns,26.00ns,5.00ns,24.00ns,1.97us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,527.68ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.32us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.53s,170.00ns,0.00ns,172.00ns,13.00ns,164.00ns,2.39us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,527.53ms,27.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.16us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,527.51ms,23.00ns,0.00ns,23.00ns,22.00ns,21.00ns,12.78us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,527.40ms,17.00ns,0.00ns,17.00ns,3.00ns,15.00ns,1.80us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,477.60ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,2.10us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,527.58ms,31.00ns,0.00ns,31.00ns,6.00ns,28.00ns,2.20us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,527.38ms,31.00ns,0.00ns,31.00ns,7.00ns,28.00ns,2.39us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,87914,4.56s,33.61us,0.00ns,34.09us,1.49us,30.37us,58.73us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,40925,4.56s,75.77us,0.00ns,73.27us,3.56us,68.49us,85.20us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41377,4.56s,75.64us,0.00ns,72.47us,3.66us,68.40us,85.81us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,224178,4.62s,15.19us,0.00ns,13.35us,2.29us,10.48us,24.61us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,269104,4.67s,9.54us,0.00ns,11.11us,2.42us,9.10us,22.00us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,15304,4.51s,195.00us,1.00ns,196.00us,5.98us,181.74us,248.09us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7936,4.51s,377.08us,0.00ns,378.00us,5.82us,374.61us,426.96us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12068,4.51s,247.56us,2.00ns,248.58us,7.26us,242.42us,300.75us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,145713,4.67s,20.08us,0.00ns,20.25us,414.00ns,19.95us,31.14us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,213169,4.62s,14.10us,0.00ns,14.04us,220.00ns,13.51us,22.42us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,215307,4.62s,14.06us,0.00ns,13.90us,251.00ns,13.51us,39.50us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,215328,4.62s,13.76us,0.00ns,13.90us,292.00ns,13.29us,23.35us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,215097,4.62s,13.85us,0.00ns,13.91us,252.00ns,13.40us,21.04us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,14831,4.51s,201.94us,0.00ns,202.26us,5.26us,187.06us,225.08us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,14813,4.51s,202.23us,0.00ns,202.50us,5.30us,186.02us,227.02us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,61858,4.56s,48.22us,0.00ns,48.46us,1.03us,46.52us,58.76us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41551,4.57s,68.76us,0.00ns,72.16us,3.66us,68.56us,83.24us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,40893,4.57s,75.82us,0.00ns,73.33us,3.55us,68.56us,92.95us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,244114,4.62s,10.86us,0.00ns,12.26us,2.15us,10.35us,23.95us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,273209,4.67s,10.31us,0.00ns,10.95us,1.62us,10.16us,19.46us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,16191,4.51s,185.15us,0.00ns,185.25us,6.42us,164.88us,234.91us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7909,4.51s,377.57us,0.00ns,379.31us,7.40us,376.63us,426.82us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12174,4.51s,244.48us,0.00ns,246.40us,7.06us,242.38us,295.88us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,143222,4.67s,20.21us,0.00ns,20.62us,785.00ns,20.05us,29.63us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,218817,4.62s,13.82us,0.00ns,13.67us,267.00ns,13.28us,19.27us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,221146,4.62s,13.38us,0.00ns,13.53us,253.00ns,13.24us,22.58us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,224610,4.62s,13.25us,0.00ns,13.32us,202.00ns,13.11us,18.19us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,225719,4.62s,13.24us,0.00ns,13.26us,113.00ns,13.12us,18.50us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,13779,4.51s,217.94us,0.00ns,217.69us,10.22us,190.30us,257.84us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,14032,4.51s,213.71us,2.00ns,213.77us,8.96us,191.21us,243.93us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,185658,4.62s,16.08us,0.00ns,16.12us,286.00ns,15.52us,20.64us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,33410,4.56s,91.41us,0.00ns,89.76us,3.29us,85.49us,102.91us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,33472,4.56s,91.26us,0.00ns,89.59us,3.32us,85.32us,104.17us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,265800,4.62s,10.78us,0.00ns,11.25us,1.41us,10.57us,23.89us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,274379,4.68s,10.86us,0.00ns,10.90us,154.00ns,10.62us,15.70us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,25492,4.52s,116.96us,0.00ns,117.66us,4.87us,106.16us,135.98us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7951,4.51s,377.12us,0.00ns,377.31us,1.51us,375.77us,418.93us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,135209,4.67s,21.59us,0.00ns,21.86us,635.00ns,21.10us,29.56us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,207871,4.62s,14.12us,0.00ns,14.40us,372.00ns,13.92us,23.46us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,213002,4.62s,14.03us,0.00ns,14.05us,129.00ns,13.90us,22.75us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,139714,4.62s,20.53us,0.00ns,21.44us,2.35us,19.03us,29.31us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,135163,4.57s,21.62us,0.00ns,22.16us,1.56us,20.49us,30.42us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,23854,4.56s,123.52us,0.00ns,125.74us,9.98us,105.78us,170.04us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,23078,4.56s,128.83us,1.00ns,129.96us,9.49us,105.79us,175.42us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,151973,4.62s,20.33us,0.00ns,19.71us,806.00ns,18.68us,26.17us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,37725,4.56s,81.85us,0.00ns,79.49us,3.46us,74.87us,90.15us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,37907,4.56s,81.79us,0.00ns,79.11us,3.54us,74.79us,97.44us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,217721,4.62s,13.71us,0.00ns,13.74us,147.00ns,13.45us,32.97us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,230265,4.62s,12.99us,0.00ns,12.99us,148.00ns,12.67us,18.30us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,51181,4.56s,58.28us,0.00ns,58.58us,1.81us,55.00us,70.98us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7944,4.51s,377.22us,0.00ns,377.62us,1.53us,375.87us,423.74us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,121274,4.62s,24.23us,0.00ns,24.41us,2.12us,21.44us,39.76us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,13292,4.51s,225.38us,0.00ns,225.68us,933.00ns,225.11us,236.97us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,13126,4.51s,229.24us,0.00ns,228.53us,1.96us,224.78us,237.79us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,145387,4.62s,19.92us,0.00ns,20.60us,1.75us,19.27us,34.32us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,127619,4.57s,22.36us,0.00ns,23.47us,2.55us,20.23us,32.86us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,50794,4.56s,58.56us,0.00ns,59.02us,2.57us,54.88us,83.89us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,49449,4.56s,60.30us,0.00ns,60.63us,2.32us,55.24us,77.70us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,88187,4.57s,37.67us,0.00ns,33.98us,4.02us,29.59us,42.38us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41590,4.56s,75.22us,0.00ns,72.09us,3.64us,67.97us,80.73us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41390,4.56s,75.24us,0.00ns,72.44us,3.68us,67.98us,86.34us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,209266,4.62s,14.29us,0.00ns,14.30us,151.00ns,13.58us,24.65us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,242238,4.62s,12.32us,0.00ns,12.35us,146.00ns,11.95us,16.96us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,54300,4.56s,54.65us,0.00ns,55.21us,1.82us,53.60us,79.05us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7946,4.51s,377.13us,0.00ns,377.53us,1.40us,375.69us,405.92us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,117881,4.62s,25.33us,0.00ns,25.12us,2.70us,21.03us,32.09us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,11825,4.51s,252.64us,0.00ns,253.67us,3.42us,251.95us,287.50us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,11845,4.51s,252.55us,0.00ns,253.25us,3.00us,251.52us,289.28us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,158618,4.62s,18.16us,0.00ns,18.88us,1.60us,17.55us,32.92us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,126660,4.57s,23.47us,0.00ns,23.65us,500.00ns,22.69us,28.74us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,56030,4.56s,53.36us,0.00ns,53.51us,769.00ns,51.61us,63.98us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,56160,4.56s,53.15us,0.00ns,53.38us,1.10us,51.19us,70.74us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.33ms,31.00ns,0.00ns,31.00ns,9.00ns,28.00ns,7.23us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,577.72ms,38.00ns,0.00ns,38.00ns,6.00ns,36.00ns,2.12us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.31ms,29.00ns,0.00ns,29.00ns,71.00ns,26.00ns,70.47us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.71ms,28.00ns,0.00ns,28.00ns,4.00ns,26.00ns,2.08us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,477.51ms,18.00ns,0.00ns,18.00ns,5.00ns,16.00ns,2.40us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,527.26ms,23.00ns,0.00ns,23.00ns,4.00ns,21.00ns,1.97us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.79ms,24.00ns,0.00ns,24.00ns,4.00ns,22.00ns,2.22us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.57ms,23.00ns,0.00ns,23.00ns,5.00ns,20.00ns,2.18us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,176.00ns,0.00ns,178.00ns,15.00ns,169.00ns,2.31us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,527.58ms,28.00ns,0.00ns,28.00ns,4.00ns,25.00ns,1.75us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,527.64ms,25.00ns,0.00ns,25.00ns,11.00ns,23.00ns,9.78us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,477.04ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,2.40us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,477.40ms,15.00ns,0.00ns,15.00ns,4.00ns,12.00ns,2.14us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,577.76ms,62.00ns,0.00ns,63.00ns,20.00ns,59.00ns,17.20us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,527.50ms,42.00ns,0.00ns,42.00ns,6.00ns,39.00ns,1.88us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.69ms,35.00ns,0.00ns,35.00ns,6.00ns,32.00ns,2.24us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.66ms,38.00ns,0.00ns,38.00ns,23.00ns,36.00ns,19.32us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.17ms,29.00ns,0.00ns,30.00ns,28.00ns,26.00ns,20.02us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.68ms,24.00ns,0.00ns,24.00ns,6.00ns,22.00ns,2.76us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,477.26ms,22.00ns,0.00ns,22.00ns,6.00ns,19.00ns,3.77us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,477.78ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,2.64us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.47ms,22.00ns,0.00ns,23.00ns,7.00ns,20.00ns,2.56us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.81ms,23.00ns,0.00ns,23.00ns,23.00ns,20.00ns,19.35us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.54s,180.00ns,0.00ns,182.00ns,12.00ns,173.00ns,2.02us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,577.80ms,26.00ns,0.00ns,26.00ns,5.00ns,23.00ns,3.35us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,527.79ms,29.00ns,0.00ns,29.00ns,5.00ns,26.00ns,2.04us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.71ms,17.00ns,0.00ns,17.00ns,12.00ns,15.00ns,10.65us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,527.84ms,16.00ns,0.00ns,16.00ns,11.00ns,13.00ns,9.04us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,577.45ms,41.00ns,0.00ns,41.00ns,7.00ns,38.00ns,2.16us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,527.10ms,30.00ns,0.00ns,30.00ns,5.00ns,27.00ns,2.29us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,34821,4.56s,86.10us,0.00ns,86.12us,666.00ns,83.19us,104.08us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13440,4.51s,223.53us,0.00ns,223.19us,5.11us,208.94us,240.06us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13418,4.51s,222.22us,1.00ns,223.56us,6.16us,210.27us,281.04us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,186554,4.62s,18.30us,0.00ns,16.05us,3.19us,11.44us,22.29us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,259839,4.67s,9.60us,0.00ns,11.51us,2.50us,9.12us,19.20us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,16030,4.51s,185.23us,0.00ns,187.12us,3.36us,182.64us,227.61us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7951,4.51s,377.15us,0.00ns,377.31us,1.58us,374.61us,420.65us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,144084,4.67s,20.47us,0.00ns,20.50us,546.00ns,19.92us,29.40us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,219004,4.62s,13.65us,0.00ns,13.67us,123.00ns,13.52us,20.92us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,219504,4.62s,13.62us,0.00ns,13.64us,121.00ns,13.50us,19.32us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,80266,4.57s,37.26us,0.00ns,37.34us,3.22us,33.00us,56.27us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,80871,4.56s,36.26us,0.00ns,37.06us,1.91us,34.31us,51.20us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,16128,4.51s,184.83us,0.00ns,185.99us,4.29us,180.95us,219.73us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,15942,4.51s,187.30us,1.00ns,188.15us,4.39us,180.62us,220.62us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,19762,4.51s,153.16us,0.00ns,151.77us,3.11us,143.90us,169.92us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13553,4.51s,220.42us,0.00ns,221.32us,6.11us,207.92us,241.83us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13600,4.51s,220.00us,0.00ns,220.57us,6.11us,208.69us,240.43us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,212683,4.62s,15.48us,0.00ns,14.07us,2.14us,10.65us,20.43us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,254634,4.67s,9.62us,0.00ns,11.75us,2.55us,9.31us,18.81us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,10672,4.51s,280.05us,1.00ns,281.10us,3.38us,275.45us,319.24us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7961,4.51s,377.12us,0.00ns,376.85us,1.62us,374.52us,396.30us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,12206,4.51s,244.65us,0.00ns,245.76us,4.66us,242.53us,295.61us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,143451,4.67s,20.21us,0.00ns,20.58us,538.00ns,19.98us,28.47us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,219026,4.62s,13.65us,0.00ns,13.67us,131.00ns,13.51us,32.16us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,214168,4.62s,14.08us,0.00ns,13.98us,249.00ns,13.53us,19.33us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,210560,4.62s,14.19us,0.00ns,14.21us,304.00ns,13.76us,19.18us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,208904,4.62s,14.18us,0.00ns,14.33us,281.00ns,13.94us,19.98us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,10305,4.51s,290.11us,0.00ns,291.11us,2.30us,287.59us,308.65us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,10355,4.51s,289.44us,0.00ns,289.69us,1.23us,287.26us,302.34us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,527.29ms,39.00ns,0.00ns,39.00ns,20.00ns,37.00ns,14.06us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,527.29ms,33.00ns,0.00ns,33.00ns,6.00ns,29.00ns,2.15us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,527.52ms,29.00ns,0.00ns,29.00ns,7.00ns,27.00ns,2.18us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,577.66ms,38.00ns,0.00ns,39.00ns,5.00ns,36.00ns,1.96us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,527.74ms,20.00ns,0.00ns,20.00ns,4.00ns,18.00ns,2.38us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,527.45ms,29.00ns,0.00ns,30.00ns,6.00ns,26.00ns,2.27us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,527.44ms,31.00ns,0.00ns,31.00ns,34.00ns,28.00ns,19.25us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.53s,179.00ns,0.00ns,182.00ns,15.00ns,172.00ns,5.58us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,527.10ms,36.00ns,0.00ns,36.00ns,7.00ns,32.00ns,2.16us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,527.67ms,27.00ns,0.00ns,28.00ns,20.00ns,25.00ns,19.15us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,527.36ms,18.00ns,0.00ns,18.00ns,15.00ns,15.00ns,14.42us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,527.11ms,16.00ns,0.00ns,16.00ns,30.00ns,14.00ns,19.80us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,627.83ms,84.00ns,0.00ns,85.00ns,11.00ns,81.00ns,6.25us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,577.19ms,57.00ns,0.00ns,58.00ns,7.00ns,54.00ns,2.67us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,577.48ms,37.00ns,0.00ns,37.00ns,6.00ns,35.00ns,1.73us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,577.85ms,38.00ns,0.00ns,39.00ns,18.00ns,36.00ns,17.01us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,527.79ms,29.00ns,0.00ns,29.00ns,22.00ns,26.00ns,19.61us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,527.15ms,31.00ns,0.00ns,31.00ns,7.00ns,29.00ns,2.37us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,527.47ms,25.00ns,0.00ns,26.00ns,5.00ns,22.00ns,2.24us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,527.63ms,19.00ns,0.00ns,19.00ns,13.00ns,17.00ns,10.64us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,527.44ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.71us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,42,1000000,477.58ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,2.27us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.53s,183.00ns,0.00ns,185.00ns,14.00ns,175.00ns,2.41us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,527.55ms,31.00ns,0.00ns,32.00ns,6.00ns,28.00ns,3.00us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,527.81ms,32.00ns,0.00ns,32.00ns,7.00ns,29.00ns,2.20us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,527.70ms,19.00ns,0.00ns,19.00ns,141.00ns,17.00ns,141.22us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,477.47ms,16.00ns,0.00ns,16.00ns,10.00ns,14.00ns,9.79us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,627.39ms,53.00ns,0.00ns,53.00ns,8.00ns,49.00ns,2.53us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,527.61ms,35.00ns,0.00ns,35.00ns,6.00ns,32.00ns,2.15us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,130598,4.57s,22.38us,0.00ns,22.94us,2.12us,18.39us,32.42us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29417,4.56s,102.45us,0.00ns,101.95us,3.09us,97.50us,112.83us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,29264,4.56s,103.01us,0.00ns,102.48us,2.98us,98.08us,112.97us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,272901,4.67s,10.91us,0.00ns,10.96us,139.00ns,10.71us,15.91us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,275092,4.67s,10.82us,0.00ns,10.87us,139.00ns,10.64us,16.48us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,30569,4.56s,98.13us,0.00ns,98.11us,3.16us,91.27us,132.89us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7948,4.51s,377.21us,0.00ns,377.43us,1.85us,374.58us,423.80us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,138297,4.67s,20.96us,0.00ns,21.36us,669.00ns,20.72us,42.73us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,216700,4.62s,13.69us,0.00ns,13.81us,278.00ns,13.53us,22.13us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,221381,4.62s,13.50us,0.00ns,13.52us,114.00ns,13.36us,18.59us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,148645,4.62s,18.96us,0.00ns,20.15us,2.43us,18.65us,33.30us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,137596,4.62s,21.21us,0.00ns,21.77us,1.69us,20.20us,28.63us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,26720,4.56s,112.29us,1.00ns,112.24us,4.27us,104.74us,132.43us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,27624,4.56s,107.82us,1.00ns,108.57us,4.66us,100.74us,131.23us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,60346,4.56s,48.06us,0.00ns,49.68us,2.68us,46.74us,60.91us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29450,4.56s,102.81us,0.00ns,101.84us,3.08us,97.94us,124.49us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,29383,4.56s,102.76us,0.00ns,102.07us,3.18us,97.69us,114.81us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,273469,4.62s,10.90us,0.00ns,10.94us,136.00ns,10.59us,15.97us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,179491,4.62s,19.03us,0.00ns,16.68us,3.49us,10.65us,66.76us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,20446,4.51s,147.60us,0.00ns,146.70us,6.54us,128.69us,167.31us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7951,4.51s,377.19us,0.00ns,377.31us,1.20us,375.97us,410.96us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,12220,4.51s,244.51us,0.00ns,245.47us,3.83us,242.44us,295.33us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,138363,4.67s,20.59us,0.00ns,21.34us,1.28us,20.39us,41.26us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,224647,4.62s,13.31us,0.00ns,13.32us,123.00ns,13.18us,21.26us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,224850,4.62s,13.29us,0.00ns,13.31us,118.00ns,13.17us,18.23us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,218062,4.62s,13.71us,0.00ns,13.72us,148.00ns,13.33us,19.26us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,211923,4.62s,14.33us,0.00ns,14.12us,514.00ns,13.15us,31.23us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,18299,4.51s,162.63us,0.00ns,163.91us,6.09us,144.76us,192.12us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,18199,4.51s,163.39us,0.00ns,164.81us,6.19us,144.37us,219.16us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,527.34ms,34.00ns,0.00ns,34.00ns,6.00ns,31.00ns,2.67us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,528.16ms,31.00ns,0.00ns,31.00ns,21.00ns,28.00ns,20.06us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,527.54ms,28.00ns,0.00ns,29.00ns,21.00ns,25.00ns,14.98us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.39ms,33.00ns,0.00ns,34.00ns,6.00ns,30.00ns,2.28us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,527.72ms,28.00ns,0.00ns,28.00ns,5.00ns,25.00ns,2.08us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,527.58ms,23.00ns,0.00ns,23.00ns,6.00ns,20.00ns,2.42us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,526.90ms,25.00ns,0.00ns,25.00ns,5.00ns,22.00ns,2.27us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.58s,192.00ns,0.00ns,194.00ns,14.00ns,181.00ns,2.40us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,527.63ms,30.00ns,0.00ns,30.00ns,5.00ns,26.00ns,2.08us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,527.64ms,28.00ns,0.00ns,29.00ns,8.00ns,25.00ns,3.26us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,527.43ms,16.00ns,0.00ns,17.00ns,5.00ns,14.00ns,2.49us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,527.31ms,15.00ns,0.00ns,15.00ns,6.00ns,13.00ns,2.99us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,628.01ms,76.00ns,0.00ns,78.00ns,13.00ns,71.00ns,9.85us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,578.02ms,51.00ns,0.00ns,51.00ns,7.00ns,47.00ns,2.87us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,527.65ms,35.00ns,0.00ns,35.00ns,5.00ns,31.00ns,2.16us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,577.85ms,38.00ns,0.00ns,38.00ns,12.00ns,36.00ns,10.89us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,527.54ms,28.00ns,0.00ns,28.00ns,16.00ns,24.00ns,11.79us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.66ms,26.00ns,0.00ns,26.00ns,6.00ns,23.00ns,2.30us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,527.66ms,26.00ns,0.00ns,26.00ns,5.00ns,22.00ns,2.64us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,527.59ms,19.00ns,0.00ns,19.00ns,13.00ns,17.00ns,11.96us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,527.74ms,22.00ns,0.00ns,22.00ns,8.00ns,20.00ns,7.20us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,527.49ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.02us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.53s,187.00ns,0.00ns,190.00ns,16.00ns,177.00ns,8.79us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,527.34ms,27.00ns,0.00ns,27.00ns,14.00ns,24.00ns,13.46us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,527.04ms,33.00ns,0.00ns,33.00ns,6.00ns,30.00ns,2.32us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,527.02ms,18.00ns,0.00ns,18.00ns,4.00ns,16.00ns,1.88us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,527.34ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.04us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,577.25ms,47.00ns,0.00ns,47.00ns,14.00ns,44.00ns,12.74us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,527.79ms,33.00ns,0.00ns,33.00ns,13.00ns,31.00ns,11.30us\n"
  },
  {
    "path": "benchmarks/record/x86_64/2023-08-25.csv",
    "content": "name,model,rebar_version,engine,engine_version,err,haystack_len,iters,total,median,mad,mean,stddev,min,max\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,17179,4.51s,174.42us,0.00ns,174.60us,931.00ns,173.28us,186.00us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,594933,147152,4.57s,20.60us,0.00ns,20.35us,546.00ns,19.34us,24.81us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,594933,107202,4.62s,27.79us,0.00ns,27.66us,368.00ns,26.31us,33.84us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,594933,319843,4.67s,9.34us,0.00ns,9.35us,88.00ns,9.25us,14.54us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,266015,4.72s,10.93us,0.00ns,10.94us,137.00ns,10.90us,27.73us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,16490,4.51s,181.65us,0.00ns,181.90us,917.00ns,180.94us,193.78us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,17683,4.51s,169.41us,0.00ns,169.63us,862.00ns,168.34us,178.32us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,6547,4.51s,457.37us,0.00ns,458.23us,3.12us,452.39us,493.57us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,7257,4.51s,406.89us,0.00ns,413.39us,19.02us,389.14us,476.36us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,13732,4.56s,220.92us,0.00ns,218.15us,3.81us,212.87us,231.96us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,15997,4.51s,185.55us,0.00ns,187.51us,2.94us,183.84us,199.31us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,18159,4.51s,162.90us,0.00ns,165.18us,4.69us,161.53us,182.51us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,18385,4.51s,162.94us,0.00ns,163.15us,900.00ns,161.82us,188.42us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,7160,4.51s,414.01us,0.00ns,418.98us,16.20us,398.68us,479.65us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,15996,4.51s,187.44us,0.00ns,187.52us,1.14us,184.85us,199.17us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,9424,4.51s,322.23us,0.00ns,318.30us,9.66us,297.80us,340.23us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,3380,4.51s,887.17us,1.00ns,887.66us,2.96us,881.25us,938.96us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,4708,4.51s,635.41us,1.00ns,637.18us,12.82us,620.96us,864.71us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,9089,4.56s,323.55us,0.00ns,329.74us,10.45us,318.03us,356.92us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,9257,4.51s,320.85us,0.00ns,324.07us,5.34us,319.59us,345.88us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,10102,4.51s,296.64us,0.00ns,296.96us,1.23us,294.87us,315.29us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,8490,4.51s,352.90us,0.00ns,353.32us,1.33us,351.75us,365.86us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,6183,4.51s,484.77us,0.00ns,485.21us,1.83us,479.62us,504.95us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,2201,4.51s,1.36ms,0.00ns,1.36ms,6.38us,1.35ms,1.42ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,3334,4.51s,900.00us,6.00ns,899.82us,8.58us,870.37us,942.22us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,6839,4.56s,438.33us,0.00ns,438.38us,1.98us,433.73us,457.94us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,5576,4.51s,538.76us,0.00ns,538.06us,2.99us,531.42us,566.16us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,6216,4.51s,480.50us,1.00ns,482.62us,6.51us,476.09us,512.10us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,5670,4.51s,528.49us,0.00ns,529.14us,1.54us,527.70us,545.76us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,830.63ms,186.00ns,0.00ns,186.00ns,12.00ns,181.00ns,1.98us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,664,1000000,528.58ms,35.00ns,0.00ns,35.00ns,25.00ns,32.00ns,18.70us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,664,1000000,1.53s,186.00ns,0.00ns,188.00ns,14.00ns,179.00ns,6.38us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,529.15ms,29.00ns,0.00ns,29.00ns,18.00ns,26.00ns,13.22us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,1.43s,167.00ns,0.00ns,168.00ns,9.00ns,162.00ns,1.67us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,829.96ms,187.00ns,0.00ns,188.00ns,11.00ns,184.00ns,1.85us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,829.77ms,174.00ns,0.00ns,174.00ns,87.00ns,167.00ns,87.02us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,780.47ms,141.00ns,0.00ns,140.00ns,12.00ns,129.00ns,3.66us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,779.42ms,166.00ns,0.00ns,167.00ns,16.00ns,156.00ns,9.23us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.73s,299.00ns,0.00ns,299.00ns,13.00ns,290.00ns,4.55us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,879.59ms,188.00ns,0.00ns,189.00ns,24.00ns,185.00ns,15.43us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,829.72ms,168.00ns,0.00ns,169.00ns,17.00ns,165.00ns,12.77us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,829.75ms,170.00ns,0.00ns,170.00ns,12.00ns,166.00ns,2.02us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,929.77ms,159.00ns,0.00ns,159.00ns,13.00ns,153.00ns,3.75us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,930.50ms,207.00ns,0.00ns,207.00ns,13.00ns,203.00ns,2.48us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,1.13s,330.00ns,0.00ns,330.00ns,18.00ns,314.00ns,6.00us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,929.64ms,217.00ns,0.00ns,218.00ns,18.00ns,207.00ns,10.70us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,0.98s,212.00ns,0.00ns,213.00ns,16.00ns,204.00ns,4.62us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,2.08s,436.00ns,0.00ns,438.00ns,16.00ns,428.00ns,2.59us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,1.13s,342.00ns,0.00ns,343.00ns,17.00ns,333.00ns,2.38us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,1.18s,321.00ns,0.00ns,321.00ns,16.00ns,313.00ns,2.15us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,1.23s,375.00ns,0.00ns,376.00ns,19.00ns,367.00ns,7.46us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,1.48s,497.00ns,0.00ns,498.00ns,20.00ns,485.00ns,3.59us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,1.08s,302.00ns,0.00ns,304.00ns,18.00ns,283.00ns,2.19us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.03s,265.00ns,0.00ns,269.00ns,17.00ns,259.00ns,2.36us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,2.39s,597.00ns,0.00ns,601.00ns,19.00ns,586.00ns,8.78us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,1.58s,556.00ns,0.00ns,557.00ns,32.00ns,546.00ns,23.72us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,1.48s,502.00ns,0.00ns,503.00ns,20.00ns,492.00ns,4.45us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.58s,569.00ns,0.00ns,570.00ns,21.00ns,557.00ns,4.38us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,578.63ms,50.00ns,0.00ns,50.00ns,6.00ns,47.00ns,2.32us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,69,1000000,527.73ms,15.00ns,0.00ns,15.00ns,17.00ns,13.00ns,16.34us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,69,1000000,1.48s,158.00ns,0.00ns,159.00ns,11.00ns,154.00ns,2.41us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,69,1000000,478.08ms,17.00ns,0.00ns,18.00ns,18.00ns,15.00ns,17.60us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,69,1000000,1.48s,162.00ns,0.00ns,163.00ns,8.00ns,158.00ns,2.39us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,578.61ms,50.00ns,0.00ns,50.00ns,10.00ns,48.00ns,7.69us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,578.33ms,45.00ns,0.00ns,45.00ns,18.00ns,42.00ns,16.42us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,528.30ms,35.00ns,0.00ns,35.00ns,7.00ns,30.00ns,2.34us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,528.24ms,26.00ns,0.00ns,26.00ns,14.00ns,22.00ns,13.57us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.53s,184.00ns,0.00ns,185.00ns,12.00ns,179.00ns,3.24us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,578.96ms,54.00ns,0.00ns,54.00ns,6.00ns,52.00ns,2.11us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,578.60ms,45.00ns,0.00ns,45.00ns,6.00ns,42.00ns,2.28us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,578.79ms,45.00ns,0.00ns,45.00ns,7.00ns,42.00ns,2.15us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,528.80ms,24.00ns,0.00ns,24.00ns,6.00ns,21.00ns,3.05us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,579.07ms,47.00ns,0.00ns,47.00ns,7.00ns,45.00ns,2.05us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,717627,4.88s,4.15us,0.00ns,4.15us,66.00ns,4.06us,27.54us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,594933,149987,4.57s,19.50us,0.00ns,19.97us,603.00ns,19.34us,29.35us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,594933,107583,4.62s,27.46us,0.00ns,27.55us,317.00ns,26.32us,49.97us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,594933,319738,4.72s,9.34us,0.00ns,9.35us,99.00ns,9.25us,12.69us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,266315,4.77s,10.92us,0.00ns,10.93us,115.00ns,10.89us,15.72us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,701378,4.83s,4.24us,0.00ns,4.25us,67.00ns,4.10us,11.29us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,688173,4.88s,4.37us,0.00ns,4.33us,94.00ns,4.10us,12.41us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,139169,4.62s,21.49us,0.00ns,21.52us,192.00ns,21.46us,35.15us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,26185,4.51s,114.38us,0.00ns,114.54us,893.00ns,114.35us,141.44us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,393092,4.87s,7.35us,0.00ns,7.30us,131.00ns,7.12us,12.64us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,649709,4.83s,4.58us,0.00ns,4.58us,92.00ns,4.39us,25.52us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,717994,4.88s,4.14us,0.00ns,4.15us,69.00ns,4.10us,14.84us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,718465,4.93s,4.14us,0.00ns,4.15us,59.00ns,4.10us,13.80us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,26161,4.56s,114.37us,0.00ns,114.65us,1.67us,114.34us,145.50us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,682151,4.83s,4.34us,0.00ns,4.37us,90.00ns,4.28us,10.87us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,567432,4.78s,5.21us,0.00ns,5.25us,124.00ns,5.14us,34.57us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,75473,4.56s,39.28us,0.00ns,39.71us,2.03us,38.16us,62.04us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,17296,4.51s,174.12us,1.00ns,173.42us,1.90us,171.53us,211.62us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,263066,4.73s,10.96us,0.00ns,11.06us,348.00ns,10.91us,31.61us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,565060,4.73s,5.22us,0.00ns,5.28us,259.00ns,5.19us,16.04us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,576146,4.78s,5.17us,0.00ns,5.18us,68.00ns,5.11us,12.00us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,566186,4.78s,5.27us,0.00ns,5.27us,48.00ns,5.24us,14.81us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,389599,4.67s,7.66us,0.00ns,7.67us,98.00ns,7.64us,28.34us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,52191,4.56s,57.24us,0.00ns,57.45us,2.52us,55.09us,79.30us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,13057,4.51s,228.75us,0.00ns,229.75us,1.86us,228.71us,260.50us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,186657,4.67s,15.72us,0.00ns,15.74us,224.00ns,15.67us,23.04us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,389327,4.72s,7.66us,0.00ns,7.67us,81.00ns,7.63us,12.95us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,389446,4.72s,7.66us,0.00ns,7.67us,81.00ns,7.62us,13.04us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,389146,4.72s,7.67us,0.00ns,7.68us,84.00ns,7.61us,14.44us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,526.66ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,1.93us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,664,1000000,576.91ms,35.00ns,0.00ns,35.00ns,22.00ns,32.00ns,18.02us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,664,1000000,1.53s,186.00ns,0.00ns,187.00ns,11.00ns,179.00ns,2.36us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,526.78ms,28.00ns,0.00ns,28.00ns,14.00ns,26.00ns,10.77us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,1.53s,166.00ns,0.00ns,167.00ns,14.00ns,161.00ns,9.79us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,476.89ms,15.00ns,0.00ns,15.00ns,6.00ns,13.00ns,3.29us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,527.17ms,15.00ns,0.00ns,15.00ns,20.00ns,13.00ns,19.99us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,526.98ms,39.00ns,0.00ns,39.00ns,9.00ns,32.00ns,6.31us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,778.30ms,144.00ns,0.00ns,144.00ns,17.00ns,141.00ns,11.88us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.48s,161.00ns,0.00ns,162.00ns,11.00ns,157.00ns,1.92us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,476.51ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,1.71us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,476.90ms,14.00ns,0.00ns,14.00ns,18.00ns,12.00ns,13.21us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,527.27ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,3.21us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,728.02ms,144.00ns,0.00ns,144.00ns,10.00ns,141.00ns,2.55us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,476.48ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,1.77us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,476.52ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,2.11us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,577.09ms,60.00ns,0.00ns,61.00ns,8.00ns,51.00ns,2.46us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,878.58ms,208.00ns,0.00ns,209.00ns,14.00ns,204.00ns,2.70us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.53s,169.00ns,0.00ns,170.00ns,15.00ns,165.00ns,7.86us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,527.28ms,20.00ns,0.00ns,20.00ns,18.00ns,17.00ns,16.31us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,527.03ms,18.00ns,0.00ns,18.00ns,4.00ns,16.00ns,2.69us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,527.02ms,19.00ns,0.00ns,19.00ns,5.00ns,16.00ns,2.04us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,528.18ms,22.00ns,0.00ns,22.00ns,6.00ns,20.00ns,2.30us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,627.35ms,79.00ns,0.00ns,79.00ns,18.00ns,70.00ns,15.80us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.03s,277.00ns,0.00ns,278.00ns,15.00ns,274.00ns,9.06us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.48s,172.00ns,0.00ns,173.00ns,12.00ns,164.00ns,2.15us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,527.16ms,22.00ns,0.00ns,23.00ns,6.00ns,20.00ns,2.73us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,527.07ms,21.00ns,0.00ns,21.00ns,9.00ns,19.00ns,7.17us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,576.75ms,22.00ns,0.00ns,22.00ns,6.00ns,19.00ns,2.27us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,526.93ms,12.00ns,0.00ns,12.00ns,3.00ns,9.00ns,1.98us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,69,1000000,527.05ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.44us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,69,1000000,1.48s,161.00ns,0.00ns,162.00ns,8.00ns,157.00ns,1.71us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,69,1000000,526.61ms,17.00ns,0.00ns,17.00ns,5.00ns,15.00ns,2.01us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,69,1000000,1.43s,158.00ns,0.00ns,159.00ns,12.00ns,154.00ns,1.95us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,527.21ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.11us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,476.91ms,12.00ns,0.00ns,12.00ns,4.00ns,11.00ns,2.51us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,426.80ms,15.00ns,0.00ns,15.00ns,14.00ns,13.00ns,12.05us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,526.87ms,23.00ns,0.00ns,23.00ns,6.00ns,21.00ns,2.22us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.48s,155.00ns,0.00ns,156.00ns,12.00ns,151.00ns,2.16us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,476.85ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.21us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,476.84ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.89us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,477.03ms,12.00ns,0.00ns,12.00ns,2.00ns,10.00ns,2.11us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,527.16ms,23.00ns,0.00ns,24.00ns,7.00ns,21.00ns,2.89us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,476.98ms,13.00ns,0.00ns,13.00ns,14.00ns,11.00ns,12.50us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,527.05ms,14.00ns,0.00ns,14.00ns,20.00ns,12.00ns,19.39us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,526.68ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,2.12us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,526.98ms,36.00ns,0.00ns,36.00ns,11.00ns,28.00ns,8.03us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.48s,158.00ns,0.00ns,159.00ns,14.00ns,152.00ns,8.35us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,476.70ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.57us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,526.58ms,13.00ns,0.00ns,13.00ns,4.00ns,11.00ns,1.78us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,576.62ms,13.00ns,0.00ns,14.00ns,22.00ns,11.00ns,15.40us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,476.89ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,2.57us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,627.28ms,18.00ns,0.00ns,18.00ns,4.00ns,16.00ns,1.77us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,577.16ms,43.00ns,0.00ns,43.00ns,20.00ns,34.00ns,14.41us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.48s,158.00ns,0.00ns,159.00ns,11.00ns,154.00ns,2.29us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,526.81ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.40us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,476.87ms,13.00ns,0.00ns,13.00ns,23.00ns,11.00ns,22.60us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,476.78ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.50us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,,1000000,476.82ms,11.00ns,0.00ns,11.00ns,18.00ns,9.00ns,18.11us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,,1000000,476.85ms,11.00ns,0.00ns,11.00ns,3.00ns,9.00ns,1.93us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,,1000000,1.53s,166.00ns,0.00ns,167.00ns,15.00ns,162.00ns,9.03us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,,1000000,476.61ms,11.00ns,0.00ns,11.00ns,23.00ns,9.00ns,14.35us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,,1000000,1.43s,155.00ns,0.00ns,156.00ns,11.00ns,150.00ns,2.25us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,,1000000,528.00ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.45us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,,1000000,476.81ms,11.00ns,0.00ns,12.00ns,3.00ns,10.00ns,1.96us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,,1000000,527.17ms,11.00ns,0.00ns,11.00ns,2.00ns,9.00ns,1.42us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,,1000000,476.87ms,10.00ns,0.00ns,10.00ns,4.00ns,8.00ns,2.67us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,,1000000,1.48s,155.00ns,0.00ns,156.00ns,14.00ns,151.00ns,7.90us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,,1000000,476.73ms,11.00ns,0.00ns,11.00ns,5.00ns,9.00ns,2.35us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,,1000000,526.94ms,10.00ns,0.00ns,10.00ns,4.00ns,9.00ns,2.11us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,,1000000,476.85ms,10.00ns,0.00ns,10.00ns,5.00ns,8.00ns,2.75us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,,1000000,526.92ms,10.00ns,0.00ns,10.00ns,5.00ns,8.00ns,3.19us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,,1000000,476.53ms,10.00ns,0.00ns,10.00ns,3.00ns,9.00ns,1.88us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,,1000000,527.06ms,11.00ns,0.00ns,12.00ns,4.00ns,9.00ns,2.22us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,,1000000,477.00ms,11.00ns,0.00ns,11.00ns,7.00ns,10.00ns,5.79us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,,1000000,527.33ms,10.00ns,0.00ns,10.00ns,23.00ns,9.00ns,19.23us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,,1000000,1.48s,158.00ns,0.00ns,159.00ns,8.00ns,154.00ns,2.18us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,,1000000,527.16ms,11.00ns,0.00ns,12.00ns,3.00ns,9.00ns,1.70us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,,1000000,476.87ms,10.00ns,0.00ns,10.00ns,7.00ns,9.00ns,5.78us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,,1000000,476.89ms,10.00ns,0.00ns,10.00ns,5.00ns,9.00ns,2.35us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,,1000000,476.52ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,1.99us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,,1000000,476.90ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.33us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,,1000000,477.03ms,10.00ns,0.00ns,10.00ns,2.00ns,9.00ns,1.73us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,,1000000,1.48s,153.00ns,0.00ns,154.00ns,11.00ns,149.00ns,2.06us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,,1000000,526.66ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,1.63us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,,1000000,476.69ms,10.00ns,0.00ns,10.00ns,4.00ns,9.00ns,1.94us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,,1000000,477.05ms,10.00ns,0.00ns,10.00ns,4.00ns,9.00ns,2.67us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,508403,4.78s,5.85us,0.00ns,5.87us,99.00ns,5.76us,11.21us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,594933,153711,4.57s,19.47us,0.00ns,19.48us,181.00ns,19.34us,41.30us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,594933,107847,4.62s,27.46us,0.00ns,27.49us,251.00ns,26.32us,40.29us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,594933,303364,4.67s,10.02us,0.00ns,9.86us,341.00ns,9.25us,15.76us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,261267,4.77s,11.14us,0.00ns,11.15us,103.00ns,11.11us,20.92us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,586922,4.83s,5.03us,0.00ns,5.08us,116.00ns,4.93us,10.44us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,541445,4.78s,5.50us,0.00ns,5.51us,103.00ns,5.32us,26.72us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,130352,4.62s,22.95us,0.00ns,22.98us,206.00ns,22.72us,48.39us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,25749,4.56s,115.62us,0.00ns,116.47us,3.40us,115.27us,148.30us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,356073,4.82s,8.05us,0.00ns,8.09us,115.00ns,7.95us,15.66us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,584832,4.78s,5.04us,0.00ns,5.10us,112.00ns,4.95us,16.49us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,597138,4.78s,4.97us,0.00ns,4.99us,97.00ns,4.90us,28.06us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,599258,4.78s,4.97us,0.00ns,4.97us,67.00ns,4.91us,15.68us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,584508,4.83s,5.09us,0.00ns,5.10us,86.00ns,4.99us,13.45us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,371081,4.72s,8.04us,0.00ns,8.05us,130.00ns,7.84us,28.62us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,67674,4.56s,45.20us,0.00ns,44.30us,1.74us,41.28us,55.13us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,17220,4.51s,173.87us,0.00ns,174.19us,1.67us,173.77us,216.17us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,220896,4.72s,13.19us,0.00ns,13.25us,304.00ns,13.03us,19.83us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,384423,4.67s,7.76us,0.00ns,7.77us,99.00ns,7.62us,14.70us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,387973,4.67s,7.69us,0.00ns,7.70us,114.00ns,7.60us,15.67us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,390036,4.72s,7.65us,0.00ns,7.66us,99.00ns,7.54us,16.51us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,278746,4.67s,10.71us,0.00ns,10.73us,131.00ns,10.58us,35.15us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,49531,4.56s,60.27us,0.00ns,60.53us,615.00ns,59.55us,75.82us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,12919,4.51s,231.82us,0.00ns,232.19us,1.67us,231.72us,277.45us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,153935,4.67s,19.17us,0.00ns,19.16us,233.00ns,18.79us,25.54us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,276758,4.67s,10.79us,0.00ns,10.81us,109.00ns,10.72us,19.02us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,276598,4.62s,10.78us,0.00ns,10.81us,219.00ns,10.70us,34.49us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,276775,4.67s,10.77us,0.00ns,10.81us,220.00ns,10.70us,22.13us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,526.95ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,1.88us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,664,1000000,577.02ms,35.00ns,0.00ns,35.00ns,17.00ns,32.00ns,15.45us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,664,1000000,1.53s,186.00ns,0.00ns,187.00ns,16.00ns,179.00ns,10.20us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,526.99ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,2.23us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,1.48s,169.00ns,0.00ns,170.00ns,12.00ns,164.00ns,2.25us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,526.61ms,19.00ns,0.00ns,19.00ns,74.00ns,17.00ns,74.00us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,526.57ms,19.00ns,0.00ns,19.00ns,4.00ns,16.00ns,1.78us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,577.28ms,36.00ns,0.00ns,36.00ns,8.00ns,33.00ns,4.90us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,778.37ms,153.00ns,0.00ns,153.00ns,13.00ns,146.00ns,6.96us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.48s,162.00ns,0.00ns,164.00ns,13.00ns,157.00ns,2.21us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,527.17ms,20.00ns,0.00ns,20.00ns,16.00ns,17.00ns,15.81us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,576.65ms,19.00ns,0.00ns,19.00ns,26.00ns,17.00ns,17.40us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,527.02ms,19.00ns,0.00ns,19.00ns,5.00ns,16.00ns,2.65us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,827.83ms,153.00ns,0.00ns,153.00ns,12.00ns,146.00ns,2.18us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,527.04ms,20.00ns,0.00ns,20.00ns,29.00ns,17.00ns,19.66us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,527.35ms,28.00ns,0.00ns,28.00ns,5.00ns,25.00ns,1.98us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,626.92ms,66.00ns,0.00ns,66.00ns,8.00ns,54.00ns,2.07us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,0.98s,222.00ns,0.00ns,222.00ns,17.00ns,215.00ns,7.46us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.48s,172.00ns,0.00ns,173.00ns,13.00ns,165.00ns,3.87us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,527.17ms,29.00ns,0.00ns,29.00ns,15.00ns,26.00ns,13.73us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,576.69ms,29.00ns,0.00ns,29.00ns,15.00ns,26.00ns,12.02us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,526.61ms,28.00ns,0.00ns,28.00ns,19.00ns,24.00ns,17.63us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,527.05ms,37.00ns,0.00ns,38.00ns,22.00ns,33.00ns,15.93us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,677.35ms,91.00ns,0.00ns,92.00ns,9.00ns,75.00ns,2.60us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.03s,285.00ns,0.00ns,286.00ns,15.00ns,280.00ns,2.51us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.53s,186.00ns,0.00ns,187.00ns,13.00ns,178.00ns,3.95us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,577.06ms,38.00ns,0.00ns,38.00ns,7.00ns,34.00ns,2.35us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,526.99ms,37.00ns,0.00ns,37.00ns,6.00ns,33.00ns,2.20us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,626.69ms,37.00ns,0.00ns,37.00ns,12.00ns,33.00ns,10.08us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,526.62ms,15.00ns,0.00ns,15.00ns,5.00ns,12.00ns,2.89us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,69,1000000,576.70ms,15.00ns,0.00ns,15.00ns,16.00ns,13.00ns,15.51us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,69,1000000,1.53s,159.00ns,0.00ns,160.00ns,12.00ns,155.00ns,2.19us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,69,1000000,477.07ms,17.00ns,0.00ns,17.00ns,7.00ns,15.00ns,5.89us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,69,1000000,1.48s,159.00ns,0.00ns,160.00ns,13.00ns,155.00ns,5.26us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,526.93ms,17.00ns,0.00ns,17.00ns,7.00ns,15.00ns,5.62us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,527.15ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,2.43us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,476.34ms,16.00ns,0.00ns,16.00ns,5.00ns,13.00ns,2.17us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,526.77ms,29.00ns,0.00ns,29.00ns,6.00ns,21.00ns,2.06us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.48s,158.00ns,0.00ns,159.00ns,14.00ns,155.00ns,9.57us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,477.04ms,14.00ns,0.00ns,14.00ns,20.00ns,12.00ns,19.64us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,476.94ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,2.48us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,527.14ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,2.28us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,526.93ms,23.00ns,0.00ns,23.00ns,21.00ns,21.00ns,20.37us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,526.94ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.84us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,526.46ms,20.00ns,0.00ns,20.00ns,5.00ns,19.00ns,2.12us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,577.16ms,20.00ns,0.00ns,20.00ns,6.00ns,17.00ns,2.61us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,527.08ms,36.00ns,0.00ns,36.00ns,7.00ns,28.00ns,2.36us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.48s,158.00ns,0.00ns,159.00ns,10.00ns,154.00ns,1.98us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,527.14ms,20.00ns,0.00ns,20.00ns,5.00ns,18.00ns,2.05us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,627.03ms,20.00ns,0.00ns,20.00ns,5.00ns,18.00ns,2.35us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,476.47ms,18.00ns,0.00ns,18.00ns,19.00ns,16.00ns,18.35us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,476.29ms,29.00ns,0.00ns,29.00ns,5.00ns,27.00ns,2.12us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,476.58ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,1.86us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,626.77ms,43.00ns,0.00ns,43.00ns,9.00ns,34.00ns,5.23us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.53s,167.00ns,0.00ns,167.00ns,14.00ns,159.00ns,6.60us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,526.97ms,25.00ns,0.00ns,25.00ns,5.00ns,22.00ns,2.12us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,526.71ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.19us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,626.77ms,22.00ns,0.00ns,22.00ns,19.00ns,19.00ns,18.13us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,87998,4.57s,33.96us,0.00ns,34.06us,478.00ns,33.52us,58.15us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,594933,153653,4.62s,19.47us,0.00ns,19.49us,167.00ns,19.34us,25.38us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,594933,107604,4.62s,27.45us,0.00ns,27.56us,305.00ns,26.32us,33.13us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,594933,319577,4.67s,9.34us,0.00ns,9.35us,106.00ns,9.25us,13.55us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,263753,4.72s,10.97us,0.00ns,11.04us,312.00ns,10.89us,139.02us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,51322,4.56s,58.34us,0.00ns,58.42us,684.00ns,57.22us,116.03us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,50858,4.56s,59.28us,0.00ns,58.95us,1.07us,56.40us,81.39us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,33822,4.56s,89.61us,1.00ns,88.66us,2.20us,85.11us,109.76us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,18783,4.51s,156.23us,0.00ns,159.69us,6.27us,154.45us,206.76us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,51852,4.56s,57.43us,0.00ns,57.53us,691.00ns,56.28us,67.37us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,51025,4.56s,58.31us,0.00ns,58.76us,1.15us,57.16us,85.15us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,65975,4.56s,45.23us,0.00ns,45.44us,754.00ns,44.30us,67.94us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,65564,4.56s,45.55us,0.00ns,45.72us,723.00ns,44.72us,68.68us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,18845,4.51s,156.14us,0.00ns,159.17us,5.85us,154.61us,201.53us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,58170,4.56s,51.43us,0.00ns,51.54us,797.00ns,50.73us,68.61us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,24967,4.56s,119.02us,0.00ns,120.13us,3.67us,116.98us,150.33us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,16007,4.51s,186.19us,0.00ns,187.39us,2.78us,183.24us,222.88us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,11781,4.51s,254.28us,0.00ns,254.63us,1.23us,253.40us,304.74us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,23734,4.56s,125.86us,0.00ns,126.08us,1.20us,123.78us,147.47us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,23772,4.56s,126.02us,0.00ns,126.17us,793.00ns,123.84us,148.40us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,24863,4.51s,122.35us,0.00ns,120.63us,4.30us,111.05us,144.28us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,26233,4.56s,113.95us,0.00ns,114.33us,1.15us,112.54us,134.79us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,19048,4.51s,157.26us,0.00ns,157.47us,1.29us,152.70us,173.71us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,9845,4.51s,304.51us,0.00ns,304.71us,1.32us,300.94us,333.00us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,8448,4.51s,354.45us,0.00ns,355.08us,3.31us,353.44us,401.99us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,15678,4.56s,190.84us,0.00ns,191.02us,1.00us,188.06us,206.62us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,18200,4.51s,164.48us,0.00ns,164.80us,1.32us,162.76us,180.19us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,20561,4.51s,145.46us,0.00ns,145.88us,1.86us,142.35us,168.10us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,19994,4.51s,149.67us,0.00ns,150.02us,1.20us,148.34us,174.17us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,577.16ms,46.00ns,0.00ns,46.00ns,7.00ns,43.00ns,2.40us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,664,1000000,527.05ms,35.00ns,0.00ns,35.00ns,10.00ns,32.00ns,6.39us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,664,1000000,1.53s,187.00ns,0.00ns,188.00ns,13.00ns,178.00ns,2.35us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,576.79ms,28.00ns,0.00ns,28.00ns,20.00ns,26.00ns,14.66us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,1.48s,168.00ns,0.00ns,169.00ns,10.00ns,163.00ns,2.36us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,577.16ms,47.00ns,0.00ns,47.00ns,30.00ns,43.00ns,21.25us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,577.29ms,45.00ns,0.00ns,46.00ns,7.00ns,42.00ns,2.27us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,626.82ms,58.00ns,0.00ns,58.00ns,11.00ns,53.00ns,7.87us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,878.09ms,159.00ns,0.00ns,161.00ns,13.00ns,145.00ns,1.94us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.53s,186.00ns,0.00ns,187.00ns,13.00ns,179.00ns,7.17us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,576.88ms,48.00ns,0.00ns,49.00ns,72.00ns,45.00ns,71.16us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,576.86ms,44.00ns,0.00ns,44.00ns,7.00ns,41.00ns,2.64us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,526.78ms,44.00ns,0.00ns,44.00ns,6.00ns,41.00ns,2.10us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,778.37ms,158.00ns,0.00ns,161.00ns,16.00ns,145.00ns,6.36us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,577.20ms,51.00ns,0.00ns,51.00ns,5.00ns,47.00ns,2.33us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,628.65ms,76.00ns,0.00ns,77.00ns,8.00ns,71.00ns,2.25us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,729.21ms,91.00ns,0.00ns,90.00ns,10.00ns,79.00ns,1.98us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,879.72ms,205.00ns,0.00ns,206.00ns,11.00ns,202.00ns,4.80us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.63s,226.00ns,0.00ns,227.00ns,14.00ns,218.00ns,2.32us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,628.84ms,87.00ns,0.00ns,87.00ns,23.00ns,82.00ns,17.40us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,679.40ms,98.00ns,0.00ns,98.00ns,9.00ns,90.00ns,2.11us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,628.97ms,89.00ns,0.00ns,89.00ns,9.00ns,83.00ns,2.16us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,779.37ms,122.00ns,0.00ns,123.00ns,10.00ns,116.00ns,2.21us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,779.17ms,133.00ns,0.00ns,134.00ns,14.00ns,126.00ns,8.12us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,0.98s,264.00ns,0.00ns,266.00ns,17.00ns,261.00ns,7.16us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.73s,269.00ns,0.00ns,270.00ns,16.00ns,259.00ns,6.14us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,729.26ms,135.00ns,0.00ns,135.00ns,10.00ns,129.00ns,2.02us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,779.69ms,138.00ns,0.00ns,138.00ns,13.00ns,131.00ns,6.89us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,729.85ms,136.00ns,0.00ns,137.00ns,11.00ns,129.00ns,2.27us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,577.10ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.07us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,69,1000000,476.85ms,15.00ns,0.00ns,15.00ns,21.00ns,13.00ns,20.47us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,69,1000000,1.48s,160.00ns,0.00ns,161.00ns,11.00ns,156.00ns,2.35us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,69,1000000,526.50ms,17.00ns,0.00ns,17.00ns,5.00ns,15.00ns,2.72us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,69,1000000,1.43s,159.00ns,0.00ns,160.00ns,12.00ns,155.00ns,2.66us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,526.90ms,30.00ns,0.00ns,30.00ns,5.00ns,27.00ns,1.64us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,526.70ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.58us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,526.97ms,22.00ns,0.00ns,23.00ns,13.00ns,19.00ns,11.24us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,527.17ms,24.00ns,0.00ns,26.00ns,7.00ns,21.00ns,2.60us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.48s,164.00ns,0.00ns,165.00ns,11.00ns,158.00ns,2.80us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,526.71ms,31.00ns,0.00ns,31.00ns,6.00ns,29.00ns,2.19us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,526.72ms,28.00ns,0.00ns,28.00ns,18.00ns,26.00ns,17.68us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,527.13ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.70us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,527.26ms,24.00ns,0.00ns,25.00ns,6.00ns,22.00ns,2.00us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,526.64ms,31.00ns,0.00ns,32.00ns,13.00ns,29.00ns,11.67us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,578.94ms,51.00ns,0.00ns,51.00ns,7.00ns,48.00ns,2.29us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,528.14ms,33.00ns,0.00ns,33.00ns,6.00ns,28.00ns,2.29us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,528.79ms,31.00ns,0.00ns,31.00ns,19.00ns,28.00ns,13.78us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.53s,184.00ns,0.00ns,185.00ns,12.00ns,177.00ns,1.94us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,578.15ms,52.00ns,0.00ns,53.00ns,7.00ns,49.00ns,2.30us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,578.75ms,56.00ns,0.00ns,56.00ns,9.00ns,52.00ns,3.91us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,577.99ms,52.00ns,0.00ns,52.00ns,11.00ns,48.00ns,8.79us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,628.86ms,68.00ns,0.00ns,69.00ns,8.00ns,63.00ns,2.47us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,578.48ms,45.00ns,0.00ns,46.00ns,7.00ns,40.00ns,2.28us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,528.16ms,36.00ns,0.00ns,36.00ns,18.00ns,33.00ns,12.21us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.58s,206.00ns,0.00ns,207.00ns,13.00ns,200.00ns,2.09us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,730.14ms,90.00ns,0.00ns,91.00ns,17.00ns,86.00ns,14.41us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,678.63ms,69.00ns,0.00ns,69.00ns,8.00ns,62.00ns,2.15us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,629.39ms,80.00ns,0.00ns,80.00ns,8.00ns,73.00ns,1.96us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,7543,4.51s,397.22us,0.00ns,397.72us,2.64us,393.88us,427.62us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,594933,153743,4.62s,19.46us,0.00ns,19.47us,163.00ns,19.33us,23.37us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,594933,107967,4.61s,27.44us,0.00ns,27.46us,283.00ns,26.30us,38.88us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,594933,302682,4.62s,10.03us,0.00ns,9.88us,328.00ns,9.25us,18.24us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,265778,4.77s,10.93us,0.00ns,10.96us,145.00ns,10.90us,22.78us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,7632,4.51s,392.56us,0.00ns,393.05us,1.44us,391.24us,416.17us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,8417,4.51s,355.93us,0.00ns,356.40us,1.27us,355.54us,371.94us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,3705,4.51s,809.89us,0.00ns,809.84us,5.02us,795.17us,848.93us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,3837,4.51s,780.50us,0.00ns,781.92us,16.30us,764.14us,926.19us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,9647,4.56s,310.26us,0.00ns,310.67us,1.36us,308.74us,323.89us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,7651,4.51s,389.60us,0.00ns,392.10us,5.96us,385.78us,412.57us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,8504,4.51s,352.60us,0.00ns,352.76us,1.33us,349.30us,369.56us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,8321,4.51s,351.47us,0.00ns,360.53us,12.23us,347.64us,389.02us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,3809,4.51s,787.33us,0.00ns,787.68us,5.48us,772.76us,816.50us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,7368,4.51s,404.85us,0.00ns,407.14us,6.73us,404.58us,440.06us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,1.34s,439.00ns,0.00ns,440.00ns,18.00ns,434.00ns,2.25us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,664,1000000,529.79ms,35.00ns,0.00ns,35.00ns,18.00ns,32.00ns,17.13us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,664,1000000,1.53s,185.00ns,0.00ns,186.00ns,12.00ns,179.00ns,2.29us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,579.98ms,28.00ns,0.00ns,28.00ns,5.00ns,25.00ns,2.27us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,1.49s,165.00ns,0.00ns,166.00ns,12.00ns,160.00ns,2.03us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,1.43s,434.00ns,0.00ns,434.00ns,15.00ns,430.00ns,2.98us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.39s,393.00ns,0.00ns,394.00ns,17.00ns,390.00ns,2.43us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,0.98s,239.00ns,0.00ns,245.00ns,20.00ns,230.00ns,10.91us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,931.75ms,236.00ns,0.00ns,237.00ns,15.00ns,213.00ns,3.72us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,2.08s,482.00ns,0.00ns,484.00ns,17.00ns,475.00ns,2.95us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,1.33s,426.00ns,0.00ns,427.00ns,30.00ns,422.00ns,21.04us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.28s,394.00ns,0.00ns,394.00ns,14.00ns,390.00ns,2.30us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.33s,394.00ns,0.00ns,395.00ns,19.00ns,390.00ns,8.85us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,0.98s,207.00ns,0.00ns,207.00ns,14.00ns,201.00ns,1.94us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,1.38s,450.00ns,0.00ns,451.00ns,19.00ns,445.00ns,7.73us\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,33335253,273,4.56s,10.98ms,0.00ns,10.99ms,45.95us,10.88ms,11.25ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,33335253,286,4.56s,10.51ms,427.00ns,10.52ms,106.82us,10.32ms,10.88ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,33335253,285,4.56s,10.54ms,0.00ns,10.54ms,111.55us,10.33ms,10.88ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,33335253,425,4.56s,7.07ms,0.00ns,7.07ms,34.57us,7.00ms,7.19ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,33335253,427,4.56s,7.03ms,0.00ns,7.03ms,35.52us,6.92ms,7.25ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/binary,2.5.0,,33335253,3168,4.56s,943.58us,1.00ns,947.13us,16.53us,917.00us,1.06ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,33335253,295,4.56s,10.21ms,0.00ns,10.18ms,146.15us,9.85ms,10.52ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,33335253,146,4.56s,20.64ms,288.00ns,20.65ms,47.87us,20.58ms,20.84ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,33335253,222,4.56s,13.50ms,140.00ns,13.54ms,104.63us,13.45ms,13.93ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,33335253,318,4.56s,9.40ms,438.00ns,9.44ms,104.49us,9.31ms,9.87ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,33335253,447,4.56s,6.71ms,0.00ns,6.71ms,24.68us,6.67ms,6.86ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,33335253,446,4.56s,6.73ms,60.00ns,6.73ms,25.58us,6.69ms,6.85ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,33335253,557,4.56s,5.39ms,0.00ns,5.39ms,44.83us,5.25ms,5.56ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,33335253,556,4.56s,5.40ms,72.00ns,5.40ms,48.48us,5.25ms,5.62ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,22044,4.56s,134.43us,0.00ns,136.06us,4.40us,133.55us,167.21us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13827,4.51s,223.60us,0.00ns,216.94us,9.34us,205.68us,245.37us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13787,4.51s,223.70us,0.00ns,217.56us,9.20us,205.72us,248.53us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,103283,4.57s,28.95us,0.00ns,29.01us,300.00ns,28.65us,34.68us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,103977,4.57s,28.75us,0.00ns,28.81us,310.00ns,28.46us,36.65us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3172,4.51s,945.52us,0.00ns,945.97us,5.80us,932.16us,0.97ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2956,4.51s,1.01ms,1.00ns,1.01ms,2.71us,1.01ms,1.05ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4564,4.51s,657.14us,0.00ns,657.40us,3.89us,652.07us,701.14us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,52950,4.56s,56.43us,0.00ns,56.31us,2.61us,51.94us,66.95us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,83317,4.56s,35.90us,0.00ns,35.96us,326.00ns,35.70us,42.53us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,82566,4.56s,36.22us,0.00ns,36.29us,397.00ns,36.01us,60.36us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,78075,4.56s,38.58us,0.00ns,38.38us,595.00ns,37.54us,62.57us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,78164,4.56s,38.60us,0.00ns,38.34us,564.00ns,37.53us,49.55us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2952,4.51s,1.02ms,25.00ns,1.02ms,28.98us,0.96ms,1.09ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2968,4.51s,1.02ms,12.00ns,1.01ms,27.80us,0.96ms,1.09ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,23434,4.51s,123.86us,0.00ns,127.98us,6.60us,122.66us,156.06us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13838,4.51s,223.72us,0.00ns,216.78us,9.34us,205.85us,266.86us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13732,4.51s,224.32us,0.00ns,218.45us,9.12us,205.62us,240.07us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,104433,4.57s,28.63us,0.00ns,28.69us,293.00ns,28.36us,34.26us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,104909,4.57s,28.50us,0.00ns,28.56us,301.00ns,28.21us,49.93us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3430,4.51s,874.32us,2.00ns,874.69us,3.40us,862.68us,908.63us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2956,4.51s,1.01ms,1.00ns,1.01ms,2.72us,1.01ms,1.04ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4566,4.51s,657.04us,0.00ns,656.99us,3.98us,651.99us,707.32us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,52740,4.56s,55.77us,0.00ns,56.54us,3.91us,52.32us,91.72us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,79770,4.56s,37.51us,0.00ns,37.57us,307.00ns,37.31us,44.24us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,79621,4.57s,37.57us,0.00ns,37.63us,336.00ns,37.38us,61.95us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,76955,4.57s,38.87us,0.00ns,38.94us,368.00ns,38.52us,52.83us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,74474,4.57s,40.49us,0.00ns,40.23us,832.00ns,38.34us,58.34us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3129,4.51s,0.96ms,0.00ns,0.96ms,19.82us,895.47us,1.04ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3144,4.51s,0.96ms,12.00ns,0.95ms,22.77us,894.18us,1.02ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,16798,4.52s,175.41us,0.00ns,178.56us,6.47us,173.33us,212.10us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13683,4.51s,224.31us,0.00ns,219.22us,9.45us,205.95us,328.31us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13776,4.51s,223.66us,0.00ns,217.74us,9.34us,205.70us,248.34us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,109552,4.57s,27.31us,0.00ns,27.34us,304.00ns,26.96us,32.99us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,110102,4.57s,27.20us,0.00ns,27.21us,336.00ns,26.79us,33.52us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3465,4.51s,868.18us,0.00ns,865.84us,7.16us,850.05us,925.52us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2919,4.51s,1.03ms,0.00ns,1.03ms,9.56us,1.01ms,1.13ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4568,4.51s,657.02us,0.00ns,656.82us,3.88us,651.90us,698.44us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,54000,4.57s,53.75us,0.00ns,55.20us,4.48us,50.80us,89.25us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,77647,4.56s,38.55us,0.00ns,38.60us,342.00ns,38.36us,65.10us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,79384,4.56s,37.68us,0.00ns,37.75us,333.00ns,37.48us,44.48us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,75954,4.56s,39.39us,0.00ns,39.46us,354.00ns,38.99us,62.61us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,75804,4.56s,39.46us,0.00ns,39.54us,388.00ns,39.06us,61.52us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3296,4.51s,904.71us,5.00ns,910.39us,15.50us,892.62us,0.99ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3303,4.51s,902.62us,0.00ns,908.24us,14.26us,892.70us,0.99ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,33131,4.56s,90.39us,0.00ns,90.52us,891.00ns,88.36us,107.30us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,14177,4.51s,218.36us,0.00ns,211.59us,9.46us,199.99us,233.75us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,14044,4.51s,218.77us,10.00ns,213.59us,8.92us,200.19us,242.02us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,73008,4.56s,41.00us,0.00ns,41.05us,314.00ns,40.76us,50.09us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,103829,4.56s,28.80us,0.00ns,28.85us,288.00ns,28.51us,34.64us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3520,4.51s,851.20us,0.00ns,852.42us,3.93us,844.23us,886.62us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2964,4.51s,1.01ms,1.00ns,1.01ms,2.43us,1.01ms,1.05ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,48194,4.56s,60.25us,0.00ns,61.91us,6.04us,53.21us,91.04us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,78522,4.56s,37.78us,0.00ns,38.16us,847.00ns,37.55us,48.37us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,79312,4.56s,37.71us,0.00ns,37.78us,325.00ns,37.49us,44.56us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,276657,4.67s,10.77us,0.00ns,10.81us,238.00ns,10.39us,100.19us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,278399,4.67s,10.75us,0.00ns,10.74us,138.00ns,10.38us,17.17us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3290,4.51s,899.46us,12.00ns,912.03us,44.66us,861.71us,1.03ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3262,4.51s,902.95us,6.00ns,919.80us,43.72us,862.38us,1.02ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,23589,4.52s,123.06us,0.00ns,127.15us,6.02us,122.08us,151.05us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13776,4.51s,223.91us,0.00ns,217.74us,9.12us,205.96us,266.59us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13884,4.52s,223.49us,3.00ns,216.05us,9.41us,205.72us,262.58us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,100095,4.57s,29.88us,0.00ns,29.93us,294.00ns,29.54us,35.84us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,102436,4.56s,29.18us,0.00ns,29.24us,310.00ns,28.81us,37.35us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3260,4.51s,924.02us,1.00ns,920.39us,12.81us,893.69us,0.98ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2962,4.51s,1.01ms,1.00ns,1.01ms,2.68us,1.01ms,1.06ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4558,4.51s,657.98us,0.00ns,658.16us,2.12us,655.49us,688.52us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,50791,4.56s,58.72us,0.00ns,58.71us,2.45us,53.24us,68.87us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,78160,4.56s,38.15us,0.00ns,38.34us,598.00ns,37.93us,46.35us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,79350,4.56s,37.70us,0.00ns,37.77us,329.00ns,37.48us,54.63us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3160,4.51s,948.63us,4.00ns,949.38us,5.77us,938.50us,0.99ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3100,4.51s,0.96ms,3.00ns,0.97ms,9.53us,0.96ms,1.00ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,4302,4.51s,696.60us,0.00ns,697.44us,5.33us,688.20us,745.05us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,10792,4.51s,282.78us,2.00ns,277.95us,8.89us,264.93us,305.60us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,11283,4.51s,269.98us,0.00ns,265.87us,9.06us,252.98us,286.59us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,27718,4.56s,107.92us,0.00ns,108.19us,1.30us,107.08us,128.12us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,55154,4.56s,53.98us,0.00ns,54.35us,1.14us,52.83us,68.56us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3646,4.51s,824.07us,1.00ns,822.83us,5.22us,812.19us,854.95us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2771,4.51s,1.08ms,0.00ns,1.08ms,3.47us,1.08ms,1.12ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4433,4.51s,676.29us,0.00ns,676.78us,1.79us,675.00us,715.17us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,28731,4.56s,102.40us,0.00ns,104.05us,7.16us,101.57us,174.47us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,31394,4.56s,95.15us,0.00ns,95.52us,1.02us,93.44us,107.82us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,45520,4.56s,65.48us,0.00ns,65.86us,1.30us,63.52us,75.22us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3212,4.51s,932.67us,0.00ns,934.03us,6.63us,914.49us,0.98ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3197,4.51s,935.10us,0.00ns,938.38us,10.93us,916.60us,1.00ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,11606,4.51s,258.25us,0.00ns,258.47us,3.87us,249.66us,293.91us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,3876,4.51s,774.21us,4.00ns,774.12us,13.07us,735.71us,810.93us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,4447,4.51s,672.70us,0.00ns,674.57us,12.95us,651.05us,722.48us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,5941,4.51s,504.52us,0.00ns,504.99us,1.85us,501.35us,521.06us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,9408,4.51s,317.21us,3.00ns,318.86us,5.46us,310.46us,347.60us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,2471,4.51s,1.20ms,0.00ns,1.21ms,36.87us,1.17ms,1.33ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2425,4.51s,1.24ms,0.00ns,1.24ms,4.96us,1.22ms,1.28ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,3315,4.51s,904.18us,0.00ns,904.98us,4.58us,898.72us,0.95ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,6130,4.56s,487.98us,2.00ns,489.06us,5.28us,479.20us,512.34us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,6097,4.51s,491.41us,0.00ns,492.04us,3.11us,483.97us,515.91us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,10507,4.51s,284.24us,0.00ns,285.49us,4.01us,280.21us,310.01us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2502,4.51s,1.19ms,2.00ns,1.20ms,16.97us,1.18ms,1.34ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2798,4.51s,1.07ms,3.00ns,1.07ms,7.34us,1.06ms,1.13ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,6374,4.51s,469.75us,0.00ns,470.69us,2.42us,465.00us,488.02us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,8781,4.51s,343.58us,0.00ns,341.63us,8.52us,327.35us,369.94us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,9049,4.51s,333.83us,0.00ns,331.51us,8.80us,316.63us,357.51us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,16618,4.51s,179.85us,0.00ns,180.50us,2.46us,177.39us,210.03us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,38236,4.56s,77.61us,0.00ns,78.41us,2.01us,75.53us,97.89us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3030,4.51s,0.99ms,2.00ns,0.99ms,4.13us,0.98ms,1.03ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2694,4.51s,1.11ms,0.00ns,1.11ms,3.57us,1.11ms,1.15ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4334,4.51s,690.99us,0.00ns,692.20us,4.35us,689.97us,738.04us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,20862,4.56s,141.63us,0.00ns,143.44us,6.94us,140.16us,211.75us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,20841,4.51s,144.03us,0.00ns,143.91us,1.37us,140.43us,162.58us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,31512,4.56s,94.86us,0.00ns,95.16us,1.50us,92.46us,114.66us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2433,4.51s,1.23ms,0.00ns,1.23ms,12.64us,1.10ms,1.27ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2491,4.51s,1.20ms,0.00ns,1.20ms,12.19us,1.17ms,1.25ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,151305,795745,4.93s,3.71us,0.00ns,3.74us,144.00ns,3.49us,8.61us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,151305,126596,4.62s,23.89us,0.00ns,23.67us,786.00ns,22.44us,32.43us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,151305,125801,4.57s,24.24us,0.00ns,23.81us,832.00ns,22.79us,28.06us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,1000000,4.99s,2.92us,0.00ns,2.92us,66.00ns,2.71us,9.44us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,906384,4.89s,3.39us,0.00ns,3.28us,245.00ns,2.66us,15.98us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,151305,301720,4.67s,9.89us,0.00ns,9.91us,128.00ns,9.76us,16.95us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,151305,32157,4.56s,93.12us,0.00ns,93.26us,757.00ns,92.39us,115.30us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,151305,370400,4.82s,7.70us,0.00ns,7.77us,462.00ns,6.59us,13.33us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,151305,881643,4.99s,3.36us,0.00ns,3.37us,56.00ns,3.30us,9.94us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,151305,886981,4.84s,3.35us,0.00ns,3.35us,57.00ns,3.23us,11.60us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,151305,577944,4.78s,5.05us,0.00ns,5.16us,416.00ns,4.61us,26.95us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,568320,4.83s,5.10us,0.00ns,5.25us,305.00ns,4.90us,14.55us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,151305,207527,4.62s,14.01us,0.00ns,14.42us,1.91us,10.71us,35.97us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,151305,207787,4.62s,14.00us,0.00ns,14.40us,1.88us,10.87us,24.48us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,151305,737187,4.88s,4.01us,0.00ns,4.04us,112.00ns,3.89us,9.84us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,151305,126674,4.56s,23.92us,0.00ns,23.65us,832.00ns,22.55us,30.09us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,151305,126985,4.62s,23.08us,0.00ns,23.59us,854.00ns,22.60us,34.09us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,954240,4.99s,3.02us,0.00ns,3.11us,239.00ns,2.74us,10.78us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,1000000,4.89s,2.86us,0.00ns,2.86us,69.00ns,2.60us,8.10us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,151305,329171,4.72s,8.98us,0.00ns,9.08us,457.00ns,8.37us,14.81us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,151305,32185,4.56s,93.08us,0.00ns,93.18us,537.00ns,92.67us,112.54us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,151305,336081,4.82s,8.60us,0.00ns,8.60us,592.00ns,7.01us,15.35us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,151305,889543,4.99s,3.34us,0.00ns,3.34us,57.00ns,3.24us,11.71us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,151305,897909,4.99s,3.31us,0.00ns,3.31us,57.00ns,3.24us,9.66us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,151305,547398,4.73s,5.17us,0.00ns,5.45us,622.00ns,4.71us,15.60us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,554058,4.83s,5.39us,0.00ns,5.38us,317.00ns,4.87us,13.25us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,151305,188680,4.62s,15.13us,0.00ns,15.87us,3.13us,9.47us,28.28us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,151305,185153,4.62s,15.40us,0.00ns,16.17us,3.22us,9.49us,48.96us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,500100,114208,4.56s,26.21us,0.00ns,26.24us,227.00ns,25.47us,33.16us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,500100,50951,4.56s,61.29us,0.00ns,58.85us,3.04us,55.15us,81.71us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,500100,52330,4.56s,60.10us,0.00ns,57.29us,3.01us,54.07us,80.14us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,302848,4.67s,11.26us,0.00ns,9.87us,2.04us,7.07us,17.78us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,336002,4.67s,7.37us,0.00ns,8.90us,2.03us,7.06us,15.05us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,500100,13753,4.51s,216.29us,0.00ns,218.10us,13.07us,216.27us,380.97us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,500100,9688,4.51s,307.71us,1.00ns,309.64us,3.26us,305.37us,388.76us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,500100,15057,4.51s,199.33us,0.00ns,199.22us,1.35us,197.75us,228.35us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,500100,186078,4.67s,15.90us,0.00ns,15.79us,603.00ns,15.21us,27.54us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,500100,262288,4.62s,11.39us,0.00ns,11.40us,116.00ns,11.27us,31.64us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,500100,216020,4.62s,13.99us,0.00ns,13.86us,270.00ns,13.39us,19.53us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,500100,273719,4.62s,10.79us,0.00ns,10.93us,217.00ns,10.64us,15.59us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,500100,275145,4.67s,10.77us,0.00ns,10.87us,215.00ns,10.63us,26.44us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,500100,14047,4.51s,209.52us,0.00ns,213.55us,12.58us,208.30us,341.43us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,500100,13772,4.51s,216.30us,0.00ns,217.81us,12.62us,208.28us,384.53us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,500100,4509,4.51s,664.83us,0.00ns,665.39us,7.10us,652.18us,690.69us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,500100,3773,4.51s,792.06us,0.00ns,795.22us,6.96us,786.62us,859.85us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,500100,8362,4.51s,352.84us,1.00ns,358.73us,14.40us,349.36us,411.94us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,1794,4.51s,1.66ms,1.00ns,1.67ms,17.01us,1.66ms,1.73ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,10876,4.51s,263.27us,0.00ns,275.83us,28.47us,259.14us,355.73us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,500100,14945,4.51s,198.95us,0.00ns,200.72us,8.44us,198.21us,304.84us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,500100,13553,4.51s,221.11us,0.00ns,221.34us,2.33us,211.47us,261.80us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,500100,14212,4.51s,210.86us,0.00ns,211.07us,756.00ns,206.71us,242.33us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,500100,7019,4.56s,415.70us,0.00ns,427.08us,24.17us,396.42us,518.11us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,500100,3296,4.51s,908.59us,1.00ns,910.21us,5.11us,903.98us,929.73us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,500100,9671,4.51s,300.99us,0.00ns,310.18us,17.33us,291.19us,357.03us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,500100,2710,4.51s,1.09ms,0.00ns,1.11ms,38.89us,1.06ms,1.21ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,500100,11110,4.51s,269.20us,0.00ns,270.01us,5.74us,259.55us,366.71us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1001,1000000,627.23ms,81.00ns,0.00ns,82.00ns,8.00ns,78.00ns,1.86us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,728.24ms,142.00ns,0.00ns,138.00ns,16.00ns,128.00ns,10.73us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,728.06ms,130.00ns,0.00ns,135.00ns,14.00ns,126.00ns,7.35us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,1000000,626.64ms,62.00ns,0.00ns,62.00ns,8.00ns,57.00ns,2.13us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,526.51ms,36.00ns,0.00ns,36.00ns,7.00ns,29.00ns,2.71us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.43s,448.00ns,0.00ns,449.00ns,21.00ns,443.00ns,3.36us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.68s,624.00ns,0.00ns,625.00ns,24.00ns,608.00ns,4.48us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.33s,417.00ns,0.00ns,418.00ns,14.00ns,409.00ns,2.16us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1001,1000000,1.58s,209.00ns,0.00ns,210.00ns,14.00ns,199.00ns,2.65us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1001,1000000,577.04ms,44.00ns,0.00ns,45.00ns,10.00ns,40.00ns,7.73us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,577.10ms,41.00ns,0.00ns,43.00ns,8.00ns,37.00ns,2.27us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1001,1000000,526.93ms,30.00ns,0.00ns,31.00ns,11.00ns,26.00ns,8.96us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1001,1000000,526.97ms,28.00ns,0.00ns,29.00ns,7.00ns,25.00ns,2.31us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1001,1000000,1.38s,458.00ns,0.00ns,459.00ns,23.00ns,438.00ns,11.47us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1001,1000000,1.43s,458.00ns,0.00ns,458.00ns,20.00ns,453.00ns,4.59us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1001,1000000,3.19s,1.35us,0.00ns,1.35us,37.00ns,1.33us,7.32us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,3.60s,1.55us,0.00ns,1.55us,37.00ns,1.53us,6.81us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,1.98s,731.00ns,0.00ns,742.00ns,40.00ns,717.00ns,11.87us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,939259,4.89s,3.15us,0.00ns,3.16us,64.00ns,3.10us,10.49us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,1.59s,524.00ns,0.00ns,537.00ns,43.00ns,495.00ns,6.28us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.38s,417.00ns,0.00ns,418.00ns,24.00ns,412.00ns,13.07us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.38s,451.00ns,0.00ns,453.00ns,25.00ns,427.00ns,13.60us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.33s,433.00ns,0.00ns,434.00ns,24.00ns,424.00ns,14.22us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1001,1000000,3.29s,1.05us,0.00ns,1.06us,49.00ns,0.97us,7.29us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1001,1000000,3.86s,1.75us,0.00ns,1.76us,39.00ns,1.73us,6.96us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,1.88s,651.00ns,0.00ns,650.00ns,31.00ns,614.00ns,5.09us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1001,1000000,4.40s,2.25us,0.00ns,2.28us,97.00ns,2.14us,9.95us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1001,1000000,1.73s,572.00ns,0.00ns,577.00ns,28.00ns,547.00ns,11.34us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,550004,34707,4.56s,86.40us,0.00ns,86.40us,698.00ns,83.97us,95.86us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,550004,27051,4.56s,110.30us,0.00ns,110.87us,2.39us,106.30us,125.84us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,550004,28947,4.56s,103.53us,0.00ns,103.60us,2.50us,99.01us,117.51us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,550004,23814,4.56s,125.81us,0.00ns,125.94us,768.00ns,123.80us,135.29us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,550004,23804,4.51s,125.88us,0.00ns,126.00us,753.00ns,124.08us,135.66us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,550004,37347,4.56s,81.19us,0.00ns,80.29us,3.67us,74.98us,113.88us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,550004,8862,4.51s,338.29us,0.00ns,338.50us,1.42us,336.21us,366.66us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,550004,13693,4.51s,219.20us,0.00ns,219.06us,2.45us,217.45us,265.11us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,550004,15923,4.56s,175.44us,0.00ns,188.09us,23.61us,170.44us,243.31us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,550004,23755,4.56s,123.86us,0.00ns,126.26us,7.45us,122.82us,157.74us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,550004,24041,4.56s,123.75us,0.00ns,124.75us,4.49us,122.77us,157.57us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,550004,37777,4.57s,79.54us,0.00ns,79.38us,1.15us,75.89us,86.69us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,550004,38864,4.57s,76.43us,0.00ns,77.16us,1.41us,75.60us,86.77us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,550004,49666,4.57s,60.28us,0.00ns,60.37us,377.00ns,59.97us,66.43us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,550004,49668,4.57s,60.29us,0.00ns,60.36us,378.00ns,59.93us,82.51us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,720057,69551,4.56s,43.03us,0.00ns,43.10us,300.00ns,42.99us,48.56us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,720057,35904,4.56s,86.53us,0.00ns,83.52us,4.32us,77.86us,116.59us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,720057,36169,4.56s,86.52us,0.00ns,82.91us,4.30us,77.86us,115.36us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,85141,4.56s,35.15us,0.00ns,35.20us,284.00ns,35.11us,48.46us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,84353,4.56s,34.92us,0.00ns,35.53us,1.16us,34.84us,45.53us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,720057,101781,4.56s,29.34us,0.00ns,29.44us,473.00ns,29.31us,38.96us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,720057,6752,4.51s,443.81us,0.00ns,444.28us,1.49us,441.38us,482.58us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,720057,42668,4.56s,62.18us,0.00ns,69.97us,9.49us,61.73us,87.56us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,720057,78162,4.56s,38.27us,0.00ns,38.35us,453.00ns,38.22us,49.84us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,720057,78428,4.56s,38.16us,0.00ns,38.22us,261.00ns,38.13us,45.20us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,720057,11736,4.51s,255.21us,0.00ns,255.60us,1.13us,255.18us,274.62us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,11738,4.51s,255.24us,0.00ns,255.57us,0.98us,255.18us,268.40us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,720057,139065,4.61s,21.51us,0.00ns,21.54us,170.00ns,21.47us,32.86us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,720057,139626,4.62s,21.43us,0.00ns,21.45us,166.00ns,21.39us,26.75us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,720057,2885,4.51s,1.04ms,0.00ns,1.04ms,3.30us,1.04ms,1.06ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,720057,612,4.51s,4.91ms,7.00ns,4.91ms,5.71us,4.89ms,4.97ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,720057,605,4.51s,5.00ms,0.00ns,4.97ms,45.47us,4.89ms,5.03ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,5389,4.51s,555.14us,0.00ns,556.74us,11.06us,554.39us,831.12us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,5400,4.51s,553.89us,0.00ns,555.55us,10.77us,553.83us,832.15us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,720057,6146,4.51s,487.63us,0.00ns,488.16us,2.96us,467.35us,554.15us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,720057,6770,4.51s,442.75us,0.00ns,443.12us,2.33us,441.14us,493.07us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,720057,2539,4.56s,1.18ms,0.00ns,1.18ms,9.53us,1.18ms,1.25ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,720057,4713,4.51s,636.27us,0.00ns,636.52us,805.00ns,612.77us,643.65us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,720057,4797,4.51s,624.93us,0.00ns,625.37us,1.73us,605.69us,640.95us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,720057,2234,4.51s,1.35ms,0.00ns,1.34ms,11.27us,1.31ms,1.37ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,2236,4.51s,1.35ms,1.00ns,1.34ms,12.65us,1.31ms,1.38ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,720057,6490,4.51s,461.89us,0.00ns,462.29us,1.83us,439.32us,476.29us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,720057,6543,4.51s,461.81us,0.00ns,458.51us,8.56us,439.07us,488.48us\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,,460,4.56s,6.52ms,392.00ns,6.52ms,18.56us,6.47ms,6.62ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,,202,4.56s,14.67ms,903.00ns,14.89ms,525.51us,14.55ms,17.64ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,,217,4.56s,13.85ms,0.00ns,13.87ms,59.05us,13.79ms,14.15ms\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1000,35416,4.56s,84.37us,0.00ns,84.67us,0.99us,83.51us,91.54us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1000,28572,4.56s,104.86us,0.00ns,104.97us,844.00ns,99.88us,114.42us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1000,37409,4.56s,80.08us,0.00ns,80.16us,0.96us,76.31us,95.23us\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,806771,214,4.56s,14.07ms,15.00ns,14.08ms,51.00us,14.05ms,14.35ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,806771,170,4.56s,17.66ms,25.00ns,17.72ms,137.72us,17.65ms,18.02ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,806771,152,4.56s,19.76ms,68.00ns,19.76ms,28.28us,19.69ms,19.82ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,19643,4.56s,151.75us,0.00ns,152.70us,5.03us,144.02us,175.99us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,23304,4.56s,129.77us,1.00ns,128.70us,3.68us,122.86us,139.81us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,23916,4.56s,124.88us,1.00ns,125.41us,3.29us,120.06us,138.74us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,83619,4.56s,35.65us,0.00ns,35.84us,420.00ns,35.26us,42.89us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,194250,4.62s,15.27us,0.00ns,15.41us,374.00ns,14.95us,33.55us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,13776,4.51s,217.84us,1.00ns,217.75us,4.93us,199.48us,266.63us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7754,4.51s,386.50us,0.00ns,386.89us,1.45us,385.50us,419.24us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,11969,4.51s,250.26us,0.00ns,250.61us,1.13us,249.99us,282.05us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,58776,4.56s,50.38us,0.00ns,50.69us,2.42us,44.78us,72.04us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,108286,4.57s,27.63us,0.00ns,27.67us,219.00ns,27.38us,33.06us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,176104,4.62s,16.88us,0.00ns,17.00us,433.00ns,16.57us,35.60us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,9465,4.51s,317.04us,0.00ns,316.94us,7.51us,294.92us,341.98us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,9667,4.51s,310.31us,0.00ns,310.31us,8.54us,285.70us,334.36us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,11356,4.51s,263.43us,0.00ns,264.17us,2.47us,259.57us,286.92us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,16964,4.51s,176.39us,0.00ns,176.82us,3.14us,171.32us,191.75us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,18067,4.51s,165.46us,0.00ns,166.02us,3.63us,159.06us,182.07us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,18748,4.51s,159.05us,0.00ns,159.99us,3.05us,157.26us,195.83us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,78062,4.56s,37.46us,0.00ns,38.40us,2.42us,35.81us,58.80us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,11560,4.51s,259.70us,0.00ns,259.50us,6.38us,237.03us,291.72us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7346,4.51s,408.02us,0.00ns,408.40us,1.68us,405.84us,454.59us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,10655,4.51s,281.21us,0.00ns,281.54us,1.24us,279.76us,322.56us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,33507,4.56s,88.54us,0.00ns,89.18us,2.99us,84.44us,170.65us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,26689,4.56s,112.01us,0.00ns,112.37us,1.80us,109.89us,135.26us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,55693,4.56s,53.29us,0.00ns,53.83us,1.87us,49.54us,72.60us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,7724,4.51s,388.79us,0.00ns,388.40us,6.10us,366.03us,408.41us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,8056,4.51s,372.23us,1.00ns,372.36us,6.90us,348.30us,414.74us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,7902,4.51s,379.41us,0.00ns,379.64us,1.42us,376.32us,405.46us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,1948,4.51s,1.54ms,1.00ns,1.54ms,8.48us,1.52ms,1.65ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3005,4.51s,0.99ms,0.00ns,1.00ms,26.75us,0.97ms,1.10ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,2773,4.51s,1.08ms,0.00ns,1.08ms,2.09us,1.08ms,1.11ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,6969,4.51s,428.47us,0.00ns,430.48us,12.50us,427.35us,545.50us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,3274,4.51s,908.74us,1.00ns,916.51us,21.81us,879.16us,0.99ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,2961,4.51s,1.01ms,0.00ns,1.01ms,4.58us,1.00ms,1.06ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,2998,4.51s,1.00ms,2.00ns,1.00ms,5.09us,0.99ms,1.07ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,4722,4.51s,636.92us,2.00ns,635.02us,7.79us,616.36us,661.89us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,3067,4.51s,0.98ms,0.00ns,0.98ms,4.02us,0.97ms,1.00ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,7659,4.51s,389.52us,0.00ns,391.67us,14.77us,384.89us,490.42us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,2039,4.51s,1.46ms,0.00ns,1.47ms,40.96us,1.42ms,1.73ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,2877,4.51s,1.04ms,0.00ns,1.04ms,14.98us,0.99ms,1.12ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,14179,4.51s,212.60us,0.00ns,211.55us,2.73us,206.20us,227.75us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,18993,4.51s,156.82us,0.00ns,157.92us,3.79us,152.17us,172.57us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,19235,4.51s,154.97us,0.00ns,155.94us,3.92us,149.93us,171.63us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,61230,4.56s,48.79us,0.00ns,48.96us,652.00ns,48.14us,60.15us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,192270,4.62s,15.36us,0.00ns,15.57us,634.00ns,14.87us,27.74us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,6879,4.51s,435.48us,0.00ns,436.08us,1.96us,433.45us,460.21us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7801,4.51s,384.00us,0.00ns,384.54us,1.82us,383.07us,426.26us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,11940,4.51s,250.89us,0.00ns,251.23us,1.05us,250.72us,270.83us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,80712,4.61s,36.50us,0.00ns,36.81us,1.12us,34.30us,42.80us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,89599,4.56s,33.38us,0.00ns,33.45us,293.00ns,32.93us,49.09us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,155581,4.62s,19.11us,0.00ns,19.25us,473.00ns,18.47us,43.04us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,5855,4.51s,513.26us,0.00ns,512.37us,4.40us,499.28us,531.92us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,6032,4.51s,497.07us,0.00ns,497.39us,1.91us,493.10us,515.22us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,10621,4.51s,282.34us,0.00ns,282.44us,1.23us,278.92us,299.22us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,9112,4.51s,328.02us,0.00ns,329.21us,5.14us,319.64us,346.72us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,9508,4.51s,314.55us,0.00ns,315.51us,4.75us,305.98us,334.67us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,26091,4.51s,114.69us,0.00ns,114.95us,2.20us,111.84us,143.55us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,78191,4.56s,37.97us,0.00ns,38.33us,1.23us,37.15us,63.18us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,6305,4.51s,475.43us,0.00ns,475.82us,1.82us,473.85us,519.49us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7372,4.51s,406.37us,1.00ns,406.94us,1.78us,405.41us,449.13us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,11262,4.51s,266.02us,0.00ns,266.37us,1.14us,265.41us,301.05us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,43639,4.56s,67.41us,0.00ns,68.39us,4.09us,65.20us,104.56us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,37786,4.56s,79.17us,0.00ns,79.36us,859.00ns,78.10us,96.53us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,68966,4.56s,44.31us,0.00ns,43.47us,1.71us,40.40us,52.75us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,5000,4.51s,598.75us,1.00ns,600.00us,8.71us,582.18us,632.26us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,5283,4.51s,564.24us,0.00ns,567.83us,9.63us,554.75us,605.48us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,15270,4.51s,196.26us,0.00ns,196.44us,1.17us,193.54us,207.64us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,3513,4.51s,853.65us,0.00ns,853.97us,8.04us,834.00us,913.83us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,4852,4.51s,612.91us,3.00ns,618.36us,15.07us,598.72us,694.08us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,5544,4.51s,540.35us,0.00ns,541.16us,1.59us,540.02us,555.61us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,13611,4.51s,218.66us,0.00ns,220.38us,7.77us,218.13us,275.38us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,4766,4.51s,621.40us,3.00ns,629.48us,20.45us,601.67us,688.78us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,4230,4.51s,709.57us,1.00ns,709.26us,3.55us,699.75us,776.49us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,4503,4.51s,665.91us,0.00ns,666.23us,3.63us,658.80us,688.06us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,6571,4.56s,455.71us,0.00ns,456.26us,3.27us,448.08us,476.51us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,6028,4.51s,496.96us,0.00ns,497.69us,1.95us,494.18us,520.82us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,14560,4.51s,203.38us,0.00ns,206.03us,10.57us,202.48us,275.61us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,3497,4.51s,847.87us,0.00ns,858.02us,27.91us,819.90us,1.00ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,4752,4.51s,630.02us,1.00ns,631.34us,7.43us,609.41us,692.25us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,21490,4.56s,139.18us,0.00ns,139.57us,3.04us,134.85us,152.40us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,30651,4.56s,99.58us,0.00ns,97.85us,3.26us,93.40us,106.90us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,31266,4.56s,97.42us,0.00ns,95.92us,3.28us,90.82us,106.43us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,75246,4.56s,39.76us,0.00ns,39.84us,345.00ns,39.21us,48.55us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,199704,4.62s,14.81us,0.00ns,14.99us,414.00ns,14.44us,22.03us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,22971,4.56s,131.14us,0.00ns,130.57us,2.29us,127.20us,164.16us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7506,4.51s,399.12us,0.00ns,399.69us,1.79us,397.87us,448.41us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,11901,4.51s,251.55us,0.00ns,252.05us,2.60us,251.26us,301.69us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,81427,4.61s,35.95us,0.00ns,36.48us,2.36us,35.30us,62.38us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,90837,4.57s,32.85us,0.00ns,32.99us,377.00ns,32.32us,39.85us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,149082,4.62s,19.94us,0.00ns,20.09us,530.00ns,19.27us,28.94us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,20683,4.51s,144.95us,0.00ns,145.01us,1.67us,138.90us,157.55us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,21508,4.51s,139.36us,0.00ns,139.45us,1.76us,133.63us,170.73us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,13868,4.51s,215.63us,0.00ns,216.31us,2.09us,212.00us,234.98us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,18133,4.51s,165.03us,0.00ns,165.42us,3.31us,159.66us,178.51us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,18995,4.51s,157.96us,0.00ns,157.91us,5.01us,150.55us,260.35us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,32995,4.56s,90.57us,0.00ns,90.89us,1.52us,89.31us,109.75us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,100318,4.57s,29.48us,0.00ns,29.87us,1.27us,28.69us,45.44us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,14299,4.51s,209.90us,0.00ns,209.78us,3.08us,200.26us,235.60us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7478,4.51s,400.64us,0.00ns,401.14us,1.77us,398.96us,439.20us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,11359,4.51s,263.71us,0.00ns,264.08us,1.28us,263.05us,296.55us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,48669,4.56s,60.60us,0.00ns,61.29us,2.85us,59.29us,91.38us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,43680,4.56s,68.74us,0.00ns,68.65us,840.00ns,66.50us,93.85us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,77959,4.56s,37.51us,0.00ns,38.45us,1.60us,35.20us,50.54us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,10792,4.51s,278.28us,0.00ns,277.97us,3.06us,268.25us,290.79us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,11477,4.51s,261.51us,0.00ns,261.37us,3.34us,251.14us,277.00us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,31677,4.56s,94.37us,0.00ns,94.67us,1.57us,93.06us,117.54us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,7734,4.51s,387.85us,1.00ns,387.87us,4.01us,377.39us,414.79us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,9646,4.51s,309.99us,1.00ns,311.01us,6.17us,297.77us,344.01us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,12407,4.51s,240.52us,0.00ns,241.78us,4.29us,239.59us,273.39us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,24297,4.51s,122.24us,0.00ns,123.44us,3.27us,120.43us,154.74us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,6128,4.51s,483.90us,2.00ns,489.56us,12.47us,476.21us,539.21us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,6011,4.51s,498.52us,0.00ns,499.13us,2.10us,495.12us,545.17us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,7663,4.51s,391.11us,0.00ns,391.47us,1.50us,388.28us,425.14us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,15925,4.56s,187.90us,0.00ns,188.03us,1.90us,181.76us,250.24us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,13093,4.51s,228.02us,0.00ns,229.11us,4.09us,224.93us,258.51us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,27168,4.56s,110.11us,1.00ns,110.39us,3.44us,107.00us,138.78us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,5606,4.51s,532.31us,2.00ns,535.11us,8.60us,524.46us,587.32us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,6747,4.51s,443.79us,0.00ns,444.62us,3.91us,437.14us,491.99us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,80620,4.56s,37.44us,0.00ns,37.18us,1.42us,34.13us,48.29us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,42700,4.56s,66.89us,0.00ns,70.22us,3.68us,66.78us,83.22us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41977,4.56s,74.20us,0.00ns,71.43us,3.68us,66.83us,81.41us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,333837,4.67s,9.01us,0.00ns,8.95us,164.00ns,8.69us,13.51us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,268788,4.62s,11.18us,0.00ns,11.13us,182.00ns,10.80us,17.01us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,10693,4.51s,278.64us,0.00ns,280.53us,6.46us,264.94us,306.05us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7953,4.51s,377.07us,0.00ns,377.21us,1.43us,376.05us,414.20us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12066,4.51s,249.22us,0.00ns,248.60us,1.23us,247.27us,290.38us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,150238,4.67s,19.06us,0.00ns,19.62us,755.00ns,18.99us,78.66us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,223673,4.62s,13.32us,0.00ns,13.38us,161.00ns,13.20us,21.65us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,220784,4.62s,13.55us,0.00ns,13.56us,209.00ns,13.44us,69.08us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,217546,4.62s,13.81us,0.00ns,13.76us,240.00ns,13.38us,68.62us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,217415,4.62s,13.81us,0.00ns,13.77us,167.00ns,13.38us,18.71us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,9113,4.51s,327.74us,0.00ns,329.19us,8.19us,308.57us,400.19us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,9250,4.51s,323.62us,2.00ns,324.31us,9.90us,301.42us,398.72us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,68726,4.56s,42.62us,0.00ns,43.62us,2.49us,40.52us,144.92us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,33344,4.56s,91.23us,0.00ns,89.94us,3.21us,85.27us,110.80us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,33449,4.56s,91.34us,0.00ns,89.65us,3.35us,85.48us,99.04us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,224569,4.62s,14.65us,0.00ns,13.33us,1.76us,10.85us,26.45us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,275984,4.67s,10.82us,0.00ns,10.84us,122.00ns,10.60us,16.82us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,20187,4.51s,147.90us,0.00ns,148.58us,4.39us,134.99us,190.79us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7952,4.51s,376.49us,0.00ns,377.23us,1.44us,376.07us,411.48us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12279,4.51s,244.46us,0.00ns,244.30us,1.83us,242.54us,289.70us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,100589,4.62s,29.39us,0.00ns,29.49us,0.98us,27.31us,36.24us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,215113,4.62s,13.90us,0.00ns,13.91us,226.00ns,13.76us,71.01us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,213320,4.62s,14.02us,0.00ns,14.03us,231.00ns,13.86us,71.42us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,212619,4.62s,13.92us,0.00ns,14.08us,386.00ns,13.46us,18.46us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,219229,4.62s,13.47us,0.00ns,13.65us,408.00ns,13.12us,22.18us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,14283,4.51s,209.42us,0.00ns,210.01us,8.43us,182.34us,241.52us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,14340,4.51s,208.76us,1.00ns,209.18us,8.26us,172.80us,238.97us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,57823,4.56s,51.72us,0.00ns,51.85us,476.00ns,51.22us,61.74us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41961,4.56s,74.31us,0.00ns,71.46us,3.65us,66.93us,85.08us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41709,4.56s,74.31us,0.00ns,71.89us,3.54us,66.92us,85.37us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,259326,4.62s,9.90us,0.00ns,11.54us,2.25us,9.01us,26.90us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,303075,4.67s,8.99us,0.00ns,9.87us,1.93us,8.67us,18.20us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,20691,4.51s,144.62us,0.00ns,144.96us,3.35us,133.02us,180.68us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7945,4.51s,376.86us,0.00ns,377.58us,1.83us,376.16us,411.84us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12277,4.51s,244.47us,0.00ns,244.34us,1.72us,242.50us,288.70us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,153274,4.67s,18.69us,0.00ns,19.25us,746.00ns,18.62us,31.37us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,223304,4.62s,13.31us,0.00ns,13.40us,212.00ns,13.18us,18.57us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,221777,4.62s,13.32us,0.00ns,13.50us,255.00ns,13.19us,18.37us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,224969,4.62s,13.20us,0.00ns,13.30us,232.00ns,13.06us,17.76us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,226831,4.62s,13.17us,0.00ns,13.20us,131.00ns,13.02us,18.36us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,16090,4.51s,186.83us,1.00ns,186.43us,7.46us,142.78us,225.10us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,15784,4.51s,190.18us,0.00ns,190.03us,8.04us,167.98us,230.72us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,11878,4.51s,254.40us,0.00ns,252.54us,3.21us,249.34us,371.02us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,21102,4.51s,140.68us,1.00ns,142.13us,3.85us,137.55us,174.51us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,21089,4.51s,141.75us,0.00ns,142.22us,3.27us,136.53us,155.19us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,334677,4.67s,8.99us,0.00ns,8.93us,147.00ns,8.66us,13.81us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,328365,4.67s,8.98us,0.00ns,9.11us,918.00ns,8.65us,17.13us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,6679,4.51s,447.53us,0.00ns,449.16us,7.80us,428.49us,512.25us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7851,4.51s,381.96us,0.00ns,382.12us,1.26us,380.43us,416.34us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12243,4.51s,244.59us,0.00ns,245.01us,2.44us,242.57us,288.05us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,118432,4.62s,26.18us,0.00ns,25.01us,2.78us,22.30us,40.46us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,224683,4.62s,13.30us,0.00ns,13.32us,130.00ns,13.20us,35.71us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,224888,4.67s,13.29us,0.00ns,13.31us,122.00ns,13.18us,18.69us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,226150,4.62s,13.19us,0.00ns,13.23us,158.00ns,13.05us,23.01us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,226749,4.62s,13.18us,0.00ns,13.20us,135.00ns,13.04us,20.41us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,6961,4.51s,431.41us,0.00ns,430.98us,7.98us,397.53us,478.68us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,6987,4.51s,429.83us,0.00ns,429.39us,7.70us,399.78us,458.45us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,526.59ms,23.00ns,0.00ns,23.00ns,9.00ns,21.00ns,7.49us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,526.47ms,28.00ns,0.00ns,28.00ns,7.00ns,26.00ns,2.22us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,526.62ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.38us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.08ms,26.00ns,0.00ns,26.00ns,13.00ns,23.00ns,11.33us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,526.84ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.53us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,476.94ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,2.25us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,577.25ms,25.00ns,0.00ns,25.00ns,5.00ns,22.00ns,2.70us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,526.97ms,22.00ns,0.00ns,22.00ns,5.00ns,20.00ns,2.23us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.48s,174.00ns,0.00ns,175.00ns,12.00ns,168.00ns,2.05us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,526.47ms,26.00ns,0.00ns,26.00ns,5.00ns,23.00ns,1.90us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,527.20ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.55us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.02ms,17.00ns,0.00ns,17.00ns,34.00ns,15.00ns,19.67us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,476.99ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,2.43us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,627.65ms,27.00ns,0.00ns,27.00ns,5.00ns,25.00ns,2.03us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,526.98ms,28.00ns,0.00ns,28.00ns,15.00ns,25.00ns,14.38us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,526.37ms,22.00ns,0.00ns,22.00ns,22.00ns,20.00ns,13.10us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,526.92ms,28.00ns,0.00ns,28.00ns,27.00ns,26.00ns,18.72us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,526.57ms,23.00ns,0.00ns,23.00ns,5.00ns,20.00ns,2.35us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.10ms,26.00ns,0.00ns,26.00ns,5.00ns,24.00ns,2.21us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,526.91ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.48us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,476.16ms,13.00ns,0.00ns,13.00ns,5.00ns,11.00ns,2.49us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.87ms,25.00ns,0.00ns,25.00ns,5.00ns,23.00ns,2.49us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,577.22ms,22.00ns,0.00ns,22.00ns,4.00ns,20.00ns,2.12us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.48s,172.00ns,0.00ns,173.00ns,13.00ns,163.00ns,1.87us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,526.64ms,26.00ns,0.00ns,27.00ns,19.00ns,23.00ns,14.49us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,526.74ms,23.00ns,0.00ns,23.00ns,6.00ns,21.00ns,2.85us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,476.35ms,16.00ns,0.00ns,16.00ns,16.00ns,15.00ns,15.78us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,477.00ms,12.00ns,0.00ns,12.00ns,19.00ns,10.00ns,18.16us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,526.62ms,26.00ns,0.00ns,27.00ns,5.00ns,24.00ns,2.22us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,527.12ms,27.00ns,0.00ns,27.00ns,5.00ns,24.00ns,2.07us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,477.04ms,22.00ns,0.00ns,22.00ns,5.00ns,19.00ns,2.24us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,526.66ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.68us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,526.51ms,24.00ns,0.00ns,24.00ns,26.00ns,21.00ns,15.62us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,526.68ms,26.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.31us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,477.05ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.57us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,476.89ms,13.00ns,0.00ns,13.00ns,5.00ns,11.00ns,3.35us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,576.96ms,26.00ns,0.00ns,26.00ns,10.00ns,24.00ns,8.47us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.26ms,23.00ns,0.00ns,23.00ns,17.00ns,20.00ns,15.89us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.48s,168.00ns,0.00ns,171.00ns,14.00ns,163.00ns,2.25us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,526.80ms,26.00ns,0.00ns,26.00ns,6.00ns,24.00ns,2.50us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,476.61ms,23.00ns,0.00ns,23.00ns,4.00ns,21.00ns,1.85us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,526.78ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.00us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,476.41ms,12.00ns,0.00ns,12.00ns,6.00ns,11.00ns,4.54us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,526.96ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,1.95us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,526.74ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.08us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,576.91ms,23.00ns,0.00ns,23.00ns,21.00ns,19.00ns,17.27us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,526.53ms,29.00ns,0.00ns,29.00ns,24.00ns,27.00ns,23.33us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,577.59ms,23.00ns,0.00ns,24.00ns,25.00ns,21.00ns,19.46us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,526.45ms,28.00ns,0.00ns,28.00ns,19.00ns,25.00ns,17.81us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,526.93ms,15.00ns,0.00ns,15.00ns,5.00ns,14.00ns,4.22us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,526.97ms,19.00ns,0.00ns,19.00ns,17.00ns,17.00ns,15.69us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,476.10ms,27.00ns,0.00ns,27.00ns,5.00ns,24.00ns,1.96us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,526.53ms,22.00ns,0.00ns,22.00ns,17.00ns,20.00ns,13.15us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.48s,170.00ns,0.00ns,172.00ns,14.00ns,164.00ns,4.41us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,526.85ms,27.00ns,0.00ns,27.00ns,6.00ns,24.00ns,3.29us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,526.46ms,23.00ns,0.00ns,23.00ns,6.00ns,21.00ns,2.34us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,526.99ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.16us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,476.16ms,12.00ns,0.00ns,12.00ns,20.00ns,10.00ns,19.74us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,526.54ms,25.00ns,0.00ns,25.00ns,20.00ns,22.00ns,18.70us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,476.84ms,25.00ns,0.00ns,25.00ns,6.00ns,22.00ns,2.42us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,27301,4.56s,109.73us,0.00ns,109.85us,766.00ns,107.93us,133.03us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13644,4.51s,219.39us,1.00ns,219.84us,5.82us,207.26us,241.68us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13583,4.51s,219.23us,0.00ns,220.84us,6.17us,208.12us,250.81us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,332471,4.67s,9.04us,0.00ns,8.99us,156.00ns,8.72us,16.46us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,334534,4.67s,8.97us,0.00ns,8.94us,143.00ns,8.65us,16.79us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,14885,4.51s,201.39us,0.00ns,201.51us,945.00ns,199.99us,233.01us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7951,4.51s,377.13us,0.00ns,377.31us,1.50us,374.88us,412.71us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,153145,4.67s,18.72us,0.00ns,19.26us,703.00ns,18.62us,30.98us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,218930,4.62s,13.65us,0.00ns,13.67us,114.00ns,13.54us,17.72us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,219581,4.62s,13.62us,0.00ns,13.63us,118.00ns,13.49us,18.58us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,69096,4.56s,42.97us,0.00ns,43.38us,1.87us,42.03us,62.69us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,67275,4.56s,44.16us,0.00ns,44.56us,1.77us,42.90us,62.59us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,13304,4.51s,225.86us,0.00ns,225.46us,2.43us,216.82us,255.02us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,13717,4.51s,218.28us,0.00ns,218.69us,1.39us,216.72us,232.43us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,576.93ms,26.00ns,0.00ns,27.00ns,98.00ns,24.00ns,97.66us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,527.11ms,26.00ns,0.00ns,26.00ns,11.00ns,24.00ns,9.48us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,527.13ms,25.00ns,0.00ns,26.00ns,13.00ns,22.00ns,11.97us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,526.97ms,34.00ns,0.00ns,34.00ns,6.00ns,31.00ns,1.85us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,476.90ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,2.54us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,476.98ms,12.00ns,0.00ns,12.00ns,16.00ns,10.00ns,16.02us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,576.65ms,31.00ns,0.00ns,31.00ns,28.00ns,29.00ns,18.69us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.53s,169.00ns,0.00ns,170.00ns,15.00ns,163.00ns,8.61us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,527.15ms,33.00ns,0.00ns,33.00ns,6.00ns,29.00ns,2.34us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,526.67ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.27us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,527.18ms,15.00ns,0.00ns,15.00ns,3.00ns,13.00ns,1.99us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,476.76ms,12.00ns,0.00ns,13.00ns,14.00ns,10.00ns,13.26us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,527.03ms,39.00ns,0.00ns,39.00ns,6.00ns,36.00ns,2.16us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,576.59ms,39.00ns,0.00ns,39.00ns,6.00ns,36.00ns,2.18us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,100037,4.57s,28.67us,0.00ns,29.95us,2.62us,26.70us,54.20us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,35654,4.56s,86.20us,0.00ns,84.10us,3.29us,80.08us,97.61us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,35511,4.56s,86.51us,0.00ns,84.45us,3.36us,79.96us,96.20us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,309663,4.67s,9.66us,0.00ns,9.65us,114.00ns,9.44us,14.39us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,314631,4.67s,9.51us,0.00ns,9.50us,101.00ns,9.29us,13.30us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,40835,4.56s,73.25us,0.00ns,73.43us,891.00ns,72.38us,94.49us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7949,4.51s,377.17us,0.00ns,377.40us,2.25us,374.57us,436.75us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,12278,4.51s,244.48us,0.00ns,244.32us,1.70us,242.55us,280.49us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,144838,4.67s,20.58us,0.00ns,20.38us,753.00ns,19.36us,26.18us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,221136,4.62s,13.47us,0.00ns,13.53us,202.00ns,13.33us,20.79us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,222193,4.62s,13.45us,0.00ns,13.47us,114.00ns,13.33us,19.71us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,212016,4.62s,14.18us,0.00ns,14.12us,211.00ns,13.64us,35.40us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,207441,4.62s,14.50us,0.00ns,14.43us,303.00ns,13.43us,18.66us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,32608,4.56s,91.09us,0.00ns,91.97us,2.91us,87.91us,111.06us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,32636,4.56s,90.98us,0.00ns,91.89us,2.94us,87.74us,111.09us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,526.88ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.45us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,527.30ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,2.53us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,527.10ms,23.00ns,0.00ns,23.00ns,8.00ns,20.00ns,5.65us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.10ms,27.00ns,0.00ns,28.00ns,5.00ns,25.00ns,2.34us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,526.96ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,2.24us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,527.06ms,12.00ns,0.00ns,12.00ns,15.00ns,10.00ns,14.02us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,527.06ms,26.00ns,0.00ns,26.00ns,6.00ns,24.00ns,2.46us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,527.27ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.03us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.48s,169.00ns,0.00ns,171.00ns,15.00ns,163.00ns,7.54us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,577.15ms,27.00ns,0.00ns,28.00ns,12.00ns,25.00ns,11.29us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,526.25ms,23.00ns,0.00ns,23.00ns,13.00ns,21.00ns,12.29us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,476.52ms,17.00ns,0.00ns,17.00ns,4.00ns,15.00ns,2.06us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,476.37ms,12.00ns,0.00ns,12.00ns,19.00ns,10.00ns,18.82us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,526.23ms,31.00ns,0.00ns,31.00ns,5.00ns,28.00ns,1.98us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,526.98ms,31.00ns,0.00ns,31.00ns,6.00ns,28.00ns,2.44us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,87809,4.56s,33.66us,0.00ns,34.13us,1.49us,30.18us,58.93us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41204,4.56s,75.66us,0.00ns,72.77us,3.63us,68.41us,90.22us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41075,4.56s,75.66us,0.00ns,73.00us,3.56us,68.41us,84.55us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,294517,4.67s,10.13us,0.00ns,10.15us,179.00ns,9.16us,13.83us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,328481,4.67s,9.16us,0.00ns,9.10us,145.00ns,8.83us,18.32us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,16304,4.51s,182.80us,0.00ns,183.97us,6.60us,170.33us,221.02us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7953,4.51s,377.12us,0.00ns,377.21us,1.40us,374.55us,411.49us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12293,4.51s,244.47us,0.00ns,244.02us,1.18us,242.53us,276.63us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,154616,4.67s,18.68us,0.00ns,19.08us,674.00ns,18.63us,31.40us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,218185,4.62s,13.67us,0.00ns,13.72us,176.00ns,13.54us,19.36us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,213356,4.62s,14.01us,0.00ns,14.03us,142.00ns,13.66us,18.80us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,213032,4.62s,14.01us,0.00ns,14.05us,270.00ns,13.54us,19.57us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,182620,4.62s,16.24us,0.00ns,16.39us,391.00ns,15.77us,21.61us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,14818,4.51s,202.13us,0.00ns,202.43us,5.29us,187.41us,227.68us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,14808,4.51s,202.37us,1.00ns,202.56us,5.29us,187.57us,280.75us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,61810,4.56s,48.14us,0.00ns,48.50us,1.27us,46.30us,73.99us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41221,4.56s,75.76us,0.00ns,72.74us,3.61us,68.49us,109.88us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,40967,4.56s,75.79us,0.00ns,73.19us,3.55us,68.54us,84.10us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,315205,4.67s,9.48us,0.00ns,9.49us,94.00ns,9.36us,15.39us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,304933,4.67s,9.43us,0.00ns,9.80us,1.31us,9.31us,16.16us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,17855,4.51s,167.16us,0.00ns,167.99us,3.76us,153.43us,201.53us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7932,4.51s,378.03us,0.00ns,378.19us,1.26us,376.57us,412.15us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12298,4.51s,244.42us,0.00ns,243.92us,1.53us,242.51us,289.63us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,147611,4.67s,20.00us,0.00ns,20.00us,811.00ns,18.88us,47.70us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,223152,4.62s,13.40us,0.00ns,13.41us,109.00ns,13.27us,35.75us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,219208,4.62s,13.50us,0.00ns,13.66us,259.00ns,13.35us,36.12us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,222011,4.62s,13.40us,0.00ns,13.48us,215.00ns,13.22us,36.15us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,225755,4.62s,13.24us,0.00ns,13.26us,111.00ns,13.11us,35.93us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,14112,4.51s,212.37us,1.00ns,212.56us,8.45us,191.43us,270.74us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,13955,4.51s,214.91us,0.00ns,214.94us,9.79us,191.89us,258.64us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,184878,4.62s,16.16us,0.00ns,16.20us,278.00ns,15.56us,20.89us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,33440,4.56s,91.32us,0.00ns,89.68us,3.35us,85.52us,101.31us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,33297,4.56s,91.35us,0.00ns,90.06us,3.13us,85.29us,111.39us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,287740,4.67s,10.38us,0.00ns,10.39us,115.00ns,10.21us,18.08us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,288444,4.67s,10.35us,0.00ns,10.36us,113.00ns,10.17us,20.60us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,28697,4.56s,104.40us,0.00ns,104.51us,2.20us,96.30us,139.10us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7957,4.51s,376.72us,0.00ns,377.04us,1.75us,374.58us,451.31us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,135314,4.67s,22.21us,0.00ns,21.85us,1.09us,19.91us,53.66us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,208188,4.62s,14.10us,0.00ns,14.38us,371.00ns,13.91us,36.01us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,207217,4.62s,14.27us,0.00ns,14.45us,342.00ns,14.02us,37.54us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,149557,4.57s,19.56us,0.00ns,20.03us,1.24us,19.22us,43.03us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,133556,4.57s,21.90us,0.00ns,22.43us,1.49us,20.80us,48.13us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,23908,4.56s,123.60us,0.00ns,125.45us,9.61us,106.13us,169.24us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,24213,4.51s,122.26us,0.00ns,123.87us,10.08us,105.52us,167.29us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,161143,4.62s,18.56us,0.00ns,18.59us,148.00ns,18.48us,23.04us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,37569,4.56s,81.96us,0.00ns,79.82us,3.41us,74.82us,91.88us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,37848,4.56s,81.81us,0.00ns,79.23us,3.46us,74.82us,89.41us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,216818,4.62s,13.77us,0.00ns,13.80us,182.00ns,13.43us,22.45us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,232516,4.62s,12.83us,0.00ns,12.87us,166.00ns,12.52us,19.65us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,51344,4.56s,58.21us,0.00ns,58.39us,861.00ns,56.22us,70.27us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7953,4.51s,377.13us,0.00ns,377.21us,1.22us,375.82us,417.17us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,131276,4.62s,22.85us,0.00ns,22.52us,636.00ns,21.45us,29.83us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,13295,4.51s,225.36us,0.00ns,225.62us,860.00ns,225.09us,242.08us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,13328,4.51s,224.83us,0.00ns,225.06us,764.00ns,224.78us,236.93us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,144265,4.62s,19.80us,0.00ns,20.76us,2.34us,18.89us,34.39us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,127417,4.57s,22.70us,0.00ns,23.51us,2.28us,20.50us,32.54us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,51124,4.56s,58.47us,0.00ns,58.65us,1.56us,54.70us,83.75us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,49832,4.56s,60.00us,0.00ns,60.16us,1.95us,54.54us,81.95us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,101015,4.57s,29.62us,0.00ns,29.66us,206.00ns,29.56us,34.66us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41674,4.56s,75.23us,0.00ns,71.95us,3.64us,67.92us,82.37us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41174,4.56s,75.24us,0.00ns,72.83us,3.46us,67.98us,80.11us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,207097,4.62s,14.39us,0.00ns,14.45us,189.00ns,13.59us,22.97us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,243633,4.62s,12.32us,0.00ns,12.28us,159.00ns,11.57us,19.02us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,52417,4.56s,57.16us,0.00ns,57.20us,504.00ns,55.52us,75.97us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7948,4.51s,377.17us,0.00ns,377.45us,1.27us,375.71us,420.14us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,131965,4.62s,21.70us,0.00ns,22.40us,1.41us,21.11us,30.64us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,11791,4.51s,253.65us,0.00ns,254.40us,2.87us,252.69us,284.82us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,11880,4.51s,251.73us,0.00ns,252.50us,3.23us,250.82us,286.56us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,157095,4.62s,18.21us,0.00ns,19.06us,2.01us,17.32us,34.05us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,149135,4.62s,19.51us,0.00ns,20.08us,1.46us,18.76us,32.47us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,56060,4.56s,53.28us,0.00ns,53.48us,0.96us,51.40us,63.16us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,56092,4.56s,53.20us,0.00ns,53.45us,1.11us,51.19us,63.42us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,526.93ms,31.00ns,0.00ns,31.00ns,5.00ns,29.00ns,1.92us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,526.73ms,38.00ns,0.00ns,38.00ns,7.00ns,36.00ns,3.13us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.08ms,28.00ns,0.00ns,28.00ns,25.00ns,25.00ns,19.33us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,526.99ms,28.00ns,0.00ns,28.00ns,7.00ns,26.00ns,4.17us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,526.80ms,17.00ns,0.00ns,17.00ns,4.00ns,15.00ns,2.40us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,526.93ms,23.00ns,0.00ns,23.00ns,10.00ns,20.00ns,8.55us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,476.78ms,24.00ns,0.00ns,24.00ns,5.00ns,22.00ns,1.92us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.07ms,22.00ns,0.00ns,22.00ns,12.00ns,20.00ns,9.44us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,171.00ns,0.00ns,173.00ns,13.00ns,164.00ns,2.73us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,526.88ms,28.00ns,0.00ns,28.00ns,5.00ns,25.00ns,2.37us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,527.12ms,25.00ns,0.00ns,26.00ns,20.00ns,23.00ns,18.92us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.24ms,19.00ns,0.00ns,19.00ns,6.00ns,17.00ns,2.46us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,576.83ms,15.00ns,0.00ns,15.00ns,70.00ns,12.00ns,69.75us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,577.31ms,62.00ns,0.00ns,62.00ns,7.00ns,58.00ns,2.59us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,576.73ms,42.00ns,0.00ns,42.00ns,6.00ns,39.00ns,2.21us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,576.55ms,35.00ns,0.00ns,35.00ns,67.00ns,32.00ns,66.67us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,576.56ms,38.00ns,0.00ns,38.00ns,14.00ns,36.00ns,12.71us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,526.61ms,29.00ns,0.00ns,29.00ns,18.00ns,26.00ns,11.56us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,576.50ms,24.00ns,0.00ns,24.00ns,5.00ns,22.00ns,2.38us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,576.70ms,21.00ns,0.00ns,21.00ns,5.00ns,19.00ns,2.19us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,476.63ms,16.00ns,0.00ns,17.00ns,5.00ns,14.00ns,2.27us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.43ms,23.00ns,0.00ns,23.00ns,14.00ns,20.00ns,11.98us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,526.34ms,22.00ns,0.00ns,22.00ns,20.00ns,20.00ns,18.80us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.54s,178.00ns,0.00ns,180.00ns,14.00ns,172.00ns,2.80us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,526.96ms,26.00ns,0.00ns,26.00ns,5.00ns,22.00ns,1.99us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,526.78ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,2.28us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,526.97ms,18.00ns,0.00ns,18.00ns,66.00ns,15.00ns,65.09us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,526.57ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,2.02us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,577.14ms,42.00ns,0.00ns,42.00ns,7.00ns,38.00ns,2.17us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,526.96ms,29.00ns,0.00ns,29.00ns,11.00ns,27.00ns,6.39us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,34718,4.56s,86.35us,0.00ns,86.37us,664.00ns,83.56us,96.93us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13661,4.51s,218.26us,0.00ns,219.58us,6.54us,204.87us,238.84us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13706,4.51s,217.96us,1.00ns,218.85us,6.35us,205.60us,236.85us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,255332,4.62s,13.85us,0.00ns,11.72us,2.56us,8.75us,18.71us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,283175,4.68s,9.01us,0.00ns,10.56us,2.39us,8.65us,18.18us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,18112,4.52s,165.28us,0.00ns,165.60us,1.23us,163.97us,202.01us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7949,4.51s,377.20us,0.00ns,377.42us,1.52us,374.87us,412.29us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,153524,4.67s,18.70us,0.00ns,19.21us,712.00ns,18.62us,64.62us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,216603,4.62s,13.80us,0.00ns,13.82us,140.00ns,13.68us,18.74us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,214086,4.62s,14.07us,0.00ns,13.98us,238.00ns,13.52us,18.57us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,85656,4.57s,34.33us,0.00ns,34.99us,2.41us,32.38us,51.12us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,82719,4.57s,35.54us,0.00ns,36.23us,2.19us,34.10us,51.36us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,16262,4.51s,182.30us,0.00ns,184.46us,3.72us,180.90us,209.37us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,15836,4.51s,188.65us,0.00ns,189.41us,3.98us,182.07us,220.57us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,20177,4.51s,148.54us,0.00ns,148.65us,2.84us,140.92us,162.07us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13578,4.51s,220.07us,0.00ns,220.92us,5.93us,209.22us,239.79us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13622,4.51s,219.93us,0.00ns,220.22us,5.86us,208.83us,239.66us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,319882,4.68s,9.29us,0.00ns,9.35us,491.00ns,9.12us,17.77us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,323351,4.63s,9.23us,0.00ns,9.25us,111.00ns,9.08us,30.52us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,10950,4.51s,272.51us,0.00ns,273.94us,3.13us,269.95us,324.14us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7946,4.51s,377.25us,0.00ns,377.52us,1.83us,374.55us,413.39us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,12279,4.52s,244.50us,0.00ns,244.29us,1.39us,242.55us,272.09us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,145404,4.66s,20.35us,0.00ns,20.30us,1.03us,18.83us,28.29us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,218959,4.62s,13.65us,0.00ns,13.67us,127.00ns,13.54us,17.71us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,214963,4.62s,14.07us,0.00ns,13.92us,262.00ns,13.53us,28.15us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,214504,4.62s,13.93us,0.00ns,13.95us,140.00ns,13.77us,18.28us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,214107,4.62s,13.95us,0.00ns,13.98us,154.00ns,13.77us,28.52us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,10187,4.51s,295.28us,0.00ns,294.47us,2.91us,286.17us,329.86us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,10319,4.51s,290.18us,0.00ns,290.69us,1.71us,287.43us,306.51us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,526.58ms,39.00ns,0.00ns,39.00ns,10.00ns,37.00ns,8.17us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,526.47ms,33.00ns,0.00ns,33.00ns,5.00ns,30.00ns,1.80us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,526.83ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.47us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,526.64ms,37.00ns,0.00ns,38.00ns,6.00ns,35.00ns,2.53us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,526.54ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,2.04us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,526.97ms,37.00ns,0.00ns,36.00ns,19.00ns,26.00ns,12.49us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,526.39ms,31.00ns,0.00ns,31.00ns,6.00ns,28.00ns,2.73us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.53s,175.00ns,0.00ns,177.00ns,15.00ns,169.00ns,6.66us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,527.11ms,36.00ns,0.00ns,36.00ns,7.00ns,32.00ns,2.20us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,526.55ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.96us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,476.46ms,18.00ns,0.00ns,18.00ns,4.00ns,15.00ns,2.17us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,476.45ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,1.84us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,626.85ms,84.00ns,0.00ns,85.00ns,9.00ns,81.00ns,2.00us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,576.96ms,57.00ns,0.00ns,58.00ns,8.00ns,54.00ns,2.07us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,527.02ms,37.00ns,0.00ns,37.00ns,6.00ns,35.00ns,2.05us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,576.80ms,38.00ns,0.00ns,38.00ns,6.00ns,36.00ns,1.86us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,526.85ms,29.00ns,0.00ns,29.00ns,7.00ns,26.00ns,2.36us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,527.04ms,31.00ns,0.00ns,31.00ns,6.00ns,28.00ns,2.17us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,526.39ms,25.00ns,0.00ns,26.00ns,6.00ns,22.00ns,2.25us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,476.84ms,19.00ns,0.00ns,19.00ns,5.00ns,16.00ns,2.24us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,526.61ms,28.00ns,0.00ns,28.00ns,21.00ns,26.00ns,19.87us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,42,1000000,627.16ms,28.00ns,0.00ns,28.00ns,6.00ns,25.00ns,1.99us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.53s,183.00ns,0.00ns,185.00ns,11.00ns,177.00ns,2.46us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,526.85ms,31.00ns,0.00ns,32.00ns,6.00ns,28.00ns,2.24us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,526.50ms,36.00ns,0.00ns,36.00ns,5.00ns,33.00ns,2.12us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,577.10ms,19.00ns,0.00ns,19.00ns,15.00ns,17.00ns,14.17us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,476.44ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.39us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,577.33ms,53.00ns,0.00ns,53.00ns,7.00ns,49.00ns,2.02us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,526.96ms,35.00ns,0.00ns,35.00ns,7.00ns,33.00ns,2.78us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,139740,4.57s,21.47us,0.00ns,21.43us,1.24us,18.32us,43.98us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29441,4.56s,102.38us,0.00ns,101.87us,3.36us,97.08us,114.07us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,29530,4.51s,102.05us,0.00ns,101.56us,3.13us,97.16us,112.55us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,278662,4.67s,10.71us,0.00ns,10.72us,121.00ns,10.44us,15.88us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,290400,4.67s,10.28us,0.00ns,10.30us,124.00ns,10.12us,34.44us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,31507,4.56s,94.92us,0.00ns,95.18us,1.21us,93.79us,123.96us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7950,4.51s,377.16us,0.00ns,377.34us,1.61us,374.60us,421.25us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,146039,4.67s,19.99us,0.00ns,20.20us,923.00ns,19.37us,31.04us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,219701,4.62s,13.53us,0.00ns,13.62us,245.00ns,13.39us,19.20us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,221278,4.62s,13.51us,0.00ns,13.52us,125.00ns,13.38us,21.44us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,150688,4.57s,19.08us,0.00ns,19.88us,1.88us,18.75us,33.36us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,136583,4.57s,21.42us,0.00ns,21.93us,1.64us,20.29us,45.96us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,27620,4.56s,108.84us,0.00ns,108.59us,4.36us,100.93us,129.18us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,28462,4.56s,104.31us,1.00ns,105.37us,3.31us,100.92us,125.70us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,62357,4.56s,47.92us,0.00ns,48.08us,651.00ns,46.38us,55.89us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29444,4.56s,102.16us,1.00ns,101.86us,3.17us,97.97us,113.88us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,29468,4.56s,102.52us,0.00ns,101.77us,3.06us,97.66us,113.66us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,299579,4.67s,9.97us,0.00ns,9.98us,118.00ns,9.76us,17.40us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,218244,4.62s,14.70us,0.00ns,13.71us,1.95us,9.77us,23.26us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,22195,4.51s,134.58us,0.00ns,135.14us,3.55us,127.07us,170.22us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7943,4.51s,377.33us,0.00ns,377.68us,1.34us,376.12us,417.94us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,12282,4.51s,244.48us,0.00ns,244.24us,1.54us,242.56us,286.68us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,144171,4.67s,20.03us,0.00ns,20.48us,1.36us,19.08us,38.74us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,224232,4.62s,13.31us,0.00ns,13.33us,123.00ns,13.19us,21.73us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,224642,4.62s,13.30us,0.00ns,13.32us,146.00ns,13.18us,35.63us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,221837,4.62s,13.47us,0.00ns,13.49us,160.00ns,13.15us,22.10us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,212767,4.62s,14.29us,0.00ns,14.07us,528.00ns,13.15us,19.94us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,18292,4.51s,162.64us,1.00ns,163.97us,6.05us,144.26us,189.07us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,18528,4.51s,160.47us,0.00ns,161.89us,6.36us,140.58us,185.93us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,526.98ms,34.00ns,0.00ns,34.00ns,7.00ns,31.00ns,3.03us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,527.15ms,32.00ns,0.00ns,32.00ns,30.00ns,29.00ns,19.74us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,527.06ms,28.00ns,0.00ns,28.00ns,6.00ns,25.00ns,2.43us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,577.08ms,33.00ns,0.00ns,33.00ns,6.00ns,30.00ns,2.08us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,527.03ms,28.00ns,0.00ns,28.00ns,4.00ns,26.00ns,1.93us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,526.68ms,23.00ns,0.00ns,23.00ns,5.00ns,20.00ns,1.86us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,626.99ms,25.00ns,0.00ns,25.00ns,5.00ns,23.00ns,1.87us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.53s,184.00ns,0.00ns,186.00ns,16.00ns,177.00ns,6.25us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,526.91ms,30.00ns,0.00ns,30.00ns,7.00ns,27.00ns,2.29us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,526.93ms,28.00ns,0.00ns,29.00ns,19.00ns,25.00ns,17.55us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,526.94ms,17.00ns,0.00ns,17.00ns,4.00ns,15.00ns,2.34us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,527.15ms,15.00ns,0.00ns,15.00ns,18.00ns,13.00ns,12.56us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,627.42ms,75.00ns,0.00ns,77.00ns,8.00ns,71.00ns,2.01us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,577.03ms,52.00ns,0.00ns,51.00ns,7.00ns,45.00ns,1.88us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,577.28ms,35.00ns,0.00ns,35.00ns,5.00ns,32.00ns,2.12us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,527.18ms,37.00ns,0.00ns,38.00ns,32.00ns,35.00ns,18.43us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,527.03ms,28.00ns,0.00ns,28.00ns,5.00ns,25.00ns,2.12us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.14ms,26.00ns,0.00ns,26.00ns,5.00ns,24.00ns,2.48us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,526.94ms,26.00ns,0.00ns,26.00ns,5.00ns,22.00ns,2.21us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,527.13ms,19.00ns,0.00ns,19.00ns,4.00ns,17.00ns,2.14us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,527.16ms,22.00ns,0.00ns,22.00ns,6.00ns,19.00ns,2.51us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,627.21ms,24.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.19us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.53s,185.00ns,0.00ns,187.00ns,14.00ns,178.00ns,2.32us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,577.34ms,27.00ns,0.00ns,27.00ns,7.00ns,24.00ns,3.08us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,527.31ms,32.00ns,0.00ns,32.00ns,5.00ns,29.00ns,2.25us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,526.90ms,18.00ns,0.00ns,18.00ns,3.00ns,16.00ns,2.32us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,526.68ms,14.00ns,0.00ns,14.00ns,181.00ns,12.00ns,179.34us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,578.21ms,47.00ns,0.00ns,47.00ns,13.00ns,44.00ns,7.63us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,627.26ms,33.00ns,0.00ns,33.00ns,7.00ns,31.00ns,2.04us\n"
  },
  {
    "path": "benchmarks/record/x86_64/2023-08-26.csv",
    "content": "name,model,rebar_version,engine,engine_version,err,haystack_len,iters,total,median,mad,mean,stddev,min,max\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,17387,4.51s,172.23us,0.00ns,172.51us,1.04us,170.65us,183.76us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,594933,153789,4.57s,19.47us,0.00ns,19.47us,121.00ns,19.34us,27.23us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,594933,107808,4.62s,27.46us,0.00ns,27.50us,248.00ns,26.31us,46.50us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,594933,303206,4.67s,10.02us,0.00ns,9.86us,333.00ns,9.25us,15.66us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,266043,4.77s,10.93us,0.00ns,10.94us,97.00ns,10.90us,17.03us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,16417,4.51s,181.67us,0.00ns,182.70us,1.84us,180.64us,191.81us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,17717,4.51s,169.09us,0.00ns,169.30us,825.00ns,168.28us,186.39us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,6544,4.51s,457.57us,0.00ns,458.44us,3.97us,453.53us,510.34us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,7275,4.51s,411.43us,0.00ns,412.38us,4.08us,407.06us,474.43us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,14097,4.56s,212.29us,0.00ns,212.50us,0.97us,210.90us,220.88us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,15843,4.51s,190.73us,0.00ns,189.33us,2.81us,183.60us,205.27us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,18518,4.51s,161.81us,0.00ns,161.98us,851.00ns,160.23us,170.00us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,17795,4.51s,163.12us,0.00ns,168.56us,7.41us,161.97us,185.39us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,7210,4.51s,415.24us,0.00ns,416.08us,10.97us,397.98us,511.65us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,16024,4.51s,187.31us,0.00ns,187.20us,846.00ns,184.61us,195.75us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,9672,4.51s,310.19us,1.00ns,310.17us,4.48us,299.34us,335.51us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,3290,4.51s,910.78us,0.00ns,912.07us,5.86us,905.08us,0.97ms\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,4586,4.51s,661.24us,2.00ns,654.25us,35.08us,601.96us,816.93us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,9101,4.56s,328.91us,0.00ns,329.30us,1.72us,326.16us,344.42us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,9288,4.51s,321.44us,0.00ns,322.97us,2.43us,321.02us,338.43us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,9973,4.51s,302.18us,0.00ns,300.80us,3.01us,294.95us,311.42us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,8495,4.51s,352.84us,0.00ns,353.13us,1.17us,351.90us,365.87us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,6209,4.51s,482.75us,0.00ns,483.18us,1.67us,479.14us,496.39us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,2197,4.51s,1.37ms,0.00ns,1.37ms,6.97us,1.35ms,1.42ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,3405,4.51s,883.92us,0.00ns,881.15us,12.88us,843.75us,927.47us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,6587,4.56s,459.50us,0.00ns,455.12us,10.70us,430.93us,471.16us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,5598,4.51s,534.17us,0.00ns,535.94us,3.19us,527.74us,553.98us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,6243,4.51s,480.24us,0.00ns,480.54us,1.63us,476.18us,500.46us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,5599,4.51s,528.61us,0.00ns,535.84us,11.37us,527.52us,566.07us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,0.98s,186.00ns,0.00ns,186.00ns,14.00ns,182.00ns,7.84us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,664,1000000,628.94ms,35.00ns,0.00ns,35.00ns,5.00ns,33.00ns,2.09us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,664,1000000,1.53s,188.00ns,0.00ns,189.00ns,13.00ns,182.00ns,1.99us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,629.15ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.61us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,1.43s,166.00ns,0.00ns,167.00ns,14.00ns,161.00ns,8.59us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,829.55ms,187.00ns,0.00ns,188.00ns,17.00ns,183.00ns,11.37us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,829.48ms,171.00ns,0.00ns,172.00ns,12.00ns,167.00ns,2.33us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,779.94ms,141.00ns,0.00ns,141.00ns,12.00ns,129.00ns,2.75us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,831.66ms,166.00ns,0.00ns,167.00ns,24.00ns,156.00ns,20.52us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.79s,299.00ns,0.00ns,300.00ns,25.00ns,292.00ns,13.53us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,879.71ms,188.00ns,0.00ns,189.00ns,14.00ns,185.00ns,5.44us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,930.14ms,168.00ns,0.00ns,169.00ns,12.00ns,165.00ns,5.54us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,836.81ms,170.00ns,0.00ns,170.00ns,12.00ns,166.00ns,2.60us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,829.72ms,158.00ns,0.00ns,160.00ns,12.00ns,153.00ns,2.47us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,830.23ms,207.00ns,0.00ns,207.00ns,12.00ns,203.00ns,1.98us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,1.13s,330.00ns,0.00ns,330.00ns,16.00ns,314.00ns,2.08us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,929.86ms,235.00ns,0.00ns,235.00ns,15.00ns,224.00ns,2.84us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,930.40ms,253.00ns,0.00ns,234.00ns,33.00ns,199.00ns,5.93us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,2.03s,440.00ns,0.00ns,441.00ns,22.00ns,431.00ns,9.39us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,1.18s,337.00ns,0.00ns,338.00ns,19.00ns,332.00ns,7.39us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,1.08s,321.00ns,0.00ns,321.00ns,17.00ns,313.00ns,6.35us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,1.33s,375.00ns,0.00ns,375.00ns,23.00ns,366.00ns,15.89us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,1.58s,497.00ns,0.00ns,498.00ns,22.00ns,484.00ns,9.70us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,1.08s,298.00ns,0.00ns,300.00ns,19.00ns,279.00ns,6.14us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.08s,265.00ns,0.00ns,267.00ns,19.00ns,259.00ns,9.93us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,2.34s,585.00ns,0.00ns,586.00ns,23.00ns,574.00ns,3.73us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,1.58s,567.00ns,0.00ns,567.00ns,14.00ns,558.00ns,4.58us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,1.48s,502.00ns,0.00ns,503.00ns,21.00ns,492.00ns,6.60us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.58s,569.00ns,0.00ns,569.00ns,16.00ns,557.00ns,2.27us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,678.36ms,50.00ns,0.00ns,50.00ns,7.00ns,47.00ns,2.17us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,69,1000000,578.75ms,15.00ns,0.00ns,15.00ns,6.00ns,13.00ns,3.98us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,69,1000000,1.48s,164.00ns,0.00ns,165.00ns,15.00ns,160.00ns,7.36us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,69,1000000,528.42ms,17.00ns,0.00ns,17.00ns,20.00ns,15.00ns,19.74us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,69,1000000,1.48s,159.00ns,0.00ns,160.00ns,12.00ns,155.00ns,2.19us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,628.87ms,49.00ns,0.00ns,49.00ns,68.00ns,47.00ns,67.17us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,588.37ms,45.00ns,0.00ns,45.00ns,15.00ns,43.00ns,13.63us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,578.37ms,34.00ns,0.00ns,34.00ns,7.00ns,29.00ns,2.93us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,628.13ms,27.00ns,0.00ns,27.00ns,6.00ns,23.00ns,2.27us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.53s,185.00ns,0.00ns,186.00ns,14.00ns,180.00ns,7.67us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,578.11ms,55.00ns,0.00ns,55.00ns,8.00ns,53.00ns,3.19us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,678.48ms,45.00ns,0.00ns,45.00ns,7.00ns,42.00ns,1.93us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,528.54ms,45.00ns,0.00ns,45.00ns,6.00ns,42.00ns,2.00us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,628.34ms,25.00ns,0.00ns,25.00ns,5.00ns,22.00ns,2.07us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,578.59ms,47.00ns,0.00ns,48.00ns,7.00ns,44.00ns,1.95us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,717547,4.83s,4.15us,0.00ns,4.15us,68.00ns,4.07us,22.15us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,594933,148263,4.57s,19.51us,0.00ns,20.20us,790.00ns,19.34us,37.23us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,594933,107497,4.62s,27.45us,0.00ns,27.58us,277.00ns,26.30us,33.23us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,594933,319619,4.67s,9.34us,0.00ns,9.35us,98.00ns,9.25us,13.84us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,266128,4.77s,10.93us,0.00ns,10.94us,107.00ns,10.90us,16.03us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,700678,4.88s,4.25us,0.00ns,4.25us,68.00ns,4.11us,12.79us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,686678,4.88s,4.37us,0.00ns,4.34us,98.00ns,4.10us,14.02us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,139192,4.57s,21.48us,0.00ns,21.52us,182.00ns,21.46us,41.51us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,26186,4.56s,114.37us,0.00ns,114.54us,683.00ns,114.34us,138.14us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,390153,4.82s,7.36us,0.00ns,7.36us,88.00ns,7.13us,13.65us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,684499,4.78s,4.36us,0.00ns,4.35us,78.00ns,4.17us,11.04us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,698455,4.88s,4.29us,0.00ns,4.26us,96.00ns,4.10us,12.93us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,706114,4.88s,4.16us,0.00ns,4.22us,103.00ns,4.10us,11.10us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,26147,4.56s,114.37us,0.00ns,114.70us,2.02us,114.34us,144.11us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,682233,4.88s,4.34us,0.00ns,4.37us,92.00ns,4.28us,10.77us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,566848,4.78s,5.21us,0.00ns,5.26us,119.00ns,5.14us,15.51us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,74600,4.56s,39.28us,0.00ns,40.18us,1.83us,38.16us,54.21us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,17460,4.51s,171.55us,0.00ns,171.79us,872.00ns,171.52us,200.12us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,262145,4.72s,10.97us,0.00ns,11.12us,249.00ns,10.91us,17.50us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,556540,4.83s,5.21us,0.00ns,5.36us,386.00ns,5.19us,11.10us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,576006,4.83s,5.17us,0.00ns,5.18us,74.00ns,5.11us,15.97us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,576867,4.83s,5.16us,0.00ns,5.17us,80.00ns,5.14us,26.79us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,389055,4.72s,7.67us,0.00ns,7.68us,100.00ns,7.64us,29.40us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,52125,4.56s,57.24us,0.00ns,57.52us,2.62us,55.09us,79.69us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,13097,4.51s,228.73us,0.00ns,229.04us,1.04us,228.69us,274.27us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,188608,4.67s,15.58us,0.00ns,15.57us,112.00ns,15.41us,19.98us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,389785,4.72s,7.66us,0.00ns,7.67us,78.00ns,7.63us,12.01us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,389409,4.72s,7.66us,0.00ns,7.67us,85.00ns,7.62us,21.29us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,379218,4.72s,7.80us,0.00ns,7.88us,232.00ns,7.61us,13.74us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,476.77ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.01us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,664,1000000,527.25ms,35.00ns,0.00ns,35.00ns,17.00ns,32.00ns,12.00us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,664,1000000,1.53s,185.00ns,0.00ns,186.00ns,12.00ns,179.00ns,7.53us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,476.47ms,28.00ns,0.00ns,28.00ns,14.00ns,26.00ns,11.45us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,1.48s,165.00ns,0.00ns,167.00ns,11.00ns,161.00ns,2.28us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,527.13ms,15.00ns,0.00ns,15.00ns,9.00ns,13.00ns,6.79us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,476.53ms,15.00ns,0.00ns,15.00ns,4.00ns,14.00ns,2.77us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,526.46ms,39.00ns,0.00ns,40.00ns,7.00ns,32.00ns,2.34us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,778.18ms,144.00ns,0.00ns,144.00ns,12.00ns,141.00ns,2.47us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.53s,172.00ns,0.00ns,173.00ns,12.00ns,167.00ns,3.24us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,476.45ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,2.38us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,476.98ms,14.00ns,0.00ns,14.00ns,6.00ns,12.00ns,2.49us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,477.19ms,14.00ns,0.00ns,14.00ns,3.00ns,12.00ns,1.70us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,727.95ms,144.00ns,0.00ns,145.00ns,11.00ns,141.00ns,2.20us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,477.08ms,14.00ns,0.00ns,14.00ns,12.00ns,12.00ns,11.56us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,526.87ms,19.00ns,0.00ns,19.00ns,13.00ns,17.00ns,11.62us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,577.36ms,61.00ns,0.00ns,61.00ns,15.00ns,56.00ns,12.81us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,879.00ms,209.00ns,0.00ns,209.00ns,19.00ns,204.00ns,11.89us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.48s,165.00ns,0.00ns,166.00ns,12.00ns,161.00ns,2.36us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,526.92ms,20.00ns,0.00ns,20.00ns,13.00ns,17.00ns,11.88us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,526.63ms,19.00ns,0.00ns,19.00ns,4.00ns,16.00ns,2.37us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,526.67ms,19.00ns,0.00ns,19.00ns,8.00ns,16.00ns,5.19us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,526.42ms,25.00ns,0.00ns,25.00ns,4.00ns,23.00ns,2.22us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,576.65ms,79.00ns,0.00ns,79.00ns,8.00ns,74.00ns,2.31us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.03s,272.00ns,0.00ns,273.00ns,18.00ns,269.00ns,8.23us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.48s,169.00ns,0.00ns,170.00ns,13.00ns,163.00ns,5.30us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,526.73ms,23.00ns,0.00ns,23.00ns,6.00ns,20.00ns,2.90us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,526.82ms,21.00ns,0.00ns,21.00ns,32.00ns,19.00ns,18.20us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,476.83ms,21.00ns,0.00ns,21.00ns,13.00ns,19.00ns,12.21us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,477.93ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.41us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,69,1000000,476.72ms,15.00ns,0.00ns,15.00ns,19.00ns,13.00ns,18.45us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,69,1000000,1.48s,164.00ns,0.00ns,165.00ns,15.00ns,160.00ns,8.03us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,69,1000000,476.41ms,17.00ns,0.00ns,17.00ns,5.00ns,15.00ns,2.36us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,69,1000000,1.48s,160.00ns,0.00ns,161.00ns,10.00ns,155.00ns,2.27us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,526.78ms,12.00ns,0.00ns,12.00ns,16.00ns,11.00ns,15.56us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,476.62ms,12.00ns,0.00ns,12.00ns,14.00ns,10.00ns,13.29us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,526.96ms,15.00ns,0.00ns,15.00ns,21.00ns,13.00ns,15.12us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,526.36ms,23.00ns,0.00ns,25.00ns,7.00ns,21.00ns,2.34us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.48s,156.00ns,0.00ns,158.00ns,14.00ns,153.00ns,8.52us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,526.63ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.11us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,526.64ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.13us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,476.67ms,12.00ns,0.00ns,12.00ns,41.00ns,10.00ns,21.04us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,526.55ms,23.00ns,0.00ns,24.00ns,27.00ns,21.00ns,15.48us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,485.56ms,13.00ns,0.00ns,13.00ns,5.00ns,11.00ns,2.91us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,477.25ms,14.00ns,0.00ns,14.00ns,25.00ns,12.00ns,20.79us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,527.06ms,16.00ns,0.00ns,16.00ns,20.00ns,14.00ns,19.55us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,527.20ms,37.00ns,0.00ns,37.00ns,7.00ns,28.00ns,2.74us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.48s,157.00ns,0.00ns,158.00ns,11.00ns,153.00ns,2.11us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,476.69ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.39us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,477.28ms,13.00ns,0.00ns,14.00ns,6.00ns,11.00ns,5.08us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,478.04ms,15.00ns,0.00ns,15.00ns,27.00ns,12.00ns,22.28us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,476.74ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,1.85us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,526.90ms,18.00ns,0.00ns,18.00ns,4.00ns,16.00ns,2.13us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,577.21ms,43.00ns,0.00ns,43.00ns,21.00ns,34.00ns,18.84us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.48s,161.00ns,0.00ns,162.00ns,13.00ns,157.00ns,5.54us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,526.85ms,15.00ns,0.00ns,15.00ns,22.00ns,13.00ns,22.01us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,526.88ms,13.00ns,0.00ns,13.00ns,17.00ns,11.00ns,16.39us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,478.44ms,14.00ns,0.00ns,14.00ns,3.00ns,12.00ns,1.84us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,,1000000,476.88ms,11.00ns,0.00ns,11.00ns,36.00ns,9.00ns,19.78us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,,1000000,526.92ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.77us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,,1000000,1.48s,157.00ns,0.00ns,158.00ns,10.00ns,151.00ns,2.40us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,,1000000,526.52ms,11.00ns,0.00ns,11.00ns,1.00ns,9.00ns,390.00ns\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,,1000000,1.48s,155.00ns,0.00ns,156.00ns,15.00ns,151.00ns,8.64us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,,1000000,477.02ms,11.00ns,0.00ns,11.00ns,5.00ns,9.00ns,2.31us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,,1000000,476.36ms,11.00ns,0.00ns,11.00ns,14.00ns,9.00ns,14.10us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,,1000000,527.22ms,11.00ns,0.00ns,11.00ns,15.00ns,9.00ns,13.39us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,,1000000,527.07ms,10.00ns,0.00ns,10.00ns,3.00ns,8.00ns,2.11us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,,1000000,1.49s,156.00ns,0.00ns,157.00ns,11.00ns,152.00ns,2.20us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,,1000000,476.88ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.25us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,,1000000,483.33ms,10.00ns,0.00ns,10.00ns,28.00ns,9.00ns,16.43us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,,1000000,476.15ms,10.00ns,0.00ns,10.00ns,21.00ns,8.00ns,15.35us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,,1000000,576.77ms,10.00ns,0.00ns,10.00ns,6.00ns,9.00ns,4.93us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,,1000000,476.66ms,10.00ns,0.00ns,10.00ns,2.00ns,9.00ns,1.71us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,,1000000,486.25ms,11.00ns,0.00ns,12.00ns,2.00ns,10.00ns,1.72us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,,1000000,532.17ms,11.00ns,0.00ns,11.00ns,35.00ns,9.00ns,18.96us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,,1000000,477.53ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,3.20us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,,1000000,1.48s,155.00ns,0.00ns,156.00ns,11.00ns,151.00ns,2.60us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,,1000000,627.38ms,11.00ns,0.00ns,12.00ns,28.00ns,10.00ns,20.13us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,,1000000,476.47ms,10.00ns,0.00ns,10.00ns,23.00ns,9.00ns,14.33us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,,1000000,476.68ms,10.00ns,0.00ns,10.00ns,5.00ns,9.00ns,3.16us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,,1000000,476.67ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.22us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,,1000000,527.04ms,11.00ns,0.00ns,11.00ns,3.00ns,9.00ns,2.02us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,,1000000,476.77ms,10.00ns,0.00ns,10.00ns,5.00ns,9.00ns,2.28us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,,1000000,1.49s,154.00ns,0.00ns,155.00ns,15.00ns,150.00ns,8.85us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,,1000000,476.76ms,12.00ns,0.00ns,12.00ns,2.00ns,10.00ns,1.70us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,,1000000,481.89ms,10.00ns,0.00ns,10.00ns,3.00ns,9.00ns,2.10us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,,1000000,476.99ms,10.00ns,0.00ns,10.00ns,36.00ns,9.00ns,20.12us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,592745,4.83s,5.00us,0.00ns,5.03us,97.00ns,4.93us,12.03us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,594933,153680,4.62s,19.47us,0.00ns,19.49us,181.00ns,19.34us,40.58us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,594933,108159,4.61s,27.45us,0.00ns,27.41us,353.00ns,26.31us,35.65us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,594933,302249,4.67s,10.03us,0.00ns,9.89us,312.00ns,9.25us,18.60us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,265319,4.77s,10.95us,0.00ns,10.96us,110.00ns,10.90us,20.11us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,588827,4.83s,5.04us,0.00ns,5.06us,97.00ns,4.94us,11.02us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,592692,4.78s,5.02us,0.00ns,5.03us,82.00ns,4.92us,10.66us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,130342,4.57s,22.96us,0.00ns,22.98us,189.00ns,22.75us,29.75us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,25897,4.56s,115.36us,0.00ns,115.81us,2.71us,115.26us,146.59us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,331232,4.77s,8.90us,0.00ns,8.71us,415.00ns,7.99us,16.68us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,463816,4.78s,6.38us,0.00ns,6.44us,158.00ns,5.86us,25.90us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,598402,4.78s,4.93us,0.00ns,4.98us,124.00ns,4.87us,25.48us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,600706,4.83s,4.96us,0.00ns,4.96us,71.00ns,4.89us,11.18us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,591549,4.83s,5.03us,0.00ns,5.04us,75.00ns,4.94us,13.80us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,354815,4.67s,8.64us,0.00ns,8.42us,443.00ns,7.61us,14.12us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,70682,4.56s,42.74us,0.00ns,42.41us,806.00ns,41.49us,51.88us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,17108,4.51s,175.70us,0.00ns,175.33us,1.27us,173.74us,208.24us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,215982,4.72s,13.44us,0.00ns,13.56us,343.00ns,13.13us,21.50us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,375929,4.72s,7.94us,0.00ns,7.95us,111.00ns,7.78us,17.14us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,389445,4.72s,7.66us,0.00ns,7.67us,108.00ns,7.57us,13.55us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,348362,4.72s,8.94us,0.00ns,8.58us,608.00ns,7.55us,19.26us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,272693,4.67s,10.83us,0.00ns,10.96us,315.00ns,10.56us,17.89us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,48926,4.56s,60.48us,0.00ns,61.28us,1.46us,59.56us,73.15us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,12932,4.51s,231.66us,0.00ns,231.95us,908.00ns,231.56us,267.97us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,158646,4.67s,18.55us,0.00ns,18.58us,167.00ns,18.45us,26.92us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,276502,4.67s,10.80us,0.00ns,10.82us,126.00ns,10.72us,34.98us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,263097,4.67s,11.48us,0.00ns,11.37us,335.00ns,10.68us,27.30us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,265210,4.62s,11.60us,0.00ns,11.28us,454.00ns,10.71us,25.91us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,526.98ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,3.65us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,664,1000000,527.06ms,35.00ns,0.00ns,35.00ns,6.00ns,32.00ns,2.59us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,664,1000000,1.58s,200.00ns,0.00ns,201.00ns,11.00ns,194.00ns,2.39us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,527.29ms,28.00ns,0.00ns,28.00ns,10.00ns,26.00ns,8.24us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,1.48s,165.00ns,0.00ns,166.00ns,13.00ns,161.00ns,5.10us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,527.02ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,2.20us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,526.95ms,19.00ns,0.00ns,19.00ns,5.00ns,16.00ns,3.22us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,527.24ms,36.00ns,0.00ns,36.00ns,6.00ns,33.00ns,2.40us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,778.13ms,153.00ns,0.00ns,153.00ns,18.00ns,146.00ns,12.07us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.48s,162.00ns,0.00ns,163.00ns,12.00ns,157.00ns,2.25us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,526.75ms,20.00ns,0.00ns,20.00ns,4.00ns,17.00ns,2.37us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,526.74ms,19.00ns,0.00ns,19.00ns,4.00ns,16.00ns,1.84us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,526.65ms,19.00ns,0.00ns,19.00ns,6.00ns,16.00ns,3.18us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,727.55ms,153.00ns,0.00ns,153.00ns,14.00ns,146.00ns,5.75us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,476.88ms,20.00ns,0.00ns,20.00ns,6.00ns,17.00ns,3.86us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,527.27ms,28.00ns,0.00ns,28.00ns,5.00ns,25.00ns,2.53us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,627.03ms,64.00ns,0.00ns,64.00ns,9.00ns,53.00ns,2.42us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,929.02ms,229.00ns,0.00ns,228.00ns,15.00ns,215.00ns,4.77us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.53s,177.00ns,0.00ns,178.00ns,12.00ns,171.00ns,1.88us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,527.13ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.11us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,526.86ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,1.98us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,526.98ms,28.00ns,0.00ns,28.00ns,39.00ns,25.00ns,23.99us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,527.14ms,37.00ns,0.00ns,38.00ns,6.00ns,33.00ns,1.90us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,676.87ms,91.00ns,0.00ns,89.00ns,18.00ns,75.00ns,12.78us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.04s,285.00ns,0.00ns,286.00ns,18.00ns,280.00ns,7.31us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.53s,185.00ns,0.00ns,186.00ns,12.00ns,178.00ns,2.08us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,576.61ms,38.00ns,0.00ns,38.00ns,7.00ns,34.00ns,3.10us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,526.87ms,37.00ns,0.00ns,37.00ns,6.00ns,33.00ns,2.20us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,527.03ms,37.00ns,0.00ns,37.00ns,21.00ns,33.00ns,19.77us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,526.92ms,15.00ns,0.00ns,15.00ns,9.00ns,12.00ns,8.00us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,69,1000000,476.90ms,15.00ns,0.00ns,15.00ns,2.00ns,13.00ns,2.02us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,69,1000000,1.48s,158.00ns,0.00ns,159.00ns,12.00ns,154.00ns,2.41us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,69,1000000,476.28ms,17.00ns,0.00ns,17.00ns,4.00ns,15.00ns,2.35us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,69,1000000,1.48s,157.00ns,0.00ns,158.00ns,13.00ns,153.00ns,6.21us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,526.53ms,17.00ns,0.00ns,17.00ns,11.00ns,15.00ns,9.80us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,526.92ms,16.00ns,0.00ns,16.00ns,3.00ns,14.00ns,1.60us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,526.95ms,16.00ns,0.00ns,16.00ns,4.00ns,13.00ns,2.34us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,527.14ms,29.00ns,0.00ns,29.00ns,10.00ns,21.00ns,7.22us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.48s,161.00ns,0.00ns,162.00ns,12.00ns,158.00ns,2.34us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,526.59ms,14.00ns,0.00ns,14.00ns,15.00ns,12.00ns,14.83us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,476.45ms,16.00ns,0.00ns,16.00ns,3.00ns,14.00ns,1.87us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,527.00ms,16.00ns,0.00ns,16.00ns,14.00ns,14.00ns,13.62us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,526.57ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.05us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,476.43ms,14.00ns,0.00ns,14.00ns,8.00ns,12.00ns,6.08us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,527.23ms,20.00ns,0.00ns,20.00ns,6.00ns,19.00ns,2.37us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,527.02ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,2.00us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,526.93ms,37.00ns,0.00ns,35.00ns,23.00ns,27.00ns,18.45us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.48s,159.00ns,0.00ns,160.00ns,11.00ns,155.00ns,2.26us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,532.81ms,20.00ns,0.00ns,20.00ns,5.00ns,18.00ns,2.65us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,526.96ms,20.00ns,0.00ns,20.00ns,6.00ns,18.00ns,2.90us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,526.62ms,18.00ns,0.00ns,18.00ns,5.00ns,16.00ns,1.96us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,577.16ms,29.00ns,0.00ns,29.00ns,5.00ns,27.00ns,2.16us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,527.14ms,23.00ns,0.00ns,23.00ns,105.00ns,21.00ns,100.21us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,577.09ms,43.00ns,0.00ns,43.00ns,7.00ns,34.00ns,2.40us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.49s,163.00ns,0.00ns,164.00ns,11.00ns,158.00ns,2.36us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,526.61ms,25.00ns,0.00ns,25.00ns,6.00ns,21.00ns,2.69us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,527.19ms,28.00ns,0.00ns,28.00ns,10.00ns,26.00ns,8.44us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,526.99ms,21.00ns,0.00ns,22.00ns,6.00ns,19.00ns,2.75us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,89021,4.57s,33.52us,0.00ns,33.66us,570.00ns,32.98us,58.86us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,594933,147371,4.62s,20.60us,0.00ns,20.32us,564.00ns,19.35us,25.94us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,594933,106125,4.62s,28.31us,0.00ns,27.94us,529.00ns,26.31us,46.74us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,594933,312523,4.67s,9.35us,0.00ns,9.57us,346.00ns,9.25us,14.54us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,266136,4.72s,10.93us,0.00ns,10.94us,112.00ns,10.89us,19.47us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,52312,4.56s,57.18us,0.00ns,57.31us,649.00ns,55.84us,76.81us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,53047,4.56s,56.38us,0.00ns,56.52us,552.00ns,55.49us,76.60us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,33540,4.56s,89.86us,0.00ns,89.41us,1.77us,85.21us,109.16us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,18965,4.51s,158.57us,0.00ns,158.15us,1.74us,155.32us,195.20us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,50239,4.56s,58.70us,0.00ns,59.39us,1.66us,56.64us,81.03us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,51744,4.56s,56.98us,0.00ns,57.94us,2.07us,55.68us,81.29us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,66216,4.56s,44.98us,0.00ns,45.27us,1.02us,44.10us,70.87us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,65641,4.56s,45.45us,0.00ns,45.67us,822.00ns,44.44us,68.79us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,18788,4.51s,156.14us,0.00ns,159.64us,6.88us,154.75us,200.47us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,56782,4.56s,52.82us,0.00ns,52.80us,831.00ns,50.72us,72.08us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,23916,4.51s,128.07us,0.00ns,125.41us,4.47us,117.19us,148.71us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,15734,4.51s,191.49us,4.00ns,190.64us,3.08us,186.63us,218.75us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,10940,4.51s,276.80us,0.00ns,274.19us,14.75us,251.84us,371.86us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,21466,4.56s,138.54us,0.00ns,139.43us,2.30us,136.44us,150.84us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,23712,4.51s,126.35us,0.00ns,126.48us,873.00ns,124.44us,146.00us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,26664,4.51s,112.29us,0.00ns,112.48us,700.00ns,111.03us,134.69us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,26271,4.56s,113.90us,0.00ns,114.16us,1.07us,112.42us,135.13us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,17743,4.51s,172.11us,0.00ns,169.05us,6.48us,152.87us,185.09us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,9692,4.51s,310.83us,0.00ns,309.51us,3.43us,301.66us,343.74us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,8519,4.51s,351.40us,0.00ns,352.13us,7.24us,347.98us,428.90us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,15746,4.56s,188.97us,0.00ns,190.20us,4.64us,183.49us,208.71us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,17549,4.51s,169.55us,0.00ns,170.92us,4.38us,166.92us,194.69us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,20543,4.51s,145.53us,0.00ns,146.01us,1.82us,142.30us,171.62us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,19967,4.51s,149.90us,0.00ns,150.22us,1.52us,148.05us,176.34us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,527.08ms,46.00ns,0.00ns,46.00ns,7.00ns,43.00ns,2.75us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,664,1000000,526.76ms,35.00ns,0.00ns,35.00ns,6.00ns,32.00ns,3.31us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,664,1000000,1.53s,186.00ns,0.00ns,187.00ns,13.00ns,180.00ns,2.09us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,527.16ms,28.00ns,0.00ns,28.00ns,15.00ns,26.00ns,12.27us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,1.48s,169.00ns,0.00ns,171.00ns,13.00ns,164.00ns,1.90us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,576.96ms,47.00ns,0.00ns,47.00ns,6.00ns,43.00ns,2.21us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,577.06ms,45.00ns,0.00ns,45.00ns,7.00ns,42.00ns,2.56us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,576.68ms,58.00ns,0.00ns,58.00ns,8.00ns,54.00ns,2.39us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,778.16ms,158.00ns,0.00ns,161.00ns,13.00ns,152.00ns,2.25us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.58s,192.00ns,0.00ns,193.00ns,13.00ns,184.00ns,2.34us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,577.08ms,48.00ns,0.00ns,48.00ns,7.00ns,45.00ns,2.29us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,576.66ms,44.00ns,0.00ns,44.00ns,7.00ns,41.00ns,2.30us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,577.31ms,44.00ns,0.00ns,45.00ns,6.00ns,41.00ns,2.03us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,777.75ms,157.00ns,0.00ns,160.00ns,13.00ns,144.00ns,2.39us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,577.21ms,50.00ns,0.00ns,50.00ns,8.00ns,46.00ns,6.20us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,578.68ms,76.00ns,0.00ns,77.00ns,10.00ns,71.00ns,3.94us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,628.93ms,89.00ns,0.00ns,89.00ns,9.00ns,81.00ns,2.22us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,929.68ms,262.00ns,0.00ns,245.00ns,32.00ns,198.00ns,8.27us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.63s,226.00ns,0.00ns,227.00ns,16.00ns,217.00ns,9.03us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,628.36ms,88.00ns,0.00ns,88.00ns,7.00ns,83.00ns,2.24us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,678.55ms,98.00ns,0.00ns,98.00ns,9.00ns,90.00ns,2.15us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,628.30ms,89.00ns,0.00ns,89.00ns,8.00ns,83.00ns,2.28us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,729.39ms,122.00ns,0.00ns,123.00ns,13.00ns,116.00ns,7.64us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,729.69ms,132.00ns,0.00ns,133.00ns,11.00ns,124.00ns,2.52us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,0.98s,264.00ns,0.00ns,265.00ns,22.00ns,260.00ns,10.98us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.68s,267.00ns,0.00ns,268.00ns,15.00ns,257.00ns,2.49us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,729.59ms,134.00ns,0.00ns,135.00ns,22.00ns,129.00ns,17.70us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,729.58ms,138.00ns,0.00ns,138.00ns,10.00ns,131.00ns,1.96us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,729.63ms,139.00ns,0.00ns,139.00ns,8.00ns,131.00ns,2.36us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,69,1000000,527.24ms,29.00ns,0.00ns,29.00ns,21.00ns,26.00ns,20.88us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,69,1000000,476.27ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,3.52us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,69,1000000,1.48s,160.00ns,0.00ns,161.00ns,12.00ns,156.00ns,2.21us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,69,1000000,526.68ms,17.00ns,0.00ns,17.00ns,3.00ns,15.00ns,1.67us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,69,1000000,1.48s,159.00ns,0.00ns,160.00ns,12.00ns,155.00ns,2.51us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,526.71ms,30.00ns,0.00ns,30.00ns,11.00ns,28.00ns,9.44us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,527.02ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.95us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,526.88ms,22.00ns,0.00ns,22.00ns,6.00ns,19.00ns,2.96us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,532.24ms,24.00ns,0.00ns,24.00ns,19.00ns,22.00ns,12.04us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.48s,165.00ns,0.00ns,166.00ns,11.00ns,158.00ns,2.17us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,533.51ms,31.00ns,0.00ns,32.00ns,5.00ns,30.00ns,1.73us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,526.52ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.87us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,531.90ms,28.00ns,0.00ns,28.00ns,17.00ns,26.00ns,16.13us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,526.53ms,24.00ns,0.00ns,27.00ns,19.00ns,22.00ns,11.17us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,540.21ms,32.00ns,0.00ns,32.00ns,5.00ns,29.00ns,3.29us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,582.15ms,51.00ns,0.00ns,51.00ns,7.00ns,48.00ns,2.29us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,578.71ms,33.00ns,0.00ns,33.00ns,6.00ns,29.00ns,2.15us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,578.28ms,33.00ns,0.00ns,33.00ns,21.00ns,27.00ns,16.29us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.53s,183.00ns,0.00ns,184.00ns,14.00ns,177.00ns,6.18us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,578.53ms,49.00ns,0.00ns,50.00ns,8.00ns,47.00ns,2.58us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,578.34ms,56.00ns,0.00ns,56.00ns,8.00ns,52.00ns,2.71us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,578.13ms,52.00ns,0.00ns,52.00ns,8.00ns,47.00ns,2.81us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,679.00ms,68.00ns,0.00ns,69.00ns,19.00ns,64.00ns,16.99us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,578.56ms,45.00ns,0.00ns,45.00ns,8.00ns,40.00ns,2.47us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,578.54ms,35.00ns,0.00ns,35.00ns,19.00ns,33.00ns,16.31us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.58s,209.00ns,0.00ns,209.00ns,9.00ns,202.00ns,1.71us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,628.28ms,90.00ns,0.00ns,91.00ns,11.00ns,86.00ns,7.26us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,632.58ms,69.00ns,0.00ns,69.00ns,9.00ns,63.00ns,4.05us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,628.52ms,80.00ns,0.00ns,80.00ns,8.00ns,73.00ns,2.22us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,594933,7379,4.51s,398.01us,0.00ns,406.54us,11.47us,393.16us,431.25us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,594933,150672,4.62s,19.48us,0.00ns,19.87us,719.00ns,19.34us,24.81us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,594933,107733,4.62s,27.45us,0.00ns,27.51us,270.00ns,26.32us,48.03us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,594933,319895,4.67s,9.34us,0.00ns,9.34us,99.00ns,9.25us,15.31us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,266091,4.77s,10.93us,0.00ns,10.94us,110.00ns,10.90us,15.66us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,7372,4.51s,412.24us,0.00ns,406.94us,8.84us,391.66us,423.78us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,8206,4.51s,374.17us,0.00ns,365.57us,9.55us,354.31us,384.92us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,3702,4.51s,809.36us,1.00ns,810.42us,6.88us,793.42us,856.28us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,3807,4.51s,788.17us,0.00ns,788.15us,4.63us,768.88us,824.49us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,9656,4.56s,309.58us,0.00ns,310.37us,2.84us,308.37us,340.89us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,7768,4.51s,385.71us,0.00ns,386.18us,1.26us,385.59us,412.26us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,8505,4.51s,352.43us,0.00ns,352.73us,1.53us,349.08us,367.39us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,8095,4.51s,374.97us,0.00ns,370.60us,10.01us,347.69us,385.22us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,3796,4.51s,789.67us,2.00ns,790.27us,5.05us,776.04us,831.45us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,7182,4.51s,408.44us,1.00ns,417.71us,13.36us,404.57us,444.38us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),libc/memchr/oneshot,unknown,,664,1000000,1.34s,439.00ns,0.00ns,440.00ns,20.00ns,434.00ns,9.90us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot,0.5.3,,664,1000000,529.57ms,35.00ns,0.00ns,35.00ns,125.00ns,32.00ns,125.32us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/bytecount/memchr/oneshot/wasm32,0.5.3,,664,1000000,1.53s,185.00ns,0.00ns,186.00ns,13.00ns,179.00ns,2.36us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,541.34ms,28.00ns,0.00ns,28.00ns,20.00ns,26.00ns,18.81us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,1.54s,165.00ns,0.00ns,166.00ns,13.00ns,161.00ns,5.46us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,1.38s,434.00ns,0.00ns,435.00ns,20.00ns,430.00ns,7.54us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.28s,393.00ns,0.00ns,394.00ns,17.00ns,389.00ns,2.48us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,0.98s,241.00ns,0.00ns,247.00ns,18.00ns,234.00ns,2.13us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,881.94ms,219.00ns,0.00ns,220.00ns,14.00ns,198.00ns,2.43us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,2.14s,482.00ns,0.00ns,484.00ns,20.00ns,476.00ns,4.14us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,1.33s,426.00ns,0.00ns,427.00ns,23.00ns,423.00ns,15.65us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.23s,394.00ns,0.00ns,394.00ns,18.00ns,390.00ns,5.20us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.23s,393.00ns,0.00ns,394.00ns,18.00ns,390.00ns,3.47us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,932.31ms,212.00ns,0.00ns,212.00ns,14.00ns,203.00ns,2.27us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,1.38s,451.00ns,0.00ns,452.00ns,20.00ns,445.00ns,6.71us\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,33335253,273,4.56s,11.00ms,0.00ns,11.01ms,48.20us,10.87ms,11.26ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,33335253,285,4.56s,10.54ms,0.00ns,10.53ms,105.62us,10.34ms,10.85ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,33335253,285,4.56s,10.54ms,0.00ns,10.55ms,109.07us,10.37ms,10.94ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,33335253,417,4.56s,7.20ms,0.00ns,7.20ms,47.94us,7.09ms,7.46ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,33335253,423,4.56s,7.10ms,0.00ns,7.10ms,35.12us,7.03ms,7.27ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/binary,2.5.0,,33335253,3518,4.56s,851.50us,0.00ns,852.86us,11.27us,828.34us,0.95ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,33335253,294,4.56s,10.22ms,2.25us,10.21ms,146.71us,9.96ms,10.48ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,33335253,145,4.56s,20.72ms,0.00ns,20.73ms,42.65us,20.66ms,20.91ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,33335253,217,4.56s,14.00ms,0.00ns,13.85ms,242.47us,13.47ms,14.16ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,33335253,318,4.56s,9.42ms,308.00ns,9.45ms,107.36us,9.32ms,9.93ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,33335253,429,4.56s,6.84ms,0.00ns,7.00ms,283.61us,6.76ms,7.60ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,33335253,440,4.56s,6.76ms,62.00ns,6.82ms,188.01us,6.69ms,7.50ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,33335253,553,4.56s,5.43ms,0.00ns,5.43ms,44.79us,5.26ms,5.64ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,33335253,558,4.56s,5.37ms,77.00ns,5.38ms,48.13us,5.22ms,5.64ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,22064,4.51s,134.73us,1.00ns,135.93us,3.51us,133.53us,153.97us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13771,4.51s,223.96us,0.00ns,217.82us,9.18us,205.61us,244.75us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13754,4.51s,224.00us,0.00ns,218.08us,9.17us,205.41us,248.44us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,94057,4.57s,28.39us,0.00ns,31.86us,5.51us,28.13us,45.23us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,99034,4.57s,28.66us,0.00ns,30.25us,4.10us,28.35us,51.20us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3166,4.51s,947.44us,4.00ns,947.75us,5.77us,935.96us,0.98ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2953,4.51s,1.01ms,0.00ns,1.02ms,4.76us,1.01ms,1.07ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4544,4.51s,659.96us,0.00ns,660.25us,6.26us,652.01us,716.31us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,50873,4.56s,57.99us,0.00ns,58.63us,4.28us,53.12us,90.82us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,79679,4.56s,38.38us,0.00ns,37.61us,1.09us,36.04us,49.24us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,81609,4.56s,35.86us,0.00ns,36.72us,1.08us,35.60us,42.70us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,76901,4.56s,38.67us,0.00ns,38.97us,0.97us,37.53us,62.91us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,77977,4.56s,38.56us,0.00ns,38.44us,738.00ns,37.45us,60.84us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2943,4.51s,1.02ms,0.00ns,1.02ms,23.67us,0.96ms,1.08ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2976,4.51s,1.02ms,16.00ns,1.01ms,28.36us,0.96ms,1.08ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,24158,4.56s,123.96us,0.00ns,124.15us,1.44us,121.61us,144.57us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13718,4.51s,224.17us,0.00ns,218.66us,9.06us,205.79us,246.62us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13835,4.51s,223.54us,0.00ns,216.81us,9.32us,205.56us,235.10us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,95185,4.56s,28.43us,0.00ns,31.48us,5.30us,28.05us,45.60us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,100462,4.57s,28.55us,0.00ns,29.82us,3.68us,28.28us,48.17us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3430,4.51s,874.59us,0.00ns,874.82us,3.57us,864.85us,914.65us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2949,4.51s,1.02ms,0.00ns,1.02ms,4.97us,1.01ms,1.07ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4539,4.51s,659.97us,0.00ns,660.94us,7.35us,651.98us,709.71us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,50171,4.56s,59.53us,0.00ns,59.43us,4.58us,52.44us,91.99us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,76423,4.56s,40.20us,0.00ns,39.21us,1.24us,37.59us,50.93us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,78057,4.56s,37.59us,0.00ns,38.39us,1.06us,37.30us,44.13us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,76672,4.56s,38.65us,0.00ns,39.08us,863.00ns,38.32us,49.19us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,77434,4.56s,38.63us,0.00ns,38.70us,348.00ns,38.28us,45.56us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3137,4.51s,0.96ms,0.00ns,0.96ms,21.26us,894.85us,1.04ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3153,4.51s,0.96ms,0.00ns,0.95ms,25.39us,894.47us,1.03ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,15779,4.51s,190.17us,0.00ns,190.09us,8.95us,174.63us,215.33us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13756,4.51s,224.15us,0.00ns,218.05us,9.09us,205.86us,248.29us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13682,4.51s,224.40us,0.00ns,219.23us,8.78us,205.40us,235.42us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,98709,4.57s,27.51us,0.00ns,30.36us,5.17us,27.08us,44.10us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,104739,4.57s,27.62us,0.00ns,28.60us,3.34us,27.21us,44.77us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3510,4.51s,854.57us,1.00ns,854.76us,2.09us,849.60us,887.37us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2952,4.51s,1.02ms,0.00ns,1.02ms,4.29us,1.01ms,1.07ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4548,4.51s,659.96us,0.00ns,659.73us,5.02us,651.96us,709.16us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,50973,4.56s,57.81us,0.00ns,58.51us,5.99us,50.53us,90.92us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,76688,4.56s,39.84us,0.00ns,39.07us,0.99us,37.78us,49.21us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,77594,4.56s,37.92us,0.00ns,38.62us,0.96us,37.70us,58.28us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,75180,4.56s,39.82us,0.00ns,39.86us,271.00ns,39.42us,47.66us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,75479,4.56s,39.64us,0.00ns,39.70us,321.00ns,39.26us,46.07us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3306,4.51s,902.61us,2.00ns,907.48us,13.65us,891.96us,0.99ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3289,4.51s,904.40us,0.00ns,912.22us,17.13us,893.05us,0.99ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,29954,4.56s,102.48us,0.00ns,100.11us,5.12us,89.77us,119.55us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,14220,4.51s,218.20us,0.00ns,210.93us,9.50us,199.84us,246.59us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,14088,4.51s,218.48us,0.00ns,212.92us,9.05us,199.91us,229.18us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,96516,4.57s,28.54us,0.00ns,31.04us,5.03us,28.23us,46.55us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,102446,4.57s,28.51us,0.00ns,29.25us,2.86us,28.26us,46.70us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3516,4.51s,852.09us,0.00ns,853.27us,4.60us,844.69us,903.31us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2964,4.51s,1.01ms,0.00ns,1.01ms,2.32us,1.01ms,1.03ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,50194,4.56s,59.99us,0.00ns,59.43us,3.13us,53.19us,76.47us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,76465,4.56s,39.75us,0.00ns,39.19us,1.06us,37.45us,56.72us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,77192,4.56s,39.02us,1.00ns,38.82us,1.16us,37.48us,65.71us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1648109,275229,4.67s,10.77us,0.00ns,10.87us,238.00ns,10.40us,15.43us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1648109,277841,4.67s,10.76us,0.00ns,10.76us,166.00ns,10.40us,34.26us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3184,4.51s,928.83us,29.00ns,942.39us,41.60us,884.58us,1.04ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3274,4.51s,902.28us,3.00ns,916.52us,44.31us,862.19us,1.02ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,24256,4.56s,122.96us,0.00ns,123.64us,2.46us,121.92us,140.46us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13740,4.51s,224.02us,0.00ns,218.30us,8.92us,205.79us,239.54us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13749,4.51s,224.20us,0.00ns,218.16us,9.37us,205.92us,248.69us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,91576,4.57s,29.59us,0.00ns,32.73us,5.44us,29.16us,47.74us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,98536,4.57s,29.18us,0.00ns,30.41us,3.63us,28.79us,49.41us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3331,4.51s,900.14us,0.00ns,900.83us,4.51us,892.87us,942.54us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2961,4.51s,1.01ms,0.00ns,1.01ms,2.52us,1.01ms,1.05ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4548,4.51s,658.08us,0.00ns,659.70us,6.80us,654.59us,714.80us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,46095,4.56s,64.31us,0.00ns,64.74us,5.45us,53.27us,89.68us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,75868,4.56s,40.33us,0.00ns,39.51us,1.13us,38.00us,53.14us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,77338,4.56s,37.93us,0.00ns,38.75us,1.09us,37.67us,46.36us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3150,4.51s,0.95ms,5.00ns,0.95ms,9.16us,938.10us,0.98ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3158,4.51s,946.96us,5.00ns,0.95ms,9.82us,937.85us,1.00ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,4310,4.51s,696.31us,1.00ns,696.11us,5.15us,688.15us,732.59us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,10991,4.51s,276.55us,0.00ns,272.92us,8.36us,259.47us,296.77us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,10987,4.51s,276.94us,0.00ns,273.02us,9.10us,258.47us,338.43us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,26074,4.56s,118.17us,0.00ns,115.03us,5.19us,107.01us,142.36us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,50542,4.56s,55.90us,1.00ns,59.30us,5.91us,52.74us,76.90us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3631,4.51s,824.98us,0.00ns,826.23us,8.21us,811.46us,877.98us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2759,4.51s,1.09ms,0.00ns,1.09ms,3.15us,1.08ms,1.13ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4402,4.51s,681.05us,0.00ns,681.58us,2.75us,674.85us,727.21us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,28811,4.56s,102.34us,0.00ns,103.75us,5.11us,101.35us,173.66us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,32251,4.56s,93.00us,0.00ns,92.98us,787.00ns,91.27us,103.32us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,43186,4.56s,70.93us,0.00ns,69.42us,3.14us,62.49us,83.51us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,3181,4.51s,944.03us,0.00ns,943.06us,9.81us,884.49us,1.01ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,3249,4.51s,922.75us,0.00ns,923.57us,9.58us,899.80us,0.98ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,11529,4.51s,258.84us,0.00ns,260.17us,6.85us,249.01us,290.62us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,3929,4.51s,761.86us,0.00ns,763.62us,12.98us,737.74us,809.09us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,4453,4.51s,671.82us,0.00ns,673.80us,12.81us,647.95us,731.05us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,5936,4.51s,504.87us,0.00ns,505.37us,1.95us,501.12us,522.91us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,9508,4.51s,314.30us,0.00ns,315.50us,3.66us,311.36us,343.78us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,2475,4.51s,1.20ms,0.00ns,1.21ms,31.00us,1.18ms,1.33ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2400,4.51s,1.25ms,2.00ns,1.25ms,11.12us,1.23ms,1.32ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,3368,4.51s,894.20us,1.00ns,890.84us,18.88us,845.29us,0.97ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,6119,4.56s,489.20us,0.00ns,489.96us,5.82us,479.03us,514.57us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,6125,4.51s,489.29us,0.00ns,489.78us,3.39us,480.67us,519.85us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,10500,4.51s,284.64us,0.00ns,285.67us,3.43us,280.43us,309.52us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2503,4.51s,1.19ms,0.00ns,1.20ms,14.13us,1.18ms,1.27ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2778,4.51s,1.08ms,2.00ns,1.08ms,9.58us,1.06ms,1.21ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1648109,6264,4.51s,479.17us,0.00ns,478.90us,7.42us,468.52us,614.63us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1648109,8794,4.51s,343.27us,1.00ns,341.14us,8.32us,326.92us,366.51us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,9034,4.51s,333.97us,2.00ns,332.04us,8.72us,318.35us,360.44us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,16495,4.51s,180.76us,0.00ns,181.83us,3.75us,177.50us,222.49us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,37925,4.56s,78.51us,0.00ns,79.06us,1.90us,75.27us,97.65us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3032,4.51s,0.99ms,4.00ns,0.99ms,4.27us,0.98ms,1.04ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2680,4.51s,1.12ms,0.00ns,1.12ms,9.47us,1.11ms,1.17ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4317,4.51s,697.32us,0.00ns,694.98us,5.66us,687.57us,744.09us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,20196,4.56s,148.48us,0.00ns,148.17us,7.14us,141.00us,219.29us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,21116,4.56s,141.57us,0.00ns,142.03us,1.60us,139.64us,162.90us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,31576,4.56s,93.35us,0.00ns,94.97us,3.21us,90.40us,111.46us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1648109,2433,4.51s,1.23ms,0.00ns,1.23ms,10.01us,1.20ms,1.27ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1648109,2489,4.51s,1.21ms,0.00ns,1.21ms,11.25us,1.17ms,1.25ms\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,151305,803215,4.83s,3.67us,0.00ns,3.70us,147.00ns,3.47us,12.10us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,151305,128553,4.57s,22.89us,0.00ns,23.30us,807.00ns,22.35us,30.45us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,151305,127663,4.57s,23.82us,0.00ns,23.47us,797.00ns,22.38us,29.78us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,954760,4.94s,2.95us,0.00ns,3.11us,277.00ns,2.72us,9.35us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,1000000,4.89s,2.81us,0.00ns,2.84us,137.00ns,2.60us,7.46us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,151305,303039,4.67s,9.85us,0.00ns,9.87us,121.00ns,9.76us,19.82us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,151305,32202,4.56s,93.04us,0.00ns,93.13us,537.00ns,92.66us,113.12us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,151305,356135,4.82s,8.06us,0.00ns,8.09us,521.00ns,6.63us,17.89us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,151305,873250,4.94s,3.38us,0.00ns,3.40us,70.00ns,3.30us,7.17us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,151305,886120,4.94s,3.35us,0.00ns,3.35us,52.00ns,3.28us,8.22us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,151305,587453,4.83s,4.88us,0.00ns,5.08us,453.00ns,4.62us,12.03us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,537243,4.78s,5.49us,0.00ns,5.55us,397.00ns,4.89us,22.31us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,151305,203609,4.62s,14.38us,0.00ns,14.70us,1.79us,10.52us,24.11us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,151305,208577,4.62s,14.09us,0.00ns,14.35us,1.64us,10.45us,28.05us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,151305,701869,4.88s,4.05us,0.00ns,4.24us,511.00ns,3.90us,8.82us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,151305,126143,4.62s,23.96us,0.00ns,23.75us,846.00ns,22.63us,38.31us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,151305,127255,4.57s,23.18us,0.00ns,23.54us,808.00ns,22.54us,34.27us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,862383,4.94s,3.59us,0.00ns,3.45us,253.00ns,2.75us,11.34us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,953099,4.99s,2.96us,0.00ns,3.12us,303.00ns,2.60us,13.66us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,151305,323139,4.67s,9.12us,0.00ns,9.25us,562.00ns,8.48us,14.95us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,151305,32210,4.56s,93.06us,0.00ns,93.11us,442.00ns,92.69us,112.57us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,151305,360133,4.82s,7.99us,0.00ns,8.00us,394.00ns,6.88us,15.27us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,151305,874231,4.89s,3.41us,0.00ns,3.40us,67.00ns,3.26us,11.03us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,151305,887329,4.99s,3.33us,0.00ns,3.35us,76.00ns,3.24us,31.24us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,151305,600394,4.83s,4.84us,0.00ns,4.97us,360.00ns,4.55us,10.12us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,151305,564890,4.83s,5.09us,0.00ns,5.28us,407.00ns,4.85us,12.43us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,151305,180714,4.62s,15.86us,0.00ns,16.57us,3.22us,9.84us,27.69us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,151305,182963,4.62s,15.61us,0.00ns,16.36us,3.26us,9.72us,28.93us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,500100,104242,4.57s,26.23us,0.00ns,28.75us,2.87us,25.65us,63.29us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,500100,51874,4.56s,60.10us,0.00ns,57.80us,2.82us,54.07us,71.30us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,500100,52086,4.56s,60.10us,0.00ns,57.56us,3.02us,54.07us,81.69us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,408770,4.72s,7.36us,0.00ns,7.31us,145.00ns,7.06us,12.22us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,408427,4.67s,7.35us,0.00ns,7.31us,135.00ns,7.05us,27.82us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,500100,13540,4.51s,216.31us,0.00ns,221.54us,23.47us,216.29us,378.24us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,500100,9743,4.51s,307.61us,0.00ns,307.91us,1.41us,305.34us,339.35us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,500100,14951,4.51s,200.22us,0.00ns,200.63us,4.31us,197.76us,247.68us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,500100,184358,4.67s,16.24us,0.00ns,15.94us,664.00ns,15.22us,25.70us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,500100,261947,4.67s,11.39us,0.00ns,11.42us,129.00ns,11.28us,26.45us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,500100,262600,4.67s,11.38us,0.00ns,11.39us,108.00ns,11.26us,16.54us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,500100,277853,4.62s,10.75us,0.00ns,10.77us,116.00ns,10.28us,17.48us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,500100,270623,4.67s,11.11us,0.00ns,11.05us,218.00ns,10.63us,18.47us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,500100,13969,4.51s,216.31us,0.00ns,214.74us,15.25us,208.28us,387.51us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,500100,13747,4.51s,216.31us,0.00ns,218.20us,13.89us,208.30us,340.25us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,500100,4522,4.51s,664.21us,0.00ns,663.52us,7.26us,653.11us,692.49us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,500100,3783,4.51s,792.61us,0.00ns,793.10us,2.69us,786.81us,842.61us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,500100,8396,4.51s,351.07us,0.00ns,357.29us,14.98us,349.53us,407.62us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,1807,4.51s,1.65ms,0.00ns,1.66ms,15.46us,1.64ms,1.73ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,10700,4.51s,271.92us,0.00ns,280.35us,26.64us,251.31us,365.85us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,500100,14906,4.51s,198.94us,0.00ns,201.23us,10.12us,198.20us,305.52us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,500100,13282,4.51s,221.12us,0.00ns,225.84us,5.90us,221.09us,273.02us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,500100,14465,4.51s,206.77us,0.00ns,207.37us,3.00us,206.65us,254.61us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,500100,7028,4.56s,415.77us,3.00ns,426.54us,23.98us,398.30us,518.89us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,500100,3284,4.51s,911.57us,0.00ns,913.71us,6.71us,902.17us,947.80us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,500100,9745,4.51s,302.82us,0.00ns,307.82us,12.32us,293.18us,355.96us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,500100,2699,4.51s,1.10ms,0.00ns,1.11ms,39.28us,1.05ms,1.27ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,500100,11103,4.51s,269.19us,0.00ns,270.17us,5.57us,259.55us,323.95us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1001,1000000,677.31ms,83.00ns,0.00ns,83.00ns,9.00ns,79.00ns,5.75us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,728.33ms,142.00ns,0.00ns,139.00ns,12.00ns,128.00ns,2.29us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,728.36ms,140.00ns,0.00ns,136.00ns,11.00ns,126.00ns,2.03us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,1000000,577.43ms,62.00ns,0.00ns,62.00ns,17.00ns,57.00ns,12.54us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,527.14ms,37.00ns,0.00ns,36.00ns,7.00ns,29.00ns,2.69us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.38s,447.00ns,0.00ns,448.00ns,21.00ns,443.00ns,7.28us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.73s,624.00ns,0.00ns,625.00ns,25.00ns,608.00ns,6.16us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.28s,411.00ns,0.00ns,412.00ns,22.00ns,401.00ns,7.30us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1001,1000000,1.58s,208.00ns,0.00ns,210.00ns,14.00ns,199.00ns,2.61us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1001,1000000,577.08ms,44.00ns,0.00ns,45.00ns,7.00ns,39.00ns,3.07us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,577.30ms,41.00ns,0.00ns,43.00ns,10.00ns,37.00ns,6.42us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,1001,1000000,527.34ms,31.00ns,0.00ns,31.00ns,6.00ns,27.00ns,1.98us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1001,1000000,526.55ms,28.00ns,0.00ns,29.00ns,7.00ns,25.00ns,3.55us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1001,1000000,1.38s,458.00ns,0.00ns,459.00ns,20.00ns,447.00ns,5.40us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1001,1000000,1.38s,458.00ns,0.00ns,458.00ns,19.00ns,449.00ns,4.38us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,1001,1000000,3.19s,1.35us,0.00ns,1.35us,37.00ns,1.33us,11.26us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,3.54s,1.55us,0.00ns,1.55us,36.00ns,1.53us,6.53us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,1.93s,731.00ns,0.00ns,744.00ns,40.00ns,717.00ns,6.95us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,939124,4.89s,3.15us,0.00ns,3.17us,63.00ns,3.10us,11.02us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,1.53s,527.00ns,0.00ns,537.00ns,41.00ns,481.00ns,5.95us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.33s,425.00ns,0.00ns,425.00ns,15.00ns,420.00ns,6.07us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.48s,453.00ns,0.00ns,462.00ns,25.00ns,447.00ns,4.99us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.33s,425.00ns,0.00ns,426.00ns,21.00ns,418.00ns,6.79us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1001,1000000,3.24s,0.99us,0.00ns,1.02us,61.00ns,936.00ns,4.71us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1001,1000000,3.64s,1.71us,0.00ns,1.72us,85.00ns,1.69us,75.97us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,1.78s,650.00ns,0.00ns,652.00ns,78.00ns,607.00ns,73.34us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,1001,1000000,4.29s,2.34us,0.00ns,2.30us,95.00ns,2.14us,12.71us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,1001,1000000,1.68s,571.00ns,0.00ns,574.00ns,26.00ns,547.00ns,3.79us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,550004,33608,4.56s,87.42us,0.00ns,89.23us,3.04us,84.11us,101.77us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,550004,26808,4.56s,111.69us,0.00ns,111.88us,2.54us,106.54us,123.39us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,550004,28817,4.56s,104.13us,0.00ns,104.07us,2.46us,99.54us,115.63us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,550004,23825,4.51s,125.83us,0.00ns,125.88us,612.00ns,124.08us,132.49us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,550004,23814,4.56s,125.82us,0.00ns,125.95us,757.00ns,124.11us,136.35us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,550004,37781,4.56s,81.16us,0.00ns,79.37us,2.90us,74.98us,98.24us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,550004,8854,4.51s,338.77us,0.00ns,338.82us,1.49us,336.04us,381.42us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,550004,13665,4.51s,219.23us,0.00ns,219.51us,1.71us,217.47us,263.91us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,550004,16712,4.56s,174.48us,0.00ns,179.19us,10.35us,165.08us,247.24us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,550004,23954,4.56s,123.87us,0.00ns,125.21us,4.70us,122.77us,157.32us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,550004,23750,4.56s,123.77us,0.00ns,126.28us,7.56us,122.76us,157.52us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,550004,39069,4.56s,76.28us,0.00ns,76.75us,1.15us,74.03us,92.59us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,550004,39174,4.56s,76.31us,0.00ns,76.54us,752.00ns,75.62us,88.01us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,550004,46473,4.56s,66.75us,0.00ns,64.52us,3.12us,59.99us,79.21us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,550004,46960,4.56s,66.61us,0.00ns,63.85us,3.30us,59.97us,77.45us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,720057,59044,4.56s,43.02us,0.00ns,50.77us,12.99us,42.98us,80.13us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,720057,36238,4.56s,86.53us,0.00ns,82.75us,4.31us,77.87us,116.22us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,720057,36094,4.56s,86.53us,0.00ns,83.08us,4.28us,77.87us,115.70us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,85148,4.56s,35.16us,0.00ns,35.20us,330.00ns,35.11us,63.51us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,85899,4.56s,34.85us,0.00ns,34.89us,256.00ns,34.80us,47.10us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,720057,101414,4.57s,29.35us,0.00ns,29.55us,648.00ns,29.32us,58.80us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,720057,6748,4.51s,443.91us,1.00ns,444.56us,1.35us,441.52us,468.13us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,720057,44696,4.56s,62.73us,0.00ns,66.80us,7.72us,61.69us,104.51us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,720057,78133,4.56s,38.30us,0.00ns,38.36us,329.00ns,38.24us,59.65us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,720057,78387,4.56s,38.17us,0.00ns,38.24us,378.00ns,38.14us,65.47us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,720057,11724,4.51s,255.47us,0.00ns,255.86us,1.02us,255.22us,265.74us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,11728,4.51s,255.36us,0.00ns,255.79us,1.43us,255.32us,294.12us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,720057,139042,4.62s,21.51us,0.00ns,21.54us,178.00ns,21.47us,28.48us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,720057,138662,4.62s,21.62us,0.00ns,21.60us,218.00ns,21.40us,28.86us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,720057,2885,4.51s,1.04ms,0.00ns,1.04ms,3.54us,1.04ms,1.08ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,720057,613,4.51s,4.90ms,0.00ns,4.90ms,5.13us,4.88ms,4.92ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,720057,612,4.51s,4.90ms,0.00ns,4.91ms,30.17us,4.89ms,5.21ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,5391,4.51s,555.16us,0.00ns,556.55us,9.69us,554.44us,818.85us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,5385,4.51s,556.26us,0.00ns,557.16us,6.16us,553.86us,694.61us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,720057,6153,4.51s,487.16us,0.00ns,487.55us,2.54us,463.46us,556.45us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,720057,6764,4.51s,442.89us,0.00ns,443.53us,2.65us,441.26us,505.75us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,720057,2540,4.51s,1.18ms,4.00ns,1.18ms,8.22us,1.18ms,1.25ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,720057,4804,4.51s,623.97us,0.00ns,624.48us,1.82us,602.04us,640.93us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,720057,4799,4.51s,624.38us,0.00ns,625.18us,2.86us,602.85us,691.70us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,720057,2216,4.51s,1.36ms,0.00ns,1.35ms,11.05us,1.33ms,1.38ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,720057,2230,4.51s,1.35ms,0.00ns,1.35ms,10.69us,1.31ms,1.38ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,720057,6474,4.51s,462.90us,0.00ns,463.38us,1.93us,440.07us,476.85us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,720057,6526,4.51s,462.21us,0.00ns,459.72us,8.75us,439.04us,493.72us\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,,434,4.56s,7.08ms,63.00ns,6.91ms,259.05us,6.48ms,7.15ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,,201,4.56s,14.74ms,0.00ns,14.96ms,522.08us,14.58ms,17.73ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,,213,4.56s,14.10ms,0.00ns,14.11ms,50.56us,14.06ms,14.35ms\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1000,34758,4.57s,85.12us,0.00ns,86.27us,2.26us,84.18us,120.03us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1000,28540,4.56s,104.86us,0.00ns,105.08us,1.10us,102.70us,114.33us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,1000,37399,4.56s,80.17us,0.00ns,80.18us,804.00ns,76.28us,87.40us\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,806771,218,4.56s,13.80ms,57.00ns,13.81ms,70.96us,13.77ms,14.44ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,806771,164,4.56s,18.57ms,16.00ns,18.30ms,413.71us,17.67ms,18.62ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,806771,155,4.56s,19.42ms,0.00ns,19.43ms,45.26us,19.36ms,19.77ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,19588,4.52s,153.14us,0.00ns,153.12us,5.27us,144.30us,178.44us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,23728,4.56s,126.52us,0.00ns,126.40us,3.16us,121.97us,160.27us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,24222,4.56s,123.77us,0.00ns,123.83us,3.33us,119.48us,135.41us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,82431,4.56s,36.32us,0.00ns,36.36us,290.00ns,35.96us,56.52us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,195153,4.57s,15.23us,0.00ns,15.34us,332.00ns,14.91us,42.29us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,13596,4.51s,220.82us,0.00ns,220.63us,5.23us,199.51us,264.73us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7760,4.51s,386.28us,0.00ns,386.57us,1.39us,385.29us,421.35us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,11902,4.51s,251.65us,0.00ns,252.04us,2.12us,249.74us,295.24us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,58619,4.56s,50.56us,0.00ns,50.83us,2.32us,45.10us,87.51us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,110128,4.57s,27.12us,0.00ns,27.21us,323.00ns,26.85us,31.91us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,175897,4.62s,16.89us,0.00ns,17.02us,461.00ns,16.56us,39.64us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,9477,4.51s,316.70us,0.00ns,316.54us,8.35us,239.08us,338.75us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,9629,4.51s,311.54us,0.00ns,311.55us,9.05us,281.60us,354.72us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,11208,4.51s,268.47us,0.00ns,267.64us,3.49us,259.45us,291.88us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,16455,4.51s,181.79us,0.00ns,182.29us,3.42us,175.45us,199.06us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,18084,4.51s,165.17us,0.00ns,165.87us,3.58us,159.12us,180.17us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,18637,4.51s,160.28us,0.00ns,160.95us,3.13us,157.49us,196.22us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,69215,4.56s,42.43us,0.00ns,43.30us,2.50us,40.78us,62.62us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,11615,4.51s,258.54us,0.00ns,258.26us,6.14us,236.69us,285.43us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7334,4.51s,408.48us,0.00ns,409.07us,2.17us,405.86us,459.26us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,10647,4.51s,278.65us,0.00ns,281.73us,4.43us,272.89us,307.26us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,33395,4.56s,88.53us,0.00ns,89.48us,3.39us,84.39us,125.51us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,27436,4.51s,108.81us,0.00ns,109.31us,1.85us,106.22us,131.56us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,54782,4.56s,53.42us,0.00ns,54.72us,2.90us,49.67us,86.01us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,7732,4.51s,388.05us,1.00ns,387.99us,6.44us,366.84us,422.15us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,8075,4.51s,371.67us,0.00ns,371.50us,6.44us,348.99us,411.24us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,7911,4.51s,378.86us,0.00ns,379.19us,2.02us,375.86us,407.98us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,1947,4.51s,1.54ms,0.00ns,1.54ms,8.01us,1.52ms,1.65ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3000,4.51s,0.99ms,9.00ns,1.00ms,29.25us,0.97ms,1.11ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,2772,4.51s,1.08ms,1.00ns,1.08ms,2.04us,1.08ms,1.10ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,6941,4.51s,428.59us,0.00ns,432.23us,17.78us,427.29us,542.78us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,3191,4.51s,931.03us,0.00ns,940.22us,22.67us,897.88us,1.02ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,2859,4.51s,1.05ms,0.00ns,1.05ms,6.70us,1.03ms,1.10ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,3075,4.51s,0.99ms,0.00ns,0.98ms,50.98us,828.82us,1.16ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,4703,4.56s,638.50us,0.00ns,637.60us,7.05us,616.75us,705.19us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,3066,4.51s,0.98ms,1.00ns,0.98ms,3.94us,0.97ms,1.00ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,7337,4.51s,410.86us,0.00ns,408.88us,24.40us,385.93us,510.61us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,2035,4.51s,1.46ms,0.00ns,1.47ms,46.33us,1.41ms,1.74ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,2888,4.51s,1.04ms,4.00ns,1.04ms,16.90us,0.98ms,1.13ms\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,14407,4.51s,207.75us,0.00ns,208.21us,2.24us,204.52us,232.98us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,18896,4.51s,157.70us,0.00ns,158.73us,3.77us,153.45us,173.80us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,18850,4.51s,160.23us,0.00ns,159.12us,4.07us,150.59us,173.99us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,60717,4.56s,49.22us,0.00ns,49.38us,592.00ns,48.42us,59.59us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,153626,4.62s,20.84us,0.00ns,19.49us,2.55us,15.20us,27.58us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,6860,4.51s,437.92us,1.00ns,437.32us,2.48us,433.05us,453.28us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7783,4.51s,385.21us,0.00ns,385.46us,1.72us,382.86us,423.73us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,11882,4.51s,252.69us,0.00ns,252.46us,1.42us,250.61us,294.44us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,80100,4.62s,36.84us,0.00ns,37.10us,1.29us,34.47us,50.12us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,91654,4.57s,32.62us,0.00ns,32.70us,282.00ns,32.22us,38.00us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,153123,4.57s,19.45us,0.00ns,19.56us,464.00ns,18.84us,26.12us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,5793,4.51s,517.96us,0.00ns,517.90us,3.62us,509.16us,572.40us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,6067,4.51s,492.59us,0.00ns,494.49us,6.16us,484.47us,522.95us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,10644,4.51s,281.54us,0.00ns,281.82us,1.61us,277.86us,311.47us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,9170,4.51s,325.94us,1.00ns,327.15us,4.97us,316.73us,344.21us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,9475,4.51s,315.78us,0.00ns,316.61us,4.90us,305.52us,339.61us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,26259,4.51s,113.80us,0.00ns,114.22us,2.11us,111.54us,139.80us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,79720,4.56s,37.25us,0.00ns,37.60us,1.17us,36.21us,49.36us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,6293,4.51s,475.91us,0.00ns,476.70us,3.75us,474.10us,524.23us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7372,4.51s,406.22us,0.00ns,406.93us,2.64us,404.07us,460.18us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,11151,4.51s,270.79us,0.00ns,269.01us,3.15us,263.65us,311.80us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,43525,4.56s,67.29us,0.00ns,68.57us,3.92us,65.13us,98.74us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,38917,4.56s,76.96us,0.00ns,77.05us,832.00ns,75.67us,93.33us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,71875,4.56s,41.37us,0.00ns,41.70us,1.09us,40.24us,63.98us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,5011,4.51s,596.27us,0.00ns,598.67us,8.99us,584.35us,640.70us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,5281,4.51s,565.32us,0.00ns,568.08us,9.20us,554.59us,605.68us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,15042,4.51s,199.87us,0.00ns,199.41us,1.71us,193.81us,209.76us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,3505,4.51s,855.67us,0.00ns,855.90us,8.03us,829.34us,932.30us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,4851,4.51s,613.15us,0.00ns,618.46us,15.15us,596.62us,675.92us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,5536,4.51s,541.16us,0.00ns,541.92us,1.54us,540.87us,554.62us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,13641,4.51s,218.78us,0.00ns,219.90us,5.81us,218.29us,269.23us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,4781,4.51s,619.93us,0.00ns,627.56us,20.68us,601.86us,724.73us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,4130,4.51s,726.27us,1.00ns,726.43us,4.34us,710.76us,784.91us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,4399,4.51s,684.10us,0.00ns,681.99us,20.19us,538.11us,763.29us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,6577,4.56s,455.26us,0.00ns,455.84us,3.23us,448.06us,487.57us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,6074,4.51s,492.97us,0.00ns,493.89us,2.37us,489.83us,515.70us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,14850,4.51s,199.56us,0.00ns,201.99us,9.68us,198.68us,257.59us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,3502,4.51s,848.09us,5.00ns,856.73us,24.43us,827.27us,0.98ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,4751,4.51s,630.20us,0.00ns,631.50us,8.23us,606.88us,695.15us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,21947,4.51s,136.41us,0.00ns,136.66us,914.00ns,134.91us,146.93us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,30577,4.56s,99.80us,0.00ns,98.08us,3.27us,93.22us,116.42us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,31418,4.56s,96.93us,0.00ns,95.46us,3.31us,90.62us,112.03us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,72433,4.56s,42.65us,0.00ns,41.38us,2.06us,38.01us,50.72us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,171043,4.62s,15.24us,0.00ns,17.51us,2.85us,14.62us,45.79us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,22724,4.51s,131.72us,0.00ns,131.99us,2.99us,127.29us,170.78us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7467,4.51s,401.03us,0.00ns,401.74us,1.85us,399.23us,443.95us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,11851,4.51s,253.23us,0.00ns,253.11us,1.44us,251.04us,292.84us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,81232,4.62s,35.98us,0.00ns,36.57us,2.20us,35.29us,62.82us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,90668,4.57s,33.02us,0.00ns,33.05us,304.00ns,32.20us,46.74us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,134819,4.62s,22.71us,0.00ns,22.22us,1.07us,19.97us,44.77us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,20494,4.51s,146.40us,0.00ns,146.35us,3.01us,138.62us,176.14us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,21329,4.56s,140.29us,0.00ns,140.62us,2.98us,133.02us,175.02us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,13711,4.51s,217.50us,0.00ns,218.78us,3.61us,212.99us,241.81us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,18097,4.51s,165.50us,0.00ns,165.75us,3.29us,159.29us,178.47us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,18923,4.51s,158.13us,0.00ns,158.51us,3.80us,152.43us,171.95us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,32985,4.56s,90.55us,0.00ns,90.92us,1.57us,89.37us,113.09us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,89310,4.57s,34.27us,0.00ns,33.55us,2.22us,28.65us,45.37us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,14112,4.51s,212.81us,1.00ns,212.56us,3.69us,200.11us,246.07us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7460,4.51s,401.64us,0.00ns,402.16us,1.77us,399.87us,453.93us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,11319,4.51s,263.05us,0.00ns,265.02us,2.73us,260.75us,300.40us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,48288,4.56s,60.78us,0.00ns,61.78us,2.85us,59.31us,92.38us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,44179,4.56s,67.90us,0.00ns,67.87us,745.00ns,66.06us,81.12us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,74676,4.56s,39.81us,0.00ns,40.14us,1.06us,37.83us,48.17us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,10791,4.51s,278.27us,0.00ns,277.98us,3.10us,268.54us,292.10us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,11439,4.51s,262.27us,0.00ns,262.23us,4.47us,222.25us,306.39us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,30590,4.56s,100.90us,1.00ns,98.04us,4.28us,92.74us,123.74us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,7792,4.51s,384.88us,0.00ns,385.00us,4.40us,373.78us,400.08us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,9667,4.51s,309.59us,0.00ns,310.31us,6.41us,297.76us,333.53us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,12408,4.51s,240.46us,0.00ns,241.76us,4.39us,239.15us,272.25us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,23946,4.56s,124.45us,0.00ns,125.25us,2.79us,123.06us,152.77us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,6239,4.51s,475.54us,0.00ns,480.84us,12.70us,466.92us,518.95us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,5943,4.51s,504.77us,0.00ns,504.84us,2.29us,499.51us,550.89us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,7693,4.51s,389.95us,0.00ns,389.97us,7.19us,349.67us,430.15us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,16264,4.56s,183.68us,0.00ns,184.11us,1.67us,180.77us,213.04us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,13042,4.51s,229.16us,0.00ns,230.00us,3.96us,226.27us,260.56us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,27670,4.56s,107.35us,0.00ns,108.39us,3.48us,106.20us,141.33us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,5722,4.51s,521.86us,1.00ns,524.33us,8.46us,512.03us,575.84us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,6760,4.51s,442.86us,0.00ns,443.79us,3.77us,436.01us,490.81us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,79765,4.56s,37.17us,0.00ns,37.57us,1.51us,34.77us,44.77us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,42439,4.56s,74.17us,0.00ns,70.65us,3.68us,66.80us,88.11us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,42148,4.56s,74.14us,0.00ns,71.14us,3.65us,66.78us,80.35us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,293745,4.67s,9.03us,0.00ns,10.18us,2.20us,8.70us,32.95us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,321152,4.67s,8.98us,0.00ns,9.31us,1.32us,8.66us,18.64us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,10699,4.51s,278.36us,0.00ns,280.37us,6.39us,264.63us,304.94us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7934,4.51s,377.54us,0.00ns,378.12us,2.73us,376.21us,425.42us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12206,4.51s,245.54us,0.00ns,245.76us,4.20us,242.53us,292.72us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,153354,4.67s,18.69us,0.00ns,19.23us,696.00ns,18.62us,31.40us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,221129,4.62s,13.38us,0.00ns,13.53us,251.00ns,13.20us,19.43us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,222663,4.67s,13.32us,0.00ns,13.44us,236.00ns,13.19us,21.21us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,221397,4.62s,13.55us,0.00ns,13.52us,215.00ns,13.12us,22.55us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,218654,4.63s,13.71us,0.00ns,13.69us,178.00ns,13.28us,18.11us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,9482,4.51s,314.80us,1.00ns,316.38us,9.70us,293.23us,356.07us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,9373,4.51s,318.31us,0.00ns,320.05us,9.41us,296.14us,353.59us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,65070,4.57s,48.20us,0.00ns,46.07us,3.20us,40.74us,53.70us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,33557,4.52s,91.24us,0.00ns,89.36us,3.31us,85.22us,108.31us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,33414,4.57s,91.23us,0.00ns,89.75us,3.38us,85.29us,113.93us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,268207,4.63s,10.94us,0.00ns,11.15us,849.00ns,10.69us,20.67us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,275743,4.67s,10.83us,0.00ns,10.85us,113.00ns,10.61us,14.96us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,20196,4.56s,147.89us,0.00ns,148.52us,4.36us,134.11us,177.29us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7934,4.51s,377.41us,0.00ns,378.10us,2.92us,376.33us,425.65us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,11985,4.51s,250.37us,0.00ns,250.28us,3.61us,247.31us,299.21us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,97484,4.61s,30.18us,0.00ns,30.45us,1.88us,27.36us,44.10us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,212944,4.62s,13.90us,0.00ns,14.05us,307.00ns,13.71us,23.06us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,218933,4.62s,13.64us,0.00ns,13.67us,157.00ns,13.48us,23.12us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,222921,4.62s,13.39us,0.00ns,13.42us,155.00ns,13.12us,18.60us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,222476,4.62s,13.42us,0.00ns,13.45us,164.00ns,13.13us,17.39us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,14065,4.51s,212.73us,0.00ns,213.27us,8.63us,183.26us,247.49us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,14139,4.51s,211.59us,0.00ns,212.15us,8.46us,183.72us,247.14us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,55870,4.56s,51.83us,0.00ns,53.66us,2.44us,51.25us,63.87us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,42465,4.56s,67.89us,0.00ns,70.61us,3.70us,66.92us,82.57us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41862,4.56s,74.30us,0.00ns,71.63us,3.58us,66.92us,88.27us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,335055,4.67s,8.98us,0.00ns,8.92us,148.00ns,8.67us,14.03us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,219800,4.62s,14.14us,0.00ns,13.62us,1.44us,8.68us,21.71us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,20270,4.51s,147.98us,0.00ns,147.97us,3.79us,134.60us,176.46us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7932,4.51s,377.81us,0.00ns,378.20us,1.38us,376.92us,417.61us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12195,4.51s,245.54us,0.00ns,245.98us,4.62us,242.52us,296.08us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,152799,4.67s,19.38us,0.00ns,19.30us,764.00ns,18.61us,41.24us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,220470,4.62s,13.57us,0.00ns,13.57us,207.00ns,13.45us,69.03us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,224930,4.62s,13.29us,0.00ns,13.31us,128.00ns,13.18us,35.57us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,222350,4.62s,13.44us,0.00ns,13.46us,136.00ns,13.19us,18.32us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,222816,4.62s,13.19us,0.00ns,13.43us,430.00ns,13.03us,125.04us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,16135,4.51s,186.36us,0.00ns,185.90us,6.85us,167.94us,222.20us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,15852,4.51s,189.29us,1.00ns,189.22us,8.15us,166.54us,234.49us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,12006,4.51s,249.67us,0.00ns,249.86us,1.51us,249.28us,294.99us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,20961,4.51s,141.73us,0.00ns,143.09us,4.40us,137.33us,174.17us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,20898,4.51s,142.42us,0.00ns,143.53us,4.39us,137.96us,157.30us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,334515,4.67s,8.99us,0.00ns,8.94us,156.00ns,8.67us,13.48us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,243098,4.67s,13.78us,0.00ns,12.31us,2.42us,8.67us,34.28us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,6665,4.51s,448.06us,0.00ns,450.08us,8.55us,428.23us,512.21us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7809,4.51s,383.67us,0.00ns,384.15us,2.83us,381.87us,441.41us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12191,4.51s,245.57us,0.00ns,246.06us,4.73us,242.57us,295.67us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,130379,4.62s,22.34us,0.00ns,22.68us,2.15us,22.31us,39.76us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,224596,4.62s,13.31us,0.00ns,13.33us,125.00ns,13.19us,19.31us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,224910,4.62s,13.29us,0.00ns,13.31us,122.00ns,13.19us,19.43us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,225648,4.62s,13.19us,0.00ns,13.26us,180.00ns,13.05us,37.51us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,226664,4.62s,13.18us,0.00ns,13.20us,138.00ns,13.04us,18.35us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,6971,4.51s,430.83us,0.00ns,430.33us,7.88us,393.04us,489.14us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,6983,4.51s,430.13us,0.00ns,429.58us,7.69us,396.52us,487.60us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,577.22ms,23.00ns,0.00ns,23.00ns,16.00ns,21.00ns,15.56us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,626.76ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.41us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,526.39ms,23.00ns,0.00ns,23.00ns,6.00ns,21.00ns,2.44us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,526.60ms,26.00ns,0.00ns,27.00ns,4.00ns,24.00ns,1.90us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,576.79ms,26.00ns,0.00ns,26.00ns,5.00ns,23.00ns,1.90us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,576.55ms,12.00ns,0.00ns,12.00ns,20.00ns,10.00ns,19.61us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.10ms,25.00ns,0.00ns,25.00ns,6.00ns,22.00ns,2.57us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,526.79ms,22.00ns,0.00ns,22.00ns,6.00ns,20.00ns,2.27us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,169.00ns,0.00ns,171.00ns,15.00ns,163.00ns,8.35us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,526.26ms,26.00ns,0.00ns,26.00ns,5.00ns,23.00ns,2.58us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,626.87ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.04us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,526.47ms,17.00ns,0.00ns,17.00ns,5.00ns,15.00ns,2.18us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,526.52ms,12.00ns,0.00ns,12.00ns,7.00ns,10.00ns,4.52us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,526.51ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.25us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,527.02ms,28.00ns,0.00ns,28.00ns,7.00ns,25.00ns,2.57us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,576.95ms,22.00ns,0.00ns,22.00ns,27.00ns,20.00ns,17.52us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.02ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.67us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,526.50ms,23.00ns,0.00ns,23.00ns,7.00ns,20.00ns,4.67us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,526.98ms,26.00ns,0.00ns,26.00ns,30.00ns,24.00ns,19.63us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,577.14ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,2.29us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,476.72ms,13.00ns,0.00ns,13.00ns,15.00ns,11.00ns,13.93us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.12ms,25.00ns,0.00ns,26.00ns,18.00ns,23.00ns,14.56us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,476.65ms,22.00ns,0.00ns,22.00ns,8.00ns,20.00ns,5.30us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,167.00ns,0.00ns,170.00ns,12.00ns,162.00ns,1.84us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,626.95ms,26.00ns,0.00ns,26.00ns,4.00ns,23.00ns,2.29us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,527.34ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,1.93us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,526.56ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,2.41us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,526.84ms,12.00ns,0.00ns,12.00ns,17.00ns,10.00ns,15.93us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,576.67ms,26.00ns,0.00ns,26.00ns,4.00ns,24.00ns,2.12us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,526.91ms,27.00ns,0.00ns,27.00ns,7.00ns,24.00ns,3.12us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,526.70ms,22.00ns,0.00ns,22.00ns,7.00ns,20.00ns,2.74us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.12ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,2.41us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,526.82ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.28us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,526.73ms,26.00ns,0.00ns,26.00ns,5.00ns,23.00ns,2.01us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,576.46ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,2.10us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,476.57ms,13.00ns,0.00ns,13.00ns,5.00ns,10.00ns,3.42us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.06ms,26.00ns,0.00ns,26.00ns,23.00ns,24.00ns,18.57us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,576.80ms,22.00ns,0.00ns,22.00ns,5.00ns,20.00ns,2.35us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,168.00ns,0.00ns,170.00ns,14.00ns,162.00ns,5.76us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,526.92ms,27.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.47us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,526.89ms,23.00ns,0.00ns,23.00ns,6.00ns,21.00ns,2.21us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,476.79ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.54us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,476.94ms,12.00ns,0.00ns,12.00ns,14.00ns,10.00ns,12.58us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,526.54ms,24.00ns,0.00ns,24.00ns,6.00ns,21.00ns,2.06us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,526.57ms,23.00ns,0.00ns,24.00ns,6.00ns,21.00ns,2.09us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.01ms,23.00ns,0.00ns,23.00ns,23.00ns,19.00ns,18.27us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.00ms,28.00ns,0.00ns,28.00ns,16.00ns,26.00ns,10.95us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,476.29ms,23.00ns,0.00ns,23.00ns,17.00ns,20.00ns,15.38us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,526.95ms,28.00ns,0.00ns,28.00ns,6.00ns,24.00ns,2.44us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,476.37ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.48us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,526.82ms,19.00ns,0.00ns,19.00ns,11.00ns,16.00ns,9.34us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.02ms,28.00ns,0.00ns,28.00ns,5.00ns,25.00ns,2.14us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,476.94ms,23.00ns,0.00ns,23.00ns,18.00ns,20.00ns,17.56us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,170.00ns,0.00ns,172.00ns,31.00ns,164.00ns,29.14us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,527.09ms,27.00ns,0.00ns,27.00ns,6.00ns,25.00ns,2.11us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,627.28ms,23.00ns,0.00ns,23.00ns,20.00ns,21.00ns,19.46us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.15ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,3.27us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,527.01ms,12.00ns,0.00ns,12.00ns,21.00ns,11.00ns,17.31us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,527.07ms,25.00ns,0.00ns,25.00ns,4.00ns,23.00ns,1.66us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,527.07ms,25.00ns,0.00ns,25.00ns,17.00ns,23.00ns,16.09us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,27181,4.56s,110.25us,0.00ns,110.34us,707.00ns,108.89us,132.06us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13666,4.51s,218.56us,0.00ns,219.49us,6.07us,206.93us,242.01us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13565,4.51s,220.09us,0.00ns,221.14us,6.90us,207.76us,242.56us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,255624,4.62s,9.54us,0.00ns,11.70us,2.51us,8.89us,18.61us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,286183,4.67s,8.99us,0.00ns,10.45us,2.31us,8.67us,18.30us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,14754,4.51s,201.54us,1.00ns,203.30us,3.73us,200.38us,248.93us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7949,4.51s,377.16us,0.00ns,377.40us,2.16us,374.67us,427.02us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,153195,4.67s,18.72us,0.00ns,19.25us,694.00ns,18.62us,39.90us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,218934,4.62s,13.65us,0.00ns,13.67us,123.00ns,13.53us,18.20us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,214261,4.62s,14.06us,0.00ns,13.97us,242.00ns,13.51us,18.81us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,66643,4.56s,45.48us,0.00ns,44.98us,2.67us,41.92us,68.00us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,65206,4.56s,44.88us,0.00ns,45.97us,2.14us,43.81us,67.87us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,13216,4.51s,226.42us,0.00ns,226.96us,4.16us,217.88us,259.01us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,13594,4.51s,219.46us,1.00ns,220.65us,4.04us,215.83us,236.19us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,526.88ms,26.00ns,0.00ns,26.00ns,7.00ns,24.00ns,3.69us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,527.05ms,26.00ns,0.00ns,27.00ns,21.00ns,24.00ns,16.11us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,526.99ms,25.00ns,0.00ns,25.00ns,14.00ns,22.00ns,13.22us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,576.69ms,34.00ns,0.00ns,34.00ns,8.00ns,31.00ns,4.87us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,526.47ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,2.44us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,527.09ms,12.00ns,0.00ns,12.00ns,7.00ns,10.00ns,4.28us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,526.82ms,31.00ns,0.00ns,31.00ns,6.00ns,29.00ns,2.20us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.53s,169.00ns,0.00ns,171.00ns,25.00ns,163.00ns,21.97us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,527.22ms,32.00ns,0.00ns,33.00ns,7.00ns,29.00ns,2.34us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,526.74ms,23.00ns,0.00ns,24.00ns,18.00ns,21.00ns,13.20us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,476.49ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.01us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,527.11ms,13.00ns,0.00ns,13.00ns,4.00ns,11.00ns,2.33us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,526.64ms,39.00ns,0.00ns,39.00ns,6.00ns,36.00ns,2.31us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,526.94ms,39.00ns,0.00ns,39.00ns,5.00ns,36.00ns,2.67us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,108075,4.57s,27.57us,0.00ns,27.72us,619.00ns,26.81us,35.60us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,35349,4.56s,86.40us,0.00ns,84.83us,3.24us,79.95us,104.19us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,35638,4.56s,86.08us,0.00ns,84.14us,3.35us,79.93us,95.94us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,309929,4.67s,9.65us,0.00ns,9.65us,113.00ns,9.44us,14.89us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,295003,4.67s,9.53us,0.00ns,10.14us,1.64us,9.30us,18.92us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,40778,4.56s,73.35us,0.00ns,73.53us,805.00ns,72.55us,106.19us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7947,4.51s,377.18us,0.00ns,377.51us,2.17us,374.61us,422.27us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,12194,4.51s,245.62us,0.00ns,246.01us,4.52us,242.59us,293.05us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,138779,4.67s,21.13us,0.00ns,21.29us,1.40us,19.29us,34.28us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,221869,4.62s,13.47us,0.00ns,13.49us,139.00ns,13.34us,36.08us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,212526,4.62s,13.91us,0.00ns,14.08us,288.00ns,13.53us,19.71us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,215672,4.62s,13.94us,0.00ns,13.87us,210.00ns,13.43us,35.82us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,216264,4.62s,13.91us,0.00ns,13.84us,215.00ns,13.43us,30.60us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,32574,4.56s,91.17us,0.00ns,92.06us,2.92us,87.97us,111.91us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,32614,4.56s,91.09us,0.00ns,91.95us,2.89us,87.95us,109.91us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,527.00ms,24.00ns,0.00ns,24.00ns,20.00ns,21.00ns,19.95us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,526.45ms,28.00ns,0.00ns,28.00ns,7.00ns,26.00ns,2.60us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,526.41ms,23.00ns,0.00ns,23.00ns,5.00ns,20.00ns,1.92us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.01ms,28.00ns,0.00ns,28.00ns,6.00ns,25.00ns,2.02us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,476.28ms,15.00ns,0.00ns,15.00ns,3.00ns,13.00ns,1.87us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,476.97ms,12.00ns,0.00ns,13.00ns,44.00ns,10.00ns,21.65us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,526.63ms,26.00ns,0.00ns,26.00ns,5.00ns,24.00ns,2.78us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,576.62ms,23.00ns,0.00ns,23.00ns,14.00ns,21.00ns,12.15us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.53s,168.00ns,0.00ns,170.00ns,12.00ns,163.00ns,2.43us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,526.98ms,27.00ns,0.00ns,28.00ns,6.00ns,25.00ns,2.20us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,526.93ms,23.00ns,0.00ns,23.00ns,24.00ns,21.00ns,14.33us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,526.96ms,17.00ns,0.00ns,17.00ns,4.00ns,15.00ns,2.27us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,477.31ms,12.00ns,0.00ns,12.00ns,40.00ns,10.00ns,21.34us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,527.01ms,31.00ns,0.00ns,31.00ns,6.00ns,28.00ns,2.13us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,577.09ms,31.00ns,0.00ns,31.00ns,6.00ns,28.00ns,2.39us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,87937,4.57s,33.59us,0.00ns,34.08us,1.50us,30.27us,62.24us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41240,4.56s,75.72us,0.00ns,72.71us,3.66us,68.47us,85.38us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41008,4.56s,75.72us,0.00ns,73.12us,3.56us,68.47us,114.03us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,331981,4.67s,9.05us,0.00ns,9.00us,169.00ns,8.72us,32.26us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,334512,4.67s,8.99us,0.00ns,8.94us,162.00ns,8.67us,14.48us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,16521,4.51s,180.54us,0.00ns,181.56us,4.99us,169.94us,215.09us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7949,4.51s,377.16us,0.00ns,377.40us,1.65us,374.55us,420.65us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12260,4.51s,244.52us,0.00ns,244.68us,1.72us,242.58us,293.77us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,151701,4.67s,19.88us,0.00ns,19.44us,706.00ns,18.63us,34.95us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,215938,4.62s,13.83us,0.00ns,13.86us,151.00ns,13.69us,18.30us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,219325,4.62s,13.63us,0.00ns,13.65us,123.00ns,13.50us,19.13us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,214137,4.62s,13.99us,0.00ns,13.98us,315.00ns,13.29us,21.50us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,218693,4.62s,13.73us,0.00ns,13.68us,188.00ns,13.29us,18.78us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,14633,4.51s,205.19us,0.00ns,204.99us,6.01us,187.97us,231.28us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,14815,4.51s,202.29us,0.00ns,202.48us,5.29us,186.43us,232.92us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,61034,4.56s,48.56us,0.00ns,49.12us,1.87us,46.82us,62.48us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,40621,4.56s,75.83us,0.00ns,73.82us,3.42us,68.51us,120.38us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,41181,4.56s,75.81us,0.00ns,72.81us,3.67us,68.56us,84.82us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,318342,4.67s,9.38us,0.00ns,9.39us,109.00ns,9.27us,15.04us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,320588,4.67s,9.32us,0.00ns,9.32us,102.00ns,9.21us,33.84us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,17497,4.51s,170.60us,0.00ns,171.43us,3.75us,156.89us,199.98us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7905,4.51s,377.64us,0.00ns,379.52us,6.79us,376.58us,428.89us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12238,4.51s,244.50us,0.00ns,245.12us,1.87us,242.56us,298.19us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,148334,4.67s,20.01us,0.00ns,19.89us,601.00ns,18.88us,31.03us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,220511,4.62s,13.55us,0.00ns,13.57us,138.00ns,13.41us,18.30us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,219934,4.62s,13.62us,0.00ns,13.61us,264.00ns,13.25us,18.58us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,218391,4.62s,13.86us,0.00ns,13.71us,274.00ns,13.28us,18.97us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,222556,4.62s,13.27us,0.00ns,13.45us,273.00ns,13.11us,28.06us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,14080,4.51s,213.01us,1.00ns,213.05us,8.24us,182.55us,253.17us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,14131,4.51s,212.13us,0.00ns,212.28us,7.83us,192.21us,251.88us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,184858,4.62s,16.15us,0.00ns,16.20us,297.00ns,15.58us,30.51us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,33803,4.56s,86.41us,0.00ns,88.71us,3.20us,85.05us,98.60us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,33249,4.56s,91.72us,0.00ns,90.19us,3.20us,85.09us,116.94us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,235740,4.67s,10.53us,0.00ns,12.69us,2.39us,10.18us,20.05us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,284124,4.68s,10.21us,0.00ns,10.52us,1.16us,10.03us,19.21us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,28485,4.57s,104.73us,0.00ns,105.29us,3.11us,97.31us,139.16us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7948,4.51s,377.12us,0.00ns,377.47us,1.77us,375.77us,418.33us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,137342,4.67s,21.11us,0.00ns,21.52us,1.14us,19.78us,26.26us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,211441,4.62s,14.08us,0.00ns,14.15us,175.00ns,13.92us,18.83us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,203382,4.62s,14.90us,0.00ns,14.71us,360.00ns,14.07us,19.24us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,136020,4.62s,21.36us,0.00ns,22.02us,2.20us,19.34us,31.61us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,132536,4.62s,22.19us,0.00ns,22.60us,1.47us,20.74us,30.48us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,24091,4.51s,123.00us,0.00ns,124.50us,9.74us,106.28us,170.66us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,24057,4.51s,122.86us,0.00ns,124.67us,10.39us,105.78us,169.15us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,161250,4.62s,18.55us,0.00ns,18.57us,150.00ns,18.47us,23.26us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,37966,4.56s,81.76us,0.00ns,78.98us,3.57us,74.77us,108.01us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,37828,4.56s,81.82us,0.00ns,79.27us,3.52us,74.80us,91.04us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,214799,4.62s,13.83us,0.00ns,13.93us,249.00ns,13.45us,18.52us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,229657,4.62s,12.97us,0.00ns,13.03us,266.00ns,12.53us,31.12us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,51254,4.56s,58.26us,0.00ns,58.49us,0.95us,56.40us,72.39us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7950,4.51s,377.11us,0.00ns,377.37us,1.43us,375.74us,412.40us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,128241,4.62s,22.88us,0.00ns,23.07us,1.92us,21.43us,483.78us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,13292,4.51s,225.18us,0.00ns,225.68us,1.00us,225.09us,235.25us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,13321,4.51s,224.87us,0.00ns,225.19us,0.95us,224.83us,240.23us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,139241,4.57s,20.94us,0.00ns,21.51us,1.96us,18.96us,33.68us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,134295,4.62s,22.08us,0.00ns,22.30us,1.34us,20.27us,29.26us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,50904,4.56s,58.59us,0.00ns,58.90us,2.09us,54.67us,81.70us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,51017,4.56s,58.44us,0.00ns,58.77us,2.00us,54.33us,80.23us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613345,100857,4.57s,29.67us,0.00ns,29.71us,204.00ns,29.60us,35.65us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613345,41330,4.56s,75.24us,0.00ns,72.55us,3.60us,67.98us,90.25us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613345,40975,4.56s,75.26us,0.00ns,73.18us,3.15us,67.99us,82.12us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,204067,4.62s,14.69us,0.00ns,14.67us,271.00ns,13.90us,18.88us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,238613,4.67s,12.50us,0.00ns,12.54us,236.00ns,11.60us,18.33us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,52390,4.56s,57.17us,0.00ns,57.23us,513.00ns,55.58us,69.41us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7956,4.51s,377.03us,0.00ns,377.05us,1.12us,375.70us,420.34us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,135333,4.67s,21.61us,0.00ns,21.84us,598.00ns,21.09us,44.02us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,11798,4.51s,253.25us,0.00ns,254.26us,3.74us,252.12us,286.28us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,11816,4.51s,253.06us,0.00ns,253.86us,3.13us,251.66us,285.78us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613345,156456,4.62s,18.52us,0.00ns,19.14us,1.64us,17.61us,32.89us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613345,150229,4.62s,19.51us,0.00ns,19.94us,1.29us,18.76us,42.83us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613345,55895,4.56s,53.40us,0.00ns,53.64us,1.07us,51.11us,64.25us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613345,56302,4.56s,52.79us,0.00ns,53.24us,1.50us,51.10us,65.08us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,527.20ms,31.00ns,0.00ns,31.00ns,6.00ns,28.00ns,2.08us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,527.30ms,38.00ns,0.00ns,39.00ns,8.00ns,36.00ns,2.94us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.10ms,28.00ns,0.00ns,29.00ns,14.00ns,26.00ns,12.37us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,576.87ms,28.00ns,0.00ns,28.00ns,6.00ns,25.00ns,3.09us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,526.63ms,17.00ns,0.00ns,17.00ns,5.00ns,14.00ns,1.93us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,526.93ms,23.00ns,0.00ns,23.00ns,13.00ns,21.00ns,9.43us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.09ms,24.00ns,0.00ns,24.00ns,11.00ns,22.00ns,8.98us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.23ms,22.00ns,0.00ns,22.00ns,6.00ns,20.00ns,2.61us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.48s,170.00ns,0.00ns,172.00ns,13.00ns,163.00ns,2.86us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,527.26ms,28.00ns,0.00ns,28.00ns,7.00ns,25.00ns,2.62us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,526.81ms,25.00ns,0.00ns,26.00ns,4.00ns,23.00ns,2.67us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,526.75ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,2.31us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,526.89ms,15.00ns,0.00ns,15.00ns,5.00ns,12.00ns,2.64us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,627.15ms,63.00ns,0.00ns,63.00ns,7.00ns,59.00ns,2.04us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,576.81ms,42.00ns,0.00ns,42.00ns,7.00ns,39.00ns,3.06us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,28,1000000,526.74ms,35.00ns,0.00ns,35.00ns,5.00ns,32.00ns,2.06us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,526.74ms,38.00ns,0.00ns,38.00ns,7.00ns,36.00ns,2.81us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,527.07ms,29.00ns,0.00ns,29.00ns,15.00ns,26.00ns,14.26us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,526.98ms,24.00ns,0.00ns,24.00ns,6.00ns,22.00ns,2.42us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.02ms,22.00ns,0.00ns,22.00ns,5.00ns,19.00ns,2.92us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,476.65ms,16.00ns,0.00ns,17.00ns,14.00ns,14.00ns,13.00us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,477.01ms,23.00ns,0.00ns,23.00ns,4.00ns,20.00ns,2.57us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.21ms,22.00ns,0.00ns,22.00ns,4.00ns,20.00ns,2.05us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,179.00ns,0.00ns,181.00ns,14.00ns,172.00ns,2.27us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,527.46ms,26.00ns,0.00ns,26.00ns,6.00ns,22.00ns,2.50us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,526.97ms,28.00ns,0.00ns,28.00ns,19.00ns,26.00ns,18.01us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,28,1000000,527.06ms,17.00ns,0.00ns,17.00ns,14.00ns,15.00ns,12.98us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,28,1000000,576.86ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,3.63us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,28,1000000,527.05ms,41.00ns,0.00ns,41.00ns,7.00ns,38.00ns,2.88us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,28,1000000,577.09ms,30.00ns,0.00ns,30.00ns,4.00ns,27.00ns,2.26us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,33747,4.56s,87.97us,0.00ns,88.85us,1.93us,85.80us,144.17us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13661,4.51s,218.55us,0.00ns,219.58us,5.92us,208.05us,237.09us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13701,4.51s,218.06us,0.00ns,218.93us,6.04us,205.35us,237.70us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,322800,4.67s,9.29us,0.00ns,9.26us,154.00ns,8.87us,28.90us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,235365,4.62s,14.03us,0.00ns,12.71us,2.26us,8.68us,34.40us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,17506,4.51s,173.98us,0.00ns,171.34us,3.98us,165.41us,198.57us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7947,4.51s,377.20us,0.00ns,377.49us,1.42us,374.62us,408.44us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,150193,4.67s,19.89us,0.00ns,19.63us,907.00ns,18.63us,31.11us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,218825,4.62s,13.65us,0.00ns,13.68us,138.00ns,13.52us,18.04us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,217155,4.62s,13.77us,0.00ns,13.78us,123.00ns,13.63us,18.22us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,86191,4.56s,34.30us,0.00ns,34.77us,1.94us,32.80us,58.93us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,80361,4.56s,37.53us,0.00ns,37.30us,1.70us,33.90us,53.32us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,15798,4.51s,191.25us,0.00ns,189.87us,4.10us,182.66us,213.28us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,15911,4.51s,186.65us,0.00ns,188.51us,4.76us,182.13us,211.74us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613402,20224,4.51s,150.64us,0.00ns,148.31us,4.08us,140.08us,166.81us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613402,13557,4.51s,220.36us,0.00ns,221.27us,5.85us,208.13us,240.01us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13488,4.51s,221.15us,0.00ns,222.40us,6.35us,209.06us,243.33us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,321623,4.67s,9.28us,0.00ns,9.29us,111.00ns,9.13us,14.72us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,230283,4.67s,14.10us,0.00ns,13.00us,2.11us,9.01us,19.26us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,10922,4.51s,275.66us,0.00ns,274.67us,2.84us,269.96us,317.54us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7943,4.51s,377.42us,0.00ns,377.69us,1.47us,374.68us,408.61us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,12233,4.51s,244.51us,0.00ns,245.21us,3.81us,242.55us,295.78us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,143965,4.67s,20.76us,0.00ns,20.51us,1.21us,18.78us,32.08us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,218961,4.62s,13.65us,0.00ns,13.67us,125.00ns,13.53us,22.43us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,208591,4.62s,14.34us,0.00ns,14.35us,111.00ns,14.12us,17.92us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613402,208323,4.62s,14.44us,0.00ns,14.37us,263.00ns,13.74us,21.54us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613402,209774,4.62s,14.42us,0.00ns,14.27us,298.00ns,13.78us,18.99us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613402,10291,4.51s,290.88us,0.00ns,291.50us,3.08us,286.33us,308.00us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613402,10332,4.51s,289.19us,0.00ns,290.34us,2.45us,287.28us,307.81us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,527.08ms,39.00ns,0.00ns,39.00ns,165.00ns,37.00ns,165.28us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,527.09ms,32.00ns,0.00ns,32.00ns,6.00ns,29.00ns,1.94us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,527.09ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.22us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,677.45ms,37.00ns,0.00ns,38.00ns,7.00ns,35.00ns,2.18us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,527.17ms,19.00ns,0.00ns,19.00ns,6.00ns,17.00ns,2.59us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,576.75ms,37.00ns,0.00ns,36.00ns,10.00ns,26.00ns,7.58us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,527.16ms,31.00ns,0.00ns,31.00ns,6.00ns,28.00ns,2.95us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.53s,176.00ns,0.00ns,178.00ns,14.00ns,169.00ns,5.88us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,527.34ms,36.00ns,0.00ns,37.00ns,6.00ns,33.00ns,2.38us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,527.25ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.51us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,526.92ms,18.00ns,0.00ns,18.00ns,3.00ns,16.00ns,1.78us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,527.09ms,16.00ns,0.00ns,16.00ns,6.00ns,13.00ns,2.50us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,627.38ms,85.00ns,0.00ns,86.00ns,27.00ns,81.00ns,17.52us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,576.80ms,57.00ns,0.00ns,57.00ns,10.00ns,53.00ns,7.24us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,42,1000000,577.18ms,37.00ns,0.00ns,37.00ns,14.00ns,35.00ns,8.97us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,527.31ms,38.00ns,0.00ns,38.00ns,11.00ns,35.00ns,8.96us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,527.32ms,29.00ns,0.00ns,29.00ns,13.00ns,26.00ns,11.49us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,526.69ms,31.00ns,0.00ns,31.00ns,5.00ns,29.00ns,2.39us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,527.12ms,25.00ns,0.00ns,25.00ns,5.00ns,22.00ns,2.94us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,477.22ms,19.00ns,0.00ns,19.00ns,6.00ns,16.00ns,3.36us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,527.12ms,28.00ns,0.00ns,28.00ns,5.00ns,25.00ns,2.89us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,42,1000000,527.05ms,28.00ns,0.00ns,28.00ns,19.00ns,26.00ns,17.55us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.53s,181.00ns,0.00ns,183.00ns,15.00ns,175.00ns,4.57us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,526.93ms,31.00ns,0.00ns,32.00ns,16.00ns,28.00ns,14.25us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,527.19ms,33.00ns,0.00ns,33.00ns,30.00ns,30.00ns,19.61us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,42,1000000,526.95ms,19.00ns,0.00ns,19.00ns,4.00ns,17.00ns,2.52us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,42,1000000,526.69ms,16.00ns,0.00ns,16.00ns,22.00ns,14.00ns,21.38us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,42,1000000,576.78ms,53.00ns,0.00ns,53.00ns,8.00ns,49.00ns,2.25us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,42,1000000,577.23ms,35.00ns,0.00ns,35.00ns,6.00ns,33.00ns,2.69us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,124116,4.57s,24.45us,0.00ns,24.14us,2.37us,18.34us,32.60us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29181,4.56s,104.65us,0.00ns,102.78us,3.48us,97.97us,114.65us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,29585,4.56s,102.22us,0.00ns,101.37us,3.18us,97.07us,114.52us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,225801,4.62s,12.59us,0.00ns,13.25us,1.97us,12.42us,22.30us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,290160,4.67s,10.29us,0.00ns,10.30us,108.00ns,10.13us,16.90us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,31603,4.56s,94.69us,0.00ns,94.90us,1.11us,93.28us,115.60us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7949,4.51s,377.18us,0.00ns,377.41us,1.59us,375.82us,418.21us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,135970,4.67s,21.88us,0.00ns,21.73us,1.55us,19.40us,34.69us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,214162,4.62s,13.72us,0.00ns,13.97us,339.00ns,13.52us,20.83us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,216444,4.62s,13.67us,0.00ns,13.83us,304.00ns,13.51us,18.61us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,144601,4.62s,19.89us,0.00ns,20.71us,2.16us,18.87us,47.83us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,133087,4.62s,21.48us,0.00ns,22.51us,2.35us,19.97us,34.49us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,26698,4.52s,112.89us,0.00ns,112.34us,4.61us,100.73us,134.23us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,28528,4.57s,103.86us,0.00ns,105.13us,3.46us,100.48us,128.41us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,613427,58717,4.57s,52.97us,0.00ns,51.06us,2.87us,46.38us,62.61us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,613427,29428,4.52s,102.79us,0.00ns,101.91us,2.98us,97.71us,112.01us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,613427,29221,4.57s,101.86us,0.00ns,102.63us,3.64us,97.81us,112.61us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,302929,4.67s,9.66us,0.00ns,9.87us,1.00us,9.50us,18.01us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,310494,4.67s,9.62us,0.00ns,9.63us,115.00ns,9.48us,35.76us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,22210,4.51s,134.50us,0.00ns,135.05us,3.57us,127.42us,162.91us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7948,4.51s,377.23us,0.00ns,377.44us,1.37us,376.10us,409.48us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,12217,4.51s,244.94us,0.00ns,245.54us,4.81us,242.65us,294.09us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,139281,4.67s,21.15us,0.00ns,21.20us,1.62us,19.17us,34.17us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,220576,4.62s,13.45us,0.00ns,13.57us,255.00ns,13.29us,21.23us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,224863,4.62s,13.29us,0.00ns,13.31us,123.00ns,13.17us,19.39us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,613427,221631,4.62s,13.49us,0.00ns,13.50us,144.00ns,13.16us,17.75us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,613427,221761,4.62s,13.48us,0.00ns,13.49us,149.00ns,13.15us,23.73us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,613427,18134,4.51s,164.03us,0.00ns,165.41us,6.06us,143.06us,191.28us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,613427,18277,4.51s,162.94us,0.00ns,164.11us,6.33us,142.10us,192.03us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,577.16ms,34.00ns,0.00ns,34.00ns,8.00ns,32.00ns,2.88us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,541.99ms,32.00ns,0.00ns,32.00ns,6.00ns,28.00ns,1.95us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,526.68ms,28.00ns,0.00ns,28.00ns,6.00ns,25.00ns,2.82us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.46ms,33.00ns,0.00ns,33.00ns,7.00ns,30.00ns,3.05us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,526.72ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.27us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,527.20ms,23.00ns,0.00ns,23.00ns,6.00ns,20.00ns,3.56us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,526.90ms,25.00ns,0.00ns,25.00ns,19.00ns,22.00ns,18.64us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.53s,182.00ns,0.00ns,184.00ns,14.00ns,174.00ns,2.33us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,593.75ms,30.00ns,0.00ns,30.00ns,7.00ns,27.00ns,2.30us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,528.58ms,28.00ns,0.00ns,28.00ns,8.00ns,25.00ns,4.27us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,477.02ms,17.00ns,0.00ns,17.00ns,5.00ns,15.00ns,2.91us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,527.31ms,15.00ns,0.00ns,15.00ns,3.00ns,13.00ns,1.95us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,627.32ms,76.00ns,0.00ns,78.00ns,9.00ns,71.00ns,2.11us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,577.23ms,49.00ns,0.00ns,50.00ns,7.00ns,45.00ns,2.87us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),libc/memmem/oneshot,unknown,,31,1000000,627.50ms,35.00ns,0.00ns,36.00ns,8.00ns,32.00ns,6.44us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,527.38ms,38.00ns,0.00ns,38.00ns,4.00ns,36.00ns,1.53us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,527.33ms,28.00ns,0.00ns,28.00ns,13.00ns,25.00ns,12.72us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.15ms,26.00ns,0.00ns,26.00ns,6.00ns,24.00ns,2.18us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,527.27ms,26.00ns,0.00ns,26.00ns,3.00ns,23.00ns,1.82us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,576.94ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,2.03us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,527.03ms,22.00ns,0.00ns,22.00ns,6.00ns,20.00ns,2.78us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,526.78ms,23.00ns,0.00ns,24.00ns,6.00ns,21.00ns,3.04us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.53s,182.00ns,0.00ns,185.00ns,14.00ns,175.00ns,2.07us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,527.03ms,27.00ns,0.00ns,27.00ns,12.00ns,24.00ns,9.11us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,527.14ms,33.00ns,0.00ns,33.00ns,5.00ns,31.00ns,2.14us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/oneshot,2.5.0,,31,1000000,526.97ms,18.00ns,0.00ns,18.00ns,15.00ns,16.00ns,14.06us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/sliceslice/memmem/prebuilt,2.5.0,,31,1000000,526.67ms,14.00ns,0.00ns,14.00ns,6.00ns,12.00ns,3.75us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/oneshot,1.73.0-nightly 180dffba1,,31,1000000,577.27ms,47.00ns,0.00ns,47.00ns,7.00ns,44.00ns,2.55us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/std/memmem/prebuilt,1.73.0-nightly 180dffba1,,31,1000000,527.02ms,33.00ns,0.00ns,33.00ns,16.00ns,31.00ns,9.09us\n"
  },
  {
    "path": "benchmarks/record/x86_64/2023-08-27.csv",
    "content": "name,model,rebar_version,engine,engine_version,err,haystack_len,iters,total,median,mad,mean,stddev,min,max\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,594933,315234,4.62s,9.35us,0.00ns,9.48us,299.00ns,9.25us,18.33us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,266106,4.77s,10.93us,0.00ns,10.94us,110.00ns,10.89us,16.13us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,16539,4.51s,181.11us,0.00ns,181.37us,0.96us,180.50us,204.88us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,17756,4.51s,168.70us,0.00ns,168.93us,848.00ns,168.08us,183.64us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,6499,4.51s,461.05us,0.00ns,461.57us,2.65us,455.96us,500.60us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,7247,4.51s,413.89us,0.00ns,413.96us,3.58us,407.06us,466.98us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,14126,4.56s,211.84us,1.00ns,212.05us,919.00ns,210.70us,224.66us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,16099,4.51s,185.07us,0.00ns,186.32us,2.47us,183.56us,198.28us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,18366,4.51s,163.01us,0.00ns,163.31us,1.50us,161.72us,180.27us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,18370,4.51s,163.08us,0.00ns,163.28us,811.00ns,161.99us,178.84us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,7142,4.51s,414.01us,1.00ns,420.01us,17.35us,399.01us,478.13us\nmemchr/sherlock/common/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,15330,4.51s,197.65us,0.00ns,195.67us,4.57us,183.77us,209.57us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,9354,4.51s,323.56us,5.00ns,320.69us,9.61us,301.42us,338.56us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,3280,4.51s,913.33us,2.00ns,914.68us,8.24us,904.75us,0.96ms\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,4598,4.51s,659.97us,0.00ns,652.55us,34.65us,601.48us,843.24us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,9026,4.56s,328.93us,0.00ns,332.05us,7.82us,325.75us,360.43us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,9318,4.51s,320.29us,0.00ns,321.93us,2.25us,319.59us,336.33us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,10094,4.51s,296.98us,0.00ns,297.19us,1.14us,294.74us,309.49us\nmemchr/sherlock/common/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,8501,4.51s,352.71us,0.00ns,352.90us,1.03us,351.71us,368.93us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,6098,4.51s,493.83us,0.00ns,491.96us,4.56us,479.14us,508.89us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,2196,4.51s,1.37ms,5.00ns,1.37ms,6.42us,1.35ms,1.40ms\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,3409,4.51s,883.34us,0.00ns,880.17us,13.76us,844.34us,943.51us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,6757,4.56s,437.04us,0.00ns,443.66us,12.58us,431.32us,483.29us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,5564,4.51s,539.16us,1.00ns,539.24us,2.16us,533.23us,551.23us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,6238,4.51s,480.65us,1.00ns,480.89us,1.60us,476.80us,503.14us\nmemchr/sherlock/common/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,5672,4.51s,528.52us,0.00ns,528.93us,1.25us,527.74us,541.99us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,529.07ms,28.00ns,0.00ns,28.00ns,6.00ns,25.00ns,3.07us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,1.48s,166.00ns,0.00ns,167.00ns,14.00ns,161.00ns,7.99us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,929.81ms,187.00ns,0.00ns,188.00ns,16.00ns,183.00ns,10.63us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,829.33ms,171.00ns,0.00ns,172.00ns,13.00ns,167.00ns,4.01us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,729.31ms,141.00ns,0.00ns,141.00ns,12.00ns,129.00ns,2.43us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,829.87ms,166.00ns,0.00ns,167.00ns,11.00ns,155.00ns,2.40us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.78s,298.00ns,0.00ns,299.00ns,15.00ns,290.00ns,2.93us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,829.46ms,188.00ns,0.00ns,188.00ns,12.00ns,185.00ns,2.27us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,880.33ms,168.00ns,0.00ns,169.00ns,14.00ns,165.00ns,8.49us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,829.55ms,170.00ns,0.00ns,170.00ns,12.00ns,166.00ns,4.61us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,779.68ms,159.00ns,0.00ns,160.00ns,12.00ns,153.00ns,2.33us\nmemchr/sherlock/common/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,879.70ms,207.00ns,0.00ns,207.00ns,15.00ns,203.00ns,7.09us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,1.13s,330.00ns,0.00ns,331.00ns,16.00ns,315.00ns,7.32us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,929.49ms,240.00ns,0.00ns,241.00ns,16.00ns,229.00ns,5.59us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,929.84ms,262.00ns,0.00ns,254.00ns,25.00ns,201.00ns,5.43us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,2.03s,432.00ns,0.00ns,433.00ns,18.00ns,424.00ns,5.90us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,1.18s,343.00ns,0.00ns,343.00ns,71.00ns,333.00ns,69.29us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,1.13s,321.00ns,0.00ns,321.00ns,15.00ns,313.00ns,2.41us\nmemchr/sherlock/common/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,1.23s,375.00ns,0.00ns,375.00ns,14.00ns,367.00ns,5.70us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,1.53s,497.00ns,0.00ns,497.00ns,19.00ns,485.00ns,6.68us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,1.08s,300.00ns,0.00ns,302.00ns,19.00ns,282.00ns,7.29us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,0.98s,269.00ns,0.00ns,268.00ns,18.00ns,259.00ns,5.56us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,2.34s,584.00ns,0.00ns,586.00ns,17.00ns,574.00ns,4.50us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,1.58s,556.00ns,0.00ns,557.00ns,21.00ns,547.00ns,13.65us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,1.53s,502.00ns,0.00ns,502.00ns,15.00ns,492.00ns,4.48us\nmemchr/sherlock/common/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.58s,569.00ns,0.00ns,570.00ns,26.00ns,557.00ns,16.46us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,69,1000000,528.94ms,17.00ns,0.00ns,17.00ns,17.00ns,15.00ns,16.07us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,69,1000000,1.48s,160.00ns,0.00ns,161.00ns,10.00ns,156.00ns,2.55us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,578.89ms,49.00ns,0.00ns,49.00ns,25.00ns,47.00ns,17.79us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,528.97ms,45.00ns,0.00ns,45.00ns,21.00ns,42.00ns,17.90us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,529.25ms,35.00ns,0.00ns,36.00ns,9.00ns,30.00ns,5.96us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,528.98ms,26.00ns,0.00ns,27.00ns,14.00ns,23.00ns,11.82us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.53s,183.00ns,0.00ns,183.00ns,10.00ns,177.00ns,2.56us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,578.80ms,54.00ns,0.00ns,54.00ns,21.00ns,52.00ns,17.93us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,579.20ms,45.00ns,0.00ns,45.00ns,7.00ns,42.00ns,3.21us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,578.78ms,45.00ns,0.00ns,45.00ns,6.00ns,42.00ns,1.97us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,529.09ms,25.00ns,0.00ns,25.00ns,13.00ns,22.00ns,11.98us\nmemchr/sherlock/common/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,578.88ms,47.00ns,0.00ns,48.00ns,21.00ns,44.00ns,16.31us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,594933,320013,4.67s,9.34us,0.00ns,9.34us,103.00ns,9.25us,33.19us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,266400,4.77s,10.92us,0.00ns,10.93us,112.00ns,10.89us,46.70us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,677189,4.88s,4.43us,0.00ns,4.40us,112.00ns,4.17us,24.73us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,694944,4.88s,4.25us,0.00ns,4.28us,142.00ns,4.10us,90.94us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,139215,4.62s,21.48us,0.00ns,21.51us,174.00ns,21.46us,27.26us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,26190,4.51s,114.38us,0.00ns,114.52us,696.00ns,114.35us,139.83us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,390086,4.82s,7.36us,0.00ns,7.36us,90.00ns,7.14us,17.59us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,561256,4.73s,5.34us,0.00ns,5.31us,91.00ns,5.02us,10.11us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,706314,4.88s,4.16us,0.00ns,4.22us,100.00ns,4.10us,10.42us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,714279,4.88s,4.14us,0.00ns,4.17us,83.00ns,4.10us,10.35us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,25708,4.56s,116.62us,0.00ns,116.67us,369.00ns,116.59us,141.30us\nmemchr/sherlock/never/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,682840,4.78s,4.34us,0.00ns,4.36us,87.00ns,4.28us,23.94us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,482235,4.73s,6.52us,0.00ns,6.19us,546.00ns,5.24us,30.44us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,74489,4.56s,40.40us,0.00ns,40.24us,1.97us,38.16us,61.18us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,17464,4.51s,171.57us,0.00ns,171.75us,821.00ns,171.53us,206.19us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,265006,4.77s,10.94us,0.00ns,10.99us,161.00ns,10.90us,15.66us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,571337,4.83s,5.21us,0.00ns,5.22us,69.00ns,5.19us,12.10us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,576261,4.78s,5.17us,0.00ns,5.17us,75.00ns,5.11us,22.21us\nmemchr/sherlock/never/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,494358,4.73s,6.52us,0.00ns,6.04us,646.00ns,5.17us,14.85us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,389235,4.72s,7.67us,0.00ns,7.67us,80.00ns,7.64us,15.22us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,52778,4.56s,57.21us,0.00ns,56.81us,2.41us,55.09us,78.49us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,13096,4.51s,228.74us,0.00ns,229.06us,1.08us,228.71us,270.07us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,182759,4.67s,16.06us,0.00ns,16.08us,139.00ns,15.69us,24.12us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,389469,4.72s,7.66us,0.00ns,7.67us,74.00ns,7.63us,20.28us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,367639,4.67s,8.23us,0.00ns,8.12us,233.00ns,7.70us,23.27us\nmemchr/sherlock/never/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,381863,4.67s,7.70us,0.00ns,7.83us,230.00ns,7.61us,22.03us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,576.73ms,29.00ns,0.00ns,29.00ns,5.00ns,26.00ns,2.33us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,1.48s,165.00ns,0.00ns,166.00ns,12.00ns,160.00ns,5.58us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,526.79ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,1.86us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,476.84ms,15.00ns,0.00ns,15.00ns,3.00ns,13.00ns,1.86us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,577.29ms,39.00ns,0.00ns,40.00ns,6.00ns,32.00ns,1.94us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,778.80ms,144.00ns,0.00ns,144.00ns,11.00ns,141.00ns,2.29us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.48s,160.00ns,0.00ns,161.00ns,16.00ns,155.00ns,11.64us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,476.88ms,15.00ns,0.00ns,15.00ns,22.00ns,12.00ns,21.64us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,476.78ms,14.00ns,0.00ns,14.00ns,5.00ns,12.00ns,2.77us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,477.15ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.72us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,778.25ms,144.00ns,0.00ns,145.00ns,11.00ns,141.00ns,2.32us\nmemchr/sherlock/never/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,477.07ms,15.00ns,0.00ns,15.00ns,6.00ns,13.00ns,3.90us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,477.43ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,2.55us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,576.75ms,60.00ns,0.00ns,61.00ns,15.00ns,55.00ns,10.12us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,878.65ms,208.00ns,0.00ns,209.00ns,12.00ns,205.00ns,2.59us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.53s,169.00ns,0.00ns,171.00ns,12.00ns,165.00ns,2.27us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,476.69ms,20.00ns,0.00ns,20.00ns,6.00ns,17.00ns,2.58us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,527.32ms,18.00ns,0.00ns,18.00ns,5.00ns,16.00ns,2.50us\nmemchr/sherlock/never/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,527.02ms,19.00ns,0.00ns,19.00ns,34.00ns,16.00ns,19.66us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,527.16ms,22.00ns,0.00ns,22.00ns,7.00ns,20.00ns,2.71us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,627.22ms,79.00ns,0.00ns,79.00ns,26.00ns,70.00ns,21.22us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.03s,276.00ns,0.00ns,275.00ns,13.00ns,268.00ns,2.40us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.53s,173.00ns,0.00ns,174.00ns,11.00ns,167.00ns,2.51us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,526.97ms,23.00ns,0.00ns,23.00ns,4.00ns,21.00ns,1.79us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,527.30ms,21.00ns,0.00ns,21.00ns,15.00ns,19.00ns,14.06us\nmemchr/sherlock/never/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,527.04ms,22.00ns,0.00ns,22.00ns,4.00ns,19.00ns,2.65us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,69,1000000,527.07ms,17.00ns,0.00ns,17.00ns,37.00ns,14.00ns,20.46us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,69,1000000,1.48s,165.00ns,0.00ns,166.00ns,72.00ns,160.00ns,71.57us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,476.78ms,12.00ns,0.00ns,13.00ns,3.00ns,11.00ns,1.86us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,476.89ms,12.00ns,0.00ns,12.00ns,2.00ns,11.00ns,1.36us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,476.48ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,2.08us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,576.82ms,23.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.01us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.48s,157.00ns,0.00ns,158.00ns,10.00ns,153.00ns,1.93us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,526.80ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.67us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,477.11ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,1.91us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,476.96ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,1.82us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,627.40ms,23.00ns,0.00ns,24.00ns,11.00ns,21.00ns,9.13us\nmemchr/sherlock/never/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,577.37ms,13.00ns,0.00ns,13.00ns,3.00ns,12.00ns,1.73us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,477.00ms,14.00ns,0.00ns,14.00ns,12.00ns,12.00ns,11.42us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,476.29ms,16.00ns,0.00ns,16.00ns,37.00ns,14.00ns,21.93us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,527.09ms,37.00ns,0.00ns,37.00ns,24.00ns,28.00ns,17.55us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.48s,158.00ns,0.00ns,159.00ns,12.00ns,153.00ns,1.71us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,526.96ms,14.00ns,0.00ns,14.00ns,3.00ns,12.00ns,1.80us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,476.85ms,13.00ns,0.00ns,13.00ns,5.00ns,11.00ns,3.01us\nmemchr/sherlock/never/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,476.96ms,14.00ns,0.00ns,15.00ns,26.00ns,11.00ns,20.58us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,526.67ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.01us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,526.70ms,18.00ns,0.00ns,18.00ns,22.00ns,16.00ns,21.21us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,576.76ms,43.00ns,0.00ns,43.00ns,11.00ns,34.00ns,7.04us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.48s,165.00ns,0.00ns,166.00ns,11.00ns,162.00ns,2.27us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,477.15ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,2.37us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,527.28ms,14.00ns,0.00ns,14.00ns,35.00ns,12.00ns,21.37us\nmemchr/sherlock/never/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,527.07ms,15.00ns,0.00ns,15.00ns,5.00ns,12.00ns,2.34us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,,1000000,527.09ms,11.00ns,0.00ns,11.00ns,7.00ns,9.00ns,6.02us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,,1000000,1.48s,157.00ns,0.00ns,158.00ns,10.00ns,153.00ns,1.93us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,,1000000,476.99ms,11.00ns,0.00ns,11.00ns,5.00ns,9.00ns,2.14us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,,1000000,526.42ms,11.00ns,0.00ns,11.00ns,33.00ns,10.00ns,20.57us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,,1000000,526.81ms,11.00ns,0.00ns,11.00ns,28.00ns,9.00ns,19.62us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,,1000000,526.53ms,10.00ns,0.00ns,10.00ns,3.00ns,8.00ns,1.98us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,,1000000,1.48s,155.00ns,0.00ns,156.00ns,14.00ns,151.00ns,7.76us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,,1000000,576.53ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.22us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,,1000000,527.02ms,10.00ns,0.00ns,10.00ns,3.00ns,8.00ns,1.97us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,,1000000,477.04ms,10.00ns,0.00ns,10.00ns,4.00ns,8.00ns,2.39us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,,1000000,526.53ms,10.00ns,0.00ns,10.00ns,4.00ns,9.00ns,2.11us\nmemchr/sherlock/never/empty1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,,1000000,526.87ms,10.00ns,0.00ns,10.00ns,20.00ns,9.00ns,19.48us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,,1000000,526.44ms,11.00ns,0.00ns,12.00ns,3.00ns,10.00ns,2.09us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,,1000000,477.06ms,11.00ns,0.00ns,11.00ns,39.00ns,9.00ns,19.52us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,,1000000,476.92ms,10.00ns,0.00ns,10.00ns,4.00ns,9.00ns,1.90us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,,1000000,1.48s,155.00ns,0.00ns,157.00ns,14.00ns,151.00ns,8.43us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,,1000000,477.05ms,11.00ns,0.00ns,12.00ns,4.00ns,9.00ns,2.23us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,,1000000,476.56ms,10.00ns,0.00ns,10.00ns,5.00ns,9.00ns,2.25us\nmemchr/sherlock/never/empty2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,,1000000,476.83ms,10.00ns,0.00ns,10.00ns,4.00ns,9.00ns,2.06us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,,1000000,476.39ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,1.88us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,,1000000,526.91ms,11.00ns,0.00ns,11.00ns,31.00ns,9.00ns,21.01us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,,1000000,476.53ms,10.00ns,0.00ns,11.00ns,30.00ns,9.00ns,19.13us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,,1000000,1.48s,156.00ns,0.00ns,157.00ns,14.00ns,152.00ns,7.59us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,,1000000,476.85ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,2.17us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,,1000000,476.98ms,10.00ns,0.00ns,10.00ns,5.00ns,9.00ns,2.79us\nmemchr/sherlock/never/empty3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,,1000000,476.48ms,10.00ns,0.00ns,10.00ns,4.00ns,9.00ns,2.99us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,594933,313828,4.67s,9.53us,0.00ns,9.53us,101.00ns,9.25us,18.34us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,265607,4.72s,10.94us,0.00ns,10.96us,112.00ns,10.89us,18.84us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,581416,4.78s,5.18us,0.00ns,5.13us,126.00ns,4.94us,10.70us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,587296,4.73s,5.03us,0.00ns,5.08us,123.00ns,4.93us,35.06us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,130219,4.57s,22.98us,0.00ns,23.00us,182.00ns,22.73us,30.60us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,25833,4.56s,115.37us,0.00ns,116.10us,3.69us,115.26us,146.72us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,353134,4.82s,8.13us,0.00ns,8.16us,129.00ns,8.00us,17.09us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,578862,4.83s,5.19us,0.00ns,5.15us,115.00ns,4.96us,25.61us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,589824,4.83s,4.98us,0.00ns,5.05us,129.00ns,4.89us,13.60us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,574787,4.73s,5.15us,0.00ns,5.19us,116.00ns,5.05us,11.70us\nmemchr/sherlock/rare/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,575937,4.78s,5.17us,0.00ns,5.18us,86.00ns,5.07us,12.65us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,383289,4.72s,7.78us,0.00ns,7.79us,113.00ns,7.61us,15.97us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,70081,4.56s,42.83us,0.00ns,42.77us,811.00ns,41.49us,70.38us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,17083,4.51s,175.82us,0.00ns,175.58us,1.19us,173.73us,211.08us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,212562,4.72s,13.50us,0.00ns,13.78us,480.00ns,13.13us,29.83us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,320339,4.67s,9.21us,0.00ns,9.33us,370.00ns,9.08us,14.88us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,387952,4.74s,7.69us,0.00ns,7.70us,109.00ns,7.61us,16.18us\nmemchr/sherlock/rare/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,333785,4.72s,8.95us,0.00ns,8.96us,236.00ns,7.54us,15.80us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,279372,4.67s,10.68us,0.00ns,10.70us,140.00ns,10.56us,36.00us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,47734,4.57s,62.04us,0.00ns,62.81us,2.48us,59.55us,83.56us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,12926,4.52s,231.68us,0.00ns,232.07us,1.52us,231.57us,279.66us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,157770,4.67s,18.56us,0.00ns,18.68us,302.00ns,18.44us,39.72us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,276213,4.62s,10.81us,0.00ns,10.83us,118.00ns,10.73us,16.50us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,276046,4.67s,10.79us,0.00ns,10.83us,219.00ns,10.69us,17.54us\nmemchr/sherlock/rare/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,234539,4.67s,12.10us,0.00ns,12.76us,936.00ns,11.98us,20.74us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,526.69ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,2.24us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,1.48s,169.00ns,0.00ns,170.00ns,9.00ns,164.00ns,2.24us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,527.02ms,19.00ns,0.00ns,19.00ns,9.00ns,17.00ns,5.82us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,526.84ms,19.00ns,0.00ns,19.00ns,5.00ns,16.00ns,1.94us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,526.56ms,37.00ns,0.00ns,37.00ns,7.00ns,33.00ns,2.74us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,778.87ms,153.00ns,0.00ns,153.00ns,11.00ns,147.00ns,2.20us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.53s,169.00ns,0.00ns,170.00ns,13.00ns,165.00ns,5.15us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,527.10ms,20.00ns,0.00ns,20.00ns,5.00ns,17.00ns,2.30us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,476.59ms,18.00ns,0.00ns,19.00ns,13.00ns,16.00ns,12.09us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,526.69ms,19.00ns,0.00ns,19.00ns,29.00ns,17.00ns,22.28us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,778.03ms,153.00ns,0.00ns,153.00ns,11.00ns,146.00ns,2.08us\nmemchr/sherlock/rare/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,526.77ms,20.00ns,0.00ns,20.00ns,21.00ns,17.00ns,20.25us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,526.97ms,28.00ns,0.00ns,28.00ns,5.00ns,25.00ns,2.09us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,577.37ms,66.00ns,0.00ns,65.00ns,19.00ns,54.00ns,15.05us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,929.05ms,226.00ns,0.00ns,227.00ns,16.00ns,216.00ns,7.71us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.48s,171.00ns,0.00ns,172.00ns,11.00ns,164.00ns,4.30us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,527.35ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,1.99us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,527.08ms,29.00ns,0.00ns,29.00ns,21.00ns,26.00ns,13.87us\nmemchr/sherlock/rare/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,527.11ms,28.00ns,0.00ns,28.00ns,16.00ns,25.00ns,14.67us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,526.93ms,37.00ns,0.00ns,37.00ns,8.00ns,33.00ns,5.24us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,627.03ms,91.00ns,0.00ns,91.00ns,9.00ns,75.00ns,2.28us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.08s,285.00ns,0.00ns,286.00ns,16.00ns,280.00ns,2.57us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.53s,184.00ns,0.00ns,185.00ns,10.00ns,177.00ns,2.01us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,527.07ms,37.00ns,0.00ns,38.00ns,10.00ns,34.00ns,7.68us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,576.87ms,37.00ns,0.00ns,37.00ns,7.00ns,33.00ns,2.02us\nmemchr/sherlock/rare/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,576.98ms,37.00ns,0.00ns,37.00ns,10.00ns,33.00ns,7.46us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,69,1000000,476.87ms,17.00ns,0.00ns,17.00ns,5.00ns,15.00ns,3.55us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,69,1000000,1.48s,163.00ns,0.00ns,164.00ns,16.00ns,160.00ns,9.22us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,527.24ms,17.00ns,0.00ns,17.00ns,4.00ns,15.00ns,1.99us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,526.63ms,16.00ns,0.00ns,16.00ns,6.00ns,14.00ns,2.71us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,526.81ms,16.00ns,0.00ns,16.00ns,3.00ns,13.00ns,1.82us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,526.50ms,29.00ns,0.00ns,29.00ns,5.00ns,21.00ns,2.21us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.48s,155.00ns,0.00ns,156.00ns,14.00ns,151.00ns,7.59us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,526.59ms,14.00ns,0.00ns,14.00ns,3.00ns,12.00ns,1.90us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,526.50ms,16.00ns,0.00ns,16.00ns,7.00ns,14.00ns,5.91us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,526.61ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,2.22us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,527.03ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.04us\nmemchr/sherlock/rare/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,527.07ms,14.00ns,0.00ns,14.00ns,14.00ns,12.00ns,12.68us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,527.07ms,20.00ns,0.00ns,20.00ns,5.00ns,19.00ns,2.26us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,526.73ms,19.00ns,0.00ns,19.00ns,4.00ns,17.00ns,2.31us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,576.65ms,38.00ns,0.00ns,37.00ns,13.00ns,28.00ns,11.34us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.48s,165.00ns,0.00ns,166.00ns,14.00ns,160.00ns,10.52us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,526.51ms,20.00ns,0.00ns,20.00ns,4.00ns,18.00ns,2.38us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,527.07ms,20.00ns,0.00ns,20.00ns,4.00ns,18.00ns,2.44us\nmemchr/sherlock/rare/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,526.70ms,18.00ns,0.00ns,18.00ns,27.00ns,16.00ns,19.69us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,527.31ms,29.00ns,0.00ns,29.00ns,20.00ns,27.00ns,18.81us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,526.90ms,23.00ns,0.00ns,23.00ns,8.00ns,21.00ns,5.80us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,576.62ms,43.00ns,0.00ns,43.00ns,15.00ns,34.00ns,13.85us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.48s,166.00ns,0.00ns,167.00ns,89.00ns,158.00ns,87.82us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,476.39ms,25.00ns,0.00ns,25.00ns,6.00ns,21.00ns,2.35us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,527.03ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,3.39us\nmemchr/sherlock/rare/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,527.07ms,21.00ns,0.00ns,21.00ns,5.00ns,19.00ns,2.14us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,594933,313372,4.67s,9.35us,0.00ns,9.54us,414.00ns,9.26us,15.91us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,266186,4.77s,10.93us,0.00ns,10.94us,95.00ns,10.89us,16.92us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,52573,4.56s,56.93us,0.00ns,57.03us,581.00ns,55.79us,76.63us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,52979,4.56s,56.37us,0.00ns,56.59us,625.00ns,55.45us,75.14us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,33531,4.56s,90.48us,0.00ns,89.43us,2.17us,84.59us,110.75us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,19001,4.51s,158.25us,0.00ns,157.85us,1.54us,154.90us,192.47us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,50647,4.56s,58.07us,0.00ns,58.91us,1.67us,56.46us,71.41us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,51644,4.56s,58.04us,0.00ns,58.05us,1.29us,56.58us,81.47us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,65442,4.57s,45.69us,0.00ns,45.81us,649.00ns,44.80us,68.26us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,65432,4.57s,45.55us,1.00ns,45.81us,855.00ns,44.53us,69.20us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,18948,4.52s,156.10us,0.00ns,158.29us,4.86us,154.41us,196.31us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,58013,4.57s,51.67us,0.00ns,51.68us,501.00ns,50.65us,69.59us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,594933,24036,4.52s,127.79us,0.00ns,124.78us,5.60us,117.65us,151.34us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,594933,15917,4.51s,186.59us,0.00ns,188.45us,2.93us,185.37us,233.31us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,594933,11063,4.51s,276.48us,0.00ns,271.15us,13.00us,251.73us,360.97us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,594933,21705,4.56s,137.71us,0.00ns,137.90us,1.02us,135.77us,148.51us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,594933,23790,4.56s,125.93us,0.00ns,126.07us,777.00ns,123.90us,145.47us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,594933,26823,4.56s,111.61us,0.00ns,111.81us,684.00ns,110.56us,134.21us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,594933,26246,4.56s,114.02us,0.00ns,114.27us,1.14us,112.56us,138.57us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,594933,17915,4.51s,173.28us,0.00ns,167.43us,8.65us,156.26us,189.79us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,594933,9761,4.51s,306.01us,0.00ns,307.32us,3.25us,301.18us,358.40us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,594933,8525,4.51s,349.38us,0.00ns,351.91us,7.87us,348.06us,402.59us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,594933,15915,4.56s,187.17us,0.00ns,188.18us,3.60us,182.79us,209.15us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,594933,18142,4.51s,164.07us,0.00ns,165.33us,3.00us,162.48us,182.20us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,594933,20464,4.51s,145.94us,0.00ns,146.57us,2.28us,142.86us,167.33us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,594933,19984,4.51s,149.73us,0.00ns,150.09us,1.32us,148.27us,173.99us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,527.17ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,3.17us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,1.48s,166.00ns,0.00ns,167.00ns,16.00ns,161.00ns,10.41us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,577.63ms,47.00ns,0.00ns,47.00ns,7.00ns,43.00ns,2.23us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,527.00ms,45.00ns,0.00ns,45.00ns,6.00ns,42.00ns,2.18us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,577.23ms,58.00ns,0.00ns,58.00ns,7.00ns,53.00ns,1.91us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,778.36ms,158.00ns,0.00ns,161.00ns,14.00ns,151.00ns,4.10us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,1.58s,198.00ns,0.00ns,197.00ns,13.00ns,185.00ns,2.24us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,576.93ms,48.00ns,0.00ns,48.00ns,9.00ns,45.00ns,6.67us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,527.24ms,44.00ns,0.00ns,44.00ns,6.00ns,40.00ns,2.10us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,577.30ms,44.00ns,0.00ns,44.00ns,10.00ns,41.00ns,7.55us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,779.01ms,157.00ns,0.00ns,160.00ns,13.00ns,145.00ns,2.15us\nmemchr/sherlock/uncommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,577.13ms,50.00ns,0.00ns,50.00ns,6.00ns,46.00ns,2.36us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,664,1000000,629.06ms,76.00ns,0.00ns,77.00ns,19.00ns,71.00ns,15.70us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,664,1000000,628.59ms,89.00ns,0.00ns,89.00ns,9.00ns,81.00ns,2.29us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,664,1000000,930.62ms,262.00ns,0.00ns,247.00ns,38.00ns,198.00ns,21.06us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,664,1000000,1.59s,223.00ns,0.00ns,224.00ns,14.00ns,214.00ns,2.57us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,664,1000000,628.96ms,87.00ns,0.00ns,87.00ns,14.00ns,81.00ns,11.08us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,664,1000000,679.41ms,98.00ns,0.00ns,98.00ns,9.00ns,90.00ns,2.05us\nmemchr/sherlock/uncommon/small2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,664,1000000,629.14ms,89.00ns,0.00ns,89.00ns,8.00ns,83.00ns,2.35us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,664,1000000,680.15ms,122.00ns,0.00ns,123.00ns,13.00ns,115.00ns,8.16us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,664,1000000,729.77ms,135.00ns,0.00ns,135.00ns,10.00ns,125.00ns,2.48us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,664,1000000,1.03s,264.00ns,0.00ns,265.00ns,14.00ns,260.00ns,2.43us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,664,1000000,1.68s,268.00ns,0.00ns,269.00ns,13.00ns,257.00ns,3.12us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,664,1000000,729.57ms,135.00ns,0.00ns,135.00ns,13.00ns,129.00ns,6.95us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,664,1000000,780.10ms,138.00ns,0.00ns,138.00ns,10.00ns,130.00ns,2.10us\nmemchr/sherlock/uncommon/small3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,664,1000000,729.98ms,136.00ns,0.00ns,137.00ns,10.00ns,129.00ns,2.37us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,69,1000000,527.19ms,17.00ns,0.00ns,17.00ns,5.00ns,15.00ns,2.98us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,69,1000000,1.48s,159.00ns,0.00ns,160.00ns,11.00ns,155.00ns,2.02us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,69,1000000,527.46ms,30.00ns,0.00ns,30.00ns,6.00ns,28.00ns,2.73us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,69,1000000,527.06ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,2.17us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,69,1000000,627.22ms,22.00ns,0.00ns,22.00ns,6.00ns,19.00ns,2.55us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,69,1000000,527.00ms,24.00ns,0.00ns,24.00ns,4.00ns,21.00ns,1.85us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,69,1000000,1.48s,165.00ns,0.00ns,166.00ns,15.00ns,159.00ns,10.10us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,69,1000000,527.25ms,31.00ns,0.00ns,31.00ns,5.00ns,29.00ns,2.08us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,526.83ms,28.00ns,0.00ns,28.00ns,18.00ns,26.00ns,17.27us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,527.21ms,28.00ns,0.00ns,28.00ns,16.00ns,26.00ns,11.91us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,69,1000000,526.92ms,24.00ns,0.00ns,25.00ns,26.00ns,22.00ns,15.32us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,69,1000000,577.59ms,32.00ns,0.00ns,32.00ns,6.00ns,29.00ns,2.20us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2,2.5.0,,69,1000000,578.36ms,51.00ns,0.00ns,51.00ns,8.00ns,48.00ns,3.97us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/fallback,2.5.0,,69,1000000,529.14ms,33.00ns,0.00ns,33.00ns,6.00ns,29.00ns,2.02us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/naive,2.5.0,,69,1000000,528.42ms,33.00ns,0.00ns,33.00ns,7.00ns,27.00ns,2.54us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr2/wasm32,2.5.0,,69,1000000,1.53s,182.00ns,0.00ns,183.00ns,11.00ns,176.00ns,2.80us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr2,2.5.0,,69,1000000,578.60ms,49.00ns,0.00ns,50.00ns,7.00ns,47.00ns,2.37us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr2,2.5.0,,69,1000000,628.81ms,56.00ns,0.00ns,56.00ns,7.00ns,52.00ns,1.98us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr2,2.5.0,,69,1000000,578.48ms,52.00ns,0.00ns,53.00ns,18.00ns,48.00ns,14.94us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3,2.5.0,,69,1000000,628.94ms,68.00ns,0.00ns,69.00ns,8.00ns,64.00ns,2.08us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/fallback,2.5.0,,69,1000000,679.63ms,46.00ns,0.00ns,46.00ns,9.00ns,41.00ns,4.76us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/naive,2.5.0,,69,1000000,528.87ms,35.00ns,0.00ns,36.00ns,20.00ns,33.00ns,14.54us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr3/wasm32,2.5.0,,69,1000000,1.64s,213.00ns,0.00ns,214.00ns,11.00ns,206.00ns,2.31us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr3,2.5.0,,69,1000000,678.96ms,92.00ns,0.00ns,92.00ns,15.00ns,88.00ns,12.77us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr3,2.5.0,,69,1000000,579.05ms,69.00ns,0.00ns,69.00ns,8.00ns,64.00ns,2.48us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr3,2.5.0,,69,1000000,628.55ms,80.00ns,0.00ns,80.00ns,8.00ns,73.00ns,2.01us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,594933,306448,4.67s,10.00us,0.00ns,9.76us,373.00ns,9.25us,18.96us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,594933,265274,4.77s,10.94us,0.00ns,10.96us,162.00ns,10.90us,34.51us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,594933,7602,4.51s,392.35us,0.00ns,394.63us,6.05us,391.37us,422.69us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,594933,8406,4.51s,356.66us,0.00ns,356.88us,1.01us,355.31us,378.53us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,594933,3721,4.51s,806.11us,0.00ns,806.22us,5.48us,791.56us,859.13us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,594933,3802,4.51s,789.31us,1.00ns,789.08us,5.30us,767.13us,837.18us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,594933,9155,4.56s,332.74us,0.00ns,327.39us,10.39us,308.64us,346.75us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,594933,7626,4.51s,393.28us,0.00ns,393.40us,388.00ns,393.16us,400.35us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,594933,8496,4.51s,352.87us,0.00ns,353.08us,1.48us,349.00us,365.33us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,594933,8429,4.51s,350.48us,0.00ns,355.89us,10.47us,347.50us,384.63us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,594933,3802,4.51s,788.61us,1.00ns,789.09us,5.40us,752.58us,829.74us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,594933,7401,4.51s,404.90us,0.00ns,405.34us,1.23us,404.58us,419.05us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount,2.5.0,,664,1000000,529.89ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.20us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/onlycount/wasm32,2.5.0,,664,1000000,1.48s,165.00ns,0.00ns,166.00ns,12.00ns,161.00ns,1.98us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/oneshot,2.5.0,,664,1000000,1.38s,434.00ns,0.00ns,434.00ns,14.00ns,430.00ns,5.55us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/prebuilt,2.5.0,,664,1000000,1.23s,393.00ns,0.00ns,394.00ns,29.00ns,389.00ns,21.72us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/fallback,2.5.0,,664,1000000,1.03s,240.00ns,0.00ns,246.00ns,17.00ns,235.00ns,2.40us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/naive,2.5.0,,664,1000000,882.34ms,219.00ns,0.00ns,220.00ns,17.00ns,198.00ns,9.68us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memchr/wasm32,2.5.0,,664,1000000,2.14s,484.00ns,0.00ns,485.00ns,21.00ns,477.00ns,8.31us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchr/memrchr,2.5.0,,664,1000000,1.33s,426.00ns,0.00ns,427.00ns,18.00ns,423.00ns,5.34us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.28s,394.00ns,0.00ns,395.00ns,17.00ns,390.00ns,4.14us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.33s,400.00ns,0.00ns,401.00ns,19.00ns,393.00ns,8.68us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memchr/naive,2.5.0,,664,1000000,932.27ms,212.00ns,0.00ns,212.00ns,14.00ns,203.00ns,2.54us\nmemchr/sherlock/verycommon/small1,count-bytes,0.0.1 (rev 8c6edf6843),rust/memchrold/memrchr,2.5.0,,664,1000000,1.38s,450.00ns,0.00ns,451.00ns,21.00ns,445.00ns,8.46us\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,33335253,427,4.56s,7.02ms,0.00ns,7.04ms,70.59us,6.95ms,7.52ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,33335253,426,4.56s,7.04ms,50.00ns,7.05ms,42.10us,6.93ms,7.21ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/binary,2.5.0,,33335253,3231,4.56s,926.33us,0.00ns,928.53us,13.98us,895.26us,1.04ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,33335253,284,4.56s,10.68ms,1.21us,10.57ms,250.76us,9.94ms,10.87ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,33335253,144,4.56s,20.93ms,3.00ns,20.86ms,144.33us,20.61ms,21.12ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,33335253,219,4.56s,13.73ms,0.00ns,13.74ms,38.28us,13.69ms,13.88ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,33335253,319,4.56s,9.40ms,0.00ns,9.43ms,102.44us,9.31ms,9.85ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,33335253,444,4.56s,6.74ms,16.00ns,6.76ms,94.86us,6.68ms,7.24ms\nmemmem/byterank/binary,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,33335253,444,4.56s,6.76ms,76.00ns,6.76ms,24.76us,6.72ms,6.94ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,105608,4.57s,28.32us,0.00ns,28.37us,301.00ns,28.06us,34.40us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,79234,4.56s,40.75us,0.00ns,37.82us,5.31us,28.28us,64.81us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3121,4.51s,0.96ms,0.00ns,0.96ms,6.22us,948.16us,0.99ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2952,4.51s,1.02ms,0.00ns,1.02ms,3.04us,1.01ms,1.08ms\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4541,4.51s,659.99us,0.00ns,660.72us,6.49us,652.02us,715.84us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,54103,4.56s,55.17us,0.00ns,55.10us,2.20us,51.88us,83.52us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,82580,4.56s,36.20us,0.00ns,36.28us,400.00ns,36.01us,59.27us\nmemmem/code/rust-library-never-fn-strength,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,82629,4.56s,36.21us,0.00ns,36.26us,306.00ns,35.98us,42.69us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,104255,4.57s,28.68us,0.00ns,28.73us,321.00ns,28.38us,51.27us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,82799,4.56s,40.84us,0.00ns,36.19us,6.00us,28.38us,54.57us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3380,4.51s,890.11us,6.00ns,887.68us,11.46us,867.71us,941.37us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2954,4.51s,1.01ms,1.00ns,1.02ms,4.49us,1.01ms,1.07ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4538,4.51s,659.93us,0.00ns,661.12us,7.19us,651.97us,728.30us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,54100,4.56s,54.04us,0.00ns,55.12us,2.34us,52.61us,67.90us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,79613,4.56s,37.57us,0.00ns,37.64us,339.00ns,37.37us,46.36us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,79665,4.56s,37.55us,0.00ns,37.61us,317.00ns,37.35us,45.11us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,102088,4.57s,27.30us,0.00ns,29.34us,4.67us,26.80us,138.97us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,108774,4.57s,27.55us,0.00ns,27.54us,275.00ns,27.11us,51.59us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3444,4.51s,870.96us,1.00ns,871.10us,1.84us,866.12us,883.83us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2949,4.51s,1.02ms,0.00ns,1.02ms,5.30us,1.01ms,1.06ms\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4460,4.51s,672.84us,1.00ns,672.69us,5.97us,664.86us,724.54us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,55636,4.56s,52.88us,0.00ns,53.58us,2.79us,50.43us,72.42us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,78728,4.56s,38.00us,0.00ns,38.06us,317.00ns,37.81us,44.89us\nmemmem/code/rust-library-never-fn-quux,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,76014,4.56s,39.68us,0.00ns,39.43us,791.00ns,37.64us,63.36us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,84207,4.56s,40.85us,0.00ns,35.59us,6.05us,28.53us,52.10us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,90544,4.57s,28.65us,0.00ns,33.09us,5.87us,28.33us,68.50us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3502,4.51s,851.65us,6.00ns,856.76us,10.73us,844.21us,915.25us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2963,4.51s,1.01ms,0.00ns,1.01ms,2.86us,1.01ms,1.05ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,50782,4.56s,59.59us,0.00ns,58.74us,3.24us,53.30us,68.64us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,79546,4.56s,37.63us,0.00ns,37.67us,268.00ns,37.43us,44.61us\nmemmem/code/rust-library-rare-fn-from-str,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,78562,4.56s,38.11us,0.00ns,38.14us,239.00ns,37.89us,44.11us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,100193,4.57s,29.87us,0.00ns,29.90us,280.00ns,29.53us,46.89us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,88076,4.56s,29.08us,0.00ns,34.01us,5.95us,28.66us,66.54us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3302,4.51s,902.74us,3.00ns,908.58us,12.37us,892.98us,0.97ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2960,4.51s,1.01ms,0.00ns,1.01ms,3.87us,1.01ms,1.04ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4541,4.51s,658.14us,0.00ns,660.75us,8.37us,654.74us,708.39us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,50962,4.56s,58.57us,0.00ns,58.53us,2.44us,53.12us,77.30us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,78237,4.56s,38.24us,0.00ns,38.30us,312.00ns,38.02us,53.36us\nmemmem/code/rust-library-common-fn-is-empty,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,75764,4.56s,40.04us,0.00ns,39.55us,0.98us,37.72us,47.24us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,26358,4.56s,118.06us,0.00ns,113.78us,5.27us,107.28us,135.37us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,51826,4.56s,54.16us,0.00ns,57.85us,5.65us,52.65us,79.56us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3634,4.51s,824.73us,0.00ns,825.67us,6.76us,812.00us,859.70us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2759,4.51s,1.09ms,0.00ns,1.09ms,3.78us,1.08ms,1.13ms\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4407,4.51s,680.96us,0.00ns,680.78us,3.39us,674.76us,731.08us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,28608,4.56s,103.16us,0.00ns,104.49us,5.84us,102.08us,156.38us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,31110,4.56s,96.52us,0.00ns,96.39us,765.00ns,93.94us,111.98us\nmemmem/code/rust-library-common-fn,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,43782,4.56s,70.65us,0.00ns,68.47us,3.46us,62.04us,96.80us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,5914,4.51s,507.04us,3.00ns,507.27us,2.90us,502.31us,531.80us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,9431,4.51s,315.81us,0.00ns,318.07us,4.69us,311.63us,345.19us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,2491,4.51s,1.19ms,0.00ns,1.20ms,32.04us,1.18ms,1.32ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2415,4.51s,1.24ms,0.00ns,1.24ms,4.06us,1.23ms,1.31ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,3361,4.51s,894.30us,0.00ns,892.78us,17.46us,844.65us,0.99ms\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,6095,4.56s,491.45us,0.00ns,491.90us,5.79us,477.89us,517.20us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,6058,4.51s,495.77us,1.00ns,495.21us,3.64us,484.01us,526.94us\nmemmem/code/rust-library-common-paren,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,10301,4.51s,293.83us,0.00ns,291.22us,5.74us,280.49us,319.86us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1648109,16387,4.51s,180.83us,0.00ns,183.04us,4.56us,177.28us,220.02us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1648109,37360,4.56s,78.15us,0.00ns,80.26us,4.45us,76.00us,109.81us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1648109,3031,4.51s,0.99ms,0.00ns,0.99ms,5.04us,0.98ms,1.05ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1648109,2680,4.51s,1.12ms,0.00ns,1.12ms,8.96us,1.11ms,1.17ms\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1648109,4347,4.51s,688.44us,0.00ns,690.25us,3.59us,687.50us,718.72us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1648109,20728,4.56s,142.28us,0.00ns,144.36us,6.79us,140.84us,209.59us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1648109,20611,4.56s,146.00us,0.00ns,145.52us,1.59us,141.54us,166.41us\nmemmem/code/rust-library-common-let,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,31426,4.56s,95.21us,0.00ns,95.40us,3.76us,89.02us,111.44us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,959886,4.89s,2.95us,0.00ns,3.09us,274.00ns,2.73us,16.02us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,1000000,4.84s,2.80us,0.00ns,2.80us,54.00ns,2.59us,11.05us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,151305,302838,4.62s,9.86us,0.00ns,9.87us,100.00ns,9.77us,16.43us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,151305,32213,4.56s,93.06us,0.00ns,93.10us,376.00ns,92.67us,112.61us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,151305,356925,4.82s,8.04us,0.00ns,8.07us,521.00ns,6.70us,23.04us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,151305,875205,4.99s,3.37us,0.00ns,3.40us,57.00ns,3.31us,8.01us\nmemmem/pathological/md5-huge-no-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,151305,886620,4.89s,3.35us,0.00ns,3.35us,60.00ns,3.28us,30.05us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,151305,994461,4.99s,2.99us,0.00ns,2.99us,64.00ns,2.73us,11.46us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,151305,906068,4.89s,3.44us,0.00ns,3.28us,258.00ns,2.71us,12.24us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,151305,317414,4.67s,9.31us,0.00ns,9.42us,675.00ns,8.40us,20.16us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,151305,32201,4.56s,93.05us,0.00ns,93.13us,721.00ns,92.66us,114.61us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,151305,360550,4.82s,7.98us,0.00ns,7.99us,406.00ns,6.83us,14.70us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,151305,889248,4.94s,3.33us,0.00ns,3.34us,50.00ns,3.25us,9.80us\nmemmem/pathological/md5-huge-last-hash,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,151305,886976,4.99s,3.36us,0.00ns,3.35us,66.00ns,3.23us,11.17us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,345515,4.67s,7.38us,0.00ns,8.65us,1.96us,7.07us,32.11us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,379758,4.72s,7.35us,0.00ns,7.87us,1.41us,7.05us,14.77us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,500100,13677,4.51s,216.31us,0.00ns,219.32us,18.10us,208.28us,342.06us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,500100,9744,4.51s,307.74us,0.00ns,307.86us,1.20us,305.67us,341.03us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,500100,14980,4.51s,200.22us,0.00ns,200.24us,3.84us,197.73us,244.94us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,500100,186669,4.67s,15.29us,0.00ns,15.73us,600.00ns,15.22us,41.48us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,500100,258079,4.67s,11.71us,0.00ns,11.59us,200.00ns,11.28us,23.96us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,500100,262484,4.67s,11.38us,0.00ns,11.40us,121.00ns,11.27us,35.42us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,500100,1805,4.51s,1.65ms,0.00ns,1.66ms,16.18us,1.65ms,1.72ms\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,500100,11128,4.51s,257.26us,0.00ns,269.56us,27.47us,252.48us,355.47us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,500100,14870,4.51s,198.93us,0.00ns,201.73us,11.12us,198.20us,306.67us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,500100,13259,4.51s,221.13us,0.00ns,226.23us,7.20us,221.08us,294.10us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,500100,14478,4.51s,206.75us,0.00ns,207.18us,2.31us,206.62us,252.38us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,500100,7023,4.56s,411.96us,0.00ns,426.87us,24.94us,397.69us,530.43us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,500100,3296,4.51s,908.18us,1.00ns,910.27us,5.98us,904.09us,949.62us\nmemmem/pathological/rare-repeated-huge-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,500100,9703,4.51s,302.85us,0.00ns,309.17us,14.12us,286.21us,366.42us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,1000000,627.09ms,61.00ns,0.00ns,62.00ns,7.00ns,57.00ns,1.90us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,577.26ms,36.00ns,0.00ns,36.00ns,6.00ns,29.00ns,2.10us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.48s,448.00ns,0.00ns,449.00ns,20.00ns,443.00ns,4.94us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.73s,624.00ns,0.00ns,625.00ns,25.00ns,609.00ns,7.86us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.28s,411.00ns,0.00ns,411.00ns,23.00ns,401.00ns,12.06us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1001,1000000,1.58s,208.00ns,0.00ns,210.00ns,12.00ns,199.00ns,2.33us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1001,1000000,576.92ms,45.00ns,0.00ns,46.00ns,9.00ns,41.00ns,5.16us\nmemmem/pathological/rare-repeated-small-tricky,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,526.92ms,41.00ns,0.00ns,43.00ns,7.00ns,37.00ns,1.99us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,1001,929383,4.89s,3.19us,0.00ns,3.20us,68.00ns,3.08us,22.42us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1001,1000000,1.59s,527.00ns,0.00ns,540.00ns,46.00ns,488.00ns,8.54us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,1001,1000000,1.33s,417.00ns,0.00ns,418.00ns,19.00ns,412.00ns,2.09us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,1001,1000000,1.43s,452.00ns,0.00ns,459.00ns,32.00ns,447.00ns,14.09us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,1001,1000000,1.33s,433.00ns,0.00ns,434.00ns,15.00ns,426.00ns,5.81us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,1001,1000000,3.24s,1.00us,0.00ns,1.03us,65.00ns,936.00ns,10.94us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,1001,1000000,3.74s,1.75us,0.00ns,1.76us,39.00ns,1.73us,10.88us\nmemmem/pathological/rare-repeated-small-match,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,1.73s,650.00ns,0.00ns,649.00ns,28.00ns,601.00ns,2.63us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,550004,23576,4.51s,125.99us,0.00ns,127.22us,3.82us,124.40us,147.60us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,550004,23834,4.56s,125.77us,0.00ns,125.84us,587.00ns,124.12us,131.69us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,550004,37683,4.56s,81.17us,0.00ns,79.57us,2.73us,74.98us,98.56us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,550004,8863,4.51s,338.33us,0.00ns,338.48us,1.35us,336.08us,380.57us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,550004,13669,4.51s,219.24us,0.00ns,219.44us,2.22us,217.47us,269.55us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,550004,16322,4.56s,184.43us,0.00ns,183.48us,15.00us,169.12us,250.29us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,550004,23178,4.56s,124.62us,0.00ns,129.40us,7.94us,122.77us,161.01us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,550004,23477,4.56s,123.90us,0.00ns,127.75us,7.77us,122.74us,157.46us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,85142,4.56s,35.15us,0.00ns,35.20us,298.00ns,35.10us,51.49us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,85701,4.56s,34.89us,0.00ns,34.96us,330.00ns,34.82us,42.76us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,720057,99810,4.57s,29.94us,0.00ns,30.02us,387.00ns,29.89us,36.36us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,720057,6756,4.51s,443.78us,0.00ns,444.07us,1.01us,441.36us,471.30us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,720057,41992,4.56s,70.17us,4.00ns,71.12us,9.39us,61.73us,95.97us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,720057,78154,4.56s,38.29us,0.00ns,38.35us,345.00ns,38.23us,49.23us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,720057,78455,4.56s,38.15us,0.00ns,38.20us,272.00ns,38.12us,47.11us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,720057,5400,4.51s,554.38us,0.00ns,555.61us,8.31us,554.33us,807.35us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,720057,5402,4.51s,554.57us,0.00ns,555.40us,4.67us,553.82us,694.94us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,720057,6158,4.51s,486.77us,1.00ns,487.19us,2.52us,462.67us,553.64us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,720057,6761,4.51s,442.92us,0.00ns,443.71us,2.74us,441.21us,570.01us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,720057,2541,4.51s,1.18ms,0.00ns,1.18ms,9.21us,1.18ms,1.25ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,720057,4795,4.51s,624.70us,0.00ns,625.63us,2.15us,608.52us,648.57us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,720057,4804,4.51s,623.64us,0.00ns,624.46us,2.23us,604.74us,642.65us\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,,460,4.56s,6.53ms,15.00ns,6.53ms,17.51us,6.48ms,6.59ms\nmemmem/sliceslice/short,needles-in-needles,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,,204,4.56s,14.65ms,379.00ns,14.77ms,353.85us,14.57ms,17.54ms\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,1000,35373,4.56s,84.38us,0.00ns,84.77us,1.13us,83.69us,100.23us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,1000,28573,4.56s,104.83us,0.00ns,104.96us,838.00ns,100.35us,112.79us\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,806771,173,4.56s,19.26ms,0.00ns,17.38ms,2.59ms,13.78ms,19.30ms\nmemmem/sliceslice/i386,needles-in-haystack,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,806771,166,4.56s,18.58ms,37.00ns,18.17ms,445.99us,17.68ms,18.62ms\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,82028,4.57s,35.69us,0.00ns,36.54us,1.23us,35.26us,44.31us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,187445,4.62s,15.53us,0.00ns,15.97us,0.99us,15.17us,37.99us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,13788,4.51s,217.65us,0.00ns,217.55us,4.99us,201.53us,265.70us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7765,4.51s,386.04us,0.00ns,386.32us,1.28us,385.03us,428.58us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,11935,4.51s,251.60us,0.00ns,251.34us,1.44us,249.73us,297.64us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,58326,4.61s,50.81us,0.00ns,51.08us,2.20us,45.23us,71.84us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,107186,4.57s,27.71us,0.00ns,27.95us,505.00ns,27.43us,43.17us\nmemmem/subtitles/common/huge-en-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,171388,4.62s,16.94us,0.00ns,17.47us,840.00ns,16.55us,87.03us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,18745,4.51s,159.33us,0.00ns,160.01us,2.89us,157.23us,194.14us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,79845,4.56s,36.77us,0.00ns,37.54us,2.32us,35.65us,60.38us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,11615,4.51s,258.60us,0.00ns,258.25us,5.99us,238.23us,297.80us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7329,4.51s,409.00us,0.00ns,409.31us,1.48us,406.05us,444.02us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,10677,4.51s,278.44us,0.00ns,280.96us,4.15us,273.17us,323.86us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,32814,4.56s,90.76us,0.00ns,91.07us,3.46us,84.70us,121.81us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,27766,4.56s,107.54us,1.00ns,108.01us,1.86us,105.18us,130.60us\nmemmem/subtitles/common/huge-en-you,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,56811,4.56s,52.34us,0.00ns,52.77us,1.67us,49.11us,69.34us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,2778,4.51s,1.08ms,9.00ns,1.08ms,4.36us,1.08ms,1.17ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,6820,4.51s,436.85us,0.00ns,439.91us,17.43us,435.72us,551.33us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,3257,4.51s,912.44us,0.00ns,921.24us,21.66us,881.52us,1.01ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,2860,4.51s,1.05ms,0.00ns,1.05ms,6.11us,1.03ms,1.12ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,3024,4.51s,0.99ms,2.00ns,0.99ms,15.40us,845.55us,1.08ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,4685,4.56s,639.38us,0.00ns,640.09us,9.64us,616.14us,666.34us\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,3039,4.51s,0.99ms,0.00ns,0.99ms,3.17us,0.98ms,1.00ms\nmemmem/subtitles/common/huge-en-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,7584,4.51s,388.94us,1.00ns,395.56us,17.66us,385.25us,505.73us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,60934,4.56s,48.89us,0.00ns,49.20us,915.00ns,48.17us,59.92us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,191635,4.62s,15.40us,0.00ns,15.62us,476.00ns,14.89us,24.74us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,6849,4.51s,437.83us,0.00ns,438.04us,1.44us,436.04us,483.25us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7786,4.51s,385.11us,0.00ns,385.29us,1.42us,382.90us,430.87us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,11884,4.51s,252.74us,0.00ns,252.41us,1.30us,250.62us,294.63us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,79760,4.62s,36.96us,0.00ns,37.26us,1.46us,34.55us,51.78us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,91450,4.57s,32.72us,0.00ns,32.77us,268.00ns,32.22us,37.45us\nmemmem/subtitles/common/huge-ru-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,153874,4.62s,19.31us,0.00ns,19.46us,524.00ns,18.71us,29.09us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,26194,4.56s,113.90us,0.00ns,114.50us,2.23us,111.92us,140.29us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,78364,4.56s,37.90us,0.00ns,38.25us,1.27us,36.67us,51.21us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,6274,4.51s,478.20us,0.00ns,478.15us,2.06us,473.98us,499.67us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7381,4.51s,405.66us,0.00ns,406.42us,2.43us,403.92us,455.93us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,11122,4.51s,270.96us,0.00ns,269.70us,2.84us,264.57us,300.98us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,43202,4.56s,67.81us,1.00ns,69.09us,4.11us,65.30us,97.44us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,38743,4.56s,77.43us,0.00ns,77.40us,854.00ns,75.75us,91.65us\nmemmem/subtitles/common/huge-ru-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,71319,4.56s,41.62us,0.00ns,42.02us,1.19us,40.26us,53.13us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,5466,4.51s,550.57us,0.00ns,548.88us,4.74us,539.60us,646.61us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,13603,4.51s,218.86us,0.00ns,220.51us,7.60us,218.44us,272.39us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,4746,4.51s,624.96us,3.00ns,632.12us,19.03us,602.68us,689.00us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,4129,4.51s,726.37us,0.00ns,726.67us,4.24us,714.18us,776.26us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,4482,4.51s,683.44us,0.00ns,669.33us,43.85us,536.51us,802.05us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,6536,4.56s,457.81us,0.00ns,458.69us,3.88us,450.25us,485.12us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,6078,4.51s,492.99us,0.00ns,493.56us,1.81us,489.95us,513.32us\nmemmem/subtitles/common/huge-ru-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,14897,4.51s,199.68us,0.00ns,201.36us,8.10us,198.80us,251.90us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,75103,4.56s,39.83us,0.00ns,39.91us,371.00ns,39.29us,48.23us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,142287,4.62s,21.95us,0.00ns,21.05us,2.08us,16.61us,26.34us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,23028,4.56s,130.21us,1.00ns,130.24us,2.00us,127.08us,157.20us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7471,4.51s,401.07us,0.00ns,401.56us,1.55us,399.04us,421.62us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,11880,4.51s,252.61us,5.00ns,252.49us,1.50us,250.98us,300.84us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,81362,4.62s,35.97us,0.00ns,36.52us,2.05us,35.30us,61.52us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,92216,4.57s,32.48us,0.00ns,32.50us,247.00ns,31.88us,38.50us\nmemmem/subtitles/common/huge-zh-that,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,149887,4.62s,19.87us,0.00ns,19.98us,475.00ns,19.20us,44.31us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,32382,4.56s,92.63us,0.00ns,92.61us,1.71us,89.17us,116.72us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,87204,4.57s,33.25us,0.00ns,34.37us,1.90us,32.15us,151.60us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,14125,4.51s,212.07us,0.00ns,212.36us,4.31us,200.87us,258.68us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7469,4.51s,401.24us,0.00ns,401.64us,1.48us,399.88us,444.32us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,11351,4.51s,262.93us,0.00ns,264.27us,2.39us,260.92us,314.35us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,48289,4.56s,60.85us,0.00ns,61.77us,2.98us,59.29us,92.33us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,44161,4.56s,67.93us,0.00ns,67.90us,710.00ns,66.22us,94.99us\nmemmem/subtitles/common/huge-zh-do-not,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,74093,4.56s,39.69us,0.00ns,40.45us,1.52us,36.99us,125.81us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,12295,4.51s,242.28us,0.00ns,243.99us,4.40us,240.01us,350.25us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,24538,4.56s,121.66us,0.00ns,122.23us,2.49us,120.41us,148.19us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,6212,4.51s,477.85us,0.00ns,482.98us,12.76us,467.62us,529.14us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,5955,4.51s,503.22us,0.00ns,503.78us,2.44us,497.16us,556.67us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,7728,4.51s,389.84us,1.00ns,388.18us,10.02us,349.06us,432.24us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,16260,4.56s,183.68us,0.00ns,184.17us,1.68us,181.27us,214.28us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,13041,4.51s,228.96us,0.00ns,230.03us,4.01us,226.36us,260.51us\nmemmem/subtitles/common/huge-zh-one-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,26943,4.56s,110.55us,0.00ns,111.31us,4.14us,106.78us,145.73us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,259448,4.67s,13.76us,0.00ns,11.53us,2.58us,8.69us,18.64us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,334940,4.67s,8.98us,0.00ns,8.93us,152.00ns,8.65us,17.01us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,10650,4.51s,280.03us,1.00ns,281.67us,6.97us,264.61us,303.56us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7937,4.51s,377.73us,0.00ns,377.99us,2.18us,376.16us,423.71us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12230,4.51s,245.60us,0.00ns,245.28us,3.71us,242.59us,294.16us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,152318,4.67s,19.88us,0.00ns,19.36us,694.00ns,18.63us,42.25us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,219187,4.62s,13.73us,0.00ns,13.65us,225.00ns,13.21us,20.72us\nmemmem/subtitles/never/huge-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,218676,4.62s,13.84us,0.00ns,13.69us,265.00ns,13.29us,35.89us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,267792,4.67s,10.88us,0.00ns,11.17us,1.00us,10.60us,20.75us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,267277,4.67s,10.84us,0.00ns,11.19us,1.11us,10.60us,20.26us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,20205,4.51s,147.81us,0.00ns,148.45us,4.35us,134.63us,180.50us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7931,4.51s,377.93us,0.00ns,378.24us,1.33us,376.22us,421.31us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12213,4.51s,245.56us,0.00ns,245.61us,3.81us,242.55us,294.42us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,101270,4.62s,29.19us,0.00ns,29.30us,923.00ns,27.31us,37.97us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,212793,4.62s,14.17us,0.00ns,14.06us,435.00ns,13.49us,23.71us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,216473,4.62s,13.65us,0.00ns,13.82us,315.00ns,13.47us,40.50us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,322954,4.67s,8.99us,0.00ns,9.26us,1.27us,8.67us,19.77us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,334605,4.67s,8.98us,0.00ns,8.93us,140.00ns,8.66us,13.57us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,20134,4.51s,148.77us,0.00ns,148.97us,3.28us,133.18us,182.33us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7931,4.51s,377.96us,0.00ns,378.27us,1.24us,376.80us,395.31us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12193,4.51s,245.53us,0.00ns,246.02us,5.99us,242.51us,294.79us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,151126,4.67s,19.75us,0.00ns,19.52us,760.00ns,18.62us,31.01us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,224334,4.62s,13.31us,0.00ns,13.34us,151.00ns,13.20us,37.18us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,224742,4.67s,13.29us,0.00ns,13.32us,137.00ns,13.18us,18.32us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,334752,4.62s,8.99us,0.00ns,8.93us,139.00ns,8.66us,13.79us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,327017,4.67s,9.19us,0.00ns,9.14us,161.00ns,8.80us,14.39us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,6652,4.51s,448.52us,1.00ns,450.96us,9.63us,427.65us,521.74us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7809,4.51s,383.97us,0.00ns,384.17us,1.69us,381.67us,421.94us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12209,4.51s,245.56us,0.00ns,245.70us,4.28us,242.54us,293.93us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,129156,4.62s,22.35us,0.00ns,22.90us,2.56us,22.30us,43.65us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,219146,4.62s,13.65us,0.00ns,13.66us,113.00ns,13.35us,35.33us\nmemmem/subtitles/never/huge-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,189498,4.62s,15.79us,0.00ns,15.80us,114.00ns,15.65us,25.31us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.18ms,26.00ns,0.00ns,26.00ns,7.00ns,23.00ns,4.99us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.24ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.27us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,477.23ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.05us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.23ms,25.00ns,0.00ns,25.00ns,8.00ns,22.00ns,6.83us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,577.20ms,23.00ns,0.00ns,23.00ns,5.00ns,20.00ns,2.20us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.48s,167.00ns,0.00ns,169.00ns,13.00ns,161.00ns,7.93us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,577.24ms,26.00ns,0.00ns,26.00ns,6.00ns,23.00ns,4.49us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,527.17ms,23.00ns,0.00ns,23.00ns,13.00ns,21.00ns,11.99us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.19ms,26.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.84us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,476.73ms,15.00ns,0.00ns,15.00ns,14.00ns,13.00ns,13.46us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,527.23ms,13.00ns,0.00ns,13.00ns,6.00ns,11.00ns,5.36us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.25ms,25.00ns,0.00ns,26.00ns,27.00ns,23.00ns,17.98us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,577.34ms,23.00ns,0.00ns,23.00ns,20.00ns,20.00ns,12.59us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,172.00ns,0.00ns,174.00ns,9.00ns,166.00ns,2.37us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,527.17ms,26.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.41us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,527.07ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.40us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.38ms,26.00ns,0.00ns,26.00ns,6.00ns,23.00ns,2.82us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,477.18ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,2.09us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,477.06ms,13.00ns,0.00ns,13.00ns,6.00ns,11.00ns,2.51us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.38ms,26.00ns,0.00ns,26.00ns,5.00ns,24.00ns,1.87us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,577.22ms,23.00ns,0.00ns,23.00ns,31.00ns,20.00ns,22.20us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.48s,166.00ns,0.00ns,168.00ns,13.00ns,160.00ns,2.41us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,627.45ms,27.00ns,0.00ns,27.00ns,5.00ns,24.00ns,2.12us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,526.81ms,23.00ns,0.00ns,23.00ns,13.00ns,21.00ns,12.05us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.22ms,28.00ns,0.00ns,28.00ns,6.00ns,24.00ns,2.11us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.02ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,2.01us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,526.87ms,19.00ns,0.00ns,19.00ns,5.00ns,16.00ns,1.97us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.87ms,28.00ns,0.00ns,28.00ns,6.00ns,25.00ns,2.39us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.07ms,22.00ns,0.00ns,22.00ns,10.00ns,20.00ns,8.59us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,169.00ns,0.00ns,171.00ns,14.00ns,163.00ns,6.19us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,527.14ms,27.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.23us\nmemmem/subtitles/never/teeny-en-two-space,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,527.39ms,23.00ns,0.00ns,23.00ns,6.00ns,21.00ns,2.17us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,332575,4.67s,9.04us,0.00ns,8.99us,156.00ns,8.73us,27.99us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,298187,4.67s,8.99us,0.00ns,10.03us,2.06us,8.66us,32.64us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,14765,4.51s,202.17us,0.00ns,203.16us,3.12us,201.19us,253.88us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7953,4.51s,377.14us,0.00ns,377.21us,1.42us,375.77us,417.42us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,153356,4.67s,18.70us,0.00ns,19.24us,699.00ns,18.62us,32.67us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,218937,4.62s,13.65us,0.00ns,13.67us,138.00ns,13.53us,34.18us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,185989,4.62s,16.65us,0.00ns,16.10us,1.27us,13.97us,68.47us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,526.86ms,34.00ns,0.00ns,34.00ns,6.00ns,31.00ns,2.27us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,576.90ms,16.00ns,0.00ns,16.00ns,8.00ns,14.00ns,6.31us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,526.95ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.24us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,527.25ms,31.00ns,0.00ns,31.00ns,34.00ns,29.00ns,19.84us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.53s,171.00ns,0.00ns,172.00ns,15.00ns,165.00ns,7.35us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,527.33ms,32.00ns,0.00ns,32.00ns,6.00ns,29.00ns,2.52us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,526.79ms,23.00ns,0.00ns,23.00ns,12.00ns,21.00ns,11.04us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,290641,4.67s,9.76us,0.00ns,10.29us,1.53us,9.53us,22.35us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,314481,4.67s,9.51us,0.00ns,9.51us,121.00ns,9.30us,18.35us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,39631,4.56s,75.60us,0.00ns,75.66us,1.44us,73.86us,131.87us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7944,4.51s,377.26us,0.00ns,377.62us,1.94us,374.53us,423.82us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,12204,4.51s,245.59us,0.00ns,245.81us,4.31us,242.59us,293.46us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,143076,4.67s,20.58us,1.00ns,20.64us,806.00ns,19.37us,34.20us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,219529,4.62s,13.61us,0.00ns,13.63us,137.00ns,13.44us,18.41us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,221111,4.62s,13.46us,0.00ns,13.53us,247.00ns,13.33us,19.20us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.05ms,27.00ns,0.00ns,28.00ns,21.00ns,25.00ns,20.16us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,476.82ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.73us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,476.82ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.08us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,526.94ms,26.00ns,0.00ns,26.00ns,5.00ns,24.00ns,2.06us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,526.74ms,23.00ns,0.00ns,23.00ns,6.00ns,21.00ns,2.35us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.48s,168.00ns,0.00ns,170.00ns,17.00ns,162.00ns,5.13us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,527.35ms,27.00ns,0.00ns,28.00ns,6.00ns,25.00ns,2.88us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,527.46ms,23.00ns,0.00ns,23.00ns,5.00ns,21.00ns,2.24us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,310375,4.62s,9.09us,0.00ns,9.63us,1.66us,8.75us,27.99us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,255586,4.67s,13.83us,0.00ns,11.71us,2.51us,8.83us,18.70us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,16297,4.51s,183.68us,0.00ns,184.05us,6.04us,169.95us,241.42us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7947,4.51s,377.14us,0.00ns,377.51us,2.00us,374.59us,420.97us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12265,4.51s,244.46us,0.00ns,244.58us,1.38us,242.53us,290.36us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,151704,4.67s,19.87us,0.00ns,19.45us,704.00ns,18.63us,31.23us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,218482,4.62s,13.66us,0.00ns,13.70us,145.00ns,13.54us,18.91us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,218213,4.62s,13.65us,0.00ns,13.72us,208.00ns,13.53us,27.00us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,318655,4.67s,9.37us,0.00ns,9.38us,104.00ns,9.26us,15.07us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,314272,4.67s,9.51us,0.00ns,9.51us,70.00ns,9.40us,21.07us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,17477,4.51s,170.83us,0.00ns,171.63us,3.92us,156.59us,216.56us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7921,4.51s,377.54us,0.00ns,378.71us,5.41us,376.52us,428.08us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613345,12257,4.51s,244.47us,0.00ns,244.74us,2.53us,242.53us,295.06us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,147387,4.67s,20.02us,0.00ns,20.02us,636.00ns,18.91us,26.04us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,217571,4.62s,13.85us,0.00ns,13.75us,252.00ns,13.28us,30.51us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,216002,4.62s,14.01us,0.00ns,13.86us,273.00ns,13.39us,19.25us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,288144,4.62s,10.36us,0.00ns,10.37us,110.00ns,10.18us,16.31us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,273988,4.67s,10.55us,0.00ns,10.91us,1.25us,10.34us,19.71us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,28695,4.56s,104.34us,0.00ns,104.52us,2.43us,96.02us,133.32us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7952,4.51s,377.10us,0.00ns,377.24us,1.50us,374.53us,421.66us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,136882,4.62s,21.12us,0.00ns,21.59us,1.17us,19.78us,27.32us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,210247,4.62s,14.22us,0.00ns,14.24us,139.00ns,14.04us,36.90us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,208657,4.62s,14.07us,0.00ns,14.34us,363.00ns,13.89us,21.00us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,213343,4.62s,13.99us,0.00ns,14.03us,176.00ns,13.60us,20.37us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,228243,4.62s,13.06us,0.00ns,13.11us,213.00ns,12.68us,17.62us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,51355,4.56s,58.18us,0.00ns,58.38us,875.00ns,56.20us,70.38us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7949,4.51s,377.11us,0.00ns,377.38us,1.46us,375.72us,405.54us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,117640,4.62s,25.59us,0.00ns,25.17us,1.80us,21.44us,30.39us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,13291,4.51s,225.36us,0.00ns,225.70us,0.99us,225.09us,236.47us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,13319,4.51s,224.83us,0.00ns,225.22us,1.11us,224.78us,235.00us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613345,206215,4.62s,14.40us,0.00ns,14.52us,258.00ns,13.63us,34.95us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613345,243446,4.62s,12.27us,0.00ns,12.29us,175.00ns,11.53us,18.76us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613345,52407,4.56s,57.16us,0.00ns,57.21us,482.00ns,55.45us,69.43us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613345,7956,4.51s,377.03us,0.00ns,377.06us,1.12us,375.65us,405.38us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613345,134960,4.62s,21.64us,0.00ns,21.90us,625.00ns,21.13us,30.08us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613345,11790,4.51s,253.62us,0.00ns,254.44us,3.33us,252.65us,286.53us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613345,11882,4.51s,251.83us,0.00ns,252.46us,3.02us,250.94us,282.14us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.08ms,29.00ns,0.00ns,29.00ns,7.00ns,26.00ns,3.04us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.16ms,17.00ns,0.00ns,17.00ns,4.00ns,15.00ns,2.29us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,527.70ms,23.00ns,0.00ns,23.00ns,12.00ns,20.00ns,9.63us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,527.10ms,24.00ns,0.00ns,24.00ns,6.00ns,21.00ns,2.47us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,477.08ms,22.00ns,0.00ns,23.00ns,6.00ns,20.00ns,2.65us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,177.00ns,0.00ns,179.00ns,16.00ns,170.00ns,8.21us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,528.24ms,28.00ns,0.00ns,28.00ns,5.00ns,25.00ns,2.16us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,527.23ms,26.00ns,0.00ns,27.00ns,6.00ns,24.00ns,2.42us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,28,1000000,527.16ms,24.00ns,0.00ns,24.00ns,5.00ns,22.00ns,1.92us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,28,1000000,527.40ms,21.00ns,0.00ns,21.00ns,5.00ns,19.00ns,2.46us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,28,1000000,526.76ms,16.00ns,0.00ns,17.00ns,22.00ns,14.00ns,18.43us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,28,1000000,526.97ms,22.00ns,0.00ns,23.00ns,28.00ns,20.00ns,20.59us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,28,1000000,527.25ms,22.00ns,0.00ns,23.00ns,20.00ns,20.00ns,15.45us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,28,1000000,1.53s,179.00ns,0.00ns,182.00ns,12.00ns,172.00ns,2.21us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,526.87ms,26.00ns,0.00ns,26.00ns,67.00ns,23.00ns,67.09us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,527.41ms,28.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.29us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,309736,4.67s,9.08us,0.00ns,9.65us,1.69us,8.75us,19.66us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,271978,4.67s,9.01us,0.00ns,11.00us,2.53us,8.67us,33.36us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,17994,4.51s,163.83us,0.00ns,166.70us,4.59us,162.91us,208.13us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7961,4.51s,376.40us,0.00ns,376.85us,1.56us,374.56us,396.59us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,153486,4.67s,18.70us,0.00ns,19.22us,698.00ns,18.62us,31.92us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,219082,4.62s,13.64us,0.00ns,13.66us,127.00ns,13.51us,17.82us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,219435,4.62s,13.62us,0.00ns,13.64us,126.00ns,13.49us,18.41us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613402,324447,4.62s,9.20us,0.00ns,9.21us,107.00ns,9.06us,14.34us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613402,323553,4.67s,9.23us,0.00ns,9.24us,112.00ns,9.07us,15.77us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613402,11003,4.51s,272.28us,0.00ns,272.62us,1.49us,270.82us,315.36us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613402,7947,4.51s,377.26us,0.00ns,377.48us,1.45us,374.55us,416.37us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613402,12247,4.51s,244.51us,0.00ns,244.94us,2.38us,242.53us,292.15us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613402,144485,4.67s,20.85us,0.00ns,20.43us,933.00ns,18.81us,27.46us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613402,213314,4.62s,14.09us,0.00ns,14.03us,220.00ns,13.55us,18.77us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613402,214816,4.62s,14.07us,0.00ns,13.93us,259.00ns,13.52us,20.31us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,577.38ms,37.00ns,0.00ns,38.00ns,7.00ns,35.00ns,3.19us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,527.20ms,19.00ns,0.00ns,19.00ns,4.00ns,17.00ns,2.16us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,576.86ms,37.00ns,0.00ns,36.00ns,7.00ns,26.00ns,2.62us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,526.62ms,31.00ns,0.00ns,31.00ns,19.00ns,28.00ns,18.25us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.53s,175.00ns,0.00ns,177.00ns,16.00ns,168.00ns,9.26us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,527.16ms,36.00ns,0.00ns,36.00ns,6.00ns,32.00ns,2.03us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,527.36ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.34us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,42,1000000,527.49ms,31.00ns,0.00ns,31.00ns,7.00ns,28.00ns,2.61us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,42,1000000,527.29ms,25.00ns,0.00ns,25.00ns,9.00ns,22.00ns,7.40us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,42,1000000,527.27ms,19.00ns,0.00ns,19.00ns,95.00ns,16.00ns,95.17us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,42,1000000,527.38ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,3.06us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,42,1000000,527.23ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.17us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,42,1000000,1.58s,184.00ns,0.00ns,187.00ns,14.00ns,178.00ns,2.28us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,526.72ms,31.00ns,0.00ns,31.00ns,6.00ns,28.00ns,2.16us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,527.09ms,32.00ns,0.00ns,32.00ns,7.00ns,29.00ns,3.47us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,287592,4.62s,10.38us,0.00ns,10.40us,112.00ns,10.24us,15.61us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,213981,4.62s,15.44us,0.00ns,13.99us,2.35us,10.14us,23.06us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,30640,4.56s,98.45us,0.00ns,97.88us,2.48us,94.12us,119.90us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7944,4.51s,377.27us,0.00ns,377.66us,1.66us,374.86us,402.00us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,143033,4.67s,20.55us,0.00ns,20.64us,1.17us,19.38us,34.77us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,220994,4.62s,13.53us,0.00ns,13.54us,121.00ns,13.39us,19.09us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,221343,4.62s,13.50us,0.00ns,13.52us,126.00ns,13.37us,24.42us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,613427,309243,4.67s,9.66us,0.00ns,9.67us,104.00ns,9.51us,14.46us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,613427,235884,4.62s,14.51us,0.00ns,12.69us,2.36us,9.60us,22.21us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,613427,22062,4.51s,135.28us,0.00ns,135.95us,3.85us,127.47us,160.89us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,613427,7944,4.51s,377.52us,0.00ns,377.64us,1.31us,376.19us,420.44us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,613427,12243,4.51s,244.50us,0.00ns,245.02us,4.39us,242.56us,294.02us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,613427,144111,4.67s,20.28us,0.00ns,20.49us,1.06us,19.09us,30.80us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,613427,224728,4.62s,13.30us,0.00ns,13.32us,123.00ns,13.17us,18.89us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,613427,224795,4.62s,13.29us,0.00ns,13.31us,132.00ns,13.16us,33.62us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,526.87ms,33.00ns,0.00ns,33.00ns,99.00ns,30.00ns,98.71us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,527.21ms,28.00ns,0.00ns,28.00ns,6.00ns,26.00ns,2.26us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,526.76ms,22.00ns,0.00ns,23.00ns,6.00ns,21.00ns,2.45us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,527.19ms,25.00ns,0.00ns,25.00ns,4.00ns,22.00ns,1.96us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.53s,185.00ns,0.00ns,187.00ns,13.00ns,177.00ns,1.98us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,527.62ms,30.00ns,0.00ns,30.00ns,7.00ns,27.00ns,3.12us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,527.09ms,28.00ns,0.00ns,29.00ns,7.00ns,26.00ns,2.42us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/oneshot,2.5.0,,31,1000000,527.28ms,26.00ns,0.00ns,26.00ns,5.00ns,23.00ns,2.18us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/prebuilt,2.5.0,,31,1000000,527.22ms,26.00ns,0.00ns,26.00ns,8.00ns,22.00ns,3.40us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/twoway,2.5.0,,31,1000000,527.14ms,19.00ns,0.00ns,19.00ns,17.00ns,17.00ns,13.69us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/rabinkarp,2.5.0,,31,1000000,527.38ms,22.00ns,0.00ns,22.00ns,102.00ns,20.00ns,100.65us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/shiftor,2.5.0,,31,1000000,527.07ms,24.00ns,0.00ns,24.00ns,79.00ns,21.00ns,78.42us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchr/memmem/wasm32,2.5.0,,31,1000000,1.54s,180.00ns,0.00ns,183.00ns,13.00ns,172.00ns,2.31us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,526.89ms,27.00ns,0.00ns,27.00ns,4.00ns,24.00ns,1.87us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.0.1 (rev 8c6edf6843),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,527.17ms,33.00ns,0.00ns,33.00ns,6.00ns,30.00ns,2.27us\n"
  },
  {
    "path": "benchmarks/record/x86_64/2023-12-29.csv",
    "content": "name,model,rebar_version,engine,engine_version,err,haystack_len,iters,total,median,mad,mean,stddev,min,max\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,594933,17233,4.51s,173.95us,0.00ns,174.05us,1.53us,172.27us,297.49us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,594933,152472,4.62s,19.57us,0.00ns,19.64us,222.00ns,19.43us,42.47us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,594933,129342,4.72s,23.00us,0.00ns,23.01us,378.00ns,21.82us,138.54us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.1,,594933,321017,4.67s,9.29us,0.00ns,9.31us,123.00ns,9.25us,29.25us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.1,,594933,269868,4.92s,10.88us,0.00ns,10.91us,243.00ns,10.85us,24.85us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.1,,594933,16842,4.51s,177.86us,0.00ns,178.10us,1.10us,176.74us,192.42us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.1,,594933,18192,4.51s,164.64us,0.00ns,164.88us,1.62us,163.65us,289.39us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.1,,594933,6374,4.51s,469.27us,0.00ns,470.63us,6.49us,463.27us,523.57us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.1,,594933,6947,4.51s,429.73us,0.00ns,431.81us,9.81us,422.41us,589.70us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.1,,594933,13573,4.56s,220.64us,0.00ns,220.83us,1.04us,219.23us,243.03us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.1,,594933,15942,4.51s,187.08us,0.00ns,188.16us,2.32us,184.93us,305.79us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,594933,18883,4.51s,157.72us,0.00ns,158.84us,3.64us,156.43us,273.71us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,594933,19038,4.51s,157.36us,0.00ns,157.55us,1.15us,156.92us,278.30us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,594933,6922,4.51s,429.75us,1.00ns,433.37us,14.22us,384.12us,550.77us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,594933,16793,4.51s,178.41us,0.00ns,178.62us,895.00ns,177.55us,204.29us\nmemchr/sherlock/common/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.1,,594933,10029,4.51s,298.87us,0.00ns,299.12us,1.47us,295.21us,316.87us\nmemchr/sherlock/common/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.1,,594933,3373,4.51s,887.97us,0.00ns,889.47us,6.02us,882.10us,1.02ms\nmemchr/sherlock/common/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.1,,594933,4674,4.51s,639.21us,0.00ns,641.95us,14.77us,633.73us,768.28us\nmemchr/sherlock/common/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.1,,594933,9145,4.56s,327.68us,0.00ns,327.87us,2.20us,324.82us,450.94us\nmemchr/sherlock/common/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.1,,594933,9233,4.51s,322.34us,0.00ns,324.91us,5.91us,321.82us,453.86us\nmemchr/sherlock/common/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,594933,10284,4.51s,291.58us,0.00ns,291.71us,1.47us,289.76us,409.27us\nmemchr/sherlock/common/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,594933,9091,4.51s,329.91us,0.00ns,329.98us,1.97us,328.72us,447.85us\nmemchr/sherlock/common/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.1,,594933,6191,4.51s,484.15us,0.00ns,484.56us,1.99us,480.21us,499.88us\nmemchr/sherlock/common/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.1,,594933,2267,4.51s,1.32ms,0.00ns,1.32ms,8.46us,1.31ms,1.40ms\nmemchr/sherlock/common/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.1,,594933,3356,4.51s,893.55us,1.00ns,893.90us,5.86us,879.77us,946.01us\nmemchr/sherlock/common/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.1,,594933,6974,4.56s,429.07us,0.00ns,430.04us,3.71us,425.00us,460.40us\nmemchr/sherlock/common/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.1,,594933,5537,4.51s,541.66us,0.00ns,541.78us,1.22us,536.93us,558.38us\nmemchr/sherlock/common/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,594933,6438,4.51s,465.86us,1.00ns,465.95us,1.93us,461.15us,587.22us\nmemchr/sherlock/common/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,594933,5716,4.51s,524.16us,0.00ns,524.83us,1.72us,523.50us,538.25us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,664,1000000,832.97ms,185.00ns,0.00ns,185.00ns,13.00ns,181.00ns,2.74us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,664,1000000,531.34ms,34.00ns,0.00ns,35.00ns,10.00ns,32.00ns,3.75us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,664,1000000,1.84s,119.00ns,0.00ns,120.00ns,10.00ns,113.00ns,2.84us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.1,,664,1000000,581.68ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,2.44us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.1,,664,1000000,1.78s,107.00ns,0.00ns,107.00ns,10.00ns,101.00ns,2.17us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.1,,664,1000000,882.23ms,185.00ns,0.00ns,185.00ns,16.00ns,180.00ns,4.79us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.1,,664,1000000,831.28ms,167.00ns,0.00ns,167.00ns,14.00ns,163.00ns,3.47us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.1,,664,1000000,850.07ms,141.00ns,0.00ns,142.00ns,13.00ns,137.00ns,2.82us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.1,,664,1000000,781.96ms,160.00ns,0.00ns,161.00ns,15.00ns,156.00ns,3.47us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.1,,664,1000000,2.09s,227.00ns,0.00ns,228.00ns,16.00ns,219.00ns,3.48us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.1,,664,1000000,881.68ms,198.00ns,0.00ns,197.00ns,11.00ns,188.00ns,2.83us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,881.13ms,172.00ns,0.00ns,172.00ns,119.00ns,166.00ns,116.20us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,882.14ms,170.00ns,0.00ns,170.00ns,62.00ns,165.00ns,58.80us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,664,1000000,831.73ms,160.00ns,0.00ns,161.00ns,16.00ns,156.00ns,8.43us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,664,1000000,0.98s,202.00ns,0.00ns,202.00ns,16.00ns,199.00ns,7.49us\nmemchr/sherlock/common/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.1,,664,1000000,1.08s,318.00ns,0.00ns,319.00ns,17.00ns,311.00ns,3.91us\nmemchr/sherlock/common/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.1,,664,1000000,882.43ms,215.00ns,0.00ns,216.00ns,16.00ns,205.00ns,3.04us\nmemchr/sherlock/common/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.1,,664,1000000,1.03s,221.00ns,0.00ns,221.00ns,17.00ns,208.00ns,4.30us\nmemchr/sherlock/common/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.1,,664,1000000,2.29s,364.00ns,0.00ns,364.00ns,20.00ns,356.00ns,5.28us\nmemchr/sherlock/common/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.1,,664,1000000,1.23s,339.00ns,0.00ns,340.00ns,18.00ns,334.00ns,3.00us\nmemchr/sherlock/common/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,664,1000000,1.08s,315.00ns,0.00ns,315.00ns,19.00ns,310.00ns,6.86us\nmemchr/sherlock/common/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,664,1000000,1.18s,349.00ns,0.00ns,349.00ns,19.00ns,344.00ns,2.89us\nmemchr/sherlock/common/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.1,,664,1000000,1.53s,495.00ns,0.00ns,498.00ns,24.00ns,484.00ns,6.50us\nmemchr/sherlock/common/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.1,,664,1000000,1.18s,349.00ns,0.00ns,350.00ns,22.00ns,337.00ns,5.83us\nmemchr/sherlock/common/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.1,,664,1000000,1.13s,294.00ns,0.00ns,295.00ns,25.00ns,270.00ns,7.22us\nmemchr/sherlock/common/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.1,,664,1000000,2.59s,512.00ns,0.00ns,513.00ns,24.00ns,503.00ns,8.92us\nmemchr/sherlock/common/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.1,,664,1000000,1.54s,554.00ns,0.00ns,555.00ns,23.00ns,542.00ns,3.10us\nmemchr/sherlock/common/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,664,1000000,1.53s,485.00ns,0.00ns,486.00ns,23.00ns,472.00ns,7.60us\nmemchr/sherlock/common/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.58s,561.00ns,0.00ns,562.00ns,23.00ns,554.00ns,5.49us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,69,1000000,631.12ms,49.00ns,0.00ns,49.00ns,9.00ns,47.00ns,3.81us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,69,1000000,530.85ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,2.15us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,69,1000000,1.73s,94.00ns,0.00ns,95.00ns,14.00ns,88.00ns,8.56us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.1,,69,1000000,481.23ms,17.00ns,0.00ns,17.00ns,7.00ns,15.00ns,3.97us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.1,,69,1000000,1.68s,96.00ns,0.00ns,96.00ns,10.00ns,90.00ns,2.73us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.1,,69,1000000,531.47ms,48.00ns,0.00ns,48.00ns,12.00ns,46.00ns,7.94us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.1,,69,1000000,631.77ms,44.00ns,0.00ns,44.00ns,17.00ns,42.00ns,14.30us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.1,,69,1000000,630.27ms,35.00ns,0.00ns,35.00ns,10.00ns,29.00ns,4.37us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.1,,69,1000000,531.03ms,26.00ns,0.00ns,27.00ns,7.00ns,24.00ns,4.99us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.1,,69,1000000,1.79s,115.00ns,0.00ns,116.00ns,12.00ns,110.00ns,3.64us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.1,,69,1000000,631.34ms,54.00ns,0.00ns,54.00ns,8.00ns,52.00ns,2.31us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,581.34ms,45.00ns,0.00ns,46.00ns,23.00ns,42.00ns,18.08us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,630.80ms,45.00ns,0.00ns,45.00ns,8.00ns,43.00ns,4.46us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,69,1000000,530.65ms,26.00ns,0.00ns,26.00ns,6.00ns,24.00ns,2.85us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,69,1000000,581.06ms,47.00ns,0.00ns,47.00ns,19.00ns,43.00ns,13.89us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,594933,696609,4.83s,4.27us,0.00ns,4.28us,76.00ns,4.20us,21.60us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,594933,152427,4.62s,19.57us,0.00ns,19.65us,212.00ns,19.43us,28.43us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,594933,129392,4.72s,23.00us,0.00ns,23.00us,175.00ns,21.82us,44.66us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.1,,594933,320941,4.67s,9.29us,0.00ns,9.31us,110.00ns,9.25us,18.77us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.1,,594933,269963,4.87s,10.89us,0.00ns,10.92us,400.00ns,10.83us,129.50us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.1,,594933,708496,4.83s,4.20us,0.00ns,4.20us,64.00ns,4.06us,14.61us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.1,,594933,708674,4.83s,4.20us,0.00ns,4.20us,211.00ns,4.06us,124.54us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.1,,594933,139149,4.57s,21.50us,0.00ns,21.53us,269.00ns,21.48us,47.07us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.1,,594933,26188,4.56s,114.38us,0.00ns,114.53us,1.19us,114.35us,231.69us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.1,,594933,359955,5.02s,8.18us,0.00ns,8.14us,314.00ns,7.86us,125.86us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.1,,594933,684844,4.83s,4.34us,0.00ns,4.35us,226.00ns,4.16us,123.15us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,594933,719108,4.88s,4.11us,0.00ns,4.14us,81.00ns,4.05us,13.16us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,594933,715600,4.88s,4.18us,0.00ns,4.16us,161.00ns,4.05us,118.47us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,594933,26195,4.56s,114.39us,0.00ns,114.50us,942.00ns,114.36us,151.49us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,594933,700863,4.78s,4.25us,0.00ns,4.25us,152.00ns,4.17us,121.15us\nmemchr/sherlock/never/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.1,,594933,572353,4.78s,5.20us,0.00ns,5.20us,167.00ns,5.14us,120.01us\nmemchr/sherlock/never/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.1,,594933,74516,4.56s,38.88us,1.00ns,40.22us,2.47us,38.16us,64.90us\nmemchr/sherlock/never/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.1,,594933,17470,4.51s,171.55us,0.00ns,171.70us,1.13us,171.51us,287.53us\nmemchr/sherlock/never/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.1,,594933,271933,4.87s,10.70us,0.00ns,10.84us,476.00ns,10.49us,127.49us\nmemchr/sherlock/never/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.1,,594933,571005,4.78s,5.22us,0.00ns,5.22us,226.00ns,5.19us,122.19us\nmemchr/sherlock/never/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,594933,574558,4.78s,5.18us,0.00ns,5.18us,173.00ns,5.15us,124.15us\nmemchr/sherlock/never/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,594933,575103,4.78s,5.18us,0.00ns,5.19us,64.00ns,5.15us,12.13us\nmemchr/sherlock/never/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.1,,594933,387152,4.67s,7.70us,0.00ns,7.71us,288.00ns,7.64us,125.88us\nmemchr/sherlock/never/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.1,,594933,52324,4.56s,57.24us,0.00ns,57.30us,519.00ns,57.22us,71.21us\nmemchr/sherlock/never/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.1,,594933,13096,4.51s,228.76us,0.00ns,229.05us,1.70us,228.71us,274.50us\nmemchr/sherlock/never/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.1,,594933,190290,4.77s,15.52us,0.00ns,15.57us,552.00ns,15.39us,241.88us\nmemchr/sherlock/never/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.1,,594933,385991,4.72s,7.73us,0.00ns,7.74us,207.00ns,7.69us,123.88us\nmemchr/sherlock/never/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,594933,383171,4.67s,7.76us,0.00ns,7.79us,338.00ns,7.66us,125.13us\nmemchr/sherlock/never/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,594933,393651,4.67s,7.58us,0.00ns,7.59us,80.00ns,7.56us,30.38us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,664,1000000,529.75ms,14.00ns,0.00ns,14.00ns,19.00ns,12.00ns,17.86us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,664,1000000,529.52ms,35.00ns,0.00ns,35.00ns,7.00ns,32.00ns,3.87us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,664,1000000,1.85s,119.00ns,0.00ns,120.00ns,12.00ns,112.00ns,4.34us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.1,,664,1000000,547.41ms,29.00ns,0.00ns,29.00ns,6.00ns,26.00ns,4.05us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.1,,664,1000000,1.83s,107.00ns,0.00ns,107.00ns,11.00ns,102.00ns,3.09us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.1,,664,1000000,529.71ms,15.00ns,0.00ns,15.00ns,30.00ns,13.00ns,20.19us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.1,,664,1000000,479.43ms,15.00ns,0.00ns,15.00ns,36.00ns,13.00ns,25.39us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.1,,664,1000000,530.14ms,33.00ns,0.00ns,33.00ns,8.00ns,31.00ns,3.13us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.1,,664,1000000,830.73ms,145.00ns,0.00ns,146.00ns,13.00ns,142.00ns,3.00us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.1,,664,1000000,1.83s,102.00ns,0.00ns,103.00ns,8.00ns,97.00ns,2.22us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.1,,664,1000000,598.65ms,15.00ns,0.00ns,15.00ns,42.00ns,13.00ns,21.79us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,580.57ms,14.00ns,0.00ns,14.00ns,6.00ns,12.00ns,3.05us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,530.10ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,1.75us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,664,1000000,830.27ms,144.00ns,0.00ns,145.00ns,14.00ns,141.00ns,3.96us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,664,1000000,540.14ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,2.39us\nmemchr/sherlock/never/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.1,,664,1000000,579.91ms,17.00ns,0.00ns,17.00ns,31.00ns,15.00ns,22.95us\nmemchr/sherlock/never/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.1,,664,1000000,580.15ms,60.00ns,0.00ns,60.00ns,12.00ns,51.00ns,4.04us\nmemchr/sherlock/never/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.1,,664,1000000,931.12ms,209.00ns,0.00ns,210.00ns,17.00ns,206.00ns,7.96us\nmemchr/sherlock/never/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.1,,664,1000000,1.78s,101.00ns,0.00ns,101.00ns,118.00ns,96.00ns,117.36us\nmemchr/sherlock/never/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.1,,664,1000000,479.80ms,18.00ns,0.00ns,18.00ns,37.00ns,16.00ns,20.96us\nmemchr/sherlock/never/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,664,1000000,580.88ms,17.00ns,0.00ns,17.00ns,5.00ns,15.00ns,2.05us\nmemchr/sherlock/never/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,664,1000000,529.57ms,16.00ns,0.00ns,17.00ns,4.00ns,14.00ns,2.36us\nmemchr/sherlock/never/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.1,,664,1000000,579.33ms,20.00ns,0.00ns,20.00ns,8.00ns,18.00ns,3.78us\nmemchr/sherlock/never/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.1,,664,1000000,730.53ms,79.00ns,0.00ns,79.00ns,11.00ns,75.00ns,3.65us\nmemchr/sherlock/never/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.1,,664,1000000,1.03s,277.00ns,0.00ns,276.00ns,74.00ns,269.00ns,71.22us\nmemchr/sherlock/never/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.1,,664,1000000,1.78s,107.00ns,0.00ns,107.00ns,12.00ns,102.00ns,4.10us\nmemchr/sherlock/never/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.1,,664,1000000,539.57ms,21.00ns,0.00ns,21.00ns,39.00ns,19.00ns,22.96us\nmemchr/sherlock/never/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,664,1000000,585.62ms,19.00ns,0.00ns,20.00ns,7.00ns,17.00ns,3.38us\nmemchr/sherlock/never/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,664,1000000,579.72ms,20.00ns,0.00ns,20.00ns,5.00ns,17.00ns,3.05us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,69,1000000,580.17ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.27us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,69,1000000,579.70ms,15.00ns,0.00ns,15.00ns,6.00ns,13.00ns,3.55us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,69,1000000,1.74s,94.00ns,0.00ns,95.00ns,14.00ns,89.00ns,9.33us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.1,,69,1000000,529.13ms,27.00ns,0.00ns,27.00ns,8.00ns,25.00ns,3.72us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.1,,69,1000000,1.68s,94.00ns,0.00ns,94.00ns,10.00ns,89.00ns,3.59us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.1,,69,1000000,530.14ms,13.00ns,0.00ns,13.00ns,7.00ns,11.00ns,5.75us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.1,,69,1000000,529.31ms,13.00ns,0.00ns,13.00ns,23.00ns,11.00ns,18.38us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.1,,69,1000000,529.81ms,17.00ns,0.00ns,17.00ns,6.00ns,14.00ns,3.17us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.1,,69,1000000,529.74ms,31.00ns,0.00ns,31.00ns,7.00ns,22.00ns,3.79us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.1,,69,1000000,1.68s,94.00ns,0.00ns,95.00ns,11.00ns,88.00ns,4.09us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.1,,69,1000000,479.95ms,12.00ns,0.00ns,12.00ns,39.00ns,10.00ns,23.45us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,479.89ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,2.46us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,479.96ms,12.00ns,0.00ns,12.00ns,7.00ns,10.00ns,4.95us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,69,1000000,529.62ms,30.00ns,0.00ns,30.00ns,8.00ns,22.00ns,3.42us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,69,1000000,579.86ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,4.13us\nmemchr/sherlock/never/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.1,,69,1000000,580.14ms,13.00ns,0.00ns,13.00ns,21.00ns,11.00ns,15.35us\nmemchr/sherlock/never/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.1,,69,1000000,529.63ms,15.00ns,0.00ns,16.00ns,6.00ns,14.00ns,3.42us\nmemchr/sherlock/never/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.1,,69,1000000,529.71ms,37.00ns,0.00ns,36.00ns,12.00ns,28.00ns,8.36us\nmemchr/sherlock/never/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.1,,69,1000000,1.68s,95.00ns,0.00ns,95.00ns,13.00ns,90.00ns,9.44us\nmemchr/sherlock/never/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.1,,69,1000000,579.56ms,13.00ns,0.00ns,16.00ns,46.00ns,11.00ns,31.04us\nmemchr/sherlock/never/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,69,1000000,579.84ms,12.00ns,0.00ns,12.00ns,5.00ns,11.00ns,3.33us\nmemchr/sherlock/never/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,69,1000000,479.80ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,2.60us\nmemchr/sherlock/never/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.1,,69,1000000,479.68ms,13.00ns,0.00ns,13.00ns,86.00ns,11.00ns,76.81us\nmemchr/sherlock/never/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.1,,69,1000000,529.78ms,17.00ns,0.00ns,18.00ns,6.00ns,16.00ns,3.02us\nmemchr/sherlock/never/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.1,,69,1000000,579.44ms,38.00ns,0.00ns,38.00ns,5.00ns,35.00ns,2.19us\nmemchr/sherlock/never/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.1,,69,1000000,1.68s,91.00ns,0.00ns,91.00ns,9.00ns,86.00ns,2.99us\nmemchr/sherlock/never/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.1,,69,1000000,530.22ms,13.00ns,0.00ns,13.00ns,22.00ns,11.00ns,17.70us\nmemchr/sherlock/never/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,69,1000000,479.78ms,13.00ns,0.00ns,13.00ns,5.00ns,11.00ns,2.96us\nmemchr/sherlock/never/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,69,1000000,529.45ms,13.00ns,0.00ns,13.00ns,13.00ns,11.00ns,12.26us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,,1000000,479.25ms,11.00ns,0.00ns,11.00ns,5.00ns,9.00ns,3.26us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,,1000000,529.93ms,11.00ns,0.00ns,11.00ns,5.00ns,9.00ns,2.35us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,,1000000,1.73s,93.00ns,0.00ns,94.00ns,10.00ns,90.00ns,4.62us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.1,,,1000000,479.84ms,11.00ns,0.00ns,11.00ns,6.00ns,9.00ns,2.60us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.1,,,1000000,1.75s,87.00ns,0.00ns,87.00ns,11.00ns,83.00ns,6.12us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.1,,,1000000,529.90ms,12.00ns,0.00ns,12.00ns,38.00ns,10.00ns,21.91us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.1,,,1000000,529.89ms,12.00ns,0.00ns,12.00ns,3.00ns,10.00ns,2.19us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.1,,,1000000,529.82ms,11.00ns,0.00ns,11.00ns,3.00ns,9.00ns,2.60us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.1,,,1000000,479.63ms,11.00ns,0.00ns,11.00ns,6.00ns,9.00ns,4.09us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.1,,,1000000,1.73s,91.00ns,0.00ns,92.00ns,123.00ns,87.00ns,122.73us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.1,,,1000000,529.59ms,11.00ns,0.00ns,12.00ns,31.00ns,9.00ns,19.69us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,,1000000,479.90ms,11.00ns,0.00ns,11.00ns,3.00ns,9.00ns,1.95us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,,1000000,530.03ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,3.08us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,,1000000,479.53ms,11.00ns,0.00ns,11.00ns,5.00ns,9.00ns,2.69us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,,1000000,479.88ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.66us\nmemchr/sherlock/never/empty2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.1,,,1000000,529.80ms,12.00ns,0.00ns,12.00ns,23.00ns,10.00ns,16.24us\nmemchr/sherlock/never/empty2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.1,,,1000000,529.78ms,11.00ns,0.00ns,11.00ns,2.00ns,10.00ns,1.87us\nmemchr/sherlock/never/empty2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.1,,,1000000,529.87ms,11.00ns,0.00ns,11.00ns,16.00ns,9.00ns,15.44us\nmemchr/sherlock/never/empty2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.1,,,1000000,1.78s,98.00ns,0.00ns,98.00ns,12.00ns,94.00ns,5.46us\nmemchr/sherlock/never/empty2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.1,,,1000000,479.41ms,12.00ns,0.00ns,12.00ns,40.00ns,10.00ns,20.55us\nmemchr/sherlock/never/empty2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,,1000000,529.18ms,11.00ns,0.00ns,11.00ns,8.00ns,9.00ns,4.84us\nmemchr/sherlock/never/empty2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,,1000000,585.40ms,11.00ns,0.00ns,11.00ns,14.00ns,9.00ns,13.11us\nmemchr/sherlock/never/empty3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.1,,,1000000,529.90ms,12.00ns,0.00ns,12.00ns,34.00ns,10.00ns,20.07us\nmemchr/sherlock/never/empty3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.1,,,1000000,529.80ms,11.00ns,0.00ns,11.00ns,6.00ns,9.00ns,4.20us\nmemchr/sherlock/never/empty3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.1,,,1000000,478.96ms,11.00ns,0.00ns,11.00ns,6.00ns,9.00ns,2.95us\nmemchr/sherlock/never/empty3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.1,,,1000000,1.78s,89.00ns,0.00ns,90.00ns,10.00ns,85.00ns,2.90us\nmemchr/sherlock/never/empty3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.1,,,1000000,529.61ms,12.00ns,0.00ns,12.00ns,35.00ns,10.00ns,21.16us\nmemchr/sherlock/never/empty3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,,1000000,629.70ms,11.00ns,0.00ns,11.00ns,19.00ns,9.00ns,18.52us\nmemchr/sherlock/never/empty3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,,1000000,529.53ms,11.00ns,0.00ns,11.00ns,4.00ns,9.00ns,2.03us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,594933,591235,4.83s,5.03us,0.00ns,5.04us,230.00ns,4.96us,122.79us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,594933,152041,4.62s,19.58us,0.00ns,19.70us,374.00ns,19.43us,133.49us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,594933,129381,4.72s,22.99us,0.00ns,23.00us,360.00ns,21.82us,138.18us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.1,,594933,321184,4.67s,9.29us,0.00ns,9.31us,100.00ns,9.25us,14.43us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.1,,594933,270911,4.92s,10.86us,0.00ns,10.88us,299.00ns,10.83us,125.63us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.1,,594933,606278,4.78s,4.91us,0.00ns,4.92us,81.00ns,4.83us,25.52us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.1,,594933,610849,4.83s,4.87us,0.00ns,4.88us,65.00ns,4.79us,15.39us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.1,,594933,132029,4.57s,22.66us,0.00ns,22.69us,399.00ns,22.59us,148.15us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.1,,594933,25904,4.56s,115.47us,0.00ns,115.78us,1.20us,115.38us,232.02us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.1,,594933,317854,4.97s,9.13us,0.00ns,9.24us,280.00ns,8.86us,16.25us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.1,,594933,594418,4.78s,5.01us,0.00ns,5.01us,223.00ns,4.93us,119.65us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,594933,609569,4.78s,4.88us,0.00ns,4.89us,73.00ns,4.82us,14.31us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,594933,607689,4.78s,4.90us,0.00ns,4.90us,61.00ns,4.82us,11.51us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,594933,613182,4.78s,4.86us,0.00ns,4.86us,61.00ns,4.78us,10.12us\nmemchr/sherlock/rare/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.1,,594933,365491,4.67s,7.74us,0.00ns,8.17us,497.00ns,7.62us,16.87us\nmemchr/sherlock/rare/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.1,,594933,67492,4.56s,45.07us,0.00ns,44.41us,1.48us,41.27us,65.91us\nmemchr/sherlock/rare/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.1,,594933,17162,4.51s,174.67us,0.00ns,174.78us,0.96us,173.99us,211.79us\nmemchr/sherlock/rare/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.1,,594933,232151,4.87s,12.67us,0.00ns,12.72us,148.00ns,12.57us,25.09us\nmemchr/sherlock/rare/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.1,,594933,370415,4.67s,8.05us,0.00ns,8.07us,231.00ns,7.91us,125.04us\nmemchr/sherlock/rare/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,594933,384400,4.67s,7.76us,0.00ns,7.77us,275.00ns,7.67us,122.55us\nmemchr/sherlock/rare/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,594933,398559,4.73s,7.49us,0.00ns,7.49us,83.00ns,7.38us,25.88us\nmemchr/sherlock/rare/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.1,,594933,277737,4.67s,10.75us,0.00ns,10.77us,254.00ns,10.61us,126.50us\nmemchr/sherlock/rare/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.1,,594933,49719,4.56s,60.16us,0.00ns,60.30us,364.00ns,59.92us,73.47us\nmemchr/sherlock/rare/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.1,,594933,12929,4.51s,231.83us,0.00ns,232.01us,1.56us,231.69us,345.78us\nmemchr/sherlock/rare/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.1,,594933,161863,4.77s,18.30us,0.00ns,18.34us,365.00ns,18.22us,136.08us\nmemchr/sherlock/rare/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.1,,594933,272318,4.62s,10.96us,0.00ns,10.98us,343.00ns,10.85us,127.45us\nmemchr/sherlock/rare/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,594933,277378,4.67s,10.76us,0.00ns,10.78us,267.00ns,10.67us,128.08us\nmemchr/sherlock/rare/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,594933,280111,4.62s,10.49us,0.00ns,10.68us,318.00ns,10.41us,33.71us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,664,1000000,529.60ms,19.00ns,0.00ns,19.00ns,6.00ns,17.00ns,3.98us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,664,1000000,529.84ms,35.00ns,0.00ns,35.00ns,7.00ns,33.00ns,3.37us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,664,1000000,1.83s,120.00ns,0.00ns,121.00ns,11.00ns,114.00ns,2.83us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.1,,664,1000000,529.90ms,28.00ns,0.00ns,28.00ns,9.00ns,25.00ns,4.43us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.1,,664,1000000,1.78s,108.00ns,0.00ns,109.00ns,74.00ns,102.00ns,73.58us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.1,,664,1000000,529.73ms,19.00ns,0.00ns,19.00ns,8.00ns,16.00ns,3.55us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.1,,664,1000000,579.87ms,19.00ns,0.00ns,19.00ns,14.00ns,16.00ns,11.30us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.1,,664,1000000,579.92ms,35.00ns,0.00ns,35.00ns,9.00ns,32.00ns,4.32us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.1,,664,1000000,780.66ms,152.00ns,0.00ns,152.00ns,14.00ns,148.00ns,3.07us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.1,,664,1000000,1.78s,102.00ns,0.00ns,102.00ns,9.00ns,97.00ns,3.50us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.1,,664,1000000,529.99ms,20.00ns,0.00ns,20.00ns,18.00ns,17.00ns,13.13us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,479.92ms,18.00ns,0.00ns,18.00ns,6.00ns,16.00ns,4.82us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,529.40ms,18.00ns,0.00ns,18.00ns,16.00ns,16.00ns,15.70us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,664,1000000,830.89ms,151.00ns,0.00ns,151.00ns,15.00ns,147.00ns,4.64us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,664,1000000,529.79ms,18.00ns,0.00ns,18.00ns,8.00ns,16.00ns,5.88us\nmemchr/sherlock/rare/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.1,,664,1000000,529.76ms,26.00ns,0.00ns,26.00ns,7.00ns,24.00ns,2.59us\nmemchr/sherlock/rare/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.1,,664,1000000,629.42ms,67.00ns,0.00ns,67.00ns,9.00ns,54.00ns,3.18us\nmemchr/sherlock/rare/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.1,,664,1000000,930.86ms,223.00ns,0.00ns,224.00ns,17.00ns,216.00ns,5.64us\nmemchr/sherlock/rare/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.1,,664,1000000,1.73s,105.00ns,0.00ns,106.00ns,10.00ns,101.00ns,2.99us\nmemchr/sherlock/rare/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.1,,664,1000000,529.77ms,27.00ns,0.00ns,27.00ns,7.00ns,24.00ns,3.34us\nmemchr/sherlock/rare/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,664,1000000,529.70ms,26.00ns,0.00ns,26.00ns,15.00ns,24.00ns,13.61us\nmemchr/sherlock/rare/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,664,1000000,530.24ms,26.00ns,0.00ns,26.00ns,5.00ns,23.00ns,2.10us\nmemchr/sherlock/rare/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.1,,664,1000000,629.54ms,35.00ns,0.00ns,35.00ns,8.00ns,31.00ns,3.27us\nmemchr/sherlock/rare/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.1,,664,1000000,630.08ms,77.00ns,0.00ns,78.00ns,12.00ns,74.00ns,5.26us\nmemchr/sherlock/rare/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.1,,664,1000000,1.13s,286.00ns,0.00ns,287.00ns,19.00ns,281.00ns,3.24us\nmemchr/sherlock/rare/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.1,,664,1000000,1.78s,118.00ns,0.00ns,119.00ns,32.00ns,113.00ns,22.22us\nmemchr/sherlock/rare/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.1,,664,1000000,579.76ms,36.00ns,0.00ns,37.00ns,21.00ns,33.00ns,17.69us\nmemchr/sherlock/rare/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,664,1000000,529.77ms,35.00ns,0.00ns,35.00ns,8.00ns,31.00ns,3.83us\nmemchr/sherlock/rare/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,664,1000000,594.06ms,35.00ns,0.00ns,35.00ns,8.00ns,31.00ns,3.61us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,69,1000000,529.77ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,3.53us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,69,1000000,529.44ms,15.00ns,0.00ns,15.00ns,3.00ns,14.00ns,2.06us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,69,1000000,1.73s,97.00ns,0.00ns,98.00ns,12.00ns,93.00ns,4.39us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.1,,69,1000000,529.75ms,17.00ns,0.00ns,17.00ns,5.00ns,15.00ns,2.58us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.1,,69,1000000,1.73s,94.00ns,0.00ns,94.00ns,9.00ns,89.00ns,3.05us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.1,,69,1000000,529.48ms,17.00ns,0.00ns,17.00ns,29.00ns,15.00ns,20.44us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.1,,69,1000000,479.69ms,16.00ns,0.00ns,16.00ns,33.00ns,14.00ns,21.56us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.1,,69,1000000,529.75ms,18.00ns,0.00ns,18.00ns,6.00ns,16.00ns,3.72us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.1,,69,1000000,579.49ms,30.00ns,0.00ns,30.00ns,9.00ns,22.00ns,4.39us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.1,,69,1000000,1.73s,97.00ns,0.00ns,97.00ns,10.00ns,92.00ns,3.44us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.1,,69,1000000,529.21ms,14.00ns,0.00ns,14.00ns,41.00ns,12.00ns,22.33us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,479.65ms,16.00ns,0.00ns,16.00ns,4.00ns,14.00ns,2.52us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,479.32ms,16.00ns,0.00ns,16.00ns,5.00ns,14.00ns,2.41us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,69,1000000,529.81ms,30.00ns,0.00ns,30.00ns,8.00ns,22.00ns,4.24us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,69,1000000,529.15ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,1.78us\nmemchr/sherlock/rare/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.1,,69,1000000,529.32ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,2.72us\nmemchr/sherlock/rare/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.1,,69,1000000,529.58ms,20.00ns,0.00ns,20.00ns,7.00ns,18.00ns,2.84us\nmemchr/sherlock/rare/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.1,,69,1000000,580.00ms,37.00ns,0.00ns,36.00ns,8.00ns,28.00ns,3.82us\nmemchr/sherlock/rare/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.1,,69,1000000,1.73s,92.00ns,0.00ns,92.00ns,10.00ns,88.00ns,2.92us\nmemchr/sherlock/rare/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.1,,69,1000000,586.14ms,35.00ns,0.00ns,36.00ns,10.00ns,31.00ns,5.50us\nmemchr/sherlock/rare/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,69,1000000,580.11ms,19.00ns,0.00ns,19.00ns,6.00ns,17.00ns,2.28us\nmemchr/sherlock/rare/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,69,1000000,530.06ms,18.00ns,0.00ns,19.00ns,7.00ns,16.00ns,4.61us\nmemchr/sherlock/rare/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.1,,69,1000000,529.27ms,28.00ns,0.00ns,28.00ns,21.00ns,26.00ns,15.47us\nmemchr/sherlock/rare/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.1,,69,1000000,529.61ms,22.00ns,0.00ns,23.00ns,15.00ns,20.00ns,13.37us\nmemchr/sherlock/rare/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.1,,69,1000000,529.72ms,43.00ns,0.00ns,44.00ns,10.00ns,35.00ns,3.54us\nmemchr/sherlock/rare/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.1,,69,1000000,1.78s,97.00ns,0.00ns,98.00ns,10.00ns,92.00ns,2.65us\nmemchr/sherlock/rare/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.1,,69,1000000,579.95ms,23.00ns,0.00ns,23.00ns,21.00ns,21.00ns,20.37us\nmemchr/sherlock/rare/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,69,1000000,529.99ms,27.00ns,0.00ns,27.00ns,11.00ns,25.00ns,7.22us\nmemchr/sherlock/rare/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,69,1000000,479.22ms,20.00ns,0.00ns,20.00ns,6.00ns,17.00ns,3.82us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,594933,88832,4.57s,33.64us,0.00ns,33.74us,716.00ns,33.21us,151.59us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,594933,152324,4.62s,19.57us,0.00ns,19.66us,470.00ns,19.43us,135.63us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,594933,129292,4.72s,23.00us,0.00ns,23.01us,385.00ns,21.81us,141.24us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.1,,594933,321278,4.67s,9.29us,0.00ns,9.30us,227.00ns,9.25us,126.42us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.1,,594933,267930,4.92s,10.98us,0.00ns,11.00us,383.00ns,10.86us,127.02us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.1,,594933,56376,4.56s,53.04us,0.00ns,53.18us,776.00ns,51.92us,171.57us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.1,,594933,55803,4.56s,53.50us,0.00ns,53.72us,0.99us,52.15us,191.74us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.1,,594933,35532,4.56s,84.15us,0.00ns,84.39us,1.39us,83.09us,200.38us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.1,,594933,18433,4.51s,161.95us,0.00ns,162.72us,2.91us,160.62us,214.41us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.1,,594933,48266,4.61s,60.96us,0.00ns,61.96us,1.86us,59.59us,176.68us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.1,,594933,51267,4.56s,57.22us,0.00ns,58.48us,3.91us,55.63us,175.20us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,594933,60383,4.56s,49.57us,0.00ns,49.65us,489.00ns,48.76us,66.89us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,594933,58348,4.56s,51.10us,0.00ns,51.38us,841.00ns,50.27us,170.21us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,594933,17949,4.51s,162.38us,0.00ns,167.10us,5.83us,161.04us,287.96us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,594933,64626,4.56s,46.58us,0.00ns,46.38us,1.65us,43.35us,165.49us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.1,,594933,25437,4.56s,117.69us,0.00ns,117.91us,1.21us,116.10us,235.82us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.1,,594933,16001,4.51s,187.28us,0.00ns,187.46us,1.28us,184.16us,225.71us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.1,,594933,11045,4.51s,263.49us,0.00ns,271.60us,10.59us,260.18us,324.66us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.1,,594933,24872,4.56s,120.40us,0.00ns,120.42us,502.00ns,119.17us,130.39us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.1,,594933,22734,4.51s,131.59us,0.00ns,131.93us,1.11us,129.71us,146.48us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,594933,28615,4.56s,104.84us,0.00ns,104.81us,840.00ns,103.32us,131.38us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,594933,26940,4.56s,110.25us,0.00ns,111.32us,3.49us,107.43us,141.78us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.1,,594933,19136,4.51s,156.94us,0.00ns,156.74us,1.25us,151.58us,171.22us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.1,,594933,10110,4.51s,295.69us,0.00ns,296.72us,2.16us,292.23us,339.46us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.1,,594933,8256,4.51s,363.11us,0.00ns,363.36us,1.86us,360.50us,476.92us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.1,,594933,15836,4.56s,189.06us,0.00ns,189.25us,1.19us,187.11us,209.62us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.1,,594933,17907,4.51s,166.87us,0.00ns,167.50us,2.05us,162.86us,182.28us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,594933,19871,4.51s,150.67us,0.00ns,150.95us,1.21us,149.70us,266.74us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,594933,20061,4.51s,149.43us,0.00ns,149.51us,1.70us,145.38us,264.93us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,664,1000000,579.36ms,47.00ns,0.00ns,47.00ns,10.00ns,43.00ns,3.81us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,664,1000000,579.87ms,34.00ns,0.00ns,35.00ns,7.00ns,32.00ns,3.03us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,664,1000000,1.83s,118.00ns,0.00ns,119.00ns,12.00ns,112.00ns,4.57us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.1,,664,1000000,529.96ms,28.00ns,0.00ns,28.00ns,8.00ns,25.00ns,4.12us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.1,,664,1000000,1.73s,106.00ns,0.00ns,106.00ns,11.00ns,101.00ns,4.09us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.1,,664,1000000,579.52ms,46.00ns,0.00ns,46.00ns,7.00ns,43.00ns,2.42us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.1,,664,1000000,579.79ms,43.00ns,0.00ns,43.00ns,9.00ns,40.00ns,3.50us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.1,,664,1000000,579.65ms,51.00ns,0.00ns,51.00ns,10.00ns,47.00ns,3.60us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.1,,664,1000000,830.55ms,156.00ns,0.00ns,159.00ns,26.00ns,151.00ns,18.09us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.1,,664,1000000,1.78s,120.00ns,0.00ns,121.00ns,12.00ns,114.00ns,4.15us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.1,,664,1000000,579.63ms,48.00ns,0.00ns,48.00ns,8.00ns,45.00ns,3.41us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,529.12ms,44.00ns,0.00ns,44.00ns,7.00ns,41.00ns,2.93us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,579.99ms,44.00ns,0.00ns,44.00ns,20.00ns,41.00ns,16.94us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,664,1000000,780.64ms,155.00ns,0.00ns,156.00ns,15.00ns,145.00ns,4.50us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,664,1000000,579.87ms,47.00ns,0.00ns,47.00ns,9.00ns,44.00ns,3.37us\nmemchr/sherlock/uncommon/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.1,,664,1000000,631.84ms,75.00ns,0.00ns,76.00ns,18.00ns,70.00ns,9.21us\nmemchr/sherlock/uncommon/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.1,,664,1000000,681.29ms,88.00ns,0.00ns,88.00ns,12.00ns,78.00ns,4.25us\nmemchr/sherlock/uncommon/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.1,,664,1000000,0.98s,202.00ns,0.00ns,203.00ns,16.00ns,199.00ns,2.71us\nmemchr/sherlock/uncommon/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.1,,664,1000000,1.84s,155.00ns,0.00ns,156.00ns,13.00ns,148.00ns,2.61us\nmemchr/sherlock/uncommon/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.1,,664,1000000,681.50ms,86.00ns,0.00ns,86.00ns,22.00ns,80.00ns,14.97us\nmemchr/sherlock/uncommon/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,664,1000000,742.42ms,90.00ns,0.00ns,90.00ns,15.00ns,83.00ns,8.55us\nmemchr/sherlock/uncommon/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,664,1000000,681.94ms,81.00ns,0.00ns,82.00ns,10.00ns,77.00ns,3.96us\nmemchr/sherlock/uncommon/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.1,,664,1000000,731.57ms,121.00ns,0.00ns,121.00ns,18.00ns,114.00ns,11.12us\nmemchr/sherlock/uncommon/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.1,,664,1000000,731.89ms,132.00ns,0.00ns,131.00ns,14.00ns,121.00ns,3.54us\nmemchr/sherlock/uncommon/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.1,,664,1000000,1.13s,288.00ns,0.00ns,286.00ns,73.00ns,267.00ns,69.51us\nmemchr/sherlock/uncommon/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.1,,664,1000000,1.98s,195.00ns,0.00ns,196.00ns,15.00ns,188.00ns,2.90us\nmemchr/sherlock/uncommon/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.1,,664,1000000,731.72ms,133.00ns,0.00ns,133.00ns,13.00ns,128.00ns,3.05us\nmemchr/sherlock/uncommon/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,664,1000000,781.99ms,137.00ns,0.00ns,137.00ns,12.00ns,126.00ns,2.66us\nmemchr/sherlock/uncommon/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,664,1000000,731.64ms,131.00ns,0.00ns,132.00ns,12.00ns,126.00ns,2.63us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,69,1000000,529.59ms,28.00ns,0.00ns,28.00ns,27.00ns,26.00ns,22.53us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,69,1000000,580.16ms,15.00ns,0.00ns,15.00ns,3.00ns,13.00ns,2.29us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,69,1000000,1.78s,93.00ns,0.00ns,94.00ns,8.00ns,89.00ns,2.98us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.1,,69,1000000,529.27ms,17.00ns,0.00ns,17.00ns,6.00ns,14.00ns,2.32us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.1,,69,1000000,1.78s,95.00ns,0.00ns,95.00ns,10.00ns,90.00ns,2.86us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.1,,69,1000000,529.76ms,30.00ns,0.00ns,30.00ns,5.00ns,28.00ns,2.79us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.1,,69,1000000,580.18ms,28.00ns,0.00ns,28.00ns,5.00ns,26.00ns,2.47us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.1,,69,1000000,529.69ms,21.00ns,0.00ns,21.00ns,9.00ns,19.00ns,4.26us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.1,,69,1000000,529.89ms,24.00ns,0.00ns,24.00ns,6.00ns,22.00ns,2.50us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.1,,69,1000000,1.78s,105.00ns,0.00ns,105.00ns,12.00ns,100.00ns,4.87us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.1,,69,1000000,579.89ms,31.00ns,0.00ns,31.00ns,8.00ns,29.00ns,2.96us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,579.49ms,28.00ns,0.00ns,28.00ns,79.00ns,26.00ns,76.29us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,579.93ms,28.00ns,0.00ns,28.00ns,34.00ns,26.00ns,20.25us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,69,1000000,529.86ms,24.00ns,0.00ns,25.00ns,6.00ns,22.00ns,2.91us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,69,1000000,580.10ms,31.00ns,0.00ns,31.00ns,9.00ns,28.00ns,5.78us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.1,,69,1000000,580.96ms,50.00ns,0.00ns,50.00ns,24.00ns,47.00ns,18.29us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.1,,69,1000000,531.13ms,33.00ns,0.00ns,33.00ns,14.00ns,28.00ns,11.69us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.1,,69,1000000,581.20ms,31.00ns,0.00ns,32.00ns,9.00ns,28.00ns,5.43us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.1,,69,1000000,1.75s,112.00ns,0.00ns,113.00ns,10.00ns,107.00ns,3.22us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.1,,69,1000000,596.03ms,51.00ns,0.00ns,51.00ns,9.00ns,47.00ns,3.33us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,69,1000000,583.14ms,55.00ns,0.00ns,55.00ns,10.00ns,50.00ns,5.92us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,69,1000000,581.51ms,48.00ns,0.00ns,48.00ns,18.00ns,45.00ns,9.08us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.1,,69,1000000,580.86ms,67.00ns,0.00ns,68.00ns,9.00ns,62.00ns,3.36us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.1,,69,1000000,581.40ms,50.00ns,0.00ns,50.00ns,9.00ns,45.00ns,3.06us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.1,,69,1000000,581.47ms,38.00ns,0.00ns,39.00ns,8.00ns,35.00ns,4.07us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.1,,69,1000000,1.83s,136.00ns,0.00ns,138.00ns,12.00ns,130.00ns,3.62us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.1,,69,1000000,681.44ms,89.00ns,0.00ns,89.00ns,16.00ns,84.00ns,8.25us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,69,1000000,631.30ms,70.00ns,0.00ns,70.00ns,6.00ns,63.00ns,2.45us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,69,1000000,731.60ms,78.00ns,0.00ns,78.00ns,7.00ns,72.00ns,2.59us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,594933,7582,4.51s,395.33us,0.00ns,395.66us,2.19us,391.11us,515.34us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,594933,152484,4.62s,19.57us,0.00ns,19.64us,205.00ns,19.44us,27.29us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,594933,129317,4.72s,23.00us,0.00ns,23.01us,213.00ns,21.82us,49.14us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.1,,594933,321247,4.67s,9.29us,0.00ns,9.30us,193.00ns,9.25us,107.45us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.1,,594933,268813,4.87s,10.89us,0.00ns,10.94us,277.00ns,10.85us,18.67us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.1,,594933,7521,4.51s,391.60us,0.00ns,398.85us,9.64us,390.69us,436.02us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.1,,594933,8238,4.51s,358.66us,39.00ns,364.17us,9.29us,354.40us,480.76us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.1,,594933,3618,4.51s,827.75us,19.00ns,829.26us,11.62us,789.94us,875.41us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.1,,594933,3732,4.51s,806.23us,0.00ns,804.03us,11.35us,728.69us,818.32us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.1,,594933,9547,4.56s,313.77us,0.00ns,314.06us,1.38us,311.66us,335.38us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.1,,594933,7765,4.51s,385.78us,0.00ns,386.33us,1.98us,385.66us,503.31us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,594933,8500,4.51s,352.65us,1.00ns,352.92us,1.48us,349.33us,366.98us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,594933,8467,4.51s,353.94us,0.00ns,354.32us,1.85us,350.98us,375.91us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,594933,3728,4.51s,805.56us,0.00ns,804.79us,15.63us,729.65us,941.07us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,594933,7287,4.51s,402.35us,0.00ns,411.67us,14.23us,401.80us,438.69us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,664,1000000,1.38s,436.00ns,0.00ns,437.00ns,20.00ns,431.00ns,2.66us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,664,1000000,582.06ms,35.00ns,0.00ns,35.00ns,6.00ns,32.00ns,3.95us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,664,1000000,1.84s,117.00ns,0.00ns,118.00ns,12.00ns,112.00ns,3.45us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.1,,664,1000000,531.42ms,28.00ns,0.00ns,28.00ns,7.00ns,25.00ns,2.50us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.1,,664,1000000,1.79s,106.00ns,0.00ns,106.00ns,11.00ns,101.00ns,4.07us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.1,,664,1000000,1.38s,433.00ns,0.00ns,434.00ns,20.00ns,430.00ns,3.54us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.1,,664,1000000,1.23s,392.00ns,0.00ns,393.00ns,120.00ns,389.00ns,118.18us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.1,,664,1000000,1.08s,300.00ns,0.00ns,300.00ns,20.00ns,288.00ns,6.33us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.1,,664,1000000,933.34ms,208.00ns,0.00ns,209.00ns,120.00ns,203.00ns,119.08us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.1,,664,1000000,2.39s,422.00ns,0.00ns,423.00ns,21.00ns,415.00ns,2.75us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.1,,664,1000000,1.38s,427.00ns,0.00ns,427.00ns,19.00ns,424.00ns,8.05us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.28s,392.00ns,0.00ns,392.00ns,24.00ns,387.00ns,12.40us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.33s,392.00ns,0.00ns,393.00ns,20.00ns,388.00ns,2.96us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,664,1000000,932.66ms,207.00ns,0.00ns,208.00ns,19.00ns,202.00ns,9.41us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,664,1000000,1.43s,446.00ns,0.00ns,447.00ns,30.00ns,443.00ns,23.17us\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,33335253,277,4.56s,10.82ms,0.00ns,10.84ms,60.60us,10.77ms,11.11ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,33335253,393,4.56s,7.64ms,0.00ns,7.64ms,36.44us,7.40ms,7.89ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,33335253,394,4.56s,7.62ms,15.00ns,7.62ms,52.76us,7.38ms,7.86ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,33335253,423,4.56s,7.10ms,0.00ns,7.10ms,31.15us,7.03ms,7.23ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,33335253,422,4.56s,7.09ms,16.00ns,7.12ms,83.20us,7.00ms,7.55ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/binary,2.7.1,,33335253,2853,4.56s,1.05ms,0.00ns,1.05ms,11.77us,1.04ms,1.14ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,33335253,311,4.56s,9.65ms,0.00ns,9.66ms,92.05us,9.54ms,10.31ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,33335253,145,4.56s,20.72ms,0.00ns,20.74ms,54.35us,20.69ms,20.92ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,33335253,223,4.56s,13.43ms,0.00ns,13.46ms,63.91us,13.40ms,13.76ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,33335253,291,4.76s,10.29ms,0.00ns,10.33ms,245.48us,9.95ms,11.04ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,33335253,449,4.56s,6.68ms,0.00ns,6.69ms,43.27us,6.62ms,7.29ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,33335253,446,4.56s,6.72ms,53.00ns,6.73ms,23.99us,6.69ms,6.86ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,33335253,560,4.56s,5.36ms,48.00ns,5.36ms,27.24us,5.26ms,5.52ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,33335253,558,4.56s,5.38ms,25.00ns,5.38ms,29.30us,5.32ms,5.53ms\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,1648109,21315,4.56s,137.57us,0.00ns,140.71us,6.04us,136.94us,210.88us\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,1648109,22465,4.56s,133.36us,0.00ns,133.50us,1.63us,114.15us,145.22us\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,22608,4.56s,133.51us,0.00ns,132.66us,4.52us,114.33us,177.41us\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,1648109,98609,4.57s,30.34us,0.00ns,30.39us,516.00ns,29.95us,63.26us\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,1648109,100262,4.57s,29.83us,0.00ns,29.88us,321.00ns,29.49us,35.49us\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,1648109,3258,4.51s,919.97us,2.00ns,921.01us,5.08us,915.52us,1.04ms\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,1648109,2939,4.51s,1.02ms,0.00ns,1.02ms,3.45us,1.02ms,1.09ms\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,1648109,4601,4.51s,651.26us,0.00ns,652.09us,2.06us,650.80us,695.57us\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,1648109,39785,4.61s,74.78us,0.00ns,75.21us,3.71us,71.55us,104.75us\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,1648109,82980,4.56s,36.06us,0.00ns,36.11us,329.00ns,35.86us,61.14us\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,82517,4.56s,36.26us,0.00ns,36.32us,408.00ns,36.06us,61.19us\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,1648109,77970,4.56s,38.66us,0.00ns,38.43us,533.00ns,37.68us,50.73us\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,1648109,76762,4.56s,38.61us,0.00ns,39.04us,1.08us,37.45us,51.27us\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,1648109,2794,4.51s,1.07ms,2.00ns,1.07ms,5.25us,1.06ms,1.20ms\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,1648109,2786,4.51s,1.08ms,1.00ns,1.08ms,4.88us,1.06ms,1.11ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,1648109,24356,4.56s,122.89us,0.00ns,123.13us,1.34us,121.64us,144.53us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,1648109,22730,4.56s,133.49us,0.00ns,131.95us,5.55us,114.39us,255.31us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,22389,4.56s,133.67us,0.00ns,133.96us,1.70us,114.44us,158.14us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,1648109,101819,4.57s,29.35us,0.00ns,29.43us,409.00ns,29.02us,60.37us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,1648109,106042,4.57s,28.19us,0.00ns,28.25us,711.00ns,27.88us,154.04us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,1648109,3461,4.51s,873.48us,0.00ns,866.99us,10.65us,851.06us,915.14us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,1648109,2940,4.51s,1.02ms,0.00ns,1.02ms,2.31us,1.02ms,1.06ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,1648109,4601,4.51s,651.08us,0.00ns,652.04us,3.82us,650.69us,769.49us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,1648109,39620,4.61s,74.70us,0.00ns,75.52us,4.33us,71.84us,109.47us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,1648109,80208,4.56s,37.32us,0.00ns,37.37us,564.00ns,37.09us,154.92us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,79971,4.56s,37.38us,0.00ns,37.48us,592.00ns,37.16us,64.91us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,1648109,77366,4.56s,38.41us,0.00ns,38.74us,560.00ns,38.05us,54.02us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,1648109,77591,4.56s,38.78us,0.00ns,38.62us,545.00ns,37.83us,45.81us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,1648109,2998,4.51s,1.00ms,2.00ns,1.00ms,8.72us,0.99ms,1.04ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,1648109,3008,4.51s,1.00ms,1.00ns,1.00ms,4.25us,0.99ms,1.12ms\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,1648109,16657,4.51s,175.82us,0.00ns,180.07us,7.73us,175.10us,308.60us\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,1648109,22804,4.56s,133.26us,0.00ns,131.52us,5.99us,114.01us,274.80us\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,22952,4.56s,133.18us,0.00ns,130.67us,6.82us,113.99us,253.26us\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,1648109,106659,4.57s,28.09us,0.00ns,28.09us,289.00ns,27.68us,35.67us\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,1648109,85814,4.57s,30.85us,0.00ns,34.92us,5.55us,30.54us,50.13us\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,1648109,3602,4.51s,831.69us,1.00ns,832.86us,5.68us,823.17us,0.95ms\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,1648109,2940,4.51s,1.02ms,1.00ns,1.02ms,2.94us,1.02ms,1.07ms\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,1648109,4602,4.51s,651.18us,0.00ns,651.93us,1.96us,650.86us,682.18us\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,1648109,40503,4.61s,73.43us,0.00ns,73.87us,2.73us,69.73us,118.28us\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,1648109,79564,4.56s,37.61us,0.00ns,37.67us,553.00ns,37.42us,156.41us\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,79133,4.56s,37.82us,0.00ns,37.88us,299.00ns,37.63us,45.16us\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,1648109,76403,4.56s,39.29us,0.00ns,39.23us,757.00ns,38.36us,156.60us\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,1648109,63617,4.56s,48.06us,0.00ns,47.12us,1.48us,45.10us,56.11us\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,1648109,3135,4.51s,0.96ms,0.00ns,0.96ms,8.67us,940.04us,0.99ms\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,1648109,3130,4.51s,0.96ms,5.00ns,0.96ms,8.91us,941.94us,0.99ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,1648109,32458,4.56s,90.90us,0.00ns,92.38us,3.58us,89.39us,114.67us\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,1648109,23068,4.56s,130.16us,0.00ns,130.02us,2.76us,110.82us,143.50us\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,23035,4.56s,130.31us,0.00ns,130.19us,2.27us,111.04us,141.49us\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,1648109,102751,4.57s,29.11us,0.00ns,29.16us,301.00ns,28.83us,49.63us\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,1648109,102601,4.57s,29.14us,0.00ns,29.20us,621.00ns,28.83us,148.06us\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,1648109,3586,4.51s,836.27us,1.00ns,836.62us,3.86us,815.78us,0.95ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,1648109,2940,4.51s,1.02ms,0.00ns,1.02ms,4.21us,1.02ms,1.14ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,1648109,39486,4.61s,75.01us,0.00ns,75.77us,4.74us,72.19us,124.72us\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,1648109,79299,4.56s,37.75us,0.00ns,37.79us,509.00ns,37.53us,156.10us\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,79974,4.56s,37.43us,0.00ns,37.47us,502.00ns,37.20us,155.81us\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,1648109,282163,4.67s,10.58us,0.00ns,10.60us,324.00ns,10.45us,125.74us\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,1648109,278794,4.67s,10.61us,0.00ns,10.73us,206.00ns,10.45us,14.32us\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,1648109,3068,4.51s,0.98ms,6.00ns,0.98ms,5.95us,0.96ms,1.10ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,1648109,3073,4.51s,0.98ms,0.00ns,0.98ms,5.49us,0.97ms,1.02ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,1648109,23955,4.56s,124.29us,0.00ns,125.19us,3.46us,123.45us,255.51us\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,1648109,23365,4.51s,133.65us,0.00ns,128.37us,8.65us,114.55us,151.60us\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,22431,4.51s,133.75us,0.00ns,133.70us,2.29us,114.59us,146.44us\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,1648109,104213,4.57s,28.68us,0.00ns,28.75us,389.00ns,28.31us,56.60us\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,1648109,90522,4.57s,29.83us,0.00ns,33.10us,5.11us,29.33us,48.28us\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,1648109,3312,4.51s,900.08us,6.00ns,905.80us,11.16us,890.48us,0.96ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,1648109,2940,4.51s,1.02ms,0.00ns,1.02ms,2.60us,1.02ms,1.07ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,1648109,4591,4.51s,651.27us,0.00ns,653.46us,5.12us,650.86us,777.35us\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,1648109,39499,4.61s,75.51us,0.00ns,75.75us,2.64us,72.67us,109.33us\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,1648109,78711,4.56s,38.03us,0.00ns,38.07us,507.00ns,37.81us,156.41us\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,79023,4.56s,37.87us,0.00ns,37.92us,560.00ns,37.57us,155.38us\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,1648109,2839,4.51s,1.06ms,0.00ns,1.06ms,4.97us,1.05ms,1.08ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,1648109,2837,4.51s,1.06ms,0.00ns,1.06ms,7.46us,1.05ms,1.10ms\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,1648109,4345,4.51s,689.05us,0.00ns,690.54us,3.62us,687.15us,811.35us\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,1648109,16824,4.52s,177.76us,1.00ns,178.29us,3.41us,158.89us,194.67us\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,17586,4.52s,171.52us,0.00ns,170.55us,4.94us,152.39us,203.13us\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,1648109,37598,4.57s,79.61us,0.00ns,79.76us,900.00ns,78.72us,197.09us\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,1648109,57425,4.57s,52.08us,0.00ns,52.19us,543.00ns,51.33us,63.99us\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,1648109,3709,4.51s,807.67us,0.00ns,808.96us,5.22us,803.59us,928.18us\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,1648109,2778,4.51s,1.08ms,1.00ns,1.08ms,5.76us,1.07ms,1.21ms\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,1648109,4428,4.51s,676.67us,0.00ns,677.56us,2.68us,670.10us,719.20us\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,1648109,31646,4.56s,94.44us,0.00ns,94.57us,1.62us,91.72us,131.02us\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,1648109,37618,4.57s,79.10us,0.00ns,79.71us,2.44us,76.28us,100.20us\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,47972,4.56s,62.33us,0.00ns,62.51us,1.18us,61.15us,93.29us\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,1648109,3437,4.51s,870.81us,0.00ns,872.86us,8.70us,857.54us,0.99ms\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,1648109,3512,4.51s,853.66us,2.00ns,854.26us,5.76us,837.68us,0.97ms\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,1648109,11679,4.51s,256.39us,0.00ns,256.84us,4.36us,247.60us,388.92us\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,1648109,5580,4.51s,538.18us,0.00ns,537.60us,5.60us,520.81us,652.22us\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,6565,4.51s,451.63us,0.00ns,456.94us,13.06us,437.65us,598.60us\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,1648109,8745,4.51s,341.54us,0.00ns,343.05us,4.74us,328.59us,362.53us\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,1648109,10656,4.51s,280.98us,0.00ns,281.49us,1.73us,278.16us,305.03us\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,1648109,2429,4.51s,1.19ms,0.00ns,1.24ms,70.28us,1.18ms,1.39ms\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,1648109,2418,4.51s,1.24ms,2.00ns,1.24ms,10.34us,1.22ms,1.36ms\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,1648109,3344,4.51s,893.14us,366.00ns,897.36us,30.42us,862.76us,945.82us\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,1648109,6664,4.56s,449.50us,1.00ns,449.96us,5.73us,436.23us,477.19us\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,1648109,9120,4.51s,328.40us,1.00ns,328.92us,5.25us,318.71us,352.33us\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,11189,4.51s,267.96us,0.00ns,268.11us,4.18us,258.54us,385.58us\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,1648109,2490,4.51s,1.20ms,13.00ns,1.21ms,11.98us,1.19ms,1.29ms\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,1648109,2773,4.51s,1.08ms,0.00ns,1.08ms,6.49us,1.07ms,1.12ms\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,1648109,6298,4.51s,472.64us,1.00ns,476.30us,14.62us,464.87us,565.35us\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,1648109,13271,4.51s,229.71us,0.00ns,226.03us,7.25us,212.27us,244.67us\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13472,4.51s,227.51us,1.00ns,222.64us,9.32us,198.91us,245.71us\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,1648109,23375,4.56s,128.08us,0.00ns,128.31us,1.33us,126.77us,151.70us\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,1648109,37595,4.56s,76.33us,0.00ns,79.75us,5.12us,73.77us,104.29us\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,1648109,3047,4.51s,0.98ms,0.00ns,0.98ms,7.58us,0.97ms,1.03ms\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,1648109,2704,4.51s,1.11ms,2.00ns,1.11ms,8.15us,1.10ms,1.16ms\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,1648109,4333,4.51s,692.75us,0.00ns,692.48us,4.18us,682.32us,810.60us\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,1648109,22877,4.56s,130.71us,0.00ns,130.91us,2.55us,125.48us,173.05us\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,1648109,28417,4.56s,105.51us,0.00ns,105.53us,1.49us,102.52us,125.80us\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,35869,4.56s,83.40us,0.00ns,83.60us,1.44us,81.93us,203.01us\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,1648109,2705,4.51s,1.11ms,0.00ns,1.11ms,10.82us,1.09ms,1.20ms\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,1648109,2802,4.51s,1.07ms,4.00ns,1.07ms,10.06us,1.05ms,1.11ms\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,151305,798991,4.88s,3.69us,0.00ns,3.72us,239.00ns,3.49us,119.76us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,151305,251156,4.67s,12.04us,0.00ns,11.91us,619.00ns,10.30us,125.95us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,151305,254755,4.62s,11.89us,0.00ns,11.74us,539.00ns,10.15us,17.32us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,151305,1000000,4.84s,2.83us,0.00ns,2.83us,181.00ns,2.61us,122.00us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,151305,983879,4.94s,2.81us,0.00ns,3.02us,296.00ns,2.57us,9.82us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,151305,316051,4.67s,9.45us,0.00ns,9.46us,136.00ns,9.34us,17.71us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,151305,32042,4.56s,93.51us,0.00ns,93.59us,581.00ns,93.17us,113.14us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,151305,289057,4.92s,10.15us,0.00ns,10.18us,425.00ns,8.89us,125.60us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,151305,868370,4.94s,3.44us,0.00ns,3.42us,63.00ns,3.29us,10.57us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,151305,889925,4.94s,3.33us,0.00ns,3.34us,146.00ns,3.26us,128.78us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,151305,618802,4.83s,4.75us,0.00ns,4.82us,350.00ns,4.50us,120.82us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,151305,620309,4.78s,4.79us,0.00ns,4.81us,221.00ns,4.50us,14.09us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,151305,131662,4.62s,22.65us,0.00ns,22.74us,647.00ns,20.98us,28.32us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,151305,130195,4.57s,22.93us,0.00ns,23.01us,800.00ns,20.77us,39.94us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,151305,733518,4.88s,4.02us,0.00ns,4.06us,179.00ns,3.90us,120.54us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,151305,251050,4.67s,12.06us,0.00ns,11.92us,511.00ns,10.25us,17.63us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,151305,251304,4.62s,12.00us,0.00ns,11.91us,473.00ns,10.23us,18.48us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,151305,1000000,4.79s,2.81us,0.00ns,2.81us,64.00ns,2.61us,10.63us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,151305,1000000,4.79s,2.79us,0.00ns,2.79us,55.00ns,2.57us,8.45us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,151305,392168,4.72s,7.85us,0.00ns,7.62us,340.00ns,6.60us,13.10us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,151305,32024,4.56s,93.54us,0.00ns,93.65us,722.00ns,93.21us,121.86us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,151305,289853,4.92s,10.12us,0.00ns,10.16us,376.00ns,8.88us,17.52us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,151305,886968,4.99s,3.33us,0.00ns,3.35us,136.00ns,3.25us,118.95us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,151305,901292,4.96s,3.29us,0.00ns,3.29us,51.00ns,3.22us,8.82us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,151305,617759,4.83s,4.71us,0.00ns,4.83us,379.00ns,4.49us,59.30us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,151305,623546,4.78s,4.72us,0.00ns,4.78us,257.00ns,4.53us,10.18us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,151305,141911,4.57s,20.82us,0.00ns,21.10us,1.33us,17.71us,147.83us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,151305,144303,4.62s,20.40us,0.00ns,20.75us,1.27us,17.58us,136.55us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,500100,114484,4.56s,26.15us,0.00ns,26.17us,565.00ns,25.36us,142.07us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,500100,82954,4.56s,36.08us,0.00ns,36.13us,627.00ns,36.06us,155.78us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,500100,83086,4.56s,36.08us,0.00ns,36.07us,659.00ns,30.06us,149.04us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,500100,355891,4.72s,7.45us,0.00ns,8.40us,1.84us,7.01us,123.77us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,500100,392907,4.67s,7.43us,0.00ns,7.60us,1.06us,7.00us,29.24us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,500100,14885,4.51s,202.40us,0.00ns,201.52us,1.84us,199.56us,314.05us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,500100,9695,4.51s,309.09us,0.00ns,309.41us,1.91us,308.10us,423.18us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,500100,15181,4.51s,197.36us,0.00ns,197.58us,1.15us,197.18us,241.25us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,500100,134636,4.72s,22.18us,0.00ns,22.08us,1.55us,21.15us,37.92us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,500100,259044,4.67s,11.42us,0.00ns,11.55us,308.00ns,11.28us,128.87us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,500100,261031,4.67s,11.38us,0.00ns,11.46us,178.00ns,11.27us,16.14us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,500100,278029,4.62s,10.74us,0.00ns,10.76us,116.00ns,10.63us,18.20us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,500100,278077,4.67s,10.74us,0.00ns,10.76us,250.00ns,10.62us,127.44us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,500100,9304,4.51s,322.48us,0.00ns,322.43us,4.05us,314.84us,432.90us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,500100,9300,4.51s,322.49us,0.00ns,322.57us,3.80us,314.86us,447.53us\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,500100,4440,4.51s,674.97us,1.00ns,675.79us,3.73us,666.14us,796.53us\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,500100,4667,4.51s,644.43us,0.00ns,642.88us,4.52us,635.88us,687.07us\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,500100,10169,4.51s,289.34us,0.00ns,294.98us,15.30us,287.57us,441.67us\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,500100,3213,4.51s,932.93us,0.00ns,933.71us,5.98us,924.90us,0.96ms\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,500100,12422,4.51s,240.81us,0.00ns,241.48us,3.02us,236.52us,258.08us\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,500100,13706,4.51s,198.93us,0.00ns,218.87us,46.16us,198.22us,446.05us\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,500100,19476,4.51s,153.85us,0.00ns,154.00us,1.56us,153.83us,212.43us\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,500100,14468,4.51s,207.03us,0.00ns,207.33us,2.03us,204.59us,327.62us\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,500100,8380,4.56s,357.67us,4.00ns,357.84us,8.63us,345.62us,463.92us\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,500100,4161,4.51s,723.40us,0.00ns,721.10us,20.84us,653.61us,875.19us\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,500100,12086,4.51s,245.75us,0.00ns,248.19us,6.54us,241.75us,365.12us\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,500100,2641,4.51s,1.15ms,0.00ns,1.14ms,36.29us,1.07ms,1.28ms\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,500100,8675,4.51s,346.09us,0.00ns,345.79us,7.03us,336.44us,463.98us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,1001,1000000,630.26ms,81.00ns,0.00ns,81.00ns,11.00ns,76.00ns,2.71us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,679.73ms,88.00ns,0.00ns,88.00ns,118.00ns,73.00ns,117.41us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,630.23ms,87.00ns,0.00ns,86.00ns,11.00ns,73.00ns,3.23us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,1001,1000000,579.87ms,43.00ns,0.00ns,43.00ns,26.00ns,40.00ns,19.19us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,1001,1000000,532.09ms,33.00ns,0.00ns,33.00ns,8.00ns,30.00ns,3.08us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,1001,1000000,1.33s,417.00ns,0.00ns,418.00ns,24.00ns,399.00ns,5.47us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,1001,1000000,1.68s,626.00ns,0.00ns,628.00ns,26.00ns,605.00ns,4.87us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,1001,1000000,1.38s,406.00ns,0.00ns,407.00ns,56.00ns,399.00ns,52.11us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,1001,1000000,1.88s,157.00ns,0.00ns,158.00ns,14.00ns,148.00ns,5.18us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,1001,1000000,579.72ms,40.00ns,0.00ns,40.00ns,8.00ns,36.00ns,3.00us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,579.53ms,32.00ns,0.00ns,32.00ns,12.00ns,28.00ns,9.58us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,1001,1000000,579.44ms,30.00ns,0.00ns,30.00ns,37.00ns,27.00ns,22.28us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,1001,1000000,530.19ms,31.00ns,0.00ns,31.00ns,14.00ns,28.00ns,11.04us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,1001,1000000,1.83s,668.00ns,0.00ns,670.00ns,22.00ns,651.00ns,4.76us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,1001,1000000,1.83s,679.00ns,0.00ns,678.00ns,62.00ns,649.00ns,59.24us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,1001,1000000,3.24s,1.38us,0.00ns,1.38us,124.00ns,1.35us,119.82us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,3.04s,1.27us,0.00ns,1.27us,121.00ns,1.26us,118.14us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,1.79s,602.00ns,0.00ns,615.00ns,125.00ns,590.00ns,118.01us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,1001,1000000,3.84s,1.79us,0.00ns,1.80us,40.00ns,1.77us,10.20us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,1001,1000000,1.49s,489.00ns,0.00ns,491.00ns,24.00ns,469.00ns,9.46us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,1001,1000000,1.38s,415.00ns,0.00ns,439.00ns,77.00ns,410.00ns,5.98us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,1001,1000000,1.18s,325.00ns,0.00ns,326.00ns,118.00ns,320.00ns,116.89us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,1001,1000000,1.33s,432.00ns,0.00ns,432.00ns,21.00ns,416.00ns,6.01us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,1001,1000000,3.19s,826.00ns,0.00ns,828.00ns,84.00ns,787.00ns,78.13us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,1001,1000000,3.24s,1.34us,0.00ns,1.34us,44.00ns,1.27us,11.44us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,1.48s,496.00ns,0.00ns,497.00ns,23.00ns,479.00ns,3.13us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,1001,1000000,4.24s,2.32us,0.00ns,2.30us,93.00ns,2.16us,24.89us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,1001,1000000,1.89s,722.00ns,0.00ns,723.00ns,28.00ns,698.00ns,3.35us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,550004,34660,4.56s,86.34us,0.00ns,86.52us,1.02us,83.95us,105.77us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,550004,45449,4.56s,65.90us,0.00ns,65.97us,886.00ns,64.18us,180.27us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,550004,45435,4.56s,65.93us,0.00ns,65.99us,739.00ns,63.82us,79.68us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,550004,31098,4.56s,96.27us,0.00ns,96.44us,1.40us,95.07us,213.11us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,550004,31090,4.56s,96.28us,0.00ns,96.46us,1.62us,95.03us,213.67us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,550004,39382,4.56s,75.02us,0.00ns,76.14us,2.61us,74.97us,192.18us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,550004,8810,4.51s,340.32us,0.00ns,340.51us,936.00ns,339.17us,384.77us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,550004,13804,4.51s,217.04us,0.00ns,217.31us,1.71us,216.90us,336.19us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,550004,21100,4.56s,141.71us,0.00ns,142.00us,2.93us,137.91us,259.85us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,550004,23841,4.56s,124.27us,0.00ns,125.80us,5.81us,122.50us,156.72us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,550004,23790,4.51s,124.30us,0.00ns,126.07us,5.94us,122.68us,157.66us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,550004,39258,4.56s,76.39us,0.00ns,76.38us,0.97us,74.48us,191.57us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,550004,37967,4.56s,76.35us,0.00ns,78.97us,3.66us,74.34us,92.35us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,550004,37113,4.56s,80.80us,0.00ns,80.80us,5.02us,74.00us,128.17us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,550004,36950,4.56s,80.80us,0.00ns,81.15us,6.08us,74.01us,117.69us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,720057,69669,4.56s,43.00us,0.00ns,43.03us,475.00ns,42.97us,157.73us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,720057,57759,4.56s,51.95us,0.00ns,51.91us,1.53us,43.28us,134.04us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,720057,57649,4.56s,51.94us,0.00ns,52.00us,761.00ns,51.91us,174.73us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,720057,83156,4.56s,36.44us,0.00ns,36.04us,729.00ns,34.93us,51.04us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,720057,85937,4.56s,34.84us,0.00ns,34.88us,239.00ns,34.80us,49.93us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,720057,107529,4.57s,26.69us,0.00ns,27.86us,1.42us,26.66us,144.32us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,720057,6716,4.51s,446.23us,1.00ns,446.66us,2.76us,444.69us,565.04us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,720057,42001,4.61s,69.80us,0.00ns,71.24us,2.30us,68.90us,135.70us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,720057,85669,4.56s,34.94us,0.00ns,34.98us,460.00ns,34.89us,149.20us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,720057,85901,4.57s,34.84us,0.00ns,34.89us,289.00ns,34.80us,60.95us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,720057,11738,4.51s,255.16us,0.00ns,255.57us,2.11us,255.13us,393.95us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,720057,11741,4.51s,255.21us,0.00ns,255.49us,1.48us,255.18us,380.24us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,720057,114929,4.57s,25.53us,0.00ns,26.07us,0.97us,25.46us,141.63us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,720057,114570,4.57s,25.46us,0.00ns,26.15us,1.16us,25.40us,145.16us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,720057,2888,4.51s,1.04ms,0.00ns,1.04ms,3.79us,1.04ms,1.16ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,720057,692,4.51s,4.34ms,4.00ns,4.34ms,4.70us,4.34ms,4.45ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,720057,691,4.51s,4.34ms,0.00ns,4.34ms,10.95us,4.34ms,4.46ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,720057,5399,4.51s,554.23us,0.00ns,555.68us,4.70us,554.17us,692.64us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,720057,5410,4.51s,553.90us,0.00ns,554.51us,3.83us,553.83us,709.78us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,720057,5431,4.51s,556.73us,0.00ns,552.45us,8.51us,543.62us,606.49us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,720057,6736,4.51s,445.00us,0.00ns,445.37us,1.11us,443.95us,492.91us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,720057,2396,4.56s,1.25ms,1.00ns,1.25ms,10.06us,1.25ms,1.48ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,720057,5357,4.51s,561.72us,0.00ns,560.07us,3.15us,555.39us,585.25us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,720057,5342,4.51s,561.63us,0.00ns,561.59us,1.46us,555.06us,573.15us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,720057,2182,4.51s,1.38ms,14.00ns,1.38ms,14.01us,1.34ms,1.53ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,720057,2183,4.51s,1.38ms,0.00ns,1.37ms,15.10us,1.34ms,1.54ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,720057,3926,4.51s,761.62us,0.00ns,764.27us,10.24us,761.54us,0.97ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,720057,3916,4.51s,762.80us,1.00ns,766.16us,14.68us,761.39us,0.97ms\nmemmem/sliceslice/short,needles-in-needles,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,,440,4.56s,6.80ms,5.21us,6.82ms,266.90us,6.51ms,7.19ms\nmemmem/sliceslice/short,needles-in-needles,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,,198,4.56s,15.17ms,10.00ns,15.19ms,61.87us,15.13ms,15.65ms\nmemmem/sliceslice/short,needles-in-needles,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,,211,4.56s,14.27ms,0.00ns,14.26ms,99.88us,13.99ms,14.55ms\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,1000,34657,4.56s,86.27us,0.00ns,86.52us,1.28us,85.65us,208.00us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,1000,32942,4.56s,91.82us,0.00ns,91.04us,2.81us,86.96us,213.32us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,1000,34340,4.56s,88.27us,0.00ns,87.32us,2.54us,81.40us,208.08us\nmemmem/sliceslice/i386,needles-in-haystack,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,806771,194,4.56s,15.14ms,90.00ns,15.54ms,1.34ms,15.11ms,20.15ms\nmemmem/sliceslice/i386,needles-in-haystack,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,806771,169,4.56s,17.63ms,0.00ns,17.85ms,401.37us,17.60ms,18.60ms\nmemmem/sliceslice/i386,needles-in-haystack,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,806771,156,4.56s,19.31ms,162.00ns,19.31ms,45.10us,19.21ms,19.41ms\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,17705,4.51s,160.46us,0.00ns,169.41us,18.35us,151.86us,282.23us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,35956,4.56s,83.92us,0.00ns,83.40us,2.23us,77.39us,202.01us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,37008,4.56s,82.33us,0.00ns,81.03us,3.00us,75.72us,204.07us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613345,118192,4.57s,24.58us,0.00ns,25.35us,1.28us,24.23us,38.00us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613345,181786,4.62s,15.36us,0.00ns,16.47us,1.48us,14.97us,37.68us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613345,14260,4.51s,210.03us,0.00ns,210.36us,5.05us,192.44us,247.28us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613345,7708,4.51s,388.39us,0.00ns,389.20us,2.17us,386.74us,441.05us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,613345,12013,4.51s,249.88us,0.00ns,249.69us,1.02us,247.85us,273.08us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613345,58518,4.61s,49.90us,0.00ns,51.05us,3.55us,46.28us,175.48us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,150645,4.62s,19.79us,0.00ns,19.88us,626.00ns,19.09us,146.22us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,172203,4.62s,17.34us,0.00ns,17.39us,473.00ns,16.88us,141.96us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613345,11777,4.51s,253.76us,0.00ns,254.70us,5.46us,237.73us,375.28us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613345,12080,4.51s,247.40us,0.00ns,248.32us,6.29us,228.54us,367.37us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,10598,4.51s,276.80us,1.00ns,283.05us,15.82us,264.96us,409.22us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,25095,4.56s,119.56us,0.00ns,119.52us,1.62us,114.18us,241.73us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,29308,4.56s,101.90us,0.00ns,102.33us,1.59us,96.64us,225.12us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613345,29470,4.56s,101.34us,0.00ns,101.77us,2.05us,99.98us,221.72us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613345,71430,4.56s,44.08us,0.00ns,41.95us,4.16us,34.44us,165.87us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613345,11976,4.51s,249.96us,0.00ns,250.49us,6.03us,229.77us,272.60us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613345,7345,4.51s,408.13us,0.00ns,408.44us,2.59us,403.78us,529.65us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,613345,10550,4.51s,286.32us,0.00ns,284.33us,4.88us,275.30us,407.26us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613345,41163,4.56s,72.48us,0.00ns,72.69us,2.02us,68.41us,189.15us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,40956,4.56s,72.98us,0.00ns,73.21us,1.64us,70.80us,188.97us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,73088,4.56s,40.57us,0.00ns,41.01us,1.67us,39.00us,161.29us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613345,8763,4.51s,341.25us,0.00ns,342.34us,6.81us,327.89us,468.20us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613345,9580,4.51s,312.90us,1.00ns,313.13us,6.74us,294.70us,433.06us\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,7667,4.51s,385.35us,0.00ns,391.28us,10.24us,378.76us,510.54us\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,2555,4.51s,1.17ms,0.00ns,1.17ms,7.67us,1.16ms,1.32ms\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3914,4.51s,753.30us,3.00ns,766.56us,38.91us,741.56us,946.25us\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613345,6867,4.51s,431.96us,0.00ns,436.85us,23.11us,427.17us,558.32us\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613345,6962,4.51s,423.35us,0.00ns,430.89us,10.71us,422.12us,549.75us\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613345,3094,4.51s,0.97ms,9.00ns,0.97ms,21.33us,888.96us,1.09ms\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613345,2658,4.51s,1.13ms,20.00ns,1.13ms,22.67us,1.07ms,1.21ms\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,613345,3190,4.51s,938.60us,8.00ns,940.46us,16.37us,920.45us,1.13ms\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613345,5783,4.56s,516.59us,0.00ns,518.60us,4.38us,506.53us,632.30us\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,6938,4.51s,418.42us,22.00ns,432.42us,32.33us,410.18us,612.76us\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,7694,4.51s,388.49us,0.00ns,389.93us,5.38us,384.84us,510.41us\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613345,2081,4.51s,1.43ms,0.00ns,1.44ms,35.32us,1.41ms,1.66ms\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613345,2911,4.51s,1.03ms,0.00ns,1.03ms,22.16us,1.00ms,1.17ms\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613402,14121,4.51s,211.41us,0.00ns,212.43us,3.15us,206.70us,334.98us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613402,27779,4.56s,108.45us,0.00ns,107.97us,3.77us,99.81us,244.93us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613402,28924,4.56s,102.51us,0.00ns,103.69us,3.32us,96.67us,219.73us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613402,100126,4.57s,29.87us,0.00ns,29.93us,469.00ns,29.41us,146.18us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613402,194476,4.62s,15.24us,0.00ns,15.39us,578.00ns,14.81us,133.24us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613402,6975,4.51s,429.54us,0.00ns,430.12us,3.18us,427.73us,561.65us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613402,7750,4.51s,387.17us,1.00ns,387.07us,1.33us,384.97us,428.18us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,613402,11985,4.51s,249.06us,0.00ns,250.29us,2.18us,248.70us,364.38us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613402,69167,4.62s,41.66us,0.00ns,43.16us,2.83us,39.47us,71.10us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613402,115740,4.57s,25.77us,0.00ns,25.89us,636.00ns,24.93us,36.93us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613402,160628,4.62s,18.34us,0.00ns,18.64us,641.00ns,17.89us,23.51us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613402,5983,4.51s,501.11us,0.00ns,501.41us,4.39us,491.99us,623.11us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613402,6111,4.51s,490.42us,0.00ns,490.90us,4.53us,481.55us,610.28us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613402,10517,4.51s,283.50us,0.00ns,285.24us,6.38us,278.19us,403.50us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613402,13091,4.51s,228.99us,0.00ns,229.14us,2.57us,223.31us,256.00us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13330,4.51s,224.80us,0.00ns,225.03us,4.38us,216.11us,353.67us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613402,39918,4.56s,74.92us,0.00ns,75.12us,1.12us,73.94us,100.68us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613402,77838,4.57s,37.48us,0.00ns,38.50us,2.33us,35.51us,152.75us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613402,6322,4.51s,474.28us,0.00ns,474.55us,2.65us,470.85us,592.59us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613402,7312,4.51s,409.99us,0.00ns,410.31us,1.99us,407.11us,452.96us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,613402,10972,4.51s,274.61us,0.00ns,273.38us,3.00us,262.48us,391.48us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613402,42236,4.61s,69.73us,0.00ns,70.84us,4.80us,66.48us,100.06us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613402,51391,4.56s,58.14us,0.00ns,58.34us,1.37us,56.33us,176.72us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613402,77530,4.56s,38.37us,0.00ns,38.66us,0.98us,37.68us,70.82us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613402,5569,4.51s,539.18us,0.00ns,538.74us,6.17us,524.25us,646.51us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613402,5861,4.51s,511.72us,0.00ns,511.87us,3.94us,502.69us,537.87us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613402,14825,4.51s,198.86us,0.00ns,202.33us,8.96us,195.34us,313.99us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613402,4651,4.51s,644.45us,0.00ns,645.11us,5.48us,632.43us,763.86us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613402,6528,4.51s,454.57us,5.00ns,459.52us,17.19us,439.55us,528.34us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613402,13316,4.51s,221.73us,1.00ns,225.26us,10.49us,220.70us,364.59us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613402,13155,4.51s,231.76us,0.00ns,228.03us,10.71us,216.33us,247.44us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613402,4712,4.51s,621.29us,11.00ns,636.75us,28.37us,601.81us,731.79us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613402,3877,4.51s,770.83us,0.00ns,773.79us,9.45us,757.85us,823.41us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,613402,4766,4.51s,617.97us,1.00ns,629.44us,36.62us,539.43us,836.94us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613402,7342,4.56s,408.20us,1.00ns,408.42us,2.88us,402.08us,535.86us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613402,13270,4.51s,223.70us,20.00ns,226.05us,11.60us,216.69us,257.44us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613402,15195,4.51s,197.30us,0.00ns,197.40us,591.00ns,196.39us,205.19us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613402,3631,4.51s,821.64us,0.00ns,826.38us,15.30us,808.21us,908.17us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613402,4760,4.51s,627.75us,2.00ns,630.28us,11.19us,619.36us,711.34us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613427,21734,4.51s,137.98us,0.00ns,138.00us,1.05us,135.52us,252.89us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613427,52519,4.56s,56.98us,0.00ns,57.09us,3.52us,49.66us,69.54us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613427,54618,4.56s,55.97us,0.00ns,54.89us,3.31us,47.28us,170.25us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613427,110707,4.57s,26.96us,0.00ns,27.06us,640.00ns,26.56us,162.35us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613427,195231,4.62s,15.23us,0.00ns,15.33us,418.00ns,14.65us,132.62us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613427,23367,4.51s,128.09us,0.00ns,128.35us,1.69us,125.24us,142.62us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613427,7491,4.51s,400.57us,0.00ns,400.47us,1.46us,397.06us,432.25us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,613427,11922,4.51s,251.51us,0.00ns,251.60us,1.36us,249.06us,304.04us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613427,90166,4.67s,32.98us,0.00ns,33.07us,628.00ns,31.44us,47.65us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613427,125205,4.57s,23.82us,0.00ns,23.93us,600.00ns,22.77us,30.93us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613427,161283,4.57s,18.46us,0.00ns,18.56us,406.00ns,18.04us,23.81us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613427,20576,4.52s,145.25us,0.00ns,145.76us,3.19us,141.63us,181.28us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613427,21691,4.56s,137.94us,0.00ns,138.27us,1.27us,134.39us,176.33us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613427,12956,4.51s,227.11us,1.00ns,231.52us,14.25us,218.05us,388.70us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613427,25981,4.56s,117.02us,0.00ns,115.44us,2.79us,108.86us,130.56us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613427,28044,4.56s,107.45us,0.00ns,106.94us,3.26us,100.33us,131.95us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613427,47756,4.56s,62.40us,1.00ns,62.78us,1.23us,61.47us,184.09us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613427,103885,4.56s,28.31us,0.00ns,28.83us,1.61us,27.23us,43.72us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613427,14704,4.51s,204.31us,1.00ns,204.00us,3.63us,192.75us,316.95us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613427,7439,4.51s,403.03us,0.00ns,403.29us,1.91us,399.43us,438.91us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,613427,11291,4.51s,266.29us,0.00ns,265.68us,3.15us,260.26us,382.74us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613427,53596,4.61s,55.57us,0.00ns,55.78us,1.61us,51.33us,83.25us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613427,58423,4.56s,51.44us,0.00ns,51.31us,1.31us,48.45us,168.31us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613427,88072,4.56s,33.03us,0.00ns,34.03us,1.61us,31.66us,42.23us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613427,11892,4.51s,251.92us,0.00ns,252.25us,3.72us,242.67us,268.59us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613427,12962,4.51s,231.50us,0.00ns,231.42us,3.00us,223.55us,347.62us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613427,31454,4.56s,94.93us,0.00ns,95.35us,1.95us,93.67us,118.62us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613427,10793,4.51s,277.61us,0.00ns,277.94us,2.28us,272.30us,394.41us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613427,14024,4.51s,212.22us,0.00ns,213.90us,5.94us,206.65us,242.83us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613427,22406,4.51s,133.50us,0.00ns,133.86us,3.26us,128.42us,263.91us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613427,27272,4.56s,109.59us,0.00ns,109.97us,1.99us,108.74us,133.39us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613427,5976,4.51s,485.61us,2.00ns,501.98us,25.47us,472.68us,616.22us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613427,5777,4.51s,518.26us,0.00ns,519.35us,4.46us,511.36us,567.39us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,613427,7912,4.51s,370.04us,1.00ns,379.16us,15.53us,363.45us,487.22us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613427,18446,4.56s,162.06us,0.00ns,162.44us,2.13us,158.57us,278.16us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613427,22981,4.56s,128.94us,0.00ns,130.51us,3.87us,126.49us,247.58us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613427,29933,4.56s,99.74us,0.00ns,100.19us,2.36us,98.57us,229.90us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613427,5703,4.51s,523.03us,0.00ns,526.02us,9.69us,515.74us,593.78us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613427,6632,4.51s,451.32us,0.00ns,452.33us,5.19us,444.80us,499.73us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,76614,4.56s,38.73us,0.00ns,39.12us,1.15us,36.94us,48.75us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,67737,4.56s,44.59us,0.00ns,44.25us,1.67us,37.19us,49.48us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,67136,4.56s,44.58us,0.00ns,44.65us,336.00ns,44.54us,69.82us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613345,333947,4.67s,9.05us,0.00ns,8.95us,313.00ns,8.61us,127.12us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613345,333551,4.67s,9.05us,0.00ns,8.96us,403.00ns,8.58us,127.44us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613345,11732,4.51s,253.95us,1.00ns,255.69us,9.32us,235.23us,291.31us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613345,7900,4.51s,379.14us,0.00ns,379.73us,1.91us,377.98us,496.42us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,613345,12377,4.51s,242.05us,0.00ns,242.36us,1.37us,241.89us,286.48us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613345,111098,4.67s,27.16us,0.00ns,26.82us,1.33us,25.92us,147.32us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,222904,4.62s,13.46us,0.00ns,13.43us,175.00ns,13.18us,38.70us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,224395,4.62s,13.30us,0.00ns,13.34us,383.00ns,13.19us,133.27us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,613345,216617,4.62s,13.81us,0.00ns,13.82us,455.00ns,13.14us,133.88us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,613345,184916,4.62s,16.03us,0.00ns,16.19us,402.00ns,15.59us,21.73us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613345,8832,4.51s,339.29us,2.00ns,339.64us,5.94us,323.56us,358.52us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613345,8834,4.51s,339.20us,1.00ns,339.58us,6.23us,321.09us,456.17us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,69680,4.56s,42.69us,0.00ns,43.02us,1.00us,41.02us,56.84us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,59847,4.56s,52.26us,0.00ns,50.09us,3.33us,45.10us,170.29us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,61598,4.56s,50.90us,0.00ns,48.67us,3.31us,43.75us,61.56us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613345,183646,4.62s,17.96us,0.00ns,16.30us,2.22us,13.29us,134.49us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613345,247006,4.67s,11.27us,0.00ns,12.11us,1.50us,10.98us,19.07us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613345,22090,4.51s,135.45us,1.00ns,135.78us,4.63us,121.34us,250.60us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613345,7908,4.51s,379.13us,0.00ns,379.33us,1.26us,378.05us,418.97us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,613345,12366,4.51s,242.02us,0.00ns,242.57us,2.52us,241.71us,313.24us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613345,83046,4.67s,35.67us,0.00ns,35.94us,1.26us,34.07us,44.36us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,219669,4.62s,13.61us,0.00ns,13.62us,369.00ns,13.45us,131.66us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,219446,4.62s,13.62us,0.00ns,13.64us,117.00ns,13.48us,21.17us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,613345,221639,4.62s,13.44us,0.00ns,13.50us,234.00ns,13.20us,26.05us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,613345,186364,4.62s,15.95us,0.00ns,16.06us,340.00ns,15.71us,20.34us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613345,16383,4.51s,182.37us,0.00ns,183.07us,4.70us,171.02us,206.10us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613345,16189,4.51s,184.59us,0.00ns,185.27us,5.26us,171.56us,308.09us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,57949,4.56s,51.68us,0.00ns,51.73us,322.00ns,51.28us,65.93us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,68045,4.56s,44.65us,0.00ns,44.05us,2.07us,37.24us,57.67us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,67163,4.56s,44.66us,0.00ns,44.63us,693.00ns,37.29us,54.16us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613345,269284,4.62s,9.53us,0.00ns,11.11us,2.37us,8.83us,23.05us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613345,305164,4.67s,9.08us,0.00ns,9.80us,1.94us,8.60us,18.66us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613345,21831,4.51s,136.78us,0.00ns,137.39us,3.13us,126.61us,168.96us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613345,7895,4.51s,379.67us,0.00ns,379.98us,2.02us,378.43us,501.74us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,613345,12379,4.51s,242.05us,0.00ns,242.33us,1.22us,241.88us,285.90us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613345,110893,4.67s,27.18us,0.00ns,26.87us,1.39us,25.93us,142.49us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,224657,4.62s,13.30us,0.00ns,13.32us,364.00ns,13.18us,130.25us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,224487,4.62s,13.29us,0.00ns,13.33us,162.00ns,13.16us,18.37us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,613345,225356,4.62s,13.18us,0.00ns,13.28us,226.00ns,13.04us,17.86us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,613345,226806,4.62s,13.17us,0.00ns,13.20us,146.00ns,13.04us,33.47us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613345,18933,4.51s,157.97us,0.00ns,158.41us,5.62us,144.81us,271.92us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613345,18788,4.51s,159.10us,0.00ns,159.64us,4.88us,146.03us,180.96us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,11991,4.51s,249.79us,0.00ns,250.16us,1.53us,249.35us,288.11us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,33538,4.56s,90.52us,0.00ns,89.41us,1.67us,79.62us,97.97us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,34293,4.56s,87.69us,0.00ns,87.44us,1.06us,79.44us,95.86us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613345,333381,4.67s,9.07us,0.00ns,8.97us,368.00ns,8.59us,129.28us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613345,272068,4.67s,11.05us,0.00ns,11.00us,171.00ns,10.70us,16.46us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613345,6808,4.51s,438.03us,2.00ns,440.66us,10.23us,421.67us,576.94us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613345,7836,4.51s,382.46us,1.00ns,382.84us,1.21us,381.96us,415.36us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,613345,12328,4.51s,242.04us,0.00ns,243.32us,2.73us,241.81us,366.39us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613345,153930,4.72s,19.33us,0.00ns,19.30us,517.00ns,18.64us,45.81us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,215106,4.62s,13.82us,0.00ns,13.91us,362.00ns,13.32us,128.03us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,223808,4.62s,13.29us,0.00ns,13.37us,417.00ns,13.17us,131.58us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,613345,226720,4.62s,13.18us,0.00ns,13.20us,132.00ns,13.06us,35.83us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,613345,226932,4.62s,13.18us,0.00ns,13.19us,99.00ns,13.06us,22.26us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613345,6933,4.51s,432.33us,0.00ns,432.69us,5.73us,420.50us,557.82us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613345,6873,4.51s,436.23us,0.00ns,436.48us,5.98us,420.94us,559.87us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,28,1000000,529.80ms,22.00ns,0.00ns,22.00ns,13.00ns,19.00ns,8.85us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,529.31ms,24.00ns,0.00ns,24.00ns,37.00ns,22.00ns,18.21us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,547.83ms,19.00ns,0.00ns,19.00ns,29.00ns,17.00ns,20.65us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,28,1000000,530.28ms,26.00ns,0.00ns,26.00ns,33.00ns,23.00ns,20.57us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,28,1000000,529.62ms,15.00ns,0.00ns,15.00ns,3.00ns,13.00ns,2.23us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,28,1000000,479.76ms,12.00ns,0.00ns,12.00ns,24.00ns,11.00ns,17.57us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,28,1000000,529.73ms,23.00ns,0.00ns,23.00ns,7.00ns,21.00ns,2.56us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,28,1000000,529.41ms,21.00ns,0.00ns,21.00ns,6.00ns,19.00ns,3.18us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,28,1000000,1.78s,104.00ns,0.00ns,104.00ns,15.00ns,99.00ns,10.14us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,529.98ms,25.00ns,0.00ns,25.00ns,15.00ns,23.00ns,10.56us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,479.67ms,15.00ns,0.00ns,15.00ns,11.00ns,13.00ns,9.45us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,28,1000000,479.51ms,16.00ns,0.00ns,16.00ns,31.00ns,14.00ns,21.70us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,28,1000000,479.67ms,12.00ns,0.00ns,12.00ns,1.00ns,10.00ns,311.00ns\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,28,1000000,529.80ms,28.00ns,0.00ns,28.00ns,13.00ns,25.00ns,11.58us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,28,1000000,529.74ms,28.00ns,0.00ns,28.00ns,7.00ns,25.00ns,4.51us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,28,1000000,529.85ms,22.00ns,0.00ns,22.00ns,13.00ns,20.00ns,7.89us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,529.25ms,24.00ns,0.00ns,24.00ns,16.00ns,22.00ns,14.14us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,529.90ms,19.00ns,0.00ns,19.00ns,39.00ns,16.00ns,21.38us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,28,1000000,529.64ms,27.00ns,0.00ns,27.00ns,26.00ns,24.00ns,22.40us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,28,1000000,479.86ms,15.00ns,0.00ns,15.00ns,6.00ns,13.00ns,3.48us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,28,1000000,479.23ms,13.00ns,0.00ns,13.00ns,25.00ns,11.00ns,17.09us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,28,1000000,534.57ms,24.00ns,0.00ns,24.00ns,8.00ns,21.00ns,4.26us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,28,1000000,529.17ms,21.00ns,0.00ns,21.00ns,6.00ns,19.00ns,2.84us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,28,1000000,1.78s,104.00ns,0.00ns,105.00ns,11.00ns,100.00ns,2.88us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,529.74ms,26.00ns,0.00ns,26.00ns,29.00ns,23.00ns,23.54us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,479.23ms,15.00ns,0.00ns,15.00ns,43.00ns,13.00ns,19.12us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,28,1000000,479.64ms,14.00ns,0.00ns,14.00ns,38.00ns,12.00ns,20.12us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,28,1000000,529.31ms,12.00ns,0.00ns,12.00ns,14.00ns,10.00ns,13.78us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,28,1000000,530.13ms,27.00ns,0.00ns,30.00ns,129.00ns,25.00ns,119.81us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,28,1000000,529.80ms,26.00ns,0.00ns,27.00ns,7.00ns,24.00ns,3.39us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,28,1000000,629.63ms,22.00ns,0.00ns,22.00ns,42.00ns,19.00ns,20.61us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,529.89ms,24.00ns,0.00ns,24.00ns,12.00ns,22.00ns,9.60us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,529.32ms,19.00ns,0.00ns,19.00ns,23.00ns,17.00ns,21.19us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,28,1000000,529.47ms,26.00ns,0.00ns,26.00ns,10.00ns,23.00ns,6.61us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,28,1000000,479.39ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,2.74us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,28,1000000,529.45ms,13.00ns,0.00ns,13.00ns,4.00ns,11.00ns,2.07us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,28,1000000,529.78ms,24.00ns,0.00ns,24.00ns,8.00ns,22.00ns,6.20us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,28,1000000,529.89ms,21.00ns,0.00ns,21.00ns,6.00ns,19.00ns,3.22us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,28,1000000,1.73s,104.00ns,0.00ns,105.00ns,12.00ns,100.00ns,3.27us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,629.82ms,26.00ns,0.00ns,26.00ns,42.00ns,23.00ns,22.48us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,529.67ms,15.00ns,0.00ns,15.00ns,33.00ns,13.00ns,18.19us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,28,1000000,529.46ms,14.00ns,0.00ns,14.00ns,37.00ns,12.00ns,21.14us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,28,1000000,529.80ms,12.00ns,0.00ns,12.00ns,6.00ns,10.00ns,2.60us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,28,1000000,535.47ms,23.00ns,0.00ns,24.00ns,5.00ns,21.00ns,2.39us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,28,1000000,580.10ms,24.00ns,0.00ns,24.00ns,7.00ns,21.00ns,2.96us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,28,1000000,579.96ms,21.00ns,0.00ns,22.00ns,30.00ns,18.00ns,20.34us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,529.84ms,24.00ns,0.00ns,24.00ns,33.00ns,22.00ns,15.38us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,529.60ms,19.00ns,0.00ns,19.00ns,34.00ns,17.00ns,19.21us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,28,1000000,529.66ms,26.00ns,0.00ns,27.00ns,22.00ns,24.00ns,13.48us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,28,1000000,529.65ms,15.00ns,0.00ns,15.00ns,6.00ns,13.00ns,3.74us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,28,1000000,579.77ms,19.00ns,0.00ns,19.00ns,25.00ns,16.00ns,14.58us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,28,1000000,530.06ms,25.00ns,0.00ns,25.00ns,5.00ns,22.00ns,2.58us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,28,1000000,529.76ms,21.00ns,0.00ns,22.00ns,6.00ns,19.00ns,3.02us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,28,1000000,1.78s,104.00ns,0.00ns,104.00ns,10.00ns,99.00ns,3.11us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,529.67ms,26.00ns,0.00ns,26.00ns,41.00ns,24.00ns,21.12us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,529.67ms,15.00ns,0.00ns,15.00ns,38.00ns,13.00ns,20.63us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,28,1000000,579.60ms,14.00ns,0.00ns,14.00ns,33.00ns,12.00ns,22.88us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,28,1000000,529.65ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,3.57us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,28,1000000,529.65ms,25.00ns,0.00ns,26.00ns,29.00ns,23.00ns,20.23us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,28,1000000,580.16ms,25.00ns,0.00ns,25.00ns,27.00ns,23.00ns,14.38us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613402,26085,4.56s,114.06us,0.00ns,114.98us,3.15us,111.65us,149.97us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613402,22136,4.51s,136.09us,0.00ns,135.49us,2.04us,131.20us,149.98us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613402,22083,4.51s,136.14us,0.00ns,135.82us,1.72us,131.08us,148.66us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613402,329515,4.67s,9.11us,0.00ns,9.07us,237.00ns,8.62us,14.47us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613402,333780,4.67s,9.06us,0.00ns,8.96us,362.00ns,8.59us,125.89us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613402,15618,4.51s,191.95us,0.00ns,192.06us,615.00ns,191.29us,222.34us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613402,7885,4.51s,379.23us,0.00ns,380.48us,3.65us,378.05us,427.14us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613402,111184,4.67s,27.17us,0.00ns,26.79us,1.12us,25.93us,63.51us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613402,218130,4.62s,13.66us,0.00ns,13.72us,164.00ns,13.53us,24.48us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613402,216778,4.62s,13.78us,0.00ns,13.80us,144.00ns,13.61us,20.12us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,613402,66373,4.56s,45.19us,0.00ns,45.16us,2.78us,41.27us,166.23us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,613402,68506,4.56s,42.73us,0.00ns,43.76us,2.25us,41.53us,67.16us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613402,12294,4.51s,243.27us,0.00ns,243.98us,2.99us,238.29us,261.66us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613402,12296,4.51s,243.54us,1.00ns,243.95us,2.33us,239.40us,360.61us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,42,1000000,580.29ms,26.00ns,0.00ns,26.00ns,8.00ns,24.00ns,4.21us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,529.57ms,20.00ns,0.00ns,20.00ns,26.00ns,18.00ns,14.84us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,529.81ms,19.00ns,0.00ns,19.00ns,35.00ns,17.00ns,23.47us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,42,1000000,529.29ms,33.00ns,0.00ns,33.00ns,11.00ns,31.00ns,6.42us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,42,1000000,529.60ms,15.00ns,0.00ns,15.00ns,4.00ns,13.00ns,3.64us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,42,1000000,479.87ms,12.00ns,0.00ns,12.00ns,34.00ns,10.00ns,23.29us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,42,1000000,529.87ms,29.00ns,0.00ns,29.00ns,6.00ns,27.00ns,2.26us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,42,1000000,1.78s,106.00ns,0.00ns,107.00ns,7.00ns,102.00ns,2.27us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,529.93ms,32.00ns,0.00ns,32.00ns,9.00ns,29.00ns,4.05us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,530.03ms,15.00ns,0.00ns,16.00ns,25.00ns,13.00ns,15.37us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,42,1000000,529.89ms,14.00ns,0.00ns,14.00ns,34.00ns,12.00ns,20.62us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,42,1000000,529.59ms,13.00ns,0.00ns,13.00ns,42.00ns,11.00ns,24.67us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,42,1000000,579.93ms,42.00ns,0.00ns,42.00ns,9.00ns,36.00ns,3.18us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,42,1000000,579.50ms,41.00ns,0.00ns,41.00ns,10.00ns,36.00ns,3.79us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613427,100434,4.57s,29.56us,0.00ns,29.83us,896.00ns,28.42us,147.72us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613427,62510,4.56s,49.49us,0.00ns,47.96us,2.96us,42.21us,53.31us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613427,63688,4.56s,49.39us,0.00ns,47.07us,3.39us,42.08us,58.43us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613427,311522,4.67s,9.61us,0.00ns,9.60us,130.00ns,9.35us,17.02us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613427,295011,4.68s,9.60us,0.00ns,10.13us,1.58us,9.35us,35.32us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613427,42775,4.57s,69.78us,0.00ns,70.10us,1.10us,68.97us,186.08us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613427,7907,4.51s,379.23us,0.00ns,379.38us,1.05us,378.03us,424.48us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,613427,12380,4.51s,242.06us,0.00ns,242.31us,1.64us,241.88us,356.78us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613427,106787,4.66s,27.67us,0.00ns,27.91us,1.81us,26.55us,51.93us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613427,221087,4.62s,13.45us,0.00ns,13.54us,416.00ns,13.31us,131.23us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613427,218523,4.62s,13.50us,0.00ns,13.69us,290.00ns,13.32us,36.72us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,613427,216730,4.62s,13.91us,0.00ns,13.81us,216.00ns,13.42us,19.33us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,613427,217868,4.62s,13.61us,0.00ns,13.73us,218.00ns,13.43us,18.39us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613427,36404,4.56s,82.03us,0.00ns,82.36us,1.31us,79.64us,95.06us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613427,36626,4.56s,81.66us,0.00ns,81.86us,1.24us,79.10us,95.90us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,31,1000000,579.61ms,24.00ns,0.00ns,24.00ns,7.00ns,22.00ns,2.04us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,529.69ms,24.00ns,0.00ns,24.00ns,19.00ns,22.00ns,19.29us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,529.78ms,19.00ns,0.00ns,19.00ns,35.00ns,17.00ns,21.55us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,31,1000000,530.13ms,27.00ns,0.00ns,27.00ns,32.00ns,24.00ns,19.42us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,31,1000000,529.95ms,15.00ns,0.00ns,15.00ns,5.00ns,13.00ns,3.64us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,31,1000000,579.98ms,12.00ns,0.00ns,12.00ns,4.00ns,10.00ns,2.80us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,31,1000000,529.90ms,24.00ns,0.00ns,25.00ns,26.00ns,22.00ns,20.27us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,31,1000000,579.85ms,22.00ns,0.00ns,22.00ns,6.00ns,20.00ns,3.03us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,31,1000000,1.78s,103.00ns,0.00ns,104.00ns,12.00ns,99.00ns,3.86us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,580.03ms,27.00ns,0.00ns,27.00ns,31.00ns,24.00ns,20.16us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,480.02ms,15.00ns,0.00ns,15.00ns,32.00ns,13.00ns,21.64us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,31,1000000,529.93ms,16.00ns,0.00ns,16.00ns,31.00ns,14.00ns,20.40us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,31,1000000,580.12ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,2.77us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,31,1000000,529.90ms,31.00ns,0.00ns,32.00ns,8.00ns,28.00ns,3.49us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,31,1000000,529.99ms,31.00ns,0.00ns,31.00ns,9.00ns,28.00ns,6.90us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,86956,4.56s,33.67us,0.00ns,34.46us,2.76us,30.59us,62.83us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,67802,4.56s,45.62us,0.00ns,44.21us,3.00us,38.29us,165.55us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,67120,4.56s,45.61us,0.00ns,44.66us,2.53us,38.28us,56.72us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613345,333530,4.67s,8.95us,0.00ns,8.96us,311.00ns,8.63us,124.01us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613345,200273,4.62s,17.62us,0.00ns,14.95us,3.33us,10.71us,21.72us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613345,18679,4.51s,159.06us,0.00ns,160.57us,5.32us,150.56us,277.58us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613345,7898,4.51s,379.38us,0.00ns,379.82us,1.73us,378.79us,415.83us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,613345,12382,4.51s,242.05us,0.00ns,242.26us,830.00ns,241.87us,266.35us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613345,110558,4.67s,27.17us,0.00ns,26.95us,1.70us,25.93us,144.81us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,218705,4.62s,13.65us,0.00ns,13.69us,131.00ns,13.53us,25.14us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,219431,4.62s,13.63us,0.00ns,13.64us,116.00ns,13.51us,30.04us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,613345,212536,4.62s,14.11us,0.00ns,14.08us,459.00ns,13.28us,132.59us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,613345,218561,4.62s,13.72us,0.00ns,13.69us,271.00ns,13.27us,38.08us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613345,13683,4.51s,218.09us,0.00ns,219.22us,4.58us,209.85us,340.00us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613345,13701,4.51s,217.80us,0.00ns,218.92us,4.60us,208.21us,341.07us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,61198,4.56s,48.75us,0.00ns,48.98us,1.15us,46.95us,169.23us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,66308,4.56s,45.64us,0.00ns,45.21us,1.91us,38.30us,158.97us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,68258,4.56s,45.63us,0.00ns,43.91us,3.17us,38.30us,160.87us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613345,214446,4.62s,15.06us,0.00ns,13.96us,1.97us,10.36us,21.76us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613345,232945,4.62s,14.95us,0.00ns,12.85us,2.26us,10.35us,21.26us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613345,19530,4.51s,153.08us,1.00ns,153.58us,3.42us,141.93us,189.35us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613345,7897,4.51s,379.47us,0.00ns,379.89us,2.19us,378.43us,498.06us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,613345,12374,4.51s,242.05us,0.00ns,242.43us,1.25us,241.89us,287.37us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613345,109400,4.67s,27.29us,0.00ns,27.24us,1.17us,26.07us,40.48us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,223370,4.62s,13.39us,0.00ns,13.40us,265.00ns,13.25us,129.79us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,215781,4.62s,13.95us,0.00ns,13.87us,432.00ns,13.37us,132.84us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,613345,219569,4.62s,13.59us,0.00ns,13.63us,313.00ns,13.09us,38.13us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,613345,187989,4.62s,15.96us,0.00ns,15.92us,217.00ns,15.50us,43.23us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613345,15190,4.51s,196.61us,1.00ns,197.47us,5.68us,178.88us,225.01us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613345,15341,4.51s,194.67us,0.00ns,195.53us,4.81us,182.12us,308.30us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,184533,4.62s,16.18us,0.00ns,16.22us,278.00ns,15.60us,23.31us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,58190,4.56s,52.10us,0.00ns,51.52us,2.14us,45.11us,168.32us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,58661,4.56s,52.64us,0.00ns,51.11us,3.09us,45.48us,168.98us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613345,290372,4.62s,10.29us,0.00ns,10.30us,108.00ns,10.11us,26.13us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613345,257663,4.67s,10.27us,0.00ns,11.61us,2.17us,10.08us,128.08us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613345,33207,4.56s,90.53us,0.00ns,90.30us,4.06us,78.83us,210.78us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613345,7904,4.51s,379.13us,0.00ns,379.55us,2.27us,377.98us,497.28us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613345,106074,4.67s,28.10us,0.00ns,28.09us,1.37us,27.02us,41.60us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,213878,4.62s,13.97us,0.00ns,13.99us,288.00ns,13.82us,132.50us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,207814,4.62s,14.65us,0.00ns,14.40us,387.00ns,13.80us,39.99us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,613345,148610,4.62s,20.24us,0.00ns,20.15us,1.10us,18.96us,28.65us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,613345,141674,4.57s,20.26us,0.00ns,21.14us,2.17us,19.03us,137.73us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613345,19560,4.51s,153.10us,1.00ns,153.34us,3.24us,143.89us,164.84us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613345,19557,4.51s,153.20us,0.00ns,153.36us,3.40us,143.56us,273.24us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,161025,4.62s,18.58us,0.00ns,18.59us,125.00ns,18.49us,23.76us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,64404,4.56s,47.74us,0.00ns,46.55us,2.73us,40.43us,62.44us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,66613,4.56s,47.78us,0.00ns,45.00us,3.65us,40.49us,182.19us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613345,226919,4.62s,13.15us,0.00ns,13.19us,330.00ns,12.87us,128.36us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613345,234079,4.62s,12.78us,0.00ns,12.78us,189.00ns,12.52us,18.30us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613345,65065,4.56s,45.85us,0.00ns,46.07us,855.00ns,44.75us,63.50us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613345,7903,4.51s,379.02us,0.00ns,379.58us,1.55us,377.95us,422.60us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613345,130208,4.72s,22.95us,0.00ns,22.85us,537.00ns,22.34us,138.58us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,215581,4.62s,13.87us,0.00ns,13.88us,264.00ns,13.33us,35.28us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,226104,4.62s,13.21us,0.00ns,13.23us,427.00ns,12.81us,131.09us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,613345,142677,4.62s,20.39us,0.00ns,20.99us,2.08us,18.70us,40.83us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,613345,151307,4.62s,19.45us,0.00ns,19.79us,1.12us,19.12us,47.46us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613345,32149,4.56s,93.12us,0.00ns,93.28us,1.71us,89.84us,213.71us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613345,32172,4.56s,93.05us,0.00ns,93.21us,1.36us,89.81us,101.14us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,101176,4.57s,29.58us,0.00ns,29.62us,406.00ns,29.51us,145.18us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,67830,4.56s,45.35us,0.00ns,44.19us,2.77us,38.00us,67.95us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,67940,4.56s,45.35us,0.00ns,44.12us,2.80us,38.00us,53.46us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613345,218593,4.62s,13.57us,0.00ns,13.69us,332.00ns,13.28us,128.41us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613345,246714,4.62s,12.12us,0.00ns,12.13us,348.00ns,11.49us,127.79us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613345,62861,4.56s,47.59us,0.00ns,47.69us,593.00ns,46.25us,61.95us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613345,7908,4.51s,378.92us,0.00ns,379.34us,1.92us,377.85us,496.39us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613345,131669,4.72s,22.56us,0.00ns,22.58us,217.00ns,22.06us,44.41us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,121124,4.57s,25.15us,0.00ns,24.73us,864.00ns,23.51us,141.92us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,141822,4.57s,20.59us,0.00ns,21.12us,668.00ns,20.28us,28.67us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,613345,166109,4.57s,17.70us,0.00ns,18.03us,1.39us,17.28us,31.97us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,613345,162937,4.62s,18.03us,0.00ns,18.38us,1.42us,17.51us,33.09us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613345,34325,4.56s,87.38us,0.00ns,87.36us,1.72us,84.36us,207.48us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613345,34473,4.56s,86.96us,0.00ns,86.98us,1.46us,83.86us,98.40us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,28,1000000,580.01ms,30.00ns,0.00ns,31.00ns,6.00ns,28.00ns,2.57us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,530.87ms,33.00ns,0.00ns,34.00ns,31.00ns,31.00ns,17.74us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,530.32ms,22.00ns,0.00ns,23.00ns,27.00ns,20.00ns,18.96us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,28,1000000,530.05ms,27.00ns,0.00ns,27.00ns,7.00ns,24.00ns,3.86us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,28,1000000,529.93ms,16.00ns,0.00ns,17.00ns,6.00ns,14.00ns,3.62us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,28,1000000,530.01ms,23.00ns,0.00ns,23.00ns,17.00ns,21.00ns,15.18us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,28,1000000,529.53ms,22.00ns,0.00ns,23.00ns,35.00ns,20.00ns,23.21us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,28,1000000,529.93ms,21.00ns,0.00ns,21.00ns,17.00ns,19.00ns,15.88us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,28,1000000,1.78s,108.00ns,0.00ns,108.00ns,12.00ns,103.00ns,4.26us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,529.75ms,26.00ns,0.00ns,26.00ns,22.00ns,24.00ns,15.14us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,529.76ms,17.00ns,0.00ns,17.00ns,6.00ns,14.00ns,3.46us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,28,1000000,529.95ms,19.00ns,0.00ns,19.00ns,38.00ns,16.00ns,20.36us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,28,1000000,529.82ms,14.00ns,0.00ns,14.00ns,4.00ns,12.00ns,3.19us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,28,1000000,630.42ms,74.00ns,0.00ns,75.00ns,17.00ns,65.00ns,13.02us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,28,1000000,680.37ms,48.00ns,0.00ns,50.00ns,16.00ns,44.00ns,7.25us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,28,1000000,581.27ms,34.00ns,0.00ns,35.00ns,9.00ns,32.00ns,4.42us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,643.29ms,34.00ns,0.00ns,34.00ns,13.00ns,32.00ns,9.99us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,529.70ms,23.00ns,0.00ns,24.00ns,35.00ns,21.00ns,18.84us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,28,1000000,580.49ms,24.00ns,0.00ns,24.00ns,7.00ns,22.00ns,3.11us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,28,1000000,529.84ms,20.00ns,0.00ns,20.00ns,7.00ns,18.00ns,5.44us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,28,1000000,529.65ms,18.00ns,0.00ns,18.00ns,29.00ns,15.00ns,15.98us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,28,1000000,529.88ms,21.00ns,0.00ns,21.00ns,27.00ns,19.00ns,15.52us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,28,1000000,629.82ms,21.00ns,0.00ns,21.00ns,6.00ns,19.00ns,3.07us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,28,1000000,1.83s,130.00ns,0.00ns,131.00ns,72.00ns,123.00ns,71.06us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,529.58ms,24.00ns,0.00ns,24.00ns,20.00ns,21.00ns,19.11us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,529.78ms,19.00ns,0.00ns,19.00ns,7.00ns,17.00ns,3.64us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,28,1000000,529.92ms,17.00ns,0.00ns,17.00ns,28.00ns,15.00ns,19.21us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,28,1000000,580.16ms,15.00ns,0.00ns,15.00ns,3.00ns,13.00ns,2.41us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,28,1000000,580.08ms,44.00ns,0.00ns,44.00ns,19.00ns,40.00ns,12.58us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,28,1000000,579.65ms,30.00ns,0.00ns,31.00ns,7.00ns,28.00ns,3.10us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613402,33679,4.56s,89.04us,0.00ns,89.04us,840.00ns,85.17us,100.70us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613402,22323,4.51s,134.04us,0.00ns,134.36us,1.62us,133.10us,258.31us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613402,21666,4.51s,139.28us,0.00ns,138.44us,3.42us,130.55us,255.25us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613402,329214,4.67s,9.12us,0.00ns,9.08us,212.00ns,8.62us,20.57us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613402,298405,4.67s,9.08us,0.00ns,10.02us,2.13us,8.59us,124.80us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613402,17911,4.51s,167.23us,0.00ns,167.46us,2.40us,163.21us,184.51us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613402,7903,4.51s,379.15us,0.00ns,379.57us,1.81us,378.21us,494.37us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613402,110809,4.67s,27.17us,0.00ns,26.89us,1.47us,25.93us,142.02us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613402,212187,4.62s,14.25us,0.00ns,14.11us,431.00ns,13.54us,129.41us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613402,215090,4.62s,14.04us,0.00ns,13.92us,453.00ns,13.51us,133.87us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,613402,77413,4.56s,38.24us,0.00ns,38.72us,1.72us,36.80us,51.72us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,613402,85351,4.56s,34.39us,0.00ns,35.11us,2.44us,33.14us,71.52us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613402,14328,4.51s,208.78us,0.00ns,209.35us,2.37us,205.52us,226.20us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613402,14384,4.51s,208.30us,0.00ns,208.54us,1.50us,204.72us,221.49us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613402,19953,4.51s,150.35us,0.00ns,150.32us,1.51us,144.26us,169.16us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613402,22195,4.51s,134.87us,0.00ns,135.13us,1.95us,130.80us,252.76us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613402,22129,4.51s,134.97us,0.00ns,135.54us,1.85us,131.31us,252.03us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613402,278069,4.67s,9.47us,0.00ns,10.76us,2.20us,9.30us,122.90us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613402,312543,4.67s,9.58us,0.00ns,9.57us,114.00ns,9.38us,14.55us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613402,11528,4.51s,259.79us,0.00ns,260.21us,1.45us,258.15us,293.65us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613402,7897,4.51s,379.38us,0.00ns,379.86us,1.99us,378.82us,494.00us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,613402,12379,4.51s,242.05us,0.00ns,242.32us,1.47us,241.90us,359.49us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613402,109297,4.67s,27.22us,0.00ns,27.26us,1.36us,25.98us,166.74us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613402,214440,4.62s,14.08us,0.00ns,13.96us,425.00ns,13.53us,129.90us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613402,216171,4.62s,13.67us,0.00ns,13.85us,351.00ns,13.51us,127.93us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,613402,212843,4.62s,13.91us,0.00ns,14.06us,418.00ns,13.70us,129.61us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,613402,214581,4.62s,13.91us,0.00ns,13.95us,446.00ns,13.68us,155.16us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613402,9732,4.51s,308.03us,1.00ns,308.23us,2.66us,299.98us,327.49us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613402,9771,4.51s,306.58us,0.00ns,307.02us,2.90us,300.01us,425.16us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,42,1000000,580.07ms,40.00ns,0.00ns,40.00ns,7.00ns,37.00ns,3.16us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,530.11ms,26.00ns,0.00ns,26.00ns,23.00ns,24.00ns,22.71us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,529.68ms,23.00ns,0.00ns,23.00ns,33.00ns,21.00ns,18.10us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,42,1000000,529.93ms,36.00ns,0.00ns,36.00ns,19.00ns,33.00ns,12.52us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,42,1000000,530.30ms,19.00ns,0.00ns,19.00ns,5.00ns,17.00ns,2.56us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,42,1000000,580.12ms,29.00ns,0.00ns,30.00ns,6.00ns,26.00ns,3.00us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,42,1000000,529.80ms,29.00ns,0.00ns,29.00ns,18.00ns,27.00ns,12.28us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,42,1000000,1.73s,108.00ns,0.00ns,108.00ns,12.00ns,103.00ns,5.44us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,579.41ms,35.00ns,0.00ns,35.00ns,37.00ns,32.00ns,20.16us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,538.14ms,19.00ns,0.00ns,19.00ns,42.00ns,17.00ns,21.49us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,42,1000000,579.33ms,17.00ns,0.00ns,17.00ns,35.00ns,15.00ns,22.84us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,42,1000000,529.97ms,15.00ns,0.00ns,15.00ns,33.00ns,13.00ns,21.70us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,42,1000000,680.12ms,100.00ns,0.00ns,100.00ns,21.00ns,91.00ns,15.03us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,42,1000000,629.66ms,68.00ns,0.00ns,69.00ns,11.00ns,61.00ns,3.27us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,42,1000000,530.00ms,37.00ns,0.00ns,37.00ns,15.00ns,35.00ns,11.73us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,579.60ms,33.00ns,0.00ns,33.00ns,24.00ns,31.00ns,14.15us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,629.91ms,23.00ns,0.00ns,23.00ns,31.00ns,21.00ns,19.05us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,42,1000000,630.26ms,30.00ns,0.00ns,31.00ns,27.00ns,27.00ns,22.86us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,42,1000000,529.63ms,24.00ns,0.00ns,24.00ns,7.00ns,21.00ns,3.67us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,42,1000000,479.52ms,19.00ns,0.00ns,19.00ns,39.00ns,16.00ns,21.31us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,42,1000000,529.50ms,26.00ns,0.00ns,27.00ns,17.00ns,24.00ns,14.83us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,42,1000000,529.99ms,27.00ns,0.00ns,27.00ns,9.00ns,24.00ns,5.27us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,42,1000000,1.83s,125.00ns,0.00ns,126.00ns,11.00ns,120.00ns,2.52us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,530.06ms,30.00ns,0.00ns,30.00ns,16.00ns,27.00ns,12.86us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,580.04ms,23.00ns,0.00ns,23.00ns,34.00ns,21.00ns,21.37us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,42,1000000,529.87ms,16.00ns,0.00ns,16.00ns,33.00ns,14.00ns,21.13us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,42,1000000,529.75ms,15.00ns,0.00ns,15.00ns,6.00ns,13.00ns,4.59us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,42,1000000,580.42ms,59.00ns,0.00ns,60.00ns,13.00ns,53.00ns,7.64us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,42,1000000,579.89ms,41.00ns,0.00ns,41.00ns,6.00ns,37.00ns,3.30us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613427,147435,4.57s,20.12us,0.00ns,20.31us,842.00ns,18.66us,136.67us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613427,53935,4.56s,56.95us,0.00ns,55.59us,2.73us,50.50us,65.75us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613427,52899,4.56s,58.43us,0.00ns,56.68us,3.12us,50.56us,175.44us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613427,235768,4.62s,15.18us,0.00ns,12.69us,2.66us,9.82us,136.12us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613427,290710,4.67s,10.28us,0.00ns,10.29us,232.00ns,10.13us,125.16us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613427,34315,4.56s,87.21us,0.00ns,87.39us,1.23us,86.17us,215.06us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613427,7897,4.51s,379.17us,0.00ns,379.88us,2.55us,378.15us,502.85us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613427,108135,4.67s,27.75us,0.00ns,27.55us,862.00ns,26.60us,146.85us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613427,221747,4.62s,13.48us,0.00ns,13.50us,270.00ns,13.34us,127.38us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613427,214755,4.62s,14.06us,0.00ns,13.93us,488.00ns,13.33us,135.58us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,613427,145064,4.62s,19.92us,0.00ns,20.65us,2.16us,18.57us,141.90us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,613427,146597,4.62s,19.54us,0.00ns,20.43us,2.24us,18.74us,136.79us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613427,28273,4.56s,106.22us,0.00ns,106.08us,1.77us,102.76us,223.44us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613427,28551,4.56s,104.90us,0.00ns,105.04us,1.38us,102.86us,228.42us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613427,60901,4.56s,48.94us,0.00ns,49.22us,948.00ns,47.76us,66.38us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613427,52652,4.56s,57.03us,0.00ns,56.94us,1.43us,50.11us,191.91us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613427,52631,4.56s,57.38us,0.00ns,56.96us,2.22us,50.51us,70.50us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,613427,279706,4.67s,10.13us,0.00ns,10.69us,1.55us,9.98us,125.47us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,613427,270069,4.67s,10.12us,0.00ns,11.08us,1.92us,9.96us,129.59us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,613427,24212,4.51s,122.45us,0.00ns,123.87us,4.03us,119.99us,244.82us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,613427,7901,4.51s,379.21us,0.00ns,379.70us,1.58us,378.78us,496.22us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,613427,12369,4.51s,242.29us,0.00ns,242.53us,1.39us,242.02us,361.19us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,613427,108198,4.67s,27.55us,0.00ns,27.54us,1.19us,26.34us,146.11us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613427,219262,4.62s,13.81us,0.00ns,13.65us,463.00ns,13.17us,131.65us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613427,216124,4.62s,13.64us,0.00ns,13.85us,443.00ns,13.28us,131.00us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,613427,220497,4.62s,13.51us,0.00ns,13.57us,312.00ns,13.28us,129.18us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,613427,220430,4.62s,13.53us,0.00ns,13.58us,395.00ns,13.26us,130.09us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,613427,20201,4.51s,148.74us,0.00ns,148.46us,4.77us,137.92us,260.75us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,613427,20075,4.51s,149.60us,0.00ns,149.40us,4.48us,138.56us,270.29us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,31,1000000,529.95ms,33.00ns,0.00ns,33.00ns,6.00ns,31.00ns,2.59us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,529.99ms,26.00ns,0.00ns,26.00ns,24.00ns,24.00ns,21.58us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,529.72ms,22.00ns,0.00ns,23.00ns,23.00ns,21.00ns,12.83us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,31,1000000,530.25ms,30.00ns,0.00ns,30.00ns,7.00ns,28.00ns,3.09us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,31,1000000,529.70ms,26.00ns,0.00ns,26.00ns,7.00ns,24.00ns,4.52us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,31,1000000,579.95ms,23.00ns,0.00ns,23.00ns,21.00ns,21.00ns,16.42us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,31,1000000,529.75ms,23.00ns,0.00ns,24.00ns,14.00ns,21.00ns,12.08us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,31,1000000,1.78s,121.00ns,0.00ns,122.00ns,14.00ns,114.00ns,5.61us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,530.27ms,29.00ns,0.00ns,29.00ns,36.00ns,26.00ns,21.38us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,530.30ms,24.00ns,0.00ns,24.00ns,7.00ns,22.00ns,3.35us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,31,1000000,530.04ms,16.00ns,0.00ns,16.00ns,40.00ns,14.00ns,23.66us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,31,1000000,529.67ms,14.00ns,0.00ns,14.00ns,42.00ns,12.00ns,21.78us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,31,1000000,629.50ms,83.00ns,0.00ns,84.00ns,12.00ns,76.00ns,4.68us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,31,1000000,580.05ms,56.00ns,0.00ns,56.00ns,10.00ns,50.00ns,2.81us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,31,1000000,530.07ms,35.00ns,0.00ns,35.00ns,14.00ns,32.00ns,10.60us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,529.30ms,34.00ns,0.00ns,34.00ns,30.00ns,32.00ns,19.85us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,529.90ms,22.00ns,0.00ns,22.00ns,21.00ns,20.00ns,19.81us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.1,,31,1000000,529.56ms,25.00ns,0.00ns,25.00ns,38.00ns,22.00ns,21.21us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.1,,31,1000000,529.76ms,24.00ns,0.00ns,24.00ns,8.00ns,21.00ns,3.81us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.1,,31,1000000,529.74ms,19.00ns,0.00ns,20.00ns,26.00ns,17.00ns,21.49us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.1,,31,1000000,529.92ms,20.00ns,0.00ns,21.00ns,38.00ns,18.00ns,21.25us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.1,,31,1000000,530.35ms,23.00ns,0.00ns,23.00ns,6.00ns,21.00ns,2.91us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.1,,31,1000000,1.83s,118.00ns,0.00ns,119.00ns,15.00ns,112.00ns,11.36us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,580.00ms,25.00ns,0.00ns,25.00ns,30.00ns,23.00ns,22.32us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,479.34ms,23.00ns,0.00ns,24.00ns,35.00ns,20.00ns,18.79us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.1,,31,1000000,529.35ms,14.00ns,0.00ns,15.00ns,34.00ns,12.00ns,17.32us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.1,,31,1000000,530.02ms,14.00ns,0.00ns,14.00ns,6.00ns,12.00ns,3.41us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.76.0-nightly a96d57bdb,,31,1000000,579.94ms,53.00ns,0.00ns,53.00ns,9.00ns,49.00ns,3.00us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.76.0-nightly a96d57bdb,,31,1000000,579.65ms,39.00ns,0.00ns,39.00ns,11.00ns,35.00ns,8.82us\n"
  },
  {
    "path": "benchmarks/record/x86_64/2025-09-25.csv",
    "content": "name,model,rebar_version,engine,engine_version,err,haystack_len,iters,total,median,mad,mean,stddev,min,max\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,594933,17221,4.51s,174.43us,0.00ns,174.18us,2.56us,167.89us,332.85us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,594933,152334,4.57s,19.56us,0.00ns,19.66us,504.00ns,19.51us,133.12us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,594933,128479,4.61s,23.21us,0.00ns,23.25us,592.00ns,22.06us,140.85us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.6,,594933,300606,4.63s,9.93us,0.00ns,9.95us,320.00ns,9.87us,124.78us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.6,,594933,273232,4.73s,10.87us,0.00ns,10.87us,343.00ns,10.78us,125.05us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.6,,594933,16649,4.51s,179.89us,0.00ns,180.16us,1.90us,178.85us,349.53us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.6,,594933,17854,4.51s,167.77us,1.00ns,168.00us,1.66us,166.83us,286.03us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.6,,594933,6172,4.51s,485.45us,1.00ns,486.08us,4.17us,476.69us,600.95us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.6,,594933,6833,4.51s,429.95us,0.00ns,439.05us,19.70us,384.04us,541.79us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.6,,594933,13520,4.57s,221.43us,1.00ns,221.79us,2.55us,219.60us,339.58us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.6,,594933,17877,4.51s,167.51us,0.00ns,167.78us,1.48us,166.63us,292.49us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,594933,18511,4.56s,161.72us,0.00ns,162.04us,1.81us,160.31us,275.84us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,594933,18421,4.51s,162.61us,0.00ns,162.83us,1.71us,161.49us,277.22us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,594933,6966,4.51s,428.69us,1.00ns,430.67us,11.64us,384.26us,543.09us\nmemchr/sherlock/common/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,594933,17417,4.56s,171.97us,0.00ns,172.22us,1.63us,170.39us,341.89us\nmemchr/sherlock/common/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.6,,594933,9672,4.51s,311.61us,0.00ns,310.15us,3.64us,301.63us,426.29us\nmemchr/sherlock/common/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.6,,594933,3335,4.51s,898.83us,0.00ns,899.55us,4.42us,889.70us,1.01ms\nmemchr/sherlock/common/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.6,,594933,4762,4.51s,625.94us,0.00ns,630.02us,19.00us,621.28us,802.03us\nmemchr/sherlock/common/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.6,,594933,9413,4.56s,318.16us,0.00ns,318.62us,2.54us,313.47us,435.00us\nmemchr/sherlock/common/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.6,,594933,10052,4.51s,297.87us,1.00ns,298.44us,6.70us,290.80us,419.12us\nmemchr/sherlock/common/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,594933,10049,4.56s,297.21us,0.00ns,298.52us,4.59us,295.11us,417.86us\nmemchr/sherlock/common/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,594933,9391,4.51s,319.09us,0.00ns,319.43us,2.26us,317.49us,433.69us\nmemchr/sherlock/common/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.6,,594933,6321,4.51s,473.67us,0.00ns,474.63us,3.94us,471.34us,587.47us\nmemchr/sherlock/common/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.6,,594933,2204,4.51s,1.36ms,2.00ns,1.36ms,8.34us,1.34ms,1.47ms\nmemchr/sherlock/common/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.6,,594933,3373,4.51s,888.60us,0.00ns,889.48us,5.34us,882.27us,1.00ms\nmemchr/sherlock/common/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.6,,594933,6575,4.56s,460.60us,0.00ns,456.18us,11.43us,432.79us,575.93us\nmemchr/sherlock/common/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.6,,594933,6030,4.56s,497.54us,0.00ns,497.51us,2.65us,488.31us,611.49us\nmemchr/sherlock/common/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,594933,6326,4.56s,473.96us,0.00ns,474.25us,3.02us,470.33us,588.47us\nmemchr/sherlock/common/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,594933,6277,4.51s,477.71us,0.00ns,477.91us,2.80us,476.30us,593.82us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,664,1000000,731.83ms,183.00ns,0.00ns,184.00ns,19.00ns,179.00ns,2.37us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,664,1000000,537.81ms,35.00ns,0.00ns,35.00ns,9.00ns,32.00ns,2.66us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,664,1000000,0.99s,73.00ns,0.00ns,74.00ns,121.00ns,69.00ns,120.50us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.6,,664,1000000,433.28ms,30.00ns,0.00ns,30.00ns,16.00ns,27.00ns,13.30us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.6,,664,1000000,933.33ms,63.00ns,0.00ns,63.00ns,12.00ns,59.00ns,3.42us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.6,,664,1000000,791.63ms,182.00ns,0.00ns,182.00ns,70.00ns,177.00ns,66.11us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.6,,664,1000000,787.04ms,166.00ns,0.00ns,166.00ns,21.00ns,161.00ns,11.67us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.6,,664,1000000,680.50ms,153.00ns,0.00ns,154.00ns,118.00ns,143.00ns,116.44us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.6,,664,1000000,734.84ms,162.00ns,0.00ns,163.00ns,19.00ns,154.00ns,6.43us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.6,,664,1000000,1.19s,184.00ns,0.00ns,185.00ns,73.00ns,179.00ns,70.59us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.6,,664,1000000,734.47ms,164.00ns,0.00ns,165.00ns,19.00ns,161.00ns,7.36us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,731.67ms,166.00ns,0.00ns,166.00ns,17.00ns,161.00ns,2.83us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,745.05ms,166.00ns,0.00ns,166.00ns,26.00ns,161.00ns,13.44us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,664,1000000,740.71ms,160.00ns,0.00ns,160.00ns,20.00ns,153.00ns,8.27us\nmemchr/sherlock/common/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,664,1000000,731.22ms,179.00ns,0.00ns,179.00ns,70.00ns,175.00ns,67.50us\nmemchr/sherlock/common/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.6,,664,1000000,1.09s,325.00ns,0.00ns,325.00ns,73.00ns,308.00ns,68.42us\nmemchr/sherlock/common/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.6,,664,1000000,830.38ms,218.00ns,0.00ns,219.00ns,26.00ns,206.00ns,15.65us\nmemchr/sherlock/common/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.6,,664,1000000,845.45ms,211.00ns,0.00ns,213.00ns,26.00ns,203.00ns,12.24us\nmemchr/sherlock/common/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.6,,664,1000000,1.43s,323.00ns,0.00ns,324.00ns,24.00ns,317.00ns,6.69us\nmemchr/sherlock/common/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.6,,664,1000000,1.04s,314.00ns,0.00ns,317.00ns,72.00ns,309.00ns,67.86us\nmemchr/sherlock/common/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,664,1000000,1.03s,312.00ns,0.00ns,313.00ns,142.00ns,305.00ns,121.89us\nmemchr/sherlock/common/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,664,1000000,1.14s,349.00ns,0.00ns,349.00ns,73.00ns,342.00ns,68.29us\nmemchr/sherlock/common/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.6,,664,1000000,1.39s,488.00ns,0.00ns,489.00ns,35.00ns,477.00ns,17.75us\nmemchr/sherlock/common/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.6,,664,1000000,1.05s,312.00ns,0.00ns,313.00ns,24.00ns,301.00ns,2.81us\nmemchr/sherlock/common/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.6,,664,1000000,1.00s,281.00ns,0.00ns,280.00ns,29.00ns,264.00ns,12.92us\nmemchr/sherlock/common/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.6,,664,1000000,1.79s,475.00ns,0.00ns,483.00ns,123.00ns,467.00ns,119.57us\nmemchr/sherlock/common/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.6,,664,1000000,1.39s,508.00ns,0.00ns,509.00ns,119.00ns,497.00ns,116.03us\nmemchr/sherlock/common/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,664,1000000,1.50s,499.00ns,0.00ns,500.00ns,75.00ns,490.00ns,68.50us\nmemchr/sherlock/common/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,664,1000000,1.50s,506.00ns,0.00ns,507.00ns,33.00ns,496.00ns,14.78us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,69,1000000,594.93ms,53.00ns,0.00ns,53.00ns,11.00ns,51.00ns,3.17us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,69,1000000,440.27ms,15.00ns,0.00ns,15.00ns,6.00ns,13.00ns,2.05us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,69,1000000,936.59ms,52.00ns,0.00ns,52.00ns,19.00ns,48.00ns,15.52us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.6,,69,1000000,446.08ms,19.00ns,0.00ns,19.00ns,67.00ns,17.00ns,66.80us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.6,,69,1000000,933.45ms,52.00ns,0.00ns,53.00ns,11.00ns,49.00ns,5.01us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.6,,69,1000000,541.78ms,54.00ns,0.00ns,54.00ns,14.00ns,51.00ns,7.56us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.6,,69,1000000,483.14ms,51.00ns,0.00ns,51.00ns,20.00ns,48.00ns,17.44us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.6,,69,1000000,486.87ms,36.00ns,0.00ns,36.00ns,9.00ns,30.00ns,2.86us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.6,,69,1000000,433.55ms,26.00ns,0.00ns,26.00ns,9.00ns,23.00ns,2.82us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.6,,69,1000000,933.92ms,70.00ns,0.00ns,71.00ns,16.00ns,67.00ns,8.53us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.6,,69,1000000,497.51ms,46.00ns,0.00ns,46.00ns,14.00ns,44.00ns,8.77us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,481.60ms,49.00ns,0.00ns,49.00ns,9.00ns,46.00ns,2.25us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,481.75ms,49.00ns,0.00ns,49.00ns,12.00ns,46.00ns,4.44us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,69,1000000,481.72ms,26.00ns,0.00ns,26.00ns,11.00ns,23.00ns,4.18us\nmemchr/sherlock/common/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,69,1000000,481.94ms,46.00ns,0.00ns,46.00ns,14.00ns,43.00ns,4.35us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,594933,717712,4.73s,4.14us,0.00ns,4.15us,266.00ns,4.07us,122.43us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,594933,150005,4.57s,19.58us,0.00ns,19.96us,668.00ns,19.51us,133.74us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,594933,126012,4.62s,23.21us,0.00ns,23.70us,828.00ns,22.03us,147.51us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.6,,594933,293566,4.63s,9.93us,0.00ns,10.19us,622.00ns,9.88us,126.88us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.6,,594933,274493,4.72s,10.81us,0.00ns,10.82us,344.00ns,10.77us,127.72us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.6,,594933,725070,4.73s,4.10us,0.00ns,4.11us,245.00ns,4.06us,174.97us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.6,,594933,725107,4.80s,4.10us,0.00ns,4.11us,240.00ns,4.05us,124.47us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.6,,594933,122754,4.57s,24.08us,0.00ns,24.41us,1.25us,23.86us,140.30us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.6,,594933,26174,4.51s,114.39us,0.00ns,114.59us,1.33us,114.36us,230.00us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.6,,594933,370093,4.77s,8.10us,0.00ns,8.00us,394.00ns,7.80us,125.03us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.6,,594933,672551,4.73s,4.42us,0.00ns,4.43us,225.00ns,4.35us,124.10us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,594933,714877,4.80s,4.19us,0.00ns,4.17us,260.00ns,4.05us,122.79us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,594933,711169,4.73s,4.19us,0.00ns,4.19us,257.00ns,4.05us,124.26us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,594933,26173,4.51s,114.38us,0.00ns,114.59us,1.26us,114.35us,237.13us\nmemchr/sherlock/never/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,594933,699856,4.73s,4.24us,0.00ns,4.26us,287.00ns,4.17us,174.87us\nmemchr/sherlock/never/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.6,,594933,561234,4.74s,5.20us,0.00ns,5.32us,444.00ns,5.11us,123.23us\nmemchr/sherlock/never/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.6,,594933,69704,4.57s,42.92us,0.00ns,43.01us,703.00ns,42.89us,161.65us\nmemchr/sherlock/never/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.6,,594933,17450,4.51s,171.58us,0.00ns,171.89us,1.78us,171.52us,288.87us\nmemchr/sherlock/never/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.6,,594933,273620,4.72s,10.83us,0.00ns,10.86us,429.00ns,10.80us,128.12us\nmemchr/sherlock/never/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.6,,594933,510885,4.68s,6.32us,0.00ns,5.84us,615.00ns,5.19us,126.24us\nmemchr/sherlock/never/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,594933,576141,4.74s,5.17us,0.00ns,5.18us,281.00ns,5.10us,123.02us\nmemchr/sherlock/never/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,594933,557298,4.74s,5.26us,0.00ns,5.35us,398.00ns,5.13us,127.23us\nmemchr/sherlock/never/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.6,,594933,336860,4.62s,9.08us,0.00ns,8.88us,394.00ns,8.54us,125.18us\nmemchr/sherlock/never/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.6,,594933,53330,4.57s,56.21us,0.00ns,56.22us,1.59us,55.07us,225.46us\nmemchr/sherlock/never/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.6,,594933,13090,4.51s,228.75us,0.00ns,229.17us,1.98us,228.71us,354.17us\nmemchr/sherlock/never/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.6,,594933,191179,4.67s,15.58us,0.00ns,15.59us,417.00ns,15.28us,134.56us\nmemchr/sherlock/never/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.6,,594933,388302,4.68s,7.68us,0.00ns,7.70us,342.00ns,7.66us,125.09us\nmemchr/sherlock/never/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,594933,390631,4.68s,7.64us,0.00ns,7.65us,337.00ns,7.62us,125.06us\nmemchr/sherlock/never/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,594933,392181,4.69s,7.60us,0.00ns,7.62us,287.00ns,7.58us,125.49us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,664,1000000,430.09ms,14.00ns,0.00ns,14.00ns,10.00ns,12.00ns,7.34us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,664,1000000,429.88ms,35.00ns,0.00ns,35.00ns,9.00ns,32.00ns,2.72us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,664,1000000,0.99s,73.00ns,0.00ns,74.00ns,13.00ns,69.00ns,4.32us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.6,,664,1000000,493.52ms,30.00ns,0.00ns,30.00ns,12.00ns,27.00ns,8.75us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.6,,664,1000000,935.60ms,63.00ns,0.00ns,63.00ns,12.00ns,59.00ns,3.15us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.6,,664,1000000,439.89ms,15.00ns,0.00ns,15.00ns,16.00ns,13.00ns,14.03us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.6,,664,1000000,440.26ms,15.00ns,0.00ns,15.00ns,7.00ns,13.00ns,2.91us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.6,,664,1000000,489.87ms,41.00ns,0.00ns,41.00ns,19.00ns,34.00ns,15.09us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.6,,664,1000000,679.28ms,144.00ns,0.00ns,145.00ns,22.00ns,141.00ns,11.64us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.6,,664,1000000,934.32ms,56.00ns,0.00ns,56.00ns,11.00ns,52.00ns,3.19us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.6,,664,1000000,429.82ms,15.00ns,0.00ns,15.00ns,77.00ns,12.00ns,76.80us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,439.05ms,14.00ns,0.00ns,14.00ns,7.00ns,12.00ns,3.16us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,379.21ms,14.00ns,0.00ns,14.00ns,8.00ns,12.00ns,3.12us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,664,1000000,742.06ms,144.00ns,0.00ns,145.00ns,18.00ns,141.00ns,2.91us\nmemchr/sherlock/never/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,664,1000000,379.34ms,14.00ns,0.00ns,14.00ns,6.00ns,12.00ns,2.36us\nmemchr/sherlock/never/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.6,,664,1000000,440.81ms,18.00ns,0.00ns,18.00ns,9.00ns,15.00ns,3.50us\nmemchr/sherlock/never/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.6,,664,1000000,535.57ms,62.00ns,0.00ns,61.00ns,12.00ns,55.00ns,3.65us\nmemchr/sherlock/never/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.6,,664,1000000,779.54ms,208.00ns,0.00ns,209.00ns,21.00ns,205.00ns,6.56us\nmemchr/sherlock/never/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.6,,664,1000000,935.35ms,62.00ns,0.00ns,62.00ns,12.00ns,58.00ns,4.94us\nmemchr/sherlock/never/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.6,,664,1000000,440.42ms,18.00ns,0.00ns,18.00ns,8.00ns,16.00ns,3.46us\nmemchr/sherlock/never/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,664,1000000,435.78ms,17.00ns,0.00ns,17.00ns,8.00ns,14.00ns,2.98us\nmemchr/sherlock/never/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,664,1000000,448.01ms,17.00ns,0.00ns,17.00ns,8.00ns,15.00ns,3.75us\nmemchr/sherlock/never/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.6,,664,1000000,480.79ms,21.00ns,0.00ns,21.00ns,8.00ns,19.00ns,2.97us\nmemchr/sherlock/never/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.6,,664,1000000,530.22ms,79.00ns,0.00ns,79.00ns,24.00ns,71.00ns,18.80us\nmemchr/sherlock/never/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.6,,664,1000000,931.66ms,271.00ns,0.00ns,273.00ns,141.00ns,268.00ns,122.04us\nmemchr/sherlock/never/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.6,,664,1000000,0.99s,66.00ns,0.00ns,67.00ns,15.00ns,62.00ns,9.69us\nmemchr/sherlock/never/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.6,,664,1000000,433.74ms,21.00ns,0.00ns,21.00ns,7.00ns,19.00ns,2.56us\nmemchr/sherlock/never/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,664,1000000,489.09ms,20.00ns,0.00ns,20.00ns,8.00ns,17.00ns,4.34us\nmemchr/sherlock/never/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,664,1000000,437.94ms,19.00ns,0.00ns,19.00ns,21.00ns,17.00ns,18.70us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,69,1000000,436.26ms,12.00ns,0.00ns,12.00ns,76.00ns,10.00ns,76.00us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,69,1000000,442.98ms,15.00ns,0.00ns,15.00ns,6.00ns,13.00ns,2.40us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,69,1000000,934.63ms,52.00ns,0.00ns,52.00ns,11.00ns,49.00ns,2.92us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.6,,69,1000000,430.93ms,18.00ns,0.00ns,19.00ns,7.00ns,16.00ns,3.74us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.6,,69,1000000,934.46ms,52.00ns,0.00ns,53.00ns,10.00ns,49.00ns,2.99us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.6,,69,1000000,434.09ms,13.00ns,0.00ns,13.00ns,17.00ns,11.00ns,15.21us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.6,,69,1000000,433.57ms,13.00ns,0.00ns,13.00ns,8.00ns,11.00ns,5.80us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.6,,69,1000000,438.72ms,15.00ns,0.00ns,15.00ns,13.00ns,13.00ns,10.49us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.6,,69,1000000,495.03ms,30.00ns,0.00ns,30.00ns,86.00ns,22.00ns,85.75us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.6,,69,1000000,939.53ms,48.00ns,0.00ns,49.00ns,85.00ns,45.00ns,84.52us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.6,,69,1000000,430.48ms,13.00ns,0.00ns,14.00ns,32.00ns,11.00ns,18.81us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,379.41ms,12.00ns,0.00ns,12.00ns,7.00ns,10.00ns,2.40us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,379.30ms,12.00ns,0.00ns,12.00ns,6.00ns,10.00ns,2.76us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,69,1000000,431.34ms,30.00ns,0.00ns,30.00ns,9.00ns,22.00ns,2.98us\nmemchr/sherlock/never/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,69,1000000,379.23ms,12.00ns,0.00ns,12.00ns,13.00ns,10.00ns,11.00us\nmemchr/sherlock/never/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.6,,69,1000000,379.07ms,13.00ns,0.00ns,13.00ns,8.00ns,11.00ns,3.73us\nmemchr/sherlock/never/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.6,,69,1000000,432.32ms,15.00ns,0.00ns,15.00ns,10.00ns,13.00ns,3.60us\nmemchr/sherlock/never/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.6,,69,1000000,429.16ms,38.00ns,0.00ns,38.00ns,11.00ns,29.00ns,3.54us\nmemchr/sherlock/never/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.6,,69,1000000,931.41ms,49.00ns,0.00ns,49.00ns,9.00ns,46.00ns,2.06us\nmemchr/sherlock/never/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.6,,69,1000000,379.52ms,13.00ns,0.00ns,13.00ns,25.00ns,11.00ns,18.61us\nmemchr/sherlock/never/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,69,1000000,378.74ms,12.00ns,0.00ns,12.00ns,6.00ns,10.00ns,2.71us\nmemchr/sherlock/never/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,69,1000000,429.03ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,1.95us\nmemchr/sherlock/never/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.6,,69,1000000,378.55ms,13.00ns,0.00ns,14.00ns,8.00ns,12.00ns,3.84us\nmemchr/sherlock/never/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.6,,69,1000000,437.68ms,17.00ns,0.00ns,17.00ns,6.00ns,15.00ns,3.09us\nmemchr/sherlock/never/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.6,,69,1000000,479.38ms,43.00ns,0.00ns,44.00ns,72.00ns,35.00ns,70.96us\nmemchr/sherlock/never/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.6,,69,1000000,946.30ms,50.00ns,0.00ns,50.00ns,11.00ns,47.00ns,3.20us\nmemchr/sherlock/never/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.6,,69,1000000,432.13ms,14.00ns,0.00ns,14.00ns,8.00ns,12.00ns,3.02us\nmemchr/sherlock/never/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,69,1000000,379.64ms,13.00ns,0.00ns,13.00ns,6.00ns,11.00ns,2.11us\nmemchr/sherlock/never/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,69,1000000,429.19ms,13.00ns,0.00ns,13.00ns,8.00ns,11.00ns,3.47us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,,1000000,379.75ms,11.00ns,0.00ns,11.00ns,6.00ns,9.00ns,2.51us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,,1000000,379.53ms,11.00ns,0.00ns,11.00ns,7.00ns,9.00ns,3.60us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,,1000000,935.84ms,48.00ns,0.00ns,48.00ns,9.00ns,44.00ns,2.09us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.6,,,1000000,444.26ms,11.00ns,0.00ns,11.00ns,6.00ns,9.00ns,2.82us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.6,,,1000000,937.63ms,47.00ns,0.00ns,47.00ns,9.00ns,43.00ns,3.56us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.6,,,1000000,380.20ms,11.00ns,0.00ns,11.00ns,12.00ns,10.00ns,9.44us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.6,,,1000000,433.50ms,12.00ns,0.00ns,12.00ns,8.00ns,10.00ns,3.46us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.6,,,1000000,437.74ms,11.00ns,0.00ns,11.00ns,7.00ns,9.00ns,3.07us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.6,,,1000000,379.72ms,11.00ns,0.00ns,11.00ns,7.00ns,9.00ns,4.01us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.6,,,1000000,937.40ms,47.00ns,0.00ns,47.00ns,13.00ns,43.00ns,3.95us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.6,,,1000000,443.86ms,11.00ns,0.00ns,11.00ns,6.00ns,10.00ns,2.94us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,,1000000,445.68ms,10.00ns,0.00ns,10.00ns,5.00ns,9.00ns,2.03us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,,1000000,444.20ms,10.00ns,0.00ns,10.00ns,7.00ns,9.00ns,3.38us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,,1000000,445.33ms,10.00ns,0.00ns,10.00ns,7.00ns,9.00ns,2.92us\nmemchr/sherlock/never/empty1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,,1000000,379.76ms,10.00ns,0.00ns,10.00ns,6.00ns,8.00ns,2.27us\nmemchr/sherlock/never/empty2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.6,,,1000000,380.02ms,11.00ns,0.00ns,12.00ns,19.00ns,10.00ns,18.11us\nmemchr/sherlock/never/empty2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.6,,,1000000,380.30ms,10.00ns,0.00ns,10.00ns,6.00ns,8.00ns,2.23us\nmemchr/sherlock/never/empty2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.6,,,1000000,444.33ms,10.00ns,0.00ns,10.00ns,7.00ns,9.00ns,2.73us\nmemchr/sherlock/never/empty2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.6,,,1000000,881.63ms,47.00ns,0.00ns,48.00ns,10.00ns,44.00ns,2.77us\nmemchr/sherlock/never/empty2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.6,,,1000000,484.60ms,12.00ns,0.00ns,12.00ns,9.00ns,10.00ns,4.58us\nmemchr/sherlock/never/empty2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,,1000000,380.07ms,10.00ns,0.00ns,10.00ns,4.00ns,9.00ns,2.26us\nmemchr/sherlock/never/empty2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,,1000000,379.00ms,10.00ns,0.00ns,11.00ns,6.00ns,8.00ns,3.14us\nmemchr/sherlock/never/empty3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.6,,,1000000,439.03ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,3.17us\nmemchr/sherlock/never/empty3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.6,,,1000000,442.81ms,11.00ns,0.00ns,11.00ns,7.00ns,9.00ns,3.80us\nmemchr/sherlock/never/empty3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.6,,,1000000,443.17ms,10.00ns,0.00ns,10.00ns,5.00ns,8.00ns,2.35us\nmemchr/sherlock/never/empty3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.6,,,1000000,931.68ms,48.00ns,0.00ns,48.00ns,11.00ns,44.00ns,3.92us\nmemchr/sherlock/never/empty3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.6,,,1000000,433.76ms,12.00ns,0.00ns,12.00ns,85.00ns,10.00ns,79.43us\nmemchr/sherlock/never/empty3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,,1000000,384.82ms,10.00ns,0.00ns,10.00ns,6.00ns,9.00ns,2.95us\nmemchr/sherlock/never/empty3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,,1000000,379.64ms,11.00ns,0.00ns,11.00ns,6.00ns,9.00ns,3.50us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,594933,590509,4.72s,5.04us,0.00ns,5.05us,236.00ns,4.98us,121.62us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,594933,152142,4.57s,19.56us,0.00ns,19.69us,480.00ns,19.51us,144.45us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,594933,128607,4.62s,23.19us,0.00ns,23.22us,768.00ns,22.04us,228.74us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.6,,594933,300629,4.61s,9.93us,0.00ns,9.95us,303.00ns,9.87us,126.28us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.6,,594933,274402,4.71s,10.81us,0.00ns,10.83us,354.00ns,10.78us,130.77us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.6,,594933,605998,4.73s,4.91us,0.00ns,4.92us,281.00ns,4.85us,126.82us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.6,,594933,614629,4.73s,4.84us,0.00ns,4.85us,229.00ns,4.78us,120.14us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.6,,594933,114878,4.56s,25.34us,0.00ns,26.08us,1.77us,25.11us,141.46us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.6,,594933,25810,4.51s,115.74us,0.00ns,116.21us,1.47us,115.38us,231.40us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.6,,594933,324467,4.77s,9.06us,0.00ns,9.14us,450.00ns,8.81us,127.95us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.6,,594933,598153,4.72s,4.98us,0.00ns,4.99us,236.00ns,4.90us,127.09us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,594933,613199,4.73s,4.85us,0.00ns,4.86us,310.00ns,4.79us,174.67us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,594933,611498,4.74s,4.86us,0.00ns,4.88us,234.00ns,4.80us,120.98us\nmemchr/sherlock/rare/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,594933,611081,4.73s,4.87us,0.00ns,4.88us,230.00ns,4.79us,120.76us\nmemchr/sherlock/rare/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.6,,594933,386808,4.68s,7.71us,0.00ns,7.73us,347.00ns,7.62us,125.79us\nmemchr/sherlock/rare/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.6,,594933,65054,4.57s,46.00us,0.00ns,46.08us,710.00ns,45.74us,164.66us\nmemchr/sherlock/rare/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.6,,594933,17142,4.51s,174.67us,0.00ns,174.98us,2.39us,173.87us,288.28us\nmemchr/sherlock/rare/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.6,,594933,231531,4.72s,12.83us,0.00ns,12.86us,446.00ns,12.67us,129.24us\nmemchr/sherlock/rare/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.6,,594933,373422,4.62s,7.98us,0.00ns,8.00us,307.00ns,7.86us,122.87us\nmemchr/sherlock/rare/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,594933,386226,4.68s,7.72us,0.00ns,7.74us,273.00ns,7.60us,125.61us\nmemchr/sherlock/rare/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,594933,398045,4.69s,7.49us,0.00ns,7.51us,340.00ns,7.39us,124.69us\nmemchr/sherlock/rare/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.6,,594933,278585,4.63s,10.53us,0.00ns,10.74us,456.00ns,10.43us,127.23us\nmemchr/sherlock/rare/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.6,,594933,48810,4.57s,61.42us,0.00ns,61.43us,1.41us,59.61us,177.48us\nmemchr/sherlock/rare/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.6,,594933,12880,4.51s,231.95us,0.00ns,232.89us,4.62us,231.80us,345.73us\nmemchr/sherlock/rare/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.6,,594933,161519,4.67s,18.30us,0.00ns,18.47us,615.00ns,18.11us,134.91us\nmemchr/sherlock/rare/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.6,,594933,274770,4.63s,10.87us,0.00ns,10.89us,342.00ns,10.79us,128.01us\nmemchr/sherlock/rare/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,594933,279285,4.63s,10.68us,0.00ns,10.71us,411.00ns,10.60us,126.46us\nmemchr/sherlock/rare/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,594933,271996,4.63s,11.09us,0.00ns,11.00us,498.00ns,10.38us,137.72us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,664,1000000,480.04ms,19.00ns,0.00ns,19.00ns,9.00ns,17.00ns,3.67us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,664,1000000,494.15ms,35.00ns,0.00ns,35.00ns,9.00ns,32.00ns,2.52us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,664,1000000,0.99s,73.00ns,0.00ns,74.00ns,13.00ns,69.00ns,3.91us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.6,,664,1000000,429.90ms,30.00ns,0.00ns,30.00ns,12.00ns,27.00ns,5.52us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.6,,664,1000000,0.99s,62.00ns,0.00ns,63.00ns,11.00ns,59.00ns,2.53us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.6,,664,1000000,431.07ms,19.00ns,0.00ns,19.00ns,21.00ns,17.00ns,18.41us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.6,,664,1000000,433.83ms,18.00ns,0.00ns,18.00ns,7.00ns,16.00ns,3.47us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.6,,664,1000000,534.20ms,37.00ns,0.00ns,38.00ns,10.00ns,35.00ns,3.08us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.6,,664,1000000,681.33ms,151.00ns,0.00ns,152.00ns,120.00ns,147.00ns,117.48us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.6,,664,1000000,932.33ms,58.00ns,0.00ns,58.00ns,10.00ns,54.00ns,2.61us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.6,,664,1000000,441.71ms,19.00ns,0.00ns,20.00ns,14.00ns,16.00ns,12.11us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,494.93ms,18.00ns,0.00ns,18.00ns,7.00ns,16.00ns,2.94us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,436.42ms,18.00ns,0.00ns,18.00ns,9.00ns,15.00ns,4.02us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,664,1000000,743.55ms,152.00ns,0.00ns,153.00ns,18.00ns,147.00ns,4.27us\nmemchr/sherlock/rare/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,664,1000000,441.26ms,18.00ns,0.00ns,18.00ns,7.00ns,15.00ns,3.70us\nmemchr/sherlock/rare/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.6,,664,1000000,430.17ms,26.00ns,0.00ns,26.00ns,9.00ns,22.00ns,3.43us\nmemchr/sherlock/rare/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.6,,664,1000000,530.38ms,66.00ns,0.00ns,65.00ns,13.00ns,57.00ns,4.27us\nmemchr/sherlock/rare/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.6,,664,1000000,895.66ms,225.00ns,0.00ns,226.00ns,22.00ns,220.00ns,7.30us\nmemchr/sherlock/rare/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.6,,664,1000000,932.20ms,68.00ns,0.00ns,68.00ns,11.00ns,64.00ns,3.31us\nmemchr/sherlock/rare/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.6,,664,1000000,433.02ms,28.00ns,0.00ns,28.00ns,10.00ns,25.00ns,6.35us\nmemchr/sherlock/rare/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,664,1000000,489.60ms,27.00ns,0.00ns,27.00ns,14.00ns,23.00ns,10.58us\nmemchr/sherlock/rare/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,664,1000000,534.33ms,26.00ns,0.00ns,26.00ns,10.00ns,23.00ns,3.91us\nmemchr/sherlock/rare/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.6,,664,1000000,541.06ms,33.00ns,0.00ns,33.00ns,9.00ns,30.00ns,2.51us\nmemchr/sherlock/rare/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.6,,664,1000000,585.91ms,90.00ns,0.00ns,88.00ns,18.00ns,74.00ns,7.65us\nmemchr/sherlock/rare/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.6,,664,1000000,931.58ms,285.00ns,0.00ns,286.00ns,143.00ns,280.00ns,118.63us\nmemchr/sherlock/rare/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.6,,664,1000000,0.98s,79.00ns,0.00ns,79.00ns,13.00ns,74.00ns,2.53us\nmemchr/sherlock/rare/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.6,,664,1000000,433.60ms,37.00ns,0.00ns,37.00ns,11.00ns,33.00ns,3.56us\nmemchr/sherlock/rare/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,664,1000000,495.06ms,33.00ns,0.00ns,33.00ns,13.00ns,29.00ns,8.72us\nmemchr/sherlock/rare/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,664,1000000,485.39ms,34.00ns,0.00ns,34.00ns,10.00ns,30.00ns,3.05us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,69,1000000,435.24ms,15.00ns,0.00ns,15.00ns,7.00ns,13.00ns,2.10us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,69,1000000,439.03ms,15.00ns,0.00ns,15.00ns,10.00ns,13.00ns,7.04us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,69,1000000,932.03ms,52.00ns,0.00ns,52.00ns,11.00ns,48.00ns,3.62us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.6,,69,1000000,443.63ms,18.00ns,0.00ns,19.00ns,15.00ns,16.00ns,12.32us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.6,,69,1000000,936.00ms,52.00ns,0.00ns,53.00ns,10.00ns,49.00ns,2.42us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.6,,69,1000000,440.75ms,15.00ns,0.00ns,16.00ns,79.00ns,14.00ns,78.43us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.6,,69,1000000,488.70ms,15.00ns,0.00ns,15.00ns,7.00ns,13.00ns,2.50us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.6,,69,1000000,430.04ms,16.00ns,0.00ns,16.00ns,6.00ns,13.00ns,3.06us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.6,,69,1000000,429.97ms,29.00ns,0.00ns,29.00ns,10.00ns,22.00ns,2.78us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.6,,69,1000000,935.26ms,49.00ns,0.00ns,50.00ns,94.00ns,46.00ns,93.12us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.6,,69,1000000,436.28ms,14.00ns,0.00ns,14.00ns,74.00ns,12.00ns,73.55us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,435.57ms,15.00ns,0.00ns,15.00ns,7.00ns,13.00ns,2.70us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,430.64ms,15.00ns,0.00ns,15.00ns,7.00ns,13.00ns,2.75us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,69,1000000,430.04ms,29.00ns,0.00ns,29.00ns,10.00ns,22.00ns,4.74us\nmemchr/sherlock/rare/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,69,1000000,492.63ms,13.00ns,0.00ns,13.00ns,8.00ns,11.00ns,4.53us\nmemchr/sherlock/rare/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.6,,69,1000000,534.28ms,22.00ns,0.00ns,22.00ns,8.00ns,21.00ns,3.22us\nmemchr/sherlock/rare/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.6,,69,1000000,430.54ms,19.00ns,0.00ns,19.00ns,9.00ns,17.00ns,2.90us\nmemchr/sherlock/rare/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.6,,69,1000000,429.32ms,36.00ns,0.00ns,36.00ns,10.00ns,28.00ns,3.21us\nmemchr/sherlock/rare/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.6,,69,1000000,936.23ms,52.00ns,0.00ns,53.00ns,17.00ns,48.00ns,13.27us\nmemchr/sherlock/rare/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.6,,69,1000000,432.16ms,19.00ns,0.00ns,19.00ns,8.00ns,17.00ns,2.75us\nmemchr/sherlock/rare/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,69,1000000,434.67ms,22.00ns,0.00ns,22.00ns,15.00ns,20.00ns,12.57us\nmemchr/sherlock/rare/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,69,1000000,430.48ms,19.00ns,0.00ns,19.00ns,7.00ns,16.00ns,2.63us\nmemchr/sherlock/rare/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.6,,69,1000000,430.68ms,23.00ns,0.00ns,24.00ns,21.00ns,21.00ns,14.70us\nmemchr/sherlock/rare/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.6,,69,1000000,479.90ms,22.00ns,0.00ns,22.00ns,9.00ns,19.00ns,2.94us\nmemchr/sherlock/rare/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.6,,69,1000000,492.85ms,43.00ns,0.00ns,43.00ns,11.00ns,35.00ns,3.14us\nmemchr/sherlock/rare/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.6,,69,1000000,936.86ms,55.00ns,0.00ns,56.00ns,11.00ns,52.00ns,3.55us\nmemchr/sherlock/rare/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.6,,69,1000000,437.78ms,23.00ns,0.00ns,23.00ns,8.00ns,20.00ns,2.79us\nmemchr/sherlock/rare/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,69,1000000,479.57ms,24.00ns,0.00ns,24.00ns,24.00ns,21.00ns,19.94us\nmemchr/sherlock/rare/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,69,1000000,494.24ms,19.00ns,0.00ns,19.00ns,7.00ns,16.00ns,3.43us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,594933,87087,4.57s,34.12us,0.00ns,34.41us,1.17us,33.42us,148.86us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,594933,152257,4.57s,19.56us,0.00ns,19.67us,457.00ns,19.51us,134.32us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,594933,128606,4.62s,23.19us,0.00ns,23.22us,579.00ns,22.03us,139.33us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.6,,594933,300693,4.63s,9.93us,0.00ns,9.95us,376.00ns,9.87us,130.01us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.6,,594933,273215,4.73s,10.87us,0.00ns,10.87us,417.00ns,10.78us,182.15us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.6,,594933,61757,4.57s,48.18us,0.00ns,48.54us,1.29us,47.22us,164.07us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.6,,594933,62214,4.57s,47.61us,0.00ns,48.19us,1.76us,46.27us,168.56us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.6,,594933,32785,4.57s,91.05us,0.00ns,91.47us,2.08us,88.28us,208.30us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.6,,594933,17880,4.51s,163.73us,7.00ns,167.75us,6.46us,160.40us,289.82us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.6,,594933,52966,4.56s,55.77us,0.00ns,56.54us,2.50us,53.48us,187.93us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.6,,594933,57668,4.56s,51.74us,0.00ns,51.99us,1.01us,51.09us,167.93us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,594933,67989,4.57s,44.75us,0.00ns,44.09us,2.05us,41.37us,163.05us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,594933,67710,4.57s,43.23us,0.00ns,44.27us,1.98us,41.77us,161.23us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,594933,18353,4.51s,162.00us,0.00ns,163.43us,4.41us,160.70us,331.99us\nmemchr/sherlock/uncommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,594933,73938,4.57s,40.13us,0.00ns,40.54us,1.48us,38.86us,156.65us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.6,,594933,23837,4.51s,125.57us,0.00ns,125.83us,1.42us,123.73us,240.37us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.6,,594933,15482,4.51s,193.57us,0.00ns,193.75us,2.24us,189.38us,309.98us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.6,,594933,11266,4.51s,260.62us,0.00ns,266.26us,11.19us,256.40us,397.44us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.6,,594933,24270,4.57s,125.32us,1.00ns,123.50us,4.42us,116.26us,241.83us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.6,,594933,22678,4.51s,128.60us,1.00ns,132.26us,5.27us,125.80us,253.93us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,594933,25899,4.51s,115.69us,0.00ns,115.80us,1.52us,113.90us,231.93us\nmemchr/sherlock/uncommon/huge2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,594933,28036,4.51s,106.31us,0.00ns,106.97us,2.35us,103.92us,222.53us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.6,,594933,18874,4.51s,158.75us,0.00ns,158.92us,1.44us,156.76us,275.44us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.6,,594933,9879,4.51s,303.38us,0.00ns,303.66us,2.24us,300.10us,424.52us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.6,,594933,8293,4.51s,361.42us,0.00ns,361.75us,2.46us,359.23us,478.76us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.6,,594933,15886,4.57s,191.75us,0.00ns,188.74us,5.74us,178.19us,307.16us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.6,,594933,18543,4.51s,161.53us,0.00ns,161.76us,1.52us,159.09us,275.68us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,594933,19427,4.51s,152.61us,0.00ns,154.39us,5.17us,150.51us,270.97us\nmemchr/sherlock/uncommon/huge3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,594933,20457,4.51s,143.30us,0.00ns,146.62us,7.03us,140.61us,282.37us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,664,1000000,592.25ms,46.00ns,0.00ns,46.00ns,10.00ns,43.00ns,3.46us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,664,1000000,488.30ms,35.00ns,0.00ns,35.00ns,10.00ns,32.00ns,2.81us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,664,1000000,0.99s,74.00ns,0.00ns,75.00ns,12.00ns,70.00ns,2.88us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.6,,664,1000000,430.18ms,30.00ns,0.00ns,30.00ns,11.00ns,27.00ns,6.08us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.6,,664,1000000,934.30ms,63.00ns,0.00ns,63.00ns,12.00ns,59.00ns,4.05us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.6,,664,1000000,546.05ms,46.00ns,0.00ns,46.00ns,21.00ns,43.00ns,17.88us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.6,,664,1000000,480.09ms,44.00ns,0.00ns,44.00ns,11.00ns,40.00ns,2.85us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.6,,664,1000000,481.60ms,57.00ns,0.00ns,57.00ns,13.00ns,53.00ns,2.91us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.6,,664,1000000,681.12ms,154.00ns,0.00ns,156.00ns,95.00ns,150.00ns,93.12us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.6,,664,1000000,0.98s,80.00ns,0.00ns,80.00ns,15.00ns,74.00ns,10.23us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.6,,664,1000000,530.36ms,44.00ns,0.00ns,44.00ns,10.00ns,40.00ns,2.54us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,539.50ms,44.00ns,0.00ns,44.00ns,120.00ns,40.00ns,119.73us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,485.74ms,44.00ns,0.00ns,44.00ns,10.00ns,40.00ns,2.67us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,664,1000000,681.30ms,154.00ns,0.00ns,156.00ns,19.00ns,145.00ns,3.70us\nmemchr/sherlock/uncommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,664,1000000,480.04ms,43.00ns,0.00ns,43.00ns,15.00ns,41.00ns,10.22us\nmemchr/sherlock/uncommon/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.6,,664,1000000,542.77ms,76.00ns,0.00ns,77.00ns,28.00ns,71.00ns,13.69us\nmemchr/sherlock/uncommon/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.6,,664,1000000,646.88ms,89.00ns,0.00ns,89.00ns,76.00ns,82.00ns,74.94us\nmemchr/sherlock/uncommon/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.6,,664,1000000,783.00ms,201.00ns,0.00ns,202.00ns,21.00ns,198.00ns,6.14us\nmemchr/sherlock/uncommon/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.6,,664,1000000,1.10s,115.00ns,0.00ns,115.00ns,17.00ns,109.00ns,8.62us\nmemchr/sherlock/uncommon/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.6,,664,1000000,596.42ms,83.00ns,0.00ns,84.00ns,15.00ns,78.00ns,4.10us\nmemchr/sherlock/uncommon/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,664,1000000,586.30ms,92.00ns,0.00ns,92.00ns,71.00ns,86.00ns,69.52us\nmemchr/sherlock/uncommon/small2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,664,1000000,586.66ms,83.00ns,0.00ns,83.00ns,17.00ns,79.00ns,10.57us\nmemchr/sherlock/uncommon/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.6,,664,1000000,630.65ms,115.00ns,0.00ns,116.00ns,15.00ns,107.00ns,3.05us\nmemchr/sherlock/uncommon/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.6,,664,1000000,630.99ms,128.00ns,0.00ns,129.00ns,17.00ns,123.00ns,4.22us\nmemchr/sherlock/uncommon/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.6,,664,1000000,936.69ms,264.00ns,0.00ns,266.00ns,23.00ns,261.00ns,5.06us\nmemchr/sherlock/uncommon/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.6,,664,1000000,1.19s,156.00ns,0.00ns,157.00ns,16.00ns,148.00ns,2.33us\nmemchr/sherlock/uncommon/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.6,,664,1000000,631.05ms,125.00ns,0.00ns,125.00ns,17.00ns,118.00ns,6.93us\nmemchr/sherlock/uncommon/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,664,1000000,694.10ms,139.00ns,0.00ns,139.00ns,19.00ns,127.00ns,7.92us\nmemchr/sherlock/uncommon/small3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,664,1000000,582.47ms,121.00ns,0.00ns,121.00ns,123.00ns,114.00ns,121.82us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,69,1000000,541.79ms,29.00ns,0.00ns,29.00ns,9.00ns,27.00ns,3.15us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,69,1000000,432.57ms,15.00ns,0.00ns,15.00ns,11.00ns,13.00ns,7.41us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,69,1000000,932.69ms,52.00ns,0.00ns,52.00ns,11.00ns,49.00ns,3.79us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.6,,69,1000000,432.42ms,19.00ns,0.00ns,19.00ns,5.00ns,16.00ns,2.58us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.6,,69,1000000,932.37ms,53.00ns,0.00ns,54.00ns,11.00ns,49.00ns,4.99us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.6,,69,1000000,485.36ms,32.00ns,0.00ns,32.00ns,9.00ns,29.00ns,3.41us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.6,,69,1000000,493.93ms,30.00ns,0.00ns,30.00ns,12.00ns,28.00ns,9.00us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.6,,69,1000000,492.26ms,20.00ns,0.00ns,20.00ns,7.00ns,18.00ns,2.54us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.6,,69,1000000,430.10ms,24.00ns,0.00ns,24.00ns,9.00ns,22.00ns,2.99us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.6,,69,1000000,937.43ms,54.00ns,0.00ns,55.00ns,10.00ns,52.00ns,2.38us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.6,,69,1000000,439.61ms,26.00ns,0.00ns,26.00ns,9.00ns,24.00ns,3.68us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,69,1000000,480.84ms,28.00ns,0.00ns,29.00ns,11.00ns,26.00ns,3.46us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,69,1000000,429.98ms,28.00ns,0.00ns,28.00ns,8.00ns,26.00ns,2.53us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,69,1000000,479.94ms,24.00ns,0.00ns,24.00ns,121.00ns,22.00ns,121.08us\nmemchr/sherlock/uncommon/tiny1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,69,1000000,429.91ms,26.00ns,0.00ns,26.00ns,8.00ns,24.00ns,3.04us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2,2.7.6,,69,1000000,486.79ms,44.00ns,0.00ns,45.00ns,18.00ns,41.00ns,13.14us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/fallback,2.7.6,,69,1000000,431.60ms,30.00ns,0.00ns,30.00ns,9.00ns,25.00ns,3.04us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/naive,2.7.6,,69,1000000,431.94ms,30.00ns,0.00ns,30.00ns,10.00ns,28.00ns,2.75us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr2/wasm32,2.7.6,,69,1000000,0.99s,77.00ns,0.00ns,78.00ns,14.00ns,74.00ns,5.98us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr2,2.7.6,,69,1000000,481.48ms,53.00ns,0.00ns,53.00ns,12.00ns,49.00ns,2.43us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr2,2.5.0,,69,1000000,543.45ms,49.00ns,0.00ns,49.00ns,12.00ns,46.00ns,2.95us\nmemchr/sherlock/uncommon/tiny2,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr2,2.5.0,,69,1000000,543.67ms,46.00ns,0.00ns,46.00ns,85.00ns,42.00ns,83.70us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3,2.7.6,,69,1000000,532.30ms,75.00ns,0.00ns,75.00ns,18.00ns,72.00ns,9.23us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/fallback,2.7.6,,69,1000000,490.50ms,44.00ns,0.00ns,44.00ns,12.00ns,40.00ns,3.63us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/naive,2.7.6,,69,1000000,493.11ms,36.00ns,0.00ns,36.00ns,11.00ns,33.00ns,3.76us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr3/wasm32,2.7.6,,69,1000000,1.04s,99.00ns,0.00ns,99.00ns,14.00ns,96.00ns,3.32us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr3,2.7.6,,69,1000000,532.29ms,77.00ns,0.00ns,78.00ns,21.00ns,74.00ns,14.94us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr3,2.5.0,,69,1000000,591.42ms,72.00ns,0.00ns,72.00ns,16.00ns,68.00ns,8.88us\nmemchr/sherlock/uncommon/tiny3,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr3,2.5.0,,69,1000000,646.72ms,73.00ns,0.00ns,73.00ns,15.00ns,68.00ns,6.97us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,594933,7593,4.51s,394.99us,0.00ns,395.11us,2.50us,389.53us,522.52us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,594933,152180,4.57s,19.58us,0.00ns,19.68us,578.00ns,19.52us,137.85us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,594933,128538,4.62s,23.20us,0.00ns,23.23us,583.00ns,22.04us,138.41us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.6,,594933,300550,4.63s,9.93us,0.00ns,9.95us,324.00ns,9.87us,124.17us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.6,,594933,273544,4.73s,10.82us,0.00ns,10.86us,504.00ns,10.78us,181.92us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.6,,594933,7582,4.51s,390.90us,0.00ns,395.65us,11.13us,388.97us,537.15us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.6,,594933,8450,4.51s,354.76us,0.00ns,355.01us,2.15us,353.14us,467.51us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.6,,594933,3571,4.51s,839.54us,0.00ns,840.21us,6.55us,806.07us,948.72us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.6,,594933,3758,4.51s,800.62us,2.00ns,798.46us,12.37us,728.77us,920.28us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.6,,594933,9066,4.56s,334.33us,0.00ns,330.80us,8.87us,310.98us,451.52us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.6,,594933,8442,4.51s,358.84us,0.00ns,355.34us,5.78us,347.54us,472.87us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,594933,8171,4.51s,356.28us,0.00ns,367.12us,13.91us,351.43us,495.79us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,594933,8510,4.51s,352.24us,1.00ns,352.50us,2.52us,349.76us,469.51us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,594933,3738,4.51s,803.59us,1.00ns,802.70us,8.50us,741.63us,922.00us\nmemchr/sherlock/verycommon/huge1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,594933,8090,4.51s,370.31us,1.00ns,370.82us,2.07us,369.74us,487.19us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),libc/memchr/oneshot,unknown,,664,1000000,1.23s,431.00ns,0.00ns,432.00ns,124.00ns,426.00ns,102.48us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot,0.6.4,,664,1000000,496.88ms,35.00ns,0.00ns,35.00ns,10.00ns,32.00ns,2.84us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/bytecount/memchr/oneshot/wasm32,0.6.4,,664,1000000,0.99s,73.00ns,0.00ns,74.00ns,11.00ns,69.00ns,2.92us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount,2.7.6,,664,1000000,432.06ms,30.00ns,0.00ns,30.00ns,9.00ns,27.00ns,2.59us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/onlycount/wasm32,2.7.6,,664,1000000,939.36ms,63.00ns,0.00ns,63.00ns,11.00ns,59.00ns,2.98us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/oneshot,2.7.6,,664,1000000,1.29s,435.00ns,0.00ns,436.00ns,75.00ns,431.00ns,67.95us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/prebuilt,2.7.6,,664,1000000,1.19s,394.00ns,0.00ns,395.00ns,27.00ns,391.00ns,6.39us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/fallback,2.7.6,,664,1000000,0.99s,321.00ns,0.00ns,321.00ns,27.00ns,295.00ns,6.02us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/naive,2.7.6,,664,1000000,846.10ms,213.00ns,0.00ns,214.00ns,22.00ns,207.00ns,5.62us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memchr/wasm32,2.7.6,,664,1000000,1.60s,370.00ns,0.00ns,371.00ns,26.00ns,366.00ns,7.21us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchr/memrchr,2.7.6,,664,1000000,1.19s,389.00ns,0.00ns,390.00ns,71.00ns,385.00ns,65.66us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/oneshot,2.5.0,,664,1000000,1.25s,397.00ns,0.00ns,398.00ns,71.00ns,391.00ns,66.71us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/prebuilt,2.5.0,,664,1000000,1.19s,396.00ns,0.00ns,396.00ns,27.00ns,390.00ns,6.79us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memchr/naive,2.5.0,,664,1000000,833.14ms,227.00ns,0.00ns,227.00ns,23.00ns,212.00ns,6.33us\nmemchr/sherlock/verycommon/small1,count-bytes,0.1.0 (rev 79305bcb5f),rust/memchrold/memrchr,2.5.0,,664,1000000,1.30s,411.00ns,0.00ns,412.00ns,29.00ns,406.00ns,9.16us\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,33335253,273,4.56s,11.00ms,0.00ns,11.00ms,25.82us,10.94ms,11.11ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,33335253,393,4.61s,7.64ms,0.00ns,7.65ms,36.63us,7.60ms,7.92ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,33335253,394,4.56s,7.61ms,17.00ns,7.61ms,22.13us,7.58ms,7.79ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,33335253,445,4.56s,6.74ms,0.00ns,6.74ms,26.98us,6.69ms,6.93ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,33335253,445,4.56s,6.75ms,0.00ns,6.75ms,29.95us,6.71ms,7.03ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/binary,2.7.6,,33335253,3163,4.56s,944.96us,0.00ns,948.43us,12.87us,924.74us,1.14ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,33335253,293,4.56s,10.27ms,0.00ns,10.27ms,38.46us,10.14ms,10.38ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,33335253,145,4.56s,20.73ms,0.00ns,20.74ms,22.83us,20.71ms,20.86ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,33335253,221,4.56s,13.62ms,0.00ns,13.62ms,53.19us,13.41ms,13.78ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,33335253,321,4.66s,9.28ms,0.00ns,9.35ms,167.47us,9.09ms,9.98ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,33335253,449,4.57s,6.68ms,0.00ns,6.69ms,51.83us,6.62ms,6.98ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,33335253,449,4.57s,6.69ms,0.00ns,6.69ms,43.23us,6.62ms,6.97ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,33335253,559,4.57s,5.33ms,0.00ns,5.37ms,111.50us,5.25ms,5.81ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,33335253,562,4.57s,5.34ms,71.00ns,5.35ms,24.21us,5.29ms,5.54ms\nmemmem/byterank/binary,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,33335253,2613,4.57s,1.14ms,0.00ns,1.15ms,14.92us,1.13ms,1.34ms\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,1648109,21199,4.57s,141.10us,0.00ns,141.48us,2.38us,137.51us,269.00us\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,1648109,22186,4.57s,135.26us,0.00ns,135.19us,1.54us,133.37us,250.50us\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,22262,4.57s,135.06us,0.00ns,134.73us,1.61us,133.21us,253.22us\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,1648109,83515,4.57s,34.38us,0.00ns,35.88us,2.35us,33.36us,153.50us\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,1648109,84009,4.57s,34.98us,0.00ns,35.67us,1.68us,34.27us,153.70us\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,1648109,2937,4.51s,1.02ms,0.00ns,1.02ms,4.45us,1.01ms,1.14ms\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,1648109,2939,4.51s,1.02ms,0.00ns,1.02ms,3.98us,1.02ms,1.14ms\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,1648109,4597,4.51s,652.54us,0.00ns,652.58us,3.33us,646.96us,768.67us\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,1648109,54450,4.56s,56.14us,0.00ns,54.98us,3.12us,48.56us,227.01us\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,1648109,81917,4.57s,36.47us,0.00ns,36.58us,711.00ns,36.26us,152.76us\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,80402,4.57s,36.37us,0.00ns,37.28us,1.36us,36.06us,161.21us\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,1648109,76908,4.57s,38.50us,0.00ns,38.97us,1.28us,37.43us,159.04us\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,1648109,77225,4.57s,38.65us,0.00ns,38.81us,834.00ns,37.62us,154.99us\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,1648109,3162,4.51s,949.00us,1.00ns,949.02us,7.34us,928.90us,1.08ms\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,1648109,3130,4.51s,949.63us,4.00ns,0.96ms,18.29us,923.40us,1.08ms\nmemmem/code/rust-library-never-fn-strength,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,1648109,51515,4.57s,58.04us,0.00ns,58.20us,1.03us,57.04us,176.61us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,1648109,22126,4.57s,139.20us,0.00ns,135.55us,7.06us,122.13us,257.83us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,1648109,22345,4.57s,133.95us,0.00ns,134.22us,1.29us,133.56us,249.29us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,22378,4.57s,133.75us,0.00ns,134.03us,1.53us,133.47us,252.63us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,1648109,86608,4.57s,34.12us,0.00ns,34.61us,1.69us,32.95us,148.91us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,1648109,84808,4.57s,35.26us,0.00ns,35.34us,723.00ns,34.15us,151.81us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,1648109,3160,4.51s,949.21us,1.00ns,949.52us,4.45us,937.02us,1.07ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,1648109,2940,4.51s,1.02ms,0.00ns,1.02ms,4.27us,1.02ms,1.14ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,1648109,4594,4.51s,652.77us,0.00ns,653.03us,3.65us,647.46us,770.15us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,1648109,55343,4.56s,54.00us,0.00ns,54.10us,3.31us,49.16us,178.64us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,1648109,79156,4.57s,37.74us,0.00ns,37.86us,827.00ns,37.50us,153.71us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,78189,4.57s,37.89us,0.00ns,38.33us,1.17us,37.65us,162.11us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,1648109,76439,4.57s,39.16us,0.00ns,39.21us,821.00ns,38.12us,211.20us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,1648109,77012,4.57s,38.89us,0.00ns,38.91us,732.00ns,37.73us,156.00us\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,1648109,3406,4.51s,881.23us,2.00ns,880.86us,5.82us,864.11us,1.00ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,1648109,3360,4.51s,884.28us,20.00ns,893.10us,17.51us,862.06us,1.02ms\nmemmem/code/rust-library-never-fn-strength-paren,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,1648109,49307,4.57s,63.28us,0.00ns,60.81us,3.21us,56.73us,179.18us\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,1648109,16623,4.51s,180.31us,0.00ns,180.45us,2.55us,175.28us,298.09us\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,1648109,22412,4.51s,133.54us,0.00ns,133.82us,1.46us,133.26us,250.42us\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,22427,4.51s,133.43us,0.00ns,133.73us,1.32us,133.05us,249.57us\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,1648109,79713,4.57s,37.53us,0.00ns,37.60us,709.00ns,36.56us,154.83us\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,1648109,79383,4.57s,37.68us,0.00ns,37.76us,902.00ns,36.89us,210.31us\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,1648109,3250,4.51s,924.70us,3.00ns,923.06us,7.34us,903.25us,1.05ms\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,1648109,2938,4.51s,1.02ms,0.00ns,1.02ms,4.63us,1.02ms,1.13ms\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,1648109,4593,4.51s,652.77us,0.00ns,653.24us,2.89us,646.94us,767.99us\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,1648109,60565,4.56s,49.39us,0.00ns,49.43us,1.50us,46.79us,174.35us\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,1648109,78202,4.57s,38.19us,0.00ns,38.33us,835.00ns,37.95us,156.17us\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,66936,4.57s,44.65us,0.00ns,44.78us,771.00ns,44.42us,162.58us\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,1648109,76707,4.56s,39.18us,0.00ns,39.08us,0.96us,38.05us,158.03us\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,1648109,76540,4.57s,39.24us,0.00ns,39.16us,840.00ns,38.18us,159.84us\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,1648109,3458,4.56s,867.55us,1.00ns,867.52us,4.47us,853.92us,0.98ms\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,1648109,3424,4.51s,876.11us,3.00ns,876.19us,9.94us,854.29us,1.06ms\nmemmem/code/rust-library-never-fn-quux,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,1648109,59598,4.57s,48.77us,0.00ns,50.31us,2.40us,48.33us,169.58us\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,1648109,31968,4.56s,93.74us,0.00ns,93.81us,2.02us,89.74us,218.19us\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,1648109,22943,4.56s,130.42us,0.00ns,130.72us,1.40us,130.13us,248.25us\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,22972,4.57s,130.25us,0.00ns,130.56us,1.53us,130.00us,248.14us\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,1648109,83787,4.57s,35.65us,0.00ns,35.77us,0.99us,34.65us,180.54us\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,1648109,86172,4.56s,34.70us,0.00ns,34.78us,754.00ns,33.58us,150.91us\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,1648109,3181,4.51s,946.51us,0.00ns,943.25us,12.70us,904.69us,1.07ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,1648109,2936,4.51s,1.02ms,0.00ns,1.02ms,4.54us,1.02ms,1.14ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,1648109,57364,4.56s,52.34us,0.00ns,52.20us,1.59us,49.25us,224.03us\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,1648109,78877,4.57s,37.88us,0.00ns,38.00us,723.00ns,37.64us,155.15us\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,79456,4.57s,37.61us,0.00ns,37.72us,710.00ns,37.39us,153.99us\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,1648109,277981,4.63s,10.74us,0.00ns,10.76us,406.00ns,10.57us,130.34us\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,1648109,274822,4.63s,10.95us,0.00ns,10.89us,376.00ns,10.46us,126.05us\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,1648109,3480,4.51s,860.96us,3.00ns,862.04us,9.65us,835.90us,0.99ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,1648109,3271,4.51s,918.97us,0.00ns,917.39us,41.07us,840.56us,1.04ms\nmemmem/code/rust-library-rare-fn-from-str,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,1648109,61516,4.57s,47.77us,0.00ns,48.73us,2.07us,47.43us,168.24us\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,1648109,23408,4.56s,128.06us,0.00ns,128.13us,1.95us,123.74us,243.62us\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,1648109,22376,4.57s,133.74us,0.00ns,134.03us,1.29us,133.40us,247.85us\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,22413,4.56s,133.52us,0.00ns,133.82us,1.67us,133.23us,275.30us\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,1648109,83965,4.56s,35.61us,0.00ns,35.70us,868.00ns,34.47us,152.43us\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,1648109,77514,4.57s,40.52us,0.00ns,38.67us,2.39us,35.23us,157.24us\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,1648109,3032,4.56s,0.99ms,2.00ns,0.99ms,4.96us,0.98ms,1.11ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,1648109,2934,4.56s,1.02ms,1.00ns,1.02ms,4.60us,1.02ms,1.14ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,1648109,4596,4.51s,652.73us,0.00ns,652.74us,2.86us,651.02us,773.12us\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,1648109,57866,4.56s,51.65us,0.00ns,51.74us,1.41us,49.55us,168.33us\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,1648109,77794,4.56s,38.31us,0.00ns,38.53us,866.00ns,37.88us,161.02us\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,78244,4.57s,38.10us,0.00ns,38.31us,823.00ns,37.81us,159.14us\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,1648109,3203,4.56s,935.05us,0.00ns,936.82us,9.90us,915.40us,1.05ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,1648109,3218,4.56s,933.46us,1.00ns,932.26us,6.86us,907.66us,1.06ms\nmemmem/code/rust-library-common-fn-is-empty,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,1648109,61196,4.57s,48.01us,0.00ns,48.99us,2.56us,47.29us,163.72us\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,1648109,4296,4.56s,698.38us,0.00ns,698.42us,5.02us,688.85us,822.11us\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,1648109,16629,4.56s,180.98us,0.00ns,180.36us,2.55us,176.48us,308.73us\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,17574,4.56s,170.20us,0.00ns,170.66us,1.99us,169.05us,285.64us\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,1648109,33381,4.56s,89.50us,0.00ns,89.84us,1.60us,87.90us,213.12us\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,1648109,52530,4.56s,56.95us,0.00ns,57.07us,0.98us,55.58us,172.91us\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,1648109,3561,4.56s,842.01us,0.00ns,842.60us,4.31us,831.16us,0.96ms\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,1648109,2730,4.56s,1.10ms,0.00ns,1.10ms,6.01us,1.10ms,1.30ms\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,1648109,4463,4.56s,672.26us,0.00ns,672.26us,2.69us,670.58us,787.09us\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,1648109,32502,4.56s,91.53us,1.00ns,92.18us,2.59us,89.16us,207.95us\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,1648109,43273,4.56s,68.85us,0.00ns,69.30us,2.45us,66.64us,186.20us\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,48458,4.56s,61.59us,0.00ns,61.87us,1.54us,60.27us,179.29us\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,1648109,3385,4.51s,888.81us,0.00ns,886.36us,9.76us,862.89us,1.00ms\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,1648109,3410,4.51s,877.92us,4.00ns,879.96us,10.29us,859.98us,1.00ms\nmemmem/code/rust-library-common-fn,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,1648109,38697,4.57s,77.27us,0.00ns,77.49us,2.16us,74.18us,192.89us\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,1648109,11287,4.51s,264.53us,0.00ns,265.76us,6.18us,254.43us,394.74us\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,1648109,5253,4.51s,571.14us,0.00ns,571.14us,3.51us,560.21us,683.03us\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,6273,4.51s,477.81us,0.00ns,478.25us,4.65us,465.88us,599.64us\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,1648109,9217,4.51s,322.96us,0.00ns,325.46us,6.63us,317.13us,453.25us\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,1648109,10620,4.51s,283.26us,0.00ns,282.45us,4.46us,272.89us,403.73us\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,1648109,2823,4.51s,1.06ms,0.00ns,1.06ms,25.40us,1.02ms,1.18ms\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,1648109,2396,4.51s,1.25ms,7.00ns,1.25ms,8.30us,1.24ms,1.37ms\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,1648109,3306,4.51s,907.15us,1.00ns,907.49us,4.29us,898.67us,1.03ms\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,1648109,7099,4.56s,421.71us,0.00ns,422.53us,5.30us,412.92us,555.32us\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,1648109,9235,4.51s,322.94us,0.00ns,324.84us,5.69us,314.93us,442.64us\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,10785,4.51s,279.81us,0.00ns,278.14us,4.59us,268.10us,395.49us\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,1648109,2618,4.51s,1.15ms,0.00ns,1.15ms,12.33us,1.11ms,1.31ms\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,1648109,3086,4.51s,0.97ms,1.00ns,0.97ms,10.46us,945.38us,1.08ms\nmemmem/code/rust-library-common-paren,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,1648109,11079,4.51s,272.03us,0.00ns,270.76us,6.63us,257.43us,388.56us\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,1648109,6205,4.51s,478.86us,0.00ns,483.47us,9.20us,468.85us,609.71us\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,1648109,12598,4.51s,236.47us,0.00ns,238.09us,3.53us,235.02us,358.11us\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,1648109,13503,4.51s,221.61us,0.00ns,222.14us,2.38us,219.87us,339.09us\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,1648109,22158,4.51s,135.10us,0.00ns,135.36us,1.68us,132.60us,250.95us\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,1648109,39994,4.57s,74.64us,0.00ns,74.97us,1.35us,73.36us,191.85us\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,1648109,2860,4.51s,1.05ms,0.00ns,1.05ms,7.34us,1.03ms,1.17ms\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,1648109,2652,4.51s,1.13ms,3.00ns,1.13ms,5.35us,1.12ms,1.30ms\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,1648109,4363,4.51s,686.87us,0.00ns,687.61us,3.46us,684.13us,801.09us\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,1648109,25280,4.56s,117.97us,0.00ns,118.56us,2.02us,116.30us,235.06us\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,1648109,27954,4.57s,106.00us,1.00ns,107.29us,3.97us,101.97us,229.36us\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,1648109,31799,4.57s,93.96us,0.00ns,94.31us,1.86us,92.22us,209.41us\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,1648109,2600,4.51s,1.15ms,0.00ns,1.15ms,8.62us,1.14ms,1.27ms\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,1648109,2638,4.51s,1.14ms,1.00ns,1.14ms,7.15us,1.12ms,1.28ms\nmemmem/code/rust-library-common-let,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,1648109,27246,4.51s,111.89us,0.00ns,110.07us,4.37us,98.11us,228.23us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,151305,677060,4.73s,4.76us,0.00ns,4.40us,770.00ns,3.48us,120.17us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,151305,249850,4.62s,11.93us,0.00ns,11.98us,428.00ns,11.87us,128.31us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,151305,250426,4.62s,11.92us,0.00ns,11.94us,480.00ns,11.88us,184.53us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,151305,975325,4.84s,3.03us,0.00ns,3.05us,203.00ns,2.91us,118.97us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,151305,987004,4.84s,2.98us,0.00ns,3.01us,240.00ns,2.87us,119.22us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,151305,302336,4.63s,10.07us,0.00ns,9.89us,442.00ns,9.34us,125.00us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,151305,32010,4.51s,93.55us,0.00ns,93.69us,1.14us,93.09us,207.85us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,151305,366316,4.78s,7.99us,0.00ns,8.08us,524.00ns,6.74us,125.63us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,151305,873057,4.79s,3.40us,0.00ns,3.41us,187.00ns,3.30us,119.48us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,151305,878511,4.79s,3.38us,0.00ns,3.39us,225.00ns,3.24us,119.08us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,151305,740313,4.80s,3.61us,0.00ns,4.02us,1.02us,3.49us,121.48us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,151305,638497,4.74s,3.62us,0.00ns,4.67us,1.21us,3.47us,175.77us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,151305,336979,4.62s,8.64us,0.00ns,8.87us,516.00ns,8.51us,126.73us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,151305,348338,4.62s,8.48us,0.00ns,8.58us,435.00ns,8.36us,123.95us\nmemmem/pathological/md5-huge-no-hash,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,151305,788393,4.79s,3.77us,0.00ns,3.78us,209.00ns,3.53us,120.24us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,151305,731397,4.80s,4.02us,0.00ns,4.07us,286.00ns,3.90us,119.74us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,151305,248171,4.62s,12.00us,0.00ns,12.06us,390.00ns,11.88us,129.57us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,151305,250022,4.63s,11.93us,0.00ns,11.97us,354.00ns,11.88us,127.27us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,151305,957125,4.79s,2.97us,0.00ns,3.11us,330.00ns,2.92us,121.80us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,151305,1000000,4.79s,2.91us,0.00ns,2.92us,183.00ns,2.88us,119.22us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,151305,411629,4.68s,7.25us,0.00ns,7.26us,373.00ns,6.70us,179.25us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,151305,31953,4.51s,93.67us,0.00ns,93.86us,1.28us,93.10us,210.50us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,151305,353853,4.78s,8.38us,0.00ns,8.37us,524.00ns,6.66us,123.75us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,151305,872776,4.79s,3.38us,0.00ns,3.41us,230.00ns,3.00us,120.11us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,151305,886208,4.90s,3.34us,0.00ns,3.36us,226.00ns,3.27us,120.37us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,151305,662669,4.73s,3.65us,0.00ns,4.50us,1.31us,3.48us,121.37us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,151305,826811,4.85s,3.54us,0.00ns,3.60us,465.00ns,3.46us,120.30us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,151305,443112,4.68s,6.63us,0.00ns,6.74us,689.00ns,6.50us,123.77us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,151305,441007,4.68s,6.49us,0.00ns,6.77us,493.00ns,6.35us,124.03us\nmemmem/pathological/md5-huge-last-hash,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,151305,761893,4.74s,3.81us,0.00ns,3.91us,378.00ns,3.55us,177.07us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,500100,114639,4.57s,26.14us,0.00ns,26.14us,561.00ns,25.32us,144.60us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,500100,82913,4.57s,36.08us,0.00ns,36.15us,733.00ns,36.07us,151.50us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,500100,82922,4.57s,36.08us,0.00ns,36.15us,733.00ns,36.06us,151.87us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,500100,260763,4.62s,11.72us,0.00ns,11.47us,707.00ns,9.05us,126.42us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,500100,262914,4.62s,11.40us,0.00ns,11.38us,656.00ns,9.04us,127.11us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,500100,14541,4.51s,204.01us,0.00ns,206.29us,17.15us,200.55us,429.45us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,500100,9674,4.51s,309.93us,0.00ns,310.09us,2.47us,307.95us,427.67us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,500100,15164,4.51s,197.36us,0.00ns,197.81us,2.69us,193.99us,315.67us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,500100,201896,4.67s,14.64us,0.00ns,14.75us,749.00ns,14.02us,184.92us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,500100,260479,4.63s,11.47us,0.00ns,11.49us,415.00ns,11.36us,127.85us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,500100,255555,4.62s,11.79us,0.00ns,11.71us,385.00ns,11.36us,125.33us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,500100,273548,4.63s,10.79us,0.00ns,10.94us,390.00ns,10.63us,128.92us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,500100,275575,4.63s,10.76us,0.00ns,10.86us,437.00ns,10.63us,127.97us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,500100,13842,4.51s,216.32us,0.00ns,216.70us,1.57us,216.30us,331.91us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,500100,13517,4.51s,221.99us,0.00ns,221.92us,4.51us,216.29us,337.66us\nmemmem/pathological/rare-repeated-huge-tricky,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,500100,178237,4.57s,16.76us,0.00ns,16.80us,546.00ns,16.14us,139.83us\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,500100,4659,4.51s,643.94us,0.00ns,643.90us,4.24us,632.45us,759.33us\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,500100,4689,4.51s,643.51us,0.00ns,639.79us,7.21us,628.75us,813.96us\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,500100,9917,4.51s,302.39us,0.00ns,302.50us,2.47us,297.27us,421.21us\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,500100,2711,4.51s,1.10ms,0.00ns,1.11ms,14.62us,1.09ms,1.24ms\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,500100,12415,4.51s,241.27us,0.00ns,241.63us,2.60us,238.52us,361.79us\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,500100,13047,4.51s,198.46us,0.00ns,229.92us,54.94us,198.35us,430.50us\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,500100,18315,4.51s,163.48us,0.00ns,163.77us,1.43us,163.45us,279.79us\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,500100,14563,4.51s,205.23us,0.00ns,205.97us,2.30us,205.11us,323.36us\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,500100,9355,4.57s,318.15us,0.00ns,320.59us,14.30us,307.63us,442.34us\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,500100,4957,4.51s,600.36us,0.00ns,605.19us,16.05us,587.09us,728.91us\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,500100,11832,4.51s,246.57us,2.00ns,253.52us,15.30us,241.43us,375.19us\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,500100,3017,4.51s,0.99ms,0.00ns,0.99ms,9.85us,0.98ms,1.17ms\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,500100,16704,4.51s,179.21us,0.00ns,179.57us,2.36us,179.15us,338.97us\nmemmem/pathological/rare-repeated-huge-match,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,500100,5719,4.51s,525.67us,0.00ns,524.62us,13.30us,490.27us,671.46us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,1001,1000000,530.40ms,80.00ns,0.00ns,81.00ns,25.00ns,76.00ns,19.79us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,529.93ms,89.00ns,0.00ns,89.00ns,71.00ns,75.00ns,69.68us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,645.57ms,86.00ns,0.00ns,87.00ns,17.00ns,84.00ns,8.64us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,1001,1000000,547.73ms,46.00ns,0.00ns,46.00ns,13.00ns,43.00ns,7.42us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,1001,1000000,432.18ms,33.00ns,0.00ns,33.00ns,14.00ns,31.00ns,10.34us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,1001,1000000,1.28s,419.00ns,0.00ns,420.00ns,31.00ns,401.00ns,6.62us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,1001,1000000,1.64s,625.00ns,0.00ns,626.00ns,74.00ns,611.00ns,66.99us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,1001,1000000,1.24s,406.00ns,0.00ns,407.00ns,120.00ns,396.00ns,117.56us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,1001,1000000,1.04s,99.00ns,0.00ns,100.00ns,19.00ns,93.00ns,10.14us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,1001,1000000,480.06ms,36.00ns,0.00ns,37.00ns,10.00ns,32.00ns,2.71us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,486.93ms,32.00ns,0.00ns,32.00ns,9.00ns,28.00ns,2.99us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,1001,1000000,430.41ms,32.00ns,0.00ns,32.00ns,10.00ns,29.00ns,3.35us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,1001,1000000,429.97ms,28.00ns,0.00ns,28.00ns,8.00ns,25.00ns,2.97us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,1001,1000000,1.34s,455.00ns,0.00ns,456.00ns,127.00ns,450.00ns,121.96us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,1001,1000000,1.28s,466.00ns,0.00ns,468.00ns,78.00ns,452.00ns,67.57us\nmemmem/pathological/rare-repeated-small-tricky,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,1001,1000000,487.85ms,44.00ns,0.00ns,44.00ns,10.00ns,38.00ns,2.39us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,1001,1000000,2.99s,1.30us,0.00ns,1.30us,143.00ns,1.25us,120.66us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,1001,1000000,2.95s,1.27us,0.00ns,1.27us,144.00ns,1.26us,121.64us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,1001,1000000,1.65s,605.00ns,0.00ns,606.00ns,33.00ns,589.00ns,6.52us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,1001,1000000,4.00s,2.10us,0.00ns,2.12us,161.00ns,2.08us,118.40us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,1001,1000000,1.40s,486.00ns,0.00ns,488.00ns,73.00ns,473.00ns,66.53us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,1001,1000000,1.30s,414.00ns,0.00ns,441.00ns,81.00ns,410.00ns,7.98us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,1001,1000000,1.03s,342.00ns,0.00ns,343.00ns,29.00ns,337.00ns,7.68us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,1001,1000000,1.24s,421.00ns,0.00ns,422.00ns,28.00ns,415.00ns,7.41us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,1001,1000000,2.24s,704.00ns,0.00ns,709.00ns,184.00ns,667.00ns,178.17us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,1001,1000000,2.75s,1.16us,0.00ns,1.17us,80.00ns,1.15us,65.06us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,1001,1000000,1.45s,501.00ns,0.00ns,511.00ns,80.00ns,491.00ns,69.96us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,1001,1000000,3.94s,2.01us,0.00ns,2.02us,150.00ns,1.96us,121.00us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,1001,1000000,1.19s,391.00ns,0.00ns,392.00ns,138.00ns,385.00ns,117.43us\nmemmem/pathological/rare-repeated-small-match,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,1001,1000000,2.70s,1.13us,0.00ns,1.13us,141.00ns,1.07us,117.31us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,550004,34933,4.51s,85.87us,0.00ns,85.84us,1.32us,83.45us,201.48us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,550004,45997,4.57s,64.96us,0.00ns,65.19us,1.16us,63.78us,181.03us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,550004,42290,4.57s,73.16us,0.00ns,70.91us,3.95us,63.91us,188.52us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,550004,31393,4.57s,91.76us,0.00ns,95.53us,5.27us,89.99us,215.24us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,550004,31799,4.57s,91.09us,0.00ns,94.31us,5.02us,89.98us,224.51us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,550004,36279,4.57s,82.53us,0.00ns,82.66us,2.61us,76.89us,201.18us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,550004,8752,4.51s,342.84us,1.00ns,342.75us,2.41us,340.19us,513.14us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,550004,13797,4.51s,217.05us,0.00ns,217.42us,1.62us,216.88us,330.47us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,550004,9558,4.56s,296.26us,9.00ns,313.77us,41.64us,218.58us,448.54us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,550004,23044,4.51s,122.82us,0.00ns,130.16us,11.98us,121.45us,237.22us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,550004,22669,4.51s,128.72us,0.00ns,132.31us,11.03us,121.38us,243.97us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,550004,39399,4.51s,73.21us,0.00ns,76.11us,3.83us,72.36us,194.19us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,550004,40024,4.57s,73.06us,0.00ns,74.92us,3.40us,72.30us,194.21us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,550004,55505,4.57s,53.91us,0.00ns,54.01us,1.01us,46.44us,168.21us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,550004,55271,4.57s,54.10us,0.00ns,54.24us,0.96us,53.75us,169.09us\nmemmem/pathological/defeat-simple-vector-alphabet,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,550004,189307,4.57s,15.77us,0.00ns,15.82us,561.00ns,15.46us,185.63us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,720057,45172,4.57s,74.50us,0.00ns,66.38us,13.92us,42.97us,189.47us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,720057,57594,4.57s,51.96us,0.00ns,52.05us,754.00ns,51.93us,168.62us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,720057,57611,4.57s,51.94us,0.00ns,52.04us,742.00ns,51.91us,164.80us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,720057,96448,4.57s,31.01us,0.00ns,31.07us,704.00ns,30.96us,147.10us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,720057,96965,4.57s,30.84us,0.00ns,30.91us,615.00ns,30.82us,145.49us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,720057,101969,4.57s,29.33us,0.00ns,29.39us,670.00ns,26.67us,142.68us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,720057,6726,4.51s,445.13us,9.00ns,446.04us,3.97us,442.32us,559.64us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,720057,50354,4.56s,59.34us,0.00ns,59.48us,1.06us,58.84us,173.90us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,720057,96472,4.57s,31.01us,0.00ns,31.07us,593.00ns,30.95us,146.91us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,720057,95501,4.57s,30.91us,0.00ns,31.38us,836.00ns,30.84us,201.68us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,720057,13566,4.51s,220.71us,0.00ns,221.12us,1.89us,220.68us,336.22us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,720057,13572,4.51s,220.59us,0.00ns,221.02us,2.09us,220.56us,335.52us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,720057,167787,4.57s,17.54us,0.00ns,17.85us,1.18us,17.48us,132.28us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,720057,158810,4.57s,18.79us,0.00ns,18.86us,630.00ns,18.75us,133.38us\nmemmem/pathological/defeat-simple-vector-freq-alphabet,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,720057,13167,4.51s,227.00us,0.00ns,227.81us,5.21us,225.28us,376.90us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,720057,2827,4.51s,1.07ms,0.00ns,1.06ms,14.01us,1.04ms,1.18ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,720057,699,4.51s,4.30ms,0.00ns,4.30ms,7.88us,4.29ms,4.41ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,720057,699,4.51s,4.29ms,0.00ns,4.29ms,8.62us,4.28ms,4.41ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,720057,5015,4.51s,597.32us,0.00ns,598.19us,14.05us,565.99us,829.45us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,720057,5082,4.51s,578.30us,1.00ns,590.32us,25.75us,553.82us,708.74us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,720057,5494,4.51s,545.62us,1.00ns,546.03us,2.98us,543.99us,661.18us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,720057,6724,4.51s,445.90us,1.00ns,446.15us,2.81us,442.96us,560.11us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,720057,2626,4.56s,1.11ms,1.00ns,1.14ms,58.50us,1.11ms,1.30ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,720057,4964,4.51s,604.58us,2.00ns,604.38us,9.33us,590.56us,715.32us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,720057,4977,4.51s,602.60us,0.00ns,602.75us,10.59us,587.24us,708.88us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,720057,2356,4.51s,1.27ms,0.00ns,1.27ms,6.36us,1.27ms,1.42ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,720057,2372,4.51s,1.26ms,0.00ns,1.26ms,5.75us,1.26ms,1.39ms\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,720057,5587,4.51s,544.50us,0.00ns,537.03us,10.25us,521.13us,654.78us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,720057,5486,4.51s,546.77us,1.00ns,546.82us,2.92us,520.82us,664.83us\nmemmem/pathological/defeat-simple-vector-repeated-alphabet,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,720057,130534,4.57s,22.91us,0.00ns,22.95us,585.00ns,22.00us,138.06us\nmemmem/sliceslice/short,needles-in-needles,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,,452,4.56s,6.83ms,30.00ns,6.64ms,248.09us,6.20ms,7.00ms\nmemmem/sliceslice/short,needles-in-needles,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,,213,4.56s,14.09ms,0.00ns,14.10ms,43.63us,14.04ms,14.44ms\nmemmem/sliceslice/short,needles-in-needles,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,,224,4.56s,13.43ms,441.00ns,13.44ms,95.70us,13.30ms,14.13ms\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,1000,29642,4.57s,100.45us,0.00ns,101.16us,2.04us,99.88us,217.82us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,1000,30971,4.57s,97.02us,0.00ns,96.83us,1.78us,91.90us,213.07us\nmemmem/sliceslice/seemingly-random,needles-in-haystack,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,1000,38329,4.57s,77.91us,0.00ns,78.23us,1.46us,75.14us,198.26us\nmemmem/sliceslice/i386,needles-in-haystack,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,806771,185,4.56s,16.25ms,0.00ns,16.25ms,24.27us,16.22ms,16.36ms\nmemmem/sliceslice/i386,needles-in-haystack,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,806771,170,4.56s,17.66ms,49.00ns,17.67ms,62.98us,17.62ms,18.36ms\nmemmem/sliceslice/i386,needles-in-haystack,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,806771,151,4.56s,20.34ms,0.00ns,19.96ms,473.63us,19.25ms,20.47ms\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,18105,4.51s,165.82us,0.00ns,165.68us,3.32us,153.70us,284.75us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,35334,4.51s,84.38us,1.00ns,84.87us,1.50us,83.39us,200.89us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,36339,4.51s,82.44us,0.00ns,82.52us,1.37us,79.07us,199.30us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613345,114451,4.57s,26.03us,0.00ns,26.18us,691.00ns,25.86us,143.36us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613345,182724,4.57s,16.36us,0.00ns,16.39us,521.00ns,15.46us,132.93us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613345,13131,4.51s,228.77us,0.00ns,228.44us,5.41us,215.05us,346.64us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613345,7680,4.51s,390.48us,0.00ns,390.60us,2.30us,388.64us,505.71us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,613345,12023,4.51s,248.56us,0.00ns,249.50us,2.24us,248.08us,362.19us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613345,67367,4.56s,43.90us,0.00ns,44.42us,2.72us,39.62us,158.55us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,150254,4.57s,19.78us,0.00ns,19.93us,674.00ns,19.23us,135.64us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,174226,4.57s,17.11us,0.00ns,17.18us,491.00ns,16.87us,131.56us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613345,10430,4.51s,288.26us,0.00ns,287.62us,6.98us,264.33us,413.05us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613345,10828,4.51s,278.48us,1.00ns,277.05us,7.91us,257.29us,401.83us\nmemmem/subtitles/common/huge-en-that,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613345,111143,4.57s,27.83us,0.00ns,26.96us,1.96us,22.55us,145.68us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,10727,4.51s,279.40us,0.00ns,279.65us,3.96us,269.30us,404.24us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,23712,4.52s,125.44us,1.00ns,126.48us,2.33us,123.53us,243.52us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,28216,4.52s,105.47us,0.00ns,106.29us,2.02us,103.89us,222.62us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613345,27812,4.51s,107.53us,0.00ns,107.84us,2.02us,105.79us,221.42us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613345,81229,4.57s,36.91us,0.00ns,36.90us,1.03us,34.59us,151.99us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613345,11064,4.51s,271.90us,1.00ns,271.13us,6.29us,255.19us,380.08us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613345,7206,4.51s,415.87us,1.00ns,416.34us,2.94us,412.71us,535.45us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,613345,10746,4.51s,279.14us,0.00ns,279.15us,2.04us,276.52us,392.14us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613345,41879,4.57s,72.28us,0.00ns,71.52us,3.20us,65.63us,189.23us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,42092,4.57s,70.62us,0.00ns,71.24us,2.49us,67.38us,187.01us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,64533,4.57s,45.54us,0.00ns,46.45us,2.46us,43.76us,164.59us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613345,8344,4.51s,359.39us,4.00ns,359.53us,6.54us,339.07us,467.86us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613345,8864,4.51s,339.48us,2.00ns,338.42us,7.24us,315.69us,495.31us\nmemmem/subtitles/common/huge-en-you,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613345,52151,4.57s,57.35us,0.00ns,57.49us,1.32us,55.38us,176.22us\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,7033,4.51s,431.27us,0.00ns,426.58us,12.84us,403.72us,562.62us\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,2515,4.51s,1.19ms,0.00ns,1.19ms,6.89us,1.18ms,1.31ms\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,3928,4.51s,761.62us,1.00ns,763.84us,9.32us,746.49us,879.96us\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613345,7015,4.51s,424.62us,0.00ns,427.62us,12.33us,420.30us,551.97us\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613345,7025,4.51s,425.29us,0.00ns,427.07us,5.90us,423.42us,538.98us\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613345,3033,4.51s,1.00ms,0.00ns,0.99ms,23.00us,879.40us,1.10ms\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613345,2887,4.51s,1.04ms,0.00ns,1.04ms,7.87us,1.01ms,1.16ms\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,613345,3004,4.51s,1.00ms,2.00ns,1.00ms,11.57us,0.97ms,1.11ms\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613345,5976,4.56s,501.60us,0.00ns,501.95us,2.67us,498.39us,617.33us\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,7151,4.51s,398.00us,0.00ns,419.51us,42.90us,394.58us,551.28us\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,7708,4.51s,388.81us,0.00ns,389.20us,4.33us,386.35us,502.65us\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613345,1868,4.51s,1.62ms,9.00ns,1.61ms,33.71us,1.54ms,1.75ms\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613345,2962,4.51s,1.01ms,2.00ns,1.01ms,8.24us,0.98ms,1.12ms\nmemmem/subtitles/common/huge-en-one-space,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613345,6943,4.51s,437.45us,0.00ns,432.08us,12.12us,409.11us,537.02us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613402,13580,4.51s,220.56us,0.00ns,220.89us,2.57us,216.24us,333.93us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613402,28098,4.51s,106.56us,0.00ns,106.74us,1.36us,105.97us,223.01us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613402,27924,4.51s,107.24us,0.00ns,107.41us,1.18us,106.36us,221.26us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613402,89238,4.57s,33.39us,0.00ns,33.59us,1.64us,31.39us,205.07us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613402,184204,4.57s,16.20us,0.00ns,16.25us,539.00ns,15.72us,133.14us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613402,6438,4.51s,465.70us,0.00ns,465.98us,3.21us,458.42us,581.83us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613402,7740,4.51s,387.34us,1.00ns,387.58us,2.23us,385.98us,500.85us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,613402,12020,4.51s,249.14us,0.00ns,249.56us,1.74us,248.83us,362.26us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613402,88414,4.62s,33.68us,0.00ns,33.82us,1.00us,31.69us,149.79us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613402,113043,4.57s,26.91us,0.00ns,26.50us,1.20us,24.14us,142.81us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613402,155846,4.57s,19.50us,0.00ns,19.22us,937.00ns,18.08us,135.68us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613402,6191,4.51s,484.08us,0.00ns,484.58us,4.49us,476.36us,601.81us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613402,6335,4.51s,472.94us,0.00ns,473.57us,5.73us,464.17us,637.46us\nmemmem/subtitles/common/huge-ru-that,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613402,76154,4.57s,39.17us,0.00ns,39.36us,0.97us,37.03us,156.50us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613402,10336,4.51s,289.75us,0.00ns,290.23us,3.03us,284.65us,398.68us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613402,12996,4.51s,230.60us,0.00ns,230.82us,2.21us,227.37us,344.89us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613402,13291,4.51s,226.03us,0.00ns,225.69us,2.79us,220.00us,340.90us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613402,37425,4.51s,80.07us,0.00ns,80.13us,1.65us,78.07us,195.09us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613402,82371,4.57s,34.64us,0.00ns,36.39us,2.33us,33.84us,152.28us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613402,5969,4.51s,501.86us,0.00ns,502.63us,3.57us,498.50us,621.43us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613402,7266,4.51s,412.14us,0.00ns,412.90us,3.12us,409.47us,525.46us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,613402,11343,4.51s,264.11us,0.00ns,264.46us,1.73us,263.33us,378.62us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613402,47845,4.56s,62.09us,0.00ns,62.59us,1.96us,59.61us,234.41us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613402,51834,4.57s,57.45us,0.00ns,57.84us,1.87us,54.91us,173.31us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613402,65296,4.57s,46.14us,0.00ns,45.91us,1.75us,41.90us,159.40us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613402,5245,4.51s,571.13us,0.00ns,572.02us,5.80us,561.50us,681.17us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613402,5482,4.51s,546.85us,1.00ns,547.28us,3.81us,540.47us,659.67us\nmemmem/subtitles/common/huge-ru-not,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613402,20162,4.51s,148.03us,0.00ns,148.77us,2.72us,143.72us,265.95us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613402,14347,4.51s,208.21us,0.00ns,209.07us,2.83us,206.34us,321.67us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613402,4570,4.51s,656.12us,1.00ns,656.56us,4.34us,646.39us,765.96us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613402,6545,4.51s,457.87us,0.00ns,458.39us,4.44us,445.19us,571.27us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613402,13770,4.51s,216.91us,0.00ns,217.84us,6.34us,215.03us,387.82us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613402,13773,4.51s,216.26us,0.00ns,217.80us,5.16us,215.55us,330.57us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613402,5039,4.51s,595.90us,0.00ns,595.34us,12.23us,553.20us,704.66us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613402,4142,4.51s,724.03us,1.00ns,724.41us,5.27us,709.42us,836.41us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,613402,4373,4.51s,685.80us,0.00ns,686.03us,4.46us,665.13us,805.63us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613402,7858,4.56s,381.44us,0.00ns,381.70us,2.36us,378.30us,495.03us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613402,13544,4.51s,213.24us,0.00ns,221.47us,16.93us,208.27us,335.04us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613402,15011,4.51s,199.37us,0.00ns,199.83us,2.51us,197.94us,320.94us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613402,3410,4.51s,880.27us,4.00ns,879.79us,15.52us,848.51us,1.02ms\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613402,4689,4.51s,640.03us,0.00ns,639.82us,7.91us,609.75us,756.07us\nmemmem/subtitles/common/huge-ru-one-space,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613402,13398,4.51s,215.23us,0.00ns,223.89us,13.16us,207.99us,356.03us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613427,21462,4.51s,138.35us,0.00ns,139.75us,3.25us,136.18us,260.34us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613427,51377,4.57s,58.19us,0.00ns,58.36us,0.98us,57.38us,178.89us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613427,54435,4.57s,54.80us,0.00ns,55.08us,1.08us,54.27us,175.75us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613427,90098,4.57s,33.18us,0.00ns,33.26us,772.00ns,32.57us,152.91us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613427,164398,4.57s,18.17us,0.00ns,18.22us,547.00ns,17.81us,138.54us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613427,22075,4.51s,135.38us,0.00ns,135.87us,2.39us,132.53us,253.44us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613427,7396,4.51s,405.37us,0.00ns,405.63us,2.38us,402.90us,520.11us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,613427,11992,4.51s,249.72us,0.00ns,250.14us,2.03us,249.45us,364.16us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613427,94400,4.62s,31.12us,0.00ns,31.67us,1.51us,30.42us,205.51us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613427,127351,4.57s,23.29us,0.00ns,23.52us,885.00ns,22.40us,140.67us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613427,152107,4.57s,19.59us,0.00ns,19.69us,651.00ns,19.07us,135.66us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613427,22199,4.51s,135.02us,0.00ns,135.11us,2.26us,129.73us,250.07us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613427,23057,4.51s,129.74us,0.00ns,130.08us,3.12us,121.36us,243.42us\nmemmem/subtitles/common/huge-zh-that,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613427,106901,4.57s,29.40us,0.00ns,28.03us,2.08us,25.05us,146.99us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613427,13133,4.51s,227.81us,0.00ns,228.41us,3.55us,219.62us,347.92us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613427,25233,4.51s,118.67us,0.00ns,118.86us,1.40us,117.21us,235.42us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613427,27539,4.51s,108.67us,0.00ns,108.91us,1.25us,107.75us,224.34us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613427,44450,4.57s,67.25us,0.00ns,67.46us,1.20us,66.31us,182.67us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613427,94681,4.57s,31.56us,0.00ns,31.65us,749.00ns,30.96us,149.47us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613427,13455,4.51s,223.16us,0.00ns,222.94us,4.33us,209.35us,343.65us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613427,7350,4.51s,407.88us,1.00ns,408.19us,2.63us,404.42us,524.23us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,613427,11447,4.51s,261.62us,0.00ns,262.06us,2.12us,260.89us,375.15us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613427,58023,4.56s,50.73us,0.00ns,51.59us,1.91us,49.12us,168.81us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613427,61216,4.57s,48.39us,0.00ns,48.97us,1.92us,46.56us,162.72us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613427,83977,4.57s,35.56us,0.00ns,35.69us,0.99us,34.12us,149.21us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613427,11528,4.51s,260.39us,1.00ns,260.22us,3.83us,240.04us,375.98us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613427,12269,4.51s,243.76us,0.00ns,244.50us,4.58us,234.01us,364.38us\nmemmem/subtitles/common/huge-zh-do-not,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613427,66726,4.57s,44.74us,0.00ns,44.93us,1.22us,42.73us,216.58us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613427,29938,4.51s,99.59us,0.00ns,100.18us,2.40us,98.06us,222.38us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613427,10405,4.51s,288.16us,0.00ns,288.30us,2.45us,282.40us,407.20us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613427,13647,4.51s,219.34us,0.00ns,219.80us,2.63us,214.81us,339.22us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613427,24136,4.51s,123.04us,0.00ns,124.27us,3.31us,120.76us,239.15us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613427,26893,4.51s,110.92us,0.00ns,111.53us,2.61us,109.83us,224.73us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613427,6808,4.51s,441.86us,1.00ns,440.68us,11.45us,415.22us,558.81us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613427,5904,4.51s,507.36us,1.00ns,508.11us,3.83us,502.41us,627.28us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,613427,7549,4.51s,398.88us,0.00ns,397.40us,4.83us,385.56us,517.07us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613427,17817,4.57s,168.16us,0.00ns,168.27us,2.57us,164.17us,339.57us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613427,24052,4.51s,122.67us,0.00ns,124.70us,4.68us,120.20us,238.69us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613427,28674,4.51s,104.23us,0.00ns,104.60us,2.94us,101.23us,224.74us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613427,5705,4.51s,526.33us,0.00ns,525.88us,6.90us,506.52us,642.22us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613427,7164,4.51s,418.55us,0.00ns,418.74us,4.16us,404.49us,532.17us\nmemmem/subtitles/common/huge-zh-one-space,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613427,28670,4.51s,104.20us,0.00ns,104.61us,2.33us,102.21us,229.21us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,64450,4.57s,47.36us,0.00ns,46.51us,2.86us,39.33us,164.57us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,67071,4.57s,44.60us,0.00ns,44.69us,692.00ns,44.55us,160.06us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,67084,4.57s,44.60us,0.00ns,44.68us,781.00ns,44.54us,159.10us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613345,184144,4.57s,16.14us,0.00ns,16.26us,557.00ns,15.34us,136.62us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613345,235738,4.64s,13.17us,0.00ns,12.70us,787.00ns,11.09us,126.35us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613345,10673,4.51s,277.46us,0.00ns,281.06us,10.34us,252.91us,388.39us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613345,7901,4.51s,379.17us,0.00ns,379.68us,2.56us,377.89us,495.77us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,613345,12300,4.51s,242.07us,0.00ns,243.87us,6.05us,238.06us,380.51us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613345,150391,4.62s,20.73us,0.00ns,19.84us,1.92us,17.09us,147.28us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,222578,4.63s,13.42us,0.00ns,13.45us,448.00ns,13.31us,129.82us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,222001,4.63s,13.42us,0.00ns,13.48us,470.00ns,13.30us,136.45us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,613345,221644,4.63s,13.54us,0.00ns,13.50us,407.00ns,13.12us,128.30us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,613345,185610,4.57s,16.03us,0.00ns,16.13us,445.00ns,15.55us,132.22us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613345,10000,4.51s,296.07us,1.00ns,300.00us,10.34us,280.47us,478.63us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613345,9906,4.51s,302.69us,0.00ns,302.83us,12.23us,276.40us,429.77us\nmemmem/subtitles/never/huge-en-john-watson,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613345,172856,4.57s,17.27us,0.00ns,17.32us,469.00ns,16.07us,134.29us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,66099,4.57s,45.17us,0.00ns,45.35us,1.19us,43.20us,164.35us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,59070,4.57s,50.54us,0.00ns,50.75us,923.00ns,50.31us,166.04us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,59531,4.57s,50.26us,0.00ns,50.36us,795.00ns,49.97us,169.18us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613345,253679,4.62s,11.78us,0.00ns,11.79us,373.00ns,11.61us,127.51us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613345,248122,4.62s,12.03us,0.00ns,12.06us,456.00ns,11.65us,130.35us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613345,20126,4.51s,148.72us,1.00ns,149.03us,3.83us,137.04us,268.49us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613345,7900,4.51s,379.06us,0.00ns,379.72us,3.03us,377.83us,492.92us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,613345,12355,4.51s,242.08us,0.00ns,242.80us,3.78us,237.87us,359.21us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613345,106987,4.62s,28.04us,0.00ns,27.94us,898.00ns,26.19us,149.59us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,214810,4.57s,13.89us,0.00ns,13.93us,407.00ns,11.96us,131.78us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,214692,4.63s,13.89us,0.00ns,13.94us,412.00ns,13.13us,130.03us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,613345,185998,4.57s,15.96us,0.00ns,16.10us,564.00ns,15.63us,136.14us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,613345,219391,4.63s,13.56us,0.00ns,13.64us,438.00ns,13.24us,135.30us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613345,16081,4.51s,184.92us,0.00ns,186.52us,9.70us,162.44us,300.44us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613345,15964,4.51s,187.18us,2.00ns,187.89us,9.10us,161.14us,318.23us\nmemmem/subtitles/never/huge-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613345,168817,4.57s,17.44us,0.00ns,17.74us,814.00ns,17.18us,137.12us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,58220,4.57s,51.52us,0.00ns,51.50us,840.00ns,50.48us,169.81us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,67051,4.57s,44.63us,0.00ns,44.71us,689.00ns,44.59us,161.19us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,67057,4.57s,44.62us,0.00ns,44.70us,824.00ns,44.59us,161.88us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613345,223258,4.63s,13.70us,0.00ns,13.41us,802.00ns,11.10us,130.81us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613345,226228,4.63s,13.65us,0.00ns,13.23us,799.00ns,11.09us,134.94us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613345,19830,4.51s,150.88us,0.00ns,151.26us,4.10us,139.51us,278.48us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613345,7894,4.51s,379.75us,0.00ns,380.02us,2.49us,378.28us,499.25us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,613345,12364,4.51s,242.23us,0.00ns,242.62us,1.75us,238.14us,357.65us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613345,166222,4.67s,17.89us,0.00ns,17.94us,692.00ns,17.16us,135.81us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,222744,4.63s,13.41us,0.00ns,13.44us,515.00ns,13.31us,186.28us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,217766,4.63s,13.84us,0.00ns,13.75us,438.00ns,13.30us,132.88us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,613345,186183,4.57s,16.02us,0.00ns,16.08us,542.00ns,15.58us,137.65us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,613345,226627,4.63s,13.18us,0.00ns,13.21us,447.00ns,13.06us,127.93us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613345,17397,4.51s,172.54us,0.00ns,172.41us,6.47us,154.63us,296.68us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613345,17005,4.51s,176.04us,0.00ns,176.39us,7.22us,158.56us,294.86us\nmemmem/subtitles/never/huge-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613345,171689,4.57s,17.40us,0.00ns,17.44us,522.00ns,17.02us,134.98us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,11993,4.51s,249.68us,0.00ns,250.13us,2.10us,249.25us,367.17us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,34771,4.57s,85.18us,0.00ns,86.23us,1.79us,83.34us,197.84us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,34320,4.57s,87.36us,1.00ns,87.38us,2.10us,83.83us,206.93us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613345,220134,4.63s,13.52us,0.00ns,13.60us,491.00ns,13.20us,126.93us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613345,222950,4.63s,13.34us,0.00ns,13.42us,490.00ns,13.18us,139.03us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613345,6816,4.51s,440.38us,3.00ns,440.12us,9.99us,403.54us,552.66us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613345,7780,4.51s,385.24us,0.00ns,385.60us,3.05us,383.71us,497.96us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,613345,12371,4.51s,242.04us,0.00ns,242.47us,2.02us,238.01us,359.11us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613345,149428,4.62s,19.95us,0.00ns,19.96us,529.00ns,18.52us,137.28us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,222689,4.63s,13.42us,0.00ns,13.44us,351.00ns,13.31us,130.69us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,222775,4.63s,13.41us,0.00ns,13.43us,446.00ns,13.31us,128.28us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,613345,223469,4.63s,13.42us,0.00ns,13.39us,469.00ns,13.06us,131.63us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,613345,189628,4.62s,15.72us,0.00ns,15.79us,422.00ns,15.53us,135.46us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613345,5999,4.51s,501.79us,0.00ns,500.09us,11.00us,447.02us,626.70us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613345,6322,4.51s,472.57us,4.00ns,474.57us,10.63us,451.40us,588.78us\nmemmem/subtitles/never/huge-en-two-space,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613345,152022,4.57s,20.82us,0.00ns,19.70us,1.57us,17.32us,135.97us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,28,1000000,533.98ms,21.00ns,0.00ns,21.00ns,8.00ns,19.00ns,2.89us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,431.16ms,24.00ns,0.00ns,24.00ns,7.00ns,22.00ns,3.10us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,432.62ms,18.00ns,0.00ns,18.00ns,7.00ns,16.00ns,2.96us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,28,1000000,433.57ms,25.00ns,0.00ns,26.00ns,10.00ns,23.00ns,3.15us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,28,1000000,439.55ms,15.00ns,0.00ns,15.00ns,9.00ns,13.00ns,3.46us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,28,1000000,442.72ms,12.00ns,0.00ns,12.00ns,7.00ns,10.00ns,2.81us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,28,1000000,434.62ms,23.00ns,0.00ns,23.00ns,8.00ns,21.00ns,2.88us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,28,1000000,440.16ms,21.00ns,0.00ns,22.00ns,8.00ns,19.00ns,3.95us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,28,1000000,930.23ms,60.00ns,0.00ns,61.00ns,12.00ns,57.00ns,2.65us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,433.21ms,25.00ns,0.00ns,25.00ns,9.00ns,22.00ns,3.49us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,492.54ms,15.00ns,0.00ns,15.00ns,8.00ns,13.00ns,2.99us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,28,1000000,443.25ms,16.00ns,0.00ns,16.00ns,7.00ns,14.00ns,3.09us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,28,1000000,428.90ms,12.00ns,0.00ns,12.00ns,6.00ns,11.00ns,3.80us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,28,1000000,429.05ms,25.00ns,0.00ns,25.00ns,9.00ns,22.00ns,3.04us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,28,1000000,432.71ms,26.00ns,0.00ns,26.00ns,8.00ns,23.00ns,2.68us\nmemmem/subtitles/never/teeny-en-john-watson,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,28,1000000,429.48ms,29.00ns,0.00ns,29.00ns,10.00ns,26.00ns,3.08us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,28,1000000,478.87ms,21.00ns,0.00ns,21.00ns,8.00ns,19.00ns,2.40us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,434.06ms,24.00ns,0.00ns,24.00ns,8.00ns,22.00ns,3.28us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,492.43ms,18.00ns,0.00ns,18.00ns,7.00ns,16.00ns,2.57us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,28,1000000,435.06ms,26.00ns,0.00ns,26.00ns,9.00ns,23.00ns,3.19us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,28,1000000,479.45ms,15.00ns,0.00ns,15.00ns,7.00ns,13.00ns,2.36us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,28,1000000,379.22ms,13.00ns,0.00ns,13.00ns,7.00ns,11.00ns,3.75us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,28,1000000,428.92ms,23.00ns,0.00ns,24.00ns,8.00ns,21.00ns,2.74us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,28,1000000,438.67ms,21.00ns,0.00ns,22.00ns,11.00ns,19.00ns,5.02us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,28,1000000,934.15ms,61.00ns,0.00ns,62.00ns,12.00ns,57.00ns,3.28us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,429.90ms,26.00ns,0.00ns,26.00ns,73.00ns,23.00ns,72.69us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,379.61ms,15.00ns,0.00ns,15.00ns,9.00ns,13.00ns,3.16us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,28,1000000,433.29ms,14.00ns,0.00ns,14.00ns,22.00ns,12.00ns,20.73us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,28,1000000,444.38ms,12.00ns,0.00ns,12.00ns,7.00ns,10.00ns,2.97us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,28,1000000,432.18ms,23.00ns,0.00ns,24.00ns,9.00ns,21.00ns,2.69us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,28,1000000,429.69ms,25.00ns,0.00ns,25.00ns,8.00ns,22.00ns,3.61us\nmemmem/subtitles/never/teeny-en-all-common-bytes,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,28,1000000,432.06ms,30.00ns,0.00ns,30.00ns,12.00ns,27.00ns,5.60us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,28,1000000,539.77ms,21.00ns,0.00ns,21.00ns,9.00ns,19.00ns,2.97us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,480.18ms,24.00ns,0.00ns,24.00ns,9.00ns,22.00ns,3.58us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,436.69ms,18.00ns,0.00ns,18.00ns,7.00ns,16.00ns,3.02us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,28,1000000,435.49ms,26.00ns,0.00ns,26.00ns,8.00ns,23.00ns,2.39us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,28,1000000,434.87ms,15.00ns,0.00ns,15.00ns,7.00ns,13.00ns,3.51us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,28,1000000,380.22ms,12.00ns,0.00ns,12.00ns,7.00ns,10.00ns,2.83us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,28,1000000,482.18ms,24.00ns,0.00ns,25.00ns,9.00ns,22.00ns,3.71us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,28,1000000,494.92ms,22.00ns,0.00ns,22.00ns,73.00ns,19.00ns,72.52us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,28,1000000,932.80ms,61.00ns,0.00ns,62.00ns,13.00ns,57.00ns,4.05us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,479.99ms,26.00ns,0.00ns,26.00ns,23.00ns,23.00ns,19.08us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,440.26ms,15.00ns,0.00ns,15.00ns,70.00ns,13.00ns,69.14us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,28,1000000,443.06ms,14.00ns,0.00ns,14.00ns,9.00ns,12.00ns,4.47us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,28,1000000,444.70ms,12.00ns,0.00ns,12.00ns,5.00ns,10.00ns,2.20us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,28,1000000,430.21ms,21.00ns,0.00ns,21.00ns,7.00ns,18.00ns,2.94us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,28,1000000,479.79ms,21.00ns,0.00ns,21.00ns,9.00ns,18.00ns,2.75us\nmemmem/subtitles/never/teeny-en-some-rare-bytes,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,28,1000000,446.89ms,19.00ns,0.00ns,19.00ns,9.00ns,17.00ns,3.43us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,28,1000000,431.29ms,21.00ns,0.00ns,21.00ns,8.00ns,18.00ns,3.22us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,431.78ms,24.00ns,0.00ns,24.00ns,10.00ns,22.00ns,3.11us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,543.82ms,18.00ns,0.00ns,18.00ns,10.00ns,16.00ns,3.84us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,28,1000000,430.03ms,27.00ns,0.00ns,27.00ns,8.00ns,24.00ns,2.96us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,28,1000000,432.16ms,15.00ns,0.00ns,15.00ns,7.00ns,13.00ns,2.36us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,28,1000000,430.73ms,18.00ns,0.00ns,18.00ns,8.00ns,15.00ns,3.65us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,28,1000000,489.13ms,26.00ns,0.00ns,26.00ns,8.00ns,23.00ns,2.72us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,28,1000000,432.04ms,21.00ns,0.00ns,22.00ns,9.00ns,19.00ns,3.19us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,28,1000000,932.19ms,61.00ns,0.00ns,62.00ns,11.00ns,56.00ns,2.46us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,430.12ms,26.00ns,0.00ns,26.00ns,8.00ns,24.00ns,2.99us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,379.61ms,15.00ns,0.00ns,15.00ns,12.00ns,13.00ns,7.12us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,28,1000000,436.39ms,14.00ns,0.00ns,14.00ns,7.00ns,12.00ns,5.02us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,28,1000000,379.68ms,12.00ns,0.00ns,12.00ns,7.00ns,10.00ns,3.36us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,28,1000000,433.88ms,23.00ns,0.00ns,23.00ns,10.00ns,20.00ns,3.24us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,28,1000000,430.53ms,24.00ns,0.00ns,24.00ns,75.00ns,21.00ns,73.89us\nmemmem/subtitles/never/teeny-en-two-space,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,28,1000000,483.24ms,17.00ns,0.00ns,17.00ns,9.00ns,15.00ns,2.91us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613402,26297,4.51s,113.91us,0.00ns,114.05us,1.55us,110.98us,232.64us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613402,21342,4.51s,141.43us,0.00ns,140.53us,2.35us,136.33us,257.80us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613402,21802,4.51s,137.28us,0.00ns,137.57us,1.37us,136.43us,253.29us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613402,228972,4.62s,13.57us,0.00ns,13.07us,936.00ns,11.12us,131.22us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613402,228429,4.63s,13.53us,0.00ns,13.10us,875.00ns,11.09us,129.83us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613402,14038,4.51s,213.49us,0.00ns,213.69us,1.71us,211.46us,328.94us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613402,7845,4.51s,380.98us,0.00ns,382.38us,4.46us,377.73us,527.35us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613402,165363,4.68s,17.88us,0.00ns,18.04us,903.00ns,17.09us,144.41us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613402,216993,4.62s,13.75us,0.00ns,13.80us,485.00ns,13.10us,130.87us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613402,217613,4.63s,13.73us,0.00ns,13.75us,383.00ns,13.62us,131.82us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,613402,69099,4.56s,43.20us,0.00ns,43.38us,1.15us,42.03us,164.64us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,613402,69562,4.57s,42.80us,0.00ns,43.09us,1.18us,41.46us,159.26us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613402,13844,4.51s,216.24us,0.00ns,216.68us,2.58us,212.67us,331.93us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613402,13676,4.51s,219.15us,1.00ns,219.33us,2.22us,214.82us,335.12us\nmemmem/subtitles/never/huge-ru-john-watson,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613402,171281,4.56s,17.44us,0.00ns,17.48us,546.00ns,17.00us,135.90us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,42,1000000,434.68ms,24.00ns,0.00ns,24.00ns,11.00ns,22.00ns,3.78us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,487.62ms,21.00ns,0.00ns,21.00ns,9.00ns,19.00ns,3.17us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,440.15ms,19.00ns,0.00ns,19.00ns,7.00ns,17.00ns,2.41us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,42,1000000,539.10ms,33.00ns,0.00ns,33.00ns,11.00ns,31.00ns,3.57us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,42,1000000,442.39ms,14.00ns,0.00ns,14.00ns,96.00ns,12.00ns,96.06us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,42,1000000,378.87ms,12.00ns,0.00ns,12.00ns,7.00ns,10.00ns,2.32us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,42,1000000,430.21ms,29.00ns,0.00ns,29.00ns,10.00ns,27.00ns,3.70us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,42,1000000,932.32ms,60.00ns,0.00ns,61.00ns,12.00ns,56.00ns,2.58us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,479.95ms,33.00ns,0.00ns,33.00ns,19.00ns,30.00ns,15.75us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,429.67ms,15.00ns,0.00ns,15.00ns,7.00ns,13.00ns,3.44us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,42,1000000,437.89ms,15.00ns,0.00ns,15.00ns,7.00ns,12.00ns,2.52us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,42,1000000,379.78ms,13.00ns,0.00ns,13.00ns,7.00ns,11.00ns,2.49us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,42,1000000,479.29ms,37.00ns,0.00ns,37.00ns,11.00ns,33.00ns,4.25us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,42,1000000,429.87ms,37.00ns,0.00ns,37.00ns,9.00ns,34.00ns,2.16us\nmemmem/subtitles/never/teeny-ru-john-watson,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,42,1000000,428.99ms,26.00ns,0.00ns,26.00ns,9.00ns,24.00ns,4.41us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613427,95183,4.56s,31.34us,0.00ns,31.48us,1.33us,29.25us,213.78us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613427,61187,4.57s,48.95us,0.00ns,49.00us,783.00ns,48.49us,188.10us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613427,61432,4.56s,48.68us,0.00ns,48.79us,784.00ns,48.51us,165.50us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613427,236210,4.62s,12.70us,0.00ns,12.67us,461.00ns,11.42us,132.47us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613427,250485,4.62s,11.96us,0.00ns,11.95us,490.00ns,11.35us,153.34us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613427,39298,4.56s,76.11us,0.00ns,76.30us,1.16us,75.10us,224.50us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613427,7882,4.56s,380.58us,0.00ns,380.60us,2.71us,377.72us,499.65us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,613427,12288,4.56s,242.29us,0.00ns,244.11us,6.15us,238.13us,364.77us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613427,158048,4.68s,18.86us,0.00ns,18.88us,694.00ns,18.04us,134.55us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613427,217761,4.62s,13.72us,0.00ns,13.74us,381.00ns,13.21us,129.20us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613427,217627,4.63s,13.72us,0.00ns,13.75us,514.00ns,13.17us,185.50us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,613427,217454,4.62s,13.74us,0.00ns,13.76us,383.00ns,13.57us,128.24us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,613427,215215,4.63s,13.89us,0.00ns,13.91us,387.00ns,13.68us,131.63us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613427,33932,4.51s,87.53us,0.00ns,88.38us,3.02us,84.25us,204.88us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613427,32973,4.56s,90.25us,0.00ns,90.95us,2.77us,87.07us,208.81us\nmemmem/subtitles/never/huge-zh-john-watson,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613427,142715,4.57s,20.95us,0.00ns,20.99us,511.00ns,20.25us,139.13us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,31,1000000,481.51ms,23.00ns,0.00ns,23.00ns,9.00ns,20.00ns,3.06us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,438.79ms,24.00ns,0.00ns,24.00ns,9.00ns,22.00ns,2.79us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,484.71ms,18.00ns,0.00ns,18.00ns,9.00ns,16.00ns,3.53us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,31,1000000,429.51ms,26.00ns,0.00ns,27.00ns,14.00ns,24.00ns,11.51us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,31,1000000,437.10ms,15.00ns,0.00ns,15.00ns,8.00ns,13.00ns,4.20us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,31,1000000,379.28ms,12.00ns,0.00ns,13.00ns,14.00ns,10.00ns,13.30us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,31,1000000,435.41ms,24.00ns,0.00ns,24.00ns,9.00ns,22.00ns,3.70us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,31,1000000,493.26ms,23.00ns,0.00ns,23.00ns,11.00ns,20.00ns,7.50us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,31,1000000,930.32ms,61.00ns,0.00ns,61.00ns,16.00ns,57.00ns,10.76us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,539.11ms,27.00ns,0.00ns,27.00ns,11.00ns,24.00ns,3.46us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,479.25ms,15.00ns,0.00ns,15.00ns,7.00ns,13.00ns,3.34us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,31,1000000,430.85ms,16.00ns,0.00ns,16.00ns,7.00ns,15.00ns,2.74us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,31,1000000,379.49ms,12.00ns,0.00ns,12.00ns,6.00ns,10.00ns,2.22us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,31,1000000,429.85ms,28.00ns,0.00ns,28.00ns,87.00ns,25.00ns,85.46us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,31,1000000,479.89ms,29.00ns,0.00ns,29.00ns,9.00ns,26.00ns,2.79us\nmemmem/subtitles/never/teeny-zh-john-watson,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,31,1000000,433.09ms,25.00ns,0.00ns,25.00ns,9.00ns,22.00ns,2.95us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,77810,4.56s,38.48us,0.00ns,38.52us,1.50us,34.48us,156.47us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,65425,4.57s,45.72us,0.00ns,45.82us,934.00ns,45.66us,214.40us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,65469,4.56s,45.71us,0.00ns,45.79us,1.02us,38.59us,200.74us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613345,225211,4.63s,13.73us,0.00ns,13.29us,1.15us,11.13us,128.27us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613345,228247,4.63s,13.54us,0.00ns,13.11us,869.00ns,11.10us,131.01us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613345,16644,4.56s,180.27us,1.00ns,180.21us,5.57us,165.59us,310.75us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613345,7889,4.51s,379.72us,0.00ns,380.26us,2.76us,377.64us,493.88us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,613345,12369,4.51s,242.05us,0.00ns,242.51us,1.83us,241.88us,355.77us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613345,168192,4.67s,17.43us,0.00ns,17.73us,711.00ns,17.31us,144.96us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,216827,4.62s,13.77us,0.00ns,13.81us,381.00ns,13.17us,127.87us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,217431,4.63s,13.74us,0.00ns,13.77us,376.00ns,13.62us,127.81us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,613345,215657,4.62s,13.87us,0.00ns,13.88us,458.00ns,13.42us,129.20us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,613345,185000,4.62s,16.15us,0.00ns,16.19us,561.00ns,15.72us,153.47us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613345,15482,4.56s,192.08us,2.00ns,193.75us,10.07us,175.62us,310.83us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613345,15661,4.51s,190.04us,0.00ns,191.54us,9.90us,172.00us,318.95us\nmemmem/subtitles/rare/huge-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613345,171862,4.57s,17.40us,0.00ns,17.42us,513.00ns,17.01us,133.27us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,58809,4.57s,50.73us,0.00ns,50.98us,1.28us,48.51us,164.78us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,65592,4.57s,45.63us,0.00ns,45.70us,817.00ns,38.29us,159.99us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,65553,4.57s,45.64us,0.00ns,45.73us,824.00ns,45.58us,161.00us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613345,189149,4.62s,15.94us,0.00ns,15.83us,548.00ns,12.76us,131.88us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613345,232532,4.63s,13.77us,0.00ns,12.87us,1.15us,11.20us,184.14us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613345,17690,4.51s,169.38us,1.00ns,169.56us,4.41us,157.29us,283.21us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613345,7902,4.51s,379.63us,1.00ns,379.66us,2.51us,378.13us,493.32us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,613345,12372,4.51s,242.05us,0.00ns,242.46us,1.69us,241.85us,357.88us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613345,167142,4.67s,17.51us,0.00ns,17.84us,594.00ns,17.42us,132.99us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,186885,4.63s,15.99us,0.00ns,16.02us,490.00ns,15.52us,131.51us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,215981,4.57s,13.94us,0.00ns,13.86us,501.00ns,13.35us,131.47us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,613345,215823,4.57s,13.88us,0.00ns,13.87us,463.00ns,13.26us,130.06us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,613345,219253,4.63s,13.56us,0.00ns,13.65us,536.00ns,13.12us,131.47us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613345,15192,4.56s,196.66us,2.00ns,197.45us,7.81us,177.77us,358.24us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613345,15058,4.56s,198.59us,1.00ns,199.20us,8.05us,180.40us,318.63us\nmemmem/subtitles/rare/huge-en-sherlock,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613345,176638,4.62s,16.91us,0.00ns,16.95us,456.00ns,15.45us,131.99us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,185840,4.56s,16.06us,0.00ns,16.11us,530.00ns,15.60us,130.81us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,57847,4.57s,51.85us,0.00ns,51.83us,842.00ns,50.98us,165.98us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,58624,4.57s,51.03us,0.00ns,51.14us,769.00ns,50.68us,168.30us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613345,231168,4.63s,12.00us,0.00ns,12.95us,1.45us,11.88us,130.43us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613345,209069,4.57s,14.29us,0.00ns,14.32us,682.00ns,12.48us,132.54us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613345,29929,4.51s,100.22us,0.00ns,100.21us,3.59us,86.67us,214.75us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613345,7883,4.51s,380.51us,0.00ns,380.58us,2.12us,377.67us,494.83us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613345,155108,4.68s,19.04us,0.00ns,19.24us,763.00ns,18.49us,138.96us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,169325,4.57s,17.87us,0.00ns,17.68us,574.00ns,16.73us,133.85us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,207012,4.62s,14.74us,0.00ns,14.46us,543.00ns,13.91us,130.13us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,613345,116015,4.57s,25.83us,0.00ns,25.82us,1.51us,14.76us,142.77us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,613345,127661,4.57s,25.41us,0.00ns,23.47us,4.20us,14.48us,141.90us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613345,27415,4.51s,108.16us,0.00ns,109.40us,6.50us,96.14us,211.60us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613345,25706,4.51s,114.86us,0.00ns,116.67us,11.00us,94.85us,238.88us\nmemmem/subtitles/rare/huge-en-medium-needle,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613345,202661,4.57s,14.75us,0.00ns,14.77us,499.00ns,14.13us,132.35us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,161138,4.57s,18.55us,0.00ns,18.59us,451.00ns,18.46us,131.90us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,62616,4.57s,47.78us,0.00ns,47.88us,845.00ns,47.02us,217.68us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,62552,4.57s,47.81us,0.00ns,47.93us,851.00ns,47.68us,162.44us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613345,184607,4.57s,16.13us,0.00ns,16.22us,596.00ns,15.54us,133.13us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613345,193711,4.57s,15.50us,0.00ns,15.46us,408.00ns,14.95us,130.26us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613345,65228,4.57s,45.67us,0.00ns,45.96us,1.11us,44.69us,180.78us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613345,7898,4.51s,379.61us,0.00ns,379.82us,2.24us,375.94us,495.07us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613345,110798,4.62s,27.57us,0.00ns,26.98us,1.79us,22.37us,142.14us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,218926,4.63s,13.73us,0.00ns,13.67us,405.00ns,13.24us,130.37us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,230132,4.62s,12.94us,0.00ns,13.01us,450.00ns,12.37us,128.77us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,613345,140961,4.57s,24.48us,0.00ns,21.25us,5.25us,13.93us,193.00us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,613345,133869,4.57s,25.24us,0.00ns,22.38us,5.06us,13.87us,140.49us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613345,52889,4.57s,56.71us,0.00ns,56.69us,1.85us,51.98us,172.23us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613345,53128,4.57s,56.27us,0.00ns,56.43us,2.25us,50.98us,177.59us\nmemmem/subtitles/rare/huge-en-long-needle,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613345,168263,4.57s,18.44us,0.00ns,17.80us,897.00ns,16.58us,133.47us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613345,101380,4.57s,29.50us,0.00ns,29.56us,558.00ns,29.45us,144.53us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613345,65778,4.57s,45.45us,0.00ns,45.57us,897.00ns,38.24us,160.21us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613345,65954,4.57s,45.37us,0.00ns,45.45us,918.00ns,38.24us,162.84us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613345,213921,4.63s,13.99us,0.00ns,13.99us,383.00ns,13.44us,130.38us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613345,237824,4.62s,12.57us,0.00ns,12.58us,489.00ns,11.85us,182.11us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613345,61517,4.57s,48.56us,0.00ns,48.73us,1.16us,46.67us,164.97us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613345,7904,4.51s,379.41us,1.00ns,379.54us,2.40us,377.57us,493.97us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613345,123077,4.62s,24.25us,0.00ns,24.27us,564.00ns,22.97us,139.93us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613345,139311,4.57s,21.15us,0.00ns,21.50us,800.00ns,20.95us,140.24us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613345,146223,4.57s,20.34us,0.00ns,20.48us,590.00ns,20.11us,137.11us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,613345,200346,4.57s,13.80us,0.00ns,14.94us,3.08us,13.06us,134.51us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,613345,202811,4.57s,13.71us,0.00ns,14.76us,3.13us,12.99us,130.17us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613345,56493,4.57s,52.87us,0.00ns,53.07us,1.16us,51.11us,170.30us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613345,57163,4.57s,52.25us,0.00ns,52.45us,1.42us,49.43us,172.35us\nmemmem/subtitles/rare/huge-en-huge-needle,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613345,189117,4.57s,15.69us,0.00ns,15.83us,518.00ns,15.13us,185.62us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,28,1000000,490.74ms,30.00ns,0.00ns,30.00ns,120.00ns,27.00ns,119.75us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,545.20ms,33.00ns,0.00ns,33.00ns,9.00ns,31.00ns,3.06us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,430.88ms,23.00ns,0.00ns,23.00ns,13.00ns,21.00ns,9.46us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,28,1000000,480.87ms,27.00ns,0.00ns,27.00ns,9.00ns,24.00ns,3.15us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,28,1000000,434.11ms,17.00ns,0.00ns,17.00ns,127.00ns,14.00ns,126.80us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,28,1000000,495.97ms,24.00ns,0.00ns,24.00ns,8.00ns,21.00ns,2.60us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,28,1000000,483.41ms,22.00ns,0.00ns,22.00ns,13.00ns,20.00ns,10.24us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,28,1000000,488.63ms,22.00ns,0.00ns,22.00ns,8.00ns,19.00ns,2.48us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,28,1000000,931.87ms,67.00ns,0.00ns,68.00ns,13.00ns,64.00ns,3.07us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,448.02ms,26.00ns,0.00ns,26.00ns,10.00ns,24.00ns,2.71us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,433.08ms,18.00ns,0.00ns,18.00ns,7.00ns,16.00ns,3.03us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,28,1000000,432.00ms,18.00ns,0.00ns,18.00ns,27.00ns,16.00ns,22.23us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,28,1000000,438.75ms,14.00ns,0.00ns,14.00ns,76.00ns,12.00ns,75.84us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,28,1000000,542.80ms,57.00ns,0.00ns,57.00ns,11.00ns,53.00ns,3.03us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,28,1000000,536.84ms,41.00ns,0.00ns,41.00ns,10.00ns,37.00ns,2.86us\nmemmem/subtitles/rare/teeny-en-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,28,1000000,436.65ms,28.00ns,0.00ns,28.00ns,10.00ns,25.00ns,2.88us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,28,1000000,488.64ms,32.00ns,0.00ns,32.00ns,15.00ns,30.00ns,11.57us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,28,1000000,491.89ms,33.00ns,0.00ns,33.00ns,17.00ns,31.00ns,14.78us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,28,1000000,432.78ms,23.00ns,0.00ns,23.00ns,19.00ns,21.00ns,13.03us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,28,1000000,433.47ms,25.00ns,0.00ns,25.00ns,9.00ns,22.00ns,3.69us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,28,1000000,432.71ms,20.00ns,0.00ns,20.00ns,9.00ns,17.00ns,3.19us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,28,1000000,435.98ms,17.00ns,0.00ns,17.00ns,14.00ns,14.00ns,11.60us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,28,1000000,491.98ms,20.00ns,0.00ns,20.00ns,18.00ns,18.00ns,15.98us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,28,1000000,431.32ms,21.00ns,0.00ns,22.00ns,9.00ns,19.00ns,2.94us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,28,1000000,0.99s,68.00ns,0.00ns,69.00ns,125.00ns,63.00ns,124.11us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,28,1000000,437.10ms,23.00ns,0.00ns,23.00ns,8.00ns,21.00ns,3.03us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,28,1000000,480.71ms,20.00ns,0.00ns,20.00ns,8.00ns,17.00ns,3.14us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,28,1000000,437.68ms,15.00ns,0.00ns,15.00ns,7.00ns,13.00ns,2.24us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,28,1000000,383.16ms,13.00ns,0.00ns,13.00ns,26.00ns,11.00ns,19.33us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,28,1000000,483.69ms,36.00ns,0.00ns,37.00ns,10.00ns,34.00ns,3.13us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,28,1000000,430.28ms,26.00ns,0.00ns,26.00ns,9.00ns,24.00ns,3.09us\nmemmem/subtitles/rare/teeny-en-sherlock,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,28,1000000,430.59ms,28.00ns,0.00ns,28.00ns,7.00ns,26.00ns,2.24us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613402,32852,4.51s,91.09us,0.00ns,91.28us,2.01us,87.71us,271.51us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613402,21904,4.51s,136.43us,0.00ns,136.94us,1.89us,133.39us,279.45us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613402,22026,4.51s,135.96us,0.00ns,136.17us,1.33us,134.64us,253.81us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613402,228271,4.62s,13.59us,0.00ns,13.11us,945.00ns,11.12us,131.61us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613402,229162,4.63s,13.44us,0.00ns,13.06us,851.00ns,11.10us,131.21us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613402,16249,4.51s,187.55us,0.00ns,184.60us,5.75us,175.60us,303.06us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613402,7889,4.51s,379.84us,0.00ns,380.29us,2.67us,377.70us,494.97us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613402,165039,4.67s,17.92us,0.00ns,18.07us,843.00ns,17.12us,142.24us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613402,216702,4.57s,13.75us,0.00ns,13.82us,480.00ns,13.64us,133.38us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613402,217586,4.63s,13.73us,0.00ns,13.76us,381.00ns,13.61us,131.26us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,613402,77256,4.57s,38.71us,0.00ns,38.80us,1.12us,36.19us,157.67us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,613402,77019,4.57s,39.43us,0.00ns,38.92us,1.90us,32.56us,155.97us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613402,15824,4.51s,191.07us,0.00ns,189.56us,4.08us,180.34us,308.00us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613402,15717,4.51s,190.04us,0.00ns,190.85us,4.23us,178.55us,312.08us\nmemmem/subtitles/rare/huge-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613402,162560,4.57s,17.62us,0.00ns,18.42us,1.46us,17.23us,189.21us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613402,19430,4.51s,153.80us,0.00ns,154.37us,2.24us,150.50us,272.71us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613402,22153,4.51s,135.20us,0.00ns,135.39us,1.27us,131.92us,250.42us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613402,22220,4.51s,134.80us,0.00ns,134.98us,1.44us,132.53us,248.52us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613402,248081,4.63s,12.14us,0.00ns,12.06us,564.00ns,11.14us,129.73us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613402,178752,4.57s,16.89us,0.00ns,16.75us,518.00ns,14.90us,137.58us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613402,10462,4.51s,286.48us,0.00ns,286.75us,2.07us,283.84us,401.56us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613402,7884,4.51s,380.48us,1.00ns,380.50us,2.72us,377.76us,496.69us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,613402,12370,4.51s,242.07us,0.00ns,242.50us,1.95us,241.88us,357.83us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613402,163874,4.68s,18.25us,0.00ns,18.20us,796.00ns,17.28us,187.19us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613402,182985,4.57s,16.33us,0.00ns,16.36us,415.00ns,16.16us,133.14us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613402,214523,4.57s,13.92us,0.00ns,13.95us,457.00ns,13.79us,130.61us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,613402,209170,4.57s,14.39us,0.00ns,14.31us,467.00ns,13.74us,129.60us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,613402,210260,4.57s,14.36us,0.00ns,14.24us,491.00ns,13.74us,130.22us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613402,10819,4.51s,277.14us,0.00ns,277.28us,2.98us,266.40us,393.78us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613402,10590,4.51s,282.16us,1.00ns,283.25us,3.52us,278.46us,402.26us\nmemmem/subtitles/rare/huge-ru-sherlock,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613402,169875,4.57s,17.56us,0.00ns,17.63us,548.00ns,17.23us,132.29us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,42,1000000,534.61ms,38.00ns,0.00ns,38.00ns,12.00ns,36.00ns,5.85us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,430.83ms,28.00ns,0.00ns,28.00ns,9.00ns,26.00ns,3.19us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,488.91ms,24.00ns,0.00ns,24.00ns,15.00ns,22.00ns,12.41us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,42,1000000,486.98ms,36.00ns,0.00ns,36.00ns,14.00ns,33.00ns,9.61us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,42,1000000,431.67ms,18.00ns,0.00ns,18.00ns,7.00ns,16.00ns,3.21us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,42,1000000,430.35ms,30.00ns,0.00ns,30.00ns,13.00ns,26.00ns,6.98us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,42,1000000,430.64ms,30.00ns,0.00ns,30.00ns,8.00ns,27.00ns,2.48us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,42,1000000,1.00s,65.00ns,0.00ns,66.00ns,17.00ns,61.00ns,11.31us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,484.92ms,47.00ns,0.00ns,44.00ns,13.00ns,32.00ns,3.63us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,435.70ms,19.00ns,0.00ns,19.00ns,8.00ns,17.00ns,2.96us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,42,1000000,437.29ms,19.00ns,0.00ns,19.00ns,9.00ns,17.00ns,4.11us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,42,1000000,480.44ms,18.00ns,0.00ns,18.00ns,87.00ns,16.00ns,82.05us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,42,1000000,580.53ms,79.00ns,0.00ns,80.00ns,16.00ns,73.00ns,9.02us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,42,1000000,480.64ms,56.00ns,0.00ns,57.00ns,12.00ns,52.00ns,3.84us\nmemmem/subtitles/rare/teeny-ru-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,42,1000000,497.97ms,31.00ns,0.00ns,31.00ns,22.00ns,28.00ns,18.73us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,42,1000000,545.72ms,39.00ns,0.00ns,39.00ns,20.00ns,36.00ns,17.49us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,42,1000000,491.41ms,35.00ns,0.00ns,35.00ns,12.00ns,33.00ns,6.34us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,42,1000000,435.98ms,24.00ns,0.00ns,24.00ns,7.00ns,22.00ns,2.16us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,42,1000000,491.78ms,30.00ns,0.00ns,31.00ns,9.00ns,28.00ns,2.95us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,42,1000000,435.53ms,22.00ns,0.00ns,22.00ns,8.00ns,20.00ns,2.86us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,42,1000000,491.95ms,19.00ns,0.00ns,19.00ns,7.00ns,16.00ns,4.26us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,42,1000000,493.65ms,26.00ns,0.00ns,26.00ns,24.00ns,24.00ns,18.99us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,42,1000000,430.68ms,27.00ns,0.00ns,27.00ns,11.00ns,24.00ns,4.22us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,42,1000000,0.98s,69.00ns,0.00ns,71.00ns,13.00ns,65.00ns,3.23us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,42,1000000,495.33ms,40.00ns,0.00ns,39.00ns,27.00ns,27.00ns,18.92us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,42,1000000,430.37ms,23.00ns,0.00ns,23.00ns,8.00ns,20.00ns,4.01us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,42,1000000,444.71ms,16.00ns,0.00ns,16.00ns,8.00ns,14.00ns,2.92us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,42,1000000,494.81ms,14.00ns,0.00ns,14.00ns,18.00ns,11.00ns,15.78us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,42,1000000,483.05ms,48.00ns,0.00ns,49.00ns,12.00ns,43.00ns,3.15us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,42,1000000,491.96ms,33.00ns,0.00ns,33.00ns,17.00ns,30.00ns,13.95us\nmemmem/subtitles/rare/teeny-ru-sherlock,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,42,1000000,529.93ms,46.00ns,0.00ns,46.00ns,16.00ns,42.00ns,10.65us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613427,137063,4.57s,21.76us,0.00ns,21.85us,0.96us,19.80us,136.20us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613427,52852,4.57s,56.47us,0.00ns,56.73us,1.08us,55.96us,187.36us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613427,52122,4.57s,57.70us,0.00ns,57.52us,1.00us,56.18us,171.84us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613427,223745,4.63s,14.32us,0.00ns,13.38us,1.13us,11.67us,128.11us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613427,240150,4.64s,11.70us,0.00ns,12.46us,1.22us,11.58us,129.00us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613427,31339,4.52s,95.16us,0.00ns,95.70us,1.89us,93.97us,236.07us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613427,7895,4.51s,379.73us,0.00ns,380.00us,2.67us,377.69us,493.14us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613427,157025,4.62s,19.19us,0.00ns,19.00us,810.00ns,18.01us,137.16us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613427,219651,4.62s,13.60us,0.00ns,13.63us,457.00ns,13.46us,131.43us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613427,213261,4.63s,14.19us,0.00ns,14.04us,471.00ns,13.43us,131.82us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,613427,119667,4.57s,25.79us,0.00ns,25.04us,2.78us,14.17us,140.01us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,613427,143983,4.57s,23.89us,0.00ns,20.80us,5.64us,14.12us,145.50us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613427,31209,4.51s,95.53us,0.00ns,96.10us,2.40us,92.28us,215.07us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613427,30120,4.51s,99.17us,0.00ns,99.57us,1.86us,96.16us,217.77us\nmemmem/subtitles/rare/huge-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613427,172237,4.57s,17.35us,0.00ns,17.39us,459.00ns,17.05us,134.87us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,613427,58518,4.57s,51.21us,0.00ns,51.23us,1.30us,48.74us,169.11us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,613427,51873,4.57s,58.12us,0.00ns,57.80us,1.16us,56.08us,175.79us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,613427,52352,4.57s,57.60us,0.00ns,57.27us,1.13us,56.20us,228.66us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,613427,233777,4.62s,12.18us,0.00ns,12.80us,1.05us,11.52us,137.79us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,613427,200308,4.57s,14.84us,0.00ns,14.95us,866.00ns,12.28us,138.33us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,613427,22686,4.51s,131.19us,0.00ns,132.21us,3.33us,127.82us,244.08us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,613427,7890,4.51s,379.90us,1.00ns,380.24us,2.58us,377.83us,495.59us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,613427,12369,4.51s,242.10us,0.00ns,242.52us,1.99us,241.92us,358.41us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,613427,157875,4.67s,18.90us,0.00ns,18.90us,909.00ns,17.71us,133.00us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,613427,218058,4.62s,13.91us,0.00ns,13.73us,469.00ns,13.29us,131.61us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,613427,217828,4.63s,13.57us,0.00ns,13.74us,518.00ns,13.38us,129.01us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,613427,214057,4.63s,13.85us,0.00ns,13.98us,523.00ns,13.54us,183.97us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,613427,183175,4.57s,16.27us,0.00ns,16.35us,499.00ns,15.78us,131.24us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,613427,20048,4.51s,148.16us,1.00ns,149.61us,4.55us,142.36us,264.02us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,613427,19275,4.51s,154.02us,0.00ns,155.62us,4.99us,136.54us,274.04us\nmemmem/subtitles/rare/huge-zh-sherlock,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,613427,155135,4.57s,20.53us,0.00ns,19.30us,1.75us,16.52us,132.48us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,31,1000000,496.18ms,31.00ns,0.00ns,31.00ns,19.00ns,29.00ns,13.45us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,430.76ms,26.00ns,0.00ns,26.00ns,9.00ns,24.00ns,2.66us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,480.80ms,23.00ns,0.00ns,23.00ns,14.00ns,21.00ns,10.77us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,31,1000000,430.72ms,29.00ns,0.00ns,30.00ns,10.00ns,27.00ns,2.61us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,31,1000000,430.27ms,25.00ns,0.00ns,25.00ns,9.00ns,23.00ns,3.26us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,31,1000000,432.81ms,24.00ns,0.00ns,24.00ns,8.00ns,21.00ns,2.63us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,31,1000000,432.11ms,23.00ns,0.00ns,23.00ns,25.00ns,21.00ns,18.97us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,31,1000000,0.99s,72.00ns,0.00ns,73.00ns,13.00ns,67.00ns,3.03us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,430.36ms,29.00ns,0.00ns,29.00ns,73.00ns,26.00ns,69.70us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,438.82ms,26.00ns,0.00ns,27.00ns,9.00ns,23.00ns,2.93us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,31,1000000,447.29ms,16.00ns,0.00ns,16.00ns,10.00ns,14.00ns,7.37us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,31,1000000,434.81ms,15.00ns,0.00ns,15.00ns,8.00ns,13.00ns,3.71us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,31,1000000,533.63ms,71.00ns,0.00ns,72.00ns,19.00ns,65.00ns,14.28us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,31,1000000,480.49ms,48.00ns,0.00ns,48.00ns,12.00ns,44.00ns,3.00us\nmemmem/subtitles/rare/teeny-zh-sherlock-holmes,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,31,1000000,494.57ms,32.00ns,0.00ns,32.00ns,13.00ns,29.00ns,9.10us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),libc/memmem/oneshot,unknown,,31,1000000,480.66ms,33.00ns,0.00ns,34.00ns,11.00ns,31.00ns,3.80us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/oneshot,0.5.3,,31,1000000,490.27ms,33.00ns,0.00ns,33.00ns,9.00ns,31.00ns,4.20us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/jetscii/memmem/prebuilt,0.5.3,,31,1000000,432.43ms,23.00ns,0.00ns,23.00ns,15.00ns,21.00ns,12.39us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/oneshot,2.7.6,,31,1000000,432.88ms,26.00ns,0.00ns,26.00ns,9.00ns,23.00ns,2.95us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/prebuilt,2.7.6,,31,1000000,480.28ms,24.00ns,0.00ns,24.00ns,7.00ns,21.00ns,2.58us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/twoway,2.7.6,,31,1000000,430.92ms,20.00ns,0.00ns,20.00ns,20.00ns,17.00ns,18.86us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/rabinkarp,2.7.6,,31,1000000,431.22ms,22.00ns,0.00ns,22.00ns,9.00ns,19.00ns,2.72us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/shiftor,2.7.6,,31,1000000,437.15ms,23.00ns,0.00ns,23.00ns,8.00ns,21.00ns,2.88us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchr/memmem/wasm32,2.7.6,,31,1000000,932.48ms,73.00ns,0.00ns,74.00ns,68.00ns,68.00ns,67.00us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/oneshot,2.5.0,,31,1000000,480.48ms,25.00ns,0.00ns,26.00ns,18.00ns,22.00ns,14.88us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/memchrold/memmem/prebuilt,2.5.0,,31,1000000,436.58ms,25.00ns,0.00ns,25.00ns,9.00ns,21.00ns,2.99us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/oneshot,0.4.3,,31,1000000,497.24ms,14.00ns,0.00ns,14.00ns,8.00ns,12.00ns,3.52us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/sliceslice/memmem/prebuilt,0.4.3,,31,1000000,433.84ms,12.00ns,0.00ns,13.00ns,6.00ns,11.00ns,2.35us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/oneshot,1.92.0-nightly 7c275d09e,,31,1000000,531.08ms,44.00ns,0.00ns,44.00ns,17.00ns,39.00ns,13.12us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),rust/std/memmem/prebuilt,1.92.0-nightly 7c275d09e,,31,1000000,493.60ms,31.00ns,0.00ns,31.00ns,10.00ns,28.00ns,2.96us\nmemmem/subtitles/rare/teeny-zh-sherlock,count,0.1.0 (rev 79305bcb5f),stringzilla/memmem/oneshot,4.0.14,,31,1000000,480.55ms,41.00ns,0.00ns,42.00ns,14.00ns,38.00ns,10.33us\n"
  },
  {
    "path": "benchmarks/regexes/sliceslice/README.md",
    "content": "These needles were taken from the `sliceslice` [project benchmarks][1].\n\nThese inputs drive two benchmarks, one on short haystacks and the other on long\nhaystacks. For the short haystack case, we actually search the needles themselves.\nThat is, for each needle we count the number of needles in which that needle is\ncontained.\n\nFor the long haystack case, we just take the haystacks used in the `sliceslice`\nbenchmarks.\n\n[1]: https://github.com/cloudflare/sliceslice-rs\n"
  },
  {
    "path": "benchmarks/regexes/sliceslice/words-by-length-desc.txt",
    "content": "manipulationinstructions\nmicrocommunications\nvariousconditions\nindistinguishable\nunpredictability\nmicrocontrollers\nuninterruptible\nunconditionally\ntroubleshooting\nsynchronization\nNonconventional\nmultiprogrammed\nMultiprocessing\nmultiprocessing\nmicroprocessors\ninterpretations\ninterchangeably\ncharacteristics\ntransformation\ntranscendental\nspecifications\nsimultaneously\nsimplification\nresponsibility\nrepresentation\nmultiprocessor\nmultiprecision\nMultiplication\nmultiplication\nMicroprocessor\nmicroprocessor\nMICROMAINFRAME\ninterprocessor\nInterpretation\ninterpretation\nInitialization\ninitialization\nImplementation\nimplementation\nIdentification\nidentification\ncorrespondence\nConsiderations\nconfigurations\nclassification\narithmetically\nanddoublewords\naddressability\nunpredictable\nuninitialized\nunderstanding\nUnconditional\nunconditional\ntheoretically\nStackAddrSize\nspecification\nsophisticated\nsignificantly\npredetermined\npossibilities\npersonalizing\nparticipating\nNONCONFORMING\nnonconforming\nmodifications\nMiscellaneous\ninternational\ninstructional\nindeterminate\ninappropriate\nillustrations\ndocumentation\nDistinguishes\ndistinguishes\ndistinguished\ndisplacements\ncorresponding\nconfiguration\nCOMPATIBILITY\nCompatibility\ncompatibility\nCompatability\ncircumstances\ncharacterized\nBitStringAddr\nautomatically\narchitectures\narchitectural\napproximately\nAcknowledging\nAccessibility\nAbbreviations\nabbreviations\nVirtualizing\nVerification\nunrecognized\nunprogrammed\nunprivileged\nunauthorized\ntranslations\nTransferring\ntransferring\ntheInterrupt\nsymbolically\nsufficiently\nsuccessfully\nsubstituting\nsubsequently\nsubscription\nspecifically\nSimultaneous\nsignificance\nSegmentation\nsegmentation\nsatisfaction\nrestrictions\nrespectively\nrequirements\nreproducible\nrepresenting\nrelationship\nrediscovered\nProgrammable\nperspectives\nperiodically\nOrganization\norganization\noptimization\nNevertheless\nMultitasking\nmultitasking\nmultiprogram\nmultiplicand\nMULTICHANNEL\nmostflexible\nmodification\nmisalignment\nManipulation\nmanipulation\nlegitimately\nIntroduction\nintroduction\nintrasegment\nIntervention\nintervention\nintersegment\ninterruption\ninterrupting\ninterrogated\nInterpreting\ninterpreting\nintermediate\ninterference\nIntelevision\ninsufficient\nINSTRUCTIONS\nInstructions\ninstructions\ninitializing\nindividually\nincrementing\nInconsistent\ninconsistent\nincompatible\ninaccessible\nimplications\nimplementing\nhypothetical\nfunctionally\nexpectations\nenvironments\nencountering\nDistribution\nDISPLACEMENT\nDisplacement\ndisplacement\ndestinations\ndescriptions\ndecrementing\ncounterparts\ncoprocessors\nCoprocessing\nconveniently\nContributory\ncontributory\nConsequently\nconcurrently\nconcatenates\nconcatenated\ncomputations\ncomplexities\ncomplemented\ncommunicates\ncommunicated\nCombinations\ncombinations\ncapabilities\ncalculations\ncacheability\nattributable\nasynchronous\nArchitecture\narchitecture\nAPPLICATIONS\nApplications\napplications\nalphabetical\naccomplished\naccompanying\nwritability\nvirtualized\nutilization\nunwittingly\nunspecified\nunsegmented\nunscrambled\nunprotected\ntransported\ntransparent\nTRANSLATION\nTranslation\ntranslation\ntranslating\nTransitions\ntransitions\ntransferred\nterminology\nTermination\ntermination\ntemporarily\nsynchronous\nSuperscript\nSubtraction\nsubtraction\nsubtracting\nspecialized\nSIGNIFICANT\nsignificant\nSelectively\nselectively\nRestriction\nrestriction\nRestricting\nrestricting\nrestartable\nresponsible\nrequirement\nrepresented\nrepetitions\nreimplement\nreferencing\nrecommended\nRecognition\nrecognition\nPROGRAMMING\nProgramming\nprogramming\nPROGRAMMERS\nProgrammers\nprogrammers\nprefetching\npredominant\npredictable\npossibility\npinpointing\nperspective\npermissible\nPerformance\nperformance\nparentheses\noverwritten\noverwriting\nOverlapping\noverlapping\nopportunity\noperational\nOperandSize\nOperandMode\noccurrences\nnumerically\nnonwritable\nnonmatching\nNonmaskable\nnonmaskable\nNonintegral\nnonetheless\nnecessarily\nMultiSERVER\nMULTIMODULE\nMegachassis\nmanipulates\nmanipulated\nmaintenance\nmaintaining\nlimitations\nInterrupted\ninterrupted\ninterrogate\ninterpreted\nInterposing\ninterfering\ninterfacing\nintercepted\nintelligent\nINSTRUCTION\nInstruction\ninstruction\ninitializes\ninitialized\nInformation\ninformation\nindivisible\nindividuals\nindirection\nindependent\nincremented\nincorrectly\nimplemented\nImmediately\nimmediately\nillustrates\nillustrated\nIdentifying\nidentifying\nidentifiers\nidentically\nhighlighted\nHexadecimal\nhexadecimal\ngraphically\nGRANULARITY\nGranularity\ngranularity\ngenerations\nGeneralized\nFurthermore\nFundamental\nfundamental\nflexibility\nfacilitated\nextensively\nexpressions\nexplanatory\nExplanation\nexplanation\nexclusively\nexceptional\nestablished\nenvironment\nengineering\nencountered\neliminating\nefficiently\neffectively\ndynamically\nDoublewords\ndoublewords\ndistinguish\ndistinction\ndispatching\nDIRECTORIES\ndirectories\ndimensional\ndifferently\nDifferences\ndifferences\ndevelopment\ndetermining\nDESTINATION\nDestination\ndestination\nDESCRIPTORS\nDescriptors\ndescriptors\ndescriptive\nDescription\ndescription\ndenominator\ndemonstrate\nDefinitions\ndecremented\ndeallocated\ncustomizing\ncustomarily\ncorresponds\nCORPORATION\nCorporation\nCOPROCESSOR\nCoprocessor\ncoprocessor\nCoprecessor\ncoordinates\ncoordinated\ncooperation\nConventions\nconventions\nconvenience\nControlling\ncontrolling\ncontrollers\nconstructed\nconsidering\nconsecutive\nconjunction\nconformance\nConditional\nconditional\nComputation\ncomputation\ncomplements\ncomparisons\ncombination\nCheckString\nCalculation\ncalculation\nBreakpoints\nbreakpoints\nAssumptions\nassumptions\nassociative\nAssignments\nassignments\narrangement\narbitrarily\nApproximate\nappropriate\nApplication\napplication\nalgorithmic\nAddressSize\naddresssize\nAddressable\naddressable\nAcknowledge\nacknowledge\naccumulator\naccordingly\naccompanied\naccommodate\nabstraction\nZeroExtend\nWraparound\nwraparound\nWashington\nviolations\nvariations\nValidation\nvalidation\nunmodified\nunderlined\nunassigned\nunaffected\ntruncation\ntranslated\nTRANSITION\nTransition\ntransforms\ntrademarks\nthroughput\nthroughout\nthereafter\nthemselves\nterminates\nterminated\nTempEFlags\nSynonymous\nsurrounded\nSupportNET\nSUPERVISOR\nSupervisor\nsupervisor\nsummarizes\nsummarized\nsufficient\nsuccessful\nsucceeding\nsubtracted\nsubsequent\nsubscripts\nSubroutine\nsubroutine\nstructures\nStructured\nstructured\nstrategies\nstatically\nstatements\nSpecifying\nspecifying\nspecifiers\nsimulating\nsimplifies\nsimplified\nsimplicity\nSignExtend\nSequential\nsequential\nSeparately\nseparately\nsemaphores\nScrutinize\nschedulers\nRipplemode\nRestricted\nrestricted\nrestarting\nresponding\nrespective\nrepresents\nreposition\nrepetition\nrepeatedly\nRelocation\nrelocation\nrelational\nregistered\nREGARDLESS\nregardless\nReflecting\nReferences\nreferences\nreferenced\nreexecuted\nreentrable\nrecovering\nrecognizes\nrecognized\nquantities\nPROTECTION\nProtection\nprotection\nproperties\nPROGRAMMER\nProgrammer\nprogrammer\nProgrammed\nprogrammed\nproduction\nprocessors\nprocessing\nProcedures\nprocedures\nprivileges\nPrivileged\nprivileged\npriorities\nprimitives\npreviously\npreventing\npresumably\npreserving\nprefetched\npredefined\npreceeding\npermitting\nPERMISSION\nPermission\npermission\nperipheral\nperforming\nparticular\nParameters\nparameters\nparagraphs\noverwrites\noverriding\noverridden\noverlapped\noriginates\noriginated\noriginally\nOrdinarily\nordinarily\noptionally\noptimizing\nOperations\noperations\noccurrence\nobjectives\nNotational\nnotational\nmultiplies\nmultiplier\nmultiplied\nmonitoring\nmisaligned\nMechanisms\nmechanisms\nmanipulate\nManagement\nmanagement\nmaintained\nLiterature\nliterature\nlimitation\niterations\nInvalidate\nIntroduces\nintroduces\nintroduced\nintrastack\nintralevel\nInterrupts\ninterrupts\ninterprets\ninternally\nInterlevel\ninterlevel\nInterievel\ninterfaces\ninteligent\nIntegrated\ninnovation\ninitialize\ninherently\ninfluences\ninevitable\nindividual\nIndirectly\nindirectly\nindication\nindicating\nincrements\nImproperly\nimproperly\nimplicitly\nImplements\nimplements\nillustrate\nIdentifies\nidentifies\nIdentifier\nidentifier\nidentified\nhighlights\nguidelines\nguarantees\nguaranteed\ngeneration\ngenerating\nfragmented\nfacilities\nextraction\nexternally\nEXTENSIONS\nExtensions\nextensions\nexpression\nexplicitly\nexplaining\nexpandable\nEXECUTABLE\nexecutable\nExceptions\nexceptions\nevaluation\nevaluating\nespecially\nequivalent\nencounters\neliminates\neliminated\nefficiency\nDOUBLEWORD\nDoubleword\ndoubleword\ndisturbing\ndisruptive\ndisplaying\ndispatched\nDiscussion\ndiscussion\ndiscretion\ndiscovered\ndiscarding\ndifference\ndictionary\ndiagnosing\ndeveloping\ndetermines\ndetermined\ndesignated\nDESCRIPTOR\nDescriptor\ndescriptor\ndescribing\nDEPENDENCE\nDefinition\ndefinition\ndecrements\ncorrespond\nCopenhagen\ncoordinate\nconverting\nConversion\nconversion\nconvention\nconvenient\nController\ncontroller\ncontrolled\ncontiguous\ncontaining\nConsulting\nconsulting\nconstraint\nconsisting\nconsistent\nconsidered\nconnection\nCONFORMING\nConforming\nconforming\nconfidence\nConditions\nconditions\nconcerning\ncomponents\ncompletion\ncompletely\nComplement\ncomplement\ncompatible\nComparison\ncomparison\ncommitment\ncollection\nclassifies\nclassified\ncharacters\ncausingthe\ncategories\ncapability\ncalculates\ncalculated\nBREAKPOINT\nBreakpoint\nbreakpoint\nBreakpeint\nBranchCond\nBoundaries\nboundaries\nAttributes\nattributes\nattempting\nassociates\nassociated\nassistance\nassignment\nArithmetic\narithmetic\napproaches\nAppendices\nappendices\nanticipate\nalteration\nalphabetic\nallocation\nallocating\nalgorithms\nadvantages\nAdjustment\nadjustment\nAddressing\naddressing\nAdditional\nadditional\nactivities\nactivation\naccomplish\naccidental\naccessible\nacceptance\nacceptable\nworldwide\nworkshops\nworidwide\nviolation\nViolating\nverifying\nVectoring\nvariables\nvalidates\nuppermost\nuppercase\nuntrusted\nUNDEFINED\nUndefined\nundefined\nUnchanged\nunchanged\nunaltered\nunaligned\nTypically\ntypically\ntruncates\ntruncated\ntriggered\nTranslate\ntranslate\nTransfers\ntransfers\ntrademark\nthrowaway\nthousands\nTherefore\ntherefore\ntherating\nterminate\nterabytes\ntemporary\ntechnique\nTechnical\ntechnical\ntailoring\nSwitching\nswitching\nsuspended\nsupported\nsupplying\nsummarize\nSugarCube\nsubtracts\nsubsystem\nsubstring\nsubspaces\nSubscript\nsubscript\nSTRUCTURE\nStructure\nstructure\nStockholm\nstatement\nSpecifies\nspecifies\nspecifier\nSPECIFIED\nspecified\nSometimes\nsometimes\nsolutions\nsituation\nsimulated\nSimilarly\nsimilarly\nsignalled\nshortened\nservicing\nsequences\nseparated\nSensitive\nsensitive\nsemaphore\nSemantics\nsemantics\nSelectors\nselectors\nselective\nSelection\nselection\nselecting\nSegmented\nsegmented\nscheduler\nscheduled\nsatisfies\nsatisfied\nRotterdam\nrightmost\nReturning\nreturning\nresulting\nRestoring\nrestoring\nrestarted\nresponses\nresources\nResetting\nreserving\nresembles\nrequiring\nREQUESTOR\nRequestor\nrequestor\nRequested\nrequested\nrepresent\nreporting\nreplacing\nREMAINING\nremaining\nRemainder\nremainder\nRelOffset\nrelocated\nreloading\nrelinking\nrelevance\nregularly\nREGISTERS\nRegisters\nregisters\nreflected\nReferring\nreferring\nREFERENCE\nReference\nreference\nreentrant\nreentered\nRedundant\nredundant\nredefines\nrecording\nrecognize\nrebinding\nrearrange\nreachable\nquotients\npurchases\nproviding\nPROTECTED\nProtected\nprotected\nProoedure\nproducing\nProcessor\nprocessor\nprocessed\nPROCEDURE\nProcedure\nprocedure\nPRIVILEGE\nPrivilege\nprivilege\nprincipal\nprimitive\nprimarily\nprevented\nPRESERVES\npreserves\npreserved\npreferred\nPrecision\nprecision\npreceeded\npreceding\npotential\nPOSITIONS\npositions\npermitted\nPerformed\nperformed\nperfectly\nPartially\npartially\nParameter\nparameter\noverwrite\noverviews\nOverrides\noverrides\nOtherwise\notherwise\norganized\noptimized\noperators\nOperation\noperation\nOperating\noperating\nofferings\noccasions\nnumerical\nnumerator\nnotations\nnecessary\nmultiples\nmonitored\nModifying\nmodifying\nmnemonics\nmentioned\nmegabytes\nMechanism\nmechanism\nMaskShift\nmaintains\nMAGNITUDE\nmagnitude\nMachanism\nlowercase\nLookaside\nlookaside\nlogically\nLOCATIONS\nLocations\nlocations\nlibraries\nLanguages\nlanguages\nknowledge\nKilobytes\nkilobytes\njustified\niteration\nisolation\ninvolving\nINVISIBLE\ninvisible\nintertask\nINTERRUPT\nInterrupt\ninterrupt\ninterpret\ninterfere\nInterface\ninterface\nintercept\nIntellink\nIntegrity\nintegrity\ninstances\ninspected\ninsertion\ninserting\ninitiates\ninitially\ninhibited\ninfluence\nINDICATOR\nIndicator\nindicator\nINDICATES\nindicates\nindicated\nIncrement\nincrement\nincreased\nInclusive\ninclusive\nINCLUDING\nincluding\nimportant\nImplement\nimplement\nIMMEDIATE\nImmediate\nimmediate\nidentical\nguranteed\nguarantee\ngroupings\nGIGABYTES\ngigabytes\ngenerates\nGenerated\ngenerated\ngenerally\nFunctions\nfunctions\nfrequency\nFrancisco\nfragments\nFormation\nformation\nFollowing\nfollowing\nFFFFFFFFH\nextremely\nextracted\nextensive\nEXTENSION\nExtension\nextension\nextending\nexpressly\nexpressed\nexplained\nexpedient\nExpansion\nexpansion\nexistence\nexhausted\nexeptions\nExecution\nexecution\nExecuting\nexecuting\nExclusive\nexclusive\nexcluding\nexchanges\nexchanged\nexcessive\nEXCEPTION\nException\nexception\nExceeding\nexamining\nevaluates\nevaluated\nessential\nEngineers\nengineers\nencompass\nencodings\nEmulation\nemulation\nEmulating\neliminate\nefficient\nEFFECTIVE\nEffective\neffective\nduplicate\nDivisions\ndivisions\ndivisible\nDiscusses\ndiscusses\ndiscussed\nDiscarded\ndiscarded\nDisabling\ndisabling\nDIRECTORY\nDirectory\ndirectory\nDIRECTION\nDirection\ndirection\ndimension\ndifficult\ndiffering\nDifferent\ndifferent\ndiagnosis\nDetermine\ndetermine\nDetection\ndesirable\nDesigners\ndesigners\ndesignate\ndescribes\ndescribed\nDepending\ndepending\ndependent\ndedicated\nDecrement\ndecrement\nDebugging\ndebugging\nDebuggers\ndebuggers\ncustomers\ncurrently\ncorrupted\ncorrectly\ncooperate\nconverted\nContracts\ncontracts\ncontinues\ncontinued\ncontained\nconstruct\nconstrain\nconstants\nConsiders\nconfusion\nCondition\ncondition\nconcerned\nComponent\ncomponent\ncompletes\ncompleted\ncompilers\ncomparing\ncompactly\nCOMMputer\ncommitted\nCombining\ncombining\ncircuitry\nCharacter\ncharacter\nCertified\ncalculate\nbroadcast\nbranching\nbootstrap\nBITOFFSET\nBitOffset\nBeginning\nbeginning\navoidable\nAVAILABLE\nAvailable\navailable\nAUXILIARY\nauxiliary\nAutomatic\nautomatic\nAttribute\nattribute\nattention\nattempted\nassigning\nassertion\nassembler\nassembled\narranging\narguments\narbitrary\nampersand\nalternate\nallowable\nAllocates\nallocates\nallocated\nalignment\nalgorithm\naffecting\nadvantage\naddresses\naddressed\nadditions\nactivates\naccording\nAccessing\naccessing\nabilities\nabandoned\nWRITABLE\nWritable\nwritable\nwrapping\nworkshop\nwhenever\nwhatever\nweakened\nwarranty\nviolates\nviolated\nversions\nverifies\nverified\nvectored\nvariants\nVariable\nvariable\nValidity\nvalidity\nvalidate\nuuuuuuuu\nuuuuuuuT\nutilized\nUpdating\nupdating\nunwanted\nUnsigned\nunsigned\nUnpacked\nunpacked\nunmasked\nunlikely\nuniquely\nTruncate\ntruncate\ntriggers\ntrapping\nTransfer\ntransfer\nTraining\ntraining\ntogether\nterabyte\ntemplate\nsynonyms\nsymbolic\nSwitches\nswitches\nSwitched\nswitched\nsuspends\nsupports\nsupplies\nsupplier\nsupplied\nsubunits\nSubtract\nsubtract\nSUBTOTAL\nstrictly\nstrategy\nSTEPPING\nstepping\nstarting\nStandard\nstandard\nStackTop\nsqueezed\nspurious\nspooling\nspecific\nSpanning\nSortware\nsomewhat\nsolution\nSOFTWARE\nSoftware\nsoftware\nSMALLEST\nsmallest\nSimulate\nsimulate\nsimplify\nshutdown\nshifting\nShiftAmt\nsettings\nSERVICES\nServices\nservices\nserviced\nserially\nsequence\nSeparate\nseparate\nSELECTOR\nSelector\nselector\nSELECTED\nSelected\nselected\nSEGMENTS\nSegments\nsegments\nsections\nSeamless\nSciences\nscanning\nroutines\nrounding\nrotation\nRightSRC\nrevision\nreverses\nreturned\nretrying\nresuming\nrestores\nrestored\nresponse\nresponds\nrespects\nresource\nresident\nRESERVED\nReserved\nreserved\nrequires\nrequired\nrequests\nreported\nreplaces\nreplaced\nRepeated\nrepeated\nreloaded\nreliable\nrelevant\nreleases\nreleased\nrelative\nrelation\nREGISTER\nRegister\nregister\nreferred\nreenters\nreducing\nredirect\nRECIEVES\nrecently\nRECEIVES\nreceives\nreceived\nREADABLE\nreadable\nQuotient\nquotient\nquestion\nquantity\nQuadword\npurposes\nprovides\nprovided\nprotocol\nproperty\nproperly\nPromware\nPROGRAMS\nPrograms\nprograms\nProducts\nproducts\nproduces\nproduced\nproceeds\nproblems\nprobably\nPriority\npriority\nPREVIOUS\nprevious\nPrevents\nprevents\npreserve\nPresents\npresents\nPRESENCE\npresence\nprepares\nPrefixes\nprefixes\nprefetch\npreceded\npractice\npossibly\npossible\nPOSITIVE\npositive\nPOSITION\nposition\nportions\npolicies\npointing\nPOINTERS\nPointers\npointers\nPipeline\nPHYSICAL\nPhysical\nphysical\npertains\nperforms\nperformI\nparceled\nparallel\nOverview\noverview\nOVERRIDE\noverride\noverhead\nOVERFLOW\nOverflow\noverflow\novercome\noutgoing\noriginal\noriented\nordinary\nordering\noptional\nopposite\noperates\noperated\nOPERANDS\nOperands\noperands\nomitting\noccurred\noccupies\nobtained\nobserved\nnumerics\nnumbered\nnotation\nNormally\nnormally\nNoAdjust\nNEGATIVE\nnegative\nNegation\nnBitMask\nMultiply\nmultiply\nmultiple\nMULTIBUS\nmultibit\nMovement\nmovement\nmodifies\nmodifier\nmodified\nMnemonic\nmnemonic\nmegabyte\nmaterial\nMatching\nmatching\nMaskable\nmaskable\nmappings\nmaintain\nMagazine\nmachines\nLOOPcond\nlocators\nLocation\nlocation\nlocating\nloadings\nliterals\nLinkages\nlinkages\nlimiting\nLikewise\nLanguage\nlanguage\nlabelled\nkeywords\niterated\nisolated\ninvolves\ninvolved\ninvoking\nINTERNAL\ninternal\ninterest\nintended\nIntellec\nintelBOS\nintegral\nIntegers\nintegers\ninserted\ninitally\ninhibits\ninfinity\ninfinite\nIndirect\nindirect\nindicate\nINDEXING\nIndexing\nindexing\nincrease\nIncoming\nincoming\nincludes\nincluded\nInactive\ninactive\nimproper\nimplying\nImplicit\nimplicit\nidentity\nidentify\nhundreds\nHardware\nhardware\nHandling\nhandling\nhandlers\nGREATEST\ngreatest\ngraphics\ngranular\nGigabyte\ngigabyte\ngigabits\nGenerate\ngenerate\nFunction\nfunction\nformerly\nfollowed\nfloating\nflexible\nfetching\nFeatures\nfeatures\nfeasible\nFaulting\nfaulting\nFASTPATH\nFARLABEL\nfamilies\nextremes\nExternal\nexternal\nExtended\nextended\nexported\nExplicit\nexplicit\nExplains\nexplains\nexpected\nexpanded\nExisting\nexisting\nExecutes\nexecutes\nexecuted\nExchange\nexchange\nExceeded\nExamples\nexamples\nexamines\nexamined\nentitled\nentirely\nEntering\nentering\nensuring\nenhanced\nenforces\nenforced\nencoding\nenclosed\nEnabling\nenabling\nemulated\nemployed\nembedded\nelements\nduration\ndownward\ndocument\nDivision\ndivision\ndividing\nDividend\ndividend\ndistinct\ndispatch\ndisables\nDISABLED\ndisabled\ndirectly\ndiagnose\nDetected\ndetected\ndetailed\ndestined\nDestAddr\ndesigned\ndescribe\ndelaying\ndeferred\ndefeated\ndefaults\ndecoding\ndeclared\ndebugger\nCustomer\ncustomer\ncrossing\ncritical\ncriteria\nCreation\ncreating\nCovering\ncovering\nCountReg\ncorrects\nconverts\ncontrols\ncontrary\ncontinue\nContents\ncontents\nCONTAINS\nContains\ncontains\nconsults\nconstant\nconsists\nconsider\nconforms\nconfined\nconcepts\ncomputes\ncomputed\nCompound\ncomposed\nComplete\ncomplete\ncompiler\ncompiled\ncompares\ncompared\ncommonly\nCOMMENTS\nComments\ncommands\ncombines\nCombined\ncombined\nClearing\nclearing\nChoosing\nchoosing\nChecking\nchecking\nChapters\nchapters\nChanging\nchanging\nchaining\ncautious\ncategory\nbypasses\nbuilders\nbranches\nBrackets\nbrackets\nboundary\nborrowed\nbenefits\nbackward\nbacklink\navoiding\nattempts\nattached\nassuming\nassigned\nasserted\nAssembly\nassembly\nargument\napproach\napplying\nAppendix\napparent\nanywhere\nAlthough\naltering\nAllowing\nallowing\nallocate\naligning\nafforded\nAffected\naffected\nadvances\nadvanced\nadresses\nadjusted\nadjacent\nadequate\naddresss\nAddition\naddition\nactually\nactivity\nachieved\naccesses\nACCESSED\nAccessed\naccessed\naccepted\nabsolute\nwritten\nWriting\nwriting\nWorking\nWordCnt\nWITHOUT\nWithout\nwithout\nWhether\nwhether\nwhereas\nwaiting\nVLSiCEL\nVISIBLE\nvisible\nVIRTUAL\nVirtual\nvirtual\nviolate\nversion\nvectors\nvarious\nvariety\nvariant\nVACATED\nutilize\nusually\nupwards\nupdates\nupdated\nunpacks\nuniform\nunequal\ntypical\nTrusted\ntrusted\ntrigger\ntreated\ntrapped\ntowards\nToronto\ntopmost\ntightly\nThrough\nthrough\nthereby\nTesting\ntesting\ntempted\nTempESP\nSYSTEMS\nSystems\nsystems\nSYNONYM\nsynonym\nsymbols\nsuspend\nSurveys\nsuppose\nSupport\nsupport\nSummary\nsummary\nsubsets\nsubject\nSubcode\nStrings\nstrings\nstoring\nSTORAGE\nstorage\nstopped\nstepped\nstarted\nspecify\nSPECIAL\nSpecial\nspecial\nspanned\nsources\nSmaller\nsmaller\nsixteen\nsimpler\nsimilar\nsignals\nshowing\nSHIFTED\nshifted\nSharing\nsharing\nSeveral\nseveral\nSetting\nsetting\nSETcond\nService\nservice\nsending\nSelects\nselects\nSEGMENT\nSegment\nsegment\nSEGMEMT\nsection\nScripts\nscripts\nscratch\nScrAddr\nscanned\nscaling\nsatisfy\nrunning\nrunaway\nroutine\nrounded\nRotates\nrotates\nrotated\nROMcode\nReverse\nreverse\nReveals\nReturns\nreturns\nretries\nretains\nresumes\nresumed\nresults\nrestore\nrestart\nrespond\nresides\nReserve\nreserve\nrequire\nrequest\nreports\nreplace\nremoves\nremoved\nremains\nrelease\nrelates\nRelated\nrelated\nregular\nreflect\nreentry\nreenter\nreduces\nrecover\nrecords\nreceive\nreceipt\nreasons\nreality\nReading\nreading\nreaches\nrapidly\nranging\nquickly\nqueuing\nputting\npushing\nPurpose\npurpose\nprovide\nprotect\nPROGRAM\nProgram\nprogram\nproduct\nproduce\nprocess\nproceed\nproblem\nprimary\nprevent\nprevail\nPRESENT\nPresent\npresent\nPrepare\nprepare\nprecise\npossess\nportion\nPorting\nporting\nPopping\npopping\nPOINTER\nPointer\npointer\npointed\nplanted\nplacing\npicture\nPermits\npermits\nPerform\nperform\npending\npenalty\nPATTERN\npattern\npartial\npackage\nOverrun\noverrun\noverlap\noutside\nORDINAL\nOrdinal\nordinal\noptions\noptimum\nOPERATE\noperate\nOperant\nOPERAND\nOperand\noperand\nOpenNET\nOpcodes\nopcodes\nOffsets\noffsets\noffices\noffered\nobvious\nobtains\nobserve\nobjects\nNumeric\nnumeric\nNumbers\nnumbers\nnothing\nnonzero\nnonbusy\nnibbles\nnetwork\nnesting\nNeither\nneither\nneeding\nnearest\nnatural\nMONITOR\nmonitor\nModules\nmodules\nmistake\nminimum\nMethods\nmethods\nmention\nmembers\nMeaning\nmeaning\nmaximum\nmatches\nmasters\nmasking\nmarking\nMapping\nmapping\nmanages\nManager\nmanaged\nMachine\nmachine\nloosely\nlooping\nLookups\nlookups\nLOGICAL\nLogical\nlogical\nLocking\nlocking\nlocates\nlocated\nLOADREG\nLoading\nloading\nloaders\nlisting\nLinking\nlinking\nlinkers\nlinkage\nlimited\nLibrary\nLEXICAL\nlexical\nletters\nLeftSRC\nLeaving\nleaving\nleading\nlargest\nlargely\nlabeled\njustify\nisolate\ninvolve\ninvokes\ninvoked\ninverts\nInvalid\ninvalid\nINTEGER\nInteger\ninteger\nInstead\ninstead\ninstant\nINITIAL\nInitial\ninitial\ninhibit\nIndirct\nindices\nIndexes\nindexes\nindexed\ninclude\nInboard\nimposes\nimposed\nimplies\nImplied\nimplied\nillegal\nignores\nignored\nIDTbase\nHOWEVER\nHowever\nhowever\nHolding\nHIGHEST\nhighest\nhandles\nhandler\nhandled\ngrouped\nGreater\ngreater\ngoverns\nGENERAL\nGeneral\ngeneral\nGDTbase\nFurther\nfurther\nfulfill\nfreedom\nForward\nforward\nformula\nforming\nFormats\nformats\nforever\nforcing\nfollows\nflushes\nflushed\nFigures\nFFFFFFF\nfetches\nfetched\nfeature\nFailure\nfailure\nfailing\nfactory\nfactors\nExtract\nextract\nextends\nexplain\nExpands\nexiting\nexisted\nExecute\nexecute\nexceeds\nExample\nexample\nExamine\nexamine\nexactly\nequates\nequally\nENTRIES\nEntries\nentries\nentered\nensures\nenhance\nengaged\nenforce\nencodes\nencoded\nenables\nENABLED\nenabled\nemulate\nemploys\nelement\neffects\nearlier\nDYNAMIC\ndynamic\ndrivers\nDivisor\ndivisor\ndivides\ndivided\nDISPLAY\ndisplay\ndiscuss\ndiscard\nDisable\ndisable\ndiffers\nDIAGRAM\ndevices\ndetects\nDetails\ndetails\nDestReg\ndesired\ndesigns\nderives\ndepends\ndenotes\ndenoted\ndeleted\ndelayed\nDefines\ndefines\ndefined\nDEFAULT\nDefault\ndefault\ndecodes\ndecoded\nDECIMAL\nDecimal\ndecimal\ndealing\nCURRENT\nCurrent\ncurrent\ncrucial\ncrosses\ncreates\ncreated\ncovered\ncoupled\nCOUNTER\nCounter\ncorrupt\ncorrect\ncopying\nConvert\nconvert\nCONTROL\nControl\ncontrol\ncontext\ncontent\ncontain\nContact\ncontact\nconsume\nconsult\nconsist\nconcept\ncompute\nCompare\ncompare\ncompact\ncommand\ncombine\ncolumns\ncluster\nclosely\nClearly\nCleared\ncleared\nClasses\nclasses\nclarity\ncircled\nchooses\nchoices\nChicago\nchecked\nChapter\nchapter\nchanges\nCHANGED\nchanged\nCertain\ncertain\ncentral\nCenters\nceiling\ncaution\ncausing\ncatches\ncatalog\ncarried\ncareful\ncapable\ncalling\nBuilder\nbuilder\nBuffers\nbriefly\nbreadth\nBoolean\nBltLoop\nBITBASE\nBitBase\nbinders\nBetween\nbetween\nBesides\nBenelux\nbenefit\nbehaves\nbecomes\nBecause\nbecause\navoided\nAttempt\nattempt\nassured\nassumes\nAssumed\nassumed\nassigns\nasserts\naspects\narrives\napplies\nApplied\napplied\nappends\nappears\nAnother\nanother\nanomaly\naltered\nalready\nallowed\nAligned\naligned\naliases\nAgainst\nagainst\naffects\nadjusts\nADDRESS\nAddress\naddress\nAddrees\nactions\naccount\nabsence\nability\nWrites\nwrites\nWriter\nwithin\nwholly\nviewed\nversed\nVerify\nverify\nVector\nvector\nvaries\nVALUES\nValues\nvalues\nUseful\nuseful\nusages\nusable\nupward\nUpdate\nupdate\nUNUSED\nunused\nUnlike\nunlike\nunless\nUNIQUE\nunique\nturned\ntrying\ntreats\ntoward\ntopics\ntiming\nThough\nthough\nthings\ntheory\nthebit\nTested\ntested\nTempSS\nTARGET\ntarget\nTaking\ntaking\nTABLES\nTables\ntables\nSYSTEM\nSystem\nsystem\nsyntax\nsymbol\nSWITCH\nSwitch\nswitch\nsupply\nsuffix\nSubset\nsubset\nstyles\nSTRING\nString\nstring\nstream\nSTORES\nstores\nstored\nSTATUS\nStatus\nstatus\nstatic\nstates\nStarts\nstarts\nStacks\nstacks\nSpaces\nspaces\nSOURCE\nSource\nsource\nsolved\nsolely\nslight\nSingle\nsingle\nsimply\nSimple\nsimple\nSigned\nsigned\nSignal\nsignal\nshould\nSHIFTS\nshifts\nSHARED\nshared\nsevere\nSETNLE\nSETNGE\nSETNBE\nSETNAE\nserves\nseries\nselect\nseldom\nSegReg\nSECOND\nSecond\nsecond\nsearch\nscript\nScaled\nscaled\nscalar\nSaving\nsaving\nsafely\nRotate\nrotate\nROMmed\nrobust\nRights\nrights\nreview\nreveal\nRETURN\nReturn\nreturn\nretain\nRESUME\nResume\nresume\nResult\nresult\nreside\nresets\nreport\nRepeat\nrepeat\nrepair\nremove\nremain\nreload\nrelink\nrelate\nregion\nregard\nrefers\nreduce\nrecord\nrecent\nreason\nreacts\nrather\nranges\nraises\nraised\nPUSHFD\npushes\nPUSHED\npushed\nPUSHAD\nPUBLIC\nPseudo\npseudo\nproper\nPROMPT\nprolog\nPREFIX\nPrefix\nprefix\nported\nPOPPED\npopped\nPoints\npoints\nplaces\nplaced\npieces\nphases\nPermit\npermit\npasses\npassed\nPascal\npartly\nPARITY\nParity\nparity\nPAGING\nPaging\npaging\npadded\nPACKED\nPacked\npacked\nOutput\noutput\nOthers\nothers\norigin\noption\nOPCODE\nOpcode\nopcode\nonbyte\nOFFSET\nOffset\noffset\noffice\noffers\noccurs\noccupy\nobtain\nobject\nNUMBER\nNumber\nnumber\nnotice\nnormal\nnibble\nNESTED\nNested\nnested\nNegate\nnegate\nNeeded\nneeded\nnature\nnative\nnamely\nMunich\nmoving\nMohawk\nMODULO\nmodulo\nMODULE\nmodule\nModify\nmodify\nmodels\nMixing\nmixing\nmiddle\nMethod\nmethod\nmerely\nMEMORY\nMemory\nmemory\nMbytes\nmatter\nmasked\nmarket\nMARKED\nmarked\nMapped\nmapped\nMAPNET\nMANUAL\nManual\nmanual\nmanner\nmanage\nmaking\nLOWEST\nlowest\nLOOPNZ\nLOOPNE\nLookup\nlookup\nlonger\nLondon\nLOCKed\nLocked\nlocked\nlocate\nloader\nloaded\nlittle\nlisted\nLINEAR\nLinear\nlinear\nlimits\nlikely\nLevels\nlevels\nletter\nlesser\nLength\nlength\nleaves\nLayout\nlayout\nlatter\nlatest\nlarger\nkernel\nKERNAL\nKEPROM\nKbytes\njumped\nitself\nissued\nIsreal\nInvoke\ninvoke\nintoBX\ninsure\nInsite\ninside\nInsert\ninsert\ninputs\ninital\nIndeed\nIndDec\nIncDec\ninBits\nimages\nignore\nideals\nhighly\nhigher\nHIDDEN\nhidden\nherein\nHaving\nhaving\nHandle\nhandle\nhalves\nGvEvIv\nguides\ngroups\nGLOBAL\nGlobal\nglobal\ngiving\nGenius\nGbytes\nfuture\nFSTENV\nfreely\nFRAMES\nframes\nfourth\nformer\nFormat\nformat\nFormal\nformal\nforces\nfollow\nFNINIT\nfilled\nFigure\nfigure\nFields\nfields\nFFFFFH\nfaulty\nFaults\nfaults\nfaster\nfamily\nfailed\nfactor\nExtend\nextend\nexpect\nEXPAND\nExpand\nexpand\nexited\nexists\nexerts\nExcept\nexcept\nexceed\nEvGvIb\nEvGvCL\nevents\nevenly\nESCAPE\nEscape\nescape\nErrors\nerrors\nequals\nepilog\nentire\nenters\nEnsure\nensure\nenough\nending\nencode\nENABLE\nEnable\nenable\nemploy\nEither\neither\nEFLAGS\neffort\nEffect\neffect\nEBCDIC\neasily\neasier\ndwords\nDuring\nduring\ndumped\ndriver\ndriven\nDOWNTO\nDOUBLE\nDouble\ndouble\nDomain\ndomain\nDivide\ndivide\nDirect\ndirect\ndigits\ndiffer\nDEVICE\ndevice\nDetect\ndetect\ndetail\ndesign\ndepend\ndenote\ndemand\nDelays\ndelays\ndegree\nDEFINE\nDefine\ndefine\ndeeper\ndanger\ndamage\ncycles\nCUSTOM\nCREDIT\ncreate\ncovers\ncourse\ncounts\ncopies\ncopied\ncommon\ncolumn\ncoding\nCLOCKS\nClocks\nclocks\nclears\nchosen\nchoose\nchoice\nChecks\nchecks\nChaper\nChange\nchange\nCenter\ncenter\nCauses\ncauses\ncaused\ncannot\nCanada\ncaller\nCALLed\nCalled\ncalled\ncaches\ncached\nBuffer\nbuffer\nBUBBLE\nBubble\nbrings\nbranch\nBowers\nBounds\nbounds\nBOTTOM\nbottom\nBoston\nBorrow\nborrow\nblocks\nbitmap\nBITBUS\nbitbus\nBINARY\nBinary\nbinary\nBEYOND\nBeyond\nbeyond\nBenign\nbenign\nbelong\nbehind\nbehave\nbegins\nBEFORE\nBefore\nbefore\nbecome\nawhile\navoids\nAvenue\nassure\nASSUME\nAssume\nassume\nassist\nAssign\nassign\nAssert\nassert\naspect\narrest\naround\nappear\nanswer\namount\nAlways\nalways\nalters\nalmost\nAllows\nallows\naffect\nAdjust\nadjust\nadhere\nadding\nActual\nactual\nactive\nAction\naction\nacross\nACCESS\nAccess\naccess\nabsent\nAborts\naborts\nZEROS\nzeros\nyield\nXORed\nXLATB\nwrong\nWRITE\nWrite\nwrite\nwraps\nwould\nworse\nWords\nwords\nwidth\nwhose\nwhole\nWHILE\nWhile\nwhile\nWHICH\nwhich\nwhere\nweeks\nWaits\nversa\nVERRW\nVALUE\nValue\nvalue\nValid\nvalid\nusual\nUsing\nusing\nusers\nUsage\nusage\nUpper\nupper\nUntil\nuntil\nunits\nUnder\nunder\nUnary\nunary\nTypes\ntypes\ntwice\ntreat\nTraps\ntraps\nTOTAL\ntotal\ntools\nTokyo\ntmpcf\nTITLE\nTimes\ntimes\nthrow\nThree\nthree\nThose\nthose\nThird\nthird\nTHESE\nThese\nthese\nThere\nthere\ntheir\nTests\ntests\nterms\nTells\ntells\nTASKS\nTasks\ntasks\ntakes\ntaken\nTABLE\nTable\ntable\nswaps\nSuper\nsuper\nsuits\nstyle\nstuff\nstudy\nSTRUC\nSTOSW\nSTOSD\nSTOSB\nStore\nstore\nstops\nstill\nsteps\nSTATE\nState\nstate\nSTART\nStart\nstart\nSTACK\nStack\nstack\nspeed\nspans\nSPACE\nSpace\nspace\nsmall\nslows\nslash\nsizes\nSince\nsince\nshuts\nShows\nshows\nshown\nSHORT\nShort\nshort\nShift\nshift\nSheet\nshare\nSETPO\nSETPE\nSETNZ\nSETNS\nSETNP\nSETNO\nSETNL\nSETNG\nSETNE\nSETNC\nSETNB\nSETNA\nSETLE\nSETGE\nSETcc\nSETBE\nSETAE\nserve\nsense\nscope\nSCASW\nSCASD\nSCASB\nscans\nSCALE\nScale\nscale\nsaves\nSaved\nsaved\nSanta\nsales\nRules\nrules\nrisks\nrings\nRIGHT\nRight\nright\nretry\nRESET\nReset\nreset\nREPNZ\nREPNE\nRefer\nrefer\nready\nReads\nreads\nreach\nRange\nrange\nraise\nquite\nQuick\nquick\nqueue\nQUEST\nPWORD\npword\nPUSHF\nPUSHA\nPulse\nprior\npower\npound\nports\nPOPFD\nPOPAD\nPOINT\nPoint\npoint\nPlace\nplace\nPhone\nphase\npaths\nParts\nparts\nParis\nPairs\npairs\nPages\npages\npaged\nOUTSW\nOUTSD\nOUTSB\nOUTER\nOuter\nouter\nOTHER\nOther\nother\nOsaka\norder\nOlder\noften\noccur\nNOTES\nNotes\nnever\nneeds\nnames\nnamed\nmulti\nMOVZX\nMOVSX\nMOVSW\nMOVSD\nMOVSB\nmoves\nmoved\nmoffs\nModRM\nModes\nmodes\nModel\nmodel\nmixes\nMixed\nmixed\nminor\nMilan\nmight\nMEANS\nmeans\nMbyte\nMatch\nmatch\nMasks\nmasks\nmakes\nmajor\nLower\nlower\nLOOPZ\nLoops\nLOOPE\nlogic\nLODSW\nLODSD\nLODSB\nLOCAL\nLocal\nlocal\nLOADS\nLoads\nloads\nlists\nlinks\nlines\nLIMIT\nLimit\nlimit\nLEVEL\nLevel\nlevel\nlegal\nLEAVE\nLeave\nleave\nLEAST\nleast\nlearn\nlater\nlarge\nLABEL\nlabel\nknown\nkinds\nkeeps\nKbyte\nJumps\njumps\nJECXZ\nJcond\nITEMS\nitems\nIRETs\nIRETD\ninter\nINTEL\nIntel\nintel\nInput\ninput\nINNER\ninner\nINDEX\nIndex\nindex\nimply\niMDDX\nimage\nhours\nholes\nholds\nHelps\nhelps\nGuide\nGuard\ngrows\ngroup\ngreat\ngoing\ngives\ngiven\nGates\ngates\ngated\nfully\nFREAD\nFRAME\nFrame\nframe\nfound\nForms\nforms\nforce\nflush\nFLAGS\nFlags\nflags\nfixes\nfixed\nFIRST\nFirst\nfirst\nFINIT\nfinds\nfinal\nfills\nfiles\nFIELD\nField\nfield\nFFFFH\nFFFFF\nFFFDH\nFFEFH\nfewer\nfetch\nFAULT\nFault\nfault\nFALSE\nfalse\nfalls\nfails\nExtra\nextra\nexits\nexist\nexact\nEvery\nevery\nevent\nERROR\nError\nerror\nEqual\nequal\nEPROM\neprom\nENTRY\nEntry\nentry\nENTER\nEnter\nenter\nEJECT\neight\nearly\nDWORD\ndword\nDUMMY\ndoing\nDIRTY\nDirty\ndirty\nDIGIT\ndigit\ndepth\ndelay\nDebug\ndebug\ncycle\ncurly\nCross\ncross\nCOUNT\ncount\ncould\nCOMPS\ncomes\ncolon\nCodes\ncodes\nCODED\ncoded\nCMPSW\nCMPSD\nCMPSB\nclose\nClock\nclock\nClear\nclear\nClass\nclass\nClara\ncited\nchunk\nCHECK\nCheck\ncheck\nchain\nCause\ncause\ncases\nCARRY\nCarry\ncarry\ncaret\nCALLs\nCalls\ncalls\nCache\ncache\nBYTES\nBytes\nbytes\nbuild\nbring\nBreak\nBOUND\nbound\nbooks\nboard\nBLock\nBlock\nblock\nblink\nblank\nBelow\nbelow\nbeing\nbegun\nbegin\nBasic\nbasic\nbased\naware\nAVOID\navoid\nAVAIL\nASCII\nArray\narray\narmed\narise\nareas\napply\nANDed\nAmong\namong\nalter\nalong\nalone\nAllow\nallow\nalike\nALIAS\nAlias\nalias\nAlgol\nahead\nagain\nAFTER\nAfter\nafter\nadopt\nadded\nAbove\nabove\nabout\nABORT\nabort\nZERO\nZero\nzero\nyour\nXLAT\nxero\nXCNG\nXCHG\nwrap\nwork\nWORD\nWord\nword\nWITH\nWith\nwith\nwish\nwise\nwill\nwide\nWHEN\nWhen\nwhen\nwhat\nwere\nwell\nWays\nways\nwant\nWAIT\nWait\nwait\nview\nvice\nvery\nVERW\nVERR\nvary\nuses\nUSER\nUser\nuser\nUSEl\nUSED\nUsed\nused\nUPON\nUpon\nupon\nUNIX\nunit\nTYPE\nType\ntype\nturn\nTSSs\nTRUE\ntrue\nTRAP\nTrap\ntrap\ntook\nTIPS\ntime\ntied\nThus\nthus\nthru\nThis\nthis\nThey\nthey\nTHEN\nThen\nthen\nTHEM\nthem\nThat\nthat\nthan\nTGDT\ntGDT\nTEST\nTest\ntest\nTemp\ntemp\nTASK\nTask\ntask\ntake\nTags\ntags\nSwap\nswap\nsure\nsums\nSuch\nsuch\nstrg\nSTOS\nStop\nstop\nStep\nstep\nSreg\nspan\nsort\nSome\nsome\nsole\nsold\nSMSW\nSLDT\nSkip\nskip\nSIZE\nSize\nsize\nSITE\nsite\nSIGN\nSign\nsign\nSIDT\nside\nshut\nSHRD\nSHLD\nSGDT\nSETZ\nSETS\nSets\nsets\nSETP\nSETO\nSETL\nSETG\nSETE\nSETC\nSETB\nSETA\nsend\nself\nsees\nseen\nSCAW\nSCAS\nScan\nscan\nSCAB\nSave\nsave\nSAME\nSame\nsame\nsake\nSAHF\nRUPI\nruns\nRule\nrule\nrows\nroom\nring\nrest\nREPZ\nREPE\nrely\nREAL\nReal\nreal\nREAD\nRead\nread\nrate\nQueX\nQuad\nquad\nputs\nPUSH\nPush\npush\nPure\npure\nPTEs\nPort\nport\nPOPS\npops\nPOPF\nPOPA\nplus\nPlug\npins\nPDPR\nPDEs\nPDBR\npath\npast\nPass\npass\nPART\nPart\npart\nPARM\npair\nPAGE\nPage\npage\nover\nOUTS\nonto\nONLY\nOnly\nonly\nones\nONCE\nOnce\nonce\nofCR\nNULL\nnull\nNOTE\nNote\nNone\nnone\nNMls\nNMIs\nnext\nneed\nNEAR\nNear\nnear\nNAME\nName\nname\nMust\nmust\nmuch\nMOVS\nMove\nmove\nMOST\nMost\nmost\nMORE\nMore\nmore\nMODR\nModR\nmodR\nMODE\nMode\nmode\nmiss\nmeet\nmean\nMath\nmath\nMask\nmask\nMark\nmark\nmaps\nMany\nmany\nMake\nmake\nMAIN\nmain\nMail\nMade\nmade\nlost\nloss\nLOOP\nLoop\nloop\nLook\nlook\nLong\nlong\nLODS\nLOCK\nLock\nlock\nLoad\nload\nLMSW\nLLDT\nlist\nLINK\nLink\nlink\nline\nLIMT\nLike\nlike\nlies\nLIDT\nLGDT\nLess\nless\nLENn\nLEFT\nLeft\nleft\nlead\nLDTs\nLDTR\nLAST\nLast\nlast\nLAHF\nlack\nKong\nknow\nkind\nJust\njust\nJump\njump\nJNLE\nJNGE\nJNBE\nJNAE\nJCXZ\nitem\niSXM\niSDM\niSBX\niSBC\niRMX\niRMK\nIRET\niPSC\niPDS\niOSP\nIOPL\nINTR\nINTO\ninto\nINSW\nINSD\nINSB\nINIT\ninit\nIMUL\niMMX\niLBX\nIEEE\nIDTR\nIDIV\niDIS\niDBP\niCEL\niAPX\nHong\nHOLD\nHold\nhold\nHIGH\nHigh\nhigh\nhere\nhelp\nheld\nhave\nhand\nHALT\nHalt\nhalf\nGrpl\ngrow\ngran\nGOTO\ngoes\ngive\ngets\nGDTR\nGATE\nGate\ngate\nFxFF\nFull\nfull\nFROM\nFrom\nfrom\nfree\nFour\nfour\nForm\nform\nflow\nFLAT\nFlat\nflat\nFLAG\nFlag\nflag\nFIVE\nfive\nfits\nFind\nFILL\nFill\nfill\nfile\nFFFH\nFFFh\nFFFF\nFFFE\nFFFC\nFast\nfast\nfall\nFail\nfact\nExit\nexit\nEven\neven\nESAC\nENDS\nends\nELSE\nelse\nEBPM\nEBPB\nEBPA\neasy\nEACH\nEach\neach\ndrop\nDPLs\nDOWN\ndown\ndone\ndoes\ndisp\nDEST\nDest\ndest\nDESC\ndeal\ndays\ndate\nDATA\nData\ndata\nCWDE\nCPUs\nCPLs\nCopy\ncopy\ncond\nCODE\nCode\ncode\nCMPW\nCMPS\nCMPB\nCLTS\nchip\nCASE\nCase\ncase\ncare\nCALL\nCall\ncall\nBYTE\nByte\nbyte\nBUSY\nBusy\nbusy\nbump\nbugs\nBoth\nboth\nbook\nBITS\nBits\nbits\nBind\nbest\nbeen\nBASE\nBase\nbase\nBACK\nBack\nback\naway\nauto\nARPL\narea\nAlso\nalso\naids\nadds\nAddr\nable\nYou\nyou\nyet\nYES\nYes\nXOR\nxor\nWhy\nwho\nway\nwas\nVia\nvia\nval\nUSE\nUse\nuse\nUPI\nTwo\ntwo\nTSS\ntry\nTRn\nTOS\ntos\nTOP\nTop\ntop\ntoo\nTLB\nTHE\nThe\nthe\nten\nTBL\nTAG\ntag\nsum\nSUB\nSub\nsub\nSTR\nSTI\nSTD\nSTC\nSRC\nSrc\nSLD\nSix\nsix\nSIB\nSHR\nSHL\nshl\nSET\nSet\nset\nSEG\nseg\nSee\nsee\nSBB\nSAR\nSan\nSAL\nRWn\nrun\nRPL\nrow\nROR\nROM\nROL\nRMX\nRET\nret\nREP\nRem\nrel\nREG\nReg\nreg\nRCR\nRCL\nraw\nRAM\nram\nQuo\nPut\nput\nPTR\nPtr\nptr\nPTE\nPOP\nPop\npop\nPin\npin\nPIC\nper\nPDE\nown\nOUT\nOut\nout\nour\nOTP\nOne\none\nOLD\nOld\nold\noff\nodd\nNPX\nNow\nnow\nNOT\nNot\nnot\nnor\nNOP\nnop\nNon\nnon\nnnn\nNMI\nNLE\nNGE\nNEW\nNew\nnew\nNEG\nNBE\nNAE\nMUL\nMSW\nMSB\nMOV\nmov\nMOD\nMod\nmod\nmix\nMin\nmin\nMet\nmet\nmem\nMDS\nMCS\nMay\nmay\nMAX\nMax\nmax\nMAP\nMap\nmap\nLTR\nLTD\nLSS\nLSL\nLSB\nLOW\nlow\nLOT\nlog\nlim\nlie\nLGS\nLFS\nLet\nlet\nLES\nLEN\nled\nLEA\nLDT\nLDS\nLAR\nLAN\nKey\nkey\nJPO\nJPE\nJNZ\njnz\nJNS\nJNP\nJNO\nJNL\nJNG\nJNE\nJNC\nJNB\nJNA\nJMP\njmp\nJLE\nJGE\nJcc\nJBE\nJAE\nIts\nits\nINT\nINS\nINC\nimm\nIII\nIDT\nidt\nIDs\niCS\nICE\nHow\nhow\nHLT\nhlt\nhit\nhex\nHAS\nhas\nhad\nGrp\nGet\nget\nGDT\ngdt\nGDL\ngap\nFOR\nFor\nfor\nfit\nFFH\nFFF\nfew\nFAR\nFar\nfar\neXX\nEXT\netc\nESP\neSP\nesp\nESI\neSI\nESC\nEQU\nEPX\nEPB\nEND\nEnd\nend\nEIP\nEDX\neDX\nEDI\neDI\nECX\neCX\nEBX\neBX\nEBP\neBP\nebp\nEAX\neAX\nEAS\nDUP\nDue\ndue\nDSI\nDRO\nDRn\nDPL\nDon\ndon\nDIV\nDIR\ndid\nDES\ndes\nDEC\ndec\nDAS\nDAA\nCWD\nCRO\nCRn\nCPU\nCPL\nCMP\nCMC\nCLI\nCLD\nCLC\nCFh\nCDQ\nCCH\nCBW\nCan\ncan\nBut\nbut\nBUS\nBus\nbus\nbug\nBTS\nBTR\nBTC\nBSR\nBSF\nBPM\nBLT\nblt\nBLD\nBIT\nBit\nbit\nBIG\nbig\nBCD\nbas\nBad\nAVL\nASM\nARE\nare\nANY\nAny\nany\nAND\nand\nAll\nall\naid\nAFE\nADD\nAdd\nadd\nADC\nact\nAAS\nAAM\nAAD\nAAA\nZz\nZF\nYv\nYb\nxx\nXv\nXb\nWn\nwe\nVM\nUU\nUS\nup\nUD\nTS\nts\nTR\nTO\nTo\nto\nTM\nTI\nth\nTF\nTd\nSW\nSw\nSS\nss\nSP\nso\nSI\nsi\nSF\nSC\nRW\nRw\nrw\nRF\nre\nRd\nrd\nrb\nPT\nPO\npm\nPL\nPG\nPF\nPE\nPC\nOv\nOS\nOR\nor\nON\nOn\non\nOK\nOF\nOf\nof\nOD\nOB\nOb\nNZ\nNT\nNS\nNP\nNO\nNo\nno\nNM\nNL\nNG\nNE\nNB\nNA\nMs\nMP\nMp\nMF\nMa\nLn\nLE\nJZ\nJv\nJS\nJP\nJO\nJL\nJG\nJE\nJC\nJB\nJb\nJA\nIw\niw\nIV\nIv\nIT\nIt\nit\nIS\nIs\nis\nIP\nIO\nIN\nIn\nin\nim\nII\nIF\nIf\nif\nID\nid\nIb\nib\nHT\nGw\nGv\nGS\nGP\nGO\ngo\nGn\nGE\nGB\nGb\nFv\nFS\nFI\nFH\nFF\nFE\nFD\nFC\nFB\nFA\nEw\nEv\nET\nES\nes\nER\ner\nEp\neP\nEM\nEH\neg\nEF\nEE\nED\nEC\nEB\nEb\nEA\nDX\nDx\nDW\nDS\nDR\nDP\nDO\nDo\ndo\nDL\nDI\ndi\nDH\nDF\nDE\nDD\nDd\nDC\nDB\nDA\nCX\ncx\ncw\nCS\nCR\ncp\nCL\nCH\nCG\nCF\nCE\nCD\nCd\ncd\nCC\ncc\nCB\ncb\nCA\nBY\nBy\nby\nBX\nBT\nBS\nBP\nBn\nBL\nBH\nBF\nBE\nBe\nbe\nBD\nBC\nBB\nBA\nAX\nax\nAv\nAT\nAt\nat\nAS\nAs\nas\nAR\nAp\nAN\nAn\nan\nAL\nAH\nAF\nAE\nAD\nAC\nAB\nAA\nZ\nY\nX\nx\nW\nw\nV\nv\nU\nu\nT\nt\nS\ns\nR\nr\nP\np\nO\no\nN\nn\nM\nm\nL\nK\nJ\nI\ni\nH\nh\nG\ng\nF\nE\ne\nD\nd\nC\nc\nB\nb\nA\na\n"
  },
  {
    "path": "benchmarks/regexes/sliceslice/words.txt",
    "content": "a\nA\nAA\nAAA\nAAD\nAAM\nAAS\nAB\nabandoned\nabbreviations\nAbbreviations\nabilities\nability\nable\nabort\nABORT\naborts\nAborts\nabout\nabove\nAbove\nabsence\nabsent\nabsolute\nabstraction\nAC\nacceptable\nacceptance\naccepted\naccess\nAccess\nACCESS\naccessed\nAccessed\nACCESSED\naccesses\nAccessibility\naccessible\naccessing\nAccessing\naccidental\naccommodate\naccompanied\naccompanying\naccomplish\naccomplished\naccording\naccordingly\naccount\naccumulator\nachieved\nacknowledge\nAcknowledge\nAcknowledging\nacross\nact\naction\nAction\nactions\nactivates\nactivation\nactive\nactivities\nactivity\nactual\nActual\nactually\nAD\nADC\nadd\nAdd\nADD\nadded\nadding\naddition\nAddition\nadditional\nAdditional\nadditions\nAddr\nAddrees\naddress\nAddress\nADDRESS\naddressability\naddressable\nAddressable\naddressed\naddresses\naddressing\nAddressing\naddresss\naddresssize\nAddressSize\nadds\nadequate\nadhere\nadjacent\nadjust\nAdjust\nadjusted\nadjustment\nAdjustment\nadjusts\nadopt\nadresses\nadvanced\nadvances\nadvantage\nadvantages\nAE\nAF\nAFE\naffect\naffected\nAffected\naffecting\naffects\nafforded\nafter\nAfter\nAFTER\nagain\nagainst\nAgainst\nAH\nahead\naid\naids\nAL\nAlgol\nalgorithm\nalgorithmic\nalgorithms\nalias\nAlias\nALIAS\naliases\naligned\nAligned\naligning\nalignment\nalike\nall\nAll\nallocate\nallocated\nallocates\nAllocates\nallocating\nallocation\nallow\nAllow\nallowable\nallowed\nallowing\nAllowing\nallows\nAllows\nalmost\nalone\nalong\nalphabetic\nalphabetical\nalready\nalso\nAlso\nalter\nalteration\naltered\naltering\nalternate\nalters\nAlthough\nalways\nAlways\namong\nAmong\namount\nampersand\nan\nAn\nAN\nand\nAND\nanddoublewords\nANDed\nanomaly\nanother\nAnother\nanswer\nanticipate\nany\nAny\nANY\nanywhere\nAp\napparent\nappear\nappears\nappendices\nAppendices\nAppendix\nappends\napplication\nApplication\napplications\nApplications\nAPPLICATIONS\napplied\nApplied\napplies\napply\napplying\napproach\napproaches\nappropriate\nApproximate\napproximately\nAR\narbitrarily\narbitrary\narchitectural\narchitecture\nArchitecture\narchitectures\nare\nARE\narea\nareas\nargument\narguments\narise\narithmetic\nArithmetic\narithmetically\narmed\naround\nARPL\narrangement\narranging\narray\nArray\narrest\narrives\nas\nAs\nAS\nASCII\nASM\naspect\naspects\nassembled\nassembler\nassembly\nAssembly\nassert\nAssert\nasserted\nassertion\nasserts\nassign\nAssign\nassigned\nassigning\nassignment\nassignments\nAssignments\nassigns\nassist\nassistance\nassociated\nassociates\nassociative\nassume\nAssume\nASSUME\nassumed\nAssumed\nassumes\nassuming\nassumptions\nAssumptions\nassure\nassured\nasynchronous\nat\nAt\nAT\nattached\nattempt\nAttempt\nattempted\nattempting\nattempts\nattention\nattributable\nattribute\nAttribute\nattributes\nAttributes\nauto\nautomatic\nAutomatic\nautomatically\nauxiliary\nAUXILIARY\nAv\nAVAIL\navailable\nAvailable\nAVAILABLE\nAvenue\nAVL\navoid\nAVOID\navoidable\navoided\navoiding\navoids\naware\naway\nawhile\nax\nAX\nb\nB\nBA\nback\nBack\nBACK\nbacklink\nbackward\nBad\nbas\nbase\nBase\nBASE\nbased\nbasic\nBasic\nBB\nBC\nBCD\nBD\nbe\nBe\nBE\nbecause\nBecause\nbecome\nbecomes\nbeen\nbefore\nBefore\nBEFORE\nbegin\nbeginning\nBeginning\nbegins\nbegun\nbehave\nbehaves\nbehind\nbeing\nbelong\nbelow\nBelow\nbenefit\nbenefits\nBenelux\nbenign\nBenign\nBesides\nbest\nbetween\nBetween\nbeyond\nBeyond\nBEYOND\nBF\nBH\nbig\nBIG\nbinary\nBinary\nBINARY\nBind\nbinders\nbit\nBit\nBIT\nBitBase\nBITBASE\nbitbus\nBITBUS\nbitmap\nBitOffset\nBITOFFSET\nbits\nBits\nBITS\nBitStringAddr\nBL\nblank\nBLD\nblink\nblock\nBlock\nBLock\nblocks\nblt\nBLT\nBltLoop\nBn\nboard\nbook\nbooks\nBoolean\nbootstrap\nborrow\nBorrow\nborrowed\nBoston\nboth\nBoth\nbottom\nBOTTOM\nbound\nBOUND\nboundaries\nBoundaries\nboundary\nbounds\nBounds\nBowers\nBP\nBPM\nbrackets\nBrackets\nbranch\nBranchCond\nbranches\nbranching\nbreadth\nBreak\nBreakpeint\nbreakpoint\nBreakpoint\nBREAKPOINT\nbreakpoints\nBreakpoints\nbriefly\nbring\nbrings\nbroadcast\nBS\nBSF\nBSR\nBT\nBTC\nBTR\nBTS\nBubble\nBUBBLE\nbuffer\nBuffer\nBuffers\nbug\nbugs\nbuild\nbuilder\nBuilder\nbuilders\nbump\nbus\nBus\nBUS\nbusy\nBusy\nBUSY\nbut\nBut\nBX\nby\nBy\nBY\nbypasses\nbyte\nByte\nBYTE\nbytes\nBytes\nBYTES\nc\nC\nCA\ncache\nCache\ncacheability\ncached\ncaches\ncalculate\ncalculated\ncalculates\ncalculation\nCalculation\ncalculations\ncall\nCall\nCALL\ncalled\nCalled\nCALLed\ncaller\ncalling\ncalls\nCalls\nCALLs\ncan\nCan\nCanada\ncannot\ncapabilities\ncapability\ncapable\ncare\ncareful\ncaret\ncarried\ncarry\nCarry\nCARRY\ncase\nCase\nCASE\ncases\ncatalog\ncatches\ncategories\ncategory\ncause\nCause\ncaused\ncauses\nCauses\ncausing\ncausingthe\ncaution\ncautious\ncb\nCB\nCBW\ncc\nCC\nCCH\ncd\nCd\nCD\nCDQ\nCE\nceiling\ncenter\nCenter\nCenters\ncentral\ncertain\nCertain\nCertified\nCF\nCFh\nCG\nCH\nchain\nchaining\nchange\nChange\nchanged\nCHANGED\nchanges\nchanging\nChanging\nChaper\nchapter\nChapter\nchapters\nChapters\ncharacter\nCharacter\ncharacteristics\ncharacterized\ncharacters\ncheck\nCheck\nCHECK\nchecked\nchecking\nChecking\nchecks\nChecks\nCheckString\nChicago\nchip\nchoice\nchoices\nchoose\nchooses\nchoosing\nChoosing\nchosen\nchunk\ncircled\ncircuitry\ncircumstances\ncited\nCL\nClara\nclarity\nclass\nClass\nclasses\nClasses\nclassification\nclassified\nclassifies\nCLC\nCLD\nclear\nClear\ncleared\nCleared\nclearing\nClearing\nClearly\nclears\nCLI\nclock\nClock\nclocks\nClocks\nCLOCKS\nclose\nclosely\nCLTS\ncluster\nCMC\nCMP\nCMPB\nCMPS\nCMPSB\nCMPSD\nCMPSW\nCMPW\ncode\nCode\nCODE\ncoded\nCODED\ncodes\nCodes\ncoding\ncollection\ncolon\ncolumn\ncolumns\ncombination\ncombinations\nCombinations\ncombine\ncombined\nCombined\ncombines\ncombining\nCombining\ncomes\ncommand\ncommands\nComments\nCOMMENTS\ncommitment\ncommitted\ncommon\ncommonly\nCOMMputer\ncommunicated\ncommunicates\ncompact\ncompactly\ncompare\nCompare\ncompared\ncompares\ncomparing\ncomparison\nComparison\ncomparisons\nCompatability\ncompatibility\nCompatibility\nCOMPATIBILITY\ncompatible\ncompiled\ncompiler\ncompilers\ncomplement\nComplement\ncomplemented\ncomplements\ncomplete\nComplete\ncompleted\ncompletely\ncompletes\ncompletion\ncomplexities\ncomponent\nComponent\ncomponents\ncomposed\nCompound\nCOMPS\ncomputation\nComputation\ncomputations\ncompute\ncomputed\ncomputes\nconcatenated\nconcatenates\nconcept\nconcepts\nconcerned\nconcerning\nconcurrently\ncond\ncondition\nCondition\nconditional\nConditional\nconditions\nConditions\nconfidence\nconfiguration\nconfigurations\nconfined\nconformance\nconforming\nConforming\nCONFORMING\nconforms\nconfusion\nconjunction\nconnection\nconsecutive\nConsequently\nconsider\nConsiderations\nconsidered\nconsidering\nConsiders\nconsist\nconsistent\nconsisting\nconsists\nconstant\nconstants\nconstrain\nconstraint\nconstruct\nconstructed\nconsult\nconsulting\nConsulting\nconsults\nconsume\ncontact\nContact\ncontain\ncontained\ncontaining\ncontains\nContains\nCONTAINS\ncontent\ncontents\nContents\ncontext\ncontiguous\ncontinue\ncontinued\ncontinues\ncontracts\nContracts\ncontrary\ncontributory\nContributory\ncontrol\nControl\nCONTROL\ncontrolled\ncontroller\nController\ncontrollers\ncontrolling\nControlling\ncontrols\nconvenience\nconvenient\nconveniently\nconvention\nconventions\nConventions\nconversion\nConversion\nconvert\nConvert\nconverted\nconverting\nconverts\ncooperate\ncooperation\ncoordinate\ncoordinated\ncoordinates\nCopenhagen\ncopied\ncopies\nCoprecessor\nCoprocessing\ncoprocessor\nCoprocessor\nCOPROCESSOR\ncoprocessors\ncopy\nCopy\ncopying\nCorporation\nCORPORATION\ncorrect\ncorrectly\ncorrects\ncorrespond\ncorrespondence\ncorresponding\ncorresponds\ncorrupt\ncorrupted\ncould\ncount\nCOUNT\nCounter\nCOUNTER\ncounterparts\nCountReg\ncounts\ncoupled\ncourse\ncovered\ncovering\nCovering\ncovers\ncp\nCPL\nCPLs\nCPU\nCPUs\nCR\ncreate\ncreated\ncreates\ncreating\nCreation\nCREDIT\ncriteria\ncritical\nCRn\nCRO\ncross\nCross\ncrosses\ncrossing\ncrucial\nCS\ncurly\ncurrent\nCurrent\nCURRENT\ncurrently\nCUSTOM\ncustomarily\ncustomer\nCustomer\ncustomers\ncustomizing\ncw\nCWD\nCWDE\ncx\nCX\ncycle\ncycles\nd\nD\nDA\nDAA\ndamage\ndanger\nDAS\ndata\nData\nDATA\ndate\ndays\nDB\nDC\nDd\nDD\nDE\ndeal\ndealing\ndeallocated\ndebug\nDebug\ndebugger\ndebuggers\nDebuggers\ndebugging\nDebugging\ndec\nDEC\ndecimal\nDecimal\nDECIMAL\ndeclared\ndecoded\ndecodes\ndecoding\ndecrement\nDecrement\ndecremented\ndecrementing\ndecrements\ndedicated\ndeeper\ndefault\nDefault\nDEFAULT\ndefaults\ndefeated\ndeferred\ndefine\nDefine\nDEFINE\ndefined\ndefines\nDefines\ndefinition\nDefinition\nDefinitions\ndegree\ndelay\ndelayed\ndelaying\ndelays\nDelays\ndeleted\ndemand\ndemonstrate\ndenominator\ndenote\ndenoted\ndenotes\ndepend\nDEPENDENCE\ndependent\ndepending\nDepending\ndepends\ndepth\nderives\ndes\nDES\nDESC\ndescribe\ndescribed\ndescribes\ndescribing\ndescription\nDescription\ndescriptions\ndescriptive\ndescriptor\nDescriptor\nDESCRIPTOR\ndescriptors\nDescriptors\nDESCRIPTORS\ndesign\ndesignate\ndesignated\ndesigned\ndesigners\nDesigners\ndesigns\ndesirable\ndesired\ndest\nDest\nDEST\nDestAddr\ndestination\nDestination\nDESTINATION\ndestinations\ndestined\nDestReg\ndetail\ndetailed\ndetails\nDetails\ndetect\nDetect\ndetected\nDetected\nDetection\ndetects\ndetermine\nDetermine\ndetermined\ndetermines\ndetermining\ndeveloping\ndevelopment\ndevice\nDEVICE\ndevices\nDF\nDH\ndi\nDI\ndiagnose\ndiagnosing\ndiagnosis\nDIAGRAM\ndictionary\ndid\ndiffer\ndifference\ndifferences\nDifferences\ndifferent\nDifferent\ndifferently\ndiffering\ndiffers\ndifficult\ndigit\nDIGIT\ndigits\ndimension\ndimensional\nDIR\ndirect\nDirect\ndirection\nDirection\nDIRECTION\ndirectly\ndirectories\nDIRECTORIES\ndirectory\nDirectory\nDIRECTORY\ndirty\nDirty\nDIRTY\ndisable\nDisable\ndisabled\nDISABLED\ndisables\ndisabling\nDisabling\ndiscard\ndiscarded\nDiscarded\ndiscarding\ndiscovered\ndiscretion\ndiscuss\ndiscussed\ndiscusses\nDiscusses\ndiscussion\nDiscussion\ndisp\ndispatch\ndispatched\ndispatching\ndisplacement\nDisplacement\nDISPLACEMENT\ndisplacements\ndisplay\nDISPLAY\ndisplaying\ndisruptive\ndistinct\ndistinction\ndistinguish\ndistinguished\ndistinguishes\nDistinguishes\nDistribution\ndisturbing\nDIV\ndivide\nDivide\ndivided\ndividend\nDividend\ndivides\ndividing\ndivisible\ndivision\nDivision\ndivisions\nDivisions\ndivisor\nDivisor\nDL\ndo\nDo\nDO\ndocument\ndocumentation\ndoes\ndoing\ndomain\nDomain\ndon\nDon\ndone\ndouble\nDouble\nDOUBLE\ndoubleword\nDoubleword\nDOUBLEWORD\ndoublewords\nDoublewords\ndown\nDOWN\nDOWNTO\ndownward\nDP\nDPL\nDPLs\nDR\ndriven\ndriver\ndrivers\nDRn\nDRO\ndrop\nDS\nDSI\ndue\nDue\nDUMMY\ndumped\nDUP\nduplicate\nduration\nduring\nDuring\nDW\ndword\nDWORD\ndwords\nDx\nDX\ndynamic\nDYNAMIC\ndynamically\ne\nE\nEA\neach\nEach\nEACH\nearlier\nearly\nEAS\neasier\neasily\neasy\neAX\nEAX\nEb\nEB\nEBCDIC\nebp\neBP\nEBP\nEBPA\nEBPB\nEBPM\neBX\nEBX\nEC\neCX\nECX\nED\neDI\nEDI\neDX\nEDX\nEE\nEF\neffect\nEffect\neffective\nEffective\nEFFECTIVE\neffectively\neffects\nefficiency\nefficient\nefficiently\neffort\nEFLAGS\neg\nEH\neight\nEIP\neither\nEither\nEJECT\nelement\nelements\neliminate\neliminated\neliminates\neliminating\nelse\nELSE\nEM\nembedded\nemploy\nemployed\nemploys\nemulate\nemulated\nEmulating\nemulation\nEmulation\nenable\nEnable\nENABLE\nenabled\nENABLED\nenables\nenabling\nEnabling\nenclosed\nencode\nencoded\nencodes\nencoding\nencodings\nencompass\nencountered\nencountering\nencounters\nend\nEnd\nEND\nending\nends\nENDS\nenforce\nenforced\nenforces\nengaged\nengineering\nengineers\nEngineers\nenhance\nenhanced\nenough\nensure\nEnsure\nensures\nensuring\nenter\nEnter\nENTER\nentered\nentering\nEntering\nenters\nentire\nentirely\nentitled\nentries\nEntries\nENTRIES\nentry\nEntry\nENTRY\nenvironment\nenvironments\neP\nEp\nEPB\nepilog\neprom\nEPROM\nEPX\nEQU\nequal\nEqual\nequally\nequals\nequates\nequivalent\ner\nER\nerror\nError\nERROR\nerrors\nErrors\nes\nES\nESAC\nESC\nescape\nEscape\nESCAPE\neSI\nESI\nesp\neSP\nESP\nespecially\nessential\nestablished\nET\netc\nEv\nevaluated\nevaluates\nevaluating\nevaluation\neven\nEven\nevenly\nevent\nevents\nevery\nEvery\nEvGvCL\nEvGvIb\nEw\nexact\nexactly\nexamine\nExamine\nexamined\nexamines\nexamining\nexample\nExample\nexamples\nExamples\nexceed\nExceeded\nExceeding\nexceeds\nexcept\nExcept\nexception\nException\nEXCEPTION\nexceptional\nexceptions\nExceptions\nexcessive\nexchange\nExchange\nexchanged\nexchanges\nexcluding\nexclusive\nExclusive\nexclusively\nexecutable\nEXECUTABLE\nexecute\nExecute\nexecuted\nexecutes\nExecutes\nexecuting\nExecuting\nexecution\nExecution\nexeptions\nexerts\nexhausted\nexist\nexisted\nexistence\nexisting\nExisting\nexists\nexit\nExit\nexited\nexiting\nexits\nexpand\nExpand\nEXPAND\nexpandable\nexpanded\nExpands\nexpansion\nExpansion\nexpect\nexpectations\nexpected\nexpedient\nexplain\nexplained\nexplaining\nexplains\nExplains\nexplanation\nExplanation\nexplanatory\nexplicit\nExplicit\nexplicitly\nexported\nexpressed\nexpression\nexpressions\nexpressly\nEXT\nextend\nExtend\nextended\nExtended\nextending\nextends\nextension\nExtension\nEXTENSION\nextensions\nExtensions\nEXTENSIONS\nextensive\nextensively\nexternal\nExternal\nexternally\nextra\nExtra\nextract\nExtract\nextracted\nextraction\nextremely\nextremes\neXX\nF\nFA\nfacilitated\nfacilities\nfact\nfactor\nfactors\nfactory\nFail\nfailed\nfailing\nfails\nfailure\nFailure\nfall\nfalls\nfalse\nFALSE\nfamilies\nfamily\nfar\nFar\nFAR\nFARLABEL\nfast\nFast\nfaster\nFASTPATH\nfault\nFault\nFAULT\nfaulting\nFaulting\nfaults\nFaults\nfaulty\nFB\nFC\nFD\nFE\nfeasible\nfeature\nfeatures\nFeatures\nfetch\nfetched\nfetches\nfetching\nfew\nfewer\nFF\nFFEFH\nFFF\nFFFC\nFFFDH\nFFFE\nFFFF\nFFFFF\nFFFFFFF\nFFFFFFFFH\nFFFFFH\nFFFFH\nFFFh\nFFFH\nFFH\nFH\nFI\nfield\nField\nFIELD\nfields\nFields\nfigure\nFigure\nFigures\nfile\nfiles\nfill\nFill\nFILL\nfilled\nfills\nfinal\nFind\nfinds\nFINIT\nfirst\nFirst\nFIRST\nfit\nfits\nfive\nFIVE\nfixed\nfixes\nflag\nFlag\nFLAG\nflags\nFlags\nFLAGS\nflat\nFlat\nFLAT\nflexibility\nflexible\nfloating\nflow\nflush\nflushed\nflushes\nFNINIT\nfollow\nfollowed\nfollowing\nFollowing\nfollows\nfor\nFor\nFOR\nforce\nforces\nforcing\nforever\nform\nForm\nformal\nFormal\nformat\nFormat\nformation\nFormation\nformats\nFormats\nformer\nformerly\nforming\nforms\nForms\nformula\nforward\nForward\nfound\nfour\nFour\nfourth\nfragmented\nfragments\nframe\nFrame\nFRAME\nframes\nFRAMES\nFrancisco\nFREAD\nfree\nfreedom\nfreely\nfrequency\nfrom\nFrom\nFROM\nFS\nFSTENV\nfulfill\nfull\nFull\nfully\nfunction\nFunction\nfunctionally\nfunctions\nFunctions\nfundamental\nFundamental\nfurther\nFurther\nFurthermore\nfuture\nFv\nFxFF\ng\nG\ngap\ngate\nGate\nGATE\ngated\ngates\nGates\nGb\nGB\nGbytes\nGDL\ngdt\nGDT\nGDTbase\nGDTR\nGE\ngeneral\nGeneral\nGENERAL\nGeneralized\ngenerally\ngenerate\nGenerate\ngenerated\nGenerated\ngenerates\ngenerating\ngeneration\ngenerations\nGenius\nget\nGet\ngets\ngigabits\ngigabyte\nGigabyte\ngigabytes\nGIGABYTES\ngive\ngiven\ngives\ngiving\nglobal\nGlobal\nGLOBAL\nGn\ngo\nGO\ngoes\ngoing\nGOTO\ngoverns\nGP\ngran\ngranular\ngranularity\nGranularity\nGRANULARITY\ngraphically\ngraphics\ngreat\ngreater\nGreater\ngreatest\nGREATEST\ngroup\ngrouped\ngroupings\ngroups\ngrow\ngrows\nGrp\nGrpl\nGS\nguarantee\nguaranteed\nguarantees\nGuard\nGuide\nguidelines\nguides\nguranteed\nGv\nGvEvIv\nGw\nh\nH\nhad\nhalf\nHalt\nHALT\nhalves\nhand\nhandle\nHandle\nhandled\nhandler\nhandlers\nhandles\nhandling\nHandling\nhardware\nHardware\nhas\nHAS\nhave\nhaving\nHaving\nheld\nhelp\nhelps\nHelps\nhere\nherein\nhex\nhexadecimal\nHexadecimal\nhidden\nHIDDEN\nhigh\nHigh\nHIGH\nhigher\nhighest\nHIGHEST\nhighlighted\nhighlights\nhighly\nhit\nhlt\nHLT\nhold\nHold\nHOLD\nHolding\nholds\nholes\nHong\nhours\nhow\nHow\nhowever\nHowever\nHOWEVER\nHT\nhundreds\nhypothetical\ni\nI\niAPX\nib\nIb\nICE\niCEL\niCS\nid\nID\niDBP\nideals\nidentical\nidentically\nidentification\nIdentification\nidentified\nidentifier\nIdentifier\nidentifiers\nidentifies\nIdentifies\nidentify\nidentifying\nIdentifying\nidentity\niDIS\nIDIV\nIDs\nidt\nIDT\nIDTbase\nIDTR\nIEEE\nif\nIf\nIF\nignore\nignored\nignores\nII\nIII\niLBX\nillegal\nillustrate\nillustrated\nillustrates\nillustrations\nim\nimage\nimages\niMDDX\nimm\nimmediate\nImmediate\nIMMEDIATE\nimmediately\nImmediately\niMMX\nimplement\nImplement\nimplementation\nImplementation\nimplemented\nimplementing\nimplements\nImplements\nimplications\nimplicit\nImplicit\nimplicitly\nimplied\nImplied\nimplies\nimply\nimplying\nimportant\nimposed\nimposes\nimproper\nimproperly\nImproperly\nIMUL\nin\nIn\nIN\ninaccessible\ninactive\nInactive\ninappropriate\ninBits\nInboard\nINC\nIncDec\ninclude\nincluded\nincludes\nincluding\nINCLUDING\ninclusive\nInclusive\nincoming\nIncoming\nincompatible\ninconsistent\nInconsistent\nincorrectly\nincrease\nincreased\nincrement\nIncrement\nincremented\nincrementing\nincrements\nIndDec\nIndeed\nindependent\nindeterminate\nindex\nIndex\nINDEX\nindexed\nindexes\nIndexes\nindexing\nIndexing\nINDEXING\nindicate\nindicated\nindicates\nINDICATES\nindicating\nindication\nindicator\nIndicator\nINDICATOR\nindices\nIndirct\nindirect\nIndirect\nindirection\nindirectly\nIndirectly\nindistinguishable\nindividual\nindividually\nindividuals\nindivisible\ninevitable\ninfinite\ninfinity\ninfluence\ninfluences\ninformation\nInformation\ninherently\ninhibit\ninhibited\ninhibits\ninit\nINIT\ninital\ninitally\ninitial\nInitial\nINITIAL\ninitialization\nInitialization\ninitialize\ninitialized\ninitializes\ninitializing\ninitially\ninitiates\ninner\nINNER\ninnovation\ninput\nInput\ninputs\nINS\nINSB\nINSD\ninsert\nInsert\ninserted\ninserting\ninsertion\ninside\nInsite\ninspected\ninstances\ninstant\ninstead\nInstead\ninstruction\nInstruction\nINSTRUCTION\ninstructional\ninstructions\nInstructions\nINSTRUCTIONS\ninsufficient\ninsure\nINSW\nINT\ninteger\nInteger\nINTEGER\nintegers\nIntegers\nintegral\nIntegrated\nintegrity\nIntegrity\nintel\nIntel\nINTEL\nintelBOS\nIntelevision\ninteligent\nIntellec\nintelligent\nIntellink\nintended\ninter\nintercept\nintercepted\ninterchangeably\ninterest\ninterface\nInterface\ninterfaces\ninterfacing\ninterfere\ninterference\ninterfering\nInterievel\ninterlevel\nInterlevel\nintermediate\ninternal\nINTERNAL\ninternally\ninternational\nInterposing\ninterpret\ninterpretation\nInterpretation\ninterpretations\ninterpreted\ninterpreting\nInterpreting\ninterprets\ninterprocessor\ninterrogate\ninterrogated\ninterrupt\nInterrupt\nINTERRUPT\ninterrupted\nInterrupted\ninterrupting\ninterruption\ninterrupts\nInterrupts\nintersegment\nintertask\nintervention\nIntervention\ninto\nINTO\nintoBX\nINTR\nintralevel\nintrasegment\nintrastack\nintroduced\nintroduces\nIntroduces\nintroduction\nIntroduction\ninvalid\nInvalid\nInvalidate\ninverts\ninvisible\nINVISIBLE\ninvoke\nInvoke\ninvoked\ninvokes\ninvoking\ninvolve\ninvolved\ninvolves\ninvolving\nIO\nIOPL\niOSP\nIP\niPDS\niPSC\nIRET\nIRETD\nIRETs\niRMK\niRMX\nis\nIs\nIS\niSBC\niSBX\niSDM\nisolate\nisolated\nisolation\nIsreal\nissued\niSXM\nit\nIt\nIT\nitem\nitems\nITEMS\niterated\niteration\niterations\nits\nIts\nitself\nIv\nIV\niw\nIw\nJ\nJA\nJAE\nJb\nJB\nJBE\nJC\nJcc\nJcond\nJCXZ\nJE\nJECXZ\nJG\nJGE\nJL\nJLE\njmp\nJMP\nJNA\nJNAE\nJNB\nJNBE\nJNC\nJNE\nJNG\nJNGE\nJNL\nJNLE\nJNO\nJNP\nJNS\njnz\nJNZ\nJO\nJP\nJPE\nJPO\nJS\njump\nJump\njumped\njumps\nJumps\njust\nJust\njustified\njustify\nJv\nJZ\nK\nKbyte\nKbytes\nkeeps\nKEPROM\nKERNAL\nkernel\nkey\nKey\nkeywords\nkilobytes\nKilobytes\nkind\nkinds\nknow\nknowledge\nknown\nKong\nL\nlabel\nLABEL\nlabeled\nlabelled\nlack\nLAHF\nLAN\nlanguage\nLanguage\nlanguages\nLanguages\nLAR\nlarge\nlargely\nlarger\nlargest\nlast\nLast\nLAST\nlater\nlatest\nlatter\nlayout\nLayout\nLDS\nLDT\nLDTR\nLDTs\nLE\nLEA\nlead\nleading\nlearn\nleast\nLEAST\nleave\nLeave\nLEAVE\nleaves\nleaving\nLeaving\nled\nleft\nLeft\nLEFT\nLeftSRC\nlegal\nlegitimately\nLEN\nlength\nLength\nLENn\nLES\nless\nLess\nlesser\nlet\nLet\nletter\nletters\nlevel\nLevel\nLEVEL\nlevels\nLevels\nlexical\nLEXICAL\nLFS\nLGDT\nLGS\nlibraries\nLibrary\nLIDT\nlie\nlies\nlike\nLike\nlikely\nLikewise\nlim\nlimit\nLimit\nLIMIT\nlimitation\nlimitations\nlimited\nlimiting\nlimits\nLIMT\nline\nlinear\nLinear\nLINEAR\nlines\nlink\nLink\nLINK\nlinkage\nlinkages\nLinkages\nlinkers\nlinking\nLinking\nlinks\nlist\nlisted\nlisting\nlists\nliterals\nliterature\nLiterature\nlittle\nLLDT\nLMSW\nLn\nload\nLoad\nloaded\nloader\nloaders\nloading\nLoading\nloadings\nLOADREG\nloads\nLoads\nLOADS\nlocal\nLocal\nLOCAL\nlocate\nlocated\nlocates\nlocating\nlocation\nLocation\nlocations\nLocations\nLOCATIONS\nlocators\nlock\nLock\nLOCK\nlocked\nLocked\nLOCKed\nlocking\nLocking\nLODS\nLODSB\nLODSD\nLODSW\nlog\nlogic\nlogical\nLogical\nLOGICAL\nlogically\nLondon\nlong\nLong\nlonger\nlook\nLook\nlookaside\nLookaside\nlookup\nLookup\nlookups\nLookups\nloop\nLoop\nLOOP\nLOOPcond\nLOOPE\nlooping\nLOOPNE\nLOOPNZ\nLoops\nLOOPZ\nloosely\nloss\nlost\nLOT\nlow\nLOW\nlower\nLower\nlowercase\nlowest\nLOWEST\nLSB\nLSL\nLSS\nLTD\nLTR\nm\nM\nMa\nMachanism\nmachine\nMachine\nmachines\nmade\nMade\nMagazine\nmagnitude\nMAGNITUDE\nMail\nmain\nMAIN\nmaintain\nmaintained\nmaintaining\nmaintains\nmaintenance\nmajor\nmake\nMake\nmakes\nmaking\nmanage\nmanaged\nmanagement\nManagement\nManager\nmanages\nmanipulate\nmanipulated\nmanipulates\nmanipulation\nManipulation\nmanipulationinstructions\nmanner\nmanual\nManual\nMANUAL\nmany\nMany\nmap\nMap\nMAP\nMAPNET\nmapped\nMapped\nmapping\nMapping\nmappings\nmaps\nmark\nMark\nmarked\nMARKED\nmarket\nmarking\nmask\nMask\nmaskable\nMaskable\nmasked\nmasking\nmasks\nMasks\nMaskShift\nmasters\nmatch\nMatch\nmatches\nmatching\nMatching\nmaterial\nmath\nMath\nmatter\nmax\nMax\nMAX\nmaximum\nmay\nMay\nMbyte\nMbytes\nMCS\nMDS\nmean\nmeaning\nMeaning\nmeans\nMEANS\nmechanism\nMechanism\nmechanisms\nMechanisms\nmeet\nmegabyte\nmegabytes\nMegachassis\nmem\nmembers\nmemory\nMemory\nMEMORY\nmention\nmentioned\nmerely\nmet\nMet\nmethod\nMethod\nmethods\nMethods\nMF\nmicrocommunications\nmicrocontrollers\nMICROMAINFRAME\nmicroprocessor\nMicroprocessor\nmicroprocessors\nmiddle\nmight\nMilan\nmin\nMin\nminimum\nminor\nmisaligned\nmisalignment\nMiscellaneous\nmiss\nmistake\nmix\nmixed\nMixed\nmixes\nmixing\nMixing\nmnemonic\nMnemonic\nmnemonics\nmod\nMod\nMOD\nmode\nMode\nMODE\nmodel\nModel\nmodels\nmodes\nModes\nmodification\nmodifications\nmodified\nmodifier\nmodifies\nmodify\nModify\nmodifying\nModifying\nmodR\nModR\nMODR\nModRM\nmodule\nMODULE\nmodules\nModules\nmodulo\nMODULO\nmoffs\nMohawk\nmonitor\nMONITOR\nmonitored\nmonitoring\nmore\nMore\nMORE\nmost\nMost\nMOST\nmostflexible\nmov\nMOV\nmove\nMove\nmoved\nmovement\nMovement\nmoves\nmoving\nMOVS\nMOVSB\nMOVSD\nMOVSW\nMOVSX\nMOVZX\nMp\nMP\nMs\nMSB\nMSW\nmuch\nMUL\nmulti\nmultibit\nMULTIBUS\nMULTICHANNEL\nMULTIMODULE\nmultiple\nmultiples\nmultiplicand\nmultiplication\nMultiplication\nmultiplied\nmultiplier\nmultiplies\nmultiply\nMultiply\nmultiprecision\nmultiprocessing\nMultiprocessing\nmultiprocessor\nmultiprogram\nmultiprogrammed\nMultiSERVER\nmultitasking\nMultitasking\nMunich\nmust\nMust\nn\nN\nNA\nNAE\nname\nName\nNAME\nnamed\nnamely\nnames\nnative\nnatural\nnature\nNB\nNBE\nnBitMask\nNE\nnear\nNear\nNEAR\nnearest\nnecessarily\nnecessary\nneed\nneeded\nNeeded\nneeding\nneeds\nNEG\nnegate\nNegate\nNegation\nnegative\nNEGATIVE\nneither\nNeither\nnested\nNested\nNESTED\nnesting\nnetwork\nnever\nNevertheless\nnew\nNew\nNEW\nnext\nNG\nNGE\nnibble\nnibbles\nNL\nNLE\nNM\nNMI\nNMIs\nNMls\nnnn\nno\nNo\nNO\nNoAdjust\nnon\nNon\nnonbusy\nnonconforming\nNONCONFORMING\nNonconventional\nnone\nNone\nnonetheless\nNonintegral\nnonmaskable\nNonmaskable\nnonmatching\nnonwritable\nnonzero\nnop\nNOP\nnor\nnormal\nnormally\nNormally\nnot\nNot\nNOT\nnotation\nnotational\nNotational\nnotations\nNote\nNOTE\nNotes\nNOTES\nnothing\nnotice\nnow\nNow\nNP\nNPX\nNS\nNT\nnull\nNULL\nnumber\nNumber\nNUMBER\nnumbered\nnumbers\nNumbers\nnumerator\nnumeric\nNumeric\nnumerical\nnumerically\nnumerics\nNZ\no\nO\nOb\nOB\nobject\nobjectives\nobjects\nobserve\nobserved\nobtain\nobtained\nobtains\nobvious\noccasions\noccupies\noccupy\noccur\noccurred\noccurrence\noccurrences\noccurs\nOD\nodd\nof\nOf\nOF\nofCR\noff\noffered\nofferings\noffers\noffice\noffices\noffset\nOffset\nOFFSET\noffsets\nOffsets\noften\nOK\nold\nOld\nOLD\nOlder\nomitting\non\nOn\nON\nonbyte\nonce\nOnce\nONCE\none\nOne\nones\nonly\nOnly\nONLY\nonto\nopcode\nOpcode\nOPCODE\nopcodes\nOpcodes\nOpenNET\noperand\nOperand\nOPERAND\nOperandMode\noperands\nOperands\nOPERANDS\nOperandSize\nOperant\noperate\nOPERATE\noperated\noperates\noperating\nOperating\noperation\nOperation\noperational\noperations\nOperations\noperators\nopportunity\nopposite\noptimization\noptimized\noptimizing\noptimum\noption\noptional\noptionally\noptions\nor\nOR\norder\nordering\nordinal\nOrdinal\nORDINAL\nordinarily\nOrdinarily\nordinary\norganization\nOrganization\norganized\noriented\norigin\noriginal\noriginally\noriginated\noriginates\nOS\nOsaka\nother\nOther\nOTHER\nothers\nOthers\notherwise\nOtherwise\nOTP\nour\nout\nOut\nOUT\nouter\nOuter\nOUTER\noutgoing\noutput\nOutput\nOUTS\nOUTSB\nOUTSD\noutside\nOUTSW\nOv\nover\novercome\noverflow\nOverflow\nOVERFLOW\noverhead\noverlap\noverlapped\noverlapping\nOverlapping\noverridden\noverride\nOVERRIDE\noverrides\nOverrides\noverriding\noverrun\nOverrun\noverview\nOverview\noverviews\noverwrite\noverwrites\noverwriting\noverwritten\nown\np\nP\npackage\npacked\nPacked\nPACKED\npadded\npage\nPage\nPAGE\npaged\npages\nPages\npaging\nPaging\nPAGING\npair\npairs\nPairs\nparagraphs\nparallel\nparameter\nParameter\nparameters\nParameters\nparceled\nparentheses\nParis\nparity\nParity\nPARITY\nPARM\npart\nPart\nPART\npartial\npartially\nPartially\nparticipating\nparticular\npartly\nparts\nParts\nPascal\npass\nPass\npassed\npasses\npast\npath\npaths\npattern\nPATTERN\nPC\nPDBR\nPDE\nPDEs\nPDPR\nPE\npenalty\npending\nper\nperfectly\nperform\nPerform\nperformance\nPerformance\nperformed\nPerformed\nperformI\nperforming\nperforms\nperiodically\nperipheral\npermissible\npermission\nPermission\nPERMISSION\npermit\nPermit\npermits\nPermits\npermitted\npermitting\npersonalizing\nperspective\nperspectives\npertains\nPF\nPG\nphase\nphases\nPhone\nphysical\nPhysical\nPHYSICAL\nPIC\npicture\npieces\npin\nPin\npinpointing\npins\nPipeline\nPL\nplace\nPlace\nplaced\nplaces\nplacing\nplanted\nPlug\nplus\npm\nPO\npoint\nPoint\nPOINT\npointed\npointer\nPointer\nPOINTER\npointers\nPointers\nPOINTERS\npointing\npoints\nPoints\npolicies\npop\nPop\nPOP\nPOPA\nPOPAD\nPOPF\nPOPFD\npopped\nPOPPED\npopping\nPopping\npops\nPOPS\nport\nPort\nported\nporting\nPorting\nportion\nportions\nports\nposition\nPOSITION\npositions\nPOSITIONS\npositive\nPOSITIVE\npossess\npossibilities\npossibility\npossible\npossibly\npotential\npound\npower\npractice\npreceded\npreceding\npreceeded\npreceeding\nprecise\nprecision\nPrecision\npredefined\npredetermined\npredictable\npredominant\npreferred\nprefetch\nprefetched\nprefetching\nprefix\nPrefix\nPREFIX\nprefixes\nPrefixes\nprepare\nPrepare\nprepares\npresence\nPRESENCE\npresent\nPresent\nPRESENT\npresents\nPresents\npreserve\npreserved\npreserves\nPRESERVES\npreserving\npresumably\nprevail\nprevent\nprevented\npreventing\nprevents\nPrevents\nprevious\nPREVIOUS\npreviously\nprimarily\nprimary\nprimitive\nprimitives\nprincipal\nprior\npriorities\npriority\nPriority\nprivilege\nPrivilege\nPRIVILEGE\nprivileged\nPrivileged\nprivileges\nprobably\nproblem\nproblems\nprocedure\nProcedure\nPROCEDURE\nprocedures\nProcedures\nproceed\nproceeds\nprocess\nprocessed\nprocessing\nprocessor\nProcessor\nprocessors\nproduce\nproduced\nproduces\nproducing\nproduct\nproduction\nproducts\nProducts\nprogram\nProgram\nPROGRAM\nProgrammable\nprogrammed\nProgrammed\nprogrammer\nProgrammer\nPROGRAMMER\nprogrammers\nProgrammers\nPROGRAMMERS\nprogramming\nProgramming\nPROGRAMMING\nprograms\nPrograms\nPROGRAMS\nprolog\nPROMPT\nPromware\nProoedure\nproper\nproperly\nproperties\nproperty\nprotect\nprotected\nProtected\nPROTECTED\nprotection\nProtection\nPROTECTION\nprotocol\nprovide\nprovided\nprovides\nproviding\npseudo\nPseudo\nPT\nPTE\nPTEs\nptr\nPtr\nPTR\nPUBLIC\nPulse\npurchases\npure\nPure\npurpose\nPurpose\npurposes\npush\nPush\nPUSH\nPUSHA\nPUSHAD\npushed\nPUSHED\npushes\nPUSHF\nPUSHFD\npushing\nput\nPut\nputs\nputting\npword\nPWORD\nquad\nQuad\nQuadword\nquantities\nquantity\nQUEST\nquestion\nqueue\nqueuing\nQueX\nquick\nQuick\nquickly\nquite\nQuo\nquotient\nQuotient\nquotients\nr\nR\nraise\nraised\nraises\nram\nRAM\nrange\nRange\nranges\nranging\nrapidly\nrate\nrather\nraw\nrb\nRCL\nRCR\nrd\nRd\nre\nreach\nreachable\nreaches\nreacts\nread\nRead\nREAD\nreadable\nREADABLE\nreading\nReading\nreads\nReads\nready\nreal\nReal\nREAL\nreality\nrearrange\nreason\nreasons\nrebinding\nreceipt\nreceive\nreceived\nreceives\nRECEIVES\nrecent\nrecently\nRECIEVES\nrecognition\nRecognition\nrecognize\nrecognized\nrecognizes\nrecommended\nrecord\nrecording\nrecords\nrecover\nrecovering\nredefines\nredirect\nrediscovered\nreduce\nreduces\nreducing\nredundant\nRedundant\nreenter\nreentered\nreenters\nreentrable\nreentrant\nreentry\nreexecuted\nrefer\nRefer\nreference\nReference\nREFERENCE\nreferenced\nreferences\nReferences\nreferencing\nreferred\nreferring\nReferring\nrefers\nreflect\nreflected\nReflecting\nreg\nReg\nREG\nregard\nregardless\nREGARDLESS\nregion\nregister\nRegister\nREGISTER\nregistered\nregisters\nRegisters\nREGISTERS\nregular\nregularly\nreimplement\nrel\nrelate\nrelated\nRelated\nrelates\nrelation\nrelational\nrelationship\nrelative\nrelease\nreleased\nreleases\nrelevance\nrelevant\nreliable\nrelink\nrelinking\nreload\nreloaded\nreloading\nrelocated\nrelocation\nRelocation\nRelOffset\nrely\nRem\nremain\nremainder\nRemainder\nremaining\nREMAINING\nremains\nremove\nremoved\nremoves\nREP\nrepair\nREPE\nrepeat\nRepeat\nrepeated\nRepeated\nrepeatedly\nrepetition\nrepetitions\nreplace\nreplaced\nreplaces\nreplacing\nREPNE\nREPNZ\nreport\nreported\nreporting\nreports\nreposition\nrepresent\nrepresentation\nrepresented\nrepresenting\nrepresents\nreproducible\nREPZ\nrequest\nrequested\nRequested\nrequestor\nRequestor\nREQUESTOR\nrequests\nrequire\nrequired\nrequirement\nrequirements\nrequires\nrequiring\nresembles\nreserve\nReserve\nreserved\nReserved\nRESERVED\nreserving\nreset\nReset\nRESET\nresets\nResetting\nreside\nresident\nresides\nresource\nresources\nrespective\nrespectively\nrespects\nrespond\nresponding\nresponds\nresponse\nresponses\nresponsibility\nresponsible\nrest\nrestart\nrestartable\nrestarted\nrestarting\nrestore\nrestored\nrestores\nrestoring\nRestoring\nrestricted\nRestricted\nrestricting\nRestricting\nrestriction\nRestriction\nrestrictions\nresult\nResult\nresulting\nresults\nresume\nResume\nRESUME\nresumed\nresumes\nresuming\nret\nRET\nretain\nretains\nretries\nretry\nretrying\nreturn\nReturn\nRETURN\nreturned\nreturning\nReturning\nreturns\nReturns\nreveal\nReveals\nreverse\nReverse\nreverses\nreview\nrevision\nRF\nright\nRight\nRIGHT\nrightmost\nrights\nRights\nRightSRC\nring\nrings\nRipplemode\nrisks\nRMX\nrobust\nROL\nROM\nROMcode\nROMmed\nroom\nROR\nrotate\nRotate\nrotated\nrotates\nRotates\nrotation\nRotterdam\nrounded\nrounding\nroutine\nroutines\nrow\nrows\nRPL\nrule\nRule\nrules\nRules\nrun\nrunaway\nrunning\nruns\nRUPI\nrw\nRw\nRW\nRWn\ns\nS\nsafely\nSAHF\nsake\nSAL\nsales\nsame\nSame\nSAME\nSan\nSanta\nSAR\nsatisfaction\nsatisfied\nsatisfies\nsatisfy\nsave\nSave\nsaved\nSaved\nsaves\nsaving\nSaving\nSBB\nSC\nSCAB\nscalar\nscale\nScale\nSCALE\nscaled\nScaled\nscaling\nscan\nScan\nscanned\nscanning\nscans\nSCAS\nSCASB\nSCASD\nSCASW\nSCAW\nscheduled\nscheduler\nschedulers\nSciences\nscope\nScrAddr\nscratch\nscript\nscripts\nScripts\nScrutinize\nSeamless\nsearch\nsecond\nSecond\nSECOND\nsection\nsections\nsee\nSee\nseen\nsees\nseg\nSEG\nSEGMEMT\nsegment\nSegment\nSEGMENT\nsegmentation\nSegmentation\nsegmented\nSegmented\nsegments\nSegments\nSEGMENTS\nSegReg\nseldom\nselect\nselected\nSelected\nSELECTED\nselecting\nselection\nSelection\nselective\nselectively\nSelectively\nselector\nSelector\nSELECTOR\nselectors\nSelectors\nselects\nSelects\nself\nsemantics\nSemantics\nsemaphore\nsemaphores\nsend\nsending\nsense\nsensitive\nSensitive\nseparate\nSeparate\nseparated\nseparately\nSeparately\nsequence\nsequences\nsequential\nSequential\nserially\nseries\nserve\nserves\nservice\nService\nserviced\nservices\nServices\nSERVICES\nservicing\nset\nSet\nSET\nSETA\nSETAE\nSETB\nSETBE\nSETC\nSETcc\nSETcond\nSETE\nSETG\nSETGE\nSETL\nSETLE\nSETNA\nSETNAE\nSETNB\nSETNBE\nSETNC\nSETNE\nSETNG\nSETNGE\nSETNL\nSETNLE\nSETNO\nSETNP\nSETNS\nSETNZ\nSETO\nSETP\nSETPE\nSETPO\nsets\nSets\nSETS\nsetting\nSetting\nsettings\nSETZ\nseveral\nSeveral\nsevere\nSF\nSGDT\nshare\nshared\nSHARED\nsharing\nSharing\nSheet\nshift\nShift\nShiftAmt\nshifted\nSHIFTED\nshifting\nshifts\nSHIFTS\nshl\nSHL\nSHLD\nshort\nShort\nSHORT\nshortened\nshould\nshowing\nshown\nshows\nShows\nSHR\nSHRD\nshut\nshutdown\nshuts\nsi\nSI\nSIB\nside\nSIDT\nsign\nSign\nSIGN\nsignal\nSignal\nsignalled\nsignals\nsigned\nSigned\nSignExtend\nsignificance\nsignificant\nSIGNIFICANT\nsignificantly\nsimilar\nsimilarly\nSimilarly\nsimple\nSimple\nsimpler\nsimplicity\nsimplification\nsimplified\nsimplifies\nsimplify\nsimply\nsimulate\nSimulate\nsimulated\nsimulating\nSimultaneous\nsimultaneously\nsince\nSince\nsingle\nSingle\nsite\nSITE\nsituation\nsix\nSix\nsixteen\nsize\nSize\nSIZE\nsizes\nskip\nSkip\nslash\nSLD\nSLDT\nslight\nslows\nsmall\nsmaller\nSmaller\nsmallest\nSMALLEST\nSMSW\nso\nsoftware\nSoftware\nSOFTWARE\nsold\nsole\nsolely\nsolution\nsolutions\nsolved\nsome\nSome\nsometimes\nSometimes\nsomewhat\nsophisticated\nsort\nSortware\nsource\nSource\nSOURCE\nsources\nSP\nspace\nSpace\nSPACE\nspaces\nSpaces\nspan\nspanned\nSpanning\nspans\nspecial\nSpecial\nSPECIAL\nspecialized\nspecific\nspecifically\nspecification\nspecifications\nspecified\nSPECIFIED\nspecifier\nspecifiers\nspecifies\nSpecifies\nspecify\nspecifying\nSpecifying\nspeed\nspooling\nspurious\nsqueezed\nSrc\nSRC\nSreg\nss\nSS\nstack\nStack\nSTACK\nStackAddrSize\nstacks\nStacks\nStackTop\nstandard\nStandard\nstart\nStart\nSTART\nstarted\nstarting\nstarts\nStarts\nstate\nState\nSTATE\nstatement\nstatements\nstates\nstatic\nstatically\nstatus\nStatus\nSTATUS\nSTC\nSTD\nstep\nStep\nstepped\nstepping\nSTEPPING\nsteps\nSTI\nstill\nStockholm\nstop\nStop\nstopped\nstops\nstorage\nSTORAGE\nstore\nStore\nstored\nstores\nSTORES\nstoring\nSTOS\nSTOSB\nSTOSD\nSTOSW\nSTR\nstrategies\nstrategy\nstream\nstrg\nstrictly\nstring\nString\nSTRING\nstrings\nStrings\nSTRUC\nstructure\nStructure\nSTRUCTURE\nstructured\nStructured\nstructures\nstudy\nstuff\nstyle\nstyles\nsub\nSub\nSUB\nSubcode\nsubject\nsubroutine\nSubroutine\nsubscript\nSubscript\nsubscription\nsubscripts\nsubsequent\nsubsequently\nsubset\nSubset\nsubsets\nsubspaces\nsubstituting\nsubstring\nsubsystem\nSUBTOTAL\nsubtract\nSubtract\nsubtracted\nsubtracting\nsubtraction\nSubtraction\nsubtracts\nsubunits\nsucceeding\nsuccessful\nsuccessfully\nsuch\nSuch\nsufficient\nsufficiently\nsuffix\nSugarCube\nsuits\nsum\nsummarize\nsummarized\nsummarizes\nsummary\nSummary\nsums\nsuper\nSuper\nSuperscript\nsupervisor\nSupervisor\nSUPERVISOR\nsupplied\nsupplier\nsupplies\nsupply\nsupplying\nsupport\nSupport\nsupported\nSupportNET\nsupports\nsuppose\nsure\nsurrounded\nSurveys\nsuspend\nsuspended\nsuspends\nSw\nSW\nswap\nSwap\nswaps\nswitch\nSwitch\nSWITCH\nswitched\nSwitched\nswitches\nSwitches\nswitching\nSwitching\nsymbol\nsymbolic\nsymbolically\nsymbols\nsynchronization\nsynchronous\nsynonym\nSYNONYM\nSynonymous\nsynonyms\nsyntax\nsystem\nSystem\nSYSTEM\nsystems\nSystems\nSYSTEMS\nt\nT\ntable\nTable\nTABLE\ntables\nTables\nTABLES\ntag\nTAG\ntags\nTags\ntailoring\ntake\ntaken\ntakes\ntaking\nTaking\ntarget\nTARGET\ntask\nTask\nTASK\ntasks\nTasks\nTASKS\nTBL\nTd\ntechnical\nTechnical\ntechnique\ntells\nTells\ntemp\nTemp\nTempEFlags\nTempESP\ntemplate\ntemporarily\ntemporary\nTempSS\ntempted\nten\nterabyte\nterabytes\nterminate\nterminated\nterminates\ntermination\nTermination\nterminology\nterms\ntest\nTest\nTEST\ntested\nTested\ntesting\nTesting\ntests\nTests\nTF\ntGDT\nTGDT\nth\nthan\nthat\nThat\nthe\nThe\nTHE\nthebit\ntheInterrupt\ntheir\nthem\nTHEM\nthemselves\nthen\nThen\nTHEN\ntheoretically\ntheory\ntherating\nthere\nThere\nthereafter\nthereby\ntherefore\nTherefore\nthese\nThese\nTHESE\nthey\nThey\nthings\nthird\nThird\nthis\nThis\nthose\nThose\nthough\nThough\nthousands\nthree\nThree\nthrough\nThrough\nthroughout\nthroughput\nthrow\nthrowaway\nthru\nthus\nThus\nTI\ntied\ntightly\ntime\ntimes\nTimes\ntiming\nTIPS\nTITLE\nTLB\nTM\ntmpcf\nto\nTo\nTO\ntogether\nTokyo\ntoo\ntook\ntools\ntop\nTop\nTOP\ntopics\ntopmost\nToronto\ntos\nTOS\ntotal\nTOTAL\ntoward\ntowards\nTR\ntrademark\ntrademarks\ntraining\nTraining\ntranscendental\ntransfer\nTransfer\ntransferred\ntransferring\nTransferring\ntransfers\nTransfers\ntransformation\ntransforms\nTransition\nTRANSITION\ntransitions\nTransitions\ntranslate\nTranslate\ntranslated\ntranslating\ntranslation\nTranslation\nTRANSLATION\ntranslations\ntransparent\ntransported\ntrap\nTrap\nTRAP\ntrapped\ntrapping\ntraps\nTraps\ntreat\ntreated\ntreats\ntrigger\ntriggered\ntriggers\nTRn\ntroubleshooting\ntrue\nTRUE\ntruncate\nTruncate\ntruncated\ntruncates\ntruncation\ntrusted\nTrusted\ntry\ntrying\nts\nTS\nTSS\nTSSs\nturn\nturned\ntwice\ntwo\nTwo\ntype\nType\nTYPE\ntypes\nTypes\ntypical\ntypically\nTypically\nu\nU\nUD\nunaffected\nunaligned\nunaltered\nunary\nUnary\nunassigned\nunauthorized\nunchanged\nUnchanged\nunconditional\nUnconditional\nunconditionally\nundefined\nUndefined\nUNDEFINED\nunder\nUnder\nunderlined\nunderstanding\nunequal\nuniform\nuninitialized\nuninterruptible\nunique\nUNIQUE\nuniquely\nunit\nunits\nUNIX\nunless\nunlike\nUnlike\nunlikely\nunmasked\nunmodified\nunpacked\nUnpacked\nunpacks\nunpredictability\nunpredictable\nunprivileged\nunprogrammed\nunprotected\nunrecognized\nunscrambled\nunsegmented\nunsigned\nUnsigned\nunspecified\nuntil\nUntil\nuntrusted\nunused\nUNUSED\nunwanted\nunwittingly\nup\nupdate\nUpdate\nupdated\nupdates\nupdating\nUpdating\nUPI\nupon\nUpon\nUPON\nupper\nUpper\nuppercase\nuppermost\nupward\nupwards\nUS\nusable\nusage\nUsage\nusages\nuse\nUse\nUSE\nused\nUsed\nUSED\nuseful\nUseful\nUSEl\nuser\nUser\nUSER\nusers\nuses\nusing\nUsing\nusual\nusually\nutilization\nutilize\nutilized\nUU\nuuuuuuuT\nuuuuuuuu\nv\nV\nVACATED\nval\nvalid\nValid\nvalidate\nvalidates\nvalidation\nValidation\nvalidity\nValidity\nvalue\nValue\nVALUE\nvalues\nValues\nVALUES\nvariable\nVariable\nvariables\nvariant\nvariants\nvariations\nvaries\nvariety\nvarious\nvariousconditions\nvary\nvector\nVector\nvectored\nVectoring\nvectors\nVerification\nverified\nverifies\nverify\nVerify\nverifying\nVERR\nVERRW\nversa\nversed\nversion\nversions\nVERW\nvery\nvia\nVia\nvice\nview\nviewed\nviolate\nviolated\nviolates\nViolating\nviolation\nviolations\nvirtual\nVirtual\nVIRTUAL\nvirtualized\nVirtualizing\nvisible\nVISIBLE\nVLSiCEL\nVM\nw\nW\nwait\nWait\nWAIT\nwaiting\nWaits\nwant\nwarranty\nwas\nWashington\nway\nways\nWays\nwe\nweakened\nweeks\nwell\nwere\nwhat\nwhatever\nwhen\nWhen\nWHEN\nwhenever\nwhere\nwhereas\nwhether\nWhether\nwhich\nWHICH\nwhile\nWhile\nWHILE\nwho\nwhole\nwholly\nwhose\nWhy\nwide\nwidth\nwill\nwise\nwish\nwith\nWith\nWITH\nwithin\nwithout\nWithout\nWITHOUT\nWn\nword\nWord\nWORD\nWordCnt\nwords\nWords\nworidwide\nwork\nWorking\nworkshop\nworkshops\nworldwide\nworse\nwould\nwrap\nwraparound\nWraparound\nwrapping\nwraps\nwritability\nwritable\nWritable\nWRITABLE\nwrite\nWrite\nWRITE\nWriter\nwrites\nWrites\nwriting\nWriting\nwritten\nwrong\nx\nX\nXb\nXCHG\nXCNG\nxero\nXLAT\nXLATB\nxor\nXOR\nXORed\nXv\nxx\nY\nYb\nYes\nYES\nyet\nyield\nyou\nYou\nyour\nYv\nZ\nzero\nZero\nZERO\nZeroExtend\nzeros\nZEROS\nZF\nZz\n"
  },
  {
    "path": "benchmarks/shared/Cargo.toml",
    "content": "[package]\nname = \"shared\"\nversion = \"0.1.0\"\nedition = \"2021\"\n\n[workspace]\n\n[dependencies]\nanyhow = \"1.0.69\"\nbstr = { version = \"1.6.0\", default-features = false, features = [\"std\"] }\n\n[lib]\nname = \"shared\"\npath = \"lib.rs\"\n"
  },
  {
    "path": "benchmarks/shared/lib.rs",
    "content": "use std::{\n    io::Read,\n    time::{Duration, Instant},\n};\n\nuse {\n    anyhow::Context,\n    bstr::{ByteSlice, ByteVec},\n};\n\n/// A single benchmark configuration read from a sequence of KLV items on\n/// stdin.\n#[derive(Clone, Debug, Default)]\npub struct Benchmark {\n    pub name: String,\n    pub model: String,\n    pub needles: Vec<Vec<u8>>,\n    pub haystack: Vec<u8>,\n    pub max_iters: u64,\n    pub max_warmup_iters: u64,\n    pub max_time: Duration,\n    pub max_warmup_time: Duration,\n}\n\nimpl Benchmark {\n    /// Read the KLV benchmark configuration from stdin.\n    pub fn from_stdin() -> anyhow::Result<Benchmark> {\n        let mut raw = vec![];\n        std::io::stdin().read_to_end(&mut raw)?;\n        Benchmark::read(&raw)\n    }\n\n    /// Return a single needle from this benchmark. If the benchmark has no\n    /// needles or more than one, then an error is returned.\n    pub fn one_needle(&self) -> anyhow::Result<&[u8]> {\n        anyhow::ensure!(\n            self.needles.len() == 1,\n            \"benchmark only supports one needle, but {} were found\",\n            self.needles.len(),\n        );\n        Ok(&self.needles[0])\n    }\n\n    /// Return a single needle byte from this benchmark. If the benchmark has\n    /// no needles or more than one, then an error is returned. An error is\n    /// also returned if the single needle a length not equal to 1.\n    pub fn one_needle_byte(&self) -> anyhow::Result<u8> {\n        anyhow::ensure!(\n            self.needles.len() == 1,\n            \"benchmark only supports one needle, but {} were found\",\n            self.needles.len(),\n        );\n        anyhow::ensure!(\n            self.needles[0].len() == 1,\n            \"needle must have length 1 (in bytes) but it has length {}\",\n            self.needles[0].len(),\n        );\n        Ok(self.needles[0][0])\n    }\n\n    /// Return a single needle byte from this benchmark. If the benchmark has\n    /// a number of needles not equal to 2, or if any of the needles have a\n    /// length not equal to 1, then an error is returned.\n    pub fn two_needle_bytes(&self) -> anyhow::Result<(u8, u8)> {\n        anyhow::ensure!(\n            self.needles.len() == 2,\n            \"benchmark supports two needles, but {} were found\",\n            self.needles.len(),\n        );\n        anyhow::ensure!(\n            self.needles[0].len() == 1,\n            \"first needle has length {} but expected 1\",\n            self.needles[0].len(),\n        );\n        anyhow::ensure!(\n            self.needles[1].len() == 1,\n            \"second needle has length {} but expected 1\",\n            self.needles[1].len(),\n        );\n        Ok((self.needles[0][0], self.needles[1][0]))\n    }\n\n    /// Return a single needle byte from this benchmark. If the benchmark has\n    /// a number of needles not equal to 2, or if any of the needles have a\n    /// length not equal to 1, then an error is returned.\n    pub fn three_needle_bytes(&self) -> anyhow::Result<(u8, u8, u8)> {\n        anyhow::ensure!(\n            self.needles.len() == 3,\n            \"benchmark supports three needles, but {} were found\",\n            self.needles.len(),\n        );\n        anyhow::ensure!(\n            self.needles[0].len() == 1,\n            \"first needle has length {} but expected 1\",\n            self.needles[0].len(),\n        );\n        anyhow::ensure!(\n            self.needles[1].len() == 1,\n            \"second needle has length {} but expected 1\",\n            self.needles[1].len(),\n        );\n        anyhow::ensure!(\n            self.needles[2].len() == 1,\n            \"second needle has length {} but expected 1\",\n            self.needles[2].len(),\n        );\n        Ok((self.needles[0][0], self.needles[1][0], self.needles[2][0]))\n    }\n\n    fn read(mut raw: &[u8]) -> anyhow::Result<Benchmark> {\n        let mut config = Benchmark::default();\n        while !raw.is_empty() {\n            let (klv, nread) = OneKLV::read(raw)?;\n            raw = &raw[nread..];\n            config.set(klv)?;\n        }\n        Ok(config)\n    }\n\n    fn set(&mut self, klv: OneKLV) -> anyhow::Result<()> {\n        let parse_duration = |v: &str| -> anyhow::Result<Duration> {\n            Ok(Duration::from_nanos(v.parse()?))\n        };\n        let OneKLV { key, value } = klv;\n        match &*key {\n            \"name\" => self.name = value.to_str()?.to_string(),\n            \"model\" => self.model = value.to_str()?.to_string(),\n            \"pattern\" => {\n                self.needles.push(Vec::unescape_bytes(value.to_str()?))\n            }\n            \"haystack\" => self.haystack = value.to_vec(),\n            \"max-iters\" => self.max_iters = value.to_str()?.parse()?,\n            \"max-warmup-iters\" => {\n                self.max_warmup_iters = value.to_str()?.parse()?\n            }\n            \"max-time\" => self.max_time = parse_duration(value.to_str()?)?,\n            \"max-warmup-time\" => {\n                self.max_warmup_time = parse_duration(value.to_str()?)?\n            }\n            _ => {}\n        }\n        Ok(())\n    }\n}\n\n#[derive(Clone, Debug)]\nstruct OneKLV {\n    key: String,\n    value: Vec<u8>,\n}\n\nimpl OneKLV {\n    fn read(bytes: &[u8]) -> anyhow::Result<(OneKLV, usize)> {\n        let mut nread = 0;\n        let (key, bytes) = match bytes.split_once_str(\":\") {\n            Some(x) => x,\n            None => anyhow::bail!(\n                \"failed to find first ':' in key-length-value item \\\n                 where the next (at most) 80 bytes are: {:?}\",\n                bytes[..std::cmp::min(80, bytes.len())].as_bstr(),\n            ),\n        };\n        nread += key.len() + 1; // +1 for ':'\n        let key = key\n            .to_str()\n            .with_context(|| {\n                format!(\"key {:?} is not valid UTF-8\", key.as_bstr())\n            })?\n            .to_string();\n\n        let (len, bytes) = match bytes.split_once_str(\":\") {\n            Some(x) => x,\n            None => anyhow::bail!(\n                \"failed to find second ':' in key-length-value item \\\n                 for key '{}'\",\n                key,\n            ),\n        };\n        nread += len.len() + 1; // +1 for ':'\n        let len = len.to_str().with_context(|| {\n            format!(\"length for key '{}' is not valid UTF-8\", key)\n        })?;\n        let len = len.parse::<usize>().with_context(|| {\n            format!(\n                \"length '{}' for key '{}' is not a valid integer\",\n                len, key,\n            )\n        })?;\n\n        anyhow::ensure!(\n            bytes.len() >= len,\n            \"got length of {} for key '{}', but only {} bytes remain\",\n            len,\n            key,\n            bytes.len(),\n        );\n        let value = bytes[..len].into();\n        let bytes = &bytes[len..];\n        nread += len;\n\n        anyhow::ensure!(\n            bytes.len() >= 1,\n            \"expected trailing '\\\\n' after value, but got EOF\",\n        );\n        anyhow::ensure!(\n            bytes[0] == b'\\n',\n            \"expected '\\\\n' after value, but got {:?}\",\n            bytes[0..1].as_bstr(),\n        );\n        nread += 1;\n\n        let klv = OneKLV { key, value };\n        Ok((klv, nread))\n    }\n}\n\n/// A sample computed from a single benchmark iteration.\n#[derive(Clone, Debug)]\npub struct Sample {\n    /// The duration of the iteration.\n    pub duration: Duration,\n    /// The count reported by the benchmark. This is used by the harness to\n    /// verify that the result is correct.\n    ///\n    /// All benchmark models except for regex-redux use this. For regex-redux,\n    /// it is always zero.\n    pub count: u64,\n}\n\n/// Run the given `bench` function repeatedly until either the maximum\n/// time or number of iterations has been reached and return the set of\n/// samples.\npub fn run(\n    b: &Benchmark,\n    bench: impl FnMut() -> anyhow::Result<usize>,\n) -> anyhow::Result<Vec<Sample>> {\n    run_and_count(b, |count| Ok(count), bench)\n}\n\n/// Run the given `bench` function repeatedly until either the maximum\n/// time or number of iterations has been reached and return the set of\n/// samples. The count for each sample is determined by running `count` on\n/// the result of `bench`. The execution time of `count` is specifically\n/// not included in the sample's duration.\n///\n/// N.B. This variant only exists for the 'compile' model. We want to only\n/// measure compile time, but still do extra work that we specifically\n/// don't measure to produce a count to ensure the compile regex behaves as\n/// expected.\npub fn run_and_count<T>(\n    b: &Benchmark,\n    mut count: impl FnMut(T) -> anyhow::Result<usize>,\n    mut bench: impl FnMut() -> anyhow::Result<T>,\n) -> anyhow::Result<Vec<Sample>> {\n    let warmup_start = Instant::now();\n    for _ in 0..b.max_warmup_iters {\n        let result = bench();\n        // We still compute the count in case there was a problem doing so,\n        // even though we don't do anything with the count.\n        let _count = count(result?)?;\n        if warmup_start.elapsed() >= b.max_warmup_time {\n            break;\n        }\n    }\n\n    let mut samples = vec![];\n    let run_start = Instant::now();\n    for _ in 0..b.max_iters {\n        let bench_start = Instant::now();\n        let result = bench();\n        let duration = bench_start.elapsed();\n        // Should be fine since it's unreasonable for a match count to\n        // exceed u64::MAX.\n        let count = u64::try_from(count(result?)?).unwrap();\n        samples.push(Sample { duration, count });\n        if run_start.elapsed() >= b.max_time {\n            break;\n        }\n    }\n    Ok(samples)\n}\n\npub fn count_memchr(\n    mut haystack: &[u8],\n    needle: u8,\n    memchr: impl Fn(&[u8], u8) -> Option<usize>,\n) -> usize {\n    let mut count = 0;\n    while let Some(i) = memchr(haystack, needle) {\n        count += 1;\n        haystack = &haystack[i + 1..];\n    }\n    count\n}\n\npub fn count_memchr2(\n    mut haystack: &[u8],\n    needle1: u8,\n    needle2: u8,\n    memchr2: impl Fn(&[u8], u8, u8) -> Option<usize>,\n) -> usize {\n    let mut count = 0;\n    while let Some(i) = memchr2(haystack, needle1, needle2) {\n        count += 1;\n        haystack = &haystack[i + 1..];\n    }\n    count\n}\n\npub fn count_memchr3(\n    mut haystack: &[u8],\n    needle1: u8,\n    needle2: u8,\n    needle3: u8,\n    memchr3: impl Fn(&[u8], u8, u8, u8) -> Option<usize>,\n) -> usize {\n    let mut count = 0;\n    while let Some(i) = memchr3(haystack, needle1, needle2, needle3) {\n        count += 1;\n        haystack = &haystack[i + 1..];\n    }\n    count\n}\n\npub fn count_memmem(\n    mut haystack: &[u8],\n    needle: &[u8],\n    memmem: impl Fn(&[u8], &[u8]) -> Option<usize>,\n) -> usize {\n    let mut count = 0;\n    while let Some(i) = memmem(haystack, needle) {\n        count += 1;\n        haystack = match haystack.get(i + needle.len()..) {\n            Some(haystack) => haystack,\n            None => break,\n        };\n    }\n    count\n}\n\npub fn count_memmem_str(\n    mut haystack: &str,\n    needle: &str,\n    memmem: impl Fn(&str, &str) -> Option<usize>,\n) -> usize {\n    let mut count = 0;\n    while let Some(i) = memmem(haystack, needle) {\n        count += 1;\n        haystack = match haystack.get(i + needle.len()..) {\n            Some(haystack) => haystack,\n            None => break,\n        };\n    }\n    count\n}\n"
  },
  {
    "path": "fuzz/.gitignore",
    "content": "/target\n/corpus\n/artifacts\n/coverage\n"
  },
  {
    "path": "fuzz/Cargo.toml",
    "content": "cargo-features = ['named-profiles']\n\n[package]\npublish = false\nname = \"memchr-fuzz\"\nversion = \"0.0.0\"\nauthors = [\"Andrew Gallant <jamslam@gmail.com>\"]\nedition = \"2018\"\n\n[package.metadata]\ncargo-fuzz = true\n\n[dependencies]\nlibfuzzer-sys = \"0.4\"\n\n[dependencies.memchr]\npath = \"..\"\n\n# Prevent this from interfering with workspaces\n[workspace]\n\n[[bin]]\nname = \"memchr\"\npath = \"fuzz_targets/memchr.rs\"\ntest = false\ndoc = false\n\n[[bin]]\nname = \"memchr2\"\npath = \"fuzz_targets/memchr2.rs\"\ntest = false\ndoc = false\n\n[[bin]]\nname = \"memchr3\"\npath = \"fuzz_targets/memchr3.rs\"\ntest = false\ndoc = false\n\n[[bin]]\nname = \"memrchr\"\npath = \"fuzz_targets/memrchr.rs\"\ntest = false\ndoc = false\n\n[[bin]]\nname = \"memrchr2\"\npath = \"fuzz_targets/memrchr2.rs\"\ntest = false\ndoc = false\n\n[[bin]]\nname = \"memrchr3\"\npath = \"fuzz_targets/memrchr3.rs\"\ntest = false\ndoc = false\n\n[[bin]]\nname = \"memmem\"\npath = \"fuzz_targets/memmem.rs\"\ntest = false\ndoc = false\n\n[[bin]]\nname = \"memrmem\"\npath = \"fuzz_targets/memrmem.rs\"\ntest = false\ndoc = false\n\n[profile.release]\nopt-level = 3\ndebug = true\n\n[profile.dev]\nopt-level = 3\ndebug = true\n\n[profile.test]\nopt-level = 3\ndebug = true\n"
  },
  {
    "path": "fuzz/fuzz_targets/memchr.rs",
    "content": "#![no_main]\n\nuse libfuzzer_sys::fuzz_target;\nuse memchr::memchr_iter;\n\nfuzz_target!(|data: &[u8]| {\n    if data.is_empty() {\n        return;\n    }\n    memchr_iter(data[0], &data[1..]).count();\n});\n"
  },
  {
    "path": "fuzz/fuzz_targets/memchr2.rs",
    "content": "#![no_main]\n\nuse libfuzzer_sys::fuzz_target;\nuse memchr::memchr2_iter;\n\nfuzz_target!(|data: &[u8]| {\n    if data.len() < 2 {\n        return;\n    }\n    memchr2_iter(data[0], data[1], &data[2..]).count();\n});\n"
  },
  {
    "path": "fuzz/fuzz_targets/memchr3.rs",
    "content": "#![no_main]\n\nuse libfuzzer_sys::fuzz_target;\nuse memchr::memchr3_iter;\n\nfuzz_target!(|data: &[u8]| {\n    if data.len() < 3 {\n        return;\n    }\n    memchr3_iter(data[0], data[1], data[2], &data[3..]).count();\n});\n"
  },
  {
    "path": "fuzz/fuzz_targets/memmem.rs",
    "content": "#![no_main]\n\nuse libfuzzer_sys::fuzz_target;\nuse memchr::memmem;\n\nfuzz_target!(|data: &[u8]| {\n    if data.len() < 2 {\n        return;\n    }\n    let split = std::cmp::max(data[0] as usize, 1) % data.len() as usize;\n    let (needle, haystack) = (&data[..split], &data[split..]);\n    memmem::find_iter(haystack, needle).count();\n});\n"
  },
  {
    "path": "fuzz/fuzz_targets/memrchr.rs",
    "content": "#![no_main]\n\nuse libfuzzer_sys::fuzz_target;\nuse memchr::memchr_iter;\n\nfuzz_target!(|data: &[u8]| {\n    if data.is_empty() {\n        return;\n    }\n    memchr_iter(data[0], &data[1..]).rev().count();\n});\n"
  },
  {
    "path": "fuzz/fuzz_targets/memrchr2.rs",
    "content": "#![no_main]\n\nuse libfuzzer_sys::fuzz_target;\nuse memchr::memchr2_iter;\n\nfuzz_target!(|data: &[u8]| {\n    if data.len() < 2 {\n        return;\n    }\n    memchr2_iter(data[0], data[1], &data[2..]).rev().count();\n});\n"
  },
  {
    "path": "fuzz/fuzz_targets/memrchr3.rs",
    "content": "#![no_main]\n\nuse libfuzzer_sys::fuzz_target;\nuse memchr::memchr3_iter;\n\nfuzz_target!(|data: &[u8]| {\n    if data.len() < 3 {\n        return;\n    }\n    memchr3_iter(data[0], data[1], data[2], &data[3..]).rev().count();\n});\n"
  },
  {
    "path": "fuzz/fuzz_targets/memrmem.rs",
    "content": "#![no_main]\n\nuse libfuzzer_sys::fuzz_target;\nuse memchr::memmem;\n\nfuzz_target!(|data: &[u8]| {\n    if data.len() < 2 {\n        return;\n    }\n    let split = std::cmp::max(data[0] as usize, 1) % data.len() as usize;\n    let (needle, haystack) = (&data[..split], &data[split..]);\n    memmem::rfind_iter(haystack, needle).count();\n});\n"
  },
  {
    "path": "rustfmt.toml",
    "content": "max_width = 79\nuse_small_heuristics = \"max\"\n"
  },
  {
    "path": "scripts/make-byte-frequency-table",
    "content": "#!/usr/bin/env python\n\n# This does simple normalized frequency analysis on UTF-8 encoded text. The\n# result of the analysis is translated to a ranked list, where every byte is\n# assigned a rank. This list is written to src/freqs.rs.\n#\n# Currently, the frequencies are generated from the following corpuses:\n#\n#   * The CIA world fact book\n#   * The source code of rustc\n#   * Septuaginta\n\nfrom __future__ import absolute_import, division, print_function\n\nimport argparse\nfrom collections import Counter\nimport sys\n\npreamble = '''\n// NOTE: The following code was generated by \"scripts/frequencies.py\", do not\n// edit directly\n'''.lstrip()\n\n\ndef eprint(*args, **kwargs):\n    kwargs['file'] = sys.stderr\n    print(*args, **kwargs)\n\n\ndef main():\n    p = argparse.ArgumentParser()\n    p.add_argument('corpus', metavar='FILE', nargs='+')\n    args = p.parse_args()\n\n    # Get frequency counts of each byte.\n    freqs = Counter()\n    for i in range(0, 256):\n        freqs[i] = 0\n\n    eprint('reading entire corpus into memory')\n    corpus = []\n    for fpath in args.corpus:\n        corpus.append(open(fpath, 'rb').read())\n\n    eprint('computing byte frequencies')\n    for c in corpus:\n        for byte in c:\n            freqs[byte] += 1.0 / float(len(c))\n\n    eprint('writing Rust code')\n    # Get the rank of each byte. A lower rank => lower relative frequency.\n    rank = [0] * 256\n    for i, (byte, _) in enumerate(freqs.most_common()):\n        # print(byte)\n        rank[byte] = 255 - i\n\n    # Forcefully set the highest rank possible for bytes that start multi-byte\n    # UTF-8 sequences. The idea here is that a continuation byte will be more\n    # discerning in a homogenous haystack.\n    for byte in range(0xC0, 0xFF + 1):\n        rank[byte] = 255\n\n    # Now write Rust.\n    olines = ['pub const BYTE_FREQUENCIES: [u8; 256] = [']\n    for byte in range(256):\n        olines.append('    %3d, // %r' % (rank[byte], chr(byte)))\n    olines.append('];')\n\n    print(preamble)\n    print('\\n'.join(olines))\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "src/arch/aarch64/memchr.rs",
    "content": "/*!\nWrapper routines for `memchr` and friends.\n\nThese routines choose the best implementation at compile time. (This is\ndifferent from `x86_64` because it is expected that `neon` is almost always\navailable for `aarch64` targets.)\n*/\n\nmacro_rules! defraw {\n    ($ty:ident, $find:ident, $start:ident, $end:ident, $($needles:ident),+) => {{\n        #[cfg(target_feature = \"neon\")]\n        {\n            use crate::arch::aarch64::neon::memchr::$ty;\n\n            debug!(\"chose neon for {}\", stringify!($ty));\n            debug_assert!($ty::is_available());\n            // SAFETY: We know that wasm memchr is always available whenever\n            // code is compiled for `aarch64` with the `neon` target feature\n            // enabled.\n            $ty::new_unchecked($($needles),+).$find($start, $end)\n        }\n        #[cfg(not(target_feature = \"neon\"))]\n        {\n            use crate::arch::all::memchr::$ty;\n\n            debug!(\n                \"no neon feature available, using fallback for {}\",\n                stringify!($ty),\n            );\n            $ty::new($($needles),+).$find($start, $end)\n        }\n    }}\n}\n\n/// memchr, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `One::find_raw`.\n#[inline(always)]\npub(crate) unsafe fn memchr_raw(\n    n1: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    defraw!(One, find_raw, start, end, n1)\n}\n\n/// memrchr, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `One::rfind_raw`.\n#[inline(always)]\npub(crate) unsafe fn memrchr_raw(\n    n1: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    defraw!(One, rfind_raw, start, end, n1)\n}\n\n/// memchr2, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `Two::find_raw`.\n#[inline(always)]\npub(crate) unsafe fn memchr2_raw(\n    n1: u8,\n    n2: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    defraw!(Two, find_raw, start, end, n1, n2)\n}\n\n/// memrchr2, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `Two::rfind_raw`.\n#[inline(always)]\npub(crate) unsafe fn memrchr2_raw(\n    n1: u8,\n    n2: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    defraw!(Two, rfind_raw, start, end, n1, n2)\n}\n\n/// memchr3, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `Three::find_raw`.\n#[inline(always)]\npub(crate) unsafe fn memchr3_raw(\n    n1: u8,\n    n2: u8,\n    n3: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    defraw!(Three, find_raw, start, end, n1, n2, n3)\n}\n\n/// memrchr3, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `Three::rfind_raw`.\n#[inline(always)]\npub(crate) unsafe fn memrchr3_raw(\n    n1: u8,\n    n2: u8,\n    n3: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    defraw!(Three, rfind_raw, start, end, n1, n2, n3)\n}\n\n/// Count all matching bytes, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `One::count_raw`.\n#[inline(always)]\npub(crate) unsafe fn count_raw(\n    n1: u8,\n    start: *const u8,\n    end: *const u8,\n) -> usize {\n    defraw!(One, count_raw, start, end, n1)\n}\n"
  },
  {
    "path": "src/arch/aarch64/mod.rs",
    "content": "/*!\nVector algorithms for the `aarch64` target.\n*/\n\npub mod neon;\n\npub(crate) mod memchr;\n"
  },
  {
    "path": "src/arch/aarch64/neon/memchr.rs",
    "content": "/*!\nThis module defines 128-bit vector implementations of `memchr` and friends.\n\nThe main types in this module are [`One`], [`Two`] and [`Three`]. They are for\nsearching for one, two or three distinct bytes, respectively, in a haystack.\nEach type also has corresponding double ended iterators. These searchers are\ntypically much faster than scalar routines accomplishing the same task.\n\nThe `One` searcher also provides a [`One::count`] routine for efficiently\ncounting the number of times a single byte occurs in a haystack. This is\nuseful, for example, for counting the number of lines in a haystack. This\nroutine exists because it is usually faster, especially with a high match\ncount, then using [`One::find`] repeatedly. ([`OneIter`] specializes its\n`Iterator::count` implementation to use this routine.)\n\nOnly one, two and three bytes are supported because three bytes is about\nthe point where one sees diminishing returns. Beyond this point and it's\nprobably (but not necessarily) better to just use a simple `[bool; 256]` array\nor similar. However, it depends mightily on the specific work-load and the\nexpected match frequency.\n*/\n\nuse core::arch::aarch64::uint8x16_t;\n\nuse crate::{arch::generic::memchr as generic, ext::Pointer, vector::Vector};\n\n/// Finds all occurrences of a single byte in a haystack.\n#[derive(Clone, Copy, Debug)]\npub struct One(generic::One<uint8x16_t>);\n\nimpl One {\n    /// Create a new searcher that finds occurrences of the needle byte given.\n    ///\n    /// This particular searcher is specialized to use neon vector instructions\n    /// that typically make it quite fast.\n    ///\n    /// If neon is unavailable in the current environment, then `None` is\n    /// returned.\n    #[inline]\n    pub fn new(needle: u8) -> Option<One> {\n        if One::is_available() {\n            // SAFETY: we check that neon is available above.\n            unsafe { Some(One::new_unchecked(needle)) }\n        } else {\n            None\n        }\n    }\n\n    /// Create a new finder specific to neon vectors and routines without\n    /// checking that neon is available.\n    ///\n    /// # Safety\n    ///\n    /// Callers must guarantee that it is safe to execute `neon` instructions\n    /// in the current environment.\n    ///\n    /// Note that it is a common misconception that if one compiles for an\n    /// `x86_64` target, then they therefore automatically have access to neon\n    /// instructions. While this is almost always the case, it isn't true in\n    /// 100% of cases.\n    #[target_feature(enable = \"neon\")]\n    #[inline]\n    pub unsafe fn new_unchecked(needle: u8) -> One {\n        One(generic::One::new(needle))\n    }\n\n    /// Returns true when this implementation is available in the current\n    /// environment.\n    ///\n    /// When this is true, it is guaranteed that [`One::new`] will return\n    /// a `Some` value. Similarly, when it is false, it is guaranteed that\n    /// `One::new` will return a `None` value.\n    ///\n    /// Note also that for the lifetime of a single program, if this returns\n    /// true then it will always return true.\n    #[inline]\n    pub fn is_available() -> bool {\n        #[cfg(target_feature = \"neon\")]\n        {\n            true\n        }\n        #[cfg(not(target_feature = \"neon\"))]\n        {\n            false\n        }\n    }\n\n    /// Return the first occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn find(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `find_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.find_raw(s, e)\n            })\n        }\n    }\n\n    /// Return the last occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn rfind(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `rfind_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.rfind_raw(s, e)\n            })\n        }\n    }\n\n    /// Counts all occurrences of this byte in the given haystack.\n    #[inline]\n    pub fn count(&self, haystack: &[u8]) -> usize {\n        // SAFETY: All of our pointers are derived directly from a borrowed\n        // slice, which is guaranteed to be valid.\n        unsafe {\n            let start = haystack.as_ptr();\n            let end = start.add(haystack.len());\n            self.count_raw(start, end)\n        }\n    }\n\n    /// Like `find`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn find_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        if end.distance(start) < uint8x16_t::BYTES {\n            // SAFETY: We require the caller to pass valid start/end pointers.\n            return generic::fwd_byte_by_byte(start, end, |b| {\n                b == self.0.needle1()\n            });\n        }\n        // SAFETY: Building a `One` means it's safe to call 'neon' routines.\n        // Also, we've checked that our haystack is big enough to run on the\n        // vector routine. Pointer validity is caller's responsibility.\n        self.find_raw_impl(start, end)\n    }\n\n    /// Like `rfind`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn rfind_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        if end.distance(start) < uint8x16_t::BYTES {\n            // SAFETY: We require the caller to pass valid start/end pointers.\n            return generic::rev_byte_by_byte(start, end, |b| {\n                b == self.0.needle1()\n            });\n        }\n        // SAFETY: Building a `One` means it's safe to call 'neon' routines.\n        // Also, we've checked that our haystack is big enough to run on the\n        // vector routine. Pointer validity is caller's responsibility.\n        self.rfind_raw_impl(start, end)\n    }\n\n    /// Like `count`, but accepts and returns raw pointers.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn count_raw(&self, start: *const u8, end: *const u8) -> usize {\n        if start >= end {\n            return 0;\n        }\n        if end.distance(start) < uint8x16_t::BYTES {\n            // SAFETY: We require the caller to pass valid start/end pointers.\n            return generic::count_byte_by_byte(start, end, |b| {\n                b == self.0.needle1()\n            });\n        }\n        // SAFETY: Building a `One` means it's safe to call 'neon' routines.\n        // Also, we've checked that our haystack is big enough to run on the\n        // vector routine. Pointer validity is caller's responsibility.\n        self.count_raw_impl(start, end)\n    }\n\n    /// Execute a search using neon vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`One::find_raw`], except the distance between `start` and\n    /// `end` must be at least the size of a neon vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `One`, which can only be constructed\n    /// when it is safe to call `neon` routines.)\n    #[target_feature(enable = \"neon\")]\n    #[inline]\n    unsafe fn find_raw_impl(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.0.find_raw(start, end)\n    }\n\n    /// Execute a search using neon vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`One::rfind_raw`], except the distance between `start` and\n    /// `end` must be at least the size of a neon vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `One`, which can only be constructed\n    /// when it is safe to call `neon` routines.)\n    #[target_feature(enable = \"neon\")]\n    #[inline]\n    unsafe fn rfind_raw_impl(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.0.rfind_raw(start, end)\n    }\n\n    /// Execute a count using neon vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`One::count_raw`], except the distance between `start` and\n    /// `end` must be at least the size of a neon vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `One`, which can only be constructed\n    /// when it is safe to call `neon` routines.)\n    #[target_feature(enable = \"neon\")]\n    #[inline]\n    unsafe fn count_raw_impl(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> usize {\n        self.0.count_raw(start, end)\n    }\n\n    /// Returns an iterator over all occurrences of the needle byte in the\n    /// given haystack.\n    ///\n    /// The iterator returned implements `DoubleEndedIterator`. This means it\n    /// can also be used to find occurrences in reverse order.\n    #[inline]\n    pub fn iter<'a, 'h>(&'a self, haystack: &'h [u8]) -> OneIter<'a, 'h> {\n        OneIter { searcher: self, it: generic::Iter::new(haystack) }\n    }\n}\n\n/// An iterator over all occurrences of a single byte in a haystack.\n///\n/// This iterator implements `DoubleEndedIterator`, which means it can also be\n/// used to find occurrences in reverse order.\n///\n/// This iterator is created by the [`One::iter`] method.\n///\n/// The lifetime parameters are as follows:\n///\n/// * `'a` refers to the lifetime of the underlying [`One`] searcher.\n/// * `'h` refers to the lifetime of the haystack being searched.\n#[derive(Clone, Debug)]\npub struct OneIter<'a, 'h> {\n    searcher: &'a One,\n    it: generic::Iter<'h>,\n}\n\nimpl<'a, 'h> Iterator for OneIter<'a, 'h> {\n    type Item = usize;\n\n    #[inline]\n    fn next(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'find_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next(|s, e| self.searcher.find_raw(s, e)) }\n    }\n\n    #[inline]\n    fn count(self) -> usize {\n        self.it.count(|s, e| {\n            // SAFETY: We rely on our generic iterator to return valid start\n            // and end pointers.\n            unsafe { self.searcher.count_raw(s, e) }\n        })\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.it.size_hint()\n    }\n}\n\nimpl<'a, 'h> DoubleEndedIterator for OneIter<'a, 'h> {\n    #[inline]\n    fn next_back(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'rfind_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next_back(|s, e| self.searcher.rfind_raw(s, e)) }\n    }\n}\n\nimpl<'a, 'h> core::iter::FusedIterator for OneIter<'a, 'h> {}\n\n/// Finds all occurrences of two bytes in a haystack.\n///\n/// That is, this reports matches of one of two possible bytes. For example,\n/// searching for `a` or `b` in `afoobar` would report matches at offsets `0`,\n/// `4` and `5`.\n#[derive(Clone, Copy, Debug)]\npub struct Two(generic::Two<uint8x16_t>);\n\nimpl Two {\n    /// Create a new searcher that finds occurrences of the needle bytes given.\n    ///\n    /// This particular searcher is specialized to use neon vector instructions\n    /// that typically make it quite fast.\n    ///\n    /// If neon is unavailable in the current environment, then `None` is\n    /// returned.\n    #[inline]\n    pub fn new(needle1: u8, needle2: u8) -> Option<Two> {\n        if Two::is_available() {\n            // SAFETY: we check that neon is available above.\n            unsafe { Some(Two::new_unchecked(needle1, needle2)) }\n        } else {\n            None\n        }\n    }\n\n    /// Create a new finder specific to neon vectors and routines without\n    /// checking that neon is available.\n    ///\n    /// # Safety\n    ///\n    /// Callers must guarantee that it is safe to execute `neon` instructions\n    /// in the current environment.\n    ///\n    /// Note that it is a common misconception that if one compiles for an\n    /// `x86_64` target, then they therefore automatically have access to neon\n    /// instructions. While this is almost always the case, it isn't true in\n    /// 100% of cases.\n    #[target_feature(enable = \"neon\")]\n    #[inline]\n    pub unsafe fn new_unchecked(needle1: u8, needle2: u8) -> Two {\n        Two(generic::Two::new(needle1, needle2))\n    }\n\n    /// Returns true when this implementation is available in the current\n    /// environment.\n    ///\n    /// When this is true, it is guaranteed that [`Two::new`] will return\n    /// a `Some` value. Similarly, when it is false, it is guaranteed that\n    /// `Two::new` will return a `None` value.\n    ///\n    /// Note also that for the lifetime of a single program, if this returns\n    /// true then it will always return true.\n    #[inline]\n    pub fn is_available() -> bool {\n        #[cfg(target_feature = \"neon\")]\n        {\n            true\n        }\n        #[cfg(not(target_feature = \"neon\"))]\n        {\n            false\n        }\n    }\n\n    /// Return the first occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn find(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `find_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.find_raw(s, e)\n            })\n        }\n    }\n\n    /// Return the last occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn rfind(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `rfind_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.rfind_raw(s, e)\n            })\n        }\n    }\n\n    /// Like `find`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn find_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        if end.distance(start) < uint8x16_t::BYTES {\n            // SAFETY: We require the caller to pass valid start/end pointers.\n            return generic::fwd_byte_by_byte(start, end, |b| {\n                b == self.0.needle1() || b == self.0.needle2()\n            });\n        }\n        // SAFETY: Building a `Two` means it's safe to call 'neon' routines.\n        // Also, we've checked that our haystack is big enough to run on the\n        // vector routine. Pointer validity is caller's responsibility.\n        self.find_raw_impl(start, end)\n    }\n\n    /// Like `rfind`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn rfind_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        if end.distance(start) < uint8x16_t::BYTES {\n            // SAFETY: We require the caller to pass valid start/end pointers.\n            return generic::rev_byte_by_byte(start, end, |b| {\n                b == self.0.needle1() || b == self.0.needle2()\n            });\n        }\n        // SAFETY: Building a `Two` means it's safe to call 'neon' routines.\n        // Also, we've checked that our haystack is big enough to run on the\n        // vector routine. Pointer validity is caller's responsibility.\n        self.rfind_raw_impl(start, end)\n    }\n\n    /// Execute a search using neon vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`Two::find_raw`], except the distance between `start` and\n    /// `end` must be at least the size of a neon vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Two`, which can only be constructed\n    /// when it is safe to call `neon` routines.)\n    #[target_feature(enable = \"neon\")]\n    #[inline]\n    unsafe fn find_raw_impl(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.0.find_raw(start, end)\n    }\n\n    /// Execute a search using neon vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`Two::rfind_raw`], except the distance between `start` and\n    /// `end` must be at least the size of a neon vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Two`, which can only be constructed\n    /// when it is safe to call `neon` routines.)\n    #[target_feature(enable = \"neon\")]\n    #[inline]\n    unsafe fn rfind_raw_impl(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.0.rfind_raw(start, end)\n    }\n\n    /// Returns an iterator over all occurrences of the needle bytes in the\n    /// given haystack.\n    ///\n    /// The iterator returned implements `DoubleEndedIterator`. This means it\n    /// can also be used to find occurrences in reverse order.\n    #[inline]\n    pub fn iter<'a, 'h>(&'a self, haystack: &'h [u8]) -> TwoIter<'a, 'h> {\n        TwoIter { searcher: self, it: generic::Iter::new(haystack) }\n    }\n}\n\n/// An iterator over all occurrences of two possible bytes in a haystack.\n///\n/// This iterator implements `DoubleEndedIterator`, which means it can also be\n/// used to find occurrences in reverse order.\n///\n/// This iterator is created by the [`Two::iter`] method.\n///\n/// The lifetime parameters are as follows:\n///\n/// * `'a` refers to the lifetime of the underlying [`Two`] searcher.\n/// * `'h` refers to the lifetime of the haystack being searched.\n#[derive(Clone, Debug)]\npub struct TwoIter<'a, 'h> {\n    searcher: &'a Two,\n    it: generic::Iter<'h>,\n}\n\nimpl<'a, 'h> Iterator for TwoIter<'a, 'h> {\n    type Item = usize;\n\n    #[inline]\n    fn next(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'find_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next(|s, e| self.searcher.find_raw(s, e)) }\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.it.size_hint()\n    }\n}\n\nimpl<'a, 'h> DoubleEndedIterator for TwoIter<'a, 'h> {\n    #[inline]\n    fn next_back(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'rfind_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next_back(|s, e| self.searcher.rfind_raw(s, e)) }\n    }\n}\n\nimpl<'a, 'h> core::iter::FusedIterator for TwoIter<'a, 'h> {}\n\n/// Finds all occurrences of three bytes in a haystack.\n///\n/// That is, this reports matches of one of three possible bytes. For example,\n/// searching for `a`, `b` or `o` in `afoobar` would report matches at offsets\n/// `0`, `2`, `3`, `4` and `5`.\n#[derive(Clone, Copy, Debug)]\npub struct Three(generic::Three<uint8x16_t>);\n\nimpl Three {\n    /// Create a new searcher that finds occurrences of the needle bytes given.\n    ///\n    /// This particular searcher is specialized to use neon vector instructions\n    /// that typically make it quite fast.\n    ///\n    /// If neon is unavailable in the current environment, then `None` is\n    /// returned.\n    #[inline]\n    pub fn new(needle1: u8, needle2: u8, needle3: u8) -> Option<Three> {\n        if Three::is_available() {\n            // SAFETY: we check that neon is available above.\n            unsafe { Some(Three::new_unchecked(needle1, needle2, needle3)) }\n        } else {\n            None\n        }\n    }\n\n    /// Create a new finder specific to neon vectors and routines without\n    /// checking that neon is available.\n    ///\n    /// # Safety\n    ///\n    /// Callers must guarantee that it is safe to execute `neon` instructions\n    /// in the current environment.\n    ///\n    /// Note that it is a common misconception that if one compiles for an\n    /// `x86_64` target, then they therefore automatically have access to neon\n    /// instructions. While this is almost always the case, it isn't true in\n    /// 100% of cases.\n    #[target_feature(enable = \"neon\")]\n    #[inline]\n    pub unsafe fn new_unchecked(\n        needle1: u8,\n        needle2: u8,\n        needle3: u8,\n    ) -> Three {\n        Three(generic::Three::new(needle1, needle2, needle3))\n    }\n\n    /// Returns true when this implementation is available in the current\n    /// environment.\n    ///\n    /// When this is true, it is guaranteed that [`Three::new`] will return\n    /// a `Some` value. Similarly, when it is false, it is guaranteed that\n    /// `Three::new` will return a `None` value.\n    ///\n    /// Note also that for the lifetime of a single program, if this returns\n    /// true then it will always return true.\n    #[inline]\n    pub fn is_available() -> bool {\n        #[cfg(target_feature = \"neon\")]\n        {\n            true\n        }\n        #[cfg(not(target_feature = \"neon\"))]\n        {\n            false\n        }\n    }\n\n    /// Return the first occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn find(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `find_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.find_raw(s, e)\n            })\n        }\n    }\n\n    /// Return the last occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn rfind(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `rfind_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.rfind_raw(s, e)\n            })\n        }\n    }\n\n    /// Like `find`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn find_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        if end.distance(start) < uint8x16_t::BYTES {\n            // SAFETY: We require the caller to pass valid start/end pointers.\n            return generic::fwd_byte_by_byte(start, end, |b| {\n                b == self.0.needle1()\n                    || b == self.0.needle2()\n                    || b == self.0.needle3()\n            });\n        }\n        // SAFETY: Building a `Three` means it's safe to call 'neon' routines.\n        // Also, we've checked that our haystack is big enough to run on the\n        // vector routine. Pointer validity is caller's responsibility.\n        self.find_raw_impl(start, end)\n    }\n\n    /// Like `rfind`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn rfind_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        if end.distance(start) < uint8x16_t::BYTES {\n            // SAFETY: We require the caller to pass valid start/end pointers.\n            return generic::rev_byte_by_byte(start, end, |b| {\n                b == self.0.needle1()\n                    || b == self.0.needle2()\n                    || b == self.0.needle3()\n            });\n        }\n        // SAFETY: Building a `Three` means it's safe to call 'neon' routines.\n        // Also, we've checked that our haystack is big enough to run on the\n        // vector routine. Pointer validity is caller's responsibility.\n        self.rfind_raw_impl(start, end)\n    }\n\n    /// Execute a search using neon vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`Three::find_raw`], except the distance between `start` and\n    /// `end` must be at least the size of a neon vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Three`, which can only be constructed\n    /// when it is safe to call `neon` routines.)\n    #[target_feature(enable = \"neon\")]\n    #[inline]\n    unsafe fn find_raw_impl(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.0.find_raw(start, end)\n    }\n\n    /// Execute a search using neon vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`Three::rfind_raw`], except the distance between `start` and\n    /// `end` must be at least the size of a neon vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Three`, which can only be constructed\n    /// when it is safe to call `neon` routines.)\n    #[target_feature(enable = \"neon\")]\n    #[inline]\n    unsafe fn rfind_raw_impl(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.0.rfind_raw(start, end)\n    }\n\n    /// Returns an iterator over all occurrences of the needle byte in the\n    /// given haystack.\n    ///\n    /// The iterator returned implements `DoubleEndedIterator`. This means it\n    /// can also be used to find occurrences in reverse order.\n    #[inline]\n    pub fn iter<'a, 'h>(&'a self, haystack: &'h [u8]) -> ThreeIter<'a, 'h> {\n        ThreeIter { searcher: self, it: generic::Iter::new(haystack) }\n    }\n}\n\n/// An iterator over all occurrences of three possible bytes in a haystack.\n///\n/// This iterator implements `DoubleEndedIterator`, which means it can also be\n/// used to find occurrences in reverse order.\n///\n/// This iterator is created by the [`Three::iter`] method.\n///\n/// The lifetime parameters are as follows:\n///\n/// * `'a` refers to the lifetime of the underlying [`Three`] searcher.\n/// * `'h` refers to the lifetime of the haystack being searched.\n#[derive(Clone, Debug)]\npub struct ThreeIter<'a, 'h> {\n    searcher: &'a Three,\n    it: generic::Iter<'h>,\n}\n\nimpl<'a, 'h> Iterator for ThreeIter<'a, 'h> {\n    type Item = usize;\n\n    #[inline]\n    fn next(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'find_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next(|s, e| self.searcher.find_raw(s, e)) }\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.it.size_hint()\n    }\n}\n\nimpl<'a, 'h> DoubleEndedIterator for ThreeIter<'a, 'h> {\n    #[inline]\n    fn next_back(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'rfind_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next_back(|s, e| self.searcher.rfind_raw(s, e)) }\n    }\n}\n\nimpl<'a, 'h> core::iter::FusedIterator for ThreeIter<'a, 'h> {}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    define_memchr_quickcheck!(super);\n\n    #[test]\n    fn forward_one() {\n        crate::tests::memchr::Runner::new(1).forward_iter(\n            |haystack, needles| {\n                Some(One::new(needles[0])?.iter(haystack).collect())\n            },\n        )\n    }\n\n    #[test]\n    fn reverse_one() {\n        crate::tests::memchr::Runner::new(1).reverse_iter(\n            |haystack, needles| {\n                Some(One::new(needles[0])?.iter(haystack).rev().collect())\n            },\n        )\n    }\n\n    #[test]\n    fn count_one() {\n        crate::tests::memchr::Runner::new(1).count_iter(|haystack, needles| {\n            Some(One::new(needles[0])?.iter(haystack).count())\n        })\n    }\n\n    #[test]\n    fn forward_two() {\n        crate::tests::memchr::Runner::new(2).forward_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                Some(Two::new(n1, n2)?.iter(haystack).collect())\n            },\n        )\n    }\n\n    #[test]\n    fn reverse_two() {\n        crate::tests::memchr::Runner::new(2).reverse_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                Some(Two::new(n1, n2)?.iter(haystack).rev().collect())\n            },\n        )\n    }\n\n    #[test]\n    fn forward_three() {\n        crate::tests::memchr::Runner::new(3).forward_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                let n3 = needles.get(2).copied()?;\n                Some(Three::new(n1, n2, n3)?.iter(haystack).collect())\n            },\n        )\n    }\n\n    #[test]\n    fn reverse_three() {\n        crate::tests::memchr::Runner::new(3).reverse_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                let n3 = needles.get(2).copied()?;\n                Some(Three::new(n1, n2, n3)?.iter(haystack).rev().collect())\n            },\n        )\n    }\n}\n"
  },
  {
    "path": "src/arch/aarch64/neon/mod.rs",
    "content": "/*!\nAlgorithms for the `aarch64` target using 128-bit vectors via NEON.\n*/\n\npub mod memchr;\npub mod packedpair;\n"
  },
  {
    "path": "src/arch/aarch64/neon/packedpair.rs",
    "content": "/*!\nA 128-bit vector implementation of the \"packed pair\" SIMD algorithm.\n\nThe \"packed pair\" algorithm is based on the [generic SIMD] algorithm. The main\ndifference is that it (by default) uses a background distribution of byte\nfrequencies to heuristically select the pair of bytes to search for.\n\n[generic SIMD]: http://0x80.pl/articles/simd-strfind.html#first-and-last\n*/\n\nuse core::arch::aarch64::uint8x16_t;\n\nuse crate::arch::{all::packedpair::Pair, generic::packedpair};\n\n/// A \"packed pair\" finder that uses 128-bit vector operations.\n///\n/// This finder picks two bytes that it believes have high predictive power\n/// for indicating an overall match of a needle. Depending on whether\n/// `Finder::find` or `Finder::find_prefilter` is used, it reports offsets\n/// where the needle matches or could match. In the prefilter case, candidates\n/// are reported whenever the [`Pair`] of bytes given matches.\n#[derive(Clone, Copy, Debug)]\npub struct Finder(packedpair::Finder<uint8x16_t>);\n\n/// A \"packed pair\" finder that uses 128-bit vector operations.\n///\n/// This finder picks two bytes that it believes have high predictive power\n/// for indicating an overall match of a needle. Depending on whether\n/// `Finder::find` or `Finder::find_prefilter` is used, it reports offsets\n/// where the needle matches or could match. In the prefilter case, candidates\n/// are reported whenever the [`Pair`] of bytes given matches.\nimpl Finder {\n    /// Create a new pair searcher. The searcher returned can either report\n    /// exact matches of `needle` or act as a prefilter and report candidate\n    /// positions of `needle`.\n    ///\n    /// If neon is unavailable in the current environment or if a [`Pair`]\n    /// could not be constructed from the needle given, then `None` is\n    /// returned.\n    #[inline]\n    pub fn new(needle: &[u8]) -> Option<Finder> {\n        Finder::with_pair(needle, Pair::new(needle)?)\n    }\n\n    /// Create a new \"packed pair\" finder using the pair of bytes given.\n    ///\n    /// This constructor permits callers to control precisely which pair of\n    /// bytes is used as a predicate.\n    ///\n    /// If neon is unavailable in the current environment, then `None` is\n    /// returned.\n    #[inline]\n    pub fn with_pair(needle: &[u8], pair: Pair) -> Option<Finder> {\n        if Finder::is_available() {\n            // SAFETY: we check that NEON is available above. We are also\n            // guaranteed to have needle.len() > 1 because we have a valid\n            // Pair.\n            unsafe { Some(Finder::with_pair_impl(needle, pair)) }\n        } else {\n            None\n        }\n    }\n\n    /// Create a new `Finder` specific to neon vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as the safety for `packedpair::Finder::new`, and callers must also\n    /// ensure that neon is available.\n    #[target_feature(enable = \"neon\")]\n    #[inline]\n    unsafe fn with_pair_impl(needle: &[u8], pair: Pair) -> Finder {\n        let finder = packedpair::Finder::<uint8x16_t>::new(needle, pair);\n        Finder(finder)\n    }\n\n    /// Returns true when this implementation is available in the current\n    /// environment.\n    ///\n    /// When this is true, it is guaranteed that [`Finder::with_pair`] will\n    /// return a `Some` value. Similarly, when it is false, it is guaranteed\n    /// that `Finder::with_pair` will return a `None` value. Notice that this\n    /// does not guarantee that [`Finder::new`] will return a `Finder`. Namely,\n    /// even when `Finder::is_available` is true, it is not guaranteed that a\n    /// valid [`Pair`] can be found from the needle given.\n    ///\n    /// Note also that for the lifetime of a single program, if this returns\n    /// true then it will always return true.\n    #[inline]\n    pub fn is_available() -> bool {\n        #[cfg(target_feature = \"neon\")]\n        {\n            true\n        }\n        #[cfg(not(target_feature = \"neon\"))]\n        {\n            false\n        }\n    }\n\n    /// Execute a search using neon vectors and routines.\n    ///\n    /// # Panics\n    ///\n    /// When `haystack.len()` is less than [`Finder::min_haystack_len`].\n    #[inline]\n    pub fn find(&self, haystack: &[u8], needle: &[u8]) -> Option<usize> {\n        // SAFETY: Building a `Finder` means it's safe to call 'neon' routines.\n        unsafe { self.find_impl(haystack, needle) }\n    }\n\n    /// Execute a search using neon vectors and routines.\n    ///\n    /// # Panics\n    ///\n    /// When `haystack.len()` is less than [`Finder::min_haystack_len`].\n    #[inline]\n    pub fn find_prefilter(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: Building a `Finder` means it's safe to call 'neon' routines.\n        unsafe { self.find_prefilter_impl(haystack) }\n    }\n\n    /// Execute a search using neon vectors and routines.\n    ///\n    /// # Panics\n    ///\n    /// When `haystack.len()` is less than [`Finder::min_haystack_len`].\n    ///\n    /// # Safety\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Finder`, which can only be constructed\n    /// when it is safe to call `neon` routines.)\n    #[target_feature(enable = \"neon\")]\n    #[inline]\n    unsafe fn find_impl(\n        &self,\n        haystack: &[u8],\n        needle: &[u8],\n    ) -> Option<usize> {\n        self.0.find(haystack, needle)\n    }\n\n    /// Execute a prefilter search using neon vectors and routines.\n    ///\n    /// # Panics\n    ///\n    /// When `haystack.len()` is less than [`Finder::min_haystack_len`].\n    ///\n    /// # Safety\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Finder`, which can only be constructed\n    /// when it is safe to call `neon` routines.)\n    #[target_feature(enable = \"neon\")]\n    #[inline]\n    unsafe fn find_prefilter_impl(&self, haystack: &[u8]) -> Option<usize> {\n        self.0.find_prefilter(haystack)\n    }\n\n    /// Returns the pair of offsets (into the needle) used to check as a\n    /// predicate before confirming whether a needle exists at a particular\n    /// position.\n    #[inline]\n    pub fn pair(&self) -> &Pair {\n        self.0.pair()\n    }\n\n    /// Returns the minimum haystack length that this `Finder` can search.\n    ///\n    /// Using a haystack with length smaller than this in a search will result\n    /// in a panic. The reason for this restriction is that this finder is\n    /// meant to be a low-level component that is part of a larger substring\n    /// strategy. In that sense, it avoids trying to handle all cases and\n    /// instead only handles the cases that it can handle very well.\n    #[inline]\n    pub fn min_haystack_len(&self) -> usize {\n        self.0.min_haystack_len()\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    fn find(haystack: &[u8], needle: &[u8]) -> Option<Option<usize>> {\n        let f = Finder::new(needle)?;\n        if haystack.len() < f.min_haystack_len() {\n            return None;\n        }\n        Some(f.find(haystack, needle))\n    }\n\n    define_substring_forward_quickcheck!(find);\n\n    #[test]\n    fn forward_substring() {\n        crate::tests::substring::Runner::new().fwd(find).run()\n    }\n\n    #[test]\n    fn forward_packedpair() {\n        fn find(\n            haystack: &[u8],\n            needle: &[u8],\n            index1: u8,\n            index2: u8,\n        ) -> Option<Option<usize>> {\n            let pair = Pair::with_indices(needle, index1, index2)?;\n            let f = Finder::with_pair(needle, pair)?;\n            if haystack.len() < f.min_haystack_len() {\n                return None;\n            }\n            Some(f.find(haystack, needle))\n        }\n        crate::tests::packedpair::Runner::new().fwd(find).run()\n    }\n\n    #[test]\n    fn forward_packedpair_prefilter() {\n        fn find(\n            haystack: &[u8],\n            needle: &[u8],\n            index1: u8,\n            index2: u8,\n        ) -> Option<Option<usize>> {\n            let pair = Pair::with_indices(needle, index1, index2)?;\n            let f = Finder::with_pair(needle, pair)?;\n            if haystack.len() < f.min_haystack_len() {\n                return None;\n            }\n            Some(f.find_prefilter(haystack))\n        }\n        crate::tests::packedpair::Runner::new().fwd(find).run()\n    }\n}\n"
  },
  {
    "path": "src/arch/all/memchr.rs",
    "content": "/*!\nProvides architecture independent implementations of `memchr` and friends.\n\nThe main types in this module are [`One`], [`Two`] and [`Three`]. They are for\nsearching for one, two or three distinct bytes, respectively, in a haystack.\nEach type also has corresponding double ended iterators. These searchers\nare typically slower than hand-coded vector routines accomplishing the same\ntask, but are also typically faster than naive scalar code. These routines\neffectively work by treating a `usize` as a vector of 8-bit lanes, and thus\nachieves some level of data parallelism even without explicit vector support.\n\nThe `One` searcher also provides a [`One::count`] routine for efficiently\ncounting the number of times a single byte occurs in a haystack. This is\nuseful, for example, for counting the number of lines in a haystack. This\nroutine exists because it is usually faster, especially with a high match\ncount, than using [`One::find`] repeatedly. ([`OneIter`] specializes its\n`Iterator::count` implementation to use this routine.)\n\nOnly one, two and three bytes are supported because three bytes is about\nthe point where one sees diminishing returns. Beyond this point and it's\nprobably (but not necessarily) better to just use a simple `[bool; 256]` array\nor similar. However, it depends mightily on the specific work-load and the\nexpected match frequency.\n*/\n\nuse crate::{arch::generic::memchr as generic, ext::Pointer};\n\n/// The number of bytes in a single `usize` value.\nconst USIZE_BYTES: usize = (usize::BITS / 8) as usize;\n/// The bits that must be zero for a `*const usize` to be properly aligned.\nconst USIZE_ALIGN: usize = USIZE_BYTES - 1;\n\n/// Finds all occurrences of a single byte in a haystack.\n#[derive(Clone, Copy, Debug)]\npub struct One {\n    s1: u8,\n    v1: usize,\n}\n\nimpl One {\n    /// The number of bytes we examine per each iteration of our search loop.\n    const LOOP_BYTES: usize = 2 * USIZE_BYTES;\n\n    /// Create a new searcher that finds occurrences of the byte given.\n    #[inline]\n    pub fn new(needle: u8) -> One {\n        One { s1: needle, v1: splat(needle) }\n    }\n\n    /// A test-only routine so that we can bundle a bunch of quickcheck\n    /// properties into a single macro. Basically, this provides a constructor\n    /// that makes it identical to most other memchr implementations, which\n    /// have fallible constructors.\n    #[cfg(test)]\n    pub(crate) fn try_new(needle: u8) -> Option<One> {\n        Some(One::new(needle))\n    }\n\n    /// Return the first occurrence of the needle in the given haystack. If no\n    /// such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value for a non-empty haystack is `haystack.len() - 1`.\n    #[inline]\n    pub fn find(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `find_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.find_raw(s, e)\n            })\n        }\n    }\n\n    /// Return the last occurrence of the needle in the given haystack. If no\n    /// such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value for a non-empty haystack is `haystack.len() - 1`.\n    #[inline]\n    pub fn rfind(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `find_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.rfind_raw(s, e)\n            })\n        }\n    }\n\n    /// Counts all occurrences of this byte in the given haystack.\n    #[inline]\n    pub fn count(&self, haystack: &[u8]) -> usize {\n        // SAFETY: All of our pointers are derived directly from a borrowed\n        // slice, which is guaranteed to be valid.\n        unsafe {\n            let start = haystack.as_ptr();\n            let end = start.add(haystack.len());\n            self.count_raw(start, end)\n        }\n    }\n\n    /// Like `find`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn find_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        let confirm = |b| self.confirm(b);\n        let len = end.distance(start);\n        if len < USIZE_BYTES {\n            return generic::fwd_byte_by_byte(start, end, confirm);\n        }\n\n        // The start of the search may not be aligned to `*const usize`,\n        // so we do an unaligned load here.\n        let chunk = start.cast::<usize>().read_unaligned();\n        if self.has_needle(chunk) {\n            return generic::fwd_byte_by_byte(start, end, confirm);\n        }\n\n        // And now we start our search at a guaranteed aligned position.\n        // The first iteration of the loop below will overlap with the the\n        // unaligned chunk above in cases where the search starts at an\n        // unaligned offset, but that's okay as we're only here if that\n        // above didn't find a match.\n        let mut cur =\n            start.add(USIZE_BYTES - (start.as_usize() & USIZE_ALIGN));\n        debug_assert!(cur > start);\n        if len <= One::LOOP_BYTES {\n            return generic::fwd_byte_by_byte(cur, end, confirm);\n        }\n        debug_assert!(end.sub(One::LOOP_BYTES) >= start);\n        while cur <= end.sub(One::LOOP_BYTES) {\n            debug_assert_eq!(0, cur.as_usize() % USIZE_BYTES);\n\n            let a = cur.cast::<usize>().read();\n            let b = cur.add(USIZE_BYTES).cast::<usize>().read();\n            if self.has_needle(a) || self.has_needle(b) {\n                break;\n            }\n            cur = cur.add(One::LOOP_BYTES);\n        }\n        generic::fwd_byte_by_byte(cur, end, confirm)\n    }\n\n    /// Like `rfind`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn rfind_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        let confirm = |b| self.confirm(b);\n        let len = end.distance(start);\n        if len < USIZE_BYTES {\n            return generic::rev_byte_by_byte(start, end, confirm);\n        }\n\n        let chunk = end.sub(USIZE_BYTES).cast::<usize>().read_unaligned();\n        if self.has_needle(chunk) {\n            return generic::rev_byte_by_byte(start, end, confirm);\n        }\n\n        let mut cur = end.sub(end.as_usize() & USIZE_ALIGN);\n        debug_assert!(start <= cur && cur <= end);\n        if len <= One::LOOP_BYTES {\n            return generic::rev_byte_by_byte(start, cur, confirm);\n        }\n        while cur >= start.add(One::LOOP_BYTES) {\n            debug_assert_eq!(0, cur.as_usize() % USIZE_BYTES);\n\n            let a = cur.sub(2 * USIZE_BYTES).cast::<usize>().read();\n            let b = cur.sub(1 * USIZE_BYTES).cast::<usize>().read();\n            if self.has_needle(a) || self.has_needle(b) {\n                break;\n            }\n            cur = cur.sub(One::LOOP_BYTES);\n        }\n        generic::rev_byte_by_byte(start, cur, confirm)\n    }\n\n    /// Counts all occurrences of this byte in the given haystack represented\n    /// by raw pointers.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `0` will always be returned.\n    #[inline]\n    pub unsafe fn count_raw(&self, start: *const u8, end: *const u8) -> usize {\n        if start >= end {\n            return 0;\n        }\n        // Sadly I couldn't get the SWAR approach to work here, so we just do\n        // one byte at a time for now. PRs to improve this are welcome.\n        let mut ptr = start;\n        let mut count = 0;\n        while ptr < end {\n            count += (ptr.read() == self.s1) as usize;\n            ptr = ptr.offset(1);\n        }\n        count\n    }\n\n    /// Returns an iterator over all occurrences of the needle byte in the\n    /// given haystack.\n    ///\n    /// The iterator returned implements `DoubleEndedIterator`. This means it\n    /// can also be used to find occurrences in reverse order.\n    pub fn iter<'a, 'h>(&'a self, haystack: &'h [u8]) -> OneIter<'a, 'h> {\n        OneIter { searcher: self, it: generic::Iter::new(haystack) }\n    }\n\n    #[inline(always)]\n    fn has_needle(&self, chunk: usize) -> bool {\n        has_zero_byte(self.v1 ^ chunk)\n    }\n\n    #[inline(always)]\n    fn confirm(&self, haystack_byte: u8) -> bool {\n        self.s1 == haystack_byte\n    }\n}\n\n/// An iterator over all occurrences of a single byte in a haystack.\n///\n/// This iterator implements `DoubleEndedIterator`, which means it can also be\n/// used to find occurrences in reverse order.\n///\n/// This iterator is created by the [`One::iter`] method.\n///\n/// The lifetime parameters are as follows:\n///\n/// * `'a` refers to the lifetime of the underlying [`One`] searcher.\n/// * `'h` refers to the lifetime of the haystack being searched.\n#[derive(Clone, Debug)]\npub struct OneIter<'a, 'h> {\n    /// The underlying memchr searcher.\n    searcher: &'a One,\n    /// Generic iterator implementation.\n    it: generic::Iter<'h>,\n}\n\nimpl<'a, 'h> Iterator for OneIter<'a, 'h> {\n    type Item = usize;\n\n    #[inline]\n    fn next(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'find_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next(|s, e| self.searcher.find_raw(s, e)) }\n    }\n\n    #[inline]\n    fn count(self) -> usize {\n        self.it.count(|s, e| {\n            // SAFETY: We rely on our generic iterator to return valid start\n            // and end pointers.\n            unsafe { self.searcher.count_raw(s, e) }\n        })\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.it.size_hint()\n    }\n}\n\nimpl<'a, 'h> DoubleEndedIterator for OneIter<'a, 'h> {\n    #[inline]\n    fn next_back(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'rfind_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next_back(|s, e| self.searcher.rfind_raw(s, e)) }\n    }\n}\n\n/// Finds all occurrences of two bytes in a haystack.\n///\n/// That is, this reports matches of one of two possible bytes. For example,\n/// searching for `a` or `b` in `afoobar` would report matches at offsets `0`,\n/// `4` and `5`.\n#[derive(Clone, Copy, Debug)]\npub struct Two {\n    s1: u8,\n    s2: u8,\n    v1: usize,\n    v2: usize,\n}\n\nimpl Two {\n    /// Create a new searcher that finds occurrences of the two needle bytes\n    /// given.\n    #[inline]\n    pub fn new(needle1: u8, needle2: u8) -> Two {\n        Two {\n            s1: needle1,\n            s2: needle2,\n            v1: splat(needle1),\n            v2: splat(needle2),\n        }\n    }\n\n    /// A test-only routine so that we can bundle a bunch of quickcheck\n    /// properties into a single macro. Basically, this provides a constructor\n    /// that makes it identical to most other memchr implementations, which\n    /// have fallible constructors.\n    #[cfg(test)]\n    pub(crate) fn try_new(needle1: u8, needle2: u8) -> Option<Two> {\n        Some(Two::new(needle1, needle2))\n    }\n\n    /// Return the first occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value for a non-empty haystack is `haystack.len() - 1`.\n    #[inline]\n    pub fn find(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `find_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.find_raw(s, e)\n            })\n        }\n    }\n\n    /// Return the last occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value for a non-empty haystack is `haystack.len() - 1`.\n    #[inline]\n    pub fn rfind(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `find_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.rfind_raw(s, e)\n            })\n        }\n    }\n\n    /// Like `find`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn find_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        let confirm = |b| self.confirm(b);\n        let len = end.distance(start);\n        if len < USIZE_BYTES {\n            return generic::fwd_byte_by_byte(start, end, confirm);\n        }\n\n        // The start of the search may not be aligned to `*const usize`,\n        // so we do an unaligned load here.\n        let chunk = start.cast::<usize>().read_unaligned();\n        if self.has_needle(chunk) {\n            return generic::fwd_byte_by_byte(start, end, confirm);\n        }\n\n        // And now we start our search at a guaranteed aligned position.\n        // The first iteration of the loop below will overlap with the\n        // unaligned chunk above in cases where the search starts at an\n        // unaligned offset, but that's okay as we're only here if that\n        // above didn't find a match.\n        let mut cur =\n            start.add(USIZE_BYTES - (start.as_usize() & USIZE_ALIGN));\n        debug_assert!(cur > start);\n        debug_assert!(end.sub(USIZE_BYTES) >= start);\n        while cur <= end.sub(USIZE_BYTES) {\n            debug_assert_eq!(0, cur.as_usize() % USIZE_BYTES);\n\n            let chunk = cur.cast::<usize>().read();\n            if self.has_needle(chunk) {\n                break;\n            }\n            cur = cur.add(USIZE_BYTES);\n        }\n        generic::fwd_byte_by_byte(cur, end, confirm)\n    }\n\n    /// Like `rfind`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn rfind_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        let confirm = |b| self.confirm(b);\n        let len = end.distance(start);\n        if len < USIZE_BYTES {\n            return generic::rev_byte_by_byte(start, end, confirm);\n        }\n\n        let chunk = end.sub(USIZE_BYTES).cast::<usize>().read_unaligned();\n        if self.has_needle(chunk) {\n            return generic::rev_byte_by_byte(start, end, confirm);\n        }\n\n        let mut cur = end.sub(end.as_usize() & USIZE_ALIGN);\n        debug_assert!(start <= cur && cur <= end);\n        while cur >= start.add(USIZE_BYTES) {\n            debug_assert_eq!(0, cur.as_usize() % USIZE_BYTES);\n\n            let chunk = cur.sub(USIZE_BYTES).cast::<usize>().read();\n            if self.has_needle(chunk) {\n                break;\n            }\n            cur = cur.sub(USIZE_BYTES);\n        }\n        generic::rev_byte_by_byte(start, cur, confirm)\n    }\n\n    /// Returns an iterator over all occurrences of one of the needle bytes in\n    /// the given haystack.\n    ///\n    /// The iterator returned implements `DoubleEndedIterator`. This means it\n    /// can also be used to find occurrences in reverse order.\n    pub fn iter<'a, 'h>(&'a self, haystack: &'h [u8]) -> TwoIter<'a, 'h> {\n        TwoIter { searcher: self, it: generic::Iter::new(haystack) }\n    }\n\n    #[inline(always)]\n    fn has_needle(&self, chunk: usize) -> bool {\n        has_zero_byte(self.v1 ^ chunk) || has_zero_byte(self.v2 ^ chunk)\n    }\n\n    #[inline(always)]\n    fn confirm(&self, haystack_byte: u8) -> bool {\n        self.s1 == haystack_byte || self.s2 == haystack_byte\n    }\n}\n\n/// An iterator over all occurrences of two possible bytes in a haystack.\n///\n/// This iterator implements `DoubleEndedIterator`, which means it can also be\n/// used to find occurrences in reverse order.\n///\n/// This iterator is created by the [`Two::iter`] method.\n///\n/// The lifetime parameters are as follows:\n///\n/// * `'a` refers to the lifetime of the underlying [`Two`] searcher.\n/// * `'h` refers to the lifetime of the haystack being searched.\n#[derive(Clone, Debug)]\npub struct TwoIter<'a, 'h> {\n    /// The underlying memchr searcher.\n    searcher: &'a Two,\n    /// Generic iterator implementation.\n    it: generic::Iter<'h>,\n}\n\nimpl<'a, 'h> Iterator for TwoIter<'a, 'h> {\n    type Item = usize;\n\n    #[inline]\n    fn next(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'find_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next(|s, e| self.searcher.find_raw(s, e)) }\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.it.size_hint()\n    }\n}\n\nimpl<'a, 'h> DoubleEndedIterator for TwoIter<'a, 'h> {\n    #[inline]\n    fn next_back(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'rfind_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next_back(|s, e| self.searcher.rfind_raw(s, e)) }\n    }\n}\n\n/// Finds all occurrences of three bytes in a haystack.\n///\n/// That is, this reports matches of one of three possible bytes. For example,\n/// searching for `a`, `b` or `o` in `afoobar` would report matches at offsets\n/// `0`, `2`, `3`, `4` and `5`.\n#[derive(Clone, Copy, Debug)]\npub struct Three {\n    s1: u8,\n    s2: u8,\n    s3: u8,\n    v1: usize,\n    v2: usize,\n    v3: usize,\n}\n\nimpl Three {\n    /// Create a new searcher that finds occurrences of the three needle bytes\n    /// given.\n    #[inline]\n    pub fn new(needle1: u8, needle2: u8, needle3: u8) -> Three {\n        Three {\n            s1: needle1,\n            s2: needle2,\n            s3: needle3,\n            v1: splat(needle1),\n            v2: splat(needle2),\n            v3: splat(needle3),\n        }\n    }\n\n    /// A test-only routine so that we can bundle a bunch of quickcheck\n    /// properties into a single macro. Basically, this provides a constructor\n    /// that makes it identical to most other memchr implementations, which\n    /// have fallible constructors.\n    #[cfg(test)]\n    pub(crate) fn try_new(\n        needle1: u8,\n        needle2: u8,\n        needle3: u8,\n    ) -> Option<Three> {\n        Some(Three::new(needle1, needle2, needle3))\n    }\n\n    /// Return the first occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value for a non-empty haystack is `haystack.len() - 1`.\n    #[inline]\n    pub fn find(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `find_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.find_raw(s, e)\n            })\n        }\n    }\n\n    /// Return the last occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value for a non-empty haystack is `haystack.len() - 1`.\n    #[inline]\n    pub fn rfind(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `find_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.rfind_raw(s, e)\n            })\n        }\n    }\n\n    /// Like `find`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn find_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        let confirm = |b| self.confirm(b);\n        let len = end.distance(start);\n        if len < USIZE_BYTES {\n            return generic::fwd_byte_by_byte(start, end, confirm);\n        }\n\n        // The start of the search may not be aligned to `*const usize`,\n        // so we do an unaligned load here.\n        let chunk = start.cast::<usize>().read_unaligned();\n        if self.has_needle(chunk) {\n            return generic::fwd_byte_by_byte(start, end, confirm);\n        }\n\n        // And now we start our search at a guaranteed aligned position.\n        // The first iteration of the loop below will overlap with the\n        // unaligned chunk above in cases where the search starts at an\n        // unaligned offset, but that's okay as we're only here if that\n        // above didn't find a match.\n        let mut cur =\n            start.add(USIZE_BYTES - (start.as_usize() & USIZE_ALIGN));\n        debug_assert!(cur > start);\n        debug_assert!(end.sub(USIZE_BYTES) >= start);\n        while cur <= end.sub(USIZE_BYTES) {\n            debug_assert_eq!(0, cur.as_usize() % USIZE_BYTES);\n\n            let chunk = cur.cast::<usize>().read();\n            if self.has_needle(chunk) {\n                break;\n            }\n            cur = cur.add(USIZE_BYTES);\n        }\n        generic::fwd_byte_by_byte(cur, end, confirm)\n    }\n\n    /// Like `rfind`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn rfind_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        let confirm = |b| self.confirm(b);\n        let len = end.distance(start);\n        if len < USIZE_BYTES {\n            return generic::rev_byte_by_byte(start, end, confirm);\n        }\n\n        let chunk = end.sub(USIZE_BYTES).cast::<usize>().read_unaligned();\n        if self.has_needle(chunk) {\n            return generic::rev_byte_by_byte(start, end, confirm);\n        }\n\n        let mut cur = end.sub(end.as_usize() & USIZE_ALIGN);\n        debug_assert!(start <= cur && cur <= end);\n        while cur >= start.add(USIZE_BYTES) {\n            debug_assert_eq!(0, cur.as_usize() % USIZE_BYTES);\n\n            let chunk = cur.sub(USIZE_BYTES).cast::<usize>().read();\n            if self.has_needle(chunk) {\n                break;\n            }\n            cur = cur.sub(USIZE_BYTES);\n        }\n        generic::rev_byte_by_byte(start, cur, confirm)\n    }\n\n    /// Returns an iterator over all occurrences of one of the needle bytes in\n    /// the given haystack.\n    ///\n    /// The iterator returned implements `DoubleEndedIterator`. This means it\n    /// can also be used to find occurrences in reverse order.\n    pub fn iter<'a, 'h>(&'a self, haystack: &'h [u8]) -> ThreeIter<'a, 'h> {\n        ThreeIter { searcher: self, it: generic::Iter::new(haystack) }\n    }\n\n    #[inline(always)]\n    fn has_needle(&self, chunk: usize) -> bool {\n        has_zero_byte(self.v1 ^ chunk)\n            || has_zero_byte(self.v2 ^ chunk)\n            || has_zero_byte(self.v3 ^ chunk)\n    }\n\n    #[inline(always)]\n    fn confirm(&self, haystack_byte: u8) -> bool {\n        self.s1 == haystack_byte\n            || self.s2 == haystack_byte\n            || self.s3 == haystack_byte\n    }\n}\n\n/// An iterator over all occurrences of three possible bytes in a haystack.\n///\n/// This iterator implements `DoubleEndedIterator`, which means it can also be\n/// used to find occurrences in reverse order.\n///\n/// This iterator is created by the [`Three::iter`] method.\n///\n/// The lifetime parameters are as follows:\n///\n/// * `'a` refers to the lifetime of the underlying [`Three`] searcher.\n/// * `'h` refers to the lifetime of the haystack being searched.\n#[derive(Clone, Debug)]\npub struct ThreeIter<'a, 'h> {\n    /// The underlying memchr searcher.\n    searcher: &'a Three,\n    /// Generic iterator implementation.\n    it: generic::Iter<'h>,\n}\n\nimpl<'a, 'h> Iterator for ThreeIter<'a, 'h> {\n    type Item = usize;\n\n    #[inline]\n    fn next(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'find_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next(|s, e| self.searcher.find_raw(s, e)) }\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.it.size_hint()\n    }\n}\n\nimpl<'a, 'h> DoubleEndedIterator for ThreeIter<'a, 'h> {\n    #[inline]\n    fn next_back(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'rfind_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next_back(|s, e| self.searcher.rfind_raw(s, e)) }\n    }\n}\n\n/// Return `true` if `x` contains any zero byte.\n///\n/// That is, this routine treats `x` as a register of 8-bit lanes and returns\n/// true when any of those lanes is `0`.\n///\n/// From \"Matters Computational\" by J. Arndt.\n#[inline(always)]\nfn has_zero_byte(x: usize) -> bool {\n    // \"The idea is to subtract one from each of the bytes and then look for\n    // bytes where the borrow propagated all the way to the most significant\n    // bit.\"\n    const LO: usize = splat(0x01);\n    const HI: usize = splat(0x80);\n\n    (x.wrapping_sub(LO) & !x & HI) != 0\n}\n\n/// Repeat the given byte into a word size number. That is, every 8 bits\n/// is equivalent to the given byte. For example, if `b` is `\\x4E` or\n/// `01001110` in binary, then the returned value on a 32-bit system would be:\n/// `01001110_01001110_01001110_01001110`.\n#[inline(always)]\nconst fn splat(b: u8) -> usize {\n    // TODO: use `usize::from` once it can be used in const context.\n    (b as usize) * (usize::MAX / 255)\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    define_memchr_quickcheck!(super, try_new);\n\n    #[test]\n    fn forward_one() {\n        crate::tests::memchr::Runner::new(1).forward_iter(\n            |haystack, needles| {\n                Some(One::new(needles[0]).iter(haystack).collect())\n            },\n        )\n    }\n\n    #[test]\n    fn reverse_one() {\n        crate::tests::memchr::Runner::new(1).reverse_iter(\n            |haystack, needles| {\n                Some(One::new(needles[0]).iter(haystack).rev().collect())\n            },\n        )\n    }\n\n    #[test]\n    fn count_one() {\n        crate::tests::memchr::Runner::new(1).count_iter(|haystack, needles| {\n            Some(One::new(needles[0]).iter(haystack).count())\n        })\n    }\n\n    #[test]\n    fn forward_two() {\n        crate::tests::memchr::Runner::new(2).forward_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                Some(Two::new(n1, n2).iter(haystack).collect())\n            },\n        )\n    }\n\n    #[test]\n    fn reverse_two() {\n        crate::tests::memchr::Runner::new(2).reverse_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                Some(Two::new(n1, n2).iter(haystack).rev().collect())\n            },\n        )\n    }\n\n    #[test]\n    fn forward_three() {\n        crate::tests::memchr::Runner::new(3).forward_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                let n3 = needles.get(2).copied()?;\n                Some(Three::new(n1, n2, n3).iter(haystack).collect())\n            },\n        )\n    }\n\n    #[test]\n    fn reverse_three() {\n        crate::tests::memchr::Runner::new(3).reverse_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                let n3 = needles.get(2).copied()?;\n                Some(Three::new(n1, n2, n3).iter(haystack).rev().collect())\n            },\n        )\n    }\n\n    // This was found by quickcheck in the course of refactoring this crate\n    // after memchr 2.5.0.\n    #[test]\n    fn regression_double_ended_iterator() {\n        let finder = One::new(b'a');\n        let haystack = \"a\";\n        let mut it = finder.iter(haystack.as_bytes());\n        assert_eq!(Some(0), it.next());\n        assert_eq!(None, it.next_back());\n    }\n\n    // This regression test was caught by ripgrep's test suite on i686 when\n    // upgrading to memchr 2.6. Namely, something about the \\x0B bytes here\n    // screws with the SWAR counting approach I was using. This regression test\n    // prompted me to remove the SWAR counting approach and just replace it\n    // with a byte-at-a-time loop.\n    #[test]\n    fn regression_count_new_lines() {\n        let haystack = \"01234567\\x0b\\n\\x0b\\n\\x0b\\n\\x0b\\nx\";\n        let count = One::new(b'\\n').count(haystack.as_bytes());\n        assert_eq!(4, count);\n    }\n\n    // A test[1] that failed on some big endian targets after a perf\n    // improvement was merged[2].\n    //\n    // At first it seemed like the test suite somehow missed the regression,\n    // but in actuality, CI was not running tests with `cross` but instead with\n    // `cargo` specifically. This is because those steps were using `cargo`\n    // instead of `${{ env.CARGO }}`. So adding this regression test doesn't\n    // really help catch that class of failure, but we add it anyway for good\n    // measure.\n    //\n    // [1]: https://github.com/BurntSushi/memchr/issues/152\n    // [2]: https://github.com/BurntSushi/memchr/pull/151\n    #[test]\n    fn regression_big_endian1() {\n        assert_eq!(One::new(b':').find(b\"1:23\"), Some(1));\n    }\n\n    // Interestingly, I couldn't get `regression_big_endian1` to fail for me\n    // on the `powerpc64-unknown-linux-gnu` target. But I found another case\n    // through quickcheck that does.\n    #[test]\n    fn regression_big_endian2() {\n        let data = [0, 0, 0, 0, 0, 0, 0, 0];\n        assert_eq!(One::new(b'\\x00').find(&data), Some(0));\n    }\n}\n"
  },
  {
    "path": "src/arch/all/mod.rs",
    "content": "/*!\nContains architecture independent routines.\n\nThese routines are often used as a \"fallback\" implementation when the more\nspecialized architecture dependent routines are unavailable.\n*/\n\npub mod memchr;\npub mod packedpair;\npub mod rabinkarp;\n#[cfg(feature = \"alloc\")]\npub mod shiftor;\npub mod twoway;\n\n/// Returns true if and only if `needle` is a prefix of `haystack`.\n///\n/// This uses a latency optimized variant of `memcmp` internally which *might*\n/// make this faster for very short strings.\n///\n/// # Inlining\n///\n/// This routine is marked `inline(always)`. If you want to call this function\n/// in a way that is not always inlined, you'll need to wrap a call to it in\n/// another function that is marked as `inline(never)` or just `inline`.\n#[inline(always)]\npub fn is_prefix(haystack: &[u8], needle: &[u8]) -> bool {\n    needle.len() <= haystack.len()\n        && is_equal(&haystack[..needle.len()], needle)\n}\n\n/// Returns true if and only if `needle` is a suffix of `haystack`.\n///\n/// This uses a latency optimized variant of `memcmp` internally which *might*\n/// make this faster for very short strings.\n///\n/// # Inlining\n///\n/// This routine is marked `inline(always)`. If you want to call this function\n/// in a way that is not always inlined, you'll need to wrap a call to it in\n/// another function that is marked as `inline(never)` or just `inline`.\n#[inline(always)]\npub fn is_suffix(haystack: &[u8], needle: &[u8]) -> bool {\n    needle.len() <= haystack.len()\n        && is_equal(&haystack[haystack.len() - needle.len()..], needle)\n}\n\n/// Compare corresponding bytes in `x` and `y` for equality.\n///\n/// That is, this returns true if and only if `x.len() == y.len()` and\n/// `x[i] == y[i]` for all `0 <= i < x.len()`.\n///\n/// # Inlining\n///\n/// This routine is marked `inline(always)`. If you want to call this function\n/// in a way that is not always inlined, you'll need to wrap a call to it in\n/// another function that is marked as `inline(never)` or just `inline`.\n///\n/// # Motivation\n///\n/// Why not use slice equality instead? Well, slice equality usually results in\n/// a call out to the current platform's `libc` which might not be inlineable\n/// or have other overhead. This routine isn't guaranteed to be a win, but it\n/// might be in some cases.\n#[inline(always)]\npub fn is_equal(x: &[u8], y: &[u8]) -> bool {\n    if x.len() != y.len() {\n        return false;\n    }\n    // SAFETY: Our pointers are derived directly from borrowed slices which\n    // uphold all of our safety guarantees except for length. We account for\n    // length with the check above.\n    unsafe { is_equal_raw(x.as_ptr(), y.as_ptr(), x.len()) }\n}\n\n/// Compare `n` bytes at the given pointers for equality.\n///\n/// This returns true if and only if `*x.add(i) == *y.add(i)` for all\n/// `0 <= i < n`.\n///\n/// # Inlining\n///\n/// This routine is marked `inline(always)`. If you want to call this function\n/// in a way that is not always inlined, you'll need to wrap a call to it in\n/// another function that is marked as `inline(never)` or just `inline`.\n///\n/// # Motivation\n///\n/// Why not use slice equality instead? Well, slice equality usually results in\n/// a call out to the current platform's `libc` which might not be inlineable\n/// or have other overhead. This routine isn't guaranteed to be a win, but it\n/// might be in some cases.\n///\n/// # Safety\n///\n/// * Both `x` and `y` must be valid for reads of up to `n` bytes.\n/// * Both `x` and `y` must point to an initialized value.\n/// * Both `x` and `y` must each point to an allocated object and\n/// must either be in bounds or at most one byte past the end of the\n/// allocated object. `x` and `y` do not need to point to the same allocated\n/// object, but they may.\n/// * Both `x` and `y` must be _derived from_ a pointer to their respective\n/// allocated objects.\n/// * The distance between `x` and `x+n` must not overflow `isize`. Similarly\n/// for `y` and `y+n`.\n/// * The distance being in bounds must not rely on \"wrapping around\" the\n/// address space.\n#[inline(always)]\npub unsafe fn is_equal_raw(\n    mut x: *const u8,\n    mut y: *const u8,\n    mut n: usize,\n) -> bool {\n    // When we have 4 or more bytes to compare, then proceed in chunks of 4 at\n    // a time using unaligned loads.\n    //\n    // Also, why do 4 byte loads instead of, say, 8 byte loads? The reason is\n    // that this particular version of memcmp is likely to be called with tiny\n    // needles. That means that if we do 8 byte loads, then a higher proportion\n    // of memcmp calls will use the slower variant above. With that said, this\n    // is a hypothesis and is only loosely supported by benchmarks. There's\n    // likely some improvement that could be made here. The main thing here\n    // though is to optimize for latency, not throughput.\n\n    // SAFETY: The caller is responsible for ensuring the pointers we get are\n    // valid and readable for at least `n` bytes. We also do unaligned loads,\n    // so there's no need to ensure we're aligned. (This is justified by this\n    // routine being specifically for short strings.)\n    while n >= 4 {\n        let vx = x.cast::<u32>().read_unaligned();\n        let vy = y.cast::<u32>().read_unaligned();\n        if vx != vy {\n            return false;\n        }\n        x = x.add(4);\n        y = y.add(4);\n        n -= 4;\n    }\n    // If we don't have enough bytes to do 4-byte at a time loads, then\n    // do partial loads. Note that I used to have a byte-at-a-time\n    // loop here and that turned out to be quite a bit slower for the\n    // memmem/pathological/defeat-simple-vector-alphabet benchmark.\n    if n >= 2 {\n        let vx = x.cast::<u16>().read_unaligned();\n        let vy = y.cast::<u16>().read_unaligned();\n        if vx != vy {\n            return false;\n        }\n        x = x.add(2);\n        y = y.add(2);\n        n -= 2;\n    }\n    if n > 0 {\n        if x.read() != y.read() {\n            return false;\n        }\n    }\n    true\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn equals_different_lengths() {\n        assert!(!is_equal(b\"\", b\"a\"));\n        assert!(!is_equal(b\"a\", b\"\"));\n        assert!(!is_equal(b\"ab\", b\"a\"));\n        assert!(!is_equal(b\"a\", b\"ab\"));\n    }\n\n    #[test]\n    fn equals_mismatch() {\n        let one_mismatch = [\n            (&b\"a\"[..], &b\"x\"[..]),\n            (&b\"ab\"[..], &b\"ax\"[..]),\n            (&b\"abc\"[..], &b\"abx\"[..]),\n            (&b\"abcd\"[..], &b\"abcx\"[..]),\n            (&b\"abcde\"[..], &b\"abcdx\"[..]),\n            (&b\"abcdef\"[..], &b\"abcdex\"[..]),\n            (&b\"abcdefg\"[..], &b\"abcdefx\"[..]),\n            (&b\"abcdefgh\"[..], &b\"abcdefgx\"[..]),\n            (&b\"abcdefghi\"[..], &b\"abcdefghx\"[..]),\n            (&b\"abcdefghij\"[..], &b\"abcdefghix\"[..]),\n            (&b\"abcdefghijk\"[..], &b\"abcdefghijx\"[..]),\n            (&b\"abcdefghijkl\"[..], &b\"abcdefghijkx\"[..]),\n            (&b\"abcdefghijklm\"[..], &b\"abcdefghijklx\"[..]),\n            (&b\"abcdefghijklmn\"[..], &b\"abcdefghijklmx\"[..]),\n        ];\n        for (x, y) in one_mismatch {\n            assert_eq!(x.len(), y.len(), \"lengths should match\");\n            assert!(!is_equal(x, y));\n            assert!(!is_equal(y, x));\n        }\n    }\n\n    #[test]\n    fn equals_yes() {\n        assert!(is_equal(b\"\", b\"\"));\n        assert!(is_equal(b\"a\", b\"a\"));\n        assert!(is_equal(b\"ab\", b\"ab\"));\n        assert!(is_equal(b\"abc\", b\"abc\"));\n        assert!(is_equal(b\"abcd\", b\"abcd\"));\n        assert!(is_equal(b\"abcde\", b\"abcde\"));\n        assert!(is_equal(b\"abcdef\", b\"abcdef\"));\n        assert!(is_equal(b\"abcdefg\", b\"abcdefg\"));\n        assert!(is_equal(b\"abcdefgh\", b\"abcdefgh\"));\n        assert!(is_equal(b\"abcdefghi\", b\"abcdefghi\"));\n    }\n\n    #[test]\n    fn prefix() {\n        assert!(is_prefix(b\"\", b\"\"));\n        assert!(is_prefix(b\"a\", b\"\"));\n        assert!(is_prefix(b\"ab\", b\"\"));\n        assert!(is_prefix(b\"foo\", b\"foo\"));\n        assert!(is_prefix(b\"foobar\", b\"foo\"));\n\n        assert!(!is_prefix(b\"foo\", b\"fob\"));\n        assert!(!is_prefix(b\"foobar\", b\"fob\"));\n    }\n\n    #[test]\n    fn suffix() {\n        assert!(is_suffix(b\"\", b\"\"));\n        assert!(is_suffix(b\"a\", b\"\"));\n        assert!(is_suffix(b\"ab\", b\"\"));\n        assert!(is_suffix(b\"foo\", b\"foo\"));\n        assert!(is_suffix(b\"foobar\", b\"bar\"));\n\n        assert!(!is_suffix(b\"foo\", b\"goo\"));\n        assert!(!is_suffix(b\"foobar\", b\"gar\"));\n    }\n}\n"
  },
  {
    "path": "src/arch/all/packedpair/default_rank.rs",
    "content": "pub(crate) const RANK: [u8; 256] = [\n    55,  // '\\x00'\n    52,  // '\\x01'\n    51,  // '\\x02'\n    50,  // '\\x03'\n    49,  // '\\x04'\n    48,  // '\\x05'\n    47,  // '\\x06'\n    46,  // '\\x07'\n    45,  // '\\x08'\n    103, // '\\t'\n    242, // '\\n'\n    66,  // '\\x0b'\n    67,  // '\\x0c'\n    229, // '\\r'\n    44,  // '\\x0e'\n    43,  // '\\x0f'\n    42,  // '\\x10'\n    41,  // '\\x11'\n    40,  // '\\x12'\n    39,  // '\\x13'\n    38,  // '\\x14'\n    37,  // '\\x15'\n    36,  // '\\x16'\n    35,  // '\\x17'\n    34,  // '\\x18'\n    33,  // '\\x19'\n    56,  // '\\x1a'\n    32,  // '\\x1b'\n    31,  // '\\x1c'\n    30,  // '\\x1d'\n    29,  // '\\x1e'\n    28,  // '\\x1f'\n    255, // ' '\n    148, // '!'\n    164, // '\"'\n    149, // '#'\n    136, // '$'\n    160, // '%'\n    155, // '&'\n    173, // \"'\"\n    221, // '('\n    222, // ')'\n    134, // '*'\n    122, // '+'\n    232, // ','\n    202, // '-'\n    215, // '.'\n    224, // '/'\n    208, // '0'\n    220, // '1'\n    204, // '2'\n    187, // '3'\n    183, // '4'\n    179, // '5'\n    177, // '6'\n    168, // '7'\n    178, // '8'\n    200, // '9'\n    226, // ':'\n    195, // ';'\n    154, // '<'\n    184, // '='\n    174, // '>'\n    126, // '?'\n    120, // '@'\n    191, // 'A'\n    157, // 'B'\n    194, // 'C'\n    170, // 'D'\n    189, // 'E'\n    162, // 'F'\n    161, // 'G'\n    150, // 'H'\n    193, // 'I'\n    142, // 'J'\n    137, // 'K'\n    171, // 'L'\n    176, // 'M'\n    185, // 'N'\n    167, // 'O'\n    186, // 'P'\n    112, // 'Q'\n    175, // 'R'\n    192, // 'S'\n    188, // 'T'\n    156, // 'U'\n    140, // 'V'\n    143, // 'W'\n    123, // 'X'\n    133, // 'Y'\n    128, // 'Z'\n    147, // '['\n    138, // '\\\\'\n    146, // ']'\n    114, // '^'\n    223, // '_'\n    151, // '`'\n    249, // 'a'\n    216, // 'b'\n    238, // 'c'\n    236, // 'd'\n    253, // 'e'\n    227, // 'f'\n    218, // 'g'\n    230, // 'h'\n    247, // 'i'\n    135, // 'j'\n    180, // 'k'\n    241, // 'l'\n    233, // 'm'\n    246, // 'n'\n    244, // 'o'\n    231, // 'p'\n    139, // 'q'\n    245, // 'r'\n    243, // 's'\n    251, // 't'\n    235, // 'u'\n    201, // 'v'\n    196, // 'w'\n    240, // 'x'\n    214, // 'y'\n    152, // 'z'\n    182, // '{'\n    205, // '|'\n    181, // '}'\n    127, // '~'\n    27,  // '\\x7f'\n    212, // '\\x80'\n    211, // '\\x81'\n    210, // '\\x82'\n    213, // '\\x83'\n    228, // '\\x84'\n    197, // '\\x85'\n    169, // '\\x86'\n    159, // '\\x87'\n    131, // '\\x88'\n    172, // '\\x89'\n    105, // '\\x8a'\n    80,  // '\\x8b'\n    98,  // '\\x8c'\n    96,  // '\\x8d'\n    97,  // '\\x8e'\n    81,  // '\\x8f'\n    207, // '\\x90'\n    145, // '\\x91'\n    116, // '\\x92'\n    115, // '\\x93'\n    144, // '\\x94'\n    130, // '\\x95'\n    153, // '\\x96'\n    121, // '\\x97'\n    107, // '\\x98'\n    132, // '\\x99'\n    109, // '\\x9a'\n    110, // '\\x9b'\n    124, // '\\x9c'\n    111, // '\\x9d'\n    82,  // '\\x9e'\n    108, // '\\x9f'\n    118, // '\\xa0'\n    141, // '¡'\n    113, // '¢'\n    129, // '£'\n    119, // '¤'\n    125, // '¥'\n    165, // '¦'\n    117, // '§'\n    92,  // '¨'\n    106, // '©'\n    83,  // 'ª'\n    72,  // '«'\n    99,  // '¬'\n    93,  // '\\xad'\n    65,  // '®'\n    79,  // '¯'\n    166, // '°'\n    237, // '±'\n    163, // '²'\n    199, // '³'\n    190, // '´'\n    225, // 'µ'\n    209, // '¶'\n    203, // '·'\n    198, // '¸'\n    217, // '¹'\n    219, // 'º'\n    206, // '»'\n    234, // '¼'\n    248, // '½'\n    158, // '¾'\n    239, // '¿'\n    255, // 'À'\n    255, // 'Á'\n    255, // 'Â'\n    255, // 'Ã'\n    255, // 'Ä'\n    255, // 'Å'\n    255, // 'Æ'\n    255, // 'Ç'\n    255, // 'È'\n    255, // 'É'\n    255, // 'Ê'\n    255, // 'Ë'\n    255, // 'Ì'\n    255, // 'Í'\n    255, // 'Î'\n    255, // 'Ï'\n    255, // 'Ð'\n    255, // 'Ñ'\n    255, // 'Ò'\n    255, // 'Ó'\n    255, // 'Ô'\n    255, // 'Õ'\n    255, // 'Ö'\n    255, // '×'\n    255, // 'Ø'\n    255, // 'Ù'\n    255, // 'Ú'\n    255, // 'Û'\n    255, // 'Ü'\n    255, // 'Ý'\n    255, // 'Þ'\n    255, // 'ß'\n    255, // 'à'\n    255, // 'á'\n    255, // 'â'\n    255, // 'ã'\n    255, // 'ä'\n    255, // 'å'\n    255, // 'æ'\n    255, // 'ç'\n    255, // 'è'\n    255, // 'é'\n    255, // 'ê'\n    255, // 'ë'\n    255, // 'ì'\n    255, // 'í'\n    255, // 'î'\n    255, // 'ï'\n    255, // 'ð'\n    255, // 'ñ'\n    255, // 'ò'\n    255, // 'ó'\n    255, // 'ô'\n    255, // 'õ'\n    255, // 'ö'\n    255, // '÷'\n    255, // 'ø'\n    255, // 'ù'\n    255, // 'ú'\n    255, // 'û'\n    255, // 'ü'\n    255, // 'ý'\n    255, // 'þ'\n    255, // 'ÿ'\n];\n"
  },
  {
    "path": "src/arch/all/packedpair/mod.rs",
    "content": "/*!\nProvides an architecture independent implementation of the \"packed pair\"\nalgorithm.\n\nThe \"packed pair\" algorithm is based on the [generic SIMD] algorithm. The main\ndifference is that it (by default) uses a background distribution of byte\nfrequencies to heuristically select the pair of bytes to search for. Note that\nthis module provides an architecture independent version that doesn't do as\ngood of a job keeping the search for candidates inside a SIMD hot path. It\nhowever can be good enough in many circumstances.\n\n[generic SIMD]: http://0x80.pl/articles/simd-strfind.html#first-and-last\n*/\n\nuse crate::memchr;\n\nmod default_rank;\n\n/// An architecture independent \"packed pair\" finder.\n///\n/// This finder picks two bytes that it believes have high predictive power for\n/// indicating an overall match of a needle. At search time, it reports offsets\n/// where the needle could match based on whether the pair of bytes it chose\n/// match.\n///\n/// This is architecture independent because it utilizes `memchr` to find the\n/// occurrence of one of the bytes in the pair, and then checks whether the\n/// second byte matches. If it does, in the case of [`Finder::find_prefilter`],\n/// the location at which the needle could match is returned.\n///\n/// It is generally preferred to use architecture specific routines for a\n/// \"packed pair\" prefilter, but this can be a useful fallback when the\n/// architecture independent routines are unavailable.\n#[derive(Clone, Copy, Debug)]\npub struct Finder {\n    pair: Pair,\n    byte1: u8,\n    byte2: u8,\n}\n\nimpl Finder {\n    /// Create a new prefilter that reports possible locations where the given\n    /// needle matches.\n    #[inline]\n    pub fn new(needle: &[u8]) -> Option<Finder> {\n        Finder::with_pair(needle, Pair::new(needle)?)\n    }\n\n    /// Create a new prefilter using the pair given.\n    ///\n    /// If the prefilter could not be constructed, then `None` is returned.\n    ///\n    /// This constructor permits callers to control precisely which pair of\n    /// bytes is used as a predicate.\n    #[inline]\n    pub fn with_pair(needle: &[u8], pair: Pair) -> Option<Finder> {\n        let byte1 = needle[usize::from(pair.index1())];\n        let byte2 = needle[usize::from(pair.index2())];\n        // Currently this can never fail so we could just return a Finder,\n        // but it's conceivable this could change.\n        Some(Finder { pair, byte1, byte2 })\n    }\n\n    /// Run this finder on the given haystack as a prefilter.\n    ///\n    /// If a candidate match is found, then an offset where the needle *could*\n    /// begin in the haystack is returned.\n    #[inline]\n    pub fn find_prefilter(&self, haystack: &[u8]) -> Option<usize> {\n        let mut i = 0;\n        let index1 = usize::from(self.pair.index1());\n        let index2 = usize::from(self.pair.index2());\n        loop {\n            // Use a fast vectorized implementation to skip to the next\n            // occurrence of the rarest byte (heuristically chosen) in the\n            // needle.\n            i += memchr(self.byte1, &haystack[i..])?;\n            let found = i;\n            i += 1;\n\n            // If we can't align our first byte match with the haystack, then a\n            // match is impossible.\n            let aligned1 = match found.checked_sub(index1) {\n                None => continue,\n                Some(aligned1) => aligned1,\n            };\n\n            // Now align the second byte match with the haystack. A mismatch\n            // means that a match is impossible.\n            let aligned2 = match aligned1.checked_add(index2) {\n                None => continue,\n                Some(aligned_index2) => aligned_index2,\n            };\n            if haystack.get(aligned2).map_or(true, |&b| b != self.byte2) {\n                continue;\n            }\n\n            // We've done what we can. There might be a match here.\n            return Some(aligned1);\n        }\n    }\n\n    /// Returns the pair of offsets (into the needle) used to check as a\n    /// predicate before confirming whether a needle exists at a particular\n    /// position.\n    #[inline]\n    pub fn pair(&self) -> &Pair {\n        &self.pair\n    }\n}\n\n/// A pair of byte offsets into a needle to use as a predicate.\n///\n/// This pair is used as a predicate to quickly filter out positions in a\n/// haystack in which a needle cannot match. In some cases, this pair can even\n/// be used in vector algorithms such that the vector algorithm only switches\n/// over to scalar code once this pair has been found.\n///\n/// A pair of offsets can be used in both substring search implementations and\n/// in prefilters. The former will report matches of a needle in a haystack\n/// where as the latter will only report possible matches of a needle.\n///\n/// The offsets are limited each to a maximum of 255 to keep memory usage low.\n/// Moreover, it's rarely advantageous to create a predicate using offsets\n/// greater than 255 anyway.\n///\n/// The only guarantee enforced on the pair of offsets is that they are not\n/// equivalent. It is not necessarily the case that `index1 < index2` for\n/// example. By convention, `index1` corresponds to the byte in the needle\n/// that is believed to be most the predictive. Note also that because of the\n/// requirement that the indices be both valid for the needle used to build\n/// the pair and not equal, it follows that a pair can only be constructed for\n/// needles with length at least 2.\n#[derive(Clone, Copy, Debug)]\npub struct Pair {\n    index1: u8,\n    index2: u8,\n}\n\nimpl Pair {\n    /// Create a new pair of offsets from the given needle.\n    ///\n    /// If a pair could not be created (for example, if the needle is too\n    /// short), then `None` is returned.\n    ///\n    /// This chooses the pair in the needle that is believed to be as\n    /// predictive of an overall match of the needle as possible.\n    #[inline]\n    pub fn new(needle: &[u8]) -> Option<Pair> {\n        Pair::with_ranker(needle, DefaultFrequencyRank)\n    }\n\n    /// Create a new pair of offsets from the given needle and ranker.\n    ///\n    /// This permits the caller to choose a background frequency distribution\n    /// with which bytes are selected. The idea is to select a pair of bytes\n    /// that is believed to strongly predict a match in the haystack. This\n    /// usually means selecting bytes that occur rarely in a haystack.\n    ///\n    /// If a pair could not be created (for example, if the needle is too\n    /// short), then `None` is returned.\n    #[inline]\n    pub fn with_ranker<R: HeuristicFrequencyRank>(\n        needle: &[u8],\n        ranker: R,\n    ) -> Option<Pair> {\n        if needle.len() <= 1 {\n            return None;\n        }\n        // Find the rarest two bytes. We make them distinct indices by\n        // construction. (The actual byte value may be the same in degenerate\n        // cases, but that's OK.)\n        let (mut rare1, mut index1) = (needle[0], 0);\n        let (mut rare2, mut index2) = (needle[1], 1);\n        if ranker.rank(rare2) < ranker.rank(rare1) {\n            core::mem::swap(&mut rare1, &mut rare2);\n            core::mem::swap(&mut index1, &mut index2);\n        }\n        let max = usize::from(core::u8::MAX);\n        for (i, &b) in needle.iter().enumerate().take(max).skip(2) {\n            if ranker.rank(b) < ranker.rank(rare1) {\n                rare2 = rare1;\n                index2 = index1;\n                rare1 = b;\n                index1 = u8::try_from(i).unwrap();\n            } else if b != rare1 && ranker.rank(b) < ranker.rank(rare2) {\n                rare2 = b;\n                index2 = u8::try_from(i).unwrap();\n            }\n        }\n        // While not strictly required for how a Pair is normally used, we\n        // really don't want these to be equivalent. If they were, it would\n        // reduce the effectiveness of candidate searching using these rare\n        // bytes by increasing the rate of false positives.\n        assert_ne!(index1, index2);\n        Some(Pair { index1, index2 })\n    }\n\n    /// Create a new pair using the offsets given for the needle given.\n    ///\n    /// This bypasses any sort of heuristic process for choosing the offsets\n    /// and permits the caller to choose the offsets themselves.\n    ///\n    /// Indices are limited to valid `u8` values so that a `Pair` uses less\n    /// memory. It is not possible to create a `Pair` with offsets bigger than\n    /// `u8::MAX`. It's likely that such a thing is not needed, but if it is,\n    /// it's suggested to build your own bespoke algorithm because you're\n    /// likely working on a very niche case. (File an issue if this suggestion\n    /// does not make sense to you.)\n    ///\n    /// If a pair could not be created (for example, if the needle is too\n    /// short), then `None` is returned.\n    #[inline]\n    pub fn with_indices(\n        needle: &[u8],\n        index1: u8,\n        index2: u8,\n    ) -> Option<Pair> {\n        // While not strictly required for how a Pair is normally used, we\n        // really don't want these to be equivalent. If they were, it would\n        // reduce the effectiveness of candidate searching using these rare\n        // bytes by increasing the rate of false positives.\n        if index1 == index2 {\n            return None;\n        }\n        // Similarly, invalid indices means the Pair is invalid too.\n        if usize::from(index1) >= needle.len() {\n            return None;\n        }\n        if usize::from(index2) >= needle.len() {\n            return None;\n        }\n        Some(Pair { index1, index2 })\n    }\n\n    /// Returns the first offset of the pair.\n    #[inline]\n    pub fn index1(&self) -> u8 {\n        self.index1\n    }\n\n    /// Returns the second offset of the pair.\n    #[inline]\n    pub fn index2(&self) -> u8 {\n        self.index2\n    }\n}\n\n/// This trait allows the user to customize the heuristic used to determine the\n/// relative frequency of a given byte in the dataset being searched.\n///\n/// The use of this trait can have a dramatic impact on performance depending\n/// on the type of data being searched. The details of why are explained in the\n/// docs of [`crate::memmem::Prefilter`]. To summarize, the core algorithm uses\n/// a prefilter to quickly identify candidate matches that are later verified\n/// more slowly. This prefilter is implemented in terms of trying to find\n/// `rare` bytes at specific offsets that will occur less frequently in the\n/// dataset. While the concept of a `rare` byte is similar for most datasets,\n/// there are some specific datasets (like binary executables) that have\n/// dramatically different byte distributions. For these datasets customizing\n/// the byte frequency heuristic can have a massive impact on performance, and\n/// might even need to be done at runtime.\n///\n/// The default implementation of `HeuristicFrequencyRank` reads from the\n/// static frequency table defined in `src/memmem/byte_frequencies.rs`. This\n/// is optimal for most inputs, so if you are unsure of the impact of using a\n/// custom `HeuristicFrequencyRank` you should probably just use the default.\n///\n/// # Example\n///\n/// ```\n/// use memchr::{\n///     arch::all::packedpair::HeuristicFrequencyRank,\n///     memmem::FinderBuilder,\n/// };\n///\n/// /// A byte-frequency table that is good for scanning binary executables.\n/// struct Binary;\n///\n/// impl HeuristicFrequencyRank for Binary {\n///     fn rank(&self, byte: u8) -> u8 {\n///         const TABLE: [u8; 256] = [\n///             255, 128, 61, 43, 50, 41, 27, 28, 57, 15, 21, 13, 24, 17, 17,\n///             89, 58, 16, 11, 7, 14, 23, 7, 6, 24, 9, 6, 5, 9, 4, 7, 16,\n///             68, 11, 9, 6, 88, 7, 4, 4, 23, 9, 4, 8, 8, 5, 10, 4, 30, 11,\n///             9, 24, 11, 5, 5, 5, 19, 11, 6, 17, 9, 9, 6, 8,\n///             48, 58, 11, 14, 53, 40, 9, 9, 254, 35, 3, 6, 52, 23, 6, 6, 27,\n///             4, 7, 11, 14, 13, 10, 11, 11, 5, 2, 10, 16, 12, 6, 19,\n///             19, 20, 5, 14, 16, 31, 19, 7, 14, 20, 4, 4, 19, 8, 18, 20, 24,\n///             1, 25, 19, 58, 29, 10, 5, 15, 20, 2, 2, 9, 4, 3, 5,\n///             51, 11, 4, 53, 23, 39, 6, 4, 13, 81, 4, 186, 5, 67, 3, 2, 15,\n///             0, 0, 1, 3, 2, 0, 0, 5, 0, 0, 0, 2, 0, 0, 0,\n///             12, 2, 1, 1, 3, 1, 1, 1, 6, 1, 2, 1, 3, 1, 1, 2, 9, 1, 1, 0,\n///             2, 2, 4, 4, 11, 6, 7, 3, 6, 9, 4, 5,\n///             46, 18, 8, 18, 17, 3, 8, 20, 16, 10, 3, 7, 175, 4, 6, 7, 13,\n///             3, 7, 3, 3, 1, 3, 3, 10, 3, 1, 5, 2, 0, 1, 2,\n///             16, 3, 5, 1, 6, 1, 1, 2, 58, 20, 3, 14, 12, 2, 1, 3, 16, 3, 5,\n///             8, 3, 1, 8, 6, 17, 6, 5, 3, 8, 6, 13, 175,\n///         ];\n///         TABLE[byte as usize]\n///     }\n/// }\n/// // Create a new finder with the custom heuristic.\n/// let finder = FinderBuilder::new()\n///     .build_forward_with_ranker(Binary, b\"\\x00\\x00\\xdd\\xdd\");\n/// // Find needle with custom heuristic.\n/// assert!(finder.find(b\"\\x00\\x00\\x00\\xdd\\xdd\").is_some());\n/// ```\npub trait HeuristicFrequencyRank {\n    /// Return the heuristic frequency rank of the given byte. A lower rank\n    /// means the byte is believed to occur less frequently in the haystack.\n    ///\n    /// Some uses of this heuristic may treat arbitrary absolute rank values as\n    /// significant. For example, an implementation detail in this crate may\n    /// determine that heuristic prefilters are inappropriate if every byte in\n    /// the needle has a \"high\" rank.\n    fn rank(&self, byte: u8) -> u8;\n}\n\n/// The default byte frequency heuristic that is good for most haystacks.\npub(crate) struct DefaultFrequencyRank;\n\nimpl HeuristicFrequencyRank for DefaultFrequencyRank {\n    fn rank(&self, byte: u8) -> u8 {\n        self::default_rank::RANK[usize::from(byte)]\n    }\n}\n\n/// This permits passing any implementation of `HeuristicFrequencyRank` as a\n/// borrowed version of itself.\nimpl<'a, R> HeuristicFrequencyRank for &'a R\nwhere\n    R: HeuristicFrequencyRank,\n{\n    fn rank(&self, byte: u8) -> u8 {\n        (**self).rank(byte)\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn forward_packedpair() {\n        fn find(\n            haystack: &[u8],\n            needle: &[u8],\n            _index1: u8,\n            _index2: u8,\n        ) -> Option<Option<usize>> {\n            // We ignore the index positions requested since it winds up making\n            // this test too slow overall.\n            let f = Finder::new(needle)?;\n            Some(f.find_prefilter(haystack))\n        }\n        crate::tests::packedpair::Runner::new().fwd(find).run()\n    }\n}\n"
  },
  {
    "path": "src/arch/all/rabinkarp.rs",
    "content": "/*!\nAn implementation of the [Rabin-Karp substring search algorithm][rabinkarp].\n\nRabin-Karp works by creating a hash of the needle provided and then computing\na rolling hash for each needle sized window in the haystack. When the rolling\nhash matches the hash of the needle, a byte-wise comparison is done to check\nif a match exists. The worst case time complexity of Rabin-Karp is `O(m *\nn)` where `m ~ len(needle)` and `n ~ len(haystack)`. Its worst case space\ncomplexity is constant.\n\nThe main utility of Rabin-Karp is that the searcher can be constructed very\nquickly with very little memory. This makes it especially useful when searching\nfor small needles in small haystacks, as it might finish its search before a\nbeefier algorithm (like Two-Way) even starts.\n\n[rabinkarp]: https://en.wikipedia.org/wiki/Rabin%E2%80%93Karp_algorithm\n*/\n\n/*\n(This was the comment I wrote for this module originally when it was not\nexposed. The comment still looks useful, but it's a bit in the weeds, so it's\nnot public itself.)\n\nThis module implements the classical Rabin-Karp substring search algorithm,\nwith no extra frills. While its use would seem to break our time complexity\nguarantee of O(m+n) (RK's time complexity is O(mn)), we are careful to only\never use RK on a constant subset of haystacks. The main point here is that\nRK has good latency properties for small needles/haystacks. It's very quick\nto compute a needle hash and zip through the haystack when compared to\ninitializing Two-Way, for example. And this is especially useful for cases\nwhere the haystack is just too short for vector instructions to do much good.\n\nThe hashing function used here is the same one recommended by ESMAJ.\n\nAnother choice instead of Rabin-Karp would be Shift-Or. But its latency\nisn't quite as good since its preprocessing time is a bit more expensive\n(both in practice and in theory). However, perhaps Shift-Or has a place\nsomewhere else for short patterns. I think the main problem is that it\nrequires space proportional to the alphabet and the needle. If we, for\nexample, supported needles up to length 16, then the total table size would be\nlen(alphabet)*size_of::<u16>()==512 bytes. Which isn't exactly small, and it's\nprobably bad to put that on the stack. So ideally, we'd throw it on the heap,\nbut we'd really like to write as much code without using alloc/std as possible.\nBut maybe it's worth the special casing. It's a TODO to benchmark.\n\nWikipedia has a decent explanation, if a bit heavy on the theory:\nhttps://en.wikipedia.org/wiki/Rabin%E2%80%93Karp_algorithm\n\nBut ESMAJ provides something a bit more concrete:\nhttp://www-igm.univ-mlv.fr/~lecroq/string/node5.html\n\nFinally, aho-corasick uses Rabin-Karp for multiple pattern match in some cases:\nhttps://github.com/BurntSushi/aho-corasick/blob/3852632f10587db0ff72ef29e88d58bf305a0946/src/packed/rabinkarp.rs\n*/\n\nuse crate::ext::Pointer;\n\n/// A forward substring searcher using the Rabin-Karp algorithm.\n///\n/// Note that, as a lower level API, a `Finder` does not have access to the\n/// needle it was constructed with. For this reason, executing a search\n/// with a `Finder` requires passing both the needle and the haystack,\n/// where the needle is exactly equivalent to the one given to the `Finder`\n/// at construction time. This design was chosen so that callers can have\n/// more precise control over where and how many times a needle is stored.\n/// For example, in cases where Rabin-Karp is just one of several possible\n/// substring search algorithms.\n#[derive(Clone, Debug)]\npub struct Finder {\n    /// The actual hash.\n    hash: Hash,\n    /// The factor needed to multiply a byte by in order to subtract it from\n    /// the hash. It is defined to be 2^(n-1) (using wrapping exponentiation),\n    /// where n is the length of the needle. This is how we \"remove\" a byte\n    /// from the hash once the hash window rolls past it.\n    hash_2pow: u32,\n}\n\nimpl Finder {\n    /// Create a new Rabin-Karp forward searcher for the given `needle`.\n    ///\n    /// The needle may be empty. The empty needle matches at every byte offset.\n    ///\n    /// Note that callers must pass the same needle to all search calls using\n    /// this `Finder`.\n    #[inline]\n    pub fn new(needle: &[u8]) -> Finder {\n        let mut s = Finder { hash: Hash::new(), hash_2pow: 1 };\n        let first_byte = match needle.first() {\n            None => return s,\n            Some(&first_byte) => first_byte,\n        };\n        s.hash.add(first_byte);\n        for b in needle.iter().copied().skip(1) {\n            s.hash.add(b);\n            s.hash_2pow = s.hash_2pow.wrapping_shl(1);\n        }\n        s\n    }\n\n    /// Return the first occurrence of the `needle` in the `haystack`\n    /// given. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The `needle` provided must match the needle given to this finder at\n    /// construction time.\n    ///\n    /// The maximum value this can return is `haystack.len()`, which can only\n    /// occur when the needle and haystack both have length zero. Otherwise,\n    /// for non-empty haystacks, the maximum value is `haystack.len() - 1`.\n    #[inline]\n    pub fn find(&self, haystack: &[u8], needle: &[u8]) -> Option<usize> {\n        unsafe {\n            let hstart = haystack.as_ptr();\n            let hend = hstart.add(haystack.len());\n            let nstart = needle.as_ptr();\n            let nend = nstart.add(needle.len());\n            let found = self.find_raw(hstart, hend, nstart, nend)?;\n            Some(found.distance(hstart))\n        }\n    }\n\n    /// Like `find`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `<= end`. The pointer returned is only ever equivalent\n    /// to `end` when both the needle and haystack are empty. (That is, the\n    /// empty string matches the empty string.)\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// Note that `start` and `end` below refer to both pairs of pointers given\n    /// to this routine. That is, the conditions apply to both `hstart`/`hend`\n    /// and `nstart`/`nend`.\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    /// * It must be the case that `start <= end`.\n    #[inline]\n    pub unsafe fn find_raw(\n        &self,\n        hstart: *const u8,\n        hend: *const u8,\n        nstart: *const u8,\n        nend: *const u8,\n    ) -> Option<*const u8> {\n        let hlen = hend.distance(hstart);\n        let nlen = nend.distance(nstart);\n        if nlen > hlen {\n            return None;\n        }\n        let mut cur = hstart;\n        let end = hend.sub(nlen);\n        let mut hash = Hash::forward(cur, cur.add(nlen));\n        loop {\n            if self.hash == hash && is_equal_raw(cur, nstart, nlen) {\n                return Some(cur);\n            }\n            if cur >= end {\n                return None;\n            }\n            hash.roll(self, cur.read(), cur.add(nlen).read());\n            cur = cur.add(1);\n        }\n    }\n}\n\n/// A reverse substring searcher using the Rabin-Karp algorithm.\n#[derive(Clone, Debug)]\npub struct FinderRev(Finder);\n\nimpl FinderRev {\n    /// Create a new Rabin-Karp reverse searcher for the given `needle`.\n    #[inline]\n    pub fn new(needle: &[u8]) -> FinderRev {\n        let mut s = FinderRev(Finder { hash: Hash::new(), hash_2pow: 1 });\n        let last_byte = match needle.last() {\n            None => return s,\n            Some(&last_byte) => last_byte,\n        };\n        s.0.hash.add(last_byte);\n        for b in needle.iter().rev().copied().skip(1) {\n            s.0.hash.add(b);\n            s.0.hash_2pow = s.0.hash_2pow.wrapping_shl(1);\n        }\n        s\n    }\n\n    /// Return the last occurrence of the `needle` in the `haystack`\n    /// given. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The `needle` provided must match the needle given to this finder at\n    /// construction time.\n    ///\n    /// The maximum value this can return is `haystack.len()`, which can only\n    /// occur when the needle and haystack both have length zero. Otherwise,\n    /// for non-empty haystacks, the maximum value is `haystack.len() - 1`.\n    #[inline]\n    pub fn rfind(&self, haystack: &[u8], needle: &[u8]) -> Option<usize> {\n        unsafe {\n            let hstart = haystack.as_ptr();\n            let hend = hstart.add(haystack.len());\n            let nstart = needle.as_ptr();\n            let nend = nstart.add(needle.len());\n            let found = self.rfind_raw(hstart, hend, nstart, nend)?;\n            Some(found.distance(hstart))\n        }\n    }\n\n    /// Like `rfind`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `<= end`. The pointer returned is only ever equivalent\n    /// to `end` when both the needle and haystack are empty. (That is, the\n    /// empty string matches the empty string.)\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// Note that `start` and `end` below refer to both pairs of pointers given\n    /// to this routine. That is, the conditions apply to both `hstart`/`hend`\n    /// and `nstart`/`nend`.\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    /// * It must be the case that `start <= end`.\n    #[inline]\n    pub unsafe fn rfind_raw(\n        &self,\n        hstart: *const u8,\n        hend: *const u8,\n        nstart: *const u8,\n        nend: *const u8,\n    ) -> Option<*const u8> {\n        let hlen = hend.distance(hstart);\n        let nlen = nend.distance(nstart);\n        if nlen > hlen {\n            return None;\n        }\n        let mut cur = hend.sub(nlen);\n        let start = hstart;\n        let mut hash = Hash::reverse(cur, cur.add(nlen));\n        loop {\n            if self.0.hash == hash && is_equal_raw(cur, nstart, nlen) {\n                return Some(cur);\n            }\n            if cur <= start {\n                return None;\n            }\n            cur = cur.sub(1);\n            hash.roll(&self.0, cur.add(nlen).read(), cur.read());\n        }\n    }\n}\n\n/// Whether RK is believed to be very fast for the given needle/haystack.\n#[inline]\npub(crate) fn is_fast(haystack: &[u8], _needle: &[u8]) -> bool {\n    haystack.len() < 16\n}\n\n/// A Rabin-Karp hash. This might represent the hash of a needle, or the hash\n/// of a rolling window in the haystack.\n#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]\nstruct Hash(u32);\n\nimpl Hash {\n    /// Create a new hash that represents the empty string.\n    #[inline(always)]\n    fn new() -> Hash {\n        Hash(0)\n    }\n\n    /// Create a new hash from the bytes given for use in forward searches.\n    ///\n    /// # Safety\n    ///\n    /// The given pointers must be valid to read from within their range.\n    #[inline(always)]\n    unsafe fn forward(mut start: *const u8, end: *const u8) -> Hash {\n        let mut hash = Hash::new();\n        while start < end {\n            hash.add(start.read());\n            start = start.add(1);\n        }\n        hash\n    }\n\n    /// Create a new hash from the bytes given for use in reverse searches.\n    ///\n    /// # Safety\n    ///\n    /// The given pointers must be valid to read from within their range.\n    #[inline(always)]\n    unsafe fn reverse(start: *const u8, mut end: *const u8) -> Hash {\n        let mut hash = Hash::new();\n        while start < end {\n            end = end.sub(1);\n            hash.add(end.read());\n        }\n        hash\n    }\n\n    /// Add 'new' and remove 'old' from this hash. The given needle hash should\n    /// correspond to the hash computed for the needle being searched for.\n    ///\n    /// This is meant to be used when the rolling window of the haystack is\n    /// advanced.\n    #[inline(always)]\n    fn roll(&mut self, finder: &Finder, old: u8, new: u8) {\n        self.del(finder, old);\n        self.add(new);\n    }\n\n    /// Add a byte to this hash.\n    #[inline(always)]\n    fn add(&mut self, byte: u8) {\n        self.0 = self.0.wrapping_shl(1).wrapping_add(u32::from(byte));\n    }\n\n    /// Remove a byte from this hash. The given needle hash should correspond\n    /// to the hash computed for the needle being searched for.\n    #[inline(always)]\n    fn del(&mut self, finder: &Finder, byte: u8) {\n        let factor = finder.hash_2pow;\n        self.0 = self.0.wrapping_sub(u32::from(byte).wrapping_mul(factor));\n    }\n}\n\n/// Returns true when `x[i] == y[i]` for all `0 <= i < n`.\n///\n/// We forcefully don't inline this to hint at the compiler that it is unlikely\n/// to be called. This causes the inner rabinkarp loop above to be a bit\n/// tighter and leads to some performance improvement. See the\n/// memmem/krate/prebuilt/sliceslice-words/words benchmark.\n///\n/// # Safety\n///\n/// Same as `crate::arch::all::is_equal_raw`.\n#[cold]\n#[inline(never)]\nunsafe fn is_equal_raw(x: *const u8, y: *const u8, n: usize) -> bool {\n    crate::arch::all::is_equal_raw(x, y, n)\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    define_substring_forward_quickcheck!(|h, n| Some(\n        Finder::new(n).find(h, n)\n    ));\n    define_substring_reverse_quickcheck!(|h, n| Some(\n        FinderRev::new(n).rfind(h, n)\n    ));\n\n    #[test]\n    fn forward() {\n        crate::tests::substring::Runner::new()\n            .fwd(|h, n| Some(Finder::new(n).find(h, n)))\n            .run();\n    }\n\n    #[test]\n    fn reverse() {\n        crate::tests::substring::Runner::new()\n            .rev(|h, n| Some(FinderRev::new(n).rfind(h, n)))\n            .run();\n    }\n}\n"
  },
  {
    "path": "src/arch/all/shiftor.rs",
    "content": "/*!\nAn implementation of the [Shift-Or substring search algorithm][shiftor].\n\n[shiftor]: https://en.wikipedia.org/wiki/Bitap_algorithm\n*/\n\nuse alloc::boxed::Box;\n\n/// The type of our mask.\n///\n/// While we don't expose anyway to configure this in the public API, if one\n/// really needs less memory usage or support for longer needles, then it is\n/// suggested to copy the code from this module and modify it to fit your\n/// needs. The code below is written to be correct regardless of whether Mask\n/// is a u8, u16, u32, u64 or u128.\ntype Mask = u16;\n\n/// A forward substring searcher using the Shift-Or algorithm.\n#[derive(Debug)]\npub struct Finder {\n    masks: Box<[Mask; 256]>,\n    needle_len: usize,\n}\n\nimpl Finder {\n    const MAX_NEEDLE_LEN: usize = (Mask::BITS - 1) as usize;\n\n    /// Create a new Shift-Or forward searcher for the given `needle`.\n    ///\n    /// The needle may be empty. The empty needle matches at every byte offset.\n    #[inline]\n    pub fn new(needle: &[u8]) -> Option<Finder> {\n        let needle_len = needle.len();\n        if needle_len > Finder::MAX_NEEDLE_LEN {\n            // A match is found when bit 7 is set in 'result' in the search\n            // routine below. So our needle can't be bigger than 7. We could\n            // permit bigger needles by using u16, u32 or u64 for our mask\n            // entries. But this is all we need for this example.\n            return None;\n        }\n        let mut searcher = Finder { masks: Box::from([!0; 256]), needle_len };\n        for (i, &byte) in needle.iter().enumerate() {\n            searcher.masks[usize::from(byte)] &= !(1 << i);\n        }\n        Some(searcher)\n    }\n\n    /// Return the first occurrence of the needle given to `Finder::new` in\n    /// the `haystack` given. If no such occurrence exists, then `None` is\n    /// returned.\n    ///\n    /// Unlike most other substring search implementations in this crate, this\n    /// finder does not require passing the needle at search time. A match can\n    /// be determined without the needle at all since the required information\n    /// is already encoded into this finder at construction time.\n    ///\n    /// The maximum value this can return is `haystack.len()`, which can only\n    /// occur when the needle and haystack both have length zero. Otherwise,\n    /// for non-empty haystacks, the maximum value is `haystack.len() - 1`.\n    #[inline]\n    pub fn find(&self, haystack: &[u8]) -> Option<usize> {\n        if self.needle_len == 0 {\n            return Some(0);\n        }\n        let mut result = !1;\n        for (i, &byte) in haystack.iter().enumerate() {\n            result |= self.masks[usize::from(byte)];\n            result <<= 1;\n            if result & (1 << self.needle_len) == 0 {\n                return Some(i + 1 - self.needle_len);\n            }\n        }\n        None\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    define_substring_forward_quickcheck!(|h, n| Some(Finder::new(n)?.find(h)));\n\n    #[test]\n    fn forward() {\n        crate::tests::substring::Runner::new()\n            .fwd(|h, n| Some(Finder::new(n)?.find(h)))\n            .run();\n    }\n}\n"
  },
  {
    "path": "src/arch/all/twoway.rs",
    "content": "/*!\nAn implementation of the [Two-Way substring search algorithm][two-way].\n\n[`Finder`] can be built for forward searches, while [`FinderRev`] can be built\nfor reverse searches.\n\nTwo-Way makes for a nice general purpose substring search algorithm because of\nits time and space complexity properties. It also performs well in practice.\nNamely, with `m = len(needle)` and `n = len(haystack)`, Two-Way takes `O(m)`\ntime to create a finder, `O(1)` space and `O(n)` search time. In other words,\nthe preprocessing step is quick, doesn't require any heap memory and the worst\ncase search time is guaranteed to be linear in the haystack regardless of the\nsize of the needle.\n\nWhile vector algorithms will usually beat Two-Way handedly, vector algorithms\nalso usually have pathological or edge cases that are better handled by Two-Way.\nMoreover, not all targets support vector algorithms or implementations for them\nsimply may not exist yet.\n\nTwo-Way can be found in the `memmem` implementations in at least [GNU libc] and\n[musl].\n\n[two-way]: https://en.wikipedia.org/wiki/Two-way_string-matching_algorithm\n[GNU libc]: https://www.gnu.org/software/libc/\n[musl]: https://www.musl-libc.org/\n*/\n\nuse core::cmp;\n\nuse crate::{\n    arch::all::{is_prefix, is_suffix},\n    memmem::Pre,\n};\n\n/// A forward substring searcher that uses the Two-Way algorithm.\n#[derive(Clone, Copy, Debug)]\npub struct Finder(TwoWay);\n\n/// A reverse substring searcher that uses the Two-Way algorithm.\n#[derive(Clone, Copy, Debug)]\npub struct FinderRev(TwoWay);\n\n/// An implementation of the TwoWay substring search algorithm.\n///\n/// This searcher supports forward and reverse search, although not\n/// simultaneously. It runs in `O(n + m)` time and `O(1)` space, where\n/// `n ~ len(needle)` and `m ~ len(haystack)`.\n///\n/// The implementation here roughly matches that which was developed by\n/// Crochemore and Perrin in their 1991 paper \"Two-way string-matching.\" The\n/// changes in this implementation are 1) the use of zero-based indices, 2) a\n/// heuristic skip table based on the last byte (borrowed from Rust's standard\n/// library) and 3) the addition of heuristics for a fast skip loop. For (3),\n/// callers can pass any kind of prefilter they want, but usually it's one\n/// based on a heuristic that uses an approximate background frequency of bytes\n/// to choose rare bytes to quickly look for candidate match positions. Note\n/// though that currently, this prefilter functionality is not exposed directly\n/// in the public API. (File an issue if you want it and provide a use case\n/// please.)\n///\n/// The heuristic for fast skipping is automatically shut off if it's\n/// detected to be ineffective at search time. Generally, this only occurs in\n/// pathological cases. But this is generally necessary in order to preserve\n/// a `O(n + m)` time bound.\n///\n/// The code below is fairly complex and not obviously correct at all. It's\n/// likely necessary to read the Two-Way paper cited above in order to fully\n/// grok this code. The essence of it is:\n///\n/// 1. Do something to detect a \"critical\" position in the needle.\n/// 2. For the current position in the haystack, look if `needle[critical..]`\n/// matches at that position.\n/// 3. If so, look if `needle[..critical]` matches.\n/// 4. If a mismatch occurs, shift the search by some amount based on the\n/// critical position and a pre-computed shift.\n///\n/// This type is wrapped in the forward and reverse finders that expose\n/// consistent forward or reverse APIs.\n#[derive(Clone, Copy, Debug)]\nstruct TwoWay {\n    /// A small bitset used as a quick prefilter (in addition to any prefilter\n    /// given by the caller). Namely, a bit `i` is set if and only if `b%64==i`\n    /// for any `b == needle[i]`.\n    ///\n    /// When used as a prefilter, if the last byte at the current candidate\n    /// position is NOT in this set, then we can skip that entire candidate\n    /// position (the length of the needle). This is essentially the shift\n    /// trick found in Boyer-Moore, but only applied to bytes that don't appear\n    /// in the needle.\n    ///\n    /// N.B. This trick was inspired by something similar in std's\n    /// implementation of Two-Way.\n    byteset: ApproximateByteSet,\n    /// A critical position in needle. Specifically, this position corresponds\n    /// to beginning of either the minimal or maximal suffix in needle. (N.B.\n    /// See SuffixType below for why \"minimal\" isn't quite the correct word\n    /// here.)\n    ///\n    /// This is the position at which every search begins. Namely, search\n    /// starts by scanning text to the right of this position, and only if\n    /// there's a match does the text to the left of this position get scanned.\n    critical_pos: usize,\n    /// The amount we shift by in the Two-Way search algorithm. This\n    /// corresponds to the \"small period\" and \"large period\" cases.\n    shift: Shift,\n}\n\nimpl Finder {\n    /// Create a searcher that finds occurrences of the given `needle`.\n    ///\n    /// An empty `needle` results in a match at every position in a haystack,\n    /// including at `haystack.len()`.\n    #[inline]\n    pub fn new(needle: &[u8]) -> Finder {\n        let byteset = ApproximateByteSet::new(needle);\n        let min_suffix = Suffix::forward(needle, SuffixKind::Minimal);\n        let max_suffix = Suffix::forward(needle, SuffixKind::Maximal);\n        let (period_lower_bound, critical_pos) =\n            if min_suffix.pos > max_suffix.pos {\n                (min_suffix.period, min_suffix.pos)\n            } else {\n                (max_suffix.period, max_suffix.pos)\n            };\n        let shift = Shift::forward(needle, period_lower_bound, critical_pos);\n        Finder(TwoWay { byteset, critical_pos, shift })\n    }\n\n    /// Returns the first occurrence of `needle` in the given `haystack`, or\n    /// `None` if no such occurrence could be found.\n    ///\n    /// The `needle` given must be the same as the `needle` provided to\n    /// [`Finder::new`].\n    ///\n    /// An empty `needle` results in a match at every position in a haystack,\n    /// including at `haystack.len()`.\n    #[inline]\n    pub fn find(&self, haystack: &[u8], needle: &[u8]) -> Option<usize> {\n        self.find_with_prefilter(None, haystack, needle)\n    }\n\n    /// This is like [`Finder::find`], but it accepts a prefilter for\n    /// accelerating searches.\n    ///\n    /// Currently this is not exposed in the public API because, at the time\n    /// of writing, I didn't want to spend time thinking about how to expose\n    /// the prefilter infrastructure (if at all). If you have a compelling use\n    /// case for exposing this routine, please create an issue. Do *not* open\n    /// a PR that just exposes `Pre` and friends. Exporting this routine will\n    /// require API design.\n    #[inline(always)]\n    pub(crate) fn find_with_prefilter(\n        &self,\n        pre: Option<Pre<'_>>,\n        haystack: &[u8],\n        needle: &[u8],\n    ) -> Option<usize> {\n        match self.0.shift {\n            Shift::Small { period } => {\n                self.find_small_imp(pre, haystack, needle, period)\n            }\n            Shift::Large { shift } => {\n                self.find_large_imp(pre, haystack, needle, shift)\n            }\n        }\n    }\n\n    // Each of the two search implementations below can be accelerated by a\n    // prefilter, but it is not always enabled. To avoid its overhead when\n    // its disabled, we explicitly inline each search implementation based on\n    // whether a prefilter will be used or not. The decision on which to use\n    // is made in the parent meta searcher.\n\n    #[inline(always)]\n    fn find_small_imp(\n        &self,\n        mut pre: Option<Pre<'_>>,\n        haystack: &[u8],\n        needle: &[u8],\n        period: usize,\n    ) -> Option<usize> {\n        let mut pos = 0;\n        let mut shift = 0;\n        let last_byte_pos = match needle.len().checked_sub(1) {\n            None => return Some(pos),\n            Some(last_byte) => last_byte,\n        };\n        while pos + needle.len() <= haystack.len() {\n            let mut i = cmp::max(self.0.critical_pos, shift);\n            if let Some(pre) = pre.as_mut() {\n                if pre.is_effective() {\n                    pos += pre.find(&haystack[pos..])?;\n                    shift = 0;\n                    i = self.0.critical_pos;\n                    if pos + needle.len() > haystack.len() {\n                        return None;\n                    }\n                }\n            }\n            if !self.0.byteset.contains(haystack[pos + last_byte_pos]) {\n                pos += needle.len();\n                shift = 0;\n                continue;\n            }\n            while i < needle.len() && needle[i] == haystack[pos + i] {\n                i += 1;\n            }\n            if i < needle.len() {\n                pos += i - self.0.critical_pos + 1;\n                shift = 0;\n            } else {\n                let mut j = self.0.critical_pos;\n                while j > shift && needle[j] == haystack[pos + j] {\n                    j -= 1;\n                }\n                if j <= shift && needle[shift] == haystack[pos + shift] {\n                    return Some(pos);\n                }\n                pos += period;\n                shift = needle.len() - period;\n            }\n        }\n        None\n    }\n\n    #[inline(always)]\n    fn find_large_imp(\n        &self,\n        mut pre: Option<Pre<'_>>,\n        haystack: &[u8],\n        needle: &[u8],\n        shift: usize,\n    ) -> Option<usize> {\n        let mut pos = 0;\n        let last_byte_pos = match needle.len().checked_sub(1) {\n            None => return Some(pos),\n            Some(last_byte) => last_byte,\n        };\n        'outer: while pos + needle.len() <= haystack.len() {\n            if let Some(pre) = pre.as_mut() {\n                if pre.is_effective() {\n                    pos += pre.find(&haystack[pos..])?;\n                    if pos + needle.len() > haystack.len() {\n                        return None;\n                    }\n                }\n            }\n\n            if !self.0.byteset.contains(haystack[pos + last_byte_pos]) {\n                pos += needle.len();\n                continue;\n            }\n            let mut i = self.0.critical_pos;\n            while i < needle.len() && needle[i] == haystack[pos + i] {\n                i += 1;\n            }\n            if i < needle.len() {\n                pos += i - self.0.critical_pos + 1;\n            } else {\n                for j in (0..self.0.critical_pos).rev() {\n                    if needle[j] != haystack[pos + j] {\n                        pos += shift;\n                        continue 'outer;\n                    }\n                }\n                return Some(pos);\n            }\n        }\n        None\n    }\n}\n\nimpl FinderRev {\n    /// Create a searcher that finds occurrences of the given `needle`.\n    ///\n    /// An empty `needle` results in a match at every position in a haystack,\n    /// including at `haystack.len()`.\n    #[inline]\n    pub fn new(needle: &[u8]) -> FinderRev {\n        let byteset = ApproximateByteSet::new(needle);\n        let min_suffix = Suffix::reverse(needle, SuffixKind::Minimal);\n        let max_suffix = Suffix::reverse(needle, SuffixKind::Maximal);\n        let (period_lower_bound, critical_pos) =\n            if min_suffix.pos < max_suffix.pos {\n                (min_suffix.period, min_suffix.pos)\n            } else {\n                (max_suffix.period, max_suffix.pos)\n            };\n        let shift = Shift::reverse(needle, period_lower_bound, critical_pos);\n        FinderRev(TwoWay { byteset, critical_pos, shift })\n    }\n\n    /// Returns the last occurrence of `needle` in the given `haystack`, or\n    /// `None` if no such occurrence could be found.\n    ///\n    /// The `needle` given must be the same as the `needle` provided to\n    /// [`FinderRev::new`].\n    ///\n    /// An empty `needle` results in a match at every position in a haystack,\n    /// including at `haystack.len()`.\n    #[inline]\n    pub fn rfind(&self, haystack: &[u8], needle: &[u8]) -> Option<usize> {\n        // For the reverse case, we don't use a prefilter. It's plausible that\n        // perhaps we should, but it's a lot of additional code to do it, and\n        // it's not clear that it's actually worth it. If you have a really\n        // compelling use case for this, please file an issue.\n        match self.0.shift {\n            Shift::Small { period } => {\n                self.rfind_small_imp(haystack, needle, period)\n            }\n            Shift::Large { shift } => {\n                self.rfind_large_imp(haystack, needle, shift)\n            }\n        }\n    }\n\n    #[inline(always)]\n    fn rfind_small_imp(\n        &self,\n        haystack: &[u8],\n        needle: &[u8],\n        period: usize,\n    ) -> Option<usize> {\n        let nlen = needle.len();\n        let mut pos = haystack.len();\n        let mut shift = nlen;\n        let first_byte = match needle.first() {\n            None => return Some(pos),\n            Some(&first_byte) => first_byte,\n        };\n        while pos >= nlen {\n            if !self.0.byteset.contains(haystack[pos - nlen]) {\n                pos -= nlen;\n                shift = nlen;\n                continue;\n            }\n            let mut i = cmp::min(self.0.critical_pos, shift);\n            while i > 0 && needle[i - 1] == haystack[pos - nlen + i - 1] {\n                i -= 1;\n            }\n            if i > 0 || first_byte != haystack[pos - nlen] {\n                pos -= self.0.critical_pos - i + 1;\n                shift = nlen;\n            } else {\n                let mut j = self.0.critical_pos;\n                while j < shift && needle[j] == haystack[pos - nlen + j] {\n                    j += 1;\n                }\n                if j >= shift {\n                    return Some(pos - nlen);\n                }\n                pos -= period;\n                shift = period;\n            }\n        }\n        None\n    }\n\n    #[inline(always)]\n    fn rfind_large_imp(\n        &self,\n        haystack: &[u8],\n        needle: &[u8],\n        shift: usize,\n    ) -> Option<usize> {\n        let nlen = needle.len();\n        let mut pos = haystack.len();\n        let first_byte = match needle.first() {\n            None => return Some(pos),\n            Some(&first_byte) => first_byte,\n        };\n        while pos >= nlen {\n            if !self.0.byteset.contains(haystack[pos - nlen]) {\n                pos -= nlen;\n                continue;\n            }\n            let mut i = self.0.critical_pos;\n            while i > 0 && needle[i - 1] == haystack[pos - nlen + i - 1] {\n                i -= 1;\n            }\n            if i > 0 || first_byte != haystack[pos - nlen] {\n                pos -= self.0.critical_pos - i + 1;\n            } else {\n                let mut j = self.0.critical_pos;\n                while j < nlen && needle[j] == haystack[pos - nlen + j] {\n                    j += 1;\n                }\n                if j == nlen {\n                    return Some(pos - nlen);\n                }\n                pos -= shift;\n            }\n        }\n        None\n    }\n}\n\n/// A representation of the amount we're allowed to shift by during Two-Way\n/// search.\n///\n/// When computing a critical factorization of the needle, we find the position\n/// of the critical factorization by finding the needle's maximal (or minimal)\n/// suffix, along with the period of that suffix. It turns out that the period\n/// of that suffix is a lower bound on the period of the needle itself.\n///\n/// This lower bound is equivalent to the actual period of the needle in\n/// some cases. To describe that case, we denote the needle as `x` where\n/// `x = uv` and `v` is the lexicographic maximal suffix of `v`. The lower\n/// bound given here is always the period of `v`, which is `<= period(x)`. The\n/// case where `period(v) == period(x)` occurs when `len(u) < (len(x) / 2)` and\n/// where `u` is a suffix of `v[0..period(v)]`.\n///\n/// This case is important because the search algorithm for when the\n/// periods are equivalent is slightly different than the search algorithm\n/// for when the periods are not equivalent. In particular, when they aren't\n/// equivalent, we know that the period of the needle is no less than half its\n/// length. In this case, we shift by an amount less than or equal to the\n/// period of the needle (determined by the maximum length of the components\n/// of the critical factorization of `x`, i.e., `max(len(u), len(v))`)..\n///\n/// The above two cases are represented by the variants below. Each entails\n/// a different instantiation of the Two-Way search algorithm.\n///\n/// N.B. If we could find a way to compute the exact period in all cases,\n/// then we could collapse this case analysis and simplify the algorithm. The\n/// Two-Way paper suggests this is possible, but more reading is required to\n/// grok why the authors didn't pursue that path.\n#[derive(Clone, Copy, Debug)]\nenum Shift {\n    Small { period: usize },\n    Large { shift: usize },\n}\n\nimpl Shift {\n    /// Compute the shift for a given needle in the forward direction.\n    ///\n    /// This requires a lower bound on the period and a critical position.\n    /// These can be computed by extracting both the minimal and maximal\n    /// lexicographic suffixes, and choosing the right-most starting position.\n    /// The lower bound on the period is then the period of the chosen suffix.\n    fn forward(\n        needle: &[u8],\n        period_lower_bound: usize,\n        critical_pos: usize,\n    ) -> Shift {\n        let large = cmp::max(critical_pos, needle.len() - critical_pos);\n        if critical_pos * 2 >= needle.len() {\n            return Shift::Large { shift: large };\n        }\n\n        let (u, v) = needle.split_at(critical_pos);\n        if !is_suffix(&v[..period_lower_bound], u) {\n            return Shift::Large { shift: large };\n        }\n        Shift::Small { period: period_lower_bound }\n    }\n\n    /// Compute the shift for a given needle in the reverse direction.\n    ///\n    /// This requires a lower bound on the period and a critical position.\n    /// These can be computed by extracting both the minimal and maximal\n    /// lexicographic suffixes, and choosing the left-most starting position.\n    /// The lower bound on the period is then the period of the chosen suffix.\n    fn reverse(\n        needle: &[u8],\n        period_lower_bound: usize,\n        critical_pos: usize,\n    ) -> Shift {\n        let large = cmp::max(critical_pos, needle.len() - critical_pos);\n        if (needle.len() - critical_pos) * 2 >= needle.len() {\n            return Shift::Large { shift: large };\n        }\n\n        let (v, u) = needle.split_at(critical_pos);\n        if !is_prefix(&v[v.len() - period_lower_bound..], u) {\n            return Shift::Large { shift: large };\n        }\n        Shift::Small { period: period_lower_bound }\n    }\n}\n\n/// A suffix extracted from a needle along with its period.\n#[derive(Debug)]\nstruct Suffix {\n    /// The starting position of this suffix.\n    ///\n    /// If this is a forward suffix, then `&bytes[pos..]` can be used. If this\n    /// is a reverse suffix, then `&bytes[..pos]` can be used. That is, for\n    /// forward suffixes, this is an inclusive starting position, where as for\n    /// reverse suffixes, this is an exclusive ending position.\n    pos: usize,\n    /// The period of this suffix.\n    ///\n    /// Note that this is NOT necessarily the period of the string from which\n    /// this suffix comes from. (It is always less than or equal to the period\n    /// of the original string.)\n    period: usize,\n}\n\nimpl Suffix {\n    fn forward(needle: &[u8], kind: SuffixKind) -> Suffix {\n        // suffix represents our maximal (or minimal) suffix, along with\n        // its period.\n        let mut suffix = Suffix { pos: 0, period: 1 };\n        // The start of a suffix in `needle` that we are considering as a\n        // more maximal (or minimal) suffix than what's in `suffix`.\n        let mut candidate_start = 1;\n        // The current offset of our suffixes that we're comparing.\n        //\n        // When the characters at this offset are the same, then we mush on\n        // to the next position since no decision is possible. When the\n        // candidate's character is greater (or lesser) than the corresponding\n        // character than our current maximal (or minimal) suffix, then the\n        // current suffix is changed over to the candidate and we restart our\n        // search. Otherwise, the candidate suffix is no good and we restart\n        // our search on the next candidate.\n        //\n        // The three cases above correspond to the three cases in the loop\n        // below.\n        let mut offset = 0;\n\n        while candidate_start + offset < needle.len() {\n            let current = needle[suffix.pos + offset];\n            let candidate = needle[candidate_start + offset];\n            match kind.cmp(current, candidate) {\n                SuffixOrdering::Accept => {\n                    suffix = Suffix { pos: candidate_start, period: 1 };\n                    candidate_start += 1;\n                    offset = 0;\n                }\n                SuffixOrdering::Skip => {\n                    candidate_start += offset + 1;\n                    offset = 0;\n                    suffix.period = candidate_start - suffix.pos;\n                }\n                SuffixOrdering::Push => {\n                    if offset + 1 == suffix.period {\n                        candidate_start += suffix.period;\n                        offset = 0;\n                    } else {\n                        offset += 1;\n                    }\n                }\n            }\n        }\n        suffix\n    }\n\n    fn reverse(needle: &[u8], kind: SuffixKind) -> Suffix {\n        // See the comments in `forward` for how this works.\n        let mut suffix = Suffix { pos: needle.len(), period: 1 };\n        if needle.len() == 1 {\n            return suffix;\n        }\n        let mut candidate_start = match needle.len().checked_sub(1) {\n            None => return suffix,\n            Some(candidate_start) => candidate_start,\n        };\n        let mut offset = 0;\n\n        while offset < candidate_start {\n            let current = needle[suffix.pos - offset - 1];\n            let candidate = needle[candidate_start - offset - 1];\n            match kind.cmp(current, candidate) {\n                SuffixOrdering::Accept => {\n                    suffix = Suffix { pos: candidate_start, period: 1 };\n                    candidate_start -= 1;\n                    offset = 0;\n                }\n                SuffixOrdering::Skip => {\n                    candidate_start -= offset + 1;\n                    offset = 0;\n                    suffix.period = suffix.pos - candidate_start;\n                }\n                SuffixOrdering::Push => {\n                    if offset + 1 == suffix.period {\n                        candidate_start -= suffix.period;\n                        offset = 0;\n                    } else {\n                        offset += 1;\n                    }\n                }\n            }\n        }\n        suffix\n    }\n}\n\n/// The kind of suffix to extract.\n#[derive(Clone, Copy, Debug)]\nenum SuffixKind {\n    /// Extract the smallest lexicographic suffix from a string.\n    ///\n    /// Technically, this doesn't actually pick the smallest lexicographic\n    /// suffix. e.g., Given the choice between `a` and `aa`, this will choose\n    /// the latter over the former, even though `a < aa`. The reasoning for\n    /// this isn't clear from the paper, but it still smells like a minimal\n    /// suffix.\n    Minimal,\n    /// Extract the largest lexicographic suffix from a string.\n    ///\n    /// Unlike `Minimal`, this really does pick the maximum suffix. e.g., Given\n    /// the choice between `z` and `zz`, this will choose the latter over the\n    /// former.\n    Maximal,\n}\n\n/// The result of comparing corresponding bytes between two suffixes.\n#[derive(Clone, Copy, Debug)]\nenum SuffixOrdering {\n    /// This occurs when the given candidate byte indicates that the candidate\n    /// suffix is better than the current maximal (or minimal) suffix. That is,\n    /// the current candidate suffix should supplant the current maximal (or\n    /// minimal) suffix.\n    Accept,\n    /// This occurs when the given candidate byte excludes the candidate suffix\n    /// from being better than the current maximal (or minimal) suffix. That\n    /// is, the current candidate suffix should be dropped and the next one\n    /// should be considered.\n    Skip,\n    /// This occurs when no decision to accept or skip the candidate suffix\n    /// can be made, e.g., when corresponding bytes are equivalent. In this\n    /// case, the next corresponding bytes should be compared.\n    Push,\n}\n\nimpl SuffixKind {\n    /// Returns true if and only if the given candidate byte indicates that\n    /// it should replace the current suffix as the maximal (or minimal)\n    /// suffix.\n    fn cmp(self, current: u8, candidate: u8) -> SuffixOrdering {\n        use self::SuffixOrdering::*;\n\n        match self {\n            SuffixKind::Minimal if candidate < current => Accept,\n            SuffixKind::Minimal if candidate > current => Skip,\n            SuffixKind::Minimal => Push,\n            SuffixKind::Maximal if candidate > current => Accept,\n            SuffixKind::Maximal if candidate < current => Skip,\n            SuffixKind::Maximal => Push,\n        }\n    }\n}\n\n/// A bitset used to track whether a particular byte exists in a needle or not.\n///\n/// Namely, bit 'i' is set if and only if byte%64==i for any byte in the\n/// needle. If a particular byte in the haystack is NOT in this set, then one\n/// can conclude that it is also not in the needle, and thus, one can advance\n/// in the haystack by needle.len() bytes.\n#[derive(Clone, Copy, Debug)]\nstruct ApproximateByteSet(u64);\n\nimpl ApproximateByteSet {\n    /// Create a new set from the given needle.\n    fn new(needle: &[u8]) -> ApproximateByteSet {\n        let mut bits = 0;\n        for &b in needle {\n            bits |= 1 << (b % 64);\n        }\n        ApproximateByteSet(bits)\n    }\n\n    /// Return true if and only if the given byte might be in this set. This\n    /// may return a false positive, but will never return a false negative.\n    #[inline(always)]\n    fn contains(&self, byte: u8) -> bool {\n        self.0 & (1 << (byte % 64)) != 0\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use alloc::vec::Vec;\n\n    use super::*;\n\n    /// Convenience wrapper for computing the suffix as a byte string.\n    fn get_suffix_forward(needle: &[u8], kind: SuffixKind) -> (&[u8], usize) {\n        let s = Suffix::forward(needle, kind);\n        (&needle[s.pos..], s.period)\n    }\n\n    /// Convenience wrapper for computing the reverse suffix as a byte string.\n    fn get_suffix_reverse(needle: &[u8], kind: SuffixKind) -> (&[u8], usize) {\n        let s = Suffix::reverse(needle, kind);\n        (&needle[..s.pos], s.period)\n    }\n\n    /// Return all of the non-empty suffixes in the given byte string.\n    fn suffixes(bytes: &[u8]) -> Vec<&[u8]> {\n        (0..bytes.len()).map(|i| &bytes[i..]).collect()\n    }\n\n    /// Return the lexicographically maximal suffix of the given byte string.\n    fn naive_maximal_suffix_forward(needle: &[u8]) -> &[u8] {\n        let mut sufs = suffixes(needle);\n        sufs.sort();\n        sufs.pop().unwrap()\n    }\n\n    /// Return the lexicographically maximal suffix of the reverse of the given\n    /// byte string.\n    fn naive_maximal_suffix_reverse(needle: &[u8]) -> Vec<u8> {\n        let mut reversed = needle.to_vec();\n        reversed.reverse();\n        let mut got = naive_maximal_suffix_forward(&reversed).to_vec();\n        got.reverse();\n        got\n    }\n\n    define_substring_forward_quickcheck!(|h, n| Some(\n        Finder::new(n).find(h, n)\n    ));\n    define_substring_reverse_quickcheck!(|h, n| Some(\n        FinderRev::new(n).rfind(h, n)\n    ));\n\n    #[test]\n    fn forward() {\n        crate::tests::substring::Runner::new()\n            .fwd(|h, n| Some(Finder::new(n).find(h, n)))\n            .run();\n    }\n\n    #[test]\n    fn reverse() {\n        crate::tests::substring::Runner::new()\n            .rev(|h, n| Some(FinderRev::new(n).rfind(h, n)))\n            .run();\n    }\n\n    #[test]\n    fn suffix_forward() {\n        macro_rules! assert_suffix_min {\n            ($given:expr, $expected:expr, $period:expr) => {\n                let (got_suffix, got_period) =\n                    get_suffix_forward($given.as_bytes(), SuffixKind::Minimal);\n                let got_suffix = core::str::from_utf8(got_suffix).unwrap();\n                assert_eq!(($expected, $period), (got_suffix, got_period));\n            };\n        }\n\n        macro_rules! assert_suffix_max {\n            ($given:expr, $expected:expr, $period:expr) => {\n                let (got_suffix, got_period) =\n                    get_suffix_forward($given.as_bytes(), SuffixKind::Maximal);\n                let got_suffix = core::str::from_utf8(got_suffix).unwrap();\n                assert_eq!(($expected, $period), (got_suffix, got_period));\n            };\n        }\n\n        assert_suffix_min!(\"a\", \"a\", 1);\n        assert_suffix_max!(\"a\", \"a\", 1);\n\n        assert_suffix_min!(\"ab\", \"ab\", 2);\n        assert_suffix_max!(\"ab\", \"b\", 1);\n\n        assert_suffix_min!(\"ba\", \"a\", 1);\n        assert_suffix_max!(\"ba\", \"ba\", 2);\n\n        assert_suffix_min!(\"abc\", \"abc\", 3);\n        assert_suffix_max!(\"abc\", \"c\", 1);\n\n        assert_suffix_min!(\"acb\", \"acb\", 3);\n        assert_suffix_max!(\"acb\", \"cb\", 2);\n\n        assert_suffix_min!(\"cba\", \"a\", 1);\n        assert_suffix_max!(\"cba\", \"cba\", 3);\n\n        assert_suffix_min!(\"abcabc\", \"abcabc\", 3);\n        assert_suffix_max!(\"abcabc\", \"cabc\", 3);\n\n        assert_suffix_min!(\"abcabcabc\", \"abcabcabc\", 3);\n        assert_suffix_max!(\"abcabcabc\", \"cabcabc\", 3);\n\n        assert_suffix_min!(\"abczz\", \"abczz\", 5);\n        assert_suffix_max!(\"abczz\", \"zz\", 1);\n\n        assert_suffix_min!(\"zzabc\", \"abc\", 3);\n        assert_suffix_max!(\"zzabc\", \"zzabc\", 5);\n\n        assert_suffix_min!(\"aaa\", \"aaa\", 1);\n        assert_suffix_max!(\"aaa\", \"aaa\", 1);\n\n        assert_suffix_min!(\"foobar\", \"ar\", 2);\n        assert_suffix_max!(\"foobar\", \"r\", 1);\n    }\n\n    #[test]\n    fn suffix_reverse() {\n        macro_rules! assert_suffix_min {\n            ($given:expr, $expected:expr, $period:expr) => {\n                let (got_suffix, got_period) =\n                    get_suffix_reverse($given.as_bytes(), SuffixKind::Minimal);\n                let got_suffix = core::str::from_utf8(got_suffix).unwrap();\n                assert_eq!(($expected, $period), (got_suffix, got_period));\n            };\n        }\n\n        macro_rules! assert_suffix_max {\n            ($given:expr, $expected:expr, $period:expr) => {\n                let (got_suffix, got_period) =\n                    get_suffix_reverse($given.as_bytes(), SuffixKind::Maximal);\n                let got_suffix = core::str::from_utf8(got_suffix).unwrap();\n                assert_eq!(($expected, $period), (got_suffix, got_period));\n            };\n        }\n\n        assert_suffix_min!(\"a\", \"a\", 1);\n        assert_suffix_max!(\"a\", \"a\", 1);\n\n        assert_suffix_min!(\"ab\", \"a\", 1);\n        assert_suffix_max!(\"ab\", \"ab\", 2);\n\n        assert_suffix_min!(\"ba\", \"ba\", 2);\n        assert_suffix_max!(\"ba\", \"b\", 1);\n\n        assert_suffix_min!(\"abc\", \"a\", 1);\n        assert_suffix_max!(\"abc\", \"abc\", 3);\n\n        assert_suffix_min!(\"acb\", \"a\", 1);\n        assert_suffix_max!(\"acb\", \"ac\", 2);\n\n        assert_suffix_min!(\"cba\", \"cba\", 3);\n        assert_suffix_max!(\"cba\", \"c\", 1);\n\n        assert_suffix_min!(\"abcabc\", \"abca\", 3);\n        assert_suffix_max!(\"abcabc\", \"abcabc\", 3);\n\n        assert_suffix_min!(\"abcabcabc\", \"abcabca\", 3);\n        assert_suffix_max!(\"abcabcabc\", \"abcabcabc\", 3);\n\n        assert_suffix_min!(\"abczz\", \"a\", 1);\n        assert_suffix_max!(\"abczz\", \"abczz\", 5);\n\n        assert_suffix_min!(\"zzabc\", \"zza\", 3);\n        assert_suffix_max!(\"zzabc\", \"zz\", 1);\n\n        assert_suffix_min!(\"aaa\", \"aaa\", 1);\n        assert_suffix_max!(\"aaa\", \"aaa\", 1);\n    }\n\n    #[cfg(not(miri))]\n    quickcheck::quickcheck! {\n        fn qc_suffix_forward_maximal(bytes: Vec<u8>) -> bool {\n            if bytes.is_empty() {\n                return true;\n            }\n\n            let (got, _) = get_suffix_forward(&bytes, SuffixKind::Maximal);\n            let expected = naive_maximal_suffix_forward(&bytes);\n            got == expected\n        }\n\n        fn qc_suffix_reverse_maximal(bytes: Vec<u8>) -> bool {\n            if bytes.is_empty() {\n                return true;\n            }\n\n            let (got, _) = get_suffix_reverse(&bytes, SuffixKind::Maximal);\n            let expected = naive_maximal_suffix_reverse(&bytes);\n            expected == got\n        }\n    }\n\n    // This is a regression test caught by quickcheck that exercised a bug in\n    // the reverse small period handling. The bug was that we were using 'if j\n    // == shift' to determine if a match occurred, but the correct guard is 'if\n    // j >= shift', which matches the corresponding guard in the forward impl.\n    #[test]\n    fn regression_rev_small_period() {\n        let rfind = |h, n| FinderRev::new(n).rfind(h, n);\n        let haystack = \"ababaz\";\n        let needle = \"abab\";\n        assert_eq!(Some(0), rfind(haystack.as_bytes(), needle.as_bytes()));\n    }\n}\n"
  },
  {
    "path": "src/arch/generic/memchr.rs",
    "content": "/*!\nGeneric crate-internal routines for the `memchr` family of functions.\n*/\n\n// What follows is a vector algorithm generic over the specific vector\n// type to detect the position of one, two or three needles in a haystack.\n// From what I know, this is a \"classic\" algorithm, although I don't\n// believe it has been published in any peer reviewed journal. I believe\n// it can be found in places like glibc and Go's standard library. It\n// appears to be well known and is elaborated on in more detail here:\n// https://gms.tf/stdfind-and-memchr-optimizations.html\n//\n// While the routine below is fairly long and perhaps intimidating, the basic\n// idea is actually very simple and can be expressed straight-forwardly in\n// pseudo code. The pseudo code below is written for 128 bit vectors, but the\n// actual code below works for anything that implements the Vector trait.\n//\n//     needle = (n1 << 15) | (n1 << 14) | ... | (n1 << 1) | n1\n//     // Note: shift amount is in bytes\n//\n//     while i <= haystack.len() - 16:\n//       // A 16 byte vector. Each byte in chunk corresponds to a byte in\n//       // the haystack.\n//       chunk = haystack[i:i+16]\n//       // Compare bytes in needle with bytes in chunk. The result is a 16\n//       // byte chunk where each byte is 0xFF if the corresponding bytes\n//       // in needle and chunk were equal, or 0x00 otherwise.\n//       eqs = cmpeq(needle, chunk)\n//       // Return a 32 bit integer where the most significant 16 bits\n//       // are always 0 and the lower 16 bits correspond to whether the\n//       // most significant bit in the correspond byte in `eqs` is set.\n//       // In other words, `mask as u16` has bit i set if and only if\n//       // needle[i] == chunk[i].\n//       mask = movemask(eqs)\n//\n//       // Mask is 0 if there is no match, and non-zero otherwise.\n//       if mask != 0:\n//         // trailing_zeros tells us the position of the least significant\n//         // bit that is set.\n//         return i + trailing_zeros(mask)\n//\n//     // haystack length may not be a multiple of 16, so search the rest.\n//     while i < haystack.len():\n//       if haystack[i] == n1:\n//         return i\n//\n//     // No match found.\n//     return NULL\n//\n// In fact, we could loosely translate the above code to Rust line-for-line\n// and it would be a pretty fast algorithm. But, we pull out all the stops\n// to go as fast as possible:\n//\n// 1. We use aligned loads. That is, we do some finagling to make sure our\n//    primary loop not only proceeds in increments of 16 bytes, but that\n//    the address of haystack's pointer that we dereference is aligned to\n//    16 bytes. 16 is a magic number here because it is the size of SSE2\n//    128-bit vector. (For the AVX2 algorithm, 32 is the magic number.)\n//    Therefore, to get aligned loads, our pointer's address must be evenly\n//    divisible by 16.\n// 2. Our primary loop proceeds 64 bytes at a time instead of 16. It's\n//    kind of like loop unrolling, but we combine the equality comparisons\n//    using a vector OR such that we only need to extract a single mask to\n//    determine whether a match exists or not. If so, then we do some\n//    book-keeping to determine the precise location but otherwise mush on.\n// 3. We use our \"chunk\" comparison routine in as many places as possible,\n//    even if it means using unaligned loads. In particular, if haystack\n//    starts with an unaligned address, then we do an unaligned load to\n//    search the first 16 bytes. We then start our primary loop at the\n//    smallest subsequent aligned address, which will actually overlap with\n//    previously searched bytes. But we're OK with that. We do a similar\n//    dance at the end of our primary loop. Finally, to avoid a\n//    byte-at-a-time loop at the end, we do a final 16 byte unaligned load\n//    that may overlap with a previous load. This is OK because it converts\n//    a loop into a small number of very fast vector instructions. The overlap\n//    is OK because we know the place where the overlap occurs does not\n//    contain a match.\n//\n// And that's pretty all there is to it. Note that since the below is\n// generic and since it's meant to be inlined into routines with a\n// `#[target_feature(enable = \"...\")]` annotation, we must mark all routines as\n// both unsafe and `#[inline(always)]`.\n//\n// The fact that the code below is generic does somewhat inhibit us. For\n// example, I've noticed that introducing an unlineable `#[cold]` function to\n// handle the match case in the loop generates tighter assembly, but there is\n// no way to do this in the generic code below because the generic code doesn't\n// know what `target_feature` annotation to apply to the unlineable function.\n// We could make such functions part of the `Vector` trait, but we instead live\n// with the slightly sub-optimal codegen for now since it doesn't seem to have\n// a noticeable perf difference.\n\nuse crate::{\n    ext::Pointer,\n    vector::{MoveMask, Vector},\n};\n\n/// Finds all occurrences of a single byte in a haystack.\n#[derive(Clone, Copy, Debug)]\npub(crate) struct One<V> {\n    s1: u8,\n    v1: V,\n}\n\nimpl<V: Vector> One<V> {\n    /// The number of bytes we examine per each iteration of our search loop.\n    const LOOP_SIZE: usize = 4 * V::BYTES;\n\n    /// Create a new searcher that finds occurrences of the byte given.\n    #[inline(always)]\n    pub(crate) unsafe fn new(needle: u8) -> One<V> {\n        One { s1: needle, v1: V::splat(needle) }\n    }\n\n    /// Returns the needle given to `One::new`.\n    #[inline(always)]\n    pub(crate) fn needle1(&self) -> u8 {\n        self.s1\n    }\n\n    /// Return a pointer to the first occurrence of the needle in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// # Safety\n    ///\n    /// * It must be the case that `start < end` and that the distance between\n    /// them is at least equal to `V::BYTES`. That is, it must always be valid\n    /// to do at least an unaligned load of `V` at `start`.\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    #[inline(always)]\n    pub(crate) unsafe fn find_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        // If we want to support vectors bigger than 256 bits, we probably\n        // need to move up to using a u64 for the masks used below. Currently\n        // they are 32 bits, which means we're SOL for vectors that need masks\n        // bigger than 32 bits. Overall unclear until there's a use case.\n        debug_assert!(V::BYTES <= 32, \"vector cannot be bigger than 32 bytes\");\n\n        let topos = V::Mask::first_offset;\n        let len = end.distance(start);\n        debug_assert!(\n            len >= V::BYTES,\n            \"haystack has length {}, but must be at least {}\",\n            len,\n            V::BYTES\n        );\n\n        // Search a possibly unaligned chunk at `start`. This covers any part\n        // of the haystack prior to where aligned loads can start.\n        if let Some(cur) = self.search_chunk(start, topos) {\n            return Some(cur);\n        }\n        // Set `cur` to the first V-aligned pointer greater than `start`.\n        let mut cur = start.add(V::BYTES - (start.as_usize() & V::ALIGN));\n        debug_assert!(cur > start && end.sub(V::BYTES) >= start);\n        if len >= Self::LOOP_SIZE {\n            while cur <= end.sub(Self::LOOP_SIZE) {\n                debug_assert_eq!(0, cur.as_usize() % V::BYTES);\n\n                let a = V::load_aligned(cur);\n                let b = V::load_aligned(cur.add(1 * V::BYTES));\n                let c = V::load_aligned(cur.add(2 * V::BYTES));\n                let d = V::load_aligned(cur.add(3 * V::BYTES));\n                let eqa = self.v1.cmpeq(a);\n                let eqb = self.v1.cmpeq(b);\n                let eqc = self.v1.cmpeq(c);\n                let eqd = self.v1.cmpeq(d);\n                let or1 = eqa.or(eqb);\n                let or2 = eqc.or(eqd);\n                let or3 = or1.or(or2);\n                if or3.movemask_will_have_non_zero() {\n                    let mask = eqa.movemask();\n                    if mask.has_non_zero() {\n                        return Some(cur.add(topos(mask)));\n                    }\n\n                    let mask = eqb.movemask();\n                    if mask.has_non_zero() {\n                        return Some(cur.add(1 * V::BYTES).add(topos(mask)));\n                    }\n\n                    let mask = eqc.movemask();\n                    if mask.has_non_zero() {\n                        return Some(cur.add(2 * V::BYTES).add(topos(mask)));\n                    }\n\n                    let mask = eqd.movemask();\n                    debug_assert!(mask.has_non_zero());\n                    return Some(cur.add(3 * V::BYTES).add(topos(mask)));\n                }\n                cur = cur.add(Self::LOOP_SIZE);\n            }\n        }\n        // Handle any leftovers after the aligned loop above. We use unaligned\n        // loads here, but I believe we are guaranteed that they are aligned\n        // since `cur` is aligned.\n        while cur <= end.sub(V::BYTES) {\n            debug_assert!(end.distance(cur) >= V::BYTES);\n            if let Some(cur) = self.search_chunk(cur, topos) {\n                return Some(cur);\n            }\n            cur = cur.add(V::BYTES);\n        }\n        // Finally handle any remaining bytes less than the size of V. In this\n        // case, our pointer may indeed be unaligned and the load may overlap\n        // with the previous one. But that's okay since we know the previous\n        // load didn't lead to a match (otherwise we wouldn't be here).\n        if cur < end {\n            debug_assert!(end.distance(cur) < V::BYTES);\n            cur = cur.sub(V::BYTES - end.distance(cur));\n            debug_assert_eq!(end.distance(cur), V::BYTES);\n            return self.search_chunk(cur, topos);\n        }\n        None\n    }\n\n    /// Return a pointer to the last occurrence of the needle in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// # Safety\n    ///\n    /// * It must be the case that `start < end` and that the distance between\n    /// them is at least equal to `V::BYTES`. That is, it must always be valid\n    /// to do at least an unaligned load of `V` at `start`.\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    #[inline(always)]\n    pub(crate) unsafe fn rfind_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        // If we want to support vectors bigger than 256 bits, we probably\n        // need to move up to using a u64 for the masks used below. Currently\n        // they are 32 bits, which means we're SOL for vectors that need masks\n        // bigger than 32 bits. Overall unclear until there's a use case.\n        debug_assert!(V::BYTES <= 32, \"vector cannot be bigger than 32 bytes\");\n\n        let topos = V::Mask::last_offset;\n        let len = end.distance(start);\n        debug_assert!(\n            len >= V::BYTES,\n            \"haystack has length {}, but must be at least {}\",\n            len,\n            V::BYTES\n        );\n\n        if let Some(cur) = self.search_chunk(end.sub(V::BYTES), topos) {\n            return Some(cur);\n        }\n        let mut cur = end.sub(end.as_usize() & V::ALIGN);\n        debug_assert!(start <= cur && cur <= end);\n        if len >= Self::LOOP_SIZE {\n            while cur >= start.add(Self::LOOP_SIZE) {\n                debug_assert_eq!(0, cur.as_usize() % V::BYTES);\n\n                cur = cur.sub(Self::LOOP_SIZE);\n                let a = V::load_aligned(cur);\n                let b = V::load_aligned(cur.add(1 * V::BYTES));\n                let c = V::load_aligned(cur.add(2 * V::BYTES));\n                let d = V::load_aligned(cur.add(3 * V::BYTES));\n                let eqa = self.v1.cmpeq(a);\n                let eqb = self.v1.cmpeq(b);\n                let eqc = self.v1.cmpeq(c);\n                let eqd = self.v1.cmpeq(d);\n                let or1 = eqa.or(eqb);\n                let or2 = eqc.or(eqd);\n                let or3 = or1.or(or2);\n                if or3.movemask_will_have_non_zero() {\n                    let mask = eqd.movemask();\n                    if mask.has_non_zero() {\n                        return Some(cur.add(3 * V::BYTES).add(topos(mask)));\n                    }\n\n                    let mask = eqc.movemask();\n                    if mask.has_non_zero() {\n                        return Some(cur.add(2 * V::BYTES).add(topos(mask)));\n                    }\n\n                    let mask = eqb.movemask();\n                    if mask.has_non_zero() {\n                        return Some(cur.add(1 * V::BYTES).add(topos(mask)));\n                    }\n\n                    let mask = eqa.movemask();\n                    debug_assert!(mask.has_non_zero());\n                    return Some(cur.add(topos(mask)));\n                }\n            }\n        }\n        while cur >= start.add(V::BYTES) {\n            debug_assert!(cur.distance(start) >= V::BYTES);\n            cur = cur.sub(V::BYTES);\n            if let Some(cur) = self.search_chunk(cur, topos) {\n                return Some(cur);\n            }\n        }\n        if cur > start {\n            debug_assert!(cur.distance(start) < V::BYTES);\n            return self.search_chunk(start, topos);\n        }\n        None\n    }\n\n    /// Return a count of all matching bytes in the given haystack.\n    ///\n    /// # Safety\n    ///\n    /// * It must be the case that `start < end` and that the distance between\n    /// them is at least equal to `V::BYTES`. That is, it must always be valid\n    /// to do at least an unaligned load of `V` at `start`.\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    #[inline(always)]\n    pub(crate) unsafe fn count_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> usize {\n        debug_assert!(V::BYTES <= 32, \"vector cannot be bigger than 32 bytes\");\n\n        let confirm = |b| b == self.needle1();\n        let len = end.distance(start);\n        debug_assert!(\n            len >= V::BYTES,\n            \"haystack has length {}, but must be at least {}\",\n            len,\n            V::BYTES\n        );\n\n        // Set `cur` to the first V-aligned pointer greater than `start`.\n        let mut cur = start.add(V::BYTES - (start.as_usize() & V::ALIGN));\n        // Count any matching bytes before we start our aligned loop.\n        let mut count = count_byte_by_byte(start, cur, confirm);\n        debug_assert!(cur > start && end.sub(V::BYTES) >= start);\n        if len >= Self::LOOP_SIZE {\n            while cur <= end.sub(Self::LOOP_SIZE) {\n                debug_assert_eq!(0, cur.as_usize() % V::BYTES);\n\n                let a = V::load_aligned(cur);\n                let b = V::load_aligned(cur.add(1 * V::BYTES));\n                let c = V::load_aligned(cur.add(2 * V::BYTES));\n                let d = V::load_aligned(cur.add(3 * V::BYTES));\n                let eqa = self.v1.cmpeq(a);\n                let eqb = self.v1.cmpeq(b);\n                let eqc = self.v1.cmpeq(c);\n                let eqd = self.v1.cmpeq(d);\n                count += eqa.movemask().count_ones();\n                count += eqb.movemask().count_ones();\n                count += eqc.movemask().count_ones();\n                count += eqd.movemask().count_ones();\n                cur = cur.add(Self::LOOP_SIZE);\n            }\n        }\n        // Handle any leftovers after the aligned loop above. We use unaligned\n        // loads here, but I believe we are guaranteed that they are aligned\n        // since `cur` is aligned.\n        while cur <= end.sub(V::BYTES) {\n            debug_assert!(end.distance(cur) >= V::BYTES);\n            let chunk = V::load_unaligned(cur);\n            count += self.v1.cmpeq(chunk).movemask().count_ones();\n            cur = cur.add(V::BYTES);\n        }\n        // And finally count any leftovers that weren't caught above.\n        count += count_byte_by_byte(cur, end, confirm);\n        count\n    }\n\n    /// Search `V::BYTES` starting at `cur` via an unaligned load.\n    ///\n    /// `mask_to_offset` should be a function that converts a `movemask` to\n    /// an offset such that `cur.add(offset)` corresponds to a pointer to the\n    /// match location if one is found. Generally it is expected to use either\n    /// `mask_to_first_offset` or `mask_to_last_offset`, depending on whether\n    /// one is implementing a forward or reverse search, respectively.\n    ///\n    /// # Safety\n    ///\n    /// `cur` must be a valid pointer and it must be valid to do an unaligned\n    /// load of size `V::BYTES` at `cur`.\n    #[inline(always)]\n    unsafe fn search_chunk(\n        &self,\n        cur: *const u8,\n        mask_to_offset: impl Fn(V::Mask) -> usize,\n    ) -> Option<*const u8> {\n        let chunk = V::load_unaligned(cur);\n        let mask = self.v1.cmpeq(chunk).movemask();\n        if mask.has_non_zero() {\n            Some(cur.add(mask_to_offset(mask)))\n        } else {\n            None\n        }\n    }\n}\n\n/// Finds all occurrences of two bytes in a haystack.\n///\n/// That is, this reports matches of one of two possible bytes. For example,\n/// searching for `a` or `b` in `afoobar` would report matches at offsets `0`,\n/// `4` and `5`.\n#[derive(Clone, Copy, Debug)]\npub(crate) struct Two<V> {\n    s1: u8,\n    s2: u8,\n    v1: V,\n    v2: V,\n}\n\nimpl<V: Vector> Two<V> {\n    /// The number of bytes we examine per each iteration of our search loop.\n    const LOOP_SIZE: usize = 2 * V::BYTES;\n\n    /// Create a new searcher that finds occurrences of the byte given.\n    #[inline(always)]\n    pub(crate) unsafe fn new(needle1: u8, needle2: u8) -> Two<V> {\n        Two {\n            s1: needle1,\n            s2: needle2,\n            v1: V::splat(needle1),\n            v2: V::splat(needle2),\n        }\n    }\n\n    /// Returns the first needle given to `Two::new`.\n    #[inline(always)]\n    pub(crate) fn needle1(&self) -> u8 {\n        self.s1\n    }\n\n    /// Returns the second needle given to `Two::new`.\n    #[inline(always)]\n    pub(crate) fn needle2(&self) -> u8 {\n        self.s2\n    }\n\n    /// Return a pointer to the first occurrence of one of the needles in the\n    /// given haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// # Safety\n    ///\n    /// * It must be the case that `start < end` and that the distance between\n    /// them is at least equal to `V::BYTES`. That is, it must always be valid\n    /// to do at least an unaligned load of `V` at `start`.\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    #[inline(always)]\n    pub(crate) unsafe fn find_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        // If we want to support vectors bigger than 256 bits, we probably\n        // need to move up to using a u64 for the masks used below. Currently\n        // they are 32 bits, which means we're SOL for vectors that need masks\n        // bigger than 32 bits. Overall unclear until there's a use case.\n        debug_assert!(V::BYTES <= 32, \"vector cannot be bigger than 32 bytes\");\n\n        let topos = V::Mask::first_offset;\n        let len = end.distance(start);\n        debug_assert!(\n            len >= V::BYTES,\n            \"haystack has length {}, but must be at least {}\",\n            len,\n            V::BYTES\n        );\n\n        // Search a possibly unaligned chunk at `start`. This covers any part\n        // of the haystack prior to where aligned loads can start.\n        if let Some(cur) = self.search_chunk(start, topos) {\n            return Some(cur);\n        }\n        // Set `cur` to the first V-aligned pointer greater than `start`.\n        let mut cur = start.add(V::BYTES - (start.as_usize() & V::ALIGN));\n        debug_assert!(cur > start && end.sub(V::BYTES) >= start);\n        if len >= Self::LOOP_SIZE {\n            while cur <= end.sub(Self::LOOP_SIZE) {\n                debug_assert_eq!(0, cur.as_usize() % V::BYTES);\n\n                let a = V::load_aligned(cur);\n                let b = V::load_aligned(cur.add(V::BYTES));\n                let eqa1 = self.v1.cmpeq(a);\n                let eqb1 = self.v1.cmpeq(b);\n                let eqa2 = self.v2.cmpeq(a);\n                let eqb2 = self.v2.cmpeq(b);\n                let or1 = eqa1.or(eqb1);\n                let or2 = eqa2.or(eqb2);\n                let or3 = or1.or(or2);\n                if or3.movemask_will_have_non_zero() {\n                    let mask = eqa1.movemask().or(eqa2.movemask());\n                    if mask.has_non_zero() {\n                        return Some(cur.add(topos(mask)));\n                    }\n\n                    let mask = eqb1.movemask().or(eqb2.movemask());\n                    debug_assert!(mask.has_non_zero());\n                    return Some(cur.add(V::BYTES).add(topos(mask)));\n                }\n                cur = cur.add(Self::LOOP_SIZE);\n            }\n        }\n        // Handle any leftovers after the aligned loop above. We use unaligned\n        // loads here, but I believe we are guaranteed that they are aligned\n        // since `cur` is aligned.\n        while cur <= end.sub(V::BYTES) {\n            debug_assert!(end.distance(cur) >= V::BYTES);\n            if let Some(cur) = self.search_chunk(cur, topos) {\n                return Some(cur);\n            }\n            cur = cur.add(V::BYTES);\n        }\n        // Finally handle any remaining bytes less than the size of V. In this\n        // case, our pointer may indeed be unaligned and the load may overlap\n        // with the previous one. But that's okay since we know the previous\n        // load didn't lead to a match (otherwise we wouldn't be here).\n        if cur < end {\n            debug_assert!(end.distance(cur) < V::BYTES);\n            cur = cur.sub(V::BYTES - end.distance(cur));\n            debug_assert_eq!(end.distance(cur), V::BYTES);\n            return self.search_chunk(cur, topos);\n        }\n        None\n    }\n\n    /// Return a pointer to the last occurrence of the needle in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// # Safety\n    ///\n    /// * It must be the case that `start < end` and that the distance between\n    /// them is at least equal to `V::BYTES`. That is, it must always be valid\n    /// to do at least an unaligned load of `V` at `start`.\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    #[inline(always)]\n    pub(crate) unsafe fn rfind_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        // If we want to support vectors bigger than 256 bits, we probably\n        // need to move up to using a u64 for the masks used below. Currently\n        // they are 32 bits, which means we're SOL for vectors that need masks\n        // bigger than 32 bits. Overall unclear until there's a use case.\n        debug_assert!(V::BYTES <= 32, \"vector cannot be bigger than 32 bytes\");\n\n        let topos = V::Mask::last_offset;\n        let len = end.distance(start);\n        debug_assert!(\n            len >= V::BYTES,\n            \"haystack has length {}, but must be at least {}\",\n            len,\n            V::BYTES\n        );\n\n        if let Some(cur) = self.search_chunk(end.sub(V::BYTES), topos) {\n            return Some(cur);\n        }\n        let mut cur = end.sub(end.as_usize() & V::ALIGN);\n        debug_assert!(start <= cur && cur <= end);\n        if len >= Self::LOOP_SIZE {\n            while cur >= start.add(Self::LOOP_SIZE) {\n                debug_assert_eq!(0, cur.as_usize() % V::BYTES);\n\n                cur = cur.sub(Self::LOOP_SIZE);\n                let a = V::load_aligned(cur);\n                let b = V::load_aligned(cur.add(V::BYTES));\n                let eqa1 = self.v1.cmpeq(a);\n                let eqb1 = self.v1.cmpeq(b);\n                let eqa2 = self.v2.cmpeq(a);\n                let eqb2 = self.v2.cmpeq(b);\n                let or1 = eqa1.or(eqb1);\n                let or2 = eqa2.or(eqb2);\n                let or3 = or1.or(or2);\n                if or3.movemask_will_have_non_zero() {\n                    let mask = eqb1.movemask().or(eqb2.movemask());\n                    if mask.has_non_zero() {\n                        return Some(cur.add(V::BYTES).add(topos(mask)));\n                    }\n\n                    let mask = eqa1.movemask().or(eqa2.movemask());\n                    debug_assert!(mask.has_non_zero());\n                    return Some(cur.add(topos(mask)));\n                }\n            }\n        }\n        while cur >= start.add(V::BYTES) {\n            debug_assert!(cur.distance(start) >= V::BYTES);\n            cur = cur.sub(V::BYTES);\n            if let Some(cur) = self.search_chunk(cur, topos) {\n                return Some(cur);\n            }\n        }\n        if cur > start {\n            debug_assert!(cur.distance(start) < V::BYTES);\n            return self.search_chunk(start, topos);\n        }\n        None\n    }\n\n    /// Search `V::BYTES` starting at `cur` via an unaligned load.\n    ///\n    /// `mask_to_offset` should be a function that converts a `movemask` to\n    /// an offset such that `cur.add(offset)` corresponds to a pointer to the\n    /// match location if one is found. Generally it is expected to use either\n    /// `mask_to_first_offset` or `mask_to_last_offset`, depending on whether\n    /// one is implementing a forward or reverse search, respectively.\n    ///\n    /// # Safety\n    ///\n    /// `cur` must be a valid pointer and it must be valid to do an unaligned\n    /// load of size `V::BYTES` at `cur`.\n    #[inline(always)]\n    unsafe fn search_chunk(\n        &self,\n        cur: *const u8,\n        mask_to_offset: impl Fn(V::Mask) -> usize,\n    ) -> Option<*const u8> {\n        let chunk = V::load_unaligned(cur);\n        let eq1 = self.v1.cmpeq(chunk);\n        let eq2 = self.v2.cmpeq(chunk);\n        let mask = eq1.or(eq2).movemask();\n        if mask.has_non_zero() {\n            let mask1 = eq1.movemask();\n            let mask2 = eq2.movemask();\n            Some(cur.add(mask_to_offset(mask1.or(mask2))))\n        } else {\n            None\n        }\n    }\n}\n\n/// Finds all occurrences of two bytes in a haystack.\n///\n/// That is, this reports matches of one of two possible bytes. For example,\n/// searching for `a` or `b` in `afoobar` would report matches at offsets `0`,\n/// `4` and `5`.\n#[derive(Clone, Copy, Debug)]\npub(crate) struct Three<V> {\n    s1: u8,\n    s2: u8,\n    s3: u8,\n    v1: V,\n    v2: V,\n    v3: V,\n}\n\nimpl<V: Vector> Three<V> {\n    /// The number of bytes we examine per each iteration of our search loop.\n    const LOOP_SIZE: usize = 2 * V::BYTES;\n\n    /// Create a new searcher that finds occurrences of the byte given.\n    #[inline(always)]\n    pub(crate) unsafe fn new(\n        needle1: u8,\n        needle2: u8,\n        needle3: u8,\n    ) -> Three<V> {\n        Three {\n            s1: needle1,\n            s2: needle2,\n            s3: needle3,\n            v1: V::splat(needle1),\n            v2: V::splat(needle2),\n            v3: V::splat(needle3),\n        }\n    }\n\n    /// Returns the first needle given to `Three::new`.\n    #[inline(always)]\n    pub(crate) fn needle1(&self) -> u8 {\n        self.s1\n    }\n\n    /// Returns the second needle given to `Three::new`.\n    #[inline(always)]\n    pub(crate) fn needle2(&self) -> u8 {\n        self.s2\n    }\n\n    /// Returns the third needle given to `Three::new`.\n    #[inline(always)]\n    pub(crate) fn needle3(&self) -> u8 {\n        self.s3\n    }\n\n    /// Return a pointer to the first occurrence of one of the needles in the\n    /// given haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// # Safety\n    ///\n    /// * It must be the case that `start < end` and that the distance between\n    /// them is at least equal to `V::BYTES`. That is, it must always be valid\n    /// to do at least an unaligned load of `V` at `start`.\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    #[inline(always)]\n    pub(crate) unsafe fn find_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        // If we want to support vectors bigger than 256 bits, we probably\n        // need to move up to using a u64 for the masks used below. Currently\n        // they are 32 bits, which means we're SOL for vectors that need masks\n        // bigger than 32 bits. Overall unclear until there's a use case.\n        debug_assert!(V::BYTES <= 32, \"vector cannot be bigger than 32 bytes\");\n\n        let topos = V::Mask::first_offset;\n        let len = end.distance(start);\n        debug_assert!(\n            len >= V::BYTES,\n            \"haystack has length {}, but must be at least {}\",\n            len,\n            V::BYTES\n        );\n\n        // Search a possibly unaligned chunk at `start`. This covers any part\n        // of the haystack prior to where aligned loads can start.\n        if let Some(cur) = self.search_chunk(start, topos) {\n            return Some(cur);\n        }\n        // Set `cur` to the first V-aligned pointer greater than `start`.\n        let mut cur = start.add(V::BYTES - (start.as_usize() & V::ALIGN));\n        debug_assert!(cur > start && end.sub(V::BYTES) >= start);\n        if len >= Self::LOOP_SIZE {\n            while cur <= end.sub(Self::LOOP_SIZE) {\n                debug_assert_eq!(0, cur.as_usize() % V::BYTES);\n\n                let a = V::load_aligned(cur);\n                let b = V::load_aligned(cur.add(V::BYTES));\n                let eqa1 = self.v1.cmpeq(a);\n                let eqb1 = self.v1.cmpeq(b);\n                let eqa2 = self.v2.cmpeq(a);\n                let eqb2 = self.v2.cmpeq(b);\n                let eqa3 = self.v3.cmpeq(a);\n                let eqb3 = self.v3.cmpeq(b);\n                let or1 = eqa1.or(eqb1);\n                let or2 = eqa2.or(eqb2);\n                let or3 = eqa3.or(eqb3);\n                let or4 = or1.or(or2);\n                let or5 = or3.or(or4);\n                if or5.movemask_will_have_non_zero() {\n                    let mask = eqa1\n                        .movemask()\n                        .or(eqa2.movemask())\n                        .or(eqa3.movemask());\n                    if mask.has_non_zero() {\n                        return Some(cur.add(topos(mask)));\n                    }\n\n                    let mask = eqb1\n                        .movemask()\n                        .or(eqb2.movemask())\n                        .or(eqb3.movemask());\n                    debug_assert!(mask.has_non_zero());\n                    return Some(cur.add(V::BYTES).add(topos(mask)));\n                }\n                cur = cur.add(Self::LOOP_SIZE);\n            }\n        }\n        // Handle any leftovers after the aligned loop above. We use unaligned\n        // loads here, but I believe we are guaranteed that they are aligned\n        // since `cur` is aligned.\n        while cur <= end.sub(V::BYTES) {\n            debug_assert!(end.distance(cur) >= V::BYTES);\n            if let Some(cur) = self.search_chunk(cur, topos) {\n                return Some(cur);\n            }\n            cur = cur.add(V::BYTES);\n        }\n        // Finally handle any remaining bytes less than the size of V. In this\n        // case, our pointer may indeed be unaligned and the load may overlap\n        // with the previous one. But that's okay since we know the previous\n        // load didn't lead to a match (otherwise we wouldn't be here).\n        if cur < end {\n            debug_assert!(end.distance(cur) < V::BYTES);\n            cur = cur.sub(V::BYTES - end.distance(cur));\n            debug_assert_eq!(end.distance(cur), V::BYTES);\n            return self.search_chunk(cur, topos);\n        }\n        None\n    }\n\n    /// Return a pointer to the last occurrence of the needle in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// # Safety\n    ///\n    /// * It must be the case that `start < end` and that the distance between\n    /// them is at least equal to `V::BYTES`. That is, it must always be valid\n    /// to do at least an unaligned load of `V` at `start`.\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    #[inline(always)]\n    pub(crate) unsafe fn rfind_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        // If we want to support vectors bigger than 256 bits, we probably\n        // need to move up to using a u64 for the masks used below. Currently\n        // they are 32 bits, which means we're SOL for vectors that need masks\n        // bigger than 32 bits. Overall unclear until there's a use case.\n        debug_assert!(V::BYTES <= 32, \"vector cannot be bigger than 32 bytes\");\n\n        let topos = V::Mask::last_offset;\n        let len = end.distance(start);\n        debug_assert!(\n            len >= V::BYTES,\n            \"haystack has length {}, but must be at least {}\",\n            len,\n            V::BYTES\n        );\n\n        if let Some(cur) = self.search_chunk(end.sub(V::BYTES), topos) {\n            return Some(cur);\n        }\n        let mut cur = end.sub(end.as_usize() & V::ALIGN);\n        debug_assert!(start <= cur && cur <= end);\n        if len >= Self::LOOP_SIZE {\n            while cur >= start.add(Self::LOOP_SIZE) {\n                debug_assert_eq!(0, cur.as_usize() % V::BYTES);\n\n                cur = cur.sub(Self::LOOP_SIZE);\n                let a = V::load_aligned(cur);\n                let b = V::load_aligned(cur.add(V::BYTES));\n                let eqa1 = self.v1.cmpeq(a);\n                let eqb1 = self.v1.cmpeq(b);\n                let eqa2 = self.v2.cmpeq(a);\n                let eqb2 = self.v2.cmpeq(b);\n                let eqa3 = self.v3.cmpeq(a);\n                let eqb3 = self.v3.cmpeq(b);\n                let or1 = eqa1.or(eqb1);\n                let or2 = eqa2.or(eqb2);\n                let or3 = eqa3.or(eqb3);\n                let or4 = or1.or(or2);\n                let or5 = or3.or(or4);\n                if or5.movemask_will_have_non_zero() {\n                    let mask = eqb1\n                        .movemask()\n                        .or(eqb2.movemask())\n                        .or(eqb3.movemask());\n                    if mask.has_non_zero() {\n                        return Some(cur.add(V::BYTES).add(topos(mask)));\n                    }\n\n                    let mask = eqa1\n                        .movemask()\n                        .or(eqa2.movemask())\n                        .or(eqa3.movemask());\n                    debug_assert!(mask.has_non_zero());\n                    return Some(cur.add(topos(mask)));\n                }\n            }\n        }\n        while cur >= start.add(V::BYTES) {\n            debug_assert!(cur.distance(start) >= V::BYTES);\n            cur = cur.sub(V::BYTES);\n            if let Some(cur) = self.search_chunk(cur, topos) {\n                return Some(cur);\n            }\n        }\n        if cur > start {\n            debug_assert!(cur.distance(start) < V::BYTES);\n            return self.search_chunk(start, topos);\n        }\n        None\n    }\n\n    /// Search `V::BYTES` starting at `cur` via an unaligned load.\n    ///\n    /// `mask_to_offset` should be a function that converts a `movemask` to\n    /// an offset such that `cur.add(offset)` corresponds to a pointer to the\n    /// match location if one is found. Generally it is expected to use either\n    /// `mask_to_first_offset` or `mask_to_last_offset`, depending on whether\n    /// one is implementing a forward or reverse search, respectively.\n    ///\n    /// # Safety\n    ///\n    /// `cur` must be a valid pointer and it must be valid to do an unaligned\n    /// load of size `V::BYTES` at `cur`.\n    #[inline(always)]\n    unsafe fn search_chunk(\n        &self,\n        cur: *const u8,\n        mask_to_offset: impl Fn(V::Mask) -> usize,\n    ) -> Option<*const u8> {\n        let chunk = V::load_unaligned(cur);\n        let eq1 = self.v1.cmpeq(chunk);\n        let eq2 = self.v2.cmpeq(chunk);\n        let eq3 = self.v3.cmpeq(chunk);\n        let mask = eq1.or(eq2).or(eq3).movemask();\n        if mask.has_non_zero() {\n            let mask1 = eq1.movemask();\n            let mask2 = eq2.movemask();\n            let mask3 = eq3.movemask();\n            Some(cur.add(mask_to_offset(mask1.or(mask2).or(mask3))))\n        } else {\n            None\n        }\n    }\n}\n\n/// An iterator over all occurrences of a set of bytes in a haystack.\n///\n/// This iterator implements the routines necessary to provide a\n/// `DoubleEndedIterator` impl, which means it can also be used to find\n/// occurrences in reverse order.\n///\n/// The lifetime parameters are as follows:\n///\n/// * `'h` refers to the lifetime of the haystack being searched.\n///\n/// This type is intended to be used to implement all iterators for the\n/// `memchr` family of functions. It handles a tiny bit of marginally tricky\n/// raw pointer math, but otherwise expects the caller to provide `find_raw`\n/// and `rfind_raw` routines for each call of `next` and `next_back`,\n/// respectively.\n#[derive(Clone, Debug)]\npub(crate) struct Iter<'h> {\n    /// The original starting point into the haystack. We use this to convert\n    /// pointers to offsets.\n    original_start: *const u8,\n    /// The current starting point into the haystack. That is, where the next\n    /// search will begin.\n    start: *const u8,\n    /// The current ending point into the haystack. That is, where the next\n    /// reverse search will begin.\n    end: *const u8,\n    /// A marker for tracking the lifetime of the start/cur_start/cur_end\n    /// pointers above, which all point into the haystack.\n    haystack: core::marker::PhantomData<&'h [u8]>,\n}\n\n// SAFETY: Iter contains no shared references to anything that performs any\n// interior mutations. Also, the lifetime guarantees that Iter will not outlive\n// the haystack.\nunsafe impl<'h> Send for Iter<'h> {}\n\n// SAFETY: Iter perform no interior mutations, therefore no explicit\n// synchronization is necessary. Also, the lifetime guarantees that Iter will\n// not outlive the haystack.\nunsafe impl<'h> Sync for Iter<'h> {}\n\nimpl<'h> Iter<'h> {\n    /// Create a new generic memchr iterator.\n    #[inline(always)]\n    pub(crate) fn new(haystack: &'h [u8]) -> Iter<'h> {\n        Iter {\n            original_start: haystack.as_ptr(),\n            start: haystack.as_ptr(),\n            end: haystack.as_ptr().wrapping_add(haystack.len()),\n            haystack: core::marker::PhantomData,\n        }\n    }\n\n    /// Returns the next occurrence in the forward direction.\n    ///\n    /// # Safety\n    ///\n    /// Callers must ensure that if a pointer is returned from the closure\n    /// provided, then it must be greater than or equal to the start pointer\n    /// and less than the end pointer.\n    #[inline(always)]\n    pub(crate) unsafe fn next(\n        &mut self,\n        mut find_raw: impl FnMut(*const u8, *const u8) -> Option<*const u8>,\n    ) -> Option<usize> {\n        // SAFETY: Pointers are derived directly from the same &[u8] haystack.\n        // We only ever modify start/end corresponding to a matching offset\n        // found between start and end. Thus all changes to start/end maintain\n        // our safety requirements.\n        //\n        // The only other assumption we rely on is that the pointer returned\n        // by `find_raw` satisfies `self.start <= found < self.end`, and that\n        // safety contract is forwarded to the caller.\n        let found = find_raw(self.start, self.end)?;\n        let result = found.distance(self.original_start);\n        self.start = found.add(1);\n        Some(result)\n    }\n\n    /// Returns the number of remaining elements in this iterator.\n    #[inline(always)]\n    pub(crate) fn count(\n        self,\n        mut count_raw: impl FnMut(*const u8, *const u8) -> usize,\n    ) -> usize {\n        // SAFETY: Pointers are derived directly from the same &[u8] haystack.\n        // We only ever modify start/end corresponding to a matching offset\n        // found between start and end. Thus all changes to start/end maintain\n        // our safety requirements.\n        count_raw(self.start, self.end)\n    }\n\n    /// Returns the next occurrence in reverse.\n    ///\n    /// # Safety\n    ///\n    /// Callers must ensure that if a pointer is returned from the closure\n    /// provided, then it must be greater than or equal to the start pointer\n    /// and less than the end pointer.\n    #[inline(always)]\n    pub(crate) unsafe fn next_back(\n        &mut self,\n        mut rfind_raw: impl FnMut(*const u8, *const u8) -> Option<*const u8>,\n    ) -> Option<usize> {\n        // SAFETY: Pointers are derived directly from the same &[u8] haystack.\n        // We only ever modify start/end corresponding to a matching offset\n        // found between start and end. Thus all changes to start/end maintain\n        // our safety requirements.\n        //\n        // The only other assumption we rely on is that the pointer returned\n        // by `rfind_raw` satisfies `self.start <= found < self.end`, and that\n        // safety contract is forwarded to the caller.\n        let found = rfind_raw(self.start, self.end)?;\n        let result = found.distance(self.original_start);\n        self.end = found;\n        Some(result)\n    }\n\n    /// Provides an implementation of `Iterator::size_hint`.\n    #[inline(always)]\n    pub(crate) fn size_hint(&self) -> (usize, Option<usize>) {\n        (0, Some(self.end.as_usize().saturating_sub(self.start.as_usize())))\n    }\n}\n\n/// Search a slice using a function that operates on raw pointers.\n///\n/// Given a function to search a contiguous sequence of memory for the location\n/// of a non-empty set of bytes, this will execute that search on a slice of\n/// bytes. The pointer returned by the given function will be converted to an\n/// offset relative to the starting point of the given slice. That is, if a\n/// match is found, the offset returned by this routine is guaranteed to be a\n/// valid index into `haystack`.\n///\n/// Callers may use this for a forward or reverse search.\n///\n/// # Safety\n///\n/// Callers must ensure that if a pointer is returned by `find_raw`, then the\n/// pointer must be greater than or equal to the starting pointer and less than\n/// the end pointer.\n#[inline(always)]\npub(crate) unsafe fn search_slice_with_raw(\n    haystack: &[u8],\n    mut find_raw: impl FnMut(*const u8, *const u8) -> Option<*const u8>,\n) -> Option<usize> {\n    // SAFETY: We rely on `find_raw` to return a correct and valid pointer, but\n    // otherwise, `start` and `end` are valid due to the guarantees provided by\n    // a &[u8].\n    let start = haystack.as_ptr();\n    let end = start.add(haystack.len());\n    let found = find_raw(start, end)?;\n    Some(found.distance(start))\n}\n\n/// Performs a forward byte-at-a-time loop until either `ptr >= end_ptr` or\n/// until `confirm(*ptr)` returns `true`. If the former occurs, then `None` is\n/// returned. If the latter occurs, then the pointer at which `confirm` returns\n/// `true` is returned.\n///\n/// # Safety\n///\n/// Callers must provide valid pointers and they must satisfy `start_ptr <=\n/// ptr` and `ptr <= end_ptr`.\n#[inline(always)]\npub(crate) unsafe fn fwd_byte_by_byte<F: Fn(u8) -> bool>(\n    start: *const u8,\n    end: *const u8,\n    confirm: F,\n) -> Option<*const u8> {\n    debug_assert!(start <= end);\n    let mut ptr = start;\n    while ptr < end {\n        if confirm(*ptr) {\n            return Some(ptr);\n        }\n        ptr = ptr.offset(1);\n    }\n    None\n}\n\n/// Performs a reverse byte-at-a-time loop until either `ptr < start_ptr` or\n/// until `confirm(*ptr)` returns `true`. If the former occurs, then `None` is\n/// returned. If the latter occurs, then the pointer at which `confirm` returns\n/// `true` is returned.\n///\n/// # Safety\n///\n/// Callers must provide valid pointers and they must satisfy `start_ptr <=\n/// ptr` and `ptr <= end_ptr`.\n#[inline(always)]\npub(crate) unsafe fn rev_byte_by_byte<F: Fn(u8) -> bool>(\n    start: *const u8,\n    end: *const u8,\n    confirm: F,\n) -> Option<*const u8> {\n    debug_assert!(start <= end);\n\n    let mut ptr = end;\n    while ptr > start {\n        ptr = ptr.offset(-1);\n        if confirm(*ptr) {\n            return Some(ptr);\n        }\n    }\n    None\n}\n\n/// Performs a forward byte-at-a-time loop until `ptr >= end_ptr` and returns\n/// the number of times `confirm(*ptr)` returns `true`.\n///\n/// # Safety\n///\n/// Callers must provide valid pointers and they must satisfy `start_ptr <=\n/// ptr` and `ptr <= end_ptr`.\n#[inline(always)]\npub(crate) unsafe fn count_byte_by_byte<F: Fn(u8) -> bool>(\n    start: *const u8,\n    end: *const u8,\n    confirm: F,\n) -> usize {\n    debug_assert!(start <= end);\n    let mut ptr = start;\n    let mut count = 0;\n    while ptr < end {\n        if confirm(*ptr) {\n            count += 1;\n        }\n        ptr = ptr.offset(1);\n    }\n    count\n}\n"
  },
  {
    "path": "src/arch/generic/mod.rs",
    "content": "/*!\nThis module defines \"generic\" routines that can be specialized to specific\narchitectures.\n\nWe don't expose this module primarily because it would require exposing all\nof the internal infrastructure required to write these generic routines.\nThat infrastructure should be treated as an implementation detail so that\nit is allowed to evolve. Instead, what we expose are architecture specific\ninstantiations of these generic implementations. The generic code just lets us\nwrite the code once (usually).\n*/\n\npub(crate) mod memchr;\npub(crate) mod packedpair;\n"
  },
  {
    "path": "src/arch/generic/packedpair.rs",
    "content": "/*!\nGeneric crate-internal routines for the \"packed pair\" SIMD algorithm.\n\nThe \"packed pair\" algorithm is based on the [generic SIMD] algorithm. The main\ndifference is that it (by default) uses a background distribution of byte\nfrequencies to heuristically select the pair of bytes to search for.\n\n[generic SIMD]: http://0x80.pl/articles/simd-strfind.html#first-and-last\n*/\n\nuse crate::{\n    arch::all::{is_equal_raw, packedpair::Pair},\n    ext::Pointer,\n    vector::{MoveMask, Vector},\n};\n\n/// A generic architecture dependent \"packed pair\" finder.\n///\n/// This finder picks two bytes that it believes have high predictive power\n/// for indicating an overall match of a needle. Depending on whether\n/// `Finder::find` or `Finder::find_prefilter` is used, it reports offsets\n/// where the needle matches or could match. In the prefilter case, candidates\n/// are reported whenever the [`Pair`] of bytes given matches.\n///\n/// This is architecture dependent because it uses specific vector operations\n/// to look for occurrences of the pair of bytes.\n///\n/// This type is not meant to be exported and is instead meant to be used as\n/// the implementation for architecture specific facades. Why? Because it's a\n/// bit of a quirky API that requires `inline(always)` annotations. And pretty\n/// much everything has safety obligations due (at least) to the caller needing\n/// to inline calls into routines marked with\n/// `#[target_feature(enable = \"...\")]`.\n#[derive(Clone, Copy, Debug)]\npub(crate) struct Finder<V> {\n    pair: Pair,\n    v1: V,\n    v2: V,\n    min_haystack_len: usize,\n}\n\nimpl<V: Vector> Finder<V> {\n    /// Create a new pair searcher. The searcher returned can either report\n    /// exact matches of `needle` or act as a prefilter and report candidate\n    /// positions of `needle`.\n    ///\n    /// # Safety\n    ///\n    /// Callers must ensure that whatever vector type this routine is called\n    /// with is supported by the current environment.\n    ///\n    /// Callers must also ensure that `needle.len() >= 2`.\n    #[inline(always)]\n    pub(crate) unsafe fn new(needle: &[u8], pair: Pair) -> Finder<V> {\n        let max_index = pair.index1().max(pair.index2());\n        let min_haystack_len =\n            core::cmp::max(needle.len(), usize::from(max_index) + V::BYTES);\n        let v1 = V::splat(needle[usize::from(pair.index1())]);\n        let v2 = V::splat(needle[usize::from(pair.index2())]);\n        Finder { pair, v1, v2, min_haystack_len }\n    }\n\n    /// Searches the given haystack for the given needle. The needle given\n    /// should be the same as the needle that this finder was initialized\n    /// with.\n    ///\n    /// # Panics\n    ///\n    /// When `haystack.len()` is less than [`Finder::min_haystack_len`].\n    ///\n    /// # Safety\n    ///\n    /// Since this is meant to be used with vector functions, callers need to\n    /// specialize this inside of a function with a `target_feature` attribute.\n    /// Therefore, callers must ensure that whatever target feature is being\n    /// used supports the vector functions that this function is specialized\n    /// for. (For the specific vector functions used, see the Vector trait\n    /// implementations.)\n    #[inline(always)]\n    pub(crate) unsafe fn find(\n        &self,\n        haystack: &[u8],\n        needle: &[u8],\n    ) -> Option<usize> {\n        assert!(\n            haystack.len() >= self.min_haystack_len,\n            \"haystack too small, should be at least {} but got {}\",\n            self.min_haystack_len,\n            haystack.len(),\n        );\n\n        let all = V::Mask::all_zeros_except_least_significant(0);\n        let start = haystack.as_ptr();\n        let end = start.add(haystack.len());\n        let max = end.sub(self.min_haystack_len);\n        let mut cur = start;\n\n        // N.B. I did experiment with unrolling the loop to deal with size(V)\n        // bytes at a time and 2*size(V) bytes at a time. The double unroll\n        // was marginally faster while the quadruple unroll was unambiguously\n        // slower. In the end, I decided the complexity from unrolling wasn't\n        // worth it. I used the memmem/krate/prebuilt/huge-en/ benchmarks to\n        // compare.\n        while cur <= max {\n            if let Some(chunki) = self.find_in_chunk(needle, cur, end, all) {\n                return Some(matched(start, cur, chunki));\n            }\n            cur = cur.add(V::BYTES);\n        }\n        if cur < end {\n            let remaining = end.distance(cur);\n            debug_assert!(\n                remaining < self.min_haystack_len,\n                \"remaining bytes should be smaller than the minimum haystack \\\n                 length of {}, but there are {} bytes remaining\",\n                self.min_haystack_len,\n                remaining,\n            );\n            if remaining < needle.len() {\n                return None;\n            }\n            debug_assert!(\n                max < cur,\n                \"after main loop, cur should have exceeded max\",\n            );\n            let overlap = cur.distance(max);\n            debug_assert!(\n                overlap > 0,\n                \"overlap ({}) must always be non-zero\",\n                overlap,\n            );\n            debug_assert!(\n                overlap < V::BYTES,\n                \"overlap ({}) cannot possibly be >= than a vector ({})\",\n                overlap,\n                V::BYTES,\n            );\n            // The mask has all of its bits set except for the first N least\n            // significant bits, where N=overlap. This way, any matches that\n            // occur in find_in_chunk within the overlap are automatically\n            // ignored.\n            let mask = V::Mask::all_zeros_except_least_significant(overlap);\n            cur = max;\n            let m = self.find_in_chunk(needle, cur, end, mask);\n            if let Some(chunki) = m {\n                return Some(matched(start, cur, chunki));\n            }\n        }\n        None\n    }\n\n    /// Searches the given haystack for offsets that represent candidate\n    /// matches of the `needle` given to this finder's constructor. The offsets\n    /// returned, if they are a match, correspond to the starting offset of\n    /// `needle` in the given `haystack`.\n    ///\n    /// # Panics\n    ///\n    /// When `haystack.len()` is less than [`Finder::min_haystack_len`].\n    ///\n    /// # Safety\n    ///\n    /// Since this is meant to be used with vector functions, callers need to\n    /// specialize this inside of a function with a `target_feature` attribute.\n    /// Therefore, callers must ensure that whatever target feature is being\n    /// used supports the vector functions that this function is specialized\n    /// for. (For the specific vector functions used, see the Vector trait\n    /// implementations.)\n    #[inline(always)]\n    pub(crate) unsafe fn find_prefilter(\n        &self,\n        haystack: &[u8],\n    ) -> Option<usize> {\n        assert!(\n            haystack.len() >= self.min_haystack_len,\n            \"haystack too small, should be at least {} but got {}\",\n            self.min_haystack_len,\n            haystack.len(),\n        );\n\n        let start = haystack.as_ptr();\n        let end = start.add(haystack.len());\n        let max = end.sub(self.min_haystack_len);\n        let mut cur = start;\n\n        // N.B. I did experiment with unrolling the loop to deal with size(V)\n        // bytes at a time and 2*size(V) bytes at a time. The double unroll\n        // was marginally faster while the quadruple unroll was unambiguously\n        // slower. In the end, I decided the complexity from unrolling wasn't\n        // worth it. I used the memmem/krate/prebuilt/huge-en/ benchmarks to\n        // compare.\n        while cur <= max {\n            if let Some(chunki) = self.find_prefilter_in_chunk(cur) {\n                return Some(matched(start, cur, chunki));\n            }\n            cur = cur.add(V::BYTES);\n        }\n        if cur < end {\n            // This routine immediately quits if a candidate match is found.\n            // That means that if we're here, no candidate matches have been\n            // found at or before 'ptr'. Thus, we don't need to mask anything\n            // out even though we might technically search part of the haystack\n            // that we've already searched (because we know it can't match).\n            cur = max;\n            if let Some(chunki) = self.find_prefilter_in_chunk(cur) {\n                return Some(matched(start, cur, chunki));\n            }\n        }\n        None\n    }\n\n    /// Search for an occurrence of our byte pair from the needle in the chunk\n    /// pointed to by cur, with the end of the haystack pointed to by end.\n    /// When an occurrence is found, memcmp is run to check if a match occurs\n    /// at the corresponding position.\n    ///\n    /// `mask` should have bits set corresponding the positions in the chunk\n    /// in which matches are considered. This is only used for the last vector\n    /// load where the beginning of the vector might have overlapped with the\n    /// last load in the main loop. The mask lets us avoid visiting positions\n    /// that have already been discarded as matches.\n    ///\n    /// # Safety\n    ///\n    /// It must be safe to do an unaligned read of size(V) bytes starting at\n    /// both (cur + self.index1) and (cur + self.index2). It must also be safe\n    /// to do unaligned loads on cur up to (end - needle.len()).\n    #[inline(always)]\n    unsafe fn find_in_chunk(\n        &self,\n        needle: &[u8],\n        cur: *const u8,\n        end: *const u8,\n        mask: V::Mask,\n    ) -> Option<usize> {\n        let index1 = usize::from(self.pair.index1());\n        let index2 = usize::from(self.pair.index2());\n        let chunk1 = V::load_unaligned(cur.add(index1));\n        let chunk2 = V::load_unaligned(cur.add(index2));\n        let eq1 = chunk1.cmpeq(self.v1);\n        let eq2 = chunk2.cmpeq(self.v2);\n\n        let mut offsets = eq1.and(eq2).movemask().and(mask);\n        while offsets.has_non_zero() {\n            let offset = offsets.first_offset();\n            let cur = cur.add(offset);\n            if end.sub(needle.len()) < cur {\n                return None;\n            }\n            if is_equal_raw(needle.as_ptr(), cur, needle.len()) {\n                return Some(offset);\n            }\n            offsets = offsets.clear_least_significant_bit();\n        }\n        None\n    }\n\n    /// Search for an occurrence of our byte pair from the needle in the chunk\n    /// pointed to by cur, with the end of the haystack pointed to by end.\n    /// When an occurrence is found, memcmp is run to check if a match occurs\n    /// at the corresponding position.\n    ///\n    /// # Safety\n    ///\n    /// It must be safe to do an unaligned read of size(V) bytes starting at\n    /// both (cur + self.index1) and (cur + self.index2). It must also be safe\n    /// to do unaligned reads on cur up to (end - needle.len()).\n    #[inline(always)]\n    unsafe fn find_prefilter_in_chunk(&self, cur: *const u8) -> Option<usize> {\n        let index1 = usize::from(self.pair.index1());\n        let index2 = usize::from(self.pair.index2());\n        let chunk1 = V::load_unaligned(cur.add(index1));\n        let chunk2 = V::load_unaligned(cur.add(index2));\n        let eq1 = chunk1.cmpeq(self.v1);\n        let eq2 = chunk2.cmpeq(self.v2);\n\n        let offsets = eq1.and(eq2).movemask();\n        if !offsets.has_non_zero() {\n            return None;\n        }\n        Some(offsets.first_offset())\n    }\n\n    /// Returns the pair of offsets (into the needle) used to check as a\n    /// predicate before confirming whether a needle exists at a particular\n    /// position.\n    #[inline]\n    pub(crate) fn pair(&self) -> &Pair {\n        &self.pair\n    }\n\n    /// Returns the minimum haystack length that this `Finder` can search.\n    ///\n    /// Providing a haystack to this `Finder` shorter than this length is\n    /// guaranteed to result in a panic.\n    #[inline(always)]\n    pub(crate) fn min_haystack_len(&self) -> usize {\n        self.min_haystack_len\n    }\n}\n\n/// Accepts a chunk-relative offset and returns a haystack relative offset.\n///\n/// This used to be marked `#[cold]` and `#[inline(never)]`, but I couldn't\n/// observe a consistent measureable difference between that and just inlining\n/// it. So we go with inlining it.\n///\n/// # Safety\n///\n/// Same at `ptr::offset_from` in addition to `cur >= start`.\n#[inline(always)]\nunsafe fn matched(start: *const u8, cur: *const u8, chunki: usize) -> usize {\n    cur.distance(start) + chunki\n}\n\n// If you're looking for tests, those are run for each instantiation of the\n// above code. So for example, see arch::x86_64::sse2::packedpair.\n"
  },
  {
    "path": "src/arch/mod.rs",
    "content": "/*!\nA module with low-level architecture dependent routines.\n\nThese routines are useful as primitives for tasks not covered by the higher\nlevel crate API.\n*/\n\npub mod all;\npub(crate) mod generic;\n\n#[cfg(target_arch = \"aarch64\")]\npub mod aarch64;\n#[cfg(all(target_arch = \"wasm32\", target_feature = \"simd128\"))]\npub mod wasm32;\n#[cfg(target_arch = \"x86_64\")]\npub mod x86_64;\n"
  },
  {
    "path": "src/arch/wasm32/memchr.rs",
    "content": "/*!\nWrapper routines for `memchr` and friends.\n\nThese routines choose the best implementation at compile time. (This is\ndifferent from `x86_64` because it is expected that `simd128` is almost always\navailable for `wasm32` targets.)\n*/\n\nmacro_rules! defraw {\n    ($ty:ident, $find:ident, $start:ident, $end:ident, $($needles:ident),+) => {{\n        use crate::arch::wasm32::simd128::memchr::$ty;\n\n        debug!(\"chose simd128 for {}\", stringify!($ty));\n        debug_assert!($ty::is_available());\n        // SAFETY: We know that wasm memchr is always available whenever\n        // code is compiled for `wasm32` with the `simd128` target feature\n        // enabled.\n        $ty::new_unchecked($($needles),+).$find($start, $end)\n    }}\n}\n\n/// memchr, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `One::find_raw`.\n#[inline(always)]\npub(crate) unsafe fn memchr_raw(\n    n1: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    defraw!(One, find_raw, start, end, n1)\n}\n\n/// memrchr, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `One::rfind_raw`.\n#[inline(always)]\npub(crate) unsafe fn memrchr_raw(\n    n1: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    defraw!(One, rfind_raw, start, end, n1)\n}\n\n/// memchr2, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `Two::find_raw`.\n#[inline(always)]\npub(crate) unsafe fn memchr2_raw(\n    n1: u8,\n    n2: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    defraw!(Two, find_raw, start, end, n1, n2)\n}\n\n/// memrchr2, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `Two::rfind_raw`.\n#[inline(always)]\npub(crate) unsafe fn memrchr2_raw(\n    n1: u8,\n    n2: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    defraw!(Two, rfind_raw, start, end, n1, n2)\n}\n\n/// memchr3, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `Three::find_raw`.\n#[inline(always)]\npub(crate) unsafe fn memchr3_raw(\n    n1: u8,\n    n2: u8,\n    n3: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    defraw!(Three, find_raw, start, end, n1, n2, n3)\n}\n\n/// memrchr3, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `Three::rfind_raw`.\n#[inline(always)]\npub(crate) unsafe fn memrchr3_raw(\n    n1: u8,\n    n2: u8,\n    n3: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    defraw!(Three, rfind_raw, start, end, n1, n2, n3)\n}\n\n/// Count all matching bytes, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `One::count_raw`.\n#[inline(always)]\npub(crate) unsafe fn count_raw(\n    n1: u8,\n    start: *const u8,\n    end: *const u8,\n) -> usize {\n    defraw!(One, count_raw, start, end, n1)\n}\n"
  },
  {
    "path": "src/arch/wasm32/mod.rs",
    "content": "/*!\nVector algorithms for the `wasm32` target.\n*/\n\npub mod simd128;\n\npub(crate) mod memchr;\n"
  },
  {
    "path": "src/arch/wasm32/simd128/memchr.rs",
    "content": "/*!\nThis module defines 128-bit vector implementations of `memchr` and friends.\n\nThe main types in this module are [`One`], [`Two`] and [`Three`]. They are for\nsearching for one, two or three distinct bytes, respectively, in a haystack.\nEach type also has corresponding double ended iterators. These searchers are\ntypically much faster than scalar routines accomplishing the same task.\n\nThe `One` searcher also provides a [`One::count`] routine for efficiently\ncounting the number of times a single byte occurs in a haystack. This is\nuseful, for example, for counting the number of lines in a haystack. This\nroutine exists because it is usually faster, especially with a high match\ncount, then using [`One::find`] repeatedly. ([`OneIter`] specializes its\n`Iterator::count` implementation to use this routine.)\n\nOnly one, two and three bytes are supported because three bytes is about\nthe point where one sees diminishing returns. Beyond this point and it's\nprobably (but not necessarily) better to just use a simple `[bool; 256]` array\nor similar. However, it depends mightily on the specific work-load and the\nexpected match frequency.\n*/\n\nuse core::arch::wasm32::v128;\n\nuse crate::{arch::generic::memchr as generic, ext::Pointer, vector::Vector};\n\n/// Finds all occurrences of a single byte in a haystack.\n#[derive(Clone, Copy, Debug)]\npub struct One(generic::One<v128>);\n\nimpl One {\n    /// Create a new searcher that finds occurrences of the needle byte given.\n    ///\n    /// This particular searcher is specialized to use simd128 vector\n    /// instructions that typically make it quite fast.\n    ///\n    /// If simd128 is unavailable in the current environment, then `None` is\n    /// returned.\n    #[inline]\n    pub fn new(needle: u8) -> Option<One> {\n        if One::is_available() {\n            // SAFETY: we check that simd128 is available above.\n            unsafe { Some(One::new_unchecked(needle)) }\n        } else {\n            None\n        }\n    }\n\n    /// Create a new finder specific to simd128 vectors and routines without\n    /// checking that simd128 is available.\n    ///\n    /// # Safety\n    ///\n    /// Callers must guarantee that it is safe to execute `simd128`\n    /// instructions in the current environment.\n    #[target_feature(enable = \"simd128\")]\n    #[inline]\n    pub unsafe fn new_unchecked(needle: u8) -> One {\n        One(generic::One::new(needle))\n    }\n\n    /// Returns true when this implementation is available in the current\n    /// environment.\n    ///\n    /// When this is true, it is guaranteed that [`One::new`] will return\n    /// a `Some` value. Similarly, when it is false, it is guaranteed that\n    /// `One::new` will return a `None` value.\n    ///\n    /// Note also that for the lifetime of a single program, if this returns\n    /// true then it will always return true.\n    #[inline]\n    pub fn is_available() -> bool {\n        #[cfg(target_feature = \"simd128\")]\n        {\n            true\n        }\n        #[cfg(not(target_feature = \"simd128\"))]\n        {\n            false\n        }\n    }\n\n    /// Return the first occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn find(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `find_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.find_raw(s, e)\n            })\n        }\n    }\n\n    /// Return the last occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn rfind(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `rfind_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.rfind_raw(s, e)\n            })\n        }\n    }\n\n    /// Counts all occurrences of this byte in the given haystack.\n    #[inline]\n    pub fn count(&self, haystack: &[u8]) -> usize {\n        // SAFETY: All of our pointers are derived directly from a borrowed\n        // slice, which is guaranteed to be valid.\n        unsafe {\n            let start = haystack.as_ptr();\n            let end = start.add(haystack.len());\n            self.count_raw(start, end)\n        }\n    }\n\n    /// Like `find`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn find_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        if end.distance(start) < v128::BYTES {\n            // SAFETY: We require the caller to pass valid start/end pointers.\n            return generic::fwd_byte_by_byte(start, end, |b| {\n                b == self.0.needle1()\n            });\n        }\n        // SAFETY: Building a `One` means it's safe to call 'simd128' routines.\n        // Also, we've checked that our haystack is big enough to run on the\n        // vector routine. Pointer validity is caller's responsibility.\n        self.find_raw_impl(start, end)\n    }\n\n    /// Like `rfind`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn rfind_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        if end.distance(start) < v128::BYTES {\n            // SAFETY: We require the caller to pass valid start/end pointers.\n            return generic::rev_byte_by_byte(start, end, |b| {\n                b == self.0.needle1()\n            });\n        }\n        // SAFETY: Building a `One` means it's safe to call 'simd128' routines.\n        // Also, we've checked that our haystack is big enough to run on the\n        // vector routine. Pointer validity is caller's responsibility.\n        self.rfind_raw_impl(start, end)\n    }\n\n    /// Counts all occurrences of this byte in the given haystack represented\n    /// by raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn count_raw(&self, start: *const u8, end: *const u8) -> usize {\n        if start >= end {\n            return 0;\n        }\n        if end.distance(start) < v128::BYTES {\n            // SAFETY: We require the caller to pass valid start/end pointers.\n            return generic::count_byte_by_byte(start, end, |b| {\n                b == self.0.needle1()\n            });\n        }\n        // SAFETY: Building a `One` means it's safe to call 'simd128' routines.\n        // Also, we've checked that our haystack is big enough to run on the\n        // vector routine. Pointer validity is caller's responsibility.\n        self.count_raw_impl(start, end)\n    }\n\n    /// Execute a search using simd128 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`One::find_raw`], except the distance between `start` and\n    /// `end` must be at least the size of a simd128 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `One`, which can only be constructed\n    /// when it is safe to call `simd128` routines.)\n    #[target_feature(enable = \"simd128\")]\n    #[inline]\n    unsafe fn find_raw_impl(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.0.find_raw(start, end)\n    }\n\n    /// Execute a search using simd128 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`One::rfind_raw`], except the distance between `start` and\n    /// `end` must be at least the size of a simd128 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `One`, which can only be constructed\n    /// when it is safe to call `simd128` routines.)\n    #[target_feature(enable = \"simd128\")]\n    #[inline]\n    unsafe fn rfind_raw_impl(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.0.rfind_raw(start, end)\n    }\n\n    /// Execute a count using simd128 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`One::count_raw`], except the distance between `start` and\n    /// `end` must be at least the size of a simd128 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `One`, which can only be constructed\n    /// when it is safe to call `simd128` routines.)\n    #[target_feature(enable = \"simd128\")]\n    #[inline]\n    unsafe fn count_raw_impl(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> usize {\n        self.0.count_raw(start, end)\n    }\n\n    /// Returns an iterator over all occurrences of the needle byte in the\n    /// given haystack.\n    ///\n    /// The iterator returned implements `DoubleEndedIterator`. This means it\n    /// can also be used to find occurrences in reverse order.\n    #[inline]\n    pub fn iter<'a, 'h>(&'a self, haystack: &'h [u8]) -> OneIter<'a, 'h> {\n        OneIter { searcher: self, it: generic::Iter::new(haystack) }\n    }\n}\n\n/// An iterator over all occurrences of a single byte in a haystack.\n///\n/// This iterator implements `DoubleEndedIterator`, which means it can also be\n/// used to find occurrences in reverse order.\n///\n/// This iterator is created by the [`One::iter`] method.\n///\n/// The lifetime parameters are as follows:\n///\n/// * `'a` refers to the lifetime of the underlying [`One`] searcher.\n/// * `'h` refers to the lifetime of the haystack being searched.\n#[derive(Clone, Debug)]\npub struct OneIter<'a, 'h> {\n    searcher: &'a One,\n    it: generic::Iter<'h>,\n}\n\nimpl<'a, 'h> Iterator for OneIter<'a, 'h> {\n    type Item = usize;\n\n    #[inline]\n    fn next(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'find_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next(|s, e| self.searcher.find_raw(s, e)) }\n    }\n\n    #[inline]\n    fn count(self) -> usize {\n        self.it.count(|s, e| {\n            // SAFETY: We rely on our generic iterator to return valid start\n            // and end pointers.\n            unsafe { self.searcher.count_raw(s, e) }\n        })\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.it.size_hint()\n    }\n}\n\nimpl<'a, 'h> DoubleEndedIterator for OneIter<'a, 'h> {\n    #[inline]\n    fn next_back(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'rfind_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next_back(|s, e| self.searcher.rfind_raw(s, e)) }\n    }\n}\n\nimpl<'a, 'h> core::iter::FusedIterator for OneIter<'a, 'h> {}\n\n/// Finds all occurrences of two bytes in a haystack.\n///\n/// That is, this reports matches of one of two possible bytes. For example,\n/// searching for `a` or `b` in `afoobar` would report matches at offsets `0`,\n/// `4` and `5`.\n#[derive(Clone, Copy, Debug)]\npub struct Two(generic::Two<v128>);\n\nimpl Two {\n    /// Create a new searcher that finds occurrences of the needle bytes given.\n    ///\n    /// This particular searcher is specialized to use simd128 vector\n    /// instructions that typically make it quite fast.\n    ///\n    /// If simd128 is unavailable in the current environment, then `None` is\n    /// returned.\n    #[inline]\n    pub fn new(needle1: u8, needle2: u8) -> Option<Two> {\n        if Two::is_available() {\n            // SAFETY: we check that simd128 is available above.\n            unsafe { Some(Two::new_unchecked(needle1, needle2)) }\n        } else {\n            None\n        }\n    }\n\n    /// Create a new finder specific to simd128 vectors and routines without\n    /// checking that simd128 is available.\n    ///\n    /// # Safety\n    ///\n    /// Callers must guarantee that it is safe to execute `simd128`\n    /// instructions in the current environment.\n    #[target_feature(enable = \"simd128\")]\n    #[inline]\n    pub unsafe fn new_unchecked(needle1: u8, needle2: u8) -> Two {\n        Two(generic::Two::new(needle1, needle2))\n    }\n\n    /// Returns true when this implementation is available in the current\n    /// environment.\n    ///\n    /// When this is true, it is guaranteed that [`Two::new`] will return\n    /// a `Some` value. Similarly, when it is false, it is guaranteed that\n    /// `Two::new` will return a `None` value.\n    ///\n    /// Note also that for the lifetime of a single program, if this returns\n    /// true then it will always return true.\n    #[inline]\n    pub fn is_available() -> bool {\n        #[cfg(target_feature = \"simd128\")]\n        {\n            true\n        }\n        #[cfg(not(target_feature = \"simd128\"))]\n        {\n            false\n        }\n    }\n\n    /// Return the first occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn find(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `find_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.find_raw(s, e)\n            })\n        }\n    }\n\n    /// Return the last occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn rfind(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `rfind_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.rfind_raw(s, e)\n            })\n        }\n    }\n\n    /// Like `find`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn find_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        if end.distance(start) < v128::BYTES {\n            // SAFETY: We require the caller to pass valid start/end pointers.\n            return generic::fwd_byte_by_byte(start, end, |b| {\n                b == self.0.needle1() || b == self.0.needle2()\n            });\n        }\n        // SAFETY: Building a `Two` means it's safe to call 'simd128' routines.\n        // Also, we've checked that our haystack is big enough to run on the\n        // vector routine. Pointer validity is caller's responsibility.\n        self.find_raw_impl(start, end)\n    }\n\n    /// Like `rfind`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn rfind_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        if end.distance(start) < v128::BYTES {\n            // SAFETY: We require the caller to pass valid start/end pointers.\n            return generic::rev_byte_by_byte(start, end, |b| {\n                b == self.0.needle1() || b == self.0.needle2()\n            });\n        }\n        // SAFETY: Building a `Two` means it's safe to call 'simd128' routines.\n        // Also, we've checked that our haystack is big enough to run on the\n        // vector routine. Pointer validity is caller's responsibility.\n        self.rfind_raw_impl(start, end)\n    }\n\n    /// Execute a search using simd128 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`Two::find_raw`], except the distance between `start` and\n    /// `end` must be at least the size of a simd128 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Two`, which can only be constructed\n    /// when it is safe to call `simd128` routines.)\n    #[target_feature(enable = \"simd128\")]\n    #[inline]\n    unsafe fn find_raw_impl(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.0.find_raw(start, end)\n    }\n\n    /// Execute a search using simd128 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`Two::rfind_raw`], except the distance between `start` and\n    /// `end` must be at least the size of a simd128 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Two`, which can only be constructed\n    /// when it is safe to call `simd128` routines.)\n    #[target_feature(enable = \"simd128\")]\n    #[inline]\n    unsafe fn rfind_raw_impl(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.0.rfind_raw(start, end)\n    }\n\n    /// Returns an iterator over all occurrences of the needle bytes in the\n    /// given haystack.\n    ///\n    /// The iterator returned implements `DoubleEndedIterator`. This means it\n    /// can also be used to find occurrences in reverse order.\n    #[inline]\n    pub fn iter<'a, 'h>(&'a self, haystack: &'h [u8]) -> TwoIter<'a, 'h> {\n        TwoIter { searcher: self, it: generic::Iter::new(haystack) }\n    }\n}\n\n/// An iterator over all occurrences of two possible bytes in a haystack.\n///\n/// This iterator implements `DoubleEndedIterator`, which means it can also be\n/// used to find occurrences in reverse order.\n///\n/// This iterator is created by the [`Two::iter`] method.\n///\n/// The lifetime parameters are as follows:\n///\n/// * `'a` refers to the lifetime of the underlying [`Two`] searcher.\n/// * `'h` refers to the lifetime of the haystack being searched.\n#[derive(Clone, Debug)]\npub struct TwoIter<'a, 'h> {\n    searcher: &'a Two,\n    it: generic::Iter<'h>,\n}\n\nimpl<'a, 'h> Iterator for TwoIter<'a, 'h> {\n    type Item = usize;\n\n    #[inline]\n    fn next(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'find_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next(|s, e| self.searcher.find_raw(s, e)) }\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.it.size_hint()\n    }\n}\n\nimpl<'a, 'h> DoubleEndedIterator for TwoIter<'a, 'h> {\n    #[inline]\n    fn next_back(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'rfind_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next_back(|s, e| self.searcher.rfind_raw(s, e)) }\n    }\n}\n\nimpl<'a, 'h> core::iter::FusedIterator for TwoIter<'a, 'h> {}\n\n/// Finds all occurrences of three bytes in a haystack.\n///\n/// That is, this reports matches of one of three possible bytes. For example,\n/// searching for `a`, `b` or `o` in `afoobar` would report matches at offsets\n/// `0`, `2`, `3`, `4` and `5`.\n#[derive(Clone, Copy, Debug)]\npub struct Three(generic::Three<v128>);\n\nimpl Three {\n    /// Create a new searcher that finds occurrences of the needle bytes given.\n    ///\n    /// This particular searcher is specialized to use simd128 vector\n    /// instructions that typically make it quite fast.\n    ///\n    /// If simd128 is unavailable in the current environment, then `None` is\n    /// returned.\n    #[inline]\n    pub fn new(needle1: u8, needle2: u8, needle3: u8) -> Option<Three> {\n        if Three::is_available() {\n            // SAFETY: we check that simd128 is available above.\n            unsafe { Some(Three::new_unchecked(needle1, needle2, needle3)) }\n        } else {\n            None\n        }\n    }\n\n    /// Create a new finder specific to simd128 vectors and routines without\n    /// checking that simd128 is available.\n    ///\n    /// # Safety\n    ///\n    /// Callers must guarantee that it is safe to execute `simd128`\n    /// instructions in the current environment.\n    #[target_feature(enable = \"simd128\")]\n    #[inline]\n    pub unsafe fn new_unchecked(\n        needle1: u8,\n        needle2: u8,\n        needle3: u8,\n    ) -> Three {\n        Three(generic::Three::new(needle1, needle2, needle3))\n    }\n\n    /// Returns true when this implementation is available in the current\n    /// environment.\n    ///\n    /// When this is true, it is guaranteed that [`Three::new`] will return\n    /// a `Some` value. Similarly, when it is false, it is guaranteed that\n    /// `Three::new` will return a `None` value.\n    ///\n    /// Note also that for the lifetime of a single program, if this returns\n    /// true then it will always return true.\n    #[inline]\n    pub fn is_available() -> bool {\n        #[cfg(target_feature = \"simd128\")]\n        {\n            true\n        }\n        #[cfg(not(target_feature = \"simd128\"))]\n        {\n            false\n        }\n    }\n\n    /// Return the first occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn find(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `find_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.find_raw(s, e)\n            })\n        }\n    }\n\n    /// Return the last occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn rfind(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `rfind_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.rfind_raw(s, e)\n            })\n        }\n    }\n\n    /// Like `find`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn find_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        if end.distance(start) < v128::BYTES {\n            // SAFETY: We require the caller to pass valid start/end pointers.\n            return generic::fwd_byte_by_byte(start, end, |b| {\n                b == self.0.needle1()\n                    || b == self.0.needle2()\n                    || b == self.0.needle3()\n            });\n        }\n        // SAFETY: Building a `Three` means it's safe to call 'simd128'\n        // routines. Also, we've checked that our haystack is big enough to run\n        // on the vector routine. Pointer validity is caller's responsibility.\n        self.find_raw_impl(start, end)\n    }\n\n    /// Like `rfind`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn rfind_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        if end.distance(start) < v128::BYTES {\n            // SAFETY: We require the caller to pass valid start/end pointers.\n            return generic::rev_byte_by_byte(start, end, |b| {\n                b == self.0.needle1()\n                    || b == self.0.needle2()\n                    || b == self.0.needle3()\n            });\n        }\n        // SAFETY: Building a `Three` means it's safe to call 'simd128'\n        // routines. Also, we've checked that our haystack is big enough to run\n        // on the vector routine. Pointer validity is caller's responsibility.\n        self.rfind_raw_impl(start, end)\n    }\n\n    /// Execute a search using simd128 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`Three::find_raw`], except the distance between `start` and\n    /// `end` must be at least the size of a simd128 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Three`, which can only be constructed\n    /// when it is safe to call `simd128` routines.)\n    #[target_feature(enable = \"simd128\")]\n    #[inline]\n    unsafe fn find_raw_impl(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.0.find_raw(start, end)\n    }\n\n    /// Execute a search using simd128 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`Three::rfind_raw`], except the distance between `start` and\n    /// `end` must be at least the size of a simd128 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Three`, which can only be constructed\n    /// when it is safe to call `simd128` routines.)\n    #[target_feature(enable = \"simd128\")]\n    #[inline]\n    unsafe fn rfind_raw_impl(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.0.rfind_raw(start, end)\n    }\n\n    /// Returns an iterator over all occurrences of the needle byte in the\n    /// given haystack.\n    ///\n    /// The iterator returned implements `DoubleEndedIterator`. This means it\n    /// can also be used to find occurrences in reverse order.\n    #[inline]\n    pub fn iter<'a, 'h>(&'a self, haystack: &'h [u8]) -> ThreeIter<'a, 'h> {\n        ThreeIter { searcher: self, it: generic::Iter::new(haystack) }\n    }\n}\n\n/// An iterator over all occurrences of three possible bytes in a haystack.\n///\n/// This iterator implements `DoubleEndedIterator`, which means it can also be\n/// used to find occurrences in reverse order.\n///\n/// This iterator is created by the [`Three::iter`] method.\n///\n/// The lifetime parameters are as follows:\n///\n/// * `'a` refers to the lifetime of the underlying [`Three`] searcher.\n/// * `'h` refers to the lifetime of the haystack being searched.\n#[derive(Clone, Debug)]\npub struct ThreeIter<'a, 'h> {\n    searcher: &'a Three,\n    it: generic::Iter<'h>,\n}\n\nimpl<'a, 'h> Iterator for ThreeIter<'a, 'h> {\n    type Item = usize;\n\n    #[inline]\n    fn next(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'find_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next(|s, e| self.searcher.find_raw(s, e)) }\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.it.size_hint()\n    }\n}\n\nimpl<'a, 'h> DoubleEndedIterator for ThreeIter<'a, 'h> {\n    #[inline]\n    fn next_back(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'rfind_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next_back(|s, e| self.searcher.rfind_raw(s, e)) }\n    }\n}\n\nimpl<'a, 'h> core::iter::FusedIterator for ThreeIter<'a, 'h> {}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    define_memchr_quickcheck!(super);\n\n    #[test]\n    fn forward_one() {\n        crate::tests::memchr::Runner::new(1).forward_iter(\n            |haystack, needles| {\n                Some(One::new(needles[0])?.iter(haystack).collect())\n            },\n        )\n    }\n\n    #[test]\n    fn reverse_one() {\n        crate::tests::memchr::Runner::new(1).reverse_iter(\n            |haystack, needles| {\n                Some(One::new(needles[0])?.iter(haystack).rev().collect())\n            },\n        )\n    }\n\n    #[test]\n    fn count_one() {\n        crate::tests::memchr::Runner::new(1).count_iter(|haystack, needles| {\n            Some(One::new(needles[0])?.iter(haystack).count())\n        })\n    }\n\n    #[test]\n    fn forward_two() {\n        crate::tests::memchr::Runner::new(2).forward_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                Some(Two::new(n1, n2)?.iter(haystack).collect())\n            },\n        )\n    }\n\n    #[test]\n    fn reverse_two() {\n        crate::tests::memchr::Runner::new(2).reverse_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                Some(Two::new(n1, n2)?.iter(haystack).rev().collect())\n            },\n        )\n    }\n\n    #[test]\n    fn forward_three() {\n        crate::tests::memchr::Runner::new(3).forward_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                let n3 = needles.get(2).copied()?;\n                Some(Three::new(n1, n2, n3)?.iter(haystack).collect())\n            },\n        )\n    }\n\n    #[test]\n    fn reverse_three() {\n        crate::tests::memchr::Runner::new(3).reverse_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                let n3 = needles.get(2).copied()?;\n                Some(Three::new(n1, n2, n3)?.iter(haystack).rev().collect())\n            },\n        )\n    }\n}\n"
  },
  {
    "path": "src/arch/wasm32/simd128/mod.rs",
    "content": "/*!\nAlgorithms for the `wasm32` target using 128-bit vectors via simd128.\n*/\n\npub mod memchr;\npub mod packedpair;\n"
  },
  {
    "path": "src/arch/wasm32/simd128/packedpair.rs",
    "content": "/*!\nA 128-bit vector implementation of the \"packed pair\" SIMD algorithm.\n\nThe \"packed pair\" algorithm is based on the [generic SIMD] algorithm. The main\ndifference is that it (by default) uses a background distribution of byte\nfrequencies to heuristically select the pair of bytes to search for.\n\n[generic SIMD]: http://0x80.pl/articles/simd-strfind.html#first-and-last\n*/\n\nuse core::arch::wasm32::v128;\n\nuse crate::arch::{all::packedpair::Pair, generic::packedpair};\n\n/// A \"packed pair\" finder that uses 128-bit vector operations.\n///\n/// This finder picks two bytes that it believes have high predictive power\n/// for indicating an overall match of a needle. Depending on whether\n/// `Finder::find` or `Finder::find_prefilter` is used, it reports offsets\n/// where the needle matches or could match. In the prefilter case, candidates\n/// are reported whenever the [`Pair`] of bytes given matches.\n#[derive(Clone, Copy, Debug)]\npub struct Finder(packedpair::Finder<v128>);\n\nimpl Finder {\n    /// Create a new pair searcher. The searcher returned can either report\n    /// exact matches of `needle` or act as a prefilter and report candidate\n    /// positions of `needle`.\n    ///\n    /// If simd128 is unavailable in the current environment or if a [`Pair`]\n    /// could not be constructed from the needle given, then `None` is\n    /// returned.\n    #[inline]\n    pub fn new(needle: &[u8]) -> Option<Finder> {\n        Finder::with_pair(needle, Pair::new(needle)?)\n    }\n\n    /// Create a new \"packed pair\" finder using the pair of bytes given.\n    ///\n    /// This constructor permits callers to control precisely which pair of\n    /// bytes is used as a predicate.\n    ///\n    /// If simd128 is unavailable in the current environment, then `None` is\n    /// returned.\n    #[inline]\n    pub fn with_pair(needle: &[u8], pair: Pair) -> Option<Finder> {\n        if Finder::is_available() {\n            // SAFETY: we check that simd128 is available above. We are also\n            // guaranteed to have needle.len() > 1 because we have a valid\n            // Pair.\n            unsafe { Some(Finder::with_pair_impl(needle, pair)) }\n        } else {\n            None\n        }\n    }\n\n    /// Create a new `Finder` specific to simd128 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as the safety for `packedpair::Finder::new`, and callers must also\n    /// ensure that simd128 is available.\n    #[target_feature(enable = \"simd128\")]\n    #[inline]\n    unsafe fn with_pair_impl(needle: &[u8], pair: Pair) -> Finder {\n        let finder = packedpair::Finder::<v128>::new(needle, pair);\n        Finder(finder)\n    }\n\n    /// Returns true when this implementation is available in the current\n    /// environment.\n    ///\n    /// When this is true, it is guaranteed that [`Finder::with_pair`] will\n    /// return a `Some` value. Similarly, when it is false, it is guaranteed\n    /// that `Finder::with_pair` will return a `None` value. Notice that this\n    /// does not guarantee that [`Finder::new`] will return a `Finder`. Namely,\n    /// even when `Finder::is_available` is true, it is not guaranteed that a\n    /// valid [`Pair`] can be found from the needle given.\n    ///\n    /// Note also that for the lifetime of a single program, if this returns\n    /// true then it will always return true.\n    #[inline]\n    pub fn is_available() -> bool {\n        // We used to gate on `cfg(target_feature = \"simd128\")` here, but\n        // we've since required the feature to be enabled at compile time to\n        // even include this module at all. Therefore, it is always enabled\n        // in this context. See the linked issue for why this was changed.\n        //\n        // Ref: https://github.com/BurntSushi/memchr/issues/144\n        true\n    }\n\n    /// Execute a search using wasm32 v128 vectors and routines.\n    ///\n    /// # Panics\n    ///\n    /// When `haystack.len()` is less than [`Finder::min_haystack_len`].\n    #[inline]\n    pub fn find(&self, haystack: &[u8], needle: &[u8]) -> Option<usize> {\n        self.find_impl(haystack, needle)\n    }\n\n    /// Execute a search using wasm32 v128 vectors and routines.\n    ///\n    /// # Panics\n    ///\n    /// When `haystack.len()` is less than [`Finder::min_haystack_len`].\n    #[inline]\n    pub fn find_prefilter(&self, haystack: &[u8]) -> Option<usize> {\n        self.find_prefilter_impl(haystack)\n    }\n\n    /// Execute a search using wasm32 v128 vectors and routines.\n    ///\n    /// # Panics\n    ///\n    /// When `haystack.len()` is less than [`Finder::min_haystack_len`].\n    ///\n    /// # Safety\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Finder`, which can only be constructed\n    /// when it is safe to call `simd128` routines.)\n    #[target_feature(enable = \"simd128\")]\n    #[inline]\n    fn find_impl(&self, haystack: &[u8], needle: &[u8]) -> Option<usize> {\n        // SAFETY: The target feature safety obligation is automatically\n        // fulfilled by virtue of being a method on `Finder`, which can only be\n        // constructed when it is safe to call `simd128` routines.\n        unsafe { self.0.find(haystack, needle) }\n    }\n\n    /// Execute a prefilter search using wasm32 v128 vectors and routines.\n    ///\n    /// # Panics\n    ///\n    /// When `haystack.len()` is less than [`Finder::min_haystack_len`].\n    ///\n    /// # Safety\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Finder`, which can only be constructed\n    /// when it is safe to call `simd128` routines.)\n    #[target_feature(enable = \"simd128\")]\n    #[inline]\n    fn find_prefilter_impl(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: The target feature safety obligation is automatically\n        // fulfilled by virtue of being a method on `Finder`, which can only be\n        // constructed when it is safe to call `simd128` routines.\n        unsafe { self.0.find_prefilter(haystack) }\n    }\n\n    /// Returns the pair of offsets (into the needle) used to check as a\n    /// predicate before confirming whether a needle exists at a particular\n    /// position.\n    #[inline]\n    pub fn pair(&self) -> &Pair {\n        self.0.pair()\n    }\n\n    /// Returns the minimum haystack length that this `Finder` can search.\n    ///\n    /// Using a haystack with length smaller than this in a search will result\n    /// in a panic. The reason for this restriction is that this finder is\n    /// meant to be a low-level component that is part of a larger substring\n    /// strategy. In that sense, it avoids trying to handle all cases and\n    /// instead only handles the cases that it can handle very well.\n    #[inline]\n    pub fn min_haystack_len(&self) -> usize {\n        self.0.min_haystack_len()\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    fn find(haystack: &[u8], needle: &[u8]) -> Option<Option<usize>> {\n        let f = Finder::new(needle)?;\n        if haystack.len() < f.min_haystack_len() {\n            return None;\n        }\n        Some(f.find(haystack, needle))\n    }\n\n    define_substring_forward_quickcheck!(find);\n\n    #[test]\n    fn forward_substring() {\n        crate::tests::substring::Runner::new().fwd(find).run()\n    }\n\n    #[test]\n    fn forward_packedpair() {\n        fn find(\n            haystack: &[u8],\n            needle: &[u8],\n            index1: u8,\n            index2: u8,\n        ) -> Option<Option<usize>> {\n            let pair = Pair::with_indices(needle, index1, index2)?;\n            let f = Finder::with_pair(needle, pair)?;\n            if haystack.len() < f.min_haystack_len() {\n                return None;\n            }\n            Some(f.find(haystack, needle))\n        }\n        crate::tests::packedpair::Runner::new().fwd(find).run()\n    }\n\n    #[test]\n    fn forward_packedpair_prefilter() {\n        fn find(\n            haystack: &[u8],\n            needle: &[u8],\n            index1: u8,\n            index2: u8,\n        ) -> Option<Option<usize>> {\n            let pair = Pair::with_indices(needle, index1, index2)?;\n            let f = Finder::with_pair(needle, pair)?;\n            if haystack.len() < f.min_haystack_len() {\n                return None;\n            }\n            Some(f.find_prefilter(haystack))\n        }\n        crate::tests::packedpair::Runner::new().fwd(find).run()\n    }\n}\n"
  },
  {
    "path": "src/arch/x86_64/avx2/memchr.rs",
    "content": "/*!\nThis module defines 256-bit vector implementations of `memchr` and friends.\n\nThe main types in this module are [`One`], [`Two`] and [`Three`]. They are for\nsearching for one, two or three distinct bytes, respectively, in a haystack.\nEach type also has corresponding double ended iterators. These searchers are\ntypically much faster than scalar routines accomplishing the same task.\n\nThe `One` searcher also provides a [`One::count`] routine for efficiently\ncounting the number of times a single byte occurs in a haystack. This is\nuseful, for example, for counting the number of lines in a haystack. This\nroutine exists because it is usually faster, especially with a high match\ncount, then using [`One::find`] repeatedly. ([`OneIter`] specializes its\n`Iterator::count` implementation to use this routine.)\n\nOnly one, two and three bytes are supported because three bytes is about\nthe point where one sees diminishing returns. Beyond this point and it's\nprobably (but not necessarily) better to just use a simple `[bool; 256]` array\nor similar. However, it depends mightily on the specific work-load and the\nexpected match frequency.\n*/\n\nuse core::arch::x86_64::{__m128i, __m256i};\n\nuse crate::{arch::generic::memchr as generic, ext::Pointer, vector::Vector};\n\n/// Finds all occurrences of a single byte in a haystack.\n#[derive(Clone, Copy, Debug)]\npub struct One {\n    /// Used for haystacks less than 32 bytes.\n    sse2: generic::One<__m128i>,\n    /// Used for haystacks bigger than 32 bytes.\n    avx2: generic::One<__m256i>,\n}\n\nimpl One {\n    /// Create a new searcher that finds occurrences of the needle byte given.\n    ///\n    /// This particular searcher is specialized to use AVX2 vector instructions\n    /// that typically make it quite fast. (SSE2 is used for haystacks that\n    /// are too short to accommodate an AVX2 vector.)\n    ///\n    /// If either SSE2 or AVX2 is unavailable in the current environment, then\n    /// `None` is returned.\n    #[inline]\n    pub fn new(needle: u8) -> Option<One> {\n        if One::is_available() {\n            // SAFETY: we check that sse2 and avx2 are available above.\n            unsafe { Some(One::new_unchecked(needle)) }\n        } else {\n            None\n        }\n    }\n\n    /// Create a new finder specific to AVX2 vectors and routines without\n    /// checking that either SSE2 or AVX2 is available.\n    ///\n    /// # Safety\n    ///\n    /// Callers must guarantee that it is safe to execute both `sse2` and\n    /// `avx2` instructions in the current environment.\n    ///\n    /// Note that it is a common misconception that if one compiles for an\n    /// `x86_64` target, then they therefore automatically have access to SSE2\n    /// instructions. While this is almost always the case, it isn't true in\n    /// 100% of cases.\n    #[target_feature(enable = \"sse2\", enable = \"avx2\")]\n    #[inline]\n    pub unsafe fn new_unchecked(needle: u8) -> One {\n        One {\n            sse2: generic::One::new(needle),\n            avx2: generic::One::new(needle),\n        }\n    }\n\n    /// Returns true when this implementation is available in the current\n    /// environment.\n    ///\n    /// When this is true, it is guaranteed that [`One::new`] will return\n    /// a `Some` value. Similarly, when it is false, it is guaranteed that\n    /// `One::new` will return a `None` value.\n    ///\n    /// Note also that for the lifetime of a single program, if this returns\n    /// true then it will always return true.\n    #[inline]\n    pub fn is_available() -> bool {\n        #[cfg(not(target_feature = \"sse2\"))]\n        {\n            false\n        }\n        #[cfg(target_feature = \"sse2\")]\n        {\n            #[cfg(target_feature = \"avx2\")]\n            {\n                true\n            }\n            #[cfg(not(target_feature = \"avx2\"))]\n            {\n                #[cfg(feature = \"std\")]\n                {\n                    std::is_x86_feature_detected!(\"avx2\")\n                }\n                #[cfg(not(feature = \"std\"))]\n                {\n                    false\n                }\n            }\n        }\n    }\n\n    /// Return the first occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn find(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `find_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.find_raw(s, e)\n            })\n        }\n    }\n\n    /// Return the last occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn rfind(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `find_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.rfind_raw(s, e)\n            })\n        }\n    }\n\n    /// Counts all occurrences of this byte in the given haystack.\n    #[inline]\n    pub fn count(&self, haystack: &[u8]) -> usize {\n        // SAFETY: All of our pointers are derived directly from a borrowed\n        // slice, which is guaranteed to be valid.\n        unsafe {\n            let start = haystack.as_ptr();\n            let end = start.add(haystack.len());\n            self.count_raw(start, end)\n        }\n    }\n\n    /// Like `find`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn find_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        let len = end.distance(start);\n        if len < __m256i::BYTES {\n            return if len < __m128i::BYTES {\n                // SAFETY: We require the caller to pass valid start/end\n                // pointers.\n                generic::fwd_byte_by_byte(start, end, |b| {\n                    b == self.sse2.needle1()\n                })\n            } else {\n                // SAFETY: We require the caller to pass valid start/end\n                // pointers.\n                self.find_raw_sse2(start, end)\n            };\n        }\n        // SAFETY: Building a `One` means it's safe to call both 'sse2' and\n        // 'avx2' routines. Also, we've checked that our haystack is big\n        // enough to run on the vector routine. Pointer validity is caller's\n        // responsibility.\n        //\n        // Note that we could call `self.avx2.find_raw` directly here. But that\n        // means we'd have to annotate this routine with `target_feature`.\n        // Which is fine, because this routine is `unsafe` anyway and the\n        // `target_feature` obligation is met by virtue of building a `One`.\n        // The real problem is that a routine with a `target_feature`\n        // annotation generally can't be inlined into caller code unless\n        // the caller code has the same target feature annotations. Namely,\n        // the common case (at time of writing) is for calling code to not\n        // have the `avx2` target feature enabled *at compile time*. Without\n        // `target_feature` on this routine, it can be inlined which will\n        // handle some of the short-haystack cases above without touching the\n        // architecture specific code.\n        self.find_raw_avx2(start, end)\n    }\n\n    /// Like `rfind`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn rfind_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        let len = end.distance(start);\n        if len < __m256i::BYTES {\n            return if len < __m128i::BYTES {\n                // SAFETY: We require the caller to pass valid start/end\n                // pointers.\n                generic::rev_byte_by_byte(start, end, |b| {\n                    b == self.sse2.needle1()\n                })\n            } else {\n                // SAFETY: We require the caller to pass valid start/end\n                // pointers.\n                self.rfind_raw_sse2(start, end)\n            };\n        }\n        // SAFETY: Building a `One` means it's safe to call both 'sse2' and\n        // 'avx2' routines. Also, we've checked that our haystack is big\n        // enough to run on the vector routine. Pointer validity is caller's\n        // responsibility.\n        //\n        // See note in forward routine above for why we don't just call\n        // `self.avx2.rfind_raw` directly here.\n        self.rfind_raw_avx2(start, end)\n    }\n\n    /// Counts all occurrences of this byte in the given haystack represented\n    /// by raw pointers.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `0` will always be returned.\n    #[inline]\n    pub unsafe fn count_raw(&self, start: *const u8, end: *const u8) -> usize {\n        if start >= end {\n            return 0;\n        }\n        let len = end.distance(start);\n        if len < __m256i::BYTES {\n            return if len < __m128i::BYTES {\n                // SAFETY: We require the caller to pass valid start/end\n                // pointers.\n                generic::count_byte_by_byte(start, end, |b| {\n                    b == self.sse2.needle1()\n                })\n            } else {\n                // SAFETY: We require the caller to pass valid start/end\n                // pointers.\n                self.count_raw_sse2(start, end)\n            };\n        }\n        // SAFETY: Building a `One` means it's safe to call both 'sse2' and\n        // 'avx2' routines. Also, we've checked that our haystack is big\n        // enough to run on the vector routine. Pointer validity is caller's\n        // responsibility.\n        self.count_raw_avx2(start, end)\n    }\n\n    /// Execute a search using SSE2 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`One::find_raw`], except the distance between `start` and\n    /// `end` must be at least the size of an SSE2 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `One`, which can only be constructed\n    /// when it is safe to call `sse2`/`avx2` routines.)\n    #[target_feature(enable = \"sse2\")]\n    #[inline]\n    unsafe fn find_raw_sse2(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.sse2.find_raw(start, end)\n    }\n\n    /// Execute a search using SSE2 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`One::rfind_raw`], except the distance between `start` and\n    /// `end` must be at least the size of an SSE2 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `One`, which can only be constructed\n    /// when it is safe to call `sse2`/`avx2` routines.)\n    #[target_feature(enable = \"sse2\")]\n    #[inline]\n    unsafe fn rfind_raw_sse2(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.sse2.rfind_raw(start, end)\n    }\n\n    /// Execute a count using SSE2 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`One::count_raw`], except the distance between `start` and\n    /// `end` must be at least the size of an SSE2 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `One`, which can only be constructed\n    /// when it is safe to call `sse2`/`avx2` routines.)\n    #[target_feature(enable = \"sse2\")]\n    #[inline]\n    unsafe fn count_raw_sse2(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> usize {\n        self.sse2.count_raw(start, end)\n    }\n\n    /// Execute a search using AVX2 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`One::find_raw`], except the distance between `start` and\n    /// `end` must be at least the size of an AVX2 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `One`, which can only be constructed\n    /// when it is safe to call `sse2`/`avx2` routines.)\n    #[target_feature(enable = \"avx2\")]\n    #[inline]\n    unsafe fn find_raw_avx2(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.avx2.find_raw(start, end)\n    }\n\n    /// Execute a search using AVX2 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`One::rfind_raw`], except the distance between `start` and\n    /// `end` must be at least the size of an AVX2 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `One`, which can only be constructed\n    /// when it is safe to call `sse2`/`avx2` routines.)\n    #[target_feature(enable = \"avx2\")]\n    #[inline]\n    unsafe fn rfind_raw_avx2(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.avx2.rfind_raw(start, end)\n    }\n\n    /// Execute a count using AVX2 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`One::count_raw`], except the distance between `start` and\n    /// `end` must be at least the size of an AVX2 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `One`, which can only be constructed\n    /// when it is safe to call `sse2`/`avx2` routines.)\n    #[target_feature(enable = \"avx2\")]\n    #[inline]\n    unsafe fn count_raw_avx2(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> usize {\n        self.avx2.count_raw(start, end)\n    }\n\n    /// Returns an iterator over all occurrences of the needle byte in the\n    /// given haystack.\n    ///\n    /// The iterator returned implements `DoubleEndedIterator`. This means it\n    /// can also be used to find occurrences in reverse order.\n    #[inline]\n    pub fn iter<'a, 'h>(&'a self, haystack: &'h [u8]) -> OneIter<'a, 'h> {\n        OneIter { searcher: self, it: generic::Iter::new(haystack) }\n    }\n}\n\n/// An iterator over all occurrences of a single byte in a haystack.\n///\n/// This iterator implements `DoubleEndedIterator`, which means it can also be\n/// used to find occurrences in reverse order.\n///\n/// This iterator is created by the [`One::iter`] method.\n///\n/// The lifetime parameters are as follows:\n///\n/// * `'a` refers to the lifetime of the underlying [`One`] searcher.\n/// * `'h` refers to the lifetime of the haystack being searched.\n#[derive(Clone, Debug)]\npub struct OneIter<'a, 'h> {\n    searcher: &'a One,\n    it: generic::Iter<'h>,\n}\n\nimpl<'a, 'h> Iterator for OneIter<'a, 'h> {\n    type Item = usize;\n\n    #[inline]\n    fn next(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'find_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next(|s, e| self.searcher.find_raw(s, e)) }\n    }\n\n    #[inline]\n    fn count(self) -> usize {\n        self.it.count(|s, e| {\n            // SAFETY: We rely on our generic iterator to return valid start\n            // and end pointers.\n            unsafe { self.searcher.count_raw(s, e) }\n        })\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.it.size_hint()\n    }\n}\n\nimpl<'a, 'h> DoubleEndedIterator for OneIter<'a, 'h> {\n    #[inline]\n    fn next_back(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'rfind_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next_back(|s, e| self.searcher.rfind_raw(s, e)) }\n    }\n}\n\nimpl<'a, 'h> core::iter::FusedIterator for OneIter<'a, 'h> {}\n\n/// Finds all occurrences of two bytes in a haystack.\n///\n/// That is, this reports matches of one of two possible bytes. For example,\n/// searching for `a` or `b` in `afoobar` would report matches at offsets `0`,\n/// `4` and `5`.\n#[derive(Clone, Copy, Debug)]\npub struct Two {\n    /// Used for haystacks less than 32 bytes.\n    sse2: generic::Two<__m128i>,\n    /// Used for haystacks bigger than 32 bytes.\n    avx2: generic::Two<__m256i>,\n}\n\nimpl Two {\n    /// Create a new searcher that finds occurrences of the needle bytes given.\n    ///\n    /// This particular searcher is specialized to use AVX2 vector instructions\n    /// that typically make it quite fast. (SSE2 is used for haystacks that\n    /// are too short to accommodate an AVX2 vector.)\n    ///\n    /// If either SSE2 or AVX2 is unavailable in the current environment, then\n    /// `None` is returned.\n    #[inline]\n    pub fn new(needle1: u8, needle2: u8) -> Option<Two> {\n        if Two::is_available() {\n            // SAFETY: we check that sse2 and avx2 are available above.\n            unsafe { Some(Two::new_unchecked(needle1, needle2)) }\n        } else {\n            None\n        }\n    }\n\n    /// Create a new finder specific to AVX2 vectors and routines without\n    /// checking that either SSE2 or AVX2 is available.\n    ///\n    /// # Safety\n    ///\n    /// Callers must guarantee that it is safe to execute both `sse2` and\n    /// `avx2` instructions in the current environment.\n    ///\n    /// Note that it is a common misconception that if one compiles for an\n    /// `x86_64` target, then they therefore automatically have access to SSE2\n    /// instructions. While this is almost always the case, it isn't true in\n    /// 100% of cases.\n    #[target_feature(enable = \"sse2\", enable = \"avx2\")]\n    #[inline]\n    pub unsafe fn new_unchecked(needle1: u8, needle2: u8) -> Two {\n        Two {\n            sse2: generic::Two::new(needle1, needle2),\n            avx2: generic::Two::new(needle1, needle2),\n        }\n    }\n\n    /// Returns true when this implementation is available in the current\n    /// environment.\n    ///\n    /// When this is true, it is guaranteed that [`Two::new`] will return\n    /// a `Some` value. Similarly, when it is false, it is guaranteed that\n    /// `Two::new` will return a `None` value.\n    ///\n    /// Note also that for the lifetime of a single program, if this returns\n    /// true then it will always return true.\n    #[inline]\n    pub fn is_available() -> bool {\n        #[cfg(not(target_feature = \"sse2\"))]\n        {\n            false\n        }\n        #[cfg(target_feature = \"sse2\")]\n        {\n            #[cfg(target_feature = \"avx2\")]\n            {\n                true\n            }\n            #[cfg(not(target_feature = \"avx2\"))]\n            {\n                #[cfg(feature = \"std\")]\n                {\n                    std::is_x86_feature_detected!(\"avx2\")\n                }\n                #[cfg(not(feature = \"std\"))]\n                {\n                    false\n                }\n            }\n        }\n    }\n\n    /// Return the first occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn find(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `find_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.find_raw(s, e)\n            })\n        }\n    }\n\n    /// Return the last occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn rfind(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `find_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.rfind_raw(s, e)\n            })\n        }\n    }\n\n    /// Like `find`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn find_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        let len = end.distance(start);\n        if len < __m256i::BYTES {\n            return if len < __m128i::BYTES {\n                // SAFETY: We require the caller to pass valid start/end\n                // pointers.\n                generic::fwd_byte_by_byte(start, end, |b| {\n                    b == self.sse2.needle1() || b == self.sse2.needle2()\n                })\n            } else {\n                // SAFETY: We require the caller to pass valid start/end\n                // pointers.\n                self.find_raw_sse2(start, end)\n            };\n        }\n        // SAFETY: Building a `Two` means it's safe to call both 'sse2' and\n        // 'avx2' routines. Also, we've checked that our haystack is big\n        // enough to run on the vector routine. Pointer validity is caller's\n        // responsibility.\n        //\n        // Note that we could call `self.avx2.find_raw` directly here. But that\n        // means we'd have to annotate this routine with `target_feature`.\n        // Which is fine, because this routine is `unsafe` anyway and the\n        // `target_feature` obligation is met by virtue of building a `Two`.\n        // The real problem is that a routine with a `target_feature`\n        // annotation generally can't be inlined into caller code unless\n        // the caller code has the same target feature annotations. Namely,\n        // the common case (at time of writing) is for calling code to not\n        // have the `avx2` target feature enabled *at compile time*. Without\n        // `target_feature` on this routine, it can be inlined which will\n        // handle some of the short-haystack cases above without touching the\n        // architecture specific code.\n        self.find_raw_avx2(start, end)\n    }\n\n    /// Like `rfind`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn rfind_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        let len = end.distance(start);\n        if len < __m256i::BYTES {\n            return if len < __m128i::BYTES {\n                // SAFETY: We require the caller to pass valid start/end\n                // pointers.\n                generic::rev_byte_by_byte(start, end, |b| {\n                    b == self.sse2.needle1() || b == self.sse2.needle2()\n                })\n            } else {\n                // SAFETY: We require the caller to pass valid start/end\n                // pointers.\n                self.rfind_raw_sse2(start, end)\n            };\n        }\n        // SAFETY: Building a `Two` means it's safe to call both 'sse2' and\n        // 'avx2' routines. Also, we've checked that our haystack is big\n        // enough to run on the vector routine. Pointer validity is caller's\n        // responsibility.\n        //\n        // See note in forward routine above for why we don't just call\n        // `self.avx2.rfind_raw` directly here.\n        self.rfind_raw_avx2(start, end)\n    }\n\n    /// Execute a search using SSE2 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`Two::find_raw`], except the distance between `start` and\n    /// `end` must be at least the size of an SSE2 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Two`, which can only be constructed\n    /// when it is safe to call `sse2`/`avx2` routines.)\n    #[target_feature(enable = \"sse2\")]\n    #[inline]\n    unsafe fn find_raw_sse2(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.sse2.find_raw(start, end)\n    }\n\n    /// Execute a search using SSE2 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`Two::rfind_raw`], except the distance between `start` and\n    /// `end` must be at least the size of an SSE2 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Two`, which can only be constructed\n    /// when it is safe to call `sse2`/`avx2` routines.)\n    #[target_feature(enable = \"sse2\")]\n    #[inline]\n    unsafe fn rfind_raw_sse2(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.sse2.rfind_raw(start, end)\n    }\n\n    /// Execute a search using AVX2 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`Two::find_raw`], except the distance between `start` and\n    /// `end` must be at least the size of an AVX2 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Two`, which can only be constructed\n    /// when it is safe to call `sse2`/`avx2` routines.)\n    #[target_feature(enable = \"avx2\")]\n    #[inline]\n    unsafe fn find_raw_avx2(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.avx2.find_raw(start, end)\n    }\n\n    /// Execute a search using AVX2 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`Two::rfind_raw`], except the distance between `start` and\n    /// `end` must be at least the size of an AVX2 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Two`, which can only be constructed\n    /// when it is safe to call `sse2`/`avx2` routines.)\n    #[target_feature(enable = \"avx2\")]\n    #[inline]\n    unsafe fn rfind_raw_avx2(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.avx2.rfind_raw(start, end)\n    }\n\n    /// Returns an iterator over all occurrences of the needle bytes in the\n    /// given haystack.\n    ///\n    /// The iterator returned implements `DoubleEndedIterator`. This means it\n    /// can also be used to find occurrences in reverse order.\n    #[inline]\n    pub fn iter<'a, 'h>(&'a self, haystack: &'h [u8]) -> TwoIter<'a, 'h> {\n        TwoIter { searcher: self, it: generic::Iter::new(haystack) }\n    }\n}\n\n/// An iterator over all occurrences of two possible bytes in a haystack.\n///\n/// This iterator implements `DoubleEndedIterator`, which means it can also be\n/// used to find occurrences in reverse order.\n///\n/// This iterator is created by the [`Two::iter`] method.\n///\n/// The lifetime parameters are as follows:\n///\n/// * `'a` refers to the lifetime of the underlying [`Two`] searcher.\n/// * `'h` refers to the lifetime of the haystack being searched.\n#[derive(Clone, Debug)]\npub struct TwoIter<'a, 'h> {\n    searcher: &'a Two,\n    it: generic::Iter<'h>,\n}\n\nimpl<'a, 'h> Iterator for TwoIter<'a, 'h> {\n    type Item = usize;\n\n    #[inline]\n    fn next(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'find_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next(|s, e| self.searcher.find_raw(s, e)) }\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.it.size_hint()\n    }\n}\n\nimpl<'a, 'h> DoubleEndedIterator for TwoIter<'a, 'h> {\n    #[inline]\n    fn next_back(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'rfind_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next_back(|s, e| self.searcher.rfind_raw(s, e)) }\n    }\n}\n\nimpl<'a, 'h> core::iter::FusedIterator for TwoIter<'a, 'h> {}\n\n/// Finds all occurrences of three bytes in a haystack.\n///\n/// That is, this reports matches of one of three possible bytes. For example,\n/// searching for `a`, `b` or `o` in `afoobar` would report matches at offsets\n/// `0`, `2`, `3`, `4` and `5`.\n#[derive(Clone, Copy, Debug)]\npub struct Three {\n    /// Used for haystacks less than 32 bytes.\n    sse2: generic::Three<__m128i>,\n    /// Used for haystacks bigger than 32 bytes.\n    avx2: generic::Three<__m256i>,\n}\n\nimpl Three {\n    /// Create a new searcher that finds occurrences of the needle bytes given.\n    ///\n    /// This particular searcher is specialized to use AVX2 vector instructions\n    /// that typically make it quite fast. (SSE2 is used for haystacks that\n    /// are too short to accommodate an AVX2 vector.)\n    ///\n    /// If either SSE2 or AVX2 is unavailable in the current environment, then\n    /// `None` is returned.\n    #[inline]\n    pub fn new(needle1: u8, needle2: u8, needle3: u8) -> Option<Three> {\n        if Three::is_available() {\n            // SAFETY: we check that sse2 and avx2 are available above.\n            unsafe { Some(Three::new_unchecked(needle1, needle2, needle3)) }\n        } else {\n            None\n        }\n    }\n\n    /// Create a new finder specific to AVX2 vectors and routines without\n    /// checking that either SSE2 or AVX2 is available.\n    ///\n    /// # Safety\n    ///\n    /// Callers must guarantee that it is safe to execute both `sse2` and\n    /// `avx2` instructions in the current environment.\n    ///\n    /// Note that it is a common misconception that if one compiles for an\n    /// `x86_64` target, then they therefore automatically have access to SSE2\n    /// instructions. While this is almost always the case, it isn't true in\n    /// 100% of cases.\n    #[target_feature(enable = \"sse2\", enable = \"avx2\")]\n    #[inline]\n    pub unsafe fn new_unchecked(\n        needle1: u8,\n        needle2: u8,\n        needle3: u8,\n    ) -> Three {\n        Three {\n            sse2: generic::Three::new(needle1, needle2, needle3),\n            avx2: generic::Three::new(needle1, needle2, needle3),\n        }\n    }\n\n    /// Returns true when this implementation is available in the current\n    /// environment.\n    ///\n    /// When this is true, it is guaranteed that [`Three::new`] will return\n    /// a `Some` value. Similarly, when it is false, it is guaranteed that\n    /// `Three::new` will return a `None` value.\n    ///\n    /// Note also that for the lifetime of a single program, if this returns\n    /// true then it will always return true.\n    #[inline]\n    pub fn is_available() -> bool {\n        #[cfg(not(target_feature = \"sse2\"))]\n        {\n            false\n        }\n        #[cfg(target_feature = \"sse2\")]\n        {\n            #[cfg(target_feature = \"avx2\")]\n            {\n                true\n            }\n            #[cfg(not(target_feature = \"avx2\"))]\n            {\n                #[cfg(feature = \"std\")]\n                {\n                    std::is_x86_feature_detected!(\"avx2\")\n                }\n                #[cfg(not(feature = \"std\"))]\n                {\n                    false\n                }\n            }\n        }\n    }\n\n    /// Return the first occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn find(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `find_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.find_raw(s, e)\n            })\n        }\n    }\n\n    /// Return the last occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn rfind(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `find_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.rfind_raw(s, e)\n            })\n        }\n    }\n\n    /// Like `find`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn find_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        let len = end.distance(start);\n        if len < __m256i::BYTES {\n            return if len < __m128i::BYTES {\n                // SAFETY: We require the caller to pass valid start/end\n                // pointers.\n                generic::fwd_byte_by_byte(start, end, |b| {\n                    b == self.sse2.needle1()\n                        || b == self.sse2.needle2()\n                        || b == self.sse2.needle3()\n                })\n            } else {\n                // SAFETY: We require the caller to pass valid start/end\n                // pointers.\n                self.find_raw_sse2(start, end)\n            };\n        }\n        // SAFETY: Building a `Three` means it's safe to call both 'sse2' and\n        // 'avx2' routines. Also, we've checked that our haystack is big\n        // enough to run on the vector routine. Pointer validity is caller's\n        // responsibility.\n        //\n        // Note that we could call `self.avx2.find_raw` directly here. But that\n        // means we'd have to annotate this routine with `target_feature`.\n        // Which is fine, because this routine is `unsafe` anyway and the\n        // `target_feature` obligation is met by virtue of building a `Three`.\n        // The real problem is that a routine with a `target_feature`\n        // annotation generally can't be inlined into caller code unless\n        // the caller code has the same target feature annotations. Namely,\n        // the common case (at time of writing) is for calling code to not\n        // have the `avx2` target feature enabled *at compile time*. Without\n        // `target_feature` on this routine, it can be inlined which will\n        // handle some of the short-haystack cases above without touching the\n        // architecture specific code.\n        self.find_raw_avx2(start, end)\n    }\n\n    /// Like `rfind`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn rfind_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        let len = end.distance(start);\n        if len < __m256i::BYTES {\n            return if len < __m128i::BYTES {\n                // SAFETY: We require the caller to pass valid start/end\n                // pointers.\n                generic::rev_byte_by_byte(start, end, |b| {\n                    b == self.sse2.needle1()\n                        || b == self.sse2.needle2()\n                        || b == self.sse2.needle3()\n                })\n            } else {\n                // SAFETY: We require the caller to pass valid start/end\n                // pointers.\n                self.rfind_raw_sse2(start, end)\n            };\n        }\n        // SAFETY: Building a `Three` means it's safe to call both 'sse2' and\n        // 'avx2' routines. Also, we've checked that our haystack is big\n        // enough to run on the vector routine. Pointer validity is caller's\n        // responsibility.\n        //\n        // See note in forward routine above for why we don't just call\n        // `self.avx2.rfind_raw` directly here.\n        self.rfind_raw_avx2(start, end)\n    }\n\n    /// Execute a search using SSE2 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`Three::find_raw`], except the distance between `start` and\n    /// `end` must be at least the size of an SSE2 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Three`, which can only be constructed\n    /// when it is safe to call `sse2`/`avx2` routines.)\n    #[target_feature(enable = \"sse2\")]\n    #[inline]\n    unsafe fn find_raw_sse2(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.sse2.find_raw(start, end)\n    }\n\n    /// Execute a search using SSE2 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`Three::rfind_raw`], except the distance between `start` and\n    /// `end` must be at least the size of an SSE2 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Three`, which can only be constructed\n    /// when it is safe to call `sse2`/`avx2` routines.)\n    #[target_feature(enable = \"sse2\")]\n    #[inline]\n    unsafe fn rfind_raw_sse2(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.sse2.rfind_raw(start, end)\n    }\n\n    /// Execute a search using AVX2 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`Three::find_raw`], except the distance between `start` and\n    /// `end` must be at least the size of an AVX2 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Three`, which can only be constructed\n    /// when it is safe to call `sse2`/`avx2` routines.)\n    #[target_feature(enable = \"avx2\")]\n    #[inline]\n    unsafe fn find_raw_avx2(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.avx2.find_raw(start, end)\n    }\n\n    /// Execute a search using AVX2 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`Three::rfind_raw`], except the distance between `start` and\n    /// `end` must be at least the size of an AVX2 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Three`, which can only be constructed\n    /// when it is safe to call `sse2`/`avx2` routines.)\n    #[target_feature(enable = \"avx2\")]\n    #[inline]\n    unsafe fn rfind_raw_avx2(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.avx2.rfind_raw(start, end)\n    }\n\n    /// Returns an iterator over all occurrences of the needle bytes in the\n    /// given haystack.\n    ///\n    /// The iterator returned implements `DoubleEndedIterator`. This means it\n    /// can also be used to find occurrences in reverse order.\n    #[inline]\n    pub fn iter<'a, 'h>(&'a self, haystack: &'h [u8]) -> ThreeIter<'a, 'h> {\n        ThreeIter { searcher: self, it: generic::Iter::new(haystack) }\n    }\n}\n\n/// An iterator over all occurrences of three possible bytes in a haystack.\n///\n/// This iterator implements `DoubleEndedIterator`, which means it can also be\n/// used to find occurrences in reverse order.\n///\n/// This iterator is created by the [`Three::iter`] method.\n///\n/// The lifetime parameters are as follows:\n///\n/// * `'a` refers to the lifetime of the underlying [`Three`] searcher.\n/// * `'h` refers to the lifetime of the haystack being searched.\n#[derive(Clone, Debug)]\npub struct ThreeIter<'a, 'h> {\n    searcher: &'a Three,\n    it: generic::Iter<'h>,\n}\n\nimpl<'a, 'h> Iterator for ThreeIter<'a, 'h> {\n    type Item = usize;\n\n    #[inline]\n    fn next(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'find_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next(|s, e| self.searcher.find_raw(s, e)) }\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.it.size_hint()\n    }\n}\n\nimpl<'a, 'h> DoubleEndedIterator for ThreeIter<'a, 'h> {\n    #[inline]\n    fn next_back(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'rfind_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next_back(|s, e| self.searcher.rfind_raw(s, e)) }\n    }\n}\n\nimpl<'a, 'h> core::iter::FusedIterator for ThreeIter<'a, 'h> {}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    define_memchr_quickcheck!(super);\n\n    #[test]\n    fn forward_one() {\n        crate::tests::memchr::Runner::new(1).forward_iter(\n            |haystack, needles| {\n                Some(One::new(needles[0])?.iter(haystack).collect())\n            },\n        )\n    }\n\n    #[test]\n    fn reverse_one() {\n        crate::tests::memchr::Runner::new(1).reverse_iter(\n            |haystack, needles| {\n                Some(One::new(needles[0])?.iter(haystack).rev().collect())\n            },\n        )\n    }\n\n    #[test]\n    fn count_one() {\n        crate::tests::memchr::Runner::new(1).count_iter(|haystack, needles| {\n            Some(One::new(needles[0])?.iter(haystack).count())\n        })\n    }\n\n    #[test]\n    fn forward_two() {\n        crate::tests::memchr::Runner::new(2).forward_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                Some(Two::new(n1, n2)?.iter(haystack).collect())\n            },\n        )\n    }\n\n    #[test]\n    fn reverse_two() {\n        crate::tests::memchr::Runner::new(2).reverse_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                Some(Two::new(n1, n2)?.iter(haystack).rev().collect())\n            },\n        )\n    }\n\n    #[test]\n    fn forward_three() {\n        crate::tests::memchr::Runner::new(3).forward_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                let n3 = needles.get(2).copied()?;\n                Some(Three::new(n1, n2, n3)?.iter(haystack).collect())\n            },\n        )\n    }\n\n    #[test]\n    fn reverse_three() {\n        crate::tests::memchr::Runner::new(3).reverse_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                let n3 = needles.get(2).copied()?;\n                Some(Three::new(n1, n2, n3)?.iter(haystack).rev().collect())\n            },\n        )\n    }\n}\n"
  },
  {
    "path": "src/arch/x86_64/avx2/mod.rs",
    "content": "/*!\nAlgorithms for the `x86_64` target using 256-bit vectors via AVX2.\n*/\n\npub mod memchr;\npub mod packedpair;\n"
  },
  {
    "path": "src/arch/x86_64/avx2/packedpair.rs",
    "content": "/*!\nA 256-bit vector implementation of the \"packed pair\" SIMD algorithm.\n\nThe \"packed pair\" algorithm is based on the [generic SIMD] algorithm. The main\ndifference is that it (by default) uses a background distribution of byte\nfrequencies to heuristically select the pair of bytes to search for.\n\n[generic SIMD]: http://0x80.pl/articles/simd-strfind.html#first-and-last\n*/\n\nuse core::arch::x86_64::{__m128i, __m256i};\n\nuse crate::arch::{all::packedpair::Pair, generic::packedpair};\n\n/// A \"packed pair\" finder that uses 256-bit vector operations.\n///\n/// This finder picks two bytes that it believes have high predictive power\n/// for indicating an overall match of a needle. Depending on whether\n/// `Finder::find` or `Finder::find_prefilter` is used, it reports offsets\n/// where the needle matches or could match. In the prefilter case, candidates\n/// are reported whenever the [`Pair`] of bytes given matches.\n#[derive(Clone, Copy, Debug)]\npub struct Finder {\n    sse2: packedpair::Finder<__m128i>,\n    avx2: packedpair::Finder<__m256i>,\n}\n\nimpl Finder {\n    /// Create a new pair searcher. The searcher returned can either report\n    /// exact matches of `needle` or act as a prefilter and report candidate\n    /// positions of `needle`.\n    ///\n    /// If AVX2 is unavailable in the current environment or if a [`Pair`]\n    /// could not be constructed from the needle given, then `None` is\n    /// returned.\n    #[inline]\n    pub fn new(needle: &[u8]) -> Option<Finder> {\n        Finder::with_pair(needle, Pair::new(needle)?)\n    }\n\n    /// Create a new \"packed pair\" finder using the pair of bytes given.\n    ///\n    /// This constructor permits callers to control precisely which pair of\n    /// bytes is used as a predicate.\n    ///\n    /// If AVX2 is unavailable in the current environment, then `None` is\n    /// returned.\n    #[inline]\n    pub fn with_pair(needle: &[u8], pair: Pair) -> Option<Finder> {\n        if Finder::is_available() {\n            // SAFETY: we check that sse2/avx2 is available above. We are also\n            // guaranteed to have needle.len() > 1 because we have a valid\n            // Pair.\n            unsafe { Some(Finder::with_pair_impl(needle, pair)) }\n        } else {\n            None\n        }\n    }\n\n    /// Create a new `Finder` specific to SSE2 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as the safety for `packedpair::Finder::new`, and callers must also\n    /// ensure that both SSE2 and AVX2 are available.\n    #[target_feature(enable = \"sse2\", enable = \"avx2\")]\n    #[inline]\n    unsafe fn with_pair_impl(needle: &[u8], pair: Pair) -> Finder {\n        let sse2 = packedpair::Finder::<__m128i>::new(needle, pair);\n        let avx2 = packedpair::Finder::<__m256i>::new(needle, pair);\n        Finder { sse2, avx2 }\n    }\n\n    /// Returns true when this implementation is available in the current\n    /// environment.\n    ///\n    /// When this is true, it is guaranteed that [`Finder::with_pair`] will\n    /// return a `Some` value. Similarly, when it is false, it is guaranteed\n    /// that `Finder::with_pair` will return a `None` value. Notice that this\n    /// does not guarantee that [`Finder::new`] will return a `Finder`. Namely,\n    /// even when `Finder::is_available` is true, it is not guaranteed that a\n    /// valid [`Pair`] can be found from the needle given.\n    ///\n    /// Note also that for the lifetime of a single program, if this returns\n    /// true then it will always return true.\n    #[inline]\n    pub fn is_available() -> bool {\n        #[cfg(not(target_feature = \"sse2\"))]\n        {\n            false\n        }\n        #[cfg(target_feature = \"sse2\")]\n        {\n            #[cfg(target_feature = \"avx2\")]\n            {\n                true\n            }\n            #[cfg(not(target_feature = \"avx2\"))]\n            {\n                #[cfg(feature = \"std\")]\n                {\n                    std::is_x86_feature_detected!(\"avx2\")\n                }\n                #[cfg(not(feature = \"std\"))]\n                {\n                    false\n                }\n            }\n        }\n    }\n\n    /// Execute a search using AVX2 vectors and routines.\n    ///\n    /// # Panics\n    ///\n    /// When `haystack.len()` is less than [`Finder::min_haystack_len`].\n    #[inline]\n    pub fn find(&self, haystack: &[u8], needle: &[u8]) -> Option<usize> {\n        // SAFETY: Building a `Finder` means it's safe to call 'sse2' routines.\n        unsafe { self.find_impl(haystack, needle) }\n    }\n\n    /// Run this finder on the given haystack as a prefilter.\n    ///\n    /// If a candidate match is found, then an offset where the needle *could*\n    /// begin in the haystack is returned.\n    ///\n    /// # Panics\n    ///\n    /// When `haystack.len()` is less than [`Finder::min_haystack_len`].\n    #[inline]\n    pub fn find_prefilter(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: Building a `Finder` means it's safe to call 'sse2' routines.\n        unsafe { self.find_prefilter_impl(haystack) }\n    }\n\n    /// Execute a search using AVX2 vectors and routines.\n    ///\n    /// # Panics\n    ///\n    /// When `haystack.len()` is less than [`Finder::min_haystack_len`].\n    ///\n    /// # Safety\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Finder`, which can only be constructed\n    /// when it is safe to call `sse2` and `avx2` routines.)\n    #[target_feature(enable = \"sse2\", enable = \"avx2\")]\n    #[inline]\n    unsafe fn find_impl(\n        &self,\n        haystack: &[u8],\n        needle: &[u8],\n    ) -> Option<usize> {\n        if haystack.len() < self.avx2.min_haystack_len() {\n            self.sse2.find(haystack, needle)\n        } else {\n            self.avx2.find(haystack, needle)\n        }\n    }\n\n    /// Execute a prefilter search using AVX2 vectors and routines.\n    ///\n    /// # Panics\n    ///\n    /// When `haystack.len()` is less than [`Finder::min_haystack_len`].\n    ///\n    /// # Safety\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Finder`, which can only be constructed\n    /// when it is safe to call `sse2` and `avx2` routines.)\n    #[target_feature(enable = \"sse2\", enable = \"avx2\")]\n    #[inline]\n    unsafe fn find_prefilter_impl(&self, haystack: &[u8]) -> Option<usize> {\n        if haystack.len() < self.avx2.min_haystack_len() {\n            self.sse2.find_prefilter(haystack)\n        } else {\n            self.avx2.find_prefilter(haystack)\n        }\n    }\n\n    /// Returns the pair of offsets (into the needle) used to check as a\n    /// predicate before confirming whether a needle exists at a particular\n    /// position.\n    #[inline]\n    pub fn pair(&self) -> &Pair {\n        self.avx2.pair()\n    }\n\n    /// Returns the minimum haystack length that this `Finder` can search.\n    ///\n    /// Using a haystack with length smaller than this in a search will result\n    /// in a panic. The reason for this restriction is that this finder is\n    /// meant to be a low-level component that is part of a larger substring\n    /// strategy. In that sense, it avoids trying to handle all cases and\n    /// instead only handles the cases that it can handle very well.\n    #[inline]\n    pub fn min_haystack_len(&self) -> usize {\n        // The caller doesn't need to care about AVX2's min_haystack_len\n        // since this implementation will automatically switch to the SSE2\n        // implementation if the haystack is too short for AVX2. Therefore, the\n        // caller only needs to care about SSE2's min_haystack_len.\n        //\n        // This does assume that SSE2's min_haystack_len is less than or\n        // equal to AVX2's min_haystack_len. In practice, this is true and\n        // there is no way it could be false based on how this Finder is\n        // implemented. Namely, both SSE2 and AVX2 use the same `Pair`. If\n        // they used different pairs, then it's possible (although perhaps\n        // pathological) for SSE2's min_haystack_len to be bigger than AVX2's.\n        self.sse2.min_haystack_len()\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    fn find(haystack: &[u8], needle: &[u8]) -> Option<Option<usize>> {\n        let f = Finder::new(needle)?;\n        if haystack.len() < f.min_haystack_len() {\n            return None;\n        }\n        Some(f.find(haystack, needle))\n    }\n\n    define_substring_forward_quickcheck!(find);\n\n    #[test]\n    fn forward_substring() {\n        crate::tests::substring::Runner::new().fwd(find).run()\n    }\n\n    #[test]\n    fn forward_packedpair() {\n        fn find(\n            haystack: &[u8],\n            needle: &[u8],\n            index1: u8,\n            index2: u8,\n        ) -> Option<Option<usize>> {\n            let pair = Pair::with_indices(needle, index1, index2)?;\n            let f = Finder::with_pair(needle, pair)?;\n            if haystack.len() < f.min_haystack_len() {\n                return None;\n            }\n            Some(f.find(haystack, needle))\n        }\n        crate::tests::packedpair::Runner::new().fwd(find).run()\n    }\n\n    #[test]\n    fn forward_packedpair_prefilter() {\n        fn find(\n            haystack: &[u8],\n            needle: &[u8],\n            index1: u8,\n            index2: u8,\n        ) -> Option<Option<usize>> {\n            if !cfg!(target_feature = \"sse2\") {\n                return None;\n            }\n            let pair = Pair::with_indices(needle, index1, index2)?;\n            let f = Finder::with_pair(needle, pair)?;\n            if haystack.len() < f.min_haystack_len() {\n                return None;\n            }\n            Some(f.find_prefilter(haystack))\n        }\n        crate::tests::packedpair::Runner::new().fwd(find).run()\n    }\n}\n"
  },
  {
    "path": "src/arch/x86_64/memchr.rs",
    "content": "/*!\nWrapper routines for `memchr` and friends.\n\nThese routines efficiently dispatch to the best implementation based on what\nthe CPU supports.\n*/\n\n/// Provides a way to run a memchr-like function while amortizing the cost of\n/// runtime CPU feature detection.\n///\n/// This works by loading a function pointer from an atomic global. Initially,\n/// this global is set to a function that does CPU feature detection. For\n/// example, if AVX2 is enabled, then the AVX2 implementation is used.\n/// Otherwise, at least on x86_64, the SSE2 implementation is used. (And\n/// in some niche cases, if SSE2 isn't available, then the architecture\n/// independent fallback implementation is used.)\n///\n/// After the first call to this function, the atomic global is replaced with\n/// the specific AVX2, SSE2 or fallback routine chosen. Subsequent calls then\n/// will directly call the chosen routine instead of needing to go through the\n/// CPU feature detection branching again.\n///\n/// This particular macro is specifically written to provide the implementation\n/// of functions with the following signature:\n///\n/// ```ignore\n/// fn memchr(needle1: u8, start: *const u8, end: *const u8) -> Option<usize>;\n/// ```\n///\n/// Where you can also have `memchr2` and `memchr3`, but with `needle2` and\n/// `needle3`, respectively. The `start` and `end` parameters correspond to the\n/// start and end of the haystack, respectively.\n///\n/// We use raw pointers here instead of the more obvious `haystack: &[u8]` so\n/// that the function is compatible with our lower level iterator logic that\n/// operates on raw pointers. We use this macro to implement \"raw\" memchr\n/// routines with the signature above, and then define memchr routines using\n/// regular slices on top of them.\n///\n/// Note that we use `#[cfg(target_feature = \"sse2\")]` below even though\n/// it shouldn't be strictly necessary because without it, it seems to\n/// cause the compiler to blow up. I guess it can't handle a function\n/// pointer being created with a sse target feature? Dunno. See the\n/// `build-for-x86-64-but-non-sse-target` CI job if you want to experiment with\n/// this.\n///\n/// # Safety\n///\n/// Primarily callers must ensure that `$fnty` is a correct function pointer\n/// type and not something else.\n///\n/// Callers must also ensure that `$memchrty::$memchrfind` corresponds to a\n/// routine that returns a valid function pointer when a match is found. That\n/// is, a pointer that is `>= start` and `< end`.\n///\n/// Callers must also ensure that the `$hay_start` and `$hay_end` identifiers\n/// correspond to valid pointers.\nmacro_rules! unsafe_ifunc {\n    (\n        $memchrty:ident,\n        $memchrfind:ident,\n        $fnty:ty,\n        $retty:ty,\n        $hay_start:ident,\n        $hay_end:ident,\n        $($needle:ident),+\n    ) => {{\n        #![allow(unused_unsafe)]\n\n        use core::sync::atomic::{AtomicPtr, Ordering};\n\n        type Fn = *mut ();\n        type RealFn = $fnty;\n        static FN: AtomicPtr<()> = AtomicPtr::new(detect as Fn);\n\n        #[cfg(target_feature = \"sse2\")]\n        #[target_feature(enable = \"sse2\", enable = \"avx2\")]\n        unsafe fn find_avx2(\n            $($needle: u8),+,\n            $hay_start: *const u8,\n            $hay_end: *const u8,\n        ) -> $retty {\n            use crate::arch::x86_64::avx2::memchr::$memchrty;\n            $memchrty::new_unchecked($($needle),+)\n                .$memchrfind($hay_start, $hay_end)\n        }\n\n        #[cfg(target_feature = \"sse2\")]\n        #[target_feature(enable = \"sse2\")]\n        unsafe fn find_sse2(\n            $($needle: u8),+,\n            $hay_start: *const u8,\n            $hay_end: *const u8,\n        ) -> $retty {\n            use crate::arch::x86_64::sse2::memchr::$memchrty;\n            $memchrty::new_unchecked($($needle),+)\n                .$memchrfind($hay_start, $hay_end)\n        }\n\n        unsafe fn find_fallback(\n            $($needle: u8),+,\n            $hay_start: *const u8,\n            $hay_end: *const u8,\n        ) -> $retty {\n            use crate::arch::all::memchr::$memchrty;\n            $memchrty::new($($needle),+).$memchrfind($hay_start, $hay_end)\n        }\n\n        unsafe fn detect(\n            $($needle: u8),+,\n            $hay_start: *const u8,\n            $hay_end: *const u8,\n        ) -> $retty {\n            let fun = {\n                #[cfg(not(target_feature = \"sse2\"))]\n                {\n                    debug!(\n                        \"no sse2 feature available, using fallback for {}\",\n                        stringify!($memchrty),\n                    );\n                    find_fallback as RealFn\n                }\n                #[cfg(target_feature = \"sse2\")]\n                {\n                    use crate::arch::x86_64::{sse2, avx2};\n                    if avx2::memchr::$memchrty::is_available() {\n                        debug!(\"chose AVX2 for {}\", stringify!($memchrty));\n                        find_avx2 as RealFn\n                    } else if sse2::memchr::$memchrty::is_available() {\n                        debug!(\"chose SSE2 for {}\", stringify!($memchrty));\n                        find_sse2 as RealFn\n                    } else {\n                        debug!(\"chose fallback for {}\", stringify!($memchrty));\n                        find_fallback as RealFn\n                    }\n                }\n            };\n            FN.store(fun as Fn, Ordering::Relaxed);\n            // SAFETY: The only thing we need to uphold here is the\n            // `#[target_feature]` requirements. Since we check is_available\n            // above before using the corresponding implementation, we are\n            // guaranteed to only call code that is supported on the current\n            // CPU.\n            fun($($needle),+, $hay_start, $hay_end)\n        }\n\n        // SAFETY: By virtue of the caller contract, RealFn is a function\n        // pointer, which is always safe to transmute with a *mut (). Also,\n        // since we use $memchrty::is_available, it is guaranteed to be safe\n        // to call $memchrty::$memchrfind.\n        unsafe {\n            let fun = FN.load(Ordering::Relaxed);\n            core::mem::transmute::<Fn, RealFn>(fun)(\n                $($needle),+,\n                $hay_start,\n                $hay_end,\n            )\n        }\n    }};\n}\n\n// The routines below dispatch to AVX2, SSE2 or a fallback routine based on\n// what's available in the current environment. The secret sauce here is that\n// we only check for which one to use approximately once, and then \"cache\" that\n// choice into a global function pointer. Subsequent invocations then just call\n// the appropriate function directly.\n\n/// memchr, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `One::find_raw`.\n#[inline(always)]\npub(crate) fn memchr_raw(\n    n1: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    // SAFETY: We provide a valid function pointer type.\n    unsafe_ifunc!(\n        One,\n        find_raw,\n        unsafe fn(u8, *const u8, *const u8) -> Option<*const u8>,\n        Option<*const u8>,\n        start,\n        end,\n        n1\n    )\n}\n\n/// memrchr, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `One::rfind_raw`.\n#[inline(always)]\npub(crate) fn memrchr_raw(\n    n1: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    // SAFETY: We provide a valid function pointer type.\n    unsafe_ifunc!(\n        One,\n        rfind_raw,\n        unsafe fn(u8, *const u8, *const u8) -> Option<*const u8>,\n        Option<*const u8>,\n        start,\n        end,\n        n1\n    )\n}\n\n/// memchr2, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `Two::find_raw`.\n#[inline(always)]\npub(crate) fn memchr2_raw(\n    n1: u8,\n    n2: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    // SAFETY: We provide a valid function pointer type.\n    unsafe_ifunc!(\n        Two,\n        find_raw,\n        unsafe fn(u8, u8, *const u8, *const u8) -> Option<*const u8>,\n        Option<*const u8>,\n        start,\n        end,\n        n1,\n        n2\n    )\n}\n\n/// memrchr2, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `Two::rfind_raw`.\n#[inline(always)]\npub(crate) fn memrchr2_raw(\n    n1: u8,\n    n2: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    // SAFETY: We provide a valid function pointer type.\n    unsafe_ifunc!(\n        Two,\n        rfind_raw,\n        unsafe fn(u8, u8, *const u8, *const u8) -> Option<*const u8>,\n        Option<*const u8>,\n        start,\n        end,\n        n1,\n        n2\n    )\n}\n\n/// memchr3, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `Three::find_raw`.\n#[inline(always)]\npub(crate) fn memchr3_raw(\n    n1: u8,\n    n2: u8,\n    n3: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    // SAFETY: We provide a valid function pointer type.\n    unsafe_ifunc!(\n        Three,\n        find_raw,\n        unsafe fn(u8, u8, u8, *const u8, *const u8) -> Option<*const u8>,\n        Option<*const u8>,\n        start,\n        end,\n        n1,\n        n2,\n        n3\n    )\n}\n\n/// memrchr3, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `Three::rfind_raw`.\n#[inline(always)]\npub(crate) fn memrchr3_raw(\n    n1: u8,\n    n2: u8,\n    n3: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    // SAFETY: We provide a valid function pointer type.\n    unsafe_ifunc!(\n        Three,\n        rfind_raw,\n        unsafe fn(u8, u8, u8, *const u8, *const u8) -> Option<*const u8>,\n        Option<*const u8>,\n        start,\n        end,\n        n1,\n        n2,\n        n3\n    )\n}\n\n/// Count all matching bytes, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `One::count_raw`.\n#[inline(always)]\npub(crate) fn count_raw(n1: u8, start: *const u8, end: *const u8) -> usize {\n    // SAFETY: We provide a valid function pointer type.\n    unsafe_ifunc!(\n        One,\n        count_raw,\n        unsafe fn(u8, *const u8, *const u8) -> usize,\n        usize,\n        start,\n        end,\n        n1\n    )\n}\n"
  },
  {
    "path": "src/arch/x86_64/mod.rs",
    "content": "/*!\nVector algorithms for the `x86_64` target.\n*/\n\npub mod avx2;\npub mod sse2;\n\npub(crate) mod memchr;\n"
  },
  {
    "path": "src/arch/x86_64/sse2/memchr.rs",
    "content": "/*!\nThis module defines 128-bit vector implementations of `memchr` and friends.\n\nThe main types in this module are [`One`], [`Two`] and [`Three`]. They are for\nsearching for one, two or three distinct bytes, respectively, in a haystack.\nEach type also has corresponding double ended iterators. These searchers are\ntypically much faster than scalar routines accomplishing the same task.\n\nThe `One` searcher also provides a [`One::count`] routine for efficiently\ncounting the number of times a single byte occurs in a haystack. This is\nuseful, for example, for counting the number of lines in a haystack. This\nroutine exists because it is usually faster, especially with a high match\ncount, than using [`One::find`] repeatedly. ([`OneIter`] specializes its\n`Iterator::count` implementation to use this routine.)\n\nOnly one, two and three bytes are supported because three bytes is about\nthe point where one sees diminishing returns. Beyond this point and it's\nprobably (but not necessarily) better to just use a simple `[bool; 256]` array\nor similar. However, it depends mightily on the specific work-load and the\nexpected match frequency.\n*/\n\nuse core::arch::x86_64::__m128i;\n\nuse crate::{arch::generic::memchr as generic, ext::Pointer, vector::Vector};\n\n/// Finds all occurrences of a single byte in a haystack.\n#[derive(Clone, Copy, Debug)]\npub struct One(generic::One<__m128i>);\n\nimpl One {\n    /// Create a new searcher that finds occurrences of the needle byte given.\n    ///\n    /// This particular searcher is specialized to use SSE2 vector instructions\n    /// that typically make it quite fast.\n    ///\n    /// If SSE2 is unavailable in the current environment, then `None` is\n    /// returned.\n    #[inline]\n    pub fn new(needle: u8) -> Option<One> {\n        if One::is_available() {\n            // SAFETY: we check that sse2 is available above.\n            unsafe { Some(One::new_unchecked(needle)) }\n        } else {\n            None\n        }\n    }\n\n    /// Create a new finder specific to SSE2 vectors and routines without\n    /// checking that SSE2 is available.\n    ///\n    /// # Safety\n    ///\n    /// Callers must guarantee that it is safe to execute `sse2` instructions\n    /// in the current environment.\n    ///\n    /// Note that it is a common misconception that if one compiles for an\n    /// `x86_64` target, then they therefore automatically have access to SSE2\n    /// instructions. While this is almost always the case, it isn't true in\n    /// 100% of cases.\n    #[target_feature(enable = \"sse2\")]\n    #[inline]\n    pub unsafe fn new_unchecked(needle: u8) -> One {\n        One(generic::One::new(needle))\n    }\n\n    /// Returns true when this implementation is available in the current\n    /// environment.\n    ///\n    /// When this is true, it is guaranteed that [`One::new`] will return\n    /// a `Some` value. Similarly, when it is false, it is guaranteed that\n    /// `One::new` will return a `None` value.\n    ///\n    /// Note also that for the lifetime of a single program, if this returns\n    /// true then it will always return true.\n    #[inline]\n    pub fn is_available() -> bool {\n        #[cfg(target_feature = \"sse2\")]\n        {\n            true\n        }\n        #[cfg(not(target_feature = \"sse2\"))]\n        {\n            false\n        }\n    }\n\n    /// Return the first occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn find(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `find_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.find_raw(s, e)\n            })\n        }\n    }\n\n    /// Return the last occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn rfind(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `rfind_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.rfind_raw(s, e)\n            })\n        }\n    }\n\n    /// Counts all occurrences of this byte in the given haystack.\n    #[inline]\n    pub fn count(&self, haystack: &[u8]) -> usize {\n        // SAFETY: All of our pointers are derived directly from a borrowed\n        // slice, which is guaranteed to be valid.\n        unsafe {\n            let start = haystack.as_ptr();\n            let end = start.add(haystack.len());\n            self.count_raw(start, end)\n        }\n    }\n\n    /// Like `find`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn find_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        if end.distance(start) < __m128i::BYTES {\n            // SAFETY: We require the caller to pass valid start/end pointers.\n            return generic::fwd_byte_by_byte(start, end, |b| {\n                b == self.0.needle1()\n            });\n        }\n        // SAFETY: Building a `One` means it's safe to call 'sse2' routines.\n        // Also, we've checked that our haystack is big enough to run on the\n        // vector routine. Pointer validity is caller's responsibility.\n        //\n        // Note that we could call `self.0.find_raw` directly here. But that\n        // means we'd have to annotate this routine with `target_feature`.\n        // Which is fine, because this routine is `unsafe` anyway and the\n        // `target_feature` obligation is met by virtue of building a `One`.\n        // The real problem is that a routine with a `target_feature`\n        // annotation generally can't be inlined into caller code unless the\n        // caller code has the same target feature annotations. Which is maybe\n        // okay for SSE2, but we do the same thing for AVX2 where caller code\n        // probably usually doesn't have AVX2 enabled. That means that this\n        // routine can be inlined which will handle some of the short-haystack\n        // cases above without touching the architecture specific code.\n        self.find_raw_impl(start, end)\n    }\n\n    /// Like `rfind`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn rfind_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        if end.distance(start) < __m128i::BYTES {\n            // SAFETY: We require the caller to pass valid start/end pointers.\n            return generic::rev_byte_by_byte(start, end, |b| {\n                b == self.0.needle1()\n            });\n        }\n        // SAFETY: Building a `One` means it's safe to call 'sse2' routines.\n        // Also, we've checked that our haystack is big enough to run on the\n        // vector routine. Pointer validity is caller's responsibility.\n        //\n        // See note in forward routine above for why we don't just call\n        // `self.0.rfind_raw` directly here.\n        self.rfind_raw_impl(start, end)\n    }\n\n    /// Counts all occurrences of this byte in the given haystack represented\n    /// by raw pointers.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `0` will always be returned.\n    #[inline]\n    pub unsafe fn count_raw(&self, start: *const u8, end: *const u8) -> usize {\n        if start >= end {\n            return 0;\n        }\n        if end.distance(start) < __m128i::BYTES {\n            // SAFETY: We require the caller to pass valid start/end pointers.\n            return generic::count_byte_by_byte(start, end, |b| {\n                b == self.0.needle1()\n            });\n        }\n        // SAFETY: Building a `One` means it's safe to call 'sse2' routines.\n        // Also, we've checked that our haystack is big enough to run on the\n        // vector routine. Pointer validity is caller's responsibility.\n        self.count_raw_impl(start, end)\n    }\n\n    /// Execute a search using SSE2 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`One::find_raw`], except the distance between `start` and\n    /// `end` must be at least the size of an SSE2 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `One`, which can only be constructed\n    /// when it is safe to call `sse2` routines.)\n    #[target_feature(enable = \"sse2\")]\n    #[inline]\n    unsafe fn find_raw_impl(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.0.find_raw(start, end)\n    }\n\n    /// Execute a search using SSE2 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`One::rfind_raw`], except the distance between `start` and\n    /// `end` must be at least the size of an SSE2 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `One`, which can only be constructed\n    /// when it is safe to call `sse2` routines.)\n    #[target_feature(enable = \"sse2\")]\n    #[inline]\n    unsafe fn rfind_raw_impl(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.0.rfind_raw(start, end)\n    }\n\n    /// Execute a count using SSE2 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`One::count_raw`], except the distance between `start` and\n    /// `end` must be at least the size of an SSE2 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `One`, which can only be constructed\n    /// when it is safe to call `sse2` routines.)\n    #[target_feature(enable = \"sse2\")]\n    #[inline]\n    unsafe fn count_raw_impl(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> usize {\n        self.0.count_raw(start, end)\n    }\n\n    /// Returns an iterator over all occurrences of the needle byte in the\n    /// given haystack.\n    ///\n    /// The iterator returned implements `DoubleEndedIterator`. This means it\n    /// can also be used to find occurrences in reverse order.\n    #[inline]\n    pub fn iter<'a, 'h>(&'a self, haystack: &'h [u8]) -> OneIter<'a, 'h> {\n        OneIter { searcher: self, it: generic::Iter::new(haystack) }\n    }\n}\n\n/// An iterator over all occurrences of a single byte in a haystack.\n///\n/// This iterator implements `DoubleEndedIterator`, which means it can also be\n/// used to find occurrences in reverse order.\n///\n/// This iterator is created by the [`One::iter`] method.\n///\n/// The lifetime parameters are as follows:\n///\n/// * `'a` refers to the lifetime of the underlying [`One`] searcher.\n/// * `'h` refers to the lifetime of the haystack being searched.\n#[derive(Clone, Debug)]\npub struct OneIter<'a, 'h> {\n    searcher: &'a One,\n    it: generic::Iter<'h>,\n}\n\nimpl<'a, 'h> Iterator for OneIter<'a, 'h> {\n    type Item = usize;\n\n    #[inline]\n    fn next(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'find_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next(|s, e| self.searcher.find_raw(s, e)) }\n    }\n\n    #[inline]\n    fn count(self) -> usize {\n        self.it.count(|s, e| {\n            // SAFETY: We rely on our generic iterator to return valid start\n            // and end pointers.\n            unsafe { self.searcher.count_raw(s, e) }\n        })\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.it.size_hint()\n    }\n}\n\nimpl<'a, 'h> DoubleEndedIterator for OneIter<'a, 'h> {\n    #[inline]\n    fn next_back(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'rfind_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next_back(|s, e| self.searcher.rfind_raw(s, e)) }\n    }\n}\n\nimpl<'a, 'h> core::iter::FusedIterator for OneIter<'a, 'h> {}\n\n/// Finds all occurrences of two bytes in a haystack.\n///\n/// That is, this reports matches of one of two possible bytes. For example,\n/// searching for `a` or `b` in `afoobar` would report matches at offsets `0`,\n/// `4` and `5`.\n#[derive(Clone, Copy, Debug)]\npub struct Two(generic::Two<__m128i>);\n\nimpl Two {\n    /// Create a new searcher that finds occurrences of the needle bytes given.\n    ///\n    /// This particular searcher is specialized to use SSE2 vector instructions\n    /// that typically make it quite fast.\n    ///\n    /// If SSE2 is unavailable in the current environment, then `None` is\n    /// returned.\n    #[inline]\n    pub fn new(needle1: u8, needle2: u8) -> Option<Two> {\n        if Two::is_available() {\n            // SAFETY: we check that sse2 is available above.\n            unsafe { Some(Two::new_unchecked(needle1, needle2)) }\n        } else {\n            None\n        }\n    }\n\n    /// Create a new finder specific to SSE2 vectors and routines without\n    /// checking that SSE2 is available.\n    ///\n    /// # Safety\n    ///\n    /// Callers must guarantee that it is safe to execute `sse2` instructions\n    /// in the current environment.\n    ///\n    /// Note that it is a common misconception that if one compiles for an\n    /// `x86_64` target, then they therefore automatically have access to SSE2\n    /// instructions. While this is almost always the case, it isn't true in\n    /// 100% of cases.\n    #[target_feature(enable = \"sse2\")]\n    #[inline]\n    pub unsafe fn new_unchecked(needle1: u8, needle2: u8) -> Two {\n        Two(generic::Two::new(needle1, needle2))\n    }\n\n    /// Returns true when this implementation is available in the current\n    /// environment.\n    ///\n    /// When this is true, it is guaranteed that [`Two::new`] will return\n    /// a `Some` value. Similarly, when it is false, it is guaranteed that\n    /// `Two::new` will return a `None` value.\n    ///\n    /// Note also that for the lifetime of a single program, if this returns\n    /// true then it will always return true.\n    #[inline]\n    pub fn is_available() -> bool {\n        #[cfg(target_feature = \"sse2\")]\n        {\n            true\n        }\n        #[cfg(not(target_feature = \"sse2\"))]\n        {\n            false\n        }\n    }\n\n    /// Return the first occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn find(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `find_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.find_raw(s, e)\n            })\n        }\n    }\n\n    /// Return the last occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn rfind(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `rfind_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.rfind_raw(s, e)\n            })\n        }\n    }\n\n    /// Like `find`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn find_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        if end.distance(start) < __m128i::BYTES {\n            // SAFETY: We require the caller to pass valid start/end pointers.\n            return generic::fwd_byte_by_byte(start, end, |b| {\n                b == self.0.needle1() || b == self.0.needle2()\n            });\n        }\n        // SAFETY: Building a `Two` means it's safe to call 'sse2' routines.\n        // Also, we've checked that our haystack is big enough to run on the\n        // vector routine. Pointer validity is caller's responsibility.\n        //\n        // Note that we could call `self.0.find_raw` directly here. But that\n        // means we'd have to annotate this routine with `target_feature`.\n        // Which is fine, because this routine is `unsafe` anyway and the\n        // `target_feature` obligation is met by virtue of building a `Two`.\n        // The real problem is that a routine with a `target_feature`\n        // annotation generally can't be inlined into caller code unless the\n        // caller code has the same target feature annotations. Which is maybe\n        // okay for SSE2, but we do the same thing for AVX2 where caller code\n        // probably usually doesn't have AVX2 enabled. That means that this\n        // routine can be inlined which will handle some of the short-haystack\n        // cases above without touching the architecture specific code.\n        self.find_raw_impl(start, end)\n    }\n\n    /// Like `rfind`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn rfind_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        if end.distance(start) < __m128i::BYTES {\n            // SAFETY: We require the caller to pass valid start/end pointers.\n            return generic::rev_byte_by_byte(start, end, |b| {\n                b == self.0.needle1() || b == self.0.needle2()\n            });\n        }\n        // SAFETY: Building a `Two` means it's safe to call 'sse2' routines.\n        // Also, we've checked that our haystack is big enough to run on the\n        // vector routine. Pointer validity is caller's responsibility.\n        //\n        // See note in forward routine above for why we don't just call\n        // `self.0.rfind_raw` directly here.\n        self.rfind_raw_impl(start, end)\n    }\n\n    /// Execute a search using SSE2 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`Two::find_raw`], except the distance between `start` and\n    /// `end` must be at least the size of an SSE2 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Two`, which can only be constructed\n    /// when it is safe to call `sse2` routines.)\n    #[target_feature(enable = \"sse2\")]\n    #[inline]\n    unsafe fn find_raw_impl(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.0.find_raw(start, end)\n    }\n\n    /// Execute a search using SSE2 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`Two::rfind_raw`], except the distance between `start` and\n    /// `end` must be at least the size of an SSE2 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Two`, which can only be constructed\n    /// when it is safe to call `sse2` routines.)\n    #[target_feature(enable = \"sse2\")]\n    #[inline]\n    unsafe fn rfind_raw_impl(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.0.rfind_raw(start, end)\n    }\n\n    /// Returns an iterator over all occurrences of the needle bytes in the\n    /// given haystack.\n    ///\n    /// The iterator returned implements `DoubleEndedIterator`. This means it\n    /// can also be used to find occurrences in reverse order.\n    #[inline]\n    pub fn iter<'a, 'h>(&'a self, haystack: &'h [u8]) -> TwoIter<'a, 'h> {\n        TwoIter { searcher: self, it: generic::Iter::new(haystack) }\n    }\n}\n\n/// An iterator over all occurrences of two possible bytes in a haystack.\n///\n/// This iterator implements `DoubleEndedIterator`, which means it can also be\n/// used to find occurrences in reverse order.\n///\n/// This iterator is created by the [`Two::iter`] method.\n///\n/// The lifetime parameters are as follows:\n///\n/// * `'a` refers to the lifetime of the underlying [`Two`] searcher.\n/// * `'h` refers to the lifetime of the haystack being searched.\n#[derive(Clone, Debug)]\npub struct TwoIter<'a, 'h> {\n    searcher: &'a Two,\n    it: generic::Iter<'h>,\n}\n\nimpl<'a, 'h> Iterator for TwoIter<'a, 'h> {\n    type Item = usize;\n\n    #[inline]\n    fn next(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'find_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next(|s, e| self.searcher.find_raw(s, e)) }\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.it.size_hint()\n    }\n}\n\nimpl<'a, 'h> DoubleEndedIterator for TwoIter<'a, 'h> {\n    #[inline]\n    fn next_back(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'rfind_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next_back(|s, e| self.searcher.rfind_raw(s, e)) }\n    }\n}\n\nimpl<'a, 'h> core::iter::FusedIterator for TwoIter<'a, 'h> {}\n\n/// Finds all occurrences of three bytes in a haystack.\n///\n/// That is, this reports matches of one of three possible bytes. For example,\n/// searching for `a`, `b` or `o` in `afoobar` would report matches at offsets\n/// `0`, `2`, `3`, `4` and `5`.\n#[derive(Clone, Copy, Debug)]\npub struct Three(generic::Three<__m128i>);\n\nimpl Three {\n    /// Create a new searcher that finds occurrences of the needle bytes given.\n    ///\n    /// This particular searcher is specialized to use SSE2 vector instructions\n    /// that typically make it quite fast.\n    ///\n    /// If SSE2 is unavailable in the current environment, then `None` is\n    /// returned.\n    #[inline]\n    pub fn new(needle1: u8, needle2: u8, needle3: u8) -> Option<Three> {\n        if Three::is_available() {\n            // SAFETY: we check that sse2 is available above.\n            unsafe { Some(Three::new_unchecked(needle1, needle2, needle3)) }\n        } else {\n            None\n        }\n    }\n\n    /// Create a new finder specific to SSE2 vectors and routines without\n    /// checking that SSE2 is available.\n    ///\n    /// # Safety\n    ///\n    /// Callers must guarantee that it is safe to execute `sse2` instructions\n    /// in the current environment.\n    ///\n    /// Note that it is a common misconception that if one compiles for an\n    /// `x86_64` target, then they therefore automatically have access to SSE2\n    /// instructions. While this is almost always the case, it isn't true in\n    /// 100% of cases.\n    #[target_feature(enable = \"sse2\")]\n    #[inline]\n    pub unsafe fn new_unchecked(\n        needle1: u8,\n        needle2: u8,\n        needle3: u8,\n    ) -> Three {\n        Three(generic::Three::new(needle1, needle2, needle3))\n    }\n\n    /// Returns true when this implementation is available in the current\n    /// environment.\n    ///\n    /// When this is true, it is guaranteed that [`Three::new`] will return\n    /// a `Some` value. Similarly, when it is false, it is guaranteed that\n    /// `Three::new` will return a `None` value.\n    ///\n    /// Note also that for the lifetime of a single program, if this returns\n    /// true then it will always return true.\n    #[inline]\n    pub fn is_available() -> bool {\n        #[cfg(target_feature = \"sse2\")]\n        {\n            true\n        }\n        #[cfg(not(target_feature = \"sse2\"))]\n        {\n            false\n        }\n    }\n\n    /// Return the first occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn find(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `find_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.find_raw(s, e)\n            })\n        }\n    }\n\n    /// Return the last occurrence of one of the needle bytes in the given\n    /// haystack. If no such occurrence exists, then `None` is returned.\n    ///\n    /// The occurrence is reported as an offset into `haystack`. Its maximum\n    /// value is `haystack.len() - 1`.\n    #[inline]\n    pub fn rfind(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: `rfind_raw` guarantees that if a pointer is returned, it\n        // falls within the bounds of the start and end pointers.\n        unsafe {\n            generic::search_slice_with_raw(haystack, |s, e| {\n                self.rfind_raw(s, e)\n            })\n        }\n    }\n\n    /// Like `find`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn find_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        if end.distance(start) < __m128i::BYTES {\n            // SAFETY: We require the caller to pass valid start/end pointers.\n            return generic::fwd_byte_by_byte(start, end, |b| {\n                b == self.0.needle1()\n                    || b == self.0.needle2()\n                    || b == self.0.needle3()\n            });\n        }\n        // SAFETY: Building a `Three` means it's safe to call 'sse2' routines.\n        // Also, we've checked that our haystack is big enough to run on the\n        // vector routine. Pointer validity is caller's responsibility.\n        //\n        // Note that we could call `self.0.find_raw` directly here. But that\n        // means we'd have to annotate this routine with `target_feature`.\n        // Which is fine, because this routine is `unsafe` anyway and the\n        // `target_feature` obligation is met by virtue of building a `Three`.\n        // The real problem is that a routine with a `target_feature`\n        // annotation generally can't be inlined into caller code unless the\n        // caller code has the same target feature annotations. Which is maybe\n        // okay for SSE2, but we do the same thing for AVX2 where caller code\n        // probably usually doesn't have AVX2 enabled. That means that this\n        // routine can be inlined which will handle some of the short-haystack\n        // cases above without touching the architecture specific code.\n        self.find_raw_impl(start, end)\n    }\n\n    /// Like `rfind`, but accepts and returns raw pointers.\n    ///\n    /// When a match is found, the pointer returned is guaranteed to be\n    /// `>= start` and `< end`.\n    ///\n    /// This routine is useful if you're already using raw pointers and would\n    /// like to avoid converting back to a slice before executing a search.\n    ///\n    /// # Safety\n    ///\n    /// * Both `start` and `end` must be valid for reads.\n    /// * Both `start` and `end` must point to an initialized value.\n    /// * Both `start` and `end` must point to the same allocated object and\n    /// must either be in bounds or at most one byte past the end of the\n    /// allocated object.\n    /// * Both `start` and `end` must be _derived from_ a pointer to the same\n    /// object.\n    /// * The distance between `start` and `end` must not overflow `isize`.\n    /// * The distance being in bounds must not rely on \"wrapping around\" the\n    /// address space.\n    ///\n    /// Note that callers may pass a pair of pointers such that `start >= end`.\n    /// In that case, `None` will always be returned.\n    #[inline]\n    pub unsafe fn rfind_raw(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        if start >= end {\n            return None;\n        }\n        if end.distance(start) < __m128i::BYTES {\n            // SAFETY: We require the caller to pass valid start/end pointers.\n            return generic::rev_byte_by_byte(start, end, |b| {\n                b == self.0.needle1()\n                    || b == self.0.needle2()\n                    || b == self.0.needle3()\n            });\n        }\n        // SAFETY: Building a `Three` means it's safe to call 'sse2' routines.\n        // Also, we've checked that our haystack is big enough to run on the\n        // vector routine. Pointer validity is caller's responsibility.\n        //\n        // See note in forward routine above for why we don't just call\n        // `self.0.rfind_raw` directly here.\n        self.rfind_raw_impl(start, end)\n    }\n\n    /// Execute a search using SSE2 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`Three::find_raw`], except the distance between `start` and\n    /// `end` must be at least the size of an SSE2 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Three`, which can only be constructed\n    /// when it is safe to call `sse2` routines.)\n    #[target_feature(enable = \"sse2\")]\n    #[inline]\n    unsafe fn find_raw_impl(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.0.find_raw(start, end)\n    }\n\n    /// Execute a search using SSE2 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as [`Three::rfind_raw`], except the distance between `start` and\n    /// `end` must be at least the size of an SSE2 vector (in bytes).\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Three`, which can only be constructed\n    /// when it is safe to call `sse2` routines.)\n    #[target_feature(enable = \"sse2\")]\n    #[inline]\n    unsafe fn rfind_raw_impl(\n        &self,\n        start: *const u8,\n        end: *const u8,\n    ) -> Option<*const u8> {\n        self.0.rfind_raw(start, end)\n    }\n\n    /// Returns an iterator over all occurrences of the needle byte in the\n    /// given haystack.\n    ///\n    /// The iterator returned implements `DoubleEndedIterator`. This means it\n    /// can also be used to find occurrences in reverse order.\n    #[inline]\n    pub fn iter<'a, 'h>(&'a self, haystack: &'h [u8]) -> ThreeIter<'a, 'h> {\n        ThreeIter { searcher: self, it: generic::Iter::new(haystack) }\n    }\n}\n\n/// An iterator over all occurrences of three possible bytes in a haystack.\n///\n/// This iterator implements `DoubleEndedIterator`, which means it can also be\n/// used to find occurrences in reverse order.\n///\n/// This iterator is created by the [`Three::iter`] method.\n///\n/// The lifetime parameters are as follows:\n///\n/// * `'a` refers to the lifetime of the underlying [`Three`] searcher.\n/// * `'h` refers to the lifetime of the haystack being searched.\n#[derive(Clone, Debug)]\npub struct ThreeIter<'a, 'h> {\n    searcher: &'a Three,\n    it: generic::Iter<'h>,\n}\n\nimpl<'a, 'h> Iterator for ThreeIter<'a, 'h> {\n    type Item = usize;\n\n    #[inline]\n    fn next(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'find_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next(|s, e| self.searcher.find_raw(s, e)) }\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.it.size_hint()\n    }\n}\n\nimpl<'a, 'h> DoubleEndedIterator for ThreeIter<'a, 'h> {\n    #[inline]\n    fn next_back(&mut self) -> Option<usize> {\n        // SAFETY: We rely on the generic iterator to provide valid start\n        // and end pointers, but we guarantee that any pointer returned by\n        // 'rfind_raw' falls within the bounds of the start and end pointer.\n        unsafe { self.it.next_back(|s, e| self.searcher.rfind_raw(s, e)) }\n    }\n}\n\nimpl<'a, 'h> core::iter::FusedIterator for ThreeIter<'a, 'h> {}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    define_memchr_quickcheck!(super);\n\n    #[test]\n    fn forward_one() {\n        crate::tests::memchr::Runner::new(1).forward_iter(\n            |haystack, needles| {\n                Some(One::new(needles[0])?.iter(haystack).collect())\n            },\n        )\n    }\n\n    #[test]\n    fn reverse_one() {\n        crate::tests::memchr::Runner::new(1).reverse_iter(\n            |haystack, needles| {\n                Some(One::new(needles[0])?.iter(haystack).rev().collect())\n            },\n        )\n    }\n\n    #[test]\n    fn count_one() {\n        crate::tests::memchr::Runner::new(1).count_iter(|haystack, needles| {\n            Some(One::new(needles[0])?.iter(haystack).count())\n        })\n    }\n\n    #[test]\n    fn forward_two() {\n        crate::tests::memchr::Runner::new(2).forward_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                Some(Two::new(n1, n2)?.iter(haystack).collect())\n            },\n        )\n    }\n\n    #[test]\n    fn reverse_two() {\n        crate::tests::memchr::Runner::new(2).reverse_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                Some(Two::new(n1, n2)?.iter(haystack).rev().collect())\n            },\n        )\n    }\n\n    #[test]\n    fn forward_three() {\n        crate::tests::memchr::Runner::new(3).forward_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                let n3 = needles.get(2).copied()?;\n                Some(Three::new(n1, n2, n3)?.iter(haystack).collect())\n            },\n        )\n    }\n\n    #[test]\n    fn reverse_three() {\n        crate::tests::memchr::Runner::new(3).reverse_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                let n3 = needles.get(2).copied()?;\n                Some(Three::new(n1, n2, n3)?.iter(haystack).rev().collect())\n            },\n        )\n    }\n}\n"
  },
  {
    "path": "src/arch/x86_64/sse2/mod.rs",
    "content": "/*!\nAlgorithms for the `x86_64` target using 128-bit vectors via SSE2.\n*/\n\npub mod memchr;\npub mod packedpair;\n"
  },
  {
    "path": "src/arch/x86_64/sse2/packedpair.rs",
    "content": "/*!\nA 128-bit vector implementation of the \"packed pair\" SIMD algorithm.\n\nThe \"packed pair\" algorithm is based on the [generic SIMD] algorithm. The main\ndifference is that it (by default) uses a background distribution of byte\nfrequencies to heuristically select the pair of bytes to search for.\n\n[generic SIMD]: http://0x80.pl/articles/simd-strfind.html#first-and-last\n*/\n\nuse core::arch::x86_64::__m128i;\n\nuse crate::arch::{all::packedpair::Pair, generic::packedpair};\n\n/// A \"packed pair\" finder that uses 128-bit vector operations.\n///\n/// This finder picks two bytes that it believes have high predictive power\n/// for indicating an overall match of a needle. Depending on whether\n/// `Finder::find` or `Finder::find_prefilter` is used, it reports offsets\n/// where the needle matches or could match. In the prefilter case, candidates\n/// are reported whenever the [`Pair`] of bytes given matches.\n#[derive(Clone, Copy, Debug)]\npub struct Finder(packedpair::Finder<__m128i>);\n\nimpl Finder {\n    /// Create a new pair searcher. The searcher returned can either report\n    /// exact matches of `needle` or act as a prefilter and report candidate\n    /// positions of `needle`.\n    ///\n    /// If SSE2 is unavailable in the current environment or if a [`Pair`]\n    /// could not be constructed from the needle given, then `None` is\n    /// returned.\n    #[inline]\n    pub fn new(needle: &[u8]) -> Option<Finder> {\n        Finder::with_pair(needle, Pair::new(needle)?)\n    }\n\n    /// Create a new \"packed pair\" finder using the pair of bytes given.\n    ///\n    /// This constructor permits callers to control precisely which pair of\n    /// bytes is used as a predicate.\n    ///\n    /// If SSE2 is unavailable in the current environment, then `None` is\n    /// returned.\n    #[inline]\n    pub fn with_pair(needle: &[u8], pair: Pair) -> Option<Finder> {\n        if Finder::is_available() {\n            // SAFETY: we check that sse2 is available above. We are also\n            // guaranteed to have needle.len() > 1 because we have a valid\n            // Pair.\n            unsafe { Some(Finder::with_pair_impl(needle, pair)) }\n        } else {\n            None\n        }\n    }\n\n    /// Create a new `Finder` specific to SSE2 vectors and routines.\n    ///\n    /// # Safety\n    ///\n    /// Same as the safety for `packedpair::Finder::new`, and callers must also\n    /// ensure that SSE2 is available.\n    #[target_feature(enable = \"sse2\")]\n    #[inline]\n    unsafe fn with_pair_impl(needle: &[u8], pair: Pair) -> Finder {\n        let finder = packedpair::Finder::<__m128i>::new(needle, pair);\n        Finder(finder)\n    }\n\n    /// Returns true when this implementation is available in the current\n    /// environment.\n    ///\n    /// When this is true, it is guaranteed that [`Finder::with_pair`] will\n    /// return a `Some` value. Similarly, when it is false, it is guaranteed\n    /// that `Finder::with_pair` will return a `None` value. Notice that this\n    /// does not guarantee that [`Finder::new`] will return a `Finder`. Namely,\n    /// even when `Finder::is_available` is true, it is not guaranteed that a\n    /// valid [`Pair`] can be found from the needle given.\n    ///\n    /// Note also that for the lifetime of a single program, if this returns\n    /// true then it will always return true.\n    #[inline]\n    pub fn is_available() -> bool {\n        #[cfg(not(target_feature = \"sse2\"))]\n        {\n            false\n        }\n        #[cfg(target_feature = \"sse2\")]\n        {\n            true\n        }\n    }\n\n    /// Execute a search using SSE2 vectors and routines.\n    ///\n    /// # Panics\n    ///\n    /// When `haystack.len()` is less than [`Finder::min_haystack_len`].\n    #[inline]\n    pub fn find(&self, haystack: &[u8], needle: &[u8]) -> Option<usize> {\n        // SAFETY: Building a `Finder` means it's safe to call 'sse2' routines.\n        unsafe { self.find_impl(haystack, needle) }\n    }\n\n    /// Run this finder on the given haystack as a prefilter.\n    ///\n    /// If a candidate match is found, then an offset where the needle *could*\n    /// begin in the haystack is returned.\n    ///\n    /// # Panics\n    ///\n    /// When `haystack.len()` is less than [`Finder::min_haystack_len`].\n    #[inline]\n    pub fn find_prefilter(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: Building a `Finder` means it's safe to call 'sse2' routines.\n        unsafe { self.find_prefilter_impl(haystack) }\n    }\n\n    /// Execute a search using SSE2 vectors and routines.\n    ///\n    /// # Panics\n    ///\n    /// When `haystack.len()` is less than [`Finder::min_haystack_len`].\n    ///\n    /// # Safety\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Finder`, which can only be constructed\n    /// when it is safe to call `sse2` routines.)\n    #[target_feature(enable = \"sse2\")]\n    #[inline]\n    unsafe fn find_impl(\n        &self,\n        haystack: &[u8],\n        needle: &[u8],\n    ) -> Option<usize> {\n        self.0.find(haystack, needle)\n    }\n\n    /// Execute a prefilter search using SSE2 vectors and routines.\n    ///\n    /// # Panics\n    ///\n    /// When `haystack.len()` is less than [`Finder::min_haystack_len`].\n    ///\n    /// # Safety\n    ///\n    /// (The target feature safety obligation is automatically fulfilled by\n    /// virtue of being a method on `Finder`, which can only be constructed\n    /// when it is safe to call `sse2` routines.)\n    #[target_feature(enable = \"sse2\")]\n    #[inline]\n    unsafe fn find_prefilter_impl(&self, haystack: &[u8]) -> Option<usize> {\n        self.0.find_prefilter(haystack)\n    }\n\n    /// Returns the pair of offsets (into the needle) used to check as a\n    /// predicate before confirming whether a needle exists at a particular\n    /// position.\n    #[inline]\n    pub fn pair(&self) -> &Pair {\n        self.0.pair()\n    }\n\n    /// Returns the minimum haystack length that this `Finder` can search.\n    ///\n    /// Using a haystack with length smaller than this in a search will result\n    /// in a panic. The reason for this restriction is that this finder is\n    /// meant to be a low-level component that is part of a larger substring\n    /// strategy. In that sense, it avoids trying to handle all cases and\n    /// instead only handles the cases that it can handle very well.\n    #[inline]\n    pub fn min_haystack_len(&self) -> usize {\n        self.0.min_haystack_len()\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    fn find(haystack: &[u8], needle: &[u8]) -> Option<Option<usize>> {\n        let f = Finder::new(needle)?;\n        if haystack.len() < f.min_haystack_len() {\n            return None;\n        }\n        Some(f.find(haystack, needle))\n    }\n\n    define_substring_forward_quickcheck!(find);\n\n    #[test]\n    fn forward_substring() {\n        crate::tests::substring::Runner::new().fwd(find).run()\n    }\n\n    #[test]\n    fn forward_packedpair() {\n        fn find(\n            haystack: &[u8],\n            needle: &[u8],\n            index1: u8,\n            index2: u8,\n        ) -> Option<Option<usize>> {\n            let pair = Pair::with_indices(needle, index1, index2)?;\n            let f = Finder::with_pair(needle, pair)?;\n            if haystack.len() < f.min_haystack_len() {\n                return None;\n            }\n            Some(f.find(haystack, needle))\n        }\n        crate::tests::packedpair::Runner::new().fwd(find).run()\n    }\n\n    #[test]\n    fn forward_packedpair_prefilter() {\n        fn find(\n            haystack: &[u8],\n            needle: &[u8],\n            index1: u8,\n            index2: u8,\n        ) -> Option<Option<usize>> {\n            let pair = Pair::with_indices(needle, index1, index2)?;\n            let f = Finder::with_pair(needle, pair)?;\n            if haystack.len() < f.min_haystack_len() {\n                return None;\n            }\n            Some(f.find_prefilter(haystack))\n        }\n        crate::tests::packedpair::Runner::new().fwd(find).run()\n    }\n}\n"
  },
  {
    "path": "src/cow.rs",
    "content": "use core::ops;\n\n/// A specialized copy-on-write byte string.\n///\n/// The purpose of this type is to permit usage of a \"borrowed or owned\n/// byte string\" in a way that keeps std/no-std compatibility. That is, in\n/// no-std/alloc mode, this type devolves into a simple &[u8] with no owned\n/// variant available. We can't just use a plain Cow because Cow is not in\n/// core.\n#[derive(Clone, Debug)]\npub struct CowBytes<'a>(Imp<'a>);\n\n// N.B. We don't use alloc::borrow::Cow here since we can get away with a\n// Box<[u8]> for our use case, which is 1/3 smaller than the Vec<u8> that\n// a Cow<[u8]> would use.\n#[cfg(feature = \"alloc\")]\n#[derive(Clone, Debug)]\nenum Imp<'a> {\n    Borrowed(&'a [u8]),\n    Owned(alloc::boxed::Box<[u8]>),\n}\n\n#[cfg(not(feature = \"alloc\"))]\n#[derive(Clone, Debug)]\nstruct Imp<'a>(&'a [u8]);\n\nimpl<'a> ops::Deref for CowBytes<'a> {\n    type Target = [u8];\n\n    #[inline(always)]\n    fn deref(&self) -> &[u8] {\n        self.as_slice()\n    }\n}\n\nimpl<'a> CowBytes<'a> {\n    /// Create a new borrowed CowBytes.\n    #[inline(always)]\n    pub(crate) fn new<B: ?Sized + AsRef<[u8]>>(bytes: &'a B) -> CowBytes<'a> {\n        CowBytes(Imp::new(bytes.as_ref()))\n    }\n\n    /// Create a new owned CowBytes.\n    #[cfg(feature = \"alloc\")]\n    #[inline(always)]\n    pub(crate) fn new_owned(\n        bytes: alloc::boxed::Box<[u8]>,\n    ) -> CowBytes<'static> {\n        CowBytes(Imp::Owned(bytes))\n    }\n\n    /// Return a borrowed byte string, regardless of whether this is an owned\n    /// or borrowed byte string internally.\n    #[inline(always)]\n    pub(crate) fn as_slice(&self) -> &[u8] {\n        self.0.as_slice()\n    }\n\n    /// Return an owned version of this copy-on-write byte string.\n    ///\n    /// If this is already an owned byte string internally, then this is a\n    /// no-op. Otherwise, the internal byte string is copied.\n    #[cfg(feature = \"alloc\")]\n    #[inline(always)]\n    pub(crate) fn into_owned(self) -> CowBytes<'static> {\n        match self.0 {\n            Imp::Borrowed(b) => {\n                CowBytes::new_owned(alloc::boxed::Box::from(b))\n            }\n            Imp::Owned(b) => CowBytes::new_owned(b),\n        }\n    }\n}\n\nimpl<'a> Imp<'a> {\n    #[inline(always)]\n    pub fn new(bytes: &'a [u8]) -> Imp<'a> {\n        #[cfg(feature = \"alloc\")]\n        {\n            Imp::Borrowed(bytes)\n        }\n        #[cfg(not(feature = \"alloc\"))]\n        {\n            Imp(bytes)\n        }\n    }\n\n    #[cfg(feature = \"alloc\")]\n    #[inline(always)]\n    pub fn as_slice(&self) -> &[u8] {\n        #[cfg(feature = \"alloc\")]\n        {\n            match self {\n                Imp::Owned(ref x) => x,\n                Imp::Borrowed(x) => x,\n            }\n        }\n        #[cfg(not(feature = \"alloc\"))]\n        {\n            self.0\n        }\n    }\n\n    #[cfg(not(feature = \"alloc\"))]\n    #[inline(always)]\n    pub fn as_slice(&self) -> &[u8] {\n        self.0\n    }\n}\n"
  },
  {
    "path": "src/ext.rs",
    "content": "/// A trait for adding some helper routines to pointers.\npub(crate) trait Pointer {\n    /// Returns the distance, in units of `T`, between `self` and `origin`.\n    ///\n    /// # Safety\n    ///\n    /// Same as `ptr::offset_from` in addition to `self >= origin`.\n    unsafe fn distance(self, origin: Self) -> usize;\n\n    /// Casts this pointer to `usize`.\n    ///\n    /// Callers should not convert the `usize` back to a pointer if at all\n    /// possible. (And if you believe it's necessary, open an issue to discuss\n    /// why. Otherwise, it has the potential to violate pointer provenance.)\n    /// The purpose of this function is just to be able to do arithmetic, i.e.,\n    /// computing offsets or alignments.\n    fn as_usize(self) -> usize;\n}\n\nimpl<T> Pointer for *const T {\n    unsafe fn distance(self, origin: *const T) -> usize {\n        // TODO: Replace with `ptr::sub_ptr` once stabilized.\n        usize::try_from(self.offset_from(origin)).unwrap_unchecked()\n    }\n\n    fn as_usize(self) -> usize {\n        self as usize\n    }\n}\n\nimpl<T> Pointer for *mut T {\n    unsafe fn distance(self, origin: *mut T) -> usize {\n        (self as *const T).distance(origin as *const T)\n    }\n\n    fn as_usize(self) -> usize {\n        (self as *const T).as_usize()\n    }\n}\n\n/// A trait for adding some helper routines to raw bytes.\n#[cfg(test)]\npub(crate) trait Byte {\n    /// Converts this byte to a `char` if it's ASCII. Otherwise panics.\n    fn to_char(self) -> char;\n}\n\n#[cfg(test)]\nimpl Byte for u8 {\n    fn to_char(self) -> char {\n        assert!(self.is_ascii());\n        char::from(self)\n    }\n}\n"
  },
  {
    "path": "src/lib.rs",
    "content": "/*!\nThis library provides heavily optimized routines for string search primitives.\n\n# Overview\n\nThis section gives a brief high level overview of what this crate offers.\n\n* The top-level module provides routines for searching for 1, 2 or 3 bytes\n  in the forward or reverse direction. When searching for more than one byte,\n  positions are considered a match if the byte at that position matches any\n  of the bytes.\n* The [`memmem`] sub-module provides forward and reverse substring search\n  routines.\n\nIn all such cases, routines operate on `&[u8]` without regard to encoding. This\nis exactly what you want when searching either UTF-8 or arbitrary bytes.\n\n# Example: using `memchr`\n\nThis example shows how to use `memchr` to find the first occurrence of `z` in\na haystack:\n\n```\nuse memchr::memchr;\n\nlet haystack = b\"foo bar baz quuz\";\nassert_eq!(Some(10), memchr(b'z', haystack));\n```\n\n# Example: matching one of three possible bytes\n\nThis examples shows how to use `memrchr3` to find occurrences of `a`, `b` or\n`c`, starting at the end of the haystack.\n\n```\nuse memchr::memchr3_iter;\n\nlet haystack = b\"xyzaxyzbxyzc\";\n\nlet mut it = memchr3_iter(b'a', b'b', b'c', haystack).rev();\nassert_eq!(Some(11), it.next());\nassert_eq!(Some(7), it.next());\nassert_eq!(Some(3), it.next());\nassert_eq!(None, it.next());\n```\n\n# Example: iterating over substring matches\n\nThis example shows how to use the [`memmem`] sub-module to find occurrences of\na substring in a haystack.\n\n```\nuse memchr::memmem;\n\nlet haystack = b\"foo bar foo baz foo\";\n\nlet mut it = memmem::find_iter(haystack, \"foo\");\nassert_eq!(Some(0), it.next());\nassert_eq!(Some(8), it.next());\nassert_eq!(Some(16), it.next());\nassert_eq!(None, it.next());\n```\n\n# Example: repeating a search for the same needle\n\nIt may be possible for the overhead of constructing a substring searcher to be\nmeasurable in some workloads. In cases where the same needle is used to search\nmany haystacks, it is possible to do construction once and thus to avoid it for\nsubsequent searches. This can be done with a [`memmem::Finder`]:\n\n```\nuse memchr::memmem;\n\nlet finder = memmem::Finder::new(\"foo\");\n\nassert_eq!(Some(4), finder.find(b\"baz foo quux\"));\nassert_eq!(None, finder.find(b\"quux baz bar\"));\n```\n\n# Why use this crate?\n\nAt first glance, the APIs provided by this crate might seem weird. Why provide\na dedicated routine like `memchr` for something that could be implemented\nclearly and trivially in one line:\n\n```\nfn memchr(needle: u8, haystack: &[u8]) -> Option<usize> {\n    haystack.iter().position(|&b| b == needle)\n}\n```\n\nOr similarly, why does this crate provide substring search routines when Rust's\ncore library already provides them?\n\n```\nfn search(haystack: &str, needle: &str) -> Option<usize> {\n    haystack.find(needle)\n}\n```\n\nThe primary reason for both of them to exist is performance. When it comes to\nperformance, at a high level at least, there are two primary ways to look at\nit:\n\n* **Throughput**: For this, think about it as, \"given some very large haystack\n  and a byte that never occurs in that haystack, how long does it take to\n  search through it and determine that it, in fact, does not occur?\"\n* **Latency**: For this, think about it as, \"given a tiny haystack---just a\n  few bytes---how long does it take to determine if a byte is in it?\"\n\nThe `memchr` routine in this crate has _slightly_ worse latency than the\nsolution presented above, however, its throughput can easily be over an\norder of magnitude faster. This is a good general purpose trade off to make.\nYou rarely lose, but often gain big.\n\n**NOTE:** The name `memchr` comes from the corresponding routine in `libc`. A\nkey advantage of using this library is that its performance is not tied to its\nquality of implementation in the `libc` you happen to be using, which can vary\ngreatly from platform to platform.\n\nBut what about substring search? This one is a bit more complicated. The\nprimary reason for its existence is still indeed performance, but it's also\nuseful because Rust's core library doesn't actually expose any substring\nsearch routine on arbitrary bytes. The only substring search routine that\nexists works exclusively on valid UTF-8.\n\nSo if you have valid UTF-8, is there a reason to use this over the standard\nlibrary substring search routine? Yes. This routine is faster on almost every\nmetric, including latency. The natural question then, is why isn't this\nimplementation in the standard library, even if only for searching on UTF-8?\nThe reason is that the implementation details for using SIMD in the standard\nlibrary haven't quite been worked out yet.\n\n**NOTE:** Currently, only `x86_64`, `wasm32` and `aarch64` targets have vector\naccelerated implementations of `memchr` (and friends) and `memmem`.\n\n# Crate features\n\n* **std** - When enabled (the default), this will permit features specific to\nthe standard library. Currently, the only thing used from the standard library\nis runtime SIMD CPU feature detection. This means that this feature must be\nenabled to get AVX2 accelerated routines on `x86_64` targets without enabling\nthe `avx2` feature at compile time, for example. When `std` is not enabled,\nthis crate will still attempt to use SSE2 accelerated routines on `x86_64`. It\nwill also use AVX2 accelerated routines when the `avx2` feature is enabled at\ncompile time. In general, enable this feature if you can.\n* **alloc** - When enabled (the default), APIs in this crate requiring some\nkind of allocation will become available. For example, the\n[`memmem::Finder::into_owned`](crate::memmem::Finder::into_owned) API and the\n[`arch::all::shiftor`](crate::arch::all::shiftor) substring search\nimplementation. Otherwise, this crate is designed from the ground up to be\nusable in core-only contexts, so the `alloc` feature doesn't add much\ncurrently. Notably, disabling `std` but enabling `alloc` will **not** result\nin the use of AVX2 on `x86_64` targets unless the `avx2` feature is enabled\nat compile time. (With `std` enabled, AVX2 can be used even without the `avx2`\nfeature enabled at compile time by way of runtime CPU feature detection.)\n* **logging** - When enabled (disabled by default), the `log` crate is used\nto emit log messages about what kinds of `memchr` and `memmem` algorithms\nare used. Namely, both `memchr` and `memmem` have a number of different\nimplementation choices depending on the target and CPU, and the log messages\ncan help show what specific implementations are being used. Generally, this is\nuseful for debugging performance issues.\n* **libc** - **DEPRECATED**. Previously, this enabled the use of the target's\n`memchr` function from whatever `libc` was linked into the program. This\nfeature is now a no-op because this crate's implementation of `memchr` should\nnow be sufficiently fast on a number of platforms that `libc` should no longer\nbe needed. (This feature is somewhat of a holdover from this crate's origins.\nOriginally, this crate was literally just a safe wrapper function around the\n`memchr` function from `libc`.)\n*/\n\n#![deny(missing_docs)]\n#![no_std]\n// It's just not worth trying to squash all dead code warnings. Pretty\n// unfortunate IMO. Not really sure how to fix this other than to either\n// live with it or sprinkle a whole mess of `cfg` annotations everywhere.\n#![cfg_attr(\n    not(any(\n        all(target_arch = \"x86_64\", target_feature = \"sse2\"),\n        all(target_arch = \"wasm32\", target_feature = \"simd128\"),\n        target_arch = \"aarch64\",\n    )),\n    allow(dead_code)\n)]\n// Same deal for miri.\n#![cfg_attr(miri, allow(dead_code, unused_macros))]\n\n// Supporting 8-bit (or others) would be fine. If you need it, please submit a\n// bug report at https://github.com/BurntSushi/memchr\n#[cfg(not(any(\n    target_pointer_width = \"16\",\n    target_pointer_width = \"32\",\n    target_pointer_width = \"64\"\n)))]\ncompile_error!(\"memchr currently not supported on non-{16,32,64}\");\n\n#[cfg(any(test, feature = \"std\"))]\nextern crate std;\n\n#[cfg(any(test, feature = \"alloc\"))]\nextern crate alloc;\n\npub use crate::memchr::{\n    memchr, memchr2, memchr2_iter, memchr3, memchr3_iter, memchr_iter,\n    memrchr, memrchr2, memrchr2_iter, memrchr3, memrchr3_iter, memrchr_iter,\n    Memchr, Memchr2, Memchr3,\n};\n\n#[macro_use]\nmod macros;\n\n#[cfg(test)]\n#[macro_use]\nmod tests;\n\npub mod arch;\nmod cow;\nmod ext;\nmod memchr;\npub mod memmem;\nmod vector;\n"
  },
  {
    "path": "src/macros.rs",
    "content": "// Some feature combinations result in some of these macros never being used.\n// Which is fine. Just squash the warnings.\n#![allow(unused_macros)]\n\nmacro_rules! log {\n    ($($tt:tt)*) => {\n        #[cfg(feature = \"logging\")]\n        {\n            $($tt)*\n        }\n    }\n}\n\nmacro_rules! debug {\n    ($($tt:tt)*) => { log!(log::debug!($($tt)*)) }\n}\n\nmacro_rules! trace {\n    ($($tt:tt)*) => { log!(log::trace!($($tt)*)) }\n}\n"
  },
  {
    "path": "src/memchr.rs",
    "content": "use core::iter::Rev;\n\nuse crate::arch::generic::memchr as generic;\n\n/// Search for the first occurrence of a byte in a slice.\n///\n/// This returns the index corresponding to the first occurrence of `needle` in\n/// `haystack`, or `None` if one is not found. If an index is returned, it is\n/// guaranteed to be less than `haystack.len()`.\n///\n/// While this is semantically the same as something like\n/// `haystack.iter().position(|&b| b == needle)`, this routine will attempt to\n/// use highly optimized vector operations that can be an order of magnitude\n/// faster (or more).\n///\n/// # Example\n///\n/// This shows how to find the first position of a byte in a byte string.\n///\n/// ```\n/// use memchr::memchr;\n///\n/// let haystack = b\"the quick brown fox\";\n/// assert_eq!(memchr(b'k', haystack), Some(8));\n/// ```\n#[inline]\npub fn memchr(needle: u8, haystack: &[u8]) -> Option<usize> {\n    // SAFETY: memchr_raw, when a match is found, always returns a valid\n    // pointer between start and end.\n    unsafe {\n        generic::search_slice_with_raw(haystack, |start, end| {\n            memchr_raw(needle, start, end)\n        })\n    }\n}\n\n/// Search for the last occurrence of a byte in a slice.\n///\n/// This returns the index corresponding to the last occurrence of `needle` in\n/// `haystack`, or `None` if one is not found. If an index is returned, it is\n/// guaranteed to be less than `haystack.len()`.\n///\n/// While this is semantically the same as something like\n/// `haystack.iter().rposition(|&b| b == needle)`, this routine will attempt to\n/// use highly optimized vector operations that can be an order of magnitude\n/// faster (or more).\n///\n/// # Example\n///\n/// This shows how to find the last position of a byte in a byte string.\n///\n/// ```\n/// use memchr::memrchr;\n///\n/// let haystack = b\"the quick brown fox\";\n/// assert_eq!(memrchr(b'o', haystack), Some(17));\n/// ```\n#[inline]\npub fn memrchr(needle: u8, haystack: &[u8]) -> Option<usize> {\n    // SAFETY: memrchr_raw, when a match is found, always returns a valid\n    // pointer between start and end.\n    unsafe {\n        generic::search_slice_with_raw(haystack, |start, end| {\n            memrchr_raw(needle, start, end)\n        })\n    }\n}\n\n/// Search for the first occurrence of two possible bytes in a haystack.\n///\n/// This returns the index corresponding to the first occurrence of one of the\n/// needle bytes in `haystack`, or `None` if one is not found. If an index is\n/// returned, it is guaranteed to be less than `haystack.len()`.\n///\n/// While this is semantically the same as something like\n/// `haystack.iter().position(|&b| b == needle1 || b == needle2)`, this routine\n/// will attempt to use highly optimized vector operations that can be an order\n/// of magnitude faster (or more).\n///\n/// # Example\n///\n/// This shows how to find the first position of one of two possible bytes in a\n/// haystack.\n///\n/// ```\n/// use memchr::memchr2;\n///\n/// let haystack = b\"the quick brown fox\";\n/// assert_eq!(memchr2(b'k', b'q', haystack), Some(4));\n/// ```\n#[inline]\npub fn memchr2(needle1: u8, needle2: u8, haystack: &[u8]) -> Option<usize> {\n    // SAFETY: memchr2_raw, when a match is found, always returns a valid\n    // pointer between start and end.\n    unsafe {\n        generic::search_slice_with_raw(haystack, |start, end| {\n            memchr2_raw(needle1, needle2, start, end)\n        })\n    }\n}\n\n/// Search for the last occurrence of two possible bytes in a haystack.\n///\n/// This returns the index corresponding to the last occurrence of one of the\n/// needle bytes in `haystack`, or `None` if one is not found. If an index is\n/// returned, it is guaranteed to be less than `haystack.len()`.\n///\n/// While this is semantically the same as something like\n/// `haystack.iter().rposition(|&b| b == needle1 || b == needle2)`, this\n/// routine will attempt to use highly optimized vector operations that can be\n/// an order of magnitude faster (or more).\n///\n/// # Example\n///\n/// This shows how to find the last position of one of two possible bytes in a\n/// haystack.\n///\n/// ```\n/// use memchr::memrchr2;\n///\n/// let haystack = b\"the quick brown fox\";\n/// assert_eq!(memrchr2(b'k', b'o', haystack), Some(17));\n/// ```\n#[inline]\npub fn memrchr2(needle1: u8, needle2: u8, haystack: &[u8]) -> Option<usize> {\n    // SAFETY: memrchr2_raw, when a match is found, always returns a valid\n    // pointer between start and end.\n    unsafe {\n        generic::search_slice_with_raw(haystack, |start, end| {\n            memrchr2_raw(needle1, needle2, start, end)\n        })\n    }\n}\n\n/// Search for the first occurrence of three possible bytes in a haystack.\n///\n/// This returns the index corresponding to the first occurrence of one of the\n/// needle bytes in `haystack`, or `None` if one is not found. If an index is\n/// returned, it is guaranteed to be less than `haystack.len()`.\n///\n/// While this is semantically the same as something like\n/// `haystack.iter().position(|&b| b == needle1 || b == needle2 || b == needle3)`,\n/// this routine will attempt to use highly optimized vector operations that\n/// can be an order of magnitude faster (or more).\n///\n/// # Example\n///\n/// This shows how to find the first position of one of three possible bytes in\n/// a haystack.\n///\n/// ```\n/// use memchr::memchr3;\n///\n/// let haystack = b\"the quick brown fox\";\n/// assert_eq!(memchr3(b'k', b'q', b'u', haystack), Some(4));\n/// ```\n#[inline]\npub fn memchr3(\n    needle1: u8,\n    needle2: u8,\n    needle3: u8,\n    haystack: &[u8],\n) -> Option<usize> {\n    // SAFETY: memchr3_raw, when a match is found, always returns a valid\n    // pointer between start and end.\n    unsafe {\n        generic::search_slice_with_raw(haystack, |start, end| {\n            memchr3_raw(needle1, needle2, needle3, start, end)\n        })\n    }\n}\n\n/// Search for the last occurrence of three possible bytes in a haystack.\n///\n/// This returns the index corresponding to the last occurrence of one of the\n/// needle bytes in `haystack`, or `None` if one is not found. If an index is\n/// returned, it is guaranteed to be less than `haystack.len()`.\n///\n/// While this is semantically the same as something like\n/// `haystack.iter().rposition(|&b| b == needle1 || b == needle2 || b == needle3)`,\n/// this routine will attempt to use highly optimized vector operations that\n/// can be an order of magnitude faster (or more).\n///\n/// # Example\n///\n/// This shows how to find the last position of one of three possible bytes in\n/// a haystack.\n///\n/// ```\n/// use memchr::memrchr3;\n///\n/// let haystack = b\"the quick brown fox\";\n/// assert_eq!(memrchr3(b'k', b'o', b'n', haystack), Some(17));\n/// ```\n#[inline]\npub fn memrchr3(\n    needle1: u8,\n    needle2: u8,\n    needle3: u8,\n    haystack: &[u8],\n) -> Option<usize> {\n    // SAFETY: memrchr3_raw, when a match is found, always returns a valid\n    // pointer between start and end.\n    unsafe {\n        generic::search_slice_with_raw(haystack, |start, end| {\n            memrchr3_raw(needle1, needle2, needle3, start, end)\n        })\n    }\n}\n\n/// Returns an iterator over all occurrences of the needle in a haystack.\n///\n/// The iterator returned implements `DoubleEndedIterator`. This means it\n/// can also be used to find occurrences in reverse order.\n#[inline]\npub fn memchr_iter<'h>(needle: u8, haystack: &'h [u8]) -> Memchr<'h> {\n    Memchr::new(needle, haystack)\n}\n\n/// Returns an iterator over all occurrences of the needle in a haystack, in\n/// reverse.\n#[inline]\npub fn memrchr_iter(needle: u8, haystack: &[u8]) -> Rev<Memchr<'_>> {\n    Memchr::new(needle, haystack).rev()\n}\n\n/// Returns an iterator over all occurrences of the needles in a haystack.\n///\n/// The iterator returned implements `DoubleEndedIterator`. This means it\n/// can also be used to find occurrences in reverse order.\n#[inline]\npub fn memchr2_iter<'h>(\n    needle1: u8,\n    needle2: u8,\n    haystack: &'h [u8],\n) -> Memchr2<'h> {\n    Memchr2::new(needle1, needle2, haystack)\n}\n\n/// Returns an iterator over all occurrences of the needles in a haystack, in\n/// reverse.\n#[inline]\npub fn memrchr2_iter(\n    needle1: u8,\n    needle2: u8,\n    haystack: &[u8],\n) -> Rev<Memchr2<'_>> {\n    Memchr2::new(needle1, needle2, haystack).rev()\n}\n\n/// Returns an iterator over all occurrences of the needles in a haystack.\n///\n/// The iterator returned implements `DoubleEndedIterator`. This means it\n/// can also be used to find occurrences in reverse order.\n#[inline]\npub fn memchr3_iter<'h>(\n    needle1: u8,\n    needle2: u8,\n    needle3: u8,\n    haystack: &'h [u8],\n) -> Memchr3<'h> {\n    Memchr3::new(needle1, needle2, needle3, haystack)\n}\n\n/// Returns an iterator over all occurrences of the needles in a haystack, in\n/// reverse.\n#[inline]\npub fn memrchr3_iter(\n    needle1: u8,\n    needle2: u8,\n    needle3: u8,\n    haystack: &[u8],\n) -> Rev<Memchr3<'_>> {\n    Memchr3::new(needle1, needle2, needle3, haystack).rev()\n}\n\n/// An iterator over all occurrences of a single byte in a haystack.\n///\n/// This iterator implements `DoubleEndedIterator`, which means it can also be\n/// used to find occurrences in reverse order.\n///\n/// This iterator is created by the [`memchr_iter`] or `[memrchr_iter`]\n/// functions. It can also be created with the [`Memchr::new`] method.\n///\n/// The lifetime parameter `'h` refers to the lifetime of the haystack being\n/// searched.\n#[derive(Clone, Debug)]\npub struct Memchr<'h> {\n    needle1: u8,\n    it: crate::arch::generic::memchr::Iter<'h>,\n}\n\nimpl<'h> Memchr<'h> {\n    /// Returns an iterator over all occurrences of the needle byte in the\n    /// given haystack.\n    ///\n    /// The iterator returned implements `DoubleEndedIterator`. This means it\n    /// can also be used to find occurrences in reverse order.\n    #[inline]\n    pub fn new(needle1: u8, haystack: &'h [u8]) -> Memchr<'h> {\n        Memchr {\n            needle1,\n            it: crate::arch::generic::memchr::Iter::new(haystack),\n        }\n    }\n}\n\nimpl<'h> Iterator for Memchr<'h> {\n    type Item = usize;\n\n    #[inline]\n    fn next(&mut self) -> Option<usize> {\n        // SAFETY: All of our implementations of memchr ensure that any\n        // pointers returns will fall within the start and end bounds, and this\n        // upholds the safety contract of `self.it.next`.\n        unsafe {\n            // NOTE: I attempted to define an enum of previously created\n            // searchers and then switch on those here instead of just\n            // calling `memchr_raw` (or `One::new(..).find_raw(..)`). But\n            // that turned out to have a fair bit of extra overhead when\n            // searching very small haystacks.\n            self.it.next(|s, e| memchr_raw(self.needle1, s, e))\n        }\n    }\n\n    #[inline]\n    fn count(self) -> usize {\n        self.it.count(|s, e| {\n            // SAFETY: We rely on our generic iterator to return valid start\n            // and end pointers.\n            unsafe { count_raw(self.needle1, s, e) }\n        })\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.it.size_hint()\n    }\n}\n\nimpl<'h> DoubleEndedIterator for Memchr<'h> {\n    #[inline]\n    fn next_back(&mut self) -> Option<usize> {\n        // SAFETY: All of our implementations of memchr ensure that any\n        // pointers returns will fall within the start and end bounds, and this\n        // upholds the safety contract of `self.it.next_back`.\n        unsafe { self.it.next_back(|s, e| memrchr_raw(self.needle1, s, e)) }\n    }\n}\n\nimpl<'h> core::iter::FusedIterator for Memchr<'h> {}\n\n/// An iterator over all occurrences of two possible bytes in a haystack.\n///\n/// This iterator implements `DoubleEndedIterator`, which means it can also be\n/// used to find occurrences in reverse order.\n///\n/// This iterator is created by the [`memchr2_iter`] or `[memrchr2_iter`]\n/// functions. It can also be created with the [`Memchr2::new`] method.\n///\n/// The lifetime parameter `'h` refers to the lifetime of the haystack being\n/// searched.\n#[derive(Clone, Debug)]\npub struct Memchr2<'h> {\n    needle1: u8,\n    needle2: u8,\n    it: crate::arch::generic::memchr::Iter<'h>,\n}\n\nimpl<'h> Memchr2<'h> {\n    /// Returns an iterator over all occurrences of the needle bytes in the\n    /// given haystack.\n    ///\n    /// The iterator returned implements `DoubleEndedIterator`. This means it\n    /// can also be used to find occurrences in reverse order.\n    #[inline]\n    pub fn new(needle1: u8, needle2: u8, haystack: &'h [u8]) -> Memchr2<'h> {\n        Memchr2 {\n            needle1,\n            needle2,\n            it: crate::arch::generic::memchr::Iter::new(haystack),\n        }\n    }\n}\n\nimpl<'h> Iterator for Memchr2<'h> {\n    type Item = usize;\n\n    #[inline]\n    fn next(&mut self) -> Option<usize> {\n        // SAFETY: All of our implementations of memchr ensure that any\n        // pointers returns will fall within the start and end bounds, and this\n        // upholds the safety contract of `self.it.next`.\n        unsafe {\n            self.it.next(|s, e| memchr2_raw(self.needle1, self.needle2, s, e))\n        }\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.it.size_hint()\n    }\n}\n\nimpl<'h> DoubleEndedIterator for Memchr2<'h> {\n    #[inline]\n    fn next_back(&mut self) -> Option<usize> {\n        // SAFETY: All of our implementations of memchr ensure that any\n        // pointers returns will fall within the start and end bounds, and this\n        // upholds the safety contract of `self.it.next_back`.\n        unsafe {\n            self.it.next_back(|s, e| {\n                memrchr2_raw(self.needle1, self.needle2, s, e)\n            })\n        }\n    }\n}\n\nimpl<'h> core::iter::FusedIterator for Memchr2<'h> {}\n\n/// An iterator over all occurrences of three possible bytes in a haystack.\n///\n/// This iterator implements `DoubleEndedIterator`, which means it can also be\n/// used to find occurrences in reverse order.\n///\n/// This iterator is created by the [`memchr2_iter`] or `[memrchr2_iter`]\n/// functions. It can also be created with the [`Memchr3::new`] method.\n///\n/// The lifetime parameter `'h` refers to the lifetime of the haystack being\n/// searched.\n#[derive(Clone, Debug)]\npub struct Memchr3<'h> {\n    needle1: u8,\n    needle2: u8,\n    needle3: u8,\n    it: crate::arch::generic::memchr::Iter<'h>,\n}\n\nimpl<'h> Memchr3<'h> {\n    /// Returns an iterator over all occurrences of the needle bytes in the\n    /// given haystack.\n    ///\n    /// The iterator returned implements `DoubleEndedIterator`. This means it\n    /// can also be used to find occurrences in reverse order.\n    #[inline]\n    pub fn new(\n        needle1: u8,\n        needle2: u8,\n        needle3: u8,\n        haystack: &'h [u8],\n    ) -> Memchr3<'h> {\n        Memchr3 {\n            needle1,\n            needle2,\n            needle3,\n            it: crate::arch::generic::memchr::Iter::new(haystack),\n        }\n    }\n}\n\nimpl<'h> Iterator for Memchr3<'h> {\n    type Item = usize;\n\n    #[inline]\n    fn next(&mut self) -> Option<usize> {\n        // SAFETY: All of our implementations of memchr ensure that any\n        // pointers returns will fall within the start and end bounds, and this\n        // upholds the safety contract of `self.it.next`.\n        unsafe {\n            self.it.next(|s, e| {\n                memchr3_raw(self.needle1, self.needle2, self.needle3, s, e)\n            })\n        }\n    }\n\n    #[inline]\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        self.it.size_hint()\n    }\n}\n\nimpl<'h> DoubleEndedIterator for Memchr3<'h> {\n    #[inline]\n    fn next_back(&mut self) -> Option<usize> {\n        // SAFETY: All of our implementations of memchr ensure that any\n        // pointers returns will fall within the start and end bounds, and this\n        // upholds the safety contract of `self.it.next_back`.\n        unsafe {\n            self.it.next_back(|s, e| {\n                memrchr3_raw(self.needle1, self.needle2, self.needle3, s, e)\n            })\n        }\n    }\n}\n\nimpl<'h> core::iter::FusedIterator for Memchr3<'h> {}\n\n/// memchr, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `One::find_raw`.\n#[inline]\nunsafe fn memchr_raw(\n    needle: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    #[cfg(target_arch = \"x86_64\")]\n    {\n        // x86_64 does CPU feature detection at runtime in order to use AVX2\n        // instructions even when the `avx2` feature isn't enabled at compile\n        // time. This function also handles using a fallback if neither AVX2\n        // nor SSE2 (unusual) are available.\n        crate::arch::x86_64::memchr::memchr_raw(needle, start, end)\n    }\n    #[cfg(all(target_arch = \"wasm32\", target_feature = \"simd128\"))]\n    {\n        crate::arch::wasm32::memchr::memchr_raw(needle, start, end)\n    }\n    #[cfg(target_arch = \"aarch64\")]\n    {\n        crate::arch::aarch64::memchr::memchr_raw(needle, start, end)\n    }\n    #[cfg(not(any(\n        target_arch = \"x86_64\",\n        all(target_arch = \"wasm32\", target_feature = \"simd128\"),\n        target_arch = \"aarch64\"\n    )))]\n    {\n        crate::arch::all::memchr::One::new(needle).find_raw(start, end)\n    }\n}\n\n/// memrchr, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `One::rfind_raw`.\n#[inline]\nunsafe fn memrchr_raw(\n    needle: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    #[cfg(target_arch = \"x86_64\")]\n    {\n        crate::arch::x86_64::memchr::memrchr_raw(needle, start, end)\n    }\n    #[cfg(all(target_arch = \"wasm32\", target_feature = \"simd128\"))]\n    {\n        crate::arch::wasm32::memchr::memrchr_raw(needle, start, end)\n    }\n    #[cfg(target_arch = \"aarch64\")]\n    {\n        crate::arch::aarch64::memchr::memrchr_raw(needle, start, end)\n    }\n    #[cfg(not(any(\n        target_arch = \"x86_64\",\n        all(target_arch = \"wasm32\", target_feature = \"simd128\"),\n        target_arch = \"aarch64\"\n    )))]\n    {\n        crate::arch::all::memchr::One::new(needle).rfind_raw(start, end)\n    }\n}\n\n/// memchr2, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `Two::find_raw`.\n#[inline]\nunsafe fn memchr2_raw(\n    needle1: u8,\n    needle2: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    #[cfg(target_arch = \"x86_64\")]\n    {\n        crate::arch::x86_64::memchr::memchr2_raw(needle1, needle2, start, end)\n    }\n    #[cfg(all(target_arch = \"wasm32\", target_feature = \"simd128\"))]\n    {\n        crate::arch::wasm32::memchr::memchr2_raw(needle1, needle2, start, end)\n    }\n    #[cfg(target_arch = \"aarch64\")]\n    {\n        crate::arch::aarch64::memchr::memchr2_raw(needle1, needle2, start, end)\n    }\n    #[cfg(not(any(\n        target_arch = \"x86_64\",\n        all(target_arch = \"wasm32\", target_feature = \"simd128\"),\n        target_arch = \"aarch64\"\n    )))]\n    {\n        crate::arch::all::memchr::Two::new(needle1, needle2)\n            .find_raw(start, end)\n    }\n}\n\n/// memrchr2, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `Two::rfind_raw`.\n#[inline]\nunsafe fn memrchr2_raw(\n    needle1: u8,\n    needle2: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    #[cfg(target_arch = \"x86_64\")]\n    {\n        crate::arch::x86_64::memchr::memrchr2_raw(needle1, needle2, start, end)\n    }\n    #[cfg(all(target_arch = \"wasm32\", target_feature = \"simd128\"))]\n    {\n        crate::arch::wasm32::memchr::memrchr2_raw(needle1, needle2, start, end)\n    }\n    #[cfg(target_arch = \"aarch64\")]\n    {\n        crate::arch::aarch64::memchr::memrchr2_raw(\n            needle1, needle2, start, end,\n        )\n    }\n    #[cfg(not(any(\n        target_arch = \"x86_64\",\n        all(target_arch = \"wasm32\", target_feature = \"simd128\"),\n        target_arch = \"aarch64\"\n    )))]\n    {\n        crate::arch::all::memchr::Two::new(needle1, needle2)\n            .rfind_raw(start, end)\n    }\n}\n\n/// memchr3, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `Three::find_raw`.\n#[inline]\nunsafe fn memchr3_raw(\n    needle1: u8,\n    needle2: u8,\n    needle3: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    #[cfg(target_arch = \"x86_64\")]\n    {\n        crate::arch::x86_64::memchr::memchr3_raw(\n            needle1, needle2, needle3, start, end,\n        )\n    }\n    #[cfg(all(target_arch = \"wasm32\", target_feature = \"simd128\"))]\n    {\n        crate::arch::wasm32::memchr::memchr3_raw(\n            needle1, needle2, needle3, start, end,\n        )\n    }\n    #[cfg(target_arch = \"aarch64\")]\n    {\n        crate::arch::aarch64::memchr::memchr3_raw(\n            needle1, needle2, needle3, start, end,\n        )\n    }\n    #[cfg(not(any(\n        target_arch = \"x86_64\",\n        all(target_arch = \"wasm32\", target_feature = \"simd128\"),\n        target_arch = \"aarch64\"\n    )))]\n    {\n        crate::arch::all::memchr::Three::new(needle1, needle2, needle3)\n            .find_raw(start, end)\n    }\n}\n\n/// memrchr3, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `Three::rfind_raw`.\n#[inline]\nunsafe fn memrchr3_raw(\n    needle1: u8,\n    needle2: u8,\n    needle3: u8,\n    start: *const u8,\n    end: *const u8,\n) -> Option<*const u8> {\n    #[cfg(target_arch = \"x86_64\")]\n    {\n        crate::arch::x86_64::memchr::memrchr3_raw(\n            needle1, needle2, needle3, start, end,\n        )\n    }\n    #[cfg(all(target_arch = \"wasm32\", target_feature = \"simd128\"))]\n    {\n        crate::arch::wasm32::memchr::memrchr3_raw(\n            needle1, needle2, needle3, start, end,\n        )\n    }\n    #[cfg(target_arch = \"aarch64\")]\n    {\n        crate::arch::aarch64::memchr::memrchr3_raw(\n            needle1, needle2, needle3, start, end,\n        )\n    }\n    #[cfg(not(any(\n        target_arch = \"x86_64\",\n        all(target_arch = \"wasm32\", target_feature = \"simd128\"),\n        target_arch = \"aarch64\"\n    )))]\n    {\n        crate::arch::all::memchr::Three::new(needle1, needle2, needle3)\n            .rfind_raw(start, end)\n    }\n}\n\n/// Count all matching bytes, but using raw pointers to represent the haystack.\n///\n/// # Safety\n///\n/// Pointers must be valid. See `One::count_raw`.\n#[inline]\nunsafe fn count_raw(needle: u8, start: *const u8, end: *const u8) -> usize {\n    #[cfg(target_arch = \"x86_64\")]\n    {\n        crate::arch::x86_64::memchr::count_raw(needle, start, end)\n    }\n    #[cfg(all(target_arch = \"wasm32\", target_feature = \"simd128\"))]\n    {\n        crate::arch::wasm32::memchr::count_raw(needle, start, end)\n    }\n    #[cfg(target_arch = \"aarch64\")]\n    {\n        crate::arch::aarch64::memchr::count_raw(needle, start, end)\n    }\n    #[cfg(not(any(\n        target_arch = \"x86_64\",\n        all(target_arch = \"wasm32\", target_feature = \"simd128\"),\n        target_arch = \"aarch64\"\n    )))]\n    {\n        crate::arch::all::memchr::One::new(needle).count_raw(start, end)\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    #[test]\n    fn forward1_iter() {\n        crate::tests::memchr::Runner::new(1).forward_iter(\n            |haystack, needles| {\n                Some(memchr_iter(needles[0], haystack).collect())\n            },\n        )\n    }\n\n    #[test]\n    fn forward1_oneshot() {\n        crate::tests::memchr::Runner::new(1).forward_oneshot(\n            |haystack, needles| Some(memchr(needles[0], haystack)),\n        )\n    }\n\n    #[test]\n    fn reverse1_iter() {\n        crate::tests::memchr::Runner::new(1).reverse_iter(\n            |haystack, needles| {\n                Some(memrchr_iter(needles[0], haystack).collect())\n            },\n        )\n    }\n\n    #[test]\n    fn reverse1_oneshot() {\n        crate::tests::memchr::Runner::new(1).reverse_oneshot(\n            |haystack, needles| Some(memrchr(needles[0], haystack)),\n        )\n    }\n\n    #[test]\n    fn count1_iter() {\n        crate::tests::memchr::Runner::new(1).count_iter(|haystack, needles| {\n            Some(memchr_iter(needles[0], haystack).count())\n        })\n    }\n\n    #[test]\n    fn forward2_iter() {\n        crate::tests::memchr::Runner::new(2).forward_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                Some(memchr2_iter(n1, n2, haystack).collect())\n            },\n        )\n    }\n\n    #[test]\n    fn forward2_oneshot() {\n        crate::tests::memchr::Runner::new(2).forward_oneshot(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                Some(memchr2(n1, n2, haystack))\n            },\n        )\n    }\n\n    #[test]\n    fn reverse2_iter() {\n        crate::tests::memchr::Runner::new(2).reverse_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                Some(memrchr2_iter(n1, n2, haystack).collect())\n            },\n        )\n    }\n\n    #[test]\n    fn reverse2_oneshot() {\n        crate::tests::memchr::Runner::new(2).reverse_oneshot(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                Some(memrchr2(n1, n2, haystack))\n            },\n        )\n    }\n\n    #[test]\n    fn forward3_iter() {\n        crate::tests::memchr::Runner::new(3).forward_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                let n3 = needles.get(2).copied()?;\n                Some(memchr3_iter(n1, n2, n3, haystack).collect())\n            },\n        )\n    }\n\n    #[test]\n    fn forward3_oneshot() {\n        crate::tests::memchr::Runner::new(3).forward_oneshot(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                let n3 = needles.get(2).copied()?;\n                Some(memchr3(n1, n2, n3, haystack))\n            },\n        )\n    }\n\n    #[test]\n    fn reverse3_iter() {\n        crate::tests::memchr::Runner::new(3).reverse_iter(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                let n3 = needles.get(2).copied()?;\n                Some(memrchr3_iter(n1, n2, n3, haystack).collect())\n            },\n        )\n    }\n\n    #[test]\n    fn reverse3_oneshot() {\n        crate::tests::memchr::Runner::new(3).reverse_oneshot(\n            |haystack, needles| {\n                let n1 = needles.get(0).copied()?;\n                let n2 = needles.get(1).copied()?;\n                let n3 = needles.get(2).copied()?;\n                Some(memrchr3(n1, n2, n3, haystack))\n            },\n        )\n    }\n\n    // Prior to memchr 2.6, the memchr iterators both implemented Send and\n    // Sync. But in memchr 2.6, the iterator changed to use raw pointers\n    // internally and I didn't add explicit Send/Sync impls. This ended up\n    // regressing the API. This test ensures we don't do that again.\n    //\n    // See: https://github.com/BurntSushi/memchr/issues/133\n    #[test]\n    fn sync_regression() {\n        use core::panic::{RefUnwindSafe, UnwindSafe};\n\n        fn assert_send_sync<T: Send + Sync + UnwindSafe + RefUnwindSafe>() {}\n        assert_send_sync::<Memchr>();\n        assert_send_sync::<Memchr2>();\n        assert_send_sync::<Memchr3>()\n    }\n}\n"
  },
  {
    "path": "src/memmem/mod.rs",
    "content": "/*!\nThis module provides forward and reverse substring search routines.\n\nUnlike the standard library's substring search routines, these work on\narbitrary bytes. For all non-empty needles, these routines will report exactly\nthe same values as the corresponding routines in the standard library. For\nthe empty needle, the standard library reports matches only at valid UTF-8\nboundaries, where as these routines will report matches at every position.\n\nOther than being able to work on arbitrary bytes, the primary reason to prefer\nthese routines over the standard library routines is that these will generally\nbe faster. In some cases, significantly so.\n\n# Example: iterating over substring matches\n\nThis example shows how to use [`find_iter`] to find occurrences of a substring\nin a haystack.\n\n```\nuse memchr::memmem;\n\nlet haystack = b\"foo bar foo baz foo\";\n\nlet mut it = memmem::find_iter(haystack, \"foo\");\nassert_eq!(Some(0), it.next());\nassert_eq!(Some(8), it.next());\nassert_eq!(Some(16), it.next());\nassert_eq!(None, it.next());\n```\n\n# Example: iterating over substring matches in reverse\n\nThis example shows how to use [`rfind_iter`] to find occurrences of a substring\nin a haystack starting from the end of the haystack.\n\n**NOTE:** This module does not implement double ended iterators, so reverse\nsearches aren't done by calling `rev` on a forward iterator.\n\n```\nuse memchr::memmem;\n\nlet haystack = b\"foo bar foo baz foo\";\n\nlet mut it = memmem::rfind_iter(haystack, \"foo\");\nassert_eq!(Some(16), it.next());\nassert_eq!(Some(8), it.next());\nassert_eq!(Some(0), it.next());\nassert_eq!(None, it.next());\n```\n\n# Example: repeating a search for the same needle\n\nIt may be possible for the overhead of constructing a substring searcher to be\nmeasurable in some workloads. In cases where the same needle is used to search\nmany haystacks, it is possible to do construction once and thus to avoid it for\nsubsequent searches. This can be done with a [`Finder`] (or a [`FinderRev`] for\nreverse searches).\n\n```\nuse memchr::memmem;\n\nlet finder = memmem::Finder::new(\"foo\");\n\nassert_eq!(Some(4), finder.find(b\"baz foo quux\"));\nassert_eq!(None, finder.find(b\"quux baz bar\"));\n```\n*/\n\npub use crate::memmem::searcher::PrefilterConfig as Prefilter;\n\n// This is exported here for use in the crate::arch::all::twoway\n// implementation. This is essentially an abstraction breaker. Namely, the\n// public API of twoway doesn't support providing a prefilter, but its crate\n// internal API does. The main reason for this is that I didn't want to do the\n// API design required to support it without a concrete use case.\npub(crate) use crate::memmem::searcher::Pre;\n\nuse crate::{\n    arch::all::{\n        packedpair::{DefaultFrequencyRank, HeuristicFrequencyRank},\n        rabinkarp,\n    },\n    cow::CowBytes,\n    memmem::searcher::{PrefilterState, Searcher, SearcherRev},\n};\n\nmod searcher;\n\n/// Returns an iterator over all non-overlapping occurrences of a substring in\n/// a haystack.\n///\n/// # Complexity\n///\n/// This routine is guaranteed to have worst case linear time complexity\n/// with respect to both the needle and the haystack. That is, this runs\n/// in `O(needle.len() + haystack.len())` time.\n///\n/// This routine is also guaranteed to have worst case constant space\n/// complexity.\n///\n/// # Examples\n///\n/// Basic usage:\n///\n/// ```\n/// use memchr::memmem;\n///\n/// let haystack = b\"foo bar foo baz foo\";\n/// let mut it = memmem::find_iter(haystack, b\"foo\");\n/// assert_eq!(Some(0), it.next());\n/// assert_eq!(Some(8), it.next());\n/// assert_eq!(Some(16), it.next());\n/// assert_eq!(None, it.next());\n/// ```\n#[inline]\npub fn find_iter<'h, 'n, N: 'n + ?Sized + AsRef<[u8]>>(\n    haystack: &'h [u8],\n    needle: &'n N,\n) -> FindIter<'h, 'n> {\n    FindIter::new(haystack, Finder::new(needle))\n}\n\n/// Returns a reverse iterator over all non-overlapping occurrences of a\n/// substring in a haystack.\n///\n/// # Complexity\n///\n/// This routine is guaranteed to have worst case linear time complexity\n/// with respect to both the needle and the haystack. That is, this runs\n/// in `O(needle.len() + haystack.len())` time.\n///\n/// This routine is also guaranteed to have worst case constant space\n/// complexity.\n///\n/// # Examples\n///\n/// Basic usage:\n///\n/// ```\n/// use memchr::memmem;\n///\n/// let haystack = b\"foo bar foo baz foo\";\n/// let mut it = memmem::rfind_iter(haystack, b\"foo\");\n/// assert_eq!(Some(16), it.next());\n/// assert_eq!(Some(8), it.next());\n/// assert_eq!(Some(0), it.next());\n/// assert_eq!(None, it.next());\n/// ```\n#[inline]\npub fn rfind_iter<'h, 'n, N: 'n + ?Sized + AsRef<[u8]>>(\n    haystack: &'h [u8],\n    needle: &'n N,\n) -> FindRevIter<'h, 'n> {\n    FindRevIter::new(haystack, FinderRev::new(needle))\n}\n\n/// Returns the index of the first occurrence of the given needle.\n///\n/// Note that if you're are searching for the same needle in many different\n/// small haystacks, it may be faster to initialize a [`Finder`] once,\n/// and reuse it for each search.\n///\n/// # Complexity\n///\n/// This routine is guaranteed to have worst case linear time complexity\n/// with respect to both the needle and the haystack. That is, this runs\n/// in `O(needle.len() + haystack.len())` time.\n///\n/// This routine is also guaranteed to have worst case constant space\n/// complexity.\n///\n/// # Examples\n///\n/// Basic usage:\n///\n/// ```\n/// use memchr::memmem;\n///\n/// let haystack = b\"foo bar baz\";\n/// assert_eq!(Some(0), memmem::find(haystack, b\"foo\"));\n/// assert_eq!(Some(4), memmem::find(haystack, b\"bar\"));\n/// assert_eq!(None, memmem::find(haystack, b\"quux\"));\n/// ```\n#[inline]\npub fn find(haystack: &[u8], needle: &[u8]) -> Option<usize> {\n    if haystack.len() < 64 {\n        rabinkarp::Finder::new(needle).find(haystack, needle)\n    } else {\n        Finder::new(needle).find(haystack)\n    }\n}\n\n/// Returns the index of the last occurrence of the given needle.\n///\n/// Note that if you're are searching for the same needle in many different\n/// small haystacks, it may be faster to initialize a [`FinderRev`] once,\n/// and reuse it for each search.\n///\n/// # Complexity\n///\n/// This routine is guaranteed to have worst case linear time complexity\n/// with respect to both the needle and the haystack. That is, this runs\n/// in `O(needle.len() + haystack.len())` time.\n///\n/// This routine is also guaranteed to have worst case constant space\n/// complexity.\n///\n/// # Examples\n///\n/// Basic usage:\n///\n/// ```\n/// use memchr::memmem;\n///\n/// let haystack = b\"foo bar baz\";\n/// assert_eq!(Some(0), memmem::rfind(haystack, b\"foo\"));\n/// assert_eq!(Some(4), memmem::rfind(haystack, b\"bar\"));\n/// assert_eq!(Some(8), memmem::rfind(haystack, b\"ba\"));\n/// assert_eq!(None, memmem::rfind(haystack, b\"quux\"));\n/// ```\n#[inline]\npub fn rfind(haystack: &[u8], needle: &[u8]) -> Option<usize> {\n    if haystack.len() < 64 {\n        rabinkarp::FinderRev::new(needle).rfind(haystack, needle)\n    } else {\n        FinderRev::new(needle).rfind(haystack)\n    }\n}\n\n/// An iterator over non-overlapping substring matches.\n///\n/// Matches are reported by the byte offset at which they begin.\n///\n/// `'h` is the lifetime of the haystack while `'n` is the lifetime of the\n/// needle.\n#[derive(Debug, Clone)]\npub struct FindIter<'h, 'n> {\n    haystack: &'h [u8],\n    prestate: PrefilterState,\n    finder: Finder<'n>,\n    pos: usize,\n}\n\nimpl<'h, 'n> FindIter<'h, 'n> {\n    #[inline(always)]\n    pub(crate) fn new(\n        haystack: &'h [u8],\n        finder: Finder<'n>,\n    ) -> FindIter<'h, 'n> {\n        let prestate = PrefilterState::new();\n        FindIter { haystack, prestate, finder, pos: 0 }\n    }\n\n    /// Convert this iterator into its owned variant, such that it no longer\n    /// borrows the finder and needle.\n    ///\n    /// If this is already an owned iterator, then this is a no-op. Otherwise,\n    /// this copies the needle.\n    ///\n    /// This is only available when the `alloc` feature is enabled.\n    #[cfg(feature = \"alloc\")]\n    #[inline]\n    pub fn into_owned(self) -> FindIter<'h, 'static> {\n        FindIter {\n            haystack: self.haystack,\n            prestate: self.prestate,\n            finder: self.finder.into_owned(),\n            pos: self.pos,\n        }\n    }\n}\n\nimpl<'h, 'n> Iterator for FindIter<'h, 'n> {\n    type Item = usize;\n\n    fn next(&mut self) -> Option<usize> {\n        let needle = self.finder.needle();\n        let haystack = self.haystack.get(self.pos..)?;\n        let idx =\n            self.finder.searcher.find(&mut self.prestate, haystack, needle)?;\n\n        let pos = self.pos + idx;\n        self.pos = pos + needle.len().max(1);\n\n        Some(pos)\n    }\n\n    fn size_hint(&self) -> (usize, Option<usize>) {\n        // The largest possible number of non-overlapping matches is the\n        // quotient of the haystack and the needle (or the length of the\n        // haystack, if the needle is empty)\n        match self.haystack.len().checked_sub(self.pos) {\n            None => (0, Some(0)),\n            Some(haystack_len) => match self.finder.needle().len() {\n                // Empty needles always succeed and match at every point\n                // (including the very end)\n                0 => (\n                    haystack_len.saturating_add(1),\n                    haystack_len.checked_add(1),\n                ),\n                needle_len => (0, Some(haystack_len / needle_len)),\n            },\n        }\n    }\n}\n\n/// An iterator over non-overlapping substring matches in reverse.\n///\n/// Matches are reported by the byte offset at which they begin.\n///\n/// `'h` is the lifetime of the haystack while `'n` is the lifetime of the\n/// needle.\n#[derive(Clone, Debug)]\npub struct FindRevIter<'h, 'n> {\n    haystack: &'h [u8],\n    finder: FinderRev<'n>,\n    /// When searching with an empty needle, this gets set to `None` after\n    /// we've yielded the last element at `0`.\n    pos: Option<usize>,\n}\n\nimpl<'h, 'n> FindRevIter<'h, 'n> {\n    #[inline(always)]\n    pub(crate) fn new(\n        haystack: &'h [u8],\n        finder: FinderRev<'n>,\n    ) -> FindRevIter<'h, 'n> {\n        let pos = Some(haystack.len());\n        FindRevIter { haystack, finder, pos }\n    }\n\n    /// Convert this iterator into its owned variant, such that it no longer\n    /// borrows the finder and needle.\n    ///\n    /// If this is already an owned iterator, then this is a no-op. Otherwise,\n    /// this copies the needle.\n    ///\n    /// This is only available when the `std` feature is enabled.\n    #[cfg(feature = \"alloc\")]\n    #[inline]\n    pub fn into_owned(self) -> FindRevIter<'h, 'static> {\n        FindRevIter {\n            haystack: self.haystack,\n            finder: self.finder.into_owned(),\n            pos: self.pos,\n        }\n    }\n}\n\nimpl<'h, 'n> Iterator for FindRevIter<'h, 'n> {\n    type Item = usize;\n\n    fn next(&mut self) -> Option<usize> {\n        let pos = self.pos?;\n        let result = self.finder.rfind(&self.haystack[..pos]);\n        match result {\n            None => None,\n            Some(i) => {\n                if pos == i {\n                    self.pos = pos.checked_sub(1);\n                } else {\n                    self.pos = Some(i);\n                }\n                Some(i)\n            }\n        }\n    }\n}\n\n/// A single substring searcher fixed to a particular needle.\n///\n/// The purpose of this type is to permit callers to construct a substring\n/// searcher that can be used to search haystacks without the overhead of\n/// constructing the searcher in the first place. This is a somewhat niche\n/// concern when it's necessary to re-use the same needle to search multiple\n/// different haystacks with as little overhead as possible. In general, using\n/// [`find`] is good enough, but `Finder` is useful when you can meaningfully\n/// observe searcher construction time in a profile.\n///\n/// When the `std` feature is enabled, then this type has an `into_owned`\n/// version which permits building a `Finder` that is not connected to\n/// the lifetime of its needle.\n#[derive(Clone, Debug)]\npub struct Finder<'n> {\n    needle: CowBytes<'n>,\n    searcher: Searcher,\n}\n\nimpl<'n> Finder<'n> {\n    /// Create a new finder for the given needle.\n    #[inline]\n    pub fn new<B: ?Sized + AsRef<[u8]>>(needle: &'n B) -> Finder<'n> {\n        FinderBuilder::new().build_forward(needle)\n    }\n\n    /// Returns the index of the first occurrence of this needle in the given\n    /// haystack.\n    ///\n    /// # Complexity\n    ///\n    /// This routine is guaranteed to have worst case linear time complexity\n    /// with respect to both the needle and the haystack. That is, this runs\n    /// in `O(needle.len() + haystack.len())` time.\n    ///\n    /// This routine is also guaranteed to have worst case constant space\n    /// complexity.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use memchr::memmem::Finder;\n    ///\n    /// let haystack = b\"foo bar baz\";\n    /// assert_eq!(Some(0), Finder::new(\"foo\").find(haystack));\n    /// assert_eq!(Some(4), Finder::new(\"bar\").find(haystack));\n    /// assert_eq!(None, Finder::new(\"quux\").find(haystack));\n    /// ```\n    #[inline]\n    pub fn find(&self, haystack: &[u8]) -> Option<usize> {\n        let mut prestate = PrefilterState::new();\n        let needle = self.needle.as_slice();\n        self.searcher.find(&mut prestate, haystack, needle)\n    }\n\n    /// Returns an iterator over all occurrences of a substring in a haystack.\n    ///\n    /// # Complexity\n    ///\n    /// This routine is guaranteed to have worst case linear time complexity\n    /// with respect to both the needle and the haystack. That is, this runs\n    /// in `O(needle.len() + haystack.len())` time.\n    ///\n    /// This routine is also guaranteed to have worst case constant space\n    /// complexity.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use memchr::memmem::Finder;\n    ///\n    /// let haystack = b\"foo bar foo baz foo\";\n    /// let finder = Finder::new(b\"foo\");\n    /// let mut it = finder.find_iter(haystack);\n    /// assert_eq!(Some(0), it.next());\n    /// assert_eq!(Some(8), it.next());\n    /// assert_eq!(Some(16), it.next());\n    /// assert_eq!(None, it.next());\n    /// ```\n    #[inline]\n    pub fn find_iter<'a, 'h>(\n        &'a self,\n        haystack: &'h [u8],\n    ) -> FindIter<'h, 'a> {\n        FindIter::new(haystack, self.as_ref())\n    }\n\n    /// Convert this finder into its owned variant, such that it no longer\n    /// borrows the needle.\n    ///\n    /// If this is already an owned finder, then this is a no-op. Otherwise,\n    /// this copies the needle.\n    ///\n    /// This is only available when the `alloc` feature is enabled.\n    #[cfg(feature = \"alloc\")]\n    #[inline]\n    pub fn into_owned(self) -> Finder<'static> {\n        Finder {\n            needle: self.needle.into_owned(),\n            searcher: self.searcher.clone(),\n        }\n    }\n\n    /// Convert this finder into its borrowed variant.\n    ///\n    /// This is primarily useful if your finder is owned and you'd like to\n    /// store its borrowed variant in some intermediate data structure.\n    ///\n    /// Note that the lifetime parameter of the returned finder is tied to the\n    /// lifetime of `self`, and may be shorter than the `'n` lifetime of the\n    /// needle itself. Namely, a finder's needle can be either borrowed or\n    /// owned, so the lifetime of the needle returned must necessarily be the\n    /// shorter of the two.\n    #[inline]\n    pub fn as_ref(&self) -> Finder<'_> {\n        Finder {\n            needle: CowBytes::new(self.needle()),\n            searcher: self.searcher.clone(),\n        }\n    }\n\n    /// Returns the needle that this finder searches for.\n    ///\n    /// Note that the lifetime of the needle returned is tied to the lifetime\n    /// of the finder, and may be shorter than the `'n` lifetime. Namely, a\n    /// finder's needle can be either borrowed or owned, so the lifetime of the\n    /// needle returned must necessarily be the shorter of the two.\n    #[inline]\n    pub fn needle(&self) -> &[u8] {\n        self.needle.as_slice()\n    }\n}\n\n/// A single substring reverse searcher fixed to a particular needle.\n///\n/// The purpose of this type is to permit callers to construct a substring\n/// searcher that can be used to search haystacks without the overhead of\n/// constructing the searcher in the first place. This is a somewhat niche\n/// concern when it's necessary to re-use the same needle to search multiple\n/// different haystacks with as little overhead as possible. In general,\n/// using [`rfind`] is good enough, but `FinderRev` is useful when you can\n/// meaningfully observe searcher construction time in a profile.\n///\n/// When the `std` feature is enabled, then this type has an `into_owned`\n/// version which permits building a `FinderRev` that is not connected to\n/// the lifetime of its needle.\n#[derive(Clone, Debug)]\npub struct FinderRev<'n> {\n    needle: CowBytes<'n>,\n    searcher: SearcherRev,\n}\n\nimpl<'n> FinderRev<'n> {\n    /// Create a new reverse finder for the given needle.\n    #[inline]\n    pub fn new<B: ?Sized + AsRef<[u8]>>(needle: &'n B) -> FinderRev<'n> {\n        FinderBuilder::new().build_reverse(needle)\n    }\n\n    /// Returns the index of the last occurrence of this needle in the given\n    /// haystack.\n    ///\n    /// The haystack may be any type that can be cheaply converted into a\n    /// `&[u8]`. This includes, but is not limited to, `&str` and `&[u8]`.\n    ///\n    /// # Complexity\n    ///\n    /// This routine is guaranteed to have worst case linear time complexity\n    /// with respect to both the needle and the haystack. That is, this runs\n    /// in `O(needle.len() + haystack.len())` time.\n    ///\n    /// This routine is also guaranteed to have worst case constant space\n    /// complexity.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use memchr::memmem::FinderRev;\n    ///\n    /// let haystack = b\"foo bar baz\";\n    /// assert_eq!(Some(0), FinderRev::new(\"foo\").rfind(haystack));\n    /// assert_eq!(Some(4), FinderRev::new(\"bar\").rfind(haystack));\n    /// assert_eq!(None, FinderRev::new(\"quux\").rfind(haystack));\n    /// ```\n    pub fn rfind<B: AsRef<[u8]>>(&self, haystack: B) -> Option<usize> {\n        self.searcher.rfind(haystack.as_ref(), self.needle.as_slice())\n    }\n\n    /// Returns a reverse iterator over all occurrences of a substring in a\n    /// haystack.\n    ///\n    /// # Complexity\n    ///\n    /// This routine is guaranteed to have worst case linear time complexity\n    /// with respect to both the needle and the haystack. That is, this runs\n    /// in `O(needle.len() + haystack.len())` time.\n    ///\n    /// This routine is also guaranteed to have worst case constant space\n    /// complexity.\n    ///\n    /// # Examples\n    ///\n    /// Basic usage:\n    ///\n    /// ```\n    /// use memchr::memmem::FinderRev;\n    ///\n    /// let haystack = b\"foo bar foo baz foo\";\n    /// let finder = FinderRev::new(b\"foo\");\n    /// let mut it = finder.rfind_iter(haystack);\n    /// assert_eq!(Some(16), it.next());\n    /// assert_eq!(Some(8), it.next());\n    /// assert_eq!(Some(0), it.next());\n    /// assert_eq!(None, it.next());\n    /// ```\n    #[inline]\n    pub fn rfind_iter<'a, 'h>(\n        &'a self,\n        haystack: &'h [u8],\n    ) -> FindRevIter<'h, 'a> {\n        FindRevIter::new(haystack, self.as_ref())\n    }\n\n    /// Convert this finder into its owned variant, such that it no longer\n    /// borrows the needle.\n    ///\n    /// If this is already an owned finder, then this is a no-op. Otherwise,\n    /// this copies the needle.\n    ///\n    /// This is only available when the `std` feature is enabled.\n    #[cfg(feature = \"alloc\")]\n    #[inline]\n    pub fn into_owned(self) -> FinderRev<'static> {\n        FinderRev {\n            needle: self.needle.into_owned(),\n            searcher: self.searcher.clone(),\n        }\n    }\n\n    /// Convert this finder into its borrowed variant.\n    ///\n    /// This is primarily useful if your finder is owned and you'd like to\n    /// store its borrowed variant in some intermediate data structure.\n    ///\n    /// Note that the lifetime parameter of the returned finder is tied to the\n    /// lifetime of `self`, and may be shorter than the `'n` lifetime of the\n    /// needle itself. Namely, a finder's needle can be either borrowed or\n    /// owned, so the lifetime of the needle returned must necessarily be the\n    /// shorter of the two.\n    #[inline]\n    pub fn as_ref(&self) -> FinderRev<'_> {\n        FinderRev {\n            needle: CowBytes::new(self.needle()),\n            searcher: self.searcher.clone(),\n        }\n    }\n\n    /// Returns the needle that this finder searches for.\n    ///\n    /// Note that the lifetime of the needle returned is tied to the lifetime\n    /// of the finder, and may be shorter than the `'n` lifetime. Namely, a\n    /// finder's needle can be either borrowed or owned, so the lifetime of the\n    /// needle returned must necessarily be the shorter of the two.\n    #[inline]\n    pub fn needle(&self) -> &[u8] {\n        self.needle.as_slice()\n    }\n}\n\n/// A builder for constructing non-default forward or reverse memmem finders.\n///\n/// A builder is primarily useful for configuring a substring searcher.\n/// Currently, the only configuration exposed is the ability to disable\n/// heuristic prefilters used to speed up certain searches.\n#[derive(Clone, Debug, Default)]\npub struct FinderBuilder {\n    prefilter: Prefilter,\n}\n\nimpl FinderBuilder {\n    /// Create a new finder builder with default settings.\n    pub fn new() -> FinderBuilder {\n        FinderBuilder::default()\n    }\n\n    /// Build a forward finder using the given needle from the current\n    /// settings.\n    pub fn build_forward<'n, B: ?Sized + AsRef<[u8]>>(\n        &self,\n        needle: &'n B,\n    ) -> Finder<'n> {\n        self.build_forward_with_ranker(DefaultFrequencyRank, needle)\n    }\n\n    /// Build an owned forward finder using the given needle from the current\n    /// settings.\n    #[cfg(feature = \"alloc\")]\n    pub fn build_forward_owned<B: Into<alloc::boxed::Box<[u8]>>>(\n        &self,\n        needle: B,\n    ) -> Finder<'static> {\n        self.build_forward_with_ranker_owned(DefaultFrequencyRank, needle)\n    }\n\n    /// Build a forward finder using the given needle and a custom heuristic\n    /// for determining the frequency of a given byte in the dataset. See\n    /// [`HeuristicFrequencyRank`] for more details.\n    pub fn build_forward_with_ranker<\n        'n,\n        R: HeuristicFrequencyRank,\n        B: ?Sized + AsRef<[u8]>,\n    >(\n        &self,\n        ranker: R,\n        needle: &'n B,\n    ) -> Finder<'n> {\n        let needle = needle.as_ref();\n        Finder {\n            needle: CowBytes::new(needle),\n            searcher: Searcher::new(self.prefilter, ranker, needle),\n        }\n    }\n\n    /// Build an owned forward finder using the given needle and a custom\n    /// heuristic for determining the frequency of a given byte in the dataset.\n    /// See [`HeuristicFrequencyRank`] for more details.\n    #[cfg(feature = \"alloc\")]\n    pub fn build_forward_with_ranker_owned<\n        R: HeuristicFrequencyRank,\n        B: Into<alloc::boxed::Box<[u8]>>,\n    >(\n        &self,\n        ranker: R,\n        needle: B,\n    ) -> Finder<'static> {\n        let needle = needle.into();\n        let searcher = Searcher::new(self.prefilter, ranker, &needle);\n        Finder { needle: CowBytes::new_owned(needle), searcher }\n    }\n\n    /// Build a reverse finder using the given needle from the current\n    /// settings.\n    pub fn build_reverse<'n, B: ?Sized + AsRef<[u8]>>(\n        &self,\n        needle: &'n B,\n    ) -> FinderRev<'n> {\n        let needle = needle.as_ref();\n        FinderRev {\n            needle: CowBytes::new(needle),\n            searcher: SearcherRev::new(needle),\n        }\n    }\n\n    /// Build an owned reverse finder using the given needle from the current\n    /// settings.\n    #[cfg(feature = \"alloc\")]\n    pub fn build_reverse_owned<B: Into<alloc::boxed::Box<[u8]>>>(\n        &self,\n        needle: B,\n    ) -> FinderRev<'static> {\n        let needle = needle.into();\n        let searcher = SearcherRev::new(&needle);\n        FinderRev { needle: CowBytes::new_owned(needle), searcher }\n    }\n\n    /// Configure the prefilter setting for the finder.\n    ///\n    /// See the documentation for [`Prefilter`] for more discussion on why\n    /// you might want to configure this.\n    pub fn prefilter(&mut self, prefilter: Prefilter) -> &mut FinderBuilder {\n        self.prefilter = prefilter;\n        self\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    define_substring_forward_quickcheck!(|h, n| Some(Finder::new(n).find(h)));\n    define_substring_reverse_quickcheck!(|h, n| Some(\n        FinderRev::new(n).rfind(h)\n    ));\n\n    #[test]\n    fn forward() {\n        crate::tests::substring::Runner::new()\n            .fwd(|h, n| Some(Finder::new(n).find(h)))\n            .run();\n    }\n\n    #[test]\n    fn reverse() {\n        crate::tests::substring::Runner::new()\n            .rev(|h, n| Some(FinderRev::new(n).rfind(h)))\n            .run();\n    }\n}\n"
  },
  {
    "path": "src/memmem/searcher.rs",
    "content": "use crate::arch::all::{\n    packedpair::{HeuristicFrequencyRank, Pair},\n    rabinkarp, twoway,\n};\n\n#[cfg(target_arch = \"aarch64\")]\nuse crate::arch::aarch64::neon::packedpair as neon;\n#[cfg(all(target_arch = \"wasm32\", target_feature = \"simd128\"))]\nuse crate::arch::wasm32::simd128::packedpair as simd128;\n#[cfg(all(target_arch = \"x86_64\", target_feature = \"sse2\"))]\nuse crate::arch::x86_64::{\n    avx2::packedpair as avx2, sse2::packedpair as sse2,\n};\n\n/// A \"meta\" substring searcher.\n///\n/// To a first approximation, this chooses what it believes to be the \"best\"\n/// substring search implemnetation based on the needle at construction time.\n/// Then, every call to `find` will execute that particular implementation. To\n/// a second approximation, multiple substring search algorithms may be used,\n/// depending on the haystack. For example, for supremely short haystacks,\n/// Rabin-Karp is typically used.\n///\n/// See the documentation on `Prefilter` for an explanation of the dispatching\n/// mechanism. The quick summary is that an enum has too much overhead and\n/// we can't use dynamic dispatch via traits because we need to work in a\n/// core-only environment. (Dynamic dispatch works in core-only, but you\n/// need `&dyn Trait` and we really need a `Box<dyn Trait>` here. The latter\n/// requires `alloc`.) So instead, we use a union and an appropriately paired\n/// free function to read from the correct field on the union and execute the\n/// chosen substring search implementation.\n#[derive(Clone)]\npub(crate) struct Searcher {\n    call: SearcherKindFn,\n    kind: SearcherKind,\n    rabinkarp: rabinkarp::Finder,\n}\n\nimpl Searcher {\n    /// Creates a new \"meta\" substring searcher that attempts to choose the\n    /// best algorithm based on the needle, heuristics and what the current\n    /// target supports.\n    #[inline]\n    pub(crate) fn new<R: HeuristicFrequencyRank>(\n        prefilter: PrefilterConfig,\n        ranker: R,\n        needle: &[u8],\n    ) -> Searcher {\n        let rabinkarp = rabinkarp::Finder::new(needle);\n        if needle.len() <= 1 {\n            return if needle.is_empty() {\n                trace!(\"building empty substring searcher\");\n                Searcher {\n                    call: searcher_kind_empty,\n                    kind: SearcherKind { empty: () },\n                    rabinkarp,\n                }\n            } else {\n                trace!(\"building one-byte substring searcher\");\n                debug_assert_eq!(1, needle.len());\n                Searcher {\n                    call: searcher_kind_one_byte,\n                    kind: SearcherKind { one_byte: needle[0] },\n                    rabinkarp,\n                }\n            };\n        }\n        let pair = match Pair::with_ranker(needle, &ranker) {\n            Some(pair) => pair,\n            None => return Searcher::twoway(needle, rabinkarp, None),\n        };\n        debug_assert_ne!(\n            pair.index1(),\n            pair.index2(),\n            \"pair offsets should not be equivalent\"\n        );\n        #[cfg(all(target_arch = \"x86_64\", target_feature = \"sse2\"))]\n        {\n            if let Some(pp) = avx2::Finder::with_pair(needle, pair) {\n                if do_packed_search(needle) {\n                    trace!(\"building x86_64 AVX2 substring searcher\");\n                    let kind = SearcherKind { avx2: pp };\n                    Searcher { call: searcher_kind_avx2, kind, rabinkarp }\n                } else if prefilter.is_none() {\n                    Searcher::twoway(needle, rabinkarp, None)\n                } else {\n                    let prestrat = Prefilter::avx2(pp, needle);\n                    Searcher::twoway(needle, rabinkarp, Some(prestrat))\n                }\n            } else if let Some(pp) = sse2::Finder::with_pair(needle, pair) {\n                if do_packed_search(needle) {\n                    trace!(\"building x86_64 SSE2 substring searcher\");\n                    let kind = SearcherKind { sse2: pp };\n                    Searcher { call: searcher_kind_sse2, kind, rabinkarp }\n                } else if prefilter.is_none() {\n                    Searcher::twoway(needle, rabinkarp, None)\n                } else {\n                    let prestrat = Prefilter::sse2(pp, needle);\n                    Searcher::twoway(needle, rabinkarp, Some(prestrat))\n                }\n            } else if prefilter.is_none() {\n                Searcher::twoway(needle, rabinkarp, None)\n            } else {\n                // We're pretty unlikely to get to this point, but it is\n                // possible to be running on x86_64 without SSE2. Namely, it's\n                // really up to the OS whether it wants to support vector\n                // registers or not.\n                let prestrat = Prefilter::fallback(ranker, pair, needle);\n                Searcher::twoway(needle, rabinkarp, prestrat)\n            }\n        }\n        #[cfg(all(target_arch = \"wasm32\", target_feature = \"simd128\"))]\n        {\n            if let Some(pp) = simd128::Finder::with_pair(needle, pair) {\n                if do_packed_search(needle) {\n                    trace!(\"building wasm32 simd128 substring searcher\");\n                    let kind = SearcherKind { simd128: pp };\n                    Searcher { call: searcher_kind_simd128, kind, rabinkarp }\n                } else if prefilter.is_none() {\n                    Searcher::twoway(needle, rabinkarp, None)\n                } else {\n                    let prestrat = Prefilter::simd128(pp, needle);\n                    Searcher::twoway(needle, rabinkarp, Some(prestrat))\n                }\n            } else if prefilter.is_none() {\n                Searcher::twoway(needle, rabinkarp, None)\n            } else {\n                let prestrat = Prefilter::fallback(ranker, pair, needle);\n                Searcher::twoway(needle, rabinkarp, prestrat)\n            }\n        }\n        #[cfg(target_arch = \"aarch64\")]\n        {\n            if let Some(pp) = neon::Finder::with_pair(needle, pair) {\n                if do_packed_search(needle) {\n                    trace!(\"building aarch64 neon substring searcher\");\n                    let kind = SearcherKind { neon: pp };\n                    Searcher { call: searcher_kind_neon, kind, rabinkarp }\n                } else if prefilter.is_none() {\n                    Searcher::twoway(needle, rabinkarp, None)\n                } else {\n                    let prestrat = Prefilter::neon(pp, needle);\n                    Searcher::twoway(needle, rabinkarp, Some(prestrat))\n                }\n            } else if prefilter.is_none() {\n                Searcher::twoway(needle, rabinkarp, None)\n            } else {\n                let prestrat = Prefilter::fallback(ranker, pair, needle);\n                Searcher::twoway(needle, rabinkarp, prestrat)\n            }\n        }\n        #[cfg(not(any(\n            all(target_arch = \"x86_64\", target_feature = \"sse2\"),\n            all(target_arch = \"wasm32\", target_feature = \"simd128\"),\n            target_arch = \"aarch64\"\n        )))]\n        {\n            if prefilter.is_none() {\n                Searcher::twoway(needle, rabinkarp, None)\n            } else {\n                let prestrat = Prefilter::fallback(ranker, pair, needle);\n                Searcher::twoway(needle, rabinkarp, prestrat)\n            }\n        }\n    }\n\n    /// Creates a new searcher that always uses the Two-Way algorithm. This is\n    /// typically used when vector algorithms are unavailable or inappropriate.\n    /// (For example, when the needle is \"too long.\")\n    ///\n    /// If a prefilter is given, then the searcher returned will be accelerated\n    /// by the prefilter.\n    #[inline]\n    fn twoway(\n        needle: &[u8],\n        rabinkarp: rabinkarp::Finder,\n        prestrat: Option<Prefilter>,\n    ) -> Searcher {\n        let finder = twoway::Finder::new(needle);\n        match prestrat {\n            None => {\n                trace!(\"building scalar two-way substring searcher\");\n                let kind = SearcherKind { two_way: finder };\n                Searcher { call: searcher_kind_two_way, kind, rabinkarp }\n            }\n            Some(prestrat) => {\n                trace!(\n                    \"building scalar two-way \\\n                     substring searcher with a prefilter\"\n                );\n                let two_way_with_prefilter =\n                    TwoWayWithPrefilter { finder, prestrat };\n                let kind = SearcherKind { two_way_with_prefilter };\n                Searcher {\n                    call: searcher_kind_two_way_with_prefilter,\n                    kind,\n                    rabinkarp,\n                }\n            }\n        }\n    }\n\n    /// Searches the given haystack for the given needle. The needle given\n    /// should be the same as the needle that this finder was initialized\n    /// with.\n    ///\n    /// Inlining this can lead to big wins for latency, and #[inline] doesn't\n    /// seem to be enough in some cases.\n    #[inline(always)]\n    pub(crate) fn find(\n        &self,\n        prestate: &mut PrefilterState,\n        haystack: &[u8],\n        needle: &[u8],\n    ) -> Option<usize> {\n        if haystack.len() < needle.len() {\n            None\n        } else {\n            // SAFETY: By construction, we've ensured that the function\n            // in `self.call` is properly paired with the union used in\n            // `self.kind`.\n            unsafe { (self.call)(self, prestate, haystack, needle) }\n        }\n    }\n}\n\nimpl core::fmt::Debug for Searcher {\n    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {\n        f.debug_struct(\"Searcher\")\n            .field(\"call\", &\"<searcher function>\")\n            .field(\"kind\", &\"<searcher kind union>\")\n            .field(\"rabinkarp\", &self.rabinkarp)\n            .finish()\n    }\n}\n\n/// A union indicating one of several possible substring search implementations\n/// that are in active use.\n///\n/// This union should only be read by one of the functions prefixed with\n/// `searcher_kind_`. Namely, the correct function is meant to be paired with\n/// the union by the caller, such that the function always reads from the\n/// designated union field.\n#[derive(Clone, Copy)]\nunion SearcherKind {\n    empty: (),\n    one_byte: u8,\n    two_way: twoway::Finder,\n    two_way_with_prefilter: TwoWayWithPrefilter,\n    #[cfg(all(target_arch = \"x86_64\", target_feature = \"sse2\"))]\n    sse2: crate::arch::x86_64::sse2::packedpair::Finder,\n    #[cfg(all(target_arch = \"x86_64\", target_feature = \"sse2\"))]\n    avx2: crate::arch::x86_64::avx2::packedpair::Finder,\n    #[cfg(all(target_arch = \"wasm32\", target_feature = \"simd128\"))]\n    simd128: crate::arch::wasm32::simd128::packedpair::Finder,\n    #[cfg(target_arch = \"aarch64\")]\n    neon: crate::arch::aarch64::neon::packedpair::Finder,\n}\n\n/// A two-way substring searcher with a prefilter.\n#[derive(Copy, Clone, Debug)]\nstruct TwoWayWithPrefilter {\n    finder: twoway::Finder,\n    prestrat: Prefilter,\n}\n\n/// The type of a substring search function.\n///\n/// # Safety\n///\n/// When using a function of this type, callers must ensure that the correct\n/// function is paired with the value populated in `SearcherKind` union.\ntype SearcherKindFn = unsafe fn(\n    searcher: &Searcher,\n    prestate: &mut PrefilterState,\n    haystack: &[u8],\n    needle: &[u8],\n) -> Option<usize>;\n\n/// Reads from the `empty` field of `SearcherKind` to handle the case of\n/// searching for the empty needle. Works on all platforms.\n///\n/// # Safety\n///\n/// Callers must ensure that the `searcher.kind.empty` union field is set.\nunsafe fn searcher_kind_empty(\n    _searcher: &Searcher,\n    _prestate: &mut PrefilterState,\n    _haystack: &[u8],\n    _needle: &[u8],\n) -> Option<usize> {\n    Some(0)\n}\n\n/// Reads from the `one_byte` field of `SearcherKind` to handle the case of\n/// searching for a single byte needle. Works on all platforms.\n///\n/// # Safety\n///\n/// Callers must ensure that the `searcher.kind.one_byte` union field is set.\nunsafe fn searcher_kind_one_byte(\n    searcher: &Searcher,\n    _prestate: &mut PrefilterState,\n    haystack: &[u8],\n    _needle: &[u8],\n) -> Option<usize> {\n    let needle = searcher.kind.one_byte;\n    crate::memchr(needle, haystack)\n}\n\n/// Reads from the `two_way` field of `SearcherKind` to handle the case of\n/// searching for an arbitrary needle without prefilter acceleration. Works on\n/// all platforms.\n///\n/// # Safety\n///\n/// Callers must ensure that the `searcher.kind.two_way` union field is set.\nunsafe fn searcher_kind_two_way(\n    searcher: &Searcher,\n    _prestate: &mut PrefilterState,\n    haystack: &[u8],\n    needle: &[u8],\n) -> Option<usize> {\n    if rabinkarp::is_fast(haystack, needle) {\n        searcher.rabinkarp.find(haystack, needle)\n    } else {\n        searcher.kind.two_way.find(haystack, needle)\n    }\n}\n\n/// Reads from the `two_way_with_prefilter` field of `SearcherKind` to handle\n/// the case of searching for an arbitrary needle with prefilter acceleration.\n/// Works on all platforms.\n///\n/// # Safety\n///\n/// Callers must ensure that the `searcher.kind.two_way_with_prefilter` union\n/// field is set.\nunsafe fn searcher_kind_two_way_with_prefilter(\n    searcher: &Searcher,\n    prestate: &mut PrefilterState,\n    haystack: &[u8],\n    needle: &[u8],\n) -> Option<usize> {\n    if rabinkarp::is_fast(haystack, needle) {\n        searcher.rabinkarp.find(haystack, needle)\n    } else {\n        let TwoWayWithPrefilter { ref finder, ref prestrat } =\n            searcher.kind.two_way_with_prefilter;\n        let pre = Pre { prestate, prestrat };\n        finder.find_with_prefilter(Some(pre), haystack, needle)\n    }\n}\n\n/// Reads from the `sse2` field of `SearcherKind` to execute the x86_64 SSE2\n/// vectorized substring search implementation.\n///\n/// # Safety\n///\n/// Callers must ensure that the `searcher.kind.sse2` union field is set.\n#[cfg(all(target_arch = \"x86_64\", target_feature = \"sse2\"))]\nunsafe fn searcher_kind_sse2(\n    searcher: &Searcher,\n    _prestate: &mut PrefilterState,\n    haystack: &[u8],\n    needle: &[u8],\n) -> Option<usize> {\n    let finder = &searcher.kind.sse2;\n    if haystack.len() < finder.min_haystack_len() {\n        searcher.rabinkarp.find(haystack, needle)\n    } else {\n        finder.find(haystack, needle)\n    }\n}\n\n/// Reads from the `avx2` field of `SearcherKind` to execute the x86_64 AVX2\n/// vectorized substring search implementation.\n///\n/// # Safety\n///\n/// Callers must ensure that the `searcher.kind.avx2` union field is set.\n#[cfg(all(target_arch = \"x86_64\", target_feature = \"sse2\"))]\nunsafe fn searcher_kind_avx2(\n    searcher: &Searcher,\n    _prestate: &mut PrefilterState,\n    haystack: &[u8],\n    needle: &[u8],\n) -> Option<usize> {\n    let finder = &searcher.kind.avx2;\n    if haystack.len() < finder.min_haystack_len() {\n        searcher.rabinkarp.find(haystack, needle)\n    } else {\n        finder.find(haystack, needle)\n    }\n}\n\n/// Reads from the `simd128` field of `SearcherKind` to execute the wasm32\n/// simd128 vectorized substring search implementation.\n///\n/// # Safety\n///\n/// Callers must ensure that the `searcher.kind.simd128` union field is set.\n#[cfg(all(target_arch = \"wasm32\", target_feature = \"simd128\"))]\nunsafe fn searcher_kind_simd128(\n    searcher: &Searcher,\n    _prestate: &mut PrefilterState,\n    haystack: &[u8],\n    needle: &[u8],\n) -> Option<usize> {\n    let finder = &searcher.kind.simd128;\n    if haystack.len() < finder.min_haystack_len() {\n        searcher.rabinkarp.find(haystack, needle)\n    } else {\n        finder.find(haystack, needle)\n    }\n}\n\n/// Reads from the `neon` field of `SearcherKind` to execute the aarch64 neon\n/// vectorized substring search implementation.\n///\n/// # Safety\n///\n/// Callers must ensure that the `searcher.kind.neon` union field is set.\n#[cfg(target_arch = \"aarch64\")]\nunsafe fn searcher_kind_neon(\n    searcher: &Searcher,\n    _prestate: &mut PrefilterState,\n    haystack: &[u8],\n    needle: &[u8],\n) -> Option<usize> {\n    let finder = &searcher.kind.neon;\n    if haystack.len() < finder.min_haystack_len() {\n        searcher.rabinkarp.find(haystack, needle)\n    } else {\n        finder.find(haystack, needle)\n    }\n}\n\n/// A reverse substring searcher.\n#[derive(Clone, Debug)]\npub(crate) struct SearcherRev {\n    kind: SearcherRevKind,\n    rabinkarp: rabinkarp::FinderRev,\n}\n\n/// The kind of the reverse searcher.\n///\n/// For the reverse case, we don't do any SIMD acceleration or prefilters.\n/// There is no specific technical reason why we don't, but rather don't do it\n/// because it's not clear it's worth the extra code to do so. If you have a\n/// use case for it, please file an issue.\n///\n/// We also don't do the union trick as we do with the forward case and\n/// prefilters. Basically for the same reason we don't have prefilters or\n/// vector algorithms for reverse searching: it's not clear it's worth doing.\n/// Please file an issue if you have a compelling use case for fast reverse\n/// substring search.\n#[derive(Clone, Debug)]\nenum SearcherRevKind {\n    Empty,\n    OneByte { needle: u8 },\n    TwoWay { finder: twoway::FinderRev },\n}\n\nimpl SearcherRev {\n    /// Creates a new searcher for finding occurrences of the given needle in\n    /// reverse. That is, it reports the last (instead of the first) occurrence\n    /// of a needle in a haystack.\n    #[inline]\n    pub(crate) fn new(needle: &[u8]) -> SearcherRev {\n        let kind = if needle.len() <= 1 {\n            if needle.is_empty() {\n                trace!(\"building empty reverse substring searcher\");\n                SearcherRevKind::Empty\n            } else {\n                trace!(\"building one-byte reverse substring searcher\");\n                debug_assert_eq!(1, needle.len());\n                SearcherRevKind::OneByte { needle: needle[0] }\n            }\n        } else {\n            trace!(\"building scalar two-way reverse substring searcher\");\n            let finder = twoway::FinderRev::new(needle);\n            SearcherRevKind::TwoWay { finder }\n        };\n        let rabinkarp = rabinkarp::FinderRev::new(needle);\n        SearcherRev { kind, rabinkarp }\n    }\n\n    /// Searches the given haystack for the last occurrence of the given\n    /// needle. The needle given should be the same as the needle that this\n    /// finder was initialized with.\n    #[inline]\n    pub(crate) fn rfind(\n        &self,\n        haystack: &[u8],\n        needle: &[u8],\n    ) -> Option<usize> {\n        if haystack.len() < needle.len() {\n            return None;\n        }\n        match self.kind {\n            SearcherRevKind::Empty => Some(haystack.len()),\n            SearcherRevKind::OneByte { needle } => {\n                crate::memrchr(needle, haystack)\n            }\n            SearcherRevKind::TwoWay { ref finder } => {\n                if rabinkarp::is_fast(haystack, needle) {\n                    self.rabinkarp.rfind(haystack, needle)\n                } else {\n                    finder.rfind(haystack, needle)\n                }\n            }\n        }\n    }\n}\n\n/// Prefilter controls whether heuristics are used to accelerate searching.\n///\n/// A prefilter refers to the idea of detecting candidate matches very quickly,\n/// and then confirming whether those candidates are full matches. This\n/// idea can be quite effective since it's often the case that looking for\n/// candidates can be a lot faster than running a complete substring search\n/// over the entire input. Namely, looking for candidates can be done with\n/// extremely fast vectorized code.\n///\n/// The downside of a prefilter is that it assumes false positives (which are\n/// candidates generated by a prefilter that aren't matches) are somewhat rare\n/// relative to the frequency of full matches. That is, if a lot of false\n/// positives are generated, then it's possible for search time to be worse\n/// than if the prefilter wasn't enabled in the first place.\n///\n/// Another downside of a prefilter is that it can result in highly variable\n/// performance, where some cases are extraordinarily fast and others aren't.\n/// Typically, variable performance isn't a problem, but it may be for your use\n/// case.\n///\n/// The use of prefilters in this implementation does use a heuristic to detect\n/// when a prefilter might not be carrying its weight, and will dynamically\n/// disable its use. Nevertheless, this configuration option gives callers\n/// the ability to disable prefilters if you have knowledge that they won't be\n/// useful.\n#[derive(Clone, Copy, Debug)]\n#[non_exhaustive]\npub enum PrefilterConfig {\n    /// Never used a prefilter in substring search.\n    None,\n    /// Automatically detect whether a heuristic prefilter should be used. If\n    /// it is used, then heuristics will be used to dynamically disable the\n    /// prefilter if it is believed to not be carrying its weight.\n    Auto,\n}\n\nimpl Default for PrefilterConfig {\n    fn default() -> PrefilterConfig {\n        PrefilterConfig::Auto\n    }\n}\n\nimpl PrefilterConfig {\n    /// Returns true when this prefilter is set to the `None` variant.\n    fn is_none(&self) -> bool {\n        matches!(*self, PrefilterConfig::None)\n    }\n}\n\n/// The implementation of a prefilter.\n///\n/// This type encapsulates dispatch to one of several possible choices for a\n/// prefilter. Generally speaking, all prefilters have the same approximate\n/// algorithm: they choose a couple of bytes from the needle that are believed\n/// to be rare, use a fast vector algorithm to look for those bytes and return\n/// positions as candidates for some substring search algorithm (currently only\n/// Two-Way) to confirm as a match or not.\n///\n/// The differences between the algorithms are actually at the vector\n/// implementation level. Namely, we need different routines based on both\n/// which target architecture we're on and what CPU features are supported.\n///\n/// The straight-forwardly obvious approach here is to use an enum, and make\n/// `Prefilter::find` do case analysis to determine which algorithm was\n/// selected and invoke it. However, I've observed that this leads to poor\n/// codegen in some cases, especially in latency sensitive benchmarks. That is,\n/// this approach comes with overhead that I wasn't able to eliminate.\n///\n/// The second obvious approach is to use dynamic dispatch with traits. Doing\n/// that in this context where `Prefilter` owns the selection generally\n/// requires heap allocation, and this code is designed to run in core-only\n/// environments.\n///\n/// So we settle on using a union (that's `PrefilterKind`) and a function\n/// pointer (that's `PrefilterKindFn`). We select the right function pointer\n/// based on which field in the union we set, and that function in turn\n/// knows which field of the union to access. The downside of this approach\n/// is that it forces us to think about safety, but the upside is that\n/// there are some nice latency improvements to benchmarks. (Especially the\n/// `memmem/sliceslice/short` benchmark.)\n///\n/// In cases where we've selected a vector algorithm and the haystack given\n/// is too short, we fallback to the scalar version of `memchr` on the\n/// `rarest_byte`. (The scalar version of `memchr` is still better than a naive\n/// byte-at-a-time loop because it will read in `usize`-sized chunks at a\n/// time.)\n#[derive(Clone, Copy)]\nstruct Prefilter {\n    call: PrefilterKindFn,\n    kind: PrefilterKind,\n    rarest_byte: u8,\n    rarest_offset: u8,\n}\n\nimpl Prefilter {\n    /// Return a \"fallback\" prefilter, but only if it is believed to be\n    /// effective.\n    #[inline]\n    fn fallback<R: HeuristicFrequencyRank>(\n        ranker: R,\n        pair: Pair,\n        needle: &[u8],\n    ) -> Option<Prefilter> {\n        /// The maximum frequency rank permitted for the fallback prefilter.\n        /// If the rarest byte in the needle has a frequency rank above this\n        /// value, then no prefilter is used if the fallback prefilter would\n        /// otherwise be selected.\n        const MAX_FALLBACK_RANK: u8 = 250;\n\n        trace!(\"building fallback prefilter\");\n        let rarest_offset = pair.index1();\n        let rarest_byte = needle[usize::from(rarest_offset)];\n        let rarest_rank = ranker.rank(rarest_byte);\n        if rarest_rank > MAX_FALLBACK_RANK {\n            None\n        } else {\n            let finder =\n                crate::arch::all::packedpair::Finder::with_pair(needle, pair)?;\n            let call = prefilter_kind_fallback;\n            let kind = PrefilterKind { fallback: finder };\n            Some(Prefilter { call, kind, rarest_byte, rarest_offset })\n        }\n    }\n\n    /// Return a prefilter using a x86_64 SSE2 vector algorithm.\n    #[cfg(all(target_arch = \"x86_64\", target_feature = \"sse2\"))]\n    #[inline]\n    fn sse2(finder: sse2::Finder, needle: &[u8]) -> Prefilter {\n        trace!(\"building x86_64 SSE2 prefilter\");\n        let rarest_offset = finder.pair().index1();\n        let rarest_byte = needle[usize::from(rarest_offset)];\n        Prefilter {\n            call: prefilter_kind_sse2,\n            kind: PrefilterKind { sse2: finder },\n            rarest_byte,\n            rarest_offset,\n        }\n    }\n\n    /// Return a prefilter using a x86_64 AVX2 vector algorithm.\n    #[cfg(all(target_arch = \"x86_64\", target_feature = \"sse2\"))]\n    #[inline]\n    fn avx2(finder: avx2::Finder, needle: &[u8]) -> Prefilter {\n        trace!(\"building x86_64 AVX2 prefilter\");\n        let rarest_offset = finder.pair().index1();\n        let rarest_byte = needle[usize::from(rarest_offset)];\n        Prefilter {\n            call: prefilter_kind_avx2,\n            kind: PrefilterKind { avx2: finder },\n            rarest_byte,\n            rarest_offset,\n        }\n    }\n\n    /// Return a prefilter using a wasm32 simd128 vector algorithm.\n    #[cfg(all(target_arch = \"wasm32\", target_feature = \"simd128\"))]\n    #[inline]\n    fn simd128(finder: simd128::Finder, needle: &[u8]) -> Prefilter {\n        trace!(\"building wasm32 simd128 prefilter\");\n        let rarest_offset = finder.pair().index1();\n        let rarest_byte = needle[usize::from(rarest_offset)];\n        Prefilter {\n            call: prefilter_kind_simd128,\n            kind: PrefilterKind { simd128: finder },\n            rarest_byte,\n            rarest_offset,\n        }\n    }\n\n    /// Return a prefilter using a aarch64 neon vector algorithm.\n    #[cfg(target_arch = \"aarch64\")]\n    #[inline]\n    fn neon(finder: neon::Finder, needle: &[u8]) -> Prefilter {\n        trace!(\"building aarch64 neon prefilter\");\n        let rarest_offset = finder.pair().index1();\n        let rarest_byte = needle[usize::from(rarest_offset)];\n        Prefilter {\n            call: prefilter_kind_neon,\n            kind: PrefilterKind { neon: finder },\n            rarest_byte,\n            rarest_offset,\n        }\n    }\n\n    /// Return a *candidate* position for a match.\n    ///\n    /// When this returns an offset, it implies that a match could begin at\n    /// that offset, but it may not. That is, it is possible for a false\n    /// positive to be returned.\n    ///\n    /// When `None` is returned, then it is guaranteed that there are no\n    /// matches for the needle in the given haystack. That is, it is impossible\n    /// for a false negative to be returned.\n    ///\n    /// The purpose of this routine is to look for candidate matching positions\n    /// as quickly as possible before running a (likely) slower confirmation\n    /// step.\n    #[inline]\n    fn find(&self, haystack: &[u8]) -> Option<usize> {\n        // SAFETY: By construction, we've ensured that the function in\n        // `self.call` is properly paired with the union used in `self.kind`.\n        unsafe { (self.call)(self, haystack) }\n    }\n\n    /// A \"simple\" prefilter that just looks for the occurrence of the rarest\n    /// byte from the needle. This is generally only used for very small\n    /// haystacks.\n    #[inline]\n    fn find_simple(&self, haystack: &[u8]) -> Option<usize> {\n        // We don't use crate::memchr here because the haystack should be small\n        // enough that memchr won't be able to use vector routines anyway. So\n        // we just skip straight to the fallback implementation which is likely\n        // faster. (A byte-at-a-time loop is only used when the haystack is\n        // smaller than `size_of::<usize>()`.)\n        crate::arch::all::memchr::One::new(self.rarest_byte)\n            .find(haystack)\n            .map(|i| i.saturating_sub(usize::from(self.rarest_offset)))\n    }\n}\n\nimpl core::fmt::Debug for Prefilter {\n    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {\n        f.debug_struct(\"Prefilter\")\n            .field(\"call\", &\"<prefilter function>\")\n            .field(\"kind\", &\"<prefilter kind union>\")\n            .field(\"rarest_byte\", &self.rarest_byte)\n            .field(\"rarest_offset\", &self.rarest_offset)\n            .finish()\n    }\n}\n\n/// A union indicating one of several possible prefilters that are in active\n/// use.\n///\n/// This union should only be read by one of the functions prefixed with\n/// `prefilter_kind_`. Namely, the correct function is meant to be paired with\n/// the union by the caller, such that the function always reads from the\n/// designated union field.\n#[derive(Clone, Copy)]\nunion PrefilterKind {\n    fallback: crate::arch::all::packedpair::Finder,\n    #[cfg(all(target_arch = \"x86_64\", target_feature = \"sse2\"))]\n    sse2: crate::arch::x86_64::sse2::packedpair::Finder,\n    #[cfg(all(target_arch = \"x86_64\", target_feature = \"sse2\"))]\n    avx2: crate::arch::x86_64::avx2::packedpair::Finder,\n    #[cfg(all(target_arch = \"wasm32\", target_feature = \"simd128\"))]\n    simd128: crate::arch::wasm32::simd128::packedpair::Finder,\n    #[cfg(target_arch = \"aarch64\")]\n    neon: crate::arch::aarch64::neon::packedpair::Finder,\n}\n\n/// The type of a prefilter function.\n///\n/// # Safety\n///\n/// When using a function of this type, callers must ensure that the correct\n/// function is paired with the value populated in `PrefilterKind` union.\ntype PrefilterKindFn =\n    unsafe fn(strat: &Prefilter, haystack: &[u8]) -> Option<usize>;\n\n/// Reads from the `fallback` field of `PrefilterKind` to execute the fallback\n/// prefilter. Works on all platforms.\n///\n/// # Safety\n///\n/// Callers must ensure that the `strat.kind.fallback` union field is set.\nunsafe fn prefilter_kind_fallback(\n    strat: &Prefilter,\n    haystack: &[u8],\n) -> Option<usize> {\n    strat.kind.fallback.find_prefilter(haystack)\n}\n\n/// Reads from the `sse2` field of `PrefilterKind` to execute the x86_64 SSE2\n/// prefilter.\n///\n/// # Safety\n///\n/// Callers must ensure that the `strat.kind.sse2` union field is set.\n#[cfg(all(target_arch = \"x86_64\", target_feature = \"sse2\"))]\nunsafe fn prefilter_kind_sse2(\n    strat: &Prefilter,\n    haystack: &[u8],\n) -> Option<usize> {\n    let finder = &strat.kind.sse2;\n    if haystack.len() < finder.min_haystack_len() {\n        strat.find_simple(haystack)\n    } else {\n        finder.find_prefilter(haystack)\n    }\n}\n\n/// Reads from the `avx2` field of `PrefilterKind` to execute the x86_64 AVX2\n/// prefilter.\n///\n/// # Safety\n///\n/// Callers must ensure that the `strat.kind.avx2` union field is set.\n#[cfg(all(target_arch = \"x86_64\", target_feature = \"sse2\"))]\nunsafe fn prefilter_kind_avx2(\n    strat: &Prefilter,\n    haystack: &[u8],\n) -> Option<usize> {\n    let finder = &strat.kind.avx2;\n    if haystack.len() < finder.min_haystack_len() {\n        strat.find_simple(haystack)\n    } else {\n        finder.find_prefilter(haystack)\n    }\n}\n\n/// Reads from the `simd128` field of `PrefilterKind` to execute the wasm32\n/// simd128 prefilter.\n///\n/// # Safety\n///\n/// Callers must ensure that the `strat.kind.simd128` union field is set.\n#[cfg(all(target_arch = \"wasm32\", target_feature = \"simd128\"))]\nunsafe fn prefilter_kind_simd128(\n    strat: &Prefilter,\n    haystack: &[u8],\n) -> Option<usize> {\n    let finder = &strat.kind.simd128;\n    if haystack.len() < finder.min_haystack_len() {\n        strat.find_simple(haystack)\n    } else {\n        finder.find_prefilter(haystack)\n    }\n}\n\n/// Reads from the `neon` field of `PrefilterKind` to execute the aarch64 neon\n/// prefilter.\n///\n/// # Safety\n///\n/// Callers must ensure that the `strat.kind.neon` union field is set.\n#[cfg(target_arch = \"aarch64\")]\nunsafe fn prefilter_kind_neon(\n    strat: &Prefilter,\n    haystack: &[u8],\n) -> Option<usize> {\n    let finder = &strat.kind.neon;\n    if haystack.len() < finder.min_haystack_len() {\n        strat.find_simple(haystack)\n    } else {\n        finder.find_prefilter(haystack)\n    }\n}\n\n/// PrefilterState tracks state associated with the effectiveness of a\n/// prefilter. It is used to track how many bytes, on average, are skipped by\n/// the prefilter. If this average dips below a certain threshold over time,\n/// then the state renders the prefilter inert and stops using it.\n///\n/// A prefilter state should be created for each search. (Where creating an\n/// iterator is treated as a single search.) A prefilter state should only be\n/// created from a `Freqy`. e.g., An inert `Freqy` will produce an inert\n/// `PrefilterState`.\n#[derive(Clone, Copy, Debug)]\npub(crate) struct PrefilterState {\n    /// The number of skips that has been executed. This is always 1 greater\n    /// than the actual number of skips. The special sentinel value of 0\n    /// indicates that the prefilter is inert. This is useful to avoid\n    /// additional checks to determine whether the prefilter is still\n    /// \"effective.\" Once a prefilter becomes inert, it should no longer be\n    /// used (according to our heuristics).\n    skips: u32,\n    /// The total number of bytes that have been skipped.\n    skipped: u32,\n}\n\nimpl PrefilterState {\n    /// The minimum number of skip attempts to try before considering whether\n    /// a prefilter is effective or not.\n    const MIN_SKIPS: u32 = 50;\n\n    /// The minimum amount of bytes that skipping must average.\n    ///\n    /// This value was chosen based on varying it and checking\n    /// the microbenchmarks. In particular, this can impact the\n    /// pathological/repeated-{huge,small} benchmarks quite a bit if it's set\n    /// too low.\n    const MIN_SKIP_BYTES: u32 = 8;\n\n    /// Create a fresh prefilter state.\n    #[inline]\n    pub(crate) fn new() -> PrefilterState {\n        PrefilterState { skips: 1, skipped: 0 }\n    }\n\n    /// Update this state with the number of bytes skipped on the last\n    /// invocation of the prefilter.\n    #[inline]\n    fn update(&mut self, skipped: usize) {\n        self.skips = self.skips.saturating_add(1);\n        // We need to do this dance since it's technically possible for\n        // `skipped` to overflow a `u32`. (And we use a `u32` to reduce the\n        // size of a prefilter state.)\n        self.skipped = match u32::try_from(skipped) {\n            Err(_) => core::u32::MAX,\n            Ok(skipped) => self.skipped.saturating_add(skipped),\n        };\n    }\n\n    /// Return true if and only if this state indicates that a prefilter is\n    /// still effective.\n    #[inline]\n    fn is_effective(&mut self) -> bool {\n        if self.is_inert() {\n            return false;\n        }\n        if self.skips() < PrefilterState::MIN_SKIPS {\n            return true;\n        }\n        if self.skipped >= PrefilterState::MIN_SKIP_BYTES * self.skips() {\n            return true;\n        }\n\n        // We're inert.\n        self.skips = 0;\n        false\n    }\n\n    /// Returns true if the prefilter this state represents should no longer\n    /// be used.\n    #[inline]\n    fn is_inert(&self) -> bool {\n        self.skips == 0\n    }\n\n    /// Returns the total number of times the prefilter has been used.\n    #[inline]\n    fn skips(&self) -> u32 {\n        // Remember, `0` is a sentinel value indicating inertness, so we\n        // always need to subtract `1` to get our actual number of skips.\n        self.skips.saturating_sub(1)\n    }\n}\n\n/// A combination of prefilter effectiveness state and the prefilter itself.\n#[derive(Debug)]\npub(crate) struct Pre<'a> {\n    /// State that tracks the effectiveness of a prefilter.\n    prestate: &'a mut PrefilterState,\n    /// The actual prefilter.\n    prestrat: &'a Prefilter,\n}\n\nimpl<'a> Pre<'a> {\n    /// Call this prefilter on the given haystack with the given needle.\n    #[inline]\n    pub(crate) fn find(&mut self, haystack: &[u8]) -> Option<usize> {\n        let result = self.prestrat.find(haystack);\n        self.prestate.update(result.unwrap_or(haystack.len()));\n        result\n    }\n\n    /// Return true if and only if this prefilter should be used.\n    #[inline]\n    pub(crate) fn is_effective(&mut self) -> bool {\n        self.prestate.is_effective()\n    }\n}\n\n/// Returns true if the needle has the right characteristics for a vector\n/// algorithm to handle the entirety of substring search.\n///\n/// Vector algorithms can be used for prefilters for other substring search\n/// algorithms (like Two-Way), but they can also be used for substring search\n/// on their own. When used for substring search, vector algorithms will\n/// quickly identify candidate match positions (just like in the prefilter\n/// case), but instead of returning the candidate position they will try to\n/// confirm the match themselves. Confirmation happens via `memcmp`. This\n/// works well for short needles, but can break down when many false candidate\n/// positions are generated for large needles. Thus, we only permit vector\n/// algorithms to own substring search when the needle is of a certain length.\n#[inline]\nfn do_packed_search(needle: &[u8]) -> bool {\n    /// The minimum length of a needle required for this algorithm. The minimum\n    /// is 2 since a length of 1 should just use memchr and a length of 0 isn't\n    /// a case handled by this searcher.\n    const MIN_LEN: usize = 2;\n\n    /// The maximum length of a needle required for this algorithm.\n    ///\n    /// In reality, there is no hard max here. The code below can handle any\n    /// length needle. (Perhaps that suggests there are missing optimizations.)\n    /// Instead, this is a heuristic and a bound guaranteeing our linear time\n    /// complexity.\n    ///\n    /// It is a heuristic because when a candidate match is found, memcmp is\n    /// run. For very large needles with lots of false positives, memcmp can\n    /// make the code run quite slow.\n    ///\n    /// It is a bound because the worst case behavior with memcmp is\n    /// multiplicative in the size of the needle and haystack, and we want\n    /// to keep that additive. This bound ensures we still meet that bound\n    /// theoretically, since it's just a constant. We aren't acting in bad\n    /// faith here, memcmp on tiny needles is so fast that even in pathological\n    /// cases (see pathological vector benchmarks), this is still just as fast\n    /// or faster in practice.\n    ///\n    /// This specific number was chosen by tweaking a bit and running\n    /// benchmarks. The rare-medium-needle, for example, gets about 5% faster\n    /// by using this algorithm instead of a prefilter-accelerated Two-Way.\n    /// There's also a theoretical desire to keep this number reasonably\n    /// low, to mitigate the impact of pathological cases. I did try 64, and\n    /// some benchmarks got a little better, and others (particularly the\n    /// pathological ones), got a lot worse. So... 32 it is?\n    const MAX_LEN: usize = 32;\n    MIN_LEN <= needle.len() && needle.len() <= MAX_LEN\n}\n"
  },
  {
    "path": "src/tests/memchr/mod.rs",
    "content": "use alloc::{\n    string::{String, ToString},\n    vec,\n    vec::Vec,\n};\n\nuse crate::ext::Byte;\n\npub(crate) mod naive;\n#[macro_use]\npub(crate) mod prop;\n\nconst SEEDS: &'static [Seed] = &[\n    Seed { haystack: \"a\", needles: &[b'a'], positions: &[0] },\n    Seed { haystack: \"aa\", needles: &[b'a'], positions: &[0, 1] },\n    Seed { haystack: \"aaa\", needles: &[b'a'], positions: &[0, 1, 2] },\n    Seed { haystack: \"\", needles: &[b'a'], positions: &[] },\n    Seed { haystack: \"z\", needles: &[b'a'], positions: &[] },\n    Seed { haystack: \"zz\", needles: &[b'a'], positions: &[] },\n    Seed { haystack: \"zza\", needles: &[b'a'], positions: &[2] },\n    Seed { haystack: \"zaza\", needles: &[b'a'], positions: &[1, 3] },\n    Seed { haystack: \"zzza\", needles: &[b'a'], positions: &[3] },\n    Seed { haystack: \"\\x00a\", needles: &[b'a'], positions: &[1] },\n    Seed { haystack: \"\\x00\", needles: &[b'\\x00'], positions: &[0] },\n    Seed { haystack: \"\\x00\\x00\", needles: &[b'\\x00'], positions: &[0, 1] },\n    Seed { haystack: \"\\x00a\\x00\", needles: &[b'\\x00'], positions: &[0, 2] },\n    Seed { haystack: \"zzzzzzzzzzzzzzzza\", needles: &[b'a'], positions: &[16] },\n    Seed {\n        haystack: \"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzza\",\n        needles: &[b'a'],\n        positions: &[32],\n    },\n    // two needles (applied to memchr2 + memchr3)\n    Seed { haystack: \"az\", needles: &[b'a', b'z'], positions: &[0, 1] },\n    Seed { haystack: \"az\", needles: &[b'a', b'z'], positions: &[0, 1] },\n    Seed { haystack: \"az\", needles: &[b'x', b'y'], positions: &[] },\n    Seed { haystack: \"az\", needles: &[b'a', b'y'], positions: &[0] },\n    Seed { haystack: \"az\", needles: &[b'x', b'z'], positions: &[1] },\n    Seed { haystack: \"yyyyaz\", needles: &[b'a', b'z'], positions: &[4, 5] },\n    Seed { haystack: \"yyyyaz\", needles: &[b'z', b'a'], positions: &[4, 5] },\n    // three needles (applied to memchr3)\n    Seed {\n        haystack: \"xyz\",\n        needles: &[b'x', b'y', b'z'],\n        positions: &[0, 1, 2],\n    },\n    Seed {\n        haystack: \"zxy\",\n        needles: &[b'x', b'y', b'z'],\n        positions: &[0, 1, 2],\n    },\n    Seed { haystack: \"zxy\", needles: &[b'x', b'a', b'z'], positions: &[0, 1] },\n    Seed { haystack: \"zxy\", needles: &[b't', b'a', b'z'], positions: &[0] },\n    Seed { haystack: \"yxz\", needles: &[b't', b'a', b'z'], positions: &[2] },\n];\n\n/// Runs a host of substring search tests.\n///\n/// This has support for \"partial\" substring search implementations only work\n/// for a subset of needles/haystacks. For example, the \"packed pair\" substring\n/// search implementation only works for haystacks of some minimum length based\n/// of the pair of bytes selected and the size of the vector used.\npub(crate) struct Runner {\n    needle_len: usize,\n}\n\nimpl Runner {\n    /// Create a new test runner for forward and reverse byte search\n    /// implementations.\n    ///\n    /// The `needle_len` given must be at most `3` and at least `1`. It\n    /// corresponds to the number of needle bytes to search for.\n    pub(crate) fn new(needle_len: usize) -> Runner {\n        assert!(needle_len >= 1, \"needle_len must be at least 1\");\n        assert!(needle_len <= 3, \"needle_len must be at most 3\");\n        Runner { needle_len }\n    }\n\n    /// Run all tests. This panics on the first failure.\n    ///\n    /// If the implementation being tested returns `None` for a particular\n    /// haystack/needle combination, then that test is skipped.\n    pub(crate) fn forward_iter<F>(self, mut test: F)\n    where\n        F: FnMut(&[u8], &[u8]) -> Option<Vec<usize>> + 'static,\n    {\n        for seed in SEEDS.iter() {\n            if seed.needles.len() > self.needle_len {\n                continue;\n            }\n            for t in seed.generate() {\n                let results = match test(t.haystack.as_bytes(), &t.needles) {\n                    None => continue,\n                    Some(results) => results,\n                };\n                assert_eq!(\n                    t.expected,\n                    results,\n                    \"needles: {:?}, haystack: {:?}\",\n                    t.needles\n                        .iter()\n                        .map(|&b| b.to_char())\n                        .collect::<Vec<char>>(),\n                    t.haystack,\n                );\n            }\n        }\n    }\n\n    /// Run all tests in the reverse direction. This panics on the first\n    /// failure.\n    ///\n    /// If the implementation being tested returns `None` for a particular\n    /// haystack/needle combination, then that test is skipped.\n    pub(crate) fn reverse_iter<F>(self, mut test: F)\n    where\n        F: FnMut(&[u8], &[u8]) -> Option<Vec<usize>> + 'static,\n    {\n        for seed in SEEDS.iter() {\n            if seed.needles.len() > self.needle_len {\n                continue;\n            }\n            for t in seed.generate() {\n                let mut results = match test(t.haystack.as_bytes(), &t.needles)\n                {\n                    None => continue,\n                    Some(results) => results,\n                };\n                results.reverse();\n                assert_eq!(\n                    t.expected,\n                    results,\n                    \"needles: {:?}, haystack: {:?}\",\n                    t.needles\n                        .iter()\n                        .map(|&b| b.to_char())\n                        .collect::<Vec<char>>(),\n                    t.haystack,\n                );\n            }\n        }\n    }\n\n    /// Run all tests as counting tests. This panics on the first failure.\n    ///\n    /// That is, this only checks that the number of matches is correct and\n    /// not whether the offsets of each match are.\n    pub(crate) fn count_iter<F>(self, mut test: F)\n    where\n        F: FnMut(&[u8], &[u8]) -> Option<usize> + 'static,\n    {\n        for seed in SEEDS.iter() {\n            if seed.needles.len() > self.needle_len {\n                continue;\n            }\n            for t in seed.generate() {\n                let got = match test(t.haystack.as_bytes(), &t.needles) {\n                    None => continue,\n                    Some(got) => got,\n                };\n                assert_eq!(\n                    t.expected.len(),\n                    got,\n                    \"needles: {:?}, haystack: {:?}\",\n                    t.needles\n                        .iter()\n                        .map(|&b| b.to_char())\n                        .collect::<Vec<char>>(),\n                    t.haystack,\n                );\n            }\n        }\n    }\n\n    /// Like `Runner::forward`, but for a function that returns only the next\n    /// match and not all matches.\n    ///\n    /// If the function returns `None`, then it is skipped.\n    pub(crate) fn forward_oneshot<F>(self, mut test: F)\n    where\n        F: FnMut(&[u8], &[u8]) -> Option<Option<usize>> + 'static,\n    {\n        self.forward_iter(move |haystack, needles| {\n            let mut start = 0;\n            let mut results = vec![];\n            while let Some(i) = test(&haystack[start..], needles)? {\n                results.push(start + i);\n                start += i + 1;\n            }\n            Some(results)\n        })\n    }\n\n    /// Like `Runner::reverse`, but for a function that returns only the last\n    /// match and not all matches.\n    ///\n    /// If the function returns `None`, then it is skipped.\n    pub(crate) fn reverse_oneshot<F>(self, mut test: F)\n    where\n        F: FnMut(&[u8], &[u8]) -> Option<Option<usize>> + 'static,\n    {\n        self.reverse_iter(move |haystack, needles| {\n            let mut end = haystack.len();\n            let mut results = vec![];\n            while let Some(i) = test(&haystack[..end], needles)? {\n                results.push(i);\n                end = i;\n            }\n            Some(results)\n        })\n    }\n}\n\n/// A single test for memr?chr{,2,3}.\n#[derive(Clone, Debug)]\nstruct Test {\n    /// The string to search in.\n    haystack: String,\n    /// The needles to look for.\n    needles: Vec<u8>,\n    /// The offsets that are expected to be found for all needles in the\n    /// forward direction.\n    expected: Vec<usize>,\n}\n\nimpl Test {\n    fn new(seed: &Seed) -> Test {\n        Test {\n            haystack: seed.haystack.to_string(),\n            needles: seed.needles.to_vec(),\n            expected: seed.positions.to_vec(),\n        }\n    }\n}\n\n/// Data that can be expanded into many memchr tests by padding out the corpus.\n#[derive(Clone, Debug)]\nstruct Seed {\n    /// The thing to search. We use `&str` instead of `&[u8]` because they\n    /// are nicer to write in tests, and we don't miss much since memchr\n    /// doesn't care about UTF-8.\n    ///\n    /// Corpora cannot contain either '%' or '#'. We use these bytes when\n    /// expanding test cases into many test cases, and we assume they are not\n    /// used. If they are used, `memchr_tests` will panic.\n    haystack: &'static str,\n    /// The needles to search for. This is intended to be an alternation of\n    /// needles. The number of needles may cause this test to be skipped for\n    /// some memchr variants. For example, a test with 2 needles cannot be used\n    /// to test `memchr`, but can be used to test `memchr2` and `memchr3`.\n    /// However, a test with only 1 needle can be used to test all of `memchr`,\n    /// `memchr2` and `memchr3`. We achieve this by filling in the needles with\n    /// bytes that we never used in the corpus (such as '#').\n    needles: &'static [u8],\n    /// The positions expected to match for all of the needles.\n    positions: &'static [usize],\n}\n\nimpl Seed {\n    /// Controls how much we expand the haystack on either side for each test.\n    /// We lower this on Miri because otherwise running the tests would take\n    /// forever.\n    const EXPAND_LEN: usize = {\n        #[cfg(not(miri))]\n        {\n            515\n        }\n        #[cfg(miri)]\n        {\n            6\n        }\n    };\n\n    /// Expand this test into many variations of the same test.\n    ///\n    /// In particular, this will generate more tests with larger corpus sizes.\n    /// The expected positions are updated to maintain the integrity of the\n    /// test.\n    ///\n    /// This is important in testing a memchr implementation, because there are\n    /// often different cases depending on the length of the corpus.\n    ///\n    /// Note that we extend the corpus by adding `%` bytes, which we\n    /// don't otherwise use as a needle.\n    fn generate(&self) -> impl Iterator<Item = Test> {\n        let mut more = vec![];\n\n        // Add bytes to the start of the corpus.\n        for i in 0..Seed::EXPAND_LEN {\n            let mut t = Test::new(self);\n            let mut new: String = core::iter::repeat('%').take(i).collect();\n            new.push_str(&t.haystack);\n            t.haystack = new;\n            t.expected = t.expected.into_iter().map(|p| p + i).collect();\n            more.push(t);\n        }\n        // Add bytes to the end of the corpus.\n        for i in 1..Seed::EXPAND_LEN {\n            let mut t = Test::new(self);\n            let padding: String = core::iter::repeat('%').take(i).collect();\n            t.haystack.push_str(&padding);\n            more.push(t);\n        }\n\n        more.into_iter()\n    }\n}\n"
  },
  {
    "path": "src/tests/memchr/naive.rs",
    "content": "pub(crate) fn memchr(n1: u8, haystack: &[u8]) -> Option<usize> {\n    haystack.iter().position(|&b| b == n1)\n}\n\npub(crate) fn memchr2(n1: u8, n2: u8, haystack: &[u8]) -> Option<usize> {\n    haystack.iter().position(|&b| b == n1 || b == n2)\n}\n\npub(crate) fn memchr3(\n    n1: u8,\n    n2: u8,\n    n3: u8,\n    haystack: &[u8],\n) -> Option<usize> {\n    haystack.iter().position(|&b| b == n1 || b == n2 || b == n3)\n}\n\npub(crate) fn memrchr(n1: u8, haystack: &[u8]) -> Option<usize> {\n    haystack.iter().rposition(|&b| b == n1)\n}\n\npub(crate) fn memrchr2(n1: u8, n2: u8, haystack: &[u8]) -> Option<usize> {\n    haystack.iter().rposition(|&b| b == n1 || b == n2)\n}\n\npub(crate) fn memrchr3(\n    n1: u8,\n    n2: u8,\n    n3: u8,\n    haystack: &[u8],\n) -> Option<usize> {\n    haystack.iter().rposition(|&b| b == n1 || b == n2 || b == n3)\n}\n"
  },
  {
    "path": "src/tests/memchr/prop.rs",
    "content": "/// Defines a host of quickcheck tests for the given memchr searcher.\n#[cfg(miri)]\n#[macro_export]\nmacro_rules! define_memchr_quickcheck {\n    ($($tt:tt)*) => {};\n}\n\n/// Defines a host of quickcheck tests for the given memchr searcher.\n#[cfg(not(miri))]\n#[macro_export]\nmacro_rules! define_memchr_quickcheck {\n    ($mod:ident) => {\n        define_memchr_quickcheck!($mod, new);\n    };\n    ($mod:ident, $cons:ident) => {\n        use alloc::vec::Vec;\n\n        use quickcheck::TestResult;\n\n        use crate::tests::memchr::{\n            naive,\n            prop::{double_ended_take, naive1_iter, naive2_iter, naive3_iter},\n        };\n\n        quickcheck::quickcheck! {\n            fn qc_memchr_matches_naive(n1: u8, corpus: Vec<u8>) -> TestResult {\n                let expected = naive::memchr(n1, &corpus);\n                let got = match $mod::One::$cons(n1) {\n                    None => return TestResult::discard(),\n                    Some(f) => f.find(&corpus),\n                };\n                TestResult::from_bool(expected == got)\n            }\n\n            fn qc_memrchr_matches_naive(n1: u8, corpus: Vec<u8>) -> TestResult {\n                let expected = naive::memrchr(n1, &corpus);\n                let got = match $mod::One::$cons(n1) {\n                    None => return TestResult::discard(),\n                    Some(f) => f.rfind(&corpus),\n                };\n                TestResult::from_bool(expected == got)\n            }\n\n            fn qc_memchr2_matches_naive(n1: u8, n2: u8, corpus: Vec<u8>) -> TestResult {\n                let expected = naive::memchr2(n1, n2, &corpus);\n                let got = match $mod::Two::$cons(n1, n2) {\n                    None => return TestResult::discard(),\n                    Some(f) => f.find(&corpus),\n                };\n                TestResult::from_bool(expected == got)\n            }\n\n            fn qc_memrchr2_matches_naive(n1: u8, n2: u8, corpus: Vec<u8>) -> TestResult {\n                let expected = naive::memrchr2(n1, n2, &corpus);\n                let got = match $mod::Two::$cons(n1, n2) {\n                    None => return TestResult::discard(),\n                    Some(f) => f.rfind(&corpus),\n                };\n                TestResult::from_bool(expected == got)\n            }\n\n            fn qc_memchr3_matches_naive(\n                n1: u8, n2: u8, n3: u8,\n                corpus: Vec<u8>\n            ) -> TestResult {\n                let expected = naive::memchr3(n1, n2, n3, &corpus);\n                let got = match $mod::Three::$cons(n1, n2, n3) {\n                    None => return TestResult::discard(),\n                    Some(f) => f.find(&corpus),\n                };\n                TestResult::from_bool(expected == got)\n            }\n\n            fn qc_memrchr3_matches_naive(\n                n1: u8, n2: u8, n3: u8,\n                corpus: Vec<u8>\n            ) -> TestResult {\n                let expected = naive::memrchr3(n1, n2, n3, &corpus);\n                let got = match $mod::Three::$cons(n1, n2, n3) {\n                    None => return TestResult::discard(),\n                    Some(f) => f.rfind(&corpus),\n                };\n                TestResult::from_bool(expected == got)\n            }\n\n            fn qc_memchr_double_ended_iter(\n                needle: u8, data: Vec<u8>, take_side: Vec<bool>\n            ) -> TestResult {\n                // make nonempty\n                let mut take_side = take_side;\n                if take_side.is_empty() { take_side.push(true) };\n\n                let finder = match $mod::One::$cons(needle) {\n                    None => return TestResult::discard(),\n                    Some(finder) => finder,\n                };\n                let iter = finder.iter(&data);\n                let got = double_ended_take(\n                    iter,\n                    take_side.iter().cycle().cloned(),\n                );\n                let expected = naive1_iter(needle, &data);\n\n                TestResult::from_bool(got.iter().cloned().eq(expected))\n            }\n\n            fn qc_memchr2_double_ended_iter(\n                needle1: u8, needle2: u8, data: Vec<u8>, take_side: Vec<bool>\n            ) -> TestResult {\n                // make nonempty\n                let mut take_side = take_side;\n                if take_side.is_empty() { take_side.push(true) };\n\n                let finder = match $mod::Two::$cons(needle1, needle2) {\n                    None => return TestResult::discard(),\n                    Some(finder) => finder,\n                };\n                let iter = finder.iter(&data);\n                let got = double_ended_take(\n                    iter,\n                    take_side.iter().cycle().cloned(),\n                );\n                let expected = naive2_iter(needle1, needle2, &data);\n\n                TestResult::from_bool(got.iter().cloned().eq(expected))\n            }\n\n            fn qc_memchr3_double_ended_iter(\n                needle1: u8, needle2: u8, needle3: u8,\n                data: Vec<u8>, take_side: Vec<bool>\n            ) -> TestResult {\n                // make nonempty\n                let mut take_side = take_side;\n                if take_side.is_empty() { take_side.push(true) };\n\n                let finder = match $mod::Three::$cons(needle1, needle2, needle3) {\n                    None => return TestResult::discard(),\n                    Some(finder) => finder,\n                };\n                let iter = finder.iter(&data);\n                let got = double_ended_take(\n                    iter,\n                    take_side.iter().cycle().cloned(),\n                );\n                let expected = naive3_iter(needle1, needle2, needle3, &data);\n\n                TestResult::from_bool(got.iter().cloned().eq(expected))\n            }\n\n            fn qc_memchr1_iter(data: Vec<u8>) -> TestResult {\n                let needle = 0;\n                let finder = match $mod::One::$cons(needle) {\n                    None => return TestResult::discard(),\n                    Some(finder) => finder,\n                };\n                let got = finder.iter(&data);\n                let expected = naive1_iter(needle, &data);\n                TestResult::from_bool(got.eq(expected))\n            }\n\n            fn qc_memchr1_rev_iter(data: Vec<u8>) -> TestResult {\n                let needle = 0;\n\n                let finder = match $mod::One::$cons(needle) {\n                    None => return TestResult::discard(),\n                    Some(finder) => finder,\n                };\n                let got = finder.iter(&data).rev();\n                let expected = naive1_iter(needle, &data).rev();\n                TestResult::from_bool(got.eq(expected))\n            }\n\n            fn qc_memchr2_iter(data: Vec<u8>) -> TestResult {\n                let needle1 = 0;\n                let needle2 = 1;\n\n                let finder = match $mod::Two::$cons(needle1, needle2) {\n                    None => return TestResult::discard(),\n                    Some(finder) => finder,\n                };\n                let got = finder.iter(&data);\n                let expected = naive2_iter(needle1, needle2, &data);\n                TestResult::from_bool(got.eq(expected))\n            }\n\n            fn qc_memchr2_rev_iter(data: Vec<u8>) -> TestResult {\n                let needle1 = 0;\n                let needle2 = 1;\n\n                let finder = match $mod::Two::$cons(needle1, needle2) {\n                    None => return TestResult::discard(),\n                    Some(finder) => finder,\n                };\n                let got = finder.iter(&data).rev();\n                let expected = naive2_iter(needle1, needle2, &data).rev();\n                TestResult::from_bool(got.eq(expected))\n            }\n\n            fn qc_memchr3_iter(data: Vec<u8>) -> TestResult {\n                let needle1 = 0;\n                let needle2 = 1;\n                let needle3 = 2;\n\n                let finder = match $mod::Three::$cons(needle1, needle2, needle3) {\n                    None => return TestResult::discard(),\n                    Some(finder) => finder,\n                };\n                let got = finder.iter(&data);\n                let expected = naive3_iter(needle1, needle2, needle3, &data);\n                TestResult::from_bool(got.eq(expected))\n            }\n\n            fn qc_memchr3_rev_iter(data: Vec<u8>) -> TestResult {\n                let needle1 = 0;\n                let needle2 = 1;\n                let needle3 = 2;\n\n                let finder = match $mod::Three::$cons(needle1, needle2, needle3) {\n                    None => return TestResult::discard(),\n                    Some(finder) => finder,\n                };\n                let got = finder.iter(&data).rev();\n                let expected = naive3_iter(needle1, needle2, needle3, &data).rev();\n                TestResult::from_bool(got.eq(expected))\n            }\n\n            fn qc_memchr1_iter_size_hint(data: Vec<u8>) -> TestResult {\n                // test that the size hint is within reasonable bounds\n                let needle = 0;\n                let finder = match $mod::One::$cons(needle) {\n                    None => return TestResult::discard(),\n                    Some(finder) => finder,\n                };\n                let mut iter = finder.iter(&data);\n                let mut real_count = data\n                    .iter()\n                    .filter(|&&elt| elt == needle)\n                    .count();\n\n                while let Some(index) = iter.next() {\n                    real_count -= 1;\n                    let (lower, upper) = iter.size_hint();\n                    assert!(lower <= real_count);\n                    assert!(upper.unwrap() >= real_count);\n                    assert!(upper.unwrap() <= data.len() - index);\n                }\n                TestResult::passed()\n            }\n        }\n    };\n}\n\n// take items from a DEI, taking front for each true and back for each false.\n// Return a vector with the concatenation of the fronts and the reverse of the\n// backs.\n#[cfg(not(miri))]\npub(crate) fn double_ended_take<I, J>(\n    mut iter: I,\n    take_side: J,\n) -> alloc::vec::Vec<I::Item>\nwhere\n    I: DoubleEndedIterator,\n    J: Iterator<Item = bool>,\n{\n    let mut found_front = alloc::vec![];\n    let mut found_back = alloc::vec![];\n\n    for take_front in take_side {\n        if take_front {\n            if let Some(pos) = iter.next() {\n                found_front.push(pos);\n            } else {\n                break;\n            }\n        } else {\n            if let Some(pos) = iter.next_back() {\n                found_back.push(pos);\n            } else {\n                break;\n            }\n        };\n    }\n\n    let mut all_found = found_front;\n    all_found.extend(found_back.into_iter().rev());\n    all_found\n}\n\n// return an iterator of the 0-based indices of haystack that match the needle\n#[cfg(not(miri))]\npub(crate) fn naive1_iter<'a>(\n    n1: u8,\n    haystack: &'a [u8],\n) -> impl DoubleEndedIterator<Item = usize> + 'a {\n    haystack.iter().enumerate().filter(move |&(_, &b)| b == n1).map(|t| t.0)\n}\n\n#[cfg(not(miri))]\npub(crate) fn naive2_iter<'a>(\n    n1: u8,\n    n2: u8,\n    haystack: &'a [u8],\n) -> impl DoubleEndedIterator<Item = usize> + 'a {\n    haystack\n        .iter()\n        .enumerate()\n        .filter(move |&(_, &b)| b == n1 || b == n2)\n        .map(|t| t.0)\n}\n\n#[cfg(not(miri))]\npub(crate) fn naive3_iter<'a>(\n    n1: u8,\n    n2: u8,\n    n3: u8,\n    haystack: &'a [u8],\n) -> impl DoubleEndedIterator<Item = usize> + 'a {\n    haystack\n        .iter()\n        .enumerate()\n        .filter(move |&(_, &b)| b == n1 || b == n2 || b == n3)\n        .map(|t| t.0)\n}\n"
  },
  {
    "path": "src/tests/mod.rs",
    "content": "#[macro_use]\npub(crate) mod memchr;\npub(crate) mod packedpair;\n#[macro_use]\npub(crate) mod substring;\n\n// For debugging, particularly in CI, print out the byte order of the current\n// target.\n#[test]\nfn byte_order() {\n    #[cfg(target_endian = \"little\")]\n    std::eprintln!(\"LITTLE ENDIAN\");\n    #[cfg(target_endian = \"big\")]\n    std::eprintln!(\"BIG ENDIAN\");\n}\n"
  },
  {
    "path": "src/tests/packedpair.rs",
    "content": "use alloc::{boxed::Box, vec, vec::Vec};\n\n/// A set of \"packed pair\" test seeds. Each seed serves as the base for the\n/// generation of many other tests. In essence, the seed captures the pair of\n/// bytes we used for a predicate and first byte among our needle. The tests\n/// generated from each seed essentially vary the length of the needle and\n/// haystack, while using the rare/first byte configuration from the seed.\n///\n/// The purpose of this is to test many different needle/haystack lengths.\n/// In particular, some of the vector optimizations might only have bugs\n/// in haystacks of a certain size.\nconst SEEDS: &[Seed] = &[\n    // Why not use different 'first' bytes? It seemed like a good idea to be\n    // able to configure it, but when I wrote the test generator below, it\n    // didn't seem necessary to use for reasons that I forget.\n    Seed { first: b'x', index1: b'y', index2: b'z' },\n    Seed { first: b'x', index1: b'x', index2: b'z' },\n    Seed { first: b'x', index1: b'y', index2: b'x' },\n    Seed { first: b'x', index1: b'x', index2: b'x' },\n    Seed { first: b'x', index1: b'y', index2: b'y' },\n];\n\n/// Runs a host of \"packed pair\" search tests.\n///\n/// These tests specifically look for the occurrence of a possible substring\n/// match based on a pair of bytes matching at the right offsets.\npub(crate) struct Runner {\n    fwd: Option<\n        Box<\n            dyn FnMut(&[u8], &[u8], u8, u8) -> Option<Option<usize>> + 'static,\n        >,\n    >,\n}\n\nimpl Runner {\n    /// Create a new test runner for \"packed pair\" substring search.\n    pub(crate) fn new() -> Runner {\n        Runner { fwd: None }\n    }\n\n    /// Run all tests. This panics on the first failure.\n    ///\n    /// If the implementation being tested returns `None` for a particular\n    /// haystack/needle combination, then that test is skipped.\n    ///\n    /// This runs tests on both the forward and reverse implementations given.\n    /// If either (or both) are missing, then tests for that implementation are\n    /// skipped.\n    pub(crate) fn run(self) {\n        if let Some(mut fwd) = self.fwd {\n            for seed in SEEDS.iter() {\n                for t in seed.generate() {\n                    match fwd(&t.haystack, &t.needle, t.index1, t.index2) {\n                        None => continue,\n                        Some(result) => {\n                            assert_eq!(\n                                t.fwd, result,\n                                \"FORWARD, needle: {:?}, haystack: {:?}, \\\n                                 index1: {:?}, index2: {:?}\",\n                                t.needle, t.haystack, t.index1, t.index2,\n                            )\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    /// Set the implementation for forward \"packed pair\" substring search.\n    ///\n    /// If the closure returns `None`, then it is assumed that the given\n    /// test cannot be applied to the particular implementation and it is\n    /// skipped. For example, if a particular implementation only supports\n    /// needles or haystacks for some minimum length.\n    ///\n    /// If this is not set, then forward \"packed pair\" search is not tested.\n    pub(crate) fn fwd(\n        mut self,\n        search: impl FnMut(&[u8], &[u8], u8, u8) -> Option<Option<usize>> + 'static,\n    ) -> Runner {\n        self.fwd = Some(Box::new(search));\n        self\n    }\n}\n\n/// A test that represents the input and expected output to a \"packed pair\"\n/// search function. The test should be able to run with any \"packed pair\"\n/// implementation and get the expected output.\nstruct Test {\n    haystack: Vec<u8>,\n    needle: Vec<u8>,\n    index1: u8,\n    index2: u8,\n    fwd: Option<usize>,\n}\n\nimpl Test {\n    /// Create a new \"packed pair\" test from a seed and some given offsets to\n    /// the pair of bytes to use as a predicate in the seed's needle.\n    ///\n    /// If a valid test could not be constructed, then None is returned.\n    /// (Currently, we take the approach of massaging tests to be valid\n    /// instead of rejecting them outright.)\n    fn new(\n        seed: Seed,\n        index1: usize,\n        index2: usize,\n        haystack_len: usize,\n        needle_len: usize,\n        fwd: Option<usize>,\n    ) -> Option<Test> {\n        let mut index1: u8 = index1.try_into().unwrap();\n        let mut index2: u8 = index2.try_into().unwrap();\n        // The '#' byte is never used in a haystack (unless we're expecting\n        // a match), while the '@' byte is never used in a needle.\n        let mut haystack = vec![b'@'; haystack_len];\n        let mut needle = vec![b'#'; needle_len];\n        needle[0] = seed.first;\n        needle[index1 as usize] = seed.index1;\n        needle[index2 as usize] = seed.index2;\n        // If we're expecting a match, then make sure the needle occurs\n        // in the haystack at the expected position.\n        if let Some(i) = fwd {\n            haystack[i..i + needle.len()].copy_from_slice(&needle);\n        }\n        // If the operations above lead to rare offsets pointing to the\n        // non-first occurrence of a byte, then adjust it. This might lead\n        // to redundant tests, but it's simpler than trying to change the\n        // generation process I think.\n        if let Some(i) = crate::memchr(seed.index1, &needle) {\n            index1 = u8::try_from(i).unwrap();\n        }\n        if let Some(i) = crate::memchr(seed.index2, &needle) {\n            index2 = u8::try_from(i).unwrap();\n        }\n        Some(Test { haystack, needle, index1, index2, fwd })\n    }\n}\n\n/// Data that describes a single prefilter test seed.\n#[derive(Clone, Copy)]\nstruct Seed {\n    first: u8,\n    index1: u8,\n    index2: u8,\n}\n\nimpl Seed {\n    const NEEDLE_LENGTH_LIMIT: usize = {\n        #[cfg(not(miri))]\n        {\n            33\n        }\n        #[cfg(miri)]\n        {\n            5\n        }\n    };\n\n    const HAYSTACK_LENGTH_LIMIT: usize = {\n        #[cfg(not(miri))]\n        {\n            65\n        }\n        #[cfg(miri)]\n        {\n            8\n        }\n    };\n\n    /// Generate a series of prefilter tests from this seed.\n    fn generate(self) -> impl Iterator<Item = Test> {\n        let len_start = 2;\n        // The iterator below generates *a lot* of tests. The number of\n        // tests was chosen somewhat empirically to be \"bearable\" when\n        // running the test suite.\n        //\n        // We use an iterator here because the collective haystacks of all\n        // these test cases add up to enough memory to OOM a conservative\n        // sandbox or a small laptop.\n        (len_start..=Seed::NEEDLE_LENGTH_LIMIT).flat_map(move |needle_len| {\n            let index_start = len_start - 1;\n            (index_start..needle_len).flat_map(move |index1| {\n                (index1..needle_len).flat_map(move |index2| {\n                    (needle_len..=Seed::HAYSTACK_LENGTH_LIMIT).flat_map(\n                        move |haystack_len| {\n                            Test::new(\n                                self,\n                                index1,\n                                index2,\n                                haystack_len,\n                                needle_len,\n                                None,\n                            )\n                            .into_iter()\n                            .chain(\n                                (0..=(haystack_len - needle_len)).flat_map(\n                                    move |output| {\n                                        Test::new(\n                                            self,\n                                            index1,\n                                            index2,\n                                            haystack_len,\n                                            needle_len,\n                                            Some(output),\n                                        )\n                                    },\n                                ),\n                            )\n                        },\n                    )\n                })\n            })\n        })\n    }\n}\n"
  },
  {
    "path": "src/tests/substring/mod.rs",
    "content": "/*!\nThis module defines tests and test helpers for substring implementations.\n*/\n\nuse alloc::{\n    boxed::Box,\n    format,\n    string::{String, ToString},\n};\n\npub(crate) mod naive;\n#[macro_use]\npub(crate) mod prop;\n\nconst SEEDS: &'static [Seed] = &[\n    Seed::new(\"\", \"\", Some(0), Some(0)),\n    Seed::new(\"\", \"a\", Some(0), Some(1)),\n    Seed::new(\"\", \"ab\", Some(0), Some(2)),\n    Seed::new(\"\", \"abc\", Some(0), Some(3)),\n    Seed::new(\"a\", \"\", None, None),\n    Seed::new(\"a\", \"a\", Some(0), Some(0)),\n    Seed::new(\"a\", \"aa\", Some(0), Some(1)),\n    Seed::new(\"a\", \"ba\", Some(1), Some(1)),\n    Seed::new(\"a\", \"bba\", Some(2), Some(2)),\n    Seed::new(\"a\", \"bbba\", Some(3), Some(3)),\n    Seed::new(\"a\", \"bbbab\", Some(3), Some(3)),\n    Seed::new(\"a\", \"bbbabb\", Some(3), Some(3)),\n    Seed::new(\"a\", \"bbbabbb\", Some(3), Some(3)),\n    Seed::new(\"a\", \"bbbbbb\", None, None),\n    Seed::new(\"ab\", \"\", None, None),\n    Seed::new(\"ab\", \"a\", None, None),\n    Seed::new(\"ab\", \"b\", None, None),\n    Seed::new(\"ab\", \"ab\", Some(0), Some(0)),\n    Seed::new(\"ab\", \"aab\", Some(1), Some(1)),\n    Seed::new(\"ab\", \"aaab\", Some(2), Some(2)),\n    Seed::new(\"ab\", \"abaab\", Some(0), Some(3)),\n    Seed::new(\"ab\", \"baaab\", Some(3), Some(3)),\n    Seed::new(\"ab\", \"acb\", None, None),\n    Seed::new(\"ab\", \"abba\", Some(0), Some(0)),\n    Seed::new(\"abc\", \"ab\", None, None),\n    Seed::new(\"abc\", \"abc\", Some(0), Some(0)),\n    Seed::new(\"abc\", \"abcz\", Some(0), Some(0)),\n    Seed::new(\"abc\", \"abczz\", Some(0), Some(0)),\n    Seed::new(\"abc\", \"zabc\", Some(1), Some(1)),\n    Seed::new(\"abc\", \"zzabc\", Some(2), Some(2)),\n    Seed::new(\"abc\", \"azbc\", None, None),\n    Seed::new(\"abc\", \"abzc\", None, None),\n    Seed::new(\"abczdef\", \"abczdefzzzzzzzzzzzzzzzzzzzz\", Some(0), Some(0)),\n    Seed::new(\"abczdef\", \"zzzzzzzzzzzzzzzzzzzzabczdef\", Some(20), Some(20)),\n    Seed::new(\n        \"xyz\",\n        \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxyz\",\n        Some(32),\n        Some(32),\n    ),\n    Seed::new(\"\\u{0}\\u{15}\", \"\\u{0}\\u{15}\\u{15}\\u{0}\", Some(0), Some(0)),\n    Seed::new(\"\\u{0}\\u{1e}\", \"\\u{1e}\\u{0}\", None, None),\n];\n\n/// Runs a host of substring search tests.\n///\n/// This has support for \"partial\" substring search implementations only work\n/// for a subset of needles/haystacks. For example, the \"packed pair\" substring\n/// search implementation only works for haystacks of some minimum length based\n/// of the pair of bytes selected and the size of the vector used.\npub(crate) struct Runner {\n    fwd: Option<\n        Box<dyn FnMut(&[u8], &[u8]) -> Option<Option<usize>> + 'static>,\n    >,\n    rev: Option<\n        Box<dyn FnMut(&[u8], &[u8]) -> Option<Option<usize>> + 'static>,\n    >,\n}\n\nimpl Runner {\n    /// Create a new test runner for forward and reverse substring search\n    /// implementations.\n    pub(crate) fn new() -> Runner {\n        Runner { fwd: None, rev: None }\n    }\n\n    /// Run all tests. This panics on the first failure.\n    ///\n    /// If the implementation being tested returns `None` for a particular\n    /// haystack/needle combination, then that test is skipped.\n    ///\n    /// This runs tests on both the forward and reverse implementations given.\n    /// If either (or both) are missing, then tests for that implementation are\n    /// skipped.\n    pub(crate) fn run(self) {\n        if let Some(mut fwd) = self.fwd {\n            for seed in SEEDS.iter() {\n                for t in seed.generate() {\n                    match fwd(t.haystack.as_bytes(), t.needle.as_bytes()) {\n                        None => continue,\n                        Some(result) => {\n                            assert_eq!(\n                                t.fwd, result,\n                                \"FORWARD, needle: {:?}, haystack: {:?}\",\n                                t.needle, t.haystack,\n                            );\n                        }\n                    }\n                }\n            }\n        }\n        if let Some(mut rev) = self.rev {\n            for seed in SEEDS.iter() {\n                for t in seed.generate() {\n                    match rev(t.haystack.as_bytes(), t.needle.as_bytes()) {\n                        None => continue,\n                        Some(result) => {\n                            assert_eq!(\n                                t.rev, result,\n                                \"REVERSE, needle: {:?}, haystack: {:?}\",\n                                t.needle, t.haystack,\n                            );\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    /// Set the implementation for forward substring search.\n    ///\n    /// If the closure returns `None`, then it is assumed that the given\n    /// test cannot be applied to the particular implementation and it is\n    /// skipped. For example, if a particular implementation only supports\n    /// needles or haystacks for some minimum length.\n    ///\n    /// If this is not set, then forward substring search is not tested.\n    pub(crate) fn fwd(\n        mut self,\n        search: impl FnMut(&[u8], &[u8]) -> Option<Option<usize>> + 'static,\n    ) -> Runner {\n        self.fwd = Some(Box::new(search));\n        self\n    }\n\n    /// Set the implementation for reverse substring search.\n    ///\n    /// If the closure returns `None`, then it is assumed that the given\n    /// test cannot be applied to the particular implementation and it is\n    /// skipped. For example, if a particular implementation only supports\n    /// needles or haystacks for some minimum length.\n    ///\n    /// If this is not set, then reverse substring search is not tested.\n    pub(crate) fn rev(\n        mut self,\n        search: impl FnMut(&[u8], &[u8]) -> Option<Option<usize>> + 'static,\n    ) -> Runner {\n        self.rev = Some(Box::new(search));\n        self\n    }\n}\n\n/// A single substring test for forward and reverse searches.\n#[derive(Clone, Debug)]\nstruct Test {\n    needle: String,\n    haystack: String,\n    fwd: Option<usize>,\n    rev: Option<usize>,\n}\n\n/// A single substring test for forward and reverse searches.\n///\n/// Each seed is valid on its own, but it also serves as a starting point\n/// to generate more tests. Namely, we pad out the haystacks with other\n/// characters so that we get more complete coverage. This is especially useful\n/// for testing vector algorithms that tend to have weird special cases for\n/// alignment and loop unrolling.\n///\n/// Padding works by assuming certain characters never otherwise appear in a\n/// needle or a haystack. Neither should contain a `#` character.\n#[derive(Clone, Copy, Debug)]\nstruct Seed {\n    needle: &'static str,\n    haystack: &'static str,\n    fwd: Option<usize>,\n    rev: Option<usize>,\n}\n\nimpl Seed {\n    const MAX_PAD: usize = 34;\n\n    const fn new(\n        needle: &'static str,\n        haystack: &'static str,\n        fwd: Option<usize>,\n        rev: Option<usize>,\n    ) -> Seed {\n        Seed { needle, haystack, fwd, rev }\n    }\n\n    fn generate(self) -> impl Iterator<Item = Test> {\n        assert!(!self.needle.contains('#'), \"needle must not contain '#'\");\n        assert!(!self.haystack.contains('#'), \"haystack must not contain '#'\");\n        (0..=Seed::MAX_PAD)\n            // Generate tests for padding at the beginning of haystack.\n            .map(move |pad| {\n                let needle = self.needle.to_string();\n                let prefix = \"#\".repeat(pad);\n                let haystack = format!(\"{}{}\", prefix, self.haystack);\n                let fwd = if needle.is_empty() {\n                    Some(0)\n                } else {\n                    self.fwd.map(|i| pad + i)\n                };\n                let rev = if needle.is_empty() {\n                    Some(haystack.len())\n                } else {\n                    self.rev.map(|i| pad + i)\n                };\n                Test { needle, haystack, fwd, rev }\n            })\n            // Generate tests for padding at the end of haystack.\n            .chain((1..=Seed::MAX_PAD).map(move |pad| {\n                let needle = self.needle.to_string();\n                let suffix = \"#\".repeat(pad);\n                let haystack = format!(\"{}{}\", self.haystack, suffix);\n                let fwd = if needle.is_empty() { Some(0) } else { self.fwd };\n                let rev = if needle.is_empty() {\n                    Some(haystack.len())\n                } else {\n                    self.rev\n                };\n                Test { needle, haystack, fwd, rev }\n            }))\n    }\n}\n"
  },
  {
    "path": "src/tests/substring/naive.rs",
    "content": "/*!\nThis module defines \"naive\" implementations of substring search.\n\nThese are sometimes useful to compare with \"real\" substring implementations.\nThe idea is that they are so simple that they are unlikely to be incorrect.\n*/\n\n/// Naively search forwards for the given needle in the given haystack.\npub(crate) fn find(haystack: &[u8], needle: &[u8]) -> Option<usize> {\n    let end = haystack.len().checked_sub(needle.len()).map_or(0, |i| i + 1);\n    for i in 0..end {\n        if needle == &haystack[i..i + needle.len()] {\n            return Some(i);\n        }\n    }\n    None\n}\n\n/// Naively search in reverse for the given needle in the given haystack.\npub(crate) fn rfind(haystack: &[u8], needle: &[u8]) -> Option<usize> {\n    let end = haystack.len().checked_sub(needle.len()).map_or(0, |i| i + 1);\n    for i in (0..end).rev() {\n        if needle == &haystack[i..i + needle.len()] {\n            return Some(i);\n        }\n    }\n    None\n}\n\n#[cfg(test)]\nmod tests {\n    use crate::tests::substring;\n\n    use super::*;\n\n    #[test]\n    fn forward() {\n        substring::Runner::new().fwd(|h, n| Some(find(h, n))).run()\n    }\n\n    #[test]\n    fn reverse() {\n        substring::Runner::new().rev(|h, n| Some(rfind(h, n))).run()\n    }\n}\n"
  },
  {
    "path": "src/tests/substring/prop.rs",
    "content": "/*!\nThis module defines a few quickcheck properties for substring search.\n\nIt also provides a forward and reverse macro for conveniently defining\nquickcheck tests that run these properties over any substring search\nimplementation.\n*/\n\nuse crate::tests::substring::naive;\n\n/// $fwd is a `impl FnMut(haystack, needle) -> Option<Option<usize>>`. When the\n/// routine returns `None`, then it's skipped, which is useful for substring\n/// implementations that don't work for all inputs.\n#[macro_export]\nmacro_rules! define_substring_forward_quickcheck {\n    ($fwd:expr) => {\n        #[cfg(not(miri))]\n        quickcheck::quickcheck! {\n            fn qc_fwd_prefix_is_substring(bs: alloc::vec::Vec<u8>) -> bool {\n                crate::tests::substring::prop::prefix_is_substring(&bs, $fwd)\n            }\n\n            fn qc_fwd_suffix_is_substring(bs: alloc::vec::Vec<u8>) -> bool {\n                crate::tests::substring::prop::suffix_is_substring(&bs, $fwd)\n            }\n\n            fn qc_fwd_matches_naive(\n                haystack: alloc::vec::Vec<u8>,\n                needle: alloc::vec::Vec<u8>\n            ) -> bool {\n                crate::tests::substring::prop::same_as_naive(\n                    false,\n                    &haystack,\n                    &needle,\n                    $fwd,\n                )\n            }\n        }\n    };\n}\n\n/// $rev is a `impl FnMut(haystack, needle) -> Option<Option<usize>>`. When the\n/// routine returns `None`, then it's skipped, which is useful for substring\n/// implementations that don't work for all inputs.\n#[macro_export]\nmacro_rules! define_substring_reverse_quickcheck {\n    ($rev:expr) => {\n        #[cfg(not(miri))]\n        quickcheck::quickcheck! {\n            fn qc_rev_prefix_is_substring(bs: alloc::vec::Vec<u8>) -> bool {\n                crate::tests::substring::prop::prefix_is_substring(&bs, $rev)\n            }\n\n            fn qc_rev_suffix_is_substring(bs: alloc::vec::Vec<u8>) -> bool {\n                crate::tests::substring::prop::suffix_is_substring(&bs, $rev)\n            }\n\n            fn qc_rev_matches_naive(\n                haystack: alloc::vec::Vec<u8>,\n                needle: alloc::vec::Vec<u8>\n            ) -> bool {\n                crate::tests::substring::prop::same_as_naive(\n                    true,\n                    &haystack,\n                    &needle,\n                    $rev,\n                )\n            }\n        }\n    };\n}\n\n/// Check that every prefix of the given byte string is a substring.\npub(crate) fn prefix_is_substring(\n    bs: &[u8],\n    mut search: impl FnMut(&[u8], &[u8]) -> Option<Option<usize>>,\n) -> bool {\n    for i in 0..bs.len().saturating_sub(1) {\n        let prefix = &bs[..i];\n        let result = match search(bs, prefix) {\n            None => continue,\n            Some(result) => result,\n        };\n        if !result.is_some() {\n            return false;\n        }\n    }\n    true\n}\n\n/// Check that every suffix of the given byte string is a substring.\npub(crate) fn suffix_is_substring(\n    bs: &[u8],\n    mut search: impl FnMut(&[u8], &[u8]) -> Option<Option<usize>>,\n) -> bool {\n    for i in 0..bs.len().saturating_sub(1) {\n        let suffix = &bs[i..];\n        let result = match search(bs, suffix) {\n            None => continue,\n            Some(result) => result,\n        };\n        if !result.is_some() {\n            return false;\n        }\n    }\n    true\n}\n\n/// Check that naive substring search matches the result of the given search\n/// algorithm.\npub(crate) fn same_as_naive(\n    reverse: bool,\n    haystack: &[u8],\n    needle: &[u8],\n    mut search: impl FnMut(&[u8], &[u8]) -> Option<Option<usize>>,\n) -> bool {\n    let result = match search(haystack, needle) {\n        None => return true,\n        Some(result) => result,\n    };\n    if reverse {\n        result == naive::rfind(haystack, needle)\n    } else {\n        result == naive::find(haystack, needle)\n    }\n}\n"
  },
  {
    "path": "src/vector.rs",
    "content": "/// A trait for describing vector operations used by vectorized searchers.\n///\n/// The trait is highly constrained to low level vector operations needed.\n/// In general, it was invented mostly to be generic over x86's __m128i and\n/// __m256i types. At time of writing, it also supports wasm and aarch64\n/// 128-bit vector types as well.\n///\n/// # Safety\n///\n/// All methods are not safe since they are intended to be implemented using\n/// vendor intrinsics, which are also not safe. Callers must ensure that the\n/// appropriate target features are enabled in the calling function, and that\n/// the current CPU supports them. All implementations should avoid marking the\n/// routines with #[target_feature] and instead mark them as #[inline(always)]\n/// to ensure they get appropriately inlined. (inline(always) cannot be used\n/// with target_feature.)\npub(crate) trait Vector: Copy + core::fmt::Debug {\n    /// The number of bytes in the vector. That is, this is the size of the\n    /// vector in memory.\n    const BYTES: usize;\n    /// The bits that must be zero in order for a `*const u8` pointer to be\n    /// correctly aligned to read vector values.\n    const ALIGN: usize;\n\n    /// The type of the value returned by `Vector::movemask`.\n    ///\n    /// This supports abstracting over the specific representation used in\n    /// order to accommodate different representations in different ISAs.\n    type Mask: MoveMask;\n\n    /// Create a vector with 8-bit lanes with the given byte repeated into each\n    /// lane.\n    unsafe fn splat(byte: u8) -> Self;\n\n    /// Read a vector-size number of bytes from the given pointer. The pointer\n    /// must be aligned to the size of the vector.\n    ///\n    /// # Safety\n    ///\n    /// Callers must guarantee that at least `BYTES` bytes are readable from\n    /// `data` and that `data` is aligned to a `BYTES` boundary.\n    unsafe fn load_aligned(data: *const u8) -> Self;\n\n    /// Read a vector-size number of bytes from the given pointer. The pointer\n    /// does not need to be aligned.\n    ///\n    /// # Safety\n    ///\n    /// Callers must guarantee that at least `BYTES` bytes are readable from\n    /// `data`.\n    unsafe fn load_unaligned(data: *const u8) -> Self;\n\n    /// _mm_movemask_epi8 or _mm256_movemask_epi8\n    unsafe fn movemask(self) -> Self::Mask;\n    /// _mm_cmpeq_epi8 or _mm256_cmpeq_epi8\n    unsafe fn cmpeq(self, vector2: Self) -> Self;\n    /// _mm_and_si128 or _mm256_and_si256\n    unsafe fn and(self, vector2: Self) -> Self;\n    /// _mm_or or _mm256_or_si256\n    unsafe fn or(self, vector2: Self) -> Self;\n    /// Returns true if and only if `Self::movemask` would return a mask that\n    /// contains at least one non-zero bit.\n    unsafe fn movemask_will_have_non_zero(self) -> bool {\n        self.movemask().has_non_zero()\n    }\n}\n\n/// A trait that abstracts over a vector-to-scalar operation called\n/// \"move mask.\"\n///\n/// On x86-64, this is `_mm_movemask_epi8` for SSE2 and `_mm256_movemask_epi8`\n/// for AVX2. It takes a vector of `u8` lanes and returns a scalar where the\n/// `i`th bit is set if and only if the most significant bit in the `i`th lane\n/// of the vector is set. The simd128 ISA for wasm32 also supports this\n/// exact same operation natively.\n///\n/// ... But aarch64 doesn't. So we have to fake it with more instructions and\n/// a slightly different representation. We could do extra work to unify the\n/// representations, but then would require additional costs in the hot path\n/// for `memchr` and `packedpair`. So instead, we abstraction over the specific\n/// representation with this trait and define the operations we actually need.\npub(crate) trait MoveMask: Copy + core::fmt::Debug {\n    /// Return a mask that is all zeros except for the least significant `n`\n    /// lanes in a corresponding vector.\n    fn all_zeros_except_least_significant(n: usize) -> Self;\n\n    /// Returns true if and only if this mask has a a non-zero bit anywhere.\n    fn has_non_zero(self) -> bool;\n\n    /// Returns the number of bits set to 1 in this mask.\n    fn count_ones(self) -> usize;\n\n    /// Does a bitwise `and` operation between `self` and `other`.\n    fn and(self, other: Self) -> Self;\n\n    /// Does a bitwise `or` operation between `self` and `other`.\n    fn or(self, other: Self) -> Self;\n\n    /// Returns a mask that is equivalent to `self` but with the least\n    /// significant 1-bit set to 0.\n    fn clear_least_significant_bit(self) -> Self;\n\n    /// Returns the offset of the first non-zero lane this mask represents.\n    fn first_offset(self) -> usize;\n\n    /// Returns the offset of the last non-zero lane this mask represents.\n    fn last_offset(self) -> usize;\n}\n\n/// This is a \"sensible\" movemask implementation where each bit represents\n/// whether the most significant bit is set in each corresponding lane of a\n/// vector. This is used on x86-64 and wasm, but such a mask is more expensive\n/// to get on aarch64 so we use something a little different.\n///\n/// We call this \"sensible\" because this is what we get using native sse/avx\n/// movemask instructions. But neon has no such native equivalent.\n#[derive(Clone, Copy, Debug)]\npub(crate) struct SensibleMoveMask(u32);\n\nimpl SensibleMoveMask {\n    /// Get the mask in a form suitable for computing offsets.\n    ///\n    /// Basically, this normalizes to little endian. On big endian, this swaps\n    /// the bytes.\n    #[inline(always)]\n    fn get_for_offset(self) -> u32 {\n        #[cfg(target_endian = \"big\")]\n        {\n            self.0.swap_bytes()\n        }\n        #[cfg(target_endian = \"little\")]\n        {\n            self.0\n        }\n    }\n}\n\nimpl MoveMask for SensibleMoveMask {\n    #[inline(always)]\n    fn all_zeros_except_least_significant(n: usize) -> SensibleMoveMask {\n        debug_assert!(n < 32);\n        SensibleMoveMask(!((1 << n) - 1))\n    }\n\n    #[inline(always)]\n    fn has_non_zero(self) -> bool {\n        self.0 != 0\n    }\n\n    #[inline(always)]\n    fn count_ones(self) -> usize {\n        self.0.count_ones() as usize\n    }\n\n    #[inline(always)]\n    fn and(self, other: SensibleMoveMask) -> SensibleMoveMask {\n        SensibleMoveMask(self.0 & other.0)\n    }\n\n    #[inline(always)]\n    fn or(self, other: SensibleMoveMask) -> SensibleMoveMask {\n        SensibleMoveMask(self.0 | other.0)\n    }\n\n    #[inline(always)]\n    fn clear_least_significant_bit(self) -> SensibleMoveMask {\n        SensibleMoveMask(self.0 & (self.0 - 1))\n    }\n\n    #[inline(always)]\n    fn first_offset(self) -> usize {\n        // We are dealing with little endian here (and if we aren't, we swap\n        // the bytes so we are in practice), where the most significant byte\n        // is at a higher address. That means the least significant bit that\n        // is set corresponds to the position of our first matching byte.\n        // That position corresponds to the number of zeros after the least\n        // significant bit.\n        self.get_for_offset().trailing_zeros() as usize\n    }\n\n    #[inline(always)]\n    fn last_offset(self) -> usize {\n        // We are dealing with little endian here (and if we aren't, we swap\n        // the bytes so we are in practice), where the most significant byte is\n        // at a higher address. That means the most significant bit that is set\n        // corresponds to the position of our last matching byte. The position\n        // from the end of the mask is therefore the number of leading zeros\n        // in a 32 bit integer, and the position from the start of the mask is\n        // therefore 32 - (leading zeros) - 1.\n        32 - self.get_for_offset().leading_zeros() as usize - 1\n    }\n}\n\n#[cfg(target_arch = \"x86_64\")]\nmod x86sse2 {\n    use core::arch::x86_64::*;\n\n    use super::{SensibleMoveMask, Vector};\n\n    impl Vector for __m128i {\n        const BYTES: usize = 16;\n        const ALIGN: usize = Self::BYTES - 1;\n\n        type Mask = SensibleMoveMask;\n\n        #[inline(always)]\n        unsafe fn splat(byte: u8) -> __m128i {\n            _mm_set1_epi8(byte as i8)\n        }\n\n        #[inline(always)]\n        unsafe fn load_aligned(data: *const u8) -> __m128i {\n            _mm_load_si128(data as *const __m128i)\n        }\n\n        #[inline(always)]\n        unsafe fn load_unaligned(data: *const u8) -> __m128i {\n            _mm_loadu_si128(data as *const __m128i)\n        }\n\n        #[inline(always)]\n        unsafe fn movemask(self) -> SensibleMoveMask {\n            SensibleMoveMask(_mm_movemask_epi8(self) as u32)\n        }\n\n        #[inline(always)]\n        unsafe fn cmpeq(self, vector2: Self) -> __m128i {\n            _mm_cmpeq_epi8(self, vector2)\n        }\n\n        #[inline(always)]\n        unsafe fn and(self, vector2: Self) -> __m128i {\n            _mm_and_si128(self, vector2)\n        }\n\n        #[inline(always)]\n        unsafe fn or(self, vector2: Self) -> __m128i {\n            _mm_or_si128(self, vector2)\n        }\n    }\n}\n\n#[cfg(target_arch = \"x86_64\")]\nmod x86avx2 {\n    use core::arch::x86_64::*;\n\n    use super::{SensibleMoveMask, Vector};\n\n    impl Vector for __m256i {\n        const BYTES: usize = 32;\n        const ALIGN: usize = Self::BYTES - 1;\n\n        type Mask = SensibleMoveMask;\n\n        #[inline(always)]\n        unsafe fn splat(byte: u8) -> __m256i {\n            _mm256_set1_epi8(byte as i8)\n        }\n\n        #[inline(always)]\n        unsafe fn load_aligned(data: *const u8) -> __m256i {\n            _mm256_load_si256(data as *const __m256i)\n        }\n\n        #[inline(always)]\n        unsafe fn load_unaligned(data: *const u8) -> __m256i {\n            _mm256_loadu_si256(data as *const __m256i)\n        }\n\n        #[inline(always)]\n        unsafe fn movemask(self) -> SensibleMoveMask {\n            SensibleMoveMask(_mm256_movemask_epi8(self) as u32)\n        }\n\n        #[inline(always)]\n        unsafe fn cmpeq(self, vector2: Self) -> __m256i {\n            _mm256_cmpeq_epi8(self, vector2)\n        }\n\n        #[inline(always)]\n        unsafe fn and(self, vector2: Self) -> __m256i {\n            _mm256_and_si256(self, vector2)\n        }\n\n        #[inline(always)]\n        unsafe fn or(self, vector2: Self) -> __m256i {\n            _mm256_or_si256(self, vector2)\n        }\n    }\n}\n\n#[cfg(target_arch = \"aarch64\")]\nmod aarch64neon {\n    use core::arch::aarch64::*;\n\n    use super::{MoveMask, Vector};\n\n    impl Vector for uint8x16_t {\n        const BYTES: usize = 16;\n        const ALIGN: usize = Self::BYTES - 1;\n\n        type Mask = NeonMoveMask;\n\n        #[inline(always)]\n        unsafe fn splat(byte: u8) -> uint8x16_t {\n            vdupq_n_u8(byte)\n        }\n\n        #[inline(always)]\n        unsafe fn load_aligned(data: *const u8) -> uint8x16_t {\n            // I've tried `data.cast::<uint8x16_t>().read()` instead, but\n            // couldn't observe any benchmark differences.\n            Self::load_unaligned(data)\n        }\n\n        #[inline(always)]\n        unsafe fn load_unaligned(data: *const u8) -> uint8x16_t {\n            vld1q_u8(data)\n        }\n\n        #[inline(always)]\n        unsafe fn movemask(self) -> NeonMoveMask {\n            let asu16s = vreinterpretq_u16_u8(self);\n            let mask = vshrn_n_u16(asu16s, 4);\n            let asu64 = vreinterpret_u64_u8(mask);\n            let scalar64 = vget_lane_u64(asu64, 0);\n            NeonMoveMask(scalar64 & 0x8888888888888888)\n        }\n\n        #[inline(always)]\n        unsafe fn cmpeq(self, vector2: Self) -> uint8x16_t {\n            vceqq_u8(self, vector2)\n        }\n\n        #[inline(always)]\n        unsafe fn and(self, vector2: Self) -> uint8x16_t {\n            vandq_u8(self, vector2)\n        }\n\n        #[inline(always)]\n        unsafe fn or(self, vector2: Self) -> uint8x16_t {\n            vorrq_u8(self, vector2)\n        }\n\n        /// This is the only interesting implementation of this routine.\n        /// Basically, instead of doing the \"shift right narrow\" dance, we use\n        /// adjacent folding max to determine whether there are any non-zero\n        /// bytes in our mask. If there are, *then* we'll do the \"shift right\n        /// narrow\" dance. In benchmarks, this does lead to slightly better\n        /// throughput, but the win doesn't appear huge.\n        #[inline(always)]\n        unsafe fn movemask_will_have_non_zero(self) -> bool {\n            let low = vreinterpretq_u64_u8(vpmaxq_u8(self, self));\n            vgetq_lane_u64(low, 0) != 0\n        }\n    }\n\n    /// Neon doesn't have a `movemask` that works like the one in x86-64, so we\n    /// wind up using a different method[1]. The different method also produces\n    /// a mask, but 4 bits are set in the neon case instead of a single bit set\n    /// in the x86-64 case. We do an extra step to zero out 3 of the 4 bits,\n    /// but we still wind up with at least 3 zeroes between each set bit. This\n    /// generally means that we need to do some division by 4 before extracting\n    /// offsets.\n    ///\n    /// In fact, the existence of this type is the entire reason that we have\n    /// the `MoveMask` trait in the first place. This basically lets us keep\n    /// the different representations of masks without being forced to unify\n    /// them into a single representation, which could result in extra and\n    /// unnecessary work.\n    ///\n    /// [1]: https://community.arm.com/arm-community-blogs/b/infrastructure-solutions-blog/posts/porting-x86-vector-bitmask-optimizations-to-arm-neon\n    #[derive(Clone, Copy, Debug)]\n    pub(crate) struct NeonMoveMask(u64);\n\n    impl NeonMoveMask {\n        /// Get the mask in a form suitable for computing offsets.\n        ///\n        /// The mask is always already in host-endianness, so this is a no-op.\n        #[inline(always)]\n        fn get_for_offset(self) -> u64 {\n            self.0\n        }\n    }\n\n    impl MoveMask for NeonMoveMask {\n        #[inline(always)]\n        fn all_zeros_except_least_significant(n: usize) -> NeonMoveMask {\n            debug_assert!(n < 16);\n            NeonMoveMask(!(((1 << n) << 2) - 1))\n        }\n\n        #[inline(always)]\n        fn has_non_zero(self) -> bool {\n            self.0 != 0\n        }\n\n        #[inline(always)]\n        fn count_ones(self) -> usize {\n            self.0.count_ones() as usize\n        }\n\n        #[inline(always)]\n        fn and(self, other: NeonMoveMask) -> NeonMoveMask {\n            NeonMoveMask(self.0 & other.0)\n        }\n\n        #[inline(always)]\n        fn or(self, other: NeonMoveMask) -> NeonMoveMask {\n            NeonMoveMask(self.0 | other.0)\n        }\n\n        #[inline(always)]\n        fn clear_least_significant_bit(self) -> NeonMoveMask {\n            NeonMoveMask(self.0 & (self.0 - 1))\n        }\n\n        #[inline(always)]\n        fn first_offset(self) -> usize {\n            // We are dealing with little endian here (and if we aren't,\n            // we swap the bytes so we are in practice), where the most\n            // significant byte is at a higher address. That means the least\n            // significant bit that is set corresponds to the position of our\n            // first matching byte. That position corresponds to the number of\n            // zeros after the least significant bit.\n            //\n            // Note that unlike `SensibleMoveMask`, this mask has its bits\n            // spread out over 64 bits instead of 16 bits (for a 128 bit\n            // vector). Namely, where as x86-64 will turn\n            //\n            //   0x00 0xFF 0x00 0x00 0xFF\n            //\n            // into 10010, our neon approach will turn it into\n            //\n            //   10000000000010000000\n            //\n            // And this happens because neon doesn't have a native `movemask`\n            // instruction, so we kind of fake it[1]. Thus, we divide the\n            // number of trailing zeros by 4 to get the \"real\" offset.\n            //\n            // [1]: https://community.arm.com/arm-community-blogs/b/infrastructure-solutions-blog/posts/porting-x86-vector-bitmask-optimizations-to-arm-neon\n            (self.get_for_offset().trailing_zeros() >> 2) as usize\n        }\n\n        #[inline(always)]\n        fn last_offset(self) -> usize {\n            // See comment in `first_offset` above. This is basically the same,\n            // but coming from the other direction.\n            16 - (self.get_for_offset().leading_zeros() >> 2) as usize - 1\n        }\n    }\n}\n\n#[cfg(all(target_arch = \"wasm32\", target_feature = \"simd128\"))]\nmod wasm_simd128 {\n    use core::arch::wasm32::*;\n\n    use super::{SensibleMoveMask, Vector};\n\n    impl Vector for v128 {\n        const BYTES: usize = 16;\n        const ALIGN: usize = Self::BYTES - 1;\n\n        type Mask = SensibleMoveMask;\n\n        #[inline(always)]\n        unsafe fn splat(byte: u8) -> v128 {\n            u8x16_splat(byte)\n        }\n\n        #[inline(always)]\n        unsafe fn load_aligned(data: *const u8) -> v128 {\n            *data.cast()\n        }\n\n        #[inline(always)]\n        unsafe fn load_unaligned(data: *const u8) -> v128 {\n            v128_load(data.cast())\n        }\n\n        #[inline(always)]\n        unsafe fn movemask(self) -> SensibleMoveMask {\n            SensibleMoveMask(u8x16_bitmask(self).into())\n        }\n\n        #[inline(always)]\n        unsafe fn cmpeq(self, vector2: Self) -> v128 {\n            u8x16_eq(self, vector2)\n        }\n\n        #[inline(always)]\n        unsafe fn and(self, vector2: Self) -> v128 {\n            v128_and(self, vector2)\n        }\n\n        #[inline(always)]\n        unsafe fn or(self, vector2: Self) -> v128 {\n            v128_or(self, vector2)\n        }\n    }\n}\n"
  }
]